diff --git a/pm4py/.gitattributes b/pm4py/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..2f04b7718640f864e916ca83c2a2e86c6f509355 --- /dev/null +++ b/pm4py/.gitattributes @@ -0,0 +1,37 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text +*.sqlite filter=lfs diff=lfs merge=lfs -text +*.xes.gz filter=lfs diff=lfs merge=lfs -text diff --git a/pm4py/.github/workflows/codeql-analysis.yml b/pm4py/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000000000000000000000000000000000000..de6350385e689e6f80f3b605a6be9ede209b87a8 --- /dev/null +++ b/pm4py/.github/workflows/codeql-analysis.yml @@ -0,0 +1,71 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ release ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ release ] + schedule: + - cron: '25 5 * * 4' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'python' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] + # Learn more: + # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/pm4py/.gitignore b/pm4py/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b079da3715840f474823a8bc435227f08147606d --- /dev/null +++ b/pm4py/.gitignore @@ -0,0 +1,139 @@ +/.idea +.vscode/ + +*.mps +*.sol +*debug.log* + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# Renovate bot +renovate.json5 diff --git a/pm4py/CHANGELOG.md b/pm4py/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..1302c71ab684d6fe14cd43cc2660ad3fdba3366f --- /dev/null +++ b/pm4py/CHANGELOG.md @@ -0,0 +1,3726 @@ +# Changelog of pm4py + + +## pm4py 2.7.12 (2024.03.XX) + +### Added + +### Changed + +### Deprecated + +### Fixed +* e3b8172e4c005dcb633c9018b9b9439d84580f7b + * fixing random variables support +* bb759da149b434d0e279256c8c6d397b06079729 + * fixing sampling + +### Removed + +### Other + +--- + +## pm4py 2.7.11 (2024.03.01) + +### Added +* 0fcb1dc2939db30b7129f62bda0d235bd5242428 + * improved string representation of hierarchical models +* 0b0d09226574916c5d33c000cbc2a4ffa0a13e7a + b56ff781c99ce3126c1ec45d502c16d1c2f3b0b6 + * BPMN layouting in the frontend +* b39a7326faf2afb55b8880ce420cdda4a03ffa5c + * activity split filter (Pandas dataframes) +* 6a7cfeaa06d405591d13b6055bf890b8b4a6b3b9 + * float dtype and padding in log_to_target transformaiton methods + +### Changed +* 56799b618ad1ab727705e24f40aa13a793552326 + * refactoring BPMN-GraphViz visualization method +* c56bd55b83133d231f37ac8c89190efb440bb826 + * moving hierarchical models indentation to separate class +* d865660c5370640b4c5c013239f6940f145d9e93 + * refactoring log-to-OCEL + +### Deprecated + +### Fixed +* c2278110acbbbf36e8fe5055e0b76f867e833da4 + * bug fix POWL package +* d36d0d2ff8133bc979638b7f3405f96225e06ced + * bug fix discover_dfg_clean +* 64ce3341d40c073f274bdda9842fd92a0798a33f + * fixed typing of get_variants method +* ffd0761e8f5490382b33de4fa8187f1ed80ce802 + * fixed stochastic Petri net PNML importing +* c9654d8089c5aa0e930ee932b222cc09be25d8a5 + * fixed typing of pm4py.filter-variants +* 8475c194929f74bf4e402b24c637299d8c28042a + * fixed export of multi-swimlanes BPMNs +* d32e236cc99ec1b5de198466fe0966752adeb805 + * fixed incongruency in BPMN visualizer +* b40821da2612ae1921aec30da2333dc4e1151f1a + * fixed exception handling in OpenAI requests +* e8f0b84bc7de65f090e0e96799486acaaad7572f + * fixed incongruency between filter on EventLog +* 771cfcd6f2321a9106781e15c97895b26d5acbf3 + * fixing behavior of between filter when act1 == act2 +* e1c84d7f6d6425f40a23ea3c539a0c110c331a3c + * ensuring float return for feature extraction methods in pm4py +* 1b5a2932a60131f648ae476e6b97230c241f5d6e + * fixing POWL visualization image importing + +### Removed + +### Other +* c4d24d54013e2a18856af840ffbad7c76e86c371 + 81fa8017fbd25352fd87961bc4dcc1406c4e0dda + * Process tree to POWL utility + +--- + + +## pm4py 2.7.10 (2024.01.29) + +### Added +* f5316b9e856e16a0a7a25c27f11b73546654c4e9 + * methods for simplicity and generalization in the simplified interface +* c874ba919de25a2a0a69bc1adb324a25484ddc07 + * key/mouse events logger for Windows with screenshots recording + +### Changed +* 1c93795884140f27d5eae5d2eade1823c93a92d2 + * refactoring Scikit-Learn usage throughout the project +* bd1ac4fd04019b3022bfff55553e590aefbd21cb + * refactoring NetworkX usage throughout the project + +### Deprecated + +### Fixed +* 25ca20af830df69a983c6fd53bb2e456ccc11c25 + * removed circular dependency on pm4py.util +* 0da8c5f04f89dab8b9f5a3d31d8f5beb927e71d4 + * fixing OCEL 2.0 support +* 7b2c8ffee70c94c1acce7c28a7b366d5ed95bb6b + * fixing TBR diagnostics computation + +### Removed + +### Other + + +--- + + +## pm4py 2.7.9.2 (2024.01.16) + +### Added + +### Changed +* ab48f194ed0bbcd864683d313285e0db6a3ae570 + * refactoring DECLARE discovery +* ba3dd14250f3b713c495833d1ed16d42efb74c7a + * moved LLM descriptions to separate methods + +### Deprecated + +### Fixed +* 99efc597545a1f0f717c90303db8ca3825062e63 + * bug fix DECLARE discovery +* 4e3cedf1dfdaa70da1e381930812676afc103b22 + * additional PNGs for POWL visualization + +### Removed + +### Other +* 73edc01f9e7d986d72dc90b88fe92c5265a5d09b + * utility to convert live event stream to static event stream +* 8ba3e4868b4da409f46559abbb716256517712ee + * annotating the SearchTuple alignments class with the description of its properties +* 847cf991df054edf81e2b13b70b0e6679a9a15ca + * check if get_best_worst_cost calculation is always needed + +--- + + +## pm4py 2.7.9.1 (2023.12.14) + +### Added +* efff63955c1dfd3a3c04c6bf5aecc53042da3b4c + 9ec7578c95d78f91c6c8fcb906f979b6e8680b10 + * description of POWL and process tree models + +### Changed +* 3173effdb98dfe37ca3b6770d55aadbbd61b6b7c + a48390b8be4495177d2e641fc6ae6e868f3544cb + 95853c91ed0c9dbba61fecedac2fd98c793b6933 + 864052795e24494023a8b0c76c342db7c8a9305c + abd315e4c37701dbbf540726496dfb45b3625992 + 979cc906c9da648face900141be5f355821ffe61 + 4feb5c2000ce82df38294ff3459a25e358d2e69e + b13ea6458bbea9cc4099109cc28978aa2513a394 + 293c282dd8a90eb89273f2f8b98b1279b6e46051 + c672a770bb1a7c58dee0f4f509a93126d0a6f11f + 5545895f299599799222ce90ff7b446caaf9e3bf + 6328037090236e6640a4efa51011e19001a5d300 + ef3de4c7b7803d80b8599d84426badca0c7dfc5d + * major refactoring pm4py +* 8f494f541b5337ae6abc152afea9b6f09b81fef9 + 691aa7d31ae401b16058220a656ffee89fc30eff + 6366dcb3bc08859d4f435b8ad44bdb38c515361d + * refactoring OpenAI connector +* 376996620052fc23586edc393c73a43288e64164 + * refactoring POWL class and methods + +### Deprecated + +### Fixed +* 093637828f08618f2d149145dc1740cc2b631ecd + * fixed BPMN 2.0 exporting (according to the specification) + +### Removed + +### Other +* f6d15493110e613321214fbf4465fc561e42a698 + * method to project DFG/edit distance alignments on log + +--- + + +## pm4py 2.7.9 (2023.11.20) + +### Added +* e5bb3b43b47217128763157c9e64ba6b39b1672f + * OCEL event types-to-object types visualizer +* be7e28440da6f69bfdad43b724931277f04efdbc + * NetworkX visualization utility +* a17bb8e103b3ee46e46bef17885149070bf7e048 + * Context-based activity label splitting approach (BPM 2023) +* 6583504c6056c43868fe1158744fcc7655270dec + * Filtering on trace segments +* 9dedaba837e561640a122e50927f7f5b13d4a334 + * Utility to get frequent trace segments +* 19c53e1fcf06c0566a3c697aec37f13345365d04 + * Utility for the computation of service times + +### Changed +* fb0d9fb049f128bd979c962db54e3a305ecf5f09 + * Refactoring Pandas calls in pm4py +* 36e19d3f48dabf03509cf87ae6508c0576b089b4 + c38d10574587a3efa21d521f25de40e5ade4409b + * adapt openai calls to v1 migration + +### Deprecated + +### Fixed + +### Removed + +### Other +* 19c53e1fcf06c0566a3c697aec37f13345365d04 + * refactored 'sojourn time' mis-spelling to 'service time' throughout the project + +--- + + +## pm4py 2.7.8.4 (2023.11.15) + +### Added + +### Changed +* a18ed64b90881e15d3ce561dcd7ecc0a56fe5039 + * refactor default XES importer variant specification +* b0d6fbd1c5c23506fb3648511326e83a3c3f89fe + * refactor default alignments variant specification +* 0b7489571184096bacd195dd824af7c88a57c551 + * refactoring examples (default image format specification) +* de7ab79e285ed5aeb4f4b447fd7f8f1eabb9669c + d6ef339b32c2e8439815ea589dab1bc0a9e5c851 + * refactoring unit tests entrypoint +* 47407dfdba5976abb78559072905745eb5d37e92 + 51993c9a2282f0096e113dfc76b76b46b608bd33 + 28f891287d0d61280fb745854c30dc7c301a4c36 + * small changes OCEL to NetworkX conversion + +### Deprecated + +### Fixed +* e74700dd9d8b965f7cfdb355d03cd582f8da4b2b + * fixed POWL objects conversion +* e56444ad44a94ece5bd239983165d0754b15a713 + 7205aeaa94ad885a9271c359780aa9fac00dee39 + * bug fix JSON-OCEL(2.0) importer/exporter + +### Removed + +### Other +* 911d5f8630504c3234b716713a58498ead38d2bb + * converting back NX DiGraph to OCEL/EventLog + +--- + + +## pm4py 2.7.8.3 (2023.11.09) + +### Added +* d06e2d36558e600208e182f096f07ea86923c1c4 + * RUSTXES importer variant +* 7026be7476ed34c138b1046781847cdd9e104715 + * POWL discovery and visualization in the simplified interface +* 40cd57230a5b0a9fd7821c71cbc2a17b0608e962 + * POWL parser from model string + +### Changed +* 3f45baf9c0730d90ab35bce4d715b67306b24168 + * artificial start/end activity symbols specification in the simplified interface +* 215d6a67065074fb516b397a6b9e018cb41cf114 + * ocel_to_nx is now OCEL 2.0 compliant + +### Deprecated + +### Fixed +* 2e5d06da05e8e961b3f99a0194bd8bf072ce1e32 + * fixed rebase with timestamp format specification +* 753202cee239e62e47a29fd1bc8658f8f36a39d1 + * removed warnings (deprecation) in tests execution +* a209f0df4c16812ac1109150046357c625253106 + * unneeded workaround in managing datetimes inside Pandas +* be4b724582512a8bea207252d565b0ee62715f55 + * PNML importer now returns correctly the parsed stochastic map +* d587e49961dd9b3db76205da5ce9a9fee893dd79 + * dropping newlines in process tree parsing + +### Removed + +### Other +* 6e3b855c30479d2311458f9732732fc30a248270 + * changed execute_tests.py format +* c62f6fd480b67e466e4c906927413b9f2c87aff4 + * in tests and examples, provide possibility to try with different Pandas backends +* 5424eb9ed576a1ef4f0485ce186b0300bf1ace03 + * example to locate the features for a specific case using pm4py.extract_features_dataframe +* f72e73285e6309df1d5413b4afa7c821facae2e7 + * help desk log + +--- + + +## pm4py 2.7.8.2 (2023.10.18) + +### Added + +### Changed +* d219db5ece5ce68239b217072bf04ac576ded062 + * refactoring DFG utility to also output + variant-specific paths statistics on request +* 86cbdb103410a692c15e35a1723f7107e573656e + * removing unused imports throughout the code +* c37cdd31bfbd5742d769fa7a00cea2615e679e2e + * increased test coverage by testing also the old EventLog methods + +### Deprecated + +### Fixed + +### Removed + +### Other +* 26ee9d9311f353327184f3f4b91378a1aa2cdc9d + * dependencies sheet script + + +--- + + +## pm4py 2.7.8.1 (2023.10.12) + +### Added + +### Changed +* b3d88dcfa6553beae4b289191d6aa29020daeeb2 + * refactor pm4py.llm.abstract_log_features (split in two methods) +* b9f74be6ffb68ac1b8c32d6c2cfb3cb3ae5d173c + * playout variant selection in the simplified interface +* 5aedd3048a9780816f37ad7f89c65a3e56b5229c + * support for log2log alignments in the simplified interface +* b254210f09d1844dee11b9ccd262baf62779edca + * return legacy log option in pm4py.parse_event_log_string + +### Deprecated + +### Fixed + +### Removed + +### Other +* 9717be4fc6be34c9278ddd7f2d39a0cb8efc4ec2 + * verbose option configuration +* 671688effb5ccf01d5653726de6725810333af0a + * support to OCEL 2.0 JSON specification + + +--- + + +## pm4py 2.7.8 (2023.10.06) + +### Added + +### Changed +* 634b6a5ac1b40963baa76a42a10c3c22176aaf84 + f6993293d665e2f7b69c27ce0f09d2df4e889b0b + f0240670292086cb3b6fe523b1646dcfa4c71ddc + * Refactoring OCEL import/export +* c1379120480539f5578a52ce6d76effb4819b3c6 + * centralized enabling/disabling of TQDM progress bar + Disabling progress bar in tests +* 08c2c16d17d2cbe26224662032a298f6b0a409a9 + * avoiding the necessity of re-creating setup.py when new packages are added to pm4py +* a7dc86f7fd821b5dd229ff404b5afa3b5ad919b4 + * disable IM fallthroughs in the simplified interface + +### Deprecated + +### Fixed +* 063a6d64bae61f1b54444e0b34ec0926b504aa34 + * properly closing file objects in different pm4py importers/exporters (XES, PNML, PTML, ...) +* 35f13b65a0523f889748679fbe90cf2d041e1038 + * fixing XES importing warnings in obtaining the resulting pd.DataFrame +* ef548ef18f514ad6ad0a32a104f380b322ab72e7 + * fixing test/examples execution +* d1b39bde1b14f160c0fff42bdc6b172bb0ae760e + * fix Petri net serialization +* e51c5e1e084a7fd7d13cb8d1381f868435762cca + * fixing TBR diagnostics when the methods are called on pd.DataFrame + +### Removed + +### Other +* 49a472d002890b35e3f59ef93fd75f2e35455715 + * storing stable pm4py Python requirements for the old Python 3.8 + +--- + + +## pm4py 2.7.7 (2023.09.22) + +### Added +* 056d9e5714e2ad0a21fbcac0725ea4fb7aae260c + * encoding specification in pm4py.read and pm4py.write classes + +### Changed +* f81d62ad8dc8a76aabdf90763a8bd8b8e2ea2aa9 + * fixed compatibility with Python 3.12 (removed deprecation warnings) + +### Deprecated + +### Fixed + +### Removed + +### Other + + +--- + + +## pm4py 2.7.6 (2023.08.28) + +### Added +* 69e6692ff08868586f9d4d29c6b8e7dd6609c732 + * rankdir option for simplified interface's visualizations (and fixing here and there support in main methods). + +### Changed +* 95bbaee94e177644ac12d526abbba0eafdf6eb00 + * refactoring of the textual abstractions of the DFG and variants (split in two methods + provision of primary and + secondary performance metrics). +* 710b09619ebff74a0166e9518e2390289b0f686d + * refactoring OC-Petri nets discovery and visualization. + +### Deprecated + +### Fixed + +### Removed + +### Other + +--- + +## pm4py 2.7.5.2 (2023.08.30) + +### Added +* 889f0531c0e307bfe56d933a294c61470a001e13 + * POWL feature + +### Changed + +### Deprecated + +### Fixed +* 9105eb375cb2fee7d731862b3fe5bf1ce88d455c + * various bug fixes OCEL import +* 0c483e52b6ea41a4df8b83ad5e39e3c1e2dc5539 + * bug fix OCEL 2.0 + +### Removed + +### Other + +--- + +## pm4py 2.7.5.1 (2023.08.28) + +### Added +* 6760518dea19334a21442200bef647e4c07f3636 + * LLM abstraction of the temporal profile model +* 13d001c76e3de40786dce75e76e56a13a821173a + * set of event logs for fairness assessment (hospital, hiring, lending, renting) +* e3044278b3e7d984c7fdf9e39554cc4551332739 + 50f59379fb8f49bbe6eb1796c6664a6057225b95 + * added OCEL filters: + * length of a connected components + * presence of at least an object of a given object type + * activity executed + +### Changed +* 84629e2ea342348e30aa04a7d41ad7b39159b400 + * changed case-based text abstraction header text +* c3886beff7abc82db56c60835479f47a76e545d6 + * refactored log_to_interval_tree methods in two methods + (log to intervals, and intervals to tree) + * added queue-related examples +* da3a12f615dba3c46793a2d9977dfca11dad85b0 + * avoid annotation start/end edges in DFG with performance metrics +* 37fba9285cfde95309142e4404f9cfbcb2b9296c + * visualizations support nanoseconds granularity when needed +* afb6f6ba74c03f422ce8d8417f840f6eb6aa3a6e + * inductive miner - parameter to disable the computation of fall-throughs + and the strict sequence cut. +* 49e738a7aee6e05ecf0ec50cd6aaa4cd0668687d + * inductive miner - optimization in the computation of the transitive relations + +### Deprecated + +### Fixed +* 12c9d877e5fb27b709d06c21310ab32868c2ea74 + * bug fix textual abstraction attributes LLM +* 3b9fb1ffc9646cf56a0b84a9b95dfdfd9b7fd565 + * small fixes pre-existing Jupyter notebooks +* 17f1340cc8a1095e6cdd8a8d85b92a3800a1e7f9 + * bug fix textual abstraction log skeleton +* 1217473888b97a00f34834b4746bb7f7e4744df3 + * bug fix PuLP solver with extremely low weights +* badbff239cf8a703e7d05c1cc2fc6d51af8aa7d7 + * bug fix WOFLAN when no basis vectors are identified +* f528509c6b5117aca6285686e78175dbcf4ba057 + * fixed path to Graphviz.JS +* ca79aa9b9e51ba3a95665d5d53c8e5ab5028bf12 + * minor fix TBR generalization parameters +* 57a30fb452a759bc71f707e67bf0f63118194b7f + * method to sample OCEL connected components is fixed +* 051d98cd0bfbf86419fe68f6cb0c1f139855cfdf + * fixed divergence from Github repo +* e0cbce6b90a16ef1e21edca45b83d69e1743674c + * fixed typo in OCPN discovery method +* 0af7368ce306678466df759ca15359c1e3901bcd + * fixed discover_petri_net_inductive multi_processing parameter + default value. +* 23aae39adf83f199a3b53533c45cbae4c7a9354e + * bug fixes OCEL feature extraction +* a3faf71ac4eddb22f1bc80a35c752b6b9d98df99 + * bug fix direct conversion process tree -> BPMN (loops with several REDOs) +* fa242485e6c99dded04d1d9c10ee1ed81ea96252 + * bug fix OCEL2.0 SQLite importer +* 0e1b0daad489eb8100cddd2105e6405862a184de + * fixed parameters in OCPN discovery + +### Removed +* bf5574a34a31b93024dd9feb54acc5cc475640bd + * change-of-mind on format_dataframe deprecation warning + +### Other +* 916ea3163119afe7aa0fc9f6c43624147d6c0f9f + * reference to published paper in OCEL feature extraction +* 549aa7c6766f1a51425a7a65673173c55d9731e9 + * updated reference to PM4Py website +* 20ce84db4e195937c77280c950ff12083fc5833b + * example for log granularity change +* 0de0be4fa11183f034fbb61e936dee365bbdea4a + * example for the management of stochastic Petri nets +* 570df6c21a03e6ac37ba2d7c9af160e8b175a68f + * manual creation of the constraints of the log skeleton (example) +* 959a685696da725180be0675fd00aaede9bb17bd + * examples for LLM-based fairness +* 7a98fe6b943db9d2402a4b867e8f6a441cdde243 + * docstring for OC-DFG discovery + +--- + +## pm4py 2.7.5 (2023.06.30) + +### Added +* f6d5a343808b350e83caac8cb0480e2ca671bfb4 + * method in the simplified interface to get the curently enabled transitions +* 44964d19b7052350f21d637c1a55048026d2b165 + * replay prefix using TBR (to obtain a marking) +* eb49b29863c65102ada2443ae66d7fe529a3d91e + * OCEL relational validation +* a128100af8182070453df161a22dbb54d1c08458 + * LLM textual abstraction of a single case object +* 0f5b5668a8f134a36e65349f835bf4e1835ae9ea + * LLM textual abstraction of the log skeleton +* 3287c53c83f0198b47c56a3ef7b15ed8d6e09b3f + * LLM textual abstraction of EventLog features +* 7892697f04e14bbfecb7842139a82daf939aefbe + * restored OpenAI query executor + +### Changed +* e414949a69e0376c0299955ecf7cb7d27f7cf349 + * removed deprecation warning dotted chart and performance spectrum' packages +* 8f4ebdf93c3cbb57e7427238871d4b2e048f357c + * added warning for dropping rows with empty case ID/activity/timestamp in format_dataframe +* 1b35a81e58ee145d5c82029c1110234ac3899856 + * added the possibility to specify the cae ID in project_on_event_attribute +* 6a4025f9a430ea32da29dd4142a51473ba16c5ef + * optimization connected components filtering OCEL +* c1028d56269e775167c3cb89827e02a57d263384 + * minor changes OCEL 2.0 XML importers/exporters +* 3287c53c83f0198b47c56a3ef7b15ed8d6e09b3f + * max_num_edges parameter in simplified interface's DFG visualization +* 8e04c243a2de3e344832f719e085a0630b3a5f1c + * removing point border in dotted chart +* c5056add3101b7a846a630d67062f5ca9b8c84d3 + * deug parameter for Petri nets visualization in simplified interface +* b11d3ae66c1ddf3be244f233efd8c7b1a02124e2 + * moved "pm4py.algo.querying.openai" to "pm4py.algo.querying.llm" + * moved "pm4py.openai" to "pm4py.llm" (simplified interface) + +### Deprecated + +### Fixed +* 437a8c8b885b8e11557ff20e9a5635eeaf4c919c + * fix problem OCEL copy/deepcopy +* 2705b6b6be171bf821570f58027db531e7290801 + * small fixes feature extraction event log +* 8a588ff40143f585faf643a5f9cb9f7137ab32e6 + * small fix textual abstraction OCEL features +* 63108ee30c05a60a99f58a1fbb31dd33228c76fc + * fixing DFG visualization when some activities do not appear in the DFG (single activity cases) +* 30932c4de18ea55dace9678cb87a784d7eb438af + * bug fix Alpha Miner on Pandas dataframes +* 5cc3ded30c7f15ebe13d0a74894ca7f18f8a96e4 + * fix heuristics net visualization's background color issue + +### Removed + +### Other + + +--- + +## pm4py 2.7.4 (2023.05.08) + +### Added +* 546cff5c7d91810b068777870ae20dab2b110150 + * pm4py.openai.abstract_log_attributes method in the simplified interface +* e9ee619300f59713c481d9fd592b3eeefc489175 + * added get_diagnostics_dataframe method for temporal profile-based conformance checking +* 7a410f6cb33773cb218c5ce7df37ded4844df7b9 + * possibility to get GraphvizJS HTML output + +### Changed +* 45dcc3de2ddf4348f8a7e31bae54529ec2ab9ad7 + * consistency checks when importing/exporting OCELs +* 9c4eb3a8512fbd20f7352341131ec2855b108b95 + * consistency checks OCEL feature extraction +* 091908c11a62b6708bb64adafa7a4168099b140d + * footprints visualization in the simplified interface - comparison +* 69d50384784f67a74823a4a0af99a1ebf9f0c302 + * minor improvement log2ocel conversion +* 3e88d920caf8d0dc902af2dcc2c3dcb3d752bfe8 + * removed hard-coded prompts from OpenAI API + * added abstract_ocel_ocdfg and abstract_ocel_variants abstractions + +### Deprecated + +### Fixed +* f8b77348b47c782a709cb6ee5646715c20e35710 + * fixed performance spectrum computation on Pandas dataframes + +### Removed + +### Other + + +-- + +## pm4py 2.7.3 (2023.04.12) + +### Added +* e561089945951e91b2ecfe0f223b35bd2d351630 + * other NLP/LLM abstractions +* 42b0d2a6f6fe7430d382117bf0ce54e8fd60ce23 + * return diagnostics dataframe in pm4py.conformance methods& + +### Changed +* 44fc2aecd0885534dd2083a4011be9e031c3a04a + * improved integration possibilities with PowerBI +* f805fd46673be291584ce489bf9def73df1dba71 + * read constants from environment variables +* 6737019a6de4e15d6063506e5a7ea2e571fc167d + * added DEFAULT_RETURN_DIAGNOSTICS_DATAFRAME option in constants +* 0ba6b34c19587357425cb27cccb23b12d70978a7 + * workaround for inconsistencies in pm4py.stats.get_trace_attribute_values + +### Deprecated + +### Fixed +* 7dfeac5ddc4f4f6a8b5410fc2e04016590b6f22a + * fixed OCEL2 XML importer + +### Removed + +### Other + + +--- + +## pm4py 2.7.2 (2023.04.03) + +### Added + +### Changed +* c617471c12c1f07c092e32ccf6d76d5aa6c4ec2a + * change X Axis in pm4py.view_events_distribution_graph +* cf744cb22cd6affb0a8d7ce26b9827c3e8b0b903 + * changes/fixes to the alignments table representation + +### Deprecated + +### Fixed +* d0ee4a8c8db76900444bc3e0026b0ea54581e9e7 + * fixed OCEL deepcopy +* 5fd45bdf5d3cf17f364669cba7a5fab549236e7a + * major fix WOFLAN + +### Removed + +### Other + + +--- + +## pm4py 2.7.1 (2023.03.28) + +### Added +* af4f00bca1ec7a3b0acc0421efe4bf895b324995 + * insertion graph-based O2O relationships in the OCEL +* 0bb0bad37311fd45113440d97f53a5c8255ce89c + * insertion lifecycle-based E2O relations in the OCEL +* e6076a50216de31fdbd4dd00edd631a01c9e1bb7 + * another algorithm to split/sample OCELs (ancestors/descendants based) +* 564e2c0ec976291c283fc1b24c5ebc2b6e452f12 + * algorithm for textual representation of OCEL +* 3e5164b72835aaa29051f4fd6ce4329253a17f95 + * algorithm to cluster OCEL based on the lifecycle/interactions similarity +* 70131091d88e5e8f2627b4ff7f70f8d479bd7738 + * new GPT-4 queries +* f584641df13504f71c796752da1befc963f3ce3b + * included some simplified single-SQL-query extractors + +### Changed +* 70198faa1b674c3a4e4351ff251a9af504e16a4e + * changing alignments interfacing in the simplified interface + +### Deprecated + +### Fixed +* 8f5d5057f24bce7c3825e3f6d34b15e15bc15025 + * wrong condition in the visualization of the alignments table + +### Removed + +### Other + + +--- + +## pm4py 2.7.0 (2023.03.23) -- Million Edition -- + +### Added +* ba126d3f4211cb237dae4b09dec5574224666237 + * initial OpenAI integration +* 05b6425637768312bf4768a252ee410c3bd5a35c + * easy-to-use (local computer) log extractors for Outlook, Windows events registry, Mozilla Firefox and Google Chrome + +### Changed +* b3c17fe017bd57889845f398e08fa95d94a8c800 + * add flow id to silent transitions in BPMN Petri net conversion + +### Deprecated + +### Fixed + +### Removed + +### Other + +--- + +## pm4py 2.6.1 (2023.03.14) + +### Added +* c9eac43f4b55883056a3540857b470ac18cc922e + * extract_ocel_features method in the simplified interface +* d2744bf87b0ce80ddc8d42a5b935424c36ffb82f + * possibility to conisder additional event attributes in the convert_log_to_ocel method + +### Changed +* 84e85c6e4715fe58159f6cfb83248d1cfa28bc8e + * possibility to return additional information during the conversion of BPMN to Petri net + +### Deprecated + +### Fixed +* e1b126c5adca8d5767375a6737a9d9378a9093c6 + * bug fix object-centric Petri nets discovery + +### Removed + +### Other + +--- + +## pm4py 2.6.0 (2023.03.13) + +### Added +* 73254a80b3430140fac2ff023a6e356edc48dd0f + * ILP miner (process discovery in ILP) +* 7016026a2a514d529fe5cf9a49b4aa607d30183c + * "timestamp grouping filter" and "consecutive activities" + filters for Pandas dataframes +* 4ba2a9e873c972c96fed8f3912f0dbaa8dfc96a1 + * added pm4py.insert_case_arrival_finish_rate, + pm4py.insert_case_service_waiting_time, + pm4py.extract_outcome_enriched_dataframe + methods to the simplified interface (Pandas dataframes) +* 18b250e38bcfeb08cda549df94de98ce5c5b484e + * added baseline log clustering based on profiles + (Song, Minseok, Christian W. Günther, and Wil MP Van der Aalst. + "Trace clustering in process mining." + Business Process Management Workshops: BPM 2008. ) +* 690716015f2452702b8f045e35e2029659bbd226 + * log to target vectors (for ML purposes): next_activity, next_time, remaining_time + +### Changed +* d6d2301dd0d2ea57cba76015eba124f726f4544e + * introduced optional "lifecycle paths" feature + in OCEL feature extraction + +### Deprecated + +### Fixed +* 0a1c6f9c6e0ff45a0e732978589ed17513899be8 + * fixed dependency on Simpy in __init__.py + +### Removed + +### Other +* a313db141148a960d7eb5126831bc1f8829a2ca4 + * made fundamental and optional requirements clearer + +--- + +## pm4py 2.5.3 (2023.03.05) + +### Added + +### Changed +* ea0da47ff6faaddb087ffa2344c6139c30978dca + * SVG position parser utility (replacing text-based parsing in Graphviz BPMN-based layout) +* 9ea35fe209982f87f478262e1398e8474b3be1ba + * working variant for generator of all optimal alignments +* 3f07223236eb350a72db87c8a708dcea13c1a5a3 + * refactored df_statistics.get_dfg_graph method and DFG visualization +* 268311a99ee7d2df245026371ab7449538ffcff8 + * support for object versioning in OCEL + +### Deprecated + +### Fixed +* 5d4bbb60bf940f8c5d654de0c8ecaec8cbb44d48 + * fixes for Pandas 2.0 +* ea09b4910874dbb165277a4de93286c05ac0ba5c + * carefully performing SQLite3 import (DLL compatibility issues with Anaconda) +* 06217786793dc7fa22706ecc143778d8ebbe3d2e + * fixed indeterminism in edges filtering during paths percentage filter + +### Removed + +### Other + + +--- + +## pm4py 2.5.2 (2023.02.11) + +### Added + +* be6ac2f1c611da6abcb6ea10df0280f7b9ecb0f0 + * added internal conversion method for Petri net type (classic, reset, inhibitor, reset_inhibitor) + +### Changed +* 87280959eb1612d01bbd4183d951f2c33750fed6 + * added ADD_ONLY_IF_FM_IS_REACHED parameter to Petri net playout +* 38af1dabd9cf3478a6b728be5a602150ed837c7c + * playout Petri net simplified interface: detecting the correct Petri semantics to be used +* ffffc623e6c52af2df0a4f3bb33fff5aa49b5588 + * added FM_LEQ_ACCEPTED parameter to Petri playout +* df84b4702fc81ab3427330f05c6b5dfb572f595e + * possibility to decorate heuristics nets with performance from the simplified interface +* e418e25a0008828337a92b23f57a0980baa8f24a + * changed convert_log_to_ocel to include automatically additional object types from the dataframe +* fbe086eaff9683562ada39a14fb6bdd86d52c50b + * added constant for the default Gviz representation format in the simplified interface +* f746d8811fad34c082ddac3028f0269bdade0a15 + * more efficient WIP implementation for OCEL +* 57167b094edcaeb01fc14e7d495a6bbc2d9907eb + * raising warning when parsing a XES log below Python 3.11 because of potential ISO-format parsing problems + +### Deprecated + +### Fixed +* b012df622c9bf28c3adf8cf4b53eaa2d6ec5efad + * fixed JSON/XML-OCEL importing (missing coherency check) +* 5a4d5a276c0a6c2dd33ebe930cdf60b5183c48a1 + * setting correct variant when applying pm4py.discover_process_tree_inductive on a DFG object +* a5bc0b96d9b79ae8d4ea26be03f4b8154837f567 + * bug fix Murata (removal place from IM) +* 91c20ccd0d6c88d76519e174b7e11ab82ac6a180 + * bug fix process tree obj get_leaves function +* 480c4fd1a3f35f8312927defd09b4a89665e6f71 + * bug fix convert_ocel_to_networkx variant +* fc941525842a41bc5d712526ef17177d7f8be763 + 12ef518b00f16c5e1b6b8d5d3fc749959bc836ad + * fixed SNA visualization (variant & HTML) + +### Removed + +### Other + + +--- + +## pm4py 2.5.1 (2023.01.30) + +### Added +* 23d5b0a81bbffbb69175aaa7cfa78e1ea0b78b6d + * adapted OCEL object to optionally support O2O/E2E relationships. + +### Changed +* 284bd275ae444a72e3c81662b7aded4921befde4 + * updating Scipy adopted LP solver from simplex to highs (4x faster) +* bc1f21ef4e83af66f1202ef82e389e5b5cb38ae8 + * moving utilities for sojourn/service/waiting/arrial/finish times computation on Pandas dataframes +* 7e59696b0d4c9fd659dc0594cff3c07fc504df5e + * OCPN discovery - specification of the variant of inductive miner to be used +* b32cada268fea2a9fdfb420821d9877d9144770d + * removed deprecation warning on Petri semantics + +### Deprecated + +### Fixed +* a6a1f14cfc1714a5039dd445ea14091e3e8579c7 + * removed extra parameters in pm4py.discover_petri_net_heuristics + +### Removed + +### Other + + +--- + +## pm4py 2.5.0 (2023.01.19) + +### Added +* e246a681298282e280d0a5d8c90958e1e4bfa139 + * add cadoso and extended cardoso simplicity metrics +* 34303df3a72e8d0c699f9cb61938c6c08a989274 + * add discovery of Stochastic Arc Weight nets based on OCEL logs. +* 32b74bb6125e1e914caab404514b606ac119d4f0 + * add Murata simplification to the simplified interface (implicit place removal) + +### Changed +* e7f79a47d6349644ef33c137a9eea34e57b7224b + * changed process tree conversion to Petri net to follow the standard DO-REDO paradigm instead of DO-REDO-EXIT +* 9adf32e3c934f9d9f458a1d87dfdda869358e79f + * scaling positioning nodes BPMN layouter +* cc34a30e5a7dbac292f0bb784df28ade94215140 + * removed searchbox in docs theme (not working with current version of sphinx) + +### Deprecated + +### Fixed +* 479dc5c1afef98b2ae3b67b918568465b1c7c72b + * bug fix inductive miner DFG missing parameters in LoopCutDFG + +### Removed + +### Other + + +--- + +## pm4py 2.4.1 (2023.01.09) + +### Added + +### Changed +* 9e815620924b2bae5a83b85539f38f344d4293d2 + * fontcolor support in visualizing invisibles. + +### Deprecated + +### Fixed +* 26fe3ea4ec65b668002163ae451436a4452f0b20 + * improved compatibility with Pandas 1.5.x (faster date processing) +* 93ee76af7cd23816d8891d6e7925011dc4d0399e + * fixed compatibility with Python 3.8 in typing + +### Removed + +### Other + +--- + + +## pm4py 2.4.0 (2023.01.06) + +### Added +* 7d3b0cb107452b9f7fa3d3c3e1c3609e3c5827dd + * Murata algorithm (Berthelot implementation) to remove the structurally redundant places +* 6fc781328a550a339e6e48d03f0e75464ad5249a + * expose in the simplified interface the reduction of invisible transitions +* 21a79b0132aaf5e2d6ac4efbb31995fba91dd46b + * add support for calcuating stochastic languages of process models + * add support for calculating EMD between two stochastic languages +* 9186c5bac228383e3b2addba6e5205e6e0ce2a8d + * add visualization of alignments in simplified interface + * add visualization of footprint table in simplified interface +* 82e20325229a3ae4e9c045ab2cfec3070ab02005 + * add conversion of Petri net object to networkX +* dfbd6c27c09ecb45c3dcf7edb35093455c09c429 + * add support for stochastic Petri nets + * add support for stochastic arc-weight nets + +### Changed +* c56c3ca6dd1068380ac7a0dc79f6fe64410e8d78 + * changed Petri net visualization in order to provide decorations for places/transitions/arcs +* 63371dbad1f9e9cf2e53a6b38977fd22f02661df + * changed xes importer to support returning the legacy event log object + +### Deprecated + +### Fixed +* 0bc31a7406f961122c3a124710d1a1ce8b6c74db + * fixed Scipy lp solver in order to allow for variables integrality specification. + +### Removed + +### Other + +--- + + +## pm4py 2.3.4 (2022.12.23) + +### Added +* 89ca01e1378cb2cfac21f5d58e0e4fea44ca2186 + * extraction of temporal features (system dynamics log) in pm4py + +### Changed +* 7a40a3cff6b0b4a12b2fe4ca7bd08bf963917443 + * Improving the performance of streaming DFG discovery +* ec766d97c9b8557324ab11a862d6630091a92059 + * Removed Pyvis and Jsonpickle as explicit dependencies of the project +* 04691455f47bc4ec84bb26ec7c5f6d187db1d41f + * Removed Sympy requirement (re-implemented null space in WOFLAN) +* b4fac01dff29ff34d6f0bb97e4398a101139d5b1 + * Enabling disable_variants by default in TBR when place fitness is required + +### Deprecated + +### Fixed +* 4b5c035f4a744c8de4efb7969a6f0abcfdd966d2 + * bug fix between filter on EventLog + +### Removed + +### Other + +--- + +## pm4py 2.3.3 (2022.12.09) + +### Added +* e2e4d357e2218a48f9b2d6b89690fbbe61cd6906 + * importing/exporting from/to SQLite + +### Changed +* 246be6c1aa1a3216faebf1440c38d59485621f4b + * Visualization of heuristics net - avoid totally unconnected nodes + +### Deprecated + +### Fixed +* 2e560757b4717a94e8f774de4b42bbb26bcdfc12 + * bug fix TBR decorations in Petri net +* 743151159a3f240ea6cf0756bd9ae24ac5cac10b + * cope with changes in the deprecation/packaging packages + +### Removed + +### Other + +--- + +## pm4py 2.3.2 (2022.12.02) + +### Added +* 55cf77276573efcc6d67ed1a51871914ba34f84e + * instantiation of some objects directly from the pm4py module. + +### Changed +* f887397e9abf2e9f85b48b941aa2bd4a892600a0 + * parametrization scale factors current BPMN layouter +* 35171256a7378f55713cec3b835b3418ecf4d356 + * bug fix heuristics miner ++ on Pandas dataframes - Parameters are not passed + +### Deprecated + +### Fixed +* 523589e13dfb6f5a8070478c245fc2a8058751ec + * raise exception when unsupported OCEL file format during read/write +* 394960d9eabcc0ac2eb40520b2866a3e21178d7c + * fixed statistics.traces.generic.pandas.case_statistics.get_cases_description to support the start timestamp column +* 0bd2caf62742627f840a5cde5486a0b92eaafeeb + * bug fix discovery DFG typed + +### Removed + +### Other + +--- + +## pm4py 2.3.1 (2022.11.26) + +### Added +* cde09b3bdc122e0f38d62c5cecba26a6d1d9e4b6 + * new variants of alignments - generating all optimal alignments + +### Changed + +### Deprecated + +### Fixed +* 37dc750566da858c738a94ea242160cada28a43d + 37e7e92db973497b23b30610a005512bd2d3268a + * fixed tests and examples +* 75ae8d12555d0fe354b55e3f99d09287ef4c5fd6 + * fixed pm4py.read_xes problem with some conversions to DF +* ea72675caf93f5e32bc146f6cef7f86d0769c747 + * fixed inductive miner entrypoint function + +### Removed + +### Other + +--- + +## pm4py 2.3.0 (2022.11.25) + +### Added +* 00a7ab36bda245d16a35ae6fff2bfb51d8ff8aea + Adding several methods to the simplified interface (process discovery/conformance checking using log skeleton, temporal profile, batch detection). +* feeb1891f82014b3e86a4c5301c237226acc8fad + OCEL - Visualization of object graphs (object interaction, object descendants, ...) +* 15964a428e2e0fc50dcc96570fba39f2e0d40099 + OCEL - Added some filters in the simplified interface +* fefe740338b702eafb7049a8f777f48f464d157d + * OCEL - insertion of an attribute pointing to the parent object +* 88c58a1c6809388be58db2ea6e64fb9b58d913d6 + * OCEL - sampling objects +* 40c741c8298584402cd9ea8e86bcca09f2bfd857 + OCEL - Method to get a temporal description of an object-centric log +* d63929cc36b1aba941f88efac05af3b25a384787 + OCEL - method for objects summary +* fdd87eb41e54ce8d179ae3030fd9e15ea74320e8 + OCEL - expansion of the set of objects during filtering on object identifiers +* 908d0aa843f1a4e9f4a6c69139a3be755c2e8555 + * OCEL - conversion to NetworkX DiGraph +* 5c7cc41b94810ec93f388f8014f2a3820d0063f2 + * EventLog - conversion to NetworkX DiGraph +* e7b4f712e1bd9475c73be5bc82c9a22eb0b745b5 + * OCEL - objects interactions summary +* 43b5976f7040a77c0aa32f5a28c508eb19966fa1 + * OCEL - methods to merge duplicates +* 3cc1a19f42420e034a7489f1c695fea788e9087f + * OCEL - methods to manage duplicates, sorting and time-delta for events +* 2c729e28e7f536acbd0919d88cf035a23542a3ae + * OCEL - conversion event log to OCEL accepts several object types + +### Changed +* f6b7714eaf79e1c57e4283163a51631f0ea8d964 + default variant representation is now a tuple of activities instead of a comma-separated string +* 642dcdf2cc538d384c1869436879d7d0602e3fa0 + refactoring PNML importing: auto-detection of final marking shall be optional +* 85cea58442348684440890612db8b5511491e0d2 + refactoring XES exporting in the simplified interface +* f60fd1ded3210adb91345be49343cd0dceaecc6d + refactoring usage of type() and isinstance() throughout the code +* faabe5ee17ae6fb10e77637e614db5d764d66e93 + introduced proper ResetNet, InhibitorNet, and ResetInhibitorNet classes +* 070d0467bda22d81b4166c2b3646333a23897f81 + different OCEL exporters methods are now available for different outputs, instead of having a single method accepting a path with an extension +* c614474e477a02836bd36f0b40db4b8ef37b78a6 + made extension optional to write methods +* f89a1dfa797da4581c4cbbd8cde482caf2402ca4 + c768e5a33e5e2f872fd2dc0d45a11d589a130629 + documentation is taken inside docstrings and formatted using Sphinx +* 7640c79932ef974524ca4424f91c6b9416401a8d + brand new implementation of the inductive miner, also with multi-processing support. + the .apply method of the inductive miner is now returning a process tree object. +* cc74d5ebcd7181626d79d60b2a883ad061cd85ba + re-implementation of business hours in a slot-based way. + +### Deprecated + +* 6184f7f9e4e323a222a28ed046686eb9f0d6b3e8 + deprecating the usage of the EventLog class +* fddc1c0936514d819be77c993913a96172680f0e + deprecating some packages for removal in future release (hierarchical clustering, comparison, alignments with edit distance, decision mining, earth mover distance, log to interval tree) + * 000f23ca65226d66f52d85f9b876ec68669f03e0 + deprecating the format_dataframe function. + +### Fixed +* d066d3f49a996c30d151031d66de90db4f4d9a2e + * Fixed issue with OCEL-CSV importing (Pandas index_col) +* c38348df9cf165fd94a2e69ba29601e1643e80ae + * Fixed issue with OCEL-CSV importing (relations dataframe timestamp) + +* 22ec9ab7220088ef7535760dd93197092d6bf04a + 5c0b0d439c1a613ff78d4d24b7a05b7aa4150ce3 + 9b90c2c18b708d39e3c75f8b2e25433c7e8b447f + ba6b55b84d1f7191d578e0d5535c49ef1930ce65 + 4d5765052fe4085fc8f8340e72a353369705b878 + making methods directly working on Pandas dataframes +* ba6b55b84d1f7191d578e0d5535c49ef1930ce65 + 4d5765052fe4085fc8f8340e72a353369705b878 + aea15814ba8f67a51fce1ec0beebd9a4a3721a19 + adding common parameters to simplified interface methods +* f8482b9e9aa4376543ad5d66d22fb04de0639530 + missing parameters in heuristics net discovery + +### Removed + +* d2a95d306362f54e08070b98193abbf8498ba70e + removed all deprecated code for this release; standardized object definitions + +### Other + +--- + +## pm4py 2.2.32 (2022.11.10) + +### Added + +### Changed +* cfb9f37a15a6b990f32ceaab28f1e2153e36c23d + * Update WOFLAN to include diagnostics in output + +### Deprecated + +### Fixed + +### Removed + +### Other + +--- + +## pm4py 2.2.31 (2022.11.06) + +### Added + +### Changed +* cc232ddc00528a0e7d568565c6b8fe76e2e38f71 + * fine tuning existing BPMN layouter + +### Deprecated + +### Fixed +* 43026f0d22605bafd104c9c752511b3a00c3988c + * missing encoding parameter in PNML importing/exporting +* 07493cc94e40652983eeb7b25f911654937f0ae6 + * bug fix Alpha Miner - check if the new place candidate pair has + causal relations between all elements of the first and second part + of the pair. + +### Removed + +### Other + +--- + + +## pm4py 2.2.30 (2022.10.13) + +### Added + +### Changed + +### Deprecated + +### Fixed +* 32a4fc9e4ab23418493f281fc262615f2ff4c436 + * Fixed trace filter +* 4c5599ff60f4e448198a1971a669c4bf3a4154fe + * fixed issue with SNA HTML visualization + +### Removed + +### Other + +--- + +## pm4py 2.2.29 (2022.09.16) + +### Added + +### Changed + +### Deprecated + +### Fixed +* d066d3f49a996c30d151031d66de90db4f4d9a2e + * Fixed issue with OCEL-CSV importing (Pandas index_col) +* c38348df9cf165fd94a2e69ba29601e1643e80ae + * Fixed issue with OCEL-CSV importing (relations dataframe timestamp) + +### Removed + +### Other + +--- + +## pm4py 2.2.28 (2022.09.02) + +### Added + +### Changed + +### Deprecated + +### Fixed +* 1343827595d4cfd9f6b5743bb378443079ce281c + * fixed sorting in DFG filtering +* acea877fd9000c8e6a62424c15d4a29c33d08eba + * fixed bug of LocallyLinearEmbedding(s) with newer version of Scipy +* 55acf9c08d25886f384bb2e993d653af90874f3b + * fixed construction of tangible reachability graph + +### Removed + +### Other + +--- + +## pm4py 2.2.27 (2022.08.19) + +### Added +* 58e266610e82cfcc41868313f7b9ccfd9975d49c + * discover_objects_graph utility for OCELs. + +### Changed +* 1cbd37ac4b54a4c0e943b506ed685435f003640b + * performance improvement batch detection on Pandas dataframes. +* 94dd96e0095f7cb1ef8d1eb48bd3da0a3cd85793 + * minor changes to DFG variants simulation. + +### Deprecated + +### Fixed +* 98fd3c740d8b6ae2dfde4d7a018f181030f22175 + * fixed reflexivity in EventLog eventually_follows filter. +* 9423897cdf0ea293ff1b032a0d4fa49ba746709c + * fixed chunk_regex XES importer. + +### Removed + +### Other + +--- + +## pm4py 2.2.26 (2022.08.05) + +### Added +* 2146fc42020f11a364a98b724d6c6a44fcbcbb41 + * trace filter + +### Changed +* 5c06d520182317d140bd1b82d9d986c3edc81cf7 + 6a2eb404ba240b2c04eb91e7cf1407f72c5ae3e5 + * minor fixes to DFG simulation +* fe1aa9c5efa7dc274e728a769625a784d7f87c6f + * added default option for background color setup +* ac080d2702192b588cf80444dd44fe447d14ede9 + * background color as parameter in the simplified interface visualizations + +### Deprecated + +### Fixed +* 9c12ffba4e4d1043fa4ad2ffe8349b13d7fa06f3 + * fixed the exporting of Petri nets (Petri net name property) +* 7fdb3074c6924e5957f973a76ff34ae5dc7bc815 + * fixed the visualization of heuristics nets + +### Removed + +### Other + +--- + +## pm4py 2.2.25 (2022.07.29) + +### Added + +### Changed +* ce94110076e3269c96a6eee61d7618f08f44472a + * optimization in the calculation of the eventually-follows graph on Pandas dataframes. +* 3cca8f97bbd09f4ae5644dcc156489d4b2037028 + * optimization in the calculation of the performance directly-follows graph on Pandas dataframes. +* 4d8721787a50da397b265678be614c94894ea851 + * column reduction in DFG calculation on top of Pandas dataframes + +### Deprecated + +### Fixed +* d754ccdac680f610b2b628dc9830d92da6954dc1 + cb76238c29b986026f07261c11a1c09a667c9ab9 + 54970a58927ad0e17b173bff17705a10f5344d92 + ef575a8bf0519655bcf8a57b981c7fa3c018db7a + * small fixes in OCEL utilities +* d0094fa4ccc815b57ccc519d15ccbda6399c2ef7 + * bug fix eventually_follows filter in LTL checker when timestamp_diff_boundaries is provided. +* eb8617de0cfcfebf7374b4545660158e4b4291b6 + * bug fix eventually_follows filter in LTL checker on EventLog objects. + +### Removed + +### Other + +--- + +## pm4py 2.2.24 (2022.07.12) + +### Added +* 43800f763a2aede807ad40231f771c6ef19e0098 + * added some examples for XES and OCEL generation out of a database + +### Changed +* f72e011d38cec44823c00248039812a3fa0cfc7b + * application of the strict sequence cut in inductive miner (IMCLEAN) + +### Deprecated + +### Fixed + +### Removed + +### Other + +--- + +## pm4py 2.2.23.1 (2022.07.01) + +### Added + +### Changed +* 43e55f63d86e424e882617af7b0a483ffe653069 + * setting default alignments variant to Dijkstra when no linear solver (Scipy, CVXOPT) is available +* 5ff00475659c38792ebab685fb23b282c75c36c0 + 209558a0d6d4c43708389a0002fc7c62bd9f89e9 + * optimizing retrieval and filtering of start/end activities from Pandas dataframes. + +### Deprecated + +### Fixed +* dc94e82825bd5994667dd9c6cf2e1908379db923 + * fixed problem(s) with the log skeleton +* 1bd50ff5354317d57297e63d140618ffa7a58ef6 + * bug fix in exporting OCEL(s) +* 7c6c30ffcff04d3151f249556af9405402fdee83 + * fixed problem with WOFLAN algorithm (LP solving) + +### Removed + +### Other + +--- + +## pm4py 2.2.23 (2022.06.24) + +### Added +* 09c97115cfaafa033c595ddff089701a28bf1599 + * added starts-with and ends-with filter on Pandas dataframes. +* f373955163ad58e6da3d762380b4f9802ac806f0 + * new OCEL filters made available (event identifiers, object identifiers, collection of object types, connected component per object) +* 2051ff1f5985ec34362a16d1f369e062220d7d1b + * new footprints visualizer (symmetric comparison between differences in footprint matrix) +* 0c6d023535f18318f1f7f78fec21f3565ce229cd + * new OCEL statistics made available (temporal summary of the log, objects summary) + +### Changed +* 1f36b168d33d6dd48f4e20fd16b7a71e25c6de67 + * allow exporting trace-by-trace to disk in .xes + +### Deprecated + +### Fixed +* 3396465f6d6944c84bbdfcf2bbe380b80c442350 + * fixed inductive miner example's path + +### Removed + +### Other + +--- + + +## pm4py 2.2.22 (2022.06.10) + +### Added +* c7e04d3e8d4a3fc1859e50793a0693040602dd3c + * add starts-with and ends-with filter + +### Changed +* 9bb6ad473bf46b2ca6a378193e2e3042bed98d31 + * added the possibility to provide additional parameters to Matplotlib's plots +* 0489353a21ce7a4044d775ed505f476556d2b4e4 + * increased performance of the PM4Py's insert_partitioning method +* ab196c5a2ee1430dfd7cef4943f7275aa5405873 + * increased performance of dotted chart / performance spectrum representation + by disabling automatic layouting in neato. + +### Deprecated + +### Fixed +* f45883421423ca49139adf24490625ad2980fc92 + * Fixing OCEL processing when an event has empty object map +* e45a136198b7dbf546d97a65095d2b126133a754 + * Fixed problem with footprints discovery on loops (process tree / Petri nets) +* 3b2082f744966e9c453013df41c15828b971e94d + * Alignments: Timeout results in an exception on fitness calculation + +### Removed + +### Other + +--- + +## pm4py 2.2.21 (2022.05.12) + +### Added +* 65ff8ae3d9bca71f0cf7be507c9e0eba68b85c42 + * add chunk-based xes importer (CHUNK_REGEX) + +### Changed +* d982c534aac373c347a083739b68fd3ac2b29e42 + * changed dimension of endpoints in BPMN models layouting +* 7473a72877e29261780adf746d134b406a912dd7 + * interventions to increase PM4Py's compatibility across different platforms + +### Deprecated + +### Fixed +* 882aa20b20ec593e0a7d01e027a6f1afa8d44f84 + * fixed XES line-by-line importer for booleans attributes +* f6542cd12413f073eb51173804f68502e3026f46 + * fixes XES line-by-line deserialization +* 363580b757c027ff583d33dcff83e00b3be97659 + * fixed issues with Pandas dataframe's index usage in the library +* 58a763b4099b40c67f23a6eb45c621d1b9a9d324 + * fixed OCEL default constructor to set default columns in the dataframes +* 8470f22047667d1d30415a08965af1015d66adbb + * fix division by zero error in alignment-based fitness (side case for empty trace/model combination) + +### Removed + +### Other + +--- + +## pm4py 2.2.20.1 (2022.04.10) + +### Added + +### Changed +* 344fb7258df17ce0d4ffe7425b678943f6f2ff11 + * Minor refactoring to management of inhibitor / reset arcs (importing) + +### Deprecated + +### Fixed +* ad2cba1d8f9487dbb03ec418643b329b30e80ee0 + * Minor fixes to the retrieval of the parameters in several parts of the code +* 65e1f1b0bbd0747fe81eb049780874608a395d6e + * Fixed bug in eventually follows filter (simplified interface) +* 60cd060edeeaa17c8b5bdaba7bb1035fc385d514 + * Fixed XES exporting when attribute value type is a Numpy type (numpy.int64, numpy.float64, numpy.datetime64) +* cd5e55e712697a28cbfe0182e96556531b520667 + * Bug fix feature selection and extraction on Pandas dataframes + +### Removed + +### Other + +--- + +## pm4py 2.2.20 (2022.04.01) + +### Added + +### Changed +* 762fa3ec987705f12a42decb13862323f600e3c9 + * apply explicit conversions to event log throughout pm4py code base + +### Deprecated + +### Fixed +* 1bcadff3acacfda2463cf9325f873004e15ed915 + * Bug fix / efficiency change on the format_dataframe utility function. +* d8797f574d605ad1591c66a96c1f54346c856878 + * Fixed missing import in DFG performance visualization. +* f4f5a0eee8218be5c575fe8b42ab59e335979d53 + * Fixed hardcoded parameter in feature extraction interface +* e61fb3f7a763a89cfb221b3c37c1b140620f5df9 + * Fixed performance DFG visualization when all values are provided +* fb9c152afdf6b91c3b26efa09d8233e99c55b907 + * Fixed progress bar behavior in TBR-based ET-Conformance + +### Removed +* 639aeb64bf5febf5f5719622d6d90c4a3c5cd8be + * Removed ORTOOLS as available linear solver. + +### Other + +--- + +## pm4py 2.2.19.2 (2022.03.04) + +### Added + +### Changed +* f5575aa8 + * Cleaning unused parameters in PTAndLogGenerator +* 65137038 + * Changed WOFLAN linear problem solving to default interface + +### Deprecated + +### Fixed +* 150184d3 + * Small bug fixes BPMN importer +* 7221385a + * Issue in DFG visualization when the provided start/end activities are not in the graph + +### Removed + +### Other + +--- + +## pm4py 2.2.19.1 (2022.02.11) + +### Added +* a193603e + * Event-Object Feature Extraction on OCEL +* 8da05972 + * Prefixes and Suffixes filters for Event Logs + Exposition in Simplified Interface + +### Changed + +### Deprecated + +### Fixed +* cbf848ef + * Bug fix BPMN importer +* ff0dfc4b + * Closed security issue within dependencies + +### Removed + +### Other + +--- + +## pm4py 2.2.19 (2022.01.25) + +### Added +* eea18398 + * possibility to return the Pydotplus graph inner object in the Heuristics Net visualization. +* 52ddbf75 + * support for different attribute keys for the source / target events in the DFG discovery and paths filtering on Pandas dataframes. +* 29bd86a6 + * possibility to specify different shifts for the different working days of the week, inside the business hour module. +* f1e124a4 + * possibility to move an attribute at the event level in an OCEL to the object type level. +* 0da4c3f6 + * custom semantics for Petri net to reachability graph conversion. +* c7c7ed5f185b492f7b6206b04f037a119b80541b + * add "week of the year" option in get_events_distribution method +* 5b5c04874e449bda60463ade6e2cf1a8218e6908 + * add prefix/suffix filter for pandas data frames +* 877701fa0e348a5bd58eb84ed984b60292db9f55 + * add additional features (useful for instance-spanning constraints) in trace-based feature extraction +* 7359807b60aa3b1ece798d1ef0cdd6a19fac9f6b + * add rebase functionality to pm4py (changing the default activity/case identifier) +* 84742ce331dec418841d99fafb24a82c48c21e7f + * add support for interleaved operator +* d7e232a987e4a0c15e28b9cf2ae6c15ce324031f + * added various additional interaction feature extraction methods for OCEL +* 9caf5597d59ff9eb70879ba42dbfccd9785009af + * add new thirdparty dependency structure in third_party folder + +### Changed +* 74ce9b95 + * setting all the arcs of the Petri net visible when there is at least an arc with weight != 1, for coherence reasons. +* 21832737 + * inferring the activity frequency from the DFG in a more generic way with regards to the type of the inputs. +* 87fe5afd + * changed tau printing in process tree to string representation, from *tau* to tau, for coherency with the parse_process_tree operator. +* effce8d8 + * changed BPMN namespace in BPMN exporting to ensure compatibility with BPMN modelers. +* 2200a0f5d6d23a1f797199cb834b37e07d8d396e + * add pn to nx converter that returns two dicts for node mappings (pn->nx and nx->pn) +* f9ad1a400846dbdb01f48714df0a3119069a05ea + * ```pm4py.format_dataframe(df)``` no longer replaces columns, rather, it copies the data into fresh columns + +### Deprecated + +### Fixed +* 0ad488b1 + * Fixed problem in PTAndLogGenerator: silent transitions were added in some context also when the parameter "silent" was provided to 0. + +### Removed +* d07a90873be85d95b15e562aabc6ab1f93b6b109 + * removed ```pm4py.general_checks_classical_event_log()``` +* 034abb0d7a442572f8bd52109ac6ed5cba109d0c + * remove dependency on ciso8601 + +### Other + +--- + +## pm4py 2.2.18 (2022.01.06) + +### Added +* c15c8897 + * add utility function to convert SNA results to NetworkX +* 8b300dbb + * add several new statistics for OCEL logs +* 8da0f41a + * add frequency-based visualization (using alignments) for process trees +* 54261cbb + * add progress bar to token-based replay +* 225dcad7 + * add OCEL schema validators +* da6a4787 + * add reduction rules for R/I nets +* fefcd453 + * additional support for BPMN functionalities: exceptions and markings +* 417274fd + * add support for feature extraction from OCEL logs +* 5f5ff573 + * add filter that checks relative occurrence of a specified attribute + +### Changed +* b82dd92e + * revised implementation of the business hours module, now supports input of work calendars (workalendar package) +* 434e66af + * allow arbitrary arc weights visualized (reported at https://github.com/pm4py/pm4py-core/issues/303) + +### Deprecated + +### Fixed +* 76563e4b + * fix bug in process tree alignment that generates NoneTypeError when multiple leaves have the same label +* 3b6800d0 + * minor bugfix in process tree playout (reported at: https://github.com/pm4py/pm4py-core/issues/305) + + +### Removed + +### Other + + + +## pm4py 2.2.17.1 (2021.12.18) + +### Fixed +* 2eb36ce5 + * Bug fix in OCEL importing (timestamp parsing) +* 512c071e + * Resolved security issue in data Petri nets' PNML parsing + +--- + +## pm4py 2.2.17 (2021.12.14) + +### Added +* 9b795123 + * add converter from data frame to activity/case table +* f28fc490 + * add possibility to add the case identifier in the feature table (see: https://github.com/pm4py/pm4py-core/issues/292) +* 12b6ec24 + * add interleaving DFG visualizer for visualizing inter-process dependencies +* af9c3262 + * add first/last occurrence index per activity in the feature table +* 9231a5d7 + * add support for conversion of interleaving data structure +* 06f54287 + * add support to merge two separate logs using an n:m case-relation table +* 146f49c2 + * add the possibility to stream OCEL events and define object-specific listeners +* 573c26c2 + * add feature extraction functionality that records the position of activities +* ff62d665 + * add case and event sampling to the simplified interface +* d8f71bc3 + * add activity-position summary in the simplified interface +* d4011ff1 + * add link analysis code for OCEL + +### Changed +* 79920a18 + * improved string representation of Petri net objects +* 9358fdf4 + * minor refactoring for interval detection in event log +### Deprecated + +### Fixed +* 5dccbe61 + * fix faulty conversion of process trees to binary equivalent. +* 976cc601 + * fix for: https://github.com/pm4py/pm4py-core/issues/293 +* 1e4f602b + * fix for: https://github.com/pm4py/pm4py-core/issues/295 +* be629d97 + * fix for visualizing multiple tokens in the initial marking in the same place +* a06cc1c8 + * fix for the correct use of the triangular distribution on generating process trees +* 51181d6c + * fix support for generating multiple process trees in one go +* 9a0e2be1 + * general revision of the process tree generator code + + +### Removed + +### Other + +--- + + +## pm4py 2.2.16 (2021.11.16) + +### Added + +* 32af0c81 + * time-stamp based interleaving mining for OCEL logs +* 10dffb58 + * support probability visualization in transition system visualizer +* 51c069fb + * add discovery of object-centric directly follows multigraphs +* fa3031aa + * add several filters for OCEL. +* d4747f71 + * implementation of OCEL-based process discovery according to Reference paper: van der Aalst, Wil MP, and Alessandro + Berti. "Discovering object-centric Petri nets." Fundamenta informaticae 175.1-4 (2020): 1-40. +* 9fbd1c45 + * add the support for generic network creation based on a given IN/OUT column in which events are connected if the + columns match. +* 2b867f0d + * add projection utility to fetch lists of event attributes + +### Changed + +* 43a076c8 + * add artificial timestamps to artificial start and end events +* d65f8077 + * case attributes are replicated in events of an event stream (for xes input) +* 9075cbfc + * add trace attributes to the interval tree + +### Deprecated + +### Fixed + +### Removed + +### Other + +--- + +## pm4py 2.2.15 (2021.10.15) + +### Fixed + +* 6e26b003 + * fixed pandas performance DFG discovery +* 92153184 + * fixed parameters usage in simulation packages +* ca6750d4 + * fixed hardcoded parameters in dataframe_utils + +### Removed + +* 53af01f6 + * removed strong dependencies on intervaltree and stringdist + +### Deprecated + +### Changed + +* dcebaf8e + * moving networkx dependency +* f19762ac + * update IMD cut detection to use IM_CLEAN cuts (correct implementation of IM CUTS) +* d5d0b49c + * change the visualization of initial and final markings +* fcc4eeb0 + * variant separator (between activities of the same variant) is now a pm4py constant, for increased compatibility + with other tools, e.g., celonis. + +### Added + +* 32c396b8 + * add sanity checks on event logs objects in simplified interface +* 5b85d5dc + * add utility to parse a collection of traces in string form to an event log +* a87a39c9 + * add support for importing XES 2.0 +* b43d425b + * add artificial start and end events to event logs +* d22dd490 + * add initial support for OCEL 1.0 +* 829f091c & 56fca738 + * support for business hours in the pandas dfg calculation + * support for business hours in the temporal profiles for pandas dataframes + * support for business hours in pandas df case duration + * support for business hours in filtering for case performance (pandas) + * support for calculating of sojourn time with different aggregation metrics +* 841e3e55 + * add etc conformance for dfg models +* 04caa3d3 + * add dfg filtering that keeps the dfg connected + +### Other + +--- + +## pm4py 2.2.14 (2021.10.01) + +### Fixed + +* 706d42c0 + * bug fix paths filter for Pandas +* c5ecaa4f + * bug fix numeric attribute filter XES (custom case attribute glue) + +### Removed + +### Deprecated + +### Changed + +### Added + +* 8ba67034 + * added random variables that are able to check gamma and log normal distributions +* 1d22d99d + * added dfg -> petri net translation that has unique labels (routing is performed by invisible transitions) +* 004ec93f + * add support for log-level fitness in the alignment output +* 56efe270 + * add fitness value for the dfg-based alignments +* d9da1ab8 + * add raw performance values for the elements of the performance-based dfg +* 0eeda19d + * when visualizing a dfg without log attached to it, i.e., incoming edges are used to count +* 03ee6b8e + * allow counting of occurrences of activities/open cases/resource activities in a given time range +* ae5a3973 + * add various new filtering functionalities + +### Other + +* ac00be2f + * added the specification of Python 3.9.x among the supported versions. + * not suggesting anymore Python 3.6.x + +--- + +## pm4py 2.2.13.1 (2021.09.21) + +### Fixed + +* 816fb4ad + * fixed a bug in the Pandas case size filter (the constraints were not applied correctly). +* 40f142c4 + * fixed a bug in the format_dataframe function (columns were duplicated if already existing with the same name). +* 00d1a7de + * reverted stream converter to old variant (in a slightly slower but safer way). + +### Removed + +### Deprecated + +### Changed + +* 991a09d4 + * introduce a time limit in the DFG playout. +* ae5d2a07 + * return the state of the process tree along with the alignment for the process tree alignments. +* 8b77384f + * refactoring of the calculation of the fitness for Petri net alignments (scattered code). + +### Added + +### Other + +* d58d34fd + * upgraded Dockerfile to Python 3.9 +* 50114175 + * resolved issue with the upcoming Python 3.10 release +* 89314905 + * security issue in requirements + +--- + +## pm4py 2.2.13 (2021.09.03) + +### Fixed + +### Removed + +### Deprecated + +### Changed + +* 5723df7b + * xes exporter now reports on xes features and xmlns +* 3b632548 + * graphviz based visualizations now expose background color as a parameter + +### Added + +* 0592157b + * new dfg playout including performance specification +* 85739ba0 + * allow pandas df to be used as an iterable for streaming simulation +* 2fa9993f + * path filter that filters the cases of an event log where there is at least one occurrence of the provided path + occurring in a given time range. +* a7ee73a8 + * added filter based on rework detection +* c03b6188 + * add petri net, reset/inhibitor net and data petri net semantics + +### Other + +--- + +## pm4py 2.2.12 (2021.08.19) + +### Fixed + +* a374bad3 + * https://github.com/pm4py/pm4py-core/issues/251 +* e88a6546 + * https://github.com/pm4py/pm4py-core/issues/249 +* 84511628 + * fix minor bug in the calculation of the handover and subcontracting metrics. + +### Removed + +### Deprecated + +### Changed + +* 01fd0402 + * The ```pm4py.view_petri_net()``` method now uses ```None``` as a default initial and final marking. +* 72ed7d0d + * Improved performance of variant discovery of dataframes. + +### Added + +* 9a04357e + * Add rework measurement at the case level in the ```pm4py.statistics.rework``` package. +* b725ca0b + * add 'between' filter for ```pandas dataframes``` in the ```pm4py.algo.filtering.pandas``` package. The filter + returns subsequences between the two given activities. It creates subtraces for every possible match. +* 211e3c56 + * added local linear embeddings to ```log_to_features.util```. +* 4b594228 + * add support for adding decision points to data petri nets. +* 9261270e + * add support for performance dfg discovery in ```pm4py.discover_performance_dfg()```. + +### Other + +--- + +## pm4py 2.2.11 (2021.08.06) + +### Fixed + +* 207d69bd + * bug fix in application of the filtering threshold in the IMf algorithm + +### Removed + +### Deprecated + +### Changed + +* d98cbb1c + * changed deepcopy and copy functionality of logs for performance improvement +* f3b78a49 + * minor performance optimization in log conversion (log to dataframe) +* 71c0919f + * improved performance for pands -> stream conversion + +### Added + +* f2101a72 + * added various additional features in log-based feature extraction +* 41873655 + * possiblity to directly get all performance metrics of the DFG elements +* 886b44ea + * detection method for trace-level attributes stored at event level +* d5f9f866 + * add transition names to events, based on a given alignment +* 4802e7d8 + * add support for importing reset/inhibitor arcs and transition guards +* cc6488f7 + * add general support for reset/inhibitor nets +* e805cf5f + * add support for data petri nets +* 1d3a2e7b + * added case termination statistics for pandas data frames + +### Other + +--- + +## pm4py 2.2.10.2 (2021.07.26) + +### Fixed + +* 50ad39fa + * Fixed blocking issue with properties of Pandas dataframes when format_dataframe is used (case ID column) +* 3708b98f + * Fixed variants filter, when the output of get_variants_as_tuples is used + +### Removed + +### Deprecated + +* Deprecated support to Pandas < 0.25 (due to future dropping) +* Deprecated auto-filters (due to future dropping) + +### Changed + +* Different interventions to fix the internal coherency of the project (usage of deprecated functions + missing imports) + +### Added + +### Other + +--- + +## PM4PY 2.2.10 (2021.07.09) + +### Fixed + +### Removed + +### Deprecated + +### Changed + +* 4964d6ea + * minor refactoring (rename) in attribute statistics querying; ```get_attributes()``` + --> ```get_event_attributes()``` +* 1148f6c0 + * use revised implementation of IM and IMf everywhere, deprecate old implementations + +### Added + +* 6750bf3a + * add support for start time and end-time in timstamp conversion +* e24f5b70 + * computation of event-level overlap +* 8cec5f9e + * add several case/event level statistic functions at the simplified interface level + +### Other + +--- + +## PM4PY 2.2.9 (2021.06.25) + +### Fixed + +* daf74e83 + * update imports in feature extraction +* 74be3e3c + * minor bug fix in alpha plus (place that was created was not always added to the resulting Petri net) + +### Removed + +### Deprecated + +### Changed + +* d97b1790 + * drop deepcopy in event log sorting (enhances performance) +* 1d4e625b + * revised IMf implementation (more close to ProM / PhD thesis Sander Leemans) +* 20aabd95 + * calculation of minimum self distance now adheres to the standard invocation structure + +### Added + +* 598c6ecb + * simplified interface now stores properties (using attr attribute) to dataframes +* 1f7a3fa8 + * add computation of rework statistic (cases containing the same activity more than once) +* 32c7d330 + * add computation of cycle time (active time of process divided by the number of instances of the process) +* 8187f0e9 + * add distribution plots over different time-frames (matplotlib) +* 269d826c + * add batch detection based on Martin, N., Swennen, M., Depaire, B., Jans, M., Caris, A., & Vanhoof, K. (2015, + December). Batch Processing: Definition and Event Log Identification. In SIMPDA (pp. 137-140). +* d5326d46 + * compute case overlap of a case with all other cases + +### Other + +* 92a70586 + * performance optimization for calculation of performance spectrum +* b0fc57c4 + * performance optimization for Pandas datetime conversion non-ISO8601 (regular formats) + +--- + +## PM4PY 2.2.8 (2021.06.11) + +### Fixed + +* c11bab8f + * bug fix in eventually-follows filter +* d3fd1bc1 + * bug fix in activity frequency constraints of the log skeleton conformance checking + +### Removed + +### Deprecated + +### Changed + +* d96d9d69 + * improved performance of the df-based performance spectrum code +* 499d8a1c + * improved performance of log conversions when (for internal use) deep copy is not required + +### Added + +* 4d679934 + * allow the possibility to filter on a trace attribute that has a type date (e.g., does the planned start date of + the case fall in a given time window?) +* b7ef36e8 + * add properties object to trace attributes (used for internal storage of statistics, will not be exported to disk) +* d7029365 + * added some basic ML utilities for event logs, e.g., getting all prefixes of traces, get a train/test split +* 1ec5802e + * new subtrace selection mechanism that gets all events inbetween two given activity labels (uses first match on + both 1st and 2nd label) +* 9b65bbd9 + * allow specification of business hours in sojourn time computation of the DFG +* 4d529d6e + * generic support for feature extraction + +### Other + +--- + +## PM4PY 2.2.7 (2021.04.30) + +### Fixed + +* 908e06d7 + * fix error in loop detection of inductive miner +* b7b63e0b + * add internal log conversion in the flexible heuristics miner +* e9d61bdb + * fix minor bug in bpmn model importing +* 52cc0c7a + * fix minor bug in xes exporting (type of concept:name was not checked) + +### Removed + +### Deprecated + +* 9c1a9610 + * various old utility functions are now deprecated + +### Changed + +* 424c9ad9 + * avoid warnings when visualizing long place names in debug visualization mode + +### Added + +* c2a9633e, 52e340b1 + * add simple visualization of performance spectrum. +* b6ae4b25 + * add simple dotted chart visualization to the simplified interface. +* 6e3a0bac + * add properties attribute to event logs and event streams for storage of custom meta-data that is not exported to + xes. +* fb142359 + * add version of dfg discovery that adds case-level attributes to nodes and edges +* d902609d + * add basic visualization of events per time and cas distribution graphs + +### Other + +--- + +## PM4PY 2.2.6 (2021.04.23) + +### Fixed + +### Removed + +### Deprecated + +### Changed + +* 766fafa7 + * minor refactoring and more generic invocation style for eventually follows-based filtering + +### Added + +* 353c7d6f + * Heuristics miner is now able to filter on edges connecting to/from start/end activity +* d6412339 + * Parallel alignment computation can be directly invoked + using ```pm4py.conformance_diagnostics_alignments(..., multi_processing=True)``` +* de84e5f4 + * add ```pm4py.discover_bpmn_inductive(log)``` + +### Other + +--- + +## PM4PY 2.2.5 (2021.04.16) + +### Fixed + +* 9854f62d + * minor bug fix in etree xes exporter avoiding faulty None values +* bfe8fb32 + * support non-standard attribute symbols in line-by-line event log exporter + +### Removed + +### Deprecated + +### Changed + +* 3631fe58 + * default xes importer is set back to iterparse +* a7ff695a + * large-scale restructuring of the underlying pm4py architecture +* 201879ad + * changed the default maximum number of edges to be visualized in the DFG visualization to 100000 (was: 75) + +### Added + +* 66283964 + * sojourn-time-based coloring for dfgs +* 6639d3f3 + * organizational mining, e.g., ```pm4py.discover_handover_of_work_network(log)``` +* 9c9ca14a + * allow multiprocessing in alignment computation +* 279fd31f + * add prefix tree vizualiation +* 748c768d + * add 'old' pm4py visualization of the process tree as an alternative visualziation +* 408b37a9 + * add filter to check multiple ocurrences of certain attribute values in a case. + +### Other + +--- + +## PM4PY 2.2.4 (2021.04.01) + +### Fixed + +### Removed + +### Deprecated + +### Changed + +* 56317d81 + * process tree based alignments no longer use trace-based process tree reduction (can still be used through utils) +* c1c1ffc8 + * minor optimizations to state-equation based alignment computation +* c95d45c9 + * large (internal) refactoring of pm4py object files and algorithms + +### Added + +* d14d3d27 + * added resource profiles to pm4py taken from Pika, Anastasiia, et al. "Mining resource profiles from event logs." + ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. +* ab56d899 + * organizational mining according to https://arxiv.org/abs/2011.12445; contains several organizational group-based + metrics +* 6a77a948 + * add serialization and deserialization to various pm4py objects; available through ```pm4py.serialize()``` + and ```pm4py.deserialize()``` + +### Other + +--- + +## PM4PY 2.2.3 (2021.03.19) + +### Fixed + +* d1285706 + * fixed the consistency (w.r.t ProM) of align-etc conformance results + +### Removed + +### Deprecated + +* c3cde455 + * deprecated (moved internally) the evaluation and simulation pacakges. +* a756f1fa + * pm4py.objects.process_tree.pt_operator.py + +### Changed + +* 8474507b + * make timestamp and performance-based trace filters inclusive on the boundaries provided +* b6154457 + * changed the equals functionality for event logs +* 9eff5646 + * classical inductive miner is rebuilt from scratch and thoroughly tested +* efc1c6e8 + * changed equals functionality of Petri nets and all their objects +* 02336ff4 + * font size is now a parameter of the object (Petri nets / Process Trees /...) visualization code + +### Added + +* 5de03f1e + * added progress bar to all the alignment algorithms +* 24778a7c + * added footprint comparison to simple the interface + * added eventually follows discovery to the simple interface + * added some additional statistics to the simple interface +* b2b1fdc5 + * add a faster alignment algorithm for process trees +* b7bc217f + * more extensive support for the OR-operator in process trees +* be04ab2a + * added performance visualization for heuristics nets +* 725f40f2 + * added boolean check on whether a trace/variant is fitting w.r.t. a given model (```pm4py.check_is_fitting()```) +* e172977c + * added process tree parsing functionality (```pm4py.parse_process_tree()```) + +### Other + +* a756f1fa + * the process tree operator class is now embedded within the process tree object definition ( + pm4py.objects.process_tree.process_tree.py) + +--- + +## PM4PY 2.2.2 (2021.03.03) + +### Fixed + +* 1a5c080c + * fix for timestamp conversion of dataframe formatting +* 19c615e1 + * fix bug in process tree exporter + * change visualization of process trees (similar to PorM) + +### Removed + +### Deprecated + +* 0e61f4b2 + * evaluation.soundness.wofland and evaluation.wf_net + +### Changed + +* 0e61f4b2 + * woflan and wf-net checks are moved to algo.analysis package +* 2e158ec4 + * minor improvements for A* performance +* d550f777 + * various renamings in the simplified interface of pm4py, several methods are deprecated. + +### Added + +* 65ef822c + * generic support for the marking equation + * generic support for the extended marking equation +* 92ba4aa7 + * variants can now be represented as a tuple of activities, rather than a single string + +### Other + +--- + +## PM4PY 2.2.1 (2021.02.15) + +### Fixed + +* ee11545a + * fixed importing names of invisible transitions as stored in ```.pnml``` files +* 5efff284 + * handle warning messages thrown in the heuristics net visualization + +### Removed + +### Deprecated + +### Changed + +### Added + +* 91b494ad + * simple process tree reduction that removes parts that are guaranteed not to be needed for the alignment/replay of + a trace +* f75ecff3 + * thread-safe implementation of ```dict``` for streaming based process mining +* 03d176f9 + * implementation of the Heuristics++ Miner +* 32443759 + * add support for using ```redis dict``` for streaming + +### Other + +--- + +## PM4PY 2.2.0 (2021.02.01) + +### Fixed + +* ee545f40 + * add additional check to timeout for the memory efficient implementation of A* approach for alignments +* a2a3f281 + * fix usage of integer values in pulp solver rather than binary variables. +* 6ba4322f + * fixed conversion behavior lifecycle to interval logs + +### Removed + +### Deprecated + +* 54e38ac8 + * ```pm4py.soundness_woflan()``` is now deprecated + +### Changed + +* c847e39c + * bpmn graphs are now multi-di-graphs. also see: https://github.com/pm4py/pm4py-core/issues/203 + +### Added + +* 54e38ac8 + * ```pm4py.check_soundness()``` replaces ```pm4py.soundness_woflan()``` +* aa91fdf7 + * add typing information to ```pm4py.conformance.py``` (containing ```pm4py.conformance_alignments()``` etc.) +* 5d7890b2 + * added ```insert_ev_in_tr_index()``` utility to dataframe utils: possibility to insert the index of an event inside + its trace (e.g. the start event gets 0, the event following gets 1). Allows us to quickly filter on prefixes + directly at the dataframe level. + * added ```automatic_feature_extraction_df()``` utility: possibility to extract the features of an event log + directly starting from a dataframe. Also, an utility for the manual specification of the columns that should be + considered in the event extraction is provided. +* f64c9a6b + * add option to infer concurrency between to activities in a 'strict' manner in the log statistics. + using ```srict=True```, implies that an overlap of '0' zero is not considered concurrent. also + see: https://github.com/pm4py/pm4py-core/issues/201 +* c0083f68 + * implementation based on Stertz, Florian, Jürgen Mangler, and Stefanie Rinderle-Ma. "Temporal Conformance Checking + at Runtime based on Time-infused Process Models." arXiv preprint arXiv:2008.07262 (2020): + * add temporal profile discovery + * add offline conformance checking based on temporal profiles + * add online conformance checking based on termporal profiles +* 4d3cf81c + * support serialization of all pm4py visualizations +* 453805b4 + * compute alignments using edit distance (requires two sets of traces as an input, one represents the log, one + represents (a subset of) the model behavior) + +### Other + +--- + +## PM4PY 2.1.4.1 (2021.01.22) + +### Fixed + +* 1231f518 + * strip text read from nodes in bpmn importing +* 0bc1b330 + * add type checking for bpmn conversion; i.e., if the input is already bpmn, it is returned. +* ea0c7e54 + * fix consistency in obtaining the case arrival statistics in + ```pmpy.statistics.traces.log.case_arrival```; was median, changed to mean. also + see: https://github.com/pm4py/pm4py-core/issues/200 + +### Removed + +### Deprecated + +### Changed + +* 51be0910 + * set ```stream_postprocessing``` default value back to ```False``` for + ``dataframe`` to ```stream``` conversion. Columns containing ```None``` values are no longer filtered by default ( + compliant with ```pm4py<=2.1.2```). also see: https://github.com/pm4py/pm4py-core/issues/199 +* 8976ad45 + * drop the explicit dependency on ```numpy 1.19.3``` + * add explicit dependency ```pulp<=2.1``` +* 1231f518 + * support ```sequenceflow``` operator node in bpmn file import +* 62618eeb + * explicitly blacklist version 1.9.4 of ```numpy``` in the requirements.txt file. + +### Added + +### Other + +--- + +## PM4PY 2.1.4 (2021.01.18) + +### Fixed + +* 35f2278a; 89c5f13b; 6a3579bc; 65fc182b; fa4448a6; c4e44311 c456c681; 6c6d96cc; e3770281; f091c43e; 6a20cf17; 69eb1ae7; + ca780326; 36cb3963 e4f3b16f; c9f80d1f; 94c5a6e0; a713ef3d: + * add fall-back to time-range filter if incorrect argument is passed + * fix the copying of the 'meta attributes' of the filtered event log for the start activities filter + * fix the copying of the 'meta attributes' of the filtered event log for the end activities filter + * fix the copying of the 'meta attributes' of the filtered event log for the attributes filter + * fix the copying of the 'meta attributes' of the filtered event log for the variants filter + * fix the copying of the 'meta attributes' of the filtered event log for the directly follows filter + * fix the copying of the 'meta attributes' for event logs in the ltl checker + * fix the copying of the 'meta attributes' for event logs in the timestamp filter +* ffe29353: + * create event log object before starting the parsing of XML file (in ITERPARSE_MEM_COMPRESSED) + +### Removed + +### Deprecated + +### Changed + +* 8f2d899a + * allow to specify a cap on the number of times we visit the same marking in the extensive playout + * allow to return the firing sequences of extensive playout instead of an event log +* b707377b + * allow to return the firing sequences of basic/stochastic playout instead of an event log +* 9782f522 + * extended exception management in streaming algorithm interface: release locks if exception happen +* 0a741566 + * support importing of bpmn files that do not describe a name for gateways +* 583825d8 + * refactored variant-based filtering: added top-K and coverage percentage +* ba073f54 + * extended DFG filtering +* 8ebda3b1 + * exploit variants in the extensive footprints conformance checking +* dc754c78 + * change range(s) of timestamp filters to be inclusive (<=) rather than exclusive (<) + +### Added + +### Other + +--- + +## PM4PY 2.1.3.2 (2021.01.08) + +### Fixed + +* b5cb7f0d; f1c0f037; 960d40e9 + * fix naming consistency in the filtering interface of pm4py. + +### Removed + +### Deprecated + +### Changed + +### Added + +### Other + +--- + +## PM4PY 2.1.3.1 (2021.01.07) + +### Fixed + +* f9f894ed + * create an iterable that permits, theoretically, to iterate over the infinity of traces admitted by a DFG + * the main ```apply()``` calls the iterable and stops with the usual criterias + * the ```apply()``` can also return the variants of the log + +### Removed + +### Deprecated + +### Changed + +* 1c3666b7 + * minor refactoring of the filtering simplified pm4py interface + +### Added + +* 8b5dee65 + * add lambda-based filtering and sorting to simplified pm4py interface + +### Other + +--- + +## PM4PY 2.1.3 (2021.01.04) + +### Fixed + +* 388348f2 + * bugfix ```remove_flow``` BPMN function +* 3bd4fe0a + * bug fix - DFG visualization needs deepcopy, otherwise it can remove element from the underlying DFG +* 92fde8cf + * bug fix in Petri net playout in stop criterion +* 882468e1 + * compatibility with pulp version 1.6.x + +### Removed + +### Deprecated + +### Changed + +* 41ed5720 + * deepcopy of inputs: since the dictionaries/sets are modified, a "deepcopy" is the best option to ensure data + integrity. + * ```keep_all_activities``` parameter in paths filter: decides if all the activities (also the ones connected by the + low occurrences edges) should be kept, or only the ones appearing in the edges with more occurrences (default). +* 63ccc055 + * IM and IMf: removed dependency on ```pm4py.algo.filtering``` package +* 8a5788fa + * more advanced to bpmn conversion in the simplified interface +* 66e0c074 + * refactoring conversion parameters log->stream and improved stream compression +* 73054b04 + * improved performance of the line-by-line xes importer + * increased XES-standard conformity +* e6136ce5 + * improved performance of the xes exporters + * increased XES-standard conformity + * progress bar for exporting enabled +* 3b692b33 + * added parameter to enable/disable progress bar in importing in ITERPARSE + * compression from file - XES compression moved from general entrypoint to single variant +* 68ff7d00 + * more efficient importing of .xes.gz files +* 4aad427e; 67a42d23 + * get predecessors and successors of a dfg node (in dfg utils) +* 0888ab26 + * added minimum trace length in process tree extensive playout + +### Added + +* 6a946fbd + * allow to compute alignments directly on the dfg using dijkstra +* 50722bb8 + * DFG playout including Markovian probability of traces + +### Other + +--- + +## PM4PY 2.1.2 (2020.12.18) + +### Fixed + +* 2fb0b807 + * support nodes with the same label in BPMN layout algorithm + +### Removed + +### Deprecated + +### Changed + +* 96a7681c + * significant memory footprint reduction for iterparse-based event log importing +* 8270a46e + * significantly faster 'line-by-line' xes exporter +* aae4be33 + * advanced DFG filtering in (activities percentage, paths percentage) ensuring reachability from start and end +* d38f4c97 + * number of occurrences as a start or end activity is visualized in the DFG visualization + +### Added + +* 97cc315c + * add (de)serialization functionality for pm4py objects + +### Other + +--- + +## PM4PY 2.1.1 (2020.12.07) + +### Fixed + +### Removed + +### Deprecated + +### Changed + +* 43e7ce9e + * full conversion of WF-nets to BPMN models + +### Added + +* 029d30f5 + * add visualizing and exporting BPMN models +* f76dd379 + * added conversion to simplified interface + +### Other + +--- + +## PM4PY 2.1.0.2 (2020.11.29) + +### Fixed + +### Removed + +### Deprecated + +### Changed + +### Added + +### Other + +* f18c3e17 + * downgrading ```numpy``` to 1.19.3 for Windows 10 2004 compatibility problems + * skip blocking ```scikit-learn``` installation for Python 3.9 + +--- + +## PM4PY 2.1.0.1 (2020.11.26) + +### Fixed + +* f6cdf1a9 + * hotfix problem in XES importer reading of parameters + +### Removed + +### Deprecated + +### Changed + +### Added + +### Other + +--- + +## PM4PY 2.1.0 (2020.11.24) + +### Fixed + +* a0a7fd09 + * bug fix in the inductive miner: sequence cuts were to maximal, leading to underfitting models (involving too many + skips) +* 5b32725a + * fix use of deepcopy in event log conversion +* 33103b5c + * fix get-variants behavior for event log / df (yielded different results) + +### Removed + +### Deprecated + +* 0138f93d + * deprecated ```pm4py.write_csv()```; conversion and subsequent pandas export should be used. + +### Changed + +* 3b8fcd4a + * apply invisible transition reduction on Petri nets obtained by Heursistic Miner + +### Added + +* 6afd8ab9 + * support for importing/exporting BPMN files; + * supported elements: tasks, xor, and, or gateways + * conversion of BPMN to WF-net + * conversion of Process Tree to BPMN +* 848a1610 + * conversion of dataframes to event streams / event logs now detects the use of XES Extensions +* 8874f7b4 + * add statistics on concurrent activities + * discover eventually follows relations with concurrent activities + +### Other + +--- + +## PM4PY 2.0.1 (2020.11.13) + +### Fixed + +* 4c115dbb + * fix bug in hash function of traces +* 0dd8f28e + * fix bug in the alpha+ algorithm (was adding artificial start/end to the underlying event log) + +### Removed + +### Deprecated + +### Changed + +* commit c51b1f02 + * parametrizing size of the thread pool in streaming package + +### Added + +* 8e07d847 + * add (unbounded) dfg discovery on an event stream +* 16e3f7f5 + * integration of the wf-net to process tree algorithm described in https://doi.org/10.3390/a13110279 +* 1a26f678 + * allow creation of 'live' streaming objects directly from xes and csv files +* b08564ed + * start minor support for interval-based process models +* 36cb7130 + * added support for generic dictionaries in streaming conformance checking + +### Other + +* 81579e19e + * relaxing the importing of some dependencies (pandas, pulp, graphviz, intervaltree) + to make a basic set of functionalities of pm4py work even without those dependencies +* ed45eafc + * fixing circular dependencies issues and added partial compatibility with Python 3.4 + +--- + +## PM4PY 2.0.0 (2020.10.14) + +### Fixed + +* 1a8f9281 + * bug fix in ```pandas``` case size filter + +### Removed + +* 7a89d4dd + * remove deprecated factories + +### Deprecated + +### Changed + +* 62801513 + * improved performance of token-based replay with duplicate labels + +### Added + +* f408a181 + * add streaming token-based replay and footprint-based comparison +* fde08b03 + * output conformance checking diagnostics in a dataframe + +### Other + +* a9c5aa34 + * compatibility with Python 3.9 (limited to windows) + +--- + +## PM4PY 1.5.2.2 (2020.09.29) + +### Fixed + +* 2d4a8b67e25164838030dca709816918ddbf9279 + * fixed dependencies on factories. fixed some release notes. fixed some deprecations. + +### Removed + +### Deprecated + +### Changed + +### Added + +* 0d75241676a736919952e5c9ab96ab2be4c71046 + * added utility for trace attributes filtering + +### Other + +* d8433ac1bbb57082b19b3b97bc726b353096c76e + * better specification of 'stable' requirements + +--- + +## PM4PY 1.5.2.1 (2020.09.25) + +### Fixed + +a6fde4ccfdf0465d8919d3c72d4400bce8d4ab0e + +* fixed some deprecation warnings for external libraries + +### Removed + +### Deprecated + +### Changed + +### Added + +* a5befe62f84af0f3dbe734c713cc8c2c1fc22a04 + * added WOFLAN to the simplified interface + +### Other + +--- + +## PM4PY 1.5.2 (2020.09.24) + +### Fixed + +* 7bf3aea0b4638f6eceaa192ec37e17370e47f560 + * fixing a parameter issue on stochastic playout + +### Removed + +### Deprecated + +### Changed + +### Added + +* 13cd96da7fe22427839f1b21dd38a5ac8ff8c231 + * provide alternative visualizations through Matplotlib of the main visualizations +* e7e3dfa11264a7e737ca7b65165eb7f719817f59 + * add utility to remove an arc + +### Other + +* c42bad174247eb13134e0cb4acb0703c301aa869 + * fixed compatibility with Python 3.5 + +--- + +## PM4PY 1.5.1 (2020.09.15) + +### Fixed + +### Removed + +* 9e926a5d1a373d124a041c72f909eb34083f4649 + * removed the old soundness check + +### Deprecated + +### Changed + +* 526342e3e96c7386dc7451ac0d9ec74c76b86b4f + * performance improvement of the 'less memory' alignment variant +* 83c71eaaa9bb4ee55e2f773dd3fc9704c6324704 + * generalization of the heuristics miner visualization +* 7e7d9ba9e9b4f94d9801f5c8df3c5e4b3afd5971 + * improved speed of event log sampling +* 11d06ba2a44fd7d0a83e439b6615befad5e3c4ba + * faster process tree playout (recursive, ignoring PT statespace) +* ce3a8609013bd7f5890b52cb44e155b57b2fc1c0 + * allow adding (arbitrary) data to transition system + +### Added + +### Other + +--- + +## PM4PY 1.5.0 (2020.08.31) + +### Fixed + +* 30b9059fac3d59abac1c973637bd66388d7dd6db + * bug fix in parameter parsing of log conversions + +### Removed + +### Deprecated + +### Changed + +* 3c9ed4b5e1860e2494d3b68668e3e1021ee59585 + * apply invisible transition reduction in process tree to Petri net transformation +* 26ac905fed4703724805f8fb1b5daa21475df147 + * minor optimizations in process tree alignment approximation algorithm +* c5b5ffdd51cd832be14d3078948e29f88f6c2673 + * add time-out parameter to decomposed alignment calculation +* 4a5fb9ff5ab395529062ce92747b9624a1799b0e + * add bipartite graph matching for correlation mining to obtain exact matching results +* acc46269040a3b60bdcc6f5afe9ea55ddb5549e1 + * minor performance improvement of process tree playout +* 5dd0fe17d5a07a2096afc647306a5673d86508ba + * apply trace-level directly on pandas data frames +* 4c35335da6a6d4419b68a49af3cbd358eca8881d + * add 'COUNT' functionality for log/dfg statistics, e.g., in how many cases does act 'A' appear? + +### Added + +* 3bb5125f1849985ec9e2ba7962a287a25ede8e43 + * new implementation of the (classical) Inductive Miner, based on the PhD thesis of Sander Leemans. The + implementation covers the following fall through functions: + * empty trace + * strict tau loop + * tau loop + * activity once per trace + * activity concurrent + * flower loop +* 1639d7a17660b4641a58cb435f7061d4168ce422 + * implemention of 'WOFLAN', based on the PhD thesis of Eric (H.M.W.) Verbeek. + +### Other + +--- + +## PM4PY 1.4.1.1 (2020.08.13) + +### Fixed + +* 76df914ad48b93a72127b0d79e5547669d3148db + * fixed bug in less-memory alignments when im == fm + +### Removed + +### Deprecated + +### Changed + +### Added + +### Other + +--- + +## PM4PY 1.4.1 (2020.08.10) + +### Fixed + +### Removed + +### Deprecated + +### Changed + +* fc724c4c9e00a388b94efea50be46412c1351bc5 + * refactoring correlation miner + * increased scalability of the correlation miner +* e18021f06e4431628a84b441acf136d44c9baed6 + * revision/enrichment of simplified API + +### Added + +* 9cfd4183968118f488c95ab0bbd7e3e9b66ba355 + * alignments approximation on process trees (https://arxiv.org/pdf/2009.14094) +* f9a898da47367f86bf616a7bc8dc796be1b3e440 + * discovery of log skeleton from the list of variants + +### Other + +--- + +## PM4PY 1.4.0 (2020.08.03) + +### Fixed + +* c5fa9dee9bf7e4eed56785eadc423b59214d3df0 + * compatibility with latest IPython API +* 616623b358d1e1a9aa789f43e2c8cf7670ee4d79 + * clean-up in linear solver functionality + * bug fix in usage of PulP result vector + +### Removed + +### Deprecated + +### Changed + +* 4616952ee5c184d35d26e986b298e1e586b38b3f + * minor refactoring of the alignment code +* 3477e5345068018fa6aa91e04b6da4184e4d3c94 + * update of verions of package dependencies + +### Added + +* cba7a2e574aa15709d0a2dda35f8a27da9200f42 + * [beta release] simplified 'pythonic' method invocation (see ```examples/simplified_interface.py```) +* ade44e6d78551c454b477f36cbe3248a5d4e6c8b + * added the 'correlation miner' to pm4py (https://is.tm.tue.nl/staff/rdijkman/papers/Pourmirza2017.pdf) +* 9564b54a7111916c7bc3d6f1e4c56f3829978efe + * add visualization of conformance checking results on process tree +* 988258a2c655d17201c5b1a7120d19ab5954dbe3 + * added 'extensive' playout for process trees (for footprint comparison) + +### Other + +--- + +## PM4PY 1.3.5.2 (2020.07.24) + +### Fixed + +* a31467a560b940a2cb426751e032b4ea79bbb29f + * add cast to Event class in event conversion +* 0febe4eda5772685498da2d79d144effdf61ce20 + * fix in alpha miner; conflict check yielded self-loops in some cases + +### Removed + +### Deprecated + +### Changed + +### Added + +### Other + +--- + +## PM4PY 1.3.5.1 (2020.07.22) + +### Fixed + +* 844459e366e77ebf88a8d01728064048d71a3e6f + * remove ```pyemd``` from requirements as it requires a full C studio installation; can be installed and used * + optionally* + +### Removed + +### Deprecated + +### Changed + +### Added + +### Other + +--- + +## PM4PY 1.3.5 (2020.07.20) + +### Fixed + +* 6cdf4483548027420b0a54c681a3ecfd515ab8f3 + * bug fix for de/recomposition approach to handle duplicated labels +* 58149e7f085bbedb47e31d58d10e37d686e46a72 + * small fix in importing of parquet files +* b08675fe8c03207c4701d2eb8b91c234e3ddbe1b + * fix in IMdf; the noise threshold was overridden before +* 772ea5d5af9ab2fa3a424b91670d81487ab2667b + * minor fix for timestamps that end with symbol 'Z' (Zero timestamp) +* 1e13cbdb011dff175850c4c665283bf60e0db84c + * fix Scipy dependency for tree generator + +### Removed + +### Deprecated + +### Changed + +* 921328cd06d8870ecaa601d53cfde30a6015aec7 + * parameterize simplicity metric to use a given 'K' for reference +* 8403093c3e18c1493f4fd72bc83914dadb03e4c2 + * change the color scheme for net comparison + +### Added + +* 143f60a0b4fb265ba5e9d997efddf8f8d66458c3 + * add support for process tree importing (.ptml files) +* 4b9132f2835f574d9e7e5af113e5fc96bd821ccf + * add new A* version that encodes the states of the state-space differently (up to 10% memory reduction) +* 93e6e84c4ea78afc562f4ba6cee42de8718eb4cb + * add 'stochastic' playout, i.e., use token-based replay on a given log to guide the playout of a given Petri net +* 107797c5d1be1d742e6522a14231f4f9fce1cb38 + * add EMD-based process model evaluation ('Earth Mover's Distance' between log/model) +* 1e02596bc90b6fc22a8c89e80567bdddc2c8f1b7 + * add process tree based footprint computation + +### Other + +--- + +## PM4PY 1.3.4 (2020.07.06) + +### Fixed + +### Removed + +### Deprecated + +### Changed + +* f05ba60e2faa28b2f2e2d7ef65e0ac415ae298e8 + * improved memory performance of Dijkstra-based alignments, restriction of model-move scheduling is applied (only + one of many is chosen) +* eaed442d10a5b4c9eead3966cef473e2c3f0d61b + * improved efficiency of reachability graph computation + +### Added + +* a42d0f087c94cb9e7914532f7ae0228af3a7f9ce + * add 'extensive' playout, which allows to generate all traces in the language of a model up-to a given length. +* eaed442d10a5b4c9eead3966cef473e2c3f0d61b + * added footprint-based conformance checking + +### Other + +* b99da02411259897f1df52f9a9a62153228dab8a + * ```PuLP<=2.1``` is forced (for now, due to excessive console output of v2.2.) + * new version of ```Pyvis``` requires additional dependencies (Apache, BSD, MIT licenses), which are now specified + +--- + +## PM4PY 1.3.3 (2020.06.22) + +### Fixed + +* 1278713e2209d7b1e2287afbd9d80097db028617 + * minor fixes in (to-be-deprecated) Parquet importer and exporter + +### Removed + +### Deprecated + +### Changed + +* 59630ed8456d9e7842e05fee4c53ff1a3d1389a0 + * improved memory performance of Dijkstra-based alignments + +### Added + +### Other + +--- + +## PM4PY 1.3.2 (2020.06.08) + +### Fixed + +### Removed + +### Deprecated + +### Changed + +### Added + +* 98e6d6d6219cceeeb2421392e9981ec808d2a468 (Merge Request #89) + * Support importing and exporting of '.dfg' files (similar to ProM 6.10) +* 7ca768b7fcd1eea468bcdb1c1e8c9397676b511a (Merge Request #90) + * add a detailed list of all third-party dependencies (README.THIRD_PARTY.md) +* e0685638c6c0c171583108e23f752ebef70d033e (Merge Request 94) + * new version of Dijkstra based alignment computation + +### Other + +--- + +## PM4PY 1.3.1 (2020.05.25) + +### Fixed + +* d51430106dea70473777c6868a3676c027faf607 + * fix paths filter for Pandas dataframe when dataframe is not sorted + +### Removed + +* c7a76e0aaffb5dbcad769b2fbc52fd8c03703769 + * cleanup of the petri net impoprter/exporter, i.e., stochastic/layout information is now stored in the 'properties' + object of places/transitions/nets + +### Deprecated + +### Changed + +* 00d7c405628033e8f383a845e61a84205f7bbc83 + * color scheme of the log-log comparison (pm4py.algo.enhancement.comparison.petrinet) +* e84c7dc88907b408b4caf97524dd69a378e1859e + * update the README.md file +* 332de04112cf780cbc711553e34ca4b835ee8425 + * add parameters object to transient analysis call to dfg learner +* f0976015c2b5b7384135855e75b36f69fb44a4db + * add final marking to the basic playout of Petri nets +* e0d43c6dd5ee2492eabfd14c507b430088ec9cf0 + * allow prefixes in petri net attribute names (petri net importing) + +### Added + +* 095f35a3bf9f9c3bea0d518c72c76380f38b77b2 + * add support for (correctly) importing lists from .xes files + +### Other + +--- + +## PM4PY 1.3.0 (2020.05.11) + +### Fixed + +* 112dc3fc56f0d5e3f3ae0c737a5b0b001be31ba5 + * typo in Petri net weight (reporter: dominiquesommers) +* 4a74ef159d03d3cf3ca43bd7c99f5f97da16baf8 + * problems in the evaluation of replay fitness of recomposed alignments +* 1f40a17dcade522d308b56a9f53b40c5b8a95dfc + * cleaning circular dependencies. relaxing some absolutely strict dependencies for some border-line configurations. +* 9780ef609db7bbb24323d3584abc2338f24252d3 + * copying of Event/Trace/EventStream/EventLog objects (reporter: M.Pegoraro) +* 51802f0828a6d207a5185c06a71bdb3a9faa1a46 + * problem with sampling log (reporter: jacksbrajin) +* b1f16bf087691181adcf5616aa85e3e454a7169c + * fixed problem with the discovery of 2-loops in the Heuristics Miner (reporter: czwilling) +* c96dcb16064ed156a1f48075445113bb5afc6264 + * fixed ```get_variants_acyclic()``` function in petri utils (authorship: M.Pegoraro) + +### Removed + +### Deprecated + +* b4cea4be6fe6ff90f58c405f9f0acb4dbac973f4 + * factories are deprecated + +### Changed + +* b4cea4be6fe6ff90f58c405f9f0acb4dbac973f4 + * factories have been renamed + +### Added + +* e8f250fec6781c088da8204923ad8817f1b5d689 + * decision point mining with alignments (for any scikit classification approach) is now integrated. +* 4ff811ab80b5df15e5ec1da082b4f76c72dcf684 + * trace attribute hierarchical clustering (MSc Thesis Yukun Cao; FIT/RWTH) +* 4fca12c1608818348bbd51e390140a8f7e79d7f6 + * alignments decomposition/recomposition +* f8d52aa69a3d720d45a93b35c79b4241bb8f7691 + * possibility to provide the final marking to the playout factory +* 9a5a64ea2941d69be07ee0e93b771c80f5820166 + * hash functions for event log objects +* 9f76d2e61dbc1cc74fccafac6f60d9ce69b7c791 + * added ```table_to_stream()``` auxiliary function in dataframe_utils + +### Other + +--- + +## PM4PY 1.2.13 (2020.05.11) + +### Fixed + +* 531b767d85bb4c95996ae0c9644a958f75aad120 + * utilities of Petri nets (acyclic net variants (M. Pegoraro); strongly connected components by NX graph) + +### Removed + +### Deprecated + +### Changed + +### Added + +* c9cebbfab9c82bf8edbe8851a000fd1b1f31f8be + * ```properties``` object to all members of the Petri net class (including transitions/places/arcs) + +### Other + +--- + +## PM4PY 1.2.12 (2020.03.18) + +### Fixed + +* ef3b4b62fd186df46236a8af9aa890358dbcd1bc + * problem in the generation of logs from process trees +* 548c57a6d2340dcaba7ef11464ebe193f8fb9c5c + * filter by variants percentage +* c49a9c441feb65a74d5c5da774fdda79295665cc + * problems of the token-based replay with the count of tokens at global and local level +* f554aec318717ee1fb7f81c4e0acbd6da7e7bc34 + * continuous time Markov Chain steady-state analysis +* e05145de972944f211f2763656eb6e41aa64e0b5 + * revised process tree fold and tau reduce functions +* c3f66b8cb8667c2f204a1da899a216656386c2fa + * ignore comments in .pnml files + +### Removed + +* 31e1cd29437d6b183357bbc5c103131484d390b3 + * problematic dependencies ortools and pyarrow in the project (when installed, can be used, but no more required by + default) + +### Deprecated + +### Changed + +### Added + +* f554aec318717ee1fb7f81c4e0acbd6da7e7bc34 + * converting a performance DFG to a Q-matrix for transient analysis +* cc766164f2397fe2cb33f8278372469e25cfecd6 + * business hours module supports full-days shifts (e.g. from 0 to 24) +* cc766164f2397fe2cb33f8278372469e25cfecd6 + * backwards state space exploration (supports duplicate transitions) for token-based replay +* 1b3c32916fe0ccbc4d3f73a44cc68e2ca83a810e + * Visual log comparison on a Petri net by plasma coloring + +### Other + +--- + +## PM4PY 1.2.11 (2020.02.21) + +### Fixed + +* 6f320562a836cd949dbbe6ec7751f8f9514b01ec + * parameter object for calling alignment code directly +* 471f414820c7b3f919aa97ccdc684d40cf132b3c + * dependency problem with ORTools and PyArrow +* 157fadffd3b953c105e67f4909547f097d77ea0a + * reduce inernal (cyclic) dependencies within pm4py +* f38b6089b7eb6a4518a9c33e9775120874352657; af1328e2dad82f0a059e00942167a29cb918c85f; + e8e1ab443f2dedb2cd348f35bc49eed412d66e1d + * hash and equals function of process trees +* 229bd7ed78ea80aefbb6c7fcfa173edda682c1c7 + * refactoring of the Monte Carlo simulation. + * extend the simulation to support arc weights that are provided by the replay (e.g. informed transition pickup) + * extend the simulation to support more than one resource per place through semaphores + * maximum execution time per simulation thread + * general refactoring of the code + * introduce logging information about the simulation + * improving documentation + * improving clarity of the code +* f5132302e06aa49f26ab3264bb3147d0660a11c0 + * performance of log generation from process trees +* 9e64f2635123aa5c3146fb2ad03863cbf93175df + * fixed incongruency in variants statistics (was there for log, not for dataframes) + * increased coverage of tests, and made some of them more lean + * introduced some additional tests on the new functionalities + * updated Dockerfile + * updated setup with new packages + * removed remainings of the SIMPLE algorithm in the tests folder +* 382162c648fb8e32b0145a6ff9427af8a7fb39fa + * fixed parameters initialization to make it uniform for the rest of the project for all the versions of IMDF + * added missing documentation in factory (was there only in the versions) + * moved log conversions from factory to specific versions (since they are indeed version specific, if later we + include the log version) + * removed some useless calculations on the new DFG based versions (were there, but never used!) + * introduced two new methods, apply_variants and apply_tree_variants, that are able to apply inductive miner from a + list of variants + * separated DEFAULT_VARIANT from DEFAULT_VARIANT_DFG (indeed, the first in future versions may become the log) + * increased number of tests in the tests/ folder for inductive miner + +### Removed + +* 502c5d722d483c567f0e08c16da0bb4c87a94e36 + * remove the empty performance spectrum visualizer folder + +### Deprecated + +### Changed + +* e8b030afd37559c93f79e1dd030fdc540aa62135 + * provide fast-parquet library as an alternative to read/write parquet files. + +### Added + +* 557472bc78900d90beb0757279ef29b89aa410b1 + * integrate LogSkeleton for process discovery and conformance checking +* 90ba7bf1495fdac7ccef3112efa95687c46a5dd1 + * importing and exporting of Petri net weights + +### Other + +--- + +## PM4PY 1.2.10 (2020.01.31) + +### Fixed + +* f571ec65ca544a9322b89cf96299d03da65de5a0 + * import DFG to PN + * process tree parsing +* dca5cc602ba8381e5d4e265341dfc5a5292a80c0 + * problem with alignments when transitions have empty preset +* 68643cb109503e54787f98eb8f40650e37aa151e + * process tree hashing +* 9d27f132d40638933be00f9d178e9a1167d36166 + * conversion between the log types + +### Removed + +### Deprecated + +### Changed + +* 945fd64e481c0fbf020da7f71cb1a7974ae9629c + * make visualization deterministic for process trees, Petri nets and DFGs +* 15be58abb314c679ddf3b65fa6832c680768c413 + * generic parsing of dates (removed strict dependency on ciso8601) + +### Added + +### Other + +--- + +## PM4PY 1.2.9 (2020.01.24) + +### Fixed + +* be0a282be033765c9d1d7f1a7ba541a11c046834 + * matplotlib backend settings + +### Removed + +### Deprecated + +### Changed + +* ed42182f32eba37df71d9f466ad165036f8d1086 + * full support for numpy v1.18 +* d1a418f8fa2513a469149383fe69df9a4e6fea06 + * full support pandas v1.0 + +### Added + +### Other + +--- + +## PM4PY 1.2.8 (2020.01.10) + +### Fixed + +* 6908a34c73c74c42aac3ddf31b964fcae680919e + * inductive miner sequence cut detection +* 881f1fa4e76b9e35c2d80ab7d241183b2d6871c0 + * 'Best effort fix' for graphviz based visualizations + +### Removed + +### Deprecated + +### Changed + +### Added + +### Other + +--- + +## PM4PY 1.2.7 (2019.12.20) + +### Fixed + +* programming error in the alignments code +* ```should_close``` for XOR node in PT generation +* ```execute_enabled``` for parallel and OR node in PT generation +* process tree children setter function + +### Removed + +* ```copy.copy``` for parent nodes of childs in log generation from process tree +* windows platform reuquirement for ortools/pyarrow + +### Deprecated + +### Changed + +* recursion depth in token-based replay invisibles exploration +* consider only fitting traces in the Align-ETConformance count +* consider all the optimal alignments (as described in the paper) and not only the first one +* moving of utilities and making the search function using Dijkstra (since we are looking for fit paths) instead of A* +* LTL checker: making existing filters more performant (A eventually B eventually C) + +### Added + +* LTL checker: introducing A eventually B eventually C eventually D +* LTL checker: introducing time boundaries for each arc of the eventually follows relation + +### Other + +___ + +## PM4PY 1.2.6 (2019.11.29) + +### Fixed + +* bug fix in the 'escaping edges' based precision + +### Removed + +### Deprecated + +### Changed + +### Added + +* Pyarrow serialization integration (supporting in-memory and to .pkl file serialization) + +### Other diff --git a/pm4py/Dockerfile b/pm4py/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..f1a9b6feaaf5a0ac6df1c6f78749950be413a47e --- /dev/null +++ b/pm4py/Dockerfile @@ -0,0 +1,36 @@ +FROM python:3.12.4-bookworm + +RUN apt-get update +RUN apt-get -y upgrade +RUN apt-get -y install aptitude locate apt-file nano vim git zip unzip wget graphviz curl gnupg gnupg2 tini iputils-ping unixodbc-dev +RUN apt-get -y install gcc g++ flex bison pkg-config automake autoconf cmake +RUN apt-get -y install python3-dev python3-pydot python3-tk +RUN apt-get -y install libopenblas-dev liblapack-dev libboost-all-dev libncurses5-dev libtool libssl-dev libjemalloc-dev libboost-dev libboost-filesystem-dev libboost-system-dev libboost-regex-dev libxml2-dev libxslt-dev libfreetype6-dev libsuitesparse-dev libclang-16-dev llvm-16-dev libthrift-dev libfftw3-dev +RUN python3 -m pip install --upgrade pip +RUN pip3 install deprecation==2.1.0 graphviz==0.20.3 intervaltree==3.1.0 networkx==3.3 packaging==24.1 python-dateutil==2.9.0.post0 pytz==2024.1 setuptools==70.1.1 six==1.16.0 sortedcontainers==2.4.0 tzdata==2024.1 wheel==0.43.0 +RUN pip3 install colorama==0.4.6 cycler==0.12.1 pydotplus==2.0.2 pyparsing==3.1.2 tqdm==4.66.4 +RUN pip3 install lxml==5.2.2 numpy==2.0.0 pandas==2.2.2 scipy==1.14.0 +RUN pip3 install contourpy==1.2.1 fonttools==4.53.0 kiwisolver==1.4.5 matplotlib==3.9.0 pillow==10.4.0 +RUN pip3 install anyio==4.4.0 asttokens==2.4.1 attrs==23.2.0 certifi==2024.6.2 charset-normalizer==3.3.2 convertdate==2.4.0 decorator==5.1.1 distro==1.9.0 executing==2.0.1 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 idna==3.7 ipython==8.26.0 jedi==0.19.1 Jinja2==3.1.4 jsonpickle==3.2.2 jsonschema-specifications==2023.12.1 lunardate==0.2.2 MarkupSafe==2.1.5 matplotlib-inline==0.1.7 parso==0.8.4 prompt-toolkit==3.0.47 pure-eval==0.2.2 pydantic==2.7.4 Pygments==2.18.0 pyluach==2.2.0 PyMeeus==0.5.12 referencing==0.35.1 rpds-py==0.18.1 sniffio==1.3.1 stack-data==0.6.3 traitlets==5.14.3 typing_extensions==4.12.2 urllib3==2.2.2 wcwidth==0.2.13 +RUN pip3 install jsonschema==4.22.0 openai==1.35.7 pyvis==0.3.2 requests==2.32.3 workalendar==17.0.0 +RUN pip3 install -U meson-python==0.15.0 Cython==3.0.10 ninja==1.11.1.1 spin==0.8 build==1.2.1 setuptools_scm==8.0.4 + +#RUN cd / && git clone https://github.com/numpy/numpy.git && cd /numpy && git submodule update --init && pip3 install . +#RUN cd / && git clone https://github.com/pandas-dev/pandas.git && cd /pandas && pip3 install . +#RUN cd / && git clone https://github.com/scipy/scipy.git && cd /scipy && git submodule update --init && pip3 install . +#RUN cd / && git clone https://github.com/lxml/lxml.git && cd /lxml && pip3 install . +#RUN cd / && git clone https://github.com/matplotlib/matplotlib.git && cd /matplotlib && pip3 install . +#RUN cd / && git clone https://github.com/duckdb/duckdb.git && cd /duckdb && make && cd /duckdb/tools/pythonpkg && pip3 install . +#RUN cd / && git clone https://github.com/apache/arrow.git && export ARROW_HOME=/dist && export LD_LIBRARY_PATH=/dist/lib:$LD_LIBRARY_PATH && export CMAKE_PREFIX_PATH=$ARROW_HOME:$CMAKE_PREFIX_PATH && cd /arrow/ && mkdir cpp/build && cd cpp/build && cmake -DCMAKE_INSTALL_PREFIX=$ARROW_HOME -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Debug -DARROW_BUILD_TESTS=ON -DARROW_COMPUTE=ON -DARROW_CSV=ON -DARROW_DATASET=ON -DARROW_FILESYSTEM=ON -DARROW_HDFS=ON -DARROW_JSON=ON -DARROW_PARQUET=ON -DARROW_WITH_BROTLI=ON -DARROW_WITH_BZ2=ON -DARROW_WITH_LZ4=ON -DARROW_WITH_SNAPPY=ON -DARROW_WITH_ZLIB=ON -DARROW_WITH_ZSTD=ON -DPARQUET_REQUIRE_ENCRYPTION=ON .. && make -j4 && make install && cd /arrow/python && export PYARROW_WITH_PARQUET=1 && export PYARROW_WITH_DATASET=1 && export PYARROW_PARALLEL=4 && python3 setup.py build_ext --inplace && python3 setup.py install +#RUN cd / && git clone https://github.com/python-greenlet/greenlet && cd /greenlet && pip3 install . +#RUN cd / && git clone https://github.com/sqlalchemy/sqlalchemy.git && cd /sqlalchemy && pip3 install . +#RUN cd / && git clone https://github.com/mkleehammer/pyodbc.git && cd /pyodbc && pip3 install . + +#RUN cd / && git clone https://github.com/scikit-learn/scikit-learn.git && cd /scikit-learn && pip3 install . +#RUN cd / && git clone https://github.com/chuanconggao/PrefixSpan-py.git && cd /PrefixSpan-py && pip3 install . +#RUN cd / && git clone https://github.com/wmayner/pyemd.git && cd /pyemd && pip3 install . +#RUN cd / && wget https://ftp.gnu.org/gnu/glpk/glpk-5.0.tar.gz && tar xzvf glpk-5.0.tar.gz && cd /glpk-5.0 && ./configure && make && make install +#RUN cd / && git clone https://github.com/cvxopt/cvxopt.git && cd /cvxopt && sed -i 's/BUILD_GLPK = 0/BUILD_GLPK = 1/' setup.py && python3 setup.py build && python3 setup.py install + +COPY . /app +RUN cd /app && pip3 install --no-deps . diff --git a/pm4py/MANIFEST.in b/pm4py/MANIFEST.in new file mode 100644 index 0000000000000000000000000000000000000000..5045c24749f84555441f78a02145ee0f3fffea61 --- /dev/null +++ b/pm4py/MANIFEST.in @@ -0,0 +1,2 @@ +recursive-include pm4py *.svg +recursive-include pm4py *.html diff --git a/pm4py/README.md b/pm4py/README.md new file mode 100644 index 0000000000000000000000000000000000000000..df4f54f4a7aad22e1b92aae85f3b758565ec52c1 --- /dev/null +++ b/pm4py/README.md @@ -0,0 +1,62 @@ +# pm4py +pm4py is a python library that supports (state-of-the-art) process mining algorithms in python. +It is open source (licensed under GPL) and intended to be used in both academia and industry projects. +pm4py is a product of the Fraunhofer Institute for Applied Information Technology. + +## Documentation / API +The full documentation of pm4py can be found at https://pm4py.fit.fraunhofer.de + +## First Example +A very simple example, to whet your appetite: + +```python +import pm4py + +if __name__ == "__main__": + log = pm4py.read_xes('') + net, initial_marking, final_marking = pm4py.discover_petri_net_inductive(log) + pm4py.view_petri_net(net, initial_marking, final_marking, format="svg") +``` + +## Installation +pm4py can be installed on Python 3.9.x / 3.10.x / 3.11.x / 3.12.x by invoking: +*pip install -U pm4py* + +pm4py is also running on older Python environments with different requirements sets, including: +- Python 3.8 (3.8.10): third_party/old_python_deps/requirements_py38.txt + +## Requirements +pm4py depends on some other Python packages, with different levels of importance: +* *Essential requirements*: numpy, pandas, deprecation, networkx +* *Normal requirements* (installed by default with the pm4py package, important for mainstream usage): graphviz, intervaltree, lxml, matplotlib, pydotplus, pytz, scipy, tqdm +* *Optional requirements* (not installed by default): requests, pyvis, jsonschema, workalendar, pyarrow, scikit-learn, polars, openai, pyemd, pyaudio, pydub, pygame, pywin32, pygetwindow, pynput + +## Release Notes +To track the incremental updates, please refer to the *CHANGELOG* file. + +## Third Party Dependencies +As scientific library in the Python ecosystem, we rely on external libraries to offer our features. +In the */third_party* folder, we list all the licenses of our direct dependencies. +Please check the */third_party/LICENSES_TRANSITIVE* file to get a full list of all transitive dependencies and the corresponding license. + +## Citing pm4py +If you are using pm4py in your scientific work, please cite pm4py as follows: + +**Alessandro Berti, Sebastiaan van Zelst, Daniel Schuster**. (2023). *PM4Py: A process mining library for Python*. Software Impacts, 17, 100556. [DOI](https://doi.org/10.1016/j.simpa.2023.100556) | [Article Link](https://www.sciencedirect.com/science/article/pii/S2665963823000933) + +BiBTeX: + +```bibtex +@article{pm4py, +title = {PM4Py: A process mining library for Python}, +journal = {Software Impacts}, +volume = {17}, +pages = {100556}, +year = {2023}, +issn = {2665-9638}, +doi = {https://doi.org/10.1016/j.simpa.2023.100556}, +url = {https://www.sciencedirect.com/science/article/pii/S2665963823000933}, +author = {Alessandro Berti and Sebastiaan van Zelst and Daniel Schuster}, +} +``` + diff --git a/pm4py/docs/.buildinfo b/pm4py/docs/.buildinfo new file mode 100644 index 0000000000000000000000000000000000000000..152bd9ddcc54ed0a5dc379589ebbeebe6d95ce21 --- /dev/null +++ b/pm4py/docs/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 5eb7f31d57fb2354f38aa0b1fbc31deb +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/pm4py/docs/.nojekyll b/pm4py/docs/.nojekyll new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pm4py/docs/LICENSE_HEADER_GITHUB.txt b/pm4py/docs/LICENSE_HEADER_GITHUB.txt new file mode 100644 index 0000000000000000000000000000000000000000..e7cd09aaff80982f31bcfcd0187fa6a645240671 --- /dev/null +++ b/pm4py/docs/LICENSE_HEADER_GITHUB.txt @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' \ No newline at end of file diff --git a/pm4py/docs/Makefile b/pm4py/docs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e16ca2caa6d7501f3fbc65dcaa03fe29d824a0c8 --- /dev/null +++ b/pm4py/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = pm4py +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/pm4py/docs/README b/pm4py/docs/README new file mode 100644 index 0000000000000000000000000000000000000000..d0700b57d392e6376d9524a359ffbbd9b838b867 --- /dev/null +++ b/pm4py/docs/README @@ -0,0 +1,12 @@ +This document describes how to generate API documentation using sphinx. + +First, install sphinx (we assume you are able to do this via the official sphinx website). + +To generate the docs perform the following steps. + 1. First create all the actuall .rst files that define all the documentation. + In cmd/terminal browse to the docs folder (this folder ;-)) and run: + > sphinx-apidoc --module-first -o source ../ + You can optionally opt to choose to remove all the .rst files from the source folder (except for index.rst!!!!) + + 2. Generate corresponding html files: + make html diff --git a/pm4py/docs/header_script.py b/pm4py/docs/header_script.py new file mode 100644 index 0000000000000000000000000000000000000000..fbdc464e047542d3afe5b81bc78db9609bb17161 --- /dev/null +++ b/pm4py/docs/header_script.py @@ -0,0 +1,15 @@ +import glob + +if __name__ == '__main__': + LICENSE_HEADER_FILE_PATH = r'LICENSE_HEADER_GITHUB.txt' + with open(LICENSE_HEADER_FILE_PATH, 'r') as license_file: + license = license_file.read() + for filename in glob.iglob('../pm4py/' + '**/*.py', recursive=True): + with open(filename, 'r', encoding='utf-8') as original: + data = original.read() + if (data.find(license) == -1): + with open(filename, 'w', encoding='utf-8') as modified: + print('adding license to: ' + filename) + modified.write(license + '\n' + data) + else: + print('skipping: ' + filename) diff --git a/pm4py/docs/make.bat b/pm4py/docs/make.bat new file mode 100644 index 0000000000000000000000000000000000000000..1a9f2a42972e1b2d3da0ccee1c16872b3113d2be --- /dev/null +++ b/pm4py/docs/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build +set SPHINXPROJ=pm4py + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/pm4py/docs/source/.gitignore b/pm4py/docs/source/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..11390d258c046f62d0472e36d543b92e980496ae --- /dev/null +++ b/pm4py/docs/source/.gitignore @@ -0,0 +1 @@ +generated/* diff --git a/pm4py/docs/source/_static/css/custom.css b/pm4py/docs/source/_static/css/custom.css new file mode 100644 index 0000000000000000000000000000000000000000..1a3c6ce1fa05dea62b0cf7c156485c112330bcde --- /dev/null +++ b/pm4py/docs/source/_static/css/custom.css @@ -0,0 +1,7 @@ +.bd-header { + display: none; +} + +.bd-footer { + display: none; +} diff --git a/pm4py/docs/source/api.rst b/pm4py/docs/source/api.rst new file mode 100644 index 0000000000000000000000000000000000000000..466d614fdd530d48c294b3afa244e28bfed576c3 --- /dev/null +++ b/pm4py/docs/source/api.rst @@ -0,0 +1,683 @@ +API Reference +============= +This page provides an overview of all public ``pm4py`` objects, functions and methods. + +Input (:mod:`pm4py.read`) +--------------------------------- +``pm4py`` supports importing the following standardized *event data* format: + + * ``.xes`` files (`xes-standard `_); General interchange format for event data. :meth:`pm4py.read.read_xes` + +In case an event log is stored as a ``.csv`` file, ``pandas`` can be used to directly import the event log as a ``data frame`` (`docs `_). +``.xes`` files are internally converted to a ``pandas dataframe``, which is the default data structure used by all algorithms implemented in ``pm4py``. + +Additional file formats that are currently supported by pm4py are: + + * ``.bpmn`` files; File format specifying process models in the *BPMN* process modeling formalism :meth:`pm4py.read.read_bpmn` + * ``.dfg`` files; File format specifying *directly follows graphs* (also referred to as *process maps*) :meth:`pm4py.read.read_dfg` + * ``.pnml`` files; File format specifying *Petri net* models :meth:`pm4py.read.read_pnml` + * ``.ptml`` files; File format specifying *Process Tree* models :meth:`pm4py.read.read_ptml` + +Importing object-centric event logs is possible given the following formats: + + * ``.csv`` specification :meth:`pm4py.read.read_ocel_csv` + * ``.jsonocel`` specification :meth:`pm4py.read.read_ocel_json` + * ``.xmlocel`` specification :meth:`pm4py.read.read_ocel_xml` + * ``.sqlite`` specification :meth:`pm4py.read.read_ocel_sqlite` + +Importing object-centric event logs (OCEL2.0) is possible given the following formats: + + * ``.xmlocel`` specification :meth:`pm4py.read.read_ocel2_xml` + * ``.sqlite`` specification :meth:`pm4py.read.read_ocel2_sqlite` + * ``.jsonocel`` specification :meth:`pm4py.read.read_ocel2_json` + + +Output (:mod:`pm4py.write`) +------------------------------------- +Similarly to event data importing, ``pm4py`` supports export functionalities to: + + * ``.bpmn`` files, :meth:`pm4py.write.write_bpmn` + * ``.dfg`` files, :meth:`pm4py.write.write_dfg` + * ``.pnml`` files, :meth:`pm4py.write.write_pnml` + * ``.ptml`` files, :meth:`pm4py.write.write_ptml` + * ``.xes`` files. :meth:`pm4py.write.write_xes` + +Exporting object-centric event logs is possible to the following formats: + + * ``.csv`` specification :meth:`pm4py.write.write_ocel_csv` + * ``.jsonocel`` specification :meth:`pm4py.write.write_ocel_json` + * ``.xmlocel`` specification :meth:`pm4py.write.write_ocel_xml` + * ``.sqlite`` specification :meth:`pm4py.write.write_ocel_sqlite` + +Exporting object-centric event logs (OCEL2.0) is possible to the following formats: + + * ``.xmlocel`` specification :meth:`pm4py.write.write_ocel2_xml` + * ``.sqlite`` specification :meth:`pm4py.write.write_ocel2_sqlite` + * ``.jsonocel`` specification :meth:`pm4py.write.write_ocel2_json` + + +Conversion (:mod:`pm4py.convert`) +------------------------------------- +Several conversions are available from/to different objects supported by ``pm4py``. +The following conversions are currently available: + + * :meth:`pm4py.convert.convert_to_bpmn` converts a process model to BPMN + * :meth:`pm4py.convert.convert_to_petri_net` converts a process model to Petri net + * :meth:`pm4py.convert.convert_to_process_tree` converts a process model to a process tree + * :meth:`pm4py.convert.convert_to_reachability_graph` converts a process model to a reachability graph + * :meth:`pm4py.convert.convert_log_to_ocel` converts an event log to an object-centric event log + * :meth:`pm4py.convert.convert_log_to_networkx` converts a traditional event log (dataframe) to a directed graph (NetworkX) + * :meth:`pm4py.convert.convert_ocel_to_networkx` converts an object-centric event log to a directed graph (NetworkX) + * :meth:`pm4py.convert.convert_petri_net_to_networkx` converts an accepting Petri net to a directed graph (NetworkX) + * :meth:`pm4py.convert.convert_petri_net_type` change the Petri net internal type + + +Process Discovery (:mod:`pm4py.discovery`) +------------------------------------------ +Process Discovery algorithms discover a process model that describes the process execution, as stored in the event log. +``pm4py`` implements a variety of different process discovery algorithms. +These different algorithms return different kinds of models, i.e., models with *imprecise execution semantics*, *procedural process models* and *declarative process models*. +Among the models with *imprecise execution semantics*, ``pm4py`` currently supports: + + * :meth:`pm4py.discovery.discover_dfg`; discovers a *directly follows graph* annotated with frequency information (based on the log). + * :meth:`pm4py.discovery.discover_performance_dfg`; discovers a *directly follows graph* annotated with performance infomration (based on the log). + +Among *procedural process models*, ``pm4py`` currently supports: + + * :meth:`pm4py.discovery.discover_petri_net_alpha`; discovers a *Petri net* using the Alpha Miner algorithm. + * :meth:`pm4py.discovery.discover_petri_net_inductive`; discovers a *Petri net* using the Inductive Miner algorithm. + * :meth:`pm4py.discovery.discover_petri_net_heuristics`; discovers a *Petri net* using the Heuristics Miner algorithm. + * :meth:`pm4py.discovery.discover_petri_net_ilp`; discovers a *Petri net* using the ILP Miner algorithm. + * :meth:`pm4py.discovery.discover_process_tree_inductive`; discovers a *process tree* using the Inductive Miner algorithm. + * :meth:`pm4py.discovery.discover_bpmn_inductive`; discovers a *BPMN model* using the Inductive Miner algorithm. + * :meth:`pm4py.discovery.discover_heuristics_net`; discovers an *heuristics net* using the Heuristics Miner algorithm. + * :meth:`pm4py.discovery.discover_footprints`; discovers the *footprints matrix* of the log or the model. + * :meth:`pm4py.discovery.discover_powl`; discovers a *partial order workflow language* (POWL) model. + +Among *declarative process models*, ``pm4py`` currently supports: + + * :meth:`pm4py.discovery.discover_declare`; discovers a *DECLARE* model. + * :meth:`pm4py.discovery.discover_log_skeleton`; discovers a *log skeleton*. + * :meth:`pm4py.discovery.discover_temporal_profile`; discovers a *temporal profile*. + + +Conformance Checking (:mod:`pm4py.conformance`) +----------------------------------------------- +Conformance checking techniques compare a process model with an event log of the same process. The goal is to check if the event log conforms to the model, and, vice versa. +Among procedural process models, ``pm4py`` currently supports: + + * :meth:`pm4py.conformance.conformance_diagnostics_token_based_replay`; token-based replay between the event log and a *Petri net*. + * :meth:`pm4py.conformance.conformance_diagnostics_alignments`; alignment-based replay between the event log and a *Petri net*. + * :meth:`pm4py.conformance.conformance_diagnostics_footprints`; footprints-based conformance diagnostics. + * :meth:`pm4py.conformance.fitness_token_based_replay`; evaluation of the fitness between an event log and a *Petri net* using token-based replay. + * :meth:`pm4py.conformance.fitness_alignments`; evaluation of the fitness between an event log and a *Petri net* using alignments. + * :meth:`pm4py.conformance.fitness_footprints`; evaluation of the fitness based on footprints. + * :meth:`pm4py.conformance.precision_token_based_replay`; evaluation of the precision between an event log and a *Petri net* using token-based replay. + * :meth:`pm4py.conformance.precision_alignments`; evaluation of the precision between an event log and a *Petri net* using alignments. + * :meth:`pm4py.conformance.precision_footprints`; evaluation of the precision based on footprints. + * :meth:`pm4py.conformance.replay_prefix_tbr`; replays a prefix (list of activities) on a given *Petri net*, using Token-Based Replay. + +Among declarative process models, ``pm4py`` currently supports: + + * :meth:`pm4py.conformance.conformance_log_skeleton`; conformance checking using the *log skeleton*. + * :meth:`pm4py.conformance.conformance_declare`; conformance checking using a *DECLARE model*. + * :meth:`pm4py.conformance.conformance_temporal_profile`; conformance checking using the *temporal profile*. + + +Visualization (:mod:`pm4py.vis`) +------------------------------------------ +The ``pm4py`` library implements basic visualizations of process models and statistics. +Among the on-screen visualizations, ``pm4py`` currently supports: + + * :meth:`pm4py.vis.view_petri_net`; views a *Petri net* model. + * :meth:`pm4py.vis.view_dfg`; views a *directly-follows graph* annotated with the frequency. + * :meth:`pm4py.vis.view_performance_dfg`; views a *directly-follows graph* annotated with the performance. + * :meth:`pm4py.vis.view_process_tree`; views a *process tree*. + * :meth:`pm4py.vis.view_bpmn`; views a *BPMN model*. + * :meth:`pm4py.vis.view_heuristics_net`; views an *heuristics net*. + * :meth:`pm4py.vis.view_dotted_chart`; views a *dotted chart* + * :meth:`pm4py.vis.view_sna`; views the results of a *social network analysis*. + * :meth:`pm4py.vis.view_case_duration_graph`; views the *case duration graph*. + * :meth:`pm4py.vis.view_events_per_time_graph`; views the *events per time graph*. + * :meth:`pm4py.vis.view_performance_spectrum`; views the *performance spectrum*. + * :meth:`pm4py.vis.view_events_distribution_graph`; views the *events distribution graph*. + * :meth:`pm4py.vis.view_ocdfg`; views an *object-centric directly-follows graph*. + * :meth:`pm4py.vis.view_ocpn`; views an *object-centric Petri net*. + * :meth:`pm4py.vis.view_object_graph`; views an *object-based graph*. + * :meth:`pm4py.vis.view_network_analysis`; views the results of a *network analysis*. + * :meth:`pm4py.vis.view_transition_system`; views the results of a *transition system*. + * :meth:`pm4py.vis.view_prefix_tree`; views a *prefix tree*. + * :meth:`pm4py.vis.view_alignments`; views the *alignments table*. + * :meth:`pm4py.vis.view_footprints`; views a *footprints table*. + * :meth:`pm4py.vis.view_powl`; views a *POWL model*. + +We offer also some methods to store the visualizations on the disk: + + * :meth:`pm4py.vis.save_vis_petri_net`; saves the visualization of a *Petri net* model. + * :meth:`pm4py.vis.save_vis_dfg`; saves the visualization of a *directly-follows graph* annotated with the frequency. + * :meth:`pm4py.vis.save_vis_performance_dfg`; saves the visualization of a *directly-follows graph* annotated with the performance. + * :meth:`pm4py.vis.save_vis_process_tree`; saves the visualization of a *process tree*. + * :meth:`pm4py.vis.save_vis_bpmn`; saves the visualization of a *BPMN model*. + * :meth:`pm4py.vis.save_vis_heuristics_net`; saves the visualization of an *heuristics net*. + * :meth:`pm4py.vis.save_vis_dotted_chart`; saves the visualization of a *dotted chart* + * :meth:`pm4py.vis.save_vis_sna`; saves the visualization of the results of a *social network analysis*. + * :meth:`pm4py.vis.save_vis_case_duration_graph`; saves the visualization of the *case duration graph*. + * :meth:`pm4py.vis.save_vis_events_per_time_graph`; saves the visualization of the *events per time graph*. + * :meth:`pm4py.vis.save_vis_performance_spectrum`; saves the visualization of the *performance spectrum*. + * :meth:`pm4py.vis.save_vis_events_distribution_graph`; saves the visualization of the *events distribution graph*. + * :meth:`pm4py.vis.save_vis_ocdfg`; saves the visualization of an *object-centric directly-follows graph*. + * :meth:`pm4py.vis.save_vis_ocpn`; saves the visualization of an *object-centric Petri net*. + * :meth:`pm4py.vis.save_vis_object_graph`; saves the visualization of an *object-based graph*. + * :meth:`pm4py.vis.save_vis_network_analysis`; saves the visualization of the results of a *network analysis*. + * :meth:`pm4py.vis.save_vis_transition_system`; saves the visualization of the results of a *transition system*. + * :meth:`pm4py.vis.save_vis_prefix_tree`; saves the visualization of a *prefix tree*. + * :meth:`pm4py.vis.save_vis_alignments`; saves the visualization of the *alignments table*. + * :meth:`pm4py.vis.save_vis_footprints`; saves the visualization of the *footprints table*. + * :meth:`pm4py.vis.save_vis_powl`; saves the visualization of a *POWL model*. + + +Statistics (:mod:`pm4py.stats`) +------------------------------------------ +Different statistics that could be computed on top of event logs are proposed, including: + + * :meth:`pm4py.stats.get_start_activities`; gets the *start activities* from the event log. + * :meth:`pm4py.stats.get_end_activities`; gets the *end activities* from the event log. + * :meth:`pm4py.stats.get_event_attributes`; gets the *attributes at the event level* of the event log. + * :meth:`pm4py.stats.get_trace_attributes`; gets the *attributes at the trace level* of the event log. + * :meth:`pm4py.stats.get_event_attribute_values`; gets the values of an *attribute at the event level* of the event log. + * :meth:`pm4py.stats.get_trace_attribute_values`; gets the values of an *attribute at the trace level* of the event log. + * :meth:`pm4py.stats.get_variants`; gets the *variants* of the event log. + * :meth:`pm4py.stats.split_by_process_variant`; splits an event log into sub-dataframes for each process variant. + * :meth:`pm4py.stats.get_variants_paths_duration`; method that associates to a log object a Pandas dataframe aggregated by variants and positions (inside the variant). + * :meth:`pm4py.stats.get_frequent_trace_segments`; gets the *traces* (segments of activities) of the event log. + * :meth:`pm4py.stats.get_case_arrival_average`; gets the *average case arrival rate* from the event log. + * :meth:`pm4py.stats.get_cycle_time`; gets the *cycle time* from the event log. + * :meth:`pm4py.stats.get_all_case_durations`; gets the list of *case durations* for the cases of the event log. + * :meth:`pm4py.stats.get_case_duration`; gets the *case duration* of a specific case in the log. + * :meth:`pm4py.stats.get_stochastic_language`; gets the *stochastic language* of an event log or a process model. + * :meth:`pm4py.stats.get_service_time`; gets the average *service time* per activity. + + +Filtering (:mod:`pm4py.filtering`) +------------------------------------------ +Filtering is the restriction of the event log to a subset of the behavior. +Different methods are offered in pm4py for traditional event logs (.xes, .csv), including: + + * :meth:`pm4py.filtering.filter_start_activities`; filters the *start activities* of the event log. + * :meth:`pm4py.filtering.filter_end_activities`; filters the *end activities* of the event log. + * :meth:`pm4py.filtering.filter_event_attribute_values`; filters the values of an *attribute at the event level* of the event log. + * :meth:`pm4py.filtering.filter_trace_attribute_values`; filters the values of an *attribute at the trace level* of the event log. + * :meth:`pm4py.filtering.filter_variants`; filters the *variants* of an event log. + * :meth:`pm4py.filtering.filter_directly_follows_relation`; filters the *DF-relations* of an event log. + * :meth:`pm4py.filtering.filter_eventually_follows_relation`; filters the *EF-relations* of an event log. + * :meth:`pm4py.filtering.filter_time_range`; filters an event log on a temporal interval. + * :meth:`pm4py.filtering.filter_between`; filters an event log between a given couple of activities. + * :meth:`pm4py.filtering.filter_case_size`; filters an event log on the size of the cases. + * :meth:`pm4py.filtering.filter_case_performance`; filters an event log on the throughput time of the cases. + * :meth:`pm4py.filtering.filter_activities_rework`; filters an event log by looking at the cases where a given activity is executed different times. + * :meth:`pm4py.filtering.filter_paths_performance`; filters an event log by looking at the performance of the paths between two activities. + * :meth:`pm4py.filtering.filter_variants_top_k`; filters an event log keeping the top-K variants. + * :meth:`pm4py.filtering.filter_variants_by_coverage_percentage`; filters an event log keeping the variants covering the specified percentage of cases. + * :meth:`pm4py.filtering.filter_prefixes`; filters the prefixes of an activity. + * :meth:`pm4py.filtering.filter_suffixes`; filters the suffixes of an activity. + * :meth:`pm4py.filtering.filter_trace_segments`; filters on the given traces (segments of activities). + * :meth:`pm4py.filtering.filter_four_eyes_principle`; apply the *Four-Eyes principle* on the event log (LTL). + * :meth:`pm4py.filtering.filter_activity_done_different_resources`; filters the cases where an activity is repeated by different resources (LTL). + +Also, some filtering techniques are offered on top of object-centric event logs: + + * :meth:`pm4py.filtering.filter_ocel_event_attribute`; filters the events of an object-centric event log having a given value for an attribute. + * :meth:`pm4py.filtering.filter_ocel_object_attribute`; filters the objects of an object-centric event log having a given value for an attribute. + * :meth:`pm4py.filtering.filter_ocel_object_types_allowed_activities`; filters the relations between events (activities) and objects (object types) in an object-centric event log. + * :meth:`pm4py.filtering.filter_ocel_object_per_type_count`; filters the objects of an object-centric event log having at least the specific amount of objects per object type. + * :meth:`pm4py.filtering.filter_ocel_start_events_per_object_type`; filters the events of an object-centric event log that start the lifecycle of an object of a given object type. + * :meth:`pm4py.filtering.filter_ocel_end_events_per_object_type`; filters the events of an object-centric event log that end the lifecycle of an object of a given object type. + * :meth:`pm4py.filtering.filter_ocel_events_timestamp`; filters the events of an object-centric event log based on a timestamp range. + * :meth:`pm4py.filtering.filter_ocel_object_types`; filters a specified collection of object types from the object-centric event log. + * :meth:`pm4py.filtering.filter_ocel_events`; filters a specified collection of event identifiers from the object-centric event log. + * :meth:`pm4py.filtering.filter_ocel_objects`; filters a specified collection of object identifiers from the object-centric event log. + * :meth:`pm4py.filtering.filter_ocel_cc_object`; filters a connected component from the object-centric event log to which the object with the provided identifier belongs. + * :meth:`pm4py.filtering.filter_ocel_cc_length`; filter the connected components from an object-centric event log having a number of objects falling in a provided range. + * :meth:`pm4py.filtering.filter_ocel_cc_otype`; filter the connected components from an object-centric event log having at least an object of the specified object type. + * :meth:`pm4py.filtering.filter_ocel_cc_activity`; filter the connected components from an object-centric event log having at least an event with the specified activity. + +Machine Learning (:mod:`pm4py.ml`) +------------------------------------------ +PM4Py offers some features useful for the application of machine learning techniques. +Among those: + + * :meth:`pm4py.ml.split_train_test`; splits an event log into a *training event log* (default 80% of the cases) and a *test event log* (default 20% of the cases). + * :meth:`pm4py.ml.get_prefixes_from_log`; gets fixed-length prefixes for the cases of an event log. + * :meth:`pm4py.ml.extract_features_dataframe`; extracts machine learning features from an event log. + * :meth:`pm4py.ml.extract_ocel_features`; extracts machine learning features from an object-centric event log. + * :meth:`pm4py.ml.extract_temporal_features_dataframe`; extracts temporal features from an event log. + * :meth:`pm4py.ml.extract_target_vector`; extracts from a log object the target vector for a specific ML use case. + * :meth:`pm4py.ml.extract_outcome_enriched_dataframe`; inserts additional columns in the dataframe which are computed on the overall case, so they model the outcome of the case. + + +Simulation (:mod:`pm4py.sim`) +------------------------------------------ +We offer different simulation algorithms, that starting from a model, are able to produce an output that follows the model and the different rules that have been provided by the user. +Among those: + + * :meth:`pm4py.sim.play_out`; performs the play-out of a process model to obtain an event log. + * :meth:`pm4py.sim.generate_process_tree`; generates a process tree with the desidered number of nodes. + + +Object-Centric Process Mining (:mod:`pm4py.ocel`) +-------------------------------------------------- +Traditional event logs, used by mainstream process mining techniques, require the events to be related to a case. A case is a set of events for a particular purpose. A case notion is a criteria to assign a case to the events. + +However, in real processes this leads to two problems: + +* If we consider the Order-to-Cash process, an order could be related to many different deliveries. If we consider the delivery as case notion, the same event of Create Order needs to be replicated in different cases (all the deliveries involving the order). This is called the convergence problem. +* If we consider the Order-to-Cash process, an order could contain different order items, each one with a different lifecycle. If we consider the order as case notion, several instances of the activities for the single items may be contained in the case, and this make the frequency/performance annotation of the process problematic. This is called the divergence problem. + +Object-centric event logs relax the assumption that an event is related to exactly one case. Indeed, an event can be related to different objects of different object types. + +Essentially, we can describe the different components of an object-centric event log as: + +* Events, having an identifier, an activity, a timestamp, a list of related objects and a dictionary of other attributes. +* Objects, having an identifier, a type and a dictionary of other attributes. +* Attribute names, e.g., the possible keys for the attributes of the event/object attribute map. +* Object types, e.g., the possible types for the objects. + +In PM4Py, we offer object-centric process mining features: + + * :meth:`pm4py.ocel.ocel_get_object_types`; gets the object types from an object-centric event log. + * :meth:`pm4py.ocel.ocel_get_attribute_names`; gets the attribute names from an object-centric event log. + * :meth:`pm4py.ocel.ocel_flattening`; flattens object-centric event log with the selection of an object type. + * :meth:`pm4py.ocel.ocel_object_type_activities`; gets the activities related to an object type in an object-centric event log. + * :meth:`pm4py.ocel.ocel_objects_ot_count`; counts the objects for an object type. + * :meth:`pm4py.ocel.ocel_temporal_summary`; returns the temporal summary from an object-centric event log. + * :meth:`pm4py.ocel.ocel_objects_summary`; returns the objects summary from an object-centric event log. + * :meth:`pm4py.ocel.ocel_objects_interactions_summary`; returns the objects interactions from an object-centric event log. + * :meth:`pm4py.ocel.sample_ocel_objects`; returns a sampled object-centric event log picking a subset of the objects of the original one. + * :meth:`pm4py.ocel.sample_ocel_connected_components`; returns a sampled object-centric event log containing the provided number of connected components. + * :meth:`pm4py.ocel.ocel_drop_duplicates`; drops relations between events and objects happening at the same time. + * :meth:`pm4py.ocel.ocel_merge_duplicates`; merge events in the OCEL which are happening with the same activity at the same timestamp. + * :meth:`pm4py.ocel.ocel_o2o_enrichment`; enriches the O2O table of the OCEL with the grah-based relationships. + * :meth:`pm4py.ocel.ocel_e2o_lifecycle_enrichment`; enriches the relations table of the OCEL with lifecycle-based information. + * :meth:`pm4py.ocel.cluster_equivalent_ocel`; perform a clustering of the objects of an OCEL based on lifecycle/interactions similarity. + + +Some object-centric process discovery algorithms are also offered: + + * :meth:`pm4py.ocel.discover_ocdfg`; discovers an object-centric directly-follows graph from the object-centric event log. + * :meth:`pm4py.ocel.discover_oc_petri_net`; discovers an object-centric Petri net from the object-centric event log. + * :meth:`pm4py.ocel.discover_objects_graph`; discovers an object-based graph from the object-centric event log. + + +LLM Integration (:mod:`pm4py.llm`) +------------------------------------------ + +The following methods provides just the abstractions of the given objects: + + * :meth:`pm4py.llm.abstract_dfg`; provides the DFG abstraction of a traditional event log + * :meth:`pm4py.llm.abstract_variants`; provides the variants abstraction of a traditional event log + * :meth:`pm4py.llm.abstract_log_attributes`; provides the abstraction of the attributes/columns of the event log + * :meth:`pm4py.llm.abstract_log_features`; provides the abstraction of the machine learning features obtained from an event log + * :meth:`pm4py.llm.abstract_case`; provides the abstraction of a case (collection of events) + * :meth:`pm4py.llm.abstract_ocel`; provides the abstraction of an object-centric event log (list of events and objects) + * :meth:`pm4py.llm.abstract_ocel_ocdfg`; provides the abstraction of an object-centric event log (OC-DFG) + * :meth:`pm4py.llm.abstract_ocel_features`; provides the abstraction of an object-centric event log (features for ML) + * :meth:`pm4py.llm.abstract_event_stream`; provides an abstraction of the (last) events of the stream related to a traditional event log + * :meth:`pm4py.llm.abstract_temporal_profile`; provides the abstraction of a temporal profile model + * :meth:`pm4py.llm.abstract_petri_net`; provides the abstraction of a Petri net + * :meth:`pm4py.llm.abstract_declare`; provides the abstraction of a DECLARE model + * :meth:`pm4py.llm.abstract_log_skeleton`; provides the abstraction of a log skeleton model + * :meth:`pm4py.llm.explain_visualization`; explains one of the visualizations provided in pm4py using LVMs. + +The following methods can be executed directly against the LLM APIs: + + * :meth:`pm4py.llm.openai_query`; executes a prompt against OpenAI, returning the response as string + + +Basic Connectors (:mod:`pm4py.connectors`) +------------------------------------------ + +We offer some basic connectors to get an event log for some processes: + + * :meth:`pm4py.connectors.extract_log_outlook_mails`; extracts a traditional Pandas dataframe representing the Outlook mails + * :meth:`pm4py.connectors.extract_log_outlook_calendar`; extracts a traditional Pandas dataframe representing the Outlook calendar + * :meth:`pm4py.connectors.extract_log_windows_events`; extracts a traditional Pandas dataframe containing the Windows events registry + * :meth:`pm4py.connectors.extract_log_chrome_history`; extracts a traditional Pandas dataframe containing the Chrome navigation history + * :meth:`pm4py.connectors.extract_log_firefox_history`; extracts a traditional Pandas dataframe containing the Firefox navigation history + * :meth:`pm4py.connectors.extract_log_github`; extracts a traditional Pandas dataframe of a Github repository (issues management) + * :meth:`pm4py.connectors.extract_log_camunda_workflow`; extracts a traditional Pandas dataframe from the database supporting Camunda + * :meth:`pm4py.connectors.extract_log_sap_o2c`; extracts a traditional Pandas dataframe from the database supporting SAP (O2C process) + * :meth:`pm4py.connectors.extract_log_sap_accounting`; extracts a traditional Pandas dataframe from the database supporting SAP (Accounting process) + * :meth:`pm4py.connectors.extract_ocel_outlook_mails`; extracts an object-centric event log representing the Outlook mails + * :meth:`pm4py.connectors.extract_ocel_outlook_calendar`; extracts an object-centric event log representing the Outlook calendar + * :meth:`pm4py.connectors.extract_ocel_windows_events`; extracts an object-centric event log representing the Windows events + * :meth:`pm4py.connectors.extract_ocel_chrome_history`; extracts an object-centric event log representing the Chrome history + * :meth:`pm4py.connectors.extract_ocel_firefox_history`; extracts an object-centric event log representing the Firefox history + * :meth:`pm4py.connectors.extract_ocel_github`; extracts an object-centric event log of a Github repository (issues management) + * :meth:`pm4py.connectors.extract_ocel_camunda_workflow`; extracts an object-centric event log from the database supporting Camunda + * :meth:`pm4py.connectors.extract_ocel_sap_o2c`; extracts an object-centric event log from the database supporting SAP (O2C process) + * :meth:`pm4py.connectors.extract_ocel_sap_accounting`; extracts an object-centric event log from the database supporting SAP (Accounting process) + + +Social Network Analysis (:mod:`pm4py.org`) +------------------------------------------ +We offer different algorithms for the analysis of the organizational networks starting from an event log: + + * :meth:`pm4py.org.discover_handover_of_work_network`; calculates the Handover of Work metric from the event log. + * :meth:`pm4py.org.discover_working_together_network`; calculates the Working Together metric from the event log. + * :meth:`pm4py.org.discover_activity_based_resource_similarity`; calculates the activity-based resource similarity. + * :meth:`pm4py.org.discover_subcontracting_network`; calculates the Subcontracting metric from the event log. + * :meth:`pm4py.org.discover_organizational_roles`; discovers the organizational roles from the event log. + * :meth:`pm4py.org.discover_network_analysis`; discovers the network analysis from the event log. + + +Privacy (:mod:`pm4py.privacy`) +------------------------------------------ +We offer the following algorithms for the anonymization of event logs: + + * :meth:`pm4py.privacy.anonymize_differential_privacy`; PRIPEL (Privacy-preserving event log publishing with contextual information) is a framework to publish event logs that fulfill differential privacy. + + +Utilities (:mod:`pm4py.utils`) +------------------------------------------ + +Other algorithms, which do not belong to the aforementioned categories, are collected in this section: + + * :meth:`pm4py.utils.format_dataframe`; ensure the correct formatting of the Pandas dataframe. + * :meth:`pm4py.utils.parse_process_tree`; parses a process tree from a string. + * :meth:`pm4py.utils.parse_powl_model_string`; parses a POWL model from a string. + * :meth:`pm4py.utils.parse_event_log_string`; parses an event log from a collection of comma-separated traces. + * :meth:`pm4py.utils.project_on_event_attribute`; projects an event log on top of a given attribute (e.g., the activity), obtaining a list of list of values for the attribute. + * :meth:`pm4py.utils.sample_cases`; samples a traditional event log returning the specified amount of cases. + * :meth:`pm4py.utils.sample_events`; samples a traditional event log / OCEL returning the specified amount of events. + * :meth:`pm4py.utils.serialize`; serializes mainstream pm4py objects as strings. + * :meth:`pm4py.utils.deserialize`; de-serializes mainstream pm4py objects given their string representation. + * :meth:`pm4py.analysis.cluster_log`; cluster a log into sublogs using the provided clusterer. + * :meth:`pm4py.analysis.insert_case_service_waiting_time`; inserts for each case the service and waiting time. + * :meth:`pm4py.analysis.insert_case_arrival_finish_rate`; inserts the case arrival/finish rate. + * :meth:`pm4py.analysis.insert_artificial_start_end`; inserts artificial start/end activities in the event log. + * :meth:`pm4py.analysis.compute_emd`; computes the Earth-Mover Distance between two languages. + * :meth:`pm4py.analysis.check_is_workflow_net`; check if a Petri net is a workflow net. + * :meth:`pm4py.analysis.check_soundness`; checks if a Petri net is a sound workflow net (Woflan). + * :meth:`pm4py.analysis.solve_marking_equation`; solves the marking equation. + * :meth:`pm4py.analysis.maximal_decomposition`; performs the maximal decomposition of the given Petri net. + * :meth:`pm4py.analysis.generate_marking`; generates a Marking object from a textual representation. + * :meth:`pm4py.analysis.reduce_petri_net_invisibles`; reduces the invisible transitions of a Petri net when possible. + * :meth:`pm4py.analysis.reduce_petri_net_implicit_places`; reduces the implicit places in the Petri net (MURATA). + * :meth:`pm4py.analysis.get_enabled_transitions`; gets the transitions enabled in a given marking. + + +Overall List of Methods +------------------------------------------ + +.. autosummary:: + :toctree: generated + + pm4py.read + pm4py.read.read_bpmn + pm4py.read.read_dfg + pm4py.read.read_pnml + pm4py.read.read_ptml + pm4py.read.read_xes + pm4py.read.read_ocel_csv + pm4py.read.read_ocel_jsonocel + pm4py.read.read_ocel_xmlocel + pm4py.read.read_ocel_sqlite + pm4py.read.read_ocel2_xml + pm4py.read.read_ocel2_sqlite + pm4py.read.read_ocel2_json + pm4py.write + pm4py.write.write_bpmn + pm4py.write.write_dfg + pm4py.write.write_pnml + pm4py.write.write_ptml + pm4py.write.write_xes + pm4py.write.write_ocel_csv + pm4py.write.write_ocel_jsonocel + pm4py.write.write_ocel_xmlocel + pm4py.write.write_ocel_sqlite + pm4py.write.write_ocel2_xml + pm4py.write.write_ocel2_sqlite + pm4py.write.write_ocel2_json + pm4py.convert + pm4py.convert.convert_to_event_log + pm4py.convert.convert_to_event_stream + pm4py.convert.convert_to_dataframe + pm4py.convert.convert_to_bpmn + pm4py.convert.convert_to_petri_net + pm4py.convert.convert_to_process_tree + pm4py.convert.convert_to_reachability_graph + pm4py.convert.convert_log_to_ocel + pm4py.convert.convert_log_to_networkx + pm4py.convert.convert_ocel_to_networkx + pm4py.convert.convert_petri_net_to_networkx + pm4py.convert.convert_petri_net_type + pm4py.discovery + pm4py.discovery.discover_dfg + pm4py.discovery.discover_performance_dfg + pm4py.discovery.discover_petri_net_alpha + pm4py.discovery.discover_petri_net_inductive + pm4py.discovery.discover_petri_net_heuristics + pm4py.discovery.discover_petri_net_ilp + pm4py.discovery.discover_process_tree_inductive + pm4py.discovery.discover_heuristics_net + pm4py.discovery.derive_minimum_self_distance + pm4py.discovery.discover_footprints + pm4py.discovery.discover_eventually_follows_graph + pm4py.discovery.discover_bpmn_inductive + pm4py.discovery.discover_transition_system + pm4py.discovery.discover_prefix_tree + pm4py.discovery.discover_temporal_profile + pm4py.discovery.discover_declare + pm4py.discovery.discover_log_skeleton + pm4py.discovery.discover_batches + pm4py.discovery.discover_powl + pm4py.conformance + pm4py.conformance.conformance_diagnostics_token_based_replay + pm4py.conformance.conformance_diagnostics_alignments + pm4py.conformance.conformance_diagnostics_footprints + pm4py.conformance.fitness_token_based_replay + pm4py.conformance.fitness_alignments + pm4py.conformance.fitness_footprints + pm4py.conformance.precision_token_based_replay + pm4py.conformance.precision_alignments + pm4py.conformance.precision_footprints + pm4py.conformance.replay_prefix_tbr + pm4py.conformance.conformance_temporal_profile + pm4py.conformance.conformance_declare + pm4py.conformance.conformance_log_skeleton + pm4py.vis + pm4py.vis.view_petri_net + pm4py.vis.save_vis_petri_net + pm4py.vis.view_performance_dfg + pm4py.vis.save_vis_performance_dfg + pm4py.vis.view_dfg + pm4py.vis.save_vis_dfg + pm4py.vis.view_process_tree + pm4py.vis.save_vis_process_tree + pm4py.vis.view_bpmn + pm4py.vis.save_vis_bpmn + pm4py.vis.view_heuristics_net + pm4py.vis.save_vis_heuristics_net + pm4py.vis.view_dotted_chart + pm4py.vis.save_vis_dotted_chart + pm4py.vis.view_sna + pm4py.vis.save_vis_sna + pm4py.vis.view_case_duration_graph + pm4py.vis.save_vis_case_duration_graph + pm4py.vis.view_events_per_time_graph + pm4py.vis.save_vis_events_per_time_graph + pm4py.vis.view_performance_spectrum + pm4py.vis.save_vis_performance_spectrum + pm4py.vis.view_events_distribution_graph + pm4py.vis.save_vis_events_distribution_graph + pm4py.vis.view_ocdfg + pm4py.vis.save_vis_ocdfg + pm4py.vis.view_ocpn + pm4py.vis.save_vis_ocpn + pm4py.vis.view_object_graph + pm4py.vis.save_vis_object_graph + pm4py.vis.view_network_analysis + pm4py.vis.save_vis_network_analysis + pm4py.vis.view_transition_system + pm4py.vis.save_vis_transition_system + pm4py.vis.view_prefix_tree + pm4py.vis.save_vis_prefix_tree + pm4py.vis.view_alignments + pm4py.vis.save_vis_alignments + pm4py.vis.view_footprints + pm4py.vis.save_vis_footprints + pm4py.vis.view_powl + pm4py.vis.save_vis_powl + pm4py.stats + pm4py.stats.get_start_activities + pm4py.stats.get_end_activities + pm4py.stats.get_event_attributes + pm4py.stats.get_trace_attributes + pm4py.stats.get_event_attribute_values + pm4py.stats.get_trace_attribute_values + pm4py.stats.get_variants + pm4py.stats.get_variants_as_tuples + pm4py.stats.split_by_process_variant + pm4py.stats.get_variants_paths_duration + pm4py.stats.get_minimum_self_distances + pm4py.stats.get_minimum_self_distance_witnesses + pm4py.stats.get_case_arrival_average + pm4py.stats.get_rework_cases_per_activity + pm4py.stats.get_cycle_time + pm4py.stats.get_all_case_durations + pm4py.stats.get_case_duration + pm4py.stats.get_frequent_trace_segments + pm4py.stats.get_service_time + pm4py.stats.get_activity_position_summary + pm4py.stats.get_stochastic_language + pm4py.filtering + pm4py.filtering.filter_log_relative_occurrence_event_attribute + pm4py.filtering.filter_start_activities + pm4py.filtering.filter_end_activities + pm4py.filtering.filter_event_attribute_values + pm4py.filtering.filter_trace_attribute_values + pm4py.filtering.filter_variants + pm4py.filtering.filter_directly_follows_relation + pm4py.filtering.filter_eventually_follows_relation + pm4py.filtering.filter_time_range + pm4py.filtering.filter_between + pm4py.filtering.filter_case_size + pm4py.filtering.filter_case_performance + pm4py.filtering.filter_activities_rework + pm4py.filtering.filter_paths_performance + pm4py.filtering.filter_variants_top_k + pm4py.filtering.filter_variants_by_coverage_percentage + pm4py.filtering.filter_prefixes + pm4py.filtering.filter_suffixes + pm4py.filtering.filter_trace_segments + pm4py.filtering.filter_ocel_event_attribute + pm4py.filtering.filter_ocel_object_attribute + pm4py.filtering.filter_ocel_object_types_allowed_activities + pm4py.filtering.filter_ocel_object_per_type_count + pm4py.filtering.filter_ocel_start_events_per_object_type + pm4py.filtering.filter_ocel_end_events_per_object_type + pm4py.filtering.filter_ocel_events_timestamp + pm4py.filtering.filter_four_eyes_principle + pm4py.filtering.filter_activity_done_different_resources + pm4py.filtering.filter_ocel_object_types + pm4py.filtering.filter_ocel_events + pm4py.filtering.filter_ocel_objects + pm4py.filtering.filter_ocel_cc_object + pm4py.filtering.filter_ocel_cc_length + pm4py.filtering.filter_ocel_cc_otype + pm4py.filtering.filter_ocel_cc_activity + pm4py.ml + pm4py.ml.split_train_test + pm4py.ml.get_prefixes_from_log + pm4py.ml.extract_features_dataframe + pm4py.ml.extract_temporal_features_dataframe + pm4py.ml.extract_target_vector + pm4py.ml.extract_outcome_enriched_dataframe + pm4py.ml.extract_ocel_features + pm4py.sim + pm4py.sim.play_out + pm4py.sim.generate_process_tree + pm4py.ocel + pm4py.ocel.ocel_get_object_types + pm4py.ocel.ocel_get_attribute_names + pm4py.ocel.ocel_flattening + pm4py.ocel.ocel_object_type_activities + pm4py.ocel.ocel_objects_ot_count + pm4py.ocel.discover_ocdfg + pm4py.ocel.discover_oc_petri_net + pm4py.ocel.ocel_temporal_summary + pm4py.ocel.ocel_objects_summary + pm4py.ocel.ocel_objects_interactions_summary + pm4py.ocel.sample_ocel_objects + pm4py.ocel.sample_ocel_connected_components + pm4py.ocel.ocel_drop_duplicates + pm4py.ocel.ocel_merge_duplicates + pm4py.ocel.ocel_o2o_enrichment + pm4py.ocel.ocel_e2o_lifecycle_enrichment + pm4py.ocel.cluster_equivalent_ocel + pm4py.llm + pm4py.llm.abstract_dfg + pm4py.llm.abstract_variants + pm4py.llm.abstract_ocel + pm4py.llm.abstract_ocel_ocdfg + pm4py.llm.abstract_ocel_features + pm4py.llm.abstract_event_stream + pm4py.llm.abstract_petri_net + pm4py.llm.abstract_log_attributes + pm4py.llm.abstract_log_features + pm4py.llm.abstract_temporal_profile + pm4py.llm.abstract_case + pm4py.llm.abstract_declare + pm4py.llm.abstract_log_skeleton + pm4py.llm.openai_query + pm4py.llm.explain_visualization + pm4py.connectors.extract_log_outlook_mails + pm4py.connectors.extract_log_outlook_calendar + pm4py.connectors.extract_log_windows_events + pm4py.connectors.extract_log_chrome_history + pm4py.connectors.extract_log_firefox_history + pm4py.connectors.extract_log_github + pm4py.connectors.extract_log_camunda_workflow + pm4py.connectors.extract_log_sap_o2c + pm4py.connectors.extract_log_sap_accounting + pm4py.connectors.extract_ocel_outlook_mails + pm4py.connectors.extract_ocel_outlook_calendar + pm4py.connectors.extract_ocel_windows_events + pm4py.connectors.extract_ocel_chrome_history + pm4py.connectors.extract_ocel_firefox_history + pm4py.connectors.extract_ocel_github + pm4py.connectors.extract_ocel_camunda_workflow + pm4py.connectors.extract_ocel_sap_o2c + pm4py.connectors.extract_ocel_sap_accounting + pm4py.org + pm4py.org.discover_handover_of_work_network + pm4py.org.discover_working_together_network + pm4py.org.discover_activity_based_resource_similarity + pm4py.org.discover_subcontracting_network + pm4py.org.discover_organizational_roles + pm4py.org.discover_network_analysis + pm4py.analysis + pm4py.analysis.cluster_log + pm4py.analysis.insert_case_service_waiting_time + pm4py.analysis.insert_case_arrival_finish_rate + pm4py.analysis.solve_marking_equation + pm4py.analysis.check_soundness + pm4py.analysis.insert_artificial_start_end + pm4py.analysis.check_is_workflow_net + pm4py.analysis.maximal_decomposition + pm4py.analysis.generate_marking + pm4py.analysis.compute_emd + pm4py.analysis.reduce_petri_net_invisibles + pm4py.analysis.reduce_petri_net_implicit_places + pm4py.analysis.get_enabled_transitions + pm4py.utils + pm4py.utils.rebase + pm4py.utils.parse_process_tree + pm4py.utils.parse_powl_model_string + pm4py.utils.format_dataframe + pm4py.utils.serialize + pm4py.utils.deserialize + pm4py.utils.parse_event_log_string + pm4py.utils.project_on_event_attribute + pm4py.utils.sample_cases + pm4py.utils.sample_events diff --git a/pm4py/docs/source/conf.py b/pm4py/docs/source/conf.py new file mode 100644 index 0000000000000000000000000000000000000000..48b4f72a303cdca7dddd4db368a159a279b46eae --- /dev/null +++ b/pm4py/docs/source/conf.py @@ -0,0 +1,171 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('../../')) + +# -- Project information ----------------------------------------------------- + +project = 'pm4py' +project_copyright = 'Process Intelligence Solutions' +author = 'Process Intelligence Solutions' + +# The short X.Y version +version = '2.7' +# The full version, including alpha/beta/rc tags +release = '2.7.10' + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx_autodoc_annotation', + 'sphinx.ext.viewcode', + 'sphinx.ext.autosummary', +] + +autodoc_mock_imports = ["cvxopt"] +napoleon_google_docstring = False +napoleon_use_param = False +napoleon_use_ivar = True +autodoc_member_order = 'bysource' + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these traces. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = ['tests', 'scripts'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'pydata_sphinx_theme' +html_logo = 'pm4py-logo.png' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + "logo": { + "image_light": "pm4py-logo.png", + "image_dark": "pm4py-logo.png", + }, + "navbar_persistent": [] +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +html_css_files = ["css/custom.css"] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'pm4pydoc' + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'pm4py.tex', 'pm4py API reference', + 'pm4py @ Process Intelligence Solutions', 'manual'), +] + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'pm4py', 'pm4py API reference', + [author], 1) +] + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'pm4py', 'pm4py API reference', + author, 'pm4py', 'Process Mining for Python API reference.', + 'Miscellaneous'), +] + +# -- Extension configuration ------------------------------------------------- diff --git a/pm4py/docs/source/examples.rst b/pm4py/docs/source/examples.rst new file mode 100644 index 0000000000000000000000000000000000000000..c40649dcf6fdadc6892d674d3d444b3c62081107 --- /dev/null +++ b/pm4py/docs/source/examples.rst @@ -0,0 +1,11 @@ +Examples +============ + +Filtering XYZ +------------- + +Decision Point Analysis +----------------------- + +Computing a DFG with Performance Overlay +---------------------------------------- \ No newline at end of file diff --git a/pm4py/docs/source/getting_started.rst b/pm4py/docs/source/getting_started.rst new file mode 100644 index 0000000000000000000000000000000000000000..bd0daa0b238c6e368b99d4ce7eee0254e87c8823 --- /dev/null +++ b/pm4py/docs/source/getting_started.rst @@ -0,0 +1,410 @@ +Getting Started +=============== + +Understanding Process Mining +---------------------------- + +.. raw:: html + + + → Watch on YouTube: pm4py tutorials - tutorial #1 What is Process Mining? + + +In this section, we explain what process mining is all about. +Note that this page describes the basics of process mining, i.e., it is not a full-fledged reference of every possible aspect of process mining. +Therefore, for a more detailed overview of process mining, we recommend looking at the `Coursera MOOC on Process Mining `_ and the `seminal book of Wil van der Aalst `_. +Furthermore, before you begin, please install PM4Py on your system, i.e., as described in the :doc:`install` section. + +Processes in our Modern World +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The vast majority of companies active in virtually any domain execute a process. +Whether the core business of a company is to deliver a product, e.g., manufacture a car, cook a delicious pizza, etc., or provide a service, e.g., providing you with a mortgage to buy your dream house, paying back your insurance claim, etc., for efficient delivery of your product/service, processes are executed. +Hence, a natural question is: “What is a process?”. +In general, several notions of the concept of a process exist. +However, in process mining, we typically assume the following conceptual definition: + +"A **process** represents a **collection of activities** that we **execute** to achieve a **certain goal**." + +For example, consider the burger restaurant just around the corner, which also delivers burgers. +When you call the restaurant to order your beloved burger, the first action taken by the employee, let’s call her **Lucy**, taking your call, is to *take your order*. +Let’s assume you go for a tasty cheeseburger with a can of soda. +After Lucy has *entered your order in the cash register*, she *asks for your address*, which she adds to the order. +Finally, she *asks for your preferred means of payment*, after which she provides you with a rough estimate of the time until delivery. +When Lucy finishes the call, she *prints your order* and hands it over to the chef, let’s call him **Luigi**. +Since you’ve called relatively early, Luigi can start *preparing your burger* right away. +At the same time, Lucy *takes a can of soda out of the refrigerator* and places it on the counter. +A new call comes in from a different customer, which she handles roughly the same way as yours. +When Luigi *finishes your burger*, he *slides it into a carton box* and hands the box over to Lucy. +Lucy *wraps the order* in a bag. +She then hands the bag with your burger and soda to **Mike**, which uses a fancy electrical bicycle to *bring your order to your home*. + +In this small example, let’s assume that we are interested in the process, i.e., the collection of activities performed for your order. +Based on the scenario we just presented, the steps look as follows: + + +1. **Lucy** *takes your order* +#. **Lucy** *notes down your address* +#. **Lucy** *notes down your preferred payment method* +#. **Luigi** *prepares your burger* +#. **Lucy** *grabs your can of soda* +#. **Luigi** *puts your burger in a box* +#. **Lucy** *wraps your order* +#. **Mike** *delivers your order* + +Importing Your First Event Log +------------------------------ +In this section, we explain how to import (and export) event data in PM4Py. We assume that you are familiar with the conceptual basics of process mining, i.e., as described in the previous section. + +File Types: CSV and XES +~~~~~~~~~~~~~~~~~~~~~~~~ +As explained in the previous section, process mining exploits Event Logs to generate knowledge of a process. A wide variety of information systems, e.g., SAP, ORACLE, SalesForce, etc., allow us to extract, in one way or the other, event logs similar to the example event log presented in Table 1 and Table 2. All the examples we show in this section and all algorithms implemented in pm4py assume that we have already extracted the event data into an appropriate event log format. Hence, the core of pm4py does not support any data extraction features. However, we provide solutions for data extraction purposes, i.e., please inspect the corresponding `solutions page `_. + +In order to support interoperability between different process mining tools and libraries, two standard data formats are used to capture event logs, i.e., Comma Separated Value (CSV) files and eXtensible Event Stream (XES) files. CSV files resemble the example tables shown in the previous section, i.e., Table 1 and Table 2. Each line in such a file describes an event that occurred. The columns represent the same type of data, as shown in the examples, e.g., the case for which the event occurred, the activity, the timestamp, the resource executing the activity, etc. The XES file format is an XML-based format that allows us to describe process behavior. We will not go into details w.r.t. the format of XES files, i.e., we refer to `https://www.xes-standard.org `_ for an overview. + +In the remainder of this tutorial, we will use an oftenly used dummy example event log to explain the basic process mining operations. The process that we are considering is a simplified process related to customer complaint handling, i.e., *taken from the book of van der Aalst*. The process, and the event data we are going to use, looks as follows. + +.. image:: https://pm4py.fit.fraunhofer.de/static/assets/images/getting_started/bpmn_running_example.png + +*Figure 3: Running example BPMN-based process model describing the behavior of the simple process that we use in this tutorial.* + +Let’s get started! We have prepared a small sample event log, containing behavior similar equal to the process model in Figure 3. `You can find the sample event log here `_. Please download the file and store it somewhere on your computer, e.g., your Downloads folder (On Windows: this is 'C:/Users/user_name/Dowloads'). Consider Figure 4, in which we depict the first 25 rows of the example file. + +.. image:: https://pm4py.fit.fraunhofer.de/static/assets/images/getting_started/csv_snapshot.png + +*Figure 4: Running example csv data set which we will use in this tutorial.* + +Note that, the data depicted in Figure 4 describes a table, however, in text format. Each line in the file corresponds to a row in the table. Whenever we encounter a ‘;’ symbol on a line, this implies that we are ‘entering’ the next column. The first line (i.e., row) specifies the name of each column. Observe that, in the data table described by the file, we have 5 columns, being: *case_id*, *activity*, *timestamp*, *costs* and *resource*. Observe that, similar to our previous example, the first column represents the case identifier, i.e., allowing us to identify what activity has been logged in the context of what instance of the process. The second column shows the activity that has been performed. The third column shows at what point in time the activity was recorded. In this example data, additional information is present as well. In this case, the fourth column tracks the costs of the activity, whereas the fifth row tracks what resource has performed the activity. + +Before we go into loading the example file into PM4Py, let us briefly take a look at the data. Observe that, lines 2-10 show the events that have been recorded for the process identified by case identifier 3. We observe that first a register request activity was performed, followed by the examine casually, check ticket, decide,reinitiate request, examine thoroughlycheck ticket,decide, and finally, pay compensation activities. Note that, indeed, in this case the recorded process instance behaves as described by the model depicted in Figure 3. + +Loading CSV Files +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + + + → Watch on YouTube: pm4py tutorials - tutorial #2 Importing CSV Files + + +Given that we have familiarized ourselves with event logs and a way to represent event logs in a CSV file, it is time to start doing some process mining! We are going to load the event data, and, we are going to count how many cases are present in the event log, as well as the number of events. Note that, for all this, we are effectively using a third-party library called `pandas `_. We do so because pandas is the de-facto standard of loading/manipulating csv-based data. Hence, *any process mining algorithm implemented in PM4Py, using an event log as an input, can work directly with a pandas file!* + +.. code-block:: python3 + + import pandas + + + def import_csv(file_path): + event_log = pandas.read_csv(file_path, sep=';') + num_events = len(event_log) + num_cases = len(event_log.case_id.unique()) + print("Number of events: {}\nNumber of cases: {}".format(num_events, num_cases)) + + + if __name__ == "__main__": + import_csv("C:/Users/demo/Downloads/running-example.csv") + +*Example 1: Loading an event log stored in a CSV file and computing the number of cases and the number of events in the file. In this example, no PM4Py is used yet, it is all being handled using pandas. If you run the code yourself, make sure to replace the path 'C:/Users/demo/Downloads/running-example.csv', to the appropriate path on your computer containing the running example file.* + +We will quickly go through the above example code. In the first line, we import the pandas library. The last lines (containing the if-statement) make sure that the code, when pasted, runs on its own (we will omit these lines from future examples). The core of the script is the function **import_csv**. As an input parameter, it requires the path to the csv file. The script uses the pandas read_csv-function, to load the event data. To calculate the number of events, we simply query the length of the data frame, i.e., by calling **len(event_log)**. To calculate the number of cases, we use a built-in pandas function to return the number of unique values of the case_id column, i.e., **event_log.case_id.unique()**. Since that function returns a pandas built-in array object containing all the values of the column, we again query for its length. Note that, as is often the case when programming, there is a wide variety of ways to compute the aforementioned example statistics on the basis of a given CSV file. + +Now we have loaded our first event log, it is time to put some PM4Py into the mix. Let us assume that we are not only interested in the number of events and cases, yet, we also want to figure out what activities occur first, and what activities occur last in the traces described by the event log. PM4Py has a specific built-in function for this, i.e., **get_start_activities()** and **get_end_activities()** respectively. Consider Example 2, in which we present the corresponding script. + +.. code-block:: python3 + + import pandas + import pm4py + + + def import_csv(file_path): + event_log = pandas.read_csv(file_path, sep=';') + event_log = pm4py.format_dataframe(event_log, case_id='case_id', activity_key='activity', timestamp_key='timestamp') + start_activities = pm4py.get_start_activities(event_log) + end_activities = pm4py.get_end_activities(event_log) + print("Start activities: {}\nEnd activities: {}".format(start_activities, end_activities)) + + if __name__ == "__main__": + import_csv("csv_file.csv") + +*Example 2: Loading an event log stored in a CSV file and computing the start and end activities of the traces in the event log. If you run the code yourself, make sure to point the file path to the appropriate path on your computer containing the running example file.* + +Note that, we now import pandas and pm4py. The first line of our script again loads the event log stored in CSV format as a data frame. The second line transforms the event data table into a format that can be used by any process mining algorithm in pm4py. That is, the **format_dataframe()**-function creates a copy of the input event log, and renames the assigned columns to standardized column names used in pm4py. In our example, the column case_id is renamed to case:concept:name, the activity column is renamed to concept:name and the timestamp column is renamed to time:timestamp. The underlying reasons for using the aforementioned standard names is primarily related to XES-based (the other file format that we will look at shortly) legacy. Hence, it is advisable to always import a csv based log as follows. + +Note that, in this example, the value of the arguments, i.e., *sep*, *case_id*, *activity_key* and *timestamp_key* are depending on the input data. To obtain the activities that occur first and, respectively, last in any trace in the event log, we call the pm4py.get_start_activities(event_log) and the pm4py.get_end_activities(event_log) functions. The functions return a dictionary, containing the activities as a key, and, the number of observations (i.e., number of traces in which they occur first, respectively, last) in the event log. + +PM4Py exploits a built-in pandas function to detect the format of the timestamps in the input data automatically. However, pandas looks at the timestamp values in each row in isolation. In some cases, this can lead to problems. For example, if the provided value is 2020-01-18, i.e., first the year, then the month, and then the day of the date, in some cases, a value of 2020-02-01 may be interpreted wrongly as January 2nd, i.e., rather than February 1st. To alleviate this problem, an additional parameter can be provided to the **format_dataframe()** method, i.e., the timest_format parameter. In this example, the timestamp format is %Y-%m-%d %H:%M:%S%z. In general, we advise to specify the timestamp format! + +Loading XES Files +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + + + → Watch on YouTube: pm4py tutorials - tutorial #3 Importing XES Files + +Next to CSV files, event data can also be stored in an XML-based format, i.e., in XES files. In an XES file, we can describe a containment relation, i.e., a log contains a number of traces, which in turn contain several events. Furthermore, an object, i.e., a log, trace, or event, is allowed to have attributes. The advantage is that certain data attributes that are constant for a log or a trace, can be stored at that level. For example, assume that we only know the total costs of a case, rather than the costs of the individual events. If we want to store this information in a CSV file, we either need to replicate this information (i.e., we can only store data in rows, which directly refer to events), or, we need to explicitly define that certain columns only get a value once, i.e., referring to case-level attributes. The XES standard more naturally supports the storage of this type of information. + +Consider Figure 5, in which we depict a snapshot of the running example data stored in the .xes file format. The complete file can be downloaded +`here `_. + +.. image:: https://pm4py.fit.fraunhofer.de/static/assets/images/getting_started/csv_snapshot.png + +*Figure 5: Running example xes data set.* + +Observe that the trace with number 1 (reflected by the [string key=”concept:name”]-tag on line 9) is the first trace recorded in this event log. The first event of the trace represents the “register request” activity executed by Pete. The second event is the “examine thoroughly” activity, executed by Sue, etc. We will not elaborate on the XES standard in detail here, i.e., we refer to the `XES homepage `_, and, to our `video tutorial `_ on importing XES for more information. + +Importing an XES file is fairly straightforward. PM4Py has a special **read_xes()**-function that can parse a given xes file and load it in PM4Py, i.e., as an Event Log object. Consider the following code snippet, in which we show how to import an XES event log. Like the previous example, the script outputs activities that can start and end a trace. + +.. code-block:: python3 + + def import_xes(file_path): + event_log = pm4py.read_xes(file_path) + start_activities = pm4py.get_start_activities(event_log) + end_activities = pm4py.get_end_activities(event_log) + print("Start activities: {}\nEnd activities: {}".format(start_activities, end_activities)) + + if __name__ == "__main__": + import_xes("C:/Users/demo/Downloads/running-example.xes") + +Exporting Event Data +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + + + → Watch on YouTube: pm4py tutorials - tutorial #6 exporting event data + + +Now we are able to import event data into PM4Py, let’s take a look at the opposite, i.e., exporting event data. Exporting of event logs can be very useful, e.g., we might want to convert a .csv file into a .xes file or we might want to filter out certain (noisy) cases and save the filtered event log. Like importing, exporting of event data is possible in two ways, i.e., exporting to csv (using pandas) and exporting to xes. In the upcoming sections, we show how to export an event log stored as a pandas data frame into a csv file, a pandas data frame as a xes file, a PM4Py event log object as a csv file and finally, a PM4Py event log object as a xes file. + +Storing a Pandas Data Frame as a csv file +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Storing an event log that is represented as a pandas dataframe is straightforward, i.e., we can directly use the **to_csv** function of the pandas DataFrame object. Consider the following example snippet of code, in which we show this functionality. + +Note that the example code imports the running example csv file as a pandas data frame, and, exports it to a csv file at the location ‘C:/Users/demo/Desktop/running-example-exported.csv’. Note that, by default, pandas uses a ‘,’-symbol rather than ‘;’-symbol as a column separator. + +.. code-block:: python3 + + import pandas as pd + + if __name__ == "__main__": + event_log = pm4py.format_dataframe(pd.read_csv('C:/Users/demo/Downloads/running-example.csv', sep=';'), case_id='case_id', + activity_key='activity', timestamp_key='timestamp') + event_log.to_csv('C:/Users/demo/Desktop/running-example-exported.csv') + +Storing a Pandas Data Frame as a .xes file +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +It is also possible to store a pandas data frame to a xes file. This is simply done by calling the **pm4py.write_xes()** function. You can pass the dataframe as an input parameter to the function, i.e., pm4py handles the internal conversion of the dataframe to an event log object prior to writing it to disk. Note that this construct only works if you have formatted the data frame, i.e., as highlighted earlier in the importing CSV section. + +.. code-block:: python3 + + import pandas + import pm4py + + if __name__ == "__main__": + event_log = pm4py.format_dataframe(pandas.read_csv('C:/Users/demo/Downloads/running-example.csv', sep=';'), case_id='case_id', + activity_key='activity', timestamp_key='timestamp') + pm4py.write_xes(event_log, 'C:/Users/demo/Desktop/running-example-exported.xes') + +Storing an Event Log object as a .csv file +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In some cases, we might want to store an event log object, e.g., obtained by importing a .xes file, as a csv file. For example, certain (commercial) process mining tools only support csv importing. For this purpose, pm4py offers conversion functionality that allows you to convert your event log object into a data frame, which you can subsequently export using pandas. + +.. code-block:: python3 + + import pm4py + + if __name__ == "__main__": + event_log = pm4py.read_xes('C:/Users/demo/Downloads/running-example.xes') + df = pm4py.convert_to_dataframe(event_log) + df.to_csv('C:/Users/demo/Desktop/running-example-exported.csv') + +Storing an Event Log object as a .xes file +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Storing an event log object as a .xes file is rather straightforward. In pm4py, the **write_xes()** method allows us to do so. Consider the simple example script below in which we show an example of this functionality. + +.. code-block:: python3 + + import pm4py + + if __name__ == "__main__": + event_log = pm4py.read_xes(C:/Users/demo/Downloads/running-example.xes) + pm4py.write_xes(event_log, 'C:/Users/demo/Desktop/running-example-exported.xes') + +Pre-Built Event Log Filters +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + + + → Watch on YouTube: pm4py tutorials - tutorial #5: Playing with Event Data; Shipped Filters + +There are various pre-built filters in PM4Py, which make commonly needed process mining filtering functionality a lot easier. In the upcoming list, we briefly give an overview of these functions. We describe how to call them, their main input parameters and their return objects. + +* **filter_start_activities(log, activities, retain=True)**; This function filters the given event log object (either a data frame or a PM4Py event log object) based on a given set of input activity names that need to occur at the starting point of a trace. If we set retain to False, we remove all traces that contain any of the specified activities as their first event. +* **filter_end_activities(log, activities, retain=True)**; Similar functionality to the start activity filter. However, in this case, the filter is applied for the activities that occur at the end of a trace. +* **filter_event_attribute_values(log, attribute_key, values, level="case", retain=True)**; Filters an event log (either data frame or PM4Py EventLog object) on event attributes. The attribute_key is a string representing the attribute key to filter, the values parameter allows you to specify a set of allowed values. If the level parameter is set to 'case', then any trace that contains at least one event that matches the attribute-value combination is retained. If the level parameter value is set to 'event', only the events are retained that describe the specified value. Setting retain to False inverts the filter. +* **filter_trace_attribute_values(log, attribute_key, values, retain=True)**; Keeps (or removes if retain is set to False) only the traces that have an attribute value for the provided attribute_key and listed in the collection of corresponding values. +* **filter_variants(log, variants, retain=True)**; Keeps those traces that correspond to a specific activity execution sequence, i.e., known as a variant. For example, in a large log, we want to retain all traces that describe the execution sequence 'a', 'b', 'c'. The variants parameter is a collection of lists of activity names. +* **filter_directly_follows_relation(log, relations, retain=True)**; This function filters all traces that contain a specified 'directly follows relation'. Such a relation is simply a pair of activities, e.g., ('a','b') s.t., 'a' is directly followed by 'b' in a trace. For example, the trace <'a','b','c','d'> contains directly follows pairs ('a','b'), ('b','c') and ('c','d'). The relations parameter is a set of tuples, containing activity names. The retain parameter allows us to express whether or not we want to keep or remove the mathcing traces. +* **filter_eventually_follows_relation(log, relations, retain=True)** This function allows us to match traces on a generalization of the directly follows relation, i.e., an arbitrary number of activities is allowed to occur in-between the input relations. For example, when we call the function with a relation ('a','b'), any trace in which we observe activity 'a' at some point, to be followed later by activity 'b', again at some point, adheres to this filter. For example, a trace <'a','b','c','d'> contains eventually follows pairs ('a','b'), ('a','c') ('a','d'), ('b','c'), ('b','d') and ('c','d'). Again, the relations parameter is a set of tuples, containing activity names and the retain parameter allows us to express whether or not we want to keep or remove the matching traces. +* **filter_time_range(log, dt1, dt2, mode='events')**; Filters the event log based on a given time range, defined by timestamps dt1 and dt2. The timestamps should be of the form datetime.datetime. The filter has three modes (default: 'events'): + + * *'events'*; Retains all events that fall in the provided time range. Removes any empty trace in the filtered event log. + * *'traces_contained'*; Retains any trace that is completely 'contained' within the given time frame. For example, this filter is useful if one is interested to retain all full traces in a specific day/month/year. + * *'traces_intersecting'*; Retains any trace that has at least one event that falls into the given time range. + +Consider the example code below, in which we provide various example applications of the mentioned filtering functions, using the running example event log. Try to copy-paste each line in your own environment and play around with the resulting filtered event log to get a good idea of the functionality of each filter. Note that, all functions shown below also work when providing a dataframe as an input! + +.. code-block:: python3 + + import pm4py + import datetime as dt + + if __name__ == "__main__": + log = pm4py.read_xes('C:/Users/demo/Downloads/running-example.xes') + + filtered = pm4py.filter_start_activities(log, {'register request'}) + + filtered = pm4py.filter_start_activities(log, {'register request TYPO!'}) + + filtered = pm4py.filter_end_activities(log, {'pay compensation'}) + + filtered = pm4py.filter_event_attribute_values(log, 'org:resource', {'Pete', 'Mike'}) + + filtered = pm4py.filter_event_attribute_values(log, 'org:resource', {'Pete', 'Mike'}, level='event') + + filtered = pm4py.filter_trace_attribute_values(log, 'concept:name', {'3', '4'}) + + filtered = pm4py.filter_trace_attribute_values(log, 'concept:name', {'3', '4'}, retain=False) + + filtered = pm4py.filter_variants(log, [ + ['register request', 'check ticket', 'examine casually', 'decide', 'pay compensation']]) + + filtered = pm4py.filter_variants(log, [ + ['register request', 'check ticket', 'examine casually', 'decide', 'reject request']]) + + filtered = pm4py.filter_directly_follows_relation(log, [('check ticket', 'examine casually')]) + + filtered = pm4py.filter_eventually_follows_relation(log, [('examine casually', 'reject request')]) + + filtered = pm4py.filter_time_range(log, dt.datetime(2010, 12, 30), dt.datetime(2010, 12, 31), mode='events') + + filtered = pm4py.filter_time_range(log, dt.datetime(2010, 12, 30), dt.datetime(2010, 12, 31), + mode='traces_contained') + + filtered = pm4py.filter_time_range(log, dt.datetime(2010, 12, 30), dt.datetime(2010, 12, 31), + mode='traces_intersecting') + + +Discovering Your First Process Model +------------------------------------ + +Since we have studied basic conceptual knowledge of process mining and event data munging and crunching, we focus on process discovery. As indicated, the goal is to discover, i.e., primarily completely automated and algorithmically, a process model that accurately describes the process, i.e., as observed in the event data. For example, given the running example event data, we aim to discover the process model that we have used to explain the running example's process behavior, i.e., Figure 3. This section briefly explains what modeling formalisms exist in PM4Py while applying different process discovery algorithms. Secondly, we give an overview of the implemented process discovery algorithms, their output type(s), and how we can invoke them. Finally, we discuss the challenges of applying process discovery in practice. + +.. raw:: html + + + → Watch on YouTube: pm4py tutorials - tutorial #7 process discovery + +Obtaining a Process Model +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +There are three different process modeling notations that are currently supported in PM4Py. These notations are: BPMN, i.e., models such as the ones shown earlier in this tutorial, Process Trees and Petri nets. A Petri net is a more mathematical modeling representation compared to BPMN. Often the behavior of a Petri net is more difficult to comprehend compared to BPMN models. However, due to their mathematical nature, Petri nets are typically less ambiguous (i.e., confusion about their described behavior is not possible). Process Trees represent a strict subset of Petri nets and describe process behavior in a hierarchical manner. In this tutorial, we will focus primarily on BPMN models and process trees. For more information about Petri nets and their application to (business) process modeling (from a ‘workflow’ perspective), we refer to +`this article `_. + +Interestingly, none of the algorithms implemented in PM4Py directly discovers a BPMN model. However, any process tree can easily be translated to a BPMN model. Since we have already discussed the basic operators of BPMN models, we will start with the discovery of a process tree, which we convert to a BPMN model. Later, we will study the ‘underlying’ process tree. The algorithm that we are going to use is the ‘Inductive Miner’; More details about the (inner workings of the) algorithm can be found in +`this presentation `_ and in `this article `_. Consider the following code snippet. We discover a BPMN model (using a conversion from process tree to BPMN) using the inductive miner, based on the running example event data set. + +.. code-block:: python3 + + import pm4py + + if __name__ == "__main__": + log = pm4py.read_xes('C:/Users/demo/Downloads/running-example.xes') + + process_tree = pm4py.discover_process_tree_inductive(log) + bpmn_model = pm4py.convert_to_bpmn(process_tree) + pm4py.view_bpmn(bpmn_model) + + +Note that the resulting process model is the following image: + +.. image:: https://pm4py.fit.fraunhofer.de/static/assets/images/getting_started/bpmn_inductive_running_example.png + +*Figure 6: BPMN model discovered based on the running example event data set, using the Inductive Miner implementation of PM4Py.* + +Observe that the process model that we discovered, is indeed the same model as the model that we have used before, i.e., as shown in Figure 3. + +As indicated, the algorithm used in this example actually discovers a Process Tree. Such a process tree is, mathematically speaking, a +`rooted tree `_ annotated with ‘control-flow’ information. We’ll first use the following code snippet to discover a process tree based on the running example, and, afterwards shortly analyze the model. + +.. code-block:: python3 + + import pm4py + + if __name__ == "__main__": + log = pm4py.read_xes('C:/Users/demo/Downloads/running-example.xes') + + process_tree = pm4py.discover_process_tree_inductive(log) + pm4py.view_process_tree(process_tree) + + +.. image:: https://pm4py.fit.fraunhofer.de/static/assets/images/getting_started/process_tree_running_example.png + +*Figure 7: Process Tree model discovered based on the running example event data set, using the Inductive Miner implementation of PM4Py.* + +We the process tree model from top to bottom. The first circle, i.e., the ‘root’ of the process tree, describes a ‘->’ symbol. This means that, when srolling further down, the process described by the model executes the ‘children’ of the root from left to right. Hence, first “register request” is executed, followed by the circle node with the ‘*’ symbol, finally to be followed by the node with the ‘X’ symbol. The node with the ‘*’ represents ‘repeated behavior’, i.e., the possibility to repeat the behavior. When scrolling further down, the left-most ‘subtree’ of the ‘*’-operator is always executed, the right-most child (in this case, “reinitiate request”) triggers a repeated execution of the left-most child. Observe that this is in line with the process models we have seen before, i.e., the “reinitiate request” activity allows us to repeat the behavior regarding examinations and checking the ticket. When we go further down below in the subtree of the ‘*’-operator, we again observe a ‘->’ node. Hence, its left-most child is executed first, followed by its right-most child (“decide”). The left-most child of the ‘->’ node has a ‘+’ symbol. This represents concurrent behavior; hence, its children can be executed simultaneously or in any order. Its left-most child is the “check ticket” activity. Its right-most child is a node with an ‘X’ symbol (just like the right-most child of the tree's root). This represents an exclusive choice, i.e., one of the children is executed (either “examine casually” or “examine thoroughly”). Observe that the process tree describes the exact same behavior as the BPMN models shown before. + +Obtaining a Process Map +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Many `commercial process mining solutions `_ do not provide extended support for discovering process models. Often, as a main visualization of processes, process maps are used. A process map contains activities and connections (by means of arcs) between them. A connection between two activities usually means that there some form of precedence relation. In its simplest form, it means that the ‘source’ activity directly precedes the ‘target’ activity. Let’s quickly take a look at a concrete example! Consider the following code snippet, in which we learn a ‘Directly Follows Graph’ (DFG)-based process map: + +.. code-block:: python3 + + import pm4py + + if __name__ == "__main__": + log = pm4py.read_xes('C:/Users/demo/Downloads/running-example.xes') + + dfg, start_activities, end_activities = pm4py.discover_dfg(log) + pm4py.view_dfg(dfg, start_activities, end_activities) + + + +.. image:: https://pm4py.fit.fraunhofer.de/static/assets/images/getting_started/dfg_running_example.png + +*Figure 8: Process Map (DFG-based) discovered based on the running example event data set.* + +The **pm4py.discover_dfg(log)** function returns a triple. The first result, i.e., called dfg in this example, is a dictionary mapping pairs of activities that follow each other directly, to the number of corresponding observations. The second and third arguments are the start and end activities observed in the event log (again counters). In the visualization, the green circle represents the start of any observed process instance. The orange circle represents the end of an observed process instance. In 6 cases, the register request is the first activity observed (represented by the arc labeled with value 6). In the event log, the check ticket activity is executed directly after the register request activity. The examine thoroughly activity is following registration once, examine casually follows 3 times. Note that, indeed, in total, the register activity is followed by 6 different events, i.e., there are 6 traces in the running example event log. However, note that there are typically much more relations observable compared to the number of cases in an event log. Even using this simple event data, the DFG-based process map of the process is much more complex than the process models learned earlier. Furthermore, it is much more difficult to infer the actual execution of the process based on the process map. Hence, when using process maps, one should be very carefully when trying to comprehend the actual process. + +In PM4Py, we also implemented the `Heuristics Miner `_, a more advanced process map discovery algorithm, compared to its DFG-based alternative. We won’t go into the algorithmic details here, however, in a HM-based process map, the arcs between activities represent observed concurrency. For example, the algorithm is able to detect that the ticket check and examination are concurrent. Hence, these activities will not be connected in the process map. As such, a HM-based process map is typically simpler compared to a DFG-based process map. + +.. code-block:: python3 + + import pm4py + + if __name__ == "__main__": + log = pm4py.read_xes('C:/Users/demo/Downloads/running-example.xes') + + map = pm4py.discover_heuristics_net(log) + pm4py.view_heuristics_net(map) + + +.. image:: https://pm4py.fit.fraunhofer.de/static/assets/images/getting_started/hnet_running_example.png + +*Figure 9: Process Map (HM-based) discovered based on the running example event data set.* + + +Conformance Checking +------------------------------------ + +.. raw:: html + + + → Watch on YouTube: pm4py tutorials - tutorial #8 conformance checking + diff --git a/pm4py/docs/source/index.rst b/pm4py/docs/source/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..b4e2de69e02391c30686c5866b298b1e843295b6 --- /dev/null +++ b/pm4py/docs/source/index.rst @@ -0,0 +1,32 @@ +Welcome to pm4py's Documentation! +=================================== + +``pm4py`` is a Python library implementing a variety of `process mining `_ algorithms. + +A simple example of ``pm4py`` in action: + +.. code-block:: python + + import pm4py + + if __name__ == "__main__": + log = pm4py.read_xes('') + process_model = pm4py.discover_bpmn_inductive(log) + pm4py.view_bpmn(process_model) + +In this documentation, you can find all relevant information to set up ``pm4py`` and start your process mining journey. +Please consult the Contents listed below to navigate the documentation. + +Happy #processmining! + + +Contents +-------- + +.. toctree:: + :maxdepth: 2 + + install + getting_started + api + release_notes \ No newline at end of file diff --git a/pm4py/docs/source/install.rst b/pm4py/docs/source/install.rst new file mode 100644 index 0000000000000000000000000000000000000000..1edd10e53b1dcff3ceed7249df9993e6a43875ca --- /dev/null +++ b/pm4py/docs/source/install.rst @@ -0,0 +1,32 @@ +Installation +============ + +pip +--- + +To use ``pm4py`` on any OS, install it using ``pip``: + +.. code-block:: console + + (.venv) $ pip install pm4py + +``pmp4y`` uses the ``Graphviz`` library for rendering visualizations. +Please install `Graphviz `_. + +After installation, GraphViz is located in the ``program files`` directory. +The ``bin\`` folder of the GraphViz directory needs to be added manually to the ``system path``. +In order to do so, please follow `this instruction `_. + +Docker +------ +To install pm4py via Docker, use: + +.. code-block:: console + + $ docker pull pm4py/pm4py-core:latest + +To run pm4py via docker, use: + +.. code-block:: console + + $ docker run -it pm4py/pm4py-core:latest bash \ No newline at end of file diff --git a/pm4py/docs/source/modules.rst b/pm4py/docs/source/modules.rst new file mode 100644 index 0000000000000000000000000000000000000000..a0e0e12ef11a70be717e9caf3a4ec6f682daf24f --- /dev/null +++ b/pm4py/docs/source/modules.rst @@ -0,0 +1,7 @@ +pm4py-source +============ + +.. toctree:: + :maxdepth: 4 + + pm4py diff --git a/pm4py/docs/source/pm4py-logo.png b/pm4py/docs/source/pm4py-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..90c516f2798def47471e8371e7d85f43d38a7d27 Binary files /dev/null and b/pm4py/docs/source/pm4py-logo.png differ diff --git a/pm4py/docs/source/release_notes.rst b/pm4py/docs/source/release_notes.rst new file mode 100644 index 0000000000000000000000000000000000000000..7a19be1628637b38e56932fabb7d88f75858a5cb --- /dev/null +++ b/pm4py/docs/source/release_notes.rst @@ -0,0 +1,114 @@ +Release Notes +============= + + +pm4py 2.7.0 - Release Notes +--------------------------- + +The major changes in pm4py 2.7.0 are as follows: + +1. We added an initial integration to ChatGPT + +2. We added some connectors for workstation-supported processes (Outlook mail and calendar; web browsers). + + +pm4py 2.6.0 - Release Notes +--------------------------- + +The major changes in pm4py 2.6.0 are as follows: + +1. We added the ILP Miner as process discovery algorithm + +2. We added two log filters: "timestamp grouping" and "consecutive activities" + +3. We added the insertion of the case arrival/finish rate and of the waiting/service/sojourn times +in the simplified interface + +4. We added a baseline clustering algorithm, based on the pre-existing feature extraction + +5. We added the extraction of the "target vector" from event logs for machine learning purposes + + +pm4py 2.5.0 - Release Notes +--------------------------- + +The major changes in pm4py 2.5.0 are as follows: + +1. We added the Cardoso and extended Cardoso simplicity metrics to pm4py + +2. We added discovery of Stochastic Arc Weight nets based on OCEL logs. + +3. We added Murata-based Petri net simplification to the simplified interface (implicit place removal) + + +pm4py 2.4.0 - Release Notes +--------------------------- + +Today, we released pm4py 2.4.0. +We have adopted our release policy slightly, i.e., as of now, the pm4py versioning follows the MAJOR.MINOR.FIX pattern. +We will also report all MAJOR and MINOR releases in the release notes. + +As today's release is a minor release, we report on the main changes here. + +1. We added the Murata algorithm (Berthelot implementation) to remove the structurally redundant places, which is now available in the simplified interface. + +2. We added the reduction of invisible transitions in Petri nets to the simplified interface. + +3. We added support for calcuating stochastic languages of process models + +4. We adde support for calculating EMD between two stochastic languages + +5. we added a visualization of alignments in simplified interface + +6. We added visualization of footprint table in simplified interface + +7. We added a conversion of Petri net objects to networkX DiGraphs + +8. We added support for stochastic Petri nets + +9. We added support for stochastic arc-weight nets (the paper describing this class of nets is submitted to the Petri nets 2023 conference) + +pm4py 2.3.0 - Release Notes +--------------------------- +Finally, pm4py 2.3.0 has arrived! +The 2.3.0 release contains various significant updates and improvements concerning its predecessors. +The release consists of approximately 550 commits and 47.000 LoC! +The main changes are as follows: + +1. *Flexible parameter passing in the simplified method invocation*, e.g., :meth:`pm4py.discovery.discover_petri_net_inductive`; +For example, in ```pm4py``` 2.2.X, the columns used in process discovery were fixed (i.e., case:concept:name, concept:name, time:timestamp). Hence, changing the perspective implied changing column headers. +In pm4py 2.3.X, the columns used in process discovery are now part of the function arguments. +A simple comparison: + * Discovering a Petri net in pm4py 2.2.X: + ``pm4py.discover_petri_net_inductive(dataframe, noise_threshold=0.2)`` + + * Discovering a Petri net in pm4py 2.3.X: + ``pm4py.discover_petri_net_inductive(dataframe, noise_threshold=0.2, activity_key="activity", timestamp_key="timestamp", case_id_key="case")`` + +2. *Dataframes are primary citizens*; +pm4py used to support both Pandas ``Dataframes`` and our custom-defined event log object. We have decided to adapt all algorithms to work on Dataframes. As such, event data is expected to be represented as a Dataframe in pm4py (i.e., we are dropping the explicit use of our custom event log object). There are two main reasons for this design decision: + 1. *Performance*; Generally, Pandas Dataframes are performing significantly better on most operations compared to our custom event log object + 2. *Practice*; Most real event data is of tabular form. + +Of course, pm4py still supports importing .xes files. However, when importing an event log using :meth:`pm4py.read.read_xes`, the object is directly converted into a Dataframe. +A general drawback of this design decision is that pm4py no longer appropriately supports nested objects (generally supported by the .xes standard). However, as indicated in point b), such nested objects are rarely used in practice. + +3. *Typing Information in the simplified interface*; +All methods in the simplified interface are guaranteed to have typing information on their input and output objects. + +4. *Variant Representation*; +In pm4py 2.3.X, trace variants are represented as a tuple of Strings (representing activity names) instead of a String where a ‘,’ symbol indicates activity separation. For example, a variant of the form is now represented as a tuple (‘A’,’B’,’C’) and was previously represented as ‘A,B,C’. This fix allows activity names to contain a ‘,’ symbol. + +5. *Inductive Miner Revised*; +We have re-implemented and restructured the code of the inductive miner. The new version is closer to the reference implementation in ProM and is more performant than the previous version. + +6. *Business Hours Revised*; +The business hours functionality in pm4py has been revised completely. In pm4py 2.2.X, one could only specify the working days and hours, which were fixed. In pm4py 2.3.X, one can define week-day-based activity slots (e.g., to model breaks). One slot, i.e., one tuple consists of one start and one end time given in seconds since week start, e.g. [(7 * 60 * 60, 17 * 60 * 60), ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60),] meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + +7. *Auto-Generated Docs*; +As you may have noticed, this website serves as the new documentation hub for pm4py. It contains all previously available information on the project website related to ‘installation’ and ‘getting started’. For the simplified interface, we have merged the general documentation with the API docs to improve the overall understanding of working with pm4py. The docs are now generated directly from the pm4py source. Hence, feel free to share a pull request if you find any issues. + + +Happy #processmining! + +The #pm4py development team. diff --git a/pm4py/examples/CHECK_MISSING.py b/pm4py/examples/CHECK_MISSING.py new file mode 100644 index 0000000000000000000000000000000000000000..852762401de48f5569f5c9171f70af309ef261a8 --- /dev/null +++ b/pm4py/examples/CHECK_MISSING.py @@ -0,0 +1,9 @@ +import os + + +if __name__ == "__main__": + files = [x.split(".")[0] for x in os.listdir(".") if x.endswith(".py") and not "execute_everything" in x and not "CHECK_MISSING" in x] + contents_ex_everything = open("execute_everything.py", "r").read() + for f in files: + if f not in contents_ex_everything: + print(f) diff --git a/pm4py/examples/activities_to_alphabet.py b/pm4py/examples/activities_to_alphabet.py new file mode 100644 index 0000000000000000000000000000000000000000..8b801864b38ae0674656186dd1297266e7287191 --- /dev/null +++ b/pm4py/examples/activities_to_alphabet.py @@ -0,0 +1,13 @@ +import pm4py +from pm4py.objects.log.util import activities_to_alphabet +from pm4py.util import constants + + +def execute_script(): + dataframe = pm4py.read_xes("../tests/input_data/running-example.xes", return_legacy_log_object=False) + renamed_dataframe = activities_to_alphabet.apply(dataframe, parameters={constants.PARAMETER_CONSTANT_ACTIVITY_KEY: "concept:name"}) + print(renamed_dataframe) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/activity_position.py b/pm4py/examples/activity_position.py new file mode 100644 index 0000000000000000000000000000000000000000..8f8b1a988c673a42d02798b97f2bcb3ed4df84ac --- /dev/null +++ b/pm4py/examples/activity_position.py @@ -0,0 +1,16 @@ +import pm4py +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils +import os + + +def execute_script(): + dataframe = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "receipt.csv")) + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + # prints the summary of the positions of two activities + print(pm4py.get_activity_position_summary(dataframe, "Confirmation of receipt")) + print(pm4py.get_activity_position_summary(dataframe, "T02 Check confirmation of receipt")) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/align_approx_pt.py b/pm4py/examples/align_approx_pt.py new file mode 100644 index 0000000000000000000000000000000000000000..a79ff42a1f0beb9cb12d4edb42128ca57db22137 --- /dev/null +++ b/pm4py/examples/align_approx_pt.py @@ -0,0 +1,27 @@ +import os +import importlib.util +from pm4py.algo.discovery.inductive import algorithm as inductive +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.conformance.alignments.process_tree import algorithm as align_approx +from pm4py.objects.petri_net.utils.align_utils import pretty_print_alignments +from examples import examples_conf + + +def execute_script(): + log_path = os.path.join("..", "tests", "input_data", "running-example.xes") + + log = xes_importer.apply(log_path) + tree = inductive.apply(log) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.process_tree import visualizer as pt_vis + gviz = pt_vis.apply(tree, parameters={pt_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + pt_vis.view(gviz) + + print("start calculate approximated alignments") + approx_alignments = align_approx.apply(log, tree) + pretty_print_alignments(approx_alignments) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/align_decomposition_ex_paper.py b/pm4py/examples/align_decomposition_ex_paper.py new file mode 100644 index 0000000000000000000000000000000000000000..7410a22ed3da71fd7db868a676934a47a719044e --- /dev/null +++ b/pm4py/examples/align_decomposition_ex_paper.py @@ -0,0 +1,99 @@ +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to +from pm4py.objects.petri_net.utils import decomposition +from examples import examples_conf +import importlib.util + + +def execute_script(): + net = PetriNet("") + start = PetriNet.Place("start") + end = PetriNet.Place("end") + c1 = PetriNet.Place("c1") + c2 = PetriNet.Place("c2") + c3 = PetriNet.Place("c3") + c4 = PetriNet.Place("c4") + c5 = PetriNet.Place("c5") + c6 = PetriNet.Place("c6") + c7 = PetriNet.Place("c7") + c8 = PetriNet.Place("c8") + c9 = PetriNet.Place("c9") + net.places.add(c1) + net.places.add(c2) + net.places.add(c3) + net.places.add(c4) + net.places.add(c5) + net.places.add(c6) + net.places.add(c7) + net.places.add(c8) + net.places.add(c9) + net.places.add(start) + net.places.add(end) + t1 = PetriNet.Transition("t1", "a") + t2 = PetriNet.Transition("t2", None) + t3 = PetriNet.Transition("t3", "b") + t4 = PetriNet.Transition("t4", "c") + t5 = PetriNet.Transition("t5", "d") + t6 = PetriNet.Transition("t6", "e") + t7 = PetriNet.Transition("t7", None) + t8 = PetriNet.Transition("t8", "f") + t9 = PetriNet.Transition("t9", "g") + t10 = PetriNet.Transition("t10", "h") + t11 = PetriNet.Transition("t11", None) + net.transitions.add(t1) + net.transitions.add(t2) + net.transitions.add(t3) + net.transitions.add(t4) + net.transitions.add(t5) + net.transitions.add(t6) + net.transitions.add(t7) + net.transitions.add(t8) + net.transitions.add(t9) + net.transitions.add(t10) + net.transitions.add(t11) + add_arc_from_to(start, t1, net) + add_arc_from_to(t1, c1, net) + add_arc_from_to(t1, c2, net) + add_arc_from_to(c1, t2, net) + add_arc_from_to(c1, t3, net) + add_arc_from_to(c2, t4, net) + add_arc_from_to(t2, c3, net) + add_arc_from_to(t3, c3, net) + add_arc_from_to(t4, c4, net) + add_arc_from_to(c3, t5, net) + add_arc_from_to(c4, t5, net) + add_arc_from_to(t5, c5, net) + add_arc_from_to(c5, t6, net) + add_arc_from_to(t6, c1, net) + add_arc_from_to(t6, c2, net) + add_arc_from_to(c5, t7, net) + add_arc_from_to(t7, c7, net) + add_arc_from_to(t7, c6, net) + add_arc_from_to(c7, t8, net) + add_arc_from_to(c6, t9, net) + add_arc_from_to(t8, c8, net) + add_arc_from_to(t9, c9, net) + add_arc_from_to(c8, t11, net) + add_arc_from_to(c9, t11, net) + add_arc_from_to(t11, end, net) + add_arc_from_to(c5, t10, net) + add_arc_from_to(t10, end, net) + im = Marking() + im[start] = 1 + fm = Marking() + fm[end] = 1 + decomposed_net = decomposition.decompose(net, im, fm) + gvizs = [] + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer + + gvizs.append(visualizer.apply(net, im, final_marking=fm, parameters={"format": examples_conf.TARGET_IMG_FORMAT})) + visualizer.view(gvizs[len(gvizs) - 1]) + for snet, sim, sfm in decomposed_net: + gvizs.append(visualizer.apply(snet, sim, final_marking=sfm, parameters={"format": examples_conf.TARGET_IMG_FORMAT})) + visualizer.view(gvizs[len(gvizs) - 1]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/align_decomposition_example.py b/pm4py/examples/align_decomposition_example.py new file mode 100644 index 0000000000000000000000000000000000000000..97be2608c3ae6e100f51e79d308b2a44810dc2c2 --- /dev/null +++ b/pm4py/examples/align_decomposition_example.py @@ -0,0 +1,29 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.conformance.alignments.decomposed import algorithm as dec_align +from pm4py.algo.evaluation.replay_fitness import algorithm as rep_fit +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +import os +import time + + +def execute_script(): + # import the a32f0n00 log + log = xes_importer.apply(os.path.join("..", "tests", "compressed_input_data", "09_a32f0n00.xes.gz")) + # discover a model using the inductive miner + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + # apply the alignments decomposition with a maximal number of border disagreements set to 5 + aa = time.time() + aligned_traces = dec_align.apply(log, net, im, fm, parameters={ + dec_align.Variants.RECOMPOS_MAXIMAL.value.Parameters.PARAM_THRESHOLD_BORDER_AGREEMENT: 5}) + bb = time.time() + print(bb-aa) + # print(aligned_traces) + # calculate the fitness over the recomposed alignment (use the classical evaluation) + fitness = rep_fit.evaluate(aligned_traces, variant=rep_fit.Variants.ALIGNMENT_BASED) + print(fitness) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/alignment_discounted_a_star.py b/pm4py/examples/alignment_discounted_a_star.py new file mode 100644 index 0000000000000000000000000000000000000000..e1b1442fe8a5d3e022c3ae1352122b43d9799e1a --- /dev/null +++ b/pm4py/examples/alignment_discounted_a_star.py @@ -0,0 +1,52 @@ +import os +import time +from pm4py.algo.conformance.alignments.petri_net import algorithm as ali +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.petri_net.importer import importer as petri_importer + + +def testSynchronousDiscountedAlignment(): + ''' + This function runs an alignment based on the discounted edit distance + By using the synchronous product + :return: + ''' + log_path = os.path.join("..", "tests", "input_data", "running-example.xes") + pnml_path = os.path.join("..", "tests", "input_data", "running-example.pnml") + log = xes_importer.apply(log_path) + net, marking, fmarking = petri_importer.apply(pnml_path) + + # to see the net : + #vizu(net,marking,fmarking).view() + + start=time.time() + + alignments1 = ali.apply(log._list[0], net, marking, fmarking, + variant=ali.VERSION_DISCOUNTED_A_STAR, + parameters={ali.Parameters.SYNCHRONOUS:True,ali.Parameters.EXPONENT:1.1}) + print(alignments1) + print("Time:",(time.time()-start)) + +def testNoSynchronousDiscountedAlignment(): + ''' + This function runs an alignment based on the discounted edit distance + By using the Petri net and petri_net.utils.align_utils.discountedEditDistance function + ''' + log_path = os.path.join("..", "tests", "input_data", "running-example.xes") + pnml_path = os.path.join("..", "tests", "input_data", "running-example.pnml") + log = xes_importer.apply(log_path) + net, marking, fmarking = petri_importer.apply(pnml_path) + + start=time.time() + + alignments1 = ali.apply(log._list[0], net, marking, fmarking, + variant=ali.VERSION_DISCOUNTED_A_STAR, + parameters={ali.Parameters.SYNCHRONOUS:False,ali.Parameters.EXPONENT:1.1}) + print(alignments1) + print("Time:",(time.time()-start)) + + +if __name__ == '__main__': + # example on the first trace + testSynchronousDiscountedAlignment() + testNoSynchronousDiscountedAlignment() \ No newline at end of file diff --git a/pm4py/examples/alignment_test.py b/pm4py/examples/alignment_test.py new file mode 100644 index 0000000000000000000000000000000000000000..0f591dd3c3e4c8b047051f000934bac9de575aa2 --- /dev/null +++ b/pm4py/examples/alignment_test.py @@ -0,0 +1,50 @@ +import os + +from pm4py import util +from pm4py.algo.conformance import alignments as ali +from pm4py.algo.conformance.alignments.petri_net.variants.state_equation_a_star import Parameters +from pm4py.objects import log as log_lib +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.petri_net.importer import importer as petri_importer +from pm4py.objects.petri_net.utils.align_utils import pretty_print_alignments + + +def align(trace, net, im, fm, model_cost_function, sync_cost_function): + trace_costs = list(map(lambda e: 1000, trace)) + params = dict() + params[util.constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = log_lib.util.xes.DEFAULT_NAME_KEY + params[Parameters.PARAM_MODEL_COST_FUNCTION] = model_cost_function + params[Parameters.PARAM_TRACE_COST_FUNCTION] = trace_costs + params[Parameters.PARAM_SYNC_COST_FUNCTION] = sync_cost_function + return ali.petri_net.algorithm.apply_trace(trace, net, im, fm, parameters=params, + variant=ali.petri_net.algorithm.VERSION_STATE_EQUATION_A_STAR) + + +def execute_script(): + log_path = os.path.join("..", "tests", "input_data", "running-example.xes") + pnml_path = os.path.join("..", "tests", "input_data", "running-example.pnml") + + # log_path = 'C:/Users/bas/Documents/tue/svn/private/logs/a32_logs/a32f0n05.xes' + # pnml_path = 'C:/Users/bas/Documents/tue/svn/private/logs/a32_logs/a32.pnml' + + log = xes_importer.apply(log_path) + net, marking, fmarking = petri_importer.apply(pnml_path) + + model_cost_function = dict() + sync_cost_function = dict() + for t in net.transitions: + if t.label is not None: + model_cost_function[t] = 1000 + sync_cost_function[t] = 0 + else: + model_cost_function[t] = 1 + + alignments = [] + for trace in log: + alignments.append(align(trace, net, marking, fmarking, model_cost_function, sync_cost_function)) + + pretty_print_alignments(alignments) + + +if __name__ == '__main__': + execute_script() diff --git a/pm4py/examples/all_optimal_alignments.py b/pm4py/examples/all_optimal_alignments.py new file mode 100644 index 0000000000000000000000000000000000000000..bc010d6bdc265ab1ab774cfd87f9b187fb431b27 --- /dev/null +++ b/pm4py/examples/all_optimal_alignments.py @@ -0,0 +1,18 @@ +import pm4py +from pm4py.algo.conformance.alignments.petri_net.variants import generator_dijkstra_less_memory +import os + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes"), return_legacy_log_object=True) + + net, im, fm = pm4py.discover_petri_net_inductive(log) + + for trace in log: + print("\n\n") + for ali in generator_dijkstra_less_memory.apply(trace, net, im, fm): + print(ali) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/antialignments_and_precision.py b/pm4py/examples/antialignments_and_precision.py new file mode 100644 index 0000000000000000000000000000000000000000..2d8f4862700690ed28beeb3270895f76ba800523 --- /dev/null +++ b/pm4py/examples/antialignments_and_precision.py @@ -0,0 +1,23 @@ +import os + +from pm4py.algo.conformance.antialignments.variants.discounted_a_star import apply as antii +from pm4py.algo.conformance.antialignments.algorithm import Parameters +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.petri_net.importer import importer as petri_importer + + +if __name__ == '__main__': + log_path = os.path.join("..", "tests", "input_data", "running-example.xes") + pnml_path = os.path.join("..", "tests", "input_data", "running-example.pnml") + log = xes_importer.apply(log_path) + net, marking, fmarking = petri_importer.apply(pnml_path) + + THETA = 1.5 + MU = 20 + EPSILON = 0.01 + resAnti = antii(log,net,marking,fmarking, parameters={Parameters.EXPONENT:THETA, + Parameters.EPSILON:EPSILON, + Parameters.MARKING_LIMIT:MU}) + print(resAnti['anti-alignment']) + print("Precision:",resAnti['precision']) + diff --git a/pm4py/examples/backwards_token_replay.py b/pm4py/examples/backwards_token_replay.py new file mode 100644 index 0000000000000000000000000000000000000000..547c2063b625aa72dbd4b39fa83a686031380d8d --- /dev/null +++ b/pm4py/examples/backwards_token_replay.py @@ -0,0 +1,18 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.conformance.tokenreplay import algorithm as tr +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +import os + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + # perform the backwards token-based replay + replayed_traces = tr.apply(log, net, im, fm, variant=tr.Variants.BACKWARDS) + print(replayed_traces) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/batch_detection.py b/pm4py/examples/batch_detection.py new file mode 100644 index 0000000000000000000000000000000000000000..345c01dcec6764949c86cfc4c37066273e9cd2b9 --- /dev/null +++ b/pm4py/examples/batch_detection.py @@ -0,0 +1,18 @@ +import pm4py +from pm4py.algo.discovery.batches import algorithm +import os + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + # detect the batches from the event log + batches = algorithm.apply(log) + # print the batches (complete information) in a single row + print(batches) + # print a summary information (size) for each activity-resource combination that is performed in batches + for batch in batches: + print(batch[0], batch[1]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/bpmn_from_pt_conversion.py b/pm4py/examples/bpmn_from_pt_conversion.py new file mode 100644 index 0000000000000000000000000000000000000000..846917dc8204946a680a438697df599c71befd30 --- /dev/null +++ b/pm4py/examples/bpmn_from_pt_conversion.py @@ -0,0 +1,26 @@ +import os + +import pm4py +from pm4py.objects.conversion.process_tree import converter as pt_converter +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.objects.log.importer.xes import importer as xes_import +from pm4py.objects.bpmn.exporter import exporter as bpmn_exporter +from examples import examples_conf +import importlib.util + + + +def execute_script(): + log_path = os.path.join(os.path.join("..", "tests", "input_data", "running-example.xes")) + log = xes_import.apply(log_path) + ptree = inductive_miner.apply(log) + bpmn = pt_converter.apply(ptree, variant=pt_converter.Variants.TO_BPMN) + + if importlib.util.find_spec("graphviz"): + bpmn_exporter.apply(bpmn, "stru.bpmn") + os.remove("stru.bpmn") + pm4py.view_bpmn(bpmn, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/bpmn_import_and_to_petri_net.py b/pm4py/examples/bpmn_import_and_to_petri_net.py new file mode 100644 index 0000000000000000000000000000000000000000..1bedb62c1ac74220854ced9ad33f979c2c43accc --- /dev/null +++ b/pm4py/examples/bpmn_import_and_to_petri_net.py @@ -0,0 +1,20 @@ +import os + +import pm4py +from pm4py.objects.bpmn.importer import importer as bpmn_importer +from pm4py.objects.conversion.bpmn import converter as bpmn_converter + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes")) + bpmn_graph = bpmn_importer.apply(os.path.join("..", "tests", "input_data", "running-example.bpmn")) + net, im, fm = bpmn_converter.apply(bpmn_graph, variant=bpmn_converter.Variants.TO_PETRI_NET) + precision_tbr = pm4py.precision_token_based_replay(log, net, im, fm) + print("precision", precision_tbr) + fitness_tbr = pm4py.precision_token_based_replay(log, net, im, fm) + print("fitness", fitness_tbr) + print(pm4py.check_soundness(net, im, fm)) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/bpmn_js_visualization.py b/pm4py/examples/bpmn_js_visualization.py new file mode 100644 index 0000000000000000000000000000000000000000..c73902fb88c48e48a2569a6bf2edcc9f6f33867d --- /dev/null +++ b/pm4py/examples/bpmn_js_visualization.py @@ -0,0 +1,15 @@ +import pm4py +import importlib.util + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/running-example.xes") + + bpmn_model = pm4py.discover_bpmn_inductive(log) + + if importlib.util.find_spec("graphviz"): + pm4py.view_bpmn(bpmn_model, variant_str="dagrejs") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/case_overlap_stat.py b/pm4py/examples/case_overlap_stat.py new file mode 100644 index 0000000000000000000000000000000000000000..cd13f2bc8316b4f55da7fe41f4926632f9b4bd41 --- /dev/null +++ b/pm4py/examples/case_overlap_stat.py @@ -0,0 +1,15 @@ +import pm4py +import os +from pm4py.statistics.overlap.cases.log import get as case_overlap_get + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + # calculates the WIP statistics from the event log object. + # The WIP statistic associates to each case the number of cases open during the lifecycle of the case + wip = case_overlap_get.apply(log) + print(wip) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/consecutive_act_case_grouping_filter.py b/pm4py/examples/consecutive_act_case_grouping_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..ea0d4005592e8ab3a71b2e4ede63a4e172c52366 --- /dev/null +++ b/pm4py/examples/consecutive_act_case_grouping_filter.py @@ -0,0 +1,13 @@ +import pm4py +from pm4py.algo.filtering.pandas.consecutive_act_case_grouping import consecutive_act_case_grouping_filter + + +def execute_script(): + dataframe = pm4py.read_xes("../tests/input_data/receipt.xes") + print(dataframe) + filtered_dataframe = consecutive_act_case_grouping_filter.apply(dataframe) + print(filtered_dataframe) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/corr_mining.py b/pm4py/examples/corr_mining.py new file mode 100644 index 0000000000000000000000000000000000000000..ac486edc6ffefd777a9172d1397456988255f15d --- /dev/null +++ b/pm4py/examples/corr_mining.py @@ -0,0 +1,40 @@ +from pm4py.util import constants, pandas_utils + +from pm4py.algo.discovery.correlation_mining import algorithm as correlation_miner +from pm4py.objects.log.util import dataframe_utils +from pm4py.statistics.service_time.pandas import get as soj_time_get +from pm4py.statistics.start_activities.pandas import get as sa_get +from pm4py.statistics.end_activities.pandas import get as ea_get +from examples import examples_conf +import importlib.util + + +def execute_script(): + df = pandas_utils.read_csv("../tests/input_data/interval_event_log.csv") + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + act_count = dict(df["concept:name"].value_counts()) + parameters = {} + parameters[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = "start_timestamp" + parameters[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = "time:timestamp" + parameters["format"] = examples_conf.TARGET_IMG_FORMAT + start_activities = sa_get.get_start_activities(df, parameters=parameters) + end_activities = ea_get.get_end_activities(df, parameters=parameters) + parameters["start_activities"] = start_activities + parameters["end_activities"] = end_activities + soj_time = soj_time_get.apply(df, parameters=parameters) + dfg, performance_dfg = correlation_miner.apply(df, variant=correlation_miner.Variants.CLASSIC, + parameters=parameters) + + if importlib.util.find_spec("grapviz"): + from pm4py.visualization.dfg import visualizer as dfg_vis + gviz_freq = dfg_vis.apply(dfg, activities_count=act_count, serv_time=soj_time, variant=dfg_vis.Variants.FREQUENCY, + parameters=parameters) + dfg_vis.view(gviz_freq) + gviz_perf = dfg_vis.apply(performance_dfg, activities_count=act_count, serv_time=soj_time, + variant=dfg_vis.Variants.PERFORMANCE, + parameters=parameters) + dfg_vis.view(gviz_perf) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/cost_based_dfg.py b/pm4py/examples/cost_based_dfg.py new file mode 100644 index 0000000000000000000000000000000000000000..103710d85de292c65f341681fe2dbefcd2959e4d --- /dev/null +++ b/pm4py/examples/cost_based_dfg.py @@ -0,0 +1,19 @@ +import pm4py +import os +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "roadtraffic100traces.xes"), return_legacy_log_object=False) + cost_based_dfg = df_statistics.get_dfg_graph(log, measure="cost", cost_attribute="amount") + + if importlib.util.find_spec("grapviz"): + from pm4py.visualization.dfg import visualizer as dfg_visualizer + gviz = dfg_visualizer.apply(cost_based_dfg, variant=dfg_visualizer.Variants.COST, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + dfg_visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/cycle_time.py b/pm4py/examples/cycle_time.py new file mode 100644 index 0000000000000000000000000000000000000000..058d3e92de01202fda1926e67372a5371439d309 --- /dev/null +++ b/pm4py/examples/cycle_time.py @@ -0,0 +1,14 @@ +import os + +import pm4py +from pm4py.statistics.traces.cycle_time.log import get as cycle_time_get + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "interval_event_log.xes")) + print(cycle_time_get.apply(log, parameters={cycle_time_get.Parameters.START_TIMESTAMP_KEY: "start_timestamp", + cycle_time_get.Parameters.TIMESTAMP_KEY: "time:timestamp"})) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/data_petri_nets.py b/pm4py/examples/data_petri_nets.py new file mode 100644 index 0000000000000000000000000000000000000000..8173849168787ae034a83d19c1b4fdad7a059ffb --- /dev/null +++ b/pm4py/examples/data_petri_nets.py @@ -0,0 +1,46 @@ +import os + +import pm4py +from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments +from pm4py.objects.petri_net.data_petri_nets import semantics +from pm4py.objects.petri_net.data_petri_nets.data_marking import DataMarking +from pm4py.objects.log.importer.xes import importer as xes_importer +from examples import examples_conf +import importlib.util + + +def get_trans_by_name(net, name): + ret = [x for x in net.transitions if x.name == name] + if len(ret) == 0: + return None + return ret[0] + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "roadtraffic100traces.xes")) + net, im, fm = pm4py.read_pnml(os.path.join("..", "tests", "input_data", "data_petri_net.pnml"), auto_guess_final_marking=True) + + if importlib.util.find_spec("graphviz"): + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + aligned_traces = alignments.apply(log, net, im, fm, variant=alignments.Variants.VERSION_DIJKSTRA_LESS_MEMORY, parameters={"ret_tuple_as_trans_desc": True}) + for index, trace in enumerate(log): + aligned_trace = aligned_traces[index] + al = [(x[0][0], get_trans_by_name(net, x[0][1])) for x in aligned_trace["alignment"]] + m = DataMarking(im) + idx = 0 + for el in al: + if el[1] is not None: + en_t = semantics.enabled_transitions(net, m, trace[min(idx, len(trace) - 1)]) + if el[1] in en_t: + if "guard" in el[1].properties: + print(el[1], "GUARD SATISFIED", el[1].properties["guard"], m) + m = semantics.execute(el[1], net, m, trace[min(idx, len(trace) - 1)]) + else: + print("TRANSITION UNAVAILABLE! Guards are blocking") + if el[0] != ">>": + idx = idx + 1 + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/dataframe_prefix_and_fea_extraction.py b/pm4py/examples/dataframe_prefix_and_fea_extraction.py new file mode 100644 index 0000000000000000000000000000000000000000..c8ad7c384b9d930152fe91cf2c990a06c971c648 --- /dev/null +++ b/pm4py/examples/dataframe_prefix_and_fea_extraction.py @@ -0,0 +1,23 @@ +from pm4py.objects.log.util import dataframe_utils +from pm4py.util import pandas_utils, constants + + +def execute_script(): + # loads a dataframe. setup dates + df = pandas_utils.read_csv("../tests/input_data/receipt.csv") + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + print(df) + # insert the case index in the dataframe + df = pandas_utils.insert_ev_in_tr_index(df, case_id="case:concept:name", column_name="@@index_in_trace") + # filter all the prefixes of length 5 from the dataframe + df = df[df["@@index_in_trace"] <= 5] + print(df) + # performs the automatic feature extraction + fea_df = dataframe_utils.automatic_feature_extraction_df(df) + print("\nfea_df =") + print(fea_df) + print(fea_df.columns) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/dec_treplay_imdf.py b/pm4py/examples/dec_treplay_imdf.py new file mode 100644 index 0000000000000000000000000000000000000000..4fd1a0444617c81114089aad97c0e9ee430cc1b3 --- /dev/null +++ b/pm4py/examples/dec_treplay_imdf.py @@ -0,0 +1,35 @@ +import os + +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +from examples import examples_conf +import importlib.util + + +def execute_script(): + # import the log + log_path = os.path.join("..", "tests", "input_data", "receipt.xes") + log = xes_importer.apply(log_path) + # apply Inductive Miner + process_tree = inductive_miner.apply(log) + net, initial_marking, final_marking = process_tree_converter.apply(process_tree) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer as pn_vis + # get visualization + variant = pn_vis.Variants.PERFORMANCE + parameters_viz = {pn_vis.Variants.PERFORMANCE.value.Parameters.AGGREGATION_MEASURE: "mean", pn_vis.Variants.PERFORMANCE.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT} + gviz = pn_vis.apply(net, initial_marking, final_marking, log=log, variant=variant, + parameters=parameters_viz) + pn_vis.view(gviz) + # do another visualization with frequency + variant = pn_vis.Variants.FREQUENCY + parameters_viz = {pn_vis.Variants.FREQUENCY.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT} + gviz = pn_vis.apply(net, initial_marking, final_marking, log=log, variant=variant, + parameters=parameters_viz) + pn_vis.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/decisiontree_align_example.py b/pm4py/examples/decisiontree_align_example.py new file mode 100644 index 0000000000000000000000000000000000000000..375115dcb72a082271715c691e60e3c4cf44da6b --- /dev/null +++ b/pm4py/examples/decisiontree_align_example.py @@ -0,0 +1,28 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.decision_mining import algorithm +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +from examples import examples_conf +import os +import importlib.util + + +def execute_script(): + # in this case, we obtain a decision tree by alignments on a specific decision point + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + + if importlib.util.find_spec("sklearn") and importlib.util.find_spec("graphviz"): + # we need to specify a decision point. In this case, the place p_10 is a suitable decision point + clf, feature_names, classes = algorithm.get_decision_tree(log, net, im, fm, decision_point="p_10") + + # we can visualize the decision tree + from pm4py.visualization.decisiontree import visualizer as visualizer + gviz = visualizer.apply(clf, feature_names, classes, + parameters={visualizer.Variants.CLASSIC.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/decisiontree_trivial_example.py b/pm4py/examples/decisiontree_trivial_example.py new file mode 100644 index 0000000000000000000000000000000000000000..08758206b2386fc91e8319dc7407d01f770c3670 --- /dev/null +++ b/pm4py/examples/decisiontree_trivial_example.py @@ -0,0 +1,45 @@ +import os + +from pm4py.util import ml_utils +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.util import get_class_representation +from pm4py.algo.transformation.log_to_features import algorithm as log_to_features +from examples import examples_conf +import importlib.util + + +def execute_script(): + log_path = os.path.join("..", "tests", "input_data", "roadtraffic50traces.xes") + # log_path = os.path.join("..", "tests", "input_data", "receipt.xes") + log = xes_importer.apply(log_path) + # now, it is possible to get a default representation of an event log + data, feature_names = log_to_features.apply(log, variant=log_to_features.Variants.TRACE_BASED) + # gets classes representation by final concept:name value (end activity) + target, classes = get_class_representation.get_class_representation_by_str_ev_attr_value_value(log, "concept:name") + + if importlib.util.find_spec("sklearn") and importlib.util.find_spec("graphviz"): + # mine the decision tree given 'data' and 'target' + clf = ml_utils.DecisionTreeClassifier(max_depth=7) + clf.fit(data, target) + + # visualize the decision tree + from pm4py.visualization.decisiontree import visualizer as dt_vis + gviz = dt_vis.apply(clf, feature_names, classes, parameters={dt_vis.Variants.CLASSIC.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + dt_vis.view(gviz) + + # gets classes representation by trace duration (threshold between the two classes = 200D) + target, classes = get_class_representation.get_class_representation_by_trace_duration(log, 2 * 8640000) + + if importlib.util.find_spec("sklearn") and importlib.util.find_spec("graphviz"): + # mine the decision tree given 'data' and 'target' + clf = ml_utils.DecisionTreeClassifier(max_depth=7) + clf.fit(data, target) + + # visualize the decision tree + from pm4py.visualization.decisiontree import visualizer as dt_vis + gviz = dt_vis.apply(clf, feature_names, classes, parameters={dt_vis.Variants.CLASSIC.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + dt_vis.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/declare_simple.py b/pm4py/examples/declare_simple.py new file mode 100644 index 0000000000000000000000000000000000000000..4d11abbb9e22f423689c02ceda63b9fdcad502fd --- /dev/null +++ b/pm4py/examples/declare_simple.py @@ -0,0 +1,24 @@ +import pm4py + + +def execute_script(): + """ + Example script to discover a DECLARE model from an event log, + obtain its textual (LLM) abstraction, and perform conformance checking. + """ + log = pm4py.read_xes("../tests/input_data/receipt.xes") + + declare_model = pm4py.discover_declare(log) + print(declare_model) + + # prints a textual abstraction of the declare model that can be provided to GPT + text_abstr = pm4py.llm.abstract_declare(declare_model) + print(text_abstr) + + # provides conformance checking based on the DECLARE model + conf_result = pm4py.conformance_declare(log, declare_model, return_diagnostics_dataframe=True) + print(conf_result) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/df_to_log_postpro.py b/pm4py/examples/df_to_log_postpro.py new file mode 100644 index 0000000000000000000000000000000000000000..0a83e7eee170bed6f44e77ae9cdfa5dd68767516 --- /dev/null +++ b/pm4py/examples/df_to_log_postpro.py @@ -0,0 +1,19 @@ +import pm4py +from pm4py.util import constants, pandas_utils +from pm4py.objects.conversion.log import converter as log_converter +import os + + +def execute_script(): + dataframe = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "running-example.csv")) + dataframe = pm4py.format_dataframe(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + log = log_converter.apply(dataframe, variant=log_converter.Variants.TO_EVENT_LOG, parameters={"stream_postprocessing": False}) + pm4py.write_xes(log, "non_postprocessed.xes") + log = log_converter.apply(dataframe, variant=log_converter.Variants.TO_EVENT_LOG, parameters={"stream_postprocessing": True}) + pm4py.write_xes(log, "postprocessed.xes") + os.remove("non_postprocessed.xes") + os.remove("postprocessed.xes") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/dfg_align_log.py b/pm4py/examples/dfg_align_log.py new file mode 100644 index 0000000000000000000000000000000000000000..502498bd33a0acecb3a710ed8d3a0be1995070d7 --- /dev/null +++ b/pm4py/examples/dfg_align_log.py @@ -0,0 +1,52 @@ +import os +import time + +import pm4py +from pm4py.algo.conformance.alignments.petri_net import algorithm as petri_alignments +from pm4py.algo.filtering.dfg import dfg_filtering +from pm4py.algo.conformance.alignments.dfg import algorithm as dfg_alignment +from pm4py.statistics.attributes.log import get +from pm4py.objects.petri_net.utils import align_utils +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + print("number of cases", len(log)) + print("number of events", sum(len(x) for x in log)) + print("number of variants", len(pm4py.get_variants_as_tuples(log))) + ac = get.get_attribute_values(log, "concept:name") + dfg, sa, ea = pm4py.discover_dfg(log) + perc = 0.5 + dfg, sa, ea, ac = dfg_filtering.filter_dfg_on_activities_percentage(dfg, sa, ea, ac, perc) + dfg, sa, ea, ac = dfg_filtering.filter_dfg_on_paths_percentage(dfg, sa, ea, ac, perc) + aa = time.time() + aligned_traces = dfg_alignment.apply(log, dfg, sa, ea) + bb = time.time() + net, im, fm = pm4py.convert_to_petri_net(dfg, sa, ea) + for trace in aligned_traces: + if trace["cost"] != trace["internal_cost"]: + print(trace) + pass + print(bb - aa) + print(sum(x["visited_states"] for x in aligned_traces)) + print(sum(x["cost"] // align_utils.STD_MODEL_LOG_MOVE_COST for x in aligned_traces)) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.dfg import visualizer + gviz = visualizer.apply(dfg, activities_count=ac, parameters={"start_activities": sa, "end_activities": ea, + "format": examples_conf.TARGET_IMG_FORMAT}) + visualizer.view(gviz) + + cc = time.time() + aligned_traces2 = petri_alignments.apply(log, net, im, fm, + variant=petri_alignments.Variants.VERSION_DIJKSTRA_LESS_MEMORY) + dd = time.time() + print(dd - cc) + print(sum(x["visited_states"] for x in aligned_traces2)) + print(sum(x["cost"] // align_utils.STD_MODEL_LOG_MOVE_COST for x in aligned_traces2)) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/dfg_filt_act_paths_perc.py b/pm4py/examples/dfg_filt_act_paths_perc.py new file mode 100644 index 0000000000000000000000000000000000000000..104276886cf22dcabd355ecfcca34630ee451b1f --- /dev/null +++ b/pm4py/examples/dfg_filt_act_paths_perc.py @@ -0,0 +1,26 @@ +import pm4py +from pm4py.algo.filtering.dfg import dfg_filtering +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes") + dfg, sa, ea = pm4py.discover_dfg(log) + act_count = pm4py.get_event_attribute_values(log, "concept:name") + # keep the specified amount of activities + dfg, sa, ea, act_count = dfg_filtering.filter_dfg_on_activities_percentage(dfg, sa, ea, act_count, 0.3) + # keep the specified amount of paths + dfg, sa, ea, act_count = dfg_filtering.filter_dfg_on_paths_percentage(dfg, sa, ea, act_count, 0.3) + + if importlib.util.find_spec("graphviz"): + # view the DFG + from pm4py.visualization.dfg import visualizer as dfg_visualizer + gviz = dfg_visualizer.apply(dfg, activities_count=act_count, parameters={dfg_visualizer.Variants.FREQUENCY.value.Parameters.START_ACTIVITIES: sa, + dfg_visualizer.Variants.FREQUENCY.value.Parameters.END_ACTIVITIES: ea, + dfg_visualizer.Variants.FREQUENCY.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + dfg_visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/dfg_min_ex_log.py b/pm4py/examples/dfg_min_ex_log.py new file mode 100644 index 0000000000000000000000000000000000000000..f18630e8a30188a9d780db073da44b0b8e23141d --- /dev/null +++ b/pm4py/examples/dfg_min_ex_log.py @@ -0,0 +1,57 @@ +import os + +from pm4py.algo.discovery.dfg import algorithm as dfg_algorithm +from pm4py.objects.conversion.dfg import converter as dfg_conv +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.statistics.end_activities.log import get as ea_get +from pm4py.statistics.start_activities.log import get as sa_get +from pm4py.statistics.service_time.log import get as soj_time_get +from pm4py.statistics.concurrent_activities.log import get as conc_act_get +from pm4py.statistics.eventually_follows.log import get as efg_get +from pm4py.util import constants +from examples import examples_conf +import importlib.util + + +def execute_script(): + log_path = os.path.join("..", "tests", "input_data", "interval_event_log.xes") + #log_path = os.path.join("..", "tests", "input_data", "reviewing.xes") + log = xes_importer.apply(log_path) + parameters = {} + parameters[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = "start_timestamp" + parameters[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = "time:timestamp" + parameters[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = "concept:name" + parameters["strict"] = False + parameters["format"] = examples_conf.TARGET_IMG_FORMAT + start_activities = sa_get.get_start_activities(log, parameters=parameters) + end_activities = ea_get.get_end_activities(log, parameters=parameters) + parameters["start_activities"] = start_activities + parameters["end_activities"] = end_activities + soj_time = soj_time_get.apply(log, parameters=parameters) + print("soj_time") + print(soj_time) + conc_act = conc_act_get.apply(log, parameters=parameters) + print("conc_act") + print(conc_act) + efg = efg_get.apply(log, parameters=parameters) + print("efg") + print(efg) + dfg_freq = dfg_algorithm.apply(log, parameters=parameters, variant=dfg_algorithm.Variants.FREQUENCY) + dfg_perf = dfg_algorithm.apply(log, parameters=parameters, variant=dfg_algorithm.Variants.PERFORMANCE) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.dfg import visualizer as dfg_vis_fact + from pm4py.visualization.petri_net import visualizer as pn_vis + dfg_gv_freq = dfg_vis_fact.apply(dfg_freq, log=log, variant=dfg_vis_fact.Variants.FREQUENCY, + parameters=parameters) + dfg_vis_fact.view(dfg_gv_freq) + dfg_gv_perf = dfg_vis_fact.apply(dfg_perf, log=log, variant=dfg_vis_fact.Variants.PERFORMANCE, + parameters=parameters) + dfg_vis_fact.view(dfg_gv_perf) + net, im, fm = dfg_conv.apply(dfg_freq) + gviz = pn_vis.apply(net, im, fm, parameters=parameters) + pn_vis.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/dfg_min_ex_pandas.py b/pm4py/examples/dfg_min_ex_pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..32af9b8b4923869fd2ba802a10d5722d9271ad8a --- /dev/null +++ b/pm4py/examples/dfg_min_ex_pandas.py @@ -0,0 +1,61 @@ +import os + +import pm4py +from pm4py.util import constants, pandas_utils +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics +from pm4py.objects.conversion.dfg import converter as dfg_conv +from pm4py.statistics.attributes.pandas import get as att_get +from pm4py.statistics.end_activities.pandas import get as ea_get +from pm4py.statistics.service_time.pandas import get as soj_time_get +from pm4py.statistics.concurrent_activities.pandas import get as conc_act_get +from pm4py.statistics.eventually_follows.pandas import get as efg_get +from pm4py.statistics.start_activities.pandas import get as sa_get +from examples import examples_conf +import importlib.util + + +def execute_script(): + log_path = os.path.join("..", "tests", "input_data", "interval_event_log.csv") + dataframe = pandas_utils.read_csv(log_path) + log_path = os.path.join("..", "tests", "input_data", "reviewing.xes") + log = pm4py.read_xes(log_path) + dataframe = pm4py.convert_to_dataframe(log) + parameters = {} + #parameters[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = "start_timestamp" + parameters[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = "time:timestamp" + parameters[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = "concept:name" + parameters[constants.PARAMETER_CONSTANT_CASEID_KEY] = "case:concept:name" + parameters["strict"] = True + parameters["format"] = examples_conf.TARGET_IMG_FORMAT + start_activities = sa_get.get_start_activities(dataframe, parameters=parameters) + end_activities = ea_get.get_end_activities(dataframe, parameters=parameters) + att_count = att_get.get_attribute_values(dataframe, "concept:name", parameters=parameters) + parameters["start_activities"] = start_activities + parameters["end_activities"] = end_activities + soj_time = soj_time_get.apply(dataframe, parameters=parameters) + print("soj_time") + print(soj_time) + conc_act = conc_act_get.apply(dataframe, parameters=parameters) + print("conc_act") + print(conc_act) + efg = efg_get.apply(dataframe, parameters=parameters) + print("efg") + print(efg) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.dfg import visualizer as dfg_vis_fact + from pm4py.visualization.petri_net import visualizer as pn_vis + dfg_freq, dfg_perf = df_statistics.get_dfg_graph(dataframe, measure="both", start_timestamp_key="start_timestamp") + dfg_gv_freq = dfg_vis_fact.apply(dfg_freq, activities_count=att_count, variant=dfg_vis_fact.Variants.FREQUENCY, + serv_time=soj_time, parameters=parameters) + dfg_vis_fact.view(dfg_gv_freq) + dfg_gv_perf = dfg_vis_fact.apply(dfg_perf, activities_count=att_count, variant=dfg_vis_fact.Variants.PERFORMANCE, + serv_time=soj_time, parameters=parameters) + dfg_vis_fact.view(dfg_gv_perf) + net, im, fm = dfg_conv.apply(dfg_freq) + gviz = pn_vis.apply(net, im, fm, parameters=parameters) + pn_vis.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/dfg_playout.py b/pm4py/examples/dfg_playout.py new file mode 100644 index 0000000000000000000000000000000000000000..f9b27052dcc191073f12df48abc4766f50b9deb1 --- /dev/null +++ b/pm4py/examples/dfg_playout.py @@ -0,0 +1,44 @@ +import pm4py +from pm4py.algo.filtering.dfg import dfg_filtering +from pm4py.algo.simulation.playout.dfg.variants import classic as dfg_playout +from examples import examples_conf +import importlib.util +import os + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + activities = pm4py.get_event_attribute_values(log, "concept:name") + dfg, sa, ea = pm4py.discover_dfg(log) + # filters the DFG to make a simpler one + perc = 0.5 + dfg, sa, ea, activities = dfg_filtering.filter_dfg_on_activities_percentage(dfg, sa, ea, activities, perc) + dfg, sa, ea, activities = dfg_filtering.filter_dfg_on_paths_percentage(dfg, sa, ea, activities, perc) + # creates the simulated log + simulated_log = dfg_playout.apply(dfg, sa, ea) + print(simulated_log) + print(len(simulated_log)) + print(sum(x.attributes["probability"] for x in simulated_log)) + # shows the two DFGs to show that they are identical + + if importlib.util.find_spec("graphviz"): + pm4py.view_dfg(dfg, sa, ea, log=log, format=examples_conf.TARGET_IMG_FORMAT) + new_dfg, new_sa, new_ea = pm4py.discover_dfg(simulated_log) + + if importlib.util.find_spec("graphviz"): + pm4py.view_dfg(new_dfg, new_sa, new_ea, log=simulated_log, format=examples_conf.TARGET_IMG_FORMAT) + + for trace in simulated_log: + print(list(x["concept:name"] for x in trace)) + print(trace.attributes["probability"], dfg_playout.get_trace_probability(trace, dfg, sa, ea)) + break + dfg, sa, ea = pm4py.discover_dfg(log) + variants = pm4py.get_variants_as_tuples(log) + sum_prob_log_variants = 0.0 + for var in variants: + sum_prob_log_variants += dfg_playout.get_trace_probability(variants[var][0], dfg, sa, ea) + print("percentage of behavior allowed from DFG that is in the log (from 0.0 to 1.0): ", sum_prob_log_variants) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/diagn_add_dataframe.py b/pm4py/examples/diagn_add_dataframe.py new file mode 100644 index 0000000000000000000000000000000000000000..17070e28d2a04e8f2ea88942ebd16def6e039340 --- /dev/null +++ b/pm4py/examples/diagn_add_dataframe.py @@ -0,0 +1,24 @@ +import pm4py +from pm4py.algo.discovery.log_skeleton import algorithm as log_skeleton_discovery +from pm4py.algo.conformance.log_skeleton import algorithm as log_skeleton_conformance +from pm4py.util import constants, pandas_utils + + +def execute_script(): + # loads a XES event log + event_log = pm4py.read_xes("../tests/input_data/receipt.xes") + # gets the dataframe out of the event log (through conversion) + dataframe = pm4py.convert_to_dataframe(event_log) + # discovers the log skeleton model + log_skeleton = log_skeleton_discovery.apply(event_log, parameters={log_skeleton_discovery.Variants.CLASSIC.value.Parameters.NOISE_THRESHOLD: 0.03}) + # apply conformance checking + conf_result = log_skeleton_conformance.apply(event_log, log_skeleton) + # gets the diagnostic result out of the dataframe + diagnostics = log_skeleton_conformance.get_diagnostics_dataframe(event_log, conf_result) + # merges the dataframe containing the events, and the diagnostics dataframe + merged_df = pandas_utils.merge(dataframe, diagnostics, how="left", left_on="case:concept:name", right_on="case_id", suffixes=('', '_diagn')) + print(merged_df) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/discovery_data_petri_net.py b/pm4py/examples/discovery_data_petri_net.py new file mode 100644 index 0000000000000000000000000000000000000000..85903578e63b9946f91835a15c35a5b4e589ba52 --- /dev/null +++ b/pm4py/examples/discovery_data_petri_net.py @@ -0,0 +1,19 @@ +import pm4py +from pm4py.algo.decision_mining import algorithm as decision_mining +from examples import examples_conf +import os +import importlib.util + + +def execute_script(): + log_path = os.path.join("..", "tests", "input_data", "roadtraffic100traces.xes") + log = pm4py.read_xes(log_path) + net, im, fm = pm4py.discover_petri_net_inductive(log) + net, im, fm = decision_mining.create_data_petri_nets_with_decisions(log, net, im, fm) + + if importlib.util.find_spec("graphviz"): + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/dotted_chart.py b/pm4py/examples/dotted_chart.py new file mode 100644 index 0000000000000000000000000000000000000000..677d50c8c1612377287acc7f719696b3001666ed --- /dev/null +++ b/pm4py/examples/dotted_chart.py @@ -0,0 +1,20 @@ +import pm4py +from examples import examples_conf +import importlib.util +import os + + +def execute_script(): + # reads a XES log + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + + if importlib.util.find_spec("graphviz"): + # generates the default dotted chart (timestamp on X-axis, case ID on Y-axis, activity as color) + pm4py.view_dotted_chart(log, format=examples_conf.TARGET_IMG_FORMAT) + # generates the dotted chart with the activity on the X-axis, the resource on the Y-axis, and the group + # as color + pm4py.view_dotted_chart(log, format=examples_conf.TARGET_IMG_FORMAT, attributes=["concept:name", "org:resource", "org:group"]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/emd_evaluation.py b/pm4py/examples/emd_evaluation.py new file mode 100644 index 0000000000000000000000000000000000000000..2e6047e6ff0228145ca044040c0be83487bf0dc2 --- /dev/null +++ b/pm4py/examples/emd_evaluation.py @@ -0,0 +1,68 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.alpha import algorithm as alpha_miner +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.evaluation.earth_mover_distance import algorithm as earth_mover_distance +from pm4py.statistics.variants.log import get as variants_get +from pm4py.algo.simulation.playout.petri_net import algorithm +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +import os + + +def execute_script(): + M = {("a", "b", "d", "e"): 0.49, ("a", "d", "b", "e"): 0.49, ("a", "c", "d", "e"): 0.01, ("a", "d", "c", "e"): 0.01} + + L1 = {("a", "b", "d", "e"): 0.49, ("a", "d", "b", "e"): 0.49, ("a", "c", "d", "e"): 0.01, + ("a", "d", "c", "e"): 0.01} + # the distance between M and L1, that we expect to be zero, is zero according to the EMD + emd = earth_mover_distance.apply(M, L1) + print("M L1 emd distance:", emd) + + L2 = {("a", "b", "e"): 0.5, ("a", "b", "d", "e"): 0.245, ("a", "d", "b", "e"): 0.245, ("a", "c", "d", "e"): 0.005, + ("a", "d", "c", "e"): 0.005} + # the distance between M and L2 according to the EMD is 0.1275 (paper value 0.125) + emd = earth_mover_distance.apply(M, L2) + print("M L2 emd distance:", emd) + + L3 = {("a", "b", "d", "e"): 0.489, ("a", "d", "b", "e"): 0.489, ("a", "c", "d", "e"): 0.01, + ("a", "d", "c", "e"): 0.01, ("a", "b", "e"): 0.002} + # the distance between M and L3 according to the EMD is 0.0005 (paper value 0.0005), perfect! + emd = earth_mover_distance.apply(M, L3) + print("M L3 emd distance:", emd) + + L4 = {("a", "b", "d", "e"): 0.5, ("a", "d", "b", "e"): 0.5} + # the distance between M and L4 according to the EMD is 0.005 (paper value 0.005), perfect! + emd = earth_mover_distance.apply(M, L4) + print("M L4 emd distance:", emd) + + L5 = {("a", "c", "d", "e"): 0.5, ("a", "d", "c", "e"): 0.5} + # the distance between M and L5 according to the EMD is 0.245 (paper value 0.245), perfect! + emd = earth_mover_distance.apply(M, L5) + print("M L5 emd distance:", emd) + + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + lang_log = variants_get.get_language(log) + net0, im0, fm0 = alpha_miner.apply(log) + process_tree = inductive_miner.apply(log) + net1, im1, fm1 = process_tree_converter.apply(process_tree) + lang_model0 = variants_get.get_language( + algorithm.apply(net0, im0, fm0, variant=algorithm.Variants.STOCHASTIC_PLAYOUT, + parameters={algorithm.Variants.STOCHASTIC_PLAYOUT.value.Parameters.LOG: log})) + lang_model1 = variants_get.get_language( + algorithm.apply(net1, im1, fm1, variant=algorithm.Variants.STOCHASTIC_PLAYOUT, + parameters={algorithm.Variants.STOCHASTIC_PLAYOUT.value.Parameters.LOG: log})) + emd = earth_mover_distance.apply(lang_model0, lang_log) + print("running-example alpha emd distance: ", emd) + emd = earth_mover_distance.apply(lang_model1, lang_log) + print("running-example inductive emd distance: ", emd) + + #log = xes_importer.apply(os.path.join("..", "tests", "input_data", "receipt.xes")) + #net, im, fm = inductive_miner.apply(log) + #lang_model = variants_get.get_language(simulator.apply(net, im, fm, variant=simulator.Variants.STOCHASTIC_PLAYOUT, + # parameters={ + # simulator.Variants.STOCHASTIC_PLAYOUT.value.Parameters.LOG: log})) + #emd = earth_mover_distance.apply(lang_model, lang_log) + #print("receipt inductive emd distance: ", emd) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/enrich_log_with_align.py b/pm4py/examples/enrich_log_with_align.py new file mode 100644 index 0000000000000000000000000000000000000000..8548ac3aaf66b2cd0ff5b693e26f6e0b745b28f9 --- /dev/null +++ b/pm4py/examples/enrich_log_with_align.py @@ -0,0 +1,18 @@ +import pm4py +import os +from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments +from pm4py.algo.conformance.alignments.petri_net.utils import log_enrichment +from pm4py.objects.log.importer.xes import importer as xes_importer + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filtered_log = pm4py.filter_variants_top_k(log, 1) + net, im, fm = pm4py.discover_petri_net_inductive(filtered_log) + aligned_traces = alignments.apply(log, net, im, fm, parameters={"ret_tuple_as_trans_desc": True}) + enriched_log = log_enrichment.apply(log, aligned_traces) + print(enriched_log) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ev_to_obj_types_graph.py b/pm4py/examples/ev_to_obj_types_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..fd3d6021114b188f09fa274ecb79511d7c7523f9 --- /dev/null +++ b/pm4py/examples/ev_to_obj_types_graph.py @@ -0,0 +1,16 @@ +import pm4py +from examples import examples_conf +import importlib.util + + +def execute_script(): + ocel = pm4py.read_ocel('../tests/input_data/ocel/example_log.jsonocel') + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.ocel.eve_to_obj_types import visualizer + gviz = visualizer.apply(ocel, parameters={"format": examples_conf.TARGET_IMG_FORMAT, "annotate_frequency": True}) + visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/events_distribution.py b/pm4py/examples/events_distribution.py new file mode 100644 index 0000000000000000000000000000000000000000..71779839984a751a423d2cc1f0aceb2d180b6640 --- /dev/null +++ b/pm4py/examples/events_distribution.py @@ -0,0 +1,66 @@ +import os + +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils +from pm4py.statistics.attributes.pandas import get as attr_get +from examples import examples_conf +import importlib.util + + +def execute_script(): + df = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "receipt.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + + # plots the distribution of the events over the days of a month + x0, y0 = attr_get.get_events_distribution(df, distr_type="days_month") + + if importlib.util.find_spec("graphviz") and importlib.util.find_spec("matplotlib"): + from pm4py.visualization.graphs import visualizer + gviz = visualizer.apply(x0, y0, variant=visualizer.Variants.BARPLOT, + parameters={"format": examples_conf.TARGET_IMG_FORMAT, "title": "Distribution of the Events over the Days of a Month", + "x_axis": "Day of month", "y_axis": "Number of Events"}) + visualizer.view(gviz) + + # plots the distribution of the events over the months + x1, y1 = attr_get.get_events_distribution(df, distr_type="months") + + if importlib.util.find_spec("graphviz") and importlib.util.find_spec("matplotlib"): + from pm4py.visualization.graphs import visualizer + gviz = visualizer.apply(x1, y1, variant=visualizer.Variants.BARPLOT, + parameters={"format": examples_conf.TARGET_IMG_FORMAT, "title": "Distribution of the Events over the Months", + "x_axis": "Month", "y_axis": "Number of Events"}) + visualizer.view(gviz) + + # plots the distribution of the events over the years + x2, y2 = attr_get.get_events_distribution(df, distr_type="years") + + if importlib.util.find_spec("graphviz") and importlib.util.find_spec("matplotlib"): + from pm4py.visualization.graphs import visualizer + gviz = visualizer.apply(x2, y2, variant=visualizer.Variants.BARPLOT, + parameters={"format": examples_conf.TARGET_IMG_FORMAT, "title": "Distribution of the Events over the Years", + "x_axis": "Year", "y_axis": "Number of Events"}) + visualizer.view(gviz) + + # plots the distribution of the events over the hours (of the day) + x3, y3 = attr_get.get_events_distribution(df, distr_type="hours") + + if importlib.util.find_spec("graphviz") and importlib.util.find_spec("matplotlib"): + from pm4py.visualization.graphs import visualizer + gviz = visualizer.apply(x3, y3, variant=visualizer.Variants.BARPLOT, + parameters={"format": examples_conf.TARGET_IMG_FORMAT, "title": "Distribution of the Events over the Hours", + "x_axis": "Hour (of day)", "y_axis": "Number of Events"}) + visualizer.view(gviz) + + # plots the distribution of the events over the days of the week + x4, y4 = attr_get.get_events_distribution(df, distr_type="days_week") + + if importlib.util.find_spec("graphviz") and importlib.util.find_spec("matplotlib"): + from pm4py.visualization.graphs import visualizer + gviz = visualizer.apply(x4, y4, variant=visualizer.Variants.BARPLOT, + parameters={"format": examples_conf.TARGET_IMG_FORMAT, "title": "Distribution of the Events over the Days of a Week", + "x_axis": "Day of the Week", "y_axis": "Number of Events"}) + visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/example_check_fitness.py b/pm4py/examples/example_check_fitness.py new file mode 100644 index 0000000000000000000000000000000000000000..4270b02756d660dfc8598d20f752d1f38eb9d924 --- /dev/null +++ b/pm4py/examples/example_check_fitness.py @@ -0,0 +1,26 @@ +import time + +import pm4py +from pm4py.objects.log.util import filtering_utils + + +def execute_script(): + log = pm4py.read_xes("../tests/compressed_input_data/02_teleclaims.xes.gz") + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.3) + net, im, fm = pm4py.convert_to_petri_net(tree) + # reduce the log to one trace per variant + log = filtering_utils.keep_one_trace_per_variant(log) + for index, trace in enumerate(log): + print(index) + aa = time.time() + check_tree = pm4py.check_is_fitting(trace, tree) + bb = time.time() + check_petri = pm4py.check_is_fitting(trace, net, im, fm) + cc = time.time() + print("check on tree: ", check_tree, "time", bb - aa) + print("check on Petri net: ", check_petri, "time", cc - bb) + print() + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/examples_conf.py b/pm4py/examples/examples_conf.py new file mode 100644 index 0000000000000000000000000000000000000000..5699544af93c963cd4d3adb774489ae1be79cdc6 --- /dev/null +++ b/pm4py/examples/examples_conf.py @@ -0,0 +1 @@ +TARGET_IMG_FORMAT = "svg" diff --git a/pm4py/examples/execute_everything.py b/pm4py/examples/execute_everything.py new file mode 100644 index 0000000000000000000000000000000000000000..8e6146f13be359a5be599b10376385a0a5c52c7d --- /dev/null +++ b/pm4py/examples/execute_everything.py @@ -0,0 +1,1059 @@ +import inspect +import os +import sys +import traceback +import importlib.util + + +EXECUTE_EXAMPLES = True + + +def bpmn_js_visualization(): + from examples import bpmn_js_visualization + print("\n\nbpmn_js_visualization") + bpmn_js_visualization.execute_script() + + +def log_projection_dfg_variant(): + from examples import log_projection_dfg_variant + print("\n\nlog_projection_dfg_variant") + log_projection_dfg_variant.execute_script() + + +def streaming_live_to_static_stream(): + from examples import streaming_live_to_static_stream + print("\n\nstreaming_live_to_static_stream") + streaming_live_to_static_stream.execute_script() + + +def declare_simple(): + from examples import declare_simple + print("\n\ndeclare_simple") + declare_simple.execute_script() + + +def variants_paths_duration(): + from examples import variants_paths_duration + print("\n\nvariants_paths_duration") + variants_paths_duration.execute_script() + + +def ev_to_obj_types_graph(): + from examples import ev_to_obj_types_graph + print("\n\nev_to_obj_types_graph") + ev_to_obj_types_graph.execute_script() + + +def label_splitting(): + from examples import label_splitting + print("\n\nlabel_splitting") + label_splitting.execute_script() + + +def nx_ocel_to_graphviz(): + from examples import nx_ocel_to_graphviz + print("\n\nnx_ocel_to_graphviz") + nx_ocel_to_graphviz.execute_script() + + +def nx_traditional_to_graphviz(): + from examples import nx_traditional_to_graphviz + print("\n\nnx_traditional_to_graphviz") + nx_traditional_to_graphviz.execute_script() + + +def segments_retrieval_filtering(): + from examples import segments_retrieval_filtering + print("\n\nsegments_retrieval_filtering") + segments_retrieval_filtering.execute_script() + + +def feature_extraction_case_loc(): + from examples import feature_extraction_case_loc + print("\n\nfeature_extraction_case_loc") + feature_extraction_case_loc.execute_script() + + +def powl_discovery(): + from examples import powl_discovery + print("\n\npowl_discovery") + powl_discovery.execute_script() + + +def powl_parsing(): + from examples import powl_parsing + print("\n\npowl_parsing") + powl_parsing.execute_script() + +def log_skeleton_manual_constraints(): + from examples import log_skeleton_manual_constraints + print("\n\nlog_skeleton_manual_constraints") + log_skeleton_manual_constraints.execute_script() + + +def stochastic_petri_playout(): + from examples import stochastic_petri_playout + print("\n\nstochastic_petri_playout") + stochastic_petri_playout.execute_script() + + +def trace_attrib_hierarch_cluster(): + from examples import trace_attrib_hierarch_cluster + print("\n\ntrace_attrib_hierarch_cluster") + trace_attrib_hierarch_cluster.execute_script() + + +def activities_to_alphabet(): + from examples import activities_to_alphabet + print("\n\nactivities_to_alphabet") + activities_to_alphabet.execute_script() + + +def ocel_filter_cc(): + from examples import ocel_filter_cc + print("\n\nocel_filter_cc") + ocel_filter_cc.execute_script() + + +def queue_check_exponential(): + from examples import queue_check_exponential + print("\n\nqueue_check_exponential") + queue_check_exponential.execute_script() + + +def queue_check_max_conc_exec(): + from examples import queue_check_max_conc_exec + print("\n\nqueue_check_max_conc_exec") + queue_check_max_conc_exec.execute_script() + + +def timestamp_granularity(): + from examples import timestamp_granularity + print("\n\ntimestamp_granularity") + timestamp_granularity.execute_script() + + +def ocel_occm_example(): + from examples import ocel_occm_example + print("\n\nocel_occm_example") + ocel_occm_example.execute_script() + + +def ocel_clustering(): + from examples import ocel_clustering + print("\n\nocel_clustering") + ocel_clustering.execute_script() + + +def ocel_enrichment(): + from examples import ocel_enrichment + print("\n\nocel_enrichment") + ocel_enrichment.execute_script() + + +def validation_ocel20_xml(): + from examples import validation_ocel20_xml + print("\n\nvalidation_ocel20_xml") + validation_ocel20_xml.execute_script() + + +def consecutive_act_case_grouping_filter(): + from examples import consecutive_act_case_grouping_filter + print("\n\nconsecutive_act_case_grouping_filter") + consecutive_act_case_grouping_filter.execute_script() + + +def cost_based_dfg(): + from examples import cost_based_dfg + print("\n\ncost_based_dfg") + cost_based_dfg.execute_script() + + +def df_to_log_postpro(): + from examples import df_to_log_postpro + print("\n\ndf_to_log_postpro") + df_to_log_postpro.execute_script() + + +def hybrid_ilp_miner(): + from examples import hybrid_ilp_miner + print("\n\nhybrid_ilp_miner") + hybrid_ilp_miner.execute_script() + + +def ml_insert_case_arrival_finish(): + from examples import ml_insert_case_arrival_finish + print("\n\nml_insert_case_arrival_finish") + ml_insert_case_arrival_finish.execute_script() + + +def ml_insert_waiting_service_time(): + from examples import ml_insert_waiting_service_time + print("\n\nml_insert_waiting_service_time") + ml_insert_waiting_service_time.execute_script() + + +def ml_log_to_target_vector(): + from examples import ml_log_to_target_vectory + print("\n\nml_log_to_target_vector") + ml_log_to_target_vectory.execute_script() + + +def ml_outcome_enriched(): + from examples import ml_outcome_enriched + print("\n\nml_outcome_enriched") + ml_outcome_enriched.execute_script() + + +def ocel20_import_export(): + from examples import ocel20_import_export + print("\n\nocel20_import_export") + ocel20_import_export.execute_script() + + +def revised_playout(): + from examples import revised_playout + print("\n\nrevised_playout") + revised_playout.execute_script() + + +def timestamp_case_grouping_filter(): + from examples import timestamp_case_grouping_filter + print("\n\ntimestamp_case_grouping_filter") + timestamp_case_grouping_filter.execute_script() + + +def trace_clustering(): + from examples import trace_clustering + print("\n\ntrace_clustering") + trace_clustering.execute_script() + + +def validation_ocel20_relational(): + from examples import validation_ocel20_relational + print("\n\nvalidation_ocel20_relation") + validation_ocel20_relational.execute_script() + + +def all_optimal_alignments(): + from examples import all_optimal_alignments + print("\n\nall_optimal_alignments") + all_optimal_alignments.execute_script() + + +def inductive_miner(): + from examples import inductive_miner + print("\n\ninductive_miner") + inductive_miner.execute_script() + + +def inductive_miner_dfg(): + from examples import inductive_miner_dfg + print("\n\ninductive_miner_dfg") + inductive_miner_dfg.execute_script() + + +def inductive_miner_variants(): + from examples import inductive_miner_variants + print("\n\ninductive_miner_variants") + inductive_miner_variants.execute_script() + + +def heu_miner_plus_plus(): + from examples import heuminer_plusplus + print("\n\nheuminer_plusplus") + heuminer_plusplus.execute_script() + + +def interval_events_overlap(): + from examples import interval_events_overlap + print("\n\ninterval_events_overlap") + interval_events_overlap.execute_script() + + +def kneighb_regression(): + from examples import kneighb_regression + print("\n\nkneighb_regression") + kneighb_regression.execute_script() + + +def log_to_int_tree_open_paths(): + from examples import log_to_int_tree_open_paths + print("\n\nlog_to_int_tree_open_paths") + log_to_int_tree_open_paths.execute_script() + + +def murata_reduction(): + from examples import murata_reduction + print("\n\nmurata_reduction") + murata_reduction.execute_script() + + +def ocel_merge_duplicates(): + from examples import ocel_merge_duplicates + print("\n\nocel_merge_duplicates") + ocel_merge_duplicates.execute_script() + + +def ocel_saw_net_disc(): + from examples import ocel_saw_net_disc + print("\n\nocel_saw_net_disc") + ocel_saw_net_disc.execute_script() + + +def ocel_to_nx(): + from examples import ocel_to_nx + print("\n\nocel_to_nx") + ocel_to_nx.execute_script() + + +def saw_net_ocel_multi(): + from examples import saw_net_ocel_multi + print("\n\nsaw_net_ocel_multi") + saw_net_ocel_multi.execute_script() + + +def saw_net_ocel_single(): + from examples import saw_net_ocel_single + print("\n\nsaw_net_ocel_single") + saw_net_ocel_single.execute_script() + + +def temporal_features(): + from examples import temporal_features + print("\n\ntemporal_features") + temporal_features.execute_script() + + +def transform_db_to_ocel(): + from examples import transform_db_to_ocel + print("\n\ntransform_db_to_ocel") + transform_db_to_ocel.execute_script() + + +def transform_db_to_ocel_2(): + from examples import transform_db_to_ocel_2 + print("\n\ntransform_db_to_ocel_2") + transform_db_to_ocel_2.execute_script() + + +def transform_db_to_xes(): + from examples import transform_db_to_xes + print("\n\ntransform_db_to_xes") + transform_db_to_xes.execute_script() + + +def trie(): + from examples import trie + print("\n\ntrie") + trie.execute_script() + + +def feature_extraction_ocel(): + from examples import feature_extraction_ocel + print("\n\nfeature_extraction_ocel") + feature_extraction_ocel.execute_script() + + +def ocel_validation(): + from examples import ocel_validation + print("\n\nocel_validation") + ocel_validation.execute_script() + + +def process_tree_frequency_annotation(): + from examples import process_tree_frequency_annotation + print("\n\nprocess_tree_frequency_annotation") + process_tree_frequency_annotation.execute_script() + + +def tree_manual_generation(): + from examples import tree_manual_generation + print("\n\ntree_manual_generation") + tree_manual_generation.execute_script() + + +def workalendar_example(): + from examples import workalendar_example + print("\n\nworkalendar_example") + workalendar_example.execute_script() + + +def merging_case_relations(): + from examples import merging_case_relations + print("\n\nmerging_case_relations") + merging_case_relations.execute_script() + + +def activity_position(): + from examples import activity_position + print("\n\nactivity_position") + activity_position.execute_script() + + +def link_analysis_vbfa(): + from examples import link_analysis_vbfa + print("\n\nlink_analysis_vbfa") + link_analysis_vbfa.execute_script() + + +def ocel_streaming(): + from examples import ocel_streaming + print("\n\nocel_streaming") + ocel_streaming.execute_script() + + +def petri_manual_generation(): + from examples import petri_manual_generation + print("\n\npetri_manual_generation") + petri_manual_generation.execute_script() + + +def timestamp_interleavings(): + from examples import timestamp_interleavings + print("\n\ntimestamp_interleavings") + timestamp_interleavings.execute_script() + + +def object_centric_petri_net_discovery(): + from examples import object_centric_petri_net_discovery + print("\n\nobject_centric_petri_net_discovery") + object_centric_petri_net_discovery.execute_script() + + +def trans_system_stochastic_view(): + from examples import trans_system_stochastic_vis + print("\n\ntrans_system_stochastic_view") + trans_system_stochastic_vis.execute_script() + + +def network_analysis(): + from examples import network_analysis + print("\n\nnetwork_analysis") + network_analysis.execute_script() + + +def read_write_ocel(): + from examples import read_write_ocel + print("\n\nread_write_ocel") + read_write_ocel.execute_script() + + +def ocdfg_discovery(): + from examples import ocdfg_discovery + print("\n\nocdfg_discovery") + ocdfg_discovery.execute_script() + + +def enrich_log_with_align(): + from examples import enrich_log_with_align + print("\n\nenrich_log_with_align") + enrich_log_with_align.execute_script() + + +def extended_marking_equation(): + from examples import extended_marking_equation + print("\n\nextended_marking_equation") + extended_marking_equation.execute_script() + + +def features_locally_linear_embedding(): + from examples import features_locally_linear_embedding + print("\n\nfeatures_locally_linear_embedding") + features_locally_linear_embedding.execute_script() + + +def discovery_data_petri_net(): + from examples import discovery_data_petri_net + print("\n\ndiscovery_data_petri_net") + discovery_data_petri_net.execute_script() + + +def performance_dfg_simulation(): + from examples import performance_dfg_simulation + print("\n\nperformance_dfg_simulation") + performance_dfg_simulation.execute_script() + + +def data_petri_nets(): + from examples import data_petri_nets + print("\n\ndata_petri_nets") + data_petri_nets.execute_script() + + +def inhibitor_reset_arcs(): + from examples import inhibitor_reset_arcs + print("\n\ninhibitor_reset_arcs") + inhibitor_reset_arcs.execute_script() + + +def batch_detection(): + from examples import batch_detection + print("\n\nbatch_detection") + batch_detection.execute_script() + + +def case_overlap_stat(): + from examples import case_overlap_stat + print("\n\ncase_overlap_stat") + case_overlap_stat.execute_script() + + +def cycle_time(): + from examples import cycle_time + print("\n\ncycle_time") + cycle_time.execute_script() + + +def rework(): + from examples import rework + print("\n\nrework") + rework.execute_script() + + +def events_distribution(): + from examples import events_distribution + print("\n\nevents_distribution") + events_distribution.execute_script() + + +def dotted_chart(): + from examples import dotted_chart + print("\n\ndotted_chart") + dotted_chart.execute_script() + + +def performance_spectrum(): + from examples import perf_spectrum_visualization + print("\n\nperformance_spectrum") + perf_spectrum_visualization.execute_script() + + +def woflan(): + from examples import woflan + print("\n\nwoflan") + woflan.execute_script() + + +def bpmn_from_pt(): + from examples import bpmn_from_pt_conversion + print("\n\nbpmn_from_pt_conversion") + bpmn_from_pt_conversion.execute_script() + + +def bpmn_import_and_to_petri_net(): + from examples import bpmn_import_and_to_petri_net + print("\n\nbpmn_import_and_to_petri_net") + bpmn_import_and_to_petri_net.execute_script() + + +def tree_playout(): + from examples import tree_playout + print("\n\ntree_playout") + tree_playout.execute_script() + + +def emd_evaluation(): + from examples import emd_evaluation + print("\n\nemd_evaluation") + emd_evaluation.execute_script() + + +def footprints_tree_conf(): + from examples import footprints_tree_conf + print("\n\nfootprints_tree_conf") + footprints_tree_conf.execute_script() + + +def simplified_interface(): + from examples import simplified_interface + print("\n\nsimplified_interface") + simplified_interface.execute_script() + + +def footprints_petri_net(): + from examples import footprints_petri_net + print("\n\nfootprints_petri_net") + footprints_petri_net.execute_script() + + +def corr_mining(): + from examples import corr_mining + print("\n\ncorr_mining") + corr_mining.execute_script() + + +def log_skeleton(): + from examples import log_skeleton + print("\n\nlog_skeleton") + log_skeleton.execute_script() + + +def roles_detection(): + from examples import roles_detection + print("\n\nroles_detection") + roles_detection.execute_script() + + +def alignment_test(): + from examples import alignment_test + print("\n\nalignment_test") + alignment_test.execute_script() + + +def dec_treplay_imdf(): + from examples import dec_treplay_imdf + print("\n\ndec_treplay_imdf") + dec_treplay_imdf.execute_script() + + +def logs_petri_visual_comparison(): + from examples import logs_petri_visual_comparison + print("\n\nlogs_petri_visual_comparison") + logs_petri_visual_comparison.execute_script() + + +def imdf_example(): + from examples import im_example + print("\n\nimdf_example") + im_example.execute_script() + + +def test_evaluation(): + from examples import test_evaluation + print("\n\ntestEvaluation") + test_evaluation.execute_script() + + +def sna_log(): + from examples import sna_log + print("\n\nsna_log") + sna_log.execute_script() + + +def token_replay_alpha(): + from examples import token_replay_alpha + print("\n\ntokenReplay_alpha") + token_replay_alpha.execute_script() + + +def manual_log_generation(): + from examples import manual_log_generation + print("\n\nmanual_log_generation") + manual_log_generation.execute_script() + + +def token_replay_imdf(): + from examples import token_replay_imdf + print("\n\ntokenReplay_imdf") + token_replay_imdf.execute_script() + + +def decisiontree_trivial_example(): + from examples import decisiontree_trivial_example + print("\n\ndecisiontree_trivial_example") + decisiontree_trivial_example.execute_script() + + +def decisiontree_align_example(): + from examples import decisiontree_align_example + print("\n\ndecisiontree_align_example") + decisiontree_align_example.execute_script() + + +def align_decomposition_example(): + from examples import align_decomposition_example + print("\n\nalign_decomposition_example") + align_decomposition_example.execute_script() + + +def transition_system_test(): + from examples import transition_system_test + print("\n\ntransition_system_test") + transition_system_test.execute_script() + + +def heu_miner_test(): + from examples import heu_miner_test + print("\n\nheu_miner_test") + heu_miner_test.execute_script() + + +def dfg_min_ex_log(): + from examples import dfg_min_ex_log + print("\n\ndfg_min_ex_log") + dfg_min_ex_log.execute_script() + + +def dfg_min_ex_pandas(): + from examples import dfg_min_ex_pandas + print("\n\ndfg_min_ex_pandas") + dfg_min_ex_pandas.execute_script() + + +def dfg_filt_act_paths_perc(): + from examples import dfg_filt_act_paths_perc + print("\n\ndfg_filt_act_paths_perc") + dfg_filt_act_paths_perc.execute_script() + + +def graphs_visualization(): + from examples import graphs_visualization + print("\n\ngraphs_visualization") + graphs_visualization.execute_script() + + +def backwards_token_replay(): + from examples import backwards_token_replay + print("\n\nbackwards_token_replay") + backwards_token_replay.execute_script() + + +def transient_dfg(): + from examples import transient_dfg + print("\n\ntransient_dfg") + transient_dfg.execute_script() + + +def transient_petri_net(): + from examples import transient_petri_net + print("\n\ntransient_petri_net") + transient_petri_net.execute_script() + + +def monte_carlo_dfg(): + from examples import montecarlo_dfg + print("\n\nmontecarlo_dfg") + montecarlo_dfg.execute_script() + + +def monte_carlo_petri_net(): + from examples import montecarlo_petri_net + print("\n\nmontecarlo_petri_net") + montecarlo_petri_net.execute_script() + + +def visualization_processtree(): + from examples import visualization_processtree + print("\n\nvisualization_processtree") + visualization_processtree.execute_script() + + +def diagn_add_dataframe(): + from examples import diagn_add_dataframe + print("\n\ndiagn_add_dataframe") + diagn_add_dataframe.execute_script() + + +def pn_to_pt(): + from examples import pn_to_pt + print("\n\npn_to_pt") + pn_to_pt.execute_script() + + +def visualization_align_table(): + from examples import visualization_align_table + print("\n\nvisualization_align_table") + visualization_align_table.execute_script() + + +def align_approx_pt(): + from examples import align_approx_pt + print("\n\nalign_approx_pt") + align_approx_pt.execute_script() + + +def streaming_conformance_footprints(): + from examples import streaming_conformance_footprints + print("\n\nstreaming_conformance_footprints") + streaming_conformance_footprints.execute_script() + + +def streaming_conformance_tbr(): + from examples import streaming_conformance_tbr + print("\n\nstreaming_conformance_tbr") + streaming_conformance_tbr.execute_script() + + +def streaming_conformance_temporal_profile(): + from examples import streaming_conformance_temporal_profile + print("\n\nstreaming_conformance_temporal_profile") + streaming_conformance_temporal_profile.execute_script() + + +def streaming_csv_reader_event_stream(): + from examples import streaming_csv_reader_event_stream + print("\n\nstreaming_csv_reader_event_stream") + streaming_csv_reader_event_stream.execute_script() + + +def streaming_discovery_dfg(): + from examples import streaming_discovery_dfg + print("\n\nstreaming_discovery_dfg") + streaming_discovery_dfg.execute_script() + + +def streaming_xes_reader_event_stream(): + from examples import streaming_xes_reader_event_stream + print("\n\nstreaming_xes_reader_event_stream") + streaming_xes_reader_event_stream.execute_script() + + +def streaming_xes_reader_trace_stream(): + from examples import streaming_xes_reader_trace_stream + print("\n\nstreaming_xes_reader_trace_stream") + streaming_xes_reader_trace_stream.execute_script() + + +def example_check_fitness(): + from examples import example_check_fitness + print("\n\nexample_check_fitness") + example_check_fitness.execute_script() + + +def dfg_align_log(): + from examples import dfg_align_log + print("\n\ndfg_align_log") + dfg_align_log.execute_script() + + +def dfg_playout(): + from examples import dfg_playout + print("\n\ndfg_playout") + dfg_playout.execute_script() + + +def temporal_profile_log(): + from examples import temporal_profile_log + print("\n\ntemporal_profile_log") + temporal_profile_log.execute_script() + + +def temporal_profile_dataframe(): + from examples import temporal_profile_dataframe + print("\n\ntemporal_profile_dataframe") + temporal_profile_dataframe.execute_script() + + +def dataframe_prefix_and_fea_extraction(): + from examples import dataframe_prefix_and_fea_extraction + print("\n\ndataframe_prefix_and_fea_extraction") + dataframe_prefix_and_fea_extraction.execute_script() + + +def logs_alignments(): + from examples import logs_alignment + print("\n\nlogs_alignment") + logs_alignment.execute_script() + + +def orgmining_local_diagn(): + from examples import orgmining_local_diagn + print("\n\norgmining_local_diagn") + orgmining_local_diagn.execute_script() + + +def resource_profiles_log(): + from examples import resource_profiles_log + print("\n\nresource_profiles_log") + resource_profiles_log.execute_script() + + +def resource_profile_pandas(): + from examples import resource_profiles_pandas + print("\n\nresource_profile_pandas") + resource_profiles_pandas.execute_script() + + +def process_tree_reduction(): + from examples import process_tree_reduction + print("\n\nprocess_tree_reduction") + process_tree_reduction.execute_script() + + +def execute_script(f): + try: + f() + except ImportError: + import time + traceback.print_exc() + time.sleep(3) + except KeyError: + import time + traceback.print_exc() + time.sleep(3) + except: + traceback.print_exc() + input("\npress INPUT if you want to continue") + + +def main(): + sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))) + + import pm4py + import numpy + import pandas + import networkx + + pm4py.util.constants.SHOW_PROGRESS_BAR = True + pm4py.util.constants.SHOW_EVENT_LOG_DEPRECATION = False + pm4py.util.constants.SHOW_INTERNAL_WARNINGS = False + #pm4py.util.constants.DEFAULT_TIMESTAMP_PARSE_FORMAT = None + + if EXECUTE_EXAMPLES: + execute_script(log_projection_dfg_variant) + execute_script(streaming_live_to_static_stream) + execute_script(powl_discovery) + execute_script(powl_parsing) + execute_script(ev_to_obj_types_graph) + execute_script(label_splitting) + execute_script(nx_ocel_to_graphviz) + execute_script(nx_traditional_to_graphviz) + execute_script(segments_retrieval_filtering) + execute_script(stochastic_petri_playout) + execute_script(simplified_interface) + execute_script(bpmn_js_visualization) + execute_script(read_write_ocel) + execute_script(discovery_data_petri_net) + execute_script(data_petri_nets) + execute_script(inhibitor_reset_arcs) + execute_script(logs_petri_visual_comparison) + execute_script(align_decomposition_example) + execute_script(ocdfg_discovery) + execute_script(woflan) + execute_script(inductive_miner) + execute_script(inductive_miner_dfg) + execute_script(inductive_miner_variants) + execute_script(heu_miner_plus_plus) + execute_script(activities_to_alphabet) + execute_script(ocel_filter_cc) + execute_script(queue_check_exponential) + execute_script(queue_check_max_conc_exec) + execute_script(timestamp_granularity) + execute_script(ocel_occm_example) + execute_script(ocel_clustering) + execute_script(ocel_enrichment) + execute_script(validation_ocel20_xml) + execute_script(consecutive_act_case_grouping_filter) + execute_script(cost_based_dfg) + execute_script(df_to_log_postpro) + execute_script(hybrid_ilp_miner) + execute_script(ml_insert_case_arrival_finish) + execute_script(ml_insert_waiting_service_time) + execute_script(ml_log_to_target_vector) + execute_script(ml_outcome_enriched) + execute_script(ocel20_import_export) + execute_script(revised_playout) + execute_script(timestamp_case_grouping_filter) + execute_script(trace_clustering) + execute_script(validation_ocel20_relational) + execute_script(interval_events_overlap) + execute_script(kneighb_regression) + execute_script(log_to_int_tree_open_paths) + execute_script(murata_reduction) + execute_script(ocel_merge_duplicates) + execute_script(ocel_saw_net_disc) + execute_script(ocel_to_nx) + execute_script(saw_net_ocel_multi) + execute_script(saw_net_ocel_single) + execute_script(temporal_features) + execute_script(transform_db_to_ocel) + execute_script(transform_db_to_xes) + execute_script(transform_db_to_ocel_2) + execute_script(feature_extraction_ocel) + execute_script(ocel_validation) + execute_script(process_tree_frequency_annotation) + execute_script(tree_manual_generation) + execute_script(workalendar_example) + execute_script(merging_case_relations) + execute_script(activity_position) + execute_script(link_analysis_vbfa) + execute_script(ocel_streaming) + execute_script(petri_manual_generation) + #execute_script(timestamp_interleavings) + execute_script(object_centric_petri_net_discovery) + execute_script(trans_system_stochastic_view) + execute_script(network_analysis) + execute_script(enrich_log_with_align) + execute_script(extended_marking_equation) + execute_script(features_locally_linear_embedding) + execute_script(dotted_chart) + execute_script(performance_spectrum) + execute_script(orgmining_local_diagn) + execute_script(resource_profiles_log) + execute_script(resource_profile_pandas) + execute_script(process_tree_reduction) + execute_script(dataframe_prefix_and_fea_extraction) + execute_script(logs_alignments) + execute_script(bpmn_from_pt) + execute_script(bpmn_import_and_to_petri_net) + execute_script(tree_playout) + execute_script(emd_evaluation) + execute_script(footprints_tree_conf) + execute_script(footprints_petri_net) + execute_script(corr_mining) + execute_script(log_skeleton) + execute_script(roles_detection) + execute_script(alignment_test) + execute_script(dec_treplay_imdf) + execute_script(imdf_example) + execute_script(test_evaluation) + execute_script(sna_log) + execute_script(token_replay_alpha) + execute_script(manual_log_generation) + execute_script(token_replay_imdf) + execute_script(decisiontree_trivial_example) + execute_script(decisiontree_align_example) + execute_script(transition_system_test) + execute_script(heu_miner_test) + execute_script(dfg_min_ex_log) + execute_script(dfg_min_ex_pandas) + execute_script(graphs_visualization) + execute_script(backwards_token_replay) + execute_script(transient_dfg) + execute_script(transient_petri_net) + execute_script(example_check_fitness) + execute_script(pn_to_pt) + execute_script(align_approx_pt) + execute_script(visualization_processtree) + execute_script(visualization_align_table) + execute_script(declare_simple) + execute_script(variants_paths_duration) + execute_script(feature_extraction_case_loc) + execute_script(log_skeleton_manual_constraints) + execute_script(trace_attrib_hierarch_cluster) + execute_script(streaming_conformance_footprints) + execute_script(streaming_conformance_tbr) + execute_script(streaming_csv_reader_event_stream) + execute_script(streaming_discovery_dfg) + execute_script(streaming_xes_reader_event_stream) + execute_script(streaming_xes_reader_trace_stream) + execute_script(monte_carlo_dfg) + execute_script(monte_carlo_petri_net) + + print("numpy version: "+str(numpy.__version__)) + print("pandas version: "+str(pandas.__version__)) + print("networkx version: "+str(networkx.__version__)) + + if importlib.util.find_spec("scipy"): + import scipy + print("scipy version: "+str(scipy.__version__)) + + if importlib.util.find_spec("lxml"): + import lxml + print("lxml version: "+str(lxml.__version__)) + + if importlib.util.find_spec("matplotlib"): + import matplotlib + print("matplotlib version: "+str(matplotlib.__version__)) + + if importlib.util.find_spec("sklearn"): + import sklearn + print("sklearn version: "+str(sklearn.__version__)) + + print("pm4py version: "+str(pm4py.__version__)) + print("Python version: "+str(sys.version)) + + +if __name__ == "__main__": + main() diff --git a/pm4py/examples/extended_marking_equation.py b/pm4py/examples/extended_marking_equation.py new file mode 100644 index 0000000000000000000000000000000000000000..4bfa11cec3fdf00d02fe594ca85b2143233c9ce9 --- /dev/null +++ b/pm4py/examples/extended_marking_equation.py @@ -0,0 +1,38 @@ +import pm4py +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.analysis.marking_equation import algorithm as marking_equation +from pm4py.algo.analysis.extended_marking_equation import algorithm as extended_marking_equation +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +import os +from pm4py.objects.log.importer.xes import importer as xes_importer + + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "receipt.xes")) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + idx = 0 + # try to resolve the marking equation to find an heuristics and possible a vector of transitions + # leading from im to fm + sync_net, sync_im, sync_fm = pm4py.construct_synchronous_product_net(log[idx], net, im, fm) + me_solver = marking_equation.build(sync_net, sync_im, sync_fm) + h, x = me_solver.solve() + firing_sequence, reach_fm1, explained_events = me_solver.get_firing_sequence(x) + print("for trace at index "+str(idx)+": marking equation h = ", h) + print("x vector reaches fm = ", reach_fm1) + print("firing sequence = ", firing_sequence) + # it fails and the value of heuristics is low + # + # now let's try with extended marking equation to find the heuristics and the vector! + eme_solver = extended_marking_equation.build(log[idx], sync_net, sync_im, sync_fm) + h, x = eme_solver.solve() + # the heuristics is much better + firing_sequence, reach_fm2, explained_events = eme_solver.get_firing_sequence(x) + print("for trace at index "+str(idx)+": extended marking equation h = ", h) + print("x vector reaches fm = ", reach_fm2) + print("firing sequence = ", firing_sequence) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/feature_extraction.py b/pm4py/examples/feature_extraction.py new file mode 100644 index 0000000000000000000000000000000000000000..738f748bb25654effb8c47a013b04aab42b91d5c --- /dev/null +++ b/pm4py/examples/feature_extraction.py @@ -0,0 +1,17 @@ +import pm4py +from pm4py.algo.transformation.log_to_features import algorithm as feature_extraction +import os + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes")) + data, feature_names = feature_extraction.apply(log, variant=feature_extraction.Variants.TRACE_BASED) + print(data) + print(feature_names) + data, feature_names = feature_extraction.apply(log, variant=feature_extraction.Variants.EVENT_BASED) + print(data) + print(feature_names) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/feature_extraction_case_loc.py b/pm4py/examples/feature_extraction_case_loc.py new file mode 100644 index 0000000000000000000000000000000000000000..328fd24968b89efc63752c6b0dee6f223eb5015e --- /dev/null +++ b/pm4py/examples/feature_extraction_case_loc.py @@ -0,0 +1,16 @@ +import pm4py + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes") + fea_df = pm4py.extract_features_dataframe(log, include_case_id=True) + # sets the case ID as index for the dataframe, so a row for a specific case + # can be retrieved + fea_df = fea_df.set_index("case:concept:name") + # identifies the features for the case with identifier "case-10017" + features_per_case = fea_df.loc["case-10017"].to_dict() + print(features_per_case) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/feature_extraction_ocel.py b/pm4py/examples/feature_extraction_ocel.py new file mode 100644 index 0000000000000000000000000000000000000000..b8688ac99885f03d6f36f688f99781bc56588a2e --- /dev/null +++ b/pm4py/examples/feature_extraction_ocel.py @@ -0,0 +1,19 @@ +import os +import pm4py +from pm4py.algo.transformation.ocel.features.events import algorithm as events_feature_extraction +from pm4py.util import pandas_utils, constants + + +def execute_script(): + ocel = pm4py.read_ocel(os.path.join("..", "tests", "input_data", "ocel", "example_log.jsonocel")) + # extracts some features on the objects and embed them in a Pandas dataframe + objects_features_df = pm4py.extract_ocel_features(ocel, "element") + print(objects_features_df) + # extracts some features on the events and embed them in a Pandas dataframe + data_events, feature_names_events = events_feature_extraction.apply(ocel) + events_features_df = pandas_utils.instantiate_dataframe(data_events, columns=feature_names_events) + print(events_features_df) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/features_locally_linear_embedding.py b/pm4py/examples/features_locally_linear_embedding.py new file mode 100644 index 0000000000000000000000000000000000000000..41570183aa0b6d7ddd73af6fb604e077675554b8 --- /dev/null +++ b/pm4py/examples/features_locally_linear_embedding.py @@ -0,0 +1,25 @@ +import os + +import pm4py +from pm4py.algo.transformation.log_to_features.util import locally_linear_embedding +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + + if importlib.util.find_spec("scipy") and importlib.util.find_spec("sklearn"): + # calculates the graph: + # values of y more distant from 0 signal executions that differ from the mainstream behavior + x, y = locally_linear_embedding.apply(log) + + if importlib.util.find_spec("matplotlib") and importlib.util.find_spec("graphviz"): + from pm4py.visualization.graphs import visualizer + gviz = visualizer.apply(x, y, variant=visualizer.Variants.DATES, + parameters={"title": "Locally Linear Embedding", "format": examples_conf.TARGET_IMG_FORMAT, "y_axis": "Intensity"}) + visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/footprints_petri_net.py b/pm4py/examples/footprints_petri_net.py new file mode 100644 index 0000000000000000000000000000000000000000..4048cef2c69f1451b457ccf2193622d41a7e1010 --- /dev/null +++ b/pm4py/examples/footprints_petri_net.py @@ -0,0 +1,52 @@ +from pm4py.objects.log.importer.xes import importer +from pm4py.algo.filtering.log.variants import variants_filter +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.objects.conversion.process_tree import converter +from pm4py.algo.discovery.footprints import algorithm as footprints_discovery +from pm4py.algo.conformance.footprints import algorithm as footprints_conformance +import os +from examples import examples_conf +import importlib.util + + + +def execute_script(): + # import a log + log = importer.apply(os.path.join("..", "tests", "input_data", "receipt.xes")) + # found a filtered version of the log that is used to discover a process model + filtered_log = variants_filter.filter_log_variants_percentage(log, 0.2) + # discover a process tree using inductive miner + tree = inductive_miner.apply(filtered_log) + print(tree) + # apply the conversion of a process tree into a Petri net + net, im, fm = converter.apply(tree) + # Footprints discovery: discover a list of footprints + # for all the cases of the log + fp_log = footprints_discovery.apply(log) + # discover the footpritns from the process tree + fp_tree = footprints_discovery.apply(tree) + # discover the footpritns from the Petri net + fp_net = footprints_discovery.apply(net, im) + print(len(fp_tree["sequence"]), len(fp_tree["parallel"]), len(fp_net["sequence"]), len(fp_net["parallel"])) + print(fp_tree["sequence"] == fp_net["sequence"] and fp_tree["parallel"] == fp_net["parallel"]) + # apply the footprints conformance checking + conf = footprints_conformance.apply(fp_log, fp_net) + for trace_an in conf: + if trace_an: + # print the first anomalous trace (containing deviations + # that are contained in the trace but not allowed by the model) + print(trace_an) + break + # finds the footprints for the entire log (not case-by-case, but taking + # the relations that appear inside the entire log) + fp_log_entire = footprints_discovery.apply(log, variant=footprints_discovery.Variants.ENTIRE_EVENT_LOG) + + if importlib.util.find_spec("graphviz"): + # visualize the footprint table + from pm4py.visualization.footprints import visualizer as fp_visualizer + gviz = fp_visualizer.apply(fp_log_entire, fp_net, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + fp_visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/footprints_tree_conf.py b/pm4py/examples/footprints_tree_conf.py new file mode 100644 index 0000000000000000000000000000000000000000..46a9f3b37a242d0aada45a50683be39206fac30d --- /dev/null +++ b/pm4py/examples/footprints_tree_conf.py @@ -0,0 +1,65 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.discovery.footprints import algorithm as fp_discovery +from pm4py.algo.conformance.footprints import algorithm as fp_conformance +from pm4py.statistics.traces.generic.log import case_statistics +from pm4py.algo.discovery.dfg import algorithm as dfg_discovery +from pm4py.algo.filtering.log.paths import paths_filter +from pm4py.util.vis_utils import human_readable_stat +from pm4py.algo.filtering.log.variants import variants_filter +from pm4py.statistics.variants.log import get as variants_get +from examples import examples_conf +import os +import importlib.util + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "receipt.xes")) + throughput_time = case_statistics.get_median_case_duration(log) + variants, variants_times = variants_get.get_variants_along_with_case_durations(log) + dfg = dfg_discovery.apply(log) + filtered_log = variants_filter.filter_log_variants_percentage(log, 0.2) + # filtered_log = log + tree = inductive_miner.apply(filtered_log) + fp_log = fp_discovery.apply(log, variant=fp_discovery.Variants.ENTIRE_EVENT_LOG) + fp_model = fp_discovery.apply(tree) + conf = fp_conformance.apply(fp_log, fp_model) + conf_occ = sorted([(x, dfg[x]) for x in conf], key=lambda y: (y[1], y[0][0], y[0][1]), reverse=True) + print( + "source activity\t\ttarget activity\t\toccurrences\t\tthroughput time log\t\tthroughput time traces with path") + for i in range(min(10, len(conf_occ))): + path = conf_occ[i][0] + occ = conf_occ[i][1] + red_log = paths_filter.apply(log, [path]) + red_throughput_time = case_statistics.get_median_case_duration(red_log) + print("%s\t\t%s\t\t%d\t\t%s\t\t%s" % ( + path[0], path[1], occ, human_readable_stat(throughput_time), human_readable_stat(red_throughput_time))) + variants_length = sorted([(x, len(variants[x])) for x in variants.keys()], key=lambda y: (y[1], y[0]), reverse=True) + print("\nvariant\t\toccurrences\t\tthroughput time log\t\tthroughput time traces with path") + for i in range(min(10, len(variants_length))): + var = variants_length[i][0] + vark = str(var) + if len(vark) > 10: + vark = vark[:10] + occ = variants_length[i][1] + fp_log_var = fp_discovery.apply(variants[var], variant=fp_discovery.Variants.ENTIRE_EVENT_LOG) + conf_var = fp_conformance.apply(fp_log_var, fp_model) + is_fit = str(len(conf_var) == 0) + var_throughput = case_statistics.get_median_case_duration(variants[var]) + print("%s\t\t%d\t\t%s\t\t%s\t\t%s" % (vark, occ, is_fit, throughput_time, human_readable_stat(var_throughput))) + + + if importlib.util.find_spec("graphviz"): + from pm4py.algo.conformance.footprints.util import tree_visualization + from pm4py.visualization.process_tree import visualizer as pt_visualizer + # print(conf_occ) + conf_colors = tree_visualization.apply(tree, conf) + if True: + gviz = pt_visualizer.apply(tree, parameters={"format": examples_conf.TARGET_IMG_FORMAT, + pt_visualizer.Variants.WO_DECORATION.value.Parameters.COLOR_MAP: conf_colors, + pt_visualizer.Variants.WO_DECORATION.value.Parameters.ENABLE_DEEPCOPY: False}) + pt_visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/graphs_visualization.py b/pm4py/examples/graphs_visualization.py new file mode 100644 index 0000000000000000000000000000000000000000..8d4125d860b815cc049824f362d10174a2c383a1 --- /dev/null +++ b/pm4py/examples/graphs_visualization.py @@ -0,0 +1,20 @@ +import os + +import pm4py +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + + if importlib.util.find_spec("graphviz"): + # visualize case duration graph + pm4py.view_case_duration_graph(log, format=examples_conf.TARGET_IMG_FORMAT) + + # visualize events over time graph + pm4py.view_events_per_time_graph(log, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/heu_miner_test.py b/pm4py/examples/heu_miner_test.py new file mode 100644 index 0000000000000000000000000000000000000000..6eb52e51641b982d11496fb81fe652d6d8f48ad0 --- /dev/null +++ b/pm4py/examples/heu_miner_test.py @@ -0,0 +1,29 @@ +import os + +from pm4py.algo.discovery.heuristics import algorithm as heuristics_miner +from pm4py.objects.log.importer.xes import importer as xes_importer +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "compressed_input_data", "09_a32f0n00.xes.gz")) + heu_net = heuristics_miner.apply_heu(log, parameters={ + heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.99}) + + if importlib.util.find_spec("pydotplus") and importlib.util.find_spec("graphviz"): + from pm4py.visualization.heuristics_net import visualizer as hn_vis + gviz = hn_vis.apply(heu_net, parameters={hn_vis.Variants.PYDOTPLUS.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + hn_vis.view(gviz) + + net, im, fm = heuristics_miner.apply(log, parameters={ + heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.99}) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer as petri_vis + gviz2 = petri_vis.apply(net, im, fm, parameters={petri_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + petri_vis.view(gviz2) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/heuminer_plusplus.py b/pm4py/examples/heuminer_plusplus.py new file mode 100644 index 0000000000000000000000000000000000000000..aef932c8530321c3665d16429456d535ccc8a7ac --- /dev/null +++ b/pm4py/examples/heuminer_plusplus.py @@ -0,0 +1,35 @@ +import pm4py +from pm4py.algo.discovery.heuristics.variants import plusplus +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils +from examples import examples_conf +import importlib.util + + +def execute_script(): + df = pandas_utils.read_csv("../tests/input_data/interval_event_log.csv") + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["start_timestamp", "time:timestamp"]) + log = pm4py.read_xes("../tests/input_data/interval_event_log.xes") + heu_net = plusplus.apply_heu(log, parameters={"heu_net_decoration": "performance"}) + heu_net_2 = plusplus.apply_heu_pandas(df, parameters={"heu_net_decoration": "performance"}) + + if importlib.util.find_spec("pydotplus") and importlib.util.find_spec("graphviz"): + from pm4py.visualization.heuristics_net import visualizer + gviz = visualizer.apply(heu_net, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + visualizer.view(gviz) + gviz2 = visualizer.apply(heu_net_2, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + visualizer.view(gviz2) + + net1, im1, fm1 = plusplus.apply(log) + net2, im2, fm2 = plusplus.apply(log) + + if importlib.util.find_spec("pydotplus") and importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer as pn_visualizer + gviz3 = pn_visualizer.apply(net1, im1, fm1, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + pn_visualizer.view(gviz3) + gviz4 = pn_visualizer.apply(net2, im2, fm2, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + pn_visualizer.view(gviz4) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/hybrid_ilp_miner.py b/pm4py/examples/hybrid_ilp_miner.py new file mode 100644 index 0000000000000000000000000000000000000000..fa70f568c683a6222e716f25243c2f3886337215 --- /dev/null +++ b/pm4py/examples/hybrid_ilp_miner.py @@ -0,0 +1,17 @@ +import pm4py +import os +from examples import examples_conf +import importlib.util + + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes")) + net, im, fm = pm4py.discover_petri_net_ilp(log) + + if importlib.util.find_spec("graphviz"): + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/im_example.py b/pm4py/examples/im_example.py new file mode 100644 index 0000000000000000000000000000000000000000..b957793128304cb30c5750d256d8dde8564cc19a --- /dev/null +++ b/pm4py/examples/im_example.py @@ -0,0 +1,59 @@ +import os +import traceback + +import pm4py +from pm4py.algo.discovery.inductive import algorithm as inductive +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +from examples import examples_conf +import importlib.util + + +def execute_script(): + log_path = os.path.join("..", "tests", "input_data", "running-example.xes") + + log = xes_importer.apply(log_path) + process_tree = inductive.apply(log) + net, marking, final_marking = process_tree_converter.apply(process_tree) + for place in marking: + print("initial marking " + place.name) + for place in final_marking: + print("final marking " + place.name) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer as pn_vis + gviz = pn_vis.apply(net, marking, final_marking, + parameters={pn_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT, + pn_vis.Variants.WO_DECORATION.value.Parameters.DEBUG: True}) + pn_vis.view(gviz) + + if True: + fit_traces = [] + + for i in range(0, len(log)): + try: + print("\n", i, [x["concept:name"] for x in log[i]]) + cf_result = pm4py.algo.conformance.alignments.petri_net.variants.state_equation_a_star.apply(log[i], net, marking, + final_marking)[ + 'alignment'] + if cf_result is None: + print("alignment is none!") + else: + is_fit = True + for couple in cf_result: + print(couple) + if not (couple[0] == couple[1] or couple[0] == ">>" and couple[1] is None): + is_fit = False + print("isFit = " + str(is_fit)) + + if is_fit: + fit_traces.append(log[i]) + except TypeError: + print("EXCEPTION ", i) + traceback.print_exc() + print(fit_traces) + print(len(fit_traces)) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/inductive_miner.py b/pm4py/examples/inductive_miner.py new file mode 100644 index 0000000000000000000000000000000000000000..a46eb2c033c31e28d680a0ba77246f7d23a8b77c --- /dev/null +++ b/pm4py/examples/inductive_miner.py @@ -0,0 +1,22 @@ +import pm4py +import os +from examples import examples_conf +import importlib.util + + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes")) + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.2) + + if importlib.util.find_spec("graphviz"): + pm4py.view_process_tree(tree, format=examples_conf.TARGET_IMG_FORMAT) + + net, im, fm = pm4py.convert_to_petri_net(tree) + + if importlib.util.find_spec("graphviz"): + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/inductive_miner_dfg.py b/pm4py/examples/inductive_miner_dfg.py new file mode 100644 index 0000000000000000000000000000000000000000..2e0d5dcb1fd8ab11be46b8922839e96be98e2363 --- /dev/null +++ b/pm4py/examples/inductive_miner_dfg.py @@ -0,0 +1,24 @@ +import pm4py +import os +from pm4py.objects.dfg.obj import DFG +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes"), return_legacy_log_object=False) + typed_dfg_1 = pm4py.discover_dfg_typed(log) + # in alternative ... + dfg, sa, ea = pm4py.discover_dfg(log) + typed_dfg_2 = DFG(dfg, sa, ea) + + tree = pm4py.discover_process_tree_inductive(typed_dfg_2, noise_threshold=0.2) + net, im, fm = pm4py.convert_to_petri_net(tree) + + if importlib.util.find_spec("graphviz"): + pm4py.view_process_tree(tree, format=examples_conf.TARGET_IMG_FORMAT) + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/inductive_miner_dfg_lc.py b/pm4py/examples/inductive_miner_dfg_lc.py new file mode 100644 index 0000000000000000000000000000000000000000..c47e635c2acdc7bc872fc41a25f7b156d048b3a5 --- /dev/null +++ b/pm4py/examples/inductive_miner_dfg_lc.py @@ -0,0 +1,54 @@ +import pm4py +import os +from collections import Counter +from pm4py.objects.dfg.obj import DFG +from pm4py.algo.discovery.inductive.variants.imd import IMD +from pm4py.algo.discovery.inductive.dtypes.im_dfg import InductiveDFG +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureDFG + + +def __build_dfg_lc(log, act_key, start_timestamp, complete_timestamp): + dfg = Counter() + start_activities = Counter() + end_activities = Counter() + for trace in log: + if trace: + start_activities[trace[0][act_key]] += 1 + i = 0 + max_ct_idx = 0 + while i < len(trace): + ct = trace[i][complete_timestamp] + if ct > trace[max_ct_idx][complete_timestamp]: + max_ct_idx = i + j = i + 1 + while j < len(trace): + st = trace[j][start_timestamp] + dfg[(trace[i][act_key], trace[j][act_key])] += 1 + if st >= ct: + break + else: + dfg[(trace[j][act_key], trace[i][act_key])] += 1 + j = j + 1 + i = i + 1 + end_activities[trace[max_ct_idx][act_key]] += 1 + + return DFG(dfg, start_activities, end_activities) + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "interval_event_log.xes"), return_legacy_log_object=True) + + process_tree0 = pm4py.discover_process_tree_inductive(log) + print(process_tree0) + + dfg = __build_dfg_lc(log, "concept:name", "start_timestamp", "time:timestamp") + + imd = IMD({}) + idfg = InductiveDFG(dfg=dfg, skip=False) + process_tree = imd.apply(IMDataStructureDFG(idfg), {}) + + print(process_tree) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/inductive_miner_variants.py b/pm4py/examples/inductive_miner_variants.py new file mode 100644 index 0000000000000000000000000000000000000000..7a7767ef724e94e6fe52e08d2e7d0ce074aa4983 --- /dev/null +++ b/pm4py/examples/inductive_miner_variants.py @@ -0,0 +1,29 @@ +import pm4py +import os +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.util.compression.dtypes import UVCL +from pm4py.algo.discovery.inductive.variants.imf import IMFUVCL +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes"), return_legacy_log_object=False) + variants = pm4py.get_variants(log) + uvcl = UVCL() + for var, occ in variants.items(): + uvcl[var] = occ + parameters = {"noise_threshold": 0.2} + imfuvcl = IMFUVCL(parameters) + + tree = imfuvcl.apply(IMDataStructureUVCL(uvcl), parameters=parameters) + net, im, fm = pm4py.convert_to_petri_net(tree) + + if importlib.util.find_spec("graphviz"): + pm4py.view_process_tree(tree, format=examples_conf.TARGET_IMG_FORMAT) + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/inhibitor_reset_arcs.py b/pm4py/examples/inhibitor_reset_arcs.py new file mode 100644 index 0000000000000000000000000000000000000000..1e6e4c25645305c44650b92a3481b54002e86944 --- /dev/null +++ b/pm4py/examples/inhibitor_reset_arcs.py @@ -0,0 +1,72 @@ +import pm4py +from pm4py.objects.petri_net.obj import ResetInhibitorNet, Marking +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to +from pm4py.objects.petri_net.inhibitor_reset import semantics +from copy import deepcopy +from examples import examples_conf +import importlib.util + + +def execute_script(): + net = ResetInhibitorNet("") + source = ResetInhibitorNet.Place("source") + sink = ResetInhibitorNet.Place("sink") + p1 = ResetInhibitorNet.Place("p1") + p2 = ResetInhibitorNet.Place("p2") + p_inhibitor = ResetInhibitorNet.Place("p_inhibitor") + p_reset = ResetInhibitorNet.Place("p_reset") + trans_A = ResetInhibitorNet.Transition("A", "A") + trans_B = ResetInhibitorNet.Transition("B", "B") + trans_C = ResetInhibitorNet.Transition("C", "C") + trans_inhibitor = ResetInhibitorNet.Transition("inhibitor", None) + trans_free = ResetInhibitorNet.Transition("free", None) + net.places.add(source) + net.places.add(sink) + net.places.add(p1) + net.places.add(p2) + net.places.add(p_inhibitor) + net.places.add(p_reset) + net.transitions.add(trans_A) + net.transitions.add(trans_B) + net.transitions.add(trans_C) + net.transitions.add(trans_free) + net.transitions.add(trans_inhibitor) + add_arc_from_to(source, trans_A, net) + add_arc_from_to(trans_A, p1, net) + add_arc_from_to(p1, trans_B, net) + add_arc_from_to(trans_B, p2, net) + add_arc_from_to(p2, trans_C, net) + add_arc_from_to(trans_C, sink, net) + add_arc_from_to(trans_inhibitor, p_inhibitor, net) + inhibitor_arc = add_arc_from_to(p_inhibitor, trans_B, net, type="inhibitor") + add_arc_from_to(trans_free, p_reset, net) + reset_arc = add_arc_from_to(p_reset, trans_C, net, type="reset") + im = Marking({source: 1}) + fm = Marking({sink: 1}) + + if importlib.util.find_spec("graphviz"): + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + m = semantics.execute(trans_A, net, im) + print(m) + # B is enabled in m because no tokens in the "inhibitor" place + print(semantics.enabled_transitions(net, m)) + # if we put a token in the inhibitor place, B is not enabled anymore + m2 = deepcopy(m) + m2[p_inhibitor] = 1 + print(semantics.enabled_transitions(net, m2)) + # let's continue with m and fire B, and three times the "free" transition + m = semantics.execute(trans_B, net, m) + m = semantics.execute(trans_free, net, m) + m = semantics.execute(trans_free, net, m) + m = semantics.execute(trans_free, net, m) + # we have three tokens in the 'reset' place. Firing C, all of them are removed because of the reset arc + print(m) + m = semantics.execute(trans_C, net, m) + print(m) + print(m == fm) + # sink reached :) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/interval_events_overlap.py b/pm4py/examples/interval_events_overlap.py new file mode 100644 index 0000000000000000000000000000000000000000..e6c12575eac892b7d0bd7b15bf5d6d35531d5623 --- /dev/null +++ b/pm4py/examples/interval_events_overlap.py @@ -0,0 +1,18 @@ +import pm4py +from pm4py.statistics.overlap.interval_events.log import get as interval_events_overlap +import os + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "interval_event_log.xes")) + # gets the overlap of each interval event with the other events of the log + overlap = interval_events_overlap.apply(log, parameters={ + interval_events_overlap.Parameters.START_TIMESTAMP_KEY: "start_timestamp"}) + # print the overlap for all the events + print(overlap) + # print the number of intersections of the event having max overlap + print(max(overlap)) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/kneighb_regression.py b/pm4py/examples/kneighb_regression.py new file mode 100644 index 0000000000000000000000000000000000000000..90150ee933cf3798d19ba05b8e81a534ed1a0bd5 --- /dev/null +++ b/pm4py/examples/kneighb_regression.py @@ -0,0 +1,47 @@ +import pm4py +from pm4py.algo.transformation.log_to_features import algorithm +import random +import numpy as np +from pm4py.util import ml_utils + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes", return_legacy_log_object=True) + + # train a predictor of the throughput timebased on the attributes at the case level (known at the beginning of the case) + + data, feature_names = algorithm.apply(log, + parameters={"str_tr_attr": ["channel", "group", "responsible", "department"], + "str_ev_attr": [], "num_tr_attr": [], "num_ev_attr": [], + "str_evsucc_attr": []}) + data = [np.array(x) for x in data] + + throughput_time = [y[-1]["time:timestamp"].timestamp() - y[0]["time:timestamp"].timestamp() for y in log] + + # split the cases in training and test + + available_cases = [i for i in range(len(log))] + training_cases = set(random.sample(available_cases, 500)) + data_training = [data[i] for i in range(len(log)) if i in training_cases] + data_training = np.array(data_training) + + throughput_time_training = [throughput_time[i] for i in range(len(log)) if i in training_cases] + + # train the regressor + + regressor = ml_utils.KNeighborsRegressor(n_neighbors=3) + regressor.fit(data_training, throughput_time_training) + + data_validation = [data[i] for i in range(len(log)) if i not in training_cases] + throughput_time_validation = [throughput_time[i] for i in range(len(log)) if i not in training_cases] + + # apply the predictor on the validation dataset and compare it with the actual throughput time + predicted_throughput_time = regressor.predict(data_validation) + + for i in range(len(throughput_time_validation)): + print("case actual throughput=", throughput_time_validation[i], " predicted throughput = ", + predicted_throughput_time[i]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/label_splitting.py b/pm4py/examples/label_splitting.py new file mode 100644 index 0000000000000000000000000000000000000000..ea3b839afef2923cf969a99fc603392d7511fcc3 --- /dev/null +++ b/pm4py/examples/label_splitting.py @@ -0,0 +1,22 @@ +import pm4py +from pm4py.algo.label_splitting import algorithm as label_splitter + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes") + log = log[["case:concept:name", "concept:name", "time:timestamp"]] + + # relabeling with the default options + rlog1 = label_splitter.apply(log, variant=label_splitter.Variants.CONTEXTUAL) + print(rlog1) + + # relabeling with a single activity allowed in the prefix and suffix, + # plus the relabeling only applies to a given activity + rlog2 = label_splitter.apply(log, variant=label_splitter.Variants.CONTEXTUAL, + parameters={"prefix_length": 1, "suffix_length": 1, + "target_activities": ["Confirmation of receipt"]}) + print(rlog2) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/link_analysis_vbfa.py b/pm4py/examples/link_analysis_vbfa.py new file mode 100644 index 0000000000000000000000000000000000000000..9c65df34eaa4e93055ecccdc99c8e1d237824770 --- /dev/null +++ b/pm4py/examples/link_analysis_vbfa.py @@ -0,0 +1,26 @@ +from pm4py.util import constants, pandas_utils +from pm4py.algo.discovery.ocel.link_analysis import algorithm as link_analysis +from pm4py.objects.log.util import dataframe_utils +import os + + +def execute_script(): + dataframe = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "ocel", "VBFA.zip"), compression="zip", dtype="str") + dataframe["time:timestamp"] = dataframe["ERDAT"] + " " + dataframe["ERZET"] + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format="%Y%m%d %H%M%S", timest_columns=["time:timestamp"]) + dataframe["RFWRT"] = dataframe["RFWRT"].astype(float) + dataframe = link_analysis.apply(dataframe, parameters={"out_column": "VBELN", "in_column": "VBELV", + "sorting_column": "time:timestamp", "propagate": True}) + + # finds the connected documents in which the currency in one document is different from the currency in the connected document. + df_currency = dataframe[(dataframe["WAERS_out"] != " ") & (dataframe["WAERS_in"] != " ") & ( + dataframe["WAERS_out"] != dataframe["WAERS_in"])] + print(df_currency[["WAERS_out", "WAERS_in"]].value_counts()) + + # finds the connected documents in which the amount in one document is lower than the amount in the connected document. + df_amount = dataframe[(dataframe["RFWRT_out"] > 0) & (dataframe["RFWRT_out"] < dataframe["RFWRT_in"])] + print(df_amount[["RFWRT_out", "RFWRT_in"]]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/llm/01_1_protected_group_identification.py b/pm4py/examples/llm/01_1_protected_group_identification.py new file mode 100644 index 0000000000000000000000000000000000000000..7bab2fad6d095425a24877cf5552283e326eff57 --- /dev/null +++ b/pm4py/examples/llm/01_1_protected_group_identification.py @@ -0,0 +1,23 @@ +import pm4py +import os + + +def execute_script(): + """ + Prompt asking to the LLM to generate a SQL query that, given the attributes of the event log, + identifies the cases with higher risk of discrimination ("protected" group). + """ + dataframe = pm4py.read_xes("../../tests/input_data/fairness/renting_log_high.xes.gz") + dataframe = dataframe[[x for x in dataframe.columns if 'protected' not in x]] + print(dataframe) + print(dataframe.columns) + prompt = "Given an event log describing a process with the following directly-follows graph:\n\n" + prompt += pm4py.llm.abstract_dfg(dataframe, max_len=5000, response_header=False) + prompt += "\n\nand the following attributes:\n\n" + prompt += pm4py.llm.abstract_log_attributes(dataframe, max_len=5000) + prompt += "\n\nCould you make an hypothesis and provide me a DuckDB SQL query that I can execute to filter the dataframe on the cases in which unfairness is likely to happen? It can be an OR query (several different conditions could signal unfairness) The dataframe is called 'dataframe'. Please only a single query. The single query should only look at the case attributes, not the activities in a case. Quote the names of the attributes with a \" at start and at the end." + print(prompt) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/llm/01_2_protected_group_query.py b/pm4py/examples/llm/01_2_protected_group_query.py new file mode 100644 index 0000000000000000000000000000000000000000..41fef39e228332a64d1d40760b76fb54733fd0d0 --- /dev/null +++ b/pm4py/examples/llm/01_2_protected_group_query.py @@ -0,0 +1,40 @@ +import pm4py +import os +import duckdb + + +def execute_script(): + """ + Scripts to check the query provided (in the script 01_1_...) for the "protected" + group against the ground truth (that for the logs included in pm4py is reported in the log) + and measure the quality of the classification. + """ + dataframe = pm4py.read_xes("../../tests/input_data/fairness/renting_log_high.xes.gz") + protected_attr = [x for x in dataframe.columns if "protected" in x][0] + + sql_query = """ +SELECT * FROM dataframe +WHERE "case:citizen" = 'False' +OR "case:gender" = 'True' +OR "case:german speaking" = 'False' +OR "case:married" = 'False'; + """ + dataframe_pos = duckdb.sql(sql_query).to_df() + cases_pos = dataframe_pos["case:concept:name"].unique() + dataframe_neg = dataframe[~dataframe["case:concept:name"].isin(cases_pos)] + + dataframe_pos = dataframe_pos.groupby("case:concept:name").first() + dataframe_neg = dataframe_neg.groupby("case:concept:name").last() + + tp = len(dataframe_pos[dataframe_pos[protected_attr] == True]) + fp = len(dataframe_pos[dataframe_pos[protected_attr] == False]) + print("true positives", tp) + print("false positives", fp) + fn = len(dataframe_neg[dataframe_neg[protected_attr] == True]) + tn = len(dataframe_neg[dataframe_neg[protected_attr] == False]) + print("false negatives", fn) + print("true negatives", tn) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/llm/02_group_fairness_factors.py b/pm4py/examples/llm/02_group_fairness_factors.py new file mode 100644 index 0000000000000000000000000000000000000000..c1caed234c822aa3c181dbdac8832c670d147dc4 --- /dev/null +++ b/pm4py/examples/llm/02_group_fairness_factors.py @@ -0,0 +1,29 @@ +import pm4py +import os + + +def execute_script(): + """ + Script that, given the process variants of the "protected" and "non-protected" groups, + generates a (first) prompt asking to the LLM which are the procedural differences between the two groups. + The second prompt works on the output of the first prompt, and generates a SQL query isolating the + paths or the process variants that lead to discrimination. + """ + dataframe = pm4py.read_xes("../../tests/input_data/fairness/renting_log_high.xes.gz") + protected_attr = [x for x in dataframe.columns if "protected" in x][0] + dataframe_prot = dataframe[dataframe[protected_attr] == True] + dataframe_unprot = dataframe[dataframe[protected_attr] == False] + prompt = "I want to identify the unfair differences between the treatment of the 'protected' group (first) and the 'unprotected' group (second). I report the process variants. Each process variant is also reported with its execution time." + prompt += "\n\nProcess variants of the protected group:" + prompt += pm4py.llm.abstract_variants(dataframe_prot, max_len=5000) + prompt += "\n\nProcess variants of the unprotected group:" + prompt += pm4py.llm.abstract_variants(dataframe_unprot, max_len=5000) + prompt += "\n\nwhich are the main differences? use your domain knowledge." + print(prompt) + input() + prompt = "Perfect. Now please provide me a single DuckDB SQL query to filter the dataframe to such variants that are critical for fairness. More in detail, the data is stored in a Pandas dataframe where each row is an event having the provided attributes (so there are no separate table containing the variant). Please consider the following information: the case identifier is called 'case:concept:name', the activity is stored inside the attribute 'concept:name', the timestamp is stored inside the attribute 'time:timestamp', the resource is stored inside the attribute 'org:resource', there is not a variant column but that can be obtained as concatenation of the activities of a case, there is not a duration column but that can be obtained as difference between the timestamp of the first and the last event. Also, the dataframe is called 'dataframe'. You should use the EPOCH function of DuckDB to get the timestamp from the date. Note that I want the original dataframe with its rows and columns back (so add the variant column on the original dataframe and filter on that). Please filter on a comprehensive list of unfair variants, use several messages if necessary." + print(prompt) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/llm/03_case_procedural.py b/pm4py/examples/llm/03_case_procedural.py new file mode 100644 index 0000000000000000000000000000000000000000..cb440d055b6d971cfcdc38ae89df2ace1afe4b49 --- /dev/null +++ b/pm4py/examples/llm/03_case_procedural.py @@ -0,0 +1,67 @@ +import pm4py +import os +import duckdb + + +def execute_script(): + """ + Measures the quality of the SQL query provided in 02_... + to isolate the procedural behavior leading to discrimination, + and assess the quality of the classification against the ground truth written in the log. + """ + dataframe = pm4py.read_xes("../../tests/input_data/fairness/renting_log_high.xes.gz") + protected_attr = [x for x in dataframe.columns if "protected" in x][0] + + sql_query = """ +WITH cases AS ( + SELECT + "case:concept:name", + STRING_AGG("concept:name", ' -> ') OVER (PARTITION BY "case:concept:name" ORDER BY "time:timestamp") AS variant + FROM + dataframe +), +filtered_cases AS ( + SELECT + "case:concept:name" + FROM + cases + WHERE variant IN ( + 'Request Appointment -> Set Appointment -> Hand In Credit Appliaction -> Verify Borrowers Information -> Submit File to Underwriter -> Loan Denied', + 'Request Appointment -> Set Appointment -> Hand In Credit Appliaction -> Verify Borrowers Information -> Application Rejected', + 'Request Appointment -> Appointment Denied', + 'Request Appointment -> Set Appointment -> Hand In Credit Appliaction -> Verify Borrowers Information -> Request Co-Signer On Loan -> Submit File to Underwriter -> Loan Denied', + 'Request Appointment -> Set Appointment -> Hand In Credit Appliaction -> Verify Borrowers Information -> Make Visit to Assess Colatteral -> Submit File to Underwriter -> Loan Denied', + 'Request Appointment -> Set Appointment -> Hand In Credit Appliaction -> Verify Borrowers Information -> Make Visit to Assess Colatteral -> Submit File to Underwriter -> Sign Loan Agreement' +) + GROUP BY + "case:concept:name" +) +SELECT + df.*, + cases.variant +FROM + dataframe AS df +JOIN + filtered_cases ON df."case:concept:name" = filtered_cases."case:concept:name" +JOIN + cases ON df."case:concept:name" = cases."case:concept:name" + """ + dataframe_pos = duckdb.sql(sql_query).to_df() + cases_pos = dataframe_pos["case:concept:name"].unique() + dataframe_neg = dataframe[~dataframe["case:concept:name"].isin(cases_pos)] + + dataframe_pos = dataframe_pos.groupby("case:concept:name").first() + dataframe_neg = dataframe_neg.groupby("case:concept:name").last() + + tp = len(dataframe_pos[dataframe_pos[protected_attr] == True]) + fp = len(dataframe_pos[dataframe_pos[protected_attr] == False]) + print("true positives", tp) + print("false positives", fp) + fn = len(dataframe_neg[dataframe_neg[protected_attr] == True]) + tn = len(dataframe_neg[dataframe_neg[protected_attr] == False]) + print("false negatives", fn) + print("true negatives", tn) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/llm/04_hypothesis_generation.py b/pm4py/examples/llm/04_hypothesis_generation.py new file mode 100644 index 0000000000000000000000000000000000000000..f99ab5894c4a55602eb3d1b7a30423879b4dbfcf --- /dev/null +++ b/pm4py/examples/llm/04_hypothesis_generation.py @@ -0,0 +1,33 @@ +import pm4py + + +def execute_script(): + """ + Generates some hypothesis for the analysis of an event log starting + from the process variants and log attributes abstraction of the event log. + The hypothesis shall come with a DuckDB SQL query that can be verified against the dataframe + """ + log = pm4py.read_xes("../../tests/input_data/roadtraffic100traces.xes") + prompt = [] + prompt.append("\n\nIf I have the following process variants:\n") + prompt.append(pm4py.llm.abstract_variants(log, max_len=3000, response_header=False)) + prompt.append("\n\nand attributes in the log:\n") + prompt.append(pm4py.llm.abstract_log_attributes(log, max_len=3000)) + prompt.append("\n\n") + prompt.append("can you formulate some hypothesis on the given process?\n") + prompt.append("please also formulate for every hypothesis a SQL query.\n") + prompt.append("\n\n") + prompt.append("Can you provide me a DuckDB SQL query.\n") + prompt.append("You should use the EPOCH function of DuckDB to get the timestamp from the date.\n") + prompt.append("The data is stored in a Pandas dataframe where each row is an event having the provided attributes (so there are no separate table containing the variant).\n") + prompt.append('The dataframe is called "dataframe".\n') + prompt.append('Please consider the following information: the case identifier is called "case:concept:name", the activity is stored inside the attribute "concept:name", the timestamp is stored inside the attribute "time:timestamp", the resource is stored inside the attribute "org:resource".\n') + prompt.append('There is not a variant column but that can be obtained as concatenation of the activities of a case.\n') + prompt.append('There is not a duration column but that can be obtained as difference between the timestamp of the first and the last event.\n') + prompt.append("\n\n") + prompt = "".join(prompt) + print(prompt) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/llm/PET/doc-1.1 b/pm4py/examples/llm/PET/doc-1.1 new file mode 100644 index 0000000000000000000000000000000000000000..ca1e6f794e078cff934f8bdc54a06bda2feb81a3 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-1.1 @@ -0,0 +1,23 @@ +A small company manufactures customized bicycles. + +Whenever the sales department receives an order , a new process instance is created. + +A member of the sales department can then reject or accept the order for a customized bike. + +In the former case , the process instance is finished. + +In the latter case , the storehouse and the engineering department are informed. + +The storehouse immediately processes the part list of the order and checks the required quantity of each part. + +If the part is available in-house , it is reserved. + +If it is not available , it is back-ordered. + +This procedure is repeated for each item on the part list. + +In the meantime , the engineering department prepares everything for the assembling of the ordered bicycle. + +If the storehouse has successfully reserved or back-ordered every item of the part list and the preparation activity has finished , the engineering department assembles the bicycle. + +Afterwards , the sales department ships the bicycle to the customer and finishes the process instance . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-1.2 b/pm4py/examples/llm/PET/doc-1.2 new file mode 100644 index 0000000000000000000000000000000000000000..7d515d93bf749aa3d50f38741a58b57097ac91d6 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-1.2 @@ -0,0 +1,11 @@ +A customer brings in a defective computer and the CRS checks the defect and hands out a repair cost calculation back. + +If the customer decides that the costs are acceptable , the process continues , otherwise she takes her computer home unrepaired. + +The ongoing repair consists of two activities , which are executed , in an arbitrary order. + +The first activity is to check and repair the hardware , whereas the second activity checks and configures the software. + +After each of these activities , the proper system functionality is tested. + +If an error is detected another arbitrary repair activity is executed , otherwise the repair is finished . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-1.3 b/pm4py/examples/llm/PET/doc-1.3 new file mode 100644 index 0000000000000000000000000000000000000000..0b15218fea08785a221a5a8345be0f64799483b7 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-1.3 @@ -0,0 +1,25 @@ +The Evanstonian is an upscale independent hotel. + +When a guest calls room service at The Evanstonian , the room-service manager takes down the order. + +She then submits an order ticket to the kitchen to begin preparing the food. + +She also gives an order to the sommelier ( i.e. + +, the wine waiter ) to fetch wine from the cellar and to prepare any other alcoholic beverages. + +Eighty percent of room-service orders include wine or some other alcoholic beverage. + +Finally , she assigns the order to the waiter. + +While the kitchen and the sommelier are doing their tasks , the waiter readies a cart ( i.e. + +, puts a tablecloth on the cart and gathers silverware ). + +The waiter is also responsible for nonalcoholic drinks. + +Once the food , wine , and cart are ready , the waiter delivers it to the guest s room. + +After returning to the room-service station , the waiter debits the guest s account. + +The waiter may wait to do the billing if he has another order to prepare or deliver . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-1.4 b/pm4py/examples/llm/PET/doc-1.4 new file mode 100644 index 0000000000000000000000000000000000000000..09f803c003f71bec5cba677a502886045291de13 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-1.4 @@ -0,0 +1,21 @@ +Whenever a company makes the decision to go public , its first task is to select the underwriters. + +Underwriters act as financial midwives to a new issue. + +Usually they play a triple role : First they provide the company with procedural and financial advice , then they buy the issue , and finally they resell it to the public. + +Established underwriters are careful of their reputation and will not handle a new issue unless they believe the facts have been presented fairly. + +Thus , in addition to handling the sale of a company s issue , the underwriters in effect give their seal of approval to it. + +They prepare a registration statement for the approval of the Securities and Exchange Commission ( SEC ). + +In addition to registering the issue with the SEC , they need to check that the issue complies with the so-called blue-sky laws of each state that regulate sales of securities within the state. + +While the registration statement is awaiting approval , underwriters begin to firm up the issue price. + +They arrange a road show to talk to potential investors. + +Immediately after they receive clearance from the SEC , underwriters fix the issue price. + +After that they enter into a firm commitment to buy the stock and then offer it to the public , when they haven t still found any reason not to do it . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.1 b/pm4py/examples/llm/PET/doc-10.1 new file mode 100644 index 0000000000000000000000000000000000000000..d5a965a44f62a29ce864119ec48650f1f57fde28 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.1 @@ -0,0 +1,5 @@ +The MPON sents the dismissal to the MPOO. + +The MPOO reviews the dismissal. + +The MPOO opposes the dismissal of MPON or the MPOO confirmes the dismissal of the MPON . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.10 b/pm4py/examples/llm/PET/doc-10.10 new file mode 100644 index 0000000000000000000000000000000000000000..5f10a5b768a574c5f4a9af483b99cb4e89121911 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.10 @@ -0,0 +1,15 @@ +The fault detector reports a failure to the MPO or MPO has a suspicion of their own fault. + +The MPO shall examine the failure. + +The MPO rejects the failure of the fault detector or the MPO confirms the failure of the fault detector. + +If the MPO confirms the failure of the fault detector , he informes the GO and the MSP. + +The MPO fixes the fault at the measuring device. + +The MPO shares the results of the repairs carried out with the fault detector. + +The MPO will inform the GO about the resolution of the interference. + +The MPO will inform the MSP about the resolution of the interference . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.11 b/pm4py/examples/llm/PET/doc-10.11 new file mode 100644 index 0000000000000000000000000000000000000000..ba391be0cce57029683114139cfbb10d743f7254 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.11 @@ -0,0 +1,13 @@ +The GO requests the measurements to the MSP. + +The MSP checks the received request. + +The MSP denies the request of the GO or the MSP performs the measurement. + +The MSP informs the GO about the failure of the reading or the MSP transmits the measured values to the GO. + +The GO processes the measured values. + +The GO sends the changed values to the MSP. + +The GO transmit the readings to the SP . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.12 b/pm4py/examples/llm/PET/doc-10.12 new file mode 100644 index 0000000000000000000000000000000000000000..0af5570323096b8e317ded065c174938eceacacf --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.12 @@ -0,0 +1,7 @@ +The EC tells the INQ about the change of his master data. + +The INQ notifies the IP of the change. + +The IP checks whether the master data can be changed at the desired time. + +The IP confirmes the changes of the INQ or the IP rejectes the changes of the INQ . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.13 b/pm4py/examples/llm/PET/doc-10.13 new file mode 100644 index 0000000000000000000000000000000000000000..617b0014140532668e1f9a8778afc2139f12d0aa --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.13 @@ -0,0 +1,7 @@ +The INQ transmits the transaction data request to the IP. + +The IP checks the request of the INQ. + +The IP answers the question of the INQ depending on the outcome of the examination , i.e. + +Transmission of data or rejection . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.14 b/pm4py/examples/llm/PET/doc-10.14 new file mode 100644 index 0000000000000000000000000000000000000000..30f1c99b0c44a05b01d345ac9ac5fb9f0a3e41b7 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.14 @@ -0,0 +1,9 @@ +If the MPOO sends the bill for the temporary continuation of the metering point operations to the GO , the GO examines the bill. + +If the MSPO sends the bill for the temporary continuation of the measurement to the GO , the GO examines the bill. + +If the MSPO sends the bill for additional readings to the GO , the GO examines the bill. + +If the MPOO sends the bill for the equipment acquisition to the MPON or the GO , the MPON or the GO examines the bill. + +The GO or the MPON confirms the invoice with payment advice to the MPOO or the MSPO , or the GO or the MPON rejects the invoice of the MPOO or the MSPO . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.2 b/pm4py/examples/llm/PET/doc-10.2 new file mode 100644 index 0000000000000000000000000000000000000000..ea4e5af800179295d73fbbded114ce007ad726f9 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.2 @@ -0,0 +1,27 @@ +The MPON reports the meter operation to the GO. + +The GO examines the application of the MPON. + +The GO rejects the application of the MPON or the GO confirmes the application of the MPON. + +The GO informs the MPOO about the registration confirmation of the MPON. + +The GO informs the MSPO about the registration confirmation of the MPON. + +The MPON and the MPOO perform the equipment acquisition and / or equipment changes. + +The MPON informs the GO about the failure of the entire process or the MPON informs the GO about the successful completion of the entire process. + +The GO informs the MPON about the failure of the overall transaction by deadline if after a maximum time limit no message of the MPON is present at the GO. + +If the MPON informs the GO about the failure of the entire process , the GO confirms the failure of the assignment to the MPON. + +If the MPON informs the GO about the successful completion of the overall process , the GO assigns the MPON. + +The GO confirms the assignment to the MPON. + +The GO informs the MPOO about the failure of the assignment of the MPON or the GO informs the MPOO about the assignment of the MPON. + +The GO informs the MSPO about the failure of the assignment of the MPON or the GO informs the MSPO about the assignment of the MPON. + +The GO informs the SP about the assignment of the MPON . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.3 b/pm4py/examples/llm/PET/doc-10.3 new file mode 100644 index 0000000000000000000000000000000000000000..75f540d8b1644529ce1a8267eaa9b96817fbec5d --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.3 @@ -0,0 +1,21 @@ +The MPOO deregisters at the GO. + +The GO verifies the deregistration. + +The GO rejects the deregistration of the MPOO or the GO preliminarily confirms the deregistration of the MPOO. + +The GO prepares the readmission of the measuring point. + +Optionally , the GO may oblige the MPOO to continue the operations. + +If the GO binds the MPOO to continue the operation , the MPOO confirmes the continuation to the MPOO. + +The GO performs the equipment acquisition and / or equipment changes. + +The GO assigns the GO as MPO. + +The GO informs the MPOO about the end of the assignment of the MPOO and the beginning of the assignment of the GO. + +The GO informs the MSPO about the assignment of the GO. + +The GO informs the SP about the assignment of the GO . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.4 b/pm4py/examples/llm/PET/doc-10.4 new file mode 100644 index 0000000000000000000000000000000000000000..d20303d1995a6980deb8f8e7f7416fdb18d710ea --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.4 @@ -0,0 +1,17 @@ +The MPON notifies the MPOO about equipment change intentions. + +The MPOO announces self dismounting to the MPON or the MPOO shall notify the MPON about no self-dismounting of the MPOO. + +The MPON or the MPOO perform the final reading. + +The MPON or the MPOO dismount the old equipment. + +The MPON mounts the new device. + +The MPON reads the meter count from the installed meter. + +The MPON sents the values of the final reading to the GO. + +The MPON tells the GO about the device changes , the master data and the meter count at installation. + +The GO shall notify the MSP about the device changes , the master data , the meter count at dismounting , and the meter count at installation . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.5 b/pm4py/examples/llm/PET/doc-10.5 new file mode 100644 index 0000000000000000000000000000000000000000..2fe3c6a700a51f32903134f3ad64c33293065edc --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.5 @@ -0,0 +1,7 @@ +The MPON requests a device takeover bid of the MPOO. + +The MPOO sends a tender for the equipment takeover to the MPON. + +The MPON places an order at the MPOO. + +The MPOO confirms the order of the MPON and sends the master data . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.6 b/pm4py/examples/llm/PET/doc-10.6 new file mode 100644 index 0000000000000000000000000000000000000000..adc435faf6d71ffa61e35f1af33029d598f12b9b --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.6 @@ -0,0 +1,5 @@ +The MSPN sents a dismissal to the MSPO. + +The MSPO reviews the dismissal. + +The MSPO rejects the dismissal of the MSPN or The MSPO confirms the dismissal of the MSPN . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.7 b/pm4py/examples/llm/PET/doc-10.7 new file mode 100644 index 0000000000000000000000000000000000000000..51891b673f9b31d29726ae426c159fe1d42f6dba --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.7 @@ -0,0 +1,13 @@ +The MSPN registers the measurement at the GO. + +The GO examines the application of the MSPN. + +The GO rejects the application of the MSPN or the GO confirmes the application of the MSPN. + +The GO assigns the MSPN. + +The GO informs the MSPO about the assignment of MSPN. + +The GO informs the MPO about the assignment of the MSPN. + +The GO informs the SP about the assignment of MSPN . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.8 b/pm4py/examples/llm/PET/doc-10.8 new file mode 100644 index 0000000000000000000000000000000000000000..aaf276ac9cd3896579e92bb737bc90899502a1c1 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.8 @@ -0,0 +1,13 @@ +The MSPO deregisters at the GO. + +The GO verifies the deregistration. + +The GO rejects the deregistration of the MSPO or the GO preliminarily confirms the deregistration of the MSPO. + +The GO assigns himself as MSP. + +The GO informs the MSPO about the end of the assignment and the beginning of the assignment of the GO. + +The GO informs the MPO about the assignment of the GO. + +The GO informs the SP about the assignment of the GO . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-10.9 b/pm4py/examples/llm/PET/doc-10.9 new file mode 100644 index 0000000000000000000000000000000000000000..184d4b38c46c93f30c79398aa358ec9b7f581895 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-10.9 @@ -0,0 +1,9 @@ +The SP / PU / GO request changes to the MPO or the MPO himself causes a change. + +The MPO reviews the change request. + +The MPO rejects the change of the measuring point by the SP / PU / GO or the MPO confirmes the request of the SP / PU / GO. + +The MPO performs the measuring point change. + +The MPO reports the implementation to the SP / PU / GO or notifies the SP / PU / GO about the failure of the changes . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-2.1 b/pm4py/examples/llm/PET/doc-2.1 new file mode 100644 index 0000000000000000000000000000000000000000..8d0a66a4c1701a9e7a26a8dc38c377447ca8d2d5 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-2.1 @@ -0,0 +1,79 @@ +At the beginning the customer perceives that her subscribed service has degraded. + +A list with all the problem parameters is then sent to the Customer Service department of TELECO. + +At the customer service an employee enters ( based on the received data ) a problem report into system T. + +. Then the problem report is compared to the customer SLA to identify what the extent and the details of the service degradation are. + +Based on this , the necessary counter measures are determined including their respective priorities. + +An electronic service then determines the significance of the customer based on information that has been collected during the history of the contractual relationship. + +In case the customer is premium , the process will link to an extra problem fix process ( this process will not be detailed here ). + +In case the customer is of certain significance which would affect the counter measures previously decided upon , the process goes back to re-prioritize these measures otherwise the process continues. + +Taking together the information ( i.e. + +contract commitment data + prioritized actions ) a detailed problem report is created. + +The detailed problem report is then sent to Service Management. + +Service Management deals on a first level with violations of quality in services that are provided to customers. + +After receiving the detailed problem report , Service management investigates whether the problem is analyzable at the level of their department or whether the problem may be located at Resource Provisioning. + +In case Service Management assesses the problem to be not analyzable by themselves , the detailed problem report is sent out to Resource Provisioning. + +If Service Management is sure they can analyze it , they perform the analysis and based on the outcome they create a trouble report that indicates the type of problem. + +After Resource Provisioning receives the detailed problem report , it is checked whether there are any possible problems. + +If no problems are detected , a notification about the normal service execution is created. + +If a problem is detected this will be analyzed by Resource Provisioning and a trouble report is created. + +Either trouble report or the normal execution notification will be included in a status report and sent back to Service Management. + +Service Management then prepares the final status report based on the received information. + +Subsequently it has to be determined what counter measures should be taken depending on the information in the final status report. + +Three alternative process paths may be taken. + +For the case that no problem was detected at all , the actual service performance is sent back to the Customer Service. + +For the case that minor corrective actions are required , Service Management will undertake corrective actions by themselves. + +Subsequently , the problem resolution report is created and then sent out to Customer Service. + +After sending , this process path of Service Management ends. + +For the case that automatic resource restoration from Resource Provisioning is required , Service Management must create a request for automatic resource restoration. + +This message is then sent to Resource Provisioning. + +Resource Provisioning has been on-hold and waiting for a restoration request but this must happen within 2 days after the status report was sent out , otherwise Resource Provisioning terminates the process. + +After the restoration request is received , all possible errors are tracked. + +Based on the tracked errors , all necessary corrective actions are undertaken by Resource Provisioning. + +Then a trouble-shooting report is created. + +This report is sent out to Service Management ; then the process ends. + +The trouble-shooting report is received by Service Management and this information goes then into the creation of the problem resolution report just as described for ii ). + +Customer Service either receives the actual service performance ( if there was no problem ) or the problem resolution report. + +Then , two concurrent activities are triggered , i.e. + +i ) a report is created for the customer which details the current service performance and the resolution of the problem , and ii ) an SLA violation rebate is reported to Billing & Collections who will adjust the billing. + +The report for the customer is sent out to her. + +After all three activities are completed the process ends within Customer Service. + +After the customer then receives the report about service performance and problem resolution from Customer Service , the process flow at the customer also ends . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-2.2 b/pm4py/examples/llm/PET/doc-2.2 new file mode 100644 index 0000000000000000000000000000000000000000..54fc9cf6187fc51d5e8bebb07bae22e9e9d937df --- /dev/null +++ b/pm4py/examples/llm/PET/doc-2.2 @@ -0,0 +1,65 @@ +The process is initiated by a switch-over request. + +In doing so , the customer transmits his data to the customer service department of the company. + +Customer service is a shared service center between the departments Sales and Distribution. + +The customer data is received by customer service and based on this data a customer data object is entered into the CRM system. + +After customer data has been entered it should then be compared with the internal customer data base and checked for completeness and plausibility. + +In case of any errors these should be corrected on the basis of a simple error list. + +The comparison of data is done to prevent individual customer data being stored multiple times. + +In case the customer does not exist in the customer data base , a new customer object is being created which will remain the data object of interest during the rest of the process flow. + +This object consists of data elements such as the customer's name and address and the assigned power gauge. + +The generated customer object is then used , in combination with other customer data to prepare the contract documents for the power supplier switch ( including data such as bank connection , information on the selected rate , requested date of switch-over ). + +In the following an automated check of the contract documents is carried out within the CIS ( customer information system ) in order to confirm their successful generation. + +In case of a negative response , i.e. + +the contract documents are not ( or incorrectly ) generated , the causing issues are being analyzed and resolved. + +Subsequently the contract documents are generated once again. + +In case of a positive response a confirmation document is sent out to the customer stating that the switch-over to the new supplier can be executed. + +A request to the grid operator is automatically sent out by the CIS. + +It puts the question whether the customer may be supplied by the selected supplier in the future. + +The switch-over request is checked by the grid operator for supplier concurrence , and the grid operator transmits a response comment. + +In the case of supplier concurrence the grid operator would inform all involved suppliers and demand the resolution of the conflict. + +The grid operator communicates with the old supplier and carries out the termination of the sales agreement between the customer and the old supplier ( i.e. + +the customer service ( of the new supplier ) does not have to interact with the old supplier regarding termination ). + +If there are not any objections by the grid operator ( i.e. + +no supplier concurrence ) , customer service creates a CIS contract. + +The customer then has the chance to check the contract details and based on this check may decide to either withdraw from the switch contract or confirm it. + +Depending on the customer's acceptance / rejection the process flow at customer service either ends ( in case of withdrawal ) or continues ( in case of a confirmation ). + +An additional constraint is that the customer can only withdraw from the offered contract within 7 days after the 7th day the contract will be regarded as accepted and the process continues. + +The confirmation message by the customer is therefore not absolutely necessary ( as it will count as accepted after 7 days in any way ) but it can speed up the switch process. + +On the switch-date , but no later than 10 days after power supply has begun , the grid operator transmits the power meter data to the customer service and the old supplier via messages containing a services consumption report. + +At the same time , the grid operator computes the final billing based on the meter data and sends it to the old supplier. + +Likewise the old supplier creates and sends the final billing to the customer. + +For the customer as well as the grid operator the process ends then. + +After receiving the meter data customer service imports the meter data to systems that require the information. + +The process of winning a new customer ends here . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-3.1 b/pm4py/examples/llm/PET/doc-3.1 new file mode 100644 index 0000000000000000000000000000000000000000..368dcf1d2c37ef45c9d88b679bd7c5ff03fc4108 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-3.1 @@ -0,0 +1,13 @@ +The party sends a warrant possession request asking a warrant to be released. + +The Client Service Back Office as part of the Small Claims Registry Operations receives the request and retrieves the SCT file. + +Then , the SCT Warrant Possession is forwarded to Queensland Police. + +The SCT physical file is stored by the Back Office awaiting a report to be sent by the Police. + +When the report is received , the respective SCT file is retrieved. + +Then , Back Office attaches the new SCT document , and stores the expanded SCT physical file. + +After that , some other MC internal staff receives the physical SCT file ( out of scope ) . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-3.2 b/pm4py/examples/llm/PET/doc-3.2 new file mode 100644 index 0000000000000000000000000000000000000000..6e4d0dfb5eccb8a20a52b145724edfaab84fe7ad --- /dev/null +++ b/pm4py/examples/llm/PET/doc-3.2 @@ -0,0 +1,7 @@ +Each morning , the files which have yet to be processed need to be checked , to make sure they are in order for the court hearing that day. + +If some files are missing , a search is initiated , otherwise the files can be physically tracked to the intended location. + +Once all the files are ready , these are handed to the Associate , and meantime the Judgeis Lawlist is distributed to the relevant people. + +Afterwards , the directions hearings are conducted . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-3.3 b/pm4py/examples/llm/PET/doc-3.3 new file mode 100644 index 0000000000000000000000000000000000000000..fc5f61fd5160aa75c70126648b5db475e5e6e175 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-3.3 @@ -0,0 +1,9 @@ +After a claim is registered , it is examined by a claims officer. + +The claims officer then writes a settlement recommendation. + +This recommendation is then checked by a senior claims officer who may mark the claim as OK or Not OK. + +If the claim is marked as Not OK , it is sent back to the claims officer and the recommendation is repeated. + +If the claim is OK , the claim handling process proceeds . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-3.5 b/pm4py/examples/llm/PET/doc-3.5 new file mode 100644 index 0000000000000000000000000000000000000000..38651596b6d7f2db93ef8d571e22a2d9d35e4ed0 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-3.5 @@ -0,0 +1,17 @@ +Mail from the party is collected on a daily basis by the Mail Processing Unit. + +Within this unit , the Mail Clerk sorts the unopened mail into the various business areas. + +The mail is then distributed. + +When the mail is received by the Registry , it is opened and sorted into groups for distribution , and thus registered in a manual incoming Mail Register. + +Afterwards , the Assistant Registry Manager within the Registry performs a quality check. + +If the mail is not compliant , a list of requisition explaining the reason for rejection is compiled and sent back to the party. + +Otherwise , the matter details ( types of action ) are captured and provided to the Cashier , who takes the applicable fees attached to the mail. + +At this point , the Assistant Registry Manager puts the receipt and copied documents into an envelope and posts it to the party. + +Meantime , the Cashier captures the Party Details and prints the Physical Court File . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-3.6 b/pm4py/examples/llm/PET/doc-3.6 new file mode 100644 index 0000000000000000000000000000000000000000..4f59b2984ce7b4f1d3fa1f65ef66cd5f88f61530 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-3.6 @@ -0,0 +1,15 @@ +When a claim is received , it is first checked whether the claimant is insured by the organization. + +If not , the claimant is informed that the claim must be rejected. + +Otherwise , the severity of the claim is evaluated. + +Based on the outcome ( simple or complex claims ) , relevant forms are sent to the claimant. + +Once the forms are returned , they are checked for completeness. + +If the forms provide all relevant details , the claim is registered in the Claims Management system , which ends the Claims Notification process. + +Otherwise , the claimant is informed to update the forms. + +Upon reception of the updated forms , they are checked again . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-3.7 b/pm4py/examples/llm/PET/doc-3.7 new file mode 100644 index 0000000000000000000000000000000000000000..cd679b25095aca40a7ac52d0222cedd8e29a38d0 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-3.7 @@ -0,0 +1,9 @@ +The Police Report related to the car accident is searched within the Police Report database and put in a file together with the Claim Documentation. + +This file serves as input to a claims handler who calculates an initial claim estimate. + +Then , the claims handler creates an Action Plan based on an Action Plan Checklist available in the Document Management system. + +Based on the Action Plan , a claims manager tries to negotiate a settlement on the claim estimate. + +The claimant is informed of the outcome , which ends the process . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-3.8 b/pm4py/examples/llm/PET/doc-3.8 new file mode 100644 index 0000000000000000000000000000000000000000..85e70d2fe06c47f7d8641dce432a2645c151ca21 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-3.8 @@ -0,0 +1,13 @@ +The process starts when a customer submits a claim by sending in relevant documentation. + +The Notification department at the car insurer checks the documents upon completeness and registers the claim. + +Then , the Handling department picks up the claim and checks the insurance. + +Then , an assessment is performed. + +If the assessment is positive , a garage is phoned to authorise the repairs and the payment is scheduled ( in this order ). + +Otherwise , the claim is rejected. + +In any case ( whether the outcome is positive or negative ) , a letter is sent to the customer and the process is considered to be complete . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-4.1 b/pm4py/examples/llm/PET/doc-4.1 new file mode 100644 index 0000000000000000000000000000000000000000..3cca0cf1a5421ec92ef38e22c09946ba5b73d8ef --- /dev/null +++ b/pm4py/examples/llm/PET/doc-4.1 @@ -0,0 +1,79 @@ +The intake workflow starts with a notice by telephone at the secretarial office of the mental health care institute. + +This notice is done by the family doctor of somebody who is in need of mental treatment. + +The secretarial worker inquires after the name and residence of the patient. + +On the basis of this information , the doctor is put through to the nursing officer responsible for the part of the region that the patient lives in. + +The nursing officer makes a full inquiry into the mental , health , and social state of the patient in question. + +This information is recorded on a registration form. + +At the end of the conversation , this form is handed in at the secretarial office of the institute. + +Here , the information on the form is stored in the information system and subsequently printed. + +For new patients , a patient file is created. + +The registration form as well as the print from the information system are stored in the patient file. + +Patient files are kept at the secretarial office and may not leave the building. + +At the secretarial office , two registration cards are produced for respectively the future first and second intaker of the patient. + +The registration card contains a set of basic patient data. + +The new patient is added on the list of new notices. + +Halfway the week , at Wednesday , a staff meeting of the entire medical team takes place. + +The medical team consists of social-medical workers , physicians , and a psychiatrist. + +At this meeting , the team-leader assigns all new patients on the list of new notices to members of the team. + +Each patient will be assigned to a social-medical worker , who will act as the first intaker of the patient. + +One of the physicians will act as the second intaker. + +In assigning intakers , the teamleader takes into account their expertise , the region they are responsible for , earlier contacts they might have had with the patient , and their case load. + +The assignments are recorded on an assignment list which is handed to the secretarial office. + +For each new assignment , it is also determined whether the medical file of the patient is required. + +This information is added to the assignment list. + +The secretarial office stores the assignment of each patient of the assignment list in the information system. + +It passes the produced registration cards to the first and second intaker of each newly assigned patient. + +An intaker keeps this registration with him at times when visiting the patient and in his close proximity when he is at the office. + +For each patient for which the medical file is required , the secretarial office prepares and sends a letter to the family doctor of the patient , requesting for a copy of the medical file. + +As soon as this copy is received , the secretarial office will inform the second intaker and add the copy to the patient file. + +The first intaker plans a meeting with the patient as soon as this is possible. + +During the first meeting , the patient is examined using a standard checklist which is filled out. + +Additional observations are registered in a personal notebook. + +After a visit , the first intaker puts a copy of these notes in the file of a patient. + +The standard checklist is also added to the patient's file. + +The second intaker plans the first meeting only after the medical information of the physician if required has been received. + +Physicians use dictaphones to record their observations made during meetings with patients. + +The secretarial office types out these tapes , after which the information is added to the patient file. + +As soon as the meetings of the first and second intaker with the patient have taken place , the secretarial office puts the patient on the list of patients that reach this status. + +For the staff meeting on Wednesday , they provide the team-leader with a list of these patients. + +For each of these patients , the first and second intaker together with the team-leader and the attending psychiatrist formulate a treatment plan. + +This treatment plan formally ends the intake procedure . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-5.1 b/pm4py/examples/llm/PET/doc-5.1 new file mode 100644 index 0000000000000000000000000000000000000000..387fe5f00457b53fd6ce6cfc734e6bc7323eca1b --- /dev/null +++ b/pm4py/examples/llm/PET/doc-5.1 @@ -0,0 +1,11 @@ +The loan approval process starts by receiving a customer request for a loan amount. + +The risk assessment Web service is invoked to assess the request. + +If the loan is small and the customer is low risk , the loan is approved. + +If the customer is high risk , the loan is denied. + +If the customer needs further review or the loan amount is for $10,000 or more , the request is sent to the approver Web service. + +The customer receives feedback from the assessor or approver . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-5.2 b/pm4py/examples/llm/PET/doc-5.2 new file mode 100644 index 0000000000000000000000000000000000000000..2e41b548c7d36b6be3ded7e22b70a79959706f3b --- /dev/null +++ b/pm4py/examples/llm/PET/doc-5.2 @@ -0,0 +1,9 @@ +The process of Vacations Request starts when any employee of the organization submits a vacation request. + +Once the requirement is registered , the request is received by the immediate supervisor of the employee requesting the vacation. + +The supervisor must approve or reject the request. + +If the request is rejected , the application is returned to the applicant / employee who can review the rejection reasons. + +If the request is approved a notification is generated to the Human Resources Representative , who must complete the respective management procedures . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-5.3 b/pm4py/examples/llm/PET/doc-5.3 new file mode 100644 index 0000000000000000000000000000000000000000..e64cb6a5944293958c412f15ca39653a98b947eb --- /dev/null +++ b/pm4py/examples/llm/PET/doc-5.3 @@ -0,0 +1,19 @@ +The process of an Office Supply Request starts when any employee of the organization submits an office supply request. + +Once the requirement is registered , the request is received by the immediate supervisor of the employee requesting the office supplies. + +The supervisor must approve or ask for a change , or reject the request. + +If the request is rejected the process will end. + +If the request is asked to make a change then it is returned to the petitioner / employee who can review the comments for the change request. + +If the request is approved it will go to the purchase department that will be in charge of making quotations ( using a subprocess ) and select a vendor. + +If the vendor is not valid in the system the purchase department will have to choose a different vendor. + +After a vendor is selected and confirmed , the system will generate and send a purchase order and wait for the product to be delivered and the invoice received. + +In any case the system will send a notification to let the user know what the result was. + +In any of the cases , approval , rejection or change required the system will send the user a notification . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-5.4 b/pm4py/examples/llm/PET/doc-5.4 new file mode 100644 index 0000000000000000000000000000000000000000..5fd1716a3f607aae14e4d5dec61c08954a601fc2 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-5.4 @@ -0,0 +1,31 @@ +An employee purchases a product or service he requires. + +For instance , a sales person on a trip rents a car. + +The employee submits an expense report with a list of items , along with the receipts for each item. + +A supervisor reviews the expense report and approves or rejects the report. + +Since the company has expense rules , there are circumstances where the supervisor can accept or reject the report upon first inspection. + +These rules could be automated , to reduce the workload on the supervisor. + +If the supervisor rejects the report , the employee , who submitted it , is given a chance to edit it , for example to correct errors or better describe an expense. + +If the supervisor approves the report , it goes to the treasurer. + +The treasurer checks that all the receipts have been submitted and match the items on the list. + +If all is in order , the treasurer accepts the expenses for processing ( including , e.g. + +, payment or refund , and accounting ). + +If receipts are missing or do not match the report , he sends it back to the employee. + +If a report returns to the employee for corrections , it must again go to a supervisor , even if the supervisor previously approved the report. + +If the treasurer accepts the expenses for processing , the report moves to an automatic activity that links to a payment system. + +The process waits for the payment confirmation. + +After the payment is confirmed , the process ends . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-6.1 b/pm4py/examples/llm/PET/doc-6.1 new file mode 100644 index 0000000000000000000000000000000000000000..3091da445778be00519708f9a32081f98badbf3e --- /dev/null +++ b/pm4py/examples/llm/PET/doc-6.1 @@ -0,0 +1,37 @@ +As a basic principle , ACME AG receives invoices on paper or fax. + +These are received by the Secretariat in the central inbox and forwarded after a short visual inspection to an accounting employee. + +In `` ACME Financial Accounting `` , a software specially developed for the ACME AG , she identifies the charging suppliers and creates a new instance ( invoice ). + +She then checks the invoice items and notes the corresponding cost center at the ACME AG and the related cost center managers for each position on a separate form ( `` docket `` ). + +The docket and the copy of the invoice go to the internal mail together and are sent to the first cost center manager to the list. + +He reviews the content for accuracy after receiving the copy of the invoice. + +Should everything be in order , he notes his code one on the docket ( `` accurate position - AP `` ) and returns the copy of the invoice to the internal mail. + +From it , the copy of the invoice is passed on to the next cost center manager , based on the docket , or if all items are marked correct , sent back to accounting. + +Therefore , the copy of invoice and the docket gradually move through the hands of all cost center managers until all positions are marked as completely accurate. + +However , if inconsistencies exist , e.g. + +because the ordered product is not of the expected quantity or quality , the cost center manager rejects the AP with a note and explanatory statement on the docket , and the copy of the invoice is sent back to accounting directly. + +Based on the statements of the cost center managers , she will proceede with the clarification with the vendor , but , if necessary , she consults the cost center managers by telephone or e-mail again. + +When all inconsistencies are resolved , the copy of the invoice is sent to the cost center managers again , and the process continues. + +After all invoice items are AP , the accounting employee forwards the copy of the invoice to the commercial manager. + +He makes the commercial audit and issues the approval for payment. + +If the bill amount exceeds EUR 20 , the Board wants to check it again ( 4 - eyes-principle ). + +The copy of the invoice including the docket moves back to the accounting employee in the appropriate signature file. + +Should there be a complaint during the commercial audit , it will be resolved by the accounting employee with the supplier. + +After the commercial audit is successfully completed , the accounting employee gives payment instructions and closes the instance in `` ACME financial accounting `` . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-6.2 b/pm4py/examples/llm/PET/doc-6.2 new file mode 100644 index 0000000000000000000000000000000000000000..7a2b69edd2c307c22b9cd606144697d6cafc870e --- /dev/null +++ b/pm4py/examples/llm/PET/doc-6.2 @@ -0,0 +1,9 @@ +The process starts periodically on the first of each month , when Assembler AG places an order with the supplier in order to request more product parts. + +a ) Assembler AG sends the order to the supplier. + +b ) The supplier processes the order. + +c ) The supplier sends an invoice to Assembler AG. + +d ) Assembler AG receives the invoice . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-6.3 b/pm4py/examples/llm/PET/doc-6.3 new file mode 100644 index 0000000000000000000000000000000000000000..be120e59ea1820101d2fa60d98eab1c240958231 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-6.3 @@ -0,0 +1,17 @@ +Every time we get a new order from the sales department , first , one of my masters determines the necessary parts and quantities as well as the delivery date. + +Once that information is present , it has to be entered into our production planning system ( PPS ). + +It optimizes our production processes and creates possibly uniform work packages so that the setup times are minimized. + +Besides , it creates a list of parts to be procured. + +Unfortunately it is not coupled correctly to our Enterprise Resource Planning system ( ERP ) , so the data must be transferred manually. + +By the way , that is the second step. + +Once all the data is present , we need to decide whether any parts are missing and must be procured or if this is not necessary. + +Once production is scheduled to start , we receive a notice from the system and an employee takes care of the implementation. + +Finally , the order will be checked again for its quality . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-6.4 b/pm4py/examples/llm/PET/doc-6.4 new file mode 100644 index 0000000000000000000000000000000000000000..b49728d946090d8c35e564e20cd99b1703289efa --- /dev/null +++ b/pm4py/examples/llm/PET/doc-6.4 @@ -0,0 +1,27 @@ +The first step is to determine contact details of potential customers. + +This can be achieved in several ways. + +Sometimes , we buy details for cold calls , sometimes , our marketing staff participates in exhibitions and sometimes , you just happen to know somebody , who is interested in the product. + +Then we start calling the customer. + +That is done by the call center staff. + +They are determining the contact person and the budget which would be available for the project. + +Of course , asking the customer whether he is generally interested is also important. + +If this is not the case , we leave him alone , except if the potential project budget is huge. + +Then the head of development personally tries to acquire the customer. + +If the customer is interested in the end , the next step is a detailed online presentation. + +It is given either by a sales representative or by a pre-sales employee in case of a more technical presentation. + +Afterwards we are waiting for the customer to come back to us. + +If we are not contacted within 2 weeks , a sales representative is calling the customer. + +The last phase is the creation of a quotation . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-7.1 b/pm4py/examples/llm/PET/doc-7.1 new file mode 100644 index 0000000000000000000000000000000000000000..2e2af1ea6b329a9eaf1ca540a516ff92d07c61bf --- /dev/null +++ b/pm4py/examples/llm/PET/doc-7.1 @@ -0,0 +1,13 @@ +First , the Manager checks the open leads. + +Afterwards , he selects the top five ones. + +He then tells his Sales Assistant to call the contact person of the leads. + +The Sales Assistant calls each customer. + +If someone is interested , he sends a note to the Manager. + +The Manager then processes the lead. + +Otherwise , he calls the next customer . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-8.1 b/pm4py/examples/llm/PET/doc-8.1 new file mode 100644 index 0000000000000000000000000000000000000000..a4519a23568c17ed5a05fea063b9c38257545bf7 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-8.1 @@ -0,0 +1,5 @@ +The process is triggered by the demand of a functional department to fill a post. + +The post is advertised , applicants apply , the applications are checked and the post is filled. + +The process finishes when the post was filled , precisely through the conclusion of a contract of employment . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-8.2 b/pm4py/examples/llm/PET/doc-8.2 new file mode 100644 index 0000000000000000000000000000000000000000..134082b628c2220decfd38acea02535226b5cc09 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-8.2 @@ -0,0 +1,13 @@ +I am the HR clerk. + +When a vacancy is reported to me , I create a job description from the information. + +Sometimes there is still confusion in the message , then I must ask the Department again. + +I am submitting the job description for consideration and waiting for the approval. + +But , it can also happen that the department does not approve it , but rejects it , and requests a correction. + +Then I correct the description and submit it again for consideration. + +If the description is finally approved , I post the job . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-8.3 b/pm4py/examples/llm/PET/doc-8.3 new file mode 100644 index 0000000000000000000000000000000000000000..516df82d6b0eef9a6d13abd5cbcfdf6f764283d6 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-8.3 @@ -0,0 +1,11 @@ +I am the Head of the functional department. + +When I have detected a number of personnel requirements , I report the vacancy to the Personnel Department. + +Then I wait to get the job description for review before it is advertized. + +Under certain circumstances , I must ask for corrections again , otherwise I approve the job description. + +Sometimes it also happens that the colleague from the HR department still has questions about the tasks and requirements before he can describe the job. + +Then I am available for clarifications , of course . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-9.1 b/pm4py/examples/llm/PET/doc-9.1 new file mode 100644 index 0000000000000000000000000000000000000000..ee22b5dfc646b8792862435e62d473d361e9e53e --- /dev/null +++ b/pm4py/examples/llm/PET/doc-9.1 @@ -0,0 +1,15 @@ +Every weekday morning , the database is backed up and then it is checked to see whether the Account Defaulter table has new records. + +If no new records are found , then the process should check the CRM system to see whether new returns have been filed. + +If new returns exist , then register all defaulting accounts and customers. + +If the defaulting client codes have not been previously advised , produce another table of defaulting accounts and send to account management. + +All of this must be completed by 2 : 30 pm , if it is not , then an alert should be sent to the supervisor. + +Once the new defaulting account report has been completed , check the CRM system to see whether new returns have been filed. + +If new returns have been filed , reconcile with the existing account defaulters table. + +This must be completed by 4 : 0 pm otherwise a supervisor should be sent a message . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-9.2 b/pm4py/examples/llm/PET/doc-9.2 new file mode 100644 index 0000000000000000000000000000000000000000..97b2d9578017a50f846b023aa29bbdb88e689aa1 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-9.2 @@ -0,0 +1,9 @@ +The Customer Service Representative sends a Mortgage offer to the customer and waits for a reply. + +If the customer calls or writes back declining the mortgage , the case details are updated and the work is then archived prior to cancellation. + +If the customer sends back the completed offer documents and attaches all prerequisite documents then the case is moved to administration for completion. + +If all pre-requisite documents are not provided a message is generated to the customer requesting outstanding documents. + +If no answer is received after 2 weeks , the case details are updated prior to archive and cancellation . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-9.3 b/pm4py/examples/llm/PET/doc-9.3 new file mode 100644 index 0000000000000000000000000000000000000000..ac2dc4a43810115703df1ebf657bc1602d0771a6 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-9.3 @@ -0,0 +1,7 @@ +In November of each year , the Coordination Unit at the Town Planning Authority drafts a schedule of meetings for the next calendar year and adds draft dates to all calendars. + +The Support Officer then checks the dates and suggests modifications. + +The Coordination Unit then rechecks all dates and looks for potential conflicts. + +The final schedule of meeting dates is sent to all the independent Committee Members by email , who then check their diaries and advise the Coordination Unit of any conflicts . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-9.4 b/pm4py/examples/llm/PET/doc-9.4 new file mode 100644 index 0000000000000000000000000000000000000000..2e7879146b9667733f04dafa02feccb9cdf27bbe --- /dev/null +++ b/pm4py/examples/llm/PET/doc-9.4 @@ -0,0 +1,9 @@ +Once the dates are finalized ( by the Coordination Unit ) , the Support Officer updates all group calendars and creates meeting folders for each meeting and ensures all appropriate documents are uploaded to system. + +Committee Members are advised a week before each meeting to read all related documents. + +The Committee Members hold their meeting , and the Support Office then produces minutes including any Action Points for each Committee Member. + +Within 5 working days , the Coordination Unit must conduct a QA check on the minutes , which are then sent to all Committee Members. + +The Support Officer then updates all departmental records . \ No newline at end of file diff --git a/pm4py/examples/llm/PET/doc-9.5 b/pm4py/examples/llm/PET/doc-9.5 new file mode 100644 index 0000000000000000000000000000000000000000..850d0c5f0d8a98f30c905129df3a890a91a56565 --- /dev/null +++ b/pm4py/examples/llm/PET/doc-9.5 @@ -0,0 +1,13 @@ +After the Expense Report is received , a new account must be created if the employee does not already have one. + +The report is then reviewed for automatic approval. + +Amounts under $200 are automatically approved , whereas amounts equal to or over $200 require approval of the supervisor. + +In case of rejection , the employee must receive a rejection notice by email. + +Otherwise , the reimbursement goes to the employees direct deposit bank account. + +If the request is not completed in 7 days , then the employee must receive an approval in progress email. + +If the request is not finished within 30 days , then the process is stopped and the employee receives an email cancellation notice and must re-submit the expense report . \ No newline at end of file diff --git a/pm4py/examples/llm/abstractions/log_to_acti_summary.py b/pm4py/examples/llm/abstractions/log_to_acti_summary.py new file mode 100644 index 0000000000000000000000000000000000000000..eac6f39f460730c8c9634911a51d3417461a40c3 --- /dev/null +++ b/pm4py/examples/llm/abstractions/log_to_acti_summary.py @@ -0,0 +1,131 @@ +import pm4py +from pm4py.objects.conversion.log import converter as log_converter +from typing import Union, Optional, Dict, Any +from pm4py.objects.log.obj import EventLog, EventStream +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.statistics.service_time.pandas import get as service_time_get +from pm4py.statistics.eventually_follows.pandas import get as eventually_follows +import pandas as pd + + +class Parameters(Enum): + MAX_LEN = "max_len" + RESPONSE_HEADER = "response_header" + PERFORMANCE_AGGREGATION = "performance_aggregation" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def apply(log_obj: Union[EventLog, EventStream, pd.DataFrame], + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> str: + """ + Provides an abstraction of the activities' frequency and performance. + + Minimum Viable Example: + + import pm4py + from pm4py.algo.querying.llm.abstractions import log_to_acti_summary + + log = pm4py.read_xes("tests/input_data/receipt.xes") + print(log_to_acti_summary.apply(log)) + + Example output: + + Below you find the top activities of the event log, specified with their total number of occurrences, the number of cases in which they occur, an aggregation of the service time, an aggregation of the times from the preceding activities and to the succeeding activities. + + Confirmation of receipt [tot.occ=1434; num.cases=1434; service time=0.00 s; time from prec.=0.00 s; time to succ.=76014.05 s] + T02 Check confirmation of receipt [tot.occ=1368; num.cases=1316; service time=0.00 s; time from prec.=100581.24 s; time to succ.=44701.62 s] + T06 Determine necessity of stop advice [tot.occ=1416; num.cases=1309; service time=0.00 s; time from prec.=186313.29 s; time to succ.=44757.08 s] + T04 Determine confirmation of receipt [tot.occ=1307; num.cases=1303; service time=0.00 s; time from prec.=36815.50 s; time to succ.=65668.55 s] + + + Parameters + --------------- + log_obj + Log object + parameters + Optional parameters of the algorithm, including: + - Parameters.MAX_LEN => desidered length of the textual abstraction + - Parameters.RESPONSE_HEADER => includes an header in the textual abstraction, which explains the context + - Parameters.PERFORMANCE_AGGREGATION => performance metric to be used to express the performance (e.g., mean). Available options: mean, median, stdev, min, max, sum + - Parameters.ACTIVITY_KEY => the attribute of the log to be used as activity + - Parameters.TIMESTAMP_KEY => the attribute of the log to be used as timestamp + - Parameters.CASE_ID_KEY => the attribute of the log to be used as case identifier + + Returns + -------------- + textual_abstraction + Textual abstraction of the activities frequency and of their performance. + """ + if parameters is None: + parameters = {} + + response_header = exec_utils.get_param_value(Parameters.RESPONSE_HEADER, parameters, True) + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, constants.OPENAI_MAX_LEN) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + performance_aggregation = exec_utils.get_param_value(Parameters.PERFORMANCE_AGGREGATION, parameters, "mean") + + log_obj = log_converter.apply(log_obj, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + log_obj = log_obj[list({activity_key, timestamp_key, start_timestamp_key, case_id_key})] + + num_occ = log_obj[activity_key].value_counts().to_dict() + num_cases = log_obj.groupby([case_id_key, activity_key]).first().reset_index()[ + activity_key].value_counts().to_dict() + + parameters["aggregationMeasure"] = performance_aggregation + service_times = service_time_get.apply(log_obj, parameters=parameters) + + dir_follo_dataframe = eventually_follows.get_partial_order_dataframe(log_obj.copy(), activity_key=activity_key, + start_timestamp_key=start_timestamp_key, + timestamp_key=timestamp_key, + case_id_glue=case_id_key, + sort_caseid_required=False, + sort_timestamp_along_case_id=False, + reduce_dataframe=False) + + post_times = dir_follo_dataframe.groupby(activity_key)[constants.DEFAULT_FLOW_TIME].agg( + performance_aggregation).to_dict() + pre_times = dir_follo_dataframe.groupby(activity_key + "_2")[constants.DEFAULT_FLOW_TIME].agg( + performance_aggregation).to_dict() + + activities_list = [] + for act in num_occ: + activities_list.append({"activity": act, "num_occ": num_occ[act], "num_cases": num_cases[act], + "agg_service_time": service_times[act] if act in service_times else 0.0, + "agg_pre_times": pre_times[act] if act in pre_times else 0.0, + "agg_post_times": post_times[act] if act in post_times else 0.0}) + + activities_list = sorted(activities_list, key=lambda x: (x["num_cases"], x["num_occ"], x["activity"]), reverse=True) + + ret = "\n\n" + + if response_header: + ret += "Below you find the top activities of the event log, specified with their total number of occurrences, the number of cases in which they occur, an aggregation of the service time, an aggregation of the times from the preceding activities and to the succeeding activities.\n\n" + + for dct in activities_list: + ths = "%s [tot.occ=%d; num.cases=%d; service time=%.2f s; time from prec.=%.2f s; time to succ.=%.2f s]\n" % ( + dct["activity"], dct["num_occ"], dct["num_cases"], dct["agg_service_time"], dct["agg_pre_times"], + dct["agg_post_times"]) + if len(ret) + len(ths) < max_len: + ret = ret + ths + else: + break + + ret += "\n\n" + + return ret + + +if __name__ == "__main__": + log = pm4py.read_xes("../../../tests/input_data/receipt.xes") + textual_abstraction = apply(log) + print(textual_abstraction) diff --git a/pm4py/examples/llm/abstractions/log_to_top_resources.py b/pm4py/examples/llm/abstractions/log_to_top_resources.py new file mode 100644 index 0000000000000000000000000000000000000000..bc46af30798adce10004e80e97fc16dfbdcf2b49 --- /dev/null +++ b/pm4py/examples/llm/abstractions/log_to_top_resources.py @@ -0,0 +1,147 @@ +from pm4py.objects.conversion.log import converter as log_converter +from typing import Union, Optional, Dict, Any +from pm4py.objects.log.obj import EventLog, EventStream +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +import pandas as pd +import pm4py +from copy import copy + + +class Parameters(Enum): + MAX_LEN = "max_len" + RESPONSE_HEADER = "response_header" + DEFAULT_MIN_ACTIVITIES = "default_min_activities" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + + +def get_abstr_from_dict(ret, activities_dict, response_header): + """ + Internal method to get the textual abstraction starting from the computations already performed. + """ + abstr = ["\n\n"] + + if response_header: + abstr.append( + "In the following text, you find the top activities along with their number of occurrences in the event log and the number of unique resources performing them.") + abstr.append("The top resources for such activities are included.\n\n") + + sort_act = sorted([(x, activities_dict[x][0], activities_dict[x][1], ret[x]) for x in ret], + key=lambda x: (x[1], x[2], x[0]), reverse=True) + + for el in sort_act: + abstr.append("%s (num.occ=%d ; num.resources=%d)" % (el[0], el[1], el[2])) + + if el[3]: + abstr.append(" top resources=[") + + this_res = sorted([(x, y) for x, y in el[3].items()], key=lambda z: (z[1], z[0]), reverse=True) + + for i in range(len(this_res)): + if i > 0: + abstr.append("; ") + abstr.append("%s=%d" % (this_res[i][0], this_res[i][1])) + abstr.append("]") + + abstr.append("\n") + + abstr.append("\n\n") + + abstr1 = "".join(abstr) + return abstr1 + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Textually abstracts the top activities/resources combinations in the event log. + + + Minimum Viable Example: + + import pm4py + from pm4py.algo.querying.llm.abstractions import log_to_resources + + + log = pm4py.read_xes("C:/receipt.xes") + res = log_to_resources.apply(log) + print(res) + + + Example output: + + In the following text, you find the top activities along with their number of occurrences in the event log and the number of unique resources performing them.The top resources for such activities are included. + + Confirmation of receipt (num.occ=1434 ; num.resources=41) top resources=[Resource01=195; admin2=114; Resource02=102; Resource03=87; Resource04=81; Resource07=78; Resource08=74; Resource06=70; Resource05=65; Resource11=58; Resource09=55; Resource15=51; Resource12=49; Resource13=47; Resource14=44; Resource17=43; Resource27=37; Resource16=35; Resource18=29; Resource10=21; Resource21=19; Resource20=18; Resource23=14; Resource22=12; Resource26=7; Resource25=7; Resource30=4; Resource33=2; Resource31=2; Resource29=2; Resource28=2; admin3=1; admin1=1; Resource43=1; Resource42=1; Resource38=1; Resource37=1; Resource36=1; Resource35=1; Resource34=1; Resource19=1] + T06 Determine necessity of stop advice (num.occ=1416 ; num.resources=34) top resources=[Resource01=203; Resource02=114; Resource04=85; Resource03=85; Resource05=84; Resource07=83; Resource08=75; Resource06=75; Resource11=74; Resource12=72; Resource09=67; Resource15=58; Resource13=53; Resource14=48; Resource17=43; Resource16=36; Resource18=28; admin2=20; Resource20=18; Resource21=16; Resource22=15; Resource23=14; Resource26=12; Resource25=12; Resource29=6; Resource28=6; Resource37=2; Resource35=2; Resource34=2; Resource33=2; Resource31=2; Resource30=2; test=1; Resource36=1] + T02 Check confirmation of receipt (num.occ=1368 ; num.resources=40) top resources=[Resource01=209; Resource02=95; Resource04=91; Resource03=86; Resource06=73; Resource08=65; Resource05=65; Resource19=64; Resource10=62; Resource13=55; Resource09=51; Resource07=50; Resource24=44; Resource12=44; Resource14=43; Resource16=36; Resource17=32; Resource15=32; Resource18=30; Resource11=30; Resource21=18; Resource20=18; Resource22=13; Resource23=12; admin2=9; Resource32=9; Resource25=6; Resource26=5; Resource28=4; Resource30=3; Resource39=2; Resource34=2; Resource31=2; Resource29=2; admin1=1; TEST=1; Resource38=1; Resource36=1; Resource35=1; Resource33=1] + T04 Determine confirmation of receipt (num.occ=1307 ; num.resources=37) top resources=[Resource10=240; Resource01=184; Resource03=81; Resource04=68; Resource02=67; Resource06=66; Resource19=61; Resource05=60; Resource07=58; Resource09=46; Resource14=41; Resource12=41; Resource13=40; Resource18=36; Resource16=36; Resource08=31; Resource11=29; Resource15=28; Resource20=18; Resource21=15; Resource17=13; Resource22=12; Resource23=11; admin2=3; Resource26=3; Resource25=3; admin3=2; admin1=2; Resource31=2; Resource29=2; Resource28=2; Resource38=1; Resource36=1; Resource35=1; Resource34=1; Resource33=1; Resource24=1] + + + Parameters + ---------------- + log + Log object + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to be used as activity + - Parameters.RESOURCE_KEY => the attribute to be used as resource + - Parameters.DEFAULT_MIN_ACTIVITIES => minimum number of different activities to include in the textual abstraction + - Parameters.ACTIVITY_KEY => attribute of the log to be used as activity + - Parameters.RESOURCE_KEY => attribute of the log to be used as resource + + Returns + ---------------- + textual_abstraction + Textual abstraction + """ + if parameters is None: + parameters = {} + + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, constants.OPENAI_MAX_LEN) + response_header = exec_utils.get_param_value(Parameters.RESPONSE_HEADER, parameters, True) + default_min_activities = exec_utils.get_param_value(Parameters.DEFAULT_MIN_ACTIVITIES, parameters, 15) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + log = log_converter.apply(log, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + + activities = log[activity_key].value_counts().to_dict() + activities_unq_resources = log.groupby(activity_key)[resource_key].nunique().to_dict() + activities = [(x, y, activities_unq_resources[x]) for x, y in activities.items()] + activities_dict = {x[0]: (x[1], x[2]) for x in activities} + + activities = sorted(activities, key=lambda z: (z[1], z[2], z[0]), reverse=True) + + ret = {} + for i in range(min(len(activities), default_min_activities)): + new_ret = copy(ret) + new_ret[activities[i][0]] = {} + + if len(get_abstr_from_dict(new_ret, activities_dict, response_header)) > max_len: + break + + ret = new_ret + + activities_resources = log.groupby([activity_key, resource_key]).size().to_dict() + activities_resources = sorted([(x, y) for x, y in activities_resources.items()], key=lambda z: (z[1], z[0]), + reverse=True) + + for el in activities_resources: + new_ret = copy(ret) + if el[0][0] not in new_ret: + new_ret[el[0][0]] = {} + new_ret[el[0][0]][el[0][1]] = el[1] + + if len(get_abstr_from_dict(new_ret, activities_dict, response_header)) > max_len: + break + + ret = new_ret + + return get_abstr_from_dict(ret, activities_dict, response_header) + + +if __name__ == "__main__": + log = pm4py.read_xes("../../../tests/input_data/receipt.xes") + textual_abstraction = apply(log) + print(textual_abstraction) diff --git a/pm4py/examples/llm/abstractions/log_to_var_paths.py b/pm4py/examples/llm/abstractions/log_to_var_paths.py new file mode 100644 index 0000000000000000000000000000000000000000..a88978c70676ea166989f945cd7a4b6ba95b7b39 --- /dev/null +++ b/pm4py/examples/llm/abstractions/log_to_var_paths.py @@ -0,0 +1,108 @@ +from pm4py.objects.conversion.log import converter as log_converter +from typing import Union, Optional, Dict, Any +from pm4py.objects.log.obj import EventLog, EventStream +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +import pm4py +import pandas as pd + + +class Parameters(Enum): + MAX_LEN = "max_len" + RESPONSE_HEADER = "response_header" + PERFORMANCE_AGGREGATION = "performance_aggregation" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def apply(log_obj: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Provides an abstraction of the paths performance for the process variants of the provided event log. + + Minimum Viable Example: + + import pm4py + from pm4py.algo.querying.llm.abstractions import log_to_var_paths + + log = pm4py.read_xes("tests/input_data/receipt.xes") + print(log_to_var_paths.apply(log)) + + + Example output: + + Below your find a description of the top process variants of the event logs, along with their frequency. The paths of every reported variant are decorated with an aggregation (mean) of the performance of the path in the given variant. + + Confirmation of receipt -(8064.44 s)-> T02 Check confirmation of receipt -(29250.98 s)-> T04 Determine confirmation of receipt -(218458.20 s)-> T05 Print and send confirmation of receipt -(39225.28 s)-> T06 Determine necessity of stop advice [frequency=713] + Confirmation of receipt -(3621.01 s)-> T06 Determine necessity of stop advice -(157907.57 s)-> T10 Determine necessity to stop indication -(116514.54 s)-> T02 Check confirmation of receipt -(144858.47 s)-> T04 Determine confirmation of receipt [frequency=123] + Confirmation of receipt -(79543.37 s)-> T02 Check confirmation of receipt -(169.38 s)-> T06 Determine necessity of stop advice -(144037.68 s)-> T10 Determine necessity to stop indication -(86823.89 s)-> T04 Determine confirmation of receipt [frequency=115] + + + Parameters + --------------- + log_obj + Log object + parameters + Optional parameters of the algorithm, including: + - Parameters.MAX_LEN => desidered length of the textual abstraction + - Parameters.RESPONSE_HEADER => includes an header in the textual abstraction, which explains the context + - Parameters.PERFORMANCE_AGGREGATION => performance metric to be used to express the performance (e.g., mean). Available options: mean, median, stdev, min, max, sum + - Parameters.ACTIVITY_KEY => the attribute of the log to be used as activity + - Parameters.TIMESTAMP_KEY => the attribute of the log to be used as timestamp + - Parameters.CASE_ID_KEY => the attribute of the log to be used as case identifier + + Returns + -------------- + textual_abstraction + Textual abstraction of the paths' performance for every process variant + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + performance_aggregation = exec_utils.get_param_value(Parameters.PERFORMANCE_AGGREGATION, parameters, "mean") + + response_header = exec_utils.get_param_value(Parameters.RESPONSE_HEADER, parameters, True) + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, constants.OPENAI_MAX_LEN) + + log_obj = log_converter.apply(log_obj, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + + import pm4py.stats + var_paths0 = pm4py.stats.get_variants_paths_duration(log_obj, activity_key=activity_key, + timestamp_key=timestamp_key, case_id_key=case_id_key, + times_agg=performance_aggregation).to_dict("records") + var_paths = [] + for el in var_paths0: + if el["@@index_in_trace"] == 0: + var_paths.append([]) + var_paths[-1].append(el) + + ret = "\n\n" + + if response_header: + ret += "Below your find a description of the top process variants of the event logs, along with their frequency. The paths of every reported variant are decorated with an aggregation (" + performance_aggregation + ") of the performance of the path in the given variant.\n\n" + + for var in var_paths: + ths = var[0][activity_key] + for i in range(1, len(var)): + ths += " -(%.2f s)-> %s" % (var[i]["@@flow_time"], var[i][activity_key]) + + ths += " [frequency=%d]\n" % (var[0]["@@variant_count"]) + + if len(ret) + len(ths) < max_len: + ret = ret + ths + else: + break + + ret = ret + "\n\n" + + return ret + + +if __name__ == "__main__": + log = pm4py.read_xes("../../../tests/input_data/receipt.xes") + textual_abstraction = apply(log) + print(textual_abstraction) diff --git a/pm4py/examples/llm/openai_stt_tss.py b/pm4py/examples/llm/openai_stt_tss.py new file mode 100644 index 0000000000000000000000000000000000000000..b5c19ce3b8552e2b1eb2d1a03865a4d84d28e89b --- /dev/null +++ b/pm4py/examples/llm/openai_stt_tss.py @@ -0,0 +1,225 @@ +from enum import Enum +from typing import Optional, Dict, Any +from pm4py.util import exec_utils, constants +from tempfile import NamedTemporaryFile +import pm4py +import os +import sys +import subprocess +import importlib.util + + +class Parameters(Enum): + API_KEY = "api_key" + MODEL = "openai_model" + RECORDING_DURATION = "recording_duration" + VOICE = "voice" + PLAY_SOUND = "play_sound" + MAX_LEN = "max_len" + + +def check_ffmpeg_installed(): + try: + # Try to execute "ffmpeg -version" command and capture its output + result = subprocess.run(["ffmpeg", "-version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=True) + # If the command was executed successfully, ffmpeg is installed + return True + except: + # If the command execution leads to an error, ffmpeg is not installed + return False + + +def speech_to_text(sound_file_path: Optional[str] = None, parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Uses an OpenAI speech-to-text model + + Parameters + ------------------ + sound_file_path + If provided, path to a .mp3 file containing the voice to be transcribed as text. If not, a recording of the specified duration is started, and provided to the model. + parameters + Parameters of the method, including: + - Parameters.API_KEY => the API key to be used + - Parameters.MODEL => the speech-to-text model to be used (default: whisper-1) + - Parameters.RECORDING_DURATION => the duration of the voice recording + + Returns + ------------------- + text + Transcription as text of the sound + """ + if parameters is None: + parameters = {} + + api_key = exec_utils.get_param_value(Parameters.API_KEY, parameters, constants.OPENAI_API_KEY) + model = exec_utils.get_param_value(Parameters.MODEL, parameters, constants.OPENAI_DEFAULT_STT_MODEL) + recording_duration = exec_utils.get_param_value(Parameters.RECORDING_DURATION, parameters, 10) + + if sound_file_path is None: + import pyaudio + from pydub import AudioSegment + import wave + + # Audio recording parameters + FORMAT = pyaudio.paInt16 + CHANNELS = 1 + RATE = 44100 + CHUNK = 1024 + RECORD_SECONDS = recording_duration + + F = NamedTemporaryFile(suffix=".wav") + WAVE_OUTPUT_FILENAME = F.name + F.close() + + F = NamedTemporaryFile(suffix=".mp3") + sound_file_path = F.name + F.close() + + audio = pyaudio.PyAudio() + + # Start recording + stream = audio.open(format=FORMAT, channels=CHANNELS, + rate=RATE, input=True, + frames_per_buffer=CHUNK) + print("Recording...") + + frames = [] + + for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): + data = stream.read(CHUNK) + frames.append(data) + + print("Finished recording.") + + # Stop recording + stream.stop_stream() + stream.close() + audio.terminate() + + # Save the recorded data as a WAV file + wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') + wf.setnchannels(CHANNELS) + wf.setsampwidth(audio.get_sample_size(FORMAT)) + wf.setframerate(RATE) + wf.writeframes(b''.join(frames)) + wf.close() + + sound = AudioSegment.from_wav(WAVE_OUTPUT_FILENAME) + sound.export(sound_file_path, format="mp3") + + if sound_file_path is not None: + from openai import OpenAI + + client = OpenAI(api_key=api_key) + + transcript = client.audio.transcriptions.create( + model=model, + file=open(sound_file_path, "rb") + ) + + return transcript.text + + +def text_to_speech(stri: str, parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Uses an OpenAI text-to-speech model + + Parameters + --------------- + stri + String that needs to be translated to voice + parameters + Parameters of the algorithm, including: + - Parameters.API_KEY => the API key of OpenAI to be used + - Parameters.MODEL => the TTS model of OpenAI to be used (default: tts-1) + - Parameters.VOICE => the voice of the TTS model to be used (default: alloy) + - Parameters.PLAY_SOUND => boolean that determines if the voice should be played + + Returns + --------------- + stru + Path to the .mp3 file obtained after the transcription + """ + if parameters is None: + parameters = {} + + api_key = exec_utils.get_param_value(Parameters.API_KEY, parameters, constants.OPENAI_API_KEY) + model = exec_utils.get_param_value(Parameters.MODEL, parameters, constants.OPENAI_DEFAULT_TTS_MODEL) + voice = exec_utils.get_param_value(Parameters.VOICE, parameters, constants.OPENAI_DEFAULT_TTS_VOICE) + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, 4096) + play_sound = exec_utils.get_param_value(Parameters.PLAY_SOUND, parameters, True) + + F = NamedTemporaryFile(suffix=".mp3") + speech_file_path = F.name + F.close() + + from openai import OpenAI + + client = OpenAI(api_key=api_key) + + if len(stri) > max_len: + # TTS limit + stri = stri[:max_len] + + response = client.audio.speech.create( + model=model, + voice=voice, + input=stri + ) + + response.stream_to_file(speech_file_path) + + if play_sound: + if importlib.util.find_spec("pygame"): + # if the user installed pygame, use that to seamlessy play the .mp3 file + import pygame + + pygame.mixer.init() + pygame.mixer.music.load(speech_file_path) + pygame.mixer.music.play() + + while pygame.mixer.music.get_busy(): + pygame.time.Clock().tick(10) + else: + # calls the system .mp3 opener + if sys.platform.startswith('darwin'): + subprocess.call(('open', speech_file_path)) + elif os.name == 'nt': # For Windows + os.startfile(speech_file_path) + elif os.name == 'posix': # For Linux, Mac, etc. + subprocess.call(('xdg-open', speech_file_path)) + + return speech_file_path + + +if __name__ == "__main__": + if not check_ffmpeg_installed(): + raise Exception("install ffmpeg and add it to the environment variables!") + + if not importlib.util.find_spec("pydub") or not importlib.util.find_spec("pyaudio"): + raise Exception("install pydub and pyaudio using pip!") + + api_key = "sk-" + + log = pm4py.read_xes("../../tests/compressed_input_data/15_bpic2020_permit_log_1t_per_variant.xes.gz") + var_abstr = pm4py.llm.abstract_variants(log) + + parameters = {} + + parameters["api_key"] = api_key # OpenAI key + parameters["recording_duration"] = 6 # 6 seconds recording duration + + print("Please insert your inquiry:") + user_inquiry = speech_to_text(None, parameters=parameters) + print("This is your inquiry:", user_inquiry) + + print("Now your inquiry is vocalized before execution:") + text_to_speech(user_inquiry, parameters=parameters) + + prompt = var_abstr + "\n\n" + user_inquiry + + response = pm4py.llm.openai_query(prompt, api_key=api_key) + print("This is the response of the OpenAI model:", response) + + print("Now the response is vocalized:") + text_to_speech(response, parameters=parameters) diff --git a/pm4py/examples/log_projection_dfg_variant.py b/pm4py/examples/log_projection_dfg_variant.py new file mode 100644 index 0000000000000000000000000000000000000000..592189c1e9f0a0ff9800941805a77eb8f28a4928 --- /dev/null +++ b/pm4py/examples/log_projection_dfg_variant.py @@ -0,0 +1,22 @@ +import pm4py +from pm4py.algo.conformance.alignments.dfg.variants import classic as dfg_alignments +from pm4py.algo.conformance.alignments.edit_distance.variants import edit_distance + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes", return_legacy_log_object=True) + + filtered_log = pm4py.filter_variants_top_k(log, 1) + dfg, sa, ea = pm4py.discover_dfg(filtered_log) + projected_log = dfg_alignments.project_log_on_dfg(log, dfg, sa, ea) + print(projected_log) + + variant = ('Confirmation of receipt', 'T02 Check confirmation of receipt', 'T04 Determine confirmation of receipt', + 'T05 Print and send confirmation of receipt', 'T06 Determine necessity of stop advice', + 'T10 Determine necessity to stop indication') + projected_log2 = edit_distance.project_log_on_variant(log, variant) + print(projected_log2) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/log_skeleton.py b/pm4py/examples/log_skeleton.py new file mode 100644 index 0000000000000000000000000000000000000000..bef569222e3d33dc1d8835a0cc4490bd90a7bd6f --- /dev/null +++ b/pm4py/examples/log_skeleton.py @@ -0,0 +1,20 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.log_skeleton import algorithm as lsk +from pm4py.algo.conformance.log_skeleton import algorithm as lsk_conf +import os + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "receipt.xes")) + # discovers the log skeleton with a minimal noise + log_skeleton = lsk.apply(log, parameters={lsk.Variants.CLASSIC.value.Parameters.NOISE_THRESHOLD: 0.01}) + print(log_skeleton) + # applies conformance checking to it + results = lsk_conf.apply(log, log_skeleton) + for i in range(min(len(results), 5)): + # print the i-the conformance checking + print(results[i]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/log_skeleton_manual_constraints.py b/pm4py/examples/log_skeleton_manual_constraints.py new file mode 100644 index 0000000000000000000000000000000000000000..a501b1957e593873f19d40470891ff99d422395e --- /dev/null +++ b/pm4py/examples/log_skeleton_manual_constraints.py @@ -0,0 +1,33 @@ +import pm4py + + +def execute_script(): + # example where the log skeleton is manullay built, and not automatically discovered from the log. + + log = pm4py.read_xes("../tests/input_data/running-example.xes") + + log_skeleton = {"always_after": set(), "always_before": set(), "equivalence": set(), "never_together": set(), + "directly_follows": set(), "activ_freq": dict()} + + for act in pm4py.get_event_attribute_values(log, "concept:name"): + # initially sets that every activity of the log can occur from 0 to 10 times + # (without this constraints, conformance checking will signal deviations for every event) + log_skeleton["activ_freq"][act] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} + + # sets that the 'reinitiate request' activity should not occur (so it occurs 0 times) + log_skeleton["activ_freq"]["reinitiate request"] = {0} + + # sets that the 'pay compensation' activity should occur somewhen after the 'decide' activity. + log_skeleton["always_after"].add(('decide', 'pay compensation')) + + # gets the conformance checking results. The first describes for each case of the log the exact deviations + detailed_conf_results = pm4py.conformance_log_skeleton(log, log_skeleton) + print(detailed_conf_results) + + # the second provides a summary (as a dataframe) of the fitness per case + summary_df = pm4py.conformance_log_skeleton(log, log_skeleton, return_diagnostics_dataframe=True) + print(summary_df) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/log_to_int_tree_open_paths.py b/pm4py/examples/log_to_int_tree_open_paths.py new file mode 100644 index 0000000000000000000000000000000000000000..38d106c3d9bb7ef72b19710d1f2846c0e4aaa37a --- /dev/null +++ b/pm4py/examples/log_to_int_tree_open_paths.py @@ -0,0 +1,25 @@ +import pm4py +import os +from pm4py.algo.transformation.log_to_interval_tree import algorithm as log_to_interval_tree + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + tree = log_to_interval_tree.apply(log, variant=log_to_interval_tree.Variants.OPEN_PATHS) + # see how many paths are open at the timestamp 1319616410 + print(len(tree[1319616410])) + # read the detailed information about the source and target event of each path + print(tree[1319616410]) + + # builds a new tree considering only the intervals going from an event with activity + # 'T06 Determine necessity of stop advice' + # to an event with activity 'T02 Check confirmation of receipt' + tree = log_to_interval_tree.apply(log, variant=log_to_interval_tree.Variants.OPEN_PATHS, parameters={"filter_activity_couple": ("T06 Determine necessity of stop advice", "T02 Check confirmation of receipt")}) + # see how many paths are open at the timestamp 1319616410 + print(len(tree[1319616410])) + # read the detailed information about the source and target event of each path + print(tree[1319616410]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/logs_alignment.py b/pm4py/examples/logs_alignment.py new file mode 100644 index 0000000000000000000000000000000000000000..7c31b361cab51aeb0f7e14b899883189b57f44c3 --- /dev/null +++ b/pm4py/examples/logs_alignment.py @@ -0,0 +1,44 @@ +import time + +import pm4py +from pm4py.algo.conformance.alignments.edit_distance import algorithm as logs_alignment +from pm4py.algo.evaluation.replay_fitness.variants import alignment_based +from pm4py.objects.process_tree.utils import bottomup as bottomup_discovery +from pm4py.algo.simulation.playout.process_tree import algorithm as tree_playout + + +def execute_script(): + # read an event log + log = pm4py.read_xes("../tests/compressed_input_data/02_teleclaims.xes.gz") + # log = pm4py.read_xes("../tests/input_data/receipt.xes") + print("number of variants of the original log ->", len(pm4py.get_variants_as_tuples(log))) + # discover a process model + tree = pm4py.discover_process_tree_inductive(log) + # simulate a log out of the model (to have another log that is similar to the original) + aa = time.time() + min_trace_length = bottomup_discovery.get_min_trace_length(tree) + simulated_log = tree_playout.apply(tree, variant=tree_playout.Variants.EXTENSIVE, + parameters={"max_trace_length": min_trace_length + 2}) + print("number of variants of the simulated log -> ", len(simulated_log)) + # apply the alignments between this log and the model + bb = time.time() + aligned_traces = logs_alignment.apply(log, simulated_log) + cc = time.time() + print(aligned_traces[0]) + print("playout time", bb - aa) + print("alignments time", cc - bb) + print("TOTAL", cc - aa) + print(alignment_based.evaluate(aligned_traces)) + # apply the anti alignments between this log and the model + dd = time.time() + anti_aligned_traces = logs_alignment.apply(log, simulated_log, + parameters={ + logs_alignment.Variants.EDIT_DISTANCE.value.Parameters.PERFORM_ANTI_ALIGNMENT: True}) + ee = time.time() + print(anti_aligned_traces[0]) + print("anti alignments time", ee - dd) + print(alignment_based.evaluate(anti_aligned_traces)) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/logs_petri_visual_comparison.py b/pm4py/examples/logs_petri_visual_comparison.py new file mode 100644 index 0000000000000000000000000000000000000000..1a01bd18d33c8b3cc35c724d939c60d9eaac5ad4 --- /dev/null +++ b/pm4py/examples/logs_petri_visual_comparison.py @@ -0,0 +1,29 @@ +import os +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.comparison.petrinet import element_usage_comparison +from pm4py.objects.log.util import sorting +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "receipt.xes")) + log = sorting.sort_timestamp(log) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + log1 = EventLog(log[:500]) + log2 = EventLog(log[len(log) - 500:]) + statistics = element_usage_comparison.compare_element_usage_two_logs(net, im, fm, log1, log2) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer as pn_vis + gviz = pn_vis.apply(net, im, fm, variant=pn_vis.Variants.FREQUENCY, aggregated_statistics=statistics, + parameters={pn_vis.Variants.FREQUENCY.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + pn_vis.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/lstm_predict_next_activity.py b/pm4py/examples/lstm_predict_next_activity.py new file mode 100644 index 0000000000000000000000000000000000000000..15ca01199645ae608333ded180b214ea9368f466 --- /dev/null +++ b/pm4py/examples/lstm_predict_next_activity.py @@ -0,0 +1,40 @@ +import numpy as np +import pm4py +from pm4py.algo.transformation.log_to_features.variants import event_based +from pm4py.algo.transformation.log_to_target.variants import next_activity +from tensorflow.keras.models import Sequential +from tensorflow.keras.layers import LSTM, Dense, TimeDistributed + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/running-example.xes", return_legacy_log_object=True) + + data, feature_names = event_based.apply(log) + target, classes = next_activity.apply(log, parameters={"enable_padding": True}) + target = np.array(target) + + model = Sequential() + model.add(LSTM(50, input_shape=(data.shape[1], data.shape[2]), return_sequences=True)) + model.add(TimeDistributed(Dense(len(classes), activation='softmax'))) + + model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) + + model.summary() + + # train the model + model.fit(data, target, epochs=100) + + # test the model on an event log (in this case the same) + + # re-extract the features + data, feature_names = event_based.apply(log, parameters={"feature_names": feature_names}) + + # perform the prediction + predictions = model.predict(data) + predictions = [[classes[np.argmax(y)] for y in x] for x in predictions] + + print(predictions) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/lstm_predict_remaining_time.py b/pm4py/examples/lstm_predict_remaining_time.py new file mode 100644 index 0000000000000000000000000000000000000000..ff5fe36f891da989f22f7403413273c39faed374 --- /dev/null +++ b/pm4py/examples/lstm_predict_remaining_time.py @@ -0,0 +1,60 @@ +import numpy as np +import pm4py +from pm4py.algo.transformation.log_to_features.variants import event_based +from pm4py.algo.transformation.log_to_target.variants import remaining_time +from sklearn.preprocessing import MinMaxScaler +from tensorflow.keras.models import Sequential +from tensorflow.keras.layers import LSTM, Dense +from tensorflow.keras.optimizers import Adam + + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/running-example.xes", return_legacy_log_object=True) + max_len_log = max([len(x) for x in log]) + + data, feature_names = event_based.apply(log) + target, classes = remaining_time.apply(log, parameters={"enable_padding": True}) + target = np.array(target) + scaler = MinMaxScaler(feature_range=(-1, 1)) + # Reshape for scaling + target_reshaped = target.reshape(-1, 1) + target_scaled = scaler.fit_transform(target_reshaped) + # Reshape back to original shape + target_scaled = target_scaled.reshape(-1, max_len_log) + + model = Sequential() + model.add(LSTM(50, input_shape=(data.shape[1], data.shape[2]), return_sequences=True)) # Adjust the input shape as necessary + model.add(Dense(1, activation='linear')) + + model.compile(optimizer=Adam(), loss='mean_squared_error', metrics=['mae']) + + model.summary() + + # train the model + history = model.fit(data, target_scaled, batch_size=32, epochs=100, validation_split=0.2) + + # test the model on an event log (in this case the same) + + # re-extract the features + test_log = log + data, feature_names = event_based.apply(test_log, parameters={"feature_names": feature_names}) + + # Make predictions + predictions_scaled = model.predict(data) + print(predictions_scaled) + # Ensuring prediction values are within range + predictions_clipped = np.clip(predictions_scaled, -1, 1) + # Reshape predictions for inverse transformation + predictions_scaled_reshaped = predictions_clipped.reshape(-1, 1) + # Inverse transform to original scale + predictions_original = scaler.inverse_transform(predictions_scaled_reshaped) + # Reshape back to original predictions shape + predictions_original = predictions_original.reshape(-1, max_len_log) + + # final output: + print(predictions_original) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/manual_log_generation.py b/pm4py/examples/manual_log_generation.py new file mode 100644 index 0000000000000000000000000000000000000000..4a9b0f46a62013eaf9fc3af817fbd6311993a906 --- /dev/null +++ b/pm4py/examples/manual_log_generation.py @@ -0,0 +1,27 @@ +from copy import deepcopy + +from pm4py.objects.log.obj import EventLog, Trace, Event + + +def execute_script(): + L = EventLog() + e1 = Event() + e1["concept:name"] = "A" + e2 = Event() + e2["concept:name"] = "B" + e3 = Event() + e3["concept:name"] = "C" + e4 = Event() + e4["concept:name"] = "D" + t = Trace() + t.append(e1) + t.append(e2) + t.append(e3) + t.append(e4) + for i in range(10000): + L.append(deepcopy(t)) + print(len(L)) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/memory_profilation_alignments.py b/pm4py/examples/memory_profilation_alignments.py new file mode 100644 index 0000000000000000000000000000000000000000..0b90204e4416169a4083ea854135dc6d2c292562 --- /dev/null +++ b/pm4py/examples/memory_profilation_alignments.py @@ -0,0 +1,45 @@ +from pm4py.objects.log.importer.xes import importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments +import memory_profiler +import time +import os +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + + +class Shared: + log = importer.apply(os.path.join("..", "tests", "input_data", "receipt.xes")) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + + +def nothing(): + time.sleep(3) + + +def f(): + aa = time.time() + aligned_traces = alignments.apply(Shared.log, Shared.net, Shared.im, Shared.fm, + variant=alignments.Variants.VERSION_DIJKSTRA_LESS_MEMORY) + bb = time.time() + print(bb - aa) + + +def g(): + aa = time.time() + aligned_traces = alignments.apply(Shared.log, Shared.net, Shared.im, Shared.fm, + variant=alignments.Variants.VERSION_DIJKSTRA_NO_HEURISTICS) + bb = time.time() + print(bb - aa) + + +if __name__ == "__main__": + memory_usage = memory_profiler.memory_usage(nothing) + nothing = max(memory_usage) + print(nothing) + memory_usage = memory_profiler.memory_usage(f) + print(memory_usage) + print(max(memory_usage) - nothing) + memory_usage = memory_profiler.memory_usage(g) + print(memory_usage) + print(max(memory_usage) - nothing) diff --git a/pm4py/examples/memory_profilation_iterparse.py b/pm4py/examples/memory_profilation_iterparse.py new file mode 100644 index 0000000000000000000000000000000000000000..4faab19d037a8fcaa84e45751342926df58b7633 --- /dev/null +++ b/pm4py/examples/memory_profilation_iterparse.py @@ -0,0 +1,73 @@ +import os +import time + +import memory_profiler + +from pm4py.objects.log.importer.xes import importer as xes_importer + +log_path = os.path.join("..", "tests", "input_data", "receipt.xes") + + +def nothing(): + time.sleep(3) + + +def import_memory_efficient(): + log = xes_importer.apply(log_path, variant=xes_importer.Variants.ITERPARSE_MEM_COMPRESSED) + + +def import_classic(): + log = xes_importer.apply(log_path, variant=xes_importer.Variants.ITERPARSE) + + +def import_line_by_line(): + log = xes_importer.apply(log_path, variant=xes_importer.Variants.LINE_BY_LINE) + + +def import_line_by_line_only_conceptname_and_timetimestamp(): + log = xes_importer.apply(log_path, variant=xes_importer.Variants.LINE_BY_LINE, parameters={ + xes_importer.Variants.LINE_BY_LINE.value.Parameters.SET_ATTRIBUTES_TO_READ: {"concept:name", "time:timestamp"}}) + + +def import_line_by_line_only_conceptname(): + log = xes_importer.apply(log_path, variant=xes_importer.Variants.LINE_BY_LINE, parameters={ + xes_importer.Variants.LINE_BY_LINE.value.Parameters.SET_ATTRIBUTES_TO_READ: {"concept:name"}}) + + +def execute_script(): + memory_usage = memory_profiler.memory_usage(nothing) + nothing_usage = max(memory_usage) + aa = time.time() + memory_usage_iterparse_efficient = memory_profiler.memory_usage(import_memory_efficient) + bb = time.time() + print(log_path, "iterparse memory efficient time", bb - aa) + print(log_path, "iterparse memory efficient memory occupation", + max(memory_usage_iterparse_efficient) - nothing_usage) + aa = time.time() + memory_usage_iterparse_classic = memory_profiler.memory_usage(import_classic) + bb = time.time() + print(log_path, "iterparse classic time", bb - aa) + print(log_path, "iterparse classic memory occupation", max(memory_usage_iterparse_classic) - nothing_usage) + aa = time.time() + memory_usage_line_by_line = memory_profiler.memory_usage(import_line_by_line) + bb = time.time() + print(log_path, "line by line time", bb - aa) + print(log_path, "line by line memory occupation", max(memory_usage_line_by_line) - nothing_usage) + aa = time.time() + memory_usage_line_by_line_only_cn_and_tt = memory_profiler.memory_usage( + import_line_by_line_only_conceptname_and_timetimestamp) + bb = time.time() + print(log_path, "line by line only cn and tt time", bb - aa) + print(log_path, "line by line only cn and tt memory occupation", + max(memory_usage_line_by_line_only_cn_and_tt) - nothing_usage) + aa = time.time() + memory_usage_line_by_line_only_cn = memory_profiler.memory_usage( + import_line_by_line_only_conceptname) + bb = time.time() + print(log_path, "line by line only cn time", bb - aa) + print(log_path, "line by line only cn memory occupation", + max(memory_usage_line_by_line_only_cn) - nothing_usage) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/merging_case_relations.py b/pm4py/examples/merging_case_relations.py new file mode 100644 index 0000000000000000000000000000000000000000..037afa0fb79f4f41ec90ca7e422d1a6d8e649497 --- /dev/null +++ b/pm4py/examples/merging_case_relations.py @@ -0,0 +1,21 @@ +import pm4py +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils +from pm4py.algo.merging.case_relations import algorithm as case_relations_merging +from examples import examples_conf +import os + + +def execute_script(): + dataframe1 = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "interleavings", "receipt_even.csv")) + dataframe2 = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "interleavings", "receipt_odd.csv")) + dataframe1 = dataframe_utils.convert_timestamp_columns_in_df(dataframe1, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + dataframe2 = dataframe_utils.convert_timestamp_columns_in_df(dataframe2, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + case_relations = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "interleavings", "case_relations.csv")) + merged = case_relations_merging.apply(dataframe1, dataframe2, case_relations) + dfg, sa, ea = pm4py.discover_dfg(merged) + pm4py.view_dfg(dfg, sa, ea, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ml_insert_case_arrival_finish.py b/pm4py/examples/ml_insert_case_arrival_finish.py new file mode 100644 index 0000000000000000000000000000000000000000..3b673119a04984a1c01ff5e486fa7ed6c43652dc --- /dev/null +++ b/pm4py/examples/ml_insert_case_arrival_finish.py @@ -0,0 +1,11 @@ +import pm4py + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/running-example.xes") + log = pm4py.insert_case_arrival_finish_rate(log) + print(log) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ml_insert_waiting_service_time.py b/pm4py/examples/ml_insert_waiting_service_time.py new file mode 100644 index 0000000000000000000000000000000000000000..83ef90b53ae9d56f0936578088323c72918ed149 --- /dev/null +++ b/pm4py/examples/ml_insert_waiting_service_time.py @@ -0,0 +1,11 @@ +import pm4py + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/running-example.xes") + log = pm4py.insert_case_service_waiting_time(log) + print(log) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ml_log_to_target_vectory.py b/pm4py/examples/ml_log_to_target_vectory.py new file mode 100644 index 0000000000000000000000000000000000000000..ffd439986a0f56e618ab483f837eb2c97db77dd2 --- /dev/null +++ b/pm4py/examples/ml_log_to_target_vectory.py @@ -0,0 +1,17 @@ +import pm4py +from pm4py.algo.transformation.log_to_target import algorithm as log_to_target + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/running-example.xes") + rem_time_target, classes = log_to_target.apply(log, variant=log_to_target.Variants.REMAINING_TIME) + print(rem_time_target) + next_time_target, classes = log_to_target.apply(log, variant=log_to_target.Variants.NEXT_TIME) + print(next_time_target) + next_activity_target, next_activities = log_to_target.apply(log, variant=log_to_target.Variants.NEXT_ACTIVITY) + print(next_activity_target) + print(next_activities) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ml_outcome_enriched.py b/pm4py/examples/ml_outcome_enriched.py new file mode 100644 index 0000000000000000000000000000000000000000..d21ea48216e2d3a832eaf43917a0398362f716ae --- /dev/null +++ b/pm4py/examples/ml_outcome_enriched.py @@ -0,0 +1,11 @@ +import pm4py + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/running-example.xes") + log = pm4py.extract_outcome_enriched_dataframe(log) + print(log) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/montecarlo_dfg.py b/pm4py/examples/montecarlo_dfg.py new file mode 100644 index 0000000000000000000000000000000000000000..8d4ba2e10b409855db91bbbc0e3a26f8d782d455 --- /dev/null +++ b/pm4py/examples/montecarlo_dfg.py @@ -0,0 +1,32 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.dfg import algorithm as dfg_miner +from pm4py.objects.conversion.dfg import converter as dfg_conv +from pm4py.algo.simulation.montecarlo import algorithm as montecarlo_simulation +from pm4py.algo.conformance.tokenreplay.algorithm import Variants +import os + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + frequency_dfg = dfg_miner.apply(log, variant=dfg_miner.Variants.FREQUENCY) + net, im, fm = dfg_conv.apply(frequency_dfg) + # perform the Montecarlo simulation with the arrival rate inferred by the log (the simulation lasts 5 secs) + parameters = {} + parameters[ + montecarlo_simulation.Variants.PETRI_SEMAPH_FIFO.value.Parameters.TOKEN_REPLAY_VARIANT] = Variants.BACKWARDS + parameters[montecarlo_simulation.Variants.PETRI_SEMAPH_FIFO.value.Parameters.PARAM_ENABLE_DIAGNOSTICS] = False + parameters[montecarlo_simulation.Variants.PETRI_SEMAPH_FIFO.value.Parameters.PARAM_MAX_THREAD_EXECUTION_TIME] = 5 + log, res = montecarlo_simulation.apply(log, net, im, fm, parameters=parameters) + print("\n(Montecarlo - Petri net) case arrival ratio inferred from the log") + print(res["median_cases_ex_time"]) + print(res["total_cases_time"]) + # perform the Montecarlo simulation with the arrival rate specified (the simulation lasts 5 secs) + parameters[montecarlo_simulation.Variants.PETRI_SEMAPH_FIFO.value.Parameters.PARAM_CASE_ARRIVAL_RATIO] = 60 + log, res = montecarlo_simulation.apply(log, net, im, fm, parameters=parameters) + print("\n(Montecarlo - Petri net) case arrival ratio specified by the user") + print(res["median_cases_ex_time"]) + print(res["total_cases_time"]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/montecarlo_petri_net.py b/pm4py/examples/montecarlo_petri_net.py new file mode 100644 index 0000000000000000000000000000000000000000..7574aa0ded58ffeb98d56dd0806e8d7b6d4aa902 --- /dev/null +++ b/pm4py/examples/montecarlo_petri_net.py @@ -0,0 +1,29 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.simulation.montecarlo import algorithm as montecarlo_simulation +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +import os + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + # perform the Montecarlo simulation with the arrival rate inferred by the log (the simulation lasts 5 secs) + parameters = {} + parameters[montecarlo_simulation.Variants.PETRI_SEMAPH_FIFO.value.Parameters.PARAM_ENABLE_DIAGNOSTICS] = False + parameters[montecarlo_simulation.Variants.PETRI_SEMAPH_FIFO.value.Parameters.PARAM_MAX_THREAD_EXECUTION_TIME] = 5 + log, res = montecarlo_simulation.apply(log, net, im, fm, parameters=parameters) + print("\n(Montecarlo - Petri net) case arrival ratio inferred from the log") + print(res["median_cases_ex_time"]) + print(res["total_cases_time"]) + # perform the Montecarlo simulation with the arrival rate specified (the simulation lasts 5 secs) + parameters[montecarlo_simulation.Variants.PETRI_SEMAPH_FIFO.value.Parameters.PARAM_CASE_ARRIVAL_RATIO] = 60 + log, res = montecarlo_simulation.apply(log, net, im, fm, parameters=parameters) + print("\n(Montecarlo - Petri net) case arrival ratio specified by the user") + print(res["median_cases_ex_time"]) + print(res["total_cases_time"]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/multialignments.py b/pm4py/examples/multialignments.py new file mode 100644 index 0000000000000000000000000000000000000000..0a05266018ed88304bbc9990fd21d0f26b0c28bc --- /dev/null +++ b/pm4py/examples/multialignments.py @@ -0,0 +1,18 @@ +import os +from pm4py.algo.conformance.multialignments.variants.discounted_a_star import apply as multii +from pm4py.algo.conformance.multialignments.algorithm import Parameters +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.petri_net.importer import importer as petri_importer + + +if __name__ == '__main__': + log_path = os.path.join("..", "tests", "input_data", "running-example.xes") + pnml_path = os.path.join("..", "tests", "input_data", "running-example.pnml") + log = xes_importer.apply(log_path) + net, marking, fmarking = petri_importer.apply(pnml_path) + + THETA = 1.1 + MU = 20 + multiali = multii(log,net,marking,fmarking, parameters={Parameters.EXPONENT:THETA, Parameters.MARKING_LIMIT:MU}) + print("Multi-alignment:",multiali['multi-alignment']) + print("Maximal Levenshtein Edit Distance to Log:", multiali['max_distance_to_log']) diff --git a/pm4py/examples/murata_reduction.py b/pm4py/examples/murata_reduction.py new file mode 100644 index 0000000000000000000000000000000000000000..07a4fbbe5dbb059c02d6e7ed2b3c6cf51ebf9d94 --- /dev/null +++ b/pm4py/examples/murata_reduction.py @@ -0,0 +1,37 @@ +import pm4py +from pm4py.objects.petri_net.utils import petri_utils +from examples import examples_conf + + + +def execute_script(): + net = pm4py.PetriNet() + im = pm4py.Marking() + fm = pm4py.Marking() + p1 = pm4py.PetriNet.Place("p1") + p2 = pm4py.PetriNet.Place("p2") + p3 = pm4py.PetriNet.Place("p3") + + A = pm4py.PetriNet.Transition("A", "A") + B = pm4py.PetriNet.Transition("B", "B") + net.places.add(p1) + net.places.add(p2) + net.places.add(p3) + net.transitions.add(A) + net.transitions.add(B) + petri_utils.add_arc_from_to(A, p1, net) + petri_utils.add_arc_from_to(A, p2, net) + petri_utils.add_arc_from_to(A, p3, net) + petri_utils.add_arc_from_to(p1, B, net) + petri_utils.add_arc_from_to(p2, B, net) + petri_utils.add_arc_from_to(p3, B, net) + + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + net, im, fm = pm4py.reduce_petri_net_implicit_places(net, im, fm) + + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/neo4j_ocel.py b/pm4py/examples/neo4j_ocel.py new file mode 100644 index 0000000000000000000000000000000000000000..a802696b3664dd67d3615e06955a4646970933f3 --- /dev/null +++ b/pm4py/examples/neo4j_ocel.py @@ -0,0 +1,45 @@ +import pm4py +from neo4j import GraphDatabase +from examples import examples_conf +from pm4py.util import nx_utils +import importlib.util + + +def execute_script(): + ocel = pm4py.read_ocel2("../tests/input_data/ocel/ocel20_example.jsonocel") + #ocel = pm4py.read_ocel("../tests/input_data/ocel/ocel_order_simulated.csv") + + # prints the actual contents of the OCEL + print(ocel) + + uri = "neo4j://localhost:7687" + username = "neo4j" + password = "ciaociao" + + driver = GraphDatabase.driver(uri, auth=(username, password)) + + with driver.session() as session: + # transforms the OCEL to a NetworkX DiGraph + nx_graph = pm4py.convert_ocel_to_networkx(ocel) + + # uploads the NetworkX DiGraph (representing the OCEL) to Neo4J + nx_utils.neo4j_upload(nx_graph, session) + + # gets back the same NetworkX DiGraph starting from Neo4J + nx_graph2 = nx_utils.neo4j_download(session) + + # convert the obtained NetworkX DiGraph into an OCEL + ocel2 = nx_utils.nx_to_ocel(nx_graph2) + + # prints the contents of the 'new' OCEL + print(ocel2) + + # shows the object-centric directly-follows graph on the screen + if importlib.util.find_spec("graphviz"): + ocdfg = pm4py.discover_ocdfg(ocel2) + pm4py.view_ocdfg(ocdfg, annotation="frequency", format=examples_conf.TARGET_IMG_FORMAT) + pm4py.view_ocdfg(ocdfg, annotation="performance", format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/network_analysis.py b/pm4py/examples/network_analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..94f466fc5708c86ee91bff84fb5f58dcaf1d4482 --- /dev/null +++ b/pm4py/examples/network_analysis.py @@ -0,0 +1,44 @@ +import os +import pm4py +from examples import examples_conf +import importlib.util + + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + + # frequency view of the network analysis + + # OUT column: case identifier + # IN column: case identifier (the next event having the same case identifier is matched) + # NODE column: the attribute to use to classify the node. In this case, we use the org:group (organizational group) + # EDGE column: the attribute (of the source event) to use to classify the edge. In this case, we use the + # concept:name (activity) + + frequency_edges = pm4py.discover_network_analysis(log, out_column="case:concept:name", in_column="case:concept:name", node_column_source="org:group", node_column_target="org:group", edge_column="concept:name", performance=False) + + if importlib.util.find_spec("graphviz"): + pm4py.view_network_analysis(frequency_edges, variant="frequency", format=examples_conf.TARGET_IMG_FORMAT, edge_threshold=10) + + # performance view of the network analysis + + # OUT column: case identifier + # IN column: case identifier (the next event having the same case identifier is matched) + # NODE column: the attribute to use to classify the node. In this case, we use the org:group (organizational group) + # EDGE column: the attribute (of the source event) to use to classify the edge. In this case, we use the + # concept:name (activity) + + performance_edges = pm4py.discover_network_analysis(log, out_column="case:concept:name", in_column="case:concept:name", node_column_source="org:group", node_column_target="org:group", edge_column="concept:name", performance=True) + + if importlib.util.find_spec("graphviz"): + pm4py.view_network_analysis(performance_edges, variant="performance", format=examples_conf.TARGET_IMG_FORMAT, edge_threshold=10) + + resource_group_edges = pm4py.discover_network_analysis(log, out_column="case:concept:name", in_column="case:concept:name", node_column_source="org:resource", node_column_target="org:group", edge_column="org:resource", performance=False) + + if importlib.util.find_spec("graphviz"): + pm4py.view_network_analysis(resource_group_edges, variant="frequency", format=examples_conf.TARGET_IMG_FORMAT, edge_threshold=10) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/nx_ocel_to_graphviz.py b/pm4py/examples/nx_ocel_to_graphviz.py new file mode 100644 index 0000000000000000000000000000000000000000..9f13ebd44a480767db118dd235819e81b6ca22d5 --- /dev/null +++ b/pm4py/examples/nx_ocel_to_graphviz.py @@ -0,0 +1,21 @@ +import pm4py +from examples import examples_conf +import importlib.util + + +def execute_script(): + ocel = pm4py.read_ocel2("../tests/input_data/ocel/ocel20_example.jsonocel") + + # convers the OCEL to a NetworkX graph with events, objects, E2O, O2O, and object changes + event_graph = pm4py.convert_ocel_to_networkx(ocel) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.networkx import visualizer as nx_to_gv_vis + + # visualize the NX DiGraph using Graphviz + gviz = nx_to_gv_vis.apply(event_graph, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + nx_to_gv_vis.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/nx_traditional_to_graphviz.py b/pm4py/examples/nx_traditional_to_graphviz.py new file mode 100644 index 0000000000000000000000000000000000000000..c58b0e1ea22d3b3c877672bf75fdaff242c327c3 --- /dev/null +++ b/pm4py/examples/nx_traditional_to_graphviz.py @@ -0,0 +1,21 @@ +import pm4py +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/running-example.xes") + # gets an 'event graph' where events, cases and their relationships + # are represented in a graph (NetworkX DiGraph) + event_graph = pm4py.convert_log_to_networkx(log) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.networkx import visualizer as nx_to_gv_vis + + # visualize the NX DiGraph using Graphviz + gviz = nx_to_gv_vis.apply(event_graph, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + nx_to_gv_vis.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/object_centric_petri_net_discovery.py b/pm4py/examples/object_centric_petri_net_discovery.py new file mode 100644 index 0000000000000000000000000000000000000000..75f7e416dfaea370044f736b83d434ae6aa7de8c --- /dev/null +++ b/pm4py/examples/object_centric_petri_net_discovery.py @@ -0,0 +1,17 @@ +import pm4py +from examples import examples_conf +import os +import importlib.util + + +def execute_script(): + ocel = pm4py.read_ocel(os.path.join("..", "tests", "input_data", "ocel", "example_log.jsonocel")) + model = pm4py.discover_oc_petri_net(ocel) + print(model.keys()) + + if importlib.util.find_spec("graphviz"): + pm4py.view_ocpn(model, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocdfg_discovery.py b/pm4py/examples/ocdfg_discovery.py new file mode 100644 index 0000000000000000000000000000000000000000..82b3b112a1228f0c1c005017a5ba0008bb65b2d3 --- /dev/null +++ b/pm4py/examples/ocdfg_discovery.py @@ -0,0 +1,19 @@ +import pm4py +from examples import examples_conf +import os +import importlib.util + + +def execute_script(): + ocel = pm4py.read_ocel(os.path.join("..", "tests", "input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel) + + if importlib.util.find_spec("graphviz"): + # views the model with the frequency annotation + pm4py.view_ocdfg(ocdfg, format=examples_conf.TARGET_IMG_FORMAT) + # views the model with the performance annotation + pm4py.view_ocdfg(ocdfg, format=examples_conf.TARGET_IMG_FORMAT, annotation="performance", performance_aggregation="median") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocel20_import_export.py b/pm4py/examples/ocel20_import_export.py new file mode 100644 index 0000000000000000000000000000000000000000..58aa14dff52e2d8fa0d3bf1340384459a6598cfe --- /dev/null +++ b/pm4py/examples/ocel20_import_export.py @@ -0,0 +1,31 @@ +import pm4py +import os +import traceback + + +def execute_script(): + try: + ocel = pm4py.read_ocel2("../tests/input_data/ocel/ocel20_example.sqlite") + pm4py.write_ocel2(ocel, "ocel20_example_bis.sqlite") + pm4py.write_ocel2(ocel, "ocel20_example_bis.xmlocel") + ocel = pm4py.read_ocel2("../tests/input_data/ocel/ocel20_example.xmlocel") + pm4py.write_ocel2(ocel, "ocel20_example_tris.sqlite") + pm4py.write_ocel2(ocel, "ocel20_example_tris.xmlocel") + except: + traceback.print_exc() + + if os.path.exists("ocel20_example_bis.sqlite"): + os.remove("ocel20_example_bis.sqlite") + + if os.path.exists("ocel20_example_bis.xmlocel"): + os.remove("ocel20_example_bis.xmlocel") + + if os.path.exists("ocel20_example_tris.sqlite"): + os.remove("ocel20_example_tris.sqlite") + + if os.path.exists("ocel20_example_tris.xmlocel"): + os.remove("ocel20_example_tris.xmlocel") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocel_clustering.py b/pm4py/examples/ocel_clustering.py new file mode 100644 index 0000000000000000000000000000000000000000..ccd80e40b2d9ffd42f4e5b26fc3c70b7d669cc50 --- /dev/null +++ b/pm4py/examples/ocel_clustering.py @@ -0,0 +1,19 @@ +import pm4py +from pm4py.algo.transformation.ocel.split_ocel import algorithm as ocel_splitter + + +def execute_script(): + ocel = pm4py.read_ocel("../tests/input_data/ocel/example_log.jsonocel") + object_type = "order" + #ocel = pm4py.read_ocel("../tests/input_data/ocel/recruiting-red.jsonocel") + #object_type = "applications" + # obtains an OCEL for every application, containing the events of the application and of the connected + # objects (offers) + lst_ocels = ocel_splitter.apply(ocel, variant=ocel_splitter.Variants.ANCESTORS_DESCENDANTS, parameters={"object_type": object_type}) + # alternatively, performs a clustering grouping by sub-OCELs following the same patterns (lifecycle activities and connection with offers) + ocel_clusters = pm4py.cluster_equivalent_ocel(ocel, object_type) + print(sorted([len(y) for x, y in ocel_clusters.items()])) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocel_enrichment.py b/pm4py/examples/ocel_enrichment.py new file mode 100644 index 0000000000000000000000000000000000000000..ebeae9a43052ad66b026bf5a3823682e1294995d --- /dev/null +++ b/pm4py/examples/ocel_enrichment.py @@ -0,0 +1,17 @@ +import pm4py + + +def execute_script(): + ocel = pm4py.read_ocel("../tests/input_data/ocel/example_log.jsonocel") + # creates artificial O2O relationships based on the object interaction, descendants, inheritance, cobirth, codeath graph + ocel = pm4py.ocel_o2o_enrichment(ocel) + # creates artificial E2O qualifications based on the fact that an event creates/terminates the lifecycle of an object + ocel = pm4py.ocel_e2o_lifecycle_enrichment(ocel) + # prints the E2O table + print(ocel.relations) + # prints the O2O table + print(ocel.o2o) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocel_filter_cc.py b/pm4py/examples/ocel_filter_cc.py new file mode 100644 index 0000000000000000000000000000000000000000..3603e4b6a7d17125f8d06bac303287e8a1f0faf8 --- /dev/null +++ b/pm4py/examples/ocel_filter_cc.py @@ -0,0 +1,19 @@ +import pm4py +import sys + + +def execute_script(): + ocel = pm4py.read_ocel("../tests/input_data/ocel/example_log.jsonocel") + print(ocel) + # filters the connected components of the OCEL in which there is at least a delivery, + # obtaining a filtered OCEL back. + ocel_with_del = pm4py.filter_ocel_cc_otype(ocel, "delivery") + print(ocel_with_del) + # filters the connected components of the OCEL with at least five different objects, + # obtaining a filtered OCEL back. + ocel_with_three_objs = pm4py.filter_ocel_cc_length(ocel, 5, sys.maxsize) + print(ocel_with_three_objs) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocel_merge_duplicates.py b/pm4py/examples/ocel_merge_duplicates.py new file mode 100644 index 0000000000000000000000000000000000000000..98d1f3f4c3099ed61ea9ef1b9550744822795a7c --- /dev/null +++ b/pm4py/examples/ocel_merge_duplicates.py @@ -0,0 +1,12 @@ +import pm4py + + +def execute_script(): + ocel = pm4py.read_ocel("../tests/input_data/ocel/example_log.jsonocel") + print(ocel.get_extended_table()) + ocel = pm4py.ocel_merge_duplicates(ocel) + print(ocel.get_extended_table()) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocel_occm_example.py b/pm4py/examples/ocel_occm_example.py new file mode 100644 index 0000000000000000000000000000000000000000..c77e277c4144db3e92d08c3acc936ec11bfe1d2f --- /dev/null +++ b/pm4py/examples/ocel_occm_example.py @@ -0,0 +1,60 @@ +import pm4py +from pm4py.algo.transformation.ocel.split_ocel import algorithm as split_ocel + + +def execute_script(): + ocel = pm4py.read_ocel("../tests/input_data/ocel/example_log.jsonocel") + # gets an OCEL describing the executions of the objects of a given object type + lst_ocels = split_ocel.apply(ocel, variant=split_ocel.Variants.ANCESTORS_DESCENDANTS, parameters={"object_type": "order"}) + + # CONDITION 1: check if an order is associated with at least a delivery + for oc in lst_ocels: + oc_filtered = pm4py.filter_ocel_event_attribute(oc, "ocel:activity", ["Create Order", "Create Delivery"]) + oc_filtered = [(x["ocel:activity"], x["ocel:timestamp"].timestamp()) for x in oc_filtered.events.to_dict("records")] + idxs_create_order = [i for i in range(len(oc_filtered)) if oc_filtered[i][0] == "Create Order"] + order_is_ok = True + for i in idxs_create_order: + deliveries = [oc_filtered[j] for j in range(i+1,len(oc_filtered)) if oc_filtered[j][0] == "Create Delivery"] + #print(deliveries) + if len(deliveries) < 1: + order_is_ok = False + if not order_is_ok: + print("condition 1 VIOLATING order ", oc.parameters["@@central_object"]) + + # CONDITION 2: check if the temporal distance between an order and the delivery is less than a specified amount of time + for oc in lst_ocels: + oc_filtered = pm4py.filter_ocel_event_attribute(oc, "ocel:activity", ["Create Order", "Create Delivery"]) + oc_filtered = [(x["ocel:activity"], x["ocel:timestamp"].timestamp()) for x in oc_filtered.events.to_dict("records")] + idxs_create_order = [i for i in range(len(oc_filtered)) if oc_filtered[i][0] == "Create Order"] + order_is_ok = True + for i in idxs_create_order: + time_create_order = oc_filtered[i][1] + deliveries = [oc_filtered[j] for j in range(i+1,len(oc_filtered)) if oc_filtered[j][0] == "Create Delivery"] + for d in deliveries: + time_create_delivery = d[1] + # consider anomalous when the event of create delivery happens more than 1000000 seconds than the event of create order + if (time_create_delivery - time_create_order) > 1000000: + order_is_ok = False + break + if not order_is_ok: + print("condition 2 VIOLATING order ", oc.parameters["@@central_object"]) + + # CONDITION 3: check conditions on the time from the previous activity (any) given 'Create Delivery' + for oc0 in lst_ocels: + oc = [(x["ocel:activity"], x["ocel:timestamp"].timestamp()) for x in oc0.events.to_dict("records")] + idxs_create_delivery = [i for i in range(len(oc)) if oc[i][0] == "Create Delivery"] + delivery_is_ok = True + for i in idxs_create_delivery: + if i > 0: + time_create_delivery = oc[i][1] + time_previous = oc[i-1][1] + # consider anomalous when the event of create delivery happens more than 100000 after the timestamp of the previous event + if (time_create_delivery - time_previous) > 100000: + delivery_is_ok = False + break + if not delivery_is_ok: + print("condition 3 VIOLATING delivery ", oc0.parameters["@@central_object"]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocel_saw_net_disc.py b/pm4py/examples/ocel_saw_net_disc.py new file mode 100644 index 0000000000000000000000000000000000000000..98867dadeefc88b4d9fd6f127247b7d01a373299 --- /dev/null +++ b/pm4py/examples/ocel_saw_net_disc.py @@ -0,0 +1,20 @@ +import pm4py +from pm4py.algo.discovery.ocel.saw_nets import algorithm as saw_nets_disc +from pm4py.objects.petri_net.obj import Marking +from examples import examples_conf +import importlib.util + + +def execute_script(): + ocel = pm4py.read_ocel("../tests/input_data/ocel/ocel_order_simulated.csv") + res = saw_nets_disc.apply(ocel) + + if importlib.util.find_spec("graphviz"): + for ot in res["ot_saw_nets"]: + pm4py.view_petri_net(res["ot_saw_nets"][ot], Marking(), Marking(), format=examples_conf.TARGET_IMG_FORMAT) + pm4py.view_petri_net(res["multi_saw_net"], Marking(), Marking(), decorations=res["decorations_multi_saw_net"], + format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocel_streaming.py b/pm4py/examples/ocel_streaming.py new file mode 100644 index 0000000000000000000000000000000000000000..32aa4480c0b20fbd252ecec53815eb8eaa520193 --- /dev/null +++ b/pm4py/examples/ocel_streaming.py @@ -0,0 +1,39 @@ +import pm4py +import os +from pm4py.streaming.stream import live_event_stream +from pm4py.streaming.util import event_stream_printer +from pm4py.streaming.conversion import ocel_flatts_distributor +from pm4py.objects.ocel.util import ocel_iterator + + +def execute_script(): + ocel = pm4py.read_ocel(os.path.join("..", "tests", "input_data", "ocel", "example_log.jsonocel")) + # we wants to use the traditional algorithms for streaming also on object-centric event logs. + # for this purpose, first we create two different event streams, one for the "order" object type + # and one for the "element" object type. + order_stream = live_event_stream.LiveEventStream() + element_stream = live_event_stream.LiveEventStream() + # Then, we register an algorithm for every one of them, which is a simple printer of the received events. + order_stream_printer = event_stream_printer.EventStreamPrinter() + element_stream_printer = event_stream_printer.EventStreamPrinter() + order_stream.register(order_stream_printer) + element_stream.register(element_stream_printer) + # Then, we create the distributor object. + # This registers different event streams for different object types. + flatts_distributor = ocel_flatts_distributor.OcelFlattsDistributor() + flatts_distributor.register("order", order_stream) + flatts_distributor.register("element", element_stream) + order_stream.start() + element_stream.start() + # in this way, we iterate over the events of an OCEL + for ev in ocel_iterator.apply(ocel): + # ... and the OCEL event is sent to all the "flattened" event streams. + flatts_distributor.append(ev) + # since the "flattened" event streams register a printer each, what we get is a print + # of all the events that reach these instances. + order_stream.stop() + element_stream.stop() + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocel_to_nx.py b/pm4py/examples/ocel_to_nx.py new file mode 100644 index 0000000000000000000000000000000000000000..80d982db4b62318079a4b03e5df093f16dab4b2f --- /dev/null +++ b/pm4py/examples/ocel_to_nx.py @@ -0,0 +1,14 @@ +import pm4py +import networkx as nx +import os + + +def execute_script(): + ocel = pm4py.read_ocel("../tests/input_data/ocel/example_log.jsonocel") + nx_digraph = pm4py.convert_ocel_to_networkx(ocel) + nx.write_gexf(nx_digraph, "converted_graph.gexf") + os.remove("converted_graph.gexf") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/ocel_validation.py b/pm4py/examples/ocel_validation.py new file mode 100644 index 0000000000000000000000000000000000000000..4dc21bc684491ab3174d232dfa7dbed49de7faba --- /dev/null +++ b/pm4py/examples/ocel_validation.py @@ -0,0 +1,17 @@ +from pm4py.objects.ocel.validation import jsonocel, xmlocel +import os +import importlib.util + + +def execute_script(): + if importlib.util.find_spec("jsonschema"): + # validate a JSONOCEL file against the corresponding schema + validation_result = jsonocel.apply(os.path.join("..", "tests", "input_data", "ocel", "example_log.jsonocel"), os.path.join("..", "tests", "input_data", "ocel", "validation", "schema.json")) + print(validation_result) + # validate an XMLOCEL file against the corresponding schema + validation_result = xmlocel.apply(os.path.join("..", "tests", "input_data", "ocel", "example_log.xmlocel"), os.path.join("..", "tests", "input_data", "ocel", "validation", "schema.xml")) + print(validation_result) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/orgmining_local_diagn.py b/pm4py/examples/orgmining_local_diagn.py new file mode 100644 index 0000000000000000000000000000000000000000..bad458927ef3030c554ca2b293269ec845fecef9 --- /dev/null +++ b/pm4py/examples/orgmining_local_diagn.py @@ -0,0 +1,31 @@ +import pm4py +import os +from pm4py.algo.organizational_mining.local_diagnostics import algorithm as local_diagnostics + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + ld = local_diagnostics.apply_from_group_attribute(log, parameters={local_diagnostics.Parameters.GROUP_KEY: "org:group"}) + # GROUP RELATIVE FOCUS (on a given type of work) specifies how much a resource group performed this type of work + # compared to the overall workload of the group. It can be used to measure how the workload of a resource group + # is distributed over different types of work, i.e., work diversification of the group. + print("\ngroup_relative_focus") + print(ld["group_relative_focus"]) + # GROUP RELATIVE STAKE (in a given type of work) specifies how much this type of work was performed by a certain + # resource group among all groups. It can be used to measure how the workload devoted to a certain type of work is + # distributed over resource groups in an organizational model, i.e., work participation by different groups. + print("\ngroup_relative_stake") + print(ld["group_relative_stake"]) + # GROUP COVERAGE with respect to a given type of work specifies the proportion of members of a resource group that + # performed this type of work. + print("\ngroup_coverage") + print(ld["group_coverage"]) + # GROUP MEMBER CONTRIBUTION of a member of a resource group with respect to the given type of work specifies how + # much of this type of work by the group was performed by the member. It can be used to measure how the workload + # of the entire group devoted to a certain type of work is distributed over the group members. + print("\ngroup_member_contribution") + print(ld["group_member_contribution"]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/perf_spectrum_visualization.py b/pm4py/examples/perf_spectrum_visualization.py new file mode 100644 index 0000000000000000000000000000000000000000..776d6801f8c3c4584ae0e1a327ce21d8899cc47c --- /dev/null +++ b/pm4py/examples/perf_spectrum_visualization.py @@ -0,0 +1,25 @@ +import pm4py +import os +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + + if importlib.util.find_spec("graphviz"): + pm4py.view_performance_spectrum(log, ["Confirmation of receipt", "T04 Determine confirmation of receipt", + "T10 Determine necessity to stop indication"], format=examples_conf.TARGET_IMG_FORMAT) + + df = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "receipt.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + + if importlib.util.find_spec("graphviz"): + pm4py.view_performance_spectrum(df, ["Confirmation of receipt", "T04 Determine confirmation of receipt", + "T10 Determine necessity to stop indication"], format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/performance_dfg_simulation.py b/pm4py/examples/performance_dfg_simulation.py new file mode 100644 index 0000000000000000000000000000000000000000..957a73886ec8a19f0227757cec45390ae171a496 --- /dev/null +++ b/pm4py/examples/performance_dfg_simulation.py @@ -0,0 +1,17 @@ +import os + +import pm4py +from pm4py.algo.simulation.playout.dfg import algorithm as dfg_simulator + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + frequency_dfg, sa, ea = pm4py.discover_dfg(log) + performance_dfg, sa, ea = pm4py.discover_performance_dfg(log) + simulated_log = dfg_simulator.apply(frequency_dfg, sa, ea, variant=dfg_simulator.Variants.PERFORMANCE, + parameters={"performance_dfg": performance_dfg}) + print(simulated_log) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/petri_manual_generation.py b/pm4py/examples/petri_manual_generation.py new file mode 100644 index 0000000000000000000000000000000000000000..362dd73e616723c891c08d7f1def170c086feda3 --- /dev/null +++ b/pm4py/examples/petri_manual_generation.py @@ -0,0 +1,58 @@ +import pm4py +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils import petri_utils +from examples import examples_conf +import importlib.util + + +def execute_script(): + net = PetriNet("test") + source = PetriNet.Place("source") + sink = PetriNet.Place("sink") + p1 = PetriNet.Place("p1") + p2 = PetriNet.Place("p2") + p3 = PetriNet.Place("p3") + p4 = PetriNet.Place("p4") + t1 = PetriNet.Transition("Confirmation of receipt", "Confirmation of receipt") + t2 = PetriNet.Transition("T02 Check confirmation of receipt", "T02 Check confirmation of receipt") + t3 = PetriNet.Transition("T04 Determine confirmation of receipt", "T04 Determine confirmation of receipt") + t4 = PetriNet.Transition("T05 Print and send confirmation of receipt", "T05 Print and send confirmation of receipt") + t5 = PetriNet.Transition("T06 Determine necessity of stop advice", "T06 Determine necessity of stop advice") + + net.places.add(source) + net.places.add(sink) + net.places.add(p1) + net.places.add(p2) + net.places.add(p3) + net.places.add(p4) + net.transitions.add(t1) + net.transitions.add(t2) + net.transitions.add(t3) + net.transitions.add(t4) + net.transitions.add(t5) + + petri_utils.add_arc_from_to(source, t1, net) + petri_utils.add_arc_from_to(t1, p1, net) + petri_utils.add_arc_from_to(p1, t2, net) + petri_utils.add_arc_from_to(t2, p2, net) + petri_utils.add_arc_from_to(p2, t3, net) + petri_utils.add_arc_from_to(t3, p3, net) + petri_utils.add_arc_from_to(p3, t4, net) + petri_utils.add_arc_from_to(t4, p4, net) + petri_utils.add_arc_from_to(p4, t5, net) + petri_utils.add_arc_from_to(t5, sink, net) + + im = Marking() + im[source] = 1 + + fm = Marking() + fm[sink] = 1 + + if importlib.util.find_spec("graphviz"): + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + #pm4py.write_pnml(net, im, fm, "receipt_one_variant.pnml") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/pn_to_pt.py b/pm4py/examples/pn_to_pt.py new file mode 100644 index 0000000000000000000000000000000000000000..e6e4623a3b5a6b586a22d63d9cf307d854558a4b --- /dev/null +++ b/pm4py/examples/pn_to_pt.py @@ -0,0 +1,52 @@ +import os +import traceback + +import pm4py +from pm4py.algo.analysis.woflan import algorithm as woflan +from pm4py.algo.analysis.workflow_net import algorithm as is_wf_net +from pm4py.objects.conversion.process_tree import converter as pt_converter +from pm4py.objects.conversion.wf_net import converter as wf_net_converter +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes")) + alpha_petri_net, alpha_im, alpha_fm = pm4py.discover_petri_net_alpha(log) + heuristics_petri_net, heuristics_im, heuristics_fm = pm4py.discover_petri_net_heuristics(log) + tree = pm4py.discover_process_tree_inductive(log) + print("tree discovered by inductive miner=") + print(tree) + inductive_petri_net, inductive_im, inductive_fm = pt_converter.apply(tree) + print("is_wf_net alpha", is_wf_net.apply(alpha_petri_net)) + print("is_wf_net heuristics", is_wf_net.apply(heuristics_petri_net)) + print("is_wf_net inductive", is_wf_net.apply(inductive_petri_net)) + print("woflan alpha", woflan.apply(alpha_petri_net, alpha_im, alpha_fm, + parameters={woflan.Parameters.RETURN_ASAP_WHEN_NOT_SOUND: True, + woflan.Parameters.PRINT_DIAGNOSTICS: False})) + print("woflan heuristics", woflan.apply(heuristics_petri_net, heuristics_im, heuristics_fm, + parameters={woflan.Parameters.RETURN_ASAP_WHEN_NOT_SOUND: True, + woflan.Parameters.PRINT_DIAGNOSTICS: False})) + print("woflan inductive", woflan.apply(inductive_petri_net, inductive_im, inductive_fm, + parameters={woflan.Parameters.RETURN_ASAP_WHEN_NOT_SOUND: True, + woflan.Parameters.PRINT_DIAGNOSTICS: False})) + try: + tree_alpha = wf_net_converter.apply(alpha_petri_net, alpha_im, alpha_fm) + print(tree_alpha) + except: + traceback.print_exc() + try: + tree_heuristics = wf_net_converter.apply(heuristics_petri_net, heuristics_im, heuristics_fm) + print(tree_heuristics) + except: + traceback.print_exc() + try: + tree_inductive = wf_net_converter.apply(inductive_petri_net, inductive_im, inductive_fm) + print(tree_inductive) + pm4py.view_process_tree(tree_inductive, format=examples_conf.TARGET_IMG_FORMAT) + except: + traceback.print_exc() + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/powl_discovery.py b/pm4py/examples/powl_discovery.py new file mode 100644 index 0000000000000000000000000000000000000000..869c0c14ddcc0bf311ba8e5ca02ea4d7f90eab95 --- /dev/null +++ b/pm4py/examples/powl_discovery.py @@ -0,0 +1,29 @@ +import pm4py +from examples import examples_conf +from pm4py.algo.discovery.powl.inductive.variants.powl_discovery_varaints import POWLDiscoveryVariant +import importlib.util + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/helpdesk.xes.gz", return_legacy_log_object=True) + + # discovers the POWL model + powl_model = pm4py.discover_powl(log, variant=POWLDiscoveryVariant.DYNAMIC_CLUSTERING, order_graph_filtering_threshold=0.6) + + # prints the repr of the POWL model + print(powl_model) + + # views the POWL model on the screen + if importlib.util.find_spec("graphviz"): + pm4py.view_powl(powl_model, format=examples_conf.TARGET_IMG_FORMAT, variant_str="basic") + pm4py.view_powl(powl_model, format=examples_conf.TARGET_IMG_FORMAT, variant_str="net") + + # converts the POWL model to a Petri net (which can be used for conformance checking) + net, im, fm = pm4py.convert_to_petri_net(powl_model) + + if importlib.util.find_spec("graphviz"): + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/powl_parsing.py b/pm4py/examples/powl_parsing.py new file mode 100644 index 0000000000000000000000000000000000000000..2b725f894693e8f0c9b0107b5abf5d5b294806b7 --- /dev/null +++ b/pm4py/examples/powl_parsing.py @@ -0,0 +1,27 @@ +import pm4py +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/running-example.xes") + + powl_model = pm4py.discover_powl(log) + # get the __repr__ of the POWL model + powl_string = str(powl_model) + print(powl_model) + + # parse the same string into a new POWL model + powl_model2 = pm4py.parse_powl_model_string(powl_string) + # see that the __repr__ of the two models are the same (same length) + powl_string2 = str(powl_model2) + print(powl_string2) + print(len(powl_string), len(powl_string2)) + + if importlib.util.find_spec("graphviz"): + # represents the parsed model on the screen + pm4py.view_powl(powl_model2, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/pripel_anonymization.py b/pm4py/examples/pripel_anonymization.py new file mode 100644 index 0000000000000000000000000000000000000000..f7e83519ee4023f8325665be1036927c32a6b3df --- /dev/null +++ b/pm4py/examples/pripel_anonymization.py @@ -0,0 +1,24 @@ +import pm4py +from pm4py.algo.anonymization.trace_variant_query import algorithm as trace_variant_query +from pm4py.algo.anonymization.pripel import algorithm as pripel +from pm4py.objects.log.obj import EventLog + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes") + log = EventLog(log[0:100]) + + epsilon = 0.5 + sacofa_result = trace_variant_query.apply(log=log, variant=trace_variant_query.Variants.SACOFA, + parameters={"epsilon": epsilon, "k": 30, "p": 4}) + anonymized_log = pripel.apply(log=log, trace_variant_query=sacofa_result, epsilon=epsilon) + + dfg, sa, ea = pm4py.discover_dfg(log) + pm4py.view_dfg(dfg, sa, ea, format="svg") + + dfg, sa, ea = pm4py.discover_dfg(anonymized_log) + pm4py.view_dfg(dfg, sa, ea, format="svg") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/process_tree_frequency_annotation.py b/pm4py/examples/process_tree_frequency_annotation.py new file mode 100644 index 0000000000000000000000000000000000000000..306a03080681a5ae5aee0b31a2b7669c56bcb670 --- /dev/null +++ b/pm4py/examples/process_tree_frequency_annotation.py @@ -0,0 +1,21 @@ +import pm4py +import os +from pm4py.algo.conformance.alignments.process_tree.util import search_graph_pt_frequency_annotation +from pm4py.visualization.process_tree import visualizer as pt_visualizer +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + tree = pm4py.discover_process_tree_inductive(log) + aligned_traces = pm4py.conformance_diagnostics_alignments(log, tree, return_diagnostics_dataframe=False) + tree = search_graph_pt_frequency_annotation.apply(tree, aligned_traces) + + if importlib.util.find_spec("graphviz"): + gviz = pt_visualizer.apply(tree, parameters={"format": examples_conf.TARGET_IMG_FORMAT}, variant=pt_visualizer.Variants.FREQUENCY_ANNOTATION) + pt_visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/process_tree_reduction.py b/pm4py/examples/process_tree_reduction.py new file mode 100644 index 0000000000000000000000000000000000000000..624eee18afbb8cf1c077eaca5c5eb3925f339a1d --- /dev/null +++ b/pm4py/examples/process_tree_reduction.py @@ -0,0 +1,24 @@ +import pm4py +import os +from pm4py.algo.reduction.process_tree import reducer +from pm4py.objects.log.importer.xes import importer as xes_importer +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "receipt.xes")) + # the tree discovered by inductive miner is huge and can replay the behavior of the log + tree = pm4py.discover_process_tree_inductive(log) + # to make a more effective replay, remove the elements that are not being used during the replay of the trace + # (that are the skippable ones, with empty intersection with the trace) + tree_first_trace = reducer.apply(tree, log[0], variant=reducer.Variants.TREE_TR_BASED) + + if importlib.util.find_spec("graphviz"): + pm4py.view_process_tree(tree, examples_conf.TARGET_IMG_FORMAT) + pm4py.view_process_tree(tree_first_trace, examples_conf.TARGET_IMG_FORMAT) + # much smaller, isn't it? :) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/queue_check_exponential.py b/pm4py/examples/queue_check_exponential.py new file mode 100644 index 0000000000000000000000000000000000000000..5c871cef7d81e5902e3554346f49e80b286183ea --- /dev/null +++ b/pm4py/examples/queue_check_exponential.py @@ -0,0 +1,45 @@ +import pm4py +import numpy as np +import scipy.stats as stats + + +def check_exponential_distribution(name, your_data): + print("\n\n### Testing exponential distribution for: "+name+"\n\n") + + your_data = np.array(your_data) + + lambda_ = 1. / your_data.mean() + + # KS test + D, p_value = stats.kstest(your_data, "expon", args=(0, 1. / lambda_)) + print(f"KS test statistic: {D}") + print(f"p-value: {p_value}") + + # Anderson-Darling test + result = stats.anderson(your_data, dist='expon') + print(f"AD test statistic: {result.statistic}") + for i in range(len(result.critical_values)): + sl, cv = result.significance_level[i], result.critical_values[i] + if result.statistic < cv: + print(f"Significance level: {sl} : data looks like an exponential distribution (fail to reject H0)") + else: + print(f"Significance level: {sl} : data does not look like an exponential distribution (reject H0)") + + +def execute_script(): + epsilon = 0.0001 + log = pm4py.read_xes('../tests/input_data/receipt.xes', return_legacy_log_object=True) + time_intervals = pm4py.convert_log_to_time_intervals(log, ('Confirmation of receipt', 'T02 Check confirmation of receipt')) + service_times = [min(x[1]-x[0], epsilon) for x in time_intervals] + arrival_diffs = [] + i = 0 + while i < len(time_intervals)-1: + arrival_diffs.append(max(time_intervals[i+1][0]-time_intervals[i][0], epsilon)) + i = i + 1 + + check_exponential_distribution("service_times", service_times) + check_exponential_distribution("arrival_diffs", arrival_diffs) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/queue_check_max_conc_exec.py b/pm4py/examples/queue_check_max_conc_exec.py new file mode 100644 index 0000000000000000000000000000000000000000..c50f4f25a18a2240afb3a1d788a1ad441e1b4e34 --- /dev/null +++ b/pm4py/examples/queue_check_max_conc_exec.py @@ -0,0 +1,34 @@ +import pm4py +from pm4py.algo.transformation.log_to_interval_tree.variants import open_paths + + +def execute_script(): + """ + Scripts checking the maximum number of concurrently open paths (in distinct cases of the log) + between two activities (in this situation, "Confirmation of receipt" and "T02 Check confirmation of receipt"). + """ + epsilon = 0.0001 + log = pm4py.read_xes('../tests/input_data/receipt.xes', return_legacy_log_object=True) + intervals = pm4py.convert_log_to_time_intervals(log, ('Confirmation of receipt', 'T02 Check confirmation of receipt')) + interval_tree = open_paths.interval_to_tree(intervals) + max_conc_exec = 0 + argmax_conc_exec = None + for inte in intervals: + # check how many intervals in the three are open at the start and end point of this interval + # this leads to the maximum + at_start = interval_tree[inte[0]-epsilon:inte[0]+epsilon] + at_end = interval_tree[inte[1]-epsilon:inte[1]+epsilon] + if len(at_start) > max_conc_exec: + max_conc_exec = len(at_start) + argmax_conc_exec = (inte[0], at_start) + if len(at_end) > max_conc_exec: + max_conc_exec = len(at_end) + argmax_conc_exec = (inte[1], at_end) + # prints the maximum number of concurrent paths, + # and the point in which the maximum was measured + print(max_conc_exec) + print(argmax_conc_exec) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/read_write_ocel.py b/pm4py/examples/read_write_ocel.py new file mode 100644 index 0000000000000000000000000000000000000000..630905c267cac54ab17d881605dd0283064ad64c --- /dev/null +++ b/pm4py/examples/read_write_ocel.py @@ -0,0 +1,51 @@ +import pm4py +import os + + +def execute_script(): + ocel = pm4py.read_ocel("../tests/input_data/ocel/example_log.jsonocel") + print(ocel) + print("attribute names: ", pm4py.ocel_get_attribute_names(ocel)) + print("object types: ", pm4py.ocel_get_object_types(ocel)) + print("flattening to order: ") + print(pm4py.ocel_flattening(ocel, "order")) + pm4py.write_ocel(ocel, "prova.jsonocel") + os.remove("prova.jsonocel") + + print("ocel_object_type_activities") + print(pm4py.ocel_object_type_activities(ocel)) + + print("ocel_objects_ot_count") + print(pm4py.ocel_objects_ot_count(ocel)) + + print("filter_ocel_event_attribute") + ocel1 = pm4py.filter_ocel_event_attribute(ocel, "ocel:activity", ["Create Order"]) + print(ocel1.get_extended_table()) + + print("filter_ocel_object_attribute") + ocel2 = pm4py.filter_ocel_object_attribute(ocel, "ocel:type", ["order", "delivery"]) + print(ocel2.get_extended_table()) + + print("filter_ocel_object_types_allowed_activities") + ocel3 = pm4py.filter_ocel_object_types_allowed_activities(ocel, {"order": {"Create Order"}, "element": {"Create Order"}}) + print(ocel3.get_extended_table()) + + print("filter_ocel_start_events_per_object_type") + ocel4 = pm4py.filter_ocel_start_events_per_object_type(ocel, "order") + print(ocel4.get_extended_table()) + + print("filter_ocel_end_events_per_object_type") + ocel5 = pm4py.filter_ocel_end_events_per_object_type(ocel, "order") + print(ocel5.get_extended_table()) + + print("filter_ocel_object_per_type_count") + ocel6 = pm4py.filter_ocel_object_per_type_count(ocel, {"order": 1, "element": 2}) + print(ocel6.get_extended_table()) + + print("filter_ocel_events_timestamp") + ocel7 = pm4py.filter_ocel_events_timestamp(ocel, "1981-01-01 00:00:00", "1982-01-01 00:00:00") + print(ocel7.get_extended_table()) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/resource_profiles_log.py b/pm4py/examples/resource_profiles_log.py new file mode 100644 index 0000000000000000000000000000000000000000..7bdfc1fcb94c77b3040c9ce02b63a8ae2093e204 --- /dev/null +++ b/pm4py/examples/resource_profiles_log.py @@ -0,0 +1,39 @@ +import os +from pm4py.algo.organizational_mining.resource_profiles import algorithm +import pm4py + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes")) + # Metric RBI 1.1: Number of distinct activities done by a resource in a given time interval [t1, t2) + print(algorithm.distinct_activities(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara")) + # Metric RBI 1.3: Fraction of completions of a given activity a, by a given resource r, + # during a given time slot, [t1, t2), with respect to the total number of activity completions by resource r + # during [t1, t2) + print(algorithm.activity_frequency(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara", "decide")) + # Metric RBI 2.1: The number of activity instances completed by a given resource during a given time slot. + print(algorithm.activity_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara")) + # Metric RBI 2.2: The number of cases completed during a given time slot in which a given resource was involved. + print(algorithm.case_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Pete")) + # Metric RBI 2.3: The fraction of cases completed during a given time slot in which a given resource was involved + # with respect to the total number of cases completed during the time slot. + print(algorithm.fraction_case_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Pete")) + # Metric RBI 2.4: The average number of activities started by a given resource but not completed at a moment in time. + print(algorithm.average_workload(log, "2010-12-30 00:00:00", "2011-01-15 00:00:00", "Mike")) + # Metric RBI 3.1: The fraction of active time during which a given resource is involved in more than one activity + # with respect to the resource's active time. + print(algorithm.multitasking(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Mike")) + # Metric RBI 4.3: The average duration of instances of a given activity completed during a given time slot by + # a given resource. + print(algorithm.average_duration_activity(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue", "examine thoroughly")) + # Metric RBI 4.4: The average duration of cases completed during a given time slot in which a given resource was involved. + print(algorithm.average_case_duration(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue")) + # Metric RBI 5.1: The number of cases completed during a given time slot in which two given resources were involved. + print(algorithm.interaction_two_resources(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Mike", "Pete")) + # Metric RBI 5.2: The fraction of resources involved in the same cases with a given resource during a given time slot + # with respect to the total number of resources active during the time slot. + print(algorithm.social_position(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue")) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/resource_profiles_pandas.py b/pm4py/examples/resource_profiles_pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..bce55ae1cd780570aa092b260d5b622e50c4474b --- /dev/null +++ b/pm4py/examples/resource_profiles_pandas.py @@ -0,0 +1,41 @@ +from pm4py.util import pandas_utils, constants +from pm4py.objects.log.util import dataframe_utils +import os +from pm4py.algo.organizational_mining.resource_profiles import algorithm + + +def execute_script(): + log = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "running-example.csv")) + log = dataframe_utils.convert_timestamp_columns_in_df(log, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + # Metric RBI 1.1: Number of distinct activities done by a resource in a given time interval [t1, t2) + print(algorithm.distinct_activities(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara")) + # Metric RBI 1.3: Fraction of completions of a given activity a, by a given resource r, + # during a given time slot, [t1, t2), with respect to the total number of activity completions by resource r + # during [t1, t2) + print(algorithm.activity_frequency(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara", "decide")) + # Metric RBI 2.1: The number of activity instances completed by a given resource during a given time slot. + print(algorithm.activity_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara")) + # Metric RBI 2.2: The number of cases completed during a given time slot in which a given resource was involved. + print(algorithm.case_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Pete")) + # Metric RBI 2.3: The fraction of cases completed during a given time slot in which a given resource was involved + # with respect to the total number of cases completed during the time slot. + print(algorithm.fraction_case_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Pete")) + # Metric RBI 2.4: The average number of activities started by a given resource but not completed at a moment in time. + print(algorithm.average_workload(log, "2010-12-30 00:00:00", "2011-01-15 00:00:00", "Mike")) + # Metric RBI 3.1: The fraction of active time during which a given resource is involved in more than one activity + # with respect to the resource's active time. + print(algorithm.multitasking(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Mike")) + # Metric RBI 4.3: The average duration of instances of a given activity completed during a given time slot by + # a given resource. + print(algorithm.average_duration_activity(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue", "examine thoroughly")) + # Metric RBI 4.4: The average duration of cases completed during a given time slot in which a given resource was involved. + print(algorithm.average_case_duration(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue")) + # Metric RBI 5.1: The number of cases completed during a given time slot in which two given resources were involved. + print(algorithm.interaction_two_resources(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Mike", "Pete")) + # Metric RBI 5.2: The fraction of resources involved in the same cases with a given resource during a given time slot + # with respect to the total number of resources active during the time slot. + print(algorithm.social_position(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue")) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/revised_playout.py b/pm4py/examples/revised_playout.py new file mode 100644 index 0000000000000000000000000000000000000000..e2bb22ce468e5fd841c752f2c04b64ca30796b8d --- /dev/null +++ b/pm4py/examples/revised_playout.py @@ -0,0 +1,36 @@ +import pm4py +from pm4py.objects.petri_net.obj import ResetInhibitorNet +from pm4py.objects.petri_net.utils import petri_utils +from examples import examples_conf +import importlib.util +import uuid +import os + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes")) + net, im, fm = pm4py.discover_petri_net_inductive(log) + net, im, fm = pm4py.convert_petri_net_type(net, im, fm, type="reset_inhibitor") + # traditional playout + new_log = pm4py.play_out(net, im, fm, parameters={"add_only_if_fm_is_reached": True}) + print(len(new_log)) + print(pm4py.get_event_attribute_values(new_log, "concept:name")) + print(pm4py.get_end_activities(new_log)) + # playout after adding a place with 1 token for every transition + for trans in net.transitions: + new_place = ResetInhibitorNet.Place(str(uuid.uuid4())) + net.places.add(new_place) + petri_utils.add_arc_from_to(new_place, trans, net, type=None) + im[new_place] = 1 + # ensure that superset of the final marking (given the huge number of remaining tokens) are also considered valid + new_log2 = pm4py.play_out(net, im, fm, parameters={"add_only_if_fm_is_reached": True, "fm_leq_accepted": True}) + print(len(new_log2)) + print(pm4py.get_event_attribute_values(new_log2, "concept:name")) + print(pm4py.get_end_activities(new_log2)) + + if importlib.util.find_spec("graphviz"): + pm4py.view_petri_net(net, im, fm, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/rework.py b/pm4py/examples/rework.py new file mode 100644 index 0000000000000000000000000000000000000000..196f16ab1e0eb35a642d1907255fa40b5f51486a --- /dev/null +++ b/pm4py/examples/rework.py @@ -0,0 +1,13 @@ +import pm4py +import os +from pm4py.statistics.rework.log import get as rework_get + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + rework = rework_get.apply(log) + print(rework) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/roles_detection.py b/pm4py/examples/roles_detection.py new file mode 100644 index 0000000000000000000000000000000000000000..82163f78389ae6293f7dd7defc45b835c28e1924 --- /dev/null +++ b/pm4py/examples/roles_detection.py @@ -0,0 +1,17 @@ +import os +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.organizational_mining.roles import algorithm as roles_algorithm + + +def execute_script(): + # import the log + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "receipt.xes"), variant="nonstandard") + + roles = roles_algorithm.apply(log) + + # print the results (grouped activities) on the screen + print([x.activities for x in roles]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/saw_net_ocel_multi.py b/pm4py/examples/saw_net_ocel_multi.py new file mode 100644 index 0000000000000000000000000000000000000000..e1936ddfdc6a4cfce49f56beb5173ebe3169997e --- /dev/null +++ b/pm4py/examples/saw_net_ocel_multi.py @@ -0,0 +1,146 @@ +from pm4py.objects.petri_net.obj import Marking +from pm4py.objects.petri_net.utils import petri_utils +from pm4py.objects.petri_net.saw_net.obj import StochasticArcWeightNet +from uuid import uuid4 +import importlib.util +import os + + +def execute_script(): + neto = StochasticArcWeightNet() + imo = Marking() + fmo = Marking() + sourceo = StochasticArcWeightNet.Place("sourceo") + targeto = StochasticArcWeightNet.Place("targeto") + # imo[sourceo] = 1 + # fmo[targeto] = 1 + neto.places.add(sourceo) + neto.places.add(targeto) + create_order_o = StochasticArcWeightNet.Transition(str(uuid4()), "Create Order") + send_package_o = StochasticArcWeightNet.Transition(str(uuid4()), "Send Package") + pay_order_o = StochasticArcWeightNet.Transition(str(uuid4()), "Pay Order") + item_issue_o = StochasticArcWeightNet.Transition(str(uuid4()), "Item Issue") + item_fixed_o = StochasticArcWeightNet.Transition(str(uuid4()), "Item Fixed") + skip_o = StochasticArcWeightNet.Transition(str(uuid4()), None) + neto.transitions.add(create_order_o) + neto.transitions.add(send_package_o) + neto.transitions.add(pay_order_o) + neto.transitions.add(item_issue_o) + neto.transitions.add(item_fixed_o) + neto.transitions.add(skip_o) + p1o = StochasticArcWeightNet.Place("p1o") + p2o = StochasticArcWeightNet.Place("p2o") + p3o = StochasticArcWeightNet.Place("p3o") + p4o = StochasticArcWeightNet.Place("p4o") + neto.places.add(p1o) + neto.places.add(p2o) + neto.places.add(p3o) + neto.places.add(p4o) + arc1o = petri_utils.add_arc_from_to(sourceo, create_order_o, neto, type="stochastic_arc") + arc2o = petri_utils.add_arc_from_to(create_order_o, p1o, neto, type="stochastic_arc") + arc3o = petri_utils.add_arc_from_to(p1o, item_issue_o, neto, type="stochastic_arc") + arc4o = petri_utils.add_arc_from_to(p1o, skip_o, neto, type="stochastic_arc") + arc5o = petri_utils.add_arc_from_to(item_issue_o, p2o, neto, type="stochastic_arc") + arc6o = petri_utils.add_arc_from_to(p2o, item_fixed_o, neto, type="stochastic_arc") + arc7o = petri_utils.add_arc_from_to(item_fixed_o, p3o, neto, type="stochastic_arc") + arc8o = petri_utils.add_arc_from_to(p3o, send_package_o, neto, type="stochastic_arc") + arc9o = petri_utils.add_arc_from_to(skip_o, p3o, neto, type="stochastic_arc") + arc10o = petri_utils.add_arc_from_to(send_package_o, p4o, neto, type="stochastic_arc") + arc11o = petri_utils.add_arc_from_to(p4o, pay_order_o, neto, type="stochastic_arc") + arc12o = petri_utils.add_arc_from_to(pay_order_o, targeto, neto, type="stochastic_arc") + arc1o.weight = {1: 3} + arc2o.weight = {1: 3} + arc3o.weight = {1: 1} + arc4o.weight = {1: 2} + arc5o.weight = {1: 1} + arc6o.weight = {1: 1} + arc7o.weight = {1: 1} + arc8o.weight = {1: 3} + arc9o.weight = {1: 2} + arc10o.weight = {1: 3} + arc11o.weight = {1: 3} + arc12o.weight = {1: 3} + sourcee = StochasticArcWeightNet.Place("source") + targete = StochasticArcWeightNet.Place("targete") + neto.places.add(sourcee) + neto.places.add(targete) + #imo[sourcee] = 3 + create_order_e = create_order_o + send_package_e = send_package_o + item_issue_e = item_issue_o + item_fixed_e = item_fixed_o + skip_e = StochasticArcWeightNet.Transition(str(uuid4()), None) + neto.transitions.add(skip_e) + p1e = StochasticArcWeightNet.Place("p1e") + p2e = StochasticArcWeightNet.Place("p2e") + p3e = StochasticArcWeightNet.Place("p3e") + neto.places.add(p1e) + neto.places.add(p2e) + neto.places.add(p3e) + arc1 = petri_utils.add_arc_from_to(sourcee, create_order_e, neto, type="stochastic_arc") + arc2 = petri_utils.add_arc_from_to(create_order_e, p1e, neto, type="stochastic_arc") + arc3 = petri_utils.add_arc_from_to(p1e, skip_e, neto, type="stochastic_arc") + arc4 = petri_utils.add_arc_from_to(p1e, item_issue_e, neto, type="stochastic_arc") + arc5 = petri_utils.add_arc_from_to(item_issue_e, p2e, neto, type="stochastic_arc") + arc6 = petri_utils.add_arc_from_to(p2e, item_fixed_e, neto, type="stochastic_arc") + arc7 = petri_utils.add_arc_from_to(item_fixed_e, p3e, neto, type="stochastic_arc") + arc8 = petri_utils.add_arc_from_to(skip_e, p3e, neto, type="stochastic_arc") + arc9 = petri_utils.add_arc_from_to(p3e, send_package_e, neto, type="stochastic_arc") + arc10 = petri_utils.add_arc_from_to(send_package_e, targete, neto, type="stochastic_arc") + arc1.weight = {2: 1, 3: 2} + arc2.weight = {2: 1, 3: 2} + arc3.weight = {2: 2, 3: 1} + arc4.weight = {1: 1} + arc5.weight = {1: 1} + arc6.weight = {1: 1} + arc7.weight = {1: 1} + arc8.weight = {2: 2, 3: 1} + arc9.weight = {2: 1, 3: 2} + arc10.weight = {2: 1, 3: 2} + + decorations = {} + decorations[arc1o] = {"color": "blue"} + decorations[arc2o] = {"color": "blue"} + decorations[arc3o] = {"color": "blue"} + decorations[arc4o] = {"color": "blue"} + decorations[arc5o] = {"color": "blue"} + decorations[arc6o] = {"color": "blue"} + decorations[arc7o] = {"color": "blue"} + decorations[arc8o] = {"color": "blue"} + decorations[arc9o] = {"color": "blue"} + decorations[arc10o] = {"color": "blue"} + decorations[arc11o] = {"color": "blue"} + decorations[arc12o] = {"color": "blue"} + decorations[sourceo] = {"color": "blue"} + decorations[targeto] = {"color": "blue"} + decorations[p1o] = {"color": "blue"} + decorations[p2o] = {"color": "blue"} + decorations[p3o] = {"color": "blue"} + decorations[p4o] = {"color": "blue"} + decorations[skip_o] = {"color": "blue"} + decorations[arc1] = {"color": "red"} + decorations[arc2] = {"color": "red"} + decorations[arc3] = {"color": "red"} + decorations[arc4] = {"color": "red"} + decorations[arc5] = {"color": "red"} + decorations[arc6] = {"color": "red"} + decorations[arc7] = {"color": "red"} + decorations[arc8] = {"color": "red"} + decorations[arc9] = {"color": "red"} + decorations[arc10] = {"color": "red"} + decorations[sourcee] = {"color": "red"} + decorations[targete] = {"color": "red"} + decorations[p1e] = {"color": "red"} + decorations[p2e] = {"color": "red"} + decorations[p3e] = {"color": "red"} + decorations[skip_e] = {"color": "red"} + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer as pn_visualizer + gviz = pn_visualizer.apply(neto, imo, fmo, parameters={"decorations": decorations}) + pn_visualizer.save(gviz, "total.png") + os.remove("total.png") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/saw_net_ocel_single.py b/pm4py/examples/saw_net_ocel_single.py new file mode 100644 index 0000000000000000000000000000000000000000..0c0bb814c9fbe193e285a4edfdbdf2a8938a79bb --- /dev/null +++ b/pm4py/examples/saw_net_ocel_single.py @@ -0,0 +1,124 @@ +from pm4py.objects.petri_net.obj import Marking +from pm4py.objects.petri_net.utils import petri_utils +from pm4py.objects.petri_net.saw_net.obj import StochasticArcWeightNet +from uuid import uuid4 +import os +import importlib.util + + +def execute_script(): + neto = StochasticArcWeightNet() + imo = Marking() + fmo = Marking() + sourceo = StochasticArcWeightNet.Place("sourceo") + targeto = StochasticArcWeightNet.Place("targeto") + # imo[sourceo] = 1 + # fmo[targeto] = 1 + neto.places.add(sourceo) + neto.places.add(targeto) + create_order_o = StochasticArcWeightNet.Transition(str(uuid4()), "Create Order") + send_package_o = StochasticArcWeightNet.Transition(str(uuid4()), "Send Package") + pay_order_o = StochasticArcWeightNet.Transition(str(uuid4()), "Pay Order") + item_issue_o = StochasticArcWeightNet.Transition(str(uuid4()), "Item Issue") + item_fixed_o = StochasticArcWeightNet.Transition(str(uuid4()), "Item Fixed") + skip_o = StochasticArcWeightNet.Transition(str(uuid4()), None) + neto.transitions.add(create_order_o) + neto.transitions.add(send_package_o) + neto.transitions.add(pay_order_o) + neto.transitions.add(item_issue_o) + neto.transitions.add(item_fixed_o) + neto.transitions.add(skip_o) + p1o = StochasticArcWeightNet.Place("p1o") + p2o = StochasticArcWeightNet.Place("p2o") + p3o = StochasticArcWeightNet.Place("p3o") + p4o = StochasticArcWeightNet.Place("p4o") + neto.places.add(p1o) + neto.places.add(p2o) + neto.places.add(p3o) + neto.places.add(p4o) + arc1o = petri_utils.add_arc_from_to(sourceo, create_order_o, neto, type="stochastic_arc") + arc2o = petri_utils.add_arc_from_to(create_order_o, p1o, neto, type="stochastic_arc") + arc3o = petri_utils.add_arc_from_to(p1o, item_issue_o, neto, type="stochastic_arc") + arc4o = petri_utils.add_arc_from_to(p1o, skip_o, neto, type="stochastic_arc") + arc5o = petri_utils.add_arc_from_to(item_issue_o, p2o, neto, type="stochastic_arc") + arc6o = petri_utils.add_arc_from_to(p2o, item_fixed_o, neto, type="stochastic_arc") + arc7o = petri_utils.add_arc_from_to(item_fixed_o, p3o, neto, type="stochastic_arc") + arc8o = petri_utils.add_arc_from_to(p3o, send_package_o, neto, type="stochastic_arc") + arc9o = petri_utils.add_arc_from_to(skip_o, p3o, neto, type="stochastic_arc") + arc10o = petri_utils.add_arc_from_to(send_package_o, p4o, neto, type="stochastic_arc") + arc11o = petri_utils.add_arc_from_to(p4o, pay_order_o, neto, type="stochastic_arc") + arc12o = petri_utils.add_arc_from_to(pay_order_o, targeto, neto, type="stochastic_arc") + arc1o.weight = {1: 3} + arc2o.weight = {1: 3} + arc3o.weight = {1: 1} + arc4o.weight = {1: 2} + arc5o.weight = {1: 1} + arc6o.weight = {1: 1} + arc7o.weight = {1: 1} + arc8o.weight = {1: 3} + arc9o.weight = {1: 2} + arc10o.weight = {1: 3} + arc11o.weight = {1: 3} + arc12o.weight = {1: 3} + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer as pn_visualizer + gviz = pn_visualizer.apply(neto, imo, fmo) + pn_visualizer.save(gviz, "folded_order.png") + os.remove("folded_order.png") + + nete = StochasticArcWeightNet() + ime = Marking() + fme = Marking() + sourcee = StochasticArcWeightNet.Place("source") + targete = StochasticArcWeightNet.Place("targete") + nete.places.add(sourcee) + nete.places.add(targete) + # ime[sourcee] = 3 + # fme[targete] = 3 + create_order_e = StochasticArcWeightNet.Transition(str(uuid4()), "Create Order") + send_package_e = StochasticArcWeightNet.Transition(str(uuid4()), "Send Package") + item_issue_e = StochasticArcWeightNet.Transition(str(uuid4()), "Item Issue") + item_fixed_e = StochasticArcWeightNet.Transition(str(uuid4()), "Item Fixed") + skip_e = StochasticArcWeightNet.Transition(str(uuid4()), None) + nete.transitions.add(create_order_e) + nete.transitions.add(send_package_e) + nete.transitions.add(item_issue_e) + nete.transitions.add(item_fixed_e) + nete.transitions.add(skip_e) + p1e = StochasticArcWeightNet.Place("p1e") + p2e = StochasticArcWeightNet.Place("p2e") + p3e = StochasticArcWeightNet.Place("p3e") + nete.places.add(p1e) + nete.places.add(p2e) + nete.places.add(p3e) + arc1 = petri_utils.add_arc_from_to(sourcee, create_order_e, nete, type="stochastic_arc") + arc2 = petri_utils.add_arc_from_to(create_order_e, p1e, nete, type="stochastic_arc") + arc3 = petri_utils.add_arc_from_to(p1e, skip_e, nete, type="stochastic_arc") + arc4 = petri_utils.add_arc_from_to(p1e, item_issue_e, nete, type="stochastic_arc") + arc5 = petri_utils.add_arc_from_to(item_issue_e, p2e, nete, type="stochastic_arc") + arc6 = petri_utils.add_arc_from_to(p2e, item_fixed_e, nete, type="stochastic_arc") + arc7 = petri_utils.add_arc_from_to(item_fixed_e, p3e, nete, type="stochastic_arc") + arc8 = petri_utils.add_arc_from_to(skip_e, p3e, nete, type="stochastic_arc") + arc9 = petri_utils.add_arc_from_to(p3e, send_package_e, nete, type="stochastic_arc") + arc10 = petri_utils.add_arc_from_to(send_package_e, targete, nete, type="stochastic_arc") + arc1.weight = {2: 1, 3: 2} + arc2.weight = {2: 1, 3: 2} + arc3.weight = {2: 2, 3: 1} + arc4.weight = {1: 1} + arc5.weight = {1: 1} + arc6.weight = {1: 1} + arc7.weight = {1: 1} + arc8.weight = {2: 2, 3: 1} + arc9.weight = {2: 1, 3: 2} + arc10.weight = {2: 1, 3: 2} + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer as pn_visualizer + gviz = pn_visualizer.apply(nete, ime, fme) + pn_visualizer.save(gviz, "folded_item.png") + os.remove("folded_item.png") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/segments_retrieval_filtering.py b/pm4py/examples/segments_retrieval_filtering.py new file mode 100644 index 0000000000000000000000000000000000000000..9c0ff51e3f4d81eb72928edfc8906e2f454ef131 --- /dev/null +++ b/pm4py/examples/segments_retrieval_filtering.py @@ -0,0 +1,20 @@ +import pm4py + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes") + + # gets the frequent trace segments + traces = pm4py.get_frequent_trace_segments(log, min_occ=100) + + for t in traces: + # filter on the given trace segment, to obtain an event log where all the cases contain the trace segment + print(t) + filtered_log = pm4py.filter_trace_segments(log, [t]) + print(filtered_log) + + break + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/simplified_interface.py b/pm4py/examples/simplified_interface.py new file mode 100644 index 0000000000000000000000000000000000000000..248c9c0b09c602745755334c84439c3bb72e2455 --- /dev/null +++ b/pm4py/examples/simplified_interface.py @@ -0,0 +1,212 @@ +import os + +import pm4py +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils +from examples import examples_conf +import importlib.util +import traceback + + +def execute_script(): + ENABLE_VISUALIZATION = True + + try: + # reads a XES into an event log + log1 = pm4py.read_xes("../tests/input_data/running-example.xes") + + # reads a CSV into a dataframe + df = pandas_utils.read_csv("../tests/input_data/running-example.csv") + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + df["case:concept:name"] = df["case:concept:name"].astype("string") + + # converts the dataframe to an event log + log2 = pm4py.convert_to_event_log(df) + + # converts the log read from XES into a stream and dataframe respectively + stream1 = pm4py.convert_to_event_stream(log1) + df2 = pm4py.convert_to_dataframe(log1) + + # writes the log1 to a XES file + pm4py.write_xes(log1, "ru1.xes") + + dfg, dfg_sa, dfg_ea = pm4py.discover_dfg(log1) + petri_alpha, im_alpha, fm_alpha = pm4py.discover_petri_net_alpha(log1) + petri_inductive, im_inductive, fm_inductive = pm4py.discover_petri_net_inductive(log1) + petri_heuristics, im_heuristics, fm_heuristics = pm4py.discover_petri_net_heuristics(log1) + tree_inductive = pm4py.discover_process_tree_inductive(log1) + heu_net = pm4py.discover_heuristics_net(log1) + + pm4py.write_dfg(dfg, dfg_sa, dfg_ea, "ru_dfg.dfg") + dfg, dfg_sa, dfg_ea = pm4py.read_dfg("ru_dfg.dfg") + + if importlib.util.find_spec("lxml"): + pm4py.write_pnml(petri_alpha, im_alpha, fm_alpha, "ru_alpha.pnml") + pm4py.write_pnml(petri_inductive, im_inductive, fm_inductive, "ru_inductive.pnml") + pm4py.write_pnml(petri_heuristics, im_heuristics, fm_heuristics, "ru_heuristics.pnml") + pm4py.write_ptml(tree_inductive, "ru_inductive.ptml") + + petri_alpha, im_alpha, fm_alpha = pm4py.read_pnml("ru_alpha.pnml", auto_guess_final_marking=True) + petri_inductive, im_inductive, fm_inductive = pm4py.read_pnml("ru_inductive.pnml", auto_guess_final_marking=True) + petri_heuristics, im_heuristics, fm_heuristics = pm4py.read_pnml("ru_heuristics.pnml", auto_guess_final_marking=True) + tree_inductive = pm4py.read_ptml("ru_inductive.ptml") + + if ENABLE_VISUALIZATION: + if importlib.util.find_spec("graphviz"): + pm4py.view_petri_net(petri_alpha, im_alpha, fm_alpha, format=examples_conf.TARGET_IMG_FORMAT) + pm4py.view_petri_net(petri_inductive, im_inductive, fm_inductive, format=examples_conf.TARGET_IMG_FORMAT) + pm4py.view_petri_net(petri_heuristics, im_heuristics, fm_heuristics, format=examples_conf.TARGET_IMG_FORMAT) + pm4py.view_process_tree(tree_inductive, format=examples_conf.TARGET_IMG_FORMAT) + pm4py.view_dfg(dfg, dfg_sa, dfg_ea, format=examples_conf.TARGET_IMG_FORMAT) + pm4py.save_vis_petri_net(petri_alpha, im_alpha, fm_alpha, "ru_alpha.png") + pm4py.save_vis_petri_net(petri_inductive, im_inductive, fm_inductive, "ru_inductive.png") + pm4py.save_vis_petri_net(petri_heuristics, im_heuristics, fm_heuristics, "ru_heuristics.png") + pm4py.save_vis_process_tree(tree_inductive, "ru_inductive_tree.png") + pm4py.save_vis_dfg(dfg, dfg_sa, dfg_ea, "ru_dfg.png") + pm4py.save_vis_dotted_chart(log1, "dotted_chart.png") + pm4py.save_vis_performance_spectrum(log1, ["register request", "decide"], "ps.png") + + if importlib.util.find_spec("pydotplus"): + pm4py.view_heuristics_net(heu_net, format=examples_conf.TARGET_IMG_FORMAT) + pm4py.save_vis_heuristics_net(heu_net, "ru_heunet.png") + os.remove("ru_heunet.png") + + if importlib.util.find_spec("matplotlib"): + pm4py.save_vis_events_per_time_graph(log1, "ev_time.png") + pm4py.save_vis_case_duration_graph(log1, "cd.png") + os.remove("ev_time.png") + os.remove("cd.png") + + os.remove("ru_alpha.png") + os.remove("ru_inductive.png") + os.remove("ru_inductive_tree.png") + os.remove("ru_dfg.png") + os.remove("ru_heuristics.png") + os.remove("dotted_chart.png") + os.remove("ps.png") + + aligned_traces = pm4py.conformance_diagnostics_alignments(log1, petri_inductive, im_inductive, fm_inductive, return_diagnostics_dataframe=False) + replayed_traces = pm4py.conformance_diagnostics_token_based_replay(log1, petri_inductive, im_inductive, fm_inductive, return_diagnostics_dataframe=False) + + fitness_tbr = pm4py.fitness_token_based_replay(log1, petri_inductive, im_inductive, fm_inductive) + print("fitness_tbr", fitness_tbr) + fitness_align = pm4py.fitness_alignments(log1, petri_inductive, im_inductive, fm_inductive) + print("fitness_align", fitness_align) + precision_tbr = pm4py.precision_token_based_replay(log1, petri_inductive, im_inductive, fm_inductive) + print("precision_tbr", precision_tbr) + precision_align = pm4py.precision_alignments(log1, petri_inductive, im_inductive, fm_inductive) + print("precision_align", precision_align) + + print("log start activities = ", pm4py.get_start_activities(log2)) + print("df start activities = ", pm4py.get_start_activities(df2, case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp")) + print("log end activities = ", pm4py.get_end_activities(log2)) + print("df end activities = ", pm4py.get_end_activities(df2, case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp")) + print("log attributes = ", pm4py.get_event_attributes(log2)) + print("df attributes = ", pm4py.get_event_attributes(df2)) + print("log org:resource values = ", pm4py.get_event_attribute_values(log2, "org:resource")) + print("df org:resource values = ", pm4py.get_event_attribute_values(df2, "org:resource", case_id_key="case:concept:name")) + + print("start_activities len(filt_log) = ", len(pm4py.filter_start_activities(log2, ["register request"]))) + print("start_activities len(filt_df) = ", len(pm4py.filter_start_activities(df2, ["register request"], case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp"))) + print("end_activities len(filt_log) = ", len(pm4py.filter_end_activities(log2, ["pay compensation"]))) + print("end_activities len(filt_df) = ", len(pm4py.filter_end_activities(df2, ["pay compensation"], case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp"))) + print("attributes org:resource len(filt_log) (cases) cases = ", + len(pm4py.filter_event_attribute_values(log2, "org:resource", ["Ellen"], level="case"))) + print("attributes org:resource len(filt_log) (cases) events = ", + len(pm4py.filter_event_attribute_values(log2, "org:resource", ["Ellen"], level="event"))) + print("attributes org:resource len(filt_df) (events) cases = ", + len(pm4py.filter_event_attribute_values(df2, "org:resource", ["Ellen"], level="case", case_id_key="case:concept:name"))) + print("attributes org:resource len(filt_df) (events) events = ", + len(pm4py.filter_event_attribute_values(df2, "org:resource", ["Ellen"], level="event", case_id_key="case:concept:name"))) + print("attributes org:resource len(filt_df) (events) events notpositive = ", + len(pm4py.filter_event_attribute_values(df2, "org:resource", ["Ellen"], level="event", retain=False))) + + print("rework df = ", pm4py.get_rework_cases_per_activity(df2, case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp")) + print("rework log = ", pm4py.get_rework_cases_per_activity(log2)) + print("cases overlap df = ", pm4py.get_case_overlap(df2, case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp")) + print("cases overlap log = ", pm4py.get_case_overlap(log2)) + print("cycle time df = ", pm4py.get_cycle_time(df2, case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp")) + print("cycle time log = ", pm4py.get_cycle_time(log2)) + + if ENABLE_VISUALIZATION: + if importlib.util.find_spec("graphviz") and importlib.util.find_spec("matplotlib"): + pm4py.view_events_distribution_graph(df2, case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp", format=examples_conf.TARGET_IMG_FORMAT) + pm4py.view_events_distribution_graph(log2, format=examples_conf.TARGET_IMG_FORMAT) + + print("variants log = ", pm4py.get_variants_as_tuples(log2)) + print("variants df = ", pm4py.get_variants_as_tuples(df2, case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp")) + print("variants filter log = ", + len(pm4py.filter_variants(log2, [ + ("register request", "examine thoroughly", "check ticket", "decide", "reject request")]))) + print("variants filter df = ", + len(pm4py.filter_variants(df2, [ + ("register request", "examine thoroughly", "check ticket", "decide", "reject request")], case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp"))) + + print("paths filter log len = ", + len(pm4py.filter_directly_follows_relation(log2, [("register request", "examine casually")]))) + print("paths filter dataframe len = ", + len(pm4py.filter_directly_follows_relation(df2, [("register request", "examine casually")], case_id_key="case:concept:name", activity_key="concept:name", timestamp_key="time:timestamp"))) + + print("timeframe filter log events len = ", + len(pm4py.filter_time_range(log2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="events"))) + print("timeframe filter log traces_contained len = ", + len(pm4py.filter_time_range(log2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_contained", case_id_key="case:concept:name", timestamp_key="time:timestamp"))) + print("timeframe filter log traces_intersecting len = ", + len(pm4py.filter_time_range(log2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_intersecting"))) + print("timeframe filter df events len = ", + len(pm4py.filter_time_range(df2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="events", case_id_key="case:concept:name", timestamp_key="time:timestamp"))) + print("timeframe filter df traces_contained len = ", + len(pm4py.filter_time_range(df2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_contained", case_id_key="case:concept:name", timestamp_key="time:timestamp"))) + print("timeframe filter df traces_intersecting len = ", + len(pm4py.filter_time_range(df2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_intersecting", case_id_key="case:concept:name", timestamp_key="time:timestamp"))) + + wt_log = pm4py.discover_working_together_network(log2) + wt_df = pm4py.discover_working_together_network(df2, case_id_key="case:concept:name", resource_key="org:resource", timestamp_key="time:timestamp") + print("log working together", wt_log) + print("df working together", wt_df) + print("log subcontracting", pm4py.discover_subcontracting_network(log2)) + print("df subcontracting", pm4py.discover_subcontracting_network(df2, case_id_key="case:concept:name", resource_key="org:resource", timestamp_key="time:timestamp")) + print("log working together", pm4py.discover_working_together_network(log2)) + print("df working together", pm4py.discover_working_together_network(df2, case_id_key="case:concept:name", resource_key="org:resource", timestamp_key="time:timestamp")) + print("log similar activities", pm4py.discover_activity_based_resource_similarity(log2)) + print("df similar activities", pm4py.discover_activity_based_resource_similarity(df2, case_id_key="case:concept:name", resource_key="org:resource", timestamp_key="time:timestamp", activity_key="concept:name")) + print("log org roles", pm4py.discover_organizational_roles(log2)) + print("df org roles", pm4py.discover_organizational_roles(df2, case_id_key="case:concept:name", resource_key="org:resource", timestamp_key="time:timestamp", activity_key="concept:name")) + + if ENABLE_VISUALIZATION: + if importlib.util.find_spec("graphviz") and importlib.util.find_spec("pyvis") and importlib.util.find_spec("networkx"): + pm4py.view_sna(wt_log) + pm4py.save_vis_sna(wt_df, "ru_wt_df.png") + os.remove("ru_wt_df.png") + + footprints = pm4py.discover_footprints(log1) + alignments = pm4py.conformance_diagnostics_alignments(log1, petri_inductive, im_inductive, fm_inductive, return_diagnostics_dataframe=False) + + if ENABLE_VISUALIZATION: + if importlib.util.find_spec("graphviz"): + pm4py.view_footprints(footprints, format=examples_conf.TARGET_IMG_FORMAT) + pm4py.view_alignments(log1, alignments, format=examples_conf.TARGET_IMG_FORMAT) + pm4py.save_vis_footprints(footprints, "footprints.png") + pm4py.save_vis_alignments(log1, aligned_traces, "alignments.png") + os.remove("footprints.png") + os.remove("alignments.png") + except: + traceback.print_exc() + + # remove the temporary files + if os.path.exists("ru1.xes"): + os.remove("ru1.xes") + if os.path.exists("ru_dfg.dfg"): + os.remove("ru_dfg.dfg") + if os.path.exists("ru_alpha.pnml"): + os.remove("ru_alpha.pnml") + if os.path.exists("ru_inductive.pnml"): + os.remove("ru_inductive.pnml") + if os.path.exists("ru_heuristics.pnml"): + os.remove("ru_heuristics.pnml") + if os.path.exists("ru_inductive.ptml"): + os.remove("ru_inductive.ptml") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/sna_log.py b/pm4py/examples/sna_log.py new file mode 100644 index 0000000000000000000000000000000000000000..013a925d81f86e4512e9d5dc63643bb6a2c7dbde --- /dev/null +++ b/pm4py/examples/sna_log.py @@ -0,0 +1,32 @@ +import os + +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.organizational_mining.sna import algorithm as sna_algorithm +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + + hw_values = sna_algorithm.apply(log, variant=sna_algorithm.Variants.HANDOVER_LOG) + wt_values = sna_algorithm.apply(log, variant=sna_algorithm.Variants.WORKING_TOGETHER_LOG) + sub_values = sna_algorithm.apply(log, variant=sna_algorithm.Variants.SUBCONTRACTING_LOG) + ja_values = sna_algorithm.apply(log, variant=sna_algorithm.Variants.JOINTACTIVITIES_LOG) + + if importlib.util.find_spec("graphviz") and importlib.util.find_spec("pyvis") and importlib.util.find_spec("networkx"): + from pm4py.visualization.sna import visualizer as pn_vis + gviz_sub = pn_vis.apply(sub_values, variant=pn_vis.Variants.NETWORKX, + parameters={pn_vis.Variants.NETWORKX.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + gviz_hw = pn_vis.apply(hw_values, variant=pn_vis.Variants.PYVIS) + gviz_wt = pn_vis.apply(wt_values, variant=pn_vis.Variants.NETWORKX, + parameters={pn_vis.Variants.NETWORKX.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + gviz_ja = pn_vis.apply(ja_values, variant=pn_vis.Variants.PYVIS) + pn_vis.view(gviz_sub, variant=pn_vis.Variants.NETWORKX) + pn_vis.view(gviz_hw, variant=pn_vis.Variants.PYVIS) + pn_vis.view(gviz_wt, variant=pn_vis.Variants.NETWORKX) + pn_vis.view(gviz_ja, variant=pn_vis.Variants.PYVIS) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/stochastic_petri_playout.py b/pm4py/examples/stochastic_petri_playout.py new file mode 100644 index 0000000000000000000000000000000000000000..7eb7e3073f4997e4b555870fd84c56a47e49e8a0 --- /dev/null +++ b/pm4py/examples/stochastic_petri_playout.py @@ -0,0 +1,55 @@ +import pm4py + + +def execute_script(): + # example on how stochastic Petri nets are defined, discovered and used in pm4py + log = pm4py.read_xes("../tests/input_data/running-example.xes", return_legacy_log_object=True) + + # first, we use a traditional process discovery algorithm (the inductive miner) to discover + # a sound workflow net from the event log + net, im, fm = pm4py.discover_petri_net_inductive(log) + + # then, we can either define manually the distributions on the stochastic Petri net, or discover them from the log + # in the following lines, we automatically discover the stochastic map from the log + from pm4py.algo.simulation.montecarlo.utils import replay + smap0 = replay.get_map_from_log_and_net(log, net, im, fm) + + # each transition of the original Petri net is associated to a stochastic variable, having a priority, a weight + # and a stochastic distribution on the firing times. + for trans in smap0: + print("\n") + print(trans) + print(dir(smap0[trans])) + # priority says: if in a marking a transition with higher priority + # is enabled, it should be considered before all the other transitions + # with lower priority disregarding the weight + print(smap0[trans].get_priority()) + # weight sets the probability to fire the transition among all the + # transitions with the same priority + print(smap0[trans].get_weight()) + # sets the random variable (independently from the weight) + print(smap0[trans].random_variable) + + # as an alternative to discover the stochastic map from the log, we can define manually the stochastic map + # (for example, we set all the invisible to zero firing times, and the other transitions' execution times + # is set to a normal with average 1 and standard deviation 1 + from pm4py.objects.random_variables.normal.random_variable import Normal + from pm4py.objects.random_variables.constant0.random_variable import Constant0 + + smap = {} + for t in net.transitions: + if t.label == "register request" or t.label is None: + v = Constant0() + else: + v = Normal(mu=1, sigma=1) + smap[t] = v + + # eventually, we can use the stochastic Petri net with a specialized algorithm, + # such as the stochastic playout + from pm4py.algo.simulation.playout.petri_net.variants import stochastic_playout + ret_log = stochastic_playout.apply(net, im, fm, parameters={"smap": smap0}) + print(ret_log) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/streaming_conformance_footprints.py b/pm4py/examples/streaming_conformance_footprints.py new file mode 100644 index 0000000000000000000000000000000000000000..393ecd48bea6abffa4eae2bf3af3b825b1f48999 --- /dev/null +++ b/pm4py/examples/streaming_conformance_footprints.py @@ -0,0 +1,42 @@ +import pm4py +from pm4py.algo.discovery.footprints import algorithm as fp_discovery +from pm4py.streaming.stream.live_event_stream import LiveEventStream +from pm4py.streaming.algo.conformance.footprints import algorithm as streaming_fp_conf +import os, time + + +def execute_script(): + # imports a XES event log + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + # converts the log into a list of events (not anymore grouped in cases) + event_stream = pm4py.convert_to_event_stream(log) + # calculates a process tree using the IMf algorithm (50% noise) + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.5) + # discovers the footprint matrix from the process tree + footprints = fp_discovery.apply(tree) + # creates a live event stream (an object that distributes the messages to the algorithm) + live_stream = LiveEventStream() + # creates the TBR streaming conformance checking object + conf_obj = streaming_fp_conf.apply(footprints) + # register the conformance checking object to the live event stream + live_stream.register(conf_obj) + # start the recording of events from the live event stream + live_stream.start() + # append each event of the original log to the live event stream + # (so it is sent to the conformance checking algorithm) + for index, event in enumerate(event_stream): + live_stream.append(event) + # stops the live event stream + live_stream.stop() + # sends a termination signal to the conformance checking algorithm; + # the conditions on the closure of all the cases are checked + # (for each case, it is checked whether the end activity of the case + # is possible according to the footprints) + diagn_df = conf_obj.get() + conf_obj.terminate_all() + print(diagn_df) + print(diagn_df[diagn_df["is_fit"] == False]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/streaming_conformance_tbr.py b/pm4py/examples/streaming_conformance_tbr.py new file mode 100644 index 0000000000000000000000000000000000000000..52a643ae9adb17c4df320b4a54160c1003a24371 --- /dev/null +++ b/pm4py/examples/streaming_conformance_tbr.py @@ -0,0 +1,39 @@ +import pm4py +from pm4py.streaming.stream.live_event_stream import LiveEventStream +from pm4py.streaming.algo.conformance.tbr import algorithm as streaming_tbr +import os, time + + +def execute_script(): + # imports a XES event log + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + # converts the log into a list of events (not anymore grouped in cases) + event_stream = pm4py.convert_to_event_stream(log) + # calculates a process tree using the IMf algorithm (30% noise) + net, im, fm = pm4py.discover_petri_net_inductive(log, noise_threshold=0.3) + # creates a live event stream (an object that distributes the messages to the algorithm) + live_stream = LiveEventStream() + # creates the TBR streaming conformance checking object + conf_obj = streaming_tbr.apply(net, im, fm) + # register the conformance checking object to the live event stream + live_stream.register(conf_obj) + # start the recording of events from the live event stream + live_stream.start() + # append each event of the original log to the live event stream + # (so it is sent to the conformance checking algorithm) + for index, event in enumerate(event_stream): + live_stream.append(event) + #time.sleep(5) + # stops the live event stream + live_stream.stop() + # sends a termination signal to the conformance checking algorithm; + # the conditions on the closure of all the cases are checked + # (for each case, it is checked whether the final marking is reached) + diagn_df = conf_obj.get() + conf_obj.terminate_all() + print(diagn_df) + print(diagn_df[diagn_df["is_fit"] == False]) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/streaming_conformance_temporal_profile.py b/pm4py/examples/streaming_conformance_temporal_profile.py new file mode 100644 index 0000000000000000000000000000000000000000..481dedeb592ff1d2f947326c728896b605d00000 --- /dev/null +++ b/pm4py/examples/streaming_conformance_temporal_profile.py @@ -0,0 +1,22 @@ +import pm4py +from pm4py.algo.discovery.temporal_profile import algorithm as temporal_profile_disc +from pm4py.streaming.algo.conformance.temporal import algorithm as streaming_temporal_conformance +from pm4py.streaming.stream.live_event_stream import LiveEventStream + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes") + static_stream = pm4py.convert_to_event_stream(log) + temporal_profile = temporal_profile_disc.apply(log) + cc = streaming_temporal_conformance.apply(temporal_profile) + live_stream = LiveEventStream() + live_stream.register(cc) + live_stream.start() + for index, ev in enumerate(static_stream): + live_stream.append(ev) + live_stream.stop() + print(cc.get()) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/streaming_csv_reader_event_stream.py b/pm4py/examples/streaming_csv_reader_event_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..60102ca6bbc1c5c650097c4a7caab62e8641f955 --- /dev/null +++ b/pm4py/examples/streaming_csv_reader_event_stream.py @@ -0,0 +1,18 @@ +from pm4py.streaming.stream.live_event_stream import LiveEventStream +from pm4py.streaming.importer.csv import importer as streaming_csv_importer +from pm4py.streaming.util.event_stream_printer import EventStreamPrinter +import os, time + + +def execute_script(): + live_event_stream = LiveEventStream() + event_stream_printer = EventStreamPrinter() + live_event_stream.register(event_stream_printer) + live_event_stream.start() + importer = streaming_csv_importer.apply(os.path.join("..", "tests", "input_data", "running-example.csv")) + importer.to_event_stream(live_event_stream) + live_event_stream.stop() + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/streaming_discovery_dfg.py b/pm4py/examples/streaming_discovery_dfg.py new file mode 100644 index 0000000000000000000000000000000000000000..9c5307d5555102e5f208eefcbf418b3de0935647 --- /dev/null +++ b/pm4py/examples/streaming_discovery_dfg.py @@ -0,0 +1,42 @@ +import os + +import pm4py +from pm4py.streaming.algo.discovery.dfg import algorithm as dfg_discovery +from pm4py.streaming.stream.live_event_stream import LiveEventStream +from examples import examples_conf +import importlib.util + + +def execute_script(): + # imports a XES event log + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + # converts the log into a list of events (not anymore grouped in cases) + event_stream = pm4py.convert_to_event_stream(log) + # creates a live event stream (an object that distributes the messages to the algorithm) + live_stream = LiveEventStream() + # creates the streaming DFG discovery object + stream_dfg_disc = dfg_discovery.apply() + # register the discovery algorithm to the stream + live_stream.register(stream_dfg_disc) + # start the recording of events from the live event stream + live_stream.start() + # append each event of the original log to the live event stream + # (so it is sent to the conformance checking algorithm) + for index, event in enumerate(event_stream): + live_stream.append(event) + # stops the live event stream + live_stream.stop() + # gets the DFG along with the start and end activities from the stream + dfg, activities, start_activities, end_activities = stream_dfg_disc.get() + + if importlib.util.find_spec("graphviz"): + # visualize the DFG + from pm4py.visualization.dfg import visualizer as dfg_visualizer + gviz = dfg_visualizer.apply(dfg, variant=dfg_visualizer.Variants.FREQUENCY, activities_count=activities, + parameters={"format": examples_conf.TARGET_IMG_FORMAT, "start_activities": start_activities, + "end_activities": end_activities}) + dfg_visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/streaming_live_to_static_stream.py b/pm4py/examples/streaming_live_to_static_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..18fc011b3b098276abd3f725acf76a6171803a8d --- /dev/null +++ b/pm4py/examples/streaming_live_to_static_stream.py @@ -0,0 +1,30 @@ +from pm4py.streaming.importer.csv.variants import csv_event_stream +from pm4py.streaming.stream.live_event_stream import LiveEventStream +from pm4py.streaming.util.live_to_static_stream import LiveToStaticStream + + +def execute_script(): + # creates a live event stream, forwarding events to its algorithmic listeners + live_stream = LiveEventStream() + + # in this case, the listener that we register to the live stream + # just saves the list of events that are submitted to the live event stream + static_stream_converter = LiveToStaticStream() + live_stream.register(static_stream_converter) + + # starts the live event stream + live_stream.start() + # reads a CSV line-by-line and send its rows to the live event stream + csv_reader = csv_event_stream.apply("../tests/input_data/running-example.csv") + csv_reader.to_event_stream(live_stream) + + # stops the live event stream + live_stream.stop() + + # gets the list of events stored inside the converter + static_stream = static_stream_converter.get() + print(static_stream) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/streaming_xes_reader_event_stream.py b/pm4py/examples/streaming_xes_reader_event_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..93890ad3dd6eeebd91672860ca7f945196031bbd --- /dev/null +++ b/pm4py/examples/streaming_xes_reader_event_stream.py @@ -0,0 +1,19 @@ +from pm4py.streaming.stream.live_event_stream import LiveEventStream +from pm4py.streaming.importer.xes import importer as streaming_xes_importer +from pm4py.streaming.util.event_stream_printer import EventStreamPrinter +import os, time + + +def execute_script(): + live_event_stream = LiveEventStream() + event_stream_printer = EventStreamPrinter() + live_event_stream.register(event_stream_printer) + live_event_stream.start() + importer = streaming_xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes"), + variant=streaming_xes_importer.Variants.XES_EVENT_STREAM) + importer.to_event_stream(live_event_stream) + live_event_stream.stop() + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/streaming_xes_reader_trace_stream.py b/pm4py/examples/streaming_xes_reader_trace_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..0882b1eaf70bec929d3336488ac7a4e52924ef67 --- /dev/null +++ b/pm4py/examples/streaming_xes_reader_trace_stream.py @@ -0,0 +1,19 @@ +from pm4py.streaming.stream.live_trace_stream import LiveTraceStream +from pm4py.streaming.importer.xes import importer as streaming_xes_importer +from pm4py.streaming.util.trace_stream_printer import TraceStreamPrinter +import os, time + + +def execute_script(): + live_trace_stream = LiveTraceStream() + trace_stream_printer = TraceStreamPrinter() + live_trace_stream.register(trace_stream_printer) + live_trace_stream.start() + importer = streaming_xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes"), + variant=streaming_xes_importer.Variants.XES_TRACE_STREAM) + importer.to_trace_stream(live_trace_stream) + live_trace_stream.stop() + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/temporal_features.py b/pm4py/examples/temporal_features.py new file mode 100644 index 0000000000000000000000000000000000000000..8dbdc1a28e33fe0f51921b9f4dc9afcbc8c6dabd --- /dev/null +++ b/pm4py/examples/temporal_features.py @@ -0,0 +1,12 @@ +import pm4py +import os + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes")) + temporal_features = pm4py.extract_temporal_features_dataframe(log, grouper_freq="W") + print(temporal_features) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/temporal_profile_dataframe.py b/pm4py/examples/temporal_profile_dataframe.py new file mode 100644 index 0000000000000000000000000000000000000000..9821867102448ec51ab466072a876237e225a4c8 --- /dev/null +++ b/pm4py/examples/temporal_profile_dataframe.py @@ -0,0 +1,18 @@ +from pm4py.algo.discovery.temporal_profile import algorithm as temporal_profile_discovery +from pm4py.algo.conformance.temporal_profile import algorithm as temporal_profile_conformance +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils + + +def execute_script(): + dataframe = pandas_utils.read_csv("../tests/input_data/receipt.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + tf = temporal_profile_discovery.apply(dataframe) + conformance = temporal_profile_conformance.apply(dataframe, tf, parameters={"zeta": 6.0}) + for index, dev in enumerate(conformance): + if len(dev) > 0: + print(index, dev) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/temporal_profile_log.py b/pm4py/examples/temporal_profile_log.py new file mode 100644 index 0000000000000000000000000000000000000000..ca43d7d148727f21d32991c84f8b8923ae5c1616 --- /dev/null +++ b/pm4py/examples/temporal_profile_log.py @@ -0,0 +1,16 @@ +import pm4py +from pm4py.algo.discovery.temporal_profile import algorithm as temporal_profile_discovery +from pm4py.algo.conformance.temporal_profile import algorithm as temporal_profile_conformance + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes") + tf = temporal_profile_discovery.apply(log) + conformance = temporal_profile_conformance.apply(log, tf, parameters={"zeta": 6.0}) + for index, dev in enumerate(conformance): + if len(dev) > 0: + print(index, dev) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/test_evaluation.py b/pm4py/examples/test_evaluation.py new file mode 100644 index 0000000000000000000000000000000000000000..58cd5506530e95c7dd0c70012fc692df7aadb54d --- /dev/null +++ b/pm4py/examples/test_evaluation.py @@ -0,0 +1,18 @@ +import os + +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.evaluation import algorithm as general_evaluation +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "reviewing.xes")) + process_tree = inductive_miner.apply(log) + net, marking, final_marking = process_tree_converter.apply(process_tree) + metrics = general_evaluation.apply(log, net, marking, final_marking) + print("metrics=", metrics) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/timeline_dfg.py b/pm4py/examples/timeline_dfg.py new file mode 100644 index 0000000000000000000000000000000000000000..6d95142442653d748b3a08fcaad78b44910d42d5 --- /dev/null +++ b/pm4py/examples/timeline_dfg.py @@ -0,0 +1,20 @@ +import pm4py +from pm4py.algo.discovery.dfg.variants import clean_time +from pm4py.visualization.dfg.variants import timeline as timeline_gviz_generator +from pm4py.visualization.dfg import visualizer as dfg_visualizer + + +def execute_script(): + dataframe = pm4py.read_xes("../tests/input_data/running-example.xes") + + dfg, start_act, end_act = pm4py.discover_dfg_typed(dataframe) + + dfg_time = clean_time.apply(dataframe) + + gviz = timeline_gviz_generator.apply(dfg, dfg_time, parameters={"format": "svg", "start_activities": start_act, + "end_activities": end_act}) + dfg_visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/timestamp_case_grouping_filter.py b/pm4py/examples/timestamp_case_grouping_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..754b73e23a80034177bb7e3a2d265060442a8216 --- /dev/null +++ b/pm4py/examples/timestamp_case_grouping_filter.py @@ -0,0 +1,14 @@ +import pm4py +from pm4py.algo.filtering.pandas.timestamp_case_grouping import timestamp_case_grouping_filter + + +def execute_script(): + dataframe = pm4py.read_xes("../tests/input_data/roadtraffic100traces.xes") + print(dataframe) + filtered_dataframe = timestamp_case_grouping_filter.apply(dataframe, parameters={"filter_type": "concat"}) + print(filtered_dataframe) + print(filtered_dataframe["concept:name"].value_counts()) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/timestamp_granularity.py b/pm4py/examples/timestamp_granularity.py new file mode 100644 index 0000000000000000000000000000000000000000..3fb139addc5df1d1188496378e3baa7500bafa9a --- /dev/null +++ b/pm4py/examples/timestamp_granularity.py @@ -0,0 +1,39 @@ +import pm4py +from pm4py.util import constants, pandas_utils +import time + + +def execute_script(): + dataframe = pandas_utils.read_csv("../tests/input_data/receipt.csv") + dataframe = pm4py.format_dataframe(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + + # prints the original timestamp column of the dataframe + print(dataframe["time:timestamp"]) + + # Here are some common options that you can use as a granularity: + # + # 'h': Hour + # 'min': Minute + # 's': Second + # 'ms': Millisecond + # 'ns': Nanosecond + + st = time.time_ns() + # cast on the minute + dataframe["time:timestamp"] = dataframe["time:timestamp"].dt.floor(freq='min') + ct = time.time_ns() + + print("required time for the timestamp casting: %.2f seconds" % ((ct-st)/10**9)) + + # prints the new timestamp column of the dataframe + print(dataframe["time:timestamp"]) + + # for completeness, we report some alternatives methods in Pandas to do the same (casting on the minute): + # + # dataframe["time:timestamp"] = dataframe["time:timestamp"].apply(lambda x: x.replace(second=0, microsecond=0)) + # + # dataframe["time:timestamp"] = dataframe["time:timestamp"].dt.round('min') + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/timestamp_interleavings.py b/pm4py/examples/timestamp_interleavings.py new file mode 100644 index 0000000000000000000000000000000000000000..15c9d8827aba29518567577a0c760eab305d2006 --- /dev/null +++ b/pm4py/examples/timestamp_interleavings.py @@ -0,0 +1,33 @@ +from pm4py.util import constants, pandas_utils +from pm4py.algo.discovery.ocel.interleavings import algorithm as interleavings_miner +from pm4py.objects.log.util import dataframe_utils +from examples import examples_conf +import importlib.util +import os + + +def execute_script(): + receipt_even = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "interleavings", "receipt_even.csv")) + receipt_odd = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "interleavings", "receipt_odd.csv")) + receipt_even = dataframe_utils.convert_timestamp_columns_in_df(receipt_even, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + receipt_odd = dataframe_utils.convert_timestamp_columns_in_df(receipt_odd, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + case_relations = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "interleavings", "case_relations.csv")) + interleavings_dataframe = interleavings_miner.apply(receipt_even, receipt_odd, case_relations) + print(interleavings_dataframe) + # print the frequency and the direction of the interleavings + print(interleavings_dataframe[["@@source_activity", "@@target_activity", "@@direction"]].value_counts()) + # print the performance of the interleavings + print(interleavings_dataframe.groupby(["@@source_activity", "@@target_activity", "@@direction"])["@@timestamp_diff"].agg("mean")) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.ocel.interleavings import visualizer as interleavings_visualizer + # visualizes the frequency of the interleavings + gviz_freq = interleavings_visualizer.apply(receipt_even, receipt_odd, interleavings_dataframe, parameters={"annotation": "frequency", "format": examples_conf.TARGET_IMG_FORMAT}) + interleavings_visualizer.view(gviz_freq) + # visualizes the performance of the interleavings + gviz_perf = interleavings_visualizer.apply(receipt_even, receipt_odd, interleavings_dataframe, parameters={"annotation": "performance", "aggregation_measure": "median", "format": examples_conf.TARGET_IMG_FORMAT}) + interleavings_visualizer.view(gviz_perf) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/token_replay_alpha.py b/pm4py/examples/token_replay_alpha.py new file mode 100644 index 0000000000000000000000000000000000000000..f7588534b745580b6da407a06c011b2d7d44b805 --- /dev/null +++ b/pm4py/examples/token_replay_alpha.py @@ -0,0 +1,35 @@ +import os + +from pm4py.algo.conformance.tokenreplay import algorithm as token_replay +from pm4py.algo.discovery.alpha import algorithm as alpha_miner +from pm4py.objects.log.importer.xes import importer as xes_importer +from examples import examples_conf +import importlib.util + + +def execute_script(): + log_path = os.path.join("..", "tests", "input_data", "running-example.xes") + log = xes_importer.apply(log_path) + net, marking, final_marking = alpha_miner.apply(log) + for place in marking: + print("initial marking " + place.name) + for place in final_marking: + print("final marking " + place.name) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer as pn_vis + gviz = pn_vis.apply(net, marking, final_marking, + parameters={pn_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + pn_vis.view(gviz) + + print("started token replay") + aligned_traces = token_replay.apply(log, net, marking, final_marking) + fit_traces = [x for x in aligned_traces if x['trace_is_fit']] + perc_fitness = 0.00 + if len(aligned_traces) > 0: + perc_fitness = len(fit_traces) / len(aligned_traces) + print("perc_fitness=", perc_fitness) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/token_replay_imdf.py b/pm4py/examples/token_replay_imdf.py new file mode 100644 index 0000000000000000000000000000000000000000..2d178b20e0d8c770b9b00c2aefbd1f75c2f8c817 --- /dev/null +++ b/pm4py/examples/token_replay_imdf.py @@ -0,0 +1,38 @@ +import os + +from pm4py.algo.conformance.tokenreplay import algorithm as token_replay +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +from examples import examples_conf +import importlib.util + + +def execute_script(): + log_path = os.path.join("..", "tests", "input_data", "running-example.xes") + log = xes_importer.apply(log_path) + print("loaded log") + process_tree = inductive_miner.apply(log) + net, marking, final_marking = process_tree_converter.apply(process_tree) + for place in marking: + print("initial marking " + place.name) + for place in final_marking: + print("final marking " + place.name) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.petri_net import visualizer as pn_vis + gviz = pn_vis.apply(net, marking, final_marking, + parameters={pn_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + pn_vis.view(gviz) + + print("started token replay") + aligned_traces = token_replay.apply(log, net, marking, final_marking) + fit_traces = [x for x in aligned_traces if x['trace_is_fit']] + perc_fitness = 0.00 + if len(aligned_traces) > 0: + perc_fitness = len(fit_traces) / len(aligned_traces) + print("perc_fitness=", perc_fitness) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/trace_attrib_hierarch_cluster.py b/pm4py/examples/trace_attrib_hierarch_cluster.py new file mode 100644 index 0000000000000000000000000000000000000000..5c1a539804928c5582b4ce16751855ca26bbaee1 --- /dev/null +++ b/pm4py/examples/trace_attrib_hierarch_cluster.py @@ -0,0 +1,28 @@ +import pm4py +from pm4py.algo.clustering.trace_attribute_driven import algorithm as clust_algorithm + + +def recursive_print_clusters(cluster_tree, rec_depth=0): + if rec_depth > 0: + # print the values belonging to the current part of the tree + # (this allows filtering the event log on a given part of the tree) + print("\t"*rec_depth, cluster_tree["name"].split("-")) + + for child in cluster_tree["children"]: + recursive_print_clusters(child, rec_depth+1) + + if not cluster_tree["children"]: + # there are no children, explicitly tell that + print("\t"*(rec_depth+1), "END") + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes", return_legacy_log_object=True) + log = pm4py.sample_cases(log, num_cases=20) + # perform hierarchical clustering on the 'responsible' attribute of the log + cluster_tree = clust_algorithm.apply(log, "responsible")[0] + recursive_print_clusters(cluster_tree) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/trace_clustering.py b/pm4py/examples/trace_clustering.py new file mode 100644 index 0000000000000000000000000000000000000000..b6e143bb842fb6ef62935aeb892efec4af8371fe --- /dev/null +++ b/pm4py/examples/trace_clustering.py @@ -0,0 +1,23 @@ +import pm4py +import os +from examples import examples_conf +import importlib.util + + +def execute_script(): + dataframe = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes"), return_legacy_log_object=True) + + # define a K-Means with 3 clusters + from pm4py.util import ml_utils + clusterer = ml_utils.KMeans(n_clusters=3, random_state=0, n_init="auto") + + for clust_log in pm4py.cluster_log(dataframe, sklearn_clusterer=clusterer): + print(clust_log) + process_tree = pm4py.discover_process_tree_inductive(clust_log) + + if importlib.util.find_spec("graphviz"): + pm4py.view_process_tree(process_tree, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/trans_system_stochastic_vis.py b/pm4py/examples/trans_system_stochastic_vis.py new file mode 100644 index 0000000000000000000000000000000000000000..16520079a8f2fd5cb522ab2276afffca888960de --- /dev/null +++ b/pm4py/examples/trans_system_stochastic_vis.py @@ -0,0 +1,20 @@ +import pm4py +from pm4py.algo.discovery.transition_system import algorithm as transition_system_discovery +from examples import examples_conf +import os +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes")) + ts = transition_system_discovery.apply(log, parameters={"include_data": True, "direction": "forward"}) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.transition_system.variants import trans_frequency + from pm4py.visualization.transition_system import visualizer as transition_system_visualizer + gviz = trans_frequency.apply(ts, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + transition_system_visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/transform_db_to_ocel.py b/pm4py/examples/transform_db_to_ocel.py new file mode 100644 index 0000000000000000000000000000000000000000..c69f9450737ea13df3ad1a0ba82464a94a633d4e --- /dev/null +++ b/pm4py/examples/transform_db_to_ocel.py @@ -0,0 +1,135 @@ +from datetime import datetime +import pm4py +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import pandas_utils, constants +from pm4py.util.dt_parsing.variants import strpfromiso +import os + + +def extract_invoices(cursor): + cursor.execute( + "SELECT CustomerId, InvoiceId, InvoiceDate, BillingAddress, BillingCity, BillingCountry, BillingPostalCode FROM Invoice") + + invoices = {} + for res in cursor.fetchall(): + dct = {"ocel:oid": "inv"+str(res[0]), "ocel:type": "invoice", "CustomerId": res[0], "InvoiceId": res[1], "InvoiceDate": strpfromiso.apply(res[2]), "BillingAddress": res[3], + "BillingCity": res[4], "BillingCountry": res[5], "BillingPostalCode": res[6]} + + invoices[res[0]] = dct + + return invoices + + +def extract_invoice_lines(cursor): + cursor.execute("SELECT InvoiceLineId, InvoiceId, TrackId, UnitPrice, Quantity FROM InvoiceLine") + + invoice_lines = {} + for res in cursor.fetchall(): + invoice_lines[res[0]] = {"ocel:oid": "invline"+str(res[0]), "ocel:type": "invoiceline", "InvoiceLineId": res[0], "InvoiceId": res[1], "TrackId": res[2], "UnitPrice": res[3], "Category": res[4]} + + return invoice_lines + + +def extract_customers(cursor): + cursor.execute("SELECT CustomerId, FirstName, LastName, Company, Address, City, State, Country FROM Customer") + + customers = {} + for res in cursor.fetchall(): + customers[res[0]] = {"ocel:oid": "cust"+str(res[0]), "ocel:type": "customer", "CustomerId": res[0], "FirstName": res[1], "LastName": res[2], "Company": res[3], "Address": res[4], + "City": res[5], "State": res[6], "Country": res[7]} + + return customers + + +def extract_employee(cursor): + cursor.execute("SELECT EmployeeId, LastName, FirstName, Title, ReportsTo, BirthDate, HireDate, Address, City, State, Country, PostalCode, Phone, Fax, Email FROM Employee") + + employee = {} + + for res in cursor.fetchall(): + dct = {"ocel:oid": "emp"+str(res[0]), "ocel:type": "employee", "EmployeeId": res[0], "LastName": res[1], "FirstName": res[2], "Title": res[3], "ReportsTo": res[4], "BirthDate": strpfromiso.apply(res[5]), "HireDate": strpfromiso.apply(res[6]), "Address": res[7], "City": res[8], "State": res[9], "Country": res[10], "PostalCode": res[11], "Phone": res[12], "Fax": res[13], "Email": res[14]} + + employee[res[0]] = dct + + return employee + + +def execute_script(): + import sqlite3 + conn = sqlite3.connect("../tests/input_data/db/Chinook_Sqlite.sqlite") + cursor = conn.cursor() + + invoices = extract_invoices(cursor) + invoice_lines = extract_invoice_lines(cursor) + customers = extract_customers(cursor) + employee = extract_employee(cursor) + + objects = [] + events = [] + relations = [] + + for i in invoices: + objects.append(invoices[i]) + for il in invoice_lines: + objects.append(invoice_lines[il]) + for c in customers: + objects.append(customers[c]) + for e in employee: + objects.append(employee[e]) + + inv_line_map = {} + for i, v in invoice_lines.items(): + if not v["InvoiceId"] in inv_line_map: + inv_line_map[v["InvoiceId"]] = [] + inv_line_map[v["InvoiceId"]].append(v["InvoiceLineId"]) + + for i in invoices: + event = {"ocel:eid": "evinv"+str(i), "ocel:activity": "Create Invoice", "ocel:timestamp": invoices[i]["InvoiceDate"]} + events.append(event) + + relation_inv = {"ocel:eid": "evinv"+str(i), "ocel:activity": "Create Invoice", "ocel:timestamp": invoices[i]["InvoiceDate"], "ocel:type": "invoice", "ocel:oid": "inv"+str(i)} + relations.append(relation_inv) + + relation_cust = {"ocel:eid": "evinv"+str(i), "ocel:activity": "Create Invoice", "ocel:timestamp": invoices[i]["InvoiceDate"], "ocel:type": "customer", "ocel:oid": "cust"+str(i)} + relations.append(relation_cust) + + for v in inv_line_map[i]: + relation_line = {"ocel:eid": "evinv"+str(i), "ocel:activity": "Create Invoice", "ocel:timestamp": invoices[i]["InvoiceDate"], "ocel:type": "invoiceline", "ocel:oid": "invline"+str(v)} + relations.append(relation_line) + + for e in employee: + event = {"ocel:eid": "evempbirth"+str(e), "ocel:activity": "Employee Birth", "ocel:timestamp": employee[e]["BirthDate"]} + events.append(event) + + relation = {"ocel:eid": "evempbirth"+str(e), "ocel:activity": "Employee Birth", "ocel:timestamp": employee[e]["BirthDate"], "ocel:type": "employee", "ocel:oid": "emp"+str(e)} + relations.append(relation) + + for e in employee: + event = {"ocel:eid": "evemphired"+str(e), "ocel:activity": "Employee Hired", "ocel:timestamp": employee[e]["HireDate"]} + events.append(event) + + relation = {"ocel:eid": "evemphired"+str(e), "ocel:activity": "Employee Hired", "ocel:timestamp": employee[e]["HireDate"], "ocel:type": "employee", "ocel:oid": "emp"+str(e)} + relations.append(relation) + + events = pandas_utils.instantiate_dataframe(events) + objects = pandas_utils.instantiate_dataframe(objects) + relations = pandas_utils.instantiate_dataframe(relations) + + events = events.sort_values("ocel:timestamp") + relations = relations.sort_values("ocel:timestamp") + + ocel = OCEL() + ocel.events = events + ocel.objects = objects + ocel.relations = relations + + ocel.events = ocel.events.dropna(subset=["ocel:timestamp"]) + ocel.relations = ocel.relations.dropna(subset=["ocel:timestamp"]) + + pm4py.write_ocel(ocel, "chinook.jsonocel") + ocel = pm4py.read_ocel("chinook.jsonocel") + os.remove("chinook.jsonocel") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/transform_db_to_ocel_2.py b/pm4py/examples/transform_db_to_ocel_2.py new file mode 100644 index 0000000000000000000000000000000000000000..6519ecb49b05ea29bb16580b3338f9a27c7d27bf --- /dev/null +++ b/pm4py/examples/transform_db_to_ocel_2.py @@ -0,0 +1,154 @@ +import sqlite3 +import pandas as pd +from copy import copy +from dateutil import parser +from pm4py.util.dt_parsing.variants import strpfromiso + +import pm4py +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import constants, pandas_utils +import os + + +def execute_script(): + conn = sqlite3.connect("../tests/input_data/db/northwind.sqlite") + employees = pd.read_sql("SELECT EmployeeID, BirthDate, HireDate FROM Employees", conn) + employees = employees.to_dict("records") + orders = pd.read_sql("SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate, ShippedDate FROM Orders", conn) + orders = orders.to_dict("records") + + events = [] + relations = [] + objects = [] + objects_ids = set() + + eid = 0 + for e in employees: + oid = str(e["EmployeeID"]) + if oid not in objects_ids: + obj = {"ocel:oid": oid, "ocel:type": "Employee"} + objects.append(obj) + objects_ids.add(oid) + + eid += 1 + ev = {"ocel:eid": str(eid), "ocel:activity": "Created Employee", "ocel:timestamp": strpfromiso.fix_naivety(parser.parse(e["HireDate"]))} + events.append(ev) + + rel = copy(ev) + rel["ocel:oid"] = str(e["EmployeeID"]) + rel["ocel:type"] = "Employee" + relations.append(rel) + + for o in orders: + oid = str(o["OrderID"]) + + if oid not in objects_ids: + obj = {"ocel:oid": oid, "ocel:type": "Order"} + objects.append(obj) + objects_ids.add(oid) + + eid += 1 + ev = {"ocel:eid": str(eid), "ocel:activity": "Created Order", "ocel:timestamp": strpfromiso.fix_naivety(parser.parse(o["OrderDate"]))} + events.append(ev) + + rel1 = copy(ev) + rel1["ocel:oid"] = str(o["OrderID"]) + rel1["ocel:type"] = "Order" + relations.append(rel1) + + rel2 = copy(ev) + rel2["ocel:oid"] = str(o["EmployeeID"]) + rel2["ocel:type"] = "Employee" + relations.append(rel2) + + ocel = OCEL(events=pandas_utils.instantiate_dataframe(events), objects=pandas_utils.instantiate_dataframe(objects), relations=pandas_utils.instantiate_dataframe(relations)) + pm4py.write_ocel(ocel, "log1.jsonocel") + + events = None + relations = None + objects = None + objects_ids = None + events = [] + relations = [] + objects = [] + objects_ids = set() + + eid = 0 + oid = 0 + for e in employees: + oid = str(e["EmployeeID"]) + if oid not in objects_ids: + obj = {"ocel:oid": oid, "ocel:type": "Employee"} + objects.append(obj) + objects_ids.add(oid) + + eid += 1 + ev0 = {"ocel:eid": str(eid), "ocel:activity": "Employee Birth", "ocel:timestamp": strpfromiso.fix_naivety(parser.parse(e["BirthDate"]))} + events.append(ev0) + + eid += 1 + ev = {"ocel:eid": str(eid), "ocel:activity": "Hired Employee", "ocel:timestamp": strpfromiso.fix_naivety(parser.parse(e["HireDate"]))} + events.append(ev) + + rel = copy(ev0) + rel["ocel:oid"] = str(e["EmployeeID"]) + rel["ocel:type"] = "Employee" + relations.append(rel) + + rel = copy(ev) + rel["ocel:oid"] = str(e["EmployeeID"]) + rel["ocel:type"] = "Employee" + relations.append(rel) + + for o in orders: + oid = str(o["OrderID"]) + + if oid not in objects_ids: + obj = {"ocel:oid": oid, "ocel:type": "Order"} + objects.append(obj) + objects_ids.add(oid) + + eid += 1 + ev = {"ocel:eid": str(eid), "ocel:activity": "Created Order", "ocel:timestamp": strpfromiso.fix_naivety(parser.parse(o["OrderDate"]))} + events.append(ev) + + + rel1 = copy(ev) + rel1["ocel:oid"] = str(o["OrderID"]) + rel1["ocel:type"] = "Order" + relations.append(rel1) + + rel2 = copy(ev) + rel2["ocel:oid"] = str(o["EmployeeID"]) + rel2["ocel:type"] = "Employee" + relations.append(rel2) + + if o["ShippedDate"] is not None: + eid += 1 + ev3 = {"ocel:eid": str(eid), "ocel:activity": "Order Shipped", "ocel:timestamp": strpfromiso.fix_naivety(parser.parse(o["ShippedDate"]))} + events.append(ev3) + + rel3 = copy(ev3) + rel3["ocel:oid"] = str(o["OrderID"]) + rel3["ocel:type"] = "Order" + relations.append(rel3) + + if o["RequiredDate"] is not None: + eid += 1 + ev4 = {"ocel:eid": str(eid), "ocel:activity": "Order Due Date", "ocel:timestamp": strpfromiso.fix_naivety(parser.parse(o["RequiredDate"]))} + events.append(ev4) + + rel4 = copy(ev4) + rel4["ocel:oid"] = str(o["OrderID"]) + rel4["ocel:type"] = "Order" + relations.append(rel4) + + ocel = OCEL(events=pandas_utils.instantiate_dataframe(events), objects=pandas_utils.instantiate_dataframe(objects), relations=pandas_utils.instantiate_dataframe(relations)) + pm4py.write_ocel(ocel, "log2.jsonocel") + + os.remove("log1.jsonocel") + os.remove("log2.jsonocel") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/transform_db_to_xes.py b/pm4py/examples/transform_db_to_xes.py new file mode 100644 index 0000000000000000000000000000000000000000..3ca08d69eb28e40cd601b533ad97d18b8d80a4fe --- /dev/null +++ b/pm4py/examples/transform_db_to_xes.py @@ -0,0 +1,76 @@ +from dateutil.parser import parse +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.util.dt_parsing.variants import strpfromiso +import pm4py +import os + + +def extract_invoices(cursor): + cursor.execute( + "SELECT CustomerId, InvoiceId, InvoiceDate, BillingAddress, BillingCity, BillingCountry, BillingPostalCode FROM Invoice") + + invoices = {} + for res in cursor.fetchall(): + if not res[0] in invoices: + invoices[res[0]] = [] + invoices[res[0]].append( + {"CustomerId": res[0], "InvoiceId": res[1], "InvoiceDate": strpfromiso.fix_naivety(parse(res[2])), "BillingAddress": res[3], + "BillingCity": res[4], "BillingCountry": res[5], "BillingPostalCode": res[6]}) + + return invoices + + +def extract_invoice_lines(cursor): + cursor.execute("SELECT InvoiceLineId, InvoiceId, TrackId, UnitPrice, Quantity FROM InvoiceLine") + + invoice_lines = {} + for res in cursor.fetchall(): + if not res[1] in invoice_lines: + invoice_lines[res[1]] = [] + invoice_lines[res[1]].append({"InvoiceLineId": res[0], "InvoiceId": res[1], "TrackId": res[2], "UnitPrice": res[3], "Category": res[4]}) + + return invoice_lines + + +def extract_customers(cursor): + cursor.execute("SELECT CustomerId, FirstName, LastName, Company, Address, City, State, Country FROM Customer") + + customers = {} + for res in cursor.fetchall(): + customers[res[0]] = {"CustomerId": res[0], "FirstName": res[1], "LastName": res[2], "Company": res[3], "Address": res[4], + "City": res[5], "State": res[6], "Country": res[7]} + + return customers + + +def execute_script(): + import sqlite3 + conn = sqlite3.connect("../tests/input_data/db/Chinook_Sqlite.sqlite") + cursor = conn.cursor() + + invoices = extract_invoices(cursor) + invoice_lines = extract_invoice_lines(cursor) + customers = extract_customers(cursor) + + log = EventLog() + for customer in customers: + trace = Trace() + trace.attributes.update(customers[customer]) + log.append(trace) + for invoice in invoices[customer]: + event = Event() + for k, v in invoice.items(): + event[k] = v + event["time:timestamp"] = event["InvoiceDate"] + event["concept:name"] = "Sent Invoice" + event["invoice_lines"] = [] + for item in invoice_lines[invoice["InvoiceId"]]: + event["invoice_lines"].append(item) + trace.append(event) + + pm4py.write_xes(log, "chinook.xes") + os.remove("chinook.xes") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/transient_dfg.py b/pm4py/examples/transient_dfg.py new file mode 100644 index 0000000000000000000000000000000000000000..2d733f89a9615c9d830b78e7a8a8d85a5c066659 --- /dev/null +++ b/pm4py/examples/transient_dfg.py @@ -0,0 +1,20 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.dfg import algorithm as dfg_miner +from pm4py.objects.stochastic_petri import ctmc +import os + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + performance_dfg = dfg_miner.apply(log, variant=dfg_miner.Variants.PERFORMANCE) + reach_graph, tang_reach_graph, stochastic_map, q_matrix = ctmc.get_tangible_reachability_and_q_matrix_from_dfg_performance( + performance_dfg) + # pick the source state + state = [x for x in tang_reach_graph.states if x.name == "source1"][0] + # analyse the distribution over the states of the system starting from the source after 86400.0 seconds (1 day) + transient_result = ctmc.transient_analysis_from_tangible_q_matrix_and_single_state(tang_reach_graph, q_matrix, state, 86400.0) + print(transient_result) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/transient_petri_net.py b/pm4py/examples/transient_petri_net.py new file mode 100644 index 0000000000000000000000000000000000000000..c724390a4a09330e0093845f1a2ad414c02018af --- /dev/null +++ b/pm4py/examples/transient_petri_net.py @@ -0,0 +1,23 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.alpha import algorithm as alpha_miner +from pm4py.objects.stochastic_petri import ctmc +import os + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + net, im, fm = alpha_miner.apply(log) + # the alpha miner in this case returns a sound workflow net! + # get the tangible reachability graph and the Q-matrix + reach_graph, tang_reach_graph, stochastic_map, q_matrix = ctmc.get_tangible_reachability_and_q_matrix_from_log_net( + log, net, im, fm) + print(reach_graph.states) + # pick the source state + state = [x for x in tang_reach_graph.states if x.name.startswith("registerrequest") or x.name.startswith("reinitiaterequest")][0] + # analyse the distribution over the states of the system starting from the source after 86400.0 seconds (1 day) + transient_result = ctmc.transient_analysis_from_tangible_q_matrix_and_single_state(tang_reach_graph, q_matrix, state, 86400.0) + print(transient_result) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/transition_system_test.py b/pm4py/examples/transition_system_test.py new file mode 100644 index 0000000000000000000000000000000000000000..9812a9f122d8cee14c472d7f85a5c3ef112bd965 --- /dev/null +++ b/pm4py/examples/transition_system_test.py @@ -0,0 +1,27 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.transition_system import algorithm as ts_discovery +from examples import examples_conf +import os +import importlib.util + + +def execute_script(): + # log_path = "C:/Users/bas/Documents/tue/svn/private/logs/ilp_test_2_abcd_acbd.xes" + log_path = os.path.join("..", "tests", "input_data", "running-example.xes") + log = xes_importer.apply(log_path) + ts = ts_discovery.apply(log, parameters={"include_data": True}) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.transition_system import visualizer as ts_vis + viz = ts_vis.apply(ts, parameters={ts_vis.Variants.VIEW_BASED.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + ts_vis.view(viz) + + for state in ts.states: + print(state.name, "ingoing=", len(state.data["ingoing_events"]), "outgoing=", + len(state.data["outgoing_events"])) + for trans in ts.transitions: + print(trans.name, trans.from_state.name, trans.to_state.name, "frequency=", len(trans.data["events"])) + + +if __name__ == '__main__': + execute_script() diff --git a/pm4py/examples/tree_manual_generation.py b/pm4py/examples/tree_manual_generation.py new file mode 100644 index 0000000000000000000000000000000000000000..61ba054238d3b00d0a7ce0ae59932f0788d1c0d8 --- /dev/null +++ b/pm4py/examples/tree_manual_generation.py @@ -0,0 +1,47 @@ +import pm4py +from pm4py.objects.process_tree.obj import ProcessTree, Operator +from examples import examples_conf +import importlib.util + + +def execute_script(): + root = ProcessTree(operator=Operator.SEQUENCE) + + choice = ProcessTree(operator=Operator.XOR, parent=root) + parallel = ProcessTree(operator=Operator.PARALLEL, parent=root) + + root.children.append(choice) + root.children.append(parallel) + + leaf_A = ProcessTree(label="A", parent=choice) + leaf_B = ProcessTree(label="B", parent=choice) + leaf_C = ProcessTree(label="C", parent=choice) + + choice.children.append(leaf_A) + choice.children.append(leaf_B) + choice.children.append(leaf_C) + + leaf_D = ProcessTree(label="D", parent=parallel) + leaf_E = ProcessTree(label="E", parent=parallel) + leaf_F = ProcessTree(label="F", parent=parallel) + + parallel.children.append(leaf_D) + parallel.children.append(leaf_E) + parallel.children.append(leaf_F) + + if importlib.util.find_spec("graphviz"): + pm4py.view_process_tree(root, format=examples_conf.TARGET_IMG_FORMAT) + + # remove leaf_C from choice + choice.children.remove(leaf_C) + + # remove the leaf with label "E" from parallel + parallel.children.remove( + [parallel.children[i] for i in range(len(parallel.children)) if parallel.children[i].label == "E"][0]) + + if importlib.util.find_spec("graphviz"): + pm4py.view_process_tree(root, format=examples_conf.TARGET_IMG_FORMAT) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/tree_playout.py b/pm4py/examples/tree_playout.py new file mode 100644 index 0000000000000000000000000000000000000000..a37213d04067b84865057aba24f782293c74f12f --- /dev/null +++ b/pm4py/examples/tree_playout.py @@ -0,0 +1,21 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.simulation.playout.process_tree import algorithm as tree_playout +import os + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + tree = inductive_miner.apply(log) + new_log_1 = tree_playout.apply(tree) + print(len(new_log_1)) + new_tree_1 = inductive_miner.apply(new_log_1) + print(new_tree_1) + new_log_2 = tree_playout.apply(tree, variant=tree_playout.Variants.EXTENSIVE) + print(len(new_log_2)) + new_tree_2 = inductive_miner.apply(new_log_2) + print(new_tree_2) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/trie.py b/pm4py/examples/trie.py new file mode 100644 index 0000000000000000000000000000000000000000..041316d2178aaf77e06d07df9c59e39173f882a5 --- /dev/null +++ b/pm4py/examples/trie.py @@ -0,0 +1,20 @@ +import os + +import pm4py +from pm4py.algo.transformation import log_to_trie +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "running-example.xes")) + trie = log_to_trie.algorithm.apply(log) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.trie import visualizer + gviz = visualizer.apply(trie, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/validation_ocel20_relational.py b/pm4py/examples/validation_ocel20_relational.py new file mode 100644 index 0000000000000000000000000000000000000000..6c12e38eed4e44a0c1f8d4af207e0a7378f4f272 --- /dev/null +++ b/pm4py/examples/validation_ocel20_relational.py @@ -0,0 +1,16 @@ +from pm4py.objects.ocel.validation import ocel20_rel_validation + + +def execute_script(): + file_path = "../tests/input_data/ocel/ocel20_example.sqlite" + + try: + satisfied, unsatisfied = ocel20_rel_validation.apply(file_path) + print("satisfied", satisfied) + print("unsatisfied", unsatisfied) + except: + print("Impossible to validate the OCEL!") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/validation_ocel20_xml.py b/pm4py/examples/validation_ocel20_xml.py new file mode 100644 index 0000000000000000000000000000000000000000..2384a417c19bf7b15318fbfac60031fe818afbe0 --- /dev/null +++ b/pm4py/examples/validation_ocel20_xml.py @@ -0,0 +1,16 @@ +from pm4py.objects.ocel.validation import xmlocel + + +def execute_script(): + file_path = "../tests/input_data/ocel/ocel20_example.xmlocel" + validation_path = "../tests/input_data/ocel/ocel2-validation.xsd" + + try: + is_valid = xmlocel.apply(file_path, validation_path) + print(is_valid) + except: + print("Impossible to validate the OCEL!") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/variants_paths_duration.py b/pm4py/examples/variants_paths_duration.py new file mode 100644 index 0000000000000000000000000000000000000000..5be3a4e199348dd4c22d7d598e0f34936d546c7d --- /dev/null +++ b/pm4py/examples/variants_paths_duration.py @@ -0,0 +1,20 @@ +import pm4py + + +def execute_script(): + log = pm4py.read_xes("../tests/input_data/receipt.xes") + var_paths_durs = pm4py.get_variants_paths_duration(log) + print(var_paths_durs.columns) + + # gets for each variant the average times (between all the cases of the given variant) + # between the activities 'Confirmation of receipt' and 'T02 Check confirmation of receipt' + df1 = var_paths_durs[(var_paths_durs["concept:name"] == "Confirmation of receipt") & (var_paths_durs["concept:name_2"] == "T02 Check confirmation of receipt")] + print(df1[["@@variant_column", "@@flow_time"]]) + + # gets the paths which are repeated in some variants, along with the number of variants for which they are repeated + df2 = var_paths_durs[var_paths_durs["@@cumulative_occ_path_column"] == 1] + print(df2.groupby(["concept:name", "concept:name_2"]).size()) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/visualization_align_table.py b/pm4py/examples/visualization_align_table.py new file mode 100644 index 0000000000000000000000000000000000000000..fc284d75bbac369cdb8f7345e6bff30da521c8d1 --- /dev/null +++ b/pm4py/examples/visualization_align_table.py @@ -0,0 +1,24 @@ +import os +from pm4py.objects.log.importer.xes import importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +from examples import examples_conf +import importlib.util + + +def execute_script(): + log = importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + aligned_traces = alignments.apply(log, net, im, fm) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.align_table import visualizer + gviz = visualizer.apply(log, aligned_traces, + parameters={visualizer.Variants.CLASSIC.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + visualizer.view(gviz) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/visualization_processtree.py b/pm4py/examples/visualization_processtree.py new file mode 100644 index 0000000000000000000000000000000000000000..cdb918b5e4bf40929f4f5f808b5164e9de553079 --- /dev/null +++ b/pm4py/examples/visualization_processtree.py @@ -0,0 +1,23 @@ +from pm4py.objects.log.importer.xes import importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from examples import examples_conf +import os +import importlib.util + + +def execute_script(): + log = importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + tree = inductive_miner.apply(log) + + if importlib.util.find_spec("graphviz"): + from pm4py.visualization.process_tree import visualizer as pt_vis_factory + from pm4py.visualization.process_tree import visualizer as pt_visualizer + + gviz1 = pt_vis_factory.apply(tree, parameters={"format": examples_conf.TARGET_IMG_FORMAT}) + # pt_vis_factory.view(gviz1) + gviz2 = pt_visualizer.apply(tree, parameters={pt_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: examples_conf.TARGET_IMG_FORMAT}) + pt_visualizer.view(gviz2) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/windows_key_mouse_logger.py b/pm4py/examples/windows_key_mouse_logger.py new file mode 100644 index 0000000000000000000000000000000000000000..b31a099248fb8833aac7315e5bda5256fa32d3e7 --- /dev/null +++ b/pm4py/examples/windows_key_mouse_logger.py @@ -0,0 +1,27 @@ +from pm4py.streaming.stream.live_event_stream import LiveEventStream +from pm4py.streaming.connectors.windows.click_key_logger import WindowsEventLogger +from pm4py.streaming.util.event_stream_printer import EventStreamPrinter +import time + + +def execute_script(): + stream = LiveEventStream() + wel = WindowsEventLogger(stream, screenshots_folder="output") + printer = EventStreamPrinter() + stream.register(printer) + stream.start() + wel.start() + + print("listening") + + # listen only for 5 seconds + time.sleep(5) + + wel.stop() + stream.stop() + + print("stopped") + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/woflan.py b/pm4py/examples/woflan.py new file mode 100644 index 0000000000000000000000000000000000000000..c926dbe2673750d383c317b043d879e609285076 --- /dev/null +++ b/pm4py/examples/woflan.py @@ -0,0 +1,16 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.alpha import algorithm as alpha_miner +from pm4py.algo.analysis.woflan import algorithm as woflan +import os + + +def execute_script(): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + net, im, fm = alpha_miner.apply(log) + is_sound, diagn = woflan.apply(net, im, fm, parameters={"print_diagnostics": True, "return_diagnostics": True}) + print("is_sound", is_sound) + print(diagn) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/examples/workalendar_example.py b/pm4py/examples/workalendar_example.py new file mode 100644 index 0000000000000000000000000000000000000000..df8d6843e96bc1cbf00afa1982b58ea7a7c522d7 --- /dev/null +++ b/pm4py/examples/workalendar_example.py @@ -0,0 +1,23 @@ +from pm4py.util.business_hours import BusinessHours +from pm4py.util.dt_parsing.variants import strpfromiso +import datetime +from workalendar.europe import Italy +from pm4py.util import constants + + +def execute_script(): + ts1 = 100000000 + ts2 = 110000000 + d1 = strpfromiso.fix_naivety(datetime.datetime.fromtimestamp(ts1)) + d2 = strpfromiso.fix_naivety(datetime.datetime.fromtimestamp(ts2)) + print(ts2-ts1) + # default business hours: all the days of the week except Saturday and Sunday are working days. + bh1 = BusinessHours(d1, d2, business_hour_slots=constants.DEFAULT_BUSINESS_HOUR_SLOTS) + print(bh1.get_seconds()) + # let's calculate the business hours using a proper work calendar. + bh2 = BusinessHours(d1, d2, business_hour_slots=constants.DEFAULT_BUSINESS_HOUR_SLOTS, workcalendar=Italy()) + print(bh2.get_seconds()) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/notebooks/.gitignore b/pm4py/notebooks/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c0166be6e9676f27a02f4ded4c5c9d1d3443b0f6 --- /dev/null +++ b/pm4py/notebooks/.gitignore @@ -0,0 +1,5 @@ +/event_data.slides.html +/running_example_csv_exported_as_xes.xes +/running_example_exported.csv +/running_example_exported.csv +/running_example_xes_exported_as_csv.csv diff --git a/pm4py/notebooks/1_event_data.ipynb b/pm4py/notebooks/1_event_data.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..1bd71a874dbb59f5fa03f8cbdb4bc1a9946580f4 --- /dev/null +++ b/pm4py/notebooks/1_event_data.ipynb @@ -0,0 +1,1176 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Handling Event Data\n", + "*by: Sebastiaan J. van Zelst*" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "Process mining exploits Event Logs to generate knowledge of a process.\n", + "A wide variety of information systems, e.g., SAP, ORACLE, SalesForce, etc., allow us to extract, in one way or the other,\n", + "event logs similar to the example event logs.\n", + "All the examples we show in this notebook and all algorithms implemented in pm4py assume that we have already extracted\n", + "the event data into an appropriate event log format.\n", + "Hence, the core of pm4py does not support any data extraction features.\n", + "\n", + "In order to support interoperability between different process mining tools and libraries, two standard data formats are\n", + "used to capture event logs, i.e., Comma Separated Value (CSV) files and eXtensible Event Stream (XES) files.\n", + "CSV files resemble the example tables shown in the previous section, i.e., Table 1 and Table 2. Each line in such a file\n", + "describes an event that occurred. The columns represent the same type of data, as shown in the examples, e.g., the case\n", + "for which the event occurred, the activity, the timestamp, the resource executing the activity, etc.\n", + "The XES file format is an XML-based format that allows us to describe process behavior.\n", + "We will not go into specific details w.r.t. the format of XES files, i.e., we refer to http://xes-standard.org/ for an\n", + "overview.\n", + "\n", + "In this tutorial, we will use an oftenly used dummy example event log to explain the basic process mining operations.\n", + "The process that we are considering is a simplified process related to customer complaint handling, i.e., taken from the\n", + "book of van der Aalst (https://www.springer.com/de/book/9783662498507). The process, and the event data we are going to\n", + "use, looks as follows." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "![Running example BPMN-based process model describing the behavior of the simple process that we use in this tutorial](img/bpmn_running_example.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Importing CSV Files" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "Let’s get started!\n", + "We have prepared a small sample event log, containing behavior similar equal to the process model in Figure 3.\n", + "You can find the sample event log [here](data/running_example.csv).\n", + "\n", + "We are going to load the event data, and, we are going to count how many cases are present in the event log, as well as\n", + "the number of events. Note that, for all this, we are effectively using a third-party library called pandas.\n", + "We do so because pandas is the de-facto standard of loading/manipulating csv-based data.\n", + "Hence, any process mining algorithm implemented in pm4py, using an event log as an input, can work directly with a\n", + "pandas file!\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": " case_id activity timestamp costs org:resource\n0 3 register request 2010-12-30 14:32:00+01:00 50 Pete\n1 3 examine casually 2010-12-30 15:06:00+01:00 400 Mike\n2 3 check ticket 2010-12-30 16:34:00+01:00 100 Ellen\n3 3 decide 2011-01-06 09:18:00+01:00 200 Sara\n4 3 reinitiate request 2011-01-06 12:18:00+01:00 200 Sara\n5 3 examine thoroughly 2011-01-06 13:06:00+01:00 400 Sean\n6 3 check ticket 2011-01-08 11:43:00+01:00 100 Pete\n7 3 decide 2011-01-09 09:55:00+01:00 200 Sara\n8 3 pay compensation 2011-01-15 10:45:00+01:00 200 Ellen\n9 2 register request 2010-12-30 11:32:00+01:00 50 Mike\n10 2 check ticket 2010-12-30 12:12:00+01:00 100 Mike\n11 2 examine casually 2010-12-30 14:16:00+01:00 400 Sean\n12 2 decide 2011-01-05 11:22:00+01:00 200 Sara\n13 2 pay compensation 2011-01-08 12:05:00+01:00 200 Ellen\n14 1 register request 2010-12-30 11:02:00+01:00 50 Pete\n15 1 examine thoroughly 2010-12-31 10:06:00+01:00 400 Sue\n16 1 check ticket 2011-01-05 15:12:00+01:00 100 Mike\n17 1 decide 2011-01-06 11:18:00+01:00 200 Sara\n18 1 reject request 2011-01-07 14:24:00+01:00 200 Pete\n19 6 register request 2011-01-06 15:02:00+01:00 50 Mike\n20 6 examine casually 2011-01-06 16:06:00+01:00 400 Ellen\n21 6 check ticket 2011-01-07 16:22:00+01:00 100 Mike\n22 6 decide 2011-01-07 16:52:00+01:00 200 Sara\n23 6 pay compensation 2011-01-16 11:47:00+01:00 200 Mike\n24 5 register request 2011-01-06 09:02:00+01:00 50 Ellen\n25 5 examine casually 2011-01-07 10:16:00+01:00 400 Mike\n26 5 check ticket 2011-01-08 11:22:00+01:00 100 Pete\n27 5 decide 2011-01-10 13:28:00+01:00 200 Sara\n28 5 reinitiate request 2011-01-11 16:18:00+01:00 200 Sara\n29 5 check ticket 2011-01-14 14:33:00+01:00 100 Ellen\n30 5 examine casually 2011-01-16 15:50:00+01:00 400 Mike\n31 5 decide 2011-01-19 11:18:00+01:00 200 Sara\n32 5 reinitiate request 2011-01-20 12:48:00+01:00 200 Sara\n33 5 examine casually 2011-01-21 09:06:00+01:00 400 Sue\n34 5 check ticket 2011-01-21 11:34:00+01:00 100 Pete\n35 5 decide 2011-01-23 13:12:00+01:00 200 Sara\n36 5 reject request 2011-01-24 14:56:00+01:00 200 Mike\n37 4 register request 2011-01-06 15:02:00+01:00 50 Pete\n38 4 check ticket 2011-01-07 12:06:00+01:00 100 Mike\n39 4 examine thoroughly 2011-01-08 14:43:00+01:00 400 Sean\n40 4 decide 2011-01-09 12:02:00+01:00 200 Sara\n41 4 reject request 2011-01-12 15:44:00+01:00 200 Ellen", + "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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
case_idactivitytimestampcostsorg:resource
03register request2010-12-30 14:32:00+01:0050Pete
13examine casually2010-12-30 15:06:00+01:00400Mike
23check ticket2010-12-30 16:34:00+01:00100Ellen
33decide2011-01-06 09:18:00+01:00200Sara
43reinitiate request2011-01-06 12:18:00+01:00200Sara
53examine thoroughly2011-01-06 13:06:00+01:00400Sean
63check ticket2011-01-08 11:43:00+01:00100Pete
73decide2011-01-09 09:55:00+01:00200Sara
83pay compensation2011-01-15 10:45:00+01:00200Ellen
92register request2010-12-30 11:32:00+01:0050Mike
102check ticket2010-12-30 12:12:00+01:00100Mike
112examine casually2010-12-30 14:16:00+01:00400Sean
122decide2011-01-05 11:22:00+01:00200Sara
132pay compensation2011-01-08 12:05:00+01:00200Ellen
141register request2010-12-30 11:02:00+01:0050Pete
151examine thoroughly2010-12-31 10:06:00+01:00400Sue
161check ticket2011-01-05 15:12:00+01:00100Mike
171decide2011-01-06 11:18:00+01:00200Sara
181reject request2011-01-07 14:24:00+01:00200Pete
196register request2011-01-06 15:02:00+01:0050Mike
206examine casually2011-01-06 16:06:00+01:00400Ellen
216check ticket2011-01-07 16:22:00+01:00100Mike
226decide2011-01-07 16:52:00+01:00200Sara
236pay compensation2011-01-16 11:47:00+01:00200Mike
245register request2011-01-06 09:02:00+01:0050Ellen
255examine casually2011-01-07 10:16:00+01:00400Mike
265check ticket2011-01-08 11:22:00+01:00100Pete
275decide2011-01-10 13:28:00+01:00200Sara
285reinitiate request2011-01-11 16:18:00+01:00200Sara
295check ticket2011-01-14 14:33:00+01:00100Ellen
305examine casually2011-01-16 15:50:00+01:00400Mike
315decide2011-01-19 11:18:00+01:00200Sara
325reinitiate request2011-01-20 12:48:00+01:00200Sara
335examine casually2011-01-21 09:06:00+01:00400Sue
345check ticket2011-01-21 11:34:00+01:00100Pete
355decide2011-01-23 13:12:00+01:00200Sara
365reject request2011-01-24 14:56:00+01:00200Mike
374register request2011-01-06 15:02:00+01:0050Pete
384check ticket2011-01-07 12:06:00+01:00100Mike
394examine thoroughly2011-01-08 14:43:00+01:00400Sean
404decide2011-01-09 12:02:00+01:00200Sara
414reject request2011-01-12 15:44:00+01:00200Ellen
\n
" + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_csv('data/running_example.csv', sep=';')\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "Let's inspect the small event log.\n", + "The first line (i.e., row) specifies the name of each column (i.e., event attribute).\n", + "Observe that, in the data table described by the file, we have 5 columns, being: *case_id*, *activity*,\n", + "*timestamp*, *costs* and *org:resource*.\n", + "The first column represents the *case identifier*, i.e., allowing us to identify what activity has been logged in the\n", + "context of what instance of the process.\n", + "The second column (*activity*) records the activity that has been performed.\n", + "The third column shows at what point in time the activity was recorded (*timestamp*).\n", + "In this example data, additional information is present as well.\n", + "In this case, the fourth column tracks the costs of the activity (*costs* attribute), whereas the fifth row tracks what\n", + "resource has performed the activity (*org:resource*).\n", + "\n", + "Observe that, row 2-10 show the events that have been recorded for the process identified by *case identifier* 3.\n", + "We observe that first a register request activity was performed, followed by the examine casually, check ticket, decide,\n", + "reinitiate request, examine thoroughly, check ticket,decide, and finally, pay compensation activities.\n", + "Note that, in this case, the recorded process instance behaves as described by the model depicted in Figure 3.\n", + "\n", + "Let's investigate some basic statistics of our log, e.g., the total number of cases described and the total number of events." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# number of cases\n", + "len(df['case_id'].unique())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "42" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# number of events\n", + "len(df)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Formatting Data Frames" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "Now we have loaded our first event log, it is time to put some pm4py into the mix.\n", + "pm4py uses standardized column names to represent the *case identifier*, the *activity name* and the timstamp.\n", + "These are, respectively, ```case:concept:name```, ```concept:name``` and ```time:timestamp```.\n", + "Hence, to make pm4py work with the provided csv file, we need to rename the ```case_id```, ```activity``` and ```timestamp``` columns.\n", + "pm4py provides a dedicated utility function for this:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
case:concept:nameconcept:nametime:timestampcostsorg:resource@@index
141register request2010-12-30 10:02:00+00:0050Pete14
151examine thoroughly2010-12-31 09:06:00+00:00400Sue15
161check ticket2011-01-05 14:12:00+00:00100Mike16
171decide2011-01-06 10:18:00+00:00200Sara17
181reject request2011-01-07 13:24:00+00:00200Pete18
92register request2010-12-30 10:32:00+00:0050Mike9
102check ticket2010-12-30 11:12:00+00:00100Mike10
112examine casually2010-12-30 13:16:00+00:00400Sean11
122decide2011-01-05 10:22:00+00:00200Sara12
132pay compensation2011-01-08 11:05:00+00:00200Ellen13
03register request2010-12-30 13:32:00+00:0050Pete0
13examine casually2010-12-30 14:06:00+00:00400Mike1
23check ticket2010-12-30 15:34:00+00:00100Ellen2
33decide2011-01-06 08:18:00+00:00200Sara3
43reinitiate request2011-01-06 11:18:00+00:00200Sara4
53examine thoroughly2011-01-06 12:06:00+00:00400Sean5
63check ticket2011-01-08 10:43:00+00:00100Pete6
73decide2011-01-09 08:55:00+00:00200Sara7
83pay compensation2011-01-15 09:45:00+00:00200Ellen8
374register request2011-01-06 14:02:00+00:0050Pete37
384check ticket2011-01-07 11:06:00+00:00100Mike38
394examine thoroughly2011-01-08 13:43:00+00:00400Sean39
404decide2011-01-09 11:02:00+00:00200Sara40
414reject request2011-01-12 14:44:00+00:00200Ellen41
245register request2011-01-06 08:02:00+00:0050Ellen24
255examine casually2011-01-07 09:16:00+00:00400Mike25
265check ticket2011-01-08 10:22:00+00:00100Pete26
275decide2011-01-10 12:28:00+00:00200Sara27
285reinitiate request2011-01-11 15:18:00+00:00200Sara28
295check ticket2011-01-14 13:33:00+00:00100Ellen29
305examine casually2011-01-16 14:50:00+00:00400Mike30
315decide2011-01-19 10:18:00+00:00200Sara31
325reinitiate request2011-01-20 11:48:00+00:00200Sara32
335examine casually2011-01-21 08:06:00+00:00400Sue33
345check ticket2011-01-21 10:34:00+00:00100Pete34
355decide2011-01-23 12:12:00+00:00200Sara35
365reject request2011-01-24 13:56:00+00:00200Mike36
196register request2011-01-06 14:02:00+00:0050Mike19
206examine casually2011-01-06 15:06:00+00:00400Ellen20
216check ticket2011-01-07 15:22:00+00:00100Mike21
226decide2011-01-07 15:52:00+00:00200Sara22
236pay compensation2011-01-16 10:47:00+00:00200Mike23
\n", + "
" + ], + "text/plain": [ + " case:concept:name concept:name time:timestamp costs \\\n", + "14 1 register request 2010-12-30 10:02:00+00:00 50 \n", + "15 1 examine thoroughly 2010-12-31 09:06:00+00:00 400 \n", + "16 1 check ticket 2011-01-05 14:12:00+00:00 100 \n", + "17 1 decide 2011-01-06 10:18:00+00:00 200 \n", + "18 1 reject request 2011-01-07 13:24:00+00:00 200 \n", + "9 2 register request 2010-12-30 10:32:00+00:00 50 \n", + "10 2 check ticket 2010-12-30 11:12:00+00:00 100 \n", + "11 2 examine casually 2010-12-30 13:16:00+00:00 400 \n", + "12 2 decide 2011-01-05 10:22:00+00:00 200 \n", + "13 2 pay compensation 2011-01-08 11:05:00+00:00 200 \n", + "0 3 register request 2010-12-30 13:32:00+00:00 50 \n", + "1 3 examine casually 2010-12-30 14:06:00+00:00 400 \n", + "2 3 check ticket 2010-12-30 15:34:00+00:00 100 \n", + "3 3 decide 2011-01-06 08:18:00+00:00 200 \n", + "4 3 reinitiate request 2011-01-06 11:18:00+00:00 200 \n", + "5 3 examine thoroughly 2011-01-06 12:06:00+00:00 400 \n", + "6 3 check ticket 2011-01-08 10:43:00+00:00 100 \n", + "7 3 decide 2011-01-09 08:55:00+00:00 200 \n", + "8 3 pay compensation 2011-01-15 09:45:00+00:00 200 \n", + "37 4 register request 2011-01-06 14:02:00+00:00 50 \n", + "38 4 check ticket 2011-01-07 11:06:00+00:00 100 \n", + "39 4 examine thoroughly 2011-01-08 13:43:00+00:00 400 \n", + "40 4 decide 2011-01-09 11:02:00+00:00 200 \n", + "41 4 reject request 2011-01-12 14:44:00+00:00 200 \n", + "24 5 register request 2011-01-06 08:02:00+00:00 50 \n", + "25 5 examine casually 2011-01-07 09:16:00+00:00 400 \n", + "26 5 check ticket 2011-01-08 10:22:00+00:00 100 \n", + "27 5 decide 2011-01-10 12:28:00+00:00 200 \n", + "28 5 reinitiate request 2011-01-11 15:18:00+00:00 200 \n", + "29 5 check ticket 2011-01-14 13:33:00+00:00 100 \n", + "30 5 examine casually 2011-01-16 14:50:00+00:00 400 \n", + "31 5 decide 2011-01-19 10:18:00+00:00 200 \n", + "32 5 reinitiate request 2011-01-20 11:48:00+00:00 200 \n", + "33 5 examine casually 2011-01-21 08:06:00+00:00 400 \n", + "34 5 check ticket 2011-01-21 10:34:00+00:00 100 \n", + "35 5 decide 2011-01-23 12:12:00+00:00 200 \n", + "36 5 reject request 2011-01-24 13:56:00+00:00 200 \n", + "19 6 register request 2011-01-06 14:02:00+00:00 50 \n", + "20 6 examine casually 2011-01-06 15:06:00+00:00 400 \n", + "21 6 check ticket 2011-01-07 15:22:00+00:00 100 \n", + "22 6 decide 2011-01-07 15:52:00+00:00 200 \n", + "23 6 pay compensation 2011-01-16 10:47:00+00:00 200 \n", + "\n", + " org:resource @@index \n", + "14 Pete 14 \n", + "15 Sue 15 \n", + "16 Mike 16 \n", + "17 Sara 17 \n", + "18 Pete 18 \n", + "9 Mike 9 \n", + "10 Mike 10 \n", + "11 Sean 11 \n", + "12 Sara 12 \n", + "13 Ellen 13 \n", + "0 Pete 0 \n", + "1 Mike 1 \n", + "2 Ellen 2 \n", + "3 Sara 3 \n", + "4 Sara 4 \n", + "5 Sean 5 \n", + "6 Pete 6 \n", + "7 Sara 7 \n", + "8 Ellen 8 \n", + "37 Pete 37 \n", + "38 Mike 38 \n", + "39 Sean 39 \n", + "40 Sara 40 \n", + "41 Ellen 41 \n", + "24 Ellen 24 \n", + "25 Mike 25 \n", + "26 Pete 26 \n", + "27 Sara 27 \n", + "28 Sara 28 \n", + "29 Ellen 29 \n", + "30 Mike 30 \n", + "31 Sara 31 \n", + "32 Sara 32 \n", + "33 Sue 33 \n", + "34 Pete 34 \n", + "35 Sara 35 \n", + "36 Mike 36 \n", + "19 Mike 19 \n", + "20 Ellen 20 \n", + "21 Mike 21 \n", + "22 Sara 22 \n", + "23 Mike 23 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pm4py\n", + "log = pm4py.format_dataframe(df, case_id='case_id',activity_key='activity',\n", + " timestamp_key='timestamp')\n", + "log\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "Observe that the column names are updated as expected.\n", + "\n", + "Let us assume that we are not only interested in the number of events and cases, yet, we also want to figure out what\n", + "activities occur first, and what activities occur last in the traces described by the event log.\n", + "pm4py has a specific built-in function for this, i.e., ```pm4py.get_start_activities()``` and ```pm4py.get_end_activities()``` respectively." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'register request': 6}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm4py.get_start_activities(log)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'pay compensation': 3, 'reject request': 3}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm4py.get_end_activities(log)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "The ```pm4py.get_start_activities()``` and ```pm4py.get_end_activities()``` both return a dictionary containing the activities\n", + "as a key, and, the number of observations (i.e., number of traces in which they occur first, respectively, last) in\n", + "the event log.\n", + "\n", + "pm4py exploits a built-in pandas function to detect the format of the timestamps in the input data automatically.\n", + "However, pandas looks at the timestamp values in each row in isolation.\n", + "In some cases, this can lead to problems.\n", + "For example, if the provided value is 2020-01-18, i.e., first the year, then the month, and then the day of the date,\n", + "in some cases, a value of 2020-02-01 may be interpreted wrongly as January 2nd, i.e., rather than February 1st.\n", + "To alleviate this problem, an additional parameter can be provided to the ```format_dataframe()``` method, i.e.,\n", + "the timest_format parameter. The default Python timestamp format codes can be used to provide the timestamp format.\n", + "In this example, the timestamp format is ```%Y-%m-%d %H:%M:%S%z```.\n", + "In general, we advise to always specify the timestamp format." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Importing XES Files" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "Next to CSV files, event data can also be stored in an XML-based format, i.e., in XES files.\n", + "In an XES file, we can describe a containment relation, i.e., a log contains a number of traces, which in turn contain several events.\n", + "Furthermore, an object, i.e., a log, trace, or event, is allowed to have attributes.\n", + "The advantage is that certain data attributes that are constant for a log or a trace, can be stored at that level.\n", + "For example, assume that we only know the total costs of a case, rather than the costs of the individual events.\n", + "If we want to store this information in a CSV file, we either need to replicate this information (i.e., we can only\n", + "store data in rows, which directly refer to events), or, we need to explicitly define that certain columns only get a\n", + "value once, i.e., referring to case-level attributes.\n", + "The XES standard more naturally supports the storage of this type of information.\n", + "Click [here](data/running_example.xes) to obtain the .xes file of the running_example.\n", + "\n", + "Importing an XES file is fairly straightforward.\n", + "pm4py has a special read_xes()-function that can parse a given xes file and load it in pm4py, i.e., as an Event Log object.\n", + "Consider the following code snippet, in which we show how to import an XES event log.\n", + "Like the previous example, the script outputs activities that can start and end a trace." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a356969d9a9b4ffa928c5670f630d3fc", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "parsing log, completed traces :: 0%| | 0/6 [00:00" + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n", + "filter(lambda n: n >= 5, l)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "The previous example needs little to no explanation, i.e., the filter retains all numbers in the list greater or equal to five.\n", + "However, what is interesting, is the fact that the resulting objects are not a list (or an iterables), rather a ```filter``` object.\n", + "Such an objects can be easily transformed to a list by wrapping it with a ```list()``` cast:" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": "[5, 6, 7, 8, 9, 10]" + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(filter(lambda n: n >= 5, l))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "The same holds for the ```map()``` function:" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "map(lambda n: n * 3, l)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": "[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]" + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(map(lambda n: n * 3, l))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "Observe that, the previous map function simply muliplies each element of list ```l``` by three." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Lambda-Based Filtering in pm4py" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "In pm4py, event log objects mimic lists of traces, which in turn, mimic lists of events.\n", + "Clearly, ```lambda``` functions can therefore be applied to event logs and traces.\n", + "However, as we have shown in the previous example, after applying such a lamda-based filter, the resulting object is no longer an event log.\n", + "Furthermore, casting a filter object or map object to an event log in ```pm4py``` is a bit more involved, i.e., it is\n", + "not so trivial as ```list(filter(...))``` in the previous example.\n", + "This is due to the fact that various meta-data is stored in the event log object as well.\n", + "To this end, pm4py offers wrapper functions that make sure that after applying your higher-order function with a lambda function,\n", + "the resulting object is again an Event Log object.\n", + "In the upcoming scripts, we'll take a look at some lambda-based fitlering.\n", + "First, let's inspect the length of each trace in our running example log by applying a generic map function" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": "parsing log, completed traces :: 0%| | 0/6 [00:00 5, log)\n", + "list(map(lambda t: len(t), lf))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "The traces of length 9 and 13 have repeated behavior in them, i.e., the *reinitiate request* activity has been performed at least once:" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": "[(9, 1), (5, 0), (5, 0), (5, 0), (13, 2), (5, 0)]" + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(map(lambda t: (len(t), len(list(filter(lambda e: e['concept:name'] == 'reinitiate request', t)))), log))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "Observe that the map function maps each trace onto a tuple.\n", + "The first element describes the length of the trace.\n", + "The second element describes the number of occurrences of the activity *register request*.\n", + "Observe that we obtain said counter by filtering the trace, i.e., by retaining only those events that describe the\n", + "*reinitiate request* activity and counting the length of the resulting list.\n", + "Note that the traces describe a list of events, and, events are implementing a dictionary.\n", + "In this case, the activity name is captured by the ```concept:name``` attribute." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "In general, PM4PY supports the following *generic filtering functions*:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- ```pm4py.filter_log(f, log)```\n", + " - filter the log according to a function ```f```.\n", + "- ```pm4py.filter_trace(f,trace)```\n", + " - filter the trace according to function ```f```.\n", + "- ```pm4py.sort_log(log, key, reverse)```\n", + " - sort the event log according to a given ```key```, reversed order if ```reverse==True```.\n", + "- ```pm4py.sort_trace(trace, key, reverse)```\n", + " - sort the trace according to a given ```key```, reversed order if ```reverse==True```." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "Let's see these functions in action:" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "2\n" + ] + } + ], + "source": [ + "print(len(log))\n", + "lf = pm4py.filter_log(lambda t: len(t) > 5, log)\n", + "print(len(lf))" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n", + "2\n" + ] + } + ], + "source": [ + "print(len(log[0])) #log[0] fetches the 1st trace\n", + "tf = pm4py.filter_trace(lambda e: e['concept:name'] in {'register request', 'pay compensation'}, log[0])\n", + "print(len(tf))" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n", + "5\n", + "13\n" + ] + } + ], + "source": [ + "print(len(log[0]))\n", + "ls = pm4py.sort_log(log, lambda t: len(t))\n", + "print(len(ls[0]))\n", + "ls = pm4py.sort_log(log, lambda t: len(t), reverse=True)\n", + "print(len(ls[0]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Specific Filters" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "There are various pre-built filters in PM4Py, which make commonly needed process mining filtering functionality a lot easier.\n", + "In the upcoming overview, we briefly give present these functions.\n", + "We describe how to call them, their main input parameters and their return objects.\n", + "Note that, all of the filters work on both DataFrames and pm4py event log objects." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Start Activities\n", + "- ```filter_start_activities(log, activities, retain=True)```\n", + " - retains (or drops) the traces that contain the given activity as the final event." + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": "[{'attributes': {'concept:name': '3'}, 'events': [{'concept:name': 'register request', 'org:resource': 'Pete', 'time:timestamp': datetime.datetime(2010, 12, 30, 14, 32, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600))), 'Activity': 'register request', 'Resource': 'Pete', 'Costs': '50'}, '..', {'concept:name': 'pay compensation', 'org:resource': 'Ellen', 'time:timestamp': datetime.datetime(2011, 1, 15, 10, 45, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600))), 'Activity': 'pay compensation', 'Resource': 'Ellen', 'Costs': '200'}]}, '....', {'attributes': {'concept:name': '4'}, 'events': [{'concept:name': 'register request', 'org:resource': 'Pete', 'time:timestamp': datetime.datetime(2011, 1, 6, 15, 2, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600))), 'Activity': 'register request', 'Resource': 'Pete', 'Costs': '50'}, '..', {'concept:name': 'reject request', 'org:resource': 'Ellen', 'time:timestamp': datetime.datetime(2011, 1, 12, 15, 44, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600))), 'Activity': 'reject request', 'Resource': 'Ellen', 'Costs': '200'}]}]" + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm4py.filter_start_activities(log, {'register request'})" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": "[]" + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm4py.filter_start_activities(log, {'register request TYPO!'})" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": " case:concept:name concept:name time:timestamp costs \\\n14 1 register request 2010-12-30 10:02:00+00:00 50 \n15 1 examine thoroughly 2010-12-31 09:06:00+00:00 400 \n16 1 check ticket 2011-01-05 14:12:00+00:00 100 \n17 1 decide 2011-01-06 10:18:00+00:00 200 \n18 1 reject request 2011-01-07 13:24:00+00:00 200 \n9 2 register request 2010-12-30 10:32:00+00:00 50 \n10 2 check ticket 2010-12-30 11:12:00+00:00 100 \n11 2 examine casually 2010-12-30 13:16:00+00:00 400 \n12 2 decide 2011-01-05 10:22:00+00:00 200 \n13 2 pay compensation 2011-01-08 11:05:00+00:00 200 \n0 3 register request 2010-12-30 13:32:00+00:00 50 \n1 3 examine casually 2010-12-30 14:06:00+00:00 400 \n2 3 check ticket 2010-12-30 15:34:00+00:00 100 \n3 3 decide 2011-01-06 08:18:00+00:00 200 \n4 3 reinitiate request 2011-01-06 11:18:00+00:00 200 \n5 3 examine thoroughly 2011-01-06 12:06:00+00:00 400 \n6 3 check ticket 2011-01-08 10:43:00+00:00 100 \n7 3 decide 2011-01-09 08:55:00+00:00 200 \n8 3 pay compensation 2011-01-15 09:45:00+00:00 200 \n37 4 register request 2011-01-06 14:02:00+00:00 50 \n38 4 check ticket 2011-01-07 11:06:00+00:00 100 \n39 4 examine thoroughly 2011-01-08 13:43:00+00:00 400 \n40 4 decide 2011-01-09 11:02:00+00:00 200 \n41 4 reject request 2011-01-12 14:44:00+00:00 200 \n24 5 register request 2011-01-06 08:02:00+00:00 50 \n25 5 examine casually 2011-01-07 09:16:00+00:00 400 \n26 5 check ticket 2011-01-08 10:22:00+00:00 100 \n27 5 decide 2011-01-10 12:28:00+00:00 200 \n28 5 reinitiate request 2011-01-11 15:18:00+00:00 200 \n29 5 check ticket 2011-01-14 13:33:00+00:00 100 \n30 5 examine casually 2011-01-16 14:50:00+00:00 400 \n31 5 decide 2011-01-19 10:18:00+00:00 200 \n32 5 reinitiate request 2011-01-20 11:48:00+00:00 200 \n33 5 examine casually 2011-01-21 08:06:00+00:00 400 \n34 5 check ticket 2011-01-21 10:34:00+00:00 100 \n35 5 decide 2011-01-23 12:12:00+00:00 200 \n36 5 reject request 2011-01-24 13:56:00+00:00 200 \n19 6 register request 2011-01-06 14:02:00+00:00 50 \n20 6 examine casually 2011-01-06 15:06:00+00:00 400 \n21 6 check ticket 2011-01-07 15:22:00+00:00 100 \n22 6 decide 2011-01-07 15:52:00+00:00 200 \n23 6 pay compensation 2011-01-16 10:47:00+00:00 200 \n\n org:resource @@index \n14 Pete 14 \n15 Sue 15 \n16 Mike 16 \n17 Sara 17 \n18 Pete 18 \n9 Mike 9 \n10 Mike 10 \n11 Sean 11 \n12 Sara 12 \n13 Ellen 13 \n0 Pete 0 \n1 Mike 1 \n2 Ellen 2 \n3 Sara 3 \n4 Sara 4 \n5 Sean 5 \n6 Pete 6 \n7 Sara 7 \n8 Ellen 8 \n37 Pete 37 \n38 Mike 38 \n39 Sean 39 \n40 Sara 40 \n41 Ellen 41 \n24 Ellen 24 \n25 Mike 25 \n26 Pete 26 \n27 Sara 27 \n28 Sara 28 \n29 Ellen 29 \n30 Mike 30 \n31 Sara 31 \n32 Sara 32 \n33 Sue 33 \n34 Pete 34 \n35 Sara 35 \n36 Mike 36 \n19 Mike 19 \n20 Ellen 20 \n21 Mike 21 \n22 Sara 22 \n23 Mike 23 ", + "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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
case:concept:nameconcept:nametime:timestampcostsorg:resource@@index
141register request2010-12-30 10:02:00+00:0050Pete14
151examine thoroughly2010-12-31 09:06:00+00:00400Sue15
161check ticket2011-01-05 14:12:00+00:00100Mike16
171decide2011-01-06 10:18:00+00:00200Sara17
181reject request2011-01-07 13:24:00+00:00200Pete18
92register request2010-12-30 10:32:00+00:0050Mike9
102check ticket2010-12-30 11:12:00+00:00100Mike10
112examine casually2010-12-30 13:16:00+00:00400Sean11
122decide2011-01-05 10:22:00+00:00200Sara12
132pay compensation2011-01-08 11:05:00+00:00200Ellen13
03register request2010-12-30 13:32:00+00:0050Pete0
13examine casually2010-12-30 14:06:00+00:00400Mike1
23check ticket2010-12-30 15:34:00+00:00100Ellen2
33decide2011-01-06 08:18:00+00:00200Sara3
43reinitiate request2011-01-06 11:18:00+00:00200Sara4
53examine thoroughly2011-01-06 12:06:00+00:00400Sean5
63check ticket2011-01-08 10:43:00+00:00100Pete6
73decide2011-01-09 08:55:00+00:00200Sara7
83pay compensation2011-01-15 09:45:00+00:00200Ellen8
374register request2011-01-06 14:02:00+00:0050Pete37
384check ticket2011-01-07 11:06:00+00:00100Mike38
394examine thoroughly2011-01-08 13:43:00+00:00400Sean39
404decide2011-01-09 11:02:00+00:00200Sara40
414reject request2011-01-12 14:44:00+00:00200Ellen41
245register request2011-01-06 08:02:00+00:0050Ellen24
255examine casually2011-01-07 09:16:00+00:00400Mike25
265check ticket2011-01-08 10:22:00+00:00100Pete26
275decide2011-01-10 12:28:00+00:00200Sara27
285reinitiate request2011-01-11 15:18:00+00:00200Sara28
295check ticket2011-01-14 13:33:00+00:00100Ellen29
305examine casually2011-01-16 14:50:00+00:00400Mike30
315decide2011-01-19 10:18:00+00:00200Sara31
325reinitiate request2011-01-20 11:48:00+00:00200Sara32
335examine casually2011-01-21 08:06:00+00:00400Sue33
345check ticket2011-01-21 10:34:00+00:00100Pete34
355decide2011-01-23 12:12:00+00:00200Sara35
365reject request2011-01-24 13:56:00+00:00200Mike36
196register request2011-01-06 14:02:00+00:0050Mike19
206examine casually2011-01-06 15:06:00+00:00400Ellen20
216check ticket2011-01-07 15:22:00+00:00100Mike21
226decide2011-01-07 15:52:00+00:00200Sara22
236pay compensation2011-01-16 10:47:00+00:00200Mike23
\n
" + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas\n", + "\n", + "ldf = pm4py.format_dataframe(pandas.read_csv('data/running_example.csv', sep=';'), case_id='case_id',\n", + " activity_key='activity', timestamp_key='timestamp')\n", + "pm4py.filter_start_activities(ldf, {'register request'})" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": "Empty DataFrame\nColumns: [case:concept:name, concept:name, time:timestamp, costs, org:resource, @@index]\nIndex: []", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n
case:concept:nameconcept:nametime:timestampcostsorg:resource@@index
\n
" + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm4py.filter_start_activities(ldf, {'register request TYPO!'})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### End Activities\n", + "- ```filter_end_activities(log, activities, retain=True)```\n", + " - retains (or drops) the traces that contain the given activity as the final event." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "For example, we can retain the number of cases that end with a \"payment of the compensation\":" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": "3" + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(pm4py.filter_end_activities(log, 'pay compensation'))" + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Event Attribute Values" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "markdown", + "source": [ + "- ```filter_event_attribute_values(log, attribute_key, values, level=\"case\", retain=True)```\n", + " - retains (or drops) traces (or events) based on a given collection of ```values``` that need to be matched for the\n", + " given ```attribute_key```. If ```level=='case'```, complete traces are matched (or dropped if ```retain==False```) that\n", + " have at least one event that describes a specifeid value for the given attribute. If ```level=='event'```, only events\n", + " that match are retained (or dropped)." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 87, + "outputs": [ + { + "data": { + "text/plain": "[['Pete', 'Mike', 'Ellen', 'Sara', 'Sara', 'Sean', 'Pete', 'Sara', 'Ellen'],\n ['Mike', 'Mike', 'Sean', 'Sara', 'Ellen'],\n ['Pete', 'Sue', 'Mike', 'Sara', 'Pete'],\n ['Mike', 'Ellen', 'Mike', 'Sara', 'Mike'],\n ['Ellen',\n 'Mike',\n 'Pete',\n 'Sara',\n 'Sara',\n 'Ellen',\n 'Mike',\n 'Sara',\n 'Sara',\n 'Sue',\n 'Pete',\n 'Sara',\n 'Mike'],\n ['Pete', 'Mike', 'Sean', 'Sara', 'Ellen']]" + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# retain any case that has either Peter or Mike working on it\n", + "lf = pm4py.filter_event_attribute_values(log, 'org:resource', {'Pete', 'Mike'})\n", + "list(map(lambda t: list(map(lambda e: e['org:resource'], t)), lf))" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 88, + "outputs": [ + { + "data": { + "text/plain": "[['Pete', 'Mike', 'Pete'],\n ['Mike', 'Mike'],\n ['Pete', 'Mike', 'Pete'],\n ['Mike', 'Mike', 'Mike'],\n ['Mike', 'Pete', 'Mike', 'Pete', 'Mike'],\n ['Pete', 'Mike']]" + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# retain only those events that have Pete or Mik working on it\n", + "lf = pm4py.filter_event_attribute_values(log, 'org:resource', {'Pete', 'Mike'}, level='event')\n", + "list(map(lambda t: list(map(lambda e: e['org:resource'], t)), lf))\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "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.8.5" + }, + "rise": { + "enable_chalkboard": true, + "footer": "

footer

", + "overlay": "

pm4py

Event Data Filtering

" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/pm4py/notebooks/3_process_discovery.ipynb b/pm4py/notebooks/3_process_discovery.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..e618c7c76ad95fe3f03613a0c4f3e40e032b8ce1 --- /dev/null +++ b/pm4py/notebooks/3_process_discovery.ipynb @@ -0,0 +1,606 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Process Discovery\n", + "*by: Sebastiaan J. van Zelst*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we have studied basic conceptual knowledge of process mining and event data munging and crunching, we focus on process discovery.\n", + "Here, the goal is to discover, i.e., primarily completely automated and algorithmically, a process model that accurately describes the process, i.e., as observed in the event data.\n", + "For example, given the running example event data, we aim to discover the process model that we have used to explain the running example's process behavior.\n", + "For example, when using the [sample event log](data/running_example.csv) we have seen before, we aim to discover:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Running example BPMN-based process model describing the behavior of the simple process that we use in this tutorial](img/bpmn_running_example.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This section briefly explains what modeling formalisms exist in PM4Py while applying different process discovery algorithms.\n", + "Secondly, we give an overview of the implemented process discovery algorithms, their output type(s), and how we can invoke them.\n", + "Finally, we discuss the challenges of applying process discovery in practice.\n", + "Note that, we will not explain the internal workings of the algorithms presented here.\n", + "For more information regarding the algorithmic details, consider the [Coursera MOOC](https://www.coursera.org/learn/process-mining), the papers/articles/web pages we refer to in the notebook, or, contact us for in-depth algorithmic training :-)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Obtaining a Process Model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are three different process modeling notations that are currently supported in PM4Py.\n", + "These notations are: [BPMN](https://www.bpmn.org/), i.e., models such as the ones shown earlier in this tutorial, *Process Trees* and *Petri nets*.\n", + "A Petri net is a more mathematical modeling representation compared to BPMN.\n", + "Often, the behavior of a Petri net is more difficult to comprehend compared to BPMN models.\n", + "However, due to their mathematical nature, Petri nets are typically less ambiguous (i.e., confusion about their described behavior is not possible).\n", + "Process Trees represent a strict subset of Petri nets and describe process behavior in a hierarchical manner.\n", + "In this tutorial, we will focus primarily on BPMN models and process trees.\n", + "For more information about Petri nets and their application to (business) process modeling (from a ‘workflow’ perspective), we refer to [this article](https://www.researchgate.net/profile/Wil_Aalst/publication/220337578_The_Application_of_Petri_Nets_to_Workflow_Management/links/0deec517a563a45197000000/The-Application-of-Petri-Nets-to-Workflow-Management.pdf?_sg%5B0%5D=2TrqDbNsoZEr67XgOwI_9qxtlO_S1HJFHn8edW7aE0fMWzmsY0D1GhrsbRXdtZhTLvQ1KcSm9pkLzooDMl-eRg.DhnNamQg4EvK8MAwucwkB1VDke7eNq0E4jxMAa2IMXXZtvr9k1PPiwZpQEt1Z2iqkdkN-SOlWyjFloP-BivLow&_sg%5B1%5D=XeHToX2_7feAtM6yO395-HEYttSzdWJeiLaGlD_7Dn3hRXYnVXya0-dHm5RWmjX22gF3ton7d7FSzF6FjL_NYZCQzRvJuPg4zPWnk_HCe0xj.DhnNamQg4EvK8MAwucwkB1VDke7eNq0E4jxMAa2IMXXZtvr9k1PPiwZpQEt1Z2iqkdkN-SOlWyjFloP-BivLow&_iepl=).\n", + "\n", + "Interestingly, none of the algorithms implemented in PM4Py directly discovers a BPMN model.\n", + "However, any process tree can easily be translated to a BPMN model.\n", + "Since we have already discussed the basic operators of BPMN models, we will start with the discovery of a process tree, which we convert to a BPMN model.\n", + "Later, we will study the ‘underlying’ process tree.\n", + "The algorithm that we are going to use is the ‘Inductive Miner’;\n", + "More details about the (inner workings of the) algorithm can be found in [this presentation](http://www.processmining.org/_media/presentations/2013/petri_nets.pptx) and in [this article](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.396.197&rep=rep1&type=pdf).\n", + "Consider the following code snippet showing how to obtain a BPMN model from an event log." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import pm4py\n", + "df = pm4py.format_dataframe(pd.read_csv('data/running_example.csv', sep=';'), case_id='case_id',activity_key='activity',\n", + " timestamp_key='timestamp')\n", + "bpmn_model = pm4py.discover_bpmn_inductive(df)\n", + "pm4py.view_bpmn(bpmn_model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Observe that the process model that we discovered, describes the same behavior as the model that we have shown above." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As indicated, the algorithm used in this example actually discovers a *Process Tree*.\n", + "Such a process tree is, mathematically speaking, a *rooted tree*, annotated with ‘control-flow’ information.\n", + "We’ll first use the following code snippet to discover a process tree based on the running example, and, afterwards shortly analyze the model." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "process_tree = pm4py.discover_process_tree_inductive(df)\n", + "pm4py.view_process_tree(process_tree)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll analyze the process tree model from top to bottom.\n", + "The first circle, i.e., the ‘root’ of the process tree, describes a ‘->’ symbol.\n", + "This means that, when srolling further down, the process described by the model executes the ‘children’ of the root from left to right.\n", + "Hence, first “register request” is executed, followed by the circle node with the ‘\\*’ symbol, finally to be followed by the node with the ‘X’ symbol.\n", + "The node with the ‘\\*’ represents ‘repeated behavior’, i.e., the possibility to repeat the behavior.\n", + "When scrolling further down, the left-most ‘subtree’ of the ‘\\*’-operator is always executed, the right-most child (in this case, “reinitiate request”) triggers a repeated execution of the left-most child.\n", + "Observe that this is in line with the process models we have seen before, i.e., the “reinitiate request” activity allows us to repeat the behavior regarding examinations and checking the ticket.\n", + "When we go further down below in the subtree of the ‘\\*’-operator, we again observe a ‘->’ node.\n", + "Hence, its left-most child is executed first, followed by its right-most child (“decide”).\n", + "The left-most child of the ‘->’ node has a ‘+’ symbol.\n", + "This represents concurrent behavior; hence, its children can be executed simultaneously or in any order.\n", + "Its left-most child is the “check ticket” activity.\n", + "Its right-most child is a node with an ‘X’ symbol (just like the right-most child of the tree's root).\n", + "This represents an exclusive choice, i.e., one of the children is executed (either “examine casually” or “examine thoroughly”).\n", + "Observe that the process tree describes the exact same behavior as the BPMN models shown before." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are different ways to obtain a petri net:\n", + "- Let the algorithm directly return a Petri net.\n", + "- Convert the obtained process tree to a Petri net (recall that process trees are a strict sub-class of Petri nets).\n", + "For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "net1, im1, fm1 = pm4py.convert_to_petri_net(process_tree)\n", + "pm4py.view_petri_net(net1,im1,fm1)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "net2, im2, fm2 = pm4py.discover_petri_net_inductive(df)\n", + "pm4py.view_petri_net(net2, im2, fm2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Observe that both functions return three arguments, i.e., the Petri net, an initial and a final marking.\n", + "Unsurprisingly, the two models are the same (i.e., the ```pm4py.discover_petri_net_inductive(df)``` function applies the conversion internally).\n", + "However, there are alternative algorithms implemented in pm4py, that allow you obtain a Petri net based on an event log.\n", + "These algorithms are:\n", + "* [The alpha miner](https://en.wikipedia.org/wiki/Alpha_algorithm); One of the first process discovery algorithms\n", + "* [The alpha+ miner](https://pure.tue.nl/ws/files/1864325/576199.pdf); Extension of the alpha miner that handles length-one-loops and short loops.\n", + "\n", + "Invocation of the aformentioned algorithms is straightforward:" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABGEAAAHdCAYAAAC9oGSbAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd7xjdZ3/8dctc6c3mBmKSJemCChid2mCXXTVXVFxXQUVgcW69l27awOxoSAuiq679tVFRQXsqCjShQEpAgPMDDPD9Nvy++Nz8ksmk+Qm9yb3e5K8nnkcTsrJySeZy70n7/MtIEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnKi77UBUiqqx/YDVgKzMuWOcBaYCOwAbgbWJ2qQEmSJElSYwxhpPwYAB4FHAUcAeyXLTMbeO5q4GbgBuCXwGXAne0pU5IkSZI0GYYwUlqzgROAFwFHAouA24HfE6HKjcBfgfuJVi8bs2UxMJdoGbMrEdbsDxwIPAGYD9wK/BD4GvDb6Xk7kiRJkiRJ+XIYcD7RrWgY+C7wz8BeLdj3IPBY4O3A1UAB+AvwDmCHFuxfkiRJkiQp954A/B8wDvwZOI32ByMHAx8HVgHrgY8CO7f5NSVJkiRJkpLYG/gB0Srll8DTE9QwD3gjcA+wCXg3MCtBHZIkSZIkSS03E3gXEXpcDxydthwggpc3E61ilgPHpS1HkiRJkiRpah4GXEmEHW8BZqQtZzsPBb5BdI36FI3NwiRJkiRJkpQrLwTWAX8guiLlWXmtrRgYWJIkSZIkaVq8m85rXfIw4I/E4L2PTVyLJEmSJElSXf3AOcSU0y9LXMtkzCS6J20gzcDBkiRJkiRJE+oDLgQ2As9MXMtUDACfIYKk5ySuRZIkSZIkaTsfJwKYJ6YupEU+QLyfPMzmJEmSJEmSBMBbga3AMakLabHPAmuBg1MXIkmSJEmSdDwwBrwkdSFtMAB8G7gVWJi4FkmSJEmS1MN2Be4H3pu6kDaaDVwNfDN1IZIkSZIkqTf1AZcDlxEtRrrZAcB64LWpC5EkSZIkSb3nZKIVzC6pC5kmLwPWEa1/JEmSJEmSpsWOwCoimOglFwNfS12EJEmSJEnqHecRXZH6Etcx3fYFNgNHpS5EkiRJkiR1v4cDo8AhqQtJ5MPAH+m9AEqSJEmSJE2zi4D/TV1EQkuBjcAzUhciSZIkSZK6197ACHBE6kISOwv4deoiJEmSJElS9zoH+EXqInJgd2AMeGLqQiRJkiRJUvcZImZEelXqQnLip8DnUxchSZIkSZK6zwnAJmBB6kJy4iRgDTAzdSGSJEmSJKm7fAv479RF5Mh8IpT6+9SFSJIkSVKn6E9dgNQBBoCjgUtSF5Ij64nBeY9LXYgkSZIkSeoejwEKwJ6J68ibtwPLUxchSZIkSZK6x1uA21IXkUOPI8Kp3VMXIkmSJEmdwO5I0sQeA/w+dRE59EdgFDgidSGSJEmS1AkMYaSJHQDclLqIHBohWgjtn7oQSZIkSeoEhjBSff3AvhjC1HIThjCSJEmS1BBDGKm+PYBZOABtLbcA+6UuQpIkSZI6gSGMVN+ibP1A0iryaxWwQ+oiJEmSJKkTGMJI9c3L1uuTVpFf64H5k3jejsBgi2uRJEmSpFwzhJHqW5CtNyStIr8aDWFmAccAHwauIVrQnN7GuiRJkiQpdzwTLdU3K1tvSlpFfm0FZle5vx84BHgq8DTgicAQMJytKVtLkiRJUk8whJHqK7aAWQCsS1lITs2j1FVrT+BYIng5jhhPZ4T4PdOXbVMMXkaJ1jCSJEmS1DMMYaT6DGHqW0q0hFkJLAHGsvsHsvWMGs8bxMGOJUmSJPUYQxipvgez9by6W/WuvYnWLUuy2wN1tq30d8AcYE22PFB2faSFNUqSJElSLvRNvInU03Ykus0cA1yauJY8+jywH3AxcCawCzBOY2HMaqKFUbXWMhvYNpSpDGnqPVaY9LuRJEmSpDYyhJEmthp4B3Bu6kJy6OfAdcDriODlecCbgMcSrVlqdUcC2Bm4j2hltDhbdii73sjtajO8raXxwKb89oNV9iVJkiRJLWN3JPWSpxFdYO4B7gLuBe7O1sN1nncjcEDbq+tM+wHfzK6PZde/CRwOvAF4IdEypVoYUxwTZkO2/G0Sr7+I2iFN+fWHVWy3sMq+xtg2lFlLBDNriPGAypcHK24XtxmfxHuQJEmS1CNsCaNecgkxc0+1FhpriMFlb2P7kOZVxFTVT522SjvDYiKwOA74SY1tdgFOBU4juh71ZcsmYO401FjLABO3uFmYLYuypXh7AaWpyyttoHpgszZbyu9bn22/JlsXb9siR5IkSepShjDqJacBZzFxC7BRolVEP6WwZivRbWa0bdV1nucQrV52oDSLVC2zgBOJrkoHZvd18u+fmZRCmWJQs7DKsqDs+uKK+2fW2f86SqHMekrBTXlYUy28WUupZdHG7L4xJEmSJOVCJ38Jkpr1SODqJrYfI1pM/Ap4EvB44Io21NWpPkl0O3pik887mui2c3mrC+owM4D5RIAzP1vmVdw3L1uK4c28svvLn1erZQ5Ey69iWLOFUmizuez6FiKw2ZhdX0e0VtpCBDubs+trsvXm7H4HQZYkSZKa4Jgw6iXXEV865zew7SjRFekVwGXALcBRGMKUOwr43iSe5yxTYYTozvXARBs2YJDtw5s5RHAzi+j6VexGNa/i+i7Z9eLzZmWPzyWmH69nlPh/qhj0DBNBzlZKIc5mSiHOpuyxjdm2G7Lnrs/2VWy5Uxxfpxj0FLen7DmSJElSx7EljLrdIPBo4MnZ8lSiG0i1WXUgvgj2A58A3k18eQT4GNHi4/HtLLaD7AMsB44Arkxci9qnnwhy5hDhzCJgdnZ9MdGaZx4R1swl/t8qbju7bNs52WPFYGcepZZAg0To08i05pXKA5likFN5vbxLVvngyeXXa7XqKYZItRRDpVrKwyMplVo/37UCzeL/M8XHJ/o5lyRJTTCEUbeZTUyP/BQidHk88cXvfqJb0SDwdKrP1jMG/AX4J7YPFg4FrgL2B25uQ92d5t+AFwEPT12IuspCIvhZRPx9WpzdXwxrYNvApvx68bmV14v7omx/5df7sm2qKX/devXWUv7aUqcrhpLFFm/FlnDjRKgJpS6LGymNbbUxW4pjVhVvrym7PtG4YpIkdY1qB4dHAL+b7kLU1YapPwjpVCwkxmt5EhG8HE6cab8D+CXwCyJ8uTHb/nHAbyv2UTwT+O/AR6g9+O7VwPeBd7am9I7VRwRRFwAfSlyLJKm2YlfFamqFhMVwsRhCFluwFVu2FVu8FVvAFV+j2HKuvNtjsWvj3OyxeoohzZoJlrVV7rOljiSpY1T743si8FXiLLc0VScCJ9C6s8E7Uepa9BTgYOJM+I1E6FIMXu6s8fwZxJm5Yig0ToSOrwBumuC1TwfeDOxLb3cxOBL4MdEl6a60pUiSOsh8SqHMIiKsKd5eXLaut1Qbq2oTEcY8AKwC7svWq4CVRGvYlWX3rcKZ4yRJidQLYWxCrVaY6s/TXpQClycR3YHGiFYpv6AUvKxsYp9XEzMlbSKmTD6XxmZ5mQ3cDrwV+FITr9dtLiFaGp2cuhBJUs+pF9TsACwFlgFLKpbK45BVFcv9wL3Z+u5svSJbtrTzDUmSeouzIylP+oCD2Laly25EM+M/AN8iuhb9imjNMlkfAl4KvIbmWnJsBs4iQpgLKQ3q2UuOIGZFOiB1IZKknlQcR6aZv9/9bBvILGP7oGYf4Allj5VbS4Qx5QHN3USLm3uzx+6juRNCkqQeZUsYtVu9n6dB4DCihcvfEbMPLSEClt8QYcsvgN+Tn7NQC4FbgTcSQUyv+RFxoPny1IVIktQmQ0QQsyvRDXpnYJdsvWvFY7PKnreVCIfuIbpF35PdLt73NyK0sSuUJPUwW8JoOs0iWlKUz1w0n2gG/Cvgg0TXoj9Te3Dc1NYBbwc+DHyPODvWK55H/JsdmLoQSZLaaJhSeDKRHYhwZmfgIUQL3ocADwWOzq7vROlk1BgRxPyNaE1TfJ27ieDmdqJlTS+2tpWknmBLGLVb8efpV8BjiAFx7wJ+Tqmly400NiZLXvQTLXX+QAzW2wvmAjcQ3bHOTlyLJEmdZIhoSbNbtuwK7J6tdyMCm52JyQOgFALdmS23lV2/I1s7I5QkdShbwmi6/AU4jwhdbk9bypSNA68lukn9gJgpqNt9iph54tOpC5EkqcMME+HJHXW2GSBCmT2yZfey9eHAnsTU4EUr2DaUua1iMaSRpJwyhNF06baZdK4iBvj9CnAo0de7W50EvJgYsDCv3cQkSepkY0QXpb8RLYWrWcK24cye2fWjgH8mukZBtC6+hwhj/pott5Wt76GzWiBLUlcxhJEm7z3E2DZfB44lznR1m4OBzwJvIIInSZKURnE67T/VeHwhsDewV7YUrx+RrWdm221l21YztwK3AMuJoMZWNJLURoYw0uSNEWPeXAVcALyM7jqztBtwMfB/wOcS1yJJkupbRxyTVDtp0kd0dyoPZ/YmTrY8lxhAGOI45i4ilKm2bGpf+ZLUGwxhpKlZATwHuAT4JHBG2nJaZkcigLkLeEXiWiRJ0tQUiBmY7qZ6d6c5wL5VlqcRJ2WKE3bczbahzHJi3L/ldGeLYElqOUMYaep+Dzwf+CGwkZjCupNbxCwl3gvEwZdnvSRJ6m6bgGuypdIsqgc0xxIzO/UTrYNvA24iQpmbsuVGYGWba5ekjmIII7XGpcTgtV8jQoxXEwcknWZPYranceCpRNNmSZLUu7YA12VLpdnAfsD+2XIgcCRxHDQv22YNpUCmPJz5KzDSxrolKZcMYaTW+TbwTOA7wDLgpcCDSStqzuHA/xJTXT4TWJ22HEmSlHObgauzpdJDiWBmPyKc2R84Jru/jwhgbmPbcKbYiqbbj0EGie7sA6kLUS5cQcyMph52Ip3dlUL50os/T48m+kzfTAQbedcHnE6c6foBMDdtOZIkqYvNBQ4jWhC/h5hl8iqiS1QhW1YCvwTOA94MPBt4GN1zAvkESu/VxeUC1FO65ReZlCd/BA4FLiIGv3sbMWjveMqialgGfB54FvBO4CPEHwNJkqR22Ej1WZz6gD2IljMHZMv+wNMpzd40TLSWuR64FrghW99OPo+zapmTrfvqbqVe8FVK08erRxjCSO2xkjhoeDvwYeAlwKnEIL550A+8BvgAMe7L0cQZJ0mSpBQKRJhyOzHrZLn5lMaceTjwCOAUYiw7iGDnRkrBzDXZ+q72lixJrdHp3Uemq/ZO/IwaqbnV76vTf55a4SBi4N4xornhXmnL4elEa52twH9QGjhPkiSpk8wHHge8CjgL+AmwglI3jzXESaZzgdOAo4AlSSrdlsfHKvpqtqjHdfovhemovfiLvZM0UnM73len/zy1Sh/xWdxCDER3IXE2Z7r0E/2PryT+PS4mwiFJkqRusyPwd0Qr5M8BPwceoHSsex/wU6K7+CnA44GF01ifx8cqMoQR4C+FRnXiZ2RLmPQGiVmTbiD6Lv+K+OO/uE2vdyDRHeoOoiXOb4iZCIba9HqSJEl5tStwHPAG4Hyim/h6SuHM7cSJqo8Qx2uPBGa0oQ6Pj1VkCCPAXwq1VH4mnfgZGcLkRz9wLNEiZj0xM9FPiDFkHsfk/+AvJqY8PBu4jvjsbwHeC+wD7E60xPmHKdQuSZLULfqIruLPBt5KTKxwFdFtu5Ct/wh8ETgTOBJYNMXX9PhYRYYwPaiVA/OW/yLpq3FftW1qPbd4f7Xn1dq+/Dn1nj9R3ZUKFetGam/ksfLaan1mlfuq3G4q76fZbWq9ppo3TjSD/SnwOuAZwDHAK4jBckeJFis3ESHKSmBD2bIIWECM57ILMVjdAcBO2XN/B3wbeDXR+qX83/PbxEHEf7fx/UmSJHWCAnHMdRvw/bL7ZxBdtx8JHELMfHkCsEP2+O3EAMB/zpZrgL9iuCJpAq0IYWoFE31MHCyUb1t5u1Dl8UKV29VqKb9ea/t6dVfqq/HYRLXU2ndlbdVqrbw9URhV7TUmeo/1/khU23/lvtQaG4D/yRaI1ipHEMHK/sBjgaVE4FJc1hAtaDYA9xBTNX6b6OZ0RXZ/LWcBvyVa3FzR2rciSZLUFUaAq7PlK2X3P4QIZA4lwpl/BN5JtHJ+MNv+mmx9FdEyecu0VS0p99rVEqZSrRCj3j5qPafePipbljT7ms2q14qkWt3l4VS1gKXecyZTW7OfX619aHrdmS3tckW2vB67JUmSJDXj7mz5v7L75hEtZg4GDgMOJ1o3zyFaKC+n1GLmz0y9O5OkDtaqEKbRL/b1gobK69OhG1t1TDa0SbVfpXEW0f90d9ob+EiSJHW7DUT379+U3dcP7Eu0mDmMCGnOIFrSjE93gZLyrdmBoqptW6ubUDPbTvRYI/trZt+17ptMLbX208x7m+xzCmVLvX3Ve36tfU6GA4/l0yARvnw0dSGSJEk9ZCnwHjw+VnBg3h7U36L9VAYFjY5rklq9uqdiovFaWvWc4jaV25ePxyNVMwp8AXgV0YRWkiRJ7beSmHhBUo9qRQhTa9Dc4n3VVLasqGy9UXm9kXXlfRNtX6/uWqrVWauWvortq30ulZ9PvefUqqHaYMHVWsM0+/lVMtTpPucCM4k+y5IkSZKkNmtVS5harS/q3ddX5XatZaLnVdt3s9s38x4b2fdk7m/mscptKlvBlA8AXG2/U/081PlWARcR/ZP9N5ckSZKkNmtVCCOpM50N7AMcl7oQSZIkSep2hjDdbSrj3EzULUrd4QbgEmK6akmSJElSGxnCdI9a3Zemsj+7JvWGs4iWMAelLkSSJEmSupkhjKRLgBuBM1MXIkmSpNzL02y37VRt5lppygxhJBWIsWFeCixJXIskSZKUmgGM2sYQRhLELElbgNekLkSSJEm51gvDFVSb3VZqCUMY5c1S4EjgVOA9aUvpKZuBLxKf+1DiWiRJkiSpKw2mLkA96yHAgdnycOAQYmDYBRXb/ds019XLPkWMC/OPwJcT1yJJkqRtlXeJ6atxX7Vtaj23eH+159Xavvw59Z4/Ud21THY/teqv/JymUlu959Tav7QdQxhNlzcCBwCHZut52f0j2XpGlef8ehrqUsmdwLeB0zGEkSRJyotqX/CL4UetMKby+fWCl8pQpfJ2tVrKr9favl7d1UxUR639VNvnRMHSRPusp9q+ivdLEzKEUbstzdYfA8bZvgtctfAFYBi4ql1FqaazgN8CjwOuSFyLJEmSSuoNDlsMBpptaVIrwJjodSb7mvW2Kd9PvX22Y5DcZvdZK4iRJuSYMGq3ldn6umzd6C+rfuDa1pejCVyRLa9PXYgkSZL+v74qSzW1WmhUtiyZLo3W3ch+ar2H8sdatc9mpPhc1cEMYTRdDgFOBu4FxhrYfpAYn+SLwJuBZwJ74i+46XAW8Hxg99SFSJIkqaqJutZUeywPx9GTbT0y0XsoPtZMGDPVz8XWMJoUuyNpuowDFwD/BbwBeAfx81erO1IBuAzYFzieGMgXYCPwF6JlzY3ADcD1wO3Za2jqvg3cQ4wN8+bEtUiSpOnXD+xGdCufly1zgLXEsdgG4G5gdaoCe1Cj46M02kVoukw0dku9bZlg+2rPmygYydNnox5lCKPpthn4ABHIfBB4OdEypvJn8R7gdWW3FxIzKT2CGNj3EcBRlFprbKYUyhSX64HbaKzljUpGiZmS3kFME74hbTmSJKmNBoBHEcdVRwD7ZcvMBp67GriZOO76JXEC7c72lNnTKlt41Jr1iCr3NzrAbrWBeusNvNvI8+vVXamRbeu1/mlkVqhq+621z0Y+i1r7lOoyhFEqK4BXAOcA/wE8lQhLBohfbpWD8q6jNF5JuflsH86cAuxB/ELcSoQzNxKhzF+Ig4Wbs8dU3ZeA9xL/Rp9KXIskSWqt2cAJwIuAI4FFRKvi3wPfI46b/grcT5yM2Zgti4G5RMuYXYmwZn/iWOxTxHHZrcAPga8Rg/2rNep1w5novkZDgkaeN1GQ0sz2U933RI9N9NrN7NOgRW11IvZtU+s0+vP0NCIYGcu2f/8UX3cucDjR0ubDwPeJg4LRbP9jxMHFj4BPAqcCx+I4KOW+ACzHsaMkSeoWhwHnE92KhoHvAv8M7NWCfQ8CjwXeDlxNHG/9hWhZu0ML9t9N/L7VPab67/jVbFGP85eCWqmZn6dBIgwpAE9vUz0zgYOBvwfeRrT4+C3RnLbYBHID8Cfg60RrkBOJQGdBm2rKq4OIcXaem7oQSZI0JU8A/o/4u/5n4DTaH4wcDHwcWAWsBz4K7Nzm1+wUft9SkSGMAH8pqLU66edpCfAk4JVEF6nvEM1xt1IKaO4GLgXOJQYYfgYxeHC3du37EXBJ6iIkSdKk7A38gDiG+SXtO8lVzzzgjcR4f5uAdwOzEtSRJ510fKz2MoQREP1DCy4uLV462SARtDyTOIj4PDHw3D2U3t8w0Z3qR8BniIDmBOIs0JzpL7lljifOmh2UuhBJktSwmcC7iNDjeuDotOUAEby8mWgVsxw4Lm05SRnCqMgQpgdVG2BoEHgOMUCq1Ap30b0Dsy0gBqV7GLAPccZpn2x5SNl29xJj0hSXv5Zdv38a621WHzEd+K+JAY8lSVK+PQz4L2LA3PcBZwEjSSva1kOBTxBdwz8DvInemyzhROKLt4O9qhjAvCRpFZLUJWYBDydCzTOJWQMuJgapK+/itJ7on/0tor/0q4nZovYmH92cTibOpC1JXYgkSarrhcSMkn8gjiPyrLzWVgwM3ElsCaMiW8JI0jTpJ6bRPgp4FfAh4L+BK4E1bNvN6RbgZ8Qgwv9OTBt9DHGma+Y01DobWAm8cxpeS5IkTc67iS7En2J6jg9a4WHAH4nBex+buJbpZAijIkOYHpSHs+xSLxoH7siWy6o8vgOlbk17E4HN7sARwJ5sO87MCuBvwJ3ZUtxv8fbqKda6mRgH51TgI0QwJEmS8qEfOBt4DfBy4Ctpy2nKcmLmpouIE04vBH6YtCJJajP7IUqdaQkRyjyUCGiKIU1xKZ8CciPbBzN/A27Prt8NjE7wersT49e8Evhyi96DJEmamj7gP4EXAC8ipqHuRAPAOUQX6BcA/5u2nLZzTBgVOSZMD7IljNSZVmXLn2o8PottQ5ndiRY0DyO6Mj2UUlPlMeA+okXNPdl6Rdnte7P1d4ixbQxhJEnKh48RocVxxCD6nWoMeB2wlhhU+NnApUkrkqQ2MYSRutMWYsrsm2s83ke0lim2oNkF2DVb7wM8Kbu+uOw540ST5+XATURwc3e2vouY5elv2douS5IktddbgdOAZ9DZAUy5dxDHHt8Gngxcm7acCT0T+AFwBXH8swp4IFvWZOvVZfc9QEzIIKmHGcJIvalAqbXLFXW2m0UpoNmZOOM2QhxkPIQYo2YnYGnF8+5n25DmHmJw31XZ+v6y25tb8YYkSeohxwMfAE4ixlLpJqcTxxzfBR5FzKCUV/Oz9eOy9SjRqgfixNWMKs8pYDckqaf5C0BSM15E9F3dhxhPpmiICGN2K1svK7u9KxHULGH7GRs2EqFM8QxSMahZTensUfFsUnHZ0PJ3JklSZ9gV+DNwLjEjUjeaTZwkWk50t8qrJcTxy2S/U/ldTI4J04P8H19SMwaJAXr/B3jzJPcxnwholhEHL0uIgGanstvFZQdgUZV9DLNtKLMmWx4sWypvF5d1RJ9zp4aUJHWaPmJWxQJwLKVWF93oAOAPwFuAzyWupZ5rgIMb3HYMuIGYDeo/8LuYDGF6kt2RJDVjFPgU0Wf7PUyuRcr6bLm1we37iTCmcllccXtHYC9gQbYsAhZmz69Vx5ZsvQHYSgQ0m7P712b3bSTCm62U+nFvILpljWWPAWzKtilkzy3aSO0xcoqvJUlSI14FHAQcQncHMAB/AU4FPg18j+janEe/BvYnWgXXMkocj3yYOH564TTUJSmnTF8lNWsRMQDv24lAJu/mUQpmisvibD0bmEu0zpmZ3Tcnu744W88hwpyZ2b7ItjfEVqs1G8qtqbi9lQgDa+2vGBQWVQaExf1toTRWU7X7ii3J6t03nO1fUuvsSAyM/3rgK4lrmU4XE79jTkxdSGYhcCQxLs9TgX0n2H6UmMDgxZTG4XOKahXZEqYH+SVCUrPWEtNUnwF8hpg1Kc82ZEs7zqANUhqUbx4xAN8AEeYU1WuNsyDbXoJtZyObSDEgLFcMEIvmsu2Z2crwcBdKP399lLr+FfdT7b5mFYOgYuDzIHH2fi3xu2Mt8QVlPaXgphjkFJ+zhgiQNhOt1TZktzdkt/P+O0hqlQ8D1xFdWXrJGcQsSUcRXbGm2wAxEcGxRPDyWOLv+lXAN4DLiZY6syqeN078Hj0PeBPbhuSSepjpq6TJOIg4EHweceAhqTeUBzOziS8d1e6blV0vhjfFkLIYSi7O1guz++dRCpbKnzNE9XGhyhVbAE0U1myu2G4TEQrV2k7Kk4cDVwOPzta95sNEq5PDmZ4x3fYiApdjgWOI30N3AT8BfgxcSkwiUPRD4DhKJ11GiN81L82eU6nYEuZFbahdneWrRJhnS5geYggjabJ+RHxROip1IZK63lwi1FlAtOiZk923iFLYs6jJ7eqN3wD1w5q1RGBTb1mDLXXUOhcRP9fPSV1IIkuB24mxVC5uw/6rdTHaCPwcuCRbbqzz/H8Bzsqu9wFfJ8azqew2WnQE8LupFq2u8QHgnamL0PQxhJE0WccTQcwhxMwAktRJil0HJwpr5mTblG+3mPjSVr5UdkUoWk/toGYtjQU66m17E2PBPBH4feJaUjqLCC+e2IJ9FbsYPZVowVLexegSovXKr6k9sH6lg4Drs+svIlo2SFJVhjCSJquP6JL0a+CUxLVIUmoz2TaUWURplrZ6S3mgU2usvmKrmnqtbh7IlvLrD1AaPFmd6xzgUOApqQtJbHfgNuJz+PUknl+ri1GxpUtlF6Nm/SPRcmbFFPYhqQcYwkiaipOBTxIHRqsS1yJJnW4u1YOaiQKdxcAOlGZwK7eZ6uFMZWizuuK+B9vw/tS8IWJg+bcC5yeuJQ9+CtwKvLqBbdRJJloAACAASURBVKfaxUiS2sIQRtJUzAbuJIKY9yeuRZJ63QwijKlcFjdwf6VRqoc1tUKc8mU6Bk7tFScAXwN2xmAM4CTimGNnYlDucq3uYiRJbWEII2mq3ge8EtgTD2wkqRP10VxgU37fjIp9jRMtI1dn6+Jyf8V9q4H7svWGtr2zzvctIhD7h9SF5MR84ufmZcRn0+4uRpLUcoYwkqZqF2LGgpOBL6ctRZI0zeazbTCzFFgC7Jitl2T3LS27b2bFPrZQCmdWZstEIc5IG99TXgwQ7/VNwBcT15InP6HURc8uRpI6jiGMpFb4GnAA8KjUhUiScm8+EcYsY9uwpnhfZYizI9sfsz5IqSVNeeuaFZSCnPuI8GYl23dd6QSPIWZD2os42aHwduANwBewi5GkDmQII6kVHgf8FjgKuDxtKZKkLtPP9sFMrRBnZ6LVTeWU4euAeykFNLXCmmKLmzx4C/BaIoRRSfGYYw9iXDpJ6iiGMJJa5bfEgewJqQuRJPW8+UR32WJ3qJ2yZSkR3hTDmuJSboTqYU15iHN/dvt+2tfK5hvEGDuOB7OtGcAm4MXANxPXIklNG0xdgKSucRbwX8SZqTsS1yJJ6m3rs+XmBrYdpDSWTa2wZj8i1FlKzAxY7gEikLmPmE66GN6U33d/tjQzc9QBwHea2L5XjAC3AfunLkSSJsMQRlKrfJuYkeA04M2Ja5EkqVGjRGiyAri2ge3nUgprlgG7Ztd3JoKafbL7lrFtt6hRSmHMPWXr+4jAZkV23wpixqh9gZum9M66100YwkjqUIYwklplFPgU8A7gPTjlqCSpO20E/potE1lEBDPLgIdk610ohTiPyu5bRox9U7SFCHCWt6zq7nIL8PjURUiSJKW2iGj+fXrqQiRJ6iADRDhzKPAM4N1E16V9UxaVY++gsa5mkiRJXe8c4sxd/0QbSpKkqp5MhDA7pS4kp84gum1JUsfxS5KkVjsH2Bt4dupCJEnqUAuytV17q1tPzIAlSR3HEEZSq90CXAKcmboQSZI6VHFA301Jq8ivrWw/S5UkdQRDGEntcDZwJHBY4jokSepExRYwC+pu1bvmEa1hJKnjGMJIaodLgBuwNYwkSZNhCFPffGBd6iIkaTIMYSS1Q4FoDfMiYEniWiRJ6jQPZut5SavIr/nYEkZShzKEkdQuFxFn8l6TuhBJkjrMPdl6l6RV5NcuODuSpA5lCCOpXTYD5wKnAkOJa5EkqZOsBh4A9ktdSE4dANycughJmgxDGEnt9FlgR+AfUxciSVKHuZEIG7S9/YC/pC5CkibDEEZSO60Avo4D9EqS1KybMISpZjGwM4YwkjrUYOoCJHW9TwJ/JKasvjxpJZIkTb8ZwMey66uJWX0ezNbrgLVl1x8Etmbb/gI4hzheH53GevPuycAI8NvUhUiSJOXVb4Hvpi5CkqQElhKzBhaALUTIMlp2X+WylRgPpnj76dNfcq59Evh16iIkSZLy7EXAGLBv6kIkSUrgKmqHLhMt705Qb55dA7wvdRGSJEl5NgjcQZy9kiSp17yXaOHSSOgyki1vAT6O3W7K7QOMA4enLkSSJCnv3gSsAealLkSSpGn2WBoPYJYDj8qed2h2v1NVh38Drk9dhCRJUidYBKwHTk9diCRJ06AfeAzRCub3wGZqhy9jRAuPzwCzK/ZzNfD+6Sk51/qIgOptqQuRJEnqFOcQB1D9qQuRJKkNlgIvAS4C7icClr8B5wI/IVq6VAYww8SsSc+osc/TgTuBoXYW3gGOJLp07Za4DkmSpI6xL3G277mpC5EkqQUqW7uMEUHBz4A3AweXbfuS7PHyAGYcuBhYVuc1ZgP3Aa9oce2d5hLgvNRFSJIkdZrvApelLkKSpEmq1drlc8RJhlpjny0jQpdi65ctwKsbfM23AjfRuy1JjyBaEe2TuhBJkqROcwxxAHpY6kIkSWpAPxECNNLaZSL3En8Drwb2b+J5C4FVwMubeE43+RFwYeoiJKkV+lIXIKnn9AHXAVfSuweT6m4ziLO1B2TrpcSZ8bnZsgbYmC13Azdny10piu0BHyS6Qqq7fAX4fhv3vxQ4Dnh6tl5K/D/6AyIQ+BmwYRL7fTbwCOBjRMuOZpwCvAc4EFg7idfuVM8D/pN43/ekLUWSps4QRlIKJwOfBvYEVqQtRZqyecCTgKOZzfFs4eEUGKCPAssYYRkF5tPPfPpZwAArGWE9BTZQYAX9PMgMAAbZRD+/YJifApcSZ8rH072trlHI1t9IWoVa6YXA14guQa3SDxwOPAt4GvBoYBT4FRG6/Ai4toWvNxn9wG+AP9A7Mw3OBW4AzgLOTlyLJElSx5oNrAT+PXEd0mTNAJ7LIN+jn2H6GedgtvBmCnyDAldTYDOFhi4rKfArCpxHgZcxzs5sBQrMZCXwCZrr6qDtFYATUxehlvpqtkxVtbFd7mTisV1SOoxoQXN86kKmyQXAn4HB1IVIkiR1uvcRzYp7fcpNdZalwAeYwTr6GedYRriIAmsaDFwavdxMgfdSYJ8skBnieiJI8ItI8wxhus9kQ5h+4LG0ZmyXlN5LhEa7pi6kzU4CNuMYcpIkSS2xC3Hwe1LqQqQG7AKcxQCbWcww76fA3S0OXmpdfkOBlzBGP2MMcQfwSgxjmmEI032aCWE6sbXLRAaIWQZ/QfeeyDiYGHPntakLkSRJ6iYXAn9KXYRUxyBwBoOsZyeGOZsCG6cpfKm83EqBkxlnkDGGuA54fOoPp0MYwnSfeiFMt7R2mcguxExLF9F9YzzuRkz5/d+pC5EkSeo2hxFfkI5MXIdUzaEMcS2DjPE2CmxKFL5UXm6iwFGMAOMMcD4wP/UHlXOGMN2nMoSp1trlDjq7tUsjjiBmSTondSEttCNwDfBbYE7iWiRJkrrSZcB3UxchVTiNAYZ5CiP8JXnsUv3ydQrsyDBD3AYcmvoDyzFDmO7zVeBiur+1SyOOBoaBL9H5LWKWAlcSIczCxLVIkiR1rRcQB9D7pi5EAuYyyLfoZ5z3UmAsedRS/7KCAk9hhAGGibFitD1DmO7zVWA5vdHapZ6HEd16C9lyPjFeTCfaE7gJuJHojiRJkqQ2GSQOpLupObU60w4McSU7MsylyeOVxi+jFPg3CvRRAN6T+kPMIUOY7vNVenu8kAOB/yJOYIwTP+MfBR4E/hdYkK60STmcmC3xCqI7kiRJktrsTcB6YFHqQtSzHsoQN7MnW7kteawyuctXKTDIGAOcR+eeDW8HQ5juM9kpqjvdwcA3iOBlmPjZHgfuJk5oPDq7fjMRbORdH3A6sAX4ATA3bTmSJEm9YxERwvxL6kLUk5Yykzs4hGHuTR6lTO3yYwrMYoQBzk39oeaIIUz36bUQ5jDge2wbvhSXUeB1ZdsuBX5MBBuvJ2aLyqNlwHeAEeBf6fzxbCRJkjrOOUQf/7weMKo7LWSIa3gEw6xNHqG05vJLCgwxAnwo9YebE4Yw3adXQpgjiAGIq4UvxeUBYHbF8/qBdxKDFV+Z7Scv+oFTgTXA7cCTk1YjSZLUw/Yl+rc/N3Uh6hkDzOQX7MFW7k8enbT28j0K9DMOnJL6Q84BQ5ju0+0hzOOBnxA/u7XClwLRiuTtdfZzEHAp8bf1AmCv9pXckKcDfyTCof+gNwdTliRJypXvElNWS+3XzwdZxDDLk0cm7bl8ngL9jACPSv1RJ2YI0326OYSZRe3QpXLZwMRjqfURP/+3EKHNhcTAvtOlHziBaJFTIFr2HDSNry9JkqQ6jiQO0g5LXIe63/EMMMZPkkcl7b28klFmcRewMPUHnpAhTPfp5hAG4ExKsx7VWoaBDzexz0HgpcAN2b5/RbSUW9yyqrd1IFHfHURLnG/h33ZJkqRcuoo4Uye1yw4M8QDvYDx5SNLuy0YK7M8WZvG11B96QoYw3afbQxiIgKReELMV2HkS++0HjiX+zq4nBvD9CdGt6XHAjEnWuxh4DnA2cF1W4y3Ae4F9JrlPSepKjkQuKW9OBj4N7AmsSFuKutJMzudgXsoVzOyJiZxvBA5hjBGOAX6eupwECsBLoKeDqG5TDGBekrSK9nsd8Cm2P14fAb4IvHaK+58HPAM4BjiaGJttFLgNuIkIUVYS3Z6KyyJgQfbcXYD9gQOAnbLn/o4Yh+bHwG+I//8kSZKUY7OJg773pS5EXekIBhjl6uRtVKb38g7GmM0tTP4sdyfLQ0sYv4i2Vi+0hFkEXEHMIjTGtq1gxoC92/CauwMvAN4BfJkIUZYTJ0TWU5qN6Q7geqIFzWeAM4jWNQ60K0mS1KHeRwQxldNuSlPRzxyu5V8YTR6KTPdlEwV2ZTP9vCn1P0IChjDdp9tDmB2JWYTuBPYDXkYpiBnGVl2SJElqsV2I/u4npS5EXeX5zGKYB5JHImkuF1JgiHX03tnqPIQwaq1uDmGWAVcTXYLKp5R+MaWWMAcnqEuSJEld7kLgT6mLUBeZzTW8pQcG4611GaHAbmwB3pj6n2KadUoI04utZSb7nrs1hNmVmL1oOdE1qNKzgPOmtSJJkiT1jMOIA/QjE9eh7nA8Q4yyInkUkvZyLgVmsZre6urXbAhTKFsXKu6vvK+Rx6hyf+X2lTPfTLTfWjU2sk0jtZY/t94+aj23kcdqvedGdGMIszsRvtxAtAaVJHWp/tQFSFINVwGXA2cmrkPdYCav54VMbkLXbnIS0M8C4PmpS8mp8oCgr+x68XZxqQwk+qpsX7nPatsXn1O+Lu6/1mtWq7EV76OytvLHKl+n8nYzn1Gt99zL9iJmLttEnHhwZkBJ6mKGMJLy7Gzg2cS0mdJkLWOEp/JPPTEhdX2zgX+gn5n8c+pScqpaQFDUSKuNas+bSsBQ7TXr1djINvVa10y17sm2bOll+xEBzAPENNH3py1HktRuhjCS8uz7xFSYZ6QuRB3tRJYyytGpy8iJl9PPMEfSWV0eBoH3Ai8lTd19VZZyzYQO5S1dpvKak9GOfTay70bfc685iAhg7gKOAVanLUeSJEmCNwHrgUWpC1GHmsWVnNmyUVU6/zJGgR3YCpyW+p+mCfuybSuL5cAngecACyd47mTHhKl1u9Y2zYwJU/m8ym0mes1Gwoxm30ezjzfz3Mr7q73nZnTDmDCHEq1efgHMT1yLJGka2RJGUt6dn61flbQKdar5bOVQW8GU6QeOZ5BBjk9dShNWVtzeF3gN8F2iG8cfgQ8QrQlmteH1q41vUnm70ZYl9cZaafQ1J2uifTYbitQKYqp9RkW9Pv4LwKOBnwHXAE8jTjRIkiRJuXEOcDsGx2reM+lnnHXJ25/k63IeBWawHjpqnJwRtp9Rp3zZWra+HHgbcATNtYSpN15KI7P+NPLcWtvW267RWqbyPiZ6L82+z3r7bea9VNPJLWGeDKwFLqa3ZimTJElSB9kXGAOem7oQdZyPcihbk4ceebvcQvGL76NT/wM1YRX1Q5jyZbzidjPdkZrRbPejTpPX99GpIcyziRmQvgkMJa5FkpTIYOoCJKkBtxCD9J4JfC9xLeokMziMR+fgy075JMF5sA8wmzE280iiK08qs4ElwFJgWXa9fCm/b6SJ/Y4SrXz+Qgx+KqX2T8B5wAXAqcSJBUlSDzKEkdQpzgYuAw4DrkpcizrFAA9n/8Q15HUEjH0Y5bqWfzrlAcqO2XqnivuXZssSYG7F84eJFi+riHFgVgJXZ7dPAHae4PXHiO5I5xLdGO9g+qOvVo3fou7xRuCjwAeBdyauRZKUmCGMpE5xORG+nAm8PG0p6hCz2cpOyUOYvHoEQ9zIgXXOx89k2xYpS6kdphSXyjFmHqQUpqwC7gOuz9bFsGV12WMP1qn4IOAQtg84xojxou4CPkG0NKi3n1aqFrZ0UwDTTe8lhT7gP4hZ/s4kgkFJUo8zhJHUSc4mmnO/FViRuBbl354U6GOPxFUU22Hk7evsnvQxwKMZ42Ns3wVoKTCv4hmjlIKTVcT0utdRClGK960suz3cworvI7okFbuXjQAziO5UHyFmSrKLh/JigJjd70TgpcDX0pYjScoLQxhJneTrwMeJ/vTvSlyL8m8+AIsSV5FXC4FRFhGztRRDk5uIEOV+tm2pspKYCjql1UQAM0K0fPkO8fvg9ymLkqqYTfy9OoboRvfDtOVIkvLEEEZSJxkmxnp4DdG3fnPacpRz0ZJjfuIq8mohMMAY4zw2dSkNuiZbnwV8GvhbwlqkWhYRA8g/AjgWuCJtOZKkvOlPXYAkNemzwAKiebdUT8QvlZ1qFOYDY8xJXUYTvkN06vpXDGCUTzsDPwf2JlqYGcBIkrZjCCOp06wgmnmflroQqQvkZdJsqdPtC/ya6DL3JOCGtOVIkvLKEEZSJzobeCRwZOI6lG/ry/6rSuuBATalLkPqAocCvyTGLXoyMTW6JElVGcJI6kRXEVNWn5m4DuXbhrL/qtI6YICNqcuQOtyRRBek64CjicGsJUmqyRBGUqc6G3g20QRcqibawKxJXEUfpempy6+ntq7sv5Im42XAj4GLgWdi5CtJaoAhjKRO9X3gr8AZqQtRbt1GHwXuTFxFocqSB7dTYISbU5chdaA+4N3AhcAngBOJ2fskSZqQIYykTjUOnAO8gpgSVKq0hSHu5S+py8ipaxlmzE9HatIQcAHwLuDVwNvIT7QqSeoAhjCSOtmXs/Wrklah/BrnBtt61PBXBsEQRmrCIqLr0d8DzwLOS1uOJKkTGcJI6mTrgC8BpwODiWtRHo1wFVeyNXUZuXMrsJkB4NrUpUgdYg/gV8D+xBTUP05bjiSpUxnCSOp05wC7Ac9PXYhy6VKuZYi1qcvImUuBGWwgZhqTVN/jgd8BI8DjgGvSliNJ6mSGMJI63S3EIL2npi5EufQrCozzy9Rl5MyljFPgMmJsJUm1vRS4jAhhngzcnbYcSVKnM4SR1A3OBv4OOCx1Icqd9czkT/wsdRk5Mg5cwiijXJK6FGkKFgC7tHH//cCHgK8Qf2Oeh1NQS5JaoC91AZLUIn8ixrd4eepClDtnsIyPsoIhTz0AlwPHMM44DwHuTVzNdCjOXPONpFWolV4I3EmEMP8LfAH4Ka1r2TUPuAh4GnAKpUHge8EMYB/ggGy9lPg85mbLGmBjttwN3Jwtd6UoVpI6kSGMpG5xEjFTxZ7AirSlKGeW0c89/JABjktdSg68gnH+i8vYyrGpS5kmHwT2TV2EWu7rwGximugnE8NNn08M1n7fFPa7O9HFdWei9ctvplZm7s0jBho+GjiSaFE6SARa9xCfZTF02QAsphTK7ArsmO3nQeAXRMx7KXA1dneUJEnqakPEAeP7UheiHJrJDzmRUQo9ftlIgTmMACem/ieRWuhAosvQamAY+B/gGJo/2fhkInT4MxHGdKsZwHOBbwNbgFHgSuAjwAuARwKzGtzXEuCJwKuAC4kWSgWilcwngINbWbgkSZLy5V3ASuLsqFTuqQwxyorkMUjay+coMIvVNP4FS+oks4lWkb8igoDlwFuAZQ089wwiwPkW0dKjGy0FPgCsIoKXHwEvARa1+HUeRvw9vpH4d/gzEfwOtvh1JEmSlNguwFbg5NSFKIdmcw1vZix5EJLqMkKBh7AFeEPqfwppGjwcOIcYw2QL0X3pKLZvHTObGPNlFHh7lce7wS7AWUR3ovuAdxBdiabD44nBjUeI2QxfiWGMJElSV7kQuJ7uPJDW1DyPWYywOnkckubynxQYYh0xloPUK2YD/0SM7VIAbgLeSHSj2ZMY1H01MQhvtxkkWvisAf4G/AswJ1EtewOfJ06UXEWEM5IkSeoChxEH2g7Bqkp9zOFaTu/BsWE2UmAXNtPPG1P/I0gJPRL4NLCW6Hq0hWidsU/KotrkUCJg2koMTp2Xbrr7AT8hBu39AjA/bTmSJElqhcuA76YuQrl0OAOMclXyWGR6L29jjNksJwbklHpZH/BuYIwYG6VAjF3yemCHhHW10mnAZmKWov0T11LLPxAzGd5MBEaSJEnqYM8lDrCdllbbm8kXeBRbeqY9zPUUGGQEeErqj15KbEfgB0QrmDOz+w4FPgusI4KLrxCzJHWiucTMUKPEwLj9acuZ0M5EULSZGCtGkiRJHaqfmBXjnNSFKJcWMcQDvI3x5AFJuy8bKfAwtjDERak/dCmxJwB3ZMvjqjw+j5hm+Q9E65jriTFUFk9XgVO0A/BbonXJUYlracYA8O9E96T3pC1FkiRJU3E6sJ7WT72p7vBU+hnjR8ljkvZeXs4oM7kDWJD6A5cS6QP+lZid5wdEa5iJPIoYRHY9sIkY8P0J7SqwBR5KhEY3E4MNd6ITifFrPk8EM5IkSeow84gZId6UuhDlVD/vZyFbWZ48KmnP5bMUGGCEGKxa6kXl3Y/eQPOz5s0DXg38kWgdcy0R8C9sYY1TtZRo+XklsFPiWqbqOCL4+mzqQiRJkjQ5nyCang+mLkS5NMAMLmMPtnJ/8siktZfvUaCfceDk1B+ylMiTqd/9qFmPAc6j1DrmghbtdyoWEgHRVeQrGJqKJwEbgQ+lLkSSJEnN25cYoPdFqQtRbi1kJn/iQIZZmzw6ac3lcgoMMQK8N/WHKyUwg/gCPwp8j8a6HzVjIfBaIvgoAFcDpzL9IcgA8DOiFczSaX7tdnsO8e93SupCJEmS1LzvEoMVSrUsZSZ3cAjD3Js8Qpna5WIKzGKUAc5N/aFKCRxItAzZwPS0Anss8EWi5cYG4HzgiAae10cEOD8FZk7ytT8A3E/3zgJ4CjFGzKNSFyJJkqTmHEkc7D4mcR3Kt90Y4mb2ZJhbk0cpk7t8mQIDjNHPZ3FgS/WWPmKslk3A75j+YGIh8DqiVUwB+BPwGmoPiH1Mtl0B+A0xs1EzjifGuTl2MsV2kC8At9I9Xa0kSZJ6xp+I2S2kenZgiD+wA8NcmjxSafwySoF3UaCPAv38W+oPUZpm+wCXE7Mf/TvpxwB7PPCfRCC0nggSDq/Y5htEiFLI1rcAezW4/x2Ae4H3taDWvJsDXIN/vyV1mWZHiZekTnQSMaDinsCKtKUo5+YwwAUUeBHvpI93k+82JXcDJzLKrxljjNcCX0pdkjRN+oHTgA8SrSX+iRinJS8WEX97TgEeTnST+jzRBelmtg2LRojA5mnAHybY77nAwcBTiDHPut2BxImUpwE/T1xL3jyU9INDC+7Cbu+SJG1nCLiH3jhzqNY4hQGGeQIjXJ+8rUv1y0UUWMwIQ9wCPCL1ByZNo/2JL+TDwHuI3/F59kTgy0TrmJuI0KVQsYwCm4Fn19nPEcQ4KY9sZ7E59D7gOmLQZZVcwPY/Ry5pFkmSVMU7gZXA7NSFqGMcwhBXM8gYb6HA+qZjkvZcrqfAUxihj3H6+TwwL/UHJU2T2UTospVoHXFo2nKatiNxQqDWF7lxonXLqVWe20+0kvnEtFSaL7OBvwJvTF1Iznw1W5TOiRjCSJJU0xLiLOR0zJih7tEPnMog61nCMB+nwIZE4cvNFHgFYwwyxhDX0NgsLFK3OJ4YO+VB4EzSj/0yGcfS+Jn1j7DtsAHPJ9774mmsN09OIk6kGDqXGMKkZwgjSdIEvgRcj+NhqXlLgY8xwCYWMcx7KXDXNIUvv6HAixmjn3GGuA14BREOSb1gV+B/iC863wAekracKfk2pQF5J1rGiPc7K3vuH4APT3O9eTJIjP1ja5gSQ5j0DGEkSZrAYcQfy+NTF6KOtSPwPmbwAH2McxQjXEiBVS0OXq6nwHsosEf2hW0mVwP/iOGLescgcAawjvjy/Yy05UzZzjQ/zsQIMYX1C4iWnDtPe9X58mqiO5fdioMhTHqGMJIkNeAy4Eepi1DHmwE8iwG+yQDD9DHOw9nCGynw3xS4igIbGwxc7qfALyjweQq8hHGWsBUoMIP7iDPfB6d9q9K0ewwxm9BW4AN0x5fuPWm8BcwwsKXi/q9Me8X5M5sI5V6SupCcMIRJzxBGk2KTfEm95rnAd4jZNZYnrkXdYQ7wBOAYZnI8IzyScQboA5YxzBIKzKePhQwwnwFWMcKDxEC/K+hnQzbjxww20McvGebHRFh4LR7cTcYHgX1TF6FJWwAcB6wigpj1DT7vK8D321VUi80lAoUFwPzs+rzs9uzs8YXZ9YOAFxJTNP8kRbE580WiS9rTUheSA8UAxlAqnROJfwe/U6sp/sBI6jX9xBShPySaukutNgPYiwj69iXGk5lPfMmaC6wBNhBfLu8BbiZ+JlekKLYLFYOrbyStQlOxE3BfE9u/EPga3fll9ExiHJQ9iNmTet3fAT8DHoq/Mw1h0jOEkSSpQacTX4AXpS5EUssViANj9Y5u7pbxG+Cs1EXkSD8RvpyWupAc6Oaf+05hdyRNigP8SepFXwJGgVelLkSSpBrmE+PjXJq6kBwZJz6PY1MXIkmTZQgjqRdtAM4nWsQMJq5FkqRqnkJ0c/h56kJy5jLisxlIXYgkTYYhjKRe9SlgV+D5qQuRJKmKI4E/AQ8mriNvLgMWA4emLkSSJsMQRlKvuhP4P+D1qQuRJKmKg4FrUheRQ7cSLVofmboQSZoMQxhJvexs4HHZIklSnhxAzJym7d1MzEAnSR3HEEZSL7scuApbw0iS8mU2MQ2zIUx1N2EII6lDGcJI6nVnAycAu6QuRJKkzJ7EcfodievIqzuIz0iSOo4hjKRe93VgNXBq6kIkScrMz9Zrk1aRX+uARamLaJE+DJSknmIII6nXDQOfBV5DNP+WJKlVhoCTgIOafN68bL2+teV0jXWUgqpO9yzgNuBG4Axgh7TlSGo3QxhJgnOBucBLUxciSeoqTwIuBK4HVgIXAa8Adp/gecWAYUP7Suto6+meEKb4PvYHPgHcC3wNOJpoJTNdCjneb6P7aNd7kFpqMHUBkpQDq4gD4zOB8/GPuCSpNdaVXV8C/APwYkrjvfwI+BlwKdE1Vo3rI06ebCXCqhHi8x4junGNEmHNVmBTohobMzmyywAAIABJREFUMYeodRAYyJYXED8ndwKfA74M3NPGGvIcwOTxtaQpMYSRpHAOcDJwHPDjxLVIkrrDyorb5cfeewD/DJyS3b6eUigzkt03H8OZauYTwcUFwIwGn7OJxgObzcCWKWw73sR7GWL7AKH4nnYH3ge8H/gh8PlsPdbE/hvRV6WGPO23kRZB7XoPUssZwkhSuI6Ysvr1GMJIklqjMoSpVB4gPALYD3hT2X3zMISpZiHRbWfvstv9wGKiJckCItyYS4z3Nov4LGdkjw3U2HYRsHN2fajGto0osG1gMwxspHpgcyD1w4Pi97WnEePHrOT/tXffYY6W5R7Hv1O371J2qStNpIv0IujSRFTABuIBBRFBj1JEjyIiWBBE8SCiR0VBsFAUsWBhQQSU3pvSe1vApS+wO/X8cSdONpvJJJkkT8r3c13vlUzyJu+dbGY2+eV57ifCmKm05nS1Yeo7DSv1cdWGDGEkacTJwO+IBop3Jq5FktT4phLTjJbLnGa3WTmX9VP6aI38D4FL4zLVhcxg8ale2fPP1+HY+eFOscAmu+/EzP75+65GvEZKGTmT/dw2C/hS5vyvK6g/N/ApFDoUu77S68o99nDePvkByXiOVejy0Y6rxjWDCK3XIsLYqUSImm1qvoD4e/AK8CBwb2Z7cYl7SsAQRpJG/BF4gFid4BOJa5Ek1VcniwcphcKVmcDyOecn5t3HQqLP2Hzg6czpy4y94k1/5vh/AL4N3EZ8eFgFuHV8D6slrUqsKJRCX2arVuDzDeAzJR63F3iOeJ2sSYy0KUdumDFM4XAjP5jIPV9s32L3m6tYwJGdUjRaaDKeYxV7DIWOq8Yym2hWvX1mWzVz+UIiqM4NXSD+di9NhDKrARMylz8E/J3ow3Up8ETtS1+SIYwkjRgiesMcD3yBGEosSfnKfbM+1v6++a+NycCyLD4qJTdcmZW5Pvfy/H+H54jpH/OJaUFPALfkXJYbuDxL4ekht1M4hBkm/t95jVil7/ssPurlMWAd4IKSH3H7WAe4OHURVTJ1lMuHiZClh/gm/zwifLmOeN2cVeZx8v/OFPqbM9bfoULTpkq53/GMMMnt9VKNY9k3pnksB3wQ2BfYlPj7+g/gB0RQfS/xN3OskWSdRGizFvAmYLvMfUwFbgLOJEaVPVPl+iVJJZpKJOn/M9aOkhrSMLB3HY5Rzf39UDA+ZxFvyP8C3EC8KX+FkW/Js9siIkS5DbiEWAb4FOAY4JPAB4g35xsQfUGq9WXlX/PqGCA+NDxKjLwcbanlucSKfVrSy8BHUhdRJacSr4nsayP7+rgB+DzxwbGQsygviCn371ChkTCV3u9wCfsVu7/86UKVHKsWf4f3rvB2Km5T4DfE6K8XiN+Rt1DdASTdxIiaUzPH6COCzk2qeIyiB5ckjVhAvOk9hOgRU+5QX0mtr9xvc8fa31Ew1fE0scJQdhpQ7vYM8FKiurLfrmZ7w1xPTDn6PcW/wb0DmFPb0prS64kvTO5IXUiVLE/0h+knwsHfEaOfnk5ZVAnKGcFXz5WLyjmWoxAby5uJUPztRAj5IWL016IaHGsAuCyzfRrYjQg9byJWIPsqMepMklQnqxBvhj6QuhBJZavHSJjxGM8HkVb/xrXSx1fuiIB6O554bOcAm5Vxu3cQHxSWqkVRTexAYppYZ+pCqmRNYD+iaW85KhkJkz+6pdhol1L3Led+S/kdH2skTKXHKufxlsqRMNWxPPAzIpS+nAhhUnk7cEWmljOJaauSpDr5FXBN6iIkla3cEGasN/djDWvPv30pHyBK+TBQrJ5S6yxWQ6m3z72u1A9Cpdx3/nWjPb5SNHoIMxFYsYLbTSO+ENituuU0vbOJ0SLtrpLX/Wi/Y8V+H8e67Xjvd6z7KvU+avUYijGEGb+DiDYAjwDvS1xLrj2IKaPPAR9NXIsktY23EP+xbpW6EEllKSeEKefNff5tRtu/km9fS/12dqzgY6wgpZzHOdbxytm30PWj1VmJRg9hxuNKYmqsQicwDzg4dSENoJVf983CEKZy04lmuAPAtxi9QXVKU4ETiRrPImqWJNXYzcSIGEnNo5wQJrt//s+FttFuU0oQMlYAUWrQMto3uqV+u5z/c7Hbl/s4yqnNEKZ0hwKP0zpTb8ZrO2J00AqJ62gErfy6bxaGMJV5I7Gy0TyiOW6j256o9V6icfu4+QddkkZ3MjE0cpXUhUiqq44CWz2PnQ0tSmnoO546a/k4i9137mNUcecSy7TulLqQBrEv0bz2qdSFSKrIHGKZ6YeJ5aIvS1pNaS4DNiZW1/sHsO1479AQRpJGdy7wb+ATqQuRlFQ9w4Js+FJJIDLeOmv5OPPvO/sYDWOKe4ZYqvrDqQtpAJOB9wO/SF2IpIq8m/h79kfgXYysHNcMniKa9l4IXAzsnrYcSWptXyKCmEmpC5FUkmpNRxrt+vzLajkdqdh1pU7xKXa/5fSqKVZL/v7l9I/J/dnpSIW9DXgVp+B8AniSaHSs1n/dNwOnI5Vud2Iq4bdp7mXBO4DvEMtm2zRdkmpkJvHm98DUhUgqSTkhTLGeL6ON0CjW72S0/ifF9in2c7m3rebjHK2WUq4b675Luc9ytMOH0RuAb6YuIqFu4EHgM6kLaSDt8LpvdIYwpdkSeAU4IXUhVXQC8Zi2TF2IJLWqHwP/ormTe6ldlDsSRqVr1A8b7fBh9L3Ay8AyqQtJZD9iVOqU1IU0kHZ43Te6bAjzKPFv8UmicastP0asDbwAnEZrvY/uAM4kplStlbYUSWpN6wFDxFxQSY3NEKZ2DGHS6SBGw7TjctWTgYdwFEy+dnjdN7psCHMU0SvkpczPzwF/Ao4AtgEmpCowsUnAbcAFQFfiWmqhi+hvczNOk5Skmpib2SQ1NkOY2jGESWszog/BRqkLqbPjgDuAntSFNJh2ed03svzpSF3EKjqHAL8mehgNA68Rq+ocB7wTmFHfMpM5lZhG2MqPd2kiJP5B6kIkqRXtToyGWS91IZKKMoRpP+30YfQHwDW05rfKhaxHfIB9a+pCGlA7ve4bVSk9YV5PTKc7Dbgrs/8AcCtwCrAXsHINa0zlvURovFnqQupgC2zUK0k10QncR/SHkdS4DGHaTzt9GF2KWCr1uNSF1MFk4J9E3wUtqZ1e942qksa8s4iA4iTgemLFoGHgAeBnxEIQ69Lc/VOmAo8An01dSB0dQYyImZy6EElqNYcQKyXNTF2IpFEZwrSfdvsw+jbig1ur9yn7KfHlx/TUhTSodnvdN6JqrI40BdgJ+ApwCbAgc5/PAL8neiFtSawQ1ixOIEb6NFPN49VNTJtsh4BckupqKvA88LnUhUgalSFM+2nHD6PHEh/S1kxdSI38N7CQ6K+hwtrxdd9oarFEdTcxveVw4LfE7/kwEc78DfgqEdpMrfJxq2UdYmrOm1MXksBbiOmTrfp3WZKSOZEYYtlO6b7UTAxh2k87fhjtAv5KjBSZlbiWatud6JlxYOpCGlw7vu4bTS1CmELWAQ4gpuY9kDlmP7Fi2neA9wHLV/F4s4FlKrzt2UR41K7+CPwidRGS1GpWIf7j+0DqQiQVZAjTftr1w+gM4Frgdlpn9ZE5wCvA11IX0gTa9XXfSOoVwuRbiXgfegpwCxFaDgP3AKcTjYDHMxpjOLN9qMzbrZmppR2a8Y5mS+JzwhqpC5GkVvMrYnUKSY3HEKb9tPOH0VnEaJgbqe434Sm8g5hy4VKvpWnn132jSBXC5JsO7AJ8Hfg70b9wGJhHLJV9KLAJpa2qtjIjIcwQcDGwWol1nAZcVEbdreqvuJCHJFXdVsR/TlulLkTSEgxh2k+7fxidDfyLCGOa9dvXDwN9wP/RPstvj1e7v+4bQaOEMPl6iZ4sRxDTY54l6nwJmAscDWwHTCpw272I8CUbxPQRfU4+TfHfzaUy+7lMM7ybeC5sKi5JVXYtMSJGUmMxhGk/fhiN/g1XE8tXb5+4lnJ0EVOPhoBjEtfSbHzdp9eoIUy+TmADouH1L4nehtmA5SrgW0QvpmWA7xONdYfztkFi6tOGoxzjIOBpoKdWD6KJ9ALzgY+NtoONJSWpMj8g5t2uAjyauBZJUnt7jlgx5TRiKPxxRLgxmLKoMaxMNLDckmg6ekbacprSnsQyxkpjz9QFlGgI+Gdm+2HmslWI1Xy2IaYCfhboIIKU3gL3kQ1ybga+SUx9ei3n+n2Bc4l+KO2uj3guPkT8TZYkVUkv8CSxWpKkxuFImPbjiIDFHUR8OPoHsF7iWkazD7H07l3EBzuV7+ssOVrBrf7borH+oZrEMsAHWXwq0mhbP/Ag0UgbYkrkEO25LPVo3ko8JyumLkSSWs2XgOeBKakLkfQfhjDtxxBmSW8imvUuIr61npq2nP9YD7iUGKHzIxqnLknwTkoPnwaIkOF04BNEvxln2YzoJVZ62yd1IZLUamYSHegPTF2IpP8whGk/hjCFdQKfJL4seBL4DOm+NHgD8WFtEXATsEWiOiSN7ngK94MpZftHgnob3VycjiRJNfFjYlWKjtSFSAIMYdqRIUxxs4BvAy8TU4COJvqx1MPWxL/NAHAvsD8RDklqPPdSeMTLQqLPSf7lzxDTkgaBLyeot9EdATyQughJakXrEcMx3566EEmAIUw7MoQpzbLAsUTjzUGige++mcuraT1ipaP7id/HG4heE4YvUmPLBiwLiN/fS4Ezif5DnyJWUNocWImR3+fpmdvsUudam0F2ete01IVIUiuam9lyrQbsVf9SpLZnCNN+DGHK0wPsCvyaaOA7SKx48m3gA8BGwOQS72sWscLKQcRKR08Qv4OPAycAb6xm4ZJqanlK/93P2oL4nV+t6tU0vzWI52bT/CscPi9J4/d24EJihYdliXn378lctwLxraOk+hjOnJ6XsIYO4HWZ00cS1tEu9gTOxgaIlZhMrGiyI7A9sAkR0gwTgcq/iW/FFxBNJpcivtWdSnwbvnTmfp4HrgT+BlwG3MHI76Kk1rUP0fdkCjEyXCO6iN6R+xP/R/2HHYwlafwuB54i3nyuQCzdlzUTQxipnr4BrJno2L3A6kQT0kmZywxhau884NzURTSpV4FLMhtEALM6sDbxezSLkdBlCtH/YQHRX+ZJoofEPcC8ulYtqVG8HngYA5hCBonnZvXEdUhSS5lFLFM9n/hDO8iSDc22S1WcpLrZDDiDaFzYz8jv/84pi5Ikqca+BVyfuogGdiPwzfwLHQkjSZX5HPEfzwDF/5ZWu+GhpMYwgZgGczgxhaOfGEVA5vwVwMVpSpMkqS6mEqPjVNjLFGjMawgjSZVZN3Na7O9oP7BMHWqRVD+rAB8HPkmsCpHVk3O+G/hsPYuSJCmBGUTQoMJeJp6jxRjCSFJlDsic7ks03ipkiJiyJKn57QQcCryLmHrYM8p+/cCvgFvrVJckSWoihjCSVJlh4EBipMu7KPz3tAOnI0mtYDfgAuL3vgPoHGP/o2pekSRJ6b0IrJi6iAY2DXg8/8Kx3kRIkkY3CHwAuJroDZOvC6cjSa3gSuAWCv+e5xoATgYerXlFkiSlt4DoC6PCpgEv5V9oCCNJ49MHvAO4ncWXpoYIYZave0WSqu15YHvgAZb8Pc/1KnB8XSqSJCm9lyjQeFb/UTCEkSRVxzLAXUQok7tE9c0pi5JUVbOBp1l8GersNkCslCRJUrvYB3gNB3cU0gUsAv4rdSGS1MpmAw+z+Ae0R1IWJKmqtgSeJVY7GGDk93yQmPM9IV1pkiTVVSfwHuL/wdXSltKQ1iCem01TFyJJrW5N4BlGgpgX05YjqUp2BV4hGvTOARYSK6ANZ073TleaJEk1tQqwC/A54AzgBqIfTPbLiF3Sldaw3kk8N/bMkaQ6eCPxTXn2P6bRlrCW1Bw+QgSrpzHy+7w7MQJmGLiNWDVJkqRmtgKwE3AY8GNi8YkXGHlP+zhwEfC/wMeIEaIPAZ9PUWyD+wJwf6ErfMMgqZ11Ex+kahGSvAE4LnP+QJp3RMzjwDWpi5AS+iLwdaLh7tHEm9CsA4k3qXsA59e/NEmSKrIs8aXhesAGOafLZq7/N3AHcCfwT+Bfme35Avd1BrEQxTtrW3LTuYhYLfHA1IVIUiPJzmN1K75J7agTOIXo/fKpIvt116ccSZLKtiywDXAQ8F3gEuApRt7jPQdcAfwIOBjYAZhV5jE+RIwA76lOyS2hl5jC7FRlScqzN4YMxfj8qF1NAM4l+r7skbgWSZKK6SAa4+5CrNJ3KvB3okdhNmx5CbiOmFb7GWBnYOUqHX820RttmyrdXyuYQ0xZXqHQlX57I0mSNGI68HtgY+AdwGVpy5EkCYgvCNYB1gLWzWxrZy6blNnnKeBuYhrRb4G7Mj8/Ru2+WHscuBLYC7iqRsdoNh8gRhg9VehKQxhJkqSwAnAhMbd9DnB72nIkSW1oGSJYWY8IXNbL/Lwa0cdwkGiGeycxvej7mfP3ULhnSz38guiF+FmikX076wU+SKwkVZAhjCRJUrzRnUu8eXwz8HDSaiRJrawDWJUIV9ZhZFTLeoz0ZHmFGMVyL9H89p6cn/vqXO9YziP6qL0DuCBxLam9kxiZ9JvRdjCEkSRJ7W5z4M/Ag8CuwPy05UiSWsTKwJo521o55ydn9nmGGMlyFzEdNjuq5VGapzffC8BZRHPfdg9hDgZ+TvThKcgQRpIktbO3E99WXQHsSXzzKElSqVYA3pCz5YYuUzP7LADuz2x/IUaz3J3ZUk0hqrYTiCBpc+CGxLWkshUxnfmgYjsZwkiSpHb1YeB04BzgYziPXZJU2HJEwJI7kiU7siUbtLzKSNAyN+f8/cATda43hfuBXwNHAe9JXEsqXwLOJkbWSpIKcAnm4nx+1Mo+SyypeQIxN1+S1N5mEj3B9gOOBc4FbgJeZGSp59eIpu3nA98EDgS2p3rLPTe7dYCFwLapC0lgDvH6WHOsHR0JI0mS2kkHcBJwGPAZ4OS05UiS6qSDCEtWB9YAXs/i04eWyuy3CLiPGNlxKfBjYvrQ/cRyzH5BNbq7ge8APwA2AQbSllM3PcD/Ad8mXieSpFE40qM4nx+1ml6iceAiYK/EtUiSqm868CbgvcSIx+8TPVjuIkZo5I5ouRP4A/HB+ePAjsSKRZ11r7q1TAYeAT6fupA6OpKYgjSplJ0dCSNJktrBNKIB79bE8pF/S1uOJKkCvcAqwGrEiJbsqJY1MudnZvYbBp4kPhg/BFyXc/7BzHWqjVeBQ4hlqy8Hrk9aTe1tDXyFCP5eK+UGhjCSJKnVLU8sQb0yMXf/prTlSJJGMZEIWLJBy6qZbTUiZFmBkZEqLzMSrFxBLAv8YGZ7mBj5ojQuAH4K/ArYmFjCuhUtQzT3/wkx4qokhjCSJKmVrQFclDm/Da5YIEkpTWUkYFmNJcOWFXP2fZGY1vIIEZ7/NnP+4czp/LpUrEodDmwJ/IJYLWkwbTlV10sEf88SU99KZggjSZJa1abAn4ilQd8FPJ22HElqaZOA2ZntdUTAkv151czpUjn7P8dIqHItsRrRw4wEL8/Xp2zVyEKi/9pVxKiYj9A6vQY7iMe0BbAV0WuuZIYwkiSpFe0I/A64Bng/sCBtOZLU1CYCKxHTOrOBymwiaHld5vzMnP1fI1YSehx4DLgl5+dsyPJynWpXOvcBuxGrTM0DvpC2nKr5BtEDZgcqGGFrCCNJklrNB4GfEY149wf60pYjSQ2ri+ibtTIxFWg20XfldZnT2ZnLl825TR8xwjAbqPwrc/5RInB5HKcKacR1wH8RjXonAJ+heUfEdAAnAZ8kQpjrKrkTQxhJktRKPk28QTqZmKPdrG/0JGk8uoDlgFlEwLI8SwYr2cu7cm73LDFi4XHgKeCGzOnjeZf7t1XluADYk5hyNov4gqQ/aUXl6wXOIMKXPSmjEW8+QxhJqr5hIimv9X1V8zhSs+sghgd/Hvgc8L9py5GkqssNVlbKnF+OCFSWIwKWFTLXL8fi7xFeZSRAeYyYJpINVp4glmx+ElcUUu1cAOycOb0I2Jt4PTaDFYhVkN5EPIYrx3NnhjCSVF31+maoEb+B2oIYbvpp4GPA6WnLURvpAU4jXn/7ESsxSFKj6yL6qMwkpvvMJAKUmTnb8sQHwGz40plz+4XAM0R48gyxVPM1mfNPEc3Is9fbf0WN4EpgDnA+0SdoH6JfTCPbGfglMUpsW+DO8d6hIYwkVVcH1Q1IRhvpUu3jVGpd4puMfYnmfNneG2snq0jtZgoxz/wtwK7AxWnLkdSmeomVf5YmApVsqLIsEaTk/pwNWJYpcD/PA/8mPvDNJ3quXJu5bB4jwco84KWaPRqpdu4ANgN+APyVmD78ZRqvgf404KvAYcQomE9QpRoNYSRJ5VqFWHJwP2B9Yk5vT+a63szPg2lKU5uZBfwRWINYoeCGtOVIanJLMRKklHt+coH7e4UIUv7NSLDyACMByzM55+dnzg/U5JFJjeUl4EPEKJgTifeVhxNfqjSCvYj+chOI0d1nVPPODWEkqTrGGpWSe33+6JaxrusYZd9yjzMeM4kmZPsCWxIhS7aRX89oN5JqaDViTnk3MTz43qTVSKqnTmBG5nw2AJlCfHM9I+fnGZnLsj+PtW8hC4AXiBEqL2S254hlafMvz57PBiv2V5GK+ynRI+ZbwK+IKe1fBy5MUEsH8E7gi8DWxLT6I6nBSl+GMJI0fsWCkuz5/Os7Rjmf/3O1jjMe1wGb5tx/B2P///F6IrSRamFV4k3Si8DxRKO8NyWtSGo/k4CJ47i8B5jK4oHKUsT/MdOJoH8KMcJyYub22duMZRExCuUFIkR5lZEwZT6xlPJLme3VnH1fZMlQxZEpUm3NBz4K/Ag4Bvgz0S/mf4HfAa/V+PiTgPcRKypuRKx6tBVwfa0O6KoaktrZ3sBZjO9vYaGgo1iQktVBaSHJcJF9Sz1OpfYDzqzgdv3Ef5jTx3FsSVJj66dwf4RSLx8gmsUOE4EHRAgylNkv+3/JQqLf2Cuj3OaFzHWvMhKsOCVWal4bE1+0vJv4vT6faIx7FSO9B8erF9iGGOH9XiKI+T2xyuKtVTqGJKmAvRl/c9tCty80QqXU2462z3iOU6ns8/MR4G/Em9p+4g3ycJGtj/hPTKq2PYgPZOcS87QlSVJrWhY4mGhMPUyEs3OJKULvIPrBdY166xFdxAjtd2RuexER3A4DVwOfonCTbElSDaQKYYoFK+XsW+pxKpX//CwPHEI0Px0iwhZDGNXLwcS34Kew+BKtkiSpta1ILGd9OtHcOvuecyFwH3Aj8YXhHzLb3zKX3UdMT8zufz9wGvEed4W6PoIc9oSRpPErZapQofOFrqPAfVXjONXwNPC9zLY68F/ElKW1iOClt8rHkyBex8cSQ5OPwoBPkqR2M49oIXBW5udpxPvPtYgRMdOInlJTc/Z/gZie+BDRvP9eYjqjJCmhaoyEaWWlPj8bEs1Rn2Dkm4Zv1bAutY8u4hurfmJanCRJkiSpSRnCFFfu89MBvBk4EdiiJhWpnUwG/kjM2941cS2SJEmSpHEyhCnO50epLEM0y5sPbJm4FkmSpKqxJ4wkSWokqwAXAlOAbYG705YjSZJUPa4uIEmSGsUGxAiYAWAbDGAkSVKLMYSRJEmNYFvgH8TykXOIRs+SJEktxRBGkiSl9l7gr8DlwC7EspKSJEktxxBGkiSldBBwHvBTYE9gYdpyJEmSJEm14Oo/xfn8qNa+TLzGjkldiCRJkiSptgwZivP5Ua10AacSDXg/lrgWSZKkunGJakmSVE8TgbOJ3i/vAy5IW44kSVL9GMJIkqR6WZoIXdYHdgauTFuOJElSfRnCSJKkelgZmAvMIJajvjNtOZIkSfXn6kiSJKnW1gOuIt53bIMBjCRJalOGMJIkqZa2Bq4AHgfeAjyWthxJkqR0DGEkSVKt7ApcQvR+eRvwXNpyJEmS0jKEkSRJtXAA8HvgHGIVpNfSliNJkiRJSmlvYDh1EQ0s+/zMSF2Ims5RwBDw1dSFSJIkSZIagyFMcdnn50XgUKArbTlqAl3A94AB4JOJa5EkSWo4LlEtSbBn6gIaVPZ5OQU4Efgw8HHg5mQVqZFNAH5J9IHZCzg/bTmSJEmSpEayBTHSw230bVHmuVoP+AfQD5wETC33yVZLmw5cCjwPzElciyRJkiRJTa8D+BjwLPAosFvactQgVgRuA54ANkxciyRJkiRJLWU54BfESJnfArPTlqOE1gIeAu4CVk1ciyRJkiRJLWsn4F7gJWzc2462BJ4BrgWWTVyLJEmSJEktbxJwLNE75gZgk7TlqE7eASwA/gRMSVyLJEmSJEltxca97ePDQB9wBq6yKEmSJElSEjbubX1HAEPAN4h/b0mSJEmSlFB+496V05ajKugAvgMMAockrkWSJEmSJOXZCbiPkca9nWnLUYV6gXOIvj97Ja5FkiRJkiSNYhLwdWzc26ymAZcALwI7JK5FkiRJkiSVwMa9zWd54EZgHrBR4lokSZIkSVIZbNzbPNYEHiCmk62RuBZJkiRJklQhG/c2tk2Bp4DrgVmJa5EkSWopLi8pSUplJ+CHxLSXLwHfJ5Y/bmarAVsAawHrEqNIliOmX03JbM8DrwALgCeBe4F7gLuAq4GX6110jp2B3wDXAO8napQkSVKVGMJIklKaBBwFfA64HTgIuCVpReWZCuwO7AhsD6xO9L15ELg7c/oMEWa8ktmWytxuKrASEdisnTk/ANwEXApcCFxF/YKpvYEzgF8R08b66nRcSZIkSZJUR+sBV9AcjXs7iREjvwRezWwXAkcAmwM9Fd7vDGBX4vHfQkzXegT4GhHU1NKnibDn2/gFjSRJkiRJLS/buPc5GrNxbw+wHzFtaAj4O3AAEZ7UwjpEAPNI5ni/I0Keauoggpch4LNVvm9JkiRJktTgGq1xbwewL/AQMUXnp0RAUi+dxJSy40HEAAAeQklEQVSn64jnZC7wxircbw/wc2ARMRVJkiRJNeaQY0lSo2qExr0bAD8AtgF+DJxAjExJZSfgOGAT4BTgy1TWPHcqcB6wLdGA9+JqFVhHKwDfAbpSF6KGdT/wxdRFSJKUqzN1AZIkjeISYEMibDiRGAmycZH9JwD7A9OrcOxOIvi5BZhIrHj036QNYCCek62BTwEfIaZGzSnzPmYRjX83JpoJN2MAA7AD8MHURahh7QkcmboISZIkSWpGpTTuPZqYrvMnxjfScwUipHiNCDsa9QuLmcRolgHisZdS5+rEctgPAGvWrrS62Jv495YK8fUhSZIkSeOQ27j3ERZv3LsW0a9lGBgEjqnwGJsB84B7gY0qrrS+DgYWAn+h+KpSGxGP7WYiaGp2fshWMb4+JEmSJKkKliOWhx4GzgdmA5czEsIME71j3lXm/e4IvAT8nupMaaqnTYHHgeuJ6Ub5tgdeJKYzTatjXbXkh2wV4+tDkiRJkqpoJ+A+YtrQECMBTDaEWUCMkCnFHsQqQT+heRu9rkr0iLmHCKayPkCMlDkX6E1QV634IVvF+PqQJEmSpCpbGXiFJUOYYWJkzH3AjDHuYwcigDme5l81cFngBuD2zPlDiOlZ36Fxe9tUyg/ZKsbXhyRJkiRV2ZksPg2pUBBzAaOHK1sSIc5JtS60jpYiQpiHiXDqiKTV1I4fslWMrw9JkiRJqqI5FB4Bk78NAl8ucPuVgGeI/jLNPgIm32yiCe91qQupIT9kqxhfH5IkSZJUJZ2MHb7k94jZPef2XcDfM1sr9UnJtT7wMrHMdivyQ7aK8fUhSZIkSVXSCVzESMgyQPFpSdlGvWtnbv914ClgxbpWXX/7EE15N0ldSA34IVvF+PqQJEmSpBpYC9gPOBW4l5EpSotYfLpSP3A/MY2pD3hbimIT+AnRI6Y7dSFV5odsFePrQ5IkSZLqYAawC/BV4DLgVZYcGXNKsurqbwrRpPczieuoNj9kqxhfH5IkSZKUQBfwJuAg4EliFMz0pBXV37uBl4glvVuFH7JVjK8PSZIkSUpoKWA+8KHUhSTyF+DnqYuoIj9kqxhfH5IkSZKU0JHA3URT33a0OdEXZ83UhVSJH7JVjK8PSZIkSUpkMvAMsH/qQhKbC5yWuogq8UO2ivH1IUmSJEmJHAo8AvSkLiSx7YhVo16XuI5q8EO2ivH1IUlqSO06JFuS1F4OIPqh9KcuJLHLgUeBDyeuQ+3HQESSJAxhJEmtbyNgQ1qrKe14/BxDGEmSpCQMYSRJrW5f4BrgvtSFNIizgLWJRr1SvXSkLkCSpEZgCCNJanXvBi5IXUQDeRC4g3hepFpw6pEkSaPoTl2AJEk1tCqwBnBZ6kIazGXA9qmLSGCYGJGRGxLkj9AodF2xy4qN8Cj3OGPVOdptKn1c1bht/uXDeae5l49123JqkiSpKTkSRpLUyrYHXgJuTF1Ig/kbMR1pWupCMr4HnArMoXZfEOWGAx0UDlhyr8sNAUYLAMYKYMo9zlh15v5cyv7Z09GON9ptR3schcKb0Z6r0R57sduWWpMkSZIkqQGdDsxNXUQDWpr4kPu21IVkDOdsLwFnA3sBSxW5TSVLEBfav1AAkFtTKfuWcpyxrit23+X+nHvZ8CjbeO47//Kx7jO/nlLur5QainGJaklSQ3IkjCSpla0D3J26iAb0PPAUsG7qQjLm5ZyfBuwJnAPMB/4OHA6sWYc6sqMy8qfO5Bvr+kbTUWAr57aFAqlSnytJkpTDEEaS1MoMYUZ3D7FKUiNYkPdzN/HBvgt4C/BNYnWr+4FvZS6rxXuYsabA5E+daVblPobcaUNOF5IkaRxszCtJalUzgWWAe1MX0qAaJYTpBV4tcn0H0JM5/3rgMOBzVTp2LUdx5N53br+UDpY8brXrKHb/5R4rd/9qhFD1ePyqzGrAFsBanbBeTw9rdwyz/OAwk4eGmTQ4xMSeLhZ0dvBqRyevDA/x+KIB/kX8LbkLuBp4OWH9ktQUDGEkSa1qxczpvKJ7ta95wDZl7D8NmJg5zT8/CZha5Pz0zP6FzncRU6NKNd73LmOtuDNaE9lcYwUG+aNGCt1+rBWH8lcIGu3nQnV35J0frZbx3nex5yr3eIVGz1T6+FU9U4HdOzvZqbeTty8cYKWuToZWmUn/G2fT8/rl6VxuOkydCFMmxPbCq0xdsJCpCxbCky+w+p1PsNVdTzA8/2V6OzoY7O3m9kX9zAUuBK4ChtI+RElqPIYwkqRWNT1z6jezhb1MBFWnEh/GJhHByWjni+kDXiGa6r5W4PxjwMLM+Rfzzr8G/A+wwhjH6CdGxPwT+D9ggGi8XK5iH+Sr+SG/lKCmlMtLDYAqeVyl3Hc1jjee+zV4qa5OYKeuTj4CvL+rk663rsvQTuvTs8P6sNGqdPZ0MaGM++sBePFVuOIeui79FxtfdAfr3fk4R/Z2Ma9vkNOAX+KIREn6D0MYSVKrmpo5NYQp7GVgCrBG5vxrwL9zzi/IO/8SEZ4UOj84zlr2ovBIh2Him/Q+4CzgR8BNmev2HucxpXbSA+zd28XR/YO8fss16f/oHHr22AJmTKZrvHc+YzLsunFswIS7n4Szr2bF0y/jC0++wJe6u/jTwCDHAjeM91iS1OwMYSRJrSobwryUtIrGtYD4YNYIy1S/QgQ52fcl+aNeziZtmDbWFCapUXUAH+7t4vjBYVbcexs4YjdYZ6X/9FmqiXVWgq/tAV95Pz1/ugW++lt2ufkhduvp5m/9AxwO3FHL40tSIzOEkSS1qoWZ08nEh3wtbgLFG+LW0yLiPckgMerlbGKaVLW/Na80QGn04KXR61MaG/R08eOBIbbafzs4cnc6Vp1Z3wI6O2D3TWD3Tei55J/whXOZc8vD3Do0zMnAl1lyZTRJankuUS1JalXZETBTi+7VvqbROFO1riRCs4OJ3jAfw2kLUqU6gS91dHDrG2ez+Q3H0vGjj9Y/gMm30wZw/bF0//CjdE6fxKE9XdwPzElblSTVnyGMJKlVZb9hHaupbLtqpBDmV0QD4B/h9DFpPFbo6eLyni6+8r396LrhOLo3XT11SSM6O+CgHeCB79C926bM7OjgUuBo/EwiqY34B0+S1Kqez5wum7SKxjUTeC51EZKqZrOeLv45exm2uv5Yuj71tgg9GtHMaXD+YXSdsi+dPV18paeLuThqUVKbMISRJLWqR4kpLmumLqRBrQncl7oISVWxY3cn/9jlTSx16zfo2WjV1OWU5uCd4Zqv0rn0FLbr7eYKYFbqmiSp1gxhJEmtagi4H1gndSENah3g7tRFSBq3PTo7mLvfHCb87nC6pk9KXU55Nl0drj+WnlWWYf3eLq4DZqeuSZJqyRBGktTK7gbWSl1EA+oBVgPuTVyHpPHZobOTc47Yje6fHEBnV5O+s191Jlx7LD3rvY7ZE3q4BKeRSmphTfqnWpKkktwAbJG6iAa0GbEk9HWpC5FUsS27OvnLoTvTdfxe0NGg/V9KtexUuOwoelafxeq93VwMTE5dkyTVgiGMJKmVXUqM+FgjcR2NZntiqtZjqQuRVJGVerqY+4Gt6D7pQzR5/DJiqcnw1yPpXXoKb5zQzdmp65GkWjCEkSS1sluAF4jQQSN2AP6WugipDlZLXUANdE3s4fzN1mDymR+nq9lHwOSbvQz87Yv0dHTwLuBTqeuRpGozhJEktbJB4K/A21MX0kCmAW8GLk5diFQHDwEPAD8B/gtYPm0549fZydcm9bLJ+Z+mt7c7dTW1sf5sOO1Aurs6ORnYJHU9klRNhjCSpFZ3FrAbMCN1IQ3ifcTS3X9OXYhUB9sTfwPWBX4OPAX8E/gu8B5gqXSlVWRT4IhfHULvis1WeZn22Qb2eysdk3o5l+hhJUktwRBGktTqLgQWAB9IXUiD2Bf4NbAodSFSHVwOHANsCywNvJP4m7AtcD4wn2jgfQIxYq6Rm8F2Tu7lp/+9I7ztjalLqY9T9qVrqUms0tnJYalrkaRqMYSRJLW6PuBsInxod6sC2wHrEX1hpHaygAhgPkeMKJlFhLPXAbsDc4HngX8AXwHeAvSmKHQUB03oYe3j96IrdSH1MmUC/PAAJnR18HVg5dT1SFI1GMJIktrBd4GtMls7O5yYijFMNOa9DdgfmJCyKCmR54DfAgcTweRKwAHAfcBHiDDmeSKcOYJY2n28AcgngHUquN1Svd1865R9mTB90jgraDLv3hS2W5fO3h5OTF2LJFWDIYwkqR08CJwLHJW6kISWAw4CjgTmECMBbgV+BDwKfA1YIVl1UnrzgF8SQcxqwOuBTxNhzeHEtKX5wO+AQ4H1y7z/DYAfAncBn6WM9+GdnXxy5aXp3XubMo/YIo7bi96BAfYC1kxdiySNV4staidJ0qjWBe4gvs2+NXEtKXwT2JF4/LlWAD4JfJxoXvwrYuTQzXWtrnx7Ew1Xz0tdiBrSnpnTar3X7SBGy+xINPvdjmjq+zRwac72YJH7OBg4mRhNMwTcCHyIGHlTzOTebp780UeZsf+ccTyCJrfjcSy64h7O6R9k/9S1SNJ4GMJIktrJqUQYM4eYktMu3gDcTjQlvWyUfSYA+wCHARsCfyfCmAuIpb4bzQrAdxj/9BC1rvuBL9bovruAjRkJZd5CNPV9mAhjLiOm/M3Luc0FxO9g9jXbT/wdOgI4hQhmCjl0hRl869HvMaGnjV/tl98FOx3P4OAQqwOPpa5HkiplCCNJaifLAncD/wP8LHEt9TQXeJYIWUqxAxHG7Ao8AnwPOB14qSbVSc2vF9iSCGV2yJzvJaYeXUqs0nQGMLXAbYeA64EPE8HRYib2cvf/vJO1j91zidu1nVUPY9Gj8/kacHzqWiSpUoYwkqR2cwAxNWdD4MnEtdTDfsS37GsDT5V52zWBQ+A/w//PIAKZJT4oSlrMFGIZ7B0y2yYU7wHTT4Qxnwe+z8iomI2AW+79X3iDHZs49ndw/B94aGE/a6SuRZIqZWNeSVK7+SnRG+YcWn8qy7rA/xFL8pYbwECELYcBryOW7N0NuAf4PS5xLRXzCnARMdVoc6LxdX+R/XuIKYHfIVZlej1AJ+y36RosMoAJ+2wDi/pZnXhOJakpGcJIktrNMNHUdW3ig1Grmgz8Gvgz8ONx3teLwElEb5k9gaVxiWupHNsC3SXs1wlsQSwlf3BvN3vusbm/X1lrLAdrr8Qi4N2pa5GkShnCSJLa0Tyi/8IRlN4npZl0ESN9JgIHVvF+B4Hf4hLXUjl6iRCm1DYAPcTv7vcWDrDy9uvVrK6m9PYNmTCxh7enrkOSKmUII0lqV38FvkRMT9o5cS3V9j0iKHkftWumezPRb2ZVYtWpjxMrw/yM6H8hKWxJhCoQQeYioI/CqyG9BjwO3AS80NPF0GZ2P1nMjutD3wAbA9NS1yJJlShlWKQkSa3qBGAG8DsiiLkqbTlVcQIRjuxC9L6ptaeAY4DjGFni+iYaf4lrqV6yy1T/GXgmZ/s3MB94OnP+38DCnNudPmdd9u3q9EvTXNuuDUPDdAFbEWG6JDUVQxhJUrv7IrAScDGwF/CntOVUrAv4AfARom/LFXU+/iJiVNFPGVni+je4xLV0PxWsSDqxhw3Xn+179XxLT4FlptL33ALWxRBGUhMyWZcktbthorns6cSImI8kraYyE4HziIbDuxGjT1K6lGicuTbwR+CrxBSL7xLLXksaw+AQa6+zUuoqGtO6K9FB/H2RpKZjCCNJUvRmOJRYhvmnxMiNZlmR5A3ANUTjzx2IET2NIrvE9Wxc4loqx8z+QaatZavrgtafTU9PN+unrkOSKmEII0nSiOOIqTwfIoKNN6QtZ0z/BdxITAXaErghbTmjegmXuJbKsSLAikulLqMxrbgUdHWycuo6JKkShjCSJC3ufGJ1n0FiCeYjiSVmG8kqxNSps4hpVG8BHkpaUWlc4loqzXSAaZNSl9GYpk0ChlwdSVJzMoSRJGlJDwHbAF8HjiZGbLw9aUVhEvAF4C5gXWJFp88A/SmLqpBLXEujmwowbeJYu7WnaRNhYDieI0lqNoYwkiQV1gd8gwg77gHmElOU3kUFK52M0zTgCCIcOpqYNrUhcEmd66iF7BLXqwCfBDZiZInr9xKrPkntZirAdEfCFDR1IgwOMjl1HZJUCUMYSZKKewR4D7A18Ayx2s8tRCPf5Wp87I2JXioPA0cBZwKrA8cTIVEryS5x/SZgR+AFYonr+4DDyUzPGMP7gXMAO2mo2S0EeLXVfsurZFE/dHbGcyRJzcYQRpKk0lxLLLu8MXAd0cPkcSKUOYjqLL3cTUyD+jJwOzFl5x3At4hpO18ggqBWV+kS1wcBHwSuApavcY1SLb0EsMCYoaCXF0JXJ6+mrkOSKlHv4dSSJLWKCcDuwF7A9sAyRIPZ64npS/cQSzT/G1iQsy1NTC+aCqwErEWEDesBW2Uuz05/+iWx+lG7mw58DDiYCKP+CJxChDVZawL3Eu9t+oEniH+Xh+tZqFQlGwM333cSrGmcuITjfg9f/z2PLOxntdS1SFK5ulMXIElSk1oEnJfZOoleJtsTS0XvSjTMLaWjw7+J0OUu4OfE0s1P1qDeZpZd4vq7xAiZw4jn6XbgZOBsYnpYP7GSVQ+wMjFiaTviuZWayfMAz75sCFPI/JdhGJ5NXYckVcIQRpKk8Rsipg7dnHNZBxEELEeMbpkKTCE+XGVHxTwJPFfXSptbdonr3xIrKB1GLHH9TWK0TO5S4j3E6KRrgLcBN9S1Uml8Hu3spO/+p+ndshoTHVvMvU8xuKiff6WuQ5IqYQgjSVJtDBN9TB5PXUiLyi5xfQRwGrBLgX26ifDr78TopEsL7CPV2hXAtsCDxApnDxFTFx/JnD6W2XLb8A71dvHI3U/yhjrX2hT++TgDwN2p65CkShjCSJKkZjafGBUz2lLWXUT/nrnAnsAf6lSXlPVy5nSNzDZAjOrqYWSRjGFies2jwAPAo4v6GbztUYaxh+Ni+gfhiefoJXpASVLTMYSRJEnNbFdghTH26SQ+yP4W2J/ovSPVy5+JKXHZ993dLPkevAOYmdk2BjqGgSvuZqDAvm3txgdhcIgOoueTJDUd/6hLkqRm9g0oabRAR2Y7k1ihanmqs6y4ausXxGpYzexaynvPPUg07D7xhVc56cFnYI3lalNYM7rsTpjYw2ML+3ksdS2SVInOsXeRJElqSJ3AOiw+paOPWLmqL/Nzvg5iRaUjielJalx7Ah9MXcQ4dRGvw/4S9h0gmnx/l1i6/pTuLhZcdmcNq2tCF99Bf18/F6auQ5Iq5UgYSZLUrIaIqUgrEatQLVtgWz6zzzLAUsDEnNt/HjixjvWqPGelLqACs4AtgK2BbYDNiVXRFhI9YEYzDNwGHJA5BaAT/vqX29jtgO18zw7w8kK45j46h+Ci1LVIUqX8gy5JkprZ05mtVBOJvhuPAU/UpCK1iy5gA2ArInTZmhjBMgzcRyyPfg5wNbA38FkWX0YdYoTMIiIQPJUIFv+jb5Cf/fEmdn/xVZgxuXYPpFn89gYYHuY1os+OJDUlQxhJktROFuKy4arMMkTQsmXO6TRi9aMbgfOI4OUa4Lm8217D4gHMIBHi/B44DJg3yjEv7OjglV9fx/QDt6/So2hip19O39Aw5xDBlSQ1JUMYSZIkaXGdwHrAm4mRLlsR/Yc6iKWRrwW+AFwF/JMIVYq5Nuf8ABG6HMjY02r6Bob42emX8/EDt19iFE1beWQ+XHkPPcPDnJm6FkkaD0MYSZIktbsZjEwp2pro6zIDeAW4AfgdsSTyNcTKReXKvc23gK8Dr5Vyw6EhTr7hAT517f2wVRuv53XShQxN7OHm1/q4OnUtkjQehjCSJElqJ53A2ow0z90683Mn8CDRw+WLROhyGzFypRo2JqbD3V3m7R7s7ubXXz2f9114RHuOhnnmJfjRJQz3DfDl1LVI0ngZwkiSJKmVzWBkxaLsNoMYiXIjcAERvFwPPFXDOm6t9IZ9/Xztojv4wK2PwEarVrOk5vDtPzHc2cldwF9S1yJJ42UII0mSpFbRQfRuyfZxeTPR26UTeJiYTnQ0EbpUc5RLrd3V08mZ//1T9rn6K0zo6EhdTv3c9xScPJeh/kEOTV2LJFWDIYwkSZKa1TQWX61oa2IVo9eAm4jGt8cQ4UstR7nUXN8gn7/5Yfb4+ZVM2O8tqaupn0+czqKuTi7oH+Sy1LVIUjUYwkiSJKlZrMXIlKKtgA2IpZ4fJUa3HEsELjcD/YlqrJVn+wb4zCE/4wdv24DelZZOXU7t/ewKuOIeR8FIai1tNJhRkiTpP4aBfYCzUxeiUZ0NLAdcxshIl5nAImKUyzXE0s/XAE8kqrHeOib2cOXGq7HZFcfQ29WZupzauesJ2PgoBhb18yngx6nrkaRqcSSMJEmSGtVbiR4vVwPHESsW3UwEMe1oeGE/e9z0EP86+jx6jt+rNb9QfbUP3vMdFg0P82cMYCS1GEMYSZIkNaJhYuWiPVIX0mDm9Q2w1wl/ZO76s+nYZ5vU5VTX4BDs9T0GH53PM30D7J+6HkmqthYexChJkqQm164jXsby1+FhjvrIjxi6+I7UpVTXwWcyNPc2Fi7s513AS6nrkaRqM4SRJEmSms8JQ3Di7v/L4FX3pi6lOr5wLpx2GQMDg7wDaLF4SZKCIYwkSZLUhIaGOHJgkHN2PI7BP92SuprKDQ7BQaczdOKfGBgYYk/gitQ1SVKtGMJIkiTVxnDqAtTyhgeH2K9/iB+++ySGzvxH6nLKt7Af3v9dBs+4nL6hYd5F9AGSpJZlCCNJkiQ1r6GhIQ4ZGuKY/U9l+OAzGV7Un7qk0tz3FGx+NP1/uYWXB4Z4K3Bx6pokqdYMYSRJkmqjJZcPVsM6Dtjz1Et5ZfNj6L/vqdTlFHfO1bDRFxm4dx539A+yCXBD6pokqR4MYSRJkhpXK0xpaoXH0CzOHxhkw3ue5M43foHBb1wAfQOpS1rco8/Cu09icO//Y3jhIr7fN8BWwEOp65KkejGEkSRJGttwzulw3uX5l+XfptR9C913oWOOt678/ce6j1JqHe26Uh6DquuhvgG2WNTP0UefR9/6n6f/ottTlwSv9cEJF8Ban2Vw7q08Auw8BIcDTTJ5SpKqwxBGkiSpuNwgoSPnfPbn7FYoQCl13+zlubftyDktNLWpkrryj5d7Xf4x8n8u53Hk1l7sMag2+oBvDA6x1sPzuWiXb0bvlT/fAsN1jsJeXgjf/CPMPoT+L53HokX9HNM3yLrAJfWtRJIag/8ZSpKkdjQM7AOcXcb+HXk/F5K/T6EQJHff/Psd67jjravQ/eWHOIUeQ6X3XezysZyVOd2ngttqcVt1d/GlgUHeuf5sBg7agZ4Pbg3LTa/dAW95GH5xJZx+OQOvLqJ/YIhTgJOAZ2p3VElqfIYwkiSpHVUjhBnrfVRuCDPavrUIYcq9v3JCmFIeM2XWNBpDmOp7Uyd8qrOLvYeHmbTzhgy9Z1O6d1gf1lx+fHc8MAjXPQCX/BPOvYa+u5+kd0IPDy7q58fAj4Hnq/EAJKnZGcJIkqR2VIsQZrR9iu1bjxBmrCBlPCFMsdEvUNpjHI0hTO1MAHbv7mLvDtixf5BpK86g781r0b3OynSuvWKEMrOmw9QJMHVibM+/EtOLFiyEJ5+He+fBPfPg9sfov/Y+Ohb20z2xl4cX9vEH4JfAjYkfpyRJkiSpAQwDe5e5f/7Po/WAyb+s2L5jNcMdq4NHuXUVapBb6v6l3HehnyvtQnIWI0GMaqcT2AT4bFcHv5nYy11dnSxi8SbLBbeeLp6f2MN1xEiXDwMrpXgAktRMulMXIEmS1OAKNcDNjvAoNP0mX7F9S7mf0a6rpK786wvJv66cxzxao99SnielMQTcDNw8OAyDfUD8O60MLAdMzWxTiClFCzLbk/2DPNc/mKJkSWpehjCSJEnFjRYclBMojBXSVPO6seoaLcyp5LbVqEeNZxh4PLNJkqrIJaolSZIkSZLqwBBGkiSpeirtfyJJktqAIYwkSVL15Pd7aQbNUqckSU3PEEaSJEmSJKkODGEkSZIkSZLqwBBGkiRJkiSpDgxhJEmSJEmS6sAQRpIkSZIkqQ4MYSRJkiRJkurAEEaSJEmSJKkODGEkSZIkSZLqwBBGkiRJkiSpDgxhJEmSJEmS6sAQRpIkSZIkqQ4MYSRJkiRJkurAEEaSJEmSJKkODGEkSZIkSZLqwBBGkiRJkiSpDrpTFyBJkpTIWcB7UhehUe0JnJ26CEmSqqkrdQGSJEkJTACeSl2EirqTCGHuTV2IJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpNbz/7X4oxpnKt3rAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "net3, im3, fm3 = pm4py.discover_petri_net_alpha(df)\n", + "pm4py.view_petri_net(net3, im3, fm3)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABGEAAAHdCAYAAAC9oGSbAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd7xjdZ3/8dctc6c3mBmKSJemCChid2mCXXTVXVFxXQUVgcW69l27awOxoSAuiq679tVFRQXsqCjShQEpAgPMDDPD9Nvy++Nz8ksmk+Qm9yb3e5K8nnkcTsrJySeZy70n7/MtIEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnKi77UBUiqqx/YDVgKzMuWOcBaYCOwAbgbWJ2qQEmSJElSYwxhpPwYAB4FHAUcAeyXLTMbeO5q4GbgBuCXwGXAne0pU5IkSZI0GYYwUlqzgROAFwFHAouA24HfE6HKjcBfgfuJVi8bs2UxMJdoGbMrEdbsDxwIPAGYD9wK/BD4GvDb6Xk7kiRJkiRJ+XIYcD7RrWgY+C7wz8BeLdj3IPBY4O3A1UAB+AvwDmCHFuxfkiRJkiQp954A/B8wDvwZOI32ByMHAx8HVgHrgY8CO7f5NSVJkiRJkpLYG/gB0Srll8DTE9QwD3gjcA+wCXg3MCtBHZIkSZIkSS03E3gXEXpcDxydthwggpc3E61ilgPHpS1HkiRJkiRpah4GXEmEHW8BZqQtZzsPBb5BdI36FI3NwiRJkiRJkpQrLwTWAX8guiLlWXmtrRgYWJIkSZIkaVq8m85rXfIw4I/E4L2PTVyLJEmSJElSXf3AOcSU0y9LXMtkzCS6J20gzcDBkiRJkiRJE+oDLgQ2As9MXMtUDACfIYKk5ySuRZIkSZIkaTsfJwKYJ6YupEU+QLyfPMzmJEmSJEmSBMBbga3AMakLabHPAmuBg1MXIkmSJEmSdDwwBrwkdSFtMAB8G7gVWJi4FkmSJEmS1MN2Be4H3pu6kDaaDVwNfDN1IZIkSZIkqTf1AZcDlxEtRrrZAcB64LWpC5EkSZIkSb3nZKIVzC6pC5kmLwPWEa1/JEmSJEmSpsWOwCoimOglFwNfS12EJEmSJEnqHecRXZH6Etcx3fYFNgNHpS5EkiRJkiR1v4cDo8AhqQtJ5MPAH+m9AEqSJEmSJE2zi4D/TV1EQkuBjcAzUhciSZIkSZK6197ACHBE6kISOwv4deoiJEmSJElS9zoH+EXqInJgd2AMeGLqQiRJkiRJUvcZImZEelXqQnLip8DnUxchSZIkSZK6zwnAJmBB6kJy4iRgDTAzdSGSJEmSJKm7fAv479RF5Mh8IpT6+9SFSJIkSVKn6E9dgNQBBoCjgUtSF5Ij64nBeY9LXYgkSZIkSeoejwEKwJ6J68ibtwPLUxchSZIkSZK6x1uA21IXkUOPI8Kp3VMXIkmSJEmdwO5I0sQeA/w+dRE59EdgFDgidSGSJEmS1AkMYaSJHQDclLqIHBohWgjtn7oQSZIkSeoEhjBSff3AvhjC1HIThjCSJEmS1BBDGKm+PYBZOABtLbcA+6UuQpIkSZI6gSGMVN+ibP1A0iryaxWwQ+oiJEmSJKkTGMJI9c3L1uuTVpFf64H5k3jejsBgi2uRJEmSpFwzhJHqW5CtNyStIr8aDWFmAccAHwauIVrQnN7GuiRJkiQpdzwTLdU3K1tvSlpFfm0FZle5vx84BHgq8DTgicAQMJytKVtLkiRJUk8whJHqK7aAWQCsS1lITs2j1FVrT+BYIng5jhhPZ4T4PdOXbVMMXkaJ1jCSJEmS1DMMYaT6DGHqW0q0hFkJLAHGsvsHsvWMGs8bxMGOJUmSJPUYQxipvgez9by6W/WuvYnWLUuy2wN1tq30d8AcYE22PFB2faSFNUqSJElSLvRNvInU03Ykus0cA1yauJY8+jywH3AxcCawCzBOY2HMaqKFUbXWMhvYNpSpDGnqPVaY9LuRJEmSpDYyhJEmthp4B3Bu6kJy6OfAdcDriODlecCbgMcSrVlqdUcC2Bm4j2hltDhbdii73sjtajO8raXxwKb89oNV9iVJkiRJLWN3JPWSpxFdYO4B7gLuBe7O1sN1nncjcEDbq+tM+wHfzK6PZde/CRwOvAF4IdEypVoYUxwTZkO2/G0Sr7+I2iFN+fWHVWy3sMq+xtg2lFlLBDNriPGAypcHK24XtxmfxHuQJEmS1CNsCaNecgkxc0+1FhpriMFlb2P7kOZVxFTVT522SjvDYiKwOA74SY1tdgFOBU4juh71ZcsmYO401FjLABO3uFmYLYuypXh7AaWpyyttoHpgszZbyu9bn22/JlsXb9siR5IkSepShjDqJacBZzFxC7BRolVEP6WwZivRbWa0bdV1nucQrV52oDSLVC2zgBOJrkoHZvd18u+fmZRCmWJQs7DKsqDs+uKK+2fW2f86SqHMekrBTXlYUy28WUupZdHG7L4xJEmSJOVCJ38Jkpr1SODqJrYfI1pM/Ap4EvB44Io21NWpPkl0O3pik887mui2c3mrC+owM4D5RIAzP1vmVdw3L1uK4c28svvLn1erZQ5Ey69iWLOFUmizuez6FiKw2ZhdX0e0VtpCBDubs+trsvXm7H4HQZYkSZKa4Jgw6iXXEV865zew7SjRFekVwGXALcBRGMKUOwr43iSe5yxTYYTozvXARBs2YJDtw5s5RHAzi+j6VexGNa/i+i7Z9eLzZmWPzyWmH69nlPh/qhj0DBNBzlZKIc5mSiHOpuyxjdm2G7Lnrs/2VWy5Uxxfpxj0FLen7DmSJElSx7EljLrdIPBo4MnZ8lSiG0i1WXUgvgj2A58A3k18eQT4GNHi4/HtLLaD7AMsB44Arkxci9qnnwhy5hDhzCJgdnZ9MdGaZx4R1swl/t8qbju7bNs52WPFYGcepZZAg0To08i05pXKA5likFN5vbxLVvngyeXXa7XqKYZItRRDpVrKwyMplVo/37UCzeL/M8XHJ/o5lyRJTTCEUbeZTUyP/BQidHk88cXvfqJb0SDwdKrP1jMG/AX4J7YPFg4FrgL2B25uQ92d5t+AFwEPT12IuspCIvhZRPx9WpzdXwxrYNvApvx68bmV14v7omx/5df7sm2qKX/devXWUv7aUqcrhpLFFm/FlnDjRKgJpS6LGymNbbUxW4pjVhVvrym7PtG4YpIkdY1qB4dHAL+b7kLU1YapPwjpVCwkxmt5EhG8HE6cab8D+CXwCyJ8uTHb/nHAbyv2UTwT+O/AR6g9+O7VwPeBd7am9I7VRwRRFwAfSlyLJKm2YlfFamqFhMVwsRhCFluwFVu2FVu8FVvAFV+j2HKuvNtjsWvj3OyxeoohzZoJlrVV7rOljiSpY1T743si8FXiLLc0VScCJ9C6s8E7Uepa9BTgYOJM+I1E6FIMXu6s8fwZxJm5Yig0ToSOrwBumuC1TwfeDOxLb3cxOBL4MdEl6a60pUiSOsh8SqHMIiKsKd5eXLaut1Qbq2oTEcY8AKwC7svWq4CVRGvYlWX3rcKZ4yRJidQLYWxCrVaY6s/TXpQClycR3YHGiFYpv6AUvKxsYp9XEzMlbSKmTD6XxmZ5mQ3cDrwV+FITr9dtLiFaGp2cuhBJUs+pF9TsACwFlgFLKpbK45BVFcv9wL3Z+u5svSJbtrTzDUmSeouzIylP+oCD2Laly25EM+M/AN8iuhb9imjNMlkfAl4KvIbmWnJsBs4iQpgLKQ3q2UuOIGZFOiB1IZKknlQcR6aZv9/9bBvILGP7oGYf4Allj5VbS4Qx5QHN3USLm3uzx+6juRNCkqQeZUsYtVu9n6dB4DCihcvfEbMPLSEClt8QYcsvgN+Tn7NQC4FbgTcSQUyv+RFxoPny1IVIktQmQ0QQsyvRDXpnYJdsvWvFY7PKnreVCIfuIbpF35PdLt73NyK0sSuUJPUwW8JoOs0iWlKUz1w0n2gG/Cvgg0TXoj9Te3Dc1NYBbwc+DHyPODvWK55H/JsdmLoQSZLaaJhSeDKRHYhwZmfgIUQL3ocADwWOzq7vROlk1BgRxPyNaE1TfJ27ieDmdqJlTS+2tpWknmBLGLVb8efpV8BjiAFx7wJ+Tqmly400NiZLXvQTLXX+QAzW2wvmAjcQ3bHOTlyLJEmdZIhoSbNbtuwK7J6tdyMCm52JyQOgFALdmS23lV2/I1s7I5QkdShbwmi6/AU4jwhdbk9bypSNA68lukn9gJgpqNt9iph54tOpC5EkqcMME+HJHXW2GSBCmT2yZfey9eHAnsTU4EUr2DaUua1iMaSRpJwyhNF06baZdK4iBvj9CnAo0de7W50EvJgYsDCv3cQkSepkY0QXpb8RLYWrWcK24cye2fWjgH8mukZBtC6+hwhj/pott5Wt76GzWiBLUlcxhJEm7z3E2DZfB44lznR1m4OBzwJvIIInSZKURnE67T/VeHwhsDewV7YUrx+RrWdm221l21YztwK3AMuJoMZWNJLURoYw0uSNEWPeXAVcALyM7jqztBtwMfB/wOcS1yJJkupbRxyTVDtp0kd0dyoPZ/YmTrY8lxhAGOI45i4ilKm2bGpf+ZLUGwxhpKlZATwHuAT4JHBG2nJaZkcigLkLeEXiWiRJ0tQUiBmY7qZ6d6c5wL5VlqcRJ2WKE3bczbahzHJi3L/ldGeLYElqOUMYaep+Dzwf+CGwkZjCupNbxCwl3gvEwZdnvSRJ6m6bgGuypdIsqgc0xxIzO/UTrYNvA24iQpmbsuVGYGWba5ekjmIII7XGpcTgtV8jQoxXEwcknWZPYranceCpRNNmSZLUu7YA12VLpdnAfsD+2XIgcCRxHDQv22YNpUCmPJz5KzDSxrolKZcMYaTW+TbwTOA7wDLgpcCDSStqzuHA/xJTXT4TWJ22HEmSlHObgauzpdJDiWBmPyKc2R84Jru/jwhgbmPbcKbYiqbbj0EGie7sA6kLUS5cQcyMph52Ip3dlUL50os/T48m+kzfTAQbedcHnE6c6foBMDdtOZIkqYvNBQ4jWhC/h5hl8iqiS1QhW1YCvwTOA94MPBt4GN1zAvkESu/VxeUC1FO65ReZlCd/BA4FLiIGv3sbMWjveMqialgGfB54FvBO4CPEHwNJkqR22Ej1WZz6gD2IljMHZMv+wNMpzd40TLSWuR64FrghW99OPo+zapmTrfvqbqVe8FVK08erRxjCSO2xkjhoeDvwYeAlwKnEIL550A+8BvgAMe7L0cQZJ0mSpBQKRJhyOzHrZLn5lMaceTjwCOAUYiw7iGDnRkrBzDXZ+q72lixJrdHp3Uemq/ZO/IwaqbnV76vTf55a4SBi4N4xornhXmnL4elEa52twH9QGjhPkiSpk8wHHge8CjgL+AmwglI3jzXESaZzgdOAo4AlSSrdlsfHKvpqtqjHdfovhemovfiLvZM0UnM73len/zy1Sh/xWdxCDER3IXE2Z7r0E/2PryT+PS4mwiFJkqRusyPwd0Qr5M8BPwceoHSsex/wU6K7+CnA44GF01ifx8cqMoQR4C+FRnXiZ2RLmPQGiVmTbiD6Lv+K+OO/uE2vdyDRHeoOoiXOb4iZCIba9HqSJEl5tStwHPAG4Hyim/h6SuHM7cSJqo8Qx2uPBGa0oQ6Pj1VkCCPAXwq1VH4mnfgZGcLkRz9wLNEiZj0xM9FPiDFkHsfk/+AvJqY8PBu4jvjsbwHeC+wD7E60xPmHKdQuSZLULfqIruLPBt5KTKxwFdFtu5Ct/wh8ETgTOBJYNMXX9PhYRYYwPaiVA/OW/yLpq3FftW1qPbd4f7Xn1dq+/Dn1nj9R3ZUKFetGam/ksfLaan1mlfuq3G4q76fZbWq9ppo3TjSD/SnwOuAZwDHAK4jBckeJFis3ESHKSmBD2bIIWECM57ILMVjdAcBO2XN/B3wbeDXR+qX83/PbxEHEf7fx/UmSJHWCAnHMdRvw/bL7ZxBdtx8JHELMfHkCsEP2+O3EAMB/zpZrgL9iuCJpAq0IYWoFE31MHCyUb1t5u1Dl8UKV29VqKb9ea/t6dVfqq/HYRLXU2ndlbdVqrbw9URhV7TUmeo/1/khU23/lvtQaG4D/yRaI1ipHEMHK/sBjgaVE4FJc1hAtaDYA9xBTNX6b6OZ0RXZ/LWcBvyVa3FzR2rciSZLUFUaAq7PlK2X3P4QIZA4lwpl/BN5JtHJ+MNv+mmx9FdEyecu0VS0p99rVEqZSrRCj3j5qPafePipbljT7ms2q14qkWt3l4VS1gKXecyZTW7OfX619aHrdmS3tckW2vB67JUmSJDXj7mz5v7L75hEtZg4GDgMOJ1o3zyFaKC+n1GLmz0y9O5OkDtaqEKbRL/b1gobK69OhG1t1TDa0SbVfpXEW0f90d9ob+EiSJHW7DUT379+U3dcP7Eu0mDmMCGnOIFrSjE93gZLyrdmBoqptW6ubUDPbTvRYI/trZt+17ptMLbX208x7m+xzCmVLvX3Ve36tfU6GA4/l0yARvnw0dSGSJEk9ZCnwHjw+VnBg3h7U36L9VAYFjY5rklq9uqdiovFaWvWc4jaV25ePxyNVMwp8AXgV0YRWkiRJ7beSmHhBUo9qRQhTa9Dc4n3VVLasqGy9UXm9kXXlfRNtX6/uWqrVWauWvortq30ulZ9PvefUqqHaYMHVWsM0+/lVMtTpPucCM4k+y5IkSZKkNmtVS5harS/q3ddX5XatZaLnVdt3s9s38x4b2fdk7m/mscptKlvBlA8AXG2/U/081PlWARcR/ZP9N5ckSZKkNmtVCCOpM50N7AMcl7oQSZIkSep2hjDdbSrj3EzULUrd4QbgEmK6akmSJElSGxnCdI9a3Zemsj+7JvWGs4iWMAelLkSSJEmSupkhjKRLgBuBM1MXIkmSpNzL02y37VRt5lppygxhJBWIsWFeCixJXIskSZKUmgGM2sYQRhLELElbgNekLkSSJEm51gvDFVSb3VZqCUMY5c1S4EjgVOA9aUvpKZuBLxKf+1DiWiRJkiSpKw2mLkA96yHAgdnycOAQYmDYBRXb/ds019XLPkWMC/OPwJcT1yJJkqRtlXeJ6atxX7Vtaj23eH+159Xavvw59Z4/Ud21THY/teqv/JymUlu959Tav7QdQxhNlzcCBwCHZut52f0j2XpGlef8ehrqUsmdwLeB0zGEkSRJyotqX/CL4UetMKby+fWCl8pQpfJ2tVrKr9favl7d1UxUR639VNvnRMHSRPusp9q+ivdLEzKEUbstzdYfA8bZvgtctfAFYBi4ql1FqaazgN8CjwOuSFyLJEmSSuoNDlsMBpptaVIrwJjodSb7mvW2Kd9PvX22Y5DcZvdZK4iRJuSYMGq3ldn6umzd6C+rfuDa1pejCVyRLa9PXYgkSZL+v74qSzW1WmhUtiyZLo3W3ch+ar2H8sdatc9mpPhc1cEMYTRdDgFOBu4FxhrYfpAYn+SLwJuBZwJ74i+46XAW8Hxg99SFSJIkqaqJutZUeywPx9GTbT0y0XsoPtZMGDPVz8XWMJoUuyNpuowDFwD/BbwBeAfx81erO1IBuAzYFzieGMgXYCPwF6JlzY3ADcD1wO3Za2jqvg3cQ4wN8+bEtUiSpOnXD+xGdCufly1zgLXEsdgG4G5gdaoCe1Cj46M02kVoukw0dku9bZlg+2rPmygYydNnox5lCKPpthn4ABHIfBB4OdEypvJn8R7gdWW3FxIzKT2CGNj3EcBRlFprbKYUyhSX64HbaKzljUpGiZmS3kFME74hbTmSJKmNBoBHEcdVRwD7ZcvMBp67GriZOO76JXEC7c72lNnTKlt41Jr1iCr3NzrAbrWBeusNvNvI8+vVXamRbeu1/mlkVqhq+621z0Y+i1r7lOoyhFEqK4BXAOcA/wE8lQhLBohfbpWD8q6jNF5JuflsH86cAuxB/ELcSoQzNxKhzF+Ig4Wbs8dU3ZeA9xL/Rp9KXIskSWqt2cAJwIuAI4FFRKvi3wPfI46b/grcT5yM2Zgti4G5RMuYXYmwZn/iWOxTxHHZrcAPga8Rg/2rNep1w5novkZDgkaeN1GQ0sz2U933RI9N9NrN7NOgRW11IvZtU+s0+vP0NCIYGcu2f/8UX3cucDjR0ubDwPeJg4LRbP9jxMHFj4BPAqcCx+I4KOW+ACzHsaMkSeoWhwHnE92KhoHvAv8M7NWCfQ8CjwXeDlxNHG/9hWhZu0ML9t9N/L7VPab67/jVbFGP85eCWqmZn6dBIgwpAE9vUz0zgYOBvwfeRrT4+C3RnLbYBHID8Cfg60RrkBOJQGdBm2rKq4OIcXaem7oQSZI0JU8A/o/4u/5n4DTaH4wcDHwcWAWsBz4K7Nzm1+wUft9SkSGMAH8pqLU66edpCfAk4JVEF6nvEM1xt1IKaO4GLgXOJQYYfgYxeHC3du37EXBJ6iIkSdKk7A38gDiG+SXtO8lVzzzgjcR4f5uAdwOzEtSRJ510fKz2MoQREP1DCy4uLV462SARtDyTOIj4PDHw3D2U3t8w0Z3qR8BniIDmBOIs0JzpL7lljifOmh2UuhBJktSwmcC7iNDjeuDotOUAEby8mWgVsxw4Lm05SRnCqMgQpgdVG2BoEHgOMUCq1Ap30b0Dsy0gBqV7GLAPccZpn2x5SNl29xJj0hSXv5Zdv38a621WHzEd+K+JAY8lSVK+PQz4L2LA3PcBZwEjSSva1kOBTxBdwz8DvInemyzhROKLt4O9qhjAvCRpFZLUJWYBDydCzTOJWQMuJgapK+/itJ7on/0tor/0q4nZovYmH92cTibOpC1JXYgkSarrhcSMkn8gjiPyrLzWVgwM3ElsCaMiW8JI0jTpJ6bRPgp4FfAh4L+BK4E1bNvN6RbgZ8Qgwv9OTBt9DHGma+Y01DobWAm8cxpeS5IkTc67iS7En2J6jg9a4WHAH4nBex+buJbpZAijIkOYHpSHs+xSLxoH7siWy6o8vgOlbk17E4HN7sARwJ5sO87MCuBvwJ3ZUtxv8fbqKda6mRgH51TgI0QwJEmS8qEfOBt4DfBy4Ctpy2nKcmLmpouIE04vBH6YtCJJajP7IUqdaQkRyjyUCGiKIU1xKZ8CciPbBzN/A27Prt8NjE7wersT49e8Evhyi96DJEmamj7gP4EXAC8ipqHuRAPAOUQX6BcA/5u2nLZzTBgVOSZMD7IljNSZVmXLn2o8PottQ5ndiRY0DyO6Mj2UUlPlMeA+okXNPdl6Rdnte7P1d4ixbQxhJEnKh48RocVxxCD6nWoMeB2wlhhU+NnApUkrkqQ2MYSRutMWYsrsm2s83ke0lim2oNkF2DVb7wM8Kbu+uOw540ST5+XATURwc3e2vouY5elv2douS5IktddbgdOAZ9DZAUy5dxDHHt8Gngxcm7acCT0T+AFwBXH8swp4IFvWZOvVZfc9QEzIIKmHGcJIvalAqbXLFXW2m0UpoNmZOOM2QhxkPIQYo2YnYGnF8+5n25DmHmJw31XZ+v6y25tb8YYkSeohxwMfAE4ixlLpJqcTxxzfBR5FzKCUV/Oz9eOy9SjRqgfixNWMKs8pYDckqaf5C0BSM15E9F3dhxhPpmiICGN2K1svK7u9KxHULGH7GRs2EqFM8QxSMahZTensUfFsUnHZ0PJ3JklSZ9gV+DNwLjEjUjeaTZwkWk50t8qrJcTxy2S/U/ldTI4J04P8H19SMwaJAXr/B3jzJPcxnwholhEHL0uIgGanstvFZQdgUZV9DLNtKLMmWx4sWypvF5d1RJ9zp4aUJHWaPmJWxQJwLKVWF93oAOAPwFuAzyWupZ5rgIMb3HYMuIGYDeo/8LuYDGF6kt2RJDVjFPgU0Wf7PUyuRcr6bLm1we37iTCmcllccXtHYC9gQbYsAhZmz69Vx5ZsvQHYSgQ0m7P712b3bSTCm62U+nFvILpljWWPAWzKtilkzy3aSO0xcoqvJUlSI14FHAQcQncHMAB/AU4FPg18j+janEe/BvYnWgXXMkocj3yYOH564TTUJSmnTF8lNWsRMQDv24lAJu/mUQpmisvibD0bmEu0zpmZ3Tcnu744W88hwpyZ2b7ItjfEVqs1G8qtqbi9lQgDa+2vGBQWVQaExf1toTRWU7X7ii3J6t03nO1fUuvsSAyM/3rgK4lrmU4XE79jTkxdSGYhcCQxLs9TgX0n2H6UmMDgxZTG4XOKahXZEqYH+SVCUrPWEtNUnwF8hpg1Kc82ZEs7zqANUhqUbx4xAN8AEeYU1WuNsyDbXoJtZyObSDEgLFcMEIvmsu2Z2crwcBdKP399lLr+FfdT7b5mFYOgYuDzIHH2fi3xu2Mt8QVlPaXgphjkFJ+zhgiQNhOt1TZktzdkt/P+O0hqlQ8D1xFdWXrJGcQsSUcRXbGm2wAxEcGxRPDyWOLv+lXAN4DLiZY6syqeN078Hj0PeBPbhuSSepjpq6TJOIg4EHweceAhqTeUBzOziS8d1e6blV0vhjfFkLIYSi7O1guz++dRCpbKnzNE9XGhyhVbAE0U1myu2G4TEQrV2k7Kk4cDVwOPzta95sNEq5PDmZ4x3fYiApdjgWOI30N3AT8BfgxcSkwiUPRD4DhKJ11GiN81L82eU6nYEuZFbahdneWrRJhnS5geYggjabJ+RHxROip1IZK63lwi1FlAtOiZk923iFLYs6jJ7eqN3wD1w5q1RGBTb1mDLXXUOhcRP9fPSV1IIkuB24mxVC5uw/6rdTHaCPwcuCRbbqzz/H8Bzsqu9wFfJ8azqew2WnQE8LupFq2u8QHgnamL0PQxhJE0WccTQcwhxMwAktRJil0HJwpr5mTblG+3mPjSVr5UdkUoWk/toGYtjQU66m17E2PBPBH4feJaUjqLCC+e2IJ9FbsYPZVowVLexegSovXKr6k9sH6lg4Drs+svIlo2SFJVhjCSJquP6JL0a+CUxLVIUmoz2TaUWURplrZ6S3mgU2usvmKrmnqtbh7IlvLrD1AaPFmd6xzgUOApqQtJbHfgNuJz+PUknl+ri1GxpUtlF6Nm/SPRcmbFFPYhqQcYwkiaipOBTxIHRqsS1yJJnW4u1YOaiQKdxcAOlGZwK7eZ6uFMZWizuuK+B9vw/tS8IWJg+bcC5yeuJQ9+CtwKvLqBbdRJJloAACAASURBVKfaxUiS2sIQRtJUzAbuJIKY9yeuRZJ63QwijKlcFjdwf6VRqoc1tUKc8mU6Bk7tFScAXwN2xmAM4CTimGNnYlDucq3uYiRJbWEII2mq3ge8EtgTD2wkqRP10VxgU37fjIp9jRMtI1dn6+Jyf8V9q4H7svWGtr2zzvctIhD7h9SF5MR84ufmZcRn0+4uRpLUcoYwkqZqF2LGgpOBL6ctRZI0zeazbTCzFFgC7Jitl2T3LS27b2bFPrZQCmdWZstEIc5IG99TXgwQ7/VNwBcT15InP6HURc8uRpI6jiGMpFb4GnAA8KjUhUiScm8+EcYsY9uwpnhfZYizI9sfsz5IqSVNeeuaFZSCnPuI8GYl23dd6QSPIWZD2os42aHwduANwBewi5GkDmQII6kVHgf8FjgKuDxtKZKkLtPP9sFMrRBnZ6LVTeWU4euAeykFNLXCmmKLmzx4C/BaIoRRSfGYYw9iXDpJ6iiGMJJa5bfEgewJqQuRJPW8+UR32WJ3qJ2yZSkR3hTDmuJSboTqYU15iHN/dvt+2tfK5hvEGDuOB7OtGcAm4MXANxPXIklNG0xdgKSucRbwX8SZqTsS1yJJ6m3rs+XmBrYdpDSWTa2wZj8i1FlKzAxY7gEikLmPmE66GN6U33d/tjQzc9QBwHea2L5XjAC3AfunLkSSJsMQRlKrfJuYkeA04M2Ja5EkqVGjRGiyAri2ge3nUgprlgG7Ztd3JoKafbL7lrFtt6hRSmHMPWXr+4jAZkV23wpixqh9gZum9M66100YwkjqUIYwklplFPgU8A7gPTjlqCSpO20E/potE1lEBDPLgIdk610ohTiPyu5bRox9U7SFCHCWt6zq7nIL8PjURUiSJKW2iGj+fXrqQiRJ6iADRDhzKPAM4N1E16V9UxaVY++gsa5mkiRJXe8c4sxd/0QbSpKkqp5MhDA7pS4kp84gum1JUsfxS5KkVjsH2Bt4dupCJEnqUAuytV17q1tPzIAlSR3HEEZSq90CXAKcmboQSZI6VHFA301Jq8ivrWw/S5UkdQRDGEntcDZwJHBY4jokSepExRYwC+pu1bvmEa1hJKnjGMJIaodLgBuwNYwkSZNhCFPffGBd6iIkaTIMYSS1Q4FoDfMiYEniWiRJ6jQPZut5SavIr/nYEkZShzKEkdQuFxFn8l6TuhBJkjrMPdl6l6RV5NcuODuSpA5lCCOpXTYD5wKnAkOJa5EkqZOsBh4A9ktdSE4dANycughJmgxDGEnt9FlgR+AfUxciSVKHuZEIG7S9/YC/pC5CkibDEEZSO60Avo4D9EqS1KybMISpZjGwM4YwkjrUYOoCJHW9TwJ/JKasvjxpJZIkTb8ZwMey66uJWX0ezNbrgLVl1x8Etmbb/gI4hzheH53GevPuycAI8NvUhUiSJOXVb4Hvpi5CkqQElhKzBhaALUTIMlp2X+WylRgPpnj76dNfcq59Evh16iIkSZLy7EXAGLBv6kIkSUrgKmqHLhMt705Qb55dA7wvdRGSJEl5NgjcQZy9kiSp17yXaOHSSOgyki1vAT6O3W7K7QOMA4enLkSSJCnv3gSsAealLkSSpGn2WBoPYJYDj8qed2h2v1NVh38Drk9dhCRJUidYBKwHTk9diCRJ06AfeAzRCub3wGZqhy9jRAuPzwCzK/ZzNfD+6Sk51/qIgOptqQuRJEnqFOcQB1D9qQuRJKkNlgIvAS4C7icClr8B5wI/IVq6VAYww8SsSc+osc/TgTuBoXYW3gGOJLp07Za4DkmSpI6xL3G277mpC5EkqQUqW7uMEUHBz4A3AweXbfuS7PHyAGYcuBhYVuc1ZgP3Aa9oce2d5hLgvNRFSJIkdZrvApelLkKSpEmq1drlc8RJhlpjny0jQpdi65ctwKsbfM23AjfRuy1JjyBaEe2TuhBJkqROcwxxAHpY6kIkSWpAPxECNNLaZSL3En8Drwb2b+J5C4FVwMubeE43+RFwYeoiJKkV+lIXIKnn9AHXAVfSuweT6m4ziLO1B2TrpcSZ8bnZsgbYmC13Azdny10piu0BHyS6Qqq7fAX4fhv3vxQ4Dnh6tl5K/D/6AyIQ+BmwYRL7fTbwCOBjRMuOZpwCvAc4EFg7idfuVM8D/pN43/ekLUWSps4QRlIKJwOfBvYEVqQtRZqyecCTgKOZzfFs4eEUGKCPAssYYRkF5tPPfPpZwAArGWE9BTZQYAX9PMgMAAbZRD+/YJifApcSZ8rH072trlHI1t9IWoVa6YXA14guQa3SDxwOPAt4GvBoYBT4FRG6/Ai4toWvNxn9wG+AP9A7Mw3OBW4AzgLOTlyLJElSx5oNrAT+PXEd0mTNAJ7LIN+jn2H6GedgtvBmCnyDAldTYDOFhi4rKfArCpxHgZcxzs5sBQrMZCXwCZrr6qDtFYATUxehlvpqtkxVtbFd7mTisV1SOoxoQXN86kKmyQXAn4HB1IVIkiR1uvcRzYp7fcpNdZalwAeYwTr6GedYRriIAmsaDFwavdxMgfdSYJ8skBnieiJI8ItI8wxhus9kQ5h+4LG0ZmyXlN5LhEa7pi6kzU4CNuMYcpIkSS2xC3Hwe1LqQqQG7AKcxQCbWcww76fA3S0OXmpdfkOBlzBGP2MMcQfwSgxjmmEI032aCWE6sbXLRAaIWQZ/QfeeyDiYGHPntakLkSRJ6iYXAn9KXYRUxyBwBoOsZyeGOZsCG6cpfKm83EqBkxlnkDGGuA54fOoPp0MYwnSfeiFMt7R2mcguxExLF9F9YzzuRkz5/d+pC5EkSeo2hxFfkI5MXIdUzaEMcS2DjPE2CmxKFL5UXm6iwFGMAOMMcD4wP/UHlXOGMN2nMoSp1trlDjq7tUsjjiBmSTondSEttCNwDfBbYE7iWiRJkrrSZcB3UxchVTiNAYZ5CiP8JXnsUv3ydQrsyDBD3AYcmvoDyzFDmO7zVeBiur+1SyOOBoaBL9H5LWKWAlcSIczCxLVIkiR1rRcQB9D7pi5EAuYyyLfoZ5z3UmAsedRS/7KCAk9hhAGGibFitD1DmO7zVWA5vdHapZ6HEd16C9lyPjFeTCfaE7gJuJHojiRJkqQ2GSQOpLupObU60w4McSU7MsylyeOVxi+jFPg3CvRRAN6T+kPMIUOY7vNVenu8kAOB/yJOYIwTP+MfBR4E/hdYkK60STmcmC3xCqI7kiRJktrsTcB6YFHqQtSzHsoQN7MnW7kteawyuctXKTDIGAOcR+eeDW8HQ5juM9kpqjvdwcA3iOBlmPjZHgfuJk5oPDq7fjMRbORdH3A6sAX4ATA3bTmSJEm9YxERwvxL6kLUk5Yykzs4hGHuTR6lTO3yYwrMYoQBzk39oeaIIUz36bUQ5jDge2wbvhSXUeB1ZdsuBX5MBBuvJ2aLyqNlwHeAEeBf6fzxbCRJkjrOOUQf/7weMKo7LWSIa3gEw6xNHqG05vJLCgwxAnwo9YebE4Yw3adXQpgjiAGIq4UvxeUBYHbF8/qBdxKDFV+Z7Scv+oFTgTXA7cCTk1YjSZLUw/Yl+rc/N3Uh6hkDzOQX7MFW7k8enbT28j0K9DMOnJL6Q84BQ5ju0+0hzOOBnxA/u7XClwLRiuTtdfZzEHAp8bf1AmCv9pXckKcDfyTCof+gNwdTliRJypXvElNWS+3XzwdZxDDLk0cm7bl8ngL9jACPSv1RJ2YI0326OYSZRe3QpXLZwMRjqfURP/+3EKHNhcTAvtOlHziBaJFTIFr2HDSNry9JkqQ6jiQO0g5LXIe63/EMMMZPkkcl7b28klFmcRewMPUHnpAhTPfp5hAG4ExKsx7VWoaBDzexz0HgpcAN2b5/RbSUW9yyqrd1IFHfHURLnG/h33ZJkqRcuoo4Uye1yw4M8QDvYDx5SNLuy0YK7M8WZvG11B96QoYw3afbQxiIgKReELMV2HkS++0HjiX+zq4nBvD9CdGt6XHAjEnWuxh4DnA2cF1W4y3Ae4F9JrlPSepKjkQuKW9OBj4N7AmsSFuKutJMzudgXsoVzOyJiZxvBA5hjBGOAX6eupwECsBLoKeDqG5TDGBekrSK9nsd8Cm2P14fAb4IvHaK+58HPAM4BjiaGJttFLgNuIkIUVYS3Z6KyyJgQfbcXYD9gQOAnbLn/o4Yh+bHwG+I//8kSZKUY7OJg773pS5EXekIBhjl6uRtVKb38g7GmM0tTP4sdyfLQ0sYv4i2Vi+0hFkEXEHMIjTGtq1gxoC92/CauwMvAN4BfJkIUZYTJ0TWU5qN6Q7geqIFzWeAM4jWNQ60K0mS1KHeRwQxldNuSlPRzxyu5V8YTR6KTPdlEwV2ZTP9vCn1P0IChjDdp9tDmB2JWYTuBPYDXkYpiBnGVl2SJElqsV2I/u4npS5EXeX5zGKYB5JHImkuF1JgiHX03tnqPIQwaq1uDmGWAVcTXYLKp5R+MaWWMAcnqEuSJEld7kLgT6mLUBeZzTW8pQcG4611GaHAbmwB3pj6n2KadUoI04utZSb7nrs1hNmVmL1oOdE1qNKzgPOmtSJJkiT1jMOIA/QjE9eh7nA8Q4yyInkUkvZyLgVmsZre6urXbAhTKFsXKu6vvK+Rx6hyf+X2lTPfTLTfWjU2sk0jtZY/t94+aj23kcdqvedGdGMIszsRvtxAtAaVJHWp/tQFSFINVwGXA2cmrkPdYCav54VMbkLXbnIS0M8C4PmpS8mp8oCgr+x68XZxqQwk+qpsX7nPatsXn1O+Lu6/1mtWq7EV76OytvLHKl+n8nYzn1Gt99zL9iJmLttEnHhwZkBJ6mKGMJLy7Gzg2cS0mdJkLWOEp/JPPTEhdX2zgX+gn5n8c+pScqpaQFDUSKuNas+bSsBQ7TXr1djINvVa10y17sm2bOll+xEBzAPENNH3py1HktRuhjCS8uz7xFSYZ6QuRB3tRJYyytGpy8iJl9PPMEfSWV0eBoH3Ai8lTd19VZZyzYQO5S1dpvKak9GOfTay70bfc685iAhg7gKOAVanLUeSJEmCNwHrgUWpC1GHmsWVnNmyUVU6/zJGgR3YCpyW+p+mCfuybSuL5cAngecACyd47mTHhKl1u9Y2zYwJU/m8ym0mes1Gwoxm30ezjzfz3Mr7q73nZnTDmDCHEq1efgHMT1yLJGka2RJGUt6dn61flbQKdar5bOVQW8GU6QeOZ5BBjk9dShNWVtzeF3gN8F2iG8cfgQ8QrQlmteH1q41vUnm70ZYl9cZaafQ1J2uifTYbitQKYqp9RkW9Pv4LwKOBnwHXAE8jTjRIkiRJuXEOcDsGx2reM+lnnHXJ25/k63IeBWawHjpqnJwRtp9Rp3zZWra+HHgbcATNtYSpN15KI7P+NPLcWtvW267RWqbyPiZ6L82+z3r7bea9VNPJLWGeDKwFLqa3ZimTJElSB9kXGAOem7oQdZyPcihbk4ceebvcQvGL76NT/wM1YRX1Q5jyZbzidjPdkZrRbPejTpPX99GpIcyziRmQvgkMJa5FkpTIYOoCJKkBtxCD9J4JfC9xLeokMziMR+fgy075JMF5sA8wmzE280iiK08qs4ElwFJgWXa9fCm/b6SJ/Y4SrXz+Qgx+KqX2T8B5wAXAqcSJBUlSDzKEkdQpzgYuAw4DrkpcizrFAA9n/8Q15HUEjH0Y5bqWfzrlAcqO2XqnivuXZssSYG7F84eJFi+riHFgVgJXZ7dPAHae4PXHiO5I5xLdGO9g+qOvVo3fou7xRuCjwAeBdyauRZKUmCGMpE5xORG+nAm8PG0p6hCz2cpOyUOYvHoEQ9zIgXXOx89k2xYpS6kdphSXyjFmHqQUpqwC7gOuz9bFsGV12WMP1qn4IOAQtg84xojxou4CPkG0NKi3n1aqFrZ0UwDTTe8lhT7gP4hZ/s4kgkFJUo8zhJHUSc4mmnO/FViRuBbl354U6GOPxFUU22Hk7evsnvQxwKMZ42Ns3wVoKTCv4hmjlIKTVcT0utdRClGK960suz3cworvI7okFbuXjQAziO5UHyFmSrKLh/JigJjd70TgpcDX0pYjScoLQxhJneTrwMeJ/vTvSlyL8m8+AIsSV5FXC4FRFhGztRRDk5uIEOV+tm2pspKYCjql1UQAM0K0fPkO8fvg9ymLkqqYTfy9OoboRvfDtOVIkvLEEEZSJxkmxnp4DdG3fnPacpRz0ZJjfuIq8mohMMAY4zw2dSkNuiZbnwV8GvhbwlqkWhYRA8g/AjgWuCJtOZKkvOlPXYAkNemzwAKiebdUT8QvlZ1qFOYDY8xJXUYTvkN06vpXDGCUTzsDPwf2JlqYGcBIkrZjCCOp06wgmnmflroQqQvkZdJsqdPtC/ya6DL3JOCGtOVIkvLKEEZSJzobeCRwZOI6lG/ry/6rSuuBATalLkPqAocCvyTGLXoyMTW6JElVGcJI6kRXEVNWn5m4DuXbhrL/qtI6YICNqcuQOtyRRBek64CjicGsJUmqyRBGUqc6G3g20QRcqibawKxJXEUfpempy6+ntq7sv5Im42XAj4GLgWdi5CtJaoAhjKRO9X3gr8AZqQtRbt1GHwXuTFxFocqSB7dTYISbU5chdaA+4N3AhcAngBOJ2fskSZqQIYykTjUOnAO8gpgSVKq0hSHu5S+py8ipaxlmzE9HatIQcAHwLuDVwNvIT7QqSeoAhjCSOtmXs/Wrklah/BrnBtt61PBXBsEQRmrCIqLr0d8DzwLOS1uOJKkTGcJI6mTrgC8BpwODiWtRHo1wFVeyNXUZuXMrsJkB4NrUpUgdYg/gV8D+xBTUP05bjiSpUxnCSOp05wC7Ac9PXYhy6VKuZYi1qcvImUuBGWwgZhqTVN/jgd8BI8DjgGvSliNJ6mSGMJI63S3EIL2npi5EufQrCozzy9Rl5MyljFPgMmJsJUm1vRS4jAhhngzcnbYcSVKnM4SR1A3OBv4OOCx1Icqd9czkT/wsdRk5Mg5cwiijXJK6FGkKFgC7tHH//cCHgK8Qf2Oeh1NQS5JaoC91AZLUIn8ixrd4eepClDtnsIyPsoIhTz0AlwPHMM44DwHuTVzNdCjOXPONpFWolV4I3EmEMP8LfAH4Ka1r2TUPuAh4GnAKpUHge8EMYB/ggGy9lPg85mbLGmBjttwN3Jwtd6UoVpI6kSGMpG5xEjFTxZ7AirSlKGeW0c89/JABjktdSg68gnH+i8vYyrGpS5kmHwT2TV2EWu7rwGximugnE8NNn08M1n7fFPa7O9HFdWei9ctvplZm7s0jBho+GjiSaFE6SARa9xCfZTF02QAsphTK7ArsmO3nQeAXRMx7KXA1dneUJEnqakPEAeP7UheiHJrJDzmRUQo9ftlIgTmMACem/ieRWuhAosvQamAY+B/gGJo/2fhkInT4MxHGdKsZwHOBbwNbgFHgSuAjwAuARwKzGtzXEuCJwKuAC4kWSgWilcwngINbWbgkSZLy5V3ASuLsqFTuqQwxyorkMUjay+coMIvVNP4FS+oks4lWkb8igoDlwFuAZQ089wwiwPkW0dKjGy0FPgCsIoKXHwEvARa1+HUeRvw9vpH4d/gzEfwOtvh1JEmSlNguwFbg5NSFKIdmcw1vZix5EJLqMkKBh7AFeEPqfwppGjwcOIcYw2QL0X3pKLZvHTObGPNlFHh7lce7wS7AWUR3ovuAdxBdiabD44nBjUeI2QxfiWGMJElSV7kQuJ7uPJDW1DyPWYywOnkckubynxQYYh0xloPUK2YD/0SM7VIAbgLeSHSj2ZMY1H01MQhvtxkkWvisAf4G/AswJ1EtewOfJ06UXEWEM5IkSeoChxEH2g7Bqkp9zOFaTu/BsWE2UmAXNtPPG1P/I0gJPRL4NLCW6Hq0hWidsU/KotrkUCJg2koMTp2Xbrr7AT8hBu39AjA/bTmSJElqhcuA76YuQrl0OAOMclXyWGR6L29jjNksJwbklHpZH/BuYIwYG6VAjF3yemCHhHW10mnAZmKWov0T11LLPxAzGd5MBEaSJEnqYM8lDrCdllbbm8kXeBRbeqY9zPUUGGQEeErqj15KbEfgB0QrmDOz+w4FPgusI4KLrxCzJHWiucTMUKPEwLj9acuZ0M5EULSZGCtGkiRJHaqfmBXjnNSFKJcWMcQDvI3x5AFJuy8bKfAwtjDERak/dCmxJwB3ZMvjqjw+j5hm+Q9E65jriTFUFk9XgVO0A/BbonXJUYlracYA8O9E96T3pC1FkiRJU3E6sJ7WT72p7vBU+hnjR8ljkvZeXs4oM7kDWJD6A5cS6QP+lZid5wdEa5iJPIoYRHY9sIkY8P0J7SqwBR5KhEY3E4MNd6ITifFrPk8EM5IkSeow84gZId6UuhDlVD/vZyFbWZ48KmnP5bMUGGCEGKxa6kXl3Y/eQPOz5s0DXg38kWgdcy0R8C9sYY1TtZRo+XklsFPiWqbqOCL4+mzqQiRJkjQ5nyCang+mLkS5NMAMLmMPtnJ/8siktZfvUaCfceDk1B+ylMiTqd/9qFmPAc6j1DrmghbtdyoWEgHRVeQrGJqKJwEbgQ+lLkSSJEnN25cYoPdFqQtRbi1kJn/iQIZZmzw6ac3lcgoMMQK8N/WHKyUwg/gCPwp8j8a6HzVjIfBaIvgoAFcDpzL9IcgA8DOiFczSaX7tdnsO8e93SupCJEmS1LzvEoMVSrUsZSZ3cAjD3Js8Qpna5WIKzGKUAc5N/aFKCRxItAzZwPS0Anss8EWi5cYG4HzgiAae10cEOD8FZk7ytT8A3E/3zgJ4CjFGzKNSFyJJkqTmHEkc7D4mcR3Kt90Y4mb2ZJhbk0cpk7t8mQIDjNHPZ3FgS/WWPmKslk3A75j+YGIh8DqiVUwB+BPwGmoPiH1Mtl0B+A0xs1EzjifGuTl2MsV2kC8At9I9Xa0kSZJ6xp+I2S2kenZgiD+wA8NcmjxSafwySoF3UaCPAv38W+oPUZpm+wCXE7Mf/TvpxwB7PPCfRCC0nggSDq/Y5htEiFLI1rcAezW4/x2Ae4H3taDWvJsDXIN/vyV1mWZHiZekTnQSMaDinsCKtKUo5+YwwAUUeBHvpI93k+82JXcDJzLKrxljjNcCX0pdkjRN+oHTgA8SrSX+iRinJS8WEX97TgEeTnST+jzRBelmtg2LRojA5mnAHybY77nAwcBTiDHPut2BxImUpwE/T1xL3jyU9INDC+7Cbu+SJG1nCLiH3jhzqNY4hQGGeQIjXJ+8rUv1y0UUWMwIQ9wCPCL1ByZNo/2JL+TDwHuI3/F59kTgy0TrmJuI0KVQsYwCm4Fn19nPEcQ4KY9sZ7E59D7gOmLQZZVcwPY/Ry5pFkmSVMU7gZXA7NSFqGMcwhBXM8gYb6HA+qZjkvZcrqfAUxihj3H6+TwwL/UHJU2T2UTospVoHXFo2nKatiNxQqDWF7lxonXLqVWe20+0kvnEtFSaL7OBvwJvTF1Iznw1W5TOiRjCSJJU0xLiLOR0zJih7tEPnMog61nCMB+nwIZE4cvNFHgFYwwyxhDX0NgsLFK3OJ4YO+VB4EzSj/0yGcfS+Jn1j7DtsAHPJ9774mmsN09OIk6kGDqXGMKkZwgjSdIEvgRcj+NhqXlLgY8xwCYWMcx7KXDXNIUvv6HAixmjn3GGuA14BREOSb1gV+B/iC863wAekracKfk2pQF5J1rGiPc7K3vuH4APT3O9eTJIjP1ja5gSQ5j0DGEkSZrAYcQfy+NTF6KOtSPwPmbwAH2McxQjXEiBVS0OXq6nwHsosEf2hW0mVwP/iOGLescgcAawjvjy/Yy05UzZzjQ/zsQIMYX1C4iWnDtPe9X58mqiO5fdioMhTHqGMJIkNeAy4Eepi1DHmwE8iwG+yQDD9DHOw9nCGynw3xS4igIbGwxc7qfALyjweQq8hHGWsBUoMIP7iDPfB6d9q9K0ewwxm9BW4AN0x5fuPWm8BcwwsKXi/q9Me8X5M5sI5V6SupCcMIRJzxBGk2KTfEm95rnAd4jZNZYnrkXdYQ7wBOAYZnI8IzyScQboA5YxzBIKzKePhQwwnwFWMcKDxEC/K+hnQzbjxww20McvGebHRFh4LR7cTcYHgX1TF6FJWwAcB6wigpj1DT7vK8D321VUi80lAoUFwPzs+rzs9uzs8YXZ9YOAFxJTNP8kRbE580WiS9rTUheSA8UAxlAqnROJfwe/U6sp/sBI6jX9xBShPySaukutNgPYiwj69iXGk5lPfMmaC6wBNhBfLu8BbiZ+JlekKLYLFYOrbyStQlOxE3BfE9u/EPga3fll9ExiHJQ9iNmTet3fAT8DHoq/Mw1h0jOEkSSpQacTX4AXpS5EUssViANj9Y5u7pbxG+Cs1EXkSD8RvpyWupAc6Oaf+05hdyRNigP8SepFXwJGgVelLkSSpBrmE+PjXJq6kBwZJz6PY1MXIkmTZQgjqRdtAM4nWsQMJq5FkqRqnkJ0c/h56kJy5jLisxlIXYgkTYYhjKRe9SlgV+D5qQuRJKmKI4E/AQ8mriNvLgMWA4emLkSSJsMQRlKvuhP4P+D1qQuRJKmKg4FrUheRQ7cSLVofmboQSZoMQxhJvexs4HHZIklSnhxAzJym7d1MzEAnSR3HEEZSL7scuApbw0iS8mU2MQ2zIUx1N2EII6lDGcJI6nVnAycAu6QuRJKkzJ7EcfodievIqzuIz0iSOo4hjKRe93VgNXBq6kIkScrMz9Zrk1aRX+uARamLaJE+DJSknmIII6nXDQOfBV5DNP+WJKlVhoCTgIOafN68bL2+teV0jXWUgqpO9yzgNuBG4Axgh7TlSGo3QxhJgnOBucBLUxciSeoqTwIuBK4HVgIXAa8Adp/gecWAYUP7Suto6+meEKb4PvYHPgHcC3wNOJpoJTNdCjneb6P7aNd7kFpqMHUBkpQDq4gD4zOB8/GPuCSpNdaVXV8C/APwYkrjvfwI+BlwKdE1Vo3rI06ebCXCqhHi8x4junGNEmHNVmBTohobMzmyywAAIABJREFUMYeodRAYyJYXED8ndwKfA74M3NPGGvIcwOTxtaQpMYSRpHAOcDJwHPDjxLVIkrrDyorb5cfeewD/DJyS3b6eUigzkt03H8OZauYTwcUFwIwGn7OJxgObzcCWKWw73sR7GWL7AKH4nnYH3ge8H/gh8PlsPdbE/hvRV6WGPO23kRZB7XoPUssZwkhSuI6Ysvr1GMJIklqjMoSpVB4gPALYD3hT2X3zMISpZiHRbWfvstv9wGKiJckCItyYS4z3Nov4LGdkjw3U2HYRsHN2fajGto0osG1gMwxspHpgcyD1w4Pi97WnEePHrOT/tXff8W5X9R/HX/fe3tvdMlpmZYmMooBsRH+VIYIKOBhaFUQEJ6iggiKiMl2IOOHHcqAoPxygUjYKyKgylVH2aqGUVTrv/P3xSbzpbZKbe2+Sk/F6Ph7fR3KTb/L9JM29Td4553MijJlAY05X66O607BSH1dNyBBGkvqdCfyBaKB4X+JaJEm1bwIxzWiNzGl2m5pzWRelj9YY+CFwVVymOp/JrDjVK3v+pSoce2C4Uyywye47JrP/wH03IF4jpYycyX5umwp8NXP+d8OoPzfwyRc6FLt+uNcN9dh9A/YZGJCM5Fj5Li90XNWuyURovQkRxk4gQtRsU/NFxN+DxcCjwJzM9spK95SAIYwk9bsceIRYneATiWuRJFVXKysGKfnClSnAmjnnxwy4j2VEn7EFwHOZ01cZfMWbrszx/wR8F7ib+PCwHnDXyB5WQ1qfWFEohc7MVq7A5zTg6BKP2wG8SLxONiZG2gxFbpjRR/5wY2AwkXu+2L7F7jdXsYAjO6WoUGgykmMVewz5jqvaMo1oVr1rZls/c/kyIqjODV0g/navSoQyGwCjM5c/BvyN6MN1HfBM5UtfmSGMJPXrJXrDnAocRwwllqSBhvpmfbD9ffNfGeOA1VlxVEpuuDI1c33u5QP/HV4kpn8sIKYFPQPcmXNZbuDyAvmnh9xD/hCmj/h/ZymxSt+PWHHUy1PAZsBlJT/i5rEZcFXqIspkQoHL+4iQpZ34Jv8SIny5jXjdXDTE4wz8O5Pvb85gf4fyTZsq5X5HMsIkt9dLOY5l35j6sQbwfuBgYFvi7+vfgZ8QQfUc4m/mYCPJWonQZhNgK+CtmfuYAPwLuJAYVTa/zPVLkko0gUjSvzDYjpJqUh8wswrHKOf+figYmYuIN+R/BWYTb8oX0/8teXZbToQodwPXEMsAnwV8DfgUcCDx5vz1RF+Qcn1ZefWAOrqJDw1PEiMvCy21PItYsU8rexX4SOoiyuRs4jWRfW1kXx+zgS8RHxzzuYihBTFD/TuUbyTMcO+3r4T9it3fwOlCwzlWJf4Ozxzm7VTctsD/EaO/XiZ+R95CeQeQjCJG1JydOUYnEXRuU8ZjFD24JKnfIuJN75FEj5ihDvWV1PiG+m3uYPs7CqY8niNWGMpOA8rd5gMLE9WV/XY12xvmdmLK0R8p/g3uvcCMypZWl15LfGFyb+pCymRNoj9MFxEO/oEY/fRcyqJKMJQRfNVcuWgox3IUYm15ExGKv50IIT9EjP5aXoFjdQPXZ7bPAfsQoee/iBXIvkGMOpMkVcl6xJuhA1MXImnIqjESZiRG8kGk0b9xHe7jG+qIgGo7lXhsvwG2G8Lt9iY+KKxSiaLq2OHENLHW1IWUycbAIUTT3qEYzkiYgaNbio12KXXfodxvKb/jg42EGe6xhvJ4S+VImPJYE/g5EUrfQIQwqbwduDFTy4XEtFVJUpX8FrgldRGShmyoIcxgb+4HG9Y+8PalfIAo5cNAsXpKrbNYDaXePve6Uj8IlXLfA68r9PhKUeshzBhg7WHcbiLxhcA+5S2n7v2aGC3S7Ibzui/0O1bs93Gw2470fge7r1Lvo1KPoRhDmJE7gmgD8ATw3sS15NqfmDL6IvDRxLVIUtN4C/Ef606pC5E0JEMJYYby5n7gbQrtP5xvX0v9dnaw4GOwIGUoj3Ow4w1l33zXF6pzOGo9hBmJm4ipsQqtwDzgM6kLqQGN/LqvF4YwwzeJaIbbDXybwg2qU5oAfIeo8SKiZklShd1BjIiRVD+GEsJk9x/4c76t0G1KCUIGCyBKDVoKfaNb6rfLA38udvuhPo6h1GYIU7qjgKdpnKk3I/VWYnTQWonrqAWN/LqvF4Yww/MGYmWjeURz3Fq3K1HrHKJx+4j5B12SCjuTGBq5XupCJFVVS56tmsfOhhalNPQdSZ2VfJzF7jv3Maq4i4llWvdIXUiNOJhoXvts6kIkDcsMYpnpx4nloq9PWk1prgfeSKyu93fgzSO9Q0MYSSrsYuB54BOpC5GUVDXDgmz4MpxAZKR1VvJxDrzv7GM0jCluPrFU9YdTF1IDxgHvA36ZuhBJw7If8ffscuCd9K8cVw+eJZr2XgFcBeybthxJamxfJYKYsakLkVSSck1HKnT9wMsqOR2p2HWlTvEpdr9D6VVTrJaB+w+lf0zuz05Hyu9twBKcgvMJYC7R6FiN/7qvB05HKt2+xFTC71Lfy4K3AN8nls22abokVcgU4s3v4akLkVSSoYQwxXq+FBqhUazfSaH+J8X2KfbzUG9bzsdZqJZSrhvsvku5z6Fohg+js4FvpS4ioVHAo8DRqQupIc3wuq91hjCl2RFYDJyeupAyOp14TDumLkSSGtU5wH+o7+ReahZDHQmj0tXqh41m+DD6HuBVYLXUhSRyCDEqdXzqQmpIM7zua102hHmS+Lf4FNG41ZYf/TYFXgbOpbHeR7cAFxJTqjZJW4okNabpQC8xF1RSbTOEqRxDmHRaiNEwzbhc9TjgMRwFM1AzvO5rXTaEOZ7oFbIw8/OLwJ+BY4FdgNGpCkxsLHA3cBnQlriWSmgj+tvcgdMkJakiZmU2SbXNEKZyDGHS2o7oQ7B16kKq7BTgXqA9dSE1plle97Vs4HSkNmIVnSOB3xE9jPqApcSqOqcA7wAmV7fMZM4mphE28uNdlQiJf5K6EElqRPsSo2Gmpy5EUlGGMM2nmT6M/gS4hcb8Vjmf6cQH2P9JXUgNaqbXfa0qpSfMa4npdOcC92f27wbuAs4CDgLWrWCNqbyHCI23S11IFeyAjXolqSJagYeI/jCSapchTPNppg+jqxBLpZ6SupAqGAf8m+i7oJU10+u+Vg2nMe9UIqA4A7idWDGoD3gE+DmxEMTm1Hf/lAnAE8AxqQupomOJETHjUhciSY3mSGKlpCmpC5FUkCFM82m2D6NvIz64NXqfsvOJLz8mpS6kRjXb674WlWN1pPHAHsDXgWuARZn7nA/8keiFtCOxQli9OJ0Y6VNPNY/UKGLaZDME5JJUVROAl4Avpi5EUkGGMM2nGT+MnkR8SNs4dSEV8klgGdFfQ/k14+u+1lRiiepRxPSWzwO/J37P+4hw5lrgG0RoM6HMxy2XzYipOW9KXUgCbyGmTzbq32VJSuY7xBDLZkr3pXpiCNN8mvHDaBtwNTFSZGriWsptX6JnxuGpC6lxzfi6rzWVCGHy2Qw4jJia90jmmF3EimnfB94LrFnG400DVhvmbX9NhEfN6nLgl6mLkKRGsx7xH9+BqQuRlJchTPNp1g+jk4FbgXtonNVHZgCLgW+mLqQONOvrvpZUK4QZaB3ifehZwJ1EaNkHPAicRzQCHslojL7M9qEh3m7jTC3N0Iy3kB2JzwkbpS5EkhrNb4nVKSTVHkOY5tPMH0anEqNh/kl5vwlPYW9iyoVLvZammV/3tSJVCDPQJGAv4GTgb0T/wj5gHrFU9lHANpS2qtq69IcwvcBVwAYl1nEucOUQ6m5UV+NCHpJUdjsR/zntlLoQSSsxhGk+zf5hdBrwHyKMqddvXz8MdAI/pnmW3x6pZn/d14JaCWEG6iB6shxLTI95gahzITALOAF4KzA2z20PIsKXbBDTSfQ5+RzFfzdXyeznMs2wH/Fc2FRcksrsVmJEjKTaYgjTfPwwGv0b/kEsX71r4lqGoo2YetQLfC1xLfXG1316tRrCDNQKvJ5oeP0rordhNmC5Gfg20YtpNeBHRGPdvgFbDzH1acsCxzgCeA5or9SDqCMdwALgY4V2sLGkJA3PT4h5t+sBTyauRZLU3F4kVkw5lxgKfwoRbvSkLGoQ6xINLHckmo5ekLacunQAsYyx0jggdQEl6gX+ndl+mrlsPWI1n12IqYDHAC1EkNKR5z6yQc4dwLeIqU9Lc64/GLiY6IfS7DqJ5+JDxN9kSVKZdABzidWSJNUOR8I0H0cErOgI4sPR34HpiWsp5IPE0rv3Ex/sNHQns/JoBbfqb8sH+4eqE6sB72fFqUiFti7gUaKRNsSUyF6ac1nqQv6HeE7WTl2IJDWarwIvAeNTFyLpvwxhmo8hzMq2Ipr1Lie+tZ6Qtpz/mg5cR4zQ+Rm1U5ckeAelh0/dRMhwHvAJot+Ms2z6dRArvX0wdSGS1GimEB3oD09diKT/MoRpPoYw+bUCnyK+LJgLHE26Lw1eR3xYWw78C9ghUR2SCjuV/P1gStn+nqDeWjcLpyNJUkWcQ6xK0ZK6EEmAIUwzMoQpbirwXeBVYgrQCUQ/lmrYmfi36QbmAIcS4ZCk2jOH/CNelhF9TgZePp+YltQDnJig3lp3LPBI6iIkqRFNJ4Zjvj11IZIAQ5hmZAhTmtWBk4jGmz1EA9+DM5eX03RipaOHid/H2USvCcMXqbZlA5ZFxO/vdcCFRP+hTxMrKG0PrEP/7/OkzG32qnKt9SA7vWti6kIkqRHNymy5NgAOqn4pUtMzhGk+hjBD0w68C/gd0cC3h1jx5LvAgcDWwLgS72sqscLKEcRKR88Qv4NPA6cDbyhn4ZIqak1K/93P2oH4nd+g7NXUv42I52bbgVc4fF6SRu7twBXECg+rE/Pu3525bi3iW0dJ1dGXOb0kYQ0twGsyp08krKNZHAD8GhsgDsc4YkWT3YFdgW2IkKaPCFSeJ74VX0Q0mVyF+FZ3AvFt+KqZ+3kJuAm4FrgeuJf+30VJjeuDRN+T8cTIcPVrI3pHHkr8H/VfdjCWpJG7AXiWePO5FrF0X9YUDGGkajoN2DjRsTuADYkmpGMzlxnCVN4lwMWpi6hTS4BrMhtEALMhsCnxezSV/tBlPNH/YRHRX2Yu0UPiQWBeVauWVCteCzyOAUw+PcRzs2HiOiSpoUwllqleQPyh7WHlhmZvTVWcpKrZDriAaFzYRf/v/54pi5IkqcK+Ddyeuoga9k/gWwMvdCSMJA3PF4n/eLop/re03A0PJdWG0cQ0mM8TUzi6iFEEZM7fCFyVpjRJkqpiAjE6Tvm9Sp7GvIYwkjQ8m2dOi/0d7QJWq0ItkqpnPeDjwKeIVSGy2nPOjwKOqWZRkiQlMJkIGpTfq8RztAJDGEkansMypwcTjbfy6SWmLEmqf3sARwHvJKYethfYrwv4LXBXleqSJEl1xBBGkoanDzicGOnyTvL/PW3B6UhSI9gHuIz4vW8BWgfZ//iKVyRJUnqvAGunLqKGTQSeHnjhYG8iJEmF9QAHAv8gesMM1IbTkaRGcBNwJ/l/z3N1A2cCT1a8IkmS0ltE9IVRfhOBhQMvNISRpJHpBPYG7mHFpakhQpg1q16RpHJ7CdgVeISVf89zLQFOrUpFkiSlt5A8jWf1X3lDGElSeawG3E+EMrlLVN+RsihJZTUNeI4Vl6HObt3ESkmSJDWLDwJLcXBHPm3AcuADqQuRpEY2DXicFT+gPZGyIElltSPwArHaQTf9v+c9xJzv0elKkySpqlqBdxP/D26QtpSatBHx3GybuhBJanQbA/PpD2JeSVuOpDJ5F7CYaNA7A1hGrIDWlzmdma40SZIqaj1gL+CLwAXAbKIfTPbLiL3SlVaz3kE8N/bMkaQqeAPxTXn2P6ZCS1hLqg8fIYLVc+n/fd6XGAHTB9xNrJokSVI9WwvYA/gscA6x+MTL9L+nfRq4Evge8DFihOhjwJdSFFvjjgMezneFbxgkNbNRxAepSoQkrwNOyZw/nPodEfM0cEvqIqSEvgKcTDTcPYF4E5p1OPEmdX/g0uqXJknSsKxOfGk4HXh9zunqmeufB+4F7gP+Dfwns72U574uIBaieEdlS647VxKrJR6euhBJqiXZeaxuxTepGbUCZxG9Xz5dZL9R1SlHkqQhWx3YBTgC+AFwDfAs/e/xXgRuBH4GfAbYDZg6xGN8iBgB3l6ekhtCBzGF2anKkjTATAwZivH5UbMaDVxM9H3ZP3EtkiQV00I0xt2LWKXvbOBvRI/CbNiyELiNmFZ7NLAnsG6Zjj+N6I22S5nurxHMIKYsr5XvSr+9kSRJ6jcJ+CPwRmBv4Pq05UiSBMQXBJsBmwCbZ7ZNM5eNzezzLPAAMY3o98D9mZ+fonJfrD0N3AQcBNxcoWPUmwOJEUbP5rvSEEaSJCmsBVxBzG2fAdyTthxJUhNajQhWphOBy/TMzxsQfQx7iGa49xHTi36UOf8g+Xu2VMMviV6IxxCN7JtZB/B+YiWpvAxhJEmS4o3uLOLN45uAx5NWI0lqZC3A+kS4shn9o1qm09+TZTEximUO0fz2wZyfO6tc72AuIfqo7Q1clriW1N5BjEz6v0I7GMJIkqRmtz3wF+BR4F3AgrTlSJIaxLrAxjnbJjnnx2X2mU+MZLmfmA6bHdXyJPXTm+9l4CKiuW+zhzCfAX5B9OHJyxBGkiQ1s7cT31bdCBxAfPMoSVKp1gJel7Plhi4TMvssAh7ObH8lRrM8kNlSTSEqt9OJIGl7YHbiWlLZiZjOfESxnQxhJElSs/owcB7wG+BjOI9dkpTfGkTAkjuSJTuyJRu0LKE/aJmVc/5h4Jkq15vCw8DvgOOBdyeuJZWvAr8mRtZKkvJwCebifH7UyI4hltQ8nZibL0lqblOInmCHACcBFwP/Al6hf6nnpUTT9kuBbwGHA7tSvuWe691mwDLgzakLSWAG8frYeLAdHQkjSZKaSQtwBvBZ4GjgzLTlSJKqpIUISzYENgJey4rTh1bJ7LcceIgY2XEdcA4xfehhYjlmv6Aq7AHg+8BPgG2A7rTlVE078GPgu8TrRJJUgCM9ivP5UaPpIBoHLgcOSlyLJKn8JgFbAe8hRjz+iOjBcj8xQiN3RMt9wJ+ID84fB3YnVixqrXrVjWUc8ATwpdSFVNGXiSlIY0vZ2ZEwkiSpGUwkGvDuTCwfeW3aciRJw9ABrAdsQIxoyY5q2Shzfkpmvz5gLvHB+DHgtpzzj2auU2UsAY4klq2+Abg9aTWVtzPwdSL4W1rKDQxhJElSo1uTWIJ6XWLu/r/SliNJKmAMEbBkg5b1M9sGRMiyFv0jVV6lP1i5kVgW+NHM9jgx8kVpXAacD/wWeCOxhHUjWo1o7v+/xIirkhjCSJKkRrYRcGXm/C64YoEkpTSB/oBlA1YOW9bO2fcVYlrLE0R4/vvM+cczpwuqUrGG6/PAjsAvidWSetKWU3YdRPD3AjH1rWSGMJIkqVFtC/yZWBr0ncBzacuRpIY2FpiW2V5DBCzZn9fPnK6Ss/+L9IcqtxKrET1Of/DyUnXKVoUsI/qv3UyMivkIjdNrsIV4TDsAOxG95kpmCCNJkhrR7sAfgFuA9wGL0pYjSXVtDLAOMa0zG6hMI4KW12TOT8nZfymxktDTwFPAnTk/Z0OWV6tUu9J5CNiHWGVqHnBc2nLK5jSiB8xuDGOErSGMJElqNO8Hfk404j0U6ExbjiTVrDaib9a6xFSgaUTflddkTqdlLl895zadxAjDbKDyn8z5J4nA5WmcKqR+twEfIBr1jgaOpn5HxLQAZwCfIkKY24ZzJ4YwkiSpkXyOeIN0JjFHu17f6EnSSLQBawBTiYBlTVYOVrKXt+Xc7gVixMLTwLPA7Mzp0wMu92+rhuIy4ABiytlU4guSrqQVDV0HcAERvhzAEBrxDmQII0nl10ck5ZW+r3IeR6p3LcTw4C8BXwS+l7YcSSq73GBlncz5NYhAZQ0iYFkrc/0arPgeYQn9AcpTxDSRbLDyDLFk81xcUUiVcxmwZ+b0SmAm8XqsB2sRqyBtRTyGm0ZyZ4YwklRe1fpmqBa/gdqBGG76OeBjwHlpy1ETaQfOJV5/hxArMUhSrWsj+qhMIab7TCEClCk525rEB8Bs+NKac/tlwHwiPJlPLNV8S+b8s0Qz8uz19l9RLbgJmAFcSvQJ+iDRL6aW7Qn8ihgl9mbgvpHeoSGMJJVXC+UNSAqNdCn3cYZrc+KbjIOJ5nzZ3hubJqtIzWY8Mc/8LcC7gKvSliOpSXUQK/+sSgQq2VBldSJIyf05G7Cslud+XgKeJz7wLSB6rtyauWwe/cHKPGBhxR6NVDn3AtsBPwGuJqYPn0jtNdCfCHwD+CwxCuYTlKlGQxhJ0lCtRyw5eAiwBTGntz1zXUfm5540panJTAUuBzYiViiYnbYcSXVuFfqDlKGeH5fn/hYTQcrz9Acrj9AfsMzPOb8gc767Io9Mqi0LgQ8Ro2C+Q7yv/DzxpUotOIjoLzeaGN19QTnv3BBGkspjsFEpudcPHN0y2HUtBfYd6nFGYgrRhOxgYEciZMk28msvdCOpgjYg5pSPIoYHz0lajaRqagUmZ85nA5DxxDfXk3N+npy5LPvzYPvmswh4mRih8nJme5FYlnbg5dnz2WDF/ipScecTPWK+DfyWmNJ+MnBFglpagHcAXwF2JqbVf5kKrPRlCCNJI1csKMmeH3h9S4HzA38u13FG4jZg25z7b2Hw/z9eS4Q2UiWsT7xJegU4lWiUt1XSiqTmMxYYM4LL24EJrBiorEL8HzOJCPrHEyMsx2Run73NYJYTo1BeJkKUJfSHKQuIpZQXZrYlOfu+wsqhiiNTpMpaAHwU+BnwNeAvRL+Y7wF/AJZW+PhjgfcSKypuTax6tBNwe6UO6KoakprZTOAiRva3MF/QUSxIyWqhtJCkr8i+pR5nuA4BLhzG7bqI/zAnjeDYkqTa1kX+/gilXt5NNIvtIwIPiBCkN7Nf9v+SZUS/scUFbvNy5rol9AcrTomV6tcbiS9a9iN+ry8lGuPeTH/vwZHqAHYhRni/hwhi/kissnhXmY4hScpjJiNvbpvv9vlGqJR620L7jOQ4w5V9fj4CXEu8qe0i3iD3Fdk6if/EpHLbn/hAdjExT1uSJDWm1YHPEI2p+4hwdhYxRWhvoh9cW8Fb92sjRmjvnbntlURw2wf8A/g0+ZtkS5IqIFUIUyxYGcq+pR5nuAY+P2sCRxLNT3uJsMUQRtXyGeJb8LNYcYlWSZLU2NYmlrM+j2hunX3PuQx4CPgn8YXhnzLbtZnLHiKmJ2b3fxg4l3iPu1ZVH0EOe8JI0siVMlUo3/l815HnvspxnHJ4DvhhZtsQ+AAxZWkTInjpKPPxJIjX8UnE0OTjMeCTJKnZzCNaCFyU+Xki8f5zE2JEzESip9SEnP1fJqYnPkY0759DTGeUJCVUjpEwjazU52dLojnqM/R/0/DtCtal5tFGfGPVRUyLkyRJkiTVKUOY4ob6/LQAbwK+A+xQkYrUTMYBlxPztt+VuBZJkiRJ0ggZwhTn86NUViOa5S0AdkxciyRJUtnYE0aSJNWS9YArgPHAm4EH0pYjSZJUPq4uIEmSasXriREw3cAuGMBIkqQGYwgjSZJqwZuBvxPLR84gGj1LkiQ1FEMYSZKU2nuAq4EbgL2IZSUlSZIajiGMJElK6QjgEuB84ABgWdpyJEmSJEmV4Oo/xfn8qNJOJF5jX0tdiCRJkiSpsgwZivP5UaW0AWcTDXg/lrgWSZKkqnGJakmSVE1jgF8TvV/eC1yWthxJkqTqMYSRJEnVsioRumwB7AnclLYcSZKk6jKEkSRJ1bAuMAuYTCxHfV/aciRJkqrP1ZEkSVKlTQduJt537IIBjCRJalKGMJIkqZJ2Bm4EngbeAjyVthxJkqR0DGEkSVKlvAu4huj98jbgxbTlSJIkpWUII0mSKuEw4I/Ab4hVkJamLUeSJEmSlNJMoC91ETUs+/xMTl2I6s7xQC/wjdSFSJIkSZJqgyFMcdnn5xXgKKAtbTmqA23AD4Fu4FOJa5EkSao5LlEtSXBA6gJqVPZ5OQv4DvBh4OPAHckqUi0bDfyK6ANzEHBp2nIkSZIkSbVkB2Kkh1vhbXnmuZoO/B3oAs4AJgz1yVZDmwRcB7wEzEhciyRJkiRJda8F+BjwAvAksE/aclQj1gbuBp4BtkxciyRJkiRJDWUN4JfESJnfA9PSlqOENgEeA+4H1k9ciyRJkiRJDWsPYA6wEBv3NqMdgfnArcDqiWuRJEmSJKnhjQVOInrHzAa2SVuOqmRvYBHwZ2B84lokSZIkSWoqNu5tHh8GOoELcJVFSZIkSZKSsHFv4zsW6AVOI/69JUmSJElSQgMb966bthyVQQvwfaAHODJxLZIkSZIkaYA9gIfob9zbmrYcDVMH8Bui789BiWuRJEmSJEkFjAVOxsa99WoicA3wCrBb4lokSZIkSVIJbNxbf9YE/gnMA7ZOXIskSZIkSRoCG/fWj42BR4jpZBslrkWSJEmSJA2TjXtr27bAs8DtwNTEtUiSJDUUl5eUJKWyB/BTYtrLV4EfEcsf17MNgB2ATYDNiVEkaxDTr8ZntpeAxcAiYC4wB3gQuB/4B/BqtYvOsSfwf8AtwPuIGiVJklQmhjCSpJTGAscDXwTuAY4A7kxa0dBMAPYFdgd2BTYk+t48CjyQOZ1PhBmLM9sqmdtNANYhAptNM+e7gX8B1wFXADdTvWBqJnAB8Fti2lhnlY4rSZIkSZKqaDpwI/XRuLeVGDHyK2BJZrsCOBbYHmgf5v1OBt5FPP47ielaTwDfJIKaSvocEfZ8F7+gkSRJkiSp4WUb975IbTbubQcOIaYN9QJ/Aw4jwpNK2IwIYJ7IHO8PRMhTTi1E8NILHFPm+5YkSZIkSTWu1hr3tgAHA48RU3TOJwKSamkhC4XZAAAepElEQVQlpjzdRjwns4A3lOF+24FfAMuJqUiSJEmqMIccS5JqVS007n098BNgF+Ac4HRiZEoqewCnANsAZwEnMrzmuROAS4A3Ew14rypXgXXkVGIpbtW2XwKXpy5CkqRyaU1dgCRJBVwDbEmEDd8hRoK8scj+o4FDgUllOHYrEfzcCYwhVjz6JGkDGIjnZGfg08BHiKlRM4Z4H1OJxr9vJJoJN2MAA/Bl4IDURaioA4D3py5CkiRJkppNKY17TyCm6/yZkY30XIsIKZYSYUetfmExhRjN0k089lLq3JBYDvsRHAXSh9Owat1FmU2SJEmSVGW5jXufYMXGvZsQ/Vr6gB7ga8M8xnbAPGAOsPWwK62uzwDLgL9SfFWprYnHdgcRNDU7Q5jaZwgjSZIkSYmtQSwP3QdcCkwDbqA/hOkjese8c4j3uzuwEPgj5ZnSVE3bAk8DtxPTjQbaFXiFmM40sYp11TJDmNpnCCNJkiRJNWIP4CFi2lAv/QFMNoRZRIyQKcX+xCpB/wu0lb3S6lif6BHzIBFMZR1IjJS5GOhIUFetMoSpfYYwkiRJklRD1gUWs3II00eMjHkImDzIfexGBDCnUv+rBq4OzAbuyZw/kpie9X1qt7dNKoYwtc8QRpIkSZJqyIWsOA0pXxBzGYXDlR2JEOeMShdaRasQIczjRDh1bNJqapchTO0zhJEkSZKkGjGD/CNgBm49wIl5br8OMJ/oL1PvI2AGmkY04b0tdSE1zBCm9hnCSJIkSVINaGXw8GVgj5h9c27fBvwtszVqn5QtgFeJZba1MkOY2mcII0mSJEk1oBW4kv6QpZvi05KyjXo3zdz+ZOBZYO2qVl19HySa8m6TupAaZAhT+wxhJEmSJKnGbAIcApwNzKF/itJyVpyu1AU8TExj6gTelqLYBP6X6BEzKnUhNcYQpvYZwkiSJElSjZsM7AV8A7geWMLKI2POSlZd9Y0nmvQenbiOWmMIU/sMYSRJkiSpzrQBWwFHAHOJUTCTklZUffsBC4klvRUMYWqfIYwkqeG0pi5AkqQK6wHuBn5HNOH9KBFINJM/ATcBp6UuRJIkqZkZwkiSmsUngQXAr1MXksiJwAeAjVMXIkmS1KwMYSRJzWAc8HngW0Sz3mY0G7gWOC51IZIkSc3KEEaS1Aw+BiwFfpW6kMROBz4MvCZ1IZIkSc3IEEaS1AwOA35BLFPdzG4AniSCGFVeX+oCJElSbTGEkSQ1uq2BLYkQRvE8GMJIkiQlYAgjSWp0BwO3AA+lLqRGXARsCmyfupAm0JK6AEmSVFsMYSRJjW4/4LLURdSQR4F7iedFta8RpjQ1wmOQJKksDGEkSY1sfWAj4PrUhdSY64FdUxdRJq8D3g1MqPBx+nJO+wZcPvCygbcpdd98953vmCOta+D+g91HKbUWuq6UxyBJUtMwhJEkNbJdgYXAP1MXUmOuJaYjTUxdSBmcDPwBeBG4Bvg0Eb6VU26Q0JJzPvtzdssXoJS6b/by3Nu25Jzmm9o0nLoGHi/3uoHHGPjzUB5Hbu3FHoMkSU3FEEaS1MjeQvSD6UldSI25CWgHdkpdSBm8AHQTj2dX4EzgceA+4BRgR0b+fidfoJBVaFRIodAk32iT3H2HElYMp658xxuqwUbZSJKkAgxhJEmNbDPggdRF1KCXgGeBzVMXUgavAL2Z863AqMz5zYEvALcCzwPnA+8Bxpfx2C15tnLsW826ynnf2ZExhjOSJBVgCCNJamSGMIU9SKySVO+WUPhDf0fmdDXgQ8ClRAD1j8zl5Q5ChhI+VDOoqOSx8o0AMoyRJKmAUYPvIklSXZpCfPiek7qQGlUrIUwHMTplMjAWGDfg/CrAmALnxxKPoZQwpT3ndOfM+ZGOihnYi6VYHcX2HXgdg9zXSOsarNZS76/Y48jXi0a1bQNgB2CTVpje3s6mLX2s2dPHuN4+xvb0Mqa9jUWtLSxpaWVxXy9PL+/mP8TfkvuJcPPVhPVLUl0whJEkNaq1M6fzklZRu+YBuwxh/4lEADIxs40lViTKPT8ps0/2/Fgi6Ch0fjKDj8p9GVia2V4CluWcfwmYT6yANZguIoB5GPgR0TtmUQm3g/wNcAeO9hhsKlKhfUu5n0LXDaeuUkapFOpvM5RaB15fjnBJ5TUB2Le1lT06Wnn7sm7WaWuld70pdL1hGu2vXZPWNSbBhDEwfnRsLy9hwqJlTFi0DOa+zIb3PcNO9z9D34JX6WhpoadjFPcs72IWcAVwM/1TBSVJGYYwkqRGNSlz6jez+b1KBFVnEx/GxhKBSu753OClmE5gMdGfZVme808RwcmSzOXZ8y9n9smez4YtuecHMxN4U4Hr+oimzH3AJcDPgBsz151Zwn1nFQoOhhIoDBbSlPO6weoqFOYM57blqEfV0wrs0dbKR4D3tbXS9j+b07vHFrTvtgVsvT6t7W2MHsL9tQO8sgRufJC26/7DG6+8l+n3Pc2XO9qY19nDucCvcESiJP2XIYwkqVFNyJwawuT3KjEaZaPM+aVEA9vs+UUDzi8kApPs+aVEwLKQtKtPLWbl0TTZUS+PAj8Gfk4sYS01q3ZgZkcbJ3T18NodN6brozNo338HmDyOtpHe+eRx8K43xgaMfmAu/PofrH3e9Rw392W+OqqNP3f3cBIwe6THkqR6ZwgjSWpU2RBmYdIqatci4oPZ21IXMkKLM6e5o14uJUa9/C1BPUPttyJVUgvw4Y42Tu3pY+2Zu8Cx+8Bm6/y3R1JFbLYOfHN/+Pr7aP/znfCN37PXHY+xT/soru3q5vPAvZU8viTVMkMYSVKjWpY5HUf/B3X1G01MA6p3z2VOFwCnE6NeXkhXzkr9XupBvdSpoXl9exvndPey06FvhS/vS8v6U6pbQGsL7LsN7LsN7df8G467mBl3Ps5dvX2cCZxI6X2ZJKlhuES1JKlRZUfATCi6V/OaSGNM1boX2BhYEziDtAGMVAtaga+2tHDXG6ax/eyTaPnZR6sfwAy0x+vh9pMY9dOP0jppLEe1t/EwMCNtVZJUfYYwkqRGlf2GdbCmss2qUUIYgEdwOWQJYK32Nm5ob+PrPzyEttmnMGrbDVOX1K+1BY7YDR75PqP22ZYpLS1cB5yAn0kkNRH/4EmSGtVLmdPVk1ZRu6Zgs1qpkWzX3sa/p63GTrefRNun3xahRy2aMhEu/SxtZx1Ma3sbX29vYxaOWpTUJAxhJEmN6kmiL8zGqQupURsDD6UuQlJZ7D6qlb/vtRWr3HUa7Vuvn7qc0nxmT7jlG7SuOp63doziRmBq6pokqdIMYSRJjaoXeBjYLHUhNWoz4IHURUiDWA0Ym7qIGrd/awuzDpnB6D98nrZJdfZsbbsh3H4S7eutxhYdbdwGTEtdkyRVkiGMJKmRPQBskrqIGtQObADMSVyHVEwrsYT6i8D1RO+QXXB1z1y7tbbym2P3YdT/HkZrW52+s19/Ctx6Eu3TX8O00e1cg9NIJTWwOv1TLUlSSWYDO6QuogZtR3yQvS11IVIRvcDlwMeJ6YWHAzcR/Z7+ChwDbEPzvp/dsa2Vvx61J22nHgQtNdr/pVSrT4Drj6d9w6ls2DGKq4BxqWuSpEpo1v+0JEnN4TpixMdGieuoNbsSU7WeSl2INIglwC+AQ4D1gE2BLxCrnx0L/AuYD1wKfArYPE2ZVbdOexuzDtyJUWd8iDqPX/qtMg6u/jIdq47nDaNH8evU9UhSJRjCSJIa2Z3Ay0TooH67AdemLkIahjnA2cCBwJrAVsDJxBS704D7gGeAXwIfBeqkRe2QtI1p59LtNmLchR+nrd5HwAw0bTW49iu0t7TwTuDTqeuRpHIzhJEkNbIe4Grg7akLqSETgTcBV6UuRBqhPuAe4ExgX6KPyE7Aj4G1gB8BjwOPAOcAHyCCm7rW2so3x3awzaWfo6OjQbvjbDENzj2cUW2tnElMOZOkhmEII0lqdBcB+wCTUxdSI95LLN39l9SFSGXWTfQ5OpVo6LsaMQru18B0YlrTPODfwA+A/YBVklQ6fNsCx/72SDrWrrfKh+iDu8Ah/0PL2A4uxmbMkhqIIYwkqdFdQfSPODB1ITXiYOB3wPLUhUgVtgy4gVhV6c3AqsA7gVmZn38PLABuB04nRszVcjPY1nEdnP/J3eFtb0hdSnWcdTBtq4xlvdZWPpu6FkkqF0MYSVKj6yS+CT84dSE1YH3grcSogN3SliJV3SIilP0CMaJkDSKcnU1MZ5pFrLz0d+BE4C1AR5JK8ztidDubnnoQbakLqZbxo+GnhzG6rYWTgXVT1yNJ5WAII0lqBj8gekXslLqQxD5PTMXoIxrz3g0cCoxOWZSUyAvEaJhPE8HkusBhxMphhxJhzItEOPMlYmn3kQQgrcCRwOuGcdtVOkbx7bMOZvSksSOooA7tty28dXNaO9r5TupaJKkcDGEkSc3gUeBi4PjUhSS0BnAE8GVgBjES4C7gZ8CTwDeJZqZSs5oL/IpYVWkD4LVEcPkicDQxYmYB8AfgKGCLId7/dsBZxApPn2UI78NbW/nUuqvSMXOXIR6xQZxyEB3d3RwEbJy6FkkaqQZb1E6SpII2B+4lPgjdlbiWFL4F7E48/lxrAZ8CPk40L/4tMXLojqpWV319mdNLklahYg4gphJ+MHUhxHvm6cTv0G5EkLkK8BxwXc72aJH7+BJwCtFkthe4lZgm+cggxx7XMYq5P/sokw+dMZKHUN92P4XlNz7Ib7p6ODR1LZI0EoYwkqRmcjYRxsyg/0N4M3gdsZTvO4DrC+wzmviw+1lgS2IqxpnAZcRS343mVPxWvR78Erg8dRF5tBFLJ+9GrMD0FqKp7+OsGMrMy7nNNZn9s++/u4jfrS8Ry2kX+pt01FqT+faTP2R0e9N0g1nZDffDHqfS09PLhsBTqeuRpOEyhJEkNZPVgQeIxpw/T1xLNc0i+l+UOqJgNyKMeRfwBPEB8VxgYUWqk+pfB7Aj/SNldsxcdj8RxvydWCI7X/+lXuAW4MPAYwOvHNPBA194B5uedEBlCq8n63+W5U8u4JtEiCpJdckQRpLUbA4jpuZsSfSAaHSHEH0oNgWeHeJtNyYaiWaH/18A/JBoXCqpsPHEMti7ZbZtKN4DJjsq5hjgp/SPitkauHPO9+B1dmzipD/AqX/isWVdbJS6FkkaLhvzSpKazflEb5jfMLKVTurB5sCPgS8y9AAGImz5LDAN+DqwD/Ag8Cdc4loqZjFwJXAssD3wbaCzyP7twBgi5LwB2BCgFQ7ZdiOWG8CED+4Cy7vYkHhOJakuGcJIkppNHzCTGBnyzcS1VNI44HfAX4BzRnhfC4EziN4y+xMNSbNLXH8Ul7iWBjODCFoG0wrsDPwH+ETHKA7Yf3t/v7I2WgM2XYflwH6pa5Gk4TKEkSQ1o3lE/4VjqY2VV8qtjRjpMwY4vIz320Msz5u7xPVPcIlrqZhxxKpkpbYBaAfGAj9d1s26u06vWF116e1bMnpMO29PXYckDZchjCSpWV0NfJWYnrRn4lrK7YdEUPJeKtdM9w6i38wGxKpTHyea+P6c6H8hKbyZ/lEw3cByYmpSb559FxO/R7OBV9rb6N3O7icr2H0L6OzmjcDE1LVI0nCMSl2AJEkJnQ5MJkZ37AncnLacsjidCEf2InrfVNqzwNeAU4hpXp8D/kWsBvMDon9MIy5xLZUqu5zy5cB84ndmAfB8Znsuc7qAFfvGnDdjcw5ua/VL01xv3hR6+2gDdiLCdEmqK4YwkqRm9xVgHeAq4CDgz2nLGbY2YmrQR4ADgBurfPzlxOpJFxBNe48CLsElrqX7GcaKpGPa2XKLab5XH2jV8bDaBDpfXMTmGMJIqkMm65KkZtdHLMF8HjEi5iNJqxmeMUTgMZNYweiytOVwHfBuovnx5cTKSk8TI2M2TleWVD96etl0s3VSV1GbNl+HFuLviyTVHUMYSZKiN8NRRFhwPtFTpV5WJHkdcAvRd2I3YkRPrchd4vpEXOJaKtWUrh4mbmKr67y2mEZ7+yi2SF2HJA2HIYwkSf1OIabyfIgINl6XtpxBfQD4JzEVaEeimWctWgh8n/4lrifjEtdSMWsDrL1K6jJq09qrQFsr66auQ5KGwxBGkqQVXUqs7tNDLMH8ZaAjaUUrW4+YOnURMY3qLcBjSSsqTXaJ67fiEtdSMZMAJo5NXUZtmjgW6HV1JEn1yRBGkqSVPQbsApwMnECM2Hh70orCWOA4otHn5sSKTkcDXSmLGqbcJa5/xvCXuF6feF6kRjIBYOKY1GXUpoljoLsvniNJqjeGMJIk5dcJnEaEHQ8Cs4gpSu9kGCudjNBE4FgiHDqBmDa1JXBNleuohGeJfjHrAZ8AtiKWuP4b8F5i1adCpgCPA89kzkuNYgLAJOPFvCaMgZ4exqWuQ5KGwxBGkqTiniBW+tkZmE+s9nMn0ch3jQof+43AGUTQcDxwIbAhcCoREjWS7BLXWwO7Ay8RKz49RIz2mZznNp/InE4CbiUaAEuNYBnAkkb7LS+T5V3Q2hrPkSTVG0MYSZJKcyuwHxGM3Eb0MHmaCGWOoDxLL48ipkGdCNxDTNnZG/g2Me3mOCIIanTZJa43oX+J66dYcYnrDmLlJYjRMusR/y6bVLNQqUIWAiwyZsjr1WXQ1sqS1HVI0nCMSl2AJEl15m6if8lRwL7AQcS0pdWIBrO3E9OXHiSWaH4eWJSzrUpML5oArEOEBpsC04GdMpdnpz99lFj9qFk9QgQtJwCHAZ/JbH8hmvqunrNvOzEy6RZgD2K0klSvFkGEDWvmGwPW5F5dCq0t8RxJUr2p9px2SZIaUSsxjWZXYqnoTTJbKR0dnidCl/uBG4mlm+dWpsy610YEX58FtiCCr4GjenuIqRx7E8+nVI82AB679RuwYznG2DWYz/8SfnotdyzvYtvUtUjSUDkSRpKkkeslpg7dkXNZC7AuMTpjQmYbT/Q6yY6KmQu8WNVK61t2iet5xIiXfNqAMcDVwPuIUTNSSi2ZrXcIt3mytZXOh5+jwxBmZXOepWd5F/9JXYckDYchjCRJldFH9Ix5OnUhDegYYlnu9gLXtxEfev8EHAz8ukp1Sfn8CphJhK5PENMUn8xsT2UuewJYnHOb3o42nnhgLq+rcq114d9P0w08kLoOSRoOQxhJklRP1gPeQ/Glq6F/mtKviJWVflrJoqQiXs6crpPZdgC6iddw7nvxV4nQ9lHg0eVdcMfj9GH7gBV09cAzL9IBzEldiyQNhyGMJEmqJx9h8AAmVwvwE6KJ78mVKEgaxPXAJ+kPU9rI/xqeCGye2egDbnqQbny/voJ/Pgo9vbQQq6FJUt3xj7okSaonVxIrSa0KbAeMJparzjc1qS+ztQInAR8jVq9Sc3gY+ErqIojl7YcymqWbGD3zvYVLOe3R+bDRGpUprB5dfx+MaeepZV08lboWSRoOQxhJklRPbgPeT/TY2BO4JOe6DvpDmYHn1yYa+qo5HJA5TR3CjAKmEqHKKoPsm52idA5R96JRbRx//X1MMITpd9W9dHV2cUXqOiRpuAxhJElSPTswdQGqSTOBixIcdyqwE7FU/S7A9sSqaAuJ1b0KTaXrJZaqPxSYnb2wFa7+693sc9hbfc8O8OoyuOUhWntjRJwk1aXWwXeRJEmSNEAbsBXR7+VCIkSZT6zK9T5ixaOjgTcAJxJT4wbqApYCXwC2JieAAejs4eeX/4uWV5ZU5gHUm9/Phr4+luLS85LqmKm6JEmSNLjVgJ2JkS7Z0S4TiVWNbiemxt2S2V4ccNtxrPi+u5f4MvRK4FNQsL/JFS0tLP7dbUw6fNcyPYo6dt4NdPb28RtgeepaJGm4DGEkSZKkFbUSDaDfRAQvOwKbEQ125xBBy3HAzcC/ialGxdxFjHppJ3q/LAA+Dlw2yO06u3v5+Xk38PHDd6VjeA+lMTyxAG56kPa+Pi5MXYskjYQhjCRJkprdZCJsyW47ZC5bTEwR+gPRFPoW4Plh3H8nsIhY1essYnrSolJu2NvLmbMf4dO3Pgw7bTyMIzeIM66gd0w7dyzt5B+pa5GkkTCEkSRJUjNpIUa17Ew0z90p83Mr8CjwD2J1otuAu4mRK+XwJuK997+HeLtHR43id9+4lPdecWxzjoaZvxB+dg19nd2cmLoWSRopQxhJkiQ1ssnEKkXZqUU7Zy5bCvwTuBz4MtHX5dkK1vHAcG/Y2cU3r7yXA+96ArZev5wl1Yfv/pm+1lbuB/6auhZJGilDGEmSJDWqe4neLq3Ak0QPlxOIaUV3E31a6sH97a1c+Mnz+eA/vs7olpbU5VTPQ8/CmbPo7erhqNS1SFI5uES1JEmSGtWVwP7A2sD6wEzgh8QImHoJYADo7OFLdzzO8l/clLqS6vrEeSxva+X3wPWpa5GkcjCEkSRJUqP6AtFUt5LTjKrlhc5ujj7y53TOfSl1KdXx8xvhxgfpXdblKBhJjcMQRpIkSaoP53d188/9f0BnT2/qUirr/mfg4+fR3dXD52iMEE2SAEMYSZIkqV70Leti/389xuITLqEvdTGVsqQT3v19lvf1cRlwTup6JKmcDGEkSZKk+jGvs5uDTr+cvotuTl1K+fX0wkE/pOfJBczv7ObQ1PVIUrkZwkiSJEn15eq+Po7/yM/overe1KWU12cupHfW3Sxb1sU7gYWp65GkcjOEkSRJkurP6b3wnX2/R8/Nc1KXUh7HXQznXk93dw97E8uLS1LDMYSRJEmS6lBvL1/u7uE3u59Cz5/vTF3N8PX0whHn0fudP9Pd3csBwI2pa5KkSjGEkSRJUqU1bBPZxPp6ejmkq5ef7ncGvRf+PXU5Q7esC973A3ouuIHO3j7eCVyWuiZJqiRDGEmSJKl+9fb2cmRvL1879Gz6PnMhfcu7UpdUmoeehe1PoOuvd/Jqdy//A1yVuiZJqjRDGEmSJFVaS+oCmsApwAFnX8fi7b9G10PPpi6nuN/8A7b+Ct1z5nFvVw/bALNT1yRJ1WAII0mSpHJy6lE6l3b3sOWDc7nvDcfRc9pl0NmduqQVPfkC7HcGPTN/TN+y5fyos5udgMdS1yVJ1WIII0mSmkVfzmkf+cOCfNcVu2yw4w3lOIPVWeg2w31c5bhtvueFIpcPdp+l1qTCHuvsZoflXZxwwiV0bvEluq68J3VJsLQTTr8MNjmGnll38QSwZy98HqiTyVOSVB6GMJIkqRnkfrBvoX96zMCgoCVny15XaCpNsSk2wznOYHXm/lzK/tnTQscrdNtCj6OlyOUDn6tCj73YbUutSYPrBE7r6WWTxxdw5V7fit4rf7kT+qocab26DL51OUw7kq6vXsLy5V18rbOHzYFrqluJJNWGUakLkCRJqoLsh/2WPJflM/DyYvvmu+3A4xS6bmBt+eoceB+Fblus1ny1FzrWUA32vAwMfobz+DU8T3T3sA+w011P8NV3fZd3bDGN7iN2o/39O8Makyp34Dsfh1/eBOfdQPeS5XR193IWcAYwv3JHlaTa539wkiSpHs0ELmJo72XyfbgfeFnuiI5815USEhS7vtB1uZcXOm6pP4+k1kL3xSCXF6u/lHqG8vhLMZzXRzPYqhU+3drGzL4+xu65Jb3v3pZRu20BG685sjvu7oHbHoFr/g0X30LnA3PpGN3Oo8u7OAc4B3ipHA9Akuqd/zFJkqR6VIkQZiSBxGDHGey6aoYwww08SgmohlPPSGoqxBCmuNHAvqPamNkCu3f1MHHtyXS+aRNGbbYurZuuHaHM1EkwYTRMGBPbS4tjetGiZTD3JZgzDx6cB/c8RdetD9GyrItRYzp4fFknfwJ+Bfwz8eOUJEmSJJXBTIbesHWwKTqlTOEppVFsvqa0gzWprdTPlTr2YMccqJw1lGI4r49m1QpsAxzT1sL/jeng/rZWltP/2im4tbfx0ph2biNGunwYWCfFA5CkemJPGEmS1ExyP5gXGpEx8OdS+7PkXp8bfhTqgZLv/gb2Thns53x15+sPk6+Wkd53sedq4KiZ3OtH8vhVfr3AHcAdPX3Q0wnEc70usAYwIbONJ6YULcpsc7t6eLGrJ0XJklS/DGEkSVIzKfZBvpwf8ksJakq5fCgNest9rHIdbyT3a/CSRh/wdGaTJJWRS1RLkiRJkiRVgSNhJEmSihtsCpMkSVJJDGEkSVKzGG6AUuvBS63XJ0mSMpyOJEmSJEmSVAWGMJIkSZIkSVVgCCNJkiRJklQFhjCSJEmSJElVYAgjSZIkSZJUBYYwkiRJkiRJVWAII0mSJEmSVAWGMJIkSZIkSVVgCCNJkiRJklQFhjCSJEmSJElVYAgjSZIkSZJUBYYwkiRJkiRJVWAII0mSJEmSVAWGMJIkSZIkSVVgCCNJkiRJklQFo1IXIEmSNAK/S12AatIBqQuQJCmfttQFSJIkDcPzwDQc1av87gMuA65NXYgkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKk2vT/ACHHCv+MTwAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "net4, im4, fm4 = pm4py.discover_petri_net_alpha_plus(df)\n", + "pm4py.view_petri_net(net4, im4, fm4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that, by definition, the alpha miner variants cannot discover invisible transitions (black boxes).\n", + "Additionally, these algorithms have no form of formal quality guarantees w.r.t. the resulting process models.\n", + "As such, **we strongly discourage the use of the alpha miners in practice, apart from educational purposes.**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Obtaining a Process Map" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Many [commercial process mining solutions](https://www.gartner.com/reviews/market/process-mining) do not provide extended support for discovering process models.\n", + "Often, as a main visualization of processes, *process maps* are used.\n", + "A process map contains activities and connections (by means of arcs) between them.\n", + "A connection between two activities usually means that there some form of precedence relation.\n", + "In its simplest form, it means that the ‘source’ activity directly precedes the ‘target’ activity.\n", + "Let’s quickly take a look at a concrete example!\n", + "Consider the following code snippet, in which we learn a ‘Directly Follows Graph’ (DFG)-based process map." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dfg, start_activities, end_activities = pm4py.discover_dfg(df)\n", + "pm4py.view_dfg(dfg, start_activities, end_activities)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The pm4py.discover_dfg(log) function returns a triple.\n", + "The first result, i.e., called dfg in this example, is a dictionary mapping pairs of activities that follow each other directly, to the number of corresponding observations.\n", + "The second and third arguments are the start and end activities observed in the event log (again counters).\n", + "In the visualization, the green circle represents the start of any observed process instance.\n", + "The orange circle represents the end of an observed process instance.\n", + "In 6 cases, the register request is the first activity observed (represented by the arc labeled with value 6).\n", + "In the event log, the check ticket activity is executed directly after the register request activity.\n", + "The examine thoroughly activity is following registration once, examine casually follows 3 times.\n", + "Note that, indeed, in total, the register activity is followed by 6 different events, i.e., there are 6 traces in the running example event log.\n", + "However, note that there are typically much more relations observable compared to the number of cases in an event log.\n", + "Even using this simple event data, the DFG-based process map of the process is much more complex than the process models learned earlier.\n", + "Furthermore, it is much more difficult to infer the actual execution of the process based on the process map.\n", + "Hence, when using process maps, one should be very carefully when trying to comprehend the actual process." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In PM4Py, we also implemented the [Heuristics Miner](https://ieeexplore.ieee.org/iel5/5937059/5949295/05949453.pdf), a more advanced process map discovery algorithm, compared to its DFG-based alternative.\n", + "We won’t go into the algorithmic details here, however, in a HM-based process map, the arcs between activities represent observed concurrency.\n", + "For example, the algorithm is able to detect that the ticket check and examination are concurrent.\n", + "Hence, these activities will not be connected in the process map.\n", + "As such, a HM-based process map is typically simpler compared to a DFG-based process map." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "map = pm4py.discover_heuristics_net(df)\n", + "pm4py.view_heuristics_net(map)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Advanced Discovery: Handling Noise\n", + "\n", + "In the [previous tutorial](2_event_data_filtering.ipynb), we have already seen some generic ways of data filtering.\n", + "However, most of the functionalities presented there are useful for preprocessing the event data.\n", + "After preprocessing, it often happens that event data is still containing various 'problematic cases' that were hard to filter out.\n", + "We won't go into too much detail here, however, various causes of outliers and noise in cleaned event data exist.\n", + "Some algorithms have built-in filtering mechanisms, allowing you to filter the cleaned event data internally.\n", + "\n", + "Consider the following example, in which we use a 'broken' variant of the running example data (some events are missing), with and without filtering." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_broken = pd.read_csv('data/running_example_broken.csv', sep=';')\n", + "df_broken = pm4py.format_dataframe(df_broken)", + "bpmn_unfiltered = pm4py.discover_bpmn_inductive(df_broken)\n", + "pm4py.view_bpmn(bpmn_unfiltered)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bpmn_filtered = pm4py.discover_bpmn_inductive(df_broken, 0.8)\n", + "pm4py.view_bpmn(bpmn_filtered)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Observe that the first model, i.e., without any form of filtering, allows us to skip a large part of the model.\n", + "Furthermore, the model describes various 'options to go back'.\n", + "Hence, we can arbitrarily skip a lot of activities, yet, go back to previous states in the process at the same time.\n", + "This implies that the model, in fact, describes that virtually anything can happen.\n", + "\n", + "The other model, on the other hand, applies rigorous filtering.\n", + "As a result, the process model does no longer describe all possible behavior in the input event log (a guarantee by the Inductive Miner without filtering).\n", + "However, it describes much less variation.\n", + "Arguably, this is a better model for the given event data since it is much more *precise*." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Final Thoughts\n", + "The examples presented here show some great process discovery in action.\n", + "However, this article would not be complete without a few critical notes from an academic that has spent a large part of his professional career in developing and applying process mining algorithms.\n", + "First and foremost, make sure to play around with some real event data, which you can download [here](http://processmining.org/event-data.html).\n", + "You will most likely notice that the models you discover (even with various filtering threshold values) are largely useless.\n", + "They either are i) too complex or ii) too imprecise.\n", + "There are various reasons for this, some of which, we'll briefly touch upon here:\n", + "- *Data Granularity Mismatch*; The process models that we use to model (business) processes tend to be of a certain level of abstraction.\n", + "For example, in the running example, we describe the registration of a request simply as 'register request'.\n", + "However, it is very likely that the system modeling said registration, registers the effective registration request at a lower level.\n", + "Various system calls and data-base overwrites may be logged in the event data.\n", + "Often, these low level events do not follow a pre-defined sequential pattern, hence, large variability may easily exit.\n", + "Larger variability implies a larger data complexity, i.e., if 10 activities are able to occur in parallel, this implies that there are 10!=10\\*9\\*8\\*...\\*1=3.628.800 ways to schedule these activities.\n", + "However, natural bias and skew in the process execution exists, which often renders us to observe an incomplete subset.\n", + "Hence, to obtain a more reasonable process model, the recorded event data may need to be *abstracted* first.\n", + "For an elaborate overview, see [this article](http://sebastiaanvanzelst.com/wp-content/uploads/2020/04/Granular_Computing_in_Process_Mining.pdf).\n", + "- *No Contextual Activity Differentiation*;\n", + "The state-of-the-art discovery algorithms consider every activity of the same type, to be of the same type.\n", + "That sounds vague, however, an example easily clarifies this problem.\n", + "Consider modeling a process model of your daily routine.\n", + "It is likely that you sometimes shower in the morning, and, sometimes in the evening.\n", + "When modeling this as a process model, i.e., when you as a human modeler model this, it is likely that you actually create two shower activities in the model.\n", + "One of these activities represents taking a shower in the morning, whereas the other represents taking a shower in the evening.\n", + "Hence, when learning a process model of your daily routine, the discovery algorithm will place both your breakfast, and your diner close to the showering activity.\n", + "In fact, it will likely allow you to skip breakfast and diner, and, allow you to 'go back' to the dinner.\n", + "That is, the exact same problem occurs as the problem that we already observed when learning process models based on noisy data.\n", + "There are some solutions for this problem, i.e., referred to as 'label splitting' (see [this article](https://pure.tue.nl/ws/files/58626874/BPM2016Lu.pdf)).\n", + "In a nutshell, such an algorithm tries to detect if certain activities (such as 'showering') should be split up in say, an activity 'shower1' and 'shower2'.\n", + "After such a split, the algorithm will learn activity instances for both 'shower1' and 'shower2', which we can both replace by the 'shower' activity in a post-processing step.\n", + "- *Ignorance of Activity Duration*\n", + "The majority of the existing process discovery algorithms assume activities to be of an atomic fashion (i.e., they have a single timestamp and no duration).\n", + "In reality, however, most activities take some time (even automated system activities tend to take a few milliseconds).\n", + "Whereas the XES standard provides means to differentiate between start and end activities, hardly any discovery algorithm uses this information (e.g., the Inductive Miner - Life Cycle Algorithm (IMLC) does use this information).\n", + "As such, process models tend to become complex, since activity start and end are modeled in a separate manner.\n", + "Note that, even in case activities are recorded as atomic events, after applying event abstraction (i.e., see the previous point on *Data Granularity*), activity start and end timestamps are present by definition.\n", + "- *Ignorance of Domain Knowledge*\n", + "Most process discovery algorithms only look at the sequential ordering of (atomic) events, i.e., the do not exploit any indicative auxillary data.\n", + "Furthermore, they provide limited to no user interaction.\n", + "It might be the case that a certain execution of a process is happening frequently, yet, should not be executed as it is recorded, i.e., one does not aim to model the specific execution within the model.\n", + "Since the majority of the filtering algorithms that exist use trace-frequency as a primary driver (implicitly or explicitly) these type of problems will not be identified.\n", + "For example, in a real life, publicly available log concerning the administration of road-traffic fines, one of the most ocurring process executions is represented by offenders that do not pay the fine.\n", + "Clearly, one wants to exclude the possibility of not paying from any discovered representative model (although observing the fact that this happens is extremely valuable for the business).\n", + "Novel developments in the field of process mining put more emphasis on such domain knowledge integration.\n", + "\n", + "These problems described here, are just a few problems (of the many) that hamper the direct application of process mining (for example, we did not even cover the n:m-relation problem of objects and events).\n", + "This does not mean that process discovery is useless.\n", + "Rather, it is important to take into account that a discovered process model is just the starting point of an event data analysis, i.e., not the end result.\n", + "Truth be told, when analyzing real event data, visual analytic tools (e.g., the [Variant Explorer](https://fmannhardt.de/blog/static/3770b2fe8bbe79afd99c0368f22ab931/d56b5/explore-event-log.png) and the [Dotted Chart](https://a.fsdn.com/con/app/proj/prom/screenshots/LogProjection.png/max/max/1)) can reveal various useful patterns that provide insights into a process and allow further event data preprocessing.\n", + "\n", + "\n" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "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.10.1" + }, + "rise": { + "enable_chalkboard": true, + "footer": "

footer

", + "overlay": "

pm4py

Event Data Filtering

" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pm4py/notebooks/4_conformance_checking.ipynb b/pm4py/notebooks/4_conformance_checking.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..13dbcf0fbaf83b5c89f54d35517e8ad05ad36c7d --- /dev/null +++ b/pm4py/notebooks/4_conformance_checking.ipynb @@ -0,0 +1,1084 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "# Conformance Checking\n", + "*by: Sebastiaan J. van Zelst*" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + }, + "tags": [] + }, + "source": [ + "In this tutorial, we'll be focusing on *conformance checking*.\n", + "The conceptual idea of conformance checking is rather easy, i.e., computing to what degree a given process model conforms to the exeuction of a process, as recorded by the event data.\n", + "We are going to use the same process model as we have seen before, i.e., based on our [running example event log](data/running_example.csv):" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "![Running example BPMN-based process model describing the behavior of the simple process that we use in this tutorial](img/bpmn_running_example.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + }, + "tags": [] + }, + "source": [ + "However, to check conformance w.r.t. the model, we're going to use a slightly [different event log](data/running_example_broken.csv).\n", + "In this tutorial, we'll consider two types of techniques, i.e., *token-based-replay*, and, *alignments*.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "## Token-Based-Replay" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + }, + "tags": [] + }, + "source": [ + "In order to understand token-based-replay, we first need to cover a bit of Petri net theory.\n", + "Let's use the Petri net based on the clean [running example event log](data/running_example.csv), as an example." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import pm4py\n", + "df = pm4py.format_dataframe(pd.read_csv('data/running_example.csv', sep=';'), case_id='case_id',activity_key='activity',\n", + " timestamp_key='timestamp')\n", + "pn, im, fm = pm4py.discover_petri_net_inductive(df)\n", + "pm4py.view_petri_net(pn, im, fm)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + }, + "tags": [] + }, + "source": [ + "### Places and Transitions\n", + "Observe that the Petri net consists of two different type of nodes, i.e., cirlces and rectangles.\n", + "We refer to the circles as *places* and we refer to the rectangles as *transitions*.\n", + "Furthermore, notice that, a place can only be connected (by means of an arc) to a transition.\n", + "Similarly, a transition can only be connected (by means of an arc) to a place.\n", + "Hence, *places never connect directly to places* and *transitions never connect directly to transitions*." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + }, + "tags": [] + }, + "source": [ + "### Tokens, Enabledness and Transition Firing\n", + "There is one place in the model containing a black 'dot'.\n", + "This dot is referred to as a *token*.\n", + "For convienence, let's call the place containing the token 'source'.\n", + "A transition can consume and produce tokens, referred to as *firing a transition*.\n", + "A transition is allowed to fire, if all of its 'incoming places' contain at least one token.\n", + "Any transition for which this property holds is referred to as an *enabled transition*.\n", + "In the example net, only the 'source' place contains a token.\n", + "Consequently, the only transition that has a token in all of its 'incoming places' is the transition *register request*, i.e., it is enabled.\n", + "If we diced to fire the an enabled transition, it consumes one token from each of its 'incoming places' and it produces a token in each of its 'outgoing places'.\n", + "For example, if we *fire* the *register request* transition, it consumes the token in the source place and it produces a fresh token in its outgoing place (i.e., the place connected to it by means of an outgoing arc).\n", + "\n", + "*It is extremely important to note that there is no relationship between token production and consumption, i.e., tokens that are consumed cease to exist, tokens that are produced are always \"fresh tokens\"*.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + }, + "tags": [] + }, + "source": [ + "### Token-Based-Replay - The Basics\n", + "When we use token-based-based-replay, we are effecitvely mimicking behavior observed in the event log in the context of a given process model.\n", + "\n", + "Let's assume that in the event log, we observe the trace: \n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "$\\langle \\text{register request, examine casually, check ticket, decide, reject request} \\rangle$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + }, + "tags": [] + }, + "source": [ + "The token-based replay algorithm will simply mimick the trace in the model and keep track of the number of tokens we need to produce, respectively consume to *replay* the trace in the model.\n", + "For example, the first activity in the trace, i.e., *register request*, can be directly mimicked by consuming the token in the source place.\n", + "To subsequently fire the *examine causally* activity, we need the token produced by firing the *register request* transition.\n", + "The token needs to be consumed by the *black* transition (this is referred to as an invisible transition) that connects to the output place of the *register request* transition.\n", + "Said transition will produce two fresh tokens (observe that it has two outgoing places), one of which can subsequently be consumed by the *examine casually* transition.\n", + "Essentially, the token-based-replay algorithm keeps repeating this rationale, until it has mimicked the complete trace.\n", + "\n", + "In the previous example, the trace can be completely mimicked (or *replayed*) by the model.\n", + "However, consider the trace:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "$\\langle \\text{register request, examine casually, check ticket, reject request} \\rangle$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + }, + "tags": [] + }, + "source": [ + "When analyzing the trace, we observe that a decision is missing.\n", + "The token-based-replay algorithm can detect this, i.e., it can detect that due to the lack of the *decide* transition in the trace, when mimicking it, tokens would remain in the input places of the *decide* transition, and, similarly, tokens would be missing in the input place of the *reject request* transition.\n", + "\n", + "For a given event log, the token-based-replay algorithm simply mimicks every trace in the event log, and, keeps track of the number of detected problems (missing and remaining tokens when mimicking the bahvior).\n", + "It subsequently compares the dected number of problems with the total amount of 'correct behavior' and produces a 'conformity score' (often referred to as a 'fitness' score) between $0$ and $1$.\n", + "If the score is $1$, no problems were detected.\n", + "If the score is $0$, no normal behavior was detected." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "### Token-Based-Replay in pm4py" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + }, + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "application/json": { + "ascii": false, + "bar_format": null, + "colour": null, + "elapsed": 0.00988912582397461, + "initial": 0, + "n": 0, + "ncols": null, + "nrows": 15, + "postfix": null, + "prefix": "replaying log with TBR, completed variants :: ", + "rate": null, + "total": 6, + "unit": "it", + "unit_divisor": 1000, + "unit_scale": false + }, + "application/vnd.jupyter.widget-view+json": { + "model_id": "fa4996a01e5c444896cb5920ac3f460b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "replaying log with TBR, completed variants :: 0%| | 0/6 [00:00>', 'register request'),\n", + " ('>>', None),\n", + " ('examine thoroughly', 'examine thoroughly'),\n", + " ('check ticket', 'check ticket'),\n", + " ('decide', 'decide'),\n", + " ('>>', None),\n", + " ('reject request', 'reject request')],\n", + " 'cost': 10002,\n", + " 'visited_states': 7,\n", + " 'queued_states': 22,\n", + " 'traversed_arcs': 22,\n", + " 'lp_solved': 1,\n", + " 'fitness': 0.8888888888888888,\n", + " 'bwc': 90002},\n", + " {'alignment': [('register request', 'register request'),\n", + " ('>>', None),\n", + " ('check ticket', 'check ticket'),\n", + " ('examine casually', 'examine casually'),\n", + " ('>>', 'decide'),\n", + " ('>>', None),\n", + " ('pay compensation', 'pay compensation')],\n", + " 'cost': 10002,\n", + " 'visited_states': 7,\n", + " 'queued_states': 23,\n", + " 'traversed_arcs': 23,\n", + " 'lp_solved': 2,\n", + " 'fitness': 0.8888888888888888,\n", + " 'bwc': 90002},\n", + " {'alignment': [('register request', 'register request'),\n", + " ('>>', None),\n", + " ('>>', 'examine casually'),\n", + " ('check ticket', 'check ticket'),\n", + " ('decide', 'decide'),\n", + " ('reinitiate request', '>>'),\n", + " ('>>', None),\n", + " ('pay compensation', 'pay compensation')],\n", + " 'cost': 20002,\n", + " 'visited_states': 8,\n", + " 'queued_states': 27,\n", + " 'traversed_arcs': 27,\n", + " 'lp_solved': 5,\n", + " 'fitness': 0.8,\n", + " 'bwc': 100002},\n", + " {'alignment': [('register request', 'register request'),\n", + " ('>>', None),\n", + " ('check ticket', 'check ticket'),\n", + " ('examine thoroughly', 'examine thoroughly'),\n", + " ('decide', 'decide'),\n", + " ('>>', None),\n", + " ('reject request', 'reject request')],\n", + " 'cost': 2,\n", + " 'visited_states': 7,\n", + " 'queued_states': 24,\n", + " 'traversed_arcs': 24,\n", + " 'lp_solved': 1,\n", + " 'fitness': 1.0,\n", + " 'bwc': 100002},\n", + " {'alignment': [('register request', 'register request'),\n", + " ('>>', None),\n", + " ('examine casually', 'examine casually'),\n", + " ('check ticket', 'check ticket'),\n", + " ('decide', 'decide'),\n", + " ('reinitiate the request for real', '>>'),\n", + " ('>>', 'reinitiate request'),\n", + " ('>>', None),\n", + " ('check ticket', 'check ticket'),\n", + " ('examine casually', 'examine casually'),\n", + " ('decide', 'decide'),\n", + " ('>>', 'reinitiate request'),\n", + " ('>>', None),\n", + " ('examine casually', 'examine casually'),\n", + " ('check ticket', 'check ticket'),\n", + " ('decide', 'decide'),\n", + " ('>>', None),\n", + " ('reject request', 'reject request')],\n", + " 'cost': 30004,\n", + " 'visited_states': 18,\n", + " 'queued_states': 59,\n", + " 'traversed_arcs': 59,\n", + " 'lp_solved': 19,\n", + " 'fitness': 0.8235294117647058,\n", + " 'bwc': 170002},\n", + " {'alignment': [('register request', 'register request'),\n", + " ('>>', None),\n", + " ('>>', 'examine casually'),\n", + " ('check ticket', 'check ticket'),\n", + " ('>>', 'decide'),\n", + " ('decide something', '>>'),\n", + " ('>>', None),\n", + " ('pay compensation', 'pay compensation')],\n", + " 'cost': 30002,\n", + " 'visited_states': 8,\n", + " 'queued_states': 25,\n", + " 'traversed_arcs': 25,\n", + " 'lp_solved': 2,\n", + " 'fitness': 0.6666666666666667,\n", + " 'bwc': 90002}]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pn, im, fm = pm4py.discover_petri_net_inductive(df)\n", + "pm4py.conformance_diagnostics_alignments(df_problems, pn, im, fm)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + }, + "tags": [] + }, + "source": [ + "Like token-based-replay, alignments can also be used to quantify 'fitness':" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "application/json": { + "ascii": false, + "bar_format": null, + "colour": null, + "elapsed": 0.011507749557495117, + "initial": 0, + "n": 0, + "ncols": null, + "nrows": 15, + "postfix": null, + "prefix": "aligning log, completed variants :: ", + "rate": null, + "total": 6, + "unit": "it", + "unit_divisor": 1000, + "unit_scale": false + }, + "application/vnd.jupyter.widget-view+json": { + "model_id": "85b88bb2093547bcb6586352566c96a0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "aligning log, completed variants :: 0%| | 0/6 [00:00\n", + "\"Process\n", + "
https://quixy.com/wp-content/uploads/2020/08/Quixy_Blog_Process-Mining-plays-an-essential-role-in-Digital-Transformation-1024x427.png
\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "9f7cb121-07e6-4f0f-93ce-c2a4201b3951", + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "## Installing pm4py\n", + "```pip install pm4py```" + ] + }, + { + "cell_type": "markdown", + "id": "312362a8-8068-4e15-b278-45dbe0a9fb1e", + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "## 'Hello World' " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "25945cb7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b912cfffeed74758a8baccdd832f0c3a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "parsing log, completed traces :: 0%| | 0/1434 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
org:groupconcept:instanceorg:resourceconcept:nametime:timestamplifecycle:transitioncase:startdatecase:responsiblecase:enddate_plannedcase:departmentcase:groupcase:concept:namecase:deadlinecase:channelcase:enddate
0Group 1task-42933Resource21Confirmation of receipt2011-10-11 11:45:40.276000+00:00complete2011-10-11 13:42:22.688000+02:00Resource212011-12-06 13:41:31.788000+01:00GeneralGroup 2case-100112011-12-06 13:41:31.788000+01:00InternetNaN
1Group 4task-42935Resource10T02 Check confirmation of receipt2011-10-12 06:26:25.398000+00:00complete2011-10-11 13:42:22.688000+02:00Resource212011-12-06 13:41:31.788000+01:00GeneralGroup 2case-100112011-12-06 13:41:31.788000+01:00InternetNaN
2Group 1task-42957Resource21T03 Adjust confirmation of receipt2011-11-24 14:36:51.302000+00:00complete2011-10-11 13:42:22.688000+02:00Resource212011-12-06 13:41:31.788000+01:00GeneralGroup 2case-100112011-12-06 13:41:31.788000+01:00InternetNaN
3Group 4task-47958Resource21T02 Check confirmation of receipt2011-11-24 14:37:16.553000+00:00complete2011-10-11 13:42:22.688000+02:00Resource212011-12-06 13:41:31.788000+01:00GeneralGroup 2case-100112011-12-06 13:41:31.788000+01:00InternetNaN
4EMPTYtask-43021Resource30Confirmation of receipt2011-10-18 11:46:39.679000+00:00complete2011-10-11 01:06:40.020000+02:00Resource042011-12-06 01:06:40.010000+01:00GeneralGroup 5case-100172011-12-06 01:06:40+01:00Internet2011-10-18 13:56:55.943000+02:00
\n", + "" + ], + "text/plain": [ + " org:group concept:instance org:resource concept:name \\\n", + "0 Group 1 task-42933 Resource21 Confirmation of receipt \n", + "1 Group 4 task-42935 Resource10 T02 Check confirmation of receipt \n", + "2 Group 1 task-42957 Resource21 T03 Adjust confirmation of receipt \n", + "3 Group 4 task-47958 Resource21 T02 Check confirmation of receipt \n", + "4 EMPTY task-43021 Resource30 Confirmation of receipt \n", + "\n", + " time:timestamp lifecycle:transition \\\n", + "0 2011-10-11 11:45:40.276000+00:00 complete \n", + "1 2011-10-12 06:26:25.398000+00:00 complete \n", + "2 2011-11-24 14:36:51.302000+00:00 complete \n", + "3 2011-11-24 14:37:16.553000+00:00 complete \n", + "4 2011-10-18 11:46:39.679000+00:00 complete \n", + "\n", + " case:startdate case:responsible \\\n", + "0 2011-10-11 13:42:22.688000+02:00 Resource21 \n", + "1 2011-10-11 13:42:22.688000+02:00 Resource21 \n", + "2 2011-10-11 13:42:22.688000+02:00 Resource21 \n", + "3 2011-10-11 13:42:22.688000+02:00 Resource21 \n", + "4 2011-10-11 01:06:40.020000+02:00 Resource04 \n", + "\n", + " case:enddate_planned case:department case:group \\\n", + "0 2011-12-06 13:41:31.788000+01:00 General Group 2 \n", + "1 2011-12-06 13:41:31.788000+01:00 General Group 2 \n", + "2 2011-12-06 13:41:31.788000+01:00 General Group 2 \n", + "3 2011-12-06 13:41:31.788000+01:00 General Group 2 \n", + "4 2011-12-06 01:06:40.010000+01:00 General Group 5 \n", + "\n", + " case:concept:name case:deadline case:channel \\\n", + "0 case-10011 2011-12-06 13:41:31.788000+01:00 Internet \n", + "1 case-10011 2011-12-06 13:41:31.788000+01:00 Internet \n", + "2 case-10011 2011-12-06 13:41:31.788000+01:00 Internet \n", + "3 case-10011 2011-12-06 13:41:31.788000+01:00 Internet \n", + "4 case-10017 2011-12-06 01:06:40+01:00 Internet \n", + "\n", + " case:enddate \n", + "0 NaN \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 2011-10-18 13:56:55.943000+02:00 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "df = pm4py.convert_to_dataframe(log)\n", + "df['time:timestamp']=pd.to_datetime(df['time:timestamp'], utc=True) # format the timestamp column\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7de6c5b3-df2d-42dc-a846-af9381847b93", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
org:groupconcept:instanceorg:resourceconcept:nametime:timestamplifecycle:transitioncase:startdatecase:responsiblecase:enddate_plannedcase:departmentcase:groupcase:concept:namecase:deadlinecase:channelcase:enddate
4EMPTYtask-43021Resource30Confirmation of receipt2011-10-18 11:46:39.679000+00:00complete2011-10-11 01:06:40.020000+02:00Resource042011-12-06 01:06:40.010000+01:00GeneralGroup 5case-100172011-12-06 01:06:40+01:00Internet2011-10-18 13:56:55.943000+02:00
5Group 1task-43672Resource30T06 Determine necessity of stop advice2011-10-18 11:47:06.950000+00:00complete2011-10-11 01:06:40.020000+02:00Resource042011-12-06 01:06:40.010000+01:00GeneralGroup 5case-100172011-12-06 01:06:40+01:00Internet2011-10-18 13:56:55.943000+02:00
6Group 4task-43671Resource30T02 Check confirmation of receipt2011-10-18 11:47:26.235000+00:00complete2011-10-11 01:06:40.020000+02:00Resource042011-12-06 01:06:40.010000+01:00GeneralGroup 5case-100172011-12-06 01:06:40+01:00Internet2011-10-18 13:56:55.943000+02:00
7Group 1task-43674Resource30T03 Adjust confirmation of receipt2011-10-18 11:47:41.811000+00:00complete2011-10-11 01:06:40.020000+02:00Resource042011-12-06 01:06:40.010000+01:00GeneralGroup 5case-100172011-12-06 01:06:40+01:00Internet2011-10-18 13:56:55.943000+02:00
8Group 4task-43675Resource30T02 Check confirmation of receipt2011-10-18 11:47:57.979000+00:00complete2011-10-11 01:06:40.020000+02:00Resource042011-12-06 01:06:40.010000+01:00GeneralGroup 5case-100172011-12-06 01:06:40+01:00Internet2011-10-18 13:56:55.943000+02:00
9Group 1task-43673Resource30T10 Determine necessity to stop indication2011-10-18 11:48:15.357000+00:00complete2011-10-11 01:06:40.020000+02:00Resource042011-12-06 01:06:40.010000+01:00GeneralGroup 5case-100172011-12-06 01:06:40+01:00Internet2011-10-18 13:56:55.943000+02:00
10Group 1task-43676Resource30T03 Adjust confirmation of receipt2011-10-18 11:48:30.632000+00:00complete2011-10-11 01:06:40.020000+02:00Resource042011-12-06 01:06:40.010000+01:00GeneralGroup 5case-100172011-12-06 01:06:40+01:00Internet2011-10-18 13:56:55.943000+02:00
11Group 4task-43679Resource30T02 Check confirmation of receipt2011-10-18 11:51:01.525000+00:00complete2011-10-11 01:06:40.020000+02:00Resource042011-12-06 01:06:40.010000+01:00GeneralGroup 5case-100172011-12-06 01:06:40+01:00Internet2011-10-18 13:56:55.943000+02:00
12Group 1task-43686admin2T03 Adjust confirmation of receipt2011-10-18 11:56:57.603000+00:00complete2011-10-11 01:06:40.020000+02:00Resource042011-12-06 01:06:40.010000+01:00GeneralGroup 5case-100172011-12-06 01:06:40+01:00Internet2011-10-18 13:56:55.943000+02:00
\n", + "
" + ], + "text/plain": [ + " org:group concept:instance org:resource \\\n", + "4 EMPTY task-43021 Resource30 \n", + "5 Group 1 task-43672 Resource30 \n", + "6 Group 4 task-43671 Resource30 \n", + "7 Group 1 task-43674 Resource30 \n", + "8 Group 4 task-43675 Resource30 \n", + "9 Group 1 task-43673 Resource30 \n", + "10 Group 1 task-43676 Resource30 \n", + "11 Group 4 task-43679 Resource30 \n", + "12 Group 1 task-43686 admin2 \n", + "\n", + " concept:name \\\n", + "4 Confirmation of receipt \n", + "5 T06 Determine necessity of stop advice \n", + "6 T02 Check confirmation of receipt \n", + "7 T03 Adjust confirmation of receipt \n", + "8 T02 Check confirmation of receipt \n", + "9 T10 Determine necessity to stop indication \n", + "10 T03 Adjust confirmation of receipt \n", + "11 T02 Check confirmation of receipt \n", + "12 T03 Adjust confirmation of receipt \n", + "\n", + " time:timestamp lifecycle:transition \\\n", + "4 2011-10-18 11:46:39.679000+00:00 complete \n", + "5 2011-10-18 11:47:06.950000+00:00 complete \n", + "6 2011-10-18 11:47:26.235000+00:00 complete \n", + "7 2011-10-18 11:47:41.811000+00:00 complete \n", + "8 2011-10-18 11:47:57.979000+00:00 complete \n", + "9 2011-10-18 11:48:15.357000+00:00 complete \n", + "10 2011-10-18 11:48:30.632000+00:00 complete \n", + "11 2011-10-18 11:51:01.525000+00:00 complete \n", + "12 2011-10-18 11:56:57.603000+00:00 complete \n", + "\n", + " case:startdate case:responsible \\\n", + "4 2011-10-11 01:06:40.020000+02:00 Resource04 \n", + "5 2011-10-11 01:06:40.020000+02:00 Resource04 \n", + "6 2011-10-11 01:06:40.020000+02:00 Resource04 \n", + "7 2011-10-11 01:06:40.020000+02:00 Resource04 \n", + "8 2011-10-11 01:06:40.020000+02:00 Resource04 \n", + "9 2011-10-11 01:06:40.020000+02:00 Resource04 \n", + "10 2011-10-11 01:06:40.020000+02:00 Resource04 \n", + "11 2011-10-11 01:06:40.020000+02:00 Resource04 \n", + "12 2011-10-11 01:06:40.020000+02:00 Resource04 \n", + "\n", + " case:enddate_planned case:department case:group \\\n", + "4 2011-12-06 01:06:40.010000+01:00 General Group 5 \n", + "5 2011-12-06 01:06:40.010000+01:00 General Group 5 \n", + "6 2011-12-06 01:06:40.010000+01:00 General Group 5 \n", + "7 2011-12-06 01:06:40.010000+01:00 General Group 5 \n", + "8 2011-12-06 01:06:40.010000+01:00 General Group 5 \n", + "9 2011-12-06 01:06:40.010000+01:00 General Group 5 \n", + "10 2011-12-06 01:06:40.010000+01:00 General Group 5 \n", + "11 2011-12-06 01:06:40.010000+01:00 General Group 5 \n", + "12 2011-12-06 01:06:40.010000+01:00 General Group 5 \n", + "\n", + " case:concept:name case:deadline case:channel \\\n", + "4 case-10017 2011-12-06 01:06:40+01:00 Internet \n", + "5 case-10017 2011-12-06 01:06:40+01:00 Internet \n", + "6 case-10017 2011-12-06 01:06:40+01:00 Internet \n", + "7 case-10017 2011-12-06 01:06:40+01:00 Internet \n", + "8 case-10017 2011-12-06 01:06:40+01:00 Internet \n", + "9 case-10017 2011-12-06 01:06:40+01:00 Internet \n", + "10 case-10017 2011-12-06 01:06:40+01:00 Internet \n", + "11 case-10017 2011-12-06 01:06:40+01:00 Internet \n", + "12 case-10017 2011-12-06 01:06:40+01:00 Internet \n", + "\n", + " case:enddate \n", + "4 2011-10-18 13:56:55.943000+02:00 \n", + "5 2011-10-18 13:56:55.943000+02:00 \n", + "6 2011-10-18 13:56:55.943000+02:00 \n", + "7 2011-10-18 13:56:55.943000+02:00 \n", + "8 2011-10-18 13:56:55.943000+02:00 \n", + "9 2011-10-18 13:56:55.943000+02:00 \n", + "10 2011-10-18 13:56:55.943000+02:00 \n", + "11 2011-10-18 13:56:55.943000+02:00 \n", + "12 2011-10-18 13:56:55.943000+02:00 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c17 = df[df['case:concept:name'] =='case-10017'] \n", + "c17" + ] + }, + { + "cell_type": "markdown", + "id": "04301cda-761b-414b-b9b9-9fd5a1bc26a8", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "### Exploiting Pandas" + ] + }, + { + "cell_type": "markdown", + "id": "a10a1929-5cbd-4ded-a835-254de60aad8e", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "#### Number of Cases" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d37ee91a-51ad-4a76-b86d-d1713ccdd72d", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1434" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['case:concept:name'].nunique()" + ] + }, + { + "cell_type": "markdown", + "id": "ef8ca811-6f47-40ea-bbd2-6eedcc3bde0e", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Activity Ocurrences" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "94601994-6526-4277-899f-811e052c2ac7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Confirmation of receipt 1434\n", + "T06 Determine necessity of stop advice 1416\n", + "T02 Check confirmation of receipt 1368\n", + "T04 Determine confirmation of receipt 1307\n", + "T05 Print and send confirmation of receipt 1300\n", + "T10 Determine necessity to stop indication 1283\n", + "T03 Adjust confirmation of receipt 55\n", + "T07-1 Draft intern advice aspect 1 45\n", + "T11 Create document X request unlicensed 44\n", + "T12 Check document X request unlicensed 41\n", + "T15 Print document X request unlicensed 39\n", + "T14 Determine document X request unlicensed 39\n", + "T07-2 Draft intern advice aspect 2 32\n", + "T07-5 Draft intern advice aspect 5 27\n", + "T17 Check report Y to stop indication 26\n", + "T20 Print report Y to stop indication 20\n", + "T19 Determine report Y to stop indication 20\n", + "T16 Report reasons to hold request 20\n", + "T08 Draft and send request for advice 18\n", + "T07-3 Draft intern advice hold for aspect 3 8\n", + "T09-3 Process or receive external advice from party 3 8\n", + "T09-1 Process or receive external advice from party 1 7\n", + "T07-4 Draft internal advice to hold for type 4 6\n", + "T18 Adjust report Y to stop indicition 6\n", + "T09-4 Process or receive external advice from party 4 5\n", + "T13 Adjust document X request unlicensed 2\n", + "T09-2 Process or receive external advice from party 2 1\n", + "Name: concept:name, dtype: int64" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"concept:name\"].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "871d22e5-b2fe-4dda-9fb1-feac608d0d63", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Activities in Cases" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "73689d55-cdf6-4b2a-82bb-8376fe7e0e4a", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Confirmation of receipt 1434\n", + "T02 Check confirmation of receipt 1316\n", + "T06 Determine necessity of stop advice 1309\n", + "T04 Determine confirmation of receipt 1303\n", + "T05 Print and send confirmation of receipt 1300\n", + "T10 Determine necessity to stop indication 1283\n", + "T11 Create document X request unlicensed 44\n", + "T12 Check document X request unlicensed 40\n", + "T15 Print document X request unlicensed 39\n", + "T14 Determine document X request unlicensed 39\n", + "T03 Adjust confirmation of receipt 37\n", + "T07-1 Draft intern advice aspect 1 29\n", + "T20 Print report Y to stop indication 20\n", + "T19 Determine report Y to stop indication 20\n", + "T17 Check report Y to stop indication 20\n", + "T16 Report reasons to hold request 20\n", + "T07-5 Draft intern advice aspect 5 16\n", + "T08 Draft and send request for advice 15\n", + "T07-2 Draft intern advice aspect 2 15\n", + "T09-1 Process or receive external advice from party 1 7\n", + "T07-4 Draft internal advice to hold for type 4 6\n", + "T09-4 Process or receive external advice from party 4 5\n", + "T07-3 Draft intern advice hold for aspect 3 5\n", + "T09-3 Process or receive external advice from party 3 5\n", + "T13 Adjust document X request unlicensed 2\n", + "T18 Adjust report Y to stop indicition 2\n", + "T09-2 Process or receive external advice from party 2 1\n", + "Name: concept:name, dtype: int64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby([\"case:concept:name\", \"concept:name\"]).first().reset_index()[\"concept:name\"].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "361d3a00-7e2a-4bc5-96e0-46565b6f7356", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Start Activities" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9e8fd4d7-962a-4d79-9945-c41249fb92f7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Confirmation of receipt 1434\n", + "Name: concept:name, dtype: int64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(\"case:concept:name\").first()[\"concept:name\"].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "5cee523c-5c2c-422a-ad6f-20e9639ff3c7", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### End Activities" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2170b436-a611-45b3-85d1-789c67483a94", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "T10 Determine necessity to stop indication 828\n", + "T05 Print and send confirmation of receipt 400\n", + "Confirmation of receipt 116\n", + "T15 Print document X request unlicensed 39\n", + "T06 Determine necessity of stop advice 16\n", + "T20 Print report Y to stop indication 15\n", + "T02 Check confirmation of receipt 8\n", + "T11 Create document X request unlicensed 4\n", + "T03 Adjust confirmation of receipt 2\n", + "T04 Determine confirmation of receipt 2\n", + "T07-1 Draft intern advice aspect 1 1\n", + "T13 Adjust document X request unlicensed 1\n", + "T07-5 Draft intern advice aspect 5 1\n", + "T07-2 Draft intern advice aspect 2 1\n", + "Name: concept:name, dtype: int64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(\"case:concept:name\").last()[\"concept:name\"].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "35730425-731b-4c90-be75-5b6301b08c5d", + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "## Data Exploration " + ] + }, + { + "cell_type": "markdown", + "id": "0afbe3f5-3c5b-4cf2-9870-2397bce68d4c", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "### Distribution Plotting" + ] + }, + { + "cell_type": "markdown", + "id": "142a4a66-4cfc-449c-b431-0e894ba6f301", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "#### Events per Day" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "241a27b3-ce87-4057-99d3-ea35e6ff7f08", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtQAAAI1CAYAAAD2NW3XAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAABtg0lEQVR4nO3dd3gU5f7+8XtJ2ZBAElqahIQiVTqKofdQhSMoTelYDkhT2lFpFooKWFBsFCF8pYioIEgHBaRpVOoRpHgOBJSSEBDSnt8f/jKHJQESJiEJvF/XtRfMM8/OfGZ2Nntn8syswxhjBAAAAOCW5MvpAgAAAIC8jEANAAAA2ECgBgAAAGwgUAMAAAA2EKgBAAAAGwjUAAAAgA0EagAAAMAGAjUAAABgA4EaAAAAsIFADaRj3Lhxcjgct2VdjRo1UqNGjazpjRs3yuFwaMmSJbdl/b169VJ4ePhtWdetio+PV79+/RQUFCSHw6EhQ4Zkehmpr+mff/6Z9QUizzt69KgcDodef/31nC7ljpAV79m8qFevXipQoEBOl4EcQKDGHW/OnDlyOBzWw8vLSyEhIYqMjNRbb72lCxcuZMl6Tpw4oXHjxik6OjpLlpeVcnNtGfHqq69qzpw5evrppzVv3jw9/vjjN+y7bNmy21fcNa493q59fP/99zlWW6qtW7dq3LhxOn/+fE6Xctt9/fXXGjduXI7WcPXx4O7ursKFC6tmzZoaPHiw9u3bl6O1ZZXMvGdv1ZQpU+RwOPTjjz+6tBtjVKhQITkcDh05csRl3uXLl+V0OtWtW7csrwd3N/ecLgC4XSZMmKCSJUsqMTFRMTEx2rhxo4YMGaKpU6fqyy+/VJUqVay+L7zwgkaNGpWp5Z84cULjx49XeHi4qlWrluHnrV69OlPruRU3qu3DDz9USkpKttdgx/r16/Xggw9q7NixN+376quvqlOnTurQoUP2F3YDqcfbtcqUKZMD1bjaunWrxo8fr169esnf3z+ny7mtvv76a82YMSPHQ3Xz5s3Vo0cPGWMUGxurn376SXPnztW7776ryZMna9iwYTlan12Zec/eqnr16kmSvvvuO1WvXt1q37t3r86fPy93d3dt2bLF5X24c+dOJSQkWM8FsgqBGneNVq1aqVatWtb06NGjtX79erVt21YPPfSQ9u/fr/z580uS3N3d5e6evW+PS5cuydvbW56entm6npvx8PDI0fVnxOnTp1WxYsWcLiNTrj3ecPukvrdys7Jly+qxxx5zaZs0aZLatWunZ599VuXLl1fr1q1zqDr7bsd7tlatWvLy8tJ3332nZ555xmrfsmWLihQpolq1aum7775z2c/fffedJBGokeUY8oG7WpMmTfTiiy/q2LFjmj9/vtWe3hjqNWvWqF69evL391eBAgVUrlw5/etf/5L097jn+++/X5LUu3dv68+5c+bMkfT3OOn77rtPu3fvVoMGDeTt7W0999ox1KmSk5P1r3/9S0FBQfLx8dFDDz2k33//3aVPeHi4evXqlea5Vy/zZrWlN4b64sWLevbZZxUaGiqn06ly5crp9ddflzHGpZ/D4dDAgQO1bNky3XfffXI6napUqZJWrVqV/g6/xunTp9W3b18FBgbKy8tLVatW1dy5c635qePJjxw5ohUrVli1Hz16NN3lORwOXbx4UXPnzrX6Xrt/zp8/b52Z9fPzU+/evXXp0qU0y5o/f75q1qyp/Pnzq3DhwurSpUua/X+rEhMTVbhwYfXu3TvNvLi4OHl5eem5556z2q5cuaKxY8eqTJkycjqdCg0N1YgRI3TlypU023+z12PcuHEaPny4JKlkyZJp9umNjvMbSUpK0ksvvaTSpUvL6XQqPDxc//rXv1xqbNu2rUqVKpXu8yMiItL8ApKR1+BG761r9erVSzNmzLD2VerjWh988IG1Hffff7927tyZps+BAwfUqVMnFS5cWF5eXqpVq5a+/PLLG++kmyhSpIg+/fRTubu765VXXrHaExISNGbMGNWsWVN+fn7y8fFR/fr1tWHDBquPMUbh4eFq3759muVevnxZfn5+evLJJ622t99+W5UqVZK3t7cKFSqkWrVqacGCBTetMavfs5I0e/ZsNWnSRAEBAXI6napYsaLee++9m9bi6emp+++/X1u2bHFp37JliyIiIlS3bt105/n7++u+++6TJKWkpGj69OmqVKmSvLy8FBgYqCeffFLnzp1Ls76VK1eqfv368vHxUcGCBdWmTRvt3bv3pnVGR0erWLFiatSokeLj42/aH3mUAe5ws2fPNpLMzp07053/+++/G0mmU6dOVtvYsWPN1W+PPXv2GE9PT1OrVi3z5ptvmpkzZ5rnnnvONGjQwBhjTExMjJkwYYKRZJ544gkzb948M2/ePHP48GFjjDENGzY0QUFBplixYuaZZ54x77//vlm2bJk1r2HDhta6NmzYYCSZypUrmypVqpipU6eaUaNGGS8vL1O2bFlz6dIlq29YWJjp2bNnmm26epk3q61nz54mLCzMem5KSopp0qSJcTgcpl+/fuadd94x7dq1M5LMkCFDXNYjyVStWtUEBwebl156yUyfPt2UKlXKeHt7mz///POGr8ulS5dMhQoVjIeHhxk6dKh56623TP369Y0kM336dKv2efPmmaJFi5pq1apZtcfHx6e7zHnz5hmn02nq169v9d26davLa1q9enXz8MMPm3fffdf069fPSDIjRoxwWc7LL79sHA6H6dy5s3n33XfN+PHjTdGiRU14eLg5d+7cDbcr9Xhbu3at+eOPP1weV++TPn36GH9/f3PlyhWX58+dO9fleE1OTjYtWrQw3t7eZsiQIeb99983AwcONO7u7qZ9+/aZfj1++ukn07VrVyPJTJs2zWWf3uw4v5GePXta76MZM2aYHj16GEmmQ4cOVp9PPvnESDI7duxwee7Ro0eNJPPaa69l+jW40XvrWlu3bjXNmzc3kqztnjdvnjHGmCNHjljHR5kyZczkyZPNlClTTNGiRU3x4sVNQkKCtZw9e/YYPz8/U7FiRTN58mTzzjvvmAYNGhiHw2GWLl16030lyQwYMOC685s2bWry5ctnYmNjjTHG/PHHHyY4ONgMGzbMvPfee2bKlCmmXLlyxsPDw/z444/W855//nnj4eFhzpw547K8RYsWGUlm8+bNxhhjPvjgA+u1ev/9982bb75p+vbtawYNGnTDurPjPWuMMffff7/p1auXmTZtmnn77bdNixYtjCTzzjvv3LAeY4wZPXq0kWSOHDlitZUqVcq8+uqrZu3atcbhcFjHS0pKiilUqJBp1aqV1bdfv37G3d3d9O/f38ycOdOMHDnS+Pj4mPvvv9/lNf/kk0+Mw+EwLVu2NG+//baZPHmyCQ8PN/7+/i7r7tmzp/Hx8bGmd+zYYQoVKmSaN2/u8rMbdx4CNe54NwvUxhjj5+dnqlevbk1fG6inTZtmJJk//vjjusvYuXOnkWRmz56dZl7Dhg2NJDNz5sx056UXqO+55x4TFxdntad+KL755ptWW0YC9c1quzZQL1u2zEgyL7/8sku/Tp06GYfDYQ4dOmS1STKenp4ubT/99JORZN5+++0067ra9OnTjSQzf/58qy0hIcFERESYAgUKuGx7WFiYadOmzQ2Xl8rHxyfdfZL6mvbp08el/R//+IcpUqSINX306FHj5uZmXnnlFZd+v/zyi3F3d0/Tfq3U4y29h9PptPp98803RpL56quvXJ7funVrU6pUKWt63rx5Jl++fObbb7916Tdz5kwjyWzZssVqy+jr8dprr6UJIcZk7DhPT3R0tJFk+vXr59L+3HPPGUlm/fr1xhhjYmNjjdPpNM8++6xLvylTphiHw2GOHTtmjMnca3Cj91Z6BgwY4PLeTpUaqIsUKWLOnj1rtX/xxRdpXqemTZuaypUrm8uXL1ttKSkppk6dOubee++9aQ03C9SDBw82ksxPP/1kjDEmKSkpzS9e586dM4GBgS7H88GDB40k895777n0feihh0x4eLhJSUkxxhjTvn17U6lSpZvWea3ses+mFzQjIyNd3gfXs2LFCusXJGOMOXnypJFkNm3aZC5cuGDc3NzMihUrjDF//yIkyTp+vv32WyPJREVFuSxz1apVLu0XLlww/v7+pn///i79YmJijJ+fn0v71YH6u+++M76+vqZNmzYuxwruTAz5ACQVKFDghnf7SL1w64svvrjlC/icTme6f+K/nh49eqhgwYLWdKdOnRQcHKyvv/76ltafUV9//bXc3Nw0aNAgl/Znn31WxhitXLnSpb1Zs2YqXbq0NV2lShX5+vrqt99+u+l6goKC1LVrV6vNw8NDgwYNUnx8vDZt2pQFW5PWU0895TJdv359nTlzRnFxcZKkpUuXKiUlRY8++qj+/PNP6xEUFKR7773X5c/sNzJjxgytWbPG5XH1vmvSpImKFi2qhQsXWm3nzp3TmjVr1LlzZ6tt8eLFqlChgsqXL+9ST5MmTSQpTT23+npIt36cpx6T115I9+yzz0qSVqxYIUny9fVVq1attGjRIpfhQwsXLtSDDz6oEiVKSMr8a5DZ99aNdO7cWYUKFbKm69evL0nW/jt79qzWr1+vRx99VBcuXLBqO3PmjCIjI/Xrr7/qv//9r60aUm+7lvozyc3NzbrWIiUlRWfPnlVSUpJq1aqlH374wXpe2bJlVbt2bUVFRVltZ8+e1cqVK9W9e3dreIu/v7/+85//pDuU5Uay6z2beu2KJMXGxurPP/9Uw4YN9dtvvyk2NvaGz61Tp47y5ctnjY3esmWLPDw8dP/996tAgQKqUqWKNewj9d/U8dOLFy+Wn5+fmjdv7nKc1axZUwUKFLCOszVr1uj8+fPq2rWrSz83NzfVrl073Z8JGzZsUGRkpJo2baqlS5fK6XTe0r5B3sFFiYD+vmdqQEDAded37txZH330kfr166dRo0apadOmevjhh9WpUyfly5ex30vvueeeTF2AeO+997pMOxwOlSlT5oZjEbPCsWPHFBIS4hLmJalChQrW/KulhqCrFSpUKN0xiNeu5957702z/663nqxybb2p4encuXPy9fXVr7/+KmNMmv2fKqMXcT7wwAM3vCjR3d1dHTt21IIFC3TlyhU5nU4tXbpUiYmJLoH6119/1f79+1WsWLF0l3P69Okbbp+UsddDuvXj/NixY8qXL1+aO5gEBQXJ39/f5bXs3Lmzli1bpm3btqlOnTo6fPiwdu/erenTp7tsc2Zeg8y+t27kRseHJB06dEjGGL344ot68cUX013G6dOndc8999xyDanjbK9+D86dO1dvvPGGDhw4oMTERKv92jvJ9OjRQwMHDtSxY8cUFhamxYsXKzEx0eW2dSNHjtTatWv1wAMPqEyZMmrRooW6deumunXr3rCu7HrPbtmyRWPHjtW2bdvSXM8QGxsrPz+/6z7X399flSpVcgnN1atXt0J6nTp1XOZ5enrqgQcekPT3cRYbG3vdn/2p761ff/1VkqxfYq/l6+vrMn358mW1adNGNWvW1KJFi7L9AnfkDrzKuOv95z//UWxs7A1vZ5Y/f35t3rxZGzZs0IoVK7Rq1SotXLhQTZo00erVq+Xm5nbT9Vx9FiarXO/LZ5KTkzNUU1a43nrMNRcw5hY3qzclJUUOh0MrV65Mt29WfmlDly5d9P7772vlypXq0KGDFi1apPLly6tq1apWn5SUFFWuXFlTp05NdxmhoaEu03ZeD7vHeUa+DKldu3by9vbWokWLVKdOHS1atEj58uXTI488YvXJ7GuQle+tjBwfkvTcc88pMjIy3b52b424Z88eubm5WWF5/vz56tWrlzp06KDhw4crICBAbm5umjhxog4fPuzy3C5dumjo0KGKiorSv/71L82fP1+1atVSuXLlrD4VKlTQwYMHtXz5cq1atUqfffaZ3n33XY0ZM0bjx4+3VXtmHT58WE2bNlX58uU1depUhYaGytPTU19//bWmTZuW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WbKky/yaNWvKw8ND69ats9oOHjyo48ePKyIiQpIUERGhX375RadPn7b6rFmzRr6+vqpYsaLV5+plpPZJXQYAAABwq3L0DPWAAQO0YMECffHFFypYsKA15tnPz0/58+eXn5+f+vbtq2HDhqlw4cLy9fXVM888o4iICD344IOSpBYtWqhixYp6/PHHNWXKFMXExOiFF17QgAEDrLPMTz31lN555x2NGDFCffr00fr167Vo0SKtWMEV9AAAALAnR89Qv/fee4qNjVWjRo0UHBxsPRYuXGj1mTZtmtq2bauOHTuqQYMGCgoK0tKlS635bm5uWr58udzc3BQREaHHHntMPXr00IQJE6w+JUuW1IoVK7RmzRpVrVpVb7zxhj766CNFRkbe1u0FAADAnSdX3Yc6t+I+1AByAvehTov7UAO4XfLsfagBAACAvIZADQAAANhAoAYAAABsIFADAAAANhCoAQAAABsI1AAAAIANBGoAAADABgI1AAAAYAOBGgAAALCBQA0AAADY4J7TBQC3G1/nnBZf5wwAwK3jDDUAAABgA4EaAAAAsIFADQAAANhAoAYAAABsIFADAAAANhCoAQAAABsI1AAAAIANBGoAAADABgI1AAAAYAOBGgAAALCBQA0AAADYQKAGAAAAbCBQAwAAADYQqAEAAAAbCNQAAACADQRqAAAAwAYCNQAAAGADgRoAAACwgUANAAAA2ECgBgAAAGwgUAMAAAA2EKgBAAAAGwjUAAAAgA0EagAAAMAGAjUAAABgA4EaAAAAsIFADQAAANhAoAYAAABsIFADAAAANhCoAQAAABsI1AAAAIANBGoAAADAhhwN1Js3b1a7du0UEhIih8OhZcuWucx3OBzpPl577TWrT3h4eJr5kyZNclnOzz//rPr168vLy0uhoaGaMmXK7dg8AAAA3AVyNFBfvHhRVatW1YwZM9Kdf/LkSZfHrFmz5HA41LFjR5d+EyZMcOn3zDPPWPPi4uLUokULhYWFaffu3Xrttdc0btw4ffDBB9m6bQAAALg7uOfkylu1aqVWrVpdd35QUJDL9BdffKHGjRurVKlSLu0FCxZM0zdVVFSUEhISNGvWLHl6eqpSpUqKjo7W1KlT9cQTT9jfCAAAANzV8swY6lOnTmnFihXq27dvmnmTJk1SkSJFVL16db322mtKSkqy5m3btk0NGjSQp6en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LZOPj48uXLhwS/stO6Se/bv60bRp0zT7TEo75GPHjh2qXr26vLy8VKtWLf34448uy05OTlbfvn2t90m5cuX05ptvWvM3b94sDw8PxcTEuDxvyJAhql+/fvZt9C04f/68vv32W02ePFmNGzdWWFiYHnjgAY0ePVoPPfSQpBsfExs3blTv3r0VGxub5i8x6Q2l8ff315w5cyT9byjNwoUL1bBhQ3l5eSkqKkrJyckaNmyY/P39VaRIEY0YMULX3jl41apVqlevntWnbdu2Ln9ha9KkiQYOHOjynD/++EOenp4u38Z8O91sX6c3tOj8+fNyOBzWz/G7/fM/SxjkaT179jTt27c3U6dONU2bNrXamzZtaqZNm2bat29vevbsaYwxZtCgQSYkJMR8/fXXZu/evaZnz56mUKFC5syZM8YYYzZs2GAkmdq1a5uNGzeavXv3mvr165s6depYy124cKFxOp3mo48+MgcOHDDPP/+8KViwoKlatarVZ926dWbevHlm//79Zt++faZv374mMDDQxMXFGWOM2bJli3FzczMnTpywnrN06VLj4+NjLly4kI17K+Nmz55t/Pz8rOmxY8e6bKMxxkybNs2EhYVZ0/PnzzfBwcHms88+M7/99pv57LPPTOHChc2cOXOMMca89tprJjQ01GzevNkcPXrUfPvtt2bBggXGGGOSk5PNfffdZ5o2bWqio6PNpk2bTPXq1Y0k8/nnn1vreOmll8yWLVvMkSNHzJdffmkCAwPN5MmTrfnNmzc3//znP13qrFKlihkzZkzW7Jj/r1u3bqZFixbW9P33328WL15snnrqKWtdly5dMk6n08yZM8e8/PLLpnz58mbVqlXm8OHDZvbs2cbpdJqNGzcaY4w5fvy4cTqdZtiwYebAgQNm/vz5JjAw0Egy586dM8b8/Zp4eHiYZs2amZ07d5rdu3ebChUqmG7dull13A2vwbXHZqqMvH9Tf15cbfDgwaZhw4bWdMOGDU2BAgXM8OHDzYEDB8yBAwfM4sWLja+vr/n666/NsWPHzPbt280HH3xgPadVq1amatWqZtu2bWbXrl2mTp06Jn/+/GbatGlWn2nTppn169ebI0eOmHXr1ply5cqZp59+2prfv39/07p1a5faHnroIdOjR49b21HZIL39Z0z6+8wY43LsXLhwwRQrVsx069bN7Nmzx3z11VemVKlSRpL58ccfjTHGJCQkmDFjxpidO3ea3377zcyfP994e3ubhQsXWusqW7asmTJlijWdkJBgihYtambNmpVt230rEhMTTYECBcyQIUPM5cuX0+1zo2PiypUrZvr06cbX19ecPHnSnDx50vp8uPY9aYwxfn5+Zvbs2cYYY44cOWIkmfDwcOtnwYkTJ8zkyZNNoUKFzGeffWZ9NhUsWNDlNV2yZIn57LPPzK+//mp+/PFH065dO1O5cmWTnJxsjDEmKirKFCpUyGWbpk6dasLDw01KSkoW7b3Mudm+Tt0fqceZMcacO3fOSDIbNmwwxvD5nxUI1Hlc6g/406dPG6fTaY4ePWqOHj1qvLy8zB9//GEF6vj4eOPh4WGioqKs5yYkJJiQkBDrh3PqG2rt2rVWnxUrVhhJ5q+//jLGGBMREZEmLNSuXTtN2LxacnKyKViwoPnqq6+stooVK7qEkHbt2plevXrZ2hdZ6VYCdenSpa1wluqll14yERERxhhjnnnmGdOkSZN0f+h+8803xt3d3fz3v/+12lauXJnuB8fVXnvtNVOzZk1reuHChS4/7Hfv3m0cDoc5cuTITbY4cz788EPj4+NjEhMTTVxcnHF3dzenT582CxYsMA0aNDDG/P2DVZI5evSo8fb2Nlu3bnVZRt++fU3Xrl2NMcaMHj3aVKxY0WX+yJEj0wRqSebQoUNWnxkzZpjAwEBr+m54DW4WqG/0/s1ooK5evbpLnzfeeMOULVvWJCQkpFnvwYMHjSSzY8cOq23//v1GkkugvtbixYtNkSJFrOnt27e7fNCeOnXKuLu7W7905QY9e/Y0bm5uxsfHx3p06tQp3X1mjGvwe//9902RIkWs18IYY9577700QedaAwYMMB07drSmJ0+ebCpUqGBNf/bZZ6ZAgQImPj7e/gZmsSVLlphChQoZLy8vU6dOHTN69Gjz008/Xbf/tcfE9Y71jAbq6dOnu/QJDg52+WUkMTHRFC9ePN1fklL98ccfRpL55ZdfjDHG/PXXX6ZQoUIuv+RUqVLFjBs37rrLuB1utK8zE6j5/L91DPm4QxQrVkxt2rTRnDlzNHv2bLVp00ZFixa15h8+fFiJiYmqW7eu1ebh4aEHHnhA+/fvd1lWlSpVrP8HBwdL+vtPupK0f/9+1a5d26V/RESEy/SpU6fUv39/3XvvvfLz85Ovr6/i4+N1/Phxq0+/fv2scYinTp3SypUr1adPHzu7IEddvHhRhw8fVt++fVWgQAHr8fLLL1t/LuzVq5eio6NVrlw5DRo0SKtXr7aev3//foWGhiokJMRqu3a/Sn+Pn61bt671Z/4XXnjBZb926NBBbm5u+vzzzyX9PUyicePGaYam2NWoUSNdvHhRO3fu1LfffquyZcuqWLFiatiwoTWOeuPGjSpVqpTi4+N16dIlNW/e3GXffPLJJ9a+ychxJUne3t4u47GDg4OtY/Nuew2u50bv34yqWbOmy/Qjjzyiv/76S6VKlVL//v31+eefWxel7t+/X+7u7i7PKV++fJqLydauXaumTZvqnnvuUcGCBfX444/rzJkzunTpkiTpgQceUKVKlTR37lxJ0vz58xUWFqYGDRpkqvbs1rhxY0VHR1uPt956S1LafXat/fv3q0qVKtb1BVL6x9eMGTNUs2ZNFStWTAUKFNAHH3zgcnz16tVLhw4dsoZWzZkzR48++qh8fHyyYvOyVMeOHXXixAl9+eWXatmypTZu3KgaNWpYQzNudkzYVatWLev/sbGxOnnypMvPGXd3d5c+0t/Dvrp27apSpUrJ19fXet+mvgZeXl56/PHHNWvWLEnSDz/8oD179uT4xf8329cZxef/rSNQ30H69OmjOXPmaO7cubYOzqsv3HA4HJKUqbGfPXv2VHR0tN58801t3bpV0dHRKlKkiBISEqw+PXr00G+//aZt27Zp/vz5KlmyZK4bA3i1fPnypRlrlzpuVpI17u/DDz90+bDds2eP9cFXo0YNHTlyRC+99JL++usvPfroo+rUqVOGa9i2bZu6d++u1q1ba/ny5frxxx/1/PPPu+xXT09P9ejRQ7Nnz1ZCQoIWLFiQLT+oypQpo+LFi2vDhg3asGGDGjZsKEkKCQlRaGiotm7dqg0bNqhJkybWvlmxYoXLvtm3b1+aMbM3c+1FRQ6Hw3pd7rbX4Hpu9P692XGc6tpwFhoaqoMHD+rdd99V/vz59c9//lMNGjRI97npOXr0qNq2basqVaros88+0+7duzVjxgxJctl3/fr1swLA7Nmz1bt3b2sbcgsfHx+VKVPGeqSGjqwItJ9++qmee+459e3bV6tXr1Z0dLR69+7tso8CAgLUrl07zZ49O0+EES8vLzVv3lwvvviitm7dql69emns2LEZPibSc/X7PlVGjuOMaNeunc6ePasPP/xQ27dv1/bt29PU1K9fP61Zs0b/+c9/NHv2bDVp0kRhYWGZXldWu96+zpfv76h39T673nuXz/9bx10+7iAtW7ZUQkKCHA6HdVFMqtKlS8vT01Nbtmyx3viJiYnauXOnhgwZkuF1VKhQQdu3b1ePHj2stqsvQpOkLVu26N1331Xr1q0lSb///rv+/PNPlz5FihRRhw4dNHv2bG3btk29e/fOzKbedsWKFVNMTIyMMdYPmasv8AgMDFRISIh+++03de/e/brL8fX1VefOndW5c2d16tRJLVu21NmzZ1WhQgX9/vvvOnnypPUBfe1+3bp1q8LCwvT8889bbceOHUuzjn79+um+++7Tu+++q6SkJD388MN2Nv26GjdurI0bN+rcuXMaPny41d6gQQOtXLlSO3bs0NNPP62KFSvK6XTq+PHjVvC+VoUKFfTll1+6tF27/TdzN74GmVWsWDHt2bPHpS06OjpDdz/Inz+/2rVrp3bt2mnAgAEqX768fvnlF5UvX15JSUnavXu37r//fknSwYMHXe6HvXv3bqWkpOiNN96wPtwXLVqUZh2PPfaYRowYobfeekv79u1Tz549bWxt7lKhQgXNmzfP5S446f3srFOnjv75z39abendcrJfv37q2rWrihcvrtKlS7v85TG3q1ixopYtW5ahY8LT01PJyclpllGsWDGXi5F//fXXm57V9vPzU3BwsLZv32791SP1uK1Ro4Yk6cyZMzp48KA+/PBDK+B99913aZZVuXJl1apVSx9++KEWLFigd955JxN74PZJ3depd6E5efKkdaOCW7n3+d36+Z9RBOo7iJubmzV8w83NzWWej4+Pnn76aQ0fPlyFCxdWiRIlNGXKFF26dEl9+/bN8DoGDx6sXr16qVatWqpbt66ioqK0d+9elSpVyupz7733at68eapVq5bi4uI0fPhw63Z+V+vXr5/atm2r5OTkXP/B2ahRI/3xxx+aMmWKOnXqpFWrVmnlypXy9fW1+owfP16DBg2Sn5+fWrZsqStXrmjXrl06d+6chg0bpqlTpyo4OFjVq1dXvnz5tHjxYgUFBcnf31/NmjVT2bJl1bNnT7322muKi4tzCW3S3/v1+PHj+vTTT3X//fdrxYoV1rCCq1WoUEEPPvigRo4cqT59+qS777NC48aNNWDAACUmJroE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kO66r1y5okGDBikgIEBeXl6qV6+edu7cKUk6evSoHA6Hzpw5oz59+sjhcKR7hrpRo0Y6duyYhg4dap1tv9o333yjChUqqECBAtYvD1f76KOPVKFCBXl5eal8+fJ69913r7uvypUrp+DgYG3cuNFq27hxo9q3b6+SJUvq+++/d2lv3LixpL+/tnjixIkqWbKk8ufPr6pVq6bZV3v27FGrVq1UoEABBQYG6vHHH9eff/553VpWrFghPz8/RUVFXbcPANwMgRoAskmTJk1UtWpVLV261GrLly+f3nrrLe3du1dz587V+vXrNWLECEmSj4+PunTpotmzZ7ssZ/bs2erUqZMKFiyY7npGjBihzz77THPnztUPP/ygMmXKKDIyUmfPnlVoaKhOnjwpX19fTZ8+XSdPnlTnzp3TLGPp0qUqXry4JkyYoJMnT7oE5kuXLun111/XvHnztHnzZh0/flzPPfecNT8qKkpjxozRK6+8ov379+vVV1/Viy++qLlz51533zRu3FgbNmywpjds2KBGjRqpYcOGVvtff/2l7du3W4F64sSJ+uSTTzRz5kzt3btXQ4cO1WOPPaZNmzZJks6fP68mTZqoevXq2rVrl1atWqVTp07p0UcfTbeGBQsWqGvXroqKilL37t2vWysA3JQBANjSs2dP0759+3Tnde7c2VSoUOG6z128eLEpUqSINb19+3bj5uZmTpw4YYwx5tSpU8bd3d1s3Lgx3efHx8cbDw8PExUVZbUlJCSYkJAQM2XKFKvNz8/PzJ49+4bbERYWZqZNm+bSNnv2bCPJHDp0yGqbMWOGCQwMtKZLly5tFixY4PK8l156yURERFx3XR9++KHx8fExiYmJJi4uzri7u5vTp0+bBQsWmAYNGhhjjFm3bp2RZI4dO2YuX75svL29zdatW12W07dvX9O1a1drnS1atHCZ//vvvxtJ5uDBg8YYYxo2bGgGDx5s3nnnHePn53fd/QoAmeGew3keAO5oxhiX4RNr167VxIkTdeDAAcXFxSkpKUmXL1/WpUuX5O3trQceeECVKlXS3LlzNWrUKM2fP19hYWFq0KBBuss/fPiwEhMTVbduXavNw8NDDzzwgPbv358l2+Dt7e0yhjk4OFinT5+W9PcwlcOHD6tv377q37+/1ScpKUl+fn7XXWajRo108eJF7dy5U+fOnVPZsmVVrFgxNWzYUL1799bly5e1ceNGlSpVSiVKlNDevXt16dIlNW/e3GU5CQkJql69uiTpp59+0oYNG1SgQIE06zt8+LDKli0rSVqyZIlOnz6tLVu26P7777/1HQMA/x+BGgCy0f79+1WyZElJf49nbtu2rZ5++mm98sorKly4sL777jv17dtXCQkJ8vb2liT169dPM2bM0KhRozR79mz17t07zZjm28nDw8Nl2uFwyBgjSdb47w8//FC1a9d26efm5nbdZZYpU0bFixfXhg0bdO7cOTVs2FCSFBISotDQUG3dulUbNmxQkyZNXNazYsUK3XPPPS7LcjqdVp927dpp8uTJadYXHBxs/b969er64YcfNGvWLNWqVStH9y2AOwOBGgCyyfr16/XLL79o6NChkqTdu3crJSVFb7zxhvLl+/sSlkWLFqV53mOPPaYRI0borbfe0r59+9SzZ8/rrqN06dLy9PTUli1bFBYWJklKTEzUzp07M32/ZU9PTyUnJ2fqOYGBgQoJCdFvv/2W6XHIjRs31saNG3Xu3DkNHz7cam/QoIFWrlypHTt26Omnn5YkVaxYUU6nU8ePH7fC97Vq1Kihzz77TOHh4XJ3v/7HW+nSpfXGG2+oUaNGcnNz0zvvvJOpugHgWgRqAMgCV65cUUxMjJKTk3Xq1CmtWrVKEydOVNu2bdWjRw9Jf5+VTUxM1Ntvv6127dppy5YtmjlzZpplFSpUSA8//LCGDx+uFi1aqHjx4tddr4+Pj55++mkNHz5chQsXVokSJTRlyhRdunRJffv2zdQ2hIeHa/PmzerSpYucTqeKFi2aoeeNHz9egwYNkp+fn1q2bKkrV65o165dOnfunIYNG3bd5zVu3FgDBgxQYmKiS0hu2LChBg4cqISEBOuCxIIFC+q5557T0KFDlZKSonr16ik2NlZbtmyRr6+vevbsqQEDBujDDz9U165dNWLECBUuXFiHDh3Sp59+qo8++sjljHnZsmWtCyHd3d1vy/23AdzBcnoQNwDkdT179jSSjCTj7u5uihUrZpo1a2ZmzZplkpOTXfpOnTrVBAcHm/z585vIyEjzySefGEnm3LlzLv1SL8hbtGjRTdf/119/mWeeecYULVrUOJ1OU7duXbNjxw6XPhm5KHHbtm2mSpUqxul0mtSPh9mzZxs/Pz+Xfp9//rm59uMjKirKVKtWzXh6eppChQqZBg0amKVLl95wfUeOHDGSTPny5V3ajx49aiSZcuXKubSnpKSY6dOnm3LlyhkPDw9TrFgxExkZaTZt2mT1+fe//23+8Y9/GH9/f5M/f35Tvnx5M2TIEJOSkmKM+d9Fian27dtnAgICzLBhw25YKwDciMOY/z8QDgCQa8ybN09Dhw7ViRMn5OnpmdPlAABugCEfAJCLXLp0SSdPntSkSZP05JNPEqYBIA/gi10AIBeZMmWKypcvr6CgII0ePTqnywEAZABDPgAAAAAbOEMNAAAA2ECgBgAAAGwgUAMAAAA2EKgBAAAAGwjUAAAAgA0EagAAAMAGAjUAAABgA4EaAAAAsOH/AUn+RpCcmyyXAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pm4py.view_events_distribution_graph(df, distr_type=\"days_week\") # Matplotlib inside!" + ] + }, + { + "cell_type": "markdown", + "id": "11a3fe7a-9c19-469f-aad3-ac1099d7f773", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Events per Hour" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d8460dc9-abe3-4ba1-a0b8-abb7078d5218", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtQAAAI1CAYAAAD2NW3XAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZ30lEQVR4nO3de3zP9f//8ft7Z8Y2wzZzmIWcD6E0hFjmkJz6oFTIoQOfHEoop9QnkRAp1bdQETpQqWjOpTXHlbSEnIpZYZvjNtvz90eXvX+9bXi/vd6zjdv1cnldLt7P1/P9fD6e74P33cvr/XrbjDFGAAAAAK6KR0EXAAAAABRlBGoAAADAAgI1AAAAYAGBGgAAALCAQA0AAABYQKAGAAAALCBQAwAAABYQqAEAAAALCNQAAACABQRqoAiaOHGibDbbNZmrVatWatWqlf32+vXrZbPZ9PHHH1+T+fv27avKlStfk7mu1unTpzVgwACFhYXJZrNp2LBhLo+R85z+/fff7i8QRd6BAwdks9k0bdq0gi4FQB4I1EABmz9/vmw2m33z8/NTeHi4YmJiNGvWLJ06dcot8xw5ckQTJ05UQkKCW8Zzp8JcmzNefPFFzZ8/X4899pjef/99Pfjgg5ftu3z58mtX3EUufr1dvP3www8FVluO77//XhMnTlRKSkpBl3LNffXVV5o4cWKB1mCz2TRkyJA89+W8frZu3XqNqwIKN6+CLgDAPyZNmqTIyEhlZmYqKSlJ69ev17BhwzR9+nR9/vnnqlevnr3v2LFjNXr0aJfGP3LkiJ577jlVrlxZDRo0cPp+33zzjUvzXI3L1fb2228rOzs732uwYu3atbr99ts1YcKEK/Z98cUXde+996pLly75X9hl5LzeLla1atUCqMbR999/r+eee059+/ZVUFBQQZdzTX311VeaM2dOgYdqAK4hUAOFRPv27dW4cWP77TFjxmjt2rW6++67dc899ygxMVHFihWTJHl5ecnLK3/fvmfPnlXx4sXl4+OTr/Ncibe3d4HO74zk5GTVqlWroMtwycWvN1w7Oe8tOC87O1sZGRny8/Mr6FKAPHHKB1CItW7dWuPGjdPBgwf1wQcf2NvzOoc6NjZWzZs3V1BQkEqUKKHq1avrmWeekfTPec+33nqrJKlfv372/96fP3++pH/Ok65Tp462bdumFi1aqHjx4vb7XnwOdY6srCw988wzCgsLk7+/v+655x4dPnzYoU/lypXVt2/fXPf995hXqi2vc6jPnDmjJ598UhUrVpSvr6+qV6+uadOmyRjj0C/nv66XL1+uOnXqyNfXV7Vr19bKlSvzfsAvkpycrP79+ys0NFR+fn6qX7++FixYYN+fcz75/v379eWXX9prP3DgQJ7j2Ww2nTlzRgsWLLD3vfjxSUlJsR+ZDQwMVL9+/XT27NlcY33wwQdq1KiRihUrpuDgYPXq1SvX43+1MjMzFRwcrH79+uXal5aWJj8/Pz311FP2tvT0dE2YMEFVq1aVr6+vKlasqKefflrp6em51n+l52PixIkaOXKkJCkyMjLXY3q51/nlXLhwQc8//7yqVKkiX19fVa5cWc8884xDjXfffbduuummPO8fFRWV6x8gzjwHl3tvXaxv376aM2eO/bHK2S721ltv2ddx6623asuWLbn6/Prrr7r33nsVHBwsPz8/NW7cWJ9//vnlHyQL1q5dqzvuuEP+/v4KCgpS586dlZiY6NDnUt+HyOvvs5zXysKFC1W7dm35+vraXyeLFy9Wo0aNVLJkSQUEBKhu3bp69dVX821tgDM4Qg0Ucg8++KCeeeYZffPNNxo4cGCefXbt2qW7775b9erV06RJk+Tr66u9e/dq06ZNkqSaNWtq0qRJGj9+vAYNGqQ77rhDktS0aVP7GMePH1f79u3Vq1cvPfDAAwoNDb1sXf/73/9ks9k0atQoJScna+bMmYqOjlZCQoL9SLoznKnt34wxuueee7Ru3Tr1799fDRo00KpVqzRy5Ej9+eefmjFjhkP/7777Tp9++qkef/xxlSxZUrNmzVL37t116NAhlS5d+pJ1nTt3Tq1atdLevXs1ZMgQRUZG6qOPPlLfvn2VkpKioUOHqmbNmnr//fc1fPhwVahQQU8++aQkqWzZsnmO+f7772vAgAG67bbbNGjQIElSlSpVHPr06NFDkZGRmjx5srZv367/+7//U0hIiKZMmWLv87///U/jxo1Tjx49NGDAAP3111+aPXu2WrRooR07djh1mkRqamquL0DabDaVLl1a3t7e6tq1qz799FO9+eabDv9LsXz5cqWnp6tXr16S/jlyeM899+i7777ToEGDVLNmTe3cuVMzZszQb7/9lut88Ss9H926ddNvv/2mDz/8UDNmzFCZMmXsj+mVXueXM2DAAC1YsED33nuvnnzyScXHx2vy5MlKTEzUsmXLJEk9e/bUQw89pC1bttj/kSdJBw8e1A8//KCXX375qp4DZ99bjzzyiI4cOaLY2Fi9//77efZZtGiRTp06pUceeUQ2m01Tp05Vt27d9Pvvv9v/N2fXrl1q1qyZypcvr9GjR8vf319Lly5Vly5d9Mknn6hr165XfLzOnz+f5xdkT58+natt9erVat++vW666SZNnDhR586d0+zZs9WsWTNt3779qr9UvHbtWi1dulRDhgxRmTJlVLlyZcXGxuq+++5TmzZt7O+JxMREbdq0SUOHDr2qeQC3MAAK1Lx584wks2XLlkv2CQwMNLfccov99oQJE8y/374zZswwksxff/11yTG2bNliJJl58+bl2teyZUsjycydOzfPfS1btrTfXrdunZFkypcvb9LS0uztS5cuNZLMq6++am+LiIgwffr0ueKYl6utT58+JiIiwn57+fLlRpJ54YUXHPrde++9xmazmb1799rbJBkfHx+Hth9//NFIMrNnz84117/NnDnTSDIffPCBvS0jI8NERUWZEiVKOKw9IiLCdOzY8bLj5fD398/zMcl5Th9++GGH9q5du5rSpUvbbx84cMB4enqa//3vfw79du7caby8vHK1Xyzn9ZbX5uvra++3atUqI8l88cUXDvfv0KGDuemmm+y333//fePh4WG+/fZbh35z5841ksymTZvsbc4+Hy+//LKRZPbv3+8wpjOv87wkJCQYSWbAgAEO7U899ZSRZNauXWuMMSY1NdX4+vqaJ5980qHf1KlTjc1mMwcPHjTGuPYcXO69lZfBgwebvD6a9+/fbySZ0qVLmxMnTtjbP/vss1zPU5s2bUzdunXN+fPn7W3Z2dmmadOmplq1ales4VKvj39v//77qkGDBiYkJMQcP37c3vbjjz8aDw8P89BDD9nbLn4v57j477OcGjw8PMyuXbsc2ocOHWoCAgLMhQsXrrgO4FrilA+gCChRosRlr/aRczTss88+u+ov8Pn6+ub5X/yX8tBDD6lkyZL22/fee6/KlSunr7766qrmd9ZXX30lT09PPfHEEw7tTz75pIwx+vrrrx3ao6OjHY4C16tXTwEBAfr999+vOE9YWJjuu+8+e5u3t7eeeOIJnT59Whs2bHDDanJ79NFHHW7fcccdOn78uNLS0iRJn376qbKzs9WjRw/9/fff9i0sLEzVqlXTunXrnJpnzpw5io2Nddj+/di1bt1aZcqU0ZIlS+xtJ0+eVGxsrHr27Glv++ijj1SzZk3VqFHDoZ7WrVtLUq56rvb5kK7+dZ7zmhwxYoRDe87/KHz55ZeSpICAALVv315Lly51OH1oyZIluv3221WpUiVJrj8Hrr63Lqdnz54qVaqU/XbO/+jkPH4nTpzQ2rVr1aNHD506dcpe2/HjxxUTE6M9e/bozz//vOI8nTt3zvX6iI2NtZ+Ok+Po0aNKSEhQ3759FRwcbG+vV6+e7rrrLkt/H7Rs2TLXdxOCgoJ05swZxcbGXvW4QH7glA+gCDh9+rRCQkIuub9nz576v//7Pw0YMECjR49WmzZt1K1bN917773y8HDu383ly5d36QuI1apVc7hts9lUtWrVS54/7C4HDx5UeHi4Q5iX/jl1JGf/v+WEoH8rVaqUTp48ecV5qlWrluvxu9Q87nJxvTnh6eTJkwoICNCePXtkjMn1+Odw9kuct91222W/lOjl5aXu3btr0aJFSk9Pl6+vrz799FNlZmY6BOo9e/YoMTHxkqe5JCcnX3Z9knPPh3T1r/ODBw/Kw8Mj1xVMwsLCFBQU5PBc9uzZU8uXL1dcXJyaNm2qffv2adu2bZo5c6bDml15Dlx9b13O5V4fkrR3714ZYzRu3DiNGzcuzzGSk5NVvnz5y85ToUIFRUdH52r/448/HG7nPHbVq1fP1bdmzZpatWqVzpw5I39//8vOl5e8rkLz+OOPa+nSpWrfvr3Kly+vtm3bqkePHmrXrp3L4wPuRKAGCrk//vhDqampl72cWbFixbRx40atW7dOX375pVauXKklS5aodevW+uabb+Tp6XnFeVw579lZl/rxmaysLKdqcodLzWMu+gJjYXGlerOzs2Wz2fT111/n2bdEiRJuq6VXr15688039fXXX6tLly5aunSpatSoofr169v7ZGdnq27dupo+fXqeY1SsWNHhtpXnw+rr3JkfQ+rUqZOKFy+upUuXqmnTplq6dKk8PDz0n//8x97H1efAne8tZ14fkvTUU08pJiYmz74FdWnEy/19kJe8HreQkBAlJCRo1apV+vrrr/X1119r3rx5euihhxy+MAxcawRqoJDL+XLSpT4cc3h4eKhNmzZq06aNpk+frhdffFHPPvus1q1bp+joaLf/suKePXscbhtjtHfvXofrZZcqVSrPH+c4ePCgw9UUXKktIiJCq1ev1qlTpxyOUv/666/2/e4QERGhn376SdnZ2Q5HP63OY/V5qFKliowxioyM1M0332xprCtp0aKFypUrpyVLlqh58+Zau3atnn322Vz1/Pjjj2rTpo3bXmOXG+dKr/O8REREKDs7W3v27LH/D4MkHTt2TCkpKQ7Ppb+/v+6++2599NFHmj59upYsWaI77rhD4eHh9j75+RxYfQxz3lfe3t6XfDzcKeex2717d659v/76q8qUKWM/On25vw9c4ePjo06dOqlTp07Kzs7W448/rjfffFPjxo0rFNdRx42Jc6iBQmzt2rV6/vnnFRkZqd69e1+y34kTJ3K15fxASs5lwXI+1Nz163Pvvfeew3ndH3/8sY4ePar27dvb26pUqaIffvhBGRkZ9rYVK1bkurSYK7V16NBBWVlZeu211xzaZ8yYIZvN5jC/FR06dFBSUpLDOcQXLlzQ7NmzVaJECbVs2fKqxvX397f0HHTr1k2enp567rnnch3VNcbo+PHjVz32xTw8PHTvvffqiy++0Pvvv68LFy44nO4h/XNVkj///FNvv/12rvufO3dOZ86ccXneS70enHmd56VDhw6S5HDahiT7UfWOHTs6tPfs2VNHjhzR//3f/+nHH3/Mteb8fA6svk9DQkLUqlUrvfnmmzp69Giu/X/99ddV15aXcuXKqUGDBlqwYIFDzT///LO++eYb+2Mv/fP3QWpqqn766Sd729GjR+1XWXHGxY+th4eH/R/xl3sNAPmNI9RAIfH111/r119/1YULF3Ts2DGtXbtWsbGxioiI0Oeff37ZHzSYNGmSNm7cqI4dOyoiIkLJycl6/fXXVaFCBTVv3lzSPx9mQUFBmjt3rkqWLCl/f381adIkz/MUnREcHKzmzZurX79+OnbsmGbOnKmqVas6XNpvwIAB+vjjj9WuXTv16NFD+/bt0wcffJDrUnGu1NapUyfdeeedevbZZ3XgwAHVr19f33zzjT777DMNGzYs19hXa9CgQXrzzTfVt29fbdu2TZUrV9bHH3+sTZs2aebMmbnO4XZWo0aNtHr1ak2fPl3h4eGKjIxUkyZNnL5/lSpV9MILL2jMmDE6cOCAunTpopIlS2r//v1atmyZBg0a5HCN6EvJeb1drGnTpg7/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79xaHAAAAFDYuRyoP/nkE8XExKhYsWLavn270tPTJUmpqal68cUX3V4gAAAAUJi5HKhfeOEFzZ07V2+//ba8vb3t7c2aNdP27dvdWhwAAABQ2LkcqHfv3q0WLVrkag8MDFRKSoo7agIAAACKDJcDdVhYmPbu3Zur/bvvvtNNN93klqIAAACAosLlQD1w4EANHTpU8fHxstlsOnLkiBYuXKinnnpKjz32WH7UCAAAABRaLl82b/To0crOzlabNm109uxZtWjRQr6+vnrqqaf03//+Nz9qBAAAAAotlwO1zWbTs88+q5EjR2rv3r06ffq0atWqpRIlSuRHfQAAAECh5vIpHx988IHOnj0rHx8f1apVS7fddhthGgAAADcslwP18OHDFRISovvvv19fffWVsrKy8qMuAAAAoEhwOVAfPXpUixcvls1mU48ePVSuXDkNHjxY33//fX7UBwAAABRqLgdqLy8v3X333Vq4cKGSk5M1Y8YMHThwQHfeeaeqVKmSHzUCAAAAhZbLX0r8t+LFiysmJkYnT57UwYMHlZiY6K66AAAAgCLB5SPUknT27FktXLhQHTp0UPny5TVz5kx17dpVu3btcnd9AAAAQKHm8hHqXr16acWKFSpevLh69OihcePGKSoqKj9qAwAAAAo9lwO1p6enli5dqpiYGHl6euZHTQAAAECR4XKgXrhwYX7UAQAAABRJTp9D3aFDB6Wmptpvv/TSS0pJSbHfPn78uGrVquXW4gAAAIDCzulAvWrVKqWnp9tvv/jiizpx4oT99oULF7R79273VgcAAAAUck4HamPMZW8DAAAAN6KrumweAAAAgH84HahtNptsNluuNgAAAOBG5vRVPowx6tu3r3x9fSVJ58+f16OPPip/f39Jcji/GgAAALhROB2o+/Tp43D7gQceyNXnoYcesl4RAAAAUIQ4HajnzZuXn3UAAAAARRJfSgQAAAAsIFADAAAAFhCoAQAAAAsI1AAAAIAFTgXqhg0b6uTJk5KkSZMm6ezZs/laFAAAAFBUOBWoExMTdebMGUnSc889p9OnT+drUQAAAEBR4dRl8xo0aKB+/fqpefPmMsZo2rRpKlGiRJ59x48f79YCAQAAgMLMqUA9f/58TZgwQStWrJDNZtPXX38tL6/cd7XZbARqAAAA3FCcCtTVq1fX4sWLJUkeHh5as2aNQkJC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MmWKNmzYoPbt27vlv7iTk5N1+vRpvfTSS2rXrp2++eYbde3aVd26ddOGDRvcUH1uCxYsUMmSJV0+5fByZs+erVq1aqlChQry8fFRu3btNGfOHLVo0cLy2DnBdsyYMTp58qQyMjI0ZcoU/fHHH1f1fs7OztawYcPUrFkz1alTR5Lc8hl9pTncyZnxr+Yz2tk5rvYzuqDdMD89jqIjLS1NHTt2VK1atTRx4kS3j9+7d2/dddddOnr0qKZNm6YePXpo06ZNLp1TmJfPP/9ca9eudfo83av177/A6tatq3LlyqlNmzbat2+fqlSpYmnsnHOAH3nkEfXr10+SdMstt2jNmjV69913NXnyZEvjX+zcuXNatGiRxo0b59Zxx40bp5SUFK1evVplypTR8uXL1aNHD3377beqW7eupbHLli2rjz76SI899phmzZolDw8P3XfffWrYsKFL55nfKDIzM9WjRw8ZY/TGG2+4ffw777xTCQkJ+vvvv/X222+rR48e9v9lsWLbtm169dVXtX379qv+PoQzevXqZf9z3bp1Va9ePVWpUkXr169XmzZtLI2d837u3Lmzhg8fLklq0KCBvv/+e82dO1ctW7a0NH5e3n33XfXu3dvy36f/Nnv2bP3www/6/PPPFRERoY0bN2rw4MEKDw93OOp7Nby9vfXpp5+qf//+Cg4Olqenp6Kjo9W+fXuZq/gh6cGDB+vnn392y/9WFdQcVxrfHZ/Rl5sjvz6j8xt/+xcBZcqUkaenZ65vBB87dkxhYWEKCwtTRkZGrm/05ux3xxxWOTv+qVOn1K5dO5UsWVLLli2Tt7e32+cIDAxUtWrV1KJFC3388cf69ddftWzZMsvjr127Vvv27VNQUJC8vLzs/w3WvXt3p041cGUN/9akSRNJ0t69ey2PX65cOUlSrVq1HPbXrFnT6asCuLKGjz/+WGfPntVDDz3k1NjOjL9v3z699tprevfdd9WmTRvVr19fEyZMUOPGja/45TNn62/btq327dun5ORk/f3333r//ff1559/6qabbnJ6HZeSM0d+vRevpZwwffDgQcXGxrr96LQk+fv7q2rVqrr99tv1zjvvyMvLS++8847lcb/99lslJyerUqVK9vfzwYMH9eSTT6py5crWC7+Em266SWXKlHHq/XwlZcqUkZeXl6X3syu+/fZb7d69WwMGDHDbmOfO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AIXUJ598otq1a8vX11eVK1fWK6+84rDfZrNp+fLlDm1BQUGaP3++JOnAgQOy2WxasmSJWrZsKT8/Py1cuDDPuRYvXqy77rpLfn5+Du1vvPGGqlSpIh8fH1WvXl3vv/++fV/lypX1ySef6L333pPNZlPfvn3zHDsrK0sjRoxQUFCQSpcuraefflrGGIc+K1euVPPmze197r77bu3bt8++v3Xr1hoyZIjDff766y/5+PhozZo1kiRPT0916NBBixcvzrMOAMgvBGoAKIS2bdumHj16qFevXtq5c6cmTpyocePG2cOyK0aPHq2hQ4cqMTFRMTExefb59ttv1bhxY4e2ZcuWaejQoXryySf1888/65FHHlG/fv20bt06SdKWLVvUrl079ejRQ0ePHtWrr76a59ivvPKK5s+fr3fffVffffedTpw4oWXLljn0OXPmjEaMGKGtW7dqzZo18vDwUNeuXe2nbwwYMECLFi1Senq6/T4ffPCBypcvr9atW9vbbrvtNn377bcuP0YAYIkBAFwzffr0MZ6ensbf399h8/PzM5LMyZMnjTHG3H///eauu+5yuO/IkSNNrVq17LclmWXLljn0CQwMNPPmzTPGGLN//34jycycOfOKdQUGBpr33nvPoa1p06Zm4MCBDm3/+c9/TIcOHey3O3fubPr06XPZscuVK2emTp1qv52ZmWkqVKhgOnfufMn7/PXXX0aS2blzpzHGmHPnzplSpUqZJUuW2PvUq1fPTJw40eF+n332mfHw8DBZWVmXrQkA3Ikj1ABwjd15551KSEhw2P7v//7PoU9iYqKaNWvm0NasWTPt2bPHpatwSMp15Dkv586dy3W6x6VqSExMdHru1NRUHT16VE2aNLG3eXl55appz549uu+++3TTTTcpICBAlStXliQdOnRIkuTn56cHH3xQ7777riRp+/bt+vnnn3OdZlKsWDFlZ2c7HMkGgPzmVdAFAMCNxt/fX1WrVnVo++OPP1wex2az5ToXOa8vHfr7+19xrDJlyujkyZMu1+AunTp1UkREhN5++22Fh4crOztbderUUUZGhr3PgAED1KBBA/3xxx+aN2+eWrdurYiICIdxTpw4IX9/fxUrVuxaLwHADYwj1ABQCNWsWVObNm1yaNu0aZNuvvlm+2XtypYtq6NHj9r379mzR2fPnr2q+W655Rb98ssvTtVQq1Ytp8cNDAxUuXLlFB8fb2+7cOGCtm3bZr99/Phx7d69W2PHjlWbNm1Us2bNPMN93bp11bhxY7399ttatGiRHn744Vx9fv75Z91yyy1O1wcA7sARagAohJ588kndeuutev7559WzZ0/FxcXptdde0+uvv27v07p1a7322muKiopSVlaWRo0aJW9v76uaLyYmRgsWLHBoGzlypHr06KFbbrlF0dHR+uKLL/Tpp59q9erVLo09dOhQvfTSS6pWrZpq1Kih6dOnO1xvu1SpUipdurTeeustlStXTocOHdLo0aPzHGvAgAEaMmSI/P391bVr11z7v/32W7Vt29al+gDAKo5QA0Ah1LBhQy1dulSLFy9WnTp1NH78eE2aNMnhnOFXXnlFFStW1B133KH7779fTz31lIoXL35V8/Xu3Vu7du3S7t277W1dunTRq6++qmnTpql27dp68803NW/ePLVq1cqlsZ988kk9+OCD6tOnj6KiolSyZEmHMOzh4aHFixdr27ZtqlOnjoYPH66XX345z7Huu+8+eXl56b777st1zveff/6p77//Xv369XOpPgCwymYuPgEPAHBDGjlypNLS0vTmm28WdCmXdODAAVWpUkVbtmxRw4YNHfaNGjVKJ0+e1FtvvVVA1QG4UXGEGgAgSXr22WcVERFRKH+6OzMzU0lJSRo7dqxuv/32XGFakkJCQvT8888XQHUAbnQcoQYAFHrr16/XnXfeqZtvvlkff/yx6tatW9AlAYAdgRoAAACwgFM+AAAAAAsI1AAAAIAFBGoAAADAAgI1AAAAYAGBGgAAALCAQA0AAABYQKAGAAAALCBQAwAAABb8P421EZY4uGf4AAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pm4py.view_events_distribution_graph(df, distr_type=\"hours\") # Matplotlib inside!" + ] + }, + { + "cell_type": "markdown", + "id": "75020f71-a429-4f4a-8115-adfe133e046c", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Event Distribution Plot" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "b92622ec-78b0-4d45-9ca2-457969ac724b", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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++wz9OjRA25ubujRo0eDP3/++edSl9cuEhISZP/DRQk9AuxTjuTca0BAgCx7++mnnzBv3jw899xzSE5ObnDu6tWrGDFihESVmR7DjRl6++238dRTT2HKlCnYs2cPTp8+jdOnT2PPnj2YOnUqnnrqKXmtJHkDSriwqIQeAfYpR0roVS4hbt26dZg8eTJycnIQGxuL6OhofP3118bz1dXVOHDggIQVmhbn3JihDz74AKtXr75uOfCwsDAMGzYMkZGR+Pvf/47FixdLVKFpTJs27YbnS0pKrtu91tIooUeAfdaTS5+Asnq9GTmEuLfffhsrVqzAk08+CQDYsGED5s6di6qqKjz00EMSV2d6DDdmKC8vDxEREU2ej4iIMK4uacm2bduG0aNHN7lZm6Xvwgsoo0eAfdaTS5+AcnpVSoi7cOECJk2aZPz8nnvugYeHByZPnoyamhrceeedElZnegw3Zqhv375488038fnnn8PKquFLpNfrsWzZMvTt21ei6kwnLCwM06dPb/K3hvj4eGzfvr2dqzItJfQIsM96cukTUE6vSglxzs7OyM3NRVBQkPHY8OHDsX37dkycOBFXrlyRsDrTY7gxQx988AHGjBkDb29v3H777Q12bz148CBsbGzw888/S1xl6/Xp0wcnT55s8oenRqNBYGBgO1dlWkroEWCf9eTSJ6CcXpUS4vr164cdO3ZgwIABDY4PHToU27Ztw8SJEyWqrG3wVnAzVVpaiq+++gpHjx5tcCt4TEwM7r33Xjg7O0tcYevpdDro9XrY29tLXUqbUUKPAPuUI6X0+uCDD8Le3h4ffvhho+d///13jB8/HikpKe1cmWkdOHAAR44cwZIlSxo9v2/fPqxduxarV69u58raBsMNEREpllJCnNLwVnALVFNTg/T0dKnLaHO1tbWy71MJPQLsU47k0qtGo2GwgXxez3oMNxbo7NmzDSaFydWZM2dk36cSegTYpxwppVe5vek3RW6vJ8MNERFRE+T2pq8UvFvKDPXu3fuG5ysrK9upkralhD6V0CPAPuvJpU9AWb0qgdJeT4YbM3T27FnMnDmzyd8WsrOzcf78+XauyvSU0KcSegTYZz259Akop1elvOkr5fWsx3BjhsLDw9G/f3889thjjZ6Pj4/Hp59+2s5VmZ4S+lRCjwD7rCeXPgHl9KqUN32lvJ71GG7M0KBB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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pm4py.view_events_per_time_graph(log) # Matplotlib inside!" + ] + }, + { + "cell_type": "markdown", + "id": "28a82970-fdbf-4d0e-aaa1-953de3bc0c0d", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Case Duration Distribution" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "0af95ab1-2827-4bbc-830f-8ebe952ea642", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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puuvv16XXnqppkyZouTkZLndbn322WeaOnWq/1Rkh8OhDz/8UCtWrNAnn3ziP5X62Wef1YoVKxQbGyufz6d69erp3XffLfW96tatW659K9qnFi1a+Lc5HI5S23q9XrlcrhLbz+6dkaS//e1v+stf/qJ7771XEydOVK1ateR0OjVmzJhKOxW7tFollZhADCA4VSbQ9O3bV3379j3n47m5ufrzn/+s999/X+np6WrTpo0mT55c7CyJQJz9wf3000+refPm6t69e1CvBwSiX79+euWVV7R8+XJ16dLlvG0/+eQT5ebm6l//+lexXoJzDQ9dffXVuvrqq/XUU0/pvffe05AhQzRz5kyNHDlSzZs31+eff65u3bqVGhzK6+2335Yk9enTx7+tZs2aSk9PL9F2165duuiii8r0uh9++KF69uyp119/vdj29PT0YqePnys8laZp06b6/PPPdfz48WK9ND/99JP/cQCVp8oMOV3I6NGjtXz5cs2cOVPff/+9Bg8erBtvvFFbtmwp92vn5eXpnXfe0b333hvQByIQrEceeUQxMTEaOXKkDh48WOLxbdu26bnnnpN0umfgzJ6AjIwMpaWlFXvOsWPHSvQWFC0uVzTsdMcdd8jr9WrixIkl3rOgoKDU4FFW7733nl577TV16dJF119/vX978+bNtWLFCuXl5fm3zZs3T3v27Cnza7tcrhL7NmvWLO3du7fYtpiYGEkq037cdNNN8nq9evHFF4ttnzp1qhwOx3n/wAIQelWmh+Z8du/erbS0NO3evVtJSUmSpHHjxmn+/PlKS0vT3/72t3K9/ty5c5Wenl7qWhlARWjevLnee+893XnnnWrVqlWxlYK/+eYbzZo1y//z2Lt3b7ndbvXv31+jRo1SVlaWXn31VdWrV0/79+/3v+abb76p//u//9OgQYPUvHlzHT9+XK+++qri4+N10003SSqcZzNq1ChNmjRJ69evV+/evRUZGaktW7Zo1qxZeu6553T77bdfsP4PP/xQsbGxysvL868UvGzZMrVr106zZs0q1nbkyJH68MMPdeONN+qOO+7Qtm3b9M477xSbYHsh/fr105NPPqkRI0aoa9eu2rBhg959990SPTzNmzdXYmKiXn75ZcXFxSkmJkadO3cudV5O//791bNnT/35z3/Wzp071a5dOy1cuFAff/yxxowZE1B9AELA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ZGRkscfXrl0bkuLsrsapU7ezcgssrgQAgOotqEAzcODAEJcRnmJPTQTOJtAAAGCpoALNhAkTQl1HWIqNKjx89NAAAGCtoObQSFJ6erpee+01PfbYYzp69KikwqGmvXv3hqw4uyvqoSHQAABgraB6aL7//nv16tVLCQkJ2rlzp37961+rVq1amj17tnbv3q233nor1HXaUgyBBgAAWwiqh2bs2LEaPny4tmzZoqioKP/2m266SV999VXIirO7uKJAk0OgAQDASkEFmlWrVmnUqFEltjdq1EgHDhwod1Hhgjk0AADYQ1CBxuPxKDMzs8T2n3/+WXXr1i13UeEi1lN4ujqBBgAAawUVaG655RY9+eSTys/PlyQ5HA7t3r1bf/zjH3XbbbeFtEA7i/WcWoeGIScAACwVVKB59tlnlZWVpbp16+rkyZPq3r27WrRoobi4OD311FOhrtG2GHICAMAegjrLKSEhQYsWLdKyZcv03XffKSsrS1dccYV69eoV6vpsjSEnAADsIeBA4/P5NGPGDM2ePVs7d+6Uw+FQs2bN1KBBAxlj5HA4KqJOW2IdGgAA7CGgISdjjG655RaNHDlSe/fuVdu2bdW6dWvt2rVLw4cP16BBgyqqTluK5bRtAABsIaBAM2PGDH311VdavHix1q1bp/fff18zZ87Ud999p88//1xffPFF0IvqPf3003I4HBozZkxQz7dC0RwaruUEAIC1Ago077//vv70pz+pZ8+eJR677rrr9Oijj+rdd98NuIhVq1bpH//4hy6//PKAn2slfw9NXoF8PmNxNQAAVF8BBZrvv/9eN9544zkf79u3r7777ruACsjKytKQIUP06quvqmbNmgE912pFgcYY6US+1+JqAACovgIKNEePHlX9+vXP+Xj9+vV17NixgApITU3VzTffHJZnSEVFOuVyFk6CZh4NAADWCegsJ6/Xq4iIcz/F5XKpoKDsv9hnzpyptWvXatWqVWVqn5ubq9zcXP/90lYrrkwOh0OxnghlnMznTCcAACwUUKAxxmj48OHyeDylPn5m2LiQPXv26MEHH9SiRYuKXeDyfCZNmqQnnniizO9RGQg0AABYz2GMKfNs1hEjRpSpXVpa2gXbzJ07V4MGDZLL5fJv83q9cjgccjqdys3NLfaYVHoPTXJysjIyMhQfH1/GvQitPlO/0uaDx/XOfZ11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Ns3SGgA7+Oqrr9S/f38lJSXJ4XBo7ty5AT3/8ccfl8PhKHGLiYmpkHoJNEA1cODAAf3+97/XRRddJI/Ho+TkZPXv37/EdWuqk3OFp1WrVuk3v/lN5RcE2Ex2drbatWunl156Kajnjxs3Tvv37y92u+yyyzR48OAQV1oookJeFYBt7Ny5U926dVNiYqL+/ve/q23btsrPz9eCBQuUmpqqn376yeoSQyovL09utzvo59etWzeE1QDhq2/fvurbt+85H8/NzdWf//xnvf/++0pPT1ebNm00efJk9ejRQ5IUGxur2NhYf/vvvvtOP/zwg15++eUKqZceGqCKu//+++VwOLRy5UrddtttatmypVq3bq2xY8dqxYoV/nZTpkxR27ZtFRMTo+TkZN1///3KysryP75r1y71799fNWvWVExMjFq3bq3PPvvM//jGjRvVt29fxcbGqn79+rrnnnt05MiR89Y2Y8YMNWnSRDVq1NCgQYP0yy+/FHt8+PDhGjhwYLFtY8aM8X9gSlKPHj00evRojRkzRnXq1FGfPn0uuD9Lly7ViBEjlJGR4e8Gf/zxxyWVHHLavXu3BgwYoNjYWMXHx+uOO+7QwYMH/Y8//vjjat++vd5++22lpKQoISFBd911l44fP37efQfC3ejRo7V8+XLNnDlT33//vQYPHqwbb7xRW7ZsKbX9a6+9ppYtW+raa6+tkHoINEAVdvToUc2fP1+pqamljlufOeTidDr1/PPPa9OmTXrzzTf1xRdf6JFHHvE/npqaqtzcXH311VfasGGDJk+e7P/rKz09Xdddd506dOig1atXa/78+Tp48KDuuOOOc9b27bff6r777tPo0aO1fv169ezZU3/961+D2s8333xTbrdby5Yt8//1d7796dq1q6ZNm6b4+Hh/V/i4ceNKvK7P59OAAQN09OhRffnll1q0aJG2b9+uO++8s1i7bdu2ae7cuZo3b57mzZunL7/8Uk8//XRQ+wKEg927dystLU2zZs3Stddeq+bNm2vcuHG65pprlJaWVqJ9Tk6O3n33Xd13330VV1RILq0JwJa+/fZbI8nMnj074OfOmjXL1K5d23+/bdu25vHHHy+17cSJE03v3r2LbduzZ4+RZDZv3lzqc+6++25z0003Fdt25513moSEBP/9YcOGmQEDBhRr8+CDDxa7OnX37t1Nhw4dAt6ftLS0Yu9VpGnTpmbq1KnGGGMWLlxoXC6X2b17t//xTZs2GUlm5cqVxhhjJkyYYGrUqGEyMzP9bR5++GHTuXPnC9YEhAtJZs6cOf778+bNM5JMTExMsVtERIS54447Sjz/vffeMxEREebAgQMVViNzaIAqrPBzqGw+//xzTZo0ST/99JMyMzNVUFCgnJwcnThxQjVq1NADDzyg3/3ud1q4cKF69eql2267TZdffrmkwrHxJUuWFBsvL7Jt2za1bNmyxPYff/xRgwYNKratS5cumj9/foB7KV155ZUB709Z/Pjjj0pOTlZycrJ/22WXXabExET9+OOPuuqqqyQVDlPFxcX52zRs2FCHDh0KeD+AcJGVlSWXy6U1a9bI5XIVe6y0z4HXXntN/fr1U/369SusJoacgCrs4osvlsPhuODE3507d6pfv366/PLL9dFHH2nNmjX+Mxvy8vIkSSNHjtT27dt1zz33aMOGDerYsaNeeOEFSYUfbv3799f69euL3bZs2aJf/epXQdfvdDpLhLL8/PwS7c4eTivL/oRSZGRksfsOh0M+ny/k7wPYRYcOHeT1enXo0CG1aNGi2K1BgwbF2u7YsUNLliyp2OEmEWiAKq1WrVrq06ePXnrpJWVnZ5d4PD09XZK0Zs0a+Xw+Pfvss7r66qvVsmVL7du3r0T75ORk/fa3v9Xs2bP10EMP6dVXX5UkXXHFFdq0aZNSUlJKfLida82JVq1a6dtvvy227cxJylLhGUf79+8vtm39+vUX3O+y7I/b7ZbX6z3v67Rq1Up79uzRnj17/Nt++OEHpaen67LLLrtgHUA4y8rK8v9xIhUGk/Xr12v37t1q2bKlhgwZoqFDh2r27NnasWOHVq5cqUmTJunTTz8t9jpvvPGGGjZseN4zpkKBQANUcS+99JK8Xq86deqkjz76SFu2bNGPP/6o559/Xl26dJEktWjRQvn5+XrhhRe0fft2vf322yVOrRwzZowWLFigHTt2aO3atVqyZIlatWolqXDC8NGjR3X33Xdr1apV2rZtmxYsWKARI0acMzQ88MADmj9/vp555hlt2bJFL774Yonhpuuuu06rV6/WW2+9pS1btmjChAnauHHjBfe5LPuTkpKirKwsLV68WEeOHNGJEydKvE6vXr3Utm1bDRkyRGvXrtXKlSs1dOhQde/eXR07drxgHUA4W716tTp06KAOHTpIksaOHasOHTpo/PjxkqS0tDQNHTpUDz30kC655BINHDhQq1atUpMmTfyv4fP5NGPGDA0fPrzE0FTIVdjsHAC2sW/fPpOammqaNm1q3G63adSokbnlllvMkiVL/G2mTJliGjZsaKKjo02fPn3MW2+9ZSSZY8eOGWOMGT16tGnevLnxeDymbt265p577jFHjhzxP//nn382gwYNMomJiSY6OtpceumlZsyYMcbn852zrtdff900btzYREdHm/79+5tnnnmmxETd8ePHm/r165uEhATzhz/8wYwePbrEpOAHH3ywxGtfaH+MMea3v/2tqV27tpFkJkyYYIwpPinYGGN27dplbrnlFhMTE2Pi4uLM4MGDi01snDBhgmnXrl2x9546dapp2rTpOfcbQOg5jAlg1iAAAIANMeQEAADCHoEGAACEPQINAAAIewQaAAAQ9gg0AAAg7BFoAABA2CPQAACAsEegAQAAYY9AAwAAwh6BBgAAhD0CDQAACHsEGgAAEPb+P42JDkjXfbvPAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pm4py.view_case_duration_graph(log) # Matplotlib inside!" + ] + }, + { + "cell_type": "markdown", + "id": "475571de-3ce5-4a9e-b1e9-53da33c7098c", + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "## Fun with Process Maps (and Graphy Theory)" + ] + }, + { + "cell_type": "markdown", + "id": "b654f39e-f38e-48c7-95e7-ec0ec0479c32", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "### Discovering Process Maps" + ] + }, + { + "cell_type": "markdown", + "id": "7257f146-269a-4a39-939b-48e08baea3d5", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Let $L{\\in}\\mathcal{B}(\\Sigma^*)$ be an event log (where $\\Sigma$ represents all possible activities, and $\\mathcal{B}(\\Sigma^*)$ represents all *multisets* over sequences of activities)" + ] + }, + { + "cell_type": "markdown", + "id": "d5edfc9b-b5fb-4e5f-b3cd-54357fc35aac", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Given $a,b{\\in}\\Sigma$, we write $a{>_{L}}b$, iff $\\exists{\\sigma{\\in}L}\\left(\\exists{1{\\leq}i{<}|\\sigma|}\\left(\\sigma(i){=}a{\\wedge}\\sigma(i{+}1){=}b\\right)\\right)$" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "55923c6b-3930-4fd5-b13e-04644851412f", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{('Confirmation of receipt', 'T02 Check confirmation of receipt'): 1079, ('Confirmation of receipt', 'T06 Determine necessity of stop advice'): 239, ('T02 Check confirmation of receipt', 'T03 Adjust confirmation of receipt'): 43, ('T02 Check confirmation of receipt', 'T04 Determine confirmation of receipt'): 1119, ('T02 Check confirmation of receipt', 'T05 Print and send confirmation of receipt'): 1, ('T02 Check confirmation of receipt', 'T06 Determine necessity of stop advice'): 178, ('T02 Check confirmation of receipt', 'T07-1 Draft intern advice aspect 1'): 2, ('T02 Check confirmation of receipt', 'T07-2 Draft intern advice aspect 2'): 1, ('T02 Check confirmation of receipt', 'T07-5 Draft intern advice aspect 5'): 1, ('T02 Check confirmation of receipt', 'T10 Determine necessity to stop indication'): 15, ('T03 Adjust confirmation of receipt', 'T02 Check confirmation of receipt'): 51, ('T03 Adjust confirmation of receipt', 'T06 Determine necessity of stop advice'): 2, ('T04 Determine confirmation of receipt', 'T03 Adjust confirmation of receipt'): 6, ('T04 Determine confirmation of receipt', 'T05 Print and send confirmation of receipt'): 1177, ('T04 Determine confirmation of receipt', 'T06 Determine necessity of stop advice'): 103, ('T04 Determine confirmation of receipt', 'T08 Draft and send request for advice'): 1, ('T04 Determine confirmation of receipt', 'T10 Determine necessity to stop indication'): 17, ('T04 Determine confirmation of receipt', 'T14 Determine document X request unlicensed'): 1, ('T05 Print and send confirmation of receipt', 'T06 Determine necessity of stop advice'): 791, ('T05 Print and send confirmation of receipt', 'T07-2 Draft intern advice aspect 2'): 3, ('T05 Print and send confirmation of receipt', 'T07-5 Draft intern advice aspect 5'): 3, ('T05 Print and send confirmation of receipt', 'T08 Draft and send request for advice'): 2, ('T05 Print and send confirmation of receipt', 'T10 Determine necessity to stop indication'): 86, ('T05 Print and send confirmation of receipt', 'T11 Create document X request unlicensed'): 10, ('T05 Print and send confirmation of receipt', 'T12 Check document X request unlicensed'): 1, ('T05 Print and send confirmation of receipt', 'T13 Adjust document X request unlicensed'): 2, ('T05 Print and send confirmation of receipt', 'T15 Print document X request unlicensed'): 1, ('T05 Print and send confirmation of receipt', 'T16 Report reasons to hold request'): 1, ('T06 Determine necessity of stop advice', 'T02 Check confirmation of receipt'): 75, ('T06 Determine necessity of stop advice', 'T03 Adjust confirmation of receipt'): 2, ('T06 Determine necessity of stop advice', 'T04 Determine confirmation of receipt'): 43, ('T06 Determine necessity of stop advice', 'T05 Print and send confirmation of receipt'): 16, ('T06 Determine necessity of stop advice', 'T06 Determine necessity of stop advice'): 6, ('T06 Determine necessity of stop advice', 'T07-1 Draft intern advice aspect 1'): 38, ('T06 Determine necessity of stop advice', 'T07-2 Draft intern advice aspect 2'): 18, ('T06 Determine necessity of stop advice', 'T07-3 Draft intern advice hold for aspect 3'): 5, ('T06 Determine necessity of stop advice', 'T07-4 Draft internal advice to hold for type 4'): 3, ('T06 Determine necessity of stop advice', 'T07-5 Draft intern advice aspect 5'): 21, ('T06 Determine necessity of stop advice', 'T08 Draft and send request for advice'): 8, ('T06 Determine necessity of stop advice', 'T10 Determine necessity to stop indication'): 1165, ('T07-1 Draft intern advice aspect 1', 'T02 Check confirmation of receipt'): 1, ('T07-1 Draft intern advice aspect 1', 'T04 Determine confirmation of receipt'): 1, ('T07-1 Draft intern advice aspect 1', 'T06 Determine necessity of stop advice'): 34, ('T07-1 Draft intern advice aspect 1', 'T07-2 Draft intern advice aspect 2'): 2, ('T07-1 Draft intern advice aspect 1', 'T07-4 Draft internal advice to hold for type 4'): 2, ('T07-1 Draft intern advice aspect 1', 'T08 Draft and send request for advice'): 4, ('T07-2 Draft intern advice aspect 2', 'T02 Check confirmation of receipt'): 2, ('T07-2 Draft intern advice aspect 2', 'T05 Print and send confirmation of receipt'): 1, ('T07-2 Draft intern advice aspect 2', 'T06 Determine necessity of stop advice'): 22, ('T07-2 Draft intern advice aspect 2', 'T07-1 Draft intern advice aspect 1'): 2, ('T07-2 Draft intern advice aspect 2', 'T07-3 Draft intern advice hold for aspect 3'): 1, ('T07-2 Draft intern advice aspect 2', 'T08 Draft and send request for advice'): 2, ('T07-2 Draft intern advice aspect 2', 'T09-1 Process or receive external advice from party 1'): 1, ('T07-3 Draft intern advice hold for aspect 3', 'T06 Determine necessity of stop advice'): 2, ('T07-3 Draft intern advice hold for aspect 3', 'T07-2 Draft intern advice aspect 2'): 4, ('T07-3 Draft intern advice hold for aspect 3', 'T07-4 Draft internal advice to hold for type 4'): 1, ('T07-3 Draft intern advice hold for aspect 3', 'T07-5 Draft intern advice aspect 5'): 1, ('T07-4 Draft internal advice to hold for type 4', 'T06 Determine necessity of stop advice'): 5, ('T07-4 Draft internal advice to hold for type 4', 'T07-2 Draft intern advice aspect 2'): 1, ('T07-5 Draft intern advice aspect 5', 'T06 Determine necessity of stop advice'): 21, ('T07-5 Draft intern advice aspect 5', 'T07-1 Draft intern advice aspect 1'): 2, ('T07-5 Draft intern advice aspect 5', 'T08 Draft and send request for advice'): 1, ('T07-5 Draft intern advice aspect 5', 'T09-2 Process or receive external advice from party 2'): 1, ('T07-5 Draft intern advice aspect 5', 'T09-4 Process or receive external advice from party 4'): 1, ('T08 Draft and send request for advice', 'T07-1 Draft intern advice aspect 1'): 1, ('T08 Draft and send request for advice', 'T07-5 Draft intern advice aspect 5'): 1, ('T08 Draft and send request for advice', 'T09-1 Process or receive external advice from party 1'): 5, ('T08 Draft and send request for advice', 'T09-3 Process or receive external advice from party 3'): 8, ('T08 Draft and send request for advice', 'T09-4 Process or receive external advice from party 4'): 3, ('T09-1 Process or receive external advice from party 1', 'T06 Determine necessity of stop advice'): 5, ('T09-1 Process or receive external advice from party 1', 'T07-3 Draft intern advice hold for aspect 3'): 2, ('T09-2 Process or receive external advice from party 2', 'T09-4 Process or receive external advice from party 4'): 1, ('T09-3 Process or receive external advice from party 3', 'T04 Determine confirmation of receipt'): 1, ('T09-3 Process or receive external advice from party 3', 'T06 Determine necessity of stop advice'): 4, ('T09-3 Process or receive external advice from party 3', 'T07-2 Draft intern advice aspect 2'): 2, ('T09-3 Process or receive external advice from party 3', 'T09-1 Process or receive external advice from party 1'): 1, ('T09-4 Process or receive external advice from party 4', 'T06 Determine necessity of stop advice'): 4, ('T09-4 Process or receive external advice from party 4', 'T07-2 Draft intern advice aspect 2'): 1, ('T10 Determine necessity to stop indication', 'T02 Check confirmation of receipt'): 155, ('T10 Determine necessity to stop indication', 'T03 Adjust confirmation of receipt'): 4, ('T10 Determine necessity to stop indication', 'T04 Determine confirmation of receipt'): 141, ('T10 Determine necessity to stop indication', 'T05 Print and send confirmation of receipt'): 102, ('T10 Determine necessity to stop indication', 'T11 Create document X request unlicensed'): 34, ('T10 Determine necessity to stop indication', 'T16 Report reasons to hold request'): 19, ('T11 Create document X request unlicensed', 'T04 Determine confirmation of receipt'): 1, ('T11 Create document X request unlicensed', 'T12 Check document X request unlicensed'): 39, ('T12 Check document X request unlicensed', 'T02 Check confirmation of receipt'): 2, ('T12 Check document X request unlicensed', 'T04 Determine confirmation of receipt'): 1, ('T12 Check document X request unlicensed', 'T14 Determine document X request unlicensed'): 38, ('T13 Adjust document X request unlicensed', 'T12 Check document X request unlicensed'): 1, ('T14 Determine document X request unlicensed', 'T05 Print and send confirmation of receipt'): 1, ('T14 Determine document X request unlicensed', 'T15 Print document X request unlicensed'): 38, ('T16 Report reasons to hold request', 'T17 Check report Y to stop indication'): 20, ('T17 Check report Y to stop indication', 'T18 Adjust report Y to stop indicition'): 6, ('T17 Check report Y to stop indication', 'T19 Determine report Y to stop indication'): 20, ('T18 Adjust report Y to stop indicition', 'T17 Check report Y to stop indication'): 6, ('T19 Determine report Y to stop indication', 'T20 Print report Y to stop indication'): 20, ('T20 Print report Y to stop indication', 'T02 Check confirmation of receipt'): 3, ('T20 Print report Y to stop indication', 'T05 Print and send confirmation of receipt'): 2}\n" + ] + } + ], + "source": [ + "dfg = pm4py.discover_dfg(df)\n", + "print(dfg[0]) # graph structure" + ] + }, + { + "cell_type": "markdown", + "id": "2fda5b3c-e8da-4ca9-b7c4-ad70d77aeb2c", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "Observe that in `pm4py`, we use: $\\sum\\limits_{\\sigma{\\in}L}L(\\sigma){\\cdot}|\\{i{\\mid}1{\\leq}i{<}|\\sigma|{\\wedge}\\sigma(i){=}a{\\wedge}\\sigma(i{+}1){=}b\\}|$" + ] + }, + { + "cell_type": "markdown", + "id": "592bdc2a-93ec-46a1-86d4-7e42ef91d3be", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Start Activities" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "cccc3156-a00b-4de6-9a0f-eb9e08590833", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'Confirmation of receipt': 1434}\n" + ] + } + ], + "source": [ + "print(dfg[1]) # start activities" + ] + }, + { + "cell_type": "markdown", + "id": "2d0a6930-2f73-40e4-af86-75ea4c87fe43", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "For the 'math lovers': $s_L(a){=}\\sum\\limits_{\\sigma{\\in}L}L(\\sigma){\\cdot}\\begin{cases}1&if\\ \\sigma(1){=}a\\\\0&otherwise\\end{cases}$" + ] + }, + { + "cell_type": "markdown", + "id": "cbf91bf0-6b3f-4e49-afda-02ecd8cbd269", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### End Activities" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "9b82ae7c-9af4-44e5-834d-8b7f3a756985", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'T10 Determine necessity to stop indication': 828, 'T05 Print and send confirmation of receipt': 400, 'Confirmation of receipt': 116, 'T15 Print document X request unlicensed': 39, 'T06 Determine necessity of stop advice': 16, 'T20 Print report Y to stop indication': 15, 'T02 Check confirmation of receipt': 8, 'T11 Create document X request unlicensed': 4, 'T03 Adjust confirmation of receipt': 2, 'T04 Determine confirmation of receipt': 2, 'T07-1 Draft intern advice aspect 1': 1, 'T13 Adjust document X request unlicensed': 1, 'T07-5 Draft intern advice aspect 5': 1, 'T07-2 Draft intern advice aspect 2': 1}\n" + ] + } + ], + "source": [ + "print(dfg[2]) # end activities" + ] + }, + { + "cell_type": "markdown", + "id": "07c53bc2-8c03-421a-aa88-c745f917acf8", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "$e_L(a){=}\\sum\\limits_{\\sigma{\\in}L}L(\\sigma){\\cdot}\\begin{cases}1&if\\ \\sigma(|\\sigma|){=}a\\\\0&otherwise\\end{cases}$" + ] + }, + { + "cell_type": "markdown", + "id": "48a3eaa4-b146-4ae4-82ba-af08bf47aef4", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Visualizing the Process Map" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "80860332-bcc0-4535-98da-5d46df1a884c", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAADogAAAkTCAIAAAADl7xQAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzde5ScdX0/8Jm9X+ays7lAQgNCJInKEaKoWKFiFPHYH6j1koQSLC1eUH/404oeLz1Hq/ZoRQG1So30VGIhiikWsJ56SSontVWIMQZDNmJUkIRLkp29ZTd7m98f3/J0OrO72ezO7LO7eb0OZ84zzzyXzzM57Mw8z/v5fJOFQiEBAAAAAAAAAAAAAExPTdwFAAAAAAAAAAAAAMB8IJgLAAAAAAAAAAAAABUgmAsAAAAAAAAAAAAAFVAXdwEAAAAAAAAwFX19fYODgzU1NdlsNu5aAAAAABIJwVwAAAAAAABmuccee+yBBx7o6OjYt2/f3r17f/e73/X19XV2dhYvk06nW1tbTzvttBUrVqxatWrlypXPfe5zn/WsZ8VVMwAAAHByShYKhbhrAAAAAAAAgP+ls7Pz+9///rZt27Zt29bR0ZFMJpctW7ZixYoVK1YsX748lUrlcrnW1taGhobR0dGurq7u7u6+vr5HH3107969HR0dv/nNb4aHh5csWfKyl71szZo1l1xyyemnnx73MQEAAADzn2AuAAAAAAAAs8XQ0NB3v/vd22677d577x0ZGTn//PNDsvaCCy5IpVIntJ2dO3du3bp127Zt27dvHxgYuOiii6666qo3vOENmUymevUDAAAAJznBXAAAAAAAAOL35JNP3nTTTRs3bjxy5Mgf/dEfXXXVVX/yJ3+SzWanv+XBwcF/+7d/27Rp0z333JNMJteuXfuBD3xg1apV098yAAAAQAnBXAAAAAAAAOL0+9///oYbbti4cWMqlXrXu9715je/+fTTT6/GjvL5/De/+c2bbrqpo6Pj9a9//Yc+9KHzzjuvGjsCAAAATlqCuQAAAAAAAMSjv7//k5/85A033LB48eL3ve9911xzTUtLS7V3Ojo6etddd33yk5/8+c9/vn79+htuuGHJkiXV3ikAAABwkhDMBQAAAAAAIAb33HPPu9/97iNHjnzsYx+79tprGxoaZnLvhULhX/7lX9773vceOXLkr//6r9/5znfW1tbOZAEAAADAvFQTdwEAAAAAAACcXLq6ut70pjddfvnlL37xix966KF3v/vdM5zKTSQSyWTyta997YMPPviud73r/e9//wUXXPDwww/PcA0AAADA/KNjLgAAAAAAADPn/vvvX7duXX9//9e+9rVLLrkk7nISiUSio6PjiiuuePjhh7/yla+sXbs27nIAAACAOUzHXAAAAAAAAGbIF77whQsvvHD58uU///nPZ0kqN5FIrFy58sc//vGGDRvWrVv3jne8Y2hoKO6KAAAAgLlKx1wAAAAAAACqrlAoXH/99TfeeOPHPvaxD33oQzU1s7F9zLe+9a2rr776JS95yZYtW1pbW+MuBwAAAJh7BHMBAAAAAACorpGRkbe97W1f+9rXvvKVr1x99dVxlzORHTt2vPrVrz7jjDO+853vLFq0KO5yAAAAgDlGMBcAAAAAAIAqGhoaesMb3rB169Zvfetbl156adzlHN++ffte9apXNTY2btu27dRTT427HAAAAGAuEcwFAAAAAACgWkZHR6+66qq77777e9/73gUXXBB3OZN14MCBiy++uLW19Uc/+lEmk4m7HAAAAGDOqIm7AAAAAAAAAOat66+//pvf/Oadd945h1K5iURi6dKlP/zhDw8fPvya17xmYGAg7nIAAACAOUMwFwAAAAAAgKq44YYbbrrppk2bNl166aVx13LCli1bdu+99/785z9/85vfbAhKAAAAYJIEcwEAAAAAAKi87du3f/CDH/z0pz+9du3auGuZouc+97lbtmzZsmXLF77whbhrAQAAAOaGpBt8AQAAAAAAqKzOzs7Vq1efc84599xzTzKZjLucafn4xz/+8Y9//L777rvgggvirgUAAACY7QRzAQAAAAAAqKRCoXD55Zf/4he/2LlzZ3t7e9zlTNfo6Oill176m9/85mc/+1kmk4m7HAAAAGBWq4m7AAAAAAAAAOaV22+//V//9V9vv/32eZDKTSQSNTU1X//617u7u//qr/4q7loAAACA2U7HXAAAAAAAACqmu7v7Wc961uWXX/7lL3857loq6R/+4R/e+ta33n///atXr467FgAAAGD2EswFAAAAAACgYq677rrbb7997969CxcujLuWSioUCi972cuOHj36X//1XzU1BqUEAAAAxuasAQAAAAAAAJWxZ8+eL33pSzfccMM8S+UmEolkMnnzzTfv3Lnzn/7pn+KuBQAAAJi9dMwFAAAAAACgMjZs2LBjx44HH3xwvvaU/bM/+7Of/OQnv/zlL+frAQIAAADT5JQBAAAAAAAA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X8ZdUeKpp566+uqrX/e6161bt27Hjh3Pec5z4q4IAAAAmMMEcwEAAAAAAJg5yWTyuuuu+/GPf3z06NHVq1e///3v7+vri6WS0dHRL3/5yytXrvzBD35w1113felLX2pqaoqlEgAAAGDeEMwFAAAAAABgpj3vec/7yU9+cvPNN3/1q19dtWrVl7/85WPHjs3Y3guFwt133/2CF7zg3e9+9zXXXPPQQw+99rWvnbG9AwAAAPOYYC4AAAAAAAAxqKmpufbaa/fu3fua17zmve9971lnnfW5z32u2t1zR0dHv/GNb5x33nmvfe1rly1btnPnzr/9279NpVJV3SkAAABw8kgWCoW4awAAAAAAAOCk9uSTT37pS1+66aabEonE5ZdfftVVV7385S9PJpMV3MXevXs3b968adOm3/72t69+9as/+tGPPv/5z6/g9gEAAAASgrkAAAAAAADMEocOHbrttttuu+22Xbt2nXnmmW984xvXrFlz4YUXtra2Tm2Dw8PD999//9atW7/97W8/8MADy5Ytu/LKK6+++uqzzz67spUDAAAABIK5AAAAAAAAzC67d+/etGnTvffe+9BDDzU0NLzoRS96yUtesmLFilWrVq1cubK9vX28Ffv6+vbt29fR0dHR0XH//fffd999PT09S5cufdWrXnXllVe+9KUvrampmckDAQAAAE42grkAAAAAAADMUgcPHty6deu2bdt27NjR0dHR39+fSCQymUwul0ulUqlUKp1O9/f39/b29vT05PP5I0eOJBKJ+vr6M88887zzzrv44ovXrFmzcuXKuI8DAAAAOFkI5gIAAAAAADAHFAqFRx55pKOj45FHHuns7Ozt7c3n81u2bLnwwguXL1+eyWSy2eySJUtWrVp11lln1dfXx10vAAAAcDISzAUAAAAAAGBO6u7uzmaz3/3ud1/1qlfFXQsAAABAIpFI1MRdAAAAAAAAAAAAAADMB4K5AAAAAAAAAAAAAFABgrkAAAAAAAAAAAAAUAGCuQAAAAAAAAAAAABQAYK5AAAAAAAAAAAAAFABgrkAAAAAAAAAAAAAUAGCuQAAAAAAAAAAAABQAYK5AAAAAAAAAAAAAFABgrkAAAAAAAAAAAAAUAGCuQAAAAAAAAAAAABQAYK5AAAAAAAAAAAAAFABgrkAAAAAAAAAAAAAUAGCuQAAAAAAAAAAAABQAYK5AAAAAAAAAAAAAFABgrkAAAAAAAAAAAAAUAGCuQAAAAAAAAAAAABQAYK5AAAAAAAAAAAAAFABgrkAAAAAAAAAAAAAUAGCuQAAAAAAAAAAAABQAYK5AAAAAAAAAAAAAFABgrkAAAAAAAAAAAAAUAGCuQAAAAAAAAAAAABQAYK5AAAAAAAAAAAAAFABgrkAAAAAAAAAAAAAUAGCuQAAAAAAAMwTyWRyki8li5zopgAAAADGUxd3AQAAAAAAADBdE+doy1O5hUJhvKfH3RoAAADAeHTMBQAAAAAAYM4rFAol4dpIee52vCXHWx4AAABgkgRzAQAAAAAAOHmJ4QIAAAAVJJgLAAAAAADAvDVx7rb8VTldAAAAYDoEcwEAAAAAAJifjpvKjR4nszwAAADAcdXFXQAAAAAAAABU3nFTttGrYUmpXAAAAGD6BHMBAAAAAACYn4q74SYmEdU90eUBAAAASgjmAgAAAAAAMA+VZGon30B3kssDAAAAlKuJuwAAAAAAAACIjQAuAAAAUEE65gIAAAAAADAfJJPJxOSCtmHJQCoXAAAAqCDBXAAAAAAAAOaDiSO2xa9OJowrsAsAAABMQU3cBQAAAAAAAAAAAADAfCCYCwAAAAAAAAAAAAAVIJgLAAAAAAAAAAAAABUgmAsAAAAAAAAAAAAAFSCYCwAAAAAAAAAAAAAVIJgLAAAAAAAAAAAAABUgmAsAAAAAAAAAAAAAFSCYCwAAAAAAAAAAAAAVIJgLAAAAAAAAAAAAABUgmAsAAAAAAAAAAAAAFSCYCwAAAAAAAAAAAAAVIJgLAAAAAAAAAAAAABUgmAsAAAAAAAAAAAAAFZAsFApx1wAAAAAAAACT8sEPfvDIkSNhenh4+N///d9Xr169YMGCaIFPfepTuVwupuoAAACAk11d3AUAAAAAAADAZB05cmTjxo11df9zkevRRx8NE8PDwytWrJDKBQAAAGJUE3cBAAAAAAAAMFnr168vFApDY6mrq3vzm98cd4EAAADASS1ZKBTirgEAAAAAAAAmZXR0dOnSpU888UT5S8lk8te//vWZZ54581UBAAAABDrmAgAAAAAAMGfU1NRceeWVDQ0NJfOTyeT5558vlQsAAADESzAXAAAAAACAuWT9+vWDg4MlM2tra6+66qpY6gEAAACIJAuFQtw1AAAAAAAAwAlYvnz5/v37i+fU1NQcOHDglFNOiaskAAAAgISOuQAAAAAAAMw5GzZsqK+vj57W1tZefPHFUrkAAABA7ARzAQAAAAAAmGOuvPLKoaGh4jkbNmyIqxgAAACASLJQKMRdAwAAAAAAAJyYc889d/fu3eFSV319/VNPPZXNZuMuCgAAADjZ6ZgLAAAAAADA3HPVVVfV1tYmEom6uro//uM/lsoFAAAAZgPBXAAAAAAAAOae9evXj46OJhKJkZGRK6+8Mu5yAAAAABKJRCIZxvcBAAAAAACAueWiiy7avn17S0vL4cOHm5qa4i4HAAAAIFEXdwEAAAAAAAAkuru7H3/88birmGNe+cpXbt++/dJLL33kkUfirmWOyWazp5xyStxVAAAAwDykYy4AAAAAAED8br311muuuSbuKjhZ/Pmf//mtt94adxUAAAAwD+mYCwAAAAAAMCs0NrZ84AP/EXcVc8zdd3/0//yfv6qpqY27kLnk9tvfEXcJAAAAMG8J5gIAAAAAAMwKNTU1y5adF3cVc8yf//ltzc2ZuKuYY5qa0nGXAAAAAPNWTdwFAAAAAAAAwBRJ5QIAAACzimAuAAAAAAAAAAAAAFSAYC4AAAAAAAAAAAAAVIBgLgAAAAAAAAAAAABUgGAuAAAAAAAAAAAAAFSAYC4AAAAAAAAAAAAAVIBgLgAAAAAAAAAAAABUgGAuAAAAAAAAAAAAAFSAYC4AAAAAAAAAAAAAVIBgLgAAAAAAAAAAAABUgGAuAAAAAAAAAAAAAFSAYC4AAAAAAAAAAAAAVIBgLgAAAAAAAAAAAABUgGAuAAAAAAAAAAAAAFSAYC4AAAAAAAAAAAAAVIBgLgAAAAAAwNzzlrcko//C04pspxqqt+VEUf1V3UVltzDBBsuXnPgAo/lVfQcAAACAyauLuwAAAAAAAABOzFvekty4sVD8dPrbqV6ys7jUyiqpv0o7muZmJ/8ml6dyS/6VSyopXn7jxkL13gEAAABg8nTMBQAAAAAAmEvK85cViWNWNtM58w1cY8ykTtwBt7iwjRsL49V5ov+sYy6vby4AAADETjAXAAAAAABgztAV9eTk3x0AAADmCsFcAAAAAACAOa8ktfmWtyRLmqeGp8XzS+ZMPL9kxfKNT2bLk69tTCULTLDWeDVPXPZ4M8c7rsmUMck07cRLlr863vKa5gIAAEDs6uIuAAAAAAAAgEqKUpvFE+XzQ4izeIExlyx/Wr7xKCQ6wZZPqLbJHFTxXkqWHLOq8bYz8cwJ3pmJy5i846ZyJzgcAAAAYLbRMRcAAAAAAGD+KE5tRrnSKEI63lrFq0zwdMyNFAdGJ9jylGsbb8WJj2XMFsLjrVhSZPGSE7wzFelNe9yUbQg6R7uTygUAAIBZTsdcAAAAAABgzhscHOzr6yuff/To0WPHjpXP7+rqGh0dLZk5Ojra1dVVvvCxY8eOHj1aPr+vr29wcLB8fj6fLxRKo5MjIyPd3d3lCw8MDPT394dSy1+dK6KIbUWyqtUw+TDrzMdex2sqXKnlAQAAgJkkmAsAAAAAAHNbeeKzp6dneHg4ejo0NNTb21u8QEksNcqGBoVCIZ/PFy9fkkAdHh7u6emZYI/lMdmSrGp/f//AwED0dMxEbHd398jISMnM8trmjdWrV09msRB+LQ9ixpjOFAydjvLOvsdtoHtCywMAAAAzTDAXAAAAAICTTnHis7e3d2hoKEwXx0+LO60W51aLm6cWx0+Lw68lSdniXSQmEZMt78/a2dlZ/HS8LrBzUTabrampiZ42NTU1NzeH6UwmEyaSyWRbW1v5uvX19alUqnx+S0tLY2Nj+fxMJlNbW1sys6amJpvNli/c0NDQ2tpaPr+1tbWhoeG4BxLU1tZGR1GssbGxpaWlZOb3v//9v/7rT5YvXK48m1v8tPjVGU5tlrfLLSlgyrVV8KAmH2ueeGb5q1V9twVwAQAAYK5Ilg+lBAAAAAAAJ6S4++lsmJ7gpZK+rbNTcTi1/OkMLDADG0yn03V1uof8L7feeuv//b//7/Of7zn+oolE4n+nYMfMjxbPjxYOCdfJbD+Kn5aveNzp8onyYiaubcwQ6ngrliw/5kamPLOkvOJDG6+wkprL87sTH+NxD3CC7U8yv3vzzZfu37/96NGj4f/N8R4TT//PO4XFxouwAwAAwLwnmAsAAAAAMEsVd2ONGqZGrVKHh4d7ev47wBf1W40au46OjnZ1dYVXe3p6hoeHx9tg8czibRb3fC3eWqKse+ssUdz3tKTBaltbWzL53/m24ramxf1TU6lUfX19mC7OkxX3Xi1OlxZ3PC1urVrcw7WkW2p521fBNYqdaDCXmTeFtrUz37R4ksHcU04ZedOb3pR4+k96+KQIHzGhaXf0iRAWCI3GQ1vx4ibiE4j+BuZyucTTf3LDH9XwJ7Suri6dTkd/G8Pf5/CHMfy9DX9Roz/vYYHw5zokgKfzXgEAAECVuBkdAAAAAOC/9fb2Dg0NFU9EkdZoIiSTEkVZ2GjhoaGh3t7esKmoLWuUoy3OuUYbibJNhUIhn8+XlBGXkJQK0yFWVVNTk8vlipOviaeDVsFMJl/Ly6vUgQNUXNRndwb2dUI7OuOMM9761qNW6BgAACAASURBVLdOZ3fhUy/6/Aofi+EjLPQpDwtEt3aET8bweRoWOHr06FNPPRV9PpZHhI9bQ/h0CJ8L4RMh+tgKH0bZbDYEf6P4b/jwCo/R/GQyGS0fPU7nzQEAAOBkJpgLAAAAAMQvSu1E6ZyoUV80EcVeo4mo1Wvo7Vc8EQVeQ/SneCLK+kQTof/fDB9ycaI0nU7X1dXlcrkoilrcWjXKsBa3Yo2CsFGqtXiDURw2yrkWbzAKyBanXYunASj3lrckE1PqgDsz2dwZbs2bSCTq6+tDvLW9vb1Kuyju3RslgMt794bvA+HrQXgMqwwODu7fvz98tSh+LGkDP54o5ltbWxs+qcNj+BgNj+EzOjyGT+TwGBr6hsdoorm5ufieEwAAAOYrwVwAAAAA4H+EREuUfYmSryXzo/xraGs33vwo+BLFZEuWn2QyplKicGpohtfS0pJKpUIL2CjVGnVjjSaiOGw0EWVYi+M1UfvYMXO0Ue89Q28DzFHTib3OQGR2hlO5M6OxsTHcfLJo0aKKbzx8CQnfSaJvJqFrb3iM5hcKhdAPODyGgO+BAwdGRkbCF5vwGMWCj9v2Pnx/iBK9ra2tUdI3lUpFCeAJ2gCHV8O6IfJb3H4eAACAeAnmAgAAAMBsFCVWQ9Qj6hobNXkNMZGod2zU83W8+SFiEgVtx5tfPSFHkni6h2sul4sSJFGSNZqIWrpGEyGhkijqBRtNRJnXqIlsNBGFZaMJAIBEIlFTU1PVjr+hVf/UHg8cODDm/Mn0+I8a9OZyueLGvRM/jrdw9AUMAACAyfM7CgAAAABOTHE8IjFW6mIKy5TMnEzqYpqKcxjR0+L5xU+nPz/K1wIAnAyam5vDnUiV3Wy4WSvcUhW+Q4a7tkKn3tDNN5/Pj46O5vP5kZGR7u7uaOHOzs4xFy4UJmq3HL7Rhe9y4baotra2mpqatra20Mo3NPoNbYDDwuFWqxDqHXPhyr4nAAAAs41gLgAAAADzQRhZODSXDRmFko6zUUfY0CA2JF+jNrRh9RCKDQmGaMVjx44dPXo0GuC44kKIIZlMtrW1JRKJhQsXNjQ0RJGF0Pk1RByip9GrUcfZkvlR39mQBSmfDwDAXFRXV1fxsG/4ohu+A4dRF8IX4PDdeILI78DAwKFDh4oXDt+xw7foCfY4Xoo3DIOQy+UmE/mNFq6rq0un05V9TwAAAKZDMBcAAACAGTKZcXsnuVjJKiFrW3HFPWWbmpqWL1+eGKdB7InOjJ4aHRgAgHglk8kQ9l24cGFlt9zf39/Z2Tn57/Zh4QMHDoy5QLiVboLdFX97L/42XvL0uMuExsCVfSsAAICTipP+AAAAACQSiURohRUGtw0Xv0OL2dANK+oXG8a6DR2zilcJjbJCh60xV6lUnaFvVuih1dLSsnTp0sTT/WLDFfTQRivqERs6aYWr7GGtRCIRlixpVRvG5zW6LgAAVERzc3O4J61SQi/ekNDt7OwMQ2SEny2hWW9XV1fo7xt+0fT09AwNDR08eDD8Tgm/XKJlJthRuH0ul8uFXwdhnIpsNltfX5/JZMLviPDzoWSZ0Og3m80WL1PBdwAAAJgTBHMBAAAA5pjOzs7y0WbD1ehw+bl4GNmSkWcLhUK0euJ/p2wrVV4YSbampiabzeZyueLIbLgsHa5Yh2ZUDQ0Nra2tIS8bBWQnXqVSdQIAAHNLOp1OJBKhv29FlDTrHe/pBA19w8yQGB5vL+XjaUytrW97e3tTU1Oljh0AAKgewVwAAACAagkNmUI0tri3Uz6fD48hWTs8PNzT0xOStaHvbLjKW7x6yM4ed/DWyYjyryE1GxrKho5QoddscWS2OGWbePoSeFhlvJTt9N83AACAGRB6+uZyuTAQx3SEH275fD78+gu/6cKNlF1dXeGHXrh5sniZzs7O0NY3n88Xt/4dby/hB1r4/ZVOp+vr69va2sIPsfBrLmrrO+Yy6XQ6tPUNC0/zkAEAgPEI5gIAAAAkEolEySXS0P0oRGPDSyFZW9J6NoydGpK1oXNtuOAaVp9+VeFyaSqVymQyoYNsCMXmcrkQlg29ZsPYqeFSa7j+GvKyYfUQug2rh2a00y8MAACASCqVSlSum29Js97JtPXt6+s7dOjQL3/5y/JlxtvLcdv3TjARHhcuXCjgCwAA5QRzAQAAgDlsCgOPjjlz4oFHJ6n4KuaYY5Ued6DSkscQqK3IGwUAAMBcEbXynf6mwjgt4fdv6N3b29vb29sbGvqGm1GjH8thgYMHD5YvMEGpTU1NbW1t4dbQTCbT2NiYTqfDXaPZbDZaoKmpqaWlJVoglUo1NjZGC0z/SAEAYPZwaQcAAACYOaGnbLiw19XVNTQ01N3dHVrMhnE/Ozs7Q/fZknE/i8f0jJraTqeS0Eq2ra0tnU4vXbp0zFE+x2s9G3rWtrW1RY/ZbLZSbxEAAABUSm1tbQX7+I53T2z5ROjgu3v37uL5YQiaMTc+hfa9JU8XLFjQ2NhYkSMFAIBpEswFAAAAjiMEZ7u6ugYGBvr6+np6ekKL2Sg7Ozw8nM/nS7Kzw8PDUVeenp6eoaGhfD4/nTKi7Gwul2tra6uvr0+lUiE1m81mQ162sbGxpaUllUrV19fncrm6urp0Oh0u0WUymfr6+mw2G0K3lXpzAAAA4GQQ+vhOcyPjjWxTPhE9PXjwYPkC421/OtHeMJHJZGpra6d5mAAAnOQEcwEAAGCem/hC13G73Rw5cuTYsWNT3nt0oSs0ph3v6tcEM8PT0LC2gm8LAAAAMMNCuneaTXzDaDy9vb1hNJ4wLE9nZ2e4rzjcJFy8QDjLsWfPnpIFxtt+uO83lUqFe31TqVQmk2lpaWlpacnlcmEik8mk0+mWlpbW1tZsNhtmtrW1OX0BAEBCMBcAAABmrehCUU9Pz7Fjx7q7u/v6+gYGBsIlpYGBgSg7G/WyLb74FHrZTm3X6XQ6RGkXLVq0bNmycP2pqampra0thGXb2toaGxtbW1vDBadsNltfX5/JZKKmtnV1dZUaKxMAAAAgEgbJmf5ph+LkbjjNUh7tDaMAdXd39/T0PP744/l8/ujRo2FYod7e3qGhofLNhtF7oixvW1tbmMhms2Hkn1QqFbK8IaNcnvSd5nEBABA7wVwAAACovCgym8/nBwYGii/q9PT0DAwM9PT0RCnbqLNLySpT23Uul2tqakqlUqeddlpTU1Nra2smk2lsbEyn06lUqqmpKZPJtLa2NjY2RinbXC7X2NgYLhGFVSr7bgAAAADMNqlUKpVKLViwYDobGW94ovKZBw4cKHm1u7t7ZGSkfJvlYwqFIPJkZi5cuFDLXgCA2AnmAgAAwBhCr5TxLqVMPLOrq2t0dHQKO42uu5x66qnl11pKJsacn81ma2pqKv5uAAAwMwqFwhNP7Iu7Cua/wcEp3gcIQInm5ubm5uYpr37cE1DFrx48eLB45qFDh8Zs2ZtIJCbI8k6c9G1vb29qapry4QAAEAjmAgAAMD91dXX19fVFYwsePXq0t7e3ZMDBvr6+vr6+MLOvry+MSximT3R3YQjClpaWpUuXtra2trS0pNPp1tbWpqam8FJjY2PoZdvc3NzW1tbU1BSGKQzdbdPpdF2dH+kAACe7gYG+j3xkZdxVcFK48MIVcZcAwH/nenO53NKlS6e2hcnfVd7Z2bl///6SV8fc5glleUteddM4AEAikUgWCoW4awAAAIAxFLcMOdHmtU8++eSYQwFOYDqjBC5evFisFgCAaTpy5MgjjzwSdxVzyeDg4Ite9KIw/fd///cvfOEL461nblmwYMGyZcvirgKAOA0ODka3rJfc3N7V1XX06NFwti28WnxDe1hlvFxvLpcLt69nMplw43oqlcpms5lMJkxnMplsNhum0+l0W1tbmE6lUjP8DgAAVIlgLgAAAFXU2dnZ29vb87R8Pt/T0xNO8YfT+n19fT09Pd3d3dFp/dDmtqen50T3lUqlWltbW1tb29rawtn/bDabTqdbWlrCzNDINlwSCDOLrxNU4/ABAIDqGRgYiEYP/+EPf7hmzZp46wGAk0qhUCg+lRfO70Un/fr7+0PSNwxaFZ0V7Ovr6+rq6u7uHvOm+lwuF4V029raUk8LZ/nCdCaTyWQyYTqdTmez2VQq1djYOPPvAADAeLTzAQAA4PiKm9eWdKid4OnU2tbmcrlly5ZN3Ke2vGftokWL6uvrq3T4AAAAAECxZDIZTtNNeQvlY2GNeZoxn8/v3r07eumpp54aHh4u31r5ucTJnFpcuHBhQ0PDNN4GAIAxCOYCAACcRELz2t7e3u7u7nw+H/Wy7e7u7urqCtNhrLrQ0CLM6erqmvwu6uvrwwh0p5xyyvLly0Mri1wul06nw3Q6nQ6tL1paWtLpdBjDrqWlpa2trXoHDgAAAADMKs3Nzc3NzUuXLj3RFUuaCEyQ6z148GDxS11dXaOjo+UbLM7yTpzujZ6ecsoptbW1lXgbAIB5SDAXAABgTjrR5rWdnZ2HDx8eHByc/C7C6ebTTjvtmc985mT6TISn02mSAQAAAAAwsZDozeVyJxrqHR0d7erq6u7u7uvrC80LStoTRM0LDh06tGfPnnw+H5729/eXbCqZTLa1tWUymagfQfHTdDqdzWaz2Wz0NJPJtLW1pdNpo34BwMlAMBcAACBOUXvacBa4q6srn8+H87/hjHBx89re3t58Pt/d3T0yMjLJ7YcTxOl0ur29/fTTTw/daqPOteFpmE6lUtHZ4VQq1dLSUtUDBwAAAACYSTU1NaG/wImuODIyEoYg6ynS2dlZ/DSfz//+97+PnobzuuUNepuamqITs+kiIdcbnbYtjvlmMplMJlOh9wAAmAmCuQAAABUTGtOWNKwdr5HtibawjRrTLlmyxJBqAAAAAAAzo7a2dmqJ3v7+/skMd/bYY489+OCD0dMnn3yyvDXDeIOYjTezvb29qampQm8AAHBiBHMBAADG1tPTE3WxDR1t8/l8aGdbMr+rq6uzs3PM/gdjam1tzWQy2Wz29NNPD01q29rastlsmBkGOAvzowYJOiIAAAAAAMwtzc3Nzc3NuVxu6dKlk1+rUCiEkdNC893u7u7u7u7Ozs7u/+3gwYMPPfRQOEHd3d3d399fsp2mpqbQbTebzYYWvGG6fGY0J5vNVvQNAICTlGAuAABwUqheL9umpqbQjSBqZDtxo4IFCxY0NjZW+3gBAAAAAJiLksnklBv0Hve892OPPRbNHPM0eDihPcm+vGHmFEoFgPlNMBcAAJh7qpqyDWcSn/nMZ0rZAgAAAAAwV4QGvSfUnbe/v3/MM+0lM/fv3x/NfOKJJ8rHjisP7E5wan3x4sV1dQJLAMxnPucAAIBZYcyI7Ziql7JduHBhQ0NDtY8UAAAAAABmg5DlzeVyk4/zDg8Pd3d35/P5rq6u7u7u7u7urq6urq6uMCefz+fz+ccff7yjoyOac+zYsZKN5HK5bDbb1tZW8lj8NCwTpuvr6yt96ABQRYK5AABAVRw7diyfz4cobclE+fyurq7jbrChoSHEZ88444ySM3RBJpOJJsIJu5qamhk4UgAAAAAAOEnU1dW1t7e3t7ef0FoT9+bo7+8/cuRI9PTJJ58cGRkpXr2pqam818YE/ThOPfVUFwgAiJFgLgAAMFkTnDgrH+vq8ccfLxQKE28wnCA77bTTzjnnnOO2s12yZEkymZyZIwUAAAAAAColtOadZF/eQqGQf1pxL97i1rwHDx7cs2dP9NLw8HDxFmpra0Nfj9DFI5fLhRa84z02NjZW57gBOEkJ5gIAwElt4pvUix05cqR8tKlyUZr2rLPOmvjO9QULFjjVBQAAAAAAFEsmk+E6wuRX6evrK4nwhscwZF9nZ+fvf//73bt3R8P6DQ0NFa/e3Nwc9jhxfjc8ZjKZSh8xAPONYC4AAMw3R44cOXz4cBj1KZxjmmDiuFurr68PZ5pOP/30MBGdexpzYgYOEAAAAAAAINLa2tra2jrJjryJcbqWFI8N+Jvf/Caa/8QTT4yOjhavXjLi3wQWLlzY0NBQhSMGYFYTzAUAgLlhvNa2Bw8ePHDgQPT00KFDJfd5lwsnjJYsWfLsZz+7ubl54vNHp556ak1NzcwcIwAAAAAAQLU1Nzc3NzdPMsg7NDRU0vSk5PHgwYN79uyJnpakeNPp9AQteNvb29vb23O5XJior6+vzhEDMKMEcwEAIE4DAwOhu23U5vbQoUMlc8Lj4ODgBNupra1dsGBBe3v7WWed1d7eHqajcG1JX9vGxsYZO0AAAAAAAIC5q76+ftGiRYsWLZrk8uN1WgkOHz788MMPRz16S8Y2nHwv3iVLliSTySocLgAVIJgLAABVEU67lLSzLff4448XCoUJthNOwTzzmc+MTrUsXbp0yZIlJedfTjnllNra2hk7OgAAAAAAAMqdUDveiVO8nZ2d+/fvDxNPPvnkyMhI8bpNTU1jXjMqsXjx4ro6CTGAGeXPLgAAnICS8yPj5W7LT46UiO54Puuss0rOjxSfQ1m0aJFBiwAAAAAAAOalaaZ4iy9URRHew4cPlwzDOEEj3uLLUgsWLDDoIkBFCOYCAMBEtyMXn9E4dOjQ0NDQxJsKgweVx22LT3CcdtppzmsAAAAAAAAweZNP8XZ1dXV2dh45cuTw4cNhIgjTv/vd73bu3Bmm+/v7i1dMpVLtT1u0aNGCsSxcuDCbzVbtKAHmA8FcAADmuc7OzuKmtiU9bg8ePPjYY48dO3Zs4o2EO4nPPvvsiYcEWrJkSTKZnJnjAgAAAAAAgHLZbDabzT7jGc847pL9/f1RYLc4vHv48OFDhw7t2bPn8NOKr6bV1dWVp3UXLlwYPW1vbw8TtbW1VTxOgNlKMBcAgDmpUCgcOnTo0KFD4bzA/2fv3qPjOOv7j8/ed6WVVmtdVndZsiVZku3YVkjsyDElF2rAKdBgmksLJIVwCCRQKJxT2qYU6IW20EPg0EBJQ9MWWpoUehKSUGxCGju2k8g3YtnyRbFlWVdLWkkrrfb+++P789PJ7MWSLGkl+/36Y8/s7OzsM2t5Z+aZz3yfixcvDg4Oqunh4eHBwcGLFy9OTExkWInb7S4sLFy/fr3qIFCPaqKoqKigoGDRtgsAAAAAAAAAAABYHC6Xq6KioqKi4rJLJo8/qarhDAwMnDhxQmb29/cnEgn1Lql9o0aVTFn+prKykhK8AK4yBHMBAACw5ExOTg4NDQ0MDEjQVh4laKtP4urP6g3sdnthYeHKlSuLioqKi4tlqJ2iS0pKSuSp0+lczO0CAAAAAAAAAAAAliOXy+VyucrLyzMvFgqFhnXU1b3h4eGRkZHXXntNvaR/V25urlTYlYt6yeQan9vtXshNBIB5QzAXAAAAi2p6eloGwdHfR6smZHp0dDTDGuTO2k2bNhnuqdXfZVtaWmo2mxdtowAAAAAAAAAAAAA4HI7y8vLL5ne1SyV49VcJlbNnz+7bt6+3t3d4eDgcDutXvmLFipQXB9W0z+ezWCwLuYkAcHmmDGXGAAAAgFkJBoMXL14cGBiQ6rZS9XZoaEg/PTk5me7tdru9uLi4qKiotLRUJlS926KiIrkXtrCwkHNpAAAAAACgadr09LTL5ZLp3bt333LLLdltDwAAAIB5Nz4+fvGthoaG1EibcmlybGxMLW+xWNR1xpKSEv01R5/PpwbYtFopZwlgAfETAwAAgBmJRCJyltvX16fOeAcHByV3K6HbQCCQ7u12u72oqGjVqlU+n6+kpESd/arcrc/n83g8i7lFAAAAAADg6mMypahKYzKZNE3Tz5c5eupV9RLVbQAAAICsy8/Pz8/Pr6ury7zY6OiofnxONX3u3Ln9+/f39vYODQ1Fo1G1vAzRqa+5a3haUVFRUFCwwBsH4KpFMBcAAACadmmwGP2ZqmFicHAwFoule7vX662urs4wakxpaanZbF7MLQIAAAAAANeU5Kytmi8R2+SJdO9NtxgAAACApUkuTWZYIJFIGGruSvmhixcv9vf3Hz16VJ6Gw2H1ltzcXEOdXVWCt7i4uKSkxOfz5ebmLvzGAVh+COYCAABcEy5evCinl/39/WpCytzKxNTUVLr3rlixwufz1dfX+3w+qXerit3K+eeKFSsWc1sAAAAAAACSqTStfqY+XJtIJORphrhtyuUXrMkAAAAAFonJZJKRPDMvllzMSE2fPn1aPVXLS+VdfbkiwwTVi4BrE8FcAACAZS8ejw8ODg4ODkpd26Ghob6+vqGhIZmQOZFIJOV7rVZrcXHx6tWry8rKJHFbWloqE2qO3W5f5C0CAAAAAABYNKRvAQAAAAiXy+VyucrLy1taWtItEwwGpc6uujIrExcuXDh06JBMq1MMu90utXWl/lHyRHFxMcld4OpDMBcAAGAZCAaD6qZMmdA/7e7ujkajKd8o92jW19enu0fT5/NZLJZF3hwAAAAAAAAAAAAAWI5cLldVVVVVVVWGZUZHR/XXdtXEqVOn+vr6enp6wuGwWtjr9aa8kisTlZWV1FEClh2CuQAAANk3PT09MDDQ29s7NDTU29s7MDAgTwcHB/v6+vr7+6enp1O+0eVylZaW3nDDDSUlJRUVFSUlJSUlJVLyVibcbvcibwsAAAAAAMDylUgkVAFdk8mU7eYAAAAAWJa8Xq/X682wwPDwsIyJ2t/fPzAwMDQ0JBOvvvqqTASDQf3aSktLi4uLfT6fTJSWlvp8PpkoLS11uVwLv00AZoFgLgAAwIJLJBIDAwODg4MXLlyQkysZ0ERFb/1+f8o3Wq3WkpKSpqamsrKykpKS8vJyOddST/Py8hZ5WwAAAAAAAK4mKoarSDZXPwEAAAAA86uwsLCwsLCpqSndAsFgMLng7ujo6PHjx3fv3j06Otrf36/OZZxOpxTZ1T+qyrtlZWWc2gCLjGAuAADA/JDhSOSMyPB4/vz5SCSS8l1yjtTS0qLOi/SnSdXV1VYrB2wAAAAAAACLSlXMNWR2AQAAAGBxuFwul8tVXl7e2tqacoHp6emhoaG+vj4Zi7Xvkn379skYrdFoVJbMyckpLy8vLS2VR7kkLU+l7O4ibhZwrSDnAQAAMCPRaFRq3Kq4rX5iYGAgFoslv8tut5eUlLS2tvp8voqKCql3W1paWlJSUlFRUVJS4nA4Fn9bAAAAAAAAAAAAAADLl9PprKqqqqqqSreAFJZS1XblsaOjY9euXT09PePj47KY3W4vLCw0lJFSj1SSAuaG/zYAAAD/J0PV2+7ubnVPoZ6cqGzYsCH5LKWsrMzn81kslsXfEAAAAAAAAGialkgkVOHb5Aq46WriyjCvlMsFAAAAsHx5vV6v15vu1WAwmPKyeHt7u2R59etJeSnc6/XW1NS43e5F2RpgmSGYCwAAri0jIyO9vb3nz5/v6+vr6em5cOFCb29vT09PX1/f4OBgysstTqezrKzsxhtv1A/qoaaLiooWfysAAAAAAACQTAK1hritZHO1mQVtieQCAAAAuBa4XK66urq6urqUr05OTl64cGFgYKC3t7e/v18yu/39/QcPHuzv7x8eHlZLFhUVlZWVVVdXV1RUVFRUVFVVlZeXV1ZWVlVV5efnL9bWAEsOwVwAAHC1iUQi/f3958+f7+3tvXDhgoRuVRI3GAwmv8XpdFZUVNTX1+vv8BPl5eUZ7iMEAAAAAADA0pEuUDvz+URyAQAAACA3N7ehoaGhoSHlq6FQSNK6AwMDcjm+p6fn9OnTL7300vnz56empmQxt9tdVVUlgd3q6moJ7FZWVpaXl5eUlCzi1gBZQDAXAAAsS/qRNbq6uvSDa5w7dy4WiyW/xev11tbWGobYqKurKysrKy0tNZvNi78VAAAAAAAAAAAAAAAsIw6Ho6ampqamJuWrcinfcBH/ueeek+K7cjOk3W4vLCxU1+v1l++rq6utVjKNWPZM3PgLAACWLLnB7sKFC+fOnbtw4UJvb68UvtXfZqfncDjKy8srKioqKyvLysqqqqrKysoqKysrKirKy8sdDsfibwIAAAAAAAAWyPT0tMvlkundu3ffcsst2W0PAAAAACCD6enp3t7elOW3zp49G4/HZTGv16sCu/rk7sqVK3Nzc7O6BcBMkS4HAABZpm6YU0feMtHd3R0IBJKXdzqdyXfOyePKlSspfAsAAAAAAAAAAAAAwFLjdDrr6urq6uqSXwqFQhcuXLhw4cL58+d7e3t7enrOnz9/9OjRn/3sZ/39/WrI3NLS0oqKioqKiqqqqsrKyurq6pqamtraWsbIxVJDMBcAACwGv9/f09MjhW97enq6u7vPnz9/4cKF7u7uYDCYvHxJSUlDQ4McSUvJ25qamrKysoqKClUHBQAAAAAAAAAAAAAALHcOhyNdZjcWi/X393d3d0tgVwbdPXLkyM9+9rOenp5oNKppmt1ur6qqqrmktrZWMruVlZU2m23RtwYgmAsAAOaPDDxhKHzb19d35swZv9+fvLyqfWsYh6K6ujovL2/x2w8AAAAAAAAAAAAAAJYOi8UiVXJTvjo6Otql09vbe/To0c7OTjU8r9frrbtExRIaGhrIJGBBmRKJRLbbAAAAlhl1aKsCuGo6eWGVvtVHb8vLy+vr6/Pz8xe/8QAAAAAAALg6TE9Pq7GVdu/efcstt2S3PQAAAACAJUJSDfpIQ1dXl76mmAR2VYxBrFq1qqCgILstx9WBYC4AAEgtFAp1X3Luku7u7vPnz4fDYcPCubm5NTU11dXVlZWVlZWV+onc3NystB8AAAAAAABXN4K5AAAAAIBZCQaD+qiuCu+++eabEqTUD/yrr7NbW1trMpmy3XwsG9ZsNwAAAGSZ4bhT3TF27ty5WCxmWNjr9a5evVp/GMoxKAAAAAAAAAAAAAAAWPpcLpdEHQzzJycnz549e/bsWVW57Ne//vWzzz7b19cngV23211bW6uvrVtXV7dy5UqHw5GN7cBSR8VcAACuFX19Zc/KYQAAIABJREFUffrjyO7ubpmemJgwLGmz2aTYbU1NjdTBVdNOpzMbbQcAAAAAAACMqJgLAAAAAFhQMtSwRHX1dXYvXryoaZrZbK6oqKhLUlJSku2GI8uomAsAwNVmdHRUVb1VTp48mRzAlSEYbrzxRlX4Vo4Rq6urrVYOEgAAAAAAAAAAAAAAwLXL4XDU19fX19cb5o+Pj6s8xpkzZ7q6ul5++eVz585FIhFN09xut1TVXbVq1erVq1evXl1fX19VVcVAxNcOKuYCALBcjY+Pnz179s0335RHNZEcwC0oKFi5cmVtbe3KS6QCrtfrzUbDAQAAAAAAgHlAxVwAAAAAwNIRi8XOnz+vr6F2+vTp06dPj42NaZrmdDpVSFc9VlZWkta9KhHMBQBgqQuFQhcuXNAfuklB3DfffNOwH3c4HMmjJEgp3Gw1HgAAAAAAAFggBHMBAAAAAEvf4ODg6dOnT548efr06VOnTklad3x8XNM0l8tlSOs2NDSQ8bgKEMwFAGCpSCQSPT09MsbBmTNnVBHc/v5+w5IOh6OmpkZVwJWJ2trakpKSLLQbAAAAAAAAWBS9vb179+5VTyORyL333ivTjzzyyNq1a9VLa9asWbdu3WK3DwAAAACAmRkdHVXV2Y4dO9bR0XHq1ClJ6zocjlWrVrW0tNTV1TU3N7e0tKxZsyY3NzfbTcYsEMwFACALIpGIYfyCrq6uEydOTE5OGpb0er11SWpqaiwWS1ZaDgAAAAAAAGTL4OBgRUVFNBq97JLPPPPMjh07FqFJAAAAAADMl76+vs5LTpw40dnZee7cuVgsZrFYampqGhsbm5qaGhsbGxoampqafD5fttuLtAjmAgCwsPx+vyqCq/T09MTjcf1i+fn5q96qrq6usrLSarVmq+UAAAAAAADAUvOud73rhRdeyLxMYWFhX1+fzWZbnCYBAAAAALBAQqHQyZMn9VHdzs5OKaxbUFDQ2NjY0tLS3Ny8du3apqam6urqbLcX/x9ZHwAA5o1+oAE9w2Jer3fjxo2GIri1tbUmkykrzQYAAAAAAACWi7vuuuuywdwPfOADpHIBAAAAAFcBh8Oxbt26devW6Wf29fVJSPfEiRMdHR0vvPBCb2+vpmn5+flNTU1r165VUd2qqqosNfxaR8VcAABmLZFI9PT0nNKRmrjBYFC/mM1mq6mp0VfAlYmcnJxstRwAAAAAAABY1iYmJnw+n6EjzuCll17atm3bojUJAAAAAIDsGh0dPXbsWEdHx7FL+vv7NU3zeDzNzc2qqu769et9Pl+2G3tNIJgLAMBlqDq4chDT1dXV2dkZCAT0yzgcjoqKCn0F3Obm5sbGRquV4vQAAAAAAADAfNq5c+dTTz2V7tWqqqqzZ8+azebFbBIAAAAAAEuK3+8/c+aMSutK3EXTNK/X29zc3NraKmnd1tZWl8uV7cZehQjmAgDwf0ZHR6UC7smTJ1U13LGxMf0yOTk59fX1q1evrq+vr6+vb2hoqK+v544iAAAAAAAAYHH813/915133pnu1c9//vN/8zd/s5jtAQAAAABg6fP7/W+88UZ7e7tEdQ8ePBgMBq1Wa0NDgwrptrS01NXVZbulVwOCuQCAa1QoFLpw4YK6K0jRL2Oz2aqqqlQFXDn+WLlyJfU2AAAAAAAAgGwJhUKlpaV+vz/lqwcPHty4ceMiNwkAAAAAgOUlEol0dnYePXr0yJEjR44cOXr0aF9fn6ZpPp/vuuuua71k5cqV2W7pskQwFwBw9YvH42fPnj1x4sTx48c7OzulIG5vb69+GavVWlNToy+CW19fX1NTY7FYstVsAAAAAAAAACndf//9TzzxRPL8NWvWHD9+fPHbAwAAAADAcjc0NCQJ3UOHDrW3t3d2dsbj8cLCQhXSvf7662tqarLdzOWBYC4A4GoTDodPnToldXClIO6JEycmJyf1y3i9XlUBVxXEdblc2WozAAAAAAAAgJn7xS9+8c53vjN5/p//+Z8/8sgji98eAAAAAACuMoFA4PDhw+2XdHZ2xmKxoqIildN929veVlVVle1mLlEEcwEAy9vg4GBHR0dnZ6cqiHvu3Dn93i0nJ6exsXHNmjVNTU1r1qxpbGxsaGhwOp1ZbDMAAAAAAACAKxGLxSorK/v7+w3zT548WV9fn5UmAQAAAABwFUuZ0y0rK5OQ7tatW9va2qiIpxDMBQAsG9FotLu7W9XB7erqeuONNwyd716vV8rfSjXc5ubmpqYms9mcrTYDAAAAAAAAWAif/vSnH330Uf2ct73tba+++mq22gMAAAAAwLUjEAi0t7fv27dv3759Bw4cGBgYsNlsGzdu3Lx58+bNm7ds2bJy5cpstzGbCOYCAJaoUCh0/Pjxjo6Ojo6OEydOnDhx4tSpU+FwWC1gtVpra2tVHdzm5ubGxkav15vFNgMAAAAAAABYHPv379+yZYt+zje+8Y0/+IM/yFZ7AAAAAAC4ZnV1dUlCd9++fUeOHIlEIqWlpZs3b7755pvf/va3b9iwwWKxZLuNi4pgLgBgSZBquFIKVx7feOONUCikFnA4HKtWrVJ1cFtaWpqamnJycrLYZgAAAAAAAABZVF9ff/r0aZk2m83d3d0VFRXZbRIAAAAAANe4YDCoiunu2bNnaGjI4/FIQvftb3/7pk2broWQLsFcAEAWxGKxM2fO/PrXv5YA7rFjx06ePBmJRNQCHo+nubl57dq1LS0tzc3Na9asqaqqymKDAQAAAAAAACw1f/Inf/IXf/EXMn3LLbfs3r07u+0BAAAAAAAGXV1du3bt2rNnz4svvtjT05Obm7tly5a2tratW7du27bNbrdnu4ELgmAuAGAx9Pb2qlK4x44dO3To0NTUlHrVbrevXr1aMritra0tLS21tbUmkymLDQYAAAAAAADE5OTkli03xePZbgeShELTp0+flOny8kqvd0V224NkJpP23e/+w0033ZTthgAAAAAAsiyRSBw/fvxXv/rVSy+99NJLLw0MDOTl5d1yyy3bt2//zd/8zdra2mw3cD4RzAUAzL9z586pUrgSxtXHcJ1OZ1NTU4sOMVwAAAAAAAAsWePj4x6P58Yb7yourst2W2D0v//7/fHxQbPZcvvtD9tsrmw3B28RjYZfeOHvnn/++e3bt2e7LQAAAACApeX48eMvvvjiz3/+81/+8peBQKCxsXH79u3bt29/+9vf7nIt+xN8a7YbAABY9iKRyMmTJ9vb26Ua7oEDB4aGhtSrVqu1urq6ublZFcRds2aNxWLJYoMBAAAAAACA2Wpr+/C6dYQLlxynM++pp/7ouut23HXXN7LdFhgFg+MvvPB32W4FAAAAAGApampqampqevDBB8Ph8N69e1944YWf//znjz76qMPhePvb3/6bv/mbO3bsqK+vz3Yz54hgLgBg1np7e48cOXL06NHDhw8fPXr05MmT0WhUXjKZTHV1ddu2bWtpaVm7dm1LS0t9fb3NZstugwEAAAAAAABclTZvvufpp7+4efPd2W4IAAAAAACYC7vd/o53vOMd73jH1772tcHBwZdeemnXrl1/8zd/89nPfra5ufmOO+7YsWPH1q1bs93M2SGYCwC4jGg02tnZKdVw29vbX3/99f7+fvWq3W5vaGhobW1tbW1taWnZuHFjYWFhFlsLAAAAAAAA4NpRWFjd0nL7ddftyHZDAAAAAADAlSopKdm5c+fOnTu/853vvPzyy08//fS//uu/fu1rX2tsbLzzzjvvvPPOTZs2ZbuNM2JKJBLZbgMAYGnx+/1vvPFGe3u7CuNOT0+rV8vKylpaWpqbmyWM29TUZDabs9haAAAAAAAAYEGNj497PJ7Pfvb5deu2Z7stSGF4+FxhYU22W4EUgsHxBx/0PP/889u3838HAAAAADAX8Xh8//79Tz/99NNPP33u3Lna2toPfOADH/rQh9auXZvtpmVCxVwAgPbmm28ePHiwvb390KFDR44c6evrUy+5XK61a9du2LBh/fr111133fr16wsKCrLYVAAAAAAAAADQI5ULAAAAAMDVymw233TTTTfddNPXv/71119//amnnvrxj3/8t3/7tzfccMP9999/1113eTyebLcxBYK5AHAt6u3tbb/k1VdfHRwcVC95vd62tjaphtvS0rJu3Tq73Z7FpgIAAAAAAAAAAAAAAAC4xl1//fXXX3/9X//1X7e3t3/ve9/73Oc+95nPfOaOO+544IEHbr31VpPJlO0G/h+CuQBw9UskEmfOnGlvb5eyuO3t7X6/X70qNd5bW1s3bdq0adOmoqKiLDYVAAAAAAAAAAAAAAAAANJpbW397ne/+7Wvfe1HP/rRP/3TP91+++2rV69+6KGHPvrRj+bk5GS7dZpGMBcArlb6mrj79++/ePGieqmsrGzr1q1SE3fz5s3FxcVZbCcAAAAAAAAAAAAAAAAAzEpBQcEnPvGJT3ziE7/+9a+/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3fgiXrPZTLfoWgMAAHj33XcffPDBH/3oRytWrOj3nXd0dDzwwAPPPPOMRCJZvXr1Qw89pNPp+v0ow0soFNq7d++uXbt27dq1c+fO+vp6sVg8adKk2bNnP/bYY7Nnzy4uLpZIJEKP2f+CweCRI0eoCpeSuMeOHYvFYnq9fsKECcXFxeXl5cXFxTNnzszOzhZ62JHFbDaPnMZcxpjL5UIwN307d+5sb2+/5JJLBJyBB3Nzc3MFHGPImjlz5r59+9atW3fttde+9957zz77bD++maG6upoWxGJxYWFhf+2217788ss//OEPL774otlsFnqWoWXx4sXvv/++0FMkys/PRzAXAAAAAADOAAjmAgAAAADAsCeVSrOystJphvP5fMmduwlFvHV1dcFgMMVOqH+3O7yX12q1yuXy/jtLAACAoaKurq6iouLcc8/93e9+14uHt7a2vvfeezfeeGPyl8Lh8J/+9Kef/exnHR0dS5cufeqpp4qLi/s67rDV1tbGk7j//ve/vV6vyWSaM2fOihUrZs+ePWvWLIPBIPSM/SwYDFZXVx88eHD//v10e+zYsWg0qlQqi4uLp0yZcuutt06dOrWkpCQ/P1/oYUc6s9lst9uFnmIw8GBuZmam0LMMGx9++OG4ceMmT54s4Az0jg632y3gDEOcSqV68sknFy1atHLlymnTpm3evHnu3Ln9sucjR47QwqhRowR/X2sgELjpppvKy8tvuOEGYScZghYtWvS73/2usbFxSOXX8/Pzd+/eHYvF8FEJAAAAAAAwrCGYCwAAAAAAI4hKpVKpVLm5uSUlJSk2czqdyZ27NpvNZrNR+a7NZquvr6+srEx9OL1eTz27xGw289rdhLv4gxMAAAwXoVDouuuuY4xt2bJFJpP19OHBYPCKK674+uuvlyxZkpCt3L59++rVq7/55pvRo0f/9re/raio6Lehh4/a2tovvvhix44dX3zxRVVVVSwWKygomDdv3hVXXDF//vwZM2aIxWKhZ+w3oVCourq6srKytrb24MGDVIvr9/ulUml+fn5xcfFVV11VXFxcWlo6adKkM7IPeFgbaY25yHf2yMcff3zeeecJOwMFcz0ej7BjDH1XXHHF3Llzb7rppkWLFv385z9fv35933/e8sbcoqKiPg/YVw8++GB9ff27774r9CBD0aJFiyQSyfbt26+99lqhZ/mv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evXqhx56yNfXl3Ycx/DII4/ccssts2bNunjxYk1NzaRJk7Zv3/7AAw/YPom/v7+Xl5dCobD9oeHmwefzSY92xowZ7I2tra1FRUXXrl0r/NO1a9eKi4vN2pBmOmzrhoSEDBgwIDY2ln07YMCAysrKiooKskH/fZMvKiricDgRERH9tH9gcTic5cuX33PPPY8//viIESOWL1++du1a647OnTBhwoQJEw4cONDZF2FLS0tPirkymYxhGHxVAAAAAACAE+DQDgAA/Uuj0Tz33HNz5sxJTU2lnQWswGg0zps3Lz8//8CBAw7UymUY5qmnnsrPz//mm28iIyNpZ+mpgwcPymSyuXPn0g5iCydPnpwxY8aoUaNkMtmXX36Zl5c3e/ZsB/pDpqPIyMhYtWrV+vXrx40bRzsLwzDMO++809zc/Nxzz9EO0ns7duxYvXr1hg0b7LmVe/z48R07dmzZssWhC9A3ob179/L5fPuZANcTOp3u4YcfzsnJOXz4MFq5AABgz+69997z588XFRXRDsIwDOPq6rpixYqDBw/m5+fTznKD119/vbm5+b333qMdpFNz58718vLaunUr7SB/eeGFF8rKynbv3k07iGXWrl3b2tr61ltv0Q7iSAYNGnTy5Mk777yTYRiNRjN79uyPPvqIShKxWEzmOwLYEp/PHzx48N13371s2bL//Oc/hw4dunr1aktLS2Fh4dGjRzdv3rxy5cpZs2YlJyd3W4WsqKjIycnZtm3bqlWrHnzwweTkZD8/P9Op9r///nt2dnZdXZ3Vz6KwsDAsLIzH45ndLpPJjEaj1Q8HMTExP/300/r1699///20tLTLly9bceccDueLL74YNmxYZ33f1tbWnuwHxVwAAAAAAHAaKOYCOLlPP/20vLz89ddfpx0ErGPdunW7d+/et2+fY11We9OmTZ9++unOnTtHjhxJO4sFtmzZMnr06OHDh9MO0r9OnDhxxx13jBkzRqVSff/99+fPn581a5aLiwvtXE5IrVY/9thjM2fOXLp0Ke0sDMMwdXV177777nPPPScUCmln6aX8/PwFCxY888wzixcvpp2lUzqdbsmSJbfffvu9995LOwtYZu/evXfddZe3tzftID1lNBoXLlx48ODBffv24RVZAABg56ZOncrn8/fv3087yB/mzJkTFhb27rvv0g5yg6CgoGXLlr377rs1NTW0s3TMx8dn5syZe/bsaW5upp3lD8OGDZsyZYo9t5k7JBQKV6xY8e6775aWltLO4ki8vb3379+/YMEChmH0ev3ixYuXLl1q+zKfVCrFxFywE25ubtHR0ZMnT54/f/4bb7yxZ8+eM2fONDQ09KKt29TUxK6fe+65tLQ0f3//gICAkSNHPvDAA88///yWLVv63tYtKiqKjo5uf/vKlSuHDh26d+/evuwcOsThcJYuXZqXl6fX64cPH/7mm2/q9Xpr7dzDw+OHH34QCoVubh1cr7WlpaUnO5HJZC4uLnhxOwAAAAAAOAEUcwGcmVarffPNN+fNmxcaGko7C1hBdnb2q6++un79+jvuuIN2FgtcunTp2WeffeaZZ+x5nmV7KpXq4MGD8+bNox2kHxUVFT3wwANjx45tamo6dOhQbm4umTQD/eTpp5/W6/W0Rvi0t23bNp1O989//pN2kF6qq6ubNWvWrbfeaucvPvnwww8vX768YcMG2kHAMnK5/OTJk3/7299oB7HAihUrtm3b9vnnn0+ZMoV2FgAAgG54e3uPHz/+8OHDtIP8gcvlLlmyZPfu3WRIm/1YtmwZl8tdv3497SCdevTRR+vr67/55hvaQf6yePHi/Pz8X375hXYQyyxfvtzf39/e2uH2z9XV9aOPPlq9ejV5d8OGDfPnz7dxN1cikaCYC/as521dDw+PrnelVqvz8vL27t375ptvLliwoO9t3cLCwpiYmPa3X7169eLFiw888MDo0aMzMzMtPmfoTkJCwsmTJ9esWfPyyy+npaVduXLFWnsWiURHjhzh8/kcjvkfoHtezA0ODvb09LRWJAAAAAAAAFpQzAVwZjt37lQqlStXrqQdBKygtrb2kUcemTx58pIlS2hnsUBbW9vDDz88aNCgdevW0c5ime+++47D4TjrhMvGxsY1a9YkJCScO3duz549OTk5U6dOpR3KyR09enTXrl1btmwJDAyknYVhGMZoNH700UePPPKIQCCgnaWX/u///q+hoWH37t0dDuGwEyqVas2aNc8+++zAgQNpZwHLHDlyxNXVddq0abSD9NRnn3329ttvb9q06f7776edBQAAoEcmT56clZXVw4qGDSxcuNDX1/f999+nHeQGvr6+y5cv37RpU39cQNwqJkyYEBERsXPnTtpB/jJ9+vSIiIgtW7bQDmIZDw+PxYsXb9261W4/13bLxcXlX//616effkr+bfjJJ588/fTTtgwglUrlcrktjwjQdx22devr60lbd+PGjWyrksvldr2rvrR1O5uYe+3aNbLIzc2dNGnSlClTTp8+3bczBnNubm4rV648c+ZMa2trUlLSm2++aTAYrLLnwYMH79u3r/3tPS/mRkREWCUJAAAAAAAAXSjmAjizTZs2PfDAA1KplHYQsILnnnuutbV1+/btLi4utLNY4P333//tt9927Njh7u5OO4tl9u/fP27cOMftLHbGYDBs3759wIABGzZsWLNmzcWLF2fNmkU7lPPTarVLliy577777rrrLtpZ/pCenv7777+TK346oszMzP/973+bNm0SiUS0s3Tlww8/dHNze/HFF2kHAYsdO3bs1ltv9fb2ph2kR06ePLlo0aIlS5bMnz+fdhYAAICeuuOOO1pbW7Ozs2kH+YOXl9eCBQv++9//VlVV0c5yg6eeesrFxcV+rrxhhryi9dixY42NjbSz/MHV1fWxxx774osvamtraWexzOLFi/V6/aeffko7iEN6/PHH9+zZQxqEH3744auvvmqzQ0skEhRzwTmwbd2hQ4eyHc2cnJx+mq17/Pjx0tLS9hNzlUplfX296S1HjhwZNWrUzJkzCwoKrHi+wDBMYmLiqVOnXnnlldWrV48bN46tRPfRlClTNm/ebHZjD4u5paWlKOYCAAAAAIBzQDEXwGllZ2fn5eU99dRTtIOAFZw+ffrTTz999913g4ODaWexQGlp6b/+9a/ly5cnJCTQzmKZ5ubmjIyMe+65h3YQKztz5kxSUtLcuXMfeOCBq1evrly5ksfj0Q51U/joo49kMpldXZP0448/Hjt27PDhw2kH6Y2WlpYnn3zy/vvvnzlzJu0sXdFoNB9//PGiRYu8vLxoZwGLHTt2bMKECbRT9IhCoZg5c+bYsWPfeecd2lkAAAAskJiYGBoaevToUdpB/rJkyRKdTvfZZ5/RDnIDX1/fefPmbdiwQaPR0M7SsenTp2s0mmPHjtEO8pe5c+e2trbu3buXdhDLBAQEzJkzZ8OGDXq9nnYWh3Tfffdt27aNjPlcs2aNzf4NLpVKKyoqdDqdbQ4HYAMnT54kC09Pz+HDh3cxW7cvbd3x48frdLp58+aZzdbNz89vf1+j0fjNN98MHTr0kUceKSwstP4538S4XO7KlStPnz7d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t2/fDg4Onjp1qrW1dS1ObyAuXryop6fXpk0b0UGgMx7xvFvVXTwfh3rG1NTU399/69atOTk5e/bs6du373fffde7d297e/s333zzwIEDlZWVojMCqGO9e/deuHDh+++/HxsbW6MTjxw5Uj+KuSUlJdHR0aKDALJGMReAVql/3had4qH4XQAAAAAAAAAAzaGY25BVVFRERESo14GBgWLDyMrRo0fXrl37wgsvPP/887U4ffDgwVFRUbU4ce3atTdv3pw1a1Ytzm04UlNTbWxsjIyMRAeBTrr7eTd1K/f+24H6xNDQ0MfH58svv0xLSzt27Ni4ceOio6P79etnY2Mzffr06OjoWrzrPQDZWrJkibe396hRo27cuFHNU65cuZKRkVEPirktWrTo2rVreHi46CCArFHMBdDQybkoDAAAAAAAAKA+oZjbkMXFxV27dk299vf3FxtGPkpKSiZOnGhubh4cHFy7KwwaNOivv/7Kysqq0VnFxcWffvrp5MmTW7VqVbt9G4iLFy86ODiITgFdwvNugCRJCoXC3d39gw8+iI+PT0lJCQoK+vPPPwcOHNi8efNx48aFhYWVlpaKzgjgSenp6X377be3b9+ePHlyNU85cuSIUql0d3fXaDDtGDp06K5du0SnAGSNYi4AAAAAAAAAAIA2UMxtyMLCwtQLMzOzPn36iA0jHx988EFCQsKnn35a64Jsv379DA0Na/pGuuvWrbtx48acOXNqt2nDcenSJYq5APAkHB0dZ86ceejQoYsXLy5evDg1NTUwMLBFixY0dIF6oHXr1hs2bPjll1++/vrr6hx/4MCBbt26mZubazqYFvj5+aWlpSUkJIgOAsgXxVwA+Nvdb6MDAAAAAAAAAHXL3Nz85s2bolNAjKpirq+vr5GRkdgwMvHnn39+9NFHAwYMGDduXK0vYmpq2qNHj6ioqOqfUlJS8sknn0yYMKF169a13rchKCkpuXr1qp2dnegg0FVXyK5PAAAgAElEQVQ87wbczd7evqqhu2TJEnVD19raWt3QLSkpER0QQG0MHz580qRJM2fOTElJeezB+/fv79evn+ZDaYOHh0fz5s13794tOgggXxRzAeB/+O0AAAAAAAAAAI0yNzdnYm7DlJKScv78efXa399fbBiZKC8vnzhxoqGh4caNGxUKxZNcavDgwVFRUdX/Df/GjRtzcnLm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//7s2bO0S39EIrG7u9vY2Jhx1RZOIigoGBoa+vdztPj4+Dh7KEZSUpKpqenHjx9JJBKZTE5PT+/t7aV9iVa9nTVrFhaLvXXr1rJly4qKipqbm3E4nIGBAdjY0OgSExNdXV2XLVt269YtYWHhn1/Az88fGRl5/fp1xk2LfP/+fUFBQXx8/I4dO5ycnFRVVYWEhFRUVJydnS9cuNDT07Nw4cLY2NiSkpKenp4vX77g8fi4uLjg4GBHR0d2mYY7RsrKyuvWrdu7dy8nfViG6AEn5o6FgIAAFot9+PAh47bYtm3bzZs34cEC0MQBi7kQBExdXR0KhYLFXKbB4XBNTU1nzpwBHQRiFbQD5SfIxFwtLS15eXkWGU42PDzc2trKjo903759e+HChRgMJj8/H9lxodBY2NnZycjIXLlyBfGViUQiDoebPXt2VVXVgwcP0tPTFRQUEN8FhUIFBQW1trZev36dEYszGolE8vT0nDFjRmRkJLIrU6nUyMjIZcuWaWtrI7syEA0NDSgUatasWczZTldX99WrV3ACGQeYP39+RkbGo0ePurq6yGTy379EoVC8vLzY9K+O3xIbG3vkyJHz5887OzuDzgIxipCQ0OXLl48ePerv7+/nB89RMQAAIABJREFU58e+D6v8QFBQ8O7duxoaGosXL/7w4QP9C8bHxwsJCW3cuJH+pcZt8uTJcXFxqampmZmZc+bMefLkCcAwrAMWc5ng48ePX79+nTNnjpSUFCJld4hGQ0NDSkqqqKhofN+empqqrq6upaX1u99oaGjIz89fXFw8vn0hCILYyNevX0VERLi4uLi4uDZs2JCYmNjd3Q06FMRYKioqOByupaVl+/bt169fV1FRefv27fevksnk4eFhBweHifO0LT38/PykpKS+lwIpFMq8efPARmKQ4eFhPz+/VatWEYnE75eARkZGzp49GxERoa6urq2tHRsbi8FgcnJy3r17h8PhMBgMJ9UlOVV0dPSaNWsCAwMTEhJGKf+5urouWLAAkaG5nz9/LikpSUpK2r1797Jly/T19UVFRadPn25pablz585Hjx6JiIj8+eefycnJL168+Pbt25s3b9LS0qKjo729vY2MjMTExOjPwOJordxjx46BDgKxBFjMHSMbG5vc3NwfblIgaPny5TIyMvAZNmjigMVcCAKmrq6On59/5syZoINMFCoq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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pm4py.view_dfg(dfg[0], dfg[1], dfg[2])" + ] + }, + { + "cell_type": "markdown", + "id": "44453d55-a7d8-4d1a-9018-915fff847b2f", + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "### Graph Theory for Process Maps (using NetworkX)" + ] + }, + { + "cell_type": "markdown", + "id": "f7e01331-006e-4e50-be6b-2d0fa8ee7815", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "#### Converting the Process Map" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "0b018281-e478-40a8-a1bf-705a1211feb7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import networkx as nx\n", + "import itertools as it\n", + "G = nx.DiGraph()\n", + "alphabet = set(list(it.chain.from_iterable([[a,b] for (a,b) in dfg[0]]))).union(dfg[1].keys()).union(dfg[2].keys())\n", + "G.add_nodes_from(alphabet) # adding nodes\n", + "nx.draw(G, with_labels = True)" + ] + }, + { + "cell_type": "markdown", + "id": "eb6db59a-b79c-4704-907d-e609c4bf686c", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Adding Arcs" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "bb81afc9-e98c-437f-99b2-e918a93cd3f2", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "G.add_edges_from(dfg[0].keys())\n", + "nx.draw(G, with_labels = True)" + ] + }, + { + "cell_type": "markdown", + "id": "029f339d-a843-4b78-932b-2304de057e8f", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "### Degree of Vertices" + ] + }, + { + "cell_type": "markdown", + "id": "76e6a236-3fb6-4fbc-b22b-6912f73056e4", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "The *indegree* of a vertex $v$, i.e., $deg^-(v)$, represents the number of *incoming arcs* of $v$ in $G$. ($deg^+(v)$ is defined symmetrically)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "2d8ddbfb-cb55-4ad1-94aa-37c1e8ead821", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[('T06 Determine necessity of stop advice', 14),\n", + " ('T07-2 Draft intern advice aspect 2', 8),\n", + " ('T02 Check confirmation of receipt', 8),\n", + " ('T04 Determine confirmation of receipt', 7),\n", + " ('T05 Print and send confirmation of receipt', 7),\n", + " ('T08 Draft and send request for advice', 6),\n", + " ('T07-1 Draft intern advice aspect 1', 5),\n", + " ('T07-5 Draft intern advice aspect 5', 5),\n", + " ('T10 Determine necessity to stop indication', 4),\n", + " ('T03 Adjust confirmation of receipt', 4),\n", + " ('T09-4 Process or receive external advice from party 4', 3),\n", + " ('T07-3 Draft intern advice hold for aspect 3', 3),\n", + " ('T09-1 Process or receive external advice from party 1', 3),\n", + " ('T12 Check document X request unlicensed', 3),\n", + " ('T07-4 Draft internal advice to hold for type 4', 3),\n", + " ('T11 Create document X request unlicensed', 2),\n", + " ('T15 Print document X request unlicensed', 2),\n", + " ('T16 Report reasons to hold request', 2),\n", + " ('T17 Check report Y to stop indication', 2),\n", + " ('T14 Determine document X request unlicensed', 2),\n", + " ('T18 Adjust report Y to stop indicition', 1),\n", + " ('T09-2 Process or receive external advice from party 2', 1),\n", + " ('T13 Adjust document X request unlicensed', 1),\n", + " ('T09-3 Process or receive external advice from party 3', 1),\n", + " ('T20 Print report Y to stop indication', 1),\n", + " ('T19 Determine report Y to stop indication', 1),\n", + " ('Confirmation of receipt', 0)]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sorted([(n, i) for (n,i) in G.in_degree()], key=lambda t: t[1], reverse=True)" + ] + }, + { + "cell_type": "markdown", + "id": "539beaf7-a826-4954-8f7f-383bb7e4a9c3", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "### Dominator of a Graph" + ] + }, + { + "cell_type": "markdown", + "id": "0bc7fb2b-bdac-47dd-94b2-dd488d0c94b1", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "A vertex $d$ dominates a vertex $v$ in a graph $G$ iff every path from some given *entry node* $s$ visits $d$" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "5b6ce4d3-5321-45af-8d2e-ca423c18fc1f", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Confirmation of receipt': 'Confirmation of receipt',\n", + " 'T02 Check confirmation of receipt': 'Confirmation of receipt',\n", + " 'T03 Adjust confirmation of receipt': 'Confirmation of receipt',\n", + " 'T06 Determine necessity of stop advice': 'Confirmation of receipt',\n", + " 'T04 Determine confirmation of receipt': 'Confirmation of receipt',\n", + " 'T05 Print and send confirmation of receipt': 'Confirmation of receipt',\n", + " 'T13 Adjust document X request unlicensed': 'T05 Print and send confirmation of receipt',\n", + " 'T10 Determine necessity to stop indication': 'Confirmation of receipt',\n", + " 'T16 Report reasons to hold request': 'Confirmation of receipt',\n", + " 'T17 Check report Y to stop indication': 'T16 Report reasons to hold request',\n", + " 'T19 Determine report Y to stop indication': 'T17 Check report Y to stop indication',\n", + " 'T20 Print report Y to stop indication': 'T19 Determine report Y to stop indication',\n", + " 'T18 Adjust report Y to stop indicition': 'T17 Check report Y to stop indication',\n", + " 'T11 Create document X request unlicensed': 'Confirmation of receipt',\n", + " 'T12 Check document X request unlicensed': 'Confirmation of receipt',\n", + " 'T14 Determine document X request unlicensed': 'Confirmation of receipt',\n", + " 'T15 Print document X request unlicensed': 'Confirmation of receipt',\n", + " 'T07-2 Draft intern advice aspect 2': 'Confirmation of receipt',\n", + " 'T07-1 Draft intern advice aspect 1': 'Confirmation of receipt',\n", + " 'T08 Draft and send request for advice': 'Confirmation of receipt',\n", + " 'T09-3 Process or receive external advice from party 3': 'T08 Draft and send request for advice',\n", + " 'T09-1 Process or receive external advice from party 1': 'Confirmation of receipt',\n", + " 'T07-3 Draft intern advice hold for aspect 3': 'Confirmation of receipt',\n", + " 'T07-5 Draft intern advice aspect 5': 'Confirmation of receipt',\n", + " 'T09-2 Process or receive external advice from party 2': 'T07-5 Draft intern advice aspect 5',\n", + " 'T09-4 Process or receive external advice from party 4': 'Confirmation of receipt',\n", + " 'T07-4 Draft internal advice to hold for type 4': 'Confirmation of receipt'}" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nx.immediate_dominators(G, 'Confirmation of receipt')" + ] + }, + { + "cell_type": "markdown", + "id": "0d2129ff-a777-4ddc-bf35-d89c66682c0a", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "### Centrality of a Node" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "06a4ce31-9907-4827-9a35-6889b5bdae86", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[('T06 Determine necessity of stop advice', 1.0),\n", + " ('T05 Print and send confirmation of receipt', 0.6538461538461539),\n", + " ('T02 Check confirmation of receipt', 0.6153846153846154),\n", + " ('T07-2 Draft intern advice aspect 2', 0.576923076923077),\n", + " ('T04 Determine confirmation of receipt', 0.5),\n", + " ('T08 Draft and send request for advice', 0.42307692307692313),\n", + " ('T07-1 Draft intern advice aspect 1', 0.42307692307692313),\n", + " ('T07-5 Draft intern advice aspect 5', 0.38461538461538464),\n", + " ('T10 Determine necessity to stop indication', 0.38461538461538464),\n", + " ('T07-3 Draft intern advice hold for aspect 3', 0.2692307692307693),\n", + " ('T12 Check document X request unlicensed', 0.23076923076923078),\n", + " ('T03 Adjust confirmation of receipt', 0.23076923076923078),\n", + " ('T09-4 Process or receive external advice from party 4',\n", + " 0.19230769230769232),\n", + " ('T09-1 Process or receive external advice from party 1',\n", + " 0.19230769230769232),\n", + " ('T09-3 Process or receive external advice from party 3',\n", + " 0.19230769230769232),\n", + " ('T07-4 Draft internal advice to hold for type 4', 0.19230769230769232),\n", + " ('T11 Create document X request unlicensed', 0.15384615384615385),\n", + " ('T17 Check report Y to stop indication', 0.15384615384615385),\n", + " ('T14 Determine document X request unlicensed', 0.15384615384615385),\n", + " ('T16 Report reasons to hold request', 0.11538461538461539),\n", + " ('T20 Print report Y to stop indication', 0.11538461538461539),\n", + " ('T18 Adjust report Y to stop indicition', 0.07692307692307693),\n", + " ('T15 Print document X request unlicensed', 0.07692307692307693),\n", + " ('T09-2 Process or receive external advice from party 2',\n", + " 0.07692307692307693),\n", + " ('Confirmation of receipt', 0.07692307692307693),\n", + " ('T13 Adjust document X request unlicensed', 0.07692307692307693),\n", + " ('T19 Determine report Y to stop indication', 0.07692307692307693)]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sorted(nx.degree_centrality(G).items(), key=lambda t: t[1], reverse=True) " + ] + }, + { + "cell_type": "markdown", + "id": "b5815fd2-8a95-4101-bffc-cb71082588a4", + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "## Discovering Process Models" + ] + }, + { + "cell_type": "markdown", + "id": "2af23a8f-1f16-412f-95ea-470d6a36a375", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "### Discovering a BPMN Model (Raw Data)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "3394be65-091d-4630-9fa6-76b34a03d3d4", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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PfXUSSed9Pe//z3oRAAAAAAAVGr62AAAAAAAAAAA1ESRSOT222/v1KlTt27dFi5cWFhYuOt4dnb2mWeeOWTIkGDjAal23nnnvffee3vttVeLFi2efvrpoOMAAAAAAFB56WMDAAAAAAAAAFDjbNmy5YILLhg9evS999573333nXHGGb17987Ozs7MzDzooIMeffTRcDgcdEYg5Q477LDly5d37ty5Y8eOI0aMiEQiQScCAAAAAKAyCvtfkAEAAAAAAAAAqFHWrFlz/vnnb926dcGCBSeddNKug99//32zZs2++eablStXnnDCCcEmBNLsrrvuGj58eKdOnWbOnFmnTp2g4wAAAAAAULnoYwMAAAAAAAAAUIMsW7bs/PPPP/rooxcsWHDQQQcVP/Xcc8998skngwcPDiobEKCXXnopJyenadOmixcvbtiwYdBxAAAAAACoRPSxAQAAAAAAAACoKZ544olu3bq1b9/+0Ucf3XPPPYOOA1Qu69ata9++fUFBwXPPPde0adOg4wAAAAAAUFlkBB0AAAAAAAAAAADS4a677urcufOAAQMWLFigjA3EOuKII1asWNGgQYNTTjnlnXfeCToOAAAAAACVhT42AAAAAAAAAADVXCQSGTNmzNChQ0eNGjVt2rSMDH8zA8R30EEHLVu27Pjjj2/duvUzzzwTdBwAAAAAACqFcCQSCToDAAAAAAAAAACkys8//9ynT5/58+fPnDmze/fuQccBqoCff/65X79+c+bMeeSRRy688MKg4wAAAAAAELCsoAMAAAAAAAAAAECq5OfnX3jhhUuXLn366adPP/30oOMAVUN2dvbDDz/csGHDHj165Ofn9+rVK+hEAAAAAAAESR8bAAAAAAAAAIDqKT8/v2vXrkuXLn3qqadOPfXUoOMAVUk4HJ4yZUrdunV79+79448/Dh48OOhEAAAAAAAERh8bAAAAAAAAAIBqKD8/PycnZ9myZUuXLm3ZsmXQcYAq6eabb65Tp87ll1++c+fOIUOGBB0HAAAAAIBg6GMDAAAAAAAAAFDd5Ofnd+7cecWKFc8//3yLFi2CjgNUYdddd11BQcHQoUMLCwuHDh0adBwAAAAAAAKgjw0AAAAAAAAAQLWybdu2888//80333zhhRd+97vfBR0HqPJuuOGGPfbY46qrrqpVq9bgwYODjgMAAAAAQLrpYwMAAAAAAAAAUH3s3Lmza9eub7311gsvvHD88ccHHQeoJoYPH759+/bLL798jz326Nu3b9BxAAAAAABIK31sAAAAAAAAAACqiUgkMmDAgBdffHHJkiUJytgrV67csGFDOoMBVUWrVq0OOeSQuKdGjhz5ww8/DBw4cO+99+7SpUuagwEAAAAAECB9bAAAAAAAAAAAqomrr746Nzf3ySefPPnkkxMMu+OOOxYsWJC2VEAVMm/evJycnJLO3nrrrd9//32PHj3q1q3bvn37dAYDAAAAACBA+tgAAAAAAAAAAFQH48aNu/POO2fPnn3mmWeWOrhz587z589PQyqgCgmHw6UO+POf//zDDz906dJlyZIlrVq1Sk8wAAAAAACClRF0AAAAAAAAAAAAKK977733pptumjp1ateuXYPOAlRnGRkZDz/8cNu2bc8555z//u//DjoOAAAAAADpoI8NAAAAAAAAAEDVtnDhwssuu2z8+PFDhgwJOgtQ/WVlZc2dO/fXv/71mWeeuWnTpqDjAAAAAACQcvrYAAAAAAAAAABUYe+8807Pnj0HDRo0cuTIoLMANcWee+755JNPZmZmnn322Vu3bg06DgAAAAAAqaWPDQAAAAAAAABAVfW///u/55133h/+8Idp06YFnQWoWRo2bPjss8+uX7++V69ehYWFQccBAAAAACCF9LEBAAAAAAAAAKiStm3bdt5559WtW3fevHlZWVlBxwFqnCZNmixYsOCpp5669tprg84CAAAAAEAK6WMDAAAAAAAAAFD1RCKRPn36rFu3bvHixfXr1w86DlBD/b//9/9mzpx5xx13zJo1K+gsAAAAAACkiv8wMAAAAAAAAAAAVc/111+/cOHCJUuWNGnSJOgsQI3WrVu3Dz/8cNCgQb/5zW9OPPHEoOMAAAAAAFDxvB8bAAAAAAAAAIAqZt68eRMnTnzggQdOPfXUoLMAhCZMmHDaaaedd955X375ZdBZAAAAAACoePrYAAAAAAAAAABUJX//+98HDBgwZMiQXr16BZ0FIBQKhTIyMnJzc/faa68uXbrk5+cHHQcAAAAAgAqmjw0AAAAAAAAAQJXx448/XnDBBUcdddTEiRODzgLwbw0aNFi8ePHq1auHDRsWdBYAAAAAACqYPjYAAAAAAAAAAFVDJBK55JJLvv766wULFtSqVSvoOAC/0KxZs5kzZ06f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RMLhcNApyqJevXpXX3312LFjhw8f3rBhw6DjAAAAAADwf8KRSCToDAAAAAAAAAAAVH8FBQVHH310y5YtH3rooWCTdOnSZcGCBcFmACqnefPm5eTkBBjgp59+aty48aBBg8aOHRtgDAAAAAAAitPHBgAAAAAAAAAgHebMmdOzZ881a9YceeSRQWeJb/v27WvWrPnwww9Xr1797rvvfvDBB998800oFKpVq1YoFMrPzw+FQtdff/0tt9wScFCgZDt37rzzzjtvu+22wsLC66677oorrqhTp07QoXbPhAkTJk6cuH79+gYNGgSdBQAAAACAUEgfGwAAAAAAAACANIhEIscee+xvf/vb3NzcoLNE++CDD8aNG/fee+99+umnhYWFmZmZ2dnZO3bsiPq7mqysrM6dO8+ePTscDgcVFUjS999/P2XKlKlTp9arV++mm27q379/ZmZm0KGStWXLlsaNGw8ZMmT06NFBZwEAAAAAIBTSxwYAAAAAAAAAIA0ef/zxnJyc999//5hjjgk6S7Tt27c3bdp048aNCf6QJisrq1WrVkuXLt31rmygSti0adOECRPuvffeI4888s477zzttNOCTpSsm2++eerUqevXr69fv37QWQAAAAAACGUEHQAAAAAAAAAAgOrv1ltv7dSpUyUsY4dCodq1a0+ePDlBGTs7O/tXv/rVokWLlLGhajnggAOmTZu2Zs2aZs2atW3btmPHjp988knQoZJy5ZVXhkKh6dOnBx0EAAAAAIBQSB8bAAAAAAAAAIBUe+aZZ959992RI0cGHaREXbt2Pemkk7KysmJPZWVl1a9ff+nSpd5SC1VUkyZNHnvsseeee27dunVHH330jTfeuG3btqBDlaJ+/fqDBw++8847K39UAAAAAICaIJzgv+wLAAAAAAAAAADl16ZNmz333POZZ54JOkgir7766imnnBJ1MCMjo3bt2q+99tpxxx0XSCqgAv3888/33HPPTTfddMABB0yfPv30008POlEiX3311eGHHz5t2rQBAwYEnQUAAAAAoKbzfmwAAAAAAAAAAFLo7bffXrZs2dVXXx10kERWrlw5cODAfffdNzs7u/jxcDicl5enjA3VQ3Z29pVXXrl27dqWLVu2a9cuJyfnn//8Z9ChSnTggQf26NFjypQphYWFQWcBAAAAAKjp9LEBAAAAAAAAAEihyZMnH3vssW3atAk6SHxbt24dMWLEKaecsv/+++fl5WVk/PvPacLh8IMPPtiuXbsA4wEVrlGjRo888kheXt7KlSuPOuqoRx99NOhEJbr66qv/53/+Jy8vL+ggAAAAAAA1nT42AAAAAAAAAACpsn79+scff/y6664Lh8NBZ4njlVdeOeaYY2bMmPHggw8uW7bslFNOGTZsWFZWVpt3IgEAACAASURBVCgUCofDY8eOvfjii4POCKTEueee+9FHH1144YU9e/bs0qXLN998E3SiOI488shzzjnntttuCzoIAAAAAEBNF45EIkFnAAAAAAAAAACgerryyisXLlz4ySefZGdnB53lF/Lz80ePHj1p0qSzzjprxowZBx544K7jW7Zsady48bffftu3b98HHngg2JBAGrz44ot9+vTJz8+fMWNGx44dg44T7fXXXz/55JNXrFhxyimnBJ0FAAAAAKDm0scGAAAAAAAAACAlNm/efOihh44bN27o0KFBZ/mFv/3tb927d//444+nTJkyYMCAqLP33Xffk08+uWjRol0vygaqve++++6KK6549NFHBw4cOHny5L322ivoRL/QsmXLgw8+eMGCBUEHAQAAAACoufSxAQAAAAAAAABIiUmTJk2YMGHDhg316tULOsu/zZo167LLLvuv//qvv/zlL02aNIkdUFBQsH379spWyARSbf78+ZdeeumBBx742GOPHX300UHH+be5c+f26NHj448/bty4cdBZAAAAAABqqIygAwAAAAAAAAAAUA0VFBRMnz69T58+laeMvX379iuvvLJPnz59+/Zdvnx53DJ2KBTKzMxUxoYaqEuXLn/9618bNGjwu9/9btq0aUHH+bfOnTs3atTo3nvvDToIAAAAAEDNpY8NAAAAAAAAAEDFW7x48fr16y+99NKgg/yftWvX/v73v8/NzX3yySenTZtWq1atoBMBlc4hhxyybNmyK664YtiwYX369Nm+fXvQiUKhUCgrK+vSSy+dMWPGTz/9FHQWAAAAAIAaKhyJRILOAAAAAAAAAABAddO2bdvatWs//fTTQQcJhUKhp59+ulu3bkcdddS8efMOPfTQoOMAld1TTz3Vs2fPpk2bPvHEEwcffHDQcUJff/31oYceOnXq1IEDBwadBQAAAACgJvJ+bAAAAAAAAAAAKthHH3308ssvX3HFFUEHCYVCoWnTpp177rkdO3Z8+eWXlbGBZJx99tlvvfXW1q1bmzdvvmzZsqDjhBo2bNitW7c//elPQQcBAAAAAKih9LEBAAAAAAAAAKhgf/rTn4444og//vGPwcbYsWNH7969hw8fPmHChNzc3Nq1awebB6hCmjRp8vrrr5900klnnHFGbm5u0HFCl1122Zo1a1599dWggwAAAAAA1ET62AAAAAAAAAAAVKTvv/8+Nzf38ssvz8gI8k9Tvv3229NPP/2JJ57Iy8u77rrrAkwCVFF77713Xl7ekCFDevXqNWnSpGDDNG/e/IQTTpgxY0awMQAAAAAAaiZ9bAAAAAAAAAAAKlJubm4kEundu3eAGT755JOWLVtu3Lhx1apVZ599doBJgCotIyNj0qRJ06ZNGzFixJAhQwoLCwMM069fv/nz52/evDnADAAAAAAANZM+NgAAAAAAAAAAFenBBx/MycnZZ599ggrw1ltvtWrVqnbt2q+88kqzZs2CigFUG1dcccWCBQtmzJjRuXPnbdu2BRWje/fumZmZs2fPDioAAAAAAECNpY8NAAAAAAAAAECFeeutt957773+/fsHFWDJkiVt2rRp3rz5a6+9dvDBBwcVA6hmzj///Gefffall14666yzvvvuu0Ay1KtXr0uXLvfff38gqwMAAAAA1GT62AAAAAAAAAAAVJgZM2b85je/admyZSCr5+XlnXPOOZ06dVq8eHHdunUDyQBUV6eeeuprr722bt26P/zhDxs2bAgkQ//+/T/44IO33347kNUBAAAAAGqscCQSCToDAAAAAAAAAADVwY8//vgf//Ef48ePHzJkSPpXnzt3bq9evS655JJ77rknIyPRWwpWrlwZVJcSqORatWp1yCGHJBjw+eefn3nmmVu3bl22bNnhhx+erlz/dtxxx7Vo0eK+++5L/9IAAAAAADWWPjYAAAAAAAAAABVjxowZQ4YM2bhx47777pvmpR944IGBAwdeddVVEydODIfDiQd36dJlwYIF6QkGVC3z5s3LyclJPOabb745/fTTv/vuu2XLlh122GHpCVZk2rRpN95445dfflmvXr00Lw0AAAAAUGPpYwMAAAAAAAAAUDFatGjRtGnT3NzcNK97//33Dxo0aPTo0aNHj05mfJcuXUKh0Pz581OcC6hiwuFwMn3sUCi0efPmdu3a/fOf/1y2bFnjxo3TkK3It99+e/DBB9999919+/ZN57oAAAAAADVZRtABAAAAAAAAAACoDj766KM333wz/f3Ahx566NJLL7355puTLGMDlF+DBg2effbZffbZp02bNuvXr0/n0vvuu+8FF1wwY8aMdC4KAAAAAFDD6WMDAAAAAAAAAFABZs2addhhh7Vu3TrNi/br12/UqFGjRo1K57oA+++//4svvlivXr02bdp89tln6Vy6X79+q1at+utf/5rORQEAAAAAajJ9bAAAAAAAAAAAyquwsHD27Nk9e/bMyEjfn6M8+uijl1xyyQ033DBmzJi0LQpQZFclu27duu3atdu4cWPa1j311FObNm06c+bMtK0IAAAAAFDD6WMDAAAAAAAAAFBeS5cu/eKLL3r06JG2FZ9++uk+ffoMHz583LhxaVsUIMoBBxzwwgsvZGVlnXbaaZs2bUrPouFw+JJLLpk9e3Z+fn56VgQAAAAAqOH0sQEAAAAAAAAAKK9Zs2a1bNnyyCOPTM9yb7zxRteuXS+66KLbb789PSsClOTAAw988cUXCwoKzj777J9++ik9i3bv3v3bb79dunRpepYDAAAAAKjh9LEBAAAAAAAAACiXLVu2LFq06OKLL07Pch9++OFZZ53Vtm3bBx98MBwOp2dRgAQaNWr0/PPPf/755zk5OTt37kzDiv/5n//ZqlWrOXPmpGEtAAAAAAD0sQEAAAAAAAAAKJf58+cXFhbm5OSkYa0NGzacccYZxx133Lx587KystKwIkAyjjjiiMWLFy9fvnzQoEHpWfGiiy7Ky8tL2xu5AQAAAABqMn1sAAAAAAAAAADKZc6cOR06dGjQoEGqF/rxxx87duy433775eXl1a5dO9XLAeyW3//+9/PmzZs1a9bYsWPTsFxOTs6OHTueeuqpNKwFAAAAAFDD6WMDAAAAAAAAAFB2//jHP5YtW3bhhRemeqHCwsIePXps3LgxLy9v7733TvVyAGXQoUOHe+65Z8yYMTNnzkz1Wvvvv3/btm3nzJmT6oUAAAAAAMgKOgAAAAAAAAAAAFXY/Pnz69Sp06FDh1QvdO211z777LNLliw54ogjUr0WQJn179//s88+GzBgwH777XfuueemdK2LLrpowIAB33777b777pvShQAAAAAAajjvxwYAAAAAAAAAoOzmzp177rnn7rnnnild5aGHHrrjjjsefPDB1q1b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SZMmp556avFLTZ48ed26ddOmTQsGg8WvBnBEa9y48f333//AAw98/fXXxa92/vnn/+tf/1q5cmXxSwEAAAAAkEUeGwAAAAAAAACAQlm8eHH37t2LX2fLli3jxo276667mjRpUvxqAGXAqFGjmjdvPmzYsMzMzGKWatGiRe3atRcvXhyWxgAAAAAACMhjAwAAAAAAAABQGFnTVsOSx77ppptOPPHE2267rfilAMqG6OjoGTNmLF26dPbs2cUsFQwGu3Xr9t5774WlMQAAAAAAAvLYAAAAAAAAAAAUxuLFi6Oios4999xi1lmwYMFbb701ffr08uXLh6MvgDKibdu2w4YNu/XWW//1r38Vs1T37t0//vjjPXv2hKUxAAAAAADksQEAAAAAAAAAOLj33nvv7LPPrlKlSnGK/PrrryNHjhw4cGDXrl3D1RhAmTFhwoRy5crdfffdxaxz/vnnp6WlJSYmhqUrAAAAAADksQEAAAAAAAAAOLglS5Z07969mEXuvffe33777cEHHwxLSwBlTJUqVR588MGnn3562bJlxalTq1at5s2bv/fee+FqDAAAAADgKCePDQAAAAAAAADAQaxdu3bbtm3nn39+cYokJydPnTr1wQcfrFGjRrgaAyhj+vfv37Vr12HDhqWlpRWnzvnnn7948eJwdQUAAAAAcJSTxwYAAAAAAAAA4CAWL15crVq1Nm3aFLlCZmbm0KFDO3ToMGTIkDA2BlD2TJs27Ztvvpk6dWpxinTv3n3NmjXbtm0LV1cAAAAAAEczeWwAAAAAAAAAAA5iyZIl5513XnR0dJErvPTSS0lJSZMnTw4Gg2FsDKDsady48ejRo8ePH//Pf/6zyEW6dOkSFxf34Ycfhq8vAAAAAICjlzw2AAAAAAAAAAChHDhwYOnSpX/4wx+KXGHv3r133XXXkCFDijNhG+DoMXbs2GOOOSYhIaHIFSpUqNCuXbvExMTwNQUAAAAAcPSSxwYAAAAAAAAAIJTk5OSdO3d27ty5yBUefPDBn3/+efz48WHsCqAMq1Sp0v333z9jxozVq1cXuUjnzp0/+uijMHYFAAAAAHDUkscGAAAAAAAAACCUxMTEatWqxcfHF237d99999BDD9155521a9cOb2MAZdigQYNat2598803F7lC586d161bt2PHjjB2BQAAAABwdJLHBgAAAAAAAAAglMTExE6dOkVFFfH3TO68887q1auPHDkyvF0BlG1RUVGTJ0/+4IMP3n777aJV6NixY1RUVGJiYngbAwAAAAA4CsWUdgMAAAAAAAAAABzWli5dessttxRt75dffjl79uxXXnnlmGOOCW9XxbRt27a5c+ce6q60tLT9+/cHAoH9+/dnffD777+np6cHAoG9e/dmZGQEAoEaNWrUrFkz3P0Cue3atatKlSql3UVknX322Zdddtktt9xy/vnnlytX7lC3V6lSpVWrVomJiZdddlkk2gMAAAAAOHrIYwMAAAAAAAAAUKBvvvnm+++/79y5c9G2jxo16swzz+zTp094uyq+Tz/99MorryztLgAO4sEHH4yPj58+ffqoUaOKsL1Lly4ffvhhuJsCAAAAADjqBDMzM0u7BwAAAAAAAAAADlPPPPPMTTfd9MsvvxRhNOtrr712xRVXfPrpp+3bt49EbyUgMzOzfv36mzdvDr0sGAwGg8HJkyffdNNNJdIXHO0OHDjwwQcfvPDCC/Pnz09PT+/evfvAgQN79epVhO9Uh7+xY8c+/fTTqampVatWPdS9CxYsuPzyy3/66aci7AUAAAAAIFtUaTcAAAAAAAAAAMDhKzExsUOHDkWIOKalpd155539+/c/csPYgUAgGAxed911MTExIdbExMRUqFBh4cKFwthQYqKjo88777wXXnjhu+++mzZt2q5du6688sqTTjpp5MiRycnJpd1dmN1xxx3BYPChhx4qwt7OnTtnZmYuXbo07F0BAAAAABxV5LEBAAAAAAAAAChQYmJi586di7Bx1qxZmzdvTkhICHdHJW3w4MEZGRkFvRobG1u7du2kpKQePXqUZFdAlmOPPfbaa6/9xz/+sWnTplGjRi1atKhly5YdOnR45plndu/eXdrdhcexxx57++23P/bYY999992h7j3++OObNm2amJgYicYAAAAAAI4e8tgAAAAAAAAAAOTv+++/37hxYxHy2Pv27bv//vuHDh3aoEGDSDRWkmrUqNGmTZvo6Oi8L8XExLRu3Xr58uXx8fEl3xiQ0ymnnHL33Xd/8803y5cvb9my5ciRI0888cRhw4Z9/PHHpd1aGIwcOfL444+fMGFCEfZ26dJFHhsAAAAAoJjksQEAAAAAAAAAyN8//vGPmJiYM88881A3Tps27V//+tcdd9wRia5KzA8//DB+/Ph69eqtW7cu74jsYDA4YMCAjz76qEaNGqXSHpCvNm3azJgx49tvvx03blxiYmLnzp3btGnz7LPP7tu3r7RbK7ry5cvffffdTz31VGpq6qHu7dy5c1JS0m+//RaJxgAAAAAAjhLy2AAAAAAAAAAA5C8xMfGMM86oXLnyIe3avXv3gw8+OHLkyJNOOilCjUXaihUrhg0bVr9+/ccee+zyyy///PPPK1asmP1qMBiMioqaMGHCs88+W65cuVLsEyjI8ccff8stt6SkpHz00UdNmzb905/+dPLJJ999993bt28v7daK6Nprr23QoEFCQsKhbuzUqVNaWtry5csj0BQAAAAAwNFCHhsAAAAAAAAAgPx9/PHHnTt3PtRdjzzyyO+//3777bdHoqWI2r9//7x58zp16tS2bdukpKTJkyd/9913jz/+eJMmTfr3758VvY6JiYmLi1uwYMGYMWNKu1/g4Dp37jx79uwtW7b87//+7/PPP3/yySdffPHFS5YsKe2+Dll0dHRCQsLLL7+8cuXKQ9p48sknn3jiiZ999lmEGgMAAAAAOBrIYwMAAAAAAAAAkI/ffvstJSXlrLPOOqRdP/3006OPPjp69Ojq1atHqLFI2Llz58SJE08++eT+/fvXqVPn448//uKLL4YOHXrMMcdkLRg8ePD+/fujo6Nr1aqVlJTUs2fP0m0YOCQ1a9YcM2bMhg0bnn322e+//7579+4dOnR47bXXMjIySru1Q3DFFVe0bNny3nvvPdSN7dq1+/zzzyPREgAAAADAUUIeGwAAAAAAAACAfKxYsSI9Pb1du3aHtGvSpElxcXGjRo2KUFdh9+OPP955552nnHLKhAkTBg8evHnz5ldffbVjx465lnXo0KFRo0bt2rX74osvmjdvXiqtAsUUFxc3cODA5cuXf/zxx3Xr1r3yyivj4+NnzZq1f//+0m6tUILB4AMPPPDWW28lJSUd0sb27dvLYwMAAAAAFEcwMzOztHsAAAAAAAAAAOCw88gjj0yaNGnHjh2F37J9+/aGDRtOmDDhiMhjb968+bHHHps5c2bFihWHDx8+atSoatWqhVi/dOnStm3bxsXFlViHQERt3Ljx8ccff+qpp6pWrXrzzTePGDGiYsWKpd3UwZ155pk1a9Z88803C79lyZIl3bt33759e+3atSPXGAAAAABAGSaPDQAAAAAAAABAPvr27fvrr7++8847hd9y6623zp07NzU19TAPLa9du3bChAlz5sypU6fO6NGjhwwZUqFChdJuCigdW7duffjhh7P+NMPIkSNvuummY489trSbCuXtt9+++OKLk5KS2rZtW8gtO3furF69+oIFC3r27BnR3gAAAAAAyqqo0m4AAAAAAAAAAIDDUVJSUrt27Qq//qeffnr66adHjx59OIexU1NTBw4c2KJFi5UrV86aNWv9+vU33nijMDYczerWrfv4449v3rx56NChjzzySP369SdOnLhnz57S7qtAPXr0aNeu3QMPPFD4Lccee2yTJk0+//zzyHUFAAAAAFC2M0dmbgAAIABJREFUyWMDAAAAAAAAAJDbv//9702bNrVv377wWx555JHy5ctfd911keuqOHbs2DF27NhmzZolJiZOnz591apVV199dUxMTGn3BRwWTjjhhPvvv3/Lli233377xIkT69WrN2nSpH379pV2X/m76667Fi5cuGLFisJvad++/WeffRa5lgAAAAAAyjZ5bAAAAAAAAAAAcktKSsrMzGzbtm0h1+/cuXP69On/+7//W6lSpYg2VgS//PLLbbfdVq9evVdeeWXq1Knr168fOnRodHR0afcFHHYqV648ZsyY1NTUa6+9dty4cY0bN37hhRcyMzNLu6/cevbs2aZNmwkTJhR+S/v27ZOSkjIyMiLXFQAAAABAGSaPDQAAAAAAAABAbklJSaecckqNGjUKuX7y5MmZmZl/+tOfItrVoTpw4MBTTz3VuHHj5557bsKECd988811111nJjYQ2nHHHTdx4sT169d369btmmuu6dix46efflraTf2XYDB4xx13zJ8/Pzk5uZBb2rdvv3Pnzm+++SaijQEAAAAAlFXy2AAAAAAAAAAA5JaUlNSuXbtCLt6zZ8/UqVNvvvnmY489NqJdHZLPPvusY8eON9544yWXXPLVV1+NGjUqLi6utJsCjhgnnXTSrFmzkpKS4uLizj777P79+2/fvr20m/r/LrnkktNPP/0vf/lLIde3bNmyQoUKn3/+eUS7AgAAAAAoq+SxAQAAAAAAAADIbfny5YXPY0+dOnXfvn0jRoyIaEuF991331155ZUdOnSoWrVqcnLyjBkzjj/++NJuCjgitW7d+oMPPpg/f/6nn3562mmnPfroo+np6aXdVCDwnxHZr7322vr16wuzPjY2tmXLlklJSZFuDAAAAACgTJLHBgAAAAAAAADgv2zbtm379u2FzGPv27fv8ccfv/HGGw+HzHNGRsbUqVPj4+O/+OKLt956a9GiRU2bNi3tpoAjXu/evdesWXPrrbfeddddzZs3X7JkSWl3FAgEAn369Dn11FMfe+yxQq5v3br1l19+GdGWAAAAAADKKnlsAAAAAAAAAAD+S1JSUjAYPOOMMwqzeObMmb/88sstt9wS6a4OKjk5uWPHjrfeeuvgwYNXrlzZo0eP0u4IKDsqVKiQkJCwZs2aBg0anH/++QMHDvz3v/9dui1FR0fffPPNs2bN+uGHHwqzvmXLlqtWrcrIyIh0YwAAAAAAZY88NgAAAAAAAAAA/+XLL79s3Lhx1apVD7rywIEDkydPHjx4cM2aNUugsYLs3bt3zJgxbdq0iYqK+uKLLx5//PGKFSuWYj9AWdWgQYN33nnn1VdfXbx48emnn75w4cLS7eeaa66pXLnytGnTCrO4VatWu3fv3rhxY6S7AgAAAAAoe+SxAQAAAAAAAAD4L6tWrWrZsmVhVi5YsGDTpk0jR46MdEshfPrpp61atXrqqaemTJmSmJjYvHnzUmwGOBpcccUVKSkp5513Xu/eva+88sodO3aUVifHHHPMiBEjpk2b9uuvvx508emnnx4TE7Ny5coSaAwAAAAAoIyRxwYAAAAAAAAA4L8kJye3aNGiMCsfffTRnj17nnbaaZFuKV9paWkJCQmdOnWqV69ecnLyDTfcEBXll2GAklC9evXnn3/+3Xff/eyzz1q0aPHXv/61tDoZMWJEWlrazJkzD7qyQoUKjRs3XrVqVQl0BQAAAABQxsSUdgMAAAAAAAAAABxGdu7c+e233xYmj/3JJ58sW7YsMTGxBLrKa/Xq1QMHDvzmm28eeeSRkSNHBoPBwu9dtmzZ1q1bI9cbcOQ6++yz69SpU8jFF1xwQXJy8m233XbRRRcNGDBg+vTpFStWjGh7eVWvXn3IkCGPPfbYiBEjYmNjQy9u1aqV+dgAAAAAAEUQzMzMLO0eAAAAAAAAAAA4XCQmJnbp0uXbb789+eSTQ6+87LLLtmzZkpSUVDKNZTtw4MCkSZMSEhLOPvvsWbNmnXrqqYdaoU+fPq+99lokegOOdHPmzLniiisOdddrr702bNiwGjVqzJ49u02bNpFoLIRvv/22YcOGL7zwQr9+/UKvfPDBB6dMmeIPUgAAAAAAHCrzsQEAAAAAAAAA+P+Sk5OrVq1at27d0Ms2bdq0cOHCl19+uWS6yrZt27YBAwYsW7Zs4sSJN998c1RUVNHqXH755fPmzQtvb8CRLhgMFm3j5Zdf3qlTp2uuuaZDhw533XXXPffcEx0dHd7eQjjllFN69+796KOPHjSP3bJly23btu3YsaNGjRol0xsAAAAAQNlQxP9HCgAAAAAAAACAMmn16tUtWrQ4aCjx0UcfrVOnzqWXXloyXWV54403WrVq9f333y9btuzWW28tchgbIOxq1ar117/+9eGHH544cWLnzp1TU1NL8vRRo0YtX778s88+C73sjDPOCAQCycnJJdIUAAAAAEDZ4f+UAgAAAAAAAADg/1u1alXLli1Dr/n5559nzZo1atSomJiYkulq7969N9xwwyWXXHLJJZesWLEiK1IIcFgJBoOjRo367LPPdu3a1aZNm1dffbXEju7UqVO7du0ef/zx0Mtq1KhRu3btlStXlkxXAAAAAABlhjw2AAAAAAAAAAD/JyMjY82aNaeffnroZbNmzYqKirruuutKpqv169d36NBh7ty58+bNe/rppytWrFgy5wIUQcuWLZcvXz5gwIB+/fqNHDly//79JXPuiBEjXnvttW3bth20PfOxAQAAAAAOlTw2AAAAAAAAAAD/Z+PGjbt37w49HzszM3PGjBmDBg2qXLlyCbS0cOHC9u3bx8TELF++/PLLLy+BEwGKqXz58lOmTFmwYMELL7zQsWPHb7/9tgQO7du373HHHffkk0+GXtasWbOUlJQS6AcAAAAAoCyRxwYAAAAAAAAA4P8kJydHRUU1a9YsxJpFixZ98803w4YNi3Qz6enpY8eOveSSSy6++OKPP/64fv36kT4RIIx69+792Wef7du3r23btu+9916kjytXrtywYcNmzJixb9++EMuaNm361VdfZWRkRLofAAAAAICyRB4bAAAAAAAAAID/s3r16gYNGlSsWDHEmmnTpnXt2rV58+YR7WT79u3nnHPO1KlTX3zxxRdeeKFChQoRPQ4gEpo0abJs2bJu3bpdeOGFCQkJkU5B33DDDbt27Xr11VdDrImPj//tt99KZmQ3AAAAAECZIY8NAAAAAAAAAMD/Wbt2beig9bfffrto0aIbb7wxom0sX768ffv2P/300+eff96/f/+IngUQUZUqVXr11VefeOKJCRMm9OrV6+eff47cWbVq1br00kuffPLJEGuaNWsWDAZTUlIi1wYAAAAAQNkjjw0AAAAAAAAAwP/5+uuvmzZtGmLB1KlTa9asefHFF0euh7lz555zzjnNmjVbtmxZfHx85A4CKDFDhw59//33v/jii/bt2ycnJ0fuoBtuuOGzzz5bsWJFQQuqVKly4oknrl27NnI9AAAAAACUPfLYAAAAAAAAAAAEAoFARkbG+vXrmzRpUtCCvXv3zpo1a/jw4bGxsZFoIDMzc9KkSX379r366qvfeeedatWqReIUgFLRqVOnFStWnHTSSR07dnzrrbcidMo555zTvHnzGTNmhFgTHx//1VdfRagBAAAAAIAySR4bAAAAAAAAAIBAIBDYvHnzvn37QuSx58yZ8+uvv1533XWROH337t2XXXbZvffeO3PmzBkzZsTExETiFIBSVKtWrSVLlgwaNKhXr14JCQkROmXo0KEvvfTSzz//XNCC+Pj4lJSUCJ0OAAAAAFAmyWMDAAAAAAAAABAIBAJff/11IBAIkcd+6qmnLr300po1a4b96G3btp1zzjkfffTR3/72tyFDhoS9PsBhIiYmZurUqU8++eQDDzxw7bXX7t+/P+xHDBw4MBgMvvTSSwUtyMpjZ2Zmhv1oAAAAAICySh4bAAAAAAAAAIBAIBD4+uuva9euXbVq1XxfXbNmzbJly66//vqwn7t06dK2bdump6cvX7783HPPDXt9gMPN0KFD33rrrddff71r1647duwIb/Fjjz22b9++TzzxREGJ6/j4+N27d2/dujW85wIAAAAAlGHy2AAAAAAAAAAABAKBwLp160IMx545c+app54a9rz0zJkzu3bt2rZt28TExHr16oW3OMBh64ILLvj444+/++67s846KyUlJbzF//SnP3311VdLly7N99X4+PhAIBD2QwEAAAAAyjB5bAAAAAAAAAAAAoFA4Ouvvz7ttNPyfWn//v0vvfTS9ddfHxUVtt82yczMHD169NChQ8eMGfPWW29VqVIlXJUBjgjNmzdfvnx5nTp1OnTo8Pbbb4excps2bVq2bPn888/n+2r16tWPP/749evXh/FEAAAAAICyTR4bAAAAAAAAAIBAIOR87Ndff/2XX34ZNGhQuM7av3//1VdfPWXKlNmz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J588b968vNujoqJq1qwZHR2d9Wm5cuU6d+5cAm0DAAAAABy55LEBAAAAAAAAAI5q27ZtCwQCOedjz507t2rVql27di3M9oyMjGuuuWb+/PlvvfXWueeeG6EmAchpwoQJWZHsl19+ee/evT179nz99dcDgcCUKVP27t2bvey8886755578o7IPueccw4cOJD1cVpa2llnnVVinQMAAAAAHInksQEAAAAAAAAAjmpbt24N/Hcee968eZdddlm5cuUOujczM3P48OFz5syZN29eIfPbAITFX/7ylxEjRgwaNKhdu3ZLlizJylfv3r179uzZOZfde++95513XmxsbM6LTZs2bdGiRdaI7MzMTHlsAAAAAIDQ5LEBAAAAAAAAAI5GKSkpKSkpgUBg69at5cuXP+6447Kub9q0acWKFX369DlohczMzBEjRsyaNeu111676KKLItsuAP8tGAzee++9J5xwwrp169LT07MuZmRkTJw4MSMjI3tZVFTUq6++WrNmzZiYmOyLMTEx99xzT9ayE044oU6dOosWLdq9e3cJ3wIAAAAAwJFCHhsAAAAAAAAA4OiSnp4+ceLENm3atGnTZuLEiVu2bKlbt24wGMx6de7cudWrV//DH/5w0DpjxoyZMWPGiy++ePHFF0e4ZQBy++GHHzp27Pivf/0rO4wdCAQyMzM3bty4ePHinCurVav21ltvRUX9/18XjImJueyyyxo3bhwIBNq3b9+7d+8LL7ywZcuWH374YUm1DwAAAABwJJHHBgAAAAAAAAA4iqSkpHTs2HHcuHEJCQkJCQnjxo2bNm1atWrVshfMmzfv0ksvjY2NDV3njjvuePTRR1988cUrrrgiwi0DkNvmzZs7dOiQmpqalpaW66WYmJiHHnoo18VWrVpNnTo1+9Po6OhgMPjnP/85EAh88MEHq1evnj9//umnn961a9cRI0YYlA0AAAAAkIs8NgAAAAAAAADAUSE9PX3SpEmtW7cOBAIrVqwYM2bMmDFjVq9e3aRJky+//HLs2LFpaWkbN2784osv+vTpE7pUQkLCQw899MILL/Tr169Eegfg//v3v//dqVOnb7/9Nm8YOxAIpKenf/DBB2vWrMl1/frrrx80aFBMTEx6enpMTMyPP/44b968QCBw/vnnr1q16pJLLnnjjTfmzJkzZ86c008//f333y+JOwEAAAAA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nBW9rl+//r333tu/f//SSrADZdi+ffu2b9++du3alJSU7O9gmzdvzsjICAQC1apVy/6WlRXVbtSoUZUqVbK379ixo2bNmjkLxsbGZmZmXnPNNePGjatdu3a+h5b6WOy8DMoGAAAAAMoqeWwAAAAAAAAAgCNA8cdi55oInfVLIzkvFu3XSIo8KDs7ep2dYFy/fv2uXbsCgUC5cuXq1KmTM3TdrFmzU045pfB3PWDAgJdffjkzMzMYDNapU+e+++6TxAZK2G+//Zaamrphw4YNGzZkf7B169askHbNmjUb/kdGRsaf//znvBViYmKio6OHDRt211131ahRI+dLxR+LHaEfCgZlAwAAAABlkjw2AAAAAAAAAMBhLbxjsYPB3L8ukvdKEYQelL19+/acM2M3bty4bt263bt3BwKBuLi4k046KefY2Pr169erVy8qKqo4/SQkJIwbN65WrVrjx48fPHhw8Qd3A4RFWlra1q1bN/631atXp6enZ+W084qNjY2Ojh41atTYsWOrVq0a3rHYEfqhYFA2AAAAAFDGyGMDAAAAAAAAABy+ij8WO6+cWbuw5O6y5ByU3bdv3+3bt2eNhN20aVNaWlogEKhWrVrDhg0bNGjQMIeaNWuG5fRc/vrXv27YsGHYsGFxcXGRqA8QRvfcc89DDz30+++/h1gTExNToUKFnj17Llq0qHLlykUei51XhH4oGJQNAAAAAJQl8tgAAAAAAAAAAIej8I7FziUrcRfG3F22rEHZS5curV279rnnntu4ceOs3HWDBg2OO+648J4FUDZcddVVc+fOPXDgQEELypUrlz1Au169eu+9917Dhg3D2EDkfigYlA0AAAAAlA1Rpd0AAAAAAAAAAAC5paSkdOzYMSEhYdy4cZ988kl4w9gR1bBhww8//HD69Ok///zzmjVrevbsedVVV7Vv314YG6AgX331Va4wdrly5aKjowOBQHR0dOPGjTt06FChQoVatWr97W9/27RpU3jD2BHVp0+fNWvWtG7dunv37sOGDfv1119LuyMAAAAAgKKQxwYAAAAAAAAAOIykp6dPmjSpdevWgUBgxYoVY8aMyYrkhVeE5qBmiYqKGjp06KpVq6pUqdK+ffuxY8empaVF4iCAsmHjxo1RUVFZ3+3j4uLatm07bNiwZ555ZvXq1Vu2bGnevHliYmL//v3Xr19//vnnR6KBiP5QqFmz5uuvvz5nzpz58+e3aNHi/fffj8QpAAAAAAARFan/CRUAAAAAAAAAgEOVkpJyzTXXJCcnJyQkjB49OhJJ7CxZubvIpe+yHDhw4OGHH05ISGjRosWsWbOOoCnfACVm9+7d//M//9PmP5o2bZr9zf+ll14aOXJk1apVn3nmmXPPPTdyPZTMD4UffvjhhhtuePPNN4cPHz5x4sRKlSpF7iwAAAAAgPCSxwYAAAAAAAAAOCz8/vvv559//kcffXTddddNnz49JiYmcmeVTPQuEAikp6f/6U9/mjlzZpcuXRYvXhwXFxfR4wCOOPv27du1a1eNGjVyXV+5cmW3bt127tz5xhtv9OjRI6I9lNgPhR9++KFLly4bNmyYNGnSbbfdFtGzAAAAAADCKKq0GwAAAAAAAAAAIBAIBOLi4j744IMZM2a8/PLLbdu2XblyZYQOyk7cZaXvInRKIBBISUnp2LHj7NmzJ06c+Pe//10YGyCvPXv21KxZs1atWr169br//vvffffdHTt2BAKBVq1apaSk9OrVq2fPnsOGDfv1118j1ECJ/VCYN2/e6aefnpaWtmTJEmFsAAAAAODIYj42AAAAAAAAAMDhZcOGDUOGDPn0009vvfXW++67LzY2NozF844/jcRA1PT09EceeeTPf/5zq1atZs2a1bRp0/DWByhLKleuvHv37mAwGBsbu3///kAgUKNGjTPPPLN9+/Zt2rT57rvv7rjjjkqVKs2cObNbt27hPbpkfij8+OOPw4cPX7BgwfXXX//II49UqlQpvPUBAAAAACJNHhsAAAAAAAAA4LCTkZExc+bMW265pVGjRs8991yrVq2KXzPn1NPs3xjJ92IxpaSk9OvXb926dePGjRs9enR0dHRYygKUVS1atFi9enWuiznj2ccff3xsbOwPP/xwwQUXTJ06tX79+sU/tMR+KMybN2/48OGVKlV65plnunbtGpaaAAAAAAAlTB4bAAAAAAAAAOAwFdFB2ZGQPRY7Li5u165d5cqVq1OnTv3/iI+Pb9as2SmnnCKhDZBT3759582bl5GRUZjFlStXfu655y699NJId1V8xmIDAAAAAGVGTGk3AAAAAAAAAABA/ho2bPjhhx9mDcpetGhRuAZlR0hKSso111yTnJw8bty4AQMGpKambtiwYcOGDampqStWrJgzZ87OnTsD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PjYAAAAAAAAAcGAbNmy4+OKLJ0yYMG3atJEjR0ZFRQWdiMqrcePGU6dOffXVV4cMGRJ0FoBD2bFjxxVXXLFnz545c+acdNJJZXbuyy+/3LZt29q1a5fZiQAAAAAAlYc+NgAAAAAAAABwALNnz27RokVubu4nn3ySnJwcdBwItWvXbuzYsQ8//PBLL70UdBaAA8vLy7vuuutWrlz5t7/9rU6dOmV27rZt2+bOndulS5cyOxEAAAAAoFLRxwYAAAAAAAAA/kNeXl5aWlrnzp07duyYmZkZGxsbdCL4l+7du991113du3dftGhR0FkADqBXr15z586dOXNmo0aNyvLc119/fc+ePVdccUVZHgoAAAAAUHlEBh0AAAAAAAAAAChHsrOzr7322oyMjLFjx95yyy1Bx4F9PfbYY2vXru3QocN7770XHx8fdByA//PII4+MHTt26tSpbdq0KeOjp0yZ0q5du1q1apXxuQAAAAAAlYR9bAAAAAAAAADgX95///0WLVqsW7du0aJFytiUTxEREVOmTGnatGn79u3Xrl0bdByAf3nhhRcGDhz4+OOPX3XVVWV89E8//TR//vwuXbqU8bkAAAAAAJWHPjYAAAAAAAAAECooKBg5cmRCQkLLli0//PDD5s2bB50IDqpq1aqzZs2qU6dOu3btvv3226DjAIRmzpx588039+3b96677ir701977bX8/PzOnTuX/dEAAAAAAJWEPjYAAAAAAAAAVHbbtm3r2rXr/fff369fvxkzZkRHRwedCA6jRo0ac+bMCQsLu+yyy3744Yeg4wCV2qxZs7p06ZKamjpkyJBAAkyaNKlDhw6nnHJKIKcDAAAAAFQG+tgAAAAAAAAAUKktX768devW77777ty5c9PS0sLD/bcEHB/q1Kkzf/78H374oX379lu3bg06DlBJzZ07t0uXLtdff/1TTz0VFhZW9gE2bty4cOHCG264oeyPBgAAAACoPPwMFQAAAAAAAAAqr0mTJrVq1ap27dqLFy9OSEgIOg4cnbPPPvu99977/vvv27Ztu2XLlqDjAJXOvHnzrrzyymuuueavf/1rUB9oMnny5Jo1a/7ud78L5HQAAAAAgEpCHxsAAAAAAAAAKqNdu3b16tXrpptu6tGjx4IFC2JiYoJOBMVx1llnzZs3b/PmzR06dPjpp5+CjgNUIvPmzevcuXPXrl3Hjx8fVBk7FAq98MIL3bp1O+GEE4IKAAAAAABQGUQGHQAAAAAAAAAAKGsbNmxISUlZsWLFtGnTkpOTg44Dx+Scc8556623fvvb37Zr1+5vf/vbqaeeGnSi0vL1119PnTo16BRAKBQKzZ8//4orrujcufMzzzwTYBn7k08++fzzz8eNGxdUAAAAAACASkIfGwAAAAAAAAAql9mzZ994441nnXXWJ598EhsbG3QcKAGNGjXKzMxMTEy86KKL5s+ff8YZZwSdqFQsWrSoa9euQacAQm+++eaVV1551VVXPf/88xEREQEmmTRpUsOGDVu3bh1gBgAAAACAyiCsoKAg6AwAAAAAAAAAQFnIy8t75JFHHnnkkeuuu27s2LHVqlULOhGUpA0bNrRr1y4sLGz+/Pl169YNOg5QMU2aNKl79+7dunV77rnngi1j7969u27dunfccceAAQMCjAEAAAAAUBmEBx0AAAAAAAAAACgL2dnZSUlJ6enpY8eOnThxojI2FU+9evXefffdqKioiy++eMWKFUHHASqgkSNH/v73v+/Zs+eECROCLWOHQqGZM2dmZ2ffeOONwcYAAAAAAKgM7GMDAAAAAAAAQMX3/vvvd+vWrVq1atOnT2/evHnQcaAUff/99506dVq1atXMmTPbtGkTdByggigoKOjdu/eIESPS09MfeOCBoOOEQqHQpZdeGhUVNXv27KCDAAAAAABUfPaxAQAAAAAAAKAiKygoGDlyZEJCQsuWLT/88ENlbCq8WrVqvfPOOwkJCQkJCVOmTAk6DlAR7Nq165prrnnyySdffPHFclLGXrt27YIFC2655ZaggwAAAAAAVAr62AAAAAAAAABQYW3btq1r1673339/v379ZsyYER0dHXQiKAsnnHDCiy++2KNHj2uvvXbkyJFBxwGOb1u3br300kvffPPNN998s1u3bkHH+ZdnnnnmtNNO+93vfhd0EAAAAACASiEy6AAAAAAAAAAAQKlYvnx5cnLy999/P3fu3ISEhKDjQJmKiIj4y1/+Uq9evXvvvXfp0qWjR4+uUqVK0KGA48/atWsvv/zyLVu2vPfee82aNQs6zr/s2bPnueee6969e1RUVNBZAAAAAAAqBfvYAAAAAAAAAFABTZo0qVWrVrVr1168eLEyNpVW7969Z82aNW3atLZt23733XdBxwGOM2+//favfvWryMjIDz74oPyUsUOh0OzZs7/55pubb7456CAAAAAAAJWFPjYAAAAAAAAAVCi7du3q1avXTTfd1KNHjwULFsTExASdCIL0u9/9LjMz89tvv23duvXixYuDjgMcN8aNG5eUlJSQkJCRkVG3bt2g4/yHp59+ul27drGxsUEHAQAAAACoLPSxAQAAAAAAAKDi2LBhw8UXXzxhwoRp06aNHDkyKioq6EQQvPj4+H/84x+xsbEXXHDB+PHjg44DlHfbt2+/4YYbevbsOWjQoJdffvmkk04KOtF/+OKLL+bNm3fHHXcEHQQAAAAAoBLRxwYAAAAAAACACmL27NktWrTIzc395JNPkpOTg44D5UitWrXmzZvXu3fv22677YYbbti+fXvQiYByKisr69e//vXcuXPnzJnz4IMPhoWFBZ1oX6NGjapXr16HDh2CDgIAAAAAUInoYwMAAAAAAADAcS8vLy8tLa1z584dO3bMzMyMjY0NOhGUOxEREWlpaXPmzJk7d27r1q2zsrKCTgSUOxMmTPj1r3996qmnfvrpp0lJSUHHOYBt27ZNnDjxrrvuioiICDoLAAAAAEAloo8NAAAAAAAAAMe37OzspKSk9PT0sWPHTpw4sVq1akEngvIrKSnp008/jY6ObtWq1WOPPZafnx90IqBc2Lx5c3Jycmpq6p133rlw4cJf/OIXQSc6sGeeeWbPnj2///3vgw4CAAAAAFC5hBUUFASdAQAAAAAAAAAopvfff79bt27VqlWbPn168+bNg44Dx4e8vLw///nPDz/8cKtWrZ5//vmGDRsGnQgI0pw5c2655ZYqVao8++yzbdu2DTrOQRUUFDRu3DgxMXH06NFBZwEAAAAAqFzsYwMAAAAAAADAcamgoGDkyJEJCQktW7b88MMPlbHhyEVERPTp0+fjjz/Oyclp2bLluHHjgk4EBGPr1q233XZbx44dExMTP//88/Jcxg6FQnPmzFm1alXPnj2DDgIAAAAAUOnYxwYAAAAAAACA48+2bdu6d+/+2muv9e/f/+GHHw4P94HsUBw7d+4cMGDAY4891qFDh9GjR9etWzfoREDZmTt3bo8ePfLy8saNG9epU6eg4xxeYmJieHj4vHnzgg4CAAAAAFDp+HEsAAAAAAAAABxnli9f3rp163fffXfu3LlpaWnK2FBsJ5544vDhwxcuXLhixYq4uLjHH398z549QYcCSt1333130003XXbZZW3btl2+fPlxUcb+6KOP3nrrrd69ewcdBAAAAACgMvITWQAAAAAAAAA4nkyaNKlVq1a1a9devHhxQkJC0HGgIrjooouysrIeeuihfv36tWrVatGiRUEnAkrLnj17Ro0a1bhx44ULF86YMWPixImnnHJK0KGOSHp6eosWLfyrHwAAAAAgEPrYAAAAAAAAAHB82LVrV69evW666aYePXosWLAgJiYm6ERQcURFRfXp0+ezzz6rVatWmzZt7rzzzq1btwYdCihh7733XsuWLe+///4bb7xx6dKlnTt3DjrRkfryyy9nzJjRr1+/sLCwoLMAAAAAAFRGYQUFBUFnAAAAAAAAAAAOY8OGDSkpKStWrHj22WeTk5ODjgMV2bRp0+688849e/b07t37nnvuqVKlStCJgGP1zTff9OnTZ/LkyW3btn3yySebNGkSdKKjc8stt7z99turVq2KiIgIOgsAAAAAQGVkHxsAAAAAAAAAyrvZs2e3aNEiNzf3k08+UcaG0paSkvLll1/eddddaWlpzZo1mzZtWtCJgOLLyclJT09v1KhRRkbGa6+9tmDBguOujP3tt99Onjy5T58+ytgAAAAAAEHRxwYAAAAAAACA8isvLy8tLa1z584dO3bMzMyMjY0NOhFUCtWrV09LS1u1alXr1q27du3atm3bTz/9NOhQwNHZvXv3mDFjzjnnnD/+8Y/33XdfVlZW586dgw5VHI899lh0dPSNN94YdBAAAAAAgMpLHxsAAAAAAAAAyqns7OykpKT09PSxY8dOnDixWrVqQSeCyqVu3boTJ05ctGjR7t27W7Zs2alTp8WLFwcdCji8/Pz8adOmxcXF9erVq2PHjqtWrRo4cGDVqlWDzlUc2dnZY8aMueeee0488cSgswAAAAAAVF5hBQUFQWcAAAAAAAAAgOPM9u3bMzIykpKSSu+I999/v1u3btWqVZs+fXrz5s1L7yDgsAoKCl599dW0tLRly5Zdc801AwYMaNSoURln+OCDD7766qsyPhSO0QUXXPCLX/yijA9dsGDBAw88sGTJkuTk5KFDh8bGxpZxgJLVu3fv5557bu3atdWrVw86CwAAAABA5aWPDQAAAAAAAABHZ+HChd27d1+zZk3nzp3Hjh1bp06dkr1/QUHBqFGjHnjggaSkpOeffz46Orpk7w8UT35+/tSpUwcPHrxq1arrrrtuwIABDRs2LLPTU1JSpk+fXmbHQYmYMmVKly5dyuas/Pz8119/fejQoR999FFycvLgwYObNGlSNkeXnv/93/+tX79+WlrafffdF3QWAAAAAIBKLTzoAAAAAAAAAABw3Ni+ffudd97Ztm3bZs2avfrqq59//nl8fPwLL7xQgkds27ata9eu999/f79+/WbMmKGMDeVHeHh4t27dli5d+tJLL/3jH/9o1KhRp06dFi1aVGYBrr766gI4fpTZPxq5ubnPPvtsfHx8cnJynTp1Pvroo2nTplWAMnYoFBo6dGj16tV79uwZdBAAAAAAgMpOHxsAAAAAAAAAjkhGRsYvf/nLF154YezYsTNmzLjyyiuXLl16yy233HjjjR06dNi4ceOxH7F8+fLWrVu/++67c+fOTUtLCw/3Y30od8LDw1NSUrKysiZPnrxx48bzzz8/ISFh7ty5Zdk+Bfbavn37yJEjGzZs+Ic//OFXv/rVkiVLZs6c2bJly6BzlYxvv/127Nixffr0qVatWtBZAAAAAAAqOz+4BQAAAAAAAIDDyMnJ6du37yWXXHLOOecsXbr01ltv3ft41apVhw0b9t57761evbpp06bjxo07llMmTZrUqlWr2rVrL168OCEhoSSCA6UlIiLimmuu+eSTT+bPnx8ZGXnZZZe1aNFi4sSJu3btCjoaVAobN27s169f3bp1BwwY0KVLl7Vr106cODE+Pj7oXCVp2LBhNWvWvO2224IOAgAAAACAPjYAAAAAAAAAHFJGRkaLFi2efvrpMWPGzJkz58wzz9zngjZt2ixevPi2227r2bNn8Yayd+3a1atXr5tuuqlHjx4LFiyIiYkpoexAqUtMTHzzzTcXL17crFmzHj161K1b98EHH1y3bl3QuaBiKigomD9/fnJy8tlnn/3cc8/17t17w4YNf/7zn/f/t/Px7uuvvx43btyDDz5YtWrVoLMAAAAAAKCPDQAAAAAAAAAHcbBZ7P0dy1D2hg0bLr744gkTJkybNm3kyJFRUVElkR0oU82bN588efKGDRvuu+++F198MTY2tl27dtOmTcvLyzuSp//www9HeCVUWlu3bh03blzTpk3bt2+/fv360aNHr1mz5sEHHzzllFOCjlYqHnroodNPP/0Q/98DAAAAAICypI8NAAAAAAAAAAdw2Fns/RVjKHv27NktWrTIzc395JNPkpOTSyI4EJg6der06dPnyy+/nDJlSl5eXteuXc8999xHHnlkw4YNh37ik08+efHFFx/2MqicMjMzb7jhhpiYmN69eyckJGRlZX388ce33nprBR6OXrJkyaRJk4YOHXrCCScEnQUAAAAAgFBIHxsAAAAAAAAA9nHks9j7O/Kh7Ly8vLS0tM6dO3fs2DEzMzM2NrYksgPBi4yMvPrqq99+++2lS5defvnlTz75ZP369RMTEydPnpyTk3PAp7z++ut///vf4+Pjp06dWsZpodzasGFDenp6o0aNLrzwwuXLl48cOfLrr78eNWpUXFxc0NFK3QMPPNCyZcuuXbsGHQQAAAAAgH/RxwYAAAAAAACA/1OMWez9HXYoOzs7OykpKT09fezYsRMnTqxWrVpJZAfKl7i4uMcff3zjxo2vvPJK9erVU1NTY2JievTo8fbbb+fl5RVelp2d/emnn4ZCoe3bt3ft2vXqq6/eunVrcKkhYN9///1TTz3Vpk2bs88++4knnujQocMnn3yydxC7evXqQacrC2+++ea8efOGDRsWFhYWdBYAAAAAAP5FHxsAAAAAAAAAQqFjm8Xe3yGGst9///0WLVqsW7du0aJFt9xyyzEHB8q1qKioK664YsaMGV9//XVaWto///nPhISEX/ziF3fddVdGRkZ+fv4bb7xRtHX5+uuvN23aNDMzM8DMUPa2b98+derUK6644owzzujdu3f9+vXfeOONr7/++rHHHvvv//7voNOVnfz8/AcffPDyyy9v27Zt0FkAAAAAAPg/+tgAAAAAAAAAUDKz2PvbZyj766+/HjlyZEJCQsuWLT/88MPmzZuXyCnAceG000675557Pv3ItmGYAAAgAElEQVT00xUrVvTs2fOdd9656KKLzjrrrPT09PDw//tveHbv3v3tt99efPHFaWlpRWe0oUL6/vvvJ0yY0Llz59q1a1977bU///zzX//612+//Xby5MlJSUkRERFBByxrEydO/Pzzz4cNGxZ0EAAAAAAA/kNYQUFB0BkAAAAAAAAAIDA5OTmDBw8ePnx4UlLSuHHjSqqJvY/MzMzU1NTvvvsuLCysf//+9913X9E5XKByWrp06UsvvTR8+PDdu3fv/93w8PCWLVtOmTKlfv36oVAoJSUlFApNmzatrFNCcYWFhU2ZMqVLly77fys7O/tvf/vbtGnT3nzzzfDw8Isuuqhjx45du3atU6dO2ecsP3766adGjRpdeeWVTz31VNBZAAAAAAD4D/axAQAAAAAAAKi8SmkWe397h7L/8Ic//PTTT++8886mTZtK6SDgONK0adP27dsfsIwdCoXy8/MXL17crFmzF198sYyDQWnIy8vLzMwcMGDAr371q9NPP/2OO+6oVq3axIkTN2/ePH/+/F69elXyMnYoFBo4cGBubu7gwYODDgIAAAAAwL70sQEAAAAAAACojHJycvr27XvJJZecc845S5cuvfXWW0v7xKpVqw4bNuy9995bvXp106ZNx40bV9onAuXfnDlzqlSpcrDv7t69Oycn57rrrrv++uv37NlTlsGgpGzcuPHZZ5/t0qVL7dq1L7zwwsmTJ7ds2XLmzJnZ2dlTpkzp1q1bjRo1gs5YLmRlZY0ePTo9Pf2//uu/gs4CAAAAAMC+wgoKCoLOAAAAAAAAAABlKiMjIzU1NTs7Oz09vQya2PvYsWPHoEGDhg8fnpSUNG7cuNIb5QbKv0aNGq1atepIrqxWrdr555+/YMGC0o4EJSUsLOyss85av3591apVL7744qSkpKSkpMaNGwedq5xq27btTz/99OGHH4aHG1kBAAAAACh39LEBAAAAAAAAqERycnIGDx5cHrrQmZmZqampmzdvDqQTDpQH69evP/vssw/4rfDw8GrVqp38bzVq1Pjiiy+qVKny9ttvn3XWWWUbE4opLCzs2muvveGGGy655JKqVasGHadce+GFF2688ca///3vrVu3DjoLAAAAAAAHoI8NAAAAAAAAQGUR7Cz2/gxlQyW3atWqhQsX1qhRo3r16ieffHL16tWjo6P3fr1/eTUlJSUUCk2bNi2IpFAcYWFhU6ZM6dKlS9BByrtt27Y1bty4U6dOY8eODToLAAAAAAAHFhl0AAAAAAAAAAAodUVnsd95551iNJ/DwsKK/nbvp58XfbAYn4detWrVYcOGderUKTU1tWnTpuWkJQ6UmXPPPffcc88twRvu805VVOF71N5rir5l7f+sQ7yhFV58wGsOGKB4cxGHPmjvBeVtiOLQkcph4KN12L8Uiqd///67du0aMmRI0EEAAAAAADio8KADAAAAAAAAAEDpysjIaNGixdNPPz1mzJg5c+YUb4a6oKBgb/2s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Zs2arKysnTt3hkKhmJiYwup1XFxc8+bNTz755KDzwvFq48aNf/rTn55++umzzz67X79+119/fXh4eNChACAYzz333F133XXeeee99NJLZ511VtBxAAAAAAAoL/SxAQAAAAAAoLQc+yz2/irqUPbWrVu//PLLotXrFStW5OfnR0VF1a1bt+j2dZMmTapVqxZ0Xqho1q9f/+ijjz7zzDNNmjR5+OGHzYECUNmsWLHizjvvfOedd+69995HH300Kioq6EQAAAAAAJQj+tgAAAAAAABQ8kp2Fnt/x/tQ9pYtW4pWr5ctW7Z27dqCgoITTjghNja26PZ148aNIyIigs4LlcWyZcvS0tKmT5/+//7f/xsyZMhvf/vboBMBQKnbsWNHenr6sGHDmjRpMnr06AsuuCDoRAAAAAAAlDv62AAAAAAAAFDCSmMWe3/H0VD2pk2bilavP//88++++y4UCp1yyimxsbFFt6/PPvvs8PDwoPNCZfePf/yjf//+b731VmJi4rBhw1q2bBl0IgAoFbt27Xr22WeHDRv2008/PfLIIz179vRJQAAAAAAAHJA+NgAAAAAAAJSY0p7F3l95G8res2fPhg0bCqvXWVlZn3322fbt20OhUHR0dNHqdYMGDRo0aBB0XuCgMjIy+vXrl5GR0aFDhyFDhpx33nlBJwKAEvPzzz8//fTTI0aM+OGHH1JTUx9++OHTTz896FAAAAAAAJRf+tgAAAAAAABQMspmFnt/AQ5l5+bmfvHFF0W3r5ctW7Zjx45QKBQTE1O0en3eeeeddtppZRYMKCkLFix44IEHlixZkpycPGzYMB+jAMDxbtOmTePHj3/yySd37tx522233XfffTExMUGHAgAAAACgvNPHBgAAAAAAgGNV9rPY+yuDoeyffvrpiy++KLp9vXLlyry8vMjIyHr16hVWr+Pi4v77v//7pJNOKo0MQNnLz89/5ZVX+vXrt2HDht///vdpaWl6awAcd/bs2TNnzpxnnnnmjTfeOOWUU26//fZevXrVqlUr6FwAAAAAABwf9LEBAAAAAADgmAQ1i72/kh3K3rJlS9Hq9bJly9auXVtQUFClSpWGDRsWVq/j4+Pj4+NPPPHEkvpTAOXT7t27n3vuuUGDBv3444933nlnnz59oqOjgw4FAIe3YsWK559//vnnn//uu+/atm3bo0ePK6644oQT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O3bkyJHgwtGjR6urq2tqaiorKysrK4+7LOjibmvIkCGDBg2K5LfbxraTkpLS0tJSU1OTk5PT09MHDx6clJQUPCo5OXno0KFd8pUBelhNTc0vfvGL5cuXh8Ph73//+//0T//kBA0AfVFdXd2ePXv+8pe//PnPf/7Lp959993gU+WIESPGjx8/bty4Cy644IILLhg3btw555wTGxsb7akBAAAAAKDz5LEBAAAAAADgrx566KG77rrrjDPOOPPMMz//+c+PGjXqzDPPzMzMPOuss0aOHPm5z32utLS0m4qyu0OkFvtEGfL9+/c//fTTDz/88P79++Pj41vVZX/44YejRo06lQGampo+M7Z97NixmpqaVsvq6uoqKiqqq6tPlBVPTk4eNGhQRkZGcnLy4MGD09PTk5OTU1NTW0a4k5OTMzIyIhHu4CFDhgxJSkoKHhIXF3cqzw7onKqqqkcffXT58uVJSUnf+973br311qSkpGgPBcBxhMPhDz/88L333nv33Xf37t27d+/eIHr9wQcfNDU1hUKhESNGnHfeeWPGjDnvvPOCC+PGjRsyZEi0BwcAAAAAgC4mjw0AAAAAAAB/9cYbb1x88cWRq/Hx8bGxsQ0NDZF/VktJSRk+fHhjY+MHH3wwevTob3/729/97nd7Z5KwbS32iYTD4RdffPHRRx99+eWXW6ayjx49mp6e3iPDnlCQ6K6pqamtrS0vLz927Fhtbe2RI0fq6uqCFHdtbW11dXVFRUVtbW1VVVXLLHdtbW3w2BPVdCckJKSmpqalpSUlJbWMcKekpCQlJbWMcCcnJwfd3YmJiUOGDElMTBw8eHBqampCQoKybuicjz/+eMWKFatWrRo+fPidd955/fXXO0UCQLRUVVW9//7777///t69e9977729e/cGAex9+/aFw+FQKJSUlHT22Wefc845o0ePjqSvzzvvvNTU1GjPDgAAAAAAPUEeGwAAAAAAAP6qvr4+PT39RPHdVpKTkxMSElasWNHbirI/sxb7RPbs2fOLX/zi8ccf/+STT2JiYsLhcGxsbLeO2mOCIHfQyH2iC+0vOHr0aNADeVxBcjso4g4udOLqaaedlpyc3JNfFoi6999//9577/3lL385duzYu++++6tf/WpMTEy0hwLon44dO7Z///49e/bs27ev5YXgz2BNcnLyqFGjRo8ePXr06MzM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CQDRcujQoZUrV/70pz/NzMy84447vv3tb8fGxkZ7KAAAAAAAAKC7yGMDAAAAAAD0FtXV1aWlpUVFRQUFBUVFRceOHRsxYsSMGTNyc3NzcnJmzZqVkJAQ7RkBgH+3d+/e5cuXP/nkk+PHj//Rj340b968aE8EAAAAAAAAdAt5bAAAAAAAgGj66KOP1q9fX1RUVFhY+NZbb9XX12dmZubm5ubl5eXk5GRlZcXExER7RgDghHbs2LFkyZLnnntu1qxZy5cvv+yyy6I9EQAAAAAAANDF5LEBAAAAAAB62r59+4IAdlFRUUlJSWxs7Lhx44IS7C9+8YvnnHNOtAcEAE7Ohg0bli1b9uKLL+bl5d1///3Tp0+P9kQAAAAAAABAl5HHBgAAAAAA6Al79uwpKCgoLCxct27du+++Gx8fP3ny5JycnNzc3CuuuOK0006L9oAAwKkqLCy88847161b9+Uvf/m+++6bNGlStCcCAAAAAAAAuoA8NgAAAAAAQLcIh8ObN28OSrBfeeWVw4cPp6amXnTRRUEGOycnZ9CgQdGeEQDoegUFBd///vc3b9581VVX3X///eedd160JwIAAAAAAABOiTw2AAAAAABAl6muri4tLS0qKiosLPzTn/5UUVExfPjwmTNnBgHsWbNmJSQkRHtGAKDbNTU1Pf/883feeee77767YMGCpUuXZmZmRnsoAAAAAAAAoJPksQEAAAAAAE5JRUXFhg0bCgoKCgsL33rrrfr6+szMzCCAnZubO23atJiYmGjPCABEQUNDw+rVq++5554jR4780z/90+233z506NBoDwUAAAAAAACcNHlsAAAAAACAk7Zv376gBLuoqKikpKS5uXn06NF5eXk5OTlf/OIXzznnnGgPCAD0FvX19U899dSPfvSjmpqa/Pz8H/zgB+np6dEeCgAAAAAAADgJ8tgAAAAAADBwHThw4M477/zmN7956aWXRnuWPmDPnj1BAPull15655134uPjJ0+eHJRgX3755cOGDYv2gD3nJz/5yRtvvBHtKeDkLFq06Atf+EK0pwAGrqqqqkcfffT+++9PSEi47bbbbrnlluTk5OiO1NjYuGLFilAodNttt8XFxUV3GAAAAAAAAOjN5LEBAAAAAGCAeuaZZ26++ebGxsaKior8/PwHHnggNTU12kP1Lo2NjZs2bQoy2H/84x8//vjjwYMHT5kyJTc3N6jCHjRoULRnjI558+a9+eabF110UbQHgY567rnn1qxZM3/+/GgPAgx0hw8f/vGPf/zwww+ffvrpP/zhD6+77rr4+PioTFJWVrZgwYItW7aEQqFJkyatXr06KysrKpMAAAAAAABA7yePDQAAAAAAA87Bgwfz8/NfeOGFhQsXrly58v/8n/+Tn5+fmpr6xBNPXHHFFdGeLspqampKSkqKiooKCwvXrVt39OjR4cOHz5w5Mzc3NycnZ+bMmYmJidGeMfrmzZsXCoXWrl0b7UGgo2JiYuSxgd7jww8/fOihhx577LFzzz33jjvu+MY3vhEbG9tjRw+HwytXrlyyZMn48eNXr16dmJi4YMGC0tLSRYsWLVu2LCEhoccmAQAAAAAAgL6i5/49DwAAAAAA6A3Wrl07ceLEkpKSgoKCxx57LDU1dd68edu2bZs2bdqcOXNuuOGGysrKaM/Y0yoqKgoKChYvXpybm3vaaafNnj171apVgwYNuvvuuzdu3HjgwIHf//73t99+e25urjA2AHDqzjzzzFWrVu3ateuSSy657rrrJk+e3M5ZTp599tnf/va3XXXosrKynJycu+6669Zbb92wYcOUKVOysrJef/31ZcuWrVq1asaMGZs2beqqYwEAAAAAAEC/IY8NAAAAAAADxcGDB6+66qqrr776K1/5ytatWy+//PLIXSNGjHj++efXrFnzm9/8ZtKkSS+//HIU5+wZ+/fvX7t27S233DJ9+vShQ4fOmTNn7dq1EyZMePzxx9955519+/Y9++yzt9xyS3Z2dkxMTLSHBQD6oXPOOeexxx7bsmXL+PHjr7766osvvvjVV19ttaahoeH222+fP3/+qX88C4fDDz744LRp0+rr6zds2PDAAw9EqrDj4uJuv/324uLipKSkmTNnLl68uKGh4RQPBwAAAAAAAP2JPDYAAAAAAAwIbWux267p90XZe/bsefrpp2+44YYJEyaMGjXq2muvLSoqysnJ+fWvf/3xxx//5S9/eeyxx/7hH/7h85//fLQnBQAGiqysrGefffaNN95ISUm57LLL5syZU1xcHLl39erV7733Xjgcnjt37vr16zt9lLa12MedRFE2AAAAAAAAHJc8NgAAAAAA9HPt1GK31c+KshsbG7dv3/7444/Pnz9/Q5bueAAAIABJREFU+PDh5513Xn5+/vbt2+fOnfu73/3u8OHDGzduXLVq1bx584YNGxbtYQGAgWvWrFkFBQXr1q2rq6ubMWPG/Pnzd+3aVVtbu2TJkubm5ubm5vr6+ry8vE5kpNupxW5LUTYAAAAAAAAcV0xzc3O0ZwAAAAAAALrL2rVr8/PzU1NTn3zyyfaT2K0cPHgwPz//hRdeWLhw4YoVK9LS0rpvyK5VU1NTUlJSVFRUWFhYWFhYXl6enp4+c+bMvLy8nJycmTNnJiYmRnvGPm/evHmhUGjt2rXRHgQ6KiYmZs2aNfPnz4/2IACfobm5+be//e1dd921a9euSy655LXXXmtsbAzuio+PT09Pf/3118eNG9fB3crKyhYsWFBaWrpo0aJly5a1k8RupbGxccWKFUuXLh03btxTTz113D5tAAAAAAAAGDj0YwMAAAAAQP90UrXYbfWtouzKysqCgoKlS5fOmTPntNNOmz179qpVqwYNGrR06dKNGzeWl5e/9NJLt99+e25urjA2ANCbxcTEXHnllVu2bPnZz362fv36SBg7FAqFw+GKiorLLrvsvffe+8x9TqoWuy1F2QAAAAAAANCSPDYAAAAAAPRDa9eunThxYklJSUFBwWOPPZaamtq5febNm7dt27Zp06bNmTPnhhtuqKys7No5T8X+/fvXrl17yy23TJ8+fciQIXPmzPnVr36VmZn58MMP79mzZ9++fc8+++wtt9ySnZ0dExMT7WEBAE5CbGzsvn376urqWt0eDoc//vjjOXPmHD58uJ2Hl5WV5eTk3HXXXbfeeuuGDRs63W6dlZX1+uuvL1u2bNWqVTNmzNi0aVPn9gEAAAAAAIC+Th4bAAAAAAD6lVOsxW6rVxVl79mz5+mnn77hhhsmTJgwatSoa665pqioKCcn59e//vWhQ4f+8pe/PP3009/5znfOPffcKA4JAHCKDh8+/NBDD4XD4bZ3NTQ0vPPOO3l5ecc9Uc4p1mK3pSgbAAAAAAAAQvLYAAAAAADQn3RVLXZb0SrKbmxs3L59++OPPz5//vzhw4efd955N9544/bt2+fOnfu73/3u8OHDGzduXLVq1bx5804//fSeGQkAoLs98MAD9fX1J7q3oaFh27Zt//k//+fa2tqWt3dVLXZbirIBAAAAAAAY4OSxAQAAAACgP+jyWuy2eqwou6Ghobi4+MEHH5w7d+7pp58+ceLEf/7nfz5y5Mj3vve9devWffLJJ4WFhQ888MDcuXMzMjK6aQYAgGjZt2/fI488Eg6H4+Pjk5KSYmJi2q4Jh8Ovv/76vHnzgg7tLq/FbktRNgAAAAAAAANZTHNzc7RnAAAAAAAATsnatWvz8/NTU1OffPLJ7khit3Lw4MH8/PwXXnhh4cKFK1asSEtLO/U9Kysr169fX1hYWFRUVFhYWFtbm5mZmZubm5OTk5ubO3Xq1NhYJ5ntRebNmxcKhdauXRvtQaCjYmJi1qxZM3/+/GgPAtAh77///tuf2rlz544dO957770gep2YmBgbGxtpxr722mvvuOOO66+/vrS0dNGiRcuWLevyJHYrjY2NK1asWLp06bhx45566qkubOEGAAAAAACAXkseGwAAAAAA+rCW0eiVK1empqb22KEjIfAnnnjiiiuu6MQOBw4ceOutt4qKigoKCkpLS5uamkaPHh0EsHNyciZMmNDlM9NV5LHpc+Sxgb4uHA6/++67b7/99u7du3fv3r1jx46dO3ceOHCgubk5Li7uwgsvXL16dU9Go8vKyhYsWNBjIXAAAAAAAACILnlsAAAAAADoq3q4FrutThRl79mzJ1KCXVZWFhcXN27cuNzc3Ly8vEsvvfSMM87ogbE5dfLY9Dny2ED/U1ZW9q1vfau0tHTu3Lk//elPzz777B4eQFE2AAAAAAAAA0dstAcAAAAAAABO2sGDB6+66qqrr776K1/5ytatW6MSxg6FQiNGjHj++efXrFnzm9/8ZtKkSS+//HLbNY2Njdu3b3/88cf/4R/+4eyzzz7vvPNuvPHG7du3z50793e/+93HH3+8ffv2xx57bN68ecLYAAAdEQ6HH3zwwWnTpjU0NLz11lu/+c1vej6MHQqF4uLibr/99uLi4qSkpJkzZy5evLihoaHnxwAAAAAAAIAeEB/tAQAAAAAAgJMTqcUuKCiIVhK7pXnz5l1yySX5+flz5swJirIHDRq0efPmgoKCoAr7yJEjaWlps2bNuu6663Jzc2fPnp2UlBTtqQEA+qSysrIFCxaUlpYuWrRo2bJlCQkJ0Z0nKyvr9ddfD4qy//CHPyjKBgAAAAAAoF/Sjw0AAAAAAH1Gl9Rix/yttjd2Ys+WRdnnn39+SkrK9OnTH3nkkbS0tHvvvXfr1q3l5eUvvfTS0qVL8/LyhLEHiJgTa7Wm/Ud15EAdH+AUn8vJzhBF7Y/UCwfunH7zRAA6IlKLXV9fv2HDhgceeKATYezu+CioKBsAAAAAAIB+Tx4bAAAAAAD6hrVr106cOLGkpKSgoOCxxx5LTU3t3D7Nzc3Nzc0tLwSXW93SCfPmzdu2bdv06dPD4fA111xTVlb2L//yL/n5+RMnToyN9U8SfcCf//znNWvW1NTUdNWGzZ9qdTkQExMT3NIyDNb8t9rfv/3YWNtDtzxWx7Wc6kQPP5VvnO7wmU+ztw3cCacSsAeIioqKil/84heffPJJ5x5eVlaWk5Nz11133XrrrRs2bOh0B3X3fRQMirKXLVu2atWqGTNmbNq0qdNbAQAAAAAAQG/jl58AAAAAAKC365Ja7FZaJUuDxOmpbztixIjf//73a9aseemllyZNmvTyyy+f+p70mPfff/9rX/va6aef/vWvf/3f/u3furXZsuVLLvJqPNkXYSdiY52LZJ+inj9iP4hbBzqStwfoK2pqar7zne+MGDHiy1/+8r/+679WV1d38IFdUovdSjd9FFSUDQAAAAAAQH8ljw0AAAAAAL1aV9VitxXJ4XRVAiciKMqeNm3anDlzbrjhhsrKyi7cnO527NixZ5999stf/vLpp59+4403/ulPf2pqaurEPid6UXX8xdblr8zIAHqVAYiWcDj8f//v//36178+bNiwa6655sUXX2w/sdxVtdhtdd9HQUXZAAAAAAAA9D/y2AAAAAAA0Et1Ry12jxkxYsTzzz+/Zs2a3/zmN4qy+5xwOBwKhSoqKn75y19+8YtfHDly5C233FJYWBjtubpeJIcWSWjHfKrtgraLW+1zog3bP0TbNe0cqOVDTjRJq51bTd7yEO1sdaL9T+pR7X/FTuXhAH1aY2Njc3NzXV3d888/P3fu3NNOO+2b3/zm73//++Dv34juqMXuMYqyAQAAAAAA6GfksQEAAAAAoDfqvlrsloJexO6oIA4oyu7r6uvrQ6HQoUOHfv7zn8+ePXvMmDFLly7dvXt3tOfqGjEtSkGD74LI5UhlaHB75MbI5bb7tN2w7Q7HPcRxH9XqatvJW23S6vbIjZGjt/zzuA9pefuJ9u/go9r5apzUQU/0BQfoN4KIclVV1bPPPvv3f//3o0aNCk6A0tzc3H212C1190dBRdkAAAAAAAD0G93472oAAAAAAEAnHDhw4L/9t//2u9/9Lj8//4EHHuimJHYgSOB0aw4n8Mwzz9x8881DhgzJzc09duxYtx6LTvvoo49ee+219tfEx8eHw+EhQ4acc845//Zv/zZq1KiO7Nz2Ndbqls9ccFKbf+a9kRtP9NiWeeCWa9pZ387iVje2fOBxx+jIEdufs+Mjnejr03bIkx2g/ZE+84vQkaffkQUtV1500UVnnXVWRxYDdIfa2trf//737a8J/p4dOnRoZWVlVlbWv/7rv2ZlZXXfSD32UbCsrGzBggVbtmxZsmTJbbfdFh8f362HAwAAAAAAgC7nn7gAAAAAAADo7VomeLs1MxYJGB+3F7pLdMn8HZ8zErQ7qbjdZ65sO0CrXutT3B8AAAAAAAAAoPfQjw0AAAAAAL3R2rVr8/PzU1NTn3jiiSuuuKI7DtHxDt5TcfDgwfz8/BdeeGHhwoUrV67s1rpvTtEf//jHyy+//Lh3JSYm1tfXn3feed/4xjeuvfbaO++8MxQKrV27toM796p+7HZe+R1ptz71fuzPbIE+qfUnarpuu6Yjj2r/aXZwws8cqeMH7dp+7DVr1syfP78jiwG6w4EDBzIzM497V/D37BlnnHHNNdfMmzcvJydnx44dCxYsKC0tXbRo0bJlyxISErp8np75KBgOh1euXLlkyZLx48evXr16ypQp3XEUAAAAAAAA6G76sQEAAAAAIJoWLVr0yiuvTJw4cfz48ePGjbvgggvGjh2blJQ0b968Sy65JD8/f86cOQsXLlyxYkVaWloXHrdV6uZku3M7KJIqLygoOFHQl96sVTwsNze3q3Zu+ZI7lTD2yergzu2XTnduvO54mq1qw1t+STuxfycS0S0HaP/hnxllb+fG7ns9AERXQkJCQ0NDamrqf/2v/3X+/Plf+tKX4uP//bc4srKyXn/99RUrVixduvQPf/jDU0891bVJ5p75KFhWVtbdqXIAAAAAAADoGfLYAAAAAAAQTaNHj/7v//2/b926NT4+vqGhobm5OTY2dtSoURMnTpw4ceKXvvSlKVOm/PSnP/1//+//dVVRdiQ/2aoUMfJnl0Rx1GL3afHx8eFwOD09/dprr73mmmtyc3NjY2M7t1XL11vob19dQfQrdGovuXaCx60OHTlo+4+NjBQTE3Pc4Y8bqw61+c5qtXnkQuSulhu2WnmiTdoeNDJnq81bxeralmNHtm07z3GHbOu4A3Twv/JJHbSdfGDnYucAURcXF9fU1JSYmHjllVd+/etf/w//4T8cN6gcFxd3++23z507d8GCBTNnzuyqSHPPfBRsWYu9YcMGtdgAAAAAAAD0dfLYAAAAAAAQTZMnTw6FQk1NTfX19cEtTU1NH3zwwQcffPDyyy83NTU1NjaGQqGKioq8vLwLLrjgu9/97sKFC9sv723fcTM2XZtmVIvdpw0aNCiIh82ZM+fUQ1/tv7ROdG/HX5DtrPzMTdouaJUZ7uCen3ljqwUdv9qRr8+JHt7xbTvxnnDc3U7qv2YHb+zc6wegN4uPj/+7v/u7b3zjG3//938/ePDgz1zf5UXZPfBRsKys7Gtf+9qOHTu+973vqcUGAAAAAACgf+hklQEAAAAAANAlJk2adKJwdUNDQxDGDoVC4XA4Li5u796999133yuvvNKDA56cgwcPXnXVVVdfffVXvvKVrVu3CmP3LWedddavf/3rjz/++JlnnvlP/+k/SU8BQBdKSUl5/PHHDx48+L//9/++5pprOhLGDgRF2cXFxUlJSTNnzly8eHFDQ0O3jtpp4XD4wQcfnDZt2rvvvhsOhx977LHLLrvslltuefrpp7dv3+48GgAAAAAAAPRd8tgAAAAAABBNKSkpI0aMaGdBXFxcKBT60pe+tGvXrnfeeWf69Olz5sy54YYbKisre2rGjlq7du3EiRNLSkoKCgoee+yx1NTUaE/EyRkzZszVV1+dkpIS7UHoD4IzTZzofBMAA1B6evrChQtPO+20zj08KMpetmzZqlWrZsyYsWnTpq4d79SVlZXl5OTcddddt9566969e9etW7d06dIJEyYUFxcvXLhw4sSJQ4YMyc3NjcSzm5qaoj0yAAAAAAAAdFSM0w8DAAAAAEBPKi8v37ZtW3FxcVlZ2fbt20tKSpqbm+vr64+bSImNjR0/fvyjjz76xS9+MXLj2rVr8/PzU1NTn3jiiSuuuKIHZz+hgwcP5ufnv/DCCwsXLly5cqUkdr83b968UCi0du3aaA8CHRUTE7NmzZr58+dHexCAU1VWVrZgwYLS0tJFixYtW7YsISEh2hOFwuHwypUrlyxZMn78+NWrV0+ZMqXVgvr6+rfffrv4Uxs3bqyrq0tLS5s0aVL2p8aPHx8bq1QAAAAAAACAXkoeGwAAAAAAulFjY+Pu3bu3bNmyadOmLVu2bN68+cMPPwyFQsOHD5/8qddff/2Xv/xlXV1dywcmJCQMHjx46dKl//iP/xhUZLfUMv+8YsWKtLS0nntKbUTy4U8++eTll18exUnoMfLY9Dny2EB/0tjYuGLFiqVLl44bN+6pp55qm3/uSZ3Ihzc0NOzevbu4hdra2tTU1MmTJ2dnZ0+YMCErK2vmzJmJiYk9MD8AAAAAAAB0hDw2AAAAAAB0pYqKirfffnv79u1BtmTTpk3V1dXx8fFnn312VlZW0P43YcKE0aNHRx7ywgsvXHXVVZH/Y5+QkNDc3Jyfn79s2bL09PR2jhX1omy12AOWPDZ9jjw20P9EvSj7M2uxO77Prl27ItnskpKSY8eOJSYmjhkzJtKePWPGjKSkpK6dHwAAAAAAADpOHhsAAAAAAE7Jvn37iouLy8rKggz2zp07m5qaMjIyJk6cGJT7ZWdnT5s2LSUl5UQ7/OUvfxkzZkwoFIqLi2tsbPzKV76yYsWKc889tyNHj2JRtlrsgUwemz5HHhvol6JYlN19afBW8ezS0tKampqEhISxY8dG4tnTp09PTk7uqiMCAAAAAADAZ5LHBgAAAACAk1BfX//2228H4ZCysrLS0tLDhw+HQqHMzMxI93VWVlZWVlZMTEwH92xubk5NTa2pqZk0adIjjzwye/bsk52qh4uy1WIjj02fI48N9GM9XJTdVbXYHdTY2Lhz587Ix+/i4uIjR47Ex8eff/752S0MGjSoW8cAAAAAAABggJPHBgAAAACA9uzbty/SfR2pv05LSzv//POD7uvs7OwpU6acYiZ5/vz5eXl5119/fVxcXOd26LGibLXYhOSx6YPksYH+rceKsns4+31c+/bti7Rnv/HGG4cPH24Vz542bVpKSkrPDwYAAAAAAEA/Jo8NAAAAAAB/1dDQsHv37qB8b/v27Rs2bPjoo49Cn9ZfB93X2dnZ48ePj42Njfawx9GtRdlqsYmQx6bPkccGBoJuDUv3cC12x7WMZ69fv/7QoUNxcXHjxo0LstkTJkzIzs4eOnRotMcEAAAAAACgb5PHBgAAAABgQDty5Eik+7qsrGzbtm11dXWJiYljxoyJRDimTJly+umnR3vSjuqmomy12LQkj02fI48NDBDdVJTdG2qxO6hlPLvVyZUCF1988bBhw6I9JgAAAAAAAH2MPDYAAAAAAANIOBzetWtX0H1dXFy8cePGAwcOhEKhzMzMSPd1dnb2BRdcEBcXF+1hT0kXFmWrxaYteWz6HHlsYED585//fN1117355punHp+O1GJPnjx59erVWVlZXThnD2gZz2754T8Sz77ooovOOOOMaI8JAAAAAABAbyePDQAAAABAf1ZeXr5t27ag+3r79u0lJSXHjh1LSEgYO3Zs0H2dlZU1c+bMESNGRHvSrtclRdlqsTkueWz6HHlsYKBpamp64oknvvvd744dO7bTRdlBLfaWLVuWLl1622239fUzFoX+Np5dVla2Z8+e0N/Gs2fNmjV8+PBojwkAAAAAAECvI48NAAAAAED/0djYuHfv3qD7OohYvPPOO83NzUOHDg26r4MA9vTp05OTk6M9bA/pdFG2WmzaIY9NnyOPDQxMnS7K7uu12B105MiRyM8OxcXFO3bsaG5ubhnPnjFjxsiRI6M9JgAAAAAAANEnjw0AAAAAQB9WUVGxZcuWoPu6uLi4tLS0pqYmPj7+7LPPDgLYQQZ79OjR0Z40mjpRlK0Wm/bJY9PnyGMDA1YnirL7Xy12B5WXl2/btq2deLafLAAAAAAAAAYseWwAAAAAAPqSffv2Rbqvt2/fHmQkMjIyJk6cGHRfB0mJQYMGRXvSXqeDRdlqsekIeWz6HHlsYIDrYFH2AKnF7qCjR49u3bo1Es/euXNnU1PT0KFDIz90ZGdnZ2VlxcTERHtSAAAAAAAAup08NgAAAAAAvVd9ff3bb78dCWCXlJR88sknoVAoUlIXZLClIDroM4uy1WLTQfLY9Dny2ACfWZQ9YGuxO6iysnLz5s2t4tlDhgyZMGGCeDYAAAAAAEC/J48NAAAAAEAvsm/fvqD4umXIIS0t7fzzz4/U0E2dOnXw4MHRnrQPO25RtlpsToo8Nn2OPDZA4LhF2WqxO6GqqmrTpk2RU0dt3bq1vr4+IyNj4sSJkXj2+PHjY2Njoz0pAAAAAAAAXUAeGwAAAACAqGloaNi9e3cQYNi+ffv69esPHToU+rT+Oui+FmPoDq2Ksv/whz+oxeakyGPT58hjA0S0KspOTExUi33q6uvr33777Uh79saNG+vq6tLS0iZNmiSeDQAAAAAA0A/IYwMAAAAA0HOOHDkS6b4uKyvbtm1bXV1dYmLimDFjgojChAkTpkyZcvrpp0d70gHhmWeeufnmmxsbGysqKvLz8x944AG12HTQvHnz3nzzzYsuuijag0BHPffcc/LYAC2VlZUFMexQKDRp0iS12F0rcuapiNra2tTU1MmTJ0d+8LnwwgsTExOjPSkAAAAAAAAdIo8NAAAAAEB3CYfDu3btCrqvg464AwcOhEKhzMzMSPd1dnb2BRdcoIUvWg4cOHDnnXd+85vfvPTSS6M9C33JT37ykzfeeCPaU8DJWbRo0Re+8IVoTwHQizQ2Nq5YsSIUCqnF7m6t4tklJSXHjh1reV6q7OzsGTNmJCUlRXtSAAAAAAAAjk8eGwAAAACALlNeXr5t27ag+zrIYNfW1iYkJIwdOzaogMvKypo5c+aIESOiPSkAAEB0BCeuisSzS0tLa2pqIj83BaZPn56cnBztSQeQuro6eXgAAAAAAKAd8tgAAAAAAHRSY2Pj3r17g9x1kMHes2dPKBQaOnRopPt6woQJEydO9HvtAAAAx9XY2Lhz585IPHvTpk3V1dWt4tnZ2dmDBg2K9qT9U3V19eLFi3/961+vWrXq2muvjfY4AAAAAABALyWPDQAAAABAR1VUVGzZsiXSfR3UuMXHx5999tmRAPb06dMzMzOjPSkAAEBftW/fvkg8+4033jh8+HB8fPz5558fyWZPmzYtJSUl2mP2B6+++ur1119fXl7+d3/3d2vWrPkv/+W//M//+T9HjhwZ7bkAAAAAAIBeRx4bAAAAAIATisQAggz2jh07mpubMzIyJk6cOGHChEgGW1EbAABAN2kZz37zzTc//vjjuLi4cePGReLZU6dOHTx4cLTH7GOOHTt29913//jHP/6P//E/Pv7442eeeWZRUdGCBQsOHTr04IMPfuc734n2gAAAAAAAQO8ijw0AAAAAwL+rqqratWtX0H1dXFy8efPmqqqqUCiUmZkZ/JZ/kMHOysqKiYmJ9rAAAAADUct49oYNGz766KNQi5/asrOzL7744mHDhkV7zF7tRNHrtiHtKA4JAAAAAAD0KvLYAAAAAAADV/B7/EH3dXFx8c6dO5uamtLS0s4///xI97WmNQAAgF6rZTx748aNBw4cCP1tPPsLX/jC6aefHu0xe4uOJK4VZQMAAAAAAG3JYwMAAAAADBQNDQ27d++OBLDXr19/6NCh0Ke/qR90X2dnZ48fPz42NjbawwIAAHDSWsazi4uL9+/fH/rbePasWbOGDx8e7TGjo+NBa0XZAAAAAABAK/LYAAAAAAD91pEjR4Li6yCDvXXr1vr6+sTExDFjxgS/iD9hwoSpU6cOGzYs2pMCAADQ9Vr+VFhcXLxjx47m5uaW8ewZM2aMHDky2mN2u87lqxVlAwAAAAAAEfLYAAAAAAD9RDgc3rVrV9B9XVxcvHHjxgMHDoRCoczMzEj3dXZ29gUXXBAXFxftYQEAAOhp5eXl27ZtayeePX369MzMzGiP2cVOJVatKBsAAAAAAAjIYwMAAAAA9FWR36SPZLBra2sTEhLGjh0bdF9nZWXNmjVr+PDh0Z4UAACAXufo0aNbt26NxLN37tzZ1NQ0dOjQyPm8srOzs7KyYmJioj1pJ3VVmlpRNgAAAAAAII8NAAAAANA3NDY27t27N8hdBxnsPXv2hEKhlr8rP2HChIkTJyYlJUV7WAAAAPqYioqKLVu2tIpnDxkyZMKECX0xnt21IWpF2QAAAAAAMMDJYwMAAAAArZWVlYVCoaysrGgPMtAFTWWR7uvS0tKampr4+Pjzzz8/6L7Ozs6ePn16ZmZmtCcFAACgv6msrNy8eXMknr1r167GxsaMjIyJEydG4tnjx4+PjY2N9qStdV92WlE2AAAAAAAMWPLYAAAAAMBfhcPhFStW3H333aFQaMmSJbfddlt8fHy0hxpA9u3bF+m+3r59+44dO5qbmyNdZJEM9qBBg6I9KQAAAANLfX3922+/HYlnb9y4sa6uLj09/cILL+yqePadd9555ZVXTp8+/VTm7O7ItKJsAAAAAAAYmOSxAQAAAIB/V1ZWtmDBgi1btixdujQUCi1dunTSpEmrV69WlN1NKisrd+/eHXRfFxcXb968uaqqKhQKZWZmRn6XfcKECeeee25MTEy0hwUAAIC/amho2L17d3ELtbW1aWlpkyZNivxIe8EFF8TFxXV8z6FDhx49enTBggX333//8OHDT3aknkxKK8oGAAAAAICBRh4bAAAAAAiFw+GVK1cuWbJk8uTJkQD2n//85+uuu+7NN99ctGjRsmXLEhISoj1mnxfUXwfd18XFxTt37mxqakpPTx87dmxQfJ2dnT116tTBgwdHe1IAAAA4Ca3i2SUlJceOHUtMTBwzZkwknj1jxoykpKQT7bB3797Pf/7zoVAoPj4+OTn53nvvvemmm+Lj4zs4QM8HpBVlAwAAAADAgCKPDQAAAP+fvfsOr7Iw2AZ+TgabMGWpSIAAIQhhE6CgoCCCor7iqNXWulrbui58qZ20djjay1FbKlql+vZ1o5bhwMlIDCPsyJ7KVFZIGFnfH+fyfHlBKUqSJzn5/f4415MnzznnPrE40nOngwpTAAAgAElEQVSfG6CmKzuLPX78+LLTVSUlJU8++eSdd96ZkpIyZcqU9PT0AHNWO2XfjJ6bm7t06dLdu3eHvpi/TktLi3SwU1NT4+Ligg4LAAAA5aaoqGj16tXRevbixYsLCgoSExNTUlKi9ew+ffrUqVMnepdXXnll3Lhx0TcyxcXFtWvX7q9//esFF1xw4ucKthdtKBsAAAAAAGoIfWwAAAAAqLm+dBb7eIayT9LevXsjw9cRq1evLi4uLrsGlpaW1rNnz2bNmgWdFAAAACpPcXHxqlWrov+9vGTJkvz8/GPq2dOmTXvkkUeOHDkSvVd8fHxxcfGFF17417/+NTKdfbyqUIc2lA0AAAAAADWBPjYAAAAA1FAnmMU+nqHs40Xmr3NzcyMd7AULFuzcuTMUCrVu3Tq6fd27d+8uXbqc+GcLAAAANUpxcXFkPTsnJycnJ2fx4sV5eXn169cvKCg4/o1MiYmJ4XD4nnvumTBhQt26daPnq1oLuio0wwEAAAAAgIqjjw0AAAAANc5JzmIfr4YPZUfnr6Md7MOHD0fnvCId7P79+7do0SLopAAAAFBtlJSUrF27tm/fvnl5eV91TUJCQrNmzR544IHrrrsuVFXLz1WtIg4AAAAAAJQjfWwAAAAAqFm+1iz28WrOUHZRUdGWLVsivetIB3vDhg2hUKhJkybR7eu0tLRu3brVrl076LAAAABQjX3yySdnnnnmia+Ji4srKSkZOnRoSkrKU089dSqd53A4XPbLyLunyp48lfdTVc2uOAAAAAAAcIr0sQEAAACgpvjGs9jHi8mh7P379y9fvjy6fb148eKCgoKEhIROnTpFtq979+7dp0+f1q1bB50UAAAAYsrrr79+6aWXftW7mOLi4hITEwsLC0tKSkKhUDgcvuGGG5544olTfNJw+Nj3TR1/5psxlA0AAAAAALFHHxsAAAAAaoRTnMU+XgwMZW/bti26fb1y5cqPP/64tLS0cePGaWlpke3rSAe7bt26QScFAACAWPbrX//6d7/7XUlJSVxcXHx8fHFxcaR6Xb9+/Q4dOnTt2jU5OXn58uUzZ84cNmzYlClTyqvhXLaAXV5l7ChD2QAAAAAAEEv0sQEAAAAgxpXjLPbxqtFQdl5e3po1ayLb14sWLVq6dOnBgwfj4+PPOuusSO860sFOTk4Oh8NBhwUAAIAaZMyYMbNnz27fvn1qamrKFzp27Ni8efNQBRebIzXsci9jR0SHskeOHDl27NikpKS8vLzIt44ePZqfn3/M9UlJSWU/QS/y5fG3jRs3btSo0al/1h4AAAAAAHDy9LEBAAAAIJaV+yz28arsUHZk/jqyfb1o0aJVq1aVlJQkJSWdffbZ0e3rnj171q9fP+ikAAAAUKPl5eU1bNjw+PPRPvMFF1wwefLk8prFLqtC+9gR8+bN+973vrdu3bpwONy4cePIyUi5uuxlxcXFBw4cKHtm3759J0jVsGHDRo0aRbrZ0dtmzZq1aNGidevWLVu2bNmyZevWrRs0aFARLwoAAAAAAGoafWwAAAAAiE0VOot9vMCHso8ePbp27drI9nVubu6SJUs+++yzUCjUunXryPB1pICdmpoaFxdXydkAAACAr6tCZ7HLqtAydsSpFMv3799fUlJy4MCB4uLivLy8oqKi/fv379u3b9++fZGDsl9+9tlnu3bt2rVrV/Tu9erVa9WqVatWrVq2bHnWWWclJycnJye3a9cuOTlZVRsAAAAAAE6ePjYAAAAAxKBKmMU+XiUPZW/bti26fb1o0aLVq1cXFxfXqlWrY8eOvXv3jnSwe/bs2axZswqNAQAAAJS7Bx98cMKECR06dJgzZ06rVq0q7okqYR87avr06ZdcckmjRo3efffdCv21SWFh4e7du3fs2LF9+/bdu3dv27Zt586d27dv37x586ZNm6Jt7ebNm0fr2e3bt+/atWtaWlrTpk0rLhgAAAAAAFRf+tgAAAAAEFMqeRb7eBU0lF1YWLhmzZrI9vXKlSsXLFiwc+fOUCjUunXr6Pa1+WsAAACoIgoLCw8ePFhUVJSXl1dcXByZdz5w4EBJScn+/ftLS0v37dsXuQ2FQnv37g2FQtEzpaWle/bsWbNmzdatW0eNGvXUU09VXCW70vrYH3zwwQ033LBv375HH330mmuuqdDnOrH8/PxNmzZt3Lhx48aNkYNNmzatX7/+wIEDoVCoVatWaV+INLSbNGkSYFoAAAAAAKgi9LEBAAAAIHYEMot9vHIZyt67d29k+zo6gn348OHExMSUlJTI9nXXrl379+/fokWLcs8PAAAANUS0Jl1cXJyXl1dUVHTw4MFIlbqwsDA/P//o0aMFBQVHjhyJ3B46dOjw4cOR28hB9FsFBQVHjx7Nz8+P3P0/PnXjxo3D4XDktlGjRnFxcUlJSfHx8ZHbhg0bJiQkHDhwYMGCBZ9//vn9999/8803l/vLL1vDrrhK9qFDh37zm988+OCDF1xwweTJk08//fSKeJZTt2XLlo8//njFihW5ubkrVqz4+OOP8/LyQqFQmzZtzj777H79+vXr169///6nnXZa0EkBAAAAACAA+tgAAAAAEAsCn8U+3tcayi4qKtqyZUukdx3pYG/YsCEUCjVp0iS6fZ2WltatW7fatWtX1isAAACA4O3fv7+kpCTSeS5beD7FAerIw574qevWrVunTp06depEDurWrVu7du169erVqlWrfv36kdvExMQGDRokJCREGtQNGzaMdqqTkpLi4uIaNWoU7V03btw4FAp9rb3liiszH1/ArohK9rx5866//vrdu3dXUKW8Qm3evDnSzV66dOn8+fPXrl0bCoWSk5P79+8fqWf36tWrbt26QccEAAAAAIDKoI8NAAAAANXeqc9ih8Phsl9Gfm1Y9uQ3+0XiCYay9+/fv3z58uj29eLFiwsKChISEjp16hTZvu7du3ffvn1btWr1DZ4XAAAAKkFkJjp6UPb2S09+4+tPrGxfOnL7pSe/7m2kX12xP8GTVr6t5i/9jcep/xrkGNVlFvvk7dmzZ34Zu3fvTkxMPPvsswcNGjR8+PBzzjmnUaNGQWcEAAAAAICKoo8NAAAAANVY+c5iV9AwVHQo+7rrrjvttNMiq0pbt24NhULNmzdPT0/v3r17jx49evTokZqaWqtWra96nMgU2Nca0QIAAKBGiSw/HzlypKCgIBQKRSajIwvSoVAosikdmY8OffGfmaEvtqMj94oOSufl5RUVFUVK0ZHd6dD/nao+mTwNGjRITEyMbEpHlqJDoVBkOzpSe44MSodCoch8dGR0OrI7HV2TjjxIpCN9/AB1xfwgq6LqVW+u1rPYJ2nDhg3Z2dnz58+fPXv2kiVLwuFwnz59hg8fft5552VkZNSpUyfogAAAAAAAUJ70sQEAAACgujr1WezjlS1gl0sZOyIylH3bbbeFw+GhQ4eec845kQJ2mzZt/uN9CwsLZ82a9b//+7+vvvrqCy+8MGbMmHKJBAAAQIU6phRdWFh48ODB0Bel6GjD+ZhSdKT/HPqi+Xz06NH8/PzQF+3oaLM6Pz//6NGj0e70Se5IR0U+6itSkw6FQo0aNYqLi0tMTGzQoEHohNXoyGR0pBodrUNH7l6vXr3atWtHH8SniVWQqt9zrl698fLy+eefv//+++++++4777yzbt26unXrDh48ePjw4cOHD+/Vq1dcXFzQAQEAAAAA4FTpYwMAAABA9VO+s9jHiNSwy7GMHRUdyr7rrrvuvffexMTEE1xcUlIyd+7c55577rnnntu/f39iYmJhYeG0adP0sQEAAP6jaD+5vA6+7vWRneqTTBupN0cPjvnyq85/s3tFWtbl8TMmMFW58Fz16+KVYPv27XPnzn3nnXdmzpz5ySefNG/efNSoURdddNGoUaMin1YAAAAAAADVkT42AAAAAFQzFTGLXVbF9bFDXwxl33nnnSkpKVOmTElPTz/+mpUrV7700kv/+Mc/Pvnkk1q1ah09ejT6LX1sAACgioiMPEeOo93jkpKS/fv3R05G56BD/7fV/LXuGNmILnsQ2ZouexAZji578LVE68rRsejoQWQa+ksPoivQ0YOEhISGDRuWPYh+q0GDBomJidE16ciOdMiCNKemqjWfq3JLPCilpaXLly+fMWPG66+/vmDBgjp16owYMeK//uu/Lr744sjfDQAAAAAAoBrRxwYAAACAaqNCZ7HLqqAydtSXDmVv3rz5+eeff+KJJ9avX39MDTtKHxsAAKq1aIU4ori4+MCBA2UvOHz48KFDh8qeOaZjXLa3HHHkyJGCgoKyZ7605Hz06NH8/PzI8ddqR3/VHb+xyGJz5Lhhw4YJCQmR48aNG4fD4VAoFBcX16hRo2MuiFSayx5Ed56jB9Gec/Qg+lzHH0Rr2FB9VZ0KdFUrh1dB27dvnzZt2uuvv/7OO+/ExcWNGjXqyiuvHDNmTOQjHgAAAAAAoOrTxwYAAACA6qGiZ7GjKnQfO6q4uPhPf/rTxIkTu3TpMnLkyLfffnvx4sVfVcOOmjBhQu/evSsuFQAAlIvjS8UnUFBQcOTIkZO8OD8//8T/zlzW11pLjlaRI8pONH9Vzuhic0RRUVFeXl7ZC8qlvfwfRVeXo7605Fz2sujIc+gk2tHlfkegfAXbha46nfDqYu/eva+++uoLL7zw3nvv1a5d+7LLLvvud7977rnnxsXFBR0NAAAAAABORB8bAAAAAKqBI0eOjBgxYvbs2TfeeOOkSZOib/SvCJXTxw6FQkVFRVdeeeXUqVMr9FkAACAQjRo1OvlqWZMmTU7yyrLLyf/R8UXlE4iuLkeEw+HGjRuXveD4RnF0ljnqmBeSmJjYoEGDsmeiu81Rx/ygEhISGjZsWPaCsrXniKSkpIr7gCqgOgqqFG0W+1Ts3r37pZde+uc//zl//vy2bdted9113/3udzt27Bh0LgAAAAAA+HL62AAAAABQPZSUlDz55JN33nlnSkrKlClT0tPTK+JZytawK7SSXXbu+6qrrnrttdf+9a9/LViw4MQT2dOmTRszZkwFRQIAAACqr8psR5vFLkerVq16/vnn//nPf27atGnQoEG33377JZdcUvYjQgAAAAAAoCo42U/jBgAAAACCFRcXd/PNNy9dujQpKalfv34//elPCwsLy/cpjilgR1ayy/cpQqFQUVHR/fff36tXr3A4nJOTM2HChLPOOuv222+fP39+bm7uPffck5ycHAqFvO8WAAAAOHmDBg1aunTpLbfc8sMf/nD06NGffvppBT3RvHnzevTo8fjjj0+aNGnGjBnK2KeoS5cuEydOXLdu3b///e+kpKSrrroqOTn5t7/97fbt24OOBgAAAAAA/58+NgAAAABUJx07dvzggw8ee+yxv/zlL3379l2yZEm5PGw4HI5Ur8sWsKNnyrGVnZubO2jQoIkTJ/7mN7+ZN29eampq2e+mpqZOnDhxw4YNK1asuOuuu1q0aBFSzAYAAABOTt26de+7777Zs2evXbu2W7dukydPLt/HP3To0E9/+tMhQ4akpKSsWLGiole4a5T4+PiLLrpo5syZW7ZsufHGGx977LF27dpdd911K1asCDoaAAAAAACEQvrYAAAAAFDtVMRQdmkZJz75jR0/ix0fH/9VF6elpd13333bt29/9913r7vuuoYNG556AAAAAKAmqKChbLPYleP000+fOHHili1bHnvssYULF3bv3n306NHvvfde0LkAAAAAAKjp9LEBAAAAoFqqoKHsCnLiWeyvEhcXN2zYsCeffHL37t2vvfbalVdeWbdu3YqOCgAAAFR35TuUbRa78tWpU+emm25auXLl22+/HRcXN3z48IyMjGnTpgWdCwAAAACAmksfGwAAAACqq4oYyi53X2sW+6vUrl177Nixzz///PDhwysiJAAAABB7ymUo2yx2gMLh8HnnnTdt2rSPPvqoSZMmF1988cCBA99+++2gcwEAAAAAUBPpYwMAAABA9VaVh7K/2Sw2AAAAQLk4laFss9hVR//+/WfOnPnRRx81btx45MiRgwcPzszMDDoUAAAAAAA1iz42AAAAAFR7VXAou1xmsQEAAABO3TcYyjaLXQVFW9m1atUaPHjw5ZdfvmbNmqBDAQAAAABQU+hjAwAAAECMqDpD2WaxAQAAgCrl5IeyzWJXcf3793/vvfemTZu2atWqbt26/fjHP/7888+DDgUAAAAAQOzTxwYAAACA2BH4ULZZbAAAAKDK+o9D2Waxq4vRo0cvXbr0b3/729SpUzt37vzkk0+WlJQEHQoAAAAAgFimjw0AAAAAsSaooWyz2AAAAEAV91VD2Waxq534+Pgbb7xx7dq1P/7xj3/0ox/169cvOzs76FAAAAAAAMQsfWwAAAAAiEGVPJRtFhsAAACoRgYNGpSTk3PNNdf84Ac/uOSSS1599dVu3bo98cQTzzzzjFns6qV+/foTJ05cuHBhvXr1Bg0adMcddxQUFAQdCgAAAACAGBQuLS0NOgMAAAAAUFFKSkqefPLJO++8MyUlZcqUKenp6eX+FLm5uddff/2yZcsmTpw4fvx4TWwAAACguvjggw9uuOGGDRs2jB079u9//3urVq2CTsQ3VFpa+s9//vOuu+5q2rTpP/7xj6FDhwadCAAAAACAmGIfGwAAAABiWYUOZZvFBgAAAKq1c845Z+nSpW+88cZrr72mjF2thcPh733vex9//HH37t3PPffcW265JS8vL+hQAAAAAADEDvvYAAAAAFAjlPtQtllsAAAAAKqgl1566dZbb23QoMFzzz03YMCAoOMAAAAAABAL7GMDAAAAQI1QjkPZZrEBAAAAqLLGjRu3bNmyDh06DB069KGHHjJYAgAAAADAqbOPDQAAAAA1yykOZZvFBgAAAKDqKy0tffTRR+++++5zzjnnmWeeadWqVdCJAAAAAACoxuxjAwAAAEDN8qVD2YcPH/6PdzSLDQAAAEB1EQ6Hb7/99rlz565fv75Pnz7z588POhEAAAAAANWYfWwAAAAAqKGiQ9nt27fv37//k08+eYKLzWIDAAAAUB3t2bPn6quvnjNnzuTJk7/zne8EHQcAAAAAgGrJPjYAAAAA1FDRoezPP//8qaeeigxlH3+ZWWwAAAAAqq+mTZvOnDnztttuu/baa2+55ZYv/Q0YAAAAAACcmH1sAAAAAKjRFixY0L9//yZNmhw+fDglJWXKlCnp6enR75rFBgAAACA2/Otf/7rpppvOOeecF198sUGDBkHHAQAAAACgOrGPDQAAAAA1V1FR0Xe/+91QKJSXl7dkyZKkpKR+/fpFhrLNYgMAAAAQS6655poPPvhg0aJFw4YN27VrV9BxAAAAAACoTuxjAwAAAEDN9cADD9xzzz0lJSWhUGjHjh3Nmzf/05/+NHHixO7du4dCIbPYAAAAAMSYjRs3XnDBBYWFhW+++WanTp2CjgMAAAAAQPWgjw0AAAAANdSWLVu6dOly6NChyJfz58/v27dvKBTKzc39/ve/HwqFnnrqqa5duwYZEQAAAADK286dO8eMGbN169Y333wzPT096DgAAAAAAFQD+tgAAAAAUEONHj161qxZhYWFkS9feeWVyy67LHJcXFwcCoXMYgMAAAAQkw4ePHjppZfm5OTMmjWrV69eQccBAAAAAKCqiws6AAAAAAAQgJdeemnmzJnRMnZiYuKWLVui342Pj1fGBgAAACBWNWjQYPr06QMHDhw+fPj8+fODjgMAAAAAQFWnjw0AAAAANc6BAwd+/OMfx8X9/18PhsPhrVu3BhgJAAAAACpT7dq1X3755cGDB48YMSI7OzvoOAAAAAAAVGn62AAAAABQ49xzzz179uwpKSmJniksLNy8eXOAkQAAAACgktWuXfull17KyMgYNWrUihUrgo4DAAAAAEDVFS4tLQ06AwAAAABQeRYsWDBgwICyZeyInj175uTkBBIJAAAAAIJy+PDhkSNHrl+/PjMzs23btkHHAQAAAACgKtLHBgAAAIAapKioqGfPnqtWrSoqKjrmW82aNfvss88CSQUAAAAAATpw4MDQoUPz8/Pnzp3bokWLoOMAAAAAAFDlxAUdAAAAAACoPA8//HBubu7xZexQKLRnz56jR49WfiQAAAAACFZSUtL06dOPHj16ySWXFBQUBB0HAAAAAIAqxz42AAAAANQUmzdvTk1NPXLkSElJyZdesH79+vbt21dyKgAAAACoClatWjVo0KCLL7746aefDjoLAAAAAABVS/zEiRODzgAAAAAAVIbS0tI+ffqceeaZJSUlu3btKi4urlWrVuR85IJLL720Xbt2QUYEAAAAgIA0b9787LPPnjBhQnJyco8ePYKOAwAAAABAFWIfGwAAAABqoqNHjw4bNiwhIaF58+azZ8/evXt3KBR65plnrr322qCjAQAAAEBgxo8f//e//33BggWpqalBZwEAAAAAoKrQxwYAAACAmqi0tLR58+a//vWvb7vttlAotGXLlszMzLZt2w4cODDoaAAAAAAQmMLCwiFDhhQUFGRnZ9epUyfoOAAAAAAAVAn62AAAAABQE+Xm5qalpc2fP79v375BZwEAAACAKmTz5s3du3e/8847J06cGHQWAAAAAACqhLigAwAAAAAAAcjKyqpbt26PHj2CDgIAAAAAVctZZ531y1/+8oEHHti4cWPQWQAAAAAAqBLsYwMAAABATXTjjTeuXbv2ww8/DDoIAAAAAFQ5RUVFPXv2TElJmTp1atBZAAAAAAAInn1sAAAAAKiJMjMzBw4cGHQKAAAAAKiKEhISHn744VdfffWNN94IOgsAAAAAAMGzjw0AAAAANc6+ffuaNWv26quvXnzxxUFnAQAAAIAq6vLLL1+xYsXy5csTExODzgIAAAAAQJDsYwMAAABAjZOZmVlSUtK/f/+ggwAAAABA1fXggw9u2LDhf/7nf4IOAgAAAABAwPSxAQAAAKDGycrKSklJadmyZdBBAAAAAKDqSk5Ovvbaa3//+98XFRUFnQUAAAAAgCDpYwMAAABAjZOVlZWRkRF0CgAAAACo6n72s59t3rz5hRdeCDoIAAAAAABB0scGAAAAgJqluLh4wYIF+tgAAAAA8B916NDhqquu+v3vf19SUhJ0FgAAAAAAAqOPDQAAAAA1y/Llyw8cODBw4MCggwAAAABANfDzn/989erVr7zyStBBAAAAAAAIjD42AAAAANQsmZmZDRs2TEtLCzoIAAAAAFQDXbp0GTdu3B/+8IeggwAAAAAAEBh9bAAAAACoWbKysgYMGBAfHx90EAAAAACoHu66664lS5bMmzcv6CAAAAAAAARDHxsAAAAAapasrKyMjIygUwAAAABAtdGvX78+ffr87W9/CzoIAAAAAADB0McGAAAAgBpk165d69ev18cGAAAAgK/l1ltvffnll3fu3Bl0EAAAAAAAAhAuLS0NOgMAAAAAUElee+21yy677PPPP2/SpEnQWQAAqEEKCgo+//zzffv27f9C9Hjv3r2lpaX79u0LhUL79u0rLS3Ny8srKioqKCg4cuRI2Qc5cOBAcXHxVz1F3bp169Spc4IMtWvXrlev3gkuqF+/fq1atb7qu+FwuHHjxie4O1R3x/+PPPpfjklJSbVq1UpKSqpXr17t2rWbNGkS+QMVOdO0adO6desGERmgUh06dOjMM8+88847f/7znwedBQAAAACAyqaPDQAAAAA1yIQJE2bMmLFixYqggwAAEIM+/fTTDRs2bNmyZdeuXZ988snOnTs//fTTyO2BAwfKXpmQkNCoUaNGjRo1adKkUaNGcXFxjRs3DofDDRs2TEhIiPSi69Spc0zD88SN671795443onr3CUlJfv37z/B3Q8dOnT48OETPwVUa0VFRXl5eV/65f79+48cOXLw4MH8/PyjR48ef986deo0bdq0adOmTZo0id42bdr0tNNOa926devWrdu0adOiRYuEhIRKejEAFWP8+PEvvvjixo0b4+Pjg84CAAAAAECl0scGAAAAgBrkW9/6Vmpq6uTJk4MOAgBA9fbpp5+uWbNm3f9VUFAQCoUSExNbtmx5+umnR2/btGnTunXr5s2bN/pC/fr1g34FwDe3d+/eI0eOFBQU5OXl5efn79mzZ8+ePXv37j3+YOfOndFPOoiLi2vRokX07wxnnHFG27Zt27Vr165du7Zt255gnR6g6li3bl3nzp2nTp06duzYoLMAAAAAAFCp9LEBAAAAoKYoLCxs1KjRX//61+uvvz7oLAAAVCclJSVr1qxZsmTJ4i989tlnoVAoKSmp43Fat24ddF6gCjl06NC2bdu2l7Ft27YdO3Z8+umnmzdvPnjwYCgUiouLa9OmTbt27ZKTkyO3ycnJqampLVu2DDo+wLFGjhxZp06d119/PeggAAAAAABUKn1sAAAAAKgpsrOzBwwYsGrVqs6dOwedBQCAqm7btm2zZ8+eN29eTk7OsmXLDh48mJiY2LVr1549e6anp6enp6emprZo0SLomED19tlnn236vzZu3Lhx48ZDhw6FQqEmTZp07tw5NTW1c+fOnTt37tq1a3JycmJiYtCpgRrt2WefveGGG7Zt29a8efOgswAAAAAAUHn0sQEAAACgpnj44Yd/97vf7d69OxwOB50FAICqaNOmTbNnz/7www9nz569bt26hISEXr169e7du2fPnr169erWrVvt2rWDzgjUCNu2bVu1atXq1as//vjj1atXr169esuWLaWlpYmJiR07djz77LN79uzZvXv3Hj16nH766UGHBWqW/Pz8Vq1a3X///bfeemvQWQAAAAAAqDz62AAAAABQU1x55ZX5+fnTp08POggAAFXI7t27Z86c+c4773z44Ydbt26tXbt2v379hg4dOmTIkIyMjAYNGgQdECAUCoXy8/Mjxezc3Nxly5YtXbp08+bNoVCoeb12uLAAACAASURBVPPm6enpPb7QtWvXhISEoMMCMe473/nOxo0b582bF3QQAAAAAAAqjz42AAAAANQUZ5555g9+8IOf//znQQcBACB4y5Ytmz59+vTp07OzsxMTEwcPHjxkyJBzzjmnX79+derUCTodwH+2d+/epWWsXLnyyJEj9erV6927d//+/QcMGNC/f/8zzjgj6JhADHrjjTcuvPDC1atXd+rUKegsAAAAAABUEn1sAAAAAKgRtm7d2rZt2/fee+/cc88NOgsAAME4fPjw+++/H6lhb9mypWXLlqNHjx49evSIESPsYAPVXVFR0ccff7xgwYKPPvooOzt75cqVxcXFp59+ev/+/SP17D59+tSrVy/omEAsKCoqinzu4a9//eugswAAAAAAUEn0sQEAAACgRnjhhReuueaaffv2adoAANQ0R48efeutt5577rl///vfBQUFPXv2HDNmzJgxY3r37h0XFxd0OoAKcfDgwYULF2ZnZ3/00Ufz58/ftm1brVq1+vbtO2TIkCFDhgwaNKhhw4ZBZwSqsTvuuGPGjBlr1qwJh8NBZwEAAAAAoDLoYwMAAABAjXDHHXfMmTNn0aJFQQcBAKCSFBcXf/jhh88999wrr7yyf//+wYMHX3XVVWPHjm3Tpk3Q0QAq29atW2d/YdWqVQkJCb169RoyZMjQoUMHDx7cuHHjoAMC1czChQv79u07f/78vn37Bp0FAAAAAIDKoI8NAAAAADVC//79+/bt+9hjjwUdBACAilVaWpqdnf3cc8+99NJL27dv792799VXX33llVeeccYZQUcDqBJ27NgRKWZ/+OGHK1eujIuL69Wr14gRI0aMGJGRkZGYmBh0QKB6aN++/VVXXfWHP/wh6CAAAAAAAFQGfWwAAAAAiH2HDh1q3LjxU089dc011wSdBQCAivLpp58+9dRTU6ZM2bBhQ5cuXa6++uqrrrqqU6dOQecCqLo+++yzOXPmzJo166233tqwYUPDhg2HDRs2cuTIESNGdOjQIeh0QJV21113zZgxY/Xq1UEHAQAAAACgMuhjAwAAAEDsmzNnzpAhQzZs2JCcnBx0FgAAyllxcfHMmTOfeOKJmTNnNm3a9Nprr7322mvT09ODzgVQzaxbt+7tt99+66233n///by8vA4dOowcOXL06NHDhg2rU6dO0OmAKifyC7fc3NzU1NSgswAAAAAAUOH0sQEAAAAg9t1///0PPfTQjh07gg4CAEB52rRp0z/+8Y+nn35627Ztw4cPv/HGGy+99NJatWoFnQugeissLMzMzIx0s3NycurXrz9y5MiLL7549OjRzZo1CzodUFWUlJScfvrpP/nJT372s58FnQUAAAAAgAqnjw0AAAAAse+SSy6Jj49/5ZVXgg4CAEA5OHr06FtvvfXss89OnTr1tNNO++53v3vTTTd16NAh6FwAMWj37t1vvPHGSy+9NGvWrKKiovT09DFjxlx11VVdunQJOhoQvJtvvnnx4sULFiwIOggAAAAAABVOHxsAAAAAYl+rVq3Gjx8/fvz4oIMAAHBKdu/e/fe//33SpEk7d+4cOXLkTTfdNGbMmMTExKBzAcS+vLy8N9988/XXX3/jjTf27NnTrVu3yy+//IorrkhNTQ06GhCYN95448ILL9ywYUNycnLQWQAAAAAAqFj62AAAAAAQ49atW5eSkjJv3ryBAwcGnQUAgG9o2bJljz766L/+9a969erddNNNt956a9u2bYMOBVATFRUVzZkz57XXXnv55Ze3bdvWvXv3K6644sorr+zYsWPQ0YDKduTIkRYtWtx777233XZb0FkAAAAAAKhY+tgAAAAAEOOeffbZm266ad++fXXq1Ak6CwAAX09JScl77733yCOPzJgxo2PHjj/60Y9uvPHG+vXrB50LgFBJSUlmZuZLL7304osv7tixo2vXruPGjbvmmmtSUlKCjgZUnquvvnrnzp3vvfde0EEAAAAAAKhYcUEHAAAAAAAqVlZWVs+ePZWxAQCql4MHDz722GNdunQZMWJEUVHRG2+8sXr16ttvv10ZG6CKiIuLGzx48COPPPLJJ5/MmjVr0KBBjz32WOfOnTMyMiZNmrR3796gAwKVYfTo0XPnzj1w4EDQQQAAAAAAqFj62AAAAAAQ4zIzMwcOHBh0CgAATtann3569913n3HGGRMmTBg+fHhubu4bb7wxcuTIcDgcdDQAvkR8fPx55503efLk7du3z5gxo2PHjuPHj2/duvW4ceOmT59eVFQUdECgAl1wwQXFxcXvv/9+0EEAAAAAAKhY+tgAAAAAEMvy8vJWrFiRkZERdBAAAP6z9evX33zzzR06dHjuuefuueeerVu3Tpo0qUuXLkHnAuCkJCYmjho16tlnn92xY8ekSZN279598cUXn3HGGXfeeefSpUuDTgdUiObNm/fq1evNN98MOggAAAAAABVLHxsAAAAAYll2dnZxcbE+NgBAFbds2bJvf/vbnTt3fv/99//yl7+sX79+woQJTZs2DToXAN9Ew4YNr7/++g8++GD9+vW33nrr9OnT09PT09PT//KXv+zbty/odEA5GzVqlD42AAAAAEDM08cGAAAAgFiWlZV11llnnX766UEHAQDgy2VmZl500UXp6ekrV6589tlnV61addNNN9WuXTvoXACUg+Tk5F/96ldr1qyZM2dOnz597rnnntNPP/373/9+dnZ20NGAcjNy5MhNmzatWrUq6CAAAAAAAFQgfWwAAAAAiGVZWVnGsQEAqqa5c+dedNFFgwYN2rZt2wsvvLBkyZKrr746Pj4+6FwAlLNwODx48OAnn3xy27ZtDz300JIlSwYMGNC1a9f7779/7969QacDTtWAAQOaNm1qIhsAAAAAILbpYwMAAABAzCotLc3OztbHBgCoUkpKSqZOndqnT59vfetbhYWFH3zwwaJFi8aNGxcOh4OOBkDFSkpKuvnmm3NycrKysvr37/+b3/ymbdu2N9988+LFi4OOBnxz8fHx5513nj42AAAAAEBs08cGAAAAgJj18ccf79mzZ+DAgUEHAQAgFAqFSktLX3nllfT09HHjxrVr127hwoVvvvnm0KFDg84FQGUbMGDA008/vW3btt///veZmZm9evUaOnTo1KlTi4uLg44GfBMjR4788MMPCwoKgg4CAAAAAEBF0ccGAAAAgJiVmZlZt27dHj16BB0EAKCmKy0tnTZtWp8+fcaNG3fWWWctXLjw5Zdf7t27d9C5AAhS48aNb7vtthUrVsyZM6dly5ZXXHFF27ZtJ06cuGfPnqCjAV/PBRdccOTIkdmzZwcdBAAAAACAiqKPDQAAAAAxKysrq1+/fomJiUEHAQCouaJN7LFjx7Zp02bRokXTpk3r2bNn0LkAqEIGDx784osvrlmz5tprr3300UfPOuusW265JTc3N+hcwMlq06ZNly5d3n///aCDAAAAAABQUfSxAQAAACBmZWZmDhw4MOgUAAA1VGlp6dSpU9PT0y+55JIOHTosW7ZMExuAE2jfvv199923adOme++999133z377LMvuuiiOXPmBJ0LOCnnnnuuPjYAAAAAQAzTxwYAAACA2LR37941a9ZkZGQEHQQAoMaJNrHHjRvXuXPnpUuXvvjii926dQs6FwDVQFJS0h133LFmzZqpU6fu379/yJAhgwcPnjZtWmlpadDRgBM599xzc3Jy9u3bF3QQAAAAAAAqhD42AAAAAMSmrKys0tLSAQMGBB0EAKBmeeedd/r27Xv55Ze3bdt2wYIFmtgAfANxcXFjx46dPXv2woUL27RpM3bs2O7duz/zzDOFhYVBRwO+3LnnnltaWmrTHgAAAAAgVuljAwAAAEBsysrK6tix42mnnRZ0EACAmmLOnDnf+ta3zj///DZt2ixZsmTatGm9evUKOhQA1Vvv3r1ffPHFZcuWpaen33DDDZ06dXrssccKCgqCzgUcq1mzZt26dXv//feDDgIAAAAAQIXQxwYAAACA2JSZmTlw4MCgUwAA1Ag5OTmjRo0aMmRIYmJiZmbmv//97+7duwcdCoDY0a1bt2effXbt2rWjR4/+7//+73bt2j344IP5+flB5wL+j3PPPVcfGwAAAAAgVuljAwAAAEAMKi4unj9/fkZGRtBBAABi3Mcffzxu3Lg+ffrs2bNn1qxZ7733nn8HA6CCtGvX7rHHHtu0adMNN9zw29/+tn379n/605+0sqHqOPfcc5ctW/bZZ58FHQQAAAAAgPKnjw0AAAAAMWjZsmUHDx60jw0AUHG2bNlyyy23dO/ePTc394UXXvjoo4/OO++8oEMBEPtatGjxxz/+cdOmTT/84Q/vvffedu3a3X///QUFBUHnAkJDhw4Nh8OzZ88OOggAAAAAAOVPHxsAAAAAYlBmZmZSUlLXrl2DDgIAEIN27959++23p6SkvPvuu08//fTy5cvHjRsXDoeDzgVADdKsWbOJEyeuW7fu+uuvv/fee9u3b//QQw8dOnQo6FxQozVu3Lhnz57vvfde0EEAAAAAACh/4dLS0qAzAAAAAADl7Dvf+c6uXbvefvvtoIMAAMSUgoKChx566IEHHqhXr96vf/3rG264ITExMehQx8rKytq6dWvQKaD8DRw48Iwzzgg6BVRFu3btevDBBydNmpSUlPSLX/zipptuqoL/eIIaYvz48bNmzVq6dGnQQQAAAAAAKGf62AAAAAAQgzp06HDttddOnDgx6CAAADGiqKjo6aefnjhxYl5e3t13333XXXfVr18/6FBfbty4cS+//HLQKaD8vfDCC1dccUXQKaDq2rVr1x//+MdJkyadeeaZv/vd76644opwOBx0KKhxXn311csvv/zzzz9v3Lhx0FkAAAAAAChPcUEHAAAAAADK2a5duzZs2JCRkRF0EACAGPHOO+/07t37Rz/60ZgxY9asWfPLX/6yypaxIy6//PJSiC1B/6mCaqBFixYPPfTQ2rVrhw0bds0113Tv3n369OlBh4IaZ9CgQSUlJR999FHQQQAAAAAAKGf62AAAAAAQa+bNmxcOh/v16xd0EACAai87O/ucc845//zz27Ztu3Llyscff7xVq1ZBhwKAr3TmmWc+/vjjy5YtS01Nveiii84///xFixYFHQpqkBYtWnTs2HHevHlBBwEAAAAAoJzpYwMAAABArMnKykpLS2vSpEnQQQAAqrHVq1dfdtllAwYMCIfD2dnZ06ZNS0lJCToUAJyUrl27vvjiix9++OHBgwf79u179dVXb9q0KehQUFMMGjRIHxsAAAAAIPboYwMAAABArMnMzBw4cGDQKQAAqqs9e/bcfvvtZ5999tq1a2fMmPH+++/369cv6FAA8LUNGTIkMzPzlVdeWbx4cWpq6s9+9rODBw8GHQpi36BBg7KzswsLC4MOAgAAAABAedLHBgAAAICYUlhYmJOTk5GREXQQAIDqp7CwcPLkyV26dPnXv/714IMPLlmy5MILLww6FAB8c+Fw+NJLL12+fPkjjzzyxBNPJCcnP/LII8XFxUHnglg2aNCggoKCpUuXBh0EAAAAAIDypI8NAAAAADElJyfn0KFD+tgAAF/XO++807Nnz5/85CdXX331+vXrb7/99vj4+KBDAUA5SExMvPnmm1evXv3tb397/Pjx/fr1mz17dtChIGalpqY2a9Zs3rx5QQcBAAAAAKA86WMDAAAAQEzJzMxs1qxZp06dgg4CAFBtLFmyZNiwYSNGjOjWrduaNWseeeSRRo0aBR0KAMpZ06ZNH3nkkSVLljRv3nzo0KFXXHHFxo0bgw4FMSgcDmdkZOhjAwAAAADEGH1sAAAAAIgpWVlZGRkZ4XA46CAAANXA9u3bb7nllj59+hw8ePDDDz98/vnnzzrrrKBDAUAFSktLe+utt2bNmpWbm5uWljZx4sTDhw8HHQpizaBBg+bMmRN0CgAAAAAAypM+NgAAAADElEgfO+gUAABV3eHDh3//+9936tTpzTfffPbZZ7Ozs7/1rW8FHQoAKsl55523ePHi3/zmN3/+85/PPvvsN998M+hEEFMGDhy4Y8eOTZs2BR0EAAAAAIByo48NAAAAALFjy5Ytn3zyycCBA4MOAgBQpb366qtdu3a977777rnnnlWrVl199dXhcDjoUABQqRITE+++++7c3NwePXqMGjXq8ssv37p1a9ChIEb06dMnISFh/vz5QQcBAAAAAKDc6GMDAAAAQOzIzMxMSEjo06dP0EEAAKqo1atXX3jhhZdddllaWtrKlSt/9rOf1a1bN+hQABCYM8888+WXX3733Xdzc3O7dOkyceLEI0eOBB0Kqr169eqlpaUtWLAg6CAAAAAAAJQbfWwAAAAAiB1ZWVndu3dv0KBB0EEAAKqcvXv33n777d26ddu1a9fcuXOnTZvWtm3boEMBQJUwbNiwnJycCRMmPPDAA7169Zo9e3bQiaDa69evn31sAAAAAIBYoo8NAAAAALEjKytr4MCBQacAAKhaiouLJ0+e3KlTp+eff37SpEnz588fNGhQ0KEAoGqpU6fOr371qxUrVrRr1+6cc875wQ9+sH///qBDQTXWt2/fhQsXFhUVBR0EAAAAAIDyoY8NAAAAADHi0KFDS5cuzcjICDoIAEAVEmlf/+hHP7rssstyc3NvvPHGuDj/JykAfLn27dvPmDHj9ddfnzZtWpcuXV5++eWgE0F11a9fv4KCgtzc3KCDAAAAAABQPrzVAAAAAABixIIFC44ePWofGwAgYtu2bddcc82AAQMaNWq0bNmyxx9/vFmzZkGHAoBq4KKLLlq+fPnIkSOvuOKKyy+/fPv27UEnguqnW7du9evXnz9/ftBBAAAAAAAoH/rYAAAAABAjMjMzW7Zs2a5du6CDAAAErKio6OGHH05NTc3Kynr11Vffeuut1NTUoEMBQHXStGnTKVOmvPXWW4sXL05LS/vHP/5RWloadCioTuLj43v16rVgwYKggwAAAAAAUD70sQEAAAAgRmRlZQ0ePDjoFAAAAZs7d27v3r1/+tOf3nbbbStXrhw7dmzQiaqi8Fc75oKvuu9JPuyJM5z6C6lMJ/gpVeXX8rWylX1plfakQFV2/vnnL1++/Prrr7/llluGDx++cePGoBNBddKvXz/72AAAAAAAMUMfGwAAAABiRHZ2dkZGRtApAAACs2vXru9973tDhgxp3br18uXL77333rp16wYdquoq/cIxx6FQKBwOR88cU6yNfutLC7fHP+AJernVbme17KuLnil7vmo6+Wxl/2Kd4iuqyj8Q4OuqV6/en//8548++uizzz7r3r37448/7s84nKS+ffsuX748Pz8/6CAAAAAAAJQDfWwAAAAAiAXr1q3buXOnPjYAUDOVlJQ888wzaWlps2bNmjJlyptvvpmSkhJ0qBhRtlMdKWMff/4k7/61BDiwfPJPXfYH8o0f5NRjlJdTLFjaxIbY1qdPn0WLFv3iF7/4yU9+MnLkyK1btwadCKqB/v37FxcXL168OOggAAAAAACUA31sAAAAAIgFmZmZtWvX7tWrV9BBAAAqW05OzsCBA2+88cZvf/vbq1atuu6664JOVA18VfP2mP1njveNG+YA1V1iYuKECRPmzp27devWbt26TZ48OehEUNW1a9futNNOW7hwYdBBAAAAAAAoB/rYAAAAABALsrKyevXqVadOnaCDAABUnr17995yyy19+/atX7/+smXLHnnkkYYNGwYdiq8UqTGHw+HowZee/9IzX/Ug0eOyV57g7l96vuz1J77vMfc68Tj28alO/JjHBDiZRziZtCf5U/3SRz4+2Fed/Kq/uKeSHKia+vXrl5OT8/3vf/+HP/zh2LFjd+zYEXQiqNJ69eqVk5MTdAoAAOD/sXfncTrXC//HZ7VWKrQoDEZZjilZZ5LskepWRCUtR0p02p20ndydOtFyTtolilKhyFLWduZShGzVQVHqkK0k2xjz+8N993MztsF8rmvm+fzDg+v6zvf7uq6ZU53HeM8XAAAOA3tsAAAAACgIMjMzMzIyQlcAAOSfYcOGVa9efdy4ccOGDXv//ferVasWuqhg2sfq+KA+/I/9bU5Ozq63mM718T9u073bpXc7eNff//Gxe7vQrj37CNjbpXe188P3fcBuJ9lbz55hB36G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1q1b9xxj75SUlHTiiSdOmzatRIkS+ZwHoRx//PH9+vX797//Xa9evdatW7ds2fKrr74KHQXk3fXXXz9u3LiJEyc2b9581apVoXPgMKtVq5b7YwMAAAAAxC57bAAAAACIPdu2bfviiy/ssQGAaLNp06abb765efPmtWvXXrBgQfv27UMXFRw9e/bcx51Ck5OTy5Yt+8knn1SoUCE/qyAanHrqqUOHDp06derKlStr16790EMPZWVlhY4C8qh169aRSGTNmjUNGzZctGhR6Bw4nGrUqLF69erVq1eHDgEAAAAAIC/ssQEAAAAg9syePXvLli0ZGRmhQwAA/r9IJFK7du1XX311yJAho0ePPuGEE0IXFSjHHHPM7bffnpSUtOdTycnJZcqUmT59eqVKlfI/DKJE8+bN58yZ8/DDDz/yyCN169adOXNm6CIgj6pVqxaJRE499dSzzz77gw8+CJ0Dh03NmjXj4uIWLlwYOgQAAAAAgLzI5bv1AAAAAECUy8zMLF26dNWqVUOHAADExcXFbd++/Yknnrj//vubNGkyderU8uXLhy4qgDZv3pyVlZWYmLh9+/ZdH09KSipTpsy0adN2HWOvWLFixIgR+d4IgSUlJd1xxx3t2rW7/vrr09PTb7311oceeqhYsWKhu4CDVrp06alTp3bt2vW888579tlnr7/++tBFcBicfPLJxx9//MKFC5s0aRK6BQAAAACAg2aPDQAAAACxJxKJZGRkxMfHhw4BAIhbvHjxlVdeOX/+/H/96189evTwnyiHXU5OzogRI+666661a9c2a9Zs6tSpWVlZO59KTk4uXbr0tGnTKleuvOuHzJgxo1OnTiFiIbwqVapMnTp10KBBd95556RJk15//fVatWqFjgIOWtGiRV999dUKFSp07979xx9/7NOnj//GoACoXr36okWLQlcAAAAAAJAX9tgAAAAAEHtmzJjRo0eP0BUAAHFDhw7t2bNnSkrKjBkz0tLSQucUQLNnz7711lunTZvWoUOHxx9/vFixYhUqVNj51N7G2CNHjgxRClEkPj7+uuuua9WqVZcuXerXr9+nT59evXolJCSE7gIOTnx8/D/+8Y+qVavecMMNX3/99ZAhQ9zxnlhXs2ZNe2wAAAAAgBjl240AAAAAEGOWL1++YsWK9PT00CEAQKG2Zs2aSy655Nprr+3Ro8cXX3xhjH3Y/f777717965fv/7WrVunT58+YsSIChUqnHDCCd27d09OTk5KSipduvT06dOrVKkSuhSiVIUKFT744IO77777vvvuu/DCC9euXRu6CMiLa6+9dvz48RMnTmzTps369etD58AhqVGjxoIFC0JXAAAAAACQF/bYAAAAABBjIpFIUlJS3bp1Q4cAAIXX5MmT09LSZs2aNXXq1H79+hUpUiR0UUEzZsyY008/ffDgwa+88sqMGTN2/Vk8vXr1iouLK1OmzJ53xgZ2k5iY+Le//e2TTz5ZsGBB3bp158yZE7oIyItWrVp9+umnS5Ysady48Y8//hg6B/KuRo0aa9asWb16degQAAAAAAAOmj02AAAAAMSYSCRyxhlnHHXUUaFDAIDCaMuWLb17927Tps3ZZ589d+7cpk2bhi4qaFauXHnVVVe1a9cuIyNj4cKFV155ZXx8/K4HnHLKKffff/+0adPcGRsOUHp6+uzZs6tWrZqRkTFo0KDQOUBepKWlffbZZwkJCfXr158/f37oHMijmjVrxsXFLVy4MHQIAAAAAAAHzR4bAAAAAGJMZmZmRkZG6AoAoDBauHBhenr6888///zzz48cOfL4448PXVTQvPHGG9WrV8/MzJw8efKIESPKli2b62H333+/MTYclNKlS0+YMOHmm2/u1q3bLbfckp2dHboIOGjlypX76KOPKleu3KRJk+nTp4fOgbwoV67ccccdt2jRotAhAAAAAAAcNHtsAAAAAIglmzdvnjdvXnp6eugQAKBwycnJefHFF+vXr1+sWLEvvvji+uuvD11U0Pzyyy+dO3fu3LnzlVdeOW/evJYtW4YugoImMTGxX79+b7755sCBA9u3b79p06bQRcBBO+6446ZOndqkSZNWrVq9++67oXMgL6pXr26PDQAAAAAQi+yxAQAAACCWfP7559u2bbPHBgDy06pVqy644IKePXv26tVr2rRpqampoYsKmkgkUqdOnffff3/s2LFPP/10iRIlQhdBgdWxY8cPP/wwEok0adJk1apVoXOAg1a0aNERI0Z07tz5v/7rvwYNGhQ6Bw5azZo1Fy5cGLoCAAAAAICDZo8NAAAAALEkEomUK1cuJSUldAgAUFiMGjWqZs2aS5YsyczM7NOnT2JiYuiiAiU7O/u+++5r1KjRGWecsWDBggsuuCB0ERR8DRo0mDZt2rp16zIyMpYuXRo6BzhoiYmJAwYM6NWrV7du3R577LHQOXBwatSosWDBgtAVAAAAAAAcNHtsAAAAAIglkUjEzbEBgPyxcePGrl27tm/f/pJLLpk9e3a9evVCFxU0a9euPf/885944okXXnhh1KhRZcqUCV0EhUXVqlUjkcjxxx9/7rnnfvPNN6FzgIMWHx//yCOPPPnkk71797777rtD58BBqFGjxpo1a1avXh06BAAAAACAg2OPDQAAAAAxIycnxx4bAMgfn3/++VlnnTV27NjRo0e/+OKLJUuWDF1U0MyZM6devXqLFi36+OOPu3XrFjoHCp2yZctOnTq1QoUK55577vz580PnAHlx8803v/rqq48//viNN964Y8eO0DlwQKpVqxYXF+engQAAAAAAxBx7bAAAAACIGUuWLFm9enVGRkboEACgIMvOzu7Xr1+jRo0qVqz45ZdftmvXLnRRATR48OCMjIzU1NQ5c+bUr18/dA4UUqVKlZo0adLpp5/evHnzefPmhc4B8uKKK64YNWrUK6+80qVLl+3bt4fOgf0rX778UUcdZY8NAAAAABBz7LEBAAAAIGZkZmYWLVq0du3aoUMAgAJr2bJljRs37tOnzxNPPDF58uRy5cqFLiposrOzb7/99uuuu+7WW2+dMGFCmTJlQhdBoXb00Ue/9957tWrVatmy5eLFi0PnAHlx4YUXjhkz5p133unUqdPWrVtD58B+xMfHV61a1R4bAAAAACDm2GMDAAAAQMyIRCJ16tQpVqxY6BAAoGB6++23a9euvXHjxlmzZv3lL3+Jj48PXVTQbNy4sX379s8999yQIUMeeeSRxMTE0EVAXMmSJceNG5eamtq8efMffvghdA6QF61atZo0adL777//X//1X5s2bQqdA/tRrVq1r7/+OnQFAAAAAAAHxx4bAAAAAGJGJBJJT08PXQEAFEBbt2695ZZbOnTocOGFF0YikZo1a4YuKoB++umnJk2aTJs2bfLkyV26dAmdA/x/JUqUGDNmzFFHHdW2bdsNGzaEzgHyolGjRh988MHs2bPPO++8X3/9NXQO7Mvpp59ujw0AAAAAEHPssQEAAAAgNmzYsGHhwoX22ADAYffvf/+7YcOGQ4YMGTFixNChQ0uUKBG6qACaO3duw4YNt2zZMnPmzMaNG4fOAXZXpkyZiRMnrl69+sorr9yxY0foHCAvzjrrrI8++ujbb79t0aLFunXrQufAXlWrVu3bb7/dunVr6BAAAAAAAA6CPTYAAAAAxIbPPvssOzu7YcOGoUMAgAJl2LBhdevWTU5Onj179qWXXho6p2AaM2bM2WefXaNGjenTp1eqVCl0DpC7ChUqjBo1avLkyffee2/oFiCPatSo8emnn65evbpFixZr164NnQO5O/3007Ozs5cuXRo6BAAAAACAg2CPDQAAAACxITMzMyUl5ZRTTgkdAgAUEJs3b77lllu6dOly7bXXTps2rXLlyqGLCqYBAwa0b9/+yiuvHD9+fKlSpULnAPuSnp4+YMCAfv36jRw5MnQLkEeVK1f+5JNPNmzYcM4556xcuTJ0DuTi9NNPT0hI+Prrr0OHAAAAAABwEOyxAQAAACA2RCKRjIyM0BUAQAHx1VdfNWjQYMiQISNGjOjfv3+RIkVCFxVAOTk5ffr06d69+5133jlgwICkpKTQRcD+XX311T169OjWrZvblkLsqlChwocffpiVldW0adP//Oc/oXNgd8WLF69QoYI9NgAAAABAbLHHBgAAAIAYkJOT8/nnn6enp4cOAQAKgqFDh9arV6948eJz5szp0KFD6JyCKTs7u3v37g899NCAAQP69u0bOgc4CE888USVKlXat2+/ZcuW0C1AHpUvX/7TTz+Nj49v2rTpTz/9FDoHdnf66ad/8803oSsAAAAAADgI9tgAAAAAEAMWLly4fv16e2wA4BD99ttvnTt3vuaaa7p27Tpt2rRKlSqFLiqYfv/99wsvvHDYsGFjx469/vrrQ+cAB6do0aJvvvnmd999d88994RuAfLupJNO+uCDDxITE5s2bfrjjz+GzoH/o1q1avbYAAAAAACxxR4bAAAAAGJAJBIpWbLkGWecEToEAIhhs2fPPuuss95///1Jkyb1798/OTk5dFHBtH79+latWs2aNevDDz88//zzQ+cAeVG1atX+/fv379//o48+Ct0C5N1JJ500derUxMTEZs2amWQTVU4//fSvv/46dAUAAAAAAAfBHhsAAAAAYkAkEqlXr15SUlLoEAAgJuXk5Dz11FMZGRkVK1acO3duy5YtQxcVWKtWrWrWrNl33333wQcf1KtXL3QOkHfXXHPNxRdffO211/7222+hW4C8O/nkkz/88MPk5ORmzZqtXLkydA78j+rVq//666//+c9/QocAAAAAAHCg4nNyckI3AAAAAAD7Ua1atfbt2z/88MOhQwCA2PPrr79ef/31b7/99n333Xf//fcnJiaGLiqwli9f3qpVq6ysrKlTp1auXPmwnHPFihWZmZmH5VRQCHXs2PFQPnzVqlV/+tOfOnTo8Pzzzx+uJCCIn3/+uWnTptnZ2R999NFJJ50UOgfiVqxYUb58+U8++eScc84J3QIAAAAAwAGxxwYAAACAaLd27dqyZcuOHTv2ggsuCN0CAMSYmTNnXnbZZdu2bRs2bFjjxo1D5xRkX3/9datWrY455pjJkyeXK1fucJ12xIgRnTp1Olxng8Lm0P9GxOuvv96lS5dIJFK/fv3DkgSEsmrVqiZNmiQnJ3/44YelS5cOnUNhl5OTc9RRRz3zzDPXXntt6BYAAAAAAA5IQugAAAAAAGA/IpFIXFxcgwYNQocAALEkJyenf//+jRo1qly58qxZs4yxj6i5c+c2bty4QoUK06ZNO4xj7D/kAAdp+PDhh+V/fVdccUWTJk169OiRnZ19WE4IhHLiiSdOnjz5999/b9Gixbp160LnUNjFx8dXrlx56dKloUMAAAAAADhQ9tgAAAAAEO0ikchpp51WtmzZ0CEAQMxYs2bN+eef36tXr3/84x+TJ08+8cQTQxcVZLNnz27evPkZZ5wxadKkY489NnQOcJg9/fTT8+bNGzhwYOgQ4FCVL19+6tSpa9eubdOmzYYNG0LnUNilpqYuWbIkdAUAAAAAAAfKHhsAAAAAol0kEklPTw9dAQDEjM8///yss876+uuvp02bdscdd8THx4cuKshmz57dsmXLevXqjR07tmTJkqFzgMOvRo0at9xyyz333LN69erQLcChqlSp0vvvv79ixYrzzz9/48aNoXMo1OyxAQAAAABiiz02AAAAAES17du3z5w50x4bADhAzz//fOPGjf/0pz998cUX9evXD51TwM2aNatly5b169d/5513ihcvHjoHOFL+9re/lShR4u677w4dAhwGVatWff/995csWXLhhRdu3rw5dA6FV5UqVRYvXhy6AgAAAACAA2WPDQAAAABRbd68eRs3bszIyAgdAgBEu02bNl111VU33XTT3XffPX78+OOPPz50UQE3ffr05s2bN2zYcPTo0cWKFQudAxxBRx999BNPPDF48OBIJBK6BTgMqlWrNmXKlHnz5nXs2DErKyt0DoVUamrqhg0bVq9eHToEAAAAAIADYo8NAAAAAFEtMzPzmGOOqVGjRugQACCqLVmyJD09/b333nv33XcfeOCBhATfBzyypk+f3rp16xYtWhhjQyHRqVOnZs2a3XTTTTt27AjdAhwGtWrVmjBhwscff3zZZZdlZ2eHzqEwSk1NjYuLW7JkSegQAAAAAAAOiL+HAQAAAABRLRKJpKenm1QBAPswbty4evXqJSYmzpw5s3Xr1qFzCr7PPvvs/PPPb9GixZtvvlmkSJHQOUA+eeqpp7788ss333wzdAhweNSvX3/MmDHvvffeddddl5OTEzqHQqdChQpFixZdunRp6BAAAAAAAA6Iv8QJAAAAAFFt5x47dAUAEKWys7P79OnTrl27Cy+8cPr06ZUqVQpdVPDNnTv3/PPPT09Pf/PNN5OTk0PnAPmnRo0anTt37tOnT1ZWVugW4PBo2rTp8OHDX3vttdtuuy10C4VOQkJCpUqV3B8bAAAAACBW2GMDAAAAQPRatWrVd999Z48NAORqzZo1bdq06dev34ABA4YOHVq8ePHQRQXfvHnzWrRoUadOnXfeeado0aKhc4D89t///d/Lly8fMmRI6BDgsLnoooteeeWVp59+um/fvqFbKHRSU1PdHxsAAAAAIFYkhQ4AAAAAAPZq+vTpCQkJDRo0CB0CAESdWbNmdejQIScn55NPPqlXr17onELhm2++Oe+886pXrz569OhixYqFzgECSElJ6dq1a58+fTp37uynYECB0blz519//bVnz57FihW79dZbQ+dQiFSpUuWzzz4LXQEAAAAAwAFxf2wAAAAAiF6RSKRmzZqlSpUKHQIARJennnoqIyOjVq1ac+fONcbOH0uXLm3atGnVqlUnTpxYsmTJ0DlAMPfff//69esHDhwYOgQ4nHr06PH3v//9jjvuGD58eOgWCpEqVaosWbIkdAUAAAAAAAfEHhsAAAAAoldmZmZGRkboCgAgimzcuPHyyy+//fbbH3jggbFjxx533HGhiwqFn376qWXLlieccMLYsWONsaGQO/nkk3v06PHQQw/99ttvoVuAw+m+++67+eabr7766g8++CB0C4VFamrqmjVr1q9fHzoEAAAAAID9s8cGAAAAgCi1devW2bNnp6enhw4BAKLFv//97/T09KlTp7733nv33ntvfHx86KJC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9NNrr702dE4hde+997755ptvvfXWGWecEbolBhTUSW0s+mNOHzpk/3Z+2RTUr5ykpKSuXbsOGjRo27ZtoVuAI6h06dLjx49fvnz5lVdeuWPHjtA5FBxVqlSxxwYAAAAAiH722AAAAAAQXXJycmbMmJGenh46BAA44t5555309PQTTzxx5syZ9erVC51TSL388st9+/YdMGBAq1atQrcEcLC3LN7HwbutgvccCefDbPhgL7Hr8X/8ftfXuOvaeb9v1GF5gTtPciDX3dvl9nuGA39FudrtzPsoyfWp/T5yUO959OjWrduaNWveeeed0CHAkVW1atXRo0dPmDDh3nvvDd1CwVGlSpUVK1Zs3rw5dAgAAAAAAPtijw0AAAAA0WXx4sWrV692f2wAKNhycnL69evXvn37yy+//IMPPjjppJNCFxVSn3322Y033njXXXcVgJuT71xW7/qb3Z6N22N+vO9bFu92wlyX2zuns3s+9ccf9zxgt5Jd/5jrr3v+Zrdf99awtxe+t+P/eHxPlW4gAAAgAElEQVRvr/GPx3MdIe97qb6PT83eTrK3nj3PnOs7f1CvaLdzxu3zDd/zDH8sqPf9Gdnzy+CP4H2fP9eMfb+T+e/UU09t27btgAEDQocAR1yjRo1efPHFvn37vvTSS6FbKCBSU1NzcnK+++670CEAAAAAAOxLUugAAAAAAOD/iEQiRYsWrV27dugQAOBI2bhx49VXXz127Nh//OMfd911V+icwmvlypUdOnQ499xzH3roodAth8G+byO857P7ve3wAd6XeL9nPvA/7u33+73oPg7O9am9HX+Ajx/sm3m43sk8HH+wr3RvT+3jzH9Msg+8ZLePPZDyA//aCOiGG25o27btokWLatSoEboFOLKuuuqqhQsX9uzZs2rVqueee27oHGJepUqV4uLili9f7t8gAAAAAADRzP2xAQAAACC6RCKROnXqFC1aNHQIAHBELFmypGHDhp988snkyZONsQPKysrq2LFjiRIlhg8fnpiYGDoHiHmtW7euVKnSoEGDQocA+eGRRx5p06ZNhw4dli5dGrqFmHf00Ucfd9xxy5YtCx0CAAAAAMC+2GMDAAAAQHTJzMzMyMgIXQEAHBGTJk2qX79+cnLyrFmzmjZtGjqnULvpppvmzp07atSoY489NnQLgcXHx//xa8FWeF5pEAkJCd26dRs8ePCmTZtCtwBHXEJCwmuvvXbKKadcdNFFv/76a+gcYl5KSsry5ctDVwAAAAAAsC/22AAAAAAQRTZs2LBo0aL09PTQIQDA4ffoo4+2bdu2bdu2mZmZFStWDJ1TqD3//PMDBw4cPHhwzZo1Q7cQXs7/Ch1yxBWeVxrKddddt3nz5rfeeit0CJAfjjrqqLFjx65du7ZLly47duwInUNsS0lJcX9sAAAAAIAoZ48NAAAAAFFkxowZ2dnZDRs2DB0CABxOW7duveqqq+65555HH3301VdfLV68eOiiQi0zM/PWW2994IEHOnToELoFKFDKli3brl27F154IXQIkE8qVKgwevToKVOm9O7dO3QLsa1ixYrujw0AAAAAEOXssQEAAAAgikQikUqVKpUrVy50CABw2Kxevbp58+ZjxowZN27c7bffHjqnsPvPf/5z6aWXtmnT5v777w/dAhRA119/fSQS+eqrr0KHAPkkPT194MCBjz/++Ouvvx66hRhWsWJF98cGAAAAAIhy9tgAAAAAEEUikUh6enroCgDgsFmwYEGDBg1++umnzMzMNm3ahM4p7LZs2dKuXbtjjjlmyJAhCQm+VQocfk2aNClfvvxrr70WOgTIP1deeeVtt93WtWvXmTNnhm4hVqWkpKxatWrz5s2hQwAAAAAA2Ct/yQAAAAAAosWOHTs+//xze2wAKDAmT57cqFGjk046KRKJ1KxZM3QOcT179ly8ePHYsWNLlSoVugUomBISEjp37vzaa6/t2LEjdAuQfx599NGmTZt26NDh559/Dt1CTEpJScnJyfn+++9DhwAAAAAAsFf22AAAAAAQLRYtWrR+/fqMjIzQIQDAYfDiiy+2bdu2TZs277///oknnhg6h7j+/fsPGTJk2LBhVatWDd0CFGRXXXXV999///HHH4cOAfJPYmLia6+9lpycfMkll2zbti10DrGnYsWKcXFxy5YtCx0CAAAAAMBe2WMDAAAAQLTIzMwsWbJkWlpa6BAA4JBs3779L3/5S/fu3e+999433nijePHioYuIi0QivXr1euihh9q0aRO6BSjgqlevXqdOnVdffTV0CJCvjj/++HHjxs2fP/+OO+4I3ULsOe6440qVKrV8+fLQIQAAAAAA7JU9NgAAAABEi0gkUr9+/aSkpNAhAEDerV+/vnXr1i+//PLbb7/dp0+f0DnExcXFrV+//oorrmjRosVdd90VugUoFLp06fL2229v2rQpdAiQr6pXr/7KK688++yzAwcODN1C7KlYsaI9NgAAAABANLPHBgAAAIBokZmZmZGREboCAMi7pUuXnn322V999dVHH3108cUXh84hLi4uLicn589//vP27duHDh0aHx8fOgcoFK644orNmzePGTMmdAiQ3y6++OK77767Z8+en376aegWYkxKSsqyZctCVwAAAAAAsFf22AAAAAAQFdauXbt48eL09PTQIQBAHn344Yf169c/6qijZs6cWbdu3dA5/I8nn3xy/Pjxb7zxRpkyZUK3AIVF2bJlzzvvvFdffTV0CBDA3//+95YtW15++eWrVq0K3UIsqVixoj02AAAAAEA0s8cGAAAAgKgQiUTi4uIaNGgQOgQAyItBgwa1bt26WbNmH330Ubly5ULn8D9mzZrVu3fvBx98sFGjRqFbgMKlS5cukydPXrlyZegQIL8lJCQMGzasWLFil1122fbt20PnEDMqVqy4fPny0BUAAAAAAOyVPTYAAAAARIVIJHLaaae5bSMAxJzs7OzevXt369bttttuGz58eIkSJUIX8T9++eWXTp06NWrU6K9//WvoFqDQueiii44++ujXX389dAgQwLHHHjtq1KjPP//83nvvDd1CzEhJSfnpp5+2bNkSOgQAAAAAgNzZYwMAAABAVMjMzMzIyAhdAQAcnI0bN7Zv3/7JJ58cMmRI3759ExJ89y2K9OjR4/fffx82bFhiYmLoFqDQKVasWPv27d94443QIUAYaWlpL7744mOPPfbWW2+FbiE2pKSk5OTk/PDDD6FDAAAAAADInb8RAgAAAADhbd++fdasWenp6aFDAICDsGLFinPPPXf69OmTJ0/u0qVL6Bz+j2effXb48OGvvfbaSSedFLoFKKQ6duw4a9aspUuXhg4BwujcuXO3bt2uvfbar776KnQLMaBixYpxcXHLly8PHQIAAAAAQO7ssQEAAAAgvC+//HLjxo3ujw0AMWTGjBl169bNysqaOXNm48aNQ+fwf8ybN69Xr15/+9vfWrRoEboFKLyaNWtWtmzZUaNGhQ4BgnnmmWfS0tIuvvji3377LXQL0a5MmTJHH330smXLQocAAAAAAJA7e2wAAAAACC8zM/PYY4+tXr166BAA4IAMGzasadOm9erVmz59ekpKSugc/o+NGzd27Nixfv369913X+gWoFBLSkq66KKLRo4cGToECCY5Ofn1119fu3btDTfcELqFGFChQgX3xwYAAAAAiFpJoQMAAAAAgLhIJNKgQYOEBD8/EQBiwIMPPtinT5/bb7+9X79+iYmJoXPY3fXXX//LL798+OGHBemzM2LEiLi4uJycnJUrVy5btqxatWrHHXdc6CiIapFIJHRCXFxc3KWXXjpo0KBvv/22cuXKoVuAMCpWrDhs2LA2bdqkp6f/5S9/CZ1DVEtJSXF/bAAAAACAqGWPDQAAAADhRSKRa665JnQFALAfWVlZN9xww6uvvvrcc8917949dA65GDp06PDhwydOnHjyySeHbjkMNm3atGTJkri4uE6dOoVugZjUp0+f+++/P+BPZ2jWrFnp0qVHjRp15513hmoAgmvVqtUDDzxw5513NmzYsF69eqFziF4pKSnz5s0LXQEAAAAAQO7ic3JyQjcAAAAAQKH2n//8p1y5cpMnT27ZsmXoFgBgrzZu3NixY8dPPvnkzTffvOCCC0LnkIsVK1akpaVdc801//znP0O35NGqVavmzp07d+7cOXPmfPHFF99+++2OHTuSkpISEhK2bdsWFxfXpk2bcePGFaRbf8MRsmPHjqeffvquu+4666yzhg4dmpqaGqqka9euCxYs+Oyzz0IFANFgx44dbdq0+frrr+fMmXP88ceHziFKPfbYY08//fT3338fOgQAAAAAgFzYYwMAAABAYG+//XbHjh3XrVtXqlSp0C0AQO5++umntm3brlq1aty4cXXq1AmdQy527NjRokWLlStXfvHFF8WLFw+dcxA2btz48MMPz549e/bs2WvWrImLiytSpEh2dnZ2dvauhyUnJ1erVi0zM/Ooo44KVAqx58svv+zSpcuyZcv69+9/7bXXBmmYMGHC+eefv3Tp0sqVKwcJAKLEzz//XLt27Tp16owZMyY+Pj50DtFoxIgRV1xxxebNm5OTk0O3AAAAAACwu4TQAQAAAABQ2EUikT/96U/G2AAQtebPn9+wYcOsrKxIJGKMHbWefPLJTz/9dMiQIbE1xo6LizvqqKPmzJkzZcqUnWPsuLi4bdu27TbGTkpKKl269MSJE42x4aCcccYZM2fO7N69e9euXa+55ppNmzblf0OLFi2OP/74UaNG5f+lgahywgknvP766xMmTHj66adDtxClUlJSsrOzf/jhh9AhAAAAAADkwh4bAAAAAALLzMzMyMgIXQEA5G7KlCmNGjWqWrXqtGnTKlasGDqH3H311Vf33XffAw88UK9evdAtefHkk08mJOz1W7cJCQnJyckTJ04sV65cflZBwVC0aNFHH310ypQpEyZMqFOnzsKFC/M5IDk5+aKLLho5cmQ+XxeIQueee+4DDzxw5513RiKR0C1Eo53/d2PZsmWhQwAAAAAAyIU9NgAAAACEtHXr1jlz5qSnp4cOAQByMXjw4LZt21588cUTJkw49thjQ+eQu+3bt1999dU1atS46667QrfkUbVq1W666aakpKS9HfDOO++cccYZ+ZkEBUzz5s1nzpxZqlSp9PT0/J9GX3rppTNnzly+fHk+XxeIQvfcc0+zZs0uu+yydevWhW4h6pxwwgklSpTw7wsAAAAAgOhkjw0AAAAAIc2ePXvLli322AAQbXJycvr06dO1a9fbb7/95ZdfLlKkSOgi9qpPnz4LFy58/fXXk5OTQ7fk3QMPPFC8ePFcn3rmmWdatWqVzz1Q8FSoUOGTTz656qqrOnXq9Pe//z0nJyffLt2iRYujjz567Nix+XZFIGolJCS8+uqr2dnZV199dX7+g4iYEB8fX6FCBXtsAAAAAIDoZI8NAAAAACFlZmaWKVMmNTU1dAgA8P9t3bq1c+fO//jHP1555ZW+ffvGx8eHLmKvIpFI3759H3/88dNOOy10S979/vvvDzzwwMaNGxMS/s83cBMSEnr37n3jjTeGCoMCpkiRIs8888yAAQP+/ve/X3bZZZs3b86365533nnjxo3Ln8sBUa5s2bKvv/76xIkTn3766dAtRJ2UlJRly5aFrgAAAAAAIBf22AAAAAAQUiQSycjIsPICgOixbt26Vq1avffeexMmTLj66qtD57AvmzZtuuaaa5o1a9a9e/fQLXmXmZl51llnvfrqq88999zpp5+emJi48/GkpKSLL7744YcfDpsHBU+3bt3efffdyZMnN2/efM2aNflz0QsvvPCjjz765Zdf8udyQJRr3LjxAw888Ne//vXLL78M3UJ0sccGAAAAAIha9tgAAAAAENKMGTPS09NDVwAA/+O77747++yzly5d+tFHHzVv3jx0Dvtxxx13/Pzzz4MGDYrRn26zbdu2Xr16nXPOOdWqVVu0aFH37t2feeaZ7OzsuLi45OTktLS0oUOH7nbHbOCwaNmyZSQSWbly5bnnnvvjjz/mwxXbtm2bk5MzZcqUfLgWEBPuueees88++9JLL/3tt99CtxBFKlasaI8NAAAAABCdfPMeAAAAAIJZtmzZjz/+mJGREToEAIiLi4v7/PPP09PTixQpMmPGjDPPPDN0DvsxZcqUAQMGvPDCC+XLlw/dkheLFy8+++yzX3jhhUGDBo0ZM+bkk0+Oi4tr1qzZBRdcEBcXV65cuUmTJpUoUSJ0JhRY1apVy8zMTExMPPvssxcvXnykL3f88cdnZGSMGzfuSF8IiBUJCQlDhw5dt27d7bffHrqFKFKhQoUff/xx5w/oAQAAAAAgqthjAwAAAEAwmZmZycnJdevWDR0CAMS98847TZs2PeOMMz799NNTTz01dA778csvv1xzzTWXXXZZp06dQrfkxdChQ+vUqZOTk/PFF19cc801uz71r3/966STTpo8eXKZMmUC1UFhcdJJJ3344YcnnHBC48aN582bd6Qvd+GFF7777rvbt28/0hcCYsUpp5wyZMiQQYMGvfHGG6FbiBannnrq9u3bV65cGToEAAAAAIDd2WMDAAAAQDCRSOSMM85w20MACK5///4dOnS4/PLLx48ff8wxx4TOYf/++te/btu2rX///qFDDtrWrVu7d+9+zTXXdOvWLTMz87TTTtvtgNTU1Pnz5+/5OHAklC5d+v33369WrVrLli2P9F2y27Vrt27duszMzCN6FSC2tG3b9sYbb+zRo8eyZctCtxAVypcvHxcXt2LFitAhAAAAAADszh4bAAAAAIKJRCIZGRmhKwCgUMvJyenTp89tt9123333vfTSS8nJyaGL2L+PP/74pZdeeuaZZ8qWLRu65eD8+OOPTZo0ef3110eMGPHEE08UKVIk18PcGRvy09FHH/3uu++mpqY2b978hx9+OHIXSk1NPe2008aNG3fkLgHEoieeeKJixYqdOnXKysoK3UJ4p5xySkJCgj02AAAAAEAUsscGAAAAgDA2bdr05Zdfpqenhw4BgMJry5Ytl156ab9+/d54440+ffqEzuGAbN269cYbb2zTpk2nTp1Ct/w/9u4zLKozbeD4zFBFY8OIILqxdwH7oKiggr1iY+2KLEaCFXtBscWGGhu2iA0VN9hFVFTYGRUJiuAaS6JiRWNvSJn3g/saY0HK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AAAAAAAA0AC3b99OT0/v3r272EEAoLqYMmVKUlJSWFiYoaGh8qSfn9/BgwdFTAVA5ZTz2J07dzY1NT127JjyodIrsrW0tHbt2tW1a1cPD4/79++rI5uenp6vr29iYuLBgwfT0tK6du3ao0ePw4cPq+NeKIn8fwodKxQ7WimRSOQFVH6WtdAOBQOoimYN3Bb6jChPFjqj6Qp+UkR8Upr1tZGRkVHSm2iURaFa7NmzZ2tra1dgHzV9iVKUDaDGc3Nz06x57Pr169OPDQAAAAAAAAAqxDw2AAAAAAAANMDZs2f19fUV/+4cALB169YdO3Zs27bNxsam0EP6+vqiRAKgJnZ2dv/8849UKtXS0howYMCRI0eUD72zIltPT2///v2mpqZubm7p6elqSqilpeXl5XX+/PmjR49KJBJvb++ePXseOXKkxgydarRiRyvL9alRDG+XPvJayc91WeZpq+2XUynhC71uileySkKVVSUnmavJ06kmMcooKiqqSZMmH3300bFjx8o7q1z5WuxC1PQlSlE2gBrM3d39woULz58/FztIWRkZGTGPDQAAAAAAAAAqxDw2AAAAAAAANEBMTIyTkxNDhgAgCEJ8fPz06dPnzJkzePBgsbMAULv27du/ffv27t27giB4e3vHxMQ8fvxY+aiiInvLli0lXW5kZHT06NG8vDxPT883b96oL6dEIhk4cGBUVNTp06eNjIy8vb3t7e23b9+em5urvpuipOHJsg9VVsMh4ZpEOe/K6wylN2/ehISEeHh4NGnSZMqUKVFRUTKZrPRLVFWLXZSavkQpygZQU7m5uUkkklOnTokdpKzq16//6tUrsVMAAAAAAAAAQM3BPDYAAAAAAAA0QExMjLOzs9gpAEB8mZmZI0aM6Nq16+LFi8XOAqAqtG/fXktLKyEhQRAEd3d3PT29Y8eOKR9VVGQvW7aspIpsQRDMzc1PnDhx7969UaNG5efnqztwz549jx49euPGDVdX1ylTplhaWgYGBmpQi2CtUvkJTIlEUrRjWTneqXyo0DLJ/xS7uCy3KOXWJd230HHpCYtuVdJVpYcvo5LylPQEy/IUit2hLK982V+0ok+hjLcufcNiV5b+amgcxY/ily9fbt26tVevXk2bNvX394+Oji52scprsasMRdkAap4GDRp06dIlIiJC7CBlRT82AAAAAAAAAKgW89gA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8urVq0uw3WeffbZu3bo5c+bMnTu3JHFF1a5duzVr1ty/f3/WrFlHjhxp3bq1p6dnSEhIZmam2NEAoFA3btyYOnVq48aN586d269fv8TExKCgoJxn9fT0DA0NDx486OHhocm0nIOyf/rppwEDBly7dq24eTgWGwCK1qVLF4VCkZaWJnaQQtHHBgAAAAAAAAAdoo8NAAAAAACA8kihULRq1eq9994TOwgAlK6HDx8OHDiwR48e48ePFzsLgPLO3t5eKpWePXs298X+/fuHh4enpKQUeEu9evXGjBkze/bs1NTUEuz4+eefr127dubMmfPnzy9JYrFVq1Zt/PjxSUlJR44csbCw8PPza9iwYWBg4KNHj8SOBgD/z7lz54YOHdq8efPt27dPnTr11q1by5cvb9iw4aBBg2rWrCkIgp6enrGx8fHjx93c3DQfK5VKHz58+ObNGxMTk+yDspVKpSY3ciw2AGjC09NTqVSeOnVK7CCFoo8NAAAAAAAAADpEHxsAAAAAAADlkVwul8lkYqcAgNKVlZU1ePBgExOT4OBgiUQidhwA5d17773XrFmz2NjY3Bd79+6tp6e3b9++wu767rvvpFLp4sWLS7bpF198sWbNmunTp+c+o7VikUqlHh4eO3bsuHbt2pAhQ1auXFm/fn0fH59jx46JHQ3Au06lUoWGhjo7O9vb21+9evX3339PSEiYMmWKhYVF9gJDQ8PJkycLgmBiYhIeHl6s/0zOysoaOXLkDz/8IJFIPvvss5UrV65YscLBweHixYunT58u4kaOxQYADdWpU8fW1vb48eNiBymUubk5fWwAAAAAAAAA0BX62AAAAAAAACh3MjIyzp8/7+TkJHYQAChd06ZNi4qK2rFjx3vvvSd2FgAVg4ODQ54+trm5uaen565duwq7pVq1atOmTVu2bNmdO3dKtumXX365dOnS7777btGiRSWbUE5YW1sHBQXdvn171apVSUlJnp6e7dq1+/333+moACh7T58+Xbp0aZMmTfr27WtlZSWXy8+ePTt06FB9ff08K0eMGNGsWbPIyMj27dtrPj8jI8PX13ft2rVqtVoqlbZu3XrEiBGXLl2qWrWqg4PDp59+GhwcnP8ujsUGgOLq0qVLef6UH87HBgAAAAAAAAAdoo8NAAAAAACAcuf8+fPp6emcjw2gcvvzzz8XL168atWqtm3b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AAAAADAXCoWiWbNmNjY2ooMAJd6YMWNu3769fft2/gcFAEBJUbp06V9++eXkyZNTpkwRnQWAiXv+/PnOnTs/++yzIs559uzZhQsXmjZtqpdUAAAz4eTkpFarL1++XOhKmUxGHxsAAAAAAAAANEcfGwAAAAAAwFwoFApPT0/RKYASb9WqVT/99NPWrVtr1KghOgsAANBCw4YNN2/evGzZspCQENFZAJiyHTt2KJXKAQMGFHHOqVOncnJy6GMDALTi5OQkkUguXbpU6EqZTKZUKg2fCAAAAAAAAABMBH1sAAAAAAAAs/D48ePExET62EARnT17dvLkyUFBQR999JHoLAAAQGu9e/eePHny2LFjT506JToLAJO1cePGnj17litXrohzTpw4UaVKlWrVquklFQDATDg4OFSoUOHixYuFrrS1teV+bAAAAAAAAADQHH1sAAAAAAAAsyCXy9VqNX1soCgePXrUq1cvLy+vmTNnis4CAAB0tHDhwrZt2/bo0ePmzZuiswAwQcnJySdOnBg6dGjRR504ccLb27vocwAA5sbJyUmTPrZMJqOPDQAAAAAAAACao48NAAAAAABgFhQKRe3atcuXLy86CFBSqdXqYcOGZWVlhYaGWlpaio4DAAB0ZGFhsXXrVnt7+759+2ZmZoqOA8DUhISEvPfee+3bty/iHJVKdfLkyZYtW+olFQDArGjex1YqlUbIAwAAAAAAAACmgT42AAAAAACAWZDL5V5eXqJTACXYggULDhw4sH37dr6vAQAAJV3p0qX3799//vz5iRMnis6iH9L85VpT8N5CxxacQS+fi4YMfZzh5mv4fhbxCANNlryW36BHGG64oWVmZm7cuHHo0KFF/xZOcXFxjx8/po8NANAB92MDAAAAAAAAgCHQxwYAAAAAADB9OTk5p06d8vT0FB0EKKn+85//fPXVV8HBwdQhAAAwDa6urps3b169evX69etFZ9EP9X/l+vlLUqn05ZNcTddXz3Otf33m6wMLKMq+ud1wSnQZO793W48MN/z1/IZ7l4z5e0nvdu3a9eDBg5EjRxZ91IkTJxwcHOrXr1/0UQAAc+Pk5JSamqpSqQpeZmtrSx8bAAAAAAAAADRHHxsAAAAAAMD0xcbGpqWl0ccGdHPnzh1fX98uXboEBASIzgIAAPSmR48eM2bMGDt2bEREhOgshvWyQ/vy50Ws0eq8Xb/dXUP3dY3TB9bvKca/U1pga7o4X6C9atWq/2fvzuOjru/8gU+uCSCHCEIDwSAeVbQLi0pJUOtRRG2tLQroUkW8tuhSpWLBoz/BsooClXpU16OAoiKroqJY6wGuMqNcLih0waMgEQkioKKQc35/ZDebzTnAJN9M8nz+kcfMZ77z+b6+3/B4GCSvef/85z/v3r37/m8zirL9AAAgAElEQVS1ZMmSAQMGpKen7/9WALQ0hx12WGFh4WeffVb3YeZjAwAAAADsFX1sAAAAgOYvEom0a9fumGOOCToIJJ+SkpJhw4a1bdt29uzZTbn4AQDsg0mTJg0ePHjYsGH5+flBZ9kvtTVj627Mlv9sk5KS4occSIhVq1YtWbJk9OjRCdltyZIlAwcOTMhWALQ0vXr1CoVCH3/8cd2HZWZmFhYWNkoiAAAAAIDmQB8bAAAAoPmLRqMDBgxIS0sLOggknxtvvHHp0qVPPfVUhw4dgs4CACRYamrqnDlzOnToMHTo0N27dwcdp7HFKtmHSnaVOnfFDtVr3nUXv1P+R207Vz+47lTVd2vQ/Wt7Y733oe71Km+svnk8O8efrY6LjeddtWWuO3Zti7Vd116FD8Sf/vSno4466tRTT93/rbZs2fL3v/9dHxuAfdO1a9e2bdvW28c2HxsAAAAAYK/oYwMAAAA0f5FIJC8vL+gUkHxefPHFadOm3X///f/4j/8YdBYAoEF06NDhueeeW7du3UUXXVRWVhZ0nMDEWclOSUkpn7ld0YmtUueucb38LeUrNW5Y+eDadq5tscbdGnr/et9Y732o+8jKT2vcvEqMGnfeq2x1XGzFAbV9H6tsWNuNinOx3py1xQjcV1999fjjj1911VUJKYq//fbbaWlp/fv33/+tAGiBUlJSevbsuWHDhroPy8zM1McGAAAAAIifPjYAAABAM7d169ZPPvkkNzc36CCQZDZu3Dhy5MgrrrjikksuCToLANCAjjrqqOeee+7FF1+8/vrrg87SRFVMMK5owFZ0Yis/rb5er4ojq7dtq2eofrp6t60cPoH7V0le+Y1VCtL1vr3GO1n5jdU3qX7Tanx1n7PV9sa6r6V6SbuOEdb1foOqb1tvjMDNmjUrFov98pe/TMhuS5Ys+cEPftChQ4eE7AZAC5STk7Nx48a6j2nVqlVhYWHj5AEAAAAAaAb0sQEAAACauSVLlqSkpBirBXtlz5495513XnZ29owZM4LOAgA0uJNPPnn27NkzZsy4++67g87SFFVMMG6Izas0vfdHxUDpKosNmj8QCbxpDST+2948vkGxWOyBBx745S9/2bFjx4RsuGTJkoEDByZkKwBapnjmY7dq1cp8bAAAAACA+KUHHQAAAACAhhWNRo855phE/VI4tBC//vWvP/744+XLl7du3TroLABAYxg+fPgnn3wyduzYHj16/OIXvwg6TkuR8FJx+W5NvKu8n5r31SWphQsXrlu3bt68eQnZbffu3atWrRo7dmxCdgOgZcrJyVmwYEHdx5TPxy4rK0tNNdMFAAAAAKB+/l8qAAAAQDMXjUZzc3ODTgHJ5Iknnnj44YcfeeSRww47LOgsAEDjueGGG0aPHj1ixIhoNBp0lkQqnxpd/ri2Km/jVHyrTK6O86VyVa6ixrfUvUndr8azf427xXN7G0i9d2CfsyXwomq8jfuwWD1GvX9mGtPUqVMHDx78gx/8ICG7vfvuu0VFRXl5eQnZDYCWKScn57PPPisuLq7jmMzMzFAoVFRU1FihAAAAAACSmz42AAAAQHNWXFy8YsUKfWyI3wcffHDFFVdcf/31Q4YMCToLANDY/vjHP55xxhk/+9nPPvzww6Cz7LWUlJSKInGNvdwqjdaUSmorade2YZXGcpXDqn8N1VkFr3ip7h2qXEW9u1V+S+VT7PP+1Xer7fbWeJbKD2q8Y3XEq35YlSuquMN1X1Td29Z4sdXfWPcfhtpuVJyL9eavfLHVYwdi+fLlb7755vXXX5+oDd98881DDjkkJycnURsC0ALl5OSUlpbm5+fXcUyrVq1CodCePXsaKxQAAAAAQHLTxwYAAABozlauXLl7925jtSBOu3btGjZsWJ8+fSZPnhx0FgAgAGlpaU888cRhhx121llnffHFF0HH2Tux/6vGV2s7fm83rLIYq6bKMbWdpcbja9yhylXUu1u9Ufdh/9pOUf0C67iu2tQdr+7H1R/UeFHx3IF4LipW5x3ez8V689e4Eqw777yzT58+p556aqI2XLx48WmnnZao3QBomXr27BkKhTZu3FjHMeZjAwAAAADsFX1sAAAAgOYsEol06tTpyCOPDDoIJIdLL730yy+//Pd///eMjIygswAAwWjTps38+fNLSkqGDBliWiBQt7///e/z58+fMGFCjWPG90FhYeE777zzox/9KCG7AdBidenSpU2bNnX3scPhcCgUKiwsbKxQAAAAAADJTR8bAAAAoDmLRqO5ubmJ+r1waN5mzJjxzDPPzJkzp3v37kFnAQCClJWVtXDhwjVr1lx88cVlZWVBx4GWqPyvsU3/L7PTp0/Pzs4+//zzE7VhNBrds2fPKaeckqgNAWiZUlJSevTosWHDhjqOKZ+PrY8NAAAAABAnfWwAAACA5qy8jx10CkgC77777vjx4ydPnjxo0KCgswAAwevdu/ezzz77/PPPT5gwIegs0BLF/kfQQeqyffv2WbNm/eY3v0lPT0/UnosXLz700EN79uyZqA0BaLF69uxZ93zs8j52UVFRYyUCAAAAAEhu+tgAAAAAzdamTZvy8/P1saFe27dvv+CCCwYNGjR+/PigswAATcUpp5zy5z//edq0aVOnTg06C9AUzZgxIzMzc9SoUQncc9GiRYZjA5AQOTk58fSxzccGAAAAAIhTwj6kGQAAAICmJhKJpKWlnXDCCUEHgSatrKxsxIgRZWVls2fPTk31EZYAwP8aMWLEzp07x4wZ06FDhyuvvDLoOEATsnPnznvuuWfcuHFt27ZN1J579uxZunTpZZddlqgNAWjJcnJyXnvttToOCIfDIX1sAAAAAIC46WMDAAAANFvRaLRPnz4J/NVwaJZuvfXWRYsWvf322506dQo6CwDQ5Fx99dVffPHF6NGjO3ToMHz48KDjAE3F1KlT09LSfv3rXydwz0gksmfPnh/96EcJ3BOAFisnJ2fTpk2lpaVpaWk1HlA+H7uoqKhxcwEAAAAAJCt9bAAAAIBmKxKJ5OXlBZ0CmrQ33nhj8uTJ99xzz/HHHx90FgCgiZo4ceI333xz0UUXtWvX7uyzzw46DhC8L7/88p577rnxxhvbtWuXwG0XL17cq1evnJycBO4JQIvVs2fP4uLizz//PDs7u8YDyvvY5mMDAAAAAMQpNegAAAAAADSI3bt3r1q1Kjc3N+gg0HTl5+dfcMEFQ4cOHT16dNBZAIAmbdq0aeU/NixZsiToLEDwpk2blpmZefXVVyd228WLF5966qmJ3ROAFqv8Az42bNhQ2wHhcDikjw0AAAAAEDd9bAAAAIDmadmyZUVFRfrYUJvi4uILL7zwoIMOevDBB4POAgA0dSkpKX/+858HDRr0k5/8ZNmyZUHHAYK0bdu2++6777e//W1ih2Pv3r176dKlp5xySgL3BKAl69atWzgc3rhxY20HmI8NAAAAALBX9LEBAAAAmqdoNNq1a9dDDz006CDQRF1//fXvvffes88+m9gSBQDQXKWnp8+bN++kk04aNGjQ8uXLg44DBObOO+9s1arV6NGjE7ttJBIpLCw8+eSTE7stAC1WampqdnZ2HfOx09LS0tLSioqKGjEUAAAAAEAS08cGAAAAaJ6i0ejAgQODTgFN1PPPP3/33Xfff//9vXv3DjoLAJA0wuHw008/nZeXd8YZZ7z33ntBxwECsGnTpvvuu++GG25o27ZtYndevHjx4YcffsghhyR2WwBasp49e9YxHzsUCmVmZpqPDQAAAAAQJ31sAAAAgObpnXfeyc3NDToFNEUffvjhyJEjr7rqqosuuijoLABAksnMzHz66af79u07ePDgNWvWBB0HaGzjx4//3ve+d9VVVyV851dfffX0009P+LYAtGQ5OTl197HD4bA+NgAAAABAnPSxAQAAAJqhjz76qKCgIC8vL+gg0OTs2bNn+PDhRx555PTp04POAgAkpTZt2rzwwgtHHHHEoEGD1q9fH3QcoPG88847c+fOnT59emZmZmJ33rFjx/LlywcPHpzYbQFo4XJycjZs2FDHAZmZmUVFRY0VBwAAAAAgueljAwAAADRDkUgkMzOzX79+QQeBJmf06NEbNmx46qmnEt6gAABajrZt2y5cuPCQQw455ZRT/va3vwUdB2gMsVjsmmuuOeWUU37+858nfPNXX301JSXltNNOS/jOALRkPXv2/PTTT2OxWG0HZGZmmo8NAAAAABAnfWwAAACAZigajfbr169Vq1ZBB4Gm5aGHHpo9e/bMmTMPPfTQoLMAAMmtQ4cOr7322ve///1TTjnl/fffDzoO0ODmzJmzfPnyqVOnNsTmr7zyyg9/+MMOHTo0xOYAtFg5OTl79uwpKCio7YBwOKyPDQAAAAAQJ31sAAAAgGYoGo3m5uYGnQKaltWrV19zzTU33XTTueeeG3QWAKA5aNu27Ysvvnjssceefvrpq1atCjoO0IB279598803X3755ccdd1xD7P/qq68OHjy4IXYGoCXLyckJhUIbN26s7YDMzMyioqJGTAQAAAAAkMT0sQEAAACam2+++eaDDz7Qx4bKdu7cOWTIkAEDBkycODHoLABA83HAAQcsWLCgT58+p5566rJly4KOAzSUyZMn79y589Zbb22IzdesWbNp06YzzjijITYHoCXr0aNHenr6hg0bajsgMzPTfGwAAAAAgDjpYwMAAAA0N++++25paak+NlSIxWKXXXbZt99++/jjj6elpQUdBwBoVtq0afP8888ff/zxgwcPfvfdd4OOAyTeqlWrpk6detttt3Xt2rUh9v/rX//asWPH448/viE2B6AlS09P79atWx3zscPhsPnYAAAAAABxSg86AAAAAAAJFolEcnJyunfvHnQQaCqmTp36wgsvvPHGG1lZWUFnAQCaoTZt2rzwwgtDhw798Y9//Pzzz5922mkJP8W8efMSvic0b9FoNCH7lJSUXHbZZccff/zo0aMTsmF1r7zyyqBBg3x0FAANIScnp44+tvnYAAAAAADx08cGAAAAaG6i0WheXl7QKaCpiEajN9988+23337SSScFnQUAaLZatWr13HPPXXbZZWefffbjjz9+3nnnJXb/4cOHJ3ZDIE5Tp0794IMP3nvvvdTU1IbYf8+ePW+99dbdd9/dEJsDQM+ePTds2FDbq/rYAAAAAADx08cGAAAAaFZisdjSpUsnTpwYdBBoErZu3Tp06NAzzzzzuuuuCzoLANDMpaWlzZw588ADDxw+fPhDDz00atSohGw7bNiwYcOGJWQrYG+tX7/+1ltvnTRp0tFHH91Ap/iP//iP7777btCgQQ20PwAtXE5OzsqVK2t7NRwOFxUVNWYeAAAAAIDkpY8NAAAA0KysXbt2+/btubm5QQeB4JWVlf3yl79s3br1Y489lpKSEnQcAKD5S0lJueuuu1q1anX55Zd/9913V199ddCJgH1XVlZ22WWX9e7du0E/3emvf/1r7969DznkkIY7BQAtWU5OjvnYAAAAAAAJoY8NAAAA0KxEo9HWrVv36dMn6CAQvN/97ndvvfXWkiVLOnToEHQWAKClSElJmTJlyoEHHjhmzJiCgoJJkyb5XBhIUpMnT162bNk777yTnt6Av1nxyiuvDB48uOH2B6CFy8nJ+fbbb7dt29a5c+fqr2ZmZn777beNnwoAAAAAIBmlBh0AAAAAgESKRqP9+/fPyMgIOggEbOHChVOmTLn33nv79esXdBYAoMWZMGHCzJkzp0yZcskllxQXFwcdB9hrixYtuvXWW6dPn963b9+GO0t+fv6aNWvOOOOMhjsFAC1cz549Q6HQxo0ba3w1MzOzqKioUQMBAAAAACQtfWwAAACAZiUSieTl5QWdAgL26aefjhw58sILL7zsssuCzgIAtFAjR4586aWX5s+ff/bZZ3/99ddBxwH2QkFBwYgRI84777yrr766QU/0wgsvHHDAAaecckqDngWAluyQQw5JSUmprY8dDocLCwsbORIAAAAAQJLSxwYAAABoPnbs2LF+/frc3Nygg0CQiouLL7jggqysrAcffDDoLABAizZo0KDXX3999erVp59+ekFBQdBxgLiUlpaOGDGibdu2Dz30UEOf64UXXhg8eHCrVq0a+kQAtFiZmZkHH3zwpk2bantVHxsAAAAAIE762AAAAADNRyQSicViAwYMCDoIBOmaa655//33582b16ZNm6CzAAAt3QknnLBkyZIdO3YMHDhw/fr1QccB6nfjjTdGo9Fnnnmmffv2DXqiXbt2LV68+Gc/+1mDngUAsrOzP/vssxpf0scGAAAAAIifPjYAAABA8xGNRo844oiDDz446CAQmLlz5z7wwAMzZ8486qijgs4CABAKhUKHH354JBLp3Llzbm7uokWLgo4D1OWBBx6YOnXq/fff/4Mf/KChz/Xyyy+XlJScffbZDX0iAFq4Hj165Ofn1/hSOBwuKipq5DwAAAAAAElKHxsAAACg+YhGo7m5uUGngMCsW7fuyiuvvPbaa88///ygswAA/K8uXbq8+eabZ5555hlnnHH//fcHHQeo2XPPPfcv//IvkydPvvjiixvhdAsWLBg4cGDnzp0b4VwAtGTZ2dmbNm2q8SXzsQEAAAAA4qePDQAAANBMlJaWLl26VB+bFuvbb78dMmRI7969p0yZEnQWAICqMjMz58yZc9NNN1199dXXXHNNWVlZ0ImA/2PRokUXXHDBP//zP994442NcLrS0tKXX375nHPOaYRzAdDCde/evY752PrYAAAAAABxSg86AAAAAACJsXr16l27duXl5QUdBIIxevToLVu2LFy4MBwOB50FAKAGKSkpEydO7NWr1xVXXJGfn//oo48ecMABQYcCQqFQaMWKFT//+c9/8Ytf3HPPPY1zxrfffnvbtm0/+9nPGud0ALRkPXr0+Oyzz8rKylJTq85uyczMLCoqCiQVAAAAAEDSMR8bAAAAoJmIRCLt27fv3bt30EEgAPfdd9/jjz/+xBNP5OTkBJ0FAKAuF1988auvvvrmm2/m5eV9/PHHQccBQtFodNCgQQMGDJg9e3b1oloDWbBgwVFHHXXkkUc2zukAaMmys7OLi4u3bt1a/aXMzEzzsQEAAAAA4qSPDQAAANBMRKPRAQMGpKWlBR0EGtuyZcuuu+66W265ZfDgwUFnAQCo38knn/zee+9lZmb269fv+eefDzoOtGiLFy8ePHhwXl7ec889Fw6HG+28CxYsOPfccxvtdAC0ZNnZ2aFQKD8/v/pL4XBYHxsAAAAAIE762AAAAADNRDQazc3NDToFNLYdO3YMHz78xBNPvOmmm4LOAgAQrx49erz55pvnnnvukCFDJk+eXFZWFnQiaImeffbZM88885xzzpk/f37r1q0b7bx/+9vf1q9ff8455zTaGQFoybKzs1NSUjZt2lT9pczMzKKiosaPBAAAAACQjPSxAQAAAJqDgoKCTz75RB+bliYWi40aNaqkpGTu3LmGwwMAyaV169aPPvrojBkzJk+ePGjQoM2bNwedCFqWu+66a+jQoZdffvljjz2WkZHRmKd+4YUXDj744AEDBjTmSQFosVq1atW5c+ca52OX97FjsVjjpwIAAAAASDr62AAAAADNQSQSSU1N7d+/f9BBoFHddtttCxcufPLJJzt37hx0FgCAfTFmzJjly5dv3bq1T58+CxYsCDoOtAilpaVjxoy57rrrfve73917772pqY39ixMvvPDCT37yEx8pBUCjyc7O/uyzz6qvh8PhUChkRDYAAAAAQDz0sQEAAACag2g02rt3744dOwYdBBrPokWLbrnllmnTpg0cODDoLAAA++7YY4+NRqM/+clPzj333NGjR+/atavGw1555RWjC2H/bd++/ac//emf//znp59+euLEiY0fYNOmTdFodNiwYY1/agBarOzs7E2bNlVfz8zMDIVChYWFjZ4IAAAAACD56GMDAAAANAeRSCQvLy/oFNB4tmzZMmLEiPPOO+/Xv/510FkAAPZX27ZtZ82a9eSTTz799NP/8A//sGjRoioHbNy48Wc/+9n48eMDiQfNxqpVq0444YQ1a9YsXrx4yJAhgWR46qmnDjzwwNNPPz2QswPQMmVnZ+fn51dfL+9jm48NAAAAABAPfWwAAACApFdcXLxy5crc3Nygg0AjKSkpGTZsWNu2bR966KGgswAAJMzw4cM/+OCDPn36nH766WPGjPnmm28qXpo4cWJpaem0adPuuOOOABNCUnvsscfy8vJycnKWL19+wgknBBXjqaeeOu+888LhcFABAGiBautjl//3yHxsAAAAAIB46GMDAAAAJL0VK1bs3r1bH5uW44Ybbli+fPm8efPat28fdBYAgETq2rXr/PnzH3vssSeffPLoo49+5plnQqHQunXrHn300dLS0lgsdsMNNzz44INBx4Qks2vXrksuuWTkyJGjR4/+61//2qVLl6CSfPLJJytWrBg2bFhQAQBombKzsz/77LNYLFZlvXw+tj42AAAAAEA80oMOAAAAAMD+ikajnTp1OvLII4MOAo1hwYIF06dPnzlzZt++fYPOAgDQIEaMGDF48ODrr79+6NChZ599dklJSVpaWllZWSgUisViv/rVrzp06DB8+PCgY0JyWLly5YUXXrh9+/bnn3/+nHPOCTbM3LlzO3XqdOqppwYbA4CWJjs7u7Cw8IsvvqjyoSTlfeyioqKAcgEAAAAAJBPzsQEAAACSXjQazc3NTUlJCToINLiNGzdecsklV1555ciRI4POAgDQgDp37jxz5sxFixZ9+umnr7zySnFxccVLsVhsxIgRL7/8coDxICmUlJRMnjw5Nzc3Ozt71apVgZexQ6HQU089df7556en++h8ABpVjx49QqHQpk2bqqybjw0AAAAAED//yAcAAACQ9KLR6OjRo4NOAQ1uz549Q4YM6dGjx1133RV0FgCAxvCjH/2oU6dOGRkZlfvYoVAoFov94he/eO2110488cRQKJSfnx+JRALKCIEZNmxYHa++//77o0aNWrt27W233TZ27NjU1OA/rX7dunWrV6/+4x//GHQQAFqc7OzsUCiUn59/3HHHVV4Ph8MhfWwAAAAAgPjoYwMAAAAkt08//TQ/Pz8vLy/oINDgxowZ88knn6xYsaJ169ZBZwEAaAyvvfba4sWLq6+XlZWVlJSceeaZb7311j/+4z9GIpHhw4c3ejoIWG197D179kyZMuX2228/7rjj3nvvve9///uNHKw2c+fO/d73vnfSSScFHQSAFqd169adOnXKz8+vsl4+H7uoqCiIUAAAAAAASUYfGwAAACC5RSKR9PT0448/Pugg0LCeeOKJRx555JlnnunVq1fQWQAAGkMsFpswYUJ6enpJSUn1V0tLSwsLC3/84x9Ho9GK4xs3IARm3rx5tX0Gwauvvnr11Vd//vnnU6ZM+fWvf52WltbI2eowb968oUOHNqlIALQc2dnZtfWxzccGAAAAAIhHatABAAAAANgv0Wi0T58+bdu2DToINKD333//iiuu+O1vf/uLX/wi6CwAAI1k/vz5K1asKCsrq+2AkpKSb7755sc//vGOHTsaMxg0TRs2bLjgggvOOOOMY489du3atWPHjm1Szef3339/7dq1RtkDEJQa+9jhcDikjw0AAAAAEB99bAAAAIDkFo1Gc3Nzg04BDWjXrl3Dhg3r06fP73//+6CzAAA0ni5dutx2220XX3zx8ccf3759+/LFtLS01q1bV7RMi4uLN2/efOuttwYXE4K3ffv2cePGHXXUUStXrlywYMGzzz7bo0ePoENV9dRTT2VnZ/v7OwBB6dGjh/nYAAAAAAD7Iz3oAAAAAADsu927d69ateraa68NOgg0oFGjRu3YseP111/PyMgIOgsAQOM58cQTTzzxxIqn27ZtW79+/X/913+Vf12zZs3GjRuLi4tLS0s3b94cCoW+/fbbAw44ILi8EICioqJZs2bdfPPNZWVlkyZNuvbaa8t7ZU1NWVnZnDlzLrzwwtRUH5oPQDC6d+/+2muvVVnMyMhITU0tKioKJBIAAAAAQHLRxwYAAABIYsuWLSsqKsrLyws6CDSUu+66a/78+S+//HK3bt2CzgIAEKTOnTt37ty58g//paWlGzduXL9+/dy5c2fPnn3ffff99re/DTAhNLJ///d/nzBhwpYtW8aMGXPDDTd06NAh6ES1ev311zdu3HjJJZcEHQSAlqt8PnYsFktJSam8Hg6HzccGAAAAAIiHj14GAAAASGKRSKRr1649e/YMOgg0iHfffXfChAmTJ08eNGhQ0FkAAJqctLS0Xr16nXnmmWeffXYoFFLGpqW58MILTzvttA8//HDKlClNuYwdCoVmzpyZm5vbu3fvoIMA0HJlZ2fv2bNn27ZtVdb1sQEAAAAA4mQ+NgAAAEASi0ajJ554YtApoEFs3759+PDhgwYNGj9+fNBZAACAJmfVqlXHHHNM0Cnq99VXXz3//PMzZswIOggALVp2dnYoFMrPzz/44IMrr2dmZhYVFQUUCgAAAAAgmZiPDQAAAJDE3n333dzc3KBTQOKVlZX90z/9UywWmz17dkpKStBxAACAJicpytihUOiJJ56IxWJDhw4NOggALVqPHj1CoVB+fn6V9czMTPOxAQAAAADiYT42AAAAQLL68MMPCwoK9LFplm699dbFixe//fbbnTp1CjoLAADAvps5c+b5559/4IEHBh0EgBatTZs2HTt2rN7HDofD+tgAAAAAAPEwHxsAAAAgWUWj0czMzH79+gUdBBLs9ddfnzx58owZM44//vigswAAAOy7NWvWLFu2bNSoUUEHAYBQdnZ2jfOxi4qKAskDAAAAAJBc9LEBAAAAklU0Gu3Xr1+rVq2CDgKJtGnTpgsvvHDo0KG/+tWvgs4CAACwX/785z8feuihP7BF7GMAACAASURBVPrRj4IOAgChbt26ff7551UWMzMzzccGAAAAAIiHPjYAAABAsopEInl5eUGngEQqLi6+8MILDzrooAcffDDoLAAAAPulpKTkiSeeGDVqVGqq380AIHhZWVnV+9jhcNh8bAAAAACAePg3PwAAAICk9M0336xZsyY3NzfoIJBI48aNW7Vq1bPPPtuuXbugswAAAOyXBQsWbN269eKLLw46CACEQrX0sc3HBgAAAACIU3rQAQAAAADYF++8805paemAAQOCDgIJM2/evLvvvvvRRx/t3bt30FkAAAD21yOPPHL66afn5OQEHQQAQqFQKCsra/PmzVUWw+FwcXFxIHkAAAAAAJKLPjYAAABAUopGoz179uzevXvQQSAxPvzwwyuuuGLMmDEXXXRR0FkAAAD210cfffTyyy8/88wzQQcBgP+WlZW1bdu24uLijIyMisVwOFxUVBRgKgAAAACAZJEadAAAAAAA9kU0Gs3NzQ06BSTG7t27hw0bdtRRR02dOjXoLAAAAAlwzz339OjR45xzzgk6CAD8t27dusVisYKCgsqLGRkZ+tgAAAAAAPHQxwYAAABIPrFY7N1339XHptm46qqrNm7cOHfu3MzMzKCzAAA0Tym1q3JMHTvEuW2DXEB9gjpvlQwNfRMa9DIb4TvYFL5NjeObb76ZPXv2mDFj0tLSgs4CAP8tKysrFApt3ry58qL52AAAAAAAcUoPOgAAAAAAe23t2rU7duzIy8sLOggkwIMPPvjoo4+++OKLhx56aNBZAACas1gsVv4gJSWl8uMqi5VfrVBbjbbGt9S4Q0Nr/DNWUeNdTbiGu8wq+RvoRIF/mxrN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AAAAEu///b//165du7FjxwYdBADilZWVtWXLlrKysvKnGRkZIfOxAQAAAADiYD42AAAAQHJ477339uzZk5eXF3QQiMuyZcvGjRs3ceLEM844I+gsAAAAifdf//VfjzzyyEMPPXTAAQcEnQUA4pWVlVVcXPzll18efPDBoUrzsYPOBQAAAADQ1JmPDQAAAJAcIpFIp06djjjiiKCDQP127NgxfPjwE0888cYbbww6CwAAQIMYN27cMcccc/HFFwcdBAD2wve+971QKLRly5byp/rYAAAAAABxMh8bAAAAIDlEo9G8vLyUlJSgg0A9YrHYqFGjSkpK5s6dm5aWFnQcAACAxHvxxRdfeumlN954IzXV5+ADkEy6du0aCoUKCgp+8IMfhPSxAQAAAADi5t8FAQAAAJJDNBrNzc0NOgUtxdq1a9euXbtv7508efLChQuffPLJzp07JzYVAABAU1BYWPib3/zmggsuOPXUU4POAgB756CDDsrIyNi6dWv5U31sAAAAAIA46WMDAAAAJIGNGzd+9tlneXl5QQeh+SspKZkyZcpxxx133HHHTZkypaSkZK/evmjRokmTJk2fPn3gwIENlBAAACBYt99+++effz5t2rSggwDAXktJSTn44IMLCgrKn2ZkZIRCoeLi4kBDAQAAAAAkgfSgAwAAAABQv2g0mp6eftxxxwUdhGZu7dq1o0aNWr169cSJE0Oh0MSJE+fPnz9z5szevXvH8/YtW7aMGDHivPPOGzNmTMMGBQAACMjHH3985513Tpw4sXv37kFnAYB90aVLF/OxAQAAAAD2lvnYAAAAAEkgGo326dOnbdu2QQeh2SopKbnjjjv69esXCoVWrFgxfvz48ePHv//++5mZmX379p0wYUK9Q3JKSkqGDRvWrl27hx56qFEiAwAANLZYLHbFFVccfvjh1157bdBZAGAfde3aVR8bAAAAAGBv6WMDAAAAJIFIJJKXlxd0CpqttWvXDhw4cOLEiZMmTYpEIhXTsA8//PDFixffe++999xzzwknnPCf//mfdWwyYcKE5cuXz5s3r3379o2SGgAAoLH927/921tvvfXII4+Ut9cAIBl16dKloKCg/LE+NgAAAABAnPSxAQAAAJq63bt3r1q1Kjc3N+ggNEPVx2KnpaVVPiA1NfXKK69ctWpV+/bt+/fvX9ug7AULFvzhD3+4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/Oall14aOnTo/fff36lTp6ATAUAAOnXqVN7HzsjI+Pbbb4OOAwAAAADQ1OljAwAAADRF0Wj0yCOP7Ny5c9BBaCoKCwtHjx69dOnSyy+//Lrrrmu4MnajSUtLu+666z766KOHH3541KhRI0eOfP311//yl7989913mZmZhYWFoVCoohCuIAEAAOy/zZs333bbbQ8++OCxxx775ptvnnzyyUEnAoDAdO7c+csvvwyFQhkZGcXFxUHHAQAAAABo6vSxAQAAAJqiSCSSl5cXdAqakMzMzEWLFj388MNjx45dtmzZrFmz+vbt2xAnqhiL3dAjst95552LLrro73//e/v27ZcuXbpy5cqysrKysrJQKFRexq6Qnp7epk2bBooBAAC0BFu2bJk6dWr5NOw//elPl156aWpqatChACBInTt3rpiPrY8NAAAAAFAv/74IAAAA0OSUlJQsX748Nzc36CA0LampqVdeeeWqVavat2/fv3//CRMmJPwXJasUsMsr2Yk9RSgUKi4u/ulPf5qbm/vRRx+VlpZ+/fXXoVCopKSkvIxdXdu2bdevX//FF1/4xVAAAGBvrVix4uKLL87JyXn88cdvv/32Dz/88PLLL1fGBgB9bAAAAACAvWI+NgAAAECTs3r16l27duljt2Rz5sz53e9+d+ihhx5xxBG9evU69NBDDz300F69enXq1Onwww9fvHhx+aDsv/zlL4kalF3Ru65cyS5fLP+aqEHZa9euHTVq1OrVq2+44YZYLPbAAw+U97FrK2OHQqH09PTvf//75Y9btWrVsRatW7eu8mpWVlZD9MkBAICmr6ys7KWXXrr77rtfe+2173//+3feeecVV1zRpk2boHMBQFPRuXPnDz74IKSPDQAAAAAQH31sAAAAgCYnEom0b9++d+/eQQchMH379t2wYcOGDRveeuut1NTU4uLi8jp069ate/TocdRRRx1++OHjxo175plnTjjhhGuuueb222/PyMjYnzPWWLdOVAe7XElJyfTp02+55Za+ffuuXLny6KOPDoVCEydOfOGFF+68887ly5fX9qufPXr0eO2113bs2LFjx46dO3dWfN2xY8f27ds//vjjiqd79uyp/MZwONyxY8cDDzyw4muVp1UWE3ixAABAUDZt2jRnzpwHHnggPz//nHPOeeONN0499dSgQwFAk2M+NgAAAADAXtHHBgAAAGhyotFobm5uampq0EEIzNFHH926devdu3eXlJRUXt+9e/f69es//PDDjIyMWCxW/ouS06dPnzlz5ksvvTRgwICA8tavYiz2pEmTxo0bl5aWVr6emZk5dOjQoUOHrlix4q677po7d255/7zye7t27dqnT594zrJnz57Kbe3K5e3yr2vXrq14+tVXX1V5e2217fIH5Tp06FD+wGA9AABoUnbu3Pn000/PmTPnrbfeOvDAA0eOHPkv//IvvXr1CjoXADRRnTp1Ku9jh8NhfWwAAAAAgHrpYwMAAAA0OZFI5JJLLgk6BUFKS0vr16/fkiVLanw1FosVFRWFQqH09PSDDz745ptvnjt37sknn/yb3/zm97///X4Oyk64GsdiV3fcccfNmTNn2rRps2fP/sMf/rBt27aUlJTS0tLU1NTOnTvHea5WrVplZWVlZWXFc3BZWVn1gduVVz799NPVq1dXLFbpxmdkZFQuaVd0tisK2xUPyh+3a9cuzqsAAADiV1hY+PLLL8+ZM+ell14KhULnnHPOs88+e9ZZZ4XD4aCjAUCT1qlTpy+//DIWi5mPDQAAAAAQD31sAAAAgKaloKBgw4YNeXl5QQchYEcfffSyZcvKe9fVZWRklJWVXXXVVZMnT27Xrt2vfvWrhx9+eOzYsX/5y19mzZrVt2/fRk5bm9rGYtfme9/73vjx46+99tqnnnpq+vTpq1evjsViHTt2bIhsqampnTp16tSpU5zH79q1q3yq9s6dOys/KH+8Y8eODRs2VF6v8r1LS0uLs7ld8aABLhoAAJqJHTt2vPLKKwsWLHj55Ze/+uqrU0455U9/+tOQIUP8IA0AcercuXNJSclXX32ljw0AAAAAEA99bAAAAICm5e23305NTe3fv3/QQWhs33333cqVK1esWLFkyZI333xz69atKSkp1Q/7/+zdeXxW9Z0v8CcbIftC2GWL7JssirKoCNJ2HHHqgtT2VltfI1pay+3tovOa3nnZuW21Xq117owzMl1deotUq+Kt2MaligSuQkEEJUBkXwTMHhKyPPePc3maJiEESPJkeb//eF7nOfmd3/mek4SX+Xk+zzc2NjYcDl966aX/8R//MWHChMjOJUuWzJs37/bbb58xY0ZnaJTdyrbYzUpMTLz11ltvvfXW/Pz8Rx99tF+/fu1XZ+ulpqampqZecMEFrRx/4sSJhoHthsntYPvgwYPbtm2LfPXEiRONZogkt5sNbzdMcQea/YEBAIDuZPv27S+99NJLL720Zs2aUCh0+eWX//f//t9vvvnmwYMHR7s0AOhicnJyQqHQsWPH5LEBAAAAAFojJhwOR7sGAAAAAP7iW9/61h//+MfNmzdHuxA6wu7du9euXbtu3br8/PxNmzbV1tYOGjTosssumzVr1vDhw2+66aZG4+Pj4zMzMx9++OEvfvGLzYZv6+vrg0bZo0aNimKj7Ehb7Pvuu681bbFbFg6He0LSuLq6+nTJ7Ua9uIONioqKRjNknJKenp6enh5sZGVlBRuNXrOystLT08/zWwMAAB2gvLz8rbfeysvLW7Vq1Y4dO/r06fOZz3xm4cKFn/70pzMzM6NdHQB0VXv37h02bFh+fv66dev+5//8nwcOHIh2RQAAAAAAnZr+2AAAAACdS35+/syZM6NdBe2lpqbmvffeW7NmzYYNG956663du3fHx8ePHj16zpw5d9999/Tp0yMtr0OhUFZWVlFRUbAdHx9fX1//la985fvf/356evrp5o96o+zzaYt9Oj0hjB0KhRITE/v379+/f/9Wjq+trW02uV1aWhp5LSwsLCoqirytrq5uNElqamokpJ2enh702W4a3g7acQdvExMT2/rSAQCgscrKyrfffvuNN954/fXX33nnndra2gkTJlx//fXXXnvtrFmzfK4QAJy/vn37hvTHBgAAAABoNXlsAAAAgE6kurp648aNS5YsiXYhtKWDBw9u2LDh7bffDmLYVVVV/fv3v+SSS2677bY5c+bMmjUrOTm52QMvvfTSV155JdieMWPG448/PnHixNacceTIkW+88UbQKHv16tUd1ig70hb7e9/73vm3xaZl8fHxOTk5OTk5rT+kuro6ks1uGt4uLS0tLi7evXt3w51Nu3D37t27YfPtpuHtSH47sjMlJaVNLx0AgO6psrJy/fr1QQZ7/fr1J0+eHDVq1FVXXXX33XdfddVVAwYMiHaBANCtJCUlJScny2MDAAAAALSSPDYAAABAJ7Jx48aqqqpZs2ZFuxDOS21t7fbt24MA9po1az766KO4uLgxY8ZMnz791ltvnT179vjx41vT8/myyy5bvXp1nz59fvKTn3zhC184qzbRHdwouz3aYtPmEhMT+/Xr169fv9YfUldXd7rwdtCXu7S0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E7Z8iqZjTneipge2cF2nq7PReRtdV8MCWpiqhUqaLb41Zbem4FYedVaVtHC3Qw2utIUb1ULlLRQfozk2AAAAQDdVW1sbCoW2bt167733Dhky5NJLL3300Uc//vjjZgdbxwYAAAAAiC55bAAAAKDnar92Ig0FrUXaKVHZGRqMhMPhurq6+vr6d9555ytf+UqfPn3+9m//9oknnqisrOz4Ypo6/5sfCdOGw+Fgqsh2pG9MsD+yM7LddJ6mEzadodlTNHtUo7fNHtjynWk6sumckdoavjZ7SOsraXqXmp63hZpbLrg1R51VJU1/Bpo9vIUb1XLlp6tNGBsAAACg2wuHwzU1NeFw+J133vnmN785cODAefPmPfHEE5HcsnVsAAAAAIDOID7aBQAAAABEx9NPP/31r389MzPztddemzt3bvudKHiIrV1zlYsWLbr88svvuuuuBQsWfOlLX7rqqqt69+7dTucKnDx5sunOurq6UChUX1//hz/84eWXX/7qV7+6aNGiYE/7VdLyjW2T297029cwuHu28zQ7YbMaTd7oqNNN0vramh3Z9BRnvJzTTduaGlo4b7P3p+nOMx7Y+itqYcLz+RVu+RvXTp2xV65ceW4HAgDHgetMAAAgAElEQVQAANABSktLm+4Mh8PBEuubb775xhtvLFmy5LOf/ezgwYN/+ctfdr917KVLlz7wwANdqMs3AAAAAID+KgAAAEBPtGnTpvnz55eUlDz//PPXXnttu56rA55jCxw+fPiKK67YuXNnByz45OTkHDt2rJWDb7nllieffDIuLu6MI1sO07ZyQGS7NYHhFmZuuLPZ84b+OlvbKGTb8lmaHXzGGVq4G00jvqerrfVX0ewpzlj56apt4W60fN6Wx5/uwNZc0VlV0sLlNHvIec4ZOk1U+4y/3c8888zixYtbHgMAAABAdA0dOnTv3r2tGRmsEf32t7+94YYb2rWkjl/H/tGPfvTtb3+7Xc8FAAAAANCG9McGAAAAeqIpU6Zs27Zt6dKl11133R133PHQQw+lpaW1x4kij6+196NsK1euXLp0aWpqal5e3rx589rpLBFjx449XR47Pj6+rq6uV69e11577W233Xbdddd99rOfbU0Yu000usMth7db1vr8bafS+to681UQOr+fXt9ZAAAAgM7smmuuOV0eOy4uLhwOx8XFXX311Z/73Oeu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AQAAAAAAnIOSkpI33njjkUceufXWW8ePH5+VlXX11Vc/9thjsbGxy5Yte/3114uKirZs2fLzn//8rrvumjJlSlxcXAuzXXnllfX19TfddNOOHTs+//nPn20x7dooO7KOXVlZ+fTTT2uLDQAAAAD0EDHhcDjaNQAAAAB0ATt27Lj//vuffPLJmJiYmpqaO+644/jx47/73e/uuOOOhx56KC0t7TznX7ly5dKlS1NTU3/2s5+d8Qm248eP/6//9b/+5V/+pba2dunSpd/5zneys7PPs4B2EhMTs2LFiptvvjnahUCP8MwzzyxevNiqLwAAAEB7O3z48J9P2bhx40cffRQOh/v16zd16tTp06fPmDFjxowZAwcOPLfJCwsLP/zww2uuueY8izxy5MjSpUvbYx37scce+/GPf/zuu+/+8Y9/vPjii89zWgAAAACAzk8eGwAAAOAMtm7dev/99//mN7+JjY2tqakJhUIJCQkfffTR4MGDIw+f/fSnP50/f/65zd/wkbiHH344NTW1lQeWlZU99thjDz744MmTJ2+//fZ77733nB/vaz/y2NCR5LEBAAAA2sPJkyc//PDDbdu2bdmyZfPmzRs3bjx06FAoFBo2bNjUqVOnTp06bdq0qVOnDh48ONqVNqOd1rFPnDhx3XXXiWQDAAAAAD2EPDYAAADAaW3evPnBBx/8zW9+ExcXFySxQ6FQQkLCl7/85ccffzx4e54NRs6qLXazglT2j3/844qKir//+7//xje+MWzYsHOYp53IY0NHkscGAAAAOH+1tbU7d+58//33t27dunXr1vfff3/Hjh21tbUJCQmjRo266KKLIhns7OzsaBfbKu20ji2SDQAAAAD0HPLYAAAAAM1Ys2bND37wg1deeSU+Pj6SxA7ExsZu37595MiRDXeeQ4ORc26L3azKysrly5c/8sgjhw4dWrx48be//e3Jkyefz4RtRR4bOpI8NgAAAMDZOnHixPZTPjjl5MmTcXFxI0aMmDRp0vjx44PXMWPG9OrVK9r1nrv2WMcWyQYAAAAAegh5bAAAAIC/8sorr/zzP//z2rVr4+Pja2trG301ISHh5ptvfuqpp5oeeFYNRs6/LXazampqnn/++QcffPDdd9+dPXv2Pffcs3Dhwraa/NzIY0NHkscGAAAAaNn+/fu3b99eUFDwwQcfBBnsvXv3hsPh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urWl7Hqm9IXMPAAAAAAA0Ael+U7hTHFfBgAAAAC6nzw2AECbPfroox2cIRqNfvGLX9y7d2/63WLB789//vMXXnhhTk5OB08KrbdmzZoXXnjh3Xff/fDDDxsbG4uKio5KUFpaGt/zzDPPHDlyZAZL7VJterTCQw/tZp2rq6tfeumlF1544Qc/+EGz/bFzcnKi0eh555137733jhgxIj6eJQ0Zen1UHgAAAAAAIHvuy1x33XVPP/20+zIAAAAA0M3ksQEAMuOqq65asGBBs7m7mNzc3OLi4gULFkybNq07C4NE9fX1a9euXbp06ZIlS1asWLFmzZpoNFpeXj7+Y2eeeeagQYMyXWaXaMcTFVKp7dBn13nr1q1Llix58cUXX3zxxZUrVzY2Nh5zzDGNjY3vvfde0r/TI5FIaWnpnDlzLrzwwtR5Mt6QoVcm5AEAAAAAAFJlyX2ZAwcODB48+Fvf+tZll10WDoe7uQYAAAAA6LPksQEAMuPJJ5+86KKLWvo/Yzk5Oeecc878+fOHDRvWzYVBGtXV1atWrVrxsdWrVwdBUF5ePmnSpIkTJ8YS2v369ct0mR3VwQcpxFNbqQ+u88aNG2PfbrB06dLXXnstFAqNGTMm9tdn8uTJhx122O233/69732vrq4utn84HI5Go1/60pfuuuuu4uLiNDNnpCFD7wjGAwAAAAAAtEnG78tcffXVP/nJT+bPn3/44YffeOON119/fX5+fveUAQAAAAB9mTw2AEB327t37+9+97sFCxY8+uijjY2NSe9GIpGmpqbbbrvtX/7lX3JycjJSIbTSpk2bli9fHstmv/LKK9u2bYtEIscee2y8e/aECRPy8vIyXWbbdMrzE3KqB9V31nndunWxAPazzz773nvvRSKRk046ac3BrQAAIABJREFUaeLEiZMmTZo6derAgQMTd37++efj2fJIJDJixIj777//M5/5TGtO1M0NGXpiHh4AAAAAAKBTZMN9mXXr1s2ePXvOnDlDhw792te+ds011/Tv379LywAAAACAPk4eGwCgm+zYseOpp556/PHHFy9e3NTUNGXKlK1bt77xxhuJkezc3NzBgwc/9thjZ5xxRgZLhfbZuHFjLJu9dOnSl156ae/evQMGDDj55JPj8ezjjz8+FApluswWdfpjEwKrzer169zQ0LBq1apYBvv555/fvn177C/CpEmTKioqJk6cmKaH/N69e0tKSqLRaCgU+n//7//ddtttbe1m0A0NGXpEDB4AAAAAAKCrZcN9mfXr18+aNWvu3LkDBgyYMWPGzTffXFpa2hWVAAAAAADy2AAAXWv79u2//vWvFy5c+Jvf/CYcDldUVJx//vl/8zd/M2TIkLlz515//fXxPHYoFDr//PMfeOCBsrKyzNYMHdfY2LhmzZoVH1u+fPmBAweKi4vHjh0by2afddZZRx55ZMdPtG/fvjTp1tbroqclJFeT9NZ13rt372uvvbZ06dIlS5a8+OKLVVVVQ4YMmTBhwqRJkyZOnNimRvGnnXZaNBp94IEHxo4d275iurQhQ7al3wEAAAAAADIoS+7LbNu27T/+4z9mz57d2Nh49dVX33rrreXl5Z1YCQAAAAAQyGMDAHSR9evXP/HEE48//vhLL73Ur1+/884776KLLjrvvPMS779u2bKlvLy8qakpEonk5OT8+Mc/vu666zJYM3Sd+vr6tWvXxtKqK1asWLNmTTQaLS8vj7fOPuOMMw455JB2zDxmzJjrr7/+K1/5SiQSaV9tXfqQRIwIa9Ab13nPnj2vvvrq4sWLlyxZEvvGgfLy8lgAe9KkSePGjWtfN/iVK1eOHTs2HA53sLxOj75nPPQOAAAAAACQnbLkvkx1dfV99903c+bMPXv2fPGLX/zHf/zHQw89tOPFAAAAAAAx8tgAAJ1px44djz/++IMPPhiLYU+ZMqWysvLCCy9s6f7oaaedtnz58qOPPvqJJ55odytU6HGqq6tXrVoV7569evXqIAhi8exYnHXcuHH9+/c/6DwbNmwYOXJkKBQaPXr0vffee9ZZZ7W1ki5q15yqj2dZe806b9q0acmSJUuWLFm6dOnrr78ejUZHjRpVUVExceLEs88++4gjjujc03VQJ2bgfacAAAAAAABAGtlzX6a2tnbu3LmzZs3asmXL9OnT//mf/3n06NHtLgYAAAAAiJPHBgDoBDt37nziiScWLFjwv//7v/379//rv/7rSy65ZNq0aXl5eekPnDlz5tq1a++5557WRE+ht9q0adPy5ctj2exXXnll27ZtkUjk2GOPjXfPnjBhQrN/m5588smLLrqoqakpHA43Njaed955c+bMGTlyZGtO2g3tmlP1wVBrL1jndevWxQLYS5YsWb16dSQSOemkk2JNsKdMmTJo0KBOqbnrdDAM38e/SgAAAAAAAKD1sue+TF1d3S9+8Yvvfe97f/7zn88777xvf/vb48ePb/dsAAAAAEAgjw0A0BH79u1bvHjxQw899NRTT+Xk5FRUVFRWVl500UUDBgxo5Qx1dXUHzWxDX7Nx48ZYNnvp0qUvv/xybW1tbm7uiSeeOHHixFg8+/jjjw+FQkEQ/NM//dOsWbPq6upiB+bm5ubl5d1xxx1f/vKXI5FImlN0W7vmVH0q3dpD17mxsXHNmjVLly5dvHjx73//+23btg0YMODkk0+ONW8/55xziouLu67yrtDuVHwf/AYBAAAAAACAjsiq+zLRaHTRokW33377ihUrKioqvvOd75xxxhmdMjMAAAAA9EHy2AAAbbZ///5nn3124cKFTz755L59+z796U9feeWVl1xySY9L6EH2a2hoWL169bJly5YtW/bqq6+++eab9fX1AwcOPO2000477bRFixatXLky6R81OTk5o0ePvvfeeydNmpQ6YUbaNafq9THXHrfO9fX1b7zxxuLFi5csWbJkyZLdu3cXFxdPmDChoqJi4sSJLXVo71naFI/vU18cAAAAAAAA0Lmy7b7M4sWL/+Vf/uXll1+eOHHiLbfccv7553f6KQAAAACg15PHBgBoraamphdeeOHBBx987LHHamtrzznnnEsuueSiiy4aOHBgpkuDvmL//v2vv/76smXLli9fvmzZsnXr1sWbYycKh8ONjY2XXXbZrFmzhg4dGh/PYLvmVL0479pT1rm6uvqVV15ZsmTJ0qVLlyxZsn///vLy8lgT7EmTJp1yyik5OTkZrLwrtDIn3+u/LwAAAAAAAKCrZeF9mSVLlsycOfNXv/rVySef/Pd///eXXXZZOBzu0jMCAAAAQG8ijw0AcHBr16596KGHfv7zn7///vunnHLKlVdeOX369PLy8kzXBX3a22+/PWbMmDQ75Obm5ufn/+u//utXvvKV7du3Z0O75lS9LPiaJW2xU8XXec6cOTt37lyyZMkLL7zw1ltvNTU1HXfccWedddakSZPOPvvsww47LNOVdoc0gfle/DUBAAAAAAAA3S8L78usXLnyhz/84fz588eMGfONb3zjb//2byORSPecGgAAAAB6NHlsAIAW7d69++mnn37ooYd+97vfDRs2rLKy8qqrrho3blym6wKCIAgefvjhK6+8MhqNHnTPQw89tLq6urS0tCPtmkOhUOLL2L+kEgfb/W+rXpOA7ZS22N2wzvn5+UccccTZZ59dUVExefLkwYMHt2/CHq3Z5Hwv+3YAAAAAAACAbJCd92XeeuutmTNnLliwYOTIkTfffPO1117br1+/7i8DAAAAAHoQeWwAgGTRaHTx4sXz5s176qmnwuHw5z73uSuuuKKioiIcDme6NOD/3Hzzzf/5n/9ZV1eXNJ6Tk5Obm9vQ0NDY2BgEQSgUampqOvTQQ++7776KiooOnjQ2W/qR9sn4Ixf333//Sy+9dOmll06ePDknJ6dNx3Z6W+xevM5Z5eGHH77xxhtLS0vvuuuu//qv/3r66adnzJhx55139twvBQAAAAAAAMhO2Xlf5v3337/77rt/9rOfFRUV3XDDDX//939fUlKSwXoAAAAAIJvJYwMA/J/169fff//9999//wcffDBx4sQvfvGLn//85zseLAS6woQJE1asWBGJROKR7LKysiOPPHLMmDFHHnnkqFGj1q9ff8899xQXF3ekXXOqxGBwZ4WEYzLbKPvuu+/+2te+FgTBIYcccsUVV1x66aWnnXZaaw7slLbYqXrrOmebzZs3X3/99U899dSoUaPmzZs3efLkTFcEAAAAAADQO2XtfZmtW7f+5Cc/+dGPfhSJRL7yla/ceOONAwcOzHRRAAAAAJB15LEBAIK6urrf/OY3Dz300JNPPllUVFRZWfnlL3/5xBNPzHRdQIuampouvvji8vLyWPQ6ZsCAAbF3O71dc5JYPLhzQ8JxmWrgfPfdd996662xcHtubm59ff3w4cOvuOKKv/u7vxszZkyzh1jnXuN//ud/Jk2a1Mej6QAAAAAAAN0ga+/L7Nix45577rnnnnvq6uq+8IUvfOMb3xgxYkSmiwIAAACALCKPDQD0ae+8886cOXMeeOCBXbt2nXvuuV/4whfOP//8vLy8TNcFtF8XtWtO1KU54SBDDZwT89hxsWD20Ucffdlll1155ZWjRo2Kv2WdAQAAAAAAoJepqamZN2/eD37wg23btk2fPv2b3/zmMccck+miAAAAACAr5GS6AACADGhsbHz66af/4i/+YvTo0Y888siNN974/vvvL1q06KKLLhLGhp5ry5YtF1100fTp0y+88MI33niji0LCQRB0aUg4CIKhQ4c+/vjjjzzyyBNPPDF27Njnnnuui050UPX19UEQvPvuu9/73veOPvro008/ffbs2W+++aZ1BgAAAAAAgN6nsLDwpptuWrdu3c9+9rM//OEPY8aMufjii1evXp3pugAAAAAg8/THBgD6li1btjzwwAM//elPP/jgg6lTp1577bWf+9znIpFIpusCWqumpiYajRYXFyeNr1y5curUqVVVVb/85S8/+9nPdmkNXd23OW7z5s1nn332O++8M2LEiI8++qhLzxUEQV5eXlJ/7CTxSw6FQvfdd9/f/d3fdWk93b/OM2fO/PrXv96l5wIAAAAAAIAeIRqNPv7449/+9rfXrFlz3nnnffOb35wwYUKmiwIAAACAjJHHBgD6ihUrVtx7770PPfRQXl7e9OnTb7rppuOPPz7TRQFt9sYbb5xyyilHHHHEmWeeOWHChNNOO+3kk08uKCgIguDhhx++8cYbS0tL582bN3ny5K6roXtywps3b77++uuffvrpGTNmnHvuufv37++6cwVBsGjRogULFrSUxw6FQuFwuLGxceLEiWPGjHn88cfLysp63zrfeeedhYWFXXcuAAAAAAAA6Fmi0eiiRYv+9V//9dVXX504ceItt9xy/vnnZ7ooAAAAAMgAeWwAoJerrq5esGDBT37yk1WrVo0fP/7aa6+9/PLL+/fvn+m6gHaqqakpKioKgiAcDodCoYaGhnA4PHr06LPOOuu0004bNWrUPffc88tf/vKaa6656667Ynt2rsR4cNdFhRcuXDhjxozCwsJ58+ZNmTKlK06R5O6777711ltT89iRSKShoeHYY4+99NJLr7rqqiOPPDIIgi1btsyYMePJJ5+0zgAAAAAAANAXLFmyZObMmb/61a9iqezPfvazoVAo00UBAAAAQPeRxwYA2unAgQP5+fmZriKdt99++/7777/33nv37t17wQUX3HTTTRMnTsx0UUAnGDhw4K5du5IGI5FINBqNRqMFBQUjR47csGFDYWHhXXfddeWVV3biqVODwZ0eFU6MOs+aNavb2jUn5bHz8vLq6upGjBhx+eWXX3311aNHj049JB5mnjt37tSpUzuxmF68zgAAAAAAANBzLV269M4771y0aNHYsWP/4R/+4bLLLguHw5kuqhnZ/0wLAAAAAD1OTqYLAAB6pPnz548cOfKrX/1qbW1tpmtJVldXt3DhwmnTph133HGPP/74LbfcsmHDhkcf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Ye/evbt37/7kk0+6u7vvuuuuBx988I477vDz83N3aQAAAAB6Urq7AAAAIIQQzc3Nr776anJy8ooVK26++eaCgoJ3332XMDYAAAAAAAAAAAAAAACAAaqurr733nsXL168YMGCEydOOCkkLIRwakhYCBEVFbVr166dO3fu3r17woQJ//jHP5x0oqsym81CiHPnzr344oujRo2aPn36q6++mp+fzzgDcAiDwfDAAw/s3r370qVL7777bkdHx49+9KOoqKhly5bt37+f3nsAAACAR6E/NgAAblZXV/f666//5je/6ezs/PGPf7xu3bqYmBh3FwUAAAAAAAAAAAAAAADAm3z77bdz5swxmUwffvjh3Xff7dRzObtvs6yqqmrmzJlnz56NjY0tKytz6rmEEH5+fj36Y/cgf2SFQvHWW289/PDDTq3H9eO8adOmp59+2qnnAtC/0tLSHTt2/OlPf8rPzx81atS///u/P/TQQ0aj0d11AQAAACCPDQCA+1RXV2/duvXll1/28/P7yU9+smbNmrCwMHcXBQAAAAAAAAAAAAAAAMArvffee2vWrDEYDNu3b581a5bzTuSanHBVVdWqVas++uij7Ozs22+/vb293XnnEkJ8/PHHf/7zn/vKYysUCpVKZbFY0tPTR48evWvXrtDQUN8b540bN2q1WuedC8DAffvtt2+99daf/vSn5ubmu+++Oysr6/bbb1cqle6uCwAAABi+yGMDAOAG58+ff+WVV9544w29Xr9q1aonnnhCp9O5uygAAAAAAAAAAAAAAAAA3q26ujo7O/uDDz7IysravHlzSEiIw09hGw92XlQ4JycnOztbq9Vu37599uzZzjhFDy+//PIzzzxjn8dWq9VdXV2pqalLly596KGHkpKSBOMMwFXa29v/+te/vvnmm1988UVcXNwjjzySlZUVExPj7roAAACA4YjHIwEAfFBHR4e7S+hTfn7+smXLUlNT//a3v23cuPHChQsbNmwgjA0AAAAAAAAAAAAAAABg6KKionbt2rVz587du3dPnDjxs88+c+zxewSDpe7Njj1FdXX1vffeu3jx4gULFpw8edJdIWE/Pz8hRGxs7JNPPnn69OnCwsINGzZIYWzBOANwlYCAgAceeODAgQOnT59esmTJ7373u8TExMWLF+fm5rq7tO/x5Im7AAAAgKOQxwYA+JodO3bE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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bpmn_1 = pm4py.discover_bpmn_inductive(df)\n", + "pm4py.view_bpmn(bpmn_1)" + ] + }, + { + "cell_type": "markdown", + "id": "5ff0740a-816f-44b0-8095-fe346508069f", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "### Discovering a BPMN Model (Internal Filtering)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "69316b78-3ab3-45a7-aa7f-a35eb15296ee", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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eu211zIzMydMmHDppZd64BAAAAAAwEHS3QMAAABwTBUXF0+fPv3JJ5/89NNPe/bs+S//8i8///nPk5KSgs4FAAAAAAAAABy/vv322wcffHD69Ol9+vT5/e9/P2TIkKATAQAAAADUA5FBBwAAAAA4XqxevfrOO+9s167dTTfdlJGRMW/evK+//nrcuHGKewAAAAAAAACAYPXo0ePll1/+4osvUlJSzj333CFDhixZsiToUAAAAAAAdZ3uHgAAAICjq6qq6p133hk+fHjXrl2nTZv2q1/9at26dVOnTh0wYEDQ0QAAAAAAAAAA/p/evXu//fbb8+fPz8/P79Onz7hx43bu3Bl0KAAAAACAukt3DwAAAMDRUlFRMXXq1JNPPvnCCy8sLy9/9dVX165de++997Zu3TroaAAAAAAAAAAAB3bWWWf9/e9/f/bZZ994442uXbtOmjSpoqIi6FAAAAAAAHWR7h4AAACAI6+kpORPf/pTt27dRo8efeKJJ3755Zdz5sy5+OKLo6Kigo4GAAAAAAAAAPADIiIixowZk5WVdfPNN99+++2nn376F198EXQoAAAAAIA6R3cPAAAAwJGUn5//yCOPZGRkjB8/fsiQIVlZWS+//PJJJ50UdC4AAAAAAAAAgEOTmJj4f/7P//nyyy/j4+NPO+202267raCgIOhQAAAAAAB1SERVVVXQGQAAAAAagp07dz7xxBOTJk0qLS29/vrr77zzzrZt2wYdCgAAAAAAAADgx6qqqnrxxRd//etfJyYmPv/88wMGDAg6EQAAAABAnRAZdAAAAACAeq+goGDixImdO3f+n//5n1tvvXXdunWPP/644h4AAAAAAAAAoGGIiIgYM2bM0qVLe/Xqdc4559x9992lpaVBhwIAAAAACF5EVVVV0BkAAAAA6quSkpInn3zyoYceqqiouOuuu2699dbGjRsHHQoAAAAAAAAA4Kioqqp66qmnbr/99szMzBdffDEzMzPoRAAAAAAAQdLdAwAAAHA4KisrX3311bvvvnvjxo3XXnvtgw8+2KpVq6BDHaeqqqpycnL27NmTk5MTHlRWVoZCodzc3PAgFArt2bMnPKioqMjLywuFQjExMQkJCaFQKDY2Nty4FBcXFx8fHwqF4uPj4+LioqKikpOTmzZtmpycnJyc3KhRo0DODgAAAAAAAADqmrVr144ePXrx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AAAAADiSdu/evW7duo0bN65fv37Tpk0bN27csGFDuLKnuLg4PKdp06ZpaWmtW7dOS0tLSUlp27ZtuKwnNTW1TZs2vkQLRFlZ2datW9etW7d27dr169evqyH8i4uKikpLS+vYsWOnTp261hAfHx90dg5NaWnpr371qyeffPKuu+568MEHo6Kigk4EAAAAAHAU6e4BAAAA+CdLliy5/vrrly5descdd/zmN79xF+D+KioqPvvss/fee++9995btGhRKBQ69dRTBw4cOGDAgP79+3v+5LG3a9euFd9ZuXJluNZn7969oVAoNTW1R48e3bp1C1f5dO/evX379kHnBQAAAAAAgB9WXFycnZ29du3aNWvWrK0hJycnPKF58+Zt27bt0KFD27Zt27Zt27Fjx/CgQ4cOCQkJwYbnkIQ7faoLfVatWrVixYp169ZVVFRERES0b9++usenW7duXbt27dixozqYuu/Pf/7zuHHjBgwY8MorrzRp0iToOAAAAAAAR4vuHgAAAID/v7Kyst///vcPPfRQ3759n3322a5duwadqG7Jy8t79913X3vttdmzZ+fk5HTo0OG8884777zzBg8e3LRp06DT8U8qKyvXrVuXlZX17bffLl++fPny5cuWLdu5c2coFEpKSurWrVtmZmZmZmb37t0zMzM7d+4cHR0ddGQAAAAAAACOU5WVlZs2barZ0RMebNmyJXyve/PmzTNq6NSpU8eOHTt06NC4ceOgs3MUlZaWhkt8qmVlZW3fvj0UCsXExHTp0qVnz54nnXRSr169evXqlZGREXReDmDx4sUjR45s2bLl22+/3a5du6DjAAAAAAAcFbp7AAAAAEKhUOjrr7++7rrrvv322wceeOD222/3jL5qmzdvfvPNN1977bUPP/ywoqLirLPOGjly5LBhw7p37x50NA7Nzp07ly1bFq7yCXf6rFu3rqqqKjo6ukuXLtVVPt27d+/evXtiYmLQeQEAAAAAAGhoioqKsrKyVq5cWbOjZ926daWlpaFQKC4uLuOfderUKSMjIzk5Oejg1BU5OTkrV65csWLFsmXLli5dumTJkrVr11ZVVTVp0iRc4lPd5uNjU0ds3rx5+PDhO3bseOutt37yk58EHQcAAAAA4MjT3QMAAAAc78rKyh577LH777+/b9++zzzzTLdu3YJOVCds3bp15syZ06dP//jjj+Pj44cNGzZy5MgLL7ywefPmQUfjiNm7d29WVtby5curO31WrFhRUlISCoU6dOgQLvEJt/n06NEjJSUl6LwAAAAAAADUJ1u3bl22bFn4C6nly5dnZWWFny0RFRXVtm3b6mqeamlpaUFHpv7Jz8//+uuvv/7666+++io8yM3NDYVC6enpvXr1Ovnkk/v27XvqqaempqYGnfT4lZ+fP2rUqIULF86YMeP8888POg4AAAAAwBGmuwcAAAA4rn311VfXXXddVlbW/ffff8cdd0RGRgadKGC7du2aNWvWtGnT5s2b17hx45EjR15++eVDhw6Ni4sLOhrHQkVFxdq1a5ctWxa+i3rp0qVZWVk5OTmhUKh58+bhEp9u3br16NGje/fu6enp/pEBAAAAAAAgFAqVlpauXr06/B1TVlZWeBCuUElOTu7WrVtmZma3bt3Cg86dO8fExAQdmQYrOzu7us3nH//4x6pVq6qqqjp27Hjqd/r06ZOYmBh0zONLaWnpDTfcMG3atP/7f//vjTfeGHQcAAAAAIAjSXcPAAAAcJwqLy+fMGHCxIkTzzrrrGeeeSYjIyPoREEqKyt75513nnvuuXfeeadRo0bDhw//2c9+dsEFF8THxwcdjeBt2bJl2bJly5cvD3f6LF++fNOmTaFQKD4+vlu3bt27d8/MzMzMzOzevXvXrl1jY2ODzgsAAAAAAMDRlZOTs3r16jVr1ixduvTbb78ND4qLi0OhUJs2bU488cROnTr16NEjPMjIyIiIiAg6MsevvLy8JUuWLF68eOHChQsWLNi6dWtUVFS3bt1O+U7fvn19y3kMVFVV3XPPPRMnTvz3f//3++67L+g4AAAAAABHjO4eAAAA4Hi0du3aq666asmSJY8++ujNN998PN8q+s033zz77LMvvfTSzp07Bw0adO2111588cVJSUlB56JOy83NzcrK+vbbb6sLfdasWVNRUREVFZWRkVFd5dOjR4/u3bsnJycHnRcAAAAAAI6dUaNGzZw5M+gU0HBMnz798ssvDzoFDcf69esXLVr06aefLlq0aPHixfn5+Y0bNz799NMHDBgwcODA0047zRNujqqnnnrqlltuue6665588slGjRoFHQcAAAAA4AjQ3QMAAAAcd6ZPnz527NiOHTtOmzYtMzMz6DjBKCwsfPnllydPnvz5559nZGRcc80111xzTXp6etC5qK9KS0uzsrKWL1++fPnycKdPVlZWUVFRKBRKS0vLzMzs1q1buMonMzMzLS0t6LwAAAAAAHC0jBo1auPGjb/61a+CDgJH0bZt2yIjI1u2bHm0n5JyxRVX6O7h6KmoqFi+fPmnn346b968+fPnZ2dnx8bG9u3bd+DAgQMGDDjzzDMTExODztgAvfXWWz/72c8GDBgwc+bMxo0bBx0HAAAAAODH0t0DAAAAHEcKCwv/9V//9bnnnvvlL3/5yCOPxMXFBZ0oAMuWLXvqqaeef/754uLiUaNG3XDDDQMHDjza99RyHKqsrMzOzg5X+WRlZYULfXbv3h0KhZKTk7t37961a9du3bp17dq1a9euJ5xwgpsyAQAAAABoGEaNGhUKhV555ZWgg0BDEBERobuHY2bLli0fffTRRx99tHDhwi+++CIyMvLkk0/u169f//79Bw8e3Lx586ADNhyLFi06//zze/bs+eabbyYlJQUdBwAAAADgR9HdAwAAABwvli5d+rOf/Wzr1q3PPvvsiBEjgo5zrJWXl//lL3958skn586dm5GRMXbs2Ouvv75ly5ZB5+L4sm3btmXLli1fvnzZsmUrVqxYsWLFunXrKioqIiIi2rdvHy7x6datW7du3U444YT09PSoqKigIwMAAAAAwKHR3QNHkO4egrJly5b58+fPnz9/3rx53377bWRkZJ8+fYYNGzZs2LDTTjvN95g/3rJly4YMGZKWljZ79uwWLVoEHQcAAAAA4PDp7gEAAAAavqqqqj/+8Y933XXXGWecMWXKlLZt2wad6JjKz89/+umnH3/88Y0bNw4fPnzcuHHnnXdeZGRk0LkgFAqFSkpKVq9enZWVtWLFipUrV2ZlZWVlZe3YsSMUCsXExHTp0iVc6NO5c+fOnTt36dKlffv2boQFAAAAAKAu090DR5DuHuqCnTt3zp8///333589e3Z2dnazZs2GDBkS7vFJS0sLOl09tnbt2sGDBycnJ8+ZM6dVq1ZBxwEAAAAAOEy6ewAAAIAGbs+ePaNHj37vvfcmTJjwm9/85rjqrNmwYcOkSZMmT55cUVFx/fXXjx8/vlOnTkGHgh+Wk5OzYsWKFStWhDt9Vq1atXr16tzc3FAoFBMTk56e3qVLl+o2n86dO2dkZMTGxgadGgAAAAAAQiHdPXBE6e6hrlmzZs0HH3zwwQcfzJ49Oz8/v1OnThdeeOGIESPOOussX1kehuzs7MGDB8fFxX3wwQdt2rQJOg4AAAAAwOHQ3QMAAAA0ZEuWLPnpT39aUlIyY8aMM844I+g4x84333zz8MMPz5gxo1WrVrfeeuvYsWObNWsWdCj4UXbu3Bku8Vm9enV4sGrVqu3bt4dCocjIyPbt24erfNLT0zt27Jienp6ent6mTZuIiIiggwMAAAAAcHzR3QNHkO4e6qyioqL58+fPnj179uzZy5cvT0xMPOeccy644IKLLrooNTU16HT1yaZNm4YMGVJeXv7Xv/61Q4cOQccBAAAAADhkunsAAACABmvatGm/+MUv+vTpM2PGjNatWwcd5xhZvHjxQw899Nprr5144om33377lVdeGRMTE3QoOFry8/NrtvmsXr06Ozt7w4YNZWVloVAoNja2Q4cO4Sqfjh07duzYMSMjo2PHjmlpaVFRUUFnBwAAAACgYdLdA0eQ7h7qhezs7Pfee2/27Nlz5swpLi7u16/fJZdccskll6SnpwcdrX7Yvn370KFD9+zZ88EHH5xwwglBxwEAAAAAODS6ewAAAIAGqKKi4t577/3P//zPG2+88YknnoiOjg460bHw8ccfP/jgg+++++4pp5xy3333XXTRRREREUGHggBUVFRs3rw5+zvr1q0Lv65fv760tDQUCkVHR7dv3z49Pb1du3bt27dv06ZN+/bt27Ztm5aW1rp1a//gAAAAAADwY+jugSNIdw/1S3Fx8fvvv//WW2+99tpr27dv79Gjx6hRo0aMGHHKKacEHa2uy8nJOf/889euXfv+++/36tUr6DgAAAAAAIdAdw8AAADQ0OzYseOKK6749NNP//SnP/385z8POs6xsHDhwvvvv/9vf/tbv3797rvvvmHDhgWdCOqiysrKLVu21Oz02bRp0/r16zdv3rx79+7wnOjo6DZt2rRr165t27Zt27Zt165dWlpa+/bt09LS2rZtGxsbG+gZAAAAAABQD+jugSNIdw/1VEVFxSeffPLKK6/MnDlz8+bNnTp1uvDCC0eNGtWvXz+PEvk+eXl5F1544fLly99///3evXsHHQcAAAAA4GDp7gEAAAAalM8///zSSy+NioqaNWvWySefHHSco+4f//jHfffd98477wwaNOiBBx4YNGhQ0ImgXioqKtq4ceOWLVvCVT6bNm3auHHj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mam7B44g3T0cz7Zu3fr8888/9dRT69evP+ecc2666aaLL764+k8dx4/t27cPGjSosrJy3rx5DfXBTgAAAABAvaa7BwAAAKh/Hnzwwfvvv/+OO+74/e9/X/083obkjTfe+Ld/+7edO3fef//948ePPw7vvQMAAAAAgGMgNze3srIyPK7ZCrRnz57woLy8PD8/Pzyu2ShUs7eoepGabURlZWUFBQXhcc3yoJpNRjk5OeF7OGs2CtVsQdq7d29JScmPOcHqxp/q/qCadT/V5UHVVUQ1m4Oqe4gaN24cGxsb+ud6oOqyoerqouqmoZq9RdU1QzVLi+qpJUuW9O7du+ae6OjosrKyE0444YYbbrjuuutSUlLC+w+mu6eWcqXqO3vDc2re6Lv/UbXcBlxz8v7TDhjg8G4qrl7q+w6PiKhztyvXHulHBj6kw79vci37w4O6dkkPUu0fy+87RHcPx7nKysq//e1vkydPnjVrVkpKypgxY8aNG9exY8egcx1TW7ZsGTBgQGJi4ocfflj9JxkAAAAAgDqizn0ZBgAAAFCLqqqq2267bdKkSU888cTNN98cdJwjb82aNf/6r//69ttvX3nllY8++mhaWlrQiQAAAAAAgOAdfLVQzQqh6qOKi4uLiopC/9wTVN06VF0SVN0cdPCLHKpGjRolJSWFx02bNg0XeRzZjqHDWORgfP7553379t1/f0RERGRkZERExLnnnnvdddddfPHFV111VegguntqdvTsP65lcMBFalm/lpkHOe0wTqQu278UKajFv29yLfvr3dWu6fA+b7p7oNqaNWsmT5787LPP7tmzZ+TIkbfddlu/fv2CDnXsZGdn9+/fPyMj47333gvXBQIAAAAA1BH172sbAAAA4LhVUVExduzYF1988YUXXrjiiiuCjnOElZeX//d///cDDzyQkZHxxBNPDBo0KOhEAAAAAAAAP2D/AqCysrKCgoLwT6trhgoKCsrKykI1OoYqKytzc3PDP83Ly6uoqAiFQkVFRcXFxaF/riXKyckJ3+xaWFhYWloa+qGOocOwfwFQdHR0YmJi+KfNmjULn+miRYtqWaRRo0bl5eXNmjVr1apVx44d58yZU8vk2rt7Dq955yDfrvb9h9oI8+PbZALpoDmqb3pIix/SL7e+9PUcfCmP7h44DCUlJa+++uqkSZP+/ve/n3nmmXfcccfIkSPD/xZr8FasWHHWWWeddNJJb731Vvjf1wAAAAAAdUH9+AoHAAAAoLS09Oqrr37nnXdmzpx5/vnnBx3nCFu8ePGNN964bNmye++998477ww/WhYAAAAAAIBDVVxcXFRUFAqFKioq8vLywjsPu2OoepEtW7a8+eabtb91ZGRkZWVlRERESkrK66+/ftpppx1M4B8s0PmRNS61zPzxBTG6e37k4sdtd88hfYB198ABffTRR3/84x9nzZqVnp5+66233nTTTfHx8UGHOuoWLVo0ePDgc889d8aMGVFRUUHHAQAAAAAIhXT3AAAAAPVCYWHhT3/6008//fStt97q379/0HGOpKKiot/97nePPvroGWecMXny5MzMzKATAQAAAAAAsK/3339/6NChB/xRVFRUVVVVZGTkWWedddFFF/31r3+NjY195ZVXDnLlo9rdU/u02lcODyIiIkKhUPWe8Jx9NvfxfadTy4Lf9xb7H7X/Igc8r+9Lsv8i1Xtqjmu++/5Lfd/6Bwx8wAD7X5wDJjzgSe1zcQ644Pddn4M5nR/M/4OH759z/xiHVG+kuwdqsWrVqkmTJv3v//5vUlLSuHHjbr311hYtWgQd6uj68MMPhw8ffu211z755JNBZwEAAAAACIVCocigAwAAAAD8gD179gwdOvTLL7/88MMPG1hxz5w5c3r06DF58uSnnnpq/vz5insAAAAAAADqprKysn32REdHR0ZGRkdHDx069Lnnntu5c+ff/va38ePHx8bGBpJwf+EWle9r2DnIY6uqqmpWuoTVLHap3lk93n+d/Rfcf4UDvsUBj9pnc//k+yyyz/59umb2eT3gITX3f9/6B8xQe4CDOara/ld4//n7/9Z+8MrsM7mWK3yQV+P7Pgk11wkd7scS2F+XLl0ef/zx7OzscePGTZo0KT09fezYsStXrgw611F09tlnT58+/emnn7733nuDzgIAAAAAEArp7gEAAADquK1btw4aNGjjxo3z58//yU9+EnScIyY/P//mm28eNmxY3759v/3221/84hfuTwUAAAAAAKizqrt7GjVqFBERER8ff8kll0yfPj0nJ+edd94ZM2ZMcnLyMQsTLkz5wWk/WDFT+7HVrzX3hA6xdaX6qP0XPKCI7xzwqINZ5IA5a16xgzy8lv37hDyYRfYJsP+xB5+wlgVrvz61/wb3bzLaP2rtJ34wsUM/7mMJfJ+UlJQJEyZkZ2dPmDDh3Xff7dGjx9VXX7106dKgcx0tI0eOfO655x5++OFHHnkk6CwAAAAAALp7AAAAgDosOzu7X79+JSUlH330Ubdu3YKOc8QsXLiwT58+M2bMeP7552fMmNG6deugEwEAAAAAAFCb0tLSUCiUlJR01VVXvf7667t3754+ffpll13WuHHjoKP9v0aVo12GEn6Lg6xoOTxVNRz2Igefs7pB5pDO64iEDMT+VyZ8BQ7yk1N/TxyOE0lJSb/+9a9Xr179zDPPLFmy5KSTTrr66qtXrFgRdK6j4uc///ljjz121113Pfvss0FnAQAAAACOd7p7AAAAgDoqOzv77LPPTkpKWrBgQfv27YOOc2QUFRXdfffdAwYM6Nq16zfffDN69OigEwEAAAAAAPDDMjMzZ8+evWvXrueff37EiBFxcXFBJ/p/jmCjSi0VNuEf1f3SlvqS89j7visT3nm0i5+AYyY6OnrMmDFLlix57bXXvvnmm8zMzMsvv3zVqlVB5zryxo8ff999940dO/add94JOgsAAAAAcFzT3QMAAADURevXrx88eHBycvIHH3zQqlWroOMcGQsXLjzppJMmT578wgsvvP3222lpaUEnAgAAAAAA4KD07NnzvPPOi46OPgbvVbNIZf8ynVrqdQ7o4Ocf5MzaS14OrwJm/6N+fJVMzRX2uaSHsf4B5x/8IrX/Tg8j4Q8uWIuaK9d+Xt+38sFcjR/8nOhXgqMqIiJixIgR//jHP6ZNm/bll1/26NFjzJgxa9euDTrXEfa73/1uzJgxo0aN+vvf/x50FgAAAADg+KW7BwAAAKhz1q9ff/bZZyclJX3wwQctW7YMOs4RUF5e/tvf/nbgwIHdunX75ptvrr766qATAQAAAAAAELCIiIjqlpZ9ik7CzSyH3W8SUcP3da/UfOv9Zx6wPqbmtAOGP2DT0D6T91+8+qjqs675LvvM/L5FaskZ3rnPJa3OGd5fvVlz2f3zfN/OA163fRLu/zutfULtV/JgFjzIK7P/uRzw43dIV+P7Lk4tlw44GiIjI0eNGrV06dKnn376448/7t69+9ixY7ds2RJ0riMmIiLiqaeeGjBgwMiRI1euXBl0HAAAAADgOKW7BwAAAKhbGl5xT3Z29qBBgx599NH/+q//evPNN9PS0oJOBAAAAAAAQPCq/tkBf3rAow5p5YN56/1n7r+z5p4DHlvLWRxw5gGP2ud9a9ms/brVsvj+1/DgA9Sy82AS1n6ytSQMfc/v9AcX/MErU/tlrGWFgzmLgzkF4BiIjo4eM2bMsmXLJk2a9Pbbb3fp0mX8+PHbtm0LOteRER0d/eqrr3bq1On888/fvn170HEAAAAAgOOR7h4AAACgDml4xT0vvPBCr169cnNzP/vss/Hjx9fylEsAAAAAAAAAgKMhOjr6pptuWrly5X/8x39MnTr1hBNOePDBB4uKioLOdQQ0btz4zTffjIiIGDFiRGFhYdBxAAAAAIDjju4eAAAAoK7YsGFDQyruyc3Nvfrqq6+99trrr7/+888/79WrV9CJAAAAAAAAAL5X+EkknkcCDVh8fPxtt922Zs2au+66a+LEiZmZmTNmzKiqqgo614/VqlWrd999d+3atT/72c8qKiqCjgMAAAAAHF909wAAAAB1wvr16wcOHNhginsWLlzYq1evefPmzZkz5/HHH4+NjQ06EQAAAAAAAEBtqr4TdBDg6EpMTLz33ntXrFhx3nnnXXXVVaeffvonn3wSdKgfq0uXLrNmzfrggw9+9atfBZ0FAAAAADi+6O4BAAAAgrdt27YhQ4Y0jOKeqqqqRx55ZNCgQb179/7qq6+GDBkSdCIAAAAAAAAAgH/Spk2bP/3pT5999llsbGy/fv3GjBmzZcuWoEP9KP37958yZcr//M//PPLII0FnAQAAAACOI7p7AAAAgIDl5OQMGzYsFArNmTOnvhf35Obmjho16p577rn33ntff/31Fi1aBJ0IAAAAAAAAAODA+vTpM3/+/Ndff/2jjz464YQTJkyYUFxcHHSow3fppZc+9thjd99996uvvhp0FgAAAADgeKG7BwAAAAhSUVHRyJEjd+zYMWfOnNTU1KDj/Ciff/75T37yk08//XTu3LkTJkyIjPQXLwAAAAAAAABAXTdixIilS5f+9re/feyxx7p27frCCy9UVVUFHeowjR8//l/+5V9Gjx792WefBZ0FAAAAADgu+F/IAAAAgMCUlZVddtlly5YtmzNnTnp6etBxDl9VVdUf/vCHM888MzMz88svv+zXr1/QiQAAAAAAAAAADlZ8fPxdd921bNmygQMHXnvtteecc84333wTdKjD9N///d+DBw+++OKLN2zYEHQWAAAAAKDh090DAAAABKOysnLMmDELFix49913e/ToEXScw1dQUHDFFVfceeed99xzz5tvvtmiRYugEwEAAAAAAAAAHLK2bdu++OKLn3zyyd69e/v06fOb3/xm7969QYc6ZFFRUS+//HKLFi0uuuiiwsLCoOMAAAAAAA2c7h4AAAAgGLfddtusWbNmzpz5//1//1/QWQ7fypUrzzjjjA8//HD27NkTJkyIjPSXLQAAAAAAAABAPXbaaaf9/e9/f/rppydPntyzZ89333036ESHLCkp6c0339y0adPo0aMrKyuDjgMAAAAANGT+dzIAAAAgAPfcc88TTzzx0ksvDR06NOgsh++tt9469dRTY2JiPv/888GDBwcdBwAAAAAAAADgCIiIiBgzZsw333zTt2/f4cOHX3HFFVu2bAk61KFJT0+fNWvWO++8c9999wWdBQAAAABoyHT3AAAAAMfaY4899vDDDz/zzDOXXXZZ0FkOU1VV1cSJEy+66KIRI0Z89NFHHTt2DDoRAAAAAAAAAMCR1KZNm+nTp7/zzjuLFi068cQT//znPwed6ND069fvT3/608MPP/z8888HnQUAAAAAaLB09wAAAADH1CuvvHLHHXc8+uij11xzTdBZDlNeXt4ll1zywAMPPPXUUy+88EJ8fHzQiQAAAAAAAAAAjorzzz9/6dKlN9100y9+8Ythw4atX78+6ESH4JprrrnrrrvGjh27YMGCoLMAAAAAAA2T7h4AAADg2Fm4cOGYMWNuueWW2267Legsh2nlypWnnnrq559/Pnfu3BtvvDHoOAAAAAAAAAAAR1d8fPzDDz+8YMGC9evXZ2ZmTpw4sbKyMuhQB+uhhx4aPnz4T3/607Vr1wadBQAAAABogHT3AAAAAMfIypUrL7744vPOO++xxx4LOsthmjNnzqmnntq8efPPP//89NNPDzoOAAAAAAAAAMAxcsYZZ3zxxRe33HLLfffdN3To0PXr1wed6KBERka++OKL7dq1u+SSS/bu3Rt0HAAAAACgodHdAwAAABwLu3btuvDCCzt27PjSSy9FRUUFHedwTJ48+YILLhg2bNhf//rX1q1bBx0HAAAAAAAAAOCYiouLmzhx4scff7x58+bevXtPmTIl6EQHJSEh4bXXXtu8efPo0aOrqqqCjgMAAAAANCi6ewAAAICjrri4eOTIkaWlpW+//XZCQkLQcQ5ZeXn5LbfccvPNN997771Tp06Nj48POhEAAAAAAAAAQDD69u37xRdfjB079pprrrnssst27twZdKIf1rFjx2nTpr3xxhuPPvpo0FkAAAAAgAZFdw8AAABwdFVVVd1www1Lly594403UlNTg45zyHbt2jV06NDnn39+1qxZEyZMCDoOAAAAAAAAAEDA4uLiHn744ffee+/TTz/t3bv37Nmzg070w84555yJEyfefffd7777btBZAAAAAICGQ3cPAAAAcHTdcccdr7zyyquvvtqrV6+gsxyyZcuWnXrqqWvXrv34448vvvjioOMAAAAAAAAAANQVQ4YMWbJkycCBA4cPH/7rX/+6tLQ06EQ/4LbbbrvmmmuuvvrqVatWBZ0FAAAAAGggIqqqqoLOAAAAADRYTz755C9/+csXX3zx6quvDjrLIZs3b94ll1zSvXv3119/vVWrVkHHAQAAAAAAoB4YNWrUzJkzg04BDcf06dMvv/zyoFMAP+CVV1658cYbu3TpMm3atC5dugQdpzZFRUX9+/cvLy//+OOPExISgo4DAAAAANR7unsAAACAo2Xu3LlDhw6977777r///qCzHLJXXnllzJgxw4cPnzJlSnx8fNBxAAAAAAAAqB8++eSTDRs2BJ0CGo4zzzyzXbt2QacAflh2dvaVV165dOnSJ598so4/4WndunV9+/Y9++yzp02bFhEREXQcAAAAAKB+090DAAAAHBXh+5z69+//6quv1rv7nB5//PHbbrvtlltu+cMf/hAZGRl0HAAAAAAAGoIZM2YEHQHqK80dAFAvlJSU3HnnnZMmTbruuuueeOKJuvyopI8++mjw4MG/+93v7r777qCzAAAAAAD1m+4eAAAA4MgrLCzs169fKBRauHBhQkJC0HEOQXl5+a233vq///u/jz/++C9/+cug4wAAAAAA0HDUu6Z7qDumT59++eWXB50CADgob7zxxnXXXde+ffuZM2d26dIl6Djf6/HHH//1r3/97rvvnnvuuUFnAQAAAADqsUZBBwAAAAAamqqqqmuvvXbTpk2LFi2qX8U9eXl5/z/27jwuqnpx4/gZGLYZZoZFVkGRVDYXFA1Dyw1NcysXXPKmaatZ2m2x8lba7Ve3xbL1lqalt0XU3E1N1ExFUwE3EDdURBAQgQEGhhlmfn+c29wJEBGBw/J5/zGv75w553uec2Rg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1YaGhjXNthYWFubm5hYWFqJjAgDQXvz444+LFi3q3bv3t99+a29vLzoOnsBLL730559/xsTEiA7SCMrKygYMGLB06dKVK1eKzgIAAAAAAAC0bnT3AAAAAADQtDw8PMrKyvbv3y86SLOqqqrq1q3bf//734ULF9Yd9/f3j42NzcrKEhUMeFJXrlx57bXXDh8+/M4776xatUpbW1t0IgBAuxMXF/f666/n5+dPnz79iy++6Nevn+hELUhlZaVKpUpNTa3p68nIyKioqOjevbuDg4Ojo6ODg4Otre3gwYNFx0RLp9FoPv7448DAQIlEsnr16hUrVlDwBABoFLt27fL09BSdAmhubf7daAqF4oMPPti3b59MJluzZs348eNFJwLqo6SkJCsrK+0vp06dqmm/tbCwsP+Lubm5lpaW6KQAALRZV65cWbBgwcGDB1euXPnee+/p6OiIToTHsn79+k8++eTSpUuigzSOFStW7N69Oz8/nzMQAAAAAAAAaAi6ewAAAAAAaEKXL18eMGBAVFTUyy+/LDpLs8rNzTUzM0tJSXFwcKg7PmbMGKlU+vnnn4sKBjyR/fv3v/baa926ddu+fbudnZ3oOACAdufOnTsBAQGff/65h4fH/PnzV6xYUVJS8tlnn7366quio4lUWFhYe21hYmJicXGxnp6etbW1TCarubZwxIgR1O3h8alUqgULFmRmZsrlcolEIpfLra2tt27dam5uLjoaAKDVq+nu4Z05aD/a1Tn/22+/rVu3bu/evTKZLDAwcMKECaITAQ1y69atzMzM2pfbp0+frqysNDAwsLKyqq3y4eU2AACNrrq6+rPPPvP397ezs/v2229pom8Vjhw5MmHChIKCAiMjI9FZGsGZM2fMzMyio6OnTZsmOgsAAAAAAADQivGXVAAAAAAAmtCOHTs6d+48Y8YM0UGam1Kp1NHRuediV7VanZaWNnbsWFGpgMd39+7dpUuXTp06ddKkSampqRT3AACan0KhqHmz/hdffPHTTz/NnDkzKytr0aJFXl5ebm5uBQUFogM2n6tXr0ZHR7/77rtTpkzp2bOnsbHxiy++GB0dbWRk9NFHHymVSrVanZqaGhIS4uXlZWFhwZWEeEwajSY4OLjmJ720tDR/f39/f/+TJ0927NhRKpUGBARUVFSIzggAAIAWauTIkTExMQqFomPHjhMnTpww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+pX7J3zgZn+r7kKNW/JCcU+NpruHa+d/9AYNeXGBRtezZ8/w8PB9+/apVCorK6uIiAi+QUDTMTAwqFvlc+3atQMHDrz55psdO3aMjIz08PB4+umnBw8ePGvWrKCgoIMHDxYXF4uODADAAzz33HPJyclaWlqOjo6HDx8WHad9sba2rq6uzsrKEh2k8c2dO3fHjh2lpaWigwAAAAAAAACtBt09AAAAAAA0mp07d/bq1WvChAmigwiTnZ2tq6trZmZWd/D48eNOTk6iIqF9On/+vLOz8y+//PLzzz+/++67reViLQBAa6dWqwMCAlxcXExNTbOysnx8fBo44QOv0G7gnBKJxMDAYOPGjfHx8SUlJe+9916nTp3ef//9L7/8cu/evampqX/88YdarVar1efPnz9+/PjevXufe+65hi8K1HX69Omnn356xowZ33///d27d59oX5VKJZPJ5HJ5YGBgUlKSubl5A8M00QPNxMQkLi5u48aNoaGhjo6OSqWy4XMCANqhuk9MDe92aaJ2mPpp6kaSltZ48jj3fFNkbmn3Ax7HlClTTp48uWjRojfeeGPSpEnnzp0TnQhoF3r27Dlp0qS33357z549586dKyoq2rdv38KFC6uqqj7//PPJkyf37Nlz6NChnp6eH3300ZEjR0pKSkRHBgDg/xk8eHBSUtLkyZNdXV03bdokOk47MnDgwB49emRmZooO0vi8vLz+/PPPvXv3ig4CAAAAAAAAtBp09wAAAAAA0Gh27tw5a9YsXV1d0UGEyc7OHjp0aMeOHWtHysrKsrKyHBwcBKZCe5OQkDBy5MjKysqUlJTJkyeLjgMAaC8UCoVUKg0PDw8LC4uNjTU2Nm6UaWuvr26sPpFaMplMqVT6+vr6+fm5ubkVFBTUvVVfX3/gwIGOjo5ubm7jxo1rxHWBGmVlZXv37p09e3avXr28vLz2799fWVn56F00Gk1wcLCdnZ1EIklLS/P399fR0WmUME30QNPW1vbx8cnIyDAwMHBycgoICKioqGisyQEAbcbDnnqaqHKlRdX3AHiYTp06ffTRR6mpqTdu3LCwsAgODq6qqhIdCmhfevfu7erqunLlyh9++OHChQvFxcUJCQlLlizp2LHj119/PWHChB49ehgZGbm7u8vl8piYmOvXr4uODABo1/T19bdv375u3bolS5b4+vrye8jmoaWl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FABtk5iYOGfOHLJTAIDSVFVV3blzJy0tjcfjpaWl1dbWmpmZiUt8WCzWyJEjb9265evrW1JSEhoaumLFCrLzAmiwqqqqESNG/P3339OmTTt27Jienp46Z5eu8uHz+eL736SrfMaMGWNkZKTOSAAAoJht27Zt3bpV8jpGbW1tgUAgEonMzc3d3d1tbW0vXrx45coVf3//sLAwAwMDVWSgUP7vhZTSy0qXlJTE5XL19fVjY2Pd3d1VNAsAAGiE48ePz507F6/kh66D9HN+z549QUFBf/75p4WFhfpnP3PmzPTp09+9e9e9e3f1z96RzZkzp6am5uzZs2QHAQAAAAAAAAAAaBd09wAAAAAAAEAXYmdnx2azw8LCyA6iScrKynr37n3p0iVPT089Pb39+/cvXbqU7FCarbGx0cfH5/Tp07///rudnR3ZcQCgCxEKhWFhYVu3brW1tSUI4t69e1u3bv3iiy86VBuOWH5+fmRkZGxsrJaW1vz589esWWNjY0N2KIL439uD8/Lynj171tjY2KtXLyaTKblD2NraugM+pWrD4XAKCgrWrVtHdhAAec2dOxfdPQCdWENDw71791JTU9PS0tLS0srLyw0NDZ2dncePH5+fn3/06NGpU6dGRUX17duX7KQAmur9+/eurq53794dOnRoamoqKTe/iTW5Vn/69Cnxv1U+o0ePNjY2JiseAADIcO3atdZabOh0ulAoFIlEPXr0qK2t1dfXDwsLU/p/UjQv61FFfU9RURGXy01JSfH39w8PD+9SXc8AANAi0ntMANSM9HO+vr7eyspqypQp+/fvV//sWVlZTk5Of/31l6Wlpfpn78j279+/adOmt2/f0mg0srMAAAAAAAAAAAAoDt09AAAAAAAA0FVUVlb27t37+PHjs2fPJjuLJnn06BGTybx7966JiYmZmdm1a9cmTJhAdijNtmHDhr179547d47NZpOdBQC6kLy8PF9f35ycnPXr14eEhGhpaYl7fKytrePi4uzt7ckOSBAEIRKJzp07t2fPnitXrgwZMmTZsmUBAQE9e/YkK09dXd29e/dycnJyc3Nzc3Pv379fXV1NpVKHDh1qb29vZ2c3cuRIOzs7BoNBVsIOiMPhEASRlJREdhAAeVEoFHT3AHQRQqEwPz+fx+OlpqZev369pKRER0eHIAgqlRoQEPD111+TeNUBoNHev3/PZrNv377dq1evc+fOOTs7k52IIAiirKzs4cOH0m0+xP9W+bi4uJiYmJAdEwAACIIg8vPzhw0bJv/2kydPPn78uIGBQfunplAokmXJCylbXNlOSUlJXC5XX18/Nja2taIiAADoakjvMQFQs45wzv/888+fffZZfn6++gt0Xrx40b9/fx6P5+rqquapO7i8vDwbG5s7d+50kL8pAQAAAAAAAAAAKAbV1AAAAAAAANBV3Lp1SygUjhkzhuwgGqawsJAgCFNTU/HblQ8cOJDkQBrup59+2rVr1+HDh1HcAwBqIxQKxTU9VlZWGRkZkpqeoKAgLy8vX19fZ2dncaEPnU4nK2RxcXFcXNz+/fsLCgrc3d1PnTo1bdo06Rul1OP9+/d3797Nzs7m8/nZ2dkPHz5saGgwMDAYMWLEyJEjly5dOnLkyOHDh+vq6qo5GAAAALQflUq1sbGxsbFZsWIFQRBPnz5NS0u7du3aqVOndu3atXv37mHDhnl6erJYrIkTJxoZGZGdF0Bj6OrqXr58eerUqenp6RMmTDhx4sTUqVPJDkX06tWLxWKxWCzxh9JVPklJSd988w2h1CqfwMBANps9bdo05aQHAOik3r9//+rVq9evXzf59+XLl7J3pFKpQqHQ0dExODi4rq7us88+s7W1jYmJ8fDwaGekFm8dV+795EVFRVwuNyUlxd/fPzw8XF9fX4mDAwAAAECbLF26dMeOHSEhIXFxcWqe2sTEhEKhFBcXq3nejm/YsGGmpqbXr19Hdw8AAAAAAAAAAGg0dPcAAAAAAABAV5Genj548GAzMzOyg2iYoqIiKpVqZGR09epVKpVqbm5OdiINduHChbVr13777bcLFiwgOwsAdBV5eXm+vr45OTkttvMwmcz09HRxs8/Fixfj4uIkzT5qw+fzo6Ojf/nlF21t7SVLlqxdu3bQoEFqm/3du3f5+fmSm3izsrLq6uoMDAxsbW3HjRu3bt06R0fHYcOGaWlpqS0SAAAAqIelpaWlpaWPjw9BEJcvX/7888/z8/NLS0v37dsnEoksLS3d3NxYLBabzVbnxQmAhtLV1T137tzEiRPz8/NnzZr1yy+/zJkzh+xQ/6NJlU95efmDBw8kVT7btm1rbGyUrvJxdnZmMBjyj3/kyJE9e/ZMmjRp7969H330kWoOAgBAA9TW1orreCS9PNI1PWVlZeLNtLS0GAyGqampubm5paUli8UKDQ2tra1tPiCdTm9oaHBycvrqq6+8vLzEK8ePH8/lctlstr+/f1hYmIGBgfqOsI2SkpK4XK6+vn5qaqq7uzvZcQAAAAC6OjqdHhwcvGzZsq+//lrNf/TT0dExNDREd09zFApl/Pjx165d+/LLL8nOAgAAAAAAAAAAoDh09wAAAAAAAEBXwePxXF1dyU6heQoLC01MTLS0tJ4/f25hYdGk9AHkl5eXN2/evIULF3711VdkZwGALkEoFIpLeaysrDIyMlor5aFSqUFBQV5eXr6+vs7Ozi1W/KhCfX39qVOnIiIieDyevb397t27Fy1a1L17d1XPW1VVdffuXf6/Hj9+LBQKe/ToMXz4cEdHxxUrVqCsBwAAoAtis9mPHj2KjY3dvHmziYnJkiVLdHR00tPT16xZU1dXZ2ZmxmKxxFU+Dg4OFAqF7LwAHVH37t3PnTs3ZsyY6urqBQsW1NXVLV68mOxQrerZs2ebqnycnJxMTU1bG+3ly5dv3rwhCOLq1atMJvOLL774z3/+o6+vr6aDAQBQr7q6ujdv3kjqeJr8W1RUJBKJxFv26tXLzMysb9++4u+okuW+ffv269evyV+f4uLi/vnnH+k1dDpdIBCw2exvvvlm1KhR0g8xGIzk5GRxLc6lS5diYmI8PDxUfeBtVVRUxOVyU1JS/P39w8PD8XMBAAAAoINYuHBhSEjIjh07IiMj1Tw1g8FAd0+LJkyYsHHjxoaGBrwkCQAAAAAAAAAANBe6ewAAAAAAAKBLEAqFGRkZO3bsIDuI5ikqKhLfm/TixYv+/fuTHUdTFRYWTpkyxdbWNioqiuwsANAl5OXl+fr65uTkyNnFw2Qy09PTxV0/Fy9ejIuLa63rp/1ev36dkJCwd+9e8ffGy5cve3p6qmgugiAqKiqys7P5fL743ydPnohEImNjY0dHx5kzZzo4ODg4OKj5fTUBAACgA9LS0vL39589e/ZXX30VFhZma2sbGhp66tSp7OxsHo+Xlpa2devW8vJyQ0NDZ2dnT09PNzc3Z2dnbW1tsoMDdCBGRkZnzpxxdXX96KOP/Pz8unfv7u3tTXYouTSp8qmoqLh//778VT5ZWVnihYaGBoIgwsPDY2Njw8LCFi9ejLYvANBE9fX1paWlbW3nsbGxkd3OI5u5ubmku4dOpzc2Ns6dOzc4OHjo0KGt7cLhcMaNG8flctlstr+/f1hYmIGBQXsOXInEvUL6+vqpqanu7u5kxwEAAACA/0OlUjds2LB27dr//ve/5ubm6pzaxMQE3T0tmjhxYnV1dVZW1pgxY8jOAgAAAAAAAAAAoCBKY2Mj2RkAAAAAAAAAVO7BgwcjRozIzs4eOXIk2Vk0jK+vb2Fh4W+//TZ9+nQDA4MjR46QnUjzvH//3t3dvbi4+Pbt28bGxmTHAYBOTigUiit4rKys4uPj21rB09bSnzbh8/kRERHHjh3r3bv30qVLP/vss379+ilxfLGGhoY//vhDfI89n8/Pz88XiUS9evViMpmSW22ZTCbuoVURDodDEERSUhLZQQDkRaFQEhMT58yZQ3YQAOhA8vPzv/7666SkJE9Pz9DQUAcHB4IghEJhfn4+j8dLTU29fv16SUmJnp6evb09i8Vyc3MbP368oaEh2cEBOoRr165NnjzZ1tb23r17Z86c+fjjj8lO1F7SVT58Pv/Ro0dNqnyuX7++b9+++vp6yS7iXzdGjx4dGRlpZ2dHXnYAgJYp1s7T5N+2tvPINn/+/MTERC0tLV1d3bVr165Zs0b+v6VLinJiYmJYLJZIJNLV1VVWsLYqKiricrkpKSn+/v7h4eH6+vpkJQEAgI7v+PHjc1j9NAYAACAASURBVOfOxSv5oevoOOd8XV2dpaXl/Pnzw8LC1Dmvt7c3nU4/duyYOifVFObm5p9//vnmzZvJDgIAAAAAAAAAAKAgGtkBAAAAAAAAANThzp073bt3HzFiBNlBNE9RUZH4jcRfvnzp6elJdhzN09jY6Ofn98cff9y6dQvFPQCgau1v3mEymenp6eL2n4sXL8bFxbW1/ae52tra48eP79y58+7du46Ojvv27fPx8enWrVs7h5UQCAQPHz7M/NeDBw8aGhp69+7t5OQ0e/ZsJyenUaNG9e3bV1nTAQAAQKdnbW19/PjxGzduBAUFOTk5zZ8//5tvvhk8eLCNjY2Njc2KFSsIgnj69GlaWhqPxztz5kxoaCiNRrOzs3Nzc2OxWO7u7n369CH7IABIM3HixMjIyOXLl0+YMIHD4aSnp9vY2JAdql169OjBYrFYLJb4w8rKynv37ol7fJKSkkJCQqhUqkAgkN5FfCNiZmbmyJEjFy5cuGvXLiMjIxKiA0AXJrudp7i4WCgUirfs1q2bpI7Hzc1NuqBn4MCBenp66glsZmbGYDA2bty4YsWKFvtuhEJhaWnpmzdvxP+WlJSUlJSIl4uKihgMxl9//eXp6WlkZJSZmTlw4ED1xG5C0iKUmprq7u5OSgYAAAAA+CAdHZ3169dv2bIlKChIna/iYDAYjx49Utt0mmXs2LFpaWlkpwAAAAAAAAAAAFAcunsAAAAAAACgS8jIyHBwcKDR8ItwmxUWForfHrygoMDc3JzsOJpn06ZNycnJFy5cGDp0KNlZAKAzEwqF4sIdKyurjIyM9hTuUKnUoKAgLy8vX19fZ2dnhWuACIJ4+vRpdHR0TExMdXX19OnT9+/f7+rqqnAwaa9eveLz+TweLy0tLScnp6amRk9Pz97efuzYsWvXrnV0dGQymRQKRSlzAQAAQNc0fvz4W7dunThx4r///a+1tfWCBQu++uorKysr8aOWlpaWlpY+Pj4EQbx69Up8WcLj8fbt2ycSiSwtLT09Pd3c3MaNG0fWreMAJPLz87tx48bZs2etra2nTZt2584dExMTskMpjaGhoXSVT3l5+aBBg8rLy5tvKS70SUxMPH369LZt2z7//HMqlarWrADQ2ZWVlbVYzfP69eu///5bnnaeAQMGtFiUo35r1qzZvn27trZ2k/X379+fPXt2cXFxZWWl9HoajUalUhsbGwUCgUgkEq+0srIqLS2dOHFiTEyMh4eHmqITBEEQRUVFXC43JSXF398/PDy8gzyrAAAAANCalStXhoaG7t27d9u2bWqb1MTE5MaNG2qbTrO4ubkFBwcLhUL88QQAAAAAAAAAADQUblkEAAAAAACALuHOnTuenp5kp9BIhYWFDAajrq6upKTEwsKC7DgaJi4u7scff4yPj8db7AKASuXl5fn6+ubk5LSnZ6cJJpOZnp4u7gO6ePFiXFyc/H1AjY2NV65ciY6OPnnypImJyeeff/7ZZ5+1810rX758mZGRkZmZmZmZmZWVVV5eTqfT7ezsnJycli1b5uTkNGzYMLyUEwAAAJSLQqFwOBxvb+/k5OQtW7YwmcypU6du27Zt5MiR0pv17duXw+FwOByCICorKzMyMlJTU9PS0g4dOlRXV2dmZsZisdzc3FgsloODA+oF5XThwgUWi4X73jXX/v37MzMzqVSqlpbWwoULL168qKWlpepJb9269eLFC1XP0kRZWVmLxT0SDQ0NDQ0Na9eu3bVr1/Lly1HuDEAKV1dXDf3jtgLtPI6Ojh2znUe21uoOR4wYQafTq6qqmqwXCATiijQxKpXq6emZkpJSWVnJ5XLZbLa/v39YWJiBgYHqMkskJSVxuVx9ff3U1FT8XwAAAACARtDT01u9enV4ePj69et79uypnkmNjY2Li4vVM5fGYbFYFRUVDx8+tLW1JTsLAAAAAAAAAACAIiiNjY1kZwAAAAAAAABQrZqamh49ehw5cmTOnDlkZ9EwIpGoW7duhw4dcnFxGTx48J07d5ydnckOpTF+//13NpsdFBSkzjdqA4CuRigUiut1rKys4uPj5a/XkV+bioGqqqqOHj26Z8+ehw8fOjo6rlmzZsGCBTSaIiXyDQ0N9+7dS0tL4/P5fD4/Ly+PIAhLS0s3NzfHf+nq6ip4VKAy4tqCpKQksoMAyItCoSQmJuI3BQD4IJFIdPz48e+++y4vL2/27Nlffvmlk5OT7F1qamqys7N5PF5aWtrNmzcrKipMTEycnZ3FVT7Ozs7a2trqCa9ZCgsLV65ceerUKUtLy9jY2AkTJpCdCBT04MEDZ2fnJUuWHDp0KCgoaMuWLaqekcPhnDhxQtWzAIAm6sjX/Aq08zT5t3///uppqCFLXFzc8uXLRSJRaxtoaWl5e3sfOXJE8mcrSZlOTEyMh4eH6rIVFRVxudyUlBR/f//w8HCNqEkCAICO4/jx43PnzsUr+aHr6GjnfEVFxYABAzZt2rRp0yb1zHjixIk5c+bU19cr9p+nnZtQKOzTp8/333/P5XLJzgIAAAAAAAAAAKAIdPcAAAAAAABA53fz5s1x48Y9e/astTduhdaUlJSYmJhcvXqVSqWOHz/+5cuXffv2JTuUZsjPz3d1dfX09ExMTKRQKGTHAYDOqU2tOu0haQiytraOi4trsSHozz//jI2NjYqKqq2t5XA4X3zxhQJvivjkyZPbt2/fuXPn9u3bd+/ebWhoYDAYLi4uo0ePHj169KhRozr3rWidA7p7QOOguwcA2kQkEqWkpHz//ffZ2dksFmvdunUzZsygUqkf3FEgENy9ezctLY3H4127dq20tFRPT8/e3p7FYnl6erq5uaGUUOzIkSNr1qzp2bNnWFjYoUOHTp8+zeVyt2/fjjvhNVRkZOTq1avXr1+/c+fOW7dufbDxqp1IuRb95ptvtm3bJhKJxPfdCQQCgiCoVKqpqamVlZW1tfWQIUM++uijIUOGDBo0SEdHR53ZAECM9Gt+Ge08//zzj/j7BiGznadfv36GhoZk5SddXV2dubn5mzdvWnyUQqH4+/tHRkZqaWlJr5e06ixfvnzatGnTp09XejBJQ1BsbKy7u7vSxwcAgE6vo/WYAKhaBzznN2/efPDgwefPn6vnT3O///77+PHjX79+bWpqqobpNM7kyZP79Olz5MgRsoMAAAAAAAAAAAAoAt09AAAAAAAA0PmFh4eHhoYWFxeTHUTz3L9/39bWNi8vLycnZ8mSJbW1tfLckQhv3rwZM2ZMjx49bty40b17d7LjAEAnJCnTsbKyio+Pb7FMR+larAoSiURXr16NiIg4d+6cpaWlv7+/v79/79695Ryzuro6NzeXz+fzeLwbN24UFxfTaLShQ4eyWCw3NzdHR0cmk4kGNM2C7h7QOKTfxwsAGiotLW3Pnj0nT57s379/QEBAQEBAz5495d/96dOn4h6fy5cvP3v2jEaj2dnZubm5sVgsd3f3Pn36qC55hyW5wd7f3z88PFxc1iO5JT4mJsbDw4PsjNBmjY2NbDa7pKTE2Ni4pKQkKytLdZWjBEnXot7e3nw+38rKysrKSlzTM3jw4EGDBqn0SAGgTdRwzY92HlXz9/ePj4+XPJMSFArlyy+//OGHH1r881FDQ8PatWujoqIMDQ2TkpKUeC3R4nULAABAW4l7TD799FOyg0CbiUSiJr2BII+CgoLbt293qLtXioqKBg4cuGvXrpUrV6phuvz8/GHDhuXm5trZ2alhOo0TEhISExPz999/kx0EAAAAAAAAAABAETSyAwAAAAAAAACoXEZGhouLC9kpNFJhYSFBEAwG4+XLl2ZmZijukUd9ff2nn37a0NBw9uxZFPcAgCq02KGjBkwmMz09XdwZdPHixYiIiNu3b0dGRv7zzz+TJk06e/bs5MmT5XmlsvhOdXFfT05OjkgkMjMzc3R0XLVqlbiyRz3vbAkAAADQHiwWi8Vi/fnnnxERESEhIT/88MPixYsDAgKGDx8uz+6WlpaWlpY+Pj4EQbx69YrH44mrfPbu3dvY2Ghpaenp6enm5jZ+/PgBAwao+FA6BElHT2pqqru7u2Q9h8MZN24cl8tls9n+/v5hYWEGBgYk5oS2olAokZGRtra2n3zyye7du8PDwzdt2kR2KCU7ceIE+kYBugIF2nkcHR2l23ksLCx69OhB7lFonPr6+qSkpD179mRkZLT43xPbt2//8ssvm6+vq6s7ePDg999/X1BQ0L17dxaLpcRridauWwAAANqqX79+KO7RRPX19VevXrW1te3bty/ZWTSMhYVFRzvnGQzGokWLdu3atWLFCjX0MTEYDIIg8MZjrWGxWF9//fWLFy/69etHdhYAAAAAAAAAAIA2o3So5nIAAAAAAAAAVRg0aJCfn19wcDDZQTTP4cOHly1bVltbu27duoyMjPT0dLITdXSNjY0+Pj6nT59OS0sbMWIE2XEAoLMRCoXi6hwrK6v4+Hh7e3tSYojLg7Kzs6lU6uLFi9etW8dkMmVsX1lZmZGRIe7rSU9Pf/v2bffu3UeOHOno6Ojo6Dhu3LiBAweqKzuoHIfDIQgiKSmJ7CAA8qJQKImJiXPmzCE7CABosLKystjY2Ojo6D///NPV1TUgIIDD4ShWRyi+cEpNTU1LS8vMzKyvrzczM2OxWOIqHyaT2fkqQoqKirhcbkpKir+/f3h4uL6+foubSW6Sj4mJ8fDwUHNIaKdvvvlmx44dn3/+eURERG5urrW1tYomwrUoALRIzmt+Ge08L168aGhoEG8m3c7T5F9zc/OePXuq/oC6hOLi4ri4uH379r169Wrq1KmBgYFHjhw5cuSI5BNBoVAOHDiwYsWKJjvW1NRER0f/8MMPb968EYlEBEFs3rz5u+++U8q1hJzXLQAAANDpBQQE/Prrr7dv37axsSE7C7TX48ePhw0bdvr06WnTpql6rsbGxm7duh08eHDhwoWqnksT1dTU9OrVKz4+fv78+WRnAQAAAAAAAAAAaDN09wAAAAAAAEAnV1xczGAwLl68+PHHH5OdRfOEhYXt2bPnn3/++fTTT7W0tI4fP052oo5u69at33333fnz59lsNtlZAKCzETfm5OTkrF+/PiQkhE6nkxhG0iJkbW0dFxfXpEVIIBA8fvyYz+fzeLy0tLRHjx41NjaKbzt3c3NzdHR0cnLS0dEhKzyoFO6XBo2D7h4AUJbGxsZr165FRUX9v//3//T09Hx8fHx9fe3s7BQe8N27dzk5OTweLzU1lcfjvX//nsFgODk5ia+pXFxcyL0gVArJXfSxsbHu7u6yN5a+Wz4sLMzAwEA9IaH96urq7O3tP/rooxcvXvTp0yc1NVVFE+FaFABaJLnmRzuPRsjOzo6Kivrll190dHR8fHw2bNjQv39/giAePHhga2vb2NhIoVAoFMrBgweXLFkivWN1dXVsbOy333779u1bcWsPQRA6Ojr//POPiYkJ0e5riTZdtwAAAEDn1tDQ4Onp+fr164yMDFwfdgJTpkypq6u7evWqGuaysLDYsGHDunXr1DCXJnJxcXFyctq3bx/ZQQAAAAAAAAAAANoM3T0AAAAAAADQyZ05c2bGjBklJSV9+vQhO4vm2bhx440bNzIyMkaPHu3q6rpz506yE3Vox48fnzdv3k8//bRq1SqyswBApyIpyrGysoqPj29SlEMi6TohLpeblZV169at27dvZ2dn19TU9OjRY/To0S4uLi4uLqNHj+7duzfZeUEdcL80aBx09wCA0hUXF8fFxcXExDx58mTEiBGLFy9euHBh37592zOmQCC4e/duWloaj8e7evXqmzdv9PX1R48e7ebmJq7y0dXVVVZ+9ZC+eT48PFxfX1/OHSW3zcfExHh4eKg0JCjRpUuXJk2aFBkZuWrVqkuXLqmo8hjXogDQIgqF0qdPn8rKSkk7j56enoWFBYPBkP63X79+JiYm/fr109PTIzdw1yQUCs+fP79nz57U1FR7e/tVq1YtWrSoe/fu0tuMHz/+5s2b2traJ0+enDp1qmR9ZWVlZGTk999/X1NTIxAIJOvpdDqXy929e7f0IApcSyh83QIAAACdWFFR0ahRo4YNG/bbb79RqVSy40C7XL58+eOPP87Ozh45cqSq53JwcJg0adIPP/yg6ok01IYNG65cuZKbm0t2EAAAAAAAAAAAgDZDdw8AAAAAAAB0csHBwcePH3/8+DHZQTTS4sWLKyoqTp8+bWFhsW7dug0bNpCdqOPi8XgeHh6rV6/+8ccfyc4CAJ2KdD9OSEgInU5XYBAKhSL9ofjPwtIrFf5DsaRXSE9Pr6yszNra2tHR0dHRkcVijRw5UktLS7FhQXPJc790kxNSmuRUFG8jfWY230v2eSvjDG8xgGJfBZKhWtudQulw/xEjO1IHDKyANn1/Q3cPAKhIY2PjrVu3fvnll8TExMrKSg8Pj0WLFs2cOdPAwKD9gz99+jQ1NTUtLe3mzZvPnz+n0Wh2dnbiHh8PD4+O35kouWc+NjbW3d29rbtL3z8fFhamlKcU1MDd3V0gEOjr65eUlGRkZMi4JlQYunsAoEUUCmXx4sWTJk0yNzc3NTW1sLBA90qHUlJScvDgwf379xcUFEydOjUwMNDDw6PFHxNnz55duHDh2bNnx44dK15TWlq6b9++8PDw2tpa6dYeMSqV+vTp0/79+zdZ36ZriXZetwAAAEAnlp2dzWKxAgMD0cPSCdjb29va2iYkJKh6osmTJ5ubm8fGxqp6Ig118uRJDofz5s2bnj17kp0FAAAAAAAAAACgbXDjBAAAAAAAAHRyGRkZLi4uZKfQVEVFRQwGQygUFhYWWlhYkB2n43r+/PmsWbMmT54cGhpKdhYA6DyEQmFoaKijo2NdXV1GRsb27dsVK+4hCKKxsVHcXiFZIP7ts5BeowAqlRoUFMTn8/v370+lUr28vGJjYwMDAx0dHVHc05kUFxd//PHHcXFxFRUVShmw8V9NlsXE9TGNjY2SW/Uka5pv3KIm27c4u/TU0nPJT3qW1nbvaD04HzzMjhZYAbI/+wAAakOhUFxdXSMjI1+/fp2SktKjR4/ly5ebmJh4eXklJCRUVla2Z3BLS8sVK1YkJCQ8e/bs5cuXv/76q5ubG4/Hmzt3romJiY2NTUBAQEJCwj///KOsw1GWoqIib2/vuXPnzp49+/79+4rdAM9gMJKTkxMTE0+ePGlra3vlyhWl5wRVCAkJuXnz5rRp0/h8/m+//UZ2HADoWqZNm7Zw4cIJEyZYW1ujuKfjyMnJ8fPz69+//44dO+bNm/f06dMzZ854enq29qvr1KlT09PTxcU9VVVV69ats7Cw+P7776urq5sX99Dp9CVLljQv7iHkvpZQynULAAAAdGIODg5RUVGhoaHHjh0jOwu0V2Bg4LFjxwoKClQ9EYPBKC4uVvUsmmvs2LHiSnSygwAAAAAAAAAAALQZ7p0AAAAAAACAzqyxsZHP5zs5OZEdRFMVFhaampq+evVKKBSiu6c11dXVM2bMMDY2TkhIQFEFAChLXl6eq6trcHBwYGBgZmamvb19+8dsUi8irrdo/7AEQTCZzMzMzJCQkIiICGdn59zcXKUMCx2HSCS6fPmyn5+fsbHxjBkzTpw48f79exXNJX1mSk5aNTSwKFbf007qn7HTdNmo/6kDAFCYjo6Ol5fX8ePHX79+/dNPPwkEguXLlzMYjJkzZx45cqT9vXh9+/blcDgRERFZWVmFhYUpKSleXl4PHz709/cfMGBA375958yZEx0d/fDhQ4V/CmRkZCjlJ0hSUtLw4cOzs7NTU1OjoqLaWZ3A4XAePHjg4ODAZrMDAgKqqqranxBUys3N7ZNPPomLi/Py8goODu40lyUAANBW9fX1SUlJbDbbwcGBx+Nt3779n3/+CQ0NHTBggOwdtbS0bGxsxMv6+vr19fV1dXUNDQ0tbiwUCjdv3ixjNNnXEsq9bgEAAIDOavHixatXr/bz8+Pz+WRngXZZsGCBkZHR/v37VT2RiYlJUVGRqmfRXMbGxkOGDOHxeGQHAQAAAAAAAAAAaDPcTgYAAAAAAACd2Z9//vnmzRsXFxeyg2iqwsJCBoMhfm8xdPe0qLGxcdmyZS9fvjx9+rShoSHZcQCgMxAKhaGhoY6OjnV1dRkZGdu3b6fT6coaXNJOosTiHjEqlRoUFMTn87W1tZ2dnTdt2tTarVOg0RoaGs6dOzd37tyePXt++umnZ86cUeAT3dq5J/85KfsElpzkba13IaW+B5RL4c8+AIAa9O7d28/P77fffisqKoqKihIKhX5+fn369GGxWKGhoY8ePWr/FCYmJl5eXtu3b09LS3v79u3NmzcDAwPLysrWrl07fPhwMzMzLy+v0NDQtLS0Nv0EnzVr1vjx4588eaJwsKKiIm9v77lz586ePfv+/fvu7u4KDyWNwWAkJycnJiaePHnS1tb2ypUrShkWVCckJITP50+aNCknJ+f8+fNkxwEAAHV79erVli1bBgwYsGDBAkNDwytXruTn5wcGBurp6bV1KAqFsm/fvjVr1rT42x+dTudwOEOGDJE9SIvXEiq6bgEAAIDOKjw8fMyYMd7e3iUlJWRnAcXp6OhwudyoqKh3796pdCJjY2OcKrKxWCx09wAAAAAAAAAAgCZCdw8AAAAAAAB0Znfu3NHW1razsyM7iEYSCARv3rwxNTV9+fKllpaWmZkZ2Yk6oq1bt6akpCQlJQ0ePJjsLADQGeTl5bm6ugYHBwcGBmZmZtrb25OdqG2YTGZ6enpISEhERISzs3Nubi7ZiUD5hEKhSCSqr68/derU9OnTjYyMfHx8UlNTldsG1R6NUhQucGleAUP5V/MNZPTFtLi9nFM030aeYprmg0ivb3GzJsuyh2pt/DbtJfsZa8/uSvnsAwCoWq9evXx8fM6cOVNYWJiQkNCvX7/Q0FAmk8lkMoOCgm7cuKGUDkQ9PT0WixUUFHT58uXKysqsrKzNmzfr6ur++OOPY8eO7d27N5vN3rp1a2pqam1trYxxnj9//urVq/T0dBsbmx07dggEgrYmSUpKGj58eHZ2dmpqalRUlL6+fjsOqwUcDufBgwcODg5sNjsgIKCqqkq544MSjRw50t3d/fz5856envv27SM7DgAAqA+fz/fx8Rk4cOCBAweWLFny5MmT5ORkd3f39vziRqFQdu/e3WJ9j0Ag+M9//iPnOBwO5/79+/b29mw2e/78+UwmMzc39+rVq6q4bgEAAIDOh0ajJSUlUanU2bNn19fXkx0HFLdy5cr3798fPnxYpbMYGRmVlpaqdApN5+bmdufOHXw1AQAAAAAAAACAxkF3DwAAAAAAAHRm4tYDHR0dsoNopJKSEpFIxGAwCgoKTExMtLW1yU7U4Zw8eTIkJGTv3r0TJ04kOwsAaDyhUBgaGuro6FhXV5eRkbF9+3Y6na6KicR9FqqrWaFSqUFBQXw+X1tb29nZedOmTUq5+Rw6IPGt+5WVlYmJiWw228zMLDAwsKO94FixAhdJNYy4AkZ6WTKgeL1kpWS5+TjNB2w+QotTtLhXkw+bJ2+xuab5XpLZpf9tcRfp9a2NL+deMp6NNk3a2hPeBOp7AKDj69Wr14IFC44ePVpcXHz16tWpU6empKRMmDChd+/eXl5ee/fuffz4sVImotFojo6OgYGBx48fLy0t/euvv8LDw83MzOLj49lstoGBwahRozZt2nTmzJmysrIm+968eVNLS0soFNbX12/evNnW1jYzM1POeYuKiry9vefOnTt79uz79++7u7sr5XCaYzAYycnJiYmJJ0+etLW1vXLlioomgvZbvXr1+fPnZ86cefHixT/++IPsOAAAoFq1tbUJCQn29vajRo3Ky8vbt2/f8+fPt2/fPmDAAKWMT6FQAgMDzczMpH/7o9FoU6ZMGTFihPzjmJqapqSkHD58ODU1dcGCBffu3ZswYYJSEgIAAEBX0Lt375MnT+bk5GzcuJHsLKA4IyOjuXPn7t+/X9WzVFdXy67S7uJYLNb79++zs7PJDgIAAAAAAAAAANA26O4BAAAAAACAzuzOnTsuLi5kp9BUhYWFBEGYmpq+fPnSwsKC7Dgdzt27d318fD777LOAgACyswCAxqurq3N3d9+0adOiRYuysrLs7e1VN5e4BUPVfRZMJpPH4y1ZsiQ0NLRPnz4U0HBmZmYyPt3it74sKiras2fP9evXL126dPbsWdWdXRRVlk+JSTfaSK8hpOp45B+nxQFbJHnCW9xLnkFazCn9jMm5u4z1TULKE6DJo82Pq0laecYHAOhkaDTaxIkTw8LC/vjjj7/++uvHH3+k0+nBwcHW1tYDBw5ctmzZoUOHnjx5oqzpLC0tV6xYkZCQ8Pz585cvX/7666+Ojo5nzpyZMWOGsbGxjY1NQEBAQkLCixcvCIK4efMmlUoV7ygSif7888/Ro0cHBga+e/dO9ixJSUnDhw/Pzs5OTU2NiorS19dXVv7WcDicBw8eODg4sNnsgICAqqoqVc8ICvDy8ho0aNDjx48HDhx44MABsuMAAICq/PXXX5s2bTI3N1+xYsXQoUPT0tKysrJWrFihq6urxFmePXvm4eFhYmKyevVqyS+SAoHgP//5jwKjLViwoKCgYO/evXp6ekoMCQAAAF2BnZ1dQkLC3r17Y2Njyc4Cilu1atW9e/d4PJ7qpjAyMiIIoqO9E0aHMnToUBMTk7S0NLKDAAAAAAAAAAAAtI3KX+AOAAAAAAAAQJb6+npDQ8OYmJhFixaRnUUjXbhwYcqUKeXl5StXrqytrU1JSSE7UQfy5s0bZ2dnc3Pz1NRUbW1tsuMAQGeQl5fn6+t77969rVu3fvHFF5IbpJWO8m93j0r/OCwUCsPCwrZu3WpraxsQEGBgYKC6uUANysvLV6xYIWMDOp3e0NBgYWFhYGDQr1+/ixcvyjly81OxyRp5NpAs/r0BWwAAIABJREFUt3hWt3a2t7hesrLFeYl/i2aab/PBWVrc+IMjyHg2ZMwoI2eLg3wwm+wn7YMBpFfKPi75J5Xzm5icgRMTE+fMmfPB0QAA1EwgEGRkZFy6dOnq1auZmZm1tbVmZmYsFovFYo0dO9bW1lbpV4yFhYVpaWk3b968efPmvXv3hEKhlZVVRUWFuNtXGo1GMzMzO3jwoKenZ/NxioqKuFxuSkqKv79/eHi4Glp7mkhKSuJyufr6+jExMR4eHmqeHT4oPDx827ZtX3zxxc6dOwsKCpTYj8DhcAiCSEpKUtaAANA54JpfnUQi0dWrV6Ojo0+ePMlgMPz9/T/77DNjY2NVzJWfn+/p6Wlqanrx4sU+ffqsX78+IiKCIIixY8dev35dFTMCAAAAyLZ58+bdu3dfv34dbzGluZycnKysrA4fPqyi8f/44w8rK6ucnByVvpWLpps1axZBEHiREgAAAAAAAAAAaBYa2QEAAAAAAAAAVOXevXt1dXWjRo0iO4imKi4u7tatW48ePQoKCvCyIWkNDQ3e3t4ikSg5ORnFPQCgLEwmMz09Xdx3c/To0fj4eFV875XUWKi0vkfcQ5STk7N+/fqQkBA6na6KWUCdmt+xL0aj0QQCQY8ePebOnbt48WI3Nzf13wypxNNYxheFquuulIX0nK0FkFHN0xH4+fmtXLlSV1e3W7du4jWGhobiRgwtLa0ePXqIV+ro6HTv3l28rK+vL/nm1qtXL/ECnU6X9FN0795dR0dHvNyjRw8tLS2CIKhUqqGhoXhlt27ddHV1xcsGBgY0Go0gCAqF0rNnT/FKbW1tJXYZAIAmotForq6urq6uW7duFQgEd+/eTUtL4/F427Zte/Pmjb6+vp2dHYvF8vT0dHNzk3xLaQ8KhVJTUxMeHk6j0SorK3k83qVLl3bv3t18S4FA8OrVKzabvXDhwoiIiD59+kgekvTmpKamuru7tz+VAjgczrhx47hcLpvN9vf3DwsLQ5Vkh7J06dLNmzebmJjU1NQkJyf7+PiQnQgAAJTg7du3Bw8ejIyMfPbsmaenZ3Jy8rRp01RXTp2Xl+fp6WlpaXn+/Hnx71k7d+6kUCg7d+4MDg5W0aQAAAAAsn333Xf379+fNWtWZmamubk52XFAEatWrVq1alV4eDiDwVDF+EZGRgRBlJaWqmLwTsPNzW3Hjh3i/84mOwsAAAAAAAAAAIC8OuiLpAEAAAAAAADaLzo6+osvvigvLxffKAtttXPnzl27dr148WLQoEEBAQGbNm0iO1FHERAQcPToUR6PN2LECLKzAEAnpLrim+atGUrv0RAKheL6IWtr67i4OFS/dRqFhYVmZmaSD+l0ukAg0NXVnT179pw5c6ZMmSKuHSEIgsPhEASRlJQk58gtnoSSle0/aeWv45HzQ/GrhJvHEy/LCNx84yZ7ydigxVQffOoIqWKjJuubHMIHp5a98oMBmu8u+2ls61NHtELOs4VCofj7+48aNaq6urqhoUG8sqysTLzQ0NBQXV0tXq6pqamrqxMvV1RUiEQigiCEQmFlZaV4ZW1t7fv378XLVVVVAoFAfJjl5eUfjCGbnp6epDKyZ8+e4idQdVVBLU5Ho9EkzRct9hwBgNqIRKKHDx/evHmTx+P9/vvvBQUF2trajo6ODg4OI0eOHDly5PDhwxXrmb158+a4ceP69++/ZcuWxYsX0+n0kydPfvrppzK+ndLpdAMDg127dvn4+BQVFXG53JSUFH9///DwcMn3KBJJioRiYmI8PDzIjgP/55NPPqFSqVpaWrW1tRcuXFDWsG29FgWALoJCoSQmJqq/arbr4PP50dHRhw8fplKp8+fPX7169fDhw1U6Y3Z29qRJk5hM5tmzZ5s09B08eNDPz0+lswMAAADIUFlZOWbMmB49ely7dk3yN1vQIO/fv7ewsNi4caOKXiHT2Niora39yy+/zJs3TxXjdw63b98eM2bMo0ePrK2tyc4CAAAAAAAAAAAgLxrZAQAAAAAAAABUJTs7297eHsU9CistLTUyMmpsbHz9+rWFhQXZcTqKiIiImJiYlJQUFPcAgIowmcz09HRxA86FCxfi4+Pb34AjaetoUoFBNCv4aA/VtQ5BByG+rKLRaF5eXosWLZoyZUp7XncufVoS/3sSSt5IU7EzU/pNOFscocnUzbeUfHU0XynO1mL4Fot7iGZfgE0GlyxIv32odMFNk76bFgdpPqkkZ5PBm/TdNC/ukQzbPE+LIVt7epsEkPOz3KZJZRy+7ITNeXp6qvM+3vfv39fW1jZZbnGlwhuLF4RCYVlZWZtGqKysFAqF7Tk66ZKgFpfbv4HCo+nr6+NnE3QOWlpaI0aMGDFiBJfLJQji77//vnnz5q1bt/h8flxcXE1Njba2to2NjaTKx87OTlLO1Zq6ujodHZ1//vlHS0vrxYsX/v7+X3/9dXBwcF5eHp1Or6+vb23HhoaGsrKyJUuW7N279+nTp4aGhqmpqe7u7gocV5O30W7SOkcodGHA4XDGjRvH5XLZbLa/v39YWFiT2/uBLPPmzVu2bFlUVNTy5ctfvnxpbm6utqllvGF7k4uiFi/tmq+XPYXsyxU5B+xSlN4wq34KH4JSiilljy9e6ATPsGRZ049F01VXVx85cuTAgQO5ubn29vY7d+5cuHChGsr7MjMzJ0+e7OzsfPLkScnVvgSKewAAAIBchoaGJ0+edHFxCQgIiI+PJzsOtJmuru7SpUsjIyM3btyoitp6CoXSu3fv0tJSpY/cmTg4OHTr1u327dvo7gEAAAAAAAAAAA2C7h4AAAAAAADotPh8PovFIjuFBistLTU2Ni4uLq6rq0N3j1hqauoXX3zx7bffTp8+newsANCZUanUoKAgLy8vX19fZ2fn9lfhtHgzmxLvcBMKheKyIWtr64yMjPaXDUEHRKPRPDw8Fi1aNGPGDKXc9C77DGztUXnO2w9uo8AGTfpl5BzzgyubbCD/h/I8P63tLv+wCnzraHG0Nn025VzZnjOEdLq6upL7S3v16kVuGBnaWhXUng0IgigrK3v9+nVbR1OYinqFlFI81LNnTxm9EgDNDRgwYMCAAYsWLSIIQigUPn78OOdfycnJ5eXlVCr1o48+cnBwsLOzs7a2HjZs2KBBg2i0/3mpAJvNNjY21tPTo9PpdXV1jY2Nr1694nK5WlpaAoGgyYxUKpVGo4lEooaGBuLf771ZWVnm5uYpKSkKXwq22IXXpGZOAQwGIzk5OSkpicvlXrp0KSYmxsPDQ+HRQFlmzpwZEBBQV1dnaGh4/PjxdevWqXN26Y6eJn09REsdi012bFPBijyDdIK2GiXS9KdC4R/iH9yx/cU9neOU++CXGKhHfn5+fHx8dHR0TU3N9OnTf/zxR09PT/VMffPmzU8++WTcuHEnTpzo1q2beiYFAAAAaBMrK6uEhIRZs2a5uLisWrWK7DjQZlwud/fu3b/99tu0adNUMb6RkRG6e2TT1tYeOXLknTt3li5dSnYWAAAAAAAAAAAAeaG7BwAAAAAAADqnhoaGBw8erFmzhuwgGqy0tNTIyKigoIAgCHT3EATx7Nmz+fPnz5w5c9OmTWRnAYAugclkpqeniztxLly4EB8f3zE7cfLy8nx9ffl8/sCBA2fOnFlaWlpZWWloaEh2LlCm3r17v3792sjIiOwgAKA+ko4hjSgYam1ZuRtICobk2biqqqp540mbqKcqSLHR9PT0tLW123N0oCJUKpXJZDKZzIULF4rXPHv2LCcnJzs7OycnZ9++fS9evCAIQltb+6OPPrK2traysho2bJi1tXVpaWlaWlqT0pzGxkaRSCRZo6+vb2pq2r9//379+llYWJiamvbr1+/hw4fh4eEGBgYHDx50d3dv/yE0KetRVikDh8MZN24cl8tls9n+/v5hYWFK6SIEhRkYGEyePPnMmTOzZ88+fPiwmrt7ZJA+5aTPxtbWN6fAGdv+jipQgIqec/FnU507KjaXeiaSU5s+Fx0tfFdTV1d3+vTp6OjoK1euDB48OCgoaNmyZer8W8H169e9vLymTp16+PDh9pRcAwAAAKja9OnTt2zZEhgYOGzYsAkTJpAdB9pm8ODBnp6ekZGRquvuefPmjSpG7kxGjx59/fp1slMAAAAAAAAAAAC0Abp7AAAAAAAAoHN68OBBbW2tg4MD2UE0WGlpqb29vbi7x9zcnOw4JKuqqpo+fXq/fv0OHTqkthtpAACoVGpQUJCXl5evr6+zs/P69etDQkI6zr1JQqFQXC1kbW0dGhqalZUVFxe3detWLS2tYcOGubi4jBkzZvTo0cOGDaNSqWSHhXbR1tZGcQ8oi/hSCjeog1JICoYIDekYan+XkDwbSzqG5BmtrKysnUenhqoghTfo0aOHlpZWOw9Q0w0aNGjQoEGzZ88Wf1hdXf348eP8/PxHjx49fvz49OnTYWFh9fX1HxyHRqPRaLSFCxeuX79e3NJYVFTE5XJTUlL8/f3Dw8P19fWVlVnSY6LcHxYMBiM5OTkpKYnL5V66dCkmJsbDw0NZg4MCJk+evH79+qSkpIMHDz558mTIkCHqmVeJnTsfhAseAJXCl5g6/fXXXz///PPBgwffvn07ceLEU6dOTZs2Tc1/Jz9//ry3t/esWbMSEhJoNLzoEQAAADq64ODgBw8efPrpp5mZmYMGDSI7DrTNqlWrvL29nz9/PnDgQKUPbmRkVFpaqvRhOxkXF5e9e/e+e/dOT0+P7CwAAAAAAAAAAABywX9jAwAAAAAAQOeUnZ3dvXt3KysrsoNosJKSEiMjo4KCgj59+khufeyaRCLRwoULS0tLMzIyunfvTnYcAOhsdu7c+erVq6qqKska6TvqCYIoLy/X1dXt16/fjz/+uH//fvHd0WQk/R95eXm+vr45OTlNGoUKCwszMzP5fD6fz9+4cWN5ebm+vr6dnZ2joyOLxRo/fryJiQm5yQGAXLi9FrogSceQRhQMtbas3OIhScGQPKNVV1c3NDS05+jUUxWk2Mbdu3fX0dFpz9G1ib6+vqOjo6Ojo2SNUCh89uwZi8UqKiqSsaNAICgvL//22293794dFBRkbm6+YcMGfX391NRUd3d31QdXGg6HM27cOC6Xy2az/f39w8LCDAwMyA7VRX388cfv3r3T0dExMTFJSkravHkz2YmUTLFWEUlxFSF11dTkQ+mVTdbLubLFzZoP3mSQ5sFae6id2SSjEf+WeUlvI2f4Frdv0jMiO3OT42rtGfhgng9u2eKnu/mxS59R8j/D0g/JPhZ5PuktngCtbSwjWJPPsvQ2LR578+kkg7T4ECiRSCS6evVqdHT0yZMnGQyGn58fl8vt37+/+pOcOXOGw+H4+PgcOHAA5YwAAACgESgUysGDB8eMGTN79mwej4eXGWiWadOmMRiM+Pj4rVu3Kn1wIyOjp0+fKn3YTsbFxUUgEGRnZ48dO5bsLAAAAAAAAAAAAHJBdw8AAAAAAAB0TtnZ2fb29njz1fYoLS0Vd/dYWFiQnYVkX3311eXLl69du9avXz+yswBAJ/TixYvdu3fTaDTJnWkikUgoFDbfkkKh9OzZc+/evXQ6XbouR82EQmFYWNjWrVutra0zMjLs7e2lHzU1NfXy8vLy8hJvmZ+fz+fzeTxeamrqvn37RCKRmZmZuMfHzc1t1KhR3bp1I+UoAAAAQJqkYIjoqB1D0m0+lZWV4oslkUhUUVEhXllXV1dTUyNelq77KSsrEy/U19e/e/dOvPzu3bv6+nrxcnl5ufjmf4FAIKlTVHg6xdDpdH19ffGydJtPjx49xHenU6lUQ0ND8UrpDiADAwPxnz7EF4rildra2pL3o9bT09PW1hYv9+zZU3zBSaPRJIU1urq63bp1k/MeeKFQWFFR8dVXXxEEMWbMmAsXLkhSKVeTlgrlYjAYycnJSUlJXC730qVLMTExHh4eqpgIZBs4cOCQIUOuXLkyY8aMEydOdPDuHulzsknJSIskVSnynMZNRm6yl/SjTapP5NmgeewPHkhr+7Z4OM0fUiCbZLnFqpomT36LEzUPL1lu61DSSVp7BuTPIyNY82dDxrE3qbmR8xmWaH4Cf/A0a/EZaD6XZHd5wrT43La2LPsHQZu+xEAxr1+/TkhIiIyMfPHihbu7+9GjR2fNmkXWf7gcO3Zs8eLFy5cv/+mnn1DcAwAAABpEX1//zJkzTk5OK1asOHz4MNlxoA1oNNrixYtjY2ODg4OpVKpyBzcyMsrIyFDumJ3PwIEDTU1N79y5g+4eAAAAAAAAAADQFLiDEQAAAAAAADqn7OzsUaNGkZ1Cg4lEorKyMiMjo9u3b3fx7p4jR47s2LEjLi5u9OjRZGcBgM5p8eLFu3fvFggEMrah0Wh0Ov3XX3/18vIS9+ZcuHAhPj6+SW+OGuTl5fn6+ubk5Kxfv/6D/UFUKtXGxsbGxsbHx4cgiKqqqrt37/J4vLS0tLCwsE2bNtHpdFtbWzc3N0dHR0dHRxsbG3UdBwAAAGiYjt8uJCHd+9Pi8gc3kH/jqqqqNo0mXVokTdLv80EUCkVPT2/Xrl2+vr5Kv3NJehaV1vcQBMHhcMaOHbty5Uo2m83lcrdv3y6pTwK1+fjjjy9fvvzdd9/9/PPPT548GTJkCNmJZJF0jjQpUmltY/HCB8tHpDduftpLf9jaF0WT7T8YScaa1maU8fXY4kOynx8ZgeV5bhXYQLoB54Ofjia7tPih9GZypmpxy+ZTyNi9xUfl/Ow3H+qDp1nzzWR8Q5bxdDU/cKV8e5ezMgkUIBKJLl68+PPPP585c6Z3796+vr4BAQGDBg0iMdKRI0eWLl26bt26HTt2kBgDAAAAQDEDBw48evTo5MmTR44cuWHDBrLjQBssW7bsxx9/vHr1KpvNVu7Iffr0KS0tVe6YnZKzs/OdO3fITgEAAAAAAAAAACAvdPcAAAAAAABAJyQUCu/du7dixQqyg2iwt2/fCoVCIyOjV69eWVpakh2HNDk5Of7+/uvWrVuyZAnZWQCg03JwcLC2tn78+HFr95vR6XQzM7Pz58+Lq22CgoK8vLx8fX2dnZ3lKdBRFqFQKK4Nsra2zsjIUKA2yMDAgMVisVisoKAggiBevXol7vHh8/kHDhyor683MzMTl/iwWCxXV9fu3bur4DgAAAAAVKvj1wzV1dXV1NSIl6urqxsaGpydnd+8edPa9lpaWiKRSFdXVyQSNTQ0JCQkzJo1S11hVcjU1PTAgQN5eXn79+8fMGDAxo0byU7U5YwbNy46Onr06NFGRkbJycniXxM6MvGvbNJdIdJtKW0tEFFF4UiL5TKSyqHW1qghhgJbtla488HB5e8YkjOJbPI3OrWp+0mBCrMOW2Ej/4ETih47KEVBQcHBgwdjY2NfvHgxbty4hIQEb29v+dv9VCQqKorL5W7cuHH79u3kJgEAAABQmKen5w8//BAUFMRkMqdMmUJ2HJDX0KFDXV1dY2Njld7dY2RkVFJSotwxOyUXF5fIyEiyUwAAAAAAAAAAAMhLi+wAAAAAAAAAAMqXl5dXU1Pj4OBAdhANJn6bL2Nj41evXvXt25fsOOR4+/btp59+OmbMmNDQULKzAEAnt3TpUiqV2uJDVCp11KhRWVlZ4uIeMSaTmZ6eHhISEhER4eTklJubq+qEeXl5rq6uwcHBgYGBihX3NNe3b18OhxMREZGWlvb27dubN28GBQX16tXr0KFDbDbb0NDQxsbGx8cnOjr64cOHuGcPAAAAQFl0dHR6/atfv36WlpYikaj5ZjQajSAIfX39BQsWnD59ury8/O+//545c6a3t3dAQEBVVZWK4kn6GuQselBYUlLSiBEjGhoaUlNTUdxDilGjRgkEggcPHsycOfPEiRNkx1FEoxSys7RKHK9JzZCqv746GkkdjCqGleezL/+WnUyXPXANIhKJUlNT58yZM2jQoN27d0+ePPnevXvXr1+fP38+6cU9O3bsWLVq1bfffoviHgAAANB0GzduXLx48cKFC588eUJ2FmiDZcuWpaSkiF88o0RGRkZ1dXXV1dXKHbbzcXFxKSgoePnyJdlBAAAAAAAAAAAA5ILuHgAAAAAAAOiEsrOzdXR0mEwm2UE0mPhtvoyMjAoLC01NTcmOQwKRSLRw4UKBQHDs2DHx/YoAAKrw9u3b6Ojo5ORkoVDY/FEKheLn53fjxg1jY+MmD1Gp1KCgID6fr6Oj4+zsvGnTpoaGBlUkFAqFoaGhjo6O9fX1GRkZ27dvp9PpSp9FT0+PxWIFBgYmJCQ8e/bs+fPnhw8fZrPZf/7555o1a4YPH25sbDx16tQtW7acOXOmsLBQ6QEAAAAAujKBQCBZltyob2BgwGazt2zZsmTJEicnJ21tbQaDkZycnJiYePLkSVtb2ytXrig9iaS4R0xF9SJFRUXe3t5z586dPXv2/fv33d3dlT4FyMPS0rJPnz5ZWVkcDicrK+uvv/4iO9H/nHJNzkbxmuYrZWjTxgrkkayXsbL5o7K/puSZUX6ys8mfSv7BW9xARiNYW58fhcO0uGWTZ1uB2ZXyZCrrky57EPk/X/J/52//KdrFFRQUhIaGDho0aNKkSWVlZbGxsS9fvoyKiho+fDjZ0YjGxsagoKDNmzdHRERs3ryZ7DgAAAAAShAZGTl48ODp06dXVlaSnQXkNWfOHB0dnV9//VW5wxoZGRH/vp8WyODs7EylUu/cuUN2EAAAAAAAAAAAALmguwcAAAAAAAA6oezsbFtbW1U0C3Qd4tcJ6evrl5eXm5mZkR2HBJs2bbp+/XpycnLzvgwAgPZ7//79sWPHPvnkEwaD8eWXX9ra2jo5OVGpVMkGWlpaWlpaERER0dHRMn6iMZnM9PT0kJCQiIgIJyen3Nxc5ebMy8tzdXUNDg4ODAzMyMiwt7dX7vitGTBgwLx583bv3n3r1q2Kiopbt24FBwf36tXr6NGjM2bMMDMz69+/v7e39w8//HDlypXy8nL1pAIAAADorAQCgZaWFkEQvXr18vPz+/rrrwmCKCsru3bt2ubNm9lstpmZmaGhoZub2+eff/727dvY2NgRI0aw2eyAgICqqiqlZBC3ohD/2+8gWaPEBp+kpKThw4dnZ2enpqZGRUXp6+sra2RoKwqF4uDgwOfz3d3djY2Nk5OT1Tl1a2eXuDekSSeIZM0Hi0IoUlqr2mlt6hbbW1rMI1kpvb7FldLhZayRPaOMWpnmD8mfrfnKJqOJN/jggbcYvsUxm4xP+d9OHxlJZA8ivdf/Z+/e42LKH/+Bn2mm+0w1lJpSKaRmYpBbK3ap1oZENSURoSKsD2s3FrtZi9isbfHZ3TaiXLtIsqtNsfuVEFGY3C2FSpdJSqq5/P6Y3/ZpQ7q/a3o9/5jH6XTO+7xOMU3Teb9O01+rRuO/+dVu9MV567egRd/9Rru/K2HT3/QmTr/pQZr/JXpzr3f9+6Q1gOKe1qmtrU1KSvLw8OjXr98PP/zg5eV1796906dP+/j4qKurk05HURQlkUgCAgK+//77iIiIZcuWkY4DAAAA0D7U1NTi4+NLS0vnzp2Ll7LdhaampoeHR0RERPsOK78ERX4/LWgCi8WytLREdw8AAAAAAAAAAHQX6O4BAAAAAAAABXT16lUbGxvSKbq3kpISbW3t0tJSmUxmYGBAOk5nS0hICA0N3b1794gRI0hnAQBFk5WVtXz5cmNjY29v79raWvldzSMiIpYsWVJ/qa6ysjKLxUpNTW3ODCU6nR4UFJSVlaWqqjpq1KjVq1fX1dW1PadEItm6dauNjU1tbW1mZmZISAipUjxVVdUxY8YsX7784MGDd+/eLS8vP3fu3GeffaapqXngwAEHBwc2m21oaOjs7Lx169b09PRXr14RyQkAAADQfenr6y9atOjMmTPFxcU//fTTzJkz5evFYrFYLJYvv3z5MiMj45dfflmyZImLi0tSUhKLxYqMjDQ2Nv7qq6/aPutM1kDTK1utqKjIzc3N09PT1dX1xo0bEydObPuY0EY2NjZXr15lMBguLi6xsbGddlzZv731s02vac7ILT108/O8a+Mm/hO99yhNHLGJXZp/Is1Z+da0zTliM8d8c7mZSZoepNHyW+O999Bvnmzz4733KyN7m7du00TgN5ffdaCmT/zNEZoYsOlzaeYuUO/evXurV682NjaePn26SCQ6fPhwXl5eSEiIubk56Wj/U1tb6+XlFRUVFRMT4+vrSzoOAAAAQHsyMTE5duzY77//vmnTJtJZoLkWLFhw48aNrKysdhxTV1eX+ud+WtC0MWPGoLsHAAAAAAAAAAC6CwbpAAAAAAAAAADtTCqV5uTkzJkzh3SQ7q2kpERXV7ewsJCiqJ7W3XP79u158+YtXbp0/vz5pLMAgOJ4/PjxkSNHfv311wcPHnC53M8//3zu3LkNn2BdXV0XLVpUXV3NYDAGDBjw+++/9+vXr/njc7ncjIyM0NDQ4ODg5OTkffv2DR06tNVpc3NzfX19r127tnLlyo0bN5Jq7XkrLS0tOzs7Ozs7+Yfl5eVXrlxJT0/Pysr6/vvvV69eTafTBw0aZPOPkSNHqqqqks0MAAAA0MU9ePBASel/N/4ZOHAgg8Gob+1pqOHKiooKGo2mo6Pz7bffFhUVhYaGsliszojbKrGxsYGBgUwmMzU1Fa09XcegQYPCwsKkUqmHh8eePXvu378/YMAA0qEAgCQajYZenvZVU1Nz4sSJ8PDwtLQ0Dofj6+u7aNGiFr3p1GmqqqpcXV0zMzNTU1Pr3/kBAAAAUCRjx47dvn378uXL+Xy+s7Mz6Tjwfra2tlwud8+ePe14/zAWi6WiolJWVtZeAyqw0aNHHzlyRCwWMxiY9wQAAAAAAAAAAF2d0vs3AQAAAAAAAOhW7ty58/Lly3a8bqZnKikp0dPTKygooNFo+vr6pON0nvLycmdnZ2tr69DQUNJZAEA822lfAAAgAElEQVQRlJeXR0VFOTo6mpmZ/fjjj1OmTMnKyhIKhUFBQY2a0ZhMppubG0VRU6ZMyczMbMUcKjqdHhQUlJWVpaqqOmrUqNWrV9fV1bV0EIlEsnXrVhsbm9ra2szMzJCQkC5V3PMmHR0dBweH4ODgpKSkoqKihw8fHjp0aPLkyXl5eevXrx83bpyOjo6tre3SpUv37t2bnZ3diq8JAAAAgMJrWNwjFosfPHhgZGTUxPZ0Op2iqI8++igrK+vRo0dHjx49duzYkCFD0tLSOjxryxUVFbm5uXl6erq6ut64cQPFPV2KhYVFdXV1fn6+vb29oaHhgQMHSCcCgBaj0Wj1j20cB8U97ev27durV6/u27evl5cXRVFHjx59/PhxSEhI1yzuKSsrc3BwyMnJOXv2LIp7AAAAQIEtXbp0wYIF3t7eQqGQdBZoljlz5hw9erS2trYdx9TR0RGJRO04oKIaPXp0VVUV/rMAAAAAAAAAAEC3gP5pAAAAAAAAUDRXr15VUVGxtrYmHaR7Kykp0dXVLSwsZLPZampqpON0EqlUOnv27KqqqtjYWBUVFdJxAKAbq62t/eOPP2JjY+Pi4mQymbOzc2JiopOTU9O3BJw3b565uXlwcHBbJrxxudyMjIzQ0NDg4ODk5OR9+/YNHTq0mfvm5ub6+vpeu3Zt5cqVGzdu7OKtPW9lZmZmZmbm4eFBUZRUKr19+/bly5evXLmSlZUVGRn56tUrVVXVIUOGDB8+3MbGZvjw4YMHD8YTPgAAAPRwz549y8rKys3NFQqFubm5t27devXqlb6+Pp1Ol0gkjTaWv1I1NzfftGmTQCCQrxQIBOPHjw8MDHR0dPTz8wsNDWWxWJ19Gu8QGxsbGBjIZDJTU1PR2tMFWVhYUBR19+5dU1PTmTNn7t+//+uvv257AwgAdKb2attBa097qaioOH78eHR0dFpampGR0YIFC5YsWWJsbEw6V1OePXs2adKkysrKc+fODRw4kHQcAAAAgI61e/fu27dvu7q6Xrp0SUdHh3QceA9vb++1a9cmJydPmzatvcZks9no7mkOHo+npaV16dIlPp9POgsAAAAAAAAAAMB7KL1/EwAAAAAAAIBu5erVqzweT1VVlXSQ7q2+u8fAwIB0ls4THByckpISExNjaGhIOgsAdFdZWVnLly83NjaePn36w4cPf/jhh+fPn8fExDg7Ozdd3ENRlL29/YYNG9o+T5VOpwcFBWVlZamqqo4aNWr16tV1dXVN7yKRSLZu3WpjY1NbW5uZmRkSEtIdi3saUVJS4nK5c+fO3blzZ0ZGRkVFxc2bN8PDwydOnPj06dPVq1ePGDFCU1OTx+P5+PiEhYWlp6e/evWKdGoAAACAjvXs2bPU1NSwsLCAgAA7OztNTU0jI6Np06aFhYUVFBSMHTt2x44d586d8/Pzo9PpjfZlMBh6eno///zzrVu36ot75PT19ePj448ePXrs2LEhQ4akpaV14jm9XVFRkZubm6enp6ur640bN1Dc0zXp6ur26tXr7t27FEXNmzfv0aNH58+fJx0KAKBbkkqlaWlps2fPNjAwWLRokb6+/unTp/Py8kJCQrp4cc/t27dtbW2lUml6ejqKewAAAKAnUFZWjomJqaqq8vT0fLM3GboaY2PjcePGHTx4sB3HRHdPM9Hp9OHDh1+6dIl0EAAAAAAAAAAAgPd7z1wRAAAAAAAAgG7n6tWrw4cPJ52i2ysuLuZyuYWFhRwOh3SWTnLixIlNmzb9/PPPdnZ2pLMAQPfz5MmTgwcP7t279+7du1ZWVosXL547d66ZmRnBSFwuNyMjIzQ0NDg4ODk5ed++fUOHDn3rlrm5ub6+vteuXVu5cuXGjRsVoLXnreh0Oo/H4/F49WuePXuW9Y+NGzeWlpYyGAwLCwubfwwbNkxTU5NgZgAAAIA2evbsWW5urlAolD9mZ2dXVVVRFMXhcHg8no2NjY+PD5fLHTp0KJPJbLjj8+fPG/Y/MhgMBoOxfPnydevWNdqyIYFAMH78+MDAQEdHRz8/v9DQUBaL1XFn14TY2NjFixerqKikpqaitaeLMzc3f/z4MUVR1tbWfD4/KioK78wAALRIfn7+oUOHwsPDHz58aGNjs2XLltmzZ/fu3Zt0rmbJyspycnIyMzP7/fffu0tmAAAAgLYzMDCIi4v76KOPvvrqq02bNpGOA+/h7e396aefvnjxQltbu10GRHdP840ePfrkyZOkUwAAAAAAAAAAALwfunsAAAAAAABAochksuzsbHd3d9JBur2SkhJdXd07d+4YGBiQztIZ7t696+Pjs3DhQj8/P9JZAKA7qaioOH78eHR0dFpaGpvNdnd337NnT9eZaEqn04OCgpydnX19fUeNGvVmNY9EIpGX+1haWmZmZr6r3EdRGRoaGhoaOjs7UxQllUrv37+flZV19erVrKyspKSk8vJyBoNhaWk5fPjwoUOH8vn8oUOH9urVi3RqAAAAgHdq1NSTk5NTWVlJNaOp5008Hk8mk1EUpaysLJVKAwICvv76az09vfdm0NfXj4+Pj42NDQwMTElJiYiIsLe3b5eza6aioqLAwMCEhAR7e/vU1NTQ0FBtbW0bG5vOzAAtYmhoWFBQIF+eP3/+2rVrt23bpqOjQzYVAEDX9/r166SkpPDw8LS0NH19fQ8Pj/nz5/P5fNK5WuDPP/90cXEZOXLk8ePH3/viBAAAAEDBjBkzJjw8fN68eUOGDPH09CQdB5ri4eGxfPnyY8eO+fr6tsuA6O5pvtGjR3/33XcVFRVaWlqkswAAAAAAAAAAADQF3T0AAAAAAACgUB4/flxeXt7Tqgc6gry7p7CwcNCgQaSzdLjKykpXV1dLS8sff/yRdBYA6B4kEsnZs2ejoqKOHTsmFosdHR2PHj06ffr0hrU4XQeXy83IyJB39CQnJ+/bt0/+gzI3N9fX1/fatWtvdvr0QEpKShYWFhYWFl5eXhRFyWSyhw8fyqt8rl69eurUqeLiYoqiTExM+Hy+vMdn6NCh5ubmNBqNdHYAAADooZrZ1MPn81ksVksHHzBggIqKSm1t7eTJk7dt22ZhYdGi3QUCwfjx4wMDAx0dHf38/EJDQ1uRoRXknUFMJjM1NXXixInp6elr164dMWKEg4PDtm3bhg0b1gkZoKU4HM69e/fky76+vuvXr9+7d+/KlSvJpgIA6MqysrLCw8MPHz5cU1Pz8ccfd+V3pZqQmJg4c+bMGTNm7N+/v9uFBwAAAGgXPj4+ly9f9vX1HThw4PDhw0nHgXfS1tZ2cnI6ePBgO3b3PHnypF2GUnhjxoyRSqWXL1/u5H5wAAAAAAAAAACAlkJ3DwAAAAAAACiUGzdu0Gg0a2tr0kG6t5qampcvX+rq6hYUFOjr65OO07FkMtn8+fNLSkqSk5NVVVVJxwGArk4oFEZHR+/fv7+wsNDGxmbTpk3e3t66urqkc70HnU4PCgpydnb29fW1tbUNDg6mKCo4OHjIkCHZ2dlcLpd0wC6HRqP179+/f//+Hh4e8jUikUgoFGZlZWVlZR07dmzLli0SiYTFYllYWHC5XBsbGxsbm+HDh2toaJBNDgAAAIqqUVPP9evXX758SVEUm83mcrk8Hk8gEPB4PD6fr6en1/bD0en0efPm+fj4jB07tnUj6Ovrx8fHy8t0UlJSIiIiOnSCTVFRUWBgYEJCgp+f3/bt25lMJkVRdnZ2f/31V2pq6urVq21sbNzd3Tdu3NgTSoq7Fw6H83//93/yZRaLNXfu3J07dy5fvpxOp5MNBgDQ1Tx79iw2NnbPnj03btzgcrlr16719fXt06cP6VytERUVtWDBAn9//507dyopKZGOAwAAAEDMjh07hEKhq6vr5cuX2+UtHegg3t7eAoHgyZMnffv2bftobDZbJBK1fZyegMPhmJiYXLp0Cd09AAAAAAAAAADQxaG7BwAAAAAAABRKdnZ2v379tLW1SQfp3kpKSiiK0tXVff78OYfDIR2nY23evPn48eOnT59ul0usAEBRySdHRUVFXb161cTEZO7cuQsXLhwwYADpXC3D5XLPnz8fGhoq7+75+uuvV61axWDgXeJmYbPZdnZ2dnZ28g9ra2vv3buX9Y+EhITKyko6nW5qalpf5TNixAiF/zH6VnFxcTQajXQKAACA7k3eG1hf1pOdnS3/Vb1RU8+QIUM6bsb+L7/80vZBBALB+PHjAwMDHR0d/fz8QkNDWSxW24dtRN4QxGQyU1NTJ06c2OizDg4Oly9fPnny5Pr167lcrpub2+bNm7vdi3kFxuFwCgoK6j9ctmzZ7t27f/vtt2nTphFMBQDQddTU1KSkpERHRyckJDCZTA8Pj//+97/1b1B0R2FhYStWrPjiiy9CQkJIZwEAAAAgjMFgxMbGjho1ysvLKzk5GX+267KmTp3KZrOPHDmyatWqto+G7p4WGTFixJUrV0inAAAAAAAAAAAAeA+aTCYjnQEAAAAAAACg3QgEArFYnJCQQDpI95adnT1s2LCLFy+OGTMmNTVVge9elZycPGXKlB9++GHZsmWkswBAV/T69eukpKSoqKjk5GQmk+ns7Ozj42Nvb9/de0lyc3MpiuJyuaSDKA6pVHr//v3s7Ozs7OycnJycnJynT59SFMXhcPh8Pp/PHzx4sLW1tZWVlYqKCumwHevChQv5+fmkUwC0zAcffIAaRwAgq1FTT05OTnFxMdWgqUf+OHjwYH19fdJhW6m+XiciIqId32coKioKDAxMSEjw8/Pbvn07k8lsYmOpVBofH79u3bq///575syZwcHB5ubm7ZUEWi0uLs7Dw6Ouro5Op8vXTJ48uaqq6q+//mrpUAKBgKKo2NjYdo4IAN0cjUY7evSoh4cH6SAtduXKlf379x86dOjFixeTJk3y9fV1dnZWVVUlnav1ZDLZmjVrtm3bFhoaunLlStJxAAAAALqKnJycsWPH+vv7f//996SzwDsFBARkZmZeu3at7UNFRkYuW7assrKy7UP1BJs3b/7ll18eP35MOggAAAAAAAAAAEBTUM0OAAAAAAAACiUnJ2fWrFmkU3R7JSUlFEWJxWKKojgcDuk4HeXx48fe3t6zZ89GcQ8ANCKVSjMyMqKjow8fPvzq1asJEybs2bPH3d1dQ0ODdLT2gdaedqekpGRhYWFhYVE/FbCkpKS+yufUqVM7duyora1lMBgWFhbW1taDBw+WT783NzdXUlIiG7592dra2trakk4BAADQpTVq6rl+/frz58+pBk09U6dO5fF41tbWBgYGpMO2G4FAMH78+MDAQEdHRz8/v9DQUBaL1cYx6/uAUlNTJ06c+N7tlZSUBALBjBkz9u/fv3HjRh6P5+/v/+WXX3bfRiTFoK2tLZPJKioq2Gy2fE1wcPCYMWOSk5M/+eQTstkAAIh48uRJfHz8vn37srOzLSwsli1b5uvra2pqSjpXW0kkksWLF0dGRu7Zs8fX15d0HAAAAIAuhM/n79+/XyAQWFtbz58/n3QceLtZs2aFh4ffvn3b0tKyjUOx2eyqqqra2lqFv+dHu7CxscnLyysuLtbT0yOdBQAAAAAAAAAA4J1oMpmMdAYAAAAAAACA9lFVVaWlpRUXFzdjxgzSWbq3I0eOzJ49+/fff580aVJpaWmvXr1IJ2p/NTU1dnZ2NTU1Fy9eVJgyDgBou1u3bh09ejQqKurvv//mcrk+Pj6+vr59+vQhnQu6PbFYnJeXJxQKs7Ky5BP1b9++LZVKVVRUBgwYwOPxuFyujY0Nj8czMzOj0Wik8wIAAEC7adTUc+PGjaKiIqpBU4/8kcfjKXB5bkP1hTsRERH29vatG6SoqCgwMDAhIcHPz2/79u1MJrOlI9TV1UVGRn7zzTfl5eVLly798ssvtbS0WhcG2ujy5cujRo36+++/+/XrV7/SxcXl0aNH165da1HTpUAgoCgqNja23UMCQLdGo9GOHj1aX7bbZZWXl584cSI6OjotLU1HR0cgEMyZM2fs2LGK8S7Bq1evZs2adfr06djY2MmTJ5OOAwAAANAVffHFFzt37vzrr79GjRpFOgu8hVQqNTY2DggI+Oqrr9o41F9//fXRRx8VFRXhz9DNUVJSoqenl5ycPGnSJNJZAAAAAAAAAAAA3olBOgAAAAAAAABAu7lx44ZUKh0yZAjpIN1eSUlJ7969i4qKVFVV6+95rmD+85//3LlzJzMzE8U9AEBRVFlZWVxcXFRU1Pnz5/v27evq6jp//nw+n086FygOBoNhbm5ubm7u7OwsX1NbW3vv3r36Kp/o6OhvvvlGJpNpa2sPGDCgvspnyJAhuGwXAACgG2nU1CMUCgsKCiiK0tHR6d+/P5fLdXBwkJf1mJubkw5LhkAgGD9+fGBgoKOjo5+fX2hoKIvFatEI9e0/qampEydObF0MZWVlf3//2bNn79y5MyQkZM+ePevWrVuyZAmDgYsoOpu2tjZFUeXl5Q1Xbtq0ic/nx8bGenp6EsoFANBJampqUlJSYmNj4+PjpVKpg4PD0aNHp0+frqysTDpauykpKXF2dr53797p06c/+OAD0nEAAAAAuqiQkBChUDh9+vQrV64YGhqSjgONKSkpubq6xsbGtr27R34djkgkwh8Bm0NXV9fExCQrKwvdPQAAAAAAAAAA0JXhsjMAAAAAAABQHDk5OSwWy8zMjHSQbk9+06qCggIDAwPFuKlvI4cPH/7ll19iY2MtLS1JZwEAkuSTo6Kjo48fP85gMKZOnXrixInJkyfT6XTS0UDxqaio8Hg8Ho9Xv6a0tPTGjRtCofDGjRs3b948ceLEixcvKIoyNjaWb2n5D11dXXLBAQAA4H/Ky8sfPHjQsKzn4cOHFJp63kdfXz8+Pl5ewZOSkhIREWFvb9+cHYuKigIDAxMSEvz8/LZv385kMtuYRENDIygoyM/Pb9u2bUFBQT/99NPGjRvd3d0V8s2QLkv+faysrGy40tra2tvbe/369a6urorUXgEA0FBWVlZUVNThw4dLS0ttbW137Ngxc+ZMLS0t0rna2d9//+3k5FRTU5Oeno435AEAAACaoKSkdODAgVGjRgkEgjNnzqiqqpJOBI0JBIJdu3bl5uZyudy2jNOrVy+KokQiUTvlUnw2NjZZWVmkUwAAAAAAAAAAADQF3T0AAAAAAACgOK5fvz548GAlJSXSQbq9kpISXV3dwsJCAwMD0lna3507dwICAlauXOnm5kY6CwAQI58cdejQobKyMltb2127ds2aNavtU38B2qJ3794fffTRRx99VL8mLy+vvsrnr7/++uWXX+RTmnv37m1lZWVpaTlo0CD5Qr9+/dA5BQAA0NHe1dSjra09YMAALpfr7+8vb+oxMzND+ct7CQSC8ePHBwYGOjo6+vn5hYaGslisJraXd/0wmczU1NSJEye2Y5JevXqFhIQEBgauW7fO09Nz1KhR33333bhx49rxENAEeTVPXV1do/UbNmywtrbesmVL2+9mDwDQpdy5c+fw4cMHDx68f/8+l8sNDAycO3euot6T4PLly87Ozvr6+mlpaUZGRqTjAAAAAHR1bDY7KSlpzJgxixYtioyMJB0HGrOzszM0NIyLi2vjmxVsNptCd09L2NjYhIeHk04BAAAAAAAAAADQFHT3AAAAAAAAgOLIycnh8/mkUyiC+u4eDodDOks7q6ysdHV15fF4mzdvJp0FAAjIy8s7fPhwRESEfHLUqlWrfHx8FO+5DhSGiYmJiYmJk5NT/RqRSFTfFCAUCs+cOfP333/LZDJlZWVjY2N5WYC5uTmXy+Xz+U3PfgcAAICmvXjx4v79+w2beuQ/drW0tAYOHIimnnahr68fHx8vL+VJSUmJiIiwt7d/c7OioqLAwMCEhAQ/P7/t27d3UOemiYlJVFTUsmXLgoKCxo8f7+DgsGPHDmtr6444FjTEYDAoihKLxY3Wm5mZffvtt1988cXUqVOHDx9OIhoAQHsqKyuLi4uLiorKyMjgcDju7u4CgcDOzo50rg50+vRpNze30aNHx8fHa2lpkY4DAAAA0D1YWlru37/f1dV1zJgxAQEBpOPAvygpKbm6usbGxraxu0dTU1NFRQXdPc1nY2OTl5dXXFysp6dHOgsAAAAAAAAAAMDbobsHAAAAAAAAFIRMJrtx48bs2bNJB1EEpaWlZmZm9+/fHzRoEOks7Wzx4sUlJSUpKSkqKiqkswBA5ykvLz9x4kR0dHRaWpqBgYFAIPDx8bGxsSGdC6DF2Gy2nZ1dw6l9FRUVd+7cuXXr1u3bt+/cuXPixIn79+/X1dXRaDRjY2PLfwwaNMjKygpNVQAAAO9SUVFx7949NPUQIRAIxo8fHxgY6Ojo6OfnFxoa2rCCUN7sw2QyU1NTJ06c2NFhRo4ceebMmdTU1M8++2z48OG+vr4bNmwwMDDo6OP2ZO/q7qEoavny5QkJCQsWLMjMzFRWVu70aAAA7eD169enT5+Ojo4+fvw4g8GYOnVqYmKik5OT/NlPge3bt8/f33/WrFm//vornsMBAAAAWsTFxWX9+vXLli2ztLT88MMPSceBfxEIBLt27crNzeVyuW0ZR0dHB909zTdixAiKoq5evTpp0iTSWQAAAAAAAAAAAN5OwS8CAAAAAAAAgJ7j0aNHFRUVfD6fdBBFUFpaOmLEiHPnzinYdWBhYWGHDh1KTk42MjIinQUAOoNEIjl79mxUVFR8fLxUKnV2du4hk6OgR9HS0ho5cuTIkSPr14jF4ry8vIcPH8p7B3Jzc48ePVpUVERRlKqqqpGRkXkDXC530KBB+E8BAAA9zbuaelRUVAYMGMDj8ebMmcPj8bhcrpWVlZKSEum8ik9fXz8+Pl5e05OSkhIREWFvb19UVBQYGJiQkODn57d9+3Ymk9lpeRwcHK5duxYfH//5558fPHhw6dKla9eubdgoBO2oie4eJSWliIiIoUOHbtu2be3atZ0eDQCg9WpqalJSUmJiYhITE6urqydNmhQVFeXi4qKurk46WmfYunXr6tWrg4KCtmzZgtJDAAAAgFb4+uuvhUKhp6fn5cuXjY2NSceB/7GzszM0NIyNjf3666/bMg6bzUZ3T/Pp6uqamJhkZWWhuwcAAAAAAAAAALosXI4PAAAAAAAACiInJ4dGo/F4PNJBFIFIJGKz2YWFhYp0Y/lLly598cUXGzdudHR0JJ0FADqcUCiMjo6OjIwsKSmxtbXdsWOHl5cXptpCD8FgMOS9PA4ODvUrCwsLb9++ff/+/QcPHjx48ODKlStHjx598eIFRVHKysqmpqb939BD5hMCAEBPUFNTc//+/fqaHqFQePv2balUiqaerkYgEIwbN27x4sWOjo6enp4pKSk6Ojpnzpz56KOPOj+MkpKSQCCYPHnyjh07tm3bFhUV9e23386bNw//QtqdsrIy9Y7uHoqiLCwsvvnmm3Xr1n388ccNCyvf5cmTJzExMe0cEQCg2erq6lJTU2NiYo4fP15RUWFra7tp06aZM2fq6emRjtZJJBJJYGDgnj17fvrpp0WLFpGOAwAAANBd0Wi0yMhIW1tbFxeX9PR0DQ0N0ong/1NSUnJ1dT1y5Ai6ezqZjY1NVlYW6RQAAAAAAAAAAADvhO4eAAAAAAAAUBA5OTn9+/fX0tIiHUQRiEQiFotVXl7O4XBIZ2kfZWVlM2fOdHR0XL16NeksANCBnjx5Eh8fHxkZmZOTY2lpuXjxYh8fH3Nzc9K5AMgzMDAwMDBoNO9dJBI9bODu3bvJycmPHj2SSqUURbHZbPO3IXMCAAAAzVZbW3vv3r0mmnoEAgGaerosAwODhISEQ4cOLV++fNasWSEhIZqamgTzaGpqrlu3zt/ff8OGDQEBAT/99NOPP/5oa2tLMJLiYTAYNBqtrq7uXRusXLnyzJkzbm5uWVlZ7y2/uHjxoqenZ3tnBAB4D4lEcuHChdjY2CNHjjx//pzL5S5fvrwHvitVUVHh4eGRnp6emJg4ZcoU0nEAAAAAujcmk3nixImRI0cGBARER0eTjgP/IxAIdu3adevWLSsrq1YPgu6elrKxsfn1119JpwAAAAAAAAAAAHgnmkwmI50BAAAAAAAAoB24ubnRaLS4uDjSQbo9iUSirKy8e/fuwMDAS5cujRo1inSitpJKpZMnT75169bVq1d79+5NOg4AtL/q6uqTJ09GRUWdOnVKS0tLIBDMmTNn7NixNBqNdDSA7ufVq1cPHz588G+PHz+Wz6bW1tY2MTExNTU1NTWVL8gfORwO/scBAAAR72rqUVZWHjhwoLyjR/5oaWlJp9NJ54XmqqmpUVVVJZ3iX27fvr1ixYo//vjD3d09NDTUxMSEdCLFoaysvH///lmzZr1rg7KyshEjRvTr1y85OVlFRaUzswEANEEqlWZkZMTGxsbExBQWFnK5XIFAMHv27AEDBpCORkB+fv6UKVNKSkpOnDgxYsQI0nEAAAAAFMTp06ednJxCQ0P/85//kM4C/59UKjUyMvr000/XrFnT6kG8vb1fvXqVkJDQjsEUW3JyspOT0/Pnz9/b7AwAAAAAAAAAAEAEg3QAAAAAAAAAgPaRk5Pj4+NDOoUiEIlEMplMKpVSFMXhcEjHaQcbNmz4888/09PTUdwDoGCkUumZM2eioqISEhLq6uocHR0PHz7s4uKCmZwAbaGhoWFtbW1tbd1wpVgszsvLe/DgwaNHjx4/fpyXl3f9+vWkpKRnz56JxWKKolRUVEz+YWpq2q9fP/mysbFxV5t1D6AABAIB6QgALRYbG9su49TV1d29e7dhU8+dO3fkFbTyph6BQICmHsXQBV9CWFpanjp1Kikpafny5Vwud9WqVatXr1ZTUyOdSxEwGAz5q8p36dWr1/Hjx8eNG+fr63vgwAG0RgIAWfWVPbGxsQUFBVwuNyAgYNasWRYWFqSjEXP9+vUpU6bo6OhcuPjCbfoAACAASURBVHDB1NSUdBwAAAAAxeHo6Lhp06ZVq1ZZWlp+8sknpOMARVGUkpLS5MmTExMT29Ldw2aznz592o6pFJ68IfTatWsff/wx6SwAAAAAAAAAAABvge4eAAAAAAAAUASVlZV///03n88nHUQRiEQiiqJqampoNJq+vj7pOG2Vlpa2adOm3bt3406/AIpEKBRGR0dHRUUVFBTY2Nh8++233t7eurq6pHMBKCwGg2Fubm5ubt5ovVgsfvr0aV5eXn2nT15e3sWLFx8/flxdXU1RFI1GMzAwMDU17du3b9++fU1MTPr27WtkZGRqampgYIBKBYDWiYuLGzNmTN++fUkHAWiWJ0+eXLx4sXX7NtHUY2xszOVynZ2dg4KCeDyetbV1F6x6AYXk7Ozs4ODw448/fvvttwcPHty8eTMq1druvd09FEUNGTIkPj5+8uTJHA4nNDS0c4IBADQif0vqwIEDT58+5XK5/v7+M2fOtLS0JJ2LsOTkZA8Pj9GjR8fFxWlra5OOAwAAAKBovvjii+zsbG9v78zMzP79+5OOAxRFUS4uLpGRkU+fPjUyMmrdCGw2W35xDjSTrq6usbHxlStX0N0DAAAAAAAAAABdE7p7AAAAAAAAQBHcvHlTKpUOHjyYdBBFIL886PXr12w2W0VFhXScNsnPz585c6aHh0dAQADpLADQDgoKCmJiYqKjo7OysoyNjX18fBYsWDBw4EDSuQB6LgaDYWpqampqOm7cuEafev78eX2bz+PHj/Pz8y9cuBATE1NYWCiVSuX7GhgYyNt86mt9+vbta2xsbGBgoKSkROKEALqNFStWeHh4kE4B0CwxMTGenp7N2bKuri4/P7++picrK0ve1MNgMExMTNDUA12Hurp6UFDQ7Nmz16xZ4+np+csvv4SFhfF4PNK5ujGJRNKcVkcHB4fIyMi5c+cqKytv2bKlE4IBAMgJhcLY2NgDBw48ePDAzMxs9uzZPj4+XC6XdK4uITw8fMmSJT4+Pj///LOysjLpOAAAAAAKiEaj7d27d9y4ca6urhkZGZqamqQTAeXo6KihofHbb7/5+/u3bgQ2m11WVta+qRSejY3N1atXSacAAAAAAAAAAAB4O3T3AAAAAAAAgCIQCoWampr9+vUjHUQRyC8Pqqys7NOnD+ksbVJbWysQCPT19X/99VfSWQCgTV6/fp2UlBQVFZWcnKypqTlt2rSQkBB7e3sajUY6GgC8U58+ffr06TNy5MhG6+vq6p49e5afn5+fn//kyZMnT57k5eWdO3fuyZMnhYWFMpmMoihlZWUOh2NsbGxkZMThcAwNDTkcjpGRkYGBgZGRkba2NokTAgCAdiYWi/Py8uqbenJzc2/evFlTU/NmUw+Px1NTUyOdF6AxIyOjqKioBQsWLF++fNiwYYsXL/7mm2/wQqV1xGIxg9Gsy1e8vb0lEomvry+NRtu8eXNHBwOAnkwikWRkZCQmJsbHxz969GjgwIEzZ8709PTELQTqSSSSlStX7ty586uvvgoODiYdBwAAAECRqaurx8fHjxw5cs6cOfHx8fgjKXHq6uqOjo6JiYlt6e6R31gLms/GxiYiIoJ0CgAAAAAAAAAAgLdDdw8AAAAAAAAoAqFQyOVylZSUSAdRBCKRiMFgVFRUdPfunqCgIKFQePnyZdx3DqCbkkqlGRkZ0dHRhw8ffvXq1YQJE/bs2ePu7q6hoUE6GgC0nrKysqmpqamp6Zufqq2tffr0qbzN58mTJ/LlzMzMJ0+eFBUV1dbWyjfT0NCo7/Gpf+zbt6++vn7fvn1ZLFbnnhAAADTLm009QqHw9evX9U09Dg4On376KY/H43K56urqpPMCNNeHH3549erVAwcOfP755wcPHly/fv3SpUvpdDrpXN2MRCJp/hfNx8eHoqgFCxYUFxf/9NNPzSz9AQBopurq6tOnTycmJiYlJRUXF1taWs6cOdPDw2PYsGGko3UtVVVVs2bN+uOPPw4ePOjl5UU6DgAAAIDiMzU1PXbsmL29fUhIyJo1a0jHAcrFxWXRokUvX75s3V+m2Gx2VVVVbW2tiopKu2dTVDY2NuvXry8uLtbT0yOdBQAAAAAAAAAAoDFcwwQAAAAAAACK4ObNmzwej3QKBVFWVsZms4uLi7t1d89vv/0WFha2f/9+S0tL0lkAoMVu37595MiR6Ojohw8fcrnctWvXzps3T19fn3QuAOhYKioqZmZmZmZmb/1sdXV1QUHBs2fP6h8fPnx4+fLlEydO5Ofn19XVyTdTU1Njs9mGhoYcDqfRo7m5OZvN7sQTAgCA/9HQ0Kirq6PT6f3797e2tnZycvr888+trKwsLS0xOwW6OyUlJR8fH2dn5+Dg4FWrVkVHR4eFhY0dO5Z0rm5DJpNJpdIWVfD4+Pj06tXL09OzsLDw8OHDTCaz4+IBQA8hEolSU1OTkpKOHz/+8uVLLpcbGBjo4eHB5XJJR+uKCgoKnJ2dHz16lJqaamdnRzoOAAAAQE9hZ2f33XffrVixYvDgwVOnTiUdp6dzdnb28/P7448/3N3dW7G7/C9W5eXl3frKnE42YsQIiqKuXbv28ccfk84CAAAAAAAAAADQGLp7AAAAAAAAQBHk5ubiyoz2IhKJ2Gz28+fPraysSGdppfz8/Llz5y5YsGDOnDmkswBAC4hEotjY2KioqIyMDENDQzc3N19f36FDh5LOBQBdgrq6urm5ubm5+Vs/KxKJGtb6yB+FQmFqamqjZp+31vpwOBwjIyMdHZ1OPCEAgJ5l//79VlZWVlZWqqqqpLMAdAg2mx0WFrZw4cLly5ePGzdu7ty527Ztwz3Am0MsFlMURafTW7TX1KlTz5w5M23aNFtb24SEhAEDBnRMOgBQcHl5ecnJyUlJSX/88YdMJhs9evTGjRvd3d2NjIxIR+u6rl275uLiwmQyMzMz3/VLOgAAAAB0kE8//fTGjRuzZs26ePEiiibJ6t2799ixYxMTE9vS3SMSidDd03x6enpGRkbo7gEAAAAAAAAAgK4J3T0AAAAAAADQ7ZWXlz99+pTH45EOoiBEIlGvXr2eP3/+4Ycfks7SGmKx2MvLy8DAICwsjHQWAGiWmpqalJSU6OjoxMREOp0+derUxMREJycnBgPvXgJAc7HZbDab/a4XhG9t9snKyjp58mSjZh82my2v8pEPWL8sX9DX12/prHIAAJDz8vIiHQGgMwwePPjMmTNxcXErVqywtLTcunXrggULaDQa6Vxdmry7pxW/AI4ePfry5cuurq6jRo06cODA5MmTOyAdACgmoVB48uTJpKSkjIwMDQ2NCRMmREREuLi4aGtrk47W1R07dszHx8fW1jYmJkY+2RgAAAAAOtmuXbtu3Ljh6up66dIlvIIly8XFZePGjWKxuBVva9R393RALkXG5/NzcnJIpwAAAAAAAAAAAHgLzH4BAAAAAACAbk8oFFIUZW1tTTqIghCJRGw2+8GDB9305vBr1qzJzs7OzMzU0NAgnQUA3iMrKysqKurQoUNlZWW2trY7d+6cNWsWk8kknQsAFE0TzT5SqbSoqEhe6FNUVFRYWFhcXFxcXPzkyZNr167Jl6VSqXxjBoOhp6enp6dnYGDQp08fPT09fX19fX19PT29Pn36GBgY6Onpqampde7JAQAAQJfj7u4+efLkbdu2LVmy5Oeff/75559HjBhBOlTXJZFIqFZ191AUZWJikp6evmjRoqlTp/7nP//ZsmWLqqpqewcEAAUhkUguXLhw8uTJhISEu3fv6unpffLJJ0FBQZMmTVJRUSGdrnsICwtbuXLlwoULd+3apaysTDoOAAAAQA+lqqqakJAwcuRIT0/P3377DbccIGjatGkrV648f/58K+6Mhe6e1hk6dOjx48dJpwAAAAAAAAAAAHgLdPcAAAAAAABAtycUClksVt++fUkHURBlZWVsNrusrKw7dvf8/vvv27dvj4yM5HK5pLMAwDvl5+cfOnRoz5499+7d43K5S5YsmTdvXr9+/UjnAoCeSElJicPhcDic4cOHv2ub6upqebmPSCRquJCZmSlfaHhptZqaGpvNNjQ05HA4DRfql/X19XElPQAAgMLT0NAIDg52dXVdtGiRra1tYGDgt99+y2KxSOfqisRiMUVRrX6BpKamtm/fPnt7+6VLl545c+bgwYNvbWwEgB7r5cuXqampiYmJJ0+eLC0t5XK5bm5u06dPHzlyJI1GI52u26ipqfH39z948OCOHTs+/fRT0nEAAAAAejoOhxMbGzthwoQNGzZ88803pOP0XP3797ewsEhOTm5Fdw+TyVRRUUF3T0vx+fytW7dWV1erq6uTzgIAAAAAAAAAAPAv6O4BAAAAAACAbk8oFPJ4PFxn315EIpGurq5EIunTpw/pLC3z5MmTuf8gnQUA3uLFixeJiYnR0dFpaWlsNtvd3X3v3r12dnakcwEAvIe6urq5ubm5ufm7NqiqqioqKioqKiouLn7+/HlhYWFxcXFxcXF+fv7Vq1flyzKZTL6xsrKynp6enp4eh8Pp/Q9dXd3evXvr6enVr8E1xwAAAApgyJAh58+fj46O/uyzz+Li4rZs2eLj40M6VJcjkUioNnT3yM2ZM8fOzs7b29vGxmbdunVBQUHKyspv3bKmpkZVVbUtxwKAbkEoFJ46derUqVPp6elisXjMmDFBQUHTp08fOHAg6WjdT0FBwYwZM+7evZucnOzg4EA6DgAAAABQFEXZ2tr+8ssvvr6+1tbWHh4epOP0XJMnT/7999+3bNnSin11dHTQ3dNSfD5fIpHk5uba2NiQzgIAAAAAAAAAAPAv6O4BAAAAAACAbu/mzZu4n3Y7KisrU1FRoShKT0+PdJYWEIvFXl5evXr1+vHHH0lnAYB/kUgkZ8+ejYqKio+Pl0qlDg4OR48enT59+rsmUgIAdDuamppNl/tIJBJ5g0/DZp+CgoLS0tJHjx6V/kMqldbvoqGhIS/x0dPTkzf7NKSrqytfyWQyO+UUAQAAoJVoNJqPj8+kSZNWrVo1b968+Pj43bt39+3bl3SuLkQsFlMUxWC09fIVMzOz9PT0iIiIzz77LCYmJiIiYtSoUY22efr06eTJk1NSUvT19dt4OADogl69epWRkZGUlJSYmPj48ePevXtPnDhx586dU6dONTQ0JJ2uu7p+/fq0adOUlZXPnz9vZWVFOg4AAAAA/M/cuXMvXbq0YMECKyurwYMHk47TQzk5Of3www95eXkmJiYt3ZfNZqO7p6UGDhyoqamZk5OD7h4AAAAAAAAAAOhq0N0DAAAAAAAA3Z5QKJw6dSrpFIpDJBIpKSlRFNWnTx/SWVpg3bp1V65cuXjxIovFIp0FAP4/oVAYHR29b9++4uJiW1vbzZs3z549u3fv3qRzAQB0NjqdbmBgYGBg0PRm1dXVIpFIJBIVFBQ8e/ZM1MCjR48uXLjw7Nmz0tLS2trahnux2WwOh8P+N0NDw4YrDQwM5C/wAAAAgAh9ff3o6GhfX9+AgAAejxcSEhIQEICfznISiYRqj+4eiqKUlJT8/f3t7e39/f0/+OCDFStWBAcHa2pq1m/wzTffXL9+fcKECefPn2ez2W0/IgB0BUKh8NSpU8nJyefOnROLxSNGjJg3b56Tk9PIkSPxTNtG8fHxc+fOtbW1jYmJwdMmAAAAQBcUFhZ269atadOmXb58WVdXl3ScnujDDz9kMpnJycn+/v4t3RfdPa2gpKTE4/FycnJIBwEAAAAAAAAAAGgM3T0AAAAAAADQvZWWlhYVFfF4PNJBFEdZWZlMJqPT6b169SKdpbmSk5O/++67X3/9lc/nk84CANTTp0/j4uL27duXnZ09aNCgRYsWzZkzp3///qRzAQB0derq6urq6oaGhk2/uH3x4kVJSUlJSUnpvxUXFz958iQnJ0f+qZqamvpdlJWVe/fu3bt3b3mVj46OTsOin0YfamhodPy5AgAA9EQTJ068fv361q1b//Of/xw4cCAiIsLKyop0KPLEYjFFUXQ6vb0G7N+/f2pqakRExBdffHHkyJHt27d7eHhQFPXw4cM9e/ZQFHXv3j1HR8c///yTyWS210EBoJMVFxf/+eefqampycnJeXl5vXv3njhx4s6dO6dOnWpoaEg6nSKQyWTbtm378ssvFy5cuGvXLmVlZdKJAAAAAOAtlJWV4+LiRo4c6eXlderUqXYpxoUWUVVVnThx4qlTp9Dd02n4fH52djbpFAAAAAAAAAAAAI3h/VkAAAAAAADo3oRCIUVR1tbWpIMoiJqamurqarFY3KtXr3acNNWhCgsLfX19PTw85s+fTzoLQI9WXV198uTJqKioU6dOaWlpCQSCnTt3jh07lkajkY4GAKBQtLW1tbW139uJVllZWVpa2qjlR/SPv//+u365urq64Y4qKipNNPs0/FBHR0dLS6sjzxUAAEDRqKurBwcHu7q6Lly4kM/nr1y58ptvvlFRUSGdiySJREJRVPtOL6TRaH5+fm5ubhs2bPDy8vrpp5927twZEhKipKQkkUjEYvH169enTJnyxx9/qKmpteNxAaBDVVdXnzt37vTp06dPn75+/bqysrKtra2/v7+jo+OIESOUlJRIB1Qcr169WrBgQVxc3K5duxYvXkw6DgAAAAA0pXfv3seOHRs7duzq1atDQ0NJx+mJnJycVq1aVVNTo6qq2qId0d3TOnw+PzY2ViaT4ToEAAAAAAAAAADoUtDdAwAAAAAAAN2bUCjU0dHBrXTbS1lZGUVRtbW1ffr0IZ2lWaRSqbe3N4vFCg8PJ50FoIeSSqUZGRnR0dGHDh2qq6tzdHQ8fPiwi4tLD599CgBAHJPJZDKZpqam793y9evX5eXlogYaffj06dP65crKyob70un0d7X8aGtryx+1tLS0tLTkCywWq8POuNurrq5WV1cnnQIAADrDkCFDMjIydu/evXbt2t9++y0iImL06NGkQxEjFospiuqICulevXqFhYXNnDlz6dKlNjY2YrFYKpXKP1VXV5eRkeHu7n78+PH2rQ0CgPYllUqvXbuWmpp6+vTp8+fPv379msfjOTg4bNq06cMPP2QymaQDKqDHjx/PmDEjLy8vOTnZ3t6edBwAAAAAeL+hQ4eGh4fPnj2bx+P5+vqSjtPjTJkyZfHixefOnXNwcGjRjmw2++nTpx2USoHx+fzy8vK8vLzm/AkMAAAAAAAAAACg0+AKJAAAAAAAAOjehEIhj8cjnUJxyG/qVV1d3V26e7766quMjIwLFy5gHjhA58vNzY2Jidm/f/+jR49sbGy+/fbbWbNm6enpkc4FAAAto6amZmBgYGBg0JyNxWJxEy0/5eXld+/elS+/ePHizRvGKikpaWtr6+jo1Lf51C+w2ew3V+ro6GhrayspKXXAeXc5a9asuXz5ckBAgEAgQIkPAIDCYzAYy5cvnzJlSkBAwNixYz/99NNNmzb1zOd/iURCUVTHFejY2tpmZmZ++OGHmZmZ9d09FEWJxeLk5OQ5c+YcPHiwh7zYAOhGHj58mJqampqaeubMmdLSUj09vY8++igsLOyTTz4xMTEhnU6RnTt3TiAQ6OvrZ2Zmmpubk44DAAAAAM3l7e197dq1wMBAa2vrkSNHko7TsxgbG/N4vFOnTrW0u0dHR6e8vLyDUimwIUOG0Gi0nJwcdPcAAAAAAAAAAECXgu4eAAAAAAAA6N7Q3dO+ysrKKIqqrKzsFu0bZ8+eDQkJ+emnn4YOHUo6C0APUlZWFhcXFxUVdf78eWNj41mzZs2fP9/CwoJ0LgAA6AwMBkNPT6/5rxVfvHhRUVFRUVFRv1BeXl5eXt5wZWFhobzoR76mrq6u0SAsFqtRrY+86Kd+JYvFki9oampqamrKl+l0enuffcd69erVhQsXLl68uGTJknnz5i1cuJDP55MOBQAAHWvAgAGpqal79+797LPPfvvtt8jIyA8++IB0qM4mFospiurQH9zZ2dkZGRkymazReolEEhsby2az//vf/3bc0QGgme7cuXP27NmzZ8/++eefz58/19HRGT9+/Pr16ydMmDB48GAajUY6oOILDw9funTpjBkz9u7dq6mpSToOAAAAALTM1q1bc3Nz3dzcrly50l3u1aQwJk+efPLkye3bt7doLxaL9fLlyw6KpMC0tLTMzMxycnKmTZtGOgsAAAAAAAAAAMD/oLsHAAAAAAAAujehUDhjxgzSKRSHSCSiKOrFixdmZmaks7xHUVGRl5eXh4eHn58f6SwAPcLr169Pnz4dHR19/PhxDQ2NadOmBQcH29vbY+oUAAA0QVtbW1tbu6V7VVdXi97w+vXr+vXPnj0TCoX1K4uKiqRS6ZvjqKmpsdlsNputrq7e/OXevXurqqq2x9m3zKtXr2g0mlQqraysDA8P37Vr1+DBg5cuXerl5cVisVo0VBM/netrC+TbNGwxeHOvNzsO3tz4rdu8NUATozWh6QPJN2jdyB2n6UhdMHBLvfebAgAtQqPRFixYMGXKlICAADs7Oz8/v++//75HNSZIJBKKohiMDrx8Zc2aNQwG481+QPnRf/75ZzabvWnTpo4LAADv8uDBgz///FNe2fPs2TMmkzlu3LhVq1ZNmDBh2LBh3a6Os/uqqakJDAyMjIz84osvtmzZgrf7AAAAALojOp1+8ODBUaNGzZgx4+zZsyoqKqQT9SCOjo7fffddfn6+sbFx8/disVgVFRUdl0qB8fn8nJwc0ikAAAAAAAAAAAD+Bd09AAAAAAAA0I0VFxcXFxfzeDzSQRSHSCRSV1cvKSnR09MjnaUpMpls4cKFmpqaP//8M+ksAApOKpVmZGRER0cfOXKkqqpqwoQJERERbm5uPWoqKQAAdDJ1dXV1dXVDQ8Nmbi+VSl+8ePHy5cuqqqrKyso3lysrK6uqql68eFFcXFy/LF9fXV391gCamppaWlpaWlpMJlO+rK2tra6urqGhoaWlpaamxmQyWSyWmpoai8ViMplqampaWlqamppqamqtqCuiKKqqqqq+gai2tpaiqJs3bwYGBi5dutTFxSUgIMDBwaH5ozXs6GnU19Nw5ZsL9ZqYr9tozDcLXN46Zis6a957IKrr1ce8d55zVwvcUs35pgBAKxgYGCQmJsbGxgYEBKSlpe3du3f8+PGkQ3USeXdPxzV0pKennz59uokNZDLZ5s2btbS0goKCOigDADT08OHD9PT08+fPp6SkPHr0SF1dffjw4XPmzHFwcBg/fjwmGHe+p0+furm53bp1KyEhwcXFhXQcAAAAAGg9Npt94sSJMWPGrFixYvfu3aTj9CDjxo1TV1dPS0ubN29e8/fS0tJ6+fJlh4VSZHw+/8CBA6RTAAAAAAAAAAAA/Au6ewAAAAAAAKAbu3XrFkVRVlZWpIMojrKyMjabXVxc3MW7e3bs2JGcnPx///d/WlpapLMAKKw7d+4cPnz4wIEDDx484HK5X3755bx58/T19UnnAgAAaExJSYnNZrPZ7FbsK+/9qaioqKqqknf6vLlcWVlZUVGRn59fXV1dVVVVUVHx+vXrysrKly9fisXitw6roaGhpqamo6Ojrq6upqbGZrPV1NTU1dW1tbXV1NTkZUCNCoAKCwsbDSKTySQSiUQiSUxMjIuLGzBgwMKFCxcuXNiK02yoYd+KTCaTf9jqBpb6Edpxy3bU+UeUn2ZnHrGDNOdLR+R7CqDYBAKBnZ2dv7//hAkTFi5cuGPHDg0NDdKhOknHPZnExMRoaGi8evWKoig6nc5gMOrq6ur78uqtWbNGW1t70aJFHRQDoCeTSCTZ2dnnzp3766+/0tPTS0pKWCzWBx98sHDhwvHjx48ePRp9PQSdP3/e3d1dS0vr4sWL+FMLAAAAgAKwsrLav3+/q6srn8/39/cnHaenUFNTGzt2bGpqaku7e2pqampra/E7UUvx+fwNGzZUVFTgkiEAAAAAAAAAAOg60N0DAAAAAAAA3ditW7e0tLQ4HA7pIIpDJBKx2exbt2716dOHdJZ3unr16pdffrlx40ZbW1vSWQAUkEgkio2NjYqKysjI4HA47u7u8+bNGzZsGOlcAAAAHaItvT9y1dXVr1+/rq6uFolE710oLCx866coiurVq9e7DlFXV0dR1IMHD9asWfPVV19RFHX79u0mIr2r/qD5tQhNF7J0QtEPdFn49gF0NA6Hc+LEifDw8M8//zw9PT0yMnLUqFGkQ3Us+fw0+Q+7Nrpw4UJ+fn6jlXZ2dnZ2di9evCgoKCgsLJQ/Pn36tKioqLa2lqIoJSUlBoNRW1sbGBiYm5trZ2fX9iQAQFGUTCZLTEy8devWnTt3qqurWSzWoEGDnJycrKys+vXrR6fTKYoqKCg4fvx4J4T54IMP+vbt2wkH6l7Cw8OXLVvm6Oh48OBBbW1t0nEAAAAAoH1Mnz597dq1S5cutbKyGjduHOk4PYWDg8OOHTta1O3OYrEoiqqoqNDV1e3IaAqIz+fLZDKhUIirhgAAAAAAAAAAoOtAdw8AAAAAAAB0Y3fu3LG0tGz+hS/wXiKRiMlkSqVSPT090lnerqqqytvbe8yYMZ9//jnpLAAKpaamJiUlJTo6OjExkU6nT506NTEx0cnJicHAW4gAAABNUVdXV1dXZ7PZhoaGrRuhtra2qqrKzs6urKysic0YDEZdXZ2WllZJSUl1dXVdXZ2ysnLrjtgVyEt85L/Nyetg6n+za/hhw1/3Gm7caJwmBmziEG/u9eYgb03eaJC3xmu4WaPlt27z3vGb3uDNr967TqSZu795RgDQaWg0WkBAwCeffLJw4cKxY8d+9tlnGzdu7NbP+U2Tn1q7dPd8//33cXFxLd1LKpXKS3xkMtnOnTt37tzZ9iQA8KaXL19euXLlypUrRI5+9OhRDw8PIofummpqapYuXbp3796vv/56/fr1+CMLAAAAgILZsGFDTk6Oh4fH5cuXVaQb0gAAIABJREFU0WLZORwcHFavXn3z5s3Bgwc3cxctLS2Kol6+fInunpbq16+fjo5OdnY2unsAAAAAAAAAAKDrwMQbAAAAAAAA6MZu375taWlJOoVCKS8vV1NToyiqT58+pLO83bJly0pKStLS0uR3ZgaAtsvKyoqKijp8+HBpaamtre3OnTu9vLzkd/kDAACATqCioqKiovL69es3P0Wj0eh0ulgsNjY2njFjhkAg+OCDD+h0+rBhw7pIiUPDJpoW7dVo3zeX36y5efNA9XOMGw343hEaVts03OvNQZo437cuv7Wmp1ErUNO7v/eUm9irYefOe8dsYoNGX7p3ad13HwCaydTUNCUl5ddff12xYsX/Y+/O46KqF/+Pn2GTXUBBEQRRkVURJVzALbVMxbSs9P6KXG4QmZdbVlp6v2Jagd4W2riQ3opccrmamplhruAKKYiAYpILiIAiDDCsM78/5jbf+bKJyMxhhtfzj3kM53zO5/M+Z6BkmHnP4cOHN27c6O7uLnYojTAxMRE6qLtHEITZs2dv3779YWYoKSnhLXOAnqGYppFr167Nnj378uXLu3btmjFjhthxAAAA0PEMDAw2bdo0atSoJ598Mjk52czMTOxE+s/f39/e3j4pKant3T3Kv8iXl5drMpd+kkgkgwcPTk9PFzsIAAAAAAAA8L8MxA4AAAAAAED75eTkeHh4iJ1Cr9y7d0/5jil7e3uxszRjx44d33zzzfr16/v06SN2FkDn3bhxIyYmxsPDIyAgICkp6ZVXXvn999+Tk5PDwsIo7gEAQPtkMpnqvqGhoYGBgYGBQWBg4Jo1a3Jycq5fvx4bGxscHGxgoPG/7rW9kKXd1S2qRptGW4QHfGe16qimEzZL8qdmj2rLJM3mVL8ObTy8le2NQrYlQKO9Tc+rUdq2zH9fFPcAWiCRSMLCwlJTU+vr6/38/GJjY8VOpBHKNrra2lqxg/wXxT0A9NuhQ4cCAwMrKipOnjxJcQ8AAIAes7Ky2rlz59WrV8PDw8XO0iUYGBhMmDDh4MGDbT/E2tpaEASpVKqxUPrMz88vIyND7BQAAAAAAADA/6K7BwAAAACgq2Qy2bVr1zw9PcUOolfKysokEomRkZGtra3YWRq7ceNGWFjYq6+++uSTT4qdBdBhZWVliYmJkydPdnV1Xbt27fjx448fP56VlRUVFdWvXz+x0wEA0HVVV1cre3nMzc1nzZqVmJhYUlJy6tSppUuXittYKlHTaHvHVrcol9BoHYxCTbsnaXtOVWnOA53XfUM2DaBcqI21Rx11ESjuAbTGy8vr1KlTb7311pIlS6ZOnVpYWCh2og6mbJGuq6sTOwgA6DmFQhETEzN58uTJkyenpqZ6e3uLnQgAAACaNWjQoK1bt27evPmzzz4TO0uXMHHixKNHj9bU1LRxvPIDdcrLyzUZSm8NHjw4MzOTp6kBAAAAAADQedDdAwAAAADQVZcvX5bL5XT3dKyysjJBEHr27Kl823DnUV9fP2fOnD59+sTExIidBdBJDQ0NBw8eDA0NdXJyCgsLMzU13bp1a2FhYXx8fHBwsNjpAACA0KtXr5dffvnAgQOlpaXbt2//f//v/3WSPs1mq17aV93SylHKXZ3/dfai52wpgHJjG+t7OiSDFhYCoGJsbBwVFXXs2LFLly75+fn9+OOPYifqSMbGxgLdPQCgYXfu3HniiSdWrlz50Ucfbdy40cLCQuxEAAAA0IbHHnvs3Xffff311w8fPix2Fv03efLkqqqqkydPtnG8hYWFkZGRVCrVaCp95ePjI5VKb9y4IXYQAAAAAAAA4L+MxA4AAAAAAEA75eTkGBkZDRgwQOwgeqWsrKxnz54ODg5iB2ksKirqt99+O336tJmZmdhZAB1z8eLF77777ptvvrl9+/bw4cPfe++9559/vkePHmLnAgAA/0d2drZ2FlI2vCi7V5qWsLSllqXRmDY2ubR92MNPct+jHr59Rj1no0vajvmbHd/6JOoBWj+8pXnasuh9Lx09PoA2jR49Oi0tbdGiRTNmzFi0aNG6detMTU3FDtUB6O4BAE1LS0t75pln6uvrjxw5MnLkSLHjAAAAQKvefvvtjIyM2bNnnz17tn///mLH0Wdubm79+/c/fPjw+PHj23iIpaVleXm5JkPpLV9fX4lEkpmZ6eLiInYWAAAAAAAAQBAEwUDsAAAAAAAAtFNOTk7//v27desmdhC9UlZWVldX17NnT7GD/B/Hjh2Ljo6OjY0dMmSI2FkAnVFQUBAbGzts2DBfX9/vv/9+3rx5V65cSU1NjYyMpLgHAICuQCKRqHpkGhXiKLtmHqZ1RaLmvks3XUu1t+lRqrqZpuGb7ZFpNLjp5KqjVGfdtGenaapmEzabU7mx0SVV5VSv9Wk0bdM8LW1sS4CmhzT7KD/Qoi1laP3RB6BRNjY2mzZt2rRp08aNG0eOHJmTkyN2og5gYmIiCEJtba3YQQBAPyUkJIwePdrNzS01NZXiHgAAgC5IIpF8/fXX/fr1e+qppyorK8WOo+fGjRt39OjRto+3tramu6d9unfv3qdPn4sXL4odBAAAAAAAAPgvunsAAAAAALoqJyfH09NT7BT6RiqV1tTUdKruntLS0hdeeGHGjBlhYWFiZwF0gEwm2759e0hIiKura1RUlK+vb1JSUl5eXnR09IABA8ROBwAAtEfxfzW7t9mjHnTmliZvZUzTjepbmj22jQs1O1VL67by5X1PraXJm17DtgdoZWPrAVpP28oMrWxsKYOiiWZzAtCouXPnpqenW1hYDBs2LDY2Vuw4D8vY2NjQ0FAmk4kdBAD0jUwmW7hw4csvv/zaa68lJSU5ODiInQgAAADiMDMz27lzZ0FBQWhoKE/oadS4ceNOnTrV9mc5rKyspFKpRiPpMV9fX7p7AAAAAAAA0HnQ3QMAAAAA0FV093S4ysrK+vp6mUxmZ2cndpb/NX/+fLlc/tVXX4kdBOjU5HJ5cnJyeHh4r1695s6dW11dvWHDhoKCgsTExEmTJkkkErEDAgAAAAA6jIuLy9GjR996663XX389NDS0oqJC7ETtJ5FIbGxsSktLxQ4CAHrl8uXLI0aM2L179/79+6Ojow0MeJUgAABAl+bq6rply5Y9e/asXbtW7Cz67NFHH62pqTl16lQbx1tbW9Pd024+Pj509wAAAAAAAKDz4K/yAAAAAACdJJfLL1++7OHhIXYQvVJWViYIQlVVVY8ePcTO8l9ffvnljz/+uGnTps4TCehssrOzo6KiBgwYMGbMmLS0tNWrVxcUFCQlJYWGhpqZmYmdDgAAANqm7G2kvRHQe0ZGRlFRUQcOHEhKSgoICDh//rzYidrP1taW7h4A6EA7duwIDAw0MTE5e/bs448/LnYcAAAAdAoTJ05cu3btO++8s2/fPrGz6K2+ffu6ubkdPXq0jeOtrKzKy8s1GkmP+fj4ZGVlyeVysYMAAAAAAAAAgkB3DwAAAABAR12/fr2qqsrT01PsIHpF2d1TXl7eSYpysrOz33jjjXfeeWfs2LFiZwE6nbt37yYkJAQHB3t7e2/YsOG55567dOlSampqZGSkg4OD2OkAAAAgGsWfxA4CQBsmTZp0/vx5FxeXUaNGxcbGih2nnWxsbOjuAYAOUVlZuWDBgmeffXbBggUnTpxwc3MTOxEAAAA6kddee23evHl/+ctfsrOzxc6it8aPH3/kyJE2Dra2tpZKpZqMo898fHyqqqr++OMPsYMAAAAAAAAAgkB3DwAAAABAR+Xk5AiC4OHhIXYQvdKpunvq6upefPFFb2/vf/zjH2JnATqRmpqavXv3Pvvss717937zzTf79++flJR0/fr16OjoQYMGiZ0OAAAAAKBtvXr12r9//1tvvbVkyZJnnnlG+fSObrG1taW7BwAeXnZ29qhRo/bs2bNnz56PPvrIxMRE7EQAAADodL744gtPT89Zs2bp4hMIOmHcuHGnTp2SyWRtGWxlZVVeXq7pSPrKx8dHIpFkZmaKHQQAAAAAAAAQBLp7AAAAAAA6Kicnp1evXp2hYkafKF+bVV1d3Rku7D/+8Y+srKzNmzcbGxuLnQXoFNLS0iIjI52cnGbOnFlaWrp+/fqCgoLExMRJkyZJJBKx0wEAAAAARGNoaLhq1aqkpKSUlJTAwECde89S7969b926JXYKANBtiYmJAQEB5ubmZ8+enT59uthxAAAA0EmZmpr+8MMPUqk0NDRULpeLHUcPPfroozU1NadPn27LYGtra6lUqulI+srS0tLV1fXixYtiBwEAAAAAAAAEge4eAAAAAICOunTpkoeHh9gp9E1ZWZmBgYEgCKJ39xw/fvyf//xnbGzsoEGDxE0CiO7atWsxMTEDBw4MCAg4ePDgm2++mZ+fn5SUFBoaamFhIXY6AAAAAEBnMWHChPT0dGdn58DAwG+++UbsOA/A2dn55s2bYqcAAF0llUr/8pe/zJs3769//evx48fd3NzETgQAAIBOzdHRcfv27QcOHHj33XfFzqKH+vbt269fvyNHjrRlsJWVVXl5uYYT6TMfHx+d67AGAAAAAACAvjISOwAAAAAAAO1x+fJlWl06XHl5ubm5eUVFhbjdPWVlZS+88ML06dMXLlwoYgxAXPfu3duzZ893333366+/Ojo6zp49+8UXXxw2bJjYuQAAAAAAnZe9vf2BAwdWrFgxf/78kydPfvbZZyYmJmKHuj8nJ6f8/HyxUwCATkpLS5szZ055eflPP/00ZcoUseMAAABAN4wePfpf//rXggULfHx8nnnmGbHj6Jvx48cfPXq0LSOtrKykUqmm8+gxHx+fAwcOiJ0CAAAAAAAAEARBMBA7AAAAAAAA7ZGbm+vu7i52Cn1TVlZmbm4uCIKdnZ2IMV555RWZTBYfHy9iBkAstbW1e/fuDQ0N7dOnT3h4uK2t7e7du69duxYbG0txDwAAAADgvoyMjKKjo7ds2bJp06ZHH320oKBA7ET35+zsXFJSIpPJxA4CALpEoVDExsaOHj3axcXl/PnzFPcAAADggcybNy8sLGzBggWZmZliZ9E3wcHBp0+frq2tve9Ia2vr8vJyLUTSVz4+Pjk5OfX19WIHAQAAAAAAAOjuAQAAAADoIJlMlp+fT3dPhysrKzM1NTUwMLCxsRErw6ZNm7Zs2fL111/36tVLrAyAKNLS0iIjI/v27Ttz5syrV69+8sknRUVF27ZtCwkJMTIyEjsdAAAAAECXzJkzJzU1tbS0dOjQoYcOHRI7zn24uLgIgnD9+nWxgwCAzigrK3v22WffeOONt99+OykpydHRUexEAAAA0D2fffbZ8OHDZ8yYUVJSInYWvRIUFCSTydLT0+87ku6eh+Tr61tTU/P777+LHQQAAAAAAACguwcAAAAAoIN+//13uVxOd0+HKysrMzExsbGxMTQ0FCXAzZs3Fy9evHjx4qlTp4oSANC+mzdvxsTEeHh4BAQEJCUlRUREXLlyJTk5OSwszMrKSux0AAAAAABd5enpeeLEiaCgoClTpsTGxoodpzUeHh4GBgY5OTlaWEvSskZjWjqw7Uu0McDDnI7+0YML0u5TaP3Ah78yevMtpzcn8jAOHTrk6+t75syZI0eOREVFGRjwCkAAAAC0h7Gx8datW+vr6//yl780NDSIHUd/eHh49OzZMyUl5b4jrays6urqqqurtZBKL3l5eRkaGl68eFHsIAAAAAAAAADdPQAAAAAAHZSbmyuRSAYMGCB2EH1TXl5uaGjYo0cPUVaXy+WhoaGOjo7R0dGiBAC0qby8PDExcfLkyS4uLmvXrh0/fvzx48ezsrKioqLc3NzETgcAAAAA0Afdu3ffuXPnunXr3njjjblz58pkMrETNc/c3NzZ2Tk7O1s7yyn+1Oi+kkQiUW5p2gzS0nZ1qsNbGtl06S5eQdKI+mOhizRU3CM89JW573emrtCbE2m3mpqaN998c/LkySNGjDh37lxQUJDYiQAAAKDbevXqtXv37pSUlHfeeUfsLPpDIpGMHDmyLd091tbWgiBIpVLNh9JPZmZmbm5udPcAAAAAAACgM6C7BwAAAACge3Jzc52dnc3MzMQOom/KysoEQRCru2ft2rUnTpzYtGkTjyz0mFwuP3jwYGhoaJ8+fcLCwkxNTbdu3VpYWBgfHx8cHCx2OgAAAACAvpFIJJGRkfv27fv5558nTpxYWFgodqLmeXl55eTkiJ3iv7UgyvvqzSAtbW9dG0d22QoScWnomre7YUebpUWdrSCp3Y9FF/zZycrKGjVqVHx8fFxc3I4dO+zs7MROBAAAAH3g7+8fHx+/bt26LVu2iJ1FfwQFBSUnJ993mJWVlSAI5eXlmk+kt3x9fenuAQAAAAAAQGdAdw8AAAAAQPfk5ua6u7uLnUIPlZWVKRQKUbp7zp07t3LlyjVr1gwdOlT7qwNacPHixWXLljk5OU2ePDkrK+u99967efPm3r17n3nmGWNjY7HTAQAAAAD02WOPPXbmzJm7d+8GBASkpaWJHacZXl5eWVlZWliopdaSjmoz6WytKICe6bI/YgqFIiEh4ZFHHjExMfntt9/CwsLETgQAAAC98vzzz0dGRi5YsCA1NVXsLHoiKCiosLAwLy+v9WHW1taCIEilUq2E0k8+Pj6ZmZlipwAAAAAAAADo7gEAAAAA6CC6ezSkrKysoaFB+9091dXVoaGhI0eOfO2117S8NKBpBQUFsbGxw4cP9/X13bJly4svvpibm5uamhoZGdmzZ0+x0wEAAAAAugp3d/cTJ054eHiMGzdu165dYsdpzM/PLyMjo6amRuwgIpNIJMpb5R3VRvUv1Tc22t7Gjc0Oa3rIfYO1tOshszXa3mhMG8M3O16i5r6ZG41p6QrcN899R7by6DS63/pUrSRpy7k0O6HQ3FVq6exaGtD6tW360DTdi9u3b4eEhCxatGjx4sXHjx8fOHCg2IkAAACgh/75z3+OHz/+6aefLioqEjuLPggMDOzWrVtKSkrrw6ysrARBKC8v10oo/eTj45Obm1tXVyd2EAAAAAAAAHR1dPcAAAAAAHQP3T0aUlZWVldXp/3unjfeeCM/P3/Tpk2GhoZaXhrQkOrq6u3bt4eEhLi6ukZFRfn4+CQlJf3xxx/R0dG8uwYAAAAAIAo7O7sDBw4sWLDg6aefjoqKUigUYif6XyNHjqypqUlPTxc7SPMUCoV6fUkbj5JIJG25yKphqsoShUKhOlD1ZaPqE8Wf1IO1srHpsa3naXrKzR7YdFc7sqk2qnYpp2p62+w8zYZXDWh2qkZ3WkrS6FI0e2Vaz9P6Q9bsnM0Gbt+jr6J+vm38Nmt6ys1+K7Y0uJW0jQarZ2vpcW/9qrYyQD/s3LnT19c3KyvryJEj0dHRxsbGYicCAACAfjI0NNy0aZOxsfHTTz9dW1srdhyd161bN39///t291hbWwuCIJVKtRJKP3l4eNTW1ubl5YkdBAAAAAAAAF0d3T0AAAAAAB1TWVl569Ytuns0oaysrLq62s7OTpuL/vLLL19++eWXX37p7OyszXUBTZDL5cnJyeHh4Q4ODnPnzq2urt6wYUN+fn5iYuKkSZP4qHAAAAAAgLiMjIw+/fTTf/3rX++///6cOXOqqqrETvRfHh4ednZ2p06dEjtIi9TrS9oy/r4jJX9SDWtaVtJob7NPLDQar9T6sJa2tLRiKy0qze5qJUbrgdtybVufvNkBjQpr2nJUo/Nq6Qqod9+0HrvZkU0f/fse3sr2+14Z9UPu+23WdFgrCZterqaPaUvXtt26QnGPVCoNDw9/+umnn3jiiYyMjKCgILETAQAAQM/Z2dnt3Lnz3LlzS5YsETuLPggKCrpvd4+ZmZmxsXF5ebl2IuklDw8PiUSSk5MjdhAAAAAAAAB0dXT3AAAAAAB0zJUrVxQKBd09mlBeXl5VVdWjRw+trXjv3r2//vWvc+bMmTNnjtYWBTQhOzs7Kipq4MCBY8aMSU5OXr58eUFBQVJSUmhoqLm5udjpAAAAAAD4X2FhYfv27UtKSnr00UeLiorEjiMIgiCRSAIDA0+fPi12kNYoFAplKYl6HUmzhSltaRVR/KnDE6pPq6ocUh/TloaXjo3RjpEtFe7cd/JmBzR64B4mcyNtb3Rq+8i2lA01e5Qmvqke3gOVXrXx3LtCcc+ZM2eGDx++c+fOXbt2JSYmWlpaip0IAAAAXcKQIUO+++67L774Yv369WJn0XmjRo26ePHifXt5rKyspFKpdiLpJQsLC2dnZ7p7AAAAAAAAIDq6ewAAAAAAOiY3N9fAwMDNzU3sIPqmpqampqZGy909ixYtqq+v//zzz7W2ItCx7t69m5CQEBwc7O3tvWHDhpCQkPPnz1+8eHHp0qUODg5ipwMAAAAAoHmTJ08+depUSUnJ6NGjc3NzxY4jCIIwatSo48ePi53iwTTbltLZWkVUlUOtbNF7ygelw09ZOW0bi3s6YauOFmjixDvbj1iHq6mpeeedd4KCggYMGHDhwoWZM2eKnQgAAABdy6xZs5YtW/bKK6/o3C/pnU1gYKBcLv/tt99aH2ZlZXXffh+0ztPT89KlS2KnAAAAAAAAQFdnJHYAAAAAAAAeTG5urouLi6mpqdhB9E1ZWZkgCHK5XGvdPT/88MOWLVt+/PFHOzs77awIdJSamppffvnlu+++++GHH4yMjKZPn75nz56pU6caGhqKHQ0AAHQJH3/88fbt28VOAbTJzZs3xY4AoHmDBg06ffr0jBkzRo4cuWfPnqCgIHHzPPbYYytXrszKyvL29hYrg7LeRVkL0rQfRNn80nppSKOjHrJkpPU8rSzR+lm0EqktK7Zd69nanqrtkzc7QHVH/examqR9Z932VqBGJUrqIduxeodczI560Fuf5L6XqNHDdN9hzX6pB1JTU+fNm3ft2rVPP/305Zdf7lIdWwAAAOg81qxZc+HChWeffTY1NdXJyUnsOLqqb9++ffr0OX369Pjx41sZZm1tLZVKtRVKP3l6eqalpYmdAgAAAAAAAF2dgdgBAAAAAAB4MLm5ue7u7mKn0EOqD/LSTndPUVFReHh4WFjY1KlTtbAc0FHS0tIiIyOdnZ1nzpxZUFDw+eefFxUVbdu2LSQkhOIeAACgHbNnz3Z2dhY7BdBWzs7Os2fPFjsFgOb16NHjl19+GT169GOPPbZ3715xwwQGBjo4OOzfv18La0kkElVVSqNqDGVvSNN+EOWWtrSESNQ80NKq7ffNo9qovr3ZjerhW9nS+orNBmtpV9uzNd3YaLamVTstnWMrA9TnbDR/o7KYVpK0Pon6Ua1fq0bzN73ajS5Osw/BAz36jQ5vKWHrD3orp9/6JG2/RE2PauVnTaKmpTG6qK6uLiYmZvTo0ba2tr/99ltERISenSAAAAB0iIGBwebNm+3s7GbPnl1TUyN2HB0WGBh45syZ1sdYWVmpXq6D9vHw8MjJyRE7BQAAAAAAALo6I7EDAAAAAADwYK5cuTJ48GCxU+gh1Qd5aae7Z+HChRYWFuvWrdPCWhBRTU1Nt27dxE7RAa5fv75ly5b169dfuXLF29v7jTfeCA0NdXR0FDsXAADoirZv3y52BACA/rCwsPjhhx9effXVWbNmffbZZxEREWIlMTAwmDRp0v79+5csWaLptVqv4Gm6ty2VPW0c2cqAVsp02r2xfefS9haVh8nWloXakb+VOVu6/0BftnHCVlK1NHkbF21prXZ8a7Uy5uFPs+3Htv3n60EH65CMjIx58+ZdunRp9erVb775poEBn8YHAAAAkVlZWe3cuXPEiBFhYWHffvut2HF01YgRIz777LPWx1hbW6teroP28fT0vHv3blFRkYODg9hZAAAAAAAA0HXxl34AAAAAgI65evVq//79xU6hhyoqKpR3bG1tNb3W+vXrf/rpp6+//trKykrTa0EslZWVixcvdnZ23rx5s9hZ2u/evXuJiYmTJ0/u169fbGzs1KlTU1NTL168uHTpUop7AAAAAAD6wdDQMC4u7r333lu0aFFkZKSI1RhPPPHE8ePH+bR5oCuTSCT6WtDTrLq6upiYmEceecTc3Pz8+fNLly6luAcAAACdhIeHx9atWzdt2vTFF1+InUVXjRgxoqCgID8/v5Ux1tbWPBPykDw8PARBuHTpkthBAAAAAAAA0KXxx34AAAAAgC6pqam5deuWm5ub2EH0kPKDvExMTCwtLTW60B9//LFkyZI33nhj3LhxGl0IIjpy5MiQIUM2b948adKk559/ftasWYWFhWKHegANDQ0HDx4MDQ11cnIKDw+3tbXdvXv39evXY2Njhw8fLnY6AAAAAAA63tKlS//973/HxcXNmzevrq5OlAzTpk2TSCQ7d+4UZXUA7SORSFS3DzlPVyvuycjIGDFixLvvvvvuu+8eO3bM3d1d7EQAAADA//H444+vXLny73//+5EjR8TOopMCAgIMDQ1Pnz7dyhgLCwvVR22hfZycnKytrXNycsQOAgAAAAAAgC6N7h4AAAAAgC65du2aXC6nu0cTpFKpRCKxtbXV6CpyuXz+/PnOzs6rVq3S6EIQi0wmW7Zs2cSJEz09PTMyMrZs2XL8+PGLFy96eXklJCSIne7+Ll68uGzZsj59+jz++ONXr179+OOPi4qKtm3bFhISYmRkJHY6AAAAAAA0aN68eT/88MN//vOfWbNmVVdXaz+Ara3ttGnTNm7cqP2lAbSb4k8dMk+HROr86urqYmJiHnnkEXNz8/Pnzy9dutTAgFfxAQAAoDNasWLFU089NXv27Ly8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y+VKpdLa2nrChAmTJ08eN25cy5Ytq+1SUlISHh7euEJwEhMTAwMDs7OzDRU5BAAAAAAmoFar8/PzFQpFUVFRaWlpSUlJUVGRQqEoKChQqVSaqKDc3FxNVJCmmSYDKDc3V6FQFBYWVnpa00Ryudza2lob5WNubm5tbW1lZWVubu7g4GBubm5lZWVtbW1ubm5vb29hYdGyZUsbGxtzc3M7O7tKT015fjTCw8MjIiIkEolKpfL19Q0NDR0zZow+HXVjXKKjo62trY1d6kNpA25iY2NHjx4tdjmGwXkGAAAAAABAA0d2DwAAAADAAN59990ff/zxypUrYhcCo9i8efO0adOKiorqE8JSXl7u6enZvn373bt3G7A20aWmpq5du3bjxo1qtTogIODNN98cNGiQ2EU1CEVFRaGhoT/++GNMTMyLL74odjkwkYCAgJ9++knsKoAm5bnnnms4WTlk96DZIrunMTJqwo5arY6KigoLC+vdu/f69esNlQpUH7phPceOHbtz544gCO3bt/fx8fH29nZ3dx88eHBN0QnNWaP+JnBAXLwzopK33nrrk08+adOmzXPPPTdp0qRRo0bp+eablJQUGBiYlZXVwNNwiouLly5d2riShgAAAADASDTRPzk5OZqgn8LCQoVCkZubW1ZWVlxcXOmpJg8oLy9PExukSRHKz88vKSkpLS2taQpra2sbGxtbW1sbGxt7e3s7OzsbGxvtFgcHB80D7U97e3tbW1uZTFbng5o3b15sbKxSqRQEQSaTqVSqvn37LliwYPr06S1atKiplza9JS4uztfXtw7zVvoVpWZ1j+7Guq330U26iYqKsrGxqcMgDQfnGQAAAAAAAA0f2T0AAAAAAAPo27fv008/HR0dLXYhMIoTJ064ubmdOnXK1dW1PuP89ddfvr6+e/bsefLJJw1VWwORk5OzYcOGNWvWnDlz5vHHH3/llVeef/55R0dHsesSzd9//z1z5szc3NyxY8du3rzZ399/1apVTk5OYtcFowsICLh58+abb74pdiFAE/Hpp5927Nix4WTlkN2DZovsnsZFpVJFR0cvWbKkb9++69atM16wjlHjgR4qNzf31KlT2ryejIwMQRDat2/v/i9vb+/mfEuiJzMzswULFgwdOlTsQoBG5vnnn+edEZX8/vvv1tbWjz/+uEQiedS+JSUl4eHhDTkWJzEx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J5544r///a+bm5vUWdCxnTp1ysvL6+jRo53vbUbl5eVLlizJyMhYvXp1bGys1HEAiyaTyV577bVx48a1ZZATJ04kJibKZDIrK6u6ujr9G93kcrm9vX2vXr369u3r4uLSq1cvZ2fn3r17Ozk59enTx8rKyhRnAFiKQ4cOvffee115Dr+srKygoECj0Wg0GrVa/dNPP1lZWQ0bNizgV2PGjOnWrZvUMU2m/pK/Blp7GqisrExISOgiiwMDbaTVateuXbty5UpfX9+tW7caaO1p4Pz585GRkYcPH46Ojk5MTLS2tjZrTgAAAKC+tLS0efPmPfnkk1IHAUzp8OHDY8eOTU9PlzpI68lksh07doSHh0sdBIAgCEJYWJggCB36pwrMx/Dce+ebY//pp5/27t372WefHTx4sK6uTqVShYaGPv7444MGDZI6Wgem0+lUKlVtbW1OTk4b/yS9ffv255577s6dO927dzdVPEjr/PnzQ4cO3b9//6OPPip1FgAAAAAAAEhJIXUAAAAAAIDEMjIyxo4dS3EP2m748OFOTk65ubmdr7vHzs4uPT397bffXrFixfHjx//+97/b2tpKHQqwXOPGjWvjJxbKy8snT548YMCAgQMHurm5DRgwoH///u7u7v369WMFSHQp7733ntQRpGRvb69SqVQqlfjllStXNL9atWrV7du3ra2tR40apVQqxSofLy+vDvojoqKiYtWqVeJnAw4cONCizwbY2tquWbMmNDQ0MjLSx8enRb0/QJdSVFQUERFRWFiYkJAQExPTos9XeHp6ZmZmbtmyZfny5fv3709JSfHz8zNfVAAAAKC+gQMHUtyDzmfs2LFt7H8HAOC+jJl718+xR0REdNw5dp1Od+zYsb179+7bty8vL69Hjx6TJk1KTk6ePXt2v379pE7XGaxfv178+1Tb15I5dOiQv78/xT2diaen57hx41JTU+nuAQAAAAAA6OJkXXnNXgAAAABAbW2tm5tbTEzMG2+8IXUWdAZTpkxxd3dPTU2VOoi5/Pvf/54/f/6gQYM+/fTTBx98UOo4gCVitWHAVNLS0ubNm8ccfnMuXLigVqvFt0ofPXq0qqrK0dHRx8dHpVIplcqxY8f26dNH6oxGMbzkr/E63+LAgKlotdq1a9euXLnS19d369atXl5erR7q/PnzkZGRhw8fjo6OTkxMtLa2NmFOAAAAAEAHwkw4YFHCwsIEQUhPT5c6CCxIS+feO+Ice2VlZXZ29t69e3fu3HnlypUHH3xw6tSpM2fOnDp1qo2NjdTpOo9Lly75+Pi8/vrr8fHxbR/Nz89v8uTJ7777btuHguXYvHnzq6++evXqVScnJ6mzAAAAAAAAQDJyqQMAAAAAAKSkVqtv3Lgxe/ZsqYOgkwgODs7NzZU6hRlNnz79yJEj1dXVgYGBBw4ckDoOAABdl4eHx6JFi9atW6dWq8vKyo4ePZqQkODh4bF3797Zs2f37dvX3d09NDQ0KSlJrVZXVlZKnbcJFRUVcXFxDz/88JAhQ06cONHGtXzFxYEPHjx4/vx5Hx+fzZs3myon0KEVFRUplcr4+PiEhIScnJy2FPcIguDp6ZmZmZmcnLxhw4YxY8bk5+ebKicAAAAAAAAAk2jd3Lt+jv3cuXMWPsd++fLlTZs2zZw508XFZerUqbm5uS+99FJhYeHFixc3bdoUGhpKcY9pRUVFDRgw4M0332z7UGVlZSdOnBg3blzbh4JFmTdvnkwm27lzp9RBAAAAAAAAICW6ewAAAACgS8vIyBgxYsSwYcOkDoJOIigo6OzZs8XFxVIHMaMhQ4YcOnRo4sSJjz76aFJSktRxAACAYG1tHRAQ8Oqrr27btu3kyZPFxcVZWVmvvvqqIAh//etfJ0yY4ODg4O3tLXb9aDQanU7X6mNdv37dJKs3q9VqPz+/TZs2bdy48fPPPzfVEr5KpTI/P3/ZsmUvvPDCY4899vPPP5tkWKAj0mq1SUlJ/v7+giBoNJrY2FgrK6u2DyuXy6OiogoKChwcHIKCguLi4mpqato+LAAAAAAAAIC2a+Pcu1KpLCgosMA5dq1W+/3338fGxo4aNerBBx98/fXXFQrFhg0brly5cvjw4RUrVowcOVLqjJ3TRx999M0333z44YfdunVr+2i5ubm1tbVjx45t+1CwKI6OjrNmzUpNTZU6CAAAAAAAAKREdw8AAAAAdGkZGRlz5syROgU6j7Fjx9bV1R09elTqIOZlb2+/c+fO1atXr1ix4plnnqmsrJQ6EQAA+D+Ojo4qlSo2Nnbv3r3Xrl37+eefd+/eHRoaeuHChRUrVgQGBoobiF0/Fy5caNHghw8fDg8Pf+SRR86dO9e6eK1b8td4+sWBz58/b+GLAwPmU1RUpFQq4+PjExIScnJyvLy8TDu+p6dnZmZmcnLyhg0bxowZk5+fb9rxAQAAAAAAALSIqebe9XPs586dk3yO/caNG+np6YsWLerTp89vfvObnTt3jhs37rPPPrt58+aePXuWLl3ar18/CeN1elevXv3d7373yiuvjB8/3iQD5uTkPPTQQ6ZazgEWZfHixdnZ2T/++KPUQQAAAAAAACAZunsAAAAAoOsqKCi4cOHC7NmzpQ6CzqNv374PPvhgbm6u1EHMTiaTxcbGfvbZZ/v27VOpVJcvX5Y6EQAAaJq7u3toaOiaNWvUanVJScmJEyf+9re/BQQEZGdnR0REDB48WNwgPj5+7969t2/fNjzakSNHFApFVlaWl5fXH/7wh5ZW+LVxyV/jKZXK/Px8C1wcGDA3rVablJTk7+8vCIJGo4mNjbWysjLHgeRyeVRUVEFBgYODQ1BQUFxcXE1NjTkOBAAAAAAAAMAwk8+9K5XKgoICSebYdTqdRqNJSkpSqVSurq6LFi26evVqXFzcyZMnf/zxx02bNoWGhnbv3r3d8nRlUVFRzs7Oq1evNtWAhw4dMlUNECzNo48+6urqum3bNqmDAAAAAAAAQDJ09wAAAABA17Vnzx53d/egoCCpg6BTCQ4O7grdPaLHHnssNzf33r17gYGBmZmZUscBAAD3oVAovL29Fy1atG7duqNHj5aUlGRlZcXGxjo7O6enp8+aNcvFxWXw4MHiBmq1uqqqqsEI2dnZtbW1NTU1Wq12zZo1gwYN2rlzpzGHNtWSv8bTLw58/vx5yRcHBtpHUVGRUqmMj49PSEjIycnx8vIy9xE9PT0zMzOTk5M3bNgwZsyY/Px8cx8RAAAAAAAAgJ755t71c+znzp1rhzn2X3755R//+MfChQv79esXGBj4wQcfjBo1KiMj49atW19//XVsbGw7zHaivi1btnzxxRcfffRRz549TTJgXV1dbm7uuHHjTDIaLI2VldWCBQtSU1N1Op3UWQAAAAAAACANunsAAAAAoOvKyMiYPXu2TCaTOgg6lS7V3SMIwtChQw8fPqxSqaZMmbJ+/Xqp4wAAgBaws7NTqVSvvvrqtm3bTp48eeXKlc8+++yZZ54pLi5OTEycMGGCvb29t7f3smXLxA10Ot3Ro0fr6urE3bVa7Y0bN8LCwqZPn/7TTz8ZOJDJl/w1nlKpzM/Pl2RxYKA9abXapKQkf39/QRA0Gk1sbKyVlVX7HFoul0dFRRUUFDg4OAQFBcXFxdXU1LTPoQEAAAAAAICurB3m3pVKZUFBgZnm2CsrK7/66qvf/e53vr6+7u7uS5cuvXr1amxs7MmTJ3/66af3339/5syZPXr0MOERYaSLFy++/vrrMTExEydONNWYRUVFxcXF48ePN9WAsDRLliy5dOlSVlaW1EEAAAAAAAChN/6FAAAgAElEQVQgDbp7AAAAAKCLunTpUn5+/uzZs6UOgs4mKCjoxo0bhj++3snY29vv3LkzLi7utddee/7556urq6VOBAAAWsPNzS00NDQ+Pn7v3r3Xr18/efLk5s2bH374YY1G8+yzz/r4+Li4uJSXl9ffRVw889tvvx0+fHh8fHxVVVWDMc235K/x9IsDnz9/vh0WBwbaX1FRkVKpjI+PT0hIyMnJkWQBak9Pz8zMzOTk5A0bNowZMyY/P7/9MwAAAAAAAABdRHvOvevn2M+dO2eSOfYLFy5s3rw5NDS0V69eU6dO3b1799ixY3fs2HHjxo1vv/02JiZGkhlO6Ol0usjIyP79+yckJJhw2JycnJ49e44aNcqEY8KieHt7+/v7p6amSh0EAAAAAAAA0qC7BwAAAAC6qIyMDAcHh0mTJkkdBJ1NQECAtbV1bm6u1EHalVwuT0xM3LVr1z//+c/f/OY3pl1tDwAAtD+5XO7l5bVkyZL333//6NGjpaWlOTk5M2bMkMub+MNKTU1NdXX1n/70p2HDhu3fv19/fzss+Ws8pVKZn59vpsWBAalotdqkpCR/f39BEDQaTWxsrJWVlVRh5HJ5VFRUQUGBg4NDUFBQXFxcTU2NVGEAAAAAAACAzkqSuXelUllQUNDqOfbr16+np6cvW7ZswIABgwcP/v3vf29ra7tu3bpLly79+OOPmzZtCgsLc3BwMFN4tMiGDRuysrJSU1O7d+9uwmHVanVQUJBCoTDhmLA0ixcvTk9Pb7AQCAAAAAAAALoIunsAAAAAoIvKyMiYPn26jY2N1EHQ2dja2vr4+Bw5ckTqIBJ4/PHHxc/2+/n5ffPNN1LHAQAAJtO9e/dx48Y5OzsbeFO1Vqv973//O3369Mcee+zMmTNtXPJX9r8a39mKs9AvDnz+/HmTLA4MSKuoqEipVMbHxyckJOTk5LRiMWpzPNE8PT0zMzOTk5M3bNgwZsyY/Pz8VgwCAAAAAAAAoLGKioo2zr23hX6O/dy5c8bMsVdWVn7zzTdxcXGBgYGurq7z588/efLkyy+/fPTo0WvXrqWlpUVFRT3wwAPtEx5GOnPmzIoVK37/+9+PGTPGtCNnZmaGhISYdkxYmgULFlRXV+/Zs0fqIAAAAAAAAJAA3T0AAAAA0BXdvn374MGDs2fPljoIOqfg4ODc3FypU0hj6NChhw8fnjRp0rRp05KSkurq6qROBAAATEatVldXVxvYoLa2ViaTffHFF15eXuvXr//b3/7W6iV/6+rqxP+R0N8Qbze4pxWUSmV+fn6rFwcGTKK8vLykpKTVu2u12qSkJH9/f0EQNBpNbGyslZVVK8Yx0xNNLpdHRUUVFBQ4ODgEBQXFxcXV1NS0bigAAAAAAAAAIrVa7efnt2nTpo0bN7Z67r3tlEplQUGBgTn2kydPJiUlTZkypVevXlOmTElPTw8ICNixY8ft27fVanVsbGxAQIBczoc4LFF1dfWCBQu8vLx+//vfm3bkc+fOXb58edKkSaYdFpbGxcVl+vTpqampUgcBAAAAAACABJj2BQAAAICuaN++fTKZbNq0aVIHQecUHBycl5dn+JPtnZidnV1aWtr777//hz/8Yc6cOW35TDIAAJDEqVOnzp492+DOqqqqoqIi/Zcymcza2lqhUOi/dHFxGT16tJeXl0wm8/HxSU1Nffrpp9uYpK6uTiaT1T+oSZoB9YsDnz9/3pjFgQGTO3PmTL9+/ebMmbNr16579+61aN+ioiKlUhkfH5+QkJCTk+Pl5dXGMGZ6onl6emZmZiYnJ2/YsGHMmDH5+fltHxMAAAAAAADogioqKuLi4h5++OEhQ4acOHEiKipK2jz6OfZz586Jc+zXrl1LT09ftmxZ//79fXx81q5d6+zsvG7dusuXL//444+bNm0KCwuzt7eXNjbua8WKFadPn/7HP/5hbW1t2pG/++67Hj16jBkzxrTDwgItXrz4u++++89//iN1EAAAAAAAALQ3unsAAAAAoCvKyMh45JFHnJycpA6CzikoKOjevXvHjx+XOoiUoqKivvnmmyNHjgQFBZ08eVLqOAAAoAWysrKGDRvm5eW1evXq06dPi3fm5+fX1NQIguDg4DBy5Mi5c+e+9tpr69ev//e//33q1KmKioo9e/aUl5f//PPPH3zwQUFBQVhYmKOjY9vD6FtFTNUnoqdUKvPz8w0sDgyYVVVV1b59+8LCwlxcXBYtWvTll1/W1tYa3kWr1SYlJfn7+wuCoNFoYmNjraysTBLGTE80uVweFRVVUFDg4OAQFBQUFxcn/hgBAAAAAHR6suY12MzACEYOa/r0RjDtcaU6i1Zo8uJL/u0wh/pnZwkx0JWp1Wo/P79NmzZt3Ljx888/79+/f0tHMNMzV6lUFhQUiHPsAwcOXLRo0cWLF5cvX56fn3/t2rW0tLSoqKiBAwe2bnC0v6+++uqvf/3r3/72t2HDhpl88AMHDkycONHGxsbkI8PSPPbYY7169frHP/4hdRAAAAAAAAC0N7p7AAAAAKDLqays/PLLL2fPni11EHRaI0aMcHJyys3NlTqIxCZOnHj06FEXF5exY8emp6dLHQcAABhLoVDI5fJTp04lJCSMGDFi2LBhq1atqqqqys/PLykpKSkpKSws3Llz59tvv/3CCy9MmzbtgQceiI+Pt5wlf42nXxz4/Pnz4uLAUidC11JbW1tXV1dRUfHJJ59MmzatV69eixYt+uabb5pszykqKlIqlfHx8QkJCTk5OV5eXu0fuHU8PT0zMzOTk5M3bNgwZsyY/Px8qRMBAAAAANpD3a8a3BYZboto7qHGA+rraNuZCatvO1Y5S4Nvgf7OBvd0dPW/KRKeVMf6t4HmfPjhhxcuXGjdvhUVFXFxcW2fezffM1c/x+7m5tatW7cnnngiJibG19eXf70dzo0bN5YsWfLkk08uXrzY5IPX1dVlZmZOmjTJ5CPDAtnY2Dz11FMpKSmd5v8KAAAAAAAAYCS6ewAAAACgy/n6668rKipmzpwpdRB0WjKZLCAggO4eQRD69+9/8ODBl156KTw8fNmyZTU1NVInAgAA96dQKMQbWq1WEISzZ88mJiY+/PDDoaGhf/jDH9Rqdf2N277k732JH8Ey33t8lUplfn6+uDjwY4899vPPP5vpQEBzxOdaaWnpjh07pkyZ4ubm9uqrr+qfa1qtNikpyd/fXxAEjUYTGxtrZWVl8gxmfaLJ5fKoqKiCggIHB4egoKC4uDh+NQAAAACALs5AW0RLfz81pr7HklskLPaT7QYuWoNrbta5u9Zp43fcQk7HQmKgjf7yl78MHjw4ICBg3bp1v/zyi/E7mnzu3XzPXKVSefr06eeff5459g6qrq4uMjLS2tp606ZN5hj/5MmT165do7un61i8ePHZs2ePHDkidRAAAAAAAAC0K4XUAQAAAAAA7S0jIyM4OHjAgAFSB0FnFhwcvGvXLqlTWASFQrFmzZqRI0dGRUWdPn16x44drq6uUocCpGT4ze71N2vwftkWrfJqzNtt629jpjfWW+D79ZvT4PsixraQlXVNS/9Nkfa704H+bXRNCoWiwTdILBb5z3/+8/77769fv37AgAFz586dOXNmRkbG+++/P2vWrA8++MB8L/HiPxiz/rMRFweeNm3a0qVLR40aFR0dPXToUDMdCxAEobmltqurqwVBuHbt2saNG9evXz906NDp06dnZmaeOXMmISEhJibGHK09onZ4onl6eh44cODdd9+Nj48/cODAunXrhg0bZmNj07NnTzMdEQAAAAAgleZ+uzTTb53m/pUWjemvOVceMKy2tlYQhGPHjhUUFERHR0+YMGHRokVz5851cnJqbpeKiopVq1a9884706ZNO3DggAkb8833zBXn2ENDQyMiInx8fJKSkqKiokw4Pszqvffe279/f1ZWlrOzsznGP3DggKOjo1hPj64gMDBw5MiRqampwcHBUmcBAAAAAABA++EvRgAAAADQteh0Ond399deey0uLk7qLOjMPvvsszlz5ty6dctM723qiAoKCp544ol79+6lp6ePGzdO6jiAuchksh07doSHhxvYoMnGnPqNKuI9Bqp87vuGWmM2EMzcR9MOhzC5JiuTOtYpGGYh3xQjY6Slpc2bN0/ytJavpKREp9OJt+/cuaO/YsXFxeKNurq6O3fuiLdra2tLS0vF21qttqysTLxdU1NTXl4u3q6urtZoNBkZGYaPa21tXVNTIwhCr1699u3bZ9YX9/b8FNC+ffvmzJmjUCiqqqrMfSzAeDNnzvz0008VCjOuStJuTzStVvvCCy9s2bKlyWP16NGjW7du+i8dHBz0dUUymaz+J5qsra3t7Oz0X9ra2nbv3l3/pb29vf5yOTk5iS89PXv2tLGxabCv/lc2Ozs7a2trQRD0dUL1j6h/tFu3bj169GjrVQAAAACADu6+M+ENNm7ul00DU7It2ktoNN8u3miupb3xPLz+92Lhf7stGuzS5JR+gy2bzNDciQhNFQ81OYPa5Ek1edtwcmNOv8mL1mT++04mGBi5yRM08uI3HqH+nc2FN/6iCc38U7zvoZs7awNbGnM1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nnzyyQULFtgruEfYaRWJ7eyy8sUdMc8dnD171kq4iUqlUigURqNRpVIJIT788MOysjInVgcMQEOGDDl16lSH4B4hhMlkWrFixe7du60cq1arExISNm/evGnTpoMHD/YiuEcIkZiYWFRUtHLlytWrV99yyy0XLlzoRScAAACwjuweAOirPXv2TJw48fjx4wUFBZs3b/b19e1LbwsWLDh58uSUKVNmz569cuXK5uZmGw9sbm6WUnseffTR22+//dtvv92+fXtMTExfigEAAAAAAAAAAAAAAAAAAAAAABgwGhoarIf1VFVVmcN65s6dGx4e7tB6er2KpEfsu/LFHTHPZqdPn7bMEJHCeoQQHh4e8fHx6enpmzdv/ve//93a2iqEuPfee6Ojo11WKzAgrF+/XqlUdvmWyWS68847Dx482PktjUazfv36m266aezYsSdPnlyxYkVfavDy8srOzv7000/Pnj07ceLE/Pz8vvQGAACAzmRWQlIBANbV1NRkZGTs378/PT1948aN9r2ntmfPnoyMDF9f3y1btqSkpFhpWVdX9/LLL+fl5RkMhuXLlz/88MNhYWF2rAQAAAAAAAAAAAAAAAAAAAAAAMDt6PX68vLyU6dOHTt27NixY8XFxefOnTOZTOHh4VN/NH369NDQUFdX2oNVJD3i0JUv7oh5joqKqqioEEJ4enrGx8dfd911U6dOnTJlSlxcXId4EZlMtmvXroULF7qoUqBndu/enZqa2t9WTB85cuT666+3UpVMJlOpVP/85z9nzpxp3qlWq9PS0urq6nJycvqY2tNBW1tbZmbmhg0b5syZk5+fHxkZacfOAQAArmZk9wBAL5nv1m3dujU5OdkRQ1jeucvNzfXz8+vQoLy8fOPGjVu2bPHx8cnIyFizZk1gYKAjKgEAAAAAAAAAAAAAAAAAAAAAAOjnamtrv/7666+++urrr78+ceLEqVOntFqtSqUaP358fHx8fHx8QkLClClThg4d6upKu3DFVSQ95YSVL+7oap5nk8n00EMPXXPNNVOnTh0/frxCobDSmOweuJf+md0zZ86cf/7zn1JAj9Fo1Ov1ndvI5XJPT8+PPvrouuuu02g0WVlZjs7WKSwsTEtLq62ttXs2EAAAwFWL7B4A6DEnh2F3GeldVlaWl5e3efPm0NDQBx98MD093dvb26FlAAAAAAAAAAAA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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bpmn_2 = pm4py.discover_bpmn_inductive(df, noise_threshold=0.1)\n", + "pm4py.view_bpmn(bpmn_2)" + ] + }, + { + "cell_type": "markdown", + "id": "9c6d0d8b-a956-478c-b133-9aeb7c4e4cf8", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "## Checking Model Quality" + ] + }, + { + "cell_type": "markdown", + "id": "92afa9ca-74be-4bdd-a40e-4f20cecb19fc", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "### Converting the Model" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "adb214be-70f3-4dd0-a614-f899a2705375", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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cxM7DhERERERERFRm+j1ely9ehWXL1/GlStXcOXKlSaPr169Cp1OJyzTpUsX+Pr6omvXrggNDcX999+Prl27wt/fH35+fvD394ednV27Z/X29hYey2QySKVSzJ49G0899RR69OjR7tsjIiIiIiIiIiIiIiIiIiIiIiIiIiISW2hoKLZv345x48bhvvvuw5QpU8SORERERERERERERERERBZmyZIlKCsrw3//+1/Y2NiIHafDSKVS7NixA5GRkfjLX/6CTZs2iR2JiKzA119/jfXr1+PTTz9FcHCw2HE61BNPPIHvv/8eSUlJSE1NZTEbEZGVy8jIgJubGzw8PMSOYnG8vb3h4uKCtLQ0DB06VNQsdXV1OHjwIA4ePIi5c+di+PDhmDFjBoYPH94h1+Uky3D06FEcOHAATz31FAYNGoSZM2di/PjxrZamXbt2DcXFxXf9z6RtFRISgm+++QZbtmwBALi6usLHxwe+vr7o1asXRo8eLQxrNBoEBASY9XcgxkJkLy8vPP/885g7dy4cHBzMtn0iujukpqYiOzsb/v7+Ykdps7q6OqxatQrTpk1Dt27dxI4jmmeffRajRo3C8ePH0bdvX7HjEN0SHr83GI/fp59+Gl988QXOnTuHBx54AHv37sXw4cMhlUrFjkhmwEJkIrIIe/bswZUrV7B48WKxoxARERERERERtaikpASXLl3C5cuXcfHiReFxTk4OsrOzcfXqVRgMBgCARCJBly5d0LVrV/j5+SE6OhqjRo2Cn58f1Go1/Pz84OfnB1tbW1H2xdvbG7W1tXB2dsaTTz6JP/3pT/D09BQlCxERERERERERERERERERERERERERkbmMGTMGTzzxBObPn4++ffsiNDRU7EhERERERERERERERERkIX7++Wd88MEH+Pjjj9GlSxex43Q4Hx8frF69GtOmTcOsWbNwzz33iB2JiCxYTU0NlixZgsTEREyYMEHsOGaxadMmhISEYPny5Xj99dfFjkNERADKyspga2t72+W4V69ehZ+fXwelsn5+fn7Iz88XO4YJnU6H/fv3Y+/evbC3t8fYsWMxceJEPPLII5DL5WLHo3ZUX18v3B85cgRHjx7F/PnzMXjwYCQlJWHcuHFQKpUmyxjfrzyum+fn5weFQoG0tDSo1WrY29uLHcmEk5MTtm7diilTpoh2XV4isn4rVqzAsmXLoFKpEBQUhLCwMISHhwv3Go3GLDlqa2uRlZWFkJCQ2172P//5D1JTU/HZZ591QDLrMWLECPTq1Qvr16/H5s2bxY5DdEt4/N4wYsQIREREYMOGDRg7diw+++wz9OrVS+xYZGYsRCYii7B69WqMHTsWgYGBYkchIiIiIiIiok6qvr4eeXl5uHjxIi5fviyUHV++fBlZWVm4fPkytFqtML+XlxfUajXUajViY2MxYcIE+Pn5wd/fH127doWvr69FnyQVERGBd999F0lJSXBwcBA7DhERERERERERERERERERERERERERkdmsWrUKx44dQ2JiIo4dO2ZxF3ojIiIiIiIiIiIiIiIi89Pr9Xj88ccRHx+PhIQEseOYzeTJk7FlyxbMnz8fx48fh0zGy5YTUfNeffVV5OXl4dChQ2JHMRt3d3esWLECTzzxBKZNm4bevXuLHYmIqNP74YcfMHHiRAwZMgQjR47E8OHDERAQcNPltFotnJyczJDQOimVSpPrbVoKvV4PAKiqqsLHH3+MXbt2QaVSYdKkSZg+fToGDRoEiUQickpqTwaDQXj8ww8/4Pvvv8fcuXMRHx+PpKQkjB49GgqFQni/8rhunpOTE6qrq9tUzmkus2bNatNyR44caeckRGSt3n//ffTu3RspKSk4e/YsUlJSsGbNGuTl5QEAXF1dm5Qk9+rVC97e3u2aIz09HX379sW8efOwbNkyeHp63vKyO3bswKBBgxAaGtqumayNRCJBUlISli1bhnfeeYf/30FWgcfvDRKJBLNmzcKyZcvw3nvv8fjtpPiXRSIS3Q8//IBjx47h7bffFjsKEREREREREd3FamtrkZOTg9zcXOTl5eHChQvCLTc3F5cuXUJlZaUwv6urKzQaDTQaDR599FH4+PjA19cXGo0GQUFBUKlUIu7NnRswYAAGDBggdgwiIiIiIiIiIiIiIiIiIiIiIiIiIiKzk8vl+Oc//4no6Gg888wzWLt2rdiRiIiIiIiIiIiIiIiISGRbt25FamoqPvnkE7GjmN26devQp08f7NixA7NnzxY7DhFZoLy8PLz22mt45ZVX4OfnJ3Ycs5o/fz62bt2KZ555Bl999ZXYcYiIOj2VSoXr16/j4MGD+M9//oNFixYhMDAQY8eOxfDhwxEXFwe5XN5kOa1WC6VSKUJi66BSqSyyELkhYzlyeXk5tm3bhk2bNsHb2xsTJ05ESUmJyOmoIxjLkWtra/HNN9/gwIEDUCqVGDNmDHr06AGAhcgtcXJysvhjuq1Wr16N1atXix2DiCyAo6MjoqOjER0dbTK+pKTEpCT57Nmz+Ne//oWCggIATYuSo6Oj0adPnzZ/T0lJSYHBYMCmTZuwbds2vPjii3jyySdvWgpaXl6Of//73+xs+z9Tp07F008/jb1792LixIlixyFqFY9fUzx+iYXIRCS6t956CzExMbjnnnvEjkJEREREREREVsxgMCA7OxsXLlxAVlaWcH/x4kVcunQJeXl5qK+vBwDY29ujW7duCAgIgEajwZAhQxAQEIBu3bpBrVbD19cXMhl/fUpERERERERERERERERERERERGSNtFotqqurodVqUVFRgerqapSXl6OyshLV1dUoKyszeQwAFRUV0Ol0wvINL5hlvJBSw8dlZWWoq6tr8rgtnJ2dIZVKm4y3s7ODvb09bGxsoFKpAAAuLi6QSCRwdHSEQqGAQqGAo6MjJBIJXFxcANy4eJFMJhOWt7e3h0qlEm6urq5QqVSwsbFpc2YiortBYGAg3n//fUycOBFDhgzBuHHjxI5EREREREREREREREREIjEYDFi1ahWSkpIQFBQkdhyzCw0NxfTp0/H3v/8dM2bM4LV3iKiJN998Ey4uLli0aJHYUcxOKpVixYoVGDZsGH777TfExMSIHYmIqFMzFtU1PHf3/PnzeOedd/DGG2/A1tYWDzzwAEaPHo1hw4bB398fAFBZWQlHR0dRMlsDpVKJX3/9FRKJROwot6S2thYAkJ+fj7Vr14qcxjocPHjQYl/f5krMGzOe619RUYF//vOfwvht27bhiSee6LBs1srJyQkVFRVix2h3xusKExG1xtXVFXFxcYiLizMZbyxKTk5OFsqSP/zwQ+HrpY+Pj1CSbLyPioq66c+QZ86cgUKhQE1NDfR6Pf7nf/4Hq1evxooVKzBnzpwW/3/riy++QF1dHRITE9tnx62cl5cXHnzwQezevZuFqmTxePya4vFL/KsiEYkqMzMT+/btwyeffCJ2FCIiIiIiIiKyAkVFRU0Kj433ly9fFk5QUSqV6N69OzQaDfr374/ExESo1WoEBARArVbD09NT5D0hIiIiIiIiIiIiIiIiIiIiIiKihurq6lBWVoaSkhKUlpairKys1XutVovy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xPbatWvCY+M85eXlTdbh4uICDw8PodzYWGzcsPDY3d0dHh4ewjilUinC3lJHcHZ2hrOz820tY3yfNXyvNXz/Xb58Gb///jsKCwtx7do1k4vWubm5wdfXF/7+/kJJsp+fn8k4XryKiNpLUFAQ1q5di9mzZyMuLg6jRo0SOxIRERERERERERERERGZyc6dOxEUFITY2Fixo4hu0KBBCA4Oxs6dOzt1IXJzRbmNC4zbc/3tue7bYSlFxGIVE7MM+db89NNPyMjIwPTp08WOIjqpVIopU6Zg586dePnllyGVSsWORETUIdqjyLigoAB6vb7Z9dvZ2cHV1RX29vbCY+NNo9E0O77x/N26dWu1KFkul0On0yEmJgZPPfUUxowZg9WrV+Odd97pqKfN6hUVFcHV1VXsGAJjmbVCocDo0aMxdepUPPLII1AoFGJHow4ikUiE133w4MGYPn06xo4d2+L5625ubgBunK8eGBhozqhWoaioSHiOiIio/SgUCvTu3Ru9e/fGpEmTcPz4cezbt++myxl/Nv7444+xZ88ejBw5EnK5HP369evoyFZnwIABSE5OFjsGUYuOHz/O47cFPH47LxYiE5Eo6urqsH79eiQlJbphpXgAACAASURBVMHJyUnsOERERERERETUBrdbehweHo6EhASEh4dDo9EgICAANjY2Iu8FERERERERERERERERERERERGRdaqoqEB+fr5JmbGxbNZYONuw7LiqqspkeTs7O3h4eMDT0xPe3t7w8PCARqOBh4cHvLy84OnpCQ8PD6EA2c3Njed80W0zvoduRX19PfLz83HlyhXk5uYiOzsbeXl5yM7ORnZ2No4ePYqcnByTsm5bW1v4+vrCz8/PpCy58ThbW9uO2kUiuoskJSXh8OHDmDNnDk6ePAk/Pz+xIxEREREREREREREREVEH0+v12L17NxYvXmz2UtpTp07h119/xfHjx7Fx40YAwIIFC9C3b1/0799ftELiyZMnY9OmTXjttdc65bkiLZXz1tfXd9h7xFzFvGIVD9+MJWZqzFKfO3P45z//id69e3fqkvSGpk+fjtdeew0//vgjBg8eLHYcIiITDUuKb6fM2JxFxl5eXpDJ7rwmx9HREaWlpSbjjGWqtra2mDZtGhYvXoyIiAhhelBQEHJyclBVVQUHB4c7znA3qaysRG5uLoKCgsSOAgCQyWSIj4/HtGnTMHr0aCiVSrEjUQeTy+WIjo7GjBkzkJiYCG9v75suo1arYWdnh4yMDMTGxpohpXXJyMhAjx49xI5BRHTXS0lJgVQqRV1d3U3nlUgkkEgkqK6uxqeffgqZTIZffvkFQ4YM6figViQkJARffvml2DEAANeuXYOrqyvkcrnYUagDtPX1TUtLQ/fu3aFQKDoomfWypOOXzIuFyEQkii+//BIXL17EwoULxY5CRERERERERK1g6TEREREREREREREREREREREREZF5VFRU4Nq1a0KpcWFhYZPhhgXI1dXVJssrlUp4eXnBy8sLHh4e8Pb2Rnh4uFB2bCw/NpYd88JQZGkkEgm6dOmCLl26IDo6usX5KisrcfnyZeTl5SEnJwdXrlxBXl4eLl++jJ9//hk5OTnIz8+HwWAQlvH29kZAQAC6deuG7t27o1u3bsLjgIAA2NnZmWMXicgKvPvuu+jXrx9mzpyJb775xuwXvSciIiIiIiIi87ty5QoyMzOF2+HDh8WORERERERmlJycjGvXrmH8+PFm22ZGRgbefvttoQS5oYbjFixYgKVLlyI4ONhs2QBgwoQJePnll3HixAn069fPrNsWW2cuvSVqyYEDBzB37lyxY1iM8PBwhIaG4quvvmIhMhG1m7YWGTccf+3aNZPzJhtqWFLcuLRYo9G0WHLccJy3t7dFXVdSqVQKhchyuRw6nQ7h4eFYsmQJpkyZ0mzhcUhICOrr63Hu3Dn07t3b3JEtWkZGBurr6xESEiJ2FHh6euLq1atwd3cXOwqZ0YkTJ+Dr63tby0ilUgQGBiIjI6ODUlm39PR0JCUliR2DiOiud+bMGchkMtTW1pqMl8vlMBgMqKurE/5fKjIyEr1790ZERAR27doFGxsbliE3IyQkBG+//TYMBoPon0F27dqFFStWYNKkSZg8eTIGDRoEqVQqaiZqP219fdPT0y3is5MlsqTjl8yLhchEJIp3330XDz30EEJDQ8WOQkRERERERNTplZWVIT09HWlpaUhPT8e5c+dw7tw5ZGZmQqvVArhxEluPHj3Qo0cPDBw4EDNmzBCG/f39eaEvIiIiIiIiIiIiIiIiIiIiIiKiRiorK3Ht2jXk5+ejsLBQKDg2DhcUFAiFx4WFhbh+/brJ8o6OjvDy8hIKjb29vdGrVy9h2FhubCxAtre3F2lPiczL0dERPXv2RM+ePVucR6/XIz8/H9nZ2cjLy0N2djaysrJw8eJFHDx4EFlZWSgrKwNw42LGPj4+QlFy48Jkf39/yOVyc+0eEYlMqVTiww8/xIABA7B27VosWbJE7EhERERERERE1A4KCgqQmZmJjIwM4f7s2bO4cOECqqurAQAymQwGg4HlZ0RERESdzKFDh+Dj49Pq36Db00cffYTJkyff0rwbN27Exo0bsXv3bkyaNKmDk/2/8PBweHt74/Dhw52uEPlmmvu8YLz2UuNpxnLlxtONww3HNyxibm65m62ruW03znyz7bZ1f1rT3LzN5Whuudb2t6V8tzvtZs/77WS+W507dw7Z2dm4//77xY5iUe6//34cPnxY7BhEZAHao8g4Pz8fdXV1za6/rUXGDcdbWpFxe1GpVABuFM1NmjQJf/rTnxAbG9vqMoGBgZDJZEhLS2MhciPp6emQy+XQaDRiR4GtrS1sbW3FjkFmdrtlyEYhISFIS0tr5zTWr6amBhcvXkRaWhq+/PJLxMbGwtPTU+xYRER3pTNnzpiUIRv//y8yMhJhYWGIiIhAz549oVQqTZZbu3Yt7r33XnPHtQrBwcGorq5GTk4OAgICxI6DsrIybN68GRs2bICXlxdmzpyJyZMnIyoqSuxo1A7a8vqeO3eOx28LLO34JfNhITIRmV1mZia+/fZbfPHFF2JHISIiIiIiIuo06urqcOnSJaH4OC0tDRkZGUhNTcXVq1cB3DjxJygoCEFBQXjggQcwf/589OjRA0FBQejatStLj0nA9wIRERERERERERERERERERERdUYNL0aWl5eH3NzcFodzc3NRWlpqsnzDi435+vrCx8cHQUFBJsPG6X5+fnBxcRFpT4msn0wmg5+fH/z8/Fqc5/r168jLy8OFCxdMbl999RUyMzNRXl4uzGu8eGBzt4CAgLvyYoFEnVnfvn3x4osv4plnnsEDDzyAiIgIsSMRERERERERURu8/PLL+Ne//oXz58+joqICACCVSiGXy6HT6ZqUjOj1ekgkEowZM4bXSCMiIiLqRA4fPmy2os/bKUNuyLiMuUqRJRIJhgwZgsOHD+Ovf/2rWbbZmr/97W/o06cPHnrooSbFIWJrrlDX+Lil6c0VIDdc362uC0CL226u9Le17d7J/tzuc9NSEXNrz8HNhtsy7Vae91vNfDc7fPgwHBwcEBMTI3YUi3L//ffjvffeQ2lpKc/zIxOrVq3CoUOHkJCQgDFjxsDNzU3sSNSCxgXFzZUWi11k3KVLF0ilUjM/M9ZjwIABSEpKwuzZs+Hu7n5LyygUCkRERODIkSNITEzs4ITW5ZdffkGvXr0gl8vFjkJ0W6Kjo7F+/XqxY1icX3/9FQaDAb/88gt27doFANBoNIiNjRVuUVFRLB8nImoHgwcPxpgxYxAREYGwsDA4Ozvf0nLFxcXw8PDo4HTWyfjzfWlpqUUUqspkMqH0+tq1a1izZg1WrVoFPz8/TJs2DbNmzUJISIjIKamt2vL68vhtmaUdv2Q+LEQmIrN755134O/vj+HDh4sdhYiIiIiIiOiuU1NTg3PnzuHs2bO4cOECUlJScPbsWaSlpaGyshLA/1+ULywsDA8//LDwODQ0lBfko1YNHDgQH3/8sdgxiIiIiIiIiIiIiIiIiIiIiIjuWF1dHYqKilBYWGhyf+3aNRQWFgrDBQUFuHr1KgoLC1FVVWWyDgcHB3h4eKBLly7w9PSEh4cHQkND0aVLF3h4eMDDwwOenp7CsIODg0h7S0TNsbe3F0qNm3Pt2jVcvHgRFy9eRFZWlvD4iy++wKVLl1BdXQ3gxgXy/P390b17dwQGBiIoKAjBwcEIDg5G9+7doVAozLlbRNROnn/+eRw4cAAzZszA0aNHeSwTERERERERWaHw8HAsW7bMZFxdXR1qamqanV8qlWLevHkYOnQoC5GJiIiIOon6+nocOXIEb775ZodvKyMjo01lyEaTJ09G3759ERwc3I6pWjZkyBA888wzTYpjxfCvf/0Ly5cvh1wux9ChQzF27Fg8+uij6Nq1q6i5GhfkNizNvZ0C3YbPcXPLtbSultbduPz3Vrbbnvtzs3XdTGvz3up7sfGyzS3X1ufdWn3wwQc4fvw45s2bh169et3ycr/88gsGDhzIv5k3MnjwYBgMBhw7dgwPP/yw2HHIgtTX1+PgwYP4z3/+g3nz5mHIkCGYNGkSxowZw6KcdnK7pcXNjS8tLW3x63vjguKGpcUsMrYsW7ZsadNyQ4cOxaFDh9o5jfU7dOgQu0PIKg0dOhQvvPACMjIyzPZ52Rp89913UKvVuHDhAsrLy/HHH3/g559/xk8//YSVK1eioKAAMpkMwcHBiI6ORlxcHAYNGoSwsDDRfwdARGRtnn766TYtV1FRAScnp3ZOc3dQqVQAgPLycpGTNM9YnnvlyhW8+eabeO211xAcHIzJkydj5syZ6N69u8gJ6U7cyuvL47dlln78UsdhITIRmVVFRQV27NiBF198kQVLRERERERERHegpKREKDtuWHx88eJF1NXVQS6Xw9/fHxqNBoMGDcK8efOg0WgQERGBLl26iB2frFTXrl2RmJgodgwiIiIiIiIiIiIiIiIiIiIioibKyspw7dq1JiXHhYWFKCgoMCk5Nt43vpiZSqUSio2Nt4YFx8ZpxgJkFhwT3d28vLzg5eWF/v37Nzs9NzfXpCw5KysLaWlp2LdvH3JzcwEAMpkMAQEBCAoKEoqSjY8DAgL4f5ZEFkwmk2HXrl2IjIzEK6+8guXLl4sdiYiIiIiIiIhu0/jx4xEVFYU//vgDBoOh1XltbGyQkJCAd999F3v27DFTQiIiIiISW05ODioqKhAeHt7h23r77bfbZR0bNmxohzQ3FxYWhvLycuTl5cHX19cs22yJvb09AECn0+G7777Dd999h0WLFiEiIgLjx4/HqFGjEBUVJWpGS9O46Pdu0dZy4rul1PhO5ObmYt26dVi3bh2io6OxaNEiTJw4EY6Ojq0ul5qaigEDBpgppfXw8PCAl5cX0tLSWIhMJmQyGeRyuVCe89///hfff/895s+fj/79+2PSpElITEyEj4+PyEmtz/Tp0zFx4sRmp8nlcjg5OcHFxQXOzs5wcnKCSqWCSqWCn58fwsPDTcYb711cXIT5nJyceF5wJzF06FCsXr0ahYWFLCr/P/n5+Th79ixWrVoldhSi2xYTEwOVSoXDhw+zELmBQ4cOIT4+HsCN/5OJi4tDXFwcnnnmGQA3Ph8YC5KTk5Px6aeforq6GiqVCr169RIKkgcMGABPT08xd4WI6K6l1WqhVCrFjmGRjEWzP/74I65evSpqllOnTrU6Xa/XAwAyMzOxcuVKLF++HIMGDTJHNKt3+vRp0X933dbXt6SkRPTslsp4/Gq1WpGTkLmxEJmIzGr79u2ora3FrFmzxI5CREREREREZPGqq6uRmpqK9PR0pKWlIS0tDRkZGUhPT0dVVRUAwN3dHaGhoQgNDcV9992HkJAQhIaGQqPRQCbjr/+IiIiIiIiIiIiIiIiIiIiIiMi61NbWori4GMXFxSgqKhIeNxxuXGxcWFgInU5nsh4HBwe4u7sLFx50d3dHQECAMK7heA8PD7i7u0OhUIi010RkjXx9feHr64uBAwc2mVZRUYHMzEyT2++//47du3ejsLAQAKBQKKDRaExKko23rl278sIIRBYgMDAQr776KpYuXYoRI0YgNjZW7EhEREREREREdBskEglWrlyJ4cOHtzqfTCbDQw89hB07dkAqlZopHRERERFZgvT0dABASEhIh27n1KlT2Lhx4x2vZ+PGjViwYAH69OnTDqlaZ3xO0tPTRS9EblgMYjAYhMenT59GWloali1bBldXVzz66KNISEjAQw89BFtb2zZty1gg3FKBbmvTLIU1ZCTzq6qqgq2tLWpqanDixAnMmzcPixcvxtSpU7FgwQL07du32eUyMzMxc+ZMM6e1DiEhIcL3ESKjxtf+a/h969ixY/jtt9+wdOlSxMTEYMqUKUhISBD9+6y1mDt3LuLj46FSqeDs7AxnZ2ehyNje3l7seGRFBg8eDLlcjgMHDmDGjBlix7EI+/fvh62tLe69916xoxDdNplMhsGDB+PLL7/E/PnzxY5jEYqKinDs2DEsXLiwxXl8fX2RkJCAhIQEAIBOp0NGRoZQkrxv3z68/vrrqK+vh4+Pj1CQHB0djX79+sHOzs5cu0NEdNeqqalp8+8w73bG52Xr1q04f/68yGlwS/9zWl9fD71eD4lEgp9++skMqazfhx9+iFdeeUXsGG1+fbdv345Ro0bB39+/oyNaFePxW11dLXISMjc2ohCRWW3cuBFTp06Fu7u72FGIiIiIiIiILIbxD/9nz55FSkqKcJ+eng6DwQCZTAa1Wg2NRoN7770XCxYsgEajEW5ERERERERERERERERERERERESWRq/Xt1pq3HDYOK6oqAgVFRVN1qVUKuHm5ibcPDw8EBYWZlJmbCw4Ng47ODiIsNdERDcolUpERUUhKiqqybSSkhKhJDk9PR2ZmZn473//i/fffx/l5eUAbpS6NyxI7tGjB4KDgxEcHAwvLy9z7w5Rp/anP/0JBw4cwNSpU3Hy5EmTi60TERERERERkeUbNmwYIiMjcebMGej1+ibTZTIZ7rnnHnz22WeQy+UiJCQiIiIiMWVkZAjnonSkX3/9tV3XZY5CZG9vb7i4uCAtLQ1Dhw7t8O21RqVStThNp9MBuPG3+N27d2Pnzp2wt7fHsGHDkJ2dDR8fn9veXkulyI3HNZ7PEouIJRJJi+MbZ23P/THHc9PW4upbndbSfG3Zlw8//BC2trZwdnaGnZ0d7O3t4ezsDIVCAScnJzg6Ot5S8cadqKysFHLX1dUBuFGSvG3bNrz//vvo1asXHn/8cUyePBlOTk4AgGvXrqG4uBjBwcEdms1asRCZgBvHU1lZmTBcVVXV4teI+vp6oSD5t99+Q3JyMpYuXYrY2FizZLV29913H8aMGSN2DLoLqFQqjBgxAjt37mQh8v/ZuXMnRo4cyXPjyGpNmjQJM2fORH5+Pry9vcWOI7qPPvoIcrkcI0eOvOVl5HI5wsPDER4ejnnz5gEAysrK8Ntvv+Gnn35CcnIyVqxYgaKiIsjlcgQFBZmUJIeFhbX4+ZOIiJrn6OiIyspKsWNYJOP/l65fvx4PPfSQqFnefvttPPvss63OI5FIIJPJoNfrERMTgylTpuDJJ580U0Lr9eqrryIxMVHUDG19fV966SXMmzePZcjNMB6//HzZ+bAQmYjM5rvvvsOZM2ewbds2saMQERERERERiaKmpgZpaWlITU3FmTNnkJqaitOnT+PChQswGAzCH/XDw8ORkJAgnAzQo0ePDj9ZmYiIiIiIiIiIiIiIiIiIiIiIqDl1dXW3VGrcuNzYWOrZkIODg1Bq7O7uDjc3N2g0GsTExJgUHhunGW+2trYi7DkRUcdwdXVF//790b9//ybT8vPzkZGRIRQmZ2ZmYv/+/cjMzMT169cBAM7OzkJRckREBHr27ImIiAhoNBrY2NiYe3eI7noSiQSbN29Gr1698Oyzz2LdunViRyIiIiIiIiKiW3TkyBG88MILOHnyZLPTjRd3379/P+zs7ITxAwcOxMcff2yumEREREQkoqtXr8LPz6/Dt3P8+HGLXNfN+Pn5IT8/v03L6nQ6VFRUoLKyEjU1NSgtLUVNTQ2qqqpQXl6O2tpalJeXo6qqymR6ZWUlKioqUFNTg7KyMlRXVyM/Px9SqVQocW2JXq8HAFy/fh2ff/45FAoFysrKoNVqhYLXW2Us9G08rrX5Gk43jjOW5zYcbjxPc8ONi3lbWldzww2XMU5vrui3ueXasj+tFX/ebF2NpzW3rebW13i5tky7nf1vmK0txc4zZswQSlBb4+rqCltbWzg4OMDJyQm2trZQqVSwt7eHnZ0dXFxcoFAooFQqoVQqoVAo4OLiIpQsq1Qq2NrampQsG9dZWVnZ7DFkLBU/c+YMFi1ahMcffxyjR4/G/PnzhTI5c3ydtEZ+fn745ZdfxI5hda5fv47q6upmh9s6raPmvdl6SktLm/2aIJPdvP6jYTny0aNHbzo/EbWv6dOnY8KECcjOzu70BVaXL1/GDz/8gC+++ELsKERtNnbsWCxatAgfffQRlixZInYc0e3cuRPjxo274xI6Z2dnxMfHIz4+Xhh34cIFoSA5OTkZ27dvR01NDZydnRETEyMUJA8cOBDu7u53uitERHc1JycnaLVasWNYJOPzolKpRE7SOrlcDp1Oh8DAQEydOhUzZsyARqMBABYi3wVae31XrVrF47cF1nL8UvtjITIRmc27774r/AKCiIiIiIiI6G6m0+mQnZ2NlJQUnD17Vrg/c+YMampqIJPJoFarERYWhnHjxiEsLAzh4eEICwuDvb292PGJiIiIiIiIiIiIiIiIiIiIiOgu1bjM+GZFx4WFhSgtLW2yHjs7uybFxWq1GpGRkXB3d29SaGwcblgmQERETXl7e8Pb2xv33nuvyfj6+npkZ2ebFCWnp6dj8+bNuHjxIurr62FnZ4eePXsKBcnG81M1Gg2kUqlIe0R0d/D19cW6deswdepUjBgxAsOGDRM7EhERERERERG1IiUlBS+//DL27NmDAQMG4NChQ/jHP/6Bw4cPC0VPcrkc3bt3x7ffftukGK1r165ITEwUIzoRERERmVlbinLbYuPGje26rg0bNrTb+lqjVCrxww8/YOXKldBqtUJ5cUlJCWpra1FZWQmtVova2lqUlZUJRZFlZWU3LS+WSCQtFrk6ODjA1tYWGo0GCoUCJ0+eRFZW1k3XaSwo6NOnDxYtWoSvv/4aNjY2bX6Nb7X4tqWi5Las61bWfyfDLT1ubflb2UZLbmVdtzO9Pafdzv7fbP0307Csu7q6GtevX0dJSYnwuLlxzU3Py8trcfrNjjsPD49WpxvLWQ0GA7744gvs2bMH3bt3b/M+dwYdVVxkfF2NGr62er3eZJuVlZWora0VhktKSoTHxhJ6o/LycqGA12AwoLy8XJhm/Ppu1LDo1/j13kir1Qrv6bq6OpSVlQnTGhcG38r3g9tl/P5hZPw+YqRSqWBjYwPgRjFxw+8Bxu8vRq6urnB1dQUAoYzcyMnJSSg2trGxMSlxMZaUG7m4uAhl6t999x1WrVp10/1QKBSora1FUFAQ5syZg2efffbWngAiahcjRoyAq6srtm3bhpdeeknsOKL64IMP4ObmhkceeUTsKERtZm9vj/Hjx2Pr1q144oknhO/LnVFKSgqOHTuG5cuXd8j6NRoNNBoNZsyYAeDG9Zf/+OMPoST5008/xcsvvyzMa+wnio6ORkxMjMnPYu1Jr9cLP7sREZlbdHQ0unbtioiICPTq1QthYWEIDQ2FQqFodTmVSsVC1RYYnxdz/O7+dhl/B+3r64vp06cjKSkJoaGhYseidnKrry+P35ZZ8vFLHYs/jRORWVy5cgX79u3Djh07xI5CRERERERE1G5up/g4Pj4eTzzxBIuPiYiIiIiIiIiIiIiIiIiIiIjojpWVlaGoqKjFcuOWio4bX5RRoVA0KTb28fFBRESEML7hNOPjhhd9IyKijieRSKBWq6FWq/HAAw+YTKuoqEBaWhrOnDkjnM+6adMmXLp0CfX19bC3t0fPnj3Ru3dv9O3bF1FRUYiMjIRSqRRpb4is0+TJk7F371489thjOH36NNzc3MSORERERERERESNXLx4Ea+++iq2bNmCsLAwfPzxx0hISAAAuLu7IzIyEsCNMhwPDw988803cHd3FzMyEREREYlMq9Xyb6etUKlUOHnyJLKzs+Hs7CyUTjo7O8PBwQHe3t5wdHSEQqGAq6urUCbp5OQEW1tbqFQqoTTSxcUFCoUCSqUSSqUScrn8lnMsXboUv/76a7PTbGxsUFdXB0dHR0yZMgWLFy9GREQEAOCbb75pl+eBqL3Y29vD3t4erq6u8PX1bff1t1ZW/tprr+Hnn3++pfXo9XpIpVJkZWUBADZs2IC///3vcHR0bPfM1szJyQlFRUVITEwE0LQMuGGpsE6nQ0VFhTCtoqICOp0OwI0y6tLS0nbP17gM2Pj12shYBAw0LQNuWCpsb28Pb29vYVrjUuGGZcAKhcLkfdKwVFgqlcLZ2VmY1rhU2NnZGVKpFMCN8pmG358bZ7dk+fn5LRaoG0t13N3dMXXqVCQlJSEqKgoAWIhMZGYKhQLz58/HmjVrsHTp0k77maCyshLvvvsuFi1adFs/nxNZoieeeAJRUVH46quvMHz4cLHjiOYf//gHevbsifj4eLNsTy6XC4XHRlevXsVvv/2G5ORkJCcnY/ny5SguLoZcLkfv3r1NSpLDw8PbJcd9992HefPmYebMmZ26EJuIxCGVSrF37158/fXX0Ol0qK+vh42NDdRqNSIjI9G7d2+Eh4cjIiICQUFBwudkb29vXLlyReT0lsn4vHTp0kXkJDfU1tYCADw9PTFt2jRMnjwZMTExIqei9tKW15fHb8ss7fgl82EhMhGZxZYtW+Di4oJx48aJHYWIiIiIiIjottXV1eH8+fM4deoUzpw5g5SUFKSkpODcuXPQ6XSQyWQIDAxEREQEhg8fjr/+9a8ICwtDSEiI1ZxASURERERERERERERERERERERE5qfVaoXCYmNp8a0UGxsMBpP1yGSyJsXGnp6eCA0NFYbd3Nzg4eFhMl9nvXgTEdHdRKlUol+/fujXr5/J+IqKCqSmpgpFySdPnsTevXtRXFwMqVSKoKAgoSA5KioKffv2ZcEr0U1s2LABvXv3xty5c/HZZ5+JHYeIiIiIiIiI/k9OTg5WrFiBrVu3okePHti9ezcmTJhgcsHz3r17Y+zYsfj888/h6uqKH3/8EWq1WsTURERERGQJKisrzVLwOXLkSOzbt6/d1mUuSqUSDzzwAHbv3m22bTbH0dGxSaGRXC6HXq9Hv379MHv2bEyfPh329vYiJSRrZ3x/SSSSFotMrUHDgtvG3n777VaXlUgkkEqlMBgMCAoKwrhx4+Dk5IQXX3wRb731llCOS//PyckJNTU1wrCzs7NJ0fXtlAE3LBVuXAbcsEReIpHAxcVFmGYsqm+YwVgqTOKQyWSoq6sTho3HllQqXxvvDgAAIABJREFUxYMPPoikpCSMGTOGxaNEFuDPf/4z1q5di82bN+PJJ58UO44o1q9fj6qqKixevFjsKER3rE+fPhg2bBhWrFjRaQuRL1y4gI8++gjbtm0T9WfCLl26YOTIkcLvLwwGA9LS0oSC5OTkZGzcuBG1tbXw8fERypGjo6MRFxfX6uea5hQVFeHo0aM4cuQI3nvvPbz//vuIiIjoiF0jImpWVFQUTp06JZSqAje+9mVlZeHSpUv48ssvodfrUV9fD5lMBo1Gg6ioKFRWVuKXX35BTk4OunbtKuIeWJ60tDR4eHjA3d1d7ChwcXHBY489hsmTJ2PIkCH8vctdpq2vb0hICNLT0zs4nXWypOOXzIuFyETU4erq6rB161bMmjULtra2YschIiIiIiIialVpaSlOnTqF06dP448//sCpU6eQkpKCyspK2NjYCMXH48ePR0REBHr27InQ0FAWHxMRERERERERERERERERERERdXI6nQ6FhYXCLT8/32S4sLAQ165dMxnW6XQm65BKpUJ5ccNy4x49epgUGxunubu7w93dHSqVSqS9JiIiS6VUKhETE4OYmBiT8RcvXsSJEydw4sQJHD9+HKtXr0Zubi4AoFu3bkI5cmxsLPr3729yMVaizs7FxQXvv/8+hg0bhj179mDChAliRyIiIiIiIiLq1AoLC/HGG29gzZo18PLywrvvvovZs2cLZUONrVy5Ej/++CMOHTqEwMBAM6clIiIiIktka2sLrVbb4dux1kLk6upqi/ibsaOjIwwGA2QyGQwGA1xdXTF//nzMmTOHP9tTu7DmEuRb1dzXOrlcDoPBAIlEgpiYGEyaNAnjxo2Dv78/AGD//v0AgJqaGjg4OJg1rzWorq6GnZ0dPvnkE7GjkAUxXo/Q+D0rJiYGjz32GBITEy3ieyoR/T93d3fMnTsXq1atwty5c+Ho6Ch2JLOqqKjAW2+9hYULF8LDw0PsOETt4oUXXsCgQYPwzTff4MEHHxQ7jtm98sorCAgIwMSJE8WOYsLGxgbh4eEIDw/HjBkzAACVlZU4ceKEUJC8Y8cOvPzyy7CxsUFISIhJSXJsbCzkcnmL6z927Jjwme73339Hnz598Pjjj+OVV16Bk5OTWfaRiDq38PDwFqfV1dWhrq5OGNbr9cjIyEBGRgZsbGxgZ2fH37k0IyMjAyEhIWLHAADMmjULs2bNEjsGdZC2vr4hISHYu3dvBySyfpZ0/JJ5sRCZiDrcV199hcuXL+Oxxx4TOwoRERERERGRwGAw4NKlS0hJSUFycjLOnj2LlJQUpKamor6+Hs7OzoiIiEBkZCSmTJmC6OhoREVFdboTlYiIiIiIiIiIiIiIiIiIiIiIOquKigoUFBQ0KTEuKChAQUFBk6Lj0tJSk+WlUik8PDxMbqGhocJjY5lxw5JjV1dXkfaWiIg6i27duqFbt24YO3asMO7q1asmJclbtmzBSy+9BKlUipCQEMTGxiI2NhYDBgxAREREi4UyRJ3Bww8/jDlz5mDhwoUYPHgwPD09xY5ERERERERE1OlotVqsX78ef//732Fra4tly5bhySefhK2tbavLhYaG4vTp0/D29jZTUiIiIiKydE5OTsjKyurw7fTv398i13UzWq0WQUFBZtteSxwcHGAwGBAfH48FCxZg5MiRrZYhEVFTlZWVAG6UIOt0Ojg7O2PUqFEYPXo0Hn74YSiVyibLGMdVVFSwnKcZ5eXlUKlUYscgCyOTyaBWq5GUlITp06ejR48eYkciolY888wz+OCDD/DKK6/g1VdfFTuOWS1fvhw1NTV4+umnxY5C1G4GDhyIkSNHYsmSJTh58iQUCoXYkczm6NGj2L59O3bt2mUV53k7OjoiLi4OcXFxwrjc3FyhIDk5ORnLli1DaWkplEol+vTpIxQk33vvvejevbuw3LFjx6BQKFBbWwu9Xg8A2LBhAz766COsWrVKKGEmIuooQUFB0Ol0tzSvjY0NDAYDhg8fjnHjxrHLrQUpKSksVCWLFhoairy8PBQXF8PNzU3sOBaFx2/nZfmfQojI6r333nsYOnQogoODxY5CREREREREnVRpaSnOnDkjlB4nJyfjxIkTqKqqEk4cDAsLQ0JCAsLDwxEWFoawsDBIJBKxoxMRERERERERERERERERERERUTu5fv068vLykJubi5KSEuHW3LgrV66grKzMZHk7Ozu4urqa3CIiIuDj4yMM+/r6CsNeXl5WcSERIiKiLl26YNiwYRg2bJgwrrS0FL///jt++uknJCcn44UXXkBxcTEcHR0RGRkpXFQqLi4OGo1GxPRE5vfmm2/i4MGD+POf/4ydO3eKHYeIiIiIiIio06iqqsI777yD1157DRKJBM8//zwWL158W6VMLEMmIiIiooaUSiW0Wm2Hb6dPnz4YOXIk9u3bd0frGTlyJPr06dNOqW6uvLwcTk5OZtteSx566CFkZWUhICBA7ChEVkun06F79+6YMGECRo0ahXvuuQc2NjatLmM8/rVaLby8vMwR06potVqL+BpJliU+Ph4XL17kNQyJrIS3tzeWL1+Ov/zlL5gxYwZ69uwpdiSzOHv2LFavXo21a9fC09NT7DhE7WrdunUICwvD22+/jWeeeUbsOGZRV1eHJUuW4N5778XEiRPFjtNmvr6+8PX1xciRIwEAer0eZ86cwdGjR3Hs2DF8++23WLduHerq6uDv748BAwYgNjYWX3/9dZMiUp1Oh8LCQsycORMffPABNm7cyGI+Irpjer0ely9fRkpKisl17tPT02+6rFQqRX19PXr37o01a9bg3nvvRWlpKebPn48ffvgBY8aMMcMeWIeamhocPXoU06ZNEzsKUYuMv1vl8WuKx2/nxqspEFGHysnJwYEDB7Br1y6xoxAREREREVEn0PCPQsnJyUhOTsbZs2eRlZWF+vp6uLi4IDw8HNHR0ZgxYwbCwsLQt2/f2/onVyIiIiIiIiIiIiIiIiIiIiIiEl91dTWKi4tbLTZuOFxQUAC9Xm+yDmPBccMSY41G02Rcw7JjIiKizsLFxQXx8fGIj48Xxl24cEEoSE5OTsaGDRug0+ng4+ODuLg4DBo0CHFxcYiKioJUKhUxPVHHUqlU2LhxI0aMGIHx48fzAiZEREREREREHay2thbbtm3DsmXLUF5ejscffxzPPvssXFxcxI5GRERERFbOzc0NhYWFZtnWG2+8cceFyG+88UY7pbk1RUVFcHV1Nes2m9NZiumIOtKhQ4fg7+9/W8u4ubkBAAoLCxEYGNgRsaxaUVGR8BwRGdnb24sdgYhu06JFi7Bt2zYsWLAAhw4dgo2NjdiROpTBYMD8+fMRGRmJefPmiR2HqN2p1Wo899xzWLFiBcaPH48ePXqIHanDrV69Gv/L3p3HRVku7uO/WCURE2WbAQQxFsHcRk0EQxHUULRitQzLDNHjlpm59TE10tTM7VhhpeWCip7jriniBuI2KpoLHJdkGTY9KCCIMDO/P87P+WqibAM3y/V+vXjN9izXPfKoA89zXxcvXkRSUhJ0dHREx9EafX19dOnSBV26dEFERAQAoKCgAElJSZDL5UhISMDixYuRl5cHtVr93PoqlQoAkJCQgE6dOmHGjBmYMWMGmjVrVqfjIKKGR6lU4tatW7h8+TKuXr2Ky5cv48qVK0hJSUFpaSn09fXh6OiIjh07Ijg4GG5ubvj444+Rn59f7vb09PRgZWWFb775Bh988IHm7+pWrVqhc+fOOHLkCK9HeEpiYiKKi4vh7e0tOgrRC/H4LR+P36aNhchEVKt++eUXmJqa8h9eIiIiIiIi0rqcnBwkJSXh0qVLuHTpkuYXQ48fP4aBgQE6dOiATp06YcyYMejcuTM6deoEiUQiOjYREREREREREREREREREREREZVDqVQiNzcXubm5yM7ORnZ2NnJycjT3n37t7t27ePjw4TPrGxoawszMTPNlYWEBFxcXeHp6wszMDObm5rCwsHhmGX19Xl5HRERUFQ4ODnBwcEBYWBiA/00qde7cOcTHxyMhIQFffvklCgoK0KZNG3h4eODNN9+Eh4cHZDIZDAwMBKcn0i4/Pz+MGDEC48aNg5eXV72YCJ6IiIiIiIiosVGpVNi+fTumT5+O9PR0fPjhh5g3bx4sLS1FRyMiIiKiRsLR0RHp6ekoKipC8+bNa3VfTk5OiI6OxvDhw6u1fnR0NJycnLSc6sUePnwIhUIBR0fHOtsnEdWeqpYhA/8rkzMyMkJKSgreeOONWkjVsKWkpDSJgj0iosZOT08Pv/zyC9zd3TFv3jzMnTtXdKRaNWfOHMjlcpw6dQq6urqi4xDVis8//xz//ve/ERwcjJMnT8LIyEh0pFpz9uxZzJgxA3PmzIGLi4voOLXOxMQEnp6e8PT0xKRJk5CcnFzhuEtLSwEAkZGRWLduHX766ScMHDiwLuISUQOgUChw9epVXLlyRXN78eJFzbWrEokEbm5u6N+/P6ZNmwY3Nze4urrilVdeeWY7S5cuRWJi4jPPGRgY4JVXXsHMmTMxefLkcgvZvb29sX///tobYAMUFxcHBwcH2Nvbi45C9FI8fp/H47dp44wNRFRrlEol1q5di1GjRpX7n2oiIiIiIiKiylIoFJDL5ZDL5c/8gggATE1N4erqij59+iAiIgKurq6QyWTP/VKIiIiIiIiIiIiIiIiIiIiIiIjq1qNHj5Cbm4vMzEzk5OQgNzcXWVlZmoLjrKwszfO5ublQqVSadQ0NDTUlxlZWVjA3N4eLiwssLCxgbm7+TLGxpaUlWrZsKXCkRERETZOJiQn69euHfv36AQDKysqQlJSEEydO4MSJE1i0aBFycnJgbGyMN954A3369EGfPn3g7u5e65OJE9WFZcuWwc3NDdOmTcOaNWtExyEiIiIiIiJqNNRqNfbs2YPZs2fj2rVrCA0Nxdy5c9GuXTvR0YiIiIiokXF2doZarcaNGzfQqVOnWt9faGgoAFS5FDk6Olqzbl1JSUmBWq2Gs7Nzne6XiOoPXV1dtG/fHikpKaKj1EvJycn48MMPRccgIiIt6NKlC5YuXYrx48fD09MTvr6+oiPViri4OCxcuBA//PBDnXz+IRLF0NAQW7ZsgUwmw9SpU7Fq1SrRkWrF/fv3ERISAk9PT3zxxRei4whx5swZ6OrqPnM92ouUlZUhNTUVgwYNQu/evTFy5Ei0atWqDlISUUVsbW3h7u5eq/vIy8t7pvRYLpfj0qVLKCgoAPD/io9lMhnCwsLg6uqKLl26oEWLFpXafteuXXHu3DmUlpZCX18fOjo6mDx5MmbOnPnSv2v8/PywZMkSXLt2DR06dNDKWBu6bdu2wc/PT3QMogrx+H0ej9+mjYXIRFRr9u3bh9TUVIwePVp0FCIiIiIiImog1Go1bt68iQsXLuD8+fM4f/48Lly4gNzcXOjo6KB9+/bo1q0bwsLC0LVrV3Tp0gUWFhaiYxMRERERERERERERERERERERNRnFxcXIy8tDZmYmFArFS+9nZWVBrVZr1jUyMoKpqSmkUikkEgmsra3RsWNHzeOnX7OysoKurq7AkRIREVFV6evrQyaTQSaTYfLkyQCAW7duIT4+HgkJCYiJicHcuXOhr6+Pzp07w8fHBz4+PvD09ISRkZHg9ERV16ZNG0RFReHtt99GYGAgBg4cKDoSERERERERUYMXGxuL6dOn48KFCwgICMC2bdvg6OgoOhYRERERNVLt27eHvr4+rl+/XmeFYKGhoejWrRumTp2K3bt3v3RZf39/LFmyBE5OTnWS7WnJyckwMDCAg4NDne+biOoPZ2dnXL9+XXSMeqekpAR//fUXS+OJiBqRsWPH4tixY3j//feRkJDQ6H4unZycjJCQEAQHB+OTTz4RHYeo1rVv3x4///wzgoOD0blz50b3fV9aWorQ0FCUlJQgOjoaenp6oiMJcfr0aejr6+Px48cvXEZXVxcGBgYoLS3VFCefPHkSJ0+erKuYRFSBwMBAxMTEaGVbfy8+vnr1Ki5fvozs7GwAgKmpKVxdXeHm5oagoCC4ubmhc+fOMDc3r9F+3dzcUFpaCh0dHQQGBmLhwoWws7OrcD0vLy/Y2tpiw4YNiIyMrFGGxuDcuXO4du0a1q1bJzoKUYV4/D6Lxy+xEJmIak1UVBT69+/f6H5gS0RERERERNqhVCpx584dXLlyBXK5HHK5HKdOncLdu3ehp6cHZ2dnuLm5Ydy4cZDJZOjduzfatGkjOjYRERERERERERERERERERERUaOiUqmQm5uLnJwcZGdnIzs7G7m5ucjOzkZWVpbmtaysLOTk5KCkpOSZ9c3MzGBhYQFzc3NIJBK4urrCy8sLVlZWmuetrKxgaWmJ5s2bCxolERERieLg4AAHBweEhYUBANLT03HkyBHExcVh8+bN+Pbbb9G8eXN4eHjA29sb/fr1g0wmg74+L4OnhmHo0KEICAjAmDFjcPnyZZiYmIiORERERERERNQgnTx5ErNmzcLRo0fh4+MDuVyOLl26iI5FRERERI2coaEhOnbsiMTERAQHB9fZfp2cnLBr1y4kJSXhzJkz2L17t6Yc2d/fH/7+/ujZsyc6d+5cZ5n+7uTJk3j99ddhYGAgLAMRiSeTybB69WrRMeqdM2fOQKlUQiaTiY5CRERa9Ouvv8LX1xf9+/dHQkICbG1tRUfSCoVCgUGDBsHBwQFr1qwRHYeozgQGBmLOnDkYO3YsTE1NERgYKDqSVqjVanzyySc4ceIEDh8+DAsLC9GRhDlx4gRKS0thaGgIpVIJpVIJANDR0YGZmRns7Ozg7OyMdu3aITc3Fz/99BNu3LgBW1tbGBoaCk5PRAAQFBRUrfUePHiAGzduPFd+fOvWLQBAq1at0L59e7i6umLIkCFwc3NDx44dYWVlpc34Gh07doSXlxcWL16MHj16VHo9XV1djBgxAr/99hvmzZvXZAvun1i/fj0cHR2r9B4SicLj91k8fklHrVarRYcgosYnPT0d9vb2iI6OrvaHByIiIiIiImo8ysrKkJycrCk+lsvluHjxIh4+fAh9fX04OTlBJpNpvrp168bJT4mIiIiIiIiIiIiIiIiIiIiIqqmkpERTYvyk4PhJofGT+0+ez83NhUql0qxrYGAAc3NzWFhYQCKRwNzcXFN2/HTx8ZPnOeElAdWffICIiGomJiZGdIQau3nzJo4cOaIpSc7KykLLli3x5ptvwtvbG97e3ujUqRN0dHRERyV6obt378LV1RUhISFYuXKl6DhEREREREREDcrly5cxf/58xMTEwMPDAwsWLECfPn1ExyIiIiKiJmTKlCmIi4vDxYsXRUepVzp27Ag/Pz8sWrRIdJRqe3JOU2P43To1TFu3bkVISAgacg1AYmIievfujeTkZDg5OYmOU2989dVXWLt2Le7cuSM6CjUSPDeqYlu2bEFwcLDoGNQE3L17F3369IGhoSHi4uLQpk0b0ZFq5N69e/D29kZpaSlOnDjR4MfzMomJiUhLSxMdo16ztbWFu7u76Bh1bty4cVi7di327duHfv36iY5TI2q1GlOmTMHq1auxZ88e+Pr6io4kTFlZGXx9fWFjYwN7e3vY29vDzs4O9vb2aNu27XOFx43h8xlRY1TRz+8eP36M//znP5rSY7lcjqtXr+L27dtQq9Vo2bIlHB0d4erqCjc3N81tu3bt6vRzllKprHYZanJyMjp06IB///vfGDZsmJaTNRwFBQWwt7fHZ599hpkzZ4qOU2P8nF+xxvA5n8fv/zw5fvX09DB8+HBMmTIFdnZ2omNRHdMXHYCIGqeff/4ZZmZmTfofWiIiIiIioqbqyS+Jni4/lsvlePToEQwNDfHaa69BJpMhKCgIMpkM3bt3h5GRkejYRERERERERERERERERERERET1XnFxMTIzM6FQKDS3eXl5zz2XnZ39TMmxkZERTE1NYWpqCqlUCqlUCjc3N0ilUkgkEs3zEokElpaW1b74mpqubdu2oVevXrCxsREdhYioSUhPT8epU6dEx9CK9u3bo3379hg9ejQA4NatW4iNjUVsbCwiIyMxZcoUmJubo2/fvvDx8cHgwYNhbW0tODXRs8zMzLB06VKMHDkSQUFBePPNN0VHIiIiIiIiIqr3rl27hjlz5mDbtm3o2bMnYmNj0b9/f9GxiIiIiKgJ6tevH5YtW4a7d+/CzMxMdJx6ITs7G1evXsXixYtFRyEiwXr06IGWLVviyJEjLER+SlxcHHx8fETHICKiWmBmZoYDBw7Ay8sLb775Jg4cOABbW1vRsaolNTUVgwYNQnFxMY4dO9aoy5ABwN3dvUmW/VLFVq5ciby8PPj5+SE6Ohpvv/226EjVUlZWhoiICPz222/YsGFDky5DBgB9fX0cOXJEdAwi0pLS0lKkpKRoio+f3F6/fh0qlUozr72bmxs++OADTflxhw4doKurKzp+ja7HdXZ2xtChQ/HNN9806Z631atXo7S0FGPHjhUdhajSePz+z5Pjd8KECfjll1+wevVqvPvuu/j000/Rq1cv0fGojuio1Wq16BBE1Lio1Wq89tprCAgIwKJFi0THISIiIiIiolpUUFCA8+fPQy6X48KFCzh//jySk5OhVCrRqlUrdO3aFd26ddPcOjk5cbJUIiIiIiIiIiIiIiIiIiIiIqKnlJaWIjs7W1NknJWVhczMTGRnZyMjIwM5OTma20ePHmnWMzAwgIWFBaRSKaysrGBlZaUpNLa2toaFhQUsLS1haWkJY2NjgSOkpkBHRwdbtmxBcHCw6ChERE3C1q1bERISgsZ+mbhKpcLFixfxxx9/4NChQ0hISEBpaSm6dOmCAQMGYMCAAfDw8ECzZs1ERyUCALzzzjtISkrC5cuX+X9wIiIiIiIiohe4c+cOvvnmG/zyyy9wcXHBnDlzEBgYCB0dHdHRiIiIiKiJys/Ph7m5OdasWYOwsDDRceqFX3/9Ff/4xz+Qm5uLFi1aiI5TbUFBQQCAmJgYwUmoqWos53cMHToUarUau3fvFh2lXrh37x6kUinWrVuH4cOHi45DjQR/NlYxnqdMdS0jIwODBg3CgwcPcODAAbi6uoqOVCVXrlzBoEGD0Lp1a+zfvx9SqVR0JCKhlEolJkyYgKioKPz4448YPXq06EhVUlxcjNDQUMTGxmLr1q0YPHiw6EgNTmP5fEbU2AQFBeHs2bPIyMhAWVkZDA0N4ezsDDc3N7z++utwdXVFx44d4eDgUC+Kj2vL2bNn0bNnTxw6dAg+Pj6i49S5R48ewcHBASNHjsSCBQtEx9EKfs6vWGP5nM/j99njV6lUYt++fViwYAESExMhk8kwceJEvPfee9DX1xcdl2oR/3SJSOsOHz6MW7du4cMPPxQdhYiIiIiIiLSorKwMycnJkMvlkMvlSEhIwMWLFzXlx25ubvDx8cEXX3wBmUyGDh06NOpfEhERERERERERERERERERERERvcyDBw+gUCieKTRWKBTIysrSlB7n5OQgJyfnmfVatmwJqVQKCwsLWFtb44033oBEItGUHj95zcLCQtDIiIiIiOqGrq4uunXrhm7dumHGjBkoLCzE0aNHcfDgQezYsQPffvstjI2N4eXlhQEDBmDgwIFwcXERHZuasFWrVqFjx4746quvsHjxYtFxiIiIiIiIiOqVnJwcLF26FMuWLYNEIsHq1avx8ccfQ09PT3Q0IiIiImriWrZsicGDB2P9+vUsRP7/rV+/Hv7+/g26DJmItCc0NBQjR45EdnY2LC0tRccRbvPmzTAwMIC/v7/oKEREVIusra1x/PhxDB06FO7u7lizZk2DKeuKjo7GmDFj0LVrV+zcuROtWrUSHYlIOD09PaxevRqWlpYIDw/HhQsX8N1338HIyEh0tAqlpKQgODgY6enpiI2Nhbu7u+hIRERaZWtri8WLF8PNzQ2Ojo4wMDAQHanO9ejRAwMGDMCsWbPg7e3d5Ob1//777/HgwQN8+umnoqMQVRmP32ePXz09Pfj7+8Pf3x9yuRzLly/Hxx9/jOnTpyM8PByTJk2Cqamp4NRUG1iITERat3btWvTq1Quurq6ioxAREREREVENKBQKJCQkID4+HnK5HOfPn0dxcTFMTEzQqVMneHh4YOLEiZDJZHBzcxMdl4iIiIiIiIiIiIiIiIiIiIioTuTl5UGhUCAzM/OZ27y8PM39jIwMPHjw4Jn1TE1NIZFIIJVKIZFI0KFDB839J7c2NjZ49dVXBY2MiIiIqH5r0aIFhgwZgiFDhgAAsrKycPDgQezZswfz5s3D5MmTYW9vjwEDBsDHxweDBg2CiYmJ4NTUlFhbW2PJkiUYM2YMQkNDIZPJREciIiIiIiIiEu7evXtYvHgxVqxYATMzM6xYsQKjRo2Cvj6nQSQiIiKi+uODDz5AYGAg0tLSYGtrKzqOUKmpqTh+/Dh27NghOgoRaVlGRgZu3ryJoqIiFBQUID8/H0VFRSgqKkJeXh6Ki4tRVFSEBw8e4MGDBygsLER+fj4ePHgApVIJHx8fHDt2DK1btxY9FKHWr1+Pd999l6XxRERNgKmpKWJjYzF16lSEhITg6NGjWLp0ab0tUC0uLsbkyZOxZs0aTJw4EYsWLYKhoaHoWET1ypw5c+Dm5obRo0cjMTERW7ZsgaOjo+hYL7Rp0yZERETAxcUFZ8+eRbt27URHIiLSOisrKwQFBYmOIdzSpUvRtWtX/PzzzwgPDxcdp86kpaUhMjISs2bNgoWFheg4RNXC47f841cmk+H333/H3Llz8dNPP2H58uVYunQphg8fjilTpsDZ2VlAaqotPBOQiLTqwYMH2LFjB77//nvRUYiIiIiIiKgKFAoF5HK55isxMRH37t2Dvr4+nJycIJPJEBYWBg8PD3To0AG6urqiIxMRERERERERERERERERERERaU1hYSEyMjKQk5PlA5FkAAAgAElEQVQDhUKBrKwsZGVlITMzE9nZ2ZrXcnJyoFarNesZGxvD2toalpaWkEgkcHV1hbe3N6RSKSwsLGBtbQ0LCwtYWlpCR0dH4AiJiIiIGh8rKyuEhYUhLCwMSqUSZ86cwb59+7Bv3z6sWbMGRkZG6NevHwYPHoy33nqLk4BRnRg1ahSio6MxatQonDt3DgYGBqIjEREREREREQlRWFiIf/7zn1iwYAEMDAwwZ84cTJo0qd4WRRARERFR0zZ48GCYmppi3bp1+PLLL0XHEWrt2rVo3bo1Bg0aJDoKEWlZUlISBg8erHmsr68PXV1dzfmtarUaKpUKZWVlz61rb28PHR0dmJqa1lne+ujKlSs4ffo05s2bJzoKERHVkWbNmmHlypXw8fHBRx99hEOHDmHFihV46623REd7RlxcHMaPH4+MjAxs3rwZwcHBoiMR1VuBgYHo0aMHQkND0blzZ0ybNg0zZsxAs2bNREfTyMjIwIwZM7B+/XqEh4dj5cqVLDgnImrk3NzcMGHCBMyYMQPvvPMOzM3NRUeqExMnToRUKsVnn30mOgpRtfH4ffnx265dOyxcuBCzZs3Cr7/+iu+//x4///wz/Pz8MGnSJPj4+NRRYqpNLEQmIq2Kjo6GWq3mDzmJiIiIiIjqsYKCAiQlJWnKj+Pj43H79m0AgIODAzw8PPDll19CJpOhe/fuvKiUiIiIiIiIiIiIiIiIiIiIiBqskpIS3Lt3D5mZmVAoFOXe3rp1C3l5ec+sZ2pqColEAlNTU0ilUvTr1w9SqRQSieSZ26Y+sRsRERFRfaGnpwd3d3e4u7tj/vz5yM3Nxf79+7Fnzx7MnDkT//jHP+Dg4AAfHx8MGTIEAwcO5MRgVCt0dHTwww8/oFOnTli+fDmmTp0qOhIRERERERFRnXr8+DHWrVuH//u//0NRURHGjRuHmTNnomXLlqKjERERERG9kKGhIcaMGYPly5fj008/RYsWLURHEuLhw4f45z//iXHjxsHAwEB0HCLSsoEDB0IqlUKhUABAucXH5fnss8/w/vvvQyaTYf/+/fDz86vNmPXawoUL0aFDB5Z0EBE1QcOGDUNSUhImT54MPz8/BAUFYdGiRbC3txea6/bt2/j888+xfft2BAQE4ODBg7CxsRGaiaghsLOzw7Fjx7BkyRJERkZiy5YtWLZsGQYOHCg0V3FxMZYtW4avv/4atra2OHToEP/vSUTUhHz11VfYunUrxo4di23btomOU+s2bdqEnTt34uDBg2jWrJnoOEQ1wuO3YiYmJpg0aRImTJiAvXv34ttvv4Wvry+6deuGSZMmYfjw4fzdVAPGQmQi0qq1a9ciICAArVq1Eh2FiIiIiIiIAJSWliIlJQUJCQmIj4+HXC7H9evXoVKpIJFIIJPJEBYWBplMBg8PD7Ru3Vp0ZCIiIiIiIiIiIiIiIiIiIiKiCpWVlSE7Oxvp6enIyspCWloasrOzkZaWhqysLGRkZCAzMxP37t3TrKOrqwtLS0tIpVJIpVJYW1ujR48esLa2hpWVFaRSKaysrGBhYQE9PT2BoyMiIiKimjI3N0dYWBjCwsLw+PFjnDhxAvv27cPevXsRFRWFli1bYsCAARg6dCgGDx7M86hJqxwdHTFr1izMmTMH77zzDtq3by86EhEREREREVGtKy0txdq1azFv3jzcv38f48ePxxdffAFTU1PR0YiIiIiIKmXKlClYsWIFfv75Z0yePFl0HCFWr16NoqIiTJgwQXQUIqoFenp6GDt2LObOnVthGbKOjg50dHSwfPlyjB8/HgDw1ltvYf78+U22EPnWrVvYvHkz1q1bB11dXdFxiIhIAFtbW2zfvh379+/HxIkT4eTkhBEjRmD69OlwcnKq0ywpKSlYsGABNm7cCHt7exw4cEB4kStRQ2NoaIiZM2fi/fffx6RJkzBo0CD06tULs2bNwuDBg6Gjo1NnWQoKCvDDDz9g6dKlKCgowMyZMzF16lSWQxIRNTEmJibYsGED+vfvj1WrVml+JtMY3bhxA2PHjsWkSZPg4+MjOg5RjfH4rTxdXV34+/vD398fcrkcy5cvx8cff4zp06cjPDwcEydO5HV+DZCOWq1Wiw5BRI3DlStX0LFjRxw+fBje3t6i4xARERERETU5SqUS169fh1wu13ydO3cOJSUlaNmyJV5//XXIZDJ4enqiT58+sLKyEh2ZiIiIiIiIiIiIiIiIiIiIiOgZarUa2dnZz5QaZ2RkQKFQaL4yMzORnZ0NlUqlWc/MzAxWVlawsbGBlZUVbG1tYWlpCVtbW1hZWcHa2hqWlpbQ19cXODqixktHRwdbtmxBcHCw6ChERE3C1q1bERISAl4mXj03b97Evn37sHv3bhw7dgxKpRJ9+vSBv78/hg0bxvJa0oqysjJ0794dbdq0QWxsbJ1OjEdERERERERUl1QqFbZv346ZM2ciNTUVH374Ib766itIJBLR0YiIiIiIqmzKlCnYsmULUlJSYGxsLDpOnSosLISjoyNGjBiBxYsXi46jFUFBQTh16hR69eolOgo1Uenp6Th16lS9Or8jKysLNjY2UCqVL1xGT08Penp62LBhA4KCgjTPnzx5Eh4eHjh48CB8fX3rIm69MmrUKBw/fhzXr1/n+cikdTyvpGI8T5nqm9LSUmzcuBELFizAzZs3MWTIEIwcORJ+fn61VmBaUlKCvXv34vfff8fu3bvh5OSE6dOn4/333+e/TURacPr0aURGRmLPnj3o2LEjRo0aheHDh8PS0rLW9nnu3Dls2LAB69evR2lpKcaNG4cpU6bAwsKi1vbZVPH8e6L66cnPHWJiYgQnqV/mz5+PyMhIxMfHo3v37qLjaF1xcTF69eqFZs2aIT4+HoaGhqIjaR0/51essX7O5/FbPX/99Rd+/PFHREVFobS0FO+99x4+/fRTuLi4aGX7VPtYiExEWjN16lRs374dN2/ehK6urug4REREREREjd7du3dx6tQpJCYmIiEhAXK5HIWFhWjevDm6du2KHj16oEePHujZsydee+010XGJiIiIiIiIiIiIiIiIiIiIqIkrLi5GZmamptT477e3bt1CWloaSktLNesYGRlBKpVCIpG88LZt27YwMTERODIiYiEyEVHd4oRM2lNUVITDhw9jz5492LFjB3JycuDg4IAhQ4bA398fffv25USBVG2nT5+Gh4cH1q1bhxEjRoiOQ0RERERERKR1sbGxmDp1Ki5fvoyAgAAsXLgQDg4OomMREREREVVbdnY2XFxcEBERgQULFoiOU6emTZuGn3/+GcnJyTA3NxcdRyuWLl2KxMRE0TGI6k2pj1KpxP79+zF58mSkpqY+c77uE/r6+jA2NsbevXvh4eHx3OtDhw7FjRs3cPHixUZZVvMip06dgoeHBzZu3IjQ0FDRcagRYlFSxXieMtVXKpUK27Ztw5o1axAXF4dWrVohICAAvr6+6Nu3b43/b52bm4sjR47g0KFD2L59O/Lz8+Ht7Y1PPvkEAQEB7AQhqgVJSUlYuXIltm3bhocPH2LAgAHw8/ODt7c3OnToUKNtl5SU4NSpUzh8+DC2bduGa9euwdnZGSNHjkRERARMTU21NAr6O55/T1Q/sRC5fCqVCn5+frh06RISEhLQrl070ZG0pqysDAEBAYiPj8e5c+ca1diexs/5FWusn/N5/NZMQUEBoqOj8d133+HGjRvw8/PDpEmT4OPjo/V9kXaxEJmItKKsrAy2traIiIjAnDlzRMchIiIiIiJqdFQqFa5evYrExEScPHkSiYmJSE5Oho6ODpydneHu7o5evXqhZ8+e6NixIyfdIiIiIiIiIiIiIiIiIiIiIqI6U1RUhPT0dGRlZSEtLQ3Z2dlIS0tDVlYWMjIykJmZiYyMDBQXF2vWeVJ0/ORLIpHAxsYGVlZWmltbW1sYGxsLHBkRVRYLkYmI6hYnZKodZWVlOH78OHbt2oVdu3bh9u3bsLS0hL+/P4YNGwZfX180a9ZMdExqYMaPH4/Nmzfj2rVrjWbieCIiIiIiIqLY2FjMnDkT586dQ2BgIObPnw9nZ2fRsYiIiIiItGLlypWYOnUqLl68WOOio4bi6tWr6NKlC1asWIGIiAjRcYhIyxQKBX755ResWbMG6enp6NKlCy5cuPDccgYGBpBIJDh06BCcnJzK3VZqaipcXV3x5Zdf4osvvqjt6PWCSqWCu7s7XnnlFRw5coSFNlQr+H1VMZ6nTA1Beno6Nm3ahH/96184d+4cVCoVXn/9dXTr1g3Ozs5wcnJCu3bt8Oqrr6JVq1Zo0aIFAKCwsBD379/HgwcPcOvWLaSkpCAlJQVyuRx//vkn9PT00L17d7z77rt47733YG1tLXikRE1DcXExdu7cic2bN+PIkSPIz8+HRCJB79694eTkBGdnZzg6OsLCwgItWrTQfOXl5aGgoACFhYXIyMhASkoKrl+/jitXruDUqVMoLi6Gg4MD/Pz8MGLECLzxxhuih9ok8Px7ovqJhcgvVlBQgH79+uH+/fuIj4+HlZWV6Eg1plar8cknn2DTpk04dOgQPDw8REeqNfycX7HG/Dmfx2/NqVQq7N27FytWrEBsbCy6du2KiIgIhIWFwcjIqFb3TdXDQmQi0oqdO3finXfewY0bN+Dg4CA6DhERERERUYNXWFiIixcvIiEhAfHx8UhMTMS9e/dgbGyMLl26QCaTwdPTE3379uWkSERERERERERERERERERERERUK9RqNbKzs5GRkYGMjAykpqZCoVAgPT0dCoUCmZmZSE9PR35+vmYdfX19WFpaPlNqbGlpCVtbW1hZWcHa2hoSiQRt2rQRODIi0jYWIhMR1S1OyFQ3Ll++jN27d2Pnzp04e/YsTExMMGTIEAQEBGDQoEFo3ry56IjUAOTn58PNzQ3e3t747bffRMchIiIiIiIiqpFTp05h1qxZiIuLg4+PD7799lt069ZNdCwiIiIiIq1SKpXo2bMnWrRogbi4OOjp6YmOVKuUSiX69u2LkpISnDp1Crq6uqIjEZEWqFQqxMXFISoqCjt27ICxsTGCg4MxceJEuLq6wt7eHqmpqZrl9fX10alTJxw4cKDCee0iIyOxYMECXLx4Ea+99lptD0W4pUuXYsaMGUhKSoKLi4voONRIsSipYjxPmRqa/Px8HDt2DEePHsWVK1eQnJyM1NRUqFSql66nq6sLOzs7ODk5oWPHjujbty/efPNNtGzZso6SE1F5ysrKIJfLERcXh/PnzyMlJQXJyckoKSmpcN02bdrA2dkZHTp0QO/eveHt7Q17e/vaD03P4Pn3RPUTC5FfLjs7G56enmjRogX++OMPWFhYiI5UbWq1GlOmTMGqVauwY8cODB48WHQkolrF41d7zp8/j2XLlmHz5s1o06YNxowZgwkTJnCuinqGhchEpBVvv/02CgsLERsbKzoKERERERFRg6RQKDTlxwkJCbhw4QJUKhUkEgk8PT3h4eEBmUyGnj17wtDQUHRcIiIiIiIiIiIiIiIiIiIiImrgysrKkJWVhdTUVE3hcVpaGhQKBdLS0pCeno7MzEw8fvxYs46ZmRmkUilsbW0hkUhgbW0NqVSq+ZJIJLC0tOSEiERNEAuRiYjqFidkqnvp6en417/+he3btyMhIQHNmjWDn58fAgICMHjwYJiYmIiOSPXY3r17MWTIEBw8eBC+vr6i4xARERERERFV2Z9//ol58+YhJiYGHh4eiIyMhJeXl+hYRERERES15uLFi3B3d8e0adMwd+5c0XFq1ezZs7F06VKcOnUKnTp1Eh2HiGooOzsb69atQ1RUFG7dugWZTIbw8HB88MEHeOWVVzTLffvtt5g9ezbKysqgq6sLf39/REdHP7PMizx+/Bi9e/eGSqXCyZMnYWRkVJtDEurs2bPw9PTEnDlzMHPmTNFxqBHbunWr6Aj1Xu/evWFjYyM6BlGNPHr0CKmpqSgoKEBeXh4KCwsBACYmJmjVqhVMTEzQtm3bRv1vK1FjolKpkJGRgdzcXBQWFqKwsBAPHz6EqakpWrRogRYtWkAikbCorZ7g+fdE9RMLkSt2+/ZtDBgwADo6Ovjjjz/Qrl070ZGqrLS0FKNGjcLWrVvx+++/IyQkRHQkojrB41e7MjMz8dNPP2HlypUoKipCUFAQZsyYgQ4dOlS47oEDB5CdnY2RI0fWQdKmiYXIRFRjOTk5sLGxwdq1a/H++++LjkNERERERFTvlZaW4tKlS5ry42PHjiEnJwf6+vro3LmzpvzYy8sLdnZ2ouMSERERERERERERERERERERUQNTUlKCe/fuITMzE7du3YJCoXjufmpqKsrKyjTrmJqaQiKRQCqVwsHB4bn7tra2aNmypcBREVF9xkJkIqK6xQmZxLp37x727t2LmJgY/PHHH9DT04OPjw/8/f3xzjvvwNzcXHREqocCAgJw/vx5/PnnnzA2NhYdh4iIiIiIiKhSkpOTERkZiY0bN0Imk+HLL7+Ev7+/6FhERERERHXihx9+wPjx43HgwAH4+vqKjlMr4uLiMGDAAPzwww/45JNPRMchohqIj4/HihUrsGPHDjRv3hwhISEYP348Xn/99XKXz8nJgbW1NcrKyjBp0iQsXboUurq6ld7fzZs3IZPJMGLECKxatUpbw6hX7t+/j27duqFdu3Y4ePAg9PT0REciIiIiIqJq4vn3RPUTC5ErJzs7G35+fsjMzMSuXbvQvXt30ZEq7f79+wgNDcXJkyfxr3/9Cz4+PqIjEdUpHr/aV1hYiE2bNuH7779HSkoKvL29MXHiRAwZMgQ6OjrlrtO3b18cP34cy5Ytw8SJE1+6/a1bt9ZG7Eald+/esLGxeeY5FiITUY2tWLECs2fPRlZWFpo3by46DhERERERUb2jUCggl8uRkJCA+Ph4nDt3DiUlJZBIJJDJZPD09ISHhwe6d+8OIyMj0XGJiIiIiIiIiIiIiIiIiIiIqB579OgRFApFuSXHT27/+usvqFQqzTqmpqbllhw/uW9rawsDAwOBoyKiho6FyEREdYsTMtUfeXl52L17N2JiYnDo0CGUlZWhV69eCAoKQkhICKysrERHpHoiMzMTrq6uGDNmDBYuXCg6DhEREREREdFLpaWl4euvv8avv/4KR0dHzJ07F4GBgS+cNJKIiIiIqLEKDQ1FXFwcEhIS4OjoKDqOViUnJ8PT0xO+vr7YtGmT6DhEVA3379/H1q1bsWLFCly5cgUymQzh4eEYMWJEpeYJf++999CzZ09Mnjy5Wvvftm0bgoOD8dNPPzW6UvXS0lL4+/vj8uXLuHDhAiwsLERHIiIiIiKiGuD590T1EwuRKy8/Px/BwcE4evQoFi9ejAkTJoiOVKGzZ88iJCQEJSUl2LVrF2QymehIRELw+K0dKpUKe/fuxYoVKxAbG4vOnTtj3LhxCAsLe6bv5dKlS+jcubPm8bx58/Dll1++cLs8P65i5c0nwEJkIqqxHj16oGPHjli7dq3oKERERERERMKVlZUhOTlZU34cHx+P27dvQ09PD87OzpryY5lMBjc3N9FxiYiIiIiIiIiIiIiIiIiIiKgeKS4ufq7kuLzC4yeaNWuG1q1bl1ty/OS+nZ0d9PT0BI6KiJoCFiITEdUtTshUPxUVFeHw4cOIiYnBv//9bxQXF2vKkYOCgiCVSkVHJMFWr16NSZMm4fTp0+jWrZvoOERERERERETPuXv3LpYsWYLly5fD0tISM2fOxMcff8zfNxIRERFRk1VUVARfX1+kpaUhISEBtra2oiNphUKhgIeHBywsLBAXFwdjY2PRkYioCuRyOaKiorB+/XoYGBggNDQU48aNe6bUoTIePXr0TDFEdcydOxfz58/H5s2bERgYWKNt1RdqtRofffQRYmJicPjwYfTq1Ut0JCIiIiIiqqGqnn9fmSK8p7f1ZPnytv/0tqpy/v/fM6jVaujo6Gi28fR9bamNbVZXeeMXkUHU+1Hd7xttZ6jtfbMQuWpUKhUiIyMxd+5cDBs2DD/++CPMzc1Fx3qOUqnE8uXLMWPGDPTr1w/r16+vlzmJ6hKP39p14cIFfP/999i8eTNat26NiIgIjB8/HmZmZhg5ciQ2b96Mx48fAwB0dXUxduxYrFy5stz/87EQuWIsRCYirfvPf/4DJycnxMbGon///qLjEBERERER1bmCggIkJCTgxIkTOH78OM6dO4dHjx7B3NwcvXr1Qu/evdG7d290794dzZs3Fx2XiIiIiIiIiIiIiIiIiIiIiATJy8srt+T4yf309HTk5+drljcyMoJUKi235PjJfSsrK+jq6gocFRHR/7AQmYiobrEQuf4rLi5GbGwsYmJisGPHDjx8+BDu7u7w9/dHQEAAXnvtNdERSQCVSoU333wTjx8/RmJiIsukiIiIiIiIqN7473//ixUrVuD777+HiYkJPv/8c0RERKBZs2aioxERERERCXf37l306dMHhoaGiIuLQ5s2bURHqpF79+7B29sbpaWlOHHiRIMfD1FT8eDBA2zZsgWrVq3C5cuXIZPJEB4ejvfff194qfm4ceOwdu1a7Nu3D/369ROapabUajWmTJmC1atXY8+ePfD19RUdiYiIiIiItKA6hch/Lzx+0eOXlRRX9Liy+3/yHPD/ipGf3NeW2thmdVX3fWssmtL4WYhcPUePHkVYWBgePnyIyMhIhIeH15trzU+dOoVx48bhypUrmDNnDqZPn15vshHVBzx+a1d6ejpWrVqFqKgolJSUIDAwENHR0SgtLX1mOV1dXQwfPhzr1q2Dvr7+M6+xELliLEQmIq2bPXs21q5di9TUVF50S0RERERETcK9e/cQHx+PY8eO4cSJE7hw4QKUSiWcnZ3Rp08feHp6wt3dHU5OTqKjEhEREREREREREREREREREVEduXv3LtLS0pCWlobU1FSkpaUhPT1dc1+hUDxzoZSZmRmsra1ha2sLa2trSKVStG3bFtbW1prnTUxMBI6IiKhqWIhMRFS3WIjcsBQXF+PAgQPYvn079uzZg/z8fPTs2RMBAQEIDg6GnZ2d6IhUh65cuYKuXbtixYoViIiIEB2HiIiIiIiImriHDx9i1apVWLhwIfT09PD5559j4sSJeOWVV0RHIyIiIiKqV+7cuQMvLy8YGxvjwIEDsLW1FR2pWlJTUzFo0CAUFxfj2LFjaNu2rehIRFQBuVyOqKgobNiwAXp6ehg+fDgiIiLQtWtX0dE0lEolRowYgR07diA6Ohpvv/226EjVUlZWhoiICPz222/YsGEDQkJCREciIiIiIiItqa1C5BcVF7+oIPlFz1X29Yq2XVP1pXhXVI6mPv6aqG5mFiJXX2FhIebOnYvly5ejc+fO+PrrrzFw4EBheW7evInIyEj89ttv6Nu3L/75z3/CxcVFWB6i+ozHb+17+PAh1q1bh4ULFyIrKwtlZWXPLaOnpwc/Pz/ExMSgWbNmmudZiFwxFiITkVap1Wq0b98eQUFB+Pbbb0XHISIiIiIiqhVZWVk4e/YsEhISEBsbiwsXLkClUsHBwQE+Pj7w8PBA3759eWI3ERERERERERERERERERERUSP18OFD3LlzR1NynJaWhjt37mjup6amori4WLO8mZkZbGxsYGtrCzs7O9jY2MDa2hpt27aFVCqFjY0NjIyMBI6IiEj7qlKIXJmLQf8+ScjfnytvW9W9VLKiiUIqyke1pyFO4KFt2nwPKrut2nrftXG8NkbVfb9ZiNxwlZSUIDY2Ftu2bcOuXbuQl5eH3r17Y/jw4QgODoa5ubnoiFQHPvvsM6xbtw7JyckwMzMTHYeIiIiIiIiaoMePH2PdunWYM2cOCgsL8Y9//AMzZszAq6++KjoaEREREVG9lZGRgUGDBuHBgwc4cOAAXF1dRUeqkitXrmDQoEFo3bo19u/fD6lUKjoSEb1Afn4+Nm/ejNWrVyMpKQkymQzh4eF477330KJFC9HxyqVUKjFhwgRERUXhxx9/xOjRo0VHqpLi4mKEhoYiNjYWW7duxeDBg0VHIiIiIiIiLarp+fcvOu+/NguPK3qdhciNZ7/1NUdVsBBZnCtXrmDq1Kk4cOAAunfvjlmzZmHo0KHQ1dWtk/1fvXoVCxcuRHR0NOzs7PD1118jNDS0TvZN1NDx+K1dJSUlkEql+O9///vCZfT19eHh4YE9e/ZofvbOQuSKlTefgL6gLETUCJw4cQK3b9/GiBEjREchIiIiIiLSGoVCoSk/jo+Px7Vr16Crq4suXbrAw8MDX3zxBby9vdGmTRvRUYmIiIiIiIiIiIiIiIiIiIiohkpLS5Gbm4vMzEzcunULCoVCc//J46ysLM2FuEZGRpBKpZBIJJBKpZDJZHBwcNA8dnR0RMuWLQWPioio/vt74XF5Bch/f+1FEyPUZCKPii5MfdG2G+LEEg1RU3+PtXnhdFW2VVtlyDyGnseL45umZs2aYfDgwRg8eDCUSiWOHDmC33//HTNmzMCkSZPQq1cvhIWFITQ0lJ8tGrGvvvoKmzdvxuzZs/Hjjz+KjkNERERERERNSFlZGTZt2oSvvvoKCoUCI0eOxLx582BpaSk6GhERERFRvWdtbY3jx49j6NChcHd3x5o1a56b7Lu+io6OxpgxY9C1a1fs3LkTrVq1Eh2JiMohl8sRFRWFjRs3QqlUwt/fH0uWLIGPj4/oaBXS09PD6tWrYWlpifDwcFy4cAHfffcdjIyMREerUEpKCoKDg5Geno7Y2Fi4u7uLjkRERERERFSuF5Uyl/fa09crVOW1qixTmeVelk+tVj/3+pPHTz9f3vVl5b3+om1VZvwV7be643mZ8pYtL0d5671svC/KV9XXKnrfq5KZao+bmxv279+PpKQkfPfddwgMDISlpSUCAwPx4YcfomvXrlrf5/3797Fr1y6sX78ehw8fhqurK3755Re899570KqK67MAACAASURBVNdnJSZRZfH4rV2///477t+//9JlysrKkJCQAF9fXxw4cACvvvpqHaVrfHTU/B8AEVVTeHg4zpw5g4sXL4qOQkREREREVG23bt1CfHw8EhIScPDgQfz111/Q19dH586d4ePjAw8PD/Tp04cncBMRERERERERERERERERERE1QHl5ec8VHT99/86dO1AqlQAAQ0NDtGnTBlKp9JmSYwcHB81jiUTC4joionLo6Ohgy5YtlZrktaJi1KcnSHjR5BDlrfei5yrKUZl1arovavhE/Xlrc78iv2cb2/GijfFU5e+g8mzduhUhISGN6n1t6oqLixEbG4v169dj586d0NXVhY+PD4KCghAYGIjmzZuLjkhatnHjRoSFhSExMRE9e/YUHYeIiIiIiIgaObVajW3btmH27Nm4ffs2PvroI8yZMwdSqVR0NCIiIiKiBqekpARTp07FqlWrMHbsWCxdurTeFn4WFxdj8uTJWLNmDSZOnIhFixbB0NBQdCwiekpBQQGio6Px448/4sKFC+jQoQNGjhyJTz75BK1btxYdr1q2bduG0aNHw8HBAVu2bIGjo6PoSC+0adMmREREwMXFBVu2bEG7du1ERyIiIiIiolpQ0/PvX3Tef1WvN6ro+oGqXhcFoNzrrF527VZlX6vO9VZV2fYTFe377wXF5a33oudq8t68qPi3OuMpT2Uzlbfe3/dVlXFV9rXKvO+VzfwyQUFBAICYmJgqr0vlS0lJwe+//44NGzbgzp07cHFxQf/+/dGvXz94eXnBzMysytssKSnBmTNnEBcXh7i4OCQmJsLQ0BDvvvsuPvjgA/Tv3x+6urq1MBqipoXHr/ao1Wo4Ozvj5s2bUKlUFS5vYGAAFxcXHD58GBYWFnWQsGErbz4BFiITUbU8evQIEokEs2fPxmeffSY6DhERERERUaUolUpcv34dCQkJiI2NxdGjR5GbmwtjY2N06dIFnp6e8PHxgaenZ709wZyIiIiIiIiIiIiIiIiIiIiI/qe4uFhTbFxe6fGdO3fw8OFDzfKmpqbPFR0/fd/Ozg56enoCR0RE1HBVpRC5vHWrMykIC5GpLrEQueHuuzawEJlq2/3797Fr1y7ExMTgwIEDMDY2xtChQxEUFIS33noL+vr6oiOSFqjVanh5eQEAjh8/LjgNERERERERNWaxsbGYNm0akpKSEBAQgG+++Qavvfaa6FhERERERA3ezp078dFHH6FNmzZYsWIF3nrrLdGRnhEXF4fx48cjIyMDa9asqdZ5PURUe+RyOaKiorBp0yaUlpZi6NChCA8Ph4+Pj+hoWnHnzh2EhoYiKSkJ06ZNw4wZM9CsWTPRsTQyMjIwY8YMrF+/HuHh4Vi5ciUL44mIiIiIGrH6UIhc3euXKrvsiwp6n6hMUW9Vr3OoavmztkubX7Svypb1vqw4uar7rWqpcVWvmavM+n9X2T/zyqxX08wvwkLk2qNSqXDixAns378fcXFxOH/+PJRKJSwsLODi4gJnZ2dIpVKYmJjAxMQErVq1QmFhoeYrJycH//nPf5CcnIy//voLSqUS9vb26NevH3x9feHv748WLVqIHiZRo8Tjt+b++OMPDBo0CAYGBtDR0UFZWVmFxcgGBgaws7PDjRs36ihlw1XefAK82pGIqmXPnj3Iz89HaGio6ChEREREREQvVFZWhqSkJMTHx2tKkPPy8mBiYoI33ngDn332GTw8PNCzZ0+ehEhERERERERERERERERERERUj5SUlCAjI+O5kuMn92/evIn79+9rljcyMtIUGzs4OMDDw+OZ0uN27dqhefPmAkdERET1ibbLWZ+e8APAcxNY/P25v79W3uvVee1l67xo3y+ajKKi3OUtUxvjeXo/T14vb/nqjP1l65c3oUdlx1ve+1PR+1qV/FVZ72Xfk09n+/vjyn5fVSb3k2Uq+35U9XvzZd+rFa1bmbGU93349+WfXq+y7wmLjOllWrVqhbCwMISFhSEjIwPbtm1DTEwMhg0bhtatWyMgIAAffPABPDw8yv1epIZBR0cH3333Hd544w3s2rULQ4cOFR2JiIiIiIiIGpn4+HjMmjULx48fh4+PD86fP4/OnTuLjkVERERE1GgMGzYMSUlJmDx5Mvz8/BAUFIRFixbB3t5eaK7bt2/j888/x/bt2xEQEICDBw/CxsZGaCYi+p9Hjx5h9+7diIqKQmxsLJydnTF79myMHj0abdq0ER1Pq+zs7HDs2DEsWbIEkZGR2LJlC5YtW4aBAwcKzVVcXIxly5bh66+/hq2tLQ4dOtRoSqiJiIiIiKj+EnENQU3Knxu7v1/f0lhU98+c17c0Trq6uvDy8oKXlxcA4P79+zh9+jSuXbuG5ORkpKSkICEhAYWFhSgoKEBeXh5atGih+TI3N0f79u3x0UcfwcnJCTKZDA4ODoJHRdQ08PitOQsLC6xevRp3797VfGVmZiIzMxP37t3D/fv3UVpa+sw6ZWVlLEOuAR01/0dBRNXw9ttvo6ioCAcPHhQdhYiIiIiISKOoqAiJiYk4fvw4jh8/jtOnT6O4uBgSiQRvvvkm+vTpAy8vL7i6ukJXV1d0XCIiIiIiIiIiIiIiIiIiIqImKzs7G6mpqbhz547m9sn99PR05ObmapZt3rw52rZtC1tbW9jY2KBt27Zo27YtbGxsYGtrCzs7O5YdExEJpqOjgy1btiA4OLha676sdPdlzz39uDKlqBVtozrrVFQW+/RyL9tvZZet6v2KxlPZsTy9bnnLaGM8Tz8ur/S2Ott/2di1kfNFuf+evbznqrPfyo6lvO28aP/l5a/N9706x8zL3teK3quK3v/KvB9/z1qV9768PFX9O6g8W7duRUhICCeeaWKSk5MRHR2N6OhopKSkoH379hg+fDiGDx8OV1dX0fGomoKDg3Hp0iX8+eef0NfXFx2HiIiIiIiIGoEzZ85g/vz52LNnD3x8fLBgwQJ0795ddCwiIiIiokZt//79mDhxIu7cuYMRI0Zg+vTpcHJyqtMMKSkpWLBgATZu3Ah7e3usXLlSePEoEf3PtWvX8Ntvv2HNmjV4+PAhhg4divDwcPTv//+xd+dhVdaJ//9f7LIK7igKHBMUc3KpMdNKiczUJktx1zSTmtHJprRc+pZtalpNk2mGuaRlKrhmZorrpDZNmlNhroALbqgcNgHZfn/043wQWQ6bN8LzcV3ngnPu7fW+4ZxLD+d+vx6qUcVLxTl16pQmTJigDRs26N5779W0adPUp0+fWzr2lJQUffLJJ/rggw+UkpKiqVOnauLEiXJycrplGQAAAAAYp6Kfv6+sa58qcqzCyyrrWhRr91+RfVU0f2m5quKarbIetyLXlVhzrLJsb836ZV1W0czFCQ0NlSRFRESUeVsAACoiJSVFCQkJunTpki5fvqwrV67o8uXLmjhxotHRqr2i5hPgijgAZXb16lVt2bJFCxcuNDoKAAAAgFouJydHhw4dUlRUlKKiovT9998rIyND3t7e6tatmz788EN17dpVQUFBteIDnwAAAAAAAAAAAAAAANVBVlaW4uPjdfr0acXFxVmKjgsWH2dkZEiSbG1t5e3tLT8/P/n6+qpnz55q3ry5pQC5efPmql+/vsEjAgBUV4ULXEv7rGB5J1fI37bgcQtnKG0iieLWK2qfhY9XHGv3ZW2u0jIWXr+ofVvDmrFa8/Msz7FLWrfg2KyduKWkfZT0WOFtSstW1u2Ky2DNPktarzy/p8UdoyzPmeK2seb5bM3PpLhzae3vgrUqc1+onQIDAzV9+nRNnz5dBw4c0IoVK7RkyRK9/fbbuuuuuzR06FANGTJEzZs3NzoqymDWrFlq06aNlixZorFjxxodBwAAAABwGzt8+LCmT5+uyMhI3XvvvdqxY4d69OhhdCwAAACgVnj00Ud1+PBhffnll5o5c6aCgoLUt29fPfXUU+rdu3eVFW5mZmbqm2++0bJly/T1118rICBACxcu1LBhw2Rvz9TjgJEyMzO1ceNGhYeHKyoqSq1atdLLL7+sp59+Wg0bNjQ63i3l6+ur9evX6z//+Y/eeecd/eUvf9Gdd96pp59+WkOGDFHjxo2r7Ng//fSTvvjiCy1fvlxZWVn629/+phdffFGNGjWqsmMCAAAAqD0KX3NgTSluea/bqeg1UeUpxK3IcUo7N9VBcdfEFHf9SmWN51acGyMKkkvbHgCA6sTd3V3u7u4ymUw3PE4hcvnwV0kAZbZq1SrZ29vriSeeMDoKAAAAgFomNzdXhw4d0o4dO7Rjxw79+9//Vmpqqnx8fBQcHKxPP/1UPXr0YAInAAAAAAAAAAAAAACAKpSZman4+HjFxMTo3LlzOn/+vGJiYiy306dPKzs7W5Lk6OgoHx8feXt7q2nTpurXr59MJpNMJpO8vb3l7+8vFxcXg0cEALidlTRpSHHrFWbNZAu3ejKGkspzC5ZAl/b4rVSRiTysWaeksuKyHLu8hc9l2U9ZlaXYuzK2K2v5c0n7qSnKey4LbmPN+SzvaxBQWKdOndSpUyfNmTNH+/btU0REhN5//31NmTJFXbp00ciRIzV06FC5ubkZHRWlMJlMGjt2rKZPn65hw4bxf2QAAAAAQJnFxcVp5syZWrRokdq0aaNVq1YpNDTU6FgAAABArePg4KBRo0Zp5MiRioyM1MKFCzVgwAB5enqqf//+evjhh9W9e/cKF6EmJCRo586d2rZtm9asWaPk5GQFBwdr5cqV6t+/v2xtbStpRADK4+jRo1qyZIk+++wzpaSk6PHHH9e2bdv00EMPlfkzKTVN586dtXHjRv3vf//T3LlzNX36dE2aNEk9e/ZU7969FRwcrDZt2lToGJmZmfrhhx+0fft2RUZG6vfff1dgYKAmTpyo5557Tl5eXpU0GgAAAAC1QcH/xxV3zU5p1/OU5/+CRV3XUNQ1UwWvYyh4v/D2xV1/VHBZWfZR2r6KWm5t/sLrFHW/cDFvSeei8P2C2+QvL6rot6jtyjOesl4fVvhcFFWMXdS+y/MzL2lZWcZfMBvXxgAAUDvZ5PGvAABldP/996t58+ZasWKF0VEAAAAA1AIxMTGKiopSVFSUduzYoStXrqhBgwa699571a1bN4WEhKhjx461/kOeAAAAAAAAAAAAAAAAlSUxMbHIouP8x2JjYy0XpdapU0dNmza1lBznFx3nP+bn58fkegBQC9jY2GjVqlUaOHBguba1dhKEkiZGKO+kCdZsZ03BqTVZi5ogo7yZSlqvrPu2Npe1+6honuKWFVc4W5afvbU/y9KOUZFzXPh+WZaVd58lrV9Zxy+JNeevrL+blfkzqei5LPhYWV+LyvvatXr1ag0aNIjJYnCD69ev67vvvtPy5cu1YcMG2dnZqW/fvgoLC2Ni5Wru4sWLMplMeuutt/Tiiy8aHQcAAAAAcJs4e/as5syZo08//VT+/v6aMmWKhg8fzt9nAQAAgGrk7NmzWrFihdauXauffvpJubm5ateunTp27KjAwEAFBATI399fdevWlaenp9zc3CRJqampMpvNSkpKUkxMjI4dO6Zjx47pwIED+u2332RnZ6e7775bTz75pIYOHapmzZoZPFKgdsvMzNTGjRsVHh6u7du3y2QyaezYsRo9erQaNWpkdLxqKz09XRs2bNDKlSu1c+dOJScny9vbW/fdd58CAgIUGBioVq1aqVGjRnJzc7PcEhMTlZKSotTUVMXHx+vYsWM6cuSIoqOj9cMPPyg9PV0mk0m9e/fW8OHD1blzZ6OHCgAAAMBgfP4eqJiqKjsODQ2VJEVERFT6vgEAKA+uvytdUfMJUIgMoEzOnDkjX19fbdiwQY899pjRcQAAAADUQOfPn9f333+vqKgobdmyRadPn5arq6u6dOmikJAQhYSEqEOHDlyICQAAAAAAAAAAAAAAUE6JiYlFFh3HxMTo+PHjSk5Otqzr5eVVZNGxyWRSy5Yt5enpaeBIAADVRVUUIhdeVlL5r6RyT6pQVYXIhR8vS5mrtcus+b60vOUpF67Kwl9rllVmMW5Zs5S3RLgsP1NJVv0sS9quuOVF7bsqfnYlZS1p3YoUIJd2/KLGXtxxS1q34GNF7afgttagEBlVJTExUREREVq2bJn27t0rHx8fDRs2TGPGjFGrVq2MjocivPTSS1qxYoVOnjwpFxcXo+MAAAAAAKqxK1euaM6cOfroo4/UsGFDTZs2TU8//bTs7e2NjgYAAACgBMnJydq9e7d27dql6OhoHT16VKdPn1Zubm6J29na2srX11cBAQG688471b17dz3wwAPy8PC4RckBFOf48eNatGiRFi9erKtXr6pHjx4KCwvTk08+KTs7O6Pj3Vays7N14MAB7dixQwcPHtSxY8d09OhRZWZmlrpt/fr1FRgYqDZt2ui+++5TcHCw/Pz8qj40AAAAgNsGn78HKoZCZABAbUEhcumKmk+ATy4CKJOVK1fK09NTPXv2NDoKAAAAgBoiISFBu3bt0vfff6+9e/fqwIEDsre311133aUhQ4YoJCREDzzwgBwdHY2OCgAAAAAAAAAAAAAAUO1lZmYqPj7+pqLj/Nvp06eVnZ0tSXJ0dJSPj4+l6DgkJERhYWGW8mM/Pz+5uroaPCIAQE1V8KLQ4kpE8wtHi1pW0SLkysqY/3hREzuUlL/gssLLS1pmTZbSzklxuUoaS2nrlHc8xS0r6jhFFdCWtv+Sxl7S8Yo6flFZrMlt7b4L7rfw7541Rb/52xWVsahzV1Khb/7jFfk9LWqfhR+39jlT2jm05ne3pOdjwWNY+zMo7lhMkITqwsvLS2FhYQoLC9Pvv/+uVatWaenSpXr33XfVqVMnjRgxQsOHD1f9+vUr/dj79+/XBx98UOn7rWkKT9r08ssva8GCBQoPD9cLL7xgUCoAAAAAQHWWmpqqefPmaebMmXJ0dNTrr7+uCRMmqE6dOkZHAwAAAGAFDw8PPfbYY3rssccsj2VkZOj06dNKSUlRYmKiUlNTJUnu7u7y9PSUu7u7WrRowb/7gWrk+vXr2rBhg8LDw7V9+3Y1bdpUTz/9tMaNG6fmzZsbHe+2ZW9vr86dO6tz586Wx3JzcxUfH6+EhASlpqYqNTVVaWlp8vLykpubm9zc3OTt7V0ln30AAAAAAAB/sOaaHQAAULtRiAygTFauXKn+/fvLycnJ6CgAAAAAblNpaWnav3+/oqKiFBUVpZ9//lk2NjZq3769QkJCNGvWLHXt2lXOzs5GRwUAAAAAAAAAAAAAAKh2zGaz4uLiFBcXp1OnTikuLk6nT5/W6dOnderUKSUkJFjWrVu3rlq0aCFfX1+1bt1aPXv2tNz39fVVkyZNbiqmAwDgVrF2AoSSyk2rOoc1x7CmfLgyl1XW+ShvkWtlj6esWSpj/NYcr7T7FXmsPMcqSlkzlidbaXkq4zlizfpVdc7Ku7/KnMCFyWBwK7Rp00bTp0/X//t//0/fffedli1bpsmTJ2vy5Mnq16+fRo4cqZ49e8rOzq5SjnfmzBlFRkZWyr5qk8aNG+vZZ5/Vu+++q2effZZrKgAAAAAAFteuXdPChQs1Y8YMZWdn64UXXtBLL70kd3d3o6MBt6WzZ89q3759RscAUITmzZurS5cuRscAgFuqTp06CggIMDoGACucPHlSCxcu1JIlS3T58mUFBwdr1apVeuKJJ2Rvz1T/VcHW1lbNmzenaBoAAAAAAANx3QsAACgNfyUBYLWTJ0/q4MGDmj17ttFRAAAAANxG0tPTdeDAAe3du1dRUVHas2ePrl+/LpPJpJCQEL3yyisKCQmRl5eX0VEBAAAAAAAAAAAAAAAMl194nF92HBsbaylAjouLU1JSkmVdb29v+fr6qkWLFurRo8cNZce+vr6qW7eugSMBAAAAag8bGxsmeUG1Z2dnp969e6t3794ym81avXq1li1bpt69e8vb21vDhg3TU089pTvvvNPoqLXWyy+/rAULFmjhwoV6/vnnjY4DAAAAADBYVlaWlixZojfeeENJSUkaP368Jk+eLE9PT6OjAbe1ffv2adCgQUbHAFCEAQMGKCIiwugYAAAAFjk5Odq5c6fCw8O1du1aNWrUSKNHj9Zf//pX+fr6Gh0PAAAAAAAAAADAcBQiA7Dal19+qUaNGunBBx80OgoAAACAaiwnJ0eHDh1SVFSUoqKi9P333ysjI8NSgDxixAg99NBDatasmdFRAQAAAAAAAAAAAAAAbrmkpKQbCo4L38xms2Vdb29v+fn5yc/PT71795avr6/lvq+vr+rUqWPgSAAAAIDqz8bGxvK1KgqL8/dPGTJuN56engoLC1NYWJiOHz+u5cuXa9myZXrvvffUqVMnPfXUUxo2bJjq1atndNRapUmTJnrmmWf0wQcf6K9//ascHByMjgQAAAAAMEBubq7WrFmjKVOm6MyZMxo1apTeeOMNNWnSxOhoQI3C+7pA9RIaGmp0BAAAAIv4+Hh98cUXmjdvnuLj4xUcHKyvvvpKTzzxhOztmdYfAAAAAAAAAAAgH385AWC1VatWadCgQfzRFQAAAMBNjh49qm3btmnr1q3atWuXUlJS1KxZMwUHB2vBggUKDg5W8+bNjY4JAAAAAAAAAAAAAABQ5ZKTky3lxrGxsZbvT506pbi4OCUmJlrW9fb2tpQc9+rV64ayYz8/PwqPAQAAgAqq6kILCjNQE7Rq1Upvvvmmpk+frj179mjp0qWaOnWqXn75ZT355JMaM2aMevToYSkAR9V68cUX9cknn2j16tUaNmyY0XEAAAAAALdQXl6eNm3apFdffVW///67Bg8erDfeeEP+/v5GRwMAAAAA3CKhoaFGR6j2XnzxRXXp0qXS95ubm6sdO3YoPDxc69atU4MGDfTUU0/p2Wef5f/mAAAAAAAAAAAAxaDVFIBV/ve//+nw4cNauHCh0VEAAAAAVAOJiYnavn27tm7dqq1bt+rUqVOqW7eugoOD9e677yo4OFiBgYFGxwQAAAAAAAAAAAAAAKh0GRkZOnfunGJiYm66nTt3TufPn7es6+XlJZPJJJPJpPvvv1+DBg2y3A8ICJC7u7uBIwEAAAAA4P/Y2tqqe/fu6t69u+bOnat169Zp+fLleuihh+Tj46Nhw4bpr3/9q3x9fY2OWqP5+fkpNDRUs2fP1tChQymiBgAAAIBaIioqSpMnT9bPP/+s/v37KzIyUq1atTI6FgAAAADgFouMjDQ6QrUXGhpaqYXI586d0/Lly/XJJ5/ozJkzCg4O1ooVK9SvXz85ODhU2nEAAAAAAAAAAABqIgqRAVhl5cqVat68eaX+sRcAAADA7SMnJ0eHDh1SVFSUoqKitHv3buXm5qp9+/YaPHiwQkJC9MADD8jR0dHoqAAAAAAAAAAAAAAAABVS3sLjrl27qmnTphQeAwAAAABue+7u7ho5cqRGjhypI0eOaOnSpVq8eLHmzJmj4OBghYWFMflzFXrllVfUoUMHbdu2TT179jQ6DgAAAACgCu3bt0/Tpk3Trl27FBISop9++kkdOnQwOhYAAAAAADVabm6uduzYofDwcK1bt07169fXqFGjFBYWJpPJZHQ8AAAAAAAAAACA2waFyACsEhERoSFDhsjGxsboKAAAAABukZiYGEsB8rZt22Q2m+Xt7a2QkBB9+eWXeuihh1SvXj2jYwIAAAAAAAAAAAAAAJRJcYXH+WXHsbGxysvLk0ThMQAAAAAArVu31qxZs/TGG29o48aNWrZsmYYMGaKGDRtq4MCBGjt2rO68806jY9Yod911lx566CHNmTOHQmQAAAAAqKF+/fVXvfXWW4qIiFDXrl21e/duPfDAA0bHAgAAAACgRrtw4YI+//xzffrpp4qNjVWnTp00b948jRw5UnXq1DE6HoBajLn/S7dq1SoNHDjQ6BgAAAAAAAAACqEQGUCpfvjhB508eVKDBw82OgoAAACAKpSSkqKoqCht3bpVW7duVUxMjNzd3RUcHKy3335bPXv2VKtWrYyOCQAAAAAAAAAAAAAAUKLMzEydOnVKMTExio2NveEWFxenK1euWNZt1KiR/Pz85Ofnp/vuu8/yvZ+fn/z9/eXs7GzgSAAAAAAAqD6cnJwUGhqq0NBQxcbGavHixVq6dKnmzp2rBx54QGPGjNGAAQOMjlljTJw4Ub169dKvv/6qdu3aGR0HAAAAAFBJjhw5otdee02RkZH685//rG3btikkJMToWAAAAAAA1Fi5ubnasWOHwsPDtX79erm6umrgwIF6/vnn1bZtW6PjAQAAAAAAAAAA3NYoRAZQqpUrVyowMFAdOnQwOgoAAACASvbLL79oy5Yt+vbbb7V3717l5OTo7rvv1tChQ9WzZ0916dJF9va8fQAAAAAAAAAAAAAAAKqPvLw8xcfH31B0XLD8+Ny5c8rNzZUkeXl5yWQyyd/fX8HBwfL19bWUHfv5+cnFxcXg0QAAAAAAcPvx9/fXW2+9penTp2vLli1atGiRxowZo+eff15//vOfjY5XI/Ts2VOtW7fWvHnztGDBAqPjAAAAAAAq6PTp03rnnXe0ePFiBQQEaNWqVRowYIBsbGyMjgYAAAAAQI108eJFLV26VOHh4YqJiVGnTp308ccfa8SIEXJ2djY6HgAAAAAAAAAAQI1AoxGAEuXm5ioiIkLPPPOM0VEAAAAAVIK0tDTt2LFDmzZt0rfffqszZ86oQYMG6tGjhz7++GM99thj8vb2NjomAAAAAAAAAAAAAACo5dLT03X+/HnFxMTcdDty5IjS0tIkSY6OjvLx8ZHJZFKbNm3Up08fmUwmy83Ly8vgkQAAAAAAUHPZ2dmpT58+6tOnjxITExUREaF33nnH6Fg1go2Njf72t79p8uTJmjFjhurVq2d0JAAAAABAOSQkJOj999/Xhx9+KG9vb82bN09jxoyRnZ2d0dEAAAAAAKiRDhw4oPDwcC1bLQN0YwAAIABJREFUtkxOTk4aNGiQxo8fr3bt2hkdDQAAAAAAAAAAoMahEBlAifbu3atz585p4MCBRkcBAAAAUE7R0dHatGmToqKitGfPHuXk5Kh9+/YaOnSo+vbtq/vuu0+2trZGxwQAAAAAAAAAAAAAALVIZmamYmNjb7rFxMQoNjZWZrNZkmRra6tmzZrJ399f/v7++stf/qIJEybI399fJpNJ3t7esrGxMXg0AAAAAADAy8tLYWFhqlu3rgYPHmx0nBph1KhRevXVV7V06VK9+OKLRscBAAAAAJTB1atXNXv2bM2dO1f16tXTRx99pKefflr29kz9BwAAAABAZTObzVq9erU++ugjRUdHq1OnTvrXv/6l4cOHy8XFxeh4AAAAAAAAAAAANRafigRQosjISAUGBqpt27ZGRwEAAABgpatXr2r79u2KiorSN998o/j4eDVs2FDdu3fXwoUL1bdvX9WrV8/omAAAAAAAAAAAAAAAoIZLTExUTExMkbdTp04pJydH0h+FSfnlxvfcc48GDRokk8kkk8mkNm3aMAkVAAAAAAC3ERsbG6Mj1Bju7u4aMWKE5s+frxdeeEG2trZGRwIAAAAAlCItLU0ff/yxZs2aJXt7e7322mt6/vnn5ezsbHQ0AAAAAABqnAMHDig8PFzLly+Xg4ODBg8erC+++ELt27c3OhoAAAAAAAAAAECtQCEygGLl5eVp3bp1Gj16tNFRAAAAAJQgLy9Phw4d0ubNm/XNN9/oxx9/lI2Njbp27arx48erV69euuuuu5hUCAAAAAAAAAAAAAAAVKrExESdO3dO58+fv6nw+MiRI0pLS5MkOTo6ysfHx1JyHBISYvm+ZcuW8vT0NHgkAAAAAAAA1dO4ceM0f/58bdmyRb179zY6DgAAAACgGNevX9fSpUv12muvKS0tTePGjdPUqVPl4eFhdDQAAAAAAGqUa9euKTw8XB9//LF+/fVXderUSR9++KGGDh0qNzc3o+MBAAAAAAAAAADUKhQiAyjWvn37dObMGQ0YMMDoKAAAAAAKSUtL07Zt27R582Zt3rxZ8fHx8vb2Vu/evfXSSy8pJCREdevWNTomAAAAAAAAAAAAAAC4jV2/fl1nz569qew4JiZGJ0+elNlstqzr5eV1Q+FxWFiY5b6fn59sbW0NHAkAAAAAAMDtqU2bNurevbvCw8MpRAYAAACAaigrK0tLlizRm2++qcTERD3zzDOaNm2aGjVqZHQ0AAAAAABqpLCwMNWpU0dDhw7V559/rg4dOhgdCQAAAAAAAAAAoNaiEBlAsSIjIxUQEKB27doZHQUAAACApNjYWG3btk1ff/21tm3bpqysLHXo0EHDhw9X3759dd999zF5MAAAAAAAAAAAAAAAKJNLly7p5MmTlpLjgoXH586ds6xXv359mUwm+fv7KyQkRGPHjpW/v79MJpNatGghR0dHA0cBAAAAAABQc40dO1YjR47UuXPn1LRpU6PjAAAAAAAk5ebmas2aNZo2bZri4uI0evRoTZ8+Xd7e3kZHAwAAAACgRhs1apTef/99ubu7Gx0FAAAAAAAAAACg1qMQGUCR8vLytHbtWo0cOdLoKAAAAECtlZOTo/3792vTpk2KiorSgQMH5Orqqh49euijjz5S3759mcgGAAAAAAAAAAAAAACUKCsrS3FxcTcUHRf8mpqaKklydHSUn5+fTCaT/vSnP6lfv36WAmR/f395eHgYPBIAAAAAAIDaqX///powYYKWLFmiadOmGR0HAAAAAGq9qKgoTZo0Sb/88ov69++vb7/9Vi1btjQ6FgAAAAAAtUJISAhlyAAAAAAAAAAAANUEhcgAivSf//xHp0+fVmhoqNFRAAAAgFrlwoUL2rx5szZv3qytW7cqJSVFbdq0UZ8+ffTee++pW7dusrfnv/MAAAAAAAAAAAAAAOD/ZGRk6Ny5c4qOjtbhw4ct5ccxMTE6ffq0srOzJUleXl4ymUwymUx69NFHLd+bTCb5+vrKzs7O4JEAAAAAAACgMEdHRw0fPlyLFi3SlClTZGtra3QkAAAAAKiVvv/+e02dOlXff/+9+vTpo88//1x/+tOfjI4FAAAAAAAAAAAAALDC6tWrjY4AoICzZ8/Kx8fH6BgAAKCCaFACUKTIyEi1atWKD1sDAAAAt0BMTIy+/vprRUREaP/+/XJ0dFS3bt00bdo0Pf7442rdurXREQEAAAAAAAAAAAAAgMESExNvKDoufMtXsPQ4NDRUJpNJQUFBatu2rby8vAwcAQAAAAAAAMorLCxMH374obZv366HH37Y6DgAAAAAUKv88MMPevXVV7V9+3aFhITov//9rzp16mR0LAAAAAAAAAAAAABAGQwaNMjoCAAKGTBggNERAABABVGIDOAmeXl5WrNmjYYOHWp0FAAAAKBGysrK0p49e7Rx40Z9/fXXio2NVePGjdW3b19NmjRJDz/8sFxcXIyOCQAAAAAAAAAAAAAAbqHMzEzFx8cXWXb8+++/69q1a5IkJycnNWvWzFJ6HBISYvm+TZs2fOYAAADUCGazWXl5efL09JSNjY3RcQAAAAzXunVrdevWTZ999hmFyAAAAABwi0RHR+uNN95QZGSkunTpop07d6p79+5GxwJwi1nzt6q8vLyb1i/4WHH7KmqdknJUZP2ybl+dVOS8VWYGo85fwfEbmeF2/f0BAAAAAAAAgMpgNpv1v//9T0ePHtWxY8d05MgRXbhwQYmJiUpLS1NqaqrS0tLk5eUlV1dXubm5qW7dujKZTAoMDLTc2rVrJ3t76sJutYEDB2rgwIFGxwAAAABqJP6HA+Am//3vfxUXF6fQ0FCjowAAAAA1Rlpamnbs2KGIiAh9/fXXMpvNMplMeuyxx/TYY4+pe/fu/CESAAAAAAAAAAAAAIAaLjExscjC45iYGMXFxSk3N1eS5OXldUPhcVhYmOW+v78/pYAAAKBa+uc//6mIiIhK2dfu3buVkJBguZ//GUsHBwdJkqOjo+WrjY2N5auDg4NsbGxUr149+fr6VkoWALBGWlqaEhMT5e3tLTs7uyo/3tmzZ6v8GACqn6eeekrjx4+X2WyWp6en0XEAAAAAoMaKi4vTzJkztWjRIgUFBWnVqlXMxwXUciUVCxf8HE/BZdYUEldVyWxRny26XctsSzrft1J1KSI2qpj4dv39AQAAAAAAAIDyunbtmnbt2qWdO3dq586dOnTokHJycuTh4aGAgAAFBATozjvvlKenp9zc3OTq6ipXV1eZzWZLOXJiYqJOnDihFStWKDY2VllZWXJ3d9f999+vHj16KDg4WB06dOCaYQAAAAC3NZqWANwkMjJSJpNJ7du3NzoKAAAAcFuLi4vT1q1b9fXXX2vr1q3KycnRvffeq8mTJ+vxxx9X69atjY4IAAAAAAAAAAAAAAAqUVZWls6cOVNk4fGxY8eUkpIi6Y/iPh8fnxtKj/O/DwgIkLu7u8EjAQAAKJsBAwZU6v6aNm16QyFydnb2DV/T09OL3dbf318+Pj6VmgcASpOQkKADBw7I3t5ePj4+8vX1VYMGDarseD4+PpX+2gug+gsNDdXf//53rV27Vk8//bTRcQAAAACgxjlz5ozefvttLV68WK1atdJXX32lAQMGMAE5AKsULqrNy8u74bGKFMrm78faMtz8dSuTUUW8hd2qDNVlvIVVx0yFVddzBwAAAAAAAAClyc3N1a5du7Rs2TKtWbNGaWlpCgoKUnBwsKZNm6bOnTuradOm5dp3VlaWjh8/rj179mjnzp2aPXu2Jk2apJYtW2rEiBEaMWKETCZTJY8IAAAAAKoehcgAbrJ27VoNGjTI6BgAAADAbSc3N1c//vijNm7cqK+//lq//fabPD091atXL33++efq1auXPD09jY4JAAAAAAAAAAAAAAAqIDU1VSdPntSJEydu+nr27Fnl5uZKkho0aGApOe7Vq5f+9re/qWXLljKZTGrWrJlsbW0NHgkAAEDliYiIqNT9nTp1Sv7+/lZPlO3g4CB7e3stXLhQw4YNq9QsAGCt8+fPa/Xq1YqIiNCuXbvUvHlzDR06VKNHj1ZgYKDR8QDUAB4eHurdu7e+/PJLCpEBAAAAoBJdvnxZ7733nv71r3+pUaNGmjdvnsaMGSM7OzujowGoBkr7e1V5i18pjQUAAAAAAAAAoHpITk7W/PnzNX/+fJ05c0b33HOPZsyYodDQUDVp0qRSjuHg4KCgoCAFBQXpueeeU15enn7++Wd98cUXWrBggd544w3df//9mjhxovr27SsbG5tKOS4AAAAAVDUKkQHc4ODBgzp58qT69+9vdBQAAADgtpCTk6P9+/crIiJCa9asUXx8vPz8/NSzZ0/NmDFDjzzyiBwdHY2OCQAAAAAAAAAAAADAbS8zM1PXrl1Tenq6MjIylJqaqqysLCUlJSknJ0dms/mG9SQpLS1N169flySZzWbl5eUpJydHycnJlv0mJSVZSozzXbt2TQkJCZbj5X9NS0tTVlaWpD8mJXVycpKLi4ucnZ3l4uKiO++8U87OznJ2dpa9/R8f1798+bLS09N17NgxSZKrq6vlswRFfe/g4CA3Nze5u7urTp06cnd3v+F7Nzc3OTs7y93dvapONQAAgOF8fX0VFBSk6OjoUte1t7eXv7+/1q5dq7Zt296CdABQNG9vb02YMEETJkzQr7/+qmXLlmn58uV699131aVLF40dO1YDBw6Uq6ur0VEB3MaGDRumAQMG6OzZs/Lx8TE6DgAAAIBq5vjx4zp48KCOHj2qI0eOKDY2VpcuXVJaWppSU1OVlpYmLy8vubq6ys3NTd7e3goICFBAQICCgoLUuXNneXl5GT2MWyYlJUXz58/XjBkz5OTkpOnTp+uFF16Qk5OT0dFQC/H8rV2qqgw5vxyhqH3nH7PwOkVtU7BkoeA2Je2/qO2szVdatoKPFzx3RW1XlnEWl7m045Z3PCUp6edQkZ9rcfnKuqy0816WzAAAAAAAAABQXVy+fFkfffSR5s6dq9zcXD377LMaPXq02rRpU+XHtrGxUceOHdWxY0fNmTNHW7du1YIFC/T444+rXbt2mjJlikJDQ2VnZ1flWQAAAACgIihEBnCDdevWydfXVx07djQ6CgAAAFBtpaSkaMuWLVq3bp02b96spKQkdezYUc8++6z69eundu3aGR0RAAAAAAAAAAAAAIBbJi0tTRkZGUpKSrKUFScmJlqKiVNSUpSdnS2z2azc3FyZzWZlZ2crJSXFss61a9eUmZlZZMlx/rrWyi8UliRnZ2fVqVNHkuTu7i57e3vZ2NjI09NTWVlZSk9PV15enjIyMpSWlnbDJLKSZGtraykn9vb2loeHh9zd3eXh4SFPT09L6XFpkpOTlZOTI0k6f/685fuCj+d/f/36daWlpd2wrDj52erVqycvLy/Vq1ev1O+bNGliOT8AAADVVXJysu6++24dO3ZMWVlZRa6TP9H24MGD9emnn8rFxeUWpwSA4rVr105z5szRrFmztH37di1evFjPPfec/vGPf2jo0KEaO3asOnToYHRMALehPn36yMvLSytXrtTEiRONjgMAAADAYMnJyVq/fr2ioqK0c+dOnT17Vg4ODvL391dgYKC6dOmixo0by9XV1XIzm82Wv4ufPXtWR48e1YYNG3ThwgXZ2dmpffv26tGjh3r37q0HH3xQtra2Rg+z0qWlpenjjz/Wu+++KxsbG02dOlXPP/+8nJ2djY6GWoTnb+1VsDDW2qLc/PWKK+YtvF7BUtvC9wsW2RZ1v6j9lHTcorYr7X5RxyhqeVEFyIXHZM2+8sdQUg5rj1uR8Vhz7qz9eRd3rNLul2eZNefd2swAAAAAAAC1kdls1rFjx3TkyBGdOnVKaWlpSkxMVGpqqqQ/rhH08vKSq6ur/Pz8FBgYqICAAHl6ehqcHKi5srOz9dFHH2n69OlycnLSSy+9pPHjx1v1vLt+/bpOnDiho0ePKiYmRgkJCZa/36SlpVmez66urmratKkCAgIUEBCg5s2bF7tPOzs7Pfroo3r00Uf166+/aubMmRo+fLhmzJihefPm6f7776/M4QMAAABApaIQGcAN1q1bpyeeeKLID94BAAAAtdmVK1f0zTffaNOmTdq8ebMyMjJ07733asqUKXryySfVqlUroyMCAAAAAAAAAAAAAFCk/ELh/NJhs9msjIwMXbt2TcnJycrIyFBqaqpSU1OVmZmppKQky7qJiYnKyMhQenq6kpKSLMXBKSkpysjIsKqo2NXVVY6OjpZCYk9PT9nZ2alu3bqW8uJ69erJ2dlZLi4ucnJyKnFdJycnubi4FLlu4c/AJiYmKiYmRjExMYqOjtbhw4cVExOjH3/8UcnJyZIkR0dH+fj4yGQy3XRr27atpVDZCFlZWUpNTb3hfKempiojI0PJycmW4uSrV68qMTFRV69e1aVLl3TkyBHL/atXr95UrOzi4qJmzZqpcePGatq0qZo0aaImTZqoadOmaty4sZo1a6ZGjRqpcePGBo0cAADURhkZGdq8ebO++uorffPNN7Kzsyu2DNne3l6Ojo5atGiRBg8efIuTAoD17Ozs1LNnT/Xs2VNms1mrV6/Wxx9/rE8++USdOnXSiBEjNHLkSHl5eRkdFcBtwtHRUf3799eXX35JITIAAABQS+Xm5uq7777T8uXLtX79euXl5em+++7Tc889px49euiee+6Rg4NDmfd79epV7d69Wzt37tS3336r9957T82bN7e8fxEYGFgFo7m1rl+/rqVLl2r69OlKSUnRuHHjNHnyZAoFcMvw/IWkEotry6vwfkorPbZWRbKVNM6CpbllKdAtOI6itituX8Xtu3BGa45bmeMpbV+lKa0g2xqFty1qu/KedwAAAAAAgNoqNjZWO3fu1M6dO7Vr1y6dPXtWkuTk5CQ/P78bCpAl6dKlS5aC5Li4OGVmZkqSfHx81L17d/Xo0UM9evSQv7+/YWMCapJ///vfGjdunI4fP65XXnlFkyZNsjwfi5KUlKQ9e/ZYnte//fabsrOzZWNjY7lON78A2c3NTTExMZaC5LNnzyoxMVGS5O7uri5dulie03fffbfs7OxuOl67du20YsUKTZ8+XS+88IIefPBBjRw5UrNnz1ajRo2q7LwAAAAAQHnZ5PGpEQD/vxMnTqhVq1batWuXHnzwQaPjAAAAAIaLi4vThg0btGnTJu3atUv29vbq1q2b+vbtq0GDBqlJkyZGRwQAAAAAAAAAAAAA3ObS09Mt5bZZWVmW0uH09HSlpKQoKytLZrNZmZmZunbtmlJTU3X9+nWZzWZdv35daWlpSktL0/Xr15WYmGgp0C1YflzaR8bt7Ozk4eFhKRj28vJSnTp15OzsrLp166pOnTpydXWVu7u76tSpI3d3d7m6uqpOnTqqW7eunJ2dVadOHXl5eVnKiuvWrSsnJye5ublV6fnLzs7W6dOnLaXHBW9HjhxRWlqapD8mC2jWrJlMJpOCgoLUtm1bS+mxr69vkRcN1yT5pclXrlzRxYsXdfHiRcXHx+vSpUuKj4/XxYsXde7cOZ0/f14ZGRmW7RwcHNSiRQv5+/vfcPPz85O/vz+FyQAAoMJycnK0f/9+LV++XCtXrlRqaqq6dOmi0NBQDR06VB06dFB8fPwN29jb2ysoKEhr1qzRHXfcYVByAKiYAwcOKDw8XF988YXs7Ow0ZMgQTZgwQUFBQUZHAyps9erVGjRokNExqr2KTPOwZ88ePfjgg/rll1/Url27SkwFAAAAoDrLysrSV199pVmzZun3339Xp06dNGLECA0bNkwNGjSo9OMdOXJEK1eu1PLlyxUbG6s+ffpo2rRpuvfeeyv9WFUtNzdXa9as0eTJk3X27FmNGjVKb775Jn/zxi3D87d6yX//qrzvz5RUQFtUuWxJx7GmRLa4gtqyHrvg/ZKWFTxmWcqbS1peWr7yZi3ruEsba2Udt7RjVuTclHV7a9Yv67KKZi5OaGioJCkiIqLM2wIAUJMU9e8/3GjVqlUaOHCg0TEAoFLx+l86Xv9R3V28eFFfffWVPv/8cx06dEguLi7q2rWrunfvro4dOyogIMCq6xhzcnJ06tQpHTt2TAcPHtTOnTu1d+9epaenq2PHjho5cqSGDBlCKSpQDpmZmZo4caLmzZunRx55RHPnzi32mpTr16/rm2++0eeff65vv/1W2dnZateunXr06KH77rtPAQEBCggIkLOzc6nHTUhI0NGjRxUdHa09e/Zox44dunDhgho3bqwhQ4Zo5MiR6tChQ7Hbr127Vi+88IJSU1P12Wef6cknnyz3OQAAAABQMt6nK11R79NRiAzAYvbs2Zo9e7YuXLgge3t7o+MAAAAAhvj555+1fv16rV+/Xr/88ou8vLzUt29f9evXT4888ohcXV2NjggAAAAAAAAAAAAAqKCcnBwlJydLklJSUpSdnW0pF5akxMRESbIUDWdnZyslJUWSlJSUpNzcXEuRcVH7yi8vzsvLk9lsvmFf+YXFBbcrjZeXlxwcHOTm5mYpLfb09JSDg4Pc3d0thcR169aVg4ODPDw8LIXGHh4ecnBwsBQb5z9Wp04dubm5yc3NTQ4ODpV6fivb9evXdfbs2SJLj6Ojoy0Fvl5eXpaS48I3f39/Ljqwktls1vnz53XhwgXFx8crLi5OsbGxio2NVVxcnM6cOaPs7GxJkouLyw1FyS1btlRQUJBat26t5s2bGzwSAABQnR04cEDLli3T6tWrdeHCBQUFBWnkyJEaMWKEmjZtalnvH//4h+bPn6/r16/L1tZWubm5+vvf/6733ntPjo6OBo4AACpHYmKiFi9erHnz5unUqVN69NFHNWHCBIWEhPD/WNy2KES2TkWmecjLy5PJZNLgwYM1c+bMSkwFAAAAoDrKy8vT8uXL9frrrys+Pl7Dhg3TK6+8otatW9+S4+fm5mrTpk1655139OOPP6pnz55677331K5du1ty/IrIy8tTZGSkXn31VcXGxmr06NF67bXX1KxZM6OjoZbg+Vs93U6FyNYeq7ILka3Zpixjqa6FyFV1XAqRKUQGAKAi+KxA6SjEBFAT8fpfOl7/UV399NNPmjlzpjZu3ChXV1eFhoZq6NCh6tq1a6V93j0zM1N79+7Vl19+qcjISF27dk2PP/64pk6dqo4dO1bKMYCa7sSJExo0aJBOnDihBQsWaMiQIUWul5CQoA8//FALFiyQ2WzWQw89pBEjRujRRx9VgwYNKi3P4cOHFRkZqS+++ELHjx/XXXfdpUmTJmnQoEFFdgWlpaXppZdeUnh4uMaPH685c+bIycmp0vIAAAAA+APv05WOQmQAJerSpYuCgoK0aNEio6MAAAAAt1R0dLQiIiL01Vdf6dixY2rYsKF69eql0NBQPfLII0yYBwAAqiWz2azU1FSlpKTo2rVrysjIUHp6uqWwI7+cIzc3V0lJSTeUbkj/V7xRWH4RBwAAAAAAAADcKvnvY1orv4i4ILPZfMMEeqmpqcrKyrLczy8oLi9bW1vVrVtXkuTu7i57e3s5OTnJxcVF0h9FvJLk6uoqR0dHS3mxJNWtW1e2traW0mI7Ozt5eHjIxsZGnp6elv3kFxN7eXnJ0dFRrq6ulv3VBpmZmYqPj7eUHB8+fNhSenzq1Cnl5ORIKr70uG3btvL29jZ4FLVDdna2zpw5YylILliWfOzYMSUkJEiSPDw81Lp1awUFBalNmzaWr/7+/rK1tTV4FAAAwAgnT57U4sWL9cUXX+j06dNq27athgwZoiFDhshkMhW5za5du9SjRw/Z29vLxcVFy5Yt0+OPP36LkwNA1cvNzdWOHTv0r3/9S998843uuOMOjRs3Ts8884xcXV2NjgeUCYXI1qnoNA9TpkzRihUrFBsby3stAAAAQA3222+/ady4cdq7d6/GjBmjqVOnytfX17A827Zt06uvvqqDBw9qwoQJev311+Xu7m5YnpJERUXplVde0aFDh9S/f3/NmDFDd9xxh9GxUIvw/K2+qqoQufCyipYhl7SONYW0+YrKU9K6Ja1XeHlJmSpSyGxEIXL+eShuvJU1nqKUt0y5POegMpYVd64Kb1fWYmQKkQEA+AMT7ZeOQkwANRGv/6Xj9R/Vzb59+/Tmm2/qu+++0913360XX3xR/fr1k7Ozc5UeNz09XevXr9cHH3ygn376Sb169dJrr72mLl26VOlxgdvZ+vXr9dRTT+mOO+7QqlWrivyb4YULFzRr1iwtXLhQrq6uev755zV69Gg1a9asyvPt379f8+fP18qVK+Xr66vJkydr1KhRRRYjr1y5UmFhYQoMDNTatWvVvHnzKs8HAAAA1Ca8T1c6CpEBFOvChQtq1qyZNmzYoL59+xodBwAAAKhSubm52rt3r9asWaO1a9fqzJkzatmypfr376/+/fvrnnvu4Y0GAABQpXJycnTlyhVdvXpVV69eLfL7lJQUS+Gx2Wy+4X5KSkqpxyhYzpFfxOHp6Wn5d07Boo6C8gs4AAAAAAAAAOBWKkvxb1HvY+aXFOfLLx/OZ29vf9MEnoVLjAuuU7jEGJUjKSlJJ06c0PHjx2/4euLECV26dEnSH+9vt2jRQi1bttQdd9xxw9eWLVtSAnUbuHLliqKjo/X777/r999/1+HDh3XkyBGdOXNG0h/Pz9atW6t169Zq3769OnXqpI4dO1qekwAAoGZJT0/XmjVrtGjRIu3evVtNmzbViBEjNHToULVr167U7bOzs9WwYUO1atVKkZGRatGixS1IDQDG+uWXX/TRRx/pyy+/lIuLi/7+97/r73//u+rXr290NMAqFCJbp6LTPBw+fFht27bV7t279cADD1RSKgAAAADVRU5Ojt5++22988476tChg+bPn69OnToZHUvSH9fqf/bZZ5oyZYpcXFy0fPlyde/e3ehYFnv37tW0adO0e/ftsGjeAAAgAElEQVRuhYSEaM6cOWrfvr3RsVCL8Pyt/spbiFzUPCTFFQMXtazw9qWV3Ba3rjXLSivwLWndosqUSxpXcbmtPTdFFTKXVUnlzuW5X9z3xWW3djzWnDtrf9ZFHauqlhVXml3a73pZn2MUIgMA8AfmvysdhZgAaiJe/0vH6z+qi4sXL+rll1/W8uXLdf/992vq1Kl65JFHDMmyZcsWvfPOO9q7d6+eeuopvfvuu2rUqJEhWYDqasGCBRo/frzGjh2rDz/8UE5OTjcsz8nJ0bx58/Taa6/Jzc1NkyZN0tixY4ucp7OqxcTEaNasWfr8888VFBSk+fPnF1l2fuzYMT355JNKTk7Wli1bFBQUdMuzAgAAADUV79OVjkJkAMX65JNP9PLLLyshIYGJ+wAAAFAj5eTkaP/+/YqIiFBkZKTOnTsnk8mkvn37KjQ0VF27duXNBQAAUCGXLl1SQkKCLl68qPPnz+vSpUu6cOGCLl68qEuXLuny5cu6cuWKrly5oqSkpJu2d3FxUb169VS/fn3Vq1dP7u7ucnNzk5ubm7y8vOTm5mZ5zMPDQ3Xr1rUsd3Nzk4ODg9zc3Ios9QAAAAAAAAAA4FZJTk6+qez42LFjN5Qe29vby8/PT3fcccdNN39/f6vLsXF7SU5O1pEjRxQdHW35+vPPP+vcuXOSJJPJpE6dOt1woyQZAIDbV3R0tJYvX67PPvtMZrNZPXr0UFhYmJ544gnZ29uXaV/ffvutHn744TJvBwC3u8uXL2v+/PmaO3euMjIyNHbsWL300ktq1qyZ0dGAElGIbJ3KmOahffv26ty5sz799NNKSAQAAACgujh//ryGDx+uffv2afbs2Ro3bpxsbW2NjnWTy5cv67nnntP69ev1+uuva9q0aYbm/PHHH/XWW29p06ZNCgkJ0YwZM3TPPfcYlge1E8/f20N5C5Fvd4ULkYHyqqrfJQqRAQD4A3PhlY5CTAA1Ea//peP1H9VBeHi4XnnlFbm7u+vDDz/Uk08+aXQkSdKaNWv0wgsvKC0tTbNnz9YzzzxjdCSgWnj33Xc1efJkvfLKK5o1a9ZNy3/++WeNGTNG0dHRmjhxoqZNm2ZIEXJhR48e1fjx47V9+3aNGTNGH3zwwU3zi5rNZv3lL3/Rb7/9po0bN6pbt24GpQUAAABqFt6nKx2FyACK1bNnT3l6emr16tVGRwEAAAAqTcES5NWrV+vChQsKCgpSaGioHnvsMXXq1MnoiAAA4DaQnJysM2fO6MyZM4qPj7d8f+HCBZ0/f14XL15UQkKCsrKyLNs4ODioYcOGatKkiZo0aaJGjRqpQYMGql+/vuVWsPy4Xr16cnZ2NnCUAAAAAAAAAABYLzMzU/Hx8YqOjtbhw4cVExNjucXGxlomO/T29lbbtm1lMpluuAUFBfG+OCzOnz+vgwcP6sCBA5ZbfHy8JMnf399Sjnz33Xfr3nvvlZubm8GJAQBAcZKSkrRq1Sp9+umnOnjwoAIDAzV69GiNGjVKjRs3NjoeANy20tLS9Nlnn+n999/XxYsXNWjQIE2dOlWtW7c2OhpQJAqRrVMZ0zzMmTNHM2fO1Pnz5+Xk5FQJqQAAAAAY7YcfflC/fv3k7u6u1atXq0OHDkZHKtXcuXM1adIkPfjgg4qIiJCHh8ctPf7hw4c1ffp0RUZGqnPnznrnnXcUHBx8SzMAEs/f2wmFyEDFUIgMAEDVYqL90lGICaAm4vW/dLz+w0hJSUl65plntG7dOr344ot6/fXX5erqanSsG6Smpmr69On65z//qdDQUIWHh9ea93yBokyaNEn//Oc/9cknn2js2LE3LZ83b55eeukldenSRQsWLFBgYKABKUu2atUqTZgwQR4eHlq1atVNf3tKT0/X4MGDFRUVpc2bN+vBBx80KCkAAABQc/A+XekoRAZQJLPZrMaNG2vJkiUaOnSo0XEAAACACsnMzNTWrVu1adMmrVu3TgkJCZYS5MGDBzPpEwAAuEFWVpZOnz6t2NhYnTp1qsji45SUFMv6rq6uatGihXx8fNS0aVNL4XHDhg3l7e2txo0bq1GjRmrYsKGBowIAAAAAAAAAoOIoPYaRLly4cFNJ8tmzZ2Vvb6/27durW7dueuCBB9S1a1c1atTI6LgAANR6+/bt07x587R27VrZ29sr9P9j787jYs4fP4C/mi5HKMcSoiYq04qEougwKVauClGuFivfZa1z3RbrXF/HHo61y5YjuYXS0KEDK7miQiq5jxxFpWZ+f/iZ77bsiq0+0/R6Ph7zkM/MfOb1ofen5jOfz/vl7Q1/f3/Y29sLHY2ISK0UFhbi999/x9KlS3Hjxg14e3tj/vz5MDMzEzoaUQksRC6dspjm4datW2jWrBn27dsHDw+PMkhFRERERERCCgsLg5eXF5ycnLBt27ZKNUn9mTNn4OHhgcaNG+Pw4cNo2LBhub9mZmYmvvvuO2zatAmtWrXCnDlzlEWKRBWN47dyqUqFyH+epLUqbC+Vv/L8nmIhMhER0WucaP/9WIhJROqI+//34/6fhJKUlARvb2/k5eVh69atcHFxETrSP5LJZPD19UWtWrWwa9cutGnTRuhIRBVu6dKlmDFjBoKCguDj41PivtzcXAwfPhz79u3D7NmzMXv2bIhEIoGSvt+dO3cwZMgQJCQkYNWqVRgzZkyJ+4uKiuDj44OIiAjExMTAyspKoKREREREROqBx+ne713H6bQEykJEKiQ0NBQKhQI9evQQOgoRERER0UfJz89HWFgYdu7cidDQUOTl5cHOzg7Tp0+Hp6cnmjdvLnREIiIiEohcLsft27eRkZGhLGjIyMjAjRs3cOPGDdy6dQvFxcUAgFq1asHIyAhGRkZo0qQJ7Ozs0LRpUzRp0gTNmjVDkyZNoK+vL/AWERERERERERERERGVnTelx+np6W8VH2dkZEAulwMADAwMIJFIYGlpCalUqiw9btWqFWrUqCHwVpA6atSoEXr27ImePXsql92+fRuxsbGIjY1FVFQU1q5di+LiYlhYWMDBwQFdunSBg4MDxGKxgMmJiIiqjoKCAuzYsQNr165FYmIi2rdvj7Vr12LgwIGoVauW0PGIiNSSjo4OPv/8c4wYMQIhISFYsGABLC0tMWLECMydOxdNmjQROiIRVbAmTZqgY8eO2Lt3LwuRiYiIiIgque3bt2PYsGEYPHgwfvnlF2hpVa7p4dq3b4+4uDi4ubnBwcEBR48ehYmJSbm81q1bt7Bs2TKsX78exsbG+PXXX+Hr66vSE5WTeuP4JVXGEmQqa/yeIiIiIiIiIqKq5Pjx4+jbty/at2+P7du3o2HDhkJHei+pVIqkpCT4+Piga9eu2LdvH5ydnYWORVRhgoKC8M0332DlypVvlSE/ePAAPXv2RFZWFiIiIirF2DA0NERERATmz5+PsWPHIjMzE4sWLVKWtGlpaWHr1q3w8PCAq6srYmNj0bJlS4FTExERERFRVaOh4BklRFWep6cn8vLyEBYWJnQUIiIiIqJSKygowNGjR7Fz504cOHAAubm5cHBwgLe3N/r168fJnIiIiKqY7OxspKWl4erVq7h69SrS0tKQlpaGjIwMFBQUAAB0dXVhbGwMExMTmJiYlPjaxMQE9erVE3griIiIiIiIiIiIiIjKXmFhIbKzsz+o9PhN4TFLj0mVPX36FHFxcYiLi8OJEyfwxx9/ID8/H40bN0aXLl3g7OyM7t27c5JeIiKiMnbnzh2sX78eP/30E548eYK+ffti9OjRkEqlQkcjIqpy5HI5du/ejenTpyM7OxvDhw/HggUL8Mknnwgdjaq4nTt3YuDAgULHUHllNc3D0qVLsXz5cty9e7fSFS4REREREdFrBw4cgKenJyZMmIDly5crJ6+ujO7fvw83Nzfk5uYiNja2TIsBHj16hOXLl2PNmjWoX78+Zs2ahZEjR/K9EAmK47dyenP8itNwEqkWb29vAEBISIjASYiIiIRVmd9XVJTg4GAMGDBA6BhERGWK+//34/6fKtq+ffvg4+ODnj17YuvWrahWrZrQkT5IYWEhhg0bhj179iAwMJDjh6qE48ePw83NDd988w2+/fbbEvdlZmbCzc0NBQUFCA8Ph5mZmUApP15gYCD8/f3h4+ODX375Bdra2sr7nj17BicnJ7x8+RKnT59GrVq1BExKRERERFR58Tjd+73rOB0LkYmquJcvX6JBgwb4/vvvMWbMGKHjEBERERH9o+LiYiQkJCAkJATbtm3Dw4cPYWNjAz8/P3h7e6Nx48ZCRyQiIqJylJOTg5SUFGXZ8Z/Lj1+8eAEAqFOnDlq2bImWLVvCzMwMpqamMDExgVgshqGhIT9MICIiIiIiIiIiIiK19G9Ljy0sLFCzZk2Bt4Lo3ykoKMAff/yBEydOIDY2FjExMcjNzYWZmRm6d+8ONzc3ODs783udiIjoIyUmJmL16tXYsWMH6tati+HDh2PcuHEwMjISOhoRUZVXWFiIzZs3Y+7cucjNzcW4ceMwc+ZMTmRFgmEhcumU1TQPV69ehZmZGaKiouDo6Fgm6yQiIiIioopz8uRJSKVS+Pr6Yt26dULHKRMPHz6Eg4MDdHR0EBMTA319/X+1vtzcXPz4449YvHgxtLW1MXnyZEyYMEHw4gG+/y0ddZ7mkOO38mIhMpFqYiEyERHRa5wb5/1YiElE6oj7//dbvHgxxowZAwMDA6GjUBWwa9cuDBo0COPGjcN///tfiEQioSN9FLlcjvHjx2PdunUIDg6Gp6en0JGIys3du3dhbW2Nrl27Ijg4uMR9t27dgr29PfT19REWFoZGjRoJlPLfO3ToEAYMGIB+/fohMDCwxO8Qt2/fhrW1NaRSKbZu3SpgSiIiIiKiqiU/Px9SqRS3bt1CQkJCpX7P8bFYiExUxR08eBB9+/ZFdnY2DA0NhY5DRERERPSWP5cg79ixA/fv34dEIoG3tzeGDh0KsVgsdEQiIiIqYzk5OSUKG978eePGDSgUCujo6KBp06YQi8VvlTaYmJjwxF4iIiIiIiIiIiIiUksFBQW4fv060tLScPXqVVy9ehXXrl3DtWvXkJ2dDYVCAQ0NDRgZGaFFixZo0aIFWrZsWeJPXV1doTeDqMIUFxfj3LlzOHjwIEJDQ5GUlASRSIQ2bdqgV69e8PDwgLW1daWdkIKIiKgiFBQUYOvWrVi7di3OnTsHW1tbfPnll/D29oaOjo7Q8YiI6C/y8vLwww8/YPHixahZsyYWL16MoUOHCh2LqiAWQpVOWU7zYGlpCVdXV6xatarM1klEREREROXv2rVr6NChA7p164bg4GBoamoKHanMpKenw8HBAa1bt8aRI0c+6nPZFy9eYOPGjfjuu+/w8uVLBAQEYMaMGahdu3Y5JP5wfP9bOuo6zSHHb+XGQmQi1cRCZCIiotc4b877sRCZiNQR9/+lZ2BgoJxz7q+35s2bq9WxOhJGZGQkevbsiZEjR+LHH38UOk6ZmDhxIn766SeEhobC1dVV6DjlZuXKlUhISBA6hkrr1KkTvv76a6FjlDm5XA53d3ekp6cjMTERderUUd739OlTODo6oqioCDExMahbt66AScvG8ePH0bNnT/j7+7+1n4qMjISrqyt+/vlnjBo1SqCERERERERVh0KhgK+vLw4dOoQTJ06gdevWQkcShJbQAYhIWAcOHECHDh1YhkxEREREKuXPJcjBwcG4d+8eJBIJxo4dC19fX7Ro0ULoiERERFQGHj16hPPnzytLj1NSUnDp0iU8fPgQAFCnTh20atUKlpaWcHR0hKWlJSwsLNC8eXO1vICaiIiIiIiIiIiIiKi4uBiZmZm4evUq0tLSlLerV68iKysLxcXF0NDQQNOmTZWlxz169ChRelytWjWhN4NIJWhqasLGxgY2NjaYN28e7t27h4iICISHh+Pnn3/G/Pnz0bBhQ7i6usLd3R3u7u6oV6+e0LGJiIhUwtOnT7Fu3TqsXr0ajx49wsCBA7FhwwZ06NBB6GhERPQPatasiWnTpmHEiBH45ptvMGLECPz+++/44YcfYGFhIXQ8IipH/fr1Q1BQEP773/9yglwiIiIiokoiPz8fAwYMgKmpKbZu3ap2BQ1isRgHDhyAg4MDFi1ahNmzZ5f6ua9evcJvv/2G+fPn4+nTp/jPf/6DadOmwcDAoBwTE5Uexy8REamiFy9eIDMzE3l5eXjy5Alyc3MBAHp6etDX14eenh6aN2+O6tWrC5yUiP6K41c9ff3117h+/Trq1q0LAwMD6OvrK29//vubr/X09ISOTEREpPJWrVoFCwsLXL9+Henp6bh+/TqOHDmC69evIy8vDwCgq6sLY2NjmJqaQiwWv/Unf6ei9zl37hz69u2Lfv36Ye3atULHKTPff/897ty5Ay8vL8TExKBNmzZCRyoXCQkJ2LVrl9AxSABLlixBTEwM4uPjS5Qh5+fno2fPnsjJyUFcXJxalCEDgIuLCzZv3owhQ4bA2NgYU6ZMUd7n7OyM6dOnY8KECbC3t4dEIhEwKRERERGR+ps8eTJ27dqFw4cPV9kyZICFyERVmlwuR2hoKP7zn/8IHYWIiIiICHK5HNHR0QgODsaePXvw4MEDtG/fHpMmTYK3tzeMjY2FjkhEREQfqaioCFlZWUhOTkZiYiISExNx+fJl3LhxAwqFAvr6+jA1NYVEIoG7uzskEgksLS1hYmLCSdmIiIiIiIiIiIiISC3l5OQgPT0dycnJuHz5MtLT05Geno4rV67gxYsXAAADAwOIxWKIxWIMGDBAefzczMwMtWrVEngLiCqfhg0bwtfXF76+vgCA9PR0HDx4EKGhofD390dRURHs7Ozg7e0NT09PNG3aVODEREREFe/evXv4+eefsWbNGhQVFWHEiBGYMmUKfy4SEVUyn3zyCTZt2oSAgACMGzcOVlZWGDt2LBYuXMhjCkRqqm/fvli0aBGSkpLQrl07oeMQEREREVEpTJo0CdeuXcOZM2egq6srdJxy0b59eyxbtgwTJ05E586d0a1bt398vFwux+7duzFjxgxkZWVh+PDhmD9/Pho1alRBiYlKh+OXiIiE9uTJE0RHRyMqKgrJyclIS0tDVlYWFArFPz5PQ0MDzZo1g5mZGT799FM4OTmha9eu0NfXr6DkRMTxW3XUqlULBw8ehEgkgqamJjQ0NKBQKFBcXIzi4uK3Hq+pqQk9Pb0SxV1ERERUkqGhIdzc3N5535tr9f58S0lJweHDh5GRkQG5XA6g5PV6f71xzjt6+vQpvLy80L59e2zevBkikUjoSGVGJBLh999/R/fu3eHt7Y0zZ86gdu3aQsciKhPXr1/HggULsGDBgrfOn/z666+RnJyMkydPqt11MYMGDcLt27cxdepUtG/fHs7Ozsr75s+fj6NHjyIgIACRkZH8+UZEREREVE7Wr1+P//73v9iyZUuVP79KQ/G+TzyJSG2dOnUKdnZ2uHDhQpVuhiciIiIiYSUnJyMwMBCBgYG4ffs2JBIJvL29MXjwYJiZmQkdj4iIiD7Qo0ePkJSUhAsXLihvycnJKCwshLa2Nlq1agUrKyu0bt0abdu2hZWVFSckICIiIiIiIiIiIiK19OTJE1y/fr3ERArJycm4ePEinj17BgDQ1dWFqakpLC0tS0ygYGlpCUNDQ4G3gKjqePbsGQ4fPow9e/bgyJEjyMvLg62tLfr164f+/fujRYsWQkckIiIqV9evX8eaNWuwYcMG1K5dG2PHjsWECRNgYGAgdDQiIvqX5HI5goKCMGnSJOjo6GDx4sXw8/PjxFZUrnbu3ImBAwcKHUPlleU0DwqFAsbGxhg2bBi+/fbbMlsvERERERGVj7CwMPTo0QMhISHw8vISOk658/T0xOnTp3HlyhXo6em98zEymQyTJ0/GxYsX4enpiSVLlkAsFldw0g/D97+lo27THHL8qoc341fdvj+JKjtvb28AQEhIiMBJVFNWVhaCgoKwZ88enDt3DgqFAm3atIG1tTXMzMxgbm4OU1NT1KxZEwYGBqhZsyYAIC8vDzk5OcjNzcX169eRlpaGtLQ0nD17FhcuXICGhgasra3Rv39/+Pr6wsjISOAtJVI/HL9VU3x8POzt7T/4edWqVUN+fn45JFIvwcHBGDBggNAxiIjeEhkZic8++wy1a9dG3bp1YWhoiEaNGqFevXqoX7++8s8GDRqU+Luuri7P5yqFj93/FxQU4NatW28VJqenp+PKlSt48eIFgNfX+TVp0uSdZckSiQTVq1cv600iFTNkyBAcO3YMSUlJantt571792BtbY0uXbogODhY6DhlztvbG7t27RI6hkrz8vJSu+NvvXr1QkZGBpKSkqCtra1cHhISggEDBmDbtm3w8fERMGH58vLyQmxs7Fv7rsTERNja2mLz5s3w9fUVMCERERERkXoKDQ1F3759sXDhQkyfPl3oOIJjITJRFTZr1iwEBQUhIyND6ChEREREVMVcvnwZO3fuxPbt25GWlgZjY2MMHDgQI0aMgLm5udDxiIiIqJSePHmCS5cuITExUXm7cuUKFAoFDAwMIJFIYGNjA0tLS+XXPKGTiIiIiIiIiIiIiNRJYWEhsrOzkZycjMuXL781KQIAaGtrw8jIqMQECG8KkI2NjSESiQTeCiL6s/z8fMTGxuLgwYMIDg7GvXv3IJFI4OHhgV69esHe3p4TzRARkdo4e/YsVq1ahW3btsHY2BhffvklRo8ezfM7iIjU0OPHjzF//nz88MMPcHV1xcaNGzkhNpUbFkKVTllP8zB+/HhERkbi4sWLZbpeIiIiIiIqWwUFBbCyskLbtm3VcqL5d3n06BHMzc0xcuRILFu2rMR9MpkM33zzDRITE+Hl5YWFCxfCzMxMoKQfhu9/S0edpjnk+F32/idUEixEJlJNLER+W3FxMUJCQrBhwwZER0ejbt268Pb2hqurKxwdHVG3bt1/tf5Hjx4hOjoaERERCAkJQU5ODpydnTFq1Ch4eXlBU1OzjLaEqOrh+KXi4mIYGBjg+fPnpXq8pqYmWrdujR07dsDCwqKc01V+LEQmIlVVUFCAOnXqoKCgQLlMJBJBS0sLGhoakMvlKCoqeuuYRPXq1fHy5cuKjlvplNf+Pycn561rAt9cK5iTk6N83Jt59d5cF/jm1qJFC9SpU6fMc1HF2rBhAwICAnD06FG4uLgIHadcyWQyuLm5YcOGDfD39xc6TpliIfL7qVsh8p49e+Dl5YVjx47B2dlZuTwzMxNWVlYYOnQo1q5dK2DC8vfkyRPY2NjAzMwMR44cKXFfQEAA9uzZg5SUFOjr6wuUkIiIiIhI/Zw5cwZOTk7w8fHBxo0bhY6jEliITFSFWVlZwcnJCWvWrBE6ChERERFVATdv3sSePXsQEhKCuLg4NGnSBJ6envD29uZEsURERJXAnTt3cPbsWSQmJuLs2bM4e/Ysbt68CQBo3rw52rVrh3bt2sHGxgbW1tZo1KiRwImJiIiIiIiIiIiIiMpGUVERsrKy3jmpQUZGBuRyOQDA0NDwrQkNJBIJLCwsOKkUUSVVVFSE6Oho7N27F/v27cOtW7cgFovRr18/DB48GO3atRM6IhER0Uc5evQoFi5ciBMnTsDOzg5Tp05Fnz59IBKJhI5GRETlLC4uDv7+/rh79y6+//57jBw5kufyU5ljIVTplPU0D8ePH0e3bt2QmppaacrDiIiIiIiqonnz5mHlypW4cuUKmjRpInScCvPzzz9j/PjxSExMhJWVFRISEjBz5kxERkZCKpVi6dKlle7zV77/LR11muaQ4/f1+FUHLEQmUk0sRP6fwsJCBAYGYsmSJbhx4wb69OmDYcOGoUePHtDW1i631zxy5Ai2bNmCAwcOQCwWY/r06fD19YWOjk65vCaROuL4pT/r27cvDh06hKKior99jKamJhQKBaZMmYIFCxZAW1ubn+GXAguRiUiVSaVSREZGKq83o7IjxP7/XWXJb26ZmZkoLi4G8Los+c/XFP75ZmxszHO0Vdy9e/fQqlUrjBo1CkuXLhU6ToWYNGkSNm/ejJSUFDRo0EDoOGWGhcjvp06FyMXFxbC0tESHDh0QGBhY4r6+ffsiNTUV586dg66urkAJK058fDy6dOmCrVu3YtCgQcrlOTk5MDMzwxdffIEFCxYImJCIiIiISH3cuHEDnTp1Qrt27XDgwAFoaWkJHUklsBCZqIrKzMyEsbExjh49CldXV6HjEBEREZGaevz4MUJDQxEYGIhjx45BX18fvXr1gre3N3r27MkJn4mIiFTU8+fPkZiYiJMnT+L06dM4deoUbt++DQAQi8XK4uM3Jcj169cXODERERERERERERER0b+Xk5OjLDr+a/lxfn4+gJKTE0gkEmUBsoWFBWrWrCnwFhBReVIoFDh9+jT27t2LXbt24fr165BIJPD19cWQIUPQrFkzoSMSERG9V1hYGL799lskJCTA3d0d06dPh6Ojo9CxiIioguXn52PevHlYsWIFunXrho0bN/I9DZUpFkKVTllP81BcXIxGjRph6tSpmDJlSpmum4iIiIiIysadO3cgFouxcOFCTJo0Seg4FUoul8PW1ha6urqoXbs2jhw5AhcXFyxcuBCdOnUSOt5H4fvf0lGXaQ45fm1Rv359HDlyROg4JZw6dQqZmZmQSCQwNzcvdckgC5GJVBMLkV87ePAgJkyYgFu3bmHo0KGYNm0aWrRoUaEZrl27hiVLliAwMBBNmzbFmjVr8Nlnn1VoBqLKiOOXACA9PR0HDx5EaGgooqKiIJfL/7YQU0tLC40aNcL27dvh4OCgXM5C5PdjITIRqbJly5Zh1qxZePXq1Xsfq62tDV1dXfz0008YOnRoBaSr3FRt///q1SvcvHnznWXJaWlpeP78OQBAR0cHTZs2fWdZsrm5OfT09ATeEho2bBgiIyNx+fLlKvP/8fz5c9Dr0XUAACAASURBVLRq1Qpubm7YtGmT0HHKDAuR30+dCpGDg4MxZMgQXL58GWZmZsrlYWFh6NGjB2QyGbp16yZgwor1+eef49ChQ0hJSUGdOnWUyxcuXIgVK1YgIyMD+vr6AiYkIiIiIqr8Hj58CHt7e9SqVQtRUVFV5jhCabAQmaiKWrt2LWbNmoUHDx5AR0dH6DhEREREpEaePn2K/fv3IyQkBOHh4dDS0kKvXr3g5+cHNzc3/v5JRESkYoqLi5GcnIxTp04pb1euXEFxcTGaNGmCjh07wtbWFu3bt0e7du1gYGAgdGQiIiIiIiIiIiIioo+Wk5PzVtnx5cuXkZqaitzcXACAvr4+TE1NS0wuIJFI0Lp16xIXgRJR1ZaQkICgoCAEBwcjJycHXbp0gZ+fH7y8vLivICIilSOTyTBr1iycOnUKUqkUCxYsgJ2dndCxiIhIYKdOncKIESOQmZmJOXPmYMqUKRCJRELHIjXAQqjSKY9pHoYPH460tDTEx8eX+bqJiIiIiOjfmzx5MrZu3Yr09HRUr15d6DgV7s3k45aWlli8eDE8PDyEjvSv8P1v6ajLNIccv6/H7+nTp9GhQweh4yiFhIQoS3A0NTVhYmICa2trWFlZKc/3EovF0NTULPE8FiITqaaqXoicmZmJCRMmYP/+/fDx8cHSpUthZGQkaKasrCxMnToVwcHB6NevH1atWoVmzZoJmolIFXH8Vm0PHz6ETCZDWFgYwsPDcffuXTRs2BDdu3dHx44dMX78+Ld+7xSJRJDL5fD19cXPP//81mT5LER+P1UrxCQi+rM9e/bA09PzvY/T0NCAq6srfvvtNzRu3Jj7/1KobPv/v17H+OfbjRs3lL8jGBgYvLMsWSwWw8TEhN8b5Sw+Ph4ODg7YtWsX+vfvL3ScCrVz504MGjQICQkJsLW1FTpOmWAh8vupUyGyjY0NzMzMsH37duWywsJCWFhYwM7ODtu2bRMwXcV7+PAhLCwsMHLkSCxbtky5/OnTpzA2NsbUqVPxzTffCJiQiIiIiKhyy83NRbdu3fDgwQPEx8ejUaNGQkdSKSxEJqqiunfvDgMDAwQHBwsdhYiIiIjUQEFBAQ4fPoygoCAcPnwYCoUC7u7u8PHxQe/evavkBV1ERESq6v79+4iPj0d8fDxOnz6NxMRE5ObmombNmrCxsYGtrS3s7OzQsWNHNG3aVOi4REREREREREREREQfrLCwENnZ2cqy4zcTBVy6dAl3794FAOjo6KBp06bKsmNLS0tOFEBEH6WwsBBhYWEICgrCwYMHAQAeHh7w8/ODu7s7tLW1BU5IRERVmUwmw8yZM3H69GlIpVIsWrQIHTt2FDqWylq5ciUSEhKEjkFEFaRTp074+uuvhY4huPz8fMybNw/ff/89nJ2dsXnzZjRu3FjoWFTJsRCqdMpjmof9+/ejf//+yM7OhqGhYZmvn4iIiIiIPt7jx49hbGyMefPmVeljEm+uW9yzZ4/QUf41vv8tHXWY5pDj9zVVHL+XL1+GpaVliWUikQhaWlp49eoVFAoFtLW10aJFC7Rr1w6tW7eGpaUlMjIy8OWXX6rF9yeROqnKhch79+7FyJEj0aBBA6xduxZubm5CRyohKioK48aNQ3Z2NtavX49BgwYJHYlIZXD8Vj3FxcU4d+4cZDIZZDIZoqKioFAo0LZtW0ilUvTq1QudO3eGSCQCAJibmyMtLU35fG1tbdSqVQu//fYbevfu/c7X4LUM71fZCjGJSL3dv38fx44dQ0REBGQyGW7evIlq1aohPz//nY/X1taGjo4OVq5cidGjRyuXc///fuq0/y8oKMCtW7feWZZ8+fJlvHz5EgBQrVo1NG7cWHnd45+vg2zWrBm0tLQE3pLKz93dHS9fvkR0dLTQUQRhb28PfX19HDp0SOgoZYKFyO+nLoXIhw8fRq9evXDu3DlYWVkpl2/atAkBAQG4du0ajIyMBEwojFWrVmHWrFm4ceMGGjRooFw+c+ZMbNy4EZmZmZwnnoiIiIjoI7x69Qq9e/fGmTNnEBsbC3Nzc6EjqRwepSKqgp49e4bo6Ghs2rRJ6ChEREREVIkpFArExcUhKCgIO3fuxNOnT+Hs7Iwff/wR/fv3h76+vtARiYiIqjyFQoErV64gLi4OcXFxiI+Px9WrVyESidCqVSvY2tpi8ODBsLW1xaeffgpNTU2hIxMRERERERERERERlYpCocDNmzeRlpaG1NRU5S0tLQ1ZWVmQy+UQiURo3rw5zMzMIJFI0K9fP5iZmaFly5Zo1qwZJ4ogojKho6OD3r17o3fv3njy5Al2796NwMBA9O3bF3Xr1sXAgQPh5+cHW1tboaMSEVEVIpPJMGPGDPzxxx+QSqU4ffo0OnToIHQslZeQkICTJ0/Czs5O6ChEVM5OnjwpdASVUa1aNSxZsgSenp7w9fVFmzZtsGnTpr+deJmIVJurqyuqVauGAwcOYMyYMULHISIiIiKiP/npp5+gq6tb5X9XnzFjBjw9PZGWlgYzMzOh4xCVCsfva6o4flu2bAktLS0UFRUpl8nlchQWFir//urVK1y5cgVpaWkICQkpcd/MmTMxf/58FscQkWAKCgowdepUrFmzBn5+fli/fr1KFpI4OTnh7NmzmDp1Knx8fHD48GGVzUpUUTh+q5Z79+4hJiYGBw8eRGhoKHJyctCoUSO4urpi27ZtcHV1/ds593r37o01a9agsLAQGhoacHNzw6+//lqimIqIiCqXly9fIi4uDjKZDDKZDElJSdDQ0EDbtm0xePBgSKVS/Pzzzzhw4ECJYxbA69JjBwcHbNmypUqWNNL/6OrqKkuO3yUnJwfJycm4fPmysig5MTERwcHBePr0KYDX5dpGRkbK9fz51rJlS9SuXbsiN6lSSkpKwtGjRxEWFiZ0FMHMnDkTn332GRITE2FjYyN0HKJS++WXX+Di4lKiDLm4uBhLly7FsGHDquzP2dGjR2Px4sVYtWoVFi1apFz+5ZdfYtmyZThw4AAGDhwoYEIiIiIiospHoVDg888/R1xcHCIjI1mG/Dc0FAqFQugQRFSxdu7cicGDB+PevXuoV6+e0HGIiIiIqJLJzMzEjh078Msvv+DatWuQSCTw9vbGsGHDYGJiInQ8IiKiKu3Vq1e4cOECYmNjlQfHHz58iBo1asDa2hoODg6wt7dH586deVyIiIiIiIiIiIiIiCqFp0+f4tq1a8oL999cyJ+amorc3FwAgL6+PkxNTZUX7EskElhaWsLCwgI1a9YUeAuIqKrKzs7G7t27sWXLFiQlJcHCwgLDhw/HqFGjULduXaHjERGRmjp06BBmz56Nc+fOoU+fPpgzZw6sra2FjlVpeHt7AwBCQkIETkJE5Y3j/d1evnyJ6dOnKyftXrduHWrUqCF0LKqEdu7cyQnTSqG8pnno06cPAGD//v3lsn4iIiIiIvo45ubm8PDwwIoVK4SOIii5XA5jY2MMGzYMCxYsEDrOv8L3v6WjDtMccvy+pqrj19zcHGlpaaV+vEgkQqNGjXD79m21+P4kUidV7fObnJwceHh44OLFi1i/fj0GDRokdKRS2bt3L0aOHAlzc3McOnSI81ZQlcTxq/6Kiopw8uRJhIaGQiaT4ezZs6hWrRrs7e0hlUohlUpLXRYnk8ng6uqK6tWrY+3atfD393/vczQ0NP7tJqi94OBgDBgwQOgYRFRFyOVyJCUlKQuQY2NjkZ+fD7FYrPy54OrqCn19feVzNmzYgICAABQXFwN4XVwrEomwdOlSjB8//p37eu7/34/7/9dycnKU11r+9ZaRkQG5XA4AMDAweGdZslgshrGxMUQikcBbIjwvLy9kZWXh9OnTQkcRjEKhQPv27WFqaoqdO3cKHedf8/b2xq5du4SOodK8vLwq/fG3x48fo3HjxtiwYQOGDh2qXL5jxw74+voiJSUFLVq0EDChsJYsWYIlS5YgMzMTderUUS7v2bMnRCIRQkNDBUxHRERERFT5fP311/jxxx9x8OBBdO/eXeg4KktL6ABEVPEOHjwIBwcHnnxARERERKX2+PFj7Nq1C7///jvi4+NhaGgILy8veHt7w8HBQeh4REREVdbTp08RGxuL6OhoxMTE4OzZs3j16hWaNGkCe3t7zJ49G507d0bbtm2hpcXDwURERERERERERESkmoqKipCVlfVW6XF6ejpu3LgBhUIBbW1tGBkZQSwWw97eHqNHjy5xET4Rkapp2rQpJkyYgAkTJuCPP/7A+vXrsWDBAixYsACDBg3C6NGj0bFjR6FjEhGRmjhx4gRmzJiB2NhY9OnTB7/99hvatGkjdCwiIqpkqlevjtWrV8PR0RGjRo1C+/btsX37dv5MIapk3NzcMHXqVBQUFEBXV1foOEREREREBCA2NhZpaWnw8/MTOorgRCIRBg8ejMDAQMyfP5+FC6TyOH7/R1XG76tXr5CWlobk5GQkJydDW1sbmpqayoKhv6OlpQUDAwMsXLgQtWvXho+PTwUlJiJ6261bt+Dm5obnz5/j1KlTsLCwEDpSqfXr1w/m5uZwd3eHk5MTwsLC0KRJE6FjEVUYjl/1lZ6eriy6DA8Px7Nnz5RFl9OmTUOPHj2gp6f3wevt0qULpFIp1q1bB1NT03JITkRE5eHPPxeOHz+OR48e4ZNPPoGjoyNWr14Nd3d3NGvW7G+fL5VKlccqRCIROnbsiMDAQJiYmFTUJpAaMzAwgI2NDWxsbN66r7CwENnZ2W8VJctkMqSmpiI3NxcAoKuriyZNmryzLLlVq1aoUaNGRW9Whbt37x7279+PwMBAoaMISkNDA5MmTcLw4cPx4MEDNGjQQOhIRO+1fft2aGlpoX///iWWb9y4EX369KnSZcgAMHbsWHz77bfYuXMnRo0apVzu5+eHoUOH4u7du2jUqJGACYmIiIiIKo8FCxZg9erV2L59O8uQ34MNGERVTHFxMcLCwjB9+nShoxARERGRisvPz0dERAQCAwOxb98+aGlpoVevXti/fz969OjBUkUiIiIBPHr0CLGxsYiKikJMTAzOnz8PuVwOiUQCR0dHjB8/Hg4ODv94oiwRERERERERERERkVBycnLeKjx+8/f8/HwAry/IF4vFkEgkkEqlyq/Nzc35OTURVVodOnRAhw4d8P333yMoKAjr16/Hpk2bYG1tjTFjxmDw4MGoVauW0DGJiKgSSk5Oxvz58xESEgJ7e3tER0eja9euQsciIqJKrn///rCxscGQIUNgZ2eHFStWICAgABoaGkJHIxWmUChw4cIFyGQybNmyReg4VVqPHj0wbtw4xMXFwcXFReg4REREREQEICgoCFZWVmjTpo3QUVSCn58fli5dihMnTsDR0VHoOET/iOO3pIocv8XFxbh+/TouXbqEy5cv49KlS0hOTkZqaipevXoFLS0tmJqaQk9PD1paWn9biKytrQ2RSISvvvoKM2fORK1atbBz585yzU5E9E8yMzPh6OgIPT09xMXFoWnTpkJH+mASiQRxcXFwc3NTnqvQvHlzoWMRlTuOX/Xy4sULxMfHQyaT4cCBA7hy5Qpq1qwJZ2dnLF++HG5ubmXyb6Orq4uIiIgySExEROUpNzcXJ0+eVJYgJyYmokaNGujcuTOmTJkCqVSKdu3alfr8KbFYDCMjI9y7dw9Lly7F+PHjIRKJynkriAAdHR1lsfG7vLm+812FyTdu3IBCoQDwv2s8/3qztLSEoaFhRW7Se8nl8o8aX1u3bkWNGjXQp0+fckhVufTr1w8BAQHYsWMHvvzyS6HjEL3Xtm3b0L9/f+jp6SmXZWdnIyoqCnv37hUwmWqoU6cO+vTpg8DAwBKFyH379kWNGjUQEhLCsU5EREREVAobNmzAnDlzsHr1agwYMEDoOCqPs4IRVTHx8fF4+PAhevXqJXQUIiIiIlJBcrkc8fHxCAwMxI4dO5CXlwdnZ2f88ssvb33QR0REROXv/v37OHXqFOLi4iCTyZCUlAS5XA6xWAypVIrp06fDyckJDRo0EDoqEREREREREREREREAoLCwENnZ2W+VHl+8eBH37t0D8HpSH1NTU1haWkIqlWL06NGQSCSwsrJC7dq1Bd4CIqLyU6dOHYwbNw7jxo1DYmIiNmzYgEmTJmHKlCnw8fHBmDFj0K5dO6FjEhFRJZCRkYHFixdj06ZNaNeuHQ4cOAAPDw+hYxERkRpp3rw5oqOjsWLFCkycOBERERHYsmUL6tSpI3Q0UiE3b96ETCZDREQEwsPD8fjxY+V97du3h7GxsXDhqjATExOYmZkhPDychchERERERCri8OHDJSabruosLS1hYWGBI0eOsBCZVB7Hb0nlNX5v376Ny5cvK885S05ORlJSEl68eAEAMDQ0hKWlJVxcXPDll19CIpGgXbt2qFGjBvbu3QtPT8+31qmtrY2ioiIMHDgQy5Yte2dRC4uRicpHXl4eatas+cHPy87OrpTloh/iwYMHcHNzg76+Po4fP466desKHemjGRkZ4cSJE3BxcYGbmxtiY2NRv359oWOVm4SEBNy8eVPoGCrNyMgInTp1EjpGueH4VQ/p6ek4ePAgQkNDceLECbx69QrW1tbo3bs31qxZg65du0JHR0fomEREVAGKiopw/vx5ZQFydHQ05HI52rZtC6lUiiVLlqBLly7Q1dX96NeYPn06unXrBnNz8zJMTvTvGBgYwMbGBjY2Nm/dl5+fj9u3byuvB31zrC4kJARZWVkoKipSruNdZclisRjNmzeHpqZmhW6TnZ0dRowYAX9//w/6XS4wMBADBw5E9erVyzFd5VC9enX069cPgYGBLEkllff8+XOcPn0aX331VYnlW7ZsgYGBAdzd3QVKplr8/PzQq1cvpKenQywWA3g91qVSKWQyGcc6EREREdF7HDhwAOPGjcP8+fMxfvx4oeNUCixEJqpiDh06hJYtW/JDECIiIiIqISUlBVu2bEFQUBCys7PRvn17fPvttxg0aBAaNmwodDwiIqIq48mTJ4iOjsbx48dx7NgxJCcnQ0tLC9bW1nBycsLcuXPh4OAAAwMDoaMSERERERERERERURX3ZhLKv17gnpGRAblcDuB/E1GKxWJIpVJIJBJYWlrC2NgYIpFI4C0gIhKWjY0N1q9fjyVLlmDLli3YsGEDNmzYgI4dO2LMmDHw8fHhpBpERPSWW7duYdmyZVi3bh3EYjG2b98OLy8vaGhoCB2NiIjUkKamJqZNm4ZOnTph4MCB6NixI3bt2oXWrVsLHY0EkpeXh4SEBMhkMhw6dAjJyckAXn+vvJnwUltbG3369EFISIiQUau8Hj16ICwsDEuXLhU6ChERERFRlXft2jXcvHkTLi4uQkdRKS4uLoiMjBQ6BtE/4vh9t38zft9VfHz+/Hnk5uYC+N/5ZjY2Nhg6dCgkEgnatm0LPT29v12npaUlFAqF8u9aWlooKiqCg4MDVq1aBSsrq7997sCBAz9qO4io/Hh5eQkdody8ePECffr0watXrxAZGVmpy1TfqFevHiIiIuDg4ICePXvi+PHj/7jPrsxWrlyJXbt2CR1DpXl5eant50Mcv5XXo0ePcPz4cchkMhw+fBjZ2dlo0KABnJycsGbNGvTq1QuNGzcWOiYREVWQ9PR0ZQFyeHg4nj17przmbfTo0ejWrVuZ/pwPCAgos3URVYRq1aopi43/6tWrV7h586byWtI3N5lMhqtXr+LZs2cAXp87ZmRk9M6yZDMzM9SqVatMM7948QJnzpzBH3/8gQULFuDbb7/FsGHDoK2t/Y/PS09Px7lz57By5coyzVOZDR48GN27d0dWVhaaNWsmdByivxUdHY3i4mI4OjqWWL53714MGDDgg4rR1Vn37t1Rr1497Nu3D19//bVyubOzM2bNmoXi4uIKL7AnIiIiIqosoqKiMHDgQHz++eeYM2eO0HEqDRYiE1Uxhw4dwmeffSZ0DCIiIiJSAU+ePMGOHTuwZcsWnDx5EkZGRhg2bBiGDBmCVq1aCR2PiIioSnj58iXi4uJw7NgxHD9+HImJiVAoFGjbti169OiB5cuXw8HBocxP4CMiIiIiIiIiIiIiKo2nT58iLS0NKSkpSElJQVpamvKWn58PAKhfvz7MzMxgYWEBBwcHmJmZwdzcHC1atOCFo0REpWBgYICvvvoKX331FaKjo7F+/XoEBARg2rRpGDt2LMaNG4eGDRsKHZOIiAT2+PFjfPfdd/jxxx/RsGFDrF+/Hn5+fpyAhIiIKkTXrl1x5swZDBw4ELa2tvjpp58wfPhwoWNRBSguLsa5c+eUE4THx8ejqKhIWSrzxpuvNTU1YWhoiE2bNgkVmf6fm5sbVq9ejZs3b8LIyEjoOEREREREVVpkZCRq1KiBDh06CB1Fpbi4uGD9+vV48uQJ9PX1hY5D9E4cv+9WmvGbk5NTovT48uXLOH/+PB48eADg9bkSEokElpaW8Pb2ho2NDdq0afNR11ObmppCR0cHhYWF0NDQgEQiwapVq+Ds7Py3zxkwYAAGDBjwwa9FRO/38uVLyGQyREdHIyYmBklJSSgqKoK5uTm6du2Krl27wtHRsUoetxw2bBjS09MRFxcHQ0NDoeOUmU8++QSHDh2Cvb09/P39ERwcLHQkojLH8Vt5/PnzTZlMhqioKOU8Pv7+/vDw8IC1tTVEIpHQUYmIqALcu3cPMTExyvNesrOzUa9ePbi4uGD58uVwdXWFiYmJ0DGJKgVtbe2/LUsGXh8P/GtZ8pvC5IyMDMjlcgCvjwu+qyxZLBbDxMQEGhoaH5QrPT0dCoUCAHD37l188cUXmDt3LubOnYuRI0dCS+vdVTxvjv127tz5g15PnXXp0gXVqlVDZGQkhg0bJnQcor8VGRmJ1q1b45NPPlEue/LkCc6dO4eZM2cKmEy1aGlpwcnJCZGRkSUKkV1cXPD06VOcPXuWn38REREREb3DhQsX0K9fP7i7u+OHH34QOk6lwkJkoirk5s2buHTpEr7//nuhoxARERGRQORyOY4fP47ff/8du3fvhlwuh4eHB2bMmIEePXr87Yf1REREVDb+euFEbGws8vPzIRaLIZVKMXnyZLi4uKBevXpCRyUiIiIiIiIiIiKiKkIulyMrKwupqanK4uM3X9+5cwcAoKOjg5YtW8Lc3Bw9e/bEV199BQsLC5ibm6Nu3boCbwERkfpwdHSEo6MjHjx4gF9//RVr1qzB0qVLMXDgQEyZMgWtW7cWOiIREVWwwsJC/PDDD1i0aBG0tLSwdOlSfPHFF9DR0RE6GhERVTFNmjRBVFQUZs2ahREjRiAhIQFr167lzyQ1t2PHDvj6+v5tAfJfiUQi7NmzB7Vr166oiPQ3nJycUL16dURERGDkyJFCxyEiIiIiqtLi4+PRuXNnvof+C0dHRxQXF+PUqVNwc3MTOg7RO3H8vtufx2/Hjh3fKj6+ePEi7t27B6Bk8XGvXr1gaWkJKyurEkUF/5ampibMzc3x6NEjLFu2DIMHD/7g4hQiKjvVq1eHh4cHPDw8AAB5eXlISEhAbGws4uLiEBgYiPz8fBgaGsLBwQFSqRT29vaQSCRqPXZ/+OEH7NmzB+Hh4TA1NRU6Tplr2bIlgoOD4erqinXr1uGLL74QOhJRmeH4VX1vyi4PHjyI0NBQ5OTkwMTEBK6urhg9ejRcXV2hr68vdEwiIqoAb95/vJnf7ezZs9DU1ESbNm0wZMgQ9OrVC507d4ZIJBI6KpHaMTAwgI2NDWxsbN66r6CgALdu3XpnWfKVK1fw4sULAICuri6aNGnyzrJkiUSC6tWrv7Xu9PR05dcKhQLFxcW4c+cOxo4diwULFmD27Nnw9/eHpqZmiedFRkbC3t4eurq6ZfwvUXlVq1YNnTp1YiEyqbyYmBg4OTmVWBYVFQWFQoGuXbsKE0pFubi4YNq0aXj16hW0tbUBAK1atUKjRo0QHR3NQmQiIiIior9ITU2Fq6sr2rdvjx07drx1PIH+GZuuiKqQQ4cOoWbNmjwYQ0RERFQFpaamYvv27diyZQsyMjJgY2OD7777Dn5+fpycmoiIqJy9OelOJpMhIiICT548QaNGjdClSxesXr0abm5uaN68udAxiYiIiIiIiIiIiEjNFRQU4Nq1a7h8+TLS09OVE1CmpqYiNzcXwOsLz99cIO7m5qb82sLCgidpExFVoAYNGmDatGn46quvEBwcjGXLlsHKygr29vaYNm0aevXqpdYTgBIR0WsHDx7ExIkTcfv2bYwfPx7ffPMN6tSpI3QsIiKqwrS0tLBkyRK0bdsWo0aNwqVLlxASEoLGjRsLHY3KyZAhQxAcHIzw8PD3PlYkEmH58uXvnNSSKl716tXRtWtXhIWFsRCZiIiIiEhgV65cgZ2dndAxVE79+vXxySefICUlhYXIpLI4ft+tfv36qF+/Pry8vJTnndWtWxeffvopJBIJ+vXrh1atWqF169aoX79+hWRas2YN7OzsUK1atQp5PSIqvZo1a0IqlUIqlQIAXr58icTERMTFxSE2NhZTpkzBs2fPlPMv2Nvbw8HBAe3atVOb86OSkpIwefJkzJ07V/nvoI6cnZ0xY8YMTJw4EZ06dUKbNm2EjkT0r3H8qqaioiKcPHkSoaGhyrLLatWqKc+xlUqllf4zSy8vL6EjqDwjIyOhIxCRCiguLsa5c+eU87vFxMSgsLAQYrEYUqkU06ZNg7u7O2rVqiV0VKIqTVdXV1ls/FdyuRw3b95Eeno6rl+/rvzz7NmzCAkJQU5ODoDX5y4aGRnB1NQUYrFY+eeZM2ego6ODwsJC5ToVCgUUCgVu376NL774AsuWLcOcOXMwZMgQ5TWy0dHRCAgIqJh/gErExcUFGzduFDoG0d9SKBS4cuXKW+M3JiYGbdq0Qb169cr19cv6eKVCoSjT9f2Vi4sLnj9/jrNnz8LW1hbA622wsrJCcnJyub42tc7llgAAIABJREFUEREREVFlk56ejm7dusHU1BR79+6Frq6u0JEqHRYiE1Uhhw8fhlQq5QmbRERERFXE06dPsX//fgQGBuLYsWNo3LgxfH194e/vj5YtWwodj4iISG09f/4cx48fx9GjR3H06FFcu3YNenp6cHZ2xsKFCyGVSmFubi50TCIiIiIiIiIiIiJSUzk5Ocqy4z8XH2dkZEAul0NLSwvNmjWDWCyGvb09Ro8eDbFYjE8//RSNGjUSOj4REf2Jrq4uhg4dCj8/Pxw+fBgrV65E79690bp1a0ycOBGDBw/mhTRERGro9OnTmDx5MmJjY+Hl5QWZTAZjY2OhYxERESkNGjQIVlZW8PT0RIcOHbB371507NhR6FhUTjZt2gQLCws8efIEcrn8nY/R1tZGt27dMH78+ApOR//E3d0d8+fPR1FREbS0OK0EEREREZFQrl69imHDhgkdQyWZm5sjNTVV6BgAgBEjRkAsFsPHxwctWrQQOg6VsY/9/+X4/XutWrWCXC7HvHnzYGlpCUNDQ0HzODk5Cfr6RFR61atXh4ODAxwcHDBt2jQUFRXh/PnziI2NRVxcHObNm4cnT56gQYMGsLW1hYODA6RSKaytrSESiYSO/8GKi4vh7++PTp06YdasWULHKXdz585FVFQU/P39cerUKWXRFFFlxPGrWuM3PT1dWXYZFhaG58+fK8su586dC1dXV7WaazkkJEToCEREKislJQURERGQyWSIjIzE8+fP0axZM0ilUmzZsgXdunVDgwYNhI5JRKUkEonQvHlzNG/eHM7Ozm/dn5OTg/T09LduMpkMmZmZaNq06d+u+825bjdu3MDw4cOxcOFCLFq0CFKpFNnZ2bC2ti637aqsrK2tkZWVhWfPnqF27dpCxyF6y82bN5GXl/fWXK4XL17kmH4HMzMz6OnpITk5WVmIDLz+jPbMmTMCJiMiIiIiUi3Z2dlwdXVF/fr1ERoaCj09PaEjVUq8co2oiigoKEBkZCRWrFghdBQiIiIiKkdyuRzHjx/H77//jt27d0Mul8PDwwP79+9Hz549Ve4kUyIiInUgl8uRlJSkvHAiJiYGhYWFkEgk8PT0hFQqRZcuXTgRORERERERERERERGVmcLCQmRnZ79VfHzhwgU8f/4cAKCvrw9TU1OIxWL4+fnB0tISYrEYEokE1atXF3gLiIjoQ2hoaOCzzz7DZ599hvPnz+Onn35CQEAApk+fjrFjx+I///kP6tevL3RMIiL6lzIzMzF79mwEBQXB2dkZZ86cQbt27YSORURE9E4SiQSnT5/GkCFD0LVrV2zYsAFDhw4VOhaVgwYNGuDXX39F375933m/pqYm6tati6CgIGhoaFRwOvon7u7umDhxIk6dOgV7e3uh4xARERERVUn379/H48ePYWZmJnQUlaRKhcgXL17E5s2bMWfOHFhbW2Po0KEYMGAAGjduLHQ0KgMf8//L8fvPzM3NkZ6eDqlUKnQUIqrktLS0YGNjAxsbG0yYMAHFxcVISUlBXFwcZDIZli9fjunTp0NPTw92dnawt7eHg4MDunbtCh0dHaHjv9ePP/6I5ORknD9/vlIWOn8oTU1NrFu3Dm3btsX69esREBAgdCSij8bxK+z4zcvLQ0JCAmQyGQ4cOIArV65AT08PTk5OWLFiBdzd3dGsWTNBMxJR+bl69SrOnj2L1NRUpKSk4MaNG7h//z7y8vKQm5uLvLw8GBgYoGbNmtDT04OhoSHMzMxgZmYGiUQCW1tbGBgYCL0ZVEZyc3MRGRmJ0NBQhIeHIzMzEzVr1kSnTp0wc+ZMSKVStGvXjuesEKkpAwMD5XGDvyosLESPHj2QmZn5j+t4U4x8/fp1DBgwAKampgDwVqEq/e/fJC0tDe3btxc0S05ODnbv3g1PT0/+XFdDH/v/++Zzxb+O39TUVLi6upZpRnWgoaGBFi1avPV5rLm5ObZu3SpQKiIiIiIi1XL//n10794d2traCA8PR926dYWOVGmxEJmoioiKikJubi7c3d2FjkJERERE5SAtLQ2//vorAgMDcefOHTg4OGDt2rXw8vJC7dq1hY5HRESkdh49eoTw8HAcPnwY4eHhePjwIRo3bozu3btj8+bNkEqlaNCggdAxiYiIiP6PvTsPi6ps2AB+MzPgMoCigjvqgLKMGyIqgiHKamKioqWCFmpuZZZGSu6WWmguibn0WuqbC2YqiOwkomaGSwmCErnvCyIaMgvfH37OK8oucGbg/l2XV3ZmznnumcMDMnPmuYmIiIiIiEjHPXjwQFN2/GLxcUZGBlQqFQCgefPmkMvlkMvl8PPz0xQfy2QygdMTEVFV6NKlC9avX4958+ZhzZo1WL16Nb7++muMHTsWQUFBXOCNiEgH3b9/H1999RVWrlyJdu3aYefOnfDz8xM6FhERUamMjIzwyy+/IDg4GGPGjEFKSgq++eabWrEgeG1SUFCAq1evQiqVIj8/HwqF4pXbd+/ejcaNGwuUkIpjbW0NmUyG6OhoFiITEREREQnk1q1bAICWLVsKnEQ7tWzZEkePHhU6xitOnz6Ns2fP4uOPP4aDgwNGjhyJkSNH8jOjNURZzy/nb8m0df4Ske4Ti8Waa2InTJgAAMjKykJcXBySk5Px/fffY8GCBZBKpejatSucnZ3h5uYGZ2dn1K1bV+D0hd28eRNz587FjBkzYG1tLXScamNra4vp06cjODgYw4YNg5mZmdCRiMqN81eY+ZuamoqIiAjExcUhKSkJSqUSdnZ2GDRoEFavXg0XFxfo6+tXayYiqh45OTnYu3cv4uLikJiYiKtXr0JfXx/t2rWDlZUVHB0d0bRpU0ilUs2f7OxsTTny1atXkZGRgX379uHmzZsQi8Xo2rUrXF1dMWDAALi4uPBaFh2iVCrx22+/ISYmBtHR0UhJSQEA9OjRA2PHjoWHhwd69OgBiaTm1Wvs3LlT6Ahar3fv3kJHIC1iYGCArKysMt9fLBYDeFaMDADffPMNvvrqK617PUFI7dq1Q506dZCRkSF4IfLjx48xfvx4TJo0CZ6enhg9ejQGDRqE+vXrC5qLKkdFz+/58+fRuHHjQterPnnyBNeuXWPJeTGsrKyKLES+f/8+7t69iyZNmgiUjIiIiIhIeNnZ2fDy8oJCocChQ4fQtGlToSPptJr3ii0RFSkyMhKdO3dGmzZthI5CRERERJXkyZMnCAsLw/fff4/k5GS0bt0agYGBCAgIgKWlpdDxiIiIapSCggKcOnUKkZGRiIyMxO+//w6RSIQ+ffogKCgInp6e6NSpk9AxiYiIiIiIiIiIiEgHKRQKXLly5ZXi4z///BO3b98GANSpUwcWFhaQy+Xw8fFBUFAQ5HI5bGxs+AFeIqJaqkWLFliyZAk+//xzbN68GSEhIdi0aRMCAgIwa9YsyGQyoSMSEVEplEolQkNDMX/+fNSpUwerV6/Ge++9VyMXaSMioppLLBZj6dKl6Ny5MwIDA5GZmYnt27fD2NhY6GhUCW7cuIHx48cjOjoaU6dOxY4dO3Dnzh2oVCoAz87/ggUL4OzsLHBSKo6HhweioqKwcOFCoaMQERERUTGuXr3KQskyGD58uNARKuTRo0cAACMjI4GTaCcjIyPNc6RNCgoKoFAoAAApKSlISUnBjBkz4ObmhnfeeQdDhgyBoaGhwCmposp6fjl/S6at85eIaiaZTIYJEyYUKkhOTk7GkSNHsHPnTixbtgz6+vro3Lkz3Nzc4OTkBBcXl0p5r2Ljxo0YPHgwTE1Ny73v0qVLYWhoiODg4NfOoWvmzp2LrVu34quvvkJISIjQcYjKjfO3eubv3bt3kZiYiLi4OBw4cADXrl2Dqakp+vbtizVr1sDHxwfNmzev0gxEJBy1Wo3o6Ghs3boVe/fuRUFBAXr37o2JEyfC1dUVDg4OFSpBv3//Pg4dOoTExEQcPHgQISEhaN26Nfz9/REQEMCiPC2VlZWFuLg4xMXFITY2FtnZ2WjevDnc3Nw0r9uYmJgIHbPK6err4ERCUavVuHbtWpG3SSQS6OnpQaFQQCwWo23btujduzfs7e3x119/4fDhw1i9enU1J9Z+YrEY5ubmuHjxotBRNJRKJaKiohAZGYk6derA19cXo0aNgoeHR4X+rUDapbzn9969ezAzMyu07fLly1Cr1WjXrl11xdYpMpkMkZGRhbY9fw7v3bvHQmQiIiIiqrVycnLg4eGBu3fvIikpCS1atBA6ks7j6ghEtURkZCSGDRsmdAwiIiIiqgQpKSnYsmULtm3bhtzcXHh4eGDnzp3w9fXlInhERESV6PHjx0hISEBERAQiIyNx9epVmJmZwcXFBRMnTsSgQYPQsGFDoWMSERERERERERERkY64e/cuzp07h4yMDGRkZCA9PR3p6em4ePEilEolRCIRzM3NYWVlBblcjqFDh8LKygpWVla8aJqIiIollUoxdepUvP/++9i+fTu++OIL/Oc//8HQoUOxcOFCWFtbCx2RiIiKEBsbi48++ghZWVmYPn06Zs+ezfIEIiLSaSNHjoS5uTmGDh0KZ2dnhIeHo02bNkLHotcQFhaGiRMnwsTEBImJiXB2dsaAAQPg6ekJANDX10fPnj3x2WefCZyUSuLp6YkNGzbg9u3brywESERERETa4ejRoxgxYoTQMbSerhZBsFC1ZLpQqKpSqTR/j42NRUxMDMaPHw8fHx9YWFgImIwqQ0nnt1OnTgA4f4ujC/OXiGoumUwGmUyGgIAAAMD169dx5MgRxMXFITw8HMuWLYNEIkGXLl3g5OQEZ2fnChWoFRQUICgoCJ9++inWrl2LkSNHlnnfe/fu4fvvv8cXX3yB+vXrl2vcmkAqleKTTz7BvHnzEBQUVKFCaSKhcP5W3fxVqVQ4ffq05vv1sWPHoKenh65du2LcuHHw8fFBt27doKenV2ljEpH2USgU2L59O5YuXYpz587B3t4eS5YswahRoyqljK1Ro0bw9fWFr68vACA9PR07duzA1q1bsWTJErz55psIDg5Gr169XnssqrjHjx/j2LFjmhLklJQU1K9fH71798Znn30GNzc32NvbCx2TiLTc1atXoVAooKenB7FYrPmMrkwmg5OTExwcHNC9e3d06dIFdevW1ew3c+ZMNGjQQMDk2s3Y2Bg5OTlCxyjk+Wv5eXl52L17N7Zv3w5DQ0P4+vrCz88PAwYMgFgsFjglVVRx53fw4MEYPnx4ofP76NGjVz538/zrlfO6aA0aNHhlTj9/74vv8xARERFRbfXkyRP4+Pjg8uXLOHToENq2bSt0pBqBTVlEtcD58+eRmZmJAQMGCB2FiIiIiCooOzsbu3btwnfffYdTp07B2toan376Kd59910uSEJERFSJMjIysH//fhw4cABHjhxBQUEBevXqhUmTJsHb2xtdu3blByeIiIiIiIiIiIiIqETXr19HWloasrKykJqairS0NKSmpuLGjRsAgDp16sDCwkJTemxrawu5XA4rKysWoBERUYXp6+sjICAAI0eOxE8//YQvv/wSHTt2xPDhwxEcHAy5XC50RCIiAvD3339j1qxZCAsLw8CBAxEeHg6ZTCZ0LCIiokrh7OyM33//HYMGDYKjoyPCw8O5OKkOun37NiZOnIi9e/di/PjxWLFiBaRSKQDA3d0d48aNw8aNG2FkZISwsDAuJKjl3NzcoK+vj9jYWIwaNUroOEREREREtc7jx48BQPN7FRX2vFBVGz6zWZZrdp4vyJ6fn4+ff/65qiPVGLp6fp+f4+XLl+Pzzz+Hvr5+lWbUNUZGRsjNzRU6BhERAKBFixbw8/ODn58fAODGjRtITk5GcnIyjhw5gjVr1kAkEsHKykpTjtyvXz80bty4xOOmpaXhwYMH0NPTw+jRo7FlyxZs2rQJrVq1KjXTihUrULduXQQGBlbKY9RFEydOxLJly7BmzRosXLhQ6DhEZcb5W7nz99atW4iOjkZERATi4uLw4MEDtGvXDu7u7pg2bRo8PDxYWkVUSxQUFGDr1q2YN28erl27hlGjRmHPnj2wtrau0nGtra0xf/58zJ07FxEREfjiiy/g6OgIDw8PhISEoFOnTlU6Pj2jVqtx6tQpTQFyUlIS8vPzYWtrCx8fHyxduhR9+vRBnTp1hI5KRDokKysLFhYWcHBwQI8ePdC9e3fY2dmV+nrwo0ePNGWg9Krn791oK4VCAQDIzc3Fzp07sXXrVpiamuKdd97RvDZEuuvF87tr1y5s27at0Pktav4+/3rlvC5aUXOahchEREREVJvl5+dj6NChOHfuHBITE2FlZSV0pBqDhchEtUBkZCRMTEzg6OgodBQiIiIiKge1Wo2EhARs2bIFu3fvhkQiweDBg/HVV1+hf//+WvHBLyIiIl2nUqlw5MgRhIeHY//+/Th//jwaN24Mb29vbNmyBZ6enmjUqJHQMYmIiIiIiIiIiIhIy+Tl5SE9PR0ZGRk4d+4c0tPTNf+fl5cHAGjevDlsbGxgZWWFQYMGwdraGlZWVjA3Nxc4PRER1WQSiQQBAQEYPXo0du3ahS+++AKdO3eGr68v5syZgy5duggdkYioVnry5Am++uorLFu2DG3atEFkZCS8vb2FjkVERFTp2rRpgyNHjmDEiBFwcXHB9u3b4ePjI3QsKqPdu3dj0qRJkEqliI+Ph6ur6yv3WbFiBeLj47Fu3To0a9ZMgJRUHoaGhujduzeio6NZiExEREREJIDnBR5Pnz5F/fr1BU6jffLy8lC3bl1s3rxZ6Cj4/PPPcf78+VLvJ5FIoFKpUK9ePXTv3h1JSUnVkE637dq1S+gIFTq/vXr1QkJCAj755BOWIRchLy+PJUVEpLWaN29eqCD59u3bOH78OI4cOYK4uDhs2rQJarUaMpkMbm5ucHJygqurK1q3bl3oOIcOHYJEIoFSqQQAJCQkwMrKCl9++SU++OADiESiIsfPz8/H+vXrMX36dEil0qp9sFpMKpXigw8+wOrVq/H555/DwMBA6EhEpeL8feZ15m9eXh6Sk5M1hZcnT55E3bp14eTkhKCgILi5ucHe3r4K0xORNjp79iymTJmCI0eOIDAwELNnz0abNm2qNYNIJMKgQYMwaNAgxMbG4vPPP0e3bt0wbdo0zJs3jwV6VeDWrVtISkpCeHg4Dhw4gPv376Np06Z44403sGbNGgwcOBAtWrQQOiYR6bC+ffsiMzOz3Pvl5uby+34JjI2Nce7cOQwfPlzQHP/++2+p98nPzwcA3LlzB+vWrcPq1atr9e9yZXXmzBmdPb+GhoZo1aoVLly4gPbt2wP4X6lvaWXotVVJhcg5OTlCRCIiIiIiEoxCocDQoUNx7NgxxMfHQy6XCx2pRmEhMlEtEBkZCQ8PD0gknPJEREREuuDatWvYtm0b1q9fj3/++Qf29vZYuXIlRo4cyTfXiIiIKsGTJ08QHx+PiIgI7N+/Hzdv3oRMJsPAgQOxdu1auLi48MPJRERERERERERERAQAePDgAbKyspCamoq0tDTN3zMyMqBSqSCRSGBubg6ZTAYXFxdMnjwZMpkMnTt3hpmZmdDxiYioFhOJRHj77bcxYsQIREREYOHChejatSvc3NywePFi9OzZU+iIRES1QkFBAXbv3o0ZM2YgJycH8+fPx/Tp07nQLxER1WiGhobYt28fpk6dCl9fX6xevRqTJ08WOhaV4OHDh/j000+xYcMG+Pv7Y+3atcUu+mhoaIjjx4+jSZMm1ZySKqpfv35Yt26d0DGIiIiIiGql52sD5ObmshC5CDk5OTA2NtaUFQpp2bJlxd4mFosBAHp6enB3d8fbb7+NoUOH4sCBAyxELgNdPb9//PEHEhISkJeXB2Nj4+qKqjOez18iIl1gZmYGHx8f+Pj4AHhWknL8+HHExcUhOTkZmzdvhkKhgEwmg5OTE5ydneHh4YFDhw4VOo5CoYBCocDHH3+MHTt24IcffoCVldUr40VERODBgwcYM2ZMtTw+bfbee+9hwYIFiIqKwqBBg4SOQ1Qqzt//Kc/8zcrK0hQgR0VF4dGjR5rS+Xnz5sHd3R1169atpuREpE1UKhUWL16ML774AnZ2djh+/LhWlKK7u7ujf//+2LRpE2bNmoWdO3di69at6Nu3r9DRdNq///6LI0eOaH4mnDx5EnXr1oWTkxM+/fRTuLm5oVu3btDT0xM6KhEREREREREREdUyKpUK/v7+SExMRFRUlFa8Vl3TsB2VqIZ7/PgxkpKSsGHDBqGjEBEREVEJ8vPzsXfvXnz//feIi4uDqakp/P39ERgYCGtra6HjERER6bwrV65g//792L9/P3799VeoVCr07t0bH3/8MQYNGlTkB82IiIiIiIiIiIiIqPa4fv16ocLj53/PysoCABgYGMDS0hJyuRw+Pj4ICgqCXC6Hra0t6tWrJ3B6IiKi4unp6cHHxwcDBw5EREQEFi1ahF69esHb2xsLFiyAg4OD0BGJiGqsEydO4MMPP8SJEycwbtw4LF68mMWBNUxZFuYrKCh45f4vbivuWEXdp7Qxi9unvF4co7KOWdZxq3M8bRu/qgl1Xl8cvyzj1vTzUJtIJBJ89913sLGxwdSpU5GRkYFvvvkGIpFI6Gj0kpiYGAQGBkKhUGDfvn1lKiTgv2l0i6urK+bMmYPMzExYWloKHYeIiIiIqFYxMjIC8Kx0z8zMTOA02ufRo0ea50jb6OnpQSQSQa1Ww8HBAW+//TZGjx6Nxo0bCx2NKkFZzi/nb8m0ef4SEZXGyMgIbm5ucHNzA/Cs5D05ORlJSUk4fPgwduzYAYVCASMjIyiVylf2V6vVSElJQefOnbFw4ULMmDEDYrFYc/uWLVvQv39/tGrVqtoek7Zq2bIl3njjDWzdupWFyKQTOH//p6T5+/jxYxw7dgzh4eHYv38/Ll68CENDQ/Tt2xchISHw8vKCubm5QMmJSFvcuHEDo0ePxtGjR7F8+XJMmTJFq64ZEYlEmDBhAoYMGYKJEydqStyDg4O1Kqe2y8rKQnh4OCIiIpCcnIy8vDzIZDLN8+nu7o66desKHZOIqBBDQ0PcuHFD6BhaKycnBzY2NggNDRU0x9WrVxEREVHifQwMDJCfnw9TU1O888478PPzw6pVq7B79+5qSqmbunTpgl27dgmaoaLnd9u2bbhw4QLat2+vud/z9ypyc3PRqFGjKs2ti4p6P+fRo0cAAGNjYyEiERERERFVO5VKhYCAAISHhyMyMhLOzs5CR6qRWIhMVMPFx8dDoVDAy8tL6ChEREREVITMzExs3LgRP/zwA+7duwcvLy/s3r0bAwcOhL6+vtDxiIiIdFpmZiZ+/vln7NmzBydOnIChoSE8PT2xceNGvPnmm/zgOREREREREREREVEto1AocOXKlUKFx6mpqThz5gxyc3MBACYmJpDJZLC1tYWbmxtsbW0hl8vRtm1bLmhBREQ67Xkxso+PD6KiorBw4UL07NkTQ4YMweLFi2FtbS10RCKiGuP+/fsIDg7Ghg0b4OzsjD/++ANdu3YVOhZVkZcLj4sqQH75tqLu93IBbHGlsMUdo6R9yqMs2apCWcqla/L4VU2o8/rieGXFMuSaZ9q0aTAxMcH48eNx584d/PDDDzAwMBA6FgF48uQJZs2ahTVr1mDYsGFYt24dr62toXr06AGpVIrExEQWIhMRERERVdD9+/fx448/okOHDmjfvj3atWtXprUAni+6fffuXVhYWFR1TJ1z7949rVuYXCKRQKVSoXv37ggICICfnx+aNm0qdCyqJOU5v5y/JdPG+UtEVFHGxsYYMGAABgwYAOBZ0efu3bsxduzYYvdRKBQAgNmzZ2Pr1q3YsmULunXrhocPH+LgwYPYtGlTdUTXCf7+/pg0aVKR5StE2oTz91Uvzt/Lly8jIiICcXFxSEpKglKphJ2dHUaMGAE3Nze4uLhwzTwi0vjtt98wePBgGBkZ4ejRo7CzsxM6UrGaNGmC3bt3Y82aNZg5cyaSk5MRFhbGcrhi3LlzB7/++ivi4uJw4MABXLt2Daampujbty9WrVqFAQMGoFWrVkLHJCIqkZGRkaYMlF716NEjrf45qK+vD4VCAUNDQ/j6+sLPzw8DBgyAWCwGAKxatUrghPQ6Xjy/gwcPxvDhwwud33379r0yf5+/3vTo0SO+b1GEoub08+eQr9URERERUW2gVCoREBCAvXv3Yv/+/XBxcRE6Uo3FQmSiGi4mJgZ2dnYwMzMTOgoRERER/T+VSoXExESsWrUKBw4cQLNmzfDuu+9i4sSJaNu2rdDxiIiIdFpqaqqmBPnMmTNo0qQJ3nrrLcybNw/9+/dHnTp1hI5IRERERERERERERFUsOzsbf//99yvFxxkZGVCpVACA5s2bQy6Xw97eHgEBAZDJZOjYsSOaNWsmcHoiIqKq5+XlBS8vL+zfvx/BwcHo1KkTxowZg/nz53MBIiKi11BQUICtW7di5syZEIlE2Lx5M/z9/Wt80SqV7uXy2YKCgioppK2q41aH59lr6/ivq7znvbq/RnT9+aXXFxAQgJYtW2LIkCEYOHAg9uzZA0NDwyLvm5ubW+xtVHmOHj2KsWPH4s6dO9iyZQtGjx4tdCSqQvr6+ujduzcSExMxfvx4oeMQEREREekkY2NjzJo1C0+fPgUAiMVitGzZEjY2NrCxsUH79u01ZcmtW7eGSCQCAJibm6Nu3bo4f/48evbsKeRD0Ernz5+HpaWl0DEAPCvKtba2RkBAAN555x2u+1DDVOT8cv6WTJvmLxFRZZNKpVAoFBCLxZrrjoujVquRkZEBBwcHzJw5Ew4ODlAoFPD29q6mtNrvzTffRH5+Pg4fPqwpnSbSRocOHeL8fcnz+Wtubo7s7Gw0b94cnp6e+PHHH+Hu7o7GjRsLHZGItFBUVBSGDRuGvn374qefftLqQsUXffDBB3B0dISPjw9cXV1uNJ5XAAAgAElEQVQRGRmJpk2bCh1LcEqlEr/99hsiIiIQFxeHkydPQiwWo0uXLhg3bhx8fHxgZ2eneT2UiKg6qdXqCn3/MTY2xsOHD6sgUc3w8OFDrStJFYvFUKvVqFOnDnx9fTFq1Ch4eHhAX19f6GhUCcpzfosqNH/+703O66IVNadZiExEREREtYVKpcK7776Lffv2Yf/+/XBzcxM6Uo3GQmSiGi4mJgbDhg0TOgYRERERAbh69Sr++9//Yu3atbh27Rr69euHnTt3wtfXFxIJfz0jIiKqqNTUVISFhWHXrl04d+4cmjRpAm9vbyxatAheXl68WImIiIiIiIiIiIiohrp+/XqhwuPnf8/KygIAGBgYwNLSEnK5HD4+PggKCoJcLoeNjQ3q168vcHoiIiLhDRo0CAMHDsTPP/+MWbNmwcLCAmPHjsWiRYtgZmYmdDwiIp1y5swZTJkyBceOHcOoUaPwzTffcNHPWqC0Ulkhiol1uRSZiGq2/v3748iRI/D09NQsHGtqalroPps3b8ZPP/2E2NhYgVLWfHl5eZg/fz5CQkLg4eGBX3/9FS1atBA6FlUDV1dXrFmzRugYREREREQ6SyKRwMbGBqdPnwbwbKG8y5cv4/Lly4iPj0dBQYGmLE9fXx/m5ubo2LEjrK2t0ahRI8TFxWHgwIEwMTER8mFonYyMDIwdO1boGACAPXv28HfkGqwi51ckEsHCwgLnz5+volS6LSMjAwMHDoRKpYJYLBY6DhFRpUtKSoKenl6Z7qtUKgEAy5Ytg4mJCSwtLdGkSZOqjKdTzMzMIJfLkZiYyEJk0mqJiYno3Lkz5+8LzMzMYGtrC1NTU6xcuRKdO3cu8/dGIqqdtm/fjjFjxmDkyJHYtGmTzq2v2b17d821Lc7OzoiJiUG7du2EjlXtsrKyEBcXh7i4OERFReHRo0eQyWRwc3NDUFAQPD09dabomohqtr1792LChAlo164dOnbsCEtLS1haWqJ9+/awtLQs9ntV27ZtcenSJb62WYTn739p088/iUQCT09PjB49GoMGDeJnw2uY8p7fJk2a4Pbt24W2tWnTBiKRCFlZWejcuXNVxtVJWVlZr8zpW7duAQBfAyEiIiKiGk2lUmHMmDH45ZdfsH//fvTv31/oSDWebr0jQETlcvHiRVy4cAHu7u5CRyEiIiKqtVQqFRITE7Fhwwbs2bMHZmZmCAgIwPvvv69Vb/ASERHpmuclyNu3b8f58+fRunVr+Pr6YvXq1ejbt6/OXQxNREREREREREREREVTKBS4cOECzp07h/T0dKSmpiIjIwPp6el48uQJAMDU1BS2trawsrLCgAEDNH9v06YNF9whIiIqhUgkgp+fHwYPHozNmzdj3rx5+OmnnzBlyhTMnj2bixUREZXi8ePHWLRoEZYvX44uXbrg2LFj6NGjh9CxSMe8XGJcmYXGz4/1/PfjF8d4cfwXt738u/TL+xY1xsvHKmns8hy7rONU9fjleR6LO35pxyjLYyrqtpfPW3H3L2mcovYp7bkrLWdZH1tR/1/R54K0X8eOHZGcnAwPDw+88cYbiImJQevWrQEAW7duRWBgIAoKCnDkyBE4OTkJnLbmOXPmDAICAnDx4kWEhoZiwoQJQkeiauTq6orZs2cjIyMDVlZWQschIiIiItJJPXv2RGpqKhQKRaHtzwvwnlMoFPj777+RlZWFffv2QU9PD0ePHq3OqDrh6dOnuHjxotb8jsIy5JqtoufXysoK6enplZxG9z2fv6tWrcK6detgaWkJe3t7zR8HBwfUqVNH6JhERK8lLi7ulX/niUQiiMViqNVqqFQqzXY9PT00bNgQpqamuHHjBgwMDPD333/DwsKiumNrrX79+iEhIUHoGEQl+vXXX+Hq6ip0DK3Tv39/JCcno0uXLkJHISItt3//fgQEBGDatGn4+uuvdfbzXDKZTFOK7OHhgeTkZDRt2lToWFXq3r17SEhI0BQgX758GYaGhujbty9CQkLg6emJNm3aCB2TiOgV3bp1w71793Dv3j2cPHkSYrEYSqVScz1pw4YNYWFhgU6dOmlKki0tLdG6dWs8ffpU64p/tcE///yD/Px8dOjQQegokEql2LhxI4YOHQoTExOh41Alq+j5bd++Pe7fv4979+6hcePGAIB69eqhVatWOH/+fFXF1WkZGRnw9PQstO38+fNo1KiR5jkkIiIiIqppVCoVAgICsHfvXoSHh6Nfv35CR6oV2ApCVINFR0dDKpWid+/eQkchIiIiqnWuXbuGbdu2ITQ0FFevXkW/fv2wfft2DB48GPr6+kLHIyIi0jlqtRpHjx5FWFgYfv75Z1y7dg1t27bFoEGD8P3338PJyUlnL4ImIiIiIiIiIiIiIuDJkydIT0/XlB6np6cjLS0Nf//9NxQKBUQiEdq2bQtra2v069cPkyZNgo2NDWxsbNCoUSOh4xMREek8fX19TJgwAaNGjcK3336LJUuW4Pvvv8eMGTPw0UcfcbFiIqIihIeHY8qUKXj8+DFCQkLwwQcfQCQSCR2LdFRZymfL68Ui3KKKgl/+/+LKaEvKU9z9ixq7pGOXdu1XcfetjvHL+zyWdvziSoDLepyiipRLOk/F3V7acSt67sv6+J/fVlRZdHmfi7LkJe3Rrl07HD58GF5eXujVqxeioqKQkZGBsWPHoqCgABKJBHPnzkV8fLzQUWsMpVKJ5cuXY86cOXBxcUF4eDjMzc2FjkXVrHv37jA2NkZiYqLWlI0REREREekaOzs7qNXqMt1XJBJBrVajT58+sLOzw88//8zF2l/y+++/Q6VSwd7eXugoRMWyt7dHaGio0DG0zvP5Gx4ejps3b+LkyZM4efIkdu/ejX///Rf16tVD586d0a1bN82fjh07wsDAQOjoRERlcunSJdy4cQMSiQSNGjVCy5Yt0bJlS7Rq1QrNmjVD8+bNC/1p2rQpJBIJ8vPzIZVKMXfuXJYhv8TR0RGhoaFQKBRce4u0Un5+Ps6ePYtZs2YJHUXrcP4SUVn89ttvGDlyJAIDAxESEiJ0nNdmZmaG2NhYODs7w93dHUlJSWjYsKHQsSqNSqXCiRMncPDgQURFReGPP/6ASCSCo6Mjxo8fDw8PD9jb20MsFgsdlYioRG3btoWxsTFycnKgVqtfeQ8nOzsbKSkpOHPmDMRiMfLz8wtdZzpp0iSEhYXByMiouqNrrYyMDADQikJkExMTjBs3TugYVEUqen6tra0BPPtafbF/x8rKSvP1S/9TUFCAzMxMfPDBB4W2Z2RkaJ5LIiIiIqKaRqVSwd/fH/v27UNERARcXV2FjlRrsBCZqAaLiYmBq6srF58iIiIiqiZqtRoJCQnYsGEDfvnlFzRp0gRjxozBhAkTIJPJhI5HRESkc1QqFY4dO4awsDDs2rULN2/ehK2tLUaPHo2BAwfC2dlZ6IhEREREREREREREVE4PHz5EZmYmUlNTkZaWhqysLKSmpiIjIwMqlQoSiQTm5uawtbXFW2+9BZlMBltbW9jZ2UEqlQodn4iIqMaTSqUICgrCuHHj8PXXX2P+/PkIDQ1FcHAwAgMDubARERGA9PR0TJo0CUlJSRg/fjy+/PJLNGrUSOhYpONKKnqtqOKKcF8ukX3dMYo6VmklvS/fVlQZblnGfHncqhi/pGMVt8/rPL6SjvtyrooqLl9xxdiljV9akXFZH39p9yvLuSfd0KxZMyQmJmquBc3NzdWcX6VSiYSEBBw5cgROTk6VPnZ+fj4yMzORkZGBrKws3LlzB7m5uXj8+DEeP34MExMTSKVSSKVStGjRAh06dECHDh3QunXrSs9SHVJTUzFmzBikpaVh0aJFmDlzJkQikdCxSAASiQROTk5ITEzExIkThY5DRERERKQzHjx4gFOnTuHUqVOIjY2FSqUqdR+xWAxTU1MsW7YMAQEBOHbsGFavXo3z589rxQLy2iI+Ph7m5uZch4G0mqurK4KDgzl/X/J8/g4cOLDQdpVKhfT0dKSkpCAlJQVpaWnYsWMHHjx4AIlEgg4dOsDe3l7zp1u3bqhfv75Aj4KIqHhmZma4desWzMzMyrVfZmYmlEoly0SKYGVlBaVSiaysLFhZWQma5enTp8jNzUXjxo0FzUFVo6Lnl/O3eNo0f4lIO2VmZsLb2xteXl5Yu3at0HEqTZMmTRAZGQlnZ2eMGDECBw8e1OnrLW7duoXo6GgcPHgQsbGxuHfvHtq0aQMvLy/MmjUL/fr1g7GxsdAxiYjKzd7eHr/++muJ17wqlUoolUoAgEgkQp06dWBgYAAnJyeWIb/k1KlTMDc3588E0lqtWrWCoaHhK4XIHTt2xK+//ipcMC2VkZGB3NxcdOzY8ZXt/B2fiIiIiGoihUKBESNGICYmhmXIAmAhMlENpVKpkJiYiPnz5wsdhYiIiKjGu379OjZs2ICNGzfi5s2bcHd3x86dO+Hj4wN9fX2h4xEREemUf//9F9HR0dizZw/Cw8ORnZ2N7t27Y9q0aRgyZAg/MExERERERERERESkIx48ePBK6XFaWhr++ecfFBQUwMDAAJaWlpDL5fDx8UFQUBDkcjnkcjnq1q0rdHwiIqJar3Hjxli6dCkmT56M+fPnY/LkyVi7di1CQkLg7u4udDwiIkE8ffoUS5YswdKlSyGXy/Hbb7/BwcFB6FhUA5RUTluVY744lrYcqzgvHrukgufqVlVjF3fckp4HIVT03L/4Nf46X+va8BxQxZmYmGDmzJkYNmyYpoz7OYlEggULFiAmJua1x3n48CGSkpKQmJiIxMREnD17FkqlEnp6emjZsiWaNm2qKUA2NDREVlaWpiD56tWrePDgAQDAyMgIjo6OcHV1haurK7p37w6xWPza+aqKWq3GmjVrEBQUBDs7O5w6dYqLlxFcXV0REhJSpT+ziYiIiIh02fXr1zXlx8///PPPPwCApk2bokuXLhCJRFCr1UXur6+vD5FIhM8++wyfffaZ5voXBwcHGBsbIzExkZ+PfEFCQgLc3NyEjkFUIs7fohU3f8ViseYawICAAM3269eva0qSU1JSsHjxYty9e7fIkmQ7OztIpdLqfDhERK+oV68e6tWrV+79MjIyIBKJYGlpWQWpdFuHDh2gp6enFWUrd+7cQbt27eDm5obRo0fjrbfegqGhoaCZqPJU9Pxy/hZPm+YvEWmfvLw8DB8+HBYWFvjvf/+r1ddRVIRMJsP+/fvh7OyML774AnPmzBE6UpmpVCqcPn0acXFxCA8Px7FjxyASidCzZ0/MnDkTbm5u6NatG68dICKdplAo0K5dOxw9ehRPnz4t8b5isRgqlQq+vr745ptvMHv2bBw+fLiakuqOhIQElkWRVtPT04O1tTVOnz5daLuLiwtWrVqFu3fvokmTJgKl0z4JCQkwMjKCnZ2dZltBQQH+/PNPfj6UiIiIiGqc/Px8jBgxArGxsYiIiEDfvn2FjlTrsBCZqIY6fvw4Hjx4AA8PD6GjEBEREdVYiYmJWLduHfbu3YuGDRsiMDAQ48ePh0wmEzoaERGRTlEoFIiJicH27duxb98+PHnyBI6OjpgzZw6GDh2KNm3aCB2RiIiIiIiIiIiIiIpx/fr1V0qP//rrL9y6dQsA0KBBA1haWsLW1hYTJkyATCaDra0tbGxsIBKJBE5PREREpTE3N8d//vMfzJgxA7NmzYKHhwd8fHwQEhLCBZ+JqFY5fPgw3n//fVy6dAkLFizAjBkzatzifVQzlKVctjLLlqu6uPlFz8epzjG1kbY8D0KPT7ovOjoaw4cPf6UMGQCUSiViY2Px+++/o0ePHuU+dn5+Pg4cOIAff/wRBw8ehFKpRKdOneDq6orZs2ejQ4cO6NChQ5nKDO7cuYOMjAykpqYiKSkJq1atwqxZs9C0aVO88847CAgIKLRQmDb4559/MHbsWBw7dgyzZ8/GnDlz+O8WAvCsEPnTTz9FWloa5HK50HGIiIiIiAT1cjlnSkoKbty4AQBo3rw57O3tERAQAHt7e8jlcs36AdbW1sjIyCh0rOeL6Lu7uyM0NPSVz0NKJBK4uLggIiIC77//fvU8QC137949HD9+HJMmTRI6ClGJOH9fVZH526JFC7Ro0QI+Pj6abS9/H/7yyy9x+/ZtAP/7Pvz8T+/evdG4ceNKfyxERJUtMzMTrVq1Qv369YWOonWkUilatmyJCxcuCB0FwLP3omJiYhAdHQ0DAwO89dZbGDVqFLy8vGBgYCB0PHpNFTm/nL/F07b5S0Ta5ZNPPkFmZib++OMP1KlTR+g4VaJ79+746quvMH36dPTu3Rv9+/cXOlKxbt++jUOHDiE8PBwRERF48OAB2rVrB3d3d0ybNg2enp4wNjYWOiYRUYUoFAqcP3++0GuKJ0+eRF5eXqn7ikQi2NraYt26dXBycgLw7DqqDz74AE+fPq2xP8PKKy8vD8eOHcOYMWOEjkJUIhcXF8TExBTa1rdvX+jp6SEpKQlDhgwRKJn2SUhIgIuLC/T19TXb0tLScPPmTbi4uAiYjIiIiIiocr1YhnzgwAH+e1cgLEQmqqFiYmLQqlUrWFtbCx2FiIiIqEZ59OgRtm/fjm+//RZ//fUX7O3t8e2338Lf379Mi+EQERHRM2q1GkeOHMFPP/2EsLAw3L9/H46OjliyZAmGDBmCFi1aCB2RiIiIiIiIiIiIiP6fUqnE5cuXC5Uep6am4syZM8jNzQUAmJiYwNbWFnK5HG5ubpq/t2vXDnp6egI/AiIiInpdtra22LdvH+Lj4zF9+nR06tQJU6dOxZw5c9CwYUOh4xERVZns7GzMmzcP3377Lby9vXHw4MFXyiyISlNQUFCoPLaqimQrctyy/s5e1qLlsirqOSlpnLI+trLer7zjl0VJ+5b03JTnsZeW73Ue/+t8Tb78+Kri+S1tfxY065bo6Gj4+PhApVJBrVYXeR+JRIK5c+ciKiqqzMe9c+cOVq5cie+++w7Z2dno378/Nm3aBG9vbzRp0qRCWU1NTWFqagpnZ2dN6U1aWhp2796Nbdu2YeXKlejSpQtmzpyJESNGQCIR7qP7BQUF2LhxIz755BO0a9cOx48f17qyZhKWnZ0dGjZsiMTERBYiExEREVGtoVKpcOnSJaSmpmoWyD9+/Dju3LkD4H+lmxMmTIC9vT169uwJMzOzYo/Xq1cv/P3331AqlQCeLaJvY2OD0NBQ9OnTp9j93n77bYwZMwa3bt1C06ZNK/dB6qAdO3ZAX1+/UDkqkbbi/C2ssuZvWUqS169fj5s3bwJ4tSS5V69eMDU1fa0MRESV7f79+yxwL0Hjxo3x4MEDoWNoPH+P6unTp/jll18QFhaG+vXrw9fXF8OHD4e3t7eg7/vQ6ynv+eX8LZm2zV8i0g5RUVEIDQ1FWFgYOnToIHScKvXhhx/i0KFDGDt2LM6dOwdDQ0OhIwF49trn6dOnNQXIJ0+eRJ06deDs7IygoCC4ubnB3t5e6JhEROVWVPnxH3/8gadPn8LIyAidO3fWvLdjZmYGb2/vIo+jr6+PevXqYeHChZg6dSrEYrHmtn79+uHJkyc4cuQI+vXrV10PTaslJSUhLy+PzwdpPVdXV6xYsaLQ+zYNGjSAnZ0dYmNjWYj8/5RKJX799VcEBwcX2p6QkIAGDRqgW7duAiUjIiIiIqpc+fn5GD58OBITExEbGwtHR0ehI9VafHedqIaKjY2Fl5eX0DGIiIiIaoyMjAxs3rwZ69evR15eHnx8fLB+/Xr+QktERFROqampCAsLw9atW5GVlQVbW1tMnToVo0ePhqWlpdDxiIiIiIiIiIiIiGo1hUKBK1euFCo9TktLQ1paGv79918AzxYWlMvlkMvl8PPzg1wuR6dOnbjYIxERUS3Rv39/nD59Gtu2bcOnn36KH374AXPnzsWUKVO4ACQR1ThhYWGYOnUqRCIRNm/ejICAAKEjkZZ6sQz2+d9fLmZ9XhBb2m0vbivrWMXtU1IJ7YtZ9PT0SnwMZSnhLelYLz6+F4/18nNSnnFefMwvjldcAe/rjF/c81jc2MXdVtz/vzx2Scct7nkoKl9R+V/cr7ivyfKUFxd17sv6/Ba17eWxy/sck244e/YsBg8eDKVSWeJ5UyqViImJwR9//IHu3buXeMybN29i6dKl2LhxI6RSKaZPn453330XLVu2rOz4AABbW1vMnTsXc+fOxbFjxxAaGoqxY8di3rx5+OyzzzB27Nhq//3oxo0bGD9+PKKjo/HJJ59g4cKFMDAwqNYMpP3EYjH69OmDxMRETJ06Veg4RERERESVrqgF8k+fPo3Hjx9DIpGgQ4cOsLe3R3BwMOzt7WFnZwepVFquMezs7LBt2zZIJBIYGRlh2bJlCAwMhEgkKnE/X19fTJ48GTt27MC0adNe52HWCFu3bsWQIUO0pjyGqCScv4VV5fwtrSQ5LS0NYWFhWLBgAYBXS5IdHBzQrFmzSs9FRFRWubm5MDIyEjqG1jIyMsKjR4+EjlEkhUIBAHj8+DF27dqFbdu2oUGDBhgxYgT8/f3h5OQkcEJ6HWU5v5y/JdPm+UtEwnj69CmmTZuG4cOHY9iwYULHqRYbNmyAlZUVFi5ciK+++kqwHLdu3UJ0dDQiIiIQGxuL7OxsyGQyuLm5ISgoCF5eXvyZRkQ6JTc3F6dPn9a8/peamooTJ04gPz8fxsbG6NSpk6b82N7eHjY2NoXekykoKHjl36sSiQRqtRpjx47Fl19+iSZNmrwybtu2bdGtWzds376dBcD/76effkKPHj3QunVroaMQleiNN96ARCLBoUOHMHz4cM32IUOGYPny5Vi1alWVXT+rS9erR0VF4f79+3jrrbcKbU9MTETfvn0LlcQTEREREemqp0+fYujQoUhOTkZ0dDR69eoldKRajavNENVAOTk5OHHiBD766COhoxARERHpNJVKhcjISKxevRrx8fGwsLDAZ599hnHjxqFx48ZCxyMiItIZly5dwt69e/Hjjz/i1KlTaN26NXx9fREQEAB7e3uh4xERERERERERERHVOjk5OUhPT0dqairS09Nx7tw5pKWl4eLFi1CpVNDX14eFhQVsbW3h6emJjz/+GNbW1rC2tkb9+vWFjk9EREQCE4lECAgIwJAhQxASEoKgoCB89913WL58OQYMGCB0PCKi15aVlYXJkycjJiYGo0ePxsqVK9GoUSOhY5EWK+vCNiXdrzKOUdb7FlXIXNHxynqssmyvaI6ibqtIrvJmf53bShv7dZ7H172tol+LpR2rouepMuYNaZeOHTvi6NGjCAkJwY4dOyAWizWLkL9MIpFg/vz5iIiIKPJ2lUqFtWvXYu7cuTA0NMSXX36J8ePHV+trmI6OjnB0dMSCBQuwdOlSTJkyBWvXrkVoaCgcHR2rJUNYWBgmTpwIExMTJCYmwtnZuVrGJd3Ut29ffPHFF1Cr1aUWthERERERabPc3FxkZGQgNTW1UAFyXl4eDAwMYGlpCXt7e/j5+cHe3h7du3dH3bp1X3tcOzs76OnpYerUqZg3bx4aNmxYpv3q1auHoUOH4j//+Q8+/PBD6OnpvXYWXZWamorjx49j4cKFQkchKhPO3/8RYv4WVZKcnZ2Ns2fPar73h4WFYeHChSgoKHilJFkul0Mmk1Vb3tpi165dQkfQer1790arVq2EjkHV7NGjRyyfK4GRkRGuXLmCsLAwQXPcu3evxNvz8/MBAA8fPsTmzZuxYcMGmJubQyqVVkc8nfbo0SOdPb8mJiZl/v2uNjIyMkJOTo7QMYhIiyxZsgQ3btxAQkKC0FGqTePGjbFo0SJ8+OGHGD16NDp37lwt4yqVSvz222+IiIhAXFwcTp48ibp168LJyQmfffYZfHx8YGtrWy1ZiIheV05ODv78889C7+ukp6dDrVajYcOGkMvlhcqPbW1tS309Vk9PD127dsXhw4chEomgVqvRu3dvrF27Fh07dixxX39/f8ybNw+rVq2q9Z+bfvLkCfbs2YMvv/xS6ChEpTIyMkLPnj2xf//+QoXIAQEBmDNnDg4ePPhKCXBttHXrVvTp06fQeyRPnjxBfHw85zoRERER1Qi5ubkYPHgwUlJSEBMTgx49eggdqdbTK+AnfolqnD179mD48OG4ffs2F1whIiIiqoAbN25gy5YtWLt2La5du4Z+/frhww8/xMCBA2v1h5OIiIjK4969e/j555+xZcsWHD16FCYmJhg2bBj8/f3h5OTEn6lERERERERERERE1SAnJwcXLlxAamoq0tLSNP+9ePEi1Gq1ZgHY54v+2draQi6Xw9bWFvXq1RM6PhEREemICxcuIDg4GGFhYXBzc8PKlSshl8uFjkVEVG5KpRLLly/HggULYGlpifXr11dbkSFpBz8/PwAQfIFeqpn09PRY4KtFON+1w99//41Vq1Zh/fr1KCgoKLYY+cSJE+jevXuhbadOnUJgYCBSU1MxY8YMBAcHa8WihBkZGZg6dSri4+MRGBiIFStWVFn5we3btzFx4kTs3bsX48ePx4oVK7gYP5Xq1KlT6NatG06fPo0uXboIHYeIiIiI8KxQcMSIEULH0HoxMTE4deoUTp48iVOnTiEzMxNqtRomJibo1q0b7OzsYGdnh27duqF9+/YQi8VVkiM3NxdXrlyBjY1Nufc9c+YM7OzsEBERgQEDBlRBOt3g7++PlJQUnD17FiKRSOg4r4Xzt2xqwuuinL/PaPP8ffjwIf76668iy1RMTExga2tbqCi5LGUqVDw+d6XbuXNnoTIO0i0XLlyAhYVFub/XvfPOO3j69Cn27NlTRcl025AhQ5CVlYUzZ84IHYWqSKdOnfDXX38JHaPCjI2NsWPHDnh7ewsdResMGTIEderUwfbt24WOQkRa4MaNG5DJZFi8eDE++eQToeNUK7VajZ49e6JJkyY4ePBglY1z5coVHDx4EJGRkYiPj0dubi5sbPPe7J8AACAASURBVGzg7e0NLy8v9OnTB3Xr1q2y8YmIKkN1vl43Y8YMLF++HM2bN8fq1asxbNiwMu13+/ZttGzZEj/++CNGjhxZobFrim3btuG9997DtWvXYGpqKnSc1+Ln54fdu3cLHUOrDRs2TOevnw4NDcXMmTNx8+bNQtfourm5wdjYuNa/PpednY0WLVpg9erVGDdunGb7Tz/9hDFjxuDq1ato2rSpgAmJiIiIiF7PgwcP8OabbyIrKwtRUVHo2rWr0JEIgEToAERU+WJiYtC9e3eWIRMRERGVQ0FBARISErBu3Trs27cPjRs3RmBgIN5//32Ym5sLHY+IiEgnZGdnY//+/QgLC0NUVBSkUikGDRqEoKAgeHl5QV9fX+iIRERERERERERERDXSw4cPNYXH586dw9mzZ3Hu3DlcuXIFACCVSmFjYwO5XI73338ftra2sLW1Rdu2bbVuYUIiIiLSPe3bt8euXbuQkJCA6dOnw87ODpMmTcKCBQvQsGFDoeMREZXJ6dOnERgYiLS0NMyZMwczZ87ktS5EVGmeL9LGUmSiwiwsLLB69WrMnj0b3333HUJCQvD06VMolUrNffT19bFo0SLs27dPs23t2rX45JNP4OjoiD///BNWVlZCxC+SlZUVYmNjsXPnTkybNg2HDh3Czp07YWdnV6nj7N69G5MnT0b9+vURHx8PV1fXSj0+1VxdunRBo0aNkJiYyEJkIiIiItIpHh4emgXyvby8BCu0NDQ0rFAZMvDs3+Pe3t5YtGhRrS1UzcrKwo4dO/DDDz/wmiXSKZy/2j9/GzRoAGdnZzg7O2u25eTk4M8//9QUrsTFxeHbb7+FWq1GgwYN0LFjx0KlKzY2Nlr52Iio+g0aNAiXL19Gz5494ezsjJ49e2qK70oilUpx//79akqpe3Jzc9GjRw+cPn1a0BxXr15F69atS72fgYEB8vPz0bRpU4wYMQKpqamIj4+vhoS6y8rKCn/++aegGSp6fi9duoR///2XZcjFyM3NLfV7IBHVHsuXL0fDhg0xefJkoaNUO5FIhEWLFsHb2xsnTpyAg4NDpRxXqVTi2LFjiIyMRGRkJP78809IpVL069cPX3/9Nby8vNC2bdtKGYuIqCpkZ2fj7NmzhcqPz507h4KCAjRv3hz29vbw8/ODvb095HI5ZDJZpY7v5OQEqVSKoKAg1K9fv8z7mZmZ4a233sKKFStqdSFyQUEBVqxYgcGDB+t8GTLVHm+//TY+/vhj7NmzB2PGjNFsHz9+PEaNGoULFy6gffv2AiYUVmhoKAwMDODn51do+9atW+Hl5cUyZCIiIiLSaTdv3oSnpyeys7ORlJSEDh06CB2J/h8LkYlqoNjYWIwaNUroGEREREQ6IS8vD7t27UJISAj++usv2NvbY+3atfD390e9evWEjkdERKT18vLyEBsbi7CwMPz8889QqVRwd3fH999/j6FDh0IqlQodkYiIiIiIiIiIiKjGePjwITIzM5GamqopQE5LS8M///yDgoICGBgYwNLSEnK5HO+99x7kcjlsbW25UB8RERFVi379+uHUqVPYtm0bZs6ciW3btmHu3LmYMmUKJBJ+fIWItJNCocCKFSswd+5cdO/eHSdPnqxwmQURUXFYgkxUsmbNmmH+/Pn4+OOPsXnzZixatAjZ2dlQq9VQKBQIDw/HmTNnYGFhgbFjx2Lv3r2YM2cO5syZo7Wve44YMQJvvPEGRo0ahd69e2PlypV4//33X/u4Dx8+xKeffooNGzbA398fa9euhZGRUSUkptpCJBKhT58+OHz4MD766COh4xARERERldnNmzdrxMLMwcHBcHJyQmxsLNzd3YWOU+0WL16MNm3aYMSIEUJHISo3zl/dm7/GxsavlCTn5ubi9OnTmusvU1JS8N133yE/Px/Gxsbo1KkTS5KJCObm5khPT0diYiKSk5OhUCg02/v06YNevXqhV69e6NKlC/T19TX7GRkZ4dGjR0LF1no5OTla/56GRCKBUqmEsbEx3n77bfj7+8PJyQl6enqvFMiQ7inp/E6fPh3Hjx8XOqLW0oX5W9Pwe07pPv74Yzg6Ogodo9a5f/8+NmzYgPnz59fadTq9vLzg4OCAJUuWYM+ePRU+zt27d5GYmIjw8HBERETgwYMHkMlkcHNzw+LFi+Hu7o66detWYnIiospx/fr1Qq+tpaSkIC0tDQBeKT92cHBAs2bNqjyTr68vfH19K7RvcHAw7O3tER0dDU9Pz0pOphsOHDiAU6dOYePGjUJHISqzRo0a4c0338SWLVsKFSIPGzYMc+fOxbJly7Bp0yYBEwrn8ePHWLlyJaZOnYoGDRpott+4cQNxcXH473//K2A6IiIiIqLXc/HiRXh4eEAsFiM5ORmtW7cWOhK9gCvKENUwFy5cQFZWVq28YJaIiIioPC5duoS1a9di06ZN+PfffzFy5Ehs2bIFXbt2FToaERGR1lMqlYiNjcX27duxd+9ePHnyBG5ubggNDYWvry+MjY2FjkhERERERERERESk00orPq5Tpw4sLCwgl8vh7+/P4mMiIiLSGiKRCAEBAfDx8cHChQsxc+ZM/Pjjj1i3bh169uwpdDwiokKOHj2KcePG4dKlS5rvWfydioiISDjGxsaYNm0axo37P/buPK6m/PEf+Ks9tJJo0aaFinCtZRnpY8k+UoqKEMnaiGFM9m1kyRLZyUTCjMGMkZEt00yylzRkGcxgRqvW2+33x/y6XymE6tTt9Xw8zkPOucvrVO/bXc55v8Zhx44dWLlyJf7++29IJBLMnTsXz58/x6NHjxAdHY2ePXsKHfe99PT0EB0djYULF8LPzw8PHz7E0qVLIScn91G3d+rUKYwdOxaFhYU4evQoBg0aVMmJqa5wcHDA6tWrhY5BRERERPRBZKEMGQDs7e0xcOBATJs2DdeuXYOysrLQkapNXFwc9uzZg2+//RaKipz6jmofjl/ZGL9qamplSpILCwuRkpIiLXBJSEjA1q1bkZeXBzU1NdjZ2UEkEkmP0+zYsWOd+vkT1UWmpqZQUlJCYWGhtAwZAB49eoTIyEhERkZCLBZDQUEBtra26NGjB0QiEfLy8liI/A7Z2dk1slBVUVERRUVFqFevHoYOHQo3Nzf07du3VNk11V4V/fmy0Pzdaur4lWWHDh0SOkKNN3z4cBYiCyA0NBQqKiqYMGGC0FEENXfuXAwbNgwpKSmwtLSs8PUSExNx/PhxHDt2DL/++ivk5eXRqVMnzJ49G05OThCJRFWYmojowz19+rTUe2YJCQn466+/AJQtP+7UqRN0dXUFTvzh2rZtiz59+mDJkiV1thB52bJl6N+/P/8OUa0zbtw49O/fH9evX4ednR0AQEFBAbNnz4afnx+CgoJgZGQkcMrqFxYWhpycHEyfPr3U+g0bNqBhw4Y89piIiIiIaq3bt2+jd+/e0NXVxcmTJ9G4cWOhI9EbavdRZURUxqlTp6Curo7OnTsLHYWIiIioRkpISEBISAj2798PHR0dTJ06Ff7+/nzBSkREVAGJiYnYvXs3vv32W/z999/o0qULli1bBldX11p5EBoRERERERERERGR0NLT03Hv3j0WHxMREZHM0dbWxtq1azFhwgT4+/vD3t4e48ePx7Jly9CwYUOh4xFRHZeTk4NFixYhODgY//vf//DTTz/B2NhY6FhERET0/zVo0ABTp06Fn58f9u/fjwULFuDHH3+Evr4+Lly48EGTyQpNQUEBixYtgoWFBcaOHYsnT55g+/btHzSJfk5ODubMmYMNGzbAxcUFmzdvRqNGjaowNck6e3t7zJo1C/fu3UPz5s2FjkNEREREVOds3LgR1tbWWLt2LWbPni10nGohkUgwbdo0dOvWDW5ubkLHIfpoHL+yOX6VlJRgY2MDGxsbeHl5ASi/JHnbtm3Izc2FkpISLCwsIBKJpEv79u2hqqoq8J4QUWUxMTF563HaYrFY+nVRURGuX7+OxMRE6XpFRcUPLsarKx4/foymTZsKHaMUJSUl9O/fH56ennB2duZjuYz5kJ9v06ZN8eTJk2pMV7vUxPFLRMIIDw+Ht7c3GjRoIHQUQQ0aNAgGBgYIDw/H4sWL33q5V69e4cyZMzh+/DiOHz+Op0+fokmTJujduzemTZuGPn36QENDoxqTExG93YMHDxAfH48rV65Il3/++Qfy8vKwtLREu3btMHPmTLRr1w5t27aFpqam0JErTVBQEBwcHHD48GEMGzZM6DjVKjIyEr/99ht+/fVXoaMQfbB+/fqhXbt2WLZsGSIjI6XrR40ahaVLl2LWrFk4cOCAgAmr34sXL7B06VL4+/tDR0dHuj4jIwObN2/G7Nmz+f4XEREREdVKCQkJ6Nu3L1q2bIljx47J1PsSsoSFyEQyJjo6Go6Ojh90MjQRERGRrMvPz0dkZCTWrFmD69evQyQSYceOHXB3d+fzJiIiovdIS0tDREQE9uzZg/j4eJiamsLX1xfe3t4wNTUVOh4RERERERERERFRrfC+4mMNDQ1YWFjA2toavr6+MDMzY/ExERERyYQWLVrgl19+QUREBL744gscOXIEq1atgpeXF+Tk5ISOR0R10M8//4wJEyYgIyMDoaGh8PX1FToSERERvYWSkhJ69eqFoKAgmJqaYsyYMbW2QMDT0xMNGzaEq6srioqKEB4eXqHXRJcuXcLo0aPx4sUL7N27F6NGjaqGtCTrSgp6YmNjWYhMRERERCQAIyMjzJkzB4sXL8awYcNgbm4udKQqt27dOly7dg3Xr1/nZ4RUq3H81p3xW15Jslgsxp07d0qVJB85cgSvXr0qtyRZJBKhXr16Au8JEX2Iv/76Cw8fPsRff/2FgoKCCl1HTk4OEokETZo0gaurKzZs2ABtbe0qTlr7/P3338jIyECLFi2EjgJ5eXn06dMH7u7uGDp0KEsIZczH/nytrKyQlpaGFy9eoHHjxlWcsnYpGb8xMTHS50gtW7bkRPNEddDFixeRkpICT09PoaMITl5eHh4eHggPD8fChQtLnfuXmpqKY8eO4fjx4zh//jyKiorQpk0bjB8/HgMHDkS7du1q1OvrgwcPws3NTegYRFSDSSQSJCcnIzk5GREREdL1Li4uiIqKEjBZ5enSpQu8vLwwffp09OnTB2pqakJHqhZZWVn44osv4OPjg44dOwodh+ijzJ49GyNGjMCdO3dgZWUFAFBWVkZoaCj69u0Lb29v9OvXT+CU1Wf27NlQUVHB3LlzS60PCQlBcXEx/Pz8BEpGRERERPTxzp07h0GDBqFr1644dOgQj8WpwViITCRDxGIxzp49i2XLlgkdhYiIiKhG+Pvvv7FlyxaEhoYiIyMDgwcPRmhoKOzt7YWORkREVKNJJBKcOXMGe/fuxeHDhyGRSDBw4EAsW7YMvXr1qlEH1BIRERERERERERHVJB9afGxtbQ0bGxuYmJiw+JiIiIhkmoeHB/r374+goCCMHTsWO3bsQGhoKGxtbYWORkR1RHp6OgICArBr1y7pJMS6urpCxyIiIqJ3yMjIQP/+/aGmpobz58+jYcOGQkf6JP3798exY8fg7OwMTU1NbNq06a2XzcvLw4IFCxAcHIzevXvj7Nmz0NfXr8a0JMtUVFTQrl07xMbGSgt9iIiIiIioegUGBuK7776Dq6srLl26BFVVVaEjVZn4+HjMmTMH8+fPrxEFeESfiuO37lJUVCxTklxUVITk5GTp8aIJCQlYtGgRXr58CUVFRVhaWpYqSG7Xrh3q168v8J4Q1U1FRUV48uQJHj16hPv37+Phw4d4+PAhHj16JP06Ly8PAKCgoIDi4uJ33p6cnBzk5OSgq6uLL7/8EhMmTMA///yDDRs2ICUlhYWqb0hJSQEAWFpaCpwE0NfXx8mTJ4WOQVXkY3++JaVJHL9llYzfO3fu4MSJE3j16hUAwMDAANbW1mWW2v6ZLhG93b59+9C6dWvY2dkJHaVG8PT0xMqVKxEdHQ0FBQUcO3YM33//PR49egQdHR307NkT27Ztw8CBA6GtrS103PeKjIwUOgIRCezff/+FmpoaVFRU3nvZtWvXVkOi6vXNN9+gRYsWWLhwIVatWiV0nGoxf/585OXlYfny5UJHIfpow4YNg6WlJRYtWoRvv/1Wur5Pnz4YOnQoZsyYgZ49e8r0ZzklYmNjsXv3bkRGRkJTU1O6/uXLl1i/fj2mTZtWaj0RERERUW1w/PhxuLq6YvDgwdi7dy+UlJSEjkTvwEJkIhny66+/IiMjA7179xY6ChEREZGgEhISEBISggMHDqBhw4bw8fHB5MmTYWhoKHQ0IiKiGi05ORkHDhzA7t278fDhQ4hEIqxduxbu7u5QV1cXOh4RERERERERERFRjZGWlobU1NQyxcepqakAAE1NTZibm5cpPjY1NYWcnJzA6YmIiIiEoampiZCQEIwZMwZ+fn5o27YtJk2ahCVLlvAzaSKqUidPnsT48eMhFovx3XffYciQIUJHIiIiovfIy8uDs7Mz0tLSEBsbKzMTZzs6OmL37t0YOXIkTExMEBgYWOYyN27cgKenJx48eIDQ0FD4+voKkJRknYODA3788UehYxARERER1VnKysqIjIyESCTCzJkzsXHjRqEjVYn09HS4ubmha9eumD17ttBxiCoFxy+9TkFBQVqSPHz4cOn6p0+fIiEhQbosXboUL168gIKCAqysrCASiWBjYwNra2s4ODjIzPufREIqKCjA48eP8fTpU/z1119ITU0ttfz5558oLCwE8N9juaGhIfT09KCvr48hQ4bAzMxMuigoKMDExKTc+ykpQm7atClmzZqFiRMnSsuiDAwMoK6ujlu3bsHBwaG6dr1WSExMhIaGBvT09ISOQlQujt+3Kxm/V69ehZycHJ4+fVrqHJrExERERETgxYsXAABtbW3p+TMl/5Y8vhJR7fbjjz9i/PjxQseoMWxsbGBpaYkBAwZAIpFAJBJhzJgxcHZ2Rvv27SEvLy90xA/i6uoqdAQiqkWioqKEjlDpdHV1sWrVKvj6+qJPnz5wcnISOlKVOnXqFEJCQrBjxw7o6OgIHYfoo8nLy2PFihUYMmQIxo4dC0dHR+m2devWoXXr1ggICEBoaKiAKateeno6PD090a9fv1KfVQDA3LlzoaioiBkzZgiUjoiIiIjo40RERGD06NHw8fFBaGhorXvPtS5iITKRDDl16hRMTExgbm4udBQiIiKialdQUIDIyEisX78ely9fRocOHbBz5064urpCWVlZ6HhEREQ1VkZGBiIjI7F3715cunQJBgYGGDlyJMaNG8f3GIiIiIiIiIiIiKjOY/ExERERUeVr06YNLl26hPDwcAQEBODw4cNYtmwZvLy8hI5GRDImMzMTgYGB2LZtG1xcXBAaGsoJe4iIiGqJgIAAJCYmIi4uDoaGhkLHqVQjRozA06dPMWvWLLRv3x49e/YEAIjFYqxevRpBQUHo3r07jh07BiMjI4HTkqxycHBAcHAwXr58ycIdIiIiIiKBNG/eHNu3b4erqyvs7OxkrlCmsLAQI0aMQH5+Pvbv3w8FBQWhIxFVGo5feh99fX3o6+tj4MCB0nVvliSvXbsWz549AwDo6elBJBJJly5duvBzTaI35Ofn48mTJ9KC4zeLjx8+fIiioiIAgIqKCgwMDKQFnA4ODtDX15f+39jY+J2PbRKJBEpKStICZQDS48L19fURFBSEMWPGQElJqdT15OTk0KVLF5w/fx4TJkyogu9C7XXu3Dk4ODjw+HqqsTh+3+7N8VvyPOfNgri0tLQy590cPXpU+nxHW1sbZmZmZcqSee4NUe1w9+5d/Pnnn6UK5ghwcnJCdHQ0Ll68CF1dXaHjEBHRJxo7dixiYmIwcuRIXL16Ffr6+kJHqhLPnj2Dt7c3XFxcMHr0aKHjEH2ywYMHY8CAAZgyZQquXbsmfc/OyMgI27dvx/Dhw9G1a1d4eHgInLRqFBcXY+zYscjJycGOHTtKbbt8+TK2b9+OvXv3QktLS6CEREREREQfbvPmzZg8eTICAwOxfPlyfpZUS7AQmUiGnDp1Cn379hU6BhEREVG1ysjIwO7duxEcHIy//voL/fr1Q3R0dJmDJYmIiOj/SCQSnDlzBnv37sXhw4chkUgwcOBAHD16FM7OzjwxlYiIiIiIiIiIiOqc8iZfKZkgC2DxMREREVFlk5OTg5eXFwYMGIA5c+Zg9OjRiIqKwvr162Fqaip0PCKSAadOncL48eORl5eHqKgoDBs2TOhIREREVEFRUVHYvHkzIiIi0KJFC6HjVImAgABcunQJ7u7uuHr1Kl6+fAlvb28kJSVh0aJFCAwMhLy8vNAxSYY5ODgAAH777Tf069dP4DRERERERHWXi4sL5s+fDz8/P2hra8PFxUXoSJWiuLgY48ePx4ULF/DLL7+wEIZkEscvfaiKlCRv3boVf/31F4CyJcmdOnWqkp/Hzp07YWdnB5FIVOm3TfQhcnNzSxUcv1l8fP/+fRQXFwMAVFVVSxUcOzk5wczMDHp6etDX1//k47vl5eXRtGlT/Pnnn5CXl0dxcTFMTEywcOFCuLu7Q1Hx7dP49uzZE+vXr0dxcTGPMf//iouLcfbsWXzxxRdCRyF6J47fsj5k/Gpra6Nr167o2rVrqfXlnatz+vRp6XMeLS0tNG/enEXJRDVcTEwM6tevjw4dOggdpUZxdHREWFgYlJWVhY5CRESVJDQ0FO3bt4eHhwdOnTolc4/x+fn5GD58ODQ0NLB9+3ah4xBVmpCQENja2mLNmjWYPXu2dL2LiwsmT54MPz8/tGnTBtbW1gKmrBrBwcE4evQofvnlFzRt2lS6XiwWY+LEiejevTvc3d0FTEhERERE9GEWLVqEBQsWYPny5aWe31PNx0JkIhmRlpaGhIQEPggTERFRnZGSkoJ169Zhz549UFFRga+vL6ZMmQIDAwOhoxEREdVYd+7cwf79+7F79248fPgQIpEIa9euhbu7O9TV1YWOR0RERERERERERFTlyptMJTExsdzJVJycnDiZChEREVEVa9iwIcLCwjBy5EhMmjQJNjY2mDVrFubMmQMVFRWh4xFRLZSZmYnAwEBs27YNLi4uCA0NhY6OjtCxiIiIqIIePnyIcePGYfLkyTI/Adf27dshEonQt29f3LlzB+3atcP169dhYWEhdDSqA3R0dGBhYYHY2FgWIhMRERERCWz+/Pl49uwZPD090ahRI/Ts2VPoSJ+kuLgYAQEB2L9/P44fP47OnTsLHanK2NvbIzIyUugYJCCOX/pUbytJLjm2NSEhAVFRUVi0aBGKi4vLlCR36NChVMHBx9i6dSt+//13+Pj4YPny5WjcuPGn7hZRudLS0koVHL9eenzv3j2kp6dLL6utrS0tOLaxscHAgQOl5cfNmzeHlpZWlec1MzPDn3/+iebNm2PBggVwc3ODgoLCe6/n6OiIOXPmIDk5GS1btqzynLXBrVu38OzZMzg6OgodheidOH7LqozxW5Gi5NTUVCQmJmLr1q1ITU0FAGhoaMDCwkJ6To+ZmRmsra3RsmVLyMvLf9J+EdGHu3TpEuzt7WWuFPJT9ejRA0VFRfjtt9/Qp08foeMQEVEl0NDQwKFDh9C9e3d4eXkhIiJCZp5/SiQSeHp64saNG7h48SLnHiWZYmZmhqCgIMyfPx+9evVC+/btpduCg4Nx7do19O3bF7GxsWjWrJmASStXREQEvvzyS6xatQo9evQotS0oKAhJSUm4cuUK58ggIiIiolpBLBbDz88Pu3btwpYtW+Dr6yt0JPpALEQmkhHR0dEAUOsPiCUiIiJ6n4sXL2L9+vU4cuQIjI2NERQUhIkTJ0JTU1PoaERERDVSeno6Dhw4gD179iAuLg5GRkbw8vKCt7c3zM3NhY5HREREREREREREVCXKKz6+desW/v77bwAsPiYiIiKqabp3744rV65g9erVWLJkCQ4ePIht27bBwcFB6GhEVItER0dj3LhxyMvLw8GDB+Hi4iJ0JCIiqsEKCwshkUhkZrI6WTFt2jTo6+sjODhY6ChVTktLC+Hh4ejWrRvc3NwQHh5eoTIFosri4OCA2NhYoWMQERERERGADRs2IC0tDc7Ozti/fz+GDBkidKSPIhaLMXHiROzZswf79u3D//73P6EjVSlDQ0O4uroKHYMExvFLla2kJNnJyUm6Lj09Hbdu3UJCQsJbS5JtbGxgbW0t/boiJBIJbty4geLiYuzZsweRkZFYunQpJk2aBEVFTlNKH6ak8Lhkeb34OCUlBVlZWdLLlhQem5mZwcnJCZ6entDX14eZmRksLS1rRCFP//794efnh+HDh3/QZ0kikQhNmjTBoUOH8PXXX1dhwtrj0KFD0NfXR9u2bYWOQvROHL9lVeX4fVtRcnp6Ou7du1fqfKCtW7fi/v37KC4uhoqKCpo3by597lPyb4sWLfhZK1EVun37Njp37ix0jBpHR0cHurq6SE5OZiEyEZEMad26NY4ePYq+ffvC398fmzdvFjpSpQgICMDRo0dx4sQJ2NraCh2nynTp0kXoCDWerH6PZs2ahZiYGLi4uODKlSto2LAhAEBFRQXHjx/HZ599hl69euHixYvQ1dUVOO2nO3PmDHx8fPDFF18gICCg1LaTJ09i5cqV2Lp1K1q0aCFQQiIiIiKiinv16hXc3Nxw9uxZfPfddxg4cKDQkegj8EgjIhkRHR2NTp06QVtbW+goRERERJWusLAQ33//PdasWYO4uDiIRCLs3LkTHh4ePIGCiIjoLS5cuIBt27YhKioK8vLy+Pzzz7F48WI4Ojpy8j4iIiIiIiIiIiKSGR9bfGxmZiZwciIiIiJ6k7KyMubMmQN3d3f4+/uje/fu8Pf3x7Jly6CmpiZ0PCKqwXJychAYGIjNmzfDxcUFmzZtQuPGjYWORURENdxvv/2GOnMT5gAAIABJREFUevXqwdDQUDrpfslibW0NKysrnq9QzU6ePImjR4/i9OnTUFFRETpOtbC3t8eYMWNw4sQJZGdnQ1NTU+hIVIfY29vjwIEDKCgogLKystBxiIiIiIjqNAUFBezbtw9TpkyBi4sLtmzZgnHjxgkd64Pk5uZixIgROH36NL7//nv0799f6EhE1YLjl6qDlpZWmcLAzMxM3LhxQ1qSfOzYMaxatQoSiQRaWlqwsbGBSCSSLtbW1pCTkyt1u3fu3EFubi6A/0qxs7OzMWPGDISEhGDTpk3o27dvte4n1VyFhYV48eKFtOD4zeLjBw8eICcnB8B/x/8YGhpCT09PWu7t6+sLMzMz6OnpwczMDPXq1RN4j94vMDDwo66noKAAd3d37N27F/PmzSsz7uqa4uJi7Nu3Dx4eHpznhGo8jt/ShBq/Wlpa0ucvr8vIyMDdu3dLnT8UHh6OBw8eQCKRQFlZGebm5ixKJqoif/zxB7y9vYWOUSNZWVnhzp07QscgIqJK1qNHD+zbtw9ubm5QVFRESEhIrX1dK5FIMHXqVGzZsgVRUVFwcnISOlKVerMYluoOeXl5hIeHo02bNpgwYQIOHjwofW2vqamJ48ePw8HBAf/73/9w8uRJ6OnpCZz44x0/fhxubm5wdXXFypUrS217/PgxvLy84OHhgbFjxwqUkIiIiIio4v7++28MGDAADx48wKlTp2Bvby90JPpIPBOXSEacOnUKPj4+QscgIiIiqlSZmZnYtWsX1qxZg8ePH8PZ2RmxsbF8EUpERPQWL1++xN69e7F161bcvn0bIpEIISEhGDFiBDQ0NISOR0RERERERERERPTRyis+vnnzJp49ewYA0NbWlhaVsPiYiIiIqHYzMTHBiRMnEB4ejhkzZuDYsWMICwtD7969hY5GRDVQfHw8PD098fz5c0RERGDEiBFCRyIiolrC1tYWo0aNwt27d3Hv3j1cvXoVUVFRSEtLAwAoKSnBxMQE5ubmpZbmzZvD1NSU5aGVrKCgAJMmTYK7uzt69eoldJxqtWLFCnz//fdYunQpvvnmG6HjUB3i4OCA3NxcXL9+HR06dBA6DhERERFRnaegoIDQ0FA0adIEvr6+uHr1KlavXg1VVVWho71XSkoKXF1d8fjxY5w+fRpdunQROhJRteL4JSFoaGiUKUnOysrC9evXpSXJp0+fxqZNm1BUVARNTU3Y2tqWKkm+evUq5OXlIZFIpLchkUjw8OFD9OvXD87Ozti4cSNMTU2F2EWqRvn5+Xjy5Im04PjN4uOHDx+iqKgIAKCiogIDAwOYmZnBzMwMDg4O0NfXl/7f2Ni4zhdPenp6Yt26dYiLi6vzj6uxsbFITU2Fp6en0FGIKoTj9//UtPGrqalZblFyfn4+7t69W+pco6ioKCxevBgSiQRKSkpo1qxZqZJkGxsb2NjYVNvz9fj4eBgbG0NXV7da7o+osj1//hwvX76EpaWl0FFqJBYiExHJrmHDhuHQoUNwd3fHkydPEBERUSve831dQUEBvLy88P333yMiIgJDhw4VOhJRldLV1UVERAR69+6Nr776CsuWLZNuMzAwwLlz59C3b1/Y29vj559/rpXPcffu3Ytx48bBw8MD27dvl5Y+A0BGRgYGDBgAHR0dbN68WcCUREREREQVk5SUBGdnZygpKeHXX3+FhYWF0JHoE7AQmUgGJCcn49GjR5zgiYiIiGTG/fv3ERYWhrCwMBQVFWHMmDEICAiAsbGx0NGIiIhqpISEBGzduhX79u2DgoIC3N3dER4eXuYgfiIiIiIiIiIiIqKa7tmzZ7h16xZu3bolnYwkKSlJWkLSuHFj2NraokWLFhg6dChatmwJW1tbNG7cWODkRERERFTZPD090adPH8ycORN9+vTB8OHDsXnzZjRq1EjoaERUA4jFYqxevRpBQUHo1q0bTp8+DUNDQ6FjERFRLaKlpQVvb+8y69PS0kpN8p+amorbt2/jxIkTuH//PoqLiwEA2tra0smSSyb5NzMzg5WVFdTU1Kp7d2q98PBwPHnyBCtXrhQ6SrXT0dHBvHnzMG/ePAQGBvL9bqo2LVq0gI6ODmJjY1mITERERERUg8yfPx82NjYYN24cfv31V0RGRtboif4iIiIwceJEtGjRAvHx8SzNpDqN45eEpq6uXqYk+dWrV7h27RquXLmCK1eu4OzZswgNDYVYLIahoSEUFRVRUFBQ6nZKim+jo6PRokULzJgxA/PmzeN737VYbm5umZLj18uPX//8Q1VVtVTBsZOTE8zMzKCnpwd9fX2YmpqWKtmgstq1awc7OzuEhobW+ULV0NBQtG3bFq1btxY6ClGFcPz+n9oyflVUVKQFx8OHD5euLygowB9//FGqKPnYsWMIDg5GUVHRW4uSra2tUa9evUrNuG3bNnz77beYM2cOZsyYgQYNGlTq7RN9iPz8fKioqHzQdZ49ewbgvwI5KsvAwACXLl0SOgYREVWRIUOG4Mcff8SQIUPQr18/7N+/H02bNhU6VoU8ffoUI0aMwM2bN3Hq1Cl0795d6EhE1eKzzz7Drl274OXlBR0dHQQEBEi3GRsb48KFC+jfvz+6du2K/fv3o1evXgKmrbiioiLMnz8fy5Ytw1dffYVFixaVep+2oKAALi4uePHiBWJjY/l+PhERERHVeJcuXcLgwYNhbm6OH374gefTyQAWIhPJgFOnTkFLS4snmxIREVGtl5CQgJCQEOzfvx+Ghob48ssvMWHCBGhpaQkdjYiIqMZJT0/HwYMHsWnTJty4cQMikQhr166Fh4cHDz4gIiIiIiIiIiKiGi89PR2JiYmlyo9v3ryJf/75B8D/FR/b2dlh5MiR0uJjHR0dgZMTERERUXXS1dXF3r174erqCj8/P9jY2GDjxo1wcXEROhoRCej+/fvw9vZGfHw8Fi1ahMDAQMjLywsdi4iIZIS2tjZEIhFEIlGZbXl5eXj69Kl0wuSSwoDTp0/jwYMHkEgk0tt4vSS5ZPJkCwsLaGhoVPcu1XhFRUVYuXIlvL290axZM6HjCMLX1xfLly/HunXrsHTpUqHjUB0hJyeHzp07IzY2FtOnTxc6DhERERERvcbFxQUdOnTAiBEjYGdnh1mzZmHOnDkfXFhTlZ48eYI5c+YgPDwcvr6+2LBhA5SVlYWORSQ4jl+qaRo0aAAHBwc4ODhI1+Xl5eH69esYP348Hj9+/NbrFhYWAgBWr16N3bt345tvvoGXl1eVZ6YPl5aWVqrg+M3i47S0NOllSz7D0NPTg42NDQYOHCj9PKN58+ac56mSBAYGwtvbG0FBQbCwsBA6jiDu3buHqKgohIeHCx2F6INw/MrG+FVWVq5wUfLp06exbt065OfnQ1FREUZGRmWKklu2bIn69et/VJZr164hJycHCxYswPr167F06VL4+PhAQUGhsnaXqMKaNWuGDh06YMCAAejXrx9MTEzee52srCwAgLq6ehWnq53U1dWl3yOhFRQU8PU9EVEV6NmzJy5cuAAXFxe0adMG+/btg5OTk9Cx3unUqVPw9PSEtrY2Lly4AFtbW6EjEVWrkSNH4q+//kJgYCB0dXUxatQo6TYdHR2cOXMGY8eORe/evTFv3jwEBQXV6NdoT58+hYeHB37//Xds27YNY8eOLbVdLBbDw8MDly9fxvnz5yv0PJ+IiIiISEiHDh2Cp6cnnJ2dsW/fPtSrV0/oSFQJWIhMJANOnTqFXr16QVGRQ5qIiIhqH4lEghMnTmDFihW4dOkSRCIRduzYAQ8PDz6/ISIiKkdCQgK2bt2Kffv2QUFBAe7u7ti1axfatWsndDQiIiIiIiIiIiKiMt6cLCQhIQFJSUm4f/8+iouLoaGhAQsLC1hbW6NPnz7SyULMzMyEjk5ERERENciAAQPQrVs3zJo1C66urujfvz+2bNkCAwMDoaMRUTXbu3cv/P39YWJigri4ONjZ2QkdiWqZf//9F7t27SpVVMpyUiKqKFVVVeljx8CBA0ttKygowOPHj0sVDCQmJiIqKgoPHz5EUVERgLJlySWLjY0N9PT0hNgtwUVFRSE1NRU//vij0FEEU79+fcyYMQMrVqzArFmzoKmpKXQkqiMcHBwQEhIidAwiIiIiIiqHsbExzp07h+DgYCxduhSRkZFYt24d+vTpI2iu3NxcrFu3DkuWLEGzZs0QHR1d4yf+J6puHL9U06mqqqJjx464f/9+hS4vFovx4sULeHt7Y9euXVWcjspTUnhcsrxefJySklKqgO31zyGcnJygp6cHfX19mJmZwdLSkkV21WTEiBFYuHAhgoODERYWJnQcQSxbtgzGxsZwcXEROgrRB+H4le3x+7ai5MLCQvz555/SkuTExEScPn0aISEhyMvLAwDo6emVKkm2trZGmzZtoKam9s77TE5OBgAUFRXhxYsXmDhxIlauXInly5eXykBUHYqLi/HTTz/h559/RlFREUxNTfH555+jX79+6Nq1K1RUVMpch4XI71aTCpHXrFmDkydPwt/fH0OGDIGSkpLQkYiIZEbr1q2RkJAAX19f9OnTBzNmzMCCBQve+1ywumVlZSEoKAjr16/HiBEjsGXLFv4Npzpr5syZeP78OUaPHo2srCz4+flJtzVo0AAHDhzAZ599hhkzZiAmJgZbtmyBtbW1gInLFxERgenTp6Nhw4aIi4tD69atS23PycmBm5sbYmJi8NNPP6FVq1YCJSUiIiIiqpiQkBAEBARg8uTJWLt2LeTl5YWORJVErri4uFjoEET08QoLC9GwYUOsWrUKEydOFDoOERERUYXl5+cjPDwcwcHB+OOPPzBo0CAEBgbC3t5e6GhEREQ1Tnp6Og4ePIiNGzfi5s2bEIlE8PX1hYeHR407EIqIiIiIiIiIiIjqJrFYjEePHpUqPU5MTMSdO3dQVFQEJSUlWFhYlJn8o2XLljwolYiIiIg+yPnz5zFu3Di8ePECK1euxPjx4yEnJyd0LCKqYs+fP4evry9++OEHTJkyBd988025k+8RvY9YLIaamhry8/Ol6zQ0NGBqaop///0Xampq+OKLL2BmZgZTU1M0a9YMioqKAiYmoqpQMqlwVFRUtdxfyeTJr5cVlCxJSUnIzc0F8Pay5JLHJFl93turVy9oaWnh8OHDQkcRVEZGBvT09BASEoLx48cLHYfqiAsXLqB79+5ITU2Fqamp0HGIiIiI6qSDBw/Czc1N6Bg1Xl2fJu3hw4eYNm0ajh49is6dO+Orr75C//79q/W9gqysLGzevBlr1qxBVlYW5s6di5kzZ/K9eqL34PilmurevXswNzev0GUVFRUhLy+PwsLCOv83uaIiIyPh6upaocsWFhbixYsX0oLjN4uPHzx4gJycHACAkpISdHR0pAXHry96enowNTVF/fr1q3LX6ANs374d/v7+uHHjBqysrISOU61u374NOzs7hIWFYcyYMULHqRTDhw/HoUOHhI5Ro7m4uFTb569VjeNXtsbvp3j9XKmS86SSkpJw+/Zt6d/n8oqS7ezsoK6ujqdPn8LAwKDM7crLy0MikUAkEmHdunXo2rVrqe2yemxAZfqQ51v0f8zMzHD//v1S61RUVJCfnw8VFRXY29tj8ODBGDJkCIyNjQEAR44cwbBhwyAWi6GgoCBE7Bpt//798PLyQmFhodBRMHfuXKxYsQIA0LBhQ/j7+8PX17fcx6ESJe9P87UeEX2I6j7+sqbZuXMnAgMDUa9ePaxZs6bGPCeJjIxEQEAA8vPzsWrVKj6fJ/r/Vq5ciTlz5mDWrFnS50qvu379OsaOHYsbN25gxowZCAoKQoMGDQRIWtrt27fh7++Pc+fOYfz48QgODi4z93BaWhoGDRqEpKQkHDt2jPP6ExEREVGNVlRUhKlTpyIsLAzr1q3D5MmThY5ElYyFyES13KVLl+Dg4ICUlBRYWFgIHYeIiIjovbKysrBz504EBwfj+fPncHNzw5dffglra2uhoxEREdU4CQkJ2Lp1K/bt2wcFBQW4u7tjwoQJaNeundDRiIiIiIiIiIiIqA57+vSpdCKPkvLjktIORUVFGBkZlZrIQyQSoUWLFpz0gIiIiIgqTU5ODhYtWoTg4GA4OTkhLCxMOvEWEcmekydPwsfHB8rKytizZw969OghdCSq5Tp27Ij4+Pgy61+fTLTktEs5OTmoqqpCTU0N6urqaNCgAQwMDMpMJkNEtUtcXBw6d+5cIybkK5lAubyy5OTkZLx69QoAoKqqCn19fel7r6+XHJiYmEBeXl7Q/bh///5Hlak+fvwYxsbG+O677zBo0KAqSFa7uLu748mTJzh//rzQUaiOyM3NhaamJnbv3g0PDw+h4xARERHVSSxErhhOk/af3377DUuXLsXx48dha2sLHx8fuLu7o0mTJlV2n5cvX8a+ffsQHh6OwsJCTJo0CQEBAdDV1a2y+ySSRRy/VNNERUWVKmuRl5eHgoICxGKx9O9uo0aNYG5uDltbW1hYWMDc3BwWFhaws7MTKnat8XpBX35+Pp48eSItOH6z+Pjhw4coKioC8F8ZnYGBgbTg+M3iY2NjYx6PXYsUFRWhQ4cOaNSoEaKjo4WOU6169eqF9PR0/P777zLzO8tC5PeTpUJkjl/ZGr9VQSwWIzU1Fbdu3UJycrL039u3byMvLw9ycnIwMjKCrq5uuccolVBUVIRYLIazszPWrVsnnVeahcjvx0Lkj9OuXTtcvXr1rdsVFBQgJycHsVgMQ0NDODs7o2nTpli0aBFevXqF+vXrV2Pa2mHXrl2YMmUKMjIyBH/c9Pf3x7Zt26TlzEpKShCLxfjss88wY8YMDBgwoMzjCwuRiehj1PVCZAB48eIFZs+ejd27d6NLly746quv4OzsXO05iouL8eOPP2Lp0qWIi4uDj48PVqxYAR0dnWrPQlSTbdu2DX5+fvD29sbGjRtRr169UtuLiooQFhaGr776CvXq1cPMmTMxYcIEQYqR//jjD6xYsQLh4eFo3bo1QkND0bFjxzKXS05Oxueff46cnBz8/PPPsLKyqvasREREREQV9erVK7i7uyM6Ohp79uzh+/sySlHoAET0aWJiYqCvr88yZCIiIqrxnj17hs2bN2P9+vUQi8UYM2YMAgMDYWhoKHQ0IiKiGiU9PR0HDx7Exo0bcfPmTYhEIqxduxYeHh6cRJOIiIiIiIiIiIiqVVpaWqnS48TERFy/fh3Z2dkAAD09PdjY2MDBwQFTp06VFiC/eRIYEREREVFlq1+/PlasWIHBgwdj7NixsLa2RlBQEAIDAwUvgiOiypOTk4M5c+Zg/fr1GD58OLZu3QotLS2hY5EMsLe3x/Xr11FQUFBqfXmT+hUXFyM3Nxe5ubnIzMyEnZ0dj+MikgGdO3dGly5dhI4B4L8JjkuKDMqTlpaG1NRUJCYmIikpCampqTh9+jRSUlKQlZUFAFBWVoahoWGpUoSS4uTqKkfo06cPmjVrhuXLl5c78dbb7NmzB9ra2ujbt28Vpqs9PD09MWDAAKSmpr71d4KoMtWrVw+tW7dGfHw8C5GJiIiIiGqBTp064YcffsD169exYcMGLFiwAIGBgejduzecnZ3h6OiIli1bftJ95OfnIy4uDr/88gsOHTqE27dvw8rKCjNnzsTEiROhra1dSXtDVLdw/FJNk5CQAOC/0mNLS0u0bNlSWnpcUnwsRNmDrFi7di2Cg4Px6NEjPHv2TLpeU1MTxsbGMDY2hrW1Nfr16wcjIyPpOhaWyxYFBQWEhYWhc+fOOHjwYJ2Z1DkiIgJnz55FbGys4KWARB+L45fj930UFRVhaWkJS0vLUuuLiorw4MED6ef7R44ckZYel6dkfXR0NFq2bAkfHx8sXry4yvNT3VJy3FtGRgZUVFTeedmioiLp148fP8a2bdukx9RNnz4dISEhPG/wDZmZmZCTk4OioiJUVVVRr149qKqqQltbW7qUt+5t6xs1avTen9O7srz+MywpRr5w4QJiYmJgZGSESZMmYdy4cWjUqFGl7D8RUV3VuHFj7Ny5ExMmTMCiRYswYMAAtG3bFgEBARg6dCjq169fpfefk5OD7777DqtXr8a1a9fQv39/xMXFfdCxm0R1yfjx49G0aVN4eXkhISEBkZGRpQqEFRQUMGnSJLi4uOCbb77B/PnzsXz5ckyZMgVjxoxBs2bNqjRfcXExYmNjsXnzZkRGRqJ58+YICwuDl5dXua/Pw8PDMWnSJNja2uL06dPQ19ev0nxERERERJ/i77//xsCBA3H//n2cPn0aDg4OQkeiKiJXXN5Z+kRUazg5OUFPTw/h4eFCRyEiIiIq171797B+/Xps27YN6urq8PPzw7Rp03iiDBER0RvOnTuHsLAwHDlyBCoqKhg5ciR8fX3Rpk0boaMRERERERERERGRjEtPT8etW7ekpcdJSUm4ceMGnj9/DgDQ1taWlmdYW1tDJBKhTZs2LP8hIiIiohohLy8PixcvxqpVq9C5c2fs3LkT5ubmQsciok/022+/wdPTE2lpadi6dSuGDh0qdCSSId9++y28vLwgkUjee1lFRUVIJBL4+/tj8eLF0NTUrIaEREQVU1KW/PqSmJiIW7duISMjAwCgpKSEZs2alSpLfr00uTImqpVIJFBVVUVRUREkEgmcnZ2xbNky2NnZvfe67du3R8eOHREaGvrJOWSBWCyGnp4e5syZg4CAAKHjUB3h5+eHGzduIDY2VugoRERERHXSwYMH4ebmJnSMGo/TpJUvNzcXR48exYEDBxATE4PMzEzo6enB3t4elpaWsLKygoWFBXR1daGmpiZd0tLSkJWVhezsbDx58gQpKSlITk5GYmIi4uLikJubCzMzMzg7O2PUqFHo1KmT0LtKJHM4fkloT548gaam5kcdCywnJ1cFiWRL586d4eDgACMjI5iamkoLj/lZY900fvx4HDt2DFevXoWenp7QcarU06dP0aZNG3z++efYsmWL0HEq1fDhw3Ho0CGhY9RoLi4uiIqKEjpGpeL4pU/l5+eHHTt2SEtJ30dRURHKysrIycmp4mS1X2RkZJ0oK8/NzUVaWhry8vKkX5e3vGt7Xl6e9Pa0tLSQnp5eoftWUlKCWCyGSCTC5cuXcefOnTIl4AQsWbIEO3bswOrVq5GVlYXMzEzpvyWv4V9fl5mZifT0dGRmZr61LL1+/fpQV1eHhoYGNDQ0oKWlBQ0NDek6dXV1aGpqQktLq9Tlvv76a5w/f/6tWUuKmwFg8ODBmD59Op48eQI3Nze+/0pEH2T48OEAIHPP/z/F1atXsWzZMhw9ehSqqqoYNmwYPDw80K1bN6iqqlbKfeTm5uLChQuIiIjAkSNHkJeXhyFDhmDu3Lmcr5Sogu7fvw83NzckJydj06ZN8PT0LPdy//zzD0JCQrBlyxa8fPkSPXr0gKenJ5ydndGkSZNKyVJcXIybN2/i8OHD2LdvH1JTU9G2bVvMmjULw4cPL7cIOSsrC9OnT8euXbswY8YMrFixAkpKSpWSh4iIiIioKiQmJmLgwIFQVFTETz/9hObNmwsdiaoQC5GJarGCggJoa2tjw4YN8PHxEToOERERUSlXrlzBunXrEBERARMTE0yZMgW+vr6VMlkOERGRrHj16hX27duHTZs24ebNm+jYsSN8fX0xYsQINGjQQOh4REREREREREREJGOysrKQkpIiLT0u+Tc1NRXAf5MaNG/eXFp6bGNjg1atWlXaiVlERERERFXp6tWrGDNmDO7evYvg4GBMmDCBk/AS1UJisRhLlizBkiVL0KtXL+zatQv6+vpCxyIZkJubi6tXryI+Ph6//PILjh079s7Ll/wN6dSpE8LCwtC6devqiElEVGnKK0t+fQH+m0zZyMio3LLkFi1aVPhY1gcPHsDU1FT6f0VFRRQVFaFfv37vLEZOT0+Hjo4OoqKiMHTo0E/faRkxfPhw5OXlvfdvFVFl2blzJ/z9/ZGZmcnJ8YiIiIgEwELkiuE0ae8nFouRkJCAM2fO4MqVK0hJScGdO3eQn5//3us2atQIVlZWaNmyJezt7eHo6AgTE5OqD01EADh+qfbhsRjvV1cK+qhisrOz0aFDBzRp0gS//PJLuWUmskAikaB379549OgRLl++DA0NDaEjVSoWIr+fLBYic/zSp7K3t8evv/763sspKChAQUEBBQUF1ZBKNtT051tisVhafFtSfpuZmYmMjIxSX6elpb1129uKi+Xl5aVluBoaGtDU1JQW4pZ8ra2tXe62FStW4NChQ28t4pWTk4O8vDxUVVUxcuRITJ06FQ0aNICpqSni4uLQqVOnqvy21UozZsxAXFxchcZ6ecorsn5bwfW71gOAiopKhd5LAP47tkcsFsPExAQPHjxAbm5upRV2EpHsYyHy27148QL79+9HeHg4Ll++DFVVVdjb26Nnz55o164dLC0tYWJiIi2ofxuxWIwHDx4gJSUFCQkJiImJwa+//oq8vDx07NgRo0aNgru7O3R0dKppz4hkR0FBAWbPno2QkBD06tULmzZtgqWl5Vsv+9NPPyE8PBzHjx9HQUEBbGxs4OjoiC5dusDKygqWlpYVOt762bNnSE5ORlJSEs6dO4eYmBg8f/4c+vr6cHd3h5eX1zvPWTl48CACAgKQl5eHnTt3YtCgQR/9PSAiIiIiqg4nTpyAh4cH7OzscOTIEb6GrQPe/W4HEdVocXFxyMnJQc+ePYWOQkRERCR18eJFrFy5EsePH0e7du2wc+dOjBw5UmYP5CQiIvoY9+7dw7Zt27B9+3ZkZ2dj0KBB2LJlC+zt7YWORkRERERERERERDKgsLAQKSkppUqPExMTkZycDIlEAmVlZZibm0MkEsHX1xfW1tawsbGBqakpJykjIiIiolqrbdu2iI+Px9KlSzF58mR899132LFjBwwNDYWORkQVlJycjFGjRiEpKQmrV6/G1KmSedBYAAAgAElEQVRT+TqVPkpRURESExMRHx+P+Ph4/P7777h58ybEYjEaNWqEDh06oH79+sjJySn3+oqKitDU1MSaNWvg6enJ30MiqpW0tbUhEokgEonKbEtPT8e9e/fKlCSfPn0a9+/fl5ZMaWtrw8zMTPoecklZsqWlJdTV1aW3d/fu3VK3XzJxbnR0NH766Sd8/vnnWL58OSwsLEpd7uzZsyguLkb37t0re/drNUdHR8yePRuFhYUsp6Vq0bFjR+Tl5SExMRFt2rQROg4REREREX0kRUVFdOrUqVQxjUQiwZMnT/DixQtkZ2cjOzsbr169gra2NtTU1KCmpgY9PT00atRIwORExPFLRCTb1NTUsH//fnTp0gWLFi3CwoULhY5UJb7++mtcunQJcXFxLFMlmcHxS58qKSmp1P/l5OSkJaTFxcVQUlKCubk52rdvj1atWqFVq1awtbVFs2bNBEpMwH8FtW8rnn1XKe3r2549ewaJRFLu7auqqkJbW7vU0qhRIxgaGpa7TVtbG/Xq1ZNua9KkyUfP66mvrw95efky65WUlFBYWAgbGxtMmTIFI0eOlJa6SSQSqKqqIiUlhYXI5UhJSYG5uflHX79evXqoV68e9PX1P/o2cnNzkZWVhW7duiElJaVC15FIJJCTk8ODBw8AAKtWrcKXX37J41SIiD5R48aNMXXqVEydOhWPHj1CTEwMzpw5g23btuHRo0cAAGVlZRgZGUFTUxOamppQU1MDAGRnZyMjIwPp6en4888/UVBQAAAwNjZGjx494O3tDUdHRz5XJPpEysrKWLt2LVxdXTFp0iS0bt0aM2fOxOzZs0sdG11y2cGDB2Pw4MHIzs7G+fPncebMGcTExCA0NFR6vLSBgQF0dXWln980aNAA6enpyMrKQnZ2Nh4/foyMjAwAgIaGBhwcHDBz5kw4Ojqibdu25T5HL3H79m1MmzYNp0+fxpgxY7By5UoWyRERERFRjRcSEoIvvvgCbm5u2LFjB1RVVYWORNWAhchEtVhMTAyMjIxgamoqdBQiIiKq48RiMQ4cOIAVK1YgKSkJzs7OOHfuHCelISIieo1EIsGZM2ewdetWHDlyBE2aNMHkyZPh7++Pxo0bCx2PiIiIiIiIiIiIaiGxWIxHjx6VKj1OSkrCrVu3kJ+fDyUlJVhYWMDGxgbDhw+HjY0NrK2t0bJly3eeGEVEREREVFspKSlhwYIF6NevH7y8vNCqVSusX78enp6eQkcjoncoLi7Gpk2bMGvWLLRq1QrXrl2DpaWl0LGoFnn69CkSEhKky8WLF5Geng4lJSW0bt0a3bp1w/Tp0yESiWBtbQ05OTn07NkT586dk5Z+Av8VDhQVFWHEiBFYt24dSwSISGZpaWm9tSw5Ozsbd+/exb1793D37l3p12fPnsXjx4+lj5v6+vowNzeHubk5/v33X+mkza8rLCwEAPzwww/4/vvv4e7ujoULF8LMzAwAcP78edjZ2fHx9g2Ojo7IysrClStXOJkwVQtra2uoq6sjPj6ehchERERERDJGXl4ezZo14+T4RLUQxy8RkWxp06YNQkJCMHHiRDRv3hxeXl5CR6pUu3btwvLly7F161a0bt1a6DhElYrjlz7W8+fPpYVXcnJyMDQ0RLt27dC6dWtp+bG5uTkUFTk9fGV6vaj4Y0qNX758ifz8/HJvu6SQ+PVy4pLFzMzsrdtKloYNGwpe+qChoQE5OTnp/0t+/wYNGoSJEyfCycmpzHXk5eXRvHnzChft1jV37tzB6NGjBc1QUqqcm5v7zsspKSlBLBZDUVERDg4O6Nu3L5SUlPDFF1/g66+/rtB9vf778zavH5NZcp03173t9sq73Nvu8223WdH7/lRVeds1RXnf+5J9rsjPrq56/Xejtvye1JactY2RkRG8vb3h7e0NAMjMzERKSgru3LmDBw8eICsrC+np6cjOzgYA6OnpQUtLC+rq6jAxMYGVlRUsLS2hoaEh5G4QyawuXbogPj4emzZtwvz587F582Zpobm2tnaZy6upqcHZ2RnOzs4A/jtGOjU1FcnJybh37x7++ecfZGdnIysrC69evYKZmRnU1NSgrq6Opk2bwtLSElZWVjAwMKhQvuvXr2Pp0qU4fPgwWrdujYsXL8Le3r5SvwdERERERJUtPz8ffn5+2Lt3L5YuXYrZs2cLHYmqET/xIqrFYmJi4OjoKHQMIiIiqsPy8/Oxe/dufPPNN3j06BHc3d1x4MAB2NraCh2NiIioxsjMzMSBAwcQEhKCpKQkODg4YP/+/Rg6dCgPSCciIiIiIiIiIqIKe/r0aanS48TERFy9ehU5OTkA/jvRUSQSwcnJCVOnToWNjQ1sbW2hoqIicHIiIiIiourXqVMnXLt2DQsXLsTo0aNx7NgxbN68mUVrRDXQv//+Cx8fH5w4cQLz5s3DvHnzeEwNvVN6ejouX76MixcvIiEhAb///jueP38ORUVFWFpaQiQSYcGCBRCJROjYsSOUlZXLvZ0uXbrg0qVLKCgoAPDfZF6tWrVCWFgYOnToUJ27RERUo6ipqaFNmzbllqLm5eWVKUq+e/cu4uPjIS8v/9bbLClGjoyMxIEDBzBmzBgsWLAAN2/eRNu2batsX2orS0tLqKmpITExkYXIVC3k5eXRtm1bxMfHY/z48ULHISIiIiIiIiIiIpJJvr6+ePjwIXx8fKCuro6hQ4cKHalSnDhxAr6+vpg3bx7GjRsndByiKsHxSx9DLBZjx44daNWqFaytrdGgQQOhI8mU5cuXIyQkBJmZmcjMzERGRoa0gPpNCgoK0NDQgLa2NjQ1NaGhoQENDQ1oamrCyMgItra20NLSgpaWVqltr39dXiFabaSpqSk9Xs7AwABTpkyBj48PGjdu/M7rWVlZITk5uToi1ir5+fl48OABrKyshI4CAMjKyir1fzk5OSgqKqKwsBD6+voYMGAAnJyc0KdPH2m55sGDBz/4fl4vTX2zRPX1ktz3lSdXtID1bcWyFbl+VZYh1wXvKvUtLi5miW45amNRdF35fa4JNDQ00L79/2PvzsNjPBS3j9/ZEBJJqCVUSkowQ4gRWyyl1NJqT9vEHmspaimlqKW11lZyrKW0dknpQdVyjhJbFJEmIUFUqZ5Sao1EEEnm/eO8za/ULsmT5fu5Llcbk5nnO5NMGzF57pqqWbOm0SkA/j97e3sNHDhQnTt31qxZszRr1ix99tln6tWrl7p16yaz2fzA6zo4OKhixYoZ+rVgSkqK/v3vf+vzzz/Xpk2bVL16dYWEhOitt9566Ou0AQAAgOzg0qVL8vf3148//qh169apdevWRichi3F2CCCHunXrlg4cOKDu3bsbnQIAAPKgGzduaNGiRZo+fbr++OMPtW3bVlu3blWFChWMTgMAINuIi4vTvHnztHjxYtnY2KhDhw4KDg5W1apVjU4DAAAAAAAAkI1dvXr1rtHjiIgIHT58OP0H0t3d3WU2m2WxWNS5c2eZTCbVqFFDBQsWNLgcAAAAyF4cHR01efJkvfzyy+revbvMZrO++OILfngKyEZ27dqlTp06ycbGRjt27FDDhg2NTkI2k5iYqKioKEVERKT/OnbsmKxWq9zd3WWxWDR48GD5+fk98fdHfH19defOHdnb28vZ2VkzZ85U586dObEXADxEgQIFZDab/3aCr3/84x/69ttvH3n9P4eRFy9erGXLlilfvnyqV69eprTmZDY2Nipfvrzi4uKMTkEeUqtWLW3bts3oDAAAAAAAAADI1SZMmKDz58+rU6dOWr9+vZo1a2Z00jPZtm2b2rRpo65du2rs2LFG52SqNWvWGJ0Ag/H8xZMqVaoU54zORG5ubqpWrdpd48UuLi5ydXX925gxY9T/x83NTc2bN9d7772nVq1aPfaomsVi0bx58zK5Luc5ePCgUlNTZbFYjE6RJCUlJcnW1lZWq1W2traqV6+eXn/9dbVs2fKhY36Z5a9jupl1+xk1yPukt/PnsXODxx2WfppB6uwuM+5DTvzcyInNAJDR3Nzc9PHHH2vw4MH6/PPPNXfuXH322WeyWCwKDAxUQECASpUqlSnHTktLU0REhFauXKnVq1fr4sWLatSokTZu3KhWrVrx32gAAADkCNHR0XrjjTdkb2+vAwcOqHLlykYnwQAMIgM51L59+3Tr1i01atTI6BQAAJCHJCQk6Msvv9TkyZOVkJCgHj16aOjQoXr++eeNTgMAIFtIS0vTpk2bNGvWLG3fvl0vvviiRo8erV69esnNzc3oPAAAAAAAAADZSHx8vE6ePJk+enz06FHFxMTo/Pnzkv73g1Mmk0lms1kBAQEym82qXr26nnvuOYPLAQAAgJylWbNmiomJ0YcffqjXX39dgYGBmjdvnpycnIxOA/Ks1NRUjR8/XhMmTFDr1q21ePFiFSlSxOgsGCwlJUVxcXHpw8dhYWGKiopSampq+vhxQECALBaL6tSpo2LFij3T8Xx9fWVra6t3331XEyZMkKurawbdEwDIe/4cq38UBwcHpaWlKTU1VWlpaUpISNCRI0d048YNTkB8j4oVKzKIjCzl6+urmTNn8nwEAAAAAAAAgExkY2OjBQsW6Pbt23rttde0bNkytW3b1uisp7J69Wp17dpVbdu21eeff844C3I9nr9A9tK7d2+1adPG6Iwcp3PnzurSpcsTX69x48YaOXKkTpw4IS8vr0woy5m2b98uDw8PeXp6Gp2i5ORkFS1aVC1btlSrVq3UrFkzFS5cOMOP8zjDuY/jz//3/PnPnD6smxf8dRQ5N4whAwBwP87Ozho6dKg++OAD7dmzR0uXLtWYMWP0/vvvq3LlymrcuLGaNGmi2rVrP/X5+JOTk3XixAnt3r1bO3bs0M6dO3X58mV5eXmpX79+CgwMVNmyZTP2jgEAAACZKCQkRD169FCtWrW0Zs0aFS1a1OgkGIRBZCCHCg0N1YsvvqgXXnjB6BQAAJAHXLp0SXPmzNGsWbOUkpKibt26acSIESpZsqTRaQAAZAt//PGHvvrqK82fP1///e9/1aRJE23YsEGvvfYaL/oHAAAAAAAA8rjk5GT99NNP6aPHsbGxOnr0qE6fPi2r1SoXFxeVL19eJpNJTZs2lclkUs2aNeXu7m50OgAAAJBruLi4aMGCBWrWrJn69Okjb29vLVmyRA0bNjQ6Dchz/vvf/6pjx44KDw/XZ599pgEDBvD6mjzq3LlzCgsL0969exUREaEff/xRN2/elLOzs7y9veXn56cBAwbIYrHIbDZn+PGff/55RUVFqUqVKhl+2wCQl1itVv36669/+30HBwdZrValpKTIzs5OZcuWVb169WSxWGSxWOTs7Kzq1avrk08+YXz1Pjw9PbV582ajM5CH+Pr6KjU1VVFRUfLz8zM6BwAAAAAAAAByLXt7ey1fvlzFixdXhw4ddO7cOQ0aNMjorMdmtVr12WefadiwYRo8eLCmTp3K6z6QZ/D8BZDTPe1z3tfXV4ULF1ZoaCiDyH+xY8cONW3a1OgMSf97nc7Zs2dzzH/X7x3TzYiB3b+O9f55jL/e7v0u//P3//rPh3U86n0edvlfPzb3Hvthbz+s+X6P473HeJzbyaxh6kcd90HHvN/H8HEeg4fd7r2XPeq+P+3H5kGPwdM03nsbT/Nxf9Cx7nefAAD/x9bWVo0aNVKjRo00d+5c7d69W6GhoQoNDdWCBQuUmpoqJycneXl5ycvLSx4eHnJxcZGTk1P6r2vXrikhIUEJCQmKj4/XTz/9pLi4OP3yyy9KSUlR4cKF1bBhQ40cOVJNmjRRtWrVjL7bAAAAwBNJTU3VyJEjNXXqVPXs2VNz5syRg4OD0VkwEIPIQA4VGhqqxo0bG50BAAByuQsXLmjmzJmaPXu2ChUqpAEDBuj999+Xq6ur0WkAAGQLERERWrhwoZYvX658+fKpS5cuev/991WuXDmj0wAAAAAAAABksTt37iguLk4xMTE6fPiwYmNjFRMTo19++UVpaWkqWLCgKleurCpVqqh3796qWrWqzGazypQpY3Q6AAAAkGf4+/urQYMG6tWrlxo3bqx+/fpp6tSpyp8/v9FpQJ6wfv169ejRQ8WLF9f+/fs5YUcecu7cOUVERKT/+uGHH3T58mXZ29vLy8tLFotFnTt3lp+fnypXrixbW9ss6WIMGQCe3e+//65bt26ln3jRwcFBJpNJdevWTR8/rlKlyt9OaHDw4EFJkouLixHZ2Z6Li4uuX79udAbykHLlyql48eI6ePAgg8gAAAAAAAAAkMlsbGw0Y8YMlSpVSkOHDlVYWJgWL16c7f/e5Nq1a+revbs2btyo6dOn56ghWCCj8PwFkBfZ29urUaNG+u677/Tuu+8anZMtXL58WQcOHFCfPn2MTpH09GPX2cW948WP496x4wf93sMut1qtj33sB932gy6/36DtvW//deRWuv9Q7/2Oe7/jPOgYGXHf7+17nPe/33Gf9O0HPTb3e/tRt3O/x/Bh9+VpPjYPGyp+ksa/vv2oYz3sc/5pHmcAwN85OjqqefPmat68uSTp+vXrio6OVlxcnE6cOKG4uDht375d8fHxSkxMTP/l5uYmZ2dnOTk5qXDhwvL09FSXLl3k5eWlihUrymw2y96euTAAAADkTFeuXFH79u21e/duLV68WN26dTM6CdkAf8IBcqCkpCSFh4erb9++RqcAAIBc6vTp0woKCtLChQvl4uKiMWPGqH///ipYsKDRaQAAGC45OVnBwcGaM2eOwsPDVb16dc2ePVsdOnSQo6Oj0XkAAAAAAAAAssBvv/2WPnx85MgRHTlyRMeOHVNycrIcHBzSfwipe/fuMplMqlq1qjw9PbNszAcAAADAg5UoUULr16/XF198oQ8++EC7du3S8uXLVbVqVaPTgFzr1q1bGjZsmGbPnq1OnTpp/vz5KlSokNFZyCTXr1/X4cOH08eP9+7dq9OnT0uSPD095efnp9GjR8tisahmzZoqUKCAwcUAgGcRHx+v3r17P3T8+H4SEhIkSc7OzpmdmCM5OzunP0ZAVqlZs6bCw8ONzgAAAAAAAACAPGPIkCGqWbOmOnTooBo1amjFihWqW7eu0Vn3FRYWpsDAQCUnJ2v79u1q2LCh0UmAoXj+Ashr2rVrpy5duujChQsqUaKE0TmGCw4OloODg1q3bm10Sp5y70DtX//93sHXv47JPs3g8r3HfdBtP+zyh43tPsqDbuNh173fsO2z3vd7b/9xb+9h7/egAd5HPc6P0/coGfE4POlj8Lgtz/rxe5zb+/P3n+VxBoC8rnDhwmrQoIEaNGhgdAoAAABgiMOHD+vNN99UcnKydu/eLV9fX6OTkE0wiAzkQHv27FFycrIaNWpkdAoAAMhlYmJi9OmnnyokJETlypXTnDlzFBgYqHz58hmdBgCA4S5duqQFCxZo7ty5unTpkt566y3NmDFD9evXNzoNAAAAAAAAQCZJSEjQiRMnFBsbq6NHjyo2Nlbh4eG6cOGCJMnNzU0mk0mNGjVS3759ZTKZZLFY5OjoaHA5AAAAgIexsbFRr1691LRpU3Xp0kW+vr6aOHGiBg8ezMlcYKjk5GSdPHlScXFxOnXqlC5evKjExETduHFDN27ckJubmwoVKqRChQqpVKlS8vLykpeXl8qUKWN0+gMdP35c7dq10+nTp7Vy5Uq1b9/e6CRkoFu3bikqKkoHDhxQeHi4Dh48qJMnT8pqteqFF16Qr6+v+vTpI19fX1ksFkYvASAXqly5subPn//E1/tz7NfJySmjk3IFBpFhBF9fX61cudLoDAAAAAAAAADIU1566SVFRUWpS5cuql+/vrp3765PP/1Uzz33nNFpkqSLFy9q+PDh+uqrr9SyZUstWbJExYoVMzoLyBZ4/gLIS95880317dtXwcHBGjhwoNE5hlu+fLneeustXveSxTJizDY3yymPT2Z1PmyA+q/j2NnV07Q97L5l5/sKAAAAAAByppCQEPXo0UM1atTQmjVrVKJECaOTkI0wiAzkQKGhoapYsaJKly5tdAoAAMglYmJiNHXqVK1atUqVK1fWl19+qQ4dOsjenj8yAABw/PhxBQUFafny5cqfP7969eqlfv366fnnnzc6DQAAAAAAAEAGSU1N1ZkzZxQbG6uIiIj08ePjx48rLS1Nzs7O8vLykslk0ogRI2Q2m+Xt7a3ixYsbnQ4AAADgGXh6emrnzp2aPn26RowYodDQUC1ZsiTbnJAQuV98fLx2796t0NBQhYaGKiYmRikpKbKxsVHp0qVVokSJ9AFkJycnnTp1Kn0g+bffftPVq1cl/W8wr27dumrcuLEaN26smjVrys7OzuB7Jy1btkx9+/aVyWTSjz/+qBdffNHoJDyDtLQ0xcXFpQ8fHzhwQNHR0bpz546KFCmiWrVqqX379vL19ZWvry8/yAoAAJDD+Pr6aty4cbp8+bKKFi1qdA4AAECekZaWZnQCAAAAAIMVL15cW7ZsUUhIiAYPHqx169Zp1KhR6tWrlwoWLGhI040bN7RgwQJNnDhRjo6OCg4OVps2bQxpAbIznr8A8gpHR0e9/fbb+vLLLzVgwID0Ac68KDY2VgcOHNC4ceOMTgGyjI2NTfrA7p8jvDlpcPfP1pzW/Thy830DAAAAAADZw507dzRs2DAFBQVp4MCBmjZtGltW+Bs+I4AcKDQ0VI0bNzY6AwAA5ALR0dEaN26c1q1bp2rVqmnt2rV644038vQLjAAA+NP27ds1c+ZMbdmyRZ6enpoyZYq6du0qJycno9MAAAAAAAAAPIOrV6/+bfg4MjJSSUlJsre3l4eHh0wmkwICAmQ2m2UymVS5cmXZ2toanQ4AAAAgE9jZ2WnYsGFq2LCh2rdvLx8fH61evVr169c3Og25VHJysjZt2qSlS5dqy5YtSklJUdWqVdW4cWN99NFH8vLykpeXlxwdHR95WxcvXlRcXJxiY2O1e/du/fOf/9SIESNUokQJtW/fXp07d5aPj08W3Ku7Xb9+Xb1791ZwcLD69++v6dOny8HBIcs78GzOnz+v8PBwRUREKCIiQj/88IMuX74sBwcHVahQQfXr11f//v1lsVhkMpl4/TEA5FFWq1UdO3ZUlSpVZLFYVLNmzccaUnV2dpYkJSYmqkiRIpmdmeMkJCSkP0ZAVqlVq5asVqsOHTqk5s2bG50DAACQq124cEFbt27Vpk2b9N133xmdAwAAACCbaNu2rVq1aqXx48dr1KhRmjRpkgYNGqS+ffvKxcUlSxri4+M1d+5cBQUFKSkpSe+9955GjRrF31sAj8DzF0BeMGDAAPn4+GjLli1q1aqV0TmGmTx5sipXrqymTZsanZJrZJch1wd13DsA/OfrZf/8vftd/rD786DL773dzLgvT/P+97sso0aRH3Xch13vYdfPiI/HkxzvaTzpY55R7/eoz2cAAAAAAIC/+u2339S2bVsdPnxYK1asUIcOHYxOQjZlY+W7S0COkpCQoCJFimjlypVq06aN0TkAACCHiomJ0dSpU7Vy5UqZzWaNHj1a/v7+nIgMAJDnJScna/Xq1Zo5c6aio6PVsGFDDRo0SK+//jpjJwAAAAAAAEAOk5ycrJ9++umu4eNDhw7p/PnzkiQ3NzeZTCZZLJb04eMaNWqoYMGCBpcDAAAAMMqVK1fUrVs3bd26VfPnz1f37t2NTkIucvHiRQUFBenzzz/XtWvX9PLLLyswMFAtW7bUc889l2HHOXr0qNauXasVK1bop59+UrVq1TR06FC1bdtW9vb2GXacBzl48KA6dOighIQELV26VC1atMj0Y+LZ3bhxQ5GRkenjx39+P0WS3N3dVb9+ffn5+aUPXRYoUMDgYgBAdvLiiy/q9OnT6SdELFWqlGrXri1fX19ZLBZZLJa/jSQfPHhQtWvX1i+//KIXXnjBiOxsbcqUKVq4cKF+/vlno1OQx5QrV049evTQqFGjjE4BAADIVVJSUrR//35t2bJFGzduVExMjGxtbWVjY6OUlBR5eHgoJiaGgSIAAJAjcH6iRwsJCeE8kXhmly5d0pw5czRr1izdvHlTTZs2VefOnfWPf/xDDg4OGXqs1NRUhYaGatmyZfrXv/4lW1tbdevWTSNGjFDJkiUz9FhAXsDzF8+Kr7ceja+3jPPqq6/qypUr+uGHH4xOMcSpU6dUsWJFLVmyRB07djQ655l9/fXXatu27ROPoN7vv1MPG/i99/J7r/+osdpHHet+x3nQf0v/HIO939uPO4r7oDHgh93Ogx6LB93ugxof9PaDjvG4t/Oo5nvf51Efw8e5v49z2b2P88M+Bo/z+fag23qQJ/3YPMjDPkYP63yaz4OH3d6j7tvjCggIkCStWbPmsa8DAAAAAAByntDQUHXo0EEuLi5au3atqlSpYnQSsjEGkYEcZtOmTWrdurV+//13lShRwugcAACQwxw5ckTjx49P/8MiQ8gAAPxPfHy8lixZounTp+v3339Xy5YtNXLkSNWpU8foNAAAAAAAAACP4dy5c3cNH0dEROj48eNKS0tTvnz5VL58+buGj319fTmxBwAAAID7slqtGjt2rMaNG6f+/ftr5syZsrW1NToLOdj58+c1efJkffHFFypUqJAGDBigbt26qXTp0pl+7B9++EHz5s1TcHCwXnjhBQ0fPlxdu3bNlGFkq9WqKVOmaPTo0XrllVe0ZMkSFStWLMOPg2eXmpqq48eP3zV+HB4eruTkZJUsWVI1a9ZMH6+sV6/e3wYsAQC4V8uWLbV169a7fs/Gxkb58uXT7du3JUlFixa9ayS5SJEiql+/vqKjo+Xt7W1Edrb20UcfafPmzYqKijI6BXlM27ZtdevWLW3YsMHoFAAAgBzvjz/+0K5du/Ttt99qw4YNSkhIUP78+dP/nPQnW1tb7d27V3Xr1jWoFAAA4MlwnqJHY6APGSk+Pl5ff/21lqWvnhYAACAASURBVC1bprCwMBUtWlQvvfSSmjRposaNG6tSpUpPdbvHjx9XaGioduzYodDQUF25ckUNGjRQYGCg2rRpo8KFC2fwPQHyHp6/eFp8vfVofL1lnH379snPz0//+c9/1KxZM6Nzslz37t21e/duHT9+PFNei5vVnnYQGcgqTzrUi6zBIDIAAAAAALmb1WrV1KlTNXLkSL3++uv66quv5OLiYnQWsjkGkYEcZsiQIfr3v/+tI0eOGJ0CAABykL8OIVetWlWjRo1iCBkAAElxcXEKCgrSsmXLlD9/fvXq1Uv9+vXT888/b3QaAAAAAAAAgPu4evWqYmNj7xo+joqK0o0bNyRJ7u7udw0fWywWVa5cmfEyAAAAAE9sxYoVeuedd/Taa69p1apVypcvn9FJyGFSU1M1d+5cjRkzRk5OTho6dKh69uypggULZnnLqVOnNHnyZC1dulQmk0nz5s3L0HGNy5cvq0uXLvrPf/6jyZMna9CgQbxGNRs5d+7cXePHe/fu1bVr11SoUCFVr149ffz4z++pAADwpN5//33Nnz9fycnJD30/W1tb2dvb3/V+9evX19KlS+Xp6ZnZmTlKu3btdPv2ba1bt87oFOQx06ZNU1BQkM6ePWt0CgAAQI506NAhffPNN9q4caOOHj0qW1tb2djYKCUl5b7vb2trq3HjxmnkyJFZXAoAAPD0+LvgR2OgD5nl1KlTWr9+vXbs2KHdu3crISFBhQoVkpeXl7y8vFSuXDm5urrKxcVFTk5OkqTExETFx8fr2rVrOn36tE6cOKETJ07oxo0bcnZ2VqNGjdSkSRO9+eabKlu2rLF3EMjFeP7iSfD11qPx9ZaxXn/9dZ08eVJRUVF56vXV+/fvl5+fn1auXKl27doZnZMhGERGdscgcvbEIDIAAAAAALnX5cuX1alTJ33//feaMGGChg0bZnQScggGkYEcxmKxyM/PT7NmzTI6BQAA5ACHDx/WhAkTGEIGAOAeO3bs0MyZM7V582Z5enpq4MCB6tatmwoVKmR0GgAAAAAAAABJycnJ+umnnxQREZE+fnz06FGdOnVKkuTm5iaTyXTX8LGPjw/f4wMAAACQofbs2aPWrVurbt26+uabbwwZskXOFBkZqR49eig2NlZDhgzRyJEjs8XnT1xcnPr166ft27erR48emjFjhpydnZ/pNiMiIhQQEKA7d+4oODhYfn5+GVSLp5GQkKDo6GhFREQoLCxMe/bs0fnz52VnZ6eKFSveNX5cq1atPHUyQgBA5pkzZ44GDx6sO3fuPNb729vbKy0tTY6Ojnrvvfc0ZcqUTC7MeXx8fNS8eXNNnjzZ6BTkMdu3b1fTpk31+++/q2TJkkbnAAAA5DhbtmzRq6+++lgn53dwcJCvr692794tOzu7LKgDAADIGJy36NEY6ENWSElJUUREhGJiYnTixAnFxcXpzJkzun79uq5du6bExERJkpOTk1xdXVW4cGGVLVs2fXy1atWqqlGjhuzt7Q2+J0Dew/MXj8LXW4/G11vG+vXXX2UymTR69Og8M4aRlpamunXrytHRUaGhobnmecogMrKzvz7P+BzNXhhEBgAAAAAgdwoLC1P79u1la2urNWvWyNfX1+gk5CD8zSWQg1y7dk3R0dEaNWqU0SkAACCb++sQsre3t0JCQhhCBgDkecnJyQoODtbMmTMVFRWlRo0a6V//+pdat24tW1tbo/MAAAAAAACAPOvcuXN3DR9HREQoLi5Oqampypcvn8qXLy+LxaJevXrJZDKpZs2acnd3NzobAAAAQB7QoEEDbd++XS1atFCLFi20efNmOTk5GZ2FbG7u3Ln64IMPVLduXR0+fFgVK1Y0OildxYoVtW3bNoWEhGjgwIHatWuXQkJC5OPj81S3t3DhQvXv31/169fXqlWrVKJEiQwuxsOkpKQoLi4uffx47969On78uNLS0uTu7i6LxaJ3331XFotFDRo0kKurq9HJAIAc7tatWzp58qROnjypn3/+Of3fY2JiHmsM2d7eXqmpqXrllVc0adIkDR06VJcuXcqC8pzFarXq5MmT6t+/v9EpyINq1KghGxsbRUVFqUWLFkbnAAAA5DgtW7ZUnz59tHDhQqWkpDzw/WxsbJQ/f36tWrWKMWQAAAAAT8Xe3l61a9dW7dq1jU4B8IR4/gLI6Tw8PDRixAiNHz9eb7/9tsqXL290UqYLCgpSVFSUoqOjOacrkEUYQQYAAAAAAMgaaWlpmjRpksaOHasWLVpo6dKlKlKkiNFZyGEYRAZykF27dslqtapBgwZGpwAAgGzq0KFDGjt2rDZt2iRfX19t3LhRr776qtFZAAAY6vLly1qwYIHmzJmjS5cuqU2bNlq0aJEsFovRaQAAAAAAAECecu3aNcXExNw1fBwdHa3ExERJSh/qad26tYYNGyaLxaJKlSpx0k8AAAAAhrJYLNq1a5eaNGmiN954Q5s2bVKBAgWMzkI2lJiYqK5du2r9+vUaPXq0Ro8eLVtbW6Oz7qtt27Zq2LChOnbsqHr16ikoKEjvvvvuY18/ISFBPXv21Nq1azVq1CiNGTMm297X3OTcuXN3jR//+OOPunnzppydneXt7a2mTZvqk08+UYMGDVSyZEmjcwEAOVRiYmL60PG9w8dnz55NP9Fk6dKlVb58eb344ouqVq2aPvvsswfepoODg+7cuaMGDRpo2rRp6a/hrVKlinbu3JkVdytHiYuLU2JioqpUqWJ0CvIgNzc3lSlTRj/++CODyAAAAE/ps88+044dO3Ty5MkHjiJbrVYtXLhQL7zwQhbXAQAAAAAAAMCzGzp0qNatW6c2bdpo3759ufq11eHh4RoxYoQ+/vhjVapUyegcAAAAAAAAAMgwFy5cUJcuXbRjxw6NHDmScwbgqTGIDOQgoaGh8vb21nPPPWd0CgAAyGaOHDmiMWPGaMOGDapVq5a+++47tWrVyugsAAAMdebMGc2YMUOLFy+WnZ2dunbtqg8++EAeHh5GpwEAAAAAAAC52p07d3TixIm7ho+PHj2qU6dOSZJcXV1lNptlNpsVEBAgi8Wi6tWry8nJyeByAAAAALg/k8mkbdu26aWXXlLbtm31zTffyN6eH8nB/7l48aJatWqlX3/9Vdu2bVPjxo2NTnokd3d3bdu2TWPHjlWfPn105swZTZw4UTY2Ng+93rFjx+Tv76+LFy9q8+bNeuWVV7KoOG+Jj49XeHi49u7dq4iICB04cEAXL16Uvb29vLy8ZLFY1LlzZ/n5+aly5cr8cCkA4IlcvXpVp06duu+v06dPp48eu7m5ydPTUyaTSS1atJCnp6c8PT3l5eUlZ2fn9NtLSUlRUFCQUlNT7zqOnZ2dUlNTZbFYNGXKFDVs2PCuyxs1aqR//vOfunTpEj83+xc7duyQs7OzfHx8jE5BHuXj46PIyEijMwAAAHKsAgUKaOXKlapdu/Z9L3dwcFD79u3Vvn37LC4DAAAAAAAAgIyRL18+hYSEyGKxaMiQIZozZ47RSZni2rVratu2rerXr69hw4YZnQMAAAAAAAAAGeb7779XYGCgChQooN27d6tOnTpGJyEH4+wrQA4SGhqql19+2egMAACQjZw+fVqTJ0/W4sWLVblyZYWEhMjf3/+RJ6MDACA3i4mJ0dSpUxUcHCx3d3dNnDhR77zzjgoVKmR0GgAAAAAAAJDrnDt37m/DxzExMbp9+7YcHBxUoUIFmc1mBQYGymKxyGw2y9PT0+hsAAAAAHhiVatW1caNG/XKK6/ovffe04IFC4xOQjZx5swZNW/eXLdv39aePXvk5eVldNJjs7Oz07hx41ShQgX16NFDZ8+e1aJFi+Tg4HDf91+2bJn69OmjmjVratu2bSpVqlQWF+dOd+7c0eHDh9PHjyMiInTs2DFZrVa5u7vLYrHogw8+kJ+fnywWixwdHY1OBgDkAA8bPT516pQkyd7eXh4eHulDx02bNk3/90qVKj32a2/t7e1VsmRJnT17Nv3tlJQUWSwWffrpp2rSpMl9r/fSSy/JxsZGu3fv1ltvvZUxdzwX2LFjhxo1avTAr8mAzObj46Ply5cbnQEAAJBj/f777xo5cqRKly6t//73v0pLS0u/zM7OTiVLltTs2bMNLAQAAAAAAACAZ/fiiy9q0aJFatOmjapVq6aePXsanZSh7ty5o3bt2un27dtavXq17OzsjE4CAAAAAAAAgGeWkpKiCRMmaPz48erYsaPmzZsnJycno7OQwzGIDOQQly9fVkxMjCZMmGB0CgAAyAZ+/fVXTZw4UV9++aUqVKigL7/8Up06dZKtra3RaQAAGGbv3r2aMmWKNm3apPLly2vatGnq3bu38ufPb3QaAAAAAAAAkONdvXpVhw8fVkxMjA4fPqwjR44oJiZGCQkJsrGxUdmyZeXt7a0WLVroww8/VNWqVVWhQgXZ2/MSNQAAAAC5R7169bRy5Uq99dZb8vb21nvvvWd0Egx29uxZNWrUSK6urtq5c6dKlixpdNJTCQwMVJEiRdSmTRulpqZq+fLlsrGxSb/81q1bGjBggBYtWqT+/ftr+vTpDPQ9g1OnTt01fnzo0CHdvn1bLi4u8vX1VUBAgCwWi+rUqaNixYoZnQsAyMbuN3ocGxurmJgYxcfHS5IcHBxUpkyZ+44em0wmOTo6ZkhLpUqVdO7cOVmtVlWtWlWTJ0/WK6+88tDruLi4yMfHR9u2bWMQ+f9LSUnRzp07NXLkSKNTkIfVqFFDY8eOVXx8vFxcXIzOAQAAyFG2bt2qbt26qUCBAlq2bJlGjRql/fv3686dO+nv8/XXX6tw4cIGVgIAAAAAAABAxvD399fHH3+sPn36yM3NTf7+/kYnZQir1aqePXtqz5492r59u4oXL250EgAAAAAAAAA8sxMnTqhjx446fvy4lixZosDAQKOTkEtwtkkghwgNDZWNjY0aNGhgdAoAADDQb7/9pmnTpmnBggVyd3fX3Llz1aNHD9nZ2RmdBgCAIaxWq7777jtNmTJFYWFh8vPz04YNG/Taa6/ddVJWAAAAAAAAAI8nNTVVZ86cUWxsrCIiInT06FHFxsbq2LFjslqtcnFxUfny5WUymdS2bVuZzWb5+PioaNGiRqcDAAAgDwgICDA6IdsbPHiw6tata3RGrvbGG29o/Pjxev/992UymdS4cWOjk2CQ+Ph4vfrqq3JyctKOHTtUpEgRo5OeyauvvqqNGzeqVatWcnFx0dy5cyX97wcbAwICdObMGa1du5axwid07ty59OHjiIgI7du3T1euXJGDg4O8vb3l5+enXr16yWKxyGQy5ejXPPH/aQDIGmfOnNGJEyeUmJio1NRUSZKjo6PKly+v8uXLq27dugoMDEx/u0yZMrK1tc30rooVK+r8+fOaNGmSXn/99ce+3ltvvaXPPvtM//znP5UvX75MLMwZtm7dqitXruiNN94wOgV5mI+Pj6xWq6Kjo9WwYUOjcwAAAHKEmzdvavjw4Zo1a5YCAwM1d+5cOTs7a8WKFTKbzUpJSZGNjY3Gjh2rOnXqGJ0LAAAAAAAAABnm448/1oULFxQYGKiiRYvm+NdWW61WDR48WKtXr9Z3333H93QBAAAAAAAA5HhWq1Wff/65hgwZosqVKysiIkJeXl5GZyEXYRAZyCFCQ0Pl4+MjV1dXo1MAAIABLl26pOnTp2vWrFl67rnnNGvWLHXv3l329nxJDwDIm+7cuaNVq1Zp2rRpOnr0qF577TXt3btXfn5+RqcBAAAAAAAAOcbVq1cVHR2tw4cP6/Dhw4qOjlZsbKxu3rwpe3t7eXl5ydvbW4GBgapWrZqqVq2q559/3uhsAAAA5GFr1641OiHbCwgIYBA5C4wYMUJRUVHq2LGjoqOjVaxYMaOTkMVu3bqlVq1a6erVqwoLC8vxY8h/atKkiZYsWaKOHTuqbNmyKl++vLp166by5csrMjJS5cqVMzoxW0tMTFRUVFT6+PHevXt1+vRpSZKnp6f8/Pw0ZswYWSwW+fr6Kn/+/AYXZ6y1a9eqTp06fP8IADKZo6Oj3N3dlZycrFOnTum3335T6dKljc7SyJEjNXv27CceX+7cubNGjx6tLVu2MAIsafny5WrQoIE8PT2NTkEe9vzzz6tYsWKKjIxkEBkAAOAxhIeHq1OnTvrjjz+0atUqtW/fPv0yDw8PLViwQB07dlTdunU1fPhwA0sBAAAAAAAAIHPMnj1bV69eVatWrbR69Wr94x//MDrpqaSkpKh3795aunSpVqxYoWbNmhmdBAAAAAAAAADP5I8//tA777yjzZs3a8iQIRo3bpzy5ctndBZyGdbTgBwiNDRUr732mtEZAAAgi125ckWzZs3SzJkzlT9/fn388ccaOHCgChQoYHQaAACGuHHjhhYtWqQZM2bo999/V7t27RQSEiKz2Wx0GgAAAAAAAJBtpaam6syZM4qNjVVERISOHj2q2NhYHTt2TFarVa6urjKbzapRo4Y6deoki8WiGjVqqGDBgkanAwAAAEC2ZGNjoy+++EI+Pj7q3LmzNm/eLBsbG6OzkIUGDx6s2NhY7d+/P9eNv7Zr107nzp3Thx9+KEl67733NG3aNH6w8R4pKSmKi4tLHz8OCwtTZGSk0tLS5O7uLovFos6dO8tiscjPzy/XjGY/yqBBg9SmTRujMwAgT/j666/Vtm3bbDGGLEmlSpV6quuVLl1aL730kpYuXZrnB5GvXbumjRs3atasWUanAKpevboiIyONzgAAAMjWUlNTNX36dI0ePVqNGjXSjh077vtntA4dOigsLEzDhg2TnZ2dAaUAAAAAAAAAkLns7Oy0YsUK9e/fX/7+/vr888/1zjvvGJ31RG7evKl27drp+++/1/r16/Xqq68anQQAAAAAAAAAz+Rf//qX3n33XTk5OWnHjh1q2LCh0UnIpRhEBnKACxcu6Pjx45o+fbrRKQAAIIskJiZq7ty5mjx5suzs7PTRRx+pf//+nHQeAJBnXbp0SbNnz9bcuXN169YtvfPOOxo8eLA8PDyMTgMAAAAAAACylfj4eB05ciR99DgiIkKRkZFKSkqSvb29PDw8ZDKZFBAQIIvFIrPZrHLlyjHcBQAAAABPyMXFRStXrlTDhg21YMEC9e7d2+gkZJE1a9Zo/vz5WrVqlSpVqmR0TqYYPHiw9u3bp127dmn48OGMIUs6ffq09u/fr4MHD+rgwYOKjIzUzZs35ezsrJo1a6pZs2YaOXKkatWqlW2GKQEAyCl69uypjh076qefflKFChWMzjHMvHnzlC9fPgUEBBidAsjHx0dbtmwxOgMAACDb+uWXX9S5c2eFh4dr/PjxGjp0qGxtbR/4/nPnzs3COgAAAAAAAADIenZ2dpo3b55KlCihXr16KTIyUp999pkKFChgdNojnThxQm3atNFvv/2m77//XnXr1jU6CQAAAAAAAACe2vXr1zV06FAtXLhQgYGBmjdvnpycnIzOQi7GIDKQA+zZs0e2trby8/MzOgUAAGSypKQkzZkzR1OnTlVqaqo++OADDRw4UM7OzkanAQBgiDNnzmjGjBlavHixHB0d1a9fP/Xv319FixY1Og0AAAAAAAAwVGpqqs6cOZM+evznAPKxY8dktVrl6uoqs9kss9mcPn5co0YNFSxY0Oh0AAAAAMg16tatqw8++EDDhg3Ta6+9pueff97oJGSyM2fO6J133lG/fv3Uvn17o3My1aJFi2SxWNS9e/c8N4QWHx+vgwcP6sCBAzpw4IAOHjyoP/74Q/b29qpatapq166td955R7Vq1VLlypUfOnQCAAAezd/fX2PGjNGUKVO0aNEio3MMcePGDQUFBalfv35ycXExOgeQj4+PZsyYoVu3buWIk1MDAABkpTVr1qhXr14qXbq09u/fr2rVqhmdBAAAAAAAAADZxscffyyz2ax33nlHP/zwg0JCQlShQgWjsx5o1apV6t27typVqqTw8HCVK1fO6CQAAAAAAAAAeGo7d+5Ut27dlJSUpG+//VatW7c2Ogl5AIPIQA6wZ88eVatWjR9iBgAgF0tJSdGXX36psWPHKj4+Xv369dOwYcPk5uZmdBoAAIY4cuSIpk6dquDgYJUuXVqTJk1Sjx49VKhQIaPTAAAAAAAAgCwXHx+vI0eOpI8eR0REKDIyUklJSbK3t5eHh4dMJlP68LHZbFa5cuVkY2NjdDoAAAAA5Hoff/yxvvnmG/Xv31/r1q0zOgeZbODAgSpVqpSmT59udEqmc3V11fLly9WgQQMFBwerXbt2RidlitTUVB0/flwRERGKiIhQWFiYIiMjlZaWJnd3d1ksFvXp00f169dXvXr1VLBgQaOTAQDIdezs7DRs2DD16dNHY8aMkYeHh9FJWW7BggVKSkrS+++/b3QKIOl/g8gpKSmKiYlRzZo1jc4BAADIFq5du6a+ffsqODhY/fv319SpU5U/f36jswAAAAAAAAAg2/H395evr6/atWunatWq6cMPP9SIESOy1fdUz549qxEjRmj58uXq1auXZs+erXz58hmdBQAAAAAAAABPJTExUcOHD9e8efP0+uuva+HChSpevLjRWcgjGEQGcoC9e/eqfv36RmcAAIBMsnHjRg0ZMkSnT59Wt27dNHbsWJUsWdLoLAAADLFv3z5NmjRJmzdvVpUqVfTll1+qXbt2cnBwMDoNAAAAAAAAyHSpqak6c+ZM+ujxnwPIx44dk9Vqlaurq8xms8xmc/r4cY0aNRjiAQAAAAADOTo6av78+WrWrJm+//57NW3a1OgkZJKtW7dqw4YN+v7777PVCdkyU7169dStWzcNGjRILVu2lIuLi9FJz+zcuXN3jR/v27dPSUlJcnJyUrVq1eTn56cBAwaoYcOGKlu2rNG5AADkGZ06ddLEiRP14YcfKjg42OicLHXx4kVNnDhR7733np577jmjcwBJUoUKFeTs7KzIyEgGkQEAACR9//336tq1q1JTU7Vp0ya1bNnS6CQAAAAAAAAAyNZeeOEF7dq1S9OnT9fEiRMVEhKioKAgNW/e3NCumzdvKigoSBMmTFCZMmW0bds2Xv8NAAAAAAAAIEfbs2ePevTooYsXL+rzzz9Xr169jE5CHsMgMpDNXb9+XdHR0RoxYoTRKQAAIIOFhYVp+PDhCgsLk7+/vzZt2qTy5csbnQUAgCFCQ0M1fvx4hYaGqn79+tq4caNatWolGxsbo9MAAAAAAACATBEfH68jR46kjx5HREQoMjJSSUlJsre3l4eHh0wmU/rwsdlsVrly5fieGQAAAABkQ02bNlXr1q01ZMgQ/fjjj7K1tTU6CRksOTlZffv2Vfv27fXyyy8bnZOlJk+erPXr12vixImaOnWq0TlPJDExUVFRUekDyHv27NEvv/wiOzs7VaxYURaLRZMmTVL9+vXl4+PDcxcAAAPly5dP8+bNU4sWLdSlS5c8NS42bNgw5c+fXx999JHRKUA6W1tbeXt7KzIy0ugUAAAAQ926dUuffPKJpk2bpjfffFMLFixQ0aJFjc4CAAAwlNVqNToBAAAAQA6RL18+ffTRR+rYsaMGDhyoFi1aqE6dOho5cqReffXVLP152YSEBM2fP18zZsxQQkKCPvroIw0ZMkT58+fPsgYAAAAAAAAAyEjXr1/X6NGjNWfOHLVq1Uo7d+5UqVKljM5CHsQgMpDN/fDDD0pNTZWfn5/RKQAAIIPExMRo3LhxWrNmjZo2bapDhw6pRo0aRmcBAGCILVu2aMKECdq3b59efvllhYaG6qWXXjI6CwAAAAAAAMgwqampOnPmTProcUREhI4eParTp0/LarXK1dVVZrNZFotFnTt3lslkksVikaOjo9HpAAAAAIAnMHXqVFWtWlUrV65UYGCg0TnIYMuXL9fZs2c1ZcoUo1Oy3HPPPadRo0Zp1KhRGjp0qIoVK2Z00n2lpqbq+PHj6d9/CQsLU1RUlFJTU+Xu7i6LxaIuXbrIYrGoQYMGcnV1NToZAADco3nz5nrzzTc1aNAgNW7cWAUKFDA6KdOFhYVpyZIlCgkJkYuLi9E5wF18fHwUHh5udAYAAIBhYmNj1alTJ506dUrz589Xr169jE4CAAAAAAAAgBzphRde0Pr163XgwAFNnDhRr7/+uqpUqaLu3burffv2KlGiRKYd+9ChQ1qxYoWWL1+uO3fuqG/fvho8eLCKFy+eaccEAAAAAAAAgMz2n//8Rz179lRCQgKvc4XhGEQGsrk9e/aoQoUKcnd3NzoFAAA8ozNnzmjSpElatGiRLBaLtm/friZNmhidBQBAlrNarfruu+80YcIEHTx4UE2bNtW+fftUt25do9MAAAAAAACAZxIfH68jR47o6NGj6QPIkZGRSkpKkr29vTw8PGQymRQYGCiLxSKz2SxPT0+jswEAAAAAGaBSpUpq3769pk6dqk6dOsnGxsboJGSQ1NRUTZkyRV26dFGZMmWMzjFEr1699OmnnyooKEgTJ040OkeS9Pvvv+vQoUN3DSBfvXpVhQoVUvXq1eXn56cBAwaofv36fP8FAIAcJCgoSN7e3ho8eLDmzZtndE6munbtmgIDA9WyZUsFBAQYnQP8jY+PjxYvXqyUlBTZ23NaCgAAkHdYrVbNmjVLw4YNk4+PjyIiIlS+fHmjswAAAAAAAJBH+Pv7G52Q7eXV13LmBrVr19a3336r6OhozZ49W5988omGDh2qV155Ra1atVKTJk1UuXLlZzrG7du3tX//fm3fvl1r167VsWPHVLFiRQ0ZMkS9e/eWm5tbBt0bAAAAAAAAAMh6V65c0dChQ/XVV1/J399fc+fOVbFixYzOQh7HT54B2dzevXtVv359ozMAAMAzuHTpkqZPn66goCCVLVtWwcHB8vf352SHAIA8Jy0tTZs2bdLYsWP1448/6tVXX9XBgwfl6+trdBoAAAAAAADwRFJSUvTrr7+mqyStGwAAIABJREFUjx5HRETo6NGjOn36tKxWq1xdXWU2m2WxWNS5c2eZTCZZLBY5OjoanQ4AAAAAyERDhw5VtWrVtHXrVrVs2dLoHGSQNWvW6NSpU9q8ebPRKYYpWLCgBg0apMmTJ+vDDz+Ui4tLlh7/xo0bioyMTP8+zJ/fi5EkT09P+fn56eOPP5bFYlGtWrWUL1++LO0DAAAZx8PDQ4sWLVJAQIDq16+vDh06GJ2UKaxWq3r06KGkpCQtXrzY6Bzgvnx8fHTz5k2dOHFCJpPJ6BwAAIAscf78eXXv3l3btm3TyJEjNXr0aNnZ2RmdBQAAAAAAgDxkzZo1RicAma5atWpatGiRZs+erQ0bNig4OFgfffSRrl+/Lnd3d9WrV09eXl6qWLGiKlSooOLFi8vJySn919WrV5WQkKDExESdPXtWJ06c0PHjxxUbG6v9+/fr5s2b8vT0VKtWrfTVV1+pdu3aRt9lAAAAAAAAAHhmy5cv15AhQ2RnZ6c1a9bo7bffNjoJkMQgMpCtJScnKzw8XF26dDE6BQAAPIXExETNnTtXkyZNkrOzs2bNmqXu3bvL3p4vwwEAeUtaWpq++eYbjRkzRidOnFCrVq106NAh1ahRw+g0AAAAAAAA4JGuXbummJgYHT16NH0AOTIyUklJSbK3t5eHh4dMJpMCAwNlsVhkNpvl6elpdDYAAAAAwABVq1ZV8+bNNW3aNAaRc5EvvvhCb7zxhsqXL290iqH69OmjcePG6euvv1bPnj0z9VinTp3S3r1708ePw8PDlZycrJIlS6pmzZoKCAiQxWKRn5+fihQpkqktAAAg6/n7+6tfv37q06ePqlevniuHWKdPn64NGzZo+/btKlmypNE5wH2ZTCY5ODgoOjo6Vz4PAQAA7vXNN9/o3XfflYuLi3bt2qV69eoZnQQAAAAAAAAAuZqjo6PatWundu3aKSUlRREREdqxY4d+/PFHbdq0STNmzNDt27cfeTtFixZVxYoVVblyZXXq1ElNmjRR2bJlM/8O5BI2NjZGJwDIYfz9/Y1OAAAAAAAgT/n555/Vt29fbdu2TZ06ddLMmTNVtGhRo7OAdCyxAdnYoUOHlJSUpAYNGhidAgAAnkBycrKWLFmiMWPGKCkpSYMHD9awYcPk6OhodBoAAFnqzp07Wr16tSZMmKCff/5Zb7/9ttatW6dKlSoZnQYAAAAAAAD8TVpamk6ePKmoqChFRUUpOjpa0dHROnv2rCSpWLFi8vb2Vu3atdWzZ095e3vLbDYrX758BpcDAAAAALKToUOH6uWXX9b+/ftVp04do3PwjH777Tft3LlT69atMzrFcC4uLnrjjTe0fPnyDB1EPn/+vMLDw9PHj/ft26crV67IwcFB3t7e8vPzU69evWSxWGQ2mzPsuAAAIHubPn26oqKi1KJFC4WFhalMmTJGJ2WYVatWafjw4Zo2bZoaNWpkdA7wQPnz55eXl5eOHDmi9u3bG50DAAAMkJycrJMnTyouLk6nTp3SxYsXlZiYqBs3bujGjRtyc3NToUKFVKhQIZUqVUpeXl7y8vLKcV+/JyQkaMiQIVq4cKECAwM1b948OTk5GZ0FAAAAAAAAAHmKvb29ateurdq1a6f/Xlpams6ePZv+/ek/v0ft5uYmJycnOTk5yd3dneGPp1SvXj2FhIQYnQEgB8ppfx8IAAAAAEBOdefOHc2YMUOffPKJvLy8FBYWprp16xqdBfwNg8hANrZnzx6VLFlS5cuXNzoFAAA8BqvVquDgYH300Ue6cOGC+vfvr+HDh8vNzc3oNAAAstTNmze1aNEiTZs2TRcuXFDXrl3173//W+XKlTM6DQAAAAAA3OPixYv6/fff038A9Nq1aypYsGD6D4EWK1ZMpUuXlp2dndGpQIa6ceOGjhw5oujo6PTx48OHD+vGjRuyt7eXl5eXqlWrpgEDBqhatWry9vaWu7u70dkAAOQoSUlJOnPmTPrXmYmJiZIkJycnubq6ysnJSS+88IIcHR0NLgUAIGM1adJENWvWVFBQkIKDg43OwTNaunSp3Nzc1KJFC6NTsoXAwEC99tprOnXqlDw9PZ/4+nfu3NHhw4e1d+/e9AHko0ePSpI8PT3l5+enMWPGyGKxyNf3/7F353E1po/7wK/TTlGRyC6USpJjL0NijIxd2cNk35JBtrFnyvYRY2cMGfuMJdvgIyq7Cimyr1lCpQWd0zm/Pz7f+pVJik73qa736+U1c57lvq/nOaftLM/VBLq6ugV9CERERFRE6Orq4tChQ2jTpg2cnZ0RGhoKU1NT0bG+2alTp/DTTz/h559/xsSJE0XHIfoiW1tbREZGio5BREREhSQxMRHBwcEICgpCUFAQbty4AblcDolEgipVqqBixYqZBcgGBga4f/9+5nsPnz59ivj4eABAmTJl0KJFCzg5OcHJyQmNGzdW2/cgXrhwAQMHDkRiYiIOHDiALl26iI5ERERERERERERERP9HQ0MD1apVY/GmilStWhVubm6iYxAREREREREREVEOQkJCMHLkSDx48ADe3t6YPn06dHR0RMciyhELkYnUWGhoKFq1aiU6BhEREeVBSEgIJk2ahCtXrsDd3R3z589H1apVRcciIiIqVMnJyVi3bh2WLFmCxMREDB06FFOmTOHPRCIiIiIiIiI1cffuXQQFBeH8+fOIjo7G7du3My9AmBtdXV3UrVsXlpaWaNSoEZycnNCkSRNoafFtJ1Q0xMfHIyoqKrNkJywsDDExMUhPT0eZMmVgYWEBa2tr9O7dG1KpFI0aNULp0qVFxyYiIipSEhIScObMGZw+fRpRUVG4ffs2Hj9+DKVSmet+EokE1atXh4WFBerXr482bdrgu+++g5GRUSElJyIiUo3Ro0dj9OjRSEhI4M+1Im7fvn1wc3PjhwP/z/fff4/y5ctj//79eSrwi42NxdmzZzMLkK9cuYKPHz/C0NAQTZo0gaurK6RSKVq2bIny5csXwhEQERFRUWJoaIhDhw7BwcEBzZo1w5AhQzBr1izRsb7aoUOH0Lt3b7i5ucHPz090HKI8sbW1xfr160XHICIiIhVKS0vD4cOHsWXLFhw9ehRyuRy2trZwcnLC9OnTYWFhAQsLC5QqVeqLY8XFxSEmJgZRUVEIDg6Gv78/pk2bhooVK6Jv375wd3eHvb19IRzVl8nlcixYsAALFiyAs7MzNm/ejMqVK4uORUREREREREREREREREREREREREREJdjz58/h7e2Nbdu2wcXFBYcPH0bNmjVFxyLKlUT5pSuNEZEQSqUSJiYmmD17NsaPHy86DhEREX3GnTt3MGPGDOzduxdt27bF4sWL1eaDmERERIUlKSkJv//+O3x9fZGUlAQPDw94e3vzAgBEREREREREgimVSpw7dw4BAQE4cuQInjx5An19fbRo0QI2NjawtLSEhYUFqlatCn19fejr68PY2BgpKSlITk5GSkoKXr58ibt37yImJga3b9/GuXPn8OzZM5QpUwZt2rRBnz590L179zxd7JBI1eRyOR4/fpyt/PjKlSt48eIFAMDMzAw2NjawtraGVCqFVCqF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c889prMAAMi3L774QiEhIUpNTVV4eLiCgoJUrlw501kAAAAAAADFhqurq2JiYvQ///M/at++vVavXi1vb2/TWbmWkpKi/v37a8eOHVq7dq26dOliOgkAAAD/n9Vq1eLFi1WjRg0NGDBAP//8s8aNG2c6K9dsNpvmzJmj0NBQPf/883rjjTe4KTbyxMHB4caQY39//z8t+/33328MSL4+LHnDhg1KSEhQWlqaJKlq1apq2rTpX4Ylu7u783NvAEZUqVJFa9as0cSJExUYGKh9+/bp9ddf53sScJMqVaooPDxcffr0UXBwsDw8PDR16lS98MILslr573YAABS2xMREvfXWW5o1a5YeeOAB0zkACkD9+vW1bds20xkAAOD/q169ujZt2qRhw4bp8ccf15QpUxQQEKC6deuqfPnypvOy9fPPP2vAgAH64Ycf9P7772vYsGGmkwAAAAAAAAAAAAAAAAAAAAAAd8AdGoBCZrPZtHv3bvXq1ct0CgCglNiyZYsGDRoki8Wi6Ohode7c2XQSAAD5lpiYqDFjxuirr75Snz599M4776hGjRqmswAAAAAAAIqlmjVravPmzerbt698fX01e/ZsjRkzxnTWHcXGxqpfv366du2aNm/erNatW5tOAgAAwC0sFovmzp0rZ2dnvfjii9q+fbsWLVqkypUrm067rZSUFA0dOlRRUVF68803S9QgZ5QMVatWVevWrf/y95iMjAydOnUq22HJSUlJstlssre314MPPnhjQPL1gckeHh6qVauWoTMCUFaUK1dOs2fPlpeXl4YNG6Z9+/Zp2bJlqlKliuk0oFjx9fVVfHy85s6dq2nTpmnp0qWKiIhQ27ZtTacBAFCqjRs3Tq6urho1apTpFAAFpEGDBkpOTlZ6errs7e1N5wAAAEkVKlTQsmXL1LFjR4WEhOjNN99UbGysmjZtajrtLz799FONHTtW1apV03fffacWLVqYTgIAAAAAAAAAAAAAAAAAAAAA5IKd6QCgtDt69KhSUlLUpk0b0ykAgBIuMzNTYWFheuyxx+Tt7a34+HiGIQMASqxr167p1VdfVbNmzZScnKwtW7ZoxYoVDEMGAAAAAAC4g0qVKumrr77SSy+9pHHjxql37946d+6c6axsZWZmau7cufL19VWjRo0UHx/PMGQAAIBibvz48dqwYYN27NghLy8v7dy503RS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zi+Dtdvtjmk14Qbq5+apaWpqrrPHDDX3ZwQAAACg9ilvGbKrq6tKSkpUWloqd3d35efna9++fSooKODzkedp27atUlNTjY6BGqhRo0aaMGGCJkyYoF27dmnRokV65ZVX9Oyzz6p///4aP368+vbtKxcXF6OjAgAAoIYICAhQVlaW0TEAADXYm2++qe3bt2vHjh2UIQMAAAAAAAAAAAAAAAAAAAAAUINQiAxISklJUfv27Y2OAaAeWrVqlZ566iktWLBAt956q9FxANRjubm5+vnnn8uUH6empspms8nb21sdO3aU1WrVhAkTZLFY1LFjR7m6uhodu15yd3fX6tWrddNNN2nAgAFav369mjRpYnSsa5Kdna2+ffvKzc1NX331laNYAgDO16NHDy1dutToGABQIzzxxBM6cuSIxowZoyZNmqhXr15GR7omdrtd06dP1yeffKIvvvhC3bp1MzpSjRcUFKSgoCDFxcVJkoqLi/XLL79ox44d2rlzpzZu3KjXX39dJSUlatKkiW688UZFRkY6vgYFBRk8AgAAANRlJpPJUchsZDGzpMuWLZ86dUpFRUUqKirSqVOnZLfbdeLECUmXLlu22Wzl3vfZYuRjx47p2LFjOnDggD7++GONGjXqiuteqQT2aktiy1swe7aQ9+zXaymlrcmlyKjdKvN1CgAAAKDuuty5wtnzVZPJpFatWqlHjx6KiYlRdHS0SkpKdMMNN2jmzJmUIV9E8+bNtXnzZqNjoIbr0qWLunTpohdffFErVqzQokWLdNddd6lp06YaOXKkxowZoxtvvNHomAAAADCYn5+fjh49anQMAEANlZmZqTlz5mjmzJm64YYbjI4DAAAAAAAAAAAAAAAAAAAAAADO4WTnLoCArr/+eo0dO1aPP/640VEA1CPJycnq3r27hgwZokWLFhkdB0A9kpOTo6SkpDLlx3v37pXdbpePj48sFousVqvj0b59e5lMJqNj4zwHDhxQz5495eHhoTVr1ig4ONjoSFfl4MGD6tOnjwoKCrRx40aFhIQYHQkAAKDWsNlsGj16tFatWqVPPvlEd911l9GRrkpJSYkmTZqk999/Xx9++KGGDx9udKQ6o7i4WGlpaUpISNCmTZuUmJiolJQUlZaWKjAwsMy5X1RUlPz9/Y2ODAAAANR4J06cKFfJs9lsVklJiVq0aKHBgwfr559/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hAkTZLVa1a1bN8cNG4Cq4OLionvvvVdjx47Vp59+qoULF2ro0KHy8fHRkCFD1Lt3b91yyy3X/DrMysrShg0b9M0332jFihXKzc3VrbfeqiVLlmjIkCEymUyVNCIAAABcjaioKP3rX//STz/9pAULFujJJ5/UzJkzdfvtt6tfv3669dZb1b59+2vaR2FhobZu3apvv/1Wn376qfbu3au2bdtqxowZmjRpknx9fStpNKitgoKCFBQUpLi4OMe080uSn332WWVlZcnZ2Vlt27aVxWJReHi4rFaroqOj1bhxYwNHAAAAAAAAAAAAgNrqtttu09q1azVnzhw9+uijatq0qVq2bKmwsDCFhoaWebRs2VINGzaUyWTSddddp7S0NKPj10ipqam69957jY4ByGKxyGKx6Mknn9R//vMf/etf/9Ly5cv11ltvycfHR7GxsRowYIDuuusueXt7Gx0XAAAAF+Ht7S03NzcKkQEAAAAAAAAAAAAAAAAAAAAAAACglnGy2+12o0MARlm7dq3uuOMOHT16lDJCAFUiOTlZXbt21aRJk/Tiiy8aHadeiI+P16effmp0jBpt6NChWr58udExar3i4mKlpaWVKW7avXu3Tp06JbPZrLCwMFmtVsejc+fO8vDwMDo2oEOHDunjjz/WypUrtXPnTpWWlqpjx47q0qWL2rZtq7CwMLVq1UqNGjWSj4+PPD09JUn5+fk6ceKETp48qf379ystLc3x38CePXvk7OysG2+8UYMHD9aoUaPUvHlzg0cKAACASykoKNDq1au1ZMkSbdiwQbm5uQoMDFSPHj0UFhamtm3bqk2bNvL395enp6fjkZOTo7y8POXn5+vw4cNKS0tTSkqKkpKStHXrVhUUFKh169bq16+fRo8eraioKKOHilro/JLk7du3O25yGBgYWOZcu3v37mratKnBiQEAAIDyiY+PlyTep0Od4+Tk5HheGz+K6OTkpKVLl2rYsGFGRwEAAABQhf7617/qiSeeUElJSZnpJpNJZrNZNptNNpvNMb1x48YKCQlRVlaWPD09NX/+fPXr16+6Y9dYhYWF8vDw0CeffOK45gHUNPv27dOqVau0evVqbdmyRS4uLoqNjdWdd96pgQMHyt/f3+iIAADUacuWLdPw4cONjlHj1cb3VqpKaGiopkyZopkzZxodBQBqLf79LR/+/QUAAAAA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esGCBVm4cOGqr1cOK6/8en06deqUVq1apWvXrikrK0uXLl3SunXrbLLJJmnXrl3at2+fjh07pk2bNuncuXPKyspSXl6e0tLSjzx29XMlWfXYJOnSpcuqD71e/fddu3Zd79ATAAAAxVvTIPLqysrKUldXl7Kyshx00EE59dRTU11dnRNPPLHFDyKvb3B4TV+v6741XWfludc13Lsh511X8/rOvbbnv6HPd13nXdfI88Z6DTfkPOt7fTbG9/fT/LwaRAagMaitrc1rr71mIBlgI3v22WczYMCAdOrUKZMmTcpXvvKVopPW69prr80FF1yQ/fffP3fddVc6d+5cL9d5+eWXc8455+SZZ57JiSeemKuvvjqbbbZZvVwLGsIZZ5yR2bNnZ9q0aUWnADR7y5cvz80335yLLrooixYtSk1Nzar7SkpKsmDBglV/Dg4AAAAAAAAAAAAAAGB1rYoOgPo0c+bMdOzY0VAmkGuuuSaDBw82htyEvPHGGxk6dGiefvrpDBo0KJMnT86KFStW3V9XV5c777zTP+MBAAAAAKAFWDk2XF5evtHO+fFx5SVLlmTp0qVZtGhRqqurM3/+/NTU1KSqqiorVqzIwoULs2zZsnz44Yf58MMPs2zZsrz77rtZsWJFqqqqUltbu8bHfl4rn3NJSUm6du266vbVB5fXZn3DyisHnQEAAPhs3n///XXev3I0oLa2Ng899FCmTp2atm3bJkkeffTR7L///oUM4H3WwdiNaeWA7sc7Pj6I+3nPv65rrcuarr2m83zac6/r+a3t3BtyznU9bk1D2Z+3dU2P29DX57NcHwCamtLS0uy6667Zddddc8YZZ3xiIHns2LG56KKLWuxA8o9//OM888wzRWc0an379s2IESOKzoBG5be//W0GDhyYr3/96/nVr35Vb8PCG9s555yTvn375ogjjkj//v3z4IMPZvPNN99o5583b15++MMf5rrrrsvuu++eZ555JnvttddGOz8UpXv37nnxxReLzgBoEdq0aZPS0tIsXbo0//7v/57rr78+K1asSHV1dXr06GEMGQAAAAAAAAAAAAAAWCuDyDRrM2fOTO/evT/Xh2EBTd8jjzySl19+OTfccEPRKWygu+++O8OGDUuPHj3yzDPPZNddd83LL7+cWbNmZcWKFSkrK8sll1ySAw44oOhUAAAAAACgidrYA8vrMn/+/NTW1iZJqqqqVg36VFZWJvnHwE9VVVWSf4xkzZ8/P8k/hrMWLFjwid8nyeLFi7N8+fK1XrO6ujqLFi1aZ9fK6wMAAMDH/7x1kWO0Hx8yLkJ9Pv/P+vxWHxf+PKPWn2UY+uOtHx+crq/rA0BzYSD5o5555pncfffdRWcATcjtt9+eU045JSeccEJuuummtGrVtN4ev+eee+app57KwQcfnP322y8PPfRQtt9++891ztra2vziF7/Ieeedl9atW+fmm2/OySef7P3UNBubbrpp5syZU3QGQIuwZMmSXHbZZTn99NNz1VVX5YILLshll12Wn/3sZ9lll12KzgMAAAAAAAAAAAAAABqxpvWOT/iUZs6cmR122KHoDKBgP/7xj/O1r30te+21V9EprMfChQtz/vnn5+c//3lOPvnk/PSnP03Hjh2TJBMmTMi+++6b0tLS7LPPPvmP//iPgmsBAAAAAAA2TJcuXVb9vqFGmAEAAKh/X/7yl/POO++s9f6ysrLU1dWlrKwsBx10UE499dRUV1fnxBNPTP/+/RuwdP0aYqR2Q0Z8P8/Qb1PQlJ7f+lpX3teUnhMANBYfH0hOklmzZmX69OktciAZYF3uvffeDB06NMOHD8/YsWOb7OBvz549V40if/Ob38yTTz6ZzTff/DOd6/nnn88555yTl19+OWeddVYuu+yydO7ceSMXQ7E23XTTzJ07t+gMgBZh3LhxqayszMiRI5Mkm2++ecaPH58RI0bk5ZdfLrgOAAAAAAAAAAAAAABozLz7nWbt9ddfT+/evYvOAAo0Y8aMTJ06Neeee27RKazHc889l9133z1TpkzJvffemwkTJqwaQ06SvffeOxdddFG6du2aSZMmpaysrMBaAAAAAAAAAAAA+KSSkpKUlZWltLQ0X/va13LLLbdk7ty5eeCBBzJo0KC0atWqXq5bV1f3kVGotY3UFjVe+1muu6EjVxtrDGtt56mvsa2Pn3dN38ONcf11Hf9ZX+MNPef6vu+ftq2pDp8BwIbo2bNnzjjjjEyaNClz5sxJRUVFrrrqqpSXl2fs2LHZc88907Vr1xx00EEZM2ZMnnzyyVRXVxedDVCvnn322Zxwwgn5t3/7t1x11VVN/r8JevTokWnTpqWsrCwHHXRQqqqqPtXx77zzToYOHZp99tknm2yySV5++eWMGzfOGDLNUvfu3fPhhx9myZIlRacANGtVVVUZO3ZsRowYkS222OIj9/Xs2TPHHntsQWUAAAAAAAAAAAAAAEBTYBCZZquuri4VFRUGkaGFu+666/KFL3whRxxxRNEprMWKFSsyZsyY9OvXLz179swf/vCHtX6/Ro0alQceeCBbbbVVA1cCAAAAAAAAAADAmpWUlKRVq1YpKSlJ3759c9111+X999/PI488kqFDh6ZTp04b5RqrD+SuaQRq5aBufYweb8g475oa19azrvN9/Jh1Pfd1DT+v6di1XXv186z+On68Y03Hre/cG/L8VlrT93D157fy/tVv+/g119a/vvs+bevazrGun8PP07ahvR/vBICman0Dyf369Uu3bt0MJAPN1syZM3PooYfmkEMOyXXXXVd0zkbTvXv3PPjgg5kzZ06GDBmS2tra9R5TXV2dcePGZeedd86jjz6aW2+9NQ8//HB23XXXBiiGYmy66aZJkrlz5xZcAtC8XX755SktLc35559fdAoAAAAAAAAAAAAAANAEtSo6AOrLO++8k8WLF2eHHXYoOgUoyKJFi3Lbbbdl5MiRKSsrKzqHNaioqMiJJ56YP/7xj/nJT36Ss846a50fQtemTZvss88+DVgIAAAAAAAAAAAAa7byzyb+8z//c4YOHZrjjjsu22yzTb1ca0MHjtf3uM86lLwhx32ac6/tsWsa0P0s1/s0963psZ/1tk/7+q/vnJ/1mp/1tdnQ63yen7PPct/G+vkHgKZs5UDyGWeckSSZNWtWpk+fnunTp+eqq67KRRddlE022ST77LNPDjzwwHz1q1/N3nvvndatWxdcDvDpLV26NIMHD06vXr3yy1/+stm9N7Bnz5659957s99+++V//+//nUsuuWStj3344YczfPjwzJo1K9/73vdy4YUXpn379g1YC8VYOYg8Z86cevv/2wBaurfffjvjx4/P6NGj07lz56JzAAAAAAAAAAAAAACAJsggMs3W66+/niTp3bt3wSVAUSZOnJjly5fnW9/6VtEprMEdd9yRYcOGpVevXnnppZeyyy67FJ0EAAAAAAAAAAAAG2z48OHZe++9s9NOOxWdAgBAC2MgGWjOzjvvvMycOTMvvvhi2rZtW3ROvdhzzz1z5ZVX5txzz82+++6bAw444CP3v/HGGxk5cmQmTpyYf/mXf8l9992X7bffvqBaaHjdu3dPksydO7fgEoDm69JLL015eXnOPPPMolMAAAAAAAAAAAAAAIAmqrToAKgvM2fOTIcOHbLlllsWnQIU5Kc//WmOP/74bLrppkWnsJqlS5dm+PDhOf7443PUUUflqaeeMoYMAAAAAAAAAABAkzN06FBjyPD/lJSUfOSvAEDDWjmQPGnSpHzwwQepqKjI1VdfnfLy8lx11VXp169funXrloMOOihjxozJk08+merq6o1y7WeeeSYffvjhRjkXwG9/+9tcf/31ufnmm7PjjjsWnVOvvvvd72bAgAE59dRTs2jRoiTJkiVLcumll2bHHXfMc889lwcffNAYMi1S165dU1ZWZhAZoJ7MmDEjt9xyS0aPHp327dsXnQMAAAAAAAAAAAAAADRRBpFptmbOnJnevXv7QCVooR577LG88sorOeuss4pOYTWvvfZa9t5779x2222ZNGlSJkyY4E2SAAAAAAAAAAAAAE1cXV3dql8AQPEaciD5oosuyi677JLHH398Iz8LoKVZtmxZhg8fnsGDB2fgwIFF5zSIn//851myZEl+9KMf5b777ss//dM/5aqrrsqFF16YP/7xjzn00EOLToRClJaWpry8PHPmzCk6BaBZGjlyZHr16pWTTjqp6BQAAAAAAAAAAAAAAKAJa1V0ANSXmTNnZocddig6AyjIddddl759+2bPPfcsOoX/Z8KECTn77LPzz//8z3n55Zez/fbbF50EAAAAAAAAAAAAAADQ7K0cSD7jjDOSJLNmzcr06dMzffr0XHXVVbnooouyySabZJ999smBBx6Yr371q9l7773TunXrdZ532bJlefbZZ1NdXZ3+/fvnzDPPzJgxY9KpU6eGeFpAM3P55ZfnnXfeySOPPFJ0SoPZdNNNc9lll+Wcc87JVVddlZNPPjljxozJFltsUXTa5/Lmm2/m6aefLjqj0Rs8eHDRCY3apptumrlz5xadAdDsvPjii5k8eXKmTJmSVq187BAAAAAAAAAAAAAAAPDZeWcCzdbrr7+eQw45pOgMoABvvfVW7rnnntx8881Fp5BkwYIFOfPMM3PHHXes+mCG9X0gDgAAAAAAAAAAAAAAAPVjbQPJTz75ZK699to1DiTvtddeadOmzUfO89xzz2X58uWrvr7xxhszefLk3HjjjTnyyCMb9DkBTds777yTMWPGZPTo0dl6662LzmlQw4YNy80335x27drltttuKzpno3j66aczZMiQojMaPYPI69a9e3eDyAD14OKLL06fPn38NxsAAAAAAAAAAAAAAPC5lRYdAPVl1qxZ6d27d9EZQAH+8z//M+Xl5Rk0aFDRKS3eiy++mD322CMPP/xwpk6dmnHjxhlDBgAAAAAAAAAAAAAAaERWDiRPmDAhb775ZioqKnL11Vdnyy23zPjx49OvX79069YtBx10UMaMGZMnn3wyy5cvz2OPPfaRkeQVK1Zkzpw5OeqoozJw4EAjhsAGu/rqq9O1a9ecffbZRac0uNLS0lx22WV58skn88ILLxSdA43Gpptu6t8lADayadOmZfr06bniiitSUlJSdA4AAAAAAAAAAAAAANDEGUSmWXrnnXeycOHC7LDDDkWnAA2strY2N998c0455ZS0bdu26JwWq66uLj/5yU/y1a9+Nb17984rr7ySgw8+uOgsAAAAAAAAAAAAAAAA1mP1geS///3vefXVV3PFFVeka9eu+fGPf5x+/fpls802y6233prq6uqPHFtbW5skuffee7PTTjtlypQpRTwFoAmZN29efv7zn+eCCy5I+/bti84pxCGHHJI+ffrk8ssvLzoFGo3y8vJUVlYWnQHQbNTV1eWSSy7JYYcdlv79+xedAwAAAAAAAAAAAAAANAMGkWmWXn/99SRJ7969Cy4BGtpDDz2Uv/3tb/nXf/3XolNarAULFmTw4MG54IIL8qMf/SgPPvhgevToUXQWAAAAAAAAAD3RoTYAACAASURBVAAAAAAAn1JJSUl23XXXfOc738ldd92Vd999N6+++mouu+yyvPnmm6mrq1vjcdXV1amsrMwxxxyTgQMHZs6cOQ1cDjQV119/fdq2bZthw4YVnVKo73//+7nnnnsyY8aMolOgUTCIDLBx3XXXXXnhhRcyevToolMAAAAAAAAAAAAAAIBmwiAyzdLMmTPToUOHbLXVVkWnAA3sxhtvzP77759ddtml6JQW6bXXXkvfvn3z+OOPZ+rUqbnwwgtTUlJSdBYAAAAAAAAAAAAAAAAbwcqB5C9/+cuprq5e52Nra2uTJPfee2923HHHTJgwoSESgSZm4sSJOeWUU9KxY8eiUwp15JFHZuutt87EiROLToFGwSAywMZTU1OTSy+9NMcff3y+8pWvFJ0DAAAAAAAAAAAAAAA0EwaRaZYqKirSq1cvI5zQwrz33nu57777cvrppxed0iL94he/SJ8+fdK9e/f84Q9/yIEHHlh0EgAAAAAAAAAAAAAAAPXg8ccfT5s2bTbosdXV1amqqsopp5ySp59+up7LgKbkySefzIwZM3LyyScXnVK40tLSnHDCCZk4ceKqQXloycrLyzNv3ryiMwCahZtuuikzZ87MD3/4w6JTAAAAAAAAAAAAAACAZsQgMs3SzJkz07t376IzgAZ2yy23pGPHjjn66KOLTmlRli1bluHDh2fo0KH5t3/7t0yfPj1bbbVV0VkAAAAAAAAAAAAAAADUk+nTp6e6unqN95WVlaVt27Zp06ZNSkpKkiR1dXVJknfffbfBGoHG7xe/+EW+9KUvZbfddis6pVE4+eST87e//S1PPPFE0SlQuPLy8lRWVhadAdDkLVmyJKNHj86wYcPSq1evonMAAAAAAAAAAAAAAIBmpFXRAVAfKioq0r9//6IzgAZUV1eXm2++OUOHDk2HDh2Kzmkx/v73v2fQoEH585//nEmTJmXgwIFFJwEAAAAAAAAAAAAAAFCPli1blueff37VyHFpaWnKy8vTo0ePfOELX8iWW26ZLbfcMptvvnl69OiRrbfeOptttlm22GKLDBs2LHfffXfBzwBoLB588MGcfvrpRWc0Grvuumt23nnnTJ06Nfvvv3/ROVCobt26Zfny5fnwww+9bxjgcxg3blwqKyszcuTIolMAAAAAAAAAAAAAAIBmxiAyzdKsWbNy2mmnFZ0BNKDHHnssr7/+eiZPnlx0Sotx//33Z+jQodluu+3yX//1X+nVq1fRSQAAAAAAAAAAAAAAANSz5cuX55577smWW26ZHj16pEePHikpKSk6C2hiZs6cmTfeeCPf+MY3ik5pVL7xjW/k0UcfLToDCldeXp4kmTdvnkFkgM+oqqoqY8eOzYgRI7LFFlsUnQMAAAAAAAAAAAAAADQzpUUHwMY2b968VFZWpmfPnkWnAA3o1ltvzV577ZUvfvGLRac0e7W1tfn+97+fI488Mscee2yeeeYZY8gAAAAAAAAAAAAAAAAtRKdOnfLNb34zX/ziF7P55psbQwY+k0cffTQdOnRInz59ik5pVL7xjW/kpZdeSlVVVdEpUKiVg8iVlZUFlwA0XZdffnlKS0tz/vnnF50CAAAAAAAAAAAAAAA0QwaRaXYqKiqSxDgntCCLFy/Or3/965xyyilFpzR7VVVV+Zd/+Zdcc801ufnmm3PjjTemXbt2RWcBAAAAAAAAAAAAAAAA0IQ8/fTT2XfffdOmTZuiUxqV/fffPzU1NXnuueeKToFCGUQG+HzefvvtjB8/Pt///vfTuXPnonMAAAAAAAAAAAAAAIBmyCAyzU5FRUVatWqVbbfdtugUoIFMmjQpy5cvz5AhQ4pOadZmzJiRfffdN3/84x/z2GOP5dRTTy06CQAAAAAAAAAAAAAAAIACPfvss1mwYMGnPu61117LrrvuWg9FTVv37t3To0eP/PnPfy46BQplEBng87n00ktTXl6eM888s+gUAAAAAAAAAAAAAACgmTKITLMza9asbLvttmndunXRKUADue2223LUUUdl0003LTql2XrggQey1157pby8PC+++GL23nvvopMAAAAAAAAAAAAAAAAAKNiYMWOy2WabZfDgwbn//vtTXV29Qce9/vrr2Wmnneq5rmnaaaed8pe//KXoDChUmzZt0rFjR4PIAJ/BjBkzcsstt2T06NFp37590TkAAAAAAAAAAAAAAEAzZRCZZqeioiK9evUqOgNoIH/961/zxBNP5JRTTik6pVmqq6vLmDFjcuSRR2bIkCF59NFHs8UWWxSdBQAAAAAAAAAAAAAAAEAjUFNTk+XLl2fKlCk58sgjs9lmm+W73/1unnvuubUe8/7772fevHnZcccdG7C06TCIDP9QXl6eefPmFZ0B0OSMHDkyvXv3zkknnVR0CgAAAAAAAAAAAAAA0Iy1KjoANraKiorssssuRWcADeS2227LZpttloMPPrjolGZn0aJFOeWUU3LvvffmmmuuyXe/+92ikwAAAAAAAAAAAKBZGDRoUNEJwGqeffbZ7LPPPkVnAAAkSRYsWJDp06ev8b6OHTumTZs2n7i9VatW6dSp0xqP6dy5c8rKyj5xe7t27dK+ffvPFwv5xyBykqxYsSJJMn/+/Nxwww259tprs9VWW+Xkk0/Oaaedlt69e6865r333kuSbL311g0f3ARsvfXWefrpp4vOgMKVl5ensrKy6AyAJuXFF1/M5MmTM2XKlLRq5WOFAAAAAAAAAAAAAACA+uOdCzQ7FRUVOfzww4vOABpAXV1dJk6cmJNPPtmb8TaymTNnZsCAAXn//fczbdq0fP3rXy86CQAAAAAAAAAAAJq8L3zhCxk4cGDRGcDH7LPPPunbt2/RGQAASZI33ngjBx10UNEZq6xtOPnT3t5QxxR9/c9yTIcOHdK2bds1nqspWDmEvLrq6uokydtvv52rr746Y8aMyZe+9KV861vfygknnJCFCxcmyVqHvFu6Tp06rXqNoCUziAzw6V188cXp06dPjjzyyKJTAAAAAAAAAAAAAACAZs56JM3KsmXL8vbbb6dXr15FpwAN4KmnnkpFRUWGDh1adEqzMnXq1JxwwgnZYYcd8l//9V/ZZpttik4CAAAAAAAAAACAZqFv37656667is4AAAAasV122SVPPfXUGu+rqqpKXV3dJ25fsmRJli5d+onba2trM3/+/DWea9GiRatGa1dXXV2dRYsWrfGY+fPnp7a2ttFdf+nSpVmyZMknbq+rq0tVVdUaz7V48eIsX758jfcVrby8fI23r204uaysLJ07d17jMZ06dUqrVp98O3mbNm3SsWPHNR7TtWvXlJSUbPD1Z8+evcbzrLRyMPmVV17Jeeedl/PPPz977rnnqg4+qTENIo8bNy7PPfdczj777Oy3335F59DCdOvWzSAywKcwbdq0TJ8+PY888sga/30OAAAAAAAAAAAAAABgYzKITLMye/bs1NbWGkSGFuJXv/pVvvSlL+WLX/xi0SnNxv/9v/83I0aMyEknnZQbbrgh7dq1KzoJAAAAAAAAAAAAAAAAWozS0tK1DuKu7XY2nqIHmVesWLHWIdwFCxakpqam3q+/toHjtV1/bddYU09NTU1KSkry7LPPJkmuvvrq/PCHP1zj0HJL1qlTp7X+HDa0Dz74ILfffntuv/327Lzzzvn3f//3nHjiidlkk02KTqMFKC8vz7vvvlt0BkCTUFdXl0suuSSHHXZY+vfvX3QOAAAAAAAAAAAAAADQAhhEplmpqKhIkmy//fYFlwD1bcWKFZk8eXLOPffcolOahZqampx77rkZP358fvCDH+TSSy8tOgkAAAAAAAAAAAAAAACgQbVu3dog9af0ta99LR988ME6H9OqVausWLEim2yySQYMGJCePXvmRz/6UX7wgx8YQ16DpUuXNprXZf78+WndunWqq6vzl7/8Jd/+9rdz7rnn5uSTT853vvOdfPGLXyw6kWasvLw8r732WtEZAE3CXXfdlRdeeCEvvvhi0SkAAAAAAAAAAAAAAEALYRCZZqWioiI9evRI586di04B6tnvfve7fPDBBznuuOOKTmnyFi5cmBNOOCHTp0/PL3/5yxx//PFFJwEAAAAAAAAAAAAAAADQBNTU1Kzx9pUjyB07dszRRx+dwYMH5+CDD06bNm3y+OOP50c/+lEWLVqUDh06NHBx47dgwYJ07NgxJSUladeuXcrLyz/xq3379ht0X48ePdKq1Wf/SIH58+ev+h7X1dWlpqYmS5Ysya233pqf//zn2W233TJixIgcf/zxad269cZ6CSDJPwaR582bV3QGQKNXU1OTUaNG5fjjj89XvvKVonMAAAAAAAAAAAAAAIAWwiAyzUpFRUV69epVdAbQAG6//fbsu++++V//638VndKkvfnmmzniiCPy3nvv5fe//3369OlTdBIAAAAAAAAAAAAAAAAATcTqg8itWrVKTU1N2rdvnwEDBuS4447LN7/5zbRt2/Yjx3Tq1ClJsnDhwvTo0aNBe5uChQsXpnPnzhk7dmzmz5+fBQsWZMGCBamqqsr8+fMzZ86cVbet/FVZWbnW85WXl6dz586f+NWlS5d07dp1jfd17do1Xbp0yQcffJDa2tpPnHP58uVJkldffTWnnnpqRowYkdNOOy1nn312vb0utDzl5eXr/NkG4B9uuummVFRU5P777y86BQAAAAAAAAAAAAAAaEEMItOszJo1Kz179iw6A6hnH374Ye65555cccUVRac0ac8++2wGDBiQHj165Nlnn822225bdBIAAAAAAAAAAAAAAAAATUhdXV2SpF27djnyyCNz3HHH5dBDD027du3Weky3bt2SJHPmzEmvXr0apLMpmTt3brp3756hQ4d+quOWLFmSysrKLF26dNXvP/5r9fvefvvt/OlPf/rI7e+9995HBpA7d+68zmuuHMSeO3durr766lx11VXZY489Pv2ThjXo1q1bKisrU1dXl5KSkqJzABqlJUuWZPTo0Rk2bJh/rwIAAAAAAAAAAAAAABqUQWSalYqKigwaNKjoDKCe3XPPPVm6dGkGDhxYdEqTddddd+WUU07J/vvvnzvvvHO9H0oAAAAAAAAAAAAAAAAAAB93+OGH5/zzz8/hhx+eDh06bNAx2267bdq1a5cZM2Zk7733rufCpmfGjBnp3bv3pz6uffv2ad++/ee69ooVK7JgwYJUVVVl/vz5GTRoUBYsWLDBx5aUlOT555//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AAAAAAAAAACAJIl3RNIszJo1K1tuuWXatWtXdApQD55++um88847OfbYY4tOaXTq6upyzjnn5Gc/+1nuuOMOY8gAAAAAAAAAAAAAAAAANCkjR47Ms88+m2nTphWdUojRo0dnu+22y5AhQ4pOgUanvLw8lZWVRWcAFKqmpiajRo3K8ccfn6985StF5wAAAAAAAAAAAAAAACRJWhUdABvD7Nmzs/322xedAdSTX//619lxxx2zyy67FJ3SqNTU1OS0007Lr371q9x5550ZMGBA0UkAAAAAAAAAAAAAAAAA8Knsu+++OeKIIzJ8+PD84Q9/SJs2bYpOajDPPvtsbrvttvzyl79Mq1be+g8f161bN4PIQIt30003paKiIvfff3/RKQAAAAAAAAAAAAAAAKuUFh0AG4NBZGjefvOb32TQoEFFZzQqNTU1OfXUUzNp0qTcd999xpABAAAAAAAAAAAAAAAAaLLGjx+fv//977nmmmuKTmkwtbW1GT58ePr165chQ4YUnQONUnl5eaqqqlJXV1d0CkAhlixZktGjR2fYsGHp1atX0TkAAAAAAAAAAAAAAACrGESmWTCIDM3XSy+9lNmzZ+foo48uOqXRWL58eQYNGpQpU6bkvvvuyze/+c2ikwAAAAAAAAAAAAAAAADgM9t2221z8cUX57LLLsvMmTOLzmkQP/nJT/KHP/whN9xwQ0pKSorOgUapS5cuqampyaJFi4pOASjEuHHjUllZmZEjRxadAgAAAAAAAAAAAAAA8BEGkWkW/va3vxlEhmZqypQp2W677bL77rsXndIoLFu2LIMGDcojjzySadOm5Rvf+EbRSQAAAAAAAAAAAAAAAADwuV1wwQXZeeedM3jw4CxdurTonHr1wgsv5OKLL86oUaOy8847F50DjVbXrl2TJPPnzy+4BKDhVVVVZezYsRkxYkS22GKLonMAAAAAAAAAAAAAAAA+olXRAfB5vffee1m8eLFBZGim7r333gwYMCAlJSVFpxTuww8/zFFHHZWXXnopDz30UPbaa6+ikwAAAAAAAAAAAAAAAGCD9e3bt+iERs9rREvWpk2b3Hnnndljjz1y/vnnZ/z48UUn1YuqqqoMGTIk++23Xy688MKic6BR69KlS5J//H2zzTbbFFwD0LAuv/zylJaW5vzzzy86BQAAAAAAAAAAAAAA4BMMItPkzZ49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9e7d2+g4AAAAAAAAAAAAAAAAAAAAAAAAnQZNU+jwcnJylJycbHQMAC2wb98+paenKzg4uN3m/Oc//6nVq1drw4YNioqKard5GyovL9eTTz6pJ598UklJSXrvvfd07bXXGpYHAHBu8fl8uvvuu7Vp0yb9+c9/1uWXX250pBb76U9/qq5du2rcuHEymUxauXKlgoKCjI6F81h5eflpi40bexw9elTV1dUnjRcREREoM/Y/4uPj1b9//5PW133ExMRww0MAAAAAAAAAAAAAAAAAQKdit9slSTExMe02p78YubWeq6urlZWVJUmBAmZJcrlckhQoZJa+L4CuqalpUe7g4ODA516aW6Jc9xiz2ayIiAhJUnh4uCwWiyTVK2eue+yZ7GcymRQZGdnofgAA4NwQFBSkV155RSNGjNCkSZO0detWhYeHGx2rWfw/I5WUlBicBMC54tlnn1VRUZHmz59vdBQAAAAAAAAAAAAAAAAAAAAAAIBOhUJkdGgVFRU6ceKEUlJSjI4CoAX27dunfv36tdt8lZWVuvvuu3Xddddp/Pjx7TZvQ++9955mzpypEydO6OGHH9YDDzzQaT4IDgDoHB566CG98cYb+tOf/tSpy5D9rrzySr311lsaP368YmNjtWTJEqMj4RxRXFyswsJCHTt2TMePH9exY8d07NixwLq6648ePRq4WWFdwcHBcjgcio6OrldYnJSUpAsuuKDRbXUfAAAAAAAAAAAAAAAAAACg7YSHhxv+mY3q6upAIV9zS5TrHuMvZPb5fCoqKmrymMrKykBZs/8YSSovL1dFRYUkqaamRm63O5CtuLhYtbW1rXauzS1OrrufJEVHRysoKKjRfesWPUtSaGiobDZb4HXdcuiG80r1y6ElKTIyUiaTqcksNptNoaH/99Fafwk1AADnG5vNpo0bN+riiy/WnDlztHz5cqMjNYv/54LS0lKDkwA4FxQVFempp57SrFmzFB8fb3QcAAAAAAAAAAAAAAAAAAAAAACAToVCZHRoOTk58vl8FCIDndQ333yjKVOmtNt8zzzzjHJycvS3v/2t3easKz8/X/fff7/efvtt3XTTTVq2bJkSExMNyQIAOHe98MILWrZsmV5//XVdffXVRsdpNddee61efvll/exnP1PPnj11zz33GB0JHVBlZaUKCwuVl5enI0eOqKCgQPn5+SosLNTR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1j//+U+Vl5dfst17772nmTNnVllWUVGhtWvXavHixfrmm290xx136L333lNSUpJfa05KStITTzyhn//853r//fe1fPlyXXvttRo+fLhWr16tq666yq/7BxqDQLt+hw0bpgMHDmjWrFnq0qWLX2sAAAAAAAAAAAAAAAAAAAAAAADA/yEQGQElLS1Nq1evlvTjRCCPP/44IX9AA3LixAklJibWuv1vfvMbnT59Wj//+c+9ardmzRrNmTNHixcv1uLFi2u9/6aq8kRLnobDehOEW71d9f6dTVJW0/rahNe6auMqfNjdNjVt54u6vTk2d+fSm/696cvZts725+3596Z/Z+3d8dUEY3feeacmTpzok77Q+NjDYU0mk2w2m1JTUzVjxgz99Kc/VcuWLZ2269atm06dOqXi4uIqgdiQioqKdPr0aXXr1s3oUpwKlPBlb8OYc3NzdezYsRrX5efny2azeVSTt8HKtQlhrh4072ulpaWO7+2T8BQXF+v111/XK6+8om7dumn69OmaMWOGWrRo4bc6AACorqSkRA888IAmTpyo2267zehy6sXLL7+sxMRELVmyRKtWrTK6HENZrVZlZ2c7Qo8zMzOVkZGh7777TtKP4ccWi0Xp6emyWCzq27evLr/8coOrBgAAvvTwww9rw4YN2rRpk0aMGGF0OXXSpk0bbd++Xddff71GjBihXbt2qXnz5kaXBQAAAAAAEBDKysr0+uuv6/XXX1dkZKRuvfVWTZgwQcOHD1ezZs2MLs/rcbze9lk5kLam8crO1nsyXremtq6eu9qXq/pdHYuzPpzxdgyyN/XVpKb6ve3X0/NWuZ/q37tq6+69UdN2nvZZ07h2d+eotscNAADQVIWFhSklJUUpKSmXrDt9+rSOHDni+MrOztZ7772n48ePy2q1SpLatWunxMREJSUlqUePHkpKSlJSUpLat29f34eCaq666ip99tlnWrNmjR588EFZrVaVlZVJ+vH/FW+++WaVQOSDBw/q3nvv1Z49ezR9+nQtXLhQnTp1qteag4ODNXbsWI0dO1bbtm3TY489pp/85Cd64IEHtHjxYkVHR9drPUBDEajX77fffiubzaaCggKuXwAAAAAAAAAAAAAAAAAAAAAAgHpCIDICSlpammPCj5YtWyo9Pd3okgB44cSJExo2bFit2p4/f16//OUv9eCDD6pDhw4e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JEnau3evEhISDK7I/9avX69Jkyb5ZQJLAP4RFBSkdevWEcYAv5s/f77WrVunI0eO+GyCkoaisLBQ3bp105QpU/TUU08ZXQ7g1IQJEyRJGzZsMLiSps1XgdFNDeet9lxN3OlsslBXE4h6s46J/RuWFStWKCEhQbfccotXodl33XWXTp06pW3btvmxuobnu+++02WXXabhw4fr22+/VWZmpkpLS9WsWTNdddVV6t27t3r16qVevXopNTW1yf0Ojf/D520AfIV/T1Cf+vfvry5dumjt2rVGl2K49957TxMmTNCJEyfUvn17o8sBAABoNAIh6NeXQcUFBQWyWq3enga3/BXsW5e2ddlPZGSkQkNDvT0NAIAGhvErQOPA+GR4oy6hy9VDlt09evv/L3+ELdfUZ0REhFfjcQAAaMgKCwu1b98+ffbZZ8rIyNBnn32mM2fOyGw2q1evXrruuut0/fXXKy0tTS1btqzVPr744gtNmDBBb7zxhq655hqv2paUlCg1NVW9evXSunXrarX/hub7779XYmKi7r77bq1atcrocnzGPl4KrjWm8WRcv43n+gUAAAAAAAAAAAAAAAAAAAAAAKhvZqMLQOB6++23NW3aNE2ePFlr1qyR2dyw3i59+vTRnj17NGLECKWlpemjjz5S586djS4LqBeN4frdu3evRowYoREjRnD9AgCatAULFui1117TsmXLtGLFCqPLqVdLlixRSUmJfvaznxldCgAANVqxYoWuu+46XbhwQYWFhSorK1Nubq6sVqsKCgock4LaJwTNzc11bFN5stCysjLl5eWprKxMhYWFHu07OjpaZrNZ8fHxMpvNio6Odkz2GR0drZCQEMXFxSkkJERRUVGOdTExMTKbzYqLi1NoaKgiIyMdE4PGxMQoJCREsbGxjnWouw8//FA7d+5UbGyspk+frhkzZqhHjx5u2x0+fNjryeSagpYtW6pVq1Y6efKkRo8erfnz56tXr15KSkpqcJ+BAQAAVJaTk6OMjAw98cQTRpcSEG666SbFx8frrbfe4vNBAABQ7xpaKLA32/qSr8J77WFWvu7X27ZxcXEKCgry9jQAAAAAgGHCw8MVHh6u+Pj4etunL0OWc3NzdebMGafr8/LyPA6Z80fYsrNH+7gtAADqW1RUlAYOHKiBAwc6lp08eVIZGRnavXu3tm/frl/96leqqKhQ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dJwaERERoYkTJ+qBBx7QwIEDFRAQYHQkGMRqterAgQPauXOn3nnnHZ08eVKNGjXSwIEDFR8fr4EDB8rX19fomGVq166d1q1bp+joaHXt2rXW/Z1Afn6+YmNjlZubq40bN8rV1dXoSECVYX4BAAAAAAAAAAAAAAAAAAAAAABQURQi12Fdu3bVwIEDtXDhwjpbqJqamqrExES99tprcnFxMToOUG7Mr2PPLyXJxho1apS2bNlidAyHNnLkSL311ltGxwDgIPLz8/X555/r+PHjMpvNSklJ0Q8//KDs7GylpaUpOztbkuTj46P69evLx8dHbdq0UUhIiEJCQnTjjTcqLCxMbm789xLOj58jANSUTZs2KTo62ugYqMPq1aun2NhYxcbGqqCgQEeOHNHevXv173//W7t27dKyZcuUm5tb5nYaNmyokJAQdezYUWPHjlWfPn3Upk2b6t8BAAAASJJuuukmff7553rwwQd15513at26dVq1apU6dOhgdDRZLBY9/vjjWrlypbp27aqDBw/qT3/6k9GxAAAAAAAAAAAAADiovLw8TZ8+XaNHj9Zf/vIXo+PUqMWLF2v79u166qmntGTJEqPjoAZdunRJe/bssZcgnzt3Tm3bttWQIUP0/PPP6/bbb3fK9+uMHDlS8+fP17Rp01S/fn2NHDnS6EhVwmazKS4uTp988on27NmjJk2aGB0JqHLMLwAAAAAAAAAAAAAAAAAAAAAAACrC+d4Bhyo1b9489ezZU0lJSerXr5/RcWrck08+qdatWysmJsboKECFMb/ONb+UJAMAHMk333yjbdu2KTk5Wf/6179ksVjk5+en4OBgBQcHa9iwYfLz81NgYKB8fX1ls9mUnZ2t9PR0ZWVlKTU1VcnJyVq9erUsFot8fX116623KjIyUnfccYfat29v9C4CldajRw898MADRscAUIs5y/9jUXe4ubnplltu0S233GK/rbCwUKdPn9b58+dlsVhksViUnZ2t+vXry9fXV76+vmrWrJkaNmxoYHKgfEaNGmV0BABO7tSpU0ZHAErl5+enl19+WXfffbemT5+uP/3pTxo3bpwefvhhQ35PZ7FYtGbNGj333HPKzc3VypUrNWXKFLm4uNR4FgAAAAAAAAAAAADOIyEhQadPn9YzzzxjdJQa16hRIz366KN69NFHNXv2bDVu3NjoSKghDRo0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Xr0a8fHxWL9+PSIiIgTNrFKpsH79eqxatQoBAQFISkpCnz59BM1EVNPw/CUiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIqKyWIhMRkaMGIEVK1Zg9uzZUCgUGDFihNCRrEKn02H69Ok4c+YMjh8/zgvjUa3E85csxZJkIqLa591338XSpUsxYsQIbN26FZ6enkJHKleXLl1w5coVTJ06FX379sWaNWuwcOFCoWMREREREREREREREREREZEFLl26hDVr1uD777+Hu7s7Ro4ciXXr1iE0NLRKpTVisRiBgYEIDAxEZGQklixZgqKiIpw9exZff/01li9fjgULFiA6OhpLlixBhw4dbLBVRERERPZx//59rF+/Hp999hkePnyI3r17Y9u2bejfvz/q169fpTEbNGiABg0aoHv37pg5cyYA4Pfff0dCQgJ27dqF9evXo23btli4cCFGjx4NZ2d+lYyIrKdx48YoKSkB8M/3fzQaDQCguLgYly5dwm+//Yb33nsPOp0OTZo0QVhYGLp3746CggIhYzuEJk2a4I033kB+fj5yc3NRWFgIlUqFnJwcFBYWorCwEBkZGbh58yZUKtVj85lTr149yGQyyGQyeHl5wd3dHTKZDB4eHvD09DRM05co6+eTy+WQyWSQy+WPzUdUVQ8fPsS1a9ewdOlSoaPUGM7Oznj++eeRnJzMQmRyOA8fPsSKFSuwadMmiEQi6HQ6wzRPT08MGDAAACCRSLBkyRKMGzcOc+fORWRkJLp06YKlS5ciKioK2dnZ8PHxsUtmpVKJzZs3Y926dVAqlViyZCtDE3oAACAASURBVAkWLFgAV1dXu6yfyNFUdP6KRCK7ZeH5S0REREREREREREREREREREREREREREREJDxexYIes2LFCmRmZmLChAnw8fFBWFiY0JGqRafTYf78+di9ezd++OEHdOnSRehINtOtWzfEx8cLHYMExPOXqqomlyT/8MMPGDhwoE3GJiJydCUlJZg/fz42btyIdevWYe7cuUJHsoiXlxcSEhKwbt06LFy4EBkZGfjwww/tesEDIiIiIiIiIiIiIiIiIiKy3E8//YSVK1fiyJEj6NixI3bu3IkhQ4bAzc3N6utydXVFeHg4wsPD8cknnyAxMRHr1q1DSEgIIiMjsXz5cnTt2tXq6yUiIiKylf/+97949913sXXrVri7u2PevHmYPHkyGjdubJP1tWnTBsuXL8fy5ctx7tw5fPrpp5g0aRJWrFiB1157DZMmTWIxMhFZhb+/v9npRUVFhvt3797Fnj17EBcXZ+tYtYKXlxfGjh1b5eVVKhUePXpkKFHOyckxelze/czMTJPTsrKyDIXX5ZFKpYYSZf39so8tnebm5oZ69erx98vrgJMnT0Kn06Fnz55CR6lRwsPDsXjxYmg0Gri4uAgdB/Pnz0dUVBR69uxZI/JQzaPT6RAXF4d58+YhLy8PWq3WaLqLiwsmT54MiURi9HyzZs2QmJiIn3/+GatXr8bgwYPh5+eHPn364L333oOvr6/NMl+6dAm7du1CXFwcNBoNYmNjMX/+fDRs2NBm6ySqTUydv08//TSmTJmCMWPG8PwlIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiKqI0Q6nU4ndAiqebRaLcaPH4/ExETs3r0bAwcOdMiLnRQXF2PWrFnYsWMHdu3ahdGjRwsdicjmyp6/Q4YMETpSlfD8rZnKliRfunTJpiXJd+/eRUBAAHr16oVPP/0Ubdq0qXCZkSNHIiEhoVrrre1GjBiBffv2CR2DiKqpuLgYkyZNQkJCAnbu3IlRo0YJHalK9uzZg4kTJ2LkyJHYvn27Q/6/g2qPkSNHAgD/niQimxKJRIiPj3fYv7uJiIiIiIiIahu+L0hE9sD3BcmRZWZmYtGiRYiLi0OPHj2wZMkSRERECJLl8OHDWL16Nc6ePYuJEydi7dq1vLg9ERER1WharRabNm3C8uXLIZfLsXDhQkyfPh0ymczuWVJSUvDuu+9ix44daNOmDT799FN07drV7jmIyLFlZWUhIyMDaWlpyMjIwJ9//okPPvjA4uWdnZ3h5OSEJk2aICUlxYZJHV9N/d5HZQuWK5ovJyfH7PrKK0uuSsGyVCpFw4YN+fvqNrJz506kpqZi6tSpaNy4scXLzZ8/HydPnsSVK1dsmM7x3LhxA08++STOnz+Pzp07Cx0HMpkMKpUK7u7u6N+/P6Kjo9G/f3/4+PiUu8zevXv5nVAL1IbLPFy7dg2zZs3ChQsXAJS/TVevXkW7du3MjrVmzRosXboUMpkMRUVF6NevHwYMGIDw8HDUq1cP6enp6NixY5VyFhUV4fz58zh+/DgSEhLwxx9/IDg4GBMnTsSsWbOgUCiqNC4R/eOXX37Bxo0bkZCQgIKCAqPzt3Xr1tUam+cvERERERERERERERERERERERERERERERFRzcVv7pJJYrEYu3btwksvvYThw4cjKioK33//vdCxKkWlUiEmJgbHjh1DYmIioqKihI5EZBelz98RI0bgs88+w7Rp04SOVSn68/fw4cP45JNP+MX3GsTf3x/+/v4YNGiQ4bmyJcmff/651UqSL1++DJFIhJ9++gnPPvssXn75Zbz55pvw9PS0+rYRETkSnU6HGTNmIDExEYcOHULv3r2FjlRlMTEx8PHxwZAhQ+Dq6opt27ZBJBIJHYuIiIiIiIiIiIiIiIiIqM7bsmULFi9eDA8PDyQkJGDYsGGC5omMjERkZCS+/fZbvPLKK3jyySfx3nvvOdzvxxEREVHdcPXqVUydOhXXr1/HggULDKVeQgkMDMSWLVvw6quvYs6cOQgNDcXUqVOxbt06eHh4CJaLiGqGoqIiZGRk4O7du0hPTzcqPb579y7u3buH9PR0PHr0yLCMu7s7AgIC4OzsjOLiYrPjOzs7w8XFBdOnT8fixYsxd+5cFiI7KDc3N7i5ucHf399qY1ZUqmyuYDkjI+Ox+e7fv2/2NSmVSq1WsKxQKODt7Q2pVGq1/eGobt26hVWrVmHlypUYMGAAYmNj0a9fPzg5OZld7rfffkP79u3tlNJxtGrVCnK5HNevX68RhchSqRQqlQoFBQXYv38/vvvuOwBAx44dMXz4cAwcOBBt2rQROCXZW3Z2NpYuXYotW7ZALBaXW4QsEonQpk2bCsuQjx07huXLl0On0+HIkSNIS0vDnj17sGTJEuTl5UEqleKpp55Cv379EBwcjKCgIDRs2BByudzwJycnB0qlEvn5+UhPT8fNmzfx559/4vr16zh//jxUKhUCAwMxYMAAfPXVVzXi/CKqLdq2bYtt27Zh48aNOHDggNH56+vri+7du6NVq1Y8f4mIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiGoZFiJTue7du4e7d++ipKQEP/zwA1588UV8+OGHDvHl7Js3b2LUqFG4e/cujh07hq5duwodiciuxGIxPv30U/j6+mLGjBm4evWqQ56/wcHBWLVqFfr164fmzZsLHY3KYcuS5EuXLkEikaCoqAgAsHHjRuzcuRPvvPMOpk2bVuFFMYiIaqvXXnsNu3btwoEDBxy6DFmvb9++2Lt3L4YOHYqGDRtizZo1QkciIiIiIiIiIiIiIjJJJBJVOE/Zi32LRCKTFwAvPVZ5Fwi3JINOpzNaR3nrqw5rjGmLXDWNqddH6eNi6nmCzV+/tuAoOYmqKjc3F9OmTcP+/fsxf/58rFixAu7u7kLHMhg+fDgiIiLw5ptvYubMmTh27Bi2bNkCT09PoaMRERERAQA2bdqEV199FV27dsWvv/6K4OBgoSMZBAcHIykpCfHx8Zg7dy5OnTqF+Ph4FhES1WIqlQoZGRlISUnBvXv3kJGR8dhtamoqSkpKDMsoFAr4+fnB398frVu3Rnh4OPz9/Q3P6W+Bf75TkpGRYXLdYrEYHh4emDt3LubOnQuFQmGXbSbHoi9ZtiaVSmVxqXLZ+zk5OUhJSTGalp2dbfhuU3msVbCsf+zp6QmxWGzV/WJL+fn5kEgkUKvV+PHHH3Hw4EE0btwYsbGxmDJlCho1amRyuRs3bqBv3752TlvziUQitGzZEjdu3BA6CgBAJpMhJycHAKDVag3PX7x4EVevXsXixYvh7++PgQMHYuDAgYiIiBAqKtnRyZMn8eWXXwIANBpNufOJxWJMnz7d7Fjnz5/HoEGDDK8vX19fhIaGIiYmBsXFxdi0aRNeeeUVqFQqHDp0COvWravw5zIA+Pj4IDg4GK1bt8b48eMRHh6OJ554wvKNJKJKc3NzQ0xMjOH8vXjxIsLDw5Gamopbt27x/CUiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIqplWIhMjykuLsbGjRuxdOlSqFQq1K9fH5s2bcKMGTNw7tw5xMfHIygoSOiY5frmm28wa9YsPPnkk7h48SJLVKlOW7FiBZ566ilMmzbNIc9fb29v9O7dG3379sXp06cNF0uhms9aJckXLlyAWq02jFFcXIzs7GzMmjULmzdvxubNm9GlSxe7bx8RkZA2b96M999/Hzt37kT//v2FjmM1UVFR2Lp1KyZPnownnngCM2fOFDoSEREREREREREREZFJpUtQy5aili69NVeebGo5S8pVTc1n6Tqryhpj2iJXTWSu1LdscTX9wxGLouvK65nqrqtXr2LkyJEoKCjA0aNHER4eLnQkk+RyOT744ANERkZi/PjxCAkJQUJCAtq2bSt0NCIiIqrD8vPzMWnSJCQmJmLZsmVYtmwZnJychI5l0ujRo9GzZ0+MGzcO3bp1w/r16/l7e0QORq1WIysry6jYuGzpcVpaGpRKpWEZqVRqVGgcEhJi9DgwMBABAQFwcXGxOEfZQmT9z71GjRph0aJFmD59OmQymfU2nMgC+pJlhUJh1e+jVaVgWX8/JSXlsWm5ublGZeRlSaVSqxUsS6VS1K9fHxKJxGr7o7T8/HzDthQXFwMA0tPTsWLFCixbtgy9evXC7NmzMWzYMEPRc2FhIdLT0xEcHGyTTI4uODi4xhQiy+Vyk8/rdDpDEe69e/ewfft2bNmyBTKZDM8884w9I5IAhg0bhlOnTmHQoEHIzc0ttxRZp9Nh7Nix5Y7z+++/IzIyEhqNxvA5kbe3t2G6RqPBhx9+CADo0qULvvjiC5SUlCA9PR33799Hfn4+8vPzUVBQAIVCAblcDrlcDj8/P/j4+Fhxi4mospydneHl5YVHjx5hy5Yt6NChA89fIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiKiWoaFyGTkypUrmDp1Kn799VeUlJTA2dkZEyZMwKhRo9C5c2fExMSgbdu2WLRoEV5//XW4uroKHdkgPT0dr7/+OuLi4jBjxgxs3LjRZl/OJnIkI0aMwHPPPeew5+/hw4fRq1cvhIWF4fTp0/D19RU4LVWVqZLku3fvGpUkf/bZZ8jMzISTkxNatWqFtLQ0kxeJBoD/9//+H7p164Zx48bhww8/RMOGDe26PUREQrhy5QrmzZuHN998E+PHjxc6jtVNnDgR//nPf/DKK6+gc+fOaNeundCRiIiIiIiIiIiIiIiqrHQ5riXzVlSWW950/bJl71uLNca0RS6hWFJqbOp41oYyZFtsgyO+NhwxM5GlTpw4gSFDhqBjx47YvXu3Q/yuVp8+fXD16lWMGTMGPXv2RGJiIsLCwoSORURERHXQ/fv3MWDAANy5cwdJSUkO8W8SPz8/JCUl4a233sLs2bNx+/ZtrF69mv/nIaoBVCqVyYLj0repqalGRaoKhcKo2Dg0NNSo7Fh/a21PPPEErly5ApFIhJKSErRo0QLLli1DTExMpYqViRyBvmjZmlQqVZUKlnNycpCRkfHYtKysrHJLSfWqU6ps6n69evWQn58PrVb72Lr05chnzpxBcnIymjZtitjYWEyePBnZ2dkoKSlB8+bNrbpPa4vAwED861//qvY4xcXFUCqVUCqVUKlUyM/PR15eHlQqFQoKCpCbm4vCwkLDa0mlUkGlUuHhw4eG5x88eGDRutRqNYB/yq5//vnnamenmq9Lly64du0aBgwYgN9//91wzus5OztjwIABaNCggcnl7969i759+6KgoMDwM0QkEsHLy8swz9tvv42MjAwAwN9//w0AcHJyQkBAAAICAmyxWURkRRcuXIBUKsUzzzwDgOcvERERERERERERERERERERERERERERERFRbcNCZAIA5ObmYtmyZdi0aROcnJwMF0MoLi7GuHHjAADNmjXDqVOn8MEHH2D16tWIj4/H+vXrERERIWR0qFQqrF+/HqtWrUJAQACSkpLQp08fQTMR1TSOfP7Wr18fR48eRc+ePREREYHk5GQoFAqBEpO1NWnSBE2aNEF0dLThOX1JcnJyMjZs2FDusvovx8fHx+PAgQN4++23MWfOHJtnJiISSn5+PsaOHYuuXbti6dKlQsexmTfffBPnzp3DyJEjcfnyZXh6egodiYiIiIiIiIiIiIjIwJIiXGuMU1ZtKNOta0qXIvP4EZEjSExMxJgxYzBgwAB8/fXXkEqlQkeymJ+fH44ePYqJEyciMjIScXFxGDVqlNCxiIiIqA65ffs2IiIiUFRUhDNnzqBVq1ZCR7KYWCzGypUrERQUhKlTpyI9PR3btm1jiSmRjajVamRlZRkVG5ctPU5LS4NSqTQsI5VKjQqNQ0JCjB4HBgYiICBAsPO2SZMm0Ol0aN++PZYvX47BgwezWJ2oEvQlywqFwmql5QUFBSgsLIRSqTQqvtUX3BYWFiI3N/ex+QoLC5GTk4M//vjDaL78/HyzJctisRgeHh5m3wfXfw/szp07WLp0Kd544w307NkTAPidgXJ4eXkhNzcXhw4dQmFhIR4+fGgoKy6vuFh/XFUqFfLy8io8dgBQr149o9ehm5sbZDIZvLy80KBBA7i5uSEtLQ1ZWVkVZnZ2/ueyBYMHD0abNm2watUqq+wLqtkaN26MrVu3IjIyErm5uYZrFACAVqvFlClTTC734MEDhIWF4f79+0ZFyu7u7hCLxQCAGzdu4P333zdMT0lJseGWEJEtXLx4Ee3bt+f7DERERERERERERERERERERERERERERERERLUUC5EJBw8exPTp0/HgwQOUlJQYfdEwMDAQISEhhscSiQRLlizBuHHjMHfuXERGRqJLly5YunQpoqKi7HqxAqVSic2bN2PdunVQKpVY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RHh4OH788Ud07NjRbusnIuGVLl22FUtLlysqX9aXLpedT6lUmr0YjF7ZkmRrly97enryotmVVFxcjISEBCQkJMDX1xezZs3ClClT0LRpU7PL3b17F/n5+XjqqafslNRxtGnTBnl5ecjIyLBZkTpVj6U/CyszT9l58/PzodFozObw9PS0uKBUJBJBq9XCzc0NjRo1QvPmzStVhkxERERERERERERERGSJF154AaNGjTI57dGjR0YFyeX9ycrKwq1btwyPHzx4ALVa/dh4+s98K/vH19eXnwvXUnFxcRg9ejTc3NyEjiI4Nzc3DB06FHFxcSxEJiIiIovs2LEDCoUCkZGRQkepESZMmICBAwciJSUFgYGBQscRlEqlMllwXPo2NTXVUPoI/PMdh9LFxqGhoUZlx/pbotqua9euQkeo8biPyBFFRUVh8eLFFs3r5OSELl264JtvvoFIJEKzZs3w448/sgQY/7yX16NHjzr/by0SzooVK7Bp0ybs2bMHffv2tdq4hYWF2LRpE1588UXI5XKz8/7999+4c+cOevXqZbX1E5H9/Pzzz3juueeEjkFERERERERERERERERERERERERERERERER2wELkWk6n02Hy5MlITU3FxYsX4e7uLnQkIqqFvL29kZ2dXe70iIgIvPzyy/j555/RvXt3Oyb7pwzv8OHDGD58OMLCwrB3717079/frhmIqHazR+kyALNlypYWjObk5CAlJeWxadnZ2SgqKrIoh7WLlks/J5fL4eLiYtP9aE+FhYWG+5mZmVi9ejVWrlyJvn37YtasWRg4cKDJ7b1x4wYAIDg42G5ZHYV+n9y4cYMX/LOQJUXD1igwzsvLg1artSiTJQXulv78KO/2ypUrGDRokNkcLi4u0Gg0ePbZZxEbG4uxY8di8uTJ1tjtDkEkEhnuW1oeTY5Ff4xFIhGPMREREREREREREVENJ5VK4e/vX6XPwPSf4VjyJyUlxXD//v37KC4uNpmlKmXKfn5+Rp8/UM2RkpKCa9euYd26dUJHqTHGjh2Lfv364c6dO2jatKnQcYiIiKiG279/P0aNGgWJRCJ0lBqhX79+8PHxQWJiIubPny90HJtQq9XIysoyKjYuW3qclpYGpVJpWEb//zp9oXFISIjR48DAQAQEBNSq35Mlqo7a+vODqC7TarVQKpVQKBTIyckpdz5nZ2eU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KPOYkJAQjBs3TiF5iEixQkNDoaury8/qExERERERERERERERERERERERERERERER1SC8U0Q1sm/fPixduhQbN25Eu3btRMchohpERUUF9erVQ3Jy8luX69mzJ6ZNm4Zz587ho48+UlK6t2vcuDFCQ0PRr18/eHp64tdff0W/fv1ExyIiomogJycHwL/vk2pqaigsLISNjQ369u2LHj16oHXr1lBVVX1lnIGBAe7evavsuFVGRkYG7OzsRMcgIiIiqtakUikePHiA1NRUZGZmIjMzE9nZ2ahVqxb09fWhp6cHU1NT1K1bV3RUIiIiIqoAT548waNHj5CZmYmsrCykp6dDV1cX+vr60NfXR926dWFubg41NTXRUYmIiIiEeN8y5aysrFIFyc+ePXvt9ykpKYiJiSn1s6KionKtSyaTQSqVIisrCxs2bMAPP/yADh06wMzMDI0bN+a+3GuoqamhUaNGSEhIEB2FqMYq/lt369YtzJs3D7Nnz0bLli0xZMgQ9O3bF/Xq1ROckIiqE5lMBgCIi4vDwoULMW/ePLi5uWHIkCHo168fTE1NXxlz//59FBUVwcrKStlxqwRra2scP34cK1asgLm5OczMzODs7AxfX180bNgQZmZmMDc3R8OGDWFoaCg6LhERUY325MkTnDp1CsHBwQgODkZ8fDx0dHTg6emJqVOnwtPTE61bt4aGhkaFrM/MzKzcc2klrV27Fs7Ozpg6dSrWr19fIZkqq/T0dAwePBj+/v7o27ev6DgVqmHDhvycZiV1584ddOzYEVZWVjh8+DD09PQUtq6lS5eia9euaNWqVZmWj4mJwYMHD9CpUyeFZSIixQkLC0ObNm2gqakpOgoREREREREREREREREREREREREREREREREpCQuRq4mbN29i6NChGD9+PMaMGSM6DhHVQPXr139nIbKNjQ3s7e1x4MCBSlOIDAAmJiY4duwY5syZg8DAQPzzzz9YtmzZa0sqiYiIyio7Oxuqqqpo27YtevfujZ49e8LW1vad4/T19ZGRkaGEhFXTixcvYGBgIDoGERERUbVRWFiIixcv4uTJk/jnn38QExODuLg45OXlvXOsiYkJmjRpAkdHR3h4eKBjx46wsbFRQmoiIiIiel9xcXE4efIkwsPDER0djdjYWKSlpb1znJaWFuzs7GBvbw83Nzd07NgRLVu2hLo6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AAAAAAAAAAAAAAAAAAAAAAAA+RiFyAAAI5ycnOTr66v169fr9ddfd9jct99+W2vWrNErr7yitWvXOmwuCoYKFSpozJgxeu2117Rq1SpFRESoS5cuql27tvr166eePXuqXLlypmMCAAAAAAAAAAAAAAA43BNPPKERI0aYjgEgn5s1a5bpCAAAAAAAALCzbdu2ady4cfruu+8UEBCgFStW6LHHHjMdK8/47rvv9Pzzzys4OFjh4eGm40iSZs+ere7du6tixYqmowCwgS+//FKVKlWSt7e36SgAAAAAAAAAAAAAAAAAAAAAAADIxyhEBgAY07FjR/Xt21dXr16Vm5ubQ2a6urpq7ty5ateunWJiYhQYGOiQuShYChcurMDAQAUGBurnn3/Wv/71L73zzjt644039Nxzz6l///5q166dnJycTEcFAAAAAAAAAAAAAABwiKpVqyooKMh0DAD5XExMjOkIAAAAAAAAsJODBw/qrbfeUkxMjLy9vbVt2zb5+PiYjpWn7Nu3T88++6x8fX316aef5omfUdy0aZP279+vTz75xHQUADYSExOjoKAgFSpUyHQUAAAAAAAAAAAAAAAAAAAAAAAA5GPOpgMAAB5cfn5+un37trZs2eLQuW3atFHfvn01cOBA/fXXXw6djYKnQYMGioiI0NmzZxUZGanz58+rffv2ql27tqZNm6akpCTTEQEAAAAAAAAAAAAAAAAAAAAAAAAAMOLkyZMaMGCAGjdurF9//VVxcXHasWMHZcjpHDlyRB07dpSXl5e+/PJLubi4mI4kSQoPD9eTTz6pFi1amI4CwAYOHDighIQEBQUFmY4CAAAAAAAAAAAAAAAAAAAAAACAfI5CZACAMRUqVFCTJk20fv16h8+ePn26ihQpohEjRjh8NgqmokWLKjAwUHFxcTp06JACAgI0Y8YMVatWTUFBQdq4caMsFovpmAAAAAAAAAAAAACQrwQFBclisXDL5gYAAAAAAAAAAJDXHDt2TC+//LIee+wxbdu2TVFRUdq1a5c6dOhgOlqec+TIET311FOqVauWVq1aJVdXV9ORJP0n19q1azV06FDTUQDYSFRUlKpVq6aWLVuajgIAAAAAAAAAAAAAAAAAAAAAAIB8jkJkAIBRHTt2NFKIXLJkSX388cdasmSJoqOjHT4fBZunp6emTp2q06dPa/Hixbp48aL8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AAAAAAAAgDVARdEBALAkZWVlOeyww3LTTTfl/PPPT3l5edFJn+mQQw5JmzZtcvDBB+ejjz7KzTffnNatWxedBau0tm3bZscdd8yOO+7Ycuztt9/Os88+23K75557Mn369FRUVOQrX/lKy0DyVlttlc0228xIMgAAAAAAAACrhHnz5mXWrFmpra1NfX19Zs6cmbq6utTX16euri4zZ85MfX19amtrM2vWrMyZM6fl4/r6+syYMSOzZ89OfX19pk+fnjlz5qS+vj6ffPLJZ752dXX15+6sqKhIQ0NDevTokbXWWiu9e/c2hgxrkGU5ggwAAAAAK4u5c+fm0EMPze9+97vcc8892XPPPYtOWiZuu+22PP/88/nrX/9adAqwnIwfPz4bbbRRBg8eXHQKAAAAAAAAAAAAAAAAa4hS8z9djer222/PQQcdVFTPKsNFvABWnMmTJ2fDDTfM/fffnz322KPonM/tySefzN57752NNtoo9957bzp37lx0EqzWmpubM2nSpEVGkp9//vnMnDkz5eXl2XDDDTNgwIBsvvnmLbf111+/6GwAAAAAAAAAVkENDQ2pq6tb4gjxnDlz/mWQuL6+vuV4fX19Zs+enRkzZqS+vr5lBLmxsXGJr92+fftUVVWluro67dq1S1VVVTp27LjIx23btk1VVVVqamrSpk2btGnTpuXjqqqqdOrUKVVVVYscb9OmTaZPn55OnTot8fUrKirS2NiYHXfcMccee2z222+/HHzwwUmSO+64Y5l9joE109ChQ5P4egIAAADAijdz5szsv//+eeaZZ3Lfffdl2223LTppmaivr88mm2ySXXbZJWPHji06B1gO6uvr07Nnz5x11lk544wzis4BAAAAAAAAAAAAAABgDVFRdAAAfJY+ffpk2223zS9+8YtVahB50KBB+a//+q/sscce2WGHHfLAAw+kV69eRWfBaqtUKqVfv37p169fy4WWm5qaMmnSpLz44ot56aWXMnHixIwfPz5TpkxJktTU1CwykLz55punf//+qa6uLvKtAAAAAAAAALCUpk+fnnnz5mXmzJmZNWtW5s2bl08++STz5s3LrFmzMnPmzMybNy/Tp0/P3LlzM3v27NTV1WXevHktA8Vz5sxJbW1t5s2bl9ra2pZh4xkzZqSpqWmJr7/w2HBVVVXatm2bjh07pk2bNmnbtm3WX3/9VFVVpV27dqmurk5VVVXat2+/yMcdOnRIVVVVOnTokPbt26dNmzbp0KHDcv28tWvXbrHHW7VqlYaGhqy99toZPnx4jj322Ky//vrLtQUAAAAAAFaUDz74ILvvvnvef//9/OlPf8qAAQOKTlpmRo8enWnTpuW8884rOgVYTiZMmJC6urocdthhRacAAAAAAAAAAAAAAACwBjGIDMAqYfjw4TnqqKPyj3/8I927dy8653PbbLPN8vjjj2ePPfbIoEGDctddd2WbbbYpOgvWGGVlZdloo42y0UYbZejQoS3HZ8yYkYkTJ+all17KSy+9lOeeey7/9//+38ycOTNJ0rNnz/Tv3z8bb7xxNt1002y88cbZZJNNsu666xb1VgAAAAAAAABWG7Nnz87cuXOX62jxZ2nbtm1at26dmpqaVFZWpn379mnXrl0qKyvTqVOnVFdXp0ePHmnfvn0qKytTU1OT1q1bp23btunQoUMqKytbBo6rqqrSqVOnlhHkTp06rYDP4vLRqlWrtGrVKvPnz2+539jYmP/zf/5Pjj/++Oyxxx4pLy8vuBIAAAAAAJadt956K7vuumvmz5+fxx57LBtuuGHRScvMhx9+mFGjRuX0009Pjx49is4BlpPx48dnzz339N85AAAAAAAAAAAAAAAAK5RBZABWCd/+9rdz+umnZ9y4cTn77LOLzvlC1l133Tz22GM5+OCDs8MOO2T470vyAAAgAElEQVTcuHE59NBDi86CNVrHjh2z7bbbZtttt2051tzcnClTpuTVV1/Nq6++mtdffz0vvvhifvWrX+W///u/kyTV1dUt48j9+/fPRhttlL59+6Zv377p0KFDUW8HAAAAAAAAYJn45JNP0tjY2DIwPGvWrJaB4ZkzZ2b+/PmZMWNGGhsbM3369DQ0NKSurq5lrHjB0PHiBopnzJiRefPmpa6u7jM7Kioq0qFDhyWOFvfp0yeVlZVp167dIqPFC0aJO3TokNatW6e6urpltLhjx46prKz0/d3P0LZt28yYMSNdunTJMccck//4j/9Ir169is4CAAAAAIBlbuLEidl9992z1lpr5Y9//GN69uxZdNIydfrpp6empiannnpq0SnAcvLWW2/lT3/6U+66666iUwAAAAAAAAAAAAAAAFjDGEQGYJXQunXrfPe73811112Xs846K61atSo66Qvp2LFj7rvvvvzoRz/KYYcdlmeeeSY//elPU15eXnQa8P8rlUrp06dP+vTpkz333HORxz766KO8+uqree211/Laa6/llVdeyWOPPZZ33nknTU1NSZKuXbu2jCP37ds3G264YcvHXbt2LeItAQAAAAAAAKu4BYPD9fX1mTNnTmbNmtUyNNzY2LhMB4wbGxs/V1OHDh1SUVGRmpqalJeXp2PHjmnVqlXat2/fMkbcs2fPloHi1q1bp23btunQoUMqKyvTsWPHlvOqq6tTWVn5L6PFZWVly/kzy5IceOCB2WuvvbLXXnulosJfMwUAAAAAYPX08MMP54ADDsjWW2+d3/zmN+nYsWPRScvUY489lltuuSUTJkxIu3btis4BlpMbb7wxXbp0ye677150CgAAAAAAAAAAAAAAAGsYV6oDYJVxzDHH5Iorrsj999+f/fbbr+icL6y8vDyjRo3KZpttlqOOOipvvPFGbrnllqy99tpFpwGfoUuXLunSpUu23377RY7PnTs3kydPzuTJkzNp0qS8+eabefPNN/Pss89mypQpmTt3bpKkffv26du3b3r37p31118/vXr1ynrrrZf11lsv66+/frp37+6C3gAAAAAAALAKWDAcXFdXl4aGhpbR4QVDxQsGhpfVgPHnUSqVUlNTk4qKinTo0KFlgLht27Zp3bp1y4DxBhts8KkDxu3atWsZKy4vL1/i87H6u+GGG4pOAAAAAACA5eqmm27KkUcemYMPPjg33HBDWrVqVXTSMjVv3rwcc8wx2XXXXbPvvvsWnQMsJ01NTbnpppvy3e9+d7X7OgYAAAAAAAAAAAAAAMDKzyAyAKuMPn36ZNddd8211167Sg4iL3DYYYdl4403ztChQ7PFFlvkV7/6VQYPHlx0FvAltG7dOv3790///v3/5bGmpqa8++67LSPJb775Zt5+++0899xzmTBhQt5///00NjYmSVq1apV11lkn6623Xnr37t0ylrzuuuumR48e6dGjR7p165by8vIV/RYBAAAAAABgpfNZY8QLBoYXjBLPnTs3s2fPbhkgnj9/fmbOnJmGhobU1dWlqakpM2bMSHNzc8sI8SeffJIkmT59epqbmzNjxow0NTV97sbKysq0a9cubdq0SVVVVdq3b59WrVotMjjctm3bdOvW7VMHjGtqaloGjJf0fGVlZcvl8wwAAAAAALA6uuSSS/KDH/wgJ554Yq688sqUSqWik5a5K664IlOmTMl9991XdAqwHD300EN55513cvjhhxedAgAAAAAAAAAAAAAAwBrIIDIAq5Tjjjsu3/zmN/P6669n4403LjrnS9tmm23y0ksvZfjw4dlhhx3yox/9KOecc46LFMNqpKysLL169UqvXr3y7//+7//yeENDQ95777288847efvttzN16tRMnTo177zzTl544YVMnTq15WLrC56vW7du6d69e3r27Jlu3bplnXXWSbdu3bLuuuuma9euWWedddK5c+e0bdt2Rb5VAAAAAAAA1iALjwYvGCBeMCicpGWc+J9HiT9tjLixsTG1tbXLdZS4VatWad++fSoqKtKhQ4eUl5enuro6pVIpNTU1KSsrS58+fZIkNTU1KZVKLUPD1dXVKS8vbxkpXjBE3K5du1RWVraMGFdVVaVNmzYt48YAAAAAAACsXBobG3PCCSdk3Lhxueaaa3LssccWnbRcvPPOO7nwwgtz9tlnt3wPDFg93XDDDdl2223Tv3//olMAAAAAAAAAAAAAAABYAxlEBmCVsscee6R379657rrrMnr06KJzlkrHjh1zxx135PLLL88Pf/jDPPvssxk/fny6detWdBqwAlRUVLQMJm+77baLPWf27Nn5+9//ng8++CDvvfde3n///Zbb1KlT8/TTT+cf//hHpk2btsiva9u2bTp37pxu3bqlS5cu6dy5czp37pwuXbqka9euLfcX3Dp16pRSqbQi3jYAAAAAAABf0IJR4AUDwwsPBi8YH14wKpwkM2fOzPz581sGh5Okrq4uDQ0NLWPESVJbW5vGxsaWoeIkLYPDc+fOzezZsxf7+l/Up40Rl5WVpWPHjl9olPjTxojbtGmTqqoqo8QAAAAAAAAs1qxZs/Ltb387f/zjH3P33Xdnr732KjppuTnhhBOyzjrr5JRTTik6BViO3n///dx77735xS9+UXQKAAAAAAAAAAAAAAAAa6h/GUReb731cuCBBxbRssw9++yzeeeddzJw4MD06tWr6BwAloGysrIcc8wxueiii3L++eenQ4cORSctlVKplNNPPz1DhgzJd77znWy++eYZO3Zs9tlnn6LTgJVA27Zt069fv/Tr12+J582dOzf/+Mc/8v777+fjjz/Oxx9/nI8++igffvhhPvroo3z88cd5/fXXW44tuMj9wmpqatKpU6dPva211lqL3G/fvn06dOiQ9u3bp7q6enl9CgAAAAAAAJar6dOnp7m5Ocn/jgYnyezZszN37twkWWQceOGR4YWHiRceJF6a8eEFPfX19ZkzZ86Xek8LRoIXDA4naRkQXjBGnKRlXLht27bp1q1bkqRDhw6pqKhoGTFO0jJGXFlZmXbt2iVJy1DxggHiJOnUqVOStIwTGyUGAAAAAABgZTBt2rR885vfzOuvv56HHnoogwcPLjppubn77rtz33335ZFHHknr1q2LzgGWo+uvvz4dO3bMAQccUHQKAAAAAAAAAAAAAAAAa6hS84Ireq6Grrvuuhx77LFJkh/84Af5yU9+krKysoKrAFhan3zySXr16pULLrggJ598ctE5y0xtbW1OP/30jB07NocddliuueaaVX7wGVg51dfXtwwnf/zxx/nkk08+9+3T1NTUpH379i1DyR07dkx1dXXLaHL79u1TU1OTysrKtG/fvuWi+506dWq5GH6HDh1SWVmZjh07LnLxfAAAAAAAYOW18HDvwgPATU1NmTFjRst5n2d4eFk+18Ijw0t6rqVVU1OTUqmUUqmUmpqaJIsfJF4wPlxRUdHyfeAvOj688MDwgtdd3CAxQBGGDh2aJLnjjjsKLgFWdb6eAAAAALAsvfbaa9lzzz1TXl6eBx54IH379i06abmZPXt2Nttss2y33Xa5+eabi84BlqOGhob07t07hx12WC6++OKicwAAAAAAAAAAAAAAAFhDrdaDyM8//3y22mqrJEl5eXl23nnn3H777amuri64DIClddJJJ+Xee+/NpEmTUlFRUXTOMjVhwoQcffTRadeuXW666abssMMORScBtFgwjDxz5szMnDkzdXV1qa2tzYwZM1ruz5w5M9OnT09tbe0i582YMSPz5s1LXV1dZs2alXnz5n3m6y24wP+C4YDFjQl81rE2bdqkqqrqSx1b2IIR54WVl5f7/wsAAAAAgDVAY2NjamtrFzm28MjuAgsP+i6wuD8Tr62tTWNj4yLHFh75TRY/3Lu411x4+HeBhYeBF1h4OHiBGTNmpKmpqeV+c3Nzpk+fvsg5DQ0Nqaur+8z39GUtPOi78DDwwmPCyf8OACf/OyScLPrn90v7XAu+z5BkkfHhJT0XAP/DgCmwrPh6AgAAAMCy8tBDD+Wggw7KpptumrvvvjtdunQpOmm5OuOMMzJ27Ni8+uqr6dGjR9E5wHJ055135qCDDsqkSZOywQYbFJ0DAAAAAAAAAAAAAADAGmq1HkSeP39+2rdv33IB1oqKimy44Yb53e9+54d6AFZxU6ZMSb9+/XLbbbflW9/6VtE5y9yHH36YI488Mvfff39OOOGEXHrppS0X3gZYnXzyySctQw21tbWZN29eamtrW4YaFow/zJw5M/Pnz19kdGFJxxYepljcsWU51LA4ixtP/rSBhMWd+0Ue/zIWHoQAAAAAAFhaixvuXVYWN/b7z+bMmZP6+volnvN5/lx4cYPBK9LCw7wLdOzYMWVlZS33S6VSampqFjmnoqIiHTp0WOTYwmO+C7Rp0yZVVVWLHGvfvn1atWq1xNdMkk6dOi1y//MODy/866qrq1NeXp5k+fzZNwDFMmAKLCu+ngAAAACwLIwdOzYnnHBCDjjggNx4442r/c/RTJw4MVtttVXGjBmTY489tugcYDnbaaed0rZt29x3331FpwAAAAAAAAAAAAAAALAGW60HkZNk4MCBee6551rut2rVKm3bts3dd9+dHXfcsbgwAJbaAQcckHfeeSfPPPNM0SnLzc0335zjjz8+vXv3zi233JKvfe1rRScBrFYWN5K88LGFzZgxI01NTYsc+7QhjsWdO2/evMyaNetznbtAfX195syZ87nfz+cxf/78zJw5c5k+JwAAAADAPw/hLiuLGwD+Z+Xl5amurl7iOQuP9n6aysrKtGvX7lMfr6mpSalUarm/uPe8uNdZ3Dhx27Zt07p16yX2AMCqxIApsKz4egIAAADA0mhoaMgpp5ySq6++Ouecc07OPffcRb7PuzpqaGjIv/3bv6VVq1Z5/PHHU1ZWVnQSsBy99tpr2XTTTXP//fdnjz32KDoHAAAAAAAAAAAAAACANVhF0QHL2+DBgzNx4sTMmzcvyf+Mf9XV1eUb3/hGrr/++nzve98ruBCAL+vUU0/NkCFD8vjjj2fIkCFF5ywXw4YNy3bbbZfDDz88gwYNysiRI3P66af7gXSAZaS8vDydOnVKkpZ/AgAAAAAAAAAAAAAAAKuW//7v/87QoUPz9NNP5ze/+U3222+/opNWiIsuuigvv/xynnvuOT97CmuA6667Lr169cquu+5adAoAAAAAAAAAAAAAAABruFJzc3Nz0RHL0y233JLvfve7aWpqWuR4qVRKc3NzjjzyyPz85z9PRcVqvw0NsFoaNGhQevTokQkTJhSdslw1Njbm8ssvzznnnJOBAwfmlltuSZ8+fYrOAgAAAAAAAACADB06NHfeeWfRGcBq4sADD8wdd9xRdAYAAAAAq5A33ngj3/zmN1NXV5d77rknW221VdFJK8SLL76YbbbZJqNGjcr3v//9onOA5WzOnDlZZ511cuaZZ+bMM88sOgcAAAAAAAAAAAAAAIA13Go/iPzaa6+lf//+n/p4eXl5dtxxx9x5552pqalZgWUALAt33nlnDjrooLz88svZZJNNis5Z7iZOnJhDDz00b731Vi677LIcddRRRScBAAAAAAAAALCGe/LJJzN16tSiM4DVxHrrrZdBgwYVnQEAAADAKuKhhx7KQQcdlE022SR33XVXunfvXnTSCjF//vwMGjQorVu3zqOPPpry8vKik4Dl7IYbbsjxxx+fqVOnpmvXrkXnAAAAAAAAAAAAAAAAsIZb7QeRm5qaUl1dnVmzZn3qOa1atcr666+fBx54IBtuuOEKrANgaTU1NWXAgAHZYostcvPNNxeds0LU19dn5MiRueyyy7LffvvluuuuS+fOnYvOAgAAAAAAAAAAAAAAAABYIZqbmzN69OicccYZOeSQQzJu3Li0bt266KwV5sc//nFGjx6dF154If369Ss6B1gBBg4cmP79++eWW24pOgUAAAAAAAAAAAAAAABSVnTA8lZWVpatttpqiec0NjZm0qRJOe+881ZQFQDLSllZWc4444zcdttteeONN4rOWSGqqqoyatSo/P73v8/TTz+dAQMG5N577y06CwAAAAAAAAAAAAAAAABguautrc3QoUNz5pln5uKLL87NN9+8Ro0h//Wvf82ll16aSy+91BgyrCGefvrpPPfcczn22GOLTgEAAAAAAAAAAAAAAIAka8AgcpIMHjw4lZWVi32soqIinTt3zk033ZRbbrllBZcBsCwccsgh6dOnTy699NKiU1aonXfeOS+99FJ22mmn7LPPPvn2t7+dDz/8sOgsAAAAAAAAAAAAAAAAAIDl4rXXXsugQYPy6KOP5oEHHsjpp59edNIKNXfu3AwbNizbbbddjjvuuKJzgBXk2muvzeabb57BgwcXnQIAAAAAAAAAAAAAAABJ1pBB5K233jrz589f5FirVq1SVlaW4447Lm+++WaGDRtWUB0AS6u8vDxnnnlmbrrpprz99ttF56xQnTp1ys0335wHHnggTz31VDbeeOOMHTu26CwAAAAAAAAAAAAAAAAAgGXq1ltvzcCBA7P22mvnhRdeyM4771x00gp3zjnnZMqUKRk7dmxKpVLROcAKMG3atNx+++059thji04BAAAAAAAAAAAAAACAFmvMIHJzc3OSpKysLKVSKX379k2pVMqwYcPSvn37ggsBWFrDhg3LOuusk8suu6zolELstttueeWVV3L00UfnuOOOy+67777GjUMDAAAAAAAAAAAAAAAAAKufuXPnZsSIERk2bFiGDx+eRx55JD179iw6a4V76qmncsUVV2T06NHp27dv0TnACnL99denqqoqhx56aNEpAAAAAAAAAAAAAAAA0KLUvGApeDXXuXPnTJs2Ld27d8/VV1+d/fffPzvvvHM+/vjjPPvss2nVqlXRiQAspWuvvTannHJKJk+enB49ehSdU5gnnngi//Ef/5G3334755xzTk477bSUl5cXnQUAAAAAAAAAAAAAAAAA8IVMnTo1Q4cOzSuvvJLx48dn6NChRScVYtasWdlyyy2zwQYb5IEHHkipVCo6CVgB5s+fnz59+uQ73/lORo0aVXQOAAAAAAAAAAAAAAAAtCgrOmBF2WGHHXLWWWdl0qRJOeCAA1IqlXLttdfmb3/7W8aMGVN0HgDLwBFHHJHOnTvnoosuKjqlUIMHD86LL76Yc845J+ecc0623377vPrqq0VnAQAAAAAAAAAAAAAAAAB8bvfee2++9rWvZc6cOXnuuefW2DHkJDnxxBMzbdq0jB8/3hgyrEF+9atf5R//+EeOP/74olMAAAAAAAAAAAAAAABgEaXm5ubmoiNWhLlz56Z169b/cvz888/PJZdckokTJ6ZPnz4FlAGwLI0bNy7HH398XnvtNV/Xk0ycODHDhw/PCy+8kFNOOSXnn39+Kisri84CAAAAAAAAAAAAAAAAAFisurq6nHLKKbnhhhtyxBFH5Oqrr07btm2LzirMHXfckYMOOih33XVX9tlnn6JzgBVom222yYYbbpjbbrut6BQAAAAAAAAAAAAAAABYxBoziPxp5s2bly233DLrrrtuHnzwwaJzAFhKjY2N+cpXvpJtttkmN910U9E5K4WGhoZcc801+dGPfpQ+ffpk/Pjx2XrrrYvOAgAAAAAAAAAAAAAAAABYxFNPPZVhw4blo48+yjXXXJNDDjmk6KRCTZ48OVtuuWWGDRuWq666qugcYAX6r//6r+y444556qmn8vWvf73oHAAAAAAAAAAAAAAAAFhEWdEBRausrMz48ePzn//5n/nlL39ZdA4AS6m8vDwjR47MrbfemhdffLHonJVCRUVFRowYkZdeeildu3bN4MGDM2LEiMyaNavoNAAAAAAAAAAAAAAAAACAzJ8/PyNHjsy2226bPn365OWXX17jx5AbGhpy6KGHZr311ssll1xSdA6wgo0ePTpDhgwxhgwAAAAAAAAAAAAAAMBKqdTc3NxcdMTK4Ljjjssdd9yRV155JV26dCk6B4Cl0NzcnIEDB6ZXr1656667is5ZqTQ3N2fs2LE588wz07Vr1/zsZz/LrrvuWnQWAAAAAAAAAAAAAAAAALCGevnllzNs2LC8+uqrufjii3PSSSelVCoVnVW40047Ldddd12eeeaZ9O/fv+gcYAWaMmVK+vXrl1//+tc54IADis4BAAAAAAAAAAAAAACAf1FWdMDKYtSoUWndunXOPPPMolMAWEqlUik/+clPcvfdd+fJJ58sOmelUiqVcvTRR+fll1/O5ptvnt122y37779/3n777aLTAAAAAAAAAAAAAAAAAIA1SHNzc8aMGZOtttoqlZWVefHFFzNixAhjyEnuvffe/PSnP80111xjDBnWQKNHj856662XffbZp+gUAAAAAAAAAAAAAAAAWKxSc3Nzc9ERK4sJEybkwAMPzEMPPZSdd9656BwAltIOO+yQ8vLy/OEPfyg6ZaX1xz/+MSeccEKmTJmSM844I2eddVaqqqqKzgIAAAAAAAAAAAAAAAAAVmOvvPJKjj766PzlL3/JyJEjc8YZZ6S8vLzorJXCpEmTMnDgwBx88MG59tpri84BVrDa2tqst956Oe+883LyyScXnQMAAAAAAAAAAAAAAACLZRD5n+y33355+eWX8+KLL6ZNmzZF5wCwFJ588skMGTIkd911V/bZZ5+ic1Za8+fPz89//vOcffbZ6dq1a8aMGZM999yz6CwAAAAAAAAAAAAAAAAAYDVTX1+fCy+8MJdeemkGDBiQcePGZcCAAUVnrTTq6+szePDgNDU15cknn3TNA1gDXXbZZbngggsyderUdOzYsegcAAAAAAAAAAAAAAAAWKyyogNWNj/72c/ywQcf5IILLig6BYClNGjQoBx88ME55ZRTMnfu3KJzVlqtWrXKiBEj8tprr2Xw4MHZa6+9svfee2fKlClFpwEAAAAAAAAAAAAAAAAAq4lHHnkkm2++ecaMGZNLL700Tz75pDHkf3Lsscfmrbfeyl133WUMGdZADQ0NufrqqzN8+HBjyAAAAAAAAAAAAAAAAKzUDCL/k3XXXTcXX3xxLrvssjz//PNF5wCwlC699NJ88MEHueqqq4pOWen17NkzN998c/7whz9kypQp2WyzzTJy5MjU19cXnQYAAAAAAAAAAAAAAAAArKLefvvtDB06NDvvvHM23XTTvPzyyxkxYkTKy8uLTlupXH311bn55ptzyy23ZIMNNig6ByjAhAkT8ve//z0nnXRS0SkAAAAAAAAAAAAAAACwRKXm5ubmoiNWNk1NTdlpp50ybdq0PPvss6msrCw6CYClMHLkyPz0pz/N66+/nh49ehSds0qYP39+fv7zn+fss89O165dc+WVV2avvfYqOgsAAAAAAAAAAAAAAAAAWEXMmTMnV111VX7yk5+ke/fuGT16tJ9V/BR//vOfs9NOO+Xcc8/ND3/4w6JzgIIMGjQo66yzTu68886iUwAAAAAAAAAAAAAAAGCJDCJ/ismTJ2fzzTfP97///VxwwQVF5wCwFObMmZP+/fvnG9/4RsaNG1d0zirlvffey1lnnZVbb701e+65Z6666qpssMEGRWcBAAAAAAAAAAAAAAAAACuppqam3HLLLTnnnHPyySef5Mc//nFOPvnkVFZWFp22Unr77bez9dZbZ7vttsudd96ZUqlUdBJQgEcffTQ77LBDHn/88QwePLjoHAAAAAAAAAAAAAAAAFgig8hLcM011+Tkk0/OE088ka233rroHACWwi9/+csMGzYsTz/9dAYOHFh0zirnkUceyYknnpi33norp556as4444x06NCh6CwAAAAAAAAAAAAAAAAAYCVy//335wc/+EFee+21HHHEERk5cmR69uxZdNZKa86cOdluu+3S0NCQxx9/PO3atSs6CSjIbrvtlvr6+vzpT38qOgUAAAAAAAAAAAAAAAA+k0HkJWhubs6uu+6ad999N88//3yqqqqKTgLgS2pubs7gwYNTUVGRRx99NKVSqeikVc78+fMzZsyYXHjhhamsrMzIkSNz5JFHpqKioug0AAAAAAAAAAAAAAAAAKBAf/jDH3Luuefm8ccfz3777ZcLL7wwm2yySdFZK7WmpqYMHTo0jz76aJ555pn07t276CSgIC+88EK23HLLPPDAA9l1112LzgEAAAAAAAAAAAAAAIDPVFZ0wMqsVCpl7Nixeffdd3PhhRcWnQPAUiiVSrn++uvz1FNP5cYbbyw6Z5XUqlWrnHbaaXnzzTdzxBFH5JRTTslmm22WO+64I83NzUXnAQAAAAAAAAAAAAAAAAAr2MMPP5ztttsuO+20U1q3bp0nnngiv/nNb4whfw5nnXVWfvvb32bChAnGkGENd+GFF2bAgAHZZZddik4BAAAAAAAAAAAAAACAz8Ug8mfo3bt3Lr744owaNSrPPPNM0TkALIXNN988J5xwQs4444x8+OGHReesstZaa62MGjUqr7/+enbcccd8+9vfzqBBg/LYY48VnQYAAAAAAAAAAAAAAAAALGdNTU259957M2TIkHzjG99Iu3bt8uc//zkPP/xw/u3f/q3ovFXC+PHjc/nll2fcuHHZbrvtis4BCjRp0qTcdddd+dGPfpRSqVR0DgAAAAAAAAAAAAAAAHwupebm5uaiI1Z2zc3N2XXXXfPuu+/m+eefT1VVVdFJAHxJs2bNyle+8pVsv/32uemmm4rOWS08++yzOeOMM/LHP/4xe+21V37605+mX79+RWcBAAAAAAAAALAMuOg6sLLy1+ABAAAAVrzZs2fn5ptvzujRo/PGG29kzz33zI9+9CMjyF/Q73//++y111758Y9/nHPPPbfoHKBg3/ve9/LEE0/klVdeSVlZWdE5AAAAAAAAAAAAAAAA8LkYRP6c3nrrrWy++eYZMWJELrjggpoes1kAACAASURBVKJzAFgKd999d/bbb788/PDD2WmnnYrOWW08/PDDOfXUU/Pqq6/miCOOyPnnn59u3boVnQUAAAAAAAAAwFIolUo5+eSTM2jQoKJTAJIkTz75ZK688kqDyAAAAAAr0JQpUzJu3LiMHTs2s2bNyrBhw/L9738/m2yySdFpq5yJEydm2223zT777JObbroppVKp6CSgQO+++2769u2b6667LkcccUTROQAAAAAAAAAAAAAAAPC5GUT+Aq655pqcfPLJeeKJJ7L11lsXnQPAUth3333zyiuv5KWXXkpVVVXROauNpqam3HrrrTnrrLNSV1eXU089NWeeeWbatGlTdBoAAAAAAAAAAF9CqVTKr3/963zrW98qOgUgSXL77bfnoIMOMogMAAAAsJw1NDTk/vvvz/XXX5+HHnoo3bt3z1FHHZXjjjsuXbp0KTpvlfTOO+9k8ODB6devXx588MG0bt266CSgYCNGjMiECRPy5ptvprKysugcAAAAAAAAAAAAAAAA+NzKig5YlRx33HH593//9xx++OGpr68vOgeApXDVVVfl/fffz6hRo4pOWa2UlZVl2LBheeONN3LaaafliiuuyMYbb5zx48dn/vz5RecBAAAAAAAAAAAAAAAAAEvw4osv5owzzkjv3r1zwAEHpLm5OXfeeWfefvvtnHvuucaQv6Rp06Zlt912S6dOnTJhwgRjyECmTZuWG2+8MaeffroxZAAAAAAAAAAAAAAAAFY5BpG/gFKplLFjx+bdd9/NhRdeWHQOAEuhV69e+clPfpKLLroof/3rX4vOWe20a9cu5557bt54443sueeeOfbYYw0jAwAAAAAAAAAAAAAAAMBK6K233sqoUaPy1a9+NV/72tdy55135ogjjsikSZPy4IMPZr/99ktFRUXRmausOXPmZN99901dXV1+97vfpVOnTkUnASuB0aNHp3Xr1hk+fHjRKQAAAAAAAAAAAAAAAPCFGUT+gnr37p2LL744o0aNyl/+8peicwBYCieeeGKGDBmSQw89NPX19UXnrJa6d++ea6+9NpMmTcree++dE044If369cuYMWMyd+7covMAAAAAAAAAAAAAAAAAYI00efLkjBkzJttuu2369OmTSy65JFtssUX+8z//M2+++WYuuOCCbLDBBkVnrvIaGxtz6KGH5tVXX81DDz2U9dZbr+gkYCVQW1uba665Jt///vfTrl27onMAAAAAAAAAAAAAAADgCzOI/CUcd9xx2WWXXXLIIYekrq6u6BwAvqSysrL84he/yNSpU3P++ecXnbNa69WrV8aMGZPXX389++yzT84666xstNFGhpEBAAAAAAAAAAAAAAAAYAWYM2dOHnrooZx66qnZeOON07dv31x88cXZbLPN8rvf/S4ffPBBbr755uy8884plUpF5642RowYkQceeCD33HNP+vfvX3QOsJK49tpr09TUlOOPP77oFAAAAAAAAAAAAAAAAPhSDCJ/CaVSKePGjcuMGTNy6qmnFp0DwFLo3bt3LrvsslxyySX585//XHTOam/hYeR99913kWHk+vr6ovMAAAAAAAAAAAAAAAAAYLXQ2NiYF154IaNHj85uu+2WtddeO7vuumsefPDB7L333nnsscfy3nvv5frrr89uu+2WysrKopNXOyNHjsx1112XX/7ylxkyZEjROcBKor6+PmPGjMlxxx2XmpqaonMAAAAAAAAAAAAAAADgSyk1Nzc3Fx2xqpowYUIOPPDATJgwIfvuu2/ROQB8Sc3Nzdlzzz3zt7/9LS+88ELat29fdNIaY+rUqbn88sszduzYdO3aNaecckqOPvroVFVVFZ0GAAAAAAAAAECSUqmUX//61/nWt75VdApAkuT222/PQQcdFH8NHgAAAGBRc+bMyfPPP5/HHnssjz32WB5//PHMmDEja6+9dnbaaafssssu2XXXXbPuuusWnbpGGDduXI466qhcffXVOf7444vOAVYiY8aMyQ9+8INMmTIl3bp1KzoHAAAAAAAAAAAAAAAAvhSDyEtp+PDhuffee/PSSy+lR48eRecA8CW9++67+epXv5rDDz88V155ZdE5a5ypU6dm1KhRGT9+fLp165Yf/vCHOeKII1JZWVl0GgAAAAAAAADAGs0gMrCyMYgMAAAA8D/jxy+99FKee+65ltvLL7+choaG9OjRI9tvv3222267bL/99tlss81SVlZWdPIa5b777sv++++fs88+O+ecc07ROcBKZM6cOdlwww1z8MEH5/LLLy86BwAAAAAAAAAAAAAAAL40g8hLadasWdlyyy3Tu3fvPPjggymVSkUnAfAl3XLLLTn88MPz29/+NrvvvnvROWukqVOn5vLLL8/YsWPTsWPHHHPMMTnxxBOz9tprF50GAAAAAAAAALBGMogMrGwMIgMAAABrkpkzZ2bSpEl59dVXM3HixLz66qv5f//v/2Xy5MlpampKx44ds+WWW2arrbbKVlttla233jp9+/YtOnuN9vTTT2ennXbKd77znVx//fVF5wArmcsuuyznnXdeJk+enK5duxadAwAAAAAAAAAAAAAAAF+aQeRl4Nlnn83gwYNzxRVX5MQTTyw6B4ClMGzYsDz44IN54YUX0rNnz6Jz1ljvvfdefvazn+X666/P3Llz893vfjcnn3xy+vXrV3QaAAAAAAAAAMAaxSAysLIxiAwAAACsTurq6jJ16tS89957+fvf/54pU6bk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fNbX5xQAAAAA1pcpU6bk0EMPTbNmzfLQQw8pQwZW6YUXXsjQoUNz1VVXKUMGAAAAAAAAAAAAAABgo1VS7RulNogFCxake/fumTRpUsaNG5fmzZsXHQmAdTBs2LAcd9xxufLKK3POOecUHYdaNnny5IwYMSJ33313xo4dm5YtW+boo49O796907179zRp0qToiEA9Nm/evHzxxRepqqrK3LlzM2PGjHzxxReZM2dOpk+fntmzZ2fOnDk1j0kyderUJKnZniTTpk1LdXV15s6dm1mzZiVJpk+fnkWLFtWssTxVVVVZuHDhcvctXLgwVVVVtX3KAAAAAAAAQB3QsmXLTJ8+fa3GnnDCCbntttvSoEGDNRq3ouLT5W1fk2NXd63VGbuyY5bct6q5li0tXvb41Rm/OmOXt29ZK8u8urlWdT4rO481ybC657qq+7Ss1bmnq5NvTcavybnW5rqrm2VN51zTc1vWun72V2bYsGHp16+fYmUAAAAA1ruqqqocdNBBmTZtWp566qlsscUWRUcC6oEDDjggCxYsyDPPPLPc/4cOAAAAAAAAAAAAAAAAG4OyogNsKsrKynLXXXdl1113TWVlZe68886iIwGwDvr27ZspU6bkrLPOSrt27XLCCScUHYla1LZt25x++uk5/fTT8/HHH2fo0KEZOnRo/vCHP6Rp06bp0aNHevXqlZ49e2bLLbcsOi6wAVRVVaWqqirTp0+veV5VVZWpU6eucN/ySo4XlxivTOPGjVNeXp5GjRpls802S5K0aNEipaWly93WrFmzdOjQIUnSvHnzlJWVpaysLM2bN1/u/E2aNEnTpk1XuH7Lli3X+EvMAQAAAAAAgLrvhz/84WoVIpeVlWXBggVp3rx5jjvuuNx000057LDD6tTvEZf94viVlbKuTdnq2mSprq4u7Avta/P81vZ81nbc4uOXfFwbinHX3brei9U9vojPKQAAAACsjdmzZ+fwww/PhAkTMnbsWGXIwGr505/+lLFjx2bs2LHKkAEAAAAAAAAAAAAAANiolVT79qgN6i9/+Ut69eqVQYMG5aSTTio6DgDr6Jxzzsn111+fhx56KIccckjRcVjPxo8fn4ceeih//vOfM2rUqMyePTu77rprDjvssPTq1Su77757nfryX2Bp06ZNy+eff17zM3Xq1BU+X7LoeOrUqSucs6KiIi1btkyLFi2+9NOsWbM0btw4LVu2TNOmTdOkSZO0atUqjRs3zmabbZbmzZuncePGadGiRcrLy9O4ceNUVFRswCsCAAAAAAAAbEo6deqUjz76aLn7SktLU11dnbKysvTo0SMnnnhijjjiiDRq1CglJSUZOnRo+vbtu8ZrrqjkdHnb1+TYdV1/bdZdncxLvl6d8Suaq7bmrc3Ma7LOqsat6PjaWn9l1ua+ru74Vc21ptdlXXKv7Xt/de7F2q63JjlWZdiwYenXr58SZQAAAADWm/nz5+fII4/MCy+8kDFjxmSHHXYoOhJQDyxYsCDf+ta30qVLl9x1111FxwEAAAAAAAAAAAAAAID1qqzoAJua7373uzn33HNzxhlnpGvXrunSpUvRkQBYB1dddVU++eST9OnTJ08++WR22WWXoiOxHm2xxRY55ZRTcsopp2TOnDl54okn8uCDD2bw4MH55S9/mfbt2+ewww7LYYcdlkMOOSTNmzcvOjJstKZOnZrJkydnypQpNT+TJk1aattnn322VNnxokWLlpqjQYMGad26dSoqKtK6deua51tttVUqKipqio1XVnoMAAAAAAAAUF+VlpampKQkixYtygEHHJATTzwxRx99dJo1a7be1162cHV9lCGvi7VZt6SkZL3NvSbz1Ob8tTFuefd68eO65FzXguTFx6zue3F1rMlc63pdajP3kmMXz7uq49ak4BsAAAAA6puFCxfmhBNOyNixYzN69GhlyMBq+93vfpf33nsvDz74YNFRAAAAAAAAAAAAAAAAYL0rqfZtUxvcggUL0r1790yaNCnjxo1TlghQz82dOzeHH354/v73v+fxxx/PzjvvXHQkCvDqq6/moYceyp///Oc8//zzKS0tzd57750DDzww//Iv/5Ju3bqladOmRceEOmv27Nn59NNPM2HChEyePDkTJkzIp59+WlNyPGnSpKWKjufPn7/U+GbNmqVt27Zp165d2rRpU/OzbNnx4uetW7dOq1atCjpbAAAAAAAAgA2vU6dO+eijj1JWVpaFCxdm3333Tf/+/dO7d++0bt16heNKSkoydOjQ9O3bd7XXWl6h6orKe1e0b/H+9VmauyLLjlny2CX3Lbt9RXMuuW9l12Fl41Y2z/Lyrc62NXm97Fwryr+qjMsW+S65f23OaWXHL8+K7sOq3ovLW2NV74tVnc+yx66s5HpJa7vWiuZd1b1Yctvqvo/X5HO7Np/zYcOGpV+/fkqXAQAAAKh11dXVqayszB133JGHH344Bx54YNGRgHpixowZ2XbbbXPCCSfkqquuKjoOAAAAAAAAAAAAAAAArHcKkQvy8ccfZ9ddd02PHj1y1113FR0HgHU0e/bs9OrVK6+99lqeeOKJ7LjjjkVHokBTpkzJI488ktGjR2fMmDH5P//n/6RRo0bZc889awqS99lnn5SXlxcdFdarOXPmZPLkyRk/fnwmTZpUU3g8adKkTJw4MRMnTqzZP2PGjKXGtmrVKh06dKgpOG7fvv1SRcdt2rRZqvy4SZMmBZ0lAAAAAAAAQP2wzTbbpEWLFunfv3/69euXLbbYYrXGrU0hMlB/rU5hddEUIgMAAACwvpx33nm59tprc++996ZXr15FxwHqkZ/+9Kf5/e9/n3fffTetW7cuOg4AAAAAAAAAAAAAAACsdwqRC/SXv/wlvXr1ys0335yTTz656DgArKNZs2blsMMOyxtvvJEnnngiO+ywQ9GRqCMmTJiQsWPHZtSoURk7dmzeeOONlJWVpUuXLunRo0f23XffHHDAAWnZsmXRUWGV5s2blylTpmTq1KmZMGFCxo8fv8Lnn376aRYtWlQztkmTJqmoqMgWW2yRjh071jwuua2ioiJbbbVVWrRoUeBZAgAAAAAAAGx8xo8fv9olyEtSiAybjhUVHytEBgAAAGBT8Itf/CKXXHJJ7rjjjhx33HFFxwHqkY8//jjbbbddLr300vzoRz8qOg4AAAAAAAAAAAAAAABsEAqRC3bBBRfk+uuvz1//+tfsvPPORccBYB198cUX6dmzZ95+++08+eST6dy5c9GRqIM+/vjjPPnkkxkzZkzGjBmTd955Jw0bNsyOO+6Y3XffPbvttlt23333fOtb30qjRo2KjssmYsaMGfnkk08yadKkfPzxx5k0aVLGjx+fiRMnZsKECZkwYUImTpyYzz77bKlxm222WTp2/7Bl5gAAIABJREFU7Jj27dunXbt22WKLLdKuXbu0b98+HTt2TNu2bWv2N23atKCzAwAAAAAAAGBtKUSGjV9JSUmSrLAMebG68mfnCpEBAAAAqG3XXHNNfvKTn+R3v/tdKisri44D1DP9+/fPs88+mzfeeMO/CwYAAAAAAAAAAAAAAGCToRC5YAsWLEj37t3z6aef5oUXXkirVq2KjgTAOpo+fXoOPfTQTJgwIWPGjMnWW29ddCTquPHjx2fMmDEZN25cXnrppfztb3/LjBkz0qhRo+y8885LlSTvtNNOadiwYdGRqSeqq6vz6aefrrLkeMKECZk1a1bNuLKysrRr1y4dO3ZMx44d06FDh5qi4y233HKpwuPy8vICzxAAAAAAAACA9U0hMlDXKEQGAAAAoDb95je/ycCBA3P55Zfn/PPPLzoOUM/87W9/yx577JG77rrL79MAAAAAAAAAAAAAAADYpChErgMmTJhQU3J43333pUGDBkVHAmAdTZ06NYccckgmTpyYRx99NDvuuGPRkahHFi1alH/+8581Bcnjxo3Lyy+/nJkzZ6Zx48bp0qVLdt111+ywww7Zfvvts91226VTp05Fx2YDmjFjRiZMmJBJkyZl8uTJGT9+/HLLjidNmpQFCxbUjCsvL68pOF5cdty+ffuakuOvfOUrNWXHJSUlBZ4hAAAAAAAAAHWFQmSgrlGIDAAAAEBtufnmm1NZWZlLL700P/3pT4uOA9RDBx10UGbPnp1nn33Wv8sEAAAAAAAAAAAAAABgk1JWdACSjh07Zvjw4enevXsuvfTSXHjhhUVHAmAdVVRU5Mknn8xRRx2V/fffP3/+85+zzz77FB2LeqJBgwbp3LlzOnfunOOPPz5JsnDhwrz11lt56aWX8tJLL+Xll1/OPffckylTpiRJmjVrlu222y6dO3fODjvskO222y7bb799vvGNb6RRo0ZFng6racqUKTUFx8uWHU+ePDmTJk3KhAkTMnny5MyePXupsW3atEn79u1rSo47d+78pZLjLbbYIi1atCjo7AAAAAAAAAAAAAAAAADqjltuuSWnnXZafvnLXypDBtbK8OHD8+STT+aZZ55RhgwAAAAAAAAAAAAAAMAmp6S6urq66BD8X7/97W8zcODAPPjgg+nZs2fRcQCoBXPnzs33vve9PProoxkxYkS+853vFB2Jjcxnn32WN998M2+99VbeeuutmucffPBBFi1alLKysnz961/Ptttum6222ipbbbVVOnXqlK9+9avZaqutsuWWW6Zhw4ZFn8ZGae7cufnss88yZcqUTJw4MZ9++umXyo6XfD5//vyasaWlpWnbtm3atm2bjh07pl27dmnXrl06dOiw1PP27dunbdu27iEAAAAAAAAA601JSUmGDh2a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RK4nunbtmhtvvDFXXXVV7rjjjqLjALAe9OrVKy+//HIaNWqUrl275p577ik6EgAAAAAAAAAAAAAAAABAnTdv3rwce+yxufvuu3P//fenT58+RUcCNgIzZszIT37yk5x00knp1q1b0XEAAAAAAAAAAAAAAACgzlCIXI+ccMIJOffcczNgwICMHTu26DgArAedOnXKU089lRNPPDF9+vTJwIEDM3/+/KJjAQAAAAAAAAAAAAAAAADUSbNmzcq//uu/ZuTIkXnkkUfyne98p+hIwEbi5z//eWbNmpXLL7+86CgAAAAAAAAAAAAAAABQpyhErmcuu+yy9OzZM0ceeWTefffdouMAsB40btw41113XQYPHpxBgwalR48emTBhQtGxAAAAAAAAAAAAAAAAAADqlIkTJ6Z79+556aWXMnr06Oy///5FRwI2Es8991xuuOGG/PrXv07btm2LjgMAAAAAAAAAAAAAAAB1Skl1dXV10SFYM7Nnz86BBx6YqqqqPPvss6moqCg6EgDrySuvvJI+ffpkxowZueOOO3LwwQcXHQkAAAAAAAAAgE1ISUlJ0REAlsufwQMAAADw+uuvp1evXiktLc1DDz2U7bbbruhIwEZi7ty56dq1a7bYYos89thjfmcGAAAAAAAAAAAAAAAAy1CIXE9NmDAhe+21V77+9a/nscceS6NGjYqOBMB6Mn369Jx66qkZMWJEfvrTn+biiy9OWVlZ0bEAAAAAAAAAANgEDBs2rOgIAMvVt2/foiMAAAAAUKDRo0fnmGOOyfbbb5/7778/bdu2LToSsBE5//zzc+ONN+a1115Lp06dio4DAAAAAAAAAAAAAAAAdY5C5Hrs73//ew444ID069cvgwYNKjoOAOvZkCFDcvrpp2ennXbK3Xffna233rroSAAAAAAAAAAAAAAAAAAAG9Stt96aysrKHHnkkRk8eHCaNm1adCRgI/L3v/89e+21V66//vpUVlYWHQcAAAAAAAAAAAAAAADqpAZFB2Dt7brrrhk6dGhuu+22/PrXvy46DgDrWf/+/TNu3LjMnj07u+66a4YPH150JAAAAAAAAAAAAAAAAACADaK6ujoXX3xxTj755Jx++um5++67lSEDtWrBggX5t3/7t+y777459dRTi44DAAAAAAAAAAAAAAAAdZZC5HquZ8+eufzyy3Puuefm/vvvLzoOAOvZ9ttvn+effz4/+MEP0rdv31RWVmbu3LlFxwIAAAAAAAAAAAAAAAAAWG/mzp2b448/PpdddlkGDx6c6667Lg0a+LoEoHZdeumlefvttzNo0KCUlJQUHQcAAAAAAAAAAAAAAADqrJLq6urqokOw7k477bTcfvvtGT16dPbee++i4wCwAdx555057bTTsu222+aPf/xjOnfuXHQkAAAAAAAAAAAAAAAAAIBaNXny5Bx55JF58803c88996R79+5FRwI2Qq+99lp23333XH755Tn77LOLjgMAAAAAAAAAAAAAAAB1mkLkjcTChQtzzDHH5Omnn84zzzyT7bbbruhIAGwA7777br7//e/nH//4R/77v/87p512WkpKSoqOBQAAAAAAAAAAAAAAAACwzl588cX07t07DRs2zEMPPZTOnTsXHQnYCC1YsCD77LNPSktLM3bs2JSWlhYdCQAAAAAAAAAAAAAAAOq0BkUHoHaUlpbmzjvvzDe/+c307Nkzn376adGRANgAvvGNb+SZZ57JRRddlIEDB+Y73/lOxo8fX3QsAAAAAAAAAAAAAAAAAIB1MmTIkPzLv/xLvvGNb+S5555ThgysN//93/+dV199NbfccosyZAAAAAAAAAAAAAAAAFgNCpE3Ik2bNs0DDzyQ0tLS9OrVK1988UXRkQDYAMrKynL++efn6aefzvvvv59ddtklDzzwQNGxAAAAAAAAAAAAAAAAAADW2Ny5c3PqqafmxBNPzI9//OOMGjUq7dq1KzoWsJH65z//mV/84he5+OKLs8MOOxQdBwAAAAAAAAAAAAAAAOqFkurq6uqiQ1C73nvvveyzzz7ZY489ct9996WsrKzoSABsIFVVVfn3f//33H777amsrMzVV1+d8vLyomMBAAAAAAAAAAAAAAAAAKzSBx98kOOOOy6vv/56br311vTu3bvoSMBGbNGiRTnwwAMzY8aMvPDCC2nYsGHRkQAAAAAAAAAAAAAAAKBeaFB0AGrfNttsk/vuuy+PP/54fvjDHxYdB4ANqEWLFhk8eHCGDx+eYcOGZaeddsqYMWOKjgUAAAAAAAAAAAAAAAAAsFL33HNPdt1118ybNy8vvfSSMmRgvfv1r3+d559/PrfddpsyZAAAAAAAAAAAAAAAAFgDCpE3Ut26dcudd96Zm266Kb/61a+KjgPABta7d++8/vrr2XnnndO9e/dUVlZm1qxZRccCAAAAAAAAAAAAAAAAAFjKrFmzcsopp6RPnz7p379/nn322Wy77bZFxwI2cq+++mp+9rOf5eKLL06XLl2KjgMAAAAAAAAAAAAAAAD1Skl1dXV10SFYf2688cacccYZ+d3vfpfKysqi4wBQgOHDh6eysjKtW7fObbfdlv3226/oSAAAAAAAAAAAAAAAAAAAefHFF9O/f/9MmDAhN998c/r06VN0JGATMGfOnOy5555p1apVnnjiiZSWlhYdCQAAAAAAAAAAAAAAAOqVsqIDsH6ddtppmTx5cs4444xUVFSkb9++RUcCYAPr06dP9txzzwwYMCDdu3fPOeeck0suuSSNGzcuOhoAAAAAALAePffcc7nmmmuKjgFsArp165Yf//jHRccAAAAAAAAA6pEFCxbk6quvzkUXXZQDDjggjz32WLbaaquiYwGbiJ/+9Kf58MMP88ADDyhDBgAAAAAAAAAAAAAAgLXQoOgArH8XXnhhfvSjH+WEE07Io48+WnQcAArw1a9+NY899liuu+66/Pa3v80ee+yRcePGFR0LAAAAAABYjz766KOMGDGi6BjARu6vf/1rnnvuuaJjAAAAAAAAAPXIG2+8kW7duuUXv/hFrr76amXIwAY1atSo/OY3v8n111+fr33ta0XHAQAAAAAAAAAAAAAAgHqppLq6urroEKx/ixYtSv/+/XP//ffn8ccfzx577FF0JAAK8t5772XAgAF5+umn86Mf/Si/+MUvUl5eXnQsAAAAAACglg0bNiz9+vWLPwsA1qc+ffokSYYPH15wEgAAAAAAAKCumzdvXi677LJcdtll2WWXXTJkyJB885vfLDoWsAn5/PPP06VLl3Tr1i3Dhg0rOg4AAAAAAAAAAAAAAADUWw2KDsCG0aBBg9x6663Zf//907Nnz7z11ltFRwKgINtss00ef/zx/OEPf8itt96anXbaKSNHjiw6FgAAAAAAAAAAAAAAAACwkXr22WfTtWvXXHHFFbnkkkvyzDPPKEMGNrgBAwakuro6N954Y9FRAAAAAAAAAAAAAAAAoF5TiLwJadiwYe6555507tw5hxxySD788MOiIwFQkJKSkvTv3z+vv/56dttttxx66KHp27dvpkyZUnQ0AAAAAAAAAAAAAAAAAGAj8dlnn+X000/P/vvvn6985St54403cv7556e0tLToaMAm5oYbbsj999+fIUOGpHXr1kXHAQAAAAAAAAAAAAAAgHpNIfImpmnTpnnggQfSqlWrfPvb386nn35adCQACtShQ4cMHz48I0aMyNixY7PTTjtl6NChRccCAAAAAAAAAAAAAAAAAOqxBQsW5IYbbsg3v/nN3HfffRk8eHAeeeSRfO1rXys6GrAJevXVV/OTn/wkF154YQ466KCi4wAAAAAAAAAAAAAAAEC9pxB5E1RRUZHRo0enpKQkhxxySD777LOiIwFQsN69e+f1119Pr169ctxxx+Xb3/523nnnnaJjAQAAAAAAAAAAAAAAAAD1zOOPP56uXbvmxz/+cf7t3/4tb7/9do4//viiYwGbqC+++CLHHnts9thjj1x44YVFxwEAAAAAAAAAAAAAAICNgkLkTVS7du0ycuTIzJw5Mz169MjUqVOLjgRAwSoqKjJo0KA89dRTmTBhQnbcccdccMEFmTNnTtHRAAAAAAAAAAAAAAAAAIA67vXXX0/fvn1z8MEHp3379vn73/+eK6+8Mi1atCg6GrAJ+/d///dMnDgxt99+e0pLS4uOAwAAAAAAAAAAAAAAABsFhcibsK985SsZNWpUJk+enF69emXmzJlFRwKgDthvv/3yt7/9LVdddVV+97vfZaeddspf/vKXomMBAAAAAAAAAAAAAAAAAHXQhx9+mMrKynTp0iUffPBBRo0alZEjR2aHHXYoOhqwifvjH/+Y2267Lbfddlu++tWvFh0HAAAAAAAAAAAAAAAANhoKkTdxX//61zNq1Ki8++67OfzwwzN79uyiIwFQB5SVlWXgwIF5/fXXs8suu6Rnz57p06dPPvroo6KjAQAAAAAAAAAAAAAAAAB1wLvvvpsBAwZk2223zZgxYzJ06NA8//zzOfjgg4uOBpDXX389lZWVGThwYP71X/+16DgAAAAAAAAAAAAAAACwUVGITDp37pxRo0bltddeyxFHHJE5c+YUHQmAOuIrX/lKRowYkYcffjgvv/xyOnfunEsuuSSzZ88uOhoAAAAAAAAAAAAAAAAAUIB//OMf+f73v5/OnTvnqaeeyu9///v84x//SO/evVNSUlJ0PIDMnDkzffr0yc4775wrrrii6DgAAAAAAAAAAAAAAACw0VGITJJk5513ziOPPJIXXnghxx57bObPn190JADqkO9+97t544038l//9V+55pprsu2222bIkCGprq4uOhoAAAAAAAAAAAAAAAAAsAE88cQTOeKII/Ktb30rr732Wm6//fa8+eabOemkk1JWVlZ0PIAkSXV1dU4++eR8/vnnGTFiRBo1alR0JAAAAAAAAAAAAAAAANjoKESmxu67756HHnooo0ePTr9+/TJv3ryiIwFQhzRs2DADBw7Me++9l969e+fkk0/O3nvvnb/+9a9FRwMAAAAAAAAAAAAAAAAA1oM5c+bklltuSZcuXXLQQQfl888/z5/+9Ke88sorOe6441JaWlp0RIClXHvttbn33ntz1113Zcsttyw6DgAAAAAAAAAAAAAAAGyUFCKzlH333TePPvpoRo8enaOOOipz584tOhIAdUybNm1y3XXX5bnnnktpaWn23XffDBgwIOPHjy86GgAAAAAAAAAAAAAAAABQC95444385Cc/SadOnXLmmWdml112ybhx4/L000/niCOOSElJSdERAb7kueeeywUXXJBLL7003bt3LzoOAAAAAAAAAAAAAAAAbLQUIvMl++yzTx5++OE8/fTT6dOnT+bNm1d0JADqoD322CPPPPNMhgwZkpEjR2bbbbfNhRdemBkzZhQdDQAAAAAAAAAAAAAAAABYQ1VVVbn55pvTrVu37LjjjhkxYkTOOuusfPDBBxk8eHB22223oiMCrNAnn3yS3r1757vf/W7OO++8ouMAAAAAAAAAAAAAAADARk0hMsu177775oknnsjYsWNz5JFHZs6cOUVHAqAOKikpyfe///288847+a//+q/89re/zdZbb50rrrgic+fOLToeAAAAAAAAAAAAAAAAALASs2fPzogRI9KnT5907NgxP/zhD7P11ltn5MiRef/993PRRRelQ4cORccEWKk5c+bk6KOPTosWLTJ48OCUlJQUHQkAAAAAAAAAAAAAAAA2agqRWaHddtstI0eOzPPPP5+jjjpKKTIAK9SoUaMMHDgw7733Xvr375///M//zLe+9a3cc889qa6uLjoeAAAAAAAAAAAAAAAAAPD/mzlzZu69994cd9xxadeuXY499th8/vnnueaaazJ+/Pjceeed6dGjRxo08HUEQP1w5pln5q233sq9996bli1bFh0HAAAAAAAAAAAAAAAANnr+BSIrtbgU+YUXXsiRRx6pFBmAlWrdunWuueaavPPOOznwwAPTt2/fdOnSJcOHDy86GgAAAAAA1GvXX399Pvnkk6JjAAAAAAAAAAD11HvvvZff/OY3OfTQQ9OmTZv06dMn48ePzxVXXJFPPvkko0ePTmVlZSoqKoqOCrBGrrnmmtx222258847s8MOOxQdBwAAAAAAAAAAAAAAADYJCpFZpa5du+aRRx7J888/nyOOOCKzZs0qOhIAddxWW22V3//+93nllVfSuXPn9OvXL926dcuDDz5YdDQAAAAAAKiXzjvvvHTq1CkHHXRQhgwZkpkzZ9b6GiUlJav8Wd7xqzvP2mRYm6y1ZU3mrM11i7Im96iotddm7Orsr+33Tn2yvj4/AAAAAAAAQPEmT56c4cOH54wzzsh2222Xb3zjG7noootSUVGRm266KRMnTsyYMWNyxhlnpH379kXHBVgro0aNyvnnn5/LLrsshx12WNFxAAAAAAAAAAAAAAAAYJNRUv3/sXffUVqWB/r4ryn0rigwIEiRZkvEAlbYAII1ajjEAho1u8lqTNtNcjY5WWOSkz0mOSfGjXFNPDFmbVjQqMESbCuKEmNBlKEpTZoig/RhmN8f+To/UcqAwEP5fM55zvu+T7nv637mBQTfmau2trboEOwZXnrppQwbNiy9e/fOQw89lFatWhUdCYA9xAsvvJAf/vCHeeyxxzJo0KD8+Mc/zgknnFB0LIDdTnV1dZYtW5YPPvggy5cvT3V1daqqqrJu3bqsXLkyq1atytq1a1NVVZX169dvdGzlypVZt25dqqqqUl1dneXLl2809ofXfny+TRXnvP/++zt1nQAA7FsaN26cJk2a7LL5mjdvngYNGuyy+Vq3br3LiuPKysrSsmXLXTJXkjRq1ChNmzat9/kNGzZMs2bN6nVukyZN0rhx43qd26JFi5SXl9fr3Pp+PUpLS+v9/zkaNGiQ5s2b1+vcbXm/N2vWLA0bNqzXuS1btkxZWVm9zm3Tpk29zgP2PA0bNkx1dXVKS0uT/OP3p/POOy+jR4/O4MGDN/n7xJgxYzJy5MjU92MBJSUlG527pdf1eb6lseszf32u255r6mNr92Jv8+Gfn0Ws8dPMvbVr63N8X/o6f9yO+vUzYsSIJMndd9+9w7IBAAAAAAAA227mzJl58cUmdE8NAAAgAElEQVQXM3HixDz55JN5/fXXU1pamn79+mXQoEE59dRTc+KJJ+7Sz9gB7EwzZszIcccdl2HDhuW2224rOg4AAAAAAAAAAAAAAADsUxQis02mTJmSoUOHpkOHDnnkkUfStm3boiMBsAf5v//7v/zgBz/IM888k8GDB+f73/9+Bg4cWHQsgB1m/fr1effdd/Pee++lqqoqVVVVWbZsWd3jR7ePHvvw+apVq7Y4ftOmTdOoUaO0atUq5eXladWqVV3h2IfHWrZsmfLy8rRu3XqjazdVZFZSUvKJ85JtKxsDAIAtWb16ddasWbPL5vvggw+yfv36XTbf+++/v8vmWr9+fT744INdNt+aNWuyevXqbbpm+fLlqampqde59b13NTU1Wb58eb3OXbduXVauXFmvc3f1e3N3VF5enhYtWtTr3C0VjW+tXPrDv69uyub+XvqhrRVMb6kAe2sF3Vsqmd5aCfaW7sfWist35v1g71dWVpYNGzZstK9Bgwaprq5Oq1atMnLkyIwaNSonnnhi3fGdVYi8o4qLtydTfY9/2mLbnVWUuzsX7haZ7dPM/Wnee7vz12NH2J71KUQGAAAAAACAPcPs2bMzefLk/P3vf8+LL76YF154Ie+++24aNGiQI488MieffHIGDRqUk08+eYufZwHYUy1dujQDBgxIq1at8vTTT/t8HQAAAAAAAAAAAAAAAOxiCpHZZm+//XYGDx6cBg0a5PHHH0+nTp2KjgTAHmb8+PH5yU9+kqeeeionnHBCvv/972f48OFFxwL4hA8Ljt99990sWbIkCxcu3OLrd9999xNjfFhc3Lp16422D/dt6rFFixabLD0GAABg11uxYkWqq6vrdW5VVdUnyko3ZcOGDamqqqrXmNXV1VmxYkW9zt2WIuuVK1dm3bp19Tp3SwXWW5tzS/dkayXWWyo531pJ+Ja+blu7/6tWrcratWs3e3x3taWC6EaNGqVp06abvbZVq1YpLS39xP4WLVqkvLz8E/ubNWuWhg0bfmL/5kqbN/dvG5sr5t5S0XabNm22aQ2bK7DeXDn1tq5hVyotLd1iSWnDhg2zbt269OjRIxdeeGEuvvjiTJo0aZsKkT9uW8qGd0bpbH2u21lltwqR95y5FSJv3raub3vvh0JkAAAAAAAA2Dlqa2szd+7czJgxI9OmTctrr72WyZMnZ/LkyXWff+nevXuOPfbYuu2oo45K48aNC04OsHNVV1dn2LBhqayszAsvvJCOHTsWHQkAAAAAAAAAAAAAAAD2OQqR2S4LFizI0KFDs2LFijz++OPp0aNH0ZEA2ANNmDAhP/3pTzNu3Lj069cv3//+93P22WdvsrQCYEdau3ZtFixYkPnz5+edd97JO++8k/nz52fBggWZN29eFi1atMmC47KysrRt2zYHHHBA2rZtm/bt23/i9QEHHJD99tuvrty4efPmBa0SAAAA2BmKKohevnx5ampqNnlsZxVEb26tm1vH5kqsN1fAvbn7tbl7sbV1FmFzpc4lJSVp3br1Jq/ZXHl1y5YtU1ZW9on9zZs3T3l5ee65555tylVTU5PevXvnzTffzPLlyzeZc2uKLESu7zX1nffD5x/e+4/u/9Cm9m3K1u5JfebaWobNjbO5sTdnc2N//Pimxv7o/o+//njOzc2xtfm3tNYtZd3UtVtb1+bG21S+rc21tfu/rfdkW9a/LWNubn2by7y9HyFSiAwAAAAAAADbb+HChZk7d27mzZuXuXPnZs6cOZk1a1amT5+eGTNmZM2aNUn+8XmDww47LIcffniOOOKIHH744Tn88MPTsmXLglcAsGvV1tbmkksuydixY/Pss8/miCOOKDoSAAAAAAAAAAAAAAAA7JMUIrPdli5dmuHDh2fOnDl57LHHcvjhhxcdCYA91EsvvZSf/vSneeCBB9KrV69861vfykUXXZTGjRsXHQ3YA7333nuZM2dO5s2bl3nz5tX9YJhFixZl7ty5WbhwYZYsWVJ3fmlpadq1a5cOHTqkY8eOqaioSIcOHXLAAQekXbt2dWXHHz5urQwFAAAAgF1re0qdN1cwvbny6FWrVmXt2rWf2L+jSp1ra2uzbNmyTWZdtmxZampqcu+9927y+KaUlZWlpqYm5eXlWb9+ff785z/nzDPPrPf1HyqqELm+Jbr1nXdrhcOber2lY5vLu7m5tmXcLWXe2tibW39917ulcbdU8ryj7+GnHXdL69raPdrSXNta7lyf8erznvk092NbisXrs7bNUYgMAAAAAAAASU1NTaqqqrJs2bJUVVVl+fLlda/ffffdLF68OIsXL86SJUvy7rvvZuHChVmwYMFGn0do3759OnXqlO7du6dHjx455JBD0rNnz/To0SMHHHBAgasD2H1cc801ueaaa3L//ffnjDPOKDoOAAAAAAAAAAAAAAAA7LMUIvOpLFu2LGeccUYqKyvzyCOPpF+/fkVHAmAPNmXKlPzyl7/M7bffntatW+eKK67IV7/61bRt27boaMBuYsOGDVmwYEHefvvtzJ49O3PmzMmcOXMye/bszJ49O2+//fZGRTOtW7euKzmuqKhIx44d06FDh3Tq1Cnt27fPQQcdlHbt2qW8vLzAVQEAAADAlq1evTpNmzbd4jllZWWpra1NaWlpBg8enPPPPz+1tbW55JJLtqvgNNkxhcjbWoa8rdfXtxC4PuMk9S+k3Za5tnbs47aUeVtz1Xd927uG+pQcb2ptmzp3W0p9tyXPpymNrs/4W1Kf+17feT9ue0qx65t5W68ZMWJEXnzxxRx33HHbdB0AAAAAAADsztauXZtVq1ZttG/16tVZs2ZN1qxZk9WrV9eds27duo2+n+WjGjdunLZt2+bAAw9Mu3bt0rZt27Rt2zbt2rVLRUVFOnfunE6dOqVTp05p1KjRrlgawB7r9ttvz0UXXZQbbrghX/nKV4qOAwAAAAAAAAAAAAAAAPs0hch8aitXrsy5556b559/Pvfee2+GDBlSdCQA9nALFy7M9ddfnxtvvDFr1qzJxRdfnG9+85s55JBDio4G7GS1tbV55513MmvWrMycOTNvv/32RuXH8+bNy7p165IkDRo0SMeOHdO5c+ccfPDB6dKlSzp37lz32Llz5zRp0qTgFQEAAADAp7dixYq0aNHiE/s/LEFOklNOOSWXXHJJzj777LRq1SpJMmbMmIwcOXK3K0T+eLnr9hYeb+14fYpsP1pYW99C4G2da3vH3RGFyPVd35bG3tay4vpmq++69sRC5M3d948f2xHzKkQGAAAAAACAnaO0tLTu/79/qHHjxmnSpMkmH1u0aJGWLVumdevWadWqVVq2bJlWrVopOQbYQcaPH5/TTjstV111VX7+858XHQcAAAAAAAAAAAAAAAD2eQqR2SHWrVuXSy+9NHfddVduvPHGXHbZZUVHAmAvsHLlytxyyy351a9+lVmzZmXo0KG54oorctppp6W0tLToeMB2WrNmTd5666260uOPPs6aNStr1qxJ8o8fEtOtW7dPFB136dIlXbp0SUVFRcrKygpeDQAAAADsfFVVVWndunWS1P37eGlpaf7pn/4pF1xwQc4+++y64x+1uxYi74gM2zrvtpYL7w2FyJ+mZPijrxUib1shcn2/Rtu7xq3NV99j9c1fHyNGjEiS3H333dt0HQAAAAAAAABAfbz22ms55ZRTMmzYsNx2222+xxgAAAAAAAAAAAAAAAB2A+VFB2Dv0LBhw/zpT39Kjx498uUvfzlz587N1VdfXXQsAPZwzZo1yxVXXJGvfvWreeihh/Kb3/wmZ511Vrp27ZqvfOUrufTSS7P//vsXHRPYhJUrV2b69OmZNm1apk+fnpkzZ9aVHs+fP7+uTOHAAw9Mt27d0r1795x33nnp3r173euKioqCVwEAAAAAu4eampokSVlZWQYOHJgLLrgg55xzTtq0aVNIno+X5BZVhrwjryspKdmpmeo7zo4af1PjftSmvoY7Yv4dXc67uaybG+fTrmtb5qqPj9/3+t6f7S0C39yx+q5jZ73/AAAAAAAAAAC216xZs3LqqafmqKOOyi233KIMGQAAAAAAAAAAAAAAAHYTJbV+kik72PXXX59vfOMb+dd//ddcd911vqEMgB1q2rRpueGGG3LLLbdk3bp1+eIXv5jLL788xx9/fNHRYJ+zbt26vPXWW6msrNyo/Hj69OmZN29ekn8UtBx88MHp3r37RmXH3bp1S7du3dKiRYuCVwEAAAAAu78VK1bkzjvvzDnnnJP999+/3teNGTMmI0eO3CHlwJsr793csQ+Pb8vcmyrt3ZaMm7vuo+d+9NjH929uzI8e29J92NJ1WxpnU/nqs29z69rcuFua++NFwB89vj1Zt3R+fXNuKevWxt/auj5+7aeZq77r2dratuV9tq3v8frc+y2dtzUjRoxIktx9993bdT0AAAAAAAAAwKYsWbIkJ554Ylq2bJknn3wyzZs3LzoSAAAAAAAAAAAAAAAA8P8oRGanGDNmTEaPHp2zzjorf/rTn9KoUaOiIwGwl1mxYkX+93//NzfeeGNeffXV9OnTJ5dddllGjRqVAw88sOh4sFd55513MnXq1EydOjXTpk2r22bPnp3169cnSSoqKtKzZ88ccsghdY+9evVKt27d0rBhw4JXAAAAAAD7pu0tRAZ2rW0tD9/dKEQGAAAAAAAAAHa0Dz74IIMGDUpVVVUmTJjge4cBAAAAAAAAAAAAAABgN6MQmZ3mqaeeyjnnnJMjjzwy999/f1q3bl10JAD2Un/7299y880354477siqVaty5pln5rLLLsvQoUNTXl5edDzYI1RXV2fWrFl54403UllZmalTp+bNN99MZWVlqqqqkiRt2rTZqOz4o+XHzZs3L3gFAAAAAMDHKUSGPYNCZAAAAAAAAACA/9+qVaty2mmnpbKyMhMmTEi3bt2KjgQAAAAAAAAAAAAAAAB8jEJkdqrJkydn+PDhad26dR588MF07dq16EgA7MXWrFmTBx98MDfddFPGjx+fNm3a5Atf+EJGjRqVE044ISUlJUVHhMKtXbs2M2bMyBtvvJEpU6bkjTfeqCtCXr16dZJ/FB/37ds3hx56aN1jt27d0rVrV7+OAAAAAGAPohAZdn8f/Xf3PfXXqkJkAAAAAAAAAGBHWbt2bc4+++z87W9/y1NPPZXDDjus6EgAAAAAAAAAAAAAAADAJihEZqebN29ezjzzzMyfPz/3339/jj/++KIjAbAPmDlzZm677bbcdtttmTZtWnr27JkLL7wwF154Ybp37150PNjp5s2bl6lTp6aysjJvvPFGKisrM3Xq1MyfPz9J0qhRo/Ts2TO9e/dOr1690rdv3/Tq1Su9evVKs2bNCk4PAAAAAOwICpGBXUEhMgAAAAAAAACwI1RXV2fEiBF56qmnMn78+PTr16/oSAAAAAAAAAAAAAAAAMBmKERml1i5cmUuuuiijBs3LjfddFNGjx5ddCQA9iGTJk3KbbfdljvvvDOLFi1Kv379ct555+W8885Lz549i44H2626ujozZszIm2++malTp2bq1Kl58803U1lZmQ8++CBJst9++6V3797p06dPevXqlT59+qR3797p2rVrysrKCl4BAAAAALAzKUQGdgWFyAAAAAAAAADAp1VTU5NRo0blgQceyCOPPJKTTjqp6EgAAAAAAAAAAAAAAADAFihEZpfZsGFDvvvd7+aXv/xlfvCDH+RHP/pRSkpKio4FwD6kpqYm48ePzz333JP7778/S5YsyeGHH15XjnzYYYcVHRE26YMPPqgrO/6w8PiNN97IrFmzUl1dnZKSknTp0iW9evVK375906tXr/Tu3Tt9+/bNAQccUHR8AAAAAKAgCpGBXUEhMgAAAAAAAADwaWzYsCGXXXZZ7rrrrjz88MMZNGhQ0ZEAAAAAAAAAAAAAAACArVCIzC53880356tf/WrOOeec3HLLLWnSpEnRkQDYB9XU1OSZZ57Jvffem7Fjx+add95Jt27dcsYZZ+SMM87IySefnEaNGhUdk33MwoUL8+abb36i/Hju3LlJkoYNG9aVHffu3Tt9+vRJ796906tXrzRt2rTg9AAAAADA7kYhMrArKEQGAAAAAAAAALbXhg0bcvnll+f222/P2LFjM3z48KIjAQAAAAAAAAAAAAAAAPWgEJlCTJgwIeecc046duyYBx98MJ06dSo6EgD7sA0bNuSFF17Igw8+mIcffjivvfZamjdvnqFDh+b000/Pqaeemo4dOxYdk71ETU1N3nrrrbri46lTp+aNN97I1KlTs2zZsiRJ69at06tXr/Tt27eu/Lhv377p2rVrysrKCl4BAAAAALCnUIgM7AoKkQEAAAAAAACA7VFTU5PLLrssd9xxR+6+++6cddZZRUcCAAAAAAAAAAAAAAAA6kkhMoWZPn16zjjjjKxevTr33Xdfjj766KIjAUCSZM6cOXn44Yfz0EMP5cknn8zq1avTu3fvDB48OIMHD87AgQPTqlWromOym1u9enUqKyszderUjcqPKysrs3bt2iRJx44d06dPn/Tu3Xujxw4dOhScHgAAAADYGyhEBnYFhcgAAAAAAAAAwLaqqanJxRdfnPvuuy9jx47NqaeeWnQkAAAAAAAAAAAAAAAAYBsoRKZQS5cuzQUXXJCnn346v/nNb3LppZcWHQkANrJ69eo8++yzGT9+fP7617/m5ZdfTmlpaY4++uicfPLJOemkk3LCCSekTZs2RUelAOvXr8/s2bMzbdq0T2xz585NbW1tysvL061bt/Tt2ze9e/feqPy4ZcuWRS8BAAAAANiLKUQGdgWFyAAAAAAAAADAtli/fn1GjRqVP//5z3nggQcyePDgoiMBAAAAAAAAAAAAAAAA26i86ADs2/bbb788/PDD+eEPf5jLL788kyZNynXXXZeGDRsWHQ0AkiRNmjTJkCFDMmTIkCTJe++9lyeeeCJPPPFEHn744fz85z9PSUlJ+vbtm5NOOiknnnhijj322PTo0aPg5OwotbW1eeeddzJjxoxMmzYt06dPz7Rp01JZWZlZs2Zl3bp1SZIDDjggvXr1Ss+ePTN48OAccsgh6d27d3r06OG/bQAAAAAAAAAAAAAAAACAfd66dety4YUXZty4cXnooYcyaNCgoiMBAAAAAAAAAAAAAAAA26Gktra2tugQkCRjx47NxRdfnMMOOyz33HNPKioqio4EAFv13nvvZcKECXnmmWcyYcKEvPTSS6murs5+++2XY445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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pn, im, fm = pm4py.convert_to_petri_net(bpmn_2)\n", + "pm4py.view_petri_net(pn, im, fm)" + ] + }, + { + "cell_type": "markdown", + "id": "b52da0ce-a32c-4237-8a98-46c98b6533b7", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "### Checking Behavioral Model Properties" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "cfd3c067-fb57-4582-ae8c-9d25815cd567", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Input is ok.\n", + "Petri Net is a workflow net.\n", + "Every place is covered by s-components.\n", + "There are no dead tasks.\n", + "All tasks are live.\n" + ] + }, + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm4py.check_soundness(pn, im, fm)" + ] + }, + { + "cell_type": "markdown", + "id": "629ff72b-5568-4cf1-874e-905217eb8af3", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "Technically, the net should only be *easy sound*" + ] + }, + { + "cell_type": "markdown", + "id": "03751cbc-b357-4e17-9ea7-dc96cc9ece53", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Let $N{=}(P,T,F)$ be a Petri net and let $i,o{\\in}\\mathcal{B}(P)$ be a corresponding *initial* and *final* marking." + ] + }, + { + "cell_type": "markdown", + "id": "69cd5e75-5935-4eb3-826c-0a2ffd27898b", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "$(N,i)$ is *easy sound* iff $o{\\in}\\mathcal{R}(N,i)$ (aka, the *final marking* $o$ should be reachable from initial marking $i$)" + ] + }, + { + "cell_type": "markdown", + "id": "e12f963d-ce4e-4321-9fa9-a0ac4c265fa1", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "### Computing Quality Statistics" + ] + }, + { + "cell_type": "markdown", + "id": "2e988c94-be16-4f79-af8b-6e5b7d21b129", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "#### Fitness" + ] + }, + { + "cell_type": "markdown", + "id": "a471ce11-fb54-46b5-a152-c5972e1e4663", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "The *fitness* $f$ of an event log $L$ w.r.t. a model $M$ is the fraction of log behavior that is described by the model." + ] + }, + { + "cell_type": "markdown", + "id": "05ad6dc7-0084-4eb8-bf56-55b291f8eb30", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "$f(L,M){=}1{\\implies}$ all behavior described by the event log is also described by the model" + ] + }, + { + "cell_type": "markdown", + "id": "89ebe9e9-3b70-4063-b7f9-ff0c4c1d7a7a", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "$f(L,M){=}0{\\implies}$ none of the behavior described by the event log is also described by the model" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "e2a45c67-9e64-4b08-bf04-2782687339de", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7c46d3f5a6a8496c9120da70938fd37d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "replaying log with TBR, completed variants :: 0%| | 0/116 [00:00>', None),\n", + " ('>>', None),\n", + " ('T02 Check confirmation of receipt', 'T02 Check confirmation of receipt'),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('T03 Adjust confirmation of receipt', 'T03 Adjust confirmation of receipt'),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('T02 Check confirmation of receipt', 'T02 Check confirmation of receipt'),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None)],\n", + " 'cost': 19,\n", + " 'visited_states': 28,\n", + " 'queued_states': 61,\n", + " 'traversed_arcs': 63,\n", + " 'lp_solved': 4,\n", + " 'fitness': 1.0,\n", + " 'bwc': 60011}" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alignments = pm4py.conformance_diagnostics_alignments(log, pn, im, fm)\n", + "alignments[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "66b056c5-a3e7-47d5-8738-7055f2e2e818", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'alignment': [('Confirmation of receipt', 'Confirmation of receipt'),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', 'T06 Determine necessity of stop advice'),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None),\n", + " ('>>', None)],\n", + " 'cost': 10011,\n", + " 'visited_states': 13,\n", + " 'queued_states': 19,\n", + " 'traversed_arcs': 21,\n", + " 'lp_solved': 3,\n", + " 'fitness': 0.6666666666666667,\n", + " 'bwc': 30011}" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "non_fitting = list(filter(lambda a: a['fitness']<1.0, alignments))\n", + "non_fitting[0]" + ] + }, + { + "cell_type": "markdown", + "id": "085e8084-8c55-4dd6-87ab-3ae4c01b656d", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Reconstructing the Trace" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "b3ac3ab0-872d-4095-a36d-b4a3242d6551", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['Confirmation of receipt']" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alignment = non_fitting[0]['alignment']\n", + "trace = list(map(lambda m: m[0], filter(lambda m: m[0] !='>>', alignment)))\n", + "trace" + ] + }, + { + "cell_type": "markdown", + "id": "3bef4251-c73e-4c87-88cc-8263c0627cc3", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Reconstructing the Model Behavior" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "608d5c9b-39d5-4b5a-9393-52ad5ab3db80", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['Confirmation of receipt', 'T06 Determine necessity of stop advice']" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trace = list(map(lambda m: m[1], filter(lambda m: m[1] !='>>' and m[1] is not None, alignment)))\n", + "trace" + ] + }, + { + "cell_type": "markdown", + "id": "a27f6c21-0820-4c3b-8d9e-75d6c8c3ef03", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "### Comparing Footprints" + ] + }, + { + "cell_type": "markdown", + "id": "2d34ccc7-8365-4aec-b080-c23038bf3c5e", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Recall: $a{>_{L}}b$, iff $\\exists{\\sigma{\\in}L}\\left(\\exists{1{\\leq}i{<}|\\sigma|}\\left(\\sigma(i){=}a{\\wedge}\\sigma(i{+}1){=}b\\right)\\right)$" + ] + }, + { + "cell_type": "markdown", + "id": "730aa421-0b30-42de-8aaa-c415d39ffe4a", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "We let $a{\\to_L}b$ iff $a{>_L}b$ and $b{\\not>_L}a$, we let $a{\\#}b$ iff $a{\\not>_L}b$ and $b{\\not>_L}a$, and, we let $a{||_L}b$ iff $a{>_L}b$ and $b{>_L}a$" + ] + }, + { + "cell_type": "markdown", + "id": "3e93e3d6-c376-4c03-a407-e1bbdf424afe", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "We can do the same thing for the model: assume $\\mathcal{L}(M){\\subseteq}\\Sigma^*$ represents the language of some model $M$. " + ] + }, + { + "cell_type": "markdown", + "id": "5c9c7cc0-4cc3-4789-b781-2e46259f0869", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "We let $a{>_{M}}b$, iff $\\exists{\\sigma{\\in}\\mathcal{L}(M)}\\left(\\exists{1{\\leq}i{<}|\\sigma|}\\left(\\sigma(i){=}a{\\wedge}\\sigma(i{+}1){=}b\\right)\\right)$" + ] + }, + { + "cell_type": "markdown", + "id": "b4bebc02-1d81-4842-9c6d-baadda8291bf", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Then, $a{\\to_M}b$, $a{\\#_L}b$, and $a{||_L}b$ are defined analogously " + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "9e74dd4e-3d6d-49ad-af40-5649b4368204", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from pm4py.algo.discovery.footprints import algorithm as footprints_discovery\n", + "process_tree = pm4py.discover_process_tree_inductive(df, noise_threshold=0.1)\n", + "fp_log = footprints_discovery.apply(log, variant=footprints_discovery.Variants.ENTIRE_EVENT_LOG)\n", + "fp_model = footprints_discovery.apply(process_tree, variant=footprints_discovery.Variants.PROCESS_TREE)\n", + "from pm4py.visualization.footprints import visualizer as fp_visualizer\n", + "gviz = fp_visualizer.apply(fp_log, fp_model)\n", + "fp_visualizer.view(gviz)" + ] + }, + { + "cell_type": "markdown", + "id": "5adcf3fb-9a73-4ed8-ae75-542ffbd8912e", + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + }, + "source": [ + "## Classification and Prediction" + ] + }, + { + "cell_type": "markdown", + "id": "cd48b507-6e4e-41ca-8bf4-61dc1a138feb", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "### Machine Learning at the Case Level" + ] + }, + { + "cell_type": "markdown", + "id": "0dbca504-c913-4343-ac2b-6c38fa9fcca8", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "#### Attribute Inspection" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "a0165dfa-860a-4f72-bac4-7fc556c1915c", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['org:group',\n", + " 'concept:instance',\n", + " 'org:resource',\n", + " 'concept:name',\n", + " 'time:timestamp',\n", + " 'lifecycle:transition',\n", + " 'case:startdate',\n", + " 'case:responsible',\n", + " 'case:enddate_planned',\n", + " 'case:department',\n", + " 'case:group',\n", + " 'case:concept:name',\n", + " 'case:deadline',\n", + " 'case:channel',\n", + " 'case:enddate',\n", + " 'start_timestamp']" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm4py.get_event_attributes(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "917abc90-1b2d-438f-a7a2-9c34d5a82408", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['case:startdate',\n", + " 'case:responsible',\n", + " 'case:enddate_planned',\n", + " 'case:department',\n", + " 'case:group',\n", + " 'case:concept:name',\n", + " 'case:deadline',\n", + " 'case:channel',\n", + " 'case:enddate']" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm4py.get_trace_attributes(df)" + ] + }, + { + "cell_type": "markdown", + "id": "97e24853-2ba0-4e80-9d67-d243c63d7594", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Creating a Feature Table" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "208ef28e-5b19-4d71-b9a5-b79928833953", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trace:case:channel@UNDEFINEDtrace:case:responsible@UNDEFINEDtrace:case:group@UNDEFINEDtrace:case:department@UNDEFINEDevent:concept:name@Confirmation of receiptevent:concept:name@T02 Check confirmation of receiptevent:concept:name@T03 Adjust confirmation of receiptevent:concept:name@T04 Determine confirmation of receiptevent:concept:name@T05 Print and send confirmation of receiptevent:concept:name@T06 Determine necessity of stop advice...succession:org:resource@admin1#Resource33succession:org:resource@admin1#Resource35succession:org:resource@admin1#admin1succession:org:resource@admin1#admin2succession:org:resource@admin2#TESTsuccession:org:resource@admin2#admin2succession:org:resource@admin3#Resource18succession:org:resource@admin3#admin1succession:org:resource@test#Resource26succession:org:resource@test#test
01111111000...0000000000
11111111001...0000000000
21111110111...0000000000
31111110111...0000000000
41111110111...0000000000
..................................................................
14291111110111...0000000000
14301111110111...0000000000
14311111110111...0000000000
14321111110111...0000000000
14331111110111...0000000000
\n", + "

1434 rows × 466 columns

\n", + "
" + ], + "text/plain": [ + " trace:case:channel@UNDEFINED trace:case:responsible@UNDEFINED \\\n", + "0 1 1 \n", + "1 1 1 \n", + "2 1 1 \n", + "3 1 1 \n", + "4 1 1 \n", + "... ... ... \n", + "1429 1 1 \n", + "1430 1 1 \n", + "1431 1 1 \n", + "1432 1 1 \n", + "1433 1 1 \n", + "\n", + " trace:case:group@UNDEFINED trace:case:department@UNDEFINED \\\n", + "0 1 1 \n", + "1 1 1 \n", + "2 1 1 \n", + "3 1 1 \n", + "4 1 1 \n", + "... ... ... \n", + "1429 1 1 \n", + "1430 1 1 \n", + "1431 1 1 \n", + "1432 1 1 \n", + "1433 1 1 \n", + "\n", + " event:concept:name@Confirmation of receipt \\\n", + "0 1 \n", + "1 1 \n", + "2 1 \n", + "3 1 \n", + "4 1 \n", + "... ... \n", + "1429 1 \n", + "1430 1 \n", + "1431 1 \n", + "1432 1 \n", + "1433 1 \n", + "\n", + " event:concept:name@T02 Check confirmation of receipt \\\n", + "0 1 \n", + "1 1 \n", + "2 1 \n", + "3 1 \n", + "4 1 \n", + "... ... \n", + "1429 1 \n", + "1430 1 \n", + "1431 1 \n", + "1432 1 \n", + "1433 1 \n", + "\n", + " event:concept:name@T03 Adjust confirmation of receipt \\\n", + "0 1 \n", + "1 1 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + " event:concept:name@T04 Determine confirmation of receipt \\\n", + "0 0 \n", + "1 0 \n", + "2 1 \n", + "3 1 \n", + "4 1 \n", + "... ... \n", + "1429 1 \n", + "1430 1 \n", + "1431 1 \n", + "1432 1 \n", + "1433 1 \n", + "\n", + " event:concept:name@T05 Print and send confirmation of receipt \\\n", + "0 0 \n", + "1 0 \n", + "2 1 \n", + "3 1 \n", + "4 1 \n", + "... ... \n", + "1429 1 \n", + "1430 1 \n", + "1431 1 \n", + "1432 1 \n", + "1433 1 \n", + "\n", + " event:concept:name@T06 Determine necessity of stop advice ... \\\n", + "0 0 ... \n", + "1 1 ... \n", + "2 1 ... \n", + "3 1 ... \n", + "4 1 ... \n", + "... ... ... \n", + "1429 1 ... \n", + "1430 1 ... \n", + "1431 1 ... \n", + "1432 1 ... \n", + "1433 1 ... \n", + "\n", + " succession:org:resource@admin1#Resource33 \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + " succession:org:resource@admin1#Resource35 \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + " succession:org:resource@admin1#admin1 \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + " succession:org:resource@admin1#admin2 \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + " succession:org:resource@admin2#TEST \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + " succession:org:resource@admin2#admin2 \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + " succession:org:resource@admin3#Resource18 \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + " succession:org:resource@admin3#admin1 \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + " succession:org:resource@test#Resource26 \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + " succession:org:resource@test#test \n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "1429 0 \n", + "1430 0 \n", + "1431 0 \n", + "1432 0 \n", + "1433 0 \n", + "\n", + "[1434 rows x 466 columns]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pm4py.algo.transformation.log_to_features import algorithm as log_to_features\n", + "ft, feature_names = log_to_features.apply(log, parameters={\"str_ev_attr\": [\"concept:name\", \"org:resource\"],\n", + " \"str_tr_attr\": [\"case:channel\", \"case:responsible\", \"case:group\", \"case:department\"],\n", + " \"num_ev_attr\": [], \"num_tr_attr\": [],\n", + " \"str_evsucc_attr\": [\"concept:name\", \"org:resource\"]})\n", + "pd.DataFrame(ft, columns=feature_names)" + ] + }, + { + "cell_type": "markdown", + "id": "26e2693c-13d2-4f2b-93b5-ca6f498e74d2", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Principal Component Analysis" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "d2c4c4d5-7229-464f-963d-3257fde9bff0", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "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", + "
01234
01.708022-0.0982540.510475-0.202320-0.087188
11.8645850.224361-0.6526160.2906430.361289
2-0.587899-0.536829-0.071282-0.350070-0.075767
3-0.587899-0.536829-0.071282-0.350070-0.075767
4-0.630247-0.552485-0.177900-0.4209010.000310
..................
1429-0.587899-0.536829-0.071282-0.350070-0.075767
1430-0.587899-0.536829-0.071282-0.350070-0.075767
1431-0.587899-0.536829-0.071282-0.350070-0.075767
1432-0.546977-0.470138-0.076281-0.281238-0.064669
1433-0.564049-0.462921-0.057423-0.3530110.009570
\n", + "

1434 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " 0 1 2 3 4\n", + "0 1.708022 -0.098254 0.510475 -0.202320 -0.087188\n", + "1 1.864585 0.224361 -0.652616 0.290643 0.361289\n", + "2 -0.587899 -0.536829 -0.071282 -0.350070 -0.075767\n", + "3 -0.587899 -0.536829 -0.071282 -0.350070 -0.075767\n", + "4 -0.630247 -0.552485 -0.177900 -0.420901 0.000310\n", + "... ... ... ... ... ...\n", + "1429 -0.587899 -0.536829 -0.071282 -0.350070 -0.075767\n", + "1430 -0.587899 -0.536829 -0.071282 -0.350070 -0.075767\n", + "1431 -0.587899 -0.536829 -0.071282 -0.350070 -0.075767\n", + "1432 -0.546977 -0.470138 -0.076281 -0.281238 -0.064669\n", + "1433 -0.564049 -0.462921 -0.057423 -0.353011 0.009570\n", + "\n", + "[1434 rows x 5 columns]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.decomposition import PCA\n", + "pca = PCA(n_components=5)\n", + "pca_df = pd.DataFrame(pca.fit_transform(ft))\n", + "pca_df.rename({c: str(c) for c in pca_df.columns}, axis='columns') # renaming the columns to string\n", + "pca_df" + ] + }, + { + "cell_type": "markdown", + "id": "1bb82c0d-418e-4c9a-95c4-795842c7dd7b", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Outlier Detection" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "9fd919ad-587b-4deb-a5fd-db72153d4505", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "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", + "
01234scores
8121.751406-0.3318210.7941580.1562130.504005-0.117487
401.413179-0.4060500.8392510.7619580.555376-0.108282
11641.752707-0.3890160.7814800.2086150.375662-0.108206
10931.752707-0.3890160.7814800.2086150.375662-0.108206
317-0.0966391.483958-0.7546001.159447-0.805189-0.107012
.....................
1087-0.558603-0.457019-0.059373-0.369335-0.0424820.149078
1268-0.558603-0.457019-0.059373-0.369335-0.0424820.149078
1068-0.558603-0.457019-0.059373-0.369335-0.0424820.149078
1130-0.558603-0.457019-0.059373-0.369335-0.0424820.149078
1203-0.558603-0.457019-0.059373-0.369335-0.0424820.149078
\n", + "

1434 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " 0 1 2 3 4 scores\n", + "812 1.751406 -0.331821 0.794158 0.156213 0.504005 -0.117487\n", + "40 1.413179 -0.406050 0.839251 0.761958 0.555376 -0.108282\n", + "1164 1.752707 -0.389016 0.781480 0.208615 0.375662 -0.108206\n", + "1093 1.752707 -0.389016 0.781480 0.208615 0.375662 -0.108206\n", + "317 -0.096639 1.483958 -0.754600 1.159447 -0.805189 -0.107012\n", + "... ... ... ... ... ... ...\n", + "1087 -0.558603 -0.457019 -0.059373 -0.369335 -0.042482 0.149078\n", + "1268 -0.558603 -0.457019 -0.059373 -0.369335 -0.042482 0.149078\n", + "1068 -0.558603 -0.457019 -0.059373 -0.369335 -0.042482 0.149078\n", + "1130 -0.558603 -0.457019 -0.059373 -0.369335 -0.042482 0.149078\n", + "1203 -0.558603 -0.457019 -0.059373 -0.369335 -0.042482 0.149078\n", + "\n", + "[1434 rows x 6 columns]" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.ensemble import IsolationForest\n", + "model=IsolationForest()\n", + "model.fit(pca_df)\n", + "pca_df[\"scores\"] = model.decision_function(pca_df)\n", + "pca_df.sort_values(\"scores\")" + ] + }, + { + "cell_type": "markdown", + "id": "db0e0829-4a8b-47e6-844b-d7b299d15b55", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Concept Drift Detection" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "e095b9ae-4a35-415e-8f49-ef5fa76bbda4", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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mXOh8969e2W3//5OXZ8+fTRnzhw9/vjjGj9+vNq1a6dFixapS5cu3moBAAD4GJthXKIX6HtRXl6egoODlZubq6CgIG+XAwDAJS0n77R6P5Mhu03amZbgtTrK8/vb6xshAgAAVDcCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAsBwCEAAAqBTD2wVUAAEIAAB4hM1m83YJF40ABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAALIcABAAAKsUwvF1B+RGAAACAR9i8XUA5EIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlEIAAAIDlXBIBaMaMGYqIiFBgYKCio6O1Zs2a846fP3++OnTooMDAQHXt2lVLly51OT9p0iR16NBBderU0WWXXaa4uDh98803VdkCAADwIV4PQPPmzVNqaqomTpyo9evXq1u3boqPj1dOTo7b8atXr1ZycrKGDx+uDRs2KDExUYmJidq8ebNzzOWXX67p06fr+++/11dffaWIiAhdf/31OnToUHW1BQAALmE2wzAMbxYQHR2tXr16afr06ZKkkpIShYeHa+TIkXrsscdKjU9KSlJ+fr6WLFniPHbllVcqMjJS6enpbr9GXl6egoOD9dlnn+m66667YE2O8bm5uQoKCqpgZwAAWENW7mldmZahGnabfnrmRq/VUZ7f316dASosLNS6desUFxfnPGa32xUXF6fMzEy3j8nMzHQZL0nx8fFlji8sLNSrr76q4OBgdevWze2YgoIC5eXluXwAAADz8moAOnz4sIqLixUaGupyPDQ0VFlZWW4fk5WVdVHjlyxZorp16yowMFAvvviili9frpCQELfPmZaWpuDgYOdHeHh4JboCAMBalm9x/zv7Uub1NUBVpV+/ftq4caNWr16t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KSgoSAcPHtTBgwf16KOPSpIefPBBZWZmau7cudq0aZNuu+02DRgwQDt27PBabwA8h40QAfike+65R8eOHdOiRYtKnbvjjju0adMmbdmypdS5BQsW6P7779fhw4clnV0DNHr0aB07dsw5Zu/evWrdurX27t2rpk2bOo/HxcWpd+/eeuaZZzzeD4Dqxc1QAZiOYRiy2WySpM8++0xpaWnatm2b8vLydObMGZ0+fVonT55U7dq13T7++++/V3FxsS6//HKX4wUFBWrYsGGV1w+g6hGAAJjO1q1b1apVK+3evVsDBw7UAw88oH/+859q0KCBvvrqKw0fPlyFhYVlBqATJ07Iz89P69atk5+fn8u5unXrVkcLAKoYAQiAqXz++ef6/vvv9fDDD2vdunUqKSnR1KlTZbefXfL47rvvuoz39/dXcXGxy7Hu3buruLhYOTk56tu3b7XVDqD6EIAA+KyCggJlZWWpuLhY2dnZWrZsmdLS0jRw4EANGTJEmzdvVlFRkf71r3/ppptu0tdff6309HSX54iIiNCJEyeUkZGhbt26qXbt2rr88st11113aciQIZo6daq6d++uQ4cOKSMjQ1dccYUSEhK81DEAT+EqMAA+a9myZWrSpIkiIiI0YMAArVixQi+//LI++OAD+fn5qVu3bnrhhRc0efJkdenSRe+8847S0tJcnqNPnz66//77lZSUpEaNGmnKlCmSpFmzZmnIkCF65JFH1L59eyUmJurbb79VixYtvNEqAA/jKjAAAGA5zAABAADLIQABAADLIQABAADLIQABAADLIQABAADLIQABAADLIQABAADLIQABAADLIQABAADLIQABAADLIQABAADLIQABAADL+f+n8hUS2zkPKQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from pm4py.algo.transformation.log_to_features.util import locally_linear_embedding\n", + "from pm4py.visualization.graphs import visualizer\n", + "\n", + "x, y = locally_linear_embedding.apply(df)\n", + "gviz = visualizer.apply(x, y, variant=visualizer.Variants.DATES, parameters={\"title\": \"Locally Linear Embedding\", \"y_axis\": \"Intensity\"})\n", + "visualizer.view(gviz)" + ] + }, + { + "cell_type": "markdown", + "id": "01d19aa8-ae54-490f-a590-8de92f8c3068", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Clustering" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "c13f8229-5981-46db-bafd-e7ce249732f5", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2, 2, 3, ..., 3, 3, 3])" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.cluster import KMeans\n", + "clustering = KMeans(n_clusters=4)\n", + "# a number from \"0\" (first cluster) to \"3\" (last cluster) will be associated to every case of the log\n", + "clustering.fit_predict(ft)" + ] + }, + { + "cell_type": "markdown", + "id": "147b3b8a-4fdd-401e-aec5-142095e49c78", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Decision Point Mining" + ] + }, + { + "cell_type": "markdown", + "id": "81f2a670-8b85-4490-ba7a-578d12906957", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Let $d$ be a decision point in a process model $M$ (in a Petri net, typically a place with multiple outgoing arcs)." + ] + }, + { + "cell_type": "markdown", + "id": "106fc623-4663-453c-bdfd-0c65bafe567b", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "Are there any data attributes in the event data that indicate which \"direction\" the case flow will go?" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "87d281ff-0d38-4e6e-bae4-483cc568f088", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c28fec492bdb4ef58a72b71cb25a74bc", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "replaying log with TBR, completed variants :: 0%| | 0/116 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
org:group_EMPTYorg:group_Group 4
001
101
201
310
401
501
601
701
801
901
1010
1101
1201
1301
1401
1501
1601
1701
1810
1910
2010
2101
2201
2301
2401
2501
\n", + "" + ], + "text/plain": [ + " org:group_EMPTY org:group_Group 4\n", + "0 0 1\n", + "1 0 1\n", + "2 0 1\n", + "3 1 0\n", + "4 0 1\n", + "5 0 1\n", + "6 0 1\n", + "7 0 1\n", + "8 0 1\n", + "9 0 1\n", + "10 1 0\n", + "11 0 1\n", + "12 0 1\n", + "13 0 1\n", + "14 0 1\n", + "15 0 1\n", + "16 0 1\n", + "17 0 1\n", + "18 1 0\n", + "19 1 0\n", + "20 1 0\n", + "21 0 1\n", + "22 0 1\n", + "23 0 1\n", + "24 0 1\n", + "25 0 1" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pm4py.algo.decision_mining import algorithm as dem\n", + "pn, im, fm = pm4py.read_pnml('data/petri_net.pnml')\n", + "ft = dem.apply(df, pn, im, fm, decision_point='exi_idb451aba5-9e46-4292-93eb-f9d651c0139b')\n", + "ft[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "2579b30f-9abc-45a8-8b74-a9d80a7a5478", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0\n", + "1 0\n", + "2 0\n", + "3 0\n", + "4 0\n", + "5 0\n", + "6 0\n", + "7 0\n", + "8 0\n", + "9 0\n", + "10 0\n", + "11 0\n", + "12 0\n", + "13 0\n", + "14 0\n", + "15 0\n", + "16 0\n", + "17 1\n", + "18 1\n", + "19 1\n", + "20 1\n", + "21 0\n", + "22 0\n", + "23 1\n", + "24 1\n", + "25 0\n", + "Name: Target, dtype: int64" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ft[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "a0784a5d-dfc1-4bc6-82b1-62cd04f60168", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[Text(0.5, 0.75, 'org:group_Group 4 <= 0.5\\ngini = 0.355\\nsamples = 26\\nvalue = [20, 6]\\nclass = T13 Adjust document X request unlicensed'),\n", + " Text(0.25, 0.25, 'gini = 0.48\\nsamples = 5\\nvalue = [2, 3]\\nclass = T11 Create document X request unlicensed'),\n", + " Text(0.75, 0.25, 'gini = 0.245\\nsamples = 21\\nvalue = [18, 3]\\nclass = T13 Adjust document X request unlicensed')]" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn import tree\n", + "clf = tree.DecisionTreeClassifier()\n", + "clf.fit(ft[0], ft[1])\n", + "tree.plot_tree(clf, \n", + " feature_names=list(ft[0].columns.values), \n", + " class_names=['T13 Adjust document X request unlicensed', 'T11 Create document X request unlicensed'],\n", + " filled=True)" + ] + }, + { + "cell_type": "markdown", + "id": "59a795a1-84b2-4598-8fef-94daae358959", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "#### Case Duration Prediction" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "f9f6123e-5143-4991-b85a-b594d020afe1", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[3811896.2769999504,\n", + " 617.9240000247955,\n", + " 239.11499977111816,\n", + " 84.51800012588501,\n", + " 720.2450001239777]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data, feature_names = log_to_features.apply(log, parameters={\"str_tr_attr\": [\"channel\", \"group\", \"responsible\", \"department\"], \"str_ev_attr\": [], \"num_tr_attr\": [], \"num_ev_attr\": [], \"str_evsucc_attr\": []})\n", + "throughput_time = [y[-1][\"time:timestamp\"].timestamp() - y[0][\"time:timestamp\"].timestamp() for y in log]\n", + "throughput_time[0:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "06f43b4a-6b40-46c4-8313-70ffd5735e74", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import random\n", + "training_cases = set(random.sample([i for i in range(len(log))], 500))\n", + "data_training = [data[i] for i in range(len(log)) if i in training_cases]\n", + "throughput_time_training = [throughput_time[i] for i in range(len(log)) if i in training_cases]" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "4345aa89-bb6c-4d21-8027-b010a45543a3", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
KNeighborsRegressor(n_neighbors=3)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "KNeighborsRegressor(n_neighbors=3)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.neighbors import KNeighborsRegressor\n", + "regressor = KNeighborsRegressor(n_neighbors=3)\n", + "regressor.fit(data_training, throughput_time_training)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "59b93c0c-9413-4cdd-99ef-4051a32309fd", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "data_validation = [data[i] for i in range(len(log)) if i not in training_cases]\n", + "throughput_time_validation = [throughput_time[i] for i in range(len(log)) if i not in training_cases]" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "37bcd7d4-e767-424f-839c-d7b30dc14232", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "predicted_throughput_time = regressor.predict(data_validation)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "0709bf4c-e11b-4586-b36d-dd407051dd50", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "case actual throughput= 3811896.2769999504 predicted throughput = 198447.95399999619\n", + "case actual throughput= 617.9240000247955 predicted throughput = 31.95733332633972\n", + "case actual throughput= 239.11499977111816 predicted throughput = 317.09166677792865\n", + "case actual throughput= 84.51800012588501 predicted throughput = 317.09166677792865\n", + "case actual throughput= 101.96599984169006 predicted throughput = 317.09166677792865\n" + ] + } + ], + "source": [ + "for i in range(5):\n", + " print(\"case actual throughput=\", throughput_time_validation[i], \" predicted throughput = \", predicted_throughput_time[i])" + ] + }, + { + "cell_type": "markdown", + "id": "59492401-02a1-402e-93db-6abb7c65b8dc", + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + }, + "source": [ + "## Reflections: Process Mining and ML - The Bigger Picture" + ] + }, + { + "cell_type": "markdown", + "id": "e4f61f69-0129-4445-9a27-7d09bf71c010", + "metadata": { + "slideshow": { + "slide_type": "fragment" + }, + "tags": [] + }, + "source": [ + "![](img/pm_generic.png)" + ] + } + ], + "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.10.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pm4py/notebooks/data/receipt.xes b/pm4py/notebooks/data/receipt.xes new file mode 100644 index 0000000000000000000000000000000000000000..8ba8b03ec223c019c39f89ebd34e927b845e53f8 --- /dev/null +++ b/pm4py/notebooks/data/receipt.xes @@ -0,0 +1,85252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/notebooks/data/running_example.csv b/pm4py/notebooks/data/running_example.csv new file mode 100644 index 0000000000000000000000000000000000000000..de99b140fcf323d7d49eee2535d7c2ca9514e4d5 --- /dev/null +++ b/pm4py/notebooks/data/running_example.csv @@ -0,0 +1,43 @@ +case_id;activity;timestamp;costs;org:resource +3;register request;2010-12-30 14:32:00+01:00;50;Pete +3;examine casually;2010-12-30 15:06:00+01:00;400;Mike +3;check ticket;2010-12-30 16:34:00+01:00;100;Ellen +3;decide;2011-01-06 09:18:00+01:00;200;Sara +3;reinitiate request;2011-01-06 12:18:00+01:00;200;Sara +3;examine thoroughly;2011-01-06 13:06:00+01:00;400;Sean +3;check ticket;2011-01-08 11:43:00+01:00;100;Pete +3;decide;2011-01-09 09:55:00+01:00;200;Sara +3;pay compensation;2011-01-15 10:45:00+01:00;200;Ellen +2;register request;2010-12-30 11:32:00+01:00;50;Mike +2;check ticket;2010-12-30 12:12:00+01:00;100;Mike +2;examine casually;2010-12-30 14:16:00+01:00;400;Sean +2;decide;2011-01-05 11:22:00+01:00;200;Sara +2;pay compensation;2011-01-08 12:05:00+01:00;200;Ellen +1;register request;2010-12-30 11:02:00+01:00;50;Pete +1;examine thoroughly;2010-12-31 10:06:00+01:00;400;Sue +1;check ticket;2011-01-05 15:12:00+01:00;100;Mike +1;decide;2011-01-06 11:18:00+01:00;200;Sara +1;reject request;2011-01-07 14:24:00+01:00;200;Pete +6;register request;2011-01-06 15:02:00+01:00;50;Mike +6;examine casually;2011-01-06 16:06:00+01:00;400;Ellen +6;check ticket;2011-01-07 16:22:00+01:00;100;Mike +6;decide;2011-01-07 16:52:00+01:00;200;Sara +6;pay compensation;2011-01-16 11:47:00+01:00;200;Mike +5;register request;2011-01-06 09:02:00+01:00;50;Ellen +5;examine casually;2011-01-07 10:16:00+01:00;400;Mike +5;check ticket;2011-01-08 11:22:00+01:00;100;Pete +5;decide;2011-01-10 13:28:00+01:00;200;Sara +5;reinitiate request;2011-01-11 16:18:00+01:00;200;Sara +5;check ticket;2011-01-14 14:33:00+01:00;100;Ellen +5;examine casually;2011-01-16 15:50:00+01:00;400;Mike +5;decide;2011-01-19 11:18:00+01:00;200;Sara +5;reinitiate request;2011-01-20 12:48:00+01:00;200;Sara +5;examine casually;2011-01-21 09:06:00+01:00;400;Sue +5;check ticket;2011-01-21 11:34:00+01:00;100;Pete +5;decide;2011-01-23 13:12:00+01:00;200;Sara +5;reject request;2011-01-24 14:56:00+01:00;200;Mike +4;register request;2011-01-06 15:02:00+01:00;50;Pete +4;check ticket;2011-01-07 12:06:00+01:00;100;Mike +4;examine thoroughly;2011-01-08 14:43:00+01:00;400;Sean +4;decide;2011-01-09 12:02:00+01:00;200;Sara +4;reject request;2011-01-12 15:44:00+01:00;200;Ellen diff --git a/pm4py/notebooks/data/running_example.xes b/pm4py/notebooks/data/running_example.xes new file mode 100644 index 0000000000000000000000000000000000000000..eda88c15ca88f6ebfa260e0e8c2e3dc359bd7ef2 --- /dev/null +++ b/pm4py/notebooks/data/running_example.xes @@ -0,0 +1,373 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/notebooks/data/running_example_broken.csv b/pm4py/notebooks/data/running_example_broken.csv new file mode 100644 index 0000000000000000000000000000000000000000..ccefad1932ed4e591cf43d75caacb7c340096071 --- /dev/null +++ b/pm4py/notebooks/data/running_example_broken.csv @@ -0,0 +1,35 @@ +costs;Resource;case:concept:name;concept:name;org:resource;time:timestamp +50;Pete;3;register request;Pete;2010-12-30 14:32:00+01:00 +100;Ellen;3;check ticket;Ellen;2010-12-30 16:34:00+01:00 +200;Sara;3;decide;Sara;2011-01-06 09:18:00+01:00 +200;Sara;3;reinitiate request;Sara;2011-01-06 12:18:00+01:00 +200;Ellen;3;pay compensation;Ellen;2011-01-15 10:45:00+01:00 +50;Mike;2;register request;Mike;2010-12-30 11:32:00+01:00 +100;Mike;2;check ticket;Mike;2010-12-30 12:12:00+01:00 +400;Sean;2;examine casually;Sean;2010-12-30 14:16:00+01:00 +200;Ellen;2;pay compensation;Ellen;2011-01-08 12:05:00+01:00 +400;Sue;1;examine thoroughly;Sue;2010-12-31 10:06:00+01:00 +100;Mike;1;check ticket;Mike;2011-01-05 15:12:00+01:00 +200;Sara;1;decide;Sara;2011-01-06 11:18:00+01:00 +200;Pete;1;reject request;Pete;2011-01-07 14:24:00+01:00 +50;Mike;6;register request;Mike;2011-01-06 15:02:00+01:00 +100;Mike;6;check ticket;Mike;2011-01-07 16:22:00+01:00 +200;Sara;6;decide something;Sara;2011-01-07 16:52:00+01:00 +200;Mike;6;pay compensation;Mike;2011-01-16 11:47:00+01:00 +50;Ellen;5;register request;Ellen;2011-01-06 09:02:00+01:00 +400;Mike;5;examine casually;Mike;2011-01-07 10:16:00+01:00 +100;Pete;5;check ticket;Pete;2011-01-08 11:22:00+01:00 +200;Sara;5;decide;Sara;2011-01-10 13:28:00+01:00 +200;Sara;5;reinitiate the request for real;Sara;2011-01-11 16:18:00+01:00 +100;Ellen;5;check ticket;Ellen;2011-01-14 14:33:00+01:00 +400;Mike;5;examine casually;Mike;2011-01-16 15:50:00+01:00 +200;Sara;5;decide;Sara;2011-01-19 11:18:00+01:00 +400;Sue;5;examine casually;Sue;2011-01-21 09:06:00+01:00 +100;Pete;5;check ticket;Pete;2011-01-21 11:34:00+01:00 +200;Sara;5;decide;Sara;2011-01-23 13:12:00+01:00 +200;Mike;5;reject request;Mike;2011-01-24 14:56:00+01:00 +50;Pete;4;register request;Pete;2011-01-06 15:02:00+01:00 +100;Mike;4;check ticket;Mike;2011-01-07 12:06:00+01:00 +400;Sean;4;examine thoroughly;Sean;2011-01-08 14:43:00+01:00 +200;Sara;4;decide;Sara;2011-01-09 12:02:00+01:00 +200;Ellen;4;reject request;Ellen;2011-01-12 15:44:00+01:00 diff --git a/pm4py/notebooks/img/bpmn_running_example.png b/pm4py/notebooks/img/bpmn_running_example.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6bd1b32c6e77c66cbc017377f25a8c48f99d12 Binary files /dev/null and b/pm4py/notebooks/img/bpmn_running_example.png differ diff --git a/pm4py/pm4py/__init__.py b/pm4py/pm4py/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bdf38b3d43cdd06946852e691b4cfbadf69f222a --- /dev/null +++ b/pm4py/pm4py/__init__.py @@ -0,0 +1,82 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import time + +from pm4py import util, objects, statistics, algo, visualization, llm, connectors +from pm4py import analysis, conformance, convert, discovery, filtering, hof, ml, ocel, org, read, sim, stats, utils, vis, write +from pm4py.read import read_xes, read_dfg, read_bpmn, read_pnml, read_ptml, read_ocel, read_ocel_csv, read_ocel_xml, read_ocel_json, read_ocel_sqlite, read_ocel2, read_ocel2_sqlite, read_ocel2_json, read_ocel2_xml +from pm4py.write import write_xes, write_dfg, write_bpmn, write_pnml, write_ptml, write_ocel, write_ocel_json, write_ocel_csv, write_ocel_xml, write_ocel_sqlite, write_ocel2, write_ocel2_sqlite, write_ocel2_xml, write_ocel2_json +from pm4py.utils import format_dataframe, parse_process_tree, serialize, deserialize, set_classifier, parse_event_log_string, project_on_event_attribute, \ + sample_cases, sample_events, rebase, parse_powl_model_string +from pm4py.filtering import filter_log_relative_occurrence_event_attribute, filter_start_activities, filter_end_activities, filter_variants, \ + filter_directly_follows_relation, filter_time_range, \ + filter_eventually_follows_relation, filter_event_attribute_values, filter_trace_attribute_values, \ + filter_between, filter_case_size, filter_case_performance, filter_activities_rework, filter_paths_performance, \ + filter_variants_by_coverage_percentage, filter_variants_by_maximum_coverage_percentage, filter_variants_top_k, filter_ocel_event_attribute, filter_ocel_object_attribute, \ + filter_ocel_object_types_allowed_activities, filter_ocel_object_per_type_count, filter_ocel_start_events_per_object_type, \ + filter_ocel_end_events_per_object_type, filter_ocel_events_timestamp, filter_prefixes, filter_suffixes, filter_trace_segments, \ + filter_four_eyes_principle, filter_activity_done_different_resources, filter_ocel_events, filter_ocel_objects, \ + filter_ocel_object_types, filter_ocel_cc_object, filter_ocel_cc_length, filter_ocel_cc_otype, filter_ocel_cc_activity +from pm4py.discovery import discover_petri_net_alpha, discover_petri_net_alpha_plus, discover_petri_net_ilp, discover_petri_net_heuristics, \ + discover_petri_net_inductive, discover_process_tree_inductive, discover_heuristics_net, \ + discover_dfg, discover_footprints, discover_eventually_follows_graph, discover_directly_follows_graph, discover_bpmn_inductive, \ + discover_performance_dfg, discover_transition_system, discover_prefix_tree, \ + discover_temporal_profile, discover_log_skeleton, discover_batches, derive_minimum_self_distance, discover_dfg_typed, discover_declare, discover_powl +from pm4py.conformance import conformance_diagnostics_token_based_replay, conformance_diagnostics_alignments, \ + fitness_token_based_replay, \ + fitness_alignments, precision_token_based_replay, \ + precision_alignments, conformance_diagnostics_footprints, \ + fitness_footprints, precision_footprints, check_is_fitting, conformance_temporal_profile, \ + conformance_declare, conformance_log_skeleton, replay_prefix_tbr, generalization_tbr +from pm4py.ocel import ocel_objects_interactions_summary, ocel_temporal_summary, ocel_objects_summary, ocel_get_object_types, ocel_get_attribute_names, ocel_flattening, ocel_object_type_activities, ocel_objects_ot_count, \ + discover_ocdfg, discover_oc_petri_net, discover_objects_graph, sample_ocel_objects, ocel_drop_duplicates, ocel_merge_duplicates, ocel_sort_by_additional_column, \ + ocel_add_index_based_timedelta, sample_ocel_connected_components, ocel_o2o_enrichment, ocel_e2o_lifecycle_enrichment, cluster_equivalent_ocel +from pm4py.vis import view_petri_net, save_vis_petri_net, view_dfg, save_vis_dfg, view_process_tree, \ + save_vis_process_tree, \ + view_ocdfg, save_vis_ocdfg, view_heuristics_net, save_vis_heuristics_net, view_bpmn, save_vis_bpmn, view_sna, save_vis_sna,\ + view_dotted_chart, save_vis_dotted_chart, view_performance_spectrum, save_vis_performance_spectrum, view_case_duration_graph, view_events_per_time_graph, save_vis_case_duration_graph, \ + save_vis_events_per_time_graph, view_events_distribution_graph, save_vis_events_distribution_graph, view_performance_dfg, save_vis_performance_dfg, \ + view_ocpn, save_vis_ocpn, view_network_analysis, save_vis_network_analysis, view_transition_system, save_vis_transition_system, \ + view_prefix_tree, save_vis_prefix_tree, view_object_graph, save_vis_object_graph, view_alignments, save_vis_alignments, \ + view_footprints, save_vis_footprints, view_powl, save_vis_powl +from pm4py.convert import convert_to_event_log, convert_to_event_stream, convert_to_dataframe, convert_to_bpmn, \ + convert_to_petri_net, convert_to_process_tree, convert_to_reachability_graph, convert_log_to_ocel, convert_ocel_to_networkx, convert_log_to_networkx, \ + convert_log_to_time_intervals, convert_petri_net_to_networkx, convert_petri_net_type +from pm4py.analysis import cluster_log, check_soundness, compute_emd, solve_marking_equation, solve_extended_marking_equation, \ + construct_synchronous_product_net, insert_artificial_start_end, check_is_workflow_net, maximal_decomposition, generate_marking, \ + reduce_petri_net_invisibles, reduce_petri_net_implicit_places, insert_case_arrival_finish_rate, insert_case_service_waiting_time, get_enabled_transitions, \ + simplicity_petri_net +from pm4py.stats import get_start_activities, get_end_activities, get_event_attributes, get_event_attribute_values, get_variants, \ + get_trace_attributes, get_variants_as_tuples, get_trace_attribute_values, get_case_arrival_average, \ + get_minimum_self_distances, get_minimum_self_distance_witnesses, get_frequent_trace_segments, \ + get_case_arrival_average, get_rework_cases_per_activity, get_case_overlap, get_cycle_time, \ + get_all_case_durations, get_case_duration, get_activity_position_summary, get_stochastic_language, \ + split_by_process_variant, get_variants_paths_duration, get_service_time +from pm4py.sim import play_out, generate_process_tree +from pm4py.ml import split_train_test, get_prefixes_from_log, extract_ocel_features, extract_features_dataframe, extract_temporal_features_dataframe, extract_outcome_enriched_dataframe, extract_target_vector +from pm4py.org import discover_handover_of_work_network, discover_activity_based_resource_similarity, discover_subcontracting_network, discover_working_together_network, discover_organizational_roles, discover_network_analysis +from pm4py.hof import filter_log, filter_trace, sort_trace, sort_log +from pm4py.privacy import anonymize_differential_privacy +from pm4py.meta import __name__, __version__, __doc__, __author__, __author_email__, \ + __maintainer__, __maintainer_email__ + +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.bpmn.obj import BPMN + +time.clock = time.process_time diff --git a/pm4py/pm4py/algo/__init__.py b/pm4py/pm4py/algo/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3c09bba8b227167e09b85b74c030314d60d8cbde --- /dev/null +++ b/pm4py/pm4py/algo/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo import discovery, conformance, analysis, evaluation, simulation, organizational_mining, transformation diff --git a/pm4py/pm4py/algo/analysis/__init__.py b/pm4py/pm4py/algo/analysis/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0645716154e2c522e688d0ffcbf59c4b774f5b26 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis import extended_marking_equation, marking_equation, workflow_net, woflan diff --git a/pm4py/pm4py/algo/analysis/extended_marking_equation/__init__.py b/pm4py/pm4py/algo/analysis/extended_marking_equation/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8c754e993fccfc090fb40bc6183fe44dbd15e33f --- /dev/null +++ b/pm4py/pm4py/algo/analysis/extended_marking_equation/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.extended_marking_equation import variants diff --git a/pm4py/pm4py/algo/analysis/extended_marking_equation/algorithm.py b/pm4py/pm4py/algo/analysis/extended_marking_equation/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..29e9d2f69c4bfaa3eb6a78eab8e2d02cc1fd91ed --- /dev/null +++ b/pm4py/pm4py/algo/analysis/extended_marking_equation/algorithm.py @@ -0,0 +1,81 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.algo.analysis.extended_marking_equation.variants import classic +from pm4py.objects.log.obj import Trace +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import exec_utils + + +class Variants(Enum): + CLASSIC = classic + + +def build(trace: Trace, sync_net: PetriNet, sync_im: Marking, sync_fm: Marking, variant=Variants.CLASSIC, + parameters: Optional[Dict[Any, Any]] = None) -> Any: + """ + Builds the extended marking equation out of a trace and a synchronous product net + + Parameters + --------------- + trace + Trace + sync_net + Synchronous product net + sync_im + Initial marking (of sync net) + sync_fm + Final marking (of sync net) + variant + Variant of the algorithm to use, possible values: + - Variants.CLASSIC + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => attribute to use as case identifier + - Parameters.ACTIVITY_KEY => attribute to use as activity + - Parameters.COSTS => (if provided) the cost function (otherwise the default cost function is applied) + - Parameters.SPLIT_IDX => (if provided) the split points as indices of elements of the trace + (e.g. for ["A", "B", "C", "D", "E"], specifying [1,3] as split points means splitting at "B" and "D"). + If not provided, some split points at uniform distances are found. + - Parameters.MAX_K_VALUE => the maximum number of split points that is allowed (trim the specified indexes + if necessary). + - Parameters.INCIDENCE_MATRIX => (if provided) the incidence matrix associated to the sync product net + - Parameters.A => (if provided) the A numpy matrix of the incidence matrix + - Parameters.CONSUMPTION_MATRIX => (if provided) the consumption matrix associated to the sync product net + - Parameters.C => (if provided) the C numpy matrix of the consumption matrix + - Parameters.FULL_BOOTSTRAP_REQUIRED => The preset/postset of places/transitions need to be inserted + """ + return exec_utils.get_variant(variant).build(trace, sync_net, sync_im, sync_fm, parameters=parameters) + + +def get_h_value(solver: Any, variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> int: + """ + Gets the heuristics value from the extended marking equation + + Parameters + -------------- + solver + Extended marking equation solver (class in this file) + variant + Variant of the algorithm to use, possible values: + - Variants.CLASSIC + parameters + Possible parameters of the algorithm + """ + return exec_utils.get_variant(variant).get_h_value(solver, parameters=parameters) diff --git a/pm4py/pm4py/algo/analysis/extended_marking_equation/variants/__init__.py b/pm4py/pm4py/algo/analysis/extended_marking_equation/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fff0aca6c8d950e2618efb30c6428adfb0571bad --- /dev/null +++ b/pm4py/pm4py/algo/analysis/extended_marking_equation/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.extended_marking_equation.variants import classic diff --git a/pm4py/pm4py/algo/analysis/extended_marking_equation/variants/classic.py b/pm4py/pm4py/algo/analysis/extended_marking_equation/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..564fbc9c274308e1721957c71be30fd02eb5a3ce --- /dev/null +++ b/pm4py/pm4py/algo/analysis/extended_marking_equation/variants/classic.py @@ -0,0 +1,547 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict +from typing import Tuple, List, Any + +import numpy as np + +from pm4py.objects.log.obj import Trace +from pm4py.objects.petri_net.utils import align_utils, petri_utils as petri_utils +from pm4py.objects.petri_net.utils.consumption_matrix import ConsumptionMatrix +from pm4py.objects.petri_net.utils.incidence_matrix import IncidenceMatrix +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import exec_utils, constants, xes_constants, points_subset +from pm4py.util.lp import solver + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + MAX_K_VALUE = "max_k_value" + COSTS = "costs" + SPLIT_IDX = "split_idx" + INCIDENCE_MATRIX = "incidence_matrix" + A = "A_matrix" + CONSUMPTION_MATRIX = "consumption_matrix" + C = "C_matrix" + FULL_BOOTSTRAP_REQUIRED = "full_bootstrap_required" + + +""" +Implements the extended marking equation as explained in the following paper: + +van Dongen, Boudewijn F. "Efficiently computing alignments." International Conference on Business Process Management. +Springer, Cham, 2018. +https://link.springer.com/chapter/10.1007/978-3-319-98648-7_12 +""" + + +class ExtendedMarkingEquationSolver(object): + def __init__(self, trace: Trace, sync_net: PetriNet, sync_im: Marking, sync_fm: Marking, + parameters: Optional[Dict[Any, Any]] = None): + """ + Constructor + + Parameters + --------------- + trace + Trace + sync_net + Synchronous product net + sync_im + Initial marking + sync_fm + Final marking + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => attribute to use as case identifier + - Parameters.ACTIVITY_KEY => attribute to use as activity + - Parameters.COSTS => (if provided) the cost function (otherwise the default cost function is applied) + - Parameters.SPLIT_IDX => (if provided) the split points as indices of elements of the trace + (e.g. for ["A", "B", "C", "D", "E"], specifying [1,3] as split points means splitting at "B" and "D"). + If not provided, some split points at uniform distances are found. + - Parameters.MAX_K_VALUE => the maximum number of split points that is allowed (trim the specified indexes + if necessary). + - Parameters.INCIDENCE_MATRIX => (if provided) the incidence matrix associated to the sync product net + - Parameters.A => (if provided) the A numpy matrix of the incidence matrix + - Parameters.CONSUMPTION_MATRIX => (if provided) the consumption matrix associated to the sync product net + - Parameters.C => (if provided) the C numpy matrix of the consumption matrix + - Parameters.FULL_BOOTSTRAP_REQUIRED => The preset/postset of places/transitions need to be inserted + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + max_k_value = exec_utils.get_param_value(Parameters.MAX_K_VALUE, parameters, 5) + costs = exec_utils.get_param_value(Parameters.COSTS, parameters, None) + split_idx = exec_utils.get_param_value(Parameters.SPLIT_IDX, parameters, None) + self.full_bootstrap_required = exec_utils.get_param_value(Parameters.FULL_BOOTSTRAP_REQUIRED, parameters, True) + + self.trace = [x[activity_key] for x in trace] + if costs is None: + costs = align_utils.construct_standard_cost_function(sync_net, align_utils.SKIP) + if split_idx is None: + split_idx = [i for i in range(1, len(trace))] + self.split_idx = split_idx + if len(self.split_idx) > max_k_value: + self.split_idx = points_subset.pick_chosen_points_list(max_k_value, self.split_idx) + self.k = len(self.split_idx) if len(self.split_idx) > 1 else 2 + self.sync_net = sync_net + self.ini = sync_im + self.fin = sync_fm + self.costs = costs + self.incidence_matrix = exec_utils.get_param_value(Parameters.INCIDENCE_MATRIX, parameters, + IncidenceMatrix(self.sync_net)) + self.consumption_matrix = exec_utils.get_param_value(Parameters.CONSUMPTION_MATRIX, parameters, + ConsumptionMatrix(self.sync_net)) + self.A = exec_utils.get_param_value(Parameters.A, parameters, np.asmatrix(self.incidence_matrix.a_matrix)) + self.C = exec_utils.get_param_value(Parameters.C, parameters, np.asmatrix(self.consumption_matrix.c_matrix)) + + self.__build_entities() + + def __build_entities(self): + """ + Builds entities useful to define the marking equation + """ + self.Aeq = None + self.__build_encodings() + if self.full_bootstrap_required: + petri_utils.decorate_transitions_prepostset(self.sync_net) + petri_utils.decorate_places_preset_trans(self.sync_net) + + def __build_encodings(self): + """ + Encodes the aforementioned objects in Numpy matrixes + """ + self.zeros = np.zeros((self.A.shape[0], self.A.shape[1])) + self.ini_vec = np.matrix(self.incidence_matrix.encode_marking(self.ini)).transpose() + self.fin_vec = np.matrix(self.incidence_matrix.encode_marking(self.fin)).transpose() + transitions = self.incidence_matrix.transitions + self.inv_indices = {y: x for x, y in transitions.items()} + self.inv_indices = [self.inv_indices[i] for i in range(len(self.inv_indices))] + self.c = self.__build_cost_vector() + self.__build_variable_corr() + self.__build_h_value_cost_vector() + self.c1 = list(self.c) + self.__build_non_null_entries_y() + + def __build_cost_vector(self) -> List[int]: + """ + Builds the complete cost vector of the integer problem + """ + c1 = [self.costs[self.inv_indices[i]] for i in range(len(self.inv_indices))] * self.k + c2 = [self.costs[self.inv_indices[i]] for i in range(len(self.inv_indices))] * (self.k - 1) + c3 = [0 for i in range(len(self.inv_indices))] * (self.k - 1) + c = c1 + c2 + c3 + return c + + def __build_h_value_cost_vector(self): + """ + Builds the cost vector for the heuristics calculation as explained in the paper + """ + self.c0 = list(self.c) + for idx in self.y[-1]: + self.c0[idx] = 0 + + def __build_variable_corr(self): + """ + The variables of the LP are split between both "x", "y" and "xy" (which is the sum of x and y) + + Make sure we can reconstruct that! + """ + count = 0 + self.x = [] + for i in range(self.k): + self.x.append([]) + for j in range(len(self.inv_indices)): + self.x[-1].append(count) + count = count + 1 + self.y = [] + for i in range(self.k - 1): + self.y.append([]) + for j in range(len(self.inv_indices)): + self.y[-1].append(count) + count = count + 1 + self.xy = [] + for i in range(self.k - 1): + self.xy.append([]) + for j in range(len(self.inv_indices)): + self.xy[-1].append(count) + count = count + 1 + + def __build_Aeq1(self) -> np.ndarray: + """ + Builds point (1) of the extended marking equation paper + """ + Aeq1 = np.hstack([self.A] + (2 * self.k - 2) * [self.zeros] + (self.k - 1) * [self.A]) + return Aeq1 + + def __build_Aeq2(self) -> np.ndarray: + """ + We have some variables xy, that are the sum of x and y. + Just make sure that xy = x + y + (not implementing any specific point!) + """ + Aeq_stack = [] + for i in range(1, len(self.x)): + Aeq = np.zeros((len(self.x[i]), self.xy[-1][-1] + 1)) + for j in range(len(self.x[i])): + Aeq[j][self.x[i][j]] = 1 + Aeq[j][self.y[i - 1][j]] = 1 + Aeq[j][self.xy[i - 1][j]] = -1 + Aeq_stack.append(Aeq) + Aeq = np.vstack(Aeq_stack) + return Aeq + + def __build_non_null_entries_y(self): + """ + Utility function that is needed for point (6) of the extended marking equation paper + """ + self.null_entries = [] + for i in self.split_idx: + self.null_entries.append([]) + act = self.trace[i] + for j in range(len(self.inv_indices)): + if self.inv_indices[j].label[0] == act: + self.null_entries[-1].append(j) + + def __build_Aeq3(self) -> np.ndarray: + """ + Implements point (6) of the extended marking equation paper + """ + Aeq_stack = [] + for i in range(len(self.y)): + Aeq = np.zeros((1, self.xy[-1][-1] + 1)) + for j in range(len(self.y[i])): + Aeq[0][self.y[i][j]] = 1 + Aeq_stack.append(Aeq) + Aeq = np.vstack(Aeq_stack) + return Aeq + + def __build_Aeq4(self) -> np.ndarray: + """ + Implements point (5) of the extended marking equation paper + """ + Aeq = np.zeros((len(self.null_entries), self.xy[-1][-1] + 1)) + for i in range(min(len(self.null_entries), len(self.y))): + for j in range(len(self.y[i])): + if j not in self.null_entries[i]: + Aeq[i][self.y[i][j]] = 1 + return Aeq + + def __build_Aub1(self) -> np.ndarray: + """ + Implements points (3) and (4) of the extended marking equation paper + """ + Aub_stack = [] + for i in range(len(self.x)): + Aub = np.zeros((len(self.x[i]), self.xy[-1][-1] + 1)) + for j in range(len(self.x[i])): + Aub[j][self.x[i][j]] = -1 + Aub_stack.append(Aub) + for i in range(len(self.y)): + Aub = np.zeros((len(self.y[i]), self.xy[-1][-1] + 1)) + for j in range(len(self.y[i])): + Aub[j][self.y[i][j]] = -1 + Aub_stack.append(Aub) + Aub = np.vstack(Aub_stack) + return Aub + + def __build_Aub2(self) -> np.ndarray: + """ + Implements point (2) of the extended marking equation paper + """ + Aub_stack = [] + for i in range(self.k - 1): + v = [self.A] + v = v + (self.k - 1) * [self.zeros] + for j in range(self.k - 1): + if j == i: + v = v + [self.C] + else: + v = v + [self.zeros] + for j in range(self.k - 1): + if j < i: + v = v + [self.A] + else: + v = v + [self.zeros] + Aub = np.hstack(v) + Aub_stack.append(Aub) + Aub = np.vstack(Aub_stack) + Aub = -Aub + return Aub + + def __build_lin_prog_components(self): + """ + Builds the components needed to solve the marking equation + """ + Aeq1 = self.__build_Aeq1() + Aeq2 = self.__build_Aeq2() + Aeq3 = self.__build_Aeq3() + Aeq4 = self.__build_Aeq4() + self.Aeq = np.vstack([Aeq1, Aeq2, Aeq3, Aeq4]) + Aub1 = self.__build_Aub1() + Aub2 = self.__build_Aub2() + self.Aub = np.vstack([Aub1, Aub2]) + + if solver.DEFAULT_LP_SOLVER_VARIANT == solver.CVXOPT_SOLVER_CUSTOM_ALIGN: + from cvxopt import matrix + + self.Aeq_transf = matrix(self.Aeq.astype(np.float64)) + self.Aub_transf = matrix(self.Aub.astype(np.float64)) + self.c = matrix([1.0 * x for x in self.c]) + else: + self.Aeq_transf = self.Aeq + self.Aub_transf = self.Aub + + def __calculate_vectors(self) -> Tuple[np.ndarray, np.ndarray]: + """ + Calculates the inequality/equality vector from the knowledge of the + initial/final marking of the synchronous product net + """ + beq_stack = [] + bub_stack = [] + beq_stack.append(self.fin_vec - self.ini_vec) + beq_stack.append(np.zeros(((len(self.x) - 1) * len(self.x[0]), 1))) + beq_stack.append(np.ones((len(self.y), 1))) + beq_stack.append(np.zeros((len(self.null_entries), 1))) + bub_stack.append(np.zeros((len(self.x) * len(self.x[0]), 1))) + bub_stack.append(np.zeros((len(self.y) * len(self.y[0]), 1))) + for i in range(self.k - 1): + bub_stack.append(self.ini_vec) + + beq = np.vstack(beq_stack) + bub = np.vstack(bub_stack) + + return beq, bub + + def get_components(self) -> Tuple[Any, Any, Any, Any, Any]: + """ + Retrieve the components (Numpy matrixes) of the problem + + Returns + --------------- + c + objective function + Aub + Inequalities matrix + bub + Inequalities vector + Aeq + Equalities matrix + beq + Equalities vector + """ + if self.Aeq is None: + self.__build_lin_prog_components() + + self.beq, self.bub = self.__calculate_vectors() + + if solver.DEFAULT_LP_SOLVER_VARIANT == solver.CVXOPT_SOLVER_CUSTOM_ALIGN: + from cvxopt import matrix + + self.beq_transf = matrix(self.beq.astype(np.float64)) + self.bub_transf = matrix(self.bub.astype(np.float64)) + else: + self.beq_transf = self.beq + self.bub_transf = self.bub + + return self.c, self.Aub_transf, self.bub_transf, self.Aeq_transf, self.beq_transf + + def change_ini_vec(self, ini: Marking): + """ + Changes the initial marking of the synchronous product net + + Parameters + -------------- + ini + Initial marking + """ + self.ini = ini + self.ini_vec = np.matrix(self.incidence_matrix.encode_marking(ini)).transpose() + + def get_x_vector(self, sol_points: List[int]) -> List[int]: + """ + Returns the x vector of the solution + + Parameters + -------------- + sol_points + Solution of the integer problem + + Returns + --------------- + x + X vector + """ + x_vector = [0] * len(self.sync_net.transitions) + for i in range(len(self.x)): + for j in range(len(self.x[i])): + x_vector[j] += sol_points[self.x[i][j]] + for i in range(len(self.y)): + for j in range(len(self.y[i])): + x_vector[j] += sol_points[self.y[i][j]] + return x_vector + + def get_h(self, sol_points: List[int]) -> int: + """ + Returns the value of the heuristics + + Parameters + -------------- + sol_points + Solution of the integer problem + + Returns + -------------- + h + Heuristics value + """ + h = 0.0 + for i in range(len(sol_points)): + h += sol_points[i] * self.c1[i] + return int(h) + + def get_activated_transitions(self, sol_points: List[int]) -> List[PetriNet.Transition]: + """ + Gets the transitions of the synchronous product net that are non-zero + in the solution of the marking equation + + Parameters + -------------- + sol_points + Solution of the integer problem + + Returns + -------------- + act_trans + Activated transitions + """ + act_trans = [] + for i in range(len(sol_points)): + for j in range(sol_points[i]): + act_trans.append(self.inv_indices[i]) + return act_trans + + def solve(self, variant=None) -> Tuple[int, List[int]]: + """ + Solves the extended marking equation, returning the heuristics and the x vector + + Parameters + ------------- + variant + Variant of the ILP solver to use + + Returns + ------------- + h + Heuristics value + x + X vector + """ + if variant is None: + variant = solver.DEFAULT_LP_SOLVER_VARIANT + # use ILP solver + if variant is solver.CVXOPT_SOLVER_CUSTOM_ALIGN: + variant = solver.CVXOPT_SOLVER_CUSTOM_ALIGN_ILP + c, Aub, bub, Aeq, beq = self.get_components() + parameters_solver = {} + parameters_solver["use_ilp"] = True + sol = solver.apply(c, Aub, bub, Aeq, beq, variant=variant, parameters=parameters_solver) + sol_points = solver.get_points_from_sol(sol, variant=variant) + if sol_points is not None: + x = self.get_x_vector(sol_points) + x = [int(y) for y in x] + h = self.get_h(sol_points) + return h, x + return None, None + + def get_firing_sequence(self, x: List[int]) -> Tuple[List[PetriNet.Transition], bool, int]: + """ + Gets a firing sequence from the X vector + + Parameters + ---------------- + x + X vector + + Returns + ---------------- + firing_sequence + Firing sequence + reach_fm + Boolean value that is true whether the firing sequence reaches the final marking + explained_events + Number of explaned events by the firing sequence + """ + activated_transitions = self.get_activated_transitions(x) + firing_sequence, reach_fm, explained_events = align_utils.search_path_among_sol(self.sync_net, self.ini, + self.fin, + activated_transitions) + return firing_sequence, reach_fm, explained_events + + +def build(trace: Trace, sync_net: PetriNet, sync_im: Marking, sync_fm: Marking, + parameters: Optional[Dict[Any, Any]] = None) -> ExtendedMarkingEquationSolver: + """ + Builds the extended marking equation out of a trace and a synchronous product net + + Parameters + --------------- + trace + Trace + sync_net + Synchronous product net + sync_im + Initial marking (of sync net) + sync_fm + Final marking (of sync net) + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => attribute to use as case identifier + - Parameters.ACTIVITY_KEY => attribute to use as activity + - Parameters.COSTS => (if provided) the cost function (otherwise the default cost function is applied) + - Parameters.SPLIT_IDX => (if provided) the split points as indices of elements of the trace + (e.g. for ["A", "B", "C", "D", "E"], specifying [1,3] as split points means splitting at "B" and "D"). + If not provided, some split points at uniform distances are found. + - Parameters.MAX_K_VALUE => the maximum number of split points that is allowed (trim the specified indexes + if necessary). + - Parameters.INCIDENCE_MATRIX => (if provided) the incidence matrix associated to the sync product net + - Parameters.A => (if provided) the A numpy matrix of the incidence matrix + - Parameters.CONSUMPTION_MATRIX => (if provided) the consumption matrix associated to the sync product net + - Parameters.C => (if provided) the C numpy matrix of the consumption matrix + - Parameters.FULL_BOOTSTRAP_REQUIRED => The preset/postset of places/transitions need to be inserted + """ + if parameters is None: + parameters = {} + + return ExtendedMarkingEquationSolver(trace, sync_net, sync_im, sync_fm, parameters=parameters) + + +def get_h_value(solver: ExtendedMarkingEquationSolver, parameters: Optional[Dict[Any, Any]] = None) -> int: + """ + Gets the heuristics value from the extended marking equation + + Parameters + -------------- + solver + Extended marking equation solver (class in this file) + parameters + Possible parameters of the algorithm + """ + return solver.solve()[0] diff --git a/pm4py/pm4py/algo/analysis/marking_equation/__init__.py b/pm4py/pm4py/algo/analysis/marking_equation/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..df1dc2a9c474994e706aefd2e38fd8d99926282d --- /dev/null +++ b/pm4py/pm4py/algo/analysis/marking_equation/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.marking_equation import algorithm diff --git a/pm4py/pm4py/algo/analysis/marking_equation/algorithm.py b/pm4py/pm4py/algo/analysis/marking_equation/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..bdcea73452e8cc2af6de9de4648d258bf1a37b79 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/marking_equation/algorithm.py @@ -0,0 +1,71 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.algo.analysis.marking_equation.variants import classic +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import exec_utils + + +class Variants(Enum): + CLASSIC = classic + + +def build(net: PetriNet, im: Marking, fm: Marking, variant=Variants.CLASSIC, + parameters: Optional[Dict[Any, Any]] = None) -> Any: + """ + Builds the marking equation out of a Petri net + + Parameters + --------------- + net + Petri net + im + Initial marking + fm + Final marking + variant + Variant of the algorithm to use, possible values: + - Variants.CLASSIC + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => attribute to use as case identifier + - Parameters.ACTIVITY_KEY => attribute to use as activity + - Parameters.COSTS => (if provided) the cost function (otherwise the default cost function is applied) + - Parameters.INCIDENCE_MATRIX => (if provided) the incidence matrix of the Petri net + - Parameters.A => (if provided) the A numpy matrix of the incidence matrix + - Parameters.FULL_BOOTSTRAP_REQUIRED => The preset/postset of places/transitions need to be inserted + """ + return exec_utils.get_variant(variant).build(net, im, fm, parameters=parameters) + + +def get_h_value(solver: Any, variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> int: + """ + Gets the heuristics value from the marking equation + + Parameters + -------------- + solver + Marking equation solver (class in this file) + variant + Variant of the algorithm to use, possible values: + - Variants.CLASSIC + parameters + Possible parameters of the algorithm + """ + return exec_utils.get_variant(variant).get_h_value(solver, parameters=parameters) diff --git a/pm4py/pm4py/algo/analysis/marking_equation/variants/__init__.py b/pm4py/pm4py/algo/analysis/marking_equation/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..af44d19d5345050bcb9f6db24669904965c21696 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/marking_equation/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.marking_equation.variants import classic diff --git a/pm4py/pm4py/algo/analysis/marking_equation/variants/classic.py b/pm4py/pm4py/algo/analysis/marking_equation/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..4c9de981658d0c11cfc2bebc3c0e57740d9ae538 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/marking_equation/variants/classic.py @@ -0,0 +1,325 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Tuple, List + +import numpy as np + +from pm4py.objects.petri_net.utils import align_utils, petri_utils as petri_utils +from pm4py.objects.petri_net.utils.incidence_matrix import IncidenceMatrix +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import exec_utils, constants +from pm4py.util.lp import solver + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + COSTS = "costs" + INCIDENCE_MATRIX = "incidence_matrix" + A = "A_matrix" + FULL_BOOTSTRAP_REQUIRED = "full_bootstrap_required" + + +class MarkingEquationSolver(object): + def __init__(self, net: PetriNet, im: Marking, fm: Marking, + parameters: Optional[Dict[Any, Any]] = None): + """ + Constructor + + Parameters + --------------- + net + Petri net + im + Initial marking + fm + Final marking + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => attribute to use as case identifier + - Parameters.ACTIVITY_KEY => attribute to use as activity + - Parameters.COSTS => (if provided) the cost function (otherwise the default cost function is applied) + - Parameters.INCIDENCE_MATRIX => (if provided) the incidence matrix of the sync product net + - Parameters.A => (if provided) the A numpy matrix of the incidence matrix + - Parameters.FULL_BOOTSTRAP_REQUIRED => The preset/postset of places/transitions need to be inserted + """ + if parameters is None: + parameters = {} + + costs = exec_utils.get_param_value(Parameters.COSTS, parameters, None) + + if costs is None: + costs = align_utils.construct_standard_cost_function(net, align_utils.SKIP) + + self.net = net + self.ini = im + self.fin = fm + self.costs = costs + self.incidence_matrix = exec_utils.get_param_value(Parameters.INCIDENCE_MATRIX, parameters, + IncidenceMatrix(self.net)) + self.Aeq = exec_utils.get_param_value(Parameters.A, parameters, np.asmatrix(self.incidence_matrix.a_matrix)) + self.full_bootstrap_required = exec_utils.get_param_value(Parameters.FULL_BOOTSTRAP_REQUIRED, parameters, True) + + self.__build_entities() + self.__build_problem_components() + + def __build_entities(self): + """ + Builds entities useful to define the marking equation + """ + transitions = self.incidence_matrix.transitions + self.inv_indices = {y: x for x, y in transitions.items()} + self.inv_indices = [self.inv_indices[i] for i in range(len(self.inv_indices))] + self.ini_vec = np.matrix(self.incidence_matrix.encode_marking(self.ini)).transpose() + self.fin_vec = np.matrix(self.incidence_matrix.encode_marking(self.fin)).transpose() + if self.full_bootstrap_required: + petri_utils.decorate_transitions_prepostset(self.net) + petri_utils.decorate_places_preset_trans(self.net) + + def __build_problem_components(self): + """ + Builds the components needed to solve the marking equation + """ + self.beq = self.fin_vec - self.ini_vec + self.Aub = -np.eye(self.Aeq.shape[1]) + self.bub = np.zeros((self.Aeq.shape[1], 1)) + self.c = [self.costs[self.inv_indices[i]] for i in range(len(self.inv_indices))] + if solver.DEFAULT_LP_SOLVER_VARIANT == solver.CVXOPT_SOLVER_CUSTOM_ALIGN: + from cvxopt import matrix + + self.Aeq_transf = matrix(self.Aeq.astype(np.float64)) + self.Aub_transf = matrix(self.Aub.astype(np.float64)) + self.c_transf = matrix([1.0 * x for x in self.c]) + else: + self.Aeq_transf = self.Aeq + self.Aub_transf = self.Aub + self.c_transf = self.c + + def get_components(self) -> Tuple[Any, Any, Any, Any, Any]: + """ + Retrieve the components (Numpy matrixes) of the problem + + Returns + --------------- + c + objective function + Aub + Inequalities matrix + bub + Inequalities vector + Aeq + Equalities matrix + beq + Equalities vector + """ + if solver.DEFAULT_LP_SOLVER_VARIANT == solver.CVXOPT_SOLVER_CUSTOM_ALIGN: + from cvxopt import matrix + + self.beq_transf = matrix(self.beq.astype(np.float64)) + self.bub_transf = matrix(self.bub.astype(np.float64)) + else: + self.beq_transf = self.beq + self.bub_transf = self.bub + + return self.c_transf, self.Aub_transf, self.bub_transf, self.Aeq_transf, self.beq_transf + + def change_ini_vec(self, ini: Marking): + """ + Changes the initial marking of the synchronous product net + + Parameters + -------------- + ini + Initial marking + """ + self.ini = ini + self.ini_vec = np.matrix(self.incidence_matrix.encode_marking(ini)).transpose() + self.beq = self.fin_vec - self.ini_vec + + def get_x_vector(self, sol_points: List[int]) -> List[int]: + """ + Returns the x vector of the solution + + Parameters + -------------- + sol_points + Solution of the integer problem + + Returns + --------------- + x + X vector + """ + return sol_points + + def get_h(self, sol_points: List[int]) -> int: + """ + Returns the value of the heuristics + + Parameters + -------------- + sol_points + Solution of the integer problem + + Returns + -------------- + h + Heuristics value + """ + return int(np.dot(sol_points, self.c)) + + def get_activated_transitions(self, sol_points: List[int]) -> List[PetriNet.Transition]: + """ + Gets the transitions of the synchronous product net that are non-zero + in the solution of the marking equation + + Parameters + -------------- + sol_points + Solution of the integer problem + + Returns + -------------- + act_trans + Activated transitions + """ + act_trans = [] + for i in range(len(sol_points)): + for j in range(sol_points[i]): + act_trans.append(self.inv_indices[i]) + return act_trans + + def solve(self) -> Tuple[int, List[int]]: + """ + Solves the marking equation, returning the heuristics and the x vector + + Returns + ------------- + h + Heuristics value + x + X vector + """ + c, Aub, bub, Aeq, beq = self.get_components() + return self.solve_given_components(c, Aub, bub, Aeq, beq) + + def solve_given_components(self, c, Aub, bub, Aeq, beq): + """ + Solves the linear problem given the components + + Parameters + -------------- + c + Objective vector + Aub + Inequalities matrix + bub + Inequalities vector + Aeq + Equalities matrix + beq + Equalities vector + + Returns + ------------- + h + Heuristics value + x + X vector + """ + if solver.DEFAULT_LP_SOLVER_VARIANT == solver.CVXOPT_SOLVER_CUSTOM_ALIGN and type(c) is list: + from cvxopt import matrix + Aub = matrix(Aub.astype(np.float64)) + bub = matrix(bub.astype(np.float64)) + Aeq = matrix(Aeq.astype(np.float64)) + beq = matrix(beq.astype(np.float64)) + c = matrix([1.0 * x for x in c]) + sol = solver.apply(c, Aub, bub, Aeq, beq, variant=solver.DEFAULT_LP_SOLVER_VARIANT) + sol_points = solver.get_points_from_sol(sol, variant=solver.DEFAULT_LP_SOLVER_VARIANT) + if sol_points is not None: + x = self.get_x_vector(sol_points) + x = [int(y) for y in x] + h = self.get_h(sol_points) + return h, x + return None, None + + def get_firing_sequence(self, x: List[int]) -> Tuple[List[PetriNet.Transition], bool, int]: + """ + Gets a firing sequence from the X vector + + Parameters + ---------------- + x + X vector + + Returns + ---------------- + firing_sequence + Firing sequence + reach_fm + Boolean value that is true whether the firing sequence reaches the final marking + explained_events + Number of explaned events by the firing sequence + """ + activated_transitions = self.get_activated_transitions(x) + firing_sequence, reach_fm, explained_events = align_utils.search_path_among_sol(self.net, self.ini, + self.fin, + activated_transitions) + return firing_sequence, reach_fm, explained_events + + +def build(net: PetriNet, im: Marking, fm: Marking, + parameters: Optional[Dict[Any, Any]] = None) -> MarkingEquationSolver: + """ + Builds the marking equation out of a Petri net + + Parameters + --------------- + net + Petri net + im + Initial marking + fm + Final marking + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => attribute to use as case identifier + - Parameters.ACTIVITY_KEY => attribute to use as activity + - Parameters.COSTS => (if provided) the cost function (otherwise the default cost function is applied) + - Parameters.INCIDENCE_MATRIX => (if provided) the incidence matrix of the Petri net + - Parameters.A => (if provided) the A numpy matrix of the incidence matrix + - Parameters.FULL_BOOTSTRAP_REQUIRED => The preset/postset of places/transitions need to be inserted + """ + if parameters is None: + parameters = {} + + return MarkingEquationSolver(net, im, fm, parameters=parameters) + + +def get_h_value(solver: MarkingEquationSolver, parameters: Optional[Dict[Any, Any]] = None) -> int: + """ + Gets the heuristics value from the marking equation + + Parameters + -------------- + solver + Marking equation solver (class in this file) + parameters + Possible parameters of the algorithm + """ + return solver.solve()[0] diff --git a/pm4py/pm4py/algo/analysis/woflan/__init__.py b/pm4py/pm4py/algo/analysis/woflan/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7b72a3865e1ad6fb9b3e01bc7edd555910a596fa --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.woflan import algorithm, graphs, not_well_handled_pairs, place_invariants + diff --git a/pm4py/pm4py/algo/analysis/woflan/algorithm.py b/pm4py/pm4py/algo/analysis/woflan/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..c123334bdc5ea005da7318921d3fefe13cf399af --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/algorithm.py @@ -0,0 +1,686 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils, nx_utils +from enum import Enum +from pm4py.objects.petri_net.utils import petri_utils +import copy +import numpy as np + +# Importing for place invariants related stuff (s-components, uniform and weighted place invariants) +from pm4py.algo.analysis.woflan.place_invariants.place_invariants import compute_place_invariants +from pm4py.algo.analysis.woflan.place_invariants.utility import transform_basis +from pm4py.algo.analysis.woflan.place_invariants.s_component import compute_s_components +from pm4py.algo.analysis.woflan.place_invariants.s_component import compute_uncovered_places_in_component +from pm4py.algo.analysis.woflan.place_invariants.utility import \ + compute_uncovered_places as compute_uncovered_place_in_invariants + +# Importing to discover not-well handled pairs +from pm4py.algo.analysis.woflan.not_well_handled_pairs.not_well_handled_pairs import \ + apply as compute_not_well_handled_pairs + +# Minimal Coverability Graph +from pm4py.algo.analysis.woflan.graphs.minimal_coverability_graph.minimal_coverability_graph import \ + apply as minimal_coverability_graph +from pm4py.algo.analysis.woflan.graphs.utility import check_for_dead_tasks +from pm4py.algo.analysis.woflan.graphs.utility import check_for_improper_conditions +from pm4py.algo.analysis.woflan.graphs.utility import check_for_substates +from pm4py.algo.analysis.woflan.graphs.utility import convert_marking + +# Restricted coverability graph +from pm4py.algo.analysis.woflan.graphs.restricted_coverability_graph.restricted_coverability_graph import \ + construct_tree as restricted_coverability_tree + +# reachability Graph Creation +from pm4py.algo.analysis.woflan.graphs.reachability_graph.reachability_graph import apply as reachability_graph + +from typing import Optional, Dict, Any, Union +from pm4py.objects.petri_net.obj import PetriNet, Marking + + +class Parameters(Enum): + RETURN_ASAP_WHEN_NOT_SOUND = "return_asap_when_not_sound" + PRINT_DIAGNOSTICS = "print_diagnostics" + RETURN_DIAGNOSTICS = "return_diagnostics" + + +class Outputs(Enum): + S_C_NET = "s_c_net" + PLACE_INVARIANTS = "place_invariants" + UNIFORM_PLACE_INVARIANTS = "uniform_place_invariants" + S_COMPONENTS = "s_components" + UNCOVERED_PLACES_S_COMPONENT = "uncovered_places_s_component" + NOT_WELL_HANDLED_PAIRS = "not_well_handled_pairs" + LEFT = "left" + UNCOVERED_PLACES_UNIFORM = "uncovered_places_uniform" + WEIGHTED_PLACE_INVARIANTS = "weighted_place_invariants" + UNCOVERED_PLACES_WEIGHTED = "uncovered_places_weighted" + MCG = "mcg" + DEAD_TASKS = "dead_tasks" + R_G_S_C = "r_g_s_c" + R_G = "r_g" + LOCKING_SCENARIOS = "locking_scenarios" + RESTRICTED_COVERABILITY_TREE = "restricted_coverability_tree" + DIAGNOSTIC_MESSAGES = "diagnostic_messages" + + +class woflan: + def __init__(self, net, initial_marking, final_marking, print_diagnostics=False): + self.net = net + self.initial_marking = initial_marking + self.final_marking = final_marking + self.print_diagnostics = print_diagnostics + self.s_c_net = None + self.place_invariants = None + self.uniform_place_invariants = None + self.s_components = None + self.uncovered_places_s_component = None + self.not_well_handled_pairs = None + self.left = None + self.uncovered_places_uniform = None + self.weighted_place_invariants = None + self.uncovered_places_weighted = None + self.mcg = None + self.dead_tasks = None + self.r_g_s_c = None + self.r_g = None + self.locking_scenarios = None + self.restricted_coverability_tree = None + self.diagnostic_messages = list() + + def set_s_c_net(self, s_c_net): + self.s_c_net = s_c_net + + def set_place_invariants(self, invariants): + self.place_invariants = invariants + + def set_uniform_place_invariants(self, invariants): + self.uniform_place_invariants = invariants + + def set_s_components(self, s_components): + self.s_components = s_components + + def set_uncovered_places_s_component(self, uncovered_places): + self.uncovered_places_s_component = uncovered_places + + def set_not_well_handled_pairs(self, not_well_handled_pairs): + self.not_well_handled_pairs = not_well_handled_pairs + + def set_left(self, left): + self.left = left + + def set_uncovered_places_uniform(self, places): + self.uncovered_places_uniform = places + + def set_weighted_place_invariants(self, invariants): + self.weighted_place_invariants = invariants + + def set_uncovered_places_weighted(self, places): + self.uncovered_places_weighted = places + + def set_mcg(self, mcg): + self.mcg = mcg + + def set_dead_tasks(self, dead_tasks): + self.dead_tasks = dead_tasks + + def set_r_g_s_c(self, r_g): + self.r_g_s_c = r_g + + def set_r_g(self, r_g): + self.r_g = r_g + + def set_locking_scenarios(self, scenarios): + self.locking_scenarios = scenarios + + def set_restricted_coverability_tree(self, graph): + self.restricted_coverability_tree = graph + + def get_net(self): + return self.net + + def get_initial_marking(self): + return self.initial_marking + + def get_final_marking(self): + return self.final_marking + + def get_s_c_net(self): + return self.s_c_net + + def get_place_invariants(self): + return self.place_invariants + + def get_uniform_place_invariants(self): + return self.uniform_place_invariants + + def get_s_components(self): + return self.s_components + + def get_uncovered_places_s_component(self): + return self.uncovered_places_s_component + + def get_not_well_handled_pairs(self): + return self.not_well_handled_pairs + + def get_left(self): + return self.left + + def get_uncovered_places_uniform(self): + return self.uncovered_places_uniform + + def get_weighted_place_invariants(self): + return self.weighted_place_invariants + + def get_uncovered_places_weighted(self): + return self.uncovered_places_weighted + + def get_mcg(self): + return self.mcg + + def get_dead_tasks(self): + return self.dead_tasks + + def get_r_g_s_c(self): + return self.r_g_s_c + + def get_r_g(self): + return self.r_g + + def get_locking_scenarios(self): + return self.locking_scenarios + + def get_restricted_coverability_tree(self): + return self.restricted_coverability_tree + + def get_output(self): + """ + Returns a dictionary representation of the + entities that are calculated during WOFLAN + """ + ret = {} + if self.s_c_net is not None: + ret[Outputs.S_C_NET.value] = self.s_c_net + if self.place_invariants is not None: + ret[Outputs.PLACE_INVARIANTS.value] = self.place_invariants + if self.uniform_place_invariants is not None: + ret[Outputs.UNIFORM_PLACE_INVARIANTS.value] = self.uniform_place_invariants + if self.s_components is not None: + ret[Outputs.S_COMPONENTS.value] = self.s_components + if self.uncovered_places_s_component is not None: + ret[Outputs.UNCOVERED_PLACES_S_COMPONENT.value] = self.uncovered_places_s_component + if self.not_well_handled_pairs is not None: + ret[Outputs.NOT_WELL_HANDLED_PAIRS.value] = self.not_well_handled_pairs + if self.left is not None: + ret[Outputs.LEFT.value] = self.left + if self.uncovered_places_uniform is not None: + ret[Outputs.UNCOVERED_PLACES_UNIFORM.value] = self.uncovered_places_uniform + if self.weighted_place_invariants is not None: + ret[Outputs.WEIGHTED_PLACE_INVARIANTS.value] = self.weighted_place_invariants + if self.uncovered_places_weighted is not None: + ret[Outputs.UNCOVERED_PLACES_WEIGHTED.value] = self.uncovered_places_weighted + if self.mcg is not None: + ret[Outputs.MCG.value] = self.mcg + if self.dead_tasks is not None: + ret[Outputs.DEAD_TASKS.value] = self.dead_tasks + if self.r_g_s_c is not None: + ret[Outputs.R_G_S_C.value] = self.r_g_s_c + if self.r_g is not None: + ret[Outputs.R_G] = self.r_g + if self.locking_scenarios is not None: + ret[Outputs.LOCKING_SCENARIOS] = self.locking_scenarios + if self.restricted_coverability_tree is not None: + ret[Outputs.RESTRICTED_COVERABILITY_TREE] = self.restricted_coverability_tree + ret[Outputs.DIAGNOSTIC_MESSAGES] = self.diagnostic_messages + return ret + + +def short_circuit_petri_net(net, print_diagnostics=False): + """ + Fist, sink and source place are identified. Then, a transition from source to sink is added to short-circuited + the given petri net. If there is no unique source and sink place, an error gets returned + :param net: Petri net that is going to be short circuited + :return: + """ + s_c_net = copy.deepcopy(net) + no_source_places = 0 + no_sink_places = 0 + sink = None + source = None + for place in s_c_net.places: + if len(place.in_arcs) == 0: + source = place + no_source_places += 1 + if len(place.out_arcs) == 0: + sink = place + no_sink_places += 1 + if (sink is not None) and (source is not None) and no_source_places == 1 and no_sink_places == 1: + # If there is one unique source and sink place, short circuit Petri Net is constructed + t_1 = PetriNet.Transition("short_circuited_transition", "short_circuited_transition") + s_c_net.transitions.add(t_1) + # add arcs in short-circuited net + petri_utils.add_arc_from_to(sink, t_1, s_c_net) + petri_utils.add_arc_from_to(t_1, source, s_c_net) + return s_c_net, [] + else: + if sink is None: + if print_diagnostics: + print("There is no sink place.") + return None, ["There is no sink place."] + elif source is None: + if print_diagnostics: + print("There is no source place.") + return None, ["There is no source place."] + elif no_source_places > 1: + if print_diagnostics: + print("There is more than one source place.") + return None, ["There is more than one source place."] + elif no_sink_places > 1: + if print_diagnostics: + print("There is more than one sink place.") + return None, ["There is more than one sink place."] + + +def step_1(woflan_object, return_asap_when_unsound=False): + """ + In the first step, we check if the input is given correct. We check if net is an PM4Py Petri Net representation + and if the exist a correct entry for the initial and final marking. + :param woflan_object: Object that contains all necessary information + :return: Proceed with step 2 if ok; else False + """ + + def check_if_marking_in_net(marking, net): + """ + Checks if the marked place exists in the Petri Net and if there is only one i_m and f_m + :param marking: Marking of Petri Net + :param net: PM4Py representation of Petri Net + :return: Boolean. True if marking can exists; False if not. + """ + for place in marking: + if place in net.places: + return True + return False + + if isinstance(woflan_object.get_net(), PetriNet): + if len(woflan_object.get_initial_marking()) != 1 or len(woflan_object.get_final_marking()) != 1: + woflan_object.diagnostic_messages.append('There is more than one initial or final marking.') + if woflan_object.print_diagnostics: + print('There is more than one initial or final marking.') + return False + if check_if_marking_in_net(woflan_object.get_initial_marking(), woflan_object.get_net()): + if check_if_marking_in_net(woflan_object.get_final_marking(), woflan_object.get_net()): + woflan_object.diagnostic_messages.append('Input is ok.') + if woflan_object.print_diagnostics: + print('Input is ok.') + return step_2(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + woflan_object.diagnostic_messages.append('The Petri Net is not PM4Py Petri Net represenatation.') + if woflan_object.print_diagnostics: + print('The Petri Net is not PM4Py Petri Net represenatation.') + return False + + +def step_2(woflan_object, return_asap_when_unsound=False): + """ + This method checks if a given Petri net is a workflow net. First, the Petri Net gets short-circuited + (connect start and end place with a tau-transition. Second, the Petri Net gets converted into a networkx graph. + Finally, it is tested if the resulting graph is a strongly connected component. + :param woflan_object: Woflan objet containing all information + :return: Bool=True if net is a WF-Net + """ + + def transform_petri_net_into_regular_graph(still_need_to_discover): + """ + Ths method transforms a list of places and transitions into a networkx graph + :param still_need_to_discover: set of places and transition that are not fully added to graph + :return: + """ + G = nx_utils.DiGraph() + while len(still_need_to_discover) > 0: + element = still_need_to_discover.pop() + G.add_node(element.name) + for in_arc in element.in_arcs: + G.add_node(in_arc.source.name) + G.add_edge(in_arc.source.name, element.name) + for out_arc in element.out_arcs: + G.add_node(out_arc.target.name) + G.add_edge(element.name, out_arc.target.name) + return G + + s_c_net, diagnostic_messages = short_circuit_petri_net(woflan_object.get_net(), + print_diagnostics=woflan_object.print_diagnostics) + woflan_object.set_s_c_net(s_c_net) + woflan_object.diagnostic_messages += diagnostic_messages + if woflan_object.get_s_c_net() == None: + return False + to_discover = woflan_object.get_s_c_net().places | woflan_object.get_s_c_net().transitions + graph = transform_petri_net_into_regular_graph(to_discover) + if not nx_utils.is_strongly_connected(graph): + woflan_object.diagnostic_messages.append('Petri Net is a not a worflow net.') + if woflan_object.print_diagnostics: + print('Petri Net is a not a worflow net.') + return False + else: + woflan_object.diagnostic_messages.append('Petri Net is a workflow net.') + if woflan_object.print_diagnostics: + print('Petri Net is a workflow net.') + return step_3(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + + +def step_3(woflan_object, return_asap_when_unsound=False): + woflan_object.set_place_invariants(compute_place_invariants(woflan_object.get_s_c_net())) + woflan_object.set_uniform_place_invariants(transform_basis(woflan_object.get_place_invariants(), style='uniform')) + woflan_object.set_s_components( + compute_s_components(woflan_object.get_s_c_net(), woflan_object.get_uniform_place_invariants())) + woflan_object.set_uncovered_places_s_component( + compute_uncovered_places_in_component(woflan_object.get_s_components(), woflan_object.get_s_c_net())) + if len(woflan_object.get_uncovered_places_s_component()) == 0: + woflan_object.set_left(True) + woflan_object.diagnostic_messages.append('Every place is covered by s-components.') + if woflan_object.print_diagnostics: + print('Every place is covered by s-components.') + return step_10(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + else: + woflan_object.diagnostic_messages.append('The following places are not covered by an s-component: {}.'.format( + woflan_object.get_uncovered_places_s_component())) + if woflan_object.print_diagnostics: + print('The following places are not covered by an s-component: {}.'.format( + woflan_object.get_uncovered_places_s_component())) + if return_asap_when_unsound: + return False + return step_4(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + + +def step_4(woflan_object, return_asap_when_unsound=False): + woflan_object.set_not_well_handled_pairs(compute_not_well_handled_pairs(woflan_object.get_s_c_net())) + if len(woflan_object.get_not_well_handled_pairs()) == 0: + woflan_object.diagnostic_messages.append('Petri Net is unsound.') + if woflan_object.print_diagnostics: + print('Petri Net is unsound.') + woflan_object.set_left(False) + if return_asap_when_unsound: + return False + return step_5(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + else: + woflan_object.diagnostic_messages.append('Not well-handled pairs are: {}.'.format( + woflan_object.get_not_well_handled_pairs())) + if woflan_object.print_diagnostics: + print('Not well-handled pairs are: {}.'.format(woflan_object.get_not_well_handled_pairs())) + woflan_object.set_left(True) + return step_5(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + + +def step_5(woflan_object, return_asap_when_unsound=False): + woflan_object.set_uncovered_places_uniform( + compute_uncovered_place_in_invariants(woflan_object.get_uniform_place_invariants(), + woflan_object.get_s_c_net())) + if len(woflan_object.get_uncovered_places_uniform()) == 0: + woflan_object.diagnostic_messages.append('There are no uncovered places in uniform invariants.') + if woflan_object.print_diagnostics: + print('There are no uncovered places in uniform invariants.') + return step_10(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + else: + woflan_object.diagnostic_messages.append('The following places are uncovered in uniform invariants: {}'.format( + woflan_object.get_uncovered_places_uniform())) + if woflan_object.print_diagnostics: + print('The following places are uncovered in uniform invariants: {}'.format( + woflan_object.get_uncovered_places_uniform())) + return step_6(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + + +def step_6(woflan_object, return_asap_when_unsound=False): + woflan_object.set_weighted_place_invariants(transform_basis(woflan_object.get_place_invariants(), style='weighted')) + woflan_object.set_uncovered_places_weighted( + compute_uncovered_place_in_invariants(woflan_object.get_weighted_place_invariants(), + woflan_object.get_s_c_net())) + if len(woflan_object.get_uncovered_places_weighted()) == 0: + woflan_object.diagnostic_messages.append('There are no uncovered places in weighted invariants.') + if woflan_object.print_diagnostics: + print('There are no uncovered places in weighted invariants.') + return step_10(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + else: + woflan_object.diagnostic_messages.append('The following places are uncovered in weighted invariants: {}'.format( + woflan_object.get_uncovered_places_weighted())) + if woflan_object.print_diagnostics: + print('The following places are uncovered in weighted invariants: {}'.format( + woflan_object.get_uncovered_places_weighted())) + return step_7(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + + +def step_7(woflan_object, return_asap_when_unsound=False): + woflan_object.set_mcg(minimal_coverability_graph(woflan_object.get_s_c_net(), woflan_object.get_initial_marking(), + woflan_object.get_net())) + if len(check_for_improper_conditions(woflan_object.get_mcg())) == 0: + woflan_object.diagnostic_messages.append('No improper coditions.') + if woflan_object.print_diagnostics: + print('No improper conditions.') + if woflan_object.get_left == True: + return step_8(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + else: + return step_10(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + else: + woflan_object.diagnostic_messages.append('Improper WPD. The following are the improper conditions: {}.'.format( + check_for_improper_conditions(woflan_object.get_mcg()))) + if woflan_object.print_diagnostics: + print('Improper WPD. The following are the improper conditions: {}.'.format( + check_for_improper_conditions(woflan_object.get_mcg()))) + if return_asap_when_unsound: + return False + return step_9(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + + +def step_8(woflan_object, return_asap_when_unsound=False): + if check_for_substates(woflan_object.get_mcg()): + return step_10(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + else: + return step_10(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + + +def step_9(woflan_object, return_asap_when_unsound=False): + woflan_object.diagnostic_messages.append('The following sequences are unbounded: {}'.format( + compute_unbounded_sequences(woflan_object))) + if woflan_object.print_diagnostics: + print('The following sequences are unbounded: {}'.format(compute_unbounded_sequences(woflan_object))) + return False + + +def step_10(woflan_object, return_asap_when_unsound=False): + if woflan_object.get_mcg() == None: + woflan_object.set_mcg( + minimal_coverability_graph(woflan_object.get_s_c_net(), woflan_object.get_initial_marking(), + woflan_object.get_net())) + woflan_object.set_dead_tasks(check_for_dead_tasks(woflan_object.get_s_c_net(), woflan_object.get_mcg())) + if len(woflan_object.get_dead_tasks()) == 0: + woflan_object.diagnostic_messages.append('There are no dead tasks.') + if woflan_object.print_diagnostics: + print('There are no dead tasks.') + if woflan_object.get_left() == True: + return step_11(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + else: + if return_asap_when_unsound: + return False + return step_12(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + else: + woflan_object.diagnostic_messages.append('The following tasks are dead: {}'.format( + woflan_object.get_dead_tasks())) + if woflan_object.print_diagnostics: + print('The following tasks are dead: {}'.format(woflan_object.get_dead_tasks())) + return False + + +def step_11(woflan_object, return_asap_when_unsound=False): + woflan_object.set_r_g_s_c( + reachability_graph(woflan_object.get_s_c_net(), woflan_object.get_initial_marking(), woflan_object.get_net())) + if nx_utils.is_strongly_connected(woflan_object.get_r_g_s_c()): + woflan_object.diagnostic_messages.append('All tasks are live.') + if woflan_object.print_diagnostics: + print('All tasks are live.') + return True + else: + if return_asap_when_unsound: + return False + return step_13(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + + +def step_12(woflan_object, return_asap_when_unsound=False): + woflan_object.set_r_g_s_c( + reachability_graph(woflan_object.get_s_c_net(), woflan_object.get_initial_marking(), woflan_object.get_net())) + woflan_object.diagnostic_messages.append('There are non-live tasks.') + if woflan_object.print_diagnostics: + print('There are non-live tasks.') + if return_asap_when_unsound: + return False + return step_13(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + + +def step_13(woflan_object, return_asap_when_unsound=False): + woflan_object.set_locking_scenarios(compute_non_live_sequences(woflan_object)) + woflan_object.diagnostic_messages.append('The following sequences lead to deadlocks: {}.'.format( + woflan_object.get_locking_scenarios())) + if woflan_object.print_diagnostics: + print('The following sequences lead to deadlocks: {}.'.format(woflan_object.get_locking_scenarios())) + return False + + +def apply(net: PetriNet, i_m: Marking, f_m: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Union[bool, Any]: + """ + Apply the Woflan Soundness check. Trough this process, different steps are executed. + :param net: Petri Net representation of PM4Py + :param i_m: initial marking of given Net. Marking object of PM4Py + :param f_m: final marking of given Net. Marking object of PM4Py + :return: True, if net is sound; False otherwise. + """ + if parameters is None: + parameters = {} + return_asap_when_unsound = exec_utils.get_param_value(Parameters.RETURN_ASAP_WHEN_NOT_SOUND, parameters, False) + print_diagnostics = exec_utils.get_param_value(Parameters.PRINT_DIAGNOSTICS, parameters, True) + return_diagnostics = exec_utils.get_param_value(Parameters.RETURN_DIAGNOSTICS, parameters, False) + + woflan_object = woflan(net, i_m, f_m, print_diagnostics=print_diagnostics) + step_1_res = step_1(woflan_object, return_asap_when_unsound=return_asap_when_unsound) + + if return_diagnostics: + return step_1_res, woflan_object.get_output() + + return step_1_res + + +def compute_non_live_sequences(woflan_object): + """ + We want to compute the sequences of transitions which lead to deadlocks. + To do this, we first compute a reachbility graph (possible, since we know that the Petri Net is bounded) and then we + convert it to a spanning tree. Afterwards, we compute the paths which lead to nodes from which the final marking cannot + be reached. Note: We are searching for the shortest sequence. After the first red node, all successors are also red. + Therefore, we do not have to consider them. + :param woflan_object: Object that contains the necessary information + :return: List of sequence of transitions, each sequence is a list + """ + woflan_object.set_r_g(reachability_graph(woflan_object.get_net(), woflan_object.get_initial_marking())) + f_m = convert_marking(woflan_object.get_net(), woflan_object.get_final_marking()) + sucessfull_terminate_state = None + for node in woflan_object.get_r_g().nodes: + if all(np.equal(woflan_object.get_r_g().nodes[node]['marking'], f_m)): + sucessfull_terminate_state = node + break + # red nodes are those from which the final marking is not reachable + red_nodes = [] + for node in woflan_object.get_r_g().nodes: + if not nx_utils.has_path(woflan_object.get_r_g(), node, sucessfull_terminate_state): + red_nodes.append(node) + # Compute directed spanning tree + spanning_tree = nx_utils.Edmonds(woflan_object.get_r_g()).find_optimum() + queue = set() + paths = {} + # root node + queue.add(0) + paths[0] = [] + processed_nodes = set() + red_paths = [] + while len(queue) > 0: + v = queue.pop() + for node in spanning_tree.neighbors(v): + if node not in paths and node not in processed_nodes: + paths[node] = paths[v].copy() + # we can use directly 0 here, since we are working on a spanning tree and there should be no more edges to a node + paths[node].append(woflan_object.get_r_g().get_edge_data(v, node)[0]['transition']) + if node not in red_nodes: + queue.add(node) + else: + red_paths.append(paths[node]) + processed_nodes.add(v) + return red_paths + + +def compute_unbounded_sequences(woflan_object): + """ + We compute the sequences which lead to an infinite amount of tokens. To do this, we compute a restricted coverability tree. + The tree works similar to the graph, despite we consider tree characteristics during the construction. + :param woflan_object: Woflan object that contains all needed information. + :return: List of unbounded sequences, each sequence is a list of transitions + """ + + def check_for_markings_larger_than_final_marking(graph, f_m): + markings = [] + for node in graph.nodes: + if all(np.greater_equal(graph.nodes[node]['marking'], f_m)): + markings.append(node) + return markings + + woflan_object.set_restricted_coverability_tree( + restricted_coverability_tree(woflan_object.get_net(), woflan_object.get_initial_marking())) + f_m = convert_marking(woflan_object.get_net(), woflan_object.get_final_marking()) + infinite_markings = [] + for node in woflan_object.get_restricted_coverability_tree().nodes: + if np.inf in woflan_object.get_restricted_coverability_tree().nodes[node]['marking']: + infinite_markings.append(node) + larger_markings = check_for_markings_larger_than_final_marking(woflan_object.get_restricted_coverability_tree(), + f_m) + green_markings = [] + for node in woflan_object.get_restricted_coverability_tree().nodes: + add_to_green = True + for marking in infinite_markings: + if nx_utils.has_path(woflan_object.get_restricted_coverability_tree(), node, marking): + add_to_green = False + for marking in larger_markings: + if nx_utils.has_path(woflan_object.get_restricted_coverability_tree(), node, marking): + add_to_green = False + if add_to_green: + green_markings.append(node) + red_markings = [] + for node in woflan_object.get_restricted_coverability_tree().nodes: + add_to_red = True + for node_green in green_markings: + if nx_utils.has_path(woflan_object.get_restricted_coverability_tree(), node, node_green): + add_to_red = False + break + if add_to_red: + red_markings.append(node) + # Make the path as short as possible. If we reach a red state, we stop and do not go further in the "red zone". + queue = set() + queue.add(0) + paths = {} + paths[0] = [] + paths_to_red = [] + while len(queue) > 0: + v = queue.pop() + successors = woflan_object.get_restricted_coverability_tree().successors(v) + for suc in successors: + paths[suc] = paths[v].copy() + paths[suc].append(woflan_object.get_restricted_coverability_tree().get_edge_data(v, suc)['transition']) + if suc in red_markings: + paths_to_red.append(paths[suc]) + else: + queue.add(suc) + return paths_to_red diff --git a/pm4py/pm4py/algo/analysis/woflan/graphs/__init__.py b/pm4py/pm4py/algo/analysis/woflan/graphs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4c3821c3aa2da0a512667231754553b48a277423 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/graphs/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.woflan.graphs import utility, minimal_coverability_graph, reachability_graph, restricted_coverability_graph diff --git a/pm4py/pm4py/algo/analysis/woflan/graphs/minimal_coverability_graph/__init__.py b/pm4py/pm4py/algo/analysis/woflan/graphs/minimal_coverability_graph/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0f784b620e433f61ad14acae2e50c6d0da95e20c --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/graphs/minimal_coverability_graph/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.woflan.graphs.minimal_coverability_graph import minimal_coverability_graph diff --git a/pm4py/pm4py/algo/analysis/woflan/graphs/minimal_coverability_graph/minimal_coverability_graph.py b/pm4py/pm4py/algo/analysis/woflan/graphs/minimal_coverability_graph/minimal_coverability_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..0a9c4d1f9fe94b8b9a29aca9b51dfb8eeef2d163 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/graphs/minimal_coverability_graph/minimal_coverability_graph.py @@ -0,0 +1,193 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +""" +This module is based on: +The minimal coverability graph for Petri nets +from Alain Finkel +""" +import numpy as np +from pm4py.util import nx_utils +from pm4py.algo.analysis.woflan.graphs import utility as helper +from copy import copy + + +def minimal_coverability_tree(net, initial_marking, original_net=None): + """ + This method computes the minimal coverability tree. It is part of a method to obtain a minial coverability graph + :param net: Petri Net + :param initial_marking: Initial Marking of the Petri Net + :param original_net: Petri Net without short-circuited transition + :return: Minimal coverability tree + """ + + def check_if_marking_already_in_processed_nodes(n, processed_nodes): + for node in processed_nodes: + if np.array_equal(G.nodes[node]['marking'], G.nodes[n]['marking']): + return True + return False + + def is_m_smaller_than_other(m, processed_nodes): + for node in processed_nodes: + if all(np.less_equal(m, G.nodes[node]['marking'])): + return True + return False + + def is_m_greater_than_other(m, processed_nodes): + for node in processed_nodes: + if all(np.greater_equal(m, G.nodes[node]['marking'])): + return True + return False + + def get_first_smaller_marking_on_path(n, m2): + path = nx_utils.shortest_path(G, source=0, target=n) + for node in path: + if all(np.less_equal(G.nodes[node]['marking'], m2)): + return node + return None + + def remove_subtree(tree, n): + bfs_tree = nx_utils.bfs_tree(tree, n) + for edge in bfs_tree.edges: + tree.remove_edge(edge[0], edge[1]) + for node in bfs_tree.nodes: + if node != n: + tree.remove_node(node) + return tree + + G = nx_utils.MultiDiGraph() + + incidence_matrix = helper.compute_incidence_matrix(net) + firing_dict = helper.split_incidence_matrix(incidence_matrix, net) + req_dict = helper.compute_firing_requirement(net) + + initial_mark = helper.convert_marking(net, initial_marking, original_net) + j = 0 + unprocessed_nodes = list() + G.add_node(j, marking=initial_mark) + unprocessed_nodes.append(j) + j += 1 + + processed_nodes = set() + + while len(unprocessed_nodes) > 0: + n = unprocessed_nodes.pop() + if check_if_marking_already_in_processed_nodes(n, processed_nodes): + processed_nodes.add(n) + elif is_m_smaller_than_other(G.nodes[n]['marking'], processed_nodes): + predecessors = sorted(list(G.predecessors(n))) + G.remove_edge(predecessors[0], n) + G.remove_node(n) + elif is_m_greater_than_other(G.nodes[n]['marking'], processed_nodes): + m2 = G.nodes[n]['marking'].copy() + ancestor_bool = False + ancestors = sorted(list(nx_utils.ancestors(G, n))) + for ancestor in ancestors: + if is_m_greater_than_other(G.nodes[n]['marking'], [ancestor]): + i = 0 + while i < len(G.nodes[n]['marking']): + if G.nodes[ancestor]['marking'][i] < G.nodes[n]['marking'][i]: + m2[i] = np.inf + i += 1 + n1 = None + for ancestor in ancestors: + if all(np.less_equal(G.nodes[ancestor]['marking'], m2)): + n1 = get_first_smaller_marking_on_path(n, m2) + break + if n1 != None: + ancestor_bool = True + G.nodes[n1]['marking'] = m2.copy() + subtree = sorted(list(nx_utils.bfs_tree(G, n1))) + for node in subtree: + if node in processed_nodes: + processed_nodes.remove(node) + if node in unprocessed_nodes: + del unprocessed_nodes[unprocessed_nodes.index(node)] + G = remove_subtree(G, n1) + if not n1 in unprocessed_nodes: + unprocessed_nodes.append(n1) + processed_nodes_copy = copy(processed_nodes) + for node in processed_nodes_copy: + if node in G.nodes: + if all(np.less_equal(G.nodes[node]['marking'], m2)): + subtree = nx_utils.bfs_tree(G, node) + for node in subtree: + if node in processed_nodes: + processed_nodes.remove(node) + if node in unprocessed_nodes: + del unprocessed_nodes[unprocessed_nodes.index(node)] + remove_subtree(G, node) + G.remove_node(node) + if not ancestor_bool: + if n not in unprocessed_nodes: + unprocessed_nodes.append(n) + else: + enabled_markings = helper.enabled_markings(firing_dict, req_dict, G.nodes[n]['marking']) + for el in enabled_markings: + G.add_node(j, marking=el[0]) + G.add_edge(n, j, transition=el[1]) + if j not in unprocessed_nodes: + unprocessed_nodes.append(j) + j += 1 + processed_nodes.add(n) + + return (G, firing_dict, req_dict) + + +def apply(net, initial_marking, original_net=None): + """ + Apply method from the "outside". + :param net: Petri Net object + :param initial_marking: Initial marking of the Petri Net object + :param original_net: Petri Net object without short-circuited transition. For better usability, initial set to None + :return: MultiDiGraph networkx object + """ + + def detect_same_labelled_nodes(G): + same_labels = {} + for node in G.nodes: + if np.array2string(G.nodes[node]['marking']) not in same_labels: + same_labels[np.array2string(G.nodes[node]['marking'])] = [node] + else: + same_labels[np.array2string(G.nodes[node]['marking'])].append(node) + return same_labels + + def merge_nodes_of_same_label(G, same_labels): + for marking in same_labels: + if len(same_labels[marking]) > 1: + origin = same_labels[marking][0] + i = 1 + while i < len(same_labels[marking]): + G = nx_utils.contracted_nodes(G, origin, same_labels[marking][i]) + i += 1 + return G + + mct, firing_dict, req_dict = minimal_coverability_tree(net, initial_marking, original_net) + mcg = merge_nodes_of_same_label(mct, detect_same_labelled_nodes(mct)) + + to_remove_edges = [] + for edge in mcg.edges: + reachable_markings = helper.enabled_markings(firing_dict, req_dict, mcg.nodes[edge[0]]['marking']) + not_reachable = True + for el in reachable_markings: + if np.array_equal(el[0], mcg.nodes[edge[1]]['marking']): + not_reachable = False + break + if not_reachable: + to_remove_edges.append(edge) + for edge in to_remove_edges: + mcg.remove_edge(edge[0], edge[1]) + return mcg diff --git a/pm4py/pm4py/algo/analysis/woflan/graphs/reachability_graph/__init__.py b/pm4py/pm4py/algo/analysis/woflan/graphs/reachability_graph/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0588a53c9afc6bcc3aa7eefbb1eeea018e7e9010 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/graphs/reachability_graph/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.woflan.graphs.reachability_graph import reachability_graph diff --git a/pm4py/pm4py/algo/analysis/woflan/graphs/reachability_graph/reachability_graph.py b/pm4py/pm4py/algo/analysis/woflan/graphs/reachability_graph/reachability_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..de871f46a06fb31551241c7fb2a63c81a37ef18e --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/graphs/reachability_graph/reachability_graph.py @@ -0,0 +1,56 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import nx_utils +import numpy as np +from pm4py.algo.analysis.woflan.graphs import utility as helper + + +def apply(net, initial_marking, original_net=None): + """ + Method that computes a reachability graph as networkx object + :param net: Petri Net + :param initial_marking: Initial Marking of the Petri Net + :param original_net: Petri Net without short-circuited transition + :return: Networkx Graph that represents the reachability graph of the Petri Net + """ + initial_marking = helper.convert_marking(net, initial_marking, original_net) + firing_dict = helper.split_incidence_matrix(helper.compute_incidence_matrix(net), net) + req_dict = helper.compute_firing_requirement(net) + look_up_indices = {} + j = 0 + reachability_graph = nx_utils.MultiDiGraph() + reachability_graph.add_node(j, marking=initial_marking) + + working_set = set() + working_set.add(j) + + look_up_indices[np.array2string(initial_marking)] = j + + j += 1 + while len(working_set) > 0: + m = working_set.pop() + possible_markings = helper.enabled_markings(firing_dict, req_dict, reachability_graph.nodes[m]['marking']) + for marking in possible_markings: + if np.array2string(marking[0]) not in look_up_indices: + look_up_indices[np.array2string(marking[0])] = j + reachability_graph.add_node(j, marking=marking[0]) + working_set.add(j) + reachability_graph.add_edge(m, j, transition=marking[1]) + j += 1 + else: + reachability_graph.add_edge(m, look_up_indices[np.array2string(marking[0])], transition=marking[1]) + return reachability_graph diff --git a/pm4py/pm4py/algo/analysis/woflan/graphs/restricted_coverability_graph/__init__.py b/pm4py/pm4py/algo/analysis/woflan/graphs/restricted_coverability_graph/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9a8478db7ec8ac18daeabfab48aad5f334376fb9 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/graphs/restricted_coverability_graph/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.woflan.graphs.restricted_coverability_graph import restricted_coverability_graph diff --git a/pm4py/pm4py/algo/analysis/woflan/graphs/restricted_coverability_graph/restricted_coverability_graph.py b/pm4py/pm4py/algo/analysis/woflan/graphs/restricted_coverability_graph/restricted_coverability_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..316e74add1ba931ea9b82882a8ff8604862abe3c --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/graphs/restricted_coverability_graph/restricted_coverability_graph.py @@ -0,0 +1,90 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from pm4py.algo.analysis.woflan.graphs import utility as helper +from pm4py.util import nx_utils + + +def construct_tree(net, initial_marking): + """ + Construct a restricted coverability marking. + For more information, see the thesis "Verification of WF-nets", 4.3. + :param net: + :param initial_marking: + :return: + """ + initial_marking = helper.convert_marking(net, initial_marking) + firing_dict = helper.split_incidence_matrix(helper.compute_incidence_matrix(net), net) + req_dict = helper.compute_firing_requirement(net) + look_up_indices = {} + j = 0 + coverability_graph = nx_utils.DiGraph() + coverability_graph.add_node(j, marking=initial_marking) + look_up_indices[np.array2string(initial_marking)] = j + + j += 1 + new_arc = True + while new_arc: + new_arc = False + nodes = list(coverability_graph.nodes).copy() + while len(nodes) > 0: + m = nodes.pop() + if not np.inf in coverability_graph.nodes[m]['marking']: + possible_markings = helper.enabled_markings(firing_dict, req_dict, + coverability_graph.nodes[m]['marking']) + m2 = None + if len(possible_markings) > 0: + for marking in possible_markings: + # check for m1 + since we want to construct a tree, we do not want that a marking is already in a graph since it is going to have an arc + if np.array2string(marking[0]) not in look_up_indices: + if check_if_transition_unique(m, coverability_graph, marking[1]): + m2 = marking + new_arc = True + break + if new_arc: + break + if new_arc: + lplaces = sorted(list(net.places), key=lambda x: x.name) + m3 = np.zeros(len(lplaces)) + for place in lplaces: + if check_for_smaller_marking(m2, coverability_graph, lplaces.index(place), m, look_up_indices): + m3[lplaces.index(place)] = np.inf + else: + m3[lplaces.index(place)] = m2[0][lplaces.index(place)] + coverability_graph.add_node(j, marking=m3) + coverability_graph.add_edge(m, j, transition=m2[1]) + look_up_indices[np.array2string(m3)] = j + j += 1 + return coverability_graph + + +def check_if_transition_unique(marking, graph, transition): + for edge in graph.out_edges(marking): + if graph[edge[0]][edge[1]]['transition'] == transition: + return False + return True + + +def check_for_smaller_marking(marking, coverability_graph, index, current_node, look_up_indices): + for node in coverability_graph.nodes: + if all(np.less_equal(coverability_graph.nodes[node]['marking'], marking[0])): + if coverability_graph.nodes[node]['marking'][index] < marking[0][index]: + if nx_utils.has_path(coverability_graph, + look_up_indices[np.array2string(coverability_graph.nodes[node]['marking'])], + current_node): + return True + return False diff --git a/pm4py/pm4py/algo/analysis/woflan/graphs/utility.py b/pm4py/pm4py/algo/analysis/woflan/graphs/utility.py new file mode 100644 index 0000000000000000000000000000000000000000..ffb42bb25e23098e622a73ca88801ba326e22e8c --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/graphs/utility.py @@ -0,0 +1,145 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from pm4py.util import nx_utils + + +def compute_incidence_matrix(net): + """ + Given a Petri Net, the incidence matrix is computed. An incidence matrix has n rows (places) and m columns + (transitions). + :param net: Petri Net object + :return: Incidence matrix + """ + n = len(net.transitions) + m = len(net.places) + C = np.zeros((m, n)) + i = 0 + transition_list = sorted(list(net.transitions), key=lambda x: x.name) + place_list = sorted(list(net.places), key=lambda x: x.name) + while i < n: + t = transition_list[i] + for in_arc in t.in_arcs: + # arcs that go to transition + C[place_list.index(in_arc.source), i] -= (1*in_arc.weight) + for out_arc in t.out_arcs: + # arcs that lead away from transition + C[place_list.index(out_arc.target), i] += (1*out_arc.weight) + i += 1 + return C + + +def split_incidence_matrix(matrix, net): + """ + We split the incidence matrix columnwise to get the firing information for each transition + :param matrix: incidence matrix + :param net: Petri Net + :return: Dictionary, whereby the key is an np array that contains the firing information and the value is the name + of the transition + """ + transition_dict = {} + lst_transitions = sorted(list(net.transitions), key=lambda x: x.name) + i = 0 + while i < len(net.transitions): + transition_dict[lst_transitions[i]] = np.hsplit(np.transpose(matrix), 1)[0][i] + i += 1 + return transition_dict + +def compute_firing_requirement(net): + place_list=sorted(list(net.places), key=lambda x: x.name) + transition_dict={} + for transition in net.transitions: + temp_array=np.zeros(len(place_list)) + for arc in transition.in_arcs: + temp_array[place_list.index(arc.source)] -=1*arc.weight + transition_dict[transition]=temp_array + return transition_dict + +def enabled_markings(firing_dict, req_dict,marking): + enabled_transitions = [] + for transition, requirment in req_dict.items(): + if all(np.greater_equal(marking, requirment.copy()*-1)): + enabled_transitions.append(transition) + new_markings = [] + for transition in enabled_transitions: + new_marking = marking + firing_dict[transition] + new_markings.append((new_marking, transition)) + return new_markings + +def convert_marking(net, marking, original_net=None): + """ + Takes an marking as input and converts it into an Numpy Array + :param net: PM4Py Petri Net object + :param marking: Marking that should be converted + :param original_net: PM4Py Petri Net object without short-circuited transition + :return: Numpy array representation + """ + #marking_list=list(el.name for el in marking.keys()) + # + marking_list = sorted([el.name for el in marking.keys()]) + place_list = sorted(list(el.name for el in net.places)) + + mark = np.zeros(len(place_list)) + for index, value in enumerate(mark): + if place_list[index] in marking_list: + #TODO: Is setting the value to 1 ok in this case? + mark[index]=1 + return mark + +def check_for_dead_tasks(net, graph): + """ + We compute a list of dead tasks. A dead task is a task which does not appear in the Minimal Coverability Graph + :param net: Petri Net representation of PM4Py + :param graph: Minimal coverability graph. NetworkX MultiDiGraph object. + :return: list of dead tasks + """ + tasks=[] + lst_transitions = sorted(list(net.transitions), key=lambda x: x.name) + for transition in lst_transitions: + if transition.label != None: + tasks.append(transition) + for node,targets in graph.edges()._adjdict.items(): + for target_node,activties in targets.items(): + for option,activity in activties.items(): + if activity['transition'] in tasks: + tasks.remove(activity['transition']) + return tasks + +def check_for_improper_conditions(mcg): + """ + An improper condition is a state in the minimum-coverability graph with an possible infinite amount of tokens + :param mcg: networkx object (minimal coverability graph) + :return: True, if there are no improper conditions; false otherwise + """ + improper_states=[] + for node in mcg.nodes: + if np.inf in mcg.nodes[node]['marking']: + improper_states.append(node) + return improper_states + +def check_for_substates(mcg): + """ + Checks if a substate exists in a given mcg + :param mcg: Minimal coverability graph (networkx object) + :return: True, if there exist no substate; False otherwise + """ + for node in mcg.nodes: + reachable_states = nx_utils.descendants(mcg, node) + for state in reachable_states: + if all(np.less(mcg.nodes[node]['marking'],mcg.nodes[state]['marking'])): + return False + return True diff --git a/pm4py/pm4py/algo/analysis/woflan/not_well_handled_pairs/__init__.py b/pm4py/pm4py/algo/analysis/woflan/not_well_handled_pairs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..83fdd278ee1771b63a135bf512568090f16f279c --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/not_well_handled_pairs/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.woflan.not_well_handled_pairs import not_well_handled_pairs diff --git a/pm4py/pm4py/algo/analysis/woflan/not_well_handled_pairs/not_well_handled_pairs.py b/pm4py/pm4py/algo/analysis/woflan/not_well_handled_pairs/not_well_handled_pairs.py new file mode 100644 index 0000000000000000000000000000000000000000..ee1c3cb693c4b5f4591db5b37c49f61a7f8a2737 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/not_well_handled_pairs/not_well_handled_pairs.py @@ -0,0 +1,65 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import nx_utils + + +def create_network_graph(net): + """ + Transform a given Petri Net in a network graph. Each place and transition is node and gets duplicated. + The even numbers handle the inputs of a node, the odds the output. + :param net: PM4Py Petri Net representation + :return: networkx.DiGraph(), bookkeeping dictionary + """ + graph = nx_utils.DiGraph() + places = sorted(list(net.places), key=lambda x: x.name) + transitions = sorted(list(net.transitions), key=lambda x: x.name) + nodes=set(places) | set(transitions) + bookkeeping={} + for index,el in enumerate(nodes): + bookkeeping[el]=index*2 + for node in nodes: + graph.add_node(bookkeeping[node]) + graph.add_node(bookkeeping[node]+1) + graph.add_edge(bookkeeping[node], bookkeeping[node]+1, capacity=1) + #add edges for outgoing arcs in former Petri Net + for element in nodes: + for arc in element.out_arcs: + graph.add_edge(bookkeeping[element]+1, bookkeeping[arc.target], capacity=1) + #add edges for ingoing arcs in former Petri Net + for element in nodes: + for arc in element.in_arcs: + graph.add_edge(bookkeeping[arc.source]+1, bookkeeping[element], capacity=1) + return graph,bookkeeping + +def apply(net): + """ + Using the max-flow min-cut theorem, we compute a list of nett well handled TP and PT pairs + (T=transition, P=place) + :param net: Petri Net + :return: List + """ + graph,booking=create_network_graph(net) + pairs=[] + for place in net.places: + for transition in net.transitions: + p=booking[place] + t=booking[transition] + if nx_utils.maximum_flow_value(graph, p+1, t)>1: + pairs.append((p+1,t)) + if nx_utils.maximum_flow_value(graph, t+1, p)>1: + pairs.append((t+1,p)) + return pairs diff --git a/pm4py/pm4py/algo/analysis/woflan/place_invariants/__init__.py b/pm4py/pm4py/algo/analysis/woflan/place_invariants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0c45fa83c2b4d7558657a22ee0776e1e3b777f81 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/place_invariants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.woflan.place_invariants import place_invariants, s_component, uniform_invariant, utility diff --git a/pm4py/pm4py/algo/analysis/woflan/place_invariants/place_invariants.py b/pm4py/pm4py/algo/analysis/woflan/place_invariants/place_invariants.py new file mode 100644 index 0000000000000000000000000000000000000000..d730416536b678020ef685da8ff0ccdabd93dc32 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/place_invariants/place_invariants.py @@ -0,0 +1,110 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np + + +def compute_place_invariants(net): + """ + We compute the NUllspace of the incidence matrix and obtain the place-invariants. + :param net: Petri Net of which we want to know the place invariants. + :return: Set of place invariants of the given Petri Net. + """ + + def compute_incidence_matrix(net): + """ + Given a Petri Net, the incidence matrix is computed. An incidence matrix has n rows (places) and m columns + (transitions). + :param net: Petri Net object + :return: Incidence matrix + """ + n = len(net.transitions) + m = len(net.places) + C = np.zeros((m, n)) + i = 0 + transition_list = sorted(list(net.transitions), key=lambda x: x.name) + place_list = sorted(list(net.places), key=lambda x: x.name) + while i < n: + t = transition_list[i] + for in_arc in t.in_arcs: + # arcs that go to transition + C[place_list.index(in_arc.source), i] -= 1 + for out_arc in t.out_arcs: + # arcs that lead away from transition + C[place_list.index(out_arc.target), i] += 1 + i += 1 + return C + + def rref(A, tol=1.0e-12): + m, n = A.shape + i, j = 0, 0 + jb = [] + + while i < m and j < n: + # Find value and index of largest element in the remainder of column j + k = np.argmax(np.abs(A[i:m, j])) + i + p = np.abs(A[k, j]) + if p <= tol: + # The column is negligible, zero it out + A[i:m, j] = 0.0 + j += 1 + else: + # Remember the column index + jb.append(j) + if i != k: + # Swap the i-th and k-th rows + A[[i, k], j:n] = A[[k, i], j:n] + # Divide the pivot row i by the pivot element A[i, j] + A[i, j:n] = A[i, j:n] / A[i, j] + # Subtract multiples of the pivot row from all the other rows + for k in range(m): + if k != i: + A[k, j:n] -= A[k, j] * A[i, j:n] + i += 1 + j += 1 + # Finished + return A, jb + + def extract_basis_vectors(incidence_matrix): + """ + The name of the method describes what we want t achieve. We calculate the nullspace of the transposed identity matrix. + :param incidence_matrix: Numpy Array + :return: a collection of numpy arrays that form a base of transposed A + """ + # To have the same dimension as described as in https://www7.in.tum.de/~esparza/fcbook-middle.pdf and to get the correct nullspace, we have to transpose + A = np.transpose(incidence_matrix) + reduced, pivots = rref(A) + free_vars = [i for i in range(A.shape[1]) if i not in pivots] + basis = [] + + for free_var in free_vars: + vec = np.zeros(A.shape[1]) + vec[free_var] = 1 + for piv_row, piv_col in enumerate(pivots): + vec[piv_col] -= reduced[piv_row, free_var] + basis.append(vec.tolist()) + + z = [[] for k in range(len(basis))] + if basis: + for i in range(len(basis[0])): + for k in range(len(basis)): + z[k].append([basis[k][i]]) + z = np.array(z) + + return z + + A = compute_incidence_matrix(net) + return extract_basis_vectors(A) diff --git a/pm4py/pm4py/algo/analysis/woflan/place_invariants/s_component.py b/pm4py/pm4py/algo/analysis/woflan/place_invariants/s_component.py new file mode 100644 index 0000000000000000000000000000000000000000..1f2e0ab6ccf57bc25c920fb6e1c04ec486412bb7 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/place_invariants/s_component.py @@ -0,0 +1,92 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.woflan.place_invariants.uniform_invariant import apply as compute_uniform_invariants + +def apply(net): + """ + General method to obtain a list of S-components + :param net: Petri Net for which S-components should be computed + :return: A list of S-components + """ + uniform_invariants=compute_uniform_invariants(net) + return compute_s_components(net, uniform_invariants) + + +def compute_s_components(net, p_invariants): + """ + We perform the hint in 5.4.4 of https://pure.tue.nl/ws/portalfiles/portal/1596223/9715985.pdf + :param p_invariants: Semi-positive basis we calculate previously + :return: A list of S-Components. A s-component consists of a set which includes all related transitions a places + """ + + def compare_lists(list1, list2): + """ + :param list1: a list + :param list2: a list + :return: a number how often a item from list1 appears in list2 + """ + counter = 0 + for el in list1: + if el in list2: + counter += 1 + return counter + + s_components = [] + place_list = sorted(list(net.places), key=lambda x: x.name) + for invariant in p_invariants: + i = 0 + s_component = [] + for el in invariant: + if el > 0: + place = place_list[i] + s_component.append(place) + for in_arc in place.in_arcs: + s_component.append(in_arc.source) + for out_arc in place.out_arcs: + s_component.append(out_arc.target) + i += 1 + if len(s_component) != 0: + is_s_component = True + for el in s_component: + if el in net.transitions: + places_before = [arc.source for arc in el.in_arcs] + comparison_before = compare_lists(s_component, places_before) + places_after = [arc.target for arc in el.out_arcs] + comparison_after = compare_lists(s_component, places_after) + if comparison_before != 1: + is_s_component = False + break + if comparison_after != 1: + is_s_component = False + break + if is_s_component: + s_components.append(set(s_component)) + return s_components + +def compute_uncovered_places_in_component(s_components, net): + """ + We check for uncovered places + :param s_components: List of s_components + :param net: Petri Net representation of PM4Py + :return: List of uncovered places + """ + place_list=sorted(list(net.places), key=lambda x: x.name) + for component in s_components: + for el in component: + if el in place_list: + place_list.remove(el) + return place_list diff --git a/pm4py/pm4py/algo/analysis/woflan/place_invariants/uniform_invariant.py b/pm4py/pm4py/algo/analysis/woflan/place_invariants/uniform_invariant.py new file mode 100644 index 0000000000000000000000000000000000000000..223f6ab6d8912ff0fdac82eb56d3a225ac4aa328 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/place_invariants/uniform_invariant.py @@ -0,0 +1,25 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.woflan.place_invariants.place_invariants import compute_place_invariants +from pm4py.algo.analysis.woflan.place_invariants.utility import transform_basis + + +def apply(net): + place_invariants= compute_place_invariants(net) + modified_invariants=transform_basis(place_invariants, style='uniform') + return modified_invariants + diff --git a/pm4py/pm4py/algo/analysis/woflan/place_invariants/utility.py b/pm4py/pm4py/algo/analysis/woflan/place_invariants/utility.py new file mode 100644 index 0000000000000000000000000000000000000000..01f4ea963c66580d3289350cf38af36c463c7440 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/woflan/place_invariants/utility.py @@ -0,0 +1,192 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from copy import copy +from pm4py.util.lp import solver +from pm4py.util import constants +import warnings +import importlib.util + + +def removearray(L, arr): + """ + Remove an array from a given list and return the list with the removed element. + :param L: list object + :param arr: array that has to be removed + :return: list object without array + """ + ind = 0 + size = len(L) + while ind != size and not np.array_equal(L[ind], arr): + ind += 1 + if ind != size: + L.pop(ind) + else: + raise ValueError('array not found in list.') + +def transform_basis(basis, style=None): + """ + We construct a (I)LP to transform our basis into a set of vectors by using linear combination to fit certain styles/ + properties + :param basis: list of p-invariants. Commonly computed by the method 'compute_place_invariants' in + place_invariants.py + :param style: String that is used to construct certain constraints + At the moment, 'uniform' (all weights have value 0 or 1), and 'weighted' (all weights are >=0) are supported + :return: List of p-invariants that fits the style + """ + if style==None: + style='weighted' + + # First, we want to check if a vector of a basis only contains non-positve entries. If so, then we multiply the + # vector -1. + modified_base = [] + for vector in basis: + all_non_positiv = True + for entry in vector: + if entry > 0: + all_non_positiv = False + if all_non_positiv: + modified_base.append(-1 * vector) + else: + modified_base.append(vector) + #For uniform variants, it is necessary that the weight for a place is either 0 or 1. We collect the variants for + #which this condition does not hold. We also collect the variants for the weighted invariants the entry is <0. + to_modify = [] + + for vector in modified_base: + for entry in vector: + if ((entry < 0 or entry > 1) and style=='uniform') or ( entry < 0 and style=='weighted'): + to_modify.append(vector) + break + # if we have nothing to modify, we are done + if len(to_modify) > 0: + for vector in to_modify: + removearray(modified_base, vector) + set_B = range(0, len(modified_base)) + # start of the problem + """prob = pulp.LpProblem("linear_combination", pulp.LpMinimize) + X = pulp.LpVariable.dicts("x", set_B, cat='Integer') + y = pulp.LpVariable("y", cat='Integer', lowBound=1) + # add objective + prob += pulp.lpSum(X[i] for i in set_B) + if style=='uniform': + # variables for uniform. Therefore, the resulting weight can either be 0 or 1 + z = pulp.LpVariable.dicts("z", range(0, len(vector)), lowBound=0, upBound=1, cat='Integer') + # add constraints + for i in range(len(vector)): + prob += pulp.lpSum(X[j]*modified_base[j][i] for j in range(len(modified_base)))+y*vector[i]== z[i] + elif style=='weighted': + for i in range(len(vector)): + prob += pulp.lpSum(X[j]*modified_base[j][i] for j in range(len(modified_base)))+y*vector[i] >= 0 + prob.solve()""" + # problem is solved + + c = [1]*len(set_B) + [0] * (len(vector) + 1) + zeros = [0] * (len(set_B) + len(vector) + 1) + Aub = [] + bub = [] + Aeq = [] + beq = [] + first_constraint = copy(zeros) + first_constraint[len(set_B)] = -1 + Aub.append(first_constraint) + bub.append(-1) + for i in range(len(vector)): + this_row = copy(zeros) + this_row[len(set_B)] = list(vector[i])[0] + for j in range(len(modified_base)): + this_row[j] = list(modified_base[j][i])[0] + + if style == "uniform": + this_row[len(set_B) + 1 + i] = -1 + + if style == "uniform": + Aeq.append(this_row) + beq.append(0) + elif style == "weighted": + Aub.append([-x for x in this_row]) + bub.append(0) + for i in range(len(vector)): + last_constraint_1 = copy(zeros) + last_constraint_1[len(set_B) + 1 + i] = 1 + Aub.append(last_constraint_1) + bub.append(1) + last_constraint_2 = copy(zeros) + last_constraint_2[len(set_B) + 1 + i] = -1 + Aub.append(last_constraint_2) + bub.append(0) + + Aeq = np.asmatrix(Aeq).astype(np.float64) + beq = np.asmatrix(beq).transpose().astype(np.float64) + Aub = np.asmatrix(Aub).astype(np.float64) + bub = np.asmatrix(bub).transpose().astype(np.float64) + + if Aeq.shape[1] == 0: + Aeq = np.zeros((1, len(c))).astype(np.float64) + beq = np.zeros(1).transpose().astype(np.float64) + + if Aub.shape[1] == 0: + Aub = np.zeros((1, len(c))).astype(np.float64) + bub = np.zeros(1).transpose().astype(np.float64) + + # this is highly critical and LP solutions are not always correct :( + + proposed_solver = solver.SCIPY + if importlib.util.find_spec("pulp"): + proposed_solver = solver.PULP + else: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("solution from scipy may be unstable. Please install PuLP (pip install pulp) for fully reliable results.") + + sol = solver.apply(c, Aub, bub, Aeq, beq, variant=proposed_solver, parameters={"method": "revised simplex", "require_ilp": True}) + points = solver.get_points_from_sol(sol, variant=proposed_solver) + val = solver.get_prim_obj_from_sol(sol, variant=proposed_solver) + + if points is not None: + new_vector = np.zeros(len(vector)) + + if style == "weighted": + for i in range(len(new_vector)): + new_vector[i] = points[len(set_B)] * vector[i] + for j in range(len(modified_base)): + new_vector[i] = new_vector[i] + modified_base[j][i] * points[j] + elif style == "uniform": + for i in range(len(new_vector)): + new_vector[i] = points[len(set_B) + 1 + i] + + new_vector = np.array([new_vector]).T + modified_base.append(new_vector) + + return modified_base + + +def compute_uncovered_places(invariants, net): + """ + Compute a list of uncovered places for invariants of a given Petri Net. Note that there exists a separate algorithm + for s-components + :param invariants: list of invariants. Each invariants is a numpy-Array representation + :param net: Petri Net object of PM4Py + :return: List of uncovered place over all invariants + """ + place_list=sorted(list(net.places), key=lambda x: x.name) + unncovered_list=place_list.copy() + for invariant in invariants: + for index, value in enumerate(invariant): + if value != 0: + if place_list[index] in unncovered_list: + unncovered_list.remove(place_list[index]) + return unncovered_list diff --git a/pm4py/pm4py/algo/analysis/workflow_net/__init__.py b/pm4py/pm4py/algo/analysis/workflow_net/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e4f35da1b20c10adeae43f8966cb8ea563c93860 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/workflow_net/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.workflow_net import algorithm, variants diff --git a/pm4py/pm4py/algo/analysis/workflow_net/algorithm.py b/pm4py/pm4py/algo/analysis/workflow_net/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..d28410bc95e76c2abb30736101072824ea0349c6 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/workflow_net/algorithm.py @@ -0,0 +1,48 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.algo.analysis.workflow_net.variants import petri_net +from pm4py.util import exec_utils +from typing import Optional, Dict, Any +from pm4py.objects.petri_net.obj import PetriNet + + +class Variants(Enum): + PETRI_NET = petri_net + + +def apply(net: PetriNet, parameters: Optional[Dict[Any, Any]] = None, variant=Variants.PETRI_NET) -> bool: + """ + Checks if a Petri net is a workflow net + + Parameters + --------------- + net + Petri net + parameters + Parameters of the algorithm + variant + Variant of the algorithm, possibe values: + - Variants.PETRI_NET + + Returns + --------------- + boolean + Boolean value + """ + return exec_utils.get_variant(variant).apply(net, parameters=parameters) diff --git a/pm4py/pm4py/algo/analysis/workflow_net/variants/__init__.py b/pm4py/pm4py/algo/analysis/workflow_net/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7d24d6599409d159dc3140edab3dd42ec08c126b --- /dev/null +++ b/pm4py/pm4py/algo/analysis/workflow_net/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.analysis.workflow_net.variants import petri_net diff --git a/pm4py/pm4py/algo/analysis/workflow_net/variants/petri_net.py b/pm4py/pm4py/algo/analysis/workflow_net/variants/petri_net.py new file mode 100644 index 0000000000000000000000000000000000000000..72ea9328edcfcf67f5cf4f32cde7a9dfbf543d09 --- /dev/null +++ b/pm4py/pm4py/algo/analysis/workflow_net/variants/petri_net.py @@ -0,0 +1,101 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy + +from pm4py.objects.petri_net.utils import petri_utils as pn_utils +from pm4py.objects.petri_net.obj import PetriNet +from typing import Optional, Dict, Any +from pm4py.util import nx_utils + + +def _short_circuit_petri_net(net): + """ + Creates a short circuited Petri net, + whether an unique source place and sink place are there, + by connecting the sink with the source + + Parameters + --------------- + net + Petri net + + Returns + --------------- + boolean + Boolean value + """ + s_c_net = copy.deepcopy(net) + no_source_places = 0 + no_sink_places = 0 + sink = None + source = None + for place in s_c_net.places: + if len(place.in_arcs) == 0: + source = place + no_source_places += 1 + if len(place.out_arcs) == 0: + sink = place + no_sink_places += 1 + if (sink is not None) and (source is not None) and no_source_places == 1 and no_sink_places == 1: + # If there is one unique source and sink place, short circuit Petri Net is constructed + t_1 = PetriNet.Transition("short_circuited_transition", "short_circuited_transition") + s_c_net.transitions.add(t_1) + # add arcs in short-circuited net + pn_utils.add_arc_from_to(sink, t_1, s_c_net) + pn_utils.add_arc_from_to(t_1, source, s_c_net) + return s_c_net + else: + return None + + +def apply(net: PetriNet, parameters: Optional[Dict[Any, Any]] = None) -> bool: + """ + Checks if a Petri net is a workflow net + + Parameters + --------------- + net + Petri net + parameters + Parameters of the algorithm + + Returns + --------------- + boolean + Boolean value + """ + if parameters is None: + parameters = {} + + scnet = _short_circuit_petri_net(net) + if scnet is None: + return False + nodes = scnet.transitions | scnet.places + graph = nx_utils.DiGraph() + while len(nodes) > 0: + element = nodes.pop() + graph.add_node(element.name) + for in_arc in element.in_arcs: + graph.add_node(in_arc.source.name) + graph.add_edge(in_arc.source.name, element.name) + for out_arc in element.out_arcs: + graph.add_node(out_arc.target.name) + graph.add_edge(element.name, out_arc.target.name) + if nx_utils.is_strongly_connected(graph): + return True + else: + return False diff --git a/pm4py/pm4py/algo/anonymization/__init__.py b/pm4py/pm4py/algo/anonymization/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7c149e1dd09756f3189b0cfd483b6910980d1aa0 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.anonymization import trace_variant_query +import importlib.util + +if importlib.util.find_spec("diffprivlib"): + # import pripel only if the diffprivlib package is installed + from pm4py.algo.anonymization import pripel diff --git a/pm4py/pm4py/algo/anonymization/pripel/__init__.py b/pm4py/pm4py/algo/anonymization/pripel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b871616358a0728275eaf86a6b2b6ae73b3b4d02 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/pripel/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.anonymization.pripel import algorithm, variants, util diff --git a/pm4py/pm4py/algo/anonymization/pripel/algorithm.py b/pm4py/pm4py/algo/anonymization/pripel/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..5abb00758dcefd49cafd29474331673db93e2a20 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/pripel/algorithm.py @@ -0,0 +1,77 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from typing import Optional, Dict, Any, Union + +import pandas as pd + +from pm4py.algo.anonymization.pripel.variants import pripel +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils + + +class Variants(Enum): + PRIPEL = pripel + + +DEFAULT_VARIANT = Variants.PRIPEL + +VERSIONS = {Variants.PRIPEL} + + +def apply(log: Union[EventLog, pd.DataFrame], trace_variant_query: Union[EventLog, pd.DataFrame], epsilon: float, + variant=DEFAULT_VARIANT, + parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + PRIPEL (Privacy-preserving event log publishing with contextual information) is a framework to publish event logs + that fulfill differential privacy. PRIPEL ensures privacy on the level of individual cases instead of the complete + log. This way, contextual information as well as the long tail process behaviour are preserved, which enables the + application of a rich set of process analysis techniques. + + PRIPEL is described in: + Fahrenkrog-Petersen, S.A., van der Aa, H., Weidlich, M. (2020). PRIPEL: Privacy-Preserving Event Log Publishing + Including Contextual Information. In: Fahland, D., Ghidini, C., Becker, J., Dumas, M. (eds) Business Process + Management. BPM 2020. Lecture Notes in Computer Science(), vol 12168. Springer, Cham. + https://doi.org/10.1007/978-3-030-58666-9_7 + + + Parameters + ------------- + log + Event log + trace_variant_query + An anonymized trace variant distribution as an EventLog + epsilon + Strength of the differential privacy guarantee + variant + - Variants.PRIPEL + parameters + Parameters of the algorithm, including: + -Parameters.BLOCKLIST -> Some event logs contain attributes that are equivalent to a case id. For privacy reasons, such attributes must be deleted from the anonymized log. We handle such attributes with this set. + Returns + ------------ + anonymised_log + Anonymised event log + """ + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + trace_variant_query = log_converter.apply(trace_variant_query, variant=log_converter.Variants.TO_EVENT_LOG) + + return exec_utils.get_variant(variant).apply(log, trace_variant_query, epsilon, parameters=parameters) diff --git a/pm4py/pm4py/algo/anonymization/pripel/util/AttributeAnonymizer.py b/pm4py/pm4py/algo/anonymization/pripel/util/AttributeAnonymizer.py new file mode 100644 index 0000000000000000000000000000000000000000..e6943f0e5d3019208af61273694f91f6c59274ab --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/pripel/util/AttributeAnonymizer.py @@ -0,0 +1,250 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import warnings +from datetime import timedelta + +import diffprivlib.mechanisms as privacyMechanisms +from tqdm.auto import tqdm + + +class AttributeAnonymizer: + + def __init__(self): + self.__timestamp = "time:timestamp" + self.__ignorelist = self.__getIgnorelistOfAttributes() + self.__sensitivity = "sensitivity" + self.__max = "max" + self.__min = "min" + self.__infectionSuspected = list() + + def __getIgnorelistOfAttributes(self): + ignorelist = set() + ignorelist.add("concept:name") + ignorelist.add(self.__timestamp) + return ignorelist + + def __retrieveAttributeDomains(self, distributionOfAttributes, dataTypesOfAttributes): + domains = dict() + for attribute in dataTypesOfAttributes.keys(): + if dataTypesOfAttributes[attribute] in (int, float): + domain = dict() + domain[self.__max] = max(distributionOfAttributes[attribute]) + domain[self.__min] = min(distributionOfAttributes[attribute]) + domain[self.__sensitivity] = abs(domain[self.__max] - domain[self.__min]) + domains[attribute] = domain + return domains + + def __determineDataType(self, distributionOfAttributes): + dataTypesOfAttributes = dict() + for attribute in distributionOfAttributes.keys(): + if attribute not in self.__ignorelist: + dataTypesOfAttributes[attribute] = type(distributionOfAttributes[attribute][0]) + return dataTypesOfAttributes + + def __getPotentialValues(self, distributionOfAttributes, dataTypesOfAttributes): + potentialValues = dict() + for attribute in dataTypesOfAttributes: + if dataTypesOfAttributes[attribute] is str: + distribution = distributionOfAttributes[attribute] + values = set(distribution) + potentialValues[attribute] = values + return potentialValues + + def __setupBooleanMechanism(self, epsilon): + binaryMechanism = privacyMechanisms.Binary(epsilon=epsilon, value0=str(True), value1=str(False)) + return binaryMechanism + + def __anonymizeAttribute(self, value, mechanism): + isBoolean = False + isInt = False + if mechanism is not None: + if type(value) is bool: + isBoolean = True + value = str(value) + if type(value) is int: + isInt = True + value = mechanism.randomise(value) + if isBoolean: + value = eval(value) + if isInt: + value = int(round(value)) + return value + + def __addBooleanMechanisms(self, epsilon, mechanisms, dataTypesOfAttributes): + binaryMechanism = self.__setupBooleanMechanism(epsilon) + for attribute in dataTypesOfAttributes.keys(): + if dataTypesOfAttributes[attribute] is bool: + mechanisms[attribute] = binaryMechanism + return mechanisms + + def __addNumericMechanisms(self, epsilon, mechanisms, domains): + for attribute in domains.keys(): + sensitivity = domains[attribute][self.__sensitivity] + lowerDomainBound = domains[attribute][self.__min] + upperDomainBound = domains[attribute][self.__max] + laplaceMechanism = privacyMechanisms.LaplaceBoundedDomain(epsilon=epsilon, sensitivity=sensitivity, + lower=lowerDomainBound, upper=upperDomainBound) + mechanisms[attribute] = laplaceMechanism + return mechanisms + + def __setupUniformUtilityList(self, potentialValues, attribute): + if len(potentialValues) >= 2000: + warnings.warn( + '\nThe attribute ' + attribute + ' has ' + str( + len(potentialValues)) + ' different values in the log.\nTo anonymize this attribute the exponential mechanism for achieving differential privacy on categorical data must work with a list that is ' + str( + len(potentialValues) * len(potentialValues)) + ' elements long.', RuntimeWarning, 2) + utilityList = [] + for x in potentialValues: + for y in potentialValues: + utilityList.append([x, y, 1]) + return utilityList + + def __addCategoricalMechanisms(self, epsilon, mechanisms, dataTypesOfAttributes, potentialValues): + for attribute in dataTypesOfAttributes.keys(): + if dataTypesOfAttributes[attribute] is str and attribute != "variant": + utilityList = self.__setupUniformUtilityList(potentialValues[attribute], attribute) + if len(utilityList) > 0: + exponentialMechanism = privacyMechanisms.ExponentialCategorical(epsilon=epsilon, + utility_list=utilityList) + mechanisms[attribute] = exponentialMechanism + return mechanisms + + def __getTimestamp(self, trace, eventNr, allTimestamps): + if eventNr <= 0: + return min(allTimestamps) + elif eventNr >= len(trace): + return max(allTimestamps) + else: + return trace[eventNr][self.__timestamp] + + def __anonymizeTimeStamps(self, timestamp, previousTimestamp, nextTimestamp, sensitivity, minTimestampDifference, + mechanism): + upperPotentialDifference = (nextTimestamp - previousTimestamp).total_seconds() + currentDifference = (timestamp - previousTimestamp).total_seconds() + if upperPotentialDifference < 0: + upperPotentialDifference = currentDifference + mechanism.sensitivity = sensitivity + mechanism.lower = minTimestampDifference + mechanism.upper = upperPotentialDifference + timestamp = previousTimestamp + timedelta(seconds=currentDifference) + return timestamp + + def __setupMechanisms(self, epsilon, distributionOfAttributes, lower, upper, sensitivity): + mechanisms = dict() + dataTypesOfAttributes = self.__determineDataType(distributionOfAttributes) + mechanisms = self.__addBooleanMechanisms(epsilon, mechanisms, dataTypesOfAttributes) + domains = self.__retrieveAttributeDomains(distributionOfAttributes, dataTypesOfAttributes) + mechanisms = self.__addNumericMechanisms(epsilon, mechanisms, domains) + potentialValues = self.__getPotentialValues(distributionOfAttributes, dataTypesOfAttributes) + mechanisms = self.__addCategoricalMechanisms(epsilon, mechanisms, dataTypesOfAttributes, potentialValues) + mechanisms[self.__timestamp] = privacyMechanisms.LaplaceBoundedDomain(epsilon=epsilon, lower=lower, upper=upper, + sensitivity=sensitivity) + return mechanisms + + def __getTimestampDomain(self, trace, eventNr, distributionOfTimestamps, allTimestampDifferences): + timestampDomain = self.__domainTimestampData.get(trace[eventNr - 1]["concept:name"], None) + if timestampDomain is not None: + timestampDomain = timestampDomain.get(trace[eventNr]["concept:name"], None) + if timestampDomain is None: + timestampDistribution = None + if eventNr != 0: + dictTimestampDifference = distributionOfTimestamps.get(trace[eventNr - 1]["concept:name"], None) + if dictTimestampDifference is not None: + timestampDistribution = dictTimestampDifference.get(trace[eventNr]["concept:name"], None) + if timestampDistribution is None: + maxTimestampDifference = self.__maxAllTimestampDifferences + minTimestampDifference = self.__minAllTimestampDifferences + else: + maxTimestampDifference = max(timestampDistribution) + minTimestampDifference = min(timestampDistribution) + sensitivity = abs(maxTimestampDifference - minTimestampDifference).total_seconds() + sensitivity = max(sensitivity, 1.0) + timestampDomain = dict() + timestampDomain["sensitivity"] = sensitivity + timestampDomain["minTimeStampInLog"] = min(allTimestampDifferences).total_seconds() + if self.__domainTimestampData.get(trace[eventNr - 1]["concept:name"], None) is None: + self.__domainTimestampData[trace[eventNr - 1]["concept:name"]] = dict() + self.__domainTimestampData[trace[eventNr - 1]["concept:name"]][ + trace[eventNr]["concept:name"]] = timestampDomain + return timestampDomain["sensitivity"], timestampDomain["minTimeStampInLog"] + + def __performTimestampShift(self, trace, mechanism): + beginOfTrace = trace[0][self.__timestamp] + deltaBeginOfLogToTrace = (self.__minAllTimestamp - beginOfTrace).total_seconds() + endOfTrace = trace[-1][self.__timestamp] + traceDuration = (endOfTrace - beginOfTrace).total_seconds() + deltaEndOfLogToTrace = (self.__maxAllTimestamp - beginOfTrace).total_seconds() + upperBound = deltaEndOfLogToTrace - traceDuration + if deltaBeginOfLogToTrace >= upperBound: + upperBound = abs((self.__maxAllTimestamp - beginOfTrace).total_seconds()) + mechanism.lower = deltaBeginOfLogToTrace + mechanism.upper = upperBound + timestampShift = timedelta(seconds=mechanism.randomise(0.0)) + for event in trace: + event[self.__timestamp] = event[self.__timestamp] + timestampShift + + def anonymize(self, log, distributionOfAttributes, epsilon, allTimestampDifferences, allTimestamps): + self.__maxAllTimestampDifferences = max(allTimestampDifferences) + self.__minAllTimestampDifferences = min(allTimestampDifferences) + self.__maxAllTimestamp = max(allTimestamps) + self.__minAllTimestamp = min(allTimestamps) + sensitivity = (self.__maxAllTimestamp - self.__minAllTimestamp).total_seconds() + # lower and upper values are just for initialisation, they get later overwritten in __anonymizeTimeStamps + # and __performTimestampShift + lower = 0 + upper = 1 + timeShiftMechanism = privacyMechanisms.LaplaceBoundedDomain(epsilon=epsilon, sensitivity=sensitivity, + lower=lower, upper=upper) + mechanisms = self.__setupMechanisms(epsilon, distributionOfAttributes, lower, upper, sensitivity) + self.__domainTimestampData = dict() + i = 0 + progress = tqdm(total=len(log), desc="attribute anonymization, anonymized traces :: ") + for trace in log: + ''' + # trace attribute anonymization + if not isinstance(trace, list): + for attribute in trace.attributes.keys(): + if (attribute != 'variant' and attribute != 'variant-index'): + trace.attributes[attribute] = self.__anonymizeAttribute(trace.attributes[attribute], + mechanisms.get(attribute, None)) + ''' + # event attribute anonymization + for eventNr in range(0, len(trace)): + event = trace[eventNr] + for attribute in event.keys(): + if attribute != self.__timestamp: + event[attribute] = self.__anonymizeAttribute(event[attribute], mechanisms.get(attribute, None)) + if attribute == "InfectionSuspected" and eventNr == 0: + self.__infectionSuspected.append(event[attribute]) + elif eventNr > 0: + previousTimestamp = self.__getTimestamp(trace, eventNr - 1, allTimestamps) + nextTimestamp = self.__getTimestamp(trace, eventNr + 1, allTimestamps) + sensitivity, minTimestampDifference = self.__getTimestampDomain(trace, eventNr, + distributionOfAttributes[ + self.__timestamp], + allTimestampDifferences) + event[attribute] = self.__anonymizeTimeStamps(event[attribute], previousTimestamp, + nextTimestamp, sensitivity, + minTimestampDifference, + mechanisms[self.__timestamp]) + elif eventNr == 0: + self.__performTimestampShift(trace, timeShiftMechanism) + i = i + 1 + progress.update() + progress.close() + del progress + return log diff --git a/pm4py/pm4py/algo/anonymization/pripel/util/TraceMatcher.py b/pm4py/pm4py/algo/anonymization/pripel/util/TraceMatcher.py new file mode 100644 index 0000000000000000000000000000000000000000..625ec3a87ee72a00b83bb03712e5e918d601dc8f --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/pripel/util/TraceMatcher.py @@ -0,0 +1,281 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import random +import sys +from collections import deque + +import numpy as np +from scipy.optimize import linear_sum_assignment +from tqdm.auto import tqdm + +from pm4py.algo.anonymization.pripel.util.trace_levenshtein import trace_levenshtein +from pm4py.objects.log import obj + + +class TraceMatcher: + def __init__(self, tv_query_log, log): + self.__timestamp = "time:timestamp" + self.__allTimestamps = list() + self.__allTimeStampDifferences = list() + self.__distanceMatrix = dict() + self.__trace_variants_query = self.__addTraceToAttribute(tv_query_log) + self.__trace_variants_log = self.__addTraceToAttribute(log) + attributeIgnorelist = self.__getIgnorelistOfAttributes() + self.__distributionOfAttributes, self.__eventStructure = self.__getDistributionOfAttributesAndEventStructure( + log, attributeIgnorelist) + self.__query_log = tv_query_log + self.__log = log + + def __addTraceToAttribute(self, log): + trace_variants = dict() + for trace in log: + variant = "" + for event in trace: + variant = variant + "@" + event["concept:name"] + trace.attributes["variant"] = variant + traceSet = trace_variants.get(variant, set()) + traceSet.add(trace) + trace_variants[variant] = traceSet + return trace_variants + + def __getIgnorelistOfAttributes(self): + ignorelist = set() + ignorelist.add("concept:name") + ignorelist.add("variant") + ignorelist.add(self.__timestamp) + return ignorelist + + def __handleVariantsWithSameCount(self, variants, traceMatching): + for variant in variants: + for trace in self.__trace_variants_query[variant]: + traceMatching[trace.attributes["concept:name"]] = self.__trace_variants_log[variant].pop() + del self.__trace_variants_log[variant] + del self.__trace_variants_query[variant] + + def __handleVariantsUnderrepresentedInQuery(self, variants, traceMatching): + for variant in variants: + if variant in self.__trace_variants_query: + for trace in self.__trace_variants_query.get(variant, list()): + traceMatching[trace.attributes["concept:name"]] = self.__trace_variants_log[variant].pop() + del self.__trace_variants_query[variant] + + def __handleVariantsOverrepresentedInQuery(self, variants, traceMatching): + for variant in variants: + for trace in self.__trace_variants_log[variant]: + traceFromQuery = self.__trace_variants_query[variant].pop() + traceMatching[traceFromQuery.attributes["concept:name"]] = trace + del self.__trace_variants_log[variant] + + def __getDistanceVariants(self, variant1, variant2): + if variant1 not in self.__distanceMatrix: + self.__distanceMatrix[variant1] = dict() + if variant2 not in self.__distanceMatrix[variant1]: + distance = trace_levenshtein(variant1, variant2) + self.__distanceMatrix[variant1][variant2] = distance + else: + distance = self.__distanceMatrix[variant1][variant2] + return distance + + def __findCLosestVariantInLog(self, variant, log): + closestVariant = None + closestDistance = sys.maxsize + for comparisonVariant in log.keys(): + distance = self.__getDistanceVariants(variant, comparisonVariant) + if distance < closestDistance: + closestVariant = comparisonVariant + closestDistance = distance + return closestVariant + + def __findOptimalMatches(self): + rows = list() + progress = tqdm(total=len(self.__query_log), desc="matching query traces, matched traces :: ") + for traceQuery in self.__query_log: + row = list() + for traceLog in self.__log: + row.append(self.__getDistanceVariants(traceQuery.attributes["variant"], traceLog.attributes["variant"])) + rows.append(row) + progress.update() + progress.close() + del progress + distanceMatrix = np.array(rows) + row_ind, col_ind = linear_sum_assignment(distanceMatrix) + traceMatching = dict() + for (traceQueryPos, traceLogPos) in zip(row_ind, col_ind): + traceMatching[self.__query_log[traceQueryPos].attributes["concept:name"]] = self.__log[traceLogPos] + return traceMatching + + def __matchTraces(self, traceMatching): + for variant in self.__trace_variants_query.keys(): + closestVariant = self.__findCLosestVariantInLog(variant, self.__trace_variants_log) + for trace in self.__trace_variants_query[variant]: + traceMatching[trace.attributes["concept:name"]] = self.__trace_variants_log[closestVariant].pop() + if not self.__trace_variants_log[closestVariant]: + del self.__trace_variants_log[closestVariant] + if self.__trace_variants_log: + closestVariant = self.__findCLosestVariantInLog(variant, self.__trace_variants_log) + else: + return + + def __getTraceMatching(self): + traceMatching = dict() + variantsWithSameCount = set() + variantsUnderepresentedInQuery = set() + variantsOverepresentedInQuery = set() + for variant in self.__trace_variants_log.keys(): + if len(self.__trace_variants_log[variant]) == len(self.__trace_variants_query.get(variant, set())): + variantsWithSameCount.add(variant) + elif len(self.__trace_variants_log[variant]) > len(self.__trace_variants_query.get(variant, set())) and len( + self.__trace_variants_query.get(variant, set())) != set(): + variantsUnderepresentedInQuery.add(variant) + elif len(self.__trace_variants_log[variant]) < len(self.__trace_variants_query.get(variant, 0)): + variantsOverepresentedInQuery.add(variant) + self.__handleVariantsWithSameCount(variantsWithSameCount, traceMatching) + self.__handleVariantsUnderrepresentedInQuery(variantsUnderepresentedInQuery, traceMatching) + self.__handleVariantsOverrepresentedInQuery(variantsOverepresentedInQuery, traceMatching) + self.__matchTraces(traceMatching) + return traceMatching + + def __resolveTrace(self, traceInQuery, correspondingTrace, distributionOfAttributes): + eventStacks = self.__transformTraceInEventStack(correspondingTrace) + previousEvent = None + # add trace attributes from the matched trace to the query trace + ''' + if not isinstance(correspondingTrace, list): + for key in correspondingTrace.attributes: + if (key != 'variant' and key != 'variant-index'): + traceInQuery.attributes[key] = correspondingTrace.attributes[key] + ''' + for eventNr in range(0, len(traceInQuery)): + currentEvent = traceInQuery[eventNr] + activity = currentEvent["concept:name"] + latestTimeStamp = self.__getLastTimestampTraceResolving(traceInQuery, eventNr) + if activity in eventStacks: + currentEvent = self.__getEventAndUpdateFromEventStacks(activity, eventStacks) + if currentEvent[self.__timestamp] < latestTimeStamp: + currentEvent[self.__timestamp] = self.__getNewTimeStamp(previousEvent, currentEvent, eventNr, + distributionOfAttributes) + else: + currentEvent = self.__createRandomNewEvent(currentEvent, activity, distributionOfAttributes, + previousEvent, eventNr) + traceInQuery[eventNr] = currentEvent + previousEvent = currentEvent + return traceInQuery + + def __getEventAndUpdateFromEventStacks(self, activity, eventStacks): + event = eventStacks[activity].popleft() + if not eventStacks[activity]: + del eventStacks[activity] + return event + + def __getLastTimestampTraceResolving(self, trace, eventNr): + if eventNr == 0: + latestTimeStamp = trace[eventNr][self.__timestamp] + else: + latestTimeStamp = trace[eventNr - 1][self.__timestamp] + return latestTimeStamp + + def __transformTraceInEventStack(self, trace): + eventStacks = dict() + for event in trace: + stack = eventStacks.get(event["concept:name"], deque()) + stack.append(event) + eventStacks[event["concept:name"]] = stack + return eventStacks + + def __createRandomNewEvent(self, event, activity, distributionOfAttributes, previousEvent, eventNr): + for attribute in self.__eventStructure[activity]: + if attribute in distributionOfAttributes and attribute not in event and attribute != self.__timestamp: + event[attribute] = random.choice(distributionOfAttributes[attribute]) + elif attribute == self.__timestamp: + event[self.__timestamp] = self.__getNewTimeStamp(previousEvent, event, eventNr, + distributionOfAttributes) + return event + + def __getNewTimeStamp(self, previousEvent, currentEvent, eventNr, distributionOfAttributes): + if eventNr == 0: + timestamp = random.choice(self.__allTimestamps) + else: + if previousEvent["concept:name"] in distributionOfAttributes[self.__timestamp]: + timestamp = previousEvent[self.__timestamp] + random.choice( + distributionOfAttributes[self.__timestamp][previousEvent["concept:name"]].get( + currentEvent["concept:name"], self.__allTimeStampDifferences)) + else: + timestamp = previousEvent[self.__timestamp] + random.choice(self.__allTimeStampDifferences) + return timestamp + + def __resolveTraceMatching(self, traceMatching, distributionOfAttributes, fillUp): + log = obj.EventLog() + for trace in self.__query_log: + traceID = trace.attributes["concept:name"] + if fillUp or traceID in traceMatching: + matchedTrace = self.__resolveTrace(trace, traceMatching.get(traceID, list()), distributionOfAttributes) + log.append(matchedTrace) + return log + + def __handleAttributesOfDict(self, dictOfAttributes, distributionOfAttributes, attributeIgnorelist, + previousEvent=None): + for attribute in dictOfAttributes.keys(): + if attribute not in attributeIgnorelist: + distribution = distributionOfAttributes.get(attribute, list()) + distribution.append(dictOfAttributes[attribute]) + distributionOfAttributes[attribute] = distribution + elif attribute == self.__timestamp and previousEvent is not None: + self.__handleTimeStamp(distributionOfAttributes, previousEvent, dictOfAttributes) + + def __handleTimeStamp(self, distributionOfAttributes, previousEvent, currentEvent): + timeStampsDicts = distributionOfAttributes.get(self.__timestamp, dict()) + activityDict = timeStampsDicts.get(previousEvent["concept:name"], dict()) + timeStampsDicts[previousEvent["concept:name"]] = activityDict + distribution = activityDict.get(currentEvent["concept:name"], list()) + timeStampDifference = currentEvent[self.__timestamp] - previousEvent[self.__timestamp] + distribution.append(timeStampDifference) + activityDict[currentEvent["concept:name"]] = distribution + distributionOfAttributes[self.__timestamp] = timeStampsDicts + self.__allTimestamps.append(currentEvent[self.__timestamp]) + self.__allTimeStampDifferences.append(timeStampDifference) + + def __getDistributionOfAttributesAndEventStructure(self, log, attributeIgnorelist): + distributionOfAttributes = dict() + eventStructure = dict() + for trace in log: + #self.__handleAttributesOfDict(trace.attributes, distributionOfAttributes, attributeIgnorelist) + previousEvent = None + currentEvent = None + for eventNr in range(0, len(trace)): + if currentEvent is not None: + previousEvent = currentEvent + currentEvent = trace[eventNr] + self.__handleAttributesOfDict(currentEvent, distributionOfAttributes, attributeIgnorelist, previousEvent) + if not currentEvent["concept:name"] in eventStructure: + attributesOfEvent = set(currentEvent.keys()) + attributesOfEvent.remove("concept:name") + eventStructure[currentEvent["concept:name"]] = attributesOfEvent + return distributionOfAttributes, eventStructure + + def matchQueryToLog(self, fillUp=True, greedy=False): + if greedy: + traceMatching = self.__getTraceMatching() + else: + traceMatching = self.__findOptimalMatches() + matched_log = self.__resolveTraceMatching(traceMatching, self.__distributionOfAttributes, fillUp) + return matched_log + + def getAttributeDistribution(self): + return self.__distributionOfAttributes + + def getTimeStampData(self): + return self.__allTimestamps, self.__allTimeStampDifferences \ No newline at end of file diff --git a/pm4py/pm4py/algo/anonymization/pripel/util/__init__.py b/pm4py/pm4py/algo/anonymization/pripel/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8eb04b232ecd09c0d3d93354c03bed04d302c3a8 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/pripel/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.anonymization.pripel.util import trace_levenshtein, TraceMatcher, AttributeAnonymizer diff --git a/pm4py/pm4py/algo/anonymization/pripel/util/trace_levenshtein.py b/pm4py/pm4py/algo/anonymization/pripel/util/trace_levenshtein.py new file mode 100644 index 0000000000000000000000000000000000000000..8afc8e765fc03e433ecd67b7ec145a6ab282179e --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/pripel/util/trace_levenshtein.py @@ -0,0 +1,50 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +# This algorithm was copied at 16/Nov/2018 from +# https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Python and applied to activity +# sequences +delimiter = "@" + + +def length(s): + return s.count(delimiter) + 1 + + +def enumerateSequence(s): + list = s.split(delimiter) + return enumerate(list, 0) + + +def trace_levenshtein(s1, s2): + if length(s1) < length(s2): + return trace_levenshtein(s2, s1) + + # len(s1) >= len(s2) + if length(s2) == 0: + return length(s1) + + previous_row = range(length(s2) + 1) + for i, c1 in enumerateSequence(s1): + current_row = [i + 1] + for j, c2 in enumerateSequence(s2): + insertions = previous_row[ + j + 1] + 1 + deletions = current_row[j] + 1 + substitutions = previous_row[j] + (c1 != c2) + current_row.append(min(insertions, deletions, substitutions)) + previous_row = current_row + return previous_row[-1] diff --git a/pm4py/pm4py/algo/anonymization/pripel/variants/__init__.py b/pm4py/pm4py/algo/anonymization/pripel/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..553bca43ad4ff326783562871f9c7e86af0ebed4 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/pripel/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.anonymization.pripel.variants import pripel diff --git a/pm4py/pm4py/algo/anonymization/pripel/variants/pripel.py b/pm4py/pm4py/algo/anonymization/pripel/variants/pripel.py new file mode 100644 index 0000000000000000000000000000000000000000..13516c810dd78c2afcf5da14366a409c10a81101 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/pripel/variants/pripel.py @@ -0,0 +1,119 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union + +import pandas as pd + +from pm4py.algo.anonymization.pripel.util.AttributeAnonymizer import AttributeAnonymizer +from pm4py.algo.anonymization.pripel.util.TraceMatcher import TraceMatcher +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils + + +class Parameters(Enum): + BLOCKLIST = "blocklist" + + +def apply_pripel(log, tv_query_log, epsilon, blocklist): + if (len(tv_query_log) == 0): + raise ValueError( + "Pruning parameter k is too high. The result of the trace variant query is empty. At least k traces must appear " + "in a noisy variant count to be part of the result of the query.") + for trace in log: + delTraceAttributes = set() + for attribute in trace.attributes.keys(): + if pd.isnull(trace.attributes[attribute]): + delTraceAttributes.add(attribute) + if blocklist is not None: + if attribute in blocklist: + delTraceAttributes.add(attribute) + for attribute in delTraceAttributes: + trace.attributes.pop(attribute) + for event in trace: + delAttributes = set() + for attribute in event.keys(): + if blocklist is not None: + if attribute in blocklist: + delAttributes.add(attribute) + if pd.isnull(event[attribute]): + delAttributes.add(attribute) + if not isinstance(event[attribute], (float, str, int, bool)) and attribute != "time:timestamp": + delAttributes.add(attribute) + for attribute in delAttributes: + event._dict.pop(attribute) + + traceMatcher = TraceMatcher(tv_query_log, log) + matchedLog = traceMatcher.matchQueryToLog() + + distributionOfAttributes = traceMatcher.getAttributeDistribution() + occurredTimestamps, occurredTimestampDifferences = traceMatcher.getTimeStampData() + + attributeAnonymizer = AttributeAnonymizer() + anonymizedLog = attributeAnonymizer.anonymize(matchedLog, distributionOfAttributes, epsilon, + occurredTimestampDifferences, + occurredTimestamps) + for i in range(len(anonymizedLog)): + anonymizedLog[i].attributes['concept:name'] = str(i) + anonymizedLog[i].attributes.pop('variant', None) + + anonymizedLog = log_converter.apply(anonymizedLog, variant=log_converter.Variants.TO_DATA_FRAME) + + return anonymizedLog + + +def apply(log: Union[EventLog, pd.DataFrame], traceVariantQuery: Union[EventLog, pd.DataFrame], epsilon: float, + parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + PRIPEL (Privacy-preserving event log publishing with contextual information) is a framework to publish event logs + that fulfill differential privacy. PRIPEL ensures privacy on the level of individual cases instead of the complete + log. This way, contextual information as well as the long tail process behaviour are preserved, which enables the + application of a rich set of process analysis techniques. + + PRIPEL is described in: + Fahrenkrog-Petersen, S.A., van der Aa, H., Weidlich, M. (2020). PRIPEL: Privacy-Preserving Event Log Publishing + Including Contextual Information. In: Fahland, D., Ghidini, C., Becker, J., Dumas, M. (eds) Business Process + Management. BPM 2020. Lecture Notes in Computer Science(), vol 12168. Springer, Cham. + https://doi.org/10.1007/978-3-030-58666-9_7 + + + + Parameters + ------------- + log + Event log + traceVariantQuery + An anonymized trace variant distribution as an EventLog + epsilon + Strength of the differential privacy guarantee + parameters + Parameters of the algorithm, including: + -Parameters.BLOCKLIST -> Some event logs contain attributes that are equivalent to a case id. For privacy + reasons, such attributes must be deleted from the anonymized log. We handle such attributes with this list. + Returns + ------------ + anonymised_log + Anonymised event log + """ + + if parameters is None: + parameters = {} + + blocklist = exec_utils.get_param_value(Parameters.BLOCKLIST, parameters, None) + + return apply_pripel(log, traceVariantQuery, epsilon, blocklist) diff --git a/pm4py/pm4py/algo/anonymization/trace_variant_query/__init__.py b/pm4py/pm4py/algo/anonymization/trace_variant_query/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..32f503b88732da86139d7eec69f31d3b8e918249 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/trace_variant_query/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.anonymization.trace_variant_query import algorithm, variants, util diff --git a/pm4py/pm4py/algo/anonymization/trace_variant_query/algorithm.py b/pm4py/pm4py/algo/anonymization/trace_variant_query/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..662017cc6dd2b695498cde76a0fe5644238b8f64 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/trace_variant_query/algorithm.py @@ -0,0 +1,86 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union + +import pandas as pd + +from pm4py.algo.anonymization.trace_variant_query.variants import laplace, sacofa # , sapa +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils + + +class Variants(Enum): + LAPLACE = laplace + SACOFA = sacofa + + +DEFAULT_VARIANT = Variants.SACOFA + + +def apply(log: Union[EventLog, pd.DataFrame], variant=DEFAULT_VARIANT, + parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + Applies a trace variant query to an event log. A trace variant query returns an event log that + captures trace variants and their frequencies in a differentially private manner, in other words it returns an + anonymized trace variant distribution. Such a step is essential, given that even the publication of activity + sequences from an event log, i.e., with all attribute values and timestamps removed, can be sufficient to link the + identity of individuals to infrequent activity sequences. + + Variant Laplace is described in: + Mannhardt, F., Koschmider, A., Baracaldo, N. et al. Privacy-Preserving Process Mining. Bus Inf Syst Eng 61, + 595–614 (2019). https://doi.org/10.1007/s12599-019-00613-3 + + Variant SaCoFa is described in: + S. A. Fahrenkog-Petersen, M. Kabierski, F. Rösel, H. van der Aa and M. Weidlich, "SaCoFa: Semantics-aware + Control-flow Anonymization for Process Mining," 2021 3rd International Conference on Process Mining (ICPM), 2021, + pp. 72-79, doi: 10.1109/ICPM53251.2021.9576857. + + Variant DF-Laplace: + + Parameters + ------------- + log + Log + variant + Variant of the algorithm to apply, possible values: + -Variants.LAPLACE + -Variants.SACOFA + parameters + Parameters of the algorithm, including: + -Parameters.EPSILON -> Strength of the differential privacy guarantee + -Parameters.K -> Maximum prefix length of considered traces for the trace-variant-query + -Parameters.P -> Pruning parameter of the trace-variant-query. Of a noisy trace variant, at least P traces + must appear. Otherwise, the trace variant and its traces won't be part of the result of the + trace variant query. + Returns + -------------- + anonymized_trace_variant_distribution + An anonymized trace variant distribution as an EventLog + """ + if parameters is None: + parameters = {} + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + tvq_log = exec_utils.get_variant(variant).apply(log, parameters=parameters) + if (len(tvq_log) == 0): + raise ValueError( + "The pruning parameter p is probably too high. The result of the trace variant query is empty. Of a noisy trace " + "variant, at least p traces must appear. Otherwise, the trace variant and its traces won't be part of the " + "result of the trace variant query.") + tvq_log = log_converter.apply(tvq_log, variant=log_converter.Variants.TO_DATA_FRAME) + return tvq_log diff --git a/pm4py/pm4py/algo/anonymization/trace_variant_query/util/__init__.py b/pm4py/pm4py/algo/anonymization/trace_variant_query/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..93229a20b41703d419c3a50303c36ba15d115e4e --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/trace_variant_query/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.anonymization.trace_variant_query.util import behavioralAppropriateness, exp_mech, util diff --git a/pm4py/pm4py/algo/anonymization/trace_variant_query/util/behavioralAppropriateness.py b/pm4py/pm4py/algo/anonymization/trace_variant_query/util/behavioralAppropriateness.py new file mode 100644 index 0000000000000000000000000000000000000000..72ecdbbddbcf1b3aa7826d69103d25be69f7bf72 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/trace_variant_query/util/behavioralAppropriateness.py @@ -0,0 +1,178 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +caseIDKey = "Case ID" +activityKey = "Activity" +durationKey = "Complete Timestamp" + + +def getFollowersOfEventInTrace(event, trace): + followers = list() + if event not in trace: + return followers + eventIndex = trace.index(event) + restTrace = trace[eventIndex + 1:] + for e in restTrace: + if e not in followers: + followers.append(e) + return followers + + +def getFollowsRelations(allEvents, traces): + followsMatrix = {} + alwaysCtr = 0 + sometimesCtr = len(allEvents) * len(allEvents) # In the beginning, all relations are 'Sometimes'. + neverCtr = 0 + + for event in allEvents: + alwaysFollows = allEvents.copy() + neverFollows = allEvents.copy() + + for eClmn in allEvents: + followsMatrix[(event, eClmn)] = 'S' + + for trace in traces: + if event in trace: + followers = getFollowersOfEventInTrace(event=event, trace=trace) + for f in followers: + if f in neverFollows: + neverFollows.remove(f) + + for e in allEvents: + if e not in followers: + if e in alwaysFollows: + alwaysFollows.remove(e) + + for a in alwaysFollows: + followsMatrix[(event, a)] = 'A' + sometimesCtr -= 1 + alwaysCtr += 1 + + for n in neverFollows: + followsMatrix[(event, n)] = 'N' + sometimesCtr -= 1 + neverCtr += 1 + + return followsMatrix + + +def getPrecedesRelations(allEvents, traces): + precedesMatrix = {} + alwaysCtr = 0 + sometimesCtr = len(allEvents) * len(allEvents) # In the beginning, all relations are 'Sometimes'. + neverCtr = 0 + + for event in allEvents: + alwaysPrecedes = allEvents.copy() + neverPrecedes = allEvents.copy() + + for eClmn in allEvents: # eClmn -> event in respective column + precedesMatrix[(event, eClmn)] = 'S' + + for trace in traces: + if event in trace: + predecessors = getPredecessorsOfEventInTrace(event=event, trace=trace) + for p in predecessors: + if p in neverPrecedes: + neverPrecedes.remove(p) + + for e in allEvents: + if e not in predecessors: + if e in alwaysPrecedes: + alwaysPrecedes.remove(e) + + for a in alwaysPrecedes: + precedesMatrix[(event, a)] = 'A' + sometimesCtr -= 1 + alwaysCtr += 1 + + for n in neverPrecedes: + precedesMatrix[(event, n)] = 'N' + sometimesCtr -= 1 + neverCtr += 1 + + return precedesMatrix + + +def getPredecessorsOfEventInTrace(event, trace): + predecessors = list() + if event not in trace: + return predecessors + + eventIndex = max(loc for loc, val in enumerate(trace) if val == event) + restTrace = trace[:eventIndex] + + for e in restTrace: + if e not in predecessors: + predecessors.append(e) + + return predecessors + + +def getBARelations(traces, events): + followsRelations = getFollowsRelations(allEvents=events, traces=traces) + precedesRelations = getPrecedesRelations(allEvents=events, traces=traces) + + return followsRelations, precedesRelations + + +# checks whether a prefix conforms to the log overall Behavioral Appropriateness given by precedes and follows Relations +# return [true/false] +def getBAViolations(allEvents, followsRelations, precedesRelations, prefix, TRACE_END): + violationsCtr = 0 + logEvents = allEvents.copy() + logEvents.remove(TRACE_END) # all events except for TRACE_END. used to look up 'always follows' relations + localPrefix = list() # prefix where TRACE_END is removed. used to obtain followers and predecessors of events contained + prefixEvents = list() # all events in the prefix (except for TRACE_END) + for e in prefix: + if e != TRACE_END: + localPrefix.append(e) + if e not in prefixEvents: + prefixEvents.append(e) + + followersDict = dict() + for event in prefixEvents: # get followers for each event in the prefix and store them + followersOfEvent = getFollowersOfEventInTrace(event=event, trace=localPrefix) + followersDict[event] = followersOfEvent + + predecessorsDict = dict() + for event in prefixEvents: # get predecessors for each event in the prefix and store them + predecessorsOfEvent = getPredecessorsOfEventInTrace(event=event, trace=localPrefix) + predecessorsDict[event] = predecessorsOfEvent + + for e1 in prefixEvents: + for follower in followersDict[e1]: # check if 'never follows' relations are violated + if followsRelations[(e1, follower)] == 'N': + violationsCtr += 1 + + for predecessor in predecessorsDict[e1]: # check if 'never precedes' relations are violated + if precedesRelations[(e1, predecessor)] == 'N': + violationsCtr += 1 + + for e2 in logEvents: # to check if 'always follows' is violated, all events must be checked + if TRACE_END in prefix: # no TRACE_END in prefix -> event saving the always follows relation could follow sometime later + if followsRelations[ + (e1, e2)] == 'A': # followsRelations[(e1, e2)] == 'A' -> if e1 in trace, e2 always follows + if e2 not in followersDict[e1]: + violationsCtr += 1 + + if precedesRelations[ + (e1, e2)] == 'A': # precedesRelations[(e1, e2)] == 'A' -> if e1 in trace, e2 always precedes + if e2 not in predecessorsDict[ + e1]: # if e1 in trace and e2 does not precede right now it won't ever do -> no need to wait for TRACE_END + violationsCtr += 1 + + return violationsCtr # if no {always/sometimes} {follows/precedes} relation is violated, return 0 diff --git a/pm4py/pm4py/algo/anonymization/trace_variant_query/util/exp_mech.py b/pm4py/pm4py/algo/anonymization/trace_variant_query/util/exp_mech.py new file mode 100644 index 0000000000000000000000000000000000000000..b08b852114521cb81594781752c5acad6a85cd39 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/trace_variant_query/util/exp_mech.py @@ -0,0 +1,38 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +import numpy as np + +GS_SCORE = 1 # score has sensitivity of 1 + + +def score(output_universes): + return [x for x in np.flip(output_universes)] + + +def exp_mech(output_universes, epsilon): + scores = score(output_universes) + raw_prob = [np.exp((epsilon * x) / (2 * GS_SCORE)) for x in scores] + i = 0 + for prob in raw_prob: + if prob == float('inf'): + raw_prob[i] = sys.float_info.max + i += 1 + prob = np.exp(raw_prob - np.max(raw_prob)) + prob = prob / prob.sum() + return np.random.choice(output_universes, p=prob) diff --git a/pm4py/pm4py/algo/anonymization/trace_variant_query/util/util.py b/pm4py/pm4py/algo/anonymization/trace_variant_query/util/util.py new file mode 100644 index 0000000000000000000000000000000000000000..cc7e1bf09af58cc3718f49b2bd526bb36b1fc856 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/trace_variant_query/util/util.py @@ -0,0 +1,46 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import datetime + +from dateutil.tz import tzutc + +from pm4py.objects.log import obj + +TRACE_START = "TRACE_START" +TRACE_END = "TRACE_END" +EVENT_DELIMETER = ">>>" + + +def generate_pm4py_log(trace_frequencies): + log = obj.EventLog() + trace_count = 0 + for variant in trace_frequencies.items(): + frequency = variant[1] + activities = variant[0].split(EVENT_DELIMETER) + for i in range(0, frequency): + trace = obj.Trace() + trace.attributes["concept:name"] = trace_count + trace_count = trace_count + 1 + for activity in activities: + if not TRACE_END in activity: + event = obj.Event() + event["concept:name"] = str(activity) + event["time:timestamp"] = datetime.datetime(1970, 1, 1, 0, 0, 0, tzinfo=tzutc()) + trace.append(event) + log.append(trace) + return log diff --git a/pm4py/pm4py/algo/anonymization/trace_variant_query/variants/__init__.py b/pm4py/pm4py/algo/anonymization/trace_variant_query/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3b0efaa546676bf7904dbf082193ed54f016b985 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/trace_variant_query/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.anonymization.trace_variant_query.variants import laplace, sacofa diff --git a/pm4py/pm4py/algo/anonymization/trace_variant_query/variants/laplace.py b/pm4py/pm4py/algo/anonymization/trace_variant_query/variants/laplace.py new file mode 100644 index 0000000000000000000000000000000000000000..593177ca24748cc7c56d48a0230f75c951790db0 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/trace_variant_query/variants/laplace.py @@ -0,0 +1,197 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util +import warnings +from enum import Enum +from typing import Optional, Dict, Any, Union + +import numpy as np + +from pm4py.algo.anonymization.trace_variant_query.util.util import generate_pm4py_log +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils + +TRACE_START = "TRACE_START" +TRACE_END = "TRACE_END" +EVENT_DELIMETER = ">>>" + + +class Parameters(Enum): + EPSILON = "epsilon" + K = "k" + P = "p" + SHOW_PROGRESS_BAR = "show_progress_bar" + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Variant Laplace is described in: + Mannhardt, F., Koschmider, A., Baracaldo, N. et al. Privacy-Preserving Process Mining. Bus Inf Syst Eng 61, + 595–614 (2019). https://doi.org/10.1007/s12599-019-00613-3 + + Parameters + ------------- + log + Event log + parameters + Parameters of the algorithm: + -Parameters.EPSILON -> Strength of the differential privacy guarantee + -Parameters.K -> Maximum prefix length of considered traces for the trace-variant-query + -Parameters.P -> Pruning parameter of the trace-variant-query. Of a noisy trace variant, at least P traces + must appear. Otherwise, the trace variant and its traces won't be part of the result of the + trace variant query. + -Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + + Returns + ------------ + anonymized_trace_variant_distribution + An anonymized trace variant distribution as an EventLog + """ + + if parameters is None: + parameters = {} + + epsilon = exec_utils.get_param_value(Parameters.EPSILON, parameters, 1) + k = exec_utils.get_param_value(Parameters.K, parameters, 0) + p = exec_utils.get_param_value(Parameters.P, parameters, 1) + + if k == 0: + warnings.warn( + "k, the maximum prefix length of considered traces for the trace-variant-query, is set to 0, the trace-varaint-query will be empty.") + if p == 1: + warnings.warn("p, the pruning parameter, is set to 1, the trace-varaint-query might be very large.", + RuntimeWarning) + + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, True) + progress = None + if importlib.util.find_loader("tqdm") and show_progress_bar: + from tqdm.auto import tqdm + progress = tqdm(total=k, desc="prefix tree construction, completed prefixes of length :: ") + + return privatize_tracevariants(log, epsilon, p, k, progress) + + +def privatize_tracevariants(log, epsilon, p, n, progress): + # transform log into event view and get prefix frequencies + event_int_mapping = create_event_int_mapping(log) + known_prefix_frequencies = get_prefix_frequencies_from_log(log) + events = list(event_int_mapping.keys()) + events.remove(TRACE_START) + + final_frequencies = {} + trace_frequencies = {"": 0} + for i in range(1, n + 1): + # get prefix_frequencies, using either known frequency, or frequency of parent, or 0 + trace_frequencies = get_prefix_frequencies_length_n(trace_frequencies, events, i, known_prefix_frequencies) + # laplace_mechanism + trace_frequencies = apply_laplace_noise_tf(trace_frequencies, epsilon) + + # prune + trace_frequencies = prune_trace_frequencies(trace_frequencies, p) + # print(trace_frequencies) + # add finished traces to output, remove from list, sanity checks + new_frequencies = {} + for entry in trace_frequencies.items(): + if TRACE_END in entry[0]: + final_frequencies[entry[0]] = entry[1] + else: + new_frequencies[entry[0]] = entry[1] + trace_frequencies = new_frequencies + # print(trace_frequencies) + if progress is not None: + progress.update() + if progress is not None: + progress.close() + del progress + return generate_pm4py_log(final_frequencies) + + +def create_event_int_mapping(log): + event_name_list = [] + for trace in log: + for event in trace: + event_name = event["concept:name"] + if not str(event_name) in event_name_list: + event_name_list.append(event_name) + event_int_mapping = {} + event_int_mapping[TRACE_START] = 0 + current_int = 1 + for event_name in event_name_list: + event_int_mapping[event_name] = current_int + current_int = current_int + 1 + event_int_mapping[TRACE_END] = current_int + return event_int_mapping + + +def get_prefix_frequencies_from_log(log): + prefix_frequencies = {} + for trace in log: + current_prefix = "" + for event in trace: + current_prefix = current_prefix + event["concept:name"] + EVENT_DELIMETER + if current_prefix in prefix_frequencies: + prefix_frequencies[current_prefix] += 1 + else: + prefix_frequencies[current_prefix] = 1 + current_prefix = current_prefix + TRACE_END + if current_prefix in prefix_frequencies: + prefix_frequencies[current_prefix] += 1 + else: + prefix_frequencies[current_prefix] = 1 + return prefix_frequencies + + +def get_prefix_frequencies_length_n(trace_frequencies, events, n, known_prefix_frequencies): + prefixes_length_n = {} + for prefix, frequency in trace_frequencies.items(): + for new_prefix in pref(prefix, events): + if new_prefix in known_prefix_frequencies: + new_frequency = known_prefix_frequencies[new_prefix] + prefixes_length_n[new_prefix] = new_frequency + else: + prefixes_length_n[new_prefix] = 0 + return prefixes_length_n + + +def prune_trace_frequencies(trace_frequencies, P): + pruned_frequencies = {} + for entry in trace_frequencies.items(): + if entry[1] >= P: + pruned_frequencies[entry[0]] = entry[1] + return pruned_frequencies + + +def pref(prefix, events): + prefixes_length_n = [] + if not TRACE_END in prefix: + for event in events: + if event == TRACE_END: + current_prefix = prefix + event + else: + current_prefix = prefix + event + EVENT_DELIMETER + prefixes_length_n.append(current_prefix) + return prefixes_length_n + + +def apply_laplace_noise_tf(trace_frequencies, epsilon): + scale = 1 / epsilon + for trace_frequency in trace_frequencies: + noise = int(np.random.laplace(0, scale)) + trace_frequencies[trace_frequency] = trace_frequencies[trace_frequency] + noise + if trace_frequencies[trace_frequency] < 0: + trace_frequencies[trace_frequency] = 0 + return trace_frequencies diff --git a/pm4py/pm4py/algo/anonymization/trace_variant_query/variants/sacofa.py b/pm4py/pm4py/algo/anonymization/trace_variant_query/variants/sacofa.py new file mode 100644 index 0000000000000000000000000000000000000000..07a26c6aa29fd4f7ece987d5e95b3f3a4d9a4e87 --- /dev/null +++ b/pm4py/pm4py/algo/anonymization/trace_variant_query/variants/sacofa.py @@ -0,0 +1,274 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util +import random +import warnings +from enum import Enum +from typing import Optional, Dict, Any + +import numpy as np + +from pm4py.algo.anonymization.trace_variant_query.util import behavioralAppropriateness as ba +from pm4py.algo.anonymization.trace_variant_query.util import exp_mech as exp +from pm4py.algo.anonymization.trace_variant_query.util.util import generate_pm4py_log +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils + +TRACE_START = "TRACE_START" +TRACE_END = "TRACE_END" +EVENT_DELIMETER = ">>>" + +activityKey = 'Activity' + + +class Parameters(Enum): + EPSILON = "epsilon" + K = "k" + P = "p" + SHOW_PROGRESS_BAR = "show_progress_bar" + + +def apply(log: EventLog, parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + Variant SaCoFa is described in: + S. A. Fahrenkog-Petersen, M. Kabierski, F. Rösel, H. van der Aa and M. Weidlich, "SaCoFa: Semantics-aware + Control-flow Anonymization for Process Mining," 2021 3rd International Conference on Process Mining (ICPM), 2021, + pp. 72-79, doi: 10.1109/ICPM53251.2021.9576857. + + + Parameters + ------------- + log + Event log + parameters + Parameters of the algorithm: + -Parameters.EPSILON -> Strength of the differential privacy guarantee + -Parameters.K -> Maximum prefix length of considered traces for the trace-variant-query + -Parameters.P -> Pruning parameter of the trace-variant-query. Of a noisy trace variant, at least P traces + must appear. Otherwise, the trace variant and its traces won't be part of the result of the + trace variant query. + -Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + + Returns + ------------ + anonymized_trace_variant_distribution + An anonymized trace variant distribution as an EventLog + """ + + if parameters is None: + parameters = {} + + epsilon = exec_utils.get_param_value(Parameters.EPSILON, parameters, 1) + k = exec_utils.get_param_value(Parameters.K, parameters, 0) + p = exec_utils.get_param_value(Parameters.P, parameters, 1) + + if k == 0: + warnings.warn( + "k, the maximum prefix length of considered traces for the trace-variant-query, is set to 0, " + "the trace-varaint-query will be empty.") + if p == 1: + warnings.warn("p, the pruning parameter, is set to 1, the trace-varaint-query might be very large.", + RuntimeWarning) + + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, True) + progress = None + if importlib.util.find_spec("tqdm") and show_progress_bar: + from tqdm.auto import tqdm + progress = tqdm(total=k, desc="prefix tree construction, completed prefixes of length :: ") + + return privatize_tracevariants(log, epsilon, p, k, progress) + + +def privatize_tracevariants(log, epsilon, P, N, progress, smart_pruning=False, P_smart=0, sensitivity=1): + epsilon = epsilon / sensitivity + if not smart_pruning: + P_smart = P + # print("Retrieving behavioral appropriateness relations") + traces = get_traces_from_log(log=log) + events = get_events_from_traces(traces) + followsRelations, precedesRelations = ba.getBARelations(traces=traces, events=events) + events.append( + TRACE_END) # TRACE_END is not relevant for follows/precedes relations, but is later used to generate new prefix variants + + # print("Retrieving true prefix frequencies") + known_prefix_frequencies = get_prefix_frequencies_from_log(log=log) + + # print("Sanitizing...") + final_frequencies = {} + trace_frequencies = {"": 0} + for n in range(1, N + 1): + # get prefix_frequencies, using either known frequency, or frequency of parent, or 0 + trace_frequencies = get_prefix_frequencies_length_n(trace_frequencies, events, n, known_prefix_frequencies) + # exp_mech + trace_frequencies, conformASet = privatize_trace_variants(trace_frequencies=trace_frequencies, epsilon=epsilon, + followRelations=followsRelations, + precedesRelations=precedesRelations, allEvents=events, + allTraces=traces, sensitivity=sensitivity) + # prune + if n < N: + trace_frequencies = prune_trace_frequencies(trace_frequencies, P, P_smart, conformASet) + + # add finished traces to output, remove from list, sanity checks + new_frequencies = {} + for entry in trace_frequencies.items(): + if TRACE_END in entry[0]: + final_frequencies[entry[0]] = entry[1] + elif n == N: + final_frequencies[entry[0][:-3]] = entry[1] + else: + new_frequencies[entry[0]] = entry[1] + trace_frequencies = new_frequencies + + if progress is not None: + progress.update() + if progress is not None: + progress.close() + del progress + return generate_pm4py_log(trace_frequencies=final_frequencies) + + +def get_prefix_frequencies_from_log(log): + prefix_frequencies = {} + for trace in log: + current_prefix = "" + for event in trace._list: + current_prefix = current_prefix + event._dict.get('concept:name') + EVENT_DELIMETER + if current_prefix in prefix_frequencies: + prefix_frequencies[current_prefix] += 1 + else: + prefix_frequencies[current_prefix] = 1 + current_prefix = current_prefix + TRACE_END + if current_prefix in prefix_frequencies: + prefix_frequencies[current_prefix] += 1 + else: + prefix_frequencies[current_prefix] = 1 + return prefix_frequencies + + +def get_prefix_frequencies_length_n(trace_frequencies, events, n, known_prefix_frequencies): + prefixes_length_n = {} + for prefix, frequency in trace_frequencies.items(): + for new_prefix in pref(prefix, events, n): + if new_prefix in known_prefix_frequencies: + new_frequency = known_prefix_frequencies[new_prefix] + prefixes_length_n[new_prefix] = new_frequency + else: + prefixes_length_n[new_prefix] = 0 + return prefixes_length_n + + +def privatize_trace_variants(trace_frequencies, epsilon, followRelations, precedesRelations, allEvents, allTraces, + sensitivity): + conformsToBASet = [] + violatesBASet = dict() + firstEvents = get_first_events( + traceSet=allTraces) # all events which appear as the first event in a trace in the original log + for trace_frequency in trace_frequencies.items(): + working_trace_frequency = list(filter(None, trace_frequency[0].split(EVENT_DELIMETER))) + + if len(working_trace_frequency) == 1: # len(prefix) == 1 -> does a trace which begins with this prefix/event exist in the original log? + if working_trace_frequency[0] in firstEvents: # if so, this prefix conforms to BA, if not BA is violated + conformsToBASet.append(trace_frequency[0]) + else: + violatesBASet[trace_frequency[0]] = 1 + continue + + baViolations = ba.getBAViolations(allEvents=allEvents, followsRelations=followRelations, + precedesRelations=precedesRelations, prefix=working_trace_frequency, + TRACE_END=TRACE_END) + if baViolations == 0: + conformsToBASet.append(trace_frequency[0]) + else: + violatesBASet[trace_frequency[0]] = baViolations + + not_to_prune_prefix = conformsToBASet.copy() + + output_universes = np.linspace(0, len(violatesBASet), num=len(violatesBASet) + 1, dtype=int) + chosen_universe = exp.exp_mech(output_universes, epsilon) + # print("conformsToBASet: ", len(conformsToBASet), "| violatesBASet: ", len(violatesBASet), "| chosen universe: ", + # chosen_universe) + + while chosen_universe > 0: + for x in random.sample(list(violatesBASet.keys()), 1): + chosen_universe = chosen_universe - min(violatesBASet[x], sensitivity) + conformsToBASet.append(x) + violatesBASet.pop(x) + return apply_laplace_noise_tf(trace_frequencies, conformsToBASet, epsilon), not_to_prune_prefix + + +def get_first_events(traceSet): + firstEvents = list() + for trace in traceSet: + if trace[0] not in firstEvents: + firstEvents.append(trace[0]) + + return firstEvents + + +def get_traces_from_log(log): + logStringList = list() + i = 0 + for trace in log: + logStringList.append(list()) + for event in trace._list: + logStringList[i].append(event._dict.get('concept:name')) + i += 1 + return logStringList + + +def get_events_from_traces(traceSet): + events = list() + for t in traceSet: + for e in t: + if e not in events: + events.append(e) + + return events + + +def prune_trace_frequencies(trace_frequencies, P, P_smart, conformSet): + pruned_frequencies = {} + for entry in trace_frequencies.items(): + if entry[0] in conformSet: + if entry[1] >= P_smart or TRACE_END in entry[0]: + pruned_frequencies[entry[0]] = entry[1] + else: + if entry[1] >= P or TRACE_END in entry[0]: + pruned_frequencies[entry[0]] = entry[1] + return pruned_frequencies + + +def pref(prefix, events, n): + prefixes_length_n = [] + if not TRACE_END in prefix: + for event in events: + if event == TRACE_END: + current_prefix = prefix + event + else: + current_prefix = prefix + event + EVENT_DELIMETER + prefixes_length_n.append(current_prefix) + return prefixes_length_n + + +def apply_laplace_noise_tf(trace_frequencies, conformsToBASet, epsilon): + scale = 1 / epsilon + for trace_frequency in conformsToBASet: + noise = int(np.random.laplace(0, scale)) + trace_frequencies[trace_frequency] = trace_frequencies[trace_frequency] + noise + if trace_frequencies[trace_frequency] < 0: + trace_frequencies[trace_frequency] = 0 + return trace_frequencies diff --git a/pm4py/pm4py/algo/clustering/__init__.py b/pm4py/pm4py/algo/clustering/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/clustering/profiles/__init__.py b/pm4py/pm4py/algo/clustering/profiles/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1ff8510043589feb342058b1cf3b6aa143d7a615 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/profiles/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.clustering.profiles import algorithm, variants diff --git a/pm4py/pm4py/algo/clustering/profiles/algorithm.py b/pm4py/pm4py/algo/clustering/profiles/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..2935bb0da06c56515f011263f541a80d912d03ce --- /dev/null +++ b/pm4py/pm4py/algo/clustering/profiles/algorithm.py @@ -0,0 +1,52 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils +from pm4py.algo.clustering.profiles.variants import sklearn_profiles +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Optional, Dict, Any, Generator, Union + + +class Variants(Enum): + SKLEARN_PROFILES = sklearn_profiles + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], variant=Variants.SKLEARN_PROFILES, parameters: Optional[Dict[Any, Any]] = None) -> Generator[EventLog, None, None]: + """ + Apply clustering to the provided event log + (methods based on the extraction of profiles for the traces of the event log) + + Implements the approach described in: + Song, Minseok, Christian W. Günther, and Wil MP Van der Aalst. "Trace clustering in process mining." Business Process Management Workshops: BPM 2008 International Workshops, Milano, Italy, September 1-4, 2008. Revised Papers 6. Springer Berlin Heidelberg, 2009. + + Parameters + ---------------- + log + Event log + variant + Variant of the clustering to be used, available values: + - Variants.SKLEARN_PROFILES + parameters + Variant-specific parameters + + Returns + ---------------- + generator + Generator of dataframes (clusters) + """ + return exec_utils.get_variant(variant).apply(log, parameters=parameters) diff --git a/pm4py/pm4py/algo/clustering/profiles/variants/__init__.py b/pm4py/pm4py/algo/clustering/profiles/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0990ef6543498e302648332d971837e41bd06b5d --- /dev/null +++ b/pm4py/pm4py/algo/clustering/profiles/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.clustering.profiles.variants import sklearn_profiles diff --git a/pm4py/pm4py/algo/clustering/profiles/variants/sklearn_profiles.py b/pm4py/pm4py/algo/clustering/profiles/variants/sklearn_profiles.py new file mode 100644 index 0000000000000000000000000000000000000000..ac90a07096290a0e666a899277d43ea2f12df5ee --- /dev/null +++ b/pm4py/pm4py/algo/clustering/profiles/variants/sklearn_profiles.py @@ -0,0 +1,86 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.algo.transformation.log_to_features import algorithm as features_extractor +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +import numpy as np +from typing import Optional, Dict, Any, Generator, Union +from copy import copy + + +class Parameters(Enum): + SKLEARN_CLUSTERER = "sklearn_clusterer" + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> Generator[EventLog, None, None]: + """ + Cluster the event log, based on the extraction of profiles for the traces of the event log + (by means of the feature extraction proposed in pm4py) and the application of a Scikit learn clusterer + (default: K-means with two clusters) + + Implements the approach described in: + Song, Minseok, Christian W. Günther, and Wil MP Van der Aalst. "Trace clustering in process mining." Business Process Management Workshops: BPM 2008 International Workshops, Milano, Italy, September 1-4, 2008. Revised Papers 6. Springer Berlin Heidelberg, 2009. + + Parameters + ---------------- + log + Event log + parameters + Parameters of the feature extraction, including: + - Parameters.SKLEARN_CLUSTERER => the Scikit-Learn clusterer to be used (default: KMeans(n_clusters=2, random_state=0, n_init="auto")) + + Returns + --------------- + generator + Generator of logs (clusters) + """ + if parameters is None: + parameters = {} + + from pm4py.util import ml_utils + clusterer = exec_utils.get_param_value(Parameters.SKLEARN_CLUSTERER, parameters, ml_utils.KMeans(n_clusters=2, random_state=0, n_init="auto")) + + if "enable_activity_def_representation" not in parameters: + parameters["enable_activity_def_representation"] = True + + if "enable_succ_def_representation" not in parameters: + parameters["enable_succ_def_representation"] = True + + conv_parameters = copy(parameters) + conv_parameters["stream_postprocessing"] = True + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=conv_parameters) + data, feature_names = features_extractor.apply(log, parameters=parameters) + data = np.array([np.array(x) for x in data]) + + clusters = clusterer.fit_predict(data) + max_clu = max(clusters) + clust_idxs = {i: list() for i in range(max_clu+1)} + + for i in range(len(clusters)): + clust_idxs[clusters[i]].append(i) + + for i in clust_idxs: + clust_log = EventLog() + for j in clust_idxs[i]: + clust_log.append(log[j]) + #clust_log = log_converter.apply(clust_log, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + + yield clust_log diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/__init__.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3b9d10514981d33e31286ca052db20d5d3a44d7e --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.clustering.trace_attribute_driven import algorithm, dfg, leven_dist, linkage_method, merge_log, util, variants + +import warnings +from pm4py.util import constants + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The clustering.trace_attribute_driven package will be removed in a future release.") diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/algorithm.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..f299798b874391dd7d7d47f42c252156668eb788 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/algorithm.py @@ -0,0 +1,136 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from scipy.cluster.hierarchy import to_tree, linkage +from pm4py.statistics.attributes.log import get as attributes_filter +from pm4py.algo.clustering.trace_attribute_driven.merge_log import merge_log +from pm4py.algo.clustering.trace_attribute_driven.util import evaluation +from pm4py.objects.conversion.log import converter as log_converter +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Variants(Enum): + VARIANT_DMM_LEVEN = evaluation.eval_DMM_leven + VARIANT_AVG_LEVEN = evaluation.eval_avg_leven + VARIANT_DMM_VEC = evaluation.eval_DMM_variant + VARIANT_AVG_VEC = evaluation.eval_avg_variant + DFG = evaluation.dfg_dist + + +VARIANT_DMM_LEVEN = Variants.VARIANT_DMM_LEVEN +VARIANT_AVG_LEVEN = Variants.VARIANT_AVG_LEVEN +VARIANT_DMM_VEC = Variants.VARIANT_DMM_VEC +VARIANT_AVG_VEC = Variants.VARIANT_AVG_VEC +DFG = Variants.DFG + +VERSIONS = {VARIANT_DMM_LEVEN, VARIANT_AVG_VEC, VARIANT_DMM_VEC, VARIANT_AVG_VEC, DFG} + + +def bfs(tree): + queue = [] + output = [] + queue.append(tree) + while queue: + # element in queue is waiting to become root and splited into child + # root is the first ele of queue + root = queue.pop(0) + if len(root['children']) > 0: + name = [root['name']] + for child in root['children']: + queue.append(child) + name.append(child['name']) + output.append(name) + + return output + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], trace_attribute: str, variant=VARIANT_DMM_LEVEN, parameters: Optional[Dict[Any, Any]] = None) -> Any: + """ + Apply the hierarchical clustering to a log starting from a trace attribute. + + MSc Thesis is available at: https://www.pads.rwth-aachen.de/global/show_document.asp?id=aaaaaaaaalpxgft&download=1 + Defense slides are available at: https://www.pads.rwth-aachen.de/global/show_document.asp?id=aaaaaaaaalpxgqx&download=1 + + Parameters + ---------------- + log + Log + trace_attribute + Trace attribute to exploit for the clustering + variant + Variant of the algorithm to apply, possible values: + - Variants.VARIANT_DMM_LEVEN (that is the default) + - Variants.VARIANT_AVG_LEVEN + - Variants.VARIANT_DMM_VEC + - Variants.VARIANT_AVG_VEC + - Variants.DFG + + Returns + ----------------- + tree + Hierarchical cluster tree + leafname + Root node + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + percent = 1 + alpha = 0.5 + + list_of_vals = [] + list_log = [] + list_of_vals_dict = attributes_filter.get_trace_attribute_values(log, trace_attribute) + + list_of_vals_keys = list(list_of_vals_dict.keys()) + for i in range(len(list_of_vals_keys)): + list_of_vals.append(list_of_vals_keys[i]) + + for i in range(len(list_of_vals)): + logsample = merge_log.log2sublog(log, list_of_vals[i], trace_attribute) + list_log.append(logsample) + + y = exec_utils.get_variant(variant)(list_log, percent, alpha) + + Z = linkage(y, method='average') + + # Create dictionary for labeling nodes by their IDs + + id2name = dict(zip(range(len(list_of_vals)), list_of_vals)) + + T = to_tree(Z, rd=False) + d3Dendro = dict(children=[], name="Root1") + merge_log.add_node(T, d3Dendro) + + leafname = merge_log.label_tree(d3Dendro["children"][0], id2name) + d3Dendro = d3Dendro["children"][0] + d3Dendro["name"] = 'root' + tree = d3Dendro + + trilist = bfs(tree) + trilist[0][0] = trilist[0][1] + '-' + trilist[0][2] + + rootlist = [] + for ele in trilist: + rootlist.append(ele[0]) + + return tree, leafname diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/dfg/__init__.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0fe61a03de5103919ce1d5a9709ef23dcfda68f8 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/dfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.clustering.trace_attribute_driven.dfg import dfg_dist diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/dfg/dfg_dist.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/dfg/dfg_dist.py new file mode 100644 index 0000000000000000000000000000000000000000..59629e1843ad1d175d581b106597b3360e08b128 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/dfg/dfg_dist.py @@ -0,0 +1,80 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from scipy.spatial.distance import pdist +from pm4py.algo.discovery.dfg import algorithm as dfg_algorithm +from pm4py.statistics.attributes.log import get as attributes_filter +import pandas as pd +from pm4py.util import pandas_utils +from pm4py.algo.clustering.trace_attribute_driven.variants import act_dist_calc + + +def dfg_dist_calc_act(log1, log2): + act1 = attributes_filter.get_attribute_values(log1, "concept:name") + act2 = attributes_filter.get_attribute_values(log2, "concept:name") + df1_act = act_dist_calc.occu_var_act(act1) + df2_act = act_dist_calc.occu_var_act(act2) + df_act = pandas_utils.merge(df1_act, df2_act, how='outer', on='var').fillna(0) + dist_act = pdist(np.array([df_act['freq_x'].values, df_act['freq_y'].values]), 'cosine')[0] + return dist_act + + +def dfg_dist_calc_suc(log1, log2): + dfg1 = dfg_algorithm.apply(log1) + dfg2 = dfg_algorithm.apply(log2) + df1_dfg = act_dist_calc.occu_var_act(dfg1) + df2_dfg = act_dist_calc.occu_var_act(dfg2) + df_dfg = pandas_utils.merge(df1_dfg, df2_dfg, how='outer', on='var').fillna(0) + dist_dfg = pdist(np.array([df_dfg['freq_x'].values, df_dfg['freq_y'].values]), 'cosine')[0] + return dist_dfg + + +def dfg_dist_calc(log1, log2): + act1 = attributes_filter.get_attribute_values(log1, "concept:name") + act2 = attributes_filter.get_attribute_values(log2, "concept:name") + dfg1 = dfg_algorithm.apply(log1) + dfg2 = dfg_algorithm.apply(log2) + df1_act = act_dist_calc.occu_var_act(act1) + df2_act = act_dist_calc.occu_var_act(act2) + df1_dfg = act_dist_calc.occu_var_act(dfg1) + df2_dfg = act_dist_calc.occu_var_act(dfg2) + df_act = pandas_utils.merge(df1_act, df2_act, how='outer', on='var').fillna(0) + df_dfg = pandas_utils.merge(df1_dfg, df2_dfg, how='outer', on='var').fillna(0) + dist_act = pdist(np.array([df_act['freq_x'].values, df_act['freq_y'].values]), 'cosine')[0] + dist_dfg = pdist(np.array([df_dfg['freq_x'].values, df_dfg['freq_y'].values]), 'cosine')[0] + if (np.isnan(dist_dfg) == True): + dist_dfg = 1 + return dist_act, dist_dfg + + +def dfg_dist_calc_minkowski(log1, log2, alpha): + act1 = attributes_filter.get_attribute_values(log1, "concept:name") + act2 = attributes_filter.get_attribute_values(log2, "concept:name") + dfg1 = dfg_algorithm.apply(log1) + dfg2 = dfg_algorithm.apply(log2) + df1_act = act_dist_calc.occu_var_act(act1) + df2_act = act_dist_calc.occu_var_act(act2) + df1_dfg = act_dist_calc.occu_var_act(dfg1) + df2_dfg = act_dist_calc.occu_var_act(dfg2) + df_act = pandas_utils.merge(df1_act, df2_act, how='outer', on='var').fillna(0) + df_dfg = pandas_utils.merge(df1_dfg, df2_dfg, how='outer', on='var').fillna(0) + dist_act = pdist(np.array([df_act['freq_x'].values / np.sum(df_act['freq_x'].values), + df_act['freq_y'].values / np.sum(df_act['freq_y'].values)]), 'minkowski', p=2.)[0] + dist_dfg = pdist(np.array([df_dfg['freq_x'].values / np.sum(df_dfg['freq_x'].values), + df_dfg['freq_y'].values / np.sum(df_dfg['freq_y'].values)]), 'minkowski', p=2.)[0] + dist = dist_act * alpha + dist_dfg * (1 - alpha) + return dist diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/leven_dist/__init__.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/leven_dist/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..f5407ec4823fc683c57b2c9f32221c4a7747cd6c --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/leven_dist/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.clustering.trace_attribute_driven.leven_dist import leven_dist_calc diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/leven_dist/leven_dist_calc.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/leven_dist/leven_dist_calc.py new file mode 100644 index 0000000000000000000000000000000000000000..6792a5992b59602b5f142a7eef7517c2a7291cf7 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/leven_dist/leven_dist_calc.py @@ -0,0 +1,139 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from pm4py.algo.clustering.trace_attribute_driven.util import filter_subsets +from pm4py.util import string_distance +import string + + +def leven_preprocess(list1, list2): + ''' + this function transform event name to alphabet for the sake of levenshtein distance + :param list1: + :param list2: + :return: + ''' + + listsum = sorted(list(set(list1 + list2))) + alphabet = list(string.ascii_letters)[0:len(listsum)] + str1 = [alphabet[listsum.index(item)] for item in list1] + str2 = [alphabet[listsum.index(item)] for item in list2] + str1 = ''.join(str1) + str2 = ''.join(str2) + return str1, str2 + + +def leven_dist(log1, log2, percent_1, percent_2): + ''' + + this function compare the levenstein distance between two sublogs via the two lists of variants. + ''' + + (dataframe_1, var_list_1) = filter_subsets.sublog_percent(log1, percent_1) + (dataframe_2, var_list_2) = filter_subsets.sublog_percent(log2, percent_2) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = dataframe_1['count'] + var_count_min = dataframe_2['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = dataframe_2['count'] + var_count_min = dataframe_1['count'] + + dist_matrix = np.zeros((max_len, min_len)) + max_per_var = np.zeros(max_len) + max_freq = np.zeros(max_len) + min_freq = np.zeros(min_len) + min_per_var = np.zeros(min_len) + index_rec = set(list(range(min_len))) + + if var_list_1 == var_list_2: + dist = 0 + else: + for i in range(max_len): + dist_vec = np.zeros(min_len) + for j in range(min_len): + (str1, str2) = leven_preprocess(max_var[i], min_var[j]) + max_len = np.max([len(str1), len(str2)]) + dist_vec[j] = (string_distance.levenshtein(str1, str2)) / max_len + dist_matrix[i][j] = dist_vec[j] + if j == (min_len - 1): + # max_loc_col = np.argmax(dist_matrix[i, :]) # location of max value + max_loc_col = np.argmin(dist_vec) + if abs(dist_vec[max_loc_col]) <= 1e-8: + index_rec.discard(max_loc_col) + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] * 2 + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] * 2 + else: + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] + + if (len(index_rec) != 0): + for i in list(index_rec): + min_loc_row = np.argmin(dist_matrix[:, i]) + min_freq[i] = var_count_max.iloc[min_loc_row] * var_count_min.iloc[i] + min_per_var[i] = dist_matrix[min_loc_row, i] * min_freq[i] + + dist = (np.sum(max_per_var) + np.sum(min_per_var)) / (np.sum(max_freq) + np.sum(min_freq)) + + return dist + + +def leven_dist_avg(log1, log2, percent_1, percent_2): + (dataframe_1, var_list_1) = filter_subsets.sublog_percent(log1, percent_1) + (dataframe_2, var_list_2) = filter_subsets.sublog_percent(log2, percent_2) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = dataframe_1['count'] + var_count_min = dataframe_2['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = dataframe_2['count'] + var_count_min = dataframe_1['count'] + + dist_matrix = np.zeros((max_len, min_len)) + col_sum = np.zeros(max_len) + + for i in range(max_len): + dist_vec = np.zeros(min_len) + for j in range(min_len): + (str1, str2) = leven_preprocess(max_var[i], min_var[j]) + max_len = np.max([len(str1), len(str2)]) + dist_vec[j] = (string_distance.levenshtein(str1, str2)) / max_len + col_sum[i] += dist_vec[j] * var_count_max.iloc[i] * var_count_min.iloc[j] + dist_matrix[i][j] = dist_vec[j] + + vmax_vec = (var_count_max.values).reshape(-1, 1) + vmin_vec = (var_count_min.values).reshape(1, -1) + vec_sum = np.sum(np.dot(vmax_vec, vmin_vec)) + dist = np.sum(col_sum) / vec_sum + + return dist diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/linkage_method/__init__.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/linkage_method/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4d5e142659cd236aecc9c35ee1dd6229781dcd12 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/linkage_method/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.clustering.trace_attribute_driven.linkage_method import linkage_avg diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/linkage_method/linkage_avg.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/linkage_method/linkage_avg.py new file mode 100644 index 0000000000000000000000000000000000000000..d198534bd189c6f58244aa20ff5525b79da169b8 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/linkage_method/linkage_avg.py @@ -0,0 +1,378 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from scipy.spatial.distance import squareform +from pm4py.algo.clustering.trace_attribute_driven.leven_dist import leven_dist_calc +from pm4py.algo.clustering.trace_attribute_driven.merge_log import merge_log +from pm4py.algo.clustering.trace_attribute_driven.dfg import dfg_dist +from pm4py.algo.clustering.trace_attribute_driven.variants import act_dist_calc +from pm4py.algo.clustering.trace_attribute_driven.variants import suc_dist_calc + + +def linkage_dfg_update(loglist, dist_mat, alpha, percent): + index_list = [] + for i in range(len(dist_mat)): + for j in range(i + 1, len(dist_mat)): + index_list.append([i, j]) + + y = squareform(dist_mat) + n = len(dist_mat) # The number of observations. + Z = [] + cluster_size = dict(zip(range(n), np.ones(n))) # record merged cluster size every step + k = 1 + logsindex = list(range(len(loglist))) + while (k <= n - 2): + min_index = np.argmin(y) + + # update Z + temp = [] + temp.extend(index_list[min_index]) + temp.append(y[min_index]) + cluster_size[n - 1 + k] = cluster_size[temp[0]] + cluster_size[temp[1]] + temp.append(cluster_size[n - 1 + k]) + + Z.append(temp) + + # get index of min in y + item = index_list[min_index][::] + record1 = [] + record2 = [] + for ele in index_list: + if item[0] in ele: + record1.append(index_list.index(ele)) + inde = ele.index(item[0]) + ele[inde] = n - 1 + k + if item[1] in ele: # here if/elif both works + record2.append(index_list.index(ele)) + inde = ele.index(item[1]) + ele[inde] = n - 1 + k + ele.sort() + + record = list(set(record1).union(set(record2))) + + merged1 = merge_log.update_merge([loglist[item[0]], loglist[item[1]]]) + # here the logsindex is changing + diff = list(set(logsindex).difference(set(item))) # diff is the node number need to be updated + + update_dist = dict() + for ele in diff: + (dist_act, dist_dfg) = dfg_dist.dfg_dist_calc(merged1, loglist[ele]) + tempdist = dist_act * alpha + dist_dfg * (1 - alpha) + # tempdist = leven_dist_calc.leven_dist_avg(merged1, loglist[ele], percent, percent) + update_dist[ele] = tempdist + + loglist.append(merged1) + diff.append(n - 1 + k) + logsindex = diff + + del (record1[record1.index(min_index)]) + del (record2[record2.index(min_index)]) + + # for i in range(len(record1)): + # y[record1[i]] = (y[record1[i]]*cluster_size[item[0]] + y[record2[i]]*cluster_size[item[1]]) / (cluster_size[item[0]]+cluster_size[item[1]]) + for ele in record1: + uindex = index_list[ele][0] # record1 is the location if nodes in diff in the index_list + y[ele] = update_dist[uindex] + + diff1 = list(set(range(len(index_list))).difference(set(record))) + newindex = record1 + diff1 + newindex.sort() + + range_newindex = range(len(newindex)) + tempy = list(range_newindex) + templist = list(range_newindex) + for i in range_newindex: + tempy[i] = y[newindex[i]] + templist[i] = index_list[newindex[i]] + + index_list = templist + y = tempy + k = k + 1 + + temp = [] + temp.extend(index_list[0]) + temp.append(y[0]) + + cluster_size[n - 1 + k] = cluster_size[temp[0]] + cluster_size[temp[1]] + temp.append(cluster_size[n - 1 + k]) + Z.append(temp) + Z = np.array(Z) + + return Z + + +def linkage_avg(loglist, dist_mat, alpha, percent): + index_list = [] + cluster_size = [] + for i in range(len(dist_mat)): + cluster_size.append(len(loglist[i])) + for j in range(i + 1, len(dist_mat)): + index_list.append([i, j]) + + y = squareform(dist_mat) + n = len(dist_mat) # The number of observations. + Z = [] + cluster_size = dict(zip(range(n), cluster_size)) # record merged cluster size every step + k = 1 + while (k <= n - 2): + min_index = np.argmin(y) + + # update Z + temp = [] + temp.extend(index_list[min_index]) + temp.append(y[min_index]) + cluster_size[n - 1 + k] = cluster_size[temp[0]] + cluster_size[temp[1]] + temp.append(cluster_size[n - 1 + k]) + + Z.append(temp) + + # get index of min in y + item = index_list[min_index][::] + record1 = [] + record2 = [] + for ele in index_list: + if item[0] in ele: + record1.append(index_list.index(ele)) + inde = ele.index(item[0]) + ele[inde] = n - 1 + k + if item[1] in ele: # here if/elif both works + record2.append(index_list.index(ele)) + inde = ele.index(item[1]) + ele[inde] = n - 1 + k + ele.sort() + + record = list(set(record1).union(set(record2))) + + del (record1[record1.index(min_index)]) + del (record2[record2.index(min_index)]) + + for i in range(len(record1)): + y[record1[i]] = (y[record1[i]] * cluster_size[item[0]] + y[record2[i]] * cluster_size[item[1]]) / ( + cluster_size[item[0]] + cluster_size[item[1]]) + # for ele in record1: + # uindex = index_list[ele][0] # record1 is the location if nodes in diff in the index_list + # y[ele] = update_dist[uindex] + + diff1 = list(set(range(len(index_list))).difference(set(record))) + newindex = record1 + diff1 + newindex.sort() + + range_newindex = range(len(newindex)) + tempy = list(range_newindex) + templist = list(range_newindex) + for i in range_newindex: + tempy[i] = y[newindex[i]] + templist[i] = index_list[newindex[i]] + + index_list = templist + y = tempy + k = k + 1 + + temp = [] + temp.extend(index_list[0]) + temp.append(y[0]) + + cluster_size[n - 1 + k] = cluster_size[temp[0]] + cluster_size[temp[1]] + temp.append(cluster_size[n - 1 + k]) + Z.append(temp) + Z = np.array(Z) + + return Z + + +def linkage_DMM_update(loglist, dist_mat, alpha, percent): + index_list = [] + for i in range(len(dist_mat)): + for j in range(i + 1, len(dist_mat)): + index_list.append([i, j]) + + y = squareform(dist_mat) + n = len(dist_mat) # The number of observations. + Z = [] + cluster_size = dict(zip(range(n), np.ones(n))) # record merged cluster size every step + k = 1 + logsindex = list(range(len(loglist))) + while (k <= n - 2): + min_index = np.argmin(y) + + # update Z + temp = [] + temp.extend(index_list[min_index]) + temp.append(y[min_index]) + cluster_size[n - 1 + k] = cluster_size[temp[0]] + cluster_size[temp[1]] + temp.append(cluster_size[n - 1 + k]) + + Z.append(temp) + + # get index of min in y + item = index_list[min_index][::] + record1 = [] + record2 = [] + for ele in index_list: + if item[0] in ele: + record1.append(index_list.index(ele)) + inde = ele.index(item[0]) + ele[inde] = n - 1 + k + if item[1] in ele: # here if/elif both works + record2.append(index_list.index(ele)) + inde = ele.index(item[1]) + ele[inde] = n - 1 + k + ele.sort() + + record = list(set(record1).union(set(record2))) + + merged1 = merge_log.update_merge([loglist[item[0]], loglist[item[1]]]) + # here the logsindex is changing + diff = list(set(logsindex).difference(set(item))) # diff is the node number need to be updated + + update_dist = dict() + for ele in diff: + dist_act = act_dist_calc.act_sim_percent(merged1, loglist[ele], percent, percent) + dist_suc = suc_dist_calc.suc_sim_percent(merged1, loglist[ele], percent, percent) + tempdist = dist_act * alpha + dist_suc * (1 - alpha) + # tempdist = leven_dist_calc.leven_dist_avg(merged1, loglist[ele], percent, percent) + update_dist[ele] = tempdist + + loglist.append(merged1) + diff.append(n - 1 + k) + logsindex = diff + + del (record1[record1.index(min_index)]) + del (record2[record2.index(min_index)]) + + # for i in range(len(record1)): + # y[record1[i]] = (y[record1[i]]*cluster_size[item[0]] + y[record2[i]]*cluster_size[item[1]]) / (cluster_size[item[0]]+cluster_size[item[1]]) + for ele in record1: + uindex = index_list[ele][0] # record1 is the location if nodes in diff in the index_list + y[ele] = update_dist[uindex] + + diff1 = list(set(range(len(index_list))).difference(set(record))) + newindex = record1 + diff1 + newindex.sort() + + range_newindex = range(len(newindex)) + tempy = list(range_newindex) + templist = list(range_newindex) + for i in range_newindex: + tempy[i] = y[newindex[i]] + templist[i] = index_list[newindex[i]] + + index_list = templist + y = tempy + k = k + 1 + + temp = [] + temp.extend(index_list[0]) + temp.append(y[0]) + + cluster_size[n - 1 + k] = cluster_size[temp[0]] + cluster_size[temp[1]] + temp.append(cluster_size[n - 1 + k]) + Z.append(temp) + Z = np.array(Z) + + return Z + + +def linkage_DMM_update_leven(loglist, dist_mat, alpha, percent): + index_list = [] + for i in range(len(dist_mat)): + for j in range(i + 1, len(dist_mat)): + index_list.append([i, j]) + + y = squareform(dist_mat) + n = len(dist_mat) # The number of observations. + Z = [] + cluster_size = dict(zip(range(n), np.ones(n))) # record merged cluster size every step + k = 1 + logsindex = list(range(len(loglist))) + while (k <= n - 2): + min_index = np.argmin(y) + + # update Z + temp = [] + temp.extend(index_list[min_index]) + temp.append(y[min_index]) + cluster_size[n - 1 + k] = cluster_size[temp[0]] + cluster_size[temp[1]] + temp.append(cluster_size[n - 1 + k]) + + Z.append(temp) + + # get index of min in y + item = index_list[min_index][::] + record1 = [] + record2 = [] + for ele in index_list: + if item[0] in ele: + record1.append(index_list.index(ele)) + inde = ele.index(item[0]) + ele[inde] = n - 1 + k + if item[1] in ele: # here if/elif both works + record2.append(index_list.index(ele)) + inde = ele.index(item[1]) + ele[inde] = n - 1 + k + ele.sort() + + record = list(set(record1).union(set(record2))) + + merged1 = merge_log.update_merge([loglist[item[0]], loglist[item[1]]]) + # here the logsindex is changing + diff = list(set(logsindex).difference(set(item))) # diff is the node number need to be updated + + update_dist = dict() + for ele in diff: + tempdist = leven_dist_calc.leven_dist(merged1, loglist[ele], percent, percent) + # tempdist = leven_dist_calc.leven_dist_avg(merged1, loglist[ele], percent, percent) + update_dist[ele] = tempdist + + loglist.append(merged1) + diff.append(n - 1 + k) + logsindex = diff + + del (record1[record1.index(min_index)]) + del (record2[record2.index(min_index)]) + + # for i in range(len(record1)): + # y[record1[i]] = (y[record1[i]]*cluster_size[item[0]] + y[record2[i]]*cluster_size[item[1]]) / (cluster_size[item[0]]+cluster_size[item[1]]) + for ele in record1: + uindex = index_list[ele][0] # record1 is the location if nodes in diff in the index_list + y[ele] = update_dist[uindex] + + diff1 = list(set(range(len(index_list))).difference(set(record))) + newindex = record1 + diff1 + newindex.sort() + + range_newindex = range(len(newindex)) + tempy = list(range_newindex) + templist = list(range_newindex) + for i in range_newindex: + tempy[i] = y[newindex[i]] + templist[i] = index_list[newindex[i]] + + index_list = templist + y = tempy + k = k + 1 + + temp = [] + temp.extend(index_list[0]) + temp.append(y[0]) + + cluster_size[n - 1 + k] = cluster_size[temp[0]] + cluster_size[temp[1]] + temp.append(cluster_size[n - 1 + k]) + Z.append(temp) + Z = np.array(Z) + + return Z diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/merge_log/__init__.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/merge_log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d37d8f34bdbd83c2965f34346916b8cda04ed6a1 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/merge_log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.clustering.trace_attribute_driven.merge_log import merge_log diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/merge_log/merge_log.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/merge_log/merge_log.py new file mode 100644 index 0000000000000000000000000000000000000000..f915693b80311b7e82d041ac2f09a9f90382d415 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/merge_log/merge_log.py @@ -0,0 +1,115 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from functools import reduce +from scipy.cluster.hierarchy import fcluster +from pm4py.algo.clustering.trace_attribute_driven.util import filter_subsets +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.obj import EventLog +from pm4py.util import constants + + +def merge_log(path, cate, iter): + loglist = [] + mergedlog = EventLog() + + for i in range(1, cate + 1): + for j in range(1, iter + 1): + log = xes_importer.apply(path + '\\log_1_' + str(i) + '_' + str(j) + ".xes") + for trace in log: + trace.attributes["concept:name"] = str(iter * (i - 1) + j) + trace.attributes["index"] = str(iter * (i - 1) + j) + loglist.append(log) + + for i in range(len(loglist)): + for trace in loglist[i]: + mergedlog.append(trace) + + return loglist, mergedlog + + +def update_merge(loglist): + mergedlog = EventLog() + + for i in range(len(loglist)): + for trace in loglist[i]: + mergedlog.append(trace) + return mergedlog + + +# this is for single string +def log2sublog(log, string, KEY): + tracefilter_log = filter_subsets.apply_trace_attributes(log, [string], + parameters={ + constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: KEY, + "positive": True}) + + return tracefilter_log + + +# this is for string list +def logslice(log, str_list, KEY): + tracefilter_log = filter_subsets.apply_trace_attributes(log, str_list, + parameters={ + constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: KEY, + "positive": True}) + + return tracefilter_log + + +# Create a nested dictionary from the ClusterNode's returned by SciPy +def add_node(node, parent): + # First create the new node and append it to its parent's children + newNode = dict(node_id=node.id, children=[]) + parent["children"].append(newNode) + + # Recursively add the current node's children + if node.left: add_node(node.left, newNode) + if node.right: add_node(node.right, newNode) + + +# Label each node with the names of each leaf in its subtree +def label_tree(n, id2name): + # flatten_tree=[] + # If the node is a leaf, then we have its name + if len(n["children"]) == 0: + leafNames = [id2name[n["node_id"]]] + + # If not, flatten all the leaves in the node's subtree + else: + leafNames = reduce(lambda ls, c: ls + label_tree(c, id2name), n["children"], []) + + # Delete the node id since we don't need it anymore and + # it makes for cleaner JSON + del n["node_id"] + + # Labeling convention: "-"-separated leaf names + n["name"] = name = "-".join(sorted(map(str, leafNames))) + + return leafNames + + +def clusteredlog(Z, maxclust, list_of_vals, log, METHOD, ATTR_NAME): + clu_index = fcluster(Z, maxclust, criterion='maxclust') + clu_index = dict(zip(list_of_vals, clu_index)) + clu_list_log = [] + clu_list = [] + for i in range(maxclust): + temp = [key for key, value in clu_index.items() if value == i + 1] + clu_list.append(temp) + logtemp = logslice(log, temp, ATTR_NAME) + clu_list_log.append(logtemp) + return clu_list_log, clu_list diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/util/__init__.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e46d5601d9821c01e818963b46df0b85ef5d379d --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.clustering.trace_attribute_driven.util import evaluation, filter_subsets diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/util/evaluation.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/util/evaluation.py new file mode 100644 index 0000000000000000000000000000000000000000..8831ec20d824caa127a2adf4d1aaf2e35f8b8874 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/util/evaluation.py @@ -0,0 +1,88 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from scipy.spatial.distance import squareform +import numpy as np +from pm4py.algo.clustering.trace_attribute_driven.variants import act_dist_calc +from pm4py.algo.clustering.trace_attribute_driven.variants import suc_dist_calc +from pm4py.algo.clustering.trace_attribute_driven.leven_dist import leven_dist_calc +from pm4py.algo.clustering.trace_attribute_driven.dfg import dfg_dist + + +def dfg_dis(loglist, percent, alpha): + size = len(loglist) + dist_mat = np.zeros((size, size)) + + for i in range(0, size - 1): + for j in range(i + 1, size): + (dist_act, dist_dfg) = dfg_dist.dfg_dist_calc(loglist[i], loglist[j]) + dist_mat[i][j] = dist_act * alpha + dist_dfg * (1 - alpha) + dist_mat[j][i] = dist_mat[i][j] + y = squareform(dist_mat) + return y + + +def eval_avg_variant(loglist, percent, alpha): + size = len(loglist) + dist_mat = np.zeros((size, size)) + + for i in range(0, size - 1): + for j in range(i + 1, size): + dist_act = act_dist_calc.act_sim_percent_avg(loglist[i], loglist[j], percent, percent) + dist_suc = suc_dist_calc.suc_sim_percent_avg(loglist[i], loglist[j], percent, percent) + dist_mat[i][j] = dist_act * alpha + dist_suc * (1 - alpha) + dist_mat[j][i] = dist_mat[i][j] + y = squareform(dist_mat) + + return y + + +def eval_DMM_variant(loglist, percent, alpha): + size = len(loglist) + dist_mat = np.zeros((size, size)) + + for i in range(0, size - 1): + for j in range(i + 1, size): + dist_act = act_dist_calc.act_sim_percent(loglist[i], loglist[j], percent, percent) + dist_suc = suc_dist_calc.suc_sim_percent(loglist[i], loglist[j], percent, percent) + dist_mat[i][j] = dist_act * alpha + dist_suc * (1 - alpha) + dist_mat[j][i] = dist_mat[i][j] + y = squareform(dist_mat) + return y + + +def eval_avg_leven(loglist, percent, alpha): + size = len(loglist) + dist_mat = np.zeros((size, size)) + + for i in range(0, size - 1): + for j in range(i + 1, size): + dist_mat[i][j] = leven_dist_calc.leven_dist_avg(loglist[i], loglist[j], percent, percent) + dist_mat[j][i] = dist_mat[i][j] + y = squareform(dist_mat) + return y + + +def eval_DMM_leven(loglist, percent, alpha): + size = len(loglist) + dist_mat = np.zeros((size, size)) + + for i in range(0, size - 1): + for j in range(i + 1, size): + dist_mat[i][j] = leven_dist_calc.leven_dist(loglist[i], loglist[j], percent, percent) + dist_mat[j][i] = dist_mat[i][j] + y = squareform(dist_mat) + return y diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/util/filter_subsets.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/util/filter_subsets.py new file mode 100644 index 0000000000000000000000000000000000000000..9a042c2159065b63bb2a98c85530ffa1b57e391c --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/util/filter_subsets.py @@ -0,0 +1,376 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import pandas as pd +import numpy as np +from collections import Counter +from pm4py.objects.log.obj import EventLog, Trace +from pm4py.objects.log.util.xes import DEFAULT_NAME_KEY +from pm4py.statistics.traces.generic.log import case_statistics +from pm4py.statistics.variants.log import get as variants_statistics +from pm4py.util import exec_utils +from pm4py.util import variants_util +from enum import Enum +from pm4py.util import constants, pandas_utils + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + SINGLE = "single" + BINARIZE = "binarize" + POSITIVE = "positive" + LOWER_PERCENT = "lower_percent" + + + +def apply_trace_attributes(log, list_of_values, parameters=None): + """ + Filter log by keeping only traces that has/has not certain case attribute value that belongs to the provided + values list + + Parameters + ----------- + log + Trace log + values + Allowed attribute values(if it's numerical value, [] is needed to make it a list) + parameters + Parameters of the algorithm, including: + activity_key -> Attribute identifying the case in the log + positive -> Indicate if events should be kept/removed + + Returns + ----------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + filtered_log = EventLog() + for trace in log: + new_trace = Trace() + + found = False + if attribute_key in trace.attributes: + attribute_value = trace.attributes[attribute_key] + if attribute_value in list_of_values: + found = True + + if (found and positive) or (not found and not positive): + new_trace = trace + else: + for attr in trace.attributes: + new_trace.attributes[attr] = trace.attributes[attr] + + if len(new_trace) > 0: + filtered_log.append(new_trace) + return filtered_log + + +def sublog2varlist(log, freq_thres, num): + ''' + extract lists of variants from selected sublogs together with frequency threshold to filter out infrequent variants + :param log: sublog containing the selected case attribute value + :param freq_thres: (int) frequency threshold to filter out infrequent variants + :return: lists of variant strings + ''' + variants_count = case_statistics.get_variant_statistics(log) + variants_count = sorted(variants_count, key=lambda x: x['count'], reverse=True) + filtered_var_list = [] + filtered_var_list_1 = [] + filtered_var_list_2 = [] + for i in range(len(variants_count)): + if variants_count[i]['count'] >= freq_thres: + filtered_var_list_1.append(variants_count[i]['variant']) # variant string + elif i < num: + filtered_var_list_2.append(variants_count[i]['variant']) + + # union set ensure the ordered union will be satisfied + filtered_var_list = filtered_var_list_1 + filtered_var_list_2 + str_var_list = [variants_util.get_activities_from_variant(v) for v in filtered_var_list] + + return str_var_list + + +def sublog_percent(log, upper_percent, parameters=None): + ''' + change variant dictionary got from sublog into dataframe, so that we can extract the frequency of each variant + :param log: same as sublog2varlist() + :param freq_thres: same as sublog2varlist() + :return: dataframe of variants with their counts together with the correspond var_list(until the percent ) + ''' + + if parameters is None: + parameters = {} + lower_percent = exec_utils.get_param_value(Parameters.LOWER_PERCENT, parameters, 0) + + variants_count = case_statistics.get_variant_statistics(log) + variants_count = sorted(variants_count, key=lambda x: x['count'], reverse=True) + df = pandas_utils.instantiate_dataframe_from_dict(variants_count) + # calculate the cumunative sum + csum = np.array(df['count']).cumsum() + csum = csum / csum[-1] + num_list = csum[csum <= upper_percent] + num_list_lower = csum[csum <= lower_percent] + # stop until the percent is satisfied + df_w_count = df.iloc[len(num_list_lower):len(num_list), :] + # get correspond var_list + filtered_var_list = df_w_count['variant'].values.tolist() + str_var_list = [variants_util.get_activities_from_variant(v) for v in filtered_var_list] + + return df_w_count, str_var_list + + +def sublog_percent2actlist(log, upper_percent, parameters=None): + ''' + just need to var list + :param log: same as sublog2varlist() + :param freq_thres: same as sublog2varlist() + :return: dataframe of variants with their counts together with the correspond var_list(until the percent ) + ''' + + if parameters is None: + parameters = {} + lower_percent = exec_utils.get_param_value(Parameters.LOWER_PERCENT, parameters, 0) + + variants_count = case_statistics.get_variant_statistics(log) + variants_count = sorted(variants_count, key=lambda x: x['count'], reverse=True) + df = pandas_utils.instantiate_dataframe_from_dict(variants_count) + # calculate the cumunative sum + csum = np.array(df['count']).cumsum() + csum = csum / csum[-1] + num_list = csum[csum <= upper_percent] + num_list_lower = csum[csum <= lower_percent] + # stop until the percent is satisfied + df_w_count = df.iloc[len(num_list_lower):len(num_list), :] + # get correspond var_list + filtered_var_list = df_w_count['variant'].values.tolist() + str_var_list = [variants_util.get_activities_from_variant(v) for v in filtered_var_list] + + return df_w_count, str_var_list + + +def sublog_percent2varlist(log, upper_percent, parameters=None): + ''' + just need to var list + :param log: same as sublog2varlist() + :param freq_thres: same as sublog2varlist() + :return: dataframe of variants with their counts together with the correspond var_list(until the percent ) + ''' + + if parameters is None: + parameters = {} + lower_percent = exec_utils.get_param_value(Parameters.LOWER_PERCENT, parameters, 0) + + variants_count = case_statistics.get_variant_statistics(log) + variants_count = sorted(variants_count, key=lambda x: x['count'], reverse=True) + df = pandas_utils.instantiate_dataframe_from_dict(variants_count) + # calculate the cumunative sum + csum = np.array(df['count']).cumsum() + csum = csum / csum[-1] + num_list = csum[csum <= upper_percent] + num_list_lower = csum[csum <= lower_percent] + # stop until the percent is satisfied + df_w_count = df.iloc[len(num_list_lower):len(num_list), :] + # get correspond var_list + filtered_var_list = df_w_count['variant'].values.tolist() + return df_w_count, filtered_var_list + + +def logslice_percent_act(log, unit): + ''' + slice the actlist per unit percent + :param log: + :param unit: + :return: + ''' + loglist = [] + freq_list = [] + sup = int(1 / unit) + num_list = np.array(range(0, sup)) * unit + + for i in range(len(num_list)): + (df, act_list) = sublog_percent2actlist(log, num_list[i] + unit, parameters={"lower_percent": num_list[i]}) + if len(act_list) != 0: + sum1 = np.array(df['count']).sum() + loglist.append(act_list) + freq_list.append(sum1) + return loglist, freq_list + + +def apply_variants_filter(log, admitted_variants, parameters=None): + """ + Filter log keeping/removing only provided variants + + Parameters + ----------- + log + Log object + admitted_variants + Admitted variants + parameters + Parameters of the algorithm, including: + activity_key -> Attribute identifying the activity in the log + positive -> Indicate if events should be kept/removed + """ + + if parameters is None: + parameters = {} + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + variants = variants_statistics.get_variants(log, parameters=parameters) + log = EventLog() + for variant in variants: + if (positive and variant in admitted_variants) or (not positive and variant not in admitted_variants): + for trace in variants[variant]: + log.append(trace) + return log + + +def logslice_percent(log, unit): + ''' + slice the log per unit percent + :param log: + :param unit: + :return: + ''' + loglist = [] + freq_list = [] + sup = int(1 / unit) + num_list = np.array(range(0, sup)) * unit + + for i in range(len(num_list)): + (df, var_list) = sublog_percent2varlist(log, num_list[i] + unit, parameters={"lower_percent": num_list[i]}) + if len(var_list) != 0: + log1 = apply_variants_filter(log, var_list, parameters={"positive": True}) + sum1 = np.array(df['count']).sum() + loglist.append(log1) + freq_list.append(sum1) + + return loglist, freq_list + + +def sublog2df_num(log, num): + ''' + change variant dictionary got from sublog into dataframe, so that we can extract the frequency of each variant + :param log: same as sublog2varlist() + :param freq_thres: same as sublog2varlist() + :return: dataframe of variants with their counts + ''' + variants_count = case_statistics.get_variant_statistics(log) + variants_count = sorted(variants_count, key=lambda x: x['count'], reverse=True) + df = pandas_utils.instantiate_dataframe_from_dict(variants_count) + df_w_count = df.iloc[0:num, :] + return df_w_count + + +def sublog2df(log, freq_thres, num): + ''' + change variant dictionary got from sublog into dataframe, so that we can extract the frequency of each variant + :param log: same as sublog2varlist() + :param freq_thres: same as sublog2varlist() + :return: dataframe of variants with their counts + ''' + variants_count = case_statistics.get_variant_statistics(log) + variants_count = sorted(variants_count, key=lambda x: x['count'], reverse=True) + df = pandas_utils.instantiate_dataframe_from_dict(variants_count) + df_w_count_1 = df[df['count'] >= freq_thres] + df_w_count_2 = df.iloc[0:num, :] + # take union of two dataframes + df_w_count = pandas_utils.merge(df_w_count_1, df_w_count_2, how='outer', on=['variant', 'count']) + # display(df_w_count['variant']) + return df_w_count + + +def act_dist(var_list_1, var_list_2, log1, log2, freq_thres): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = sublog2df(log1, freq_thres)['count'] + var_count_min = sublog2df(log2, freq_thres)['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = sublog2df(log2, freq_thres)['count'] + var_count_min = sublog2df(log1, freq_thres)['count'] + + dist_matrix = np.zeros((max_len, min_len)) + + for i in range(max_len): + if i < min_len: + for j in range(0, i + 1): + result = Counter(max_var[i]) # count number of occurrence of each element + df_1 = pandas_utils.instantiate_dataframe_from_dict(dict(result), orient='index', + columns=['freq_1']) # convert dict to dataframe + df_1 = df_1.reset_index().rename(columns={'index': 'var'}) + result = Counter(min_var[j]) # count number of occurrence of each element + df_2 = pandas_utils.instantiate_dataframe_from_dict(dict(result), orient='index', columns=['freq_2']) + df_2 = df_2.reset_index().rename(columns={'index': 'var'}) + df = pandas_utils.merge(df_1, df_2, how='outer', on='var').fillna( + 0) # merge two variants and replace empty value by zero + df['prod'] = df.apply(lambda x: x['freq_1'] * x['freq_2'], axis=1) + df['sq_1'] = df.apply(lambda x: x['freq_1'] ** 2, axis=1) + df['sq_2'] = df.apply(lambda x: x['freq_2'] ** 2, axis=1) + innerprod = df['prod'].sum() + sqrt_1 = np.sqrt(df['sq_1'].sum()) + sqrt_2 = np.sqrt(df['sq_2'].sum()) + # dist_matrix[i][j] = innerprod / (sqrt_1 * sqrt_2) + dist_matrix[i][j] = (innerprod / (sqrt_1 * sqrt_2)) * var_count_max.iloc[i] * var_count_min.iloc[ + j] # weighted with trace frequency + dist_matrix[j][i] = dist_matrix[i][j] + if i >= min_len: + for j in range(min_len): + result = Counter(max_var[i]) # count number of occurrence of each element + df_1 = pandas_utils.instantiate_dataframe_from_dict(dict(result), orient='index', columns=['freq_1']) + df_1 = df_1.reset_index().rename(columns={'index': 'var'}) + result = Counter(min_var[j]) # count number of occurrence of each element + df_2 = pandas_utils.instantiate_dataframe_from_dict(dict(result), orient='index', columns=['freq_2']) + df_2 = df_2.reset_index().rename(columns={'index': 'var'}) + df = pandas_utils.merge(df_1, df_2, how='outer', on='var').fillna(0) + df['prod'] = df.apply(lambda x: x['freq_1'] * x['freq_2'], axis=1) + df['sq_1'] = df.apply(lambda x: x['freq_1'] ** 2, axis=1) + df['sq_2'] = df.apply(lambda x: x['freq_2'] ** 2, axis=1) + innerprod = df['prod'].sum() + sqrt_1 = np.sqrt(df['sq_1'].sum()) + sqrt_2 = np.sqrt(df['sq_2'].sum()) + # dist_matrix[i][j] = innerprod / (sqrt_1 * sqrt_2) + dist_matrix[i][j] = (innerprod / (sqrt_1 * sqrt_2)) * var_count_max.iloc[i] * var_count_min.iloc[ + j] # weighted with trace frequency + if len(var_list_1) >= len(var_list_2): + dist_matrix = dist_matrix + else: + dist_matrix = np.transpose(dist_matrix) + + return dist_matrix diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/__init__.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..55a6bacbb698cb9f6c53bbd8873749dc930cb25e --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.clustering.trace_attribute_driven.variants import act_dist_calc, logslice_dist, sim_calc, suc_dist_calc diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/act_dist_calc.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/act_dist_calc.py new file mode 100644 index 0000000000000000000000000000000000000000..3abdb034b6ec0a6045d4b13cc3affad7d6954a55 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/act_dist_calc.py @@ -0,0 +1,430 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.clustering.trace_attribute_driven.util import filter_subsets +import pandas as pd +import numpy as np +from collections import Counter +from scipy.spatial.distance import pdist +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants, pandas_utils + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + SINGLE = "single" + BINARIZE = "binarize" + POSITIVE = "positive" + LOWER_PERCENT = "lower_percent" + + + +def occu_var_act(var_list): + ''' + return dataframe that shows the frequency of each element(activity) in each variant list + :param var_list: + :return: + ''' + result = Counter(var_list) # count number of occurrence of each element + df = pandas_utils.instantiate_dataframe_from_dict(dict(result), orient='index', columns=['freq']) + df = df.reset_index().rename(columns={'index': 'var'}) + + return df + + +def act_sim(var_list_1, var_list_2, log1, log2, freq_thres, num, parameters=None): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + if parameters is None: + parameters = {} + + single = exec_utils.get_param_value(Parameters.SINGLE, parameters, False) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + + dist_matrix = np.zeros((max_len, min_len)) + max_per_var = np.zeros(max_len) + max_freq = np.zeros(max_len) + col_sum = np.zeros(max_len) + + if var_list_1 == var_list_2: + print("Please give different variant lists!") + else: + for i in range(max_len): + dist_vec = np.zeros(min_len) + df_1 = occu_var_act(max_var[i]) + for j in range(min_len): + df_2 = occu_var_act(min_var[j]) + df = pandas_utils.merge(df_1, df_2, how='outer', on='var').fillna(0) + # cosine similarity is used to calculate trace similarity + dist_vec[j] = (pdist(np.array([df['freq_x'].values, df['freq_y'].values]), 'cosine')[0]) + dist_matrix[i][j] = dist_vec[j] + if (single): + if abs(dist_vec[j]) <= 1e-6: + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[j] + max_per_var[i] = dist_vec[j] * max_freq[i] + break + + elif j == (min_len - 1): + max_loc_col = np.argmin(dist_vec) + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] + else: + col_sum[i] += dist_vec[j] * var_count_max.iloc[i] * var_count_min.iloc[j] + + if single: + dist = np.sum(max_per_var) / np.sum(max_freq) + else: + vmax_vec = (var_count_max.values).reshape(-1, 1) + vmin_vec = (var_count_min.values).reshape(1, -1) + vec_sum = np.sum(np.dot(vmax_vec, vmin_vec)) + dist = np.sum(col_sum) / vec_sum + + return dist + + +def act_sim_med(var_list_1, var_list_2, log1, log2, freq_thres, num, parameters=None): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + if parameters is None: + parameters = {} + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + + dist_matrix = np.zeros((max_len, min_len)) + max_per_var = np.zeros(max_len) + max_freq = np.zeros(max_len) + + if var_list_1 == var_list_2: + print("Please give different variant lists!") + else: + for i in range(max_len): + dist_vec = np.zeros(min_len) + df_1 = occu_var_act(max_var[i]) + for j in range(min_len): + df_2 = occu_var_act(min_var[j]) + df = pandas_utils.merge(df_1, df_2, how='outer', on='var').fillna(0) + # cosine similarity is used to calculate trace similarity + dist_vec[j] = (pdist(np.array([df['freq_x'].values, df['freq_y'].values]), 'cosine')[0]) + dist_matrix[i][j] = 1 - dist_vec[j] + if (j == min_len - 1): + med_loc = np.argsort(dist_vec)[len(dist_vec) // 2] + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[med_loc] + max_per_var[i] = dist_vec[med_loc] * max_freq[i] + + # single linkage + dist = np.sum(max_per_var) / np.sum(max_freq) + + return dist + + +def act_sim_dual(var_list_1, var_list_2, log1, log2, freq_thres, num, parameters=None): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + if parameters is None: + parameters = {} + + single = exec_utils.get_param_value(Parameters.SINGLE, parameters, False) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + + dist_matrix = np.zeros((max_len, min_len)) + max_per_var = np.zeros(max_len) + max_freq = np.zeros(max_len) + min_freq = np.zeros(min_len) + min_per_var = np.zeros(min_len) + col_sum = np.zeros(max_len) + index_rec = set(list(range(min_len))) + + if var_list_1 == var_list_2: + print("Please give different variant lists!") + else: + for i in range(max_len): + dist_vec = np.zeros(min_len) + df_1 = occu_var_act(max_var[i]) + for j in range(min_len): + df_2 = occu_var_act(min_var[j]) + df = pandas_utils.merge(df_1, df_2, how='outer', on='var').fillna(0) + # cosine similarity is used to calculate trace similarity + dist_vec[j] = (pdist(np.array([df['freq_x'].values, df['freq_y'].values]), 'cosine')[0]) + dist_matrix[i][j] = dist_vec[j] + if j == (min_len - 1): + # max_loc_col = np.argmax(dist_matrix[i, :]) # location of max value + max_loc_col = np.argmin(dist_vec) + if abs(dist_vec[max_loc_col]) <= 1e-6: + index_rec.discard(max_loc_col) + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] * 2 + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] * 2 + else: + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] + + for i in list(index_rec): + min_loc_row = np.argmin(dist_matrix[:, i]) + min_freq[i] = var_count_max.iloc[min_loc_row] * var_count_min.iloc[i] + min_per_var[i] = dist_matrix[min_loc_row, i] * min_freq[i] + + if single: + dist = (np.sum(max_per_var) + np.sum(min_per_var)) / (np.sum(max_freq) + np.sum(min_freq)) + else: + vmax_vec = (var_count_max.values).reshape(-1, 1) + vmin_vec = (var_count_min.values).reshape(1, -1) + vec_sum = np.sum(np.dot(vmax_vec, vmin_vec)) + dist = np.sum(col_sum) / vec_sum + + return dist + + +def act_sim_percent(log1, log2, percent_1, percent_2): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + (dataframe_1, var_list_1) = filter_subsets.sublog_percent(log1, percent_1) + (dataframe_2, var_list_2) = filter_subsets.sublog_percent(log2, percent_2) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = dataframe_1['count'] + var_count_min = dataframe_2['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = dataframe_2['count'] + var_count_min = dataframe_1['count'] + + dist_matrix = np.zeros((max_len, min_len)) + max_per_var = np.zeros(max_len) + max_freq = np.zeros(max_len) + min_freq = np.zeros(min_len) + min_per_var = np.zeros(min_len) + index_rec = set(list(range(min_len))) + + if var_list_1 == var_list_2: + dist = 0 + else: + for i in range(max_len): + dist_vec = np.zeros(min_len) + df_1 = occu_var_act(max_var[i]) + for j in range(min_len): + df_2 = occu_var_act(min_var[j]) + df = pandas_utils.merge(df_1, df_2, how='outer', on='var').fillna(0) + # cosine similarity is used to calculate trace similarity + dist_vec[j] = (pdist(np.array([df['freq_x'].values, df['freq_y'].values]), 'cosine')[0]) + dist_matrix[i][j] = dist_vec[j] + if j == (min_len - 1): + max_loc_col = np.argmin(dist_vec) + if abs(dist_vec[max_loc_col]) <= 1e-8: + index_rec.discard(max_loc_col) + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] * 2 + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] * 2 + else: + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] + + if (len(index_rec) != 0): + for i in list(index_rec): + min_loc_row = np.argmin(dist_matrix[:, i]) + min_freq[i] = var_count_max.iloc[min_loc_row] * var_count_min.iloc[i] + min_per_var[i] = dist_matrix[min_loc_row, i] * min_freq[i] + + dist = (np.sum(max_per_var) + np.sum(min_per_var)) / (np.sum(max_freq) + np.sum(min_freq)) + + return dist + + +def act_sim_percent_avg(log1, log2, percent_1, percent_2): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + (dataframe_1, var_list_1) = filter_subsets.sublog_percent(log1, percent_1) + (dataframe_2, var_list_2) = filter_subsets.sublog_percent(log2, percent_2) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = dataframe_1['count'] + var_count_min = dataframe_2['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = dataframe_2['count'] + var_count_min = dataframe_1['count'] + + dist_matrix = np.zeros((max_len, min_len)) + col_sum = np.zeros(max_len) + + for i in range(max_len): + dist_vec = np.zeros(min_len) + df_1 = occu_var_act(max_var[i]) + for j in range(min_len): + df_2 = occu_var_act(min_var[j]) + df = pandas_utils.merge(df_1, df_2, how='outer', on='var').fillna(0) + dist_vec[j] = (pdist(np.array([df['freq_x'].values, df['freq_y'].values]), 'cosine')[0]) + col_sum[i] += dist_vec[j] * var_count_max.iloc[i] * var_count_min.iloc[j] + dist_matrix[i][j] = dist_vec[j] + + vmax_vec = (var_count_max.values).reshape(-1, 1) + vmin_vec = (var_count_min.values).reshape(1, -1) + vec_sum = np.sum(np.dot(vmax_vec, vmin_vec)) + dist = np.sum(col_sum) / vec_sum + + return dist + + +def act_sim_percent_avg_actset(log1, log2, percent_1, percent_2, actset): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + (dataframe_1, var_list_1) = filter_subsets.sublog_percent(log1, percent_1) + (dataframe_2, var_list_2) = filter_subsets.sublog_percent(log2, percent_2) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = dataframe_1['count'] + var_count_min = dataframe_2['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = dataframe_2['count'] + var_count_min = dataframe_1['count'] + + dist_matrix = np.zeros((max_len, min_len)) + col_sum = np.zeros(max_len) + + for i in range(max_len): + dist_vec = np.zeros(min_len) + df_1 = occu_var_act(max_var[i]) + df_1 = pandas_utils.merge(actset['var'], df_1, how='outer', on='var').fillna(0) + for j in range(min_len): + df_2 = occu_var_act(min_var[j]) + df = pandas_utils.merge(df_1, df_2, how='outer', on='var').fillna(0) + # cosine similarity is used to calculate trace similarity + dist_vec[j] = (pdist(np.array([df['freq_x'].values, df['freq_y'].values]), 'cosine')[0]) + col_sum[i] += dist_vec[j] * var_count_max.iloc[i] * var_count_min.iloc[j] + dist_matrix[i][j] = dist_vec[j] + + vmax_vec = (var_count_max.values).reshape(-1, 1) + vmin_vec = (var_count_min.values).reshape(1, -1) + vec_sum = np.sum(np.dot(vmax_vec, vmin_vec)) + dist = np.sum(col_sum) / vec_sum + + return dist diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/logslice_dist.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/logslice_dist.py new file mode 100644 index 0000000000000000000000000000000000000000..8cc3a10a60eb50fbca060e73194705eb4b4f841e --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/logslice_dist.py @@ -0,0 +1,156 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from scipy.spatial.distance import pdist +from pm4py.statistics.attributes.log import get as attributes_filter +from pm4py.util import constants, pandas_utils +from pm4py.algo.discovery.dfg.variants import native +import pandas as pd +from pm4py.algo.clustering.trace_attribute_driven.util import filter_subsets +from pm4py.algo.clustering.trace_attribute_driven.variants import act_dist_calc + + +def log2sublog(log, str): + tracefilter_log = filter_subsets.apply_trace_attributes(log, [str], + parameters={ + constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: "AMOUNT_REQ", + "positive": True}) + + return tracefilter_log + + +def slice_dist_suc(log_1, log_2, unit): + (log1_list, freq1_list) = filter_subsets.logslice_percent(log_1, unit) + (log2_list, freq2_list) = filter_subsets.logslice_percent(log_2, unit) + + if len(freq1_list) >= len(freq2_list): + max_len = len(freq1_list) + min_len = len(freq2_list) + max_log = log1_list + min_log = log2_list + var_count_max = freq1_list + var_count_min = freq2_list + + else: + max_len = len(freq2_list) + min_len = len(freq1_list) + max_log = log2_list + min_log = log1_list + var_count_max = freq2_list + var_count_min = freq1_list + + dist_matrix = np.zeros((max_len, min_len)) + max_per_var = np.zeros(max_len) + max_freq = np.zeros(max_len) + min_freq = np.zeros(min_len) + min_per_var = np.zeros(min_len) + index_rec = set(list(range(min_len))) + + if log1_list == log2_list: + print("Please give different variant lists!") + dist = 0 + else: + for i in range(max_len): + dist_vec = np.zeros(min_len) + dfg1 = native.apply(max_log[i]) + df1_dfg = act_dist_calc.occu_var_act(dfg1) + for j in range(min_len): + dfg2 = native.apply(min_log[j]) + df2_dfg = act_dist_calc.occu_var_act(dfg2) + df_dfg = pandas_utils.merge(df1_dfg, df2_dfg, how='outer', on='var').fillna(0) + dist_vec[j] = pdist(np.array([df_dfg['freq_x'].values, df_dfg['freq_y'].values]), 'cosine')[0] + dist_matrix[i][j] = dist_vec[j] + if j == (min_len - 1): + max_loc_col = np.argmin(dist_vec) + if abs(dist_vec[max_loc_col]) <= 1e-8: + index_rec.discard(max_loc_col) + max_freq[i] = var_count_max[i] * var_count_min[max_loc_col] * 2 + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] * 2 + else: + max_freq[i] = var_count_max[i] * var_count_min[max_loc_col] + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] + + if (len(index_rec) != 0): + for i in list(index_rec): + min_loc_row = np.argmin(dist_matrix[:, i]) + min_freq[i] = var_count_max[min_loc_row] * var_count_min[i] + min_per_var[i] = dist_matrix[min_loc_row, i] * min_freq[i] + dist = (np.sum(max_per_var) + np.sum(min_per_var)) / (np.sum(max_freq) + np.sum(min_freq)) + + return dist + + +def slice_dist_act(log_1, log_2, unit, parameters=None): + (log1_list, freq1_list) = filter_subsets.logslice_percent(log_1, unit) + (log2_list, freq2_list) = filter_subsets.logslice_percent(log_2, unit) + + if len(freq1_list) >= len(freq2_list): + max_len = len(freq1_list) + min_len = len(freq2_list) + max_log = log1_list + min_log = log2_list + var_count_max = freq1_list + var_count_min = freq2_list + + else: + max_len = len(freq2_list) + min_len = len(freq1_list) + max_log = log2_list + min_log = log1_list + var_count_max = freq2_list + var_count_min = freq1_list + + dist_matrix = np.zeros((max_len, min_len)) + max_per_var = np.zeros(max_len) + max_freq = np.zeros(max_len) + min_freq = np.zeros(min_len) + min_per_var = np.zeros(min_len) + index_rec = set(list(range(min_len))) + + if log1_list == log2_list: + print("Please give different variant lists!") + dist = 0 + else: + for i in range(max_len): + dist_vec = np.zeros(min_len) + act1 = attributes_filter.get_attribute_values(max_log[i], "concept:name") + df1_act = act_dist_calc.occu_var_act(act1) + for j in range(min_len): + act2 = attributes_filter.get_attribute_values(min_log[j], "concept:name") + df2_act = act_dist_calc.occu_var_act(act2) + df_act = pandas_utils.merge(df1_act, df2_act, how='outer', on='var').fillna(0) + dist_vec[j] = pdist(np.array([df_act['freq_x'].values, df_act['freq_y'].values]), 'cosine')[0] + dist_matrix[i][j] = dist_vec[j] + if j == (min_len - 1): + max_loc_col = np.argmin(dist_vec) + if abs(dist_vec[max_loc_col]) <= 1e-8: + index_rec.discard(max_loc_col) + max_freq[i] = var_count_max[i] * var_count_min[max_loc_col] * 2 + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] * 2 + else: + max_freq[i] = var_count_max[i] * var_count_min[max_loc_col] + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] + + if (len(index_rec) != 0): + for i in list(index_rec): + min_loc_row = np.argmin(dist_matrix[:, i]) + min_freq[i] = var_count_max[min_loc_row] * var_count_min[i] + min_per_var[i] = dist_matrix[min_loc_row, i] * min_freq[i] + + dist = (np.sum(max_per_var) + np.sum(min_per_var)) / (np.sum(max_freq) + np.sum(min_freq)) + + return dist diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/sim_calc.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/sim_calc.py new file mode 100644 index 0000000000000000000000000000000000000000..d95b22a2f62389160284ebf0e64e778d6795f45f --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/sim_calc.py @@ -0,0 +1,135 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import pandas as pd +import numpy as np +from pm4py.algo.clustering.trace_attribute_driven.variants import act_dist_calc, suc_dist_calc +from pm4py.algo.clustering.trace_attribute_driven.util import filter_subsets +from scipy.spatial.distance import pdist +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants, pandas_utils + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + SINGLE = "single" + BINARIZE = "binarize" + POSITIVE = "positive" + LOWER_PERCENT = "lower_percent" + + + +def inner_prod_calc(df): + innerprod = ((df.loc[:, 'freq_x']) * (df.loc[:, 'freq_y'])).sum() + sqrt_1 = np.sqrt(((df.loc[:, 'freq_x']) ** 2).sum()) + sqrt_2 = np.sqrt(((df.loc[:, 'freq_y']) ** 2).sum()) + return innerprod, sqrt_1, sqrt_2 + + +def dist_calc(var_list_1, var_list_2, log1, log2, freq_thres, num, alpha, parameters=None): + ''' + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :param alpha: the weight parameter between activity similarity and succession similarity, which belongs to (0,1) + :param parameters: state which linkage method to use + :return: the similarity value between two sublogs + ''' + + if parameters is None: + parameters = {} + + single = exec_utils.get_param_value(Parameters.SINGLE, parameters, False) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + + # act + max_per_var_act = np.zeros(max_len) + max_freq_act = np.zeros(max_len) + col_sum_act = np.zeros(max_len) + + # suc + max_per_var_suc = np.zeros(max_len) + col_sum_suc = np.zeros(max_len) + max_freq_suc = np.zeros(max_len) + + if var_list_1 == var_list_2: + print("Please give different variant lists!") + else: + for i in range(max_len): + dist_vec_act = np.zeros(min_len) + dist_vec_suc = np.zeros(min_len) + df_1_act = act_dist_calc.occu_var_act(max_var[i]) + df_1_suc = suc_dist_calc.occu_var_suc(max_var[i], parameters={"binarize": True}) + for j in range(min_len): + df_2_act = act_dist_calc.occu_var_act(min_var[j]) + df_2_suc = suc_dist_calc.occu_var_suc(min_var[j], parameters={"binarize": True}) + + df_act = pandas_utils.merge(df_1_act, df_2_act, how='outer', on='var').fillna(0) + df_suc = pandas_utils.merge(df_1_suc, df_2_suc, how='outer', on='direct_suc').fillna(0) + + dist_vec_act[j] = (pdist(np.array([df_act['freq_x'].values, df_act['freq_y'].values]), 'cosine')[0]) + dist_vec_suc[j] = (pdist(np.array([df_suc['freq_x'].values, df_suc['freq_y'].values]), 'cosine')[0]) + + if (single): + if (abs(dist_vec_act[j]) <= 1e-8) and (abs(dist_vec_suc[j]) <= 1e-6): # ensure both are 1 + max_freq_act[i] = var_count_max.iloc[i] * var_count_min.iloc[j] + max_freq_suc[i] = max_freq_act[i] + max_per_var_act[i] = dist_vec_act[j] * max_freq_act[i] + max_per_var_suc[i] = dist_vec_suc[j] * max_freq_suc[i] + + break + elif j == (min_len - 1): + max_loc_col_act = np.argmin(dist_vec_act) # location of max value + max_loc_col_suc = np.argmin(dist_vec_suc) # location of max value + max_freq_act[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col_act] + max_freq_suc[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col_suc] + max_per_var_act[i] = dist_vec_act[max_loc_col_act] * max_freq_act[i] + max_per_var_suc[i] = dist_vec_suc[max_loc_col_suc] * max_freq_suc[i] + + else: + col_sum_act[i] += dist_vec_act[j] * var_count_max.iloc[i] * var_count_min.iloc[j] + col_sum_suc[i] += dist_vec_suc[j] * var_count_max.iloc[i] * var_count_min.iloc[j] + if (single): + # single linkage + dist_act = np.sum(max_per_var_act) / np.sum(max_freq_act) + dist_suc = np.sum(max_per_var_suc) / np.sum(max_freq_suc) + dist = dist_act * alpha + dist_suc * (1 - alpha) + else: + vmax_vec = (var_count_max.values).reshape(-1, 1) + vmin_vec = (var_count_min.values).reshape(1, -1) + vec_sum = np.sum(np.dot(vmax_vec, vmin_vec)) + dist = (np.sum(col_sum_act) * alpha + np.sum(col_sum_suc) * (1 - alpha)) / vec_sum + + return dist diff --git a/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/suc_dist_calc.py b/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/suc_dist_calc.py new file mode 100644 index 0000000000000000000000000000000000000000..429dbb40617d2988979f15d204cea9ad93c4ed37 --- /dev/null +++ b/pm4py/pm4py/algo/clustering/trace_attribute_driven/variants/suc_dist_calc.py @@ -0,0 +1,364 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import pandas as pd +import numpy as np +from pm4py.algo.clustering.trace_attribute_driven.util import filter_subsets +from scipy.spatial.distance import pdist +from collections import Counter +from pm4py.util import exec_utils, pandas_utils +from enum import Enum +from pm4py.util import constants + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + SINGLE = "single" + BINARIZE = "binarize" + POSITIVE = "positive" + LOWER_PERCENT = "lower_percent" + + + +def occu_suc(dfg, filter_percent): + ''' + + :param dfg: a counter containing all the direct succession relationship with frequency + :param filter_percent: clarify the percentage of direct succession one wants to preserve + :return: dataframe of direct succession relationship with frequency + ''' + + df = pandas_utils.instantiate_dataframe_from_dict(dict(dfg), orient='index', columns=['freq']) + df = df.sort_values(axis=0, by=['freq'], ascending=False) + df = df.reset_index().rename(columns={'index': 'suc'}) + # delete duplicated successions + df = df.drop_duplicates('suc', keep='first') + # delete self succession + # filter out direct succession by percentage + filter = list(range(0, round(filter_percent * len(df)))) + df = pandas_utils.insert_index(df) + df = df[df[constants.DEFAULT_INDEX_KEY].isin(filter)].reset_index(drop=True) + return df + + +def occu_var_suc(var_list, parameters=None): + ''' + return dataframe that shows the frequency of each element(direct succession) in each variant list + :param var_list: + :param parameters: binarize states if user wants to binarize the frequency, default is binarized + :return: + ''' + if parameters is None: + parameters = {} + + binarize = exec_utils.get_param_value(Parameters.BINARIZE, parameters, True) + + comb_list = [var_list[i] + constants.DEFAULT_VARIANT_SEP + var_list[i + 1] for i in range(len(var_list) - 1)] + result = Counter(comb_list) # count number of occurrence of each element + df = pandas_utils.instantiate_dataframe_from_dict(dict(result), orient='index', columns=['freq']) + df = df.reset_index().rename(columns={'index': 'direct_suc'}) + if (binarize): + # Binarize succession frequency (optional) + df.loc[df.freq > 1, 'freq'] = 1 + return df + else: + return df + + +def suc_sim(var_list_1, var_list_2, log1, log2, freq_thres, num, parameters=None): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + if parameters is None: + parameters = {} + + single = exec_utils.get_param_value(Parameters.SINGLE, parameters, False) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + + dist_matrix = np.zeros((max_len, min_len)) + max_per_var = np.zeros(max_len) + max_freq = np.zeros(max_len) + col_sum = np.zeros(max_len) + + if var_list_1 == var_list_2: + print("Please give different variant lists!") + else: + for i in range(max_len): + dist_vec = np.zeros(min_len) + df_1 = occu_var_suc(max_var[i], parameters={"binarize": False}) + for j in range(min_len): + df_2 = occu_var_suc(min_var[j], parameters={"binarize": False}) + df = pandas_utils.merge(df_1, df_2, how='outer', on='direct_suc').fillna(0) + # cosine similarity is used to calculate trace similarity + dist_vec[j] = (pdist(np.array([df['freq_x'].values, df['freq_y'].values]), 'cosine')[0]) + + dist_matrix[i][j] = dist_vec[j] + if (single): + if abs(dist_vec[j]) <= 1e-8: + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[j] + max_per_var[i] = dist_vec[j] * max_freq[i] + + break + elif j == (min_len - 1): + max_loc_col = np.argmin(dist_vec) # location of max value + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] + else: + col_sum[i] += dist_vec[j] * var_count_max.iloc[i] * var_count_min.iloc[j] + + if (single): + # single linkage + dist = np.sum(max_per_var) / np.sum(max_freq) + else: + vmax_vec = (var_count_max.values).reshape(-1, 1) + vmin_vec = (var_count_min.values).reshape(1, -1) + vec_sum = np.sum(np.dot(vmax_vec, vmin_vec)) + dist = np.sum(col_sum) / vec_sum + + return dist + + +def suc_sim_dual(var_list_1, var_list_2, log1, log2, freq_thres, num, parameters=None): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + if parameters is None: + parameters = {} + + single = exec_utils.get_param_value(Parameters.SINGLE, parameters, False) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = filter_subsets.sublog2df(log2, freq_thres, num)['count'] + var_count_min = filter_subsets.sublog2df(log1, freq_thres, num)['count'] + + dist_matrix = np.zeros((max_len, min_len)) + max_per_var = np.zeros(max_len) + max_freq = np.zeros(max_len) + min_freq = np.zeros(min_len) + min_per_var = np.zeros(min_len) + col_sum = np.zeros(max_len) + index_rec = set(list(range(min_len))) + + if var_list_1 == var_list_2: + print("Please give different variant lists!") + else: + for i in range(max_len): + dist_vec = np.zeros(min_len) + df_1 = occu_var_suc(max_var[i], parameters={"binarize": False}) + for j in range(min_len): + df_2 = occu_var_suc(min_var[j], parameters={"binarize": False}) + df = pandas_utils.merge(df_1, df_2, how='outer', on='direct_suc').fillna(0) + # cosine similarity is used to calculate trace similarity + dist_vec[j] = (pdist(np.array([df['freq_x'].values, df['freq_y'].values]), 'cosine')[0]) + dist_matrix[i][j] = dist_vec[j] + + if j == (min_len - 1): + max_loc_col = np.argmin(dist_vec) + if abs(dist_vec[max_loc_col]) <= 1e-8: + index_rec.discard(max_loc_col) + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] * 2 + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] * 2 + else: + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] + + if (len(index_rec) != 0): + for i in list(index_rec): + min_loc_row = np.argmin(dist_matrix[:, i]) + min_freq[i] = var_count_max.iloc[min_loc_row] * var_count_min.iloc[i] + min_per_var[i] = dist_matrix[min_loc_row, i] * min_freq[i] + + if (single): + # single linkage + dist = np.sum(max_per_var) / np.sum(max_freq) + else: + vmax_vec = (var_count_max.values).reshape(-1, 1) + vmin_vec = (var_count_min.values).reshape(1, -1) + vec_sum = np.sum(np.dot(vmax_vec, vmin_vec)) + dist = np.sum(col_sum) / vec_sum + + return dist + + +def suc_sim_percent(log1, log2, percent_1, percent_2): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + (dataframe_1, var_list_1) = filter_subsets.sublog_percent(log1, percent_1) + (dataframe_2, var_list_2) = filter_subsets.sublog_percent(log2, percent_2) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = dataframe_1['count'] + var_count_min = dataframe_2['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = dataframe_2['count'] + var_count_min = dataframe_1['count'] + + dist_matrix = np.zeros((max_len, min_len)) + max_per_var = np.zeros(max_len) + max_freq = np.zeros(max_len) + min_freq = np.zeros(min_len) + min_per_var = np.zeros(min_len) + col_sum = np.zeros(max_len) + index_rec = set(list(range(min_len))) + + if var_list_1 == var_list_2: + dist = 0 + else: + for i in range(max_len): + dist_vec = np.zeros(min_len) + df_1 = occu_var_suc(max_var[i], parameters={"binarize": False}) + for j in range(min_len): + df_2 = occu_var_suc(min_var[j], parameters={"binarize": False}) + df = pandas_utils.merge(df_1, df_2, how='outer', on='direct_suc').fillna(0) + # cosine similarity is used to calculate trace similarity + dist_vec[j] = (pdist(np.array([df['freq_x'].values, df['freq_y'].values]), 'cosine')[0]) + if (np.isnan(dist_vec[j]) == True): + dist_vec[j] = 1 + dist_matrix[i][j] = dist_vec[j] + if j == (min_len - 1): + max_loc_col = np.argmin(dist_vec) + if abs(dist_vec[max_loc_col]) <= 1e-8: + index_rec.discard(max_loc_col) + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] * 2 + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] * 2 + else: + max_freq[i] = var_count_max.iloc[i] * var_count_min.iloc[max_loc_col] + max_per_var[i] = dist_vec[max_loc_col] * max_freq[i] + + if (len(index_rec) != 0): + for i in list(index_rec): + min_loc_row = np.argmin(dist_matrix[:, i]) + min_freq[i] = var_count_max.iloc[min_loc_row] * var_count_min.iloc[i] + min_per_var[i] = dist_matrix[min_loc_row, i] * min_freq[i] + + # single linkage + dist = (np.sum(max_per_var) + np.sum(min_per_var)) / (np.sum(max_freq) + np.sum(min_freq)) + + return dist + + +def suc_sim_percent_avg(log1, log2, percent_1, percent_2): + ''' + + this function compare the activity similarity between two sublogs via the two lists of variants. + :param var_list_1: lists of variants in sublog 1 + :param var_list_2: lists of variants in sublog 2 + :param freq_thres: same as sublog2df() + :param log1: input sublog1 of sublog2df(), which must correspond to var_list_1 + :param log2: input sublog2 of sublog2df(), which must correspond to var_list_2 + :return: the distance matrix between 2 sublogs in which each element is the distance between two variants. + ''' + + (dataframe_1, var_list_1) = filter_subsets.sublog_percent(log1, percent_1) + (dataframe_2, var_list_2) = filter_subsets.sublog_percent(log2, percent_2) + + if len(var_list_1) >= len(var_list_2): + max_len = len(var_list_1) + min_len = len(var_list_2) + max_var = var_list_1 + min_var = var_list_2 + var_count_max = dataframe_1['count'] + var_count_min = dataframe_2['count'] + else: + max_len = len(var_list_2) + min_len = len(var_list_1) + max_var = var_list_2 + min_var = var_list_1 + var_count_max = dataframe_2['count'] + var_count_min = dataframe_1['count'] + + dist_matrix = np.zeros((max_len, min_len)) + col_sum = np.zeros(max_len) + + for i in range(max_len): + dist_vec = np.zeros(min_len) + df_1 = occu_var_suc(max_var[i], parameters={"binarize": False}) + for j in range(min_len): + df_2 = occu_var_suc(min_var[j], parameters={"binarize": False}) + df = pandas_utils.merge(df_1, df_2, how='outer', on='direct_suc').fillna(0) + # cosine similarity is used to calculate trace similarity + dist_vec[j] = (pdist(np.array([df['freq_x'].values, df['freq_y'].values]), 'cosine')[0]) + if (np.isnan(dist_vec[j]) == True): + dist_vec[j] = 1 + dist_matrix[i][j] = dist_vec[j] + col_sum[i] += dist_vec[j] * var_count_max.iloc[i] * var_count_min.iloc[j] + + # single linkage + vmax_vec = (var_count_max.values).reshape(-1, 1) + vmin_vec = (var_count_min.values).reshape(1, -1) + vec_sum = np.sum(np.dot(vmax_vec, vmin_vec)) + dist = np.sum(col_sum) / vec_sum + + return dist diff --git a/pm4py/pm4py/algo/comparison/__init__.py b/pm4py/pm4py/algo/comparison/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..68ebc430745af3fc5e7a80b9b65999310be0b3b2 --- /dev/null +++ b/pm4py/pm4py/algo/comparison/__init__.py @@ -0,0 +1,20 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util + +if importlib.util.find_spec("matplotlib"): + from pm4py.algo.comparison import petrinet diff --git a/pm4py/pm4py/algo/comparison/petrinet/__init__.py b/pm4py/pm4py/algo/comparison/petrinet/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..96e4e50995c8f3fed3b6df2467dba663da516228 --- /dev/null +++ b/pm4py/pm4py/algo/comparison/petrinet/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.comparison.petrinet import element_usage_comparison diff --git a/pm4py/pm4py/algo/comparison/petrinet/element_usage_comparison.py b/pm4py/pm4py/algo/comparison/petrinet/element_usage_comparison.py new file mode 100644 index 0000000000000000000000000000000000000000..f46cd0526f3483215d76153201490360fb98eab7 --- /dev/null +++ b/pm4py/pm4py/algo/comparison/petrinet/element_usage_comparison.py @@ -0,0 +1,157 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.tokenreplay import algorithm as tr_algorithm +from pm4py.util.colors import get_string_from_int_below_255 +from collections import Counter +from copy import copy +import matplotlib as mpl +import matplotlib.cm as cm +import math +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.conversion.log import converter as log_converter +import pandas as pd + + +def give_color_to_direction_dynamic(dir): + """ + Assigns a color to the direction (dynamic-defined colors) + + Parameters + -------------- + dir + Direction + + Returns + -------------- + col + Color + """ + dir = 0.5 + 0.5 * dir + norm = mpl.colors.Normalize(vmin=0, vmax=1) + nodes = [0.0, 0.01, 0.25, 0.4, 0.45, 0.55, 0.75, 0.99, 1.0] + colors = ["deepskyblue", "skyblue", "lightcyan", "lightgray", "gray", "lightgray", "mistyrose", "salmon", "tomato"] + cmap = mpl.colors.LinearSegmentedColormap.from_list("mycmap2", list(zip(nodes, colors))) + #cmap = cm.plasma + m = cm.ScalarMappable(norm=norm, cmap=cmap) + rgba = m.to_rgba(dir) + r = get_string_from_int_below_255(math.ceil(rgba[0] * 255.0)) + g = get_string_from_int_below_255(math.ceil(rgba[1] * 255.0)) + b = get_string_from_int_below_255(math.ceil(rgba[2] * 255.0)) + return "#" + r + g + b + + +def give_color_to_direction_static(dir): + """ + Assigns a color to the direction (static-defined colors) + + Parameters + -------------- + dir + Direction + + Returns + -------------- + col + Color + """ + direction_colors = [[-0.5, "#4444FF"], [-0.1, "#AAAAFF"], [0.0, "#CCCCCC"], [0.5, "#FFAAAA"], [1.0, "#FF4444"]] + for col in direction_colors: + if col[0] >= dir: + return col[1] + + +def compare_element_usage_two_logs(net: PetriNet, im: Marking, fm: Marking, log1: Union[EventLog, pd.DataFrame], log2: Union[EventLog, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> Dict[Any, Any]: + """ + Returns some statistics (also visual) about the comparison of the usage + of the elements in two logs given an accepting Petri net + + Parameters + ------------- + net + Petri net + im + Initial marking + fm + Final marking + log1 + First log + log2 + Second log + parameters + Parameters of the algorithm (to be passed to the token-based replay) + + Returns + ---------------- + aggregated_statistics + Statistics about the usage of places, transitions and arcs in the net + """ + if parameters is None: + parameters = {} + + log1 = log_converter.apply(log1, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + log2 = log_converter.apply(log2, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + tr_parameters = copy(parameters) + tr_parameters[tr_algorithm.Variants.TOKEN_REPLAY.value.Parameters.ENABLE_PLTR_FITNESS] = True + + rep_traces1, pl_fit_trace1, tr_fit_trace1, ne_act_model1 = tr_algorithm.apply(log1, net, im, fm, + parameters=tr_parameters) + rep_traces2, pl_fit_trace2, tr_fit_trace2, ne_act_model2 = tr_algorithm.apply(log2, net, im, fm, + parameters=tr_parameters) + + tr_occ1 = Counter([y for x in rep_traces1 for y in x["activated_transitions"]]) + tr_occ2 = Counter([y for x in rep_traces2 for y in x["activated_transitions"]]) + pl_occ1 = Counter({p: pl_fit_trace1[p]["c"] + pl_fit_trace1[p]["r"] for p in pl_fit_trace1}) + pl_occ2 = Counter({p: pl_fit_trace2[p]["c"] + pl_fit_trace2[p]["r"] for p in pl_fit_trace2}) + + all_replayed_transitions = set(tr_occ1.keys()).union(set(tr_occ2.keys())) + all_replayed_places = set(pl_occ1.keys()).union(set(pl_occ2.keys())) + + all_transitions = all_replayed_transitions.union(set(net.transitions)) + all_places = all_replayed_places.union(set(net.places)) + aggregated_statistics = {} + for place in all_places: + aggregated_statistics[place] = {"log1_occ": pl_occ1[place], "log2_occ": pl_occ2[place], + "total_occ": pl_occ1[place] + pl_occ2[place]} + aggregated_statistics[place]["label"] = "(%d/%d/%d)" % ( + pl_occ1[place], pl_occ2[place], pl_occ1[place] + pl_occ2[place]) + dir = (pl_occ2[place] - pl_occ1[place]) / (pl_occ1[place] + pl_occ2[place]) if (pl_occ1[place] + pl_occ2[ + place]) > 0 else 0 + aggregated_statistics[place]["direction"] = dir + aggregated_statistics[place]["color"] = give_color_to_direction_dynamic(dir) + + for trans in all_transitions: + aggregated_statistics[trans] = {"log1_occ": tr_occ1[trans], "log2_occ": tr_occ2[trans], + "total_occ": tr_occ1[trans] + tr_occ2[trans]} + if trans.label is not None: + aggregated_statistics[trans]["label"] = trans.label+" " + else: + aggregated_statistics[trans]["label"] = "" + aggregated_statistics[trans]["label"] = aggregated_statistics[trans]["label"] + "(%d/%d/%d)" % ( + tr_occ1[trans], tr_occ2[trans], tr_occ1[trans] + tr_occ2[trans]) + dir = (tr_occ2[trans] - tr_occ1[trans]) / (tr_occ1[trans] + tr_occ2[trans]) if (tr_occ1[trans] + tr_occ2[ + trans]) > 0 else 0 + aggregated_statistics[trans]["direction"] = dir + aggregated_statistics[trans]["color"] = give_color_to_direction_dynamic(dir) + for arc in trans.in_arcs: + aggregated_statistics[arc] = aggregated_statistics[trans] + for arc in trans.out_arcs: + aggregated_statistics[arc] = aggregated_statistics[trans] + + return aggregated_statistics diff --git a/pm4py/pm4py/algo/conformance/__init__.py b/pm4py/pm4py/algo/conformance/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..290a98274cc7f26c262d329b74827b4a6f498842 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/__init__.py @@ -0,0 +1,22 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance import alignments, tokenreplay, log_skeleton, footprints, temporal_profile + +import sys +# this package is available only for Python >= 3.6 +if sys.version_info >= (3, 6): + pass diff --git a/pm4py/pm4py/algo/conformance/alignments/__init__.py b/pm4py/pm4py/algo/conformance/alignments/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3f1b029fc2b9e9adc12ea47ea551756d560f51e7 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments import decomposed, dfg, petri_net, process_tree diff --git a/pm4py/pm4py/algo/conformance/alignments/decomposed/__init__.py b/pm4py/pm4py/algo/conformance/alignments/decomposed/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3400d3b06adcc9fa8da7fb25fdf3a7934610c998 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/decomposed/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.decomposed import algorithm, variants diff --git a/pm4py/pm4py/algo/conformance/alignments/decomposed/algorithm.py b/pm4py/pm4py/algo/conformance/alignments/decomposed/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..7c894b39470db10b32fd1401ec0f5c86423d45ca --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/decomposed/algorithm.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.decomposed.variants import recompos_maximal +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing +import pandas as pd + + +class Variants(Enum): + RECOMPOS_MAXIMAL = recompos_maximal + + +VERSIONS = {Variants.RECOMPOS_MAXIMAL} + + +def apply(log: Union[EventLog, pd.DataFrame], net: PetriNet, im: Marking, fm: Marking, variant=Variants.RECOMPOS_MAXIMAL, parameters: Optional[Dict[Any, Any]] = None) -> typing.ListAlignments: + """ + Apply the recomposition alignment approach + to a log and a Petri net performing decomposition + + Parameters + -------------- + log + Event log + net + Petri net + im + Initial marking + fm + Final marking + variant + Variant of the algorithm, possible values: + - Variants.RECOMPOS_MAXIMAL + parameters + Parameters of the algorithm + + Returns + -------------- + aligned_traces + For each trace, return its alignment + """ + return exec_utils.get_variant(variant).apply(log, net, im, fm, parameters=parameters) diff --git a/pm4py/pm4py/algo/conformance/alignments/decomposed/variants/__init__.py b/pm4py/pm4py/algo/conformance/alignments/decomposed/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..da8b0a861d9ee3ebc35c4a78d7e21a203a8492c4 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/decomposed/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.decomposed.variants import recompos_maximal diff --git a/pm4py/pm4py/algo/conformance/alignments/decomposed/variants/recompos_maximal.py b/pm4py/pm4py/algo/conformance/alignments/decomposed/variants/recompos_maximal.py new file mode 100644 index 0000000000000000000000000000000000000000..9b371c615b8ab05d49879b292a80955653592d08 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/decomposed/variants/recompos_maximal.py @@ -0,0 +1,530 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util +import sys +import time +from copy import copy + +from pm4py.algo.conformance.alignments.petri_net.variants import state_equation_a_star +from pm4py.objects.log import obj as log_implementation +from pm4py.objects.log.obj import Trace +from pm4py.objects.log.util.xes import DEFAULT_NAME_KEY +from pm4py.objects.petri_net.utils import align_utils as utils, decomposition as decomp_utils +from pm4py.statistics.variants.log import get as variants_module +from pm4py.util import exec_utils +from pm4py.util import variants_util + +from enum import Enum +from pm4py.util import constants, nx_utils + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + BEST_WORST_COST = 'best_worst_cost' + PARAM_TRACE_COST_FUNCTION = 'trace_cost_function' + ICACHE = "icache" + MCACHE = "mcache" + PARAM_THRESHOLD_BORDER_AGREEMENT = "thresh_border_agreement" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + PARAM_MODEL_COST_FUNCTION = 'model_cost_function' + PARAM_SYNC_COST_FUNCTION = 'sync_cost_function' + PARAM_TRACE_NET_COSTS = "trace_net_costs" + PARAM_MAX_ALIGN_TIME = "max_align_time" + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + SHOW_PROGRESS_BAR = "show_progress_bar" + + +def get_best_worst_cost(petri_net, initial_marking, final_marking, parameters=None): + trace = log_implementation.Trace() + + best_worst, cf = align(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + best_worst_cost = sum(cf[x] for x in best_worst['alignment']) // utils.STD_MODEL_LOG_MOVE_COST if best_worst else 0 + + return best_worst_cost + + +def apply_from_variants_list_petri_string(var_list, petri_net_string, parameters=None): + if parameters is None: + parameters = {} + + from pm4py.objects.petri_net.importer.variants import pnml as petri_importer + + petri_net, initial_marking, final_marking = petri_importer.import_petri_from_string(petri_net_string) + + res = apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=parameters) + return res + + +def apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + + log = log_implementation.EventLog() + dictio_alignments = {} + for varitem in var_list: + variant = varitem[0] + trace = variants_util.variant_to_trace(variant, parameters=parameters) + log.append(trace) + + alignment = apply(log, petri_net, initial_marking, final_marking) + + for index, varitem in enumerate(var_list): + variant = varitem[0] + dictio_alignments[variant] = alignment[index] + + return dictio_alignments + + +def apply(log: EventLog, net: PetriNet, im: Marking, fm: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> typing.ListAlignments: + """ + Apply the recomposition alignment approach + to a log and a Petri net performing decomposition + + Parameters + -------------- + log + Event log + net + Petri net + im + Initial marking + fm + Final marking + parameters + Parameters of the algorithm + + Returns + -------------- + aligned_traces + For each trace, return its alignment + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + best_worst_cost = get_best_worst_cost(net, im, fm, parameters=parameters) + parameters[Parameters.BEST_WORST_COST] = best_worst_cost + + list_nets = decomp_utils.decompose(net, im, fm) + + return apply_log(log, list_nets, parameters=parameters) + + +def apply_log(log, list_nets, parameters=None): + """ + Apply the recomposition alignment approach + to a log and a decomposed Petri net + + Parameters + -------------- + log + Log + list_nets + Decomposition + parameters + Parameters of the algorithm + + Returns + -------------- + aligned_traces + For each trace, return its alignment + """ + if parameters is None: + parameters = {} + + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + icache = exec_utils.get_param_value(Parameters.ICACHE, parameters, dict()) + mcache = exec_utils.get_param_value(Parameters.MCACHE, parameters, dict()) + + parameters[Parameters.ICACHE] = icache + parameters[Parameters.MCACHE] = mcache + + variants_idxs = variants_module.get_variants_from_log_trace_idx(log, parameters=parameters) + + progress = None + if importlib.util.find_spec("tqdm") and show_progress_bar: + from tqdm.auto import tqdm + progress = tqdm(total=len(variants_idxs), + desc="aligning log with decomposition/recomposition, completed variants :: ") + + one_tr_per_var = [] + variants_list = [] + for index_variant, variant in enumerate(variants_idxs): + variants_list.append(variant) + for variant in variants_list: + one_tr_per_var.append(log[variants_idxs[variant][0]]) + all_alignments = [] + max_align_time = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME, parameters, sys.maxsize) + start_time = time.time() + for index, trace in enumerate(one_tr_per_var): + this_time = time.time() + if this_time - start_time <= max_align_time: + alignment = apply_trace(trace, list_nets, parameters=parameters) + else: + alignment = None + if progress is not None: + progress.update() + all_alignments.append(alignment) + al_idx = {} + for index_variant, variant in enumerate(variants_idxs): + for trace_idx in variants_idxs[variant]: + al_idx[trace_idx] = all_alignments[index_variant] + alignments = [] + for i in range(len(log)): + alignments.append(al_idx[i]) + # gracefully close progress bar + if progress is not None: + progress.close() + del progress + return alignments + + +def get_acache(cons_nets): + """ + Calculates the A-Cache of the given decomposition + + Parameters + -------------- + cons_nets + List of considered nets + + Returns + -------------- + acache + A-Cache + """ + ret = {} + for index, el in enumerate(cons_nets): + for lab in el[0].lvis_labels: + if lab not in ret: + ret[lab] = [] + ret[lab].append(index) + + return ret + + +def get_alres(al): + """ + Gets a description of the alignment for the border agreement + + Parameters + -------------- + al + Alignment + + Returns + -------------- + alres + Description of the alignment + """ + if al is not None: + ret = {} + for index, el in enumerate(al["alignment"]): + if el[1][0] is not None and el[1][0] != ">>": + if not el[1][0] in ret: + ret[el[1][0]] = [] + + if el[1][1] is not None and el[1][1] != ">>": + ret[el[1][0]].append(0) + else: + ret[el[1][0]].append(1) + return ret + return None + + +def order_nodes_second_round(to_visit, G0): + """ + Orders the second round of nodes to visit to reconstruct the alignment + + Parameters + --------------- + to_visit + Node to visit + G0 + Recomposition graph + + Returns + --------------- + to_visit + Sorted list of nodes + """ + cont_loop = True + while cont_loop: + cont_loop = False + i = 0 + while i < len(to_visit): + j = i + 1 + must_break = False + while j < len(to_visit): + if to_visit[j] != to_visit[i]: + edg = [e for e in G0.edges if e[0] == to_visit[j] and e[1] == to_visit[i]] + edg2 = [e for e in G0.edges if e[1] == to_visit[i] and e[0] == to_visit[j]] + if edg and not edg2: + to_visit[i], to_visit[j] = to_visit[j], to_visit[i] + must_break = True + break + j = j + 1 + if must_break: + cont_loop = True + break + i = i + 1 + return to_visit + + +def recompose_alignment(cons_nets, cons_nets_result): + """ + Alignment recomposition + + Parameters + --------------- + cons_nets + Decomposed Petri net elements + cons_nets_result + Result of the alignments on such elements + parameters + Parameters of the method + + Returns + --------------- + alignment + Recomposed alignment + """ + G0 = nx_utils.DiGraph() + for i in range(len(cons_nets_result)): + if cons_nets_result[i] is not None: + G0.add_node(i) + for i in range(len(cons_nets_result)): + if cons_nets_result[i] is not None: + for j in range(len(cons_nets_result)): + if cons_nets_result[j] is not None: + if i != j: + if cons_nets_result[i]["alignment"][-1][1] == cons_nets_result[j]["alignment"][0][1]: + G0.add_edge(i, j) + all_available = [i for i in range(len(cons_nets_result)) if cons_nets_result[i] is not None] + to_visit = [i for i in range(len(cons_nets)) if len(list(cons_nets[i][1])) > 0] + visited = set() + overall_ali = [] + count = 0 + while len(to_visit) > 0: + curr = to_visit.pop(0) + output_edges = [e for e in G0.edges if e[0] == curr] + for edge in output_edges: + to_visit.append(edge[1]) + if count > 0: + sind = 1 + else: + sind = 0 + if cons_nets_result[curr] is not None: + overall_ali = overall_ali + [x for x in cons_nets_result[curr]["alignment"][sind:]] + visited.add(curr) + count = count + 1 + to_visit = [x for x in all_available if x not in visited] + to_visit = order_nodes_second_round(to_visit, G0) + added = set() + while len(to_visit) > 0: + curr = to_visit.pop(0) + if not curr in visited: + output_edges = [e for e in G0.edges if e[0] == curr] + for edge in output_edges: + to_visit.append(edge[1]) + if count > 0: + sind = 1 + else: + sind = 0 + if cons_nets_result[curr] is not None: + for y in [x for x in cons_nets_result[curr]["alignment"][sind:]]: + if not y in added: + overall_ali.append(y) + added.add(y) + visited.add(curr) + count = count + 1 + return overall_ali + + +def apply_trace(trace, list_nets, parameters=None): + """ + Align a trace against a decomposition + + Parameters + -------------- + trace + Trace + list_nets + List of Petri nets (decomposed) + parameters + Parameters of the algorithm + + Returns + -------------- + alignment + Alignment of the trace + """ + if parameters is None: + parameters = {} + + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, sys.maxsize) + threshold_border_agreement = exec_utils.get_param_value(Parameters.PARAM_THRESHOLD_BORDER_AGREEMENT, parameters, + 100000000) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + icache = exec_utils.get_param_value(Parameters.ICACHE, parameters, dict()) + mcache = exec_utils.get_param_value(Parameters.MCACHE, parameters, dict()) + cons_nets = copy(list_nets) + acache = get_acache(cons_nets) + cons_nets_result = [] + cons_nets_alres = [] + cons_nets_costs = [] + max_val_alres = 0 + start_time = time.time() + i = 0 + while i < len(cons_nets): + this_time = time.time() + if this_time - start_time > max_align_time_trace: + # the alignment did not termine in the provided time + return None + net, im, fm = cons_nets[i] + proj = Trace([x for x in trace if x[activity_key] in net.lvis_labels]) + if len(proj) > 0: + acti = tuple(x[activity_key] for x in proj) + tup = (cons_nets[i], acti) + if tup not in icache: + al, cf = align(proj, net, im, fm, parameters=parameters) + alres = get_alres(al) + icache[tup] = (al, cf, alres) + al, cf, alres = icache[tup] + cons_nets_result.append(al) + cons_nets_alres.append(alres) + cons_nets_costs.append(cf) + if this_time - start_time > max_align_time_trace: + # the alignment did not termine in the provided time + return None + max_val_alres = max(max_val_alres, max(z for y in alres.values() for z in y) if alres else 0) + border_disagreements = 0 + if max_val_alres > 0: + comp_to_merge = set() + for act in [x[activity_key] for x in trace if x[activity_key] in net.lvis_labels]: + for ind in acache[act]: + if ind >= i: + break + if cons_nets_alres[ind] is None or cons_nets_alres[ind] is None: + # the alignment did not termine in the provided time + return None + if cons_nets_alres[ind][act] != cons_nets_alres[i][act]: + for ind2 in acache[act]: + comp_to_merge.add(ind2) + if comp_to_merge: + comp_to_merge = sorted(list(comp_to_merge), reverse=True) + border_disagreements += len(comp_to_merge) + # if the number of border disagreements exceed the specified threshold + # then stop iterating on the trace + if border_disagreements > threshold_border_agreement: + return None + comp_to_merge_ids = tuple(list(cons_nets[j][0].t_tuple for j in comp_to_merge)) + if comp_to_merge_ids not in mcache: + mcache[comp_to_merge_ids] = decomp_utils.merge_sublist_nets( + [cons_nets[zz] for zz in comp_to_merge]) + new_comp = mcache[comp_to_merge_ids] + cons_nets.append(new_comp) + j = 0 + while j < len(comp_to_merge): + z = comp_to_merge[j] + if z < i: + i = i - 1 + if z <= i: + del cons_nets_result[z] + del cons_nets_alres[z] + del cons_nets_costs[z] + del cons_nets[z] + j = j + 1 + acache = get_acache(cons_nets) + continue + else: + cons_nets_result.append(None) + cons_nets_alres.append(None) + cons_nets_costs.append(None) + i = i + 1 + if this_time - start_time > max_align_time_trace: + # the alignment did not termine in the provided time + return None + alignment = recompose_alignment(cons_nets, cons_nets_result, ) + overall_cost_dict = {} + for cf in cons_nets_costs: + if cf is not None: + for el in cf: + overall_cost_dict[el] = cf[el] + cost = 0 + for el in alignment: + cost = cost + overall_cost_dict[el] + alignment = [x[1] for x in alignment] + if this_time - start_time > max_align_time_trace: + # the alignment did not termine in the provided time + return None + res = {"cost": cost, "alignment": alignment} + best_worst_cost = exec_utils.get_param_value(Parameters.BEST_WORST_COST, parameters, None) + if best_worst_cost is not None and len(trace) > 0: + cost1 = cost // utils.STD_MODEL_LOG_MOVE_COST + fitness = 1.0 - cost1 / (best_worst_cost + len(trace)) + res["fitness"] = fitness + res["bwc"] = (best_worst_cost + len(trace)) * utils.STD_MODEL_LOG_MOVE_COST + + return res + + +def align(trace, petri_net, initial_marking, final_marking, parameters=None): + if parameters is None: + parameters = {} + + new_parameters = copy(parameters) + new_parameters[state_equation_a_star.Parameters.RETURN_SYNC_COST_FUNCTION] = True + new_parameters[state_equation_a_star.Parameters.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE] = True + + aligned_trace, cost_function = state_equation_a_star.apply(trace, petri_net, initial_marking, final_marking, + parameters=new_parameters) + + cf = {} + for x in cost_function: + cf[((x.name[0], x.name[1]), (x.label[0], x.label[1]))] = cost_function[x] + + return aligned_trace, cf diff --git a/pm4py/pm4py/algo/conformance/alignments/dfg/__init__.py b/pm4py/pm4py/algo/conformance/alignments/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3370db99b373bd4d2773a8ca0ca7113553cdfe28 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/dfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.dfg import variants, algorithm diff --git a/pm4py/pm4py/algo/conformance/alignments/dfg/algorithm.py b/pm4py/pm4py/algo/conformance/alignments/dfg/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..a0122fa40237811e0bb6b444ab0ada082d869898 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/dfg/algorithm.py @@ -0,0 +1,55 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.dfg.variants import classic +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.log.obj import EventLog, Trace +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.util import typing +import pandas as pd + + +class Variants(Enum): + CLASSIC = classic + + +def apply(obj: Union[EventLog, pd.DataFrame, Trace], dfg: Dict[Tuple[str, str], int], sa: Dict[str, int], ea: Dict[str, int], variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Union[typing.AlignmentResult, typing.ListAlignments]: + """ + Applies the alignment algorithm provided a log/trace object, and a *connected* DFG + + Parameters + -------------- + obj + Event log / Trace + dfg + *Connected* directly-Follows Graph + sa + Start activities + ea + End activities + variant + Variant of the DFG alignments to be used. Possible values: + - Variants.CLASSIC + parameters + Variant-specific parameters. + + Returns + -------------- + ali + Result of the alignment + """ + return exec_utils.get_variant(variant).apply(obj, dfg, sa, ea, parameters=parameters) diff --git a/pm4py/pm4py/algo/conformance/alignments/dfg/variants/__init__.py b/pm4py/pm4py/algo/conformance/alignments/dfg/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1246da23f1dac5f2b336541b554d5db324f26368 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/dfg/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.dfg.variants import classic diff --git a/pm4py/pm4py/algo/conformance/alignments/dfg/variants/classic.py b/pm4py/pm4py/algo/conformance/alignments/dfg/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..a499a8600885d1183f235ad758b46746ac58a632 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/dfg/variants/classic.py @@ -0,0 +1,591 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import heapq +import sys +import uuid +from enum import Enum + +from pm4py.util import constants, xes_constants, exec_utils, pandas_utils +from pm4py.util import variants_util +from pm4py.objects.petri_net.utils import align_utils +from pm4py.objects.log.obj import EventLog, Trace, Event +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.util import typing +from pm4py.objects.conversion.log import converter as log_converter +import pandas as pd + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + SYNC_COST_FUNCTION = "sync_cost_function" + MODEL_MOVE_COST_FUNCTION = "model_move_cost_function" + LOG_MOVE_COST_FUNCTION = "log_move_cost_function" + INTERNAL_LOG_MOVE_COST_FUNCTION = "internal_log_move_cost_function" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + + +class Outputs(Enum): + ALIGNMENT = "alignment" + COST = "cost" + VISITED = "visited_states" + CLOSED = "closed" + INTERNAL_COST = "internal_cost" + + +POSITION_G = 0 +POSITION_LOG = 1 +POSITION_NUM_VISITED = 2 +POSITION_H = 3 +POSITION_REAL_F = 4 +POSITION_F = 5 +POSITION_MODEL = 6 +POSITION_IS_LM = 7 +POSITION_IS_MM = 8 +POSITION_PREV = 9 + + +def apply(obj: Union[EventLog, Trace], dfg: Dict[Tuple[str, str], int], sa: Dict[str, int], ea: Dict[str, int], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Union[typing.AlignmentResult, typing.ListAlignments]: + """ + Applies the alignment algorithm provided a log/trace object, and a *connected* DFG + + Parameters + -------------- + obj + Event log / Trace + dfg + *Connected* directly-Follows Graph + sa + Start activities + ea + End activities + parameters + Parameters of the algorithm: + - Parameters.SYNC_COST_FUNCTION: for each activity that is in both the trace and the model, provide the + non-negative cost of a sync move + - Parameters.MODEL_MOVE_COST_FUNCTION: for each activity that is in the model, provide the non-negative + cost of a model move + - Parameters.LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost of a log move + that is returned in the alignment to the user (but not used internally for ordering the states) + - Parameters.INTERNAL_LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost + of a log move that is used internally for ordering the states in the search algorithm. + - Parameters.ACTIVITY_KEY: the attribute of the log that is the activity + + Returns + -------------- + ali + Result of the alignment + """ + if isinstance(obj, Trace): + return apply_trace(obj, dfg, sa, ea, parameters=parameters) + else: + return apply_log(obj, dfg, sa, ea, parameters=parameters) + + +def apply_log(log, dfg, sa, ea, parameters=None): + """ + Applies the alignment algorithm provided a log object, and a *connected* DFG + + Parameters + ---------------- + log + Event log + dfg + *Connected* DFG + sa + Start activities + ea + End activities + parameters + Parameters of the algorithm: + - Parameters.SYNC_COST_FUNCTION: for each activity that is in both the trace and the model, provide the + non-negative cost of a sync move + - Parameters.MODEL_MOVE_COST_FUNCTION: for each activity that is in the model, provide the non-negative + cost of a model move + - Parameters.LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost of a log move + that is returned in the alignment to the user (but not used internally for ordering the states) + - Parameters.INTERNAL_LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost + of a log move that is used internally for ordering the states in the search algorithm. + - Parameters.ACTIVITY_KEY: the attribute of the log that is the activity + + Returns + ---------------- + aligned_traces + For each trace, contains a dictionary describing the alignment + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + aligned_traces = [] + align_dict = {} + + al_empty_cost = __apply_list_activities([], dfg, sa, ea, parameters=parameters)["cost"] + + if pandas_utils.check_is_pandas_dataframe(log): + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + traces = [tuple(x) for x in log.groupby(case_id_key)[activity_key].agg(list).to_dict().values()] + else: + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + traces = [tuple(x[activity_key] for x in trace) for trace in log] + + for trace_act in traces: + if trace_act in align_dict: + aligned_traces.append(align_dict[trace_act]) + else: + log_move_cost_function = exec_utils.get_param_value(Parameters.LOG_MOVE_COST_FUNCTION, parameters, + {x: align_utils.STD_MODEL_LOG_MOVE_COST for x in + trace_act}) + trace_bwc_cost = sum(log_move_cost_function[x] for x in trace_act) + al_tr = __apply_list_activities(trace_act, dfg, sa, ea, parameters=parameters) + al_tr["fitness"] = 1.0 - al_tr["cost"] / (al_empty_cost + trace_bwc_cost) + al_tr["bwc"] = al_empty_cost + trace_bwc_cost + align_dict[trace_act] = al_tr + aligned_traces.append(align_dict[trace_act]) + + return aligned_traces + + +def apply_trace(trace, dfg, sa, ea, parameters=None): + """ + Applies the alignment algorithm provided a trace of a log, and a *connected* DFG + + Parameters + --------------- + trace + Trace + dfg + *Connected* DFG + sa + Start activities + ea + End activities + parameters + Parameters of the algorithm: + - Parameters.SYNC_COST_FUNCTION: for each activity that is in both the trace and the model, provide the + non-negative cost of a sync move + - Parameters.MODEL_MOVE_COST_FUNCTION: for each activity that is in the model, provide the non-negative + cost of a model move + - Parameters.LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost of a log move + that is returned in the alignment to the user (but not used internally for ordering the states) + - Parameters.INTERNAL_LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost + of a log move that is used internally for ordering the states in the search algorithm. + - Parameters.ACTIVITY_KEY: the attribute of the log that is the activity + + Returns + --------------- + ali + Dictionary describing the alignment + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + trace_act = tuple(x[activity_key] for x in trace) + + return __apply_list_activities(trace_act, dfg, sa, ea, parameters=parameters) + + +def apply_from_variants_list_dfg_string(var_list, dfg_serialization, parameters=None): + if parameters is None: + parameters = {} + + from pm4py.objects.dfg.importer import importer as dfg_importer + dfg, sa, ea = dfg_importer.deserialize(dfg_serialization, parameters=parameters) + + return apply_from_variants_list(var_list, dfg, sa, ea, parameters=parameters) + + +def apply_from_variants_list(var_list, dfg, sa, ea, parameters=None): + if parameters is None: + parameters = {} + + dictio_alignments = {} + for varitem in var_list: + variant = varitem[0] + dictio_alignments[variant] = apply_from_variant(variant, dfg, sa, ea, parameters=parameters) + return dictio_alignments + + +def apply_from_variant(variant, dfg, sa, ea, parameters=None): + if parameters is None: + parameters = {} + + trace = variants_util.variant_to_trace(variant, parameters=parameters) + return apply_trace(trace, dfg, sa, ea, parameters=parameters) + + +def dijkstra_to_end_node(dfg, sa, ea, start_node, end_node, activities_model, sync_cost_function, + model_move_cost_function): + """ + Gets the cost of the minimum path from a node to the end node + + Parameters + --------------- + dfg + *Connected* DFG + sa + Start activities + ea + End activities + start_node + Start node of the graph (connected to all the start activities) + end_node + End node of the graph (connected to all the end activities) + activities_model + Set of the activities contained in the DFG + sync_cost_function + Given an activity, provides the cost when the activity is executed in a sync way + model_move_cost_function + Given an activity, provides the cost when the activity is executed as a move-on-model + + Returns + ----------------- + cost_to_end_node + Dictionary associating to each node the cost to the end node + """ + pred = {x: set() for x in activities_model} + pred[start_node] = set() + pred[end_node] = set() + for x in sa: + pred[x].add(start_node) + for x in ea: + pred[end_node].add(x) + for x in dfg: + pred[x[1]].add(x[0]) + min_dist = {x: sys.maxsize for x in activities_model} + min_dist[start_node] = sys.maxsize + min_dist[end_node] = 0 + + nodes_cost = {} + nodes_cost[start_node] = 0 + nodes_cost[end_node] = 0 + + for x in activities_model: + if x in sync_cost_function: + nodes_cost[x] = min(sync_cost_function[x], model_move_cost_function[x]) + else: + nodes_cost[x] = model_move_cost_function[x] + + to_visit = [end_node] + while len(to_visit) > 0: + curr = to_visit.pop(0) + curr_dist = min_dist[curr] + for prev_node in pred[curr]: + prev_dist = min_dist[prev_node] + if prev_dist > curr_dist + nodes_cost[prev_node]: + min_dist[prev_node] = curr_dist + nodes_cost[prev_node] + to_visit.append(prev_node) + + # subtract the cost of the node itself to make the heuristics correct + for el in min_dist: + min_dist[el] -= nodes_cost[el] + + return min_dist + + +def __apply_list_activities(trace, dfg, sa, ea, parameters=None): + """ + Apply the alignments provided the *connected* DFG and a list of activities of the trace + + Parameters + -------------- + trace + List of activities of the trace + dfg + *Connected* DFG + sa + Start activities + ea + End activities + parameters + Parameters of the algorithm: + - Parameters.SYNC_COST_FUNCTION: for each activity that is in both the trace and the model, provide the + non-negative cost of a sync move + - Parameters.MODEL_MOVE_COST_FUNCTION: for each activity that is in the model, provide the non-negative + cost of a model move + - Parameters.LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost of a log move + that is returned in the alignment to the user (but not used internally for ordering the states) + - Parameters.INTERNAL_LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost + of a log move that is used internally for ordering the states in the search algorithm. + + Returns + -------------- + ali + Dictionary describing the alignment + """ + if parameters is None: + parameters = {} + + activities_trace = set(x for x in trace) + activities_model = set(x[0] for x in dfg).union(set(x[1] for x in dfg)).union(set(x for x in sa)).union( + set(x for x in ea)) + activities_one_instantiation = activities_trace.union(activities_model) + activities_one_instantiation = {x: x for x in activities_one_instantiation} + activities_both_in_trace_and_model = activities_trace.intersection(activities_model) + + sync_cost_function = exec_utils.get_param_value(Parameters.SYNC_COST_FUNCTION, parameters, + {x: align_utils.STD_SYNC_COST for x in activities_both_in_trace_and_model}) + model_move_cost_function = exec_utils.get_param_value(Parameters.MODEL_MOVE_COST_FUNCTION, parameters, + {x: align_utils.STD_MODEL_LOG_MOVE_COST for x in activities_model}) + # for each activity that is in the trace, provides the cost of a log move + # that is returned in the alignment to the user (but not used internally for ordering the states) + log_move_cost_function = exec_utils.get_param_value(Parameters.LOG_MOVE_COST_FUNCTION, parameters, + {x: align_utils.STD_MODEL_LOG_MOVE_COST for x in activities_trace}) + # for each activity that is in the trace, provide the cost of a log move that is used internally for + # ordering the states in the search algorithm. + internal_log_move_cost_function = exec_utils.get_param_value(Parameters.INTERNAL_LOG_MOVE_COST_FUNCTION, parameters, + None) + if internal_log_move_cost_function is None: + internal_log_move_cost_function = {} + for x in activities_trace: + if x in activities_model: + internal_log_move_cost_function[x] = log_move_cost_function[x] + else: + internal_log_move_cost_function[x] = 0 + + start_node = str(uuid.uuid4()) + end_node = str(uuid.uuid4()) + + outgoing_nodes = {activities_one_instantiation[x]: set() for x in activities_model} + outgoing_nodes[start_node] = set() + for x in dfg: + outgoing_nodes[x[0]].add(activities_one_instantiation[x[1]]) + for x in sa: + outgoing_nodes[start_node].add(activities_one_instantiation[x]) + for x in ea: + outgoing_nodes[activities_one_instantiation[x]].add(end_node) + + # closed set: the set associates each activity of the model with the index of the trace that lastly visited that. + # this is a very efficient closed set since it cuts double-visiting the same activity for state visited later + # that have a lower index of a trace. + closed = {activities_one_instantiation[x]: -1 for x in activities_model} + closed[start_node] = -1 + closed[end_node] = -1 + + f = 0 + h = 0 + g = f + h + + num_visited = 0 + num_closed = 0 + + open_set = [(g, 0, num_visited, -h, f, f, start_node, False, False, None)] + heapq.heapify(open_set) + + while not len(open_set) == 0: + curr = heapq.heappop(open_set) + + num_visited = num_visited + 1 + + if -curr[POSITION_LOG] <= closed[curr[POSITION_MODEL]]: + # closed + continue + + closed[curr[POSITION_MODEL]] = -curr[POSITION_LOG] + not_end_trace = -curr[POSITION_LOG] < len(trace) + + if curr[POSITION_MODEL] == end_node and not not_end_trace: + return __return_alignment(curr, trace, num_closed) + + num_closed = num_closed + 1 + + trace_curr = trace[-curr[POSITION_LOG]] if not_end_trace else None + + if not curr[POSITION_MODEL] == end_node: + # I can do some sync / move on model + list_act = outgoing_nodes[curr[POSITION_MODEL]] + + act_not_in_model = not_end_trace and trace_curr not in activities_model + + # avoid scheduling model moves if the activity of the log is not in the model, + # in that case schedule directly the model move + if not act_not_in_model: + can_sync = not_end_trace and trace_curr in list_act + + if can_sync: + f = curr[POSITION_F] + sync_cost_function[trace_curr] + real_f = curr[POSITION_REAL_F] + sync_cost_function[trace_curr] + h = 0 + + g = f + h + + new_state = (g, curr[POSITION_LOG] - 1, num_visited, -h, real_f, f, activities_one_instantiation[trace_curr], + False, False, curr) + if -new_state[POSITION_LOG] > closed[new_state[POSITION_MODEL]]: + heapq.heappush(open_set, new_state) + + for act in list_act: + if act == end_node: + new_state = ( + curr[POSITION_G], curr[POSITION_LOG], num_visited, curr[POSITION_H], curr[POSITION_REAL_F], curr[POSITION_F], + end_node, False, False, curr) + if -new_state[POSITION_LOG] > closed[new_state[POSITION_MODEL]]: + heapq.heappush(open_set, new_state) + elif not not_end_trace or not trace_curr in list_act: + f = curr[POSITION_F] + model_move_cost_function[act] + real_f = curr[POSITION_REAL_F] + model_move_cost_function[act] + h = 0 + + g = f + h + + new_state = ( + g, curr[POSITION_LOG], num_visited, -h, real_f, f, activities_one_instantiation[act], False, + True, + curr) + if -new_state[POSITION_LOG] > closed[new_state[POSITION_MODEL]]: + heapq.heappush(open_set, new_state) + + if not_end_trace and not curr[POSITION_IS_MM]: + # I can do some move-on-log + f = curr[POSITION_F] + internal_log_move_cost_function[trace_curr] + real_f = curr[POSITION_REAL_F] + log_move_cost_function[trace_curr] + h = 0 + + g = f + h + + new_state = (g, curr[POSITION_LOG] - 1, num_visited, -h, real_f, f, curr[POSITION_MODEL], True, False, curr) + if -new_state[POSITION_LOG] > closed[new_state[POSITION_MODEL]]: + heapq.heappush(open_set, new_state) + + +def __return_alignment(state, trace, closed): + """ + Returns the computed alignment in an intellegible way + + Parameters + -------------- + state + Current state + trace + List of activities + closed + Number of closed states + + Returns + -------------- + ali + Dictionary describing the alignment + """ + cost = state[POSITION_REAL_F] + internal_cost = state[POSITION_F] + visited = state[POSITION_NUM_VISITED] + moves = [] + while state[POSITION_PREV] is not None: + state = state[POSITION_PREV] + is_lm = state[POSITION_IS_LM] + is_mm = state[POSITION_IS_MM] + pl = -state[POSITION_LOG] - 1 + if pl >= 0: + lm = ">>" + mm = ">>" + if not is_lm: + mm = state[POSITION_MODEL] + if not is_mm: + lm = trace[pl] + moves.append((lm, mm)) + moves.reverse() + + return {Outputs.ALIGNMENT.value: moves, Outputs.COST.value: cost, Outputs.VISITED.value: visited, + Outputs.CLOSED.value: closed, Outputs.INTERNAL_COST.value: internal_cost} + + +def project_log_on_dfg(log: Union[EventLog, pd.DataFrame], dfg: Dict[Tuple[str, str], int], sa: Dict[str, int], ea: Dict[str, int], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Projects the traces of an event log to the specified DFG, in order to assess the conformance of the different + directly-follows relationships and their performance (as the timestamps are recorded). + The result is a event log where each 'projected' trace can be replayed on the given DFG. + Each event of a 'projected' trace has the '@@is_conforming' attribute set to: + - True when the activity is mimicked by the original trace (sync move) + - False when the activity is not reflected in the original trace (move-on-model) + Move-on-log (activities of the trace that are not mimicked by the DFG) are skipped altogether. + + Minimum Viable Example: + + import pm4py + from pm4py.algo.conformance.alignments.dfg.variants import classic as dfg_alignments + + log = pm4py.read_xes("tests/input_data/receipt.xes", return_legacy_log_object=True) + filtered_log = pm4py.filter_variants_top_k(log, 1) + dfg, sa, ea = pm4py.discover_dfg(filtered_log) + + projected_log = dfg_alignments.project_log_on_dfg(log, dfg, sa, ea) + pm4py.write_xes(projected_log, "projected_log.xes") + + + Parameters + --------------- + log + Event log + dfg + Directly-Follows Graph + sa + Start activities + ea + End activities + parameters + Parameters of the method, including: + - Parameters.ACTIVITY_KEY => the attribute of the event log to be used as activity + - Parameters.TIMESTAMP_KEY => the attribute of the event log to be used as timestamp + + Returns + --------------- + projected_log + Projected event log with the aforementioned features + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + + log = log_converter.apply(log, parameters=parameters) + + aligned_traces = apply_log(log, dfg, sa, ea, parameters=parameters) + + projected_log = EventLog() + projected_log.attributes["@@aligned_dfg"] = repr([dfg, sa, ea]) + + for i in range(len(log)): + projected_trace = Trace() + projected_trace.attributes["@@original_trace"] = ",".join(x[activity_key] for x in log[i]) + + if len(log[i]) > 0: + trace = log[i] + alignment = aligned_traces[i]["alignment"] + z = 0 + curr_timestamp = trace[z][timestamp_key] + + for j in range(len(alignment)): + if alignment[j][1] == ">>": + # move on log + pass + elif alignment[j][0] == ">>" or alignment[j][0] == alignment[j][1]: + is_conforming = False + if alignment[j][0] != ">>": + # sync move + curr_timestamp = trace[z][timestamp_key] + is_conforming = True + z = z + 1 + event = Event({activity_key: alignment[j][1], timestamp_key: curr_timestamp, + "@@is_conforming": is_conforming}) + projected_trace.append(event) + + projected_log.append(projected_trace) + + return projected_log diff --git a/pm4py/pm4py/algo/conformance/alignments/edit_distance/__init__.py b/pm4py/pm4py/algo/conformance/alignments/edit_distance/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c0b8a08d86b564feda5b97417c01388c85f5b0d1 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/edit_distance/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.edit_distance import variants, algorithm diff --git a/pm4py/pm4py/algo/conformance/alignments/edit_distance/algorithm.py b/pm4py/pm4py/algo/conformance/alignments/edit_distance/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..0133ca04a434df66f3b517d598429d9894a013ac --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/edit_distance/algorithm.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union + +from pm4py.algo.conformance.alignments.edit_distance.variants import edit_distance +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils +from pm4py.util import typing +import pandas as pd + + +class Variants(Enum): + EDIT_DISTANCE = edit_distance + + +def apply(log1: Union[EventLog, pd.DataFrame], log2: Union[EventLog, pd.DataFrame], variant=Variants.EDIT_DISTANCE, + parameters: Optional[Dict[Any, Any]] = None) -> typing.ListAlignments: + """ + Aligns each trace of the first log against the second log + + Parameters + -------------- + log1 + First log + log2 + Second log + variant + Variant of the algorithm, possible values: + - Variants.EDIT_DISTANCE: minimizes the edit distance + parameters + Parameters of the algorithm + + Returns + --------------- + aligned_traces + List that contains, for each trace of the first log, the corresponding alignment + """ + return exec_utils.get_variant(variant).apply(log1, log2, parameters=parameters) diff --git a/pm4py/pm4py/algo/conformance/alignments/edit_distance/variants/__init__.py b/pm4py/pm4py/algo/conformance/alignments/edit_distance/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d8b7cc8da68844a4bd45e51532362f750d27c697 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/edit_distance/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.edit_distance.variants import edit_distance diff --git a/pm4py/pm4py/algo/conformance/alignments/edit_distance/variants/edit_distance.py b/pm4py/pm4py/algo/conformance/alignments/edit_distance/variants/edit_distance.py new file mode 100644 index 0000000000000000000000000000000000000000..62cd819b0bc842385be610b3aa391b979cc54d24 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/edit_distance/variants/edit_distance.py @@ -0,0 +1,269 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import difflib +from enum import Enum +from typing import Optional, Dict, Any, List, Set, Union + +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.objects.log.util import log_regex +from pm4py.objects.petri_net.utils import align_utils +from pm4py.util import exec_utils +from pm4py.util import string_distance +from pm4py.util import typing +from pm4py.util import constants, xes_constants +import pandas as pd +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + PERFORM_ANTI_ALIGNMENT = "perform_anti_alignment" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + + +def apply(log1: EventLog, log2: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> typing.ListAlignments: + """ + Aligns each trace of the first log against the second log, minimizing the edit distance + + Parameters + -------------- + log1 + First log + log2 + Second log + parameters + Parameters of the algorithm + + Returns + --------------- + aligned_traces + List that contains, for each trace of the first log, the corresponding alignment + """ + if parameters is None: + parameters = {} + + log1 = log_converter.apply(log1, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + log2 = log_converter.apply(log2, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + anti_alignment = exec_utils.get_param_value(Parameters.PERFORM_ANTI_ALIGNMENT, parameters, False) + + aligned_traces = [] + + # form a mapping dictionary associating each activity of the two logs to an ASCII character + mapping = log_regex.form_encoding_dictio_from_two_logs(log1, log2, parameters=parameters) + # encode the second log (against which we want to align each trace of the first log) + list_encodings = log_regex.get_encoded_log(log2, mapping, parameters=parameters) + # optimization: keep one item per variant + set_encodings = set(list_encodings) + list_encodings = list(set_encodings) + # this initial sort helps in reducing the execution time in the following phases, + # since the expense of all the successive sorts is reduced + if anti_alignment: + list_encodings = sorted(list_encodings, key=lambda x: -len(x)) + else: + list_encodings = sorted(list_encodings, key=lambda x: len(x)) + + # keeps an alignment cache (to avoid re-calculating the same edit distances :) ) + cache_align = {} + + best_worst_cost = min(len(x) for x in list_encodings) + + for trace in log1: + # gets the alignment + align_result = align_trace(trace, list_encodings, set_encodings, mapping, cache_align=cache_align, + parameters=parameters) + aligned_traces.append(align_result) + + # assign fitness to traces + for index, align in enumerate(aligned_traces): + if align is not None: + unfitness_upper_part = align['cost'] // align_utils.STD_MODEL_LOG_MOVE_COST + if unfitness_upper_part == 0: + align['fitness'] = 1 + elif (len(log1[index]) + best_worst_cost) > 0: + align['fitness'] = 1 - ( + (align['cost'] // align_utils.STD_MODEL_LOG_MOVE_COST) / (len(log1[index]) + best_worst_cost)) + else: + align['fitness'] = 0 + align["bwc"] = (len(log1[index]) + best_worst_cost) * align_utils.STD_MODEL_LOG_MOVE_COST + + return aligned_traces + + +def align_trace(trace: Trace, list_encodings: List[str], set_encodings: Set[str], mapping: Dict[str, str], + cache_align: Optional[Dict[Any, Any]] = None, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> typing.AlignmentResult: + """ + Aligns a trace against a list of traces, minimizing the edit distance + + Parameters + -------------- + trace + Trace + list_encodings + List of encoded traces (the same as set_encodings, but as a list) + set_encodings + Set of encoded traces (the same as list_encodings, but as a set), + useful to quickly check if the provided trace is contained in the traces of the other log + mapping + Mapping (of activities to characters) + cache_align + Cache of the alignments + parameters + Parameters of the algorithm + + Returns + -------------- + aligned_trace + Aligned trace + """ + if parameters is None: + parameters = {} + + # keeps an alignment cache (to avoid re-calculating the same edit distances :) ) + if cache_align is None: + cache_align = {} + + anti_alignment = exec_utils.get_param_value(Parameters.PERFORM_ANTI_ALIGNMENT, parameters, False) + comparison_function = string_distance.argmax_levenshtein if anti_alignment else string_distance.argmin_levenshtein + + # encode the current trace using the mapping dictionary + encoded_trace = log_regex.get_encoded_trace(trace, mapping, parameters=parameters) + inv_mapping = {y: x for x, y in mapping.items()} + + if encoded_trace not in cache_align: + if not anti_alignment and encoded_trace in set_encodings: + # the trace is already in the encodings. we don't need to calculate any edit distance + argmin_dist = encoded_trace + else: + # finds the encoded trace of the other log that is at minimal distance + argmin_dist = comparison_function(encoded_trace, list_encodings) + + seq_match = difflib.SequenceMatcher(None, encoded_trace, argmin_dist).get_matching_blocks() + i = 0 + j = 0 + align_trace = [] + total_cost = 0 + for el in seq_match: + while i < el.a: + align_trace.append((inv_mapping[encoded_trace[i]], ">>")) + total_cost += align_utils.STD_MODEL_LOG_MOVE_COST + i = i + 1 + while j < el.b: + align_trace.append((">>", inv_mapping[argmin_dist[j]])) + total_cost += align_utils.STD_MODEL_LOG_MOVE_COST + j = j + 1 + for z in range(el.size): + align_trace.append((inv_mapping[encoded_trace[i]], inv_mapping[argmin_dist[j]])) + i = i + 1 + j = j + 1 + + align = {"alignment": align_trace, "cost": total_cost} + # saves the alignment in the cache + cache_align[encoded_trace] = align + return align + else: + return cache_align[encoded_trace] + + +def project_log_on_variant(log: Union[EventLog, pd.DataFrame], variant: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Projects the traces of an event log to the specified variant, in order to assess the conformance of the different + directly-follows relationships and their performance (as the timestamps are recorded). + The result is a event log where each 'projected' trace can be replayed on the given variant. + Each event of a 'projected' trace has the '@@is_conforming' attribute set to: + - True when the activity is mimicked by the original trace (sync move) + - False when the activity is not reflected in the original trace (move-on-model) + Move-on-log (activities of the trace that are not mimicked by the variant) are skipped altogether. + + Minimum Viable Example: + + import pm4py + from pm4py.algo.conformance.alignments.edit_distance.variants import edit_distance + + log = pm4py.read_xes("tests/input_data/receipt.xes", return_legacy_log_object=True) + variant = ('Confirmation of receipt', 'T02 Check confirmation of receipt', 'T04 Determine confirmation of receipt', + 'T05 Print and send confirmation of receipt', 'T06 Determine necessity of stop advice', + 'T10 Determine necessity to stop indication') + + projected_log = edit_distance.project_log_on_variant(log, variant) + pm4py.write_xes(projected_log, "projected_log2.xes") + + + Parameters + --------------- + log + Event log + variant + Considered variant + parameters + Parameters of the method, including: + - Parameters.ACTIVITY_KEY => the attribute of the event log to be used as activity + - Parameters.TIMESTAMP_KEY => the attribute of the event log to be used as timestamp + + Returns + --------------- + projected_log + Projected event log with the aforementioned features + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + + log = log_converter.apply(log, parameters=parameters) + + log2 = EventLog() + trace = Trace() + log2.append(trace) + for act in variant: + trace.append(Event({activity_key: act})) + + aligned_traces = apply(log, log2, parameters=parameters) + + projected_log = EventLog() + projected_log.attributes["@@aligned_variant"] = ",".join(variant) + + for i in range(len(log)): + projected_trace = Trace() + projected_trace.attributes["@@original_trace"] = ",".join(x[activity_key] for x in log[i]) + + if len(log[i]) > 0: + trace = log[i] + alignment = aligned_traces[i]["alignment"] + z = 0 + curr_timestamp = trace[z][timestamp_key] + + for j in range(len(alignment)): + if alignment[j][1] == ">>": + # move on log + pass + elif alignment[j][0] == ">>" or alignment[j][0] == alignment[j][1]: + is_conforming = False + if alignment[j][0] != ">>": + # sync move + curr_timestamp = trace[z][timestamp_key] + is_conforming = True + z = z + 1 + event = Event({activity_key: alignment[j][1], timestamp_key: curr_timestamp, + "@@is_conforming": is_conforming}) + projected_trace.append(event) + + projected_log.append(projected_trace) + + return projected_log diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/__init__.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..affef7432730dfe2418910aff10624335da56877 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.petri_net import algorithm, variants, utils diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/algorithm.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..43cb8a90e2d5288aa6df0db628c3d02b71a2e98c --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/algorithm.py @@ -0,0 +1,406 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import copy + +from pm4py.algo.conformance.alignments.petri_net import variants +from pm4py.objects.petri_net.utils import align_utils, check_soundness +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.util.xes_constants import DEFAULT_NAME_KEY, DEFAULT_TRACEID_KEY +from pm4py.objects.log.obj import Trace, Event +import time +from pm4py.util.lp import solver +from pm4py.util import exec_utils +from enum import Enum +import sys +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_CASEID_KEY, CASE_CONCEPT_NAME +import importlib.util +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream, Trace +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing, constants, pandas_utils +import pandas as pd + + +class Variants(Enum): + VERSION_STATE_EQUATION_A_STAR = variants.state_equation_a_star + VERSION_TWEAKED_STATE_EQUATION_A_STAR = variants.tweaked_state_equation_a_star + VERSION_DIJKSTRA_NO_HEURISTICS = variants.dijkstra_no_heuristics + VERSION_DIJKSTRA_LESS_MEMORY = variants.dijkstra_less_memory + VERSION_DISCOUNTED_A_STAR = variants.discounted_a_star + +class Parameters(Enum): + PARAM_TRACE_COST_FUNCTION = 'trace_cost_function' + PARAM_MODEL_COST_FUNCTION = 'model_cost_function' + PARAM_SYNC_COST_FUNCTION = 'sync_cost_function' + PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE = 'ret_tuple_as_trans_desc' + PARAM_TRACE_NET_COSTS = "trace_net_costs" + TRACE_NET_CONSTR_FUNCTION = "trace_net_constr_function" + TRACE_NET_COST_AWARE_CONSTR_FUNCTION = "trace_net_cost_aware_constr_function" + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + PARAM_MAX_ALIGN_TIME = "max_align_time" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + VARIANTS_IDX = "variants_idx" + SHOW_PROGRESS_BAR = "show_progress_bar" + CORES = 'cores' + BEST_WORST_COST_INTERNAL = "best_worst_cost_internal" + FITNESS_ROUND_DIGITS = "fitness_round_digits" + SYNCHRONOUS = "synchronous_dijkstra" + EXPONENT="theta" + ENABLE_BEST_WORST_COST = "enable_best_worst_cost" + + +def __variant_mapper(variant): + if type(variant) is str: + if variant == "Variants.VERSION_STATE_EQUATION_A_STAR": + variant = Variants.VERSION_STATE_EQUATION_A_STAR + elif variant == "Variants.VERSION_TWEAKED_STATE_EQUATION_A_STAR": + variant = Variants.VERSION_TWEAKED_STATE_EQUATION_A_STAR + elif variant == "Variants.VERSION_DIJKSTRA_NO_HEURISTICS": + variant = Variants.VERSION_DIJKSTRA_NO_HEURISTICS + elif variant == "Variants.VERSION_DIJKSTRA_LESS_MEMORY": + variant = Variants.VERSION_DIJKSTRA_LESS_MEMORY + + return variant + + +DEFAULT_VARIANT = Variants.VERSION_DIJKSTRA_LESS_MEMORY +if solver.DEFAULT_LP_SOLVER_VARIANT is not None: + DEFAULT_VARIANT = __variant_mapper(constants.DEFAULT_ALIGNMENTS_VARIANT) + +VERSION_STATE_EQUATION_A_STAR = Variants.VERSION_STATE_EQUATION_A_STAR +VERSION_DIJKSTRA_NO_HEURISTICS = Variants.VERSION_DIJKSTRA_NO_HEURISTICS +VERSION_DIJKSTRA_LESS_MEMORY = Variants.VERSION_DIJKSTRA_LESS_MEMORY + +VERSIONS = {Variants.VERSION_DIJKSTRA_NO_HEURISTICS, Variants.VERSION_DIJKSTRA_NO_HEURISTICS, + Variants.VERSION_DIJKSTRA_LESS_MEMORY} + + +def apply(obj: Union[EventLog, EventStream, pd.DataFrame, Trace], petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> Union[typing.AlignmentResult, typing.ListAlignments]: + if parameters is None: + parameters = {} + if isinstance(obj, Trace): + return apply_trace(obj, petri_net, initial_marking, final_marking, parameters=parameters, variant=variant) + else: + return apply_log(obj, petri_net, initial_marking, + final_marking, parameters=parameters, variant=variant) + + +def apply_trace(trace, petri_net, initial_marking, final_marking, parameters=None, + variant=DEFAULT_VARIANT): + """ + apply alignments to a trace + Parameters + ----------- + trace + :class:`pm4py.log.log.Trace` trace of events + petri_net + :class:`pm4py.objects.petri.petrinet.PetriNet` the model to use for the alignment + initial_marking + :class:`pm4py.objects.petri.petrinet.Marking` initial marking of the net + final_marking + :class:`pm4py.objects.petri.petrinet.Marking` final marking of the net + variant + selected variant of the algorithm, possible values: {\'Variants.VERSION_STATE_EQUATION_A_STAR, Variants.VERSION_DIJKSTRA_NO_HEURISTICS \'} + parameters + :class:`dict` parameters of the algorithm, for key \'state_equation_a_star\': + Parameters.ACTIVITY_KEY -> Attribute in the log that contains the activity + Parameters.PARAM_MODEL_COST_FUNCTION -> + mapping of each transition in the model to corresponding synchronous costs + Parameters.PARAM_SYNC_COST_FUNCTION -> + mapping of each transition in the model to corresponding model cost + Parameters.PARAM_TRACE_COST_FUNCTION -> + mapping of each index of the trace to a positive cost value + Returns + ----------- + alignment + :class:`dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and + **traversed_arcs** + The alignment is a sequence of labels of the form (a,t), (a,>>), or (>>,t) + representing synchronous/log/model-moves. + """ + if parameters is None: + parameters = copy({PARAMETER_CONSTANT_ACTIVITY_KEY: DEFAULT_NAME_KEY}) + + variant = __variant_mapper(variant) + parameters = copy(parameters) + + enable_best_worst_cost = exec_utils.get_param_value(Parameters.ENABLE_BEST_WORST_COST, parameters, True) + + ali = exec_utils.get_variant(variant).apply(trace, petri_net, initial_marking, final_marking, + parameters=parameters) + + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, []) + # Instead of using the length of the trace, use the sum of the trace cost function + trace_cost_function_sum = sum(trace_cost_function) + + if enable_best_worst_cost: + best_worst_cost = exec_utils.get_param_value(Parameters.BEST_WORST_COST_INTERNAL, parameters, + __get_best_worst_cost(petri_net, initial_marking, final_marking, variant, parameters)) + + if ali is not None and best_worst_cost is not None: + ltrace_bwc = trace_cost_function_sum + best_worst_cost + + fitness_num = ali['cost'] // align_utils.STD_MODEL_LOG_MOVE_COST + fitness_den = ltrace_bwc // align_utils.STD_MODEL_LOG_MOVE_COST + fitness = 1 - fitness_num / fitness_den if fitness_den > 0 else 0 + + ali["fitness"] = fitness + # returning also the best worst cost, for log fitness computation + ali["bwc"] = ltrace_bwc + + return ali + + +def apply_log(log, petri_net, initial_marking, final_marking, parameters=None, variant=DEFAULT_VARIANT): + """ + apply alignments to a log + Parameters + ----------- + log + object of the form :class:`pm4py.log.log.EventLog` event log + petri_net + :class:`pm4py.objects.petri.petrinet.PetriNet` the model to use for the alignment + initial_marking + :class:`pm4py.objects.petri.petrinet.Marking` initial marking of the net + final_marking + :class:`pm4py.objects.petri.petrinet.Marking` final marking of the net + variant + selected variant of the algorithm, possible values: {\'Variants.VERSION_STATE_EQUATION_A_STAR, Variants.VERSION_DIJKSTRA_NO_HEURISTICS \'} + parameters + :class:`dict` parameters of the algorithm, + + Returns + ----------- + alignment + :class:`list` of :class:`dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and + **traversed_arcs** + The alignment is a sequence of labels of the form (a,t), (a,>>), or (>>,t) + representing synchronous/log/model-moves. + """ + if parameters is None: + parameters = dict() + + if solver.DEFAULT_LP_SOLVER_VARIANT is not None: + if not check_soundness.check_easy_soundness_net_in_fin_marking(petri_net, initial_marking, final_marking): + raise Exception("trying to apply alignments on a Petri net that is not a easy sound net!!") + + enable_best_worst_cost = exec_utils.get_param_value(Parameters.ENABLE_BEST_WORST_COST, parameters, True) + + variant = __variant_mapper(variant) + + start_time = time.time() + max_align_time = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME, parameters, + sys.maxsize) + max_align_time_case = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + + variants_idxs, one_tr_per_var = __get_variants_structure(log, parameters) + progress = __get_progress_bar(len(one_tr_per_var), parameters) + + if enable_best_worst_cost: + best_worst_cost = __get_best_worst_cost(petri_net, initial_marking, final_marking, variant, parameters) + parameters[Parameters.BEST_WORST_COST_INTERNAL] = best_worst_cost + + all_alignments = [] + for trace in one_tr_per_var: + this_max_align_time = min(max_align_time_case, (max_align_time - (time.time() - start_time)) * 0.5) + parameters[Parameters.PARAM_MAX_ALIGN_TIME_TRACE] = this_max_align_time + all_alignments.append(apply_trace(trace, petri_net, initial_marking, final_marking, parameters=copy(parameters), + variant=variant)) + if progress is not None: + progress.update() + + alignments = __form_alignments(variants_idxs, all_alignments) + __close_progress_bar(progress) + + return alignments + + +def apply_multiprocessing(log, petri_net, initial_marking, final_marking, parameters=None, variant=DEFAULT_VARIANT): + """ + Applies the alignments using a process pool (multiprocessing) + + Parameters + --------------- + log + Event log + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm + + Returns + ---------------- + aligned_traces + Alignments + """ + if parameters is None: + parameters = {} + + import multiprocessing + + variant = __variant_mapper(variant) + + num_cores = exec_utils.get_param_value(Parameters.CORES, parameters, multiprocessing.cpu_count() - 2) + + enable_best_worst_cost = exec_utils.get_param_value(Parameters.ENABLE_BEST_WORST_COST, parameters, True) + + variants_idxs, one_tr_per_var = __get_variants_structure(log, parameters) + + if enable_best_worst_cost: + best_worst_cost = __get_best_worst_cost(petri_net, initial_marking, final_marking, variant, parameters) + parameters[Parameters.BEST_WORST_COST_INTERNAL] = best_worst_cost + + all_alignments = [] + + from concurrent.futures import ProcessPoolExecutor + with ProcessPoolExecutor(max_workers=num_cores) as executor: + futures = [] + for trace in one_tr_per_var: + futures.append(executor.submit(apply_trace, trace, petri_net, initial_marking, final_marking, parameters, str(variant))) + progress = __get_progress_bar(len(one_tr_per_var), parameters) + if progress is not None: + alignments_ready = 0 + while alignments_ready != len(futures): + current = 0 + for index, variant in enumerate(futures): + current = current + 1 if futures[index].done() else current + if current > alignments_ready: + for i in range(0, current - alignments_ready): + progress.update() + alignments_ready = current + for index, variant in enumerate(futures): + all_alignments.append(futures[index].result()) + __close_progress_bar(progress) + + alignments = __form_alignments(variants_idxs, all_alignments) + + return alignments + + +def __get_best_worst_cost(petri_net, initial_marking, final_marking, variant, parameters): + parameters_best_worst = copy(parameters) + + best_worst_cost = exec_utils.get_variant(variant).get_best_worst_cost(petri_net, initial_marking, final_marking, + parameters=parameters_best_worst) + + return best_worst_cost + + +def __get_variants_structure(log, parameters): + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + variants_idxs = {} + one_tr_per_var = [] + + if pandas_utils.check_is_pandas_dataframe(log): + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + traces = [tuple(x) for x in log.groupby(case_id_key)[activity_key].agg(list).to_dict().values()] + for idx, trace in enumerate(traces): + if trace not in variants_idxs: + variants_idxs[trace] = [idx] + case = Trace() + for act in trace: + case.append(Event({activity_key: act})) + one_tr_per_var.append(case) + else: + variants_idxs[trace].append(idx) + else: + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + for idx, case in enumerate(log): + trace = tuple(x[activity_key] for x in case) + if trace not in variants_idxs: + variants_idxs[trace] = [idx] + one_tr_per_var.append(case) + else: + variants_idxs[trace].append(idx) + + return variants_idxs, one_tr_per_var + + +def __get_progress_bar(num_variants, parameters): + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + progress = None + if importlib.util.find_spec("tqdm") and show_progress_bar and num_variants > 1: + from tqdm.auto import tqdm + progress = tqdm(total=num_variants, desc="aligning log, completed variants :: ") + return progress + + +def __form_alignments(variants_idxs, all_alignments): + al_idx = {} + for index_variant, variant in enumerate(variants_idxs): + for trace_idx in variants_idxs[variant]: + al_idx[trace_idx] = all_alignments[index_variant] + + alignments = [] + for i in range(len(al_idx)): + alignments.append(al_idx[i]) + + return alignments + + +def __close_progress_bar(progress): + if progress is not None: + progress.close() + del progress + + +def get_diagnostics_dataframe(log, align_output, parameters=None): + """ + Gets the diagnostics results of alignments (of a log) in a dataframe + + Parameters + -------------- + log + Event log + align_output + Output of the alignments + + Returns + -------------- + dataframe + Diagnostics dataframe + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, DEFAULT_TRACEID_KEY) + + import pandas as pd + + diagn_stream = [] + + for index in range(len(log)): + case_id = log[index].attributes[case_id_key] + + cost = align_output[index]["cost"] + fitness = align_output[index]["fitness"] + is_fit = fitness == 1.0 + + diagn_stream.append({"case_id": case_id, "cost": cost, "fitness": fitness, "is_fit": is_fit}) + + return pandas_utils.instantiate_dataframe(diagn_stream) diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/utils/__init__.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..283e2db58a4828ff564d2e07ed9c407bad77e746 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/utils/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.petri_net.utils import log_enrichment diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/utils/log_enrichment.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/utils/log_enrichment.py new file mode 100644 index 0000000000000000000000000000000000000000..7c2b468cb6748a82e97decc1227e8ab798addc37 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/utils/log_enrichment.py @@ -0,0 +1,73 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import deepcopy +from enum import Enum +from typing import List, Dict, Any, Optional, Union + +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.utils import align_utils +from pm4py.util import exec_utils + + +class Parameters(Enum): + TARGET_ATTRIBUTE = "target_attribute" + ENABLE_DEEPCOPY = "enable_deepcopy" + + +def apply(log: EventLog, aligned_traces: List[Dict[str, Any]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Enriches a log with the results of the alignment against a model, + obtained with the parameter 'ret_tuple_as_trans_desc' set to True + (so the identifiers of the transitions of the model are known). + In particular, the events that are not move-on-log are enriched with + the identifier of the corresponding element of the model. + + Parameters + ---------------- + log + Event log + aligned_traces + Result of the alignments, done with the parameter 'ret_tuple_as_trans_Desc_ set to True. + parameters + Parameters of the algorithm: + - Parameters.TARGET_ATTRIBUTE: attribute that should be used for the enrichment + - Parameters.ENABLE_DEEPCOPY: deepcopy the event log to not enrich the original log. + + Returns + ---------------- + enriched_log + Log enriched with an additional attribute (the identifier of the corresponding element of the model) + """ + if parameters is None: + parameters = {} + + target_attribute = exec_utils.get_param_value(Parameters.TARGET_ATTRIBUTE, parameters, "@@transition_id") + enable_deepcopy = exec_utils.get_param_value(Parameters.ENABLE_DEEPCOPY, parameters, False) + + if enable_deepcopy: + log = deepcopy(log) + + for i in range(len(aligned_traces)): + z = 0 + for j in range(len(aligned_traces[i]['alignment'])): + id_piece = aligned_traces[i]['alignment'][j][0] + if id_piece[0] != align_utils.SKIP: + if id_piece[1] != align_utils.SKIP: + log[i][z][target_attribute] = id_piece[1] + z = z + 1 + + return log diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/__init__.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e6ae3b1472b362d52a0bb6dae4673c00cafa6369 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.petri_net.variants import dijkstra_less_memory, dijkstra_no_heuristics, \ + state_equation_a_star, tweaked_state_equation_a_star, discounted_a_star diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/dijkstra_less_memory.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/dijkstra_less_memory.py new file mode 100644 index 0000000000000000000000000000000000000000..c457ab3410f71941fee2d32495cff807e1dffb56 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/dijkstra_less_memory.py @@ -0,0 +1,737 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import time +import sys +from pm4py.objects.petri_net.utils import align_utils +from pm4py.objects.log import obj as log_implementation +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util import exec_utils +from pm4py.objects.petri_net.semantics import enabled_transitions +from pm4py.util import variants_util +from enum import Enum +from copy import copy +import heapq +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import Trace +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing + + +class Parameters(Enum): + PARAM_TRACE_COST_FUNCTION = 'trace_cost_function' + PARAM_MODEL_COST_FUNCTION = 'model_cost_function' + PARAM_STD_SYNC_COST = 'std_sync_cost' + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + PARAM_MAX_ALIGN_TIME = "max_align_time" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE = 'ret_tuple_as_trans_desc' + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + + +PLACES_DICT = "places_dict" +INV_TRANS_DICT = "inv_trans_dict" +LABELS_DICT = "labels_dict" +TRANS_LABELS_DICT = "trans_labels_dict" +TRANS_PRE_DICT = "trans_pre_dict" +TRANS_POST_DICT = "trans_post_dict" +TRANSF_IM = "transf_im" +TRANSF_FM = "transf_fm" +TRANSF_MODEL_COST_FUNCTION = "transf_model_cost_function" +TRANSF_TRACE = "transf_trace" +TRACE_COST_FUNCTION = "trace_cost_function" +INV_TRACE_LABELS_DICT = "inv_trace_labels_dict" + +IS_SYNC_MOVE = 0 +IS_LOG_MOVE = 1 +IS_MODEL_MOVE = 2 + +POSITION_TOTAL_COST = 0 +POSITION_INDEX = 1 +POSITION_TYPE_MOVE = 2 +POSITION_ALIGN_LENGTH = 3 +POSITION_STATES_COUNT = 4 +POSITION_PARENT_STATE = 5 +POSITION_MARKING = 6 +POSITION_EN_T = 7 + + +def get_best_worst_cost(petri_net, initial_marking, final_marking, parameters=None): + """ + Gets the best worst cost of an alignment + + Parameters + ----------- + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + + Returns + ----------- + best_worst_cost + Best worst cost of alignment + """ + if parameters is None: + parameters = {} + trace = log_implementation.Trace() + + best_worst = apply(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + if best_worst is not None: + return best_worst['cost'] + + return None + + +def apply_from_variants_list_petri_string(var_list, petri_net_string, parameters=None): + if parameters is None: + parameters = {} + + from pm4py.objects.petri_net.importer.variants import pnml as petri_importer + + petri_net, initial_marking, final_marking = petri_importer.import_petri_from_string(petri_net_string) + + res = apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=parameters) + return res + + +def apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + start_time = time.time() + max_align_time = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME, parameters, + sys.maxsize) + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + dictio_alignments = {} + for varitem in var_list: + this_max_align_time = min(max_align_time_trace, (max_align_time - (time.time() - start_time)) * 0.5) + variant = varitem[0] + parameters[Parameters.PARAM_MAX_ALIGN_TIME_TRACE] = this_max_align_time + dictio_alignments[variant] = apply_from_variant(variant, petri_net, initial_marking, final_marking, + parameters=parameters) + return dictio_alignments + + +def apply_from_variant(variant, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a single variant + + Parameters + ------------- + variant + Variant (as string delimited by the "variant_delimiter" parameter) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + ------------ + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** + """ + if parameters is None: + parameters = {} + trace = variants_util.variant_to_trace(variant, parameters=parameters) + return apply(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + +def __transform_model_to_mem_efficient_structure(net, im, fm, trace, parameters=None): + """ + Transform the Petri net model to a memory efficient structure + + Parameters + -------------- + net + Petri net + im + Initial marking + fm + Final marking + trace + Trace + parameters + Parameters + + Returns + -------------- + model_struct + Model data structure, including: + PLACES_DICT: associates each place to a number + INV_TRANS_DICT: associates a number to each transition + LABELS_DICT: labels dictionary (a label to a number) + TRANS_LABELS_DICT: associates each transition to the number corresponding to its label + TRANS_PRE_DICT: preset of a transition, expressed as in this data structure + TRANS_POST_DICT: postset of a transition, expressed as in this data structure + TRANSF_IM: transformed initial marking + TRANSF_FM: transformed final marking + TRANSF_MODEL_COST_FUNCTION: transformed model cost function + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + labels = sorted(list(set(x[activity_key] for x in trace))) + + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + + if model_cost_function is None: + model_cost_function = {} + for t in net.transitions: + if t.label is not None: + model_cost_function[t] = align_utils.STD_MODEL_LOG_MOVE_COST + else: + preset_t = Marking() + for a in t.in_arcs: + preset_t[a.source] = a.weight + # optimization 12/08/2020 + # + # instead of giving undiscriminately weight 1 to + # invisible transitions, assign weight 0 to the ones + # for which no 'sync' transition is enabled in their + # activation markings. + # + # this requires to modify the state of the alignment, keeping track + # of the length of the alignment, to avoid loops. + en_t = enabled_transitions(net, preset_t) + vis_t_trace = [t for t in en_t if t.label in labels] + if len(vis_t_trace) == 0: + model_cost_function[t] = 0 + else: + model_cost_function[t] = align_utils.STD_TAU_COST + + places_dict = {place: index for index, place in enumerate(net.places)} + trans_dict = {trans: index for index, trans in enumerate(net.transitions)} + + labels = sorted(list(set(t.label for t in net.transitions if t.label is not None))) + labels_dict = {labels[i]: i for i in range(len(labels))} + + trans_labels_dict = {} + for t in net.transitions: + trans_labels_dict[trans_dict[t]] = labels_dict[t.label] if t.label is not None else None + + trans_pre_dict = {trans_dict[t]: {places_dict[x.source]: x.weight for x in t.in_arcs} for t in + net.transitions} + trans_post_dict = {trans_dict[t]: {places_dict[x.target]: x.weight for x in t.out_arcs} for t in + net.transitions} + + transf_im = {places_dict[p]: im[p] for p in im} + transf_fm = {places_dict[p]: fm[p] for p in fm} + + transf_model_cost_function = {trans_dict[t]: model_cost_function[t] for t in net.transitions} + + inv_trans_dict = {y: x for x, y in trans_dict.items()} + + return {PLACES_DICT: places_dict, INV_TRANS_DICT: inv_trans_dict, LABELS_DICT: labels_dict, + TRANS_LABELS_DICT: trans_labels_dict, TRANS_PRE_DICT: trans_pre_dict, + TRANS_POST_DICT: trans_post_dict, + TRANSF_IM: transf_im, TRANSF_FM: transf_fm, TRANSF_MODEL_COST_FUNCTION: transf_model_cost_function} + + +def __transform_trace_to_mem_efficient_structure(trace, model_struct, parameters=None): + """ + Transforms a trace to a memory efficient structure + + Parameters + --------------- + trace + Trace + model_struct + Efficient data structure for the model (calculated above) + parameters + Parameters + + Returns + --------------- + trace_struct + An efficient structure describing the trace, including: + TRANSF_TRACE: the transformed trace + TRACE_COST_FUNCTION: the cost function associated to the trace + INV_TRACE_LABELS_DICT: dictionary that associates a number to an activity + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + if trace_cost_function is None: + trace_cost_function = {i: align_utils.STD_MODEL_LOG_MOVE_COST for i in range(len(trace))} + + labels = sorted(list(set(x[activity_key] for x in trace))) + labels_dict = copy(model_struct[LABELS_DICT]) + + for l in labels: + if l not in labels_dict: + labels_dict[l] = len(labels_dict) + + transf_trace = [labels_dict[x[activity_key]] for x in trace] + + inv_trace_labels_dict = {y: x for x, y in labels_dict.items()} + return {TRANSF_TRACE: transf_trace, TRACE_COST_FUNCTION: trace_cost_function, + INV_TRACE_LABELS_DICT: inv_trace_labels_dict} + + +def apply(trace: Trace, net: PetriNet, im: Marking, fm: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> typing.AlignmentResult: + """ + Performs the basic alignment search, given a trace and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + model_struct = __transform_model_to_mem_efficient_structure(net, im, fm, trace, parameters=parameters) + trace_struct = __transform_trace_to_mem_efficient_structure(trace, model_struct, parameters=parameters) + + sync_cost = exec_utils.get_param_value(Parameters.PARAM_STD_SYNC_COST, parameters, align_utils.STD_SYNC_COST) + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + ret_tuple_as_trans_desc = exec_utils.get_param_value(Parameters.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE, + parameters, False) + + return __dijkstra(model_struct, trace_struct, sync_cost=sync_cost, max_align_time_trace=max_align_time_trace, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc) + + +def __dict_leq(d1, d2): + """ + Checks if the first dictionary is <= the second + + Parameters + -------------- + d1 + First dictionary + d2 + Second dictionary + + Returns + -------------- + boolean + Boolean + """ + for k in d1: + if k not in d2: + return False + if d1[k] > d2[k]: + return False + return True + + +def __fire_trans(m, preset, postset): + """ + Fires a transition and returns a new marking + + Parameters + --------------- + m + Marking + preset + Preset + postset + Postset + + Returns + --------------- + new_m + New marking + """ + ret = {} + for k in m: + if k in preset: + diff = m[k] - preset[k] + if diff > 0: + ret[k] = diff + else: + ret[k] = m[k] + for k in postset: + if k not in ret: + ret[k] = postset[k] + else: + ret[k] = ret[k] + postset[k] + return ret + + +def __encode_marking(marking_dict, m_d): + """ + Encode a marking using the dictionary + + Parameters + -------------- + marking_dict + Marking dictionary + m_d + Current marking (dict) + + Returns + -------------- + m_t + Marking in tuple + """ + keys = sorted(list(m_d.keys())) + m_t = [] + for el in keys: + for i in range(m_d[el]): + m_t.append(el) + m_t = tuple(m_t) + if m_t not in marking_dict: + marking_dict[m_t] = m_t + return marking_dict[m_t] + + +def __decode_marking(m_t): + """ + Decode a marking using a dictionary + + Parameters + --------------- + m_t + Marking as tuple + + Returns + --------------- + m_d + Marking as dictionary + """ + m_d = {} + for el in m_t: + if el not in m_d: + m_d[el] = 1 + else: + m_d[el] = m_d[el] + 1 + + return m_d + + +def __check_closed(closed, ns): + """ + Checks if the state is closed + + Parameters + ------------- + closed + Closed set + ns + New state (marking, index) + + Returns + ------------- + bool + Boolean (true if the state is closed) + """ + if ns[0] in closed and closed[ns[0]] <= ns[1]: + return True + return False + + +def __add_closed(closed, ns): + """ + Adds a closed state + + Parameters + -------------- + closed + Closed set + ns + New state (marking, index) + """ + closed[ns[0]] = ns[1] + + +def __add_to_open_set(open_set, ns): + """ + Adds a new state to the open set whether necessary + + Parameters + ---------------- + open_set + Open set + ns + New state + """ + """ + shall_add = True + shall_heapify = False + i = 0 + while i < len(open_set): + if open_set[i][POSITION_MARKING] == ns[POSITION_MARKING]: + if open_set[i][POSITION_INDEX] <= ns[POSITION_INDEX] and open_set[i][POSITION_TOTAL_COST] <= ns[ + POSITION_TOTAL_COST]: + # do not add anything + shall_add = False + break + if open_set[i][POSITION_INDEX] >= ns[POSITION_INDEX] and open_set[i][POSITION_TOTAL_COST] > ns[ + POSITION_TOTAL_COST]: + del open_set[i] + shall_heapify = True + continue + i = i + 1 + if shall_add: + heapq.heappush(open_set, ns) + if shall_heapify: + heapq.heapify(open_set) + """ + # the previous code minimizes memory occupation on microcontrollers, but maybe is not worthy + # the performance price on larger memory computers + heapq.heappush(open_set, ns) + return open_set + + +def __dijkstra(model_struct, trace_struct, sync_cost=align_utils.STD_SYNC_COST, max_align_time_trace=sys.maxsize, + ret_tuple_as_trans_desc=False): + """ + Alignments using Dijkstra + + Parameters + --------------- + model_struct + Efficient model structure + trace_struct + Efficient trace structure + sync_cost + Cost of a sync move (limitation: all sync moves shall have the same cost in this setting) + max_align_time_trace + Maximum alignment time for a trace (in seconds) + ret_tuple_as_trans_desc + Says if the alignments shall be constructed including also + the name of the transition, or only the label (default=False includes only the label) + + Returns + -------------- + alignment + Alignment of the trace, including: + alignment: the sequence of moves + queued: the number of states that have been queued + visited: the number of states that have been visited + cost: the cost of the alignment + """ + start_time = time.time() + + trans_pre_dict = model_struct[TRANS_PRE_DICT] + trans_post_dict = model_struct[TRANS_POST_DICT] + trans_labels_dict = model_struct[TRANS_LABELS_DICT] + transf_model_cost_function = model_struct[TRANSF_MODEL_COST_FUNCTION] + + transf_trace = trace_struct[TRANSF_TRACE] + trace_cost_function = trace_struct[TRACE_COST_FUNCTION] + + marking_dict = {} + im = __encode_marking(marking_dict, model_struct[TRANSF_IM]) + fm = __encode_marking(marking_dict, model_struct[TRANSF_FM]) + + # each state is characterized by: + # position 0 (POSITION_TOTAL_COST): total cost of the state + # position 1 (POSITION_INDEX): the opposite of the position of the trace (the higher is, the lower should + # be the state in the queue + # position 2 (POSITION_TYPE_MOVE): the type of the move: + # ----------- 0 (IS_SYNC_MOVE): sync moves + # ----------- 1 (IS_LOG_MOVE): log moves + # ----------- 2 (IS_MODEL_MOVE): model moves + # position 3 (POSITION_ALIGN_LENGTH): the length of the alignment + # position 4 (POSITION_STATES_COUNT): the count of states visited + # position 5 (POSITION_PARENT_STATE): if valued, the parent state of the current state + # position 6 (POSITION_MARKING): the marking associated to the state + # position 7 (POSITION_EN_T): if valued, the transition that was enabled to reach the state + initial_state = (0, 0, 0, 0, 0, None, im, None) + open_set = [initial_state] + heapq.heapify(open_set) + + closed = {} + dummy_count = 0 + visited = 0 + + while not len(open_set) == 0: + if (time.time() - start_time) > max_align_time_trace: + return None + curr = heapq.heappop(open_set) + curr_m0 = curr[POSITION_MARKING] + curr_m = __decode_marking(curr_m0) + # if a situation equivalent to the one of the current state has been + # visited previously, then discard this + if __check_closed(closed, (curr_m0, curr[POSITION_INDEX])): + continue + visited = visited + 1 + + __add_closed(closed, (curr_m0, curr[POSITION_INDEX])) + if curr_m0 == fm: + if -curr[POSITION_INDEX] == len(transf_trace): + # returns the alignment only if the final marking has been reached AND + # the trace is over + return __reconstruct_alignment(curr, model_struct, trace_struct, visited, len(open_set), len(closed), + len(marking_dict), + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc) + # retrieves the transitions that are enabled in the current marking + en_t = [t for t in trans_pre_dict if __dict_leq(trans_pre_dict[t], curr_m)] + this_closed = set() + j = 0 + while j < len(en_t): + t = en_t[j] + # checks if a given transition can be executed in sync with the trace + is_sync = trans_labels_dict[t] == transf_trace[-curr[POSITION_INDEX]] if -curr[POSITION_INDEX] < len( + transf_trace) else False + if is_sync: + dummy_count = dummy_count + 1 + # virtually fires the transition to get a new marking + new_m = __encode_marking(marking_dict, + __fire_trans(curr_m, trans_pre_dict[t], trans_post_dict[t])) + new_state = ( + curr[POSITION_TOTAL_COST] + sync_cost, curr[POSITION_INDEX] - 1, IS_SYNC_MOVE, + curr[POSITION_ALIGN_LENGTH] + 1, dummy_count, + curr, + new_m, t) + if not __check_closed(closed, (new_state[POSITION_MARKING], new_state[POSITION_INDEX])): + # if it can be executed in a sync way, add a new state corresponding + # to the sync execution only if it has not already been closed + open_set = __add_to_open_set(open_set, new_state) + # if a sync move reached new_m, do not schedule any model move that reaches new_m + this_closed.add(new_m) + del en_t[j] + continue + j = j + 1 + en_t.sort(key=lambda t: transf_model_cost_function[t]) + j = 0 + while j < len(en_t): + t = en_t[j] + dummy_count = dummy_count + 1 + # virtually fires the transition to get a new marking + new_m = __encode_marking(marking_dict, + __fire_trans(curr_m, trans_pre_dict[t], trans_post_dict[t])) + new_state = ( + curr[POSITION_TOTAL_COST] + transf_model_cost_function[t], curr[POSITION_INDEX], IS_MODEL_MOVE, + curr[POSITION_ALIGN_LENGTH] + 1, dummy_count, curr, new_m, t) + if new_m not in this_closed and not curr_m0 == new_m: + if not __check_closed(closed, (new_state[POSITION_MARKING], new_state[POSITION_INDEX])): + open_set = __add_to_open_set(open_set, new_state) + this_closed.add(new_m) + j = j + 1 + + # IMPORTANT: to reduce the complexity, assume that you can schedule a log move + # only if the previous move has not been a move-on-model. + # since this setting is equivalent to scheduling all the log moves before and then + # the model moves + if -curr[POSITION_INDEX] < len(transf_trace) and curr[POSITION_TYPE_MOVE] != IS_MODEL_MOVE: + dummy_count = dummy_count + 1 + new_state = ( + curr[POSITION_TOTAL_COST] + trace_cost_function[-curr[POSITION_INDEX]], curr[POSITION_INDEX] - 1, + IS_LOG_MOVE, curr[POSITION_ALIGN_LENGTH] + 1, dummy_count, curr, curr_m0, None) + if not __check_closed(closed, (new_state[POSITION_MARKING], new_state[POSITION_INDEX])): + # adds the log move only if it has not been already closed before + open_set = __add_to_open_set(open_set, new_state) + + +def __reconstruct_alignment(curr, model_struct, trace_struct, visited, open_set_length, closed_set_length, + num_visited_markings, ret_tuple_as_trans_desc=False): + """ + Reconstruct the alignment from the final state (that reached the final marking) + + Parameters + ---------------- + curr + Current state (final state) + model_struct + Efficient data structure for the model + trace_struct + Efficient data structure for the trace + visited + Number of visited states + open_set_length + Length of the open set + closed_set_length + Length of the closed set + num_visited_markings + Number of visited markings + ret_tuple_as_trans_desc + Says if the alignments shall be constructed including also + the name of the transition, or only the label (default=False includes only the label) + + Returns + -------------- + alignment + Alignment of the trace, including: + alignment: the sequence of moves + queued: the number of states that have been queued + visited: the number of states that have been visited + cost: the cost of the alignment + """ + transf_trace = trace_struct[TRANSF_TRACE] + inv_labels_dict = trace_struct[INV_TRACE_LABELS_DICT] + inv_trans_dict = model_struct[INV_TRANS_DICT] + + alignment = [] + cost = curr[POSITION_TOTAL_COST] + queued = open_set_length + visited + + while curr[POSITION_PARENT_STATE] is not None: + m_name, m_label, t_name, t_label = ">>", ">>", ">>", ">>" + if curr[POSITION_TYPE_MOVE] == IS_SYNC_MOVE or curr[POSITION_TYPE_MOVE] == IS_LOG_MOVE: + name = inv_labels_dict[transf_trace[-curr[POSITION_INDEX] - 1]] + t_name, t_label = name, name + if curr[POSITION_TYPE_MOVE] == IS_SYNC_MOVE or curr[POSITION_TYPE_MOVE] == IS_MODEL_MOVE: + t = inv_trans_dict[curr[POSITION_EN_T]] + m_name, m_label = t.name, t.label + + if ret_tuple_as_trans_desc: + alignment = [((t_name, m_name), (t_label, m_label))] + alignment + else: + alignment = [(t_label, m_label)] + alignment + curr = curr[POSITION_PARENT_STATE] + + return {"alignment": alignment, "cost": cost, "queued_states": queued, "visited_states": visited, + "closed_set_length": closed_set_length, "num_visited_markings": num_visited_markings} diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/dijkstra_no_heuristics.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/dijkstra_no_heuristics.py new file mode 100644 index 0000000000000000000000000000000000000000..dadf6c3f31f8d39f82e55eef8fd5094347697a49 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/dijkstra_no_heuristics.py @@ -0,0 +1,371 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import heapq +import time + +from pm4py.objects.log import obj as log_implementation +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.objects.petri_net.utils.synchronous_product import construct_cost_aware, construct +from pm4py.objects.petri_net.utils.petri_utils import construct_trace_net_cost_aware, decorate_places_preset_trans, \ + decorate_transitions_prepostset +from pm4py.objects.petri_net.utils import align_utils as utils +from pm4py.util import exec_utils +from copy import copy +from enum import Enum +import sys +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util import variants_util +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import Trace +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing + + +class Parameters(Enum): + PARAM_TRACE_COST_FUNCTION = 'trace_cost_function' + PARAM_MODEL_COST_FUNCTION = 'model_cost_function' + PARAM_SYNC_COST_FUNCTION = 'sync_cost_function' + PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE = 'ret_tuple_as_trans_desc' + PARAM_TRACE_NET_COSTS = "trace_net_costs" + TRACE_NET_CONSTR_FUNCTION = "trace_net_constr_function" + TRACE_NET_COST_AWARE_CONSTR_FUNCTION = "trace_net_cost_aware_constr_function" + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + PARAM_MAX_ALIGN_TIME = "max_align_time" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + VARIANTS_IDX = "variants_idx" + + +def get_best_worst_cost(petri_net, initial_marking, final_marking, parameters=None): + """ + Gets the best worst cost of an alignment + + Parameters + ----------- + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + + Returns + ----------- + best_worst_cost + Best worst cost of alignment + """ + if parameters is None: + parameters = {} + trace = log_implementation.Trace() + + best_worst = apply(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + if best_worst is not None: + return best_worst['cost'] + + return None + + +def apply(trace: Trace, petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> typing.AlignmentResult: + """ + Performs the basic alignment search, given a trace and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.PARAM_SYNC_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + synchronous costs + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + trace_net_constr_function = exec_utils.get_param_value(Parameters.TRACE_NET_CONSTR_FUNCTION, parameters, + None) + trace_net_cost_aware_constr_function = exec_utils.get_param_value(Parameters.TRACE_NET_COST_AWARE_CONSTR_FUNCTION, + parameters, construct_trace_net_cost_aware) + + if trace_cost_function is None: + trace_cost_function = list( + map(lambda e: utils.STD_MODEL_LOG_MOVE_COST, trace)) + parameters[Parameters.PARAM_TRACE_COST_FUNCTION] = trace_cost_function + + if model_cost_function is None: + # reset variables value + model_cost_function = dict() + sync_cost_function = dict() + for t in petri_net.transitions: + if t.label is not None: + model_cost_function[t] = utils.STD_MODEL_LOG_MOVE_COST + sync_cost_function[t] = utils.STD_SYNC_COST + else: + model_cost_function[t] = utils.STD_TAU_COST + parameters[Parameters.PARAM_MODEL_COST_FUNCTION] = model_cost_function + parameters[Parameters.PARAM_SYNC_COST_FUNCTION] = sync_cost_function + + if trace_net_constr_function is not None: + # keep the possibility to pass TRACE_NET_CONSTR_FUNCTION in this old version + trace_net, trace_im, trace_fm = trace_net_constr_function(trace, activity_key=activity_key) + else: + trace_net, trace_im, trace_fm, parameters[ + Parameters.PARAM_TRACE_NET_COSTS] = trace_net_cost_aware_constr_function(trace, + trace_cost_function, + activity_key=activity_key) + + alignment = apply_trace_net(petri_net, initial_marking, final_marking, trace_net, trace_im, trace_fm, parameters) + return alignment + + +def apply_from_variant(variant, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a single variant + + Parameters + ------------- + variant + Variant (as string delimited by the "variant_delimiter" parameter) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + ------------ + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + trace = variants_util.variant_to_trace(variant, parameters=parameters) + + return apply(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + +def apply_from_variants_dictionary(var_dictio, petri_net, initial_marking, final_marking, parameters=None): + if parameters is None: + parameters = {} + dictio_alignments = {} + for variant in var_dictio: + dictio_alignments[variant] = apply_from_variant(variant, petri_net, initial_marking, final_marking, + parameters=parameters) + return dictio_alignments + + +def apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + start_time = time.time() + max_align_time = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME, parameters, + sys.maxsize) + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + dictio_alignments = {} + for varitem in var_list: + this_max_align_time = min(max_align_time_trace, (max_align_time - (time.time() - start_time)) * 0.5) + variant = varitem[0] + parameters[Parameters.PARAM_MAX_ALIGN_TIME_TRACE] = this_max_align_time + dictio_alignments[variant] = apply_from_variant(variant, petri_net, initial_marking, final_marking, + parameters=parameters) + return dictio_alignments + + +def apply_from_variants_list_petri_string(var_list, petri_net_string, parameters=None): + if parameters is None: + parameters = {} + + from pm4py.objects.petri_net.importer.variants import pnml as petri_importer + + petri_net, initial_marking, final_marking = petri_importer.import_petri_from_string(petri_net_string) + + res = apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=parameters) + return res + + +def apply_from_variants_list_petri_string_mprocessing(mp_output, var_list, petri_net_string, parameters=None): + if parameters is None: + parameters = {} + + res = apply_from_variants_list_petri_string(var_list, petri_net_string, parameters=parameters) + mp_output.put(res) + + +def apply_trace_net(petri_net, initial_marking, final_marking, trace_net, trace_im, trace_fm, parameters=None): + """ + Performs the basic alignment search, given a trace net and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.PARAM_SYNC_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + synchronous costs + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + Parameters.PARAM_TRACE_NET_COSTS: :class:`dict` (parameter) mapping between transitions and costs + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + ret_tuple_as_trans_desc = exec_utils.get_param_value(Parameters.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE, + parameters, False) + + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + sync_cost_function = exec_utils.get_param_value(Parameters.PARAM_SYNC_COST_FUNCTION, parameters, None) + trace_net_costs = exec_utils.get_param_value(Parameters.PARAM_TRACE_NET_COSTS, parameters, None) + + if trace_cost_function is None or model_cost_function is None or sync_cost_function is None: + sync_prod, sync_initial_marking, sync_final_marking = construct(trace_net, trace_im, + trace_fm, petri_net, + initial_marking, + final_marking, + utils.SKIP) + cost_function = utils.construct_standard_cost_function(sync_prod, utils.SKIP) + else: + revised_sync = dict() + for t_trace in trace_net.transitions: + for t_model in petri_net.transitions: + if t_trace.label == t_model.label: + revised_sync[(t_trace, t_model)] = sync_cost_function[t_model] + + sync_prod, sync_initial_marking, sync_final_marking, cost_function = construct_cost_aware( + trace_net, trace_im, trace_fm, petri_net, initial_marking, final_marking, utils.SKIP, + trace_net_costs, model_cost_function, revised_sync) + + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + + return apply_sync_prod(sync_prod, sync_initial_marking, sync_final_marking, cost_function, + utils.SKIP, ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, + max_align_time_trace=max_align_time_trace) + + +def apply_sync_prod(sync_prod, initial_marking, final_marking, cost_function, skip, ret_tuple_as_trans_desc=False, + max_align_time_trace=sys.maxsize): + return __search(sync_prod, initial_marking, final_marking, cost_function, skip, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, max_align_time_trace=max_align_time_trace) + + +def __search(sync_net, ini, fin, cost_function, skip, ret_tuple_as_trans_desc=False, + max_align_time_trace=sys.maxsize): + start_time = time.time() + + decorate_transitions_prepostset(sync_net) + decorate_places_preset_trans(sync_net) + + closed = set() + + ini_state = utils.DijkstraSearchTuple(0, ini, None, None, 0) + open_set = [ini_state] + heapq.heapify(open_set) + visited = 0 + queued = 0 + traversed = 0 + + trans_empty_preset = set(t for t in sync_net.transitions if len(t.in_arcs) == 0) + + while not len(open_set) == 0: + if (time.time() - start_time) > max_align_time_trace: + return None + + curr = heapq.heappop(open_set) + + current_marking = curr.m + already_closed = current_marking in closed + if already_closed: + continue + + if current_marking == fin: + # from pympler.asizeof import asizeof + # from pm4py.util import measurements + # measurements.Measurements.ALIGN_TIME.append(asizeof(open_set)) + return utils.__reconstruct_alignment(curr, visited, queued, traversed, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc) + + closed.add(current_marking) + visited += 1 + + enabled_trans = copy(trans_empty_preset) + for p in current_marking: + for t in p.ass_trans: + if t.sub_marking <= current_marking: + enabled_trans.add(t) + + trans_to_visit_with_cost = [(t, cost_function[t]) for t in enabled_trans if not ( + t is not None and utils.__is_log_move(t, skip) and utils.__is_model_move(t, skip))] + + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = utils.add_markings(current_marking, t.add_marking) + + if new_marking in closed: + continue + + queued += 1 + + tp = utils.DijkstraSearchTuple(curr.g + cost, new_marking, curr, t, curr.l + 1) + + heapq.heappush(open_set, tp) diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/discounted_a_star.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/discounted_a_star.py new file mode 100644 index 0000000000000000000000000000000000000000..cc9ddbddfaa593c0b2d515128a09b5cdb8e58ef1 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/discounted_a_star.py @@ -0,0 +1,517 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import heapq +import time +from pm4py import util as pm4pyutil +from pm4py.objects import petri_net +from pm4py.objects.log import obj as log_implementation +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.objects.petri_net.utils.synchronous_product import construct, construct_cost_aware +from pm4py.objects.petri_net.utils.petri_utils import construct_trace_net_cost_aware, decorate_places_preset_trans, \ + decorate_transitions_prepostset +from pm4py.objects.petri_net.utils import align_utils as utils +from pm4py.util import exec_utils +from copy import copy +from enum import Enum +import sys +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY + +''' +This version sets a specific heuristic whom paper description is under submission. +It's a transformed verison of the dijkstra_no_heuristic.py file. +Author: Boltenhagen Mathilde +Date: Nov. 2020 +''' + + +class Parameters(Enum): + PARAM_TRACE_COST_FUNCTION = 'trace_cost_function' + PARAM_MODEL_COST_FUNCTION = 'model_cost_function' + PARAM_SYNC_COST_FUNCTION = 'sync_cost_function' + PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE = 'ret_tuple_as_trans_desc' + PARAM_TRACE_NET_COSTS = "trace_net_costs" + TRACE_NET_CONSTR_FUNCTION = "trace_net_constr_function" + TRACE_NET_COST_AWARE_CONSTR_FUNCTION = "trace_net_cost_aware_constr_function" + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + PARAM_MAX_ALIGN_TIME = "max_align_time" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + VARIANTS_IDX = "variants_idx" + SYNCHRONOUS = "synchronous_dijkstra" + EXPONENT="exponent" + + +def get_best_worst_cost(petri_net, initial_marking, final_marking, parameters=None): + """ + Gets the best worst cost of an alignment + + Parameters + ----------- + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + + Returns + ----------- + best_worst_cost + Best worst cost of alignment + """ + if parameters is None: + parameters = {} + trace = log_implementation.Trace() + + best_worst = apply(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + if best_worst['cost'] > 0: + return best_worst['cost'] // utils.STD_MODEL_LOG_MOVE_COST + return 0 + + +def apply(trace, petri_net, initial_marking, final_marking, parameters=None): + """ + Performs the basic alignment search, given a trace and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.PARAM_SYNC_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + synchronous costs + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + parameters = copy(parameters) + synchro = exec_utils.get_param_value(Parameters.SYNCHRONOUS, parameters, None) + if synchro is None or synchro: + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + trace_net_constr_function = exec_utils.get_param_value(Parameters.TRACE_NET_CONSTR_FUNCTION, parameters, + None) + trace_net_cost_aware_constr_function = exec_utils.get_param_value(Parameters.TRACE_NET_COST_AWARE_CONSTR_FUNCTION, + parameters, construct_trace_net_cost_aware) + + if trace_cost_function is None: + trace_cost_function = list( + map(lambda e: utils.STD_MODEL_LOG_MOVE_COST, trace)) + parameters[Parameters.PARAM_TRACE_COST_FUNCTION] = trace_cost_function + + if model_cost_function is None: + # reset variables value + model_cost_function = dict() + sync_cost_function = dict() + for t in petri_net.transitions: + if t.label is not None: + model_cost_function[t] = utils.STD_MODEL_LOG_MOVE_COST + sync_cost_function[t] = 0 + else: + model_cost_function[t] = utils.STD_TAU_COST + parameters[Parameters.PARAM_MODEL_COST_FUNCTION] = model_cost_function + parameters[Parameters.PARAM_SYNC_COST_FUNCTION] = sync_cost_function + + if trace_net_constr_function is not None: + # keep the possibility to pass TRACE_NET_CONSTR_FUNCTION in this old version + trace_net, trace_im, trace_fm = trace_net_constr_function(trace, activity_key=activity_key) + else: + trace_net, trace_im, trace_fm, parameters[ + Parameters.PARAM_TRACE_NET_COSTS] = trace_net_cost_aware_constr_function(trace, + trace_cost_function, + activity_key=activity_key) + + alignment = apply_trace_net(petri_net, initial_marking, final_marking, trace_net, trace_im, trace_fm, parameters) + else : + expo = exec_utils.get_param_value(Parameters.EXPONENT, parameters, None) + if expo is None: + expo=2 + alignment = __search_without_synchr(petri_net, initial_marking, final_marking,trace, expo=expo) + return alignment + + +def apply_from_variant(variant, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a single variant + + Parameters + ------------- + variant + Variant (as string delimited by the "variant_delimiter" parameter) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + ------------ + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + activity_key = DEFAULT_NAME_KEY if parameters is None or PARAMETER_CONSTANT_ACTIVITY_KEY not in parameters else \ + parameters[ + pm4pyutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY] + trace = log_implementation.Trace() + variant_delimiter = exec_utils.get_param_value(Parameters.PARAMETER_VARIANT_DELIMITER, parameters, + pm4pyutil.constants.DEFAULT_VARIANT_SEP) + variant_split = variant.split(variant_delimiter) if type(variant) is str else variant + for i in range(len(variant_split)): + trace.append(log_implementation.Event({activity_key: variant_split[i]})) + return apply(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + +def apply_from_variants_dictionary(var_dictio, petri_net, initial_marking, final_marking, parameters=None): + if parameters is None: + parameters = {} + dictio_alignments = {} + for variant in var_dictio: + dictio_alignments[variant] = apply_from_variant(variant, petri_net, initial_marking, final_marking, + parameters=parameters) + return dictio_alignments + + +def apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + start_time = time.time() + max_align_time = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME, parameters, + sys.maxsize) + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + dictio_alignments = {} + for varitem in var_list: + this_max_align_time = min(max_align_time_trace, (max_align_time - (time.time() - start_time)) * 0.5) + variant = varitem[0] + parameters[Parameters.PARAM_MAX_ALIGN_TIME_TRACE] = this_max_align_time + dictio_alignments[variant] = apply_from_variant(variant, petri_net, initial_marking, final_marking, + parameters=parameters) + return dictio_alignments + + +def apply_from_variants_list_petri_string(var_list, petri_net_string, parameters=None): + if parameters is None: + parameters = {} + + from pm4py.objects.petri_net.importer.variants import pnml as petri_importer + + petri_net, initial_marking, final_marking = petri_importer.import_petri_from_string(petri_net_string) + + res = apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=parameters) + return res + + +def apply_from_variants_list_petri_string_mprocessing(mp_output, var_list, petri_net_string, parameters=None): + if parameters is None: + parameters = {} + + res = apply_from_variants_list_petri_string(var_list, petri_net_string, parameters=parameters) + mp_output.put(res) + + +def apply_trace_net(petri_net, initial_marking, final_marking, trace_net, trace_im, trace_fm, parameters=None): + """ + Performs the basic alignment search, given a trace net and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.PARAM_SYNC_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + synchronous costs + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + Parameters.PARAM_TRACE_NET_COSTS: :class:`dict` (parameter) mapping between transitions and costs + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + ret_tuple_as_trans_desc = exec_utils.get_param_value(Parameters.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE, + parameters, False) + expo = exec_utils.get_param_value(Parameters.EXPONENT, parameters, None) + if expo is None: + expo=2 + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + sync_cost_function = exec_utils.get_param_value(Parameters.PARAM_SYNC_COST_FUNCTION, parameters, None) + trace_net_costs = exec_utils.get_param_value(Parameters.PARAM_TRACE_NET_COSTS, parameters, None) + + if trace_cost_function is None or model_cost_function is None or sync_cost_function is None: + sync_prod, sync_initial_marking, sync_final_marking = construct(trace_net, trace_im, + trace_fm, petri_net, + initial_marking, + final_marking, + utils.SKIP) + cost_function = utils.construct_standard_cost_function(sync_prod, utils.SKIP) + else: + revised_sync = dict() + for t_trace in trace_net.transitions: + for t_model in petri_net.transitions: + if t_trace.label == t_model.label: + revised_sync[(t_trace, t_model)] = sync_cost_function[t_model] + + sync_prod, sync_initial_marking, sync_final_marking, cost_function = construct_cost_aware( + trace_net, trace_im, trace_fm, petri_net, initial_marking, final_marking, utils.SKIP, + trace_net_costs, model_cost_function, revised_sync) + + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + + return apply_sync_prod(sync_prod, sync_initial_marking, sync_final_marking, + utils.SKIP, ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, + max_align_time_trace=max_align_time_trace, expo=expo) + + +def apply_sync_prod(sync_prod, initial_marking, final_marking, skip, ret_tuple_as_trans_desc=False, + max_align_time_trace=sys.maxsize, expo=2): + return __search_with_synchr(sync_prod, initial_marking, final_marking, skip, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, max_align_time_trace=max_align_time_trace, + expo=expo) + + +def __search_with_synchr(sync_net, ini, fin, skip, ret_tuple_as_trans_desc=False, + max_align_time_trace=sys.maxsize, expo=2): + ''' + In this function that can be called with the following way: + alignment.algorithm.apply(trace, net, marking, fmarking,variant=ali.VERSION_DIJKSTRA_EXPONENTIAL_HEURISTIC, + parameters={ali.Parameters.SYNCHRONOUS:True}) + Cost of transition depends on the run of the synchronous product. + Other parameters: + ali.Parameters.EXPONENT:2 (change the base of the log) + ''' + start_time = time.time() + decorate_transitions_prepostset(sync_net) + decorate_places_preset_trans(sync_net) + closed = {} + + + ini_state = utils.DijkstraSearchTuple(0, ini, None, None, 0) + open_set = [ini_state] + heapq.heapify(open_set) + visited = 0 + queued = 0 + traversed = 0 + + def cost_function(t,l, expo): + if t.label is None: + return expo**(-l) + if t.label[1]==utils.SKIP or t.label[0]==utils.SKIP: + return expo**(-l) + else : + return 0 + + trans_empty_preset = set(t for t in sync_net.transitions if len(t.in_arcs) == 0) + + while not len(open_set) == 0: + if (time.time() - start_time) > max_align_time_trace: + return None + + curr = heapq.heappop(open_set) + + current_marking = curr.m + already_closed = current_marking in closed.keys() + + if already_closed : + continue + + if current_marking == fin: + return utils.__reconstruct_alignment(curr, visited, queued, traversed, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc) + + closed[current_marking]=curr.l + visited += 1 + + possible_enabling_transitions = copy(trans_empty_preset) + for p in current_marking: + for t in p.ass_trans: + possible_enabling_transitions.add(t) + + enabled_trans = [t for t in possible_enabling_transitions if t.sub_marking <= current_marking] + trans_to_visit_with_cost = [(t, cost_function(t,curr.l,expo)) for t in enabled_trans if t is not None ] + + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = utils.add_markings(current_marking, t.add_marking) + + already_closed = new_marking in closed.keys() + if already_closed: + continue + + queued += 1 + + tp = utils.DijkstraSearchTuple(curr.g + cost, new_marking, curr, t, curr.l + 1) + + heapq.heappush(open_set, tp) + +def __search_without_synchr(net, ini, fin, log_trace, skip= utils.SKIP, ret_tuple_as_trans_desc=True, + max_align_time_trace=sys.maxsize,expo=2): + ''' + In this function that can be called with the following way: + alignment.algorithm.apply(trace, net, marking, fmarking,variant=ali.VERSION_DIJKSTRA_EXPONENTIAL_HEURISTIC, + parameters={ali.Parameters.SYNCHRONOUS:False}) + we compute the distance at each marking. However there is a question: + Should we keep the entire trace or cut it? + Notice that the heuristic on marking reachability is ON + ''' + trace = [log_trace[i]["concept:name"] for i in range(len(log_trace))] + start_time = time.time() + decorate_transitions_prepostset(net) + decorate_places_preset_trans(net) + closed = {} + + # a node in this version contains the marking state.m[Ø] and the position in the trace state.m[1] + ini_state = utils.DijkstraSearchTuple(0, (ini,0), None, None, 0) + open_set = [ini_state] + heapq.heapify(open_set) + visited = 0 + queued = 0 + traversed = 0 + + def cost_function(t,l, expo): + if t == utils.SKIP : + return expo**(-l) + else : + return 0 + + trans_empty_preset = set(t for t in net.transitions if len(t.in_arcs) == 0) + + while not len(open_set) == 0: + + if (time.time() - start_time) > max_align_time_trace: + return None + + curr = heapq.heappop(open_set) + + current_marking = curr.m + already_closed = current_marking in closed.keys() + + if already_closed: + # if marking has already been visited, we don't visit it again + # it's a heuristic + continue + + if current_marking[0] == fin and current_marking[1] == len(trace): + return utils.__reconstruct_alignment(curr, visited, queued, traversed, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc) + + closed[current_marking]=curr.l + + visited += 1 + + # ----- either we try to move in model + possible_enabling_transitions = copy(trans_empty_preset) + for p in current_marking[0]: + for t in p.ass_trans: + possible_enabling_transitions.add(t) + + enabled_trans = [t for t in possible_enabling_transitions if t.sub_marking <= current_marking[0]] + + trans_to_visit_with_cost = [(t, cost_function(utils.SKIP,curr.l,expo)) for t in enabled_trans if t is not None ] + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = (utils.add_markings(current_marking[0], t.add_marking),current_marking[1]) + + if new_marking in closed.keys() : + # if marking has already been visited, we don't visit it again + # it's a heuristic + continue + + queued += 1 + + tp = utils.DijkstraSearchTuple(curr.g + cost, new_marking, curr, (">>",t), curr.l + 1) + + heapq.heappush(open_set, tp) + + # ------ either we try to move in log + if current_marking[1] < len(trace) : + traversed += 1 + new_marking = (current_marking[0],current_marking[1]+1) + if new_marking in closed.keys() : + # if marking has already been visited, we don't visit it again + # it's a heuristic + continue + queued += 1 + tp = utils.DijkstraSearchTuple(curr.g + cost_function(utils.SKIP,curr.l,expo), new_marking, curr, (trace[current_marking[1]],">>") , curr.l + 1) + + heapq.heappush(open_set, tp) + + # ------ either we try to move in both (synchronous moves) + trans_to_visit_with_cost = [(t, cost_function(t,curr.l,expo)) for t in enabled_trans if t is not None and + str(t) == trace[current_marking[1]]] + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = (utils.add_markings(current_marking[0], t.add_marking),current_marking[1]+1) + + if new_marking in closed.keys() : + # if marking has already been visited, we don't visit it again + # it's a heuristic + continue + + queued += 1 + + tp = utils.DijkstraSearchTuple(curr.g + cost, new_marking, curr, (trace[current_marking[1]],t), curr.l + 1) + + heapq.heappush(open_set, tp) + diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/generator_dijkstra_less_memory.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/generator_dijkstra_less_memory.py new file mode 100644 index 0000000000000000000000000000000000000000..92aed45b95d4ec943e5357ed4b4433639fb4555b --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/generator_dijkstra_less_memory.py @@ -0,0 +1,630 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import time +import sys +from pm4py.objects.petri_net.utils import align_utils +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util import exec_utils +from pm4py.objects.petri_net.semantics import enabled_transitions +from enum import Enum +from copy import copy +import heapq +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import Trace +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing + + +class Parameters(Enum): + PARAM_TRACE_COST_FUNCTION = 'trace_cost_function' + PARAM_MODEL_COST_FUNCTION = 'model_cost_function' + PARAM_STD_SYNC_COST = 'std_sync_cost' + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + PARAM_MAX_ALIGN_TIME = "max_align_time" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE = 'ret_tuple_as_trans_desc' + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + + +PLACES_DICT = "places_dict" +INV_TRANS_DICT = "inv_trans_dict" +LABELS_DICT = "labels_dict" +TRANS_LABELS_DICT = "trans_labels_dict" +TRANS_PRE_DICT = "trans_pre_dict" +TRANS_POST_DICT = "trans_post_dict" +TRANSF_IM = "transf_im" +TRANSF_FM = "transf_fm" +TRANSF_MODEL_COST_FUNCTION = "transf_model_cost_function" +TRANSF_TRACE = "transf_trace" +TRACE_COST_FUNCTION = "trace_cost_function" +INV_TRACE_LABELS_DICT = "inv_trace_labels_dict" + +IS_SYNC_MOVE = 0 +IS_LOG_MOVE = 1 +IS_MODEL_MOVE = 2 + +POSITION_TOTAL_COST = 0 +POSITION_INDEX = 1 +POSITION_TYPE_MOVE = 2 +POSITION_ALIGN_LENGTH = 3 +POSITION_STATES_COUNT = 4 +POSITION_PARENT_STATE = 5 +POSITION_MARKING = 6 +POSITION_EN_T = 7 + + +def __transform_model_to_mem_efficient_structure(net, im, fm, trace, parameters=None): + """ + Transform the Petri net model to a memory efficient structure + + Parameters + -------------- + net + Petri net + im + Initial marking + fm + Final marking + trace + Trace + parameters + Parameters + + Returns + -------------- + model_struct + Model data structure, including: + PLACES_DICT: associates each place to a number + INV_TRANS_DICT: associates a number to each transition + LABELS_DICT: labels dictionary (a label to a number) + TRANS_LABELS_DICT: associates each transition to the number corresponding to its label + TRANS_PRE_DICT: preset of a transition, expressed as in this data structure + TRANS_POST_DICT: postset of a transition, expressed as in this data structure + TRANSF_IM: transformed initial marking + TRANSF_FM: transformed final marking + TRANSF_MODEL_COST_FUNCTION: transformed model cost function + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + labels = sorted(list(set(x[activity_key] for x in trace))) + + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + + if model_cost_function is None: + model_cost_function = {} + for t in net.transitions: + if t.label is not None: + model_cost_function[t] = align_utils.STD_MODEL_LOG_MOVE_COST + else: + preset_t = Marking() + for a in t.in_arcs: + preset_t[a.source] = a.weight + en_t = enabled_transitions(net, preset_t) + vis_t_trace = [t for t in en_t if t.label in labels] + if len(vis_t_trace) == 0: + model_cost_function[t] = align_utils.STD_TAU_COST + else: + model_cost_function[t] = align_utils.STD_TAU_COST + + places_dict = {place: index for index, place in enumerate(net.places)} + trans_dict = {trans: index for index, trans in enumerate(net.transitions)} + + labels = sorted(list(set(t.label for t in net.transitions if t.label is not None))) + labels_dict = {labels[i]: i for i in range(len(labels))} + + trans_labels_dict = {} + for t in net.transitions: + trans_labels_dict[trans_dict[t]] = labels_dict[t.label] if t.label is not None else None + + trans_pre_dict = {trans_dict[t]: {places_dict[x.source]: x.weight for x in t.in_arcs} for t in + net.transitions} + trans_post_dict = {trans_dict[t]: {places_dict[x.target]: x.weight for x in t.out_arcs} for t in + net.transitions} + + transf_im = {places_dict[p]: im[p] for p in im} + transf_fm = {places_dict[p]: fm[p] for p in fm} + + transf_model_cost_function = {trans_dict[t]: model_cost_function[t] for t in net.transitions} + + inv_trans_dict = {y: x for x, y in trans_dict.items()} + + return {PLACES_DICT: places_dict, INV_TRANS_DICT: inv_trans_dict, LABELS_DICT: labels_dict, + TRANS_LABELS_DICT: trans_labels_dict, TRANS_PRE_DICT: trans_pre_dict, + TRANS_POST_DICT: trans_post_dict, + TRANSF_IM: transf_im, TRANSF_FM: transf_fm, TRANSF_MODEL_COST_FUNCTION: transf_model_cost_function} + + +def __transform_trace_to_mem_efficient_structure(trace, model_struct, parameters=None): + """ + Transforms a trace to a memory efficient structure + + Parameters + --------------- + trace + Trace + model_struct + Efficient data structure for the model (calculated above) + parameters + Parameters + + Returns + --------------- + trace_struct + An efficient structure describing the trace, including: + TRANSF_TRACE: the transformed trace + TRACE_COST_FUNCTION: the cost function associated to the trace + INV_TRACE_LABELS_DICT: dictionary that associates a number to an activity + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + if trace_cost_function is None: + trace_cost_function = {i: align_utils.STD_MODEL_LOG_MOVE_COST for i in range(len(trace))} + + labels = sorted(list(set(x[activity_key] for x in trace))) + labels_dict = copy(model_struct[LABELS_DICT]) + + for l in labels: + if l not in labels_dict: + labels_dict[l] = len(labels_dict) + + transf_trace = [labels_dict[x[activity_key]] for x in trace] + + inv_trace_labels_dict = {y: x for x, y in labels_dict.items()} + return {TRANSF_TRACE: transf_trace, TRACE_COST_FUNCTION: trace_cost_function, + INV_TRACE_LABELS_DICT: inv_trace_labels_dict} + + +def apply(trace: Trace, net: PetriNet, im: Marking, fm: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> typing.AlignmentResult: + """ + Performs the basic alignment search, given a trace and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + model_struct = __transform_model_to_mem_efficient_structure(net, im, fm, trace, parameters=parameters) + trace_struct = __transform_trace_to_mem_efficient_structure(trace, model_struct, parameters=parameters) + + sync_cost = exec_utils.get_param_value(Parameters.PARAM_STD_SYNC_COST, parameters, align_utils.STD_SYNC_COST) + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + ret_tuple_as_trans_desc = exec_utils.get_param_value(Parameters.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE, + parameters, False) + + return __dijkstra(model_struct, trace_struct, sync_cost=sync_cost, max_align_time_trace=max_align_time_trace, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc) + + +def __dict_leq(d1, d2): + """ + Checks if the first dictionary is <= the second + + Parameters + -------------- + d1 + First dictionary + d2 + Second dictionary + + Returns + -------------- + boolean + Boolean + """ + for k in d1: + if k not in d2: + return False + if d1[k] > d2[k]: + return False + return True + + +def __fire_trans(m, preset, postset): + """ + Fires a transition and returns a new marking + + Parameters + --------------- + m + Marking + preset + Preset + postset + Postset + + Returns + --------------- + new_m + New marking + """ + ret = {} + for k in m: + if k in preset: + diff = m[k] - preset[k] + if diff > 0: + ret[k] = diff + else: + ret[k] = m[k] + for k in postset: + if k not in ret: + ret[k] = postset[k] + else: + ret[k] = ret[k] + postset[k] + return ret + + +def __encode_marking(marking_dict, m_d): + """ + Encode a marking using the dictionary + + Parameters + -------------- + marking_dict + Marking dictionary + m_d + Current marking (dict) + + Returns + -------------- + m_t + Marking in tuple + """ + keys = sorted(list(m_d.keys())) + m_t = [] + for el in keys: + for i in range(m_d[el]): + m_t.append(el) + m_t = tuple(m_t) + if m_t not in marking_dict: + marking_dict[m_t] = m_t + return marking_dict[m_t] + + +def __decode_marking(m_t): + """ + Decode a marking using a dictionary + + Parameters + --------------- + m_t + Marking as tuple + + Returns + --------------- + m_d + Marking as dictionary + """ + m_d = {} + for el in m_t: + if el not in m_d: + m_d[el] = 1 + else: + m_d[el] = m_d[el] + 1 + + return m_d + + +def __check_closed(closed, ns): + """ + Checks if the state is closed + + Parameters + ------------- + closed + Closed set + ns + New state (marking, index) + + Returns + ------------- + bool + Boolean (true if the state is closed) + """ + if ns[0] in closed: + if closed[ns[0]] < ns[1]: + return True + elif closed[ns[0]] == ns[1]: + return False + return False + + +def __add_closed(closed, ns): + """ + Adds a closed state + + Parameters + -------------- + closed + Closed set + ns + New state (marking, index) + """ + closed[ns[0]] = ns[1] + + +def __add_to_open_set(open_set, ns): + """ + Adds a new state to the open set whether necessary + + Parameters + ---------------- + open_set + Open set + ns + New state + """ + """ + shall_add = True + shall_heapify = False + i = 0 + while i < len(open_set): + if open_set[i][POSITION_MARKING] == ns[POSITION_MARKING]: + if open_set[i][POSITION_INDEX] <= ns[POSITION_INDEX] and open_set[i][POSITION_TOTAL_COST] <= ns[ + POSITION_TOTAL_COST]: + # do not add anything + shall_add = False + break + if open_set[i][POSITION_INDEX] >= ns[POSITION_INDEX] and open_set[i][POSITION_TOTAL_COST] > ns[ + POSITION_TOTAL_COST]: + del open_set[i] + shall_heapify = True + continue + i = i + 1 + if shall_add: + heapq.heappush(open_set, ns) + if shall_heapify: + heapq.heapify(open_set) + """ + # the previous code minimizes memory occupation on microcontrollers, but maybe is not worthy + # the performance price on larger memory computers + heapq.heappush(open_set, ns) + return open_set + + +def __dijkstra(model_struct, trace_struct, sync_cost=align_utils.STD_SYNC_COST, max_align_time_trace=sys.maxsize, + ret_tuple_as_trans_desc=False): + """ + Alignments using Dijkstra + + Parameters + --------------- + model_struct + Efficient model structure + trace_struct + Efficient trace structure + sync_cost + Cost of a sync move (limitation: all sync moves shall have the same cost in this setting) + max_align_time_trace + Maximum alignment time for a trace (in seconds) + ret_tuple_as_trans_desc + Says if the alignments shall be constructed including also + the name of the transition, or only the label (default=False includes only the label) + + Returns + -------------- + alignment + Alignment of the trace, including: + alignment: the sequence of moves + queued: the number of states that have been queued + visited: the number of states that have been visited + cost: the cost of the alignment + """ + start_time = time.time() + + trans_pre_dict = model_struct[TRANS_PRE_DICT] + trans_post_dict = model_struct[TRANS_POST_DICT] + trans_labels_dict = model_struct[TRANS_LABELS_DICT] + transf_model_cost_function = model_struct[TRANSF_MODEL_COST_FUNCTION] + + transf_trace = trace_struct[TRANSF_TRACE] + trace_cost_function = trace_struct[TRACE_COST_FUNCTION] + + marking_dict = {} + im = __encode_marking(marking_dict, model_struct[TRANSF_IM]) + fm = __encode_marking(marking_dict, model_struct[TRANSF_FM]) + + # each state is characterized by: + # position 0 (POSITION_TOTAL_COST): total cost of the state + # position 1 (POSITION_INDEX): the opposite of the position of the trace (the higher is, the lower should + # be the state in the queue + # position 2 (POSITION_TYPE_MOVE): the type of the move: + # ----------- 0 (IS_SYNC_MOVE): sync moves + # ----------- 1 (IS_LOG_MOVE): log moves + # ----------- 2 (IS_MODEL_MOVE): model moves + # position 3 (POSITION_ALIGN_LENGTH): the length of the alignment + # position 4 (POSITION_STATES_COUNT): the count of states visited + # position 5 (POSITION_PARENT_STATE): if valued, the parent state of the current state + # position 6 (POSITION_MARKING): the marking associated to the state + # position 7 (POSITION_EN_T): if valued, the transition that was enabled to reach the state + initial_state = (0, 0, 0, 0, 0, None, im, None) + open_set = [initial_state] + heapq.heapify(open_set) + + closed = {} + dummy_count = 0 + visited = 0 + + opt_cost = sys.maxsize + visited_sequences = set() + + while not len(open_set) == 0: + if (time.time() - start_time) > max_align_time_trace: + return None + curr = heapq.heappop(open_set) + curr_m0 = curr[POSITION_MARKING] + curr_m = __decode_marking(curr_m0) + # if a situation equivalent to the one of the current state has been + # visited previously, then discard this + if __check_closed(closed, (curr_m0, curr[POSITION_INDEX])): + continue + visited = visited + 1 + + curr_cost = curr[POSITION_TOTAL_COST] + if curr_cost > opt_cost: + break + + if curr_m0 == fm: + if -curr[POSITION_INDEX] == len(transf_trace): + opt_cost = curr_cost + ali = __reconstruct_alignment(curr, model_struct, trace_struct, visited, len(open_set), len(closed), + len(marking_dict), + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc) + ali_sequence = tuple(ali["alignment"]) + if ali_sequence not in visited_sequences: + visited_sequences.add(ali_sequence) + yield ali + continue + __add_closed(closed, (curr_m0, curr[POSITION_INDEX])) + + # retrieves the transitions that are enabled in the current marking + en_t = [t for t in trans_pre_dict if __dict_leq(trans_pre_dict[t], curr_m)] + j = 0 + while j < len(en_t): + t = en_t[j] + # checks if a given transition can be executed in sync with the trace + is_sync = trans_labels_dict[t] == transf_trace[-curr[POSITION_INDEX]] if -curr[POSITION_INDEX] < len( + transf_trace) else False + if is_sync: + dummy_count = dummy_count + 1 + # virtually fires the transition to get a new marking + new_m = __encode_marking(marking_dict, + __fire_trans(curr_m, trans_pre_dict[t], trans_post_dict[t])) + new_state = ( + curr[POSITION_TOTAL_COST] + sync_cost, curr[POSITION_INDEX] - 1, IS_SYNC_MOVE, + curr[POSITION_ALIGN_LENGTH] + 1, dummy_count, + curr, + new_m, t) + if not __check_closed(closed, (new_state[POSITION_MARKING], new_state[POSITION_INDEX])): + # if it can be executed in a sync way, add a new state corresponding + # to the sync execution only if it has not already been closed + open_set = __add_to_open_set(open_set, new_state) + del en_t[j] + continue + j = j + 1 + en_t.sort(key=lambda t: transf_model_cost_function[t]) + j = 0 + while j < len(en_t): + t = en_t[j] + dummy_count = dummy_count + 1 + # virtually fires the transition to get a new marking + new_m = __encode_marking(marking_dict, + __fire_trans(curr_m, trans_pre_dict[t], trans_post_dict[t])) + new_state = ( + curr[POSITION_TOTAL_COST] + transf_model_cost_function[t], curr[POSITION_INDEX], IS_MODEL_MOVE, + curr[POSITION_ALIGN_LENGTH] + 1, dummy_count, curr, new_m, t) + if not curr_m0 == new_m: + if not __check_closed(closed, (new_state[POSITION_MARKING], new_state[POSITION_INDEX])): + open_set = __add_to_open_set(open_set, new_state) + j = j + 1 + + # IMPORTANT: to reduce the complexity, assume that you can schedule a log move + # only if the previous move has not been a move-on-model. + # since this setting is equivalent to scheduling all the log moves before and then + # the model moves + if -curr[POSITION_INDEX] < len(transf_trace) and curr[POSITION_TYPE_MOVE] != IS_MODEL_MOVE: + dummy_count = dummy_count + 1 + new_state = ( + curr[POSITION_TOTAL_COST] + trace_cost_function[-curr[POSITION_INDEX]], curr[POSITION_INDEX] - 1, + IS_LOG_MOVE, curr[POSITION_ALIGN_LENGTH] + 1, dummy_count, curr, curr_m0, None) + if not __check_closed(closed, (new_state[POSITION_MARKING], new_state[POSITION_INDEX])): + # adds the log move only if it has not been already closed before + open_set = __add_to_open_set(open_set, new_state) + + +def __reconstruct_alignment(curr, model_struct, trace_struct, visited, open_set_length, closed_set_length, + num_visited_markings, ret_tuple_as_trans_desc=False): + """ + Reconstruct the alignment from the final state (that reached the final marking) + + Parameters + ---------------- + curr + Current state (final state) + model_struct + Efficient data structure for the model + trace_struct + Efficient data structure for the trace + visited + Number of visited states + open_set_length + Length of the open set + closed_set_length + Length of the closed set + num_visited_markings + Number of visited markings + ret_tuple_as_trans_desc + Says if the alignments shall be constructed including also + the name of the transition, or only the label (default=False includes only the label) + + Returns + -------------- + alignment + Alignment of the trace, including: + alignment: the sequence of moves + queued: the number of states that have been queued + visited: the number of states that have been visited + cost: the cost of the alignment + """ + transf_trace = trace_struct[TRANSF_TRACE] + inv_labels_dict = trace_struct[INV_TRACE_LABELS_DICT] + inv_trans_dict = model_struct[INV_TRANS_DICT] + + alignment = [] + cost = curr[POSITION_TOTAL_COST] + queued = open_set_length + visited + + while curr[POSITION_PARENT_STATE] is not None: + m_name, m_label, t_name, t_label = ">>", ">>", ">>", ">>" + if curr[POSITION_TYPE_MOVE] == IS_SYNC_MOVE or curr[POSITION_TYPE_MOVE] == IS_LOG_MOVE: + name = inv_labels_dict[transf_trace[-curr[POSITION_INDEX] - 1]] + t_name, t_label = name, name + if curr[POSITION_TYPE_MOVE] == IS_SYNC_MOVE or curr[POSITION_TYPE_MOVE] == IS_MODEL_MOVE: + t = inv_trans_dict[curr[POSITION_EN_T]] + m_name, m_label = t.name, t.label + + if ret_tuple_as_trans_desc: + alignment = [((t_name, m_name), (t_label, m_label))] + alignment + else: + alignment = [(t_label, m_label)] + alignment + curr = curr[POSITION_PARENT_STATE] + + return {"alignment": alignment, "cost": cost, "queued_states": queued, "visited_states": visited, + "closed_set_length": closed_set_length, "num_visited_markings": num_visited_markings} diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/generator_dijkstra_no_heuristics.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/generator_dijkstra_no_heuristics.py new file mode 100644 index 0000000000000000000000000000000000000000..6de1b2cdfc5788660e21b7c44c0723010b406bea --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/generator_dijkstra_no_heuristics.py @@ -0,0 +1,376 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import heapq +import time +from collections.abc import Iterator + +from pm4py.objects.log import obj as log_implementation +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.objects.petri_net.utils.synchronous_product import construct_cost_aware, construct +from pm4py.objects.petri_net.utils.petri_utils import construct_trace_net_cost_aware, decorate_places_preset_trans, \ + decorate_transitions_prepostset +from pm4py.objects.petri_net.utils import align_utils as utils +from pm4py.util import exec_utils +from copy import copy +from enum import Enum +import sys +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from typing import Optional, Dict, Any, Union, List as TList +from pm4py.objects.log.obj import Trace +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing + + +class Parameters(Enum): + PARAM_TRACE_COST_FUNCTION = 'trace_cost_function' + PARAM_MODEL_COST_FUNCTION = 'model_cost_function' + PARAM_SYNC_COST_FUNCTION = 'sync_cost_function' + PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE = 'ret_tuple_as_trans_desc' + PARAM_TRACE_NET_COSTS = "trace_net_costs" + TRACE_NET_CONSTR_FUNCTION = "trace_net_constr_function" + TRACE_NET_COST_AWARE_CONSTR_FUNCTION = "trace_net_cost_aware_constr_function" + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + PARAM_MAX_ALIGN_TIME = "max_align_time" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + VARIANTS_IDX = "variants_idx" + + +def get_best_worst_cost(petri_net, initial_marking, final_marking, parameters=None): + """ + Gets the best worst cost of an alignment + + Parameters + ----------- + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + + Returns + ----------- + best_worst_cost + Best worst cost of alignment + """ + if parameters is None: + parameters = {} + trace = log_implementation.Trace() + + best_worst = next(apply(trace, petri_net, initial_marking, final_marking, parameters=parameters)) + + if best_worst is not None: + return best_worst['cost'] + + return None + + +def apply(trace: Trace, petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Iterator[typing.AlignmentResult]: + """ + Performs the basic alignment search, given a trace and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.PARAM_SYNC_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + synchronous costs + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + trace_net_constr_function = exec_utils.get_param_value(Parameters.TRACE_NET_CONSTR_FUNCTION, parameters, + None) + trace_net_cost_aware_constr_function = exec_utils.get_param_value(Parameters.TRACE_NET_COST_AWARE_CONSTR_FUNCTION, + parameters, construct_trace_net_cost_aware) + + if trace_cost_function is None: + trace_cost_function = list( + map(lambda e: utils.STD_MODEL_LOG_MOVE_COST, trace)) + parameters[Parameters.PARAM_TRACE_COST_FUNCTION] = trace_cost_function + + if model_cost_function is None: + # reset variables value + model_cost_function = dict() + sync_cost_function = dict() + for t in petri_net.transitions: + if t.label is not None: + model_cost_function[t] = utils.STD_MODEL_LOG_MOVE_COST + sync_cost_function[t] = utils.STD_SYNC_COST + else: + model_cost_function[t] = utils.STD_TAU_COST + parameters[Parameters.PARAM_MODEL_COST_FUNCTION] = model_cost_function + parameters[Parameters.PARAM_SYNC_COST_FUNCTION] = sync_cost_function + + if trace_net_constr_function is not None: + # keep the possibility to pass TRACE_NET_CONSTR_FUNCTION in this old version + trace_net, trace_im, trace_fm = trace_net_constr_function(trace, activity_key=activity_key) + else: + trace_net, trace_im, trace_fm, parameters[ + Parameters.PARAM_TRACE_NET_COSTS] = trace_net_cost_aware_constr_function(trace, + trace_cost_function, + activity_key=activity_key) + + yield from apply_trace_net(petri_net, initial_marking, final_marking, trace_net, trace_im, trace_fm, parameters) + + +def apply_trace_net(petri_net, initial_marking, final_marking, trace_net, trace_im, trace_fm, parameters=None): + """ + Performs the basic alignment search, given a trace net and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.PARAM_SYNC_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + synchronous costs + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + Parameters.PARAM_TRACE_NET_COSTS: :class:`dict` (parameter) mapping between transitions and costs + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + ret_tuple_as_trans_desc = exec_utils.get_param_value(Parameters.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE, + parameters, False) + + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + sync_cost_function = exec_utils.get_param_value(Parameters.PARAM_SYNC_COST_FUNCTION, parameters, None) + trace_net_costs = exec_utils.get_param_value(Parameters.PARAM_TRACE_NET_COSTS, parameters, None) + + if trace_cost_function is None or model_cost_function is None or sync_cost_function is None: + sync_prod, sync_initial_marking, sync_final_marking = construct(trace_net, trace_im, + trace_fm, petri_net, + initial_marking, + final_marking, + utils.SKIP) + cost_function = utils.construct_standard_cost_function(sync_prod, utils.SKIP) + else: + revised_sync = dict() + for t_trace in trace_net.transitions: + for t_model in petri_net.transitions: + if t_trace.label == t_model.label: + revised_sync[(t_trace, t_model)] = sync_cost_function[t_model] + + sync_prod, sync_initial_marking, sync_final_marking, cost_function = construct_cost_aware( + trace_net, trace_im, trace_fm, petri_net, initial_marking, final_marking, utils.SKIP, + trace_net_costs, model_cost_function, revised_sync) + + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + + yield from apply_sync_prod(sync_prod, sync_initial_marking, sync_final_marking, cost_function, + utils.SKIP, ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, + max_align_time_trace=max_align_time_trace) + + + +def apply_sync_prod(sync_prod, initial_marking, final_marking, cost_function, skip, ret_tuple_as_trans_desc=False, + max_align_time_trace=sys.maxsize): + yield from __search(sync_prod, initial_marking, final_marking, cost_function, skip, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, max_align_time_trace=max_align_time_trace) + + +def __search(sync_net, ini, fin, cost_function, skip, ret_tuple_as_trans_desc=False, + max_align_time_trace=sys.maxsize): + start_time = time.time() + + # gviz = vizapply( net=sync_net, initial_marking=ini, final_marking=fin, variant=vizvariant.WO_DECORATION ) + # vizview(gviz) + + decorate_transitions_prepostset(sync_net) + decorate_places_preset_trans(sync_net) + + closed = set() + hub:dict[Marking,list[utils.DijkstraSearchTuple]] = dict() + hub_dist:dict[Marking,int] = dict() + # Given a marking, holds many tuples of (search tuples that reached it, distance) in two arrays + + ini_state = utils.DijkstraSearchTuple(0, ini, None, None, 0) + open_set = [ini_state] + hub[ini_state.m] = [ini_state] + hub_dist[ini_state.m] = 0 + heapq.heapify(open_set) + visited = 0 + queued = 0 + traversed = 0 + + trans_empty_preset = set(t for t in sync_net.transitions if len(t.in_arcs) == 0) + + while not len(open_set) == 0: + if (time.time() - start_time) > max_align_time_trace: + return None + + curr = heapq.heappop(open_set) + current_marking = curr.m + + # We don't use closed, but check visited path for any loops. + # if check_cycle_in_searchtuple(curr) : + # continue + + # Prevent recursion on already-closed markings (once is enough) + # Required because multiple paths can add a marking before it get visited. + already_closed = current_marking in closed + if already_closed: + continue + + # print("MARKING[v={},q={},t={},h={}]: {} {}".format(visited, queued, traversed, len(open_set), repr(current_marking), hash(current_marking))) + # print(repr_searchtuple(curr)) + + closed.add(current_marking) + visited += 1 + + # If we try to expand the `fin` node , then we can be sure that no better (more optimal) + # paths can exist, since the heap would have visited them before (and there is always a cost + # to reach the final node). + if current_marking == fin: + for alignment in reconstruct_alignment_generator(hub, curr, ret_tuple_as_trans_desc=ret_tuple_as_trans_desc) : + yield { + 'alignment': alignment, + 'cost': curr.g, + 'visited_states': visited, + 'queued_states': queued, + 'traversed_arcs': traversed, + 'lp_solved': False + } + return # No transition may originate from the fin node. + + enabled_trans = copy(trans_empty_preset) + for p in current_marking: + for t in p.ass_trans: + if t.sub_marking <= current_marking: + enabled_trans.add(t) + + trans_to_visit_with_cost = [(t, cost_function[t]) for t in enabled_trans if not ( + t is not None and utils.__is_log_move(t, skip) and utils.__is_model_move(t, skip))] + + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = utils.add_markings(current_marking, t.add_marking) # Counter operations. + tp = utils.DijkstraSearchTuple(g= curr.g + cost, m= new_marking, p= curr, t= t, l= curr.l + 1) + + # We don't use closed, but check visited path for any loops. + # if check_cycle_in_searchtuple(tp) : + # continue + if new_marking in closed: + continue + + # Each marking contains all paths that reached it. Used later for reconstruction. + # We also make sure that each hub node only contains paths with the minimal distance. + this_cost = curr.g + cost + if new_marking not in hub : + hub[new_marking] = [] + hub_dist[new_marking] = this_cost + min_cost = hub_dist[new_marking] + if this_cost < min_cost : + hub[new_marking] = [tp] + hub_dist[new_marking] = this_cost + elif this_cost == min_cost : + hub[new_marking] = hub[new_marking] + [tp] + else : + pass # ignore if this one is bigger + + queued += 1 + + heapq.heappush(open_set, tp) + + + +def check_cycle_in_searchtuple ( st: utils.DijkstraSearchTuple ) -> bool : + rep = set() + while st is not None : + if st.m in rep : + return True + rep.add(st.m) + st = st.p + return False + + +def repr_searchtuple ( st: utils.DijkstraSearchTuple ) -> str : + out = [] + while st is not None : + out.append("{}+{}".format(repr(st.m),hash(st.m))) + st = st.p + return " -> ".join(reversed(out)) + + + +def rec_hub (hub, curr_m) -> TList[TList[utils.DijkstraSearchTuple]]: + + out = [] + for curr_st in hub[curr_m] : + if curr_st.p is not None : + prefixes = rec_hub(hub, curr_st.p.m) + for pref in prefixes : + out.append( pref + [curr_st] ) + else : + out.append( [curr_st] ) + + return out + + +def reconstruct_alignment_generator ( + hub, state:utils.DijkstraSearchTuple, ret_tuple_as_trans_desc=False +): + # print("Reconstruction at: {}".format(state.m)) + paths = rec_hub(hub, state.m) + # for hk,hv in sorted(hub.items()) : + # print("{:>65} : {} x {}".format( + # str(hk), + # len(hv) if hv is not None else 0, + # " , ".join([ ( str(hhv.p.m) if hhv.p is not None else "None" ) for hhv in hv ]), + # )) + for path in paths : + # print("New alignment:") + alignment = list() + for pst in path : + # print(" {} - {}".format(pst.m,pst.t.label if pst.t is not None else "NO-T")) + if pst.t is not None : + if ret_tuple_as_trans_desc: + alignment.append( (pst.t.name, pst.t.label) ) + else: + alignment.append( pst.t.label ) + + yield alignment diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/state_equation_a_star.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/state_equation_a_star.py new file mode 100644 index 0000000000000000000000000000000000000000..c33526f82dbc110d10c4662d4c38ea8d3a450018 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/state_equation_a_star.py @@ -0,0 +1,532 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +""" +This module contains code that allows us to compute alignments on the basis of a regular A* search on the state-space +of the synchronous product net of a trace and a Petri net. +The main algorithm follows [1]_. +When running the log-based variant, the code is running in parallel on a trace based level. +Furthermore, by default, the code applies heuristic estimation, and prefers those states that have the smallest h-value +in case the f-value of two states is equal. + +References +---------- +.. [1] Sebastiaan J. van Zelst et al., "Tuning Alignment Computation: An Experimental Evaluation", + ATAED@Petri Nets/ACSD 2017: 6-20. `http://ceur-ws.org/Vol-1847/paper01.pdf`_. + +""" +import heapq +import sys +import time +from copy import copy +from enum import Enum + +import numpy as np + +from pm4py.objects.log import obj as log_implementation +from pm4py.objects.petri_net.utils import align_utils as utils +from pm4py.objects.petri_net.utils.incidence_matrix import construct as inc_mat_construct +from pm4py.objects.petri_net.utils.synchronous_product import construct_cost_aware, construct +from pm4py.objects.petri_net.utils.petri_utils import construct_trace_net_cost_aware, decorate_places_preset_trans, \ + decorate_transitions_prepostset +from pm4py.util import exec_utils +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util.lp import solver as lp_solver +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util import variants_util +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import Trace +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing + + +class Parameters(Enum): + PARAM_TRACE_COST_FUNCTION = 'trace_cost_function' + PARAM_MODEL_COST_FUNCTION = 'model_cost_function' + PARAM_SYNC_COST_FUNCTION = 'sync_cost_function' + PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE = 'ret_tuple_as_trans_desc' + PARAM_TRACE_NET_COSTS = "trace_net_costs" + TRACE_NET_CONSTR_FUNCTION = "trace_net_constr_function" + TRACE_NET_COST_AWARE_CONSTR_FUNCTION = "trace_net_cost_aware_constr_function" + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + PARAM_MAX_ALIGN_TIME = "max_align_time" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + VARIANTS_IDX = "variants_idx" + RETURN_SYNC_COST_FUNCTION = "return_sync_cost_function" + + +PARAM_TRACE_COST_FUNCTION = Parameters.PARAM_TRACE_COST_FUNCTION.value +PARAM_MODEL_COST_FUNCTION = Parameters.PARAM_MODEL_COST_FUNCTION.value +PARAM_SYNC_COST_FUNCTION = Parameters.PARAM_SYNC_COST_FUNCTION.value + + +def get_best_worst_cost(petri_net, initial_marking, final_marking, parameters=None): + """ + Gets the best worst cost of an alignment + + Parameters + ----------- + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + + Returns + ----------- + best_worst_cost + Best worst cost of alignment + """ + if parameters is None: + parameters = {} + trace = log_implementation.Trace() + + best_worst = apply(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + if best_worst is not None: + return best_worst['cost'] + + return None + + +def apply(trace: Trace, petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> typing.AlignmentResult: + """ + Performs the basic alignment search, given a trace and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.PARAM_SYNC_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + synchronous costs + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + trace_net_constr_function = exec_utils.get_param_value(Parameters.TRACE_NET_CONSTR_FUNCTION, parameters, + None) + trace_net_cost_aware_constr_function = exec_utils.get_param_value(Parameters.TRACE_NET_COST_AWARE_CONSTR_FUNCTION, + parameters, construct_trace_net_cost_aware) + + if trace_cost_function is None: + trace_cost_function = list( + map(lambda e: utils.STD_MODEL_LOG_MOVE_COST, trace)) + parameters[Parameters.PARAM_TRACE_COST_FUNCTION] = trace_cost_function + + if model_cost_function is None: + # reset variables value + model_cost_function = dict() + sync_cost_function = dict() + for t in petri_net.transitions: + if t.label is not None: + model_cost_function[t] = utils.STD_MODEL_LOG_MOVE_COST + sync_cost_function[t] = utils.STD_SYNC_COST + else: + model_cost_function[t] = utils.STD_TAU_COST + parameters[Parameters.PARAM_MODEL_COST_FUNCTION] = model_cost_function + parameters[Parameters.PARAM_SYNC_COST_FUNCTION] = sync_cost_function + + if trace_net_constr_function is not None: + # keep the possibility to pass TRACE_NET_CONSTR_FUNCTION in this old version + trace_net, trace_im, trace_fm = trace_net_constr_function(trace, activity_key=activity_key) + else: + trace_net, trace_im, trace_fm, parameters[ + Parameters.PARAM_TRACE_NET_COSTS] = trace_net_cost_aware_constr_function(trace, + trace_cost_function, + activity_key=activity_key) + + alignment = apply_trace_net(petri_net, initial_marking, final_marking, trace_net, trace_im, trace_fm, parameters) + + return alignment + + +def apply_from_variant(variant, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a single variant + + Parameters + ------------- + variant + Variant (as string delimited by the "variant_delimiter" parameter) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + ------------ + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + trace = variants_util.variant_to_trace(variant, parameters=parameters) + + return apply(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + +def apply_from_variants_dictionary(var_dictio, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a variants dictionary + + Parameters + ------------- + var_dictio + Dictionary of variants (along possibly with their count, or the list of indexes, or the list of involved cases) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + dictio_alignments = {} + for variant in var_dictio: + dictio_alignments[variant] = apply_from_variant(variant, petri_net, initial_marking, final_marking, + parameters=parameters) + return dictio_alignments + + +def apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + start_time = time.time() + max_align_time = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME, parameters, + sys.maxsize) + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + dictio_alignments = {} + for varitem in var_list: + this_max_align_time = min(max_align_time_trace, (max_align_time - (time.time() - start_time)) * 0.5) + variant = varitem[0] + parameters[Parameters.PARAM_MAX_ALIGN_TIME_TRACE] = this_max_align_time + dictio_alignments[variant] = apply_from_variant(variant, petri_net, initial_marking, final_marking, + parameters=parameters) + return dictio_alignments + + +def apply_from_variants_list_petri_string(var_list, petri_net_string, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + petri_net_string + String representing the accepting Petri net + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + + from pm4py.objects.petri_net.importer.variants import pnml as petri_importer + + petri_net, initial_marking, final_marking = petri_importer.import_petri_from_string(petri_net_string) + + res = apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=parameters) + return res + + +def apply_from_variants_list_petri_string_mprocessing(mp_output, var_list, petri_net_string, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + mp_output + Multiprocessing output + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + petri_net_string + String representing the accepting Petri net + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + + res = apply_from_variants_list_petri_string(var_list, petri_net_string, parameters=parameters) + mp_output.put(res) + + +def apply_trace_net(petri_net, initial_marking, final_marking, trace_net, trace_im, trace_fm, parameters=None): + """ + Performs the basic alignment search, given a trace net and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.PARAM_SYNC_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + synchronous costs + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + Parameters.PARAM_TRACE_NET_COSTS: :class:`dict` (parameter) mapping between transitions and costs + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + ret_tuple_as_trans_desc = exec_utils.get_param_value(Parameters.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE, + parameters, False) + + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + sync_cost_function = exec_utils.get_param_value(Parameters.PARAM_SYNC_COST_FUNCTION, parameters, None) + trace_net_costs = exec_utils.get_param_value(Parameters.PARAM_TRACE_NET_COSTS, parameters, None) + + if trace_cost_function is None or model_cost_function is None or sync_cost_function is None: + sync_prod, sync_initial_marking, sync_final_marking = construct(trace_net, trace_im, + trace_fm, petri_net, + initial_marking, + final_marking, + utils.SKIP) + cost_function = utils.construct_standard_cost_function(sync_prod, utils.SKIP) + else: + revised_sync = dict() + for t_trace in trace_net.transitions: + for t_model in petri_net.transitions: + if t_trace.label == t_model.label: + revised_sync[(t_trace, t_model)] = sync_cost_function[t_model] + + sync_prod, sync_initial_marking, sync_final_marking, cost_function = construct_cost_aware( + trace_net, trace_im, trace_fm, petri_net, initial_marking, final_marking, utils.SKIP, + trace_net_costs, model_cost_function, revised_sync) + + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + + alignment = apply_sync_prod(sync_prod, sync_initial_marking, sync_final_marking, cost_function, + utils.SKIP, ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, + max_align_time_trace=max_align_time_trace) + + return_sync_cost = exec_utils.get_param_value(Parameters.RETURN_SYNC_COST_FUNCTION, parameters, False) + if return_sync_cost: + # needed for the decomposed alignments (switching them from state_equation_less_memory) + return alignment, cost_function + + return alignment + + +def apply_sync_prod(sync_prod, initial_marking, final_marking, cost_function, skip, ret_tuple_as_trans_desc=False, + max_align_time_trace=sys.maxsize): + """ + Performs the basic alignment search on top of the synchronous product net, given a cost function and skip-symbol + + Parameters + ---------- + sync_prod: :class:`pm4py.objects.petri.net.PetriNet` synchronous product net + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the synchronous product net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the synchronous product net + cost_function: :class:`dict` cost function mapping transitions to the synchronous product net + skip: :class:`Any` symbol to use for skips in the alignment + + Returns + ------- + dictionary : :class:`dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** + and **traversed_arcs** + """ + return __search(sync_prod, initial_marking, final_marking, cost_function, skip, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, max_align_time_trace=max_align_time_trace) + + +def __search(sync_net, ini, fin, cost_function, skip, ret_tuple_as_trans_desc=False, + max_align_time_trace=sys.maxsize): + start_time = time.time() + + decorate_transitions_prepostset(sync_net) + decorate_places_preset_trans(sync_net) + + incidence_matrix = inc_mat_construct(sync_net) + ini_vec, fin_vec, cost_vec = utils.__vectorize_initial_final_cost(incidence_matrix, ini, fin, cost_function) + + closed = set() + + a_matrix = np.asmatrix(incidence_matrix.a_matrix).astype(np.float64) + g_matrix = -np.eye(len(sync_net.transitions)) + h_cvx = np.matrix(np.zeros(len(sync_net.transitions))).transpose() + cost_vec = [x * 1.0 for x in cost_vec] + + use_cvxopt = False + if lp_solver.DEFAULT_LP_SOLVER_VARIANT == lp_solver.CVXOPT_SOLVER_CUSTOM_ALIGN or lp_solver.DEFAULT_LP_SOLVER_VARIANT == lp_solver.CVXOPT_SOLVER_CUSTOM_ALIGN_ILP: + use_cvxopt = True + + if use_cvxopt: + # not available in the latest version of PM4Py + from cvxopt import matrix + + a_matrix = matrix(a_matrix) + g_matrix = matrix(g_matrix) + h_cvx = matrix(h_cvx) + cost_vec = matrix(cost_vec) + + h, x = utils.__compute_exact_heuristic_new_version(sync_net, a_matrix, h_cvx, g_matrix, cost_vec, incidence_matrix, + ini, + fin_vec, lp_solver.DEFAULT_LP_SOLVER_VARIANT, + use_cvxopt=use_cvxopt) + ini_state = utils.SearchTuple(0 + h, 0, h, ini, None, None, x, True) + open_set = [ini_state] + heapq.heapify(open_set) + visited = 0 + queued = 0 + traversed = 0 + lp_solved = 1 + + trans_empty_preset = set(t for t in sync_net.transitions if len(t.in_arcs) == 0) + + while not len(open_set) == 0: + if (time.time() - start_time) > max_align_time_trace: + return None + + curr = heapq.heappop(open_set) + + current_marking = curr.m + + while not curr.trust: + if (time.time() - start_time) > max_align_time_trace: + return None + + already_closed = current_marking in closed + if already_closed: + curr = heapq.heappop(open_set) + current_marking = curr.m + continue + + h, x = utils.__compute_exact_heuristic_new_version(sync_net, a_matrix, h_cvx, g_matrix, cost_vec, + incidence_matrix, curr.m, + fin_vec, lp_solver.DEFAULT_LP_SOLVER_VARIANT, + use_cvxopt=use_cvxopt) + lp_solved += 1 + + # 11/10/19: shall not a state for which we compute the exact heuristics be + # by nature a trusted solution? + tp = utils.SearchTuple(curr.g + h, curr.g, h, curr.m, curr.p, curr.t, x, True) + # 11/10/2019 (optimization ZA) heappushpop is slightly more efficient than pushing + # and popping separately + curr = heapq.heappushpop(open_set, tp) + current_marking = curr.m + + # max allowed heuristics value (27/10/2019, due to the numerical instability of some of our solvers) + if curr.h > lp_solver.MAX_ALLOWED_HEURISTICS: + continue + + # 12/10/2019: do it again, since the marking could be changed + already_closed = current_marking in closed + if already_closed: + continue + + # 12/10/2019: the current marking can be equal to the final marking only if the heuristics + # (underestimation of the remaining cost) is 0. Low-hanging fruits + if curr.h < 0.01: + if current_marking == fin: + return utils.__reconstruct_alignment(curr, visited, queued, traversed, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, + lp_solved=lp_solved) + + closed.add(current_marking) + visited += 1 + + enabled_trans = copy(trans_empty_preset) + for p in current_marking: + for t in p.ass_trans: + if t.sub_marking <= current_marking: + enabled_trans.add(t) + + trans_to_visit_with_cost = [(t, cost_function[t]) for t in enabled_trans if not ( + t is not None and utils.__is_log_move(t, skip) and utils.__is_model_move(t, skip))] + + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = utils.add_markings(current_marking, t.add_marking) + + if new_marking in closed: + continue + g = curr.g + cost + + queued += 1 + h, x = utils.__derive_heuristic(incidence_matrix, cost_vec, curr.x, t, curr.h) + trustable = utils.__trust_solution(x) + new_f = g + h + + tp = utils.SearchTuple(new_f, g, h, new_marking, curr, t, x, trustable) + heapq.heappush(open_set, tp) diff --git a/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/tweaked_state_equation_a_star.py b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/tweaked_state_equation_a_star.py new file mode 100644 index 0000000000000000000000000000000000000000..d9c2804ff2c5b16e4e79fc2fe55ada727f2c0e23 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/petri_net/variants/tweaked_state_equation_a_star.py @@ -0,0 +1,651 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import heapq +import sys +import time +from copy import copy +from enum import Enum + +from pm4py import util as pm4pyutil +from pm4py.algo.analysis.marking_equation.variants import classic as marking_equation +from pm4py.objects.log import obj as log_implementation +from pm4py.objects.petri_net.utils import align_utils as utils +from pm4py.objects.petri_net.utils.incidence_matrix import construct as inc_mat_construct +from pm4py.objects.petri_net.utils.synchronous_product import construct_cost_aware, construct +from pm4py.objects.petri_net import semantics +from pm4py.objects.petri_net.utils.petri_utils import construct_trace_net_cost_aware, decorate_places_preset_trans, \ + decorate_transitions_prepostset +from pm4py.util import exec_utils +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.objects.petri_net import properties + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import Trace +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing + + +class Parameters(Enum): + PARAM_TRACE_COST_FUNCTION = 'trace_cost_function' + PARAM_MODEL_COST_FUNCTION = 'model_cost_function' + PARAM_SYNC_COST_FUNCTION = 'sync_cost_function' + PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE = 'ret_tuple_as_trans_desc' + PARAM_TRACE_NET_COSTS = "trace_net_costs" + TRACE_NET_CONSTR_FUNCTION = "trace_net_constr_function" + TRACE_NET_COST_AWARE_CONSTR_FUNCTION = "trace_net_cost_aware_constr_function" + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + PARAM_MAX_ALIGN_TIME = "max_align_time" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + VARIANTS_IDX = "variants_idx" + + +PARAM_TRACE_COST_FUNCTION = Parameters.PARAM_TRACE_COST_FUNCTION.value +PARAM_MODEL_COST_FUNCTION = Parameters.PARAM_MODEL_COST_FUNCTION.value +PARAM_SYNC_COST_FUNCTION = Parameters.PARAM_SYNC_COST_FUNCTION.value + + +def get_best_worst_cost(petri_net, initial_marking, final_marking, parameters=None): + """ + Gets the best worst cost of an alignment + + Parameters + ----------- + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + + Returns + ----------- + best_worst_cost + Best worst cost of alignment + """ + if parameters is None: + parameters = {} + trace = log_implementation.Trace() + + best_worst = apply(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + if best_worst is not None: + return best_worst['cost'] + + return None + + +def apply(trace: Trace, petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> typing.AlignmentResult: + """ + Performs the basic alignment search, given a trace and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.PARAM_SYNC_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + synchronous costs + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + trace_net_constr_function = exec_utils.get_param_value(Parameters.TRACE_NET_CONSTR_FUNCTION, parameters, + None) + trace_net_cost_aware_constr_function = exec_utils.get_param_value(Parameters.TRACE_NET_COST_AWARE_CONSTR_FUNCTION, + parameters, construct_trace_net_cost_aware) + + if trace_cost_function is None: + trace_cost_function = list( + map(lambda e: utils.STD_MODEL_LOG_MOVE_COST, trace)) + parameters[Parameters.PARAM_TRACE_COST_FUNCTION] = trace_cost_function + + if model_cost_function is None: + # reset variables value + model_cost_function = dict() + sync_cost_function = dict() + for t in petri_net.transitions: + if t.label is not None: + model_cost_function[t] = utils.STD_MODEL_LOG_MOVE_COST + sync_cost_function[t] = utils.STD_SYNC_COST + else: + model_cost_function[t] = utils.STD_TAU_COST + parameters[Parameters.PARAM_MODEL_COST_FUNCTION] = model_cost_function + parameters[Parameters.PARAM_SYNC_COST_FUNCTION] = sync_cost_function + + if trace_net_constr_function is not None: + # keep the possibility to pass TRACE_NET_CONSTR_FUNCTION in this old version + trace_net, trace_im, trace_fm = trace_net_constr_function(trace, activity_key=activity_key) + else: + trace_net, trace_im, trace_fm, parameters[ + Parameters.PARAM_TRACE_NET_COSTS] = trace_net_cost_aware_constr_function(trace, + trace_cost_function, + activity_key=activity_key) + + alignment = apply_trace_net(petri_net, initial_marking, final_marking, trace_net, trace_im, trace_fm, parameters) + return alignment + + +def apply_from_variant(variant, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a single variant + + Parameters + ------------- + variant + Variant (as string delimited by the "variant_delimiter" parameter) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + ------------ + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + activity_key = DEFAULT_NAME_KEY if parameters is None or PARAMETER_CONSTANT_ACTIVITY_KEY not in parameters else \ + parameters[ + pm4pyutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY] + trace = log_implementation.Trace() + variant_delimiter = exec_utils.get_param_value(Parameters.PARAMETER_VARIANT_DELIMITER, parameters, + pm4pyutil.constants.DEFAULT_VARIANT_SEP) + variant_split = variant.split(variant_delimiter) if type(variant) is str else variant + for i in range(len(variant_split)): + trace.append(log_implementation.Event({activity_key: variant_split[i]})) + return apply(trace, petri_net, initial_marking, final_marking, parameters=parameters) + + +def apply_from_variants_dictionary(var_dictio, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a variants dictionary + + Parameters + ------------- + var_dictio + Dictionary of variants (along possibly with their count, or the list of indexes, or the list of involved cases) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + dictio_alignments = {} + for variant in var_dictio: + dictio_alignments[variant] = apply_from_variant(variant, petri_net, initial_marking, final_marking, + parameters=parameters) + return dictio_alignments + + +def apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm (same as 'apply' method, plus 'variant_delimiter' that is , by default) + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + start_time = time.time() + max_align_time = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME, parameters, + sys.maxsize) + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + dictio_alignments = {} + for varitem in var_list: + this_max_align_time = min(max_align_time_trace, (max_align_time - (time.time() - start_time)) * 0.5) + variant = varitem[0] + parameters[Parameters.PARAM_MAX_ALIGN_TIME_TRACE] = this_max_align_time + dictio_alignments[variant] = apply_from_variant(variant, petri_net, initial_marking, final_marking, + parameters=parameters) + return dictio_alignments + + +def apply_from_variants_list_petri_string(var_list, petri_net_string, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + petri_net_string + String representing the accepting Petri net + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + + from pm4py.objects.petri_net.importer.variants import pnml as petri_importer + + petri_net, initial_marking, final_marking = petri_importer.import_petri_from_string(petri_net_string) + + res = apply_from_variants_list(var_list, petri_net, initial_marking, final_marking, parameters=parameters) + return res + + +def apply_from_variants_list_petri_string_mprocessing(mp_output, var_list, petri_net_string, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + mp_output + Multiprocessing output + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + petri_net_string + String representing the accepting Petri net + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + + res = apply_from_variants_list_petri_string(var_list, petri_net_string, parameters=parameters) + mp_output.put(res) + + +def apply_trace_net(petri_net, initial_marking, final_marking, trace_net, trace_im, trace_fm, parameters=None): + """ + Performs the basic alignment search, given a trace net and a net. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key + to get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + parameters: :class:`dict` (optional) dictionary containing one of the following: + Parameters.PARAM_TRACE_COST_FUNCTION: :class:`list` (parameter) mapping of each index of the trace to a positive cost value + Parameters.PARAM_MODEL_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + model cost + Parameters.PARAM_SYNC_COST_FUNCTION: :class:`dict` (parameter) mapping of each transition in the model to corresponding + synchronous costs + Parameters.ACTIVITY_KEY: :class:`str` (parameter) key to use to identify the activity described by the events + Parameters.PARAM_TRACE_NET_COSTS: :class:`dict` (parameter) mapping between transitions and costs + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + if parameters is None: + parameters = {} + + ret_tuple_as_trans_desc = exec_utils.get_param_value(Parameters.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE, + parameters, False) + + trace_cost_function = exec_utils.get_param_value(Parameters.PARAM_TRACE_COST_FUNCTION, parameters, None) + model_cost_function = exec_utils.get_param_value(Parameters.PARAM_MODEL_COST_FUNCTION, parameters, None) + sync_cost_function = exec_utils.get_param_value(Parameters.PARAM_SYNC_COST_FUNCTION, parameters, None) + trace_net_costs = exec_utils.get_param_value(Parameters.PARAM_TRACE_NET_COSTS, parameters, None) + + if trace_cost_function is None or model_cost_function is None or sync_cost_function is None: + sync_prod, sync_initial_marking, sync_final_marking = construct(trace_net, trace_im, + trace_fm, petri_net, + initial_marking, + final_marking, + utils.SKIP) + cost_function = utils.construct_standard_cost_function(sync_prod, utils.SKIP) + else: + revised_sync = dict() + for t_trace in trace_net.transitions: + for t_model in petri_net.transitions: + if t_trace.label == t_model.label: + revised_sync[(t_trace, t_model)] = sync_cost_function[t_model] + + sync_prod, sync_initial_marking, sync_final_marking, cost_function = construct_cost_aware( + trace_net, trace_im, trace_fm, petri_net, initial_marking, final_marking, utils.SKIP, + trace_net_costs, model_cost_function, revised_sync) + + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + + return apply_sync_prod(sync_prod, sync_initial_marking, sync_final_marking, cost_function, + utils.SKIP, ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, + max_align_time_trace=max_align_time_trace) + + +def apply_sync_prod(sync_prod, initial_marking, final_marking, cost_function, skip, ret_tuple_as_trans_desc=False, + max_align_time_trace=sys.maxsize): + return __search(sync_prod, initial_marking, final_marking, cost_function, skip, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, max_align_time_trace=max_align_time_trace) + + +def __search(sync_net, ini, fin, cost_function, skip, ret_tuple_as_trans_desc=False, + max_align_time_trace=sys.maxsize): + start_time = time.time() + + decorate_transitions_prepostset(sync_net) + decorate_places_preset_trans(sync_net) + + incidence_matrix = inc_mat_construct(sync_net) + ini_vec, fin_vec, cost_vec = utils.__vectorize_initial_final_cost(incidence_matrix, ini, fin, cost_function) + + closed = set() + heu_dict = {} + heu_max_ind_dict = {} + mtcgt_dict = {} + + parameters = {} + parameters[marking_equation.Parameters.FULL_BOOTSTRAP_REQUIRED] = False + parameters[marking_equation.Parameters.INCIDENCE_MATRIX] = incidence_matrix + parameters[marking_equation.Parameters.COSTS] = cost_function + + visited = 0 + queued = 0 + traversed = 0 + me = marking_equation.build(sync_net, ini, fin, parameters=parameters) + h, x = me.solve() + lp_solved = 1 + + # try to see if the firing sequence is already fine + firing_sequence, reach_fm, explained_events = me.get_firing_sequence(x) + if reach_fm: + return __reconstruct_alignment(firing_sequence, h, visited, queued, traversed, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, lp_solved=lp_solved) + mm, index = __get_model_marking_and_index(ini) + __update_heu_dict(heu_dict, heu_max_ind_dict, mm, index, h, x, firing_sequence, incidence_matrix, cost_vec) + + ini_state = utils.TweakedSearchTuple(0 + h, 0, h, ini, None, None, x, True, False) + open_set = [ini_state] + heapq.heapify(open_set) + + trans_empty_preset = set(t for t in sync_net.transitions if len(t.in_arcs) == 0) + + while not len(open_set) == 0: + if (time.time() - start_time) > max_align_time_trace: + return None + + curr = heapq.heappop(open_set) + + current_marking = curr.m + + while not curr.trust: + if (time.time() - start_time) > max_align_time_trace: + return None + + already_closed = current_marking in closed + if already_closed: + curr = heapq.heappop(open_set) + current_marking = curr.m + continue + + if curr.t not in mtcgt_dict: + lp_solved += 1 + mtcgt = __min_total_cost_given_trans(me, ini, incidence_matrix, curr.t) + mtcgt_dict[curr.t] = mtcgt + else: + mtcgt = mtcgt_dict[curr.t] + + h1 = max(mtcgt - curr.g, 0) + if h1 > curr.h: + tp = utils.TweakedSearchTuple(curr.g + h1, curr.g, h1, curr.m, curr.p, curr.t, curr.x, False, False) + curr = heapq.heappushpop(open_set, tp) + current_marking = curr.m + continue + + mm, index = __get_model_marking_and_index(curr.m) + h2, x2, trust2 = __get_heu_from_dict(heu_dict, heu_max_ind_dict, mm, index) + if h2 is not None and h2 > curr.h: + tp = utils.TweakedSearchTuple(curr.g + h2, curr.g, h2, curr.m, curr.p, curr.t, x2, trust2, False) + curr = heapq.heappushpop(open_set, tp) + current_marking = curr.m + continue + + me.change_ini_vec(curr.m) + h, x = me.solve() + + __update_heu_dict_specific_point(heu_dict, heu_max_ind_dict, mm, index, h, x) + + lp_solved += 1 + tp = utils.TweakedSearchTuple(curr.g + h, curr.g, h, curr.m, curr.p, curr.t, x, True, True) + curr = heapq.heappushpop(open_set, tp) + current_marking = curr.m + + already_closed = current_marking in closed + if already_closed: + continue + if curr.h < 0.01: + if current_marking == fin: + trans_list = __transitions_list_from_state(curr) + return __reconstruct_alignment(trans_list, curr.f, visited, queued, traversed, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, lp_solved=lp_solved) + + if curr.virgin: + # try to see if the firing sequence is already fine + firing_sequence, reach_fm, explained_events = me.get_firing_sequence(curr.x) + if reach_fm: + trans_list = __transitions_list_from_state(curr) + list(firing_sequence) + return __reconstruct_alignment(trans_list, curr.f, visited, queued, traversed, + ret_tuple_as_trans_desc=ret_tuple_as_trans_desc, lp_solved=lp_solved) + mm, index = __get_model_marking_and_index(curr.m) + __update_heu_dict(heu_dict, heu_max_ind_dict, mm, index, h, x, firing_sequence, incidence_matrix, cost_vec) + + closed.add(current_marking) + visited += 1 + + enabled_trans = copy(trans_empty_preset) + for p in current_marking: + for t in p.ass_trans: + if t.sub_marking <= current_marking: + enabled_trans.add(t) + + trans_to_visit_with_cost = [(t, cost_function[t]) for t in enabled_trans if not ( + t is not None and utils.__is_log_move(t, skip) and utils.__is_model_move(t, skip))] + + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = utils.add_markings(current_marking, t.add_marking) + + if new_marking in closed: + continue + g = curr.g + cost + + queued += 1 + h, x = utils.__derive_heuristic(incidence_matrix, cost_vec, curr.x, t, curr.h) + trust = utils.__trust_solution(x) + mm, index = __get_model_marking_and_index(new_marking) + + if not trust: + h2, x2, trust2 = __get_heu_from_dict(heu_dict, heu_max_ind_dict, mm, index) + if h2 is not None and (h2 > h or trust2): + h = h2 + x = x2 + trust = trust2 + else: + __update_heu_dict_specific_point(heu_dict, heu_max_ind_dict, mm, index, h, x) + + new_f = g + h + tp = utils.TweakedSearchTuple(new_f, g, h, new_marking, curr, t, x, trust, False) + heapq.heappush(open_set, tp) + + +def __min_total_cost_given_trans(mark_eq, ini, incidence_matrix, t): + """ + Searches the minimum total cost assumed by the marking equation + starting from the initial marking and passing through the transition "t" + + Parameters + -------------- + mark_eq + Marking equation + ini + Initial marking + incidence_matrix + Incidence matrix + t + Transition + + Returns + ---------------- + h + Heuristics from the initial marking passing through t + """ + mark_eq.change_ini_vec(ini) + import numpy as np + tind = incidence_matrix.transitions[t] + c, Aub, bub, Aeq, beq = mark_eq.c, mark_eq.Aub, mark_eq.bub, mark_eq.Aeq, mark_eq.beq + Aub_appendix = np.zeros((1, Aub.shape[1])) + bub_appendix = -np.eye(1) + Aub_appendix[0, tind] = -1 + Aub = np.vstack([Aub, Aub_appendix]) + bub = np.vstack([bub, bub_appendix]) + h, x = mark_eq.solve_given_components(c, Aub, bub, Aeq, beq) + return h + + +def __update_heu_dict(heu_dict, heu_max_ind_dict, mm, index, h, x, firing_sequence, incidence_matrix, cost_vec): + """ + Updates the heuristics dictionary on the new marking, storing the information about the heuristics + and the vector + """ + x = copy(x) + __update_heu_dict_specific_point(heu_dict, heu_max_ind_dict, mm, index, h, x) + firing_sequence = list(firing_sequence) + while firing_sequence: + t = firing_sequence.pop(0) + h, x = utils.__derive_heuristic(incidence_matrix, cost_vec, x, t, h) + mm = semantics.weak_execute(t, mm) + __update_heu_dict_specific_point(heu_dict, heu_max_ind_dict, mm, index, h, x) + + +def __update_heu_dict_specific_point(heu_dict, heu_max_ind_dict, mm, index, h, x): + """ + Updates the heuristics dictionary on the new marking, storing the information about the heuristics + and the vector (point-specific method) + """ + if mm not in heu_dict: + heu_dict[mm] = {} + heu_max_ind_dict[mm] = -1 + hdm = heu_dict[mm] + if index not in hdm: + hdm[index] = (-1, None) + if h > hdm[index][0]: + hdm[index] = (h, tuple(x)) + heu_max_ind_dict[mm] = max(heu_max_ind_dict[mm], index) + + +def __get_heu_from_dict(heu_dict, heu_max_ind_dict, mm, index): + """ + Retrieves a value for an heuristics that has already been calculated, + given the marking + """ + if mm in heu_dict and heu_max_ind_dict[mm] >= index: + hdm = heu_dict[mm] + if index in hdm: + ret = hdm[index] + return ret[0], list(ret[1]), True + + return None, None, None + + +def __get_model_marking_and_index(marking): + """ + Transforms a marking on the synchronous product net + to a marking in the model and an index in the trace + """ + mm = Marking() + index = -1 + for p in marking: + if properties.TRACE_NET_PLACE_INDEX in p.properties: + index = p.properties[properties.TRACE_NET_PLACE_INDEX] + else: + mm[p] = marking[p] + return mm, index + + +def __transitions_list_from_state(curr): + """ + Gets the list of transitions visited throughout the + current state + """ + ret = [] + while curr.p is not None: + ret.append(curr.t) + curr = curr.p + ret.reverse() + return ret + + +def __reconstruct_alignment(trans_list, cost, visited, queued, traversed, ret_tuple_as_trans_desc=False, lp_solved=0): + """ + Variant-specific reconstruct alignment method + """ + alignment = [] + if ret_tuple_as_trans_desc: + for t in trans_list: + alignment.append((t.name, t.label)) + else: + for t in trans_list: + alignment.append(t.label) + + return {"alignment": alignment, "cost": cost, "visited_states": visited, "queued_states": queued, + "traversed_states": traversed, "lp_solved": lp_solved} diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/__init__.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..49a91f46f52520f9d2fae9faee1722143c847196 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.process_tree import algorithm, variants, util diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/algorithm.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..f71a608953b5fd7d9144227f87af41dff2a21314 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/algorithm.py @@ -0,0 +1,63 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.process_tree.variants.approximated import matrix_lp as approximated_matrix_lp +from pm4py.algo.conformance.alignments.process_tree.variants.approximated import original as approximated_original +from pm4py.algo.conformance.alignments.process_tree.variants import search_graph_pt + +from pm4py.util import exec_utils +from enum import Enum + +from typing import Optional, Dict, Any, Union +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.log.obj import EventLog, Trace +from pm4py.util import typing +import pandas as pd + + +class Variants(Enum): + APPROXIMATED_ORIGINAL = approximated_original + APPROXIMATED_MATRIX_LP = approximated_matrix_lp + SEARCH_GRAPH_PT = search_graph_pt + + +DEFAULT_VARIANT = Variants.SEARCH_GRAPH_PT + + +def apply(obj: Union[EventLog, Trace, pd.DataFrame], pt: ProcessTree, variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> Union[typing.AlignmentResult, typing.ListAlignments]: + """ + Align an event log or a trace with a process tree + + Parameters + -------------- + obj + Log / Trace + pt + Process tree + variant + Variant + parameters + Variant-specific parameters + + Returns + -------------- + alignments + Alignments + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(obj, pt, parameters=parameters) diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/util/__init__.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..58c56229f94f6c7e309fe5a21dfefbd3cd115cae --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.process_tree.util import search_graph_pt_replay_semantics, search_graph_pt_frequency_annotation diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/util/search_graph_pt_frequency_annotation.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/util/search_graph_pt_frequency_annotation.py new file mode 100644 index 0000000000000000000000000000000000000000..e4824eaee290a731a222c5092c1da22141c37876 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/util/search_graph_pt_frequency_annotation.py @@ -0,0 +1,79 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree.obj import ProcessTree +from typing import Optional, Dict, Any, Union +from pm4py.util import typing, exec_utils +from enum import Enum +from collections import Counter +from pm4py.objects.process_tree.utils import bottomup + + +class Parameters(Enum): + NUM_EVENTS_PROPERTY = "num_events_property" + NUM_CASES_PROPERTY = "num_cases_property" + + +def apply(pt: ProcessTree, align_result: Union[typing.AlignmentResult, typing.ListAlignments], + parameters: Optional[Dict[Any, Any]] = None) -> ProcessTree: + """ + Annotate a process tree with frequency information (number of events / number of cases), + given the results of an alignment performed on the process tree. + + Parameters + ---------------- + pt + Process tree + parameters + Parameters of the algorithm, including: + - Parameters.NUM_EVENTS_PROPERTY => number of events + - Parameters.NUM_CASES_PROPERTY => number of cases + + Returns + ---------------- + pt + Annotated process tree + """ + if parameters is None: + parameters = {} + + num_events_property = exec_utils.get_param_value(Parameters.NUM_EVENTS_PROPERTY, parameters, "num_events") + num_cases_property = exec_utils.get_param_value(Parameters.NUM_CASES_PROPERTY, parameters, "num_cases") + bottomup_nodes = bottomup.get_bottomup_nodes(pt, parameters=parameters) + + all_paths_open_enabled_events = [] + all_paths_open_enabled_cases = [] + for trace in align_result: + state = trace["state"] + paths = [] + while state.parent is not None: + if state.path: + paths.append(state.path) + state = state.parent + paths.reverse() + paths_enabled = [y[0] for x in paths for y in x if y[1] is ProcessTree.OperatorState.ENABLED] + paths_open = [y[0] for x in paths for y in x if y[1] is ProcessTree.OperatorState.OPEN if + y[0] not in paths_enabled] + all_paths_open_enabled_events = all_paths_open_enabled_events + paths_enabled + paths_open + all_paths_open_enabled_cases = all_paths_open_enabled_cases + list(set(paths_enabled + paths_open)) + all_paths_open_enabled_events_counter = Counter(all_paths_open_enabled_events) + all_paths_open_enabled_cases_counter = Counter(all_paths_open_enabled_cases) + + for node in bottomup_nodes: + node._properties[num_events_property] = all_paths_open_enabled_events_counter[node] + node._properties[num_cases_property] = all_paths_open_enabled_cases_counter[node] + + return pt diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/util/search_graph_pt_replay_semantics.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/util/search_graph_pt_replay_semantics.py new file mode 100644 index 0000000000000000000000000000000000000000..aba476776e60c7f07f84ae6da1f53c88fd2ce86b --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/util/search_graph_pt_replay_semantics.py @@ -0,0 +1,299 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +import sys +from typing import Dict, Tuple, Optional, List + +from pm4py.objects.process_tree.utils import generic as ptu +from pm4py.objects.process_tree.obj import Operator +from pm4py.objects.process_tree.obj import ProcessTree + +ProcessTreeState = Dict[Tuple[int, ProcessTree], ProcessTree.OperatorState] + + +def get_initial_state(tree: ProcessTree) -> ProcessTreeState: + state = dict() + state[(id(tree), tree)] = ProcessTree.OperatorState.FUTURE + path = [(tree, ProcessTree.OperatorState.FUTURE)] + e_path, state = enable_vertex(tree, state) + path.extend(e_path) + return state + + +def transform_tree(tree: ProcessTree, state_type: ProcessTree.OperatorState, state: ProcessTreeState) -> Tuple[ + List[Tuple[ProcessTree, ProcessTree.OperatorState]], ProcessTreeState]: + state = copy.copy(state) + path = list() + if (id(tree), tree) not in state or state[(id(tree), tree)] != state_type: + state[(id(tree), tree)] = state_type + path = [(tree, state_type)] + for c in tree.children: + e_path, state = transform_tree(c, state_type, state) + path.extend(e_path) + return path, state + + +def can_enable(tree: ProcessTree, state: ProcessTreeState) -> bool: + if ptu.is_in_state(tree, ProcessTree.OperatorState.FUTURE, state): + if ptu.is_root(tree): + return True + if ptu.is_in_state(tree.parent, ProcessTree.OperatorState.OPEN, state): + if ptu.is_any_operator_of(tree.parent, [Operator.PARALLEL, Operator.OR]): + return True + elif ptu.is_operator(tree.parent, Operator.XOR): + return frozenset(map(lambda child: state[(id(child), child)], tree.parent.children)) == { + ProcessTree.OperatorState.FUTURE} + elif ptu.is_operator(tree.parent, Operator.SEQUENCE): + return True if tree.parent.children.index(tree) == 0 else ptu.is_in_state( + tree.parent.children[tree.parent.children.index(tree) - 1], + ProcessTree.OperatorState.CLOSED, state) + elif ptu.is_operator(tree.parent, Operator.LOOP): + return frozenset(map(lambda child: state[(id(child), child)], tree.parent.children)) == { + ProcessTree.OperatorState.FUTURE, ProcessTree.OperatorState.CLOSED} + return False + + +def can_open(tree: ProcessTree, state: ProcessTreeState) -> bool: + return ptu.is_in_state(tree, ProcessTree.OperatorState.ENABLED, state) + + +def can_close(tree: ProcessTree, state: ProcessTreeState) -> bool: + if ptu.is_leaf(tree): + return ptu.is_in_state(tree, ProcessTree.OperatorState.OPEN, state) + elif ptu.is_any_operator_of(tree, [Operator.SEQUENCE, Operator.PARALLEL, Operator.XOR]): + return frozenset(map(lambda child: state[(id(child), child)], tree.children)) == { + ProcessTree.OperatorState.CLOSED} + elif ptu.is_any_operator_of(tree, [Operator.OR]): + return frozenset(map(lambda child: state[(id(child), child)], tree.children)) == { + ProcessTree.OperatorState.CLOSED, ProcessTree.OperatorState.FUTURE} + elif ptu.is_operator(tree, Operator.LOOP): + return ptu.is_in_state(tree.children[0], ProcessTree.OperatorState.CLOSED, state) and ptu.is_in_state( + tree.children[1], ProcessTree.OperatorState.FUTURE, state) + + +def close_vertex(tree: ProcessTree, state: ProcessTreeState) -> Tuple[Optional[ + List[Tuple[ + ProcessTree, ProcessTree.OperatorState]]], + Optional[ProcessTreeState]]: + if can_close(tree, state): + current_state = state[(id(tree), tree)] + path = list() + state = copy.copy(state) + for c in tree.children: + if not ptu.is_in_state(c, ProcessTree.OperatorState.CLOSED, state): + e_path, state = transform_tree(c, ProcessTree.OperatorState.CLOSED, state) + path.extend(e_path) + state[(id(tree), tree)] = ProcessTree.OperatorState.CLOSED + path.append((tree, ProcessTree.OperatorState.CLOSED)) + # if tree is a redo, then we will always need to execute the do part of the surrounding loop + if ptu.is_operator(tree.parent, Operator.LOOP) and id(tree) == id(tree.parent.children[ + 1]) and current_state == ProcessTree.OperatorState.OPEN: + e_path, state = enable_vertex(tree.parent.children[0], state) + path.extend(e_path) + else: + state, path = None, None + return path, state + + +def enable_vertex(tree: ProcessTree, state: ProcessTreeState) -> Tuple[Optional[ + List[Tuple[ + ProcessTree, ProcessTree.OperatorState]]], + Optional[ProcessTreeState]]: + if state[(id(tree), tree)] == ProcessTree.OperatorState.ENABLED: + return list(), state + if can_enable(tree, state): + state = copy.copy(state) + path = list() + state[(id(tree), tree)] = ProcessTree.OperatorState.ENABLED + path.append((tree, ProcessTree.OperatorState.ENABLED)) + if ptu.is_operator(tree.parent, Operator.LOOP): + if id(tree) == id(tree.parent.children[0]): + e_path, state = transform_tree(tree.parent.children[1], ProcessTree.OperatorState.FUTURE, state) + path.extend(e_path) + if id(tree) == id(tree.parent.children[1]): + e_path, state = transform_tree(tree.parent.children[0], ProcessTree.OperatorState.FUTURE, state) + path.extend(e_path) + if ptu.is_operator(tree.parent, Operator.XOR): + for c in tree.parent.children: + if id(c) != id(tree): + e_path, state = transform_tree(c, ProcessTree.OperatorState.CLOSED, state) + path.extend(e_path) + for c in tree.children: + e_path, state = transform_tree(c, ProcessTree.OperatorState.FUTURE, state) + path.extend(e_path) + return path, state + else: + return None, None + + +def open_vertex(tree: ProcessTree, state: ProcessTreeState) -> Tuple[Optional[ + List[Tuple[ + ProcessTree, ProcessTree.OperatorState]]], + Optional[ProcessTreeState]]: + if can_open(tree, state): + state = copy.copy(state) + path = list() + state[(id(tree), tree)] = ProcessTree.OperatorState.OPEN + path.append((tree, ProcessTree.OperatorState.OPEN)) + if ptu.is_any_operator_of(tree, [Operator.XOR, Operator.OR, Operator.PARALLEL]): + for c in tree.children: + state[(id(c), c)] = ProcessTree.OperatorState.FUTURE + path.append((c, ProcessTree.OperatorState.FUTURE)) + elif ptu.is_any_operator_of(tree, [Operator.SEQUENCE, Operator.LOOP]): + state[(id(tree.children[0]), tree.children[0])] = ProcessTree.OperatorState.ENABLED + path.append((tree.children[0], ProcessTree.OperatorState.ENABLED)) + for c in tree.children[1:]: + state[(id(c), c)] = ProcessTree.OperatorState.FUTURE + path.append((c, ProcessTree.OperatorState.FUTURE)) + return path, state + else: + return None, None + + +def shortest_path_to_open(tree: ProcessTree, state: ProcessTreeState) -> Tuple[ + List[Tuple[ProcessTree, ProcessTree.OperatorState]], ProcessTreeState]: + if ptu.is_in_state(tree, ProcessTree.OperatorState.OPEN, state): + return list(), state + fast_path, fast_state = open_vertex(tree, state) + if fast_state is not None: + return fast_path, fast_state + path, state = shortest_path_to_enable(tree, state) + if path is not None: + e_path, state = open_vertex(tree, state) + path.extend(e_path) + return path, state + + +def shortest_path_to_close(tree: ProcessTree, state: ProcessTreeState) -> Tuple[ + List[Tuple[ProcessTree, ProcessTree.OperatorState]], ProcessTreeState]: + if ptu.is_in_state(tree, ProcessTree.OperatorState.CLOSED, state): + return list(), state + fast_path, fast_state = close_vertex(tree, state) + if fast_state is not None: + return fast_path, fast_state + path, state = shortest_path_to_open(tree, state) + if ptu.is_leaf(tree): + e_path, state = close_vertex(tree, state) + path.extend(e_path) + return path, state + elif ptu.is_any_operator_of(tree, [Operator.SEQUENCE, Operator.PARALLEL]): + for c in tree.children: + e_path, state = shortest_path_to_close(c, state) + path.extend(e_path) + elif ptu.is_operator(tree, Operator.LOOP): + if state[(id(tree.children[0]), tree.children[0])] in {ProcessTree.OperatorState.ENABLED, + ProcessTree.OperatorState.OPEN}: + e_path, state = shortest_path_to_close(tree.children[0], state) + path.extend(e_path) + elif state[(id(tree.children[1]), tree.children[1])] in {ProcessTree.OperatorState.ENABLED, + ProcessTree.OperatorState.OPEN}: + e_path, state = shortest_path_to_close(tree.children[1], state) + path.extend(e_path) + e_path, state = shortest_path_to_open(tree.children[0], state) + path.extend(e_path) + e_path, state = shortest_path_to_close(tree.children[0], state) + path.extend(e_path) + elif tree.operator in {Operator.XOR, Operator.OR}: + busy = False + for c in tree.children: + if state[(id(c), c)] in {ProcessTree.OperatorState.ENABLED, ProcessTree.OperatorState.OPEN}: + e_path, state = shortest_path_to_close(c, state) + path.extend(e_path) + busy = True + if not busy: + cur_path, cur_state, cur_path_costs = list(), copy.copy(state), sys.maxsize + for c in tree.children: + if state[(id(c), c)] != ProcessTree.OperatorState.CLOSED: + candidate_p, candidate_s = shortest_path_to_close(c, state) + candidate_costs = len(list(filter(lambda t: t[0].operator is None and t[0].label is not None and t[ + 1] == ProcessTree.OperatorState.OPEN, candidate_p))) + if candidate_costs < cur_path_costs: + cur_path, cur_state, cur_path_costs = candidate_p, candidate_s, candidate_costs + path.extend(cur_path) + state = cur_state + e_path, state = close_vertex(tree, state) + path.extend(e_path) + return path, state + + +def shortest_path_to_enable(tree: ProcessTree, state: ProcessTreeState) -> Tuple[ + List[Tuple[ProcessTree, ProcessTree.OperatorState]], ProcessTreeState]: + if state[(id(tree), tree)] == ProcessTree.OperatorState.ENABLED: + return list(), state + fast_path, fast_state = enable_vertex(tree, state) + if fast_state is not None: + return fast_path, fast_state + if state[(id(tree), tree)] == ProcessTree.OperatorState.FUTURE: + path, state = shortest_path_to_open(tree.parent, state) + if tree.parent.operator in {Operator.XOR, Operator.PARALLEL, Operator.OR}: + e_path, state = enable_vertex(tree, state) + if state is not None: # choice if another choice has already been taken! + path.extend(e_path) + if tree.parent.operator == Operator.SEQUENCE: + for i, c in enumerate(tree.parent.children): + if id(c) == id(tree): + if i > 0: + e_path, state = enable_vertex(tree, state) + path.extend(e_path) + break + else: + e_path, state = shortest_path_to_close(c, state) + path.extend(e_path) + elif tree.parent.operator == Operator.LOOP: + if id(tree) == id(tree.parent.children[0]): + if state[(id(tree.parent.children[1]), tree.parent.children[1])] not in { + ProcessTree.OperatorState.FUTURE, + ProcessTree.OperatorState.CLOSED}: + e_path, state = shortest_path_to_close(tree.parent.children[1], state) + path.extend(e_path) + e_path, state = enable_vertex(tree, state) + path.extend(e_path) + else: + e_path, state = shortest_path_to_close(tree.parent.children[0], state) + path.extend(e_path) + e_path, state = enable_vertex(tree, state) + path.extend(e_path) + return path, state + else: + path, state = shortest_path_to_close(tree, state) + parent = tree.parent + while parent is not None: + if parent.operator == Operator.LOOP and state[(id(parent), parent)] == ProcessTree.OperatorState.OPEN: + break + parent = parent.parent + if parent is not None and parent.operator == Operator.LOOP: + if state[(id(parent.children[0]), parent.children[0])] == ProcessTree.OperatorState.OPEN: + e_path, state = shortest_path_to_close(parent.children[0], state) + path.extend(e_path) + e_path, state = shortest_path_to_enable(parent.children[1], state) + path.extend(e_path) + elif state[(id(parent.children[1]), parent.children[1])] == ProcessTree.OperatorState.OPEN: + e_path, state = shortest_path_to_close(parent.children[1], state) + path.extend(e_path) + e_path, state = shortest_path_to_enable(parent.children[0], state) + path.extend(e_path) + elif state[(id(parent.children[0]), parent.children[0])] == ProcessTree.OperatorState.FUTURE: + e_path, state = shortest_path_to_enable(parent.children[0], state) + path.extend(e_path) + elif state[(id(parent.children[1]), parent.children[1])] == ProcessTree.OperatorState.FUTURE: + e_path, state = shortest_path_to_enable(parent.children[1], state) + path.extend(e_path) + e_path, state = shortest_path_to_enable(tree, state) + path.extend(e_path) + return path, state + else: + return None, None diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/__init__.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..59bbc4528ce25c9d2386cf0fcfb1a1ee13297e1d --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.process_tree.variants import approximated, search_graph_pt diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/__init__.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0c3f74d76238bf1e0b734f0933fac3fbce0d40a4 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.process_tree.variants.approximated import calculate_a_sa_ea_sets, matrix_lp, original, utilities diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/calculate_a_sa_ea_sets.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/calculate_a_sa_ea_sets.py new file mode 100644 index 0000000000000000000000000000000000000000..9606c10b2f726bdc7fc31eaa7b099b4da43c6dbf --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/calculate_a_sa_ea_sets.py @@ -0,0 +1,126 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Set +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.process_tree.utils.generic import is_leaf, is_tau_leaf +from pm4py.objects.process_tree.obj import Operator + + +def __get_activity_set(pt: ProcessTree, a_set=None) -> Set[str]: + if a_set is None: + a_set = set() + if is_leaf(pt): + a_set.add(pt.label) + else: + for c in pt.children: + __get_activity_set(c, a_set) + return a_set + + +def __get_start_activity_set_binary_tree(pt: ProcessTree, sa_set=None) -> Set[str]: + assert pt.children is None or len(pt.children) <= 2 + if sa_set is None: + sa_set = set() + if is_leaf(pt) and not is_tau_leaf(pt): + sa_set.add(pt.label) + elif not is_tau_leaf(pt): + assert len(pt.children) == 2 + tau_in_language_sub_pt_1 = __check_empty_sequence_accepted(pt.children[0]) + + if pt.operator == Operator.SEQUENCE: + if not tau_in_language_sub_pt_1: + return __get_start_activity_set_binary_tree(pt.children[0], sa_set) + else: + for c in pt.children: + sa_set.union(__get_start_activity_set_binary_tree(c, sa_set)) + elif pt.operator == Operator.PARALLEL or pt.operator == Operator.XOR: + for c in pt.children: + sa_set.union(__get_start_activity_set_binary_tree(c, sa_set)) + elif pt.operator == Operator.LOOP: + if not tau_in_language_sub_pt_1: + return __get_start_activity_set_binary_tree(pt.children[0], sa_set) + else: + for c in pt.children: + sa_set.union(__get_start_activity_set_binary_tree(c, sa_set)) + return sa_set + + +def __get_end_activity_set_binary_tree(pt: ProcessTree, ea_set=None) -> Set[str]: + assert pt.children is None or len(pt.children) <= 2 + if ea_set is None: + ea_set = set() + if is_leaf(pt) and not is_tau_leaf(pt): + ea_set.add(pt.label) + elif not is_tau_leaf(pt): + assert len(pt.children) == 2 + tau_in_language_sub_pt_1 = __check_empty_sequence_accepted(pt.children[0]) + tau_in_language_sub_pt_2 = __check_empty_sequence_accepted(pt.children[1]) + + if pt.operator == Operator.SEQUENCE: + if not tau_in_language_sub_pt_2: + return __get_end_activity_set_binary_tree(pt.children[1], ea_set) + else: + for c in pt.children: + ea_set.union(__get_end_activity_set_binary_tree(c, ea_set)) + elif pt.operator == Operator.PARALLEL or pt.operator == Operator.XOR: + for c in pt.children: + ea_set.union(__get_end_activity_set_binary_tree(c, ea_set)) + elif pt.operator == Operator.LOOP: + if not tau_in_language_sub_pt_1: + return __get_end_activity_set_binary_tree(pt.children[0], ea_set) + else: + for c in pt.children: + ea_set.union(__get_end_activity_set_binary_tree(c, ea_set)) + return ea_set + + +def __check_empty_sequence_accepted(pt: ProcessTree) -> bool: + if is_leaf(pt): + if is_tau_leaf(pt): + return True + else: + return False + else: + assert len(pt.children) == 2 + if pt.operator == Operator.SEQUENCE or pt.operator == Operator.PARALLEL: + return __check_empty_sequence_accepted(pt.children[0]) and __check_empty_sequence_accepted(pt.children[1]) + elif pt.operator == Operator.XOR: + return __check_empty_sequence_accepted(pt.children[0]) or __check_empty_sequence_accepted(pt.children[1]) + else: + assert pt.operator == Operator.LOOP + return __check_empty_sequence_accepted(pt.children[0]) + + +def initialize_a_sa_ea_tau_sets(pt: ProcessTree, a_sets=None, sa_sets=None, ea_sets=None, tau_sets=None): + if a_sets is None: + a_sets = {} + if sa_sets is None: + sa_sets = {} + if ea_sets is None: + ea_sets = {} + if tau_sets is None: + tau_sets = {} + + a_sets[pt] = __get_activity_set(pt) + sa_sets[pt] = __get_start_activity_set_binary_tree(pt) + ea_sets[pt] = __get_end_activity_set_binary_tree(pt) + tau_sets[pt] = __check_empty_sequence_accepted(pt) + + for c in pt.children: + a_sets, sa_sets, ea_sets, tau_sets = initialize_a_sa_ea_tau_sets(c, a_sets=a_sets, sa_sets=sa_sets, + ea_sets=ea_sets, tau_sets=tau_sets) + return a_sets, sa_sets, ea_sets, tau_sets diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/matrix_lp.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/matrix_lp.py new file mode 100644 index 0000000000000000000000000000000000000000..e47d94bdae7ee643d8abf6f00ba180ad7e3a5111 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/matrix_lp.py @@ -0,0 +1,1310 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import math + +from pm4py.algo.conformance.alignments.process_tree.variants.approximated.calculate_a_sa_ea_sets import initialize_a_sa_ea_tau_sets +from pm4py.algo.conformance.alignments.process_tree.variants.approximated.utilities import calculate_optimal_alignment, concatenate_traces, trace_to_list_of_str, add_fitness_and_cost_info_to_alignments, AlignmentNoneException, EfficientTree +from pm4py.objects.process_tree.utils.generic import get_process_tree_height, process_tree_to_binary_process_tree +from pm4py.objects.petri_net.utils.align_utils import SKIP +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.log.obj import Trace +from pm4py.objects.log.obj import EventLog +from typing import Union, Dict, Set, List, Tuple +from pm4py.objects.process_tree.obj import Operator +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util import exec_utils, constants +from pm4py.statistics.variants.log.get import get_variants_from_log_trace_idx +from pm4py.util.lp import solver +from enum import Enum +import numpy as np +from copy import copy +import sys +import time +from pm4py.util import variants_util + +TOL = 0.1 ** 6 + + +class Parameters(Enum): + MAX_TRACE_LENGTH = "max_trace_length" + MAX_PROCESS_TREE_HEIGHT = "max_process_tree_height" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + PARAM_MAX_ALIGN_TIME = "max_align_time" + SUBTREE_ALIGN_CACHE = "subtree_align_cache" + + +def apply_from_variants_tree_string(var_list, tree_string, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log. + The tree is specified as a PTML input + + Parameters + ------------ + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + tree_string + PTML string representing the tree + parameters + Parameters of the algorithm + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + + from pm4py.objects.process_tree.importer.variants import ptml + + tree = ptml.import_tree_from_string(tree_string, parameters=parameters) + + res = apply_from_variants_list(var_list, tree, parameters=parameters) + return res + + +def apply_from_variants_list(var_list, tree, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + tree + Process tree + parameters + Parameters of the algorithm + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + + dictio_alignments = {} + log = EventLog() + + for index, varitem in enumerate(var_list): + trace = variants_util.variant_to_trace(varitem[0], parameters=parameters) + log.append(trace) + + alignments = apply(log, tree, parameters=parameters) + for index, varitem in enumerate(var_list): + dictio_alignments[varitem[0]] = alignments[index] + return dictio_alignments + + +def apply(obj: Union[Trace, EventLog], pt: ProcessTree, parameters=None): + """ + Returns approximated alignments for a process tree + + Parameters + -------------- + obj + Event log or trace (a conversion is done if necessary) + pt + Process tree + parameters + Parameters of the algorithm + + Returns + -------------- + alignments + Approximated alignments + :param obj: + :param pt: + :param parameters: + :return: + """ + if parameters is None: + parameters = {} + + max_trace_length = exec_utils.get_param_value(Parameters.MAX_TRACE_LENGTH, parameters, 1) + max_process_tree_height = exec_utils.get_param_value(Parameters.MAX_PROCESS_TREE_HEIGHT, parameters, 1) + + return __align(obj, pt, max_trace_length=max_trace_length, max_process_tree_height=max_process_tree_height, + parameters=parameters) + + +def __align(obj: Union[Trace, EventLog], pt: ProcessTree, max_trace_length: int = 1, + max_process_tree_height: int = 1, parameters=None): + """ + this function approximates alignments for a given event log or trace and a process tree + + :param obj: event log or single trace + :param pt: process tree + :param max_trace_length: specifies when the recursive splitting stops based on the trace's length + :param max_process_tree_height: specifies when the recursive splitting stops based on the tree's height + :return: + """ + assert isinstance(pt, ProcessTree) + if isinstance(obj, Trace): + e = EventLog() + e.append(obj) + obj = e + assert isinstance(obj, EventLog) + pt = process_tree_to_binary_process_tree(pt) + pt = EfficientTree(pt) + + parameters[Parameters.SUBTREE_ALIGN_CACHE] = {} + + return __approximate_alignments_for_log(obj, pt, max_trace_length, max_process_tree_height, + parameters=parameters) + + +def __approximate_alignments_for_log(log: EventLog, pt: ProcessTree, max_tl: int, max_th: int, + parameters=None): + if parameters is None: + parameters = {} + + a_sets, sa_sets, ea_sets, tau_sets = initialize_a_sa_ea_tau_sets(pt) + variants = get_variants_from_log_trace_idx(log, parameters=parameters) + inv_corr = {} + + max_align_time = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME, parameters, + sys.maxsize) + log_alignment_start_time = time.time() + + var_keys_with_trace_length = list((x, len(log[y[0]])) for x, y in variants.items()) + var_keys_with_trace_length = sorted(var_keys_with_trace_length, key=lambda x: x[1]) + var_keys = [x[0] for x in var_keys_with_trace_length] + + for i, var in enumerate(var_keys): + this_time = time.time() + + if this_time - log_alignment_start_time <= max_align_time: + parameters["trace_alignment_start_time"] = this_time + alignment = __approximate_alignment_for_trace(pt, a_sets, sa_sets, ea_sets, tau_sets, log[variants[var][0]], + max_tl, max_th, + parameters=parameters) + alignment = add_fitness_and_cost_info_to_alignments(alignment, pt, log[variants[var][0]], + parameters=parameters) + else: + alignment = None + + for idx in variants[var]: + inv_corr[idx] = alignment + alignments = [] + for i in range(len(log)): + alignments.append(inv_corr[i]) + return alignments + + +def __approximate_alignment_for_trace(pt: ProcessTree, a_sets: Dict[ProcessTree, Set[str]], + sa_sets: Dict[ProcessTree, Set[str]], ea_sets: Dict[ProcessTree, Set[str]], + tau_flags: Dict[ProcessTree, bool], trace: Trace, max_tl: int, + max_th: int, parameters=None): + if parameters is None: + parameters = {} + + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + subtree_align_cache = exec_utils.get_param_value(Parameters.SUBTREE_ALIGN_CACHE, parameters, {}) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + start_time = parameters["trace_alignment_start_time"] + current_time = time.time() + + trace_activities = tuple([x[activity_key] for x in trace]) + + id_pt = id(pt) + + # if the combination process tree-trace is in the cache + # use the cache to avoid further computations + if (id_pt, trace_activities) in subtree_align_cache: + return copy(subtree_align_cache[(id_pt, trace_activities)]) + + if current_time - start_time > max_align_time_trace: + # the alignment of the trace did not terminate in an useful time + subtree_align_cache[(id_pt, trace_activities)] = None + return None + + try: + if len(trace) <= max_tl or get_process_tree_height(pt) <= max_th: + aligned_trace = calculate_optimal_alignment(pt, trace, parameters=parameters) + subtree_align_cache[(id_pt, trace_activities)] = copy(aligned_trace) + return aligned_trace + else: + if pt.operator == Operator.SEQUENCE: + aligned_trace = __approximate_alignment_on_sequence(pt, trace, a_sets, sa_sets, ea_sets, tau_flags, + max_tl, + max_th, + parameters=parameters) + subtree_align_cache[(id_pt, trace_activities)] = copy(aligned_trace) + return aligned_trace + elif pt.operator == Operator.LOOP: + aligned_trace = __approximate_alignment_on_loop(pt, trace, a_sets, sa_sets, ea_sets, tau_flags, max_tl, + max_th, + parameters=parameters) + subtree_align_cache[(id_pt, trace_activities)] = copy(aligned_trace) + return aligned_trace + elif pt.operator == Operator.XOR: + aligned_trace = __approximate_alignment_on_choice(pt, trace, a_sets, sa_sets, ea_sets, tau_flags, + max_tl, max_th, + parameters=parameters) + subtree_align_cache[(id_pt, trace_activities)] = copy(aligned_trace) + return aligned_trace + elif pt.operator == Operator.PARALLEL: + aligned_trace = __approximate_alignment_on_parallel(pt, trace, a_sets, sa_sets, ea_sets, tau_flags, + max_tl, + max_th, + parameters=parameters) + subtree_align_cache[(id_pt, trace_activities)] = copy(aligned_trace) + return aligned_trace + except AlignmentNoneException: + # alignment did not terminate correctly. return None + subtree_align_cache[(id_pt, trace_activities)] = None + return None + except IndexError: + # alignment did not terminate correctly. return None + subtree_align_cache[(id_pt, trace_activities)] = None + return None + + +def __approximate_alignment_on_choice(pt: ProcessTree, trace: Trace, a_sets: Dict[ProcessTree, Set[str]], + sa_sets: Dict[ProcessTree, Set[str]], ea_sets: Dict[ProcessTree, Set[str]], + tau_flags: Dict[ProcessTree, bool], tl: int, th: int, + parameters=None): + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + assert pt.operator == Operator.XOR + assert len(trace) > 0 + + best_suited_subtree = None + lowest_mismatches = math.inf + for subtree in pt.children: + mismatches = 0 + if len(trace) > 0: + if trace[0][activity_key] not in sa_sets[subtree]: + mismatches += 1 + if trace[-1][activity_key] not in ea_sets[subtree]: + mismatches += 1 + if len(trace) > 2: + for a in trace[1:-1]: + if a[activity_key] not in a_sets[subtree]: + mismatches += 1 + else: + if not tau_flags[subtree] and len(sa_sets[subtree].intersection(ea_sets[subtree])) != 0: + mismatches += 1 + elif not tau_flags[subtree] and len(sa_sets[subtree].intersection(ea_sets[subtree])) == 0: + mismatches += 2 + if mismatches < lowest_mismatches: + best_suited_subtree = subtree + lowest_mismatches = mismatches + return __approximate_alignment_for_trace(best_suited_subtree, a_sets, sa_sets, ea_sets, tau_flags, trace, tl, th, + parameters=parameters) + + +def __approximate_alignment_on_loop(pt: ProcessTree, trace: Trace, a_sets: Dict[ProcessTree, Set[str]], + sa_sets: Dict[ProcessTree, Set[str]], ea_sets: Dict[ProcessTree, Set[str]], + tau_flags: Dict[ProcessTree, bool], tl: int, th: int, + parameters=None): + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + assert pt.operator == Operator.LOOP + assert len(pt.children) == 2 + assert len(trace) > 0 + + # x_i_j = 1 <=> assigns activity i to subtree j + x__variables = {} + # t_i_j = 1 <=> inserts a tau at position i and assigns it to subtree j + t__variables = {} + # s_i_j = 1 <=> activity i is a start activity in the current sub-trace assigned to subtree j + s__variables = {} + # e_i_j = 1 <=> activity i is an end activity in the current sub-trace assigned to subtree j + e__variables = {} + # v_i_j = 1 <=> activity i is neither a start nor end-activity in the current sub-trace assigned to subtree j + v__variables = {} + # auxiliary variables + # p_i_j = 1 <=> previous activity i-1 is assigned to the other subtree or t_1_other-subtree is 1 + p__variables = {} + # n_i_j = 1 <=> next activity i+1 is assigned to the other subtree or t_1_other-subtree is 1 + n__variables = {} + + t__costs = {} + s__costs = {} + e__costs = {} + v__costs = {} + all_variables = [] + + Aub = [] + Aeq = [] + bub = [] + beq = [] + + for i, a in enumerate(trace): + x__variables[i] = {} + s__variables[i] = {} + s__costs[i] = {} + e__variables[i] = {} + e__costs[i] = {} + v__variables[i] = {} + v__costs[i] = {} + p__variables[i] = {} + n__variables[i] = {} + for j, subtree in enumerate(pt.children): + all_variables.append('x_' + str(i) + '_' + str(j)) + x__variables[i][j] = len(all_variables) - 1 + all_variables.append('s_' + str(i) + '_' + str(j)) + s__variables[i][j] = len(all_variables) - 1 + s__costs[i][j] = 0 if a[activity_key] in sa_sets[subtree] else 1 + all_variables.append('e_' + str(i) + '_' + str(j)) + e__variables[i][j] = len(all_variables) - 1 + e__costs[i][j] = 0 if a[activity_key] in ea_sets[subtree] else 1 + all_variables.append('v_' + str(i) + '_' + str(j)) + v__variables[i][j] = len(all_variables) - 1 + v__costs[i][j] = 0 if a[activity_key] in a_sets[subtree] else 1 + all_variables.append('p_' + str(i) + '_' + str(j)) + p__variables[i][j] = len(all_variables) - 1 + all_variables.append('n_' + str(i) + '_' + str(j)) + n__variables[i][j] = len(all_variables) - 1 + + for i in range(len(trace) + 1): + t__variables[i] = {} + t__costs[i] = {} + for j, subtree in enumerate(pt.children): + all_variables.append('t_' + str(i) + '_' + str(j)) + t__variables[i][j] = len(all_variables) - 1 + if tau_flags[subtree]: + t__costs[i][j] = -0.00001 # favour to add a cut if possible over not putting a cut + else: + if len(sa_sets[subtree].intersection(ea_sets[subtree])) != 0: + t__costs[i][j] = 1 + else: + t__costs[i][j] = 2 + + c = [0] * len(all_variables) + for i in range(len(trace)): + for j in range(len(pt.children)): + c[s__variables[i][j]] = s__costs[i][j] + + for i in range(len(trace)): + for j in range(len(pt.children)): + c[e__variables[i][j]] = e__costs[i][j] + + for i in range(len(trace)): + for j in range(len(pt.children)): + c[v__variables[i][j]] = v__costs[i][j] + + for i in range(len(trace) + 1): + for j in range(len(pt.children)): + c[t__variables[i][j]] = t__costs[i][j] + + # first tau can never be assigned to the 2nd subtree + r = [0] * len(all_variables) + r[t__variables[0][1]] = 1 + Aeq.append(r) + beq.append(0) + + # last tau can never be assigned to the 2nd subtree + r = [0] * len(all_variables) + r[t__variables[len(trace)][1]] = 1 + Aeq.append(r) + beq.append(0) + + # if first/last tau is not used --> first/last activity is assigned to 1st subtree + r = [0] * len(all_variables) + r[t__variables[0][0]] = -1 + r[x__variables[0][0]] = -1 + Aub.append(r) + bub.append(-1) + + r = [0] * len(all_variables) + r[t__variables[len(trace)][0]] = -1 + r[x__variables[len(trace) - 1][0]] = -1 + Aub.append(r) + bub.append(-1) + + for i in range(len(trace)): + # every activity is assigned to one subtree + r1 = [0] * len(all_variables) + # start/end/intermediate-activity at position i can only be assigned to one subtree + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + r4 = [0] * len(all_variables) + for j in range(len(pt.children)): + r1[x__variables[i][j]] = 1 + r2[x__variables[i][j]] = 1 + r3[x__variables[i][j]] = 1 + r4[x__variables[i][j]] = 1 + Aeq.append(r1) + beq.append(1) + Aub.append(r2) + Aub.append(r3) + Aub.append(r4) + bub.append(1) + bub.append(1) + bub.append(1) + + # max one tau is used per index + for i in range(len(trace) + 1): + r = [0] * len(all_variables) + for j in range(2): + r[t__variables[i][j]] = 1 + Aub.append(r) + bub.append(1) + + # if tau is used and hence, assigned to a subtree, the surrounding activities are assigned to the other subtree + for i in range(1, len(trace)): + # if tau at position i is assigned to 1st subtree, the previous activity is assigned to 2nd subtree + r1 = [0] * len(all_variables) + # if tau at position i is assigned to 1st subtree, the previous activity is assigned to 2nd subtree + r2 = [0] * len(all_variables) + r1[t__variables[i][0]] = 1 + r1[x__variables[i - 1][1]] = -1 + r2[t__variables[i][1]] = 1 + r2[x__variables[i - 1][0]] = -1 + Aub.append(r1) + Aub.append(r2) + bub.append(0) + bub.append(0) + + for i in range(len(trace)): + # if tau at position i is assigned to 1st subtree, the next activity is assigned to 2nd subtree + r1 = [0] * len(all_variables) + # if tau at position i is assigned to 2nd subtree, the next activity is assigned to 1st subtree + r2 = [0] * len(all_variables) + r1[t__variables[i][0]] = 1 + r1[x__variables[i][1]] = -1 + r2[t__variables[i][1]] = 1 + r2[x__variables[i][0]] = -1 + Aub.append(r1) + Aub.append(r2) + bub.append(0) + bub.append(0) + + # if last tau is used and assigned to 1st subtree (assigning it to the 2nd subtree is already forbidden by another + # constraint) --> last activity must be assigned to 2nd subtree + r = [0] * len(all_variables) + r[t__variables[len(trace)][0]] = 1 + r[x__variables[len(trace) - 1][1]] = -1 + Aub.append(r) + bub.append(0) + + # define auxiliary variables n: n_i_1 = 1 <=> next activity i+1 is assigned to 2nd subtree or t_i+1_2 = 1 + for i in range(len(trace) - 1): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + r4 = [0] * len(all_variables) + r5 = [0] * len(all_variables) + r6 = [0] * len(all_variables) + + r1[n__variables[i][0]] = 1 + r1[x__variables[i + 1][1]] = -1 + r1[t__variables[i + 1][1]] = -1 + r2[n__variables[i][0]] = -1 + r2[x__variables[i + 1][1]] = 1 + r3[n__variables[i][0]] = -1 + r3[t__variables[i + 1][1]] = 1 + r4[n__variables[i][1]] = 1 + r4[x__variables[i + 1][0]] = -1 + r4[t__variables[i + 1][0]] = -1 + r5[n__variables[i][1]] = -1 + r5[x__variables[i + 1][0]] = 1 + r6[n__variables[i][1]] = -1 + r6[t__variables[i + 1][0]] = 1 + Aub.append(r1) + Aub.append(r2) + Aub.append(r3) + Aub.append(r4) + Aub.append(r5) + Aub.append(r6) + bub.append(0) + bub.append(0) + bub.append(0) + bub.append(0) + bub.append(0) + bub.append(0) + + r = [0] * len(all_variables) + r[t__variables[len(trace)][1]] = 1 + r[n__variables[len(trace) - 1][0]] = -1 + Aub.append(r) + bub.append(0) + + r = [0] * len(all_variables) + r[t__variables[len(trace)][0]] = 1 + r[n__variables[len(trace) - 1][1]] = -1 + Aub.append(r) + bub.append(0) + + # define e_i_j variables + for i in range(len(trace)): + for j in range(2): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + r1[e__variables[i][j]] = 1 + r1[n__variables[i][j]] = -1 + r2[e__variables[i][j]] = 1 + r2[x__variables[i][j]] = -1 + r3[e__variables[i][j]] = -1 + r3[n__variables[i][j]] = 1 + r3[x__variables[i][j]] = 1 + Aub.append(r1) + Aub.append(r2) + Aub.append(r3) + bub.append(0) + bub.append(0) + bub.append(1) + + # define auxiliary variables p: p_i_1 = 1 <=> previous activity i-1 is assigned to 2nd subtree or t_i-1_2 = 1 + r1 = [0] * len(all_variables) + r1[t__variables[0][1]] = 1 + r1[p__variables[0][0]] = -1 + r2 = [0] * len(all_variables) + r2[p__variables[0][1]] = 1 + r2[t__variables[0][0]] = -1 + Aub.append(r1) + Aub.append(r2) + bub.append(0) + bub.append(0) + + for i in range(1, len(trace)): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + r4 = [0] * len(all_variables) + r5 = [0] * len(all_variables) + r6 = [0] * len(all_variables) + r1[p__variables[i][0]] = 1 + r1[t__variables[i][1]] = -1 + r1[x__variables[i - 1][1]] = -1 + r2[p__variables[i][0]] = -1 + r2[t__variables[i][1]] = 1 + r3[p__variables[i][0]] = -1 + r3[x__variables[i - 1][1]] = 1 + r4[p__variables[i][1]] = -1 + r4[t__variables[i][0]] = 1 + r4[x__variables[i - 1][0]] = 1 + r5[p__variables[i][1]] = -1 + r5[t__variables[i][0]] = 1 + r6[p__variables[i][1]] = -1 + r6[x__variables[i - 1][0]] = 1 + Aub.append(r1) + Aub.append(r2) + Aub.append(r3) + Aub.append(r4) + Aub.append(r5) + Aub.append(r6) + bub.append(0) + bub.append(0) + bub.append(0) + bub.append(0) + bub.append(0) + bub.append(0) + + # define s_i_j variables + for i in range(len(trace)): + for j in range(2): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + r1[s__variables[i][j]] = -1 + r1[p__variables[i][j]] = 1 + r1[x__variables[i][j]] = 1 + r2[s__variables[i][j]] = 1 + r2[p__variables[i][j]] = -1 + r3[s__variables[i][j]] = 1 + r3[p__variables[i][j]] = -1 + Aub.append(r1) + Aub.append(r2) + Aub.append(r3) + bub.append(1) + bub.append(0) + bub.append(0) + + r = [0] * len(all_variables) + r[t__variables[0][0]] = -1 + r[s__variables[0][0]] = -1 + Aub.append(r) + bub.append(-1) + + # define v_i_j variables + for i in range(len(trace)): + for j in range(2): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + r4 = [0] * len(all_variables) + + r1[v__variables[i][j]] = -1 + r1[s__variables[i][j]] = -1 + r1[e__variables[i][j]] = -1 + r1[x__variables[i][j]] = 1 + + r2[v__variables[i][j]] = 1 + r2[x__variables[i][j]] = -1 + + r3[v__variables[i][j]] = 1 + r3[e__variables[i][j]] = 1 + + r4[v__variables[i][j]] = 1 + r4[s__variables[i][j]] = 1 + + Aub.append(r1) + Aub.append(r2) + Aub.append(r3) + Aub.append(r4) + + bub.append(0) + bub.append(0) + bub.append(1) + bub.append(1) + + for idx, v in enumerate(all_variables): + r = [0] * len(all_variables) + r[idx] = -1 + Aub.append(r) + bub.append(0) + r = [0] * len(all_variables) + r[idx] = 1 + Aub.append(r) + bub.append(1) + + points = __ilp_solve(c, Aub, bub, Aeq, beq) + + for i in t__variables: + for j in t__variables[i]: + t__variables[i][j] = True if points[t__variables[i][j]] == 1 else False + for i in x__variables: + for j in x__variables[i]: + x__variables[i][j] = True if points[x__variables[i][j]] == 1 else False + + t_variables = t__variables + x_variables = x__variables + + alignments_to_calculate = [] + sub_trace = Trace() + current_subtree_idx = 0 + for i in range(len(trace)): + for j in range(2): + if t_variables[i][j]: + if i == 0: + # first tau can be only assigned to first subtree + assert j == 0 + alignments_to_calculate.append((pt.children[j], Trace())) + current_subtree_idx = 1 + else: + alignments_to_calculate.append((pt.children[current_subtree_idx], sub_trace)) + alignments_to_calculate.append((pt.children[j], Trace())) + sub_trace = Trace() + for j in range(2): + if x_variables[i][j]: + if j == current_subtree_idx: + sub_trace.append(trace[i]) + else: + alignments_to_calculate.append((pt.children[current_subtree_idx], sub_trace)) + sub_trace = Trace() + sub_trace.append(trace[i]) + current_subtree_idx = j + if len(sub_trace) > 0: + alignments_to_calculate.append((pt.children[current_subtree_idx], sub_trace)) + if t_variables[len(trace)][0]: + alignments_to_calculate.append((pt.children[0], Trace())) + + res = [] + for subtree, sub_trace in alignments_to_calculate: + align_result = __approximate_alignment_for_trace(subtree, a_sets, sa_sets, ea_sets, tau_flags, sub_trace, tl, + th, + parameters=parameters) + if align_result is None: + # the alignment did not terminate correctly + return None + res.extend(align_result) + return res + + +def __approximate_alignment_on_sequence(pt: ProcessTree, trace: Trace, a_sets: Dict[ProcessTree, Set[str]], + sa_sets: Dict[ProcessTree, Set[str]], ea_sets: Dict[ProcessTree, Set[str]], + tau_flags: Dict[ProcessTree, bool], tl: int, th: int, + parameters=None): + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + assert pt.operator == Operator.SEQUENCE + assert len(pt.children) > 0 + assert len(trace) > 0 + + # x_i_j = 1 <=> assigns activity i to subtree j + x__variables = {} + + # s_i_j = 1 <=> activity i is a start activity in the current sub-trace assigned to subtree j + s__variables = {} + + # e_i_j = 1 <=> activity i is an end activity in the current sub-trace assigned to subtree j + e__variables = {} + + # auxiliary u_j <=> u_j=1 if an activity is assigned to subtree j + u__variables = {} + + # v_i_j = 1 <=> activity i is neither a start nor end-activity in the current sub-trace assigned to subtree j + v__variables = {} + + s__costs = {} + e__costs = {} + u__costs = {} + v__costs = {} + + all_variables = [] + + for i, a in enumerate(trace): + x__variables[i] = {} + s__variables[i] = {} + s__costs[i] = {} + e__variables[i] = {} + e__costs[i] = {} + v__variables[i] = {} + v__costs[i] = {} + + for j, subtree in enumerate(pt.children): + all_variables.append('x_' + str(i) + '_' + str(j)) + x__variables[i][j] = len(all_variables) - 1 + all_variables.append('s_' + str(i) + '_' + str(j)) + s__variables[i][j] = len(all_variables) - 1 + all_variables.append('e_' + str(i) + '_' + str(j)) + e__variables[i][j] = len(all_variables) - 1 + all_variables.append('v_' + str(i) + '_' + str(j)) + v__variables[i][j] = len(all_variables) - 1 + s__costs[i][j] = 0 if a[activity_key] in sa_sets[subtree] else 1 + e__costs[i][j] = 0 if a[activity_key] in ea_sets[subtree] else 1 + v__costs[i][j] = 0 if a[activity_key] in a_sets[subtree] else 1 + + for j in range(len(pt.children)): + all_variables.append('u_' + str(j)) + u__variables[j] = len(all_variables) - 1 + # define costs to not assign anything to subtree j + if tau_flags[pt.children[j]]: + u__costs[j] = 0 + elif sa_sets[pt.children[j]] & ea_sets[pt.children[j]]: + # intersection of start-activities and end-activities is not empty + u__costs[j] = 1 + else: + # intersection of start-activities and end-activities is empty + u__costs[j] = 2 + + # objective function + c = [0] * len(all_variables) + for i in range(len(trace)): + for j in range(len(pt.children)): + c[v__variables[i][j]] = v__costs[i][j] + for i in range(len(trace)): + for j in range(len(pt.children)): + c[s__variables[i][j]] = s__costs[i][j] + for i in range(len(trace)): + for j in range(len(pt.children)): + c[e__variables[i][j]] = e__costs[i][j] + for j in range(len(pt.children)): + c[u__variables[j]] = -u__costs[j] + Aub = [] + bub = [] + Aeq = [] + beq = [] + + # every activity is assigned to one subtree + for i in range(len(trace)): + r = [0] * len(all_variables) + for j in range(len(pt.children)): + r[x__variables[i][j]] = 1 + Aeq.append(r) + beq.append(1) + + for j in range(len(pt.children)): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + # first activity is start activity + r1[x__variables[0][j]] = 1 + r1[s__variables[0][j]] = -1 + # last activity is an end activity + r2[x__variables[len(trace) - 1][j]] = 1 + r2[e__variables[len(trace) - 1][j]] = -1 + Aub.append(r1) + Aub.append(r2) + bub.append(0) + bub.append(0) + + # define s_i_j variables + for i in range(1, len(trace)): + for j in range(len(pt.children)): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + r1[s__variables[i][j]] = -1 + r1[x__variables[i][j]] = 1 + r1[x__variables[i - 1][j]] = -1 + r2[s__variables[i][j]] = 1 + r2[x__variables[i][j]] = -1 + r3[s__variables[i][j]] = 1 + r3[x__variables[i - 1][j]] = 1 + Aub.append(r1) + Aub.append(r2) + Aub.append(r3) + bub.append(0) + bub.append(0) + bub.append(1) + + for i in range(len(trace)): + r = [0] * len(all_variables) + for j in range(len(pt.children)): + r[s__variables[i][j]] = 1 + Aub.append(r) + bub.append(1) + + # define e_i_j variables + for i in range(len(trace) - 1): + for j in range(len(pt.children)): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + r1[e__variables[i][j]] = -1 + r1[x__variables[i][j]] = 1 + r1[x__variables[i + 1][j]] = -1 + r2[e__variables[i][j]] = 1 + r2[x__variables[i][j]] = -1 + r3[e__variables[i][j]] = 1 + r3[x__variables[i + 1][j]] = 1 + Aub.append(r1) + Aub.append(r2) + Aub.append(r3) + bub.append(0) + bub.append(0) + bub.append(1) + for i in range(len(trace)): + # activity can be only for one subtree an end-activity + r = [0] * len(all_variables) + for j in range(len(pt.children)): + r[e__variables[i][j]] = 1 + Aub.append(r) + bub.append(1) + + # constraint - preserving sequence when assigning activities to subtrees + for i in range(len(trace) - 1): + for j in range(len(pt.children)): + r = [0] * len(all_variables) + for k in range(j, len(pt.children)): + r[x__variables[i + 1][k]] = -1 + r[x__variables[i][j]] = 1 + Aub.append(r) + bub.append(0) + + # define u_j variables + for j in range(len(pt.children)): + for i in range(len(trace)): + r = [0] * len(all_variables) + r[u__variables[j]] = -1 + r[x__variables[i][j]] = 1 + Aub.append(r) + bub.append(0) + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + r1[u__variables[j]] = 1 + r2[u__variables[j]] = 1 + + for i in range(len(trace)): + r1[s__variables[i][j]] = -1 + r2[e__variables[i][j]] = -1 + Aub.append(r1) + Aub.append(r2) + bub.append(0) + bub.append(0) + + # define v_i_j variables + for i in range(len(trace)): + for j in range(2): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + r4 = [0] * len(all_variables) + + r1[v__variables[i][j]] = -1 + r1[s__variables[i][j]] = -1 + r1[e__variables[i][j]] = -1 + r1[x__variables[i][j]] = 1 + + r2[v__variables[i][j]] = 1 + r2[x__variables[i][j]] = -1 + + r3[v__variables[i][j]] = 1 + r3[e__variables[i][j]] = 1 + + r4[v__variables[i][j]] = 1 + r4[s__variables[i][j]] = 1 + + Aub.append(r1) + Aub.append(r2) + Aub.append(r3) + Aub.append(r4) + bub.append(0) + bub.append(0) + bub.append(1) + bub.append(1) + + for idx, v in enumerate(all_variables): + r = [0] * len(all_variables) + r[idx] = -1 + Aub.append(r) + bub.append(0) + r = [0] * len(all_variables) + r[idx] = 1 + Aub.append(r) + bub.append(1) + + points = __ilp_solve(c, Aub, bub, Aeq, beq) + + for i in x__variables: + for j in x__variables[i]: + x__variables[i][j] = True if points[x__variables[i][j]] == 1 else False + + x_variables = x__variables + + alignments_to_calculate = [] + for j in range(len(pt.children)): + sub_trace = Trace() + for i in range(len(trace)): + if x_variables[i][j] == 1: + sub_trace.append(trace[i]) + alignments_to_calculate.append((pt.children[j], sub_trace)) + # calculate and compose alignments + res = [] + for subtree, sub_trace in alignments_to_calculate: + align_result = __approximate_alignment_for_trace(subtree, a_sets, sa_sets, ea_sets, tau_flags, sub_trace, tl, + th, + parameters=parameters) + if align_result is None: + # the alignment did not terminate correctly + return None + res.extend(align_result) + + return res + + +def __approximate_alignment_on_parallel(pt: ProcessTree, trace: Trace, a_sets: Dict[ProcessTree, Set[str]], + sa_sets: Dict[ProcessTree, Set[str]], ea_sets: Dict[ProcessTree, Set[str]], + tau_flags: Dict[ProcessTree, bool], tl: int, th: int, + parameters=None): + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + assert pt.operator == Operator.PARALLEL + assert len(pt.children) > 0 + assert len(trace) > 0 + + x__variables = {} + s__variables = {} + e__variables = {} + u__variables = {} + v__variables = {} + + s__costs = {} + e__costs = {} + u__costs = {} + v__costs = {} + all_variables = [] + + for i, a in enumerate(trace): + x__variables[i] = {} + s__variables[i] = {} + s__costs[i] = {} + e__variables[i] = {} + e__costs[i] = {} + v__variables[i] = {} + v__costs[i] = {} + + for j, subtree in enumerate(pt.children): + all_variables.append('x_' + str(i) + '_' + str(j)) + x__variables[i][j] = len(all_variables) - 1 + all_variables.append('s_' + str(i) + '_' + str(j)) + s__variables[i][j] = len(all_variables) - 1 + all_variables.append('e_' + str(i) + '_' + str(j)) + e__variables[i][j] = len(all_variables) - 1 + all_variables.append('v_' + str(i) + '_' + str(j)) + v__variables[i][j] = len(all_variables) - 1 + s__costs[i][j] = 0 if a[activity_key] in sa_sets[subtree] else 1 + e__costs[i][j] = 0 if a[activity_key] in ea_sets[subtree] else 1 + v__costs[i][j] = 0 if a[activity_key] in a_sets[subtree] else 1 + + for j in range(len(pt.children)): + all_variables.append('u_' + str(j)) + u__variables[j] = len(all_variables) - 1 + # define costs to not assign anything to subtree j + if tau_flags[pt.children[j]]: + u__costs[j] = 0 + elif sa_sets[pt.children[j]] & ea_sets[pt.children[j]]: + # intersection of start-activities and end-activities is not empty + u__costs[j] = 1 + else: + # intersection of start-activities and end-activities is empty + u__costs[j] = 2 + + c = [0] * len(all_variables) + for i in range(len(trace)): + for j in range(len(pt.children)): + c[v__variables[i][j]] = v__costs[i][j] + c[s__variables[i][j]] = s__costs[i][j] + c[e__variables[i][j]] = e__costs[i][j] + for j in range(len(pt.children)): + c[u__variables[j]] = -u__costs[j] + Aub = [] + bub = [] + Aeq = [] + beq = [] + + for i in range(len(trace)): + r = [0] * len(all_variables) + for j in range(len(pt.children)): + r[x__variables[i][j]] = 1 + Aeq.append(r) + beq.append(1) + + for j in range(len(pt.children)): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + + # first activity is a start activity + r1[x__variables[0][j]] = 1 + r1[s__variables[0][j]] = -1 + # last activity is an end-activity + r2[x__variables[len(trace) - 1][j]] = 1 + r2[e__variables[len(trace) - 1][j]] = -1 + + Aub.append(r1) + Aub.append(r2) + bub.append(0) + bub.append(0) + + # define s_i_j variables + for i in range(len(trace)): + for j in range(len(pt.children)): + r = [0] * len(all_variables) + r[s__variables[i][j]] = 1 + r[x__variables[i][j]] = -1 + Aub.append(r) + bub.append(0) + for k in range(i): + r = [0] * len(all_variables) + r[s__variables[i][j]] = 1 + r[x__variables[k][j]] = 1 + Aub.append(r) + bub.append(1) + r = [0] * len(all_variables) + for j in range(len(pt.children)): + r[s__variables[i][j]] = 1 + Aub.append(r) + bub.append(1) + + # define e_i_j variables + for i in range(len(trace)): + for j in range(len(pt.children)): + r = [0] * len(all_variables) + r[e__variables[i][j]] = 1 + r[x__variables[i][j]] = -1 + Aub.append(r) + bub.append(0) + for k in range(i + 1, len(trace)): + r = [0] * len(all_variables) + r[e__variables[i][j]] = 1 + r[x__variables[k][j]] = 1 + Aub.append(r) + bub.append(1) + # activity can be only an end-activity for one subtree + r = [0] * len(all_variables) + for j in range(len(pt.children)): + r[e__variables[i][j]] = 1 + Aub.append(r) + bub.append(1) + + for j in range(len(pt.children)): + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + + r2[u__variables[j]] = 1 + r3[u__variables[j]] = 1 + for i in range(len(trace)): + r1 = [0] * len(all_variables) + + # define u_j variables + r1[u__variables[j]] = -1 + r1[x__variables[i][j]] = 1 + Aub.append(r1) + bub.append(0) + + # if u_j variable = 1 ==> a start activity must exist + r2[s__variables[i][j]] = -1 + # if u_j variable = 1 ==> an end activity must exist + r3[e__variables[i][j]] = -1 + + Aub.append(r2) + bub.append(0) + Aub.append(r3) + bub.append(0) + + # define v_i_j variables + for i in range(len(trace)): + for j in range(2): + r1 = [0] * len(all_variables) + r2 = [0] * len(all_variables) + r3 = [0] * len(all_variables) + r4 = [0] * len(all_variables) + + r1[v__variables[i][j]] = -1 + r1[s__variables[i][j]] = -1 + r1[e__variables[i][j]] = -1 + r1[x__variables[i][j]] = 1 + + r2[v__variables[i][j]] = 1 + r2[x__variables[i][j]] = -1 + + r3[v__variables[i][j]] = 1 + r3[e__variables[i][j]] = 1 + + r4[v__variables[i][j]] = 1 + r4[s__variables[i][j]] = 1 + + Aub.append(r1) + Aub.append(r2) + Aub.append(r3) + Aub.append(r4) + bub.append(0) + bub.append(0) + bub.append(1) + bub.append(1) + + for idx, v in enumerate(all_variables): + r = [0] * len(all_variables) + r[idx] = -1 + Aub.append(r) + bub.append(0) + r = [0] * len(all_variables) + r[idx] = 1 + Aub.append(r) + bub.append(1) + + points = __ilp_solve(c, Aub, bub, Aeq, beq) + + for i in x__variables: + for j in x__variables[i]: + x__variables[i][j] = True if points[x__variables[i][j]] == 1 else False + + x_variables = x__variables + + # trace_parts list contains trace parts mapped onto the determined subtree + trace_parts = [] + last_subtree = None + for i in range(len(trace)): + for j in range(len(pt.children)): + subtree = pt.children[j] + if x_variables[i][j]: + if last_subtree and subtree == last_subtree: + trace_parts[-1][1].append(trace[i]) + else: + assert last_subtree is None or subtree != last_subtree + t = Trace() + t.append(trace[i]) + trace_parts.append((subtree, t)) + last_subtree = subtree + continue + + # calculate an alignment for each subtree + alignments_per_subtree = {} + for j in range(len(pt.children)): + subtree = pt.children[j] + sub_trace = Trace() + for trace_part in trace_parts: + if subtree == trace_part[0]: + sub_trace = concatenate_traces(sub_trace, trace_part[1]) + align_result = __approximate_alignment_for_trace(subtree, a_sets, sa_sets, ea_sets, + tau_flags, sub_trace, tl, th, + parameters=parameters) + if align_result is None: + # the alignment did not terminate correctly. + return None + alignments_per_subtree[subtree] = align_result + + + # compose alignments from subtree alignments + res = [] + for trace_part in trace_parts: + activities_to_cover = trace_to_list_of_str(trace_part[1]) + activities_covered_so_far = [] + alignment = alignments_per_subtree[trace_part[0]] + while activities_to_cover != activities_covered_so_far: + move = alignment.pop(0) + res.append(move) + # if the alignment move is NOT a model move add activity to activities_covered_so_far + if move[0] != SKIP: + activities_covered_so_far.append(move[0]) + # add possible remaining alignment moves to resulting alignment, the order does not matter (parallel operator) + for subtree in alignments_per_subtree: + if len(alignments_per_subtree[subtree]) > 0: + res.extend(alignments_per_subtree[subtree]) + return res + + +def __ilp_solve(c, Aub, bub, Aeq, beq): + Aeq = np.asmatrix(Aeq).astype(np.float64) + beq = np.asmatrix(beq).transpose().astype(np.float64) + Aub = np.asmatrix(Aub).astype(np.float64) + bub = np.asmatrix(bub).transpose().astype(np.float64) + + if "cvxopt" in solver.DEFAULT_LP_SOLVER_VARIANT: + # does this part only if cvxopt is imported + from cvxopt import matrix + c = matrix([x * 1.0 for x in c]) + Aeq = matrix(Aeq) + beq = matrix(beq) + Aub = matrix(Aub) + bub = matrix(bub) + + # tries to solve the problem with LP solving + # (faster) + # if it produces a vector which elements are different from 0 or 1 + # then use the ILP solver + sol = solver.apply(c, Aub, bub, Aeq, beq, variant="cvxopt_solver_custom_align") + points = solver.get_points_from_sol(sol, variant="cvxopt_solver_custom_align") + condition_points = True + for x in points: + if x > TOL or x < 1 - TOL: + continue + condition_points = False + break + # there is at least one point in the solution that is not integer. + # in that case, it is better to apply the ILP solver instead of just rounding the points + if condition_points is False: + sol = solver.apply(c, Aub, bub, Aeq, beq, variant="cvxopt_solver_custom_align_ilp") + points = solver.get_points_from_sol(sol, variant="cvxopt_solver_custom_align_ilp") + # round the points to the nearest integer (0 or 1). + # if the ILP solver is called, these are already integer + points = [round(x) for x in points] + else: + # calls other linear solvers (pulp, ortools) with REQUIRE_ILP set to True + sol = solver.apply(c, Aub, bub, Aeq, beq, variant=solver.DEFAULT_LP_SOLVER_VARIANT, + parameters={solver.Parameters.REQUIRE_ILP: True}) + points = solver.get_points_from_sol(sol, variant=solver.DEFAULT_LP_SOLVER_VARIANT) + + return points diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/original.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/original.py new file mode 100644 index 0000000000000000000000000000000000000000..03a0189d7f7c159ff81d25a029fb848249dcc8f3 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/original.py @@ -0,0 +1,828 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import math + +from pm4py.algo.conformance.alignments.process_tree.variants.approximated.calculate_a_sa_ea_sets import initialize_a_sa_ea_tau_sets +from pm4py.algo.conformance.alignments.process_tree.variants.approximated.utilities import calculate_optimal_alignment, concatenate_traces, trace_to_list_of_str, add_fitness_and_cost_info_to_alignments, AlignmentNoneException, EfficientTree +from pm4py.objects.process_tree.utils.generic import get_process_tree_height, process_tree_to_binary_process_tree +from pm4py.objects.petri_net.utils.align_utils import SKIP +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.log.obj import Trace +from pm4py.objects.log.obj import EventLog +from typing import Union, Dict, Set, List, Tuple +from pm4py.objects.process_tree.obj import Operator +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util import exec_utils, constants +from pm4py.statistics.variants.log.get import get_variants_from_log_trace_idx +from enum import Enum +import sys +import time +from pm4py.util import variants_util + + +class Parameters(Enum): + MAX_TRACE_LENGTH = "max_trace_length" + MAX_PROCESS_TREE_HEIGHT = "max_process_tree_height" + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + PARAM_MAX_ALIGN_TIME_TRACE = "max_align_time_trace" + PARAM_MAX_ALIGN_TIME = "max_align_time" + + +def apply_from_variants_tree_string(var_list, tree_string, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log. + The tree is specified as a PTML input + + Parameters + ------------ + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + tree_string + PTML string representing the tree + parameters + Parameters of the algorithm + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + + from pm4py.objects.process_tree.importer.variants import ptml + + tree = ptml.import_tree_from_string(tree_string, parameters=parameters) + + res = apply_from_variants_list(var_list, tree, parameters=parameters) + return res + + +def apply_from_variants_list(var_list, tree, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + tree + Process tree + parameters + Parameters of the algorithm + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + + dictio_alignments = {} + log = EventLog() + + for index, varitem in enumerate(var_list): + trace = variants_util.variant_to_trace(varitem[0], parameters=parameters) + log.append(trace) + + alignments = apply(log, tree, parameters=parameters) + for index, varitem in enumerate(var_list): + dictio_alignments[varitem[0]] = alignments[index] + return dictio_alignments + + +def apply(obj: Union[Trace, EventLog], pt: ProcessTree, parameters=None): + """ + Returns approximated alignments for a process tree + + Parameters + -------------- + obj + Event log or trace (a conversion is done if necessary) + pt + Process tree + parameters + Parameters of the algorithm + + Returns + -------------- + alignments + Approximated alignments + :param obj: + :param pt: + :param parameters: + :return: + """ + if parameters is None: + parameters = {} + + max_trace_length = exec_utils.get_param_value(Parameters.MAX_TRACE_LENGTH, parameters, 1) + max_process_tree_height = exec_utils.get_param_value(Parameters.MAX_PROCESS_TREE_HEIGHT, parameters, 1) + + return __align(obj, pt, max_trace_length=max_trace_length, max_process_tree_height=max_process_tree_height, + parameters=parameters) + + +def __align(obj: Union[Trace, EventLog], pt: ProcessTree, max_trace_length: int = 1, + max_process_tree_height: int = 1, parameters=None): + """ + this function approximates alignments for a given event log or trace and a process tree + + :param obj: event log or single trace + :param pt: process tree + :param max_trace_length: specifies when the recursive splitting stops based on the trace's length + :param max_process_tree_height: specifies when the recursive splitting stops based on the tree's height + :return: + """ + assert isinstance(pt, ProcessTree) + if isinstance(obj, Trace): + e = EventLog() + e.append(obj) + obj = e + assert isinstance(obj, EventLog) + pt = process_tree_to_binary_process_tree(pt) + pt = EfficientTree(pt) + + return __approximate_alignments_for_log(obj, pt, max_trace_length, max_process_tree_height, + parameters=parameters) + + +def __approximate_alignments_for_log(log: EventLog, pt: ProcessTree, max_tl: int, max_th: int, + parameters=None): + if parameters is None: + parameters = {} + + a_sets, sa_sets, ea_sets, tau_sets = initialize_a_sa_ea_tau_sets(pt) + variants = get_variants_from_log_trace_idx(log, parameters=parameters) + inv_corr = {} + + max_align_time = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME, parameters, + sys.maxsize) + log_alignment_start_time = time.time() + + for i, var in enumerate(variants): + this_time = time.time() + + if this_time - log_alignment_start_time <= max_align_time: + parameters["trace_alignment_start_time"] = this_time + alignment = __approximate_alignment_for_trace(pt, a_sets, sa_sets, ea_sets, tau_sets, log[variants[var][0]], + max_tl, max_th, + parameters=parameters) + alignment = add_fitness_and_cost_info_to_alignments(alignment, pt, log[variants[var][0]], parameters=parameters) + else: + alignment = None + + for idx in variants[var]: + inv_corr[idx] = alignment + alignments = [] + for i in range(len(log)): + alignments.append(inv_corr[i]) + return alignments + + +def __approximate_alignment_for_trace(pt: ProcessTree, a_sets: Dict[ProcessTree, Set[str]], + sa_sets: Dict[ProcessTree, Set[str]], ea_sets: Dict[ProcessTree, Set[str]], + tau_flags: Dict[ProcessTree, bool], trace: Trace, max_tl: int, + max_th: int, parameters=None): + if parameters is None: + parameters = {} + + max_align_time_trace = exec_utils.get_param_value(Parameters.PARAM_MAX_ALIGN_TIME_TRACE, parameters, + sys.maxsize) + + start_time = parameters["trace_alignment_start_time"] + current_time = time.time() + + if current_time - start_time > max_align_time_trace: + # the alignment of the trace did not terminate in an useful time + return None + + try: + if len(trace) <= max_tl or get_process_tree_height(pt) <= max_th: + return calculate_optimal_alignment(pt, trace, parameters=parameters) + else: + if pt.operator == Operator.SEQUENCE: + return __approximate_alignment_on_sequence(pt, trace, a_sets, sa_sets, ea_sets, tau_flags, max_tl, + max_th, + parameters=parameters) + elif pt.operator == Operator.LOOP: + return __approximate_alignment_on_loop(pt, trace, a_sets, sa_sets, ea_sets, tau_flags, max_tl, max_th, + parameters=parameters) + elif pt.operator == Operator.XOR: + return __approximate_alignment_on_choice(pt, trace, a_sets, sa_sets, ea_sets, tau_flags, max_tl, max_th, + parameters=parameters) + elif pt.operator == Operator.PARALLEL: + return __approximate_alignment_on_parallel(pt, trace, a_sets, sa_sets, ea_sets, tau_flags, max_tl, + max_th, + parameters=parameters) + except AlignmentNoneException: + # alignment did not terminate correctly. return None + return None + + +def __approximate_alignment_on_choice(pt: ProcessTree, trace: Trace, a_sets: Dict[ProcessTree, Set[str]], + sa_sets: Dict[ProcessTree, Set[str]], ea_sets: Dict[ProcessTree, Set[str]], + tau_flags: Dict[ProcessTree, bool], tl: int, th: int, + parameters=None): + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + assert pt.operator == Operator.XOR + assert len(trace) > 0 + + best_suited_subtree = None + lowest_mismatches = math.inf + for subtree in pt.children: + mismatches = 0 + if len(trace) > 0: + if trace[0][activity_key] not in sa_sets[subtree]: + mismatches += 1 + if trace[-1][activity_key] not in ea_sets[subtree]: + mismatches += 1 + if len(trace) > 2: + for a in trace[1:-1]: + if a[activity_key] not in a_sets[subtree]: + mismatches += 1 + else: + if not tau_flags[subtree] and len(sa_sets[subtree].intersection(ea_sets[subtree])) != 0: + mismatches += 1 + elif not tau_flags[subtree] and len(sa_sets[subtree].intersection(ea_sets[subtree])) == 0: + mismatches += 2 + if mismatches < lowest_mismatches: + best_suited_subtree = subtree + lowest_mismatches = mismatches + return __approximate_alignment_for_trace(best_suited_subtree, a_sets, sa_sets, ea_sets, tau_flags, trace, tl, th, + parameters=parameters) + + +def __approximate_alignment_on_loop(pt: ProcessTree, trace: Trace, a_sets: Dict[ProcessTree, Set[str]], + sa_sets: Dict[ProcessTree, Set[str]], ea_sets: Dict[ProcessTree, Set[str]], + tau_flags: Dict[ProcessTree, bool], tl: int, th: int, + parameters=None): + if parameters is None: + parameters = {} + + from pulp import lpSum, LpVariable, LpProblem, LpMinimize + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + assert pt.operator == Operator.LOOP + assert len(pt.children) == 2 + assert len(trace) > 0 + + ilp = LpProblem(sense=LpMinimize) + + # x_i_j = 1 <=> assigns activity i to subtree j + x_variables = {} + + # t_i_j = 1 <=> inserts a tau at position i and assigns it to subtree j + t_variables = {} + + # s_i_j = 1 <=> activity i is a start activity in the current sub-trace assigned to subtree j + s_variables = {} + + # e_i_j = 1 <=> activity i is an end activity in the current sub-trace assigned to subtree j + e_variables = {} + + # v_i_j = 1 <=> activity i is neither a start nor end-activity in the current sub-trace assigned to subtree j + v_variables = {} + + # auxiliary variables + # p_i_j = 1 <=> previous activity i-1 is assigned to the other subtree or t_1_other-subtree is 1 + p_variables = {} + + # n_i_j = 1 <=> next activity i+1 is assigned to the other subtree or t_1_other-subtree is 1 + n_variables = {} + + t_costs = {} + s_costs = {} + e_costs = {} + v_costs = {} + + for i, a in enumerate(trace): + x_variables[i] = {} + s_variables[i] = {} + s_costs[i] = {} + e_variables[i] = {} + e_costs[i] = {} + v_variables[i] = {} + v_costs[i] = {} + p_variables[i] = {} + n_variables[i] = {} + for j, subtree in enumerate(pt.children): + x_variables[i][j] = LpVariable('x_' + str(i) + '_' + str(j), cat='Binary') + + s_variables[i][j] = LpVariable('s_' + str(i) + '_' + str(j), cat='Binary') + s_costs[i][j] = 0 if a[activity_key] in sa_sets[subtree] else 1 + + e_variables[i][j] = LpVariable('e_' + str(i) + '_' + str(j), cat='Binary') + e_costs[i][j] = 0 if a[activity_key] in ea_sets[subtree] else 1 + + v_variables[i][j] = LpVariable('v_' + str(i) + '_' + str(j), cat='Binary') + v_costs[i][j] = 0 if a[activity_key] in a_sets[subtree] else 1 + + p_variables[i][j] = LpVariable('p_' + str(i) + '_' + str(j), cat='Binary') + n_variables[i][j] = LpVariable('n_' + str(i) + '_' + str(j), cat='Binary') + + for i in range(len(trace) + 1): + t_variables[i] = {} + t_costs[i] = {} + for j, subtree in enumerate(pt.children): + t_variables[i][j] = LpVariable('t_' + str(i) + '_' + str(j), cat='Binary') + if tau_flags[subtree]: + t_costs[i][j] = -0.00001 # favour to add a cut if possible over not putting a cut + else: + if len(sa_sets[subtree].intersection(ea_sets[subtree])) != 0: + t_costs[i][j] = 1 + else: + t_costs[i][j] = 2 + + # objective function + ilp += lpSum( + [s_variables[i][j] * s_costs[i][j] for i in range(len(trace)) for j in range(len(pt.children))] + + [e_variables[i][j] * e_costs[i][j] for i in range(len(trace)) for j in range(len(pt.children))] + + [v_variables[i][j] * v_costs[i][j] for i in range(len(trace)) for j in range(len(pt.children))] + + [t_variables[i][j] * t_costs[i][j] for i in range(len(trace) + 1) for j in + range(len(pt.children))]), "objective_function" + + # constraints + # universe j {0,1} + # universe i for t_i_j variables {0,...,len(trace)} + # universe i else {0,...,len(trace)-1} + + # first tau can never be assigned to the 2nd subtree + ilp += t_variables[0][1] == 0 + + # last tau can never be assigned to the 2nd subtree + ilp += t_variables[len(trace)][1] == 0 + + # if first/last tau is not used --> first/last activity is assigned to 1st subtree + ilp += 1 - t_variables[0][0] <= x_variables[0][0] + ilp += 1 - t_variables[len(trace)][0] <= x_variables[len(trace) - 1][0] + + for i in range(len(trace)): + # every activity is assigned to one subtree + ilp += lpSum([x_variables[i][j] * 1 for j in range(len(pt.children))]) == 1 + + # start/end/intermediate-activity at position i can only be assigned to one subtree + ilp += lpSum([s_variables[i][j] * 1 for j in range(len(pt.children))]) <= 1 + ilp += lpSum([e_variables[i][j] * 1 for j in range(len(pt.children))]) <= 1 + ilp += lpSum([v_variables[i][j] * 1 for j in range(len(pt.children))]) <= 1 + + for i in range(len(trace) + 1): + # max one tau is used per index + ilp += lpSum([t_variables[i][j] for j in range(2)]) <= 1 + + # if tau is used and hence, assigned to a subtree, the surrounding activities are assigned to the other subtree + for i in range(1, len(trace)): + # if tau at position i is assigned to 1st subtree, the previous activity is assigned to 2nd subtree + ilp += t_variables[i][0] <= x_variables[i - 1][1] + # if tau at position i is assigned to 1st subtree, the previous activity is assigned to 2nd subtree + ilp += t_variables[i][1] <= x_variables[i - 1][0] + for i in range(len(trace)): + # if tau at position i is assigned to 1st subtree, the next activity is assigned to 2nd subtree + ilp += t_variables[i][0] <= x_variables[i][1] + # if tau at position i is assigned to 2nd subtree, the next activity is assigned to 1st subtree + ilp += t_variables[i][1] <= x_variables[i][0] + # if last tau is used and assigned to 1st subtree (assigning it to the 2nd subtree is already forbidden by another + # constraint) --> last activity must be assigned to 2nd subtree + ilp += t_variables[len(trace)][0] <= x_variables[len(trace) - 1][1] + + # define auxiliary variables n: n_i_1 = 1 <=> next activity i+1 is assigned to 2nd subtree or t_i+1_2 = 1 + for i in range(len(trace) - 1): + ilp += n_variables[i][0] <= x_variables[i + 1][1] + t_variables[i + 1][1] + ilp += n_variables[i][0] >= x_variables[i + 1][1] + ilp += n_variables[i][0] >= t_variables[i + 1][1] + + ilp += n_variables[i][1] <= x_variables[i + 1][0] + t_variables[i + 1][0] + ilp += n_variables[i][1] >= x_variables[i + 1][0] + ilp += n_variables[i][1] >= t_variables[i + 1][0] + + ilp += t_variables[len(trace)][1] <= n_variables[len(trace) - 1][0] + ilp += t_variables[len(trace)][0] <= n_variables[len(trace) - 1][1] + + # define e_i_j variables + for i in range(len(trace)): + for j in range(2): + ilp += e_variables[i][j] <= n_variables[i][j] + ilp += e_variables[i][j] <= x_variables[i][j] + ilp += e_variables[i][j] >= n_variables[i][j] + x_variables[i][j] - 1 + + # define auxiliary variables p: p_i_1 = 1 <=> previous activity i-1 is assigned to 2nd subtree or t_i-1_2 = 1 + ilp += t_variables[0][1] <= p_variables[0][0] + ilp += p_variables[0][1] <= t_variables[0][0] + + for i in range(1, len(trace)): + ilp += p_variables[i][0] <= t_variables[i][1] + x_variables[i - 1][1] + ilp += p_variables[i][0] >= t_variables[i][1] + ilp += p_variables[i][0] >= x_variables[i - 1][1] + + ilp += p_variables[i][1] <= t_variables[i][0] + x_variables[i - 1][0] + ilp += p_variables[i][1] >= t_variables[i][0] + ilp += p_variables[i][1] >= x_variables[i - 1][0] + + # define s_i_j variables + for i in range(len(trace)): + for j in range(2): + ilp += s_variables[i][j] >= p_variables[i][j] + x_variables[i][j] - 1 + ilp += s_variables[i][j] <= p_variables[i][j] + ilp += s_variables[i][j] <= p_variables[i][j] + ilp += 1 - t_variables[0][0] <= s_variables[0][0] + + # define v_i_j variables + for i in range(len(trace)): + for j in range(2): + ilp += v_variables[i][j] >= 1 - s_variables[i][j] + 1 - e_variables[i][j] + x_variables[i][j] - 2 + ilp += v_variables[i][j] <= x_variables[i][j] + ilp += v_variables[i][j] <= 1 - e_variables[i][j] + ilp += v_variables[i][j] <= 1 - s_variables[i][j] + + status = ilp.solve() + assert status == 1 + + alignments_to_calculate = [] + sub_trace = Trace() + current_subtree_idx = 0 + for i in range(len(trace)): + for j in range(2): + if t_variables[i][j].varValue: + if i == 0: + # first tau can be only assigned to first subtree + assert j == 0 + alignments_to_calculate.append((pt.children[j], Trace())) + current_subtree_idx = 1 + else: + alignments_to_calculate.append((pt.children[current_subtree_idx], sub_trace)) + alignments_to_calculate.append((pt.children[j], Trace())) + sub_trace = Trace() + for j in range(2): + if x_variables[i][j].varValue: + if j == current_subtree_idx: + sub_trace.append(trace[i]) + else: + alignments_to_calculate.append((pt.children[current_subtree_idx], sub_trace)) + sub_trace = Trace() + sub_trace.append(trace[i]) + current_subtree_idx = j + if len(sub_trace) > 0: + alignments_to_calculate.append((pt.children[current_subtree_idx], sub_trace)) + if t_variables[len(trace)][0].varValue: + alignments_to_calculate.append((pt.children[0], Trace())) + + res = [] + for subtree, sub_trace in alignments_to_calculate: + align_result = __approximate_alignment_for_trace(subtree, a_sets, sa_sets, ea_sets, tau_flags, sub_trace, tl, th, + parameters=parameters) + if align_result is None: + # the alignment did not terminate correctly. + return None + res.extend(align_result) + return res + + +def __approximate_alignment_on_sequence(pt: ProcessTree, trace: Trace, a_sets: Dict[ProcessTree, Set[str]], + sa_sets: Dict[ProcessTree, Set[str]], ea_sets: Dict[ProcessTree, Set[str]], + tau_flags: Dict[ProcessTree, bool], tl: int, th: int, + parameters=None): + if parameters is None: + parameters = {} + + from pulp import lpSum, LpVariable, LpProblem, LpMinimize + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + assert pt.operator == Operator.SEQUENCE + assert len(pt.children) > 0 + assert len(trace) > 0 + + ilp = LpProblem(sense=LpMinimize) + + # x_i_j = 1 <=> assigns activity i to subtree j + x_variables = {} + + # s_i_j = 1 <=> activity i is a start activity in the current sub-trace assigned to subtree j + s_variables = {} + + # e_i_j = 1 <=> activity i is an end activity in the current sub-trace assigned to subtree j + e_variables = {} + + # auxiliary u_j <=> u_j=1 if an activity is assigned to subtree j + u_variables = {} + + # v_i_j = 1 <=> activity i is neither a start nor end-activity in the current sub-trace assigned to subtree j + v_variables = {} + + s_costs = {} + e_costs = {} + u_costs = {} + v_costs = {} + + # trace + for i, a in enumerate(trace): + x_variables[i] = {} + s_variables[i] = {} + s_costs[i] = {} + e_variables[i] = {} + e_costs[i] = {} + v_variables[i] = {} + v_costs[i] = {} + + for j, subtree in enumerate(pt.children): + x_variables[i][j] = LpVariable('x_' + str(i) + '_' + str(j), cat='Binary') + + s_variables[i][j] = LpVariable('s_' + str(i) + '_' + str(j), cat='Binary') + s_costs[i][j] = 0 if a[activity_key] in sa_sets[subtree] else 1 + + e_variables[i][j] = LpVariable('e_' + str(i) + '_' + str(j), cat='Binary') + e_costs[i][j] = 0 if a[activity_key] in ea_sets[subtree] else 1 + + v_variables[i][j] = LpVariable('v_' + str(i) + '_' + str(j), cat='Binary') + v_costs[i][j] = 0 if a[activity_key] in a_sets[subtree] else 1 + + for j in range(len(pt.children)): + u_variables[j] = LpVariable('u_' + str(j), cat='Binary') + # define costs to not assign anything to subtree j + if tau_flags[pt.children[j]]: + u_costs[j] = 0 + elif sa_sets[pt.children[j]] & ea_sets[pt.children[j]]: + # intersection of start-activities and end-activities is not empty + u_costs[j] = 1 + else: + # intersection of start-activities and end-activities is empty + u_costs[j] = 2 + + # objective function + ilp += lpSum( + [v_variables[i][j] * v_costs[i][j] for i in range(len(trace)) for j in range(len(pt.children))] + + [s_variables[i][j] * s_costs[i][j] for i in range(len(trace)) for j in range(len(pt.children))] + + [e_variables[i][j] * e_costs[i][j] for i in range(len(trace)) for j in range(len(pt.children))] + + [(1 - u_variables[j]) * u_costs[j] for j in range(len(pt.children))]), "objective_function" + + # constraints + for i in range(len(trace)): + # every activity is assigned to one subtree + ilp += lpSum([x_variables[i][j] * 1 for j in range(len(pt.children))]) == 1 + + for j in range(len(pt.children)): + # first activity is start activity + ilp += x_variables[0][j] <= s_variables[0][j] + # last activity is end-activity + ilp += x_variables[len(trace) - 1][j] <= e_variables[len(trace) - 1][j] + + # define s_i_j variables + for i in range(1, len(trace)): + for j in range(len(pt.children)): + ilp += s_variables[i][j] >= x_variables[i][j] + 1 - x_variables[i - 1][j] - 1 + ilp += s_variables[i][j] <= x_variables[i][j] + ilp += s_variables[i][j] <= 1 - x_variables[i - 1][j] + for i in range(len(trace)): + # activity can be only for one subtree a start-activity + ilp += lpSum(s_variables[i][j] for j in range(len(pt.children))) <= 1 + + # define e_i_j variables + for i in range(len(trace) - 1): + for j in range(len(pt.children)): + ilp += e_variables[i][j] >= x_variables[i][j] + 1 - x_variables[i + 1][j] - 1 + ilp += e_variables[i][j] <= x_variables[i][j] + ilp += e_variables[i][j] <= 1 - x_variables[i + 1][j] + for i in range(len(trace)): + # activity can be only for one subtree an end-activity + ilp += lpSum(e_variables[i][j] for j in range(len(pt.children))) <= 1 + + # constraint - preserving sequence when assigning activities to subtrees + for i in range(len(trace) - 1): + for j in range(len(pt.children)): + ilp += lpSum(x_variables[i + 1][k] for k in range(j, len(pt.children))) >= x_variables[i][j] + + for j in range(len(pt.children)): + for i in range(len(trace)): + # define u_j variables + ilp += u_variables[j] >= x_variables[i][j] + + # if u_j variable = 1 ==> a start activity must exist + ilp += u_variables[j] <= lpSum(s_variables[i][j] for i in range(len(trace))) + # if u_j variable = 1 ==> an end activity must exist + ilp += u_variables[j] <= lpSum(e_variables[i][j] for i in range(len(trace))) + + # define v_i_j variables + for i in range(len(trace)): + for j in range(2): + ilp += v_variables[i][j] >= 1 - s_variables[i][j] + 1 - e_variables[i][j] + x_variables[i][j] - 2 + ilp += v_variables[i][j] <= x_variables[i][j] + ilp += v_variables[i][j] <= 1 - e_variables[i][j] + ilp += v_variables[i][j] <= 1 - s_variables[i][j] + + status = ilp.solve() + assert status == 1 + + alignments_to_calculate = [] + for j in range(len(pt.children)): + sub_trace = Trace() + for i in range(len(trace)): + if x_variables[i][j].varValue == 1: + sub_trace.append(trace[i]) + alignments_to_calculate.append((pt.children[j], sub_trace)) + # calculate and compose alignments + res = [] + for subtree, sub_trace in alignments_to_calculate: + align_result = __approximate_alignment_for_trace(subtree, a_sets, sa_sets, ea_sets, tau_flags, sub_trace, tl, th, + parameters=parameters) + if align_result is None: + # the alignment did not terminate correctly. + return None + res.extend(align_result) + return res + + +def __approximate_alignment_on_parallel(pt: ProcessTree, trace: Trace, a_sets: Dict[ProcessTree, Set[str]], + sa_sets: Dict[ProcessTree, Set[str]], ea_sets: Dict[ProcessTree, Set[str]], + tau_flags: Dict[ProcessTree, bool], tl: int, th: int, + parameters=None): + if parameters is None: + parameters = {} + + from pulp import lpSum, LpVariable, LpProblem, LpMinimize + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + assert pt.operator == Operator.PARALLEL + assert len(pt.children) > 0 + assert len(trace) > 0 + + ilp = LpProblem(sense=LpMinimize) + + # x_i_j = 1 <=> assigns activity i to subtree j + x_variables = {} + + # s_i_j = 1 <=> activity i is a start activity in the current sub-trace assigned to subtree j + s_variables = {} + + # e_i_j = 1 <=> activity i is an end activity in the current sub-trace assigned to subtree j + e_variables = {} + + # auxiliary u_j <=> u_j=1 if an activity is assigned to subtree j + u_variables = {} + + # v_i_j = 1 <=> activity i is neither a start nor end-activity in the current sub-trace assigned to subtree j + v_variables = {} + + s_costs = {} + e_costs = {} + u_costs = {} + v_costs = {} + + for i, a in enumerate(trace): + x_variables[i] = {} + s_variables[i] = {} + s_costs[i] = {} + e_variables[i] = {} + e_costs[i] = {} + v_variables[i] = {} + v_costs[i] = {} + + for j, subtree in enumerate(pt.children): + x_variables[i][j] = LpVariable('x_' + str(i) + '_' + str(j), cat='Binary') + + s_variables[i][j] = LpVariable('s_' + str(i) + '_' + str(j), cat='Binary') + s_costs[i][j] = 0 if a[activity_key] in sa_sets[subtree] else 1 + + e_variables[i][j] = LpVariable('e_' + str(i) + '_' + str(j), cat='Binary') + e_costs[i][j] = 0 if a[activity_key] in ea_sets[subtree] else 1 + + v_variables[i][j] = LpVariable('v_' + str(i) + '_' + str(j), cat='Binary') + v_costs[i][j] = 0 if a[activity_key] in a_sets[subtree] else 1 + + for j in range(len(pt.children)): + u_variables[j] = LpVariable('u_' + str(j), cat='Binary') + # define costs to not assign anything to subtree j + if tau_flags[pt.children[j]]: + u_costs[j] = 0 + elif sa_sets[pt.children[j]] & ea_sets[pt.children[j]]: + # intersection of start-activities and end-activities is not empty + u_costs[j] = 1 + else: + # intersection of start-activities and end-activities is empty + u_costs[j] = 2 + + # objective function + ilp += lpSum( + [v_variables[i][j] * v_costs[i][j] for i in range(len(trace)) for j in range(len(pt.children))] + + [s_variables[i][j] * s_costs[i][j] for i in range(len(trace)) for j in range(len(pt.children))] + + [e_variables[i][j] * e_costs[i][j] for i in range(len(trace)) for j in range(len(pt.children))] + + [(1 - u_variables[j]) * u_costs[j] for j in range(len(pt.children))]), "objective_function" + + # constraints + for i in range(len(trace)): + # every activity is assigned to one subtree + ilp += lpSum([x_variables[i][j] * 1 for j in range(len(pt.children))]) == 1 + + for j in range(len(pt.children)): + # first activity is a start activity + ilp += x_variables[0][j] <= s_variables[0][j] + # last activity is an end-activity + ilp += x_variables[len(trace) - 1][j] <= e_variables[len(trace) - 1][j] + + # define s_i_j variables + for i in range(len(trace)): + for j in range(len(pt.children)): + ilp += s_variables[i][j] <= x_variables[i][j] + for k in range(i): + ilp += s_variables[i][j] <= 1 - x_variables[k][j] + # activity can be only a start-activity for one subtree + ilp += lpSum(s_variables[i][j] for j in range(len(pt.children))) <= 1 + + # define e_i_j variables + for i in range(len(trace)): + for j in range(len(pt.children)): + ilp += e_variables[i][j] <= x_variables[i][j] + for k in range(i + 1, len(trace)): + ilp += e_variables[i][j] <= 1 - x_variables[k][j] + # activity can be only an end-activity for one subtree + ilp += lpSum(e_variables[i][j] for j in range(len(pt.children))) <= 1 + + for j in range(len(pt.children)): + for i in range(len(trace)): + # define u_j variables + ilp += u_variables[j] >= x_variables[i][j] + # if u_j variable = 1 ==> a start activity must exist + ilp += u_variables[j] <= lpSum(s_variables[i][j] for i in range(len(trace))) + # if u_j variable = 1 ==> an end activity must exist + ilp += u_variables[j] <= lpSum(e_variables[i][j] for i in range(len(trace))) + + # define v_i_j variables + for i in range(len(trace)): + for j in range(2): + ilp += v_variables[i][j] >= 1 - s_variables[i][j] + 1 - e_variables[i][j] + x_variables[i][j] - 2 + ilp += v_variables[i][j] <= x_variables[i][j] + ilp += v_variables[i][j] <= 1 - e_variables[i][j] + ilp += v_variables[i][j] <= 1 - s_variables[i][j] + + status = ilp.solve() + assert status == 1 + + # trace_parts list contains trace parts mapped onto the determined subtree + trace_parts = [] + last_subtree = None + for i in range(len(trace)): + for j in range(len(pt.children)): + subtree = pt.children[j] + if x_variables[i][j].varValue == 1: + if last_subtree and subtree == last_subtree: + trace_parts[-1][1].append(trace[i]) + else: + assert last_subtree is None or subtree != last_subtree + t = Trace() + t.append(trace[i]) + trace_parts.append((subtree, t)) + last_subtree = subtree + continue + + # calculate an alignment for each subtree + alignments_per_subtree = {} + for j in range(len(pt.children)): + subtree = pt.children[j] + sub_trace = Trace() + for trace_part in trace_parts: + if subtree == trace_part[0]: + sub_trace = concatenate_traces(sub_trace, trace_part[1]) + align_result = __approximate_alignment_for_trace(subtree, a_sets, sa_sets, ea_sets, + tau_flags, sub_trace, tl, th, + parameters=parameters) + if align_result is None: + # the alignment did not terminate correctly. + return None + alignments_per_subtree[subtree] = align_result + # compose alignments from subtree alignments + res = [] + for trace_part in trace_parts: + activities_to_cover = trace_to_list_of_str(trace_part[1]) + activities_covered_so_far = [] + alignment = alignments_per_subtree[trace_part[0]] + while activities_to_cover != activities_covered_so_far: + move = alignment.pop(0) + res.append(move) + # if the alignment move is NOT a model move add activity to activities_covered_so_far + if move[0] != SKIP: + activities_covered_so_far.append(move[0]) + # add possible remaining alignment moves to resulting alignment, the order does not matter (parallel operator) + for subtree in alignments_per_subtree: + if len(alignments_per_subtree[subtree]) > 0: + res.extend(alignments_per_subtree[subtree]) + return res diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/utilities.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/utilities.py new file mode 100644 index 0000000000000000000000000000000000000000..6dbcc03e039068798a9872c534ee8dc7e15aaaf9 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/approximated/utilities.py @@ -0,0 +1,170 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import copy +from enum import Enum +from typing import Set, List + +from pm4py.algo.conformance.alignments.petri_net.algorithm import Parameters as AlignParameters +from pm4py.algo.conformance.alignments.petri_net.algorithm import Variants +from pm4py.algo.conformance.alignments.petri_net.algorithm import apply as get_alignment +from pm4py.algo.conformance.alignments.petri_net.variants.state_equation_a_star import get_best_worst_cost +from pm4py.objects.conversion.process_tree import converter as pt_converter +from pm4py.objects.log.obj import Trace, Event +from pm4py.objects.petri_net.utils.align_utils import SKIP, STD_MODEL_LOG_MOVE_COST +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.util import exec_utils +from pm4py.util.xes_constants import DEFAULT_NAME_KEY + + +class Parameters(Enum): + CLASSIC_ALIGNMENTS_VARIANT = "classic_alignments_variant" + CONVERSION_VERSION = "petri_conversion_version" + + +class AlignmentNoneException(Exception): + # exception that is raise when the alignment is None + # (failed due to time constraints) + pass + + +class EfficientTree(ProcessTree): + # extend the parent class to replace the __eq__ and __hash__ method + def __init__(self, tree): + i = 0 + while i < len(tree.children): + tree.children[i] = EfficientTree(tree.children[i]) + tree.children[i].parent = self + i = i + 1 + ProcessTree.__init__(self, operator=tree.operator, parent=tree.parent, children=tree.children, label=tree.label) + + def __eq__(self, other): + return id(self) == id(other) + + def __hash__(self): + return id(self) + + +def concatenate_traces(t1: Trace, t2: Trace) -> Trace: + for e in t2: + t1.append(e) + return t1 + + +def trace_to_list_of_str(t: Trace) -> List[str]: + return [e[DEFAULT_NAME_KEY] for e in t] + + +def list_of_str_to_trace(activities: List[str]) -> Trace: + t = Trace() + for a in activities: + e = Event() + e["concept:name"] = a + t.append(e) + return t + + +def get_activity_labels_from_trace(trace: Trace) -> Set[str]: + labels = set() + for a in trace: + labels.add(a[DEFAULT_NAME_KEY]) + return labels + + +def apply_standard_cost_function_to_alignment(align: List) -> int: + res = 0 + if align is not None: + # do not add the moves, if the alignment did not succeed + # due to time constraints + for move in align: + if move[0] == SKIP and move[1] is not None: + # visible model move + res += 1 + elif move[0] != SKIP and move[1] == SKIP: + # log move + res += 1 + return res + + +def empty_sequence_accepted(pt: ProcessTree) -> bool: + alignment = calculate_optimal_alignment(pt, Trace()) + return alignment["cost"] < STD_MODEL_LOG_MOVE_COST + + +def calculate_optimal_alignment(pt: ProcessTree, trace: Trace, parameters=None): + if parameters is None: + parameters = {} + align_variant = exec_utils.get_param_value(Parameters.CLASSIC_ALIGNMENTS_VARIANT, parameters, + Variants.VERSION_STATE_EQUATION_A_STAR) + conversion_version = exec_utils.get_param_value(Parameters.CONVERSION_VERSION, parameters, + pt_converter.Variants.TO_PETRI_NET_TRANSITION_BORDERED) + + parent = pt.parent + pt.parent = None + net, im, fm = pt_converter.apply(pt, variant=conversion_version) + + # in this way, also the other parameters are passed to alignments + alignment_parameters = copy(parameters) + alignment_parameters[AlignParameters.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE] = True + + alignment = get_alignment(trace, net, im, fm, variant=align_variant, + parameters=alignment_parameters) + + pt.parent = parent + res = [] + + # if the alignment has terminated prematurely due to time constraints, raise an Exception + if alignment is None: + raise AlignmentNoneException("alignment terminated prematurely") + + if conversion_version == pt_converter.Variants.TO_PETRI_NET_TRANSITION_BORDERED or conversion_version == pt_converter.Variants.TO_PETRI_NET_TRANSITION_BORDERED.value: + # remove invisible model moves from alignment steps that do not belong to a silent model move in the process tree + # this is possible only if the TO_PETRI_NET_TRANSITION_BORDERED variant is used + for a in alignment["alignment"]: + if not (a[0][0] == SKIP and not a[0][1].isdigit()): + res.append(a[1]) + else: + for a in alignment["alignment"]: + res.append(a[1]) + + return res + + +def add_fitness_and_cost_info_to_alignments(alignment: List, pt: ProcessTree, trace: Trace, parameters=None) -> List: + if parameters is None: + parameters = {} + + def calculate_get_best_worst_cost(tree: ProcessTree, conversion_version) -> int: + net, im, fm = pt_converter.apply(tree, variant=conversion_version) + return get_best_worst_cost(net, im, fm) + + conversion_version = exec_utils.get_param_value(Parameters.CONVERSION_VERSION, parameters, + pt_converter.Variants.TO_PETRI_NET_TRANSITION_BORDERED) + if alignment is not None: + # if the alignment is not None, return a nice dictionary with the alignment of the trace + cost = apply_standard_cost_function_to_alignment(alignment) + if cost == 0: + fitness = 1 + else: + fitness = 1 - cost / (len(trace) + calculate_get_best_worst_cost(pt, conversion_version)) + res = {"alignment": alignment, + "cost": cost, + "fitness": fitness} + else: + # otherwise, return None + return None + + return res diff --git a/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/search_graph_pt.py b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/search_graph_pt.py new file mode 100644 index 0000000000000000000000000000000000000000..9614676be0c68da69042498bf8f0ee19fbff2d90 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/alignments/process_tree/variants/search_graph_pt.py @@ -0,0 +1,403 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +import heapq +import importlib.util +from enum import Enum +from typing import List + +import pandas as pd + +from pm4py.algo.conformance.alignments.process_tree.util import search_graph_pt_replay_semantics as pt_sem +from pm4py.objects.petri_net.utils import align_utils +from pm4py.objects.process_tree.obj import Operator +from pm4py.objects.process_tree.utils import generic as pt_util +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.log.obj import EventLog, Trace +from pm4py.util import typing +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + CORES = 'cores' + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + SHOW_PROGRESS_BAR = "show_progress_bar" + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +class SGASearchState: + def __init__(self, costs: float, index: int, state: pt_sem.ProcessTreeState, + leaves: Optional[List[ProcessTree]] = None, + parent: Any = None, children: List[Any] = None): + self.costs = costs # costs of the solution of this state + self.index = index # index 'to be explained' + self.state = state # state in the model + self.leaves = leaves if leaves is not None else list() # leaves that 'got you here' + self.parent = parent # parent search state + self.children = children if children is not None else set() # successor search states + self.path = [] + + def __lt__(self, other): + if self.costs < other.costs: + return True + elif self.costs == other.costs: + return self.index > other.index + else: + return False + + def __str__(self): + return '(' + str(self.costs) + ',' + str(self.index) + ',' + str(self.state) + ')' + + +def _construct_result_dictionary(state: SGASearchState, variant: List[str]): + result = dict() + result['cost'] = state.costs + alignment = list() + current_state = state + parent_state = state.parent + while parent_state is not None: + if len(current_state.leaves) > 0: + if current_state.index == len(variant): + leaf_labels = list(reversed(list(map(lambda o: o.label, current_state.leaves)))) + if variant[-1] in leaf_labels: + i = leaf_labels.index(variant[-1]) + leaves_reversed = list(reversed(current_state.leaves)) + for j in range(len(leaves_reversed)): + if i == j: + alignment.append((variant[-1], leaves_reversed[j])) + else: + alignment.append((align_utils.SKIP, leaves_reversed[j])) + else: + if current_state.costs - len(current_state.leaves) > parent_state.costs: + alignment.append((variant[parent_state.index], align_utils.SKIP)) + for leaf in reversed(current_state.leaves): + alignment.append((align_utils.SKIP, leaf)) + else: + alignment.append((variant[parent_state.index], current_state.leaves[len(current_state.leaves) - 1])) + leaves_reversed = list(reversed(current_state.leaves))[1:] + for n in leaves_reversed: + alignment.append((align_utils.SKIP, n)) + else: + alignment.append((variant[parent_state.index], align_utils.SKIP)) + parent_state = parent_state.parent + current_state = current_state.parent + result['alignment'] = list(reversed(alignment)) + result['optimal'] = True + result['state'] = state + return result + + +def _is_final_tree_state(state, pt): + return state[(id(pt), pt)] == ProcessTree.OperatorState.CLOSED + + +def _update_costs_recursive(delta, states): + for state in states: + state.costs = state.costs - delta + _update_costs_recursive(delta, state.children) + + +def _check_if_state_exists_and_update(search_state: SGASearchState, collection): + match = False + for alt in collection: + if alt.index == search_state.index and alt.state == search_state.state: + match = True + if search_state.costs < alt.costs: + _update_costs_recursive(alt.costs - search_state.costs, alt.children) + alt.costs = search_state.costs + alt.parent = search_state.parent + alt.leaves = search_state.leaves + return match + + +def _add_new_state(state, parent, open, closed): + if not _check_if_state_exists_and_update(state, closed): + if not _check_if_state_exists_and_update(state, open): + parent.children.add(state) + heapq.heappush(open, state) + else: + heapq.heapify(open) + return open, closed + + +def _obtain_leaves_from_state_path(path, include_tau=False): + return list(map(lambda t: t[0], list( + filter(lambda t: t[0].operator is None and t[0].label is not None and t[1] == ProcessTree.OperatorState.OPEN, + path)))) if not include_tau else list(map(lambda t: t[0], list( + filter(lambda t: t[0].operator is None and t[1] == ProcessTree.OperatorState.OPEN, + path)))) + + +def _need_log_move(old_state, new_state, path) -> bool: + if len(_obtain_leaves_from_state_path(path, include_tau=True)) > 0: + return True + choices = list(filter(lambda o: pt_util.is_any_operator_of(o[1], [Operator.XOR, Operator.LOOP]), old_state.keys())) + for choice in choices: + choice = choice[1] + if pt_util.is_operator(choice, Operator.XOR): + if (pt_util.is_in_state(choice, ProcessTree.OperatorState.FUTURE, old_state) or pt_util.is_in_state(choice, + ProcessTree.OperatorState.CLOSED, + old_state)) and \ + old_state[(id(choice), choice)] != new_state[(id(choice), choice)]: + return True + elif pt_util.is_operator(choice, Operator.LOOP): + for loop_child in choice.children: + if (pt_util.is_in_state(loop_child, ProcessTree.OperatorState.FUTURE, + old_state) or pt_util.is_in_state(loop_child, + ProcessTree.OperatorState.CLOSED, + old_state)) and \ + old_state[(id(loop_child), loop_child)] != new_state[(id(loop_child), loop_child)]: + return True + return False + + +def align_variant(variant, tree_leaf_set, pt): + lmcf = [1] * len(variant) + initial_search_state = SGASearchState(0, 0, pt_sem.get_initial_state(pt)) + closed_set = set() + open_set = [initial_search_state] + heapq.heapify(open_set) + count = 0 + while not len(open_set) == 0: + count += 1 + sga_state = heapq.heappop(open_set) + if _is_final_tree_state(sga_state.state, pt) and sga_state.index == len(variant): + return _construct_result_dictionary(sga_state, variant) + else: + closed_set.add(sga_state) + if sga_state.index < len(lmcf): + candidates = [t for (i,t) in tree_leaf_set if + t.label is not None and t.label == variant[sga_state.index]] + need_log_move = len(candidates) == 0 + for leaf in candidates: + path, new_state = pt_sem.shortest_path_to_enable(leaf, copy.copy(sga_state.state)) + need_log_move = True if path is None else need_log_move + if path is not None: + model_moves = _obtain_leaves_from_state_path(path) + need_log_move = need_log_move if need_log_move else _need_log_move(sga_state.state, new_state, + path) + sync_path, new_state = pt_sem.shortest_path_to_close(leaf, new_state) + path.extend(sync_path) + leaves = _obtain_leaves_from_state_path(path, include_tau=True) + new_state = SGASearchState(sga_state.costs + len(model_moves), + sga_state.index + 1, + new_state, leaves=leaves, parent=sga_state) + new_state.path = tuple(path) + open_set, closed_set = _add_new_state( + new_state, sga_state, + open_set, + closed_set) + if need_log_move: + open_set, closed_set = _add_new_state( + SGASearchState(sga_state.costs + lmcf[sga_state.index], + sga_state.index + 1, + copy.copy(sga_state.state), parent=sga_state), sga_state, open_set, closed_set) + else: + # FINISH + path, new_state = pt_sem.shortest_path_to_close(pt, sga_state.state) + model_moves = _obtain_leaves_from_state_path(path, include_tau=False) + sga_state.state = new_state + sga_state.costs = sga_state.costs + len(model_moves) + sga_state.leaves.extend(_obtain_leaves_from_state_path(path, include_tau=True)) + heapq.heappush(open_set, sga_state) + + +def _apply_variant(variant, tree, leaves, bwc, parameters=None): + alignment_obj = align_variant(variant, leaves, tree) + ltrace_bwc = len(variant) + bwc + alignment_obj["fitness"] = 1.0 - alignment_obj["cost"] / ltrace_bwc if ltrace_bwc > 0 else 0.0 + return alignment_obj + + +def apply_variant(variant, tree, parameters=None): + leaves = frozenset(pt_util.get_leaves_as_tuples(tree)) + return _apply_variant(variant, tree, leaves, align_variant([], leaves, tree)["cost"], parameters) + + +def _construct_progress_bar(progress_length, parameters): + if exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) and importlib.util.find_spec("tqdm"): + if progress_length > 1: + from tqdm.auto import tqdm + return tqdm(total=progress_length, desc="aligning log, completed variants :: ") + return None + + +def _destroy_progress_bar(progress): + if progress is not None: + progress.close() + del progress + + +def apply_from_variants_list(var_list, tree, parameters=None): + """ + Apply the alignments from the specification of a list of variants in the log + + Parameters + ------------- + var_list + List of variants (for each item, the first entry is the variant itself, the second entry may be the number of cases) + tree + Process tree + parameters + Parameters of the algorithm + + Returns + -------------- + dictio_alignments + Dictionary that assigns to each variant its alignment + """ + if parameters is None: + parameters = {} + + progress = _construct_progress_bar(len(var_list), parameters) + leaves = frozenset(pt_util.get_leaves_as_tuples(tree)) + ret = [] + bwc = align_variant([], leaves, tree)["cost"] + align_dict = {} + for variant in var_list: + if variant not in align_dict: + align_dict[variant] = _apply_variant(variant, tree, leaves, bwc, parameters) + if progress is not None: + progress.update() + ret.append(align_dict[variant]) + _destroy_progress_bar(progress) + return ret + + +def apply_multiprocessing(obj: Union[EventLog, Trace, pd.DataFrame], pt: ProcessTree, parameters: Optional[Dict[Any, Any]] = None) -> Union[typing.AlignmentResult, typing.ListAlignments]: + """ + Returns alignments for a process tree (using the multiprocessing package to distribute the workload + among different cores) + + Parameters + -------------- + obj + Event log or trace (a conversion is done if necessary) + pt + Process tree + parameters + Parameters of the algorithm + + Returns + -------------- + alignments + Alignments + """ + if parameters is None: + parameters = {} + + import multiprocessing + + leaves = frozenset(pt_util.get_leaves_as_tuples(pt)) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + num_cores = exec_utils.get_param_value(Parameters.CORES, parameters, multiprocessing.cpu_count() - 2) + + if type(obj) is Trace: + variant = tuple(x[activity_key] for x in obj) + return align_variant(variant, leaves, pt) + else: + from concurrent.futures import ProcessPoolExecutor + + with ProcessPoolExecutor(max_workers=num_cores) as executor: + ret = [] + best_worst_cost = align_variant([], leaves, pt)["cost"] + futures = {} + align_dict = {} + + if pandas_utils.check_is_pandas_dataframe(obj): + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, + constants.CASE_CONCEPT_NAME) + traces = [tuple(x) for x in obj.groupby(case_id_key)[activity_key].agg(list).to_dict().values()] + else: + obj = log_converter.apply(obj, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + traces = [tuple(x[activity_key] for x in case) for case in obj] + + for trace in traces: + if trace not in futures: + futures[trace] = executor.submit(align_variant, trace, leaves, pt) + + progress = _construct_progress_bar(len(futures), parameters) + alignments_ready = 0 + if progress is not None: + while alignments_ready != len(futures): + current = 0 + for variant in futures: + current = current + 1 if futures[variant].done() else current + if current > alignments_ready: + for i in range(0, current - alignments_ready): + progress.update() + alignments_ready = current + + for variant in traces: + if variant not in align_dict: + al = futures[variant].result() + ltrace_bwc = len(trace) + best_worst_cost + al["fitness"] = 1.0 - al["cost"] / ltrace_bwc if ltrace_bwc > 0 else 0.0 + align_dict[variant] = al + ret.append(align_dict[variant]) + _destroy_progress_bar(progress) + return ret + + +def apply(obj: Union[EventLog, Trace, pd.DataFrame], pt: ProcessTree, parameters: Optional[Dict[Any, Any]] = None) -> Union[typing.AlignmentResult, typing.ListAlignments]: + """ + Returns alignments for a process tree + + Parameters + -------------- + obj + Event log or trace (a conversion is done if necessary) + pt + Process tree + parameters + Parameters of the algorithm + + Returns + -------------- + alignments + Alignments + """ + if parameters is None: + parameters = {} + + leaves = frozenset(pt_util.get_leaves_as_tuples(pt)) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + if type(obj) is Trace: + variant = tuple(x[activity_key] for x in obj) + return align_variant(variant, leaves, pt) + else: + ret = [] + if pandas_utils.check_is_pandas_dataframe(obj): + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + traces = [tuple(x) for x in obj.groupby(case_id_key)[activity_key].agg(list).to_dict().values()] + else: + obj = log_converter.apply(obj, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + traces = [tuple(x[activity_key] for x in case) for case in obj] + variants = set(traces) + bwc = align_variant([], leaves, pt)["cost"] + align_dict = {} + progress = _construct_progress_bar(len(variants), parameters) + for trace in traces: + if trace not in align_dict: + align_dict[trace] = _apply_variant(trace, pt, leaves, bwc, parameters) + if progress is not None: + progress.update() + ret.append(align_dict[trace]) + _destroy_progress_bar(progress) + return ret diff --git a/pm4py/pm4py/algo/conformance/antialignments/__init__.py b/pm4py/pm4py/algo/conformance/antialignments/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e567ffe7eb9f569d9f15c18a05bcbcea1238c050 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/antialignments/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.antialignments import variants, algorithm diff --git a/pm4py/pm4py/algo/conformance/antialignments/algorithm.py b/pm4py/pm4py/algo/conformance/antialignments/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..cbad9fae07f051b2af8bb129b354d3beffb5abc3 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/antialignments/algorithm.py @@ -0,0 +1,83 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.petri_net.utils import check_soundness +import time +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_CASEID_KEY +from pm4py.algo.conformance.antialignments import variants + +class Variants(Enum): + VERSION_DISCOUNTED_A_STAR = variants.discounted_a_star + +class Parameters(Enum): + MARKING_LIMIT = "marking_limit" + EXPONENT = "exponent" + EPSILON = "epsilon" + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + +DEFAULT_VARIANT = Variants.VERSION_DISCOUNTED_A_STAR +VERSION_DISCOUNTED_A_STAR = Variants.VERSION_DISCOUNTED_A_STAR + +VERSIONS = {Variants.VERSION_DISCOUNTED_A_STAR} + + +def apply(log, petri_net, initial_marking, final_marking, parameters=None, variant=DEFAULT_VARIANT): + if parameters is None: + parameters = {} + + return apply_log(log_converter.apply(log, parameters, log_converter.TO_EVENT_LOG), petri_net, initial_marking, + final_marking, parameters=parameters, variant=variant) + + +def apply_log(log, petri_net, initial_marking, final_marking, parameters=None, variant=DEFAULT_VARIANT): + """ + apply antialignments to a log + Parameters + ----------- + log + object of the form :class:`pm4py.log.log.EventLog` event log + petri_net + :class:`pm4py.objects.petri.petrinet.PetriNet` the model to use for the alignment + initial_marking + :class:`pm4py.objects.petri.petrinet.Marking` initial marking of the net + final_marking + :class:`pm4py.objects.petri.petrinet.Marking` final marking of the net + variant + selected variant of the algorithm + parameters + :class:`dict` parameters of the algorithm, + + Returns + ----------- + """ + if parameters is None: + parameters = dict() + + if not check_soundness.check_easy_soundness_net_in_fin_marking(petri_net, initial_marking, final_marking): + raise Exception("Trying to apply anti-alignments on a Petri net that is not an sound net.") + + start_time = time.time() + + antialignments = exec_utils.get_variant(variant).apply(log, petri_net, initial_marking, final_marking, parameters=None) + + total_time = start_time - time.time() + + return antialignments + diff --git a/pm4py/pm4py/algo/conformance/antialignments/variants/__init__.py b/pm4py/pm4py/algo/conformance/antialignments/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c754a4dec31807194fb9f45a727f35da8a7d58f1 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/antialignments/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.antialignments.variants import discounted_a_star diff --git a/pm4py/pm4py/algo/conformance/antialignments/variants/discounted_a_star.py b/pm4py/pm4py/algo/conformance/antialignments/variants/discounted_a_star.py new file mode 100644 index 0000000000000000000000000000000000000000..b83a1dc917f9932f340ad312295853956cd51b24 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/antialignments/variants/discounted_a_star.py @@ -0,0 +1,187 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import heapq +import time + +from pm4py.objects.petri_net.utils.align_utils import levenshtein, discountedEditDistance +from pm4py.objects.petri_net.utils.petri_utils import decorate_places_preset_trans, decorate_transitions_prepostset +from pm4py.objects.petri_net.utils import align_utils as utils +from pm4py.util import exec_utils +from copy import copy +from enum import Enum +from pm4py.statistics.variants.log import get as variants_module + + + +''' +This algorithm computes discounted anti-alignment and brings a precision of process model +See the paper "An A*-Algorithm for Computing Discounted Anti-Alignments in Process Mining" for more details +It is inspired by the verison of the dijkstra_no_heuristic.py for alignment algorithm. +Author: Boltenhagen Mathilde, Thomas Chatain, Josep Carmona +Date: Jan. 2021 +''' + + +class Parameters(Enum): + MARKING_LIMIT = "marking_limit" + EXPONENT = "exponent" + EPSILON = "epsilon" + + +def apply(log, petri_net, ini, fin, parameters=None): + """ + This function is a preliminary function for __search of the discounted algorihtm for AA. + The function gets the parameters and launches the algorithm on the variants (all traces aren't usefull for AA, see paper). + """ + + # get variants + variants_idxs = variants_module.get_variants_from_log_trace_idx(log, parameters=parameters) + variants = [] + for index_variant, var in enumerate(variants_idxs): + variants.append(var.split(",")) + + # get the number of times we can reach the same marking, very usefull for choices and loops + marking_limit = exec_utils.get_param_value(Parameters.MARKING_LIMIT, parameters, None) + if marking_limit is None: + marking_limit=100000 + + # the discounted parameter + exponent = exec_utils.get_param_value(Parameters.EXPONENT, parameters, None) + if exponent is None: + exponent=2 + + # limit search of very long run see paper "Anti-Alignments -- Measuring The Precision of Process Models and Event Logs" + epsilon = exec_utils.get_param_value(Parameters.EPSILON, parameters, None) + if epsilon is None: + epsilon=0.005 + + return __search(petri_net, ini, fin, variants, marking_limit=marking_limit, exponent=exponent,epsilon=epsilon) + + +def __search(net, ini, fin, variants, exponent=2, marking_limit=1000, epsilon = 0.005): + ''' + Launches the A* algorithm to get an Anti-alignment and the precision. + Notice that this algorithm gives an approximation (lower bound for precision) of AA. + This function is only called by the previous apply function. + ''' + + decorate_transitions_prepostset(net) + decorate_places_preset_trans(net) + + mymemory={} + closed = {} + + ini_state = utils.DijkstraSearchTupleForAntiAndMulti(0, ini, []) + open_set = [ini_state] + heapq.heapify(open_set) + visited = 0 + queued = 0 + traversed = 0 + best, sizeAA = None, None + + distanceTime = 0 + trans_empty_preset = set(t for t in net.transitions if len(t.in_arcs) == 0) + + def costfunction(t, curr_aa, withFrac=True): + ''' + Computes the discounted cost for current prefix AA + new transition t and the variants. + :param t: next possible transition + :param curr_aa: current prefix of run + :param withFrac: the fraction that prevents the best suffice, this parameter is false at the end of the algorithm. + :return: the minimal distance of the prefix to the variants + ''' + if t is None : + str_aa = [a.label for a in curr_aa] + elif len(curr_aa)==0 : + str_aa = [t.label] + else : + str_aa = [a.label for a in curr_aa] + [t.label] + + all= [] + for v in variants: + if str(v+str_aa) not in mymemory.keys() or not withFrac: + size_of_alignment, distance = discountedEditDistance(str_aa,v, exponent) + if withFrac: + mymemory[str(v+str_aa)] = distance + exponent**(-size_of_alignment)/(exponent-1) + else : + mymemory[str(v+str_aa)] = distance + mymemory[str(v+str_aa)] = mymemory[str(v+str_aa)]/((1+epsilon)**(len(str_aa))) + all.append(mymemory[str(v+str_aa)]) + return -min(all) + + # ---------------------------- + # the algorithm starts here + while not len(open_set) == 0: + curr = heapq.heappop(open_set) + + if best and best.g < curr.g: + continue + + if curr.m == fin: + curr.g = costfunction(None, curr.r, withFrac=False) + + # in case there only one run + if not best and (len(heapq.nsmallest(1,open_set))==0 or heapq.nsmallest(1,open_set)[0].g > curr.g): + return {'anti-alignment': curr.r, 'cost': curr.g, 'visited_states': visited, 'queued_states': queued, + 'traversed_arcs': traversed,'precision':getPrecision(curr.r,variants,epsilon)} + + # other runs might be interesting + elif not best or (best and best.g > curr.g): + best = curr + continue + + closed[curr.m]= 1 if (curr.m) not in closed.keys() else closed[curr.m]+1 + + visited += 1 + + possible_enabling_transitions = copy(trans_empty_preset) + for p in curr.m: + for t in p.ass_trans: + possible_enabling_transitions.add(t) + + enabled_trans = [t for t in possible_enabling_transitions if t.sub_marking <= curr.m] + start=time.time() + trans_to_visit_with_cost = [(t, costfunction(t,curr.r, withFrac=True)) for t in enabled_trans if t is not None] + distanceTime+=(time.time()-start) + + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = utils.add_markings(curr.m, t.add_marking) + + if ((new_marking) in closed.keys() and closed[new_marking]>marking_limit) or cost==curr.g: + continue + queued += 1 + tp = utils.DijkstraSearchTupleForAntiAndMulti(cost, new_marking, curr.r + [t]) + heapq.heappush(open_set, tp) + + return {'anti-alignment': best.r, 'cost': best.g, 'visited_states': visited, 'queued_states': queued, + 'traversed_arcs': traversed, 'precision':getPrecision(best.r,variants,epsilon)} + + +def getPrecision(run, variants, epsilon): + ''' + Once we obtained an AA, we can get the precision of the process model. + This is computed with the levenshtein edit distance. + ''' + run = [a.label for a in run] + all= [] + for v in variants: + all.append((levenshtein(run,v)/(len(v)+len(run))/(1+epsilon)**(len(run)))) + index_of_min = all.index(min(all)) + precision = 1 - all[index_of_min] + return precision + diff --git a/pm4py/pm4py/algo/conformance/declare/__init__.py b/pm4py/pm4py/algo/conformance/declare/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4c35e29aeb4c9004eeb8b64e5e4ec601a6296ead --- /dev/null +++ b/pm4py/pm4py/algo/conformance/declare/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.conformance.declare import algorithm, variants diff --git a/pm4py/pm4py/algo/conformance/declare/algorithm.py b/pm4py/pm4py/algo/conformance/declare/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..c814ad5c67bd54504e93d703ad06c08b6d17513f --- /dev/null +++ b/pm4py/pm4py/algo/conformance/declare/algorithm.py @@ -0,0 +1,82 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.util import exec_utils +from enum import Enum +from pm4py.algo.conformance.declare.variants import classic +from pm4py.objects.log.obj import EventLog +import pandas as pd +from typing import Union, Dict, Optional, Any, List + + +class Variants(Enum): + CLASSIC = classic + + +def apply(log: Union[EventLog, pd.DataFrame], model: Dict[str, Dict[Any, Dict[str, int]]], variant=Variants.CLASSIC, + parameters: Optional[Dict[Any, Any]] = None) -> List[Dict[str, Any]]: + """ + Applies conformance checking against a DECLARE model. + + Parameters + -------------- + log + Event log / Pandas dataframe + model + DECLARE model + variant + Variant to be used: + - Variants.CLASSIC + parameters + Variant-specific parameters + + Returns + ------------- + lst_conf_res + List containing for every case a dictionary with different keys: + - no_constr_total => the total number of constraints of the DECLARE model + - deviations => a list of deviations + - no_dev_total => the total number of deviations + - dev_fitness => the fitness (1 - no_dev_total / no_constr_total) + - is_fit => True if the case is perfectly fit + """ + return exec_utils.get_variant(variant).apply(log, model, parameters) + + +def get_diagnostics_dataframe(log, conf_result, variant=Variants.CLASSIC, parameters=None) -> pd.DataFrame: + """ + Gets the diagnostics dataframe from a log and the results + of DECLARE-based conformance checking + + Parameters + -------------- + log + Event log + conf_result + Results of conformance checking + variant + Variant to be used: + - Variants.CLASSIC + parameters + Variant-specific parameters + + Returns + -------------- + diagn_dataframe + Diagnostics dataframe + """ + return exec_utils.get_variant(variant).get_diagnostics_dataframe(log, conf_result, parameters) diff --git a/pm4py/pm4py/algo/conformance/declare/variants/__init__.py b/pm4py/pm4py/algo/conformance/declare/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a2e7f12eab3601a862207791c3ee0246594c6821 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/declare/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.conformance.declare.variants import classic diff --git a/pm4py/pm4py/algo/conformance/declare/variants/classic.py b/pm4py/pm4py/algo/conformance/declare/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..332d3c7155c34bbb7b29360123f0144d183337ba --- /dev/null +++ b/pm4py/pm4py/algo/conformance/declare/variants/classic.py @@ -0,0 +1,392 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.objects.log.obj import EventLog +import pandas as pd +from typing import Union, Dict, Optional, Any, List +from pm4py.algo.discovery.declare.templates import * +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from collections import Counter + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def __check_existence(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], trace_dict: Dict[str, List[Any]], + parameters: Optional[Dict[Any, Any]] = None): + if EXISTENCE in model: + for act in model[EXISTENCE]: + if act not in trace: + trace_dict["deviations"].append([EXISTENCE, act]) + + +def __check_absence(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], trace_dict: Dict[str, List[Any]], + parameters: Optional[Dict[Any, Any]] = None): + if ABSENCE in model: + for act in model[ABSENCE]: + if act in trace: + trace_dict["deviations"].append([ABSENCE, act]) + + +def __check_exactly_one(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], trace_dict: Dict[str, List[Any]], + parameters: Optional[Dict[Any, Any]] = None): + if EXACTLY_ONE in model: + trace_counter = Counter(trace) + for act in model[EXACTLY_ONE]: + if trace_counter[act] != 1: + trace_dict["deviations"].append([EXACTLY_ONE, act]) + + +def __check_init(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], trace_dict: Dict[str, List[Any]], + parameters: Optional[Dict[Any, Any]] = None): + if INIT in model: + for act in model[INIT]: + if len(trace) == 0 or trace[0] != act: + trace_dict["deviations"].append([INIT, act]) + + +def __check_responded_existence(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], + trace_dict: Dict[str, List[Any]], parameters: Optional[Dict[Any, Any]] = None): + if RESPONDED_EXISTENCE in model: + for act_couple in model[RESPONDED_EXISTENCE]: + if act_couple[0] in trace and act_couple[1] not in trace: + trace_dict["deviations"].append([RESPONDED_EXISTENCE, act_couple]) + + +def __check_coexistence(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], trace_dict: Dict[str, List[Any]], + parameters: Optional[Dict[Any, Any]] = None): + if COEXISTENCE in model: + for act_couple in model[COEXISTENCE]: + if (act_couple[0] in trace and act_couple[1] not in trace) or ( + act_couple[1] in trace and act_couple[0] not in trace): + trace_dict["deviations"].append([COEXISTENCE, act_couple]) + + +def __check_non_coexistence(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], + trace_dict: Dict[str, List[Any]], parameters: Optional[Dict[Any, Any]] = None): + if NONCOEXISTENCE in model: + for act_couple in model[NONCOEXISTENCE]: + if act_couple[0] in trace and act_couple[1] in trace: + trace_dict["deviations"].append([NONCOEXISTENCE, act_couple]) + + +def __check_response(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], trace_dict: Dict[str, List[Any]], + act_idxs: Dict[str, List[int]], parameters: Optional[Dict[Any, Any]] = None): + if RESPONSE in model: + for act_couple in model[RESPONSE]: + if act_couple[0] in trace: + if (not act_couple[1] in trace) or max(act_idxs[act_couple[0]]) > max(act_idxs[act_couple[1]]): + trace_dict["deviations"].append([RESPONSE, act_couple]) + + +def __check_precedence(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], trace_dict: Dict[str, List[Any]], + act_idxs: Dict[str, List[int]], parameters: Optional[Dict[Any, Any]] = None): + if PRECEDENCE in model: + for act_couple in model[PRECEDENCE]: + if act_couple[1] in trace: + if (not act_couple[0] in trace) or min(act_idxs[act_couple[0]]) > min(act_idxs[act_couple[1]]): + trace_dict["deviations"].append([PRECEDENCE, act_couple]) + + +def __check_succession(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], trace_dict: Dict[str, List[Any]], + act_idxs: Dict[str, List[int]], parameters: Optional[Dict[Any, Any]] = None): + if SUCCESSION in model: + for act_couple in model[SUCCESSION]: + if (not act_couple[0] in trace or not act_couple[1] in trace) or min(act_idxs[act_couple[0]]) > min( + act_idxs[act_couple[1]]) or max(act_idxs[act_couple[0]]) > max(act_idxs[act_couple[1]]): + trace_dict["deviations"].append([SUCCESSION, act_couple]) + + +def __check_alt_response(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], + trace_dict: Dict[str, List[Any]], act_idxs: Dict[str, List[int]], + parameters: Optional[Dict[Any, Any]] = None): + if ALTRESPONSE in model: + for act_couple in model[RESPONSE]: + spec_idxs = [] + if act_couple[0] in trace: + spec_idxs = spec_idxs + [(act_couple[0], i) for i in act_idxs[act_couple[0]]] + if act_couple[1] in trace: + spec_idxs = spec_idxs + [(act_couple[1], i) for i in act_idxs[act_couple[1]]] + spec_idxs = sorted(spec_idxs, key=lambda x: (x[1], x[0])) + while spec_idxs: + if spec_idxs[0][0] != act_couple[0]: + del spec_idxs[0] + else: + break + is_ok = True + for i in range(len(spec_idxs)): + if i % 2 == 0 and (spec_idxs[i][0] != act_couple[0] or i == len(spec_idxs) - 1 or spec_idxs[i + 1][0] != + act_couple[1]): + is_ok = False + break + if not is_ok: + trace_dict["deviations"].append([ALTRESPONSE, act_couple]) + + +def __check_chain_response(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], + trace_dict: Dict[str, List[Any]], act_idxs: Dict[str, List[int]], + parameters: Optional[Dict[Any, Any]] = None): + if CHAINRESPONSE in model: + for act_couple in model[CHAINRESPONSE]: + spec_idxs = [] + if act_couple[0] in trace: + spec_idxs = spec_idxs + [(act_couple[0], i) for i in act_idxs[act_couple[0]]] + if act_couple[1] in trace: + spec_idxs = spec_idxs + [(act_couple[1], i) for i in act_idxs[act_couple[1]]] + spec_idxs = sorted(spec_idxs, key=lambda x: (x[1], x[0])) + while spec_idxs: + if spec_idxs[0][0] != act_couple[0]: + del spec_idxs[0] + else: + break + is_ok = True + for i in range(len(spec_idxs)): + if i % 2 == 0 and (spec_idxs[i][0] != act_couple[0] or i == len(spec_idxs) - 1 or spec_idxs[i + 1][0] != + act_couple[1] or spec_idxs[i + 1][1] != spec_idxs[i][1] + 1): + is_ok = False + break + if not is_ok: + trace_dict["deviations"].append([CHAINRESPONSE, act_couple]) + + +def __check_alt_precedence(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], + trace_dict: Dict[str, List[Any]], act_idxs: Dict[str, List[int]], + parameters: Optional[Dict[Any, Any]] = None): + if ALTPRECEDENCE in model: + for act_couple in model[ALTPRECEDENCE]: + spec_idxs = [] + if act_couple[0] in trace: + spec_idxs = spec_idxs + [(act_couple[0], i) for i in act_idxs[act_couple[0]]] + if act_couple[1] in trace: + spec_idxs = spec_idxs + [(act_couple[1], i) for i in act_idxs[act_couple[1]]] + spec_idxs = sorted(spec_idxs, key=lambda x: (x[1], x[0])) + while len(spec_idxs) > 1: + if spec_idxs[1][0] != act_couple[1]: + del spec_idxs[0] + else: + break + is_ok = True + for i in range(len(spec_idxs)): + if i % 2 == 0 and (spec_idxs[i][0] != act_couple[0] or i == len(spec_idxs) - 1 or spec_idxs[i + 1][0] != + act_couple[1]): + is_ok = False + break + if not is_ok: + trace_dict["deviations"].append([ALTPRECEDENCE, act_couple]) + + +def __check_chain_precedence(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], + trace_dict: Dict[str, List[Any]], act_idxs: Dict[str, List[int]], + parameters: Optional[Dict[Any, Any]] = None): + if CHAINPRECEDENCE in model: + for act_couple in model[CHAINPRECEDENCE]: + spec_idxs = [] + if act_couple[0] in trace: + spec_idxs = spec_idxs + [(act_couple[0], i) for i in act_idxs[act_couple[0]]] + if act_couple[1] in trace: + spec_idxs = spec_idxs + [(act_couple[1], i) for i in act_idxs[act_couple[1]]] + spec_idxs = sorted(spec_idxs, key=lambda x: (x[1], x[0])) + while len(spec_idxs) > 1: + if spec_idxs[1][0] != act_couple[1]: + del spec_idxs[0] + else: + break + is_ok = True + for i in range(len(spec_idxs)): + if i % 2 == 0 and (spec_idxs[i][0] != act_couple[0] or i == len(spec_idxs) - 1 or spec_idxs[i + 1][0] != + act_couple[1] or spec_idxs[i + 1][1] != spec_idxs[i][1] + 1): + is_ok = False + break + if not is_ok: + trace_dict["deviations"].append([CHAINPRECEDENCE, act_couple]) + + +def __check_alt_succession(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], + trace_dict: Dict[str, List[Any]], act_idxs: Dict[str, List[int]], + parameters: Optional[Dict[Any, Any]] = None): + if ALTSUCCESSION in model: + for act_couple in model[ALTSUCCESSION]: + spec_idxs = [] + if act_couple[0] in trace: + spec_idxs = spec_idxs + [(act_couple[0], i) for i in act_idxs[act_couple[0]]] + if act_couple[1] in trace: + spec_idxs = spec_idxs + [(act_couple[1], i) for i in act_idxs[act_couple[1]]] + spec_idxs = sorted(spec_idxs, key=lambda x: (x[1], x[0])) + is_ok = True + for i in range(len(spec_idxs)): + if i % 2 == 0 and (spec_idxs[i][0] != act_couple[0] or i == len(spec_idxs) - 1 or spec_idxs[i + 1][0] != + act_couple[1]): + is_ok = False + break + if not is_ok: + trace_dict["deviations"].append([ALTSUCCESSION, act_couple]) + + +def __check_chain_succession(trace: List[str], model: Dict[str, Dict[Any, Dict[str, int]]], + trace_dict: Dict[str, List[Any]], act_idxs: Dict[str, List[int]], + parameters: Optional[Dict[Any, Any]] = None): + if CHAINSUCCESSION in model: + for act_couple in model[CHAINSUCCESSION]: + spec_idxs = [] + if act_couple[0] in trace: + spec_idxs = spec_idxs + [(act_couple[0], i) for i in act_idxs[act_couple[0]]] + if act_couple[1] in trace: + spec_idxs = spec_idxs + [(act_couple[1], i) for i in act_idxs[act_couple[1]]] + spec_idxs = sorted(spec_idxs, key=lambda x: (x[1], x[0])) + is_ok = True + for i in range(len(spec_idxs)): + if i % 2 == 0 and (spec_idxs[i][0] != act_couple[0] or i == len(spec_idxs) - 1 or spec_idxs[i + 1][0] != + act_couple[1] or spec_idxs[i + 1][1] != spec_idxs[i][1] + 1): + is_ok = False + break + if not is_ok: + trace_dict["deviations"].append([CHAINSUCCESSION, act_couple]) + + +def apply_list(projected_log: List[List[str]], model: Dict[str, Dict[Any, Dict[str, int]]], + parameters: Optional[Dict[Any, Any]] = None) -> List[Dict[str, Any]]: + if parameters is None: + parameters = {} + + conf_cases = [] + + total_num_constraints = 0 + for k in model: + total_num_constraints += len(model[k]) + + for trace in projected_log: + act_idxs = {} + for i in range(len(trace)): + if trace[i] not in act_idxs: + act_idxs[trace[i]] = [] + act_idxs[trace[i]].append(i) + + ret = {} + ret["no_constr_total"] = total_num_constraints + ret["deviations"] = [] + + __check_existence(trace, model, ret, parameters) + __check_exactly_one(trace, model, ret, parameters) + __check_init(trace, model, ret, parameters) + __check_responded_existence(trace, model, ret, parameters) + __check_coexistence(trace, model, ret, parameters) + __check_non_coexistence(trace, model, ret, parameters) + __check_response(trace, model, ret, act_idxs, parameters) + __check_precedence(trace, model, ret, act_idxs, parameters) + __check_succession(trace, model, ret, act_idxs, parameters) + __check_alt_response(trace, model, ret, act_idxs, parameters) + __check_chain_response(trace, model, ret, act_idxs, parameters) + __check_alt_precedence(trace, model, ret, act_idxs, parameters) + __check_chain_precedence(trace, model, ret, act_idxs, parameters) + __check_alt_succession(trace, model, ret, act_idxs, parameters) + __check_chain_succession(trace, model, ret, act_idxs, parameters) + __check_absence(trace, model, ret, parameters) + __check_non_coexistence(trace, model, ret, parameters) + + ret["no_dev_total"] = len(ret["deviations"]) + ret["dev_fitness"] = 1.0 - ret["no_dev_total"] / ret["no_constr_total"] if ret["no_constr_total"] > 0 else 1.0 + ret["is_fit"] = ret["no_dev_total"] == 0 + + conf_cases.append(ret) + + return conf_cases + + +def apply(log: Union[EventLog, pd.DataFrame], model: Dict[str, Dict[Any, Dict[str, int]]], + parameters: Optional[Dict[Any, Any]] = None) -> List[Dict[str, Any]]: + """ + Applies conformance checking against a DECLARE model. + + Paper: + F. M. Maggi, A. J. Mooij and W. M. P. van der Aalst, "User-guided discovery of declarative process models," 2011 IEEE Symposium on Computational Intelligence and Data Mining (CIDM), Paris, France, 2011, pp. 192-199, doi: 10.1109/CIDM.2011.5949297. + + Parameters + -------------- + log + Event log / Pandas dataframe + model + DECLARE model + parameters + Possible parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to be used as activity + - Parameters.CASE_ID_KEY => the attribute to be used as case identifier + + Returns + ------------- + lst_conf_res + List containing for every case a dictionary with different keys: + - no_constr_total => the total number of constraints of the DECLARE model + - deviations => a list of deviations + - no_dev_total => the total number of deviations + - dev_fitness => the fitness (1 - no_dev_total / no_constr_total) + - is_fit => True if the case is perfectly fit + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + import pm4py + + projected_log = pm4py.project_on_event_attribute(log, activity_key, case_id_key=case_id_key) + + ret = apply_list(projected_log, model, parameters=parameters) + + return ret + + +def get_diagnostics_dataframe(log, conf_result, parameters=None) -> pd.DataFrame: + """ + Gets the diagnostics dataframe from a log and the results + of DECLARE-based conformance checking + + Parameters + -------------- + log + Event log + conf_result + Results of conformance checking + + Returns + -------------- + diagn_dataframe + Diagnostics dataframe + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + + import pandas as pd + + diagn_stream = [] + + for index in range(len(log)): + case_id = log[index].attributes[case_id_key] + + no_dev_total = conf_result[index]["no_dev_total"] + no_constr_total = conf_result[index]["no_constr_total"] + dev_fitness = conf_result[index]["dev_fitness"] + + diagn_stream.append({"case_id": case_id, "no_dev_total": no_dev_total, "no_constr_total": no_constr_total, + "dev_fitness": dev_fitness}) + + return pandas_utils.instantiate_dataframe(diagn_stream) diff --git a/pm4py/pm4py/algo/conformance/footprints/__init__.py b/pm4py/pm4py/algo/conformance/footprints/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d0390511449ea99c04d1ce1cb70b78f23aa856b8 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/footprints/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.footprints import variants, algorithm, util diff --git a/pm4py/pm4py/algo/conformance/footprints/algorithm.py b/pm4py/pm4py/algo/conformance/footprints/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..b4be96de8cd819bd8014264eb969798f63b1119b --- /dev/null +++ b/pm4py/pm4py/algo/conformance/footprints/algorithm.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.algo.conformance.footprints.variants import log_model, log_extensive, trace_extensive +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union, List + + +class Variants(Enum): + LOG_MODEL = log_model + LOG_EXTENSIVE = log_extensive + TRACE_EXTENSIVE = trace_extensive + + +def apply(log_footprints: Union[Dict[str, Any], List[Dict[str, Any]]], model_footprints: Dict[str, Any], variant=Variants.LOG_MODEL, parameters: Optional[Dict[Any, Any]] = None) -> Union[List[Dict[str, Any]], Dict[str, Any]]: + """ + Apply footprints conformance between a log footprints object + and a model footprints object + + Parameters + ----------------- + log_footprints + Footprints of the log + model_footprints + Footprints of the model + parameters + Parameters of the algorithm, including: + - Parameters.STRICT => strict check of the footprints + + Returns + ------------------ + violations + Set/dictionary of all the violations between the log footprints + and the model footprints, OR list of case-per-case violations + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(log_footprints, model_footprints, parameters=parameters) diff --git a/pm4py/pm4py/algo/conformance/footprints/util/__init__.py b/pm4py/pm4py/algo/conformance/footprints/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8304073aeb4ad3e23ea7fddcfcbab5c70ae1a17d --- /dev/null +++ b/pm4py/pm4py/algo/conformance/footprints/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.footprints.util import tree_visualization, evaluation diff --git a/pm4py/pm4py/algo/conformance/footprints/util/evaluation.py b/pm4py/pm4py/algo/conformance/footprints/util/evaluation.py new file mode 100644 index 0000000000000000000000000000000000000000..d7894f465a58acdc6ba0e96873ff81e20f82571a --- /dev/null +++ b/pm4py/pm4py/algo/conformance/footprints/util/evaluation.py @@ -0,0 +1,187 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from typing import List, Dict, Any + + +from enum import Enum + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +DFG = "dfg" +FOOTPRINTS_KEY = "footprints" +START_ACTIVITIES = "start_activities" +END_ACTIVITIES = "end_activities" +SEQUENCE = "sequence" +PARALLEL = "parallel" +IS_FOOTPRINTS_FIT = "is_footprints_fit" + + +def fp_fitness(fp_log, fp_model, conf_results, parameters=None): + """ + Calculates the footprints fitness provided the footprints of the log, + and the result of footprints conformance (applied to the entire log) + + Parameters + --------------- + fp_log + Footprints of the log + fp_model + Footprints of the model + conf_results + Footprints conformance (applied to the entire log) + parameters + Parameters of the algorithm + + Returns + --------------- + fitness + Fitness value (between 0.0 and 1.0) + """ + if parameters is None: + parameters = {} + + fit_traces = None + if isinstance(conf_results, list): + fit_traces = len([x for x in conf_results if x[IS_FOOTPRINTS_FIT]])/len(conf_results) * 100.0 + + fp_log = flatten_fp(fp_log) + conf_results = flatten_conf(conf_results) + + dfg = fp_log[DFG] + num_sequence_log = len(fp_log[SEQUENCE]) + num_parallel_log = len(fp_log[PARALLEL]) + num_start_activities_log = len(fp_log[START_ACTIVITIES]) + num_end_activities_log = len(fp_log[END_ACTIVITIES]) + num_start_activities_dev = len(conf_results[START_ACTIVITIES]) + num_end_activities_dev = len(conf_results[END_ACTIVITIES]) + footprints = conf_results[FOOTPRINTS_KEY] + + if dfg: + sum_dfg = float(sum(x for x in dfg.values())) + sum_dev = float(sum(dfg[x] for x in footprints)) + + fitness = ((1.0 - sum_dev / sum_dfg) * (num_sequence_log + num_parallel_log) + ( + num_start_activities_log + num_end_activities_log - num_start_activities_dev - num_end_activities_dev)) / ( + num_sequence_log + num_parallel_log + num_start_activities_log + num_end_activities_log) + else: + # return fitness 1.0 if DFG is empty + fitness = 1.0 + + if fit_traces is not None: + return {"perc_fit_traces": fit_traces, "log_fitness": fitness} + + return fitness + + +def fp_precision(fp_log, fp_model, parameters=None): + """ + Calculates the footprints based precision provided the two footprints + of the log and the model. + + Parameters + -------------- + fp_log + Footprints of the log + fp_model + Footprints of the model + parameters + Parameters of the algorithm + + Returns + ------------- + precision + Precision value (between 0 and 1) + """ + if parameters is None: + parameters = {} + + fp_log = flatten_fp(fp_log) + fp_model = flatten_fp(fp_model) + + log_configurations = fp_log[Outputs.SEQUENCE.value].union(fp_log[Outputs.PARALLEL.value]) + model_configurations = fp_model[Outputs.SEQUENCE.value].union(fp_model[Outputs.PARALLEL.value]) + + if model_configurations: + return float(len(log_configurations.intersection(model_configurations))) / float(len(model_configurations)) + + # return precision 1.0 if model configurations are empty + return 1.0 + + +def flatten_fp(fp: List[Dict[str, Any]]) -> Dict[str, Any]: + """ + Flattens the trace-based footprints to the footprints of the overall log + + Parameters + --------------- + fp + Trace-based footprints + + Returns + -------------- + log_fp + Overall log footprints + """ + if isinstance(fp, list): + res = {DFG: Counter(), SEQUENCE: set(), PARALLEL: set(), START_ACTIVITIES: set(), END_ACTIVITIES: set()} + for el in fp: + for x, y in el[DFG].items(): + res[DFG][x] += y + res[SEQUENCE] = res[SEQUENCE].union(el[SEQUENCE]) + res[PARALLEL] = res[PARALLEL].union(el[PARALLEL]) + res[START_ACTIVITIES] = res[START_ACTIVITIES].union(el[START_ACTIVITIES]) + res[END_ACTIVITIES] = res[END_ACTIVITIES].union(el[END_ACTIVITIES]) + return res + return fp + + +def flatten_conf(conf: List[Dict[str, Any]]) -> Dict[str, Any]: + """ + Flattens the trace-based conformance checking results (obtained using footprints) to the conformance checking + results on the overall log + + Parameters + ---------------- + conf + Trace-based conformance checking results + + Returns + ---------------- + log_conf + Overall log conformance checking results + """ + if isinstance(conf, list): + res = {FOOTPRINTS_KEY: set(), START_ACTIVITIES: set(), END_ACTIVITIES: set()} + for el in conf: + res[FOOTPRINTS_KEY] = res[FOOTPRINTS_KEY].union(el[FOOTPRINTS_KEY]) + res[START_ACTIVITIES] = res[START_ACTIVITIES].union(el[START_ACTIVITIES]) + res[END_ACTIVITIES] = res[END_ACTIVITIES].union(el[END_ACTIVITIES]) + return res + return conf diff --git a/pm4py/pm4py/algo/conformance/footprints/util/tree_visualization.py b/pm4py/pm4py/algo/conformance/footprints/util/tree_visualization.py new file mode 100644 index 0000000000000000000000000000000000000000..fc89107d53b7085a8f838ad51998532ed73ce4d7 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/footprints/util/tree_visualization.py @@ -0,0 +1,100 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints.tree.variants import bottomup as bottomup_discovery +from pm4py.objects.process_tree.utils import bottomup as bottomup_util +from enum import Enum + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +FP_DEV_COLOR = "red" +FP_START_END_DEV_COLOR = "blue" +FP_ALWAYS_EXECUTED_DEV_COLOR = "orange" + +FOOTPRINTS_KEY = "footprints" +START_ACTIVITIES = "start_activities" +END_ACTIVITIES = "end_activities" +ALWAYS_EXECUTED = "always_executed" + + +def apply(tree, conf_results, parameters=None): + """ + Projects conformance results on top of the process tree + + Parameters + -------------- + tree + Process tree + conf_results + Conformance results (footprints on the entire log vs entire model) + parameters + Parameters of the algorithm + + Returns + -------------- + color_map + Color map to be provided to the visualization + """ + if parameters is None: + parameters = {} + + start_activities = {} + end_activities = {} + + if isinstance(conf_results, list): + raise Exception("the visualization can only be applied with total footprints (not trace-by-trace)!") + elif isinstance(conf_results, dict): + footprints = conf_results + start_activities = conf_results[START_ACTIVITIES] + end_activities = conf_results[END_ACTIVITIES] + else: + footprints = conf_results + + bottomup_nodes = bottomup_util.get_bottomup_nodes(tree, parameters=parameters) + labels_dictio = {x.label: x for x in bottomup_nodes if x.operator is None and x.label is not None} + all_fp_dictio = bottomup_discovery.get_all_footprints(tree, parameters=parameters) + conf_colors = {} + + for res in start_activities: + if res in labels_dictio: + conf_colors[labels_dictio[res]] = FP_START_END_DEV_COLOR + + for res in end_activities: + if res in labels_dictio: + conf_colors[labels_dictio[res]] = FP_START_END_DEV_COLOR + + for res in footprints: + if res[0] in labels_dictio and res[1] in labels_dictio: + conf_colors[labels_dictio[res[0]]] = FP_DEV_COLOR + conf_colors[labels_dictio[res[1]]] = FP_DEV_COLOR + for n in bottomup_nodes: + if res[0] in all_fp_dictio[n][Outputs.ACTIVITIES.value] and res[1] in all_fp_dictio[n][ + Outputs.ACTIVITIES.value]: + conf_colors[n] = FP_DEV_COLOR + break + + return conf_colors diff --git a/pm4py/pm4py/algo/conformance/footprints/variants/__init__.py b/pm4py/pm4py/algo/conformance/footprints/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b2800652cd8eef071b2cf8525c054e8d71ccf39b --- /dev/null +++ b/pm4py/pm4py/algo/conformance/footprints/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.footprints.variants import log_model, log_extensive, trace_extensive diff --git a/pm4py/pm4py/algo/conformance/footprints/variants/log_extensive.py b/pm4py/pm4py/algo/conformance/footprints/variants/log_extensive.py new file mode 100644 index 0000000000000000000000000000000000000000..df56413f85eb67c69bfb0798745ad1b16c62fed1 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/footprints/variants/log_extensive.py @@ -0,0 +1,85 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +class ConfOutputs(Enum): + FOOTPRINTS = "footprints" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + MIN_LENGTH_FIT = "min_length_fit" + IS_FOOTPRINTS_FIT = "is_footprints_fit" + + +def apply(log_footprints: Dict[str, Any], model_footprints: Dict[str, Any], parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Apply footprints conformance between a log footprints object + and a model footprints object + + Parameters + ----------------- + log_footprints + Footprints of the log (entire log) + model_footprints + Footprints of the model + parameters + Parameters of the algorithm + + Returns + ------------------ + violations + Dictionary containing all the violations + """ + if parameters is None: + parameters = {} + + if type(log_footprints) is list: + raise Exception( + "it is possible to apply this variant only on overall log footprints, not trace-by-trace footprints!") + + log_configurations = log_footprints[Outputs.SEQUENCE.value].union(log_footprints[Outputs.PARALLEL.value]) + model_configurations = model_footprints[Outputs.SEQUENCE.value].union(model_footprints[Outputs.PARALLEL.value]) + + ret = {} + ret[ConfOutputs.FOOTPRINTS.value] = set(x for x in log_configurations if x not in model_configurations) + ret[ConfOutputs.START_ACTIVITIES.value] = set(x for x in log_footprints[Outputs.START_ACTIVITIES.value] if + x not in model_footprints[ + Outputs.START_ACTIVITIES.value]) if Outputs.START_ACTIVITIES.value in model_footprints else set() + ret[ConfOutputs.END_ACTIVITIES.value] = set( + x for x in log_footprints[Outputs.END_ACTIVITIES.value] if x not in model_footprints[ + Outputs.END_ACTIVITIES.value]) if Outputs.END_ACTIVITIES.value in model_footprints else set() + ret[ConfOutputs.MIN_LENGTH_FIT.value] = log_footprints[Outputs.MIN_TRACE_LENGTH.value] >= model_footprints[ + Outputs.MIN_TRACE_LENGTH.value] if Outputs.MIN_TRACE_LENGTH.value in log_footprints and Outputs.MIN_TRACE_LENGTH.value in model_footprints else True + ret[ConfOutputs.IS_FOOTPRINTS_FIT.value] = len(ret[ConfOutputs.FOOTPRINTS.value]) == 0 and len( + ret[ConfOutputs.START_ACTIVITIES.value]) == 0 and len( + ret[ConfOutputs.END_ACTIVITIES.value]) == 0 and ret[ConfOutputs.MIN_LENGTH_FIT.value] + + return ret diff --git a/pm4py/pm4py/algo/conformance/footprints/variants/log_model.py b/pm4py/pm4py/algo/conformance/footprints/variants/log_model.py new file mode 100644 index 0000000000000000000000000000000000000000..31c901bae9651211fbd9042fb373281460108083 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/footprints/variants/log_model.py @@ -0,0 +1,147 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils, xes_constants, constants, pandas_utils +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog +import pandas as pd + +from enum import Enum + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + STRICT = "strict" + + +def apply_single(log_footprints: Dict[str, Any], model_footprints: Dict[str, Any], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Any]: + """ + Apply footprints conformance between a log footprints object + and a model footprints object + + Parameters + ----------------- + log_footprints + Footprints of the log (NOT a list, but a single footprints object) + model_footprints + Footprints of the model + parameters + Parameters of the algorithm, including: + - Parameters.STRICT => strict check of the footprints + + Returns + ------------------ + violations + Set of all the violations between the log footprints + and the model footprints + """ + if parameters is None: + parameters = {} + + strict = exec_utils.get_param_value(Parameters.STRICT, parameters, False) + + if strict: + s1 = log_footprints[Outputs.SEQUENCE.value].difference(model_footprints[Outputs.SEQUENCE.value]) + s2 = log_footprints[Outputs.PARALLEL.value].difference(model_footprints[Outputs.PARALLEL.value]) + + violations = s1.union(s2) + + else: + s1 = log_footprints[Outputs.SEQUENCE.value].union(log_footprints[Outputs.PARALLEL.value]) + s2 = model_footprints[Outputs.SEQUENCE.value].union(model_footprints[Outputs.PARALLEL.value]) + + violations = s1.difference(s2) + + return violations + + +def apply(log_footprints: Union[Dict[str, Any], List[Dict[str, Any]]], model_footprints: Dict[str, Any], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Union[List[Dict[str, Any]], Dict[str, Any]]: + """ + Apply footprints conformance between a log footprints object + and a model footprints object + + Parameters + ----------------- + log_footprints + Footprints of the log + model_footprints + Footprints of the model + parameters + Parameters of the algorithm, including: + - Parameters.STRICT => strict check of the footprints + + Returns + ------------------ + violations + Set of all the violations between the log footprints + and the model footprints, OR list of case-per-case violations + """ + if type(log_footprints) is list: + ret = [] + for case_footprints in log_footprints: + ret.append(apply_single(case_footprints, model_footprints, parameters=parameters)) + return ret + return apply_single(log_footprints, model_footprints, parameters=parameters) + + +def get_diagnostics_dataframe(log: EventLog, conf_result: Union[List[Dict[str, Any]], Dict[str, Any]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Gets the diagnostics dataframe from the log + and the results of footprints conformance checking + (trace-by-trace) + + Parameters + -------------- + log + Event log + conf_result + Conformance checking results (trace-by-trace) + + Returns + -------------- + diagn_dataframe + Diagnostics dataframe + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + + import pandas as pd + + diagn_stream = [] + + for index in range(len(log)): + case_id = log[index].attributes[case_id_key] + num_violations = len(conf_result[index]) + is_fit = num_violations == 0 + + diagn_stream.append({"case_id": case_id, "num_violations": num_violations, "is_fit": is_fit}) + + return pandas_utils.instantiate_dataframe(diagn_stream) diff --git a/pm4py/pm4py/algo/conformance/footprints/variants/trace_extensive.py b/pm4py/pm4py/algo/conformance/footprints/variants/trace_extensive.py new file mode 100644 index 0000000000000000000000000000000000000000..aa6d22da8c07684272d7c053201e47bc660d1734 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/footprints/variants/trace_extensive.py @@ -0,0 +1,155 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, xes_constants, constants, pandas_utils +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog +import pandas as pd + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ENABLE_ACT_ALWAYS_EXECUTED = "enable_act_always_executed" + + +class ConfOutputs(Enum): + FOOTPRINTS = "footprints" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_LENGTH_FIT = "min_length_fit" + IS_FOOTPRINTS_FIT = "is_footprints_fit" + + +def apply(log_footprints: List[Dict[str, Any]], model_footprints: Dict[str, Any], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[Dict[str, Any]]: + """ + Apply footprints conformance between a log footprints object + and a model footprints object + + Parameters + ----------------- + log_footprints + Footprints of the log (trace-by-trace) + model_footprints + Footprints of the model + parameters + Parameters of the algorithm + + Returns + ------------------ + violations + List containing, for each trace, a dictionary containing the violations + """ + if parameters is None: + parameters = {} + + if not type(log_footprints) is list: + raise Exception( + "it is possible to apply this variant only on trace-by-trace footprints, not overall log footprints!") + + conf_traces = {} + + enable_act_always_executed = exec_utils.get_param_value(Parameters.ENABLE_ACT_ALWAYS_EXECUTED, parameters, True) + model_configurations = model_footprints[Outputs.SEQUENCE.value].union(model_footprints[Outputs.PARALLEL.value]) + + ret = [] + for tr in log_footprints: + trace = tr[Outputs.TRACE.value] + if trace in conf_traces: + ret.append(conf_traces[trace]) + else: + trace_configurations = tr[Outputs.SEQUENCE.value].union(tr[Outputs.PARALLEL.value]) + trace_violations = {} + trace_violations[ConfOutputs.FOOTPRINTS.value] = set( + x for x in trace_configurations if x not in model_configurations) + trace_violations[ConfOutputs.START_ACTIVITIES.value] = set(x for x in tr[Outputs.START_ACTIVITIES.value] if + x not in model_footprints[ + Outputs.START_ACTIVITIES.value]) if Outputs.START_ACTIVITIES.value in model_footprints else set() + trace_violations[ConfOutputs.END_ACTIVITIES.value] = set( + x for x in tr[Outputs.END_ACTIVITIES.value] if x not in model_footprints[ + Outputs.END_ACTIVITIES.value]) if Outputs.END_ACTIVITIES.value in model_footprints else set() + trace_violations[ConfOutputs.ACTIVITIES_ALWAYS_HAPPENING.value] = set( + x for x in model_footprints[Outputs.ACTIVITIES_ALWAYS_HAPPENING.value] if x not in tr[ + Outputs.ACTIVITIES.value]) if Outputs.ACTIVITIES_ALWAYS_HAPPENING.value in model_footprints and enable_act_always_executed else set() + trace_violations[ConfOutputs.MIN_LENGTH_FIT.value] = tr[Outputs.MIN_TRACE_LENGTH.value] >= model_footprints[ + Outputs.MIN_TRACE_LENGTH.value] if Outputs.MIN_TRACE_LENGTH.value in tr and Outputs.MIN_TRACE_LENGTH.value in model_footprints else True + trace_violations[ConfOutputs.IS_FOOTPRINTS_FIT.value] = len( + trace_violations[ConfOutputs.FOOTPRINTS.value]) == 0 and len( + trace_violations[ConfOutputs.START_ACTIVITIES.value]) == 0 and len( + trace_violations[ConfOutputs.END_ACTIVITIES.value]) == 0 and len( + trace_violations[ConfOutputs.ACTIVITIES_ALWAYS_HAPPENING.value]) == 0 and trace_violations[ + ConfOutputs.MIN_LENGTH_FIT.value] + + ret.append(trace_violations) + conf_traces[trace] = trace_violations + + return ret + + +def get_diagnostics_dataframe(log: EventLog, conf_result: List[Dict[str, Any]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Gets the diagnostics dataframe from the log + and the results of footprints conformance checking + (trace-by-trace) + + Parameters + -------------- + log + Event log + conf_result + Conformance checking results (trace-by-trace) + + Returns + -------------- + diagn_dataframe + Diagnostics dataframe + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + + import pandas as pd + + diagn_stream = [] + + for index in range(len(log)): + case_id = log[index].attributes[case_id_key] + is_fit = conf_result[index][ConfOutputs.IS_FOOTPRINTS_FIT.value] + footprints_violations = len(conf_result[index][ConfOutputs.FOOTPRINTS.value]) + start_activities_violations = len(conf_result[index][ConfOutputs.START_ACTIVITIES.value]) + end_activities_violations = len(conf_result[index][ConfOutputs.END_ACTIVITIES.value]) + act_always_happening_violations = len(conf_result[index][ConfOutputs.ACTIVITIES_ALWAYS_HAPPENING.value]) + min_length_fit = conf_result[index][ConfOutputs.MIN_LENGTH_FIT.value] + + diagn_stream.append({"case_id": case_id, "is_fit": is_fit, "footprints_violations": footprints_violations, "start_activities_violations": start_activities_violations, + "end_activities_violations": end_activities_violations, "act_always_happening_violations": act_always_happening_violations, "min_length_fit": min_length_fit}) + + return pandas_utils.instantiate_dataframe(diagn_stream) diff --git a/pm4py/pm4py/algo/conformance/log_skeleton/__init__.py b/pm4py/pm4py/algo/conformance/log_skeleton/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..64ed547fde0a085c847e2f54a1cac381056f71f6 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/log_skeleton/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.log_skeleton import variants, algorithm diff --git a/pm4py/pm4py/algo/conformance/log_skeleton/algorithm.py b/pm4py/pm4py/algo/conformance/log_skeleton/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..937c524aa2d9cd81eb5830cb1d6ec4a4152a4b5f --- /dev/null +++ b/pm4py/pm4py/algo/conformance/log_skeleton/algorithm.py @@ -0,0 +1,116 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.log_skeleton.variants import classic +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union, List, Set +from pm4py.objects.log.obj import EventLog, Trace +import pandas as pd + + +class Variants(Enum): + CLASSIC = classic + + +CLASSIC = Variants.CLASSIC +DEFAULT_VARIANT = Variants.CLASSIC + + +def apply(obj: Union[EventLog, Trace, pd.DataFrame], model: Dict[str, Any], variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> List[Set[Any]]: + """ + Apply log-skeleton based conformance checking given an event log/trace + and a log-skeleton model + + Parameters + -------------- + obj + Object (event log/trace) + model + Log-skeleton model + variant + Variant of the algorithm, possible values: Variants.CLASSIC + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.CONSIDERED_CONSTRAINTS, among: equivalence, always_after, always_before, never_together, directly_follows, activ_freq + + Returns + -------------- + aligned_traces + Conformance checking results for each trace: + - Outputs.IS_FIT => boolean that tells if the trace is perfectly fit according to the model + - Outputs.DEV_FITNESS => deviation based fitness (between 0 and 1; the more the trace is near to 1 the more fit is) + - Outputs.DEVIATIONS => list of deviations in the model + """ + if parameters is None: + parameters = {} + + if type(obj) is Trace: + return exec_utils.get_variant(variant).apply_trace(obj, model, parameters=parameters) + else: + return exec_utils.get_variant(variant).apply_log(obj, model, parameters=parameters) + + +def apply_from_variants_list(var_list: List[List[str]], model: Dict[str, Any], variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> List[Set[Any]]: + """ + Performs conformance checking using the log skeleton, + applying it from a list of variants + + Parameters + -------------- + var_list + List of variants + model + Log skeleton model + variant + Variant of the algorithm, possible values: Variants.CLASSIC + parameters + Parameters + + Returns + -------------- + conformance_dictio + Dictionary containing, for each variant, the result + of log skeleton checking + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply_from_variants_list(var_list, model, parameters=parameters) + + +def get_diagnostics_dataframe(log: EventLog, conf_result: List[Set[Any]], variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Gets the diagnostics dataframe from a log and the results + of log skeleton-based conformance checking + + Parameters + -------------- + log + Event log + conf_result + Results of conformance checking + + Returns + -------------- + diagn_dataframe + Diagnostics dataframe + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).get_diagnostics_dataframe(log, conf_result, parameters=parameters) diff --git a/pm4py/pm4py/algo/conformance/log_skeleton/variants/__init__.py b/pm4py/pm4py/algo/conformance/log_skeleton/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1cada597c84fd2f8d5baeab9b28a2545cde77c28 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/log_skeleton/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.log_skeleton.variants import classic diff --git a/pm4py/pm4py/algo/conformance/log_skeleton/variants/classic.py b/pm4py/pm4py/algo/conformance/log_skeleton/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..dd3becf4eea05ca2783c18372317392f1bf29a01 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/log_skeleton/variants/classic.py @@ -0,0 +1,327 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.util import xes +from pm4py.algo.discovery.log_skeleton import trace_skel +from pm4py.util import xes_constants +from pm4py.util import variants_util, pandas_utils +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union, List, Set +from pm4py.objects.log.obj import EventLog, Trace +import pandas as pd + +from enum import Enum +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_CASEID_KEY, CASE_CONCEPT_NAME + + +class Parameters(Enum): + # parameter for the noise threshold + NOISE_THRESHOLD = "noise_threshold" + # considered constraints in conformance checking among: equivalence, always_after, always_before, never_together, directly_follows, activ_freq + CONSIDERED_CONSTRAINTS = "considered_constraints" + # default choice for conformance checking + DEFAULT_CONSIDERED_CONSTRAINTS = ["equivalence", "always_after", "always_before", "never_together", + "directly_follows", "activ_freq"] + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + + +NOISE_THRESHOLD = Parameters.NOISE_THRESHOLD +CONSIDERED_CONSTRAINTS = Parameters.CONSIDERED_CONSTRAINTS +DEFAULT_CONSIDERED_CONSTRAINTS = Parameters.DEFAULT_CONSIDERED_CONSTRAINTS +ACTIVITY_KEY = Parameters.ACTIVITY_KEY +PARAMETER_VARIANT_DELIMITER = Parameters.PARAMETER_VARIANT_DELIMITER + + +class DiscoveryOutputs(Enum): + EQUIVALENCE = "equivalence" + ALWAYS_AFTER = "always_after" + ALWAYS_BEFORE = "always_before" + NEVER_TOGETHER = "never_together" + DIRECTLY_FOLLOWS = "directly_follows" + ACTIV_FREQ = "activ_freq" + + +class Outputs(Enum): + DEVIATIONS = "deviations" + NO_DEV_TOTAL = "no_dev_total" + NO_CONSTR_TOTAL = "no_constr_total" + DEV_FITNESS = "dev_fitness" + IS_FIT = "is_fit" + + +def apply_log(log: Union[EventLog, pd.DataFrame], model: Dict[str, Any], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[Set[Any]]: + """ + Apply log-skeleton based conformance checking given an event log + and a log-skeleton model + + Parameters + -------------- + log + Event log + model + Log-skeleton model + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.CONSIDERED_CONSTRAINTS, among: equivalence, always_after, always_before, never_together, directly_follows, activ_freq + + Returns + -------------- + aligned_traces + Conformance checking results for each trace: + - Outputs.IS_FIT => boolean that tells if the trace is perfectly fit according to the model + - Outputs.DEV_FITNESS => deviation based fitness (between 0 and 1; the more the trace is near to 1 the more fit is) + - Outputs.DEVIATIONS => list of deviations in the model + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + + if pandas_utils.check_is_pandas_dataframe(log): + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + traces = [tuple(x) for x in log.groupby(case_id_key)[activity_key].agg(list).to_dict().values()] + else: + traces = [tuple(y[activity_key] for y in x) for x in log] + grouped_traces = {} + gtk = [] + inv_idxs = {} + for i in range(len(traces)): + tr = traces[i] + if not tr in grouped_traces: + grouped_traces[tr] = [] + gtk.append(tr) + grouped_traces[tr].append(i) + inv_idxs[i] = gtk.index(tr) + + res0 = [] + for trace in grouped_traces: + res0.append(apply_actlist(trace, model, parameters=parameters)) + + res = [] + for i in range(len(traces)): + res.append(res0[inv_idxs[i]]) + + return res + + +def apply_trace(trace: Trace, model: Dict[str, Any], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[Set[Any]]: + """ + Apply log-skeleton based conformance checking given a trace + and a log-skeleton model + + Parameters + -------------- + trace + Trace + model + Log-skeleton model + parameters + Parameters of the algorithm, including: + - the activity key (pm4py:param:activity_key) + - the list of considered constraints (considered_constraints) among: equivalence, always_after, always_before, never_together, directly_follows, activ_freq + + Returns + -------------- + aligned_trace + Containing: + - is_fit => boolean that tells if the trace is perfectly fit according to the model + - dev_fitness => deviation based fitness (between 0 and 1; the more the trace is near to 1 the more fit is) + - deviations => list of deviations in the model + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + trace = [x[activity_key] for x in trace] + + return apply_actlist(trace, model, parameters=parameters) + + +def apply_actlist(trace, model, parameters=None): + """ + Apply log-skeleton based conformance checking given the list of activities of a trace + and a log-skeleton model + + Parameters + -------------- + trace + List of activities of a trace + model + Log-skeleton model + parameters + Parameters of the algorithm, including: + - the activity key (pm4py:param:activity_key) + - the list of considered constraints (considered_constraints) among: equivalence, always_after, always_before, never_together, directly_follows, activ_freq + + Returns + -------------- + aligned_trace + Containing: + - is_fit => boolean that tells if the trace is perfectly fit according to the model + - dev_fitness => deviation based fitness (between 0 and 1; the more the trace is near to 1 the more fit is) + - deviations => list of deviations in the model + """ + if parameters is None: + parameters = {} + + consid_constraints = exec_utils.get_param_value(Parameters.CONSIDERED_CONSTRAINTS, parameters, Parameters.DEFAULT_CONSIDERED_CONSTRAINTS.value) + trace_info = trace_skel.get_trace_info(trace) + + ret = {} + ret[Outputs.DEVIATIONS.value] = [] + dev_total = 0 + conf_total = 0 + + default_considered_constraints = Parameters.DEFAULT_CONSIDERED_CONSTRAINTS.value + + i = 0 + while i < len(default_considered_constraints): + if default_considered_constraints[i] in consid_constraints: + if default_considered_constraints[i] == DiscoveryOutputs.ACTIV_FREQ.value: + this_constraints = {x: y for x, y in model[default_considered_constraints[i]].items()} + conf_total += len(list(act for act in trace_info[i] if act in this_constraints)) + len(list(act for act in trace_info[i] if act not in this_constraints)) + len(list(act for act in this_constraints if min(this_constraints[act]) > 0 and not act in trace)) + for act in trace_info[i]: + if act in this_constraints: + if trace_info[i][act] not in this_constraints[act]: + dev_total += 1 + ret[Outputs.DEVIATIONS.value].append((default_considered_constraints[i], (act, trace_info[i][act]))) + else: + dev_total += 1 + ret[Outputs.DEVIATIONS.value].append((default_considered_constraints[i], (act, 0))) + for act in this_constraints: + if min(this_constraints[act]) > 0 and not act in trace: + dev_total += 1 + ret[Outputs.DEVIATIONS.value].append((default_considered_constraints[i], (act, 0))) + elif default_considered_constraints[i] == DiscoveryOutputs.NEVER_TOGETHER.value: + this_constraints = {x for x in model[default_considered_constraints[i]] if x[0] in trace} + conf_total += len(this_constraints) + setinte = this_constraints.intersection(trace_info[i]) + dev_total += len(setinte) + if len(setinte) > 0: + ret[Outputs.DEVIATIONS.value].append((default_considered_constraints[i], tuple(setinte))) + else: + this_constraints = {x for x in model[default_considered_constraints[i]] if x[0] in trace} + conf_total += len(this_constraints) + setdiff = this_constraints.difference(trace_info[i]) + dev_total += len(setdiff) + if len(setdiff) > 0: + ret[Outputs.DEVIATIONS.value].append((default_considered_constraints[i], tuple(setdiff))) + i = i + 1 + ret[Outputs.NO_DEV_TOTAL.value] = dev_total + ret[Outputs.NO_CONSTR_TOTAL.value] = conf_total + ret[Outputs.DEV_FITNESS.value] = 1.0 - float(dev_total)/float(conf_total) if conf_total > 0 else 1.0 + ret[Outputs.DEVIATIONS.value] = sorted(ret[Outputs.DEVIATIONS.value], key=lambda x: (x[0], x[1])) + ret[Outputs.IS_FIT.value] = len(ret[Outputs.DEVIATIONS.value]) == 0 + return ret + + +def apply_from_variants_list(var_list, model, parameters=None): + """ + Performs conformance checking using the log skeleton, + applying it from a list of variants + + Parameters + -------------- + var_list + List of variants + model + Log skeleton model + parameters + Parameters + + Returns + -------------- + conformance_dictio + Dictionary containing, for each variant, the result + of log skeleton checking + """ + if parameters is None: + parameters = {} + + conformance_output = {} + + for cv in var_list: + v = cv[0] + trace = variants_util.variant_to_trace(v, parameters=parameters) + + conformance_output[v] = apply_trace(trace, model, parameters=parameters) + + return conformance_output + + +def after_decode(log_skeleton): + """ + Prepares the log skeleton after decoding + + Parameters + -------------- + log_skeleton + Log skeleton + + Returns + -------------- + log_skeleton + Log skeleton (with sets instead of lists) + """ + log_skeleton[DiscoveryOutputs.EQUIVALENCE.value] = set(log_skeleton[DiscoveryOutputs.EQUIVALENCE.value]) + log_skeleton[DiscoveryOutputs.ALWAYS_AFTER.value] = set(log_skeleton[DiscoveryOutputs.ALWAYS_AFTER.value]) + log_skeleton[DiscoveryOutputs.ALWAYS_BEFORE.value] = set(log_skeleton[DiscoveryOutputs.ALWAYS_BEFORE.value]) + log_skeleton[DiscoveryOutputs.NEVER_TOGETHER.value] = set(log_skeleton[DiscoveryOutputs.NEVER_TOGETHER.value]) + log_skeleton[DiscoveryOutputs.DIRECTLY_FOLLOWS.value] = set(log_skeleton[DiscoveryOutputs.DIRECTLY_FOLLOWS.value]) + for act in log_skeleton[DiscoveryOutputs.ACTIV_FREQ.value]: + log_skeleton[DiscoveryOutputs.ACTIV_FREQ.value][act] = set(log_skeleton[DiscoveryOutputs.ACTIV_FREQ.value][act]) + return log_skeleton + + +def get_diagnostics_dataframe(log, conf_result, parameters=None): + """ + Gets the diagnostics dataframe from a log and the results + of log skeleton-based conformance checking + + Parameters + -------------- + log + Event log + conf_result + Results of conformance checking + + Returns + -------------- + diagn_dataframe + Diagnostics dataframe + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + + import pandas as pd + + diagn_stream = [] + + for index in range(len(log)): + case_id = log[index].attributes[case_id_key] + + no_dev_total = conf_result[index][Outputs.NO_DEV_TOTAL.value] + no_constr_total = conf_result[index][Outputs.NO_CONSTR_TOTAL.value] + dev_fitness = conf_result[index][Outputs.DEV_FITNESS.value] + + diagn_stream.append({"case_id": case_id, "no_dev_total": no_dev_total, "no_constr_total": no_constr_total, "dev_fitness": dev_fitness}) + + return pandas_utils.instantiate_dataframe(diagn_stream) diff --git a/pm4py/pm4py/algo/conformance/multialignments/__init__.py b/pm4py/pm4py/algo/conformance/multialignments/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2e268a3020504b2c27ed9740689dcc462c8865b6 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/multialignments/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.multialignments import variants, algorithm diff --git a/pm4py/pm4py/algo/conformance/multialignments/algorithm.py b/pm4py/pm4py/algo/conformance/multialignments/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..c09344d7ace66ce00e62ca004dadcfc39b8c1be3 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/multialignments/algorithm.py @@ -0,0 +1,82 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.petri_net.utils import check_soundness +import time +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_CASEID_KEY +from pm4py.algo.conformance.multialignments import variants + + +class Variants(Enum): + VERSION_DISCOUNTED_A_STAR = variants.discounted_a_star + +class Parameters(Enum): + MARKING_LIMIT = "marking_limit" + EXPONENT = "exponent" + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + +DEFAULT_VARIANT = Variants.VERSION_DISCOUNTED_A_STAR +VERSION_DISCOUNTED_A_STAR = Variants.VERSION_DISCOUNTED_A_STAR + +VERSIONS = {Variants.VERSION_DISCOUNTED_A_STAR} + + +def apply(log, petri_net, initial_marking, final_marking, parameters=None, variant=DEFAULT_VARIANT): + if parameters is None: + parameters = {} + return apply_log(log_converter.apply(log, parameters, log_converter.TO_EVENT_LOG), petri_net, initial_marking, + final_marking, parameters=parameters, variant=variant) + + +def apply_log(log, petri_net, initial_marking, final_marking, parameters=None, variant=DEFAULT_VARIANT): + """ + apply multialignments to a log + Parameters + ----------- + log + object of the form :class:`pm4py.log.log.EventLog` event log + petri_net + :class:`pm4py.objects.petri.petrinet.PetriNet` the model to use for the alignment + initial_marking + :class:`pm4py.objects.petri.petrinet.Marking` initial marking of the net + final_marking + :class:`pm4py.objects.petri.petrinet.Marking` final marking of the net + variant + selected variant of the algorithm + parameters + :class:`dict` parameters of the algorithm, + + Returns + ----------- + """ + if parameters is None: + parameters = dict() + + if not check_soundness.check_easy_soundness_net_in_fin_marking(petri_net, initial_marking, final_marking): + raise Exception("Trying to apply multi-alignments on a Petri net that is not an sound net.") + + start_time = time.time() + + multialignments = exec_utils.get_variant(variant).apply(log, petri_net, initial_marking, final_marking, parameters=None) + + total_time = start_time - time.time() + + return multialignments + diff --git a/pm4py/pm4py/algo/conformance/multialignments/variants/__init__.py b/pm4py/pm4py/algo/conformance/multialignments/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..48073587f63abc9fb36c836f655ab8287e75cb1a --- /dev/null +++ b/pm4py/pm4py/algo/conformance/multialignments/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.multialignments.variants import discounted_a_star diff --git a/pm4py/pm4py/algo/conformance/multialignments/variants/discounted_a_star.py b/pm4py/pm4py/algo/conformance/multialignments/variants/discounted_a_star.py new file mode 100644 index 0000000000000000000000000000000000000000..951075aa9ad6412e175e9b3ce21cc91dd0eab096 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/multialignments/variants/discounted_a_star.py @@ -0,0 +1,163 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import heapq +from pm4py.objects.petri_net.utils.align_utils import levenshtein, discountedEditDistance +from pm4py.objects.petri_net.utils.petri_utils import decorate_places_preset_trans, decorate_transitions_prepostset +from pm4py.objects.petri_net.utils import align_utils as utils +from pm4py.util import exec_utils +from copy import copy +from enum import Enum +from pm4py.statistics.variants.log import get as variants_module + +''' +This algorithm computes discounted multi-alignment. +More details in Boltenhagen's thesis +Author: Author: Boltenhagen Mathilde, Thomas Chatain, Josep Carmona +Date: Jan. 2021 +''' + +class Parameters(Enum): + MARKING_LIMIT = "marking_limit" + EXPONENT = "exponent" + + +def apply(log, petri_net, ini, fin, parameters=None): + """ + This function is a preliminary function for __search of the dijkstra_exponential_heuristic for multi-alignment. + The function gets the parameters and launches the algorithm on the variants (all traces aren't usefull for MA, see Boltenhagen's thesis). + """ + + # get variants + variants_idxs = variants_module.get_variants_from_log_trace_idx(log, parameters=parameters) + variants = [] + for index_variant, var in enumerate(variants_idxs): + variants.append(var.split(",")) + + # get the number of times we can reach the same marking, very usefull for concurrency and loops + marking_limit = exec_utils.get_param_value(Parameters.MARKING_LIMIT, parameters, None) + if marking_limit is None: + marking_limit=100000 + + # the discounted parameter + exponent = exec_utils.get_param_value(Parameters.EXPONENT, parameters, None) + if exponent is None: + exponent=2 + + return __search(petri_net, ini, fin, variants, marking_limit=marking_limit, exponent=exponent) + + +def __search(net, ini, fin, variants, exponent=2, marking_limit=1000): + ''' + This function is the A* algorithm for multi-alignments. + ''' + + decorate_transitions_prepostset(net) + decorate_places_preset_trans(net) + + mymemory={} + closed = {} + + ini_state = utils.DijkstraSearchTupleForAntiAndMulti(0, ini, []) + open_set = [ini_state] + heapq.heapify(open_set) + visited = 0 + queued = 0 + traversed = 0 + best, sizeAA = None, None + + distanceTime = 0 + trans_empty_preset = set(t for t in net.transitions if len(t.in_arcs) == 0) + + def costfunction(t, curr_ma, withFrac=True): + ''' + Compute the maximal distance of the current multi-alignment + t and the variants. + :param t: transition that we want to add in the current multi-alignment + :param curr_ma: current prefix of multi-alignment + :param withFrac: the fraction that prevents the best suffice, this parameter is false at the end of the algorithm. + ''' + if t is None : + str_aa = [a.label for a in curr_ma] + elif len(curr_ma)==0 : + str_aa = [t.label] + else : + str_aa = [a.label for a in curr_ma] + [t.label] + + all= [] + for v in variants: + if str(v+str_aa) not in mymemory.keys() or not withFrac: + size_of_alignment, distance = discountedEditDistance(str_aa,v, exponent) + if withFrac: + mymemory[str(v+str_aa)] = distance - (exponent**(-len(str_aa)+1)-exponent**(-(len(str_aa)+len(v))))/(exponent-1) + else : + mymemory[str(v+str_aa)] = distance + all.append(mymemory[str(v+str_aa)]) + return max(all) + + # ---------------------------- + # a* algorithm starts here + while not len(open_set) == 0: + curr = heapq.heappop(open_set) + + if best and best.g < curr.g: + continue + + if curr.m == fin: + curr.g = costfunction(None, curr.r, withFrac=False) + # in case there only one run + if not best and (len(heapq.nsmallest(1,open_set))==0 or heapq.nsmallest(1,open_set)[0].g > curr.g): + return {'multi-alignment': curr.r, 'cost': curr.g, 'visited_states': visited, 'queued_states': queued, + 'traversed_arcs': traversed, "max_distance_to_log":getMaxDist(curr.r,variants)} + + # other runs might be interesting + elif not best or (best and best.g > curr.g): + best = curr + continue + + closed[curr.m]= 1 if (curr.m) not in closed.keys() else closed[curr.m]+1 + + visited += 1 + + possible_enabling_transitions = copy(trans_empty_preset) + for p in curr.m: + for t in p.ass_trans: + possible_enabling_transitions.add(t) + + enabled_trans = [t for t in possible_enabling_transitions if t.sub_marking <= curr.m] + trans_to_visit_with_cost = [(t, costfunction(t,curr.r, withFrac=True)) for t in enabled_trans if t is not None] + + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = utils.add_markings(curr.m, t.add_marking) + + if ((new_marking) in closed.keys() and closed[new_marking]>marking_limit) or cost==curr.g: + continue + queued += 1 + tp = utils.DijkstraSearchTupleForAntiAndMulti(cost, new_marking, curr.r + [t]) + heapq.heappush(open_set, tp) + + return {'multi-alignment': best.r, 'cost': best.g, 'visited_states': visited, 'queued_states': queued, + 'traversed_arcs': traversed, "max_distance_to_log":getMaxDist(best.r,variants)} + +def getMaxDist(run, variants): + ''' + We give the maximal levenshtein edit distance to the variants + ''' + run = [a.label for a in run] + all= [] + for v in variants: + all.append(levenshtein(run,v)) + return max(all) \ No newline at end of file diff --git a/pm4py/pm4py/algo/conformance/temporal_profile/__init__.py b/pm4py/pm4py/algo/conformance/temporal_profile/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3d2077861e524de25f37daaf2f2ff925144593e6 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/temporal_profile/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.temporal_profile import algorithm, variants diff --git a/pm4py/pm4py/algo/conformance/temporal_profile/algorithm.py b/pm4py/pm4py/algo/conformance/temporal_profile/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..cdda93684cca337132be26e176f8bd2676197d50 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/temporal_profile/algorithm.py @@ -0,0 +1,116 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any, Union + +import pandas as pd + +from pm4py.algo.conformance.temporal_profile.variants import log, dataframe +from pm4py.objects.log.obj import EventLog +from pm4py.util import typing, exec_utils, constants, xes_constants, pandas_utils +from pm4py.objects.conversion.log import converter as log_converter +from enum import Enum + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def apply(elog: Union[EventLog, pd.DataFrame], temporal_profile: typing.TemporalProfile, + parameters: Optional[Dict[Any, Any]] = None) -> typing.TemporalProfileConformanceResults: + """ + Checks the conformance of the log using the provided temporal profile. + + Implements the approach described in: + Stertz, Florian, Jürgen Mangler, and Stefanie Rinderle-Ma. "Temporal Conformance Checking at Runtime based on Time-infused Process Models." arXiv preprint arXiv:2008.07262 (2020). + + + Parameters + --------------- + elog + Event log + temporal_profile + Temporal profile + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.START_TIMESTAMP_KEY => the attribute to use as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.ZETA => multiplier for the standard deviation + + Returns + --------------- + list_dev + A list containing, for each trace, all the deviations. + Each deviation is a tuple with four elements: + - 1) The source activity of the recorded deviation + - 2) The target activity of the recorded deviation + - 3) The time passed between the occurrence of the source activity and the target activity + - 4) The value of (time passed - mean)/std for this occurrence (zeta). + """ + if pandas_utils.check_is_pandas_dataframe(elog): + return dataframe.apply(elog, temporal_profile, parameters=parameters) + else: + elog = log_converter.apply(elog, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + return log.apply(elog, temporal_profile, parameters=parameters) + + +def get_diagnostics_dataframe(elog: Union[EventLog, pd.DataFrame], conf_result: typing.TemporalProfileConformanceResults, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Gets the diagnostics dataframe from a log and the results + of temporal profle-based conformance checking + + Parameters + -------------- + log + Event log + conf_result + Results of conformance checking + + Returns + -------------- + diagn_dataframe + Diagnostics dataframe + """ + if parameters is None: + parameters = {} + + if pandas_utils.check_is_pandas_dataframe(elog): + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + cases = pandas_utils.format_unique(elog[case_id_key].unique()) + else: + elog = log_converter.apply(elog, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + cases = [x.attributes[case_id_key] for x in elog] + + case = [] + source_activities = [] + target_activities = [] + throughput = [] + num_st_devs = [] + + for i in range(len(conf_result)): + for el in conf_result[i]: + case.append(cases[i]) + source_activities.append(el[0]) + target_activities.append(el[1]) + throughput.append(el[2]) + num_st_devs.append(el[3]) + + dataframe = pandas_utils.instantiate_dataframe({"case": case, "source_activity": source_activities, "target_activity": target_activities, "throughput": throughput, "num_st_devs": num_st_devs}) + + return dataframe diff --git a/pm4py/pm4py/algo/conformance/temporal_profile/variants/__init__.py b/pm4py/pm4py/algo/conformance/temporal_profile/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ad29938d6877263512c7986e63dc0521a96786e1 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/temporal_profile/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.temporal_profile.variants import log, dataframe diff --git a/pm4py/pm4py/algo/conformance/temporal_profile/variants/dataframe.py b/pm4py/pm4py/algo/conformance/temporal_profile/variants/dataframe.py new file mode 100644 index 0000000000000000000000000000000000000000..bd9afcda629a582c8da2edc32c07fadafbb447fb --- /dev/null +++ b/pm4py/pm4py/algo/conformance/temporal_profile/variants/dataframe.py @@ -0,0 +1,107 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +from enum import Enum +from typing import Optional, Dict, Any + +import pandas as pd + +from pm4py.algo.discovery.dfg.adapters.pandas.df_statistics import get_partial_order_dataframe +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from pm4py.util import typing + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ZETA = "zeta" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def apply(df: pd.DataFrame, temporal_profile: typing.TemporalProfile, + parameters: Optional[Dict[Any, Any]] = None) -> typing.TemporalProfileConformanceResults: + """ + Checks the conformance of the dataframe using the provided temporal profile. + + Implements the approach described in: + Stertz, Florian, Jürgen Mangler, and Stefanie Rinderle-Ma. "Temporal Conformance Checking at Runtime based on Time-infused Process Models." arXiv preprint arXiv:2008.07262 (2020). + + + Parameters + --------------- + df + Pandas dataframe + temporal_profile + Temporal profile + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.START_TIMESTAMP_KEY => the attribute to use as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.ZETA => multiplier for the standard deviation + - Parameters.CASE_ID_KEY => column to use as case identifier + + Returns + --------------- + list_dev + A list containing, for each case, all the deviations. + Each deviation is a tuple with four elements: + - 1) The source activity of the recorded deviation + - 2) The target activity of the recorded deviation + - 3) The time passed between the occurrence of the source activity and the target activity + - 4) The value of (time passed - mean)/std for this occurrence (zeta). + + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + zeta = exec_utils.get_param_value(Parameters.ZETA, parameters, 6.0) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + temporal_profile = pandas_utils.instantiate_dataframe([{activity_key: x[0], activity_key + "_2": x[1], "@@min": y[0] - zeta * y[1], + "@@max": y[0] + zeta * y[1], "@@mean": y[0], "@@std": y[1]} for x, y in + temporal_profile.items()]) + + cases = pandas_utils.format_unique(df[case_id_key].unique()) + ret = [[] for c in cases] + efg = get_partial_order_dataframe(df, activity_key=activity_key, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key, case_id_glue=case_id_key, + keep_first_following=False, business_hours=business_hours, + business_hours_slot=business_hours_slots, workcalendar=workcalendar) + efg = efg[[case_id_key, activity_key, activity_key + "_2", "@@flow_time"]] + efg = efg.merge(temporal_profile, on=[activity_key, activity_key + "_2"]) + efg = efg[(efg["@@flow_time"] < efg["@@min"]) | (efg["@@flow_time"] > efg["@@max"])][ + [case_id_key, activity_key, activity_key + "_2", "@@flow_time", "@@mean", "@@std"]].to_dict("records") + + for el in efg: + this_zeta = abs(el["@@flow_time"] - el["@@mean"]) / el["@@std"] if el["@@std"] > 0 else sys.maxsize + ret[cases.index(el[case_id_key])].append( + (el[activity_key], el[activity_key + "_2"], el["@@flow_time"], this_zeta)) + + return ret diff --git a/pm4py/pm4py/algo/conformance/temporal_profile/variants/log.py b/pm4py/pm4py/algo/conformance/temporal_profile/variants/log.py new file mode 100644 index 0000000000000000000000000000000000000000..c10224c2d04049fbb86660714cf202459f83432b --- /dev/null +++ b/pm4py/pm4py/algo/conformance/temporal_profile/variants/log.py @@ -0,0 +1,123 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.util import typing +from pm4py.util.business_hours import BusinessHours + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + ZETA = "zeta" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def apply(log: EventLog, temporal_profile: typing.TemporalProfile, + parameters: Optional[Dict[Any, Any]] = None) -> typing.TemporalProfileConformanceResults: + """ + Checks the conformance of the log using the provided temporal profile. + + Implements the approach described in: + Stertz, Florian, Jürgen Mangler, and Stefanie Rinderle-Ma. "Temporal Conformance Checking at Runtime based on Time-infused Process Models." arXiv preprint arXiv:2008.07262 (2020). + + + Parameters + --------------- + log + Event log + temporal_profile + Temporal profile + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.START_TIMESTAMP_KEY => the attribute to use as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.ZETA => multiplier for the standard deviation + - Parameters.BUSINESS_HOURS => calculates the difference of time based on the business hours, not the total time. + Default: False + - Parameters.BUSINESS_HOURS_SLOTS => + work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business + hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. + [ + (7 * 60 * 60, 17 * 60 * 60), + ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), + ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60), + ] + meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + + Returns + --------------- + list_dev + A list containing, for each trace, all the deviations. + Each deviation is a tuple with four elements: + - 1) The source activity of the recorded deviation + - 2) The target activity of the recorded deviation + - 3) The time passed between the occurrence of the source activity and the target activity + - 4) The value of (time passed - mean)/std for this occurrence (zeta). + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + zeta = exec_utils.get_param_value(Parameters.ZETA, parameters, 6.0) + + ret = [] + + for trace in log: + deviations = [] + for i in range(len(trace) - 1): + act_i = trace[i][activity_key] + time_i = trace[i][timestamp_key].timestamp() + for j in range(i + 1, len(trace)): + time_j = trace[j][start_timestamp_key].timestamp() + if time_j >= time_i: + act_j = trace[j][activity_key] + if (act_i, act_j) in temporal_profile: + if business_hours: + bh = BusinessHours(trace[i][timestamp_key], + trace[j][start_timestamp_key], + business_hour_slots=business_hours_slots) + this_diff = bh.get_seconds() + else: + this_diff = time_j - time_i + mean = temporal_profile[(act_i, act_j)][0] + std = temporal_profile[(act_i, act_j)][1] + if this_diff < mean - zeta * std or this_diff > mean + zeta * std: + this_zeta = abs(this_diff - mean) / std if std > 0 else sys.maxsize + deviations.append((act_i, act_j, this_diff, this_zeta)) + + ret.append(deviations) + + return ret diff --git a/pm4py/pm4py/algo/conformance/tokenreplay/__init__.py b/pm4py/pm4py/algo/conformance/tokenreplay/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ee11a465dce639ccacf8d6bf668a432364d80a47 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/tokenreplay/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.tokenreplay import variants, diagnostics, algorithm diff --git a/pm4py/pm4py/algo/conformance/tokenreplay/algorithm.py b/pm4py/pm4py/algo/conformance/tokenreplay/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..ec8983560a8ee58fa30ca773dcfa9018958318ea --- /dev/null +++ b/pm4py/pm4py/algo/conformance/tokenreplay/algorithm.py @@ -0,0 +1,86 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.tokenreplay.variants import token_replay, backwards +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing + + +class Variants(Enum): + TOKEN_REPLAY = token_replay + BACKWARDS = backwards + +VERSIONS = {Variants.TOKEN_REPLAY, Variants.BACKWARDS} +DEFAULT_VARIANT = Variants.TOKEN_REPLAY + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> typing.ListAlignments: + """ + Method to apply token-based replay + + Parameters + ----------- + log + Log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Activity key + variant + Variant of the algorithm to use: + - Variants.TOKEN_REPLAY + - Variants.BACKWARDS + """ + if parameters is None: + parameters = {} + return exec_utils.get_variant(variant).apply(log, net, initial_marking, + final_marking, parameters=parameters) + + +def get_diagnostics_dataframe(log: Union[EventLog, EventStream, pd.DataFrame], tbr_output: typing.ListAlignments, variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Gets the results of token-based replay in a dataframe + + Parameters + -------------- + log + Event log + tbr_output + Output of the token-based replay technique + variant + Variant of the algorithm to use: + - Variants.TOKEN_REPLAY + - Variants.BACKWARDS + + Returns + -------------- + dataframe + Diagnostics dataframe + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).get_diagnostics_dataframe(log, tbr_output, parameters=parameters) diff --git a/pm4py/pm4py/algo/conformance/tokenreplay/diagnostics/__init__.py b/pm4py/pm4py/algo/conformance/tokenreplay/diagnostics/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e1ef795c581438bd6ad602e6590938f8cf1ed3e3 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/tokenreplay/diagnostics/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.tokenreplay.diagnostics import root_cause_analysis, duration_diagnostics diff --git a/pm4py/pm4py/algo/conformance/tokenreplay/diagnostics/duration_diagnostics.py b/pm4py/pm4py/algo/conformance/tokenreplay/diagnostics/duration_diagnostics.py new file mode 100644 index 0000000000000000000000000000000000000000..53071bafe798d6c7d1f306eca61d12b526001e1a --- /dev/null +++ b/pm4py/pm4py/algo/conformance/tokenreplay/diagnostics/duration_diagnostics.py @@ -0,0 +1,179 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import deepcopy + +from pm4py.objects.log.util import basic_filter +from pm4py.util import xes_constants as xes + +from statistics import median +from enum import Enum +from pm4py.util import exec_utils +from pm4py.util import constants +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + + +def get_case_duration(case, timestamp_key=xes.DEFAULT_TIMESTAMP_KEY): + """ + Gets the duration of a case + + Parameters + ------------- + case + Case + timestamp_key + Attribute of the event to use as timestamp + + Returns + ------------- + case_duration + Case duration + """ + return (case[-1][timestamp_key] - case[0][timestamp_key]).total_seconds() + + +def get_median_case_duration(list_cases, timestamp_key=xes.DEFAULT_TIMESTAMP_KEY): + """ + Gets the median case duration of a list of cases + + Parameters + ------------- + list_cases + List of cases + timestamp_key + Attribute of the event to use as timestamp + + Returns + ------------- + median_case_duration + Median case duration + """ + durations = [] + for trace in list_cases: + durations.append(get_case_duration(trace, timestamp_key=timestamp_key)) + return median(durations) + + +def diagnose_from_notexisting_activities(log, notexisting_activities_in_model, parameters=None): + """ + Provide some conformance diagnostics related to activities that are not present in the model + + Parameters + ------------- + log + Trace log + notexisting_activities_in_model + Not existing activities in the model + parameters + Possible parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> attribute of the event containing the timestamp + + Returns + ------------- + diagnostics + For each problematic activity, diagnostics about case duration + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + diagnostics = {} + + parameters_filtering = deepcopy(parameters) + parameters_filtering["positive"] = False + values = list(notexisting_activities_in_model.keys()) + + filtered_log = basic_filter.filter_log_traces_attr(log, values, parameters=parameters_filtering) + + for act in notexisting_activities_in_model: + fit_cases = [] + containing_cases = [] + for trace in log: + if trace in notexisting_activities_in_model[act]: + containing_cases.append(trace) + elif trace in filtered_log: + fit_cases.append(trace) + if containing_cases and fit_cases: + n_containing = len(containing_cases) + n_fit = len(fit_cases) + fit_median_time = get_median_case_duration(fit_cases, timestamp_key=timestamp_key) + containing_median_time = get_median_case_duration(containing_cases, timestamp_key=timestamp_key) + relative_throughput = containing_median_time / fit_median_time if fit_median_time > 0 else 0 + + diagn_dict = {"n_containing": n_containing, "n_fit": n_fit, "fit_median_time": fit_median_time, + "containing_median_time": containing_median_time, + "relative_throughput": relative_throughput} + diagnostics[act] = diagn_dict + return diagnostics + + +def diagnose_from_trans_fitness(log, trans_fitness, parameters=None): + """ + Provide some conformance diagnostics related to transitions that are executed in a unfit manner + + Parameters + ------------- + log + Trace log + trans_fitness + For each transition, keeps track of unfit executions + parameters + Possible parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> attribute of the event containing the timestamp + + Returns + ------------- + diagnostics + For each problematic transition, diagnostics about case duration + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + diagnostics = {} + + parameters_filtering = deepcopy(parameters) + parameters_filtering["positive"] = True + + for trans in trans_fitness: + if len(trans_fitness[trans]["underfed_traces"]) > 0: + filtered_log_act = basic_filter.filter_log_traces_attr(log, [trans.label], parameters=parameters_filtering) + fit_cases = [] + underfed_cases = [] + for trace in log: + if trace in trans_fitness[trans]["underfed_traces"]: + underfed_cases.append(trace) + elif trace in filtered_log_act: + fit_cases.append(trace) + if fit_cases and underfed_cases: + n_fit = len(fit_cases) + n_underfed = len(underfed_cases) + fit_median_time = get_median_case_duration(fit_cases, timestamp_key=timestamp_key) + underfed_median_time = get_median_case_duration(underfed_cases, timestamp_key=timestamp_key) + relative_throughput = underfed_median_time / fit_median_time if fit_median_time > 0 else 0 + + diagn_dict = {"n_fit": n_fit, "n_underfed": n_underfed, "fit_median_time": fit_median_time, + "underfed_median_time": underfed_median_time, "relative_throughput": relative_throughput} + diagnostics[trans] = diagn_dict + return diagnostics diff --git a/pm4py/pm4py/algo/conformance/tokenreplay/diagnostics/root_cause_analysis.py b/pm4py/pm4py/algo/conformance/tokenreplay/diagnostics/root_cause_analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..9a8fa49d7589c4d7f3bcecb356956706d043087f --- /dev/null +++ b/pm4py/pm4py/algo/conformance/tokenreplay/diagnostics/root_cause_analysis.py @@ -0,0 +1,290 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import deepcopy +from enum import Enum + +import numpy as np + +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.objects.log.util import basic_filter +from pm4py.util import exec_utils +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + STRING_ATTRIBUTES = "string_attributes" + NUMERIC_ATTRIBUTES = "numeric_attributes" + ENABLE_MULTIPLIER = "enable_multiplier" + + +def form_log_from_dictio_couple(first_cases_repr, second_cases_repr, enable_multiplier=False): + """ + Form a log from a couple of dictionary, to use for + root cause analysis + + Parameters + ------------- + first_cases_repr + First cases representation + second_cases_repr + Second cases representation + enable_multiplier + Enable balancing of classes + + Returns + ------------ + log + Trace log object + """ + log = EventLog() + + if enable_multiplier: + multiplier_first = int(max(float(len(second_cases_repr)) / float(len(first_cases_repr)), 1)) + multiplier_second = int(max(float(len(first_cases_repr)) / float(len(second_cases_repr)), 1)) + else: + multiplier_first = 1 + multiplier_second = 1 + + for j in range(multiplier_first): + for i in range(len(first_cases_repr)): + trace = Trace() + event = Event(first_cases_repr[i]) + trace.append(event) + log.append(trace) + + for j in range(multiplier_second): + for i in range(len(second_cases_repr)): + trace = Trace() + event = Event(second_cases_repr[i]) + trace.append(event) + log.append(trace) + + return log + + +def form_representation_from_dictio_couple(first_cases_repr, second_cases_repr, string_attributes, numeric_attributes, + enable_multiplier=False): + """ + Gets a log representation, useful for training the decision tree, + from a couple of dictionaries along with the list of string attributes + and numeric attributes to consider, to use for root cause analysis + + Parameters + ------------ + first_cases_repr + First cases representation + second_cases_repr + Second cases representation + string_attributes + String attributes contained in the log + numeric_attributes + Numeric attributes contained in the log + enable_multiplier + Enable balancing of classes + + Returns + ------------ + data + Matrix representation of the event log + feature_names + Array of feature names + """ + from pm4py.algo.transformation.log_to_features import algorithm as log_to_features + + log = form_log_from_dictio_couple(first_cases_repr, second_cases_repr, + enable_multiplier=enable_multiplier) + + data, feature_names = log_to_features.apply(log, variant=log_to_features.Variants.TRACE_BASED, + parameters={"str_tr_attr": [], "str_ev_attr": string_attributes, + "num_tr_attr": [], "num_ev_attr": numeric_attributes}) + + return data, feature_names + + +def diagnose_from_trans_fitness(log, trans_fitness, parameters=None): + """ + Perform root cause analysis starting from transition fitness knowledge + + Parameters + ------------- + log + Trace log object + trans_fitness + Transition fitness object + parameters + Possible parameters of the algorithm, including: + string_attributes -> List of string event attributes to consider + in building the decision tree + numeric_attributes -> List of numeric event attributes to consider + in building the decision tree + + Returns + ----------- + diagnostics + For each problematic transition: + - a decision tree comparing fit and unfit executions + - feature names + - classes + """ + from pm4py.util import ml_utils + + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + diagnostics = {} + string_attributes = exec_utils.get_param_value(Parameters.STRING_ATTRIBUTES, parameters, []) + numeric_attributes = exec_utils.get_param_value(Parameters.NUMERIC_ATTRIBUTES, parameters, []) + enable_multiplier = exec_utils.get_param_value(Parameters.ENABLE_MULTIPLIER, parameters, False) + + for trans in trans_fitness: + if len(trans_fitness[trans]["underfed_traces"]) > 0: + fit_cases_repr = [] + underfed_cases_repr = [] + + for trace in log: + if trace in trans_fitness[trans]["underfed_traces"]: + underfed_cases_repr.append(trans_fitness[trans]["underfed_traces"][trace][0]) + elif trace in trans_fitness[trans]["fit_traces"]: + fit_cases_repr.append(trans_fitness[trans]["fit_traces"][trace][0]) + + if fit_cases_repr and underfed_cases_repr: + data, feature_names = form_representation_from_dictio_couple(fit_cases_repr, underfed_cases_repr, + string_attributes, numeric_attributes, + enable_multiplier=enable_multiplier) + target = [] + classes = [] + + if enable_multiplier: + multiplier_first = int(max(float(len(underfed_cases_repr)) / float(len(fit_cases_repr)), 1)) + multiplier_second = int(max(float(len(fit_cases_repr)) / float(len(underfed_cases_repr)), 1)) + else: + multiplier_first = 1 + multiplier_second = 1 + + for j in range(multiplier_first): + for i in range(len(fit_cases_repr)): + target.append(0) + classes.append("fit") + + for j in range(multiplier_second): + for i in range(len(underfed_cases_repr)): + target.append(1) + classes.append("underfed") + + data = np.array([np.array(x) for x in data]) + + target = np.asarray(target) + clf = ml_utils.DecisionTreeClassifier(max_depth=7) + clf.fit(data, target) + diagn_dict = {"clf": clf, "data": data, "feature_names": feature_names, "target": target, + "classes": classes} + + diagnostics[trans] = diagn_dict + + return diagnostics + + +def diagnose_from_notexisting_activities(log, notexisting_activities_in_model, parameters=None): + """ + Perform root cause analysis related to activities that are not present in the model + + Parameters + ------------- + log + Trace log object + notexisting_activities_in_model + Not existing activities in the model + parameters + Possible parameters of the algorithm, including: + string_attributes -> List of string event attributes to consider + in building the decision tree + numeric_attributes -> List of numeric event attributes to consider + in building the decision tree + + Returns + ----------- + diagnostics + For each problematic transition: + - a decision tree comparing fit and unfit executions + - feature names + - classes + """ + from pm4py.util import ml_utils + + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + diagnostics = {} + string_attributes = exec_utils.get_param_value(Parameters.STRING_ATTRIBUTES, parameters, []) + numeric_attributes = exec_utils.get_param_value(Parameters.NUMERIC_ATTRIBUTES, parameters, []) + enable_multiplier = exec_utils.get_param_value(Parameters.ENABLE_MULTIPLIER, parameters, False) + + parameters_filtering = deepcopy(parameters) + parameters_filtering["positive"] = False + values = list(notexisting_activities_in_model.keys()) + + filtered_log = basic_filter.filter_log_traces_attr(log, values, parameters=parameters_filtering) + + for act in notexisting_activities_in_model: + fit_cases_repr = [] + containing_cases_repr = [] + for trace in log: + if trace in notexisting_activities_in_model[act]: + containing_cases_repr.append(notexisting_activities_in_model[act][trace]) + elif trace in filtered_log: + fit_cases_repr.append(dict(trace[-1])) + + if fit_cases_repr and containing_cases_repr: + data, feature_names = form_representation_from_dictio_couple(fit_cases_repr, containing_cases_repr, + string_attributes, numeric_attributes, + enable_multiplier=enable_multiplier) + + target = [] + classes = [] + + if enable_multiplier: + multiplier_first = int(max(float(len(containing_cases_repr)) / float(len(fit_cases_repr)), 1)) + multiplier_second = int(max(float(len(fit_cases_repr)) / float(len(containing_cases_repr)), 1)) + else: + multiplier_first = 1 + multiplier_second = 1 + + for j in range(multiplier_first): + for i in range(len(fit_cases_repr)): + target.append(0) + classes.append("fit") + + for j in range(multiplier_second): + for i in range(len(containing_cases_repr)): + target.append(1) + classes.append("containing") + + data = np.array([np.array(x) for x in data]) + + target = np.asarray(target) + clf = ml_utils.DecisionTreeClassifier(max_depth=7) + clf.fit(data, target) + diagn_dict = {"clf": clf, "data": data, "feature_names": feature_names, "target": target, + "classes": classes} + + diagnostics[act] = diagn_dict + + return diagnostics diff --git a/pm4py/pm4py/algo/conformance/tokenreplay/variants/__init__.py b/pm4py/pm4py/algo/conformance/tokenreplay/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bf6d6ce2cfb50f791175ea4ea9edd0fcf197695d --- /dev/null +++ b/pm4py/pm4py/algo/conformance/tokenreplay/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.tokenreplay.variants import token_replay diff --git a/pm4py/pm4py/algo/conformance/tokenreplay/variants/backwards.py b/pm4py/pm4py/algo/conformance/tokenreplay/variants/backwards.py new file mode 100644 index 0000000000000000000000000000000000000000..84fe0dc7f75781d287ca291490fb2f1c935c57e2 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/tokenreplay/variants/backwards.py @@ -0,0 +1,375 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.variants.log import get as variants_filter +from pm4py.objects.petri_net.semantics import is_enabled, weak_execute +from pm4py.objects.petri_net.utils.align_utils import get_visible_transitions_eventually_enabled_by_marking +from copy import copy +from collections import Counter +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +import warnings +from enum import Enum +from pm4py.util import variants_util +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +import pandas as pd +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + VARIANTS = "variants" + PLACES_SHORTEST_PATH_BY_HIDDEN = "places_shortest_path_by_hidden" + THREAD_MAX_EX_TIME = "thread_maximum_ex_time" + DISABLE_VARIANTS = "disable_variants" + CLEANING_TOKEN_FLOOD = "cleaning_token_flood" + IS_REDUCTION = "is_reduction" + WALK_THROUGH_HIDDEN_TRANS = "walk_through_hidden_trans" + RETURN_NAMES = "return_names" + STOP_IMMEDIATELY_UNFIT = "stop_immediately_unfit" + TRY_TO_REACH_FINAL_MARKING_THROUGH_HIDDEN = "try_to_reach_final_marking_through_hidden" + CONSIDER_REMAINING_IN_FITNESS = "consider_remaining_in_fitness" + ENABLE_PLTR_FITNESS = "enable_pltr_fitness" + + +def get_bmap(net, m, bmap): + """ + Updates the B-map with the invisibles enabling marking m + + Parameters + -------------- + net + Petri net + m + Marking + bmap + B-map + + Returns + -------------- + trans_list + List of invisibles that enable m + """ + if m not in bmap: + bmap[m] = [] + for t in net.transitions: + if t.label is None: + if m <= t.out_marking: + bmap[m].append(t) + return bmap[m] + + +def diff_mark(m, t): + """ + Subtract from a marking the postset of t and adds the preset + + Parameters + ------------ + m + Marking + t + Transition + + Returns + ------------ + diff_mark + Difference marking + """ + for a in t.out_arcs: + p = a.target + w = a.weight + if p in m and w <= m[p]: + m[p] = m[p] - w + if m[p] == 0: + del m[p] + for a in t.in_arcs: + p = a.source + w = a.weight + if not p in m: + m[p] = 0 + m[p] = m[p] + w + return m + + +def explore_backwards(re_list, all_vis, net, m, bmap): + """ + Do the backwards state space exploration + + Parameters + -------------- + re_list + List of remaining markings to visit using the backwards approach + all_vis + Set of visited transitions + net + Petri net + m + Marking + bmap + B-map of the net + + Returns + ------------ + list_tr + List of transitions to enable in order to enable a marking (otherwise None) + """ + i = 0 + while i < len(re_list): + curr = re_list[i] + if curr[1] <= m: + curr[2].reverse() + return curr[2] + j = 0 + while j < len(curr[0]): + if not curr[0][j] in all_vis: + new_m = diff_mark(copy(curr[1]), curr[0][j]) + re_list.append((get_bmap(net, new_m, bmap), new_m, curr[2] + [curr[0][j]])) + all_vis.add(curr[0][j]) + j = j + 1 + i = i + 1 + return None + + +def execute_tr(m, t, tokens_counter): + for a in t.in_arcs: + sp = a.source + w = a.weight + if sp not in m: + tokens_counter["missing"] += w + elif w > m[sp]: + tokens_counter["missing"] += w - m[sp] + tokens_counter["consumed"] += w + for a in t.out_arcs: + tokens_counter["produced"] += a.weight + new_m = weak_execute(t, m) + m = new_m + return m, tokens_counter + + +def tr_vlist(vlist, net, im, fm, tmap, bmap, parameters=None): + """ + Visit a variant using the backwards token basedr eplay + + Parameters + ------------ + vlist + Variants list + net + Petri net + im + Initial marking + tmap + Transition map (labels to list of transitions) + bmap + B-map + parameters + Possible parameters of the execution + + Returns + ------------- + visited_transitions + List of visited transitions during the replay + is_fit + Indicates if the replay was successful or not + """ + if parameters is None: + parameters = {} + + stop_immediately_unfit = exec_utils.get_param_value(Parameters.STOP_IMMEDIATELY_UNFIT, parameters, False) + + m = copy(im) + tokens_counter = Counter() + tokens_counter["missing"] = 0 + tokens_counter["remaining"] = 0 + tokens_counter["consumed"] = 0 + tokens_counter["produced"] = 0 + + for p in m: + tokens_counter["produced"] += m[p] + + visited_transitions = [] + transitions_with_problems = [] + + is_fit = True + replay_interrupted = False + for act in vlist: + if act in tmap: + rep_ok = False + for t in tmap[act]: + if is_enabled(t, net, m): + m, tokens_counter = execute_tr(m, t, tokens_counter) + visited_transitions.append(t) + rep_ok = True + continue + elif len(tmap[act]) == 1: + back_res = explore_backwards([(get_bmap(net, t.in_marking, bmap), copy(t.in_marking), list())], + set(), net, m, bmap) + if back_res is not None: + rep_ok = True + for t2 in back_res: + m, tokens_counter = execute_tr(m, t2, tokens_counter) + visited_transitions = visited_transitions + back_res + m, tokens_counter = execute_tr(m, t, tokens_counter) + visited_transitions.append(t) + else: + is_fit = False + transitions_with_problems.append(t) + m, tokens_counter = execute_tr(m, t, tokens_counter) + visited_transitions.append(t) + if stop_immediately_unfit: + rep_ok = False + break + else: + rep_ok = True + if not rep_ok: + is_fit = False + replay_interrupted = True + break + + if not m == fm: + is_fit = False + diff1 = m - fm + diff2 = fm - m + for p in diff1: + if diff1[p] > 0: + tokens_counter["remaining"] += diff1[p] + for p in diff2: + if diff2[p] > 0: + tokens_counter["missing"] += diff2[p] + + for p in fm: + tokens_counter["consumed"] += m[p] + + trace_fitness = 0.5 * (1.0 - float(tokens_counter["missing"]) / float(tokens_counter["consumed"])) + 0.5 * ( + 1.0 - float(tokens_counter["remaining"]) / float(tokens_counter["produced"])) + + enabled_transitions_in_marking = get_visible_transitions_eventually_enabled_by_marking(net, m) + + return {"activated_transitions": visited_transitions, "trace_is_fit": is_fit, + "replay_interrupted": replay_interrupted, "transitions_with_problems": transitions_with_problems, + "activated_transitions_labels": [x.label for x in visited_transitions], + "missing_tokens": tokens_counter["missing"], + "consumed_tokens": tokens_counter["consumed"], + "produced_tokens": tokens_counter["produced"], + "remaining_tokens": tokens_counter["remaining"], "trace_fitness": trace_fitness, + "enabled_transitions_in_marking": enabled_transitions_in_marking} + + +def apply(log: EventLog, net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> typing.ListAlignments: + """ + Method to apply token-based replay + + Parameters + ----------- + log + Log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm + """ + if parameters is None: + parameters = {} + + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("the backwards variant of TBR will be removed in a future version.") + + for t in net.transitions: + ma = Marking() + for a in t.out_arcs: + p = a.target + ma[p] = a.weight + t.out_marking = ma + + for t in net.transitions: + ma = Marking() + for a in t.in_arcs: + p = a.source + ma[p] = a.weight + t.in_marking = ma + + variants_idxs = variants_filter.get_variants_from_log_trace_idx(log, parameters=parameters) + results = [] + + tmap = {} + bmap = {} + for t in net.transitions: + if t.label is not None: + if t.label not in tmap: + tmap[t.label] = [] + tmap[t.label].append(t) + + for variant in variants_idxs: + vlist = variants_util.get_activities_from_variant(variant) + result = tr_vlist(vlist, net, initial_marking, final_marking, tmap, bmap, parameters=parameters) + results.append(result) + + al_idx = {} + for index_variant, variant in enumerate(variants_idxs): + for trace_idx in variants_idxs[variant]: + al_idx[trace_idx] = results[index_variant] + + ret = [] + for i in range(len(log)): + ret.append(al_idx[i]) + + return ret + + +def get_diagnostics_dataframe(log: EventLog, tbr_output: typing.ListAlignments, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Gets the results of token-based replay in a dataframe + + Parameters + -------------- + log + Event log + tbr_output + Output of the token-based replay technique + + Returns + -------------- + dataframe + Diagnostics dataframe + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + + import pandas as pd + + diagn_stream = [] + + for index in range(len(log)): + case_id = log[index].attributes[case_id_key] + is_fit = tbr_output[index]["trace_is_fit"] + trace_fitness = tbr_output[index]["trace_fitness"] + missing = tbr_output[index]["missing_tokens"] + remaining = tbr_output[index]["remaining_tokens"] + produced = tbr_output[index]["produced_tokens"] + consumed = tbr_output[index]["consumed_tokens"] + + diagn_stream.append({"case_id": case_id, "is_fit": is_fit, "trace_fitness": trace_fitness, "missing": missing, "remaining": remaining, "produced": produced, "consumed": consumed}) + + return pandas_utils.instantiate_dataframe(diagn_stream) diff --git a/pm4py/pm4py/algo/conformance/tokenreplay/variants/token_replay.py b/pm4py/pm4py/algo/conformance/tokenreplay/variants/token_replay.py new file mode 100644 index 0000000000000000000000000000000000000000..d48c02efea306a326d5eae20d410b23947c66298 --- /dev/null +++ b/pm4py/pm4py/algo/conformance/tokenreplay/variants/token_replay.py @@ -0,0 +1,1266 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import xes_constants as xes_util +from pm4py.objects.petri_net import semantics +from pm4py.objects.petri_net.utils.petri_utils import get_places_shortest_path_by_hidden, get_s_components_from_petri +from pm4py.objects.log import obj as log_implementation +from pm4py.objects.petri_net.utils import align_utils +from copy import copy +from enum import Enum +from pm4py.util import exec_utils, constants +from pm4py.util import variants_util, pandas_utils +import importlib.util +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +import pandas as pd +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing +from collections import Counter +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + VARIANTS = "variants" + PLACES_SHORTEST_PATH_BY_HIDDEN = "places_shortest_path_by_hidden" + THREAD_MAX_EX_TIME = "thread_maximum_ex_time" + DISABLE_VARIANTS = "disable_variants" + CLEANING_TOKEN_FLOOD = "cleaning_token_flood" + IS_REDUCTION = "is_reduction" + WALK_THROUGH_HIDDEN_TRANS = "walk_through_hidden_trans" + RETURN_NAMES = "return_names" + STOP_IMMEDIATELY_UNFIT = "stop_immediately_unfit" + TRY_TO_REACH_FINAL_MARKING_THROUGH_HIDDEN = "try_to_reach_final_marking_through_hidden" + CONSIDER_REMAINING_IN_FITNESS = "consider_remaining_in_fitness" + CONSIDER_ACTIVITIES_NOT_IN_MODEL_IN_FITNESS = "consider_activities_not_in_model_in_fitness" + ENABLE_PLTR_FITNESS = "enable_pltr_fitness" + SHOW_PROGRESS_BAR = "show_progress_bar" + + +class TechnicalParameters(Enum): + MAX_REC_DEPTH = 50 + MAX_IT_FINAL1 = 5 + MAX_IT_FINAL2 = 5 + MAX_REC_DEPTH_HIDTRANSENABL = 2 + MAX_POSTFIX_SUFFIX_LENGTH = 20 + MAX_NO_THREADS = 1024 + MAX_DEF_THR_EX_TIME = 10 + ENABLE_POSTFIX_CACHE = False + ENABLE_MARKTOACT_CACHE = False + + +class DebugConst: + REACH_MRH = -1 + REACH_ITF1 = -1 + REACH_ITF2 = -1 + + +class NoConceptNameException(Exception): + def __init__(self, message): + self.message = message + + +def add_missing_tokens(t, marking): + """ + Adds missing tokens needed to activate a transition + + Parameters + ---------- + t + Transition that should be enabled + marking + Current marking + """ + missing = 0 + tokens_added = {} + for a in t.in_arcs: + if marking[a.source] < a.weight: + missing = missing + (a.weight - marking[a.source]) + tokens_added[a.source] = a.weight - marking[a.source] + marking[a.source] = marking[a.source] + a.weight + return [missing, tokens_added] + + +def get_consumed_tokens(t): + """ + Get tokens consumed firing a transition + + Parameters + ---------- + t + Transition that should be enabled + """ + consumed = 0 + consumed_map = {} + for a in t.in_arcs: + consumed = consumed + a.weight + consumed_map[a.source] = a.weight + return consumed, consumed_map + + +def get_produced_tokens(t): + """ + Get tokens produced firing a transition + + Parameters + ---------- + t + Transition that should be enabled + """ + produced = 0 + produced_map = {} + for a in t.out_arcs: + produced = produced + a.weight + produced_map[a.target] = a.weight + return produced, produced_map + + +def merge_dicts(x, y): + """ + Merge two dictionaries keeping the least value + + Parameters + ---------- + x + First map (string, integer) + y + Second map (string, integer) + """ + for key in y: + if key not in x: + x[key] = y[key] + else: + if y[key] < x[key]: + x[key] = y[key] + + +def get_places_with_missing_tokens(t, marking): + """ + Get places with missing tokens + + Parameters + ---------- + t + Transition to enable + marking + Current marking + """ + places_with_missing = set() + for a in t.in_arcs: + if marking[a.source] < a.weight: + places_with_missing.add(a.source) + return places_with_missing + + +def get_hidden_transitions_to_enable(marking, places_with_missing, places_shortest_path_by_hidden): + """ + Calculate an ordered list of transitions to visit in order to enable a given transition + + Parameters + ---------- + marking + Current marking + places_with_missing + List of places with missing tokens + places_shortest_path_by_hidden + Minimal connection between places by hidden transitions + """ + hidden_transitions_to_enable = [] + + marking_places = [x for x in marking] + marking_places = sorted(marking_places, key=lambda x: x.name) + places_with_missing_keys = [x for x in places_with_missing] + places_with_missing_keys = sorted(places_with_missing_keys, key=lambda x: x.name) + for p1 in marking_places: + for p2 in places_with_missing_keys: + if p1 in places_shortest_path_by_hidden and p2 in places_shortest_path_by_hidden[p1]: + hidden_transitions_to_enable.append(places_shortest_path_by_hidden[p1][p2]) + hidden_transitions_to_enable = sorted(hidden_transitions_to_enable, key=lambda x: len(x)) + + return hidden_transitions_to_enable + + +def get_req_transitions_for_final_marking(marking, final_marking, places_shortest_path_by_hidden): + """ + Gets required transitions for final marking + + Parameters + ---------- + marking + Current marking + final_marking + Final marking assigned to the Petri net + places_shortest_path_by_hidden + Minimal connection between places by hidden transitions + """ + hidden_transitions_to_enable = [] + + marking_places = [x for x in marking] + marking_places = sorted(marking_places, key=lambda x: x.name) + final_marking_places = [x for x in final_marking] + final_marking_places = sorted(final_marking_places, key=lambda x: x.name) + for p1 in marking_places: + for p2 in final_marking_places: + if p1 in places_shortest_path_by_hidden and p2 in places_shortest_path_by_hidden[p1]: + hidden_transitions_to_enable.append(places_shortest_path_by_hidden[p1][p2]) + hidden_transitions_to_enable = sorted(hidden_transitions_to_enable, key=lambda x: len(x)) + + return hidden_transitions_to_enable + + +def enable_hidden_transitions(net, marking, activated_transitions, visited_transitions, all_visited_markings, + hidden_transitions_to_enable, t): + """ + Actually enable hidden transitions on the Petri net + + Parameters + ----------- + net + Petri net + marking + Current marking + activated_transitions + All activated transitions during the replay + visited_transitions + All visited transitions by the recursion + all_visited_markings + All visited markings + hidden_transitions_to_enable + List of hidden transition to enable + t + Transition against we should check if they are enabled + """ + j_indexes = [0] * len(hidden_transitions_to_enable) + for z in range(10000000): + something_changed = False + for k in range(j_indexes[z % len(hidden_transitions_to_enable)], len( + hidden_transitions_to_enable[z % len(hidden_transitions_to_enable)])): + t3 = hidden_transitions_to_enable[z % len(hidden_transitions_to_enable)][ + j_indexes[z % len(hidden_transitions_to_enable)]] + if not t3 == t: + if semantics.is_enabled(t3, net, marking): + if t3 not in visited_transitions: + marking = semantics.execute(t3, net, marking) + activated_transitions.append(t3) + visited_transitions.add(t3) + all_visited_markings.append(marking) + something_changed = True + j_indexes[z % len(hidden_transitions_to_enable)] = j_indexes[z % len(hidden_transitions_to_enable)] + 1 + if semantics.is_enabled(t, net, marking): + break + if semantics.is_enabled(t, net, marking): + break + if not something_changed: + break + return [marking, activated_transitions, visited_transitions, all_visited_markings] + + +def apply_hidden_trans(t, net, marking, places_shortest_paths_by_hidden, act_tr, rec_depth, + visit_trans, + vis_mark): + """ + Apply hidden transitions in order to enable a given transition + + Parameters + ---------- + t + Transition to eventually enable + net + Petri net + marking + Marking + places_shortest_paths_by_hidden + Shortest paths between places connected by hidden transitions + act_tr + All activated transitions + rec_depth + Current recursion depth + visit_trans + All visited transitions by hiddenTrans method + vis_mark + All visited markings + """ + if rec_depth >= TechnicalParameters.MAX_REC_DEPTH_HIDTRANSENABL.value or t in visit_trans: + return [net, marking, act_tr, vis_mark] + # if rec_depth > DebugConst.REACH_MRH: + # DebugConst.REACH_MRH = rec_depth + visit_trans.add(t) + marking_at_start = copy(marking) + places_with_missing = get_places_with_missing_tokens(t, marking) + hidden_transitions_to_enable = get_hidden_transitions_to_enable(marking, places_with_missing, + places_shortest_paths_by_hidden) + + if hidden_transitions_to_enable: + [marking, act_tr, visit_trans, vis_mark] = enable_hidden_transitions(net, + marking, + act_tr, + visit_trans, + vis_mark, + hidden_transitions_to_enable, + t) + if not semantics.is_enabled(t, net, marking): + hidden_transitions_to_enable = get_hidden_transitions_to_enable(marking, places_with_missing, + places_shortest_paths_by_hidden) + for z in range(len(hidden_transitions_to_enable)): + for k in range(len(hidden_transitions_to_enable[z])): + t4 = hidden_transitions_to_enable[z][k] + if not t4 == t: + if t4 not in visit_trans: + if not semantics.is_enabled(t4, net, marking): + [net, marking, act_tr, vis_mark] = apply_hidden_trans(t4, + net, + marking, + places_shortest_paths_by_hidden, + act_tr, + rec_depth + 1, + visit_trans, + vis_mark) + if semantics.is_enabled(t4, net, marking): + marking = semantics.execute(t4, net, marking) + act_tr.append(t4) + visit_trans.add(t4) + vis_mark.append(marking) + if not semantics.is_enabled(t, net, marking): + if not (marking_at_start == marking): + [net, marking, act_tr, vis_mark] = apply_hidden_trans(t, net, marking, + places_shortest_paths_by_hidden, + act_tr, + rec_depth + 1, + visit_trans, + vis_mark) + + return [net, marking, act_tr, vis_mark] + + +def break_condition_final_marking(marking, final_marking): + """ + Verify break condition for final marking + + Parameters + ----------- + marking + Current marking + final_marking + Target final marking + """ + final_marking_dict = dict(final_marking) + marking_dict = dict(marking) + final_marking_dict_keys = set(final_marking_dict.keys()) + marking_dict_keys = set(marking_dict.keys()) + + return final_marking_dict_keys.issubset(marking_dict_keys) + + +def apply_trace(trace, net, initial_marking, final_marking, trans_map, enable_pltr_fitness, place_fitness, + transition_fitness, notexisting_activities_in_model, + places_shortest_path_by_hidden, consider_remaining_in_fitness, activity_key="concept:name", + try_to_reach_final_marking_through_hidden=True, stop_immediately_unfit=False, + walk_through_hidden_trans=True, post_fix_caching=None, + marking_to_activity_caching=None, is_reduction=False, + thread_maximum_ex_time=TechnicalParameters.MAX_DEF_THR_EX_TIME.value, + enable_postfix_cache=False, enable_marktoact_cache=False, cleaning_token_flood=False, + s_components=None, trace_occurrences=1, consider_activities_not_in_model_in_fitness=False): + """ + Apply the token replaying algorithm to a trace + + Parameters + ---------- + trace + Trace in the event log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + trans_map + Map between transitions labels and transitions + enable_pltr_fitness + Enable fitness retrieval at place/transition level + place_fitness + Current dictionary of places associated with unfit traces + transition_fitness + Current dictionary of transitions associated with unfit traces + notexisting_activities_in_model + Map that stores the notexisting activities in the model + places_shortest_path_by_hidden + Shortest paths between places by hidden transitions + consider_remaining_in_fitness + Boolean value telling if the remaining tokens should be considered in fitness evaluation + activity_key + Name of the attribute that contains the activity + try_to_reach_final_marking_through_hidden + Boolean value that decides if we shall try to reach the final marking through hidden transitions + stop_immediately_unfit + Boolean value that decides if we shall stop immediately when a non-conformance is detected + walk_through_hidden_trans + Boolean value that decides if we shall walk through hidden transitions in order to enable visible transitions + post_fix_caching + Stores the post fix caching object + marking_to_activity_caching + Stores the marking-to-activity cache + is_reduction + Expresses if the token-based replay is called in a reduction attempt + thread_maximum_ex_time + Alignment threads maximum allowed execution time + enable_postfix_cache + Enables postfix cache + enable_marktoact_cache + Enables marking to activity cache + cleaning_token_flood + Decides if a cleaning of the token flood shall be operated + s_components + S-components of the Petri net (if workflow net) + """ + trace_activities = [event[activity_key] for event in trace] + act_trans = [] + transitions_with_problems = [] + vis_mark = [] + activating_transition_index = {} + activating_transition_interval = [] + used_postfix_cache = False + marking = copy(initial_marking) + vis_mark.append(marking) + missing = 0 + consumed = 0 + sum_tokens_im = 0 + for place in initial_marking: + sum_tokens_im = sum_tokens_im + initial_marking[place] + sum_tokens_fm = 0 + for place in final_marking: + sum_tokens_fm = sum_tokens_fm + final_marking[place] + produced = sum_tokens_im + current_event_map = {} + current_remaining_map = {} + for i in range(len(trace)): + if enable_postfix_cache and (str(trace_activities) in post_fix_caching.cache and + hash(marking) in post_fix_caching.cache[str(trace_activities)]): + trans_to_act = post_fix_caching.cache[str(trace_activities)][hash(marking)]["trans_to_activate"] + for z in range(len(trans_to_act)): + t = trans_to_act[z] + act_trans.append(t) + used_postfix_cache = True + marking = post_fix_caching.cache[str(trace_activities)][hash(marking)]["final_marking"] + break + else: + prev_len_activated_transitions = len(act_trans) + if enable_marktoact_cache and (hash(marking) in marking_to_activity_caching.cache and + trace[i][activity_key] in marking_to_activity_caching.cache[hash(marking)] + and trace[i - 1][activity_key] == + marking_to_activity_caching.cache[hash(marking)][trace[i][activity_key]] + ["previousActivity"]): + this_end_marking = marking_to_activity_caching.cache[hash(marking)][trace[i][activity_key]][ + "end_marking"] + this_act_trans = marking_to_activity_caching.cache[hash(marking)][trace[i][activity_key]][ + "this_activated_transitions"] + this_vis_markings = marking_to_activity_caching.cache[hash(marking)][trace[i][activity_key]][ + "this_visited_markings"] + act_trans = act_trans + this_act_trans + vis_mark = vis_mark + this_vis_markings + marking = copy(this_end_marking) + else: + if trace[i][activity_key] in trans_map: + current_event_map.update(trace[i]) + # change 14/10/2020: to better support duplicate transitions with this approach, we check + # whether in the current marking there is at least one transition corresponding to the activity + # key without looking at the transition map (that contains one entry per label) + corr_en_t = [x for x in semantics.enabled_transitions(net, marking) if x.label == trace[i][activity_key]] + if corr_en_t: + t = corr_en_t[0] + else: + t = trans_map[trace[i][activity_key]] + if walk_through_hidden_trans and not semantics.is_enabled(t, net, + marking): + visited_transitions = set() + prev_len_activated_transitions = len(act_trans) + [net, new_marking, new_act_trans, new_vis_mark] = apply_hidden_trans(t, net, + copy(marking), + places_shortest_path_by_hidden, + copy(act_trans), + 0, + copy(visited_transitions), + copy(vis_mark)) + for jj5 in range(len(act_trans), len(new_act_trans)): + tt5 = new_act_trans[jj5] + c, cmap = get_consumed_tokens(tt5) + p, pmap = get_produced_tokens(tt5) + if enable_pltr_fitness: + for pl2 in cmap: + if pl2 in place_fitness: + place_fitness[pl2]["c"] += cmap[pl2] * trace_occurrences + for pl2 in pmap: + if pl2 in place_fitness: + place_fitness[pl2]["p"] += pmap[pl2] * trace_occurrences + consumed = consumed + c + produced = produced + p + marking, act_trans, vis_mark = new_marking, new_act_trans, new_vis_mark + is_initially_enabled = True + old_marking_names = [x.name for x in list(marking.keys())] + if not semantics.is_enabled(t, net, marking): + is_initially_enabled = False + transitions_with_problems.append(t) + if stop_immediately_unfit: + missing = missing + 1 + break + [m, tokens_added] = add_missing_tokens(t, marking) + missing = missing + m + if enable_pltr_fitness: + for place in tokens_added.keys(): + if place in place_fitness: + place_fitness[place]["underfed_traces"].add(trace) + place_fitness[place]["m"] += tokens_added[place] + if trace not in transition_fitness[t]["underfed_traces"]: + transition_fitness[t]["underfed_traces"][trace] = list() + transition_fitness[t]["underfed_traces"][trace].append(current_event_map) + elif enable_pltr_fitness: + if trace not in transition_fitness[t]["fit_traces"]: + transition_fitness[t]["fit_traces"][trace] = list() + transition_fitness[t]["fit_traces"][trace].append(current_event_map) + c, cmap = get_consumed_tokens(t) + p, pmap = get_produced_tokens(t) + consumed = consumed + c + produced = produced + p + if enable_pltr_fitness: + for pl2 in cmap: + if pl2 in place_fitness: + place_fitness[pl2]["c"] += cmap[pl2] * trace_occurrences + for pl2 in pmap: + if pl2 in place_fitness: + place_fitness[pl2]["p"] += pmap[pl2] * trace_occurrences + if semantics.is_enabled(t, net, marking): + marking = semantics.execute(t, net, marking) + act_trans.append(t) + vis_mark.append(marking) + if not is_initially_enabled and cleaning_token_flood: + # here, a routine for cleaning token flood shall go + new_marking_names = [x.name for x in list(marking.keys())] + new_marking_names_diff = [x for x in new_marking_names if x not in old_marking_names] + new_marking_names_inte = [x for x in new_marking_names if x in old_marking_names] + for p1 in new_marking_names_inte: + for p2 in new_marking_names_diff: + for comp in s_components: + if p1 in comp and p2 in comp: + place_to_delete = [place for place in list(marking.keys()) if place.name == p1] + if len(place_to_delete) == 1: + del marking[place_to_delete[0]] + if not place_to_delete[0] in current_remaining_map: + current_remaining_map[place_to_delete[0]] = 0 + current_remaining_map[place_to_delete[0]] = current_remaining_map[ + place_to_delete[0]] + 1 + pass + else: + if not trace[i][activity_key] in notexisting_activities_in_model: + notexisting_activities_in_model[trace[i][activity_key]] = {} + notexisting_activities_in_model[trace[i][activity_key]][trace] = current_event_map + del trace_activities[0] + if len(trace_activities) < TechnicalParameters.MAX_POSTFIX_SUFFIX_LENGTH.value: + activating_transition_index[str(trace_activities)] = {"index": len(act_trans), + "marking": hash(marking)} + if i > 0: + activating_transition_interval.append( + [trace[i][activity_key], prev_len_activated_transitions, len(act_trans), + trace[i - 1][activity_key]]) + else: + activating_transition_interval.append( + [trace[i][activity_key], prev_len_activated_transitions, len(act_trans), + ""]) + + if try_to_reach_final_marking_through_hidden and not used_postfix_cache: + for i in range(TechnicalParameters.MAX_IT_FINAL1.value): + if not break_condition_final_marking(marking, final_marking): + hidden_transitions_to_enable = get_req_transitions_for_final_marking(marking, final_marking, + places_shortest_path_by_hidden) + + for group in hidden_transitions_to_enable: + for t in group: + if semantics.is_enabled(t, net, marking): + marking = semantics.execute(t, net, marking) + act_trans.append(t) + vis_mark.append(marking) + c, cmap = get_consumed_tokens(t) + p, pmap = get_produced_tokens(t) + if enable_pltr_fitness: + for pl2 in cmap: + if pl2 in place_fitness: + place_fitness[pl2]["c"] += cmap[pl2] * trace_occurrences + for pl2 in pmap: + if pl2 in place_fitness: + place_fitness[pl2]["p"] += pmap[pl2] * trace_occurrences + consumed = consumed + c + produced = produced + p + if break_condition_final_marking(marking, final_marking): + break + else: + break + + # try to reach the final marking in a different fashion, if not already reached + if not break_condition_final_marking(marking, final_marking): + if len(final_marking) == 1: + sink_place = list(final_marking)[0] + + connections_to_sink = [] + for place in marking: + if place in places_shortest_path_by_hidden and sink_place in places_shortest_path_by_hidden[place]: + connections_to_sink.append([place, places_shortest_path_by_hidden[place][sink_place]]) + connections_to_sink = sorted(connections_to_sink, key=lambda x: len(x[1])) + + for i in range(TechnicalParameters.MAX_IT_FINAL2.value): + for j in range(len(connections_to_sink)): + for z in range(len(connections_to_sink[j][1])): + t = connections_to_sink[j][1][z] + if semantics.is_enabled(t, net, marking): + marking = semantics.execute(t, net, marking) + act_trans.append(t) + c, cmap = get_consumed_tokens(t) + p, pmap = get_produced_tokens(t) + if enable_pltr_fitness: + for pl2 in cmap: + if pl2 in place_fitness: + place_fitness[pl2]["c"] += cmap[pl2] * trace_occurrences + for pl2 in pmap: + if pl2 in place_fitness: + place_fitness[pl2]["p"] += pmap[pl2] * trace_occurrences + consumed = consumed + c + produced = produced + p + vis_mark.append(marking) + continue + else: + break + + marking_before_cleaning = copy(marking) + + # 25/02/2020: fix to the missing tokens mark (if the final marking is not reached) + # (not inficiating the previous stat) + diff_fin_mark_mark = Marking() + for p in final_marking: + diff = final_marking[p] - marking[p] + if diff > 0: + diff_fin_mark_mark[p] = diff + + # set up the remaining tokens count + remaining = 0 + for p in marking: + if p in final_marking: + marking[p] = max(0, marking[p] - final_marking[p]) + if enable_pltr_fitness: + if marking[p] > 0: + if p in place_fitness: + if trace not in place_fitness[p]["underfed_traces"]: + place_fitness[p]["overfed_traces"].add(trace) + place_fitness[p]["r"] += marking[p] * trace_occurrences + # 25/02/2020: added missing part to statistics + elif enable_pltr_fitness: + if p in place_fitness: + if trace not in place_fitness[p]["underfed_traces"]: + place_fitness[p]["overfed_traces"].add(trace) + place_fitness[p]["r"] += marking[p] * trace_occurrences + remaining = remaining + marking[p] + + for p in current_remaining_map: + if enable_pltr_fitness: + if p in place_fitness: + if trace not in place_fitness[p]["underfed_traces"] and trace not in place_fitness[p]["overfed_traces"]: + place_fitness[p]["overfed_traces"].add(trace) + place_fitness[p]["r"] += current_remaining_map[p] * trace_occurrences + remaining = remaining + current_remaining_map[p] + + if consider_remaining_in_fitness: + is_fit = (missing == 0) and (remaining == 0) + else: + is_fit = (missing == 0) + + if consider_activities_not_in_model_in_fitness and notexisting_activities_in_model: + is_fit = False + + # separate global counts from local statistics in the case these are not enabled by the options + for pl in final_marking: + consumed += final_marking[pl] + # 25/02/2020: update the missing tokens count here + for pl in diff_fin_mark_mark: + missing += diff_fin_mark_mark[pl] + + if enable_pltr_fitness: + for pl in initial_marking: + place_fitness[pl]["p"] += initial_marking[pl] * trace_occurrences + for pl in final_marking: + place_fitness[pl]["c"] += final_marking[pl] * trace_occurrences + for pl in diff_fin_mark_mark: + place_fitness[pl]["m"] += diff_fin_mark_mark[pl] * trace_occurrences + + if consumed > 0 and produced > 0: + trace_fitness = 0.5 * (1.0 - float(missing) / float(consumed)) + 0.5 * ( + 1.0 - float(remaining) / float(produced)) + else: + trace_fitness = 1.0 + + if is_fit: + for suffix in activating_transition_index: + if suffix not in post_fix_caching.cache: + post_fix_caching.cache[suffix] = {} + if activating_transition_index[suffix]["marking"] not in post_fix_caching.cache[suffix]: + post_fix_caching.cache[suffix][activating_transition_index[suffix]["marking"]] = \ + {"trans_to_activate": act_trans[activating_transition_index[suffix]["index"]:], + "final_marking": marking} + for trans in activating_transition_interval: + activity = trans[0] + start_marking_index = trans[1] + end_marking_index = trans[2] + previous_activity = trans[3] + if end_marking_index < len(vis_mark): + start_marking_object = vis_mark[start_marking_index] + start_marking_hash = hash(start_marking_object) + end_marking_object = vis_mark[end_marking_index] + if activity in trans_map: + this_activated_trans = act_trans[start_marking_index:end_marking_index] + this_visited_markings = vis_mark[start_marking_index + 1:end_marking_index + 1] + + if start_marking_hash not in marking_to_activity_caching.cache: + marking_to_activity_caching.cache[start_marking_hash] = {} + if activity not in marking_to_activity_caching.cache[start_marking_hash]: + marking_to_activity_caching.cache[start_marking_hash][activity] = { + "start_marking": start_marking_object, "end_marking": end_marking_object, + "this_activated_transitions": this_activated_trans, + "this_visited_markings": this_visited_markings, + "previousActivity": previous_activity} + + return [is_fit, trace_fitness, act_trans, transitions_with_problems, marking_before_cleaning, + align_utils.get_visible_transitions_eventually_enabled_by_marking(net, marking_before_cleaning), missing, + consumed, + remaining, produced] + + +class ApplyTraceTokenReplay: + def __init__(self, trace, net, initial_marking, final_marking, trans_map, enable_pltr_fitness, place_fitness, + transition_fitness, notexisting_activities_in_model, + places_shortest_path_by_hidden, consider_remaining_in_fitness, activity_key="concept:name", + reach_mark_through_hidden=True, stop_immediately_when_unfit=False, + walk_through_hidden_trans=True, post_fix_caching=None, + marking_to_activity_caching=None, is_reduction=False, + thread_maximum_ex_time=TechnicalParameters.MAX_DEF_THR_EX_TIME.value, + cleaning_token_flood=False, s_components=None, trace_occurrences=1, consider_activities_not_in_model_in_fitness=False): + """ + Constructor + + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + trans_map + Map between transitions labels and transitions + enable_pltr_fitness + Enable fitness retrieval at place/transition level + place_fitness + Current dictionary of places associated with unfit traces + transition_fitness + Current dictionary of transitions associated with unfit traces + notexisting_activities_in_model + Map that stores the notexisting activities in the model + triggered in the log + places_shortest_path_by_hidden + Shortest paths between places by hidden transitions + consider_remaining_in_fitness + Boolean value telling if the remaining tokens should be considered in fitness evaluation + activity_key + Name of the attribute that contains the activity + try_to_reach_final_marking_through_hidden + Boolean value that decides if we shall try to reach the final marking through hidden transitions + stop_immediately_unfit + Boolean value that decides if we shall stop immediately when a non-conformance is detected + walk_through_hidden_trans + Boolean value that decides if we shall walk through hidden transitions in order to enable visible transitions + post_fix_caching + Stores the post fix caching object + marking_to_activity_caching + Stores the marking-to-activity cache + is_reduction + Expresses if the token-based replay is called in a reduction attempt + thread_maximum_ex_time + Alignment threads maximum allowed execution time + cleaning_token_flood + Decides if a cleaning of the token flood shall be operated + s_components + S-components of the Petri net + trace_occurrences + Trace weight (number of occurrences) + """ + self.thread_is_alive = True + self.trace = trace + self.net = net + self.initial_marking = initial_marking + self.final_marking = final_marking + self.trans_map = trans_map + self.enable_pltr_fitness = enable_pltr_fitness + self.place_fitness = place_fitness + self.transition_fitness = transition_fitness + self.notexisting_activities_in_model = notexisting_activities_in_model + self.places_shortest_path_by_hidden = places_shortest_path_by_hidden + self.consider_remaining_in_fitness = consider_remaining_in_fitness + self.consider_activities_not_in_model_in_fitness = consider_activities_not_in_model_in_fitness + self.activity_key = activity_key + self.try_to_reach_final_marking_through_hidden = reach_mark_through_hidden + self.stop_immediately_when_unfit = stop_immediately_when_unfit + self.walk_through_hidden_trans = walk_through_hidden_trans + self.post_fix_caching = post_fix_caching + self.marking_to_activity_caching = marking_to_activity_caching + self.is_reduction = is_reduction + self.thread_maximum_ex_time = thread_maximum_ex_time + self.cleaning_token_flood = cleaning_token_flood + self.enable_postfix_cache = TechnicalParameters.ENABLE_POSTFIX_CACHE.value + self.enable_marktoact_cache = TechnicalParameters.ENABLE_MARKTOACT_CACHE.value + if self.is_reduction: + self.enable_postfix_cache = True + self.enable_marktoact_cache = True + self.t_fit = None + self.t_value = None + self.act_trans = None + self.trans_probl = None + self.reached_marking = None + self.enabled_trans_in_mark = None + self.missing = None + self.consumed = None + self.remaining = None + self.produced = None + self.s_components = s_components + self.trace_occurrences = trace_occurrences + + def run(self): + """ + Runs the thread and stores the results + """ + self.t_fit, self.t_value, self.act_trans, self.trans_probl, self.reached_marking, self.enabled_trans_in_mark, self.missing, self.consumed, self.remaining, self.produced = \ + apply_trace(self.trace, self.net, self.initial_marking, self.final_marking, self.trans_map, + self.enable_pltr_fitness, self.place_fitness, self.transition_fitness, + self.notexisting_activities_in_model, + self.places_shortest_path_by_hidden, self.consider_remaining_in_fitness, + activity_key=self.activity_key, + try_to_reach_final_marking_through_hidden=self.try_to_reach_final_marking_through_hidden, + stop_immediately_unfit=self.stop_immediately_when_unfit, + walk_through_hidden_trans=self.walk_through_hidden_trans, + post_fix_caching=self.post_fix_caching, + marking_to_activity_caching=self.marking_to_activity_caching, + is_reduction=self.is_reduction, + thread_maximum_ex_time=self.thread_maximum_ex_time, + enable_postfix_cache=self.enable_postfix_cache, + enable_marktoact_cache=self.enable_marktoact_cache, + cleaning_token_flood=self.cleaning_token_flood, + s_components=self.s_components, + trace_occurrences=self.trace_occurrences, + consider_activities_not_in_model_in_fitness=self.consider_activities_not_in_model_in_fitness) + self.thread_is_alive = False + + +class PostFixCaching: + """ + Post fix caching object + """ + + def __init__(self): + self.cache = 0 + self.cache = {} + + +class MarkingToActivityCaching: + """ + Marking to activity caching + """ + + def __init__(self): + self.cache = 0 + self.cache = {} + + +def get_variant_from_trace(trace, activity_key, disable_variants=False): + """ + Gets the variant from the trace (allow disabling) + + Parameters + ------------ + trace + Trace + activity_key + Attribute that is the activity + disable_variants + Boolean value that disable variants + + Returns + ------------- + variant + Variant describing the trace + """ + if disable_variants: + return str(hash(trace)) + parameters = {} + parameters[variants_util.Parameters.ACTIVITY_KEY] = activity_key + return variants_util.get_variant_from_trace(trace, parameters=parameters) + + +def transcribe_result(t, return_object_names=True): + corr_value = {"trace_is_fit": copy(t.t_fit), + "trace_fitness": float(copy(t.t_value)), + "activated_transitions": copy(t.act_trans), + "reached_marking": copy(t.reached_marking), + "enabled_transitions_in_marking": copy( + t.enabled_trans_in_mark), + "transitions_with_problems": copy( + t.trans_probl), + "missing_tokens": int(t.missing), + "consumed_tokens": int(t.consumed), + "remaining_tokens": int(t.remaining), + "produced_tokens": int(t.produced)} + + if return_object_names: + corr_value["activated_transitions_labels"] = [x.label for x in + corr_value[ + "activated_transitions"]] + corr_value["activated_transitions"] = [x.name for x in corr_value[ + "activated_transitions"]] + corr_value["enabled_transitions_in_marking_labels"] = [x.label for x in + corr_value[ + "enabled_transitions_in_marking"]] + corr_value["enabled_transitions_in_marking"] = [x.name for x in + corr_value[ + "enabled_transitions_in_marking"]] + corr_value["transitions_with_problems"] = [x.name for x in + corr_value[ + "transitions_with_problems"]] + corr_value["reached_marking"] = {x.name: y for x, y in + corr_value[ + "reached_marking"].items()} + + return corr_value + + +def apply_log(log, net, initial_marking, final_marking, enable_pltr_fitness=False, consider_remaining_in_fitness=False, + activity_key="concept:name", reach_mark_through_hidden=True, stop_immediately_unfit=False, + walk_through_hidden_trans=True, places_shortest_path_by_hidden=None, + is_reduction=False, thread_maximum_ex_time=TechnicalParameters.MAX_DEF_THR_EX_TIME.value, + cleaning_token_flood=False, disable_variants=False, return_object_names=False, show_progress_bar=True, + consider_activities_not_in_model_in_fitness=False, case_id_key=constants.CASE_CONCEPT_NAME): + """ + Apply token-based replay to a log + + Parameters + ---------- + log + Trace log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + enable_pltr_fitness + Enable fitness retrieval at place level + consider_remaining_in_fitness + Boolean value telling if the remaining tokens should be considered in fitness evaluation + activity_key + Name of the attribute that contains the activity + reach_mark_through_hidden + Boolean value that decides if we shall try to reach the final marking through hidden transitions + stop_immediately_unfit + Boolean value that decides if we shall stop immediately when a non-conformance is detected + walk_through_hidden_trans + Boolean value that decides if we shall walk through hidden transitions in order to enable visible transitions + places_shortest_path_by_hidden + Shortest paths between places by hidden transitions + is_reduction + Expresses if the token-based replay is called in a reduction attempt + thread_maximum_ex_time + Alignment threads maximum allowed execution time + cleaning_token_flood + Decides if a cleaning of the token flood shall be operated + disable_variants + Disable variants grouping + return_object_names + Decides whether names instead of object pointers shall be returned + """ + post_fix_cache = PostFixCaching() + marking_to_activity_cache = MarkingToActivityCaching() + if places_shortest_path_by_hidden is None: + places_shortest_path_by_hidden = get_places_shortest_path_by_hidden(net, + TechnicalParameters.MAX_REC_DEPTH.value) + + place_fitness_per_trace = {} + transition_fitness_per_trace = {} + + aligned_traces = [] + + if enable_pltr_fitness: + for place in net.places: + place_fitness_per_trace[place] = {"underfed_traces": set(), "overfed_traces": set(), "m": 0, "r": 0, "c": 0, + "p": 0} + for transition in net.transitions: + if transition.label: + transition_fitness_per_trace[transition] = {"underfed_traces": {}, "fit_traces": {}} + + s_components = [] + + if cleaning_token_flood: + s_components = get_s_components_from_petri(net, initial_marking, final_marking) + + notexisting_activities_in_model = {} + + # update 23/04/2024 (removing undeterminism with duplicate transitions) + # transitions are now fired as follows: + # - (from a previous update on 14/10/2020) it is checked if in the current market any transition having as label the current activity is enabled. If that's true, then the given transition is fired + # - otherwise, if there are no corresponding transitions enabled in the current marking, the TBR tries to enable with invisibles always the same transition (removing undeterminism) + trans_map = {} + for t in sorted(list(net.transitions), key=lambda x: x.name): + trans_map[t.label] = t + + if pandas_utils.check_is_pandas_dataframe(log): + traces = [(tuple(x), y) for y, x in log.groupby(case_id_key)[activity_key].agg(list).to_dict().items()] + traces = [(traces[i][0], i) for i in range(len(traces))] + else: + traces = [(tuple(x[activity_key] for x in log[i]), i) for i in range(len(log))] + + variants = dict() + for t in traces: + if t[0] not in variants: + variants[t[0]] = list() + variants[t[0]].append(t[1]) + + traces = [t[0] for t in traces] + + vc = [(k, v) for k, v in variants.items()] + vc = list(sorted(vc, key=lambda x: (len(x[1]), x[0]), reverse=True)) + + threads_results = {} + + progress = None + + if importlib.util.find_spec("tqdm") and show_progress_bar and len(variants) > 1: + from tqdm.auto import tqdm + + if disable_variants and not pandas_utils.check_is_pandas_dataframe(log): + progress = tqdm(total=len(traces), desc="replaying log with TBR, completed traces :: ") + else: + progress = tqdm(total=len(variants), desc="replaying log with TBR, completed traces :: ") + + for i in range(len(vc)): + variant = vc[i][0] + all_cases = vc[i][1] + + if disable_variants and not pandas_utils.check_is_pandas_dataframe(log): + for j in range(len(all_cases)): + case_position = all_cases[j] + considered_case = log[case_position] + t = ApplyTraceTokenReplay(considered_case, net, initial_marking, final_marking, + trans_map, enable_pltr_fitness, place_fitness_per_trace, + transition_fitness_per_trace, + notexisting_activities_in_model, + places_shortest_path_by_hidden, + consider_remaining_in_fitness, + activity_key=activity_key, + reach_mark_through_hidden=reach_mark_through_hidden, + stop_immediately_when_unfit=stop_immediately_unfit, + walk_through_hidden_trans=walk_through_hidden_trans, + post_fix_caching=post_fix_cache, + marking_to_activity_caching=marking_to_activity_cache, + is_reduction=is_reduction, + thread_maximum_ex_time=thread_maximum_ex_time, + cleaning_token_flood=cleaning_token_flood, + s_components=s_components, trace_occurrences=1, + consider_activities_not_in_model_in_fitness=consider_activities_not_in_model_in_fitness) + t.run() + threads_results[case_position] = transcribe_result(t, return_object_names=return_object_names) + if progress is not None: + progress.update() + else: + considered_case = variants_util.variant_to_trace(variant, parameters={constants.PARAMETER_CONSTANT_ACTIVITY_KEY: activity_key}) + t = ApplyTraceTokenReplay(considered_case, net, initial_marking, final_marking, + trans_map, enable_pltr_fitness, place_fitness_per_trace, + transition_fitness_per_trace, + notexisting_activities_in_model, + places_shortest_path_by_hidden, + consider_remaining_in_fitness, + activity_key=activity_key, + reach_mark_through_hidden=reach_mark_through_hidden, + stop_immediately_when_unfit=stop_immediately_unfit, + walk_through_hidden_trans=walk_through_hidden_trans, + post_fix_caching=post_fix_cache, + marking_to_activity_caching=marking_to_activity_cache, + is_reduction=is_reduction, + thread_maximum_ex_time=thread_maximum_ex_time, + cleaning_token_flood=cleaning_token_flood, + s_components=s_components, trace_occurrences=len(vc[i][1]), + consider_activities_not_in_model_in_fitness=consider_activities_not_in_model_in_fitness) + t.run() + + for j in range(len(all_cases)): + case_position = all_cases[j] + + threads_results[case_position] = transcribe_result(t, return_object_names=return_object_names) + + if progress is not None: + progress.update() + + for i in range(len(traces)): + aligned_traces.append(threads_results[i]) + + # gracefully close progress bar + if progress is not None: + progress.close() + del progress + + if enable_pltr_fitness: + return aligned_traces, place_fitness_per_trace, transition_fitness_per_trace, notexisting_activities_in_model + else: + return aligned_traces + + +def apply(log: EventLog, net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> typing.ListAlignments: + """ + Method to apply token-based replay + + Parameters + ----------- + log + Log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm + """ + if parameters is None: + parameters = {} + + enable_pltr_fitness = exec_utils.get_param_value(Parameters.ENABLE_PLTR_FITNESS, parameters, False) + # changed default to uniform behavior with token-based replay fitness + consider_remaining_in_fitness = exec_utils.get_param_value(Parameters.CONSIDER_REMAINING_IN_FITNESS, parameters, + True) + try_to_reach_final_marking_through_hidden = exec_utils.get_param_value( + Parameters.TRY_TO_REACH_FINAL_MARKING_THROUGH_HIDDEN, parameters, True) + stop_immediately_unfit = exec_utils.get_param_value(Parameters.STOP_IMMEDIATELY_UNFIT, parameters, False) + walk_through_hidden_trans = exec_utils.get_param_value(Parameters.WALK_THROUGH_HIDDEN_TRANS, parameters, True) + is_reduction = exec_utils.get_param_value(Parameters.IS_REDUCTION, parameters, False) + cleaning_token_flood = exec_utils.get_param_value(Parameters.CLEANING_TOKEN_FLOOD, parameters, False) + disable_variants = exec_utils.get_param_value(Parameters.DISABLE_VARIANTS, parameters, enable_pltr_fitness) + return_names = exec_utils.get_param_value(Parameters.RETURN_NAMES, parameters, False) + thread_maximum_ex_time = exec_utils.get_param_value(Parameters.THREAD_MAX_EX_TIME, parameters, + TechnicalParameters.MAX_DEF_THR_EX_TIME.value) + places_shortest_path_by_hidden = exec_utils.get_param_value(Parameters.PLACES_SHORTEST_PATH_BY_HIDDEN, parameters, + None) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + consider_activities_not_in_model_in_fitness = exec_utils.get_param_value(Parameters.CONSIDER_ACTIVITIES_NOT_IN_MODEL_IN_FITNESS, parameters, False) + + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + if type(log) is not pd.DataFrame: + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + return apply_log(log, net, initial_marking, final_marking, enable_pltr_fitness=enable_pltr_fitness, + consider_remaining_in_fitness=consider_remaining_in_fitness, + reach_mark_through_hidden=try_to_reach_final_marking_through_hidden, + stop_immediately_unfit=stop_immediately_unfit, + walk_through_hidden_trans=walk_through_hidden_trans, + places_shortest_path_by_hidden=places_shortest_path_by_hidden, activity_key=activity_key, + is_reduction=is_reduction, thread_maximum_ex_time=thread_maximum_ex_time, + cleaning_token_flood=cleaning_token_flood, disable_variants=disable_variants, + return_object_names=return_names, show_progress_bar=show_progress_bar, + consider_activities_not_in_model_in_fitness=consider_activities_not_in_model_in_fitness, + case_id_key=case_id_key) + + +def apply_variants_list(variants_list, net, initial_marking, final_marking, parameters=None): + if parameters is None: + parameters = {} + parameters[Parameters.RETURN_NAMES] = True + + log = log_implementation.EventLog() + for var_item in variants_list: + trace = variants_util.variant_to_trace(var_item[0], parameters=parameters) + + log.append(trace) + + return apply(log, net, initial_marking, final_marking, parameters=parameters) + + +def apply_variants_dictionary(variants, net, initial_marking, final_marking, parameters=None): + if parameters is None: + parameters = {} + + var_list = {x: len(y) for x, y in variants.items()} + return apply_variants_list(var_list, net, initial_marking, final_marking, parameters=parameters) + + +def apply_variants_list_petri_string(variants_list, petri_string, parameters=None): + if parameters is None: + parameters = {} + + from pm4py.objects.petri_net.importer.variants import pnml as petri_importer + + net, im, fm = petri_importer.import_petri_from_string(petri_string, parameters=parameters) + + return apply_variants_list(variants_list, net, im, fm, parameters=parameters) + + +def apply_variants_list_petri_string_multiprocessing(output, variants_list, petri_string, parameters=None): + if parameters is None: + parameters = {} + + ret = apply_variants_list_petri_string(variants_list, petri_string, parameters=parameters) + + output.put(ret) + + +def get_diagnostics_dataframe(log: EventLog, tbr_output: typing.ListAlignments, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Gets the results of token-based replay in a dataframe + + Parameters + -------------- + log + Event log + tbr_output + Output of the token-based replay technique + + Returns + -------------- + dataframe + Diagnostics dataframe + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_util.DEFAULT_TRACEID_KEY) + + import pandas as pd + + diagn_stream = [] + + for index in range(len(log)): + case_id = log[index].attributes[case_id_key] + is_fit = tbr_output[index]["trace_is_fit"] + trace_fitness = tbr_output[index]["trace_fitness"] + missing = tbr_output[index]["missing_tokens"] + remaining = tbr_output[index]["remaining_tokens"] + produced = tbr_output[index]["produced_tokens"] + consumed = tbr_output[index]["consumed_tokens"] + + diagn_stream.append({"case_id": case_id, "is_fit": is_fit, "trace_fitness": trace_fitness, "missing": missing, "remaining": remaining, "produced": produced, "consumed": consumed}) + + return pandas_utils.instantiate_dataframe(diagn_stream) diff --git a/pm4py/pm4py/algo/connectors/__init__.py b/pm4py/pm4py/algo/connectors/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..06f83d5f567db59dfe77556ea7cfd2cac82ee6b9 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.connectors import util, variants diff --git a/pm4py/pm4py/algo/connectors/algorithm.py b/pm4py/pm4py/algo/connectors/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..778845c3bd35028066c0ff43fa2e34a8e88a2c3e --- /dev/null +++ b/pm4py/pm4py/algo/connectors/algorithm.py @@ -0,0 +1,61 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import pandas as pd +from typing import Optional, Dict, Any + + +AVAILABLE_CONNECTORS = ["chrome_history", "firefox_history", "github_repo", "outlook_calendar", "outlook_mail_extractor", + "windows_events", "camunda_workflow", "sap_accounting", "sap_o2c"] + + +def apply(type: str, args: Dict[Any, Any] = None, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + if args is None: + args = {} + + if parameters is None: + parameters = {} + + conn = args["conn"] if "conn" in args else None + + if type == "chrome_history": + from pm4py.algo.connectors.variants import chrome_history + return chrome_history.apply(parameters=parameters) + elif type == "firefox_history": + from pm4py.algo.connectors.variants import firefox_history + return firefox_history.apply(parameters=parameters) + elif type == "github_repo": + from pm4py.algo.connectors.variants import github_repo + return github_repo.apply(parameters=parameters) + elif type == "outlook_calendar": + from pm4py.algo.connectors.variants import outlook_calendar + return outlook_calendar.apply(parameters=parameters) + elif type == "outlook_mail": + from pm4py.algo.connectors.variants import outlook_mail_extractor + return outlook_mail_extractor.apply(parameters=parameters) + elif type == "windows_events": + from pm4py.algo.connectors.variants import windows_events + return windows_events.apply(parameters=parameters) + elif type == "camunda_workflow": + from pm4py.algo.connectors.variants import camunda_workflow + return camunda_workflow.apply(conn, parameters=parameters) + elif type == "sap_accounting": + from pm4py.algo.connectors.variants import sap_accounting + return sap_accounting.apply(conn, parameters=parameters) + elif type == "sap_o2c": + from pm4py.algo.connectors.variants import sap_o2c + return sap_o2c.apply(conn, parameters=parameters) diff --git a/pm4py/pm4py/algo/connectors/util/__init__.py b/pm4py/pm4py/algo/connectors/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d64ae2f21a518a92453f53f824115df2f515ba75 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/util/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.connectors.util import mail diff --git a/pm4py/pm4py/algo/connectors/util/mail.py b/pm4py/pm4py/algo/connectors/util/mail.py new file mode 100644 index 0000000000000000000000000000000000000000..8906b1d133e19f09a8eeb27aa04f3c999c1f6858 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/util/mail.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional + + +def connect(email_user: Optional[str], mailbox_id: int): + """ + Returns a mailbox object from the local Outlook instance. + + Parameters + ------------- + email_user + E-mail address to use + mailbox_id + ID of the mailbox to use: + * 5 = outbox + * 6 = inbox + * 9 = calendar + + Returns + ------------- + mailbox_obj + Mailbox object + """ + import pythoncom + pythoncom.CoInitialize() + + import win32com.client + + outlook = win32com.client.Dispatch('Outlook.Application').GetNamespace('MAPI') + mailbox_id = int(mailbox_id) + + if email_user is not None: + recipient = outlook.CreateRecipient(email_user) + recipient.Resolve() + return outlook.GetSharedDefaultFolder(recipient, mailbox_id) + + return outlook.GetDefaultFolder(mailbox_id) diff --git a/pm4py/pm4py/algo/connectors/variants/__init__.py b/pm4py/pm4py/algo/connectors/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..be585a556f86025af98379923033e0652c861926 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + diff --git a/pm4py/pm4py/algo/connectors/variants/camunda_workflow.py b/pm4py/pm4py/algo/connectors/variants/camunda_workflow.py new file mode 100644 index 0000000000000000000000000000000000000000..91fd86a1656bbe642eaee5be77615c4efc5a2710 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/variants/camunda_workflow.py @@ -0,0 +1,84 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +import pandas as pd + + +class Parameters(Enum): + CONNECTION_STRING = "connection_string" + + +def apply(conn, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Extracts an event log from the Camunda workflow system + + Parameters + --------------- + conn + (if provided) ODBC connection object to the database (offering cursors) + parameters + Parameters of the algorithm, including: + - Parameters.CONNECTION_STRING => connection string that is used (if no connection is provided) + + Returns + --------------- + dataframe + Pandas dataframe + """ + if parameters is None: + parameters = {} + + import pm4py + + connection_string = exec_utils.get_param_value(Parameters.CONNECTION_STRING, parameters, None) + + if conn is None: + import pyodbc + conn = pyodbc.connect(connection_string) + + curs = conn.cursor() + + query = """ + SELECT + pi.PROC_DEF_KEY_ AS "processID", + ai.EXECUTION_ID_ AS "case:concept:name", + ai.ACT_NAME_ AS "concept:name", + ai.START_TIME_ AS "time:timestamp", + ai.ASSIGNEE_ AS "org:resource" + FROM + act_hi_procinst pi + JOIN + act_hi_actinst ai ON pi.PROC_INST_ID_ = ai.PROC_INST_ID_ + ORDER BY + pi.PROC_INST_ID_, + ai.EXECUTION_ID_, + ai.START_TIME_; + """ + columns = ["processID", "case:concept:name", "concept:name", "time:timestamp", "org:resource"] + + curs.execute(query) + dataframe = curs.fetchall() + dataframe = pandas_utils.instantiate_dataframe_from_records(dataframe, columns=columns) + dataframe = pm4py.format_dataframe(dataframe) + + curs.close() + conn.close() + + return dataframe diff --git a/pm4py/pm4py/algo/connectors/variants/chrome_history.py b/pm4py/pm4py/algo/connectors/variants/chrome_history.py new file mode 100644 index 0000000000000000000000000000000000000000..d6b637bb451b07c5e912ddf4209bac31773ea272 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/variants/chrome_history.py @@ -0,0 +1,88 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import os +import sqlite3 +from datetime import datetime +import pandas as pd +from enum import Enum +from typing import Optional, Dict, Any +from pm4py.util import exec_utils, pandas_utils + + +class Parameters(Enum): + HISTORY_DB_PATH = "history_db_path" + + +def apply(parameters: Optional[Dict[Any, str]] = None) -> pd.DataFrame: + """ + Extracts a dataframe containing the navigation history of Google Chrome. + Please keep Google Chrome history closed when extracting. + + CASE ID (case:concept:name) => an identifier of the profile that has been extracted + ACTIVITY (concept:name) => the complete path of the website, minus the GET arguments + TIMESTAMP (time:timestamp) => the timestamp of visit + + Parameters + -------------- + Parameters.HISTORY_DB_PATH + Path to the history DB path of Google Chrome (default: position of the Windows folder) + + Returns + -------------- + dataframe + Pandas dataframe + """ + if parameters is None: + parameters = {} + + history_db_path = exec_utils.get_param_value(Parameters.HISTORY_DB_PATH, parameters, "C:\\Users\\" + os.getenv( + 'USERNAME') + "\\AppData\\Local\\Google\\Chrome\\User Data") + print(history_db_path) + + if os.path.isdir(history_db_path): + profiles = [(os.path.join(history_db_path, x, "History"), x) for x in os.listdir(history_db_path) if + x.startswith("Profile ")] + else: + profiles = [(history_db_path, "DEFAULT")] + + profiles = [x for x in profiles if os.path.exists(x[0])] + + events = [] + for prof in profiles: + conn = sqlite3.connect(prof[0]) + curs = conn.cursor() + curs.execute( + "SELECT b.url, datetime(a.visit_time / 1000000 + (strftime('%s', '1601-01-01')), 'unixepoch', 'localtime') FROM (SELECT url, visit_time FROM visits) a JOIN (SELECT id, url FROM urls) b ON a.url = b.id") + res = curs.fetchall() + for r in res: + ev = {"case:concept:name": prof[1], "concept:name": r[0].split("//")[-1].split("?")[0].replace(",", ""), + "complete_url": r[0], + "domain": r[0].split("//")[-1].split("/")[0], "url_wo_parameters": r[0].split("//")[-1].split("?")[0], + "time:timestamp": datetime.strptime(r[1], "%Y-%m-%d %H:%M:%S")} + if len(ev["case:concept:name"].strip()) > 0 and len(ev["concept:name"].strip()) > 0: + events.append(ev) + curs.close() + conn.close() + + dataframe = pandas_utils.instantiate_dataframe(events) + if len(dataframe) > 0: + dataframe = pandas_utils.insert_index(dataframe, "@@index", copy_dataframe=False, reset_index=False) + dataframe = dataframe.sort_values(["time:timestamp", "@@index"]) + dataframe["@@case_index"] = dataframe.groupby("case:concept:name", sort=False).ngroup() + dataframe = dataframe.sort_values(["@@case_index", "time:timestamp", "@@index"]) + return dataframe diff --git a/pm4py/pm4py/algo/connectors/variants/firefox_history.py b/pm4py/pm4py/algo/connectors/variants/firefox_history.py new file mode 100644 index 0000000000000000000000000000000000000000..65a5effe5f660df9e0e02c3f74a4e025e007b706 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/variants/firefox_history.py @@ -0,0 +1,88 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import os +import sqlite3 +from datetime import datetime +import pandas as pd +from enum import Enum +from typing import Optional, Dict, Any +from pm4py.util.dt_parsing.variants import strpfromiso +from pm4py.util import exec_utils, pandas_utils + + +class Parameters(Enum): + HISTORY_DB_PATH = "history_db_path" + + +def apply(parameters: Optional[Dict[Any, str]] = None) -> pd.DataFrame: + """ + Extracts a dataframe containing the navigation history of Mozilla Firefox. + Please keep Google Mozilla Firefox closed when extracting. + + CASE ID (case:concept:name) => an identifier of the profile that has been extracted + ACTIVITY (concept:name) => the complete path of the website, minus the GET arguments + TIMESTAMP (time:timestamp) => the timestamp of visit + + Parameters + -------------- + Parameters.HISTORY_DB_PATH + Path to the history DB path of Mozilla Firefox (default: position of the Windows folder) + + Returns + -------------- + dataframe + Pandas dataframe + """ + if parameters is None: + parameters = {} + + history_db_path = exec_utils.get_param_value(Parameters.HISTORY_DB_PATH, parameters, "C:\\Users\\" + os.getenv( + 'USERNAME') + "\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles") + print(history_db_path) + + if os.path.isdir(history_db_path): + profiles = [(os.path.join(history_db_path, x, "places.sqlite"), x) for x in os.listdir(history_db_path)] + else: + profiles = [(history_db_path, "DEFAULT")] + + profiles = [x for x in profiles if os.path.exists(x[0])] + + events = [] + for prof in profiles: + if os.path.exists(prof[0]): + conn = sqlite3.connect(prof[0]) + curs = conn.cursor() + curs.execute( + "SELECT b.url, a.visit_date FROM (SELECT id, visit_date FROM moz_historyvisits) a JOIN (SELECT id, url FROM moz_places) b ON a.id = b.id") + res = curs.fetchall() + for r in res: + ev = {"case:concept:name": prof[1], "concept:name": r[0].split("//")[-1].split("?")[0].replace(",", ""), "complete_url": r[0], + "domain": r[0].split("//")[-1].split("/")[0], "url_wo_parameters": r[0].split("//")[-1].split("?")[0], + "time:timestamp": strpfromiso.fix_naivety(datetime.fromtimestamp(r[1]/10**6))} + if len(ev["case:concept:name"].strip()) > 0 and len(ev["concept:name"].strip()) > 0: + events.append(ev) + curs.close() + conn.close() + + dataframe = pandas_utils.instantiate_dataframe(events) + if len(dataframe) > 0: + dataframe = pandas_utils.insert_index(dataframe, "@@index", copy_dataframe=False, reset_index=False) + dataframe = dataframe.sort_values(["time:timestamp", "@@index"]) + dataframe["@@case_index"] = dataframe.groupby("case:concept:name", sort=False).ngroup() + dataframe = dataframe.sort_values(["@@case_index", "time:timestamp", "@@index"]) + return dataframe diff --git a/pm4py/pm4py/algo/connectors/variants/github_repo.py b/pm4py/pm4py/algo/connectors/variants/github_repo.py new file mode 100644 index 0000000000000000000000000000000000000000..b12d1ffa42936974549133c1e2e71e7a43dba8e2 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/variants/github_repo.py @@ -0,0 +1,122 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import time +import traceback +import pandas as pd +from dateutil.parser import parse +from pm4py.util.dt_parsing.variants import strpfromiso +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +import importlib.util + + +class Parameters(Enum): + OWNER = "owner" + REPOSITORY = "repository" + AUTH_TOKEN = "auth_token" + + +def apply(parameters: Optional[Dict[Any, str]] = None) -> pd.DataFrame: + """ + Extracts a dataframe containing the history of the issues of a Github repository. + According to the API limit rate of public/registered users, only a part of the events + can be returned. + + Parameters + --------------- + prameters + Parameters of the algorithm, including: + - Parameters.OWNER => owner of the repository (e.g., pm4py) + - Parameters.REPOSITORY => name of the repository (e.g., pm4py-core) + - Parameters.AUTH_TOKEN => authorization token + + Returns + --------------- + dataframe + Pandas dataframe + """ + import requests + + if parameters is None: + parameters = {} + + owner = exec_utils.get_param_value(Parameters.OWNER, parameters, "pm4py") + repo = exec_utils.get_param_value(Parameters.REPOSITORY, parameters, "pm4py-core") + auth_token = exec_utils.get_param_value(Parameters.AUTH_TOKEN, parameters, None) + + headers = {} + if auth_token is not None: + headers["Authorization"] = "Bearer "+auth_token + + continuee = True + page = 0 + events = [] + + progress = None + + while continuee: + page += 1 + try: + r = requests.get("https://api.github.com/repos/"+owner+"/"+repo+"/issues?state=all&per_page=100&page="+str(page), headers=headers) + issues = r.json() + if not issues: + continuee = False + break + + if importlib.util.find_spec("tqdm"): + from tqdm.auto import tqdm + progress = tqdm(total=len(issues), + desc="extracting issues of page " + str(page) + ", progress :: ") + + for i in issues: + if continuee: + if "timeline_url" in i: + timeline_url = i["timeline_url"] + eve = {"case:owner": owner, "case:repo": owner+"/"+repo, "case:concept:name": timeline_url, "time:timestamp": strpfromiso.fix_naivety(parse(i["created_at"])), "concept:name": "created", "org:resource": i["user"]["login"], "case:author_association": i["author_association"], "case:title": i["title"]} + if "pull_request" in i: + eve["case:pull_request"] = i["pull_request"]["url"] + events.append(eve) + r2 = requests.get(timeline_url, headers=headers) + issue_events = r2.json() + issue_events.reverse() + for ev in issue_events: + if "created_at" in ev and "event" in ev and "actor" in ev: + eve = {"case:owner": owner, "case:repo": owner+"/"+repo, "case:concept:name": timeline_url, "time:timestamp": strpfromiso.fix_naivety(parse(ev["created_at"])), "concept:name": ev["event"], "org:resource": ev["actor"]["login"], "case:author_association": i["author_association"], "case:title": i["title"]} + if "pull_request" in i: + eve["case:pull_request"] = i["pull_request"]["url"] + events.append(eve) + if progress is not None: + progress.update() + if progress is not None: + progress.close() + time.sleep(1) + except: + continuee = False + traceback.print_exc() + if progress is not None: + progress.close() + break + + dataframe = pandas_utils.instantiate_dataframe(events) + if len(dataframe) > 0: + dataframe = pandas_utils.insert_index(dataframe, "@@index", copy_dataframe=False, reset_index=False) + dataframe = dataframe.sort_values(["time:timestamp", "@@index"]) + dataframe["@@case_index"] = dataframe.groupby("case:concept:name", sort=False).ngroup() + dataframe = dataframe.sort_values(["@@case_index", "time:timestamp", "@@index"]) + return dataframe diff --git a/pm4py/pm4py/algo/connectors/variants/outlook_calendar.py b/pm4py/pm4py/algo/connectors/variants/outlook_calendar.py new file mode 100644 index 0000000000000000000000000000000000000000..bd3972e46076193f6d64831d482d622214d132bf --- /dev/null +++ b/pm4py/pm4py/algo/connectors/variants/outlook_calendar.py @@ -0,0 +1,103 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any +from pm4py.util import exec_utils, pandas_utils +from enum import Enum +from pm4py.algo.connectors.util import mail as mail_utils +from pm4py.util.dt_parsing.variants import strpfromiso +import pandas as pd +from datetime import datetime +import importlib.util +import traceback + + +class Parameters(Enum): + EMAIL_USER = "email_user" + CALENDAR_ID = "calendar_id" + + +def apply(parameters: Optional[Dict[str, Any]] = None) -> pd.DataFrame: + """ + Extracts the history of the calendar events (creation, update, start, end) + in a Pandas dataframe from the local Outlook instance running on the current computer. + + CASE ID (case:concept:name) => identifier of the meeting + ACTIVITY (concept:name) => one between: Meeting Created, Last Change of Meeting, Meeting Started, Meeting Completed + TIMESTAMP (time:timestamp) => the timestamp of the event + case:subject => the subject of the meeting + + Returns + ------- + dataframe + Pandas dataframe + """ + if parameters is None: + parameters = {} + + calendar_id = exec_utils.get_param_value(Parameters.CALENDAR_ID, parameters, 9) + email_user = exec_utils.get_param_value(Parameters.EMAIL_USER, parameters, None) + + calendar = mail_utils.connect(email_user, calendar_id) + + progress = None + if importlib.util.find_spec("tqdm"): + from tqdm.auto import tqdm + progress = tqdm(total=len(calendar.Items), + desc="extracting calendar items, progress :: ") + + events = [] + for it in calendar.Items: + try: + conversation_id = str(it.ConversationID) + subject = str(it.Subject) + creation_time = strpfromiso.fix_naivety(datetime.fromtimestamp(it.CreationTime.timestamp())) + last_modification_time = strpfromiso.fix_naivety(datetime.fromtimestamp(it.LastModificationTime.timestamp())) + start_timestamp = strpfromiso.fix_naivety(datetime.fromtimestamp(it.Start.timestamp())) + end_timestamp = strpfromiso.fix_naivety(datetime.fromtimestamp(it.Start.timestamp() + 60 * it.Duration)) + + events.append( + {"case:concept:name": conversation_id, "case:subject": subject, "time:timestamp": creation_time, + "concept:name": "Meeting Created"}) + + if last_modification_time != creation_time: + events.append({"case:concept:name": conversation_id, "case:subject": subject, + "time:timestamp": last_modification_time, + "concept:name": "Last Change of Meeting"}) + + events.append( + {"case:concept:name": conversation_id, "case:subject": subject, "time:timestamp": start_timestamp, + "concept:name": "Meeting Started"}) + events.append( + {"case:concept:name": conversation_id, "case:subject": subject, "time:timestamp": end_timestamp, + "concept:name": "Meeting Completed"}) + except: + traceback.print_exc() + pass + if progress is not None: + progress.update() + + if progress is not None: + progress.close() + + dataframe = pandas_utils.instantiate_dataframe(events) + dataframe = pandas_utils.insert_index(dataframe, "@@index", copy_dataframe=False, reset_index=False) + dataframe = dataframe.sort_values(["time:timestamp", "@@index"]) + dataframe["@@case_index"] = dataframe.groupby("case:concept:name", sort=False).ngroup() + dataframe = dataframe.sort_values(["@@case_index", "time:timestamp", "@@index"]) + + return dataframe diff --git a/pm4py/pm4py/algo/connectors/variants/outlook_mail_extractor.py b/pm4py/pm4py/algo/connectors/variants/outlook_mail_extractor.py new file mode 100644 index 0000000000000000000000000000000000000000..5543f77b1bfea438481e228e01c702cca87ac566 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/variants/outlook_mail_extractor.py @@ -0,0 +1,127 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict +from pm4py.algo.connectors.util import mail as mail_utils +from pm4py.util import pandas_utils +import pandas as pd +from datetime import datetime +from pm4py.util.dt_parsing.variants import strpfromiso +from typing import List, Any +import importlib.util +import traceback + + +correspondence = { + "43": "Mail", + "53": "Meeting Request", + "54": "Meeting Cancellation", + "55": "Meeting Declination", + "56": "Meeting Acceptance", + "57": "Meeting Tentatively Accepted", + "181": "Meeting Forward Notification", + "46": "Delivery Report" +} + + +def get_events(box, prefix, progress) -> List[Dict[str, Any]]: + """ + Utility method extracting the items of a given mailbox. + + Parameters + -------------- + box + Mailbox + prefix + Prefix for the activities (Sent / Received ) + + Returns + -------------- + list_events + List of events (dictionaries) + """ + events = [] + for it in box.Items: + cla = " " + try: + cla = str(it.Class) + if cla in correspondence: + cla = prefix + correspondence[cla] + subject = str(it.Subject) + timestamp = strpfromiso.fix_naivety(datetime.fromtimestamp(it.CreationTime.timestamp())) + sender = "EMPTY" + try: + sender = str(it.Sender.Name) + except: + pass + recipients = "EMPTY" + try: + recipients = " AND ".join([str(x.Name) for x in it.Recipients]) + except: + pass + conversationid = str(it.ConversationID) + conversationtopic = str(it.ConversationTopic) + events.append({"case:concept:name": conversationid, "concept:name": cla, "time:timestamp": timestamp, + "org:resource": sender, "recipients": recipients, "topic": conversationtopic, "subject": subject}) + except: + traceback.print_exc() + pass + if progress is not None: + progress.update() + return events + + +def apply(parameters: Optional[Dict[str, Any]] = None) -> pd.DataFrame: + """ + Extracts the history of the conversations from the local instance of Microsoft Outlook + running on the current computer. + + CASE ID (case:concept:name) => identifier of the conversation + ACTIVITY (concept:name) => activity that is performed in the current item (send e-mail, receive e-mail, refuse meeting ...) + TIMESTAMP (time:timestamp) => timestamp of creation of the item in Outlook + RESOURCE (org:resource) => sender of the current item + + Returns + --------------- + dataframe + Pandas dataframe + """ + if parameters is None: + parameters = {} + + inbox = mail_utils.connect(None, 6) + outbox = mail_utils.connect(None, 5) + + progress = None + if importlib.util.find_spec("tqdm"): + from tqdm.auto import tqdm + progress = tqdm(total=len(outbox.Items)+len(inbox.Items), + desc="extracting mailbox items, progress :: ") + + events = get_events(outbox, "Sent ", progress) + events = events + get_events(inbox, "Received ", progress) + + if progress is not None: + progress.close() + + dataframe = pandas_utils.instantiate_dataframe(events) + dataframe = pandas_utils.insert_index(dataframe, "@@index", copy_dataframe=False, reset_index=False) + dataframe = dataframe.sort_values(["time:timestamp", "@@index"]) + dataframe["@@case_index"] = dataframe.groupby("case:concept:name", sort=False).ngroup() + dataframe = dataframe.sort_values(["@@case_index", "time:timestamp", "@@index"]) + + return dataframe diff --git a/pm4py/pm4py/algo/connectors/variants/sap_accounting.py b/pm4py/pm4py/algo/connectors/variants/sap_accounting.py new file mode 100644 index 0000000000000000000000000000000000000000..a8faa4854c0eafe8dbdefcaba13897edd3a48d12 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/variants/sap_accounting.py @@ -0,0 +1,81 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +import pandas as pd + + +class Parameters(Enum): + CONNECTION_STRING = "connection_string" + PREFIX = "prefix" + + +def apply(conn, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Extracts an event log for the SAP Accounting process + + Parameters + --------------- + conn + (if provided) ODBC connection object to the database (offering cursors) + parameters + Parameters of the algorithm, including: + - Parameters.CONNECTION_STRING => connection string that is used (if no connection is provided) + - Parameters.PREFIX => prefix to add to the table names (example SAPSR3.) + + Returns + --------------- + dataframe + Pandas dataframe + """ + if parameters is None: + parameters = {} + + import pm4py + + connection_string = exec_utils.get_param_value(Parameters.CONNECTION_STRING, parameters, None) + + if conn is None: + import pyodbc + conn = pyodbc.connect(connection_string) + + prefix = exec_utils.get_param_value(Parameters.PREFIX, parameters, "") + + curs = conn.cursor() + + query = """ + SELECT * FROM + (SELECT MANDT || '-' || BUKRS || '-' || GJAHR || '-' || BELNR AS "case:concept:name", 'Create Financial Document - ' || BLART AS "concept:name", CPUDT || ' ' || CPUTM AS "time:timestamp", USNAM AS "org:resource", BLART FROM """+prefix+"""BKPF + UNION + SELECT MANDT || '-' || BUKRS || '-' || GJAHR || '-' || AUGBL AS "case:concept:name", 'Clear Customer Document' AS "concept:name", AUGDT || ' 235958' AS "time:timestamp", NULL AS "org:resource", NULL AS BLART FROM """+prefix+"""BSAD + UNION + SELECT MANDT || '-' || BUKRS || '-' || GJAHR || '-' || AUGBL AS "case:concept:name", 'Clear Vendor Document' AS "concept:name", AUGDT || ' 235959' AS "time:timestamp", NULL AS "org:resource", NULL AS BLART FROM """+prefix+"""BSAK) + ORDER BY "case:concept:name", "time:timestamp"; + """ + columns = ["case:concept:name", "concept:name", "time:timestamp", "org:resource", "BLART"] + + curs.execute(query) + dataframe = curs.fetchall() + dataframe = pandas_utils.instantiate_dataframe_from_records(dataframe, columns=columns) + dataframe = pm4py.format_dataframe(dataframe) + + curs.close() + conn.close() + + return dataframe diff --git a/pm4py/pm4py/algo/connectors/variants/sap_o2c.py b/pm4py/pm4py/algo/connectors/variants/sap_o2c.py new file mode 100644 index 0000000000000000000000000000000000000000..dd70b7bca8325029b14330f01fa8eb7cec4e356a --- /dev/null +++ b/pm4py/pm4py/algo/connectors/variants/sap_o2c.py @@ -0,0 +1,130 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +import pandas as pd + + +class Parameters(Enum): + CONNECTION_STRING = "connection_string" + PREFIX = "prefix" + + +def apply(conn, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Extracts an event log for the SAP Order-to-Cash process + + Parameters + --------------- + conn + (if provided) connection object to the database (offering cursors) + parameters + Parameters of the algorithm, including: + - Parameters.CONNECTION_STRING => ODBC connection string that is used (if no connection is provided) + - Parameters.PREFIX => prefix to add to the table names (example SAPSR3.) + + Returns + --------------- + dataframe + Pandas dataframe + """ + if parameters is None: + parameters = {} + + import pm4py + + connection_string = exec_utils.get_param_value(Parameters.CONNECTION_STRING, parameters, None) + + if conn is None: + import pyodbc + conn = pyodbc.connect(connection_string) + + prefix = exec_utils.get_param_value(Parameters.PREFIX, parameters, "") + + curs = conn.cursor() + + query = """ +SELECT * FROM +(SELECT + T1.VBELN AS "case:concept:name", + DECODE(T1.TYPE, 'C', 'Create Sales Document', 'D', 'Create Delivery') AS "concept:name", + T1.TIMESTAMP AS "time:timestamp", + T1.USERNAME AS "org:resource" +FROM + ( + SELECT + 'C' AS TYPE, + VBAK.VBELN, + VBAK.ERDAT || ' ' || VBAK.ERZET AS TIMESTAMP, + VBAK.ERNAM AS USERNAME + FROM + """+prefix+"""VBAK + UNION ALL + SELECT + 'D' AS TYPE, + VBFA.VBELV AS VBELN, + LIKP.ERDAT || ' ' || LIKP.ERZET AS TIMESTAMP, + LIKP.ERNAM AS USERNAME + FROM + """+prefix+"""LIKP + JOIN """+prefix+"""VBFA ON LIKP.VBELN = VBFA.VBELN + WHERE + VBFA.VBTYP_N = 'J' + ) T1 ) + UNION + ( + SELECT + VBFA.VBELN AS "case:concept:name", + TSTCT.TTEXT AS "concept:name", + CDHDR.UDATE || ' ' || CDHDR.UTIME AS "time:timestamp", + CDHDR.USERNAME AS "org:resource" +FROM + """+prefix+"""VBFA VBFA + JOIN """+prefix+"""VBAK VBAK ON VBFA.VBELN = VBAK.VBELN + JOIN """+prefix+"""VBAP VBAP ON VBAK.VBELN = VBAP.VBELN + JOIN """+prefix+"""CDHDR CDHDR ON VBFA.VBELN = CDHDR.OBJECTID + JOIN """+prefix+"""TSTCT TSTCT ON CDHDR.TCODE = TSTCT.TCODE +WHERE + VBFA.VBTYP_N = 'C' + AND TSTCT.SPRSL = 'E' + ) + UNION + ( + SELECT + C.VBELN AS "case:concept:name", + 'Create Billing' AS "concept:name", + C.FKDAT AS "time:timestamp", + C.ERNAM AS "org:resource" + FROM + """+prefix+"""VBRK C + JOIN + """+prefix+"""VBAK A ON A.VBELN = C.VBELN + ) + """ + columns = ["case:concept:name", "concept:name", "time:timestamp", "org:resource"] + + curs.execute(query) + dataframe = curs.fetchall() + dataframe = pandas_utils.instantiate_dataframe_from_records(dataframe, columns=columns) + dataframe = pm4py.format_dataframe(dataframe) + + curs.close() + conn.close() + + return dataframe diff --git a/pm4py/pm4py/algo/connectors/variants/windows_events.py b/pm4py/pm4py/algo/connectors/variants/windows_events.py new file mode 100644 index 0000000000000000000000000000000000000000..ba658ebdfe00357d9d0c5e2b8fcb07e50f3cd8c8 --- /dev/null +++ b/pm4py/pm4py/algo/connectors/variants/windows_events.py @@ -0,0 +1,85 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any +import pandas as pd +from datetime import datetime +from pm4py.util import pandas_utils +import importlib.util + + +def apply(parameters: Optional[Dict[str, Any]] = None) -> pd.DataFrame: + """ + Extract a process mining dataframe from all the events recorded in the Windows registry. + + CASE ID (case:concept:name) => name of the computer emitting the events. + ACTIVITY (concept:name) => concatenation of the source name of the event and the event identifier + (see https://learn.microsoft.com/en-us/previous-versions/windows/desktop/eventlogprov/win32-ntlogevent) + TIMESTAMP (time:timestamp) => timestamp of generation of the event + RESOURCE (org:resource) => username involved in the event + + Returns + ---------------- + dataframe + Pandas dataframe + """ + if parameters is None: + parameters = {} + + import win32com.client + + print(":: executing SQL query against the Windows registry. this can take time.") + + strComputer = "." + objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") + objSWbemServices = objWMIService.ConnectServer(strComputer, "root\cimv2") + colItems = objSWbemServices.ExecQuery("Select * from Win32_NTLogEvent") + events = [] + + progress = None + if importlib.util.find_spec("tqdm"): + from tqdm.auto import tqdm + progress = tqdm(total=len(colItems), + desc="extracting Windows events, progress :: ") + + for objItem in colItems: + events.append({"category": str(objItem.Properties_("Category")), "categoryString": str(objItem.Properties_("CategoryString")), + "computerName": str(objItem.Properties_("ComputerName")), "eventCode": str(objItem.Properties_("EventCode")), + "eventIdentifier": str(objItem.Properties_("EventIdentifier")), "eventType": str(objItem.Properties_("EventType")), + "logFile": str(objItem.Properties_("LogFile")), "message": str(objItem.Properties_("Message")), + "recordNumber": str(objItem.Properties_("RecordNumber")), + "sourceName": str(objItem.Properties_("SourceName")), + "timeGenerated": datetime.strptime(str(str(objItem.Properties_("TimeGenerated"))).split("+")[0].split("-")[0], "%Y%m%d%H%M%S.%f"), + "timeWritten": datetime.strptime(str(str(objItem.Properties_("TimeWritten"))).split("+")[0].split("-")[0], "%Y%m%d%H%M%S.%f"), + "type": str(str(objItem.Properties_("Type"))), "user": str(str(objItem.Properties_("User")))}) + if progress is not None: + progress.update() + + if progress is not None: + progress.close() + + dataframe = pandas_utils.instantiate_dataframe(events) + dataframe["case:concept:name"] = dataframe["computerName"] + dataframe["time:timestamp"] = dataframe["timeGenerated"] + dataframe["concept:name"] = dataframe["sourceName"] + " " + dataframe["eventIdentifier"] + dataframe["org:resource"] = dataframe["user"] + dataframe = pandas_utils.insert_index(dataframe, "@@index", copy_dataframe=False, reset_index=False) + dataframe = dataframe.sort_values(["time:timestamp", "@@index"]) + dataframe["@@case_index"] = dataframe.groupby("case:concept:name", sort=False).ngroup() + dataframe = dataframe.sort_values(["@@case_index", "time:timestamp", "@@index"]) + + return dataframe diff --git a/pm4py/pm4py/algo/decision_mining/__init__.py b/pm4py/pm4py/algo/decision_mining/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b66e0ead21604733fe802f5f4faed769f0339a2b --- /dev/null +++ b/pm4py/pm4py/algo/decision_mining/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.decision_mining import algorithm + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The decision_mining package will be removed in a future release.") diff --git a/pm4py/pm4py/algo/decision_mining/algorithm.py b/pm4py/pm4py/algo/decision_mining/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..f5b8155ca7a361728bb5ba8a650941d7ad5183a7 --- /dev/null +++ b/pm4py/pm4py/algo/decision_mining/algorithm.py @@ -0,0 +1,535 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +from copy import deepcopy, copy +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple +import numpy as np + +from pm4py.algo.conformance.alignments.petri_net import algorithm as ali +from pm4py.algo.conformance.alignments.petri_net.variants import state_equation_a_star as star +from pm4py.algo.conformance.tokenreplay import algorithm as token_replay +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net import properties as petri_properties +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.statistics.attributes.log.select import select_attributes_from_log_for_tree +from pm4py.statistics.variants.log import get as variants_module +from pm4py.util import constants, xes_constants +from pm4py.util import exec_utils, pandas_utils +from pm4py.visualization.decisiontree.util import dt_to_string +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + LABELS = "labels" + + +def create_data_petri_nets_with_decisions(log: Union[EventLog, pd.DataFrame], net: PetriNet, initial_marking: Marking, + final_marking: Marking) -> Tuple[PetriNet, Marking, Marking]: + """ + Given a Petri net, create a data Petri net with the decisions given for each place by the decision + mining algorithm + + Parameters + ---------------- + log + Event log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + + Returns + ------------------ + data_petri_net + Data petri net + initial_marking + Initial marking (unchanged) + final_marking + Final marking (unchanged) + """ + all_conditions = {} + all_variables = {} + for place in net.places: + try: + clf, columns, targets = get_decision_tree(log, net, initial_marking, final_marking, + decision_point=place.name, + parameters={"labels": False}) + target_classes, variables = dt_to_string.apply(clf, columns) + target_classes = {targets[int(k)]: v for k, v in target_classes.items()} + variables = {targets[int(k)]: v for k, v in variables.items()} + for k in target_classes.keys(): + all_conditions[k] = target_classes[k] + all_variables[k] = variables[k] + except: + pass + for trans in net.transitions: + if trans.name in all_conditions: + trans.properties[petri_properties.TRANS_GUARD] = all_conditions[trans.name] + trans.properties[petri_properties.READ_VARIABLE] = all_variables[trans.name] + trans.properties[petri_properties.WRITE_VARIABLE] = [] + return net, initial_marking, final_marking + + +def get_decision_tree(log: Union[EventLog, pd.DataFrame], net: PetriNet, initial_marking: Marking, final_marking: Marking, + decision_point=None, attributes=None, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Any: + """ + Gets a decision tree classifier on a specific point of the model + + Parameters + -------------- + log + Event log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + decision_point + Point of the process in which a decision happens: + - if not specified, the method crashes, but provides a list of possible decision points + - if specified, the method goes on and produce the decision tree + attributes + Attributes of the log. If not specified, then an automatic attribute selection + is performed. + parameters + Parameters of the algorithm + + Returns + --------------- + clf + Decision tree + feature_names + The names of the features + classes + The classes + """ + from pm4py.util import ml_utils + + if parameters is None: + parameters = {} + + X, y, targets = apply(log, net, initial_marking, final_marking, decision_point=decision_point, + attributes=attributes, parameters=parameters) + + dt = ml_utils.DecisionTreeClassifier() + dt = dt.fit(X, y) + return dt, list(X.columns.values.tolist()), targets + + +def apply(log: Union[EventLog, pd.DataFrame], net: PetriNet, initial_marking: Marking, final_marking: Marking, decision_point=None, + attributes=None, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Any: + """ + Gets the essential information (features, target class and names of the target class) + in order to learn a classifier + + Parameters + -------------- + log + Event log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + decision_point + Point of the process in which a decision happens: + - if not specified, the method crashes, but provides a list of possible decision points + - if specified, the method goes on and produce the decision tree + attributes + Attributes of the log. If not specified, then an automatic attribute selection + is performed. + parameters + Parameters of the algorithm + + Returns + --------------- + X + features + y + Target class + class_name + Target class names + """ + import pandas as pd + + if parameters is None: + parameters = {} + + labels = exec_utils.get_param_value(Parameters.LABELS, parameters, True) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + if decision_point is None: + decision_points_names = get_decision_points(net, labels=labels, parameters=parameters) + raise Exception("please provide decision_point as argument of the method. Possible decision points: ", + decision_points_names) + if attributes is None: + str_tr_attr, str_ev_attr, num_tr_attr, num_ev_attr = select_attributes_from_log_for_tree(log) + attributes = list(str_ev_attr) + list(num_ev_attr) + I, dp = get_decisions_table(log, net, initial_marking, final_marking, attributes=attributes, + pre_decision_points=[decision_point], parameters=parameters) + x_attributes = [a for a in attributes if not a == activity_key] + str_attributes = set() + non_str_attributes = set() + x = [] + x2 = [] + y = [] + for el in I[decision_point]: + for a, v in el[0].items(): + if a in x_attributes: + if type(v) is str: + str_attributes.add(a) + else: + non_str_attributes.add(a) + x.append({a: v for a, v in el[0].items() if a in x_attributes and type(v) is str}) + x2.append({a: v for a, v in el[0].items() if a in x_attributes and type(v) is not str}) + y.append(el[1]) + X = pandas_utils.instantiate_dataframe(x) + X = pd.get_dummies(data=X, columns=list(str_attributes)) + X2 = pandas_utils.instantiate_dataframe(x2) + X = pandas_utils.concat([X, X2], axis=1) + Y = pandas_utils.instantiate_dataframe(y, columns=["Name"]) + Y, targets = encode_target(Y, "Name") + y = Y['Target'] + return X, y, targets + + +def get_decisions_table(log0, net, initial_marking, final_marking, attributes=None, use_trace_attributes=False, k=1, + pre_decision_points=None, trace_attributes=None, parameters=None): + """ + Gets a decision table out of a log and an accepting Petri net + + Parameters + ----------------- + log0 + Event log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + attributes + List of attributes which are considered + (if not provided, all the attributes are considered) + use_trace_attributes + Include trace attributes in the decision table + k + Number that determines the number of last activities to take into account + pre_decision_points + List of Strings of place Names that have to be considered as decision points. + If not provided, the decision points are inferred from the Petri net + trace_attributes + List of trace attributes to consider + parameters + Possible parameters of the algorithm + + Returns + -------------- + I + decision table + decision_points + The decision points as places of the Petri net, which are the keys of a dictionary + having as values the list of transitions that are target + """ + if parameters is None: + parameters = {} + + labels = exec_utils.get_param_value(Parameters.LABELS, parameters, True) + + log = deepcopy(log0) + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + if pre_decision_points != None: + if not isinstance(pre_decision_points, list): + print( + "Error: The parameter pre_decision_points has to be a list of names of the places that have to be considered.") + sys.exit() + if len(pre_decision_points) == 0: + print("Error: There must be at least one element in the list of pre_decision_points.") + sys.exit() + if attributes != None: + if not isinstance(attributes, list): + print( + "Error: The parameter attributes has to be a list of names of event attributes that have to be considered.") + sys.exit() + if len(attributes) == 0: + print("Error: There must be at least one element in the list of attributes.") + sys.exit() + if use_trace_attributes == False and trace_attributes != None and isinstance(trace_attributes, list): + print( + "Note: Since a list of considerable trace attributes is provided, and use_trace_attributes was set on False, we set it on True") + use_trace_attributes = True + if trace_attributes != None: + if not isinstance(trace_attributes, list): + print( + "Error: The parameter trace_attributes has to be a list of names of trace attributes that have to be considered.") + sys.exit() + if len(trace_attributes) == 0: + print("Error: There must be at least one element in the list of trace_attributes.") + sys.exit() + + # alignment = ali.apply(log, net, initial_marking, final_marking, variant=True, parameters={star.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE:True}) + decision_points = get_decision_points(net, pre_decision_points=pre_decision_points, parameters=parameters) + decision_points_names = get_decision_points(net, labels=labels, pre_decision_points=pre_decision_points, + parameters=parameters) + if use_trace_attributes: + # Made to ensure distinguishness between event and trace attributes. + log = prepare_event_log(log) + if attributes != None: + attributes = prepare_attributes(attributes) + + if use_trace_attributes and trace_attributes == None: + # if no list of trace attributes is provided, we create one + trace_attributes = [] + if use_trace_attributes: + for trace in log: + trace_attributes += list(trace.attributes) + trace_attributes = list(set(trace_attributes)) + if attributes == None: + # if no list is given, every attribute of the events are considered + attributes = [] + for trace in log: + for event in trace: + attributes += list(event.keys()) + attributes = list(set(attributes)) + I = get_attributes(log, decision_points, + attributes, use_trace_attributes, trace_attributes, + k, net, initial_marking, final_marking, decision_points_names, parameters=parameters) + return (I, decision_points) + + +def prepare_event_log(log): + """ + If trace attributes are considered, it is possible that trace attributes have the same name as event attributes. + To tackle this issue, the attributes get renamed. + For trace attributes, we add "t_" at the beginning of the dictionary keys. + For event attributes, we add "e_" at the beginning of the dict keys. + :param log: + :return: + """ + for trace in log: + attributes = trace.attributes.copy() + for attribute in attributes: + trace.attributes["t_" + attribute] = trace.attributes.pop(attribute) + for event in trace: + attributes = event._dict.copy() + for attribute in attributes: + event._dict["e_" + attribute] = event._dict.pop(attribute) + return log + + +def prepare_attributes(attributes): + """ + Method that "e_" in front of every attribute if trace attributes are considered. + :param attributes: List of event attributes that the user wants to consider. + :return: list of edited attribute names + """ + new_attributes = [] + for attribute in attributes: + new_attributes.append("e_" + attribute) + return new_attributes + + +def get_decision_points(net, labels=False, pre_decision_points=None, parameters=None): + """ + The goal is to get all decision places. These are places where there are at least two outgoing arcs. + :param net: Petri Net where decision points are discovered (places with at least two outgoing arcs) + :param labels: If someone wants to get the labels of the transitions after a decision point and not the "ID" + :return: + """ + if parameters is None: + parameters = {} + counter = {} + for place in net.places: + counter[place.name] = [] + for arc in net.arcs: + if arc.source in net.places: + if labels == True: + counter[arc.source.name].append(arc.target.label) + else: + counter[arc.source.name].append(arc.target.name) + decision_points = {key: val for key, val in counter.items() if len(val) >= 2} + i = 0 + # i counts how many given decision points of the user are detected + if pre_decision_points != None: + for el in list(decision_points): + if el in pre_decision_points: + i += 1 + else: + del decision_points[el] + if i == len(pre_decision_points): + # print("All given decision points were identified as decision points in the Petri Net.") + pass + elif i == 0: + raise Exception("None of the given points is a decision point.") + # sys.exit() + else: + print( + "Not all of the given places were identified as decision points. However, we only take the correct decision points from your list into account.") + return decision_points + + +def simplify_token_replay(replay): + variant = {} + for element in replay: + if tuple(element['activated_transitions']) not in variant: + variant[tuple(element['activated_transitions'])] = True + smaller_replay = [] + for element in replay: + if variant[tuple(element['activated_transitions'])]: + smaller_replay.append(element) + variant[tuple(element['activated_transitions'])] = False + return smaller_replay + + +def get_attributes(log, decision_points, attributes, use_trace_attributes, trace_attributes, k, net, initial_marking, + final_marking, decision_points_names, parameters=None): + """ + This method aims to construct for each decision place a table where for each decision place a list if given with the + label of the later decision and as value the given attributes + :param log: Log on which the method is applied + :param alignments: Computed alignments for a log and a model + :param decision_points: Places that have multiple outgoing arcs + :param attributes: Attributes that are considered + :param use_trace_attributes: If trace attributes have to be considered or not + :param trace_attributes: List of trace attributes that are considered + :param k: Taking k last activities into account + :return: Dictionary that has as keys the decision places. The value for this key is a list. + The content of these lists are tuples. The first element of these tuples is information regrading the attributes, + the second element of these tuples is the transition which chosen in a decision. + """ + if parameters is None: + parameters = {} + labels = exec_utils.get_param_value(Parameters.LABELS, parameters, True) + + I = {} + for key in decision_points: + I[key] = [] + A = {} + for attri in attributes: + A[attri] = None + i = 0 + # first, take a look at the variants + variants_idxs = variants_module.get_variants_from_log_trace_idx(log, parameters=parameters) + one_variant = [] + for variant in variants_idxs: + one_variant.append(variant) + # TODO: Token based replay code mit paramter für nur varianten einbeziehen ausstatten + replay_result = token_replay.apply(log, net, initial_marking, final_marking, parameters=parameters) + replay_result = simplify_token_replay(replay_result) + count = 0 + for variant in replay_result: + if variant['trace_fitness'] == 1.0: + for trace_index in variants_idxs[one_variant[count]]: + last_k_list = [None] * k + trace = log[trace_index] + if use_trace_attributes: + for attribute in trace_attributes: + # can be done here since trace attributes does not change for whole trace + A[attribute] = trace.attributes[attribute] + j = 0 + # j is a pointer which points to the current event inside a trace + for transition in variant['activated_transitions']: + for key, value in decision_points_names.items(): + tr_to_str = transition.label if labels else transition.name + if tr_to_str in value: + for element in last_k_list: + if element != None: + I[key].append((element.copy(), tr_to_str)) + for attri in attributes: + # print(variant, transition.label, j) + if attri in trace[j]: + # only add the attribute information if it is present in the event + A[attri] = trace[j][attri] + # add A to last_k_list. Using modulo to access correct entry + last_k_list[j % k] = A.copy() + if transition.label != None: + if not j + 1 >= len(trace): + # Problem otherwise: If there are tau-transition after the last event related transition, + # the pointer j which points to the current event in a trace, gets out of range + j += 1 + else: + example_trace = log[variants_idxs[one_variant[count]][0]] + align_parameters = copy(parameters) + align_parameters[star.Parameters.PARAM_ALIGNMENT_RESULT_IS_SYNC_PROD_AWARE] = True + alignment = ali.apply(example_trace, net, initial_marking, final_marking, + parameters=align_parameters)['alignment'] + for trace_index in variants_idxs[one_variant[count]]: + last_k_list = [None] * k + trace = log[trace_index] + if use_trace_attributes: + for attribute in trace_attributes: + # can be done here since trace attributes does not change for whole trace + A[attribute] = trace.attributes[attribute] + j = 0 + for el in alignment: + if el[1][1] != '>>': + # If move in model + for key, value in decision_points.items(): + if el[0][1] in value: + for element in last_k_list: + if element != None: + # only add those entries where information is provided + if el[1][1] == None: + # for some dt algorithms, the entry None might be a problem, since it is left out later + I[key].append((element.copy(), el[0][1])) + else: + I[key].append((element.copy(), el[1][1])) + if el[1][0] != '>>' and el[1][1] != '>>': + # If there is a move in log and model + for attri in attributes: + if attri in trace[j]: + # only add the attribute information if it is present in the event + A[attri] = trace[j][attri] + # add A to last_k_list. Using modulo to access correct entry + last_k_list[j % k] = A.copy() + if el[1][0] != '>>': + # only go to next event in trace if the current event has been aligned + # TODO: Discuss if this is correct or can lead to problems + j += 1 + count += 1 + return I + + +def encode_target(df, target_column): + """Add column to df with integers for the target. + Method taken from: http://chrisstrelioff.ws/sandbox/2015/06/08/decision_trees_in_python_with_scikit_learn_and_pandas.html + Args + ---- + df -- pandas DataFrame. + target_column -- column to map to int, producing + new Target column. + + Returns + ------- + df_mod -- modified DataFrame. + targets -- list of target names. + """ + df_mod = df.copy() + targets = pandas_utils.format_unique(df_mod[target_column].unique()) + map_to_int = {name: n for n, name in enumerate(targets)} + df_mod["Target"] = df_mod[target_column].replace(map_to_int) + + return (df_mod, targets) diff --git a/pm4py/pm4py/algo/discovery/__init__.py b/pm4py/pm4py/algo/discovery/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bb2a5f411082314e0d3fb0b44f254416139f4f97 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery import dfg, alpha, inductive, transition_system, log_skeleton, footprints, minimum_self_distance, performance_spectrum, temporal_profile, batches, heuristics, ocel, correlation_mining diff --git a/pm4py/pm4py/algo/discovery/alpha/__init__.py b/pm4py/pm4py/algo/discovery/alpha/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..18b2c768ccba6b59add026bc79983ab9af9e7c38 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/alpha/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.alpha import algorithm, data_structures, utils, variants diff --git a/pm4py/pm4py/algo/discovery/alpha/algorithm.py b/pm4py/pm4py/algo/discovery/alpha/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..52fcb01c76226fcf449b63448f5fe7b9f4212cb3 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/alpha/algorithm.py @@ -0,0 +1,121 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py import util as pmutil +from pm4py.algo.discovery.alpha import variants +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics +from pm4py.statistics.start_activities.pandas import get as start_activities_get +from pm4py.statistics.end_activities.pandas import get as end_activities_get +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.util import exec_utils +from pm4py.util import xes_constants as xes_util +from pm4py.util import constants, pandas_utils +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from pm4py.objects.petri_net.obj import PetriNet, Marking + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +class Variants(Enum): + ALPHA_VERSION_CLASSIC = variants.classic + ALPHA_VERSION_PLUS = variants.plus + + +ALPHA_VERSION_CLASSIC = Variants.ALPHA_VERSION_CLASSIC +ALPHA_VERSION_PLUS = Variants.ALPHA_VERSION_PLUS +DEFAULT_VARIANT = ALPHA_VERSION_CLASSIC +VERSIONS = {Variants.ALPHA_VERSION_CLASSIC, Variants.ALPHA_VERSION_PLUS} + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Union[str, Parameters], Any]] = None, variant=DEFAULT_VARIANT) -> Tuple[PetriNet, Marking, Marking]: + """ + Apply the Alpha Miner on top of a log + + Parameters + ----------- + log + Log + variant + Variant of the algorithm to use: + - Variants.ALPHA_VERSION_CLASSIC + - Variants.ALPHA_VERSION_PLUS + parameters + Possible parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Name of the attribute that contains the activity + + Returns + ----------- + net + Petri net + marking + Initial marking + final_marking + Final marking + """ + if parameters is None: + parameters = {} + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, pmutil.constants.CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + None) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_util.DEFAULT_TIMESTAMP_KEY) + + if pandas_utils.check_is_pandas_dataframe(log) and variant == ALPHA_VERSION_CLASSIC: + dfg = df_statistics.get_dfg_graph(log, case_id_glue=case_id_glue, + activity_key=activity_key, + timestamp_key=timestamp_key, start_timestamp_key=start_timestamp_key) + start_activities = start_activities_get.get_start_activities(log, parameters=parameters) + end_activities = end_activities_get.get_end_activities(log, parameters=parameters) + return exec_utils.get_variant(variant).apply_dfg_sa_ea(dfg, start_activities, end_activities, parameters=parameters) + + return exec_utils.get_variant(variant).apply(log_conversion.apply(log, parameters, log_conversion.TO_EVENT_LOG), + parameters) + + +def apply_dfg(dfg: Dict[Tuple[str, str], int], parameters: Optional[Dict[Union[str, Parameters], Any]] = None, variant=ALPHA_VERSION_CLASSIC) -> Tuple[PetriNet, Marking, Marking]: + """ + Apply Alpha Miner directly on top of a DFG graph + + Parameters + ----------- + dfg + Directly-Follows graph + variant + Variant of the algorithm to use (classic) + parameters + Possible parameters of the algorithm, including: + activity key -> Name of the attribute that contains the activity + + Returns + ----------- + net + Petri net + marking + Initial marking + final_marking + Final marking + """ + if parameters is None: + parameters = {} + return exec_utils.get_variant(variant).apply_dfg(dfg, parameters) diff --git a/pm4py/pm4py/algo/discovery/alpha/data_structures/__init__.py b/pm4py/pm4py/algo/discovery/alpha/data_structures/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d059def27d6dc25ab444de20433c9c5d9f9ae308 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/alpha/data_structures/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.alpha.data_structures import alpha_classic_abstraction diff --git a/pm4py/pm4py/algo/discovery/alpha/data_structures/alpha_classic_abstraction.py b/pm4py/pm4py/algo/discovery/alpha/data_structures/alpha_classic_abstraction.py new file mode 100644 index 0000000000000000000000000000000000000000..49ece9043b1fdbc157280d5021655f781396849b --- /dev/null +++ b/pm4py/pm4py/algo/discovery/alpha/data_structures/alpha_classic_abstraction.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.causal import algorithm as causal_algorithm +from pm4py.algo.discovery.causal.algorithm import CAUSAL_ALPHA + + +class ClassicAlphaAbstraction: + """ + Class representing the basic abstraction of the alpha miner. + The class covers start- and end attributes, the directly follows relation, the parallel relation and the causal + relation. + """ + + def __init__(self, start_activities, end_activities, dfg, activity_key="concept:name"): + self.__activity_key = activity_key + self.__start_activities = start_activities + self.__end_activities = end_activities + self.__dfg = dfg + self.__causal_relations = {k: v for k, v in causal_algorithm.apply(self.dfg, variant=CAUSAL_ALPHA).items() if + v > 0}.keys() + self.__parallel = {(f, t) for (f, t) in self.dfg if (t, f) in self.dfg} + + def __get_causal_relation(self): + return self.__causal_relations + + def __get_start_activities(self): + return self.__start_activities + + def __get_end_activities(self): + return self.__end_activities + + def __get_directly_follows_graph(self): + return self.__dfg + + def __get_parallel_relation(self): + return self.__parallel + + def __get_activity_key(self): + return self.__activity_key + + start_activities = property(__get_start_activities) + end_activities = property(__get_end_activities) + dfg = property(__get_directly_follows_graph) + causal_relation = property(__get_causal_relation) + parallel_relation = property(__get_parallel_relation) + activity_key = property(__get_activity_key) diff --git a/pm4py/pm4py/algo/discovery/alpha/utils/__init__.py b/pm4py/pm4py/algo/discovery/alpha/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..93f57aee0739b342bfdbce9ce7f44c9567395b23 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/alpha/utils/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.alpha.utils import endpoints diff --git a/pm4py/pm4py/algo/discovery/alpha/utils/endpoints.py b/pm4py/pm4py/algo/discovery/alpha/utils/endpoints.py new file mode 100644 index 0000000000000000000000000000000000000000..ec09685680a3107d366ed078bdbf9404ece34bc4 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/alpha/utils/endpoints.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def derive_end_activities_from_log(log, activity_key): + """ + Derive end activities from log + + Parameters + ----------- + log + Log object + activity_key + Activity key + + Returns + ----------- + e + End activities + """ + e = set() + for t in log: + if len(t) > 0: + if activity_key in t[len(t) - 1]: + e.add(t[len(t) - 1][activity_key]) + return e + + +def derive_start_activities_from_log(log, activity_key): + """ + Derive start activities from log + + Parameters + ----------- + log + Log object + activity_key + Activity key + + Returns + ----------- + s + Start activities + """ + s = set() + for t in log: + if len(t) > 0: + if activity_key in t[0]: + s.add(t[0][activity_key]) + return s diff --git a/pm4py/pm4py/algo/discovery/alpha/variants/__init__.py b/pm4py/pm4py/algo/discovery/alpha/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c363eac27cfc817ec1ead29746daaa9bb7cebb6f --- /dev/null +++ b/pm4py/pm4py/algo/discovery/alpha/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.alpha.variants import classic, plus diff --git a/pm4py/pm4py/algo/discovery/alpha/variants/classic.py b/pm4py/pm4py/algo/discovery/alpha/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..53b1eb380526edba66cccf98a407ffb25b48fe15 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/alpha/variants/classic.py @@ -0,0 +1,251 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +""" +This module implements the \"classic\" alpha miner [1]_. +It converts the input event log, which should be a log, to the (well-known) directly follows abstraction. +For example, when we have a trace of the form (control-flow perspective) <...a,b,...>, we observe the relation a>b, i.e. +activity a precedes activity b. +From the directly follows relations, the alpha relations parallelism (||), conflict (x) and causality (->) are deduced. +These relations form the basics for finding the places in the net. +Finally, a start and end place is added. + +References + ---------- + .. [1] Wil M. P. van der Aalst et al., "Workflow Mining: Discovering Process Models from Event Logs", + IEEE Trans. Knowl. Data Eng., 16, 1128-1142, 2004. `DOI `_. +""" + +import time +from itertools import product + +from pm4py import util as pm_util +from pm4py.algo.discovery.alpha.data_structures import alpha_classic_abstraction +from pm4py.algo.discovery.alpha.utils import endpoints +from pm4py.objects.dfg.utils import dfg_utils +from pm4py.algo.discovery.dfg.variants import native as dfg_inst +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to +from pm4py.util import exec_utils + +from pm4py.util import constants +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + This method calls the \"classic\" alpha miner [1]_. + + Parameters + ---------- + log: :class:`pm4py.log.log.EventLog` + Event log to use in the alpha miner + parameters: + Parameters of the algorithm, including: + activity_key : :class:`str`, optional + Key to use within events to identify the underlying activity. + By deafult, the value 'concept:name' is used. + + Returns + ------- + net: :class:`pm4py.entities.petri.petrinet.PetriNet` + A Petri net describing the event log that is provided as an input + initial marking: :class:`pm4py.models.net.Marking` + marking object representing the initial marking + final marking: :class:`pm4py.models.net.Marking` + marking object representing the final marking, not guaranteed that it is actually reachable! + + References + ---------- + .. [1] Wil M. P. van der Aalst et al., "Workflow Mining: Discovering Process Models from Event Logs", + IEEE Trans. Knowl. Data Eng., 16, 1128-1142, 2004. `DOI `_. + + """ + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, + pm_util.xes_constants.DEFAULT_NAME_KEY) + dfg = {k: v for k, v in dfg_inst.apply(log, parameters=parameters).items() if v > 0} + start_activities = endpoints.derive_start_activities_from_log(log, activity_key) + end_activities = endpoints.derive_end_activities_from_log(log, activity_key) + return apply_dfg_sa_ea(dfg, start_activities, end_activities, parameters=parameters) + + +def apply_dfg(dfg: Dict[Tuple[str, str], int], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + Applying Alpha Miner starting from the knowledge of the Directly Follows graph, + and of the start activities and end activities in the log inferred from the DFG + + Parameters + ------------ + dfg + Directly-Follows graph + parameters + Parameters of the algorithm including: + activity key -> name of the attribute that contains the activity + + Returns + ------- + net : :class:`pm4py.entities.petri.petrinet.PetriNet` + A Petri net describing the event log that is provided as an input + initial marking : :class:`pm4py.models.net.Marking` + marking object representing the initial marking + final marking : :class:`pm4py.models.net.Marking` + marking object representing the final marking, not guaranteed that it is actually reachable! + """ + + return apply_dfg_sa_ea(dfg, None, None, parameters=parameters) + + +def apply_dfg_sa_ea(dfg: Dict[str, int], start_activities: Union[None, Dict[str, int]], end_activities: Union[None, Dict[str, int]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + Applying Alpha Miner starting from the knowledge of the Directly Follows graph, + and of the start activities and end activities in the log (possibly inferred from the DFG) + + Parameters + ------------ + dfg + Directly-Follows graph + start_activities + Start activities + end_activities + End activities + parameters + Parameters of the algorithm including: + activity key -> name of the attribute that contains the activity + + Returns + ------- + net : :class:`pm4py.entities.petri.petrinet.PetriNet` + A Petri net describing the event log that is provided as an input + initial marking : :class:`pm4py.models.net.Marking` + marking object representing the initial marking + final marking : :class:`pm4py.models.net.Marking` + marking object representing the final marking, not guaranteed that it is actually reachable! + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, + pm_util.xes_constants.DEFAULT_NAME_KEY) + + if start_activities is None: + start_activities = dfg_utils.infer_start_activities(dfg) + + if end_activities is None: + end_activities = dfg_utils.infer_end_activities(dfg) + + labels = set() + for el in dfg: + labels.add(el[0]) + labels.add(el[1]) + for a in start_activities: + labels.add(a) + for a in end_activities: + labels.add(a) + labels = list(labels) + + alpha_abstraction = alpha_classic_abstraction.ClassicAlphaAbstraction(start_activities, end_activities, dfg, + activity_key=activity_key) + pairs = list(map(lambda p: ({p[0]}, {p[1]}), + filter(lambda p: __initial_filter(alpha_abstraction.parallel_relation, p), + alpha_abstraction.causal_relation))) + for i in range(0, len(pairs)): + t1 = pairs[i] + for j in range(i, len(pairs)): + t2 = pairs[j] + if t1 != t2: + if t1[0].issubset(t2[0]) or t1[1].issubset(t2[1]): + if not (__check_is_unrelated(alpha_abstraction.parallel_relation, alpha_abstraction.causal_relation, + t1[0], t2[0]) or __check_is_unrelated( + alpha_abstraction.parallel_relation, alpha_abstraction.causal_relation, t1[1], t2[1])): + new_alpha_pair = (t1[0] | t2[0], t1[1] | t2[1]) + if new_alpha_pair not in pairs: + if __check_all_causal(alpha_abstraction.causal_relation, new_alpha_pair[0], new_alpha_pair[1]): + pairs.append((t1[0] | t2[0], t1[1] | t2[1])) + internal_places = filter(lambda p: __pair_maximizer(pairs, p), pairs) + net = PetriNet('alpha_classic_net_' + str(time.time())) + label_transition_dict = {} + + for i in range(0, len(labels)): + label_transition_dict[labels[i]] = PetriNet.Transition(labels[i], labels[i]) + net.transitions.add(label_transition_dict[labels[i]]) + + src = __add_source(net, alpha_abstraction.start_activities, label_transition_dict) + sink = __add_sink(net, alpha_abstraction.end_activities, label_transition_dict) + + for pair in internal_places: + place = PetriNet.Place(str(pair)) + net.places.add(place) + for in_arc in pair[0]: + add_arc_from_to(label_transition_dict[in_arc], place, net) + for out_arc in pair[1]: + add_arc_from_to(place, label_transition_dict[out_arc], net) + return net, Marking({src: 1}), Marking({sink: 1}) + + +def __add_source(net, start_activities, label_transition_dict): + source = PetriNet.Place('start') + net.places.add(source) + for s in start_activities: + add_arc_from_to(source, label_transition_dict[s], net) + return source + + +def __add_sink(net, end_activities, label_transition_dict): + end = PetriNet.Place('end') + net.places.add(end) + for e in end_activities: + add_arc_from_to(label_transition_dict[e], end, net) + return end + + +def __initial_filter(parallel_relation, pair): + if (pair[0], pair[0]) in parallel_relation or (pair[1], pair[1]) in parallel_relation: + return False + return True + + +def __pair_maximizer(alpha_pairs, pair): + for alt in alpha_pairs: + if pair != alt and pair[0].issubset(alt[0]) and pair[1].issubset(alt[1]): + return False + return True + + +def __check_is_unrelated(parallel_relation, causal_relation, item_set_1, item_set_2): + S = set(product(item_set_1, item_set_2)).union(set(product(item_set_2, item_set_1))) + for pair in S: + if pair in parallel_relation or pair in causal_relation: + return True + return False + + +def __check_all_causal(causal_relation, item_set_1, item_set_2): + S = set(product(item_set_1, item_set_2)) + for pair in S: + if pair not in causal_relation: + return False + return True diff --git a/pm4py/pm4py/algo/discovery/alpha/variants/plus.py b/pm4py/pm4py/algo/discovery/alpha/variants/plus.py new file mode 100644 index 0000000000000000000000000000000000000000..1980c30bb735d38f6e45f4e8a0136f619c87aaa7 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/alpha/variants/plus.py @@ -0,0 +1,641 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import time + +from pm4py import util as pmutil +from pm4py.objects.log.obj import Trace +from pm4py.util import xes_constants as xes_util +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to, remove_place, remove_transition +from pm4py.util import exec_utils +from enum import Enum +from copy import deepcopy +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking + + +class Parameters(Enum): + ACTIVITY_KEY = pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY + REMOVE_UNCONNECTED = "remove_unconnected" + + +def preprocessing(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Any: + """ + Preprocessing step for the Aplha+ algorithm. Removing all transitions from the log with a loop of length one. + + Parameters + ------------ + log + Event log + parameters + Parameters of the algorithm + + Returns + ------------- + log + filtered log and a list of the filtered transitions + loop_one_list + Loop one list + A_filtered + Dictionary: activity before the loop-length-one activity + B_filtered + Dictionary: activity after the loop-length-one activity + loops_in_first_place + Loops in source place + loops_in_last_place + Loops in sink place + """ + loops_in_first_place = set() + loops_in_last_place = set() + + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + + # List for values that have a loop of length one + loop_one_list = [] + # Log without activities that have a loop of length one + filtered_log = EventLog() + # dictionary A: activity before the loop-length-one activity + A = {} + # dictionary B: activity after the loop-length-one activity + B = {} + A_filtered = {} + B_filtered = {} + # inserting artificial start and end activity, since it is not allowed to have a loop at the source place + # (according to paper) + for trace in log: + trace.insert(0, {activity_key: 'artificial_start'}) + trace.append({activity_key: 'artificial_end'}) + for trace in log: + i = 0 + while i < len(trace) - 1: + test = trace[1] + current = trace[i][activity_key] + successor = trace[i + 1][activity_key] + if current == successor: + if current not in loop_one_list: + loop_one_list.append(current) + i += 1 + for trace in log: + i = 0 + filtered_trace = Trace() + while i < len(trace) - 1: + current = trace[i][activity_key] + successor = trace[i + 1][activity_key] + if not current in loop_one_list: + filtered_trace.append(current) + if successor in loop_one_list: + if not current in loop_one_list: + if current in A: + A[successor].append(current) + else: + A[successor] = [current] + if current in loop_one_list: + if not successor in loop_one_list: + if current in B: + B[current].append(successor) + else: + B[current] = [successor] + if i == len(trace) - 2: + if not successor in loop_one_list: + filtered_trace.append(successor) + i += 1 + filtered_log.append(filtered_trace) + # Making sets instead of lists + for key, value in A.items(): + A_filtered[key] = set(value) + # Making sets instead of lists + for key, value in B.items(): + B_filtered[key] = set(value) + for trace in log: + if trace.__getitem__(0) in loop_one_list: + loops_in_first_place.add(trace.__getitem__(0)) + if trace.__getitem__(len(trace) - 1) in loop_one_list: + loops_in_last_place.add(trace.__getitem__(len(trace) - 1)) + loops_in_first_place = list(loops_in_first_place) + loops_in_last_place = list(loops_in_last_place) + + return (filtered_log, loop_one_list, A_filtered, B_filtered, loops_in_first_place, loops_in_last_place) + + +def get_relations(log: EventLog): + """ + Applying the classic Alpha Algorithm + + Parameters + -------------- + log + Filtered log + + Returns + -------------- + causal + Causal relations + parallel + Parallel relations + follows + Follows relations + """ + # finding loops of length two + # ordering relations + triangle = {} + for trace in log: + i = 0 + while i < len(trace) - 2: + current = trace.__getitem__(i) + successor = trace.__getitem__(i + 1) + successor2 = trace.__getitem__(i + 2) + if current == successor2: + if current in triangle: + triangle[current].append(successor) + else: + triangle[current] = [successor] + i += 1 + for key, value in triangle.items(): + triangle[key] = set(value) + square = {} + for key in triangle: + for element in triangle[key]: + if element in triangle: + if key in triangle[element]: + if key in square and element in square: + square[key].append(element) + square[element].append(key) + elif key in square and element not in square: + square[key].append(element) + square[element] = [key] + elif key not in square and element in square: + square[key] = [element] + square[element].append(key) + else: + square[key] = [element] + square[element] = [key] + for key, value in square.items(): + square[key] = set(value) + # ordering relation following + follows = {} + for trace in log: + i = 0 + while i < len(trace) - 1: + current = trace.__getitem__(i) + successor = trace.__getitem__(i + 1) + if current in follows: + if successor not in follows[current]: + follows[current].append(successor) + else: + follows[current] = [successor] + i += 1 + # transforming list to set + for key, value in follows.items(): + follows[key] = set(value) + # ordering relation causal + causal = {} + if len(square) != 0: + for key in follows: + for element in follows[key]: + if element in follows: + if key in square: + if (not (key in follows[element])) or (element in square[key]): + if key in causal: + causal[key].append(element) + else: + causal[key] = [element] + else: + if (not (key in follows[element])): + if key in causal: + causal[key].append(element) + else: + causal[key] = [element] + else: + if key in causal: + causal[key].append(element) + else: + causal[key] = [element] + else: + for key in follows: + for element in follows[key]: + if element in follows: + if (not (key in follows[element])): + if key in causal: + causal[key].append(element) + else: + causal[key] = [element] + else: + if key in causal: + causal[key].append(element) + else: + causal[key] = [element] + + for key, value in causal.items(): + causal[key] = set(value) + # ordering relation unrelated if no other ordering is applied + # ordering relation parallel + parallel = {} + if len(square) != 0: + for key in follows: + for element in follows[key]: + if element in follows: + if key in follows[element]: + if element in follows[key]: + if key in square: + if not element in square[key]: + if key in parallel: + parallel[key].append(element) + else: + parallel[key] = [element] + else: + if key in parallel: + parallel[key].append(element) + else: + parallel[key] = [element] + + else: + for key in follows: + for element in follows[key]: + if element in follows: + if key in follows[element]: + if element in follows[key]: + if key in parallel: + parallel[key].append(element) + else: + parallel[key] = [element] + + for key, value in parallel.items(): + parallel[key] = set(value) + return causal, parallel, follows + + +def processing(log: EventLog, causal: Tuple[str, str], follows: Tuple[str, str]): + """ + Applying the Alpha Miner with the new relations + + Parameters + ------------- + log + Filtered log + causal + Pairs that have a causal relation (->) + follows + Pairs that have a follow relation (>) + + Returns + ------------- + net + Petri net + im + Initial marking + fm + Final marking + """ + # create list of all events + labels = set() + start_activities = set() + end_activities = set() + for trace in log: + start_activities.add(trace.__getitem__(0)) + end_activities.add(trace.__getitem__(len(trace) - 1)) + for events in trace: + labels.add(events) + labels = list(labels) + pairs = [] + + for key, element in causal.items(): + for item in element: + if get_sharp_relation(follows, key, key): + if get_sharp_relation(follows, item, item): + pairs.append(({key}, {item})) + + # combining pairs + for i in range(0, len(pairs)): + t1 = pairs[i] + for j in range(i, len(pairs)): + t2 = pairs[j] + if t1 != t2: + if t1[0].issubset(t2[0]) or t1[1].issubset(t2[1]): + if get_sharp_relations_for_sets(follows, t1[0], t2[0]) and get_sharp_relations_for_sets(follows, + t1[1], + t2[1]): + new_alpha_pair = (t1[0] | t2[0], t1[1] | t2[1]) + if new_alpha_pair not in pairs: + pairs.append((t1[0] | t2[0], t1[1] | t2[1])) + # maximize pairs + cleaned_pairs = list(filter(lambda p: __pair_maximizer(pairs, p), pairs)) + # create transitions + net = PetriNet('alpha_plus_net_' + str(time.time())) + label_transition_dict = {} + for label in labels: + if label != 'artificial_start' and label != 'artificial_end': + label_transition_dict[label] = PetriNet.Transition(label, label) + net.transitions.add(label_transition_dict[label]) + else: + label_transition_dict[label] = PetriNet.Transition(label, None) + net.transitions.add(label_transition_dict[label]) + # and source and sink + src = add_source(net, start_activities, label_transition_dict) + sink = add_sink(net, end_activities, label_transition_dict) + # create places + for pair in cleaned_pairs: + place = PetriNet.Place(str(pair)) + net.places.add(place) + for in_arc in pair[0]: + add_arc_from_to(label_transition_dict[in_arc], place, net) + for out_arc in pair[1]: + add_arc_from_to(place, label_transition_dict[out_arc], net) + + return net, Marking({src: 1}), Marking({sink: 1}), cleaned_pairs + + +def get_sharp_relation(follows, instance_one, instance_two): + """ + Returns true if sharp relations holds + + Parameters + ------------- + follows + Follows relations + instance_one + Instance one + instance_two + Instance two + + Returns + ------------- + bool + Boolean (sharp relation holds?) + """ + if instance_one in follows: + if instance_two in follows: + if not instance_two in follows[instance_one] and not instance_one in follows[instance_two]: + return True + if not instance_one in follows and not instance_two in follows: + return True + if instance_one in follows: + if instance_two in follows[instance_one]: + return False + if instance_two in follows: + if instance_one in follows[instance_two]: + return False + + +def get_sharp_relations_for_sets(follows, set_1, set_2): + """ + Returns sharp relations for sets + + Parameters + ------------ + follows + Follows relations + set_1 + First set to consider + set_2 + Second set to consider + + Returns + ------------ + bool + Boolean (sharp relation holds?) + """ + for item_1 in set_1: + for item_2 in set_2: + if not get_sharp_relation(follows, item_1, item_2): + return False + return True + + +def postprocessing(net: PetriNet, initial_marking: Marking, final_marking: Marking, A, B, pairs, loop_one_list) -> Tuple[PetriNet, Marking, Marking]: + """ + Adding the filtered transitions to the Petri net + + Parameters + ------------ + loop_list + List of looped activities + classical_alpha_result + Result after applying the classic alpha algorithm to the filtered log + A + See Paper for definition + B + See Paper for definition + + Returns + ------------ + net + Petri net + im + Initial marking + fm + Final marking + """ + label_transition_dict = {} + for label in loop_one_list: + label_transition_dict[label] = PetriNet.Transition(label, label) + net.transitions.add(label_transition_dict[label]) + + # F L1L + # Key is specific loop element + for key, value in A.items(): + if key in B: + A_without_B = value - B[key] + B_without_A = B[key] - value + pair = (A_without_B, B_without_A) + for pair_try in pairs: + in_part = pair_try[0] + out_part = pair_try[1] + if pair[0].issubset(in_part) and pair[1].issubset(out_part): + pair_try_place = PetriNet.Place(str(pair_try)) + net.places.add(pair_try_place) + add_arc_from_to(label_transition_dict[key], pair_try_place, net) + add_arc_from_to(pair_try_place, label_transition_dict[key], net) + return net, initial_marking, final_marking + + +def apply(trace_log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + Apply the Alpha Algorithm to a given log + + Parameters + ------------ + trace_log + Log + parameters + Possible parameters of the algorithm + + Returns + ------------ + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + + # deep copy the log object because otherwise the original log would be modified with + # artificial start/end activities + trace_log = deepcopy(trace_log) + + remove_unconnected = exec_utils.get_param_value(Parameters.REMOVE_UNCONNECTED, parameters, False) + + filtered_log, loop_one_list, A_filtered, B_filtered, loops_in_first, loops_in_last = preprocessing(trace_log, + parameters=parameters) + causal, parallel, follows = get_relations(filtered_log) + net, initial_marking, final_marking, pairs = processing(filtered_log, causal, follows) + net, initial_marking, final_marking = postprocessing(net, initial_marking, final_marking, A_filtered, B_filtered, + pairs, loop_one_list) + + net, initial_marking = remove_initial_hidden_if_possible(net, initial_marking) + net = remove_final_hidden_if_possible(net, final_marking) + if remove_unconnected: + net = remove_unconnected_transitions(net) + + return net, initial_marking, final_marking + + +def __pair_maximizer(alpha_pairs, pair): + """ + Helping method, maximizing pairs + """ + for alt in alpha_pairs: + if pair != alt and pair[0].issubset(alt[0]) and pair[1].issubset(alt[1]): + return False + return True + + +def add_source(net, start_activities, label_transition_dict): + """ + Adding source pe + """ + source = PetriNet.Place('start') + net.places.add(source) + for s in start_activities: + add_arc_from_to(source, label_transition_dict[s], net) + return source + + +def add_sink(net, end_activities, label_transition_dict): + """ + Adding sink pe + """ + end = PetriNet.Place('end') + net.places.add(end) + for e in end_activities: + add_arc_from_to(label_transition_dict[e], end, net) + return end + + +def remove_initial_hidden_if_possible(net: PetriNet, im: Marking): + """ + Remove initial hidden transition if possible + + Parameters + ------------ + net + Petri net + im + Initial marking + + Returns + ------------ + net + Petri net + im + Possibly different initial marking + """ + source = list(im.keys())[0] + first_hidden = list(source.out_arcs)[0].target + target_places_first_hidden = [x.target for x in first_hidden.out_arcs] + if len(target_places_first_hidden) == 1: + target_place_first_hidden = target_places_first_hidden[0] + if len(target_place_first_hidden.in_arcs) == 1: + new_im = Marking() + new_im[target_place_first_hidden] = 1 + remove_place(net, source) + remove_transition(net, first_hidden) + return net, new_im + return net, im + + +def remove_final_hidden_if_possible(net: PetriNet, fm: Marking): + """ + Remove final hidden transition if possible + + Parameters + ------------- + net + Petri net + fm + Final marking + + Returns + ------------- + net + Petri net + """ + sink = list(fm.keys())[0] + last_hidden = list(sink.in_arcs)[0].source + source_places_last_hidden = [x.source for x in last_hidden.in_arcs] + removal_possible = len(source_places_last_hidden) == 1 + for place in source_places_last_hidden: + if len(place.out_arcs) > 1: + removal_possible = False + break + else: + source_trans = set([x.source for x in place.in_arcs]) + for trans in source_trans: + if len(trans.out_arcs) > 1: + removal_possible = False + break + if removal_possible: + all_sources = set() + remove_transition(net, last_hidden) + i = 0 + while i < len(source_places_last_hidden): + place = source_places_last_hidden[i] + source_trans = set([x.source for x in place.in_arcs]) + for trans in source_trans: + if trans not in all_sources: + all_sources.add(trans) + add_arc_from_to(trans, sink, net) + remove_place(net, place) + i = i + 1 + return net + + +def remove_unconnected_transitions(net: PetriNet): + """ + Remove unconnected transitions if any + + Parameters + ------------- + net + Petri net + + Returns + ------------- + net + Petri net without unconnected transitions + """ + transitions = list(net.transitions) + i = 0 + while i < len(transitions): + if len(transitions[i].in_arcs) == 0 and len(transitions[i].out_arcs) == 0: + remove_transition(net, transitions[i]) + i = i + 1 + return net diff --git a/pm4py/pm4py/algo/discovery/batches/__init__.py b/pm4py/pm4py/algo/discovery/batches/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fd4aca33a61468ea1471ea837940cbb7dd39d553 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/batches/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.batches import utils, variants, algorithm diff --git a/pm4py/pm4py/algo/discovery/batches/algorithm.py b/pm4py/pm4py/algo/discovery/batches/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..3527f3e2c4bce21ad8f1102ea569411d26c670a0 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/batches/algorithm.py @@ -0,0 +1,79 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Union, Optional, Dict, Any, List, Tuple + +import pandas as pd + +from pm4py.algo.discovery.batches.variants import pandas, log +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils, pandas_utils + + +class Variants(Enum): + LOG = log + PANDAS = pandas + + +def apply(log: Union[EventLog, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> List[ + Tuple[Tuple[str, str], int, Dict[str, Any]]]: + """ + Provided an event log / dataframe, returns + a list having as elements the activity-resources with the batches that are detected, divided in: + - Simultaneous (all the events in the batch have identical start and end timestamps) + - Batching at start (all the events in the batch have identical start timestamp) + - Batching at end (all the events in the batch have identical end timestamp) + - Sequential batching (for all the consecutive events, the end of the first is equal to the start of the second) + - Concurrent batching (for all the consecutive events that are not sequentially matched) + + The approach has been described in the following paper: + Martin, N., Swennen, M., Depaire, B., Jans, M., Caris, A., & Vanhoof, K. (2015, December). Batch Processing: + Definition and Event Log Identification. In SIMPDA (pp. 137-140). + + Parameters + ------------------- + log + Event log / dataframe object + parameters + Parameters of the algorithm: + - ACTIVITY_KEY => the attribute that should be used as activity + - RESOURCE_KEY => the attribute that should be used as resource + - START_TIMESTAMP_KEY => the attribute that should be used as start timestamp + - TIMESTAMP_KEY => the attribute that should be used as timestamp + - CASE_ID_KEY => the attribute that should be used as case identifier + - MERGE_DISTANCE => the maximum time distance between non-overlapping intervals in order for them to be + considered belonging to the same batch (default: 15*60 15 minutes) + - MIN_BATCH_SIZE => the minimum number of events for a batch to be considered (default: 2) + + Returns + ------------------ + list_batches + A (sorted) list containing tuples. Each tuple contain: + - Index 0: the activity-resource for which at least one batch has been detected + - Index 1: the number of batches for the given activity-resource + - Index 2: a list containing all the batches. Each batch is described by: + # The start timestamp of the batch + # The complete timestamp of the batch + # The list of events that are executed in the batch + """ + if parameters is None: + parameters = {} + + if pandas_utils.check_is_pandas_dataframe(log): + return exec_utils.get_variant(Variants.PANDAS).apply(log, parameters=parameters) + else: + return exec_utils.get_variant(Variants.LOG).apply(log, parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/batches/utils/__init__.py b/pm4py/pm4py/algo/discovery/batches/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c0bdb3191dc2a34cabff2ee98c3bf21ffd6674f4 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/batches/utils/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.batches.utils import detection diff --git a/pm4py/pm4py/algo/discovery/batches/utils/detection.py b/pm4py/pm4py/algo/discovery/batches/utils/detection.py new file mode 100644 index 0000000000000000000000000000000000000000..ea8d2cf33c60d5a8a408f9d92303a5d5466369e7 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/batches/utils/detection.py @@ -0,0 +1,209 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Tuple, List, Any, Set, Optional, Dict, Union + +from pm4py.util import exec_utils +import heapq +from copy import copy + + +class Parameters(Enum): + MERGE_DISTANCE = "merge_distance" + MIN_BATCH_SIZE = "min_batch_size" + + +class BatchType(Enum): + SIMULTANEOUS = "Simultaneous" + BATCHING_START = "Batching on Start" + BATCHING_END = "Batching on End" + SEQ_BATCHING = "Sequential batching" + CONC_BATCHING = "Concurrent batching" + + +def __merge_overlapping_intervals(intervals: List[Tuple[float, float, Set[Any]]]) -> List[Tuple[float, float, Set[Any]]]: + """ + Iterative method that merges the overlapping time intervals + (an interval [a, b] is overlapping to [c, d] if a <= c <= b or c <= a <= d). + """ + continue_cycle = True + while continue_cycle: + continue_cycle = False + i = 0 + while i < len(intervals) - 1: + if intervals[i][1] > intervals[i + 1][0]: + # decide to merge interval i and i+1 + new_interval = (min(intervals[i][0], intervals[i + 1][0]), max(intervals[i][1], intervals[i + 1][1]), + intervals[i][2].union(intervals[i + 1][2])) + # add the new interval to the list + intervals.append(new_interval) + # remove the i+1 interval + del intervals[i + 1] + # remove the i interval + del intervals[i] + # sort the intervals + intervals.sort() + # set the variable continue_cycle to True + continue_cycle = True + # interrupt the current iteration on the intervals + break + i = i + 1 + return intervals + + +def __merge_near_intervals(intervals: List[Tuple[float, float, Set[Any]]], max_allowed_distance: float) -> List[ + Tuple[float, float, Set[Any]]]: + """ + Merge the non-overlapping time intervals that are nearer than max_allowed_distance. + (an interval [a, b] that is non-overlapping with [c, d] having b < c, is merged if c - b <= max_allowed_distance). + """ + continue_cycle = True + while continue_cycle: + continue_cycle = False + i = 0 + while i < len(intervals) - 1: + if intervals[i + 1][0] - intervals[i][1] <= max_allowed_distance: + # decide to merge interval i and i+1 + new_interval = (min(intervals[i][0], intervals[i + 1][0]), max(intervals[i][1], intervals[i + 1][1]), + intervals[i][2].union(intervals[i + 1][2])) + # remove the i+1 interval + del intervals[i + 1] + # remove the i interval + del intervals[i] + # add the new interval to the list + heapq.heappush(intervals, new_interval) + # set the variable continue_cycle to True + continue_cycle = True + i = i - 1 + i = i + 1 + return intervals + + +def __check_batch_type(batch: Tuple[float, float, Set[Any]]) -> str: + """ + Checks the batch type between: + - Simultaneous (all the events in the batch have identical start and end timestamps) + - Batching at start (all the events in the batch have identical start timestamp) + - Batching at end (all the events in the batch have identical end timestamp) + - Sequential batching (for all the consecutive events, the end of the first is equal to the start of the second) + - Concurrent batching (for all the consecutive events that are not sequentially matched) + """ + events_batch = sorted(list(batch[2])) + # take the minimum of the left-extreme of each interval + min_left_events = min(ev[0] for ev in events_batch) + # take the maximum of the left-extreme of each interval + max_left_events = max(ev[0] for ev in events_batch) + # take the minimum of the right-extreme of each interval + min_right_events = min(ev[1] for ev in events_batch) + # take the maximum of the right-extreme of each interval + max_right_events = max(ev[1] for ev in events_batch) + + # CONDITION 1 - All the events in the batch have identical start and end timestamps + if min_left_events == max_left_events and min_right_events == max_right_events: + return BatchType.SIMULTANEOUS.value + # CONDITION 4 - All the events in the batch have identical start timestamp: + if min_left_events == max_left_events: + return BatchType.BATCHING_START.value + # CONDITION 5 - All the events in the batch have identical end timestamp: + if min_right_events == max_right_events: + return BatchType.BATCHING_END.value + + # now we could be in the SEQUENTIAL batching or the CONCURRENT batching + # in order to be in the SEQUENTIAL, we need that for all the consecutive events the end of the first is equal to the start of the second + is_sequential = True + i = 0 + while i < len(events_batch) - 1: + # if there are two consecutive events that are not sequentially matched, then we automatically fall inside the CONCURRENT batching + if events_batch[i][1] != events_batch[i + 1][0]: + is_sequential = False + break + i = i + 1 + if is_sequential: + return BatchType.SEQ_BATCHING.value + else: + return BatchType.CONC_BATCHING.value + + +def __detect_single(events: List[Tuple[float, float, str]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[ + str, List[Any]]: + """ + Detect if there are batches in the execution of events having a given activity-resource combination + """ + if parameters is None: + parameters = {} + + ret = {BatchType.SIMULTANEOUS.value: [], BatchType.BATCHING_START.value: [], BatchType.BATCHING_END.value: [], + BatchType.CONC_BATCHING.value: [], BatchType.SEQ_BATCHING.value: []} + merge_distance = exec_utils.get_param_value(Parameters.MERGE_DISTANCE, parameters, 15 * 60) + min_batch_size = exec_utils.get_param_value(Parameters.MIN_BATCH_SIZE, parameters, 2) + + intervals = [(e[0], e[1], {copy(e)}) for e in + events] + heapq.heapify(intervals) + intervals = __merge_overlapping_intervals(intervals) + intervals = __merge_near_intervals(intervals, merge_distance) + batches = [x for x in intervals if len(x[2]) >= min_batch_size] + for batch in batches: + batch_type = __check_batch_type(batch) + ret[batch_type].append(batch) + ret = {x: y for x, y in ret.items() if y} + return ret + + +def detect(actres_grouping: Dict[Tuple[str, str], List[Tuple[float, float, str]]], + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[Tuple[Tuple[str, str], int, Dict[str, Any]]]: + """ + Provided an activity-resource grouping of the events of the event log, returns + a list having as elements the activity-resources with the batches that are detected, divided in: + - Simultaneous (all the events in the batch have identical start and end timestamps) + - Batching at start (all the events in the batch have identical start timestamp) + - Batching at end (all the events in the batch have identical end timestamp) + - Sequential batching (for all the consecutive events, the end of the first is equal to the start of the second) + - Concurrent batching (for all the consecutive events that are not sequentially matched) + + The approach has been described in the following paper: + Martin, N., Swennen, M., Depaire, B., Jans, M., Caris, A., & Vanhoof, K. (2015, December). Batch Processing: + Definition and Event Log Identification. In SIMPDA (pp. 137-140). + + Parameters + ------------------- + actres_grouping + Activity-resource grouping of events + parameters + Parameters of the algorithm + + Returns + ------------------ + list_batches + A (sorted) list containing tuples. Each tuple contain: + - Index 0: the activity-resource for which at least one batch has been detected + - Index 1: the number of batches for the given activity-resource + - Index 2: a list containing all the batches. Each batch is described by: + # The start timestamp of the batch + # The complete timestamp of the batch + # The list of events that are executed in the batch + """ + if parameters is None: + parameters = {} + ret = [] + for actres in actres_grouping: + batches = __detect_single(actres_grouping[actres], parameters=parameters) + if batches: + total_length = sum(len(y) for y in batches.values()) + ret.append((actres, total_length, batches)) + ret = sorted(ret, reverse=True, key=lambda x: (x[1], x[0])) + return ret diff --git a/pm4py/pm4py/algo/discovery/batches/variants/__init__.py b/pm4py/pm4py/algo/discovery/batches/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5d5bb972b1de637f7eaaffaad7e8d6c018c7be7f --- /dev/null +++ b/pm4py/pm4py/algo/discovery/batches/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.batches.variants import pandas, log diff --git a/pm4py/pm4py/algo/discovery/batches/variants/log.py b/pm4py/pm4py/algo/discovery/batches/variants/log.py new file mode 100644 index 0000000000000000000000000000000000000000..84bb8017848c23b9acc9c3504de9b9660f6bd58e --- /dev/null +++ b/pm4py/pm4py/algo/discovery/batches/variants/log.py @@ -0,0 +1,104 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, List, Tuple, Union + +from pm4py.algo.discovery.batches.utils import detection +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils, constants, xes_constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MERGE_DISTANCE = "merge_distance" + MIN_BATCH_SIZE = "min_batch_size" + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[ + Tuple[Tuple[str, str], int, Dict[str, Any]]]: + """ + Provided an event log, returns + a list having as elements the activity-resources with the batches that are detected, divided in: + - Simultaneous (all the events in the batch have identical start and end timestamps) + - Batching at start (all the events in the batch have identical start timestamp) + - Batching at end (all the events in the batch have identical end timestamp) + - Sequential batching (for all the consecutive events, the end of the first is equal to the start of the second) + - Concurrent batching (for all the consecutive events that are not sequentially matched) + + The approach has been described in the following paper: + Martin, N., Swennen, M., Depaire, B., Jans, M., Caris, A., & Vanhoof, K. (2015, December). Batch Processing: + Definition and Event Log Identification. In SIMPDA (pp. 137-140). + + Parameters + ------------------- + log + Event log object + parameters + Parameters of the algorithm: + - ACTIVITY_KEY => the attribute that should be used as activity + - RESOURCE_KEY => the attribute that should be used as resource + - START_TIMESTAMP_KEY => the attribute that should be used as start timestamp + - TIMESTAMP_KEY => the attribute that should be used as timestamp + - CASE_ID_KEY => the attribute that should be used as case identifier + - MERGE_DISTANCE => the maximum time distance between non-overlapping intervals in order for them to be + considered belonging to the same batch (default: 15*60 15 minutes) + - MIN_BATCH_SIZE => the minimum number of events for a batch to be considered (default: 2) + + Returns + ------------------ + list_batches + A (sorted) list containing tuples. Each tuple contain: + - Index 0: the activity-resource for which at least one batch has been detected + - Index 1: the number of batches for the given activity-resource + - Index 2: a list containing all the batches. Each batch is described by: + # The start timestamp of the batch + # The complete timestamp of the batch + # The list of events that are executed in the batch + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + events = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_STREAM) + + actres_grouping = {} + + for ev in events: + case = ev[case_id_key] + activity = ev[activity_key] + resource = ev[resource_key] + st = ev[start_timestamp_key].timestamp() + et = ev[timestamp_key].timestamp() + + if (activity, resource) not in actres_grouping: + actres_grouping[(activity, resource)] = [] + + actres_grouping[(activity, resource)].append((st, et, case)) + + return detection.detect(actres_grouping, parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/batches/variants/pandas.py b/pm4py/pm4py/algo/discovery/batches/variants/pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..bc7497da18aa71e6d449348010663bdf9ade1a31 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/batches/variants/pandas.py @@ -0,0 +1,128 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, List, Tuple, Union + +import pandas as pd + +from pm4py.algo.discovery.batches.utils import detection +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +import numpy as np + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + EVENT_ID_KEY = "event_id_key" + MERGE_DISTANCE = "merge_distance" + MIN_BATCH_SIZE = "min_batch_size" + + +def apply(log: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[ + Tuple[Tuple[str, str], int, Dict[str, Any]]]: + """ + Provided a Pandas dataframe, returns + a list having as elements the activity-resources with the batches that are detected, divided in: + - Simultaneous (all the events in the batch have identical start and end timestamps) + - Batching at start (all the events in the batch have identical start timestamp) + - Batching at end (all the events in the batch have identical end timestamp) + - Sequential batching (for all the consecutive events, the end of the first is equal to the start of the second) + - Concurrent batching (for all the consecutive events that are not sequentially matched) + + The approach has been described in the following paper: + Martin, N., Swennen, M., Depaire, B., Jans, M., Caris, A., & Vanhoof, K. (2015, December). Batch Processing: + Definition and Event Log Identification. In SIMPDA (pp. 137-140). + + Parameters + ------------------- + log + Dataframe + parameters + Parameters of the algorithm: + - ACTIVITY_KEY => the attribute that should be used as activity + - RESOURCE_KEY => the attribute that should be used as resource + - START_TIMESTAMP_KEY => the attribute that should be used as start timestamp + - TIMESTAMP_KEY => the attribute that should be used as timestamp + - CASE_ID_KEY => the attribute that should be used as case identifier + - MERGE_DISTANCE => the maximum time distance between non-overlapping intervals in order for them to be + considered belonging to the same batch (default: 15*60 15 minutes) + - MIN_BATCH_SIZE => the minimum number of events for a batch to be considered (default: 2) + + Returns + ------------------ + list_batches + A (sorted) list containing tuples. Each tuple contain: + - Index 0: the activity-resource for which at least one batch has been detected + - Index 1: the number of batches for the given activity-resource + - Index 2: a list containing all the batches. Each batch is described by: + # The start timestamp of the batch + # The complete timestamp of the batch + # The list of events that are executed in the batch + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + timestamp_key) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + event_id_key = exec_utils.get_param_value(Parameters.EVENT_ID_KEY, parameters, constants.DEFAULT_INDEX_KEY) + + attributes_to_consider = {activity_key, resource_key, start_timestamp_key, timestamp_key, case_id_key} + log_contains_evidkey = event_id_key in log + if log_contains_evidkey: + attributes_to_consider.add(event_id_key) + + log = log[list(attributes_to_consider)] + # the timestamp columns are expressed in nanoseconds values + # here, we want them to have the second granularity, so we divide by 10**9 + # for example 1001000000 nanoseconds (value stored in the column) + # is equivalent to 1,001 seconds. + log[timestamp_key] = pandas_utils.convert_to_seconds(log[timestamp_key]) + if start_timestamp_key != timestamp_key: + # see the aforementioned explanation. + log[start_timestamp_key] = pandas_utils.convert_to_seconds(log[start_timestamp_key]) + + actres_grouping0 = log.groupby([activity_key, resource_key]).agg(list).to_dict() + start_timestamps = actres_grouping0[start_timestamp_key] + complete_timestamps = actres_grouping0[timestamp_key] + cases = actres_grouping0[case_id_key] + if log_contains_evidkey: + events_ids = actres_grouping0[event_id_key] + + actres_grouping = {} + for k in start_timestamps: + st = start_timestamps[k] + et = complete_timestamps[k] + c = cases[k] + if log_contains_evidkey: + eid = events_ids[k] + actres_grouping_k = [] + for i in range(len(st)): + if log_contains_evidkey: + actres_grouping_k.append((st[i], et[i], c[i], eid[i])) + else: + actres_grouping_k.append((st[i], et[i], c[i])) + actres_grouping[k] = actres_grouping_k + + return detection.detect(actres_grouping, parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/causal/__init__.py b/pm4py/pm4py/algo/discovery/causal/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4335de1ab62466b70f717c766d4eb6ecaac83e2d --- /dev/null +++ b/pm4py/pm4py/algo/discovery/causal/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.causal import algorithm, variants diff --git a/pm4py/pm4py/algo/discovery/causal/algorithm.py b/pm4py/pm4py/algo/discovery/causal/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..e518de7607af2f6e1d8429142510b43b27fa01be --- /dev/null +++ b/pm4py/pm4py/algo/discovery/causal/algorithm.py @@ -0,0 +1,52 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.causal.variants import alpha, heuristic +from enum import Enum +from pm4py.util import exec_utils +from typing import Dict, Tuple + + +class Variants(Enum): + CAUSAL_ALPHA = alpha + CAUSAL_HEURISTIC = heuristic + + +CAUSAL_ALPHA = Variants.CAUSAL_ALPHA +CAUSAL_HEURISTIC = Variants.CAUSAL_HEURISTIC + +VERSIONS = {CAUSAL_ALPHA, CAUSAL_HEURISTIC} + + +def apply(dfg: Dict[Tuple[str, str], int], variant=CAUSAL_ALPHA) -> Dict[Tuple[str, str], int]: + """ + Computes the causal relation on the basis of a given directly follows graph. + + Parameters + ----------- + dfg + Directly follows graph + variant + Variant of the algorithm to use: + - Variants.CAUSAL_ALPHA + - Variants.CAUSAL_HEURISTIC + + Returns + ----------- + causal relations + dict + """ + return exec_utils.get_variant(variant).apply(dfg) diff --git a/pm4py/pm4py/algo/discovery/causal/variants/__init__.py b/pm4py/pm4py/algo/discovery/causal/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4b9ebdf1e6c33ec5e247be714a22f3d93862c921 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/causal/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.causal.variants import alpha, heuristic diff --git a/pm4py/pm4py/algo/discovery/causal/variants/alpha.py b/pm4py/pm4py/algo/discovery/causal/variants/alpha.py new file mode 100644 index 0000000000000000000000000000000000000000..f1140f2c2a6efb05a3e9e145bbd781056753c46c --- /dev/null +++ b/pm4py/pm4py/algo/discovery/causal/variants/alpha.py @@ -0,0 +1,44 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +""" +This module contains code that allows us to compute a causal graph, according to the alpha miner. +It expects a dictionary of the form (activity,activity) -> num of occ. +A causal relation holds between activity a and b, written as a->b, if dfg(a,b) > 0 and dfg(b,a) = 0. +""" +from typing import Dict, Tuple + + +def apply(dfg: Dict[Tuple[str, str], int]) -> Dict[Tuple[str, str], int]: + """ + Computes a causal graph based on a directly follows graph according to the alpha miner + + Parameters + ---------- + dfg: :class:`dict` directly follows relation, should be a dict of the form (activity,activity) -> num of occ. + + Returns + ------- + causal_relation: :class:`dict` containing all causal relations as keys (with value 1 indicating that it holds) + """ + causal_alpha = {} + for (f, t) in dfg: + if dfg[(f, t)] > 0: + if (t, f) not in dfg: + causal_alpha[(f, t)] = 1 + elif dfg[(t, f)] == 0: + causal_alpha[(f, t)] = 1 + return causal_alpha diff --git a/pm4py/pm4py/algo/discovery/causal/variants/heuristic.py b/pm4py/pm4py/algo/discovery/causal/variants/heuristic.py new file mode 100644 index 0000000000000000000000000000000000000000..1a4c4e7b2b55aef8cc8f023dd83cac87b56cdf25 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/causal/variants/heuristic.py @@ -0,0 +1,39 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Dict, Tuple + + +def apply(dfg: Dict[Tuple[str, str], int]) -> Dict[Tuple[str, str], float]: + """ + Computes a causal graph based on a directly follows graph according to the heuristics miner + + Parameters + ---------- + dfg: :class:`dict` directly follows relation, should be a dict of the form (activity,activity) -> num of occ. + + Returns + ------- + :return: dictionary containing all causal relations as keys (with value inbetween -1 and 1 indicating that + how strong it holds) + """ + causal_heur = {} + for (f, t) in dfg: + if (f, t) not in causal_heur: + rev = dfg[(t, f)] if (t, f) in dfg else 0 + causal_heur[(f, t)] = float((dfg[(f, t)] - rev) / (dfg[(f, t)] + rev + 1)) + causal_heur[(t, f)] = -1 * causal_heur[(f, t)] + return causal_heur diff --git a/pm4py/pm4py/algo/discovery/correlation_mining/__init__.py b/pm4py/pm4py/algo/discovery/correlation_mining/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..74ccc71a4d7ba7bbce474edaf7cc1ff2df1f24d9 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/correlation_mining/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.correlation_mining import variants, algorithm, util diff --git a/pm4py/pm4py/algo/discovery/correlation_mining/algorithm.py b/pm4py/pm4py/algo/discovery/correlation_mining/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..7323e828f3838516cc4037d9c17f08f1dc0801d4 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/correlation_mining/algorithm.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.correlation_mining.variants import classic_split, classic, trace_based +from pm4py.util import exec_utils +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Variants(Enum): + CLASSIC_SPLIT = classic_split + CLASSIC = classic + TRACE_BASED = trace_based + + +DEFAULT_VARIANT = Variants.CLASSIC + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> Tuple[Dict[Tuple[str, str], int], Dict[Tuple[str, str], float]]: + """ + Applies the Correlation Miner to the event stream (a log is converted to a stream) + + The approach is described in: + Pourmirza, Shaya, Remco Dijkman, and Paul Grefen. "Correlation miner: mining business process models and event + correlations without case identifiers." International Journal of Cooperative Information Systems 26.02 (2017): + 1742002. + + Parameters + ------------- + log + Log object + variant + Variant of the algorithm to use + parameters + Parameters of the algorithm + + Returns + -------------- + dfg + Directly-follows graph + performance_dfg + Performance DFG (containing the estimated performance for the arcs) + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(log, parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/correlation_mining/util.py b/pm4py/pm4py/algo/discovery/correlation_mining/util.py new file mode 100644 index 0000000000000000000000000000000000000000..6d5401e6c7844dcb4f019f003beda4919c43163f --- /dev/null +++ b/pm4py/pm4py/algo/discovery/correlation_mining/util.py @@ -0,0 +1,266 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from pm4py.util.lp import solver +from statistics import mean + + +def get_c_matrix(PS_matrix, duration_matrix, activities, activities_counter): + """ + Calculates the C-matrix out of the PS matrix and the duration matrix + + Parameters + -------------- + PS_matrix + PS matrix + duration_matrix + Duration matrix + activities + Ordered list of activities of the log + activities_counter + Counter of activities + + Returns + -------------- + c_matrix + C matrix + """ + C_matrix = np.zeros((len(activities), len(activities))) + for i in range(len(activities)): + for j in range(len(activities)): + val = duration_matrix[i, j] / PS_matrix[i, j] * 1 / ( + min(activities_counter[activities[i]], activities_counter[activities[j]])) if PS_matrix[ + i, j] > 0 else 0 + if val == 0: + val = 100000000000 + C_matrix[i, j] = val + return C_matrix + + +def resolve_LP(C_matrix, duration_matrix, activities, activities_counter): + """ + Formulates and solve the LP problem + + Parameters + -------------- + C_matrix + C_matrix + duration_matrix + Duration matrix + activities + Ordered list of activities of the log + activities_counter + Counter of activities + + Returns + ------------- + dfg + Directly-Follows Graph + performance_dfg + Performance DFG (containing the estimated performance for the arcs) + """ + edges = [(i, j) for i in range(len(activities)) for j in range(len(activities))] + c = [C_matrix[i, j] for i in range(len(activities)) for j in range(len(activities))] + edges_sources = {i: [z for z in range(len(edges)) if edges[z][0] == i] for i in range(len(activities))} + edges_targets = {j: [z for z in range(len(edges)) if edges[z][1] == j] for j in range(len(activities))} + activities_occurrences = {i: activities_counter[activities[i]] for i in range(len(activities))} + Aeq = [] + beq = [] + for i in range(len(activities)): + rec = [0] * len(edges) + for e in edges_sources[i]: + rec[e] = 1 + Aeq.append(rec) + beq.append(activities_occurrences[i]) + for j in range(len(activities)): + rec = [0] * len(edges) + for e in edges_targets[j]: + rec[e] = 1 + Aeq.append(rec) + beq.append(activities_occurrences[j]) + Aeq = np.asmatrix(Aeq).astype(np.float64) + beq = np.asmatrix(beq).transpose().astype(np.float64) + Aub = [] + bub = [] + for i in range(len(activities)): + for e in edges_sources[i]: + rec = [0] * len(edges) + rec[e] = 1 + Aub.append(rec) + bub.append(activities_occurrences[i]) + rec = [-x for x in rec] + Aub.append(rec) + bub.append(0) + for j in range(len(activities)): + for e in edges_targets[j]: + rec = [0] * len(edges) + rec[e] = 1 + Aub.append(rec) + bub.append(activities_occurrences[j]) + rec = [-x for x in rec] + Aub.append(rec) + bub.append(0) + Aub = np.asmatrix(Aub).astype(np.float64) + bub = np.asmatrix(bub).transpose().astype(np.float64) + + use_cvxopt = False + if solver.DEFAULT_LP_SOLVER_VARIANT == solver.CVXOPT_SOLVER_CUSTOM_ALIGN or solver.DEFAULT_LP_SOLVER_VARIANT == solver.CVXOPT_SOLVER_CUSTOM_ALIGN_ILP: + use_cvxopt = True + + if use_cvxopt: + from cvxopt import matrix + + c = matrix(c) + Aub = matrix(Aub) + bub = matrix(bub) + Aeq = matrix(Aeq) + beq = matrix(beq) + + res = solver.apply(c, Aub, bub, Aeq, beq, variant=solver.DEFAULT_LP_SOLVER_VARIANT) + points = solver.get_points_from_sol(res, variant=solver.DEFAULT_LP_SOLVER_VARIANT) + points = [round(p) for p in points] + + dfg = {} + performance_dfg = {} + + for idx, p in enumerate(points): + if p > 0: + dfg[(activities[edges[idx][0]], activities[edges[idx][1]])] = p + performance_dfg[(activities[edges[idx][0]], activities[edges[idx][1]])] = duration_matrix[ + edges[idx][0], edges[idx][1]] + return dfg, performance_dfg + + +def match_return_avg_time(ai, aj, exact=False): + """ + Matches two list of times (exact or greedy) + and returns the average. + + Parameters + -------------- + ai + First list + aj + Second list + + Returns + --------------- + times_mean + Mean of times + """ + if exact: + from pm4py.statistics.util import times_bipartite_matching + matching = times_bipartite_matching.exact_match_minimum_average(ai, aj) + ret_exact = mean([x[1] - x[0] for x in matching]) if matching else 0 + return ret_exact + else: + ret_greedy = greedy_match_return_avg_time(ai, aj) + return ret_greedy + + +def greedy_match_return_avg_time(ai, aj): + """ + Matches two list of times with a greedy method + and returns the average. + + Parameters + -------------- + ai + First list + aj + Second list + parameters + Parameters of the algorithm + + Returns + --------------- + times_mean + Mean of times + """ + tm0 = calculate_time_match_fifo(ai, aj) + td0 = mean([x[1] - x[0] for x in tm0]) if tm0 else 0 + tm1 = calculate_time_match_rlifo(ai, aj) + td1 = mean([x[1] - x[0] for x in tm1]) if tm1 else 0 + return min(td0, td1) + + +def calculate_time_match_fifo(ai, aj, times0=None): + """ + Associate the times between + two lists of timestamps using FIFO + + Parameters + -------------- + ai + First list of timestamps + aj + Second list of timestamps + times0 + Correspondence between execution times + + Returns + -------------- + times0 + Correspondence between execution times + """ + if times0 is None: + times0 = [] + k = 0 + z = 0 + while k < len(ai): + while z < len(aj): + if ai[k] < aj[z]: + times0.append((ai[k], aj[z])) + z = z + 1 + break + z = z + 1 + k = k + 1 + return times0 + + +def calculate_time_match_rlifo(ai, aj, times1=None): + """ + Associate the times between + two lists of timestamps using LIFO (start from end) + + Parameters + -------------- + ai + First list of timestamps + aj + Second list of timestamps + times0 + Correspondence between execution times + + Returns + -------------- + times0 + Correspondence between execution times + """ + if times1 is None: + times1 = [] + k = len(ai) - 1 + z = len(aj) - 1 + while z >= 0: + while k >= 0: + if ai[k] < aj[z]: + times1.append((ai[k], aj[z])) + k = k - 1 + break + k = k - 1 + z = z - 1 + return times1 diff --git a/pm4py/pm4py/algo/discovery/correlation_mining/variants/__init__.py b/pm4py/pm4py/algo/discovery/correlation_mining/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b78d4bff1848d4381bd3c096e30a4baced57db69 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/correlation_mining/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.correlation_mining.variants import classic_split, classic, trace_based diff --git a/pm4py/pm4py/algo/discovery/correlation_mining/variants/classic.py b/pm4py/pm4py/algo/discovery/correlation_mining/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..e69ced51ec5b3f1a3b7d58e9b6490dc7f531802b --- /dev/null +++ b/pm4py/pm4py/algo/discovery/correlation_mining/variants/classic.py @@ -0,0 +1,267 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants, xes_constants, pandas_utils +from pm4py.objects.conversion.log import converter +from pm4py.objects.log.obj import Event +from pm4py.algo.discovery.correlation_mining import util as cm_util +import numpy as np +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + EXACT_TIME_MATCHING = "exact_time_matching" + INDEX_KEY = "index_key" + + +DEFAULT_INDEX_KEY = "@@@index" + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Dict[Tuple[str, str], int], Dict[Tuple[str, str], float]]: + """ + Apply the correlation miner to an event stream + (other types of logs are converted to that) + + The approach is described in: + Pourmirza, Shaya, Remco Dijkman, and Paul Grefen. "Correlation miner: mining business process models and event + correlations without case identifiers." International Journal of Cooperative Information Systems 26.02 (2017): + 1742002. + + Parameters + --------------- + log + Log object + parameters + Parameters of the algorithm + + Returns + --------------- + dfg + DFG + performance_dfg + Performance DFG (containing the estimated performance for the arcs) + """ + if parameters is None: + parameters = {} + + transf_stream, activities_grouped, activities = preprocess_log(log, parameters=parameters) + + PS_matrix, duration_matrix = get_PS_dur_matrix(activities_grouped, activities, parameters=parameters) + activities_counter = {x: len(y) for x, y in activities_grouped.items()} + + return resolve_lp_get_dfg(PS_matrix, duration_matrix, activities, activities_counter) + + +def resolve_lp_get_dfg(PS_matrix, duration_matrix, activities, activities_counter): + """ + Resolves a LP problem to get a DFG + + Parameters + -------------- + PS_matrix + Precede-succeed matrix + duration_matrix + Duration matrix + activities + List of activities of the log + activities_counter + Counter of the activities + + Returns + -------------- + dfg + DFG + performance_dfg + Performance DFG (containing the estimated performance for the arcs) + """ + C_matrix = cm_util.get_c_matrix(PS_matrix, duration_matrix, activities, activities_counter) + dfg, performance_dfg = cm_util.resolve_LP(C_matrix, duration_matrix, activities, activities_counter) + return dfg, performance_dfg + + +def get_PS_dur_matrix(activities_grouped, activities, parameters=None): + """ + Combined methods to get the two matrixes + + Parameters + ---------------- + activities_grouped + Grouped activities + activities + List of activities of the log + parameters + Parameters of the algorithm + + Returns + --------------- + PS_matrix + Precede-succeed matrix + duration_matrix + Duration matrix + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + exact_time_matching = exec_utils.get_param_value(Parameters.EXACT_TIME_MATCHING, parameters, False) + + PS_matrix = get_precede_succeed_matrix(activities, activities_grouped, timestamp_key, start_timestamp_key) + duration_matrix = get_duration_matrix(activities, activities_grouped, timestamp_key, start_timestamp_key, + exact=exact_time_matching) + + return PS_matrix, duration_matrix + + +def preprocess_log(log, activities=None, parameters=None): + """ + Preprocess a log to enable correlation mining + + Parameters + -------------- + log + Log object + activities + (if provided) list of activities of the log + parameters + Parameters of the algorithm + + Returns + -------------- + transf_stream + Transformed stream + activities_grouped + Grouped activities + activities + List of activities of the log + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + index_key = exec_utils.get_param_value(Parameters.INDEX_KEY, parameters, DEFAULT_INDEX_KEY) + + if pandas_utils.check_is_pandas_dataframe(log): + # keep only the two columns before conversion + log = log[list(set([activity_key, timestamp_key, start_timestamp_key]))] + + parameters["deepcopy"] = False + parameters["include_case_attributes"] = False + log = converter.apply(log, variant=converter.TO_EVENT_STREAM, parameters=parameters) + transf_stream = EventStream() + for idx, ev in enumerate(log): + transf_stream.append( + Event({activity_key: ev[activity_key], timestamp_key: ev[timestamp_key].timestamp(), + start_timestamp_key: ev[start_timestamp_key].timestamp(), index_key: idx})) + transf_stream = sorted(transf_stream, key=lambda x: (x[start_timestamp_key], x[timestamp_key], x[index_key])) + + if activities is None: + activities = sorted(list(set(x[activity_key] for x in transf_stream))) + + activities_grouped = {x: [y for y in transf_stream if y[activity_key] == x] for x in activities} + + return transf_stream, activities_grouped, activities + + +def get_precede_succeed_matrix(activities, activities_grouped, timestamp_key, start_timestamp_key): + """ + Calculates the precede succeed matrix + + Parameters + --------------- + activities + Ordered list of activities of the log + activities_grouped + Grouped list of activities + timestamp_key + Timestamp key + start_timestamp_key + Start timestamp key (events start) + + Returns + --------------- + precede_succeed_matrix + Precede succeed matrix + """ + ret = np.zeros((len(activities), len(activities))) + for i in range(len(activities)): + ai = [x[timestamp_key] for x in activities_grouped[activities[i]]] + if ai: + for j in range(len(activities)): + if not i == j: + aj = [x[start_timestamp_key] for x in activities_grouped[activities[j]]] + if aj: + k = 0 + z = 0 + count = 0 + while k < len(ai): + while z < len(aj): + if ai[k] < aj[z]: + break + z = z + 1 + count = count + (len(aj) - z) + k = k + 1 + ret[i, j] = count / float(len(ai) * len(aj)) + + return ret + + +def get_duration_matrix(activities, activities_grouped, timestamp_key, start_timestamp_key, exact=False): + """ + Calculates the duration matrix + + Parameters + --------------- + activities + Ordered list of activities of the log + activities_grouped + Grouped list of activities + timestamp_key + Timestamp key + start_timestamp_key + Start timestamp key (events start) + exact + Performs an exact matching of the times (True/False) + + Returns + --------------- + duration_matrix + Duration matrix + """ + # greedy algorithm + ret = np.zeros((len(activities), len(activities))) + for i in range(len(activities)): + ai = [x[timestamp_key] for x in activities_grouped[activities[i]]] + if ai: + for j in range(len(activities)): + if not i == j: + aj = [x[start_timestamp_key] for x in activities_grouped[activities[j]]] + if aj: + ret[i, j] = cm_util.match_return_avg_time(ai, aj, exact=exact) + return ret diff --git a/pm4py/pm4py/algo/discovery/correlation_mining/variants/classic_split.py b/pm4py/pm4py/algo/discovery/correlation_mining/variants/classic_split.py new file mode 100644 index 0000000000000000000000000000000000000000..9d3a887dde3f20e95358fc654a83120f02b93c07 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/correlation_mining/variants/classic_split.py @@ -0,0 +1,99 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants, xes_constants, pandas_utils +from pm4py.objects.conversion.log import converter +from pm4py.algo.discovery.correlation_mining.variants import classic +from collections import Counter +import numpy as np +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + SAMPLE_SIZE = "sample_size" + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Dict[Tuple[str, str], int], Dict[Tuple[str, str], float]]: + """ + Applies the correlation miner (splits the log in smaller chunks) + + Parameters + --------------- + log + Log object + parameters + Parameters of the algorithm + + Returns + --------------- + dfg + Frequency DFG + performance_dfg + Performance DFG + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + sample_size = exec_utils.get_param_value(Parameters.SAMPLE_SIZE, parameters, 100000) + + PS_matrixes = [] + duration_matrixes = [] + + if pandas_utils.check_is_pandas_dataframe(log): + # keep only the two columns before conversion + log = log[list(set([activity_key, timestamp_key, start_timestamp_key]))] + log = log.sort_values([timestamp_key, start_timestamp_key]) + activities_counter = log[activity_key].value_counts().to_dict() + activities = sorted(list(activities_counter.keys())) + else: + log = converter.apply(log, variant=converter.Variants.TO_EVENT_STREAM, parameters={"deepcopy": False, "include_case_attributes": False}) + activities_counter = Counter(x[activity_key] for x in log) + activities = sorted(list(activities_counter.keys())) + + prev = 0 + while prev < len(log): + sample = log[prev:min(len(log), prev + sample_size)] + transf_stream, activities_grouped, activities = classic.preprocess_log(sample, activities=activities, + parameters=parameters) + PS_matrix, duration_matrix = classic.get_PS_dur_matrix(activities_grouped, activities, + parameters=parameters) + PS_matrixes.append(PS_matrix) + duration_matrixes.append(duration_matrix) + + prev = prev + sample_size + + PS_matrix = np.zeros((len(activities), len(activities))) + duration_matrix = np.zeros((len(activities), len(activities))) + z = 0 + while z < len(PS_matrixes): + PS_matrix = PS_matrix + PS_matrixes[z] + duration_matrix = np.maximum(duration_matrix, duration_matrixes[z]) + z = z + 1 + PS_matrix = PS_matrix / float(len(PS_matrixes)) + + return classic.resolve_lp_get_dfg(PS_matrix, duration_matrix, activities, activities_counter) diff --git a/pm4py/pm4py/algo/discovery/correlation_mining/variants/trace_based.py b/pm4py/pm4py/algo/discovery/correlation_mining/variants/trace_based.py new file mode 100644 index 0000000000000000000000000000000000000000..398f31f71a75efad8025dfed41340b18aace8833 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/correlation_mining/variants/trace_based.py @@ -0,0 +1,278 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants, xes_constants, pandas_utils +from pm4py.objects.conversion.log import converter +from pm4py.algo.discovery.correlation_mining import util as cm_util +from statistics import mean +import numpy as np +from collections import Counter +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + INDEX_KEY = "index_key" + + +DEFAULT_INDEX_KEY = "@@@index" + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Dict[Tuple[str, str], int], Dict[Tuple[str, str], float]]: + """ + Novel approach of correlation mining, that creates the PS-matrix and the duration matrix + using the order list of events of each trace of the log + + Parameters + ------------- + log + Event log + parameters + Parameters + + Returns + --------------- + dfg + DFG + performance_dfg + Performance DFG (containing the estimated performance for the arcs) + """ + traces_list, trace_grouped_list, activities, activities_counter = preprocess_log(log, activities=None, + activities_counter=None) + + PS_matrix, duration_matrix = get_PS_duration_matrix(activities, trace_grouped_list, parameters=parameters) + + return resolve_lp_get_dfg(PS_matrix, duration_matrix, activities, activities_counter) + + +def resolve_lp_get_dfg(PS_matrix, duration_matrix, activities, activities_counter): + """ + Resolves a LP problem to get a DFG + + Parameters + --------------- + PS_matrix + Precede-succeed matrix + duration_matrix + Duration matrix + activities + List of activities of the log + activities_counter + Counter for the activities of the log + + Returns + --------------- + dfg + Frequency DFG + performance_dfg + Performance DFG + """ + C_matrix = cm_util.get_c_matrix(PS_matrix, duration_matrix, activities, activities_counter) + dfg, performance_dfg = cm_util.resolve_LP(C_matrix, duration_matrix, activities, activities_counter) + return dfg, performance_dfg + + +def get_PS_duration_matrix(activities, trace_grouped_list, parameters=None): + """ + Gets the precede-succeed matrix + + Parameters + -------------- + activities + Activities + trace_grouped_list + Grouped list of simplified traces (per activity) + parameters + Parameters of the algorithm + + Returns + -------------- + PS_matrix + precede-succeed matrix + duration_matrix + Duration matrix + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + + PS_matrix = get_precede_succeed_matrix(activities, trace_grouped_list, timestamp_key, start_timestamp_key) + duration_matrix = get_duration_matrix(activities, trace_grouped_list, timestamp_key, start_timestamp_key) + + return PS_matrix, duration_matrix + + +def preprocess_log(log, activities=None, activities_counter=None, parameters=None): + """ + Preprocess the log to get a grouped list of simplified traces (per activity) + + Parameters + -------------- + log + Log object + activities + (if provided) activities of the log + activities_counter + (if provided) counter of the activities of the log + parameters + Parameters of the algorithm + + Returns + -------------- + traces_list + List of simplified traces of the log + trace_grouped_list + Grouped list of simplified traces (per activity) + activities + Activities of the log + activities_counter + Activities counter + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + caseid_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + index_key = exec_utils.get_param_value(Parameters.INDEX_KEY, parameters, DEFAULT_INDEX_KEY) + + if pandas_utils.check_is_pandas_dataframe(log): + # keep only the two columns before conversion + log = log[list(set([activity_key, timestamp_key, start_timestamp_key, caseid_key]))] + + log = converter.apply(log, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + + traces_list = [] + for trace in log: + trace_stream = [ + {activity_key: trace[i][activity_key], timestamp_key: trace[i][timestamp_key].timestamp(), + start_timestamp_key: trace[i][start_timestamp_key].timestamp(), index_key: i} for + i in range(len(trace))] + trace_stream = sorted(trace_stream, key=lambda x: (x[start_timestamp_key], x[timestamp_key], x[index_key])) + traces_list.append(trace_stream) + + if activities is None: + activities = sorted(list(set(y[activity_key] for x in traces_list for y in x))) + + trace_grouped_list = [] + for trace in traces_list: + gr = [] + for act in activities: + act_gr = [x for x in trace if x[activity_key] == act] + gr.append(act_gr) + trace_grouped_list.append(gr) + + if activities_counter is None: + activities_counter = Counter(y[activity_key] for x in traces_list for y in x) + + return traces_list, trace_grouped_list, activities, activities_counter + + +def get_precede_succeed_matrix(activities, trace_grouped_list, timestamp_key, start_timestamp_key): + """ + Calculates the precede succeed matrix + + Parameters + --------------- + activities + Sorted list of activities of the log + trace_grouped_list + A list of lists of lists, containing for each trace and each activity the events having such activity + timestamp_key + The key to be used as timestamp + start_timestamp_key + The key to be used as start timestamp + + Returns + --------------- + mat + The precede succeed matrix + """ + ret = np.zeros((len(activities), len(activities))) + for i in range(len(activities)): + for j in range(len(activities)): + if not i == j: + count = 0 + total = 0 + for tr in trace_grouped_list: + ai = [x[timestamp_key] for x in tr[i]] + aj = [x[start_timestamp_key] for x in tr[j]] + if ai and aj: + total += len(ai) * len(aj) + k = 0 + z = 0 + while k < len(ai): + while z < len(aj): + if ai[k] < aj[z]: + break + z = z + 1 + count = count + (len(aj) - z) + k = k + 1 + if total > 0: + ret[i, j] = count / float(total) + return ret + + +def get_duration_matrix(activities, trace_grouped_list, timestamp_key, start_timestamp_key): + """ + Calculates the duration matrix + + Parameters + -------------- + activities + Sorted list of activities of the log + trace_grouped_list + A list of lists of lists, containing for each trace and each activity the events having such activity + timestamp_key + The key to be used as timestamp + start_timestamp_key + The key to be used as start timestamp + + Returns + -------------- + mat + The duration matrix + """ + ret = np.zeros((len(activities), len(activities))) + for i in range(len(activities)): + for j in range(len(activities)): + if not i == j: + tm0 = [] + tm1 = [] + for tr in trace_grouped_list: + ai = [x[timestamp_key] for x in tr[i]] + aj = [x[start_timestamp_key] for x in tr[j]] + if ai and aj: + tm0 = cm_util.calculate_time_match_fifo(ai, aj, times0=tm0) + tm1 = cm_util.calculate_time_match_rlifo(ai, aj, times1=tm1) + td0 = mean([x[1] - x[0] for x in tm0]) if tm0 else 0 + td1 = mean([x[1] - x[0] for x in tm1]) if tm1 else 0 + ret[i, j] = min(td0, td1) + return ret diff --git a/pm4py/pm4py/algo/discovery/declare/__init__.py b/pm4py/pm4py/algo/discovery/declare/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9c5c76ec001613b3a44221f3cea550b7440861ef --- /dev/null +++ b/pm4py/pm4py/algo/discovery/declare/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.declare import algorithm, variants diff --git a/pm4py/pm4py/algo/discovery/declare/algorithm.py b/pm4py/pm4py/algo/discovery/declare/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..7916e65519bdca4e1526cfd27e02d58bbd1326d6 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/declare/algorithm.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.util import exec_utils +from enum import Enum +from pm4py.algo.discovery.declare.variants import classic +from pm4py.objects.log.obj import EventLog +import pandas as pd +from typing import Union, Dict, Optional, Any + + +class Variants(Enum): + CLASSIC = classic + + +def apply(log: Union[EventLog, pd.DataFrame], variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Dict[Any, Dict[str, int]]]: + """ + Discovers a DECLARE model from the provided event log + + Parameters + --------------- + log + Log object (EventLog, Pandas dataframe) + variant + Variant of the algorithm to be used, including: + - Variants.CLASSIC + parameters + Variant-specific parameters + + Returns + --------------- + declare_model + DECLARE model (as Python dictionary), where each template is associated with its own rules + """ + return exec_utils.get_variant(variant).apply(log, parameters) diff --git a/pm4py/pm4py/algo/discovery/declare/templates.py b/pm4py/pm4py/algo/discovery/declare/templates.py new file mode 100644 index 0000000000000000000000000000000000000000..2e60ffe5f733c4c04a94f506b8cbe4c11a33693e --- /dev/null +++ b/pm4py/pm4py/algo/discovery/declare/templates.py @@ -0,0 +1,35 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +EXISTENCE = "existence" +EXACTLY_ONE = "exactly_one" +INIT = "init" +RESPONDED_EXISTENCE = "responded_existence" +RESPONSE = "response" +PRECEDENCE = "precedence" +SUCCESSION = "succession" +ALTRESPONSE = "altresponse" +ALTPRECEDENCE = "altprecedence" +ALTSUCCESSION = "altsuccession" +CHAINRESPONSE = "chainresponse" +CHAINPRECEDENCE = "chainprecedence" +CHAINSUCCESSION = "chainsuccession" +ABSENCE = "absence" +COEXISTENCE = "coexistence" +NONCOEXISTENCE = "noncoexistence" +NONSUCCESSION = "nonsuccession" +NONCHAINSUCCESSION = "nonchainsuccession" diff --git a/pm4py/pm4py/algo/discovery/declare/variants/__init__.py b/pm4py/pm4py/algo/discovery/declare/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..954b007f8ced2c6eac70effe38bebad4f427baa6 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/declare/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.declare.variants import classic diff --git a/pm4py/pm4py/algo/discovery/declare/variants/classic.py b/pm4py/pm4py/algo/discovery/declare/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..de82072a7e6250db2e37cfafeb7183ddcb3ffe3d --- /dev/null +++ b/pm4py/pm4py/algo/discovery/declare/variants/classic.py @@ -0,0 +1,650 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.objects.log.obj import EventLog +from pm4py.algo.discovery.declare.templates import * +import pandas as pd +from typing import Union, Dict, Optional, Any, Tuple, Collection, Set, List +from typing import Counter as TCounter +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from collections import Counter +import numpy as np + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + CONSIDERED_ACTIVITIES = "considered_activities" + MIN_SUPPORT_RATIO = "min_support_ratio" + MIN_CONFIDENCE_RATIO = "min_confidence_ratio" + AUTO_SELECTION_MULTIPLIER = "auto_selection_multiplier" + ALLOWED_TEMPLATES = "allowed_templates" + + +def __rule_existence_column(act: str) -> Tuple[str, str]: + return (EXISTENCE, act) + + +def __rule_exactly_one_column(act: str) -> Tuple[str, str]: + return (EXACTLY_ONE, act) + + +def __rule_init_column(act: str) -> Tuple[str, str]: + return (INIT, act) + + +def __rule_responded_existence_column(act: str, act2: str) -> Tuple[str, str, str]: + return (RESPONDED_EXISTENCE, act, act2) + + +def __rule_response(act: str, act2: str) -> Tuple[str, str, str]: + return (RESPONSE, act, act2) + + +def __rule_precedence(act: str, act2: str) -> Tuple[str, str, str]: + return (PRECEDENCE, act, act2) + + +def __rule_succession(act: str, act2: str) -> Tuple[str, str, str]: + return (SUCCESSION, act, act2) + + +def __rule_alternate_response(act: str, act2: str) -> Tuple[str, str, str]: + return (ALTRESPONSE, act, act2) + + +def __rule_alternate_precedence(act: str, act2: str) -> Tuple[str, str, str]: + return (ALTPRECEDENCE, act, act2) + + +def __rule_alternate_succession(act: str, act2: str) -> Tuple[str, str, str]: + return (ALTSUCCESSION, act, act2) + + +def __rule_chain_response(act: str, act2: str) -> Tuple[str, str, str]: + return (CHAINRESPONSE, act, act2) + + +def __rule_chain_precedence(act: str, act2: str) -> Tuple[str, str, str]: + return (CHAINPRECEDENCE, act, act2) + + +def __rule_chain_succession(act: str, act2: str) -> Tuple[str, str, str]: + return (CHAINSUCCESSION, act, act2) + + +def __rule_absence_act(act: str) -> Tuple[str, str]: + return (ABSENCE, act) + + +def __rule_coexistence(act: str, act2: str) -> Tuple[str, str, str]: + return (COEXISTENCE, act, act2) + + +def __rule_non_coexistence(act: str, act2: str) -> Tuple[str, str, str]: + return (NONCOEXISTENCE, act, act2) + + +def __rule_non_succession(act: str, act2: str) -> Tuple[str, str, str]: + return (NONSUCCESSION, act, act2) + + +def __rule_non_chain_succession(act: str, act2: str) -> Tuple[str, str, str]: + return (NONCHAINSUCCESSION, act, act2) + + +def __col_to_dict_rule(col_name: Union[Tuple[str, str], Tuple[str, str, str]]) -> Tuple[str, Any]: + if len(col_name) == 2: + return col_name[0], col_name[1] + else: + if col_name[2] is None or pd.isna(col_name[2]) or not col_name[2]: + return col_name[0], col_name[1] + + return col_name[0], (col_name[1], col_name[2]) + + +def existence_template_step1(rules: Dict[Union[Tuple[str, str], Tuple[str, str, str]], int], trace: Collection[str], + activities: Set[str], act_counter: TCounter[str], act_idxs: Dict[str, List[int]], + allowed_templates: Collection[str]): + if EXISTENCE in allowed_templates: + for act in activities: + if act in act_counter: + rules[__rule_existence_column(act)] = 1 + else: + rules[__rule_existence_column(act)] = -1 + + +def exactly_one_template_step1(rules: Dict[Union[Tuple[str, str], Tuple[str, str, str]], int], trace: Collection[str], + activities: Set[str], act_counter: TCounter[str], act_idxs: Dict[str, List[int]], + allowed_templates: Collection[str]): + if EXACTLY_ONE in allowed_templates: + for act in activities: + if act in act_counter: + if act_counter[act] == 1: + rules[__rule_exactly_one_column(act)] = 1 + else: + rules[__rule_exactly_one_column(act)] = -1 + + +def init_template_step1(rules: Dict[Union[Tuple[str, str], Tuple[str, str, str]], int], trace: Collection[str], + activities: Set[str], act_counter: TCounter[str], act_idxs: Dict[str, List[int]], + allowed_templates: Collection[str]): + if INIT in allowed_templates: + for act in activities: + if act == trace[0]: + rules[__rule_init_column(act)] = 1 + else: + rules[__rule_init_column(act)] = -1 + + +def responded_existence_template_step1(rules: Dict[Union[Tuple[str, str], Tuple[str, str, str]], int], + trace: Collection[str], activities: Set[str], act_counter: TCounter[str], + act_idxs: Dict[str, List[int]], allowed_templates: Collection[str]): + if RESPONDED_EXISTENCE in allowed_templates: + for act in act_counter: + for act2 in activities: + if act2 != act: + if act2 not in act_counter: + rules[__rule_responded_existence_column(act, act2)] = -1 + else: + rules[__rule_responded_existence_column(act, act2)] = 1 + + +def response_template_step1(rules: Dict[Union[Tuple[str, str], Tuple[str, str, str]], int], trace: Collection[str], + activities: Set[str], act_counter: TCounter[str], act_idxs: Dict[str, List[int]], + allowed_templates: Collection[str]): + if RESPONSE in allowed_templates: + for act in act_counter: + for act2 in activities: + if act2 != act: + if act2 not in act_counter: + rules[__rule_response(act, act2)] = -1 + else: + if act_idxs[act][-1] < act_idxs[act2][-1]: + rules[__rule_response(act, act2)] = 1 + else: + rules[__rule_response(act, act2)] = -1 + + +def precedence_template_step1(rules: Dict[Union[Tuple[str, str], Tuple[str, str, str]], int], trace: Collection[str], + activities: Set[str], act_counter: TCounter[str], act_idxs: Dict[str, List[int]], + allowed_templates: Collection[str]): + if PRECEDENCE in allowed_templates: + for act in act_counter: + for act2 in activities: + if act2 != act: + if act2 not in act_counter: + pass + else: + if act_idxs[act2][0] < act_idxs[act][0]: + rules[__rule_precedence(act2, act)] = 1 + else: + rules[__rule_precedence(act2, act)] = -1 + + +def altresponse_template_step1(rules: Dict[Union[Tuple[str, str], Tuple[str, str, str]], int], trace: Collection[str], + activities: Set[str], act_counter: TCounter[str], act_idxs: Dict[str, List[int]], + allowed_templates: Collection[str]): + if ALTRESPONSE in allowed_templates: + for act in act_counter: + for act2 in activities: + if act2 != act: + if act2 not in act_counter: + rules[__rule_alternate_response(act, act2)] = -1 + else: + is_ok_alt_resp = False + if len(act_idxs[act]) == len(act_idxs[act2]): + lenn = len(act_idxs[act]) + is_ok_alt_resp = True + + for i in range(lenn): + if act_idxs[act][i] > act_idxs[act2][i] or ( + i < lenn - 1 and act_idxs[act][i + 1] < act_idxs[act2][i]): + is_ok_alt_resp = False + break + elif act_idxs[act][i] + 1 != act_idxs[act2][i]: + pass + rules[__rule_alternate_response(act, act2)] = 1 if is_ok_alt_resp else -1 + + +def chainresponse_template_step1(rules: Dict[Union[Tuple[str, str], Tuple[str, str, str]], int], trace: Collection[str], + activities: Set[str], act_counter: TCounter[str], act_idxs: Dict[str, List[int]], + allowed_templates: Collection[str]): + if CHAINRESPONSE in allowed_templates: + for act in act_counter: + for act2 in activities: + if act2 != act: + if act2 not in act_counter: + rules[__rule_chain_response(act, act2)] = -1 + else: + is_ok_chain_resp = False + if len(act_idxs[act]) == len(act_idxs[act2]): + lenn = len(act_idxs[act]) + is_ok_chain_resp = True + + for i in range(lenn): + if act_idxs[act][i] > act_idxs[act2][i] or ( + i < lenn - 1 and act_idxs[act][i + 1] < act_idxs[act2][i]): + is_ok_chain_resp = False + break + elif act_idxs[act][i] + 1 != act_idxs[act2][i]: + is_ok_chain_resp = False + break + rules[__rule_chain_response(act, act2)] = 1 if is_ok_chain_resp else -1 + + +def altprecedence_template_step1(rules: Dict[Union[Tuple[str, str], Tuple[str, str, str]], int], trace: Collection[str], + activities: Set[str], act_counter: TCounter[str], act_idxs: Dict[str, List[int]], + allowed_templates: Collection[str]): + if ALTPRECEDENCE in allowed_templates: + for act in act_counter: + for act2 in activities: + if act2 != act: + if act2 not in act_counter: + pass + else: + is_ok_alt_prec = False + if len(act_idxs[act]) == len(act_idxs[act2]): + lenn = len(act_idxs[act]) + is_ok_alt_prec = True + for i in range(lenn): + if act_idxs[act2][i] > act_idxs[act][i] or ( + i < lenn - 1 and act_idxs[act2][i + 1] < act_idxs[act][i]): + is_ok_alt_prec = False + break + elif act_idxs[act2][i] + 1 != act_idxs[act][i]: + pass + rules[__rule_alternate_precedence(act2, act)] = 1 if is_ok_alt_prec else -1 + + +def chainprecedence_template_step1(rules: Dict[Union[Tuple[str, str], Tuple[str, str, str]], int], + trace: Collection[str], activities: Set[str], act_counter: TCounter[str], + act_idxs: Dict[str, List[int]], allowed_templates: Collection[str]): + if CHAINPRECEDENCE in allowed_templates: + for act in act_counter: + for act2 in activities: + if act2 != act: + if act2 not in act_counter: + pass + else: + is_ok_chain_prec = False + if len(act_idxs[act]) == len(act_idxs[act2]): + lenn = len(act_idxs[act]) + is_ok_chain_prec = True + # check alternate and chain response + for i in range(lenn): + if act_idxs[act2][i] > act_idxs[act][i] or ( + i < lenn - 1 and act_idxs[act2][i + 1] < act_idxs[act][i]): + is_ok_chain_prec = False + break + elif act_idxs[act2][i] + 1 != act_idxs[act][i]: + is_ok_chain_prec = False + break + rules[__rule_chain_precedence(act2, act)] = 1 if is_ok_chain_prec else -1 + + +def absence_template(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if ABSENCE in allowed_templates and EXISTENCE in allowed_templates: + for act in activities: + table[__rule_absence_act(act)] = -1 * table[__rule_existence_column(act)] + return table + + +def exactly_one_template_step2(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if EXACTLY_ONE in allowed_templates: + for act in activities: + if __rule_exactly_one_column(act) not in columns: + table[__rule_exactly_one_column(act)] = [0] * len(table[list(table.keys())[0]]) + return table + + +def responded_existence_template_step2(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if RESPONDED_EXISTENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + if __rule_responded_existence_column(act, act2) not in columns: + table[__rule_responded_existence_column(act, act2)] = [0] * len(table[list(table.keys())[0]]) + return table + + +def response_template_step2(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if RESPONSE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + if __rule_response(act, act2) not in columns: + table[__rule_response(act, act2)] = [0] * len(table[list(table.keys())[0]]) + return table + + +def precedence_template_step2(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if PRECEDENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + if __rule_precedence(act, act2) not in columns: + table[__rule_precedence(act, act2)] = [0] * len(table[list(table.keys())[0]]) + return table + + +def altresponse_template_step2(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if ALTRESPONSE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + if __rule_alternate_response(act, act2) not in columns: + table[__rule_alternate_response(act, act2)] = [0] * len(table[list(table.keys())[0]]) + return table + + +def chainresponse_template_step2(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if CHAINRESPONSE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + if __rule_chain_response(act, act2) not in columns: + table[__rule_chain_response(act, act2)] = [0] * len(table[list(table.keys())[0]]) + return table + + +def altprecedence_template_step2(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if ALTPRECEDENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + if __rule_alternate_precedence(act, act2) not in columns: + table[__rule_alternate_precedence(act, act2)] = [0] * len(table[list(table.keys())[0]]) + return table + + +def chainprecedence_template_step2(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if CHAINPRECEDENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + if __rule_chain_precedence(act, act2) not in columns: + table[__rule_chain_precedence(act, act2)] = [0] * len(table[list(table.keys())[0]]) + return table + + +def succession_template(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if SUCCESSION in allowed_templates and RESPONSE in allowed_templates and PRECEDENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + table[__rule_succession(act, act2)] = np.minimum(table[__rule_response(act, act2)], table[__rule_precedence(act, act2)]) + return table + + +def altsuccession_template(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if ALTSUCCESSION in allowed_templates and ALTRESPONSE in allowed_templates and ALTPRECEDENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + table[__rule_alternate_succession(act, act2)] = np.minimum(table[__rule_alternate_response(act, act2)], table[__rule_alternate_precedence(act, act2)]) + return table + + +def chainsuccession_template(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if CHAINSUCCESSION in allowed_templates and CHAINRESPONSE in allowed_templates and CHAINPRECEDENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + table[__rule_chain_succession(act, act2)] = np.minimum(table[__rule_chain_response(act, act2)], table[__rule_chain_precedence(act, act2)]) + return table + + +def coexistence_template(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if COEXISTENCE in allowed_templates and RESPONDED_EXISTENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + table[__rule_coexistence(act, act2)] = np.minimum(table[__rule_responded_existence_column(act, act2)], table[__rule_responded_existence_column(act2, act)]) + return table + + +def noncoexistence_template(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if NONCOEXISTENCE in allowed_templates and COEXISTENCE in allowed_templates and RESPONDED_EXISTENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + table[__rule_non_coexistence(act, act2)] = -1 * table[__rule_coexistence(act, act2)] + return table + + +def nonsuccession_template(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if NONSUCCESSION in allowed_templates and SUCCESSION in allowed_templates and RESPONSE in allowed_templates and PRECEDENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + table[__rule_non_succession(act, act2)] = -1 * table[__rule_succession(act, act2)] + return table + + +def nonchainsuccession_template(table, columns: Collection[str], activities: Set[str], + allowed_templates: Collection[str]) -> pd.DataFrame: + if NONCHAINSUCCESSION in allowed_templates and CHAINSUCCESSION in allowed_templates and CHAINRESPONSE in allowed_templates and CHAINPRECEDENCE in allowed_templates: + for act in activities: + for act2 in activities: + if act2 != act: + table[__rule_non_chain_succession(act, act2)] = -1 * table[ + __rule_chain_succession(act, act2)] + return table + + +def form_rules_table(log: Union[EventLog, pd.DataFrame], + parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + allowed_templates = exec_utils.get_param_value(Parameters.ALLOWED_TEMPLATES, parameters, None) + + if allowed_templates is None: + allowed_templates = {EXISTENCE, EXACTLY_ONE, INIT, RESPONDED_EXISTENCE, RESPONSE, PRECEDENCE, SUCCESSION, + ALTRESPONSE, ALTPRECEDENCE, ALTSUCCESSION, CHAINRESPONSE, CHAINPRECEDENCE, CHAINSUCCESSION, + ABSENCE, COEXISTENCE} + + import pm4py + + projected_log = pm4py.project_on_event_attribute(log, activity_key, case_id_key=case_id_key) + activities = exec_utils.get_param_value(Parameters.CONSIDERED_ACTIVITIES, parameters, None) + + if activities is None: + activities = set(y for x in projected_log for y in x) + + allowed_templates = set(allowed_templates) + activities = set(activities) + + vars = Counter([tuple([y for y in x if y in activities]) for x in projected_log]) + table = [] + + for trace, occs in vars.items(): + act_counter = Counter(trace) + act_idxs = {x: [] for x in set(trace)} + + for idx, act in enumerate(trace): + act_idxs[act].append(idx) + + rules = {} + + existence_template_step1(rules, trace, activities, act_counter, act_idxs, allowed_templates) + exactly_one_template_step1(rules, trace, activities, act_counter, act_idxs, allowed_templates) + init_template_step1(rules, trace, activities, act_counter, act_idxs, allowed_templates) + responded_existence_template_step1(rules, trace, activities, act_counter, act_idxs, allowed_templates) + response_template_step1(rules, trace, activities, act_counter, act_idxs, allowed_templates) + precedence_template_step1(rules, trace, activities, act_counter, act_idxs, allowed_templates) + altresponse_template_step1(rules, trace, activities, act_counter, act_idxs, allowed_templates) + chainresponse_template_step1(rules, trace, activities, act_counter, act_idxs, allowed_templates) + altprecedence_template_step1(rules, trace, activities, act_counter, act_idxs, allowed_templates) + chainprecedence_template_step1(rules, trace, activities, act_counter, act_idxs, allowed_templates) + + for i in range(occs): + table.append(rules) + + columns = set(y for x in table for y in x.keys()) + table2 = {c: [] for c in columns} + for i in range(len(table)): + trace = table[i] + for c in columns: + if c in trace: + table2[c].append(trace[c]) + else: + table2[c].append(0) + + for c in table2: + table2[c] = np.array(table2[c]) + + table2 = absence_template(table2, columns, activities, allowed_templates) + table2 = exactly_one_template_step2(table2, columns, activities, allowed_templates) + table2 = responded_existence_template_step2(table2, columns, activities, allowed_templates) + table2 = response_template_step2(table2, columns, activities, allowed_templates) + table2 = precedence_template_step2(table2, columns, activities, allowed_templates) + table2 = altresponse_template_step2(table2, columns, activities, allowed_templates) + table2 = chainresponse_template_step2(table2, columns, activities, allowed_templates) + table2 = altprecedence_template_step2(table2, columns, activities, allowed_templates) + table2 = chainprecedence_template_step2(table2, columns, activities, allowed_templates) + + table2 = succession_template(table2, columns, activities, allowed_templates) + table2 = altsuccession_template(table2, columns, activities, allowed_templates) + table2 = chainsuccession_template(table2, columns, activities, allowed_templates) + table2 = coexistence_template(table2, columns, activities, allowed_templates) + table2 = noncoexistence_template(table2, columns, activities, allowed_templates) + table2 = nonsuccession_template(table2, columns, activities, allowed_templates) + table2 = nonchainsuccession_template(table2, columns, activities, allowed_templates) + + return pandas_utils.instantiate_dataframe(table2) + + + +def get_rules_from_rules_df(rules_df, parameters: Optional[Dict[Any, Any]] = None) -> Dict[ + str, Dict[Any, Dict[str, int]]]: + if parameters is None: + parameters = {} + + min_support_ratio = exec_utils.get_param_value(Parameters.MIN_SUPPORT_RATIO, parameters, None) + min_confidence_ratio = exec_utils.get_param_value(Parameters.MIN_CONFIDENCE_RATIO, parameters, None) + rules = {} + + if min_support_ratio is None and min_confidence_ratio is None: + # auto determine the minimum support and confidence ratio by identifying the values for the best feature + auto_selection_multiplier = exec_utils.get_param_value(Parameters.AUTO_SELECTION_MULTIPLIER, parameters, 0.8) + cols_prod = [] + for col_name in rules_df: + col = rules_df[col_name] + supp = len(col[col != 0]) + supp_ratio = float(supp) / float(len(rules_df)) + if supp_ratio > 0: + conf_ratio = float(len(col[col == 1])) / float(supp) + prod = supp_ratio * conf_ratio + cols_prod.append((col_name, prod)) + cols_prod = sorted(cols_prod, key=lambda x: (x[1], x[0]), reverse=True) + col = rules_df[cols_prod[0][0]] + supp = len(col[col != 0]) + min_support_ratio = float(supp) / float(len(rules_df)) * auto_selection_multiplier + min_confidence_ratio = float(len(col[col == 1])) / float(supp) * auto_selection_multiplier + + if rules_df is not None and len(rules_df) > 0: + for col_name in rules_df: + col = rules_df[col_name] + supp = len(col[col != 0]) + + if supp > len(rules_df) * min_support_ratio: + conf = len(col[col == 1]) + + if conf > supp * min_confidence_ratio: + rule, key = __col_to_dict_rule(col_name) + if rule not in rules: + rules[rule] = {} + + rules[rule][key] = {"support": supp, "confidence": conf} + + return rules + + +def apply(log: Union[EventLog, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> Dict[ + str, Dict[Any, Dict[str, int]]]: + """ + Discovers a DECLARE model from the provided event log + + Paper: + F. M. Maggi, A. J. Mooij and W. M. P. van der Aalst, "User-guided discovery of declarative process models," 2011 IEEE Symposium on Computational Intelligence and Data Mining (CIDM), Paris, France, 2011, pp. 192-199, doi: 10.1109/CIDM.2011.5949297. + + + Parameters + --------------- + log + Log object (EventLog, Pandas table) + parameters + Possible parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.CONSIDERED_ACTIVITIES + - Parameters.MIN_SUPPORT_RATIO + - Parameters.MIN_CONFIDENCE_RATIO + - Parameters.AUTO_SELECTION_MULTIPLIER + - Parameters.ALLOWED_TEMPLATES: collection of templates to consider, including: + * existence + * exactly_one + * init + * responded_existence + * response + * precedence + * succession + * altresponse + * altprecedence + * altsuccession + * chainresponse + * chainprecedence + * chainsuccession + * absence + * coexistence + * noncoexistence + * nonsuccession + * nonchainsuccession + + Returns + ------------- + declare_model + DECLARE model (as Python dictionary), where each template is associated with its own rules + """ + if parameters is None: + parameters = {} + + rules_df = form_rules_table(log, parameters=parameters) + + rules = get_rules_from_rules_df(rules_df, parameters=parameters) + + return rules diff --git a/pm4py/pm4py/algo/discovery/dfg/__init__.py b/pm4py/pm4py/algo/discovery/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..70384be63f92316e7cc1f0b4b17a6307309782d8 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg import adapters, variants, algorithm, replacement, utils diff --git a/pm4py/pm4py/algo/discovery/dfg/adapters/__init__.py b/pm4py/pm4py/algo/discovery/dfg/adapters/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5b4e1fd230dc87ab87cf41dd9fa55ae154c4f77e --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/adapters/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.adapters import pandas diff --git a/pm4py/pm4py/algo/discovery/dfg/adapters/pandas/__init__.py b/pm4py/pm4py/algo/discovery/dfg/adapters/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..eb7315dad0c3abfb53c677ed224f7fdca07225cb --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/adapters/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics, freq_triples diff --git a/pm4py/pm4py/algo/discovery/dfg/adapters/pandas/df_statistics.py b/pm4py/pm4py/algo/discovery/dfg/adapters/pandas/df_statistics.py new file mode 100644 index 0000000000000000000000000000000000000000..795370cd574381a251428540615c34bc5d0b5292 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/adapters/pandas/df_statistics.py @@ -0,0 +1,326 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import xes_constants, pandas_utils, constants +from pm4py.util.business_hours import soj_time_business_hours_diff + + +def get_dfg_graph(df, measure="frequency", activity_key="concept:name", case_id_glue="case:concept:name", + start_timestamp_key=None, timestamp_key="time:timestamp", perf_aggregation_key="mean", + sort_caseid_required=True, + sort_timestamp_along_case_id=True, keep_once_per_case=False, window=1, + business_hours=False, business_hours_slot=None, workcalendar=constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR, target_activity_key=None, + reduce_columns=True, cost_attribute=None): + """ + Get DFG graph from Pandas dataframe + + Parameters + ----------- + df + Dataframe + measure + Measure to use (frequency/performance/both) + activity_key + Activity key to use in the grouping + case_id_glue + Case ID identifier + start_timestamp_key + Start timestamp key + timestamp_key + Timestamp key + perf_aggregation_key + Performance aggregation key (mean, median, min, max) + sort_caseid_required + Specify if a sort on the Case ID is required + sort_timestamp_along_case_id + Specifying if sorting by timestamp along the CaseID is required + keep_once_per_case + In the counts, keep only one occurrence of the path per case (the first) + window + Window of the DFG (default 1) + + Returns + ----------- + dfg + DFG in the chosen measure (may be only the frequency, only the performance, or both) + """ + import pandas as pd + + # added support to specify an activity key for the target event which is different + # from the activity key of the source event. + if target_activity_key is None: + target_activity_key = activity_key + + # if not differently specified, set the start timestamp key to the timestamp key + # to avoid retro-compatibility problems + st_eq_ct = start_timestamp_key == timestamp_key + if start_timestamp_key is None: + start_timestamp_key = xes_constants.DEFAULT_START_TIMESTAMP_KEY + if start_timestamp_key not in df.columns: + df[start_timestamp_key] = df[timestamp_key] + st_eq_ct = True + + # to increase the speed of the approaches reduce dataframe to case, activity (and possibly complete timestamp) + # columns + if reduce_columns: + red_attrs = {case_id_glue, activity_key, target_activity_key} + if measure == "frequency" and not sort_timestamp_along_case_id: + pass + else: + red_attrs.add(start_timestamp_key) + red_attrs.add(timestamp_key) + + if measure == "cost": + red_attrs.add(cost_attribute) + + df = df[list(red_attrs)] + + if measure == "cost": + df[cost_attribute] = df[cost_attribute].fillna(value=0) + + # to get rows belonging to same case ID together, we need to sort on case ID + if sort_caseid_required: + if sort_timestamp_along_case_id: + df = df.sort_values([case_id_glue, start_timestamp_key, timestamp_key]) + else: + df = df.sort_values(case_id_glue) + + # shift the dataframe by 1, in order to couple successive rows + df_shifted = df.shift(-window) + # change column names to shifted dataframe + df_shifted.columns = [str(col) + '_2' for col in df_shifted.columns] + # concate the two dataframe to get a unique dataframe + df_successive_rows = pandas_utils.concat([df, df_shifted], axis=1) + # as successive rows in the sorted dataframe may belong to different case IDs we have to restrict ourselves to + # successive rows belonging to same case ID + df_successive_rows = df_successive_rows[df_successive_rows[case_id_glue] == df_successive_rows[case_id_glue + '_2']] + if keep_once_per_case: + df_successive_rows = df_successive_rows.groupby( + [case_id_glue, activity_key, target_activity_key + "_2"]).first().reset_index() + + all_columns = set(df_successive_rows.columns) + all_columns = list(all_columns - set([activity_key, target_activity_key + '_2'])) + + if measure == "performance" or measure == "both": + if not st_eq_ct: + # in the arc performance calculation, make sure to consider positive or null values + df_successive_rows[start_timestamp_key + '_2'] = df_successive_rows[[start_timestamp_key + '_2', timestamp_key]].max(axis=1) + + # calculate the difference between the timestamps of two successive events + if business_hours: + if business_hours_slot is None: + business_hours_slot = constants.DEFAULT_BUSINESS_HOUR_SLOTS + df_successive_rows[constants.DEFAULT_FLOW_TIME] = df_successive_rows.apply( + lambda x: soj_time_business_hours_diff(x[timestamp_key], x[start_timestamp_key + '_2'], business_hours_slot, workcalendar), axis=1) + else: + difference = df_successive_rows[start_timestamp_key + '_2'] - df_successive_rows[timestamp_key] + df_successive_rows[constants.DEFAULT_FLOW_TIME] = pandas_utils.get_total_seconds(difference) + # groups couple of attributes (directly follows relation, we can measure the frequency and the performance) + directly_follows_grouping = df_successive_rows.groupby([activity_key, target_activity_key + '_2'])[ + constants.DEFAULT_FLOW_TIME] + elif measure == "cost": + directly_follows_grouping = df_successive_rows.groupby([activity_key, target_activity_key + '_2'])[cost_attribute + '_2'] + else: + directly_follows_grouping = df_successive_rows.groupby([activity_key, target_activity_key + '_2']) + if all_columns: + directly_follows_grouping = directly_follows_grouping[all_columns[0]] + + dfg_frequency = {} + dfg_performance = {} + + if measure == "frequency" or measure == "both": + dfg_frequency = directly_follows_grouping.size().to_dict() + + if measure == "performance" or measure == "cost" or measure == "both": + if perf_aggregation_key == "all": + dfg_performance_mean = directly_follows_grouping.agg("mean").to_dict() + dfg_performance_median = directly_follows_grouping.agg("median").to_dict() + dfg_performance_max = directly_follows_grouping.agg("max").to_dict() + dfg_performance_min = directly_follows_grouping.agg("min").to_dict() + dfg_performance_sum = directly_follows_grouping.agg("sum").to_dict() + dfg_performance_std = directly_follows_grouping.agg("std").to_dict() + dfg_performance = {} + for key in dfg_performance_mean: + dfg_performance[key] = {"mean": dfg_performance_mean[key], "median": dfg_performance_median[key], "max": dfg_performance_max[key], "min": dfg_performance_min[key], "sum": dfg_performance_sum[key], "stdev": dfg_performance_std[key]} + elif perf_aggregation_key == "raw_values": + dfg_performance = directly_follows_grouping.agg(list).to_dict() + else: + dfg_performance = directly_follows_grouping.agg(perf_aggregation_key).to_dict() + + if measure == "frequency": + return dfg_frequency + + if measure == "performance" or measure == "cost": + return dfg_performance + + if measure == "both": + return [dfg_frequency, dfg_performance] + + +def get_partial_order_dataframe(df, start_timestamp_key=None, timestamp_key="time:timestamp", + case_id_glue="case:concept:name", activity_key="concept:name", + sort_caseid_required=True, + sort_timestamp_along_case_id=True, reduce_dataframe=True, keep_first_following=True, + business_hours=False, business_hours_slot=None, workcalendar=constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR, + event_index=constants.DEFAULT_INDEX_KEY): + """ + Gets the partial order between events (of the same case) in a Pandas dataframe + + Parameters + -------------- + df + Dataframe + start_timestamp_key + Start timestamp key (if not provided, defaulted to the timestamp_key) + timestamp_key + Complete timestamp + case_id_glue + Column of the dataframe to use as case ID + activity_key + Activity key + sort_caseid_required + Tells if a sort by case ID is required (default: True) + sort_timestamp_along_case_id + Tells if a sort by timestamp is required along the case ID (default: True) + reduce_dataframe + To fasten operation, keep only essential columns in the dataframe + keep_first_following + Keep only the first event following the given event + Returns + --------------- + part_ord_dataframe + Partial order dataframe (with @@flow_time between events) + """ + # if not differently specified, set the start timestamp key to the timestamp key + # to avoid retro-compatibility problems + if start_timestamp_key is None: + start_timestamp_key = xes_constants.DEFAULT_START_TIMESTAMP_KEY + + if start_timestamp_key not in df: + df[start_timestamp_key] = df[timestamp_key] + + # to increase the speed of the approaches reduce dataframe to case, activity (and possibly complete timestamp) + # columns + if reduce_dataframe: + needed_columns = {case_id_glue, activity_key, start_timestamp_key, timestamp_key} + if event_index in df.columns: + needed_columns.add(event_index) + needed_columns = list(needed_columns) + df = df[needed_columns] + + # to get rows belonging to same case ID together, we need to sort on case ID + if sort_caseid_required: + if sort_timestamp_along_case_id: + df = df.sort_values([case_id_glue, start_timestamp_key, timestamp_key]) + else: + df = df.sort_values(case_id_glue) + df = df.reset_index(drop=True) + + if event_index not in df.columns: + df = pandas_utils.insert_index(df, event_index, copy_dataframe=False, reset_index=False) + + df = df.set_index(case_id_glue) + + df = df.join(df, rsuffix="_2") + df = df[df[event_index] < df[event_index + "_2"]] + df = df[df[timestamp_key] <= df[start_timestamp_key + '_2']] + + df = df.reset_index() + + if business_hours: + if business_hours_slot is None: + business_hours_slot = constants.DEFAULT_BUSINESS_HOUR_SLOTS + df[constants.DEFAULT_FLOW_TIME] = df.apply( + lambda x: soj_time_business_hours_diff(x[timestamp_key], x[start_timestamp_key + '_2'], business_hours_slot, workcalendar), axis=1) + else: + df[constants.DEFAULT_FLOW_TIME] = pandas_utils.get_total_seconds(df[start_timestamp_key + "_2"] - df[timestamp_key]) + + if keep_first_following: + df = df.groupby(constants.DEFAULT_INDEX_KEY).first().reset_index() + + return df + + +def get_concurrent_events_dataframe(df, start_timestamp_key=None, timestamp_key="time:timestamp", + case_id_glue="case:concept:name", activity_key="concept:name", + sort_caseid_required=True, + sort_timestamp_along_case_id=True, reduce_dataframe=True, + max_start_column="@@max_start_column", min_complete_column="@@min_complete_column", + diff_maxs_minc="@@diff_maxs_minc", strict=False): + """ + Gets the concurrent events (of the same case) in a Pandas dataframe + + Parameters + -------------- + df + Dataframe + start_timestamp_key + Start timestamp key (if not provided, defaulted to the timestamp_key) + timestamp_key + Complete timestamp + case_id_glue + Column of the dataframe to use as case ID + activity_key + Activity key + sort_caseid_required + Tells if a sort by case ID is required (default: True) + sort_timestamp_along_case_id + Tells if a sort by timestamp is required along the case ID (default: True) + reduce_dataframe + To fasten operation, keep only essential columns in the dataframe + strict + Gets only entries that are strictly concurrent (i.e. the length of the intersection as real interval is > 0) + + Returns + --------------- + conc_ev_dataframe + Concurrent events dataframe (with @@diff_maxs_minc as the size of the intersection of the intervals) + """ + # if not differently specified, set the start timestamp key to the timestamp key + # to avoid retro-compatibility problems + if start_timestamp_key is None: + start_timestamp_key = xes_constants.DEFAULT_START_TIMESTAMP_KEY + df[start_timestamp_key] = df[timestamp_key] + + # to get rows belonging to same case ID together, we need to sort on case ID + if sort_caseid_required: + if sort_timestamp_along_case_id: + df = df.sort_values([case_id_glue, start_timestamp_key, timestamp_key]) + else: + df = df.sort_values(case_id_glue) + + # to increase the speed of the approaches reduce dataframe to case, activity (and possibly complete timestamp) + # columns + if reduce_dataframe: + df = df[[case_id_glue, activity_key, start_timestamp_key, timestamp_key]] + + df = pandas_utils.insert_index(df) + df = df.set_index(case_id_glue) + df_copy = df.copy() + + df = df.join(df_copy, rsuffix="_2").dropna() + df = df[df[constants.DEFAULT_INDEX_KEY] < df[constants.DEFAULT_INDEX_KEY + "_2"]] + df[max_start_column] = df[[start_timestamp_key, start_timestamp_key + '_2']].max(axis=1) + df[min_complete_column] = df[[timestamp_key, timestamp_key + '_2']].min(axis=1) + df[max_start_column] = df[max_start_column].apply(lambda x: x.timestamp()) + df[min_complete_column] = df[min_complete_column].apply(lambda x: x.timestamp()) + df[diff_maxs_minc] = df[min_complete_column] - df[max_start_column] + if strict: + df = df[df[diff_maxs_minc] > 0] + else: + df = df[df[diff_maxs_minc] >= 0] + + return df diff --git a/pm4py/pm4py/algo/discovery/dfg/adapters/pandas/freq_triples.py b/pm4py/pm4py/algo/discovery/dfg/adapters/pandas/freq_triples.py new file mode 100644 index 0000000000000000000000000000000000000000..43d94097f9bb8d3f58ee7420966d436f3a834e2e --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/adapters/pandas/freq_triples.py @@ -0,0 +1,69 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import constants, pandas_utils + +def get_freq_triples(df, activity_key="concept:name", case_id_glue="case:concept:name", timestamp_key="time:timestamp", + sort_caseid_required=True, sort_timestamp_along_case_id=True): + """ + Gets the frequency triples out of a dataframe + + Parameters + ------------ + df + Dataframe + activity_key + Activity key + case_id_glue + Case ID glue + timestamp_key + Timestamp key + sort_caseid_required + Determine if sort by case ID is required (default: True) + sort_timestamp_along_case_id + Determine if sort by timestamp is required (default: True) + + Returns + ------------- + freq_triples + Frequency triples from the dataframe + """ + import pandas as pd + + if sort_caseid_required: + if sort_timestamp_along_case_id: + df = df.sort_values([case_id_glue, timestamp_key]) + else: + df = df.sort_values(case_id_glue) + df_reduced = df[[case_id_glue, activity_key]] + # shift the dataframe by 1 + df_reduced_1 = df_reduced.shift(-1) + # shift the dataframe by 2 + df_reduced_2 = df_reduced.shift(-2) + # change column names to shifted dataframe + df_reduced_1.columns = [str(col) + '_2' for col in df_reduced_1.columns] + df_reduced_2.columns = [str(col) + '_3' for col in df_reduced_2.columns] + + df_successive_rows = pandas_utils.concat([df_reduced, df_reduced_1, df_reduced_2], axis=1) + df_successive_rows = df_successive_rows[df_successive_rows[case_id_glue] == df_successive_rows[case_id_glue + '_2']] + df_successive_rows = df_successive_rows[df_successive_rows[case_id_glue] == df_successive_rows[case_id_glue + '_3']] + all_columns = set(df_successive_rows.columns) + all_columns = list(all_columns - set([activity_key, activity_key + '_2', activity_key + '_3'])) + directly_follows_grouping = df_successive_rows.groupby([activity_key, activity_key + '_2', activity_key + '_3']) + if all_columns: + directly_follows_grouping = directly_follows_grouping[all_columns[0]] + freq_triples = directly_follows_grouping.size().to_dict() + return freq_triples diff --git a/pm4py/pm4py/algo/discovery/dfg/algorithm.py b/pm4py/pm4py/algo/discovery/dfg/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..7eb9520820e16b6171c48669141f3d3309da2756 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/algorithm.py @@ -0,0 +1,112 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py import util as pmutil +from pm4py.algo.discovery.dfg.variants import native, performance, freq_triples, case_attributes, clean +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.util import xes_constants as xes_util +from pm4py.util import exec_utils +from pm4py.util import constants, pandas_utils +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +class Variants(Enum): + NATIVE = native + FREQUENCY = native + PERFORMANCE = performance + FREQUENCY_GREEDY = native + PERFORMANCE_GREEDY = performance + FREQ_TRIPLES = freq_triples + CASE_ATTRIBUTES = case_attributes + CLEAN = clean # 'novel' replacement for native + + +DFG_NATIVE = Variants.NATIVE +DFG_FREQUENCY = Variants.FREQUENCY +DFG_PERFORMANCE = Variants.PERFORMANCE +DFG_FREQUENCY_GREEDY = Variants.FREQUENCY_GREEDY +DFG_PERFORMANCE_GREEDY = Variants.PERFORMANCE_GREEDY +FREQ_TRIPLES = Variants.FREQ_TRIPLES +DFG_CLEAN = Variants.CLEAN + +DEFAULT_VARIANT = Variants.NATIVE + +VERSIONS = {DFG_NATIVE, DFG_FREQUENCY, DFG_PERFORMANCE, DFG_FREQUENCY_GREEDY, DFG_PERFORMANCE_GREEDY, FREQ_TRIPLES} + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> Dict[Tuple[str, str], float]: + """ + Calculates DFG graph (frequency or performance) starting from a log + + Parameters + ---------- + log + Log + parameters + Possible parameters passed to the algorithms: + Parameters.AGGREGATION_MEASURE -> performance aggregation measure (min, max, mean, median) + Parameters.ACTIVITY_KEY -> Attribute to use as activity + Parameters.TIMESTAMP_KEY -> Attribute to use as timestamp + variant + Variant of the algorithm to use, possible values: + - Variants.NATIVE + - Variants.FREQUENCY + - Variants.FREQUENCY_GREEDY + - Variants.PERFORMANCE + - Variants.PERFORMANCE_GREEDY + - Variants.FREQ_TRIPLES + + Returns + ------- + dfg + DFG graph + """ + if variant == Variants.CLEAN and pandas_utils.check_is_pandas_dataframe(log): + return clean.apply(log, parameters) + elif variant is None: + variant = Variants.NATIVE + + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_util.DEFAULT_TIMESTAMP_KEY) + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, pmutil.constants.CASE_CONCEPT_NAME) + + if pandas_utils.check_is_pandas_dataframe(log) and not variant == Variants.FREQ_TRIPLES: + dfg_frequency, dfg_performance = df_statistics.get_dfg_graph(log, measure="both", + activity_key=activity_key, + timestamp_key=timestamp_key, + case_id_glue=case_id_glue, + start_timestamp_key=start_timestamp_key) + if variant in [Variants.PERFORMANCE, Variants.PERFORMANCE_GREEDY]: + return dfg_performance + else: + return dfg_frequency + + return exec_utils.get_variant(variant).apply(log_conversion.apply(log, parameters, log_conversion.TO_EVENT_LOG), parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/dfg/replacement.py b/pm4py/pm4py/algo/discovery/dfg/replacement.py new file mode 100644 index 0000000000000000000000000000000000000000..0d4738c9276e74672e58cdea4d4d5a0baeebed08 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/replacement.py @@ -0,0 +1,36 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def replace_values(dfg1, dfg2): + """ + Replace edge values specified in a DFG by values from a (potentially bigger) DFG + + Parameters + ----------- + dfg1 + First specified DFG (where values of edges should be replaces) + dfg2 + Second specified DFG (from which values should be taken) + + Returns + ----------- + dfg1 + First specified DFG with overrided values + """ + for edge in dfg1: + if edge in dfg2: + dfg1[edge] = dfg2[edge] + return dfg1 diff --git a/pm4py/pm4py/algo/discovery/dfg/utils/__init__.py b/pm4py/pm4py/algo/discovery/dfg/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7a873fedc226b2c95b6528299915b12e94129f89 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/utils/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.utils import dfg_utils diff --git a/pm4py/pm4py/algo/discovery/dfg/utils/dfg_utils.py b/pm4py/pm4py/algo/discovery/dfg/utils/dfg_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..4c00c54c284ea106c35447b743e0425ae142efa5 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/utils/dfg_utils.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.dfg.utils.dfg_utils import * diff --git a/pm4py/pm4py/algo/discovery/dfg/variants/__init__.py b/pm4py/pm4py/algo/discovery/dfg/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..03549ab409320f42105f0518a542747a131622c5 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/variants/__init__.py @@ -0,0 +1,21 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.variants import native, performance, freq_triples, case_attributes, clean +import importlib.util + +if importlib.util.find_spec("polars"): + from pm4py.algo.discovery.dfg.variants import clean_polars diff --git a/pm4py/pm4py/algo/discovery/dfg/variants/case_attributes.py b/pm4py/pm4py/algo/discovery/dfg/variants/case_attributes.py new file mode 100644 index 0000000000000000000000000000000000000000..bcba90e905d0105aea5b53b365737d52bce999c2 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/variants/case_attributes.py @@ -0,0 +1,100 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Tuple, Union + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils, constants, xes_constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ATTRIBUTES = "case_attributes" + RETURN_NODES_ATTRIBUTES = "return_nodes_attributes" + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Union[ + Tuple[Dict[Tuple[str, str], Dict[str, Dict[str, Any]]], Dict[str, Dict[str, Dict[str, Any]]]], Dict[ + Tuple[str, str], Dict[str, Dict[str, Any]]]]: + """ + Discovers a directly-follows graph from an event log, with the edges that are annotated with the different values + for the given case attributes. + + Parameters + ----------------- + log + Event log + parameters + Parameters of the variant, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.CASE_ATTRIBUTES => the case attributes that are used to annotate the edges (default: the case ID) + - Parameters.RETURN_NODES_ATTRIBUTES => (optional) returns also a dictionary with the values of the + attributes for each activity of the graph (default: False) + + Returns + ----------------- + dfg + Directly-follows graph (with the edges annotated with the specified case attributes), e.g.: + {('register request', 'examine casually'): {'creator': {'Fluxicon Nitro': 3}, 'concept:name': + {'3': 1, '6': 1, '5': 1}} ... + nodes + (Optional) dictionary of activities (annotated with the specified case attributes), e.g.: + {'register request': {'creator': {'Fluxicon Nitro': 6}, 'concept:name': + {'3': 1, '2': 1, '1': 1, '6': 1, '5': 1, '4': 1}} ... + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_attributes = exec_utils.get_param_value(Parameters.CASE_ATTRIBUTES, parameters, + list([xes_constants.DEFAULT_TRACEID_KEY])) + return_nodes_attributes = exec_utils.get_param_value(Parameters.RETURN_NODES_ATTRIBUTES, parameters, False) + dfg = {} + + for trace in log: + for attr in set(case_attributes).intersection(set(trace.attributes)): + attr_value = trace.attributes[attr] + for i in range(len(trace) - 1): + ev_couple = (trace[i][activity_key], trace[i + 1][activity_key]) + if ev_couple not in dfg: + dfg[ev_couple] = {} + if attr not in dfg[ev_couple]: + dfg[ev_couple][attr] = {} + if attr_value not in dfg[ev_couple][attr]: + dfg[ev_couple][attr][attr_value] = 0 + dfg[ev_couple][attr][attr_value] += 1 + + if return_nodes_attributes: + nodes = {} + for trace in log: + for attr in set(case_attributes).intersection(set(trace.attributes)): + attr_value = trace.attributes[attr] + for i in range(len(trace)): + act = trace[i][activity_key] + if act not in nodes: + nodes[act] = {} + if attr not in nodes[act]: + nodes[act][attr] = {} + if attr_value not in nodes[act][attr]: + nodes[act][attr][attr_value] = 0 + nodes[act][attr][attr_value] += 1 + + return dfg, nodes + + return dfg diff --git a/pm4py/pm4py/algo/discovery/dfg/variants/clean.py b/pm4py/pm4py/algo/discovery/dfg/variants/clean.py new file mode 100644 index 0000000000000000000000000000000000000000..2c997565679afa4835b9a260ed4876f0252862db --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/variants/clean.py @@ -0,0 +1,73 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import time +from enum import Enum +from typing import Optional, Dict, Any + +import numpy as np +import pandas as pd + +from pm4py.objects.dfg.obj import DFG +from pm4py.util import constants, exec_utils +from pm4py.util import xes_constants as xes_util + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + + +CONST_AUX_ACT_START = 'aux_act_start' +CONST_PROCESS_START = '#!$#PROCESS_START#!$#' +CONST_AUX_ACT_END = 'aux_act_end' +CONST_PROCESS_END = '#!$#PROCESS_END#!$#' + + +def apply(log: pd.DataFrame, parameters: Optional[Dict[str, Any]] = None) -> DFG: + parameters = {} if parameters is None else parameters + act_key = exec_utils.get_param_value( + Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + cid_key = exec_utils.get_param_value( + Parameters.CASE_ID_KEY, parameters, constants.CASE_ATTRIBUTE_GLUE) + time_key = exec_utils.get_param_value( + Parameters.TIMESTAMP_KEY, parameters, xes_util.DEFAULT_TIMESTAMP_KEY) + + df = log.sort_values([cid_key, time_key]).loc[:, [cid_key, act_key]].reset_index() + + aux_act_start = CONST_AUX_ACT_START + str(time.time()) + aux_act_end = CONST_AUX_ACT_END + str(time.time()) + df[aux_act_start] = df.groupby(cid_key)[act_key].shift(1).replace(np.nan, CONST_PROCESS_START) + df[aux_act_end] = df.groupby(cid_key)[act_key].shift(-1).replace(np.nan, CONST_PROCESS_END) + + starters = df[(df[aux_act_start] == CONST_PROCESS_START)] + borders = df[(df[aux_act_end] == CONST_PROCESS_END)] + connections = df[((df[aux_act_start] != CONST_PROCESS_START) & (df[aux_act_end] != CONST_PROCESS_END))] + + dfg = DFG() + + for (a, b, f) in list( + connections.groupby([act_key, aux_act_end]).size().reset_index().itertuples(index=False, name=None)): + dfg.graph[(a, b)] += f + + for (a, f) in list(starters.groupby([act_key]).size().reset_index().itertuples(index=False, name=None)): + dfg.start_activities[a] += f + + for (a, f) in list(borders.groupby([act_key]).size().reset_index().itertuples(index=False, name=None)): + dfg.end_activities[a] += f + + return dfg diff --git a/pm4py/pm4py/algo/discovery/dfg/variants/clean_polars.py b/pm4py/pm4py/algo/discovery/dfg/variants/clean_polars.py new file mode 100644 index 0000000000000000000000000000000000000000..83d53aed22281b3717ef12e36e75bb37506e4ed6 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/variants/clean_polars.py @@ -0,0 +1,69 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import time +from enum import Enum +from typing import Optional, Dict, Any + +import polars as pl + +from pm4py.objects.dfg.obj import DFG +from pm4py.util import constants, exec_utils +from pm4py.util import xes_constants as xes_util + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + + +CONST_AUX_ACT = 'aux_act_' +CONST_AUX_CASE = 'aux_case_' +CONST_COUNT = 'count_' + + +def apply(log: pl.DataFrame, parameters: Optional[Dict[str, Any]] = None) -> DFG: + parameters = {} if parameters is None else parameters + act_key = exec_utils.get_param_value( + Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + cid_key = exec_utils.get_param_value( + Parameters.CASE_ID_KEY, parameters, constants.CASE_ATTRIBUTE_GLUE) + time_key = exec_utils.get_param_value( + Parameters.TIMESTAMP_KEY, parameters, xes_util.DEFAULT_TIMESTAMP_KEY) + aux_act = CONST_AUX_ACT + str(time.time()) + aux_case = CONST_AUX_CASE + str(time.time()) + df = log[[cid_key, act_key, time_key]].clone() + df = df.sort([cid_key, time_key]) + df = df[[cid_key, act_key]] + df = df.with_column(df[act_key].shift(-1).alias(aux_act)) + df = df.with_column(df[cid_key].shift(-1).alias(aux_case)) + dfg = DFG() + + excl_starter = df[0, act_key] + borders = df.filter(df[cid_key] != df[aux_case]) + + for d in filter(lambda d: d[aux_act] is not None, borders.groupby([aux_act]).count().to_dicts()): + v = d['count'] + 1 if d[aux_act] == excl_starter else d['count'] + dfg.start_activities[d[aux_act]] = v + + for d in filter(lambda d: d[act_key] is not None, borders.groupby([act_key]).count().to_dicts()): + dfg.end_activities[d[act_key]] = d['count'] + + for d in df.filter((df[cid_key] == df[aux_case])).groupby([act_key, aux_act]).count().to_dicts(): + dfg.graph[(d[act_key], d[aux_act])] = d['count'] + + return dfg diff --git a/pm4py/pm4py/algo/discovery/dfg/variants/clean_time.py b/pm4py/pm4py/algo/discovery/dfg/variants/clean_time.py new file mode 100644 index 0000000000000000000000000000000000000000..612a8f15b905e75451c5b4f259c7c16a601f964b --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/variants/clean_time.py @@ -0,0 +1,93 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import time +from enum import Enum +from typing import List, Optional, Dict, Any + +import pandas as pd +import numpy as np +from pandas._libs.tslibs.timestamps import Timestamp +from pandas.core.frame import DataFrame +from pandas.core.tools.datetimes import to_datetime + +from pm4py.objects.dfg.obj import DFG +from pm4py.util import constants, exec_utils +from pm4py.util import xes_constants as xes_util + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + + +CONST_AUX_ACT = 'aux_act_' +CONST_AUX_CASE = 'aux_case_' +CONST_COUNT = 'count_' + + +from pm4py.discovery import discover_dfg_typed + + +def apply(log: pd.DataFrame, parameters=None): + if parameters is None: + parameters = {} + + act_key = exec_utils.get_param_value( + Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + cid_key = exec_utils.get_param_value( + Parameters.CASE_ID_KEY, parameters, constants.CASE_ATTRIBUTE_GLUE) + time_key = exec_utils.get_param_value( + Parameters.TIMESTAMP_KEY, parameters, xes_util.DEFAULT_TIMESTAMP_KEY) + + '''sort the values according to cid and timekey''' + df = log.sort_values([cid_key, time_key]).loc[:, [cid_key, act_key, time_key]].reset_index() + + '''mapping each case ID to the first time stamp of that case.''' + grouped = df.groupby(cid_key) + all_cases = df[cid_key].unique() + + time_dictionary_list = {} + + for case in all_cases: + current_group = grouped.get_group(case) + current_group = current_group.sort_values([cid_key, time_key]).loc[:, [cid_key, act_key, time_key]].reset_index() + + all_act = current_group[act_key].unique() + init_timestamp = current_group[time_key][0] + '''deal with loops in a case''' + for act in all_act: + df1 = current_group[current_group[act_key] == act] + mean_time = df1[time_key].mean() + average_time = mean_time - init_timestamp + + if act not in time_dictionary_list.keys(): + time_dictionary_list[act] = [] + time_dictionary_list[act].append(average_time) + else: + time_dictionary_list[act].append(average_time) + + + keys = time_dictionary_list.keys() + time_dictionary = {} + for key in keys: + avg=pd.to_timedelta(pd.Series(time_dictionary_list[key])).mean() + time_dictionary[key] = avg + + return time_dictionary + diff --git a/pm4py/pm4py/algo/discovery/dfg/variants/freq_triples.py b/pm4py/pm4py/algo/discovery/dfg/variants/freq_triples.py new file mode 100644 index 0000000000000000000000000000000000000000..09f505519bd8ecb436b6ebb4dc7e699e9ec96bdd --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/variants/freq_triples.py @@ -0,0 +1,57 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from enum import Enum + +from pm4py.util import constants, exec_utils +from pm4py.util import xes_constants as xes_util +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog, EventStream + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def apply(log: Union[EventLog, EventStream], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple[str, str, str], int]: + return freq_triples(log, parameters=parameters) + + +def freq_triples(log: Union[EventLog, EventStream], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple[str, str, str], int]: + """ + Counts the number of directly follows occurrences, i.e. of the form <...a,b...>, in an event log. + + Parameters + ---------- + log + Trace log + parameters + Possible parameters passed to the algorithms: + activity_key -> Attribute to use as activity + + Returns + ------- + dfg + DFG graph + """ + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + dfgs = map( + (lambda t: [(t[i - 2][activity_key], t[i - 1][activity_key], t[i][activity_key]) for i in range(2, len(t))]), + log) + return dict(Counter([dfg for lista in dfgs for dfg in lista])) diff --git a/pm4py/pm4py/algo/discovery/dfg/variants/native.py b/pm4py/pm4py/algo/discovery/dfg/variants/native.py new file mode 100644 index 0000000000000000000000000000000000000000..24efa7e5a80b785b747fbb760930a4343759ed6a --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/variants/native.py @@ -0,0 +1,63 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter + +from pm4py.util import constants, exec_utils +from pm4py.util import xes_constants as xes_util +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog, EventStream + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + WINDOW = "window" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def apply(log: Union[EventLog, EventStream], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple[str, str], int]: + return native(log, parameters=parameters) + + +def native(log: Union[EventLog, EventStream], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple[str, str], int]: + """ + Counts the number of directly follows occurrences, i.e. of the form <...a,b...>, in an event log. + + Parameters + ---------- + log + Trace log + parameters + Possible parameters passed to the algorithms: + activity_key -> Attribute to use as activity + + Returns + ------- + dfg + DFG graph + """ + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + window = exec_utils.get_param_value(Parameters.WINDOW, parameters, 1) + keep_once_per_case = exec_utils.get_param_value(Parameters.KEEP_ONCE_PER_CASE, parameters, False) + if keep_once_per_case: + dfgs = map((lambda t: set((t[i - window][activity_key], t[i][activity_key]) for i in range(window, len(t)))), + log) + else: + dfgs = map((lambda t: [(t[i - window][activity_key], t[i][activity_key]) for i in range(window, len(t))]), log) + return Counter([dfg for lista in dfgs for dfg in lista]) diff --git a/pm4py/pm4py/algo/discovery/dfg/variants/performance.py b/pm4py/pm4py/algo/discovery/dfg/variants/performance.py new file mode 100644 index 0000000000000000000000000000000000000000..c25981a4192a4d1ea2eb73b2a71d00970e9bb832 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/dfg/variants/performance.py @@ -0,0 +1,124 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from enum import Enum +from statistics import mean, median, stdev + +from pm4py.util import constants, exec_utils +from pm4py.util import xes_constants as xes_util +from pm4py.util.business_hours import BusinessHours +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog, EventStream + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + AGGREGATION_MEASURE = "aggregationMeasure" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def apply(log: Union[EventLog, EventStream], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple[str, str], float]: + return performance(log, parameters=parameters) + + +def performance(log: Union[EventLog, EventStream], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple[str, str], float]: + """ + Measure performance between couples of attributes in the DFG graph + + Parameters + ---------- + log + Log + parameters + Possible parameters passed to the algorithms: + aggregationMeasure -> performance aggregation measure (min, max, mean, median) + activity_key -> Attribute to use as activity + timestamp_key -> Attribute to use as timestamp + - Parameters.BUSINESS_HOURS => calculates the difference of time based on the business hours, not the total time. + Default: False + - Parameters.BUSINESS_HOURS_SLOTS => + work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business + hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. + [ + (7 * 60 * 60, 17 * 60 * 60), + ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), + ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60), + ] + meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + Returns + ------- + dfg + DFG graph + """ + + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_util.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_util.DEFAULT_TIMESTAMP_KEY) + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, parameters, "mean") + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + if business_hours: + dfgs0 = map((lambda t: [ + ((t[i - 1][activity_key], t[i][activity_key]), + max(0, BusinessHours(t[i - 1][timestamp_key], + t[i][start_timestamp_key], + business_hour_slots=business_hours_slots, workcalendar=workcalendar).get_seconds())) + for i in range(1, len(t))]), log) + else: + dfgs0 = map((lambda t: [ + ((t[i - 1][activity_key], t[i][activity_key]), + max(0, (t[i][start_timestamp_key] - t[i - 1][timestamp_key]).total_seconds())) + for i in range(1, len(t))]), log) + ret0 = {} + for el in dfgs0: + for couple in el: + if not couple[0] in ret0: + ret0[couple[0]] = [] + ret0[couple[0]].append(couple[1]) + ret = Counter() + for key in ret0: + if aggregation_measure == "median": + ret[key] = median(ret0[key]) + elif aggregation_measure == "min": + ret[key] = min(ret0[key]) + elif aggregation_measure == "max": + ret[key] = max(ret0[key]) + elif aggregation_measure == "stdev": + ret[key] = stdev(ret0[key]) if len(ret0[key]) > 1 else 0 + elif aggregation_measure == "sum": + ret[key] = sum(ret0[key]) + elif aggregation_measure == "raw_values": + ret[key] = ret0[key] + elif aggregation_measure == "all": + ret[key] = {"median": median(ret0[key]), "min": min(ret0[key]), "max": max(ret0[key]), + "stdev": stdev(ret0[key]) if len(ret0[key]) > 1 else 0, "sum": sum(ret0[key]), "mean": mean(ret0[key])} + else: + ret[key] = mean(ret0[key]) + + return ret diff --git a/pm4py/pm4py/algo/discovery/footprints/__init__.py b/pm4py/pm4py/algo/discovery/footprints/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1701e4489c39ea4a4bf1b81053a6154ddab67ff0 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints import log, petri, dfg, algorithm, tree diff --git a/pm4py/pm4py/algo/discovery/footprints/algorithm.py b/pm4py/pm4py/algo/discovery/footprints/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..f968ff3c31783d542387ded35507db8be47b6dec --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/algorithm.py @@ -0,0 +1,81 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints.log.variants import entire_event_log, trace_by_trace, entire_dataframe +from pm4py.algo.discovery.footprints.petri.variants import reach_graph +from pm4py.algo.discovery.footprints.dfg.variants import dfg +from pm4py.algo.discovery.footprints.tree.variants import bottomup +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.objects.process_tree.obj import ProcessTree +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +import pandas as pd +from typing import Optional, Dict, Any + + +class Variants(Enum): + ENTIRE_EVENT_LOG = entire_event_log + ENTIRE_DATAFRAME = entire_dataframe + TRACE_BY_TRACE = trace_by_trace + PETRI_REACH_GRAPH = reach_graph + PROCESS_TREE = bottomup + DFG = dfg + + +def apply(*args, variant=None, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discovers a footprint object from a log/model + + Parameters + -------------- + args + Positional arguments that describe the log/model + parameters + Parameters of the algorithm + variant + Variant of the algorithm, including: + - Variants.ENTIRE_EVENT_LOG + - Variants.TRACE_BY_TRACE + - Variants.PETRI_REACH_GRAPH + - Variants.DFG + + Returns + -------------- + footprints_obj + Footprints object + """ + if variant is None: + if type(args[0]) is EventLog: + variant = Variants.TRACE_BY_TRACE + elif type(args[0]) is PetriNet: + variant = Variants.PETRI_REACH_GRAPH + elif type(args[0]) is ProcessTree: + variant = Variants.PROCESS_TREE + elif isinstance(args[0], dict): + variant = Variants.DFG + + if pandas_utils.check_is_pandas_dataframe(args[0]): + variant = Variants.ENTIRE_DATAFRAME + + if variant is None: + return Exception("unsupported arguments") + + if variant in [Variants.TRACE_BY_TRACE, Variants.ENTIRE_EVENT_LOG, Variants.DFG, Variants.PROCESS_TREE, + Variants.ENTIRE_DATAFRAME]: + return exec_utils.get_variant(variant).apply(args[0], parameters=parameters) + elif variant in [Variants.PETRI_REACH_GRAPH]: + return exec_utils.get_variant(variant).apply(args[0], args[1], parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/footprints/dfg/__init__.py b/pm4py/pm4py/algo/discovery/footprints/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..f3092e8b685c46912efff052e511bfffb9745f0d --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/dfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints.dfg import variants diff --git a/pm4py/pm4py/algo/discovery/footprints/dfg/variants/__init__.py b/pm4py/pm4py/algo/discovery/footprints/dfg/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7ff9612ef1574741db2357002b722151f05fc2de --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/dfg/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints.dfg.variants import dfg diff --git a/pm4py/pm4py/algo/discovery/footprints/dfg/variants/dfg.py b/pm4py/pm4py/algo/discovery/footprints/dfg/variants/dfg.py new file mode 100644 index 0000000000000000000000000000000000000000..2640bb7507ac48dc62da2fefd6acedfc5b8ec559 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/dfg/variants/dfg.py @@ -0,0 +1,63 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.dfg import utils +from enum import Enum +from typing import Optional, Dict, Any, Tuple + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +def apply(dfg: Dict[Tuple[str, str], int], parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discovers a footprint object from a DFG + + Parameters + -------------- + dfg + DFG + parameters + Parameters of the algorithm + + Returns + -------------- + footprints_obj + Footprints object + """ + if parameters is None: + parameters = {} + + parallel = {(x, y) for (x, y) in dfg if (y, x) in dfg} + sequence = {(x, y) for (x, y) in dfg if not (y, x) in dfg} + # replace this if needed + start_activities = set(utils.dfg_utils.infer_start_activities(dfg)) + # replace this if needed + end_activities = set(utils.dfg_utils.infer_end_activities(dfg)) + activities = set(utils.dfg_utils.get_activities_from_dfg(dfg)) + + return {Outputs.SEQUENCE.value: sequence, Outputs.PARALLEL.value: parallel, + Outputs.START_ACTIVITIES.value: start_activities, Outputs.END_ACTIVITIES.value: end_activities, Outputs.ACTIVITIES.value: activities} diff --git a/pm4py/pm4py/algo/discovery/footprints/log/__init__.py b/pm4py/pm4py/algo/discovery/footprints/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..52050539f6fba27f9fb87ae098a70ef71d6e9e98 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints.log import variants diff --git a/pm4py/pm4py/algo/discovery/footprints/log/variants/__init__.py b/pm4py/pm4py/algo/discovery/footprints/log/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..68388e78fa80dbac3df0f4db012fdb9f23aeb2a3 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/log/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints.log.variants import entire_event_log, trace_by_trace, entire_dataframe diff --git a/pm4py/pm4py/algo/discovery/footprints/log/variants/entire_dataframe.py b/pm4py/pm4py/algo/discovery/footprints/log/variants/entire_dataframe.py new file mode 100644 index 0000000000000000000000000000000000000000..a1bc0674c6a63bb8f6429cce3dcb17f13ab9f446 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/log/variants/entire_dataframe.py @@ -0,0 +1,110 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import xes_constants +from pm4py.util import constants +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics +from pm4py.util import exec_utils, pandas_utils +from pm4py.algo.discovery.causal import algorithm as causal_discovery +from enum import Enum +from typing import Optional, Dict, Any, Union +import pandas as pd + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +class Parameters(Enum): + SORT_REQUIRED = "sort_required" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + INDEX_KEY = "index_key" + + +DEFAULT_SORT_REQUIRED = True +DEFAULT_INDEX_KEY = "@@index" + + +def apply(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Any]: + """ + Discovers a footprint object from a dataframe + (the footprints of the dataframe are returned) + + Parameters + -------------- + df + Dataframe + parameters + Parameters of the algorithm + + Returns + -------------- + footprints_obj + Footprints object + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + caseid_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + start_timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + None) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + sort_required = exec_utils.get_param_value(Parameters.SORT_REQUIRED, parameters, DEFAULT_SORT_REQUIRED) + index_key = exec_utils.get_param_value(Parameters.INDEX_KEY, parameters, DEFAULT_INDEX_KEY) + + df = df[[caseid_key, activity_key, timestamp_key]] + if sort_required: + df = pandas_utils.insert_index(df, index_key) + if start_timestamp_key is not None: + df = df.sort_values([caseid_key, start_timestamp_key, timestamp_key, index_key]) + else: + df = df.sort_values([caseid_key, timestamp_key, index_key]) + + grouped_df = df.groupby(caseid_key) + dfg = df_statistics.get_dfg_graph(df, measure="frequency", activity_key=activity_key, case_id_glue=caseid_key, + timestamp_key=timestamp_key, sort_caseid_required=False, + sort_timestamp_along_case_id=False, start_timestamp_key=start_timestamp_key) + activities = set(pandas_utils.format_unique(df[activity_key].unique())) + start_activities = set(pandas_utils.format_unique(grouped_df.first()[activity_key].unique())) + end_activities = set(pandas_utils.format_unique(grouped_df.last()[activity_key].unique())) + + parallel = {(x, y) for (x, y) in dfg if (y, x) in dfg} + sequence = set(causal_discovery.apply(dfg, causal_discovery.Variants.CAUSAL_ALPHA)) + + ret = {} + ret[Outputs.DFG.value] = dfg + ret[Outputs.SEQUENCE.value] = sequence + ret[Outputs.PARALLEL.value] = parallel + ret[Outputs.ACTIVITIES.value] = activities + ret[Outputs.START_ACTIVITIES.value] = start_activities + ret[Outputs.END_ACTIVITIES.value] = end_activities + ret[Outputs.MIN_TRACE_LENGTH.value] = int(grouped_df.size().min()) + + return ret diff --git a/pm4py/pm4py/algo/discovery/footprints/log/variants/entire_event_log.py b/pm4py/pm4py/algo/discovery/footprints/log/variants/entire_event_log.py new file mode 100644 index 0000000000000000000000000000000000000000..d90e81e8dc72d43269f65a264df2fdcf17bf49dd --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/log/variants/entire_event_log.py @@ -0,0 +1,83 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import xes_constants +from pm4py.util import constants +from pm4py.algo.discovery.dfg import algorithm as dfg_discovery +from pm4py.algo.discovery.causal import algorithm as causal_discovery +from pm4py.statistics.start_activities.log import get as get_start_activities +from pm4py.statistics.end_activities.log import get as get_end_activities +from pm4py.objects.conversion.log import converter +from pm4py.util import exec_utils +from enum import Enum +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Any]: + """ + Discovers a footprint object from an event log + (the footprints of the event log are returned) + + Parameters + -------------- + log + Log + parameters + Parameters of the algorithm: + - Parameters.ACTIVITY_KEY + + Returns + -------------- + footprints_obj + Footprints object + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + + log = converter.apply(log, variant=converter.TO_EVENT_LOG, parameters=parameters) + + dfg = dfg_discovery.apply(log, parameters=parameters) + parallel = {(x, y) for (x, y) in dfg if (y, x) in dfg} + sequence = set(causal_discovery.apply(dfg, causal_discovery.Variants.CAUSAL_ALPHA)) + + start_activities = set(get_start_activities.get_start_activities(log, parameters=parameters)) + end_activities = set(get_end_activities.get_end_activities(log, parameters=parameters)) + activities = set(y[activity_key] for x in log for y in x) + + return {Outputs.DFG.value: dfg, Outputs.SEQUENCE.value: sequence, Outputs.PARALLEL.value: parallel, + Outputs.START_ACTIVITIES.value: start_activities, Outputs.END_ACTIVITIES.value: end_activities, + Outputs.ACTIVITIES.value: activities, + Outputs.MIN_TRACE_LENGTH.value: min(len(x) for x in log) if len(log) > 0 else 0} diff --git a/pm4py/pm4py/algo/discovery/footprints/log/variants/trace_by_trace.py b/pm4py/pm4py/algo/discovery/footprints/log/variants/trace_by_trace.py new file mode 100644 index 0000000000000000000000000000000000000000..c3cfd6ce4174f04df019749b791ccc1db2dbca3f --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/log/variants/trace_by_trace.py @@ -0,0 +1,89 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import constants +from pm4py.algo.discovery.dfg import algorithm as dfg_discovery +from pm4py.objects.conversion.log import converter +from pm4py.util import xes_constants +from pm4py.util import exec_utils +from enum import Enum +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def apply(log, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Any]: + """ + Discovers a footprint object from an event log + (the footprints are returned case-by-case) + + Parameters + -------------- + log + Log + parameters + Parameters of the algorithm: + - Parameters.ACTIVITY_KEY + + Returns + -------------- + footprints_obj + List of footprints for the cases of the log + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + + log = converter.apply(log, variant=converter.TO_EVENT_LOG, parameters=parameters) + + ret = [] + + for trace in log: + dfg = dfg_discovery.apply(EventLog([trace]), parameters=parameters) + parallel = {(x, y) for (x, y) in dfg if (y, x) in dfg} + sequence = {(x, y) for (x, y) in dfg if not (y, x) in dfg} + trace = tuple(x[activity_key] for x in trace) + activities = set(trace) + if len(trace) > 0: + start_activities = {trace[0]} + end_activities = {trace[-1]} + else: + start_activities = set() + end_activities = set() + + ret.append( + {Outputs.DFG.value: dfg, Outputs.SEQUENCE.value: sequence, Outputs.PARALLEL.value: parallel, Outputs.ACTIVITIES.value: activities, + Outputs.START_ACTIVITIES.value: start_activities, Outputs.END_ACTIVITIES.value: end_activities, + Outputs.MIN_TRACE_LENGTH.value: len(trace), Outputs.TRACE.value: trace}) + + return ret diff --git a/pm4py/pm4py/algo/discovery/footprints/petri/__init__.py b/pm4py/pm4py/algo/discovery/footprints/petri/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2b3cf91f288779c29e02ae200ed8625c1fe1fbaf --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/petri/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints.petri import variants diff --git a/pm4py/pm4py/algo/discovery/footprints/petri/variants/__init__.py b/pm4py/pm4py/algo/discovery/footprints/petri/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..dad8a46123df349c8d7754e61102480af551cc28 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/petri/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints.petri.variants import reach_graph diff --git a/pm4py/pm4py/algo/discovery/footprints/petri/variants/reach_graph.py b/pm4py/pm4py/algo/discovery/footprints/petri/variants/reach_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..92bf7418641af1b4976d4f57150cb8ca6e333f9f --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/petri/variants/reach_graph.py @@ -0,0 +1,101 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.utils import reachability_graph +import itertools +from enum import Enum +from typing import Optional, Dict, Any +from pm4py.objects.petri_net.obj import PetriNet, Marking + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +def findsubsets(s, n): + return list(itertools.combinations(s, n)) + + +def apply(net: PetriNet, im: Marking, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discovers a footprint object from a Petri net + + Parameters + -------------- + net + Petri net + im + Initial marking + parameters + Parameters of the algorithm + + Returns + -------------- + footprints_obj + Footprints object + """ + if parameters is None: + parameters = {} + + incoming_transitions, outgoing_transitions, eventually_enabled = reachability_graph.marking_flow_petri(net, im, + return_eventually_enabled=True, + parameters=parameters) + + sequence = set() + + s1 = set() + s2 = set() + + for m in outgoing_transitions: + input_trans = set(x for x in incoming_transitions[m] if x.label is not None) + output_trans = set(x for x in outgoing_transitions[m].keys() if x.label is not None) + ev_en = set(x for x in eventually_enabled[m]) + two_sets = findsubsets(output_trans, 2) + + for (x, y) in two_sets: + s1.add((x, y)) + s1.add((y, x)) + + for t1 in input_trans: + for t2 in ev_en: + sequence.add((t1, t2)) + for t2 in output_trans: + s2.add((t1, t2)) + + parallel = {(x, y) for (x, y) in s2 if (y, x) in s2 and (x, y) in s1} + sequence = {(x, y) for (x, y) in sequence if not (x, y) in parallel} + + parallel = {(x.label, y.label) for (x, y) in parallel} + sequence = {(x.label, y.label) for (x, y) in sequence} + + par_els = {(x[0], x[1]) for x in sequence if (x[1], x[0]) in sequence} + for el in par_els: + parallel.add(el) + sequence.remove(el) + + activities = set(x.label for x in net.transitions if x.label is not None) + start_activities = set(x.label for x in eventually_enabled[im]) + + return {Outputs.SEQUENCE.value: sequence, Outputs.PARALLEL.value: parallel, Outputs.ACTIVITIES.value: activities, Outputs.START_ACTIVITIES.value: start_activities} diff --git a/pm4py/pm4py/algo/discovery/footprints/tree/__init__.py b/pm4py/pm4py/algo/discovery/footprints/tree/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..031ff4a33c477b37c67144679d900c09d6dcccdd --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/tree/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints.tree import variants diff --git a/pm4py/pm4py/algo/discovery/footprints/tree/variants/__init__.py b/pm4py/pm4py/algo/discovery/footprints/tree/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b8557e97497fafe3359a1679511a5263f36b1486 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/tree/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.footprints.tree.variants import bottomup diff --git a/pm4py/pm4py/algo/discovery/footprints/tree/variants/bottomup.py b/pm4py/pm4py/algo/discovery/footprints/tree/variants/bottomup.py new file mode 100644 index 0000000000000000000000000000000000000000..a06ac7752cc8172bbd107599458cb1f63504a5e1 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/footprints/tree/variants/bottomup.py @@ -0,0 +1,429 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree.obj import Operator +from pm4py.objects.process_tree.utils import bottomup as bottomup_disc +from copy import copy + +from enum import Enum +from typing import Optional, Dict, Any +from pm4py.objects.process_tree.obj import ProcessTree + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +START_ACTIVITIES = Outputs.START_ACTIVITIES.value +END_ACTIVITIES = Outputs.END_ACTIVITIES.value +ACTIVITIES = Outputs.ACTIVITIES.value +SKIPPABLE = Outputs.SKIPPABLE.value +SEQUENCE = Outputs.SEQUENCE.value +PARALLEL = Outputs.PARALLEL.value +ACTIVITIES_ALWAYS_HAPPENING = Outputs.ACTIVITIES_ALWAYS_HAPPENING.value + + +def fix_fp(sequence, parallel): + """ + Fix footprints + + Parameters + -------------- + sequence + Sequence + parallel + Parallel + + Returns + ------------- + sequence + Sequence + parallel + Parallel + """ + sequence = sequence.difference(parallel) + + par_els = {(x[0], x[1]) for x in sequence if (x[1], x[0]) in sequence} + for el in par_els: + parallel.add(el) + sequence.remove(el) + + return sequence, parallel + + +def get_footprints_leaf(node, footprints_dictio): + """ + Gets the footprints for a leaf node + + Parameters + --------------- + node + Node + footprints_dictio + Dictionary of footprints of the process tree + + Returns + --------------- + footprints + Footprints of the leaf node + """ + if node.label is None: + return {START_ACTIVITIES: set(), END_ACTIVITIES: set(), ACTIVITIES: set(), SKIPPABLE: True, SEQUENCE: set(), + PARALLEL: set(), ACTIVITIES_ALWAYS_HAPPENING: set()} + else: + return {START_ACTIVITIES: set([node.label]), END_ACTIVITIES: set([node.label]), ACTIVITIES: set([node.label]), + SKIPPABLE: False, SEQUENCE: set(), + PARALLEL: set(), ACTIVITIES_ALWAYS_HAPPENING: set([node.label])} + + +def get_footprints_xor(node, footprints_dictio): + """ + Gets the footprints for the XOR node + + Parameters + --------------- + node + Node + footprints_dictio + Dictionary of footprints of the process tree + + Returns + --------------- + footprints + Footprints of the XOR node + """ + start_activities = set() + end_activities = set() + activities = set() + skippable = False + sequence = set() + parallel = set() + activities_always_happening = set() + + if node.children: + activities_always_happening = copy(footprints_dictio[node.children[0]][ACTIVITIES_ALWAYS_HAPPENING]) + + for n0 in node.children: + n = footprints_dictio[n0] + start_activities = start_activities.union(n[START_ACTIVITIES]) + end_activities = end_activities.union(n[END_ACTIVITIES]) + activities = activities.union(n[ACTIVITIES]) + skippable = skippable or n[SKIPPABLE] + sequence = sequence.union(n[SEQUENCE]) + parallel = parallel.union(n[PARALLEL]) + if not n[SKIPPABLE]: + activities_always_happening = activities_always_happening.intersection(n[ACTIVITIES_ALWAYS_HAPPENING]) + else: + activities_always_happening = set() + + sequence, parallel = fix_fp(sequence, parallel) + + return {START_ACTIVITIES: start_activities, END_ACTIVITIES: end_activities, ACTIVITIES: activities, + SKIPPABLE: skippable, SEQUENCE: sequence, PARALLEL: parallel, + ACTIVITIES_ALWAYS_HAPPENING: activities_always_happening} + + +def get_footprints_parallel(node, footprints_dictio): + """ + Gets the footprints for the parallel node + + Parameters + --------------- + node + Node + footprints_dictio + Dictionary of footprints of the process tree + + Returns + --------------- + footprints + Footprints of the parallel node + """ + start_activities = set() + end_activities = set() + activities = set() + skippable = True + sequence = set() + parallel = set() + activities_always_happening = set() + + for n0 in node.children: + n = footprints_dictio[n0] + start_activities = start_activities.union(n[START_ACTIVITIES]) + end_activities = end_activities.union(n[END_ACTIVITIES]) + activities = activities.union(n[ACTIVITIES]) + skippable = skippable and n[SKIPPABLE] + sequence = sequence.union(n[SEQUENCE]) + parallel = parallel.union(n[PARALLEL]) + if not n[SKIPPABLE]: + activities_always_happening = activities_always_happening.union(n[ACTIVITIES_ALWAYS_HAPPENING]) + + i = 0 + while i < len(node.children): + acti_i = list(footprints_dictio[node.children[i]][ACTIVITIES]) + j = i + 1 + while j < len(node.children): + acti_j = list(footprints_dictio[node.children[j]][ACTIVITIES]) + for a1 in acti_i: + for a2 in acti_j: + parallel.add((a1, a2)) + parallel.add((a2, a1)) + j = j + 1 + i = i + 1 + + sequence, parallel = fix_fp(sequence, parallel) + + return {START_ACTIVITIES: start_activities, END_ACTIVITIES: end_activities, ACTIVITIES: activities, + SKIPPABLE: skippable, SEQUENCE: sequence, PARALLEL: parallel, + ACTIVITIES_ALWAYS_HAPPENING: activities_always_happening} + + +def get_footprints_sequence(node, footprints_dictio): + """ + Gets the footprints for the sequence + + Parameters + --------------- + node + Node + footprints_dictio + Dictionary of footprints of the process tree + + Returns + --------------- + footprints + Footprints of the sequence node + """ + start_activities = set() + end_activities = set() + activities = set() + skippable = True + sequence = set() + parallel = set() + activities_always_happening = set() + + for n0 in node.children: + n = footprints_dictio[n0] + skippable = skippable and n[SKIPPABLE] + sequence = sequence.union(n[SEQUENCE]) + parallel = parallel.union(n[PARALLEL]) + activities = activities.union(n[ACTIVITIES]) + if not n[SKIPPABLE]: + activities_always_happening = activities_always_happening.union(n[ACTIVITIES_ALWAYS_HAPPENING]) + + # adds the footprints + i = 0 + while i < len(node.children) - 1: + n0 = footprints_dictio[node.children[i]] + j = i + 1 + while j < len(node.children): + n1 = footprints_dictio[node.children[j]] + n0_end_act = n0[END_ACTIVITIES] + n1_start_act = n1[START_ACTIVITIES] + for a1 in n0_end_act: + for a2 in n1_start_act: + sequence.add((a1, a2)) + if not n1[SKIPPABLE]: + break + j = j + 1 + i = i + 1 + + # adds the start activities + i = 0 + while i < len(node.children): + n = footprints_dictio[node.children[i]] + start_activities = start_activities.union(n[START_ACTIVITIES]) + if not n[SKIPPABLE]: + break + i = i + 1 + + # adds the end activities + i = len(node.children) - 1 + while i >= 0: + n = footprints_dictio[node.children[i]] + end_activities = end_activities.union(n[END_ACTIVITIES]) + if not n[SKIPPABLE]: + break + i = i - 1 + + sequence, parallel = fix_fp(sequence, parallel) + + return {START_ACTIVITIES: start_activities, END_ACTIVITIES: end_activities, ACTIVITIES: activities, + SKIPPABLE: skippable, SEQUENCE: sequence, PARALLEL: parallel, + ACTIVITIES_ALWAYS_HAPPENING: activities_always_happening} + + +def get_footprints_loop(node, footprints_dictio): + """ + Gets the footprints for the loop + + Parameters + --------------- + node + Node + footprints_dictio + Dictionary of footprints of the process tree + + Returns + --------------- + footprints + Footprints of the loop node + """ + start_activities = set() + end_activities = set() + activities = set() + sequence = set() + parallel = set() + activities_always_happening = set() + + for n0 in node.children: + n = footprints_dictio[n0] + sequence = sequence.union(n[SEQUENCE]) + parallel = parallel.union(n[PARALLEL]) + activities = activities.union(n[ACTIVITIES]) + + do = footprints_dictio[node.children[0]] + redo = footprints_dictio[node.children[1]] + + skippable = do[SKIPPABLE] + + if not do[SKIPPABLE]: + activities_always_happening = copy(do[ACTIVITIES_ALWAYS_HAPPENING]) + + start_activities = start_activities.union(do[START_ACTIVITIES]) + if do[SKIPPABLE]: + start_activities = start_activities.union(redo[START_ACTIVITIES]) + + end_activities = end_activities.union(do[END_ACTIVITIES]) + if do[SKIPPABLE]: + end_activities = end_activities.union(redo[END_ACTIVITIES]) + + for a1 in do[END_ACTIVITIES]: + for a2 in redo[START_ACTIVITIES]: + sequence.add((a1, a2)) + + for a1 in redo[END_ACTIVITIES]: + for a2 in do[START_ACTIVITIES]: + sequence.add((a1, a2)) + + if do[SKIPPABLE]: + for a1 in redo[END_ACTIVITIES]: + for a2 in redo[START_ACTIVITIES]: + sequence.add((a1, a2)) + + if redo[SKIPPABLE]: + for a1 in do[END_ACTIVITIES]: + for a2 in do[START_ACTIVITIES]: + sequence.add((a1, a2)) + + sequence, parallel = fix_fp(sequence, parallel) + + return {START_ACTIVITIES: start_activities, END_ACTIVITIES: end_activities, ACTIVITIES: activities, + SKIPPABLE: skippable, SEQUENCE: sequence, PARALLEL: parallel, + ACTIVITIES_ALWAYS_HAPPENING: activities_always_happening} + + +def get_footprints(node, footprints_dictio): + """ + Gets the footprints for a node (having the history of the child nodes) + + Parameters + -------------- + node + Node of the tree + footprints_dictio + Dictionary of footprints of the process tree + + Returns + -------------- + footprints + Footprints of the node (having the history of the child nodes) + """ + if len(node.children) == 0: + return get_footprints_leaf(node, footprints_dictio) + elif node.operator == Operator.XOR: + return get_footprints_xor(node, footprints_dictio) + elif node.operator == Operator.PARALLEL or node.operator == Operator.OR: + return get_footprints_parallel(node, footprints_dictio) + elif node.operator == Operator.SEQUENCE: + return get_footprints_sequence(node, footprints_dictio) + elif node.operator == Operator.LOOP: + return get_footprints_loop(node, footprints_dictio) + + +def get_all_footprints(tree, parameters=None): + """ + Gets all the footprints for the nodes of the tree + + Parameters + ----------------- + tree + Process tree + parameters + Parameters of the algorithm + + Returns + ---------------- + dictio + Dictionary that associates a footprint to each node of the tree + """ + if parameters is None: + parameters = {} + + # for each node of the bottom up, proceed to getting the footprints + bottomup = bottomup_disc.get_bottomup_nodes(tree, parameters=parameters) + footprints_dictio = {} + for i in range(len(bottomup)): + footprints_dictio[bottomup[i]] = get_footprints(bottomup[i], footprints_dictio) + + return footprints_dictio + + +def apply(tree: ProcessTree, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Footprints detection on process tree + + Parameters + ----------------- + tree + Process tree + parameters + Parameters of the algorithm + + Returns + ----------------- + footprints + Footprints + """ + if parameters is None: + parameters = {} + + all_footprints = get_all_footprints(tree, parameters=parameters) + root_node_footprints = all_footprints[tree] + + min_trace_length = bottomup_disc.get_min_trace_length(tree, parameters=parameters) + root_node_footprints[Outputs.MIN_TRACE_LENGTH.value] = min_trace_length + + return root_node_footprints diff --git a/pm4py/pm4py/algo/discovery/heuristics/__init__.py b/pm4py/pm4py/algo/discovery/heuristics/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7ec9b3ff130d9126a8af0aef35e5299741d127c7 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/heuristics/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.heuristics import variants, algorithm diff --git a/pm4py/pm4py/algo/discovery/heuristics/algorithm.py b/pm4py/pm4py/algo/discovery/heuristics/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..4353b3499d5dd1caddf4f4cbd997adc16e023cf4 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/heuristics/algorithm.py @@ -0,0 +1,211 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.algo.discovery.heuristics.variants import classic, plusplus +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.objects.heuristics_net.obj import HeuristicsNet +from pm4py.util import exec_utils, pandas_utils +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from pm4py.objects.petri_net.obj import PetriNet, Marking + + +class Variants(Enum): + CLASSIC = classic + PLUSPLUS = plusplus + + +CLASSIC = Variants.CLASSIC +DEFAULT_VARIANT = CLASSIC + +VERSIONS = {CLASSIC} + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None, variant=CLASSIC) -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using Heuristics Miner + + Parameters + ------------ + log + Event log + parameters + Possible parameters of the algorithm, + including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.DFG_PRE_CLEANING_NOISE_THRESH + - Parameters.LOOP_LENGTH_TWO_THRESH + variant + Variant of the algorithm: + - Variants.CLASSIC + - Variants.PLUSPLUS + + Returns + ------------ + net + Petri net + im + Initial marking + fm + Final marking + """ + if pandas_utils.check_is_pandas_dataframe(log): + return exec_utils.get_variant(variant).apply_pandas(log, parameters=parameters) + + return exec_utils.get_variant(variant).apply(log_conversion.apply(log, variant=log_conversion.Variants.TO_EVENT_LOG, parameters=parameters), + parameters=parameters) + + +def apply_dfg(dfg: Dict[Tuple[str, str], int], activities=None, activities_occurrences=None, start_activities=None, end_activities=None, + parameters=None, variant=CLASSIC) -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using Heuristics Miner + + Parameters + ------------ + dfg + Directly-Follows Graph + activities + (If provided) list of activities of the log + activities_occurrences + (If provided) dictionary of activities occurrences + start_activities + (If provided) dictionary of start activities occurrences + end_activities + (If provided) dictionary of end activities occurrences + parameters + Possible parameters of the algorithm, + including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.DFG_PRE_CLEANING_NOISE_THRESH + - Parameters.LOOP_LENGTH_TWO_THRESH + variant + Variant of the algorithm: + - Variants.CLASSIC + + Returns + ------------ + net + Petri net + im + Initial marking + fm + Final marking + """ + return exec_utils.get_variant(variant).apply_dfg(dfg, activities=activities, + activities_occurrences=activities_occurrences, + start_activities=start_activities, end_activities=end_activities, + parameters=parameters) + + +def apply_heu(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None, variant=CLASSIC) -> HeuristicsNet: + """ + Discovers an Heuristics Net using Heuristics Miner + + Parameters + ------------ + log + Event log + parameters + Possible parameters of the algorithm, + including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.DFG_PRE_CLEANING_NOISE_THRESH + - Parameters.LOOP_LENGTH_TWO_THRESH + variant + Variant of the algorithm: + - Variants.CLASSIC + + Returns + ------------ + net + Petri net + im + Initial marking + fm + Final marking + """ + return exec_utils.get_variant(variant).apply_heu(log_conversion.apply(log, variant=log_conversion.Variants.TO_EVENT_LOG, parameters=parameters), parameters=parameters) + + +def apply_heu_dfg(dfg: Dict[Tuple[str, str], int], activities=None, activities_occurrences=None, start_activities=None, end_activities=None, + parameters=None, variant=CLASSIC) -> HeuristicsNet: + """ + Discovers an Heuristics Net using Heuristics Miner + + Parameters + ------------ + dfg + Directly-Follows Graph + activities + (If provided) list of activities of the log + activities_occurrences + (If provided) dictionary of activities occurrences + start_activities + (If provided) dictionary of start activities occurrences + end_activities + (If provided) dictionary of end activities occurrences + parameters + Possible parameters of the algorithm, + including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.DFG_PRE_CLEANING_NOISE_THRESH + - Parameters.LOOP_LENGTH_TWO_THRESH + variant + Variant of the algorithm: + - Variants.CLASSIC + + Returns + ------------ + net + Petri net + im + Initial marking + fm + Final marking + """ + return exec_utils.get_variant(variant).apply_heu_dfg(dfg, activities=activities, + activities_occurrences=activities_occurrences, + start_activities=start_activities, + end_activities=end_activities, + parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/heuristics/variants/__init__.py b/pm4py/pm4py/algo/discovery/heuristics/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..43a73466c9905f46380d67823ae8132b8873b5cd --- /dev/null +++ b/pm4py/pm4py/algo/discovery/heuristics/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.heuristics.variants import classic, plusplus diff --git a/pm4py/pm4py/algo/discovery/heuristics/variants/classic.py b/pm4py/pm4py/algo/discovery/heuristics/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..abe06cb8f1e719d06b5a3fb558d7b733bf9a1f22 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/heuristics/variants/classic.py @@ -0,0 +1,533 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import deepcopy +from enum import Enum + +from pm4py.algo.discovery.dfg import algorithm as dfg_alg +from pm4py.algo.filtering.dfg.dfg_filtering import clean_dfg_based_on_noise_thresh +from pm4py.objects.conversion.heuristics_net import converter as hn_conv_alg +from pm4py.objects.heuristics_net import defaults +from pm4py.objects.heuristics_net.node import Node +from pm4py.statistics.attributes.log import get as log_attributes +from pm4py.statistics.end_activities.log import get as log_ea_filter +from pm4py.statistics.start_activities.log import get as log_sa_filter +from pm4py.util import constants +from pm4py.util import exec_utils +from pm4py.util import xes_constants as xes +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +import pandas as pd +from pm4py.objects.heuristics_net.obj import HeuristicsNet + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + DEPENDENCY_THRESH = "dependency_thresh" + AND_MEASURE_THRESH = "and_measure_thresh" + MIN_ACT_COUNT = "min_act_count" + MIN_DFG_OCCURRENCES = "min_dfg_occurrences" + DFG_PRE_CLEANING_NOISE_THRESH = "dfg_pre_cleaning_noise_thresh" + LOOP_LENGTH_TWO_THRESH = "loop_length_two_thresh" + HEU_NET_DECORATION = "heu_net_decoration" + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using Heuristics Miner + + Parameters + ------------ + log + Event log + parameters + Possible parameters of the algorithm, + including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.DFG_PRE_CLEANING_NOISE_THRESH + - Parameters.LOOP_LENGTH_TWO_THRESH + + Returns + ------------ + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + + heu_net = apply_heu(log, parameters=parameters) + net, im, fm = hn_conv_alg.apply(heu_net, parameters=parameters) + + return net, im, fm + + +def apply_pandas(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using Heuristics Miner + + Parameters + ------------ + df + Pandas dataframe + parameters + Possible parameters of the algorithm, + including: activity_key, case_id_glue, timestamp_key, + dependency_thresh, and_measure_thresh, min_act_count, min_dfg_occurrences, dfg_pre_cleaning_noise_thresh, + loops_length_two_thresh + + Returns + ------------ + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + + heu_net = apply_heu_pandas(df, parameters=parameters) + + return hn_conv_alg.apply(heu_net, parameters=parameters) + + +def apply_dfg(dfg: Dict[Tuple[str, str], int], activities=None, activities_occurrences=None, start_activities=None, end_activities=None, + parameters: Optional[Dict[Any, Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using Heuristics Miner + + Parameters + ------------ + dfg + Directly-Follows Graph + activities + (If provided) list of activities of the log + activities_occurrences + (If provided) dictionary of activities occurrences + start_activities + (If provided) dictionary of start activities occurrences + end_activities + (If provided) dictionary of end activities occurrences + parameters + Possible parameters of the algorithm, + including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.DFG_PRE_CLEANING_NOISE_THRESH + - Parameters.LOOP_LENGTH_TWO_THRESH + + Returns + ------------ + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + + heu_net = apply_heu_dfg(dfg, activities=activities, activities_occurrences=activities_occurrences, + start_activities=start_activities, end_activities=end_activities, parameters=parameters) + net, im, fm = hn_conv_alg.apply(heu_net, parameters=parameters) + + return net, im, fm + + +def apply_heu(log: EventLog, parameters: Optional[Dict[Any, Any]] = None) -> HeuristicsNet: + """ + Discovers an Heuristics Net using Heuristics Miner + + Parameters + ------------ + log + Event log + parameters + Possible parameters of the algorithm, + including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.DFG_PRE_CLEANING_NOISE_THRESH + - Parameters.LOOP_LENGTH_TWO_THRESH + + Returns + ------------ + heu + Heuristics Net + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + heu_net_decoration = exec_utils.get_param_value(Parameters.HEU_NET_DECORATION, parameters, "frequency") + + start_activities = log_sa_filter.get_start_activities(log, parameters=parameters) + end_activities = log_ea_filter.get_end_activities(log, parameters=parameters) + activities_occurrences = log_attributes.get_attribute_values(log, activity_key, parameters=parameters) + activities = list(activities_occurrences.keys()) + dfg = dfg_alg.apply(log, parameters=parameters) + parameters_w2 = deepcopy(parameters) + parameters_w2["window"] = 2 + dfg_window_2 = dfg_alg.apply(log, parameters=parameters_w2) + freq_triples = dfg_alg.apply(log, parameters=parameters, variant=dfg_alg.Variants.FREQ_TRIPLES) + performance_dfg = None + if heu_net_decoration == "performance": + performance_dfg = dfg_alg.apply(log, variant=dfg_alg.Variants.PERFORMANCE, parameters=parameters) + + return apply_heu_dfg(dfg, activities=activities, activities_occurrences=activities_occurrences, + start_activities=start_activities, + end_activities=end_activities, dfg_window_2=dfg_window_2, freq_triples=freq_triples, + performance_dfg=performance_dfg, parameters=parameters) + + +def apply_heu_pandas(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> HeuristicsNet: + """ + Discovers an Heuristics Net using Heuristics Miner + + Parameters + ------------ + df + Pandas dataframe + parameters + Possible parameters of the algorithm, + including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.DFG_PRE_CLEANING_NOISE_THRESH + - Parameters.LOOP_LENGTH_TWO_THRESH + + Returns + ------------ + heu + Heuristics Net + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + None) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + + from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics, freq_triples as get_freq_triples + from pm4py.statistics.attributes.pandas import get as pd_attributes + from pm4py.statistics.start_activities.pandas import get as pd_sa_filter + from pm4py.statistics.end_activities.pandas import get as pd_ea_filter + + start_activities = pd_sa_filter.get_start_activities(df, parameters=parameters) + end_activities = pd_ea_filter.get_end_activities(df, parameters=parameters) + activities_occurrences = pd_attributes.get_attribute_values(df, activity_key, parameters=parameters) + activities = list(activities_occurrences.keys()) + heu_net_decoration = exec_utils.get_param_value(Parameters.HEU_NET_DECORATION, parameters, "frequency") + + if timestamp_key in df: + dfg = df_statistics.get_dfg_graph(df, case_id_glue=case_id_glue, + activity_key=activity_key, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key) + dfg_window_2 = df_statistics.get_dfg_graph(df, case_id_glue=case_id_glue, + activity_key=activity_key, timestamp_key=timestamp_key, window=2, + start_timestamp_key=start_timestamp_key) + frequency_triples = get_freq_triples.get_freq_triples(df, case_id_glue=case_id_glue, + activity_key=activity_key, + timestamp_key=timestamp_key) + + else: + dfg = df_statistics.get_dfg_graph(df, case_id_glue=case_id_glue, + activity_key=activity_key, sort_timestamp_along_case_id=False) + dfg_window_2 = df_statistics.get_dfg_graph(df, case_id_glue=case_id_glue, + activity_key=activity_key, sort_timestamp_along_case_id=False, + window=2) + frequency_triples = get_freq_triples.get_freq_triples(df, case_id_glue=case_id_glue, + activity_key=activity_key, + timestamp_key=timestamp_key, + sort_timestamp_along_case_id=False) + + performance_dfg = None + if heu_net_decoration == "performance": + performance_dfg = df_statistics.get_dfg_graph(df, case_id_glue=case_id_glue, + activity_key=activity_key, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key, + measure="performance") + + heu_net = apply_heu_dfg(dfg, activities=activities, activities_occurrences=activities_occurrences, + start_activities=start_activities, end_activities=end_activities, + dfg_window_2=dfg_window_2, + freq_triples=frequency_triples, performance_dfg=performance_dfg, parameters=parameters) + + return heu_net + + +def apply_heu_dfg(dfg, activities=None, activities_occurrences=None, start_activities=None, end_activities=None, + dfg_window_2=None, freq_triples=None, performance_dfg=None, parameters=None) -> HeuristicsNet: + """ + Discovers an Heuristics Net using Heuristics Miner + + Parameters + ------------ + dfg + Directly-Follows Graph + activities + (If provided) list of activities of the log + activities_occurrences + (If provided) dictionary of activities occurrences + start_activities + (If provided) dictionary of start activities occurrences + end_activities + (If provided) dictionary of end activities occurrences + dfg_window_2 + (If provided) DFG of window 2 + freq_triples + (If provided) Frequency triples + performance_dfg + (If provided) Performance DFG + parameters + Possible parameters of the algorithm, + including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.DFG_PRE_CLEANING_NOISE_THRESH + - Parameters.LOOP_LENGTH_TWO_THRESH + + Returns + ------------ + heu + Heuristics Net + """ + if parameters is None: + parameters = {} + + dependency_thresh = exec_utils.get_param_value(Parameters.DEPENDENCY_THRESH, parameters, + defaults.DEFAULT_DEPENDENCY_THRESH) + and_measure_thresh = exec_utils.get_param_value(Parameters.AND_MEASURE_THRESH, parameters, + defaults.DEFAULT_AND_MEASURE_THRESH) + min_act_count = exec_utils.get_param_value(Parameters.MIN_ACT_COUNT, parameters, defaults.DEFAULT_MIN_ACT_COUNT) + min_dfg_occurrences = exec_utils.get_param_value(Parameters.MIN_DFG_OCCURRENCES, parameters, + defaults.DEFAULT_MIN_DFG_OCCURRENCES) + dfg_pre_cleaning_noise_thresh = exec_utils.get_param_value(Parameters.DFG_PRE_CLEANING_NOISE_THRESH, parameters, + defaults.DEFAULT_DFG_PRE_CLEANING_NOISE_THRESH) + loops_length_two_thresh = exec_utils.get_param_value(Parameters.LOOP_LENGTH_TWO_THRESH, parameters, + defaults.DEFAULT_LOOP_LENGTH_TWO_THRESH) + heu_net = HeuristicsNet(dfg, activities=activities, activities_occurrences=activities_occurrences, + start_activities=start_activities, end_activities=end_activities, + dfg_window_2=dfg_window_2, + freq_triples=freq_triples, performance_dfg=performance_dfg) + heu_net = calculate(heu_net, dependency_thresh=dependency_thresh, and_measure_thresh=and_measure_thresh, + min_act_count=min_act_count, min_dfg_occurrences=min_dfg_occurrences, + dfg_pre_cleaning_noise_thresh=dfg_pre_cleaning_noise_thresh, + loops_length_two_thresh=loops_length_two_thresh) + + return heu_net + + +def calculate(heu_net, dependency_thresh=defaults.DEFAULT_DEPENDENCY_THRESH, + and_measure_thresh=defaults.DEFAULT_AND_MEASURE_THRESH, min_act_count=defaults.DEFAULT_MIN_ACT_COUNT, + min_dfg_occurrences=defaults.DEFAULT_MIN_DFG_OCCURRENCES, + dfg_pre_cleaning_noise_thresh=defaults.DEFAULT_DFG_PRE_CLEANING_NOISE_THRESH, + loops_length_two_thresh=defaults.DEFAULT_LOOP_LENGTH_TWO_THRESH, parameters=None): + """ + Calculate the dependency matrix, populate the nodes + + Parameters + ------------- + dependency_thresh + (Optional) dependency threshold + and_measure_thresh + (Optional) AND measure threshold + min_act_count + (Optional) minimum number of occurrences of an activity + min_dfg_occurrences + (Optional) minimum dfg occurrences + dfg_pre_cleaning_noise_thresh + (Optional) DFG pre cleaning noise threshold + loops_length_two_thresh + (Optional) loops length two threshold + parameters + Other parameters of the algorithm + """ + if parameters is None: + parameters = {} + heu_net.min_dfg_occurrences = min_dfg_occurrences + heu_net.dependency_matrix = None + heu_net.dependency_matrix = {} + heu_net.dfg_matrix = None + heu_net.dfg_matrix = {} + heu_net.performance_matrix = None + heu_net.performance_matrix = {} + if dfg_pre_cleaning_noise_thresh > 0.0: + heu_net.dfg = clean_dfg_based_on_noise_thresh(heu_net.dfg, heu_net.activities, dfg_pre_cleaning_noise_thresh, + parameters=parameters) + if heu_net.dfg_window_2 is not None: + for el in heu_net.dfg_window_2: + act1 = el[0] + act2 = el[1] + value = heu_net.dfg_window_2[el] + if act1 not in heu_net.dfg_window_2_matrix: + heu_net.dfg_window_2_matrix[act1] = {} + heu_net.dfg_window_2_matrix[act1][act2] = value + if heu_net.freq_triples is not None: + for el in heu_net.freq_triples: + act1 = el[0] + act2 = el[1] + act3 = el[2] + value = heu_net.freq_triples[el] + # avoid to consider self-loops + if act1 == act3 and not act1 == act2: + if act1 not in heu_net.freq_triples_matrix: + heu_net.freq_triples_matrix[act1] = {} + heu_net.freq_triples_matrix[act1][act2] = value + for el in heu_net.dfg: + act1 = el[0] + act2 = el[1] + value = heu_net.dfg[el] + perf_value = heu_net.performance_dfg[el] if heu_net.performance_dfg is not None else heu_net.dfg[el] + if act1 not in heu_net.dependency_matrix: + heu_net.dependency_matrix[act1] = {} + heu_net.dfg_matrix[act1] = {} + heu_net.performance_matrix[act1] = {} + heu_net.dfg_matrix[act1][act2] = value + heu_net.performance_matrix[act1][act2] = perf_value + if not act1 == act2: + inv_couple = (act2, act1) + c1 = value + if inv_couple in heu_net.dfg: + c2 = heu_net.dfg[inv_couple] + dep = (c1 - c2) / (c1 + c2 + 1) + else: + dep = c1 / (c1 + 1) + else: + dep = value / (value + 1) + heu_net.dependency_matrix[act1][act2] = dep + for n1 in heu_net.dependency_matrix: + for n2 in heu_net.dependency_matrix[n1]: + condition1 = n1 in heu_net.activities_occurrences and heu_net.activities_occurrences[n1] >= min_act_count + condition2 = n2 in heu_net.activities_occurrences and heu_net.activities_occurrences[n2] >= min_act_count + condition3 = heu_net.dfg_matrix[n1][n2] >= min_dfg_occurrences + condition4 = heu_net.dependency_matrix[n1][n2] >= dependency_thresh + condition = condition1 and condition2 and condition3 and condition4 + if condition: + if n1 not in heu_net.nodes: + heu_net.nodes[n1] = Node(heu_net, n1, heu_net.activities_occurrences[n1], + is_start_node=(n1 in heu_net.start_activities), + is_end_node=(n1 in heu_net.end_activities), + default_edges_color=heu_net.default_edges_color[0], + node_type=heu_net.node_type, net_name=heu_net.net_name[0], + nodes_dictionary=heu_net.nodes) + if n2 not in heu_net.nodes: + heu_net.nodes[n2] = Node(heu_net, n2, heu_net.activities_occurrences[n2], + is_start_node=(n2 in heu_net.start_activities), + is_end_node=(n2 in heu_net.end_activities), + default_edges_color=heu_net.default_edges_color[0], + node_type=heu_net.node_type, net_name=heu_net.net_name[0], + nodes_dictionary=heu_net.nodes) + + repr_value = heu_net.performance_matrix[n1][n2] + heu_net.nodes[n1].add_output_connection(heu_net.nodes[n2], heu_net.dependency_matrix[n1][n2], + heu_net.dfg_matrix[n1][n2], repr_value=repr_value) + heu_net.nodes[n2].add_input_connection(heu_net.nodes[n1], heu_net.dependency_matrix[n1][n2], + heu_net.dfg_matrix[n1][n2], repr_value=repr_value) + for node in heu_net.nodes: + heu_net.nodes[node].calculate_and_measure_out(and_measure_thresh=and_measure_thresh) + heu_net.nodes[node].calculate_and_measure_in(and_measure_thresh=and_measure_thresh) + heu_net.nodes[node].calculate_loops_length_two(heu_net.dfg_matrix, heu_net.freq_triples_matrix, + loops_length_two_thresh=loops_length_two_thresh) + nodes = list(heu_net.nodes.keys()) + added_loops = set() + for n1 in nodes: + for n2 in heu_net.nodes[n1].loop_length_two: + if n1 in heu_net.dfg_matrix and n2 in heu_net.dfg_matrix[n1] and heu_net.dfg_matrix[n1][ + n2] >= min_dfg_occurrences and n1 in heu_net.activities_occurrences and heu_net.activities_occurrences[ + n1] >= min_act_count and n2 in heu_net.activities_occurrences and heu_net.activities_occurrences[ + n2] >= min_act_count: + if not ((n1 in heu_net.dependency_matrix and n2 in heu_net.dependency_matrix[n1] and + heu_net.dependency_matrix[n1][n2] >= dependency_thresh) or ( + n2 in heu_net.dependency_matrix and n1 in heu_net.dependency_matrix[n2] and + heu_net.dependency_matrix[n2][n1] >= dependency_thresh)): + if n2 not in heu_net.nodes: + heu_net.nodes[n2] = Node(heu_net, n2, heu_net.activities_occurrences[n2], + is_start_node=(n2 in heu_net.start_activities), + is_end_node=(n2 in heu_net.end_activities), + default_edges_color=heu_net.default_edges_color[0], + node_type=heu_net.node_type, net_name=heu_net.net_name[0], + nodes_dictionary=heu_net.nodes) + v_n1_n2 = heu_net.dfg_matrix[n1][n2] if n1 in heu_net.dfg_matrix and n2 in heu_net.dfg_matrix[ + n1] else 0 + v_n2_n1 = heu_net.dfg_matrix[n2][n1] if n2 in heu_net.dfg_matrix and n1 in heu_net.dfg_matrix[ + n2] else 0 + + if (n1, n2) not in added_loops: + repr_value = heu_net.performance_matrix[n1][n2] if n1 in heu_net.performance_matrix and n2 in \ + heu_net.performance_matrix[n1] else 0 + added_loops.add((n1, n2)) + heu_net.nodes[n1].add_output_connection(heu_net.nodes[n2], 0, + v_n1_n2, repr_value=repr_value) + heu_net.nodes[n2].add_input_connection(heu_net.nodes[n1], 0, + v_n2_n1, repr_value=repr_value) + + if (n2, n1) not in added_loops: + repr_value = heu_net.performance_matrix[n2][n1] if n2 in heu_net.performance_matrix and n1 in \ + heu_net.performance_matrix[n2] else 0 + added_loops.add((n2, n1)) + heu_net.nodes[n2].add_output_connection(heu_net.nodes[n1], 0, + v_n2_n1, repr_value=repr_value) + heu_net.nodes[n1].add_input_connection(heu_net.nodes[n2], 0, + v_n1_n2, repr_value=repr_value) + if len(heu_net.nodes) == 0: + for act in heu_net.activities: + heu_net.nodes[act] = Node(heu_net, act, heu_net.activities_occurrences[act], + is_start_node=(act in heu_net.start_activities), + is_end_node=(act in heu_net.end_activities), + default_edges_color=heu_net.default_edges_color[0], + node_type=heu_net.node_type, net_name=heu_net.net_name[0], + nodes_dictionary=heu_net.nodes) + + return heu_net diff --git a/pm4py/pm4py/algo/discovery/heuristics/variants/plusplus.py b/pm4py/pm4py/algo/discovery/heuristics/variants/plusplus.py new file mode 100644 index 0000000000000000000000000000000000000000..a40b5ba4c9ea7bd2d2b4a685a6ab3fd297b2081e --- /dev/null +++ b/pm4py/pm4py/algo/discovery/heuristics/variants/plusplus.py @@ -0,0 +1,573 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import copy +from enum import Enum +from typing import Optional, Dict, Any, Tuple + +import pandas as pd + +from pm4py.algo.discovery.dfg import algorithm as dfg_alg +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics +from pm4py.objects.conversion.heuristics_net import converter as hn_conv_alg +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.heuristics_net import defaults +from pm4py.objects.heuristics_net.obj import HeuristicsNet +from pm4py.objects.heuristics_net.node import Node +from pm4py.objects.log.obj import EventLog +from pm4py.objects.log.util import interval_lifecycle +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.statistics.attributes.log import get as log_attributes +from pm4py.statistics.attributes.pandas import get as pd_attributes +from pm4py.statistics.concurrent_activities.log import get as conc_act_get +from pm4py.statistics.concurrent_activities.pandas import get as pd_conc_act +from pm4py.statistics.end_activities.log import get as log_ea +from pm4py.statistics.end_activities.pandas import get as pd_ea +from pm4py.statistics.eventually_follows.log import get as efg_get +from pm4py.statistics.eventually_follows.pandas import get as pd_efg +from pm4py.statistics.service_time.log import get as soj_get +from pm4py.statistics.service_time.pandas import get as pd_soj_time +from pm4py.statistics.start_activities.log import get as log_sa +from pm4py.statistics.start_activities.pandas import get as pd_sa +from pm4py.util import exec_utils, constants, xes_constants as xes + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + DEPENDENCY_THRESH = "dependency_thresh" + AND_MEASURE_THRESH = "and_measure_thresh" + MIN_ACT_COUNT = "min_act_count" + MIN_DFG_OCCURRENCES = "min_dfg_occurrences" + HEU_NET_DECORATION = "heu_net_decoration" + + +def apply(log: EventLog, parameters: Optional[Dict[Any, Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using the Heuristics Miner ++ algorithm + + Implements the approach described in + Burattin, Andrea, and Alessandro Sperduti. "Heuristics Miner for Time Intervals." ESANN. 2010. + + https://andrea.burattin.net/public-files/publications/2010-esann-slides.pdf + + Parameters + -------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.START_TIMESTAMP_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.HEU_NET_DECORATION + + Returns + -------------- + net + Petri net + im + Initial marking + fm + Final marking + """ + heu_net = apply_heu(log, parameters=parameters) + net, im, fm = hn_conv_alg.apply(heu_net, parameters=parameters) + return net, im, fm + + +def apply_pandas(df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using the Heuristics Miner ++ algorithm + + Implements the approach described in + Burattin, Andrea, and Alessandro Sperduti. "Heuristics Miner for Time Intervals." ESANN. 2010. + + https://andrea.burattin.net/public-files/publications/2010-esann-slides.pdf + + Parameters + -------------- + df + Dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.START_TIMESTAMP_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.HEU_NET_DECORATION + + Returns + -------------- + net + Petri net + im + Initial marking + fm + Final marking + """ + heu_net = apply_heu_pandas(df, parameters=parameters) + net, im, fm = hn_conv_alg.apply(heu_net, parameters=parameters) + return net, im, fm + + +def apply_heu(log: EventLog, parameters: Optional[Dict[Any, Any]] = None) -> HeuristicsNet: + """ + Discovers an heuristics net using the Heuristics Miner ++ algorithm + + Implements the approach described in + Burattin, Andrea, and Alessandro Sperduti. "Heuristics Miner for Time Intervals." ESANN. 2010. + + https://andrea.burattin.net/public-files/publications/2010-esann-slides.pdf + + Parameters + -------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.START_TIMESTAMP_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.HEU_NET_DECORATION + + Returns + -------------- + heu_net + Heuristics net + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + log = interval_lifecycle.to_interval(log, parameters=parameters) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + None) + if start_timestamp_key is None: + start_timestamp_key = xes.DEFAULT_START_TIMESTAMP_KEY + parameters = copy(parameters) + parameters[Parameters.START_TIMESTAMP_KEY] = start_timestamp_key + start_activities, end_activities, activities_occurrences, dfg, performance_dfg, sojourn_time, concurrent_activities = discover_abstraction_log( + log, parameters=parameters) + return discover_heu_net_plus_plus(start_activities, end_activities, activities_occurrences, dfg, performance_dfg, + sojourn_time, concurrent_activities, parameters=parameters) + + +def discover_abstraction_log(log: EventLog, parameters: Optional[Dict[Any, Any]] = None) -> Tuple[ + Any, Any, Any, Any, Any, Any, Any]: + """ + Discovers an abstraction from a log that is useful for the Heuristics Miner ++ algorithm + + Parameters + -------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.START_TIMESTAMP_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + + Returns + -------------- + start_activities + Start activities + end_activities + End activities + activities_occurrences + Activities along with their number of occurrences + dfg + Directly-follows graph + performance_dfg + (Performance) Directly-follows graph + sojourn_time + Sojourn time for each activity + concurrent_activities + Concurrent activities + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + start_activities = log_sa.get_start_activities(log, parameters=parameters) + end_activities = log_ea.get_end_activities(log, parameters=parameters) + activities_occurrences = log_attributes.get_attribute_values(log, activity_key, parameters=parameters) + efg_parameters = copy(parameters) + efg_parameters[efg_get.Parameters.KEEP_FIRST_FOLLOWING] = True + dfg = efg_get.apply(log, parameters=efg_parameters) + performance_dfg = dfg_alg.apply(log, variant=dfg_alg.Variants.PERFORMANCE, parameters=parameters) + sojourn_time = soj_get.apply(log, parameters=parameters) + concurrent_activities = conc_act_get.apply(log, parameters=parameters) + return ( + start_activities, end_activities, activities_occurrences, dfg, performance_dfg, sojourn_time, + concurrent_activities) + + +def apply_heu_pandas(df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> HeuristicsNet: + """ + Discovers an heuristics net using the Heuristics Miner ++ algorithm + + Implements the approach described in + Burattin, Andrea, and Alessandro Sperduti. "Heuristics Miner for Time Intervals." ESANN. 2010. + + https://andrea.burattin.net/public-files/publications/2010-esann-slides.pdf + + Parameters + -------------- + df + Dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.START_TIMESTAMP_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.HEU_NET_DECORATION + + Returns + -------------- + heu_net + Heuristics net + """ + if parameters is None: + parameters = {} + start_activities, end_activities, activities_occurrences, dfg, performance_dfg, sojourn_time, concurrent_activities = discover_abstraction_dataframe( + df, parameters=parameters) + return discover_heu_net_plus_plus(start_activities, end_activities, activities_occurrences, dfg, performance_dfg, + sojourn_time, concurrent_activities, parameters=parameters) + + +def discover_abstraction_dataframe(df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> Tuple[ + Any, Any, Any, Any, Any, Any, Any]: + """ + Discovers an abstraction from a dataframe that is useful for the Heuristics Miner ++ algorithm + + Parameters + -------------- + df + Dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.START_TIMESTAMP_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + + Returns + -------------- + start_activities + Start activities + end_activities + End activities + activities_occurrences + Activities along with their number of occurrences + dfg + Directly-follows graph + performance_dfg + (Performance) Directly-follows graph + sojourn_time + Sojourn time for each activity + concurrent_activities + Concurrent activities + """ + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + None) + if start_timestamp_key is None: + start_timestamp_key = xes.DEFAULT_START_TIMESTAMP_KEY + parameters = copy(parameters) + parameters[Parameters.START_TIMESTAMP_KEY] = start_timestamp_key + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + start_activities = pd_sa.get_start_activities(df, parameters=parameters) + end_activities = pd_ea.get_end_activities(df, parameters=parameters) + activities_occurrences = pd_attributes.get_attribute_values(df, activity_key, parameters=parameters) + efg_parameters = copy(parameters) + efg_parameters[pd_efg.Parameters.KEEP_FIRST_FOLLOWING] = True + dfg = pd_efg.apply(df, parameters=efg_parameters) + performance_dfg = df_statistics.get_dfg_graph(df, case_id_glue=case_id_glue, + activity_key=activity_key, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key, measure="performance") + sojourn_time = pd_soj_time.apply(df, parameters=parameters) + concurrent_activities = pd_conc_act.apply(df, parameters=parameters) + return ( + start_activities, end_activities, activities_occurrences, dfg, performance_dfg, sojourn_time, + concurrent_activities) + + +def discover_heu_net_plus_plus(start_activities, end_activities, activities_occurrences, dfg, performance_dfg, + sojourn_time, concurrent_activities, parameters: Optional[Dict[Any, Any]] = None): + """ + Discovers an heuristics net using the Heuristics Miner ++ algorithm + + Implements the approach described in + Burattin, Andrea, and Alessandro Sperduti. "Heuristics Miner for Time Intervals." ESANN. 2010. + + https://andrea.burattin.net/public-files/publications/2010-esann-slides.pdf + + Parameters + -------------- + start_activities + Start activities + end_activities + End activities + activities_occurrences + Activities along with their number of occurrences + dfg + Directly-follows graph + performance_dfg + (Performance) Directly-follows graph + sojourn_time + Sojourn time for each activity + concurrent_activities + Concurrent activities + parameters + Parameters of the algorithm, including: + - Parameters.DEPENDENCY_THRESH + - Parameters.AND_MEASURE_THRESH + - Parameters.MIN_ACT_COUNT + - Parameters.MIN_DFG_OCCURRENCES + - Parameters.HEU_NET_DECORATION + + Returns + -------------- + heu_net + Heuristics net + """ + if parameters is None: + parameters = {} + dependency_thresh = exec_utils.get_param_value(Parameters.DEPENDENCY_THRESH, parameters, + defaults.DEFAULT_DEPENDENCY_THRESH) + and_measure_thresh = exec_utils.get_param_value(Parameters.AND_MEASURE_THRESH, parameters, + defaults.DEFAULT_AND_MEASURE_THRESH) + min_act_count = exec_utils.get_param_value(Parameters.MIN_ACT_COUNT, parameters, defaults.DEFAULT_MIN_ACT_COUNT) + min_dfg_occurrences = exec_utils.get_param_value(Parameters.MIN_DFG_OCCURRENCES, parameters, + defaults.DEFAULT_MIN_DFG_OCCURRENCES) + heu_net_decoration = exec_utils.get_param_value(Parameters.HEU_NET_DECORATION, parameters, "frequency") + + # filter on activity and paths occurrence + activities_occurrences = {x: y for x, y in activities_occurrences.items() if y >= min_act_count} + dfg = {x: y for x, y in dfg.items() if + y >= min_dfg_occurrences and x[0] in activities_occurrences and x[1] in activities_occurrences} + performance_dfg = {x: y for x, y in performance_dfg.items() if x in dfg} + start_activities = {x: y for x, y in start_activities.items() if x in activities_occurrences} + end_activities = {x: y for x, y in end_activities.items() if x in activities_occurrences} + activities = list(activities_occurrences.keys()) + if heu_net_decoration == "frequency": + heu_net = HeuristicsNet(dfg, activities=activities, activities_occurrences=activities_occurrences, + start_activities=start_activities, end_activities=end_activities) + else: + heu_net = HeuristicsNet(dfg, activities=activities, activities_occurrences=activities_occurrences, + start_activities=start_activities, end_activities=end_activities, + performance_dfg=performance_dfg) + heu_net.min_dfg_occurrences = min_dfg_occurrences + heu_net.sojourn_times = sojourn_time + heu_net.concurrent_activities = concurrent_activities + return calculate(heu_net, dependency_thresh, and_measure_thresh, heu_net_decoration) + + +def calculate(heu_net: HeuristicsNet, dependency_thresh: float, and_measure_thresh: float, + heu_net_decoration: str) -> HeuristicsNet: + """ + Calculates the dependency matrix and the AND measures using the Heuristics Miner ++ formulas + + Parameters + ---------------- + heu_net + Heuristics net + dependency_thresh + Dependency threshold + and_measure_thresh + AND measure threshold + heu_net_decoration + Decoration to use (frequency/performance) + + Returns + ---------------- + heu_net + Heuristics net + """ + heu_net.performance_matrix = {} + heu_net.dependency_matrix = {} + heu_net.dfg_matrix = {} + for el in heu_net.dfg: + act1 = el[0] + act2 = el[1] + if act1 not in heu_net.dfg_matrix: + heu_net.dfg_matrix[act1] = {} + heu_net.dependency_matrix[act1] = {} + heu_net.performance_matrix[act1] = {} + heu_net.dfg_matrix[act1][act2] = heu_net.dfg[el] + heu_net.dependency_matrix[act1][act2] = -1 + heu_net.performance_matrix[act1][act2] = heu_net.performance_dfg[el] if heu_net.performance_dfg and el in heu_net.performance_dfg else 0.0 + for act1 in heu_net.activities: + heu_net.nodes[act1] = Node(heu_net, act1, heu_net.activities_occurrences[act1], node_type=heu_net.node_type) + # calculates the dependencies between the activities + heu_net = calculate_dependency(heu_net, dependency_thresh, heu_net_decoration) + # calculates the AND measure for outgoing edges (e.g. which activities happen in parallel after a given activity) + heu_net = calculate_and_out_measure(heu_net, and_measure_thresh) + # calculates the AND measure for ingoing edges (e.g. which activities happen in parallel before a given activity) + heu_net = calculate_and_in_measure(heu_net, and_measure_thresh) + return heu_net + + +def calculate_dependency(heu_net: HeuristicsNet, dependency_thresh: float, heu_net_decoration: str) -> HeuristicsNet: + """ + Calculates the dependency matrix using the Heuristics Miner ++ formula + + Parameters + -------------- + heu_net + Heuristics net + dependency_thresh + Dependency threshold + heu_net_decoration + Decoration to include (frequency/performance) + + Returns + --------------- + heu_net + Heuristics net (enriched) + """ + for act1 in heu_net.activities: + if act1 in heu_net.dfg_matrix: + for act2 in heu_net.dfg_matrix[act1]: + v1 = heu_net.dfg_matrix[act1][act2] + v2 = heu_net.dfg_matrix[act2][act1] if act2 in heu_net.dfg_matrix and act1 in heu_net.dfg_matrix[ + act2] else 0.0 + tup = tuple(sorted((act1, act2))) + # added term for Heuristics Miner ++ + v3 = heu_net.concurrent_activities[tup] if tup in heu_net.concurrent_activities else 0.0 + dep = (v1 - v2) / (v1 + v2 + v3) + heu_net.dependency_matrix[act1][act2] = dep + if dep > dependency_thresh: + repr_value = v1 if heu_net_decoration == "frequency" else heu_net.performance_matrix[act1][act2] + heu_net.nodes[act1].add_output_connection(heu_net.nodes[act2], dep, v1, repr_value=repr_value) + heu_net.nodes[act2].add_input_connection(heu_net.nodes[act1], dep, v1, repr_value=repr_value) + return heu_net + + +def calculate_and_out_measure(heu_net: HeuristicsNet, and_measure_thresh: float) -> HeuristicsNet: + """ + Calculates the AND measure for outgoing edges using the Heuristics Miner ++ formula + + Parameters + --------------- + heu_net + Heuristics net + and_measure_thresh + And measure threshold + + Returns + --------------- + heu_net + Heuristics net (enriched) + """ + for act in heu_net.nodes: + nodes = sorted(x.node_name for x in heu_net.nodes[act].output_connections) + i = 0 + while i < len(nodes): + n1 = nodes[i] + v3 = heu_net.dfg_matrix[act][n1] if act in heu_net.dfg_matrix and n1 in heu_net.dfg_matrix[act] else 0.0 + j = i + 1 + while j < len(nodes): + n2 = nodes[j] + tup = tuple(sorted((n1, n2))) + v1 = heu_net.dfg_matrix[n1][n2] if n1 in heu_net.dfg_matrix and n2 in heu_net.dfg_matrix[n1] else 0.0 + v2 = heu_net.dfg_matrix[n2][n1] if n2 in heu_net.dfg_matrix and n1 in heu_net.dfg_matrix[n2] else 0.0 + v4 = heu_net.dfg_matrix[act][n2] if act in heu_net.dfg_matrix and n2 in heu_net.dfg_matrix[act] else 0.0 + # added term for Heuristics Miner ++ + v5 = heu_net.concurrent_activities[tup] if tup in heu_net.concurrent_activities else 0.0 + this_value = (v1 + v2 + v5) / (v3 + v4) + if this_value > and_measure_thresh: + if n1 not in heu_net.nodes[act].and_measures_out: + heu_net.nodes[act].and_measures_out[n1] = {} + heu_net.nodes[act].and_measures_out[n1][n2] = this_value + j = j + 1 + i = i + 1 + return heu_net + + +def calculate_and_in_measure(heu_net: HeuristicsNet, and_measure_thresh: float) -> HeuristicsNet: + """ + Calculates the AND measure for incoming edges using the Heuristics Miner ++ formula + + Parameters + --------------- + heu_net + Heuristics net + and_measure_thresh + And measure threshold + + Returns + --------------- + heu_net + Heuristics net (enriched) + """ + for act in heu_net.nodes: + nodes = sorted(x.node_name for x in heu_net.nodes[act].input_connections) + i = 0 + while i < len(nodes): + n1 = nodes[i] + v3 = heu_net.dfg_matrix[n1][act] if n1 in heu_net.dfg_matrix and act in heu_net.dfg_matrix[n1] else 0.0 + j = i + 1 + while j < len(nodes): + n2 = nodes[j] + tup = tuple(sorted((n1, n2))) + v1 = heu_net.dfg_matrix[n1][n2] if n1 in heu_net.dfg_matrix and n2 in heu_net.dfg_matrix[n1] else 0.0 + v2 = heu_net.dfg_matrix[n2][n1] if n2 in heu_net.dfg_matrix and n1 in heu_net.dfg_matrix[n2] else 0.0 + v4 = heu_net.dfg_matrix[n2][act] if n2 in heu_net.dfg_matrix and act in heu_net.dfg_matrix[n2] else 0.0 + # added term for Heuristics Miner ++ + v5 = heu_net.concurrent_activities[tup] if tup in heu_net.concurrent_activities else 0.0 + this_value = (v1 + v2 + v5) / (v3 + v4) + if this_value > and_measure_thresh: + if n1 not in heu_net.nodes[act].and_measures_in: + heu_net.nodes[act].and_measures_in[n1] = {} + heu_net.nodes[act].and_measures_in[n1][n2] = this_value + j = j + 1 + i = i + 1 + return heu_net + + +def apply_dfg(dfg, activities=None, activities_occurrences=None, start_activities=None, end_activities=None, + parameters=None): + raise Exception("not implemented for plusplus version") + + +def apply_heu_dfg(dfg, activities=None, activities_occurrences=None, start_activities=None, end_activities=None, + dfg_window_2=None, freq_triples=None, parameters=None): + raise Exception("not implemented for plusplus version") diff --git a/pm4py/pm4py/algo/discovery/ilp/__init__.py b/pm4py/pm4py/algo/discovery/ilp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5a6463089338578eb2a4dc79d43c0699881be9b4 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ilp/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ilp import algorithm, variants diff --git a/pm4py/pm4py/algo/discovery/ilp/algorithm.py b/pm4py/pm4py/algo/discovery/ilp/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..1b9839722d91634a4e6e2eeb307d3d54d0ac5d68 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ilp/algorithm.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils +from pm4py.algo.discovery.ilp.variants import classic +from typing import Union, Optional, Dict, Any, Tuple +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Variants(Enum): + CLASSIC = classic + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], variant = Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using the ILP miner. + + Parameters + --------------- + log + Event log / Event stream / Pandas dataframe + variant + Variant of the algorithm to be used, possible values: + - Variants.CLASSIC + parameters + Variant-specific parameters + + Returns + --------------- + net + Petri net + im + Initial marking + fm + Final marking + """ + return exec_utils.get_variant(variant).apply(log, parameters) diff --git a/pm4py/pm4py/algo/discovery/ilp/variants/__init__.py b/pm4py/pm4py/algo/discovery/ilp/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5a3b13fdacea67985454ce4fbfdc4f212e026b56 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ilp/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ilp.variants import classic diff --git a/pm4py/pm4py/algo/discovery/ilp/variants/classic.py b/pm4py/pm4py/algo/discovery/ilp/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..1ae8423122e11aa0b413defab5280ba7b3b737c3 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ilp/variants/classic.py @@ -0,0 +1,326 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from pm4py.util import nx_utils + +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Union, Optional, Dict, Any, Tuple, List +from pm4py.objects.petri_net.obj import PetriNet, Marking +from enum import Enum +from pm4py.util import exec_utils, xes_constants, constants +import warnings +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.util import filtering_utils +from pm4py.util.lp import solver as lp_solver +from pm4py.objects.petri_net.utils import petri_utils +from pm4py.objects.log.util import artificial +from copy import copy, deepcopy +from pm4py.algo.discovery.causal import algorithm as causal_discovery +from pm4py.algo.discovery.dfg import algorithm as dfg_discovery +from pm4py.objects.petri_net.utils import murata +from pm4py.objects.petri_net.utils import reduction +import importlib.util + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + PARAM_ARTIFICIAL_START_ACTIVITY = constants.PARAM_ARTIFICIAL_START_ACTIVITY + PARAM_ARTIFICIAL_END_ACTIVITY = constants.PARAM_ARTIFICIAL_END_ACTIVITY + CAUSAL_RELATION = "causal_relation" + SHOW_PROGRESS_BAR = "show_progress_bar" + ALPHA = "alpha" + + +def __transform_log_to_matrix(log: EventLog, activities: List[str], activity_key: str): + """ + Internal method + Transforms the event log in a numeric matrix that is used to construct the linear problem. + """ + matr = [] + for trace in log: + vect = [] + rep = np.array([0] * len(activities)) + for i in range(len(trace)): + repi = rep.copy() + repi[activities.index(trace[i][activity_key])] += 1 + vect.append(repi) + rep = repi + matr.append(vect) + return matr + + +def __manage_solution(sol, added_places, explored_solutions, net, activities, trans_map): + """ + Internal method. + Manages the solution of the linear problem and possibly adds it as a place of the Petri net + """ + if sol.success: + sol = lp_solver.get_points_from_sol(sol, variant=lp_solver.SCIPY) + sol = [round(x) for x in sol] + + if tuple(sol) not in added_places: + added_places.add(tuple(sol)) + sol = np.array(sol) + + x0 = np.array(sol[:len(activities)]) + y0 = np.array(sol[len(activities):2 * len(activities)]) + + if max(x0) > 0 and max(y0) > 0: + place = PetriNet.Place(str(len(net.places))) + net.places.add(place) + i = 0 + while i < len(activities): + if sol[i] == 1: + petri_utils.add_arc_from_to(trans_map[activities[i]], place, net) + i = i + 1 + while i < 2 * len(activities): + if sol[i] == 1: + petri_utils.add_arc_from_to(place, trans_map[activities[i - len(activities)]], net) + i = i + 1 + vec = x0.tolist() + (y0-1).tolist() + [sol[-1]] + b = sol[-1] - 1 + x0.sum() + + explored_solutions.add((tuple(vec), b)) + + return vec, b + + return None, None + + +def apply(log0: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using the ILP miner. + + The implementation follows what is described in the scientific paper: + van Zelst, Sebastiaan J., et al. + "Discovering workflow nets using integer linear programming." Computing 100.5 (2018): 529-556. + + Parameters + --------------- + log0 + Event log / Event stream / Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to be used as activity + - Parameters.SHOW_PROGRESS_BAR => decides if the progress bar should be shown + + Returns + --------------- + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + artificial_start_activity = exec_utils.get_param_value(Parameters.PARAM_ARTIFICIAL_START_ACTIVITY, parameters, + constants.DEFAULT_ARTIFICIAL_START_ACTIVITY) + artificial_end_activity = exec_utils.get_param_value(Parameters.PARAM_ARTIFICIAL_END_ACTIVITY, parameters, + constants.DEFAULT_ARTIFICIAL_END_ACTIVITY) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + + log0 = log_converter.apply(log0, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + log0 = filtering_utils.keep_one_trace_per_variant(log0, parameters=parameters) + log = artificial.insert_artificial_start_end(deepcopy(log0), parameters=parameters) + # use the ALPHA causal relation if none is provided as parameter + causal = exec_utils.get_param_value(Parameters.CAUSAL_RELATION, parameters, causal_discovery.apply(dfg_discovery.apply(log, parameters=parameters))) + # noise threshold for the sequence encoding graph (when alpha=1, no filtering is applied; when alpha=0, the greatest filtering is applied) + alpha = exec_utils.get_param_value(Parameters.ALPHA, parameters, 1.0) + + activities = sorted(list(set(x[activity_key] for trace in log for x in trace))) + + # check if the causal relation satisfy the criteria for relaxed sound WF-nets + G = nx_utils.DiGraph() + for ca in causal: + G.add_edge(ca[0], ca[1]) + + desc_start = set(nx_utils.descendants(G, artificial_start_activity)) + anc_end = set(nx_utils.ancestors(G, artificial_end_activity)) + + if artificial_start_activity in desc_start or artificial_end_activity in anc_end or len(desc_start.union({artificial_start_activity}).difference(activities)) > 0 or len(anc_end.union({artificial_end_activity}).difference(activities)) > 0: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The conditions needed to ensure a relaxed sound WF-net as output are not satisfied.") + + matr = __transform_log_to_matrix(log, activities, activity_key) + + net = PetriNet("ilp") + im = Marking() + fm = Marking() + source = PetriNet.Place("source") + sink = PetriNet.Place("sink") + net.places.add(source) + net.places.add(sink) + im[source] = 1 + fm[sink] = 1 + trans_map = {} + + # STEP A) construction of the transitions of the Petri net. + # the source and sink place are connected respectively to the artificial start/end activities + for act in activities: + label = act if act not in [artificial_start_activity, artificial_end_activity] else None + trans_map[act] = PetriNet.Transition(act, label) + net.transitions.add(trans_map[act]) + + if act == artificial_start_activity: + petri_utils.add_arc_from_to(source, trans_map[act], net) + elif act == artificial_end_activity: + petri_utils.add_arc_from_to(trans_map[act], sink, net) + + # STEP B) construction of the sequence encoding graph + seq_enc_graph = {} + for j in range(len(matr)): + trace = matr[j] + trace_occ = log0[j].attributes["@@num_traces"] + for i in range(len(trace)): + prev = -trace[i-1] if i > 0 else np.zeros(len(activities)) + curr = trace[i] + prev = tuple(prev) + curr = tuple(curr) + if prev not in seq_enc_graph: + seq_enc_graph[prev] = {} + if curr not in seq_enc_graph[prev]: + seq_enc_graph[prev][curr] = 0 + seq_enc_graph[prev][curr] += trace_occ + max_child_seq_enc_graph = {x: max(y.values()) for x, y in seq_enc_graph.items()} + + # STEP C) construction of the base linear problem + # which will be 'extended' in each step + c = np.zeros(2*len(activities)) + Aub = [] + bub = [] + Aeq = [] + beq = [] + + added_rows_Aub = set() + added_rows_Aeq = set() + + for trace in matr: + for i in range(len(trace)): + row1 = -trace[i-1] if i > 0 else np.zeros(len(activities)) + row2 = trace[i] + prev = tuple(row1) + curr = tuple(row2) + + if seq_enc_graph[prev][curr] >= (1-alpha) * max_child_seq_enc_graph[prev]: + row = row1.tolist() + row2.tolist() + [-1] + if i < len(trace)-1: + if tuple(row) not in added_rows_Aub: + added_rows_Aub.add(tuple(row)) + Aub.append(row) + bub.append(0) + else: + if tuple(row) not in added_rows_Aeq: + # deviation 1: impose that the place is empty at the end of every trace of the log + added_rows_Aeq.add(tuple(row)) + Aeq.append(row) + beq.append(0) + + crow = row2.tolist() + (-row2).tolist() + c += crow + else: + # break not only the current node but all his children + break + + Aub.append([-1] * (2*len(activities)) + [0]) + bub.append(-1) + + for i in range(2*len(activities)+1): + row1 = [0] * (2*len(activities)+1) + row1[i] = -1 + Aub.append(row1) + bub.append(0) + row2 = [0] * (2*len(activities)+1) + row2[i] = 1 + Aub.append(row2) + bub.append(1) + + # deviation 2: seek only for places that contains initially 0 tokens + const = [0] * (2 * len(activities)) + [1] + Aub.append(const) + bub.append(0) + + c = c.tolist() + c.append(1) + + integrality = [1] * (2*len(activities)+1) + + ite = 0 + added_places = set() + explored_solutions = set() + + progress = None + if importlib.util.find_spec("tqdm") and show_progress_bar and len(causal) > 1: + from tqdm.auto import tqdm + progress = tqdm(total=len(causal), desc="discovering Petri net using ILP miner, completed causal relations :: ") + + # STEP D) explore all the causal relations in the log + # to find places + for ca in causal: + Aeq1 = copy(Aeq) + beq1 = copy(beq) + + const1 = [0] * (2*len(activities) + 1) + const1[activities.index(ca[0])] = 1 + Aeq1.append(const1) + beq1.append(1) + + const2 = [0] * (2*len(activities) + 1) + const2[len(activities) + activities.index(ca[1])] = 1 + Aeq1.append(const2) + beq1.append(1) + + sol = lp_solver.apply(c, Aub, bub, Aeq1, beq1, variant=lp_solver.SCIPY, parameters={"integrality": integrality}) + __manage_solution(sol, added_places, explored_solutions, net, activities, trans_map) + + ite += 1 + + if progress is not None: + progress.update() + + # gracefully close progress bar + if progress is not None: + progress.close() + del progress + + + # here, we also implement the extensive research for places (closing the LP space to previous solutions) + # as described in the paper (possible STEP D) + """for tup in explored_solutions: + Aub.append(list(tup[0])) + bub.append(tup[1]) + while True: + sol = lp_solver.apply(c, Aub, bub, Aeq, beq, variant=lp_solver.SCIPY, parameters={"integrality": integrality}) + + vec, b = __manage_solution(sol, added_places, explored_solutions, net, activities, trans_map) + + if vec is not None: + Aub.append(vec) + bub.append(b) + ite += 1 + if ite >= 25: + break""" + + # STEP E) apply the reduction on the implicit places and on the invisible transitions + net, im, fm = murata.apply_reduction(net, im, fm) + net = reduction.apply_simple_reduction(net) + + return net, im, fm diff --git a/pm4py/pm4py/algo/discovery/inductive/__init__.py b/pm4py/pm4py/algo/discovery/inductive/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..77f7d674a22aca5e6da9a041327db3e419db1a2d --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.inductive import algorithm, variants + diff --git a/pm4py/pm4py/algo/discovery/inductive/algorithm.py b/pm4py/pm4py/algo/discovery/inductive/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..71f1c61b9eb7b2d9cc441b36ddb4625be05c4d48 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/algorithm.py @@ -0,0 +1,89 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union + +import pandas as pd + +from pm4py import util as pmutil +from pm4py.algo.discovery.inductive.dtypes.im_dfg import InductiveDFG +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureDFG +from pm4py.algo.discovery.inductive.variants.im import IMUVCL +from pm4py.algo.discovery.inductive.variants.imf import IMFUVCL +from pm4py.algo.discovery.inductive.variants.imd import IMD +from pm4py.algo.discovery.inductive.variants.instances import IMInstance +from pm4py.objects.dfg.obj import DFG +from pm4py.objects.log.obj import EventLog +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.process_tree.utils import generic as pt_util +from pm4py.objects.process_tree.utils.generic import tree_sort +from pm4py.util import constants +import warnings +from pm4py.util import exec_utils +from pm4py.util import xes_constants as xes_util +from pm4py.util.compression import util as comut +from pm4py.util.compression.dtypes import UVCL + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +class Variants(Enum): + IM = IMInstance.IM + IMf = IMInstance.IMf + IMd = IMInstance.IMd + + +def apply(obj: Union[EventLog, pd.DataFrame, DFG, UVCL], parameters: Optional[Dict[Any, Any]] = None, variant=Variants.IM) -> ProcessTree: + if parameters is None: + parameters = {} + ack = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + tk = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_util.DEFAULT_TIMESTAMP_KEY) + cidk = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, pmutil.constants.CASE_CONCEPT_NAME) + + process_tree = ProcessTree() + if type(obj) is DFG: + if variant is not Variants.IMd: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn('Inductive Miner Variant requested for DFG artefact is not IMD, resorting back to IMD') + imd = IMD(parameters) + idfg = InductiveDFG(dfg=obj, skip=False) + process_tree = imd.apply(IMDataStructureDFG(idfg), parameters) + else: + if type(obj) in [UVCL]: + uvcl = obj + else: + uvcl = comut.get_variants(comut.project_univariate(obj, key=ack, df_glue=cidk, df_sorting_criterion_key=tk)) + + if variant is Variants.IM: + im = IMUVCL(parameters) + process_tree = im.apply(IMDataStructureUVCL(uvcl), parameters) + if variant is Variants.IMf: + imf = IMFUVCL(parameters) + process_tree = imf.apply(IMDataStructureUVCL(uvcl), parameters) + if variant is Variants.IMd: + imd = IMD(parameters) + idfg = InductiveDFG(dfg=comut.discover_dfg_uvcl(uvcl), skip=() in uvcl) + process_tree = imd.apply(IMDataStructureDFG(idfg), parameters) + + process_tree = pt_util.fold(process_tree) + tree_sort(process_tree) + + return process_tree diff --git a/pm4py/pm4py/algo/discovery/inductive/base_case/__init__.py b/pm4py/pm4py/algo/discovery/inductive/base_case/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4c25185763dd4d4b8b143fb91c20d514db8143cd --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/base_case/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.inductive.base_case import abc, empty_log, factory, single_activity diff --git a/pm4py/pm4py/algo/discovery/inductive/base_case/abc.py b/pm4py/pm4py/algo/discovery/inductive/base_case/abc.py new file mode 100644 index 0000000000000000000000000000000000000000..90680ad7d40635cef1c1c15f9976f7936aeb058d --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/base_case/abc.py @@ -0,0 +1,40 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from abc import ABC, abstractmethod +from typing import Union, TypeVar, Generic, Optional, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure +from pm4py.objects.process_tree.obj import ProcessTree + +T = TypeVar('T', bound=Union[IMDataStructure]) + + +class BaseCase(ABC, Generic[T]): + + @classmethod + def apply(cls, obj=T, parameters: Optional[Dict[str, Any]] = None) -> Optional[ProcessTree]: + return cls.leaf(obj, parameters) if cls.holds(obj, parameters) else None + + @classmethod + @abstractmethod + def holds(cls, obj=T, parameters: Optional[Dict[str, Any]] = None) -> bool: + pass + + @classmethod + @abstractmethod + def leaf(cls, obj=T, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + pass diff --git a/pm4py/pm4py/algo/discovery/inductive/base_case/empty_log.py b/pm4py/pm4py/algo/discovery/inductive/base_case/empty_log.py new file mode 100644 index 0000000000000000000000000000000000000000..4ffac4f4527be7875922476f506966ff8ebecda7 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/base_case/empty_log.py @@ -0,0 +1,44 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from abc import ABC +from typing import Generic, Optional, Dict, Any + +from pm4py.algo.discovery.inductive.base_case.abc import BaseCase, T +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureDFG +from pm4py.objects.process_tree.obj import ProcessTree + + +class EmptyLogBaseCase(BaseCase[T], ABC, Generic[T]): + + @classmethod + def leaf(cls, obj=T, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + return ProcessTree() + + +class EmptyLogBaseCaseUVCL(EmptyLogBaseCase[IMDataStructureUVCL]): + + @classmethod + def holds(cls, obj=IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> bool: + return len(obj.data_structure) == 0 + + +class EmptyLogBaseCaseDFG(EmptyLogBaseCase[IMDataStructureDFG]): + + @classmethod + def holds(cls, obj=IMDataStructureDFG, parameters: Optional[Dict[str, Any]] = None): + dfg = obj.dfg + return len(dfg.graph) == 0 and len(dfg.start_activities) == 0 and len(dfg.end_activities) == 0 diff --git a/pm4py/pm4py/algo/discovery/inductive/base_case/factory.py b/pm4py/pm4py/algo/discovery/inductive/base_case/factory.py new file mode 100644 index 0000000000000000000000000000000000000000..2f4c7bd1846da0a9f5b52ea25648007f4f8aaefe --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/base_case/factory.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import List, TypeVar, Optional, Dict, Any + +from pm4py.algo.discovery.inductive.base_case.abc import BaseCase +from pm4py.algo.discovery.inductive.base_case.empty_log import EmptyLogBaseCaseUVCL, EmptyLogBaseCaseDFG +from pm4py.algo.discovery.inductive.base_case.single_activity import SingleActivityBaseCaseUVCL, \ + SingleActivityBaseCaseDFG +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure, IMDataStructureUVCL, IMDataStructureDFG +from pm4py.algo.discovery.inductive.variants.instances import IMInstance +from pm4py.objects.process_tree.obj import ProcessTree + +T = TypeVar('T', bound=IMDataStructure) +S = TypeVar('S', bound=BaseCase) + + +class BaseCaseFactory: + + @classmethod + def get_base_cases(cls, obj: T, inst: IMInstance, parameters: Optional[Dict[str, Any]] = None) -> List[S]: + if inst is IMInstance.IM or inst is IMInstance.IMf: + if type(obj) is IMDataStructureUVCL: + return [EmptyLogBaseCaseUVCL, SingleActivityBaseCaseUVCL] + if inst is IMInstance.IMd: + if type(obj) is IMDataStructureDFG: + return [EmptyLogBaseCaseDFG, SingleActivityBaseCaseDFG] + return [] + + @classmethod + def apply_base_cases(cls, obj: T, inst: IMInstance, parameters: Optional[Dict[str, Any]] = None) -> Optional[ProcessTree]: + for b in BaseCaseFactory.get_base_cases(obj, inst): + r = b.apply(obj, parameters) + if r is not None: + return r + return None diff --git a/pm4py/pm4py/algo/discovery/inductive/base_case/single_activity.py b/pm4py/pm4py/algo/discovery/inductive/base_case/single_activity.py new file mode 100644 index 0000000000000000000000000000000000000000..3f8a74ca8c557e6b232e057394b9282dc46fa1b5 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/base_case/single_activity.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.inductive.base_case.abc import BaseCase +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureDFG +from pm4py.objects.process_tree.obj import ProcessTree +from typing import Optional, Dict, Any + + +class SingleActivityBaseCaseUVCL(BaseCase[IMDataStructureUVCL]): + @classmethod + def holds(cls, obj=IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> bool: + if len(obj.data_structure.keys()) != 1: + return False + if len(list(obj.data_structure.keys())[0]) > 1: + return False + return True + + @classmethod + def leaf(cls, obj=IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + for t in obj.data_structure: + if t: + return ProcessTree(label=t[0]) + else: + return ProcessTree() + + +class SingleActivityBaseCaseDFG(BaseCase[IMDataStructureDFG]): + + @classmethod + def holds(cls, obj=IMDataStructureDFG, parameters: Optional[Dict[str, Any]] = None) -> bool: + return len(obj.dfg.graph) == 0 and len(set(obj.dfg.start_activities).union(obj.dfg.end_activities)) == 1 + + @classmethod + def leaf(cls, obj=IMDataStructureDFG, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + return ProcessTree(label=list(obj.dfg.start_activities)[0]) diff --git a/pm4py/pm4py/algo/discovery/inductive/cuts/__init__.py b/pm4py/pm4py/algo/discovery/inductive/cuts/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7f4ba6e2d6e03cf71c376a2c0d5e96d0533e58f4 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/cuts/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.inductive.cuts import sequence, xor, concurrency, loop diff --git a/pm4py/pm4py/algo/discovery/inductive/cuts/abc.py b/pm4py/pm4py/algo/discovery/inductive/cuts/abc.py new file mode 100644 index 0000000000000000000000000000000000000000..006040b3874ef81caf1974c2db47e53c43426b56 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/cuts/abc.py @@ -0,0 +1,51 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from abc import ABC, abstractmethod +from typing import Optional, List, Collection, Any, Tuple, Generic, TypeVar, Dict + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure +from pm4py.objects.process_tree.obj import ProcessTree + +T = TypeVar('T', bound=IMDataStructure) + + +class Cut(ABC, Generic[T]): + + @classmethod + @abstractmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + pass + + @classmethod + @abstractmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[List[Collection[Any]]]: + pass + + @classmethod + def apply(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[ProcessTree, List[T]]]: + g = cls.holds(obj, parameters) + return (cls.operator(), cls.project(obj, g, parameters)) if g is not None else g + + @classmethod + @abstractmethod + def project(cls, obj: T, groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[T]: + """ + Projection of the given data object (Generic type T). + Returns a corresponding process tree and the projected sub logs according to the identified groups. + A precondition of the project function is that it holds on the object for the given Object + """ + pass diff --git a/pm4py/pm4py/algo/discovery/inductive/cuts/concurrency.py b/pm4py/pm4py/algo/discovery/inductive/cuts/concurrency.py new file mode 100644 index 0000000000000000000000000000000000000000..09f5d537b4e9d0f99ec3dcb99c2abb4f2d7a929f --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/cuts/concurrency.py @@ -0,0 +1,121 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from abc import ABC +from collections import Counter +from typing import List, Collection, Any, Optional, Generic, Dict + +from pm4py.algo.discovery.inductive.cuts.abc import Cut, T +from pm4py.algo.discovery.inductive.dtypes.im_dfg import InductiveDFG +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureDFG +from pm4py.objects.dfg import util as dfu +from pm4py.objects.dfg.obj import DFG +from pm4py.objects.process_tree.obj import Operator, ProcessTree + + +class ConcurrencyCut(Cut[T], ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + return ProcessTree(operator=Operator.PARALLEL) + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[List[Collection[Any]]]: + dfg = obj.dfg + alphabet = dfu.get_vertices(dfg) + alphabet = sorted(list(alphabet)) + edges = dfu.get_edges(dfg) + edges = sorted(list(edges)) + + groups = [{a} for a in alphabet] + if len(groups) == 0: + return None + + cont = True + while cont: + cont = False + i = 0 + while i < len(groups): + j = i + 1 + while j < len(groups): + for act1 in groups[i]: + for act2 in groups[j]: + if (act1, act2) not in edges or (act2, act1) not in edges: + groups[i] = groups[i].union(groups[j]) + del groups[j] + cont = True + break + if cont: + break + if cont: + break + j = j + 1 + if cont: + break + i = i + 1 + + groups = list(sorted(groups, key=lambda g: len(g))) + i = 0 + while i < len(groups) and len(groups) > 1: + if len(groups[i].intersection(set(dfg.start_activities.keys()))) > 0 and len( + groups[i].intersection(set(dfg.end_activities.keys()))) > 0: + i += 1 + continue + group = groups[i] + del groups[i] + if i == 0: + groups[i].update(group) + else: + groups[i - 1].update(group) + + return groups if len(groups) > 1 else None + + +class ConcurrencyCutUVCL(ConcurrencyCut[IMDataStructureUVCL]): + + @classmethod + def project(cls, obj: IMDataStructureUVCL, groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureUVCL]: + r = list() + for g in groups: + c = Counter() + for t in obj.data_structure: + c[tuple(filter(lambda e: e in g, t))] = obj.data_structure[t] + r.append(c) + return list(map(lambda l: IMDataStructureUVCL(l), r)) + + +class ConcurrencyCutDFG(ConcurrencyCut[IMDataStructureDFG]): + + @classmethod + def project(cls, obj: IMDataStructureDFG, groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureDFG]: + dfgs = [] + skippable = [] + for g in groups: + dfn = DFG() + for a in obj.dfg.start_activities: + if a in g: + dfn.start_activities[a] = obj.dfg.start_activities[a] + for a in obj.dfg.end_activities: + if a in g: + dfn.end_activities[a] = obj.dfg.end_activities[a] + for (a, b) in obj.dfg.graph: + if a in g and b in g: + dfn.graph[(a, b)] = obj.dfg.graph[(a, b)] + skippable.append(False) + dfgs.append(dfn) + r = list() + [r.append(IMDataStructureDFG(InductiveDFG(dfg=dfgs[i], skip=skippable[i]))) for i in range(len(dfgs))] + return r diff --git a/pm4py/pm4py/algo/discovery/inductive/cuts/factory.py b/pm4py/pm4py/algo/discovery/inductive/cuts/factory.py new file mode 100644 index 0000000000000000000000000000000000000000..bc3ebbdd82316676437301d5ac552ec2098d6122 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/cuts/factory.py @@ -0,0 +1,68 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import List, Optional, Tuple, TypeVar, Dict, Any + +from pm4py.algo.discovery.inductive.cuts.abc import Cut +from pm4py.algo.discovery.inductive.cuts.concurrency import ConcurrencyCutUVCL, ConcurrencyCutDFG +from pm4py.algo.discovery.inductive.cuts.loop import LoopCutUVCL, LoopCutDFG +from pm4py.algo.discovery.inductive.cuts.sequence import StrictSequenceCutUVCL, StrictSequenceCutDFG, SequenceCutUVCL, SequenceCutDFG +from pm4py.algo.discovery.inductive.cuts.xor import ExclusiveChoiceCutUVCL, ExclusiveChoiceCutDFG +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure, IMDataStructureUVCL, IMDataStructureDFG +from pm4py.algo.discovery.inductive.variants.instances import IMInstance +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.util import exec_utils +from enum import Enum + + +T = TypeVar('T', bound=IMDataStructure) +S = TypeVar('S', bound=Cut) + + +class Parameters(Enum): + DISABLE_STRICT_SEQUENCE_CUT = "disable_strict_sequence_cut" + + +class CutFactory: + + @classmethod + def get_cuts(cls, obj: T, inst: IMInstance, parameters: Optional[Dict[str, Any]] = None) -> List[S]: + if parameters is None: + parameters = {} + + disable_strict_sequence_cut = exec_utils.get_param_value(Parameters.DISABLE_STRICT_SEQUENCE_CUT, parameters, False) + + if inst is IMInstance.IM or inst is IMInstance.IMf: + if type(obj) is IMDataStructureUVCL: + sequence_cut = StrictSequenceCutUVCL + if disable_strict_sequence_cut: + sequence_cut = SequenceCutUVCL + return [ExclusiveChoiceCutUVCL, sequence_cut, ConcurrencyCutUVCL, LoopCutUVCL] + if inst is IMInstance.IMd: + if type(obj) is IMDataStructureDFG: + sequence_cut = StrictSequenceCutDFG + if disable_strict_sequence_cut: + sequence_cut = SequenceCutDFG + return [ExclusiveChoiceCutDFG, sequence_cut, ConcurrencyCutDFG, LoopCutDFG] + return list() + + @classmethod + def find_cut(cls, obj: IMDataStructure, inst: IMInstance, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[ProcessTree, List[T]]]: + for c in CutFactory.get_cuts(obj, inst, parameters): + r = c.apply(obj, parameters) + if r is not None: + return r + return None diff --git a/pm4py/pm4py/algo/discovery/inductive/cuts/loop.py b/pm4py/pm4py/algo/discovery/inductive/cuts/loop.py new file mode 100644 index 0000000000000000000000000000000000000000..6cb178d043089de6db3f3cf5058aa12666a2f4c3 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/cuts/loop.py @@ -0,0 +1,229 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from abc import ABC +from collections import Counter +from typing import List, Optional, Collection, Any, Tuple, Generic, Dict + +from pm4py.util import nx_utils + +from pm4py.algo.discovery.inductive.cuts.abc import Cut, T +from pm4py.algo.discovery.inductive.dtypes.im_dfg import InductiveDFG +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureDFG +from pm4py.objects.dfg import util as dfu +from pm4py.objects.dfg.obj import DFG +from pm4py.objects.process_tree.obj import Operator, ProcessTree +from pm4py.util.compression.dtypes import UVCL + + +class LoopCut(Cut[T], ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + return ProcessTree(operator=Operator.LOOP) + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[List[Collection[Any]]]: + """ + This method finds a loop cut in the dfg. + Implementation follows function LoopCut on page 190 of + "Robust Process Mining with Guarantees" by Sander J.J. Leemans (ISBN: 978-90-386-4257-4) + + Basic Steps: + 1. merge all start and end activities in one group ('do' group) + 2. remove start/end activities from the dfg + 3. detect connected components in (undirected representative) of the reduced graph + 4. check if each component meets the start/end criteria of the loop cut definition (merge with the 'do' group if not) + 5. return the cut if at least two groups remain + + """ + dfg = obj.dfg + start_activities = set(dfg.start_activities.keys()) + end_activities = set(dfg.end_activities.keys()) + if len(dfg.graph) == 0: + return None + + groups = [start_activities.union(end_activities)] + for c in cls._compute_connected_components(dfg, start_activities, end_activities): + groups.append(set(c.nodes)) + + groups = cls._exclude_sets_non_reachable_from_start(dfg, start_activities, end_activities, groups) + groups = cls._exclude_sets_no_reachable_from_end(dfg, start_activities, end_activities, groups) + groups = cls._check_start_completeness(dfg, start_activities, end_activities, groups) + groups = cls._check_end_completeness(dfg, start_activities, end_activities, groups) + + groups = list(filter(lambda g: len(g) > 0, groups)) + + return groups if len(groups) > 1 else None + + @classmethod + def _check_start_completeness(cls, dfg: DFG, start_activities: Collection[Any], end_activities: Collection[Any], + groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[Collection[Any]]: + i = 1 + while i < len(groups): + merge = False + for a in groups[i]: + if merge: + break + for (x, b) in dfg.graph: + if x == a and b in start_activities: + for s in start_activities: + if not (a, s) in dfg.graph: + merge = True + if merge: + groups[0] = set(groups[0]).union(groups[i]) + del groups[i] + continue + i = i + 1 + return groups + + @classmethod + def _check_end_completeness(cls, dfg: DFG, start_activities: Collection[Any], end_activities: Collection[Any], + groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[Collection[Any]]: + i = 1 + while i < len(groups): + merge = False + for a in groups[i]: + if merge: + break + for (b, x) in dfg.graph: + if x == a and b in end_activities: + for e in end_activities: + if not (e, a) in dfg.graph: + merge = True + if merge: + groups[0] = set(groups[0]).union(groups[i]) + del groups[i] + continue + i = i + 1 + return groups + + @classmethod + def _exclude_sets_non_reachable_from_start(cls, dfg: DFG, start_activities: Collection[Any], + end_activities: Collection[Any], + groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[Collection[Any]]: + for a in set(start_activities).difference(set(end_activities)): + for (x, b) in dfg.graph: + if x == a: + group_a, group_b = None, None + for group in groups: + group_a = group if a in group else group_a + group_b = group if b in group else group_b + groups = [group for group in groups if group != group_a and group != group_b] + # we are always merging on the do-part + groups.insert(0, group_a.union(group_b)) + return groups + + @classmethod + def _exclude_sets_no_reachable_from_end(cls, dfg: DFG, start_activities: Collection[Any], + end_activities: Collection[Any], + groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[Collection[Any]]: + for b in set(end_activities).difference(start_activities): + for (a, x) in dfg.graph: + if x == b: + group_a, group_b = None, None + for group in groups: + group_a = group if a in group else group_a + group_b = group if b in group else group_b + groups = [group for group in groups if group != group_a and group != group_b] + groups.insert(0, group_a.union(group_b)) + return groups + + @classmethod + def _compute_connected_components(cls, dfg: DFG, start_activities: Collection[Any], + end_activities: Collection[Any], parameters: Optional[Dict[str, Any]] = None): + nxd = dfu.as_nx_graph(dfg) + [nxd.remove_edge(a, b) for (a, b) in dfg.graph if + a in start_activities or a in end_activities or b in start_activities or b in end_activities] + [nxd.remove_node(a) for a in start_activities if nxd.has_node(a)] + [nxd.remove_node(a) for a in end_activities if nxd.has_node(a)] + nxu = nxd.to_undirected() + return [nxd.subgraph(c).copy() for c in nx_utils.connected_components(nxu)] + + +class LoopCutUVCL(LoopCut[IMDataStructureUVCL]): + + @classmethod + def project(cls, obj: IMDataStructureUVCL, groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureUVCL]: + do = groups[0] + redo = groups[1:] + redo_activities = [y for x in redo for y in x] + do_log = Counter() + redo_logs = [Counter() for i in range(len(redo))] + for t in obj.data_structure: + do_trace = tuple() + redo_trace = tuple() + for e in t: + if e in do: + do_trace = do_trace + (e,) + if len(redo_trace) > 0: + redo_logs = cls._append_trace_to_redo_log(redo_trace, redo_logs, redo, obj.data_structure[t]) + redo_trace = tuple() + else: + if e in redo_activities: + redo_trace = redo_trace + (e,) + if len(do_trace) > 0: + do_log.update({do_trace: obj.data_structure[t]}) + do_trace = tuple() + if len(redo_trace) > 0: + redo_logs = cls._append_trace_to_redo_log(redo_trace, redo_logs, redo) + do_log.update({do_trace: obj.data_structure[t]}) + logs = [do_log] + logs.extend(redo_logs) + return list(map(lambda l: IMDataStructureUVCL(l), logs)) + + @classmethod + def _append_trace_to_redo_log(cls, redo_trace: Tuple, redo_logs: List[UVCL], redo_groups: List[Collection[Any]], + cardinality, parameters: Optional[Dict[str, Any]] = None) -> \ + List[UVCL]: + activities = set(x for x in redo_trace) + inte = [(i, len(activities.intersection(redo_groups[i]))) for i in range(len(redo_groups))] + inte = sorted(inte, key=lambda x: (x[1], x[0]), reverse=True) + redo_logs[inte[0][0]].update({redo_trace: cardinality}) + return redo_logs + + +class LoopCutDFG(LoopCut[IMDataStructureDFG]): + + @classmethod + def project(cls, obj: IMDataStructureUVCL, groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureDFG]: + dfg = obj.dfg + dfgs = [] + skippable = [False, False] + for gind, g in enumerate(groups): + dfn = DFG() + for (a, b) in dfg.graph: + if a in g and b in g: + dfn.graph[(a, b)] = dfg.graph[(a, b)] + if b in dfg.start_activities and a in dfg.end_activities: + skippable[1] = True + if gind == 0: + for a in dfg.start_activities: + if a in g: + dfn.start_activities[a] = dfg.start_activities[a] + else: + skippable[0] = True + for a in dfg.end_activities: + if a in g: + dfn.end_activities[a] = dfg.end_activities[a] + else: + skippable[1] = True + elif gind == 1: + for a in g: + dfn.start_activities[a] = 1 + dfn.end_activities[a] = 1 + dfgs.append(dfn) + return [IMDataStructureDFG(InductiveDFG(dfg=dfgs[i], skip=skippable[i])) for i in range(len(dfgs))] diff --git a/pm4py/pm4py/algo/discovery/inductive/cuts/sequence.py b/pm4py/pm4py/algo/discovery/inductive/cuts/sequence.py new file mode 100644 index 0000000000000000000000000000000000000000..808b86b877590cdef9806b321a777ac25888adcd --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/cuts/sequence.py @@ -0,0 +1,299 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import itertools +import sys +from abc import ABC +from collections import Counter +from typing import Collection, Any, List, Optional, Generic, Dict +from typing import Tuple + +from pm4py.algo.discovery.inductive.cuts.abc import Cut +from pm4py.algo.discovery.inductive.cuts.abc import T +from pm4py.algo.discovery.inductive.dtypes.im_dfg import InductiveDFG +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureDFG +from pm4py.objects.dfg import util as dfu +from pm4py.objects.dfg.obj import DFG +from pm4py.objects.process_tree.obj import Operator, ProcessTree + + +class SequenceCut(Cut[T], ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + return ProcessTree(operator=Operator.SEQUENCE) + + @staticmethod + def check_merge_condition(g1, g2, trans_succ): + for a1 in g1: + for a2 in g2: + if (a2 in trans_succ[a1] and a1 in trans_succ[a2]) or (a2 not in trans_succ[a1] and a1 not in trans_succ[a2]): + return True + return False + + @staticmethod + def merge_groups(groups, trans_succ): + i = 0 + while i < len(groups): + j = i + 1 + while j < len(groups): + if SequenceCut.check_merge_condition(groups[i], groups[j], trans_succ): + groups[i] = groups[i].union(groups[j]) + del groups[j] + continue + j = j + 1 + i = i + 1 + return groups + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[List[Collection[Any]]]: + ''' + This method finds a sequence cut in the dfg. + Implementation follows function sequence on page 188 of + "Robust Process Mining with Guarantees" by Sander J.J. Leemans (ISBN: 978-90-386-4257-4) + + Basic Steps: + 1. create a group per activity + 2. merge pairwise reachable nodes (based on transitive relations) + 3. merge pairwise unreachable nodes (based on transitive relations) + 4. sort the groups based on their reachability + ''' + dfg = obj.dfg + alphabet = dfu.get_vertices(dfg) + transitive_predecessors, transitive_successors = dfu.get_transitive_relations(dfg) + groups = [{a} for a in alphabet] + if len(groups) == 0: + return None + + old_size = None + while old_size != len(groups): + old_size = len(groups) + groups = SequenceCut.merge_groups(groups, transitive_successors) + + groups = list(sorted(groups, key=lambda g: len( + transitive_predecessors[next(iter(g))]) + (len(alphabet) - len(transitive_successors[next(iter(g))])))) + + return groups if len(groups) > 1 else None + + +class StrictSequenceCut(SequenceCut[T], ABC, Generic[T]): + + @classmethod + def _skippable(cls, p: int, dfg: DFG, start: Collection[Any], end: Collection[Any], + groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> bool: + """ + This method implements the function SKIPPABLE as defined on page 233 of + "Robust Process Mining with Guarantees" by Sander J.J. Leemans (ISBN: 978-90-386-4257-4) + The function is used as a helper function for the strict sequence cut detection mechanism, which detects + larger groups of skippable activities. + """ + for i, j in itertools.product(range(0, p), range(p + 1, len(groups))): + for a, b in itertools.product(groups[i], groups[j]): + if (a, b) in dfg.graph: + return True + for i in range(p + 1, len(groups)): + for a in groups[i]: + if a in start: + return True + for i in range(0, p): + for a in groups[i]: + if a in end: + return True + return False + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[List[Collection[Any]]]: + """ + This method implements the strict sequence cut as defined on page 233 of + "Robust Process Mining with Guarantees" by Sander J.J. Leemans (ISBN: 978-90-386-4257-4) + The function merges groups that together can be skipped. + """ + dfg = obj.dfg + c = SequenceCut.holds(obj) + start = set(dfg.start_activities.keys()) + end = set(dfg.end_activities.keys()) + if c is not None: + mf = [-1 * sys.maxsize if len(set(G).intersection(start)) > 0 else sys.maxsize for G in c] + mt = [sys.maxsize if len(set(G).intersection(end)) > 0 else -1 * sys.maxsize for G in c] + cmap = cls._construct_alphabet_cluster_map(c) + for (a, b) in dfg.graph: + mf[cmap[b]] = min(mf[cmap[b]], cmap[a]) + mt[cmap[a]] = max(mt[cmap[a]], cmap[b]) + + for p in range(0, len(c)): + if cls._skippable(p, dfg, start, end, c): + q = p - 1 + while q >= 0 and mt[q] <= p: + c[p] = c[p].union(c[q]) + c[q] = set() + q -= 1 + q = p + 1 + while q < len(mf) and mf[q] >= p: + c[p] = c[p].union(c[q]) + c[q] = set() + q += 1 + return list(filter(lambda g: len(g) > 0, c)) + return None + + @classmethod + def _construct_alphabet_cluster_map(cls, c: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None): + map = dict() + for i in range(0, len(c)): + for a in c[i]: + map[a] = i + return map + + +class SequenceCutUVCL(SequenceCut[IMDataStructureUVCL]): + + @classmethod + def project(cls, obj: IMDataStructureUVCL, groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureUVCL]: + logs = [Counter() for g in groups] + for t in obj.data_structure: + i = 0 + split_point = 0 + act_union = set() + while i < len(groups): + new_split_point = cls._find_split_point( + t, groups[i], split_point, act_union) + trace_i = tuple() + j = split_point + while j < new_split_point: + if t[j] in groups[i]: + trace_i = trace_i + (t[j],) + j = j + 1 + logs[i].update({trace_i: obj.data_structure[t]}) + split_point = new_split_point + act_union = act_union.union(set(groups[i])) + i = i + 1 + return list(map(lambda l: IMDataStructureUVCL(l), logs)) + + @classmethod + def _find_split_point(cls, t: Tuple[Any], group: Collection[Any], start: int, ignore: Collection[Any], parameters: Optional[Dict[str, Any]] = None) -> int: + least_cost = 0 + position_with_least_cost = start + cost = 0 + i = start + while i < len(t): + if t[i] in group: + cost = cost - 1 + elif t[i] not in ignore: + cost = cost + 1 + + if cost < least_cost: + least_cost = cost + position_with_least_cost = i + 1 + + i = i + 1 + + return position_with_least_cost + + +class StrictSequenceCutUVCL(StrictSequenceCut[IMDataStructureUVCL], SequenceCutUVCL): + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[List[Collection[Any]]]: + return StrictSequenceCut.holds(obj, parameters) + + +class SequenceCutDFG(SequenceCut[IMDataStructureDFG]): + + @classmethod + def project(cls, obj: IMDataStructureDFG, groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureDFG]: + dfg = obj.dfg + start_activities = [] + end_activities = [] + activities = [] + dfgs = [] + skippable = [] + for g in groups: + skippable.append(False) + activities_idx = {} + for gind, g in enumerate(groups): + for act in g: + activities_idx[act] = int(gind) + i = 0 + while i < len(groups): + to_succ_arcs = Counter() + from_prev_arcs = Counter() + if i < len(groups) - 1: + for (a, b) in dfg.graph: + if a in groups[i] and b in groups[i + 1]: + to_succ_arcs[a] += dfg.graph[(a, b)] + + if i > 0: + for (a, b) in dfg.graph: + if a in groups[i - 1] and b in groups[i]: + from_prev_arcs[b] += dfg.graph[(a, b)] + + if i == 0: + start_activities.append({}) + for a in dfg.start_activities: + if a in groups[i]: + start_activities[i][a] = dfg.start_activities[a] + else: + j = i + while j < activities_idx[a]: + skippable[j] = True + j = j + 1 + else: + start_activities.append(from_prev_arcs) + + if i == len(groups) - 1: + end_activities.append({}) + for a in dfg.end_activities: + if a in groups[i]: + end_activities[i][a] = dfg.end_activities[a] + else: + j = activities_idx[a] + 1 + while j <= i: + skippable[j] = True + j = j + 1 + else: + end_activities.append(to_succ_arcs) + + activities.append({}) + act_count = dfu.get_vertex_frequencies(dfg) + for a in groups[i]: + activities[i][a] = act_count[a] + dfgs.append({}) + for (a, b) in dfg.graph: + if a in groups[i] and b in groups[i]: + dfgs[i][(a, b)] = dfg.graph[(a, b)] + i = i + 1 + i = 0 + while i < len(dfgs): + dfi = DFG() + [dfi.graph.update({(a, b): dfgs[i][(a, b)]}) for (a, b) in dfgs[i]] + [dfi.start_activities.update({a: start_activities[i][a]}) for a in start_activities[i]] + [dfi.end_activities.update({a: end_activities[i][a]}) for a in end_activities[i]] + dfgs[i] = dfi + i = i + 1 + for (a, b) in dfg.graph: + z = activities_idx[b] + j = activities_idx[a] + 1 + while j < z: + skippable[j] = False + j = j + 1 + + return [IMDataStructureDFG(InductiveDFG(dfg=dfgs[i], skip=skippable[i])) for i in range(len(dfgs))] + + +class StrictSequenceCutDFG(StrictSequenceCut[IMDataStructureDFG], SequenceCutDFG): + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[List[Collection[Any]]]: + return StrictSequenceCut.holds(obj, parameters) diff --git a/pm4py/pm4py/algo/discovery/inductive/cuts/utils.py b/pm4py/pm4py/algo/discovery/inductive/cuts/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..89eb83d849d10f7e6faaf225a10b4b6200d010d3 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/cuts/utils.py @@ -0,0 +1,42 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def merge_groups_based_on_activities(a, b, groups): + group_a = None + group_b = None + for group in groups: + if a in group: + group_a = group + if b in group: + group_b = group + groups = [group for group in groups if group != group_a and group != group_b] + groups.append(group_a.union(group_b)) + return groups + + +def merge_lists_based_on_activities(a, b, groups): + group_a = [] + group_b = [] + for group in groups: + if a in group: + group_a = group + if b in group: + group_b = group + if group_a is group_b: + return groups + groups = [group for group in groups if group != group_a and group != group_b] + groups.append(group_a + group_b) + return groups diff --git a/pm4py/pm4py/algo/discovery/inductive/cuts/xor.py b/pm4py/pm4py/algo/discovery/inductive/cuts/xor.py new file mode 100644 index 0000000000000000000000000000000000000000..f9b55b32aaa5b9f4113666826b3494414acb6847 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/cuts/xor.py @@ -0,0 +1,98 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from abc import ABC +from collections import Counter +from typing import Optional, List, Collection, Any, Generic, Dict + +from pm4py.util import nx_utils + +from pm4py.algo.discovery.inductive.cuts.abc import Cut, T +from pm4py.algo.discovery.inductive.dtypes.im_dfg import InductiveDFG +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureDFG +from pm4py.objects.dfg import util as dfu +from pm4py.objects.dfg.obj import DFG +from pm4py.objects.process_tree.obj import Operator, ProcessTree + + +class ExclusiveChoiceCut(Cut[T], ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + return ProcessTree(operator=Operator.XOR) + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[List[Collection[Any]]]: + ''' + This method finds a xor cut in the dfg. + Implementation follows function XorCut on page 188 of + "Robust Process Mining with Guarantees" by Sander J.J. Leemans (ISBN: 978-90-386-4257-4) + + Basic Steps: + 1.) the dfg is transformed to its undirected equivalent. + 2.) we detect the connected components in the graph. + 3.) if there are more than one connected components, the cut exists and is non-minimal. + ''' + nx_dfg = dfu.as_nx_graph(obj.dfg) + nx_und = nx_dfg.to_undirected() + conn_comps = [nx_und.subgraph(c).copy() for c in nx_utils.connected_components(nx_und)] + if len(conn_comps) > 1: + cuts = list() + for comp in conn_comps: + cuts.append(set(comp.nodes)) + return cuts + else: + return None + + +class ExclusiveChoiceCutUVCL(ExclusiveChoiceCut[IMDataStructureUVCL]): + @classmethod + def project(cls, obj: IMDataStructureUVCL, groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureUVCL]: + logs = [Counter() for g in groups] + for t in obj.data_structure: + count = {i: 0 for i in range(len(groups))} + for index, group in enumerate(groups): + for e in t: + if e in group: + count[index] += 1 + count = sorted(list((x, y) for x, y in count.items()), key=lambda x: (x[1], x[0]), reverse=True) + new_trace = tuple() + for e in t: + if e in groups[count[0][0]]: + new_trace = new_trace + (e,) + logs[count[0][0]].update({new_trace: obj.data_structure[t]}) + return list(map(lambda l: IMDataStructureUVCL(l), logs)) + + +class ExclusiveChoiceCutDFG(ExclusiveChoiceCut[IMDataStructureDFG]): + + @classmethod + def project(cls, obj: IMDataStructureDFG, groups: List[Collection[Any]], parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureDFG]: + dfg = obj.dfg + dfgs = [] + for g in groups: + dfg_new = DFG() + for a in dfg.start_activities: + if a in g: + dfg_new.start_activities[a] = dfg.start_activities[a] + for a in dfg.end_activities: + if a in g: + dfg_new.end_activities[a] = dfg.end_activities[a] + for (a, b) in dfg.graph: + if a in g and b in g: + dfg_new.graph[(a, b)] = dfg.graph[(a, b)] + dfgs.append(dfg_new) + return list(map(lambda d: IMDataStructureDFG(InductiveDFG(dfg=d, skip=False)), dfgs)) diff --git a/pm4py/pm4py/algo/discovery/inductive/dtypes/__init__.py b/pm4py/pm4py/algo/discovery/inductive/dtypes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e8fa60c21e155b611bd299ff7784b56b9c7ed793 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/dtypes/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.inductive.dtypes import im_ds, im_dfg \ No newline at end of file diff --git a/pm4py/pm4py/algo/discovery/inductive/dtypes/im_dfg.py b/pm4py/pm4py/algo/discovery/inductive/dtypes/im_dfg.py new file mode 100644 index 0000000000000000000000000000000000000000..3c8e5805269c81f6a3edda201853942ff41dff56 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/dtypes/im_dfg.py @@ -0,0 +1,32 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.dfg.obj import DFG + + +class InductiveDFG: + + def __init__(self, dfg: DFG, skip: bool = False): + self._dfg = dfg + self._skip = skip + + @property + def dfg(self) -> DFG: + return self._dfg + + @property + def skip(self) -> bool: + return self._skip diff --git a/pm4py/pm4py/algo/discovery/inductive/dtypes/im_ds.py b/pm4py/pm4py/algo/discovery/inductive/dtypes/im_ds.py new file mode 100644 index 0000000000000000000000000000000000000000..db89acf25ff4f52d2a6958127d5977187e3f407d --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/dtypes/im_ds.py @@ -0,0 +1,78 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from abc import ABC +from typing import TypeVar, Generic, Optional + +from pm4py.algo.discovery.inductive.dtypes.im_dfg import InductiveDFG +from pm4py.objects.dfg.obj import DFG +from pm4py.util.compression import util as comut +from pm4py.util.compression.dtypes import UVCL + +T = TypeVar('T') + + +class IMDataStructure(ABC, Generic[T]): + """ + The IMDataStructure is a helper class that unifies all possible data structures (typically logs or dfgs) that can + be used for the classical Inductive Miner. The generic TypeVar 'T' is supposed to be the underlying data object + used, and, should always be able to construct a DFG object. For example, T can be a dataframe, some other + object representing an event log or a DFG itself. + """ + + def __init__(self, obj: T): + self._obj = obj + + @property + def dfg(self) -> DFG: + pass + + @property + def data_structure(self) -> T: + return self._obj + + +class IMDataStructureLog(IMDataStructure[T], ABC, Generic[T]): + """ + Generic class intended to represent that any subclass carries information that is captured in an event log. + """ + + +class IMDataStructureUVCL(IMDataStructureLog[UVCL]): + """ + Log-Based data structure class that represents the event log as a 'Univariate Variant Compressed Log (UVCL)' + """ + + def __init__(self, obj: UVCL, dfg: Optional[DFG] = None): + super().__init__(obj) + if dfg is None: + self._dfg = comut.discover_dfg_uvcl(self._obj) + else: + self._dfg = dfg + + @property + def dfg(self) -> DFG: + return self._dfg + + +class IMDataStructureDFG(IMDataStructure[InductiveDFG]): + """ + DFG-Based data structure class + """ + + @property + def dfg(self) -> DFG: + return self._obj.dfg diff --git a/pm4py/pm4py/algo/discovery/inductive/fall_through/__init__.py b/pm4py/pm4py/algo/discovery/inductive/fall_through/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..62835a314c59837816db0036f84551305569d3a5 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/fall_through/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.inductive.fall_through import abc, activity_concurrent, activity_once_per_trace, empty_traces, \ + flower, strict_tau_loop, tau_loop diff --git a/pm4py/pm4py/algo/discovery/inductive/fall_through/abc.py b/pm4py/pm4py/algo/discovery/inductive/fall_through/abc.py new file mode 100644 index 0000000000000000000000000000000000000000..02f4ffaa4b4fb04bb8d14a838cd2e3e4d46b5e0b --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/fall_through/abc.py @@ -0,0 +1,36 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from abc import ABC, abstractmethod +from typing import Generic, TypeVar, Tuple, List, Optional, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure +from pm4py.objects.process_tree.obj import ProcessTree + +T = TypeVar('T', bound=IMDataStructure) + + +class FallThrough(ABC, Generic[T]): + + @classmethod + @abstractmethod + def holds(cls, t: T, parameters: Optional[Dict[str, Any]] = None) -> bool: + pass + + @classmethod + @abstractmethod + def apply(cls, t: T, pool=None, manager=None, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[ProcessTree, List[T]]]: + pass diff --git a/pm4py/pm4py/algo/discovery/inductive/fall_through/activity_concurrent.py b/pm4py/pm4py/algo/discovery/inductive/fall_through/activity_concurrent.py new file mode 100644 index 0000000000000000000000000000000000000000..c6856a5a6c24f9bb8f185c569f12fc72476b54b7 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/fall_through/activity_concurrent.py @@ -0,0 +1,108 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from typing import Optional, Tuple, List, Any, Dict + +from pm4py.algo.discovery.inductive.cuts.factory import CutFactory +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.inductive.fall_through.abc import FallThrough +from pm4py.algo.discovery.inductive.variants.instances import IMInstance +from pm4py.objects.process_tree.obj import ProcessTree, Operator +from pm4py.util.compression import util as comut +from pm4py.util.compression.dtypes import UVCL +from enum import Enum +from pm4py.util import exec_utils, constants + + +class Parameters(Enum): + MULTIPROCESSING = "multiprocessing" + + +class ActivityConcurrentUVCL(FallThrough[IMDataStructureUVCL]): + MULTI_PROCESSING_LOWER_BOUND = 20 + + @classmethod + def _process_candidate(cls, c: Any, log: UVCL, queue=None, ev=None, parameters: Optional[Dict[str, Any]] = None): + l_alt = Counter() + for t in log: + l_alt[tuple(filter(lambda e: e != c, t))] = log[t] + cut = cls._find_cut(IMDataStructureUVCL(l_alt), ev, parameters=parameters) + if queue is not None: + queue.put((c, cut)) + return cut if cut is not None else None + + @classmethod + def _get_candidate(cls, obj: IMDataStructureUVCL, pool, manager, parameters: Optional[Dict[str, Any]] = None) -> Optional[Any]: + if parameters is None: + parameters = {} + + enable_multiprocessing = exec_utils.get_param_value(Parameters.MULTIPROCESSING, parameters, constants.ENABLE_MULTIPROCESSING_DEFAULT) + + log = obj.data_structure + candidates = sorted(list(comut.get_alphabet(log))) + if pool is None or manager is None or not enable_multiprocessing or len(candidates) <= ActivityConcurrentUVCL.MULTI_PROCESSING_LOWER_BOUND: + for a in candidates: + cut = cls._process_candidate(a, log, parameters=parameters) + if cut is not None: + return a + else: + q = manager.Queue() + ev = manager.Event() + # avoid dangerous freealloc from Python's garbage collector + manager.support_list.append(q) + manager.support_list.append(ev) + + for a in candidates: + pool.apply_async(cls._process_candidate, (a, log, q, ev, parameters)) + potentials = set(candidates) + while len(potentials) > 0: + (c, cut) = q.get(block=True) + if cut is None: + potentials.remove(c) + else: + ev.set() + return c + + return None + + @classmethod + def _find_cut(cls, obj: IMDataStructureUVCL, ev, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[ProcessTree, List[IMDataStructureUVCL]]]: + for c in CutFactory.get_cuts(obj, IMInstance.IM, parameters=parameters): + if ev is not None and ev.is_set(): + return None + r = c.apply(obj, parameters) + if r is not None: + return r + return None + + @classmethod + def holds(cls, obj: IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> bool: + return cls._get_candidate(obj, None, None, parameters) is not None + + @classmethod + def apply(cls, obj: IMDataStructureUVCL, pool=None, manager=None, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[ProcessTree, List[IMDataStructureUVCL]]]: + candidate = cls._get_candidate(obj, pool, manager, parameters) + if candidate is None: + return None + log = obj.data_structure + l_a = Counter() + l_other = Counter() + for t in log: + l_a.update({tuple(filter(lambda e: e == candidate, t)): log[t]}) + l_other.update({tuple(filter(lambda e: e != candidate, t)): log[t]}) + return ProcessTree(operator=Operator.PARALLEL), [IMDataStructureUVCL(l_a), IMDataStructureUVCL(l_other)] diff --git a/pm4py/pm4py/algo/discovery/inductive/fall_through/activity_once_per_trace.py b/pm4py/pm4py/algo/discovery/inductive/fall_through/activity_once_per_trace.py new file mode 100644 index 0000000000000000000000000000000000000000..aabc7865c48248cf2685a10a0a6e55a52b3acaba --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/fall_through/activity_once_per_trace.py @@ -0,0 +1,37 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +from typing import Any, Optional, Dict + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.inductive.fall_through.activity_concurrent import ActivityConcurrentUVCL +from pm4py.util.compression import util as comut + + +class ActivityOncePerTraceUVCL(ActivityConcurrentUVCL): + + @classmethod + def _get_candidate(cls, obj: IMDataStructureUVCL, pool=None, manager=None, parameters: Optional[Dict[str, Any]] = None) -> Optional[Any]: + candidates = sorted(list(comut.get_alphabet(obj.data_structure))) + for t in obj.data_structure: + cc = [x for x in candidates] + for candi in cc: + if len(list(filter(lambda e: e == candi, t))) != 1: + candidates.remove(candi) + if len(candidates) == 0: + return None + return next(iter(candidates)) diff --git a/pm4py/pm4py/algo/discovery/inductive/fall_through/empty_traces.py b/pm4py/pm4py/algo/discovery/inductive/fall_through/empty_traces.py new file mode 100644 index 0000000000000000000000000000000000000000..cdc63c902a8be279991e1a14fc7d0dc73676f686 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/fall_through/empty_traces.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from typing import Tuple, List, Optional, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureDFG +from pm4py.algo.discovery.inductive.fall_through.abc import FallThrough +from pm4py.objects.process_tree.obj import ProcessTree, Operator +from pm4py.objects.dfg.obj import DFG +from pm4py.algo.discovery.inductive.dtypes.im_dfg import InductiveDFG +from copy import copy + + +class EmptyTracesUVCL(FallThrough[IMDataStructureUVCL]): + + @classmethod + def apply(cls, obj: IMDataStructureUVCL, pool=None, manager=None, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[ProcessTree, List[IMDataStructureUVCL]]]: + if cls.holds(obj, parameters): + data_structure = copy(obj.data_structure) + del data_structure[()] + if data_structure: + return ProcessTree(operator=Operator.XOR), [IMDataStructureUVCL(Counter()), + IMDataStructureUVCL(data_structure)] + else: + return ProcessTree(), [] + else: + return None + + @classmethod + def holds(cls, obj: IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> bool: + return len(list(filter(lambda t: len(t) == 0, obj.data_structure))) > 0 + + +class EmptyTracesDFG(FallThrough[IMDataStructureDFG]): + @classmethod + def apply(cls, obj: IMDataStructureDFG, pool=None, manager=None, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[ProcessTree, List[IMDataStructureDFG]]]: + if cls.holds(obj, parameters): + return ProcessTree(operator=Operator.XOR), [IMDataStructureDFG(InductiveDFG(DFG())), + IMDataStructureDFG(InductiveDFG(obj.data_structure.dfg))] + return None + + @classmethod + def holds(cls, obj: IMDataStructureDFG, parameters: Optional[Dict[str, Any]] = None) -> bool: + return obj.data_structure.skip diff --git a/pm4py/pm4py/algo/discovery/inductive/fall_through/factory.py b/pm4py/pm4py/algo/discovery/inductive/fall_through/factory.py new file mode 100644 index 0000000000000000000000000000000000000000..b1aa8ceea54db9e73cd904a288f8d1730e6fd202 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/fall_through/factory.py @@ -0,0 +1,71 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import List, TypeVar, Tuple, Optional, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure, IMDataStructureUVCL +from pm4py.algo.discovery.inductive.fall_through.abc import FallThrough +from pm4py.algo.discovery.inductive.fall_through.activity_concurrent import ActivityConcurrentUVCL +from pm4py.algo.discovery.inductive.fall_through.activity_once_per_trace import ActivityOncePerTraceUVCL +from pm4py.algo.discovery.inductive.fall_through.empty_traces import EmptyTracesUVCL, EmptyTracesDFG +from pm4py.algo.discovery.inductive.fall_through.flower import FlowerModelUVCL, FlowerModelDFG +from pm4py.algo.discovery.inductive.fall_through.strict_tau_loop import StrictTauLoopUVCL +from pm4py.algo.discovery.inductive.fall_through.tau_loop import TauLoopUVCL +from pm4py.algo.discovery.inductive.variants.instances import IMInstance +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.util import exec_utils +from enum import Enum + + +T = TypeVar('T', bound=IMDataStructure) +S = TypeVar('S', bound=FallThrough) + + +class Parameters(Enum): + DISABLE_FALLTHROUGHS = "disable_fallthroughs" + + +class FallThroughFactory: + + @classmethod + def get_fall_throughs(cls, obj: T, inst: IMInstance, parameters: Optional[Dict[str, Any]] = None) -> List[S]: + if parameters is None: + parameters = {} + + disable_fallthroughs = exec_utils.get_param_value(Parameters.DISABLE_FALLTHROUGHS, parameters, False) + + if inst is IMInstance.IM or inst is IMInstance.IMf: + if type(obj) is IMDataStructureUVCL: + if disable_fallthroughs: + return [EmptyTracesUVCL, FlowerModelUVCL] + else: + return [EmptyTracesUVCL, ActivityOncePerTraceUVCL, ActivityConcurrentUVCL, StrictTauLoopUVCL, + TauLoopUVCL, FlowerModelUVCL] + if inst is IMInstance.IMd: + if disable_fallthroughs: + return [EmptyTracesDFG, FlowerModelDFG] + else: + return [EmptyTracesDFG, FlowerModelDFG] + return list() + + @classmethod + def fall_through(cls, obj: T, inst: IMInstance, pool, manager, parameters: Optional[Dict[str, Any]] = None) -> Tuple[ProcessTree, List[T]]: + for f in FallThroughFactory.get_fall_throughs(obj, inst, parameters): + r = f.apply(obj, pool, manager, parameters) + if r is not None: + return r + return None diff --git a/pm4py/pm4py/algo/discovery/inductive/fall_through/flower.py b/pm4py/pm4py/algo/discovery/inductive/fall_through/flower.py new file mode 100644 index 0000000000000000000000000000000000000000..420a67e234545996ceb03527f285bf8e8392985d --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/fall_through/flower.py @@ -0,0 +1,66 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Tuple, List, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureDFG +from pm4py.algo.discovery.inductive.fall_through.abc import FallThrough +from pm4py.algo.discovery.inductive.fall_through.empty_traces import EmptyTracesUVCL +from pm4py.objects.process_tree.obj import ProcessTree, Operator +from pm4py.util.compression import util as comut +from pm4py.util.compression.dtypes import UVCL +from pm4py.objects.dfg.obj import DFG +from pm4py.algo.discovery.inductive.dtypes.im_dfg import InductiveDFG + + +class FlowerModelUVCL(FallThrough[IMDataStructureUVCL]): + + @classmethod + def holds(cls, obj: IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> bool: + return not EmptyTracesUVCL.holds(obj, parameters) + + @classmethod + def apply(cls, obj: IMDataStructureUVCL, pool=None, manager=None, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[ProcessTree, List[IMDataStructureUVCL]]]: + log = obj.data_structure + uvcl_do = UVCL() + for a in sorted(list(comut.get_alphabet(log))): + uvcl_do[(a,)] = 1 + uvcl_redo = UVCL() + im_uvcl_do = IMDataStructureUVCL(uvcl_do) + im_uvcl_redo = IMDataStructureUVCL(uvcl_redo) + return ProcessTree(operator=Operator.LOOP), [im_uvcl_do, im_uvcl_redo] + + +class FlowerModelDFG(FallThrough[IMDataStructureDFG]): + @classmethod + def holds(cls, obj: IMDataStructureDFG, parameters: Optional[Dict[str, Any]] = None) -> bool: + return True + + @classmethod + def apply(cls, obj: IMDataStructureDFG, pool=None, manager=None, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[ProcessTree, List[IMDataStructureDFG]]]: + activities = set(obj.dfg.start_activities).union(set(obj.dfg.end_activities)).union(set(x[0] for x in obj.dfg.graph)).union(set(x[1] for x in obj.dfg.graph)) + dfg_do = DFG() + for a in activities: + dfg_do.start_activities[a] = 1 + dfg_do.end_activities[a] = 1 + dfg_redo = DFG() + im_dfg_do = IMDataStructureDFG(InductiveDFG(dfg_do)) + im_dfg_redo = IMDataStructureDFG(InductiveDFG(dfg_redo)) + return ProcessTree(operator=Operator.LOOP), [im_dfg_do, im_dfg_redo] + diff --git a/pm4py/pm4py/algo/discovery/inductive/fall_through/strict_tau_loop.py b/pm4py/pm4py/algo/discovery/inductive/fall_through/strict_tau_loop.py new file mode 100644 index 0000000000000000000000000000000000000000..af97def6c06b5e2f432fb1b65012fe874c163823 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/fall_through/strict_tau_loop.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from typing import Optional, Tuple, List, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.inductive.fall_through.abc import FallThrough +from pm4py.objects.process_tree.obj import ProcessTree, Operator +from pm4py.util.compression import util as comut +from pm4py.util.compression.dtypes import UVCL + + +class StrictTauLoopUVCL(FallThrough[IMDataStructureUVCL]): + + @classmethod + def _get_projected_log(cls, log: UVCL, parameters: Optional[Dict[str, Any]] = None) -> UVCL: + start_activities = comut.get_start_activities(log) + end_activities = comut.get_end_activities(log) + proj = Counter() + for t in log: + x = 0 + for i in range(1, len(t)): + if t[i] in start_activities and t[i - 1] in end_activities: + proj.update({t[x:i]: log[t]}) + x = i + proj.update({t[x:len(t)]: log[t]}) + return proj + + @classmethod + def holds(cls, obj: IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> bool: + log = obj.data_structure + return sum(cls._get_projected_log(log).values()) > sum(log.values()) + + @classmethod + def apply(cls, obj: IMDataStructureUVCL, pool=None, manager=None, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[ProcessTree, List[IMDataStructureUVCL]]]: + log = obj.data_structure + proj = cls._get_projected_log(log) + if sum(proj.values()) > sum(log.values()): + return ProcessTree(operator=Operator.LOOP), [IMDataStructureUVCL(proj), IMDataStructureUVCL(Counter())] diff --git a/pm4py/pm4py/algo/discovery/inductive/fall_through/tau_loop.py b/pm4py/pm4py/algo/discovery/inductive/fall_through/tau_loop.py new file mode 100644 index 0000000000000000000000000000000000000000..f45bec04c6155cdee715c90055a6e707fd2130b9 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/fall_through/tau_loop.py @@ -0,0 +1,38 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from typing import Optional, Dict, Any + +from pm4py.algo.discovery.inductive.fall_through.strict_tau_loop import StrictTauLoopUVCL +from pm4py.util.compression import util as comut +from pm4py.util.compression.dtypes import UVCL + + +class TauLoopUVCL(StrictTauLoopUVCL): + + @classmethod + def _get_projected_log(cls, log: UVCL, parameters: Optional[Dict[str, Any]] = None) -> UVCL: + start_activities = comut.get_start_activities(log) + proj = Counter() + for t in log: + x = 0 + for i in range(1, len(t)): + if t[i] in start_activities: + proj.update({t[x:i]: log[t]}) + x = i + proj.update({t[x:len(t)]: log[t]}) + return proj diff --git a/pm4py/pm4py/algo/discovery/inductive/variants/__init__.py b/pm4py/pm4py/algo/discovery/inductive/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b2c1dfd3be0bd2f3addf0d5ff208142c75eea506 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.inductive.variants import abc, im, imd, imf + diff --git a/pm4py/pm4py/algo/discovery/inductive/variants/abc.py b/pm4py/pm4py/algo/discovery/inductive/variants/abc.py new file mode 100644 index 0000000000000000000000000000000000000000..503160260ec11d55a59af911ebca5e8e856c543a --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/variants/abc.py @@ -0,0 +1,93 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import os +from abc import abstractmethod, ABC +from typing import Optional, Tuple, List, TypeVar, Generic, Dict, Any + +from pm4py.algo.discovery.inductive.base_case.factory import BaseCaseFactory +from pm4py.algo.discovery.inductive.cuts.factory import CutFactory +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure +from pm4py.algo.discovery.inductive.fall_through.factory import FallThroughFactory +from pm4py.algo.discovery.inductive.variants.instances import IMInstance +from pm4py.objects.process_tree.obj import ProcessTree +from enum import Enum +from pm4py.util import exec_utils, constants + + +T = TypeVar('T', bound=IMDataStructure) + + +class Parameters(Enum): + MULTIPROCESSING = "multiprocessing" + + +class InductiveMinerFramework(ABC, Generic[T]): + """ + Base Class Implementing the Inductive Miner Framework. + How to Extend: + 1. Create a dedicated IMDataStructure class (see pm4py.algo.discovery.inductive.dtypes.im_ds.py) + 2. Create dedicated Base Cases, Cuts and Fall Throughs for the newly constructed IMDataStructure + 3. Extend the BaseCaseFactory, CutFactory and FallThroughFactory with the newly created functions + 4. Create a subclass of this class indicating the type on which it is defined and the corresponding IMInstance. + """ + + def __init__(self, parameters: Optional[Dict[str, Any]] = None): + if parameters is None: + parameters = {} + + enable_multiprocessing = exec_utils.get_param_value(Parameters.MULTIPROCESSING, parameters, constants.ENABLE_MULTIPROCESSING_DEFAULT) + + if enable_multiprocessing: + from multiprocessing import Pool, Manager + + self._pool = Pool(os.cpu_count() - 1) + self._manager = Manager() + self._manager.support_list = [] + else: + self._pool = None + self._manager = None + + def apply_base_cases(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[ProcessTree]: + return BaseCaseFactory.apply_base_cases(obj, self.instance(), parameters=parameters) + + def find_cut(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[ProcessTree, List[T]]]: + return CutFactory.find_cut(obj, self.instance(), parameters=parameters) + + def fall_through(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Tuple[ProcessTree, List[T]]: + return FallThroughFactory.fall_through(obj, self.instance(), self._pool, self._manager, parameters=parameters) + + def apply(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + tree = self.apply_base_cases(obj, parameters) + if tree is None: + cut = self.find_cut(obj, parameters) + if cut is not None: + tree = self._recurse(cut[0], cut[1], parameters=parameters) + if tree is None: + ft = self.fall_through(obj, parameters) + tree = self._recurse(ft[0], ft[1], parameters=parameters) + return tree + + def _recurse(self, tree: ProcessTree, objs: List[T], parameters: Optional[Dict[str, Any]] = None): + children = [self.apply(obj, parameters=parameters) for obj in objs] + for c in children: + c.parent = tree + tree.children.extend(children) + return tree + + @abstractmethod + def instance(self) -> IMInstance: + pass diff --git a/pm4py/pm4py/algo/discovery/inductive/variants/im.py b/pm4py/pm4py/algo/discovery/inductive/variants/im.py new file mode 100644 index 0000000000000000000000000000000000000000..8aacbb363e70d894db14e43d6fb5963fbfa48b7c --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/variants/im.py @@ -0,0 +1,39 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import TypeVar, Generic, Dict, Any, Optional + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureLog +from pm4py.algo.discovery.inductive.fall_through.empty_traces import EmptyTracesUVCL +from pm4py.algo.discovery.inductive.variants.abc import InductiveMinerFramework +from pm4py.algo.discovery.inductive.variants.instances import IMInstance +from pm4py.objects.process_tree.obj import ProcessTree + +T = TypeVar('T', bound=IMDataStructureLog) + + +class IM(Generic[T], InductiveMinerFramework[T]): + + def instance(self) -> IMInstance: + return IMInstance.IM + + +class IMUVCL(IM[IMDataStructureUVCL]): + def apply(self, obj: IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> ProcessTree: + empty_traces = EmptyTracesUVCL.apply(obj, parameters) + if empty_traces is not None: + return self._recurse(empty_traces[0], empty_traces[1], parameters) + return super().apply(obj, parameters) diff --git a/pm4py/pm4py/algo/discovery/inductive/variants/imd.py b/pm4py/pm4py/algo/discovery/inductive/variants/imd.py new file mode 100644 index 0000000000000000000000000000000000000000..b6240fe2e9f0e73f29f3661ada4351cc1dec1815 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/variants/imd.py @@ -0,0 +1,25 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureDFG +from pm4py.algo.discovery.inductive.variants.abc import InductiveMinerFramework +from pm4py.algo.discovery.inductive.variants.instances import IMInstance + + +class IMD(InductiveMinerFramework[IMDataStructureDFG]): + + def instance(self) -> IMInstance: + return IMInstance.IMd diff --git a/pm4py/pm4py/algo/discovery/inductive/variants/imf.py b/pm4py/pm4py/algo/discovery/inductive/variants/imf.py new file mode 100644 index 0000000000000000000000000000000000000000..b018c16b1f87eeec84ebb72a4c10a0115f930691 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/variants/imf.py @@ -0,0 +1,98 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import TypeVar, Generic, Dict, Any, Optional + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL, IMDataStructureLog +from pm4py.algo.discovery.inductive.fall_through.empty_traces import EmptyTracesUVCL +from pm4py.algo.discovery.inductive.variants.abc import InductiveMinerFramework +from pm4py.algo.discovery.inductive.variants.instances import IMInstance +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.dfg.obj import DFG +from copy import copy +from enum import Enum +from pm4py.util import exec_utils + + +T = TypeVar('T', bound=IMDataStructureLog) + + +class IMFParameters(Enum): + NOISE_THRESHOLD = "noise_threshold" + + +class IMF(Generic[T], InductiveMinerFramework[T]): + + def instance(self) -> IMInstance: + return IMInstance.IMf + + +class IMFUVCL(IMF[IMDataStructureUVCL]): + def apply(self, obj: IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None, second_iteration: bool = False) -> ProcessTree: + noise_threshold = exec_utils.get_param_value(IMFParameters.NOISE_THRESHOLD, parameters, 0.0) + + empty_traces = EmptyTracesUVCL.apply(obj, parameters) + if empty_traces is not None and empty_traces[1]: + number_original_traces = sum(y for y in obj.data_structure.values()) + number_filtered_traces = sum(y for y in empty_traces[1][1].data_structure.values()) + + if number_original_traces - number_filtered_traces > noise_threshold * number_original_traces: + return self._recurse(empty_traces[0], empty_traces[1], parameters) + else: + obj = empty_traces[1][1] + + tree = self.apply_base_cases(obj, parameters) + if tree is None: + cut = self.find_cut(obj, parameters) + if cut is not None: + tree = self._recurse(cut[0], cut[1], parameters=parameters) + if tree is None: + if not second_iteration: + filtered_ds = self.__filter_dfg_noise(obj, noise_threshold) + tree = self.apply(filtered_ds, parameters=parameters, second_iteration=True) + if tree is None: + ft = self.fall_through(obj, parameters) + tree = self._recurse(ft[0], ft[1], parameters=parameters) + return tree + + def __filter_dfg_noise(self, obj, noise_threshold): + start_activities = copy(obj.dfg.start_activities) + end_activities = copy(obj.dfg.end_activities) + dfg = copy(obj.dfg.graph) + outgoing_max_occ = {} + for x, y in dfg.items(): + act = x[0] + if act not in outgoing_max_occ: + outgoing_max_occ[act] = y + else: + outgoing_max_occ[act] = max(y, outgoing_max_occ[act]) + if act in end_activities: + outgoing_max_occ[act] = max(outgoing_max_occ[act], end_activities[act]) + dfg_list = sorted([(x, y) for x, y in dfg.items()], key=lambda x: (x[1], x[0]), reverse=True) + dfg_list = [x for x in dfg_list if x[1] > noise_threshold * outgoing_max_occ[x[0][0]]] + dfg_list = [x[0] for x in dfg_list] + # filter the elements in the DFG + graph = {x: y for x, y in dfg.items() if x in dfg_list} + + dfg = DFG() + for sa in start_activities: + dfg.start_activities[sa] = start_activities[sa] + for ea in end_activities: + dfg.end_activities[ea] = end_activities[ea] + for act in graph: + dfg.graph[act] = graph[act] + + return IMDataStructureUVCL(obj.data_structure, dfg) diff --git a/pm4py/pm4py/algo/discovery/inductive/variants/instances.py b/pm4py/pm4py/algo/discovery/inductive/variants/instances.py new file mode 100644 index 0000000000000000000000000000000000000000..96bfe281c0d090037e07281180780b9bdb507939 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/inductive/variants/instances.py @@ -0,0 +1,25 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum, auto + + +class IMInstance(Enum): + IM = auto() + IMd = auto() + IMf = auto() + IMa = auto() + IMi = auto() diff --git a/pm4py/pm4py/algo/discovery/log_skeleton/__init__.py b/pm4py/pm4py/algo/discovery/log_skeleton/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d33d26c72babda6c22226892aed05335c42e4f9a --- /dev/null +++ b/pm4py/pm4py/algo/discovery/log_skeleton/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.log_skeleton import variants, trace_skel, algorithm + diff --git a/pm4py/pm4py/algo/discovery/log_skeleton/algorithm.py b/pm4py/pm4py/algo/discovery/log_skeleton/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..fd254924c65fca000b679bf28e64ece881be1bf7 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/log_skeleton/algorithm.py @@ -0,0 +1,78 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.log_skeleton.variants import classic +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union, Tuple, List +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Variants(Enum): + CLASSIC = classic + + +CLASSIC = Variants.CLASSIC +DEFAULT_VARIANT = CLASSIC + +VERSIONS = {CLASSIC} + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discover a log skeleton from an event log + + Parameters + ------------- + log + Event log + variant + Variant of the algorithm, possible values: + - Variants.CLASSIC + parameters + Parameters of the algorithm, including: + - the activity key (Parameters.ACTIVITY_KEY) + - the noise threshold (Parameters.NOISE_THRESHOLD) + + Returns + ------------- + model + Log skeleton model + """ + return exec_utils.get_variant(variant).apply(log, parameters=parameters) + + +def apply_from_variants_list(var_list: List[Tuple[str, int]], variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discovers the log skeleton from the variants list + + Parameters + --------------- + var_list + Variants list + variant + Variant of the algorithm, possible values: + - Variants.CLASSIC + parameters + Parameters + + Returns + ------------- + model + Log skeleton model + """ + return exec_utils.get_variant(variant).apply_from_variants_list(var_list, parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/log_skeleton/trace_skel.py b/pm4py/pm4py/algo/discovery/log_skeleton/trace_skel.py new file mode 100644 index 0000000000000000000000000000000000000000..f9dd74a5dac3ba007f052e2e147e55d96933f610 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/log_skeleton/trace_skel.py @@ -0,0 +1,133 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter + + +def equivalence(trace): + """ + Get the equivalence relations given a list of activities + + Parameters + -------------- + trace + List activities + + Returns + -------------- + rel + Relations inside the trace + """ + ret = list() + freq = activ_freq(trace) + for x in freq: + for y in freq: + if x != y and freq[x] == freq[y]: + for i in range(freq[x]): + ret.append((x, y)) + return ret + + +def after(trace): + """ + Get the after- relations given a list of activities + + Parameters + -------------- + trace + List activities + + Returns + -------------- + rel + After- inside the trace + """ + return list((trace[i], trace[j]) for i in range(len(trace)) for j in range(len(trace)) if j > i) + + +def before(trace): + """ + Get the before- relations given a list of activities + + Parameters + -------------- + trace + List activities + + Returns + -------------- + rel + Before- inside the trace + """ + return list((trace[i], trace[j]) for i in range(len(trace)) for j in range(len(trace)) if j < i) + + +def combos(trace): + """ + Get the combinations between all the activities of the trace relations given a list of activities + + Parameters + -------------- + trace + List activities + + Returns + -------------- + rel + Combos inside the trace + """ + return set((x, y) for x in trace for y in trace if x != y) + + +def directly_follows(trace): + """ + Get the directly-follows relations given a list of activities + + Parameters + -------------- + trace + List activities + + Returns + -------------- + rel + Directly-follows relations inside the trace + """ + return list((trace[i], trace[i+1]) for i in range(len(trace)-1)) + + +def activ_freq(trace): + """ + Gets the frequency of activities happening in a trace + + Parameters + -------------- + trace + List activities + + Returns + -------------- + freq + Frequency of activities + """ + return Counter(trace) + + +def get_trace_info(trace): + """ + Technical method for conformance checking + """ + return (equivalence(trace), after(trace), before(trace), combos(trace), directly_follows(trace), activ_freq(trace)) diff --git a/pm4py/pm4py/algo/discovery/log_skeleton/variants/__init__.py b/pm4py/pm4py/algo/discovery/log_skeleton/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0045063f9892a0c2187bdfb21b64097f7d36baf6 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/log_skeleton/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.log_skeleton.variants import classic diff --git a/pm4py/pm4py/algo/discovery/log_skeleton/variants/classic.py b/pm4py/pm4py/algo/discovery/log_skeleton/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..0dbc3f690767484d8e437187fcc44260486cfadc --- /dev/null +++ b/pm4py/pm4py/algo/discovery/log_skeleton/variants/classic.py @@ -0,0 +1,347 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from enum import Enum + +from pm4py.algo.discovery.log_skeleton import trace_skel +from pm4py.objects.log.util import xes +from pm4py.util import exec_utils +from pm4py.util import variants_util, pandas_utils +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_CASEID_KEY, CASE_CONCEPT_NAME +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +import pandas as pd + + +class Parameters(Enum): + # parameter for the noise threshold + NOISE_THRESHOLD = "noise_threshold" + # considered constraints in conformance checking among: equivalence, always_after, always_before, never_together, directly_follows, activ_freq + CONSIDERED_CONSTRAINTS = "considered_constraints" + # default choice for conformance checking + DEFAULT_CONSIDERED_CONSTRAINTS = ["equivalence", "always_after", "always_before", "never_together", + "directly_follows", "activ_freq"] + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + + +NOISE_THRESHOLD = Parameters.NOISE_THRESHOLD +CONSIDERED_CONSTRAINTS = Parameters.CONSIDERED_CONSTRAINTS +DEFAULT_CONSIDERED_CONSTRAINTS = Parameters.DEFAULT_CONSIDERED_CONSTRAINTS +ACTIVITY_KEY = Parameters.ACTIVITY_KEY +PARAMETER_VARIANT_DELIMITER = Parameters.PARAMETER_VARIANT_DELIMITER + + +class Outputs(Enum): + EQUIVALENCE = "equivalence" + ALWAYS_AFTER = "always_after" + ALWAYS_BEFORE = "always_before" + NEVER_TOGETHER = "never_together" + DIRECTLY_FOLLOWS = "directly_follows" + ACTIV_FREQ = "activ_freq" + + +def equivalence(logs_traces, all_activs, noise_threshold=0): + """ + Gets the equivalence relations given the traces of the log + + Parameters + ------------- + logs_traces + Traces of the log + all_activs + All the activities + noise_threshold + Noise threshold + + Returns + -------------- + rel + List of relations in the log + """ + ret0 = Counter() + for trace in logs_traces: + rs = Counter(trace_skel.equivalence(list(trace))) + for k in rs: + rs[k] = rs[k] * logs_traces[trace] + ret0 += rs + ret = set(x for x, y in ret0.items() if y >= all_activs[x[0]] * (1.0 - noise_threshold)) + return ret + + +def always_after(logs_traces, all_activs, noise_threshold=0): + """ + Gets the always-after relations given the traces of the log + + Parameters + ------------- + logs_traces + Traces of the log + all_activs + All the activities + noise_threshold + Noise threshold + + Returns + -------------- + rel + List of relations in the log + """ + ret0 = Counter() + for trace in logs_traces: + rs = Counter(trace_skel.after(list(trace))) + for k in rs: + rs[k] = rs[k] * logs_traces[trace] + ret0 += rs + first_count = Counter() + for x, y in ret0.items(): + first_count[x[0]] += y + ret = set(x for x, y in ret0.items() if y >= first_count[x[0]] * (1.0 - noise_threshold)) + return ret + + +def always_before(logs_traces, all_activs, noise_threshold=0): + """ + Gets the always-before relations given the traces of the log + + Parameters + ------------- + logs_traces + Traces of the log + all_activs + All the activities + noise_threshold + Noise threshold + + Returns + -------------- + rel + List of relations in the log + """ + ret0 = Counter() + for trace in logs_traces: + rs = Counter(trace_skel.before(list(trace))) + for k in rs: + rs[k] = rs[k] * logs_traces[trace] + ret0 += rs + first_count = Counter() + for x, y in ret0.items(): + first_count[x[0]] += y + ret = set(x for x, y in ret0.items() if y >= first_count[x[0]] * (1.0 - noise_threshold)) + return ret + + +def never_together(logs_traces, all_activs, len_log, noise_threshold=0): + """ + Gets the never-together relations given the traces of the log + + Parameters + ------------- + logs_traces + Traces of the log + all_activs + All the activities + len_log + Length of the log + noise_threshold + Noise threshold + + Returns + -------------- + rel + List of relations in the log + """ + all_combos = set((x, y) for x in all_activs for y in all_activs if x != y) + ret0 = Counter() + for k in all_combos: + ret0[k] = all_activs[k[0]] + for trace in logs_traces: + rs = Counter(trace_skel.combos(list(trace))) + for k in rs: + rs[k] = rs[k] * logs_traces[trace] + ret0 -= rs + ret = set(x for x, y in ret0.items() if y >= all_activs[x[0]] * (1.0 - noise_threshold)) + return ret + + +def directly_follows(logs_traces, all_activs, noise_threshold=0): + """ + Gets the allowed directly-follows relations given the traces of the log + + Parameters + ------------- + logs_traces + Traces of the log + all_activs + All the activities + noise_threshold + Noise threshold + + Returns + -------------- + rel + List of relations in the log + """ + ret0 = Counter() + for trace in logs_traces: + rs = Counter(trace_skel.directly_follows(list(trace))) + for k in rs: + rs[k] = rs[k] * logs_traces[trace] + ret0 += rs + ret = set(x for x, y in ret0.items() if y >= all_activs[x[0]] * (1.0 - noise_threshold)) + return ret + + +def activ_freq(logs_traces, all_activs, len_log, noise_threshold=0): + """ + Gets the allowed activities frequencies given the traces of the log + + Parameters + ------------- + logs_traces + Traces of the log + all_activs + All the activities + len_log + Length of the log + noise_threshold + Noise threshold + + Returns + -------------- + rel + List of relations in the log + """ + ret0 = {} + ret = {} + for trace in logs_traces: + rs = trace_skel.activ_freq(trace) + for act in all_activs: + if act not in rs: + rs[act] = 0 + for act in rs: + if act not in ret0: + ret0[act] = Counter() + ret0[act][rs[act]] += logs_traces[trace] + for act in ret0: + ret0[act] = sorted(list((x, y) for x, y in ret0[act].items()), key=lambda x: x[1], reverse=True) + added = 0 + i = 0 + while i < len(ret0[act]): + added += ret0[act][i][1] + if added >= (1.0 - noise_threshold) * len_log: + ret0[act] = ret0[act][:min(i + 1, len(ret0[act]))] + i = i + 1 + ret[act] = set(x[0] for x in ret0[act]) + return ret + + +def apply(log: Union[EventLog, pd.DataFrame], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Any]: + """ + Discover a log skeleton from an event log + + Parameters + ------------- + log + Event log + parameters + Parameters of the algorithm, including: + - the activity key (Parameters.ACTIVITY_KEY) + - the noise threshold (Parameters.NOISE_THRESHOLD) + + Returns + ------------- + model + Log skeleton model + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + noise_threshold = exec_utils.get_param_value(Parameters.NOISE_THRESHOLD, parameters, 0.0) + + if type(log) is EventLog: + logs_traces = Counter([tuple(y[activity_key] for y in x) for x in log]) + all_activs = Counter(list(y[activity_key] for x in log for y in x)) + elif pandas_utils.check_is_pandas_dataframe(log): + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + all_activs = log[activity_key].value_counts().to_dict() + logs_traces = Counter([tuple(x) for x in log.groupby(case_id_key)[activity_key].agg(list).to_dict().values()]) + + ret = {} + ret[Outputs.EQUIVALENCE.value] = equivalence(logs_traces, all_activs, noise_threshold=noise_threshold) + ret[Outputs.ALWAYS_AFTER.value] = always_after(logs_traces, all_activs, noise_threshold=noise_threshold) + ret[Outputs.ALWAYS_BEFORE.value] = always_before(logs_traces, all_activs, noise_threshold=noise_threshold) + ret[Outputs.NEVER_TOGETHER.value] = never_together(logs_traces, all_activs, len(log), + noise_threshold=noise_threshold) + ret[Outputs.DIRECTLY_FOLLOWS.value] = directly_follows(logs_traces, all_activs, noise_threshold=noise_threshold) + ret[Outputs.ACTIV_FREQ.value] = activ_freq(logs_traces, all_activs, len(log), noise_threshold=noise_threshold) + + return ret + + +def apply_from_variants_list(var_list, parameters=None): + """ + Discovers the log skeleton from the variants list + + Parameters + --------------- + var_list + Variants list + parameters + Parameters + + Returns + --------------- + model + Log skeleton model + """ + if parameters is None: + parameters = {} + + log = EventLog() + for cv in var_list: + v = cv[0] + trace = variants_util.variant_to_trace(v, parameters=parameters) + log.append(trace) + + return apply(log, parameters=parameters) + + +def prepare_encode(log_skeleton): + """ + Prepares the log skeleton for encoding + + Parameters + -------------- + log_skeleton + Log skeleton + + Returns + -------------- + log_skeleton + Log skeleton (with lists instead of sets) + """ + log_skeleton[Outputs.EQUIVALENCE.value] = list(log_skeleton[Outputs.EQUIVALENCE.value]) + log_skeleton[Outputs.ALWAYS_AFTER.value] = list(log_skeleton[Outputs.ALWAYS_AFTER.value]) + log_skeleton[Outputs.ALWAYS_BEFORE.value] = list(log_skeleton[Outputs.ALWAYS_BEFORE.value]) + log_skeleton[Outputs.NEVER_TOGETHER.value] = list(log_skeleton[Outputs.NEVER_TOGETHER.value]) + log_skeleton[Outputs.DIRECTLY_FOLLOWS.value] = list(log_skeleton[Outputs.DIRECTLY_FOLLOWS.value]) + for act in log_skeleton[Outputs.ACTIV_FREQ.value]: + log_skeleton[Outputs.ACTIV_FREQ.value][act] = list(log_skeleton[Outputs.ACTIV_FREQ.value][act]) + return log_skeleton diff --git a/pm4py/pm4py/algo/discovery/minimum_self_distance/__init__.py b/pm4py/pm4py/algo/discovery/minimum_self_distance/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8e29f662b70cbb2dee0e7b56965c98a9e84a5a39 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/minimum_self_distance/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.minimum_self_distance import algorithm, utils, variants + diff --git a/pm4py/pm4py/algo/discovery/minimum_self_distance/algorithm.py b/pm4py/pm4py/algo/discovery/minimum_self_distance/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..c9d1fbdc19db4199f4f3459d17957603d9681daa --- /dev/null +++ b/pm4py/pm4py/algo/discovery/minimum_self_distance/algorithm.py @@ -0,0 +1,43 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Union, Optional, Dict, Any + +import pandas as pd + +from pm4py.algo.discovery.minimum_self_distance.variants import log, pandas +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.util import exec_utils, pandas_utils + + +class Variants(Enum): + LOG = log + PANDAS = pandas + + +def apply(log_obj: Union[EventLog, pd.DataFrame, EventStream], variant: Union[str, None] = None, + parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, int]: + if parameters is None: + parameters = {} + + if variant is None: + if pandas_utils.check_is_pandas_dataframe(log_obj): + variant = Variants.PANDAS + else: + variant = Variants.LOG + + return exec_utils.get_variant(variant).apply(log_obj, parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/minimum_self_distance/utils.py b/pm4py/pm4py/algo/discovery/minimum_self_distance/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..caf1d2e79e8221d4469d3a534dc67608e8d99a0e --- /dev/null +++ b/pm4py/pm4py/algo/discovery/minimum_self_distance/utils.py @@ -0,0 +1,74 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Any, Dict, Optional, Set, Union + +import pm4py +from pm4py.objects.conversion.log import converter +from pm4py.algo.discovery.minimum_self_distance import algorithm as msd_algo +from pm4py.objects.log.obj import EventLog +from pm4py.util import constants, exec_utils, xes_constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def derive_msd_witnesses(log: EventLog, msd: Optional[Dict[Any, int]] = None, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Set[str]]: + ''' + This function derives the minimum self distance witnesses. + The self distance of a in is infinity, of a in is 0, in is 1, etc. + The minimum self distance is the minimal observed self distance value in the event log. + A 'witness' is an activity that witnesses the minimum self distance. + For example, if the minimum self distance of activity a in some log L is 2, then, + if trace is in log L, b and c are a witness of a. + + Parameters + ---------- + log + Event Log to use + msd + Optional minimum self distance dictionary + parameters + Optional parameters dictionary + + Returns + ------- + Dictionary mapping each activity to a set of witnesses. + + ''' + log = converter.apply(log, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + act_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, + xes_constants.DEFAULT_NAME_KEY) + alphabet = pm4py.get_event_attribute_values(log, act_key) + msd = msd if msd is not None else msd_algo.apply(log, parameters) + log = list(map(lambda t: list(map(lambda e: e[act_key], t)), log)) + witnesses = dict() + for a in alphabet: + if a in msd and msd[a] > 0: + witnesses[a] = set() + else: + continue + for t in log: + if len(list(filter(lambda e: e == a, t))) > 1: + indices = [i for i, x in enumerate(t) if x == a] + for i in range(len(indices) - 1): + if indices[i + 1] - indices[i] - 1 == msd[a]: + for b in t[indices[i] + 1:indices[i + 1]]: + witnesses[a].add(b) + return witnesses diff --git a/pm4py/pm4py/algo/discovery/minimum_self_distance/variants/__init__.py b/pm4py/pm4py/algo/discovery/minimum_self_distance/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d2dc4a3f220ee380f87e303091c7d201c12d0d49 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/minimum_self_distance/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.minimum_self_distance.variants import log, pandas diff --git a/pm4py/pm4py/algo/discovery/minimum_self_distance/variants/log.py b/pm4py/pm4py/algo/discovery/minimum_self_distance/variants/log.py new file mode 100644 index 0000000000000000000000000000000000000000..27b1173615f471d4a43fc010db1a06a5ab3f1f98 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/minimum_self_distance/variants/log.py @@ -0,0 +1,63 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Union, Dict, Optional, Any + +from pandas import DataFrame + +import pm4py +from pm4py.objects.conversion.log import converter +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.util import constants, exec_utils, xes_constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def apply(log: Union[DataFrame, EventLog, EventStream], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, int]: + ''' + This algorithm computes the minimum self-distance for each activity observed in an event log. + The self distance of a in is infinity, of a in is 0, in is 1, etc. + The minimum self distance is the minimal observed self distance value in the event log. + The activity key needs to be specified in the parameters input object (if None, default value 'concept:name' is used). + + + Parameters + ---------- + log + event log (either EventLog or EventStream) + parameters + parameters object; + + Returns + ------- + dict mapping an activity to its self-distance, if it exists, otherwise it is not part of the dict. + ''' + log = converter.apply(log, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + act_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, + xes_constants.DEFAULT_NAME_KEY) + alphabet = pm4py.get_event_attribute_values(log, act_key) + log = list(map(lambda t: list(map(lambda e: e[act_key], t)), log)) + min_self_distances = dict() + for a in alphabet: + if len(list(filter(lambda t: len(t) > 1, list(map(lambda t: list(filter(lambda e: e == a, t)), log))))) > 0: + activity_indices = list( + filter(lambda t: len(t) > 1, list(map(lambda t: [i for i, x in enumerate(t) if x == a], log)))) + min_self_distances[a] = min([i for l in list( + map(lambda t: [t[i] - t[i - 1] - 1 for i, x in enumerate(t) if i > 0], activity_indices)) for i in l]) + return min_self_distances diff --git a/pm4py/pm4py/algo/discovery/minimum_self_distance/variants/pandas.py b/pm4py/pm4py/algo/discovery/minimum_self_distance/variants/pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..ff7bd8603b6e192292ecccb4b650c5da3ce529e7 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/minimum_self_distance/variants/pandas.py @@ -0,0 +1,68 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +CONCAT_ACT_CASE = "@@concat_act_case" +INT_CASE_ACT_SIZE = "@@int_case_act_size" +DIFF_INDEX = "@@diff_index" + + +def apply(df, parameters=None): + ''' + This algorithm computes the minimum self-distance for each activity observed in an event log. + The self distance of a in is infinity, of a in is 0, in is 1, etc. + The minimum self distance is the minimal observed self distance value in the event log. + The activity key needs to be specified in the parameters input object (if None, default value 'concept:name' is used). + + + Parameters + ---------- + df + Pandas dataframe + parameters + parameters object; + + Returns + ------- + dict mapping an activity to its self-distance, if it exists, otherwise it is not part of the dict. + ''' + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + df = df.copy() + df = df[list({activity_key, case_id_key})] + df = pandas_utils.insert_ev_in_tr_index(df, case_id=case_id_key, column_name=constants.DEFAULT_INDEX_IN_TRACE_KEY) + df[CONCAT_ACT_CASE] = df[case_id_key] + df[activity_key] + df[INT_CASE_ACT_SIZE] = df.groupby(CONCAT_ACT_CASE).cumcount() + df_last = df.groupby(CONCAT_ACT_CASE).last().reset_index() + df_last = df_last[df_last[INT_CASE_ACT_SIZE] > 0] + df = df[df[CONCAT_ACT_CASE].isin(df_last[CONCAT_ACT_CASE])] + df = df.merge(df, on=[activity_key, case_id_key], suffixes=('', '_2')) + df[DIFF_INDEX] = df[constants.DEFAULT_INDEX_IN_TRACE_KEY+"_2"] - df[constants.DEFAULT_INDEX_IN_TRACE_KEY] - 1 + df = df[df[DIFF_INDEX] >= 0] + ret = df.groupby(activity_key)[DIFF_INDEX].agg("min").to_dict() + return ret diff --git a/pm4py/pm4py/algo/discovery/ocel/__init__.py b/pm4py/pm4py/algo/discovery/ocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9ef4c8635b5efdd9ae36cc384ad30d08e5b44b85 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.ocel import interleavings, ocdfg, ocpn diff --git a/pm4py/pm4py/algo/discovery/ocel/interleavings/__init__.py b/pm4py/pm4py/algo/discovery/ocel/interleavings/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..75ca83d34ebdf7f55edc29bac79a6d20e005b7a3 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/interleavings/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.interleavings import algorithm, variants, utils diff --git a/pm4py/pm4py/algo/discovery/ocel/interleavings/algorithm.py b/pm4py/pm4py/algo/discovery/ocel/interleavings/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..8d225b15d12186ccd84e12b796892b27cb404679 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/interleavings/algorithm.py @@ -0,0 +1,52 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.interleavings.variants import timestamp_interleavings +from enum import Enum +from pm4py.util import exec_utils +import pandas as pd +from typing import Optional, Dict, Any + + +class Variants(Enum): + TIMESTAMP_INTERLEAVINGS = timestamp_interleavings + + +def apply(left_df: pd.DataFrame, right_df: pd.DataFrame, case_relations: pd.DataFrame, variant=Variants.TIMESTAMP_INTERLEAVINGS, parameters: Optional[Dict[Any, Any]] = None): + """ + Discover the interleavings between two dataframes, given also a dataframe about the relations of the cases. + + Parameters + ----------------- + left_df + Left dataframe + right_df + Right dataframe + case_relations + Dictionary associating the cases of the first dataframe (column: case:concept:name_LEFT) to the + cases of the second dataframe (column: case:concept:name_RIGHT) + variant + Variant of the algorithm to be used, possible values: + - Variants.TIMESTAMP_INTERLEAVINGS + parameters + Variant-specific parameters + + Returns + ----------------- + interleavings + Interleavings dataframe + """ + return exec_utils.get_variant(variant).apply(left_df, right_df, case_relations, parameters) diff --git a/pm4py/pm4py/algo/discovery/ocel/interleavings/utils/__init__.py b/pm4py/pm4py/algo/discovery/ocel/interleavings/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5ad92905e6a39e6484aa11d8cca7e667e10e1023 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/interleavings/utils/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.interleavings.utils import merge_dataframe_rel_cases diff --git a/pm4py/pm4py/algo/discovery/ocel/interleavings/utils/merge_dataframe_rel_cases.py b/pm4py/pm4py/algo/discovery/ocel/interleavings/utils/merge_dataframe_rel_cases.py new file mode 100644 index 0000000000000000000000000000000000000000..c08e20a6372ceb276b0442167e5916a3a6f83e03 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/interleavings/utils/merge_dataframe_rel_cases.py @@ -0,0 +1,104 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import pandas as pd +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils +from copy import copy + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + LEFT_SUFFIX = "left_suffix" + RIGHT_SUFFIX = "right_suffix" + INDEX_KEY = "index_key" + + +def directly_follows_dataframe(dataframe: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None): + """ + Calculates the directly-follows dataframe (internal usage) + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + index_key = exec_utils.get_param_value(Parameters.INDEX_KEY, parameters, constants.DEFAULT_INDEX_KEY) + + if not (hasattr(dataframe, "attrs") and dataframe.attrs): + # dataframe has not been initialized through format_dataframe + dataframe = pandas_utils.insert_index(dataframe, index_key) + dataframe.sort_values([case_id_key, timestamp_key, index_key]) + + dataframe = pandas_utils.insert_index(dataframe, index_key) + + insert_parameters = copy(parameters) + insert_parameters["use_extremes_timestamp"] = True + + dataframe = dataframe_utils.insert_artificial_start_end(dataframe, parameters=insert_parameters) + + df_shifted = dataframe.shift(-1) + df_shifted.columns = [x+"_2" for x in df_shifted.columns] + dataframe = pandas_utils.concat([dataframe, df_shifted], axis=1) + dataframe = dataframe[dataframe[case_id_key] == dataframe[case_id_key+"_2"]] + + return dataframe + + +def merge_dataframes(left_df: pd.DataFrame, right_df: pd.DataFrame, case_relations: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None): + """ + Merge the two dataframes based on the provided case relations + + Parameters + ----------------- + left_df + First dataframe to merge + right_df + Second dataframe to merge + case_relations + Dictionary associating the cases of the first dataframe (column: case:concept:name_LEFT) to the + cases of the second dataframe (column: case:concept:name_RIGHT) + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => the case ID + - Parameters.LEFT_SUFFIX => the suffix for the columns of the left dataframe + - Parameters.RIGHT_SUFFIX => the suffix for the columns of the right dataframe + + Returns + ------------------ + merged_df + Merged dataframe + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + left_suffix = exec_utils.get_param_value(Parameters.LEFT_SUFFIX, parameters, "_LEFT") + right_suffix = exec_utils.get_param_value(Parameters.RIGHT_SUFFIX, parameters, "_RIGHT") + + left_df = directly_follows_dataframe(left_df, parameters=parameters) + right_df = directly_follows_dataframe(right_df, parameters=parameters) + + left_df = left_df.merge(case_relations, left_on=case_id_key, right_on=case_id_key+left_suffix, suffixes=('', '')) + del left_df[case_id_key+left_suffix] + + left_df = left_df.merge(right_df, left_on=case_id_key+right_suffix, right_on=case_id_key, suffixes=(left_suffix, right_suffix)) + + return left_df diff --git a/pm4py/pm4py/algo/discovery/ocel/interleavings/variants/__init__.py b/pm4py/pm4py/algo/discovery/ocel/interleavings/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..93600310bc0bb62e5e9a42e59e470e0042f24fa0 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/interleavings/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.interleavings.variants import timestamp_interleavings diff --git a/pm4py/pm4py/algo/discovery/ocel/interleavings/variants/timestamp_interleavings.py b/pm4py/pm4py/algo/discovery/ocel/interleavings/variants/timestamp_interleavings.py new file mode 100644 index 0000000000000000000000000000000000000000..eba53bcb3852b5a3b1f8517880b826615157a4c1 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/interleavings/variants/timestamp_interleavings.py @@ -0,0 +1,121 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.interleavings.utils import merge_dataframe_rel_cases +import pandas as pd +from typing import Optional, Dict, Any +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from enum import Enum + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + LEFT_SUFFIX = "left_suffix" + RIGHT_SUFFIX = "right_suffix" + INDEX_KEY = "index_key" + SOURCE_ACTIVITY = "source_activity_param" + TARGET_ACTIVITY = "target_activity_param" + SOURCE_TIMESTAMP = "source_timestamp_param" + TARGET_TIMESTAMP = "target_timestamp_param" + LEFT_INDEX = "left_index_param" + RIGHT_INDEX = "right_index_param" + DIRECTION = "direction_param" + TIMESTAMP_DIFF = "timestamp_diff" + + +def apply(left_df: pd.DataFrame, right_df: pd.DataFrame, case_relations: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None): + """ + Calculates the timestamp-based interleavings ongoing from the left/right to the right/left dataframe. + + Parameters + ------------------ + left_df + Left dataframe + right_df + Right dataframe + case_relations + Dictionary associating the cases of the first dataframe (column: case:concept:name_LEFT) to the + cases of the second dataframe (column: case:concept:name_RIGHT) + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.CASE_ID_KEY => the attribute to use as case identifier + - Parameters.LEFT_SUFFIX => the suffix for the columns of the left dataframe + - Parameters.RIGHT_SUFFIX => the suffix for the columns of the right dataframe + - Parameters.INDEX_KEY => the index column in the dataframe + - Parameters.SOURCE_ACTIVITY => the source activity of the interleaving + - Parameters.TARGET_ACTIVITY => the target activity of the interleaving + - Parameters.SOURCE_TIMESTAMP => the source timestamp of the interleaving + - Parameters.TARGET_TIMESTAMP => the target timestamp of the interleaving + - Parameters.LEFT_INDEX => the index of the event of the left-dataframe in the interleaving + - Parameters.RIGHT_INDEX => the index of the event of the right-dataframe in the interleaving + - Parameters.DIRECTION => the direction of the interleaving (LR: left to right; RL: right to left) + - Parameters.TIMESTAMP_DIFF => the difference between the timestamps of the interleaving + + Returns + ----------------- + interleavings_dataframe + Sorted interleaving dataframe + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + index_key = exec_utils.get_param_value(Parameters.INDEX_KEY, parameters, constants.DEFAULT_INDEX_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + left_suffix = exec_utils.get_param_value(Parameters.LEFT_SUFFIX, parameters, "_LEFT") + right_suffix = exec_utils.get_param_value(Parameters.RIGHT_SUFFIX, parameters, "_RIGHT") + source_activity = exec_utils.get_param_value(Parameters.SOURCE_ACTIVITY, parameters, "@@source_activity") + target_activity = exec_utils.get_param_value(Parameters.TARGET_ACTIVITY, parameters, "@@target_activity") + source_timestamp = exec_utils.get_param_value(Parameters.SOURCE_TIMESTAMP, parameters, "@@source_timestamp") + target_timestamp = exec_utils.get_param_value(Parameters.TARGET_TIMESTAMP, parameters, "@@target_timestamp") + direction = exec_utils.get_param_value(Parameters.DIRECTION, parameters, "@@direction") + timestamp_diff = exec_utils.get_param_value(Parameters.TIMESTAMP_DIFF, parameters, "@@timestamp_diff") + left_index = exec_utils.get_param_value(Parameters.LEFT_INDEX, parameters, "@@left_index") + right_index = exec_utils.get_param_value(Parameters.RIGHT_INDEX, parameters, "@@right_index") + + md = merge_dataframe_rel_cases.merge_dataframes(left_df, right_df, case_relations, parameters=parameters) + + df1 = md[md[timestamp_key+left_suffix] < md[timestamp_key+right_suffix]] + df1 = df1[df1[timestamp_key+right_suffix] < df1[timestamp_key+"_2"+left_suffix]] + df1 = df1[df1[timestamp_key+"_2"+left_suffix] < df1[timestamp_key+"_2"+right_suffix]] + df1[source_activity] = df1[activity_key+left_suffix] + df1[target_activity] = df1[activity_key+right_suffix] + df1[source_timestamp] = df1[timestamp_key+left_suffix] + df1[target_timestamp] = df1[timestamp_key+right_suffix] + df1[left_index] = df1[index_key+left_suffix] + df1[right_index] = df1[index_key+right_suffix] + df1[direction] = "LR" + + df2 = md[md[timestamp_key+right_suffix] < md[timestamp_key+left_suffix]] + df2 = df2[df2[timestamp_key+left_suffix] < df2[timestamp_key+"_2"+right_suffix]] + df2 = df2[df2[timestamp_key+"_2"+right_suffix] < df2[timestamp_key+"_2"+left_suffix]] + df2[source_activity] = df2[activity_key+"_2"+right_suffix] + df2[target_activity] = df2[activity_key+"_2"+left_suffix] + df2[source_timestamp] = df2[timestamp_key+"_2"+right_suffix] + df2[target_timestamp] = df2[timestamp_key+"_2"+left_suffix] + df2[left_index] = df2[index_key+"_2"+left_suffix] + df2[right_index] = df2[index_key+"_2"+right_suffix] + df2[direction] = "RL" + + md = pandas_utils.concat([df1, df2]) + md = md.sort_values([index_key+left_suffix, index_key+right_suffix]) + md[timestamp_diff] = pandas_utils.get_total_seconds(md[target_timestamp] - md[source_timestamp]) + + return md diff --git a/pm4py/pm4py/algo/discovery/ocel/link_analysis/__init__.py b/pm4py/pm4py/algo/discovery/ocel/link_analysis/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a1c98ae758fefc67e5818b1ba6b11ebb23bf321a --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/link_analysis/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.link_analysis import variants diff --git a/pm4py/pm4py/algo/discovery/ocel/link_analysis/algorithm.py b/pm4py/pm4py/algo/discovery/ocel/link_analysis/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..521b8a0c1ab82927595c27a978a38ea1906c0beb --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/link_analysis/algorithm.py @@ -0,0 +1,52 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.link_analysis.variants import classic +from enum import Enum +from pm4py.util import exec_utils +import pandas as pd +from typing import Optional, Dict, Any +from pm4py.objects.log.obj import EventLog, EventStream +from typing import Union +from pm4py.objects.conversion.log import converter + + +class Variants(Enum): + CLASSIC = classic + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Applies a link analysis algorithm on the provided log object. + + Parameters + ----------------- + log + Event log + variant + Variant of the algorithm to consider + parameters + Variant-specific parameters + + Returns + ----------------- + link_analysis_dataframe + Link analysis dataframe + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(converter.apply(log, variant=converter.Variants.TO_DATA_FRAME, parameters=parameters), parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/ocel/link_analysis/variants/__init__.py b/pm4py/pm4py/algo/discovery/ocel/link_analysis/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..28385733f1d432b9ee734a2d386584a9dc3913f1 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/link_analysis/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.link_analysis.variants import classic diff --git a/pm4py/pm4py/algo/discovery/ocel/link_analysis/variants/classic.py b/pm4py/pm4py/algo/discovery/ocel/link_analysis/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..ee0ae7276424a23ffd0cb2587122204f18269273 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/link_analysis/variants/classic.py @@ -0,0 +1,155 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from typing import Optional, Dict, Any, Set +import pandas as pd + + +class Parameters(Enum): + OUT_COLUMN = "out_column" + IN_COLUMN = "in_column" + SORTING_COLUMN = "sorting_column" + INDEX_COLUMN = "index_column" + LOOK_FORWARD = "look_forward" + KEEP_FIRST_OCCURRENCE = "keep_first_occurrence" + PROPAGATE = "propagate" + + +def propagate_associations(associations: Dict[str, Set[str]]) -> Dict[str, Set[str]]: + """ + Propagate the associations, such that the eventually-follows + flow between the events of the event log is considered + + Parameters + ------------------- + associations + Associations between events + + Returns + ------------------ + propagated_associations + Propagated associations + """ + reverse_dict = {} + for x in associations: + for k in associations[x]: + if k not in reverse_dict: + reverse_dict[k] = set() + reverse_dict[k].add(x) + change_dict = {x: True for x in associations} + to_change = [x for x in change_dict if change_dict[x]] + while to_change: + for x in to_change: + change_dict[x] = False + for x in to_change: + if x in reverse_dict: + rv = reverse_dict[x] + for k in rv: + new_set = associations[k].union(associations[x]) + if len(new_set) > len(associations[k]): + change_dict[k] = True + associations[k] = new_set + to_change = [x for x in change_dict if change_dict[x]] + return associations + + +def apply(dataframe: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Performs a link analysis between the entries of the current dataframe. + The link analysis permits advanced filtering based on events connected in an + output-input relation (e.g., the OUT column of the first is equal to the IN column + of the second). + + When OUT_COLUMN = IN_COLUMN = CASE ID, it can be equivalent to the directly-follows graph + (when Parameters.KEEP_FIRST_OCCURRENCE = True), and to the eventually-follows graph + (when Parameters.KEEP_FIRST_OCCURRENCE = False). + + Parameters + ----------------- + dataframe + Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.OUT_COLUMN => the output column of the dataframe + - Parameters.IN_COLUMN => the input column of the dataframe + - Parameters.SORTING_COLUMN => the column on top of which the + - Parameters.INDEX_COLUMN => the attribute to use for the indexing + - Parameters.LOOK_FORWARD => filters the relations in which the second event has an index >= than the index + of the first event. + - Parameters.KEEP_FIRST_OCCURRENCE => keep, for every source event, only the first-occurring relationship + with a target event (OUT=IN). + - Parameters.PROPAGATE => propagate the relationships between events, in such a way that the entire document + flow chain can be reconstructed. + + Returns + ----------------- + link_analysis_dataframe + Link analysis dataframe + """ + if parameters is None: + parameters = {} + + out_column = exec_utils.get_param_value(Parameters.OUT_COLUMN, parameters, constants.CASE_CONCEPT_NAME) + in_column = exec_utils.get_param_value(Parameters.IN_COLUMN, parameters, constants.CASE_CONCEPT_NAME) + sorting_column = exec_utils.get_param_value(Parameters.SORTING_COLUMN, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + index_column = exec_utils.get_param_value(Parameters.INDEX_COLUMN, parameters, constants.DEFAULT_INDEX_KEY) + look_forward = exec_utils.get_param_value(Parameters.LOOK_FORWARD, parameters, True) + keep_first_occurrence = exec_utils.get_param_value(Parameters.KEEP_FIRST_OCCURRENCE, parameters, False) + propagate = exec_utils.get_param_value(Parameters.PROPAGATE, parameters, False) + + dataframe = dataframe.sort_values(sorting_column) + dataframe = pandas_utils.insert_index(dataframe, index_column) + + df_red1 = dataframe[[out_column, index_column]] + df_red2 = dataframe[[in_column, index_column]] + df_red = df_red1.merge(df_red2, left_on=out_column, right_on=in_column, suffixes=("_out", "_in")) + + if look_forward: + df_red = df_red[df_red[index_column + "_out"] < df_red[index_column + "_in"]] + + if keep_first_occurrence: + df_red = df_red.groupby(index_column + "_out").first().reset_index() + + stream_red = df_red.to_dict("records") + associations = {} + for el in stream_red: + if not el[index_column + "_out"] in associations: + associations[el[index_column + "_out"]] = set() + associations[el[index_column + "_out"]].add(el[index_column + "_in"]) + + if propagate: + associations = propagate_associations(associations) + + out_clmn = [] + in_clmn = [] + for k in associations: + for v in associations[k]: + out_clmn.append(k) + in_clmn.append(v) + + rel = pandas_utils.instantiate_dataframe({index_column + "_out": out_clmn, index_column + "_in": in_clmn}) + + df_link = dataframe.copy() + df_link.columns = [x + "_out" for x in df_link.columns] + df_link = df_link.merge(rel, left_on=index_column + "_out", right_on=index_column + "_out") + dataframe.columns = [x + "_in" for x in dataframe.columns] + df_link = df_link.merge(dataframe, left_on=index_column + "_in", right_on=index_column + "_in") + + return df_link diff --git a/pm4py/pm4py/algo/discovery/ocel/ocdfg/__init__.py b/pm4py/pm4py/algo/discovery/ocel/ocdfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d699be5c6e0b334006a7644db7a768889c24b6ae --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/ocdfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.ocdfg import algorithm, variants diff --git a/pm4py/pm4py/algo/discovery/ocel/ocdfg/algorithm.py b/pm4py/pm4py/algo/discovery/ocel/ocdfg/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..15681390a7ce07cd40059e200b1fdaf0ae052b0b --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/ocdfg/algorithm.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.discovery.ocel.ocdfg.variants import classic +from enum import Enum +from pm4py.util import exec_utils + + +class Variants(Enum): + CLASSIC = classic + + +def apply(ocel: OCEL, variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discovers an OC-DFG model from an object-centric event log + Reference paper: + Berti, Alessandro, and Wil van der Aalst. "Extracting multiple viewpoint models from relational databases." Data-Driven Process Discovery and Analysis. Springer, Cham, 2018. 24-51. + + Parameters + ---------------- + ocel + Object-centric event log + variant + Variant of the algorithm to use: + - Variants.CLASSIC + parameters + Variant-specific parameters + + Returns + ---------------- + ocdfg + Object-centric directly-follows graph + """ + return exec_utils.get_variant(variant).apply(ocel, parameters) diff --git a/pm4py/pm4py/algo/discovery/ocel/ocdfg/variants/__init__.py b/pm4py/pm4py/algo/discovery/ocel/ocdfg/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..836459904d36701557399fe0e4258e98dcd060b6 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/ocdfg/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.ocdfg.variants import classic diff --git a/pm4py/pm4py/algo/discovery/ocel/ocdfg/variants/classic.py b/pm4py/pm4py/algo/discovery/ocel/ocdfg/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..32bd5c080e7ba6dc57f82664f0e9e969f0624de1 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/ocdfg/variants/classic.py @@ -0,0 +1,139 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +from pm4py.objects.ocel import constants as ocel_constants +from pm4py.objects.ocel.obj import OCEL +from pm4py.statistics.ocel import act_ot_dependent, act_utils, edge_metrics +from copy import copy + + +class Parameters(Enum): + EVENT_ACTIVITY = ocel_constants.PARAM_EVENT_ACTIVITY + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + COMPUTE_EDGES_PERFORMANCE = "compute_edges_performance" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discovers an OC-DFG model from an object-centric event log. + Reference paper: + Berti, Alessandro, and Wil van der Aalst. "Extracting multiple viewpoint models from relational databases." Data-Driven Process Discovery and Analysis. Springer, Cham, 2018. 24-51. + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ACTIVITY => the attribute to be used as activity + - Parameters.OBJECT_TYPE => the attribute to be used as object type + - Parameters.COMPUTE_EDGES_PERFORMANCE => (boolean) enables/disables the computation of the performance on the edges + + Returns + ----------------- + ocdfg + Object-centric directly-follows graph, expressed as a dictionary containing the following properties: + - activities: complete set of activities derived from the object-centric event log + - object_types: complete set of object types derived from the object-centric event log + - edges: dictionary connecting each object type to a set of directly-followed arcs between activities (expressed as tuples, + e.g., (act1, act2)). Every pair of activities is linked to some sets: + - event_pairs: the tuples of event identifiers where the directly-follows arc occurs + - total_objects: set of tuples containing two event and one object identifier, uniquely identifying an + occurrence of the arc. + - activities_indep: dictionary linking each activity, regardless of the object type, to some sets: + - events: the event identifiers where the activity occurs + - unique_objects: the object identifiers where the activity occurs + - total_objects: the tuples of event and object identifiers where the activity occurs. + - activities_ot: dictionary linking each object type to another dictionary, where the activities are linked to some sets: + - events: the event identifiers where the activity occurs (with at least one object of the given object type) + - unique_objects: the object identifiers of the given object type where the activity occurs + - total_objects: the tuples of event and object identifiers where the activity occurs. + - start_activities: dictionary linking each object type to another dictionary, where the start activities + of the given object type are linked to some sets: + - events: the event identifiers where the start activity occurs (with at least one object of the given object type) + - unique_objects: the object identifiers of the given object type where the start activity occurs + - total_objects: the tuples of event and object identifiers where the start activity occurs. + - end_activities: dictionary linking each object type to another dictionary, where the end activities + of the given object type are linked to some sets: + - events: the event identifiers where the end activity occurs (with at least one object of the given object type) + - unique_objects: the object identifiers of the given object type where the end activity occurs + - total_objects: the tuples of event and object identifiers where the end activity occurs. + """ + if parameters is None: + parameters = {} + + compute_edges_performance = exec_utils.get_param_value(Parameters.COMPUTE_EDGES_PERFORMANCE, parameters, True) + + ot_independent = act_utils.find_associations_from_ocel(ocel, parameters=parameters) + ot_dependent = act_ot_dependent.find_associations_from_ocel(ocel, parameters=parameters) + start_parameters = copy(parameters) + start_parameters["prefiltering"] = "start" + ot_dependent_start = act_ot_dependent.find_associations_from_ocel(ocel, parameters=start_parameters) + end_parameters = copy(parameters) + end_parameters["prefiltering"] = "end" + ot_dependent_end = act_ot_dependent.find_associations_from_ocel(ocel, parameters=end_parameters) + edges = edge_metrics.find_associations_per_edge(ocel, parameters=end_parameters) + + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, ocel.event_activity) + + ret = {} + ret["activities"] = set(pandas_utils.format_unique(ocel.events[event_activity].unique())) + ret["object_types"] = set(pandas_utils.format_unique(ocel.objects[object_type].unique())) + + ret["edges"] = {} + ret["edges"]["event_couples"] = edge_metrics.aggregate_ev_couples(edges) + ret["edges"]["unique_objects"] = edge_metrics.aggregate_unique_objects(edges) + ret["edges"]["total_objects"] = edge_metrics.aggregate_total_objects(edges) + + ret["activities_indep"] = {} + ret["activities_indep"]["events"] = act_utils.aggregate_events(ot_independent) + ret["activities_indep"]["unique_objects"] = act_utils.aggregate_unique_objects(ot_independent) + ret["activities_indep"]["total_objects"] = act_utils.aggregate_total_objects(ot_independent) + + ret["activities_ot"] = {} + ret["activities_ot"]["events"] = act_ot_dependent.aggregate_events(ot_dependent) + ret["activities_ot"]["unique_objects"] = act_ot_dependent.aggregate_unique_objects(ot_dependent) + ret["activities_ot"]["total_objects"] = act_ot_dependent.aggregate_total_objects(ot_dependent) + + ret["start_activities"] = {} + ret["start_activities"]["events"] = act_ot_dependent.aggregate_events(ot_dependent_start) + ret["start_activities"]["unique_objects"] = act_ot_dependent.aggregate_unique_objects(ot_dependent_start) + ret["start_activities"]["total_objects"] = act_ot_dependent.aggregate_total_objects(ot_dependent_start) + + ret["end_activities"] = {} + ret["end_activities"]["events"] = act_ot_dependent.aggregate_events(ot_dependent_end) + ret["end_activities"]["unique_objects"] = act_ot_dependent.aggregate_unique_objects(ot_dependent_end) + ret["end_activities"]["total_objects"] = act_ot_dependent.aggregate_total_objects(ot_dependent_end) + + ret["edges_performance"] = {} + ret["edges_performance"]["event_couples"] = {} + ret["edges_performance"]["total_objects"] = {} + + if compute_edges_performance: + ret["edges_performance"]["event_couples"] = edge_metrics.performance_calculation_ocel_aggregation(ocel, + ret["edges"][ + "event_couples"], + parameters=parameters) + ret["edges_performance"]["total_objects"] = edge_metrics.performance_calculation_ocel_aggregation(ocel, + ret["edges"][ + "total_objects"], + parameters=parameters) + + return ret diff --git a/pm4py/pm4py/algo/discovery/ocel/ocpn/__init__.py b/pm4py/pm4py/algo/discovery/ocel/ocpn/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2745eac15e66630ad77c933ad47bf2202dde6946 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/ocpn/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.ocel.ocpn import algorithm, variants diff --git a/pm4py/pm4py/algo/discovery/ocel/ocpn/algorithm.py b/pm4py/pm4py/algo/discovery/ocel/ocpn/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..6a189eaf0825a25b855e511c6643ea27256101be --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/ocpn/algorithm.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.algo.discovery.ocel.ocpn.variants import classic +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils +from typing import Optional, Dict, Any + + +class Variants(Enum): + WO_ANNOTATION = classic + CLASSIC = classic + + +def apply(ocel: OCEL, variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discovers an object-centric Petri net from the provided object-centric event log. + + Reference paper: van der Aalst, Wil MP, and Alessandro Berti. "Discovering object-centric Petri nets." Fundamenta informaticae 175.1-4 (2020): 1-40. + + Parameters + ----------------- + ocel + Object-centric event log + variant + Variant of the algorithm to be used + parameters + Variant-specific parameters + + Returns + ---------------- + ocpn + Object-centric Petri net model, as a dictionary of properties. + """ + return exec_utils.get_variant(variant).apply(ocel, parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/ocel/ocpn/variants/__init__.py b/pm4py/pm4py/algo/discovery/ocel/ocpn/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a1ad8d9e43e3c39927a87abf7a704235b3a1120b --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/ocpn/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.ocel.ocpn.variants import classic diff --git a/pm4py/pm4py/algo/discovery/ocel/ocpn/variants/classic.py b/pm4py/pm4py/algo/discovery/ocel/ocpn/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..cbc9163f6e615caa0a19a4691af96d55dff9743b --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/ocpn/variants/classic.py @@ -0,0 +1,188 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from pm4py.algo.discovery.ocel.ocdfg.variants import classic as ocdfg_discovery +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.ocel import constants as ocel_constants +from collections import Counter +from typing import Optional, Dict, Any +from pm4py.objects.dfg.obj import DFG +from pm4py.objects.conversion.process_tree import converter as tree_converter +from pm4py.algo.conformance.tokenreplay import algorithm as token_based_replay +from pm4py.objects.ocel.util import flattening +from copy import copy + + +class Parameters(Enum): + EVENT_ACTIVITY = ocel_constants.PARAM_EVENT_ACTIVITY + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + INDUCTIVE_MINER_VARIANT = "inductive_miner_variant" + DOUBLE_ARC_THRESHOLD = "double_arc_threshold" + DIAGNOSTICS_WITH_TBR = "diagnostics_with_token_based_replay" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discovers an object-centric Petri net (without annotation) from the given object-centric event log, + using the Inductive Miner as process discovery algorithm. + + Reference paper: van der Aalst, Wil MP, and Alessandro Berti. "Discovering object-centric Petri nets." Fundamenta informaticae 175.1-4 (2020): 1-40. + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ACTIVITY => the activity attribute to be used + - Parameters.OBJECT_TYPE => the object type attribute to be used + - Parameters.DOUBLE_ARC_THRESHOLD => the threshold for the attribution of the "double arc", as + described in the paper. + - Parameters.DIAGNOSTICS_WITH_TBR => performs token-based replay and stores the result in the return dict + + Returns + ----------------- + ocpn + Object-centric Petri net model, presented as a dictionary of properties: + - activities: complete set of activities derived from the object-centric event log + - object_types: complete set of object types derived from the object-centric event log + - edges: dictionary connecting each object type to a set of directly-followed arcs between activities (expressed as tuples, + e.g., (act1, act2)). Every pair of activities is linked to some sets: + - event_pairs: the tuples of event identifiers where the directly-follows arc occurs + - total_objects: set of tuples containing two event and one object identifier, uniquely identifying an + occurrence of the arc. + - activities_indep: dictionary linking each activity, regardless of the object type, to some sets: + - events: the event identifiers where the activity occurs + - unique_objects: the object identifiers where the activity occurs + - total_objects: the tuples of event and object identifiers where the activity occurs. + - activities_ot: dictionary linking each object type to another dictionary, where the activities are linked to some sets: + - events: the event identifiers where the activity occurs (with at least one object of the given object type) + - unique_objects: the object identifiers of the given object type where the activity occurs + - total_objects: the tuples of event and object identifiers where the activity occurs. + - start_activities: dictionary linking each object type to another dictionary, where the start activities + of the given object type are linked to some sets: + - events: the event identifiers where the start activity occurs (with at least one object of the given object type) + - unique_objects: the object identifiers of the given object type where the start activity occurs + - total_objects: the tuples of event and object identifiers where the start activity occurs. + - end_activities: dictionary linking each object type to another dictionary, where the end activities + of the given object type are linked to some sets: + - events: the event identifiers where the end activity occurs (with at least one object of the given object type) + - unique_objects: the object identifiers of the given object type where the end activity occurs + - total_objects: the tuples of event and object identifiers where the end activity occurs. + - petri_nets: the accepted Petri nets (Petri net + initial marking + final marking) discovered by the process discovery algorithm + - double_arcs_on_activity: dictionary linking each object type to another dictionary, where each arc of the Petri net + is linked to a boolean (True if it is a double arc) + - tbr_results: the results of the token-based replay operation (if required) + """ + if parameters is None: + parameters = {} + + double_arc_threshold = exec_utils.get_param_value(Parameters.DOUBLE_ARC_THRESHOLD, parameters, 0.8) + inductive_miner_variant = exec_utils.get_param_value(Parameters.INDUCTIVE_MINER_VARIANT, parameters, "im") + diagnostics_with_tbr = exec_utils.get_param_value(Parameters.DIAGNOSTICS_WITH_TBR, parameters, False) + + ocdfg_parameters = copy(parameters) + ocdfg_parameters["compute_edges_performance"] = False + ocpn = ocdfg_discovery.apply(ocel, parameters=ocdfg_parameters) + + petri_nets = {} + double_arcs_on_activity = {} + tbr_results = {} + + for ot in ocpn["object_types"]: + activities_eo = ocpn["activities_ot"]["total_objects"][ot] + + start_activities = {x: len(y) for x, y in ocpn["start_activities"]["events"][ot].items()} + end_activities = {x: len(y) for x, y in ocpn["end_activities"]["events"][ot].items()} + dfg = {} + if ot in ocpn["edges"]["event_couples"]: + dfg = {x: len(y) for x, y in ocpn["edges"]["event_couples"][ot].items()} + + is_activity_double = {} + for act in activities_eo: + ev_obj_count = Counter([x[0] for x in activities_eo[act]]) + this_single_amount = 0 + for y in ev_obj_count.values(): + if y == 1: + this_single_amount += 1 + this_single_amount = this_single_amount / len(ev_obj_count) + + if this_single_amount <= double_arc_threshold: + is_activity_double[act] = True + else: + is_activity_double[act] = False + + double_arcs_on_activity[ot] = is_activity_double + + im_parameters = copy(parameters) + # disables the fallthroughs, as computing the model on a myriad of different object types + # could be really expensive + im_parameters["disable_fallthroughs"] = True + # for performance reasons, also disable the strict sequence cut (use the normal sequence cut) + im_parameters["disable_strict_sequence_cut"] = True + + process_tree = None + flat_log = None + + if inductive_miner_variant == "im" or diagnostics_with_tbr: + # do the flattening only if it is required + flat_log = flattening.flatten(ocel, ot, parameters=parameters) + + if inductive_miner_variant == "imd": + obj = DFG() + obj._graph = Counter(dfg) + obj._start_activities = Counter(start_activities) + obj._end_activities = Counter(end_activities) + process_tree = inductive_miner.apply(obj, variant=inductive_miner.Variants.IMd, parameters=im_parameters) + elif inductive_miner_variant == "im": + process_tree = inductive_miner.apply(flat_log, parameters=im_parameters) + + petri_net = tree_converter.apply(process_tree, parameters=parameters) + + if diagnostics_with_tbr: + tbr_parameters = copy(parameters) + tbr_parameters["enable_pltr_fitness"] = True + tbr_parameters["show_progress_bar"] = False + + replayed_traces, place_fitness_per_trace, transition_fitness_per_trace, notexisting_activities_in_model = token_based_replay.apply( + flat_log, petri_net[0], petri_net[1], petri_net[2], parameters=tbr_parameters) + place_diagnostics = {place: {"m": 0, "r": 0, "c": 0, "p": 0} for place in place_fitness_per_trace} + trans_count = {trans: 0 for trans in petri_net[0].transitions} + # computes the missing, remaining, consumed, and produced tokens per place. + for place, res in place_fitness_per_trace.items(): + place_diagnostics[place]['m'] += res['m'] + place_diagnostics[place]['r'] += res['r'] + place_diagnostics[place]['c'] += res['c'] + place_diagnostics[place]['p'] += res['p'] + + # counts the number of times a transition has been fired during the replay. + for trace in replayed_traces: + for trans in trace['activated_transitions']: + trans_count[trans] += 1 + + tbr_results[ot] = (place_diagnostics, trans_count) + + petri_nets[ot] = petri_net + + ocpn["petri_nets"] = petri_nets + ocpn["double_arcs_on_activity"] = double_arcs_on_activity + ocpn["tbr_results"] = tbr_results + + return ocpn diff --git a/pm4py/pm4py/algo/discovery/ocel/ocpn/variants/wo_annotation.py b/pm4py/pm4py/algo/discovery/ocel/ocpn/variants/wo_annotation.py new file mode 100644 index 0000000000000000000000000000000000000000..911f14690dc101e104d2357d01138ee9821ce578 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/ocpn/variants/wo_annotation.py @@ -0,0 +1,20 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.ocel.ocpn.variants.classic import * + +# renamed diff --git a/pm4py/pm4py/algo/discovery/ocel/saw_nets/__init__.py b/pm4py/pm4py/algo/discovery/ocel/saw_nets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..29b1c2525b0ea6f88c2918430545c08703ea4c38 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/saw_nets/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.ocel.saw_nets import algorithm, variants diff --git a/pm4py/pm4py/algo/discovery/ocel/saw_nets/algorithm.py b/pm4py/pm4py/algo/discovery/ocel/saw_nets/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..0cb986581f8dc9b06436d1ca1815791c388ba57a --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/saw_nets/algorithm.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.util import exec_utils +from pm4py.algo.discovery.ocel.saw_nets.variants import classic +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +class Variants(Enum): + CLASSIC = classic + + +def apply(ocel: OCEL, variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discovers a SAW net representing the behavior of the provided object-centric event log. + + Parameters + ---------------- + ocel + Object-centric event log + variant + The variant of the algorithm to be used, possible values: Variants.CLASSIC + parameters + Variant-specific parameters + + Returns + --------------- + Dictionary with the following keys: + - ot_saw_net => the SAW nets for the single object types + - multi_saw_net => the overall SAW net + - decorations_multi_saw_net => decorations for the visualization of the SAW net + """ + return exec_utils.get_variant(variant).apply(ocel, parameters) diff --git a/pm4py/pm4py/algo/discovery/ocel/saw_nets/variants/__init__.py b/pm4py/pm4py/algo/discovery/ocel/saw_nets/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..69df5971d582dcddf709ad9bd863386a39f63871 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/saw_nets/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.ocel.saw_nets.variants import classic diff --git a/pm4py/pm4py/algo/discovery/ocel/saw_nets/variants/classic.py b/pm4py/pm4py/algo/discovery/ocel/saw_nets/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..a357fa7709fca13dc09f03620e486ba20eb74c7d --- /dev/null +++ b/pm4py/pm4py/algo/discovery/ocel/saw_nets/variants/classic.py @@ -0,0 +1,181 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.objects.ocel import constants as ocel_constants +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +from pm4py.objects.ocel.util import flattening +from pm4py.algo.conformance.tokenreplay import algorithm as token_replay +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.conversion.process_tree import converter as pt_converter +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.objects.petri_net.saw_net.obj import StochasticArcWeightNet +from pm4py.objects.petri_net.utils import petri_utils +from collections import Counter +from pm4py.util import vis_utils +from copy import copy + + +class Parameters(Enum): + EVENT_ACTIVITY = ocel_constants.PARAM_EVENT_ACTIVITY + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + + +def __ot_to_color(ot: str) -> str: + """ + Auxiliary method converting an object type to a color + """ + ot = int(hash(ot)) + num = [] + while len(num) < 6: + num.insert(0, ot % 16) + ot = ot // 16 + ret = "#" + "".join([vis_utils.get_corr_hex(x) for x in num]) + return ret + + +def __discover_petri_and_consumption_stats_tbr(ocel: OCEL, obj_types, parameters: Optional[Dict[Any, Any]] = None): + """ + Flattens the OCEL, discovers Petri nets for the flattened log, + and by the token-based replay measures the usage of the elements + """ + saw_weights = {} + ocpn_nets = {} + + for ot in obj_types: + flat_log = log_converter.apply(flattening.flatten(ocel, ot), variant=log_converter.Variants.TO_EVENT_LOG) + process_tree = inductive_miner.apply(flat_log, parameters=parameters) + net, im, fm = pt_converter.apply(process_tree) + ocpn_nets[ot] = (net, im, fm) + replayed_traces = token_replay.apply(flat_log, net, im, fm, parameters=parameters) + transes_ev_ids = {x: [] for x in net.transitions} + for i in range(len(flat_log)): + flat_trace = flat_log[i] + rep_res = replayed_traces[i]["activated_transitions"] + j = 0 + z = 0 + while z < len(rep_res): + evid = flat_trace[j][ocel.event_id_column] + transes_ev_ids[rep_res[z]].append(evid) + if rep_res[z].label is not None and j < len(flat_trace) - 1: + j = j + 1 + z = z + 1 + for x in transes_ev_ids: + transes_ev_ids[x] = dict(Counter(list(Counter(transes_ev_ids[x]).values()))) + saw_weights[ot] = transes_ev_ids + + return ocpn_nets, saw_weights + + +def __get_ot_saw_nets(obj_types, ocpn_nets, saw_weights): + """ + Computes a SAW net for every object type + """ + ot_saw_nets = {} + for ot in obj_types: + net, im, fm = ocpn_nets[ot] + saw_net = StochasticArcWeightNet(net.name) + for place in net.places: + saw_net.places.add(place) + for trans in net.transitions: + saw_net.transitions.add(trans) + for arc in net.arcs: + new_arc = petri_utils.add_arc_from_to(arc.source, arc.target, saw_net, type="stochastic_arc") + if isinstance(new_arc.source, PetriNet.Transition) and new_arc.source in saw_weights[ot]: + new_arc.weight = saw_weights[ot][new_arc.source] + elif isinstance(new_arc.target, PetriNet.Transition) and new_arc.target in saw_weights[ot]: + new_arc.weight = saw_weights[ot][new_arc.target] + ot_saw_nets[ot] = saw_net + return ot_saw_nets + + +def __get_multi_saw_net(ot_saw_nets): + """ + Puts together the SAW nets of the single object types + """ + multi_saw_net = StochasticArcWeightNet("multi") + el_corr = dict() + trans_unq_corr = dict() + decorations_multi_saw_net = {} + + for ot in ot_saw_nets: + otc0 = __ot_to_color(ot) + ot_color = {"color": otc0} + saw_net = ot_saw_nets[ot] + for place in saw_net.places: + multi_saw_net.places.add(place) + el_corr[place] = place + decorations_multi_saw_net[place] = ot_color + for trans in saw_net.transitions: + if trans.label is None: + multi_saw_net.transitions.add(trans) + el_corr[trans] = trans + decorations_multi_saw_net[trans] = ot_color + elif trans.label not in trans_unq_corr: + multi_saw_net.transitions.add(trans) + trans_unq_corr[trans.label] = trans + el_corr[trans] = trans + else: + el_corr[trans] = el_corr[trans_unq_corr[trans.label]] + for arc in saw_net.arcs: + new_arc = petri_utils.add_arc_from_to(el_corr[arc.source], el_corr[arc.target], multi_saw_net, weight=arc.weight) + decorations_multi_saw_net[new_arc] = ot_color + + return multi_saw_net, decorations_multi_saw_net + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Discovers a SAW net representing the behavior of the provided object-centric event log. + + Parameters + ---------------- + ocel + Object-centric event log + parameters + Possible parameters of the method, including: + - Parameters.OBJECT_TYPE => the attribute of the log to be used as object type + + Returns + -------------- + model + Dictionary with the following keys: + - ot_saw_net => the SAW nets for the single object types + - multi_saw_net => the overall SAW net + - decorations_multi_saw_net => decorations for the visualization of the SAW net + """ + if parameters is None: + parameters = {} + + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + obj_types = pandas_utils.format_unique(ocel.objects[object_type].unique()) + + disc_parameters = copy(parameters) + # disables the fallthroughs, as computing the model on a myriad of different object types + # could be really expensive + disc_parameters["disable_fallthroughs"] = True + # for performance reasons, also disable the strict sequence cut (use the normal sequence cut) + disc_parameters["disable_strict_sequence_cut"] = True + ocpn_nets, saw_weights = __discover_petri_and_consumption_stats_tbr(ocel, obj_types, parameters=disc_parameters) + + ot_saw_nets = __get_ot_saw_nets(obj_types, ocpn_nets, saw_weights) + multi_saw_net, decorations_multi_saw_net = __get_multi_saw_net(ot_saw_nets) + + return {"ot_saw_nets": ot_saw_nets, "multi_saw_net": multi_saw_net, "decorations_multi_saw_net": decorations_multi_saw_net} diff --git a/pm4py/pm4py/algo/discovery/performance_spectrum/__init__.py b/pm4py/pm4py/algo/discovery/performance_spectrum/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ca17e532d0837a7246ae617bdb846f82912a8fdb --- /dev/null +++ b/pm4py/pm4py/algo/discovery/performance_spectrum/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.performance_spectrum import algorithm, variants diff --git a/pm4py/pm4py/algo/discovery/performance_spectrum/algorithm.py b/pm4py/pm4py/algo/discovery/performance_spectrum/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..361d3ba5d57a69a9539636ff194238659a407d95 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/performance_spectrum/algorithm.py @@ -0,0 +1,96 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.performance_spectrum.variants import dataframe, log, dataframe_disconnected, log_disconnected +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants, pandas_utils +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + PARAMETER_SAMPLE_SIZE = "sample_size" + + +class Outputs(Enum): + LIST_ACTIVITIES = "list_activities" + POINTS = "points" + + +class Variants(Enum): + DATAFRAME = dataframe + LOG = log + DATAFRAME_DISCONNECTED = dataframe_disconnected + LOG_DISCONNECTED = log_disconnected + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], list_activities: List[str], variant=None, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Finds the performance spectrum provided a log/dataframe + and a list of activities + + Parameters + ------------- + log + Event log/Dataframe + list_activities + List of activities interesting for the performance spectrum (at least two) + variant + Variant to be used (see Variants Enum) + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + + Returns + ------------- + ps + Performance spectrum object (dictionary) + """ + from pm4py.objects.conversion.log import converter as log_conversion + + if parameters is None: + parameters = {} + + sample_size = exec_utils.get_param_value(Parameters.PARAMETER_SAMPLE_SIZE, parameters, 10000) + + if len(list_activities) < 2: + raise Exception("performance spectrum can be applied providing at least two activities!") + + points = None + + if pandas_utils.check_is_pandas_dataframe(log): + if variant is None: + variant = Variants.DATAFRAME + + points = exec_utils.get_variant(variant).apply(log, list_activities, sample_size, parameters) + + if points is None: + if variant is None: + variant = Variants.LOG + + points = exec_utils.get_variant(variant).apply(log_conversion.apply(log, variant=log_conversion.Variants.TO_EVENT_LOG, parameters=parameters), list_activities, sample_size, + parameters) + + ps = {Outputs.LIST_ACTIVITIES.value: list_activities, Outputs.POINTS.value: points} + + return ps diff --git a/pm4py/pm4py/algo/discovery/performance_spectrum/variants/__init__.py b/pm4py/pm4py/algo/discovery/performance_spectrum/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e6f0182e6157065cffdba95b29fffdc62e1f3638 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/performance_spectrum/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.performance_spectrum.variants import dataframe, log, dataframe_disconnected, log_disconnected diff --git a/pm4py/pm4py/algo/discovery/performance_spectrum/variants/dataframe.py b/pm4py/pm4py/algo/discovery/performance_spectrum/variants/dataframe.py new file mode 100644 index 0000000000000000000000000000000000000000..2e344193a39561ae6e3ff881a7a30f3efccfa782 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/performance_spectrum/variants/dataframe.py @@ -0,0 +1,102 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.util import constants +from pm4py.util import exec_utils, pandas_utils +from pm4py.util import xes_constants as xes +from pm4py.util.constants import CASE_CONCEPT_NAME +from typing import Optional, Dict, Any, Union, List +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + PARAMETER_SAMPLE_SIZE = "sample_size" + SORT_LOG_REQUIRED = "sort_log_required" + + +def apply(dataframe: pd.DataFrame, list_activities: List[str], sample_size: int, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Any]: + """ + Finds the performance spectrum provided a dataframe + and a list of activities + + Parameters + ------------- + dataframe + Dataframe + list_activities + List of activities interesting for the performance spectrum (at least two) + sample_size + Size of the sample + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + + Returns + ------------- + points + Points of the performance spectrum + """ + if parameters is None: + parameters = {} + + import pandas as pd + import numpy as np + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + sort_log_required = exec_utils.get_param_value(Parameters.SORT_LOG_REQUIRED, parameters, True) + + dataframe = dataframe[[case_id_glue, activity_key, timestamp_key]] + dataframe[activity_key] = dataframe[activity_key].astype("string") + dataframe = dataframe[dataframe[activity_key].isin(list_activities)] + dataframe = pandas_utils.insert_index(dataframe, constants.DEFAULT_EVENT_INDEX_KEY) + if sort_log_required: + dataframe = dataframe.sort_values([case_id_glue, timestamp_key, constants.DEFAULT_EVENT_INDEX_KEY]) + dataframe[timestamp_key] = dataframe[timestamp_key].astype(np.int64) / 10 ** 9 + + def key(k, n): + return k + str(n) + + # create a dataframe with all needed columns to check for the activities pattern + dfs = [dataframe.add_suffix(str(i)).shift(-i) for i in range(len(list_activities))] + dataframe = pandas_utils.concat(dfs, axis=1) + # keep only rows that belong to exactly one case + for i in range(len(list_activities) - 1): + dataframe = dataframe[dataframe[key(case_id_glue, i)] == dataframe[key(case_id_glue, i + 1)]] + + column_list = [key(activity_key, i) for i in range(len(list_activities))] + pattern = "".join(list_activities) + # keep only rows that have the desired activities pattern + + matches = dataframe[np.equal(dataframe[column_list].agg(''.join, axis=1), pattern)] + if len(matches) > sample_size: + matches = matches.sample(n=sample_size) + + filt_col_names = [timestamp_key + str(i) for i in range(len(list_activities))] + points = pandas_utils.to_dict_records(matches) + points = [[p[tk] for tk in filt_col_names] for p in points] + points = sorted(points, key=lambda x: x[0]) + + return points diff --git a/pm4py/pm4py/algo/discovery/performance_spectrum/variants/dataframe_disconnected.py b/pm4py/pm4py/algo/discovery/performance_spectrum/variants/dataframe_disconnected.py new file mode 100644 index 0000000000000000000000000000000000000000..5fadae377399ef531869d08ecd9ff4fab8cb4803 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/performance_spectrum/variants/dataframe_disconnected.py @@ -0,0 +1,121 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +import numpy as np + +from pm4py.util import constants, points_subset +from pm4py.util import exec_utils, pandas_utils +from pm4py.util import xes_constants as xes +from typing import Optional, Dict, Any, Union, List +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + PARAMETER_SAMPLE_SIZE = "sample_size" + SORT_LOG_REQUIRED = "sort_log_required" + + +def gen_patterns(pattern, length): + return ["".join(pattern[i:i + length]) for i in range(len(pattern) - (length - 1))] + + +def apply(dataframe: pd.DataFrame, list_activities: List[str], sample_size: int, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Any]: + """ + Finds the disconnected performance spectrum provided a dataframe + and a list of activities + + Parameters + ------------- + dataframe + Dataframe + list_activities + List of activities interesting for the performance spectrum (at least two) + sample_size + Size of the sample + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + - Parameters.CASE_ID_KEY + + Returns + ------------- + points + Points of the performance spectrum + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + + sort_log_required = exec_utils.get_param_value(Parameters.SORT_LOG_REQUIRED, parameters, True) + + dataframe = dataframe[[case_id_glue, activity_key, timestamp_key]] + dataframe = dataframe[dataframe[activity_key].isin(list_activities)] + dataframe = pandas_utils.insert_index(dataframe, constants.DEFAULT_EVENT_INDEX_KEY) + if sort_log_required: + dataframe = dataframe.sort_values([case_id_glue, timestamp_key, constants.DEFAULT_EVENT_INDEX_KEY]) + dataframe[timestamp_key] = dataframe[timestamp_key].astype(np.int64) / 10 ** 9 + + all_patterns = [(len(list_activities) - i, gen_patterns(list_activities, len(list_activities) - i)) for i in + range(len(list_activities) - 1)] + + def key(k, n): + return k + str(n) + + def to_points(match, l): + return {'case_id': match[key(case_id_glue, 0)], + 'points': [(match[key(activity_key, i)], match[key(timestamp_key, i)]) for i in range(l)]} + + points = [] + for l, patterns in all_patterns: + # concat shifted and suffixed dataframes to get a dataframe that allows to check for the patterns + dfs = [dataframe.add_suffix(str(i)).shift(-i) for i in range(l)] + df_merged = pandas_utils.concat(dfs, axis=1) + + indices = [shift_index(dfs[i].index, i) for i in range(len(dfs))] + mindex = pd.MultiIndex.from_arrays(indices) + df_merged = df_merged.set_index(mindex) + + for i in range(l - 1): + df_merged = df_merged[df_merged[key(case_id_glue, i)] == df_merged[key(case_id_glue, i + 1)]] + + column_list = [key(activity_key, i) for i in range(l)] + matches = df_merged[np.isin(df_merged[column_list].sum(axis=1), patterns)] + points.extend([to_points(m, l) for m in matches.to_dict('records')]) + # drop rows of this match to not discover subsets of this match again + dataframe = dataframe.drop([int(i) for indices in matches.index for i in indices[:-1]]) + pass + + points = sorted(points, key=lambda x: min(x['points'], key=lambda x: x[1])[1]) + if len(points) > sample_size: + points = points_subset.pick_chosen_points_list(sample_size, points) + + return points + + +def shift_index(index, n): + if n == 0: + return list(index) + nones = [None for _ in range(n)] + return list(index[n:]) + nones diff --git a/pm4py/pm4py/algo/discovery/performance_spectrum/variants/log.py b/pm4py/pm4py/algo/discovery/performance_spectrum/variants/log.py new file mode 100644 index 0000000000000000000000000000000000000000..6f121a7a6d978b42add54eceacd6b7249a95b01f --- /dev/null +++ b/pm4py/pm4py/algo/discovery/performance_spectrum/variants/log.py @@ -0,0 +1,88 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.util import sorting +from pm4py.objects.log.util import basic_filter +from pm4py.util import points_subset +from pm4py.util import xes_constants as xes +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + PARAMETER_SAMPLE_SIZE = "sample_size" + SORT_LOG_REQUIRED = "sort_log_required" + + +def apply(log: EventLog, list_activities: List[str], sample_size: int, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Any]: + """ + Finds the performance spectrum provided a log + and a list of activities + + Parameters + ------------- + log + Log + list_activities + List of activities interesting for the performance spectrum (at least two) + sample_size + Size of the sample + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + + Returns + ------------- + points + Points of the performance spectrum + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + sort_log_required = exec_utils.get_param_value(Parameters.SORT_LOG_REQUIRED, parameters, True) + + parameters[Parameters.ATTRIBUTE_KEY] = activity_key + log = basic_filter.filter_log_events_attr(log, list_activities, parameters=parameters) + if sort_log_required: + log = sorting.sort_timestamp_log(log, timestamp_key=timestamp_key) + + points = [] + + for trace in log: + for i in range(len(trace)-len(list_activities)+1): + acti_comb = [event[activity_key] for event in trace[i:i+len(list_activities)]] + + if acti_comb == list_activities: + timest_comb = [event[timestamp_key].timestamp() for event in trace[i:i+len(list_activities)]] + + points.append(timest_comb) + + points = sorted(points, key=lambda x: x[0]) + + if len(points) > sample_size: + points = points_subset.pick_chosen_points_list(sample_size, points) + + return points diff --git a/pm4py/pm4py/algo/discovery/performance_spectrum/variants/log_disconnected.py b/pm4py/pm4py/algo/discovery/performance_spectrum/variants/log_disconnected.py new file mode 100644 index 0000000000000000000000000000000000000000..57915f06ffbf220e5e1399fec68214eb8dc7ce2a --- /dev/null +++ b/pm4py/pm4py/algo/discovery/performance_spectrum/variants/log_disconnected.py @@ -0,0 +1,107 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.log.util import sorting +from pm4py.util import constants, exec_utils +from pm4py.util import points_subset +from pm4py.util import xes_constants as xes +from pm4py.objects.log.util import basic_filter +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + PARAMETER_SAMPLE_SIZE = "sample_size" + SORT_LOG_REQUIRED = "sort_log_required" + + +def apply(log: EventLog, list_activities: List[str], sample_size: int, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Any]: + """ + Finds the disconnected performance spectrum provided a log + and a list of activities + + Parameters + ------------- + log + Log + list_activities + List of activities interesting for the performance spectrum (at least two) + sample_size + Size of the sample + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY + - Parameters.TIMESTAMP_KEY + + Returns + ------------- + points + Points of the performance spectrum + """ + if parameters is None: + parameters = {} + + sort_log_required = exec_utils.get_param_value(Parameters.SORT_LOG_REQUIRED, parameters, True) + + all_acti_combs = set(tuple(list_activities[j:j + i]) for i in range(2, len(list_activities) + 1) for j in + range(0, len(list_activities) - i + 1)) + two_acti_combs = set((list_activities[i], list_activities[i + 1]) for i in range(len(list_activities) - 1)) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes.DEFAULT_TRACEID_KEY) + + parameters[Parameters.ATTRIBUTE_KEY] = activity_key + log = basic_filter.filter_log_events_attr(log, list_activities, parameters=parameters) + if sort_log_required: + log = sorting.sort_timestamp_log(log, timestamp_key=timestamp_key) + + points = [] + for trace in log: + matches = [(i, i + 1) for i in range(len(trace) - 1) if + (trace[i][activity_key], trace[i + 1][activity_key]) in two_acti_combs] + + i = 0 + while i < len(matches) - 1: + matchAct = (trace[mi][activity_key] for mi in (matches[i] + matches[i + 1][1:])) + if matches[i][-1] == matches[i + 1][0] and matchAct in all_acti_combs: + matches[i] = matches[i] + matches[i + 1][1:] + del matches[i + 1] + i = 0 + else: + i += 1 + + if matches: + matches = set(matches) + timest_comb = [{'points': [(trace[i][activity_key], trace[i][timestamp_key].timestamp()) for i in match]} + for match in matches] + for p in timest_comb: + p['case_id'] = trace.attributes[case_id_key] + + points += timest_comb + + points = sorted(points, key=lambda x: min(x['points'], key=lambda x: x[1])[1]) + + if len(points) > sample_size: + points = points_subset.pick_chosen_points_list(sample_size, points) + + return points diff --git a/pm4py/pm4py/algo/discovery/powl/__init__.py b/pm4py/pm4py/algo/discovery/powl/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b16af924596f4752dd0500453ff6e50b761d34d7 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/__init__.py @@ -0,0 +1,19 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.powl import * + diff --git a/pm4py/pm4py/algo/discovery/powl/algorithm.py b/pm4py/pm4py/algo/discovery/powl/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..a17832f650e540ba799727e51cfc0201220b74d3 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/algorithm.py @@ -0,0 +1,70 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.powl.inductive.variants.im_dynamic_clustering_frequencies import \ + POWLInductiveMinerDynamicClusteringFrequency +from pm4py.algo.discovery.powl.inductive.variants.im_tree import IMBasePOWL +from pm4py.algo.discovery.powl.inductive.variants.im_brute_force import POWLInductiveMinerBruteForce +from pm4py.algo.discovery.powl.inductive.variants.im_maximal import POWLInductiveMinerMaximalOrder +from pm4py.algo.discovery.powl.inductive.variants.powl_discovery_varaints import POWLDiscoveryVariant + +from pm4py import util +from pm4py.algo.discovery.inductive.algorithm import Parameters +from pm4py.objects.powl.obj import POWL + +from pm4py.util import xes_constants as xes_util +from pm4py.util.compression import util as comut +from pm4py.util.compression.dtypes import UVCL + +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union, Type +from pm4py.objects.log.obj import EventLog +import pandas as pd + + +def get_variant(variant: POWLDiscoveryVariant) -> Type[IMBasePOWL]: + if variant == POWLDiscoveryVariant.TREE: + return IMBasePOWL + elif variant == POWLDiscoveryVariant.BRUTE_FORCE: + return POWLInductiveMinerBruteForce + elif variant == POWLDiscoveryVariant.MAXIMAL: + return POWLInductiveMinerMaximalOrder + elif variant == POWLDiscoveryVariant.DYNAMIC_CLUSTERING: + return POWLInductiveMinerDynamicClusteringFrequency + else: + raise Exception('Invalid Variant!') + + +def apply(obj: Union[EventLog, pd.DataFrame, UVCL], parameters: Optional[Dict[Any, Any]] = None, + variant=POWLDiscoveryVariant.MAXIMAL) -> POWL: + if parameters is None: + parameters = {} + ack = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_util.DEFAULT_NAME_KEY) + tk = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_util.DEFAULT_TIMESTAMP_KEY) + cidk = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, util.constants.CASE_CONCEPT_NAME) + if type(obj) in [EventLog, pd.DataFrame]: + uvcl = comut.get_variants(comut.project_univariate(obj, key=ack, df_glue=cidk, df_sorting_criterion_key=tk)) + else: + uvcl = obj + + algorithm = get_variant(variant) + im = algorithm(parameters) + res = im.apply(IMDataStructureUVCL(uvcl), parameters) + res = res.simplify() + + return res diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/__init__.py b/pm4py/pm4py/algo/discovery/powl/inductive/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6744fd1bc795af92b7c1596e733db40fbfcf22fb --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.powl.inductive import * diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/base_case/__init__.py b/pm4py/pm4py/algo/discovery/powl/inductive/base_case/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..393bf9a7acd94381cd8d34cb7a04169a46275b0d --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/base_case/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.powl.inductive.base_case import * diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/base_case/abc.py b/pm4py/pm4py/algo/discovery/powl/inductive/base_case/abc.py new file mode 100644 index 0000000000000000000000000000000000000000..11f14d34bd8dbbdd99f6afe154485373720f5209 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/base_case/abc.py @@ -0,0 +1,41 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from abc import ABC, abstractmethod +from typing import Union, TypeVar, Generic, Optional, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure +from pm4py.objects.powl.obj import POWL + +T = TypeVar('T', bound=Union[IMDataStructure]) + + +class BaseCase(ABC, Generic[T]): + + @classmethod + def apply(cls, obj=T, parameters: Optional[Dict[str, Any]] = None) -> Optional[POWL]: + return cls.leaf(obj, parameters) if cls.holds(obj, parameters) else None + + @classmethod + @abstractmethod + def holds(cls, obj=T, parameters: Optional[Dict[str, Any]] = None) -> bool: + pass + + @classmethod + @abstractmethod + def leaf(cls, obj=T, parameters: Optional[Dict[str, Any]] = None) -> POWL: + pass diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/base_case/empty_log.py b/pm4py/pm4py/algo/discovery/powl/inductive/base_case/empty_log.py new file mode 100644 index 0000000000000000000000000000000000000000..d8bb7a84a360e9ccd7c5db452bbe271d5bec0799 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/base_case/empty_log.py @@ -0,0 +1,38 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from abc import ABC +from typing import Generic, Optional, Dict, Any + +from pm4py.algo.discovery.powl.inductive.base_case.abc import BaseCase, T +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.objects.powl.obj import SilentTransition + + +class EmptyLogBaseCase(BaseCase[T], ABC, Generic[T]): + + @classmethod + def leaf(cls, obj=T, parameters: Optional[Dict[str, Any]] = None) -> SilentTransition: + return SilentTransition() + + +class EmptyLogBaseCaseUVCL(EmptyLogBaseCase[IMDataStructureUVCL]): + + @classmethod + def holds(cls, obj=IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> bool: + return len(obj.data_structure) == 0 + diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/base_case/factory.py b/pm4py/pm4py/algo/discovery/powl/inductive/base_case/factory.py new file mode 100644 index 0000000000000000000000000000000000000000..d5b16ef24483d1b9ac3cf4571883a5c42e575728 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/base_case/factory.py @@ -0,0 +1,44 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import TypeVar, Optional, Dict, Any, Type, List as TList + +from pm4py.algo.discovery.powl.inductive.base_case.abc import BaseCase +from pm4py.algo.discovery.powl.inductive.base_case.empty_log import EmptyLogBaseCaseUVCL +from pm4py.algo.discovery.powl.inductive.base_case.single_activity import SingleActivityBaseCaseUVCL +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure, IMDataStructureUVCL + +from pm4py.objects.powl.obj import POWL + +T = TypeVar('T', bound=IMDataStructure) +S = TypeVar('S', bound=BaseCase) + + +class BaseCaseFactory: + + @classmethod + def get_base_cases(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> TList[Type[S]]: + if type(obj) is IMDataStructureUVCL: + return [EmptyLogBaseCaseUVCL, SingleActivityBaseCaseUVCL] + return [] + + @classmethod + def apply_base_cases(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[POWL]: + for b in BaseCaseFactory.get_base_cases(obj): + r = b.apply(obj, parameters) + if r is not None: + return r + return None diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/base_case/single_activity.py b/pm4py/pm4py/algo/discovery/powl/inductive/base_case/single_activity.py new file mode 100644 index 0000000000000000000000000000000000000000..23ed0a315eaf95b725084404c190d46a63575712 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/base_case/single_activity.py @@ -0,0 +1,38 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.powl.inductive.base_case.abc import BaseCase +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from typing import Optional, Dict, Any + +from pm4py.objects.powl.obj import Transition + + +class SingleActivityBaseCaseUVCL(BaseCase[IMDataStructureUVCL]): + @classmethod + def holds(cls, obj=IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> bool: + if len(obj.data_structure.keys()) != 1: + return False + if len(list(obj.data_structure.keys())[0]) > 1: + return False + return True + + @classmethod + def leaf(cls, obj=IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> Transition: + for t in obj.data_structure: + return Transition(label=t[0]) + diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/cuts/__init__.py b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4903c80e87af49bf6e73e4f858cd7939b259840e --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.powl.inductive.cuts import * diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/cuts/concurrency.py b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/concurrency.py new file mode 100644 index 0000000000000000000000000000000000000000..4db90a25525a03aaa0988b36bf5d2a645ee4f78c --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/concurrency.py @@ -0,0 +1,44 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from abc import ABC +from typing import Any, Optional, Dict, Generic, Tuple, List + +from pm4py.algo.discovery.inductive.cuts.concurrency import ConcurrencyCut, ConcurrencyCutUVCL, T +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.objects.powl.obj import StrictPartialOrder + + +class POWLConcurrencyCut(ConcurrencyCut, ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> StrictPartialOrder: + raise Exception("This function should not be called!") + + @classmethod + def apply(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[StrictPartialOrder, List[T]]]: + g = cls.holds(obj, parameters) + if g is None: + return g + else: + children = cls.project(obj, g, parameters) + return StrictPartialOrder(children), children + + +class POWLConcurrencyCutUVCL(ConcurrencyCutUVCL, POWLConcurrencyCut[IMDataStructureUVCL]): + pass + diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/cuts/factory.py b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/factory.py new file mode 100644 index 0000000000000000000000000000000000000000..845b676522fb009771ac0016bad2ed999a410ca8 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/factory.py @@ -0,0 +1,44 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import List, Optional, Tuple, Dict, Any, Type + +from pm4py.algo.discovery.inductive.cuts.factory import S, T +from pm4py.algo.discovery.powl.inductive.cuts.concurrency import POWLConcurrencyCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.loop import POWLLoopCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.sequence import POWLStrictSequenceCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.xor import POWLExclusiveChoiceCutUVCL +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure, IMDataStructureUVCL +from pm4py.objects.powl.obj import POWL + + +class CutFactory: + + @classmethod + def get_cuts(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> List[Type[S]]: + if type(obj) is IMDataStructureUVCL: + return [POWLExclusiveChoiceCutUVCL, POWLStrictSequenceCutUVCL, POWLConcurrencyCutUVCL, POWLLoopCutUVCL] + return list() + + @classmethod + def find_cut(cls, obj: IMDataStructure, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[POWL, List[T]]]: + for c in CutFactory.get_cuts(obj): + r = c.apply(obj, parameters) + if r is not None: + return r + return None diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/cuts/loop.py b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/loop.py new file mode 100644 index 0000000000000000000000000000000000000000..e9c5f6c4aaf2436620d75bd1e0625aa3a37c5ee9 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/loop.py @@ -0,0 +1,44 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from abc import ABC +from typing import Optional, Any, Dict, Generic, List, Tuple + +from pm4py.algo.discovery.inductive.cuts.loop import LoopCut, LoopCutUVCL, T +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.objects.powl.obj import OperatorPOWL, POWL +from pm4py.objects.process_tree.obj import Operator + + +class POWLLoopCut(LoopCut, ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> OperatorPOWL: + raise Exception("This function should not be called!") + + @classmethod + def apply(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[POWL, List[T]]]: + g = cls.holds(obj, parameters) + if g is None: + return g + else: + children = cls.project(obj, g, parameters) + return OperatorPOWL(Operator.LOOP, children), children + + +class POWLLoopCutUVCL(LoopCutUVCL, POWLLoopCut[IMDataStructureUVCL]): + pass diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/cuts/sequence.py b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/sequence.py new file mode 100644 index 0000000000000000000000000000000000000000..cd1341f9e6922a0c67be3a5165d15c03351dbb1f --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/sequence.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from abc import ABC +from typing import Any, Optional, Dict, Tuple, List, Generic + +from pm4py.algo.discovery.inductive.base_case.abc import T +from pm4py.algo.discovery.inductive.cuts.sequence import SequenceCut, SequenceCutUVCL, StrictSequenceCutUVCL, \ + StrictSequenceCut +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.objects.powl.obj import Sequence + + +class POWLSequenceCut(SequenceCut, ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> Sequence: + raise Exception("This function should not be called!") + + @classmethod + def apply(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[Sequence, List[T]]]: + g = cls.holds(obj, parameters) + if g is None: + return g + children = cls.project(obj, g, parameters) + po = Sequence(children) + return po, children + + +class POWLStrictSequenceCut(POWLSequenceCut[T], StrictSequenceCut, ABC): + pass + + +class POWLSequenceCutUVCL(SequenceCutUVCL, POWLSequenceCut[IMDataStructureUVCL]): + pass + + +class POWLStrictSequenceCutUVCL(StrictSequenceCutUVCL, StrictSequenceCut[IMDataStructureUVCL], POWLSequenceCutUVCL): + pass diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/cuts/xor.py b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/xor.py new file mode 100644 index 0000000000000000000000000000000000000000..4aa73087eb55bba7293dd67b3e856c4d178465fc --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/cuts/xor.py @@ -0,0 +1,44 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from abc import ABC +from typing import Optional, Any, Dict, Generic, Tuple, List + +from pm4py.algo.discovery.inductive.cuts.xor import ExclusiveChoiceCut, ExclusiveChoiceCutUVCL, T +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.objects.powl.obj import OperatorPOWL, POWL +from pm4py.objects.process_tree.obj import Operator + + +class POWLExclusiveChoiceCut(ExclusiveChoiceCut, ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> OperatorPOWL: + raise Exception("This function should not be called!") + + @classmethod + def apply(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[POWL, List[T]]]: + g = cls.holds(obj, parameters) + if g is None: + return g + else: + children = cls.project(obj, g, parameters) + return OperatorPOWL(Operator.XOR, children), children + + +class POWLExclusiveChoiceCutUVCL(ExclusiveChoiceCutUVCL, POWLExclusiveChoiceCut[IMDataStructureUVCL], ABC): + pass diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/__init__.py b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..32963ed9b92865dff4496900d2c52249af696ce8 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.powl.inductive.fall_through import * \ No newline at end of file diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/activity_concurrent.py b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/activity_concurrent.py new file mode 100644 index 0000000000000000000000000000000000000000..5d2542a1b569c13fbdd18263ef86a48ad638a237 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/activity_concurrent.py @@ -0,0 +1,43 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from collections import Counter +from multiprocessing import Pool, Manager +from typing import Optional, Tuple, List, Any, Dict + +from pm4py.algo.discovery.inductive.fall_through.activity_concurrent import ActivityConcurrentUVCL +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.objects.powl.obj import StrictPartialOrder + + +class POWLActivityConcurrentUVCL(ActivityConcurrentUVCL): + + @classmethod + def apply(cls, obj: IMDataStructureUVCL, pool: Pool = None, manager: Manager = None, + parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[StrictPartialOrder, List[IMDataStructureUVCL]]]: + candidate = cls._get_candidate(obj, pool, manager, parameters) + if candidate is None: + return None + log = obj.data_structure + l_a = Counter() + l_other = Counter() + for t in log: + l_a.update({tuple(filter(lambda e: e == candidate, t)): log[t]}) + l_other.update({tuple(filter(lambda e: e != candidate, t)): log[t]}) + children = [IMDataStructureUVCL(l_a), IMDataStructureUVCL(l_other)] + return StrictPartialOrder(children), children diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/activity_once_per_trace.py b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/activity_once_per_trace.py new file mode 100644 index 0000000000000000000000000000000000000000..d5223d044ca2484b73d6e82abbd9bc18b45e7bf8 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/activity_once_per_trace.py @@ -0,0 +1,44 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from typing import Optional, Tuple, List, Any, Dict + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.inductive.fall_through.activity_once_per_trace import ActivityOncePerTraceUVCL +from pm4py.algo.discovery.powl.inductive.fall_through.activity_concurrent import POWLActivityConcurrentUVCL +from pm4py.objects.powl.obj import StrictPartialOrder +from pm4py.objects.process_tree.obj import ProcessTree, Operator + + +class POWLActivityOncePerTraceUVCL(ActivityOncePerTraceUVCL, POWLActivityConcurrentUVCL): + @classmethod + def apply(cls, obj: IMDataStructureUVCL, + pool=None, + manager=None, + parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[StrictPartialOrder, List[IMDataStructureUVCL]]]: + + candidate = cls._get_candidate(obj, pool, manager, parameters) + if candidate is None: + return None + log = obj.data_structure + l_a = Counter() + l_other = Counter() + for t in log: + l_a.update({tuple(filter(lambda e: e == candidate, t)): log[t]}) + l_other.update({tuple(filter(lambda e: e != candidate, t)): log[t]}) + children = [IMDataStructureUVCL(l_a), IMDataStructureUVCL(l_other)] + return StrictPartialOrder(children), children diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/empty_traces.py b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/empty_traces.py new file mode 100644 index 0000000000000000000000000000000000000000..8c77f30966e750180c28a575baa4b31fcf9f3364 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/empty_traces.py @@ -0,0 +1,41 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from collections import Counter +from multiprocessing import Pool, Manager +from typing import Tuple, List, Optional, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.inductive.fall_through.empty_traces import EmptyTracesUVCL +from pm4py.objects.powl.obj import OperatorPOWL +from pm4py.objects.process_tree.obj import Operator +from copy import copy + + +class POWLEmptyTracesUVCL(EmptyTracesUVCL): + + @classmethod + def apply(cls, obj: IMDataStructureUVCL, pool: Pool = None, manager: Manager = None, + parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[OperatorPOWL, List[IMDataStructureUVCL]]]: + if cls.holds(obj, parameters): + data_structure = copy(obj.data_structure) + del data_structure[()] + children = [IMDataStructureUVCL(Counter()), IMDataStructureUVCL(data_structure)] + return OperatorPOWL(Operator.XOR, children), children + else: + return None diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/factory.py b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/factory.py new file mode 100644 index 0000000000000000000000000000000000000000..9571d5143c1c1bd4d4fccd4baa7fa78e4abd9286 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/factory.py @@ -0,0 +1,50 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from multiprocessing import Pool, Manager +from typing import List, TypeVar, Tuple, Optional, Dict, Any, Type + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure, IMDataStructureUVCL +from pm4py.algo.discovery.inductive.fall_through.abc import FallThrough +from pm4py.algo.discovery.powl.inductive.fall_through.activity_concurrent import POWLActivityConcurrentUVCL +from pm4py.algo.discovery.powl.inductive.fall_through.activity_once_per_trace import POWLActivityOncePerTraceUVCL +from pm4py.algo.discovery.powl.inductive.fall_through.empty_traces import POWLEmptyTracesUVCL +from pm4py.algo.discovery.powl.inductive.fall_through.flower import POWLFlowerModelUVCL +from pm4py.algo.discovery.powl.inductive.fall_through.strict_tau_loop import POWLStrictTauLoopUVCL +from pm4py.algo.discovery.powl.inductive.fall_through.tau_loop import POWLTauLoopUVCL +from pm4py.objects.powl.obj import POWL + +T = TypeVar('T', bound=IMDataStructure) +S = TypeVar('S', bound=FallThrough) + + +class FallThroughFactory: + + @classmethod + def get_fall_throughs(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> List[Type[S]]: + if type(obj) is IMDataStructureUVCL: + return [POWLEmptyTracesUVCL, POWLActivityOncePerTraceUVCL, POWLActivityConcurrentUVCL, + POWLStrictTauLoopUVCL, POWLTauLoopUVCL, POWLFlowerModelUVCL] + return list() + + @classmethod + def fall_through(cls, obj: T, pool: Pool, manager: Manager, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[POWL, List[T]]]: + for f in FallThroughFactory.get_fall_throughs(obj): + r = f.apply(obj, pool, manager, parameters) + if r is not None: + return r + return None diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/flower.py b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/flower.py new file mode 100644 index 0000000000000000000000000000000000000000..5f704d3b54fc5b0a60a7ac339549ec88d44df12b --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/flower.py @@ -0,0 +1,44 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from multiprocessing import Pool, Manager +from typing import Optional, Tuple, List, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.inductive.fall_through.flower import FlowerModelUVCL +from pm4py.objects.powl.obj import OperatorPOWL +from pm4py.objects.process_tree.obj import Operator +from pm4py.util.compression import util as comut +from pm4py.util.compression.dtypes import UVCL + + +class POWLFlowerModelUVCL(FlowerModelUVCL): + + @classmethod + def apply(cls, obj: IMDataStructureUVCL, pool: Pool = None, manager: Manager = None, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[OperatorPOWL, List[IMDataStructureUVCL]]]: + log = obj.data_structure + uvcl_do = UVCL() + for a in comut.get_alphabet(log): + uvcl_do[(a,)] = 1 + uvcl_redo = UVCL() + im_uvcl_do = IMDataStructureUVCL(uvcl_do) + im_uvcl_redo = IMDataStructureUVCL(uvcl_redo) + children = [im_uvcl_do, im_uvcl_redo] + return OperatorPOWL(Operator.LOOP, children), children + + diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/strict_tau_loop.py b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/strict_tau_loop.py new file mode 100644 index 0000000000000000000000000000000000000000..dac3a8d9cf5d6d3de2084666989bbbb2cf55963c --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/strict_tau_loop.py @@ -0,0 +1,37 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from collections import Counter +from multiprocessing import Pool, Manager +from typing import Optional, Tuple, List, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.inductive.fall_through.strict_tau_loop import StrictTauLoopUVCL +from pm4py.objects.powl.obj import OperatorPOWL +from pm4py.objects.process_tree.obj import Operator + + +class POWLStrictTauLoopUVCL(StrictTauLoopUVCL): + + @classmethod + def apply(cls, obj: IMDataStructureUVCL, pool: Pool = None, manager: Manager = None, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[OperatorPOWL, List[IMDataStructureUVCL]]]: + log = obj.data_structure + proj = cls._get_projected_log(log) + if sum(proj.values()) > sum(log.values()): + children = [IMDataStructureUVCL(proj), IMDataStructureUVCL(Counter())] + return OperatorPOWL(Operator.LOOP, children), children + diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/tau_loop.py b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/tau_loop.py new file mode 100644 index 0000000000000000000000000000000000000000..e4318b9b4177aaba8c5e2458d72d4211ef19a49a --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/fall_through/tau_loop.py @@ -0,0 +1,40 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from collections import Counter +from typing import Optional, Dict, Any + +from pm4py.algo.discovery.inductive.fall_through.tau_loop import TauLoopUVCL +from pm4py.algo.discovery.powl.inductive.fall_through.strict_tau_loop import POWLStrictTauLoopUVCL +from pm4py.util.compression import util as comut +from pm4py.util.compression.dtypes import UVCL + + +class POWLTauLoopUVCL(POWLStrictTauLoopUVCL, TauLoopUVCL): + + @classmethod + def _get_projected_log(cls, log: UVCL, parameters: Optional[Dict[str, Any]] = None) -> UVCL: + start_activities = comut.get_start_activities(log) + proj = Counter() + for t in log: + x = 0 + for i in range(1, len(t)): + if t[i] in start_activities: + proj.update({t[x:i]: log[t]}) + x = i + proj.update({t[x:len(t)]: log[t]}) + return proj diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/utils/__init__.py b/pm4py/pm4py/algo/discovery/powl/inductive/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/utils/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/utils/filtering.py b/pm4py/pm4py/algo/discovery/powl/inductive/utils/filtering.py new file mode 100644 index 0000000000000000000000000000000000000000..bce79ac3315558030cc98fb78b9473306c0cf835 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/utils/filtering.py @@ -0,0 +1,59 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum, auto +from collections import Counter +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL + + +class FilteringType(Enum): + DYNAMIC = auto() + DECREASING_FACTOR = auto() + + +DEFAULT_FILTERING_TYPE = FilteringType.DECREASING_FACTOR +FILTERING_THRESHOLD = "filtering_threshold" +FILTERING_TYPE = "filtering_type" + + +def filter_most_frequent_variants(log): + to_remove_freq = min([freq for var, freq in log.items()]) + new_log = Counter() + for var, freq in log.items(): + if freq == to_remove_freq: + continue + new_log[var] = freq + + return IMDataStructureUVCL(new_log) + + +def filter_most_frequent_variants_with_decreasing_factor(log, decreasing_factor): + sorted_variants = sorted(log, key=log.get, reverse=True) + new_log = Counter() + + already_added_sum = 0 + prev_var_count = -1 + + for variant in sorted_variants: + frequency = log[variant] + if already_added_sum == 0 or frequency > decreasing_factor * prev_var_count: + new_log[variant] = frequency + already_added_sum = already_added_sum + frequency + prev_var_count = frequency + else: + break + + return IMDataStructureUVCL(new_log) diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/__init__.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9162b6d332bc01f180fad99039f4ae408d80a524 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/__init__.py @@ -0,0 +1,19 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.powl.inductive.variants import * + diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/brute_force/__init__.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/brute_force/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..77457b629c8c089c4995cb30a1fad9c8f12d77ae --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/brute_force/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.discovery.powl.inductive.variants.brute_force import * \ No newline at end of file diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/brute_force/bf_partial_order_cut.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/brute_force/bf_partial_order_cut.py new file mode 100644 index 0000000000000000000000000000000000000000..bd676022d7bf61754e13078fb448545409719450 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/brute_force/bf_partial_order_cut.py @@ -0,0 +1,214 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from abc import ABC +from collections import Counter +from itertools import combinations +from typing import Any, Optional, Dict, List, Generic, Tuple, Collection + +from pm4py.algo.discovery.inductive.cuts.abc import Cut, T + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.objects.powl.BinaryRelation import BinaryRelation +from pm4py.objects.powl.obj import StrictPartialOrder, POWL +from pm4py.objects.dfg import util as dfu +from pm4py.statistics.eventually_follows.uvcl.get import apply as to_efg + + +def remove(blocks, g): + res = [] + for g2 in blocks: + if not g2.__str__().__eq__(g.__str__()): + res.append(g2) + return res + + +def contains(blocks, g): + for g2 in blocks: + if g2.__str__().__eq__(g.__str__()): + return True + return False + + +def xor(a, b): + if a and not b: + return True + elif not a and b: + return True + else: + return False + + +def get_partitions_of_size_k(nodes, k=None): + n = len(nodes) + if k is not None: + if k < 1: + raise ValueError( + "Can't partition in a negative or zero number of groups" + ) + elif k > n: + return + + def set_partitions_helper(l, k): + length = len(l) + if k == 1: + yield [tuple(l)] + elif length == k: + yield [tuple([s]) for s in l] + else: + e, *M = l + for p in set_partitions_helper(M, k - 1): + yield [tuple([e]), *p] + for p in set_partitions_helper(M, k): + for i in range(len(p)): + yield p[:i] + [tuple([e]) + p[i]] + p[i + 1:] + + if k is None: + for k in range(1, n + 1): + yield from set_partitions_helper(nodes, k) + else: + yield from set_partitions_helper(nodes, k) + + +def partition(collection): + i = len(collection) + while i > 1: + for part in get_partitions_of_size_k(collection, i): + yield part + i = i - 1 + return + + +def generate_order(parts, efg): + nodes = parts + po = BinaryRelation(nodes) + for group_1, group_2 in combinations(nodes, 2): + all_ef_g1_g2 = True + all_ef_g2_g1 = True + none_ef_g1_g2 = True + none_ef_g2_g1 = True + for a in group_1: + for b in group_2: + if (a, b) in efg: + none_ef_g1_g2 = False + else: + all_ef_g1_g2 = False + + if (b, a) in efg: + none_ef_g2_g1 = False + else: + all_ef_g2_g1 = False + + if all_ef_g1_g2 and none_ef_g2_g1: + po.add_edge(group_1, group_2) + elif none_ef_g1_g2 and all_ef_g2_g1: + po.add_edge(group_2, group_1) + + return po + + +def is_valid_order(po, dfg_graph, efg): + if not po.is_strict_partial_order(): + return False + + start_blocks = po.nodes + end_blocks = po.nodes + + for group_1, group_2 in combinations(po.nodes, 2): + + edge_g1_g2 = po.is_edge(group_1, group_2) + edge_g2_g1 = po.is_edge(group_2, group_1) + + if edge_g1_g2: + start_blocks = remove(start_blocks, group_2) + end_blocks = remove(end_blocks, group_1) + if edge_g2_g1: + start_blocks = remove(start_blocks, group_1) + end_blocks = remove(end_blocks, group_2) + + all_ef_g1_g2 = True + all_ef_g2_g1 = True + + for a in group_1: + for b in group_2: + if not (a, b) in efg: + all_ef_g1_g2 = False + if not (b, a) in efg: + all_ef_g2_g1 = False + if all_ef_g1_g2 and all_ef_g2_g1 and (edge_g1_g2 or edge_g2_g1): + return False + if not edge_g1_g2 and not edge_g2_g1 and not (all_ef_g1_g2 and all_ef_g2_g1): + return False + + n = len(po.nodes) + for i in range(n): + group = po.nodes[i] + c1 = contains(start_blocks, group) + c2 = len(set(group).intersection(set(dfg_graph.start_activities.keys()))) > 0 + c3 = contains(end_blocks, group) + c4 = len(set(group).intersection(set(dfg_graph.end_activities.keys()))) > 0 + if (c1 and not c2) or (c3 and not c4): + return False + + return True + + +class BruteForcePartialOrderCut(Cut[T], ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> StrictPartialOrder: + raise Exception("This function should not be called!") + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[BinaryRelation]: + dfg_graph = obj.dfg + efg = to_efg(obj) + alphabet = sorted(dfu.get_vertices(dfg_graph), key=lambda g: g.__str__()) + for part in partition(alphabet): + po = generate_order(part, efg) + if is_valid_order(po, dfg_graph, efg): + return po + return None + + @classmethod + def apply(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[StrictPartialOrder, List[POWL]]]: + g = cls.holds(obj, parameters) + if g is None: + return g + children = cls.project(obj, g.nodes, parameters) + po = StrictPartialOrder(children) + for i, j in combinations(range(len(g.nodes)), 2): + if g.is_edge_id(i, j): + po.order.add_edge(children[i], children[j]) + elif g.is_edge_id(j, i): + po.order.add_edge(children[j], children[i]) + return po, po.children + + +class BruteForcePartialOrderCutUVCL(BruteForcePartialOrderCut[IMDataStructureUVCL]): + + @classmethod + def project(cls, obj: IMDataStructureUVCL, groups: List[Collection[Any]], + parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureUVCL]: + r = list() + for g in groups: + c = Counter() + for t in obj.data_structure: + c[tuple(filter(lambda e: e in g, t))] = obj.data_structure[t] + r.append(c) + return list(map(lambda l: IMDataStructureUVCL(l), r)) diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/brute_force/factory.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/brute_force/factory.py new file mode 100644 index 0000000000000000000000000000000000000000..5b601142f682400b7788b07cd01e87c54dca68b3 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/brute_force/factory.py @@ -0,0 +1,46 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import List, Optional, Dict, Any, Tuple, Type + +from pm4py.algo.discovery.powl.inductive.cuts.concurrency import POWLConcurrencyCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.factory import S, T, CutFactory +from pm4py.algo.discovery.powl.inductive.cuts.loop import POWLLoopCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.sequence import POWLStrictSequenceCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.xor import POWLExclusiveChoiceCutUVCL +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.powl.inductive.variants.brute_force.bf_partial_order_cut import BruteForcePartialOrderCutUVCL +from pm4py.objects.powl.obj import POWL + + +class CutFactoryPOWLBruteForce(CutFactory): + + @classmethod + def get_cuts(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> List[Type[S]]: + if type(obj) is IMDataStructureUVCL: + return [POWLExclusiveChoiceCutUVCL, POWLStrictSequenceCutUVCL, POWLConcurrencyCutUVCL, POWLLoopCutUVCL, + BruteForcePartialOrderCutUVCL] + return list() + + @classmethod + def find_cut(cls, obj: IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[POWL, List[T]]]: + for c in CutFactoryPOWLBruteForce.get_cuts(obj): + r = c.apply(obj, parameters) + if r is not None: + return r + return None diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering/__init__.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0b9ee2aea663a59024147de9d6d8fd6f442a6900 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.powl.inductive.variants.dynamic_clustering import * diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering/dynamic_clustering_partial_order_cut.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering/dynamic_clustering_partial_order_cut.py new file mode 100644 index 0000000000000000000000000000000000000000..647aa134df4c6049dc8ea6a432f5c9bd233ed04f --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering/dynamic_clustering_partial_order_cut.py @@ -0,0 +1,166 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from itertools import product +from abc import ABC +from itertools import combinations +from typing import Any, Optional, Dict, List, Generic, Tuple, Collection + +from pm4py.algo.discovery.inductive.cuts.abc import Cut, T +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.objects.powl.BinaryRelation import BinaryRelation +from pm4py.objects.powl.obj import StrictPartialOrder, POWL +from pm4py.algo.discovery.inductive.cuts import utils as cut_util +from pm4py.algo.discovery.powl.inductive.variants.maximal.maximal_partial_order_cut import project_on_groups_with_unique_activities +from pm4py.objects.dfg import util as dfu +from pm4py.statistics.eventually_follows.uvcl.get import apply as to_efg + + +def generate_order(clusters, efg): + # Step 0: if we have one single group containing all activities ---> invoke fall-through. + if len(clusters) < 2: + return None + + # Step 1: Generate Order based on the EFG + po = BinaryRelation([tuple(c) for c in sorted(clusters)]) + at_least_one_efg = [[False for _ in range(len(po.nodes))] for _ in range(len(po.nodes))] + all_efg = [[True for _ in range(len(po.nodes))] for _ in range(len(po.nodes))] + + changed = False + for i in range(len(po.nodes)): + cluster_1 = po.nodes[i] + for j in range(i + 1, len(po.nodes)): + cluster_2 = po.nodes[j] + for a in cluster_1: + for b in cluster_2: + if (a, b) in efg: + at_least_one_efg[i][j] = True + else: + all_efg[i][j] = False + if (b, a) in efg: + at_least_one_efg[j][i] = True + else: + all_efg[j][i] = False + + if at_least_one_efg[i][j] and not at_least_one_efg[j][i]: + po.add_edge(cluster_1, cluster_2) + elif at_least_one_efg[j][i] and not at_least_one_efg[i][j]: + po.add_edge(cluster_2, cluster_1) + + # Step 2: Ensure Transitivity and Irreflexivity + if not po.is_transitive(): + n = len(po.nodes) + continue_loop = True + while continue_loop: + continue_loop = False + for i, j, k in product(range(n), range(n), range(n)): + if i != j and j != k and po.edges[i][j] and po.edges[j][k] and not po.is_edge_id(i, k): + if not at_least_one_efg[k][i]: + po.edges[i][k] = True + continue_loop = True + else: + clusters = cut_util.merge_lists_based_on_activities(po.nodes[i][0], po.nodes[k][0], clusters) + return generate_order(clusters, efg) + + if not po.is_irreflexive(): + for i in range(len(po.nodes)): + cluster_1 = po.nodes[i] + for j in range(i + 1, len(po.nodes)): + cluster_2 = po.nodes[j] + if po.is_edge(cluster_1, cluster_2) and po.is_edge(cluster_2, cluster_1): + clusters = cut_util.merge_lists_based_on_activities(cluster_1[0], cluster_2[0], clusters) + changed = True + + if changed: + return generate_order(clusters, efg) + + # # Step 3: Detect Choice + for i in range(len(po.nodes)): + cluster_1 = po.nodes[i] + for j in range(i + 1, len(po.nodes)): + cluster_2 = po.nodes[j] + if not po.is_edge(cluster_1, cluster_2) and not po.is_edge(cluster_2, cluster_1) and not \ + at_least_one_efg[i][j] and not at_least_one_efg[j][i]: + clusters = cut_util.merge_lists_based_on_activities(cluster_1[0], cluster_2[0], clusters) + changed = True + + if changed: + return generate_order(clusters, efg) + + # Step 4: Cluster nodes sharing the same pre- and post-sets. + pre = {node: [] for node in po.nodes} + post = {node: [] for node in po.nodes} + for i in range(len(po.nodes)): + cluster_1 = po.nodes[i] + for j in range(i + 1, len(po.nodes)): + cluster_2 = po.nodes[j] + if po.is_edge(cluster_1, cluster_2): + pre[cluster_2].append(cluster_1) + post[cluster_1].append(cluster_2) + elif po.is_edge(cluster_2, cluster_1): + pre[cluster_1].append(cluster_2) + post[cluster_2].append(cluster_1) + + for i in range(len(po.nodes)): + cluster_1 = po.nodes[i] + for j in range(i + 1, len(po.nodes)): + cluster_2 = po.nodes[j] + if pre[cluster_1] == pre[cluster_2] and post[cluster_1] == post[cluster_2]: + clusters = cut_util.merge_lists_based_on_activities(cluster_1[0], cluster_2[0], clusters) + changed = True + + if changed and len(clusters) > 1: + return generate_order(clusters, efg) + else: + return po + + +class DynamicClusteringPartialOrderCut(Cut[T], ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> StrictPartialOrder: + raise Exception("This function should not be called!") + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[BinaryRelation]: + alphabet = sorted(dfu.get_vertices(obj.dfg), key=lambda g: g.__str__()) + efg = to_efg(obj) + clusters = [[a] for a in alphabet] + po = generate_order(clusters, efg) + return po + + @classmethod + def apply(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[StrictPartialOrder, + List[POWL]]]: + g = cls.holds(obj, parameters) + if g is None: + return g + children = cls.project(obj, g.nodes, parameters) + po = StrictPartialOrder(children) + for i, j in combinations(range(len(g.nodes)), 2): + if g.is_edge_id(i, j): + po.order.add_edge(children[i], children[j]) + elif g.is_edge_id(j, i): + po.order.add_edge(children[j], children[i]) + return po, po.children + + +class DynamicClusteringPartialOrderCutUVCL(DynamicClusteringPartialOrderCut[IMDataStructureUVCL]): + + @classmethod + def project(cls, obj: IMDataStructureUVCL, groups: List[Collection[Any]], + parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureUVCL]: + return project_on_groups_with_unique_activities(obj.data_structure, groups) diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering/factory.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering/factory.py new file mode 100644 index 0000000000000000000000000000000000000000..38dabdbbe26574f3d1ac2c122e70618f2360f076 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering/factory.py @@ -0,0 +1,45 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import List, Optional, Dict, Any, Tuple + +from pm4py.algo.discovery.powl.inductive.cuts.factory import T, CutFactory +from pm4py.algo.discovery.powl.inductive.cuts.loop import POWLLoopCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.xor import POWLExclusiveChoiceCutUVCL +from pm4py.algo.discovery.powl.inductive.variants.dynamic_clustering.dynamic_clustering_partial_order_cut import \ + DynamicClusteringPartialOrderCutUVCL +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure +from pm4py.objects.powl.obj import POWL +from pm4py.objects.dfg import util as dfu + + +class CutFactoryPOWLDynamicClustering(CutFactory): + + @classmethod + def get_cuts(cls, obj, parameters=None): + return [POWLExclusiveChoiceCutUVCL, POWLLoopCutUVCL, DynamicClusteringPartialOrderCutUVCL] + + @classmethod + def find_cut(cls, obj: IMDataStructure, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[POWL, List[T]]]: + alphabet = sorted(dfu.get_vertices(obj.dfg), key=lambda g: g.__str__()) + if len(alphabet) < 2: + return None + for c in CutFactoryPOWLDynamicClustering.get_cuts(obj): + r = c.apply(obj, parameters) + if r is not None: + return r + return None diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering_frequency/__init__.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering_frequency/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..10f675a4790146d81eac40c88d7775fa6560075a --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering_frequency/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.powl.inductive.variants.dynamic_clustering_frequency import * diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering_frequency/dynamic_clustering_frequency_partial_order_cut.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering_frequency/dynamic_clustering_frequency_partial_order_cut.py new file mode 100644 index 0000000000000000000000000000000000000000..a0f4b26d2bd38ef4071b39f7e87a68e8a2007eaf --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering_frequency/dynamic_clustering_frequency_partial_order_cut.py @@ -0,0 +1,188 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from itertools import product +from abc import ABC +from itertools import combinations +from typing import Any, Optional, Dict, List, Generic, Tuple, Collection + +from pm4py.algo.discovery.inductive.cuts.abc import Cut, T +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.objects.powl.BinaryRelation import BinaryRelation +from pm4py.objects.powl.obj import StrictPartialOrder, POWL +from pm4py.algo.discovery.inductive.cuts import utils as cut_util +from pm4py.algo.discovery.powl.inductive.variants.maximal.maximal_partial_order_cut import \ + project_on_groups_with_unique_activities +from pm4py.objects.dfg import util as dfu + +ORDER_FREQUENCY_RATIO = "order frequency ratio" + + +def generate_order(obj: T, clusters, order_frequency_ratio): + # Step 0: if we have one single group containing all activities ---> invoke fall-through. + if len(clusters) < 2: + return None + + # Step 1: Generate Order based on the EFG + po = BinaryRelation([tuple(c) for c in sorted(clusters)]) + efg_freq = compute_efg_frequencies(obj, groups=po.nodes) + + changed = False + for i in range(len(po.nodes)): + cluster_1 = po.nodes[i] + for j in range(i + 1, len(po.nodes)): + cluster_2 = po.nodes[j] + + sum_freq = efg_freq[(cluster_1, cluster_2)] + efg_freq[(cluster_2, cluster_1)] + if sum_freq > 0: + if (float(efg_freq[(cluster_1, cluster_2)]) / sum_freq) >= order_frequency_ratio: + po.add_edge(cluster_1, cluster_2) + if (float(efg_freq[cluster_2, cluster_1]) / sum_freq) >= order_frequency_ratio: + po.add_edge(cluster_2, cluster_1) + + # Step 2: Ensure Transitivity and Irreflexivity + if not po.is_transitive(): + n = len(po.nodes) + continue_loop = True + while continue_loop: + continue_loop = False + for i, j, k in product(range(n), range(n), range(n)): + if i != j and j != k and po.edges[i][j] and po.edges[j][k] and not po.is_edge_id(i, k): + if efg_freq[(po.nodes[k], po.nodes[i])] + efg_freq[(po.nodes[i], po.nodes[k])] == 0: + po.edges[i][k] = True + continue_loop = True + else: + clusters = cut_util.merge_lists_based_on_activities(po.nodes[i][0], po.nodes[k][0], clusters) + return generate_order(obj, clusters, order_frequency_ratio) + + if not po.is_irreflexive(): + for i in range(len(po.nodes)): + cluster_1 = po.nodes[i] + for j in range(i + 1, len(po.nodes)): + cluster_2 = po.nodes[j] + if po.is_edge(cluster_1, cluster_2) and po.is_edge(cluster_2, cluster_1): + clusters = cut_util.merge_lists_based_on_activities(cluster_1[0], cluster_2[0], clusters) + changed = True + + if changed: + return generate_order(obj, clusters, order_frequency_ratio) + + # # Step 3: Detect Choice + for i in range(len(po.nodes)): + cluster_1 = po.nodes[i] + for j in range(i + 1, len(po.nodes)): + cluster_2 = po.nodes[j] + if not po.is_edge(cluster_1, cluster_2) and not po.is_edge(cluster_2, cluster_1) \ + and efg_freq[(cluster_1, cluster_2)] == 0 \ + and efg_freq[(cluster_2, cluster_1)] == 0: + clusters = cut_util.merge_lists_based_on_activities(cluster_1[0], cluster_2[0], clusters) + changed = True + + if changed: + return generate_order(obj, clusters, order_frequency_ratio) + + # Step 4: Cluster nodes sharing the same pre- and post-sets. + pre = {node: [] for node in po.nodes} + post = {node: [] for node in po.nodes} + for i in range(len(po.nodes)): + cluster_1 = po.nodes[i] + for j in range(i + 1, len(po.nodes)): + cluster_2 = po.nodes[j] + if po.is_edge(cluster_1, cluster_2): + pre[cluster_2].append(cluster_1) + post[cluster_1].append(cluster_2) + elif po.is_edge(cluster_2, cluster_1): + pre[cluster_1].append(cluster_2) + post[cluster_2].append(cluster_1) + + for i in range(len(po.nodes)): + cluster_1 = po.nodes[i] + for j in range(i + 1, len(po.nodes)): + cluster_2 = po.nodes[j] + if pre[cluster_1] == pre[cluster_2] and post[cluster_1] == post[cluster_2]: + clusters = cut_util.merge_lists_based_on_activities(cluster_1[0], cluster_2[0], clusters) + changed = True + + if changed and len(clusters) > 1: + return generate_order(obj, clusters, order_frequency_ratio) + else: + return po + + +def compute_efg_frequencies(interval_log: IMDataStructureUVCL, groups) -> Dict[Tuple[str, str], int]: + res = {(g1, g2): 0 for g1 in groups for g2 in groups} + + activity_to_cluster = {} + for cluster in groups: + for activity in cluster: + activity_to_cluster[activity] = cluster + + for trace, freq in interval_log.data_structure.items(): + seen_pairs = set() + for i in range(len(trace)): + cluster_1 = activity_to_cluster.get(trace[i]) + for j in range(i + 1, len(trace)): + cluster_2 = activity_to_cluster.get(trace[j]) + pair = (cluster_1, cluster_2) + if pair not in seen_pairs: + res[pair] += freq + seen_pairs.add(pair) + return res + + +class DynamicClusteringFrequencyPartialOrderCut(Cut[T], ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> StrictPartialOrder: + raise Exception("This function should not be called!") + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[BinaryRelation]: + alphabet = sorted(dfu.get_vertices(obj.dfg), key=lambda g: g.__str__()) + clusters = [[a] for a in alphabet] + + if ORDER_FREQUENCY_RATIO in parameters.keys(): + order_frequency_ratio = parameters[ORDER_FREQUENCY_RATIO] + if not (0.5 < order_frequency_ratio <= 1.0): + raise ValueError("Parameter value of " + ORDER_FREQUENCY_RATIO + "must be in range: 0.5 < value <= 1.0") + else: + order_frequency_ratio = 1.0 + + po = generate_order(obj, clusters, order_frequency_ratio) + return po + + @classmethod + def apply(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[StrictPartialOrder, + List[POWL]]]: + g = cls.holds(obj, parameters) + if g is None: + return g + children = cls.project(obj, g.nodes, parameters) + po = StrictPartialOrder(children) + for i, j in combinations(range(len(g.nodes)), 2): + if g.is_edge_id(i, j): + po.order.add_edge(children[i], children[j]) + elif g.is_edge_id(j, i): + po.order.add_edge(children[j], children[i]) + return po, po.children + + +class DynamicClusteringFrequencyPartialOrderCutUVCL(DynamicClusteringFrequencyPartialOrderCut[IMDataStructureUVCL]): + + @classmethod + def project(cls, obj: IMDataStructureUVCL, groups: List[Collection[Any]], + parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureUVCL]: + return project_on_groups_with_unique_activities(obj.data_structure, groups) diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering_frequency/factory.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering_frequency/factory.py new file mode 100644 index 0000000000000000000000000000000000000000..c67dc64705bff39b244028fa1074c6f0d8a0be99 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/dynamic_clustering_frequency/factory.py @@ -0,0 +1,45 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import List, Optional, Dict, Any, Tuple + +from pm4py.algo.discovery.powl.inductive.cuts.factory import T, CutFactory +from pm4py.algo.discovery.powl.inductive.cuts.loop import POWLLoopCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.xor import POWLExclusiveChoiceCutUVCL +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructure +from pm4py.algo.discovery.powl.inductive.variants.dynamic_clustering_frequency.dynamic_clustering_frequency_partial_order_cut import \ + DynamicClusteringFrequencyPartialOrderCutUVCL +from pm4py.objects.powl.obj import POWL +from pm4py.objects.dfg import util as dfu + + +class CutFactoryPOWLDynamicClusteringFrequency(CutFactory): + + @classmethod + def get_cuts(cls, obj, parameters=None): + return [POWLExclusiveChoiceCutUVCL, POWLLoopCutUVCL, DynamicClusteringFrequencyPartialOrderCutUVCL] + + @classmethod + def find_cut(cls, obj: IMDataStructure, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[POWL, List[T]]]: + alphabet = sorted(dfu.get_vertices(obj.dfg), key=lambda g: g.__str__()) + if len(alphabet) < 2: + return None + for c in CutFactoryPOWLDynamicClusteringFrequency.get_cuts(obj): + r = c.apply(obj, parameters) + if r is not None: + return r + return None diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_brute_force.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_brute_force.py new file mode 100644 index 0000000000000000000000000000000000000000..cb624e0d37be842321a70dff9cb88ac70bcbdccc --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_brute_force.py @@ -0,0 +1,33 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Tuple, List, Dict, Any + +from pm4py.algo.discovery.powl.inductive.variants.brute_force.factory import CutFactoryPOWLBruteForce +from pm4py.algo.discovery.powl.inductive.variants.im_tree import IMBasePOWL, T +from pm4py.algo.discovery.powl.inductive.variants.powl_discovery_varaints import POWLDiscoveryVariant +from pm4py.objects.powl.obj import POWL + + +class POWLInductiveMinerBruteForce(IMBasePOWL): + + def instance(self) -> POWLDiscoveryVariant: + return POWLDiscoveryVariant.BRUTE_FORCE + + def find_cut(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[POWL, List[T]]]: + res = CutFactoryPOWLBruteForce.find_cut(obj, parameters=parameters) + return res diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_dynamic_clustering.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_dynamic_clustering.py new file mode 100644 index 0000000000000000000000000000000000000000..019e9e66ee2741848681438bcfd56fd945608b00 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_dynamic_clustering.py @@ -0,0 +1,35 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Tuple, List, TypeVar, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureLog +from pm4py.algo.discovery.powl.inductive.variants.dynamic_clustering.factory import CutFactoryPOWLDynamicClustering +from pm4py.algo.discovery.powl.inductive.variants.im_tree import IMBasePOWL +from pm4py.algo.discovery.powl.inductive.variants.powl_discovery_varaints import POWLDiscoveryVariant +from pm4py.objects.powl.obj import POWL + +T = TypeVar('T', bound=IMDataStructureLog) + + +class POWLInductiveMinerDynamicClustering(IMBasePOWL): + + def instance(self) -> POWLDiscoveryVariant: + return POWLDiscoveryVariant.DYNAMIC_CLUSTERING + + def find_cut(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[POWL, List[T]]]: + res = CutFactoryPOWLDynamicClustering.find_cut(obj, parameters=parameters) + return res diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_dynamic_clustering_frequencies.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_dynamic_clustering_frequencies.py new file mode 100644 index 0000000000000000000000000000000000000000..a705be9b18d1639a7d68a01a76d93712f44bda36 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_dynamic_clustering_frequencies.py @@ -0,0 +1,36 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Tuple, List, TypeVar, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureLog +from pm4py.algo.discovery.powl.inductive.variants.dynamic_clustering_frequency.factory import \ + CutFactoryPOWLDynamicClusteringFrequency +from pm4py.algo.discovery.powl.inductive.variants.im_tree import IMBasePOWL +from pm4py.algo.discovery.powl.inductive.variants.powl_discovery_varaints import POWLDiscoveryVariant +from pm4py.objects.powl.obj import POWL + +T = TypeVar('T', bound=IMDataStructureLog) + + +class POWLInductiveMinerDynamicClusteringFrequency(IMBasePOWL): + + def instance(self) -> POWLDiscoveryVariant: + return POWLDiscoveryVariant.DYNAMIC_CLUSTERING + + def find_cut(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[POWL, List[T]]]: + res = CutFactoryPOWLDynamicClusteringFrequency.find_cut(obj, parameters=parameters) + return res diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_maximal.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_maximal.py new file mode 100644 index 0000000000000000000000000000000000000000..6efa39bb5ffcaa41c8aa791d1d26ed3a3f371af0 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_maximal.py @@ -0,0 +1,32 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Tuple, List, Dict, Any + +from pm4py.algo.discovery.powl.inductive.variants.maximal.factory import CutFactoryPOWLMaximal +from pm4py.algo.discovery.powl.inductive.variants.im_tree import IMBasePOWL, T +from pm4py.algo.discovery.powl.inductive.variants.powl_discovery_varaints import POWLDiscoveryVariant +from pm4py.objects.powl.obj import POWL + + +class POWLInductiveMinerMaximalOrder(IMBasePOWL): + + def instance(self) -> POWLDiscoveryVariant: + return POWLDiscoveryVariant.MAXIMAL + + def find_cut(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[POWL, List[T]]]: + res = CutFactoryPOWLMaximal.find_cut(obj, parameters=parameters) + return res diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_tree.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_tree.py new file mode 100644 index 0000000000000000000000000000000000000000..b785ee27e923fe76805214007a4abd89ea7e6dd4 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/im_tree.py @@ -0,0 +1,109 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from itertools import combinations +from typing import Optional, Tuple, List, TypeVar, Generic, Dict, Any + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.powl.inductive.fall_through.empty_traces import POWLEmptyTracesUVCL +from pm4py.algo.discovery.inductive.variants.abc import InductiveMinerFramework + +from pm4py.algo.discovery.powl.inductive.base_case.factory import BaseCaseFactory +from pm4py.algo.discovery.powl.inductive.cuts.factory import CutFactory +from pm4py.algo.discovery.powl.inductive.fall_through.factory import FallThroughFactory +from pm4py.algo.discovery.powl.inductive.utils.filtering import FILTERING_TYPE, FilteringType, \ + filter_most_frequent_variants, FILTERING_THRESHOLD, filter_most_frequent_variants_with_decreasing_factor, \ + DEFAULT_FILTERING_TYPE +from pm4py.algo.discovery.powl.inductive.variants.powl_discovery_varaints import POWLDiscoveryVariant + +from pm4py.objects.powl.obj import POWL, StrictPartialOrder, Sequence, OperatorPOWL + +T = TypeVar('T', bound=IMDataStructureUVCL) + + +class IMBasePOWL(Generic[T], InductiveMinerFramework[T]): + + def instance(self) -> POWLDiscoveryVariant: + return POWLDiscoveryVariant.TREE + + def apply(self, obj: IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> POWL: + if FILTERING_TYPE not in parameters.keys(): + filtering_type = DEFAULT_FILTERING_TYPE + else: + filtering_type = parameters[FILTERING_TYPE] + if filtering_type not in FilteringType: + raise KeyError("Invalid FILTERING_TYPE: " + str(filtering_type)) + + empty_traces = POWLEmptyTracesUVCL.apply(obj, parameters) + if empty_traces is not None: + return self._recurse(empty_traces[0], empty_traces[1], parameters) + + powl = self.apply_base_cases(obj, parameters) + if powl is not None: + return powl + + cut = self.find_cut(obj, parameters) + if cut is not None: + powl = self._recurse(cut[0], cut[1], parameters=parameters) + + if powl is not None: + return powl + else: + if filtering_type is FilteringType.DYNAMIC: + filtered_log = filter_most_frequent_variants(obj.data_structure) + if len(filtered_log.data_structure) > 0: + return self.apply(filtered_log, parameters=parameters) + + elif filtering_type is FilteringType.DECREASING_FACTOR: + if FILTERING_THRESHOLD in parameters.keys(): + t = parameters[FILTERING_THRESHOLD] + if isinstance(t, float) and 0 <= t < 1: + if t > 0: + filtered_log = filter_most_frequent_variants_with_decreasing_factor(obj.data_structure, + decreasing_factor=t) + if 0 < len(filtered_log.data_structure) < len(obj.data_structure): + return self.apply(filtered_log, parameters=parameters) + else: + raise KeyError("Invalid filtering threshold!") + else: + raise KeyError("Invalid filtering type!") + + ft = self.fall_through(obj, parameters) + return self._recurse(ft[0], ft[1], parameters=parameters) + + def apply_base_cases(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[POWL]: + return BaseCaseFactory.apply_base_cases(obj, parameters=parameters) + + def find_cut(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[POWL, List[T]]]: + return CutFactory.find_cut(obj, parameters=parameters) + + def fall_through(self, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Tuple[POWL, List[T]]: + return FallThroughFactory.fall_through(obj, self._pool, self._manager, parameters=parameters) + + def _recurse(self, powl: POWL, objs: List[T], parameters: Optional[Dict[str, Any]] = None): + children = [self.apply(obj, parameters=parameters) for obj in objs] + if isinstance(powl, StrictPartialOrder): + powl_new = StrictPartialOrder(children) + for i, j in combinations(range(len(powl.children)), 2): + if powl.order.is_edge_id(i, j): + powl_new.order.add_edge(children[i], children[j]) + elif powl.order.is_edge_id(j, i): + powl_new.order.add_edge(children[j], children[i]) + return powl_new + else: + new_powl = OperatorPOWL(operator=powl.operator, children=children) + return new_powl diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/maximal/__init__.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/maximal/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..07a5e22ada107f651c93e4391a17098ed06bd120 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/maximal/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.powl.inductive.variants.maximal import * \ No newline at end of file diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/maximal/factory.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/maximal/factory.py new file mode 100644 index 0000000000000000000000000000000000000000..35effde59059bc012678787ce1c0a6e191ad4ee6 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/maximal/factory.py @@ -0,0 +1,52 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import List, Optional, Dict, Any, Tuple, Type + +from pm4py.algo.discovery.powl.inductive.cuts.concurrency import POWLConcurrencyCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.factory import S, T, CutFactory +from pm4py.algo.discovery.powl.inductive.cuts.loop import POWLLoopCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.sequence import POWLStrictSequenceCutUVCL +from pm4py.algo.discovery.powl.inductive.cuts.xor import POWLExclusiveChoiceCutUVCL +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.algo.discovery.powl.inductive.variants.maximal.maximal_partial_order_cut import \ + MaximalPartialOrderCutUVCL +from pm4py.objects.powl.obj import POWL +from pm4py.objects.dfg import util as dfu + + +class CutFactoryPOWLMaximal(CutFactory): + + @classmethod + def get_cuts(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> List[Type[S]]: + if type(obj) is IMDataStructureUVCL: + return [POWLExclusiveChoiceCutUVCL, POWLStrictSequenceCutUVCL, POWLConcurrencyCutUVCL, POWLLoopCutUVCL, + MaximalPartialOrderCutUVCL] + return list() + + @classmethod + def find_cut(cls, obj: IMDataStructureUVCL, parameters: Optional[Dict[str, Any]] = None) -> Optional[ + Tuple[POWL, List[T]]]: + + alphabet = sorted(dfu.get_vertices(obj.dfg), key=lambda g: g.__str__()) + if len(alphabet) < 2: + return None + for c in CutFactoryPOWLMaximal.get_cuts(obj): + r = c.apply(obj, parameters) + if r is not None: + return r + return None diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/maximal/maximal_partial_order_cut.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/maximal/maximal_partial_order_cut.py new file mode 100644 index 0000000000000000000000000000000000000000..2e33ce1c128234b51c8d8398e0990ead6cb4378b --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/maximal/maximal_partial_order_cut.py @@ -0,0 +1,202 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from abc import ABC +from collections import Counter +from itertools import combinations +from typing import Any, Optional, Dict, List, Generic, Tuple, Collection + +from pm4py.algo.discovery.inductive.cuts.abc import Cut, T +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.objects.powl.BinaryRelation import BinaryRelation +from pm4py.objects.powl.obj import StrictPartialOrder, POWL +from pm4py.objects.dfg import util as dfu +from pm4py.statistics.eventually_follows.uvcl.get import apply as to_efg + + +def generate_initial_order(nodes, efg): + po = BinaryRelation(nodes) + for a, b in combinations(nodes, 2): + if (a, b) in efg: + if not (b, a) in efg: + po.add_edge(a, b) + else: + if (b, a) in efg: + po.add_edge(b, a) + return po + + +def remove(blocks, g): + res = [] + for g2 in blocks: + if not g2.__str__().__eq__(g.__str__()): + res.append(g2) + return res + + +def contains(blocks, g): + for g2 in blocks: + if g2.__str__().__eq__(g.__str__()): + return True + return False + + +def is_valid_order(po, efg, start_activities, end_activities): + if po is None: + return False + + if len(po.nodes) < 2: + return False + + if not po.is_strict_partial_order(): + return False + + start_blocks = po.nodes + end_blocks = po.nodes + + for group_1, group_2 in combinations(po.nodes, 2): + + edge_g1_g2 = po.is_edge(group_1, group_2) + edge_g2_g1 = po.is_edge(group_2, group_1) + + if edge_g1_g2: + start_blocks = remove(start_blocks, group_2) + end_blocks = remove(end_blocks, group_1) + if edge_g2_g1: + start_blocks = remove(start_blocks, group_1) + end_blocks = remove(end_blocks, group_2) + + all_ef_g1_g2 = True + all_ef_g2_g1 = True + + for a in group_1: + for b in group_2: + if not (a, b) in efg: + all_ef_g1_g2 = False + if not (b, a) in efg: + all_ef_g2_g1 = False + if all_ef_g1_g2 and all_ef_g2_g1 and (edge_g1_g2 or edge_g2_g1): + return False + if not edge_g1_g2 and not edge_g2_g1 and not (all_ef_g1_g2 and all_ef_g2_g1): + return False + + n = len(po.nodes) + for i in range(n): + group = po.nodes[i] + c1 = contains(start_blocks, group) + c2 = len(set(group).intersection(start_activities)) > 0 + c3 = contains(end_blocks, group) + c4 = len(set(group).intersection(end_activities)) > 0 + if (c1 and not c2) or (c3 and not c4): + return False + + return True + + +def cluster_order(binary_relation): + pre = {node: set() for node in binary_relation.nodes} + post = {node: set() for node in binary_relation.nodes} + for node1 in binary_relation.nodes: + for node2 in binary_relation.nodes: + if binary_relation.is_edge(node1, node2): + pre[node2].add(node1) + post[node1].add(node2) + + clusters = [] + for node in binary_relation.nodes: + matched = False + for i in range(len(clusters)): + cluster = clusters[i] + if pre[node] == pre[cluster[0]] and post[node] == post[cluster[0]]: + clusters[i].append(node) + matched = True + break + if not matched: + clusters.append([node]) + + new_relation = BinaryRelation([tuple(c) for c in clusters]) + for cluster1 in new_relation.nodes: + for cluster2 in new_relation.nodes: + node1 = cluster1[0] + node2 = cluster2[0] + if binary_relation.is_edge(node1, node2): + new_relation.add_edge(cluster1, cluster2) + + return new_relation + + +class MaximalPartialOrderCut(Cut[T], ABC, Generic[T]): + + @classmethod + def operator(cls, parameters: Optional[Dict[str, Any]] = None) -> StrictPartialOrder: + raise Exception("This function should not be called!") + + @classmethod + def holds(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[BinaryRelation]: + + efg = to_efg(obj) + alphabet = sorted(dfu.get_vertices(obj.dfg), key=lambda g: g.__str__()) + po = generate_initial_order(alphabet, efg) + clustered_po = cluster_order(po) + + start_activities = set(list(obj.dfg.start_activities.keys())) + end_activities = set(list(obj.dfg.end_activities.keys())) + if is_valid_order(clustered_po, efg, start_activities, end_activities): + return clustered_po + else: + return None + + @classmethod + def apply(cls, obj: T, parameters: Optional[Dict[str, Any]] = None) -> Optional[Tuple[StrictPartialOrder, + List[POWL]]]: + g = cls.holds(obj, parameters) + if g is None: + return g + children = cls.project(obj, g.nodes, parameters) + po = StrictPartialOrder(children) + for i, j in combinations(range(len(g.nodes)), 2): + if g.is_edge_id(i, j): + po.order.add_edge(children[i], children[j]) + elif g.is_edge_id(j, i): + po.order.add_edge(children[j], children[i]) + return po, po.children + + +def project_on_groups_with_unique_activities(log: Counter, groups: List[Collection[Any]]): + r = list() + for g in groups: + new_log = Counter() + for var, freq in log.items(): + new_var = [] + for activity in var: + if activity in g: + new_var.append(activity) + new_var_tuple = tuple(new_var) + if new_var_tuple in new_log.keys(): + new_log[new_var_tuple] = new_log[new_var_tuple] + freq + else: + new_log[new_var_tuple] = freq + r.append(new_log) + return list(map(lambda l: IMDataStructureUVCL(l), r)) + + +class MaximalPartialOrderCutUVCL(MaximalPartialOrderCut[IMDataStructureUVCL]): + + @classmethod + def project(cls, obj: IMDataStructureUVCL, groups: List[Collection[Any]], + parameters: Optional[Dict[str, Any]] = None) -> List[IMDataStructureUVCL]: + return project_on_groups_with_unique_activities(obj.data_structure, groups) diff --git a/pm4py/pm4py/algo/discovery/powl/inductive/variants/powl_discovery_varaints.py b/pm4py/pm4py/algo/discovery/powl/inductive/variants/powl_discovery_varaints.py new file mode 100644 index 0000000000000000000000000000000000000000..9a1201d7092f4dcc24eb5a6f9b19c67ae8c507df --- /dev/null +++ b/pm4py/pm4py/algo/discovery/powl/inductive/variants/powl_discovery_varaints.py @@ -0,0 +1,24 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum, auto + + +class POWLDiscoveryVariant(Enum): + TREE = auto() # base IM with no partial orders + BRUTE_FORCE = auto() + MAXIMAL = auto() + DYNAMIC_CLUSTERING = auto() diff --git a/pm4py/pm4py/algo/discovery/temporal_profile/__init__.py b/pm4py/pm4py/algo/discovery/temporal_profile/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c7a2df055971c719662572e5897ef8bc1a871111 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/temporal_profile/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.temporal_profile import algorithm, variants diff --git a/pm4py/pm4py/algo/discovery/temporal_profile/algorithm.py b/pm4py/pm4py/algo/discovery/temporal_profile/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..4a3e31d03940fe3d2b5419559b8cabcb46f40915 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/temporal_profile/algorithm.py @@ -0,0 +1,51 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any, Union + +import pandas as pd + +from pm4py.algo.discovery.temporal_profile.variants import log, dataframe +from pm4py.objects.log.obj import EventLog +from pm4py.util import typing, pandas_utils + + +def apply(elog: Union[EventLog, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> typing.TemporalProfile: + """ + Discovers the temporal profile out of the provided log object. + + Implements the approach described in: + Stertz, Florian, Jürgen Mangler, and Stefanie Rinderle-Ma. "Temporal Conformance Checking at Runtime based on Time-infused Process Models." arXiv preprint arXiv:2008.07262 (2020). + + Parameters + ---------- + elog + Event log + parameters + Parameters, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.START_TIMESTAMP_KEY => the attribute to use as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + + Returns + ------- + temporal_profile + Temporal profile of the log + """ + if pandas_utils.check_is_pandas_dataframe(elog): + return dataframe.apply(elog, parameters=parameters) + + return log.apply(elog, parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/temporal_profile/variants/__init__.py b/pm4py/pm4py/algo/discovery/temporal_profile/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c1a1cc0d9cb501ae1e7f64e6534d608ce1cb5bc7 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/temporal_profile/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.temporal_profile.variants import log, dataframe diff --git a/pm4py/pm4py/algo/discovery/temporal_profile/variants/dataframe.py b/pm4py/pm4py/algo/discovery/temporal_profile/variants/dataframe.py new file mode 100644 index 0000000000000000000000000000000000000000..da08bb22cf71520b867f9800d8e6126dd31e8d8a --- /dev/null +++ b/pm4py/pm4py/algo/discovery/temporal_profile/variants/dataframe.py @@ -0,0 +1,86 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +import pandas as pd + +from pm4py.algo.discovery.dfg.adapters.pandas.df_statistics import get_partial_order_dataframe +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.util import typing + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def apply(df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> typing.TemporalProfile: + """ + Gets the temporal profile from a dataframe. + + Implements the approach described in: + Stertz, Florian, Jürgen Mangler, and Stefanie Rinderle-Ma. "Temporal Conformance Checking at Runtime based on Time-infused Process Models." arXiv preprint arXiv:2008.07262 (2020). + + + Parameters + ---------- + df + Dataframe + parameters + Parameters, including: + - Parameters.ACTIVITY_KEY => the column to use as activity + - Parameters.START_TIMESTAMP_KEY => the column to use as start timestamp + - Parameters.TIMESTAMP_KEY => the column to use as timestamp + - Parameters.CASE_ID_KEY => the column to use as case ID + + Returns + ------- + temporal_profile + Temporal profile of the dataframe + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + efg = get_partial_order_dataframe(df, activity_key=activity_key, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key, case_id_glue=case_id_key, + keep_first_following=False, business_hours=business_hours, business_hours_slot=business_hours_slots, workcalendar=workcalendar) + efg = efg[[activity_key, activity_key + "_2", "@@flow_time"]] + temporal_profile = efg.groupby([activity_key, activity_key + "_2"]).agg(["mean", "std"]).reset_index().fillna( + 0).to_dict("records") + + temporal_profile = { + (x[(activity_key, "")], x[(activity_key + "_2", "")]): (x[("@@flow_time", "mean")], x[("@@flow_time", "std")]) + for x in temporal_profile} + + return temporal_profile diff --git a/pm4py/pm4py/algo/discovery/temporal_profile/variants/log.py b/pm4py/pm4py/algo/discovery/temporal_profile/variants/log.py new file mode 100644 index 0000000000000000000000000000000000000000..4bf25245c800f1268b28bc3eae2c8eee993ac054 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/temporal_profile/variants/log.py @@ -0,0 +1,112 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from statistics import mean, stdev +from typing import Optional, Dict, Any + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.util import typing +from pm4py.util.business_hours import BusinessHours + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def apply(log: EventLog, parameters: Optional[Dict[Any, Any]] = None) -> typing.TemporalProfile: + """ + Gets the temporal profile from the log. + + Implements the approach described in: + Stertz, Florian, Jürgen Mangler, and Stefanie Rinderle-Ma. "Temporal Conformance Checking at Runtime based on Time-infused Process Models." arXiv preprint arXiv:2008.07262 (2020). + + + Parameters + ---------- + log + Event log + parameters + Parameters, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.START_TIMESTAMP_KEY => the attribute to use as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.BUSINESS_HOURS => calculates the difference of time based on the business hours, not the total time. + Default: False + - Parameters.BUSINESS_HOURS_SLOTS => + work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business + hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. + [ + (7 * 60 * 60, 17 * 60 * 60), + ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), + ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60), + ] + meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + + Returns + ------- + temporal_profile + Temporal profile of the log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + + diff_time_recordings = {} + + for trace in log: + for i in range(len(trace) - 1): + act_i = trace[i][activity_key] + time_i = trace[i][timestamp_key].timestamp() + for j in range(i + 1, len(trace)): + time_j = trace[j][start_timestamp_key].timestamp() + if time_j >= time_i: + act_j = trace[j][activity_key] + if not (act_i, act_j) in diff_time_recordings: + diff_time_recordings[(act_i, act_j)] = [] + if business_hours: + bh = BusinessHours(trace[i][timestamp_key], + trace[j][start_timestamp_key], + business_hour_slots=business_hours_slots) + diff_time_recordings[(act_i, act_j)].append(bh.get_seconds()) + else: + diff_time_recordings[(act_i, act_j)].append(time_j - time_i) + + temporal_profile = {} + for ac in diff_time_recordings: + if len(diff_time_recordings[ac]) > 1: + temporal_profile[ac] = (mean(diff_time_recordings[ac]), stdev(diff_time_recordings[ac])) + else: + temporal_profile[ac] = (diff_time_recordings[ac][0], 0) + + return temporal_profile diff --git a/pm4py/pm4py/algo/discovery/transition_system/__init__.py b/pm4py/pm4py/algo/discovery/transition_system/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0984f88b8974bf24b9edecff8435b735316c38d7 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/transition_system/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.transition_system import algorithm, variants diff --git a/pm4py/pm4py/algo/discovery/transition_system/algorithm.py b/pm4py/pm4py/algo/discovery/transition_system/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..25cf022def4fefb276667a6344ecc8da9b96fe79 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/transition_system/algorithm.py @@ -0,0 +1,59 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.transition_system.variants import view_based +from pm4py.util import exec_utils +from enum import Enum +from pm4py.objects.transition_system.obj import TransitionSystem +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Variants(Enum): + VIEW_BASED = view_based + +VERSIONS = {Variants.VIEW_BASED} +VIEW_BASED = Variants.VIEW_BASED +DEFAULT_VARIANT = Variants.VIEW_BASED + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> TransitionSystem: + """ + Find transition system given log + + Parameters + ----------- + log + Log + parameters + Possible parameters of the algorithm, including: + Parameters.PARAM_KEY_VIEW + Parameters.PARAM_KEY_WINDOW + Parameters.PARAM_KEY_DIRECTION + variant + Variant of the algorithm to use, including: + Variants.VIEW_BASED + + Returns + ---------- + ts + Transition system + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(log, parameters=parameters) diff --git a/pm4py/pm4py/algo/discovery/transition_system/variants/__init__.py b/pm4py/pm4py/algo/discovery/transition_system/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1df2bb37c9823b056c53c561de0daeba6df3b746 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/transition_system/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.transition_system.variants import view_based diff --git a/pm4py/pm4py/algo/discovery/transition_system/variants/view_based.py b/pm4py/pm4py/algo/discovery/transition_system/variants/view_based.py new file mode 100644 index 0000000000000000000000000000000000000000..406529b73f5e8844ff3004d23d1885e00cbeac19 --- /dev/null +++ b/pm4py/pm4py/algo/discovery/transition_system/variants/view_based.py @@ -0,0 +1,126 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import collections + +from pm4py.util import exec_utils +from pm4py.objects.log import util as log_util +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.objects.transition_system import obj as ts, constants as ts_constants +from enum import Enum +from pm4py.util import constants, pandas_utils +from pm4py.objects.transition_system.obj import TransitionSystem +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.objects.conversion.log import converter as log_conversion +import pandas as pd + + +class Parameters(Enum): + VIEW_MULTI_SET = 'multiset' + VIEW_SET = 'set' + VIEW_SEQUENCE = 'sequence' + + VIEWS = {VIEW_MULTI_SET, VIEW_SET, VIEW_SEQUENCE} + + DIRECTION_FORWARD = 'forward' + DIRECTION_BACKWARD = 'backward' + DIRECTIONS = {DIRECTION_FORWARD, DIRECTION_BACKWARD} + + PARAM_KEY_VIEW = 'view' + PARAM_KEY_WINDOW = 'window' + PARAM_KEY_DIRECTION = 'direction' + + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + INCLUDE_DATA = 'include_data' + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> TransitionSystem: + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + include_data = exec_utils.get_param_value(Parameters.INCLUDE_DATA, parameters, False) + + if pandas_utils.check_is_pandas_dataframe(log): + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + control_flow_log = [tuple(x) for x in log.groupby(case_id_key)[activity_key].agg(list).to_dict().values()] + else: + log = log_conversion.apply(log, parameters, log_conversion.TO_EVENT_LOG) + control_flow_log = log_util.log.project_traces(log, activity_key) + + transition_system = ts.TransitionSystem() + view_sequence = [] + for i in range(len(control_flow_log)): + provided_case = log[i] if type(log) is EventLog else None + view_sequence.append(__compute_view_sequence(control_flow_log[i], provided_case, parameters=parameters)) + for vs in view_sequence: + __construct_state_path(vs, transition_system, include_data=include_data) + return transition_system + + +def __construct_state_path(view_sequence, transition_system, include_data=False): + for i in range(0, len(view_sequence) - 1): + sf = {'state': s for s in transition_system.states if s.name == view_sequence[i][0]} + sf = sf['state'] if len(sf) > 0 else ts.TransitionSystem.State(view_sequence[i][0]) + st = {'state': s for s in transition_system.states if s.name == view_sequence[i + 1][0]} + st = st['state'] if len(st) > 0 else ts.TransitionSystem.State(view_sequence[i + 1][0]) + t = {'t': t for t in sf.outgoing if t.name == view_sequence[i][1] and t.from_state == sf and t.to_state == st} + if len(t) == 0: + t = ts.TransitionSystem.Transition(view_sequence[i][1], sf, st) + sf.outgoing.add(t) + st.incoming.add(t) + else: + t = t['t'] + if include_data: + # add the event to the data in both the source state, + # the sink state and the transition + sf.data[ts_constants.OUTGOING_EVENTS].append(view_sequence[i][2]) + st.data[ts_constants.INGOING_EVENTS].append(view_sequence[i][2]) + t.data[ts_constants.EVENTS].append(view_sequence[i][2]) + transition_system.states.add(sf) + transition_system.states.add(st) + transition_system.transitions.add(t) + + +def __compute_view_sequence(trace, full_case, parameters): + view_sequences = list() + direction = exec_utils.get_param_value(Parameters.PARAM_KEY_DIRECTION, parameters, + Parameters.DIRECTION_FORWARD.value) + window = exec_utils.get_param_value(Parameters.PARAM_KEY_WINDOW, parameters, 2) + for i in range(0, len(trace) + 1): + if direction == Parameters.DIRECTION_FORWARD.value: + view_sequences.append((__apply_abstr(trace[i:i + window], parameters), + trace[i] if i < len(trace) else None, + (full_case, i) if full_case is not None and i < len(full_case) else None)) + else: + view_sequences.append((__apply_abstr(trace[max(0, i - window):i], parameters), + trace[i] if i < len(trace) else None, + (full_case, i) if full_case is not None and i < len(full_case) else None)) + return view_sequences + + +def __apply_abstr(seq, parameters): + key_view = exec_utils.get_param_value(Parameters.PARAM_KEY_VIEW, parameters, Parameters.VIEW_SEQUENCE.value) + + if key_view == Parameters.VIEW_SEQUENCE.value: + return list(seq) + elif key_view == Parameters.VIEW_MULTI_SET.value: + return collections.Counter(seq) + elif key_view == Parameters.VIEW_SET.value: + return set(seq) diff --git a/pm4py/pm4py/algo/evaluation/__init__.py b/pm4py/pm4py/algo/evaluation/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5dadd4a7979da283c0aab67eec42f64d0505d8fa --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.evaluation import precision, replay_fitness, simplicity, generalization, algorithm diff --git a/pm4py/pm4py/algo/evaluation/algorithm.py b/pm4py/pm4py/algo/evaluation/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..89dd3296fedee363e303e3812607ba609ecdec86 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/algorithm.py @@ -0,0 +1,110 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.conformance.tokenreplay.variants import token_replay +from pm4py.algo.evaluation.generalization.variants import token_based as generalization_token_based +from pm4py.algo.evaluation.precision.variants import etconformance_token as precision_token_based +from pm4py.algo.evaluation.replay_fitness.variants import token_replay as fitness_token_based +from pm4py.algo.evaluation.simplicity.variants import arc_degree as simplicity_arc_degree +from pm4py.objects import log as log_lib +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.util import constants +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + PARAM_FITNESS_WEIGHT = 'fitness_weight' + PARAM_PRECISION_WEIGHT = 'precision_weight' + PARAM_SIMPLICITY_WEIGHT = 'simplicity_weight' + PARAM_GENERALIZATION_WEIGHT = 'generalization_weight' + + +def apply(log: Union[EventLog, pd.DataFrame], net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, float]: + """ + Calculates all metrics based on token-based replay and returns a unified dictionary + + Parameters + ----------- + log + Log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters + + Returns + ----------- + dictionary + Dictionary containing fitness, precision, generalization and simplicity; along with the average weight of + these metrics + """ + if parameters is None: + parameters = {} + log = log_conversion.apply(log, parameters, log_conversion.TO_EVENT_LOG) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, log_lib.util.xes.DEFAULT_NAME_KEY) + fitness_weight = exec_utils.get_param_value(Parameters.PARAM_FITNESS_WEIGHT, parameters, 0.25) + precision_weight = exec_utils.get_param_value(Parameters.PARAM_PRECISION_WEIGHT, parameters, 0.25) + simplicity_weight = exec_utils.get_param_value(Parameters.PARAM_SIMPLICITY_WEIGHT, parameters, 0.25) + generalization_weight = exec_utils.get_param_value(Parameters.PARAM_GENERALIZATION_WEIGHT, parameters, 0.25) + + sum_of_weights = (fitness_weight + precision_weight + simplicity_weight + generalization_weight) + fitness_weight = fitness_weight / sum_of_weights + precision_weight = precision_weight / sum_of_weights + simplicity_weight = simplicity_weight / sum_of_weights + generalization_weight = generalization_weight / sum_of_weights + + parameters_tr = {token_replay.Parameters.ACTIVITY_KEY: activity_key} + + aligned_traces = token_replay.apply(log, net, initial_marking, final_marking, parameters=parameters_tr) + + parameters = { + token_replay.Parameters.ACTIVITY_KEY: activity_key + } + + fitness = fitness_token_based.evaluate(aligned_traces) + precision = precision_token_based.apply(log, net, initial_marking, final_marking, parameters=parameters) + generalization = generalization_token_based.get_generalization(net, aligned_traces) + simplicity = simplicity_arc_degree.apply(net) + + metrics_average_weight = fitness_weight * fitness["log_fitness"] + precision_weight * precision \ + + generalization_weight * generalization + simplicity_weight * simplicity + + fscore = 0.0 + if (fitness['log_fitness'] + precision) > 0: + fscore = (2*fitness['log_fitness']*precision)/(fitness['log_fitness']+precision) + dictionary = { + "fitness": fitness, + "precision": precision, + "generalization": generalization, + "simplicity": simplicity, + "metricsAverageWeight": metrics_average_weight, + "fscore": fscore + } + + return dictionary + diff --git a/pm4py/pm4py/algo/evaluation/earth_mover_distance/__init__.py b/pm4py/pm4py/algo/evaluation/earth_mover_distance/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3054048d401062d980d1061bc8681842f6ce4c82 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/earth_mover_distance/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.earth_mover_distance import algorithm, variants + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The earth_mover_distance package will be removed in a future release.") diff --git a/pm4py/pm4py/algo/evaluation/earth_mover_distance/algorithm.py b/pm4py/pm4py/algo/evaluation/earth_mover_distance/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..9afad6b3323687d39c10a749fc7b19f3c432f4c0 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/earth_mover_distance/algorithm.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.earth_mover_distance.variants import pyemd +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, List + + +class Variants(Enum): + PYEMD = pyemd + + +DEFAULT_VARIANT = Variants.PYEMD + + +def apply(lang1: Dict[List[str], float], lang2: Dict[List[str], float], variant=Variants.PYEMD, parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + Gets the EMD language between the two languages + + Parameters + ------------- + lang1 + First language + lang2 + Second language + variant + Variants of the algorithm + parameters + Parameters + variants + Variants of the algorithm, including: + - Variants.PYEMD: pyemd based distance + + Returns + ------------- + dist + EMD distance + """ + return exec_utils.get_variant(variant).apply(lang1, lang2, parameters=parameters) diff --git a/pm4py/pm4py/algo/evaluation/earth_mover_distance/variants/__init__.py b/pm4py/pm4py/algo/evaluation/earth_mover_distance/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9d85f56b34be86d57e12881a14b5921dc850f78b --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/earth_mover_distance/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.earth_mover_distance.variants import pyemd diff --git a/pm4py/pm4py/algo/evaluation/earth_mover_distance/variants/pyemd.py b/pm4py/pm4py/algo/evaluation/earth_mover_distance/variants/pyemd.py new file mode 100644 index 0000000000000000000000000000000000000000..0d622c99ee9b1da2bbc4cba1c523102bb8865012 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/earth_mover_distance/variants/pyemd.py @@ -0,0 +1,176 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.regex import SharedObj, get_new_char +from pm4py.util import string_distance +import numpy as np +from pyemd import emd +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union, List + + +class Parameters: + STRING_DISTANCE = "string_distance" + + +def normalized_levensthein(s1, s2): + """ + Normalized Levensthein distance + + Parameters + ------------- + s1 + First string + s2 + Second string + + Returns + -------------- + dist + Distance + """ + return float(string_distance.levenshtein(s1, s2)) / float(max(len(s1), len(s2))) + + +def get_act_correspondence(activities, parameters=None): + """ + Gets an encoding for each activity + + Parameters + -------------- + activities + Activities of the two languages + parameters + Parameters + + Returns + ------------- + encoding + Encoding into hex characters + """ + if parameters is None: + parameters = {} + + shared_obj = SharedObj() + ret = {} + for act in activities: + get_new_char(act, shared_obj) + ret[act] = shared_obj.mapping_dictio[act] + + return ret + + +def encode_two_languages(lang1, lang2, parameters=None): + """ + Encode the two languages into hexadecimal strings + + Parameters + -------------- + lang1 + Language 1 + lang2 + Language 2 + parameters + Parameters of the algorithm + + Returns + -------------- + enc1 + Encoding of the first language + enc2 + Encoding of the second language + """ + if parameters is None: + parameters = {} + + all_activities = sorted(list(set(y for x in lang1 for y in x).union(set(y for x in lang2 for y in x)))) + acts_corresp = get_act_correspondence(all_activities, parameters=parameters) + + enc1 = {} + enc2 = {} + + for k in lang1: + new_key = "".join(acts_corresp[i] for i in k) + enc1[new_key] = lang1[k] + + for k in lang2: + new_key = "".join(acts_corresp[i] for i in k) + enc2[new_key] = lang2[k] + + # each language should have the same keys, even if not present + for x in enc1: + if x not in enc2: + enc2[x] = 0.0 + + for x in enc2: + if x not in enc1: + enc1[x] = 0.0 + + enc1 = [(x, y) for x, y in enc1.items()] + enc2 = [(x, y) for x, y in enc2.items()] + + # sort the keys in a decreasing way + enc1 = sorted(enc1, reverse=True, key=lambda x: x[0]) + enc2 = sorted(enc2, reverse=True, key=lambda x: x[0]) + + return enc1, enc2 + + +def apply(lang1: Dict[List[str], float], lang2: Dict[List[str], float], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Calculates the EMD distance between the two stochastic languages + + Parameters + ------------- + lang1 + First language + lang2 + Second language + parameters + Parameters of the algorithm, including: + - Parameters.STRING_DISTANCE: function that accepts two strings and returns a distance + + Returns + --------------- + emd_dist + EMD distance + """ + if parameters is None: + parameters = {} + + distance_function = exec_utils.get_param_value(Parameters.STRING_DISTANCE, parameters, normalized_levensthein) + + enc1, enc2 = encode_two_languages(lang1, lang2, parameters=parameters) + + # transform everything into a numpy array + first_histogram = np.array([x[1] for x in enc1]) + second_histogram = np.array([x[1] for x in enc2]) + + # including a distance matrix that includes the distance between + # the traces + distance_matrix = [] + for x in enc1: + distance_matrix.append([]) + for y in enc2: + # calculates the (normalized) distance between the strings + dist = distance_function(x[0], y[0]) + distance_matrix[-1].append(float(dist)) + + distance_matrix = np.array(distance_matrix) + + ret = emd(first_histogram, second_histogram, distance_matrix) + + return ret diff --git a/pm4py/pm4py/algo/evaluation/generalization/__init__.py b/pm4py/pm4py/algo/evaluation/generalization/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6896ce7650de816dedafb3b8bc5ce0597b6b0199 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/generalization/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.generalization import algorithm, variants diff --git a/pm4py/pm4py/algo/evaluation/generalization/algorithm.py b/pm4py/pm4py/algo/evaluation/generalization/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..64508734b77040580c2dc8ce90fdeaa36026d4f3 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/generalization/algorithm.py @@ -0,0 +1,40 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.generalization.variants import token_based +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.objects.petri_net.obj import PetriNet, Marking +import pandas as pd + + +class Variants(Enum): + GENERALIZATION_TOKEN = token_based + + +GENERALIZATION_TOKEN = Variants.GENERALIZATION_TOKEN +VERSIONS = {GENERALIZATION_TOKEN} + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Any, Any]] = None, variant=GENERALIZATION_TOKEN) -> float: + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(log, + petri_net, + initial_marking, final_marking, parameters=parameters) diff --git a/pm4py/pm4py/algo/evaluation/generalization/variants/__init__.py b/pm4py/pm4py/algo/evaluation/generalization/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5e3af5da29d1783efcafd6376c09f2fa06468985 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/generalization/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.generalization.variants import token_based diff --git a/pm4py/pm4py/algo/evaluation/generalization/variants/token_based.py b/pm4py/pm4py/algo/evaluation/generalization/variants/token_based.py new file mode 100644 index 0000000000000000000000000000000000000000..86062a6f239c9dfbd8ab1b1e42290dee47bcdd41 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/generalization/variants/token_based.py @@ -0,0 +1,57 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from math import sqrt + +from pm4py.algo.conformance.tokenreplay import algorithm as token_replay +from enum import Enum +from pm4py.util import constants +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def get_generalization(petri_net, aligned_traces): + trans_occ_map = Counter() + for trace in aligned_traces: + for trans in trace["activated_transitions"]: + trans_occ_map[trans] += 1 + inv_sq_occ_sum = 0.0 + for trans in trans_occ_map: + this_term = 1.0 / sqrt(trans_occ_map[trans]) + inv_sq_occ_sum = inv_sq_occ_sum + this_term + for trans in petri_net.transitions: + if trans not in trans_occ_map: + inv_sq_occ_sum = inv_sq_occ_sum + 1 + generalization = 1.0 + if len(petri_net.transitions) > 0: + generalization = 1.0 - inv_sq_occ_sum / float(len(petri_net.transitions)) + return generalization + + +def apply(log: Union[EventLog, pd.DataFrame], petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None): + if parameters is None: + parameters = {} + + aligned_traces = token_replay.apply(log, petri_net, initial_marking, final_marking, parameters=parameters) + + return get_generalization(petri_net, aligned_traces) diff --git a/pm4py/pm4py/algo/evaluation/precision/__init__.py b/pm4py/pm4py/algo/evaluation/precision/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1e4298b03dcbe2b166fb4cc8b9a8d64c71a32518 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/precision/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.precision import algorithm, variants, utils, dfg diff --git a/pm4py/pm4py/algo/evaluation/precision/algorithm.py b/pm4py/pm4py/algo/evaluation/precision/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..8e4894e9cf3129bd482ab08bad9ee8cef3f761f5 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/precision/algorithm.py @@ -0,0 +1,77 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.precision.variants import etconformance_token +from pm4py.algo.evaluation.precision.variants import align_etconformance +from pm4py.objects.petri_net.utils.check_soundness import check_easy_soundness_net_in_fin_marking +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.objects.petri_net.obj import PetriNet, Marking +import pandas as pd + + +class Variants(Enum): + ETCONFORMANCE_TOKEN = etconformance_token + ALIGN_ETCONFORMANCE = align_etconformance + + +ETCONFORMANCE_TOKEN = Variants.ETCONFORMANCE_TOKEN +ALIGN_ETCONFORMANCE = Variants.ALIGN_ETCONFORMANCE + +VERSIONS = {ETCONFORMANCE_TOKEN, ALIGN_ETCONFORMANCE} + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], net: PetriNet, marking: Marking, final_marking: Marking, parameters: Optional[Dict[Any, Any]] = None, variant=None) -> float: + """ + Method to apply ET Conformance + + Parameters + ----------- + log + Trace log + net + Petri net + marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm, including: + pm4py.util.constants.PARAMETER_CONSTANT_ACTIVITY_KEY -> Activity key + variant + Variant of the algorithm that should be applied: + - Variants.ETCONFORMANCE_TOKEN + - Variants.ALIGN_ETCONFORMANCE + """ + if parameters is None: + parameters = {} + + # execute the following part of code when the variant is not specified by the user + if variant is None: + if not (check_easy_soundness_net_in_fin_marking( + net, + marking, + final_marking)): + # in the case the net is not a easy sound workflow net, we must apply token-based replay + variant = ETCONFORMANCE_TOKEN + else: + # otherwise, use the align-etconformance approach (safer, in the case the model contains duplicates) + variant = ALIGN_ETCONFORMANCE + + return exec_utils.get_variant(variant).apply(log, net, marking, + final_marking, parameters=parameters) diff --git a/pm4py/pm4py/algo/evaluation/precision/dfg/__init__.py b/pm4py/pm4py/algo/evaluation/precision/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d331238aac7ca42d56db2e8d7ff28b33b7ff0315 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/precision/dfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.precision.dfg import algorithm diff --git a/pm4py/pm4py/algo/evaluation/precision/dfg/algorithm.py b/pm4py/pm4py/algo/evaluation/precision/dfg/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaff1de37e022527c8d300253c8bcf3387d1ae5 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/precision/dfg/algorithm.py @@ -0,0 +1,107 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.util import exec_utils, xes_constants, constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def __is_allowed_prefix(exiting_activities, sa, prefix): + if not prefix: + return True + if prefix[0] not in sa: + return False + prev_act = prefix[0] + for i in range(1, len(prefix)): + curr_act = prefix[i] + if prev_act not in exiting_activities or curr_act not in exiting_activities[prev_act]: + return False + prev_act = curr_act + if not prefix[-1] in exiting_activities: + return False + return True + + +def apply(log: Union[EventLog, EventStream], dfg: Dict[Tuple[str, str], int], + start_activities: Dict[str, int], end_activities: Dict[str, int], + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Computes the precision of a directly-follows graph using the ETConformance approach + + Parameters + --------------- + log + Event log + dfg + Directly-follows graph + start_activities + Start activities + end_activities + End activities + parameters + Parameters of the algorithm: + - Parameters.ACTIVITY_KEY: the key to use + + Returns + ---------------- + precision + Precision value + """ + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + precision = 1.0 + sum_ee = 0 + sum_at = 0 + exiting_activities = {} + for act_couple in dfg: + if not act_couple[0] in exiting_activities: + exiting_activities[act_couple[0]] = set() + exiting_activities[act_couple[0]].add(act_couple[1]) + prefixes = {} + prefixes_count = Counter() + for trace in log: + prefix_act = [] + for i in range(len(trace)): + prefix_act_tuple = tuple(prefix_act) + if prefix_act_tuple not in prefixes: + prefixes[prefix_act_tuple] = set() + prefixes_count[prefix_act_tuple] += 1 + prefixes[prefix_act_tuple].add(trace[i][activity_key]) + prefix_act.append(trace[i][activity_key]) + for prefix in prefixes: + if __is_allowed_prefix(exiting_activities, start_activities, prefix): + log_transitions = prefixes[prefix] + activated_transitions = set(start_activities.keys()) if not prefix else exiting_activities[prefix[-1]] + escaping_edges = activated_transitions.difference(log_transitions) + sum_ee += len(escaping_edges) * prefixes_count[prefix] + sum_at += len(activated_transitions) * prefixes_count[prefix] + + if sum_at > 0: + precision = 1 - float(sum_ee) / float(sum_at) + + return precision diff --git a/pm4py/pm4py/algo/evaluation/precision/utils.py b/pm4py/pm4py/algo/evaluation/precision/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..df4c0546d65ef9b9d9edd208f929cdec4b2d1306 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/precision/utils.py @@ -0,0 +1,157 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from pm4py.objects.log.obj import EventLog, Event, Trace +from pm4py.util import xes_constants as xes_util +import heapq +from pm4py.objects.petri_net.utils.petri_utils import decorate_places_preset_trans, decorate_transitions_prepostset +from pm4py.objects.petri_net.utils import align_utils as utils +from pm4py.objects.petri_net.utils.incidence_matrix import construct +from pm4py.util import constants, pandas_utils +import pandas as pd + + +def __search(sync_net, ini, fin, stop, cost_function, skip): + decorate_transitions_prepostset(sync_net) + decorate_places_preset_trans(sync_net) + + incidence_matrix = construct(sync_net) + ini_vec, fin_vec, cost_vec = utils.__vectorize_initial_final_cost(incidence_matrix, ini, fin, cost_function) + + closed = set() + + ini_state = utils.SearchTuple(0, 0, 0, ini, None, None, None, True) + open_set = [ini_state] + heapq.heapify(open_set) + visited = 0 + queued = 0 + traversed = 0 + + # return all the prefix markings of the optimal alignments as set + ret_markings = None + # keep track of the optimal cost of an alignment (to trim search when needed) + optimal_cost = None + + while not len(open_set) == 0: + curr = heapq.heappop(open_set) + + current_marking = curr.m + + # trim alignments when we already reached an optimal alignment and the + # current cost is greater than the optimal cost + if optimal_cost is not None and curr.f > optimal_cost: + break + + already_closed = current_marking in closed + if already_closed: + continue + + if stop <= current_marking: + # add the current marking to the set + # of returned markings + if ret_markings is None: + ret_markings = set() + ret_markings.add(current_marking) + # close the marking + closed.add(current_marking) + # set the optimal cost + optimal_cost = curr.f + + continue + + closed.add(current_marking) + visited += 1 + + enabled_trans = set() + for p in current_marking: + for t in p.ass_trans: + if t.sub_marking <= current_marking: + enabled_trans.add(t) + + trans_to_visit_with_cost = [(t, cost_function[t]) for t in enabled_trans if + not (t is None or utils.__is_log_move(t, skip) or ( + utils.__is_model_move(t, skip) and not t.label[1] is None))] + + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = utils.add_markings(current_marking, t.add_marking) + + if new_marking in closed: + continue + g = curr.g + cost + + queued += 1 + new_f = g + + tp = utils.SearchTuple(new_f, g, 0, new_marking, curr, t, None, True) + heapq.heappush(open_set, tp) + + return ret_markings + + +def get_log_prefixes(log, activity_key=xes_util.DEFAULT_NAME_KEY, case_id_key=constants.CASE_CONCEPT_NAME): + """ + Get log prefixes + + Parameters + ---------- + log + Trace log + activity_key + Activity key (must be provided if different from concept:name) + """ + prefixes = {} + prefix_count = Counter() + + if pandas_utils.check_is_pandas_dataframe(log): + traces = [tuple(x) for x in log.groupby(case_id_key)[activity_key].agg(list).to_dict().values()] + else: + traces = [tuple(x[activity_key] for x in trace) for trace in log] + + for trace in traces: + for i in range(1, len(trace)): + prefix = constants.DEFAULT_VARIANT_SEP.join(trace[0:i]) + next_activity = trace[i] + if prefix not in prefixes: + prefixes[prefix] = set() + prefixes[prefix].add(next_activity) + prefix_count[prefix] += 1 + + return prefixes, prefix_count + + +def form_fake_log(prefixes_keys, activity_key=xes_util.DEFAULT_NAME_KEY): + """ + Form fake log for replay (putting each prefix as separate trace to align) + + Parameters + ---------- + prefixes_keys + Keys of the prefixes (to form a log with a given order) + activity_key + Activity key (must be provided if different from concept:name) + """ + fake_log = EventLog() + for prefix in prefixes_keys: + trace = Trace() + prefix_activities = prefix.split(constants.DEFAULT_VARIANT_SEP) + for activity in prefix_activities: + event = Event() + event[activity_key] = activity + trace.append(event) + fake_log.append(trace) + return fake_log diff --git a/pm4py/pm4py/algo/evaluation/precision/variants/__init__.py b/pm4py/pm4py/algo/evaluation/precision/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5a34e27acf05c15f72a685672ca98596121b4096 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/precision/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.precision.variants import align_etconformance, etconformance_token diff --git a/pm4py/pm4py/algo/evaluation/precision/variants/align_etconformance.py b/pm4py/pm4py/algo/evaluation/precision/variants/align_etconformance.py new file mode 100644 index 0000000000000000000000000000000000000000..074aff5daa2e4704ae3e21c875c8c5e369ad85bf --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/precision/variants/align_etconformance.py @@ -0,0 +1,342 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects import log as log_lib +from pm4py.algo.evaluation.precision import utils as precision_utils +from pm4py.objects.petri_net.utils import align_utils as utils, check_soundness +from pm4py.objects.petri_net.utils.petri_utils import construct_trace_net +from pm4py.objects.petri_net.utils.synchronous_product import construct +from pm4py.statistics.start_activities.log.get import get_start_activities +from pm4py.objects.petri_net.utils.align_utils import get_visible_transitions_eventually_enabled_by_marking +from pm4py.util import exec_utils +from pm4py.util import xes_constants +import importlib.util +from enum import Enum +from pm4py.util import constants +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.conversion.log import converter as log_converter +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + TOKEN_REPLAY_VARIANT = "token_replay_variant" + CLEANING_TOKEN_FLOOD = "cleaning_token_flood" + SHOW_PROGRESS_BAR = "show_progress_bar" + MULTIPROCESSING = "multiprocessing" + CORES = "cores" + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], net: PetriNet, marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Get Align-ET Conformance precision + + Parameters + ---------- + log + Trace log + net + Petri net + marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Activity key + """ + + if parameters is None: + parameters = {} + + debug_level = parameters["debug_level"] if "debug_level" in parameters else 0 + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, log_lib.util.xes.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + # default value for precision, when no activated transitions (not even by looking at the initial marking) are found + precision = 1.0 + sum_ee = 0 + sum_at = 0 + unfit = 0 + + if not check_soundness.check_easy_soundness_net_in_fin_marking(net, marking, final_marking): + raise Exception("trying to apply Align-ETConformance on a Petri net that is not a easy sound net!!") + + if type(log) is not pd.DataFrame: + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + prefixes, prefix_count = precision_utils.get_log_prefixes(log, activity_key=activity_key, case_id_key=case_id_key) + prefixes_keys = list(prefixes.keys()) + fake_log = precision_utils.form_fake_log(prefixes_keys, activity_key=activity_key) + + align_stop_marking = align_fake_log_stop_marking(fake_log, net, marking, final_marking, parameters=parameters) + all_markings = transform_markings_from_sync_to_original_net(align_stop_marking, net, parameters=parameters) + + for i in range(len(prefixes)): + markings = all_markings[i] + + if markings is not None: + log_transitions = set(prefixes[prefixes_keys[i]]) + activated_transitions_labels = set() + for m in markings: + # add to the set of activated transitions in the model the activated transitions + # for each prefix + activated_transitions_labels = activated_transitions_labels.union( + x.label for x in utils.get_visible_transitions_eventually_enabled_by_marking(net, m) if + x.label is not None) + escaping_edges = activated_transitions_labels.difference(log_transitions) + + sum_at += len(activated_transitions_labels) * prefix_count[prefixes_keys[i]] + sum_ee += len(escaping_edges) * prefix_count[prefixes_keys[i]] + + if debug_level > 1: + print("") + print("prefix=", prefixes_keys[i]) + print("log_transitions=", log_transitions) + print("activated_transitions=", activated_transitions_labels) + print("escaping_edges=", escaping_edges) + else: + unfit += prefix_count[prefixes_keys[i]] + + if debug_level > 0: + print("\n") + print("overall unfit", unfit) + print("overall activated transitions", sum_at) + print("overall escaping edges", sum_ee) + + # fix: also the empty prefix should be counted! + start_activities = set(get_start_activities(log, parameters=parameters)) + trans_en_ini_marking = set([x.label for x in get_visible_transitions_eventually_enabled_by_marking(net, marking)]) + diff = trans_en_ini_marking.difference(start_activities) + sum_at += len(log) * len(trans_en_ini_marking) + sum_ee += len(log) * len(diff) + # end fix + + if sum_at > 0: + precision = 1 - float(sum_ee) / float(sum_at) + + return precision + + +def transform_markings_from_sync_to_original_net(markings0, net, parameters=None): + """ + Transform the markings of the sync net (in which alignment stops) into markings of the original net + (in order to measure the precision) + + Parameters + ------------- + markings0 + Markings on the sync net (expressed as place name with count) + net + Petri net + parameters + Parameters of the algorithm + + Returns + ------------- + markings + Markings of the original model (expressed as place with count) + """ + if parameters is None: + parameters = {} + + places_corr = {p.name: p for p in net.places} + + markings = [] + + for i in range(len(markings0)): + res_list = markings0[i] + + # res_list shall be a list of markings. + # If it is None, then there is no correspondence markings + # in the original Petri net + if res_list is not None: + # saves all the markings reached by the optimal alignment + # as markings of the original net + markings.append([]) + + for j in range(len(res_list)): + res = res_list[j] + + atm = Marking() + for pl, count in res.items(): + if pl[0] == utils.SKIP: + atm[places_corr[pl[1]]] = count + markings[-1].append(atm) + else: + markings.append(None) + + return markings + + +def align_fake_log_stop_marking(fake_log, net, marking, final_marking, parameters=None): + """ + Align the 'fake' log with all the prefixes in order to get the markings in which + the alignment stops + + Parameters + ------------- + fake_log + Fake log + net + Petri net + marking + Marking + final_marking + Final marking + parameters + Parameters of the algorithm + + Returns + ------------- + alignment + For each trace in the log, return the marking in which the alignment stops (expressed as place name with count) + """ + if parameters is None: + parameters = {} + + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + multiprocessing = exec_utils.get_param_value(Parameters.MULTIPROCESSING, parameters, constants.ENABLE_MULTIPROCESSING_DEFAULT) + + progress = None + if importlib.util.find_spec("tqdm") and show_progress_bar and len(fake_log) > 1: + from tqdm.auto import tqdm + progress = tqdm(total=len(fake_log), desc="computing precision with alignments, completed variants :: ") + + if multiprocessing: + align_intermediate_result = __align_log_with_multiprocessing_stop_marking(fake_log, net, marking, final_marking, + progress, parameters=parameters) + else: + align_intermediate_result = __align_log_wo_multiprocessing_stop_marking(fake_log, net, marking, final_marking, + progress, parameters=parameters) + + align_result = [] + for i in range(len(align_intermediate_result)): + res = align_intermediate_result[i] + if res is not None: + align_result.append([]) + for mark in res: + res2 = {} + for pl in mark: + # transforms the markings for easier correspondence at the end + # (distributed engine friendly!) + res2[(pl.name[0], pl.name[1])] = mark[pl] + + align_result[-1].append(res2) + else: + # if there is no path from the initial marking + # replaying the given prefix, then add None + align_result.append(None) + + # gracefully close progress bar + if progress is not None: + progress.close() + del progress + + return align_result + + +def __align_log_wo_multiprocessing_stop_marking(fake_log, net, marking, final_marking, progress, parameters=None): + align_intermediate_result = [] + for i in range(len(fake_log)): + res = __align_trace_stop_marking(fake_log[i], net, marking, final_marking, parameters=parameters) + align_intermediate_result.append(res) + if progress is not None: + progress.update() + + return align_intermediate_result + + +def __align_log_with_multiprocessing_stop_marking(fake_log, net, marking, final_marking, progress, parameters=None): + if parameters is not None: + parameters = {} + + import multiprocessing + from concurrent.futures import ProcessPoolExecutor + + num_cores = exec_utils.get_param_value(Parameters.CORES, parameters, multiprocessing.cpu_count() - 2) + align_intermediate_result = [] + with ProcessPoolExecutor(max_workers=num_cores) as executor: + futures = [] + for i in range(len(fake_log)): + futures.append(executor.submit(__align_trace_stop_marking, fake_log[i], net, marking, final_marking, parameters)) + if progress is not None: + alignments_ready = 0 + while alignments_ready != len(futures): + current = 0 + for index, variant in enumerate(futures): + current = current + 1 if futures[index].done() else current + if current > alignments_ready: + for i in range(0, current - alignments_ready): + progress.update() + alignments_ready = current + for index, variant in enumerate(futures): + align_intermediate_result.append(futures[index].result()) + + return align_intermediate_result + + +def __align_trace_stop_marking(trace, net, marking, final_marking, parameters=None): + sync_net, sync_initial_marking, sync_final_marking = build_sync_net(trace, net, marking, final_marking, + parameters=parameters) + stop_marking = Marking() + for pl, count in sync_final_marking.items(): + if pl.name[1] == utils.SKIP: + stop_marking[pl] = count + cost_function = utils.construct_standard_cost_function(sync_net, utils.SKIP) + + # perform the alignment of the prefix + res = precision_utils.__search(sync_net, sync_initial_marking, sync_final_marking, stop_marking, cost_function, + utils.SKIP) + + return res + + +def build_sync_net(trace, petri_net, initial_marking, final_marking, parameters=None): + """ + Build the sync product net between the Petri net and the trace prefix + + Parameters + --------------- + trace + Trace prefix + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + + trace_net, trace_im, trace_fm = construct_trace_net(trace, activity_key=activity_key) + + sync_prod, sync_initial_marking, sync_final_marking = construct(trace_net, trace_im, + trace_fm, petri_net, + initial_marking, + final_marking, + utils.SKIP) + + return sync_prod, sync_initial_marking, sync_final_marking diff --git a/pm4py/pm4py/algo/evaluation/precision/variants/etconformance_token.py b/pm4py/pm4py/algo/evaluation/precision/variants/etconformance_token.py new file mode 100644 index 0000000000000000000000000000000000000000..bee67dc939c1f001b8f820113eb162b40383e26f --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/precision/variants/etconformance_token.py @@ -0,0 +1,136 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.tokenreplay.variants import token_replay +from pm4py.algo.conformance.tokenreplay import algorithm as executor + +from pm4py.objects import log as log_lib +from pm4py.algo.evaluation.precision import utils as precision_utils +from pm4py.statistics.start_activities.log.get import get_start_activities +from pm4py.objects.petri_net.utils.align_utils import get_visible_transitions_eventually_enabled_by_marking +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.conversion.log import converter as log_converter +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + TOKEN_REPLAY_VARIANT = "token_replay_variant" + CLEANING_TOKEN_FLOOD = "cleaning_token_flood" + SHOW_PROGRESS_BAR = "show_progress_bar" + MULTIPROCESSING = "multiprocessing" + CORES = "cores" + +""" +Implementation of the approach described in paper + +Muñoz-Gama, Jorge, and Josep Carmona. "A fresh look at precision in process conformance." International Conference +on Business Process Management. Springer, Berlin, Heidelberg, 2010. + +for measuring precision. + +For each prefix in the log, the reflected tasks are calculated (outgoing attributes from the prefix) +Then, a token replay is done on the prefix in order to get activated transitions +Escaping edges is the set difference between activated transitions and reflected tasks + +Then, precision is calculated by the formula used in the paper + +At the moment, the precision value is different from the one provided by the ProM plug-in, +although the implementation seems to follow the paper concept +""" + + +def apply(log: EventLog, net: PetriNet, marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None): + """ + Get ET Conformance precision + + Parameters + ---------- + log + Trace log + net + Petri net + marking + Initial marking + final_marking + Final marking + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Activity key + """ + + if parameters is None: + parameters = {} + + cleaning_token_flood = exec_utils.get_param_value(Parameters.CLEANING_TOKEN_FLOOD, parameters, False) + token_replay_variant = exec_utils.get_param_value(Parameters.TOKEN_REPLAY_VARIANT, parameters, + executor.Variants.TOKEN_REPLAY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, log_lib.util.xes.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + + # default value for precision, when no activated transitions (not even by looking at the initial marking) are found + precision = 1.0 + sum_ee = 0 + sum_at = 0 + + parameters_tr = { + token_replay.Parameters.SHOW_PROGRESS_BAR: show_progress_bar, + token_replay.Parameters.CONSIDER_REMAINING_IN_FITNESS: False, + token_replay.Parameters.TRY_TO_REACH_FINAL_MARKING_THROUGH_HIDDEN: False, + token_replay.Parameters.STOP_IMMEDIATELY_UNFIT: True, + token_replay.Parameters.WALK_THROUGH_HIDDEN_TRANS: True, + token_replay.Parameters.CLEANING_TOKEN_FLOOD: cleaning_token_flood, + token_replay.Parameters.ACTIVITY_KEY: activity_key + } + + if type(log) is not pd.DataFrame: + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + prefixes, prefix_count = precision_utils.get_log_prefixes(log, activity_key=activity_key, case_id_key=case_id_key) + prefixes_keys = list(prefixes.keys()) + fake_log = precision_utils.form_fake_log(prefixes_keys, activity_key=activity_key) + + aligned_traces = executor.apply(fake_log, net, marking, final_marking, variant=token_replay_variant, + parameters=parameters_tr) + + # fix: also the empty prefix should be counted! + start_activities = set(get_start_activities(log, parameters=parameters)) + trans_en_ini_marking = set([x.label for x in get_visible_transitions_eventually_enabled_by_marking(net, marking)]) + diff = trans_en_ini_marking.difference(start_activities) + sum_at += len(log) * len(trans_en_ini_marking) + sum_ee += len(log) * len(diff) + # end fix + + for i in range(len(aligned_traces)): + if aligned_traces[i]["trace_is_fit"]: + log_transitions = set(prefixes[prefixes_keys[i]]) + activated_transitions_labels = set( + [x.label for x in aligned_traces[i]["enabled_transitions_in_marking"] if x.label is not None]) + sum_at += len(activated_transitions_labels) * prefix_count[prefixes_keys[i]] + escaping_edges = activated_transitions_labels.difference(log_transitions) + sum_ee += len(escaping_edges) * prefix_count[prefixes_keys[i]] + + if sum_at > 0: + precision = 1 - float(sum_ee) / float(sum_at) + + return precision diff --git a/pm4py/pm4py/algo/evaluation/replay_fitness/__init__.py b/pm4py/pm4py/algo/evaluation/replay_fitness/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a8ddabef6942bce7b132ee1a3aacfaa05ef68439 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/replay_fitness/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.replay_fitness import algorithm, variants diff --git a/pm4py/pm4py/algo/evaluation/replay_fitness/algorithm.py b/pm4py/pm4py/algo/evaluation/replay_fitness/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..40a5049ad42d6d32784c8f14adb51f96572ff94b --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/replay_fitness/algorithm.py @@ -0,0 +1,119 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.replay_fitness.variants import alignment_based, token_replay +from pm4py.algo.conformance import alignments +from pm4py.util import exec_utils +from pm4py.objects.petri_net.utils.check_soundness import check_easy_soundness_net_in_fin_marking +from enum import Enum +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +import pandas as pd + + +class Variants(Enum): + ALIGNMENT_BASED = alignment_based + TOKEN_BASED = token_replay + + +class Parameters(Enum): + ALIGN_VARIANT = "align_variant" + + +ALIGNMENT_BASED = Variants.ALIGNMENT_BASED +TOKEN_BASED = Variants.TOKEN_BASED + +VERSIONS = {ALIGNMENT_BASED, TOKEN_BASED} + + +def apply(log: Union[EventLog, pd.DataFrame], petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None, variant=None, align_variant=None) -> Dict[str, Any]: + """ + Apply fitness evaluation starting from an event log and a marked Petri net, + by using one of the replay techniques provided by PM4Py + + Parameters + ----------- + log + Trace log object + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters related to the replay algorithm + variant + Chosen variant: + - Variants.ALIGNMENT_BASED + - Variants.TOKEN_BASED + align_variant + Alignments variant (for alignment-based replay) + + Returns + ---------- + fitness_eval + Fitness evaluation + """ + if parameters is None: + parameters = {} + + # execute the following part of code when the variant is not specified by the user + if variant is None: + if not ( + check_easy_soundness_net_in_fin_marking(petri_net, initial_marking, + final_marking)): + # in the case the net is not a easy sound workflow net, we must apply token-based replay + variant = TOKEN_BASED + else: + # otherwise, use the align-etconformance approach (safer, in the case the model contains duplicates) + variant = ALIGNMENT_BASED + + if variant == TOKEN_BASED: + # execute the token-based replay variant + return exec_utils.get_variant(variant).apply(log, + petri_net, + initial_marking, final_marking, parameters=parameters) + else: + # execute the alignments based variant, with the specification of the alignments variant + if align_variant is None: + align_variant = alignments.petri_net.algorithm.DEFAULT_VARIANT + return exec_utils.get_variant(variant).apply(log, + petri_net, + initial_marking, final_marking, align_variant=align_variant, + parameters=parameters) + + +def evaluate(results, parameters=None, variant=TOKEN_BASED): + """ + Evaluate replay results when the replay algorithm has already been applied + + Parameters + ----------- + results + Results of the replay algorithm + parameters + Possible parameters passed to the evaluation + variant + Indicates which evaluator is called + + Returns + ----------- + fitness_eval + Fitness evaluation + """ + return exec_utils.get_variant(variant).evaluate(results, parameters=parameters) diff --git a/pm4py/pm4py/algo/evaluation/replay_fitness/variants/__init__.py b/pm4py/pm4py/algo/evaluation/replay_fitness/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7a755165b1a467e2fc6e12ae3523bb45c0c5d546 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/replay_fitness/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.replay_fitness.variants import alignment_based, token_replay diff --git a/pm4py/pm4py/algo/evaluation/replay_fitness/variants/alignment_based.py b/pm4py/pm4py/algo/evaluation/replay_fitness/variants/alignment_based.py new file mode 100644 index 0000000000000000000000000000000000000000..3efa8dbdb0c760b513ef80ebaa8bfaa350f4dc8e --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/replay_fitness/variants/alignment_based.py @@ -0,0 +1,157 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments +from pm4py.algo.conformance.alignments.decomposed import algorithm as decomp_alignments +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, Trace +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + TOKEN_REPLAY_VARIANT = "token_replay_variant" + CLEANING_TOKEN_FLOOD = "cleaning_token_flood" + MULTIPROCESSING = "multiprocessing" + + +def evaluate(aligned_traces: typing.ListAlignments, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, float]: + """ + Transforms the alignment result to a simple dictionary + including the percentage of fit traces and the average fitness + + Parameters + ---------- + aligned_traces + Alignments calculated for the traces in the log + parameters + Possible parameters of the evaluation + + Returns + ---------- + dictionary + Containing two keys (percFitTraces and averageFitness) + """ + if parameters is None: + parameters = {} + str(parameters) + no_traces = len([x for x in aligned_traces if x is not None]) + no_fit_traces = 0 + sum_fitness = 0.0 + sum_bwc = 0.0 + sum_cost = 0.0 + + for tr in aligned_traces: + if tr is not None: + if tr["fitness"] == 1.0: + no_fit_traces = no_fit_traces + 1 + sum_fitness += tr["fitness"] + if "bwc" in tr and "cost" in tr: + sum_bwc += tr["bwc"] + sum_cost += tr["cost"] + + perc_fit_traces = 0.0 + average_fitness = 0.0 + log_fitness = 0.0 + + if no_traces > 0: + perc_fit_traces = (100.0 * float(no_fit_traces)) / (float(no_traces)) + average_fitness = float(sum_fitness) / float(no_traces) + log_fitness = float(sum_cost) / float(sum_bwc) if sum_bwc > 0 else 0 + log_fitness = 1.0 - log_fitness + + return {"percFitTraces": perc_fit_traces, "averageFitness": average_fitness, + "percentage_of_fitting_traces": perc_fit_traces, + "average_trace_fitness": average_fitness, "log_fitness": log_fitness} + + +def apply(log: EventLog, petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, align_variant=alignments.DEFAULT_VARIANT, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, float]: + """ + Evaluate fitness based on alignments + + Parameters + ---------------- + log + Event log + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + align_variant + Variants of the alignments to apply + parameters + Parameters of the algorithm + + Returns + --------------- + dictionary + Containing two keys (percFitTraces and averageFitness) + """ + if parameters is None: + parameters = {} + + multiprocessing = exec_utils.get_param_value(Parameters.MULTIPROCESSING, parameters, constants.ENABLE_MULTIPROCESSING_DEFAULT) + + if align_variant == decomp_alignments.Variants.RECOMPOS_MAXIMAL.value: + alignment_result = decomp_alignments.apply(log, petri_net, initial_marking, final_marking, + variant=align_variant, parameters=parameters) + else: + if multiprocessing: + alignment_result = alignments.apply_multiprocessing(log, petri_net, initial_marking, final_marking, variant=align_variant, + parameters=parameters) + else: + alignment_result = alignments.apply(log, petri_net, initial_marking, final_marking, variant=align_variant, + parameters=parameters) + return evaluate(alignment_result) + + +def apply_trace(trace: Trace, petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, best_worst: Any, activity_key: str) -> typing.AlignmentResult: + """ + Performs the basic alignment search, given a trace, a net and the costs of the \"best of the worst\". + The costs of the best of the worst allows us to deduce the fitness of the trace. + We compute the fitness by means of 1 - alignment costs / best of worst costs (i.e. costs of 0 => fitness 1) + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events (i.e. the code will use the activity key to + get the attributes) + petri_net: :class:`pm4py.objects.petri.net.PetriNet` the Petri net to use in the alignment + initial_marking: :class:`pm4py.objects.petri.net.Marking` initial marking in the Petri net + final_marking: :class:`pm4py.objects.petri.net.Marking` final marking in the Petri net + best_worst: cost of the best worst alignment of a trace (empty trace aligned to the model) + activity_key: :class:`str` (optional) key to use to identify the activity described by the events + + Returns + ------- + dictionary: `dict` with keys **alignment**, **cost**, **visited_states**, **queued_states** and **traversed_arcs** + """ + alignment = alignments.apply_trace(trace, petri_net, initial_marking, final_marking, + {Parameters.ACTIVITY_KEY: activity_key}) + fixed_costs = alignment['cost'] // alignments.utils.STD_MODEL_LOG_MOVE_COST + if best_worst > 0: + fitness = 1 - (fixed_costs / best_worst) + else: + fitness = 1 + return {'trace': trace, 'alignment': alignment['alignment'], 'cost': fixed_costs, 'fitness': fitness, + 'visited_states': alignment['visited_states'], 'queued_states': alignment['queued_states'], + 'traversed_arcs': alignment['traversed_arcs']} diff --git a/pm4py/pm4py/algo/evaluation/replay_fitness/variants/token_replay.py b/pm4py/pm4py/algo/evaluation/replay_fitness/variants/token_replay.py new file mode 100644 index 0000000000000000000000000000000000000000..84837b459fce118e7634d41e08a2e9e258ad7b8e --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/replay_fitness/variants/token_replay.py @@ -0,0 +1,117 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.tokenreplay import algorithm as executor +from pm4py.algo.conformance.tokenreplay.variants import token_replay +from pm4py.util import exec_utils +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from enum import Enum +from pm4py.util import constants +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import typing + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + TOKEN_REPLAY_VARIANT = "token_replay_variant" + CLEANING_TOKEN_FLOOD = "cleaning_token_flood" + MULTIPROCESSING = "multiprocessing" + SHOW_PROGRESS_BAR = "show_progress_bar" + + +def evaluate(aligned_traces: typing.ListAlignments, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, float]: + """ + Gets a dictionary expressing fitness in a synthetic way from the list of boolean values + saying if a trace in the log is fit, and the float values of fitness associated to each trace + + Parameters + ------------ + aligned_traces + Result of the token-based replayer + parameters + Possible parameters of the evaluation + + Returns + ----------- + dictionary + Containing two keys (percFitTraces and averageFitness) + """ + if parameters is None: + parameters = {} + no_traces = len(aligned_traces) + fit_traces = len([x for x in aligned_traces if x["trace_is_fit"]]) + sum_of_fitness = sum([x["trace_fitness"] for x in aligned_traces]) + perc_fit_traces = 0.0 + average_fitness = 0.0 + log_fitness = 0 + total_m = sum([x["missing_tokens"] for x in aligned_traces]) + total_c = sum([x["consumed_tokens"] for x in aligned_traces]) + total_r = sum([x["remaining_tokens"] for x in aligned_traces]) + total_p = sum([x["produced_tokens"] for x in aligned_traces]) + if no_traces > 0 and total_c > 0 and total_p > 0: + perc_fit_traces = float(100.0 * fit_traces) / float(no_traces) + average_fitness = float(sum_of_fitness) / float(no_traces) + log_fitness = 0.5 * (1 - total_m / total_c) + 0.5 * (1 - total_r / total_p) + return {"perc_fit_traces": perc_fit_traces, "average_trace_fitness": average_fitness, "log_fitness": log_fitness, + "percentage_of_fitting_traces": perc_fit_traces } + + +def apply(log: EventLog, petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, float]: + """ + Apply token replay fitness evaluation + + Parameters + ----------- + log + Trace log + petri_net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters + + Returns + ----------- + dictionary + Containing two keys (percFitTraces and averageFitness) + """ + + if parameters is None: + parameters = {} + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + token_replay_variant = exec_utils.get_param_value(Parameters.TOKEN_REPLAY_VARIANT, parameters, + executor.Variants.TOKEN_REPLAY) + cleaning_token_flood = exec_utils.get_param_value(Parameters.CLEANING_TOKEN_FLOOD, parameters, False) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + parameters_tr = {token_replay.Parameters.ACTIVITY_KEY: activity_key, + token_replay.Parameters.CONSIDER_REMAINING_IN_FITNESS: True, + token_replay.Parameters.CLEANING_TOKEN_FLOOD: cleaning_token_flood, + token_replay.Parameters.SHOW_PROGRESS_BAR: show_progress_bar, + token_replay.Parameters.CASE_ID_KEY: case_id_key} + + aligned_traces = executor.apply(log, petri_net, initial_marking, final_marking, variant=token_replay_variant, + parameters=parameters_tr) + + return evaluate(aligned_traces) diff --git a/pm4py/pm4py/algo/evaluation/simplicity/__init__.py b/pm4py/pm4py/algo/evaluation/simplicity/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a85d88f075eb509f39777190714068918aa096ee --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/simplicity/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.evaluation.simplicity import variants, algorithm + diff --git a/pm4py/pm4py/algo/evaluation/simplicity/algorithm.py b/pm4py/pm4py/algo/evaluation/simplicity/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..c0106e6dc198b0a0412205f1ff1331cc426abad9 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/simplicity/algorithm.py @@ -0,0 +1,39 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.evaluation.simplicity.variants import arc_degree, extended_cardoso, extended_cyclomatic +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any +from pm4py.objects.petri_net.obj import PetriNet + + +class Variants(Enum): + SIMPLICITY_ARC_DEGREE = arc_degree + EXTENDED_CARDOSO = extended_cardoso + EXTENDED_CYCLOMATIC = extended_cyclomatic + + +SIMPLICITY_ARC_DEGREE = Variants.SIMPLICITY_ARC_DEGREE +EXTENDED_CARDOSO = Variants.EXTENDED_CARDOSO +EXTENDED_CYCLOMATIC = Variants.EXTENDED_CYCLOMATIC + +VERSIONS = {SIMPLICITY_ARC_DEGREE, EXTENDED_CARDOSO, EXTENDED_CYCLOMATIC} + + +def apply(petri_net: PetriNet, parameters: Optional[Dict[Any, Any]] = None, variant=SIMPLICITY_ARC_DEGREE) -> float: + return exec_utils.get_variant(variant).apply(petri_net, parameters=parameters) diff --git a/pm4py/pm4py/algo/evaluation/simplicity/variants/__init__.py b/pm4py/pm4py/algo/evaluation/simplicity/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..28012fdb8deb8a71a833b89ae9b166371c423981 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/simplicity/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.evaluation.simplicity.variants import arc_degree, extended_cardoso, extended_cyclomatic diff --git a/pm4py/pm4py/algo/evaluation/simplicity/variants/arc_degree.py b/pm4py/pm4py/algo/evaluation/simplicity/variants/arc_degree.py new file mode 100644 index 0000000000000000000000000000000000000000..d3cdcf07506ef0af4f544242c22ce9651a408eac --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/simplicity/variants/arc_degree.py @@ -0,0 +1,72 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from statistics import mean +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.petri_net.obj import PetriNet + + +class Parameters(Enum): + K = "k" + + +def apply(petri_net: PetriNet, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Gets simplicity from a Petri net + + Vázquez-Barreiros, Borja, Manuel Mucientes, and Manuel Lama. "ProDiGen: Mining complete, precise and minimal + structure process models with a genetic algorithm." Information Sciences 294 (2015): 315-333. + + Parameters + ----------- + petri_net + Petri net + parameters + Possible parameters of the algorithm: + - K: defines the value to be substracted in the formula: the lower is the value, + the lower is the simplicity value. k is the baseline arc degree (that is subtracted from the others) + + Returns + ----------- + simplicity + Simplicity measure associated to the Petri net + """ + if parameters is None: + parameters = {} + + # original model: we have plenty of choices there. + # one choice is about taking a model containing the most frequent variant, + # along with a short circuit between the final and the initial marking. + # in that case, the average arc degree of the "original model" is 2 + + # keep the default to 2 + k = exec_utils.get_param_value(Parameters.K, parameters, 2) + + # TODO: verify the real provenence of the approach before! + + all_arc_degrees = [] + for place in petri_net.places: + all_arc_degrees.append(len(place.in_arcs) + len(place.out_arcs)) + for trans in petri_net.transitions: + all_arc_degrees.append(len(trans.in_arcs) + len(trans.out_arcs)) + + mean_degree = mean(all_arc_degrees) if all_arc_degrees else 0.0 + + simplicity = 1.0 / (1.0 + max(mean_degree - k, 0)) + + return simplicity diff --git a/pm4py/pm4py/algo/evaluation/simplicity/variants/extended_cardoso.py b/pm4py/pm4py/algo/evaluation/simplicity/variants/extended_cardoso.py new file mode 100644 index 0000000000000000000000000000000000000000..f8dc3fa35eb49dd781a7fbed7de6fbd3a1030c7e --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/simplicity/variants/extended_cardoso.py @@ -0,0 +1,51 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.petri_net.obj import PetriNet +from typing import Optional, Dict, Any + + +def apply(petri_net: PetriNet, parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + Computes the extended Cardoso metric as described in the paper: + + "Complexity Metrics for Workflow Nets" + Lassen, Kristian Bisgaard, and Wil MP van der Aalst + + Parameters + ------------- + petri_net + Petri net + + Returns + ------------- + ext_cardoso_metric + Extended Cardoso metric + """ + if parameters is None: + parameters = {} + + ext_card = 0 + + for place in petri_net.places: + targets = set() + for out_arc in place.out_arcs: + for out_arc2 in out_arc.target.out_arcs: + targets.add(out_arc2.target) + ext_card += len(targets) + + return ext_card diff --git a/pm4py/pm4py/algo/evaluation/simplicity/variants/extended_cyclomatic.py b/pm4py/pm4py/algo/evaluation/simplicity/variants/extended_cyclomatic.py new file mode 100644 index 0000000000000000000000000000000000000000..e42cbf58ae2ce2a426c945974fa096e03f5617f6 --- /dev/null +++ b/pm4py/pm4py/algo/evaluation/simplicity/variants/extended_cyclomatic.py @@ -0,0 +1,63 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils import reachability_graph +from typing import Optional, Dict, Any +from pm4py.util import nx_utils + + +def apply(petri_net: PetriNet, im: Optional[Marking] = None, parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + Computes the extended cyclomatic metric as described in the paper: + + "Complexity Metrics for Workflow Nets" + Lassen, Kristian Bisgaard, and Wil MP van der Aalst + + Parameters + ------------- + petri_net + Petri net + + Returns + ------------- + ext_cyclomatic_metric + Extended Cyclomatic metric + """ + if parameters is None: + parameters = {} + + if im is None: + # if not provided, try to reconstruct the initial marking by taking the places with empty preset + im = Marking() + for place in petri_net.places: + if len(place.in_arcs) == 0: + im[place] = 1 + + reach_graph = reachability_graph.construct_reachability_graph(petri_net, im, use_trans_name=True) + + G = nx_utils.DiGraph() + for n in reach_graph.states: + G.add_node(n.name) + + for n in reach_graph.states: + for n2 in n.outgoing: + G.add_edge(n, n2) + + sg = list(nx_utils.strongly_connected_components(G)) + + return len(G.edges) - len(G.nodes) + len(sg) diff --git a/pm4py/pm4py/algo/filtering/__init__.py b/pm4py/pm4py/algo/filtering/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/filtering/common/__init__.py b/pm4py/pm4py/algo/filtering/common/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6c12414410f794a5b96591bc9e0e78ab4d7f311d --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.common import end_activities, start_activities, filtering_constants, timestamp, attributes diff --git a/pm4py/pm4py/algo/filtering/common/attributes/__init__.py b/pm4py/pm4py/algo/filtering/common/attributes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/attributes/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/filtering/common/attributes/attributes_common.py b/pm4py/pm4py/algo/filtering/common/attributes/attributes_common.py new file mode 100644 index 0000000000000000000000000000000000000000..463031518383811e5e27be7b9a27bf55a1726205 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/attributes/attributes_common.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.attributes.common.get import get_sorted_attributes_list, get_attributes_threshold, get_kde_numeric_attribute, get_kde_numeric_attribute_json, get_kde_date_attribute, get_kde_date_attribute_json diff --git a/pm4py/pm4py/algo/filtering/common/end_activities/__init__.py b/pm4py/pm4py/algo/filtering/common/end_activities/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..cacd7aaed367e8ec09ce1c88ead02490de2e7a86 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/end_activities/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.common.end_activities import end_activities_common diff --git a/pm4py/pm4py/algo/filtering/common/end_activities/end_activities_common.py b/pm4py/pm4py/algo/filtering/common/end_activities/end_activities_common.py new file mode 100644 index 0000000000000000000000000000000000000000..a844c6001bb258ecd378bfc9afad53ecc883bb04 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/end_activities/end_activities_common.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.end_activities.common.get import get_end_activities_threshold, get_sorted_end_activities_list diff --git a/pm4py/pm4py/algo/filtering/common/filtering_constants.py b/pm4py/pm4py/algo/filtering/common/filtering_constants.py new file mode 100644 index 0000000000000000000000000000000000000000..de292b15c641cab93e94fff3d0909363c9ee37c0 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/filtering_constants.py @@ -0,0 +1,20 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import CASE_CONCEPT_NAME + +DECREASING_FACTOR = 0.6 +DEFAULT_NOISE_THRESH_DF = 0.16 diff --git a/pm4py/pm4py/algo/filtering/common/start_activities/__init__.py b/pm4py/pm4py/algo/filtering/common/start_activities/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ccd85aaf4fee41e819b22e832a4c198b70ac204c --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/start_activities/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.common.start_activities import start_activities_common diff --git a/pm4py/pm4py/algo/filtering/common/start_activities/start_activities_common.py b/pm4py/pm4py/algo/filtering/common/start_activities/start_activities_common.py new file mode 100644 index 0000000000000000000000000000000000000000..461daf9b890e4ae7f28742b669cd9724b9b75744 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/start_activities/start_activities_common.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.start_activities.common.get import get_sorted_start_activities_list, get_start_activities_threshold diff --git a/pm4py/pm4py/algo/filtering/common/timestamp/__init__.py b/pm4py/pm4py/algo/filtering/common/timestamp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/timestamp/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/filtering/common/timestamp/timestamp_common.py b/pm4py/pm4py/algo/filtering/common/timestamp/timestamp_common.py new file mode 100644 index 0000000000000000000000000000000000000000..8ed80200a4e27ef549768083e8af69ef9d98bd96 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/timestamp/timestamp_common.py @@ -0,0 +1,39 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from datetime import datetime +from pm4py.util.dt_parsing.variants import strpfromiso + + +def get_dt_from_string(dt): + """ + If the date is expressed as string, do the conversion to a datetime.datetime object + + Parameters + ----------- + dt + Date (string or datetime.datetime) + + Returns + ----------- + dt + Datetime object + """ + if type(dt) is str: + dt = datetime.strptime(dt, "%Y-%m-%d %H:%M:%S") + + dt = strpfromiso.fix_naivety(dt) + return dt diff --git a/pm4py/pm4py/algo/filtering/common/traces/__init__.py b/pm4py/pm4py/algo/filtering/common/traces/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/traces/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/filtering/common/traces/infix_to_regex.py b/pm4py/pm4py/algo/filtering/common/traces/infix_to_regex.py new file mode 100644 index 0000000000000000000000000000000000000000..f0a53ee3272dfa416f2111b04a2c9062f6b37394 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/common/traces/infix_to_regex.py @@ -0,0 +1,33 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def translate_infix_to_regex(infix): + regex = "^" + for i, act in enumerate(infix): + is_last_activity = i == (len(infix) - 1) + if act == "...": + if is_last_activity: + regex = f"{regex[:-1]}(,[^,]*)*" + else: + regex = f"{regex}([^,]*,)*" + else: + if is_last_activity: + regex = f"{regex}{act}" + else: + regex = f"{regex}{act}," + + regex = f"{regex}$" + return regex diff --git a/pm4py/pm4py/algo/filtering/dfg/__init__.py b/pm4py/pm4py/algo/filtering/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/dfg/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/filtering/dfg/dfg_filtering.py b/pm4py/pm4py/algo/filtering/dfg/dfg_filtering.py new file mode 100644 index 0000000000000000000000000000000000000000..9f5f90dc534c67eddfd12555b217b02bc164cc84 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/dfg/dfg_filtering.py @@ -0,0 +1,613 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import math +from copy import deepcopy + +from pm4py.objects.dfg.utils import dfg_utils +from pm4py.util import constants, nx_utils + +DEFAULT_NOISE_THRESH_DF = 0.16 + + +def generate_nx_graph_from_dfg(dfg, start_activities, end_activities, activities_count): + """ + Generate a NetworkX graph for reachability-checking purposes out of the DFG + + Parameters + -------------- + dfg + DFG + start_activities + Start activities + end_activities + End activities + activities_count + Activities of the DFG along with their count + + Returns + -------------- + G + NetworkX digraph + start_node + Identifier of the start node (connected to all the start activities) + end_node + Identifier of the end node (connected to all the end activities) + """ + start_node = '4d872045-8664-4e21-bd55-5da5edb096fe' # made static to avoid undeterminism + end_node = 'b8136db7-b162-4763-bd68-4d5ccbcdff87' # made static to avoid undeterminism + G = nx_utils.DiGraph() + G.add_node(start_node) + G.add_node(end_node) + for act in activities_count: + G.add_node(act) + for edge in dfg: + G.add_edge(edge[0], edge[1]) + for act in start_activities: + G.add_edge(start_node, act) + for act in end_activities: + G.add_edge(act, end_node) + return G, start_node, end_node + + +def filter_dfg_on_activities_percentage(dfg0, start_activities0, end_activities0, activities_count0, percentage): + """ + Filters a DFG (complete, and so connected) on the specified percentage of activities + (but ensuring that every node is still reachable from the start and to the end) + + Parameters + ---------------- + dfg0 + (Complete, and so connected) DFG + start_activities0 + Start activities + end_activities0 + End activities + activities_count0 + Activities of the DFG along with their count + percentage + Percentage of activities + + Returns + ---------------- + dfg + (Filtered) DFG + start_activities + (Filtered) start activities + end_activities + (Filtered) end activities + activities_count + (Filtered) activities of the DFG along with their count + """ + # since the dictionaries/sets are modified, a deepcopy is the best option to ensure data integrity + dfg = deepcopy(dfg0) + start_activities = deepcopy(start_activities0) + end_activities = deepcopy(end_activities0) + activities_count = deepcopy(activities_count0) + + if len(activities_count) > 1 and len(dfg) > 1: + activities_count_sorted_list = sorted([(x, y) for x, y in activities_count.items()], key=lambda x: (x[1], x[0]), + reverse=True) + # retrieve the minimum list of activities to keep in the graph, according to the percentage + min_set_activities_to_keep = set( + x[0] for x in activities_count_sorted_list[:math.ceil((len(activities_count) - 1) * percentage) + 1]) + # retrieve the activities that can be possibly discarded, according to the percentage + activities_to_possibly_discard = list( + x[0] for x in activities_count_sorted_list[math.ceil((len(activities_count) - 1) * percentage) + 1:]) + activities_to_possibly_discard.reverse() + # build a graph structure that helps in deciding whether the activities can be discarded safely + graph, start_node, end_node = generate_nx_graph_from_dfg(dfg, start_activities, end_activities, + activities_count) + for act in activities_to_possibly_discard: + new_graph = nx_utils.DiGraph(graph) + # try to remove the node + new_graph.remove_node(act) + # check whether all the activities to keep can be reached from the start and can reach the end + reachable_from_start = set(nx_utils.descendants(new_graph, start_node)) + reachable_to_end = set(nx_utils.ancestors(new_graph, end_node)) + if min_set_activities_to_keep.issubset(reachable_from_start) and min_set_activities_to_keep.issubset( + reachable_to_end): + # if that is the case, try to elaborate the new DFG (without the activity) + new_dfg = {x: y for x, y in dfg.items() if x[0] != act and x[1] != act} + # if that is still not empty ... + if new_dfg: + # ... then the activity can be safely removed + dfg = new_dfg + del activities_count[act] + if act in start_activities: + del start_activities[act] + if act in end_activities: + del end_activities[act] + graph = new_graph + + # at the end of the previous step, some nodes may be remaining that are not reachable from the start + # or cannot reach the end. obviously the previous steps ensured that at least the activities in min_set_activities_to_keep + # are connected + reachable_from_start = set(nx_utils.descendants(graph, start_node)) + reachable_to_end = set(nx_utils.ancestors(graph, end_node)) + reachable_start_end = reachable_from_start.intersection(reachable_to_end) + activities_set = set(activities_count.keys()) + non_reachable_activities = activities_set.difference(reachable_start_end) + + # remove these non reachable activities + for act in non_reachable_activities: + dfg = {x: y for x, y in dfg.items() if x[0] != act and x[1] != act} + del activities_count[act] + if act in start_activities: + del start_activities[act] + if act in end_activities: + del end_activities[act] + + return dfg, start_activities, end_activities, activities_count + + +def __filter_specified_paths(dfg, start_activities, end_activities, activities_count, graph, start_node, end_node, + discardable_edges, activities_not_to_discard): + for edge in discardable_edges: + if len(dfg) > 1: + new_graph = nx_utils.DiGraph(graph) + # try to remove the edge + new_graph.remove_edge(edge[0], edge[1]) + + # check whether all the activities to keep can be reached from the start and can reach the end + reachable_from_start = set(nx_utils.descendants(new_graph, start_node)) + reachable_to_end = set(nx_utils.ancestors(new_graph, end_node)) + + if activities_not_to_discard.issubset(reachable_from_start) and activities_not_to_discard.issubset( + reachable_to_end): + # remove the edge + graph = new_graph + if edge in dfg: + # if the edge connects two activities simply remove that + del dfg[edge] + elif edge[0] == start_node: + del start_activities[edge[1]] + elif edge[1] == end_node: + del end_activities[edge[0]] + + # at the end of the previous step, some nodes may be remaining that are not reachable from the start + # or cannot reach the end. obviously the previous steps ensured that at least the activities in min_set_activities_to_keep + # are connected + reachable_from_start = set(nx_utils.descendants(graph, start_node)) + reachable_to_end = set(nx_utils.ancestors(graph, end_node)) + reachable_start_end = reachable_from_start.intersection(reachable_to_end) + activities_set = set(activities_count.keys()) + non_reachable_activities = activities_set.difference(reachable_start_end) + + # remove these non reachable activities + for act in non_reachable_activities: + dfg = {x: y for x, y in dfg.items() if x[0] != act and x[1] != act} + del activities_count[act] + if act in start_activities: + del start_activities[act] + if act in end_activities: + del end_activities[act] + + # make sure that the DFG contains only edges between these activities + dfg = {x: y for x, y in dfg.items() if x[0] in activities_count and x[1] in activities_count} + + return dfg, start_activities, end_activities, activities_count + + +def filter_dfg_on_paths_percentage(dfg0, start_activities0, end_activities0, activities_count0, percentage, + keep_all_activities=False): + """ + Filters a DFG (complete, and so connected) on the specified percentage of paths + (but ensuring that every node is still reachable from the start and to the end) + + Parameters + ---------------- + dfg0 + (Complete, and so connected) DFG + start_activities0 + Start activities + end_activities0 + End activities + activities_count0 + Activities of the DFG along with their count + percentage + Percentage of paths + keep_all_activities + Decides if all the activities (also the ones connected by the low occurrences edges) should be kept, + or only the ones appearing in the edges with more occurrences (default). + + Returns + ---------------- + dfg + (Filtered) DFG + start_activities + (Filtered) start activities + end_activities + (Filtered) end activities + activities_count + (Filtered) activities of the DFG along with their count + """ + + # since the dictionaries/sets are modified, a deepcopy is the best option to ensure data integrity + dfg = deepcopy(dfg0) + start_activities = deepcopy(start_activities0) + end_activities = deepcopy(end_activities0) + activities_count = deepcopy(activities_count0) + + if len(activities_count) > 1 and len(dfg) > 1: + # build a graph structure that helps in deciding whether the paths can be discarded safely + graph, start_node, end_node = generate_nx_graph_from_dfg(dfg, start_activities, end_activities, + activities_count) + all_edges = [(x, y) for x, y in dfg.items()] + [((start_node, x), start_activities[x]) for x in + start_activities] + [((x, end_node), end_activities[x]) for x in + end_activities] + all_edges = sorted(all_edges, key=lambda x: (x[1], x[0]), reverse=True) + # calculate a set of edges that could be discarded and not + non_discardable_edges = list( + x[0] for x in all_edges[:math.ceil((len(all_edges) - 1) * percentage) + 1]) + discardable_edges = list(x[0] for x in all_edges[math.ceil((len(all_edges) - 1) * percentage) + 1:]) + discardable_edges.reverse() + + # according to the parameter's value, keep the activities that appears in the edges that should not be + # discarded (default), OR keep all the activities, trying to remove edges but ensure connectiveness of + # everything + if keep_all_activities: + activities_not_to_discard = set(x[0] for x in dfg).union(set(x[1] for x in dfg)).union( + set(start_activities)).union(set(end_activities)).union(set(activities_count)) + else: + activities_not_to_discard = set(x[0] for x in non_discardable_edges if not x[0] == start_node).union( + set(x[1] for x in non_discardable_edges if not x[1] == end_node)) + + dfg, start_activities, end_activities, activities_count = __filter_specified_paths(dfg, start_activities, + end_activities, + activities_count, graph, + start_node, end_node, + discardable_edges, + activities_not_to_discard) + + return dfg, start_activities, end_activities, activities_count + + +def filter_dfg_keep_connected(dfg0, start_activities0, end_activities0, activities_count0, threshold, + keep_all_activities=False): + """ + Filters a DFG (complete, and so connected) on the specified dependency threshold (Heuristics Miner dependency) + (but ensuring that every node is still reachable from the start and to the end) + + Parameters + ---------------- + dfg0 + (Complete, and so connected) DFG + start_activities0 + Start activities + end_activities0 + End activities + activities_count0 + Activities of the DFG along with their count + threshold + Dependency threshold as in the Heuristics Miner + keep_all_activities + Decides if all the activities should be kept, + or only the ones appearing in the edges with higher threshold (default). + + Returns + ---------------- + dfg + (Filtered) DFG + start_activities + (Filtered) start activities + end_activities + (Filtered) end activities + activities_count + (Filtered) activities of the DFG along with their count + """ + + # since the dictionaries/sets are modified, a deepcopy is the best option to ensure data integrity + dfg = deepcopy(dfg0) + start_activities = deepcopy(start_activities0) + end_activities = deepcopy(end_activities0) + activities_count = deepcopy(activities_count0) + + if len(activities_count) > 1 and len(dfg) > 1: + # build a graph structure that helps in deciding whether the paths can be discarded safely + graph, start_node, end_node = generate_nx_graph_from_dfg(dfg, start_activities, end_activities, + activities_count) + + dependency = {} + for el in dfg: + elinv = (el[1], el[0]) + if elinv in dfg: + dep = (dfg[el] - dfg[elinv]) / (dfg[el] + dfg[elinv] + 1) + else: + dep = dfg[el] / (dfg[el] + 1) + dependency[el] = dep + + all_edges = [(x, y) for x, y in dependency.items()] + [((start_node, x), 1.0) for x in + start_activities] + [((x, end_node), 1.0) for x in + end_activities] + all_edges = sorted(all_edges, key=lambda x: (x[1], x[0]), reverse=True) + # calculate a set of edges that could be discarded and not + non_discardable_edges = list(x[0] for x in all_edges if x[1] >= threshold) + discardable_edges = list(x[0] for x in all_edges if x[1] < threshold) + discardable_edges.reverse() + + # according to the parameter's value, keep the activities that appears in the edges that should not be + # discarded (default), OR keep all the activities, trying to remove edges but ensure connectiveness of + # everything + if keep_all_activities: + activities_not_to_discard = set(x[0] for x in dfg).union(set(x[1] for x in dfg)).union( + set(start_activities)).union(set(end_activities)).union(set(activities_count)) + else: + activities_not_to_discard = set(x[0] for x in non_discardable_edges if not x[0] == start_node).union( + set(x[1] for x in non_discardable_edges if not x[1] == end_node)) + + dfg, start_activities, end_activities, activities_count = __filter_specified_paths(dfg, start_activities, + end_activities, + activities_count, graph, + start_node, end_node, + discardable_edges, + activities_not_to_discard) + + return dfg, start_activities, end_activities, activities_count + + +def filter_dfg_to_activity(dfg0, start_activities0, end_activities0, activities_count0, target_activity, + parameters=None): + """ + Filters the DFG, making "target_activity" the only possible end activity of the graph + + Parameters + --------------- + dfg0 + Directly-follows graph + start_activities0 + Start activities + end_activities0 + End activities + activities_count0 + Activities count + target_activity + Target activity (only possible end activity after the filtering) + parameters + Parameters + + Returns + --------------- + dfg + Filtered DFG + start_activities + Filtered start activities + end_activities + Filtered end activities + activities_count + Filtered activities count + """ + if parameters is None: + parameters = {} + + # since the dictionaries/sets are modified, a deepcopy is the best option to ensure data integrity + dfg = deepcopy(dfg0) + start_activities = deepcopy(start_activities0) + activities_count = deepcopy(activities_count0) + + dfg = {x: y for x, y in dfg.items() if x[0] != target_activity} + end_activities = {target_activity: activities_count[target_activity]} + + changed = True + while changed: + changed = False + predecessors = dfg_utils.get_predecessors(dfg, activities_count) + successors = dfg_utils.get_successors(dfg, activities_count) + + successors_from_sa = set() + for act in start_activities: + successors_from_sa = successors_from_sa.union(successors[act]) + successors_from_sa.add(act) + + reachable_nodes = successors_from_sa.intersection(predecessors[target_activity]).union({target_activity}) + if reachable_nodes != set(activities_count.keys()): + changed = True + activities_count = {x: y for x, y in activities_count.items() if x in reachable_nodes} + start_activities = {x: y for x, y in start_activities.items() if x in reachable_nodes} + dfg = {x: y for x, y in dfg.items() if x[0] in reachable_nodes and x[1] in reachable_nodes} + + return dfg, start_activities, end_activities, activities_count + + +def filter_dfg_from_activity(dfg0, start_activities0, end_activities0, activities_count0, source_activity, + parameters=None): + """ + Filters the DFG, making "source_activity" the only possible source activity of the graph + + Parameters + --------------- + dfg0 + Directly-follows graph + start_activities0 + Start activities + end_activities0 + End activities + activities_count0 + Activities count + source_activity + Source activity (only possible start activity after the filtering) + parameters + Parameters + + Returns + --------------- + dfg + Filtered DFG + start_activities + Filtered start activities + end_activities + Filtered end activities + activities_count + Filtered activities count + """ + if parameters is None: + parameters = {} + + # since the dictionaries/sets are modified, a deepcopy is the best option to ensure data integrity + dfg = deepcopy(dfg0) + end_activities = deepcopy(end_activities0) + activities_count = deepcopy(activities_count0) + + dfg = {x: y for x, y in dfg.items() if x[1] != source_activity} + start_activities = {source_activity: activities_count[source_activity]} + + changed = True + while changed: + changed = False + predecessors = dfg_utils.get_predecessors(dfg, activities_count) + successors = dfg_utils.get_successors(dfg, activities_count) + + predecessors_from_ea = set() + for ea in end_activities: + predecessors_from_ea = predecessors_from_ea.union(predecessors[ea]) + predecessors_from_ea.add(ea) + + reachable_nodes = predecessors_from_ea.intersection(successors[source_activity]).union({source_activity}) + if reachable_nodes != set(activities_count.keys()): + changed = True + activities_count = {x: y for x, y in activities_count.items() if x in reachable_nodes} + end_activities = {x: y for x, y in end_activities.items() if x in reachable_nodes} + dfg = {x: y for x, y in dfg.items() if x[0] in reachable_nodes and x[1] in reachable_nodes} + + return dfg, start_activities, end_activities, activities_count + + +def filter_dfg_contain_activity(dfg0, start_activities0, end_activities0, activities_count0, activity, parameters=None): + """ + Filters the DFG keeping only nodes that can reach / are reachable from activity + + Parameters + --------------- + dfg0 + Directly-follows graph + start_activities0 + Start activities + end_activities0 + End activities + activities_count0 + Activities count + activity + Activity that should be reachable / should reach all the nodes of the filtered graph + parameters + Parameters + + Returns + --------------- + dfg + Filtered DFG + start_activities + Filtered start activities + end_activities + Filtered end activities + activities_count + Filtered activities count + """ + if parameters is None: + parameters = {} + + # since the dictionaries/sets are modified, a deepcopy is the best option to ensure data integrity + dfg = deepcopy(dfg0) + start_activities = deepcopy(start_activities0) + end_activities = deepcopy(end_activities0) + activities_count = deepcopy(activities_count0) + + changed = True + while changed: + changed = False + predecessors = dfg_utils.get_predecessors(dfg, activities_count) + successors = dfg_utils.get_successors(dfg, activities_count) + + predecessors_act = predecessors[activity].union({activity}) + successors_act = successors[activity].union({activity}) + + start_activities1 = {x: y for x, y in start_activities.items() if x in predecessors_act} + end_activities1 = {x: y for x, y in end_activities.items() if x in successors_act} + + if start_activities != start_activities1 or end_activities != end_activities1: + changed = True + + start_activities = start_activities1 + end_activities = end_activities1 + + reachable_nodes = predecessors_act.union(successors_act) + if reachable_nodes != set(activities_count.keys()): + changed = True + activities_count = {x: y for x, y in activities_count.items() if x in reachable_nodes} + dfg = {x: y for x, y in dfg.items() if x[0] in reachable_nodes and x[1] in reachable_nodes} + + return dfg, start_activities, end_activities, activities_count + + +def clean_dfg_based_on_noise_thresh(dfg, activities, noise_threshold, parameters=None): + """ + Clean Directly-Follows graph based on noise threshold + + Parameters + ---------- + dfg + Directly-Follows graph + activities + Activities in the DFG graph + noise_threshold + Noise threshold + + Returns + ---------- + newDfg + Cleaned dfg based on noise threshold + """ + if parameters is None: + parameters = {} + + most_common_paths = parameters[ + constants.PARAM_MOST_COMMON_PATHS] if constants.PARAM_MOST_COMMON_PATHS in parameters else None + if most_common_paths is None: + most_common_paths = [] + + new_dfg = None + activ_max_count = {} + for act in activities: + activ_max_count[act] = dfg_utils.get_max_activity_count(dfg, act) + + for el in dfg: + if type(el[0]) is str: + if new_dfg is None: + new_dfg = {} + act1 = el[0] + act2 = el[1] + val = dfg[el] + else: + if new_dfg is None: + new_dfg = [] + act1 = el[0][0] + act2 = el[0][1] + val = el[1] + + if not el in most_common_paths and val < min(activ_max_count[act1] * noise_threshold, + activ_max_count[act2] * noise_threshold): + pass + else: + if type(el[0]) is str: + new_dfg[el] = dfg[el] + pass + else: + new_dfg.append(el) + pass + + if new_dfg is None: + return dfg + + return new_dfg diff --git a/pm4py/pm4py/algo/filtering/log/__init__.py b/pm4py/pm4py/algo/filtering/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b3b06fddb63025713c45da29d785cbfe5182ea9b --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/__init__.py @@ -0,0 +1,19 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.filtering.log import attributes, end_activities, paths, \ + cases, start_activities, timestamp, variants, ltl diff --git a/pm4py/pm4py/algo/filtering/log/attr_value_repetition/__init__.py b/pm4py/pm4py/algo/filtering/log/attr_value_repetition/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..f88e8b76bd6a432244ea0e1e1afac6c44b60a43e --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/attr_value_repetition/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.attr_value_repetition import filter + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The attr_value_repetition filter package will be removed in a future release.") diff --git a/pm4py/pm4py/algo/filtering/log/attr_value_repetition/filter.py b/pm4py/pm4py/algo/filtering/log/attr_value_repetition/filter.py new file mode 100644 index 0000000000000000000000000000000000000000..cae625f072f0ca1c9966e7497019c3fc7c45a2e9 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/attr_value_repetition/filter.py @@ -0,0 +1,74 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +from enum import Enum +from typing import Any, Optional, Dict, Union + +from pm4py.objects.conversion.log import converter +from pm4py.objects.log.obj import EventLog +from pm4py.util import constants, xes_constants, exec_utils + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + MIN_REP = "min_rep" + MAX_REP = "max_rep" + + +def apply(log: EventLog, value: Any, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filters the trace of the log where the given attribute value is repeated + (in a range of repetitions that is specified by the user) + + Parameters + ---------------- + log + Event log + value + Value that is investigated + parameters + Parameters of the filter, including: + - Parameters.ATTRIBUTE_KEY => the attribute key + - Parameters.MIN_REP => minimum number of repetitions + - Parameters.MAX_REP => maximum number of repetitions + + Returns + ---------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = converter.apply(log, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + min_rep = exec_utils.get_param_value(Parameters.MIN_REP, parameters, 2) + max_rep = exec_utils.get_param_value(Parameters.MAX_REP, parameters, sys.maxsize) + + filtered_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + for trace in log: + rep = 0 + for event in trace: + if attribute_key in event and event[attribute_key] == value: + rep += 1 + if min_rep <= rep <= max_rep: + filtered_log.append(trace) + + return filtered_log diff --git a/pm4py/pm4py/algo/filtering/log/attributes/__init__.py b/pm4py/pm4py/algo/filtering/log/attributes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b04e83aed2d790cb1db23353ed5b3f60801a402d --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/attributes/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.attributes import attributes_filter diff --git a/pm4py/pm4py/algo/filtering/log/attributes/attributes_filter.py b/pm4py/pm4py/algo/filtering/log/attributes/attributes_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..d3916eeecbd230937b06ed34a2bc445e13008da7 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/attributes/attributes_filter.py @@ -0,0 +1,428 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.statistics.attributes.log.select import * +from pm4py.statistics.attributes.log.get import * +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import Trace +from pm4py.statistics.attributes.log.get import get_attribute_values +from pm4py.util import exec_utils +from pm4py.util import xes_constants as xes +from pm4py.util.constants import PARAMETER_CONSTANT_ATTRIBUTE_KEY, PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_CASEID_KEY, PARAMETER_KEY_CASE_GLUE +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from copy import copy +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog, EventStream + + +class Parameters(Enum): + ATTRIBUTE_KEY = PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + PARAMETER_KEY_CASE_GLUE = PARAMETER_KEY_CASE_GLUE + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + STREAM_FILTER_KEY1 = "stream_filter_key1" + STREAM_FILTER_VALUE1 = "stream_filter_value1" + STREAM_FILTER_KEY2 = "stream_filter_key2" + STREAM_FILTER_VALUE2 = "stream_filter_value2" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def apply_numeric(log: EventLog, int1: float, int2: float, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Apply a filter on cases (numerical filter) + + Parameters + -------------- + log + Log + int1 + Lower bound of the interval + int2 + Upper bound of the interval + parameters + Possible parameters of the algorithm + + Returns + -------------- + filtered_df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + case_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes.DEFAULT_TRACEID_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + case_attribute_prefix = exec_utils.get_param_value(Parameters.PARAMETER_KEY_CASE_GLUE, parameters, constants.CASE_ATTRIBUTE_PREFIX) + # stream_filter_key is helpful to filter on cases containing an event with an attribute + # in the specified value set, but such events shall have an activity in particular. + + stream_filter_key1 = exec_utils.get_param_value(Parameters.STREAM_FILTER_KEY1, parameters, None) + stream_filter_value1 = exec_utils.get_param_value(Parameters.STREAM_FILTER_VALUE1, parameters, None) + stream_filter_key2 = exec_utils.get_param_value(Parameters.STREAM_FILTER_KEY2, parameters, None) + stream_filter_value2 = exec_utils.get_param_value(Parameters.STREAM_FILTER_VALUE2, parameters, None) + + conversion_parameters = copy(parameters) + conversion_parameters["deepcopy"] = False + + stream = log_converter.apply(log, variant=log_converter.TO_EVENT_STREAM, parameters=conversion_parameters) + if stream_filter_key1 is not None: + stream = EventStream( + list(filter(lambda x: stream_filter_key1 in x and x[stream_filter_key1] == stream_filter_value1, stream)), + attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + if stream_filter_key2 is not None: + stream = EventStream( + list(filter(lambda x: stream_filter_key2 in x and x[stream_filter_key2] == stream_filter_value2, stream)), + attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + if positive: + stream = EventStream(list(filter(lambda x: attribute_key in x and int1 <= x[attribute_key] <= int2, stream)), + attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + else: + stream = EventStream( + list(filter(lambda x: attribute_key in x and (x[attribute_key] < int1 or x[attribute_key] > int2), stream)), + attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + all_cases_ids = set(x[case_attribute_prefix + case_key] for x in stream) + + filtered_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + for case in log: + if case.attributes[case_key] in all_cases_ids: + filtered_log.append(case) + + return filtered_log + + +def apply_numeric_events(log: EventLog, int1: float, int2: float, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Apply a filter on events (numerical filter) + + Parameters + -------------- + log + Log + int1 + Lower bound of the interval + int2 + Upper bound of the interval + parameters + Possible parameters of the algorithm: + Parameters.ATTRIBUTE_KEY => indicates which attribute to filter + Parameters.POSITIVE => keep or remove traces with such events? + + Returns + -------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + + conversion_parameters = copy(parameters) + conversion_parameters["deepcopy"] = False + stream = log_converter.apply(log, variant=log_converter.TO_EVENT_STREAM, parameters=conversion_parameters) + if exec_utils.get_param_value(Parameters.POSITIVE, parameters, True): + stream = EventStream(list(filter(lambda x: attribute_key in x and int1 <= x[attribute_key] <= int2, stream)), + attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + else: + stream = EventStream( + list(filter(lambda x: attribute_key in x and (x[attribute_key] < int1 or x[attribute_key] > int2), stream)), + attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + filtered_log = log_converter.apply(stream, variant=log_converter.Variants.TO_EVENT_LOG, parameters=conversion_parameters) + + return filtered_log + + +def apply_events(log: EventLog, values: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filter log by keeping only events with an attribute value that belongs to the provided values list + + Parameters + ----------- + log + log + values + Allowed attributes + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Attribute identifying the activity in the log + Parameters.POSITIVE -> Indicate if events should be kept/removed + + Returns + ----------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + conversion_parameters = copy(parameters) + conversion_parameters["deepcopy"] = False + + stream = log_converter.apply(log, variant=log_converter.TO_EVENT_STREAM, parameters=conversion_parameters) + if positive: + stream = EventStream(list(filter(lambda x: x[attribute_key] in values, stream)), attributes=log.attributes, + extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + else: + stream = EventStream(list(filter(lambda x: x[attribute_key] not in values, stream)), attributes=log.attributes, + extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + filtered_log = log_converter.apply(stream, variant=log_converter.Variants.TO_EVENT_LOG, parameters=conversion_parameters) + + return filtered_log + + +def apply(log: EventLog, values: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filter log by keeping only traces that has/has not events with an attribute value that belongs to the provided + values list + + Parameters + ----------- + log + Trace log + values + Allowed attributes + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Attribute identifying the activity in the log + Parameters.POSITIVE -> Indicate if events should be kept/removed + + Returns + ----------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + filtered_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + for trace in log: + new_trace = Trace() + + found = False + for j in range(len(trace)): + if attribute_key in trace[j]: + attribute_value = trace[j][attribute_key] + if attribute_value in values: + found = True + + if (found and positive) or (not found and not positive): + new_trace = trace + else: + for attr in trace.attributes: + new_trace.attributes[attr] = trace.attributes[attr] + + if len(new_trace) > 0: + filtered_log.append(new_trace) + return filtered_log + + +def apply_trace_attribute(log: EventLog, values: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filter a log on the trace attribute values + + Parameters + -------------- + log + Event log + values + Allowed/forbidden values + parameters + Parameters of the algorithm, including: + - Parameters.ATTRIBUTE_KEY: the attribute at the trace level to filter + - Parameters.POSITIVE: boolean (keep/discard values) + + Returns + -------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + filtered_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + for trace in log: + if positive: + if attribute_key in trace.attributes and trace.attributes[attribute_key] in values: + filtered_log.append(trace) + else: + if not attribute_key in trace.attributes or not trace.attributes[attribute_key] in values: + filtered_log.append(trace) + + return filtered_log + + +def filter_log_on_max_no_activities(log: EventLog, max_no_activities : int = 25, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filter a log on a maximum number of activities + + Parameters + ------------- + log + Log + max_no_activities + Maximum number of activities + parameters + Parameters of the algorithm + + Returns + ------------- + filtered_log + Filtered version of the event log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + activity_key = parameters[ + PARAMETER_CONSTANT_ACTIVITY_KEY] if PARAMETER_CONSTANT_ACTIVITY_KEY in parameters else DEFAULT_NAME_KEY + parameters[PARAMETER_CONSTANT_ATTRIBUTE_KEY] = activity_key + all_activities = sorted([(x, y) for x, y in get_attribute_values(log, activity_key).items()], key=lambda x: x[1], + reverse=True) + activities = all_activities[:min(len(all_activities), max_no_activities)] + activities = [x[0] for x in activities] + + if len(activities) < len(all_activities): + log = apply_events(log, activities, parameters=parameters) + return log + + +def filter_log_by_attributes_threshold(log, attributes, variants, vc, threshold, attribute_key=xes.DEFAULT_NAME_KEY): + """ + Keep only attributes which number of occurrences is above the threshold (or they belong to the first variant) + + Parameters + ---------- + log + Log + attributes + Dictionary of attributes associated with their count + variants + (If specified) Dictionary with variant as the key and the list of traces as the value + vc + List of variant names along with their count + threshold + Cutting threshold (remove attributes which number of occurrences is below the threshold) + attribute_key + (If specified) Specify the activity key in the log (default concept:name) + + Returns + ---------- + filtered_log + Filtered log + """ + filtered_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + fva = [x[attribute_key] for x in variants[vc[0][0]][0] if attribute_key in x] + for trace in log: + new_trace = Trace() + for j in range(len(trace)): + if attribute_key in trace[j]: + attribute_value = trace[j][attribute_key] + if attribute_value in attributes: + if (attribute_value in fva and attribute_key == xes.DEFAULT_NAME_KEY) or attributes[ + attribute_value] >= threshold: + new_trace.append(trace[j]) + if len(new_trace) > 0: + for attr in trace.attributes: + new_trace.attributes[attr] = trace.attributes[attr] + filtered_log.append(new_trace) + return filtered_log + + +def filter_log_relative_occurrence_event_attribute(log: EventLog, min_relative_stake: float, parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + Filters the event log keeping only the events having an attribute value which occurs: + - in at least the specified (min_relative_stake) percentage of events, when Parameters.KEEP_ONCE_PER_CASE = False + - in at least the specified (min_relative_stake) percentage of cases, when Parameters.KEEP_ONCE_PER_CASE = True + + Parameters + ------------------- + log + Event log + min_relative_stake + Minimum percentage of cases (expressed as a number between 0 and 1) in which the attribute should occur. + parameters + Parameters of the algorithm, including: + - Parameters.ATTRIBUTE_KEY => the attribute to use (default: concept:name) + - Parameters.KEEP_ONCE_PER_CASE => decides the level of the filter to apply + (if the filter should be applied on the cases, set it to True). + + Returns + ------------------ + filtered_log + Filtered event log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, xes.DEFAULT_NAME_KEY) + keep_once_per_case = exec_utils.get_param_value(Parameters.KEEP_ONCE_PER_CASE, parameters, True) + + parameters_cp = copy(parameters) + + activities_occurrences = get_attribute_values(log, attribute_key, parameters=parameters_cp) + + if keep_once_per_case: + # filter on cases + filtered_attributes = set(x for x, y in activities_occurrences.items() if y >= min_relative_stake * len(log)) + else: + # filter on events + filtered_attributes = set(x for x, y in activities_occurrences.items() if y >= min_relative_stake * sum(len(x) for x in log)) + + return apply_events(log, filtered_attributes, parameters=parameters) diff --git a/pm4py/pm4py/algo/filtering/log/between/__init__.py b/pm4py/pm4py/algo/filtering/log/between/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d79770b89df5366eec384fc9e9024607deecd193 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/between/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.between import between_filter diff --git a/pm4py/pm4py/algo/filtering/log/between/between_filter.py b/pm4py/pm4py/algo/filtering/log/between/between_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..046a6aed529e3c8aec03fd585d3d0eddb5392eb4 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/between/between_filter.py @@ -0,0 +1,110 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from copy import copy +from typing import Optional, Dict, Any, Union, List + +from pm4py.objects.log.obj import EventLog, Trace +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + SUBCASE_CONCAT_STR = "subcase_concat_str" + + +def __fix_trace_attributes(trace_attributes, idx, rel_count, case_id_key, subcase_concat_str): + trace_attributes = copy(trace_attributes) + if case_id_key in trace_attributes: + trace_attributes[case_id_key] = trace_attributes[case_id_key] + subcase_concat_str + str(rel_count) + else: + trace_attributes[case_id_key] = str(idx) + subcase_concat_str + str(rel_count) + return trace_attributes + + +def apply(log: EventLog, act1: Union[str, List[str]], act2: Union[str, List[str]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Given an event log, filters all the subtraces going from an event with activity "act1" to an event with + activity "act2" + + Parameters + ---------------- + log + Event log + act1 + First activity (or collection of activities) + act2 + Second activity (or collection of activities) + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => activity key + + Returns + ---------------- + filtered_log + Log with all the subtraces going from "act1" to "act2" + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + subcase_concat_str = exec_utils.get_param_value(Parameters.SUBCASE_CONCAT_STR, parameters, "##@@") + + act1_comparison = lambda x: (x == act1) if type(act1) is str else (x in act1) + act2_comparison = lambda x: (x == act2) if type(act2) is str else (x in act2) + + filtered_log = EventLog(attributes=log.attributes, extensions=log.extensions, omni_present=log.omni_present, + classifiers=log.classifiers, properties=log.properties) + + for idx, trace in enumerate(log): + act1_encountered = False + filt_trace = None + + rel_count = 0 + i = 0 + while i < len(trace): + if not act1_encountered and act1_comparison(trace[i][activity_key]): + act1_encountered = True + filt_trace = Trace(attributes=__fix_trace_attributes(trace.attributes, idx, rel_count, case_id_key, + subcase_concat_str)) + filt_trace.append(trace[i]) + elif act1_encountered and act2_comparison(trace[i][activity_key]): + filt_trace.append(trace[i]) + filtered_log.append(filt_trace) + rel_count += 1 + if act1 != act2: + # if the between filter is applied between two activities A and B, with A different from B, + # then the filter should stop until the next occurrence of A + act1_encountered = False + filt_trace = None + else: + # otherwise, if A = B, then it continues outputting the events to a new subcase + filt_trace = Trace(attributes=__fix_trace_attributes(trace.attributes, idx, rel_count, case_id_key, + subcase_concat_str)) + filt_trace.append(trace[i]) + + elif filt_trace is not None: + filt_trace.append(trace[i]) + + i = i + 1 + + return filtered_log diff --git a/pm4py/pm4py/algo/filtering/log/cases/__init__.py b/pm4py/pm4py/algo/filtering/log/cases/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e0783be059685846ab0d549def7e94c1058250d2 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/cases/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.cases import case_filter diff --git a/pm4py/pm4py/algo/filtering/log/cases/case_filter.py b/pm4py/pm4py/algo/filtering/log/cases/case_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..a10a54bf3a58689c9a943eacddc5fdf74bd35527 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/cases/case_filter.py @@ -0,0 +1,149 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_TIMESTAMP_KEY +from enum import Enum +from pm4py.util import exec_utils + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, Trace +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + + +def filter_on_case_performance(log: EventLog, inf_perf: float, sup_perf: float, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Gets a filtered log keeping only traces that satisfy the given performance requirements + + Parameters + ------------ + log + Log + inf_perf + Lower bound on the performance + sup_perf + Upper bound on the performance + parameters + Parameters + + Returns + ----------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + filtered_log = EventLog([trace for trace in log if satisfy_perf(trace, inf_perf, sup_perf, timestamp_key)]) + return filtered_log + + +def filter_on_ncases(log: EventLog, max_no_cases: int = 1000) -> EventLog: + """ + Get only a specified number of traces from a log + + Parameters + ----------- + log + Log + max_no_cases + Desidered number of traces from the log + + Returns + ----------- + filtered_log + Filtered log + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + filtered_log = EventLog(log[:min(len(log), max_no_cases)]) + return filtered_log + + +def filter_on_case_size(log: EventLog, min_case_size: int = 2, max_case_size=None) -> EventLog: + """ + Get only traces in the log with a given size + + Parameters + ----------- + log + Log + min_case_size + Minimum desidered size of traces + max_case_size + Maximum desidered size of traces + + Returns + ----------- + filtered_log + Filtered log + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + if max_case_size is not None: + filtered_log = EventLog([trace for trace in log if min_case_size <= len(trace) <= max_case_size]) + else: + filtered_log = EventLog([trace for trace in log if len(trace) >= min_case_size]) + return filtered_log + + +def satisfy_perf(trace: Trace, inf_perf: float, sup_perf: float, timestamp_key: str) -> bool: + """ + Checks if the trace satisfy the performance requirements + + Parameters + ----------- + trace + Trace + inf_perf + Lower bound on the performance + sup_perf + Upper bound on the performance + timestamp_key + Timestamp key + + Returns + ----------- + boolean + Boolean (is True if the trace satisfy the given performance requirements) + """ + if trace: + trace_duration = (trace[-1][timestamp_key] - trace[0][timestamp_key]).total_seconds() + return inf_perf <= trace_duration <= sup_perf + return False + + +def filter_case_performance(log, inf_perf, sup_perf, parameters=None): + return filter_on_case_performance(log, inf_perf, sup_perf, parameters=parameters) + + +def apply(df, parameters=None): + del df + del parameters + raise NotImplementedError("apply method not available for case filter") + + +def apply_auto_filter(df, parameters=None): + del df + del parameters + raise NotImplementedError("apply_auto_filter method not available for case filter") diff --git a/pm4py/pm4py/algo/filtering/log/end_activities/__init__.py b/pm4py/pm4py/algo/filtering/log/end_activities/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fdf4307f86b21c86a43080b5466f599991508819 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/end_activities/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.end_activities import end_activities_filter diff --git a/pm4py/pm4py/algo/filtering/log/end_activities/end_activities_filter.py b/pm4py/pm4py/algo/filtering/log/end_activities/end_activities_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..6eb8d439b1bec6fa7c80c7fd55ed1825b49f52e0 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/end_activities/end_activities_filter.py @@ -0,0 +1,99 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.util import exec_utils +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util.xes_constants import DEFAULT_NAME_KEY + +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + + +def apply(log: EventLog, admitted_end_activities: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filter the log on the specified end activities + + Parameters + ----------- + log + Log + admitted_end_activities + Admitted end activities + parameters + Algorithm parameters + + Returns + ----------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + if positive: + filtered_log = [trace for trace in log if trace and trace[-1][attribute_key] in admitted_end_activities] + else: + filtered_log = [trace for trace in log if trace and trace[-1][attribute_key] not in admitted_end_activities] + + return EventLog(filtered_log, attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + +def filter_log_by_end_activities(end_activities, variants, vc, threshold, activity_key="concept:name"): + """ + Keep only variants of the log with an end activity which number of occurrences is above the threshold + + Parameters + ---------- + end_activities + Dictionary of end attributes associated with their count + variants + (If specified) Dictionary with variant as the key and the list of traces as the value + vc + List of variant names along with their count + threshold + Cutting threshold (remove variants having end attributes which number of occurrences is below the threshold + activity_key + (If specified) Specify the activity key in the log (default concept:name) + + Returns + ---------- + filtered_log + Filtered log + """ + filtered_log = EventLog() + fvea = variants[vc[0][0]][0][-1][activity_key] + for variant in variants: + vea = variants[variant][0][-1][activity_key] + if vea in end_activities: + if vea == fvea or end_activities[vea] >= threshold: + for trace in variants[variant]: + filtered_log.append(trace) + return filtered_log diff --git a/pm4py/pm4py/algo/filtering/log/ltl/__init__.py b/pm4py/pm4py/algo/filtering/log/ltl/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a623ef345cd9dce6c85f12d97528666e340af4c4 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/ltl/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.ltl import ltl_checker diff --git a/pm4py/pm4py/algo/filtering/log/ltl/ltl_checker.py b/pm4py/pm4py/algo/filtering/log/ltl/ltl_checker.py new file mode 100644 index 0000000000000000000000000000000000000000..7aec690bf1c1de7b452003bec639516adbf4d343 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/ltl/ltl_checker.py @@ -0,0 +1,281 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.util import exec_utils +from pm4py.util.constants import PARAMETER_CONSTANT_ATTRIBUTE_KEY, PARAMETER_CONSTANT_RESOURCE_KEY, \ + PARAMETER_CONSTANT_TIMESTAMP_KEY +from pm4py.util.xes_constants import DEFAULT_NAME_KEY, DEFAULT_RESOURCE_KEY, DEFAULT_TIMESTAMP_KEY + +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog +import itertools + + +class Parameters(Enum): + ATTRIBUTE_KEY = PARAMETER_CONSTANT_ATTRIBUTE_KEY + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + RESOURCE_KEY = PARAMETER_CONSTANT_RESOURCE_KEY + POSITIVE = "positive" + ENABLE_TIMESTAMP = "enable_timestamp" + TIMESTAMP_DIFF_BOUNDARIES = "timestamp_diff_boundaries" + + +POSITIVE = Parameters.POSITIVE +ENABLE_TIMESTAMP = Parameters.ENABLE_TIMESTAMP +TIMESTAMP_DIFF_BOUNDARIES = Parameters.TIMESTAMP_DIFF_BOUNDARIES + + +def timestamp_list_is_ge(a, b): + for i in range(len(a)): + if a[i] < b[i][0]: + return False + return True + + +def timestamp_list_is_le(a, b): + for i in range(len(a)): + if a[i] > b[i][1]: + return False + return True + + +def eventually_follows(log: EventLog, attribute_values: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Applies the eventually follows rule + + Parameters + ------------ + log + Log + attribute_values + A list of attribute_values attribute_values[n] follows attribute_values[n-1] follows ... follows attribute_values[0] + + parameters + Parameters of the algorithm, including the attribute key and the positive parameter: + - If True, returns all the cases containing all attribute_values and in which attribute_values[i] was eventually followed by attribute_values[i + 1] + - If False, returns all the cases not containing all attribute_values, or in which an instance of attribute_values[i] was not eventually + followed by an instance of attribute_values[i + 1] + + Returns + ------------ + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + enable_timestamp = exec_utils.get_param_value(Parameters.ENABLE_TIMESTAMP, parameters, False) + timestamp_diff_boundaries = exec_utils.get_param_value(Parameters.TIMESTAMP_DIFF_BOUNDARIES, parameters, []) + + new_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + for trace in log: + occurrences = [[i for i in range(len(trace)) + if attribute_key in trace[i] and trace[i][attribute_key] == attribute_value] for attribute_value in attribute_values] + + is_good = False + + for c in itertools.product(*occurrences): + ok = True + for i in range(len(c)-1): + if c[i] >= c[i+1]: + ok = False + break + if ok: + if enable_timestamp and timestamp_diff_boundaries: + for i in range(len(c)-1): + timest_i = trace[i][timestamp_key].timestamp() + timest_j = trace[i+1][timestamp_key].timestamp() + if timest_j - timest_i < timestamp_diff_boundaries[i][0] or timest_j - timest_i > timestamp_diff_boundaries[i][1]: + ok = False + break + + if ok: + is_good = True + break + + if is_good: + if positive: + new_log.append(trace) + elif not positive: + new_log.append(trace) + + return new_log + + +def A_next_B_next_C(log: EventLog, A: str, B: str, C: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Applies the A next B next C rule + + Parameters + ------------ + log + Log + A + A attribute value + B + B attribute value + C + C attribute value + parameters + Parameters of the algorithm, including the attribute key and the positive parameter: + - If True, returns all the cases containing A, B and C and in which A was directly followed by B and B was directly followed by C + - If False, returns all the cases not containing A or B or C, or in which none instance of A was directly + followed by an instance of B and B was directly followed by C + + Returns + ------------ + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + new_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + for trace in log: + occ_A = [i for i in range(len(trace)) if attribute_key in trace[i] and trace[i][attribute_key] == A] + occ_B = [i for i in range(len(trace)) if attribute_key in trace[i] and trace[i][attribute_key] == B] + occ_C = [i for i in range(len(trace)) if attribute_key in trace[i] and trace[i][attribute_key] == C] + + found = False + + for a in occ_A: + for b in occ_B: + for c in occ_C: + if (b - a) == 1 and (c - b) == 1: + found = True + + if found: + if positive: + new_log.append(trace) + elif not positive: + new_log.append(trace) + + return new_log + + +def four_eyes_principle(log: EventLog, A: str, B: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Verifies the Four Eyes Principle given A and B + + Parameters + ------------- + log + Log + A + A attribute value + B + B attribute value + parameters + Parameters of the algorithm, including the attribute key and the positive parameter: + - if True, then filters all the cases containing A and B which have empty intersection between the set + of resources doing A and B + - if False, then filters all the cases containing A and B which have no empty intersection between the set + of resources doing A and B + + Returns + -------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, DEFAULT_RESOURCE_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + new_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + for trace in log: + occ_A = set([trace[i][resource_key] for i in range(len(trace)) if + attribute_key in trace[i] and resource_key in trace[i] and trace[i][attribute_key] == A]) + occ_B = set([trace[i][resource_key] for i in range(len(trace)) if + attribute_key in trace[i] and resource_key in trace[i] and trace[i][attribute_key] == B]) + + if len(occ_A) > 0 and len(occ_B) > 0: + inte = occ_A.intersection(occ_B) + + if not positive and len(inte) > 0: + new_log.append(trace) + elif positive and len(inte) == 0: + new_log.append(trace) + + return new_log + + +def attr_value_different_persons(log: EventLog, A: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Checks whether an attribute value is assumed on events done by different resources + + Parameters + ------------ + log + Log + A + A attribute value + parameters + Parameters of the algorithm, including the attribute key and the positive parameter: + - if True, then filters all the cases containing occurrences of A done by different resources + - if False, then filters all the cases not containing occurrences of A done by different resources + + Returns + ------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, DEFAULT_RESOURCE_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + new_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + for trace in log: + occ_A = set([trace[i][resource_key] for i in range(len(trace)) if + attribute_key in trace[i] and resource_key in trace[i] and trace[i][attribute_key] == A]) + if len(occ_A) > 1: + if positive: + new_log.append(trace) + elif not positive: + new_log.append(trace) + + return new_log diff --git a/pm4py/pm4py/algo/filtering/log/paths/__init__.py b/pm4py/pm4py/algo/filtering/log/paths/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..caad0be06eabf84bd9151e5c24cec6b6adc87d8f --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/paths/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.paths import paths_filter diff --git a/pm4py/pm4py/algo/filtering/log/paths/paths_filter.py b/pm4py/pm4py/algo/filtering/log/paths/paths_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..1999c40d24ca074fae11565d08c7fbb60b5101c8 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/paths/paths_filter.py @@ -0,0 +1,258 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.util import exec_utils +from pm4py.util import xes_constants as xes +from pm4py.util.constants import PARAMETER_CONSTANT_ATTRIBUTE_KEY, PARAMETER_CONSTANT_TIMESTAMP_KEY, DEFAULT_VARIANT_SEP +import sys + +from typing import Optional, Dict, Any, Union, Tuple, List +from pm4py.objects.log.obj import EventLog, Trace +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ATTRIBUTE_KEY = PARAMETER_CONSTANT_ATTRIBUTE_KEY + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + MIN_PERFORMANCE = "min_performance" + MAX_PERFORMANCE = "max_performance" + + +def apply(log: EventLog, paths: List[Tuple[str, str]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Apply a filter on traces containing / not containing a path + + Parameters + ----------- + log + Log + paths + Paths that we are looking for (expressed as tuple of 2 strings) + parameters + Parameters of the algorithm, including: + Parameters.ATTRIBUTE_KEY -> Attribute identifying the activity in the log + Parameters.POSITIVE -> Indicate if events should be kept/removed + + Returns + ----------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, xes.DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + filtered_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + for trace in log: + found = False + for i in range(len(trace) - 1): + path = (trace[i][attribute_key], trace[i + 1][attribute_key]) + if path in paths: + found = True + break + if (found and positive) or (not found and not positive): + filtered_log.append(trace) + return filtered_log + + +def apply_performance(log: EventLog, provided_path: Tuple[str, str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filters the cases of an event log where there is at least one occurrence of the provided path + occurring in the defined timedelta range. + + Parameters + ---------------- + log + Event log + provided_path + Path between two activities (expressed as tuple) + parameters + Parameters of the filter, including: + Parameters.ATTRIBUTE_KEY -> Attribute identifying the activity in the log + Parameters.TIMESTAMP_KEY -> Attribute identifying the timestamp in the log + Parameters.POSITIVE -> Indicate if events should be kept/removed + Parameters.MIN_PERFORMANCE -> Minimal allowed performance of the provided path + Parameters.MAX_PERFORMANCE -> Maximal allowed performance of the provided path + + Returns + ---------------- + filtered_log + Filtered event log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, xes.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + min_performance = exec_utils.get_param_value(Parameters.MIN_PERFORMANCE, parameters, 0) + max_performance = exec_utils.get_param_value(Parameters.MAX_PERFORMANCE, parameters, sys.maxsize) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + filtered_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + for trace in log: + found = False + for i in range(len(trace) - 1): + path = (trace[i][attribute_key], trace[i + 1][attribute_key]) + if path == provided_path: + timediff = trace[i + 1][timestamp_key].timestamp() - trace[i][timestamp_key].timestamp() + if min_performance <= timediff <= max_performance: + found = True + break + if (found and positive) or (not found and not positive): + filtered_log.append(trace) + return filtered_log + + +def get_paths_from_log(log, attribute_key="concept:name"): + """ + Get the paths of the log along with their count + + Parameters + ---------- + log + Log + attribute_key + Attribute key (must be specified if different from concept:name) + + Returns + ---------- + paths + Dictionary of paths associated with their count + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + paths = {} + for trace in log: + for i in range(0, len(trace) - 1): + if attribute_key in trace[i] and attribute_key in trace[i + 1]: + path = trace[i][attribute_key] + DEFAULT_VARIANT_SEP + trace[i + 1][attribute_key] + if path not in paths: + paths[path] = 0 + paths[path] = paths[path] + 1 + return paths + + +def get_sorted_paths_list(paths): + """ + Gets sorted paths list + + Parameters + ---------- + paths + Dictionary of paths associated with their count + + Returns + ---------- + listpaths + Sorted paths list + """ + listpaths = [] + for p in paths: + listpaths.append([p, paths[p]]) + listpaths = sorted(listpaths, key=lambda x: x[1], reverse=True) + return listpaths + + +def get_paths_threshold(plist, decreasing_factor): + """ + Get end attributes cutting threshold + + Parameters + ---------- + plist + List of paths ordered by number of occurrences + decreasing_factor + Decreasing factor of the algorithm + + Returns + --------- + threshold + Paths cutting threshold + """ + + threshold = plist[0][1] + for i in range(1, len(plist)): + value = plist[i][1] + if value > threshold * decreasing_factor: + threshold = value + return threshold + + +def filter_log_by_paths(log, paths, variants, vc, threshold, attribute_key="concept:name"): + """ + Keep only paths which number of occurrences is above the threshold (or they belong to the first variant) + + Parameters + ---------- + log + Log + paths + Dictionary of paths associated with their count + variants + (If specified) Dictionary with variant as the key and the list of traces as the value + vc + List of variant names along with their count + threshold + Cutting threshold (remove paths which number of occurrences is below the threshold) + attribute_key + (If specified) Specify the attribute key to use (default concept:name) + + Returns + ---------- + filtered_log + Filtered log + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + filtered_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + fvft = variants[vc[0][0]][0] + fvp = set() + for i in range(0, len(fvft) - 1): + path = fvft[i][attribute_key] + DEFAULT_VARIANT_SEP + fvft[i + 1][attribute_key] + fvp.add(path) + for trace in log: + new_trace = Trace() + jj = 0 + if len(trace) > 0: + new_trace.append(trace[0]) + for j in range(1, len(trace) - 1): + jj = j + if j >= len(trace): + break + if attribute_key in trace[j] and attribute_key in trace[j + 1]: + path = trace[j][attribute_key] + DEFAULT_VARIANT_SEP + trace[j + 1][attribute_key] + if path in paths: + if path in fvp or paths[path] >= threshold: + new_trace.append(trace[j]) + new_trace.append(trace[j + 1]) + if len(trace) > 1 and not jj == len(trace): + new_trace.append(trace[-1]) + if len(new_trace) > 0: + for attr in trace.attributes: + new_trace.attributes[attr] = trace.attributes[attr] + filtered_log.append(new_trace) + return filtered_log diff --git a/pm4py/pm4py/algo/filtering/log/prefixes/__init__.py b/pm4py/pm4py/algo/filtering/log/prefixes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..85ba70fb6a4573c4f9f3e783af0e980f3cda4114 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/prefixes/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.filtering.log.prefixes import prefix_filter diff --git a/pm4py/pm4py/algo/filtering/log/prefixes/prefix_filter.py b/pm4py/pm4py/algo/filtering/log/prefixes/prefix_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..ac3f44f99779c6469da5dc79c914ce1f6b7fcdbd --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/prefixes/prefix_filter.py @@ -0,0 +1,79 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.util import exec_utils, xes_constants, constants +from pm4py.objects.log.obj import EventLog, EventStream, Trace +from typing import Dict, Optional, Any, Union +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + STRICT = "strict" + FIRST_OR_LAST = "first_or_last" + + +def apply(log: Union[EventLog, EventStream], activity: str, parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + Filters the prefixes of an activity in the event log + + Parameters + ---------------- + log + Event log + activity + Target activity + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the activity. + - Parameters.STRICT => applies the filter strictly (cuts the occurrences of the selected activity). + - Parameters.FIRST_OR_LAST => decides if the first or last occurrence of an activity should be selected. + + Returns + ---------------- + filtered_log + Filtered event log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + first_or_last = exec_utils.get_param_value(Parameters.FIRST_OR_LAST, parameters, "first") + strict = exec_utils.get_param_value(Parameters.STRICT, parameters, True) + + filtered_log = EventLog(attributes=log.attributes, extensions=log.extensions, globals=log.omni_present, + classifiers=log.classifiers, properties=log.properties) + + for trace in log: + activities = [x[activity_key] if activity_key in x else None for x in trace] + if activity in activities: + if first_or_last == "first": + op = min + else: + op = max + idx_activity = op(i for i in range(len(activities)) if activities[i] == activity) + if not strict: + idx_activity = idx_activity + 1 + filtered_trace = Trace(attributes=trace.attributes, properties=trace.properties) + for i in range(0, idx_activity): + filtered_trace.append(trace[i]) + filtered_log.append(filtered_trace) + + return filtered_log diff --git a/pm4py/pm4py/algo/filtering/log/rework/__init__.py b/pm4py/pm4py/algo/filtering/log/rework/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6ece5258de4ca2bf47768483af10f41443795e4d --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/rework/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.rework import rework_filter diff --git a/pm4py/pm4py/algo/filtering/log/rework/rework_filter.py b/pm4py/pm4py/algo/filtering/log/rework/rework_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..5f448022d8d7efca5bb3285cda84d44403002481 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/rework/rework_filter.py @@ -0,0 +1,77 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import constants, xes_constants, exec_utils +from pm4py.objects.log.obj import EventLog +from collections import Counter +from typing import Optional, Dict, Any +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + MIN_OCCURRENCES = "min_occurrences" + POSITIVE = "positive" + + +def apply(log: EventLog, activity: str, parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + Applies the rework filter on the provided event log and activity. + This filter the cases of the log having at least Parameters.MIN_OCCURRENCES (default: 2) occurrences + of the given activity. + + It is also possible (setting Parameters.POSITIVE to False) to retrieve the cases of the log not having the + given activity or having the activity occurred less than Parameters.MIN_OCCURRENCES times. + + Parameters + ------------------- + log + Event log + activity + Activity of which the rework shall be filtered + parameters + Parameters of the filter, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.MIN_OCCURRENCES => the minimum number of occurrences for the activity + - Parameters.POSITIVE => if True, filters the cases of the log having at least MIN_OCCURRENCES occurrences. + if False, filters the cases of the log where such behavior does not occur. + + Returns + ----------------- + filtered_log + Filtered event log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + min_occurrences = exec_utils.get_param_value(Parameters.MIN_OCCURRENCES, parameters, 2) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + filtered_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + for trace in log: + act_counter = Counter([x[activity_key] for x in trace]) + if positive and activity in act_counter and act_counter[activity] >= min_occurrences: + filtered_log.append(trace) + elif not positive and (activity not in act_counter or act_counter[activity] < min_occurrences): + filtered_log.append(trace) + + return filtered_log diff --git a/pm4py/pm4py/algo/filtering/log/start_activities/__init__.py b/pm4py/pm4py/algo/filtering/log/start_activities/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..71839e515a46969d446ec3c10207760ecb096412 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/start_activities/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.start_activities import start_activities_filter diff --git a/pm4py/pm4py/algo/filtering/log/start_activities/start_activities_filter.py b/pm4py/pm4py/algo/filtering/log/start_activities/start_activities_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..d1f5b158a2625e7da662e1d8f19e20eb9e760725 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/start_activities/start_activities_filter.py @@ -0,0 +1,103 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.util import exec_utils +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util.xes_constants import DEFAULT_NAME_KEY + +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + + +def apply(log: EventLog, admitted_start_activities: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filter the log on the specified start activities + + Parameters + ----------- + log + log + admitted_start_activities + Admitted start activities + parameters + Algorithm parameters + + Returns + ----------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attribute_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + if positive: + filtered_log = EventLog( + [trace for trace in log if trace and trace[0][attribute_key] in admitted_start_activities], + attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + else: + filtered_log = EventLog( + [trace for trace in log if trace and trace[0][attribute_key] not in admitted_start_activities], + attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + return filtered_log + + +def filter_log_by_start_activities(start_activities, variants, vc, threshold, activity_key="concept:name"): + """ + Keep only variants of the log with a start activity which number of occurrences is above the threshold + + Parameters + ---------- + start_activities + Dictionary of start attributes associated with their count + variants + (If specified) Dictionary with variant as the key and the list of traces as the value + vc + List of variant names along with their count + threshold + Cutting threshold (remove variants having start attributes which number of occurrences is below the threshold + activity_key + (If specified) Specify the activity key in the log (default concept:name) + + Returns + ---------- + filtered_log + Filtered log + """ + filtered_log = EventLog() + fvsa = variants[vc[0][0]][0][0][activity_key] + for variant in variants: + vsa = variants[variant][0][0][activity_key] + if vsa in start_activities: + if vsa == fvsa or start_activities[vsa] >= threshold: + for trace in variants[variant]: + filtered_log.append(trace) + return filtered_log diff --git a/pm4py/pm4py/algo/filtering/log/suffixes/__init__.py b/pm4py/pm4py/algo/filtering/log/suffixes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..14f8b3fd491fc6b8a9ee709f0de503a426eb2b62 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/suffixes/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.filtering.log.suffixes import suffix_filter diff --git a/pm4py/pm4py/algo/filtering/log/suffixes/suffix_filter.py b/pm4py/pm4py/algo/filtering/log/suffixes/suffix_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..eaa1b1a3e871b96ef46521aabc68062247d324df --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/suffixes/suffix_filter.py @@ -0,0 +1,79 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.util import exec_utils, xes_constants, constants +from pm4py.objects.log.obj import EventLog, EventStream, Trace +from typing import Dict, Optional, Any, Union +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + STRICT = "strict" + FIRST_OR_LAST = "first_or_last" + + +def apply(log: Union[EventLog, EventStream], activity: str, parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + Filters the suffixes of an activity in the event log + + Parameters + ---------------- + log + Event log + activity + Target activity + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the activity. + - Parameters.STRICT => applies the filter strictly (cuts the occurrences of the selected activity). + - Parameters.FIRST_OR_LAST => decides if the first or last occurrence of an activity should be selected. + + Returns + ---------------- + filtered_log + Filtered event log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + first_or_last = exec_utils.get_param_value(Parameters.FIRST_OR_LAST, parameters, "first") + strict = exec_utils.get_param_value(Parameters.STRICT, parameters, True) + + filtered_log = EventLog(attributes=log.attributes, extensions=log.extensions, globals=log.omni_present, + classifiers=log.classifiers, properties=log.properties) + + for trace in log: + activities = [x[activity_key] if activity_key in x else None for x in trace] + if activity in activities: + if first_or_last == "first": + op = min + else: + op = max + idx_activity = op(i for i in range(len(activities)) if activities[i] == activity) + if strict: + idx_activity = idx_activity + 1 + filtered_trace = Trace(attributes=trace.attributes, properties=trace.properties) + for i in range(idx_activity, len(trace)): + filtered_trace.append(trace[i]) + filtered_log.append(filtered_trace) + + return filtered_log diff --git a/pm4py/pm4py/algo/filtering/log/timestamp/__init__.py b/pm4py/pm4py/algo/filtering/log/timestamp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..177db335f77c32eb9734d343c0f57fd1e881287a --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/timestamp/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.timestamp import timestamp_filter diff --git a/pm4py/pm4py/algo/filtering/log/timestamp/timestamp_filter.py b/pm4py/pm4py/algo/filtering/log/timestamp/timestamp_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..9200872c02843063214869075608033d0ae3fcd9 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/timestamp/timestamp_filter.py @@ -0,0 +1,321 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import datetime +from enum import Enum + +from pm4py.algo.filtering.common.timestamp.timestamp_common import get_dt_from_string +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import Trace +from pm4py.util import exec_utils +from pm4py.util.constants import PARAMETER_CONSTANT_TIMESTAMP_KEY +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.util.dt_parsing.variants import strpfromiso + + +class Parameters(Enum): + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + + +def trace_attr_is_contained(trace: Trace, dt1: Union[str, datetime.datetime], dt2: Union[str, datetime.datetime], + trace_attr: str) -> bool: + """ + Checks if the given attribute at the trace level is contained in the provided range + + Parameters + ---------------- + trace + Trace object + dt1 + Left extreme of the time interval + dt2 + Right extreme of the time interval + trace_attr + Attribute at the trace level that is considered for the filtering + + Returns + ---------------- + boolean + Boolean value + """ + if trace_attr in trace.attributes: + if dt1 <= strpfromiso.fix_naivety(trace.attributes[trace_attr]) <= dt2: + return True + return False + + +def filter_on_trace_attribute(log: EventLog, dt1: Union[str, datetime.datetime], dt2: Union[str, datetime.datetime], + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filters the traces of the event log that have a given trace attribute + falling in the provided range + + Parameters + ----------------- + log + Event log + dt1 + Left extreme of the time interval + dt2 + Right extreme of the time interval + parameters + Parameters of the filtering, including: + - Parameters.TIMESTAMP_KEY => trace attribute to use for the filtering + + Returns + ------------------ + filtered_log + Filtered event log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + trace_attribute = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + dt1 = get_dt_from_string(dt1) + dt2 = get_dt_from_string(dt2) + filtered_log = EventLog([trace for trace in log if trace_attr_is_contained(trace, dt1, dt2, trace_attribute)], + attributes=log.attributes, extensions=log.extensions, omni_present=log.omni_present, + classifiers=log.classifiers, properties=log.properties) + return filtered_log + + +def is_contained(trace, dt1, dt2, timestamp_key): + """ + Check if a trace is contained in the given interval + + Parameters + ----------- + trace + Trace to check + dt1 + Lower bound to the interval + dt2 + Upper bound to the interval + timestamp_key + Timestamp attribute + + Returns + ----------- + boolean + Is true if the trace is contained + """ + if trace: + if strpfromiso.fix_naivety(trace[0][timestamp_key]) >= dt1 and strpfromiso.fix_naivety(trace[-1][timestamp_key]) <= dt2: + return True + return False + + +def filter_traces_contained(log: EventLog, dt1: Union[str, datetime.datetime], dt2: Union[str, datetime.datetime], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Get traces that are contained in the given interval + + Parameters + ----------- + log + Trace log + dt1 + Lower bound to the interval + dt2 + Upper bound to the interval + parameters + Possible parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> Attribute to use as timestamp + + Returns + ------------ + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + dt1 = get_dt_from_string(dt1) + dt2 = get_dt_from_string(dt2) + filtered_log = EventLog([trace for trace in log if is_contained(trace, dt1, dt2, timestamp_key)], + attributes=log.attributes, extensions=log.extensions, omni_present=log.omni_present, + classifiers=log.classifiers, properties=log.properties) + return filtered_log + + +def is_intersecting(trace, dt1, dt2, timestamp_key): + """ + Check if a trace is intersecting in the given interval + + Parameters + ----------- + trace + Trace to check + dt1 + Lower bound to the interval + dt2 + Upper bound to the interval + timestamp_key + Timestamp attribute + + Returns + ----------- + boolean + Is true if the trace is contained + """ + if trace: + condition1 = dt1 <= strpfromiso.fix_naivety(trace[0][timestamp_key]) <= dt2 + condition2 = dt1 <= strpfromiso.fix_naivety(trace[-1][timestamp_key]) <= dt2 + condition3 = strpfromiso.fix_naivety(trace[0][timestamp_key]) <= dt1 <= strpfromiso.fix_naivety(trace[-1][timestamp_key]) + condition4 = strpfromiso.fix_naivety(trace[0][timestamp_key]) <= dt2 <= strpfromiso.fix_naivety(trace[-1][timestamp_key]) + + if condition1 or condition2 or condition3 or condition4: + return True + return False + + +def filter_traces_intersecting(log: EventLog, dt1: Union[str, datetime.datetime], dt2: Union[str, datetime.datetime], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filter traces intersecting the given interval + + Parameters + ----------- + log + Trace log + dt1 + Lower bound to the interval + dt2 + Upper bound to the interval + parameters + Possible parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> Attribute to use as timestamp + + Returns + ------------ + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + timestamp_key = parameters[ + PARAMETER_CONSTANT_TIMESTAMP_KEY] if PARAMETER_CONSTANT_TIMESTAMP_KEY in parameters else DEFAULT_TIMESTAMP_KEY + dt1 = get_dt_from_string(dt1) + dt2 = get_dt_from_string(dt2) + filtered_log = EventLog([trace for trace in log if is_intersecting(trace, dt1, dt2, timestamp_key)], + attributes=log.attributes, extensions=log.extensions, omni_present=log.omni_present, + classifiers=log.classifiers, properties=log.properties) + return filtered_log + + +def apply_events(log: EventLog, dt1: Union[str, datetime.datetime], dt2: Union[str, datetime.datetime], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Get a new log containing all the events contained in the given interval + + Parameters + ----------- + log + Log + dt1 + Lower bound to the interval + dt2 + Upper bound to the interval + parameters + Possible parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> Attribute to use as timestamp + + Returns + ------------ + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + dt1 = get_dt_from_string(dt1) + dt2 = get_dt_from_string(dt2) + + stream = log_converter.apply(log, variant=log_converter.TO_EVENT_STREAM, parameters={"deepcopy": False}) + filtered_stream = EventStream([x for x in stream if dt1 <= strpfromiso.fix_naivety(x[timestamp_key]) <= dt2], + attributes=log.attributes, extensions=log.extensions, omni_present=log.omni_present, + classifiers=log.classifiers, properties=log.properties) + filtered_log = log_converter.apply(filtered_stream, variant=log_converter.Variants.TO_EVENT_LOG) + + return filtered_log + + +def has_attribute_in_timeframe(trace, attribute, attribute_value, dt1, dt2, timestamp_key): + for e in trace: + if attribute in e and e[attribute] == attribute_value and dt1 <= strpfromiso.fix_naivety(e[timestamp_key]) <= dt2: + return True + return False + + +def filter_traces_attribute_in_timeframe(log: EventLog, attribute: str, attribute_value: Any, dt1: Union[str, datetime.datetime], dt2: Union[str, datetime.datetime], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Get a new log containing all the traces that have an event in the given interval with the specified attribute value + + Parameters + ----------- + log + Log + attribute + The attribute to filter on + attribute_value + The attribute value to filter on + dt1 + Lower bound to the interval + dt2 + Upper bound to the interval + parameters + Possible parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> Attribute to use as timestamp + + Returns + ------------ + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + dt1 = get_dt_from_string(dt1) + dt2 = get_dt_from_string(dt2) + + filtered_log = EventLog([trace for trace in log if + has_attribute_in_timeframe(trace, attribute, attribute_value, dt1, dt2, timestamp_key)], + attributes=log.attributes, extensions=log.extensions, omni_present=log.omni_present, + classifiers=log.classifiers) + return filtered_log + + +def apply(df, parameters=None): + del df + del parameters + raise Exception("apply method not available for timestamp filter") + + +def apply_auto_filter(df, parameters=None): + del df + del parameters + raise Exception("apply_auto_filter method not available for timestamp filter") diff --git a/pm4py/pm4py/algo/filtering/log/traces/__init__.py b/pm4py/pm4py/algo/filtering/log/traces/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/traces/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/filtering/log/traces/trace_filter.py b/pm4py/pm4py/algo/filtering/log/traces/trace_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..982a2fae15fcb7b47d302fe5afa6818f1e74c201 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/traces/trace_filter.py @@ -0,0 +1,76 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import re +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.algo.filtering.common.traces.infix_to_regex import translate_infix_to_regex +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + POSITIVE = "positive" + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], admitted_traces: List[List[str]], parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + Filters an event log on a set of traces. A trace is a sequence of activities and "...", in which: + - a "..." before an activity tells that other activities can precede the given activity + - a "..." after an activity tells that other activities can follow the given activity + + For example: + - apply(log, [["A", "B"]]) <- filters only the cases of the event log having exactly the process variant A,B + - apply(log, [["...", "A", "B"]]) <- filters only the cases of the event log ending with the activities A,B + - apply(log, [["A", "B", "..."]]) <- filters only the cases of the event log starting with the activities A,B + - apply(log, [["...", "A", "B", "C", "..."], ["...", "D", "E", "F", "..."]] + <- filters only the cases of the event log in which at any point + there is A followed by B followed by C, and in which at any other point there is + D followed by E followed by F + + Parameters + ----------------- + log + Event log + admitted_traces + Collection of traces admitted from the filter (with the aforementioned criteria) + parameters + Parameters of the method, including: + - Parameters.ACTIVITY_KEY => the attribute that should be used as activity + - Parameters.POSITIVE => indicates if the filter should keep/discard the cases satisfying the filter + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + filter_regex = "|".join([f"({translate_infix_to_regex(inf)})" for inf in admitted_traces]) + filtered_log = EventLog(attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + + for case in log: + t = constants.DEFAULT_VARIANT_SEP.join([x[activity_key] for x in case]) + found = bool(re.search(filter_regex, t)) + if (positive and found) or (not positive and not found): + filtered_log.append(case) + + return filtered_log diff --git a/pm4py/pm4py/algo/filtering/log/variants/__init__.py b/pm4py/pm4py/algo/filtering/log/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d617322cb3bc17e6a676586c92cef6c3c206dede --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.log.variants import variants_filter diff --git a/pm4py/pm4py/algo/filtering/log/variants/variants_filter.py b/pm4py/pm4py/algo/filtering/log/variants/variants_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..e0cf90be9f237cd60bd84e608baafc508d1217a5 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/log/variants/variants_filter.py @@ -0,0 +1,271 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.statistics.variants.log.get import get_variants, \ + get_variants_sorted_by_count +from pm4py.util import exec_utils +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY + +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + + +def apply(log: EventLog, admitted_variants: List[List[str]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Filter log keeping/removing only provided variants + + Parameters + ----------- + log + Log object + admitted_variants + Admitted variants + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Attribute identifying the activity in the log + Parameters.POSITIVE -> Indicate if events should be kept/removed + """ + + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + variants = get_variants(log, parameters=parameters) + log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + for variant in variants: + if (positive and variant in admitted_variants) or (not positive and variant not in admitted_variants): + for trace in variants[variant]: + log.append(trace) + return log + + +def filter_variants_top_k(log, k, parameters=None): + """ + Keeps the top-k variants of the log + + Parameters + ------------- + log + Event log + k + Number of variants that should be kept + parameters + Parameters + + Returns + ------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + variants = get_variants(log, parameters=parameters) + variant_count = get_variants_sorted_by_count(variants) + variant_count = variant_count[:min(k, len(variant_count))] + variants_to_filter = [x[0] for x in variant_count] + + return apply(log, variants_to_filter, parameters=parameters) + + +def filter_variants_by_coverage_percentage(log, min_coverage_percentage, parameters=None): + """ + Filters the variants of the log by a coverage percentage + (e.g., if min_coverage_percentage=0.4, and we have a log with 1000 cases, + of which 500 of the variant 1, 400 of the variant 2, and 100 of the variant 3, + the filter keeps only the traces of variant 1 and variant 2). + + Parameters + --------------- + log + Event log + min_coverage_percentage + Minimum allowed percentage of coverage + parameters + Parameters + + Returns + --------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + variants = get_variants(log, parameters=parameters) + variants = {x: len(y) for x, y in variants.items()} + allowed_variants = [x for x, y in variants.items() if y >= min_coverage_percentage * len(log)] + + return apply(log, allowed_variants, parameters=parameters) + + +def filter_variants_by_maximum_coverage_percentage(log, max_coverage_percentage, parameters=None): + """ + Filters the variants of the log by a maximum coverage percentage + (e.g., if max_coverage_percentage=0.4, and we have a log with 1000 cases, + of which 500 of the variant 1, 400 of the variant 2, and 100 of the variant 3, + the filter keeps only the traces of variant 2 and variant 3). + + Parameters + --------------- + log + Event log + max_coverage_percentage + Maximum allowed percentage of coverage + parameters + Parameters + + Returns + --------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + variants = get_variants(log, parameters=parameters) + variants = {x: len(y) for x, y in variants.items()} + allowed_variants = [x for x, y in variants.items() if y <= max_coverage_percentage * len(log)] + + return apply(log, allowed_variants, parameters=parameters) + + +def filter_log_variants_percentage(log, percentage=0.8, parameters=None): + """ + Filters a log by variants percentage + + Parameters + ------------- + log + Event log + percentage + Percentage + parameters + Parameters of the algorithm + + Returns + ------------- + filtered_log + Filtered log (by variants percentage) + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + variants = get_variants(log, parameters=parameters) + + return filter_variants_variants_percentage(log, variants, variants_percentage=percentage) + + +def filter_variants_variants_percentage(log, variants, variants_percentage=0.0): + """ + Filter the log by variants percentage + + Parameters + ---------- + log + Log + variants + Dictionary with variant as the key and the list of traces as the value + variants_percentage + Percentage of variants that should be kept (the most common variant is always kept) + + Returns + ---------- + filtered_log + Filtered log + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + filtered_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + no_of_traces = len(log) + variant_count = get_variants_sorted_by_count(variants) + already_added_sum = 0 + shall_break_under = -1 + + for i in range(len(variant_count)): + variant = variant_count[i][0] + varcount = variant_count[i][1] + if varcount < shall_break_under: + break + for trace in variants[variant]: + filtered_log.append(trace) + already_added_sum = already_added_sum + varcount + percentage_already_added = already_added_sum / no_of_traces + if percentage_already_added >= variants_percentage: + shall_break_under = varcount + + return filtered_log + + +def find_auto_threshold(log, variants, decreasing_factor): + """ + Find automatically variants filtering threshold + based on specified decreasing factor + + Parameters + ---------- + log + Log + variants + Dictionary with variant as the key and the list of traces as the value + decreasing_factor + Decreasing factor (stops the algorithm when the next variant by occurrence is below this factor + in comparison to previous) + + Returns + ---------- + variantsPercentage + Percentage of variants to keep in the log + """ + no_of_traces = len(log) + variant_count = get_variants_sorted_by_count(variants) + already_added_sum = 0 + + prev_var_count = -1 + percentage_already_added = 0 + for i in range(len(variant_count)): + varcount = variant_count[i][1] + percentage_already_added = already_added_sum / no_of_traces + if already_added_sum == 0 or varcount > decreasing_factor * prev_var_count: + already_added_sum = already_added_sum + varcount + else: + break + prev_var_count = varcount + + percentage_already_added = already_added_sum / no_of_traces + + return percentage_already_added diff --git a/pm4py/pm4py/algo/filtering/ocel/__init__.py b/pm4py/pm4py/algo/filtering/ocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..582b144996940ad85302cdfd8d044d9dd09ef43b --- /dev/null +++ b/pm4py/pm4py/algo/filtering/ocel/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.ocel import event_attributes, object_attributes, activity_type_matching, objects_ot_count, ot_endpoints diff --git a/pm4py/pm4py/algo/filtering/ocel/activity_type_matching.py b/pm4py/pm4py/algo/filtering/ocel/activity_type_matching.py new file mode 100644 index 0000000000000000000000000000000000000000..46d14ca22b08c11db7820d9c3a9bb71334ea9e89 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/ocel/activity_type_matching.py @@ -0,0 +1,82 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, constants +from pm4py.objects.ocel.util import filtering_utils +from copy import deepcopy +from typing import Dict, Any, Optional, Collection +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.ocel import constants as ocel_constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + TEMP_COLUMN = "temp_column" + TEMP_SEPARATOR = "temp_separator" + + +def apply(ocel: OCEL, correspondence_dict: Dict[str, Collection[str]], + parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Filters an object-centric event log keeping only the specified object types + with the specified activity set (filters out the rest). + + Parameters + ---------------- + ocel + Object-centric event log + correspondence_dict + Dictionary containing, for every object type of interest, a + collection of allowed activities. Example: + + {"order": ["Create Order"], "element": ["Create Order", "Create Delivery"]} + + Keeps only the object types "order" and "element". + For the "order" object type, only the activity "Create Order" is kept. + For the "element" object type, only the activities "Create Order" and "Create Delivery" are kept. + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the activity key + - Parameters.OBJECT_TYPE => the object type column + + Returns + ----------------- + filtered_ocel + Filtered object-centric event log + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, ocel.event_activity) + object_type_column = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + temp_column = exec_utils.get_param_value(Parameters.TEMP_COLUMN, parameters, "@@temp_column") + temp_separator = exec_utils.get_param_value(Parameters.TEMP_SEPARATOR, parameters, "@#@#") + + ocel = deepcopy(ocel) + + inv_dict = set() + for ot in correspondence_dict: + for act in correspondence_dict[ot]: + inv_dict.add(act + temp_separator + ot) + + ocel.relations[temp_column] = ocel.relations[activity_key] + temp_separator + ocel.relations[object_type_column] + ocel.relations = ocel.relations[ocel.relations[temp_column].isin(inv_dict)] + + del ocel.relations[temp_column] + + return filtering_utils.propagate_relations_filtering(ocel, parameters=parameters) diff --git a/pm4py/pm4py/algo/filtering/ocel/event_attributes.py b/pm4py/pm4py/algo/filtering/ocel/event_attributes.py new file mode 100644 index 0000000000000000000000000000000000000000..47f8e9cc2a6030316f9b36e80db9896991b8c746 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/ocel/event_attributes.py @@ -0,0 +1,100 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, constants +from pm4py.objects.ocel.util import filtering_utils +from copy import copy +from typing import Dict, Any, Optional, Collection, Union +from pm4py.algo.filtering.common.timestamp.timestamp_common import get_dt_from_string +from pm4py.objects.ocel.obj import OCEL +import datetime + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + POSITIVE = "positive" + + +def apply(ocel: OCEL, values: Collection[Any], parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Filters the object-centric event log on the provided event attributes values + + Parameters + ---------------- + ocel + Object-centric event log + values + Collection of values + parameters + Parameters of the algorithm, including: + - Parameters.ATTRIBUTE_KEY => the attribute that should be filtered + - Parameters.POSITIVE => decides if the values should be kept (positive=True) or removed (positive=False) + + Returns + ---------------- + ocel + Filtered object-centric event log + """ + if parameters is None: + parameters = {} + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, ocel.event_activity) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + ocel = copy(ocel) + if positive: + ocel.events = ocel.events[ocel.events[attribute_key].isin(values)] + else: + ocel.events = ocel.events[~ocel.events[attribute_key].isin(values)] + + return filtering_utils.propagate_event_filtering(ocel, parameters=parameters) + + +def apply_timestamp(ocel: OCEL, min_timest: Union[datetime.datetime, str], max_timest: Union[datetime.datetime, str], parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Filters the object-centric event log keeping events in the provided timestamp range + + Parameters + ----------------- + ocel + Object-centric event log + min_timest + Left extreme of the allowed timestamp interval (provided in the format: YYYY-mm-dd HH:MM:SS) + max_timest + Right extreme of the allowed timestamp interval (provided in the format: YYYY-mm-dd HH:MM:SS) + parameters + Parameters of the algorithm, including: + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + + Returns + ----------------- + filtered_ocel + Filtered object-centric event log + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, ocel.event_timestamp) + min_timest = get_dt_from_string(min_timest) + max_timest = get_dt_from_string(max_timest) + + ocel = copy(ocel) + ocel.events = ocel.events[ocel.events[timestamp_key] >= min_timest] + ocel.events = ocel.events[ocel.events[timestamp_key] <= max_timest] + + return filtering_utils.propagate_event_filtering(ocel, parameters=parameters) diff --git a/pm4py/pm4py/algo/filtering/ocel/object_attributes.py b/pm4py/pm4py/algo/filtering/ocel/object_attributes.py new file mode 100644 index 0000000000000000000000000000000000000000..6c5e058af60693f94bfc95d7140cd78c52869aaa --- /dev/null +++ b/pm4py/pm4py/algo/filtering/ocel/object_attributes.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, constants +from pm4py.objects.ocel.util import filtering_utils +from copy import copy +from typing import Dict, Any, Optional, Collection +from pm4py.objects.ocel.obj import OCEL + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + POSITIVE = "positive" + + +def apply(ocel: OCEL, values: Collection[Any], parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Filters the object-centric event log on the provided object attributes values + + Parameters + ---------------- + ocel + Object-centric event log + values + Collection of values + parameters + Parameters of the algorithm, including: + - Parameters.ATTRIBUTE_KEY => the attribute that should be filtered + - Parameters.POSITIVE => decides if the values should be kept (positive=True) or removed (positive=False) + + Returns + ---------------- + ocel + Filtered object-centric event log + """ + if parameters is None: + parameters = {} + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, ocel.object_type_column) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + ocel = copy(ocel) + if positive: + ocel.objects = ocel.objects[ocel.objects[attribute_key].isin(values)] + else: + ocel.objects = ocel.objects[~ocel.objects[attribute_key].isin(values)] + + return filtering_utils.propagate_object_filtering(ocel, parameters=parameters) diff --git a/pm4py/pm4py/algo/filtering/ocel/objects_ot_count.py b/pm4py/pm4py/algo/filtering/ocel/objects_ot_count.py new file mode 100644 index 0000000000000000000000000000000000000000..8ac2854400f1e379d4a9ec45519d43d268263134 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/ocel/objects_ot_count.py @@ -0,0 +1,91 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.ocel import constants as ocel_constants +from collections import Counter +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.statistics.ocel import objects_ot_count +from pm4py.objects.ocel.util import filtering_utils +from copy import copy + + +class Parameters(Enum): + EVENT_ID = ocel_constants.PARAM_EVENT_ID + OBJECT_ID = ocel_constants.PARAM_OBJECT_ID + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + + +def apply(ocel: OCEL, min_num_obj_type: Dict[str, int], parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Filters the events of the object-centric logs which are related to at least + the specified amount of objects per type. + + E.g. apply(ocel, {"order": 1, "element": 2}) + + Would keep the following events: + + ocel:eid ocel:timestamp ocel:activity ocel:type:element ocel:type:order + 0 e1 1980-01-01 Create Order [i4, i1, i3, i2] [o1] + 1 e11 1981-01-01 Create Order [i6, i5] [o2] + 2 e14 1981-01-04 Create Order [i8, i7] [o3] + + Parameters + ------------------ + ocel + Object-centric event log + min_num_obj_type + Minimum number of objects per type + parameters + Parameters of the filter, including: + - Parameters.EVENT_ID => the event identifier + - Parameters.OBJECT_ID => the object identifier + - Parameters.OBJECT_TYPE => the object type + + Returns + ----------------- + filtered_event_log + Filtered object-centric event log + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + num_obj = objects_ot_count.get_objects_ot_count(ocel, parameters=parameters) + + filt_evs = set() + + for evid, evobjs in num_obj.items(): + is_ok = True + for k, v in min_num_obj_type.items(): + if not k in evobjs: + is_ok = False + break + elif evobjs[k] < v: + is_ok = False + break + if is_ok: + filt_evs.add(evid) + + ocel = copy(ocel) + ocel.events = ocel.events[ocel.events[event_id].isin(filt_evs)] + + return filtering_utils.propagate_event_filtering(ocel, parameters=parameters) diff --git a/pm4py/pm4py/algo/filtering/ocel/ot_endpoints.py b/pm4py/pm4py/algo/filtering/ocel/ot_endpoints.py new file mode 100644 index 0000000000000000000000000000000000000000..f912a6ac2cadb551f6e1e361c2e4f99f6674b6ba --- /dev/null +++ b/pm4py/pm4py/algo/filtering/ocel/ot_endpoints.py @@ -0,0 +1,103 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.ocel import constants as ocel_constants +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from copy import copy +from pm4py.objects.ocel.util import filtering_utils + + +class Parameters(Enum): + EVENT_ID = ocel_constants.PARAM_EVENT_ID + OBJECT_ID = ocel_constants.PARAM_OBJECT_ID + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + + +def filter_start_events_per_object_type(ocel: OCEL, object_type: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Filters the events in which a new object for the given object type is spawn. + (E.g. an event with activity "Create Order" might spawn new orders). + + Parameters + ------------------ + ocel + Object-centric event log + object_type + Object type to consider + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the attribute working as event identifier + - Parameters.OBJECT_ID => the attribute working as object identifier + - Parameters.OBJECT_TYPE => the attribute working as object type + + Returns + ------------------ + filtered_ocel + Filtered object-centric event log + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type_column = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + evs = ocel.relations[ocel.relations[object_type_column] == object_type].groupby(object_id).first()[event_id].to_numpy().tolist() + + ocel = copy(ocel) + ocel.events = ocel.events[ocel.events[event_id].isin(evs)] + + return filtering_utils.propagate_event_filtering(ocel, parameters=parameters) + + +def filter_end_events_per_object_type(ocel: OCEL, object_type: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Filters the events in which an object for the given object type terminates its lifecycle. + (E.g. an event with activity "Pay Order" might terminate an order). + + Parameters + ------------------ + ocel + Object-centric event log + object_type + Object type to consider + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the attribute working as event identifier + - Parameters.OBJECT_ID => the attribute working as object identifier + - Parameters.OBJECT_TYPE => the attribute working as object type + + Returns + ------------------ + filtered_ocel + Filtered object-centric event log + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type_column = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + evs = ocel.relations[ocel.relations[object_type_column] == object_type].groupby(object_id).last()[event_id] + + ocel = copy(ocel) + ocel.events = ocel.events[ocel.events[event_id].isin(evs)] + + return filtering_utils.propagate_event_filtering(ocel, parameters=parameters) diff --git a/pm4py/pm4py/algo/filtering/pandas/__init__.py b/pm4py/pm4py/algo/filtering/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1ef710743189a90992de0fcfab8312b7a209569b --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas import start_activities, end_activities, attributes, cases, \ + pd_filtering_constants, variants, paths, timestamp, ltl diff --git a/pm4py/pm4py/algo/filtering/pandas/activity_split/__init__.py b/pm4py/pm4py/algo/filtering/pandas/activity_split/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c6a1259b8626a13fb4e5ad302abec7dee6816aa6 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/activity_split/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.activity_split import activity_split_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/activity_split/activity_split_filter.py b/pm4py/pm4py/algo/filtering/pandas/activity_split/activity_split_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..9cbd8df45e317b2724375f623460bb26f324180b --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/activity_split/activity_split_filter.py @@ -0,0 +1,125 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union, List + +import numpy as np +import pandas as pd + +from pm4py.util import exec_utils, constants, xes_constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + SUBCASE_CONCAT_STR = "subcase_concat_str" + CUT_MODE = "cut_mode" + + +def apply(df: pd.DataFrame, activity: Union[str, List[str]], + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Splits the cases of a log (Pandas dataframe) into subcases based on the provision of an activity. + There are as many subcases as many occurrences of a given activity occur. + + Example: + Original log: + + [['register request', 'examine casually', 'check ticket', 'decide', 'reinitiate request', 'examine thoroughly', + 'check ticket', 'decide', 'pay compensation'], + ['register request', 'examine casually', 'check ticket', 'decide', 'reinitiate request', 'check ticket', + 'examine casually', 'decide', 'reinitiate request', 'examine casually', 'check ticket', 'decide', 'reject request']] + + + Log filtered using the activity split filter on 'reinitiate request' with cut_mode='this': + + [['register request', 'examine casually', 'check ticket', 'decide'], + ['reinitiate request', 'examine thoroughly', 'check ticket', 'decide', 'pay compensation'], + ['register request', 'examine casually', 'check ticket', 'decide'], + ['reinitiate request', 'check ticket', 'examine casually', 'decide'], + ['reinitiate request', 'examine casually', 'check ticket', 'decide', 'reject request']] + + + Log filtered using the activity split filter on 'reinitiate request' with cut_mode='next': + + [['register request', 'examine casually', 'check ticket', 'decide', 'reinitiate request'], + ['examine thoroughly', 'check ticket', 'decide', 'pay compensation'], + ['register request', 'examine casually', 'check ticket', 'decide', 'reinitiate request'], + ['check ticket', 'examine casually', 'decide', 'reinitiate request'], + ['examine casually', 'check ticket', 'decide', 'reject request']] + + + Parameters + ---------------- + df + Dataframe + activity + Activity (or collection of activities) + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => activity key + - Parameters.CASE_ID_KEY => case id + - Parameters.SUBCASE_CONCAT_STR => concatenator between the case id and the subtrace index in the filtered df + - Parameters.CUT_MODE => mode of cut: + - "this" means that an event with the specified activity goes to the next subcase + - "next" means that the following event (to the given activity) goes to the next subcase. + + Returns + ---------------- + filtered_df + Dataframe in which the cases are split into subcases + + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + subcase_concat_str = exec_utils.get_param_value(Parameters.SUBCASE_CONCAT_STR, parameters, "##@@") + cut_mode = exec_utils.get_param_value(Parameters.CUT_MODE, parameters, "this") + + act_equal = lambda x: x == activity if type(activity) is str else x in activity + + df = df.copy() + cases = df[case_id_key].to_numpy() + activities = df[activity_key].to_numpy() + c_unq, c_ind, c_counts = np.unique(cases, return_index=True, return_counts=True) + res = [] + + i = 0 + while i < len(c_unq): + rel_count = 0 + this_case = str(c_unq[i]) + subcase_concat_str + str(rel_count) + + j = 0 + while j < c_counts[i]: + if act_equal(activities[c_ind[i] + j]): + rel_count += 1 + next_case = str(c_unq[i]) + subcase_concat_str + str(rel_count) + if cut_mode == "this": + res.append(next_case) + else: + res.append(this_case) + this_case = next_case + else: + res.append(this_case) + j = j + 1 + i = i + 1 + + df[case_id_key] = res + + return df diff --git a/pm4py/pm4py/algo/filtering/pandas/attr_value_repetition/__init__.py b/pm4py/pm4py/algo/filtering/pandas/attr_value_repetition/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..59f44d8f46f57f671ba5ff177aecca6a19010188 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/attr_value_repetition/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.attr_value_repetition import filter + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The attr_value_repetition filter package will be removed in a future release.") diff --git a/pm4py/pm4py/algo/filtering/pandas/attr_value_repetition/filter.py b/pm4py/pm4py/algo/filtering/pandas/attr_value_repetition/filter.py new file mode 100644 index 0000000000000000000000000000000000000000..ec758116895d8276b91691c9cb5f0c0530eff16c --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/attr_value_repetition/filter.py @@ -0,0 +1,72 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +from enum import Enum +from typing import Any, Optional, Dict, Union + +import pandas as pd + +from pm4py.util import constants, xes_constants, exec_utils +from copy import copy + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + MIN_REP = "min_rep" + MAX_REP = "max_rep" + + +def apply(df: pd.DataFrame, value: Any, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Filters the trace of the dataframe where the given attribute value is repeated + (in a range of repetitions that is specified by the user) + + Parameters + ---------------- + df + Dataframe + value + Value that is investigated + parameters + Parameters of the filter, including: + - Parameters.ATTRIBUTE_KEY => the attribute key + - Parameters.MIN_REP => minimum number of repetitions + - Parameters.MAX_REP => maximum number of repetitions + - Parameters.CASE_ID_KEY => the columns of the dataframe that is the case identifier + + Returns + ---------------- + filtered_df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + min_rep = exec_utils.get_param_value(Parameters.MIN_REP, parameters, 2) + max_rep = exec_utils.get_param_value(Parameters.MAX_REP, parameters, sys.maxsize) + + filtered_df = df[df[attribute_key] == value] + filtered_df = filtered_df.groupby(case_id_key).size().reset_index() + filtered_df = filtered_df[filtered_df[0] >= min_rep] + filtered_df = filtered_df[filtered_df[0] <= max_rep] + + ret = df[df[case_id_key].isin(filtered_df[case_id_key])] + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret diff --git a/pm4py/pm4py/algo/filtering/pandas/attributes/__init__.py b/pm4py/pm4py/algo/filtering/pandas/attributes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/attributes/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/filtering/pandas/attributes/attributes_filter.py b/pm4py/pm4py/algo/filtering/pandas/attributes/attributes_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..ad24dfe29ccf04adce0db3093c47de96b05a2a70 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/attributes/attributes_filter.py @@ -0,0 +1,352 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.attributes.pandas.get import get_attribute_values +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_ATTRIBUTE_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_CASEID_KEY +from enum import Enum +from pm4py.util import exec_utils +from copy import copy +from typing import Optional, Dict, Any, Union, List +import pandas as pd + + +class Parameters(Enum): + ATTRIBUTE_KEY = PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + STREAM_FILTER_KEY1 = "stream_filter_key1" + STREAM_FILTER_VALUE1 = "stream_filter_value1" + STREAM_FILTER_KEY2 = "stream_filter_key2" + STREAM_FILTER_VALUE2 = "stream_filter_value2" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def apply_numeric_events(df: pd.DataFrame, int1: float, int2: float, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Apply a filter on events (numerical filter) + + Parameters + -------------- + df + Dataframe + int1 + Lower bound of the interval + int2 + Upper bound of the interval + parameters + Possible parameters of the algorithm: + Parameters.ATTRIBUTE_KEY => indicates which attribute to filter + positive => keep or remove events? + + Returns + -------------- + filtered_df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + if positive: + ret = df[(df[attribute_key] >= int1) & (df[attribute_key] <= int2)] + else: + ret = df[(df[attribute_key] < int1) | (df[attribute_key] > int2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def apply_numeric(df: pd.DataFrame, int1: float, int2: float, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Filter dataframe on attribute values (filter cases) + + Parameters + -------------- + df + Dataframe + int1 + Lower bound of the interval + int2 + Upper bound of the interval + parameters + Possible parameters of the algorithm: + Parameters.ATTRIBUTE_KEY => indicates which attribute to filter + Parameters.POSITIVE => keep or remove traces with such events? + + Returns + -------------- + filtered_df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + # stream_filter_key is helpful to filter on cases containing an event with an attribute + # in the specified value set, but such events shall have an activity in particular. + stream_filter_key1 = exec_utils.get_param_value(Parameters.STREAM_FILTER_KEY1, parameters, None) + stream_filter_value1 = exec_utils.get_param_value(Parameters.STREAM_FILTER_VALUE1, parameters, None) + stream_filter_key2 = exec_utils.get_param_value(Parameters.STREAM_FILTER_KEY2, parameters, None) + stream_filter_value2 = exec_utils.get_param_value(Parameters.STREAM_FILTER_VALUE2, parameters, None) + + filtered_df_by_ev = df[(df[attribute_key] >= int1) & (df[attribute_key] <= int2)] + if stream_filter_key1 is not None: + filtered_df_by_ev = filtered_df_by_ev[filtered_df_by_ev[stream_filter_key1] == stream_filter_value1] + if stream_filter_key2 is not None: + filtered_df_by_ev = filtered_df_by_ev[filtered_df_by_ev[stream_filter_key2] == stream_filter_value2] + + i1 = df.set_index(case_id_glue).index + i2 = filtered_df_by_ev.set_index(case_id_glue).index + if positive: + ret = df[i1.isin(i2)] + else: + ret = df[~i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def apply_events(df: pd.DataFrame, values: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Filter dataframe on attribute values (filter events) + + Parameters + ---------- + df + Dataframe + values + Values to filter on + parameters + Possible parameters of the algorithm, including: + Parameters.ATTRIBUTE_KEY -> Attribute we want to filter + Parameters.POSITIVE -> Specifies if the filter should be applied including traces (positive=True) or + excluding traces (positive=False) + Returns + ---------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + if positive: + ret = df[df[attribute_key].isin(values)] + else: + ret = df[~df[attribute_key].isin(values)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def apply(df: pd.DataFrame, values: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Filter dataframe on attribute values (filter traces) + + Parameters + ---------- + df + Dataframe + values + Values to filter on + parameters + Possible parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Case ID column in the dataframe + Parameters.ATTRIBUTE_KEY -> Attribute we want to filter + Parameters.POSITIVE -> Specifies if the filter should be applied including traces (positive=True) or + excluding traces (positive=False) + Returns + ---------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + return filter_df_on_attribute_values(df, values, case_id_glue=case_id_glue, attribute_key=attribute_key, + positive=positive) + + +def filter_df_on_attribute_values(df, values, case_id_glue="case:concept:name", attribute_key="concept:name", + positive=True): + """ + Filter dataframe on attribute values + + Parameters + ---------- + df + Dataframe + values + Values to filter on + case_id_glue + Case ID column in the dataframe + attribute_key + Attribute we want to filter + positive + Specifies if the filtered should be applied including traces (positive=True) or excluding traces + (positive=False) + + Returns + ---------- + df + Filtered dataframe + """ + if values is None: + values = [] + filtered_df_by_ev = df[df[attribute_key].isin(values)] + i1 = df.set_index(case_id_glue).index + i2 = filtered_df_by_ev.set_index(case_id_glue).index + if positive: + ret = df[i1.isin(i2)] + else: + ret = df[~i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def filter_df_keeping_activ_exc_thresh(df, thresh, act_count0=None, activity_key="concept:name", + most_common_variant=None): + """ + Filter a dataframe keeping activities exceeding the threshold + + Parameters + ------------ + df + Pandas dataframe + thresh + Threshold to use to cut activities + act_count0 + (If provided) Dictionary that associates each activity with its count + activity_key + Column in which the activity is present + + Returns + ------------ + df + Filtered dataframe + """ + if most_common_variant is None: + most_common_variant = [] + + if act_count0 is None: + act_count0 = get_attribute_values(df, activity_key) + act_count = [k for k, v in act_count0.items() if v >= thresh or k in most_common_variant] + if len(act_count) < len(act_count0): + ret = df[df[activity_key].isin(act_count)] + else: + ret = df + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def filter_df_keeping_spno_activities(df: pd.DataFrame, activity_key: str = "concept:name", max_no_activities: int = 25): + """ + Filter a dataframe on the specified number of attributes + + Parameters + ----------- + df + Dataframe + activity_key + Activity key in dataframe (must be specified if different from concept:name) + max_no_activities + Maximum allowed number of attributes + + Returns + ------------ + df + Filtered dataframe + """ + activity_values_dict = df[activity_key].value_counts().to_dict() + activity_values_ordered_list = [] + for act in activity_values_dict: + activity_values_ordered_list.append([act, activity_values_dict[act]]) + activity_values_ordered_list = sorted(activity_values_ordered_list, key=lambda x: (x[1], x[0]), reverse=True) + # keep only a number of attributes <= max_no_activities + activity_values_ordered_list = activity_values_ordered_list[ + 0:min(len(activity_values_ordered_list), max_no_activities)] + activity_to_keep = [x[0] for x in activity_values_ordered_list] + + if len(activity_to_keep) < len(activity_values_dict): + ret = df[df[activity_key].isin(activity_to_keep)] + else: + ret = df + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return df + + +def filter_df_relative_occurrence_event_attribute(df: pd.DataFrame, min_relative_stake: float, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Filters the event log keeping only the events having an attribute value which occurs: + - in at least the specified (min_relative_stake) percentage of events, when Parameters.KEEP_ONCE_PER_CASE = False + - in at least the specified (min_relative_stake) percentage of cases, when Parameters.KEEP_ONCE_PER_CASE = True + + Parameters + ------------------- + df + Pandas dataframe + min_relative_stake + Minimum percentage of cases (expressed as a number between 0 and 1) in which the attribute should occur. + parameters + Parameters of the algorithm, including: + - Parameters.ATTRIBUTE_KEY => the attribute to use (default: concept:name) + - Parameters.KEEP_ONCE_PER_CASE => decides the level of the filter to apply + (if the filter should be applied on the cases, set it to True). + + Returns + ------------------ + filtered_df + Filtered Pandas dataframe + """ + if parameters is None: + parameters = {} + + attribute_key = exec_utils.get_param_value(PARAMETER_CONSTANT_ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + keep_once_per_case = exec_utils.get_param_value(Parameters.KEEP_ONCE_PER_CASE, parameters, True) + + parameters_cp = copy(parameters) + + activities_occurrences = get_attribute_values(df, attribute_key, parameters=parameters_cp) + + if keep_once_per_case: + # filter on cases + filtered_attributes = set(x for x, y in activities_occurrences.items() if y >= min_relative_stake * df[case_id_key].nunique()) + else: + # filter on events + filtered_attributes = set(x for x, y in activities_occurrences.items() if y >= min_relative_stake * len(df)) + + return apply_events(df, filtered_attributes, parameters=parameters) diff --git a/pm4py/pm4py/algo/filtering/pandas/between/__init__.py b/pm4py/pm4py/algo/filtering/pandas/between/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2582a8f124995c29b150c8cbf9fe27587a1ffb05 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/between/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.between import between_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/between/between_filter.py b/pm4py/pm4py/algo/filtering/pandas/between/between_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..9ebe41c440708d91cbc17bc181944120714734fa --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/between/between_filter.py @@ -0,0 +1,101 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union, List + +import numpy as np +import pandas as pd + +from pm4py.util import exec_utils, constants, xes_constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + SUBCASE_CONCAT_STR = "subcase_concat_str" + + +def apply(df: pd.DataFrame, act1: Union[str, List[str]], act2: Union[str, List[str]], + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Given a dataframe, filters all the subtraces going from an event with activity "act1" to an event with + activity "act2" + + Parameters + ---------------- + df + Dataframe + act1 + First activity (or collection of activities) + act2 + Second activity (or collection of activities) + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => activity key + - Parameters.CASE_ID_KEY => case id + - Parameters.SUBCASE_CONCAT_STR => concatenator between the case id and the subtrace index in the filtered df + + Returns + ---------------- + filtered_df + Dataframe with all the subtraces going from "act1" to "act2" + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + subcase_concat_str = exec_utils.get_param_value(Parameters.SUBCASE_CONCAT_STR, parameters, "##@@") + + act1_comparison = lambda x: (x == act1) if type(act1) is str else (x in act1) + act2_comparison = lambda x: (x == act2) if type(act2) is str else (x in act2) + + df = df.copy() + cases = df[case_id_key].to_numpy() + activities = df[activity_key].to_numpy() + c_unq, c_ind, c_counts = np.unique(cases, return_index=True, return_counts=True) + res = [np.nan for i in range(len(df))] + + i = 0 + while i < len(c_unq): + rel_count = 0 + occ_A = -1 + j = 0 + while j < c_counts[i]: + if act2_comparison(activities[c_ind[i] + j]) and occ_A >= 0: + z = occ_A + this_case = str(c_unq[i]) + subcase_concat_str + str(rel_count) + while z <= j: + res[c_ind[i] + z] = this_case + z = z + 1 + rel_count += 1 + if act1 != act2: + # if the between filter is applied between two activities A and B, with A different from B, + # then the filter should stop until the next occurrence of A + occ_A = -1 + else: + # otherwise, if A = B, then it continues outputting the events to a new subcase + occ_A = j + elif act1_comparison(activities[c_ind[i] + j]) and occ_A == -1: + occ_A = j + j = j + 1 + i = i + 1 + + df[case_id_key] = res + df = df.dropna(subset=[case_id_key]) + + return df diff --git a/pm4py/pm4py/algo/filtering/pandas/cases/__init__.py b/pm4py/pm4py/algo/filtering/pandas/cases/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b687a8becac250edb1aa76d7ba37b167beb21f01 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/cases/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.cases import case_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/cases/case_filter.py b/pm4py/pm4py/algo/filtering/pandas/cases/case_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..6d7f1e834c476f80e84b530885d1835c19c5f806 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/cases/case_filter.py @@ -0,0 +1,160 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import constants, xes_constants, pandas_utils +from enum import Enum +from pm4py.util import exec_utils +from copy import copy +from typing import Optional, Dict, Any, Union +import pandas as pd +from pm4py.util.business_hours import soj_time_business_hours_diff + + +class Parameters(Enum): + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def filter_on_ncases(df: pd.DataFrame, case_id_glue: str = constants.CASE_CONCEPT_NAME, max_no_cases: int = 1000): + """ + Filter a dataframe keeping only the specified maximum number of traces + + Parameters + ----------- + df + Dataframe + case_id_glue + Case ID column in the CSV + max_no_cases + Maximum number of traces to keep + + Returns + ------------ + df + Filtered dataframe + """ + cases_values_dict = df[case_id_glue].value_counts().to_dict() + cases_to_keep = [] + for case in cases_values_dict: + cases_to_keep.append(case) + cases_to_keep = cases_to_keep[0:min(len(cases_to_keep), max_no_cases)] + ret = df[df[case_id_glue].isin(cases_to_keep)] + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def filter_on_case_size(df0: pd.DataFrame, case_id_glue: str = "case:concept:name", min_case_size: int = 2, max_case_size=None): + """ + Filter a dataframe keeping only traces with at least the specified number of events + + Parameters + ----------- + df + Dataframe + case_id_glue + Case ID column in the CSV + min_case_size + Minimum size of a case + max_case_size + Maximum case size + + Returns + ----------- + df + Filtered dataframe + """ + df = df0.copy() + element_group_size = df[[case_id_glue]].groupby(case_id_glue).transform('size') + df = df[element_group_size >= min_case_size] + if max_case_size is not None: + df = df[element_group_size <= max_case_size] + df.attrs = copy(df0.attrs) if hasattr(df0, 'attrs') else {} + return df + + +def filter_on_case_performance(df: pd.DataFrame, case_id_glue: str = constants.CASE_CONCEPT_NAME, + timestamp_key: str = xes_constants.DEFAULT_TIMESTAMP_KEY, + min_case_performance: float = 0, max_case_performance: float = 10000000000, + business_hours=False, business_hours_slots=constants.DEFAULT_BUSINESS_HOUR_SLOTS) -> pd.DataFrame: + """ + Filter a dataframe on case performance + + Parameters + ----------- + df + Dataframe + case_id_glue + Case ID column in the CSV + timestamp_key + Timestamp column to use for the CSV + min_case_performance + Minimum case performance + max_case_performance + Maximum case performance + + Returns + ----------- + df + Filtered dataframe + """ + grouped_df = df[[case_id_glue, timestamp_key]].groupby(case_id_glue) + start_events = grouped_df.first() + end_events = grouped_df.last() + end_events.columns = [str(col) + '_2' for col in end_events.columns] + stacked_df = pandas_utils.concat([start_events, end_events], axis=1) + if business_hours: + stacked_df['caseDuration'] = stacked_df.apply( + lambda x: soj_time_business_hours_diff(x[timestamp_key], x[timestamp_key + "_2"], business_hours_slots), axis=1) + else: + stacked_df['caseDuration'] = stacked_df[timestamp_key + "_2"] - stacked_df[timestamp_key] + stacked_df['caseDuration'] = pandas_utils.get_total_seconds(stacked_df['caseDuration']) + stacked_df = stacked_df[stacked_df['caseDuration'] <= max_case_performance] + stacked_df = stacked_df[stacked_df['caseDuration'] >= min_case_performance] + i1 = df.set_index(case_id_glue).index + i2 = stacked_df.index + ret = df[i1.isin(i2)] + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def filter_case_performance(df: pd.DataFrame, min_case_performance: float = 0, max_case_performance: float = 10000000000, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + if parameters is None: + parameters = {} + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + return filter_on_case_performance(df, min_case_performance=min_case_performance, + max_case_performance=max_case_performance, timestamp_key=timestamp_key, + case_id_glue=case_glue, business_hours=business_hours, business_hours_slots=business_hours_slots) + + +def apply(df, parameters=None): + del df + del parameters + raise NotImplementedError("apply method not available for case filter") + + +def apply_auto_filter(df, parameters=None): + del df + del parameters + raise Exception("apply_auto_filter method not available for case filter") diff --git a/pm4py/pm4py/algo/filtering/pandas/consecutive_act_case_grouping/__init__.py b/pm4py/pm4py/algo/filtering/pandas/consecutive_act_case_grouping/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1a995f302ac79c4d22561e6ed4fc1dbc791a9ffe --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/consecutive_act_case_grouping/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.consecutive_act_case_grouping import consecutive_act_case_grouping_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/consecutive_act_case_grouping/consecutive_act_case_grouping_filter.py b/pm4py/pm4py/algo/filtering/pandas/consecutive_act_case_grouping/consecutive_act_case_grouping_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..4818641bf2d7075ec4eac7aaea0d99564354f904 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/consecutive_act_case_grouping/consecutive_act_case_grouping_filter.py @@ -0,0 +1,73 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Optional, Dict, Any, Union +from pm4py.util import constants, xes_constants, exec_utils +from pm4py.objects.conversion.log import converter as log_converter +from enum import Enum + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + FILTER_TYPE = "filter_type" + + +def apply(log_obj: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Groups the consecutive events of the same case having the same activity, providing option to keep the first/last event of each group + + Parameters + --------------- + log_obj + Log object (EventLog, EventStream, Pandas dataframe) + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => the case identifier to be used + - Parameters.ACTIVITY_KEY => the attribute to be used as activity + - Parameters.FILTER_TYPE => the type of filter to be applied: + first => keeps the first event of each group + last => keeps the last event of each group + + Returns + --------------- + filtered_dataframe + Filtered dataframe object + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + filter_type = exec_utils.get_param_value(Parameters.FILTER_TYPE, parameters, "first") + + dataframe = log_converter.apply(log_obj, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters).copy() + dataframe["@@extra1"] = dataframe[case_id_key] + dataframe[activity_key] + utility_df = (dataframe["@@extra1"] != dataframe["@@extra1"].shift()) + utility_df = utility_df.fillna(False).cumsum() + gdf = dataframe.groupby(utility_df, sort=False) + + if filter_type == "first": + dataframe = gdf.first() + elif filter_type == "last": + dataframe = gdf.last() + + dataframe = dataframe.reset_index(drop=True) + del dataframe["@@extra1"] + + return dataframe diff --git a/pm4py/pm4py/algo/filtering/pandas/end_activities/__init__.py b/pm4py/pm4py/algo/filtering/pandas/end_activities/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bea2cd07039510e467b6cb56ec2ffdd4a7383607 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/end_activities/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.end_activities import end_activities_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/end_activities/end_activities_filter.py b/pm4py/pm4py/algo/filtering/pandas/end_activities/end_activities_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..57b7a5a1b9dd95c3c59127096717531f36ce95f7 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/end_activities/end_activities_filter.py @@ -0,0 +1,162 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.end_activities.pandas.get import get_end_activities +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.util import xes_constants as xes +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_CASEID_KEY, PARAMETER_CONSTANT_ACTIVITY_KEY, GROUPED_DATAFRAME, \ + RETURN_EA_COUNT_DICT_AUTOFILTER +from enum import Enum +from pm4py.util import exec_utils +from copy import copy +from typing import Optional, Dict, Any, Union, List +import pandas as pd + + +class Parameters(Enum): + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + DECREASING_FACTOR = "decreasingFactor" + GROUP_DATAFRAME = GROUPED_DATAFRAME + POSITIVE = "positive" + RETURN_EA_COUNT = RETURN_EA_COUNT_DICT_AUTOFILTER + + +def apply(df: pd.DataFrame, values: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Filter dataframe on end activities + + Parameters + ---------- + df + Dataframe + values + Values to filter on + parameters + Possible parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Case ID column in the dataframe + Parameters.ACTIVITY_KEY -> Column that represents the activity + Parameters.POSITIVE -> Specifies if the filtered should be applied including traces (positive=True) + or excluding traces (positive=False) + + Returns + ---------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + grouped_df = exec_utils.get_param_value(Parameters.GROUP_DATAFRAME, parameters, None) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + return filter_df_on_end_activities(df, values, case_id_glue=case_id_glue, activity_key=activity_key, + positive=positive, grouped_df=grouped_df) + + +def filter_df_on_end_activities(df, values, case_id_glue=CASE_CONCEPT_NAME, + activity_key=xes.DEFAULT_NAME_KEY, grouped_df=None, positive=True): + """ + Filter dataframe on end activities + + Parameters + ---------- + df + Dataframe + values + Values to filter on + case_id_glue + Case ID column in the dataframe + activity_key + Column that represent the activity + positive + Specifies if the filtered should be applied including traces (positive=True) or excluding traces + (positive=False) + + Returns + ---------- + df + Filtered dataframe + """ + if grouped_df is None: + grouped_df = df.groupby(case_id_glue, sort=False) + gdf = grouped_df[activity_key].last().isin(values) + i1 = df.set_index(case_id_glue).index + i2 = gdf[gdf].index + if positive: + ret = df[i1.isin(i2)] + else: + ret = df[~i1.isin(i2)] + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def filter_df_on_end_activities_nocc(df, nocc, ea_count0=None, case_id_glue=CASE_CONCEPT_NAME, + grouped_df=None, + activity_key=xes.DEFAULT_NAME_KEY, return_dict=False, most_common_variant=None): + """ + Filter dataframe on end activities number of occurrences + + Parameters + ----------- + df + Dataframe + nocc + Minimum number of occurrences of the end activity + ea_count0 + (if provided) Dictionary that associates each end activity with its count + case_id_glue + Column that contains the Case ID + activity_key + Column that contains the activity + grouped_df + Grouped dataframe + return_dict + Return dict + """ + if most_common_variant is None: + most_common_variant = [] + + if len(df) > 0: + if grouped_df is None: + grouped_df = df.groupby(case_id_glue, sort=False) + first_eve_df = grouped_df.last() + if ea_count0 is None: + parameters = { + Parameters.CASE_ID_KEY: case_id_glue, + Parameters.ACTIVITY_KEY: activity_key, + Parameters.GROUP_DATAFRAME: grouped_df + } + ea_count0 = get_end_activities(df, parameters=parameters) + ea_count = [k for k, v in ea_count0.items() if + v >= nocc or (len(most_common_variant) > 0 and k == most_common_variant[-1])] + ea_count_dict = {k: v for k, v in ea_count0.items() if + v >= nocc or (len(most_common_variant) > 0 and k == most_common_variant[-1])} + if len(ea_count) < len(ea_count0): + first_eve_df = first_eve_df[first_eve_df[activity_key].isin(ea_count)] + i1 = df.set_index(case_id_glue).index + i2 = first_eve_df.index + ret = df[i1.isin(i2)] + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + if return_dict: + return ret, ea_count_dict + return ret + if return_dict: + return df, ea_count_dict + return df diff --git a/pm4py/pm4py/algo/filtering/pandas/ends_with/__init__.py b/pm4py/pm4py/algo/filtering/pandas/ends_with/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/ends_with/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/filtering/pandas/ends_with/ends_with_filter.py b/pm4py/pm4py/algo/filtering/pandas/ends_with/ends_with_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..a959e06286ffcc9c90815d9a443481f91e5af895 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/ends_with/ends_with_filter.py @@ -0,0 +1,85 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.statistics.traces.generic.pandas.case_statistics import get_variants_df +from pm4py.util.constants import PARAMETER_CONSTANT_CASEID_KEY, PARAMETER_CONSTANT_ACTIVITY_KEY +from enum import Enum +from pm4py.util import exec_utils +from copy import copy +from typing import Optional, Dict, Any, Union, List +import pandas as pd +from pm4py.util import constants + + +class Parameters(Enum): + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + + +def apply(df: pd.DataFrame, admitted_suffixes: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Apply a filter on variants + + Parameters + ----------- + df + Dataframe + admitted_suffixes + List of admitted suffixes (to include/exclude) + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Column that contains the Case ID + Parameters.ACTIVITY_KEY -> Column that contains the activity + Parameters.POSITIVE -> Specifies if the filter should be applied including traces (positive=True) + or excluding traces (positive=False) + variants_df -> If provided, avoid recalculation of the variants dataframe + + Returns + ----------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + variants_df = parameters["variants_df"] if "variants_df" in parameters else get_variants_df(df, + parameters=parameters) + + admitted_suffixes = list(admitted_suffixes) + first_case_variant = variants_df["variant"].iloc[0] + if isinstance(first_case_variant, tuple): + # manage that as tuple + variants_df = variants_df.copy() + variants_df["variant"] = variants_df["variant"].apply(lambda x: constants.DEFAULT_VARIANT_SEP.join(list(x))) + admitted_suffixes = [constants.DEFAULT_VARIANT_SEP.join(x) for x in admitted_suffixes] + admitted_suffixes = tuple(admitted_suffixes) + + variants_df = variants_df[variants_df["variant"].str.endswith(admitted_suffixes)] + + i1 = df.set_index(case_id_glue).index + i2 = variants_df.index + if positive: + ret = df[i1.isin(i2)] + else: + ret = df[~i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret diff --git a/pm4py/pm4py/algo/filtering/pandas/ltl/__init__.py b/pm4py/pm4py/algo/filtering/pandas/ltl/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d4d603c8f1db0430cfdf1b24f59d18ea571c8f02 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/ltl/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.ltl import ltl_checker diff --git a/pm4py/pm4py/algo/filtering/pandas/ltl/ltl_checker.py b/pm4py/pm4py/algo/filtering/pandas/ltl/ltl_checker.py new file mode 100644 index 0000000000000000000000000000000000000000..b73fb86aadddd234dc42e565e219185f93067ea9 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/ltl/ltl_checker.py @@ -0,0 +1,282 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.util import exec_utils, pandas_utils, constants +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.util.constants import PARAMETER_CONSTANT_ATTRIBUTE_KEY, PARAMETER_CONSTANT_CASEID_KEY, \ + PARAMETER_CONSTANT_RESOURCE_KEY, PARAMETER_CONSTANT_TIMESTAMP_KEY +from pm4py.util.xes_constants import DEFAULT_NAME_KEY, DEFAULT_RESOURCE_KEY, DEFAULT_TIMESTAMP_KEY +from copy import copy +from typing import Optional, Dict, Any, Union, List +import pandas as pd + + +class Parameters(Enum): + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ATTRIBUTE_KEY = PARAMETER_CONSTANT_ATTRIBUTE_KEY + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + RESOURCE_KEY = PARAMETER_CONSTANT_RESOURCE_KEY + POSITIVE = "positive" + ENABLE_TIMESTAMP = "enable_timestamp" + TIMESTAMP_DIFF_BOUNDARIES = "timestamp_diff_boundaries" + + +POSITIVE = Parameters.POSITIVE +ENABLE_TIMESTAMP = Parameters.ENABLE_TIMESTAMP +TIMESTAMP_DIFF_BOUNDARIES = Parameters.TIMESTAMP_DIFF_BOUNDARIES + + +def eventually_follows(df0: pd.DataFrame, attribute_values: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Applies the eventually follows rule + + Parameters + ------------ + df0 + Dataframe + attribute_values + A list of attribute_values attribute_values[n] follows attribute_values[n-1] follows ... follows attribute_values[0] + + parameters + Parameters of the algorithm, including the attribute key and the positive parameter: + - If True, returns all the cases containing all attribute_values and in which attribute_values[i] was eventually followed by attribute_values[i + 1] + - If False, returns all the cases not containing all attribute_values, or in which an instance of attribute_values[i] was not eventually + followed by an instance of attribute_values[i + 1] + + Returns + ------------ + filtered_df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + timestamp_diff_boundaries = exec_utils.get_param_value(Parameters.TIMESTAMP_DIFF_BOUNDARIES, parameters, []) + enable_timestamp = exec_utils.get_param_value(Parameters.ENABLE_TIMESTAMP, parameters, len(timestamp_diff_boundaries) > 0) + + colset = [case_id_glue, attribute_key] + if enable_timestamp: + colset.append(timestamp_key) + + df = df0.copy() + df = df[colset] + df = pandas_utils.insert_index(df) + + df_a = [df[df[attribute_key] == attribute_value].copy() for attribute_value in attribute_values] + + df_join = df_a[0].merge(df_a[1], on=case_id_glue, suffixes=('_0', "_1")).dropna() + df_join[constants.DEFAULT_INDEX_KEY] = df_join[constants.DEFAULT_INDEX_KEY + "_0"] + df_join["@@diffindex0"] = df_join[constants.DEFAULT_INDEX_KEY + "_1"] - df_join[constants.DEFAULT_INDEX_KEY + "_0"] + df_join = df_join[df_join["@@diffindex0"] > 0] + + for i in range(2, len(df_a)): + df_join = df_join.merge(df_a[i], on=case_id_glue, suffixes=('', "_%d" % i)).dropna() + df_join["@@diffindex%d" % (i - 1)] = df_join[constants.DEFAULT_INDEX_KEY + "_%d" % i] - df_join[ + constants.DEFAULT_INDEX_KEY + "_%d" % (i - 1)] + df_join = df_join[df_join["@@diffindex%d" % (i - 1)] > 0] + + if enable_timestamp: + for i in range(1, len(df_a)): + df_join["@@difftimestamp%d" % (i - 1)] = pandas_utils.get_total_seconds(df_join[timestamp_key + "_%d" % i] - df_join[timestamp_key + '_%d' % (i-1)]) + + if timestamp_diff_boundaries: + df_join = df_join[df_join["@@difftimestamp%d" % (i-1)] >= timestamp_diff_boundaries[i-1][0]] + df_join = df_join[df_join["@@difftimestamp%d" % (i-1)] <= timestamp_diff_boundaries[i-1][1]] + + i1 = df.set_index(case_id_glue).index + i2 = df_join.set_index(case_id_glue).index + if positive: + ret = df0[i1.isin(i2)] + else: + ret = df0[~i1.isin(i2)] + + ret.attrs = copy(df0.attrs) if hasattr(df0, 'attrs') else {} + return ret + + +def A_next_B_next_C(df0: pd.DataFrame, A: str, B: str, C: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Applies the A net B next C rule + + Parameters + ------------ + df0 + Dataframe + A + A Attribute value + B + B Attribute value + C + C Attribute value + parameters + Parameters of the algorithm, including the attribute key and the positive parameter: + - If True, returns all the cases containing A, B and C and in which A was directly followed by B and B was directly followed by C + - If False, returns all the cases not containing A or B or C, or in which none instance of A was directly + followed by an instance of B and B was directly followed by C + + Returns + ------------ + filtered_df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + df = df0.copy() + df = df[[case_id_glue, attribute_key]] + df = pandas_utils.insert_index(df) + df_A = df[df[attribute_key] == A].copy() + df_B = df[df[attribute_key] == B].copy() + df_C = df[df[attribute_key] == C].copy() + df_B["@@conceptname"] = df_B[case_id_glue] + df_B = df_B.groupby(case_id_glue).last().set_index("@@conceptname") + df_C["@@conceptname"] = df_C[case_id_glue] + df_C = df_C.groupby(case_id_glue).last().set_index("@@conceptname") + + df_join = df_A.join(df_B, on=case_id_glue, rsuffix="_2").dropna().join(df_C, on=case_id_glue, rsuffix="_3").dropna() + df_join["@@diffindex"] = df_join[constants.DEFAULT_INDEX_KEY + "_2"] - df_join[constants.DEFAULT_INDEX_KEY] + df_join["@@diffindex2"] = df_join[constants.DEFAULT_INDEX_KEY + "_3"] - df_join[constants.DEFAULT_INDEX_KEY + "_2"] + df_join = df_join[df_join["@@diffindex"] == 1] + df_join = df_join[df_join["@@diffindex2"] == 1] + + i1 = df.set_index(case_id_glue).index + i2 = df_join.set_index(case_id_glue).index + + if positive: + ret = df0[i1.isin(i2)] + else: + ret = df0[~i1.isin(i2)] + + ret.attrs = copy(df0.attrs) if hasattr(df0, 'attrs') else {} + return ret + + +def four_eyes_principle(df0: pd.DataFrame, A: str, B: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Verifies the Four Eyes Principle given A and B + + Parameters + ------------- + df0 + Dataframe + A + A attribute value + B + B attribute value + parameters + Parameters of the algorithm, including the attribute key and the positive parameter: + - if True, then filters all the cases containing A and B which have empty intersection between the set + of resources doing A and B + - if False, then filters all the cases containing A and B which have no empty intersection between the set + of resources doing A and B + + Returns + -------------- + filtered_df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, DEFAULT_RESOURCE_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + df = df0.copy() + df = df[[case_id_glue, attribute_key, resource_key]] + + df_A = df[df[attribute_key] == A].copy() + df_B = df[df[attribute_key] == B].copy() + df_B["@@conceptname"] = df_B[case_id_glue] + df_B = df_B.groupby(case_id_glue).last().set_index("@@conceptname") + + df_join = df_A.join(df_B, on=case_id_glue, rsuffix="_2").dropna() + df_join_pos = df_join[df_join[resource_key] == df_join[resource_key + "_2"]] + df_join_neg = df_join[df_join[resource_key] != df_join[resource_key + "_2"]] + + i1 = df.set_index(case_id_glue).index + i2 = df_join_pos.set_index(case_id_glue).index + i3 = df_join_neg.set_index(case_id_glue).index + + if positive: + ret = df0[i1.isin(i3) & ~i1.isin(i2)] + else: + ret = df0[i1.isin(i2)] + + ret.attrs = copy(df0.attrs) if hasattr(df0, 'attrs') else {} + return ret + + +def attr_value_different_persons(df0: pd.DataFrame, A: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Checks whether an attribute value is assumed on events done by different resources + + Parameters + ------------ + df0 + Dataframe + A + A attribute value + parameters + Parameters of the algorithm, including the attribute key and the positive parameter: + - if True, then filters all the cases containing occurrences of A done by different resources + - if False, then filters all the cases not containing occurrences of A done by different resources + + Returns + ------------- + filtered_df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, DEFAULT_RESOURCE_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + df = df0.copy() + df = df[[case_id_glue, attribute_key, resource_key]] + + df_A = df[df[attribute_key] == A].copy() + df_B = df[df[attribute_key] == A].copy() + df_B["@@conceptname"] = df_B[case_id_glue] + df_B = df_B.groupby(case_id_glue).last().set_index("@@conceptname") + + df_join = df_A.join(df_B, on=case_id_glue, rsuffix="_2").dropna() + df_join_neg = df_join[df_join[resource_key] != df_join[resource_key + "_2"]] + + i1 = df.set_index(case_id_glue).index + i2 = df_join_neg.set_index(case_id_glue).index + + if positive: + ret = df0[i1.isin(i2)] + else: + ret = df0[~i1.isin(i2)] + + ret.attrs = copy(df0.attrs) if hasattr(df0, 'attrs') else {} + return ret diff --git a/pm4py/pm4py/algo/filtering/pandas/paths/__init__.py b/pm4py/pm4py/algo/filtering/pandas/paths/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2201ac045e3cadf776b17bdf6c4d505f6012650c --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/paths/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.paths import paths_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/paths/paths_filter.py b/pm4py/pm4py/algo/filtering/pandas/paths/paths_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..b61e0bc87f0c899490a6d6aa29c4a9db2c848543 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/paths/paths_filter.py @@ -0,0 +1,145 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_ATTRIBUTE_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_CASEID_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_TIMESTAMP_KEY +from pm4py.util.constants import DEFAULT_VARIANT_SEP +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +from copy import copy +from typing import Optional, Dict, Any, Union, Tuple, List +import pandas as pd +import sys + + +class Parameters(Enum): + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ATTRIBUTE_KEY = PARAMETER_CONSTANT_ATTRIBUTE_KEY + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + TARGET_ATTRIBUTE_KEY = "target_attribute_key" + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + MIN_PERFORMANCE = "min_performance" + MAX_PERFORMANCE = "max_performance" + + +def apply(df: pd.DataFrame, paths: List[Tuple[str, str]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Apply a filter on traces containing / not containing a path + + Parameters + ---------- + df + Dataframe + paths + Paths to filter on + parameters + Possible parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Case ID column in the dataframe + Parameters.ATTRIBUTE_KEY -> Attribute we want to filter + Parameters.POSITIVE -> Specifies if the filter should be applied including traces (positive=True) + or excluding traces (positive=False) + Returns + ---------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + target_attribute_key = exec_utils.get_param_value(Parameters.TARGET_ATTRIBUTE_KEY, parameters, attribute_key) + + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + paths = [path[0] + DEFAULT_VARIANT_SEP + path[1] for path in paths] + df = df.sort_values([case_id_glue, timestamp_key]) + filt_df = df[list({case_id_glue, attribute_key, target_attribute_key})] + filt_dif_shifted = filt_df.shift(-1) + filt_dif_shifted.columns = [str(col) + '_2' for col in filt_dif_shifted.columns] + stacked_df = pandas_utils.concat([filt_df, filt_dif_shifted], axis=1) + stacked_df = stacked_df[stacked_df[case_id_glue] == stacked_df[case_id_glue + '_2']] + stacked_df["@@path"] = stacked_df[attribute_key] + DEFAULT_VARIANT_SEP + stacked_df[target_attribute_key + "_2"] + stacked_df = stacked_df[stacked_df["@@path"].isin(paths)] + i1 = df.set_index(case_id_glue).index + i2 = stacked_df.set_index(case_id_glue).index + if positive: + ret = df[i1.isin(i2)] + else: + ret = df[~i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def apply_performance(df: pd.DataFrame, provided_path: Tuple[str, str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Filters the cases of a dataframe where there is at least one occurrence of the provided path + occurring in the defined timedelta range. + + Parameters + ---------- + df + Dataframe + paths + Paths to filter on + parameters + Possible parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Case ID column in the dataframe + Parameters.ATTRIBUTE_KEY -> Attribute we want to filter + Parameters.TIMESTAMP_KEY -> Attribute identifying the timestamp in the log + Parameters.POSITIVE -> Specifies if the filter should be applied including traces (positive=True) + or excluding traces (positive=False) + Parameters.MIN_PERFORMANCE -> Minimal allowed performance of the provided path + Parameters.MAX_PERFORMANCE -> Maximal allowed performance of the provided path + + Returns + ---------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + provided_path = provided_path[0] + DEFAULT_VARIANT_SEP + provided_path[1] + min_performance = exec_utils.get_param_value(Parameters.MIN_PERFORMANCE, parameters, 0) + max_performance = exec_utils.get_param_value(Parameters.MAX_PERFORMANCE, parameters, sys.maxsize) + df = df.sort_values([case_id_glue, timestamp_key]) + filt_df = df[[case_id_glue, attribute_key, timestamp_key]] + filt_dif_shifted = filt_df.shift(-1) + filt_dif_shifted.columns = [str(col) + '_2' for col in filt_dif_shifted.columns] + stacked_df = pandas_utils.concat([filt_df, filt_dif_shifted], axis=1) + stacked_df["@@path"] = stacked_df[attribute_key] + DEFAULT_VARIANT_SEP + stacked_df[attribute_key + "_2"] + stacked_df = stacked_df[stacked_df["@@path"] == provided_path] + stacked_df["@@timedelta"] = pandas_utils.get_total_seconds(stacked_df[timestamp_key + "_2"] - stacked_df[timestamp_key]) + stacked_df = stacked_df[stacked_df["@@timedelta"] >= min_performance] + stacked_df = stacked_df[stacked_df["@@timedelta"] <= max_performance] + i1 = df.set_index(case_id_glue).index + i2 = stacked_df.set_index(case_id_glue).index + if positive: + ret = df[i1.isin(i2)] + else: + ret = df[~i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret diff --git a/pm4py/pm4py/algo/filtering/pandas/pd_filtering_constants.py b/pm4py/pm4py/algo/filtering/pandas/pd_filtering_constants.py new file mode 100644 index 0000000000000000000000000000000000000000..34be463f470231ab58ff3c5a1147b4a503eb97fc --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/pd_filtering_constants.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +MIN_NO_OF_ACTIVITIES_TO_RETAIN_FOR_DIAGRAM = 10 +MAX_NO_OF_ACTIVITIES_TO_RETAIN_FOR_DIAGRAM = 25 diff --git a/pm4py/pm4py/algo/filtering/pandas/prefixes/__init__.py b/pm4py/pm4py/algo/filtering/pandas/prefixes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bfe1e96ba76117a39543c1665c9a8508a8128227 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/prefixes/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.filtering.pandas.prefixes import prefix_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/prefixes/prefix_filter.py b/pm4py/pm4py/algo/filtering/pandas/prefixes/prefix_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..c66bb39e636d996fadd898c3933ee77bc44155ac --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/prefixes/prefix_filter.py @@ -0,0 +1,89 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import pandas as pd + +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.util import constants +from pm4py.util import exec_utils +from pm4py.util import xes_constants, pandas_utils + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + INDEX_KEY = "index_key" + INDEX_IN_TRACE_KEY = "index_in_trace_key" + USE_EXTREMES_TIMESTAMP = "use_extremes_timestamp" + TEMP_COLUMN = "temp_column" + FIRST_OR_LAST = "first_or_last" + STRICT = "strict" + + +def apply(df: pd.DataFrame, activity: str, parameters: Optional[Dict[Any, Any]] = None): + """ + Filter all the prefixes to a given activity (first or last occurrence of the activity in the case). + + Parameters + ---------------- + df + Dataframe + parameters + Parameters of the algorithm: + - Parameters.CASE_ID_KEY => the case identifier column. + - Parameters.ACTIVITY_KEY => the activity column. + - Parameters.INDEX_IN_TRACE_KEY => attribute that should act as container of the index of the event inside + the case. + - Parameters.TEMP_COLUMN => temporary column which is used for internal purposes. + - Parameters.FIRST_OR_LAST => filter on the first or last occurrence of an activity in the dataframe. + - Parameters.STRICT => applies the filter in a strict (<) or lean (<=) way (boolean). + + Returns + ---------------- + df + Dataframe filtered keeping the prefixes to a given activity (first or last occurrence of the activity in the case). + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + index_in_trace_key = exec_utils.get_param_value(Parameters.INDEX_IN_TRACE_KEY, parameters, constants.DEFAULT_INDEX_IN_TRACE_KEY) + temp_column = exec_utils.get_param_value(Parameters.TEMP_COLUMN, parameters, "@@temp_column") + first_or_last = exec_utils.get_param_value(Parameters.FIRST_OR_LAST, parameters, "first") + strict = exec_utils.get_param_value(Parameters.STRICT, parameters, True) + + if index_in_trace_key not in df.columns: + df = pandas_utils.insert_ev_in_tr_index(df, column_name=index_in_trace_key, case_id=case_id_key) + + position_activity = df[df[activity_key] == activity].groupby(case_id_key) + if first_or_last == "first": + position_activity = position_activity.first() + elif first_or_last == "last": + position_activity = position_activity.last() + position_activity = position_activity.reset_index()[[case_id_key, index_in_trace_key]].to_dict("records") + position_activity = {x[case_id_key]: x[index_in_trace_key] for x in position_activity} + + df[temp_column] = df[case_id_key].map(position_activity) + if strict: + df = df[df[index_in_trace_key] < df[temp_column]] + else: + df = df[df[index_in_trace_key] <= df[temp_column]] + + return df diff --git a/pm4py/pm4py/algo/filtering/pandas/rework/__init__.py b/pm4py/pm4py/algo/filtering/pandas/rework/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3f0559c311fdeb63a5e88e9a95af0d9ad3153781 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/rework/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.rework import rework_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/rework/rework_filter.py b/pm4py/pm4py/algo/filtering/pandas/rework/rework_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..237bcc6e0d210bad073323ed7def4303ad9e5b27 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/rework/rework_filter.py @@ -0,0 +1,82 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import constants, xes_constants, exec_utils, pandas_utils +from typing import Optional, Dict, Any +import pandas as pd +from copy import copy + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MIN_OCCURRENCES = "min_occurrences" + POSITIVE = "positive" + + +INT_CASE_ACT_SIZE = "@@int_case_act_size" + + +def apply(df0: pd.DataFrame, activity: str, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Applies the rework filter on the provided dataframe and activity. + This filter the cases of the log having at least Parameters.MIN_OCCURRENCES (default: 2) occurrences + of the given activity. + + It is also possible (setting Parameters.POSITIVE to False) to retrieve the cases of the log not having the + given activity or having the activity occurred less than Parameters.MIN_OCCURRENCES times. + + Parameters + ------------------- + df0 + Dataframe + activity + Activity of which the rework shall be filtered + parameters + Parameters of the filter, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.CASE_ID_KEY => the attribute to use as case ID + - Parameters.MIN_OCCURRENCES => the minimum number of occurrences for the activity + - Parameters.POSITIVE => if True, filters the cases of the log having at least MIN_OCCURRENCES occurrences. + if False, filters the cases of the log where such behavior does not occur. + + Returns + ----------------- + filtered_df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + min_occurrences = exec_utils.get_param_value(Parameters.MIN_OCCURRENCES, parameters, 2) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + df = df0.copy() + df = df[list({activity_key, case_id_key})] + df = df[df[activity_key] == activity] + df[INT_CASE_ACT_SIZE] = df.groupby([activity_key, case_id_key]).cumcount() + cases = pandas_utils.format_unique(df[df[INT_CASE_ACT_SIZE] >= (min_occurrences-1)][case_id_key].unique()) + + if positive: + ret = df0[df0[case_id_key].isin(cases)] + else: + ret = df0[~df0[case_id_key].isin(cases)] + + ret.attrs = copy(df0.attrs) if hasattr(df0, 'attrs') else {} + return ret diff --git a/pm4py/pm4py/algo/filtering/pandas/start_activities/__init__.py b/pm4py/pm4py/algo/filtering/pandas/start_activities/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..74b06cc70d87becaff8f8bc3c062c0627d1a19dd --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/start_activities/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.start_activities import start_activities_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/start_activities/start_activities_filter.py b/pm4py/pm4py/algo/filtering/pandas/start_activities/start_activities_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..92d6648cc27502b0ae6de89749a106c4a48cd0ad --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/start_activities/start_activities_filter.py @@ -0,0 +1,159 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.statistics.start_activities.pandas.get import get_start_activities +from pm4py.util import xes_constants as xes +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_CASEID_KEY +from pm4py.util.constants import GROUPED_DATAFRAME +from enum import Enum +from pm4py.util import exec_utils +from copy import copy +from typing import Optional, Dict, Any, Union, List +import pandas as pd + + +class Parameters(Enum): + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + DECREASING_FACTOR = "decreasingFactor" + GROUP_DATAFRAME = GROUPED_DATAFRAME + POSITIVE = "positive" + + +def apply(df: pd.DataFrame, values: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Filter dataframe on start activities + + Parameters + ---------- + df + Dataframe + values + Values to filter on + parameters + Possible parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Case ID column in the dataframe + Parameters.ACTIVITY_KEY -> Column that represents the activity + Parameters.POSITIVE -> Specifies if the filtered should be applied including traces (positive=True) + or excluding traces (positive=False) + + Returns + ---------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + grouped_df = exec_utils.get_param_value(Parameters.GROUP_DATAFRAME, parameters, None) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + return filter_df_on_start_activities(df, values, case_id_glue=case_id_glue, activity_key=activity_key, + positive=positive, grouped_df=grouped_df) + + +def filter_df_on_start_activities(df, values, case_id_glue=CASE_CONCEPT_NAME, + activity_key=xes.DEFAULT_NAME_KEY, grouped_df=None, positive=True): + """ + Filter dataframe on start activities + + Parameters + ---------- + df + Dataframe + values + Values to filter on + case_id_glue + Case ID column in the dataframe + activity_key + Column that represent the activity + grouped_df + Grouped dataframe + positive + Specifies if the filtered should be applied including traces (positive=True) or excluding traces + (positive=False) + + Returns + ---------- + df + Filtered dataframe + """ + + if grouped_df is None: + grouped_df = df.groupby(case_id_glue, sort=False) + gdf = grouped_df[activity_key].first().isin(values) + i1 = df.set_index(case_id_glue).index + i2 = gdf[gdf].index + if positive: + ret = df[i1.isin(i2)] + else: + ret = df[~i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def filter_df_on_start_activities_nocc(df, nocc, sa_count0=None, case_id_glue=CASE_CONCEPT_NAME, + activity_key=DEFAULT_NAME_KEY, grouped_df=None): + """ + Filter dataframe on start activities number of occurrences + + Parameters + ----------- + df + Dataframe + nocc + Minimum number of occurrences of the start activity + sa_count0 + (if provided) Dictionary that associates each start activity with its count + case_id_glue + Column that contains the Case ID + activity_key + Column that contains the activity + grouped_df + Grouped dataframe + + Returns + ------------ + df + Filtered dataframe + """ + if grouped_df is None: + grouped_df = df.groupby(case_id_glue, sort=False) + first_eve_df = grouped_df.first() + if sa_count0 is None: + parameters = { + Parameters.CASE_ID_KEY: case_id_glue, + Parameters.ACTIVITY_KEY: activity_key, + Parameters.GROUP_DATAFRAME: grouped_df + } + sa_count0 = get_start_activities(df, parameters=parameters) + sa_count = [k for k, v in sa_count0.items() if v >= nocc] + if len(sa_count) < len(sa_count0): + first_eve_df = first_eve_df[first_eve_df[activity_key].isin(sa_count)] + i1 = df.set_index(case_id_glue).index + i2 = first_eve_df.index + ret = df[i1.isin(i2)] + else: + ret = df + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret diff --git a/pm4py/pm4py/algo/filtering/pandas/starts_with/__init__.py b/pm4py/pm4py/algo/filtering/pandas/starts_with/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/starts_with/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/filtering/pandas/starts_with/starts_with_filter.py b/pm4py/pm4py/algo/filtering/pandas/starts_with/starts_with_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..880aeffb838375f718ab135a9ba8ccd43ce845df --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/starts_with/starts_with_filter.py @@ -0,0 +1,85 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.statistics.traces.generic.pandas.case_statistics import get_variants_df +from pm4py.util.constants import PARAMETER_CONSTANT_CASEID_KEY, PARAMETER_CONSTANT_ACTIVITY_KEY +from enum import Enum +from pm4py.util import exec_utils +from copy import copy +from typing import Optional, Dict, Any, Union, List +import pandas as pd +from pm4py.util import constants + + +class Parameters(Enum): + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + + +def apply(df: pd.DataFrame, admitted_prefixes: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Apply a filter on variants + + Parameters + ----------- + df + Dataframe + admitted_prefixes + List of admitted prefixes (to include/exclude) + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Column that contains the Case ID + Parameters.ACTIVITY_KEY -> Column that contains the activity + Parameters.POSITIVE -> Specifies if the filter should be applied including traces (positive=True) + or excluding traces (positive=False) + variants_df -> If provided, avoid recalculation of the variants dataframe + + Returns + ----------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + variants_df = parameters["variants_df"] if "variants_df" in parameters else get_variants_df(df, + parameters=parameters) + + admitted_prefixes = list(admitted_prefixes) + first_case_variant = variants_df["variant"].iloc[0] + if isinstance(first_case_variant, tuple): + # manage that as tuple + variants_df = variants_df.copy() + variants_df["variant"] = variants_df["variant"].apply(lambda x: constants.DEFAULT_VARIANT_SEP.join(list(x))) + admitted_prefixes = [constants.DEFAULT_VARIANT_SEP.join(x) for x in admitted_prefixes] + admitted_prefixes = tuple(admitted_prefixes) + + variants_df = variants_df[variants_df["variant"].str.startswith(admitted_prefixes)] + + i1 = df.set_index(case_id_glue).index + i2 = variants_df.index + if positive: + ret = df[i1.isin(i2)] + else: + ret = df[~i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret diff --git a/pm4py/pm4py/algo/filtering/pandas/suffixes/__init__.py b/pm4py/pm4py/algo/filtering/pandas/suffixes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..be585a556f86025af98379923033e0652c861926 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/suffixes/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + diff --git a/pm4py/pm4py/algo/filtering/pandas/suffixes/suffix_filter.py b/pm4py/pm4py/algo/filtering/pandas/suffixes/suffix_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..729784e5b83d3b6c67456e8a1173ed1a1bd0f20e --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/suffixes/suffix_filter.py @@ -0,0 +1,89 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import pandas as pd + +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.util import constants +from pm4py.util import exec_utils +from pm4py.util import xes_constants, pandas_utils + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + INDEX_KEY = "index_key" + INDEX_IN_TRACE_KEY = "index_in_trace_key" + USE_EXTREMES_TIMESTAMP = "use_extremes_timestamp" + TEMP_COLUMN = "temp_column" + FIRST_OR_LAST = "first_or_last" + STRICT = "strict" + + +def apply(df: pd.DataFrame, activity: str, parameters: Optional[Dict[Any, Any]] = None): + """ + Filter all the suffixes to a given activity (first or last occurrence of the activity in the case). + + Parameters + ---------------- + df + Dataframe + parameters + Parameters of the algorithm: + - Parameters.CASE_ID_KEY => the case identifier column. + - Parameters.ACTIVITY_KEY => the activity column. + - Parameters.INDEX_IN_TRACE_KEY => attribute that should act as container of the index of the event inside + the case. + - Parameters.TEMP_COLUMN => temporary column which is used for internal purposes. + - Parameters.FIRST_OR_LAST => filter on the first or last occurrence of an activity in the dataframe. + - Parameters.STRICT => applies the filter in a strict (<) or lean (<=) way (boolean). + + Returns + ---------------- + df + Dataframe filtered keeping the prefixes to a given activity (first or last occurrence of the activity in the case). + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + index_in_trace_key = exec_utils.get_param_value(Parameters.INDEX_IN_TRACE_KEY, parameters, constants.DEFAULT_INDEX_IN_TRACE_KEY) + temp_column = exec_utils.get_param_value(Parameters.TEMP_COLUMN, parameters, "@@temp_column") + first_or_last = exec_utils.get_param_value(Parameters.FIRST_OR_LAST, parameters, "first") + strict = exec_utils.get_param_value(Parameters.STRICT, parameters, True) + + if index_in_trace_key not in df.columns: + df = pandas_utils.insert_ev_in_tr_index(df, column_name=index_in_trace_key, case_id=case_id_key) + + position_activity = df[df[activity_key] == activity].groupby(case_id_key) + if first_or_last == "first": + position_activity = position_activity.first() + elif first_or_last == "last": + position_activity = position_activity.last() + position_activity = position_activity.reset_index()[[case_id_key, index_in_trace_key]].to_dict("records") + position_activity = {x[case_id_key]: x[index_in_trace_key] for x in position_activity} + + df[temp_column] = df[case_id_key].map(position_activity) + if strict: + df = df[df[index_in_trace_key] > df[temp_column]] + else: + df = df[df[index_in_trace_key] >= df[temp_column]] + + return df diff --git a/pm4py/pm4py/algo/filtering/pandas/timestamp/__init__.py b/pm4py/pm4py/algo/filtering/pandas/timestamp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..839eda405e074625ad2005bea7d8f5496e893c47 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/timestamp/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.timestamp import timestamp_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/timestamp/timestamp_filter.py b/pm4py/pm4py/algo/filtering/pandas/timestamp/timestamp_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..079aa883f3dbc73f3642466b8f96746f9e58e124 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/timestamp/timestamp_filter.py @@ -0,0 +1,213 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.algo.filtering.common.timestamp.timestamp_common import get_dt_from_string +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY +from pm4py.util.constants import PARAMETER_CONSTANT_TIMESTAMP_KEY, PARAMETER_CONSTANT_CASEID_KEY +from enum import Enum +from pm4py.util import exec_utils, pandas_utils, constants +from copy import copy +from typing import Optional, Dict, Any, Union +import pandas as pd +import datetime + + +class Parameters(Enum): + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + + +def filter_traces_contained(df: pd.DataFrame, dt1: Union[str, datetime.datetime], dt2: Union[str, datetime.datetime], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Get traces that are contained in the given interval + + Parameters + ---------- + df + Pandas dataframe + dt1 + Lower bound to the interval (possibly expressed as string, but automatically converted) + dt2 + Upper bound to the interval (possibly expressed as string, but automatically converted) + parameters + Possible parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> Attribute to use as timestamp + Parameters.CASE_ID_KEY -> Column that contains the timestamp + + Returns + ---------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + dt1 = get_dt_from_string(dt1) + dt2 = get_dt_from_string(dt2) + + grouped_df = df[[case_id_glue, timestamp_key]].groupby(case_id_glue) + first = grouped_df.first() + last = grouped_df.last() + last.columns = [str(col) + '_2' for col in last.columns] + stacked = pandas_utils.concat([first, last], axis=1) + stacked = stacked[stacked[timestamp_key] >= dt1] + stacked = stacked[stacked[timestamp_key + "_2"] <= dt2] + i1 = df.set_index(case_id_glue).index + i2 = stacked.index + ret = df[i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def filter_traces_intersecting(df: pd.DataFrame, dt1: Union[str, datetime.datetime], dt2: Union[str, datetime.datetime], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Filter traces intersecting the given interval + + Parameters + ---------- + df + Pandas dataframe + dt1 + Lower bound to the interval (possibly expressed as string, but automatically converted) + dt2 + Upper bound to the interval (possibly expressed as string, but automatically converted) + parameters + Possible parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> Attribute to use as timestamp + Parameters.CASE_ID_KEY -> Column that contains the timestamp + + Returns + ---------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + dt1 = get_dt_from_string(dt1) + dt2 = get_dt_from_string(dt2) + grouped_df = df[[case_id_glue, timestamp_key]].groupby(case_id_glue) + first = grouped_df.first() + last = grouped_df.last() + last.columns = [str(col) + '_2' for col in last.columns] + stacked = pandas_utils.concat([first, last], axis=1) + stacked1 = stacked[stacked[timestamp_key] > dt1] + stacked1 = stacked1[stacked1[timestamp_key] < dt2] + stacked2 = stacked[stacked[timestamp_key + "_2"] > dt1] + stacked2 = stacked2[stacked2[timestamp_key + "_2"] < dt2] + stacked3 = stacked[stacked[timestamp_key] < dt1] + stacked3 = stacked3[stacked3[timestamp_key + "_2"] > dt2] + stacked = pandas_utils.concat([stacked1, stacked2, stacked3], axis=0) + i1 = df.set_index(case_id_glue).index + i2 = stacked.index + ret = df[i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def apply_events(df: pd.DataFrame, dt1: Union[str, datetime.datetime], dt2: Union[str, datetime.datetime], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Get a new log containing all the events contained in the given interval + + Parameters + ---------- + df + Pandas dataframe + dt1 + Lower bound to the interval (possibly expressed as string, but automatically converted) + dt2 + Upper bound to the interval (possibly expressed as string, but automatically converted) + parameters + Possible parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> Attribute to use as timestamp + + Returns + ---------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + dt1 = get_dt_from_string(dt1) + dt2 = get_dt_from_string(dt2) + + ret = df[df[timestamp_key] >= dt1] + ret = ret[ret[timestamp_key] <= dt2] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def filter_traces_attribute_in_timeframe(df: pd.DataFrame, attribute: str, attribute_value: str, dt1: Union[str, datetime.datetime], dt2: Union[str, datetime.datetime], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Get a new log containing all the traces that have an event in the given interval with the specified attribute value + + Parameters + ----------- + df + Dataframe + attribute + The attribute to filter on + attribute_value + The attribute value to filter on + dt1 + Lower bound to the interval + dt2 + Upper bound to the interval + parameters + Possible parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> Attribute to use as timestamp + + Returns + ------------ + df + Filtered dataframe + """ + + if parameters is None: + parameters = {} + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + + dt1 = get_dt_from_string(dt1) + dt2 = get_dt_from_string(dt2) + + filtered = df[df[attribute] == attribute_value] + filtered = filtered[filtered[timestamp_key] >= dt1] + filtered = filtered[filtered[timestamp_key] <= dt2] + filtered = df[df[case_id_glue].isin(filtered[case_id_glue])] + + filtered.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return filtered + + +def apply(df, parameters=None): + del df + del parameters + raise Exception("apply method not available for timestamp filter") + + +def apply_auto_filter(df, parameters=None): + del df + del parameters + raise Exception("apply_auto_filter method not available for timestamp filter") diff --git a/pm4py/pm4py/algo/filtering/pandas/timestamp_case_grouping/__init__.py b/pm4py/pm4py/algo/filtering/pandas/timestamp_case_grouping/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b33a75fcda740e83e1d2963c28189238bf62055d --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/timestamp_case_grouping/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.pandas.timestamp_case_grouping import timestamp_case_grouping_filter diff --git a/pm4py/pm4py/algo/filtering/pandas/timestamp_case_grouping/timestamp_case_grouping_filter.py b/pm4py/pm4py/algo/filtering/pandas/timestamp_case_grouping/timestamp_case_grouping_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..e3396176cf9d34fa7f4b75a3e15b7327dfb623e5 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/timestamp_case_grouping/timestamp_case_grouping_filter.py @@ -0,0 +1,78 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Optional, Dict, Any, Union +from pm4py.util import constants, xes_constants, exec_utils +from pm4py.objects.conversion.log import converter as log_converter +from enum import Enum + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + FILTER_TYPE = "filter_type" + + +def apply(log_obj: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Groups the events of the same case happening at the same timestamp, + providing option to keep the first event of each group, keep the last event of each group, create an event + having as activity the concatenation of the activities happening in the group + + Parameters + --------------- + log_obj + Log object (EventLog, EventStream, Pandas dataframe) + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => the case identifier to be used + - Parameters.ACTIVITY_KEY => the attribute to be used as activity + - Parameters.TIMESTAMP_KEY => the attribute to be used as timestamp + - Parameters.FILTER_TYPE => the type of filter to be applied: + first => keeps the first event of each group + last => keeps the last event of each group + concat => creates an event having as activity the concatenation of the activities happening in the group + + Returns + --------------- + filtered_dataframe + Filtered dataframe object + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + filter_type = exec_utils.get_param_value(Parameters.FILTER_TYPE, parameters, "first") + + log_obj = log_converter.apply(log_obj, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + gdf = log_obj.groupby([case_id_key, timestamp_key], sort=False) + + ret = None + if filter_type == "first": + ret = gdf.first() + elif filter_type == "last": + ret = gdf.last() + elif filter_type == "concat": + ret = gdf.first() + ret[activity_key] = gdf[activity_key].agg(list).apply(lambda x: " & ".join(sorted(list(x)))) + + ret = ret.reset_index() + return ret diff --git a/pm4py/pm4py/algo/filtering/pandas/traces/__init__.py b/pm4py/pm4py/algo/filtering/pandas/traces/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..be585a556f86025af98379923033e0652c861926 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/traces/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + diff --git a/pm4py/pm4py/algo/filtering/pandas/traces/trace_filter.py b/pm4py/pm4py/algo/filtering/pandas/traces/trace_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..b9c410dc626afc1a7bba073ba0c29d5a71ec9eb0 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/traces/trace_filter.py @@ -0,0 +1,88 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.statistics.traces.generic.pandas.case_statistics import get_variants_df +from pm4py.util.constants import PARAMETER_CONSTANT_CASEID_KEY, PARAMETER_CONSTANT_ACTIVITY_KEY +from enum import Enum +from pm4py.util import exec_utils +from pm4py.algo.filtering.common.traces.infix_to_regex import translate_infix_to_regex +from copy import copy +from typing import Optional, Dict, Any, Union, List +import pandas as pd +from pm4py.util import constants +import re + + +class Parameters(Enum): + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + + +def apply(df: pd.DataFrame, admitted_traces: List[List[str]], + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Apply a filter on variants + + Parameters + ----------- + df + Dataframe + admitted_traces + List of admitted traces (to include/exclude) + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Column that contains the Case ID + Parameters.ACTIVITY_KEY -> Column that contains the activity + Parameters.POSITIVE -> Specifies if the filter should be applied including traces (positive=True) + or excluding traces (positive=False) + variants_df -> If provided, avoid recalculation of the variants dataframe + + Returns + ----------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + variants_df = parameters["variants_df"] if "variants_df" in parameters else get_variants_df(df, + parameters=parameters) + + first_case_variant = variants_df["variant"].iloc[0] + if isinstance(first_case_variant, tuple): + # manage that as tuple + variants_df = variants_df.copy() + variants_df["variant"] = variants_df["variant"].apply(lambda x: constants.DEFAULT_VARIANT_SEP.join(list(x))) + + filter_regex = "|".join([f"({translate_infix_to_regex(inf)})" for inf in admitted_traces]) + variants_df["matches_infix"] = variants_df["variant"].apply(lambda t: bool(re.search(filter_regex, t))) + variants_df = variants_df[variants_df["matches_infix"]] + + i1 = df.set_index(case_id_glue).index + i2 = variants_df.index + if positive: + ret = df[i1.isin(i2)] + else: + ret = df[~i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret diff --git a/pm4py/pm4py/algo/filtering/pandas/variants/__init__.py b/pm4py/pm4py/algo/filtering/pandas/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/variants/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/algo/filtering/pandas/variants/variants_filter.py b/pm4py/pm4py/algo/filtering/pandas/variants/variants_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..8b8f1da37af47e2c1e914deceb82f0f7aa66d209 --- /dev/null +++ b/pm4py/pm4py/algo/filtering/pandas/variants/variants_filter.py @@ -0,0 +1,170 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.statistics.traces.generic.pandas.case_statistics import get_variants_df +from pm4py.statistics.variants.pandas import get as variants_get +from pm4py.util.constants import PARAMETER_CONSTANT_CASEID_KEY, PARAMETER_CONSTANT_ACTIVITY_KEY +from enum import Enum +from pm4py.util import exec_utils +from copy import copy +from typing import Optional, Dict, Any, Union, List +import pandas as pd + + +class Parameters(Enum): + CASE_ID_KEY = PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + DECREASING_FACTOR = "decreasingFactor" + POSITIVE = "positive" + + +def apply(df: pd.DataFrame, admitted_variants: List[List[str]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Apply a filter on variants + + Parameters + ----------- + df + Dataframe + admitted_variants + List of admitted variants (to include/exclude) + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Column that contains the Case ID + Parameters.ACTIVITY_KEY -> Column that contains the activity + Parameters.POSITIVE -> Specifies if the filter should be applied including traces (positive=True) + or excluding traces (positive=False) + variants_df -> If provided, avoid recalculation of the variants dataframe + + Returns + ----------- + df + Filtered dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + variants_df = parameters["variants_df"] if "variants_df" in parameters else get_variants_df(df, + parameters=parameters) + variants_df = variants_df[variants_df["variant"].isin(admitted_variants)] + i1 = df.set_index(case_id_glue).index + i2 = variants_df.index + if positive: + ret = df[i1.isin(i2)] + else: + ret = df[~i1.isin(i2)] + + ret.attrs = copy(df.attrs) if hasattr(df, 'attrs') else {} + return ret + + +def filter_variants_top_k(log, k, parameters=None): + """ + Keeps the top-k variants of the log + + Parameters + ------------- + log + Event log + k + Number of variants that should be kept + parameters + Parameters + + Returns + ------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + variants = variants_get.get_variants_count(log, parameters=parameters) + variant_count = [] + for variant in variants: + variant_count.append([variant, variants[variant]]) + variant_count = sorted(variant_count, key=lambda x: (x[1], x[0]), reverse=True) + variant_count = variant_count[:min(k, len(variant_count))] + variants_to_filter = [x[0] for x in variant_count] + + return apply(log, variants_to_filter, parameters=parameters) + + +def filter_variants_by_coverage_percentage(log, min_coverage_percentage, parameters=None): + """ + Filters the variants of the log by a coverage percentage + (e.g., if min_coverage_percentage=0.4, and we have a log with 1000 cases, + of which 500 of the variant 1, 400 of the variant 2, and 100 of the variant 3, + the filter keeps only the traces of variant 1 and variant 2). + + Parameters + --------------- + log + Event log + min_coverage_percentage + Minimum allowed percentage of coverage + parameters + Parameters + + Returns + --------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + + variants = variants_get.get_variants_count(log, parameters=parameters) + allowed_variants = [x for x, y in variants.items() if y >= min_coverage_percentage * log[case_id_glue].nunique()] + + return apply(log, allowed_variants, parameters=parameters) + + +def filter_variants_by_maximum_coverage_percentage(log, max_coverage_percentage, parameters=None): + """ + Filters the variants of the log by a maximum coverage percentage + (e.g., if max_coverage_percentage=0.4, and we have a log with 1000 cases, + of which 500 of the variant 1, 400 of the variant 2, and 100 of the variant 3, + the filter keeps only the traces of variant w and variant 3). + + Parameters + --------------- + log + Event log + max_coverage_percentage + Maximum allowed percentage of coverage + parameters + Parameters + + Returns + --------------- + filtered_log + Filtered log + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + + variants = variants_get.get_variants_count(log, parameters=parameters) + allowed_variants = [x for x, y in variants.items() if y <= max_coverage_percentage * log[case_id_glue].nunique()] + + return apply(log, allowed_variants, parameters=parameters) \ No newline at end of file diff --git a/pm4py/pm4py/algo/label_splitting/__init__.py b/pm4py/pm4py/algo/label_splitting/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..653f25bb2d925da68db0193ce4119f0d3ca37f8a --- /dev/null +++ b/pm4py/pm4py/algo/label_splitting/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.label_splitting import algorithm, variants diff --git a/pm4py/pm4py/algo/label_splitting/algorithm.py b/pm4py/pm4py/algo/label_splitting/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..5bc7a328346ab9f9ad7296712ecaeea6ecd78fab --- /dev/null +++ b/pm4py/pm4py/algo/label_splitting/algorithm.py @@ -0,0 +1,55 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from enum import Enum +from pm4py.util import exec_utils +from pm4py.algo.label_splitting.variants import contextual + + +class Variants(Enum): + CONTEXTUAL = contextual + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], variant=Variants.CONTEXTUAL, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Applies a technique of label-splitting, to distinguish between different meanings of the same + activity. The result is a Pandas dataframe where the label-splitting has been applied. + + Minimum Viable Example: + + import pm4py + from pm4py.algo.label_splitting import algorithm as label_splitter + + log = pm4py.read_xes("tests/input_data/receipt.xes") + log2 = label_splitter.apply(log) + + + Parameters + --------------- + log + Event log + parameters + Variant-specific parameters + + Returns + --------------- + dataframe + Pandas dataframe with the re-labeling + """ + return exec_utils.get_variant(variant).apply(log, parameters) diff --git a/pm4py/pm4py/algo/label_splitting/variants/__init__.py b/pm4py/pm4py/algo/label_splitting/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ba63a1c9bd15d4de2c4eeb640b8c840d41cebe62 --- /dev/null +++ b/pm4py/pm4py/algo/label_splitting/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.label_splitting.variants import contextual diff --git a/pm4py/pm4py/algo/label_splitting/variants/contextual.py b/pm4py/pm4py/algo/label_splitting/variants/contextual.py new file mode 100644 index 0000000000000000000000000000000000000000..a83bb6653a86f3d98bb672c187f18998505eeb3f --- /dev/null +++ b/pm4py/pm4py/algo/label_splitting/variants/contextual.py @@ -0,0 +1,213 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.objects.conversion.log import converter as log_converter +import pandas as pd +from enum import Enum +from pm4py.util import constants, xes_constants, exec_utils, pandas_utils, nx_utils +from pm4py.util import regex, string_distance + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + INDEX_KEY = "index_key" + TARGET_COLUMN = "target_column" + ACTIVITIES_SUFFIX = "activities_suffix" + TARGET_ACTIVITIES = "target_activities" + PREFIX_LENGTH = "prefix_length" + SUFFIX_LENGTH = "suffix_length" + MIN_EDGE_WEIGHT = "min_edge_weight" + + +def __get_tuple_char_mapping(tup: List[str], sharobj: regex.SharedObj): + """ + Maps every string in a tuple to a different character + """ + ret = [] + for i in range(len(tup)): + if tup[i] not in sharobj.mapping_dictio: + regex.get_new_char(tup[i], sharobj) + + ret.append(sharobj.mapping_dictio[tup[i]]) + + return "".join(ret) + + +def __normalized_edit_distance(s1: str, s2: str) -> float: + """ + Computes the normalized edit distance between the two provided strings (0 to 1) + """ + ned = 0 + if len(s1) > 0 or len(s2) > 0: + ed = string_distance.levenshtein(s1, s2) + ned = ed / max(len(s1), len(s2)) + return ned + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Applies the technique of contextual label-splitting, to distinguish between different meanings of the same + activity. The result is a Pandas dataframe where the contextual label-splitting has been applied. + + Reference paper: + van Zelst, Sebastiaan J., et al. "Context-Based Activity Label-Splitting." International Conference on Business Process Management. Cham: Springer Nature Switzerland, 2023. + + Minimum Viable Example: + + import pm4py + from pm4py.algo.label_splitting import algorithm as label_splitter + + log = pm4py.read_xes("tests/input_data/receipt.xes") + log2 = label_splitter.apply(log, variant=label_splitter.Variants.CONTEXTUAL) + + + Parameters + --------------- + log + Event log + parameters + Possible parameters of the algorithm, including: + - Parameters.PREFIX_LENGTH => the length of the prefix to consider in the context + - Parameters.SUFFIX_LENGTH => the length of the suffix to consider in the context + - Parameters.MIN_EDGE_WEIGHT => the minimum weight for an edge to be included in the segments graph + - Parameters.TARGET_ACTIVITIES => the activities which should be targeted by the relabeling (default: all) + - Parameters.TARGET_COLUMN => the column that should contain the re-labeled activity + + Returns + --------------- + dataframe + Pandas dataframe with the re-labeling + """ + if parameters is None: + parameters = {} + + index_key = exec_utils.get_param_value(Parameters.INDEX_KEY, parameters, constants.DEFAULT_INDEX_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + target_column = exec_utils.get_param_value(Parameters.TARGET_COLUMN, parameters, xes_constants.DEFAULT_NAME_KEY) + activities_suffix = exec_utils.get_param_value(Parameters.ACTIVITIES_SUFFIX, parameters, "_") + + target_activities = exec_utils.get_param_value(Parameters.TARGET_ACTIVITIES, parameters, None) + + prefix_length = exec_utils.get_param_value(Parameters.PREFIX_LENGTH, parameters, 2) + suffix_length = exec_utils.get_param_value(Parameters.SUFFIX_LENGTH, parameters, 2) + min_edge_weight = exec_utils.get_param_value(Parameters.MIN_EDGE_WEIGHT, parameters, 0.0) + + sharobj = regex.SharedObj() + log = log_converter.apply(log, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + if index_key not in log: + log = pandas_utils.insert_index(log, index_key) + + gdf = log.groupby(case_id_key, sort=False) + output = gdf[[activity_key, index_key]].agg(list).to_dict() + cases = list(output[activity_key].keys()) + + # STEP 0 : transform the event log into two lists + # - the one containing the activities executed for each case + # - the second one containing the indexes (positions) of the single events in the log + activities = output[activity_key] + activities = [activities[c] for c in cases] + indexes = output[index_key] + indexes = [indexes[c] for c in cases] + + # keep as baseline mapping (if remapping does not apply) + # the original activity. + final_mapping = {} + for i in range(len(indexes)): + for j in range(len(indexes[i])): + final_mapping[indexes[i][j]] = activities[i][j] + pass + + dict_segments_indexes = {} + segments_chars_mapping = {} + dict_segments_clustering = {} + + # keep some internal dictionaries. + # in particular, 'dict_segments_indexes' maps every activity to some corresponding segments (prefix+suffix). + # each prefix is mapped to the set of indexes (of the events) of the log for which the prefix applies. + for i in range(len(activities)): + for j in range(len(activities[i])): + segment = (activities[i][j], tuple(activities[i][max(0, j - prefix_length):j] + activities[i][j + 1:min( + len(activities[i]), j + suffix_length + 1)])) + if activities[i][j] not in dict_segments_indexes: + dict_segments_indexes[activities[i][j]] = {} + if segment not in dict_segments_indexes[activities[i][j]]: + dict_segments_indexes[activities[i][j]][segment] = set() + if segment[1] not in segments_chars_mapping: + segments_chars_mapping[segment[1]] = __get_tuple_char_mapping(segment[1], sharobj) + dict_segments_indexes[activities[i][j]][segment].add(indexes[i][j]) + + G = nx_utils.Graph() + + # STEP 1 + # creates the activity graph measuring the normalized edit-distance between every couple of segments related + # to the same activity. if the weight of the connection is greater than a given amount (by default 0.0) + # the corresponding connection is added to the graph + for act in dict_segments_indexes: + if target_activities is None or act in target_activities: + for segment in dict_segments_indexes[act]: + G.add_node(segment) + + for segment in dict_segments_indexes[act]: + map_seg = segments_chars_mapping[segment[1]] + for segment2 in dict_segments_indexes[act]: + if segment != segment2: + map_seg2 = segments_chars_mapping[segment2[1]] + + weight = 1 - __normalized_edit_distance(map_seg, map_seg2) + if weight > min_edge_weight: + G.add_edge(segment, segment2, weight=weight) + + # STEP 2 + # applies modularity maximization clustering and stores the results + if G.edges: + communities = nx_utils.greedy_modularity_communities(G, weight="weight") + else: + # when the graph contains no edges, avoid to apply clustering, instead + # consider each node as standalone + nodes = list(G.nodes) + communities = [[nodes[i]] for i in range(len(nodes))] + + for i, comm in enumerate(communities): + comm = list(comm) + act = comm[0][0] + comm = [x for y in comm for x in dict_segments_indexes[act][y]] + + if act not in dict_segments_clustering: + dict_segments_clustering[act] = [] + + dict_segments_clustering[act].append([i, comm]) + + # STEP 3 + # set-up the re-labeling if needed + for act in dict_segments_clustering: + dict_segments_clustering[act] = sorted(dict_segments_clustering[act], key=lambda x: (len(x[1]), x[0]), reverse=True) + + if len(dict_segments_clustering[act]) > 1: + #print(act, "remapped") + + for i in range(len(dict_segments_clustering[act])): + for x in dict_segments_clustering[act][i][1]: + final_mapping[x] = act + activities_suffix + str(i) + + # STEP 4 + # eventually, the relabeling applies + log[target_column] = log[index_key].map(final_mapping) + + return log diff --git a/pm4py/pm4py/algo/merging/__init__.py b/pm4py/pm4py/algo/merging/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..cf526e36f240151763db545a783f0e36831d1fb0 --- /dev/null +++ b/pm4py/pm4py/algo/merging/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.merging import case_relations diff --git a/pm4py/pm4py/algo/merging/case_relations/__init__.py b/pm4py/pm4py/algo/merging/case_relations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..596375ae6d0adb55f67224efbd633b3c9a79a0cf --- /dev/null +++ b/pm4py/pm4py/algo/merging/case_relations/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.merging.case_relations import algorithm, variants diff --git a/pm4py/pm4py/algo/merging/case_relations/algorithm.py b/pm4py/pm4py/algo/merging/case_relations/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..476941b7fb4b9e57aa2bbf50a1d9ada097dcce2b --- /dev/null +++ b/pm4py/pm4py/algo/merging/case_relations/algorithm.py @@ -0,0 +1,57 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.merging.case_relations.variants import pandas +from enum import Enum +import pandas as pd +from typing import Optional, Dict, Any +from pm4py.util import exec_utils + + +class Variants(Enum): + PANDAS = pandas + + +def apply(dataframe1: pd.DataFrame, dataframe2: pd.DataFrame, case_relations: pd.DataFrame, variant=Variants.PANDAS, + parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Merges the two dataframes (dataframe1 and dataframe2), inserting the events of the second + dataframe inside the cases of the first dataframe. + This is done using a background knowledge provided in the case_relations dataframe, where the cases of the two dataframes + are put in relations. + E.g., if in dataframe1 and dataframe2 there are two case ID columns (case:concept:name), + they are put in relations by case_relations having two columns case:concept:name_LEFT and case:concept:name_RIGHT + + Parameters + ----------------- + dataframe1 + Reference dataframe (in which the events of the other dataframe are inserted) + dataframe2 + Second dataframe (to insert in the cases of the first) + case_relations + Case relations dataframe + variant + Variant of the algorithm to use, available ones: + - Variants.PANDAS + parameters + Variant-specific parameters + + Returns + ---------------- + merged_dataframe + Merged dataframe + """ + return exec_utils.get_variant(variant).apply(dataframe1, dataframe2, case_relations, parameters=parameters) diff --git a/pm4py/pm4py/algo/merging/case_relations/variants/__init__.py b/pm4py/pm4py/algo/merging/case_relations/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..36f6099035c833ec64e86f556bd329d567b42d52 --- /dev/null +++ b/pm4py/pm4py/algo/merging/case_relations/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.merging.case_relations.variants import pandas diff --git a/pm4py/pm4py/algo/merging/case_relations/variants/pandas.py b/pm4py/pm4py/algo/merging/case_relations/variants/pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..1066a94352703cad76eeb2a64e9ab830ec2132d7 --- /dev/null +++ b/pm4py/pm4py/algo/merging/case_relations/variants/pandas.py @@ -0,0 +1,75 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import pandas as pd +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from enum import Enum +from typing import Optional, Dict, Any + + +class Parameters(Enum): + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + LEFT_SUFFIX = "left_suffix" + RIGHT_SUFFIX = "right_suffix" + + +def apply(dataframe1: pd.DataFrame, dataframe2: pd.DataFrame, case_relations: pd.DataFrame, + parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Merges the two dataframes (dataframe1 and dataframe2), inserting the events of the second + dataframe inside the cases of the first dataframe. + This is done using a background knowledge provided in the case_relations dataframe, where the cases of the two dataframes + are put in relations. + E.g., if in dataframe1 and dataframe2 there are two case ID columns (case:concept:name), + they are put in relations by case_relations having two columns case:concept:name_LEFT and case:concept:name_RIGHT + + Parameters + ----------------- + dataframe1 + Reference dataframe (in which the events of the other dataframe are inserted) + dataframe2 + Second dataframe (to insert in the cases of the first) + case_relations + Case relations dataframe + parameters + Parameters of the algorithm, including: + - Parameters.TIMESTAMP_KEY => the timestamp key to use (default: time:timestamp) + - Parameters.CASE_ID_KEY => the case identifier to use (default: case:concept:name) + - Parameters.LEFT_SUFFIX => the suffix to the case identifier column of the first dataframe + - Parameters.RIGHT_SUFFIX => the suffix to the case identifier column of the second dataframe + + Returns + ---------------- + merged_dataframe + Merged dataframe + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + left_suffix = exec_utils.get_param_value(Parameters.LEFT_SUFFIX, parameters, "_LEFT") + right_suffix = exec_utils.get_param_value(Parameters.RIGHT_SUFFIX, parameters, "_RIGHT") + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + dataframe2 = dataframe2.merge(case_relations, left_on=case_id_key, right_on=case_id_key + right_suffix) + dataframe2[case_id_key] = dataframe2[case_id_key + left_suffix] + + dataframe1 = pandas_utils.concat([dataframe1, dataframe2]) + dataframe1 = dataframe1.sort_values([case_id_key, timestamp_key]) + + return dataframe1 diff --git a/pm4py/pm4py/algo/organizational_mining/__init__.py b/pm4py/pm4py/algo/organizational_mining/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a349f3afe1bb1fb2e6437038505dbe2deecbb558 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.organizational_mining import util, local_diagnostics, resource_profiles, roles, sna, network_analysis diff --git a/pm4py/pm4py/algo/organizational_mining/local_diagnostics/__init__.py b/pm4py/pm4py/algo/organizational_mining/local_diagnostics/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..49c7dce0837f768c370ac7890c2b5d2f86d6d4c7 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/local_diagnostics/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.local_diagnostics import algorithm diff --git a/pm4py/pm4py/algo/organizational_mining/local_diagnostics/algorithm.py b/pm4py/pm4py/algo/organizational_mining/local_diagnostics/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..7656c0fab3c96b1f7ada7f663023f47e3eb707e2 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/local_diagnostics/algorithm.py @@ -0,0 +1,330 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Union, Optional, Dict, Any, List + +import pandas as pd + +from pm4py.algo.organizational_mining import util +from pm4py.objects.log.obj import EventLog +from pm4py.util import constants + + +class Parameters(Enum): + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + GROUP_KEY = constants.PARAMETER_CONSTANT_GROUP_KEY + + +class Outputs(Enum): + GROUP_RELATIVE_FOCUS = "group_relative_focus" + GROUP_RELATIVE_STAKE = "group_relative_stake" + GROUP_COVERAGE = "group_coverage" + GROUP_MEMBER_CONTRIBUTION = "group_member_contribution" + + +def apply_from_clustering_or_roles(log_obj: Union[pd.DataFrame, EventLog], ja_clustering_or_roles: Dict[str, List[str]], + parameters: Optional[Dict[Any, str]] = None) -> Dict[str, Any]: + """ + Provides the local diagnostics for the organizational model starting from a log object and the results + of the similar activities clustering / the roles detection algorithm. + + The approach implemented is the one described in: + Yang, Jing, et al. "OrgMining 2.0: A Novel Framework for Organizational Model Mining from Event Logs." + arXiv preprint arXiv:2011.12445 (2020). + + Parameters + -------------- + log_obj + Log object + ja_clustering_or_roles + Result of the similar activities clustering / the roles detection algorithm + parameters + Parameters of the algorithm, including: + - pm4py:param:resource_key => the resource attribute + - pm4py:param:activity_key => the activity attribute + - pm4py:param:group_key => the group + + Returns + --------------- + Dictionary containing four keys: + - group_relative_focus => relative focus metric + - group_relative_stake => relative stake metric + - group_coverage => group coverage metric + - group_member_contribution => group member contribution metric + """ + if parameters is None: + parameters = {} + + res_act, act_res = util.get_res_act_from_log(log_obj, parameters=parameters) + resources = util.get_resources_from_log(log_obj, parameters=parameters) + + if type(ja_clustering_or_roles) is list: + ja_clustering_or_roles = {str(i): ja_clustering_or_roles[i].originator_importance for i in range(len(ja_clustering_or_roles))} + + groups = {} + for cluster in ja_clustering_or_roles: + groups[cluster] = {} + for res in ja_clustering_or_roles[cluster]: + groups[cluster][res] = resources[res] + + return __apply(res_act, act_res, groups, parameters=parameters) + + +def apply_from_group_attribute(log_obj: Union[pd.DataFrame, EventLog], parameters: Optional[Dict[Any, str]] = None) -> Dict[str, Any]: + """ + Provides the local diagnostics for the organizational model starting from a log object and considering + the group specified by the attribute + + The approach implemented is the one described in: + Yang, Jing, et al. "OrgMining 2.0: A Novel Framework for Organizational Model Mining from Event Logs." + arXiv preprint arXiv:2011.12445 (2020). + + Parameters + -------------- + log_obj + Log object + parameters + Parameters of the algorithm, including: + - pm4py:param:resource_key => the resource attribute + - pm4py:param:activity_key => the activity attribute + - pm4py:param:group_key => the group + + Returns + --------------- + Dictionary containing four keys: + - group_relative_focus => relative focus metric + - group_relative_stake => relative stake metric + - group_coverage => group coverage metric + - group_member_contribution => group member contribution metric + """ + if parameters is None: + parameters = {} + + res_act, act_res = util.get_res_act_from_log(log_obj, parameters=parameters) + groups = util.get_groups_from_log(log_obj, parameters=parameters) + return __apply(res_act, act_res, groups, parameters=parameters) + + +def __apply(res_act: Dict[str, Dict[str, int]], act_res: Dict[str, Dict[str, int]], groups: Dict[str, Dict[str, int]], + parameters: Optional[Dict[Any, str]] = None) -> Dict[str, Any]: + """ + Provides the local diagnostics for the organizational model + + The approach implemented is the one described in: + Yang, Jing, et al. "OrgMining 2.0: A Novel Framework for Organizational Model Mining from Event Logs." + arXiv preprint arXiv:2011.12445 (2020). + + Parameters + ---------------- + res_act + Dictionary resources-activities-occurrences + act_res + Dictionary activities-resources-occurrences + groups + Dictionary groups-resources-occurrences + parameters + Parameters of the algorithm + + Returns + ----------------- + dict + Dictionary containing four keys: + - group_relative_focus => relative focus metric + - group_relative_stake => relative stake metric + - group_coverage => group coverage metric + - group_member_contribution => group member contribution metric + """ + if parameters is None: + parameters = {} + + ret = {} + ret[Outputs.GROUP_RELATIVE_FOCUS.value] = __group_relative_focus(res_act, act_res, groups, parameters=parameters) + ret[Outputs.GROUP_RELATIVE_STAKE.value] = __group_relative_stake(res_act, act_res, groups, parameters=parameters) + ret[Outputs.GROUP_COVERAGE.value] = __group_coverage(res_act, act_res, groups, parameters=parameters) + ret[Outputs.GROUP_MEMBER_CONTRIBUTION.value] = __group_member_contribution(res_act, act_res, groups, + parameters=parameters) + + return ret + + +def __group_relative_focus(res_act: Dict[str, Dict[str, int]], act_res: Dict[str, Dict[str, int]], + groups: Dict[str, Dict[str, int]], parameters: Optional[Dict[Any, str]] = None) -> Dict[ + str, Dict[str, float]]: + """ + Calculates the relative focus metric + + GROUP RELATIVE FOCUS (on a given type of work) specifies how much a resource group performed this type of work + compared to the overall workload of the group. It can be used to measure how the workload of a resource group + is distributed over different types of work, i.e., work diversification of the group. + + The approach implemented is the one described in: + Yang, Jing, et al. "OrgMining 2.0: A Novel Framework for Organizational Model Mining from Event Logs." + arXiv preprint arXiv:2011.12445 (2020). + + Parameters + ---------------- + res_act + Dictionary resources-activities-occurrences + act_res + Dictionary activities-resources-occurrences + groups + Dictionary groups-resources-occurrences + parameters + Parameters of the algorithm + + Returns + ----------------- + metric + Metric value + """ + ret = {} + for g in groups: + res_in_g = groups[g] + ret[g] = {} + for a in act_res: + this = 0 + total = 0 + for r in act_res[a]: + total += act_res[a][r] + if r in res_in_g: + this += act_res[a][r] + ret[g][a] = float(this) / float(total) + return ret + + +def __group_relative_stake(res_act: Dict[str, Dict[str, int]], act_res: Dict[str, Dict[str, int]], + groups: Dict[str, Dict[str, int]], parameters: Optional[Dict[Any, str]] = None) -> Dict[ + str, Dict[str, float]]: + """ + Calculates the relative stake metric + + GROUP RELATIVE STAKE (in a given type of work) specifies how much this type of work was performed by a certain + resource group among all groups. It can be used to measure how the workload devoted to a certain type of work is + distributed over resource groups in an organizational model, i.e., work participation by different groups. + + The approach implemented is the one described in: + Yang, Jing, et al. "OrgMining 2.0: A Novel Framework for Organizational Model Mining from Event Logs." + arXiv preprint arXiv:2011.12445 (2020). + + Parameters + ---------------- + res_act + Dictionary resources-activities-occurrences + act_res + Dictionary activities-resources-occurrences + groups + Dictionary groups-resources-occurrences + parameters + Parameters of the algorithm + + Returns + ----------------- + metric + Metric value + """ + ret = {} + for g in groups: + total = 0 + res_in_g = groups[g] + ret[g] = {} + for a in act_res: + this = 0 + for r in act_res[a]: + if r in res_in_g: + total += act_res[a][r] + this += act_res[a][r] + ret[g][a] = this + for a in act_res: + ret[g][a] = float(ret[g][a]) / float(total) + return ret + + +def __group_coverage(res_act: Dict[str, Dict[str, int]], act_res: Dict[str, Dict[str, int]], + groups: Dict[str, Dict[str, int]], parameters: Optional[Dict[Any, str]] = None) -> Dict[ + str, Dict[str, float]]: + """ + Calculates the group coverage metric + + GROUP COVERAGE with respect to a given type of work specifies the proportion of members of a resource group that + performed this type of work. + + The approach implemented is the one described in: + Yang, Jing, et al. "OrgMining 2.0: A Novel Framework for Organizational Model Mining from Event Logs." + arXiv preprint arXiv:2011.12445 (2020). + + Parameters + ---------------- + res_act + Dictionary resources-activities-occurrences + act_res + Dictionary activities-resources-occurrences + groups + Dictionary groups-resources-occurrences + parameters + Parameters of the algorithm + + Returns + ----------------- + metric + Metric value + """ + ret = {} + for g in groups: + ret[g] = {} + total = sum(groups[g].values()) + for r in groups[g]: + ret[g][r] = float(groups[g][r]) / float(total) + return ret + + +def __group_member_contribution(res_act: Dict[str, Dict[str, int]], act_res: Dict[str, Dict[str, int]], + groups: Dict[str, Dict[str, int]], parameters: Optional[Dict[Any, str]] = None) -> Dict[ + str, Dict[str, Dict[str, int]]]: + """ + Calculates the member contribution metric + + GROUP MEMBER CONTRIBUTION of a member of a resource group with respect to the given type of work specifies how + much of this type of work by the group was performed by the member. It can be used to measure how the workload + of the entire group devoted to a certain type of work is distributed over the group members. + + The approach implemented is the one described in: + Yang, Jing, et al. "OrgMining 2.0: A Novel Framework for Organizational Model Mining from Event Logs." + arXiv preprint arXiv:2011.12445 (2020). + + Parameters + ---------------- + res_act + Dictionary resources-activities-occurrences + act_res + Dictionary activities-resources-occurrences + groups + Dictionary groups-resources-occurrences + parameters + Parameters of the algorithm + + Returns + ----------------- + metric + Metric value + """ + ret = {} + for g in groups: + ret[g] = {} + for r in groups[g]: + ret[g][r] = res_act[r] + return ret diff --git a/pm4py/pm4py/algo/organizational_mining/network_analysis/__init__.py b/pm4py/pm4py/algo/organizational_mining/network_analysis/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..921878828a75a2e4a1be9d8b26d38b4da19cfa2d --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/network_analysis/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.network_analysis import algorithm, variants diff --git a/pm4py/pm4py/algo/organizational_mining/network_analysis/algorithm.py b/pm4py/pm4py/algo/organizational_mining/network_analysis/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..25f8fdef216828dd92a9d3161fec91f02dcdc3b2 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/network_analysis/algorithm.py @@ -0,0 +1,46 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.network_analysis.variants import dataframe +from enum import Enum +from pm4py.util import exec_utils +from typing import Dict, Optional, Any, Tuple, Union +import pandas as pd +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.objects.conversion.log import converter as log_converter + + +class Variants(Enum): + DATAFRAME = dataframe + + +def apply(log: Union[pd.DataFrame, EventLog, EventStream], variant=Variants.DATAFRAME, parameters: Optional[Dict[Any, Any]] = None) -> Dict[Tuple[str, str], Dict[str, Any]]: + """ + Performs the network analysis on the provided event log + + Parameters + ---------------- + log + Event log + parameters + Version-specific parameters + + Returns + ---------------- + network_analysis + Edges of the network analysis (first key: edge; second key: type; value: number of occurrences) + """ + return exec_utils.get_variant(variant).apply(log_converter.apply(log, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters), parameters=parameters) diff --git a/pm4py/pm4py/algo/organizational_mining/network_analysis/variants/__init__.py b/pm4py/pm4py/algo/organizational_mining/network_analysis/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3f8a6aced2fd5b4aee3d3dec638f392223d104d6 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/network_analysis/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.network_analysis.variants import dataframe diff --git a/pm4py/pm4py/algo/organizational_mining/network_analysis/variants/dataframe.py b/pm4py/pm4py/algo/organizational_mining/network_analysis/variants/dataframe.py new file mode 100644 index 0000000000000000000000000000000000000000..e94bf7f94e8950b93e27f6df2b25a651e9061591 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/network_analysis/variants/dataframe.py @@ -0,0 +1,185 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils +from pm4py.util import xes_constants, constants, pandas_utils +import pandas as pd +from typing import Dict, Optional, Any, Tuple +from pm4py.util.business_hours import soj_time_business_hours_diff +from pm4py.algo.discovery.ocel.link_analysis.variants import classic as link_analysis + + +class Parameters(Enum): + SORTING_COLUMN = "sorting_column" + INDEX_KEY = "index_key" + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + IN_COLUMN = "in_column" + OUT_COLUMN = "out_column" + NODE_COLUMN_SOURCE = "node_column_source" + NODE_COLUMN_TARGET = "node_column_target" + EDGE_COLUMN = "edge_column" + INCLUDE_PERFORMANCE = "include_performance" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + TIMESTAMP_DIFF_COLUMN = "timestamp_diff_column" + EDGE_REFERENCE = "edge_reference" + + +def build_network_analysis_from_link_analysis(merged_df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> \ +Dict[Tuple[str, str], Dict[str, Any]]: + """ + Builds the network analysis from the results of the link analysis (internal method) + + Parameters + ------------------ + merged_df + Dataframe obtained from the link analysis + parameters + Parameters of the method, including: + - Parameters.NODE_COLUMN_SOURCE => the attribute to be used for the node definition of the source event (default: the resource of the log, org:resource) + - Parameters.NODE_COLUMN_TARGET => the attribute to be used for the node definition of the target event (default: the resource of the log, org:resource) + - Parameters.EDGE_COLUMN => the attribute to be used for the edge definition (default: the activity of the log, concept:name) + - Parameters.EDGE_REFERENCE => the event into which the edge attribute should be picked: + - _out => the source event + - _in => the target event + - Parameters.TIMESTAMP_COLUMN => the timestamp column + - Parameters.TIMESTAMP_DIFF_COLUMN => timestamp diff column + - Parameters.INCLUDE_PERFORMANCE => considers the performance of the edge + - Parameters.BUSINESS_HOURS => boolean value that enables the business hours + - Parameters.BUSINESS_HOURS_SLOTS => + work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business + hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. + [ + (7 * 60 * 60, 17 * 60 * 60), + ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), + ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60), + ] + meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + + Returns + ----------------- + network_analysis + Edges of the network analysis (first key: edge; second key: type; value: number of occurrences) + """ + if parameters is None: + parameters = {} + + node_column_source = exec_utils.get_param_value(Parameters.NODE_COLUMN_SOURCE, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + node_column_target = exec_utils.get_param_value(Parameters.NODE_COLUMN_TARGET, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + edge_column = exec_utils.get_param_value(Parameters.EDGE_COLUMN, parameters, xes_constants.DEFAULT_NAME_KEY) + edge_reference = exec_utils.get_param_value(Parameters.EDGE_REFERENCE, parameters, "_out") + timestamp_column = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_diff_column = exec_utils.get_param_value(Parameters.TIMESTAMP_DIFF_COLUMN, parameters, "@@timestamp_diff") + + include_performance = exec_utils.get_param_value(Parameters.INCLUDE_PERFORMANCE, parameters, False) + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + edges = {} + + if business_hours: + merged_df[timestamp_diff_column] = merged_df.apply( + lambda x: soj_time_business_hours_diff(x[timestamp_column + "_out"], x[timestamp_column + "_in"], + business_hours_slots), axis=1) + + else: + merged_df[timestamp_diff_column] = pandas_utils.get_total_seconds(merged_df[timestamp_column + "_in"] - merged_df[timestamp_column + "_out"]) + + edges0 = merged_df.dropna(subset=[node_column_source + "_out", node_column_target + "_in", edge_column + edge_reference], how="any").groupby([node_column_source + "_out", node_column_target + "_in", edge_column + edge_reference])[ + timestamp_diff_column].agg(list).to_dict() + + for e0 in edges0: + edge = (e0[0], e0[1]) + edge_value = e0[2] + if edge not in edges: + edges[edge] = {} + if edge_value not in edges[edge]: + if include_performance: + edges[edge][edge_value] = edges0[e0] + else: + edges[edge][edge_value] = len(edges0[e0]) + + return edges + + +def apply(dataframe: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> Dict[ + Tuple[str, str], Dict[str, Any]]: + """ + Performs the network analysis on the provided dataframe + + Parameters + ----------------- + dataframe + Dataframe + parameters + Parameters of the method, including: + - Parameters.SORTING_COLUMN => the column that should be used to sort the log + - Parameters.IN_COLUMN => the target column of the link (default: the case identifier; events of the same case are linked) + - Parameters.OUT_COLUMN => the source column of the link (default: the case identifier; events of the same case are linked) + - Parameters.INDEX_KEY => the name for the index attribute in the log (inserted during the execution) + - Parameters.NODE_COLUMN_SOURCE => the attribute to be used for the node definition of the source event (default: the resource of the log, org:resource) + - Parameters.NODE_COLUMN_TARGET => the attribute to be used for the node definition of the target event (default: the resource of the log, org:resource) + - Parameters.EDGE_COLUMN => the attribute to be used for the edge definition (default: the activity of the log, concept:name) + - Parameters.EDGE_REFERENCE => the event into which the edge attribute should be picked: + - _out => the source event + - _in => the target event + - Parameters.TIMESTAMP_COLUMN => the timestamp column + - Parameters.TIMESTAMP_DIFF_COLUMN => timestamp diff column + - Parameters.INCLUDE_PERFORMANCE => considers the performance of the edge + - Parameters.BUSINESS_HOURS => boolean value that enables the business hours + - Parameters.BUSINESS_HOURS_SLOTS => + work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business + hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. + [ + (7 * 60 * 60, 17 * 60 * 60), + ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), + ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60), + ] + meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + + Returns + ----------------- + network_analysis + Edges of the network analysis (first key: edge; second key: type; value: number of occurrences) + """ + if parameters is None: + parameters = {} + + sorting_column = exec_utils.get_param_value(Parameters.SORTING_COLUMN, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + index_key = exec_utils.get_param_value(Parameters.INDEX_KEY, parameters, constants.DEFAULT_INDEX_KEY) + timestamp_column = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + in_column = exec_utils.get_param_value(Parameters.IN_COLUMN, parameters, constants.CASE_CONCEPT_NAME) + out_column = exec_utils.get_param_value(Parameters.OUT_COLUMN, parameters, constants.CASE_CONCEPT_NAME) + node_column_source = exec_utils.get_param_value(Parameters.NODE_COLUMN_SOURCE, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + node_column_target = exec_utils.get_param_value(Parameters.NODE_COLUMN_TARGET, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + edge_column = exec_utils.get_param_value(Parameters.EDGE_COLUMN, parameters, xes_constants.DEFAULT_NAME_KEY) + + dataframe = dataframe[list({timestamp_column, in_column, out_column, node_column_source, node_column_target, edge_column, sorting_column})] + + parameters_la = {link_analysis.Parameters.OUT_COLUMN: out_column, link_analysis.Parameters.IN_COLUMN: in_column, + link_analysis.Parameters.INDEX_COLUMN: index_key, + link_analysis.Parameters.SORTING_COLUMN: sorting_column, + link_analysis.Parameters.LOOK_FORWARD: True, link_analysis.Parameters.KEEP_FIRST_OCCURRENCE: True, + link_analysis.Parameters.PROPAGATE: False} + + merged_df = link_analysis.apply(dataframe, parameters=parameters_la) + + return build_network_analysis_from_link_analysis(merged_df, parameters=parameters) diff --git a/pm4py/pm4py/algo/organizational_mining/resource_profiles/__init__.py b/pm4py/pm4py/algo/organizational_mining/resource_profiles/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..f03916a6b264645d8ccbe6d5df979abdafdcf132 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/resource_profiles/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.resource_profiles import algorithm, variants diff --git a/pm4py/pm4py/algo/organizational_mining/resource_profiles/algorithm.py b/pm4py/pm4py/algo/organizational_mining/resource_profiles/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..a6063265bdad5f0f050153443e17ead91c5d3243 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/resource_profiles/algorithm.py @@ -0,0 +1,362 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.resource_profiles.variants import pandas, log +import pandas as pd +from pm4py.objects.log.obj import EventLog +from typing import Union, Optional, Dict, Any +from pm4py.util import pandas_utils +from datetime import datetime + + +def distinct_activities(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Any, Any]] = None) -> int: + """ + Number of distinct activities done by a resource in a given time interval [t1, t2) + + Metric RBI 1.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ----------------- + distinct_activities + Distinct activities + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.distinct_activities(log_obj, t1, t2, r, parameters=parameters) + else: + return log.distinct_activities(log_obj, t1, t2, r, parameters=parameters) + + +def activity_frequency(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r: str, a: str, + parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + Fraction of completions of a given activity a, by a given resource r, during a given time slot, [t1, t2), + with respect to the total number of activity completions by resource r during [t1, t2) + + Metric RBI 1.3 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r + Resource + a + Activity + + Returns + ---------------- + metric + Value of the metric + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.activity_frequency(log_obj, t1, t2, r, a, parameters=parameters) + else: + return log.activity_frequency(log_obj, t1, t2, r, a, parameters=parameters) + + +def activity_completions(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Any, Any]] = None) -> int: + """ + The number of activity instances completed by a given resource during a given time slot. + + Metric RBI 2.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.activity_completions(log_obj, t1, t2, r, parameters=parameters) + else: + return log.activity_completions(log_obj, t1, t2, r, parameters=parameters) + + +def case_completions(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Any, Any]] = None) -> int: + """ + The number of cases completed during a given time slot in which a given resource was involved. + + Metric RBI 2.2 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.case_completions(log_obj, t1, t2, r, parameters=parameters) + else: + return log.case_completions(log_obj, t1, t2, r, parameters=parameters) + + +def fraction_case_completions(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + The fraction of cases completed during a given time slot in which a given resource was involved with respect to the + total number of cases completed during the time slot. + + Metric RBI 2.3 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.fraction_case_completions(log_obj, t1, t2, r, parameters=parameters) + else: + return log.fraction_case_completions(log_obj, t1, t2, r, parameters=parameters) + + +def average_workload(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + The average number of activities started by a given resource but not completed at a moment in time. + + Metric RBI 2.4 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.average_workload(log_obj, t1, t2, r, parameters=parameters) + else: + return log.average_workload(log_obj, t1, t2, r, parameters=parameters) + + +def multitasking(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + The fraction of active time during which a given resource is involved in more than one activity with respect + to the resource's active time. + + Metric RBI 3.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.multitasking(log_obj, t1, t2, r, parameters=parameters) + else: + return log.multitasking(log_obj, t1, t2, r, parameters=parameters) + + +def average_duration_activity(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r: str, a: str, + parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + The average duration of instances of a given activity completed during a given time slot by a given resource. + + Metric RBI 4.3 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r + Resource + a + Activity + + Returns + ---------------- + metric + Value of the metric + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.average_duration_activity(log_obj, t1, t2, r, a, parameters=parameters) + else: + return log.average_duration_activity(log_obj, t1, t2, r, a, parameters=parameters) + + +def average_case_duration(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + The average duration of cases completed during a given time slot in which a given resource was involved. + + Metric RBI 4.4 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.average_case_duration(log_obj, t1, t2, r, parameters=parameters) + else: + return log.average_case_duration(log_obj, t1, t2, r, parameters=parameters) + + +def interaction_two_resources(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r1: str, r2: str, + parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + The number of cases completed during a given time slot in which two given resources were involved. + + Metric RBI 5.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r1 + Resource 1 + r2 + Resource 2 + + Returns + ---------------- + metric + Value of the metric + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.interaction_two_resources(log_obj, t1, t2, r1, r2, parameters=parameters) + else: + return log.interaction_two_resources(log_obj, t1, t2, r1, r2, parameters=parameters) + + +def social_position(log_obj: Union[pd.DataFrame, EventLog], t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Any, Any]] = None) -> float: + """ + The fraction of resources involved in the same cases with a given resource during a given time slot with + respect to the total number of resources active during the time slot. + + Metric RBI 5.2 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log_obj + Log object + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if pandas_utils.check_is_pandas_dataframe(log_obj): + return pandas.social_position(log_obj, t1, t2, r, parameters=parameters) + else: + return log.social_position(log_obj, t1, t2, r, parameters=parameters) diff --git a/pm4py/pm4py/algo/organizational_mining/resource_profiles/variants/__init__.py b/pm4py/pm4py/algo/organizational_mining/resource_profiles/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b6273b594fd1edff9dada7620ff05ae6df10e4ae --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/resource_profiles/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.resource_profiles.variants import log, pandas diff --git a/pm4py/pm4py/algo/organizational_mining/resource_profiles/variants/log.py b/pm4py/pm4py/algo/organizational_mining/resource_profiles/variants/log.py new file mode 100644 index 0000000000000000000000000000000000000000..4405337f6f179d598a380aa19b2b56c781d12a2a --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/resource_profiles/variants/log.py @@ -0,0 +1,630 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from datetime import datetime +from enum import Enum +from typing import Union, Optional, Dict, Any, Tuple + +from pm4py.objects.conversion.log import converter +from pm4py.objects.log.obj import EventLog, Event +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.algo.filtering.common.timestamp.timestamp_common import get_dt_from_string +from statistics import mean + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def distinct_activities(log: EventLog, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> int: + """ + Number of distinct activities done by a resource in a given time interval [t1, t2) + + Metric RBI 1.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log + Event log + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ----------------- + distinct_activities + Distinct activities + """ + if parameters is None: + parameters = {} + + log = converter.apply(log, variant=converter.Variants.TO_EVENT_STREAM, parameters={"deepcopy": False, "include_case_attributes": False}) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + log = [x for x in log if t1 <= x[timestamp_key] < t2 and x[resource_key] == r] + return len(set(x[activity_key] for x in log)) + + +def activity_frequency(log: EventLog, t1: Union[datetime, str], t2: Union[datetime, str], r: str, a: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Fraction of completions of a given activity a, by a given resource r, during a given time slot, [t1, t2), + with respect to the total number of activity completions by resource r during [t1, t2) + + Metric RBI 1.3 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log + Event log + t1 + Left interval + t2 + Right interval + r + Resource + a + Activity + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + log = converter.apply(log, variant=converter.Variants.TO_EVENT_STREAM, parameters={"deepcopy": False, "include_case_attributes": False}) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + log = [x for x in log if t1 <= x[timestamp_key] < t2 and x[resource_key] == r] + total = len(log) + + log = [x for x in log if x[activity_key] == a] + activity_a = len(log) + + return float(activity_a) / float(total) if total > 0 else 0.0 + + +def activity_completions(log: EventLog, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> int: + """ + The number of activity instances completed by a given resource during a given time slot. + + Metric RBI 2.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log + Event log + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + log = converter.apply(log, variant=converter.Variants.TO_EVENT_STREAM, parameters={"deepcopy": False, "include_case_attributes": False}) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + log = [x for x in log if t1 <= x[timestamp_key] < t2 and x[resource_key] == r] + total = len(log) + + return total + + +def case_completions(log: EventLog, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> int: + """ + The number of cases completed during a given time slot in which a given resource was involved. + + Metric RBI 2.2 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log + Event log + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + last_eve = [] + stream = [] + for case in log: + for i in range(len(case)): + eve = Event({timestamp_key: case[i][timestamp_key], resource_key: case[i][resource_key], + case_id_key: case.attributes[case_id_key]}) + stream.append(eve) + if i == len(case) - 1: + last_eve.append(eve) + + last_eve = [x for x in last_eve if t1 <= x[timestamp_key] < t2] + cases_last = set(x[case_id_key] for x in last_eve) + + stream = [x for x in stream if x[resource_key] == r] + cases_res = set(x[case_id_key] for x in stream) + + return len(cases_last.intersection(cases_res)) + + +def fraction_case_completions(log: EventLog, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The fraction of cases completed during a given time slot in which a given resource was involved with respect to the + total number of cases completed during the time slot. + + Metric RBI 2.3 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log + Event log + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + last_eve = [] + stream = [] + for case in log: + for i in range(len(case)): + eve = Event({timestamp_key: case[i][timestamp_key], resource_key: case[i][resource_key], + case_id_key: case.attributes[case_id_key]}) + stream.append(eve) + if i == len(case) - 1: + last_eve.append(eve) + + last_eve = [x for x in last_eve if t1 <= x[timestamp_key] < t2] + cases_last = set(x[case_id_key] for x in last_eve) + + stream = [x for x in stream if x[resource_key] == r] + cases_res = set(x[case_id_key] for x in stream) + + q1 = float(len(cases_last.intersection(cases_res))) + q2 = float(len(cases_last)) + + return q1 / q2 if q2 > 0 else 0.0 + + +def __insert_start_from_previous_event(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Inserts the start timestamp of an event set to the completion of the previous event in the case + + Parameters + --------------- + log + interval log + + Returns + --------------- + log + interval Log with the start timestamp for each event + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_START_TIMESTAMP_KEY) + + for trace in log: + for i in range(1, len(trace)): + trace[i][start_timestamp_key] = trace[i-1][timestamp_key] + trace[0][start_timestamp_key] = trace[0][timestamp_key] + + return log + + +def __compute_workload(log: EventLog, resource: Optional[str] = None, activity: Optional[str] = None, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple, int]: + """ + Computes the workload of resources/activities, corresponding to each event a number + (number of concurring events) + + Parameters + --------------- + log + event log + resource + (if provided) Resource on which we want to compute the workload + activity + (if provided) Activity on which we want to compute the workload + + Returns + --------------- + workload_dict + Dictionary associating to each event the number of concurring events + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + + from pm4py.objects.log.util import sorting + log = sorting.sort_timestamp(log, timestamp_key) + from pm4py.objects.log.util import interval_lifecycle + log = interval_lifecycle.to_interval(log, parameters=parameters) + if start_timestamp_key is None: + log = __insert_start_from_previous_event(log, parameters=parameters) + start_timestamp_key = xes_constants.DEFAULT_START_TIMESTAMP_KEY + events = converter.apply(log, variant=converter.Variants.TO_EVENT_STREAM, parameters={"deepcopy": False, "include_case_attributes": False}) + if resource is not None: + events = [x for x in events if x[resource_key] == resource] + if activity is not None: + events = [x for x in events if x[activity_key] == activity] + events = [(x[start_timestamp_key].timestamp(), x[timestamp_key].timestamp(), x[resource_key], x[activity_key]) for x + in events] + events = sorted(events) + from intervaltree import IntervalTree, Interval + tree = IntervalTree() + ev_map = {} + k = 0.000001 + for ev in events: + tree.add(Interval(ev[0], ev[1] + k)) + for ev in events: + ev_map[ev] = len(tree[ev[0]:ev[1] + k]) + return ev_map + + +def average_workload(log: EventLog, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The average number of activities started by a given resource but not completed at a moment in time. + + Metric RBI 2.4 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log + Event log + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + t2 = get_dt_from_string(t2).timestamp() + + ev_dict = __compute_workload(log, resource=r, parameters=parameters) + ev_dict = {x: y for x, y in ev_dict.items() if x[0] < t2 and x[1] >= t2} + num = 0.0 + den = 0.0 + for ev in ev_dict: + workload = ev_dict[ev] + duration = ev[1] - ev[0] + num += workload*duration + den += duration + return num/den if den > 0 else 0.0 + + +def multitasking(log: EventLog, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The fraction of active time during which a given resource is involved in more than one activity with respect + to the resource's active time. + + Metric RBI 3.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log + Event log + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + t1 = get_dt_from_string(t1).timestamp() + t2 = get_dt_from_string(t2).timestamp() + + ev_dict = __compute_workload(log, resource=r, parameters=parameters) + ev_dict = {x: y for x, y in ev_dict.items() if x[0] >= t1 and x[1] <= t2} + num = 0.0 + den = 0.0 + for ev in ev_dict: + workload = ev_dict[ev] + duration = ev[1] - ev[0] + if workload > 1: + num += duration + den += duration + return num/den if den > 0 else 0.0 + + +def average_duration_activity(log: EventLog, t1: Union[datetime, str], t2: Union[datetime, str], r: str, a: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The average duration of instances of a given activity completed during a given time slot by a given resource. + + Metric RBI 4.3 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log + Event log + t1 + Left interval + t2 + Right interval + r + Resource + a + Activity + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + + from pm4py.objects.log.util import sorting + log = sorting.sort_timestamp(log, timestamp_key) + from pm4py.objects.log.util import interval_lifecycle + log = interval_lifecycle.to_interval(log, parameters=parameters) + if start_timestamp_key is None: + log = __insert_start_from_previous_event(log, parameters=parameters) + start_timestamp_key = xes_constants.DEFAULT_START_TIMESTAMP_KEY + + log = converter.apply(log, variant=converter.Variants.TO_EVENT_STREAM, parameters={"deepcopy": False, "include_case_attributes": False}) + log = [x for x in log if x[resource_key] == r and x[activity_key] == a and x[timestamp_key] >= t1 and x[timestamp_key] < t2] + + return float(mean(x[timestamp_key].timestamp() - x[start_timestamp_key].timestamp() for x in log)) + + +def average_case_duration(log: EventLog, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The average duration of cases completed during a given time slot in which a given resource was involved. + + Metric RBI 4.4 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log + Event log + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + from pm4py.algo.filtering.log.attributes import attributes_filter + parameters_filter = {attributes_filter.Parameters.ATTRIBUTE_KEY: resource_key} + log = attributes_filter.apply(log, [r], parameters=parameters_filter) + + from pm4py.algo.filtering.log.timestamp import timestamp_filter + log = timestamp_filter.filter_traces_intersecting(log, t1, t2, parameters=parameters) + + from pm4py.statistics.traces.generic.log import case_statistics + cd = case_statistics.get_cases_description(log, parameters=parameters).values() + return mean(x["caseDuration"] for x in cd) + + +def interaction_two_resources(log: EventLog, t1: Union[datetime, str], t2: Union[datetime, str], r1: str, r2: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The number of cases completed during a given time slot in which two given resources were involved. + + Metric RBI 5.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + log + Event log + t1 + Left interval + t2 + Right interval + r1 + Resource 1 + r2 + Resource 2 + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + from pm4py.algo.filtering.log.attributes import attributes_filter + parameters_filter = {attributes_filter.Parameters.ATTRIBUTE_KEY: resource_key} + log = attributes_filter.apply(log, [r1], parameters=parameters_filter) + log = attributes_filter.apply(log, [r2], parameters=parameters_filter) + red_log = EventLog() + for trace in log: + if trace: + if t1 <= trace[-1][timestamp_key] < t2: + red_log.append(trace) + return len(red_log) + + +def social_position(log: EventLog, t1_0: Union[datetime, str], t2_0: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The fraction of resources involved in the same cases with a given resource during a given time slot with + respect to the total number of resources active during the time slot. + + Metric RBI 5.2 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1_0 + Left interval + t2_0 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + from pm4py.algo.filtering.log.timestamp import timestamp_filter + log = timestamp_filter.apply_events(log, t1_0, t2_0, parameters=parameters) + + from pm4py.algo.filtering.log.attributes import attributes_filter + parameters_filter = {attributes_filter.Parameters.ATTRIBUTE_KEY: resource_key} + + filtered_log = attributes_filter.apply(log, [r], parameters=parameters_filter) + + q1 = float(len(filtered_log)) + q2 = float(len(log)) + + return q1/q2 if q2 > 0 else 0.0 diff --git a/pm4py/pm4py/algo/organizational_mining/resource_profiles/variants/pandas.py b/pm4py/pm4py/algo/organizational_mining/resource_profiles/variants/pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..97addfb5f42ed665b95f7d8e5021207d3e4ee765 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/resource_profiles/variants/pandas.py @@ -0,0 +1,653 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from datetime import datetime +from enum import Enum +from typing import Union, Optional, Dict, Any, Tuple + +import pandas as pd +from pm4py.algo.filtering.common.timestamp.timestamp_common import get_dt_from_string + +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from statistics import mean + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def distinct_activities(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> int: + """ + Number of distinct activities done by a resource in a given time interval [t1, t2) + + Metric RBI 1.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ----------------- + distinct_activities + Distinct activities + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + df = df[[activity_key, timestamp_key, resource_key]] + df = df[df[resource_key] == r] + df = df[df[timestamp_key] >= t1] + df = df[df[timestamp_key] < t2] + + return df[activity_key].nunique() + + +def activity_frequency(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r: str, a: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Fraction of completions of a given activity a, by a given resource r, during a given time slot, [t1, t2), + with respect to the total number of activity completions by resource r during [t1, t2) + + Metric RBI 1.3 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r + Resource + a + Activity + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + df = df[[activity_key, timestamp_key, resource_key]] + df = df[df[resource_key] == r] + df = df[df[timestamp_key] >= t1] + df = df[df[timestamp_key] < t2] + + total = len(df) + + df = df[df[activity_key] == a] + + activity_a = len(df) + + return float(activity_a) / float(total) if total > 0 else 0.0 + + +def activity_completions(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> int: + """ + The number of activity instances completed by a given resource during a given time slot. + + Metric RBI 2.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + df = df[[timestamp_key, resource_key]] + df = df[df[resource_key] == r] + df = df[df[timestamp_key] >= t1] + df = df[df[timestamp_key] < t2] + + total = len(df) + + return total + + +def case_completions(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> int: + """ + The number of cases completed during a given time slot in which a given resource was involved. + + Metric RBI 2.2 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + df = df[[timestamp_key, resource_key, case_id_key]] + + res_df = df[df[resource_key] == r] + cases_res = set(res_df[case_id_key]) + + last_df = df.groupby(case_id_key).last().reset_index() + last_df = last_df[last_df[timestamp_key] >= t1] + last_df = last_df[last_df[timestamp_key] < t2] + cases_last = set(last_df[case_id_key]) + + return len(cases_last.intersection(cases_res)) + + +def fraction_case_completions(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The fraction of cases completed during a given time slot in which a given resource was involved with respect to the + total number of cases completed during the time slot. + + Metric RBI 2.3 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + df = df[[timestamp_key, resource_key, case_id_key]] + + res_df = df[df[resource_key] == r] + cases_res = set(res_df[case_id_key]) + + last_df = df.groupby(case_id_key).last().reset_index() + last_df = last_df[last_df[timestamp_key] >= t1] + last_df = last_df[last_df[timestamp_key] < t2] + cases_last = set(last_df[case_id_key]) + + q1 = float(len(cases_last.intersection(cases_res))) + q2 = float(len(cases_last)) + + return q1 / q2 if q2 > 0 else 0.0 + + +def __insert_start_from_previous_event(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pd.DataFrame: + """ + Inserts the start timestamp of an event set to the completion of the previous event in the case + + Parameters + --------------- + df + Dataframe + + Returns + --------------- + df + Dataframe with the start timestamp for each event + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_START_TIMESTAMP_KEY) + + from pm4py.util import pandas_utils + + df = df[[timestamp_key, resource_key, case_id_key, activity_key]] + + df = pandas_utils.insert_index(df) + df = df.sort_values([case_id_key, timestamp_key, constants.DEFAULT_INDEX_KEY]) + + shifted_df = df[[case_id_key, timestamp_key]].shift(1) + shifted_df.columns = [x + "_2" for x in shifted_df.columns] + + concat_df = pandas_utils.concat([df, shifted_df], axis=1) + concat_df = concat_df[concat_df[case_id_key] == concat_df[case_id_key + "_2"]][ + [constants.DEFAULT_INDEX_KEY, timestamp_key + "_2"]] + + del shifted_df + concat_df = concat_df.to_dict("records") + concat_df = {x[constants.DEFAULT_INDEX_KEY]: x[timestamp_key + "_2"] for x in concat_df} + + df[start_timestamp_key] = df[constants.DEFAULT_INDEX_KEY].map(concat_df) + df[start_timestamp_key] = df[start_timestamp_key].fillna(df[timestamp_key]) + df = df.sort_values([start_timestamp_key, timestamp_key, constants.DEFAULT_INDEX_KEY]) + + return df + + +def __compute_workload(df: pd.DataFrame, resource: Optional[str] = None, activity: Optional[str] = None, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple, int]: + """ + Computes the workload of resources/activities, corresponding to each event a number + (number of concurring events) + + Parameters + --------------- + df + Dataframe + resource + (if provided) Resource on which we want to compute the workload + activity + (if provided) Activity on which we want to compute the workload + + Returns + --------------- + workload_dict + Dictionary associating to each event the number of concurring events + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + if start_timestamp_key is None: + df = __insert_start_from_previous_event(df, parameters=parameters) + start_timestamp_key = xes_constants.DEFAULT_START_TIMESTAMP_KEY + df = df[[timestamp_key, resource_key, activity_key, start_timestamp_key]] + if resource is not None: + df = df[df[resource_key] == resource] + if activity is not None: + df = df[df[activity_key] == activity] + events = df.to_dict("records") + events = [(x[start_timestamp_key].timestamp(), x[timestamp_key].timestamp(), x[resource_key], x[activity_key]) for x + in events] + events = sorted(events) + from intervaltree import IntervalTree, Interval + tree = IntervalTree() + ev_map = {} + k = 0.000001 + for ev in events: + tree.add(Interval(ev[0], ev[1] + k)) + for ev in events: + ev_map[ev] = len(tree[ev[0]:ev[1] + k]) + return ev_map + + +def average_workload(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The average number of activities started by a given resource but not completed at a moment in time. + + Metric RBI 2.4 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + t2 = get_dt_from_string(t2).timestamp() + + ev_dict = __compute_workload(df, resource=r, parameters=parameters) + ev_dict = {x: y for x, y in ev_dict.items() if x[0] < t2 and x[1] >= t2} + num = 0.0 + den = 0.0 + for ev in ev_dict: + workload = ev_dict[ev] + duration = ev[1] - ev[0] + num += workload*duration + den += duration + return num/den if den > 0 else 0.0 + + +def multitasking(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The fraction of active time during which a given resource is involved in more than one activity with respect + to the resource's active time. + + Metric RBI 3.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + t1 = get_dt_from_string(t1).timestamp() + t2 = get_dt_from_string(t2).timestamp() + + ev_dict = __compute_workload(df, resource=r, parameters=parameters) + ev_dict = {x: y for x, y in ev_dict.items() if x[0] >= t1 and x[1] <= t2} + num = 0.0 + den = 0.0 + for ev in ev_dict: + workload = ev_dict[ev] + duration = ev[1] - ev[0] + if workload > 1: + num += duration + den += duration + return num/den if den > 0 else 0.0 + + +def average_duration_activity(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r: str, a: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The average duration of instances of a given activity completed during a given time slot by a given resource. + + Metric RBI 4.3 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r + Resource + a + Activity + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + if start_timestamp_key is None: + df = __insert_start_from_previous_event(df, parameters=parameters) + start_timestamp_key = xes_constants.DEFAULT_START_TIMESTAMP_KEY + + df = df[[timestamp_key, resource_key, case_id_key, activity_key, start_timestamp_key]] + df = df[df[resource_key] == r] + df = df[df[activity_key] == a] + df = df[df[timestamp_key] >= t1] + df = df[df[timestamp_key] < t2] + + return float(pandas_utils.get_total_seconds(df[timestamp_key] - df[start_timestamp_key]).mean()) + + +def average_case_duration(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The average duration of cases completed during a given time slot in which a given resource was involved. + + Metric RBI 4.4 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + from pm4py.algo.filtering.pandas.attributes import attributes_filter + parameters_filter = {attributes_filter.Parameters.ATTRIBUTE_KEY: resource_key} + df = attributes_filter.apply(df, [r], parameters=parameters_filter) + + from pm4py.algo.filtering.pandas.timestamp import timestamp_filter + df = timestamp_filter.filter_traces_intersecting(df, t1, t2, parameters=parameters) + + from pm4py.statistics.traces.generic.pandas import case_statistics + cd = case_statistics.get_cases_description(df, parameters=parameters).values() + return mean(x["caseDuration"] for x in cd) + + +def interaction_two_resources(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r1: str, r2: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The number of cases completed during a given time slot in which two given resources were involved. + + Metric RBI 5.1 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r1 + Resource 1 + r2 + Resource 2 + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + + df = df[[timestamp_key, resource_key, case_id_key, activity_key]] + + from pm4py.algo.filtering.pandas.attributes import attributes_filter + parameters_filter = {attributes_filter.Parameters.ATTRIBUTE_KEY: resource_key} + df = attributes_filter.apply(df, [r1], parameters=parameters_filter) + df = attributes_filter.apply(df, [r2], parameters=parameters_filter) + last_df = df.groupby(case_id_key).last().reset_index() + last_df = last_df[last_df[timestamp_key] >= t1] + last_df = last_df[last_df[timestamp_key] < t2] + cases = pandas_utils.format_unique(last_df[case_id_key].unique()) + df = df[df[case_id_key].isin(cases)] + + return df[case_id_key].nunique() + + +def social_position(df: pd.DataFrame, t1: Union[datetime, str], t2: Union[datetime, str], r: str, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + The fraction of resources involved in the same cases with a given resource during a given time slot with + respect to the total number of resources active during the time slot. + + Metric RBI 5.2 in Pika, Anastasiia, et al. + "Mining resource profiles from event logs." ACM Transactions on Management Information Systems (TMIS) 8.1 (2017): 1-30. + + Parameters + ----------------- + df + Dataframe + t1 + Left interval + t2 + Right interval + r + Resource + + Returns + ---------------- + metric + Value of the metric + """ + if parameters is None: + parameters = {} + + t1 = get_dt_from_string(t1) + t2 = get_dt_from_string(t2) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + df = df[[timestamp_key, resource_key, case_id_key]] + df = df[df[timestamp_key] >= t1] + df = df[df[timestamp_key] < t2] + + from pm4py.algo.filtering.pandas.attributes import attributes_filter + parameters_filter = {attributes_filter.Parameters.ATTRIBUTE_KEY: resource_key} + filt_df = attributes_filter.apply(df, [r], parameters=parameters_filter) + + q1 = float(filt_df[case_id_key].nunique()) + q2 = float(df[case_id_key].nunique()) + + return q1/q2 if q2 > 0 else 0 diff --git a/pm4py/pm4py/algo/organizational_mining/roles/__init__.py b/pm4py/pm4py/algo/organizational_mining/roles/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5a15343fb367ff77d9af09b372225caf77a5e179 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/roles/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.roles import algorithm, common, variants diff --git a/pm4py/pm4py/algo/organizational_mining/roles/algorithm.py b/pm4py/pm4py/algo/organizational_mining/roles/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..94fa3754b43276e21243c925cf67fbcf2d33fb0b --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/roles/algorithm.py @@ -0,0 +1,67 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.roles.variants import pandas +from pm4py.algo.organizational_mining.roles.variants import log +from pm4py.util import exec_utils, pandas_utils +from enum import Enum +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd + + +class Variants(Enum): + LOG = log + PANDAS = pandas + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], variant=None, parameters: Optional[Dict[Any, Any]] = None) -> List[Any]: + """ + Gets the roles (group of different activities done by similar resources) + out of the log. + + The roles detection is introduced by + Burattin, Andrea, Alessandro Sperduti, and Marco Veluscek. "Business models enhancement through discovery of roles." 2013 IEEE Symposium on Computational Intelligence and Data Mining (CIDM). IEEE, 2013. + + + Parameters + ------------- + log + Log object (also Pandas dataframe) + variant + Variant of the algorithm to apply. Possible values: + - Variants.LOG + - Variants.PANDAS + parameters + Possible parameters of the algorithm + + Returns + ------------ + roles + List of different roles inside the log, including: + roles_threshold_parameter => threshold to use with the algorithm + """ + if parameters is None: + parameters = {} + + if variant is None: + if pandas_utils.check_is_pandas_dataframe(log): + variant = Variants.PANDAS + + if variant is None: + variant = Variants.LOG + + return exec_utils.get_variant(variant).apply(log, parameters=parameters) diff --git a/pm4py/pm4py/algo/organizational_mining/roles/common/__init__.py b/pm4py/pm4py/algo/organizational_mining/roles/common/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..43730babc86c3eb39eea8268b559f5c7411db989 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/roles/common/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.roles.common import algorithm diff --git a/pm4py/pm4py/algo/organizational_mining/roles/common/algorithm.py b/pm4py/pm4py/algo/organizational_mining/roles/common/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..2e052a29e3accf88fc6eb10265117cbfea78fa93 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/roles/common/algorithm.py @@ -0,0 +1,323 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +import numpy as np +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants +from pm4py.objects.org.roles.obj import Role +from typing import List + + +class Parameters(Enum): + ROLES_THRESHOLD_PARAMETER = "roles_threshold_parameter" + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def get_sum_from_dictio_values(dictio, parameters=None): + """ + Get the sum of a dictionary values + + Parameters + ------------- + dictio + Dictionary + parameters + Parameters of the algorithm + + Returns + -------------- + sum_values + Sum of the dictionary values + """ + return np.sum(list(dictio.values())) + + +def normalize_role(role, parameters=None): + """ + Normalize a role + + Parameters + -------------- + role + Originators of the role + parameters + Parameters of the algorithm + + Returns + -------------- + normalized_role + Normalized multiset of originators + """ + sum_role = get_sum_from_dictio_values(role) + + new_role = {} + + for res in role: + new_role[res] = role[res] / float(sum_role) + + return new_role + + +def find_multiset_intersection(role1, role2, normalize=False, parameters=None): + """ + Finds the intersection of a multiset + + Parameters + ------------- + role1 + First role originators + role2 + Second role originators + normalize + Do the normalization of the roles + parameters + Parameters of the algorithm + + Returns + -------------- + intersection + Intersection of the multiset + """ + intersection = {} + + if normalize: + role1 = normalize_role(role1, parameters=parameters) + role2 = normalize_role(role2, parameters=parameters) + + for res in role1: + if res in role2: + intersection[res] = min(role1[res], role2[res]) + + return intersection + + +def find_multiset_union(role1, role2, normalize=False, parameters=None): + """ + Finds the union of a multiset + + Parameters + ------------- + role1 + First role originators + role2 + Second role originators + normalize + Do the normalization of the roles + parameters + Parameters of the algorithm + + Returns + -------------- + union + Union of the multiset + """ + union = {} + + if normalize: + role1 = normalize_role(role1, parameters=parameters) + role2 = normalize_role(role2, parameters=parameters) + + for res in role1: + if res in role2: + union[res] = max(role1[res], role2[res]) + else: + union[res] = role1[res] + + for res in role2: + if res not in role1: + union[res] = role2[res] + + return union + + +def find_role_similarity(roles, i, j, parameters=None): + """ + Calculate a number of similarity between different roles + + Parameters + ------------- + roles + List of roles + i + Index of the first role + j + Index of the second role + parameters + Parameters of the algorithm + + Returns + -------------- + similarity + Similarity measure + """ + num = get_sum_from_dictio_values( + find_multiset_intersection(roles[i][1], roles[j][1], normalize=True, parameters=parameters), + parameters=parameters) + den = get_sum_from_dictio_values( + find_multiset_union(roles[i][1], roles[j][1], normalize=True, parameters=parameters), parameters=parameters) + + return num / den + + +def aggregate_roles_iteration(roles, parameters=None): + """ + Single iteration of the roles aggregation algorithm + + Parameters + -------------- + roles + Roles + parameters + Parameters of the algorithm + + Returns + -------------- + agg_roles + (Partially aggregated) roles + """ + threshold = exec_utils.get_param_value(Parameters.ROLES_THRESHOLD_PARAMETER, parameters, 0.65) + + sim = [] + + for i in range(len(roles)): + for j in range(i + 1, len(roles)): + sim.append((i, j, roles[i][0], roles[j][0], -find_role_similarity(roles, i, j, parameters=parameters))) + + sim = sorted(sim, key=lambda x: (x[-1], constants.DEFAULT_VARIANT_SEP.join(x[-3]), constants.DEFAULT_VARIANT_SEP.join(x[-2]))) + + found_feasible = False + + if sim: + if -sim[0][-1] > threshold: + set_act1 = roles[sim[0][0]][0] + set_act2 = roles[sim[0][1]][0] + set_res1 = roles[sim[0][0]][1] + set_res2 = roles[sim[0][1]][1] + + total_set_act = sorted(list(set(set_act1).union(set(set_act2)))) + total_set_res = Counter(set_res1 + set_res2) + + del roles[sim[0][0]] + del roles[sim[0][1] - 1] + + roles.append([total_set_act, total_set_res]) + + roles = sorted(roles, key=lambda x: constants.DEFAULT_VARIANT_SEP.join(x[0])) + + found_feasible = True + + return roles, found_feasible + + +def aggregate_roles_algorithm(roles, parameters=None): + """ + Algorithm to aggregate similar roles + + Parameters + -------------- + roles + Roles + parameters + Parameters of the algorithm + + Returns + -------------- + agg_roles + (Aggregated) roles + """ + found_feasible = True + while found_feasible: + roles, found_feasible = aggregate_roles_iteration(roles, parameters=parameters) + + return roles + + +def get_initial_roles(res_act_couples, parameters=None): + """ + Get the initial list of roles (each activity is a stand-alone role) + + Parameters + ------------- + res_act_couples + (resource, activity) couples along with the number of occurrences + parameters + Parameters of the algorithm + + Returns + ------------- + roles + List of roles (set of activities + multiset of resources) + """ + if parameters is None: + parameters = {} + + roles0 = {} + + for ra_couple in res_act_couples.keys(): + res = ra_couple[0] + act = ra_couple[1] + + if act not in roles0: + roles0[act] = Counter() + if res not in roles0[act]: + roles0[act][res] = res_act_couples[ra_couple] + + roles = [] + + for act in roles0: + roles.append([[act], roles0[act]]) + + roles = sorted(roles, key=lambda x: (len(x[0]), len(x[1]), constants.DEFAULT_VARIANT_SEP.join(sorted(x[0]))), reverse=True) + + roles = aggregate_roles_algorithm(roles, parameters=parameters) + + roles = sorted(roles, key=lambda x: (len(x[0]), len(x[1]), constants.DEFAULT_VARIANT_SEP.join(sorted(x[0]))), reverse=True) + + return roles + + +def apply(res_act_couples, parameters=None) -> List[Role]: + """ + Apply the roles detection, introduced by + Burattin, Andrea, Alessandro Sperduti, and Marco Veluscek. "Business models enhancement through discovery of roles." 2013 IEEE Symposium on Computational Intelligence and Data Mining (CIDM). IEEE, 2013. + + Parameters + ------------- + res_act_couples + (resource, activity) couples along with the number of occurrences + parameters + Parameters of the algorithm + + Returns + ------------- + roles + List of roles (set of activities + multiset of resources) + """ + if parameters is None: + parameters = {} + + roles = get_initial_roles(res_act_couples, parameters=parameters) + + final_roles = [] + + for r in roles: + dictio = {x: int(y) for x, y in r[1].items()} + final_roles.append(Role(r[0], dictio)) + + return final_roles diff --git a/pm4py/pm4py/algo/organizational_mining/roles/variants/__init__.py b/pm4py/pm4py/algo/organizational_mining/roles/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..56e5d0fab5ecc22e5e5999b292ac306afab49605 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/roles/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.roles.variants import log, pandas diff --git a/pm4py/pm4py/algo/organizational_mining/roles/variants/log.py b/pm4py/pm4py/algo/organizational_mining/roles/variants/log.py new file mode 100644 index 0000000000000000000000000000000000000000..63af1c30af9084203f3c97516cfc359ff65d3751 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/roles/variants/log.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.roles.common import algorithm +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.util import xes_constants as xes +from collections import Counter +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog +from pm4py.objects.org.roles.obj import Role + + +class Parameters(Enum): + ROLES_THRESHOLD_PARAMETER = "roles_threshold_parameter" + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[Role]: + """ + Gets the roles (group of different activities done by similar resources) + out of the log + + Parameters + ------------- + log + Log object + parameters + Possible parameters of the algorithm + + Returns + ------------ + roles + List of different roles inside the log + """ + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes.DEFAULT_RESOURCE_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + + stream = log_converter.apply(log, variant=log_converter.TO_EVENT_STREAM, parameters={"deepcopy": False, "include_case_attributes": False}) + + activity_resource_couples = Counter((event[resource_key], event[activity_key]) for event in stream) + + return algorithm.apply(activity_resource_couples, parameters=parameters) diff --git a/pm4py/pm4py/algo/organizational_mining/roles/variants/pandas.py b/pm4py/pm4py/algo/organizational_mining/roles/variants/pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..04405dd003d9db1acf4c01afecfb5f8fac63ea2d --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/roles/variants/pandas.py @@ -0,0 +1,59 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.roles.common import algorithm +from pm4py.util import xes_constants as xes +from collections import Counter +from pm4py.util import exec_utils + +from enum import Enum +from pm4py.util import constants +from typing import Optional, Dict, Any, Union, List +import pandas as pd +from pm4py.objects.org.roles.obj import Role + + +class Parameters(Enum): + ROLES_THRESHOLD_PARAMETER = "roles_threshold_parameter" + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def apply(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[Role]: + """ + Gets the roles (group of different activities done by similar resources) + out of the log + + Parameters + ------------- + df + Pandas dataframe + parameters + Possible parameters of the algorithm + + Returns + ------------ + roles + List of different roles inside the log + """ + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes.DEFAULT_RESOURCE_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + activity_resource_couples = Counter(df.groupby([resource_key, activity_key]).size().to_dict()) + + return algorithm.apply(activity_resource_couples, parameters=parameters) diff --git a/pm4py/pm4py/algo/organizational_mining/sna/__init__.py b/pm4py/pm4py/algo/organizational_mining/sna/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c11dc8336b47fe26106be49eb31ed31884c6dae7 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.sna import algorithm, util, variants diff --git a/pm4py/pm4py/algo/organizational_mining/sna/algorithm.py b/pm4py/pm4py/algo/organizational_mining/sna/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..c42847e9ad8666b4925ff2a4be49b7f5c984bea8 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/algorithm.py @@ -0,0 +1,90 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.sna.variants.log import working_together as log_workingtogether, \ + handover as log_handover, jointactivities as log_jointactivities, subcontracting as log_subcontracting +from pm4py.algo.organizational_mining.sna.variants.pandas import jointactivities as pd_jointactivities, \ + handover as pd_handover, subcontracting as pd_subcontracting, working_together as pd_workingtogether +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.util import exec_utils +import numpy as np + +from enum import Enum +from pm4py.util import constants + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +import pandas as pd +from pm4py.objects.org.sna.obj import SNA + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + METRIC_NORMALIZATION = "metric_normalization" + + +class Variants(Enum): + HANDOVER_LOG = log_handover + WORKING_TOGETHER_LOG = log_workingtogether + SUBCONTRACTING_LOG = log_subcontracting + JOINTACTIVITIES_LOG = log_jointactivities + HANDOVER_PANDAS = pd_handover + WORKING_TOGETHER_PANDAS = pd_workingtogether + SUBCONTRACTING_PANDAS = pd_subcontracting + JOINTACTIVITIES_PANDAS = pd_jointactivities + + +def apply(log: Union[EventLog, pd.DataFrame], parameters: Optional[Dict[Union[str, Parameters], Any]] = None, variant=Variants.HANDOVER_LOG) -> SNA: + """ + Calculates a SNA metric + + Parameters + ------------ + log + Log + parameters + Possible parameters of the algorithm + variant + Variant of the algorithm to apply. Possible values: + - Variants.HANDOVER_LOG + - Variants.WORKING_TOGETHER_LOG + - Variants.SUBCONTRACTING_LOG + - Variants.JOINTACTIVITIES_LOG + - Variants.HANDOVER_PANDAS + - Variants.WORKING_TOGETHER_PANDAS + - Variants.SUBCONTRACTING_PANDAS + - Variants.JOINTACTIVITIES_PANDAS + + Returns + ----------- + tuple + Tuple containing the metric matrix and the resources list + """ + if parameters is None: + parameters = {} + + enable_metric_normalization = exec_utils.get_param_value(Parameters.METRIC_NORMALIZATION, parameters, False) + + if variant in [Variants.HANDOVER_LOG, Variants.WORKING_TOGETHER_LOG, Variants.JOINTACTIVITIES_LOG, + Variants.SUBCONTRACTING_LOG]: + log = log_conversion.apply(log, variant=log_conversion.Variants.TO_EVENT_LOG, parameters=parameters) + sna = exec_utils.get_variant(variant).apply(log, parameters=parameters) + abs_max = np.max(np.abs(list(sna.connections.values()))) + if enable_metric_normalization and abs_max > 0: + for key in sna.connections: + sna.connections[key] = sna.connections[key] / abs_max + return sna diff --git a/pm4py/pm4py/algo/organizational_mining/sna/util.py b/pm4py/pm4py/algo/organizational_mining/sna/util.py new file mode 100644 index 0000000000000000000000000000000000000000..e84a06e64e71644bf1c1f5d4bf1fe153ba0a4d44 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/util.py @@ -0,0 +1,101 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import List, Dict +from enum import Enum +from pm4py.util import exec_utils, nx_utils +from pm4py.objects.org.sna.obj import SNA +import numpy as np + + +class Parameters(Enum): + WEIGHT_THRESHOLD = "weight_threshold" + + +def sna_result_to_nx_graph(sna: SNA, parameters=None): + """ + Transforms the results of SNA to a NetworkX Graph / DiGraph object + (depending on the type of analysis). + + Parameters + ------------------ + sna + Result of a SNA operation + parameters + Parameters of the algorithm, including: + - Parameters.WEIGHT_THRESHOLD => the weight threshold (used to filter out edges) + + Returns + ----------------- + nx_graph + NetworkX Graph / DiGraph + """ + if parameters is None: + parameters = {} + + weight_threshold = exec_utils.get_param_value(Parameters.WEIGHT_THRESHOLD, parameters, 0.0) + directed = sna.is_directed + + if directed: + graph = nx_utils.DiGraph() + else: + graph = nx_utils.Graph() + + graph.add_edges_from({c for c, w in sna.connections.items() if w >= weight_threshold}) + + return graph + + +def cluster_affinity_propagation(sna: SNA, parameters=None) -> Dict[str, List[str]]: + """ + Performs a clustering using the affinity propagation algorithm provided by Scikit Learn + + Parameters + -------------- + sna + Result of a SNA operation + parameters + Parameters of the algorithm + + Returns + -------------- + clustering + Dictionary that contains, for each cluster that has been identified, + the list of resources of the cluster + """ + from pm4py.util import ml_utils + + if parameters is None: + parameters = {} + + originators = list(set(x[0] for x, y in sna.connections.items()).union(set(x[1] for x, y in sna.connections.items()))) + matrix = np.zeros((len(originators), len(originators))) + for c, w in sna.connections.items(): + matrix[originators.index(c[0]), originators.index(c[1])] = w + + affinity_propagation = ml_utils.AffinityPropagation(**parameters) + affinity_propagation.fit(matrix) + + clusters = affinity_propagation.predict(matrix) + ret = {} + for i in range(len(clusters)): + res = originators[i] + cluster = str(clusters[i]) + if cluster not in ret: + ret[cluster] = [] + ret[cluster].append(res) + + return ret diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/__init__.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1e8f6a3010d16934e52efc15c5375e5314626c51 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.sna.variants import log, pandas diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/log/__init__.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..85d162039bf1040aa1fb53efb23caf98dad01c3c --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.sna.variants.log import handover, jointactivities, subcontracting, working_together diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/log/handover.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/log/handover.py new file mode 100644 index 0000000000000000000000000000000000000000..c805532c9ed5aef1cc7512c89b6ad3cf845567e7 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/log/handover.py @@ -0,0 +1,100 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy + +from pm4py.statistics.variants.log import get as variants_filter +from pm4py.util import xes_constants as xes +from enum import Enum +from pm4py.util import constants, exec_utils +from pm4py.util import variants_util + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.org.sna.obj import SNA + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + BETA = "beta" + + +BETA = Parameters.BETA + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> SNA: + """ + Calculates the HW metric + + Parameters + ------------ + log + Log + parameters + Possible parameters of the algorithm: + Parameters.BETA -> beta value as described in the Wil SNA paper + + Returns + ----------- + tuple + Tuple containing the metric matrix and the resources list. Moreover, last boolean indicates that the metric is + directed. + """ + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes.DEFAULT_RESOURCE_KEY) + beta = exec_utils.get_param_value(Parameters.BETA, parameters, 0) + + parameters_variants = {variants_filter.Parameters.ACTIVITY_KEY: resource_key, + variants_filter.Parameters.ATTRIBUTE_KEY: resource_key} + variants_occ = {x: len(y) for x, y in variants_filter.get_variants(log, parameters=parameters_variants).items()} + variants_resources = list(variants_occ.keys()) + resources = [variants_util.get_activities_from_variant(y) for y in variants_resources] + + flat_list = sorted(list(set([item for sublist in resources for item in sublist]))) + + metric_matrix = numpy.zeros((len(flat_list), len(flat_list))) + + sum_i_to_j = {} + dividend = 0 + + for idx, rv in enumerate(resources): + rvj = variants_resources[idx] + for i in range(len(rv) - 1): + res_i = flat_list.index(rv[i]) + if not res_i in sum_i_to_j: + sum_i_to_j[res_i] = {} + for j in range(i + 1, len(rv)): + res_j = flat_list.index(rv[j]) + if not res_j in sum_i_to_j[res_i]: + sum_i_to_j[res_i][res_j] = 0 + if beta == 0: + sum_i_to_j[res_i][res_j] += variants_occ[rvj] + dividend += variants_occ[rvj] + break + else: + sum_i_to_j[res_i][res_j] += variants_occ[rvj] * (beta ** (j - i - 1)) + dividend += variants_occ[rvj] * (beta ** (j - i - 1)) + + connections = {} + for key1 in sum_i_to_j: + for key2 in sum_i_to_j[key1]: + connections[(flat_list[key1], flat_list[key2])] = sum_i_to_j[key1][key2] / dividend + + return SNA(connections, True) + diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/log/jointactivities.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/log/jointactivities.py new file mode 100644 index 0000000000000000000000000000000000000000..70c632aaa2bcd72a9f6dab68b07177660d3ebc6e --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/log/jointactivities.py @@ -0,0 +1,82 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter + +import numpy as np + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.util import xes_constants as xes +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.org.sna.obj import SNA + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + METRIC_NORMALIZATION = "metric_normalization" + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> SNA: + """ + Calculates the Joint Activities / Similar Task metric + + Parameters + ------------ + log + Log + parameters + Possible parameters of the algorithm + + Returns + ----------- + tuple + Tuple containing the metric matrix and the resources list. Moreover, last boolean indicates that the metric is + directed. + """ + from scipy.stats import pearsonr + + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes.DEFAULT_RESOURCE_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + stream = log_converter.apply(log, variant=log_converter.TO_EVENT_STREAM, parameters={"deepcopy": False, "include_case_attributes": False}) + activities = Counter(event[activity_key] for event in stream) + resources = Counter(event[resource_key] for event in stream) + activity_resource_couples = Counter((event[resource_key], event[activity_key]) for event in stream) + activities_keys = sorted(list(activities.keys())) + resources_keys = sorted(list(resources.keys())) + rsc_act_matrix = np.zeros((len(resources_keys), len(activities_keys))) + for arc in activity_resource_couples.keys(): + i = resources_keys.index(arc[0]) + j = activities_keys.index(arc[1]) + rsc_act_matrix[i, j] += activity_resource_couples[arc] + connections = {} + for i in range(rsc_act_matrix.shape[0]): + vect_i = rsc_act_matrix[i, :] + for j in range(rsc_act_matrix.shape[0]): + if not i == j: + vect_j = rsc_act_matrix[j, :] + r, p = pearsonr(vect_i, vect_j) + connections[(resources_keys[i], resources_keys[j])] = r + + return SNA(connections, False) diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/log/subcontracting.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/log/subcontracting.py new file mode 100644 index 0000000000000000000000000000000000000000..e222f68081261c42b9d15bf16acba5a4cf28edff --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/log/subcontracting.py @@ -0,0 +1,96 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy + +from pm4py.statistics.variants.log import get as variants_filter +from pm4py.util import xes_constants as xes +from enum import Enum +from pm4py.util import constants, exec_utils +from pm4py.util import variants_util + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.org.sna.obj import SNA + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + N = "n" + + +N = Parameters.N + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> SNA: + """ + Calculates the Subcontracting metric + + Parameters + ------------ + log + Log + parameters + Possible parameters of the algorithm: + Parameters.N -> n of the algorithm proposed in the Wil SNA paper + + Returns + ----------- + tuple + Tuple containing the metric matrix and the resources list + """ + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes.DEFAULT_RESOURCE_KEY) + n = exec_utils.get_param_value(Parameters.N, parameters, 2) + + parameters_variants = {variants_filter.Parameters.ACTIVITY_KEY: resource_key, + variants_filter.Parameters.ATTRIBUTE_KEY: resource_key} + variants_occ = {x: len(y) for x, y in variants_filter.get_variants(log, parameters=parameters_variants).items()} + variants_resources = list(variants_occ.keys()) + resources = [variants_util.get_activities_from_variant(y) for y in variants_resources] + + flat_list = sorted(list(set([item for sublist in resources for item in sublist]))) + + metric_matrix = numpy.zeros((len(flat_list), len(flat_list))) + + sum_i_to_j = {} + dividend = 0 + + for idx, rv in enumerate(resources): + rvj = variants_resources[idx] + dividend += variants_occ[rvj] + + for i in range(len(rv) - n): + res_i = flat_list.index(rv[i]) + res_i_n = flat_list.index(rv[i + n]) + if res_i == res_i_n: + if res_i not in sum_i_to_j: + sum_i_to_j[res_i] = {} + for j in range(i + 1, i + n): + res_j = flat_list.index(rv[j]) + if res_j not in sum_i_to_j[res_i]: + sum_i_to_j[res_i][res_j] = 0 + sum_i_to_j[res_i][res_j] += variants_occ[rvj] + + connections = {} + for key1 in sum_i_to_j: + for key2 in sum_i_to_j[key1]: + connections[(flat_list[key1], flat_list[key2])] = sum_i_to_j[key1][key2] / dividend + + return SNA(connections, True) diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/log/working_together.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/log/working_together.py new file mode 100644 index 0000000000000000000000000000000000000000..6a916d06f5cac1706d1e28d783cf1f428ed0ac63 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/log/working_together.py @@ -0,0 +1,81 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.variants.log import get as variants_filter +from pm4py.util import xes_constants as xes +from pm4py.util import exec_utils +from pm4py.util import variants_util +from enum import Enum +from pm4py.util import constants + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.org.sna.obj import SNA +from collections import Counter + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + METRIC_NORMALIZATION = "metric_normalization" + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> SNA: + """ + Calculates the Working Together metric + + Parameters + ------------ + log + Log + parameters + Possible parameters of the algorithm + + Returns + ----------- + tuple + Tuple containing the metric matrix and the resources list. Moreover, last boolean indicates that the metric is + not directed. + """ + + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes.DEFAULT_RESOURCE_KEY) + + parameters_variants = {variants_filter.Parameters.ACTIVITY_KEY: resource_key, + variants_filter.Parameters.ATTRIBUTE_KEY: resource_key} + variants_occ = {x: len(y) for x, y in variants_filter.get_variants(log, parameters=parameters_variants).items()} + variants_resources = list(variants_occ.keys()) + resources = [variants_util.get_activities_from_variant(y) for y in variants_resources] + + flat_list = sorted(list(set([item for sublist in resources for item in sublist]))) + + connections = Counter() + + for idx, rv in enumerate(resources): + rvj = variants_resources[idx] + + ord_res_list = sorted(list(set(rv))) + + for i in range(len(ord_res_list) - 1): + res_i = flat_list.index(ord_res_list[i]) + for j in range(i + 1, len(ord_res_list)): + res_j = flat_list.index(ord_res_list[j]) + connections[(flat_list[res_i], flat_list[res_j])] += float(variants_occ[rvj]) / float(len(log)) + connections[(flat_list[res_j], flat_list[res_i])] += float(variants_occ[rvj]) / float(len(log)) + + return SNA(dict(connections), False) diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/__init__.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bc0de76baf4b50a10f62a23e6c8f476657441e14 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.organizational_mining.sna.variants.pandas import handover, jointactivities, subcontracting, working_together diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/handover.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/handover.py new file mode 100644 index 0000000000000000000000000000000000000000..de22b7d51a331d29d785ce5f3f54423c3c8e64eb --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/handover.py @@ -0,0 +1,109 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import xes_constants as xes +from enum import Enum +from pm4py.util import constants, exec_utils +from pm4py.util import variants_util + +from typing import Optional, Dict, Any, Union +from pm4py.objects.org.sna.obj import SNA +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + BETA = "beta" + + +BETA = Parameters.BETA + + +def apply(log: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> SNA: + """ + Calculates the HW metric + + Parameters + ------------ + log + Log + parameters + Possible parameters of the algorithm: + Paramters.BETA -> beta value as described in the Wil SNA paper + + Returns + ----------- + tuple + Tuple containing the metric matrix and the resources list. Moreover, last boolean indicates that the metric is + directed. + """ + if parameters is None: + parameters = {} + + import numpy + from pm4py.statistics.traces.generic.pandas import case_statistics + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes.DEFAULT_RESOURCE_KEY) + beta = exec_utils.get_param_value(Parameters.BETA, parameters, 0) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + parameters_variants = {case_statistics.Parameters.ACTIVITY_KEY: resource_key, + case_statistics.Parameters.ATTRIBUTE_KEY: resource_key, + case_statistics.Parameters.CASE_ID_KEY: case_id_key} + + variants_occ = {x["variant"]: x[case_id_key] for x in + case_statistics.get_variant_statistics(log, parameters=parameters_variants)} + variants_resources = list(variants_occ.keys()) + resources = [variants_util.get_activities_from_variant(y) for y in variants_resources] + + flat_list = sorted(list(set([item for sublist in resources for item in sublist]))) + + metric_matrix = numpy.zeros((len(flat_list), len(flat_list))) + + sum_i_to_j = {} + dividend = 0 + + for idx, rv in enumerate(resources): + rvj = variants_resources[idx] + for i in range(len(rv) - 1): + res_i = flat_list.index(rv[i]) + if not res_i in sum_i_to_j: + sum_i_to_j[res_i] = {} + for j in range(i + 1, len(rv)): + res_j = flat_list.index(rv[j]) + if not res_j in sum_i_to_j[res_i]: + sum_i_to_j[res_i][res_j] = 0 + if beta == 0: + sum_i_to_j[res_i][res_j] += variants_occ[rvj] + dividend += variants_occ[rvj] + break + else: + sum_i_to_j[res_i][res_j] += variants_occ[rvj] * (beta ** (j - i - 1)) + dividend += variants_occ[rvj] * (beta ** (j - i - 1)) + + for key1 in sum_i_to_j: + for key2 in sum_i_to_j[key1]: + metric_matrix[key1][key2] = sum_i_to_j[key1][key2] / dividend + + connections = {} + for key1 in sum_i_to_j: + for key2 in sum_i_to_j[key1]: + connections[(flat_list[key1], flat_list[key2])] = sum_i_to_j[key1][key2] / dividend + metric_matrix[key1][key2] = sum_i_to_j[key1][key2] / dividend + + return SNA(connections, True) diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/jointactivities.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/jointactivities.py new file mode 100644 index 0000000000000000000000000000000000000000..fd966b3b3c521769ed8173ca652eaf5b76403227 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/jointactivities.py @@ -0,0 +1,78 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import xes_constants as xes +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants + +from typing import Optional, Dict, Any, Union +import pandas as pd +from pm4py.objects.org.sna.obj import SNA + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + METRIC_NORMALIZATION = "metric_normalization" + + +def apply(log: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> SNA: + """ + Calculates the Joint Activities / Similar Task metric + + Parameters + ------------ + log + Log + parameters + Possible parameters of the algorithm + + Returns + ----------- + tuple + Tuple containing the metric matrix and the resources list. Moreover, last boolean indicates that the metric is + directed. + """ + import numpy as np + from scipy.stats import pearsonr + + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes.DEFAULT_RESOURCE_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + + activities = log[activity_key].value_counts().to_dict() + resources = log[resource_key].value_counts().to_dict() + activity_resource_couples = log.groupby([resource_key, activity_key]).size().to_dict() + activities_keys = sorted(list(activities.keys())) + resources_keys = sorted(list(resources.keys())) + rsc_act_matrix = np.zeros((len(resources_keys), len(activities_keys))) + for arc in activity_resource_couples.keys(): + i = resources_keys.index(arc[0]) + j = activities_keys.index(arc[1]) + rsc_act_matrix[i, j] += activity_resource_couples[arc] + connections = {} + for i in range(rsc_act_matrix.shape[0]): + vect_i = rsc_act_matrix[i, :] + for j in range(rsc_act_matrix.shape[0]): + if not i == j: + vect_j = rsc_act_matrix[j, :] + r, p = pearsonr(vect_i, vect_j) + connections[(resources_keys[i], resources_keys[j])] = r + + return SNA(connections, False) diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/subcontracting.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/subcontracting.py new file mode 100644 index 0000000000000000000000000000000000000000..b3a1dbe041745a31ba63626f0d405e8c9fffb10a --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/subcontracting.py @@ -0,0 +1,99 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import xes_constants as xes +from enum import Enum +from pm4py.util import constants, exec_utils +from pm4py.util import variants_util + +from typing import Optional, Dict, Any, Union +import pandas as pd +from pm4py.objects.org.sna.obj import SNA + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + N = "n" + + +N = Parameters.N + + +def apply(log: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> SNA: + """ + Calculates the Subcontracting metric + + Parameters + ------------ + log + Log + parameters + Possible parameters of the algorithm: + Parameters.N -> n of the algorithm proposed in the Wil SNA paper + + Returns + ----------- + tuple + Tuple containing the metric matrix and the resources list + """ + if parameters is None: + parameters = {} + + import numpy + from pm4py.statistics.traces.generic.pandas import case_statistics + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes.DEFAULT_RESOURCE_KEY) + n = exec_utils.get_param_value(Parameters.N, parameters, 2) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + parameters_variants = {case_statistics.Parameters.ACTIVITY_KEY: resource_key, + case_statistics.Parameters.ATTRIBUTE_KEY: resource_key, + case_statistics.Parameters.CASE_ID_KEY: case_id_key} + variants_occ = {x["variant"]: x[case_id_key] for x in + case_statistics.get_variant_statistics(log, parameters=parameters_variants)} + variants_resources = list(variants_occ.keys()) + resources = [variants_util.get_activities_from_variant(y) for y in variants_resources] + + flat_list = sorted(list(set([item for sublist in resources for item in sublist]))) + + metric_matrix = numpy.zeros((len(flat_list), len(flat_list))) + + sum_i_to_j = {} + dividend = 0 + + for idx, rv in enumerate(resources): + rvj = variants_resources[idx] + dividend += variants_occ[rvj] + for i in range(len(rv) - n): + res_i = flat_list.index(rv[i]) + res_i_n = flat_list.index(rv[i + n]) + if res_i == res_i_n: + if res_i not in sum_i_to_j: + sum_i_to_j[res_i] = {} + for j in range(i + 1, i + n): + res_j = flat_list.index(rv[j]) + if res_j not in sum_i_to_j[res_i]: + sum_i_to_j[res_i][res_j] = 0 + sum_i_to_j[res_i][res_j] += variants_occ[rvj] + + connections = {} + for key1 in sum_i_to_j: + for key2 in sum_i_to_j[key1]: + connections[(flat_list[key1], flat_list[key2])] = sum_i_to_j[key1][key2] / dividend + + return SNA(connections, True) diff --git a/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/working_together.py b/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/working_together.py new file mode 100644 index 0000000000000000000000000000000000000000..cdcccc7a1e1c94cdebb153f206e0ef4a42b33003 --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/sna/variants/pandas/working_together.py @@ -0,0 +1,85 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import xes_constants as xes +from pm4py.util import exec_utils +from pm4py.util import variants_util +from enum import Enum +from pm4py.util import constants + +from typing import Optional, Dict, Any, Union +import pandas as pd +from pm4py.objects.org.sna.obj import SNA +from collections import Counter + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + METRIC_NORMALIZATION = "metric_normalization" + + +def apply(log: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> SNA: + """ + Calculates the Working Together metric + + Parameters + ------------ + log + Log + parameters + Possible parameters of the algorithm + + Returns + ----------- + tuple + Tuple containing the metric matrix and the resources list. Moreover, last boolean indicates that the metric is + not directed. + """ + + if parameters is None: + parameters = {} + + from pm4py.statistics.traces.generic.pandas import case_statistics + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes.DEFAULT_RESOURCE_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + parameters_variants = {case_statistics.Parameters.ACTIVITY_KEY: resource_key, + case_statistics.Parameters.ATTRIBUTE_KEY: resource_key, + case_statistics.Parameters.CASE_ID_KEY: case_id_key} + variants_occ = {x["variant"]: x[case_id_key] for x in + case_statistics.get_variant_statistics(log, parameters=parameters_variants)} + variants_resources = list(variants_occ.keys()) + resources = [variants_util.get_activities_from_variant(y) for y in variants_resources] + + flat_list = sorted(list(set([item for sublist in resources for item in sublist]))) + + connections = Counter() + + for idx, rv in enumerate(resources): + rvj = variants_resources[idx] + ord_res_list = sorted(list(set(rv))) + + for i in range(len(ord_res_list) - 1): + res_i = flat_list.index(ord_res_list[i]) + for j in range(i + 1, len(ord_res_list)): + res_j = flat_list.index(ord_res_list[j]) + connections[(flat_list[res_i], flat_list[res_j])] += float(variants_occ[rvj]) / float(len(log)) + connections[(flat_list[res_j], flat_list[res_i])] += float(variants_occ[rvj]) / float(len(log)) + + return SNA(dict(connections), False) diff --git a/pm4py/pm4py/algo/organizational_mining/util.py b/pm4py/pm4py/algo/organizational_mining/util.py new file mode 100644 index 0000000000000000000000000000000000000000..e3f2285b334dce194e35f752bf2af6b5167b49ae --- /dev/null +++ b/pm4py/pm4py/algo/organizational_mining/util.py @@ -0,0 +1,190 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Union, Optional, Dict, Any, Tuple + +import pandas as pd + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.util import xes_constants, constants, exec_utils, pandas_utils + + +class Parameters(Enum): + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + GROUP_KEY = constants.PARAMETER_CONSTANT_GROUP_KEY + + +def get_groups_from_log(log_obj: Union[pd.DataFrame, EventLog], parameters: Optional[Dict[Any, str]] = None) -> Dict[ + str, Dict[str, int]]: + """ + From the log object, where events have a group, a resource and an activity attribute, + gets a dictionary where the first key is a group, the second key is a resource and the value is the number + of events done by the resource when belonging to the given group. + + Parameters + --------------- + log_obj + Log object + parameters + Parameters of the algorithm, including: + - Parameters.RESOURCE_KEY => the resource attribute + - Parameters.ACTIVITY_KEY => the activity attribute + - Parameters.GROUP_KEY => the group + + Returns + --------------- + dict + Aforementioned dictionary + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + group_key = exec_utils.get_param_value(Parameters.GROUP_KEY, parameters, xes_constants.DEFAULT_GROUP_KEY) + + groups = {} + + if pandas_utils.check_is_pandas_dataframe(log_obj): + group_res = log_obj.groupby([resource_key, group_key]).count().to_dict()[activity_key] + for el in group_res: + if not el[1] in groups: + groups[el[1]] = {} + groups[el[1]][el[0]] = group_res[el] + else: + log_obj = log_converter.apply(log_obj, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + for trace in log_obj: + for event in trace: + if activity_key in event and resource_key in event and group_key in event: + group = event[group_key] + resource = event[resource_key] + if group not in groups: + groups[group] = {} + if resource not in groups[group]: + groups[group][resource] = 0 + groups[group][resource] += 1 + + return groups + + +def get_res_act_from_log(log_obj: Union[pd.DataFrame, EventLog], parameters: Optional[Dict[Any, str]] = None) -> Tuple[ + Dict[str, Dict[str, int]], Dict[str, Dict[str, int]]]: + """ + From the log object, where events have a group, a resource and an activity attribute, + gets two dictionaries: + - The first, where the first key is the resource, the second key is the activity and the third is the number of + events of the given activity done by the given resource + - The second, where the first key is the activity, the second key is the resource and the third is the number of + events of the given activity done by the given resource + + Parameters + --------------- + log_obj + Log object + parameters + Parameters of the algorithm, including: + - Parameters.RESOURCE_KEY => the resource attribute + - Parameters.ACTIVITY_KEY => the activity attribute + - Parameters.GROUP_KEY => the group + + Returns + --------------- + res_act + Dictionary resources-activities-occurrences + act_res + Dictionary activities-resources-occurrences + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + group_key = exec_utils.get_param_value(Parameters.GROUP_KEY, parameters, xes_constants.DEFAULT_GROUP_KEY) + + res_act = {} + act_res = {} + + if pandas_utils.check_is_pandas_dataframe(log_obj): + aggr = log_obj.groupby([activity_key, resource_key]).count().to_dict()[group_key] + for el in aggr: + if not el[1] in res_act: + res_act[el[1]] = {} + if not el[0] in act_res: + act_res[el[0]] = {} + res_act[el[1]][el[0]] = aggr[el] + act_res[el[0]][el[1]] = aggr[el] + else: + log_obj = log_converter.apply(log_obj, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + for trace in log_obj: + for event in trace: + if activity_key in event and resource_key in event: + activity = event[activity_key] + resource = event[resource_key] + if resource not in res_act: + res_act[resource] = {} + if activity not in act_res: + act_res[activity] = {} + if activity not in res_act[resource]: + res_act[resource][activity] = 0 + if resource not in act_res[activity]: + act_res[activity][resource] = 0 + res_act[resource][activity] += 1 + act_res[activity][resource] += 1 + + return res_act, act_res + + +def get_resources_from_log(log_obj: Union[pd.DataFrame, EventLog], parameters: Optional[Dict[Any, str]] = None) -> Dict[ + str, int]: + """ + Gets the resources, along with the respective number of events, from the log object + + Parameters + ---------------- + log_obj + Log object + parameters + Parameters of the algorithm, including: + - Parameters.RESOURCE_KEY => the resource attribute + - Parameters.ACTIVITY_KEY => the activity attribute + - Parameters.GROUP_KEY => the group + + Returns + ---------------- + resources_dictionary + Dictionary of resources along with their occurrences + """ + if parameters is None: + parameters = {} + + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + + resources = {} + + if pandas_utils.check_is_pandas_dataframe(log_obj): + resources = log_obj[resource_key].value_counts().to_dict() + else: + for trace in log_obj: + for event in trace: + resource = event[resource_key] + if resource not in resources: + resources[resource] = 0 + resources[resource] += 1 + + return resources diff --git a/pm4py/pm4py/algo/querying/__init__.py b/pm4py/pm4py/algo/querying/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..be585a556f86025af98379923033e0652c861926 --- /dev/null +++ b/pm4py/pm4py/algo/querying/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + diff --git a/pm4py/pm4py/algo/querying/llm/__init__.py b/pm4py/pm4py/algo/querying/llm/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..cdf54e0937adf3ea28bb4b57355f6064869b526c --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.querying.llm import abstractions, connectors diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/__init__.py b/pm4py/pm4py/algo/querying/llm/abstractions/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..348a18dd2f1e83930055efe9aec4fcc928c37794 --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.querying.llm.abstractions import case_to_descr, log_to_cols_descr, log_to_dfg_descr, log_to_fea_descr, log_to_variants_descr, logske_to_descr, net_to_descr, ocel_fea_descr, ocel_ocdfg_descr, stream_to_descr diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/case_to_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/case_to_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..6101a93aa8d3ea109966579ac07ca2c4cdd6ae21 --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/case_to_descr.py @@ -0,0 +1,106 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.log.obj import Trace +from typing import Optional, Dict, Any + + +class Parameters(Enum): + INCLUDE_CASE_ATTRIBUTES = "include_case_attributes" + INCLUDE_EVENT_ATTRIBUTES = "include_event_attributes" + INCLUDE_TIMESTAMP = "include_timestamp" + INCLUDE_HEADER = "include_header" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + + +def apply(case: Trace, parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Provides a textual abstraction of a single case (Trace object) of a traditional event log + + Parameters + --------------- + case + Single case (Trace object) of a traditional event log + parameters + Parameters of the method, including: + - Parameters.INCLUDING_CASE_ATTRIBUTES + - Parameters.INCLUDE_EVENT_ATTRIBUTES + - Parameters.INCLUDE_TIMESTAMP + - Parameters.INCLUDE_HEADER => includes the header (or not) in the response) + - Parameters.ACTIVITY_KEY => the attribute to be used as activity + - Parameters.TIMESTAMP_KEY => the attribute to be used as timestamp + + Returns + --------------- + stru + Textual abstraction of the case + """ + if parameters is None: + parameters = {} + + include_case_attributes = exec_utils.get_param_value(Parameters.INCLUDE_CASE_ATTRIBUTES, parameters, True) + include_event_attributes = exec_utils.get_param_value(Parameters.INCLUDE_EVENT_ATTRIBUTES, parameters, True) + include_timestamp = exec_utils.get_param_value(Parameters.INCLUDE_TIMESTAMP, parameters, True) + include_header = exec_utils.get_param_value(Parameters.INCLUDE_HEADER, parameters, True) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + + ret = ["\n"] + + if include_header: + ret.append("If I have a case") + if include_case_attributes: + ret.append(" with the following (case) attributes:") + ret.append("") + + ret.append("\n") + + if include_case_attributes: + for k, v in case.attributes.items(): + ret.append("\n%s = %s" % (str(k), str(v))) + + ret.append("\n\n") + + if include_header: + ret.append("\nthe case contains the following events (the activity of the event is reported first):\n\n") + + for ev in case: + stru = "%s " % (ev[activity_key]) + ev_attrs = sorted([str(x) for x in ev if x not in [activity_key, timestamp_key]]) + + if include_timestamp or (ev_attrs and include_event_attributes): + stru += "(" + if include_timestamp: + stru += " timestamp = " + str(ev[timestamp_key]) + " ; " + + if include_event_attributes and ev_attrs: + for attr in ev_attrs: + stru += " " + attr + " = " + str(ev[attr]) + " ; " + + stru += ")" + + stru += "\n" + + ret.append(stru) + + ret.append("\n") + + return "".join(ret) diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/declare_to_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/declare_to_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..2c26663eb09bb266ac60af946e38d2e30e9c7fd9 --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/declare_to_descr.py @@ -0,0 +1,103 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from typing import Optional, Dict, Any +from pm4py.algo.discovery.declare.templates import * +from pm4py.util import exec_utils + + +class Parameters(Enum): + INCLUDE_HEADER = "include_header" + + +def get_model_description(): + ret = [] + ret.append( + "I have a DECLARE declarative process model containing the following constraints (here we provide a short explanation):\n") + ret.append("Existence: the activity is executed at least once.\n") + ret.append("Absence: the activity is not executed.\n") + ret.append("Exactly 1: the activity is executed exactly one time.\n") + ret.append("Initialization: the trace starts with one of the given activities.\n") + ret.append("Responded existence: given a couple of activities (A, B), if A occurs then B also occurs.\n") + ret.append("Co-Existence: given a couple of activities (A, B), if A occurs then B also occurs.\n") + ret.append( + "Response: given a couple of activities (A, B), if A occurs then B also occurs in the future of the trace.\n") + ret.append( + "Precedence: given a couple of activities (A, B), if B occurs then also A occurs in the past of the trace.\n") + ret.append( + "Succession: given a couple of activities (A, B), both the response and precedence constraints are satisfied.\n") + ret.append( + "Alternate response, alternate precedence, alternate succession: as the constraints mentioned above, but strenghtened by specifying that the events must alternate without repetitions.\n") + ret.append( + "Chain response, chain precedence, chain succession: as the constraints mentioned above, strenghtened by imposing the directly-follows relation.\n") + ret.append("Non Co-Existence: given a couple of activities (A, B), if A occurs then B should not occur.\n") + ret.append( + "Non Succession and non Chain succession: given a couple of activities (A, B), B should not follow A.\n") + ret.append("\n\n") + return "".join(ret) + + +def get_model_implementation(): + implementation = "A DECLARE model in pm4py is expressed as a Python dictionary containing the following keys:\n" + implementation += "'" + "', '".join([EXISTENCE, ABSENCE, EXACTLY_ONE, INIT, RESPONDED_EXISTENCE, COEXISTENCE, RESPONSE, PRECEDENCE, SUCCESSION, ALTRESPONSE, ALTPRECEDENCE, ALTSUCCESSION, CHAINRESPONSE, CHAINPRECEDENCE, CHAINSUCCESSION, NONCOEXISTENCE, NONSUCCESSION, NONCHAINSUCCESSION]) + "'\n" + implementation += "For the keys {'"+"', '".join([EXISTENCE, ABSENCE, EXACTLY_ONE, INIT])+"'}, the value is a dictionary containing as keys the activities and as corresponding value the support (please set it to 1.0) and confidence of the declarative rule.\n" + implementation += "For the keys {'"+"', '".join([RESPONDED_EXISTENCE, COEXISTENCE, RESPONSE, PRECEDENCE, SUCCESSION, ALTRESPONSE, ALTPRECEDENCE, ALTSUCCESSION, CHAINRESPONSE, CHAINPRECEDENCE, CHAINSUCCESSION, NONCOEXISTENCE, NONSUCCESSION, NONCHAINSUCCESSION])+"'}, the value is a dictionary containing as keys the activities and as corresponding value the support (please set it to 1.0) and confidence of the declarative rule.\n" + + return implementation + + +def apply(declare: Dict[str, Dict[Any, Dict[str, int]]], parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Gets a textual abstraction of a DECLARE model + + Parameters + --------------- + declare + DECLARE model + parameters + Possible parameters of the algorithm, including: + - Parameters.INCLUDE_HEADER => include the header of the response + + Returns + --------------- + stru + Textual abstraction + """ + if parameters is None: + parameters = {} + + include_header = exec_utils.get_param_value(Parameters.INCLUDE_HEADER, parameters, True) + + ret = ["\n"] + + if include_header: + ret.append(get_model_description()) + + ret.append("These are the constraints of the model:\n") + mapping = {EXISTENCE: "Existence", ABSENCE: "Absence", EXACTLY_ONE: "Exactly 1", INIT: "Initialization", + RESPONDED_EXISTENCE: "Responded Existence", COEXISTENCE: "Co-Existence", RESPONSE: "Response", + PRECEDENCE: "Precedence", SUCCESSION: "Succession", ALTRESPONSE: "Alternate response", + ALTPRECEDENCE: "Alternate precedence", ALTSUCCESSION: "Alternate succession", + CHAINRESPONSE: "Chain response", CHAINPRECEDENCE: "Chain precedence", + CHAINSUCCESSION: "Chain succession", NONCOEXISTENCE: "Non Co-Existence", NONSUCCESSION: "Non Succession", + NONCHAINSUCCESSION: "Non Chain succession"} + + for temp in declare: + ret.append(mapping[temp] + ": " + ", ".join([str(x) for x in declare[temp]]) + "\n") + + return "".join(ret) diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/log_to_cols_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/log_to_cols_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..edc63e7bee327da018bcf7d53b9e1e02d649d583 --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/log_to_cols_descr.py @@ -0,0 +1,82 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Optional, Dict, Any, Union +from pm4py.objects.conversion.log import converter as log_converter +from enum import Enum +from pm4py.util import exec_utils, constants + + +class Parameters(Enum): + MAX_LEN = "max_len" + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def apply(log_obj: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> str: + if parameters is None: + parameters = {} + + log_obj = log_converter.apply(log_obj, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, constants.OPENAI_MAX_LEN) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + log_obj = log_obj[[x for x in log_obj.columns if x != case_id_key]] + cols_dtypes = {x: str(log_obj[x].dtype) for x in log_obj.columns} + + num_nans = {} + lst_values = [] + + for x, y in cols_dtypes.items(): + num_nans[x] = log_obj[x].isna().sum() + if "object" in y or "string" in y or "bool" in y: + values = log_obj[x].value_counts().to_dict() + if len(values) > 1: + for v, co in values.items(): + lst_values.append((x, v, co)) + + lst_values = sorted(lst_values, key=lambda x: (x[2], x[0], x[1]), reverse=True) + ret = {} + curr_len = 0 + + for x, y in cols_dtypes.items(): + if "float" in y or "double" in y or "date" in y: + quantiles = " quantiles: " + str(log_obj[x].quantile([0.0, 0.25, 0.5, 0.75, 1.0]).to_dict()) + nans = " empty: "+str(num_nans[x])+" " + curr_len += len(x) + len(nans) + len(quantiles) + 1 + + ret[x] = nans + quantiles + + for el in lst_values: + if curr_len >= max_len: + break + + if not el[0] in ret: + stru = " empty: "+str(num_nans[el[0]]) + " values:" + ret[el[0]] = stru + curr_len += len(el[0]) + len(stru) + 9 + + stru = " ("+str(el[1])+"; freq. "+str(el[2])+")" + ret[el[0]] += stru + curr_len += len(stru) + + keys = sorted(list(ret)) + ret = [k + " "+ret[k] for k in keys] + return "\n".join(ret) + + diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/log_to_dfg_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/log_to_dfg_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..4938bf3abd5cda26625bb44deed1152dc4937bd2 --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/log_to_dfg_descr.py @@ -0,0 +1,171 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics +from typing import Union, Optional, Dict, Any, Tuple +from pm4py.objects.log.obj import EventLog, EventStream +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +import pandas as pd +import math +import numpy as np + + +class Parameters(Enum): + INCLUDE_FREQUENCY = "include_frequency" + INCLUDE_PERFORMANCE = "include_performance" + MAX_LEN = "max_len" + RELATIVE_FREQUENCY = "relative_frequency" + RESPONSE_HEADER = "response_header" + PRIMARY_PERFORMANCE_AGGREGATION = "primary_performance_aggregation" + SECONDARY_PERFORMANCE_AGGREGATION = "secondary_performance_aggregation" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def abstraction_from_frequency_performance_dfg(freq_dfg: Dict[Tuple[str, str], int], perf_dfg: Dict[Tuple[str, str], Dict[str, float]], parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Obtains the abstraction starting from the knowledge of the frequency of the paths, and their performance. + + Minimal viable example: + + import pm4py + from pm4py.algo.querying.llm.abstractions import log_to_dfg_descr + + log = pm4py.read_xes('tests/input_data/running-example.xes') + freq_dfg, sa, ea = pm4py.discover_dfg(log) + perf_dfg, sa, ea = pm4py.discover_performance_dfg(log) + print(log_to_dfg_descr.abstraction_from_frequency_performance_dfg(freq_dfg, perf_dfg)) + + Parameters + --------------- + freq_dfg + Dictionary associating to each path its frequency + perf_dfg + Dictionary associating to each path its performance. A path ('A', 'B') is associated to a dictionary + containing performance metrics, i.e. ('A', 'B'): {'mean': 86400, 'stdev': 86400} means that: + - the average time between the activities A and B is 1 day + - also the standard deviation of the times between A and B is 1 day + parameters + Optional parameters of the algorithm, including: + - Parameters.RELATIVE_FREQUENCY => (boolean) decides if the frequency DFG should be normalized to a relative + frequency + - Parameters.INCLUDE_FREQUENCY => includes the frequency of the arcs in the textual abstraction + - Parameters.INCLUDE_PERFORMANCE => includes the performance of the arcs in the textual abstraction + - Parameters.MAX_LEN => desidered length of the textual abstraction + - Parameters.RESPONSE_HEADER => includes an header in the textual abstraction, which explains the context + - Parameters.PRIMARY_PERFORMANCE_AGGREGATION => primary performance metric to be used to express the performance of the arcs (e.g., mean). Available options: mean, median, stdev, min, max, sum + - Parameters.SECONDARY_PERFORMANCE_AGGREGATION => secondary performance metric to be used to express the performance of the arcs (e.g., stdev). Available options: mean, median, stdev, min, max, sum + Returns + --------------- + textual_abstraction + Textual abstraction + """ + if parameters is None: + parameters = {} + + relative_frequency = exec_utils.get_param_value(Parameters.RELATIVE_FREQUENCY, parameters, False) + include_frequency = exec_utils.get_param_value(Parameters.INCLUDE_FREQUENCY, parameters, True) + include_performance = exec_utils.get_param_value(Parameters.INCLUDE_PERFORMANCE, parameters, True) + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, constants.OPENAI_MAX_LEN) + response_header = exec_utils.get_param_value(Parameters.RESPONSE_HEADER, parameters, True) + primary_performance_aggregation = exec_utils.get_param_value(Parameters.PRIMARY_PERFORMANCE_AGGREGATION, parameters, "mean") + secondary_performance_aggregation = exec_utils.get_param_value(Parameters.SECONDARY_PERFORMANCE_AGGREGATION, parameters, None) + + paths = sorted([(x, y) for x, y in freq_dfg.items()], key=lambda z: (z[1], z[0]), reverse=True) + paths = [x[0] for x in paths] + + ret = "If I have a process with flow:\n\n" if response_header else "\n\n" + for p in paths: + if len(ret) > max_len: + break + stru = "%s -> %s " % (p[0], p[1]) + if include_frequency or include_performance: + stru = stru + "(" + if include_frequency: + stru = stru + " frequency = " + stru = stru + str(freq_dfg[p]) + if relative_frequency: + stru = stru + "\%" + stru = stru + " " + if include_performance: + stru = stru + " performance = " + stru = stru + "%.3f" % perf_dfg[p][primary_performance_aggregation] + stru = stru + " " + if secondary_performance_aggregation is not None and secondary_performance_aggregation in perf_dfg[p] and perf_dfg[p][secondary_performance_aggregation] is not None and not np.isnan(perf_dfg[p][secondary_performance_aggregation]): + stru = stru + " " + secondary_performance_aggregation + " = " + stru = stru + "%.3f" % perf_dfg[p][secondary_performance_aggregation] + stru = stru + " " + stru = stru + ")\n" + ret = ret + stru + ret = ret + "\n\n" + return ret + + +def apply(log_obj: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Gets the textual abstraction of the directly-follows graph computed on the provided log object. + + Minimal viable example: + import pm4py + from pm4py.algo.querying.llm.abstractions import log_to_dfg_descr + + log = pm4py.read_xes('tests/input_data/running-example.xes') + print(log_to_dfg_descr.apply(log)) + + Parameters + --------------- + log_obj + Log object (event log / Pandas dataframe) + parameters + Optional Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to be used as activity + - Parameters.TIMESTAMP_KEY => the attribute to be used as timestamp + - Parameters.CASE_ID_KEY => the attribute to be used as case ID + - Parameters.RELATIVE_FREQUENCY => (boolean) decides if the frequency DFG should be normalized to a relative + frequency + - Parameters.INCLUDE_FREQUENCY => includes the frequency of the arcs in the textual abstraction + - Parameters.INCLUDE_PERFORMANCE => includes the performance of the arcs in the textual abstraction + - Parameters.MAX_LEN => desidered length of the textual abstraction + - Parameters.RESPONSE_HEADER => includes an header in the textual abstraction, which explains the context + - Parameters.PRIMARY_PERFORMANCE_AGGREGATION => primary performance metric to be used to express the performance of the arcs (e.g., mean). Available options: mean, median, stdev, min, max, sum + - Parameters.SECONDARY_PERFORMANCE_AGGREGATION => secondary performance metric to be used to express the performance of the arcs (e.g., stdev). Available options: mean, median, stdev, min, max, sum + + Returns + --------------- + textual_abstraction + Textual abstraction + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + relative_frequency = exec_utils.get_param_value(Parameters.RELATIVE_FREQUENCY, parameters, False) + + log_obj = log_converter.apply(log_obj, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + freq_dfg, perf_dfg = df_statistics.get_dfg_graph(log_obj, measure="both", perf_aggregation_key="all", activity_key=activity_key, case_id_glue=case_id_key, timestamp_key=timestamp_key) + if relative_frequency: + freq_dfg = df_statistics.get_dfg_graph(log_obj, measure="frequency", activity_key=activity_key, case_id_glue=case_id_key, timestamp_key=timestamp_key, keep_once_per_case=True) + num_cases = log_obj[case_id_key].nunique() + freq_dfg = {x: max(1, math.floor((y*100.0)/num_cases)) for x, y in freq_dfg.items()} + + return abstraction_from_frequency_performance_dfg(freq_dfg, perf_dfg, parameters=parameters) diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/log_to_fea_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/log_to_fea_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..a3c5819a930486ed07feab93197ee0b831bb555a --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/log_to_fea_descr.py @@ -0,0 +1,196 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any, Union +from pm4py.util import exec_utils, constants, pandas_utils +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.algo.transformation.log_to_features import algorithm as log_to_features +from enum import Enum +import numpy as np + + +class Parameters(Enum): + INCLUDE_HEADER = "include_header" + MAX_LEN = "max_len" + + +def __transform_to_string(stru: str) -> str: + if stru == "@@max_concurrent_activities_general": + return "Maximum Number of Concurrent Events" + elif stru.startswith("@@max_concurrent_activities_like_"): + return "Maximum Number of Concurrent '"+stru.split("@@max_concurrent_activities_like_")[-1]+"'" + elif stru.startswith("event:"): + stru = stru.split("event:")[-1] + if "@" in stru: + attr = stru.split("@")[0] + value = stru.split("@")[-1] + return "Value '"+value+"' for Event Attribute '"+attr+"'" + else: + return "Values for Event Attribute '"+stru+"'" + elif stru.startswith("trace:"): + stru = stru.split("trace:")[-1] + if "@" in stru: + attr = stru.split("@")[0] + value = stru.split("@")[-1] + return "Value '"+value+"' for Case Attribute '"+attr+"'" + else: + return "Values for Case Attribute '"+stru+"'" + elif stru.startswith("succession:"): + stru = stru.split("succession:")[-1] + attr = stru.split("@")[0] + stru = stru.split("@")[-1] + val1 = stru.split("#")[0] + val2 = stru.split("#")[-1] + return "Succession '"+val1+"' -> '"+val2+"' for the Values of the Attribute '"+attr+"'" + elif stru == "@@caseDuration": + return "Case Duration" + elif stru.startswith("firstIndexAct@@"): + return "First Position of the Activity '"+stru.split("@@")[-1]+"' in the Case" + elif stru.startswith("lastIndexAct@@"): + return "Last Position of the Activity '"+stru.split("@@")[-1]+"' in the Case" + elif stru.startswith("startToLastOcc@@"): + return "Time from Case Start to Last Occurrence of the Activity '" + stru.split("@@")[-1] + "'" + elif stru.startswith("lastOccToEnd@@"): + return "Time from Last Occurrence of the Activity '" + stru.split("@@")[-1] + "' to Case End" + elif stru.startswith("startToFirstOcc@@"): + return "Time from Case Start to First Occurrence of the Activity '"+stru.split("@@")[-1]+"'" + elif stru.startswith("firstOccToEnd@@"): + return "Time from First Occurrence of the Activity '"+stru.split("@@")[-1]+"' to Case End" + elif stru.startswith("directPathPerformanceLastOcc@@"): + stru = stru.split("@@")[-1].split("##") + return "Directly-Follows Paths Throughput between '" + stru[0] + "' and '" + stru[1] + "' (last occurrence of the path in the case)" + elif stru.startswith("indirectPathPerformanceLastOcc@@"): + stru = stru.split("@@")[-1].split("##") + return "Eventually-Follows Paths Throughput between '" + stru[0] + "' and '" + stru[1] + "' (last occurrence of the path in the case)" + elif stru.startswith("resource_workload@@"): + return "Resource Workload of '"+stru.split("@@")[-1]+"'" + elif stru == "@@work_in_progress": + return "Work in Progress" + + return stru + + +def textual_abstraction_from_fea_df(fea_df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Returns the textual abstraction of ML features already encoded in a feature table + + Minimum viable example: + + import pm4py + from pm4py.algo.querying.llm.abstractions import log_to_fea_descr + + log = pm4py.read_xes("tests/input_data/receipt.xes", return_legacy_log_object=True) + fea_df = pm4py.extract_features_dataframe(log) + text_abstr = log_to_fea_descr.textual_abstraction_from_fea_df(fea_df) + print(text_abstr) + + Parameters + --------------- + fea_df + Feature table (numeric features; stored as Pandas dataframe) + parameters + Parameters that should be provided to the feature extraction, plus: + - Parameters.INCLUDE_HEADER => includes a descriptive header in the returned text + - Parameters.MAX_LEN => maximum length of the provided text (if necessary, only the most meaningful features are kept) + + Returns + --------------- + stru + Textual abstraction + """ + if parameters is None: + parameters = {} + + include_header = exec_utils.get_param_value(Parameters.INCLUDE_HEADER, parameters, True) + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, constants.OPENAI_MAX_LEN) + + cols = [] + + for c in fea_df.columns: + ser = fea_df[c] + ser1 = ser[ser > 0] + if len(ser1) > 0: + desc = __transform_to_string(c) + avg = np.average(ser1) + stdavg = 0 if avg == 0 or len(ser1) == 1 else np.std(ser1)/avg + cols.append([desc, len(ser1), stdavg, ser1]) + + cols = sorted(cols, key=lambda x: (x[1], x[2], x[0]), reverse=True) + + ret = ["\n"] + + if include_header: + ret.append("Given the following features:\n\n") + + ret = " ".join(ret) + + i = 0 + while i < len(cols): + if len(ret) >= max_len: + break + + fea_name = cols[i][0] + fea_col = cols[i][3] + + stru = fea_name+": number of non-zero values: "+str(cols[i][1])+" ; quantiles of the non-zero: "+str(fea_col.quantile([0.0, 0.25, 0.5, 0.75, 1.0]).to_dict())+"\n" + + ret = ret + stru + + i = i + 1 + + return ret + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Returns the textual abstraction of ML features extracted from a traditional event log object. + + Minimum viable example: + + import pm4py + from pm4py.algo.querying.llm.abstractions import log_to_fea_descr + + log = pm4py.read_xes("tests/input_data/receipt.xes", return_legacy_log_object=True) + text_abstr = log_to_fea_descr.apply(log) + print(text_abstr) + + Parameters + --------------- + log + Event log / Pandas dataframe + parameters + Parameters that should be provided to the feature extraction, plus: + - Parameters.INCLUDE_HEADER => includes a descriptive header in the returned text + - Parameters.MAX_LEN => maximum length of the provided text (if necessary, only the most meaningful features are kept) + + Returns + --------------- + stru + Textual abstraction + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + data, feature_names = log_to_features.apply(log, parameters=parameters) + + fea_df = pandas_utils.instantiate_dataframe(data, columns=feature_names) + + return textual_abstraction_from_fea_df(fea_df, parameters=parameters) diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/log_to_variants_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/log_to_variants_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..520a61fa06e615cb074d119f9853430d134ab59a --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/log_to_variants_descr.py @@ -0,0 +1,218 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.conversion.log import converter as log_converter +from typing import Union, Optional, Dict, Any, List, Tuple +from pm4py.objects.log.obj import EventLog, EventStream +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +import pandas as pd +import numpy as np +import math + + +class Parameters(Enum): + INCLUDE_FREQUENCY = "include_frequency" + INCLUDE_PERFORMANCE = "include_performance" + MAX_LEN = "max_len" + RELATIVE_FREQUENCY = "relative_frequency" + RESPONSE_HEADER = "response_header" + PRIMARY_PERFORMANCE_AGGREGATION = "primary_performance_aggregation" + SECONDARY_PERFORMANCE_AGGREGATION = "secondary_performance_aggregation" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def abstraction_from_variants_freq_perf_list(vars_list: List[Tuple[List[str], int, float, float]], parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Obtains a textual abstraction from a list of variants provided along their frequency and performance values. + Each variant of the list is expressed in the form: + (('A', 'B', 'C'), 1000, 86400.0, 172800.0) + where ('A', 'B', 'C') is the tuple of activities executed in the variant, 1000 is the number of occurrences of + this variant in the event log, 86400.0 is an aggregation (mean) of the throughput times of the cases belonging to + this variant, 172800.0 is an aggregation (stdev, so standard deviation) of the throughput times of these cases. + + Minimal viable example: + + from pm4py.algo.querying.llm.abstractions import log_to_variants_descr + + vars_list = [(('A', 'B', 'C'), 1000, 86400.0, 172800.0), (('A', 'B'), 500, 3600.0, 43200.0)] + print(log_to_variants_descr.abstraction_from_variants_freq_perf_list(vars_list)) + + Parameters + --------------- + vars_list + List of variants, expressed as explained above + parameters + Optional parameters of the algorithm, including: + - Parameters.RELATIVE_FREQUENCY => decides if the the frequency of the variants should be normalized to a relative + frequency + - Parameters.PRIMARY_PERFORMANCE_AGGREGATION => primary performance metric to be used to express the performance of the arcs (e.g., mean). Available options: mean, median, stdev, min, max, sum + - Parameters.SECONDARY_PERFORMANCE_AGGREGATION => secondary performance metric to be used to express the performance of the arcs (e.g., stdev). Available options: mean, median, stdev, min, max, sum + - Parameters.MAX_LEN => desidered length of the textual abstraction + - Parameters.RESPONSE_HEADER => includes an header in the textual abstraction, which explains the context + - Parameters.INCLUDE_FREQUENCY => includes the frequency of the arcs in the textual abstraction + - Parameters.INCLUDE_PERFORMANCE => includes the performance of the arcs in the textual abstraction + + Returns + -------------- + textual_abstraction + Textual abstraction of the variants + """ + if parameters is None: + parameters = {} + + relative_frequency = exec_utils.get_param_value(Parameters.RELATIVE_FREQUENCY, parameters, False) + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, constants.OPENAI_MAX_LEN) + response_header = exec_utils.get_param_value(Parameters.RESPONSE_HEADER, parameters, True) + include_frequency = exec_utils.get_param_value(Parameters.INCLUDE_FREQUENCY, parameters, True) + include_performance = exec_utils.get_param_value(Parameters.INCLUDE_PERFORMANCE, parameters, True) + primary_performance_aggregation = exec_utils.get_param_value(Parameters.PRIMARY_PERFORMANCE_AGGREGATION, parameters, "mean") + secondary_performance_aggregation = exec_utils.get_param_value(Parameters.SECONDARY_PERFORMANCE_AGGREGATION, parameters, None) + + ret = "If I have a process with the following process variants:\n\n" if response_header else "\n\n" + for v in vars_list: + if len(ret) > max_len: + break + stru = " " + " -> " .join(v[0]) + " " + if include_frequency or include_performance: + stru = stru + "(" + if include_frequency: + stru = stru + " frequency = " + stru = stru + str(v[1]) + if relative_frequency: + stru = stru + "\%" + stru = stru + " " + if include_performance: + stru = stru + " performance = " + stru = stru + "%.3f" % (v[2]) + stru = stru + " " + if secondary_performance_aggregation is not None and v[3] is not None: + stru = stru + " " + secondary_performance_aggregation + " = " + stru = stru + "%.3f" % (v[3]) + stru = stru + " " + stru = stru + ")\n" + ret = ret + stru + ret = ret + "\n\n" + return ret + + +def compute_perf_aggregation(perf_values: List[float], perf_agg: str) -> float: + """ + Computes an aggregation of a list of performance values + + Minimal viable example: + compute_perf_aggregation([3600.0, 7200.0], 'mean') + + Parameters + -------------- + perf_values + List of performance values + perf_agg + Desired aggregation (mean, median, stdev, sum, min, max) + + Returns + -------------- + agg_value + Aggregated value + """ + if perf_agg == "mean": + return float(np.mean(perf_values)) + elif perf_agg == "median": + return float(np.median(perf_values)) + elif perf_agg == "stdev" and len(perf_values) > 1: + return float(np.std(perf_values)) + elif perf_agg == "sum": + return float(np.sum(perf_values)) + elif perf_agg == "min": + return float(np.min(perf_values)) + elif perf_agg == "max": + return float(np.max(perf_values)) + + +def apply(log_obj: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Gets the textual abstraction of the variants of a specified log object. + + Minimal viable example: + + import pm4py + from pm4py.algo.querying.llm.abstractions import log_to_variants_descr + + log = pm4py.read_xes('tests/input_data/running-example.xes') + print(log_to_variants_descr.apply(log)) + + Parameters + --------------- + log_obj + Log object + parameters + Optional parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute of the log to be used as activity + - Parameters.TIMESTAMP_KEY => the attribute of the log to be used as timestamp + - Parameters.CASE_ID_KEY => the attribute of the log to be used as case identifier + - Parameters.RELATIVE_FREQUENCY => decides if the the frequency of the variants should be normalized to a relative + frequency + - Parameters.PRIMARY_PERFORMANCE_AGGREGATION => primary performance metric to be used to express the performance of the arcs (e.g., mean). Available options: mean, median, stdev, min, max, sum + - Parameters.SECONDARY_PERFORMANCE_AGGREGATION => secondary performance metric to be used to express the performance of the arcs (e.g., stdev). Available options: mean, median, stdev, min, max, sum + + Returns + -------------- + textual_abstraction + Textual abstraction of the variants of an event log object + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + relative_frequency = exec_utils.get_param_value(Parameters.RELATIVE_FREQUENCY, parameters, False) + primary_performance_aggregation = exec_utils.get_param_value(Parameters.PRIMARY_PERFORMANCE_AGGREGATION, parameters, "mean") + secondary_performance_aggregation = exec_utils.get_param_value(Parameters.SECONDARY_PERFORMANCE_AGGREGATION, parameters, None) + + log_obj = log_converter.apply(log_obj, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + gdf = log_obj.groupby(case_id_key) + variants = gdf[activity_key].agg(list).to_dict() + variants = {c: tuple(v) for c, v in variants.items()} + gdf = gdf[timestamp_key] + start_time = gdf.min().to_dict() + start_time = {x: y.timestamp() for x, y in start_time.items()} + end_time = gdf.max().to_dict() + end_time = {x: y.timestamp() for x, y in end_time.items()} + diff = {x: end_time[x]-start_time[x] for x in start_time} + vars_list = {} + num_cases = log_obj[case_id_key].nunique() + + for c, v in variants.items(): + if v not in vars_list: + vars_list[v] = [] + vars_list[v].append(diff[c]) + + for k, v in vars_list.items(): + freq = max(1, math.floor((len(v)*100.0)/num_cases)) if relative_frequency else len(v) + primary_perf = compute_perf_aggregation(v, primary_performance_aggregation) + secondary_perf = compute_perf_aggregation(v, secondary_performance_aggregation) + tup = (freq, primary_perf, secondary_perf) + vars_list[k] = tup + + vars_list = [(x, y[0], y[1], y[2]) for x, y in vars_list.items()] + vars_list = sorted(vars_list, key=lambda x: (x[1], x[2], x[0]), reverse=True) + + return abstraction_from_variants_freq_perf_list(vars_list, parameters=parameters) diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/logske_to_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/logske_to_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..ee8d16c575b4220238cfa6909750d29febb26bc9 --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/logske_to_descr.py @@ -0,0 +1,98 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from typing import Optional, Dict, Any +from pm4py.util import exec_utils + + +class Parameters(Enum): + INCLUDE_HEADER = "include_header" + + +def get_model_description(): + description = """ +The Log Skeleton process model contains the following declarative constraints: +- Equivalence (if the first activity occurs, then it has the same occurrences as the second one) +- Always Before (if the first activity occur, then the second activity should have been executed previously) +- Always After (if the first activity occur, then the second activity is executed in one of the following events) +- Never Together (the two activities cannot co-exist inside the same case) +- Activity Occurrences (bounds the number of occurrences for an activity in a case) +- Directly-Follows Constraints (if the first activity occurs, then the second activity shall occur immediately after) + """ + return description + + +def get_model_implementation(): + implementation = "The Log Skeleton is expressed as a Python dictionary containing the keys: 'equivalence', 'always_before', 'always_after', 'never_together', 'activ_freq', 'directly_follows'.\n" + implementation += "The values associated to 'equivalence', 'always_before', 'always_after', 'never_together', 'directly_follows' are sets containing the couples of activities satisfying the constraints.\n" + implementation += "The value associated to 'activ_freq' is a dictionary whose keys are the activities, and the values are the allowed number of occurrences for the given activity. For example, {'A': {0, 1}, 'B': {1, 2}} tells that A could occur 0 or 1 time inside a case, while B could occur 1 or 2 times.\n" + + return implementation + + +def apply(lsk: Dict[str, Any], parameters: Optional[Dict[Any, Any]] = None) -> str: + if parameters is None: + parameters = {} + + include_header = exec_utils.get_param_value(Parameters.INCLUDE_HEADER, parameters, True) + + ret = ["\n"] + + if include_header: + ret.append(get_model_description()) + ret.append("\n\n") + ret.append("I have a Log Skeleton process model containing the following declarative constraints:\n\n") + + # equivalence + ret.append("Equivalence: ") + for constr in lsk["equivalence"]: + ret.append(" " + str(constr)) + ret.append("\n\n") + + # always before + ret.append("Always Before: ") + for constr in lsk["always_before"]: + ret.append(" " + str(constr)) + ret.append("\n\n") + + # always after + ret.append("Always After: ") + for constr in lsk["always_after"]: + ret.append(" " + str(constr)) + ret.append("\n\n") + + # never together + ret.append("Never Together: ") + for constr in lsk["never_together"]: + ret.append(" " + str(constr)) + ret.append("\n\n") + + # activity occurrences + ret.append("Activity Occurrences: ") + for constr, occs in lsk["activ_freq"].items(): + ret.append(" " + str(constr) + ": " + ", ".join(sorted([str(x) for x in occs])) + ";") + ret.append("\n\n") + + # directly-follows + ret.append("Directly-Follows Constraints: ") + for constr in lsk["directly_follows"]: + ret.append(" "+str(constr)) + ret.append("\n\n") + + return "".join(ret) + diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/net_to_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/net_to_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..322eb21959dffbc1f237205b30d6f9ee9147aa90 --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/net_to_descr.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any +from pm4py.objects.petri_net.obj import PetriNet, Marking +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + RESPONSE_HEADER = "response_header" + + +def apply(net: PetriNet, im: Marking, fm: Marking, parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Provides the description of an accepting Petri net + + Parameters + -------------- + net + Petri net + im + Initial marking + fm + Final marking + parameters + Possible parameters of the algorithm, including: + - Parameters.INCLUDE_HEADER => includes the header + + Returns + -------------- + stru + String representation of the given accepting Petri net + """ + if parameters is None: + parameters = {} + + include_header = exec_utils.get_param_value(Parameters.RESPONSE_HEADER, parameters, True) + + ret = ["\n"] + if include_header: + ret.append("If I have a Petri net:\n") + ret.append(repr(net)) + ret.append("\ninitial marking: "+repr(im)) + ret.append("final marking: "+repr(fm)) + ret.append("\n") + + return "\n".join(ret) diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/ocel_fea_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/ocel_fea_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..d9a3cded4987305b2f8dda223193f51fd9c0a81f --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/ocel_fea_descr.py @@ -0,0 +1,129 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.util import exec_utils, constants +from enum import Enum +import numpy as np +import pandas as pd + + +class Parameters(Enum): + INCLUDE_HEADER = "include_header" + MAX_LEN = "max_len" + DEBUG = "debug" + ENABLE_OBJECT_LIFECYCLE_PATHS = "enable_object_lifecycle_paths" + + +def __transform_to_string(stru: str) -> str: + if stru.startswith("@@ocel_lif_activity_"): + return "Number of occurrences of the activity "+stru.split("@@ocel_lif_activity_")[1] + elif stru.startswith("@@object_lifecycle_unq_act"): + return "Number of unique activities in the lifecycle of the object" + elif stru.startswith("@@object_lifecycle_length"): + return "Number of events in the lifecycle of the object" + elif stru.startswith("@@object_lifecycle_duration"): + return "Duration of the lifecycle of the object" + elif stru.startswith("@@object_lifecycle_start_timestamp"): + return "Start timestamp of the lifecycle of the object" + elif stru.startswith("@@object_lifecycle_end_timestamp"): + return "Completion timestamp of the lifecycle of the object" + elif stru.startswith("@@object_degree_centrality"): + return "Degree centrality of the object in the object interaction graph" + elif stru.startswith("@@object_general_interaction_graph"): + return "Number of objects related in the object interaction graph" + elif stru.startswith("@@object_general_descendants_graph_descendants"): + return "Number of objects which follow the current object in the object descendants graph" + elif stru.startswith("@@object_general_inheritance_graph_ascendants"): + return "Number of objects which follow the current object in the object inheritance graph" + elif stru.startswith("@@object_general_descendants_graph_ascendants"): + return "Number of objects which precede the current object in the object descendants graph" + elif stru.startswith("@@object_general_inheritance_graph_descendants"): + return "Number of objects which precede the current object in the object descendants graph" + elif stru.startswith("@@object_cobirth"): + return "Number of objects starting their lifecycle together with the current object" + elif stru.startswith("@@object_codeath"): + return "Number of objects ending their lifecycle together with the current object" + elif stru.startswith("@@object_interaction_graph_"): + return "Number of object of type "+stru.split("@@object_interaction_graph_")[1]+" related to the current object in the object interaction graph" + elif stru.startswith("@@ocel_lif_path_"): + path = stru.split("@@ocel_lif_path_")[1] + act1 = path.split("##")[0] + act2 = path.split("##")[1] + return "Frequency of the path \""+act1+"\" -> \""+act2+"\" in the lifecycle of the object" + + return stru + + +def textual_abstraction_from_fea_df(fea_df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> str: + if parameters is None: + parameters = {} + + include_header = exec_utils.get_param_value(Parameters.INCLUDE_HEADER, parameters, True) + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, constants.OPENAI_MAX_LEN) + + cols = [] + + for c in fea_df.columns: + ser = fea_df[c] + ser1 = ser[ser > 0] + if len(ser1) > 0: + desc = __transform_to_string(c) + avg = np.average(ser1) + stdavg = 0 if avg == 0 or len(ser1) == 1 else np.std(ser1)/avg + cols.append([desc, len(ser1), stdavg, ser1]) + + cols = sorted(cols, key=lambda x: (x[1], x[2], x[0]), reverse=True) + + ret = ["\n"] + + if include_header: + ret.append("Beforehand, a bit of notions.") + ret.append("Given an object-centric event log, the object interaction graph connects objects that are related in at least an event.") + ret.append("The object descendants graph connects objects related in at least an event, when the lifecycle of the second object starts after the lifecycle of the first.") + ret.append("The object inheritance graph connects objects when there an event that ends the lifecycle of the first object and starts the lifecycle of the second one.") + ret.append("\n\n") + ret.append("Given the following features:\n\n") + + ret = " ".join(ret) + + i = 0 + while i < len(cols): + if len(ret) >= max_len: + break + + stru = cols[i][0]+": number of non-zero values: "+str(cols[i][1])+" ; quantiles of the non-zero: "+str(cols[i][3].quantile([0.0, 0.25, 0.5, 0.75, 1.0]).to_dict())+"\n" + ret = ret + stru + + i = i + 1 + + return ret + + +def apply(ocel: OCEL, obj_type: str, parameters: Optional[Dict[Any, Any]] = None) -> str: + if parameters is None: + parameters = {} + + debug = exec_utils.get_param_value(Parameters.DEBUG, parameters, True) + enable_object_lifecycle_paths = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_LIFECYCLE_PATHS, parameters, False) + + import pm4py + + fea_df = pm4py.extract_ocel_features(ocel, obj_type, include_obj_id=False, debug=debug, enable_object_lifecycle_paths=enable_object_lifecycle_paths) + + return textual_abstraction_from_fea_df(fea_df, parameters=parameters) diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/ocel_ocdfg_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/ocel_ocdfg_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..24ab36fed63f7515de475e57babb21d7bcad2e8e --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/ocel_ocdfg_descr.py @@ -0,0 +1,102 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.discovery.ocel.ocdfg import algorithm as ocdfg_disc +import numpy as np +from enum import Enum +from pm4py.util import exec_utils, constants + + +class Parameters(Enum): + MAX_LEN = "max_len" + INCLUDE_HEADER = "include_header" + INCLUDE_PERFORMANCE = "include_performance" + + +def __get_descr(curr, include_performance): + stru = " \"%s\" -> \"%s\" (frequency (number of events) = %d, frequency (number of objects) = %d" % ( + curr[1][0], curr[1][1], curr[2], curr[3]) + if include_performance: + stru += ", duration = %.2f" % curr[5] + stru += ")\n" + return stru + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> str: + if parameters is None: + parameters = {} + + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, constants.OPENAI_MAX_LEN) + include_header = exec_utils.get_param_value(Parameters.INCLUDE_HEADER, parameters, True) + include_performance = exec_utils.get_param_value(Parameters.INCLUDE_PERFORMANCE, parameters, True) + + ocdfg = ocdfg_disc.apply(ocel, parameters=parameters) + + object_types = sorted(list(ocdfg["edges"]["total_objects"].keys())) + edges = set() + for ot in object_types: + for e in ocdfg["edges"]["event_couples"][ot]: + edges.add((ot, e)) + + edges_values = [] + for obj in edges: + ot = obj[0] + e = obj[1] + edges_values.append([obj[0], obj[1], + len(ocdfg["edges"]["event_couples"][ot][e]), + len(ocdfg["edges"]["unique_objects"][ot][e]), + len(ocdfg["edges"]["total_objects"][ot][e]), + float(np.average(ocdfg["edges_performance"]["event_couples"][ot][e])), + float(np.average(ocdfg["edges_performance"]["total_objects"][ot][e])) + ]) + + edges_values = sorted(edges_values, key=lambda x: (x[2], x[5], x[0], x[1]), reverse=True) + + i = 0 + curr_len = 0 + while i < len(edges_values): + if curr_len >= max_len: + break + + stru = __get_descr(edges_values[i], include_performance) + curr_len += len(stru) + + i = i + 1 + + edges_values = edges_values[:i] + ot_edges = {} + + for edg in edges_values: + if not edg[0] in ot_edges: + ot_edges[edg[0]] = [] + + ot_edges[edg[0]].append(edg) + + ret = ["\n"] + if include_header: + ret.append("If I have an object-centric event log with the following directly follows graph (split between the different object types):\n") + + for ot in ot_edges: + ret.append("\nObject type: %s\n" % (ot)) + for edg in ot_edges[ot]: + ret.append(__get_descr(edg, include_performance)) + + ret.append("\n") + + return "".join(ret) diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/stream_to_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/stream_to_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..7694b00cd400cf43c488e702a7febda1441dbd1f --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/stream_to_descr.py @@ -0,0 +1,82 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.conversion.log import converter as log_converter + +import pandas as pd + + +class Parameters(Enum): + RESPONSE_HEADER = "response_header" + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + MAX_LEN = "max_len" + + +def apply(log_obj: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Given a log object, returns a representation of the (last) events of a stream corresponding to the log object. + + Parameters + -------------- + log_obj + Log object + parameters + Parameters of the algorithm, including: + - Parameters.RESPONSE_HEADER => includes the header in the response + - Parameters.TIMESTAMP_KEY => the attribute to be used as timestamp + - Parameters.MAX_LEN => maximum length of the resulting stream + + Returns + -------------- + descr + String representing the stream of events + """ + if parameters is None: + parameters = {} + + parameters["stream_postprocessing"] = True + event_stream = log_converter.apply(log_obj, variant=log_converter.Variants.TO_EVENT_STREAM, parameters=parameters)._list + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + response_header = exec_utils.get_param_value(Parameters.RESPONSE_HEADER, parameters, True) + max_len = exec_utils.get_param_value(Parameters.MAX_LEN, parameters, constants.OPENAI_MAX_LEN) + + event_stream.sort(key=lambda x: x[timestamp_key], reverse=True) + + ret = ["\n"] + interet = [] + summ = 2 + + if response_header: + header = "If I have the following stream of events:\n" + summ += len(header) + 1 + ret.append(header) + + for ev in event_stream: + if summ > max_len: + break + stru = str(ev) + summ += len(stru) + 1 + interet.append(stru) + + interet.reverse() + ret = ret+interet+["\n"] + return "\n".join(ret) diff --git a/pm4py/pm4py/algo/querying/llm/abstractions/tempprofile_to_descr.py b/pm4py/pm4py/algo/querying/llm/abstractions/tempprofile_to_descr.py new file mode 100644 index 0000000000000000000000000000000000000000..0d97389f76991e841a472eaeb828a03e8525473b --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/abstractions/tempprofile_to_descr.py @@ -0,0 +1,67 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils +from enum import Enum +from typing import Optional, Dict, Any, Tuple + + +class Parameters(Enum): + INCLUDE_HEADER = "include_header" + + +def get_model_description(): + description = "The temporal profile is a model describing the average and the standard deviation of the times between couples of activities eventually (not only directly) following each other in at least a process execution (so in a trace the couples (A,B) (A,C) (A,D) (B,C) (B,D) (C,D) shall be considered). Given a positive value ZETA, a deviation occurs in a process execution when the time between two activities is lower than AVG - ZETA * STDEV or greater than AVG + ZETA * STDEV.\n" + return description + + +def get_model_implementation(): + implementation = "The temporal profile is expressed as a Python dictionary associating to some couples of activities the average and the standard deviation of the times. Example: {('A', 'B'): (86400, 3600), ('B', 'C'): (3600, 3600)} indicates that the average time between A and B is 1 day, while the standard deviation is 1 hour. On the other hand, the average time between B and C is 1 hour, while the standard deviation is 1 hour." + return implementation + + +def apply(temporal_profile: Dict[Tuple[str, str], Tuple[float, float]], + parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Abstracts a temporal profile model to a string. + + Parameters + ---------------- + temporal_profile + Temporal profile + parameters + Parameters of the method, including: + - Parameters.INCLUDE_HEADER => includes the header in the response + + Returns + ---------------- + text_abstr + Textual abstraction of the log skeleton + """ + if parameters is None: + parameters = {} + + include_header = exec_utils.get_param_value(Parameters.INCLUDE_HEADER, parameters, True) + + ret = ["\n"] + + if include_header: + ret.append(get_model_description() + "For this process, the model is:\n") + + for act_couple, agg in temporal_profile.items(): + ret.append("%s -> %s : AVG: %.2f s STD: %.2f s" % (act_couple[0], act_couple[1], agg[0], agg[1])) + + return "\n".join(ret) diff --git a/pm4py/pm4py/algo/querying/llm/connectors/__init__.py b/pm4py/pm4py/algo/querying/llm/connectors/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..52686971a042e4088860b9a52663b330afc4e295 --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/connectors/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.querying.llm.connectors import openai diff --git a/pm4py/pm4py/algo/querying/llm/connectors/openai.py b/pm4py/pm4py/algo/querying/llm/connectors/openai.py new file mode 100644 index 0000000000000000000000000000000000000000..a4ea4392ea938a133ce8bf63aa3a8aa6f48edaaf --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/connectors/openai.py @@ -0,0 +1,85 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any +import base64 +from pm4py.util import constants + + +class Parameters(Enum): + API_URL = "api_url" + API_KEY = "api_key" + OPENAI_MODEL = "openai_model" + IMAGE_PATH = "image_path" + + +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + + +def apply(prompt: str, parameters: Optional[Dict[Any, Any]] = None) -> str: + import requests + + if parameters is None: + parameters = {} + + image_path = exec_utils.get_param_value(Parameters.IMAGE_PATH, parameters, None) + api_key = exec_utils.get_param_value(Parameters.API_KEY, parameters, constants.OPENAI_API_KEY) + api_url = exec_utils.get_param_value(Parameters.API_URL, parameters, None) + simple_content_specification = image_path is None + + if api_url is None: + api_url = constants.OPENAI_API_URL + else: + if not api_url.endswith("/"): + api_url += "/" + + model = exec_utils.get_param_value(Parameters.OPENAI_MODEL, parameters, + constants.OPENAI_DEFAULT_MODEL if image_path is None else constants.OPENAI_DEFAULT_VISION_MODEL) + + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {api_key}" + } + + messages = [] + if simple_content_specification: + messages.append({"role": "user", "content": prompt}) + else: + messages.append({"role": "user", "content": [{"type": "text", "text": prompt}]}) + + payload = { + "model": model + } + + if image_path is not None: + base64_image = encode_image(image_path) + messages[0]["content"].append({"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image} "}}) + payload["max_tokens"] = 4096 + + payload["messages"] = messages + + response = requests.post(api_url+"chat/completions", headers=headers, json=payload).json() + + if "error" in response: + # raise an exception when the request fails, with the provided message + raise Exception(response["error"]["message"]) + + return response["choices"][0]["message"]["content"] diff --git a/pm4py/pm4py/algo/querying/llm/utils/__init__.py b/pm4py/pm4py/algo/querying/llm/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4caea6fd760d8ccb3d434fc2a8658ed03c40ce59 --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/utils/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.querying.llm.utils import sql_utils diff --git a/pm4py/pm4py/algo/querying/llm/utils/sql_utils.py b/pm4py/pm4py/algo/querying/llm/utils/sql_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..361f92a502b7375e75f8be95eed5f633c481e21a --- /dev/null +++ b/pm4py/pm4py/algo/querying/llm/utils/sql_utils.py @@ -0,0 +1,48 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import re + + +ref_stri_1 = "ordabcchr" +ref_stri_2 = "ordabc" + +re1 = re.compile(r"([^a-zA-Z0-9]+)") +re2 = re.compile(ref_stri_1) + + +def mask_non_alphanumeric(stri): + stri_split = re1.split(stri) + ret = [] + for el in stri_split: + for char in el: + if char.isalnum() or char == " " or char in ["(", ")", "*", ".", ",", "'", "\"", "=", "<", ">", "_", "+", + "-", "!"]: + ret.append(char) + else: + ret.append(ref_stri_1 + ref_stri_2 + str(ord(char)) + ref_stri_1) + return "".join(ret) + + +def restore_non_alphanumeric(stri): + stri_split = re2.split(stri) + ret = [] + for el in stri_split: + if el.startswith(ref_stri_2): + ret.append(chr(int(el[len(ref_stri_2):]))) + else: + ret.append(el) + return "".join(ret) diff --git a/pm4py/pm4py/algo/reduction/__init__.py b/pm4py/pm4py/algo/reduction/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6cc61c0962671abb6ead6f55e09b27c5c1ec2186 --- /dev/null +++ b/pm4py/pm4py/algo/reduction/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.reduction import process_tree + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The reduction package will be removed in a future release.") diff --git a/pm4py/pm4py/algo/reduction/process_tree/__init__.py b/pm4py/pm4py/algo/reduction/process_tree/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..87b7fc3d4907dcb05d93fc973d7c6a949d4f7d6f --- /dev/null +++ b/pm4py/pm4py/algo/reduction/process_tree/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.reduction.process_tree import reducer, variants diff --git a/pm4py/pm4py/algo/reduction/process_tree/reducer.py b/pm4py/pm4py/algo/reduction/process_tree/reducer.py new file mode 100644 index 0000000000000000000000000000000000000000..135ae44458a22ee26218a8c3e568c7e6122d00de --- /dev/null +++ b/pm4py/pm4py/algo/reduction/process_tree/reducer.py @@ -0,0 +1,47 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Any + +from pm4py.algo.reduction.process_tree.variants import tree_tr_based +from pm4py.util import exec_utils + + +class Variants(Enum): + TREE_TR_BASED = tree_tr_based + + +def apply(*args, **kwargs) -> Any: + """ + Apply a reduction algorithm to a PM4Py object + + Parameters + --------------- + args + Arguments of the reduction algorithm + kwargs + Keyword arguments of the reduction algorithm (including the variant, that is an item of the Variants enum) + + Returns + --------------- + reduced_obj + Reduced object + """ + variant = kwargs["variant"] if "variant" in kwargs else None + if variant is None: + raise Exception("please specify the variant of the reduction to be used.") + return exec_utils.get_variant(variant).apply(*args, **kwargs) diff --git a/pm4py/pm4py/algo/reduction/process_tree/variants/__init__.py b/pm4py/pm4py/algo/reduction/process_tree/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ede405b68bd3aa3abd778193c259b7f2fac837e9 --- /dev/null +++ b/pm4py/pm4py/algo/reduction/process_tree/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.reduction.process_tree.variants import tree_tr_based diff --git a/pm4py/pm4py/algo/reduction/process_tree/variants/tree_tr_based.py b/pm4py/pm4py/algo/reduction/process_tree/variants/tree_tr_based.py new file mode 100644 index 0000000000000000000000000000000000000000..fdcc6de1a5142c097d3ad1977a17282d35a4d4ea --- /dev/null +++ b/pm4py/pm4py/algo/reduction/process_tree/variants/tree_tr_based.py @@ -0,0 +1,113 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import deepcopy +from typing import Optional, Dict, Any, List, Set + +from pm4py.objects.log.obj import Trace +from pm4py.objects.process_tree.utils import bottomup +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.process_tree.utils.generic import fold +from pm4py.util import constants, xes_constants, exec_utils +from enum import Enum + + +class Outputs(Enum): + DFG = "dfg" + SEQUENCE = "sequence" + PARALLEL = "parallel" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ACTIVITIES = "activities" + SKIPPABLE = "skippable" + ACTIVITIES_ALWAYS_HAPPENING = "activities_always_happening" + MIN_TRACE_LENGTH = "min_trace_length" + TRACE = "trace" + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def apply(tree: ProcessTree, trace: Trace, parameters: Optional[Dict[Any, Any]] = None, **kwargs) -> ProcessTree: + """ + Reduce a process tree replacing the skippable elements that have empty intersection with the + trace. + + Parameters + ----------------- + tree + Process tree + trace + Trace of an event log + parameters + Parameters of the algorithm, possible values: Parameters.ACTIVITY_KEY + + Returns + ------------------ + tree + Reduced process tree + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + activities = set(x[activity_key] for x in trace) + + tree = deepcopy(tree) + from pm4py.algo.discovery.footprints.tree.variants import bottomup as footprints + + bottomup_nodes = bottomup.get_bottomup_nodes(tree) + fps = footprints.get_all_footprints(tree) + fps = {id(x): y for x, y in fps.items()} + + return reduce(bottomup_nodes, fps, activities) + + +def reduce(bottomup_nodes: List[ProcessTree], fps: Dict[str, Any], activities: Set[str]) -> ProcessTree: + """ + Reduce a process tree replacing the skippable elements that have empty intersection with the + trace. + + Parameters + ----------------- + bottomup_nodes + List of nodes of the process tree (that are process trees by themselves) in a bottomup order + fps + Footprints of the process tree + activities + Set of activities in the trace + + Returns + ------------------ + tree + Reduced process tree + """ + i = 0 + while i < len(bottomup_nodes) - 1: + node = bottomup_nodes[i] + parent = node.parent + + is_skippable = fps[id(node)][Outputs.SKIPPABLE.value] + node_activities = fps[id(node)][Outputs.ACTIVITIES.value] + + if is_skippable and not node_activities.intersection(activities): + pt = ProcessTree() + pt.parent = parent + parent.children[parent.children.index(node)] = pt + i = i + 1 + + return fold(bottomup_nodes[-1]) diff --git a/pm4py/pm4py/algo/simulation/__init__.py b/pm4py/pm4py/algo/simulation/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..84904b1b31632f441e4f0f55a1e495b527e49ad8 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/__init__.py @@ -0,0 +1,21 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation import playout + +import importlib.util +if importlib.util.find_spec("tree_generator"): + from pm4py.algo.simulation import tree_generator diff --git a/pm4py/pm4py/algo/simulation/montecarlo/__init__.py b/pm4py/pm4py/algo/simulation/montecarlo/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..07d315e334bcd7b00184f170c344b6666296d96e --- /dev/null +++ b/pm4py/pm4py/algo/simulation/montecarlo/__init__.py @@ -0,0 +1,24 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.simulation.montecarlo import algorithm, variants, utils + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The simulation.montecarlo package will be removed in a future release.") diff --git a/pm4py/pm4py/algo/simulation/montecarlo/algorithm.py b/pm4py/pm4py/algo/simulation/montecarlo/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..ce7fcac584daa44404cb758847df2e85c92cd5fb --- /dev/null +++ b/pm4py/pm4py/algo/simulation/montecarlo/algorithm.py @@ -0,0 +1,87 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.simulation.montecarlo.variants import petri_semaph_fifo +from pm4py.util import exec_utils +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +import pandas as pd +from pm4py.objects.conversion.log import converter as log_converter + + +class Variants(Enum): + PETRI_SEMAPH_FIFO = petri_semaph_fifo + + +DEFAULT_VARIANT = Variants.PETRI_SEMAPH_FIFO + +VERSIONS = {Variants.PETRI_SEMAPH_FIFO} + + +def apply(log: Union[EventLog, pd.DataFrame], net: PetriNet, im: Marking, fm: Marking, variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> Tuple[EventLog, Dict[str, Any]]: + """ + Performs a Monte Carlo simulation of an accepting Petri net without duplicate transitions and where the preset is always + distinct from the postset + + Parameters + ------------- + log + Event log + net + Accepting Petri net without duplicate transitions and where the preset is always distinct from the postset + im + Initial marking + fm + Final marking + variant + Variant of the algorithm to use: + - Variants.PETRI_SEMAPH_FIFO + parameters + Parameters of the algorithm: + Parameters.PARAM_NUM_SIMULATIONS => (default: 100) + Parameters.PARAM_FORCE_DISTRIBUTION => Force a particular stochastic distribution (e.g. normal) when the stochastic map + is discovered from the log (default: None; no distribution is forced) + Parameters.PARAM_ENABLE_DIAGNOSTICS => Enable the printing of diagnostics (default: True) + Parameters.PARAM_DIAGN_INTERVAL => Interval of time in which diagnostics of the simulation are printed (default: 32) + Parameters.PARAM_CASE_ARRIVAL_RATIO => Case arrival of new cases (default: None; inferred from the log) + Parameters.PARAM_PROVIDED_SMAP => Stochastic map that is used in the simulation (default: None; inferred from the log) + Parameters.PARAM_MAP_RESOURCES_PER_PLACE => Specification of the number of resources available per place + (default: None; each place gets the default number of resources) + Parameters.PARAM_DEFAULT_NUM_RESOURCES_PER_PLACE => Default number of resources per place when not specified + (default: 1; each place gets 1 resource and has to wait for the resource to finish) + Parameters.PARAM_SMALL_SCALE_FACTOR => Scale factor for the sleeping time of the actual simulation + (default: 864000.0, 10gg) + Parameters.PARAM_MAX_THREAD_EXECUTION_TIME => Maximum execution time per thread (default: 60.0, 1 minute) + + Returns + ------------ + simulated_log + Simulated event log + simulation_result + Result of the simulation: + Outputs.OUTPUT_PLACES_INTERVAL_TREES => inteval trees that associate to each place the times in which it was occupied. + Outputs.OUTPUT_TRANSITIONS_INTERVAL_TREES => interval trees that associate to each transition the intervals of time + in which it could not fire because some token was in the output. + Outputs.OUTPUT_CASES_EX_TIME => Throughput time of the cases included in the simulated log + Outputs.OUTPUT_MEDIAN_CASES_EX_TIME => Median of the throughput times + Outputs.OUTPUT_CASE_ARRIVAL_RATIO => Case arrival ratio that was specified in the simulation + Outputs.OUTPUT_TOTAL_CASES_TIME => Total time occupied by cases of the simulated log + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + return exec_utils.get_variant(variant).apply(log, net, im, fm, parameters=parameters) diff --git a/pm4py/pm4py/algo/simulation/montecarlo/utils/__init__.py b/pm4py/pm4py/algo/simulation/montecarlo/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..163a96f647ec7a52bbb6393663ddd2ce9d6bb3db --- /dev/null +++ b/pm4py/pm4py/algo/simulation/montecarlo/utils/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.montecarlo.utils import replay diff --git a/pm4py/pm4py/algo/simulation/montecarlo/utils/replay.py b/pm4py/pm4py/algo/simulation/montecarlo/utils/replay.py new file mode 100644 index 0000000000000000000000000000000000000000..68bc73390505cdb593739616a888c65223c24dbe --- /dev/null +++ b/pm4py/pm4py/algo/simulation/montecarlo/utils/replay.py @@ -0,0 +1,120 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.tokenreplay.variants import token_replay +from pm4py.statistics.variants.log import get as variants_module +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.objects.random_variables.random_variable import RandomVariable +from pm4py.objects.petri_net.utils import performance_map +from pm4py.util import exec_utils, xes_constants +from pm4py.algo.conformance.tokenreplay import algorithm as executor + +from enum import Enum +from pm4py.util import constants +from copy import copy + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + TOKEN_REPLAY_VARIANT = "token_replay_variant" + PARAM_NUM_SIMULATIONS = "num_simulations" + PARAM_FORCE_DISTRIBUTION = "force_distribution" + PARAM_ENABLE_DIAGNOSTICS = "enable_diagnostics" + PARAM_DIAGN_INTERVAL = "diagn_interval" + PARAM_CASE_ARRIVAL_RATIO = "case_arrival_ratio" + PARAM_PROVIDED_SMAP = "provided_stochastic_map" + PARAM_MAP_RESOURCES_PER_PLACE = "map_resources_per_place" + PARAM_DEFAULT_NUM_RESOURCES_PER_PLACE = "default_num_resources_per_place" + PARAM_SMALL_SCALE_FACTOR = "small_scale_factor" + PARAM_MAX_THREAD_EXECUTION_TIME = "max_thread_exec_time" + + +def get_map_from_log_and_net(log, net, initial_marking, final_marking, force_distribution=None, parameters=None): + """ + Get transition stochastic distribution map given the log and the Petri net + + Parameters + ----------- + log + Event log + net + Petri net + initial_marking + Initial marking of the Petri net + final_marking + Final marking of the Petri net + force_distribution + If provided, distribution to force usage (e.g. EXPONENTIAL) + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> activity name + Parameters.TIMESTAMP_KEY -> timestamp key + + Returns + ----------- + stochastic_map + Map that to each transition associates a random variable + """ + stochastic_map = {} + + if parameters is None: + parameters = {} + + token_replay_variant = exec_utils.get_param_value(Parameters.TOKEN_REPLAY_VARIANT, parameters, + executor.Variants.TOKEN_REPLAY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + + parameters_variants = {constants.PARAMETER_CONSTANT_ACTIVITY_KEY: activity_key} + variants_idx = variants_module.get_variants_from_log_trace_idx(log, parameters=parameters_variants) + variants = variants_module.convert_variants_trace_idx_to_trace_obj(log, variants_idx) + + parameters_tr = copy(parameters) + parameters_tr[token_replay.Parameters.ACTIVITY_KEY] = activity_key + parameters_tr[token_replay.Parameters.VARIANTS] = variants + + parameters_ses = copy(parameters) + + # do the replay + aligned_traces = executor.apply(log, net, initial_marking, final_marking, variant=token_replay_variant, + parameters=parameters_tr) + + element_statistics = performance_map.single_element_statistics(log, net, initial_marking, + aligned_traces, variants_idx, + activity_key=activity_key, + timestamp_key=timestamp_key, + parameters=parameters_ses) + + for el in element_statistics: + if type(el) is PetriNet.Transition and "performance" in element_statistics[el]: + values = element_statistics[el]["performance"] + + rand = RandomVariable() + rand.calculate_parameters(values, force_distribution=force_distribution) + + no_of_times_enabled = element_statistics[el]['no_of_times_enabled'] + no_of_times_activated = element_statistics[el]['no_of_times_activated'] + + if no_of_times_enabled > 0: + rand.set_weight(float(no_of_times_activated) / float(no_of_times_enabled)) + else: + rand.set_weight(0.0) + + stochastic_map[el] = rand + + return stochastic_map diff --git a/pm4py/pm4py/algo/simulation/montecarlo/variants/__init__.py b/pm4py/pm4py/algo/simulation/montecarlo/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a7d084c3c558746e795c0d980f871434652cbdfe --- /dev/null +++ b/pm4py/pm4py/algo/simulation/montecarlo/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.montecarlo.variants import petri_semaph_fifo diff --git a/pm4py/pm4py/algo/simulation/montecarlo/variants/petri_semaph_fifo.py b/pm4py/pm4py/algo/simulation/montecarlo/variants/petri_semaph_fifo.py new file mode 100644 index 0000000000000000000000000000000000000000..4d8fd64d9e4cbe843dbefbcaa3a0754b036a217c --- /dev/null +++ b/pm4py/pm4py/algo/simulation/montecarlo/variants/petri_semaph_fifo.py @@ -0,0 +1,441 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.traces.generic.log import case_arrival +from pm4py.algo.simulation.montecarlo.utils import replay +from pm4py.objects.petri_net.semantics import enabled_transitions, weak_execute +from threading import Thread, Semaphore +from statistics import median +from pm4py.objects.log.obj import Trace, Event +from pm4py.util import xes_constants +from pm4py.objects.stochastic_petri import utils as stochastic_utils +from pm4py.util.dt_parsing.variants import strpfromiso +import datetime +from time import sleep, time +import logging +from pm4py.util import exec_utils + +from enum import Enum +from pm4py.util import constants + +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + TOKEN_REPLAY_VARIANT = "token_replay_variant" + PARAM_NUM_SIMULATIONS = "num_simulations" + PARAM_FORCE_DISTRIBUTION = "force_distribution" + PARAM_ENABLE_DIAGNOSTICS = "enable_diagnostics" + PARAM_DIAGN_INTERVAL = "diagn_interval" + PARAM_CASE_ARRIVAL_RATIO = "case_arrival_ratio" + PARAM_PROVIDED_SMAP = "provided_stochastic_map" + PARAM_MAP_RESOURCES_PER_PLACE = "map_resources_per_place" + PARAM_DEFAULT_NUM_RESOURCES_PER_PLACE = "default_num_resources_per_place" + PARAM_SMALL_SCALE_FACTOR = "small_scale_factor" + PARAM_MAX_THREAD_EXECUTION_TIME = "max_thread_exec_time" + + +class Outputs(Enum): + OUTPUT_PLACES_INTERVAL_TREES = "places_interval_trees" + OUTPUT_TRANSITIONS_INTERVAL_TREES = "transitions_interval_trees" + OUTPUT_CASES_EX_TIME = "cases_ex_time" + OUTPUT_MEDIAN_CASES_EX_TIME = "median_cases_ex_time" + OUTPUT_CASE_ARRIVAL_RATIO = "input_case_arrival_ratio" + OUTPUT_TOTAL_CASES_TIME = "total_cases_time" + + +class SimulationDiagnostics(Thread): + def __init__(self, sim_thread): + """ + Initializes the diagnostics thread (for logging purposes) + + Parameters + ------------- + sim_thread + Simulation thread + """ + self.sim_thread = sim_thread + self.diagn_open = True + Thread.__init__(self) + + def run(self): + """ + Runs the diagnostics up to the point in which diagn_open becomes False + """ + sleep(self.sim_thread.diagn_interval) + logging.basicConfig() + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + while self.diagn_open: + pd = {} + for place in self.sim_thread.net.places: + if place.semaphore._value == 0: + pd[place] = place.semaphore._value + if pd: + logger.info(str(time()) + " diagnostics for thread " + str( + self.sim_thread.id) + ": blocked places by semaphore: " + str(pd)) + sleep(self.sim_thread.diagn_interval) + + +class SimulationThread(Thread): + def __init__(self, id, net, im, fm, map, start_time, places_interval_trees, transitions_interval_trees, + cases_ex_time, list_cases, enable_diagnostics, diagn_interval, small_scale_factor, + max_thread_exec_time): + """ + Instantiates the object of the simulation + + Parameters + ------------- + id + Identifier + net + Petri net + im + Initial marking + fm + Final marking + start_time + Start time + end_time + End time + places_interval_trees + Dictionary of the interval trees related to the places + transitions_interval_trees + Dictionary of the interval trees related to the transitions + cases_ex_time + Cases execution time + list_cases + Dictionary of cases for each thread + enable_diagnostics + Enable the logging of diagnostics about the current execution + diagn_interval + Interval in which the diagnostics are printed + """ + self.id = id + self.net = net + self.im = im + self.fm = fm + self.map = map + self.start_time = start_time + self.source = list(im)[0] + self.sink = list(fm)[0] + self.places_interval_trees = places_interval_trees + self.transitions_interval_trees = transitions_interval_trees + self.cases_ex_time = cases_ex_time + self.list_cases = list_cases + self.enable_diagnostics = enable_diagnostics + self.diagn_interval = diagn_interval + self.small_scale_factor = small_scale_factor + self.max_thread_exec_time = max_thread_exec_time + self.internal_thread_start_time = 0 + self.terminated_correctly = False + Thread.__init__(self) + + def get_rem_time(self): + return max(0, self.max_thread_exec_time - (time() - self.internal_thread_start_time)) + + def run(self): + """ + Runs the thread + """ + if self.enable_diagnostics: + diagnostics = SimulationDiagnostics(self) + diagnostics.start() + + from intervaltree import Interval + + logging.basicConfig() + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + + net, im, fm, smap, source, sink, start_time = self.net, self.im, self.fm, self.map, self.source, self.sink, self.start_time + places_interval_trees = self.places_interval_trees + transitions_interval_trees = self.transitions_interval_trees + cases_ex_time = self.cases_ex_time + + current_time = start_time + + self.internal_thread_start_time = time() + rem_time = self.get_rem_time() + + acquired_places = set() + acquired = source.semaphore.acquire(timeout=rem_time) + if acquired: + acquired_places.add(source) + source.assigned_time.append(current_time) + + current_marking = im + et = enabled_transitions(net, current_marking) + + first_event = None + last_event = None + + while not fm <= current_marking or len(et) == 0: + et = list(enabled_transitions(net, current_marking)) + ct = stochastic_utils.pick_transition(et, smap) + + simulated_execution_plus_waiting_time = -1 + while simulated_execution_plus_waiting_time < 0: + simulated_execution_plus_waiting_time = smap[ct].get_value() if ct in smap else 0.0 + + # establish how much time we need to wait before firing the transition + # (it depends on the input places tokens) + waiting_time = 0 + for arc in ct.out_arcs: + place = arc.target + sem_value = int(place.semaphore._value) + rem_time = self.get_rem_time() + acquired = place.semaphore.acquire(timeout=rem_time) + if acquired: + acquired_places.add(place) + rem_time = self.get_rem_time() + if rem_time == 0: + break + if sem_value == 0: + waiting_time = max(waiting_time, + place.assigned_time.pop( + 0) - current_time) if place.assigned_time else waiting_time + + if rem_time == 0: + for place in acquired_places: + place.semaphore.release() + break + + # if the waiting time is greater than 0, add an interval to the interval tree denoting + # the waiting times for the given transition + if waiting_time > 0: + transitions_interval_trees[ct].add(Interval(current_time, current_time + waiting_time)) + + # get the actual execution time of the transition as a difference between simulated_execution_plus_waiting_time + # and the waiting time + execution_time = max(simulated_execution_plus_waiting_time - waiting_time, 0) + + # increase the timing based on the waiting time and the execution time of the transition + current_time = current_time + waiting_time + execution_time + + for arc in ct.out_arcs: + place = arc.target + place.assigned_time.append(current_time) + place.assigned_time = sorted(place.assigned_time) + + current_marking = weak_execute(ct, current_marking) + + if ct.label is not None: + eve = Event({xes_constants.DEFAULT_NAME_KEY: ct.label, + xes_constants.DEFAULT_TIMESTAMP_KEY: strpfromiso.fix_naivety(datetime.datetime.fromtimestamp(current_time))}) + last_event = eve + if first_event is None: + first_event = last_event + self.list_cases[self.id].append(eve) + + for arc in ct.in_arcs: + place = arc.source + p_ex_time = place.assigned_time.pop(0) + if current_time - p_ex_time > 0: + places_interval_trees[place].add(Interval(p_ex_time, current_time)) + place.assigned_time.append(current_time) + place.assigned_time = sorted(place.assigned_time) + place.semaphore.release() + + # sleep before starting next iteration + sleep((waiting_time + execution_time) / self.small_scale_factor) + + if first_event is not None and last_event is not None: + cases_ex_time.append(last_event[xes_constants.DEFAULT_TIMESTAMP_KEY].timestamp() - first_event[ + xes_constants.DEFAULT_TIMESTAMP_KEY].timestamp()) + else: + cases_ex_time.append(0) + + places_to_free = set(current_marking).union(acquired_places) + + for place in places_to_free: + place.semaphore.release() + + rem_time = self.get_rem_time() + if rem_time > 0: + self.terminated_correctly = True + if self.enable_diagnostics: + logger.info(str(time()) + " terminated successfully thread ID " + str(self.id)) + + if self.enable_diagnostics: + if rem_time == 0: + if self.enable_diagnostics: + logger.info(str(time()) + " terminated for timeout thread ID " + str(self.id)) + + if self.enable_diagnostics: + diagnostics.diagn_open = False + + +def apply(log: EventLog, net: PetriNet, im: Marking, fm: Marking, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[EventLog, Dict[str, Any]]: + """ + Performs a Monte Carlo simulation of an accepting Petri net without duplicate transitions and where the preset is always + distinct from the postset (FIFO variant; the semaphores pile up if waiting is needed, and the first in is the first to win + the semaphore) + + Parameters + ------------- + log + Event log + net + Accepting Petri net without duplicate transitions and where the preset is always distinct from the postset + im + Initial marking + fm + Final marking + parameters + Parameters of the algorithm: + PARAM_NUM_SIMULATIONS => (default: 100) + PARAM_FORCE_DISTRIBUTION => Force a particular stochastic distribution (e.g. normal) when the stochastic map + is discovered from the log (default: None; no distribution is forced) + PARAM_ENABLE_DIAGNOSTICS => Enable the printing of diagnostics (default: True) + PARAM_DIAGN_INTERVAL => Interval of time in which diagnostics of the simulation are printed (default: 32) + PARAM_CASE_ARRIVAL_RATIO => Case arrival of new cases (default: None; inferred from the log) + PARAM_PROVIDED_SMAP => Stochastic map that is used in the simulation (default: None; inferred from the log) + PARAM_MAP_RESOURCES_PER_PLACE => Specification of the number of resources available per place + (default: None; each place gets the default number of resources) + PARAM_DEFAULT_NUM_RESOURCES_PER_PLACE => Default number of resources per place when not specified + (default: 1; each place gets 1 resource and has to wait for the resource to finish) + PARAM_SMALL_SCALE_FACTOR => Scale factor for the sleeping time of the actual simulation + (default: 864000.0, 10gg) + PARAM_MAX_THREAD_EXECUTION_TIME => Maximum execution time per thread (default: 60.0, 1 minute) + + Returns + ------------ + simulated_log + Simulated event log + simulation_result + Result of the simulation: + Outputs.OUTPUT_PLACES_INTERVAL_TREES => inteval trees that associate to each place the times in which it was occupied. + Outputs.OUTPUT_TRANSITIONS_INTERVAL_TREES => interval trees that associate to each transition the intervals of time + in which it could not fire because some token was in the output. + Outputs.OUTPUT_CASES_EX_TIME => Throughput time of the cases included in the simulated log + Outputs.OUTPUT_MEDIAN_CASES_EX_TIME => Median of the throughput times + Outputs.OUTPUT_CASE_ARRIVAL_RATIO => Case arrival ratio that was specified in the simulation + Outputs.OUTPUT_TOTAL_CASES_TIME => Total time occupied by cases of the simulated log + """ + if parameters is None: + parameters = {} + + from intervaltree import IntervalTree + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + no_simulations = exec_utils.get_param_value(Parameters.PARAM_NUM_SIMULATIONS, parameters, + 100) + force_distribution = exec_utils.get_param_value(Parameters.PARAM_FORCE_DISTRIBUTION, parameters, + None) + enable_diagnostics = exec_utils.get_param_value(Parameters.PARAM_ENABLE_DIAGNOSTICS, parameters, + True) + diagn_interval = exec_utils.get_param_value(Parameters.PARAM_DIAGN_INTERVAL, parameters, + 32.0) + case_arrival_ratio = exec_utils.get_param_value(Parameters.PARAM_CASE_ARRIVAL_RATIO, parameters, + None) + smap = exec_utils.get_param_value(Parameters.PARAM_PROVIDED_SMAP, parameters, + None) + resources_per_places = exec_utils.get_param_value(Parameters.PARAM_MAP_RESOURCES_PER_PLACE, parameters, + None) + default_num_resources_per_places = exec_utils.get_param_value(Parameters.PARAM_DEFAULT_NUM_RESOURCES_PER_PLACE, + parameters, 1) + small_scale_factor = exec_utils.get_param_value(Parameters.PARAM_SMALL_SCALE_FACTOR, parameters, + 864000) + max_thread_exec_time = exec_utils.get_param_value(Parameters.PARAM_MAX_THREAD_EXECUTION_TIME, parameters, + 60.0) + + if case_arrival_ratio is None: + case_arrival_ratio = case_arrival.get_case_arrival_avg(log, parameters=parameters) + if resources_per_places is None: + resources_per_places = {} + + logging.basicConfig() + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + + places_interval_trees = {} + transitions_interval_trees = {} + cases_ex_time = [] + list_cases = {} + + for place in net.places: + # assign a semaphore to each place. + if place in resources_per_places: + place.semaphore = Semaphore(resources_per_places[place]) + else: + # if the user does not specify the number of resources per place, + # the default number is used + place.semaphore = Semaphore(default_num_resources_per_places) + place.assigned_time = [] + places_interval_trees[place] = IntervalTree() + for trans in net.transitions: + transitions_interval_trees[trans] = IntervalTree() + + # when the user does not specify any map from transitions to random variables, + # a replay operation is performed + if smap is None: + if enable_diagnostics: + logger.info(str(time()) + " started the replay operation.") + if force_distribution is not None: + smap = replay.get_map_from_log_and_net(log, net, im, fm, force_distribution=force_distribution, + parameters=parameters) + else: + smap = replay.get_map_from_log_and_net(log, net, im, fm, parameters=parameters) + if enable_diagnostics: + logger.info(str(time()) + " ended the replay operation.") + + # the start timestamp is set to 1000000 instead of 0 to avoid problems with 32 bit machines + start_time = 1000000 + threads = [] + for i in range(no_simulations): + list_cases[i] = Trace() + t = SimulationThread(i, net, im, fm, smap, start_time, places_interval_trees, transitions_interval_trees, + cases_ex_time, list_cases, enable_diagnostics, diagn_interval, small_scale_factor, + max_thread_exec_time) + t.start() + threads.append(t) + start_time = start_time + case_arrival_ratio + # wait a factor before opening a thread and the next one + sleep(case_arrival_ratio / small_scale_factor) + + for t in threads: + t.join() + + i = 0 + while i < len(threads): + if threads[i].terminated_correctly is False: + del list_cases[threads[i].id] + del threads[i] + del cases_ex_time[i] + continue + i = i + 1 + + if enable_diagnostics: + logger.info(str(time()) + " ended the Monte carlo simulation.") + + log = EventLog(list(list_cases.values())) + min_timestamp = log[0][0][timestamp_key].timestamp() + max_timestamp = max(y[timestamp_key].timestamp() for x in log for y in x) + + transitions_interval_trees = {t.name: y for t, y in transitions_interval_trees.items()} + + return log, {Outputs.OUTPUT_PLACES_INTERVAL_TREES.value: places_interval_trees, + Outputs.OUTPUT_TRANSITIONS_INTERVAL_TREES.value: transitions_interval_trees, + Outputs.OUTPUT_CASES_EX_TIME.value: cases_ex_time, + Outputs.OUTPUT_MEDIAN_CASES_EX_TIME.value: median(cases_ex_time), + Outputs.OUTPUT_CASE_ARRIVAL_RATIO.value: case_arrival_ratio, + Outputs.OUTPUT_TOTAL_CASES_TIME.value: max_timestamp - min_timestamp} diff --git a/pm4py/pm4py/algo/simulation/playout/__init__.py b/pm4py/pm4py/algo/simulation/playout/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7f01770bbeabd6b8386aacc44679d31a7070936c --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.playout import dfg, petri_net, process_tree diff --git a/pm4py/pm4py/algo/simulation/playout/dfg/__init__.py b/pm4py/pm4py/algo/simulation/playout/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0a3c52342d4801f18e039d3be5c2a7a17ec5c0db --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/dfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.playout.dfg import algorithm, variants diff --git a/pm4py/pm4py/algo/simulation/playout/dfg/algorithm.py b/pm4py/pm4py/algo/simulation/playout/dfg/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..d31b3e1fc09c8f9be89fced9c28915ad64742cd3 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/dfg/algorithm.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.playout.dfg.variants import classic, performance +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog + + +class Variants(Enum): + CLASSIC = classic + PERFORMANCE = performance + + +def apply(dfg: Dict[Tuple[str, str], int], start_activities: Dict[str, int], end_activities: Dict[str, int], variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Union[EventLog, Dict[Tuple[str, str], int]]: + """ + Applies the playout algorithm on a DFG, extracting the most likely traces according to the DFG + + Parameters + --------------- + dfg + *Complete* DFG + start_activities + Start activities + end_activities + End activities + variant + Variant of the playout to be used, possible values: + - Variants.CLASSIC + - Variants.PERFORMANCE + parameters + Parameters of the algorithm + + Returns + --------------- + simulated_log + Simulated log + """ + return exec_utils.get_variant(variant).apply(dfg, start_activities, end_activities, parameters=parameters) diff --git a/pm4py/pm4py/algo/simulation/playout/dfg/variants/__init__.py b/pm4py/pm4py/algo/simulation/playout/dfg/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9c6a3710504ce88c62f81b542d29a4aa7cdc4193 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/dfg/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.playout.dfg.variants import classic, performance diff --git a/pm4py/pm4py/algo/simulation/playout/dfg/variants/classic.py b/pm4py/pm4py/algo/simulation/playout/dfg/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..3a445d6a445d6e59533dd6ba29782944fae46942 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/dfg/variants/classic.py @@ -0,0 +1,332 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import datetime +import heapq +import math +import sys +import time +from collections import Counter +from copy import deepcopy +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple + +from pm4py.objects.log.obj import EventLog +from pm4py.objects.log.obj import Trace, Event +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.util.dt_parsing.variants import strpfromiso + + +class Parameters(Enum): + MAX_NO_VARIANTS = "max_no_variants" + MIN_WEIGHTED_PROBABILITY = "min_weighted_probability" + MAX_NO_OCC_PER_ACTIVITY = "max_no_occ_per_activitiy" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + INTERRUPT_SIMULATION_WHEN_DFG_COMPLETE = "interrupt_simulation_when_dfg_complete" + ADD_TRACE_IF_TAKES_NEW_ELS_TO_DFG = "add_trace_if_takes_new_els_to_dfg" + RETURN_VARIANTS = "return_variants" + MAX_EXECUTION_TIME = "max_execution_time" + RETURN_ONLY_IF_COMPLETE = "return_only_if_complete" + MIN_VARIANT_OCC = "min_variant_occ" + + +def get_node_tr_probabilities(dfg, start_activities, end_activities): + """ + Gets the transition probabilities between the nodes of a DFG + + Parameters + -------------- + dfg + DFG + start_activities + Start activities + end_activities + End activities + + Returns + --------------- + weighted_start_activities + Start activities, with a relative weight going from 0 to 1 + node_transition_probabilities + The transition probabilities between the nodes of the DFG + (the end node is None) + """ + node_transition_probabilities = {} + # this part gives to each edge a transition probability, + # given the (integer) DFG and the (integer) count of the end activities + for el in dfg: + if el[0] not in node_transition_probabilities: + node_transition_probabilities[el[0]] = {} + node_transition_probabilities[el[0]][el[1]] = dfg[el] + for ea in end_activities: + if ea not in node_transition_probabilities: + node_transition_probabilities[ea] = {} + node_transition_probabilities[ea][None] = end_activities[ea] + for source in node_transition_probabilities: + sum_values = sum(node_transition_probabilities[source].values()) + for target in node_transition_probabilities[source]: + # logarithm gives numerical stability + node_transition_probabilities[source][target] = math.log(float( + node_transition_probabilities[source][target]) / float(sum_values)) + # this part gives to each start activity a probability, given its frequency + sum_start_act = sum(start_activities.values()) + start_activities = deepcopy(start_activities) + for sa in start_activities: + start_activities[sa] = math.log(float(start_activities[sa]) / float(sum_start_act)) + + return start_activities, node_transition_probabilities + + +def get_traces(dfg, start_activities, end_activities, parameters=None): + """ + Gets the most probable traces from the DFG, one-by-one (iterator), + until the least probable + + Parameters + --------------- + dfg + *Complete* DFG + start_activities + Start activities + end_activities + End activities + parameters + Parameters of the algorithm, including: + - Parameters.MAX_NO_OCC_PER_ACTIVITY => the maximum number of occurrences per activity in the traces of the log + (default: 2) + + Returns + --------------- + yielded_trace + Trace of the simulation + """ + if parameters is None: + parameters = {} + + max_no_occ_per_activity = exec_utils.get_param_value(Parameters.MAX_NO_OCC_PER_ACTIVITY, parameters, 2) + + start_activities, node_transition_probabilities = get_node_tr_probabilities(dfg, start_activities, end_activities) + + # we start from the partial traces containing only the start activities along + # with their probability + partial_traces = [(-start_activities[sa], (sa,)) for sa in start_activities] + heapq.heapify(partial_traces) + + while partial_traces: + trace = heapq.heappop(partial_traces) + trace = list(trace) + trace[1] = list(trace[1]) + trace_counter = Counter(trace[1]) + last_act = trace[1][-1] + prob = trace[0] + + for new_act in node_transition_probabilities[last_act]: + if trace_counter[new_act] < max_no_occ_per_activity: + prob_new_act = node_transition_probabilities[last_act][new_act] + if new_act is None: + p = math.exp(-(prob - prob_new_act)) + tr = tuple(trace[1]) + yield (tr, p) + else: + heapq.heappush(partial_traces, (prob - prob_new_act, tuple(trace[1] + [new_act]))) + + +def apply(dfg: Dict[Tuple[str, str], int], start_activities: Dict[str, int], end_activities: Dict[str, int], + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Union[ + EventLog, Dict[Tuple[str, str], int]]: + """ + Applies the playout algorithm on a DFG, extracting the most likely traces according to the DFG + + Parameters + --------------- + dfg + *Complete* DFG + start_activities + Start activities + end_activities + End activities + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the activity key of the simulated log + - Parameters.TIMESTAMP_KEY => the timestamp key of the simulated log + - Parameters.MAX_NO_VARIANTS => the maximum number of variants generated by the method (default: 3000) + - Parameters.MIN_WEIGHTED_PROBABILITY => the minimum overall weighted probability that makes the method stop + (default: 1) + - Parameters.MAX_NO_OCC_PER_ACTIVITY => the maximum number of occurrences per activity in the traces of the log + (default: 2) + - Parameters.INTERRUPT_SIMULATION_WHEN_DFG_COMPLETE => interrupts the simulation when the DFG of the simulated + log has the same keys to the DFG of the original log + (all behavior is contained) (default: False) + - Parameters.ADD_TRACE_IF_TAKES_NEW_ELS_TO_DFG => adds a simulated trace to the simulated log only if it adds + elements to the simulated DFG, e.g., it adds behavior; + skip insertion otherwise (default: False) + - Parameters.RETURN_VARIANTS => returns the traces as variants with a likely number of occurrences + + Returns + --------------- + simulated_log + Simulated log + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + max_no_variants = exec_utils.get_param_value(Parameters.MAX_NO_VARIANTS, parameters, 3000) + min_weighted_probability = exec_utils.get_param_value(Parameters.MIN_WEIGHTED_PROBABILITY, parameters, 1.0) + interrupt_simulation_when_dfg_complete = exec_utils.get_param_value( + Parameters.INTERRUPT_SIMULATION_WHEN_DFG_COMPLETE, parameters, False) + add_trace_if_takes_new_els_to_dfg = exec_utils.get_param_value(Parameters.ADD_TRACE_IF_TAKES_NEW_ELS_TO_DFG, + parameters, False) + return_variants = exec_utils.get_param_value(Parameters.RETURN_VARIANTS, parameters, False) + max_execution_time = exec_utils.get_param_value(Parameters.MAX_EXECUTION_TIME, parameters, sys.maxsize) + return_only_if_complete = exec_utils.get_param_value(Parameters.RETURN_ONLY_IF_COMPLETE, parameters, False) + min_variant_occ = exec_utils.get_param_value(Parameters.MIN_VARIANT_OCC, parameters, 1) + + # keep track of the DFG, start activities and end activities of the (ongoing) simulation + simulated_traces_dfg = set() + simulated_traces_sa = set() + simulated_traces_ea = set() + interrupt_break_condition = False + interrupted = False + overall_probability = 0.0 + + final_traces = [] + max_occ = 0 + + start_time = time.time() + for tr, p in get_traces(dfg, start_activities, end_activities, parameters=parameters): + if interrupt_simulation_when_dfg_complete and interrupt_break_condition: + break + if len(final_traces) >= max_no_variants: + interrupted = True + break + if overall_probability > min_weighted_probability: + interrupted = True + break + current_time = time.time() + if (current_time - start_time) > max_execution_time: + interrupted = True + break + overall_probability += p + diff_sa = {tr[0]}.difference(simulated_traces_sa) + diff_ea = {tr[-1]}.difference(simulated_traces_ea) + diff_dfg = {(tr[i], tr[i + 1]) for i in range(len(tr) - 1)}.difference(simulated_traces_dfg) + adds_something = len(diff_sa) > 0 or len(diff_ea) > 0 or len(diff_dfg) > 0 + if add_trace_if_takes_new_els_to_dfg and not adds_something: + # interrupt the addition if the ADD_TRACE_IF_TAKES_NEW_ELS_TO_DFG is set to True, + # and the trace does not really change the information on the DFG, start activities, + # end activities + continue + # update the start activities, end activities, DFG of the original log + simulated_traces_sa = simulated_traces_sa.union(diff_sa) + simulated_traces_ea = simulated_traces_ea.union(diff_ea) + simulated_traces_dfg = simulated_traces_dfg.union(diff_dfg) + # memorize the difference between the original DFG and the DFG of the simulated log + diff_original_sa = set(start_activities).difference(simulated_traces_sa) + diff_original_ea = set(end_activities).difference(simulated_traces_ea) + diff_original_dfg = set(dfg).difference(simulated_traces_dfg) + interrupt_break_condition = len(diff_original_sa) == 0 and len(diff_original_ea) == 0 and len( + diff_original_dfg) == 0 + var_occ = math.ceil(p * max_no_variants) + max_occ = max(max_occ, var_occ) + if var_occ < min_variant_occ <= max_occ: + break + final_traces.append((-p, tr)) + if interrupt_simulation_when_dfg_complete and interrupt_break_condition: + break + + # make sure that the traces are strictly ordered by their probability + # (generally, the order is already pretty good, since the states are visited in the queue based on their order, + # but not always 100% consistent) + final_traces = sorted(final_traces) + + if return_variants: + # returns the variants instead of the log + variants = {} + for p, tr in final_traces: + var_occ = math.ceil(-p * max_no_variants) + variants[tr] = var_occ + + if not (interrupted and return_only_if_complete): + return variants + else: + event_log = EventLog() + # assigns to each event an increased timestamp from 1970 + curr_timestamp = 10000000 + for index, tr in enumerate(final_traces): + log_trace = Trace( + attributes={xes_constants.DEFAULT_TRACEID_KEY: str(index), "probability": -tr[0]}) + for act in tr[1]: + log_trace.append( + Event({activity_key: act, timestamp_key: strpfromiso.fix_naivety(datetime.datetime.fromtimestamp(curr_timestamp))})) + # increases by 1 second + curr_timestamp += 1 + event_log.append(log_trace) + if not (interrupted and return_only_if_complete): + return event_log + + +def get_trace_probability(trace, dfg, start_activities, end_activities, parameters=None): + """ + Given a trace of a log, gets its probability given the complete DFG + + Parameters + ---------------- + trace + Trace of a log + dfg + *Complete* DFG + start_activities + Start activities of the model + end_activities + End activities of the model + parameters + Parameters of the algorithm: + - Parameters.ACTIVITY_KEY => activity key + + Returns + ---------------- + prob + The probability of the trace according to the DFG + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + trace_act = tuple(x[activity_key] for x in trace) + + start_activities, node_transition_probabilities = get_node_tr_probabilities(dfg, start_activities, end_activities) + + try: + # the following code would not crash, assuming that the trace is fully replayable on the model + sum_prob = 0.0 + sum_prob += start_activities[trace_act[0]] + + for i in range(len(trace_act)): + this_act = trace_act[i] + next_act = trace_act[i + 1] if i < len(trace_act) - 1 else None + lpt = node_transition_probabilities[this_act][next_act] + + sum_prob += lpt + + return math.exp(sum_prob) + except: + # if it crashes, the trace is not replayable on the model + # then return probability 0 + return 0.0 diff --git a/pm4py/pm4py/algo/simulation/playout/dfg/variants/performance.py b/pm4py/pm4py/algo/simulation/playout/dfg/variants/performance.py new file mode 100644 index 0000000000000000000000000000000000000000..6f76ea4705f6a04e635f3a18790f06422f1e0253 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/dfg/variants/performance.py @@ -0,0 +1,151 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import copy +from datetime import datetime +from enum import Enum +from typing import Optional, Dict, Any, Tuple + +from numpy.random import choice, exponential + +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.util.dt_parsing.variants import strpfromiso + + +class Parameters(Enum): + NUM_TRACES = "num_traces" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + CASE_ARRIVAL_RATE = "case_arrival_rate" + PERFORMANCE_DFG = "performance_dfg" + PARAM_ARTIFICIAL_START_ACTIVITY = constants.PARAM_ARTIFICIAL_START_ACTIVITY + PARAM_ARTIFICIAL_END_ACTIVITY = constants.PARAM_ARTIFICIAL_END_ACTIVITY + + +def dict_based_choice(dct: Dict[str, float]) -> str: + """ + Performs a weighted choice, given a dictionary associating + a weight to each possible choice + + Parameters + ----------------- + dct + Dictionary associating a weight to each choice + + Returns + ----------------- + choice + Choice + """ + X = [] + Y = [] + summ = 0 + for x, y in dct.items(): + X.append(x) + Y.append(y) + summ += y + if summ > 0: + for i in range(len(Y)): + Y[i] = Y[i] / summ + return list(choice(X, 1, p=Y))[0] + + +def apply(frequency_dfg: Dict[Tuple[str, str], int], start_activities: Dict[str, int], end_activities: Dict[str, int], + parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + Simulates a log out with the transition probabilities provided by the frequency DFG, + and the time deltas provided by the performance DFG + + Parameters + --------------- + frequency_dfg + Frequency DFG + start_activities + Start activities + end_activities + End activities + parameters + Parameters of the algorithm, including: + - Parameters.NUM_TRACES: the number of traces of the simulated log + - Parameters.ACTIVITY_KEY: the activity key to be used in the simulated log + - Parameters.TIMESTAMP_KEY: the timestamp key to be used in the simulated log + - Parameters.CASE_ID_KEY: the case identifier key to be used in the simulated log + - Parameters.CASE_ARRIVAL_RATE: the average distance (in seconds) between the start of two cases (default: 1) + - Parameters.PERFORMANCE_DFG: (mandatory) the performance DFG that is used for the time deltas. + + Returns + --------------- + simulated_log + Simulated log + """ + if parameters is None: + parameters = {} + + num_traces = exec_utils.get_param_value(Parameters.NUM_TRACES, parameters, 1000) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + case_arrival_rate = exec_utils.get_param_value(Parameters.CASE_ARRIVAL_RATE, parameters, 1) + performance_dfg = copy(exec_utils.get_param_value(Parameters.PERFORMANCE_DFG, parameters, None)) + frequency_dfg = copy(frequency_dfg) + + artificial_start_activity = exec_utils.get_param_value(Parameters.PARAM_ARTIFICIAL_START_ACTIVITY, parameters, constants.DEFAULT_ARTIFICIAL_START_ACTIVITY) + artificial_end_activity = exec_utils.get_param_value(Parameters.PARAM_ARTIFICIAL_END_ACTIVITY, parameters, constants.DEFAULT_ARTIFICIAL_END_ACTIVITY) + + for sa in start_activities: + frequency_dfg[(artificial_start_activity, sa)] = start_activities[sa] + performance_dfg[(artificial_start_activity, sa)] = 0 + + for ea in end_activities: + frequency_dfg[(ea, artificial_end_activity)] = end_activities[ea] + performance_dfg[(ea, artificial_end_activity)] = 0 + + choices = {} + for el in frequency_dfg: + if not el[0] in choices: + choices[el[0]] = {} + choices[el[0]][el[1]] = frequency_dfg[el] + + if performance_dfg is None: + raise Exception( + "performance DFG simulation requires the Parameters.PERFORMANCE_DFG ('performance_dfg') parameter specification.") + + log = EventLog() + curr_st = 10000000 + + for i in range(num_traces): + curr_st += case_arrival_rate + curr_t = curr_st + trace = Trace(attributes={case_id_key: str(i)}) + log.append(trace) + curr_act = artificial_start_activity + while True: + next_act = dict_based_choice(choices[curr_act]) + if next_act == artificial_end_activity or next_act is None: + break + perf = performance_dfg[(curr_act, next_act)] + if isinstance(perf, dict): + perf = perf["mean"] + perf = 0 if perf == 0 else exponential(perf) + curr_t += perf + curr_act = next_act + eve = Event({activity_key: curr_act, timestamp_key: strpfromiso.fix_naivety(datetime.fromtimestamp(curr_t))}) + trace.append(eve) + + return log diff --git a/pm4py/pm4py/algo/simulation/playout/petri_net/__init__.py b/pm4py/pm4py/algo/simulation/playout/petri_net/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1ac71168340301bedf91044e584f876ec4f273ad --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/petri_net/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.playout.petri_net import algorithm, variants diff --git a/pm4py/pm4py/algo/simulation/playout/petri_net/algorithm.py b/pm4py/pm4py/algo/simulation/playout/petri_net/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..597321a6706d0611747a3357a6132f09cb758f44 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/petri_net/algorithm.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.playout.petri_net.variants import extensive +from pm4py.algo.simulation.playout.petri_net.variants import stochastic_playout, basic_playout +from pm4py.util import exec_utils +from enum import Enum +from pm4py.objects.petri_net.obj import PetriNet, Marking +from typing import Optional, Dict, Any +from pm4py.objects.log.obj import EventLog + + +class Variants(Enum): + BASIC_PLAYOUT = basic_playout + STOCHASTIC_PLAYOUT = stochastic_playout + EXTENSIVE = extensive + + +DEFAULT_VARIANT = Variants.BASIC_PLAYOUT +VERSIONS = {Variants.BASIC_PLAYOUT, Variants.EXTENSIVE, Variants.STOCHASTIC_PLAYOUT} + + +def apply(net: PetriNet, initial_marking: Marking, final_marking: Marking = None, parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> EventLog: + """ + Do the playout of a Petrinet generating a log + + Parameters + ----------- + net + Petri net to play-out + initial_marking + Initial marking of the Petri net + final_marking + (if provided) Final marking of the Petri net + parameters + Parameters of the algorithm + variant + Variant of the algorithm to use: + - Variants.BASIC_PLAYOUT: selects random traces from the model, without looking at the + frequency of the transitions + - Variants.STOCHASTIC_PLAYOUT: selects random traces from the model, looking at the + stochastic frequency of the transitions. Requires the provision of the stochastic map + or the log. + - Variants.EXTENSIVE: gets all the traces from the model. can be expensive + """ + return exec_utils.get_variant(variant).apply(net, initial_marking, final_marking=final_marking, + parameters=parameters) diff --git a/pm4py/pm4py/algo/simulation/playout/petri_net/variants/__init__.py b/pm4py/pm4py/algo/simulation/playout/petri_net/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..f80da13d17689d8c583cdc77a276f1438668e254 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/petri_net/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.playout.petri_net.variants import basic_playout, extensive diff --git a/pm4py/pm4py/algo/simulation/playout/petri_net/variants/basic_playout.py b/pm4py/pm4py/algo/simulation/playout/petri_net/variants/basic_playout.py new file mode 100644 index 0000000000000000000000000000000000000000..dc4f6dedf7904d43407568603a4cd8177a95abe6 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/petri_net/variants/basic_playout.py @@ -0,0 +1,200 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import datetime +from copy import copy +from enum import Enum +from random import choice +from typing import Optional, Dict, Any, Union + +from pm4py.objects import petri_net +from pm4py.objects.log import obj as log_instance +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util import constants +from pm4py.util import exec_utils +from pm4py.util import xes_constants +from pm4py.util.dt_parsing.variants import strpfromiso + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + RETURN_VISITED_ELEMENTS = "return_visited_elements" + NO_TRACES = "noTraces" + MAX_TRACE_LENGTH = "maxTraceLength" + PETRI_SEMANTICS = "petri_semantics" + ADD_ONLY_IF_FM_IS_REACHED = "add_only_if_fm_is_reached" + FM_LEQ_ACCEPTED = "fm_leq_accepted" + INITIAL_TIMESTAMP = "initial_timestamp" + INITIAL_CASE_ID = "initial_case_id" + + +def apply_playout(net, initial_marking, no_traces=100, max_trace_length=100, + initial_timestamp=10000000, initial_case_id=0, + case_id_key=xes_constants.DEFAULT_TRACEID_KEY, + activity_key=xes_constants.DEFAULT_NAME_KEY, timestamp_key=xes_constants.DEFAULT_TIMESTAMP_KEY, + final_marking=None, return_visited_elements=False, semantics=petri_net.semantics.ClassicSemantics(), + add_only_if_fm_is_reached=False, fm_leq_accepted=False): + """ + Do the playout of a Petrinet generating a log + + Parameters + ---------- + net + Petri net to play-out + initial_marking + Initial marking of the Petri net + no_traces + Number of traces to generate + max_trace_length + Maximum number of events per trace (do break) + initial_timestamp + Increased timestamp from 1970 for the first event + initial_case_id + Case id of the first event + case_id_key + Trace attribute that is the case ID + activity_key + Event attribute that corresponds to the activity + timestamp_key + Event attribute that corresponds to the timestamp + final_marking + If provided, the final marking of the Petri net + semantics + Semantics of the Petri net to be used (default: petri_net.semantics.ClassicSemantics()) + add_only_if_fm_is_reached + Adds the case only if the final marking is reached + fm_leq_accepted + Accepts traces ending in a marking that is a superset of the final marking + """ + # assigns to each event an increased timestamp from 1970 + curr_timestamp = initial_timestamp + all_visited_elements = [] + + i = 0 + while True: + if len(all_visited_elements) >= no_traces: + break + + if i >= no_traces: + if not add_only_if_fm_is_reached: + break + + if len(all_visited_elements) == 0: + # likely, the final marking is not reachable, therefore terminate here the playout + break + + visited_elements = [] + visible_transitions_visited = [] + + marking = copy(initial_marking) + while len(visible_transitions_visited) < max_trace_length: + visited_elements.append(marking) + + if not semantics.enabled_transitions(net, marking): # supports nets with possible deadlocks + break + all_enabled_trans = semantics.enabled_transitions(net, marking) + if final_marking is not None and final_marking <= marking and (final_marking == marking or fm_leq_accepted): + trans = choice(list(all_enabled_trans.union({None}))) + else: + trans = choice(list(all_enabled_trans)) + if trans is None: + break + + visited_elements.append(trans) + if trans.label is not None: + visible_transitions_visited.append(trans) + + marking = semantics.execute(trans, net, marking) + + if not add_only_if_fm_is_reached: + all_visited_elements.append(tuple(visited_elements)) + elif final_marking == marking: + all_visited_elements.append(tuple(visited_elements)) + elif final_marking <= marking and fm_leq_accepted: + all_visited_elements.append(tuple(visited_elements)) + + i = i + 1 + + if return_visited_elements: + return all_visited_elements + + log = log_instance.EventLog() + + for index, visited_elements in enumerate(all_visited_elements): + trace = log_instance.Trace() + trace.attributes[case_id_key] = str(index+initial_case_id) + for element in visited_elements: + if type(element) is PetriNet.Transition and element.label is not None: + event = log_instance.Event() + event[activity_key] = element.label + event[timestamp_key] = strpfromiso.fix_naivety(datetime.datetime.fromtimestamp(curr_timestamp)) + trace.append(event) + # increases by 1 second + curr_timestamp += 1 + log.append(trace) + + return log + + +def apply(net: PetriNet, initial_marking: Marking, final_marking: Marking = None, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Do the playout of a Petrinet generating a log + + Parameters + ----------- + net + Petri net to play-out + initial_marking + Initial marking of the Petri net + final_marking + If provided, the final marking of the Petri net + parameters + Parameters of the algorithm: + Parameters.NO_TRACES -> Number of traces of the log to generate + Parameters.MAX_TRACE_LENGTH -> Maximum trace length + Parameters.INITIAL_TIMESTAMP -> The first event is set with INITIAL_TIMESTAMP increased from 1970 + Parameters.INITIAL_CASE_ID -> Numeric case id for the first trace + Parameters.PETRI_SEMANTICS -> Petri net semantics to be used (default: petri_nets.semantics.ClassicSemantics()) + Parameters.ADD_ONLY_IF_FM_IS_REACHED -> adds the case only if the final marking is reached + Parameters.FM_LEQ_ACCEPTED -> Accepts traces ending in a marking that is a superset of the final marking + """ + if parameters is None: + parameters = {} + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + no_traces = exec_utils.get_param_value(Parameters.NO_TRACES, parameters, 1000) + max_trace_length = exec_utils.get_param_value(Parameters.MAX_TRACE_LENGTH, parameters, 1000) + initial_timestamp = exec_utils.get_param_value(Parameters.INITIAL_TIMESTAMP, parameters, 10000000) + initial_case_id = exec_utils.get_param_value(Parameters.INITIAL_CASE_ID, parameters, 0) + return_visited_elements = exec_utils.get_param_value(Parameters.RETURN_VISITED_ELEMENTS, parameters, False) + semantics = exec_utils.get_param_value(Parameters.PETRI_SEMANTICS, parameters, petri_net.semantics.ClassicSemantics()) + add_only_if_fm_is_reached = exec_utils.get_param_value(Parameters.ADD_ONLY_IF_FM_IS_REACHED, parameters, False) + fm_leq_accepted = exec_utils.get_param_value(Parameters.FM_LEQ_ACCEPTED, parameters, False) + + return apply_playout(net, initial_marking, max_trace_length=max_trace_length, + initial_timestamp=initial_timestamp, + initial_case_id=initial_case_id, + no_traces=no_traces, + case_id_key=case_id_key, activity_key=activity_key, timestamp_key=timestamp_key, + final_marking=final_marking, return_visited_elements=return_visited_elements, + semantics=semantics, add_only_if_fm_is_reached=add_only_if_fm_is_reached, + fm_leq_accepted=fm_leq_accepted) diff --git a/pm4py/pm4py/algo/simulation/playout/petri_net/variants/extensive.py b/pm4py/pm4py/algo/simulation/playout/petri_net/variants/extensive.py new file mode 100644 index 0000000000000000000000000000000000000000..6ef342bec2d518e8607714b3961da158796c77d5 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/petri_net/variants/extensive.py @@ -0,0 +1,139 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import datetime +import sys +from collections import Counter +from enum import Enum +from typing import Optional, Dict, Any, Union + +from pm4py.objects import petri_net +from pm4py.objects.log import obj as log_instance +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.util.dt_parsing.variants import strpfromiso +from pm4py.util import constants +from pm4py.util import exec_utils +from pm4py.util import xes_constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_TRACE_LENGTH = "maxTraceLength" + RETURN_ELEMENTS = "return_elements" + MAX_MARKING_OCC = "max_marking_occ" + PETRI_SEMANTICS = "petri_semantics" + + +POSITION_MARKING = 0 +POSITION_TRACE = 1 +POSITION_ELEMENTS = 2 + + +def apply(net: PetriNet, initial_marking: Marking, final_marking: Marking = None, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Do the playout of a Petrinet generating a log (extensive search; stop at the maximum + trace length specified + + Parameters + ----------- + net + Petri net to play-out + initial_marking + Initial marking of the Petri net + final_marking + If provided, the final marking of the Petri net + parameters + Parameters of the algorithm: + Parameters.MAX_TRACE_LENGTH -> Maximum trace length + Parameters.PETRI_SEMANTICS -> Petri net semantics + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + max_trace_length = exec_utils.get_param_value(Parameters.MAX_TRACE_LENGTH, parameters, 10) + return_elements = exec_utils.get_param_value(Parameters.RETURN_ELEMENTS, parameters, False) + max_marking_occ = exec_utils.get_param_value(Parameters.MAX_MARKING_OCC, parameters, sys.maxsize) + semantics = exec_utils.get_param_value(Parameters.PETRI_SEMANTICS, parameters, petri_net.semantics.ClassicSemantics()) + + # assigns to each event an increased timestamp from 1970 + curr_timestamp = 10000000 + + feasible_elements = [] + + to_visit = [(initial_marking, (), ())] + visited = set() + + while len(to_visit) > 0: + state = to_visit.pop(0) + + m = state[POSITION_MARKING] + trace = state[POSITION_TRACE] + elements = state[POSITION_ELEMENTS] + + if (m, trace) in visited: + continue + visited.add((m, trace)) + + en_t = semantics.enabled_transitions(net, m) + + if (final_marking is not None and m == final_marking) or (final_marking is None and len(en_t) == 0): + if len(trace) <= max_trace_length: + feasible_elements.append(elements) + + for t in en_t: + new_elements = elements + (m,) + new_elements = new_elements + (t,) + + counter_elements = Counter(new_elements) + + if counter_elements[m] > max_marking_occ: + continue + + new_m = semantics.weak_execute(t, net, m) + if t.label is not None: + new_trace = trace + (t.label,) + else: + new_trace = trace + + new_state = (new_m, new_trace, new_elements) + + if new_state in visited or len(new_trace) > max_trace_length: + continue + to_visit.append(new_state) + + if return_elements: + return feasible_elements + + log = log_instance.EventLog() + for elements in feasible_elements: + log_trace = log_instance.Trace() + log_trace.attributes[case_id_key] = str(len(log)) + activities = [x.label for x in elements if type(x) is PetriNet.Transition and x.label is not None] + for act in activities: + curr_timestamp = curr_timestamp + 1 + log_trace.append( + log_instance.Event({activity_key: act, timestamp_key: strpfromiso.fix_naivety(datetime.datetime.fromtimestamp(curr_timestamp))})) + log.append(log_trace) + + return log diff --git a/pm4py/pm4py/algo/simulation/playout/petri_net/variants/stochastic_playout.py b/pm4py/pm4py/algo/simulation/playout/petri_net/variants/stochastic_playout.py new file mode 100644 index 0000000000000000000000000000000000000000..54338de1a86be9325140a1b85182d1f2008408b8 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/petri_net/variants/stochastic_playout.py @@ -0,0 +1,185 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import datetime +from copy import copy +from enum import Enum +from typing import Optional, Dict, Any, Union + +from pm4py.objects import petri_net +from pm4py.objects.log import obj as log_instance +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils import final_marking as final_marking_discovery +from pm4py.util import constants +from pm4py.util import exec_utils +from pm4py.util import xes_constants +from pm4py.util.dt_parsing.variants import strpfromiso + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + RETURN_VISITED_ELEMENTS = "return_visited_elements" + NO_TRACES = "noTraces" + MAX_TRACE_LENGTH = "maxTraceLength" + LOG = "log" + STOCHASTIC_MAP = "smap" + PETRI_SEMANTICS = "petri_semantics" + + +def apply_playout(net, initial_marking, no_traces=100, max_trace_length=100, + case_id_key=xes_constants.DEFAULT_TRACEID_KEY, + activity_key=xes_constants.DEFAULT_NAME_KEY, timestamp_key=xes_constants.DEFAULT_TIMESTAMP_KEY, + final_marking=None, smap=None, log=None, return_visited_elements=False, + semantics=petri_net.semantics.ClassicSemantics(), parameters=None): + """ + Do the playout of a Petrinet generating a log + + Parameters + ---------- + net + Petri net to play-out + initial_marking + Initial marking of the Petri net + no_traces + Number of traces to generate + max_trace_length + Maximum number of events per trace (do break) + case_id_key + Trace attribute that is the case ID + activity_key + Event attribute that corresponds to the activity + timestamp_key + Event attribute that corresponds to the timestamp + final_marking + If provided, the final marking of the Petri net + smap + Stochastic map + log + Log + semantics + Semantics of the Petri net to be used (default: petri_net.semantics.ClassicSemantics()) + """ + from pm4py.algo.simulation.montecarlo.utils import replay + from pm4py.objects.stochastic_petri import utils as stochastic_utils + + if final_marking is None: + # infer the final marking from the net + final_marking = final_marking_discovery.discover_final_marking(net) + if smap is None: + if log is None: + raise Exception("please provide at least one between stochastic map and log") + if parameters is None: + parameters = {} + parameters_rep = copy(parameters) + parameters_rep[Parameters.ACTIVITY_KEY] = activity_key + parameters_rep[Parameters.TIMESTAMP_KEY] = timestamp_key + smap = replay.get_map_from_log_and_net(log, net, initial_marking, final_marking, + parameters=parameters_rep) + + # assigns to each event an increased timestamp from 1970 + curr_timestamp = 10000000 + all_visited_elements = [] + + for i in range(no_traces): + visited_elements = [] + visible_transitions_visited = [] + marking = copy(initial_marking) + + while len(visible_transitions_visited) < max_trace_length: + visited_elements.append(marking) + + if not semantics.enabled_transitions(net, marking): # supports nets with possible deadlocks + break + all_enabled_trans = semantics.enabled_transitions(net, marking) + if final_marking is not None and marking == final_marking: + en_t_list = list(all_enabled_trans.union({None})) + else: + en_t_list = list(all_enabled_trans) + + trans = stochastic_utils.pick_transition(en_t_list, smap) + + if trans is None: + break + + visited_elements.append(trans) + if trans.label is not None: + visible_transitions_visited.append(trans) + + marking = semantics.execute(trans, net, marking) + + all_visited_elements.append(tuple(visited_elements)) + + if return_visited_elements: + return all_visited_elements + + log = log_instance.EventLog() + + for index, visited_elements in enumerate(all_visited_elements): + trace = log_instance.Trace() + trace.attributes[case_id_key] = str(index) + for element in visited_elements: + if type(element) is PetriNet.Transition and element.label is not None: + event = log_instance.Event() + event[activity_key] = element.label + event[timestamp_key] = strpfromiso.fix_naivety(datetime.datetime.fromtimestamp(curr_timestamp)) + trace.append(event) + # increases by 1 second + curr_timestamp += 1 + log.append(trace) + + return log + + +def apply(net: PetriNet, initial_marking: Marking, final_marking: Marking = None, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Do the playout of a Petrinet generating a log + + Parameters + ----------- + net + Petri net to play-out + initial_marking + Initial marking of the Petri net + final_marking + If provided, the final marking of the Petri net + parameters + Parameters of the algorithm: + Parameters.NO_TRACES -> Number of traces of the log to generate + Parameters.MAX_TRACE_LENGTH -> Maximum trace length + Parameters.PETRI_SEMANTICS -> Petri net semantics to be used (default: petri_nets.semantics.ClassicSemantics()) + """ + if parameters is None: + parameters = {} + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + no_traces = exec_utils.get_param_value(Parameters.NO_TRACES, parameters, 1000) + max_trace_length = exec_utils.get_param_value(Parameters.MAX_TRACE_LENGTH, parameters, 1000) + smap = exec_utils.get_param_value(Parameters.STOCHASTIC_MAP, parameters, None) + log = exec_utils.get_param_value(Parameters.LOG, parameters, None) + return_visited_elements = exec_utils.get_param_value(Parameters.RETURN_VISITED_ELEMENTS, parameters, False) + semantics = exec_utils.get_param_value(Parameters.PETRI_SEMANTICS, parameters, petri_net.semantics.ClassicSemantics()) + + return apply_playout(net, initial_marking, max_trace_length=max_trace_length, no_traces=no_traces, + case_id_key=case_id_key, activity_key=activity_key, timestamp_key=timestamp_key, + final_marking=final_marking, smap=smap, log=log, + return_visited_elements=return_visited_elements, + semantics=semantics, parameters=None) diff --git a/pm4py/pm4py/algo/simulation/playout/process_tree/__init__.py b/pm4py/pm4py/algo/simulation/playout/process_tree/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..76fa726273cdc0fcb9220abb0105bfc0d94197a2 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/process_tree/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.playout.process_tree import algorithm, variants diff --git a/pm4py/pm4py/algo/simulation/playout/process_tree/algorithm.py b/pm4py/pm4py/algo/simulation/playout/process_tree/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..64bbacbe35109e6c46d2b8a8cbe1b506f89f5d40 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/process_tree/algorithm.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.playout.process_tree.variants import basic_playout +from pm4py.algo.simulation.playout.process_tree.variants import extensive, topbottom +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.process_tree.obj import ProcessTree +from typing import Optional, Dict, Any +from pm4py.objects.log.obj import EventLog + + +class Variants(Enum): + BASIC_PLAYOUT = basic_playout + EXTENSIVE = extensive + TOPBOTTOM = topbottom + + +DEFAULT_VARIANT = Variants.TOPBOTTOM + + +def apply(tree: ProcessTree, variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + Performs a playout of a process tree + + Parameters + --------------- + tree + Process tree + variant + Variant of the algorithm: + - Variants.BASIC_PLAYOUT: basic playout + - Variants.EXTENSIVE: extensive playout (all the possible traces) + parameters + Parameters of the algorithm + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(tree, parameters=parameters) diff --git a/pm4py/pm4py/algo/simulation/playout/process_tree/variants/__init__.py b/pm4py/pm4py/algo/simulation/playout/process_tree/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bdaf50dcfd3aac6d69068029da7c0bf1640235df --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/process_tree/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.playout.process_tree.variants import basic_playout, extensive, topbottom diff --git a/pm4py/pm4py/algo/simulation/playout/process_tree/variants/basic_playout.py b/pm4py/pm4py/algo/simulation/playout/process_tree/variants/basic_playout.py new file mode 100644 index 0000000000000000000000000000000000000000..5aafce86a6b10a0c4a37469f4a888727ea14d0df --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/process_tree/variants/basic_playout.py @@ -0,0 +1,52 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree import semantics +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.process_tree.obj import ProcessTree + + +class Parameters: + NO_TRACES = "num_traces" + + +def apply(tree: ProcessTree, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Generate a log by a playout operation + + Parameters + --------------- + tree + Process tree + parameters + Parameters of the algorithm, including: + - Parameters.NO_TRACES: number of traces of the playout + + Returns + -------------- + log + Simulated log + """ + if parameters is None: + parameters = {} + + no_traces = exec_utils.get_param_value(Parameters.NO_TRACES, parameters, 1000) + + log = semantics.generate_log(tree, no_traces=no_traces) + + return log diff --git a/pm4py/pm4py/algo/simulation/playout/process_tree/variants/extensive.py b/pm4py/pm4py/algo/simulation/playout/process_tree/variants/extensive.py new file mode 100644 index 0000000000000000000000000000000000000000..a47df0be6ef13f026279a095680c2bc46b9651ce --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/process_tree/variants/extensive.py @@ -0,0 +1,342 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.algo.discovery.footprints import algorithm as fp_discovery +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.objects.process_tree.utils import bottomup as bottomup_discovery +from pm4py.objects.process_tree.obj import Operator +from pm4py.util import constants, xes_constants +from pm4py.util import exec_utils + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.process_tree.obj import ProcessTree + +TRACES = "traces" +SKIPPABLE = "skippable" + + +class Parameters(Enum): + MIN_TRACE_LENGTH = "min_trace_length" + MAX_TRACE_LENGTH = "max_trace_length" + MAX_LOOP_OCC = "max_loop_occ" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + MAX_LIMIT_NUM_TRACES = "max_limit_num_traces" + RETURN_SET_STRINGS = "return_set_strings" + + +def get_playout_leaf(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, max_rem_dict, + max_limit_num_traces): + """ + Performs the playout of a leaf (activity or invisible), returning the traces allowed by the tree + """ + mr = min_rem_dict[node] + mar = max_rem_dict[node] + playout_dictio[node] = {TRACES: set()} + if node.label is None: + playout_dictio[node][TRACES].add(tuple([])) + else: + if mar + 1 >= min_trace_length and max_trace_length - mr >= 1: + playout_dictio[node][TRACES].add((node.label,)) + + +def get_playout_xor(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, max_rem_dict, + max_limit_num_traces): + """ + Performs the playout of a XOR node, returning the traces allowed by the tree + """ + mr = min_rem_dict[node] + traces = set() + for n in node.children: + traces = traces.union(playout_dictio[n][TRACES]) + if len(traces) > max_limit_num_traces: + break + playout_dictio[node] = {TRACES: traces} + + +def get_min_remaining_length(traces): + """ + Minimum remaining length (for sequential, parallel cut detection) + + Parameters + -------------- + traces + Traces + """ + min_len_traces = [] + min_rem_length = [] + for x in traces: + if len(x) == 0: + min_len_traces.append(0) + else: + min_len_traces.append(len(x[0])) + min_rem_length.append(0) + min_rem_length[-1] = 0 + min_rem_length[-2] = min_len_traces[-1] + j = len(traces) - 3 + while j >= 0: + min_rem_length[j] = min_rem_length[j + 1] + min_len_traces[j + 1] + j = j - 1 + return min_len_traces, min_rem_length + + +def get_max_remaining_length(traces): + """ + Maximum remaining length (for sequential, parallel cut detection) + + Parameters + -------------- + traces + Traces + """ + max_len_traces = [] + max_rem_length = [] + for x in traces: + if len(x) == 0: + max_len_traces.append(0) + else: + max_len_traces.append(len(x[-1])) + max_rem_length.append(0) + max_rem_length[-1] = 0 + max_rem_length[-2] = max_len_traces[-1] + j = len(traces) - 3 + while j >= 0: + max_rem_length[j] = max_rem_length[j + 1] + max_len_traces[j + 1] + j = j - 1 + return max_len_traces, max_rem_length + + +def flatten(x): + """ + Flattens a list of tuples + """ + ret = [] + for y in x: + for z in y: + ret.append(z) + return ret + + +def get_sequential_compositions_children(traces, min_trace_length, max_trace_length, mr, mar, max_limit_num_traces): + """ + Returns alls the possible sequential combinations between + the children of a tree + """ + diff = max_trace_length - mr + diff2 = min_trace_length - mar + min_len_traces, min_rem_length = get_min_remaining_length(traces) + max_len_traces, max_rem_length = get_max_remaining_length(traces) + curr = list(traces[0]) + i = 1 + while i < len(traces): + mrl = min_rem_length[i] + marl = max_rem_length[i] + to_visit = [] + j = 0 + while j < len(curr): + x = curr[j] + if not type(x) is list: + x = [x] + z = 0 + while z < len(traces[i]): + y = traces[i][z] + xy = list(x) + xy.append(y) + val = sum(len(k) for k in xy) + if val + mrl <= diff and val + marl >= diff2: + to_visit.append(xy) + z = z + 1 + j = j + 1 + curr = to_visit + i = i + 1 + return curr + + +def get_playout_parallel(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, + max_rem_dict, max_limit_num_traces): + """ + Performs the playout of an AND node, returning the traces allowed by the tree + """ + mr = min_rem_dict[node] + mar = max_rem_dict[node] + traces = list(sorted(playout_dictio[x][TRACES], key=lambda x: len(x)) for x in node.children) + sequential_compositions = get_sequential_compositions_children(traces, min_trace_length, max_trace_length, mr, mar, max_limit_num_traces) + final_traces = list() + for x in sequential_compositions: + if len(final_traces) >= max_limit_num_traces: + break + to_visit = [[[]] + [len(y) for y in x]] + while len(to_visit) > 0: + curr = to_visit.pop(0) + possible_choices = [i - 1 for i in range(1, len(curr)) if curr[i] > 0] + for j in possible_choices: + new = list(curr) + new[0] = list(new[0]) + new[0].append(x[j][len(x[j]) - curr[j + 1]]) + new[j + 1] = new[j + 1] - 1 + to_visit.append(new) + if not possible_choices: + final_traces.append(tuple(curr[0])) + if len(final_traces) >= max_limit_num_traces: + break + playout_dictio[node] = {TRACES: set(final_traces)} + + +def get_playout_sequence(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, + max_rem_dict, max_limit_num_traces): + """ + Performs the playout of a sequence node, returning the traces allowed by the tree + """ + mr = min_rem_dict[node] + mar = max_rem_dict[node] + final_traces = set() + traces = list(sorted(playout_dictio[x][TRACES], key=lambda x: len(x)) for x in node.children) + sequential_compositions = get_sequential_compositions_children(traces, min_trace_length, max_trace_length, mr, mar, max_limit_num_traces) + for x in sequential_compositions: + final_traces.add(tuple(flatten(x))) + playout_dictio[node] = {TRACES: final_traces} + + +def get_playout_loop(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, max_rem_dict, + max_limit_num_traces): + """ + Performs the playout of a loop node, returning the traces allowed by the tree + """ + mr = min_rem_dict[node] + mar = max_rem_dict[node] + final_traces = set() + do_traces = sorted(list(playout_dictio[node.children[0]][TRACES]), key=lambda x: len(x)) + redo_traces = sorted(list(playout_dictio[node.children[1]][TRACES]), key=lambda x: len(x)) + min_do_trace = min(len(x) for x in do_traces) if do_traces else 0 + to_visit = list((x, 0, 0) for x in do_traces) + closed = set() + diff1 = max_trace_length - mr + diff2 = max_trace_length - min_do_trace - mr + diff3 = min_trace_length - mar + while to_visit: + curr = to_visit.pop(0) + curr_trace = curr[0] + position = curr[1] + num_loops = curr[2] + if position == 0: + if curr_trace in closed: + continue + closed.add(curr_trace) + + if diff3 <= len(curr_trace) <= diff1: + final_traces.add(curr_trace) + if len(final_traces) > max_limit_num_traces: + break + + for y in redo_traces: + new = curr_trace + y + if len(new) <= diff2 and num_loops + 1 <= max_loop_occ: + to_visit.append((new, 1, num_loops + 1)) + else: + break + + elif position == 1: + for y in do_traces: + new = curr_trace + y + if len(new) <= diff1: + to_visit.append((new, 0, num_loops)) + else: + break + playout_dictio[node] = {TRACES: final_traces} + + +def get_playout(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, max_rem_dict, + max_limit_num_traces): + """ + Performs a playout of an ode of the process tree, given the type + """ + if len(node.children) == 0: + get_playout_leaf(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, + max_rem_dict, max_limit_num_traces) + elif node.operator == Operator.XOR: + get_playout_xor(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, + max_rem_dict, max_limit_num_traces) + elif node.operator == Operator.PARALLEL: + get_playout_parallel(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, + max_rem_dict, max_limit_num_traces) + elif node.operator == Operator.SEQUENCE: + get_playout_sequence(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, + max_rem_dict, max_limit_num_traces) + elif node.operator == Operator.LOOP: + get_playout_loop(node, playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, + max_rem_dict, max_limit_num_traces) + + +def apply(tree: ProcessTree, parameters : Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Performs an extensive playout of the process tree + + Parameters + ------------- + tree + Process tree + parameters + Possible parameters, including: + - Parameters.MIN_TRACE_LENGTH => minimum length of a trace (default: 1) + - Parameters.MAX_TRACE_LENGTH => maximum length of a trace (default: min_allowed_trace_length) + - Parameters.MAX_LOOP_OCC => maximum number of occurrences for a loop (default: MAX_TRACE_LENGTH) + - Parameters.ACTIVITY_KEY => activity key + - Parameters.MAX_LIMIT_NUM_TRACES => maximum number to the limit of traces; the playout shall stop when the number is reached (default: 100000) + Returns + ------------- + log + Event log + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + # to save memory in the returned log, allocate each activity once. to know the list of activities of the + # process tree, use the footprints module + fp_tree = fp_discovery.apply(tree, parameters=parameters) + activities = fp_tree["activities"] + activities = {act: Event({activity_key: act}) for act in activities} + + min_allowed_trace_length = bottomup_discovery.get_min_trace_length(tree, parameters=parameters) + min_trace_length = exec_utils.get_param_value(Parameters.MIN_TRACE_LENGTH, parameters, 1) + max_trace_length = exec_utils.get_param_value(Parameters.MAX_TRACE_LENGTH, parameters, min_allowed_trace_length) + max_loop_occ = exec_utils.get_param_value(Parameters.MAX_LOOP_OCC, parameters, int(max_trace_length / 2)) + max_limit_num_traces = exec_utils.get_param_value(Parameters.MAX_LIMIT_NUM_TRACES, parameters, 100000) + return_set_strings = exec_utils.get_param_value(Parameters.RETURN_SET_STRINGS, parameters, False) + + bottomup = bottomup_discovery.get_bottomup_nodes(tree, parameters=parameters) + min_rem_dict = bottomup_discovery.get_min_rem_dict(tree, parameters=parameters) + max_rem_dict = bottomup_discovery.get_max_rem_dict(tree, parameters=parameters) + + playout_dictio = {} + for i in range(len(bottomup)): + get_playout(bottomup[i], playout_dictio, min_trace_length, max_trace_length, max_loop_occ, min_rem_dict, + max_rem_dict, max_limit_num_traces) + tree_playout_traces = playout_dictio[tree][TRACES] + + if return_set_strings: + return tree_playout_traces + + log = EventLog() + for tr0 in tree_playout_traces: + trace = Trace() + for act in tr0: + trace.append(activities[act]) + log.append(trace) + + return log diff --git a/pm4py/pm4py/algo/simulation/playout/process_tree/variants/topbottom.py b/pm4py/pm4py/algo/simulation/playout/process_tree/variants/topbottom.py new file mode 100644 index 0000000000000000000000000000000000000000..8aeabdfbfd081f1f55a6b8746c4e6924b3b6d344 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/playout/process_tree/variants/topbottom.py @@ -0,0 +1,171 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree.obj import Operator +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.log.obj import Trace, Event +from enum import Enum +import random +import time + +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.process_tree.obj import ProcessTree + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + NO_TRACES = "num_traces" + + +def apply(tree: ProcessTree, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Gets the top-bottom playout of a process tree + + Parameters + --------------- + tree + Process tree + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY: activity key + - Parameters.NO_TRACES: number of traces that should be returned + + Returns + --------------- + log + Event log + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + no_traces = exec_utils.get_param_value(Parameters.NO_TRACES, parameters, 1000) + + execution_sequences = get_num_ex_sequences(tree, no_traces) + + log = EventLog() + for seq in execution_sequences: + trace = Trace() + for el in seq: + if el.label is not None: + event = Event({activity_key: el.label}) + trace.append(event) + log.append(trace) + + return log + + +def get_ex_seq_in_time(tree, ex_time): + """ + Gets the maximum number of execution sequences, doing the playout, + in the given amount of time + + Parameters + ---------------- + tree + Process tree + ex_time + Maximum execution time + + Returns + ---------------- + ex_sec + Execution sequences + """ + ex_sec = [] + aa = time.time() + while time.time() - aa < ex_time: + ex_sec.append(tuple(get_ex_seq(tree))) + return ex_sec + + +def get_num_ex_sequences(tree, num): + """ + Gets the specified amount of execution sequences + + Parameters + --------------- + tree + Process tree + num + Number of execution sequences + + Returns + --------------- + ex_sec + Execution sequences + """ + ret = [] + for i in range(num): + ret.append(tuple(get_ex_seq(tree))) + return ret + + +def get_ex_seq(tree): + """ + Gets a trace from a process tree (top-bottom) + + Parameters + -------------- + tree + Process tree + + Returns + ------------- + ex_seq + Execution sequence + """ + if tree.operator is None: + return [tree] + elif tree.operator is Operator.XOR: + child = random.choice(tree.children) + return get_ex_seq(child) + elif tree.operator is Operator.SEQUENCE: + ret = [] + for child in tree.children: + ret = ret + get_ex_seq(child) + return ret + elif tree.operator is Operator.INTERLEAVING: + random.shuffle(tree.children) + ret = [] + for child in tree.children: + ret = ret + get_ex_seq(child) + return ret + elif tree.operator is Operator.LOOP: + ret = [] + cont = True + while cont: + cont = False + ret = ret + get_ex_seq(tree.children[0]) + r = random.random() + if r <= 0.5: + ret = ret + get_ex_seq(tree.children[1]) + cont = True + return ret + elif tree.operator is Operator.PARALLEL: + ret = [] + children_traces = [] + list_choices = [] + for index, child in enumerate(tree.children): + trace = get_ex_seq(child) + children_traces.append(trace) + list_choices += [index] * len(trace) + random.shuffle(list_choices) + for c in list_choices: + act = children_traces[c].pop(0) + ret.append(act) + return ret diff --git a/pm4py/pm4py/algo/simulation/tree_generator/__init__.py b/pm4py/pm4py/algo/simulation/tree_generator/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e5c8f850e2918ff4ee3ddf57c838dfaa96a26e34 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/tree_generator/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.simulation.tree_generator import algorithm, variants diff --git a/pm4py/pm4py/algo/simulation/tree_generator/algorithm.py b/pm4py/pm4py/algo/simulation/tree_generator/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..f2cee4e45bea5586ea56c55bc78c9283b888ba5d --- /dev/null +++ b/pm4py/pm4py/algo/simulation/tree_generator/algorithm.py @@ -0,0 +1,55 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.simulation.tree_generator.variants import basic, ptandloggenerator +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.process_tree.obj import ProcessTree +from typing import Optional, Dict, Any + + +class Variants(Enum): + BASIC = basic + PTANDLOGGENERATOR = ptandloggenerator + + +BASIC = Variants.BASIC +PTANDLOGGENERATOR = Variants.PTANDLOGGENERATOR +DEFAULT_VARIANT = Variants.PTANDLOGGENERATOR + +VERSIONS = {Variants.BASIC, Variants.PTANDLOGGENERATOR} + + +def apply(variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> ProcessTree: + """ + Generate a process tree + + Parameters + ------------ + variant + Variant of the algorithm. Admitted values: + - Variants.BASIC + - Variants.PTANDLOGGENERATOR + parameters + Specific parameters of the algorithm + + Returns + ------------ + tree + Process tree + """ + return exec_utils.get_variant(variant).apply(parameters=parameters) diff --git a/pm4py/pm4py/algo/simulation/tree_generator/variants/__init__.py b/pm4py/pm4py/algo/simulation/tree_generator/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9d30f4725ea32a30669911f419695e4a3d78e0b6 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/tree_generator/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.simulation.tree_generator.variants import basic, ptandloggenerator diff --git a/pm4py/pm4py/algo/simulation/tree_generator/variants/basic.py b/pm4py/pm4py/algo/simulation/tree_generator/variants/basic.py new file mode 100644 index 0000000000000000000000000000000000000000..7125be741c4daa1b5f935da8a68c3aac4388da6d --- /dev/null +++ b/pm4py/pm4py/algo/simulation/tree_generator/variants/basic.py @@ -0,0 +1,159 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import random +import string + +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.process_tree.obj import Operator +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union + + +class Parameters(Enum): + REC_DEPTH = "rec_depth" + MIN_REC_DEPTH = "min_rec_depth" + MAX_REC_DEPTH = "max_rec_depth" + PROB_LEAF = "prob_leaf" + + +def generate_random_string(N): + """ + Generate a random string + + Parameters + ------------- + N + length of the string + + Returns + ------------- + random_string + Random string + """ + return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N)) + + +def get_random_operator(): + """ + Gets a random operator + + Returns + ------------ + operator + Operator + """ + r = random.random() + if r < 0.25: + return Operator.SEQUENCE + elif r < 0.5: + return Operator.LOOP + elif r < 0.75: + return Operator.XOR + else: + return Operator.PARALLEL + + +def apply(parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> ProcessTree: + """ + Generate a process tree + + Parameters + ------------ + parameters + Paramters of the algorithm, including: + Parameters.REC_DEPTH -> current recursion depth + Parameters.MIN_REC_DEPTH -> minimum recursion depth + Parameters.MAX_REC_DEPTH -> maximum recursion depth + Parameters.PROB_LEAF -> Probability to get a leaf + + Returns + ------------ + tree + Process tree + """ + if parameters is None: + parameters = {} + + rec_depth = exec_utils.get_param_value(Parameters.REC_DEPTH, parameters, 0) + min_rec_depth = exec_utils.get_param_value(Parameters.MIN_REC_DEPTH, parameters, 1) + max_rec_depth = exec_utils.get_param_value(Parameters.MAX_REC_DEPTH, parameters, 3) + prob_leaf = exec_utils.get_param_value(Parameters.PROB_LEAF, parameters, 0.25) + + next_parameters = {Parameters.REC_DEPTH: rec_depth + 1, Parameters.MIN_REC_DEPTH: min_rec_depth, + Parameters.MAX_REC_DEPTH: max_rec_depth, + Parameters.PROB_LEAF: prob_leaf} + + is_leaf = False + + if min_rec_depth <= rec_depth <= max_rec_depth: + r = random.random() + if r < prob_leaf: + is_leaf = True + elif rec_depth > max_rec_depth: + is_leaf = True + + if is_leaf: + current_tree = ProcessTree(label=generate_random_string(6)) + elif rec_depth == 0: + current_tree = ProcessTree(operator=Operator.SEQUENCE) + start = ProcessTree(label=generate_random_string(6), parent=current_tree) + current_tree.children.append(start) + node = apply(parameters=next_parameters) + node.parent = current_tree + current_tree.children.append(node) + end = ProcessTree(label=generate_random_string(6)) + end.parent = current_tree + current_tree.children.append(end) + else: + o = get_random_operator() + + current_tree = ProcessTree(operator=o) + if o == Operator.SEQUENCE: + n_min = 2 + n_max = 6 + selected_n = random.randrange(n_min, n_max) + for i in range(selected_n): + child = apply(parameters=next_parameters) + child.parent = current_tree + current_tree.children.append(child) + elif o == Operator.LOOP: + do = apply(parameters=next_parameters) + do.parent = current_tree + current_tree.children.append(do) + redo = apply(parameters=next_parameters) + redo.parent = current_tree + current_tree.children.append(redo) + exit = ProcessTree(parent=current_tree) + current_tree.children.append(exit) + elif o == Operator.XOR: + n_min = 2 + n_max = 5 + selected_n = random.randrange(n_min, n_max) + for i in range(selected_n): + child = apply(parameters=next_parameters) + child.parent = current_tree + current_tree.children.append(child) + elif o == Operator.PARALLEL: + n_min = 2 + n_max = 4 + selected_n = random.randrange(n_min, n_max) + for i in range(selected_n): + child = apply(parameters=next_parameters) + child.parent = current_tree + current_tree.children.append(child) + return current_tree diff --git a/pm4py/pm4py/algo/simulation/tree_generator/variants/ptandloggenerator.py b/pm4py/pm4py/algo/simulation/tree_generator/variants/ptandloggenerator.py new file mode 100644 index 0000000000000000000000000000000000000000..405615bc51b1a53a67c4340b8985de7e2b7534c6 --- /dev/null +++ b/pm4py/pm4py/algo/simulation/tree_generator/variants/ptandloggenerator.py @@ -0,0 +1,300 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree import obj +from pm4py.objects.process_tree import obj as pt_operator +from scipy.stats import triang as triangular +import string +from enum import Enum +from itertools import accumulate as _accumulate, repeat as _repeat +from bisect import bisect as _bisect +import random +from typing import Optional, Dict, Any, Union +from string import ascii_lowercase +import itertools + + +def choices(population, weights=None, *, cum_weights=None, k=1): + """Return a k sized list of population elements chosen with replacement. + If the relative weights or cumulative weights are not specified, + the selections are made with equal probability. + """ + n = len(population) + if cum_weights is None: + if weights is None: + _int = int + n += 0.0 # convert to float for a small speed improvement + return [population[_int(random.random() * n)] for i in _repeat(None, k)] + cum_weights = list(_accumulate(weights)) + elif weights is not None: + raise TypeError('Cannot specify both weights and cumulative weights') + if len(cum_weights) != n: + raise ValueError('The number of weights does not match the population') + bisect = _bisect + total = cum_weights[-1] + 0.0 # convert to float + hi = n - 1 + return [population[bisect(cum_weights, random.random() * total, 0, hi)] + for i in _repeat(None, k)] + + +class Parameters(Enum): + SEQUENCE = "sequence" + CHOICE = "choice" + PARALLEL = "parallel" + LOOP = "loop" + OR = "or" + MODE = "mode" + MIN = "min" + MAX = "max" + SILENT = "silent" + DUPLICATE = "duplicate" + NO_MODELS = "no_models" + + +def apply(parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> obj.ProcessTree: + """ + Generate a process tree using the PTAndLogGenerator approach + (see the paper PTandLogGenerator: A Generator for Artificial Event Data) + + Parameters + -------------- + parameters + Parameters of the algorithm, according to the paper: + - Parameters.MODE: most frequent number of visible activities + - Parameters.MIN: minimum number of visible activities + - Parameters.MAX: maximum number of visible activities + - Parameters.SEQUENCE: probability to add a sequence operator to tree + - Parameters.CHOICE: probability to add a choice operator to tree + - Parameters.PARALLEL: probability to add a parallel operator to tree + - Parameters.LOOP: probability to add a loop operator to tree + - Parameters.OR: probability to add an or operator to tree + - Parameters.SILENT: probability to add silent activity to a choice or loop operator + - Parameters.DUPLICATE: probability to duplicate an activity label + - Parameters.NO_MODELS: number of trees to generate from model population + """ + if parameters is None: + parameters = {} + + if not "mode" in parameters: + parameters["mode"] = 20 + if not "min" in parameters: + parameters["min"] = 10 + if not "max" in parameters: + parameters["max"] = 30 + if not "sequence" in parameters: + parameters["sequence"] = 0.25 + if not "choice" in parameters: + parameters["choice"] = 0.25 + if not "parallel" in parameters: + parameters["parallel"] = 0.25 + if not "loop" in parameters: + parameters["loop"] = 0.25 + if not "or" in parameters: + parameters["or"] = 0.0 + if not "silent" in parameters: + parameters["silent"] = 0.2 + if not "duplicate" in parameters: + parameters["duplicate"] = 0 + if not "no_models" in parameters: + parameters["no_models"] = 1 + + no_models = parameters["no_models"] + + if no_models == 1: + return GeneratedTree(parameters).generate() + else: + # if the generation of an higher number of models is required, + # proceed to the generation of these and return a list of + # process trees. + ret = [] + for i in range(no_models): + ret.append(GeneratedTree(parameters).generate()) + return ret + + +def assign_operator(operator): + if operator == "choice": + return pt_operator.Operator.XOR + elif operator == "sequence": + return pt_operator.Operator.SEQUENCE + elif operator == "parallel": + return pt_operator.Operator.PARALLEL + elif operator == "or": + return pt_operator.Operator.OR + elif operator == "loop": + return pt_operator.Operator.LOOP + else: + return None + + +class GeneratedTree(object): + # are later used as labels + alphabet = string.ascii_lowercase + + def calculate_activity_distribution(self, mode, min, max): + """ + Here, the triangular function is used, since the parameters for this function are given in the paramterfile. + However, this approach can be applied on other distribution functions as well. + :param mode: Mode of the distribution + :param min: Smallest number + :param max: Highest number + :return: Distribution object + """ + # manage the case where min = mode = max + c = (mode - min + 10**-12) / (max - min + 10**-6) + ret = triangular(c, loc=min, scale=max - min) + return ret + + def draw_random_number_from_distribution(self): + return self.activity_distribution.rvs(1)[0] + + def select_operator(self): + # add root operator, if probabilities are high enough + # ordering of operator computation is sequence, choice, parallel, loop, or + operator = choices(["sequence", "choice", "parallel", "loop", "or"], + [self.parameters["sequence"], self.parameters["choice"], self.parameters["parallel"], + self.parameters["loop"], self.parameters["or"]]) + return operator[0] + + def get_next_activity(self): + result = self.iter.__next__() + return result + + + def add_duplicates(self): + """ + Replaces some leaves to add duplicated labels. Depends on parameter. + :return: + """ + duplication_allowed = False + leaves = self.tree._get_leaves() + for leaf in leaves: + if leaf._parent != self.tree._get_root(): + duplication_allowed = True + break + # if there is at least a depth of two + if duplication_allowed: + # list that contains the leaves with a label unequal to tau + leaves_with_label = [] + for leaf in leaves: + if leaf.label is not None: + leaves_with_label.append(leaf) + # generate random list of duplicates + duplicates = [] + for leaf in leaves: + if random.random() < self.parameters["duplicate"]: + duplicates.append(leaf) + if len(duplicates) > 0: + # select potential leaves to replace them by duplicates + possible_replacements = [] + for leaf in leaves: + if leaf not in duplicates: + possible_replacements.append(leaf) + for leaf in duplicates: + i = 0 + siblings = [] + # determine sibling nodes (same parent) + p = leaf._parent + for child in p._children: + if child != leaf: + siblings.append(child) + # TODO Skaling? Original: 30times, my idea : percentage of duplicates * len(leaves) + while i < self.parameters["duplicate"] * len(leaves): + replacement = random.choice(possible_replacements) + if replacement not in siblings: + replacement._label = leaf._label + break + + def add_node(self): + leaves = self.tree._get_leaves() + if self.tree.operator is None: + leaves.append(self.tree) + visible_leaves = [x for x in leaves if x.label is not None] + operator = self.select_operator() + op_map = {"parallel": obj.Operator.PARALLEL, "sequence": obj.Operator.SEQUENCE, "choice": obj.Operator.XOR, "loop": obj.Operator.LOOP, "or": obj.Operator.OR} + mapped_operator = op_map[operator] + order = random.randrange(0, 2) + chosen_leaf = random.choice(leaves) + added_count = 0 + label1 = chosen_leaf.label + if chosen_leaf.label is None: + added_count = added_count + 1 + label1 = self.get_next_activity() + label2 = None + if chosen_leaf.parent is None: + self.tree = obj.ProcessTree(operator=mapped_operator) + chosen_leaf = self.tree + else: + parent = chosen_leaf.parent + del parent.children[parent.children.index(chosen_leaf)] + chosen_leaf = obj.ProcessTree(operator=mapped_operator, parent=parent) + parent.children.append(chosen_leaf) + r = random.random() + if self.total_activities - len(visible_leaves) > added_count and not r < self.parameters["silent"]: + label2 = self.get_next_activity() + node1 = obj.ProcessTree(label=label1, parent=chosen_leaf) + node2 = obj.ProcessTree(label=label2, parent=chosen_leaf) + if order == 0: + chosen_leaf.children.append(node1) + chosen_leaf.children.append(node2) + elif order == 1: + chosen_leaf.children.append(node2) + chosen_leaf.children.append(node1) + + def iter_all_strings(self): + for size in itertools.count(1): + for s in itertools.product(ascii_lowercase, repeat=size): + yield "".join(s) + + def create_process_tree(self): + self.iter = self.iter_all_strings() + self.tree = obj.ProcessTree() + visible_leaves = [x for x in self.tree._get_leaves() if x.label is not None] + while len(visible_leaves) < self.total_activities: + self.add_node() + visible_leaves = [x for x in self.tree._get_leaves() if x.label is not None] + + def __init__(self, parameters): + self.parameters = {} + for param in parameters: + p = param if type(param) is str else param.value + self.parameters[p] = parameters[param] + # rescale probabilities of operators if the sum is not equal to one + if self.parameters["sequence"] + self.parameters["choice"] + self.parameters["parallel"] + self.parameters[ + "loop"] + self.parameters["or"] != 1: + sum_of_operators = self.parameters["sequence"] + self.parameters["choice"] + self.parameters["parallel"] + \ + self.parameters["loop"] + self.parameters["or"] + self.parameters["sequence"] = self.parameters["sequence"] / sum_of_operators + self.parameters["choice"] = self.parameters["choice"] / sum_of_operators + self.parameters["parallel"] = self.parameters["parallel"] / sum_of_operators + self.parameters["or"] = self.parameters["or"] / sum_of_operators + self.parameters["loop"] = self.parameters["loop"] / sum_of_operators + # First step: Compute acivity distribution + # Since mode, min and max are given, the triangle distribution is chosen + self.activity_distribution = self.calculate_activity_distribution(self.parameters["mode"], + self.parameters["min"], + self.parameters["max"]) + # Number of total activities represented in the tree. Also, tau is counted as an activity. + self.total_activities = int(round(self.draw_random_number_from_distribution())) + + + def generate(self): + # Create a process tree based on the given probabilities + self.create_process_tree() + # add duplicates + self.add_duplicates() + + return self.tree diff --git a/pm4py/pm4py/algo/transformation/__init__.py b/pm4py/pm4py/algo/transformation/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7d64a00432f671b09bc2c8919796abd956ace194 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation import log_to_trie, log_to_features, ocel diff --git a/pm4py/pm4py/algo/transformation/log_to_features/__init__.py b/pm4py/pm4py/algo/transformation/log_to_features/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9ac786c9c7a14e6f91e187c1dc2fe143dd7c4ca7 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_features/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.log_to_features import algorithm, variants diff --git a/pm4py/pm4py/algo/transformation/log_to_features/algorithm.py b/pm4py/pm4py/algo/transformation/log_to_features/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..d558bc28d59a7e9a732e7a93151f6894a8cf18e8 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_features/algorithm.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Any, Optional, Dict, Union, List, Tuple + +import pandas as pd + +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.util import exec_utils +from pm4py.algo.transformation.log_to_features.variants import event_based, trace_based, temporal + + +class Variants(Enum): + EVENT_BASED = event_based + TRACE_BASED = trace_based + TEMPORAL = temporal + + +def apply(log: Union[EventLog, pd.DataFrame, EventStream], variant: Any = Variants.TRACE_BASED, + parameters: Optional[Dict[Any, Any]] = None) -> Tuple[Any, List[str]]: + """ + Extracts the features from a log object + + Parameters + --------------- + log + Event log + variant + Variant of the feature extraction to use: + - Variants.EVENT_BASED => (default) extracts, for each trace, a list of numerical vectors containing for each + event the corresponding features + - Variants.TRACE_BASED => extracts for each trace a single numerical vector containing the features + of the trace + - Variants.TEMPORAL => extracts temporal features from the traditional event log + + Returns + --------------- + data + Data to provide for decision tree learning + feature_names + Names of the features, in order + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(log, parameters=parameters) diff --git a/pm4py/pm4py/algo/transformation/log_to_features/util/__init__.py b/pm4py/pm4py/algo/transformation/log_to_features/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2237b49857e21cb2d58bbf644e7b9fd775744fbc --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_features/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.log_to_features.util import locally_linear_embedding diff --git a/pm4py/pm4py/algo/transformation/log_to_features/util/locally_linear_embedding.py b/pm4py/pm4py/algo/transformation/log_to_features/util/locally_linear_embedding.py new file mode 100644 index 0000000000000000000000000000000000000000..c79108ce289d9b67018bb4c80d029eb01434dae0 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_features/util/locally_linear_embedding.py @@ -0,0 +1,109 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import math +from datetime import datetime +from enum import Enum +from typing import Optional, Dict, Any, Tuple, List + +import numpy as np +from pm4py.util import ml_utils + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.algo.transformation.log_to_features import algorithm as log_to_features +from pm4py.objects.log.util import sorting +from pm4py.util import constants, xes_constants +from pm4py.util import exec_utils, pandas_utils + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def smooth(y: np.ndarray, box_pts: int) -> np.ndarray: + """ + Smooths the points in y with a weighted average. + + Parameters + ---------------- + y + Points + box_pts + Size of the weighted average + + Returns + ---------------- + y_smooth + Smoothened y + """ + box = np.ones(box_pts) / box_pts + y_smooth = np.convolve(y, box, mode='same') + return y_smooth + + +def apply(log: EventLog, parameters: Optional[Dict[str, Any]] = None) -> Tuple[List[datetime], np.ndarray]: + """ + Analyse the evolution of the features over the time using a locally linear embedding. + + Parameters + ----------------- + log + Event log + parameters + Variant-specific parameters, including: + - Parameters.ACTIVITY_KEY => the activity key + - Parameters.TIMESTAMP_KEY => the timestamp key + - Parameters.CASE_ID_KEY => the case ID key + + Returns + ---------------- + x + Date attributes (starting points of the cases) + y + Deviation from the standard behavior (higher absolute values of y signal a higher deviation + from the standard behavior) + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + + if pandas_utils.check_is_pandas_dataframe(log): + # keep only the needed columns + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + log = log[[case_id_key, activity_key, timestamp_key]] + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + log = sorting.sort_timestamp(log, timestamp_key) + + x = [trace[0][timestamp_key] for trace in log] + data, feature_names = log_to_features.apply(log, parameters={"str_ev_attr": [activity_key], "str_evsucc_attr": [activity_key]}) + data = np.array([np.array(x) for x in data]) + + tsne = ml_utils.LocallyLinearEmbedding(n_components=1, eigen_solver='dense') + data = tsne.fit_transform(data) + data = np.ndarray.flatten(data) + + y = data + smooth_amount = 1 + math.floor(math.sqrt(len(y))) + y = smooth(y, smooth_amount) + + return x, y diff --git a/pm4py/pm4py/algo/transformation/log_to_features/variants/__init__.py b/pm4py/pm4py/algo/transformation/log_to_features/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d96ef7ee70fd8f118b15a0ca48056ad1d59595ce --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_features/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.log_to_features.variants import event_based, trace_based diff --git a/pm4py/pm4py/algo/transformation/log_to_features/variants/event_based.py b/pm4py/pm4py/algo/transformation/log_to_features/variants/event_based.py new file mode 100644 index 0000000000000000000000000000000000000000..1b498521d401478a171f17fc51078336d5fc0548 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_features/variants/event_based.py @@ -0,0 +1,167 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from enum import Enum +from typing import Optional, List, Dict, Any, Tuple, Union + +import numpy as np + +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils +from pm4py.objects.conversion.log import converter + + +class Parameters(Enum): + STR_EVENT_ATTRIBUTES = "str_ev_attr" + NUM_EVENT_ATTRIBUTES = "num_ev_attr" + FEATURE_NAMES = "feature_names" + MIN_NUM_DIFF_STR_VALUES = "min_num_diff_str_values" + MAX_NUM_DIFF_STR_VALUES = "max_num_diff_str_values" + + +def extract_all_ev_features_names_from_log(log: EventLog, str_ev_attr: List[str], num_ev_attr: List[str], + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[str]: + """ + Extracts the feature names from an event log. + + Parameters + --------------- + log + Event log + str_ev_attr + (if provided) list of string event attributes to consider in extracting the feature names + num_ev_attr + (if provided) list of integer event attributes to consider in extracting the feature names + parameters + Parameters, including: + - MIN_NUM_DIFF_STR_VALUES => minimum number of distinct values to include an attribute as feature(s) + - MAX_NUM_DIFF_STR_VALUES => maximum number of distinct values to include an attribute as feature(s) + + Returns + ---------------- + feature_names + List of feature names + """ + if parameters is None: + parameters = {} + + min_num_diff_str_values = exec_utils.get_param_value(Parameters.MIN_NUM_DIFF_STR_VALUES, parameters, 2) + max_num_diff_str_values = exec_utils.get_param_value(Parameters.MAX_NUM_DIFF_STR_VALUES, parameters, 500) + + str_features = {} + num_features = Counter() + count_events = 0 + for trace in log: + for event in trace: + count_events += 1 + for attr_name in event: + attr_value = event[attr_name] + if isinstance(attr_value, str) and (str_ev_attr is None or attr_name in str_ev_attr): + if attr_name not in str_features: + str_features[attr_name] = set() + str_features[attr_name].add("event:" + attr_name + "@" + attr_value) + elif isinstance(attr_value, int) or isinstance(attr_value, float): + if num_ev_attr is None or attr_name in num_ev_attr: + num_features["event:" + attr_name] += 1 + num_features = list({x for x, y in num_features.items() if y == count_events}) + str_features = list({z for x, y in str_features.items() for z in y if + min_num_diff_str_values <= len(y) <= max_num_diff_str_values}) + + feature_names = str_features + num_features + feature_names = sorted(feature_names) + + return feature_names + + +def extract_features(log: EventLog, feature_names: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[ + Any, List[str]]: + """ + Extracts the matrix of the features from an event log + + Parameters + --------------- + log + Event log + feature_names + Features to consider (in the given order) + + Returns + ------------- + data + Data to provide for decision tree learning + feature_names + Names of the features, in order + """ + v1 = max(len(trace) for trace in log) + v2 = len(feature_names) + data = np.zeros((len(log), v1, v2), dtype=np.float32) + + for i1, trace in enumerate(log): + for i2, event in enumerate(trace): + str_features = set() + num_features = {} + for attr_name in event: + attr_value = event[attr_name] + if isinstance(attr_value, str): + str_features.add("event:" + attr_name + "@" + attr_value) + elif isinstance(attr_value, int) or isinstance(attr_value, float): + num_features["event:" + attr_name] = float(attr_value) + for attr in str_features: + if attr in feature_names: + data[i1, i2, feature_names.index(attr)] = 1.0 + for attr in num_features: + if attr in feature_names: + data[i1, i2, feature_names.index(attr)] = float(num_features[attr]) + + return data, feature_names + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Extracts all the features for the traces of an event log (each trace becomes a vector of vectors, where each + event has its own vector) + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm, including: + - STR_EVENT_ATTRIBUTES => string event attributes to consider in the features extraction + - NUM_EVENT_ATTRIBUTES => numeric event attributes to consider in the features extraction + - FEATURE_NAMES => features to consider (in the given order) + + Returns + ------------- + data + Data to provide for decision tree learning + feature_names + Names of the features, in order + """ + if parameters is None: + parameters = {} + + str_ev_attr = exec_utils.get_param_value(Parameters.STR_EVENT_ATTRIBUTES, parameters, None) + num_ev_attr = exec_utils.get_param_value(Parameters.NUM_EVENT_ATTRIBUTES, parameters, None) + feature_names = exec_utils.get_param_value(Parameters.FEATURE_NAMES, parameters, None) + + log = converter.apply(log, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + + if feature_names is None: + feature_names = extract_all_ev_features_names_from_log(log, str_ev_attr, num_ev_attr, parameters=parameters) + + return extract_features(log, feature_names, parameters=parameters) diff --git a/pm4py/pm4py/algo/transformation/log_to_features/variants/temporal.py b/pm4py/pm4py/algo/transformation/log_to_features/variants/temporal.py new file mode 100644 index 0000000000000000000000000000000000000000..98269e176f815ce2b675ddc2f18aff461071aed8 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_features/variants/temporal.py @@ -0,0 +1,119 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Union, Optional, Dict, Any +from pm4py.objects.conversion.log import converter as log_converter +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils + + +class Parameters(Enum): + ARRIVAL_RATE = "arrival_rate" + FINISH_RATE = "finish_rate" + CASE_ID_COLUMN = constants.PARAMETER_CONSTANT_CASEID_KEY + START_TIMESTAMP_COLUMN = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_COLUMN = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + RESOURCE_COLUMN = constants.PARAMETER_CONSTANT_RESOURCE_KEY + ACTIVITY_COLUMN = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + GROUPER_FREQ = "grouper_freq" + SERVICE_TIME = "service_time" + WAITING_TIME = "waiting_time" + SOJOURN_TIME = "sojourn_time" + DIFF_START_END = "diff_start_end" + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Extracts temporal features with the provided granularity from the Pandas dataframe. + + Implements the approach described in the paper: + Pourbafrani, Mahsa, Sebastiaan J. van Zelst, and Wil MP van der Aalst. "Supporting automatic system dynamics model generation for simulation in the context of process mining." International Conference on Business Information Systems. Springer, Cham, 2020. + + Parameters + --------------- + log + Event log / Event stream / Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.GROUPER_FREQ => the time interval to be used for the grouping + - Parameters.ARRIVAL_RATE => column of the dataframe which is going to host the arrival rate + - Parameters.FINISH_RATE => column of the dataframe which is going to host the finishing rate + - Parameters.SERVICE_TIME => column of the dataframe which is going to host the service time + - Parameters.WAITING_TIME => column of the dataframe which is going to host the waiting time + - Parameters.SOJOURN_TIME => column of the dataframe which is going to host the sojourn time + - Parameters.CASE_ID_COLUMN => case ID column in the dataframe (default: case:concept:name) + - Parameters.ACTIVITY_COLUMN => activity column in the dataframe (default: concept:name) + - Parameters.TIMESTAMP_COLUMN => timestamp column in the dataframe (default: time:timestamp) + - Parameters.RESOURCE_COLUMN => resource column in the dataframe (default: org:resource) + - Parameters.START_TIMESTAMP_COLUMN => start timestamp column in the dataframe (if not provided, the timestamp column is used) + + Returns + ---------------- + features_df + Dataframe with temporal features + """ + if parameters is None: + parameters = {} + + grouper_freq = exec_utils.get_param_value(Parameters.GROUPER_FREQ, parameters, "W") + timestamp_column = exec_utils.get_param_value(Parameters.TIMESTAMP_COLUMN, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_column = exec_utils.get_param_value(Parameters.START_TIMESTAMP_COLUMN, parameters, None) + if start_timestamp_column is None: + start_timestamp_column = timestamp_column + case_id_column = exec_utils.get_param_value(Parameters.CASE_ID_COLUMN, parameters, constants.CASE_CONCEPT_NAME) + diff_start_end = exec_utils.get_param_value(Parameters.DIFF_START_END, parameters, "@@diff_start_end") + arrival_rate = exec_utils.get_param_value(Parameters.ARRIVAL_RATE, parameters, "@@arrival_rate") + finish_rate = exec_utils.get_param_value(Parameters.FINISH_RATE, parameters, "@@finish_rate") + service_time = exec_utils.get_param_value(Parameters.SERVICE_TIME, parameters, "@@service_time") + waiting_time = exec_utils.get_param_value(Parameters.WAITING_TIME, parameters, "@@waiting_time") + sojourn_time = exec_utils.get_param_value(Parameters.SOJOURN_TIME, parameters, "@@sojourn_time") + resource_column = exec_utils.get_param_value(Parameters.RESOURCE_COLUMN, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + activity_column = exec_utils.get_param_value(Parameters.ACTIVITY_COLUMN, parameters, xes_constants.DEFAULT_NAME_KEY) + + log = log_converter.apply(log, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + log = pandas_utils.insert_case_arrival_finish_rate(log, case_id_column=case_id_column, timestamp_column=timestamp_column, arrival_rate_column=arrival_rate, finish_rate_column=finish_rate) + log = pandas_utils.insert_case_service_waiting_time(log, case_id_column=case_id_column, timestamp_column=timestamp_column, diff_start_end_column=diff_start_end, service_time_column=service_time, sojourn_time_column=sojourn_time, waiting_time_column=waiting_time) + + grouped_log = log.groupby(pandas_utils.get_grouper(key=start_timestamp_column, freq=grouper_freq)) + + final_values = [] + + for gkey, gval in grouped_log: + dct = {} + dct["timestamp"] = gkey + + gval_first = gval.groupby(case_id_column).first() + + dct["unique_resources"] = gval[resource_column].nunique() + dct["unique_cases"] = gval[case_id_column].nunique() + dct["unique_activities"] = gval[activity_column].nunique() + dct["num_events"] = len(gval) + + dct["average_arrival_rate"] = gval_first[arrival_rate].mean() + dct["average_finish_rate"] = gval_first[finish_rate].mean() + + dct["average_waiting_time"] = gval_first[waiting_time].mean() + dct["average_sojourn_time"] = gval_first[sojourn_time].mean() + dct["average_service_time"] = gval_first[service_time].mean() + + final_values.append(dct) + + dataframe = pandas_utils.instantiate_dataframe(final_values) + dataframe = dataframe.fillna(0) + return dataframe diff --git a/pm4py/pm4py/algo/transformation/log_to_features/variants/trace_based.py b/pm4py/pm4py/algo/transformation/log_to_features/variants/trace_based.py new file mode 100644 index 0000000000000000000000000000000000000000..17bc89bf1d2327cb04017fa29f26cf0684d6a766 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_features/variants/trace_based.py @@ -0,0 +1,1265 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple, List, Set + +import pandas as pd + +from pm4py.objects.conversion.log import converter +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.objects.log.util import dataframe_utils +from pm4py.util import constants, pandas_utils +from pm4py.util import exec_utils +from pm4py.util import xes_constants as xes +from pm4py.util import xes_constants + + +class Parameters(Enum): + ENABLE_ACTIVITY_DEF_REPRESENTATION = "enable_activity_def_representation" + ENABLE_SUCC_DEF_REPRESENTATION = "enable_succ_def_representation" + STR_TRACE_ATTRIBUTES = "str_tr_attr" + STR_EVENT_ATTRIBUTES = "str_ev_attr" + NUM_TRACE_ATTRIBUTES = "num_tr_attr" + NUM_EVENT_ATTRIBUTES = "num_ev_attr" + STR_EVSUCC_ATTRIBUTES = "str_evsucc_attr" + FEATURE_NAMES = "feature_names" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + RESOURCE_KEY = constants.PARAMETER_CONSTANT_RESOURCE_KEY + EPSILON = "epsilon" + DEFAULT_NOT_PRESENT = "default_not_present" + ENABLE_ALL_EXTRA_FEATURES = "enable_all_extra_features" + ENABLE_CASE_DURATION = "enable_case_duration" + ADD_CASE_IDENTIFIER_COLUMN = "add_case_identifier_column" + ENABLE_TIMES_FROM_FIRST_OCCURRENCE = "enable_times_from_first_occurrence" + ENABLE_TIMES_FROM_LAST_OCCURRENCE = "enable_times_from_last_occurrence" + ENABLE_DIRECT_PATHS_TIMES_LAST_OCC = "enable_direct_paths_times_last_occ" + ENABLE_INDIRECT_PATHS_TIMES_LAST_OCC = "enable_indirect_paths_times_last_occ" + ENABLE_WORK_IN_PROGRESS = "enable_work_in_progress" + ENABLE_RESOURCE_WORKLOAD = "enable_resource_workload" + ENABLE_FIRST_LAST_ACTIVITY_INDEX = "enable_first_last_activity_index" + ENABLE_MAX_CONCURRENT_EVENTS = "enable_max_concurrent_events" + ENABLE_MAX_CONCURRENT_EVENTS_PER_ACTIVITY = "enable_max_concurrent_events_per_activity" + CASE_ATTRIBUTE_PREFIX = constants.CASE_ATTRIBUTE_PREFIX + + +def max_concurrent_events(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Counts for every trace the maximum number of events (of any activity) that happen concurrently + (e.g., their time intervals [st1, ct1] and [st2, ct2] have non-empty intersection). + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Numeric value of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + + data = [] + feature_names = ["@@max_concurrent_activities_general"] + + for trace in log: + max_conc = 0 + i = 0 + while i < len(trace)-1: + conc = 0 + ct = trace[i][timestamp_key].timestamp() + j = i + 1 + while j < len(trace): + st = trace[j][start_timestamp_key].timestamp() + if st > ct: + break + conc = conc + 1 + j = j + 1 + if conc > max_conc: + max_conc = conc + i = i + 1 + data.append([float(max_conc)]) + + return data, feature_names + + +def max_concurrent_events_per_activity(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Counts for every trace and every activity the maximum number of events of the given activity that happen concurrently + (e.g., their time intervals [st1, ct1] and [st2, ct2] have non-empty intersection). + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Numeric value of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + + activities = list(set(y[activity_key] for x in log for y in x)) + + data = [] + feature_names = ["@@max_concurrent_activities_like_"+x for x in activities] + + for trace in log: + max_conc_act = {act: 0 for act in activities} + i = 0 + while i < len(trace)-1: + conc = 0 + act = trace[i][activity_key] + ct = trace[i][timestamp_key].timestamp() + j = i + 1 + while j < len(trace): + st = trace[j][start_timestamp_key].timestamp() + actj = trace[j][activity_key] + if st > ct: + break + if act == actj: + conc = conc + 1 + j = j + 1 + i = i + 1 + max_conc_act[act] = max(max_conc_act[act], conc) + arr = [] + for act in activities: + arr.append(float(max_conc_act[act])) + data.append(arr) + + return data, feature_names + + +def resource_workload(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Calculates for each case, and for each resource of the log, the workload of the resource during + the lead time of a case. Defaults if a resource is not contained in a case. + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Numeric value of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + from intervaltree.intervaltree import IntervalTree, Interval + + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + resource_key = exec_utils.get_param_value(Parameters.RESOURCE_KEY, parameters, xes_constants.DEFAULT_RESOURCE_KEY) + epsilon = exec_utils.get_param_value(Parameters.EPSILON, parameters, 0.000001) + default_not_present = exec_utils.get_param_value(Parameters.DEFAULT_NOT_PRESENT, parameters, 0) + + tree_dict = {} + for case in log: + if case: + resources = set(x[resource_key] for x in case if resource_key in x) + st = case[0][start_timestamp_key].timestamp() - epsilon + ct = case[-1][timestamp_key].timestamp() + epsilon + for res in resources: + if res not in tree_dict: + tree_dict[res] = IntervalTree() + tree_dict[res].add(Interval(st, ct)) + + resources_list = sorted(list(tree_dict)) + + data = [] + feature_names = ["resource_workload@@"+r for r in resources_list] + + for case in log: + data.append([]) + resources = set(x[resource_key] for x in case if resource_key in x) + st = case[0][start_timestamp_key].timestamp() - epsilon + ct = case[-1][timestamp_key].timestamp() + epsilon + for res in resources_list: + if res in resources: + data[-1].append(float(len(tree_dict[res][st:ct]))) + else: + data[-1].append(float(default_not_present)) + + return data, feature_names + + +def work_in_progress(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Calculates for each case, and for each resource of the log, the number of cases which are open during + the lead time of the case. + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Numeric value of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + from intervaltree.intervaltree import IntervalTree, Interval + + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + epsilon = exec_utils.get_param_value(Parameters.EPSILON, parameters, 0.000001) + default_not_present = exec_utils.get_param_value(Parameters.DEFAULT_NOT_PRESENT, parameters, 0) + + tree = IntervalTree() + for case in log: + if case: + st = case[0][start_timestamp_key].timestamp() - epsilon + ct = case[-1][timestamp_key].timestamp() + epsilon + tree.add(Interval(st, ct)) + + data = [] + feature_names = ["@@work_in_progress"] + + for case in log: + if case: + st = case[0][start_timestamp_key].timestamp() - epsilon + ct = case[-1][timestamp_key].timestamp() + epsilon + data.append([float(len(tree[st:ct]))]) + else: + data.append([float(default_not_present)]) + + return data, feature_names + + +def indirect_paths_times_last_occ(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Calculates for each case, and for each indirect path of the case, the difference between the start timestamp + of the later event and the completion timestamp of the first event. Defaults if a path is not present in a case. + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Numeric value of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + default_not_present = exec_utils.get_param_value(Parameters.DEFAULT_NOT_PRESENT, parameters, 0) + + all_paths = set() + for trace in log: + for i in range(len(trace)-1): + for j in range(i+2, len(trace)): + all_paths.add((trace[i][activity_key], trace[j][activity_key])) + all_paths = sorted(list(all_paths)) + + data = [] + feature_names = [] + for p in all_paths: + feature_names.append("indirectPathPerformanceLastOcc@@"+p[0]+"##"+p[1]) + + for trace in log: + data.append([]) + trace_paths_perf = {} + for i in range(len(trace)-1): + for j in range(i+2, len(trace)): + p = (trace[i][activity_key], trace[j][activity_key]) + tc = trace[i][timestamp_key].timestamp() + ts = trace[j][start_timestamp_key].timestamp() + if ts > tc: + trace_paths_perf[p] = ts - tc + for p in all_paths: + if p in trace_paths_perf: + data[-1].append(float(trace_paths_perf[p])) + else: + data[-1].append(float(default_not_present)) + + return data, feature_names + + +def direct_paths_times_last_occ(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Calculates for each case, and for each direct path of the case, the difference between the start timestamp + of the later event and the completion timestamp of the first event. Defaults if a path is not present in a case. + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Numeric value of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + default_not_present = exec_utils.get_param_value(Parameters.DEFAULT_NOT_PRESENT, parameters, 0) + + all_paths = set() + for trace in log: + for i in range(len(trace)-1): + all_paths.add((trace[i][activity_key], trace[i+1][activity_key])) + all_paths = sorted(list(all_paths)) + + data = [] + feature_names = [] + for p in all_paths: + feature_names.append("directPathPerformanceLastOcc@@"+p[0]+"##"+p[1]) + + for trace in log: + data.append([]) + trace_paths_perf = {} + for i in range(len(trace)-1): + p = (trace[i][activity_key], trace[i+1][activity_key]) + tc = trace[i][timestamp_key].timestamp() + ts = trace[i+1][start_timestamp_key].timestamp() + if ts > tc: + trace_paths_perf[p] = ts - tc + for p in all_paths: + if p in trace_paths_perf: + data[-1].append(float(trace_paths_perf[p])) + else: + data[-1].append(float(default_not_present)) + + return data, feature_names + + +def times_from_first_occurrence_activity_case(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Calculates for each case, and for each activity, the times from the start to the case, and to the end of the case, + from the first occurrence of the activity in the case. + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Numeric value of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + default_not_present = exec_utils.get_param_value(Parameters.DEFAULT_NOT_PRESENT, parameters, 0) + + activities_log = set() + for trace in log: + for event in trace: + activities_log.add(event[activity_key]) + activities_log = sorted(list(activities_log)) + + data = [] + feature_names = [] + for act in activities_log: + feature_names.append("startToFirstOcc@@"+act) + feature_names.append("firstOccToEnd@@"+act) + + for trace in log: + data.append([]) + activities_occ = {} + for i in range(len(trace)): + if not trace[i][activity_key] in activities_occ: + activities_occ[trace[i][activity_key]] = i + for act in activities_log: + if act in activities_occ: + ev = trace[activities_occ[act]] + this_ev_st = ev[start_timestamp_key].timestamp() + this_ev_ct = ev[timestamp_key].timestamp() + start_ev_ct = trace[0][timestamp_key].timestamp() + end_ev_st = trace[-1][start_timestamp_key].timestamp() + data[-1].append(float(this_ev_st - start_ev_ct)) + data[-1].append(float(end_ev_st - this_ev_ct)) + else: + data[-1].append(float(default_not_present)) + data[-1].append(float(default_not_present)) + + return data, feature_names + + +def times_from_last_occurrence_activity_case(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Calculates for each case, and for each activity, the times from the start to the case, and to the end of the case, + from the last occurrence of the activity in the case. + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Numeric value of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + default_not_present = exec_utils.get_param_value(Parameters.DEFAULT_NOT_PRESENT, parameters, 0) + + activities_log = set() + for trace in log: + for event in trace: + activities_log.add(event[activity_key]) + activities_log = sorted(list(activities_log)) + + data = [] + feature_names = [] + for act in activities_log: + feature_names.append("startToLastOcc@@"+act) + feature_names.append("lastOccToEnd@@"+act) + + for trace in log: + data.append([]) + activities_occ = {} + for i in range(len(trace)): + activities_occ[trace[i][activity_key]] = i + for act in activities_log: + if act in activities_occ: + ev = trace[activities_occ[act]] + this_ev_st = ev[start_timestamp_key].timestamp() + this_ev_ct = ev[timestamp_key].timestamp() + start_ev_ct = trace[0][timestamp_key].timestamp() + end_ev_st = trace[-1][start_timestamp_key].timestamp() + data[-1].append(float(this_ev_st - start_ev_ct)) + data[-1].append(float(end_ev_st - this_ev_ct)) + else: + data[-1].append(float(default_not_present)) + data[-1].append(float(default_not_present)) + + return data, feature_names + + +def first_last_activity_index_trace(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Consider as features the first and the last index of an activity inside a case + + Parameters + ------------------ + log + Event log + parameters + Parameters, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.DEFAULT_NOT_PRESENT => the replacement value for activities that are not present for the specific case + + Returns + ----------------- + data + Numeric value of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + default_not_present = exec_utils.get_param_value(Parameters.DEFAULT_NOT_PRESENT, parameters, -1) + + activities_log = set() + for trace in log: + for event in trace: + activities_log.add(event[activity_key]) + activities_log = sorted(list(activities_log)) + + data = [] + feature_names = [] + for act in activities_log: + feature_names.append("firstIndexAct@@"+act) + feature_names.append("lastIndexAct@@"+act) + for trace in log: + data.append([]) + + first_occ = {} + last_occ = {} + for index, event in enumerate(trace): + act = event[activity_key] + last_occ[act] = index + if act not in first_occ: + first_occ[act] = index + for act in activities_log: + if act not in first_occ: + data[-1].append(float(default_not_present)) + data[-1].append(float(default_not_present)) + else: + data[-1].append(float(first_occ[act])) + data[-1].append(float(last_occ[act])) + + return data, feature_names + + +def case_duration(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Calculates for each case, the case duration (and adds it as a feature) + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Numeric value of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + + feature_names = ["@@caseDuration"] + data = [] + for trace in log: + if trace: + data.append([float(trace[-1][timestamp_key].timestamp() - trace[0][start_timestamp_key].timestamp())]) + else: + data.append([0.0]) + + return data, feature_names + + +def get_string_trace_attribute_rep(trace: Trace, trace_attribute: str) -> str: + """ + Get a representation of the feature name associated to a string trace attribute value + + Parameters + ------------ + trace + Trace of the log + trace_attribute + Attribute of the trace to consider + + Returns + ------------ + rep + Representation of the feature name associated to a string trace attribute value + """ + if trace_attribute in trace.attributes: + return "trace:" + str(trace_attribute) + "@" + str(trace.attributes[trace_attribute]) + return "trace:" + str(trace_attribute) + "@UNDEFINED" + + +def get_all_string_trace_attribute_values(log: EventLog, trace_attribute: str) -> List[str]: + """ + Get all string trace attribute values representations for a log + + Parameters + ------------ + log + Trace log + trace_attribute + Attribute of the trace to consider + + Returns + ------------ + list + List containing for each trace a representation of the feature name associated to the attribute + """ + values = set() + for trace in log: + values.add(get_string_trace_attribute_rep(trace, trace_attribute)) + return list(sorted(values)) + + +def get_string_event_attribute_rep(event: Event, event_attribute: str) -> str: + """ + Get a representation of the feature name associated to a string event attribute value + + Parameters + ------------ + event + Single event of a trace + event_attribute + Event attribute to consider + + Returns + ------------ + rep + Representation of the feature name associated to a string event attribute value + """ + return "event:" + str(event_attribute) + "@" + str(event[event_attribute]) + + +def get_values_event_attribute_for_trace(trace: Trace, event_attribute: str) -> Set[str]: + """ + Get all the representations for the events of a trace associated to a string event attribute values + + Parameters + ------------- + trace + Trace of the log + event_attribute + Event attribute to consider + + Returns + ------------- + values + All feature names present for the given attribute in the given trace + """ + values_trace = set() + for event in trace: + if event_attribute in event: + values_trace.add(get_string_event_attribute_rep(event, event_attribute)) + if not values_trace: + values_trace.add("event:" + str(event_attribute) + "@UNDEFINED") + return values_trace + + +def get_all_string_event_attribute_values(log: EventLog, event_attribute: str) -> List[str]: + """ + Get all the representations for all the traces of the log associated to a string event attribute values + + Parameters + ------------ + log + Trace of the log + event_attribute + Event attribute to consider + + Returns + ------------ + values + All feature names present for the given attribute in the given log + """ + values = set() + for trace in log: + values = values.union(get_values_event_attribute_for_trace(trace, event_attribute)) + return list(sorted(values)) + + +def get_string_event_attribute_succession_rep(event1: Event, event2: Event, event_attribute: str) -> str: + """ + Get a representation of the feature name associated to a string event attribute value + + Parameters + ------------ + event1 + First event of the succession + event2 + Second event of the succession + event_attribute + Event attribute to consider + + Returns + ------------ + rep + Representation of the feature name associated to a string event attribute value + """ + return "succession:" + str(event_attribute) + "@" + str(event1[event_attribute]) + "#" + str( + event2[event_attribute]) + + +def get_values_event_attribute_succession_for_trace(trace: Trace, event_attribute: str) -> Set[str]: + """ + Get all the representations for the events of a trace associated to a string event attribute succession values + + Parameters + ------------- + trace + Trace of the log + event_attribute + Event attribute to consider + + Returns + ------------- + values + All feature names present for the given attribute succession in the given trace + """ + values_trace = set() + for i in range(len(trace) - 1): + event1 = trace[i] + event2 = trace[i + 1] + if event_attribute in event1 and event_attribute in event2: + values_trace.add(get_string_event_attribute_succession_rep(event1, event2, event_attribute)) + if not values_trace: + values_trace.add("succession:" + str(event_attribute) + "@UNDEFINED") + return values_trace + + +def get_all_string_event_succession_attribute_values(log: EventLog, event_attribute: str) -> List[str]: + """ + Get all the representations for all the traces of the log associated to a string event attribute succession values + + Parameters + ------------ + log + Trace of the log + event_attribute + Event attribute to consider + + Returns + ------------ + values + All feature names present for the given attribute succession in the given log + """ + values = set() + for trace in log: + values = values.union(get_values_event_attribute_succession_for_trace(trace, event_attribute)) + return list(sorted(values)) + + +def get_numeric_trace_attribute_rep(trace_attribute: str) -> str: + """ + Get the feature name associated to a numeric trace attribute + + Parameters + ------------ + trace_attribute + Name of the trace attribute + + Returns + ------------ + feature_name + Name of the feature + """ + return "trace:" + trace_attribute + + +def get_numeric_trace_attribute_value(trace: Trace, trace_attribute: str) -> Union[int, float]: + """ + Get the value of a numeric trace attribute from a given trace + + Parameters + ------------ + trace + Trace of the log + + Returns + ------------ + value + Value of the numeric trace attribute for the given trace + """ + if trace_attribute in trace.attributes: + return float(trace.attributes[trace_attribute]) + raise Exception("at least a trace without trace attribute: " + trace_attribute) + + +def get_numeric_event_attribute_rep(event_attribute: str) -> str: + """ + Get the feature name associated to a numeric event attribute + + Parameters + ------------ + event_attribute + Name of the event attribute + + Returns + ------------- + feature_name + Name of the feature + """ + return "event:" + event_attribute + + +def get_numeric_event_attribute_value(event: Event, event_attribute: str) -> Union[int, float]: + """ + Get the value of a numeric event attribute from a given event + + Parameters + ------------- + event + Event + + Returns + ------------- + value + Value of the numeric event attribute for the given event + """ + if event_attribute in event: + return float(event[event_attribute]) + return None + + +def get_numeric_event_attribute_value_trace(trace: Trace, event_attribute: str) -> Union[int, float]: + """ + Get the value of the last occurrence of a numeric event attribute given a trace + + Parameters + ------------- + trace + Trace of the log + + Returns + ------------- + value + Value of the last occurrence of a numeric trace attribute for the given trace + """ + non_zero_values = [] + for event in trace: + value = get_numeric_event_attribute_value(event, event_attribute) + if value is not None: + non_zero_values.append(value) + if len(non_zero_values) > 0: + return non_zero_values[-1] + raise Exception("at least a trace without any event with event attribute: " + event_attribute) + + +def get_default_representation_with_attribute_names(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None, + feature_names: Optional[List[str]] = None) -> Tuple[ + Any, List[str], List[str], List[str], List[str], List[str]]: + """ + Gets the default data representation of an event log (for process tree building) + returning also the attribute names + + Parameters + ------------- + log + Trace log + parameters + Possible parameters of the algorithm + feature_names + (If provided) Feature to use in the representation of the log + + Returns + ------------- + data + Data to provide for decision tree learning + feature_names + Names of the features, in order + """ + from pm4py.statistics.attributes.log.select import select_attributes_from_log_for_tree + + if parameters is None: + parameters = {} + + enable_activity_def_representation = exec_utils.get_param_value(Parameters.ENABLE_ACTIVITY_DEF_REPRESENTATION, + parameters, False) + enable_succ_def_representation = exec_utils.get_param_value(Parameters.ENABLE_SUCC_DEF_REPRESENTATION, parameters, + False) + + activity_key = parameters[ + constants.PARAMETER_CONSTANT_ACTIVITY_KEY] if constants.PARAMETER_CONSTANT_ACTIVITY_KEY in parameters else xes.DEFAULT_NAME_KEY + blacklist = parameters["blacklist"] if "blacklist" in parameters else [] + + str_tr_attr, str_ev_attr, num_tr_attr, num_ev_attr = select_attributes_from_log_for_tree(log) + str_evsucc_attr = None + + if enable_succ_def_representation: + str_evsucc_attr = [activity_key] + if enable_activity_def_representation and activity_key not in str_ev_attr: + str_ev_attr.append(activity_key) + + str_tr_attr = [x for x in str_tr_attr if x not in blacklist] + str_ev_attr = [x for x in str_ev_attr if x not in blacklist] + num_tr_attr = [x for x in num_tr_attr if x not in blacklist] + num_ev_attr = [x for x in num_ev_attr if x not in blacklist] + if str_evsucc_attr is not None: + str_evsucc_attr = [x for x in str_evsucc_attr if x not in blacklist] + + data, feature_names = get_representation(log, str_tr_attr, str_ev_attr, num_tr_attr, num_ev_attr, + str_evsucc_attr=str_evsucc_attr, + feature_names=feature_names) + + return data, feature_names, str_tr_attr, str_ev_attr, num_tr_attr, num_ev_attr + + +def get_default_representation(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None, + feature_names: Optional[List[str]] = None) -> Tuple[Any, List[str]]: + """ + Gets the default data representation of an event log (for process tree building) + + Parameters + ------------- + log + Trace log + parameters + Possible parameters of the algorithm + feature_names + (If provided) Feature to use in the representation of the log + + Returns + ------------- + data + Data to provide for decision tree learning + feature_names + Names of the features, in order + """ + from pm4py.statistics.attributes.log.select import select_attributes_from_log_for_tree + + if parameters is None: + parameters = {} + + enable_activity_def_representation = exec_utils.get_param_value(Parameters.ENABLE_ACTIVITY_DEF_REPRESENTATION, + parameters, True) + enable_succ_def_representation = exec_utils.get_param_value(Parameters.ENABLE_SUCC_DEF_REPRESENTATION, parameters, + True) + + activity_key = parameters[ + constants.PARAMETER_CONSTANT_ACTIVITY_KEY] if constants.PARAMETER_CONSTANT_ACTIVITY_KEY in parameters else xes.DEFAULT_NAME_KEY + blacklist = parameters["blacklist"] if "blacklist" in parameters else [] + + str_tr_attr, str_ev_attr, num_tr_attr, num_ev_attr = select_attributes_from_log_for_tree(log) + str_evsucc_attr = None + + if enable_succ_def_representation: + str_evsucc_attr = [activity_key] + if enable_activity_def_representation and activity_key not in str_ev_attr: + str_ev_attr.append(activity_key) + + str_tr_attr = [x for x in str_tr_attr if x not in blacklist] + str_ev_attr = [x for x in str_ev_attr if x not in blacklist] + num_tr_attr = [x for x in num_tr_attr if x not in blacklist] + num_ev_attr = [x for x in num_ev_attr if x not in blacklist] + if str_evsucc_attr is not None: + str_evsucc_attr = [x for x in str_evsucc_attr if x not in blacklist] + + return get_representation(log, str_tr_attr, str_ev_attr, num_tr_attr, num_ev_attr, str_evsucc_attr=str_evsucc_attr, + feature_names=feature_names) + + +def get_representation(log: EventLog, str_tr_attr: List[str], str_ev_attr: List[str], num_tr_attr: List[str], + num_ev_attr: List[str], str_evsucc_attr: Optional[List[str]] = None, + feature_names: Optional[List[str]] = None) -> Tuple[Any, List[str]]: + """ + Get a representation of the event log that is suited for the data part of the decision tree learning + + NOTE: this function only encodes the last value seen for each attribute + + Parameters + ------------- + log + Trace log + str_tr_attr + List of string trace attributes to consider in data vector creation + str_ev_attr + List of string event attributes to consider in data vector creation + num_tr_attr + List of numeric trace attributes to consider in data vector creation + num_ev_attr + List of numeric event attributes to consider in data vector creation + str_evsucc_attr + List of attributes succession of values to consider in data vector creation + feature_names + (If provided) Feature to use in the representation of the log + + Returns + ------------- + data + Data to provide for decision tree learning + feature_names + Names of the features, in order + """ + data = [] + dictionary = {} + count = 0 + if feature_names is None: + feature_names = [] + for trace_attribute in str_tr_attr: + values = get_all_string_trace_attribute_values(log, trace_attribute) + for value in values: + dictionary[value] = count + feature_names.append(value) + count = count + 1 + for event_attribute in str_ev_attr: + values = get_all_string_event_attribute_values(log, event_attribute) + for value in values: + dictionary[value] = count + feature_names.append(value) + count = count + 1 + for trace_attribute in num_tr_attr: + dictionary[get_numeric_trace_attribute_rep(trace_attribute)] = count + feature_names.append(get_numeric_trace_attribute_rep(trace_attribute)) + count = count + 1 + for event_attribute in num_ev_attr: + dictionary[get_numeric_event_attribute_rep(event_attribute)] = count + feature_names.append(get_numeric_event_attribute_rep(event_attribute)) + count = count + 1 + if str_evsucc_attr: + for event_attribute in str_evsucc_attr: + values = get_all_string_event_succession_attribute_values(log, event_attribute) + for value in values: + dictionary[value] = count + feature_names.append(value) + count = count + 1 + else: + count = len(feature_names) + for index, value in enumerate(feature_names): + dictionary[value] = index + + for trace in log: + trace_rep = [0.0] * count + for trace_attribute in str_tr_attr: + trace_attr_rep = get_string_trace_attribute_rep(trace, trace_attribute) + if trace_attr_rep in dictionary: + trace_rep[dictionary[trace_attr_rep]] = 1.0 + for event_attribute in str_ev_attr: + values = get_values_event_attribute_for_trace(trace, event_attribute) + for value in values: + if value in dictionary: + trace_rep[dictionary[value]] = 1.0 + for trace_attribute in num_tr_attr: + this_value = get_numeric_trace_attribute_rep(trace_attribute) + if this_value in dictionary: + trace_rep[dictionary[this_value]] = get_numeric_trace_attribute_value( + trace, trace_attribute) + for event_attribute in num_ev_attr: + this_value = get_numeric_event_attribute_rep(event_attribute) + if this_value in dictionary: + trace_rep[dictionary[this_value]] = get_numeric_event_attribute_value_trace( + trace, event_attribute) + if str_evsucc_attr: + for event_attribute in str_evsucc_attr: + values = get_values_event_attribute_succession_for_trace(trace, event_attribute) + for value in values: + if value in dictionary: + trace_rep[dictionary[value]] = 1.0 + data.append(trace_rep) + # data = np.asarray(data) + return data, feature_names + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[Any, List[str]]: + """ + Extract the features from an event log (a vector for each trace) + + Parameters + ----------------- + log + Log + parameters + Parameters of the algorithm, including: + - STR_TRACE_ATTRIBUTES => string trace attributes to consider in the features extraction + - STR_EVENT_ATTRIBUTES => string event attributes to consider in the features extraction + - NUM_TRACE_ATTRIBUTES => numeric trace attributes to consider in the features extraction + - NUM_EVENT_ATTRIBUTES => numeric event attributes to consider in the features extraction + - STR_EVSUCC_ATTRIBUTES => succession of event attributes to consider in the features extraction + - FEATURE_NAMES => features to consider (in the given order) + - ENABLE_ALL_EXTRA_FEATURES => enables all the extra features + - ENABLE_CASE_DURATION => enables the case duration as additional feature + - ENABLE_TIMES_FROM_FIRST_OCCURRENCE => enables the addition of the times from start of the case, to the end + of the case, from the first occurrence of an activity of a case + - ADD_CASE_IDENTIFIER_COLUMN => adds the case identifier (string) as column of the feature table (default: False) + - ENABLE_TIMES_FROM_LAST_OCCURRENCE => enables the addition of the times from start of the case, to the end + of the case, from the last occurrence of an activity of a case + - ENABLE_DIRECT_PATHS_TIMES_LAST_OCC => add the duration of the last occurrence of a directed (i, i+1) path + in the case as feature + - ENABLE_INDIRECT_PATHS_TIMES_LAST_OCC => add the duration of the last occurrence of an indirect (i, j) path + in the case as feature + - ENABLE_WORK_IN_PROGRESS => enables the work in progress (number of concurrent cases) as a feature + - ENABLE_RESOURCE_WORKLOAD => enables the resource workload as a feature + - ENABLE_FIRST_LAST_ACTIVITY_INDEX => enables the insertion of the indexes of the activities as features + - ENABLE_MAX_CONCURRENT_EVENTS => enables the count of the number of concurrent events inside a case + - ENABLE_MAX_CONCURRENT_EVENTS_PER_ACTIVITY => enables the count of the number of concurrent events per activity + + Returns + ------------- + data + Data to provide for decision tree learning + feature_names + Names of the features, in order + """ + if parameters is None: + parameters = {} + + str_tr_attr = exec_utils.get_param_value(Parameters.STR_TRACE_ATTRIBUTES, parameters, None) + num_tr_attr = exec_utils.get_param_value(Parameters.NUM_TRACE_ATTRIBUTES, parameters, None) + str_ev_attr = exec_utils.get_param_value(Parameters.STR_EVENT_ATTRIBUTES, parameters, None) + num_ev_attr = exec_utils.get_param_value(Parameters.NUM_EVENT_ATTRIBUTES, parameters, None) + str_evsucc_attr = exec_utils.get_param_value(Parameters.STR_EVSUCC_ATTRIBUTES, parameters, None) + feature_names = exec_utils.get_param_value(Parameters.FEATURE_NAMES, parameters, None) + + at_least_one_provided = (str_tr_attr is not None) or (num_tr_attr is not None) or (str_ev_attr is not None) or (num_ev_attr is not None) + + if str_tr_attr is None: + str_tr_attr = [] + + if num_tr_attr is None: + num_tr_attr = [] + + if str_ev_attr is None: + str_ev_attr = [] + + if num_ev_attr is None: + num_ev_attr = [] + + if pandas_utils.check_is_pandas_dataframe(log): + case_attribute_prefix = exec_utils.get_param_value(Parameters.CASE_ATTRIBUTE_PREFIX, parameters, "case:") + + if str_tr_attr or num_tr_attr or str_ev_attr or num_ev_attr: + columns = list(set([case_attribute_prefix + x for x in str_tr_attr]).union(set([case_attribute_prefix + x for x in num_tr_attr])).union( + set(str_ev_attr)).union(set(num_ev_attr))) + fea_df = dataframe_utils.get_features_df(log, columns, parameters=parameters) + feature_names = list(fea_df.columns) + else: + fea_df = dataframe_utils.automatic_feature_extraction_df(log, parameters=parameters) + feature_names = list(fea_df.columns) + return fea_df, feature_names + else: + enable_all = exec_utils.get_param_value(Parameters.ENABLE_ALL_EXTRA_FEATURES, parameters, False) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + add_case_identifier_column = exec_utils.get_param_value(Parameters.ADD_CASE_IDENTIFIER_COLUMN, parameters, False) + enable_case_duration = exec_utils.get_param_value(Parameters.ENABLE_CASE_DURATION, parameters, enable_all) + enable_times_from_first_occ = exec_utils.get_param_value(Parameters.ENABLE_TIMES_FROM_FIRST_OCCURRENCE, + parameters, enable_all) + enable_times_from_last_occ = exec_utils.get_param_value(Parameters.ENABLE_TIMES_FROM_LAST_OCCURRENCE, + parameters, enable_all) + enable_direct_paths_times_last_occ = exec_utils.get_param_value(Parameters.ENABLE_DIRECT_PATHS_TIMES_LAST_OCC, + parameters, enable_all) + enable_indirect_paths_times_last_occ = exec_utils.get_param_value( + Parameters.ENABLE_INDIRECT_PATHS_TIMES_LAST_OCC, parameters, enable_all) + enable_work_in_progress = exec_utils.get_param_value(Parameters.ENABLE_WORK_IN_PROGRESS, parameters, enable_all) + enable_resource_workload = exec_utils.get_param_value(Parameters.ENABLE_RESOURCE_WORKLOAD, parameters, enable_all) + enable_first_last_activity_index = exec_utils.get_param_value(Parameters.ENABLE_FIRST_LAST_ACTIVITY_INDEX, parameters, enable_all) + enable_max_concurrent_events = exec_utils.get_param_value(Parameters.ENABLE_MAX_CONCURRENT_EVENTS, parameters, enable_all) + enable_max_concurrent_events_per_activity = exec_utils.get_param_value(Parameters.ENABLE_MAX_CONCURRENT_EVENTS_PER_ACTIVITY, parameters, enable_all) + + log = converter.apply(log, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + if at_least_one_provided: + datas, features_namess = get_representation(log, str_tr_attr, str_ev_attr, num_tr_attr, num_ev_attr, + str_evsucc_attr=str_evsucc_attr, feature_names=feature_names) + else: + datas, features_namess = get_default_representation(log, parameters=parameters) + + if add_case_identifier_column: + for i in range(len(datas)): + datas[i] = [log[i].attributes[case_id_key]] + datas[i] + features_namess = ["@@case_id_column"] + features_namess + + # add additional features + + if enable_case_duration: + data, features_names = case_duration(log, parameters=parameters) + for i in range(len(datas)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + features_names + + if enable_times_from_first_occ: + data, features_names = times_from_first_occurrence_activity_case(log, parameters=parameters) + for i in range(len(datas)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + features_names + + if enable_times_from_last_occ: + data, features_names = times_from_last_occurrence_activity_case(log, parameters=parameters) + for i in range(len(datas)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + features_names + + if enable_direct_paths_times_last_occ: + data, features_names = direct_paths_times_last_occ(log, parameters=parameters) + for i in range(len(datas)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + features_names + + if enable_indirect_paths_times_last_occ: + data, features_names = indirect_paths_times_last_occ(log, parameters=parameters) + for i in range(len(datas)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + features_names + + if enable_work_in_progress: + data, features_names = work_in_progress(log, parameters=parameters) + for i in range(len(datas)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + features_names + + if enable_resource_workload: + data, features_names = resource_workload(log, parameters=parameters) + for i in range(len(datas)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + features_names + + if enable_first_last_activity_index: + data, features_names = first_last_activity_index_trace(log, parameters=parameters) + for i in range(len(datas)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + features_names + + if enable_max_concurrent_events: + data, features_names = max_concurrent_events(log, parameters=parameters) + for i in range(len(datas)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + features_names + + if enable_max_concurrent_events_per_activity: + data, features_names = max_concurrent_events_per_activity(log, parameters=parameters) + for i in range(len(datas)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + features_names + + return datas, features_namess diff --git a/pm4py/pm4py/algo/transformation/log_to_interval_tree/__init__.py b/pm4py/pm4py/algo/transformation/log_to_interval_tree/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..12d83c4b89e1dd2a03a60e076c1f6f3b46d94300 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_interval_tree/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.log_to_interval_tree import algorithm, variants + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The log_to_interval_tree package will be removed in a future release.") diff --git a/pm4py/pm4py/algo/transformation/log_to_interval_tree/algorithm.py b/pm4py/pm4py/algo/transformation/log_to_interval_tree/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..341a17670bf808a0c46ec00a3152fb25c57d8a74 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_interval_tree/algorithm.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from intervaltree import IntervalTree + +from pm4py.algo.transformation.log_to_interval_tree.variants import open_paths +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils +from pm4py.objects.conversion.log import converter as log_converter + + +class Variants(Enum): + OPEN_PATHS = open_paths + + +def apply(log: EventLog, variant=Variants.OPEN_PATHS, parameters: Optional[Dict[Any, Any]] = None) -> IntervalTree: + """ + Transforms the event log to an interval tree using one of the available variants + + Parameters + ----------------- + log + Event log + variant + Variant of the algorithm to be used: + - Variants.OPEN_PATHS: transforms the event log to an interval tree in which the intervals are the + directly-follows paths in the log (open at the complete timestamp of the source event, + and closed at the start timestamp of the target event), + and having as associated data the source and the target event. + + Returns + ----------------- + tree + Interval tree object (which can be queried at a given timestamp, or range of timestamps) + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + return exec_utils.get_variant(variant).apply(log, parameters=parameters) diff --git a/pm4py/pm4py/algo/transformation/log_to_interval_tree/variants/__init__.py b/pm4py/pm4py/algo/transformation/log_to_interval_tree/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4717153274fdd6b8f61267e2c91fad6048a7d0c8 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_interval_tree/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.log_to_interval_tree.variants import open_paths diff --git a/pm4py/pm4py/algo/transformation/log_to_interval_tree/variants/open_paths.py b/pm4py/pm4py/algo/transformation/log_to_interval_tree/variants/open_paths.py new file mode 100644 index 0000000000000000000000000000000000000000..9a688434572a8dacce6668cbd8f0451015c21f09 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_interval_tree/variants/open_paths.py @@ -0,0 +1,134 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, List, Union +import pandas as pd + +from intervaltree import IntervalTree, Interval + +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + EPSILON = "epsilon" + FILTER_ACTIVITY_COUPLE = "filter_activity_couple" + + +def log_to_intervals(log: Union[EventLog, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> List[ + List[Any]]: + """ + Transforms the event log to a list of intervals that are the + directly-follows paths in the log (open at the complete timestamp of the source event, + and closed at the start timestamp of the target event). + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to be used as activity (default: xes_constants.DEFAULT_NAME_KEY) + - Parameters.START_TIMESTAMP_KEY => the attribute to be used as start timestamp (default: xes_constants.DEFAULT_TIMESTAMP_KEY) + - Parameters.TIMESTAMP_KEY => the attribute to be used as completion timestamp (default: xes_constants.DEFAULT_TIMESTAMP_KEY) + - Parameters.EPSILON => the small gap that is removed from the timestamp of the source event and added to the + timestamp of the target event to make interval querying possible + - Parameters.FILTER_ACTIVITY_COUPLE => (optional) keeps only the paths between the specified tuple of two activities. + + Returns + ----------------- + tree + Interval tree object (which can be queried at a given timestamp, or range of timestamps) + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + filter_activity_couple = exec_utils.get_param_value(Parameters.FILTER_ACTIVITY_COUPLE, parameters, None) + + ret_list = [] + + for trace in log: + for i in range(len(trace) - 1): + time_i = trace[i][timestamp_key].timestamp() + for j in range(i + 1, len(trace)): + time_j = trace[j][start_timestamp_key].timestamp() + if time_j >= time_i: + if filter_activity_couple is None or ( + trace[i][activity_key] == filter_activity_couple[0] and trace[j][activity_key] == + filter_activity_couple[1]): + ret_list.append([time_i, time_j, trace[i], trace[j], trace.attributes]) + break + + ret_list.sort(key=lambda x: (x[0], x[1], x[2], x[3])) + return ret_list + + +def interval_to_tree(intervals: List[List[Any]], parameters: Optional[Dict[Any, Any]] = None) -> IntervalTree: + """Internal methods to convert the obtained intervals to the eventual IntervalTree""" + if parameters is None: + parameters = {} + + epsilon = exec_utils.get_param_value(Parameters.EPSILON, parameters, 0.00001) + + tree = IntervalTree() + + for inte in intervals: + tree.add(Interval(inte[0] - epsilon, inte[1] + epsilon, + data={"source_event": inte[2], "target_event": inte[3], "trace_attributes": inte[4]})) + + return tree + + +def apply(log: Union[EventLog, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> IntervalTree: + """ + Transforms the event log to an interval tree in which the intervals are the + directly-follows paths in the log (open at the complete timestamp of the source event, + and closed at the start timestamp of the target event), and having as associated data the source and the target + event. + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to be used as activity (default: xes_constants.DEFAULT_NAME_KEY) + - Parameters.START_TIMESTAMP_KEY => the attribute to be used as start timestamp (default: xes_constants.DEFAULT_TIMESTAMP_KEY) + - Parameters.TIMESTAMP_KEY => the attribute to be used as completion timestamp (default: xes_constants.DEFAULT_TIMESTAMP_KEY) + - Parameters.EPSILON => the small gap that is removed from the timestamp of the source event and added to the + timestamp of the target event to make interval querying possible + - Parameters.FILTER_ACTIVITY_COUPLE => (optional) keeps only the paths between the specified tuple of two activities. + + Returns + ----------------- + tree + Interval tree object (which can be queried at a given timestamp, or range of timestamps) + """ + intervals = log_to_intervals(log, parameters=parameters) + + return interval_to_tree(intervals, parameters=parameters) diff --git a/pm4py/pm4py/algo/transformation/log_to_target/__init__.py b/pm4py/pm4py/algo/transformation/log_to_target/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b5ea83bfc0bd0cec46be008e7288e63f17e01a45 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_target/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.log_to_target import algorithm, variants diff --git a/pm4py/pm4py/algo/transformation/log_to_target/algorithm.py b/pm4py/pm4py/algo/transformation/log_to_target/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..dd06c0892a4fef606f797479f3d2fc626367d2ee --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_target/algorithm.py @@ -0,0 +1,55 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.algo.transformation.log_to_target.variants import next_activity, next_time, remaining_time +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Union, Dict, Optional, Any, Tuple, List +from pm4py.util import exec_utils + + +class Variants(Enum): + NEXT_ACTIVITY = next_activity + NEXT_TIME = next_time + REMAINING_TIME = remaining_time + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], variant=None, parameters: Optional[Dict[Any, Any]] = None) -> Tuple[Any, List[str]]: + """ + Extracts from the event log + the target vector for a specific ML use case + + Parameters + --------------- + log + Event log / Event stream / Pandas dataframe + variant + Specification of the target vector: + - Variants.NEXT_ACTIVITY => encodes the next activity + - Variants.NEXT_TIME => encodes the next timestamp + - Variants.REMAINING_TIME => encodes the remaining time + + Returns + -------------- + vector + Target vector for the specified ML use case + classes + Classes (for every column of the target vector) + """ + if variant is None: + raise Exception("please provide the variant between: Variants.NEXT_ACTIVITY, Variants.NEXT_TIME, Variants.REMAINING_TIME") + return exec_utils.get_variant(variant).apply(log, parameters=parameters) diff --git a/pm4py/pm4py/algo/transformation/log_to_target/variants/__init__.py b/pm4py/pm4py/algo/transformation/log_to_target/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..31940e92dd6a1345ffbe4cc4e0cc0c31d8b60249 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_target/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.log_to_target.variants import next_activity, next_time, remaining_time diff --git a/pm4py/pm4py/algo/transformation/log_to_target/variants/next_activity.py b/pm4py/pm4py/algo/transformation/log_to_target/variants/next_activity.py new file mode 100644 index 0000000000000000000000000000000000000000..eab5e368c381651e40ea4454aebfc36e6c94d45c --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_target/variants/next_activity.py @@ -0,0 +1,83 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Union, Dict, Optional, Any, Tuple, List +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ACTIVITIES = "activities" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + ENABLE_PADDING = "enable_padding" + PAD_SIZE = "pad_size" + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> Tuple[List[List[List[int]]], List[str]]: + """ + Returns a list of matrixes (one for every case). + Every matrix contains as many rows as many events are contained in the case (an automatic padding option is also available), + and as many columns as many distinct activities are in the log. + + The corresponding activity to the given event is assigned to the value 1; + the remaining activities are assigned to the value 0. + + Parameters + -------------- + log + Event log / Event stream / Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITIES => list of activities to consider + - Parameters.ACTIVITY_KEY => attribute that should be used as activity + - Parameters.ENABLE_PADDING => enables the padding (the length of cases is normalized) + - Parameters.PAD_SIZE => the size of the padding + + Returns + ------------- + target + The aforementioned list of matrixes. + activities + The considered list of activities + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + max_case_length = max([len(x) for x in log]) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + activities = exec_utils.get_param_value(Parameters.ACTIVITIES, parameters, sorted(list(set(y[activity_key] for x in log for y in x)))) + enable_padding = exec_utils.get_param_value(Parameters.ENABLE_PADDING, parameters, False) + pad_size = exec_utils.get_param_value(Parameters.PAD_SIZE, parameters, max_case_length) + + target = [] + for trace in log: + target.append([]) + for i in range(len(trace)): + target[-1].append([0.0] * len(activities)) + if i < len(trace) - 1: + act = trace[i+1][activity_key] + if act in activities: + target[-1][-1][activities.index(act)] = 1.0 + if enable_padding: + while len(target[-1]) < pad_size: + target[-1].append([0.0] * len(activities)) + + return target, activities diff --git a/pm4py/pm4py/algo/transformation/log_to_target/variants/next_time.py b/pm4py/pm4py/algo/transformation/log_to_target/variants/next_time.py new file mode 100644 index 0000000000000000000000000000000000000000..0eec5fc89d700356e75ad0a1623c1c82fe2543c3 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_target/variants/next_time.py @@ -0,0 +1,75 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Union, Dict, Optional, Any, Tuple, List +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + ENABLE_PADDING = "enable_padding" + PAD_SIZE = "pad_size" + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> Tuple[List[List[int]], List[str]]: + """ + Returns a list of lists (one for every case of the log) containing the difference between the timestamp of the current event + and the timestamp of the next event of the case (an automatic padding option is also available). + For the last event of the case, the difference is defaulted to 0. + + Parameters + --------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.TIMESTAMP_KEY => the attribute of the log to be used as timestamp + - Parameters.ENABLE_PADDING => enables the padding (the length of cases is normalized) + - Parameters.PAD_SIZE => the size of the padding + + Returns + --------------- + target + The aforementioned list + classes + Dummy list (of classes) + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + max_case_length = max([len(x) for x in log]) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + enable_padding = exec_utils.get_param_value(Parameters.ENABLE_PADDING, parameters, False) + pad_size = exec_utils.get_param_value(Parameters.PAD_SIZE, parameters, max_case_length) + + target = [] + for trace in log: + target.append([]) + for i in range(len(trace)): + curr_time = trace[i][timestamp_key].timestamp() + next_time = trace[i+1][timestamp_key].timestamp() if i < len(trace)-1 else curr_time + target[-1].append(float(next_time-curr_time)) + if enable_padding: + while len(target[-1]) < pad_size: + target[-1].append(0.0) + + return target, ["@@next_time"] diff --git a/pm4py/pm4py/algo/transformation/log_to_target/variants/remaining_time.py b/pm4py/pm4py/algo/transformation/log_to_target/variants/remaining_time.py new file mode 100644 index 0000000000000000000000000000000000000000..ead612635ee77472701645084e2bcc67735550fd --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_target/variants/remaining_time.py @@ -0,0 +1,74 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Union, Dict, Optional, Any, Tuple, List +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + ENABLE_PADDING = "enable_padding" + PAD_SIZE = "pad_size" + + +def apply(log: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> Tuple[List[List[int]], List[str]]: + """ + Returns a list of lists (one for every case of the log) containing the remaining time in seconds + from an event to the end of the case (an automatic padding option is also available). + + Parameters + --------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.TIMESTAMP_KEY => the attribute of the log to be used as timestamp + - Parameters.ENABLE_PADDING => enables the padding (the length of cases is normalized) + - Parameters.PAD_SIZE => the size of the padding + + Returns + --------------- + target + The aforementioned list + classes + Dummy list (of classes) + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + max_case_length = max([len(x) for x in log]) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + enable_padding = exec_utils.get_param_value(Parameters.ENABLE_PADDING, parameters, False) + pad_size = exec_utils.get_param_value(Parameters.PAD_SIZE, parameters, max_case_length) + + target = [] + for trace in log: + target.append([]) + for i in range(len(trace)): + curr_time = trace[i][timestamp_key].timestamp() + last_time = trace[-1][timestamp_key].timestamp() + target[-1].append(float(last_time-curr_time)) + if enable_padding: + while len(target[-1]) < pad_size: + target[-1].append(0.0) + + return target, ["@@remaining_time"] diff --git a/pm4py/pm4py/algo/transformation/log_to_trie/__init__.py b/pm4py/pm4py/algo/transformation/log_to_trie/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d46dc1d32ab4d92693c60f74274f597ea25150b9 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_trie/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.log_to_trie import algorithm diff --git a/pm4py/pm4py/algo/transformation/log_to_trie/algorithm.py b/pm4py/pm4py/algo/transformation/log_to_trie/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..bdeab0520a19e32641c01e8bd5779731c69f4cc0 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/log_to_trie/algorithm.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py import util +from pm4py.objects.log.obj import EventLog +from pm4py.objects.trie.obj import Trie +from pm4py.statistics.variants.log import get as get_variants_log +from pm4py.statistics.variants.pandas import get as get_variants_pandas +from pm4py.util import pandas_utils +from typing import Optional, Dict, Any, Union +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = util.constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def apply(log: Union[EventLog, pd.DataFrame], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Trie: + parameters = parameters if parameters is not None else dict() + + if pandas_utils.check_is_pandas_dataframe(log): + variants = get_variants_pandas.get_variants_set(log, parameters=parameters) + else: + variants = get_variants_log.get_variants(log, parameters=parameters) + + variants = list(variants) + + root = Trie() + + for variant in variants: + trie = root + for i, activity in enumerate(variant): + match = False + for c in trie.children: + if c.label == activity: + trie = c + match = True + break + if not match: + node = Trie(label=activity, parent=trie, depth=trie.depth + 1) + trie.children.append(node) + trie = node + if i == len(variant) - 1: + trie.final = True + return root diff --git a/pm4py/pm4py/algo/transformation/ocel/__init__.py b/pm4py/pm4py/algo/transformation/ocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..36c9c88b14ec61c63809e108d4aa60806b8e2dcd --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.ocel import graphs, split_ocel, features diff --git a/pm4py/pm4py/algo/transformation/ocel/description/__init__.py b/pm4py/pm4py/algo/transformation/ocel/description/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..be585a556f86025af98379923033e0652c861926 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/description/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + diff --git a/pm4py/pm4py/algo/transformation/ocel/description/algorithm.py b/pm4py/pm4py/algo/transformation/ocel/description/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..9a5336b47c2a72863e128a44bbc1eb64c761861f --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/description/algorithm.py @@ -0,0 +1,51 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.transformation.ocel.description.variants import variant1 +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.util import exec_utils +from enum import Enum + + +class Variants(Enum): + VARIANT1 = variant1 + + +def apply(ocel: OCEL, variant=Variants.VARIANT1, parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Gets a textual representation from an object-centric event log + + Parameters + -------------- + ocel + Object-centric event log + variant + Variant of the algorithm to be used, possible values: + - Variants.VARIANT1 + parameters + Variant-specific parameters + + Returns + -------------- + ocel_stri + A textual representation of the object-centric event log + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(ocel, parameters=parameters) diff --git a/pm4py/pm4py/algo/transformation/ocel/description/variants/__init__.py b/pm4py/pm4py/algo/transformation/ocel/description/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..be585a556f86025af98379923033e0652c861926 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/description/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + diff --git a/pm4py/pm4py/algo/transformation/ocel/description/variants/variant1.py b/pm4py/pm4py/algo/transformation/ocel/description/variants/variant1.py new file mode 100644 index 0000000000000000000000000000000000000000..b8552fb887cbb8fda58569ad3c3ad87a1e582678 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/description/variants/variant1.py @@ -0,0 +1,81 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any + + +class Parameters(Enum): + INCLUDE_TIMESTAMPS = "include_timestamps" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Provides a textual description of the provided object-centric event log + + Parameters + -------------- + ocel + Object-centric event log + parameters + Possible parameters of the algorithm, including: + - Parameters.INCLUDE_TIMESTAMPS => include the timestamps (or not) in the representation + + Returns + ------------- + ocel_stri + Textual representation of the object-centric event log + """ + if parameters is None: + parameters = {} + + include_timestamps = exec_utils.get_param_value(Parameters.INCLUDE_TIMESTAMPS, parameters, True) + + object_ots = ocel.objects[[ocel.object_id_column, ocel.object_type_column]].to_dict("records") + object_ots = {x[ocel.object_id_column]: x[ocel.object_type_column] for x in object_ots} + events = ocel.events.sort_values([ocel.event_timestamp, ocel.event_activity, ocel.event_id_column]).to_dict("records") + objects = ocel.objects.sort_values(ocel.object_id_column).to_dict("records") + relations = ocel.relations.sort_values([ocel.event_timestamp, ocel.event_activity, ocel.object_id_column, ocel.event_id_column]) + tdf = relations.groupby(ocel.object_id_column)[ocel.event_timestamp] + objects_start = tdf.first().to_dict() + objects_end = tdf.last().to_dict() + objects_lifecycle = {x: objects_end[x].timestamp() - objects_start[x].timestamp() for x in objects_start} + + relations = relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + + ret = ["\n\nevents:\n"] + + for ev in events: + stru = ev[ocel.event_activity] + " ( related objects: "+", ".join(relations[ev[ocel.event_id_column]]) + " ) " + if include_timestamps: + stru = stru + " timestamp: "+str(ev[ocel.event_timestamp]) + ret.append(stru) + + ret.append("\nobjects:\n") + + for obj in objects: + obj_id = obj[ocel.object_id_column] + stru = obj_id + " object type: "+object_ots[obj_id] + if include_timestamps: + stru = stru + " ( lifecycle start: "+str(objects_start[obj_id])+" ; lifecycle end: "+str(objects_end[obj_id])+" ; lifecycle duration: "+str(objects_lifecycle[obj_id])+" )" + ret.append(stru) + + ret = "\n".join(ret) + + return ret diff --git a/pm4py/pm4py/algo/transformation/ocel/features/__init__.py b/pm4py/pm4py/algo/transformation/ocel/features/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..140bda2a5e48fa214fd78caf276446492129b9ff --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.transformation.ocel.features import objects, events, events_objects diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/__init__.py b/pm4py/pm4py/algo/transformation/ocel/features/events/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..51fe64e8ecb832735e1d5b2c97fa2fb24cc2a237 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.transformation.ocel.features.events import algorithm, event_activity, event_timestamp, event_num_rel_objs_type, event_num_rel_objs, event_str_attributes, event_num_attributes, event_start_ot, event_end_ot, related_objects_features, new_interactions diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/algorithm.py b/pm4py/pm4py/algo/transformation/ocel/features/events/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..b4f9c5c51638b5bfc67a74424acaca3729b5eb7f --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/algorithm.py @@ -0,0 +1,192 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any, List +from enum import Enum +from pm4py.util import exec_utils +from pm4py.algo.transformation.ocel.features.events import event_activity, event_num_rel_objs, event_num_rel_objs_type, event_timestamp, event_str_attributes, event_num_attributes, event_start_ot, event_end_ot, related_objects_features, new_interactions + + +class Parameters(Enum): + ENABLE_ALL = "enable_all" + ENABLE_EVENT_ACTIVITY = "enable_event_activity" + ENABLE_EVENT_TIMESTAMP = "enable_event_timestamp" + ENABLE_EVENT_NUM_REL_OBJS = "enable_event_num_rel_objs" + ENABLE_EVENT_NUM_REL_OBJS_TYPE = "enable_event_num_rel_objs_type" + ENABLE_EVENT_STR_ATTRIBUTES = "enable_event_str_attributes" + ENABLE_EVENT_NUM_ATTRIBUTES = "enable_event_num_attributes" + ENABLE_EVENT_START_OT = "enable_event_start_ot" + ENABLE_EVENT_END_OT = "enable_event_end_ot" + ENABLE_NEW_INTERACTIONS = "enable_new_interactions" + ENABLE_RELATED_OBJECTS_FEATURES = "enable_related_objects_features" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Extracts a feature table related to the events of an OCEL + + Parameters + --------------- + ocel + Object-centric event log + parameters + Parameters for extracting the feature table, including: + - Parameters.ENABLE_ALL => enables all the belowmentioned features + - Parameters.ENABLE_EVENT_ACTIVITY => enables the one-hot-encoding of the activities of the event + - Parameters.ENABLE_EVENT_TIMESTAMP => enables the encoding of the timestamp of the event as feature + - Parameters.ENABLE_EVENT_NUM_REL_OBJS => enables the "overall number of related objects" feature + - Parameters.ENABLE_EVENT_NUM_REL_OBJS_TYPE => enables the "number of related objects per type" feature + - Parameters.ENABLE_EVENT_STR_ATTRIBUTES => enables the one-hot-encoding of a given collection of string event + attributes (specified inside the "str_ev_attr" parameter) + - Parameters.ENABLE_EVENT_NUM_ATTRIBUTES => enables the extraction of a given collection of numeric event + attributes in the feature table + - Parameters.ENABLE_EVENT_START_OT => calculates some features which establish if the event starts the + lifecycle of some objects of a type. + - Parameters.ENABLE_EVENT_END_OT => calculates some features which establish if the event completes the + lifecycle of some objects of a type. + - Parameters.ENABLE_NEW_INTERACTIONS => number of new interactions between the related objects which + appears in a given event. + - Parameters.ENABLE_RELATED_OBJECTS_FEATURES => associates to the event some features calculated on the + related objects. + + Returns + ------------------ + data + Values of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + enable_all = exec_utils.get_param_value(Parameters.ENABLE_ALL, parameters, True) + enable_event_activity = exec_utils.get_param_value(Parameters.ENABLE_EVENT_ACTIVITY, parameters, enable_all) + enable_event_timestamp = exec_utils.get_param_value(Parameters.ENABLE_EVENT_TIMESTAMP, parameters, enable_all) + enable_event_num_rel_objs = exec_utils.get_param_value(Parameters.ENABLE_EVENT_NUM_REL_OBJS, parameters, enable_all) + enable_event_num_rel_objs_type = exec_utils.get_param_value(Parameters.ENABLE_EVENT_NUM_REL_OBJS_TYPE, parameters, enable_all) + enable_event_str_attributes = exec_utils.get_param_value(Parameters.ENABLE_EVENT_STR_ATTRIBUTES, parameters, enable_all) + enable_event_num_attributes = exec_utils.get_param_value(Parameters.ENABLE_EVENT_NUM_ATTRIBUTES, parameters, enable_all) + enable_event_start_ot = exec_utils.get_param_value(Parameters.ENABLE_EVENT_START_OT, parameters, enable_all) + enable_event_end_ot = exec_utils.get_param_value(Parameters.ENABLE_EVENT_END_OT, parameters, enable_all) + enable_new_interactions = exec_utils.get_param_value(Parameters.ENABLE_NEW_INTERACTIONS, parameters, enable_all) + + enable_related_objects_features = exec_utils.get_param_value(Parameters.ENABLE_RELATED_OBJECTS_FEATURES, parameters, False) + + ordered_events = ocel.events[ocel.event_id_column].to_numpy() + parameters["ordered_events"] = ordered_events + + datas = [[] for x in ordered_events] + feature_namess = [] + + if enable_event_activity: + data, feature_names = event_activity.apply(ocel, parameters=parameters) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_event_timestamp: + data, feature_names = event_timestamp.apply(ocel, parameters=parameters) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_event_num_rel_objs: + data, feature_names = event_num_rel_objs.apply(ocel, parameters=parameters) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_event_num_rel_objs_type: + data, feature_names = event_num_rel_objs_type.apply(ocel, parameters=parameters) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_event_str_attributes: + data, feature_names = event_str_attributes.apply(ocel, parameters=parameters) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_event_num_attributes: + data, feature_names = event_num_attributes.apply(ocel, parameters=parameters) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_event_start_ot: + data, feature_names = event_start_ot.apply(ocel, parameters=parameters) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_event_end_ot: + data, feature_names = event_end_ot.apply(ocel, parameters=parameters) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_new_interactions: + data, feature_names = new_interactions.apply(ocel, parameters=parameters) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_related_objects_features: + data, feature_names = related_objects_features.apply(ocel, parameters=parameters) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + return datas, feature_namess + + +def transform_features_to_dict_dict(ocel: OCEL, data: List[List[float]], feature_names: List[str], parameters=None): + """ + Transforms event-based features expressed in the conventional way to a dictionary + where the key is the event ID, the second key is the feature name and the value is the feature value. + + Parameters + ----------------- + ocel + Object-centric event log + data + Values of the features + feature_names + Names of the features + + Returns + ----------------- + dict_dict + Dictionary associating an ID to a dictionary of features + """ + if parameters is None: + parameters = {} + + events = ocel.events[ocel.event_id_column].to_numpy() + ret = {} + i = 0 + while i < len(data): + dct = {} + j = 0 + while j < len(feature_names): + dct[feature_names[j]] = data[i][j] + j = j + 1 + ret[events[i]] = dct + i = i + 1 + + return ret diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/event_activity.py b/pm4py/pm4py/algo/transformation/ocel/features/events/event_activity.py new file mode 100644 index 0000000000000000000000000000000000000000..fce6731fabcfd2861ed8d04749f8d0556269673c --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/event_activity.py @@ -0,0 +1,57 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.util import pandas_utils + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + One-hot encode the activities of an OCEL, assigning to each event its own activity as feature + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else ocel.events[ocel.event_id_column].to_numpy() + + activities = pandas_utils.format_unique(ocel.events[ocel.event_activity].unique()) + + data = [] + feature_names = ["@@event_act_"+act for act in activities] + + events_activities = ocel.events[[ocel.event_id_column, ocel.event_activity]].to_dict("records") + events_activities = {x[ocel.event_id_column]: x[ocel.event_activity] for x in events_activities} + + for ev in ordered_events: + data.append([0.0] * len(activities)) + data[-1][activities.index(events_activities[ev])] = 1.0 + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/event_end_ot.py b/pm4py/pm4py/algo/transformation/ocel/features/events/event_end_ot.py new file mode 100644 index 0000000000000000000000000000000000000000..b4edc681f6d2f491846756a7047d50cf08cdfa8c --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/event_end_ot.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.filtering.ocel import ot_endpoints +from pm4py.util import pandas_utils + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Assigns to each event a feature that is 1 when the event completes the lifecycle of at least one object + of a given type. + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else ocel.events[ocel.event_id_column].to_numpy() + + object_types = ocel.objects.groupby(ocel.object_type_column)[ocel.object_id_column].agg(list).to_dict() + endpoints = ocel.relations.groupby(ocel.object_id_column)[ocel.event_id_column].last().to_dict() + + map_endpoints = {ot: set() for ot in object_types} + for ot in object_types: + for obj in object_types[ot]: + for ev in endpoints[obj]: + map_endpoints[ot].add(ev) + + feature_names = ["@@event_start_"+ot for ot in object_types] + data = [] + + for ev in ordered_events: + data.append([]) + for ot in object_types: + data[-1].append(1.0 if ev in map_endpoints[ot] else 0.0) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/event_num_attributes.py b/pm4py/pm4py/algo/transformation/ocel/features/events/event_num_attributes.py new file mode 100644 index 0000000000000000000000000000000000000000..caf6bac4c32124cfbe5add2258beb5c8f1a79a17 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/event_num_attributes.py @@ -0,0 +1,71 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + EVENT_NUM_ATTRIBUTES = "num_ev_attr" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Enables the extraction of a given collection of numeric event attributes in the feature table + (specified inside the "num_ev_attr" parameter). + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm: + - Parameters.EVENT_NUM_ATTRIBUTES => collection of numeric attributes to consider for feature extraction + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else ocel.events[ocel.event_id_column].to_numpy() + + data = [] + feature_names = [] + + event_num_attributes = exec_utils.get_param_value(Parameters.EVENT_NUM_ATTRIBUTES, parameters, None) + + if event_num_attributes: + feature_names = feature_names + ["@@event_num_"+x for x in event_num_attributes] + + attr_values = {} + for attr in event_num_attributes: + values = ocel.events[[ocel.event_id_column, attr]].dropna(subset=[attr]).to_dict("records") + values = {x[ocel.event_id_column]: x[attr] for x in values} + attr_values[attr] = values + + for ev in ordered_events: + data.append([]) + for attr in event_num_attributes: + data[-1].append(float(attr_values[attr][ev]) if ev in attr_values[attr] else 0.0) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/event_num_rel_objs.py b/pm4py/pm4py/algo/transformation/ocel/features/events/event_num_rel_objs.py new file mode 100644 index 0000000000000000000000000000000000000000..a2ddf4edd331f02bd696b357bb7b14369296d835 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/event_num_rel_objs.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Feature: assigns to each event the number of related objects. + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else ocel.events[ + ocel.event_id_column].to_numpy() + + rel_objs = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + + data = [] + feature_names = ["@@event_num_rel_objs"] + + for ev in ordered_events: + data.append([float(len(rel_objs[ev]))]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/event_num_rel_objs_type.py b/pm4py/pm4py/algo/transformation/ocel/features/events/event_num_rel_objs_type.py new file mode 100644 index 0000000000000000000000000000000000000000..d4b86362a27034df1e6621383fd32a87aefd24b8 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/event_num_rel_objs_type.py @@ -0,0 +1,63 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.util import pandas_utils + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Feature: assigns to each event the number of related objects per object type. + If N different object types are present in the log, then N different columns are created. + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else ocel.events[ + ocel.event_id_column].to_numpy() + + rel_objs = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + + object_types = pandas_utils.format_unique(ocel.objects[ocel.object_type_column].unique()) + + object_type_association = ocel.objects[[ocel.object_id_column, ocel.object_type_column]].to_dict("records") + object_type_association = {x[ocel.object_id_column]: x[ocel.object_type_column] for x in object_type_association} + + data = [] + feature_names = ["@@event_num_rel_objs_type_"+ot for ot in object_types] + + for ev in ordered_events: + data.append([]) + for ot in object_types: + rel_objs_ot = {x for x in rel_objs[ev] if object_type_association[x] == ot} + data[-1].append(float(len(rel_objs_ot))) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/event_start_ot.py b/pm4py/pm4py/algo/transformation/ocel/features/events/event_start_ot.py new file mode 100644 index 0000000000000000000000000000000000000000..018a071d95a87f31fb861d34774b21b83355dd07 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/event_start_ot.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.filtering.ocel import ot_endpoints +from pm4py.util import pandas_utils + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Assigns to each event a feature that is 1 when the event starts at least one object of a given type. + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else ocel.events[ + ocel.event_id_column].to_numpy() + + object_types = ocel.objects.groupby(ocel.object_type_column)[ocel.object_id_column].agg(list).to_dict() + endpoints = ocel.relations.groupby(ocel.object_id_column)[ocel.event_id_column].first().to_dict() + + map_endpoints = {ot: set() for ot in object_types} + for ot in object_types: + for obj in object_types[ot]: + for ev in endpoints[obj]: + map_endpoints[ot].add(ev) + + feature_names = ["@@event_start_"+ot for ot in object_types] + data = [] + + for ev in ordered_events: + data.append([]) + for ot in object_types: + data[-1].append(1.0 if ev in map_endpoints[ot] else 0.0) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/event_str_attributes.py b/pm4py/pm4py/algo/transformation/ocel/features/events/event_str_attributes.py new file mode 100644 index 0000000000000000000000000000000000000000..f57ae05725cf410352d8f810c99428af169e5b37 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/event_str_attributes.py @@ -0,0 +1,85 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + EVENT_STR_ATTRIBUTES = "str_ev_attr" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + One-hot-encoding of a given collection of string event attributes + (specified inside the "str_ev_attr" parameter) + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm: + - Parameters.EVENT_STR_ATTRIBUTES => collection of string attributes to consider for feature extraction + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else ocel.events[ + ocel.event_id_column].to_numpy() + + data = [] + feature_names = [] + + event_str_attributes = exec_utils.get_param_value(Parameters.EVENT_STR_ATTRIBUTES, parameters, None) + + if event_str_attributes is not None: + dct_corr = {} + dct_corr_values = {} + + for attr in event_str_attributes: + events_attr_not_na = ocel.events[[ocel.event_id_column, attr]].dropna(subset=[attr]).to_dict("records") + if events_attr_not_na: + events_attr_not_na = {x[ocel.event_id_column]: str(x[attr]) for x in events_attr_not_na} + dct_corr[attr] = events_attr_not_na + dct_corr_values[attr] = list(set(events_attr_not_na.values())) + + dct_corr_list = list(dct_corr) + + for attr in dct_corr_list: + for value in dct_corr_values[attr]: + feature_names.append("@@event_attr_value_"+attr+"_"+value) + + for ev in ordered_events: + data.append([0.0] * len(feature_names)) + count = 0 + for attr in dct_corr_list: + if ev in dct_corr[attr]: + value = dct_corr[attr][ev] + idx = count + dct_corr_values[attr].index(value) + data[-1][idx] = 1.0 + count += len(dct_corr_values[attr]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/event_timestamp.py b/pm4py/pm4py/algo/transformation/ocel/features/events/event_timestamp.py new file mode 100644 index 0000000000000000000000000000000000000000..3ed08eac4d77f8418c73dc5403a447f5bbfe3990 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/event_timestamp.py @@ -0,0 +1,54 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Feature: assigns to each event of the OCEL its own timestamp. + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else ocel.events[ + ocel.event_id_column].to_numpy() + + data = [] + feature_names = ["@@event_timestamp", "@@event_timestamp_dayofweek", "@@event_timestamp_hour", "@@event_timestamp_month", "@@event_timestamp_day"] + + events_timestamps = ocel.events[[ocel.event_id_column, ocel.event_timestamp]].to_dict("records") + events_timestamps = {x[ocel.event_id_column]: x[ocel.event_timestamp] for x in events_timestamps} + + for ev in ordered_events: + data.append([float(events_timestamps[ev].timestamp()), float(events_timestamps[ev].dayofweek), float(events_timestamps[ev].hour), float(events_timestamps[ev].month), float(events_timestamps[ev].day)]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/new_interactions.py b/pm4py/pm4py/algo/transformation/ocel/features/events/new_interactions.py new file mode 100644 index 0000000000000000000000000000000000000000..d214296ceab135311629343b19e877d3080b7b8f --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/new_interactions.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Discovers the number of new interactions between the related objects which appears in a given event. + + Parameters + --------------- + ocel + OCEL + parameters + Parameters of the method + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else ocel.events[ + ocel.event_id_column].to_numpy() + + rel_objs = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + + interactions = set() + data = [] + feature_names = ["@@ev_new_interactions"] + + for ev in ordered_events: + n = 0 + if ev in rel_objs: + for o1 in rel_objs[ev]: + for o2 in rel_objs[ev]: + if o1 < o2: + if not (o1, o2) in interactions: + n = n + 1 + data.append([float(n)]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events/related_objects_features.py b/pm4py/pm4py/algo/transformation/ocel/features/events/related_objects_features.py new file mode 100644 index 0000000000000000000000000000000000000000..8390e9b49e9aba992dcf2de98e0f1e867750d9f0 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events/related_objects_features.py @@ -0,0 +1,78 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Extracts for each event the minimum and the maximum value of the features for the objects related to the event. + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters + + Returns + ----------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + from pm4py.algo.transformation.ocel.features.objects import algorithm as object_based_features + + data_objects, feature_names_objects = object_based_features.apply(ocel, parameters=parameters) + dct_dct_objects = object_based_features.transform_features_to_dict_dict(ocel, data_objects, feature_names_objects, parameters=parameters) + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else ocel.events[ + ocel.event_id_column].to_numpy() + + stream = ocel.relations[[ocel.event_id_column, ocel.object_id_column]].to_dict("records") + ev_rel_objs = {} + + for cou in stream: + if cou[ocel.event_id_column] not in ev_rel_objs: + ev_rel_objs[cou[ocel.event_id_column]] = [] + ev_rel_objs[cou[ocel.event_id_column]].append(dct_dct_objects[cou[ocel.object_id_column]]) + + data = [] + feature_names = [] + for x in feature_names_objects: + feature_names.append("@@rel_obj_fea_min_"+x) + feature_names.append("@@rel_obj_fea_max_"+x) + + for ev in ordered_events: + arr = [] + for x in feature_names_objects: + if ev in ev_rel_objs: + min_v = float(min(y[x] for y in ev_rel_objs[ev])) + max_v = float(max(y[x] for y in ev_rel_objs[ev])) + else: + min_v = 0.0 + max_v = 0.0 + arr.append(min_v) + arr.append(max_v) + data.append(arr) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events_objects/__init__.py b/pm4py/pm4py/algo/transformation/ocel/features/events_objects/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bd7304e35613786fae4b0e55f7c533a717ed83e6 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events_objects/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.transformation.ocel.features.events_objects import algorithm, prefix_features diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events_objects/algorithm.py b/pm4py/pm4py/algo/transformation/ocel/features/events_objects/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..66d68ad5f247fc8309c2ffc8512d84079fb22c3e --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events_objects/algorithm.py @@ -0,0 +1,92 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.transformation.ocel.features.events import algorithm as event_feature_extraction +from pm4py.algo.transformation.ocel.features.events_objects import prefix_features +from pm4py.objects.ocel.util import explode +from copy import copy +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + ENABLE_ALL_EO_FEATURES = "enable_all_eo_features" + ENABLE_EVENT_POINTWISE_FEATURES = "enable_event_pointwise_features" + ENABLE_PREFIX_FEATURES = "enable_prefix_features" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Extract features that are related to the different combinations of events and objects of the OCEL. + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.ENABLE_ALL_EO_FEATURES => enables all the belowmentioned features + - Parameters.ENABLE_EVENT_POINTWISE_FEATURES => enables the calculation of pointwise features for the events + - Parameters.ENABLE_PREFIX_FEATURES => enables the prefix features + + Returns + ----------------- + data + Values of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + enable_all = exec_utils.get_param_value(Parameters.ENABLE_ALL_EO_FEATURES, parameters, True) + enable_event_pointwise_features = exec_utils.get_param_value(Parameters.ENABLE_EVENT_POINTWISE_FEATURES, parameters, enable_all) + enable_prefix_features = exec_utils.get_param_value(Parameters.ENABLE_PREFIX_FEATURES, parameters, enable_all) + + exploded_ocel = explode.apply(ocel) + ordered_events = exploded_ocel.events[exploded_ocel.event_id_column].to_numpy() + parameters["ordered_events"] = ordered_events + + datas = [] + features_namess = [] + for i in range(len(ordered_events)): + datas.append([]) + + if enable_event_pointwise_features: + parameters_efe = copy(parameters) + parameters_efe["enable_all"] = False + parameters_efe["enable_related_objects_features"] = False + parameters_efe["enable_event_activity"] = True + parameters_efe["enable_event_timestamp"] = True + parameters_efe["enable_event_num_rel_objs_type"] = True + parameters_efe["enable_event_str_attributes"] = True + parameters_efe["enable_event_num_attributes"] = True + parameters_efe["enable_event_start_ot"] = True + data, feature_names = event_feature_extraction.apply(exploded_ocel, parameters=parameters_efe) + for i in range(len(data)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + feature_names + + if enable_prefix_features: + data, feature_names = prefix_features.apply(exploded_ocel, parameters=parameters) + for i in range(len(data)): + datas[i] = datas[i] + data[i] + features_namess = features_namess + feature_names + + return datas, features_namess diff --git a/pm4py/pm4py/algo/transformation/ocel/features/events_objects/prefix_features.py b/pm4py/pm4py/algo/transformation/ocel/features/events_objects/prefix_features.py new file mode 100644 index 0000000000000000000000000000000000000000..1da17239a4eee7c6d421fdf77c5f381d3a610910 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/events_objects/prefix_features.py @@ -0,0 +1,121 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.ocel.util import event_prefix_suffix_per_obj +from collections import Counter + + +class Parameters(Enum): + ENABLE_ALL_PREFIX_FEATURES = "enable_all_prefix_features" + ENABLE_PREFIX_LENGTH = "enable_prefix_length" + ENABLE_PREFIX_TIMEDIFF = "enable_prefix_timediff" + ENABLE_PREFIX_ONE_HOT_ENCODING = "enable_prefix_1h_encoding" + + +def apply(exploded_ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Gets some features out of the exploded OCEL which are based on the prefix of the event (for the current object) + + Parameters + ----------------- + exploded_ocel + Exploded object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.ENABLE_ALL_PREFIX_FEATURES => enables the calculation of all the belowmentioned features + - Parameters.ENABLE_PREFIX_LENGTH => adds the prefix length as a feature + - Parameters.ENABLE_PREFIX_TIMEDIFF => adds the difference between the current event timestamp and the + first event related to the current object. + - Parameters.ENABLE_PREFIX_ONE_HOT_ENCODING => one-hot-encodes the activities of the prefix. + + Returns + ----------------- + data + Values of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + enable_all = exec_utils.get_param_value(Parameters.ENABLE_ALL_PREFIX_FEATURES, parameters, True) + enable_prefix_length = exec_utils.get_param_value(Parameters.ENABLE_PREFIX_LENGTH, parameters, enable_all) + enable_prefix_timediff = exec_utils.get_param_value(Parameters.ENABLE_PREFIX_TIMEDIFF, parameters, enable_all) + enable_prefix_1h_encoding = exec_utils.get_param_value(Parameters.ENABLE_PREFIX_ONE_HOT_ENCODING, parameters, enable_all) + + ordered_events = parameters["ordered_events"] if "ordered_events" in parameters else exploded_ocel.events[ + exploded_ocel.event_id_column].to_numpy() + + datas = [] + feature_namess = [] + + prefixes = event_prefix_suffix_per_obj.apply(exploded_ocel, parameters=parameters) + for e1 in prefixes: + for obj in prefixes[e1]: + val = prefixes[e1][obj] + break + prefixes[e1] = val + + map0 = exploded_ocel.events[[exploded_ocel.event_id_column, exploded_ocel.event_activity, exploded_ocel.event_timestamp]].to_dict("records") + all_activities = set() + evid_act_map = {} + evid_timest_map = {} + for el in map0: + evid = el[exploded_ocel.event_id_column] + act = el[exploded_ocel.event_activity] + timest = el[exploded_ocel.event_timestamp].timestamp() + evid_act_map[evid] = act + evid_timest_map[evid] = timest + all_activities.add(act) + all_activities = list(all_activities) + + for ev in ordered_events: + datas.append([]) + + if enable_prefix_length: + feature_namess.append("@@ev_obj_pref_length") + for i, ev in enumerate(ordered_events): + if ev in prefixes: + datas[i].append(float(len(prefixes[ev]))) + else: + datas[i].append(0.0) + + if enable_prefix_timediff: + feature_namess.append("@@ev_obj_pref_timediff") + for i, ev in enumerate(ordered_events): + if ev in prefixes: + datas[i].append(float(evid_timest_map[ev] - evid_timest_map[prefixes[ev][0]])) + else: + datas[i].append(0.0) + + if enable_prefix_1h_encoding: + for act in all_activities: + feature_namess.append("@@ev_obj_pref_act_"+act) + for i, ev in enumerate(ordered_events): + pref_activities = Counter() + if ev in prefixes: + pref_activities = Counter([evid_act_map[x] for x in prefixes[ev]]) + arr = [] + for act in all_activities: + arr.append(float(pref_activities[act])) + datas[i] = datas[i] + arr + + return datas, feature_namess diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/__init__.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..dfe6d7656ef2d9ae888a2999512f74e0110434f6 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.algo.transformation.ocel.features.objects import algorithm, object_cobirth_graph, object_codeath_graph, object_degree_centrality, object_general_descendants_graph, object_general_inheritance_graph, object_general_interaction_graph, object_lifecycle_activities, object_lifecycle_duration, object_lifecycle_length, object_str_attributes, object_num_attributes, objects_interaction_graph_ot, object_work_in_progress, related_events_features, related_activities_features, obj_con_in_graph_features, object_lifecycle_unq_act diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/algorithm.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..af94161fcedd981b404024cec8826d5a244f6cf1 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/algorithm.py @@ -0,0 +1,397 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any, List +from enum import Enum +from pm4py.util import exec_utils +import time +from pm4py.algo.transformation.ocel.features.objects import object_lifecycle_length, object_lifecycle_duration, object_degree_centrality, object_general_descendants_graph, object_general_interaction_graph, object_general_inheritance_graph, object_cobirth_graph, object_codeath_graph, object_lifecycle_activities, object_str_attributes, object_num_attributes, objects_interaction_graph_ot, object_work_in_progress, related_events_features, related_activities_features, obj_con_in_graph_features, object_lifecycle_unq_act, object_lifecycle_paths + + +class Parameters(Enum): + DEBUG = "debug" + ENABLE_ALL = "enable_all" + ENABLE_LIFECYCLE_METRICS = "enable_lifecycle_metrics" + ENABLE_OBJECT_LIFECYCLE_LENGTH = "enable_object_lifecycle_length" + ENABLE_OBJECT_LIFECYCLE_UNQ_ACT = "enable_object_lifecycle_unq_act" + ENABLE_OBJECT_LIFECYCLE_DURATION = "enable_object_lifecycle_duration" + ENABLE_OBJECT_DEGREE_CENTRALITY = "enable_object_degree_centrality" + ENABLE_OBJECT_GENERAL_INTERACTION_GRAPH = "enable_object_general_interaction_graph" + ENABLE_OBJECT_GENERAL_DESCENDANTS_GRAPH = "enable_object_general_descendants_graph" + ENABLE_OBJECT_GENERAL_INHERITANCE_GRAPH = "enable_object_general_inheritance_graph" + ENABLE_OBJECT_COBIRTH_GRAPH = "enable_object_cobirth_graph" + ENABLE_OBJECT_CODEATH_GRAPH = "enable_object_codeath_graph" + ENABLE_OBJECT_LIFECYCLE_ACTIVITIES = "enable_object_lifecycle_activities" + ENABLE_OBJECT_LIFECYCLE_PATHS = "enable_object_lifecycle_paths" + ENABLE_OBJECT_STR_ATTRIBUTES = "enable_object_str_attributes" + ENABLE_OBJECT_NUM_ATTRIBUTES = "enable_object_num_attributes" + ENABLE_OBJECT_INTERACTION_GRAPH_OT = "enable_object_interaction_graph_ot" + ENABLE_OBJECT_WORK_IN_PROGRESS = "enable_object_work_in_progress" + ENABLE_RELATED_EVENTS_FEATURES = "enable_related_events_features" + ENABLE_RELATED_ACTIVITIES_FEATURES = "enable_related_activities_features" + ENABLE_OBJ_CON_IN_GRAPH_FEATURES = "enable_obj_con_in_graph_features" + FILTER_PER_TYPE = "filter_per_type" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Extract a feature table related to the objects of an OCEL + + Implements the approach described in: + Berti, A., Herforth, J., Qafari, M.S. et al. Graph-based feature extraction on object-centric event logs. Int J Data Sci Anal (2023). https://doi.org/10.1007/s41060-023-00428-2 + + Parameters + ------------------ + ocel + OCEL + parameters + Parameters of the algorithm, including: + - Parameters.ENABLE_ALL => enable the extraction of all the belowmentioned features + - Parameters.ENABLE_LIFECYCLE_METRICS => enables the computation of the lifecycle metrics + - Parameters.ENABLE_OBJECT_LIFECYCLE_LENGTH => enables the object lifecycle length feature + - Parameters.ENABLE_OBJECT_LIFECYCLE_DURATION => enables the object lifecycle duration feature + - Parameters.ENABLE_OBJECT_LIFECYCLE_UNQ_ACT => enables the object lifecycle unique activities feature + - Parameters.ENABLE_OBJECT_DEGREE_CENTRALITY => enables the object degree centrality feature + - Parameters.ENABLE_OBJECT_GENERAL_INTERACTION_GRAPH => enables the object general interaction graph feature + - Parameters.ENABLE_OBJECT_GENERAL_DESCENDANTS_GRAPH => enables the object general descendants graph feature + - Parameters.ENABLE_OBJECT_GENERAL_INHERITANCE_GRAPH => enables the object general inheritance graph feature + - Parameters.ENABLE_OBJECT_COBIRTH_GRAPH => enables the object cobirth graph feature + - Parameters.ENABLE_OBJECT_CODEATH_GRAPH => enables the object codeath graph feature + - Parameters.ENABLE_OBJECT_LIFECYCLE_ACTIVITIES => enables the features associated to the activities in the + lifecycle of an object + - Parameters.ENABLE_OBJECT_STR_ATTRIBUTES => enables the one-hot-encoding of a specified collection of string + attributes for each object. + - Parameters.ENABLE_OBJECT_NUM_ATTRIBUTES => enables the extraction of a specified collection of numeric + attributes for each object. + - Parameters.ENABLE_OBJECT_INTERACTION_GRAPH_OT => enables the extraction of the number of interacting objects + per object type. + - Parameters.FILTER_PER_TYPE => once obtained, filter only the objects that belongs to a specific type + - Parameters.ENABLE_RELATED_EVENTS_FEATURES => enables the extraction of features for the related events to a + given object. + - Parameters.ENABLE_RELATED_ACTIVITIES_FEATURES => enables the extraction of features for the last occurrence + of an activity in the events related to the object. + - Parameters.ENABLE_OBJ_CON_IN_GRAPH_FEATURES => enables the extraction of features from the neighboring + objects. + - Parameters.ENABLE_OBJECT_LIFECYCLE_PATHS => enables the features associated to the paths in the + lifecycle of an object + + Returns + ------------------ + data + Values of the features + feature_names + Names of the features + """ + if parameters is None: + parameters = {} + + debug = exec_utils.get_param_value(Parameters.DEBUG, parameters, False) + enable_all = exec_utils.get_param_value(Parameters.ENABLE_ALL, parameters, True) + enable_lifecycle_metrics = exec_utils.get_param_value(Parameters.ENABLE_LIFECYCLE_METRICS, parameters, enable_all) + enable_object_lifecycle_length = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_LIFECYCLE_LENGTH, parameters, enable_lifecycle_metrics) + enable_object_lifecycle_duration = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_LIFECYCLE_DURATION, parameters, enable_lifecycle_metrics) + enable_object_lifecycle_activities = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_LIFECYCLE_ACTIVITIES, parameters, enable_lifecycle_metrics) + enable_object_lifecycle_unq_act = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_LIFECYCLE_UNQ_ACT, parameters, enable_lifecycle_metrics) + enable_object_str_attributes = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_STR_ATTRIBUTES, parameters, enable_lifecycle_metrics) + enable_object_num_attributes = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_NUM_ATTRIBUTES, parameters, enable_lifecycle_metrics) + enable_work_in_progress = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_WORK_IN_PROGRESS, parameters, False) + enable_object_degree_centrality = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_DEGREE_CENTRALITY, parameters, enable_all) + enable_object_general_interaction_graph = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_GENERAL_INTERACTION_GRAPH, parameters, enable_all) + enable_object_general_descendants_graph = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_GENERAL_DESCENDANTS_GRAPH, parameters, enable_all) + enable_object_general_inheritance_graph = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_GENERAL_INHERITANCE_GRAPH, parameters, enable_all) + enable_object_cobirth_graph = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_COBIRTH_GRAPH, parameters, enable_all) + enable_object_codeath_graph = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_CODEATH_GRAPH, parameters, enable_all) + enable_object_interaction_graph_ot = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_INTERACTION_GRAPH_OT, parameters, enable_all) + enable_related_events_features = exec_utils.get_param_value(Parameters.ENABLE_RELATED_EVENTS_FEATURES, parameters, False) + enable_related_activities_features = exec_utils.get_param_value(Parameters.ENABLE_RELATED_ACTIVITIES_FEATURES, parameters, False) + enable_obj_con_in_graph_features = exec_utils.get_param_value(Parameters.ENABLE_OBJ_CON_IN_GRAPH_FEATURES, parameters, False) + enable_object_lifecycle_paths = exec_utils.get_param_value(Parameters.ENABLE_OBJECT_LIFECYCLE_PATHS, parameters, False) + + filter_per_type = exec_utils.get_param_value(Parameters.FILTER_PER_TYPE, parameters, None) + + T0 = time.time_ns() + + ordered_objects = ocel.objects[ocel.object_id_column].to_numpy() + parameters["ordered_objects"] = ordered_objects + + datas = [[] for x in ordered_objects] + feature_namess = [] + + if enable_object_lifecycle_length: + if debug: + print("computing enable_object_lifecycle_length") + t0 = time.time_ns() + data, feature_names = object_lifecycle_length.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_lifecycle_length", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_lifecycle_duration: + if debug: + print("computing enable_object_lifecycle_duration") + t0 = time.time_ns() + data, feature_names = object_lifecycle_duration.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_lifecycle_duration", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_degree_centrality: + if debug: + print("computing enable_object_degree_centrality") + t0 = time.time_ns() + data, feature_names = object_degree_centrality.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_degree_centrality", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_general_interaction_graph: + if debug: + print("computing enable_object_general_interaction_graph") + t0 = time.time_ns() + data, feature_names = object_general_interaction_graph.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_general_interaction_graph", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_general_descendants_graph: + if debug: + print("computing enable_object_general_descendants_graph") + t0 = time.time_ns() + data, feature_names = object_general_descendants_graph.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_general_descendants_graph", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_general_inheritance_graph: + if debug: + print("computing enable_object_general_inheritance_graph") + t0 = time.time_ns() + data, feature_names = object_general_inheritance_graph.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_general_inheritance_graph", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_cobirth_graph: + if debug: + print("computing enable_object_cobirth_graph") + t0 = time.time_ns() + data, feature_names = object_cobirth_graph.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_cobirth_graph", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_codeath_graph: + if debug: + print("computing enable_object_codeath_graph") + t0 = time.time_ns() + data, feature_names = object_codeath_graph.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_codeath_graph", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_lifecycle_activities: + if debug: + print("computing enable_object_lifecycle_activities") + t0 = time.time_ns() + data, feature_names = object_lifecycle_activities.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_lifecycle_activities", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_str_attributes: + if debug: + print("computing enable_object_str_attributes") + t0 = time.time_ns() + data, feature_names = object_str_attributes.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_str_attributes", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_num_attributes: + if debug: + print("computing enable_object_num_attributes") + t0 = time.time_ns() + data, feature_names = object_num_attributes.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_num_attributes", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_interaction_graph_ot: + if debug: + print("computing enable_object_interaction_graph_ot") + t0 = time.time_ns() + data, feature_names = objects_interaction_graph_ot.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_interaction_graph_ot", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_work_in_progress: + if debug: + print("computing enable_work_in_progress") + t0 = time.time_ns() + data, feature_names = object_work_in_progress.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_work_in_progress", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_lifecycle_unq_act: + if debug: + print("computing enable_object_lifecycle_unq_act") + t0 = time.time_ns() + data, feature_names = object_lifecycle_unq_act.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_lifecycle_unq_act", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_related_events_features: + if debug: + print("computing enable_related_events_features") + t0 = time.time_ns() + data, feature_names = related_events_features.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_related_events_features", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_related_activities_features: + if debug: + print("computing enable_related_activities_features") + t0 = time.time_ns() + data, feature_names = related_activities_features.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_related_activities_features", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_obj_con_in_graph_features: + if debug: + print("computing enable_obj_con_in_graph_features") + t0 = time.time_ns() + data, feature_names = obj_con_in_graph_features.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_obj_con_in_graph_features", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if enable_object_lifecycle_paths: + if debug: + print("computing enable_object_lifecycle_paths") + t0 = time.time_ns() + data, feature_names = object_lifecycle_paths.apply(ocel, parameters=parameters) + t1 = time.time_ns() + if debug: + print("computed enable_object_lifecycle_paths", "%.4f" % ((t1-t0)/10**9)) + feature_namess = feature_namess + feature_names + for i in range(len(data)): + datas[i] = datas[i] + data[i] + + if filter_per_type is not None: + object_type = ocel.objects[[ocel.object_id_column, ocel.object_type_column]].to_dict("records") + object_type = {x[ocel.object_id_column]: x[ocel.object_type_column] for x in object_type} + idxs = [i for i in range(len(ordered_objects)) if object_type[ordered_objects[i]] == filter_per_type] + datas = [datas[i] for i in idxs] + + T1 = time.time_ns() + if debug: + print("Total time: %.4f" % ((T1-T0)/10**9)) + + return datas, feature_namess + + +def transform_features_to_dict_dict(ocel: OCEL, data: List[List[float]], feature_names: List[str], parameters=None): + """ + Transforms object-based features expressed in the conventional way to a dictionary + where the key is the object ID, the second key is the feature name and the value is the feature value. + + Parameters + ----------------- + ocel + Object-centric event log + data + Values of the features + feature_names + Names of the features + + Returns + ----------------- + dict_dict + Dictionary associating an ID to a dictionary of features + """ + if parameters is None: + parameters = {} + + objects = ocel.objects[ocel.object_id_column].to_numpy() + ret = {} + i = 0 + while i < len(data): + dct = {} + j = 0 + while j < len(feature_names): + dct[feature_names[j]] = data[i][j] + j = j + 1 + ret[objects[i]] = dct + i = i + 1 + + return ret diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/obj_con_in_graph_features.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/obj_con_in_graph_features.py new file mode 100644 index 0000000000000000000000000000000000000000..c7eb453bd2b3e6bd467b39202279313ce56acb0b --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/obj_con_in_graph_features.py @@ -0,0 +1,96 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils +from pm4py.algo.transformation.ocel.graphs import object_interaction_graph, object_cobirth_graph, object_codeath_graph + + +class Parameters(Enum): + GRAPH = "graph" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Extracts object-related features from the neighboring objects of a given object. + + Parameters + ---------------- + ocel + Object-centric event log + parameters + Parameters of the method, including: + - Parameters.GRAPH => method that should be called on the object-centric event log to infer a graph + + Returns + ----------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + from pm4py.algo.transformation.ocel.features.objects import algorithm as object_based_features + data_objects, feature_names_objects = object_based_features.apply(ocel) + dct_dct_objects = object_based_features.transform_features_to_dict_dict(ocel, data_objects, feature_names_objects) + + graph_to_retrieve = exec_utils.get_param_value(Parameters.GRAPH, parameters, object_interaction_graph) + graph0 = graph_to_retrieve.apply(ocel, parameters=parameters) + graph = {} + for el in graph0: + if not el[0] in graph: + graph[el[0]] = set() + graph[el[0]].add(el[1]) + if graph_to_retrieve in [object_interaction_graph, object_cobirth_graph, object_codeath_graph]: + # undirected + if not el[1] in graph: + graph[el[1]] = set() + graph[el[1]].add(el[0]) + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ocel.object_id_column].to_numpy() + + feature_names = [] + for x in feature_names_objects: + feature_names.append("@@obj_graph_con_min_"+x) + feature_names.append("@@obj_graph_con_max_"+x) + + data = [] + + for obj in ordered_objects: + arr = [] + + con_obj = [] + if obj in graph: + for y in graph[obj]: + con_obj.append(dct_dct_objects[y]) + + for x in feature_names_objects: + if con_obj: + min_v = float(min(y[x] for y in con_obj)) + max_v = float(max(y[x] for y in con_obj)) + else: + min_v = 0.0 + max_v = 0.0 + arr.append(min_v) + arr.append(max_v) + data.append(arr) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_cobirth_graph.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_cobirth_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..27b79edafbda3553a1a5e6a21792ae5089731169 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_cobirth_graph.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.transformation.ocel.graphs import object_cobirth_graph + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object the total number of cobirth object as feature + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + g0 = object_cobirth_graph.apply(ocel, parameters=parameters) + conn = {} + + for obj in ordered_objects: + conn[obj] = set() + + for el in g0: + conn[el[0]].add(el[1]) + conn[el[1]].add(el[0]) + + data = [] + feature_names = ["@@object_cobirth"] + + for obj in ordered_objects: + data.append([float(len(conn[obj]))]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_codeath_graph.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_codeath_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..21444ae60d4d3fc2f0606d65de83460e6f72c115 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_codeath_graph.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.transformation.ocel.graphs import object_codeath_graph + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object the total number of codeath object as feature + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + g0 = object_codeath_graph.apply(ocel, parameters=parameters) + conn = {} + + for obj in ordered_objects: + conn[obj] = set() + + for el in g0: + conn[el[0]].add(el[1]) + conn[el[1]].add(el[0]) + + data = [] + feature_names = ["@@object_codeath"] + + for obj in ordered_objects: + data.append([float(len(conn[obj]))]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_degree_centrality.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_degree_centrality.py new file mode 100644 index 0000000000000000000000000000000000000000..b972a94e2ff4d385ed671f2e4e6c4af2a05885d2 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_degree_centrality.py @@ -0,0 +1,63 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import nx_utils +from typing import Optional, Dict, Any +from pm4py.algo.transformation.ocel.graphs import object_interaction_graph + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object the centrality degree as feature + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + g0 = object_interaction_graph.apply(ocel, parameters=parameters) + g = nx_utils.Graph() + for edge in g0: + g.add_edge(edge[0], edge[1]) + + centrality = nx_utils.degree_centrality(g) + + data = [] + feature_names = ["@@object_degree_centrality"] + + for obj in ordered_objects: + if obj in centrality: + data.append([float(centrality[obj])]) + else: + data.append([0.0]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_general_descendants_graph.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_general_descendants_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..718df41eac9ac71a2249403780f3d901dcac64d2 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_general_descendants_graph.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.transformation.ocel.graphs import object_descendants_graph + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object the number of descendants as feature + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + g0 = object_descendants_graph.apply(ocel, parameters=parameters) + + data = [] + feature_names = ["@@object_general_descendants_graph_ascendants", "@@object_general_descendants_graph_descendants"] + + ascendants = {} + descendants = {} + + for obj in ordered_objects: + ascendants[obj] = [] + descendants[obj] = [] + for el in g0: + descendants[el[0]].append(el[1]) + ascendants[el[1]].append(el[0]) + + for obj in ordered_objects: + data.append([float(len(ascendants[obj])), float(len(descendants[obj]))]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_general_inheritance_graph.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_general_inheritance_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..b18bdf245e3596d36261b19d4837a6805f80ad11 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_general_inheritance_graph.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.transformation.ocel.graphs import object_inheritance_graph + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object the total number of inheritance object (they birth when the given object die) as feature + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + g0 = object_inheritance_graph.apply(ocel, parameters=parameters) + + data = [] + feature_names = ["@@object_general_inheritance_graph_ascendants", "@@object_general_inheritance_graph_descendants"] + + ascendants = {} + descendants = {} + + for obj in ordered_objects: + ascendants[obj] = [] + descendants[obj] = [] + for el in g0: + descendants[el[0]].append(el[1]) + ascendants[el[1]].append(el[0]) + + for obj in ordered_objects: + data.append([float(len(ascendants[obj])), float(len(descendants[obj]))]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_general_interaction_graph.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_general_interaction_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..29c3d8299a21b79a9069c2fd4565a5829a4b28d0 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_general_interaction_graph.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.transformation.ocel.graphs import object_interaction_graph + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object the total number of interacting object as feature + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + g0 = object_interaction_graph.apply(ocel, parameters=parameters) + conn = {} + + for obj in ordered_objects: + conn[obj] = set() + + for el in g0: + conn[el[0]].add(el[1]) + conn[el[1]].add(el[0]) + + data = [] + feature_names = ["@@object_general_interaction_graph"] + + for obj in ordered_objects: + data.append([float(len(conn[obj]))]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_activities.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_activities.py new file mode 100644 index 0000000000000000000000000000000000000000..e81c7f03f5856550ac13118ec002efe239e657af --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_activities.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.util import pandas_utils + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object an one-hot-encoding of the activities performed in its lifecycle + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + activities = pandas_utils.format_unique(ocel.events[ocel.event_activity].unique()) + lifecycle = ocel.relations.groupby(ocel.object_id_column)[ocel.event_activity].agg(list).to_dict() + + data = [] + feature_names = ["@@ocel_lif_activity_"+str(x) for x in activities] + + for obj in ordered_objects: + data.append([]) + if obj in lifecycle: + lif = lifecycle[obj] + else: + lif = [] + for act in activities: + data[-1].append(float(len(list(x for x in lif if x == act)))) + + return data, feature_names + diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_duration.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_duration.py new file mode 100644 index 0000000000000000000000000000000000000000..577c32fd9b4d42fe1b2e12a766dcfee09f38f406 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_duration.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object as features: + - the duration of its lifecycle + - the start timestamp + - the end timestamp + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + first_object_timestamp = ocel.relations.groupby(ocel.object_id_column).first()[ocel.event_timestamp].to_dict() + last_object_timestamp = ocel.relations.groupby(ocel.object_id_column).last()[ocel.event_timestamp].to_dict() + + data = [] + feature_names = ["@@object_lifecycle_duration", "@@object_lifecycle_start_timestamp", "@@object_lifecycle_end_timestamp"] + + for obj in ordered_objects: + if obj in first_object_timestamp: + se = first_object_timestamp[obj].timestamp() + ee = last_object_timestamp[obj].timestamp() + data.append([float(ee - se), float(se), float(ee)]) + else: + data.append([0, 0, 0]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_length.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_length.py new file mode 100644 index 0000000000000000000000000000000000000000..6b2850eb48a7d81f8bfcad20d99275911c829eba --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_length.py @@ -0,0 +1,55 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object the number of events in its lifecycle as feature + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ocel.object_id_column].to_numpy() + + lifecycle_length = ocel.relations.groupby(ocel.object_id_column).size().to_dict() + + data = [] + feature_names = ["@@object_lifecycle_length"] + + for obj in ordered_objects: + if obj in lifecycle_length: + data.append([float(lifecycle_length[obj])]) + else: + data.append([0.0]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_paths.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_paths.py new file mode 100644 index 0000000000000000000000000000000000000000..685775956dac4e7d9e81006538888b6c943e6971 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_paths.py @@ -0,0 +1,68 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object an one-hot-encoding of the paths performed in its lifecycle + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + lifecycle = ocel.relations.groupby(ocel.object_id_column)[ocel.event_activity].agg(list).to_dict() + + data = [] + paths = {} + all_paths = set() + for obj in lifecycle: + paths[obj] = [] + lobj = lifecycle[obj] + for i in range(len(lobj)-1): + path = lobj[i]+"##"+lobj[i+1] + paths[obj].append(path) + all_paths.add(path) + + all_paths = sorted(list(all_paths)) + feature_names = ["@@ocel_lif_path_"+str(x) for x in all_paths] + + for obj in ordered_objects: + lif = paths[obj] if obj in paths else [] + data.append([]) + for p in all_paths: + data[-1].append(float(len(list(x for x in lif if x == p)))) + + return data, feature_names + diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_unq_act.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_unq_act.py new file mode 100644 index 0000000000000000000000000000000000000000..f3ce48dda79e2197192235aa429416e496d496d7 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_lifecycle_unq_act.py @@ -0,0 +1,58 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object the number of unique activities in its lifecycle as feature + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + lifecycle_unq = ocel.relations.groupby([ocel.object_id_column, ocel.event_activity]).first().reset_index() + lifecycle_unq = lifecycle_unq.groupby(ocel.object_id_column).size().to_dict() + + data = [] + feature_names = ["@@object_lifecycle_unq_act"] + + for obj in ordered_objects: + if obj in lifecycle_unq: + data.append([float(lifecycle_unq[obj])]) + else: + data.append([0.0]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_num_attributes.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_num_attributes.py new file mode 100644 index 0000000000000000000000000000000000000000..c5b28bcdbfc0b000068f4f61fb83bb699a3b7dec --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_num_attributes.py @@ -0,0 +1,72 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + OBJECT_NUM_ATTRIBUTES = "num_obj_attr" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Enables the extraction of a given collection of numeric object attributes in the feature table + (specified inside the "num_obj_attr" parameter) + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm: + - Parameters.OBJECT_NUM_ATTRIBUTES => collection of numeric attributes to consider for feature extraction + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + data = [] + feature_names = [] + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + object_num_attributes = exec_utils.get_param_value(Parameters.OBJECT_NUM_ATTRIBUTES, parameters, None) + + if object_num_attributes is not None: + feature_names = feature_names + ["@@event_num_"+x for x in object_num_attributes] + + attr_values = {} + for attr in object_num_attributes: + values = ocel.objects[[ocel.object_id_column, attr]].dropna(subset=[attr]).to_dict("records") + values = {x[ocel.object_id_column]: x[attr] for x in values} + attr_values[attr] = values + + for obj in ordered_objects: + data.append([]) + for attr in object_num_attributes: + data[-1].append(float(attr_values[attr][obj]) if obj in attr_values[attr] else 0.0) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_str_attributes.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_str_attributes.py new file mode 100644 index 0000000000000000000000000000000000000000..5e244d81ffffc676b7f2daa212da99b9bb986f07 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_str_attributes.py @@ -0,0 +1,85 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + OBJECT_STR_ATTRIBUTES = "str_obj_attr" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + One-hot-encoding of a given collection of string object attributes + (specified inside the "str_obj_attr" parameter) + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm: + - Parameters.OBJECT_STR_ATTRIBUTES => collection of string attributes to consider for feature extraction. + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + data = [] + feature_names = [] + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + object_str_attributes = exec_utils.get_param_value(Parameters.OBJECT_STR_ATTRIBUTES, parameters, None) + + if object_str_attributes is not None: + dct_corr = {} + dct_corr_values = {} + + for attr in object_str_attributes: + objects_attr_not_na = ocel.objects[[ocel.object_id_column, attr]].dropna(subset=[attr]).to_dict("records") + if objects_attr_not_na: + objects_attr_not_na = {x[ocel.object_id_column]: x[attr] for x in objects_attr_not_na} + dct_corr[attr] = objects_attr_not_na + dct_corr_values[attr] = list(set(objects_attr_not_na.values())) + + dct_corr_list = list(dct_corr) + + for attr in dct_corr_list: + for value in dct_corr_values[attr]: + feature_names.append("@@object_attr_value_"+attr+"_"+value) + + for ev in ordered_objects: + data.append([0] * len(feature_names)) + count = 0 + for attr in dct_corr_list: + if ev in dct_corr[attr]: + value = dct_corr[attr][ev] + idx = count + dct_corr_values[attr].index(value) + data[-1][idx] = 1.0 + count += len(dct_corr_values[attr]) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/object_work_in_progress.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_work_in_progress.py new file mode 100644 index 0000000000000000000000000000000000000000..64cf55475ab989005becd9a7e30ca76223f72b59 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/object_work_in_progress.py @@ -0,0 +1,69 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.util import pandas_utils +from pm4py.algo.transformation.ocel.features.objects import object_lifecycle_duration +import pandas as pd + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Assigns to each object a feature which is the number of objects that are open during the lifecycle + of the object. + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm: + - Parameters.OBJECT_STR_ATTRIBUTES => collection of string attributes to consider for feature extraction. + + Returns + ---------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + data, feature_names = object_lifecycle_duration.apply(ocel, parameters=parameters) + obj_dur = pandas_utils.instantiate_dataframe(data, columns=feature_names) + + obj_dur["@@index"] = obj_dur.index + obj_dur = obj_dur.to_dict("records") + + data = [] + obj_dur.sort(key=lambda x: (x["@@object_lifecycle_start_timestamp"], x["@@object_lifecycle_end_timestamp"])) + for i in range(len(obj_dur)): + j = i + 1 + ct = obj_dur[i]["@@object_lifecycle_end_timestamp"] + while j < len(obj_dur): + st = obj_dur[j]["@@object_lifecycle_start_timestamp"] + if st > ct: + break + j = j + 1 + data.append([j - i, obj_dur[i]["@@index"]]) + feature_names = ["@@object_wip"] + + data.sort(key=lambda x: x[1]) + data = [[float(x[0])] for x in data] + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/objects_interaction_graph_ot.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/objects_interaction_graph_ot.py new file mode 100644 index 0000000000000000000000000000000000000000..558840bdc2ff167272efc73f8c749ab0d7167b21 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/objects_interaction_graph_ot.py @@ -0,0 +1,71 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.transformation.ocel.graphs import object_interaction_graph +from pm4py.util import pandas_utils + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Adds for each object, and each object type, the number of interacting objects as a feature. + + Parameters + ----------------- + ocel + OCEL + parameters + Parameters of the algorithm + + Returns + ----------------- + data + Values of the added features + feature_names + Names of the added features + """ + if parameters is None: + parameters = {} + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + object_types = pandas_utils.format_unique(ocel.objects[ocel.object_type_column].unique()) + + object_type_association = ocel.objects[[ocel.object_id_column, ocel.object_type_column]].to_dict("records") + object_type_association = {x[ocel.object_id_column]: x[ocel.object_type_column] for x in object_type_association} + + g0 = object_interaction_graph.apply(ocel, parameters=parameters) + conn = {} + + for obj in ordered_objects: + conn[obj] = set() + + for el in g0: + conn[el[0]].add(el[1]) + conn[el[1]].add(el[0]) + + data = [] + feature_names = ["@@object_interaction_graph_"+ot for ot in object_types] + + for obj in ordered_objects: + data.append([]) + for ot in object_types: + cot = [x for x in conn[obj] if object_type_association[x] == ot] + data[-1].append(float(len(cot))) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/related_activities_features.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/related_activities_features.py new file mode 100644 index 0000000000000000000000000000000000000000..52e504f1914fdc6653f12687616de4ec35354ff0 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/related_activities_features.py @@ -0,0 +1,88 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Associates to each object and activity in the log the last value of the feature for a related event + of the given activity, if exists + + Parameters + ---------------- + ocel + Object-centric event log + parameters + Parameters + + Returns + ----------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + from pm4py.algo.transformation.ocel.features.events import algorithm as event_based_features + + data_events, feature_names_events = event_based_features.apply(ocel, parameters=parameters) + dct_dct_events = event_based_features.transform_features_to_dict_dict(ocel, data_events, feature_names_events, parameters=parameters) + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ + ocel.object_id_column].to_numpy() + + stream = ocel.relations[[ocel.event_id_column, ocel.object_id_column, ocel.event_activity]].to_dict("records") + obj_rel_evs = {} + + for cou in stream: + if cou[ocel.object_id_column] not in obj_rel_evs: + obj_rel_evs[cou[ocel.object_id_column]] = [] + obj_rel_evs[cou[ocel.object_id_column]].append(cou[ocel.event_id_column]) + + ev_act = {} + activities = set() + + for cou in stream: + ev_act[cou[ocel.event_id_column]] = cou[ocel.event_activity] + activities.add(cou[ocel.event_activity]) + + feature_names = [] + for x in feature_names_events: + for a in activities: + feature_names.append("@@ev_act_fea_"+a+"_"+x) + + data = [] + for obj in ordered_objects: + arr = [] + objs_act = {} + if obj in obj_rel_evs: + for ev in obj_rel_evs[obj]: + objs_act[ev_act[ev]] = ev + for x in feature_names_events: + for a in activities: + if a in objs_act: + val = float(dct_dct_events[objs_act[a]][x]) + else: + val = 0.0 + arr.append(val) + data.append(arr) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/features/objects/related_events_features.py b/pm4py/pm4py/algo/transformation/ocel/features/objects/related_events_features.py new file mode 100644 index 0000000000000000000000000000000000000000..c6f35398df1c417899aa91bfb1ccc6eb220f2799 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/features/objects/related_events_features.py @@ -0,0 +1,77 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Extracts for each object the minimum and the maximum value of the features for the events related to the object. + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters + + Returns + ----------------- + data + Extracted feature values + feature_names + Feature names + """ + if parameters is None: + parameters = {} + + from pm4py.algo.transformation.ocel.features.events import algorithm as event_based_features + + data_events, feature_names_events = event_based_features.apply(ocel, parameters=parameters) + dct_dct_events = event_based_features.transform_features_to_dict_dict(ocel, data_events, feature_names_events, parameters=parameters) + + ordered_objects = parameters["ordered_objects"] if "ordered_objects" in parameters else ocel.objects[ocel.object_id_column].to_numpy() + + stream = ocel.relations[[ocel.event_id_column, ocel.object_id_column]].to_dict("records") + obj_rel_evs = {} + + for cou in stream: + if cou[ocel.object_id_column] not in obj_rel_evs: + obj_rel_evs[cou[ocel.object_id_column]] = [] + obj_rel_evs[cou[ocel.object_id_column]].append(dct_dct_events[cou[ocel.event_id_column]]) + + data = [] + feature_names = [] + for x in feature_names_events: + feature_names.append("@@rel_eve_min_"+x) + feature_names.append("@@rel_eve_max_"+x) + + for obj in ordered_objects: + arr = [] + for x in feature_names_events: + if obj in obj_rel_evs: + min_v = float(min(y[x] for y in obj_rel_evs[obj])) + max_v = float(max(y[x] for y in obj_rel_evs[obj])) + else: + min_v = 0.0 + max_v = 0.0 + arr.append(min_v) + arr.append(max_v) + data.append(arr) + + return data, feature_names diff --git a/pm4py/pm4py/algo/transformation/ocel/graphs/__init__.py b/pm4py/pm4py/algo/transformation/ocel/graphs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..200aabd371d6a24ad9ced602eaf554468b3eaa3e --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/graphs/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.ocel.graphs import object_descendants_graph, object_interaction_graph, object_cobirth_graph, object_codeath_graph, object_inheritance_graph diff --git a/pm4py/pm4py/algo/transformation/ocel/graphs/object_cobirth_graph.py b/pm4py/pm4py/algo/transformation/ocel/graphs/object_cobirth_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..919be94867c4bc4f8e97518529f19f0c718afd62 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/graphs/object_cobirth_graph.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any, Set, Tuple + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Set[Tuple[str, str]]: + """ + Calculates the object cobirth graph. + This is calculated as follows: + - Given the set of objects related to an event, they belong to two different categories: + - The "seen" objects (they have appeared in some earlier event) + - The "unseen" objects (they appear for the first time in the current event). + - Every "unseen" object is connected to every "unseen" object + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm + + Returns + ------------------ + object_cobirth_graph + Object cobirth graph (undirected) + """ + if parameters is None: + parameters = {} + + graph = set() + + ordered_events = ocel.events[ocel.event_id_column].to_numpy() + ev_rel_obj = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + set_objects = set() + + for ev in ordered_events: + rel_obj = ev_rel_obj[ev] + rel_obj_seen = {x for x in rel_obj if x in set_objects} + rel_obj_unseen = {x for x in rel_obj if x not in rel_obj_seen} + + for o1 in rel_obj_unseen: + for o2 in rel_obj_unseen: + if o1 < o2: + graph.add((o1, o2)) + + for obj in rel_obj_unseen: + set_objects.add(obj) + + return graph diff --git a/pm4py/pm4py/algo/transformation/ocel/graphs/object_codeath_graph.py b/pm4py/pm4py/algo/transformation/ocel/graphs/object_codeath_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..198b257c9309902f531ba12e42c60de3d925101b --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/graphs/object_codeath_graph.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any, Set, Tuple + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Set[Tuple[str, str]]: + """ + Calculates the object codeath graph. + + This is calculated like the object cobirth graph, but visiting the list of events + in the reverse order. + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm + + Returns + ------------------ + object_codeath_graph + Object codeath graph (undirected) + """ + if parameters is None: + parameters = {} + + graph = set() + + ordered_events = ocel.events[ocel.event_id_column].to_numpy().tolist() + ev_rel_obj = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + set_objects = set() + + ordered_events.reverse() + + for ev in ordered_events: + rel_obj = ev_rel_obj[ev] + rel_obj_seen = {x for x in rel_obj if x in set_objects} + rel_obj_unseen = {x for x in rel_obj if x not in rel_obj_seen} + + for o1 in rel_obj_unseen: + for o2 in rel_obj_unseen: + if o1 < o2: + graph.add((o1, o2)) + + for obj in rel_obj_unseen: + set_objects.add(obj) + + return graph diff --git a/pm4py/pm4py/algo/transformation/ocel/graphs/object_descendants_graph.py b/pm4py/pm4py/algo/transformation/ocel/graphs/object_descendants_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..5a79ce0f0624628f0e91bf900a605ce9f067dcb2 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/graphs/object_descendants_graph.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any, Set, Tuple + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Set[Tuple[str, str]]: + """ + Calculates the object descendant graph. + This is calculated as follows: + - Given the set of objects related to an event, they belong to two different categories: + - The "seen" objects (they have appeared in some earlier event) + - The "unseen" objects (they appear for the first time in the current event). + - Every "seen" object is connected to every "unseen" object. + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm + + Returns + ------------------ + object_descendant_graph + Object descendant graph (directed) + """ + if parameters is None: + parameters = {} + + graph = set() + + ordered_events = ocel.events[ocel.event_id_column].to_numpy() + ev_rel_obj = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + set_objects = set() + + for ev in ordered_events: + rel_obj = ev_rel_obj[ev] + rel_obj_seen = {x for x in rel_obj if x in set_objects} + rel_obj_unseen = {x for x in rel_obj if x not in rel_obj_seen} + if rel_obj_seen and rel_obj_unseen: + for o1 in rel_obj_seen: + for o2 in rel_obj_unseen: + graph.add((o1, o2)) + for obj in rel_obj_unseen: + set_objects.add(obj) + + return graph diff --git a/pm4py/pm4py/algo/transformation/ocel/graphs/object_inheritance_graph.py b/pm4py/pm4py/algo/transformation/ocel/graphs/object_inheritance_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..08bab7703a2367a918f08bf5058c30cac8870d0c --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/graphs/object_inheritance_graph.py @@ -0,0 +1,83 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any, Set, Tuple +from copy import copy + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Set[Tuple[str, str]]: + """ + Calculates the object descendants graph. + Two objects o1 and o2, both related to an event e, are connected if: + - e is the last event of the lifecycle of o1 + - e is the first event of the lifecycle of o2 + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm + + Returns + ----------------- + object_inheritance_graph + Object inheritance graph (directed) + """ + if parameters is None: + parameters = {} + + graph = set() + + ordered_events = ocel.events[ocel.event_id_column].to_numpy().tolist() + ev_rel_obj = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + last_event_per_obj = {} + set_objects = set() + + ordered_events_revert = copy(ordered_events) + ordered_events_revert.reverse() + + for ev in ordered_events_revert: + rel_obj = ev_rel_obj[ev] + rel_obj_seen = {x for x in rel_obj if x in set_objects} + rel_obj_unseen = {x for x in rel_obj if x not in rel_obj_seen} + + for obj in rel_obj_unseen: + last_event_per_obj[obj] = ev + set_objects.add(obj) + + set_objects = set() + + for ev in ordered_events: + rel_obj = ev_rel_obj[ev] + rel_obj_seen = {x for x in rel_obj if x in set_objects} + rel_obj_unseen = {x for x in rel_obj if x not in rel_obj_seen} + rel_obj_last = {x for x in rel_obj if last_event_per_obj[x] == ev} + + for o2 in rel_obj_unseen: + for o1 in rel_obj_last: + if o1 != o2: + graph.add((o1, o2)) + set_objects.add(o2) + + graph_it = list(graph) + for el in graph_it: + if (el[1], el[0]) in graph: + graph.remove((el[0], el[1])) + graph.remove((el[1], el[0])) + + return graph diff --git a/pm4py/pm4py/algo/transformation/ocel/graphs/object_interaction_graph.py b/pm4py/pm4py/algo/transformation/ocel/graphs/object_interaction_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..42ea8eecd5770bfe07c69e1d5dead63c7ef57326 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/graphs/object_interaction_graph.py @@ -0,0 +1,52 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any, Set, Tuple + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Set[Tuple[str, str]]: + """ + Calculates the object interaction graph. Two objects are connected iff they are both related to an event + of the OCEL. + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm + + Returns + ----------------- + object_interaction_graph + Object interaction graph (as set of tuples; undirected) + """ + if parameters is None: + parameters = {} + + graph = set() + + ev_rel_obj = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + + for ev in ev_rel_obj: + rel_obj = ev_rel_obj[ev] + for o1 in rel_obj: + for o2 in rel_obj: + if o1 < o2: + graph.add((o1, o2)) + + return graph diff --git a/pm4py/pm4py/algo/transformation/ocel/graphs/ocel20_computation.py b/pm4py/pm4py/algo/transformation/ocel/graphs/ocel20_computation.py new file mode 100644 index 0000000000000000000000000000000000000000..b5ac28ac795b5303c8825d254fedd219eb9083b1 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/graphs/ocel20_computation.py @@ -0,0 +1,86 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +from pm4py.algo.transformation.ocel.graphs import object_interaction_graph, object_descendants_graph, object_cobirth_graph, object_codeath_graph +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from copy import copy +import pandas as pd + + +class Parameters(Enum): + INCLUDED_GRAPHS = "included_graphs" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Inserts the information inferred from the graph computations in the list of O2O relations of the OCEL + + Parameters + ---------------- + ocel + Object-centric event log + parameters + Possible parameters of the algorithm: + - Parameters.INCLUDED_GRAPHS => graphs to include in the list of O2O relations + (object_interaction_graph, object_descendants_graph, object_inheritance_graph, object_cobirth_graph, object_codeath_graph) + + Returns + --------------- + enriched_ocel + Enriched object-centric event log + """ + if parameters is None: + parameters = {} + + included_graphs = exec_utils.get_param_value(Parameters.INCLUDED_GRAPHS, parameters, None) + if included_graphs is None: + included_graphs = {"object_interaction_graph", "object_descendants_graph", "object_inheritance_graph", "object_cobirth_graph", "object_codeath_graph"} + + o2o = set() + + if "object_interaction_graph" in included_graphs: + graph = object_interaction_graph.apply(ocel, parameters=parameters) + for el in graph: + if el[0] != el[1]: + o2o.add((el[0], el[1], "object_interaction_graph")) + o2o.add((el[1], el[0], "object_interaction_graph")) + if "object_descendants_graph" in included_graphs: + graph = object_descendants_graph.apply(ocel, parameters=parameters) + for el in graph: + o2o.add((el[0], el[1], "object_descendants_graph")) + if "object_inheritance_graph" in included_graphs: + graph = object_descendants_graph.apply(ocel, parameters=parameters) + for el in graph: + o2o.add((el[0], el[1], "object_inheritance_graph")) + if "object_cobirth_graph" in included_graphs: + graph = object_cobirth_graph.apply(ocel, parameters=parameters) + for el in graph: + o2o.add((el[0], el[1], "object_cobirth_graph")) + if "object_codeath_graph" in included_graphs: + graph = object_codeath_graph.apply(ocel, parameters=parameters) + for el in graph: + o2o.add((el[0], el[1], "object_codeath_graph")) + + o2o = [{ocel.object_id_column: x[0], ocel.object_id_column+"_2": x[1], ocel.qualifier: x[2]} for x in o2o] + ocel = copy(ocel) + o2o = pandas_utils.instantiate_dataframe(o2o) + ocel.o2o = pandas_utils.concat([ocel.o2o, o2o]) + + return ocel diff --git a/pm4py/pm4py/algo/transformation/ocel/split_ocel/__init__.py b/pm4py/pm4py/algo/transformation/ocel/split_ocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3add96b17e82ff49f9c35061dff3670f6085de32 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/split_ocel/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.ocel.split_ocel import algorithm, variants diff --git a/pm4py/pm4py/algo/transformation/ocel/split_ocel/algorithm.py b/pm4py/pm4py/algo/transformation/ocel/split_ocel/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..565fd4ae18d48d4cab7c3a8f4be89e5248065728 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/split_ocel/algorithm.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.algo.transformation.ocel.split_ocel.variants import connected_components, ancestors_descendants +from pm4py.util import exec_utils + + +class Variants(Enum): + CONNECTED_COMPONENTS = connected_components + ANCESTORS_DESCENDANTS = ancestors_descendants + + +def apply(ocel: OCEL, variant=Variants.CONNECTED_COMPONENTS, parameters: Optional[Dict[Any, Any]] = None): + """ + Splits an OCEL into sub-OCELs using a given criteria (variant). + + Parameters + ---------------- + ocel + OCEL + variant + Variant of the algorithm to be used, possible values: + - Variants.CONNECTED_COMPONENTS + + Returns + ---------------- + splitted_ocel + List of OCELs found based on the connected components + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(ocel, parameters) diff --git a/pm4py/pm4py/algo/transformation/ocel/split_ocel/variants/__init__.py b/pm4py/pm4py/algo/transformation/ocel/split_ocel/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7bb3210df2c6d646eeeaa0ff2d409bca7ea6d8f0 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/split_ocel/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.transformation.ocel.split_ocel.variants import connected_components diff --git a/pm4py/pm4py/algo/transformation/ocel/split_ocel/variants/ancestors_descendants.py b/pm4py/pm4py/algo/transformation/ocel/split_ocel/variants/ancestors_descendants.py new file mode 100644 index 0000000000000000000000000000000000000000..86aad6082554c38026b5a19a6790c2e822ae0a1b --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/split_ocel/variants/ancestors_descendants.py @@ -0,0 +1,90 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum + +from pm4py.util import exec_utils, nx_utils +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any, Collection +import sys + +class Parameters(Enum): + OBJECT_TYPE = "object_type" + MAX_OBJS = "max_objs" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Collection[OCEL]: + """ + Provided an object-centric event log and the specification of an object type, + splits the OCEL in one OCEL per object of the given object type, + which is the original OCEL filtered on the current object plus its ascendants and descendants + + Parameters + --------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.OBJECT_TYPE => the object type to consider when applying the algorithm + + Returns + --------------- + lst_ocels + List of OCELs with the aforementioned possibilities + """ + if parameters is None: + parameters = {} + + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, None) + if object_type is None: + raise Exception("the object type should be provided as parameter") + max_objs = exec_utils.get_param_value(Parameters.MAX_OBJS, parameters, sys.maxsize) + + import pm4py + interaction_graph = pm4py.discover_objects_graph(ocel, "object_interaction") + + objects_start = ocel.relations.groupby(ocel.object_id_column)[ocel.event_timestamp].first().to_dict() + objects = ocel.objects[ocel.objects[ocel.object_type_column] == object_type][ocel.object_id_column].to_numpy().tolist() + + G = nx_utils.DiGraph() + for obj in objects: + G.add_node(obj) + for edge in interaction_graph: + if objects_start[edge[0]] < objects_start[edge[1]]: + G.add_edge(edge[0], edge[1]) + elif objects_start[edge[0]] <= objects_start[edge[1]] and edge[0] in objects: + G.add_edge(edge[0], edge[1]) + elif objects_start[edge[0]] > objects_start[edge[1]]: + G.add_edge(edge[1], edge[0]) + elif objects_start[edge[0]] >= objects_start[edge[1]] and edge[1] in objects: + G.add_edge(edge[1], edge[0]) + + lst = [] + + for index, obj in enumerate(objects): + if index >= max_objs: + break + + ancestors = nx_utils.ancestors(G, obj) + descendants = nx_utils.descendants(G, obj) + overall_set = ancestors.union(descendants).union({obj}) + + filtered_ocel = pm4py.filter_ocel_objects(ocel, overall_set) + filtered_ocel.parameters["@@central_object"] = obj + lst.append(filtered_ocel) + + return lst diff --git a/pm4py/pm4py/algo/transformation/ocel/split_ocel/variants/connected_components.py b/pm4py/pm4py/algo/transformation/ocel/split_ocel/variants/connected_components.py new file mode 100644 index 0000000000000000000000000000000000000000..22ac53bb4aaba6b311cc31552b358ca3bc936535 --- /dev/null +++ b/pm4py/pm4py/algo/transformation/ocel/split_ocel/variants/connected_components.py @@ -0,0 +1,91 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.algo.transformation.ocel.graphs import object_interaction_graph +from pm4py.util import exec_utils, pandas_utils, nx_utils +from enum import Enum +import sys + + +class Parameters(Enum): + CENTRALITY_MEASURE = "centrality_measure" + MAX_VALUE_CENTRALITY = "max_value_centrality" + ENABLE_PRINTS = "enable_prints" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Split the OCEL based on the connected components of the object interaction graph. + It is also possible, to remove the nodes with higher centrality providing a centrality measure + and a maximum value of this centrality. + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the algorithm, including: + - Parameters.CENTRALITY_MEASURE => centrality measure + - Parameters.MAX_VALUE_CENTRALITY => maximum value of centrality + + Returns + ---------------- + splitted_ocel + List of OCELs found based on the connected components + """ + if parameters is None: + parameters = {} + + centrality_measure = exec_utils.get_param_value(Parameters.CENTRALITY_MEASURE, parameters, None) + max_value_centrality = exec_utils.get_param_value(Parameters.MAX_VALUE_CENTRALITY, parameters, sys.maxsize) + enable_prints = exec_utils.get_param_value(Parameters.ENABLE_PRINTS, parameters, False) + + g0 = object_interaction_graph.apply(ocel, parameters=parameters) + g = nx_utils.Graph() + + for edge in g0: + g.add_edge(edge[0], edge[1]) + + removed_nodes = set() + + if centrality_measure is not None: + degree_centrality = centrality_measure(g) + if enable_prints: + print(sorted([(x, y) for x, y in degree_centrality.items()], key=lambda x: (x[1], x[0]), reverse=True)) + + for n in degree_centrality: + if degree_centrality[n] > max_value_centrality: + if enable_prints: + print("removing", n) + removed_nodes.add(n) + g.remove_node(n) + + conn_comp = list(nx_utils.connected_components(g)) + + ret = [] + + for index, cc in enumerate(conn_comp): + subocel = OCEL() + subocel.objects = ocel.objects[ocel.objects[ocel.object_id_column].isin(cc)] + subocel.relations = ocel.relations[ocel.relations[ocel.object_id_column].isin(cc)] + included_evs = pandas_utils.format_unique(subocel.relations[ocel.event_id_column].unique()) + subocel.events = ocel.events[ocel.events[ocel.event_id_column].isin(included_evs)] + + ret.append(subocel) + + return ret diff --git a/pm4py/pm4py/analysis.py b/pm4py/pm4py/analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..53e1217e13886c166928e2d7b0e5c3b6a88a14f4 --- /dev/null +++ b/pm4py/pm4py/analysis.py @@ -0,0 +1,485 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +""" + +from typing import List, Optional, Tuple, Dict, Union, Generator, Set, Any + +from pm4py.objects.log.obj import Trace, EventLog, EventStream +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.utils import __event_log_deprecation_warning +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.utils import get_properties, pandas_utils, constants +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns + +import pandas as pd +import deprecation + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="this method will be removed in a future release.") +def construct_synchronous_product_net(trace: Trace, petri_net: PetriNet, initial_marking: Marking, + final_marking: Marking) -> Tuple[PetriNet, Marking, Marking]: + """ + constructs the synchronous product net between a trace and a Petri net process model. + + :param trace: trace of an event log + :param petri_net: petri net + :param initial_marking: initial marking + :param final_marking: final marking + + :rtype: ``Tuple[PetriNet, Marking, Marking]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('model.pnml') + log = pm4py.read_xes('log.xes') + sync_net, sync_im, sync_fm = pm4py.construct_synchronous_product_net(log[0], net, im, fm) + """ + from pm4py.objects.petri_net.utils.petri_utils import construct_trace_net + from pm4py.objects.petri_net.utils.synchronous_product import construct + from pm4py.objects.petri_net.utils.align_utils import SKIP + trace_net, trace_im, trace_fm = construct_trace_net(trace) + sync_net, sync_im, sync_fm = construct(trace_net, trace_im, trace_fm, petri_net, initial_marking, final_marking, + SKIP) + return sync_net, sync_im, sync_fm + + +def compute_emd(language1: Dict[List[str], float], language2: Dict[List[str], float]) -> float: + """ + Computes the earth mover distance between two stochastic languages (for example, the first extracted from the log, + and the second extracted from the process model. + + :param language1: (first) stochastic language + :param language2: (second) stochastic language + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/running-example.xes') + language_log = pm4py.get_stochastic_language(log) + print(language_log) + net, im, fm = pm4py.read_pnml('tests/input_data/running-example.pnml') + language_model = pm4py.get_stochastic_language(net, im, fm) + print(language_model) + emd_distance = pm4py.compute_emd(language_log, language_model) + print(emd_distance) + """ + from pm4py.algo.evaluation.earth_mover_distance import algorithm as earth_mover_distance + return earth_mover_distance.apply(language1, language2) + + +def solve_marking_equation(petri_net: PetriNet, initial_marking: Marking, + final_marking: Marking, cost_function: Dict[PetriNet.Transition, float] = None) -> float: + """ + Solves the marking equation of a Petri net. + The marking equation is solved as an ILP problem. + An optional transition-based cost function to minimize can be provided as well. + + :param petri_net: petri net + :param initial_marking: initial marking + :param final_marking: final marking + :param cost_function: optional cost function to use when solving the marking equation + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('model.pnml') + heuristic = pm4py.solve_marking_equation(net, im, fm) + """ + from pm4py.algo.analysis.marking_equation import algorithm as marking_equation + + if cost_function is None: + cost_function = dict() + for t in petri_net.transitions: + cost_function[t] = 1 + + me = marking_equation.build( + petri_net, initial_marking, final_marking, parameters={'costs': cost_function}) + return marking_equation.get_h_value(me) + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="this method will be removed in a future release.") +def solve_extended_marking_equation(trace: Trace, sync_net: PetriNet, sync_im: Marking, + sync_fm: Marking, split_points: Optional[List[int]] = None) -> float: + """ + Gets an heuristics value (underestimation of the cost of an alignment) between a trace + and a synchronous product net using the extended marking equation with the standard cost function + (e.g. sync moves get cost equal to 0, invisible moves get cost equal to 1, + other move on model / move on log get cost equal to 10000), with an optimal provisioning of the split + points + + :param trace: trace + :param sync_net: synchronous product net + :param sync_im: initial marking (of the sync net) + :param sync_fm: final marking (of the sync net) + :param split_points: if specified, the indexes of the events of the trace to be used as split points. If not specified, the split points are identified automatically. + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('model.pnml') + log = pm4py.read_xes('log.xes') + ext_mark_eq_heu = pm4py.solve_extended_marking_equation(log[0], net, im, fm) + """ + from pm4py.algo.analysis.extended_marking_equation import algorithm as extended_marking_equation + parameters = {} + if split_points is not None: + parameters[extended_marking_equation.Variants.CLASSIC.value.Parameters.SPLIT_IDX] = split_points + me = extended_marking_equation.build( + trace, sync_net, sync_im, sync_fm, parameters=parameters) + return extended_marking_equation.get_h_value(me) + + +def check_soundness(petri_net: PetriNet, initial_marking: Marking, + final_marking: Marking, print_diagnostics: bool = False) -> Tuple[bool, Dict[str, Any]]: + """ + Check if a given Petri net is a sound WF-net. + A Petri net is a WF-net iff: + - it has a unique source place + - it has a unique end place + - every element in the WF-net is on a path from the source to the sink place + A WF-net is sound iff: + - it contains no live-locks + - it contains no deadlocks + - we are able to always reach the final marking + For a formal definition of sound WF-net, consider: http://www.padsweb.rwth-aachen.de/wvdaalst/publications/p628.pdf + In the returned object, the first element is a boolean indicating if the Petri net is a sound workflow net. + The second element is a set of diagnostics collected while running WOFLAN + (expressed as a dictionary associating the keys [name of the diagnostics] with the corresponding diagnostics). + + :param petri_net: petri net + :param initial_marking: initial marking + :param final_marking: final marking + :param print_diagnostics: boolean value that sets up additional prints during the execution of WOFLAN + :rtype: ``Tuple[bool, Dict[str, Any]]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('model.pnml') + is_sound = pm4py.check_soundness(net, im, fm) + """ + from pm4py.algo.analysis.woflan import algorithm as woflan + return woflan.apply(petri_net, initial_marking, final_marking, + parameters={"return_asap_when_not_sound": True, "return_diagnostics": True, "print_diagnostics": print_diagnostics}) + + +def cluster_log(log: Union[EventLog, EventStream, pd.DataFrame], sklearn_clusterer=None, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Generator[EventLog, None, None]: + """ + Apply clustering to the provided event log + (method based on the extraction of profiles for the traces of the event log) + based on a Scikit-Learn clusterer (default: K-means with two clusters) + + :param log: log object + :param sklearn_clusterer: the Scikit-Learn clusterer to be used (default: KMeans(n_clusters=2, random_state=0, n_init="auto")) + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Generator[pd.DataFrame, None, None]`` + + .. code-block:: python3 + + import pm4py + + for clust_log in pm4py.cluster_log(df): + print(clust_log) + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + if sklearn_clusterer is not None: + properties["sklearn_clusterer"] = sklearn_clusterer + + from pm4py.algo.clustering.profiles import algorithm as clusterer + return clusterer.apply(log, parameters=properties) + + +def insert_artificial_start_end(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", artificial_start=constants.DEFAULT_ARTIFICIAL_START_ACTIVITY, artificial_end=constants.DEFAULT_ARTIFICIAL_END_ACTIVITY) -> Union[EventLog, pd.DataFrame]: + """ + Inserts the artificial start/end activities in an event log / Pandas dataframe + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param artificial_start: the symbol to be used as artificial start activity + :param artificial_end: the symbol to be used as artificial end activity + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + dataframe = pm4py.insert_artificial_start_end(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + properties[constants.PARAM_ARTIFICIAL_START_ACTIVITY] = artificial_start + properties[constants.PARAM_ARTIFICIAL_END_ACTIVITY] = artificial_end + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + from pm4py.objects.log.util import dataframe_utils + return dataframe_utils.insert_artificial_start_end(log, parameters=properties) + else: + from pm4py.objects.log.util import artificial + return artificial.insert_artificial_start_end(log, parameters=properties) + + +def insert_case_service_waiting_time(log: Union[EventLog, pd.DataFrame], service_time_column: str = "@@service_time", + sojourn_time_column: str = "@@sojourn_time", + waiting_time_column: str = "@@waiting_time", activity_key: str = "concept:name", + timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", + start_timestamp_key: str = "time:timestamp") -> pd.DataFrame: + """ + Inserts the service/waiting/sojourn times of the case in the dataframe. + + :param log: event log / Pandas dataframe + :param service_time_column: column to be used for the service time + :param sojourn_time_column: column to be used for the sojourn time + :param waiting_time_column: column to be used for the waiting time + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param start_timestamp_key: attribute to be used as start timestamp + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + dataframe = pm4py.insert_case_service_waiting_time(dataframe, activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name', start_timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + + log = log_converter.apply(log, variant=log_converter.Variants.TO_DATA_FRAME, parameters=properties) + + return pandas_utils.insert_case_service_waiting_time(log, case_id_column=case_id_key, timestamp_column=timestamp_key, start_timestamp_column=start_timestamp_key, service_time_column=service_time_column, waiting_time_column=waiting_time_column, sojourn_time_column=sojourn_time_column) + + +def insert_case_arrival_finish_rate(log: Union[EventLog, pd.DataFrame], arrival_rate_column="@@arrival_rate", finish_rate_column="@@finish_rate", + activity_key: str = "concept:name", + timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", + start_timestamp_key: str = "time:timestamp") -> pd.DataFrame: + """ + Inserts the arrival/finish rates of the case in the dataframe. + The arrival rate is computed as the difference between the start time of the case and the start time of the previous case to start. + The finish rate is computed as the difference between the end time of the case and the end time of the next case to end. + + :param log: event log / Pandas dataframe + :param arrival_rate_column: column to be used for the arrival rate + :param finish_rate_column: column to be used for the finish rate + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param start_timestamp_key: attribute to be used as start timestamp + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + dataframe = pm4py.insert_case_arrival_finish_rate(dataframe, activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name', start_timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + + log = log_converter.apply(log, variant=log_converter.Variants.TO_DATA_FRAME, parameters=properties) + + return pandas_utils.insert_case_arrival_finish_rate(log, case_id_column=case_id_key, timestamp_column=timestamp_key, start_timestamp_column=start_timestamp_key, arrival_rate_column=arrival_rate_column, finish_rate_column=finish_rate_column) + + +def check_is_workflow_net(net: PetriNet) -> bool: + """ + Checks if the input Petri net satisfies the WF-net conditions: + 1. unique source place + 2. unique sink place + 3. every node is on a path from the source to the sink + + :param net: petri net + :rtype: ``bool`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('model.pnml') + is_wfnet = pm4py.check_is_workflow_net(net, im, fm) + """ + from pm4py.algo.analysis.workflow_net import algorithm + return algorithm.apply(net) + + +def maximal_decomposition(net: PetriNet, im: Marking, fm: Marking) -> List[Tuple[PetriNet, Marking, Marking]]: + """ + Calculate the maximal decomposition of an accepting Petri net. + + :param net: petri net + :param im: initial marking + :param fm: final marking + :rtype: ``List[Tuple[PetriNet, Marking, Marking]]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('model.pnml') + list_nets = pm4py.maximal_decomposition(net, im, fm) + for anet in list_nets: + subnet, subim, subfm = anet + pm4py.view_petri_net(subnet, subim, subfm, format='svg') + """ + from pm4py.objects.petri_net.utils.decomposition import decompose + return decompose(net, im, fm) + + +def simplicity_petri_net(net: PetriNet, im: Marking, fm: Marking, variant: Optional[str] = "arc_degree") -> float: + """ + Computes the simplicity metric for a given Petri net model. + + The three available approaches are: + - Arc degree simplicity: described in the paper Vázquez-Barreiros, Borja, Manuel Mucientes, and Manuel Lama. "ProDiGen: Mining complete, precise and minimal structure process models with a genetic algorithm." Information Sciences 294 (2015): 315-333. + - Extended cardoso metric: described in the paper "Complexity Metrics for Workflow Nets" Lassen, Kristian Bisgaard, and Wil MP van der Aalst + - Extended cyclomatic metric: described in the paper "Complexity Metrics for Workflow Nets" Lassen, Kristian Bisgaard, and Wil MP van der Aalst + + + :param net: petri net + :param im: initial marking + :param fm: final marking + :param variant: variant to be used ('arc_degree', 'extended_cardoso', 'extended_cyclomatic') + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + simplicity = pm4py.simplicity_petri_net(net, im, fm, variant='arc_degree') + """ + if variant == "arc_degree": + from pm4py.algo.evaluation.simplicity.variants import arc_degree + return arc_degree.apply(net) + elif variant == "extended_cardoso": + from pm4py.algo.evaluation.simplicity.variants import extended_cardoso + return extended_cardoso.apply(net) + elif variant == "extended_cyclomatic": + from pm4py.algo.evaluation.simplicity.variants import extended_cyclomatic + return extended_cyclomatic.apply(net, im) + + +def generate_marking(net: PetriNet, place_or_dct_places: Union[str, PetriNet.Place, Dict[str, int], Dict[PetriNet.Place, int]]) -> Marking: + """ + Generate a marking for a given Petri net + + :param net: petri net + :param place_or_dct_places: place, or dictionary of places, to be used in the marking. Possible values: single Place object for the marking; name of the place for the marking; dictionary associating to each place its number of tokens; dictionary associating to names of places a number of tokens. + :rtype: ``Marking`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('model.pnml') + marking = pm4py.generate_marking(net, {'source': 2}) + """ + dct_places = {x.name: x for x in net.places} + if isinstance(place_or_dct_places, PetriNet.Place): + # we specified a single Place object for the marking + return Marking({place_or_dct_places: 1}) + elif isinstance(place_or_dct_places, str): + # we specified the name of a place for the marking + return Marking({dct_places[place_or_dct_places]: 1}) + elif isinstance(place_or_dct_places, dict): + dct_keys = list(place_or_dct_places) + if dct_keys: + if isinstance(dct_keys[0], PetriNet.Place): + # we specified a dictionary associating to each place its number of tokens + return Marking(place_or_dct_places) + elif isinstance(dct_keys[0], str): + # we specified a dictionary associating to names of places a number of tokens + return Marking({dct_places[x]: y for x, y in place_or_dct_places.items()}) + + +def reduce_petri_net_invisibles(net: PetriNet) -> PetriNet: + """ + Reduce the number of invisibles transitions in the provided Petri net. + + :param net: petri net + :rtype: ``PetriNet`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('model.pnml') + net = pm4py.reduce_petri_net_invisibles(net) + """ + from pm4py.objects.petri_net.utils import reduction + return reduction.apply_simple_reduction(net) + + +def reduce_petri_net_implicit_places(net: PetriNet, im: Marking, fm: Marking) -> Tuple[PetriNet, Marking, Marking]: + """ + Reduce the number of invisibles transitions in the provided Petri net. + + :param net: petri net + :param im: initial marking + :param fm: final marking + :rtype: ``Tuple[PetriNet, Marking, Marking]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('model.pnml') + net = pm4py.reduce_petri_net_implicit_places(net, im, fm) + """ + from pm4py.objects.petri_net.utils import murata + return murata.apply_reduction(net, im, fm) + + +def get_enabled_transitions(net: PetriNet, marking: Marking) -> Set[PetriNet.Transition]: + """ + Gets the transitions enabled in a given marking + + :param net: Petri net + :param marking: marking + :rtype: ``Set[PetriNet.Transition]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('tests/input_data/running-example.pnml') + # gets the transitions enabled in the initial marking + enabled_transitions = pm4py.get_enabled_transitions(net, im) + """ + from pm4py.objects.petri_net import semantics + return semantics.enabled_transitions(net, marking) diff --git a/pm4py/pm4py/cli.py b/pm4py/pm4py/cli.py new file mode 100644 index 0000000000000000000000000000000000000000..1d6b9b1bdffef410ecc972f3e0df3d850d80dc83 --- /dev/null +++ b/pm4py/pm4py/cli.py @@ -0,0 +1,210 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import pm4py +import sys +import os +import itertools +from pathlib import Path +import traceback +import pandas as pd +from pm4py.util import constants, pandas_utils + + +methods = { + "ConvertToXES": {"inputs": [".csv"], "output_extension": ".xes", + "method": lambda x: pm4py.write_xes( + pm4py.convert_to_event_log(pm4py.format_dataframe(pandas_utils.read_csv(x[0]))), x[1])}, + "ConvertToCSV": {"inputs": [".xes"], "output_extension": ".csv", + "method": lambda x: pm4py.convert_to_dataframe(pm4py.read_xes(x[0])).to_csv(x[1], index=False)}, + "ConvertPNMLtoBPMN": {"inputs": [".pnml"], "output_extension": ".bpmn", + "method": lambda x: pm4py.write_bpmn(pm4py.convert_to_bpmn(*pm4py.read_pnml(x[0])), x[1])}, + "ConvertPNMLtoPTML": {"inputs": [".pnml"], "output_extension": ".ptml", + "method": lambda x: pm4py.write_ptml(pm4py.convert_to_process_tree(*pm4py.read_pnml(x[0])), + x[1])}, + "ConvertPTMLtoPNML": {"inputs": [".ptml"], "output_extension": ".pnml", + "method": lambda x: pm4py.write_pnml(*pm4py.convert_to_petri_net(pm4py.read_ptml(x[0])), + x[1])}, + "ConvertPTMLtoBPMN": {"inputs": [".ptml"], "output_extension": ".bpmn", + "method": lambda x: pm4py.write_bpmn(pm4py.convert_to_bpmn(pm4py.read_ptml(x[0])), x[1])}, + "ConvertBPMNtoPNML": {"inputs": [".bpmn"], "output_extension": ".pnml", + "method": lambda x: pm4py.write_pnml(*pm4py.convert_to_petri_net(pm4py.read_bpmn(x[0])), + x[1])}, + "ConvertDFGtoPNML": {"inputs": [".dfg"], "output_extension": ".pnml", + "method": lambda x: pm4py.write_pnml(*pm4py.convert_to_petri_net(*pm4py.read_dfg(x[0])), + x[1])}, + "DiscoverPetriNetAlpha": {"inputs": [".xes"], "output_extension": ".pnml", + "method": lambda x: pm4py.write_pnml(*pm4py.discover_petri_net_alpha(__read_log(x[0])), + x[1])}, + "DiscoverPetriNetInductive": {"inputs": [".xes"], "output_extension": ".pnml", + "method": lambda x: pm4py.write_pnml( + *pm4py.discover_petri_net_inductive(__read_log(x[0])), + x[1])}, + "DiscoverPetriNetHeuristics": {"inputs": [".xes"], "output_extension": ".pnml", + "method": lambda x: pm4py.write_pnml( + *pm4py.discover_petri_net_heuristics(__read_log(x[0])), + x[1])}, + "DiscoverBPMNInductive": {"inputs": [".xes"], "output_extension": ".bpmn", + "method": lambda x: pm4py.write_bpmn( + pm4py.discover_bpmn_inductive(__read_log(x[0])), + x[1])}, + "DiscoverProcessTreeInductive": {"inputs": [".xes"], "output_extension": ".ptml", + "method": lambda x: pm4py.write_ptml( + pm4py.discover_process_tree_inductive(__read_log(x[0])), + x[1])}, + "DiscoverDFG": {"inputs": [".xes"], "output_extension": ".dfg", + "method": lambda x: pm4py.write_dfg(*pm4py.discover_dfg(__read_log(x[0])), x[1])}, + "ConformanceDiagnosticsTBR": {"inputs": [".xes", ".pnml"], "output_extension": ".txt", + "method": lambda x: open(x[2], "w").write(str( + pm4py.conformance_diagnostics_token_based_replay(__read_log(x[0]), + *pm4py.read_pnml(x[1]), return_diagnostics_dataframe=False)))}, + "ConformanceDiagnosticsAlignments": {"inputs": [".xes", ".pnml"], "output_extension": ".txt", + "method": lambda x: open(x[2], "w").write(str( + pm4py.conformance_diagnostics_alignments(__read_log(x[0]), + *pm4py.read_pnml(x[1]), return_diagnostics_dataframe=False)))}, + "FitnessTBR": {"inputs": [".xes", ".pnml"], "output_extension": ".txt", + "method": lambda x: open(x[2], "w").write(str( + pm4py.fitness_token_based_replay(__read_log(x[0]), + *pm4py.read_pnml(x[1]))))}, + "FitnessAlignments": {"inputs": [".xes", ".pnml"], "output_extension": ".txt", + "method": lambda x: open(x[2], "w").write(str( + pm4py.fitness_alignments(__read_log(x[0]), + *pm4py.read_pnml(x[1]))))}, + "PrecisionTBR": {"inputs": [".xes", ".pnml"], "output_extension": ".txt", + "method": lambda x: open(x[2], "w").write(str( + pm4py.precision_token_based_replay(__read_log(x[0]), + *pm4py.read_pnml(x[1]))))}, + "PrecisionAlignments": {"inputs": [".xes", ".pnml"], "output_extension": ".txt", + "method": lambda x: open(x[2], "w").write(str( + pm4py.precision_alignments(__read_log(x[0]), + *pm4py.read_pnml(x[1]))))}, + "SaveVisDFG": {"inputs": [".dfg"], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_dfg(*pm4py.read_dfg(x[0]), x[1])}, + "SaveVisPNML": {"inputs": [".pnml"], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_petri_net(*pm4py.read_pnml(x[0]), x[1])}, + "SaveVisBPMN": {"inputs": [".bpmn"], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_bpmn(pm4py.read_bpmn(x[0]), x[1])}, + "SaveVisPTML": {"inputs": [".ptml"], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_process_tree(pm4py.read_ptml(x[0]), x[1])}, + "SaveVisDottedChart": {"inputs": [".xes", None, None, None], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_dotted_chart(__read_log(x[0]), x[4], + attributes=[x[1], x[2], x[3]])}, + "SaveVisTransitionSystem": {"inputs": [".xes"], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_transition_system( + pm4py.discover_transition_system(__read_log(x[0])), x[1])}, + "SaveVisTrie": {"inputs": [".xes"], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_prefix_tree(pm4py.discover_prefix_tree(__read_log(x[0])), x[1])}, + "SaveVisEventsDistribution": {"inputs": [".xes", None], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_events_distribution_graph(__read_log(x[0]), x[2], + distr_type=x[1])}, + "SaveVisEventsPerTime": {"inputs": [".xes"], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_events_per_time_graph(__read_log(x[0]), x[1])}, + "GenerateProcessTree": {"inputs": [None], "output_extension": ".ptml", "method": lambda x: pm4py.write_ptml( + pm4py.generate_process_tree(parameters={"min": int(x[0]), "max": int(x[0]), "mode": int(x[0])}), x[1])}, + "PNMLplayout": {"inputs": [".pnml"], "output_extension": ".xes", + "method": lambda x: pm4py.write_xes(pm4py.play_out(*pm4py.read_pnml(x[0])), x[1])}, + "PTMLplayout": {"inputs": [".ptml"], "output_extension": ".xes", + "method": lambda x: pm4py.write_xes(pm4py.play_out(pm4py.read_ptml(x[0])), x[1])}, + "DFGplayout": {"inputs": [".dfg"], "output_extension": ".dfg", + "method": lambda x: pm4py.write_xes(pm4py.play_out(*pm4py.read_dfg(x[0])), x[1])}, + "SaveVisSNA": {"inputs": [".xes", None], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_sna(__apply_sna(__read_log(x[0]), x[1]), x[2])}, + "SaveVisCaseDuration": {"inputs": [".xes"], "output_extension": ".png", + "method": lambda x: pm4py.save_vis_case_duration_graph(__read_log(x[0]), x[1])}, + "FilterVariantsTopK": {"inputs": [".xes", None], "output_extension": ".xes", + "method": lambda x: pm4py.write_xes(pm4py.filter_variants_top_k(__read_log(x[0]), int(x[1])), + x[2])}, + "FilterVariantsCoverage": {"inputs": [".xes", None], "output_extension": ".xes", + "method": lambda x: pm4py.write_xes( + pm4py.filter_variants_by_coverage_percentage(__read_log(x[0]), float(x[1])), x[2])}, + "FilterCasePerformance": {"inputs": [".xes", None, None], "output_extension": ".xes", + "method": lambda x: pm4py.write_xes( + pm4py.filter_case_performance(__read_log(x[0]), min_performance=float(x[1]), + max_performance=float(x[2])), x[3])}, + "FilterTimeRange": {"inputs": [".xes", None, None], "output_extension": ".xes", + "method": lambda x: pm4py.write_xes( + pm4py.filter_time_range(__read_log(x[0]), x[1] + " 00:00:00", x[2] + " 23:59:59"), x[3])} +} + + +def __read_log(log_path): + if "xes" in log_path.lower(): + return pm4py.read_xes(log_path) + elif "csv" in log_path.lower(): + dataframe = pandas_utils.read_csv(log_path) + dataframe = pm4py.format_dataframe(dataframe) + return dataframe + + +def __apply_sna(log, method, **kwargs): + if method == "handover": + return pm4py.discover_handover_of_work_network(log, **kwargs) + elif method == "working_together": + return pm4py.discover_working_together_network(log, **kwargs) + elif method == "similar_activities": + return pm4py.discover_activity_based_resource_similarity(log, **kwargs) + elif method == "subcontracting": + return pm4py.discover_subcontracting_network(log, **kwargs) + + +def __get_output_name(inp_list, idx, method_name, extension): + ret = [] + for inp in inp_list: + ret.append(str(Path(inp).stem)) + return "_".join(ret) + "_" + method_name + extension + + +def cli_interface(): + method_name = sys.argv[1] + if method_name in methods: + method = methods[method_name] + inputs = [] + for i in range(len(method["inputs"])): + ci = sys.argv[2 + i] + if os.path.isdir(ci): + if not os.path.exists(ci): + raise Exception("the provided path (" + ci + ") does not exist.") + files = os.listdir(ci) + inputs.append([os.path.join(ci, f) for f in files if + os.path.isfile(os.path.join(ci, f)) and f.endswith(method["inputs"][i])]) + else: + inputs.append([ci]) + j = 2 + len(method["inputs"]) + inputs = list(itertools.product(*inputs)) + if len(inputs) == 1: + outputs = [[sys.argv[j]]] + else: + if not os.path.exists(sys.argv[j]): + os.mkdir(sys.argv[j]) + outputs = [ + [os.path.join(sys.argv[j], __get_output_name(inputs[z], z, method_name, method["output_extension"]))] + for z in + range(len(inputs))] + method_tuples = [(*inputs[i], *outputs[i]) for i in range(len(inputs))] + for i in range(len(method_tuples)): + try: + if not os.path.exists(method_tuples[i][-1]): + print(method_name, method_tuples[i]) + method["method"](method_tuples[i]) + except: + traceback.print_exc() + else: + raise Exception("the provided method (" + method_name + ") does not exist in the CLI.") + + +if __name__ == "__main__": + cli_interface() diff --git a/pm4py/pm4py/conformance.py b/pm4py/pm4py/conformance.py new file mode 100644 index 0000000000000000000000000000000000000000..d438e2cff8c8d289f118504beefafe86717736e0 --- /dev/null +++ b/pm4py/pm4py/conformance.py @@ -0,0 +1,829 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.conformance`` module contains the conformance checking algorithms implemented in ``pm4py`` +""" + +from typing import List, Dict, Any, Union, Optional, Tuple, Set + +from pm4py.objects.log.obj import EventLog, Trace, Event, EventStream +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.convert import convert_to_event_log +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.util import xes_constants, constants +from pm4py.utils import get_properties, __event_log_deprecation_warning +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns +import pandas as pd +import deprecation + + +def conformance_diagnostics_token_based_replay(log: Union[EventLog, pd.DataFrame], petri_net: PetriNet, initial_marking: Marking, + final_marking: Marking, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", return_diagnostics_dataframe: bool = constants.DEFAULT_RETURN_DIAGNOSTICS_DATAFRAME, opt_parameters: Optional[Dict[Any, Any]] = None) -> List[Dict[str, Any]]: + """ + Apply token-based replay for conformance checking analysis. + The methods return the full token-based-replay diagnostics. + + Token-based replay matches a trace and a Petri net model, starting from the initial place, in order to discover which transitions are executed and in which places we have remaining or missing tokens for the given process instance. Token-based replay is useful for Conformance Checking: indeed, a trace is fitting according to the model if, during its execution, the transitions can be fired without the need to insert any missing token. If the reaching of the final marking is imposed, then a trace is fitting if it reaches the final marking without any missing or remaining tokens. + + In PM4Py there is an implementation of a token replayer that is able to go across hidden transitions (calculating shortest paths between places) and can be used with any Petri net model with unique visible transitions and hidden transitions. When a visible transition needs to be fired and not all places in the preset are provided with the correct number of tokens, starting from the current marking it is checked if for some place there is a sequence of hidden transitions that could be fired in order to enable the visible transition. The hidden transitions are then fired and a marking that permits to enable the visible transition is reached. + The approach is described in: + Berti, Alessandro, and Wil MP van der Aalst. "Reviving Token-based Replay: Increasing Speed While Improving Diagnostics." ATAED@ Petri Nets/ACSD. 2019. + + The output of the token-based replay, stored in the variable replayed_traces, contains for each trace of the log: + + - trace_is_fit: boolean value (True/False) that is true when the trace is according to the model. + - activated_transitions: list of transitions activated in the model by the token-based replay. + - reached_marking: marking reached at the end of the replay. + - missing_tokens: number of missing tokens. + - consumed_tokens: number of consumed tokens. + - remaining_tokens: number of remaining tokens. + - produced_tokens: number of produced tokens. + + :param log: event log + :param petri_net: petri net + :param initial_marking: initial marking + :param final_marking: final marking + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param return_diagnostics_dataframe: if possible, returns a dataframe with the diagnostics (instead of the usual output) + :param opt_parameters: optional parameters of the token-based replay, including: + * reach_mark_through_hidden: boolean value that decides if we shall try to reach the final marking through hidden transitions + * stop_immediately_unfit: boolean value that decides if we shall stop immediately when a non-conformance is detected + * walk_through_hidden_trans: boolean value that decides if we shall walk through hidden transitions in order to enable visible transitions + * places_shortest_path_by_hidden: shortest paths between places by hidden transitions + * is_reduction: expresses if the token-based replay is called in a reduction attempt + * thread_maximum_ex_time: alignment threads maximum allowed execution time + * cleaning_token_flood: decides if a cleaning of the token flood shall be operated + * disable_variants: disable variants grouping + * return_object_names: decides whether names instead of object pointers shall be returned + :rtype: ``List[Dict[str, Any]]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + tbr_diagnostics = pm4py.conformance_diagnostics_token_based_replay(dataframe, net, im, fm, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if return_diagnostics_dataframe: + log = convert_to_event_log(log, case_id_key=case_id_key) + case_id_key = None + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if opt_parameters is None: + opt_parameters = {} + + for k, v in opt_parameters.items(): + properties[k] = v + + from pm4py.algo.conformance.tokenreplay import algorithm as token_replay + result = token_replay.apply(log, petri_net, initial_marking, final_marking, parameters=properties) + + if return_diagnostics_dataframe: + return token_replay.get_diagnostics_dataframe(log, result, parameters=properties) + + return result + + +def conformance_diagnostics_alignments(log: Union[EventLog, pd.DataFrame], *args, multi_processing: bool = constants.ENABLE_MULTIPROCESSING_DEFAULT, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", variant_str : Optional[str] = None, return_diagnostics_dataframe: bool = constants.DEFAULT_RETURN_DIAGNOSTICS_DATAFRAME, **kwargs) -> List[Dict[str, Any]]: + """ + Apply the alignments algorithm between a log and a process model. + The methods return the full alignment diagnostics. + + Alignment-based replay aims to find one of the best alignment between the trace and the model. For each trace, the output of an alignment is a list of couples where the first element is an event (of the trace) or » and the second element is a transition (of the model) or ». For each couple, the following classification could be provided: + + - Sync move: the classification of the event corresponds to the transition label; in this case, both the trace and the model advance in the same way during the replay. + - Move on log: for couples where the second element is », it corresponds to a replay move in the trace that is not mimicked in the model. This kind of move is unfit and signal a deviation between the trace and the model. + - Move on model: for couples where the first element is », it corresponds to a replay move in the model that is not mimicked in the trace. For moves on model, we can have the following distinction: + * Moves on model involving hidden transitions: in this case, even if it is not a sync move, the move is fit. + * Moves on model not involving hidden transitions: in this case, the move is unfit and signals a deviation between the trace and the model. + + With each trace, a dictionary containing among the others the following information is associated: + + alignment: contains the alignment (sync moves, moves on log, moves on model) + cost: contains the cost of the alignment according to the provided cost function + fitness: is equal to 1 if the trace is perfectly fitting. + + :param log: event log + :param args: specification of the process model + :param multi_processing: boolean value that enables the multiprocessing + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param variant_str: variant specification (for Petri net alignments) + :param return_diagnostics_dataframe: if possible, returns a dataframe with the diagnostics (instead of the usual output) + :rtype: ``List[Dict[str, Any]]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + alignments_diagnostics = pm4py.conformance_diagnostics_alignments(dataframe, net, im, fm, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if return_diagnostics_dataframe: + log = convert_to_event_log(log, case_id_key=case_id_key) + case_id_key = None + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if kwargs is not None: + for k, v in kwargs.items(): + properties[k] = v + + if len(args) == 3: + if type(args[0]) is PetriNet: + # Petri net alignments + from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments + variant = alignments.DEFAULT_VARIANT + if variant_str is not None: + variant = variant_str + if multi_processing: + result = alignments.apply_multiprocessing(log, args[0], args[1], args[2], parameters=properties, variant=variant) + else: + result = alignments.apply(log, args[0], args[1], args[2], parameters=properties, variant=variant) + + if return_diagnostics_dataframe: + return alignments.get_diagnostics_dataframe(log, result, parameters=properties) + + return result + elif isinstance(args[0], dict): + # DFG alignments + from pm4py.algo.conformance.alignments.dfg import algorithm as dfg_alignment + result = dfg_alignment.apply(log, args[0], args[1], args[2], parameters=properties) + + return result + elif len(args) == 1: + if type(args[0]) is ProcessTree: + # process tree alignments + from pm4py.algo.conformance.alignments.process_tree.variants import search_graph_pt + if multi_processing: + result = search_graph_pt.apply_multiprocessing(log, args[0], parameters=properties) + else: + result = search_graph_pt.apply(log, args[0], parameters=properties) + + return result + elif type(args[0]) in [EventLog, pd.DataFrame]: + # edit distance alignments (log2log) + from pm4py.algo.conformance.alignments.edit_distance import algorithm as edit_distance_alignments + result = edit_distance_alignments.apply(log, args[0], parameters=properties) + + return result + # try to convert to Petri net + import pm4py + from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments + net, im, fm = pm4py.convert_to_petri_net(*args) + if multi_processing: + result = alignments.apply_multiprocessing(log, net, im, fm, parameters=properties) + else: + result = alignments.apply(log, net, im, fm, parameters=properties) + + if return_diagnostics_dataframe: + return alignments.get_diagnostics_dataframe(log, result, parameters=properties) + + return result + + +def fitness_token_based_replay(log: Union[EventLog, pd.DataFrame], petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> \ + Dict[ + str, float]: + """ + Calculates the fitness using token-based replay. + The fitness is calculated on a log-based level. + The output dictionary contains the following keys: + - perc_fit_traces (the percentage of fit traces (from 0.0 to 100.0)) + - average_trace_fitness (between 0.0 and 1.0; computed as average of the trace fitnesses) + - log_fitness (between 0.0 and 1.0) + - percentage_of_fitting_traces (the percentage of fit traces (from 0.0 to 100.0) + + Token-based replay matches a trace and a Petri net model, starting from the initial place, in order to discover which transitions are executed and in which places we have remaining or missing tokens for the given process instance. Token-based replay is useful for Conformance Checking: indeed, a trace is fitting according to the model if, during its execution, the transitions can be fired without the need to insert any missing token. If the reaching of the final marking is imposed, then a trace is fitting if it reaches the final marking without any missing or remaining tokens. + + In PM4Py there is an implementation of a token replayer that is able to go across hidden transitions (calculating shortest paths between places) and can be used with any Petri net model with unique visible transitions and hidden transitions. When a visible transition needs to be fired and not all places in the preset are provided with the correct number of tokens, starting from the current marking it is checked if for some place there is a sequence of hidden transitions that could be fired in order to enable the visible transition. The hidden transitions are then fired and a marking that permits to enable the visible transition is reached. + The approach is described in: + Berti, Alessandro, and Wil MP van der Aalst. "Reviving Token-based Replay: Increasing Speed While Improving Diagnostics." ATAED@ Petri Nets/ACSD. 2019. + + The calculation of the replay fitness aim to calculate how much of the behavior in the log is admitted by the process model. We propose two methods to calculate replay fitness, based on token-based replay and alignments respectively. + + For token-based replay, the percentage of traces that are completely fit is returned, along with a fitness value that is calculated as indicated in the scientific contribution + + :param log: event log + :param petri_net: petri net + :param initial_marking: initial marking + :param final_marking: final marking + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, float]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + fitness_tbr = pm4py.fitness_token_based_replay(dataframe, net, im, fm, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.evaluation.replay_fitness import algorithm as replay_fitness + result = replay_fitness.apply(log, petri_net, initial_marking, final_marking, + variant=replay_fitness.Variants.TOKEN_BASED, parameters=properties) + + return result + + +def fitness_alignments(log: Union[EventLog, pd.DataFrame], petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, multi_processing: bool = constants.ENABLE_MULTIPROCESSING_DEFAULT, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", variant_str : Optional[str] = None) -> \ + Dict[str, float]: + """ + Calculates the fitness using alignments + The output dictionary contains the following keys: + - average_trace_fitness (between 0.0 and 1.0; computed as average of the trace fitnesses) + - log_fitness (between 0.0 and 1.0) + - percentage_of_fitting_traces (the percentage of fit traces (from 0.0 to 100.0) + + Alignment-based replay aims to find one of the best alignment between the trace and the model. For each trace, the output of an alignment is a list of couples where the first element is an event (of the trace) or » and the second element is a transition (of the model) or ». For each couple, the following classification could be provided: + + - Sync move: the classification of the event corresponds to the transition label; in this case, both the trace and the model advance in the same way during the replay. + - Move on log: for couples where the second element is », it corresponds to a replay move in the trace that is not mimicked in the model. This kind of move is unfit and signal a deviation between the trace and the model. + - Move on model: for couples where the first element is », it corresponds to a replay move in the model that is not mimicked in the trace. For moves on model, we can have the following distinction: + * Moves on model involving hidden transitions: in this case, even if it is not a sync move, the move is fit. + * Moves on model not involving hidden transitions: in this case, the move is unfit and signals a deviation between the trace and the model. + + The calculation of the replay fitness aim to calculate how much of the behavior in the log is admitted by the process model. We propose two methods to calculate replay fitness, based on token-based replay and alignments respectively. + + For alignments, the percentage of traces that are completely fit is returned, along with a fitness value that is calculated as the average of the fitness values of the single traces. + + :param log: event log + :param petri_net: petri net + :param initial_marking: initial marking + :param final_marking: final marking + :param multi_processing: boolean value that enables the multiprocessing + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param variant_str: variant specification + :rtype: ``Dict[str, float]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + fitness_alignments = pm4py.fitness_alignments(dataframe, net, im, fm, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.evaluation.replay_fitness import algorithm as replay_fitness + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["multiprocessing"] = multi_processing + result = replay_fitness.apply(log, petri_net, initial_marking, final_marking, + variant=replay_fitness.Variants.ALIGNMENT_BASED, align_variant=variant_str, parameters=parameters) + + return result + + +def precision_token_based_replay(log: Union[EventLog, pd.DataFrame], petri_net: PetriNet, initial_marking: Marking, + final_marking: Marking, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> float: + """ + Calculates the precision precision using token-based replay + + Token-based replay matches a trace and a Petri net model, starting from the initial place, in order to discover which transitions are executed and in which places we have remaining or missing tokens for the given process instance. Token-based replay is useful for Conformance Checking: indeed, a trace is fitting according to the model if, during its execution, the transitions can be fired without the need to insert any missing token. If the reaching of the final marking is imposed, then a trace is fitting if it reaches the final marking without any missing or remaining tokens. + + In PM4Py there is an implementation of a token replayer that is able to go across hidden transitions (calculating shortest paths between places) and can be used with any Petri net model with unique visible transitions and hidden transitions. When a visible transition needs to be fired and not all places in the preset are provided with the correct number of tokens, starting from the current marking it is checked if for some place there is a sequence of hidden transitions that could be fired in order to enable the visible transition. The hidden transitions are then fired and a marking that permits to enable the visible transition is reached. + The approach is described in: + Berti, Alessandro, and Wil MP van der Aalst. "Reviving Token-based Replay: Increasing Speed While Improving Diagnostics." ATAED@ Petri Nets/ACSD. 2019. + + The reference paper for the TBR-based precision (ETConformance) is: + Muñoz-Gama, Jorge, and Josep Carmona. "A fresh look at precision in process conformance." International Conference on Business Process Management. Springer, Berlin, Heidelberg, 2010. + + In this approach, the different prefixes of the log are replayed (whether possible) on the model. At the reached marking, the set of transitions that are enabled in the process model is compared with the set of activities that follow the prefix. The more the sets are different, the more the precision value is low. The more the sets are similar, the more the precision value is high. + + :param log: event log + :param petri_net: petri net + :param initial_marking: initial marking + :param final_marking: final marking + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + precision_tbr = pm4py.precision_token_based_replay(dataframe, net, im, fm, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.evaluation.precision import algorithm as precision_evaluator + result = precision_evaluator.apply(log, petri_net, initial_marking, final_marking, + variant=precision_evaluator.Variants.ETCONFORMANCE_TOKEN, parameters=properties) + + return result + + +def precision_alignments(log: Union[EventLog, pd.DataFrame], petri_net: PetriNet, initial_marking: Marking, + final_marking: Marking, multi_processing: bool = constants.ENABLE_MULTIPROCESSING_DEFAULT, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> float: + """ + Calculates the precision of the model w.r.t. the event log using alignments + + Alignment-based replay aims to find one of the best alignment between the trace and the model. For each trace, the output of an alignment is a list of couples where the first element is an event (of the trace) or » and the second element is a transition (of the model) or ». For each couple, the following classification could be provided: + + - Sync move: the classification of the event corresponds to the transition label; in this case, both the trace and the model advance in the same way during the replay. + - Move on log: for couples where the second element is », it corresponds to a replay move in the trace that is not mimicked in the model. This kind of move is unfit and signal a deviation between the trace and the model. + - Move on model: for couples where the first element is », it corresponds to a replay move in the model that is not mimicked in the trace. For moves on model, we can have the following distinction: + * Moves on model involving hidden transitions: in this case, even if it is not a sync move, the move is fit. + * Moves on model not involving hidden transitions: in this case, the move is unfit and signals a deviation between the trace and the model. + + The reference paper for the alignments-based precision (Align-ETConformance) is: + Adriansyah, Arya, et al. "Measuring precision of modeled behavior." Information systems and e-Business Management 13.1 (2015): 37-67 + + In this approach, the different prefixes of the log are replayed (whether possible) on the model. At the reached marking, the set of transitions that are enabled in the process model is compared with the set of activities that follow the prefix. The more the sets are different, the more the precision value is low. The more the sets are similar, the more the precision value is high. + + :param log: event log + :param petri_net: petri net + :param initial_marking: initial marking + :param final_marking: final marking + :param multi_processing: boolean value that enables the multiprocessing + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + precision_alignments = pm4py.precision_alignments(dataframe, net, im, fm, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.evaluation.precision import algorithm as precision_evaluator + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["multiprocessing"] = multi_processing + result = precision_evaluator.apply(log, petri_net, initial_marking, final_marking, + variant=precision_evaluator.Variants.ALIGN_ETCONFORMANCE, + parameters=parameters) + + return result + + +def generalization_tbr(log: Union[EventLog, pd.DataFrame], petri_net: PetriNet, initial_marking: Marking, + final_marking: Marking, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> float: + """ + Computes the generalization of the model (against the event log). The approach is described in the paper: + + Buijs, Joos CAM, Boudewijn F. van Dongen, and Wil MP van der Aalst. "Quality dimensions in process discovery: The importance of fitness, precision, generalization and simplicity." International Journal of Cooperative Information Systems 23.01 (2014): 1440001. + + + :param log: event log + :param petri_net: petri net + :param initial_marking: initial marking + :param final_marking: final marking + :param multi_processing: boolean value that enables the multiprocessing + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + generalization_tbr = pm4py.generalization_tbr(dataframe, net, im, fm) + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.evaluation.generalization import algorithm as generalization_evaluator + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + result = generalization_evaluator.apply(log, petri_net, initial_marking, final_marking, variant=generalization_evaluator.Variants.GENERALIZATION_TOKEN, parameters=parameters) + + return result + + +def replay_prefix_tbr(prefix: List[str], net: PetriNet, im: Marking, fm: Marking, activity_key: str = "concept:name") -> Marking: + """ + Replays a prefix (list of activities) on a given accepting Petri net, using Token-Based Replay. + + :param prefix: list of activities + :param net: Petri net + :param im: initial marking + :param fm: final marking + :param activity_key: attribute to be used as activity + :rtype: ``Marking`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('tests/input_data/running-example.pnml') + marking = pm4py.replay_prefix_tbr(['register request', 'check ticket'], net, im, fm) + """ + purpose_log = EventLog() + trace = Trace() + for act in prefix: + trace.append(Event({activity_key: act})) + purpose_log.append(trace) + + from pm4py.algo.conformance.tokenreplay.variants import token_replay + parameters_tr = { + token_replay.Parameters.CONSIDER_REMAINING_IN_FITNESS: False, + token_replay.Parameters.TRY_TO_REACH_FINAL_MARKING_THROUGH_HIDDEN: False, + token_replay.Parameters.STOP_IMMEDIATELY_UNFIT: True, + token_replay.Parameters.WALK_THROUGH_HIDDEN_TRANS: True, + token_replay.Parameters.ACTIVITY_KEY: activity_key + } + res = token_replay.apply(purpose_log, net, im, fm, parameters=parameters_tr)[0] + return res["reached_marking"] + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="conformance checking using footprints will not be exposed in a future release") +def __convert_to_fp(*args) -> Union[List[Dict[str, Any]], Dict[str, Any]]: + """ + Internal method to convert the provided event log / process model argument + to footprints (using footprints discovery) + + :param args: event log / process model + :rtype: ``Union[List[Dict[str, Any]], Dict[str, Any]]`` + """ + import pm4py + while type(args) is tuple: + if len(args) == 1: + args = args[0] + else: + fp = pm4py.discover_footprints(*args) + return fp + if isinstance(args, list) or isinstance(args, dict): + return args + fp = pm4py.discover_footprints(args) + return fp + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="conformance checking using footprints will not be exposed in a future release") +def conformance_diagnostics_footprints(*args) -> Union[List[Dict[str, Any]], Dict[str, Any]]: + """ + Provide conformance checking diagnostics using footprints + + :param args: provided arguments (the first argument is supposed to be an event log (or the footprints discovered from the event log); the other arguments are supposed to be the process model (or the footprints discovered from the process model). + :rtype: ``Union[List[Dict[str, Any]], Dict[str, Any]]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + footprints_diagnostics = pm4py.conformance_diagnostics_footprints(dataframe, net, im, fm, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + fp1 = __convert_to_fp(args[0]) + fp2 = __convert_to_fp(args[1:]) + from pm4py.algo.conformance.footprints import algorithm as footprints_conformance + if isinstance(fp1, list): + result = footprints_conformance.apply(fp1, fp2, variant=footprints_conformance.Variants.TRACE_EXTENSIVE) + else: + result = footprints_conformance.apply(fp1, fp2, variant=footprints_conformance.Variants.LOG_EXTENSIVE) + + return result + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="conformance checking using footprints will not be exposed in a future release") +def fitness_footprints(*args) -> Dict[str, float]: + """ + Calculates fitness using footprints. The output is a dictionary containing two keys: + - perc_fit_traces => percentage of fit traces (over the log) + - log_fitness => the fitness value over the log + + :param args: provided arguments (the first argument is supposed to be an event log (or the footprints discovered from the event log); the other arguments are supposed to be the process model (or the footprints discovered from the process model). + :rtype: ``Dict[str, float]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + fitness_fp = pm4py.fitness_footprints(dataframe, net, im, fm, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + fp_conf = conformance_diagnostics_footprints(*args) + fp1 = __convert_to_fp(args[0]) + fp2 = __convert_to_fp(args[1:]) + from pm4py.algo.conformance.footprints.util import evaluation + result = evaluation.fp_fitness(fp1, fp2, fp_conf) + + return result + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="conformance checking using footprints will not be exposed in a future release") +def precision_footprints(*args) -> float: + """ + Calculates precision using footprints + + :param args: provided arguments (the first argument is supposed to be an event log (or the footprints discovered from the event log); the other arguments are supposed to be the process model (or the footprints discovered from the process model). + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + precision_fp = pm4py.precision_footprints(dataframe, net, im, fm, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + fp1 = __convert_to_fp(args[0]) + fp2 = __convert_to_fp(args[1:]) + from pm4py.algo.conformance.footprints.util import evaluation + result = evaluation.fp_precision(fp1, fp2) + + return result + + +@deprecation.deprecated(removed_in="2.3.0", deprecated_in="3.0.0", details="this method will be removed in a future release.") +def __check_is_fit_process_tree(trace, tree) -> bool: + """ + Check if a trace object is fit against a process tree model + + :param trace: trace + :param tree: process tree + :rtype: ``bool`` + """ + __event_log_deprecation_warning(trace) + + from pm4py.discovery import discover_footprints + log = EventLog() + log.append(trace) + fp_tree = discover_footprints(tree) + fp_log = discover_footprints(log) + fp_conf_res = conformance_diagnostics_footprints(fp_log, fp_tree)[0] + # CHECK 1) if footprints already say is not fit, then return False + # (if they say True, it might be a false positive) + if not fp_conf_res["is_footprints_fit"]: + return False + else: + from pm4py.convert import convert_to_petri_net + net, im, fm = convert_to_petri_net(tree) + tbr_conf_res = conformance_diagnostics_token_based_replay(log, net, im, fm, return_diagnostics_dataframe=False)[0] + # CHECK 2) if TBR says that is fit, then return True + # (if they say False, it might be a false negative) + if tbr_conf_res["trace_is_fit"]: + return True + else: + # CHECK 3) alignments definitely say if the trace is fit or not if the previous methods fail + align_conf_res = conformance_diagnostics_alignments(log, tree, return_diagnostics_dataframe=False)[0] + return align_conf_res["fitness"] == 1.0 + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="this method will be removed in a future release.") +def __check_is_fit_petri_net(trace, net, im, fm, activity_key=xes_constants.DEFAULT_NAME_KEY) -> bool: + """ + Checks if a trace object is fit against Petri net object + + :param trace: trace + :param net: petri net + :param im: initial marking + :param fm: final marking + :param activity_key: attribute to be used as activity + :rtype: ``bool`` + """ + __event_log_deprecation_warning(trace) + + # avoid checking footprints on Petri net (they are too slow) + activities_model = set(trans.label for trans in net.transitions if trans.label is not None) + activities_trace = set([x[activity_key] for x in trace]) + diff = activities_trace.difference(activities_model) + if diff: + # CHECK 1) there are activities in the trace that are not in the model + return False + else: + log = EventLog() + log.append(trace) + tbr_conf_res = conformance_diagnostics_token_based_replay(log, net, im, fm, return_diagnostics_dataframe=False)[0] + # CHECK 2) if TBR says that is fit, then return True + # (if they say False, it might be a false negative) + if tbr_conf_res["trace_is_fit"]: + return True + else: + # CHECK 3) alignments definitely say if the trace is fit or not if the previous methods fail + align_conf_res = conformance_diagnostics_alignments(log, net, im, fm, return_diagnostics_dataframe=False)[0] + return align_conf_res["fitness"] == 1.0 + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="this method will be removed in a future release.") +def check_is_fitting(*args, activity_key=xes_constants.DEFAULT_NAME_KEY) -> bool: + """ + Checks if a trace object is fit against a process model + + :param args: arguments (trace object; process model (process tree, petri net, BPMN)) + :rtype: ``bool`` + """ + from pm4py.util import variants_util + from pm4py.convert import convert_to_process_tree, convert_to_petri_net + + trace = args[0] + model = args[1:] + + try: + model = convert_to_process_tree(*model) + except: + # the model cannot be expressed as a process tree, let's say if at least can be expressed as a Petri net + model = convert_to_petri_net(*model) + + if not isinstance(trace, Trace): + activities = variants_util.get_activities_from_variant(trace) + trace = Trace() + for act in activities: + trace.append(Event({activity_key: act})) + + if isinstance(model, ProcessTree): + return __check_is_fit_process_tree(trace, model) + elif isinstance(model, tuple) and isinstance(model[0], PetriNet): + return __check_is_fit_petri_net(trace, model[0], model[1], model[2], activity_key=activity_key) + + +def conformance_temporal_profile(log: Union[EventLog, pd.DataFrame], temporal_profile: Dict[Tuple[str, str], Tuple[float, float]], zeta: float = 1.0, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", return_diagnostics_dataframe: bool = constants.DEFAULT_RETURN_DIAGNOSTICS_DATAFRAME) -> List[List[Tuple[float, float, float, float]]]: + """ + Performs conformance checking on the provided log with the provided temporal profile. + The result is a list of time-based deviations for every case. + E.g. if the log on top of which the conformance is applied is the following (1 case): + A (timestamp: 2000-01) B (timestamp: 2002-01) + The difference between the timestamps of A and B is two years. If the temporal profile: + {('A', 'B'): (1.5 months, 0.5 months), ('A', 'C'): (5 months, 0), ('A', 'D'): (2 months, 0)} + is specified, and zeta is set to 1, then the aforementioned case would be deviating + (considering the couple of activities ('A', 'B')), because 2 years > 1.5 months + 0.5 months. + + :param log: log object + :param temporal_profile: temporal profile. E.g., if the log has two cases: A (timestamp: 1980-01) B (timestamp: 1980-03) C (timestamp: 1980-06); A (timestamp: 1990-01) B (timestamp: 1990-02) D (timestamp: 1990-03); The temporal profile will contain: {('A', 'B'): (1.5 months, 0.5 months), ('A', 'C'): (5 months, 0), ('A', 'D'): (2 months, 0)} + :param zeta: number of standard deviations allowed from the average. E.g. zeta=1 allows every timestamp between AVERAGE-STDEV and AVERAGE+STDEV. + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param return_diagnostics_dataframe: if possible, returns a dataframe with the diagnostics (instead of the usual output) + :rtype: ``List[List[Tuple[float, float, float, float]]]`` + + .. code-block:: python3 + + import pm4py + + temporal_profile = pm4py.discover_temporal_profile(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + conformance_temporal_profile = pm4py.conformance_temporal_profile(dataframe, temporal_profile, zeta=1, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + properties["zeta"] = zeta + + from pm4py.algo.conformance.temporal_profile import algorithm as temporal_profile_conformance + result = temporal_profile_conformance.apply(log, temporal_profile, parameters=properties) + + if return_diagnostics_dataframe: + return temporal_profile_conformance.get_diagnostics_dataframe(log, result, parameters=properties) + + return result + + +def conformance_declare(log: Union[EventLog, pd.DataFrame], declare_model: Dict[str, Dict[Any, Dict[str, int]]], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", return_diagnostics_dataframe: bool = constants.DEFAULT_RETURN_DIAGNOSTICS_DATAFRAME) -> List[Dict[str, Any]]: + """ + Applies conformance checking against a DECLARE model. + + Reference paper: + F. M. Maggi, A. J. Mooij and W. M. P. van der Aalst, "User-guided discovery of declarative process models," 2011 IEEE Symposium on Computational Intelligence and Data Mining (CIDM), Paris, France, 2011, pp. 192-199, doi: 10.1109/CIDM.2011.5949297. + + :param log: event log + :param declare_model: DECLARE model + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param return_diagnostics_dataframe: if possible, returns a dataframe with the diagnostics (instead of the usual output) + :rtype: ``List[Dict[str, Any]]`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("C:/receipt.xes") + declare_model = pm4py.discover_declare(log) + conf_result = pm4py.conformance_declare(log, declare_model) + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, + case_id_key=case_id_key) + + if return_diagnostics_dataframe: + log = convert_to_event_log(log, case_id_key=case_id_key) + case_id_key = None + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.conformance.declare import algorithm as declare_conformance + result = declare_conformance.apply(log, declare_model, parameters=properties) + + if return_diagnostics_dataframe: + return declare_conformance.get_diagnostics_dataframe(log, result, parameters=properties) + + return result + + +def conformance_log_skeleton(log: Union[EventLog, pd.DataFrame], log_skeleton: Dict[str, Any], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", return_diagnostics_dataframe: bool = constants.DEFAULT_RETURN_DIAGNOSTICS_DATAFRAME) -> List[Set[Any]]: + """ + Performs conformance checking using the log skeleton + + Reference paper: + Verbeek, H. M. W., and R. Medeiros de Carvalho. "Log skeletons: A classification approach to process discovery." arXiv preprint arXiv:1806.08247 (2018). + + A log skeleton is a declarative model which consists of six different constraints: + - "directly_follows": specifies for some activities some strict bounds on the activities directly-following. For example, + 'A should be directly followed by B' and 'B should be directly followed by C'. + - "always_before": specifies that some activities may be executed only if some other activities are executed somewhen before + in the history of the case. + For example, 'C should always be preceded by A' + - "always_after": specifies that some activities should always trigger the execution of some other activities + in the future history of the case. + For example, 'A should always be followed by C' + - "equivalence": specifies that a given couple of activities should happen with the same number of occurrences inside + a case. + For example, 'B and C should always happen the same number of times'. + - "never_together": specifies that a given couple of activities should never happen together in the history of the case. + For example, 'there should be no case containing both C and D'. + - "activ_occurrences": specifies the allowed number of occurrences per activity: + E.g. A is allowed to be executed 1 or 2 times, B is allowed to be executed 1 or 2 or 3 or 4 times. + + :param log: log object + :param log_skeleton: log skeleton object, expressed as dictionaries of the six constraints (never_together, always_before ...) along with the discovered rules. + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param return_diagnostics_dataframe: if possible, returns a dataframe with the diagnostics (instead of the usual output) + :rtype: ``List[Set[Any]]`` + + .. code-block:: python3 + + import pm4py + + log_skeleton = pm4py.discover_log_skeleton(dataframe, noise_threshold=0.1, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + conformance_lsk = pm4py.conformance_log_skeleton(dataframe, log_skeleton, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if return_diagnostics_dataframe: + log = convert_to_event_log(log, case_id_key=case_id_key) + case_id_key = None + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.conformance.log_skeleton import algorithm as log_skeleton_conformance + result = log_skeleton_conformance.apply(log, log_skeleton, parameters=properties) + + if return_diagnostics_dataframe: + return log_skeleton_conformance.get_diagnostics_dataframe(log, result, parameters=properties) + + return result diff --git a/pm4py/pm4py/connectors.py b/pm4py/pm4py/connectors.py new file mode 100644 index 0000000000000000000000000000000000000000..2d5cb3744b629b89e4d6fd8364302ba09e10a759 --- /dev/null +++ b/pm4py/pm4py/connectors.py @@ -0,0 +1,449 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional +import pandas as pd +from pm4py.objects.ocel.obj import OCEL + + +def extract_log_outlook_mails() -> pd.DataFrame: + """ + Extracts the history of the conversations from the local instance of Microsoft Outlook + running on the current computer. + + CASE ID (case:concept:name) => identifier of the conversation + ACTIVITY (concept:name) => activity that is performed in the current item (send e-mail, receive e-mail, + refuse meeting ...) + TIMESTAMP (time:timestamp) => timestamp of creation of the item in Outlook + RESOURCE (org:resource) => sender of the current item + + See also: + * https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.mailitem?redirectedfrom=MSDN&view=outlook-pia#properties_ + * https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.olobjectclass?view=outlook-pia + + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_log_outlook_mails() + """ + from pm4py.algo.connectors.variants import outlook_mail_extractor + return outlook_mail_extractor.apply() + + +def extract_log_outlook_calendar(email_user: Optional[str] = None, calendar_id: int = 9) -> pd.DataFrame: + """ + Extracts the history of the calendar events (creation, update, start, end) + in a Pandas dataframe from the local Outlook instance running on the current computer. + + CASE ID (case:concept:name) => identifier of the meeting + ACTIVITY (concept:name) => one between: Meeting Created, Last Change of Meeting, Meeting Started, Meeting Completed + TIMESTAMP (time:timestamp) => the timestamp of the event + case:subject => the subject of the meeting + + :param email_user: (optional) e-mail address from which the (shared) calendar should be extracted + :param calendar_id: identifier of the calendar for the given user (default: 9) + + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_log_outlook_calendar() + dataframe = pm4py.connectors.extract_log_outlook_calendar("vacation-calendar@workplace.eu") + """ + from pm4py.algo.connectors.variants import outlook_calendar + parameters = {} + parameters[outlook_calendar.Parameters.EMAIL_USER] = email_user + parameters[outlook_calendar.Parameters.CALENDAR_ID] = calendar_id + return outlook_calendar.apply(parameters=parameters) + + +def extract_log_windows_events() -> pd.DataFrame: + """ + Extract a process mining dataframe from all the events recorded in the Windows registry. + + CASE ID (case:concept:name) => name of the computer emitting the events. + ACTIVITY (concept:name) => concatenation of the source name of the event and the event identifier + (see https://learn.microsoft.com/en-us/previous-versions/windows/desktop/eventlogprov/win32-ntlogevent) + TIMESTAMP (time:timestamp) => timestamp of generation of the event + RESOURCE (org:resource) => username involved in the event + + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_log_windows_events() + """ + from pm4py.algo.connectors.variants import windows_events + return windows_events.apply() + + +def extract_log_chrome_history(history_db_path: Optional[str] = None) -> pd.DataFrame: + """ + Extracts a dataframe containing the navigation history of Google Chrome. + Please keep Google Chrome history closed when extracting. + + CASE ID (case:concept:name) => an identifier of the profile that has been extracted + ACTIVITY (concept:name) => the complete path of the website, minus the GET arguments + TIMESTAMP (time:timestamp) => the timestamp of visit + + :param history_db_path: path to the history DB path of Google Chrome (default: position of the Windows folder) + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_log_chrome_history() + """ + from pm4py.algo.connectors.variants import chrome_history + parameters = {} + if history_db_path is not None: + parameters[chrome_history.Parameters.HISTORY_DB_PATH] = history_db_path + return chrome_history.apply(parameters=parameters) + + +def extract_log_firefox_history(history_db_path: Optional[str] = None) -> pd.DataFrame: + """ + Extracts a dataframe containing the navigation history of Mozilla Firefox. + Please keep Google Chrome history closed when extracting. + + CASE ID (case:concept:name) => an identifier of the profile that has been extracted + ACTIVITY (concept:name) => the complete path of the website, minus the GET arguments + TIMESTAMP (time:timestamp) => the timestamp of visit + + :param history_db_path: path to the history DB path of Mozilla Firefox (default: position of the Windows folder) + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_log_firefox_history() + """ + from pm4py.algo.connectors.variants import firefox_history + parameters = {} + if history_db_path is not None: + parameters[firefox_history.Parameters.HISTORY_DB_PATH] = history_db_path + return firefox_history.apply(parameters=parameters) + + +def extract_log_github(owner: str = "pm4py", repo: str = "pm4py-core", auth_token: Optional[str] = None) -> pd.DataFrame: + """ + Extracts a dataframe containing the history of the issues of a Github repository. + According to the API limit rate of public/registered users, only a part of the events + can be returned. + + :param owner: owner of the repository (e.g., pm4py) + :param repo: name of the repository (e.g., pm4py-core) + :param auth_token: authorization token + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_log_github(owner='pm4py', repo='pm4py-core') + """ + from pm4py.algo.connectors.variants import github_repo + parameters = {} + parameters[github_repo.Parameters.OWNER] = owner + parameters[github_repo.Parameters.REPOSITORY] = repo + parameters[github_repo.Parameters.AUTH_TOKEN] = auth_token + return github_repo.apply(parameters) + + +def extract_log_camunda_workflow(connection_string: str) -> pd.DataFrame: + """ + Extracts a dataframe from the Camunda workflow system. Aside from the traditional columns, + the processID of the process in Camunda is returned. + + :param connection_string: ODBC connection string to the Camunda database + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_log_camunda_workflow('Driver={PostgreSQL Unicode(x64)};SERVER=127.0.0.3;DATABASE=process-engine;UID=xx;PWD=yy') + """ + from pm4py.algo.connectors.variants import camunda_workflow + parameters = {} + parameters[camunda_workflow.Parameters.CONNECTION_STRING] = connection_string + return camunda_workflow.apply(None, parameters=parameters) + + +def extract_log_sap_o2c(connection_string: str, prefix: str = "") -> pd.DataFrame: + """ + Extracts a dataframe for the SAP O2C process. + + :param connection_string: ODBC connection string to the SAP database + :param prefix: prefix for the tables (example: SAPSR3.) + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_log_sap_o2c('Driver={Oracle in instantclient_21_6};DBQ=127.0.0.3:1521/ZIB;UID=xx;PWD=yy') + """ + from pm4py.algo.connectors.variants import sap_o2c + parameters = {} + parameters[sap_o2c.Parameters.CONNECTION_STRING] = connection_string + parameters[sap_o2c.Parameters.PREFIX] = prefix + return sap_o2c.apply(None, parameters=parameters) + + +def extract_log_sap_accounting(connection_string: str, prefix: str = "") -> pd.DataFrame: + """ + Extracts a dataframe for the SAP Accounting process. + + :param connection_string: ODBC connection string to the SAP database + :param prefix: prefix for the tables (example: SAPSR3.) + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_log_sap_accounting('Driver={Oracle in instantclient_21_6};DBQ=127.0.0.3:1521/ZIB;UID=xx;PWD=yy') + """ + from pm4py.algo.connectors.variants import sap_accounting + parameters = {} + parameters[sap_accounting.Parameters.CONNECTION_STRING] = connection_string + parameters[sap_accounting.Parameters.PREFIX] = prefix + return sap_accounting.apply(None, parameters=parameters) + + +def extract_ocel_outlook_mails() -> OCEL: + """ + Extracts the history of the conversations from the local instance of Microsoft Outlook + running on the current computer as an object-centric event log. + + ACTIVITY (ocel:activity) => activity that is performed in the current item (send e-mail, receive e-mail, + refuse meeting ...) + TIMESTAMP (ocel:timestamp) => timestamp of creation of the item in Outlook + + Object types: + - org:resource => the snder of the mail + - recipients => the list of recipients of the mail + - topic => the topic of the discussion + + See also: + * https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.mailitem?redirectedfrom=MSDN&view=outlook-pia#properties_ + * https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.olobjectclass?view=outlook-pia + + :rtype: ``OCEL`` + + .. code-block:: python3 + import pm4py + + ocel = pm4py.connectors.extract_ocel_outlook_mails() + """ + import pm4py + dataframe = pm4py.connectors.extract_log_outlook_mails() + return pm4py.convert_log_to_ocel(dataframe, "concept:name", "time:timestamp", ["org:resource", "recipients", "topic"]) + + +def extract_ocel_outlook_calendar(email_user: Optional[str] = None, calendar_id: int = 9) -> OCEL: + """ + Extracts the history of the calendar events (creation, update, start, end) + as an object-centric event log from the local Outlook instance running on the current computer. + + ACTIVITY (ocel:activity) => one between: Meeting Created, Last Change of Meeting, Meeting Started, Meeting Completed + TIMESTAMP (ocel:timestamp) => the timestamp of the event + + Object types: + - case:concept:name => identifier of the meeting + - case:subject => the subject of the meeting + + :param email_user: (optional) e-mail address from which the (shared) calendar should be extracted + :param calendar_id: identifier of the calendar for the given user (default: 9) + + :rtype: ``OCEL`` + + .. code-block:: python3 + import pm4py + + ocel = pm4py.connectors.extract_ocel_outlook_calendar() + ocel = pm4py.connectors.extract_ocel_outlook_calendar("vacation-calendar@workplace.eu") + """ + import pm4py + dataframe = pm4py.connectors.extract_log_outlook_calendar(email_user, calendar_id) + return pm4py.convert_log_to_ocel(dataframe, "concept:name", "time:timestamp", ["case:concept:name", "case:subject"]) + + +def extract_ocel_windows_events() -> OCEL: + """ + Extract a process mining dataframe from all the events recorded in the Windows registry as an object-centric + event log. + + ACTIVITY (concept:name) => concatenation of the source name of the event and the event identifier + (see https://learn.microsoft.com/en-us/previous-versions/windows/desktop/eventlogprov/win32-ntlogevent) + TIMESTAMP (time:timestamp) => timestamp of generation of the event + + Object types: + - categoryString: translation of the subcategory. The translation is source-specific. + - computerName: name of the computer that generated this event. + - eventIdentifier: identifier of the event. This is specific to the source that generated the event log entry. + - eventType: 1=Error; 2=Warning; 3=Information; 4=Security Audit Success;5=Security Audit Failure; + - sourceName: name of the source (application, service, driver, or subsystem) that generated the entry. + - user: user name of the logged-on user when the event occurred. If the user name cannot be determined, this will be NULL. + + :rtype: ``OCEL`` + + .. code-block:: python3 + import pm4py + + ocel = pm4py.connectors.extract_ocel_windows_events() + """ + import pm4py + dataframe = pm4py.connectors.extract_log_windows_events() + return pm4py.convert_log_to_ocel(dataframe, "concept:name", "time:timestamp", ["categoryString", "computerName", "eventIdentifier", "eventType", "sourceName", "user"]) + + +def extract_ocel_chrome_history(history_db_path: Optional[str] = None) -> OCEL: + """ + Extracts an object-centric event log containing the navigation history of Google Chrome. + Please keep Google Chrome history closed when extracting. + + ACTIVITY (ocel:activity) => the complete path of the website, minus the GET arguments + TIMESTAMP (ocel:timestamp) => the timestamp of visit + + Object Types: + - case:concept:name : the profile of Chrome that is used to visit the site + - complete_url: the complete URL of the website + - url_wo_parameters: complete URL minus the part after ? + - domain: the domain of the website that is visited + + :param history_db_path: path to the history DB path of Google Chrome (default: position of the Windows folder) + :rtype: ``OCEL`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_ocel_chrome_history() + """ + import pm4py + dataframe = pm4py.connectors.extract_log_chrome_history(history_db_path) + return pm4py.convert_log_to_ocel(dataframe, "concept:name", "time:timestamp", ["case:concept:name", "complete_url", "url_wo_parameters", "domain"]) + + +def extract_ocel_firefox_history(history_db_path: Optional[str] = None) -> OCEL: + """ + Extracts an object-centric event log containing the navigation history of Mozilla Firefox. + Please keep Mozilla Firefox history closed when extracting. + + ACTIVITY (ocel:activity) => the complete path of the website, minus the GET arguments + TIMESTAMP (ocel:timestamp) => the timestamp of visit + + Object Types: + - case:concept:name : the profile of Firefox that is used to visit the site + - complete_url: the complete URL of the website + - url_wo_parameters: complete URL minus the part after ? + - domain: the domain of the website that is visited + + :param history_db_path: path to the history DB path of Mozilla Firefox (default: position of the Windows folder) + :rtype: ``OCEL`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_ocel_firefox_history() + """ + import pm4py + dataframe = pm4py.connectors.extract_log_firefox_history(history_db_path) + return pm4py.convert_log_to_ocel(dataframe, "concept:name", "time:timestamp", ["case:concept:name", "complete_url", "url_wo_parameters", "domain"]) + + +def extract_ocel_github(owner: str = "pm4py", repo: str = "pm4py-core", auth_token: Optional[str] = None) -> OCEL: + """ + Extracts a dataframe containing the history of the issues of a Github repository. + According to the API limit rate of public/registered users, only a part of the events + can be returned. + + ACTIVITY (ocel:activity) => the event (created, commented, closed, subscribed ...) + TIMESTAMP (ocel:timestamp) => the timestamp of execution of the event + + Object types: + - case:concept:name => the URL of the events related to the issue + - org:resource => the involved resource + - case:repo => the repository in which the issue is created + + :param owner: owner of the repository (e.g., pm4py) + :param repo: name of the repository (e.g., pm4py-core) + :param auth_token: authorization token + :rtype: ``OCEL`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_ocel_github(owner='pm4py', repo='pm4py-core') + """ + import pm4py + dataframe = pm4py.connectors.extract_log_github(owner, repo, auth_token) + return pm4py.convert_log_to_ocel(dataframe, "concept:name", "time:timestamp", ["case:concept:name", "org:resource", "case:repo"]) + + +def extract_ocel_camunda_workflow(connection_string: str) -> OCEL: + """ + Extracts an object-centric event log from the Camunda workflow system. + + :param connection_string: ODBC connection string to the Camunda database + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + ocel = pm4py.connectors.extract_ocel_camunda_workflow('Driver={PostgreSQL Unicode(x64)};SERVER=127.0.0.3;DATABASE=process-engine;UID=xx;PWD=yy') + """ + import pm4py + dataframe = pm4py.connectors.extract_log_camunda_workflow(connection_string) + return pm4py.convert_log_to_ocel(dataframe, "concept:name", "time:timestamp", ["case:concept:name", "processID", "org:resource"]) + + +def extract_ocel_sap_o2c(connection_string: str, prefix: str = '') -> OCEL: + """ + Extracts an object-centric event log for the SAP O2C process. + + :param connection_string: ODBC connection string to the SAP database + :param prefix: prefix for the tables (example: SAPSR3.) + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_ocel_sap_o2c('Driver={Oracle in instantclient_21_6};DBQ=127.0.0.3:1521/ZIB;UID=xx;PWD=yy') + """ + import pm4py + dataframe = pm4py.connectors.extract_log_sap_o2c(connection_string, prefix=prefix) + return pm4py.convert_log_to_ocel(dataframe, "concept:name", "time:timestamp", ["case:concept:name", "org:resource"]) + + +def extract_ocel_sap_accounting(connection_string: str, prefix: str = '') -> OCEL: + """ + Extracts an object-centric event log for the SAP Accounting process. + + :param connection_string: ODBC connection string to the SAP database + :param prefix: prefix for the tables (example: SAPSR3.) + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + import pm4py + + dataframe = pm4py.connectors.extract_ocel_sap_accounting('Driver={Oracle in instantclient_21_6};DBQ=127.0.0.3:1521/ZIB;UID=xx;PWD=yy') + """ + import pm4py + dataframe = pm4py.connectors.extract_log_sap_accounting(connection_string, prefix=prefix) + return pm4py.convert_log_to_ocel(dataframe, "concept:name", "time:timestamp", ["case:concept:name", "org:resource"]) diff --git a/pm4py/pm4py/convert.py b/pm4py/pm4py/convert.py new file mode 100644 index 0000000000000000000000000000000000000000..7c510d7f26edc8aefb69af79642aa33b78aefc4a --- /dev/null +++ b/pm4py/pm4py/convert.py @@ -0,0 +1,475 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.convert`` module contains the cross-conversions implemented in ``pm4py`` +""" + +from typing import Union, Tuple, Optional, Collection, List, Any, Dict + +import pandas as pd +from copy import deepcopy + +from pm4py.objects.bpmn.obj import BPMN +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.powl.obj import POWL +from pm4py.objects.heuristics_net.obj import HeuristicsNet +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.objects.petri_net.obj import Marking +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.util import constants, nx_utils +from pm4py.utils import get_properties, __event_log_deprecation_warning +from pm4py.objects.transition_system.obj import TransitionSystem +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns +import networkx as nx + + +def convert_to_event_log(obj: Union[pd.DataFrame, EventStream], case_id_key: str = "case:concept:name", **kwargs) -> EventLog: + """ + Converts a DataFrame/EventStream object to an event log object + + :param obj: DataFrame or EventStream object + :param case_id_key: attribute to be used as case identifier + :rtype: ``EventLog`` + + .. code-block:: python3 + + import pandas as pd + import pm4py + + dataframe = pm4py.read_csv("tests/input_data/running-example.csv") + dataframe = pm4py.format_dataframe(dataframe, case_id_column='case:concept:name', activity_column='concept:name', timestamp_column='time:timestamp') + log = pm4py.convert_to_event_log(dataframe) + """ + + if check_is_pandas_dataframe(obj): + check_pandas_dataframe_columns(obj, case_id_key=case_id_key) + + parameters = get_properties(obj, case_id_key=case_id_key) + for k, v in kwargs.items(): + parameters[k] = v + + from pm4py.objects.conversion.log import converter + log = converter.apply(obj, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + + __event_log_deprecation_warning(log) + + return log + + +def convert_to_event_stream(obj: Union[EventLog, pd.DataFrame], case_id_key: str = "case:concept:name", **kwargs) -> EventStream: + """ + Converts a log object to an event stream + + :param obj: log object + :param case_id_key: attribute to be used as case identifier + :rtype: ``EventStream`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/running-example.xes") + event_stream = pm4py.convert_to_event_stream(log) + + """ + if check_is_pandas_dataframe(obj): + check_pandas_dataframe_columns(obj, case_id_key=case_id_key) + + parameters = get_properties(obj, case_id_key=case_id_key) + for k, v in kwargs.items(): + parameters[k] = v + + from pm4py.objects.conversion.log import converter + stream = converter.apply(obj, variant=converter.Variants.TO_EVENT_STREAM, parameters=parameters) + + __event_log_deprecation_warning(stream) + + return stream + + +def convert_to_dataframe(obj: Union[EventStream, EventLog], **kwargs) -> pd.DataFrame: + """ + Converts a log object to a dataframe + + :param obj: log object + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/running-example.xes") + dataframe = pm4py.convert_to_dataframe(log) + """ + if check_is_pandas_dataframe(obj): + check_pandas_dataframe_columns(obj) + + parameters = get_properties(obj) + for k, v in kwargs.items(): + parameters[k] = v + + from pm4py.objects.conversion.log import converter + df = converter.apply(obj, variant=converter.Variants.TO_DATA_FRAME, parameters=parameters) + return df + + +def convert_to_bpmn(*args: Union[Tuple[PetriNet, Marking, Marking], ProcessTree]) -> BPMN: + """ + Converts an object to a BPMN diagram. + As an input, either a Petri net (with corresponding initial and final marking) or a process tree can be provided. + A process tree can always be converted into a BPMN model and thus quality of the result object is guaranteed. + For Petri nets, the quality of the converison largely depends on the net provided (e.g., sound WF-nets are likely to produce reasonable BPMN models) + + :param args: petri net (with initial and final marking) or process tree + :rtype: ``BPMN`` + + .. code-block:: python3 + + import pm4py + + # import a Petri net from a file + net, im, fm = pm4py.read_pnml("tests/input_data/running-example.pnml") + bpmn_graph = pm4py.convert_to_bpmn(net, im, fm) + """ + from pm4py.objects.process_tree.obj import ProcessTree + from pm4py.objects.bpmn.obj import BPMN + + if isinstance(args[0], BPMN): + # the object is already a BPMN + return args[0] + elif isinstance(args[0], ProcessTree): + from pm4py.objects.conversion.process_tree.variants import to_bpmn + return to_bpmn.apply(args[0]) + else: + # try to convert the object to a Petri net. Then, use the PM4Py PN-to-BPMN converter + # to get the BPMN object + try: + net, im, fm = convert_to_petri_net(*args) + from pm4py.objects.conversion.wf_net.variants import to_bpmn + return to_bpmn.apply(net, im, fm) + except: + # don't do nothing and throw the following exception + pass + # if no conversion is done, then the format of the arguments is unsupported + raise Exception("unsupported conversion of the provided object to BPMN") + + +def convert_to_petri_net(*args: Union[BPMN, ProcessTree, HeuristicsNet, POWL, dict]) -> Tuple[PetriNet, Marking, Marking]: + """ + Converts an input model to an (accepting) Petri net. + The input objects can either be a process tree, BPMN model or a Heuristic net. + The output is a triple, containing the Petri net and the initial and final markings. The markings are only returned if they can be reasonable derived from the input model. + + :param args: process tree, Heuristics net, BPMN or POWL model + :rtype: ``Tuple[PetriNet, Marking, Marking]`` + + .. code-block:: python3 + + import pm4py + + # imports a process tree from a PTML file + process_tree = pm4py.read_ptml("tests/input_data/running-example.ptml") + net, im, fm = pm4py.convert_to_petri_net(process_tree) + """ + if isinstance(args[0], PetriNet): + # the object is already a Petri net + return args[0], args[1], args[2] + elif isinstance(args[0], ProcessTree): + if isinstance(args[0], POWL): + from pm4py.objects.conversion.powl import converter + return converter.apply(args[0]) + from pm4py.objects.conversion.process_tree.variants import to_petri_net + return to_petri_net.apply(args[0]) + elif isinstance(args[0], BPMN): + from pm4py.objects.conversion.bpmn.variants import to_petri_net + return to_petri_net.apply(args[0]) + elif isinstance(args[0], HeuristicsNet): + from pm4py.objects.conversion.heuristics_net.variants import to_petri_net + return to_petri_net.apply(args[0]) + elif isinstance(args[0], dict): + # DFG + from pm4py.objects.conversion.dfg.variants import to_petri_net_activity_defines_place + return to_petri_net_activity_defines_place.apply(args[0], parameters={ + to_petri_net_activity_defines_place.Parameters.START_ACTIVITIES: args[1], + to_petri_net_activity_defines_place.Parameters.END_ACTIVITIES: args[2]}) + # if no conversion is done, then the format of the arguments is unsupported + raise Exception("unsupported conversion of the provided object to Petri net") + + +def convert_to_process_tree(*args: Union[Tuple[PetriNet, Marking, Marking], BPMN]) -> ProcessTree: + """ + Converts an input model to a process tree. + The input models can either be Petri nets (marked) or BPMN models. + For both input types, the conversion is not guaranteed to work, hence, invocation of the method can yield an Exception. + + :param args: petri net (along with initial and final marking) or BPMN + :rtype: ``ProcessTree`` + + .. code-block:: python3 + + import pm4py + + # imports a BPMN file + bpmn_graph = pm4py.read_bpmn("tests/input_data/running-example.bpmn") + # converts the BPMN to a process tree (through intermediate conversion to a Petri net) + process_tree = pm4py.convert_to_process_tree(bpmn_graph) + """ + from pm4py.objects.process_tree.obj import ProcessTree + from pm4py.objects.petri_net.obj import PetriNet + if isinstance(args[0], ProcessTree): + # the object is already a process tree + return args[0] + + if isinstance(args[0], PetriNet): + net, im, fm = args[0], args[1], args[2] + else: + net, im, fm = convert_to_petri_net(*args) + + from pm4py.objects.conversion.wf_net.variants import to_process_tree + tree = to_process_tree.apply(net, im, fm) + if tree is not None: + return tree + + raise Exception("the object represents a model that cannot be represented as a process tree!") + + +def convert_to_reachability_graph(*args: Union[Tuple[PetriNet, Marking, Marking], BPMN, ProcessTree]) -> TransitionSystem: + """ + Converts an input model to a reachability graph (transition system). + The input models can either be Petri nets (with markings), BPMN models or process trees. + The output is the state-space of the model (i.e., the reachability graph), enocdoed as a ``TransitionSystem`` object. + + :param args: petri net (along with initial and final marking), process tree or BPMN + :rtype: ``TransitionSystem`` + + .. code-block:: python3 + + import pm4py + + # reads a Petri net from a file + net, im, fm = pm4py.read_pnml("tests/input_data/running-example.pnml") + # converts it to reachability graph + reach_graph = pm4py.convert_to_reachability_graph(net, im, fm) + """ + if isinstance(args[0], PetriNet): + net, im, fm = args[0], args[1], args[2] + else: + net, im, fm = convert_to_petri_net(*args) + + from pm4py.objects.petri_net.utils import reachability_graph + return reachability_graph.construct_reachability_graph(net, im) + + +def convert_log_to_ocel(log: Union[EventLog, EventStream, pd.DataFrame], activity_column: str = "concept:name", timestamp_column: str = "time:timestamp", object_types: Optional[Collection[str]] = None, obj_separator: str = " AND ", additional_event_attributes: Optional[Collection[str]] = None, additional_object_attributes: Optional[Dict[str, Collection[str]]] = None) -> OCEL: + """ + Converts an event log to an object-centric event log with one or more than one + object types. + + :param log_obj: log object + :param activity_column: activity column + :param timestamp_column: timestamp column + :param object_types: list of columns to consider as object types + :param obj_separator: separator between different objects in the same column + :param additional_event_attributes: additional attributes to be considered as event attributes in the OCEL + :param additional_object_attributes: additional attributes per object type to be considered as object attributes in the OCEL (dictionary in which object types are associated to their attributes, i.e., {"order": ["quantity", "cost"], "invoice": ["date", "due date"]}) + :rtype: ``OCEL`` + + .. code-block:: python3 + import pm4py + + ocel = pm4py.convert_log_to_ocel(log, activity_column='concept:name', timestamp_column='time:timestamp', + object_types=['case:concept:name']) + """ + __event_log_deprecation_warning(log) + + if isinstance(log, EventStream): + log = convert_to_dataframe(log) + + if object_types is None: + object_types = list(set(x for x in log.columns if x == "case:concept:name" or x.startswith("ocel:type"))) + + from pm4py.objects.ocel.util import log_ocel + return log_ocel.log_to_ocel_multiple_obj_types(log, activity_column, timestamp_column, object_types, obj_separator, additional_event_attributes=additional_event_attributes, additional_object_attributes=additional_object_attributes) + + +def convert_ocel_to_networkx(ocel: OCEL, variant: str = "ocel_to_nx") -> nx.DiGraph: + """ + Converts an OCEL to a NetworkX DiGraph object. + + :param ocel: object-centric event log + :param variant: variant of the conversion to use: "ocel_to_nx" -> graph containing event and object IDS and two type of relations (REL=related objects, DF=directly-follows); "ocel_features_to_nx" -> graph containing different types of interconnection at the object level + :rtype: ``nx.DiGraph`` + + .. code-block:: python3 + import pm4py + + nx_digraph = pm4py.convert_ocel_to_networkx(ocel, variant='ocel_to_nx') + """ + from pm4py.objects.conversion.ocel import converter + + variant1 = None + if variant == "ocel_to_nx": + variant1 = converter.Variants.OCEL_TO_NX + elif variant == "ocel_features_to_nx": + variant1 = converter.Variants.OCEL_FEATURES_TO_NX + + return converter.apply(ocel, variant=variant1) + + +def convert_log_to_networkx(log: Union[EventLog, EventStream, pd.DataFrame], include_df: bool = True, case_id_key: str = "concept:name", other_case_attributes_as_nodes: Optional[Collection[str]] = None, event_attributes_as_nodes: Optional[Collection[str]] = None) -> nx.DiGraph: + """ + Converts an event log object to a NetworkX DiGraph object. + The nodes of the graph are the events, the cases (and possibly the attributes of the log). + The edges are: + - Connecting each event to the corresponding case (BELONGS_TO type) + - Connecting every event to the directly-following one (DF type, if enabled) + - Connecting every case/event to the given attribute values (ATTRIBUTE_EDGE type) + + :param log: log object (EventLog, EventStream, Pandas dataframe) + :param include_df: include the directly-follows graph relation in the graph (bool) + :param case_id_attribute: specify which attribute at the case level should be considered the case ID (str) + :param other_case_attributes_as_nodes: specify which attributes at the case level should be inserted in the graph as nodes (other than the caseID) (list, default empty) + :param event_attributes_as_nodes: specify which attributes at the event level should be inserted in the graph as nodes (list, default empty) + :rtype: ``nx.DiGraph`` + + .. code-block:: python3 + import pm4py + + nx_digraph = pm4py.convert_log_to_networkx(log, other_case_attributes_as_nodes=['responsible', 'department'], event_attributes_as_nodes=['concept:name', 'org:resource']) + """ + from pm4py.objects.conversion.log import converter + + return converter.apply(log, variant=converter.Variants.TO_NX, parameters={"include_df": include_df, "case_id_attribute": case_id_key, "other_case_attributes_as_nodes": other_case_attributes_as_nodes, "event_attributes_as_nodes": event_attributes_as_nodes}) + + +def convert_log_to_time_intervals(log: Union[EventLog, pd.DataFrame], filter_activity_couple: Optional[Tuple[str, str]] = None, + activity_key: str = "concept:name", + timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", + start_timestamp_key: str = "time:timestamp" + ) -> List[List[Any]]: + """ + Gets a list of intervals from an event log. + Each interval contains two temporally consecutive events and measures the time between the two events + (complete timestamp of the first against start timestamp of the second). + + :param log: log object + :param filter_activity_couple: (optional) filters the intervals to only consider a given couple of activities of the log + :param activity_key: the attribute to be used as activity + :param timestamp_key: the attribute to be used as timestamp + :param case_id_key: the attribute to be used as case identifier + :param start_timestamp_key: the attribute to be used as start timestamp + :rtype: ``List[List[Any]]`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/receipt.xes') + time_intervals = pm4py.convert_log_to_time_intervals(log) + print(len(time_intervals)) + time_intervals = pm4py.convert_log_to_time_intervals(log, ('Confirmation of receipt', 'T02 Check confirmation of receipt')) + print(len(time_intervals)) + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + properties["filter_activity_couple"] = filter_activity_couple + properties[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = start_timestamp_key + + from pm4py.algo.transformation.log_to_interval_tree.variants import open_paths + return open_paths.log_to_intervals(log, parameters=properties) + + +def convert_petri_net_to_networkx(net: PetriNet, im: Marking, fm: Marking) -> nx.DiGraph: + """ + Converts a Petri net to a NetworkX DiGraph. + Each place and transition is corresponding to a node in the graph. + + :param net: Petri net + :param im: initial marking + :param fm: final marking + :rtype: ``nx.DiGraph`` + + .. code-block:: python3 + import pm4py + + net, im, fm = pm4py.read_pnml('tests/input_data/running-example.pnml') + nx_digraph = pm4py.convert_petri_to_networkx(net, im, fm) + """ + G = nx_utils.DiGraph() + for place in net.places: + G.add_node(place.name, attr={"name": place.name, "is_in_im": place in im, "is_in_fm": place in fm, "type": "place"}) + for trans in net.transitions: + G.add_node(trans.name, attr={"name": trans.name, "label": trans.label, "type": "transition"}) + for arc in net.arcs: + G.add_edge(arc.source.name, arc.target.name, attr={"weight": arc.weight, "properties": arc.properties}) + return G + + +def convert_petri_net_type(net: PetriNet, im: Marking, fm: Marking, type: str = "classic") -> Tuple[PetriNet, Marking, Marking]: + """ + Changes the Petri net (internal) type + + :param net: petri net + :param im: initial marking + :param fm: final marking + :param type: internal type (classic, reset, inhibitor, reset_inhibitor) + :rtype: ``Tuple[PetriNet, Marking, Marking]`` + + .. code-block:: python3 + import pm4py + + net, im, fm = pm4py.read_pnml('tests/input_data/running-example.pnml') + reset_net, new_im, new_fm = pm4py.convert_petri_net_type(net, im, fm, type='reset_inhibitor') + """ + from pm4py.objects.petri_net.utils import petri_utils + + [net, im, fm] = deepcopy([net, im, fm]) + new_net = None + if type == "classic": + from pm4py.objects.petri_net.obj import PetriNet + new_net = PetriNet(net.name) + elif type == "reset": + from pm4py.objects.petri_net.obj import ResetNet + new_net = ResetNet(net.name) + elif type == "inhibitor": + from pm4py.objects.petri_net.obj import InhibitorNet + new_net = InhibitorNet(net.name) + elif type == "reset_inhibitor": + from pm4py.objects.petri_net.obj import ResetInhibitorNet + new_net = ResetInhibitorNet(net.name) + for place in net.places: + new_net.places.add(place) + in_arcs = set(place.in_arcs) + out_arcs = set(place.out_arcs) + for arc in in_arcs: + place.in_arcs.remove(arc) + for arc in out_arcs: + place.out_arcs.remove(arc) + for trans in net.transitions: + new_net.transitions.add(trans) + in_arcs = set(trans.in_arcs) + out_arcs = set(trans.out_arcs) + for arc in in_arcs: + trans.in_arcs.remove(arc) + for arc in out_arcs: + trans.out_arcs.remove(arc) + for arc in net.arcs: + arc_type = arc.properties["arctype"] if "arctype" in arc.properties else None + new_arc = petri_utils.add_arc_from_to(arc.source, arc.target, new_net, weight=arc.weight, type=arc_type) + return new_net, im, fm diff --git a/pm4py/pm4py/discovery.py b/pm4py/pm4py/discovery.py new file mode 100644 index 0000000000000000000000000000000000000000..9b0aec81c9248e8886c6f0aa57ee3f8d3c4ac0e5 --- /dev/null +++ b/pm4py/pm4py/discovery.py @@ -0,0 +1,867 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.discovery`` module contains the process discovery algorithms implemented in ``pm4py`` +""" + +from typing import Tuple, Union, List, Dict, Any, Optional, Set + +import pandas as pd +from pandas import DataFrame + +from pm4py.algo.discovery.powl.inductive.utils.filtering import FILTERING_THRESHOLD +from pm4py.algo.discovery.powl.inductive.variants.dynamic_clustering_frequency.dynamic_clustering_frequency_partial_order_cut import \ + ORDER_FREQUENCY_RATIO +from pm4py.algo.discovery.powl.inductive.variants.powl_discovery_varaints import POWLDiscoveryVariant +from pm4py.objects.bpmn.obj import BPMN +from pm4py.objects.dfg.obj import DFG +from pm4py.objects.powl.obj import POWL +from pm4py.objects.heuristics_net.obj import HeuristicsNet +from pm4py.objects.transition_system.obj import TransitionSystem +from pm4py.objects.trie.obj import Trie +from pm4py.objects.log.obj import EventLog +from pm4py.objects.log.obj import EventStream +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns +from pm4py.utils import get_properties, __event_log_deprecation_warning +from pm4py.util import constants, pandas_utils +import deprecation +import importlib.util + + +def discover_dfg(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Tuple[dict, dict, dict]: + """ + Discovers a Directly-Follows Graph (DFG) from a log. + + This method returns a dictionary with the couples of directly-following activities (in the log) + as keys and the frequency of relation as value. + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Tuple[dict, dict, dict]`` + + .. code-block:: python3 + + import pm4py + + dfg, start_activities, end_activities = pm4py.discover_dfg(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.util import constants + + from pm4py.algo.discovery.dfg.adapters.pandas.df_statistics import get_dfg_graph + dfg = get_dfg_graph(log, activity_key=activity_key, + timestamp_key=timestamp_key, + case_id_glue=case_id_key) + from pm4py.statistics.start_activities.pandas import get as start_activities_module + from pm4py.statistics.end_activities.pandas import get as end_activities_module + start_activities = start_activities_module.get_start_activities( + log, parameters=properties) + end_activities = end_activities_module.get_end_activities( + log, parameters=properties) + else: + from pm4py.algo.discovery.dfg import algorithm as dfg_discovery + dfg = dfg_discovery.apply(log, parameters=properties) + from pm4py.statistics.start_activities.log import get as start_activities_module + from pm4py.statistics.end_activities.log import get as end_activities_module + start_activities = start_activities_module.get_start_activities( + log, parameters=properties) + end_activities = end_activities_module.get_end_activities( + log, parameters=properties) + return dfg, start_activities, end_activities + + +def discover_directly_follows_graph(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Tuple[dict, dict, dict]: + return discover_dfg(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + +def discover_dfg_typed(log: pd.DataFrame, case_id_key: str = "case:concept:name", activity_key: str = "concept:name", timestamp_key: str = "time:timestamp") -> DFG: + """ + Discovers a Directly-Follows Graph (DFG) from a log. + + This method returns a typed DFG object, i.e., as specified in ``pm4py.objects.dfg.obj.py`` (``DirectlyFollowsGraph`` Class) + The DFG object describes a graph, start activities and end activities. + The graph is a collection of triples of the form (a,b,f) representing an arc a->b with frequency f. + The start activities are a collection of tuples of the form (a,f) representing that activity a starts f cases. + The end activities are a collection of tuples of the form (a,f) representing that ativity a ends f cases. + + This method replaces ``pm4py.discover_dfg`` and ``pm4py.discover_directly_follows_graph``. In a future release, these functions will adopt the same behavior as this function. + + :param log: ``pandas.DataFrame`` + :param case_id_key: attribute to be used as case identifier + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + + :rtype: ``DFG`` + + .. code-block:: python3 + + import pm4py + + dfg = pm4py.discover_dfg_typed(log, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp') + """ + from pm4py.algo.discovery.dfg.variants import clean + parameters = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if importlib.util.find_spec("polars"): + import polars as pl + if type(log) is pl.DataFrame: + from pm4py.algo.discovery.dfg.variants import clean_polars + return clean_polars.apply(log, parameters) + + if pandas_utils.check_is_pandas_dataframe(log): + return clean.apply(log, parameters) + else: + raise TypeError('pm4py.discover_dfg_typed is only defined for dataFrames') + + +def discover_performance_dfg(log: Union[EventLog, pd.DataFrame], business_hours: bool = False, business_hour_slots=constants.DEFAULT_BUSINESS_HOUR_SLOTS, workcalendar=constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Tuple[dict, dict, dict]: + """ + Discovers a performance directly-follows graph from an event log. + + This method returns a dictionary with the couples of directly-following activities (in the log) + as keys and the performance of relation as value. + + :param log: event log / Pandas dataframe + :param business_hours: enables/disables the computation based on the business hours (default: False) + :param business_hour_slots: work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. [(7 * 60 * 60, 17 * 60 * 60), ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60),] meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Tuple[dict, dict, dict]`` + + .. code-block:: python3 + + import pm4py + + performance_dfg, start_activities, end_activities = pm4py.discover_performance_dfg(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.util import constants + + from pm4py.algo.discovery.dfg.adapters.pandas.df_statistics import get_dfg_graph + dfg = get_dfg_graph(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_glue=case_id_key, measure="performance", perf_aggregation_key="all", + business_hours=business_hours, business_hours_slot=business_hour_slots, workcalendar=workcalendar) + from pm4py.statistics.start_activities.pandas import get as start_activities_module + from pm4py.statistics.end_activities.pandas import get as end_activities_module + start_activities = start_activities_module.get_start_activities( + log, parameters=properties) + end_activities = end_activities_module.get_end_activities( + log, parameters=properties) + else: + from pm4py.algo.discovery.dfg.variants import performance as dfg_discovery + properties[dfg_discovery.Parameters.AGGREGATION_MEASURE] = "all" + properties[dfg_discovery.Parameters.BUSINESS_HOURS] = business_hours + properties[dfg_discovery.Parameters.BUSINESS_HOUR_SLOTS] = business_hour_slots + dfg = dfg_discovery.apply(log, parameters=properties) + from pm4py.statistics.start_activities.log import get as start_activities_module + from pm4py.statistics.end_activities.log import get as end_activities_module + start_activities = start_activities_module.get_start_activities( + log, parameters=properties) + end_activities = end_activities_module.get_end_activities( + log, parameters=properties) + return dfg, start_activities, end_activities + + +def discover_petri_net_alpha(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using the Alpha Miner. + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Tuple[PetriNet, Marking, Marking]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_alpha(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + return alpha_miner.apply(log, variant=alpha_miner.Variants.ALPHA_VERSION_CLASSIC, parameters=get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key)) + + +def discover_petri_net_ilp(log: Union[EventLog, pd.DataFrame], alpha: float = 1.0, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using the ILP Miner. + + :param log: event log / Pandas dataframe + :param alpha: noise threshold for the sequence encoding graph (1.0=no filtering, 0.0=greatest filtering) + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Tuple[PetriNet, Marking, Marking]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_ilp(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["alpha"] = alpha + + from pm4py.algo.discovery.ilp import algorithm as ilp_miner + return ilp_miner.apply(log, variant=ilp_miner.Variants.CLASSIC, parameters=parameters) + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="this method will be removed in a future release.") +def discover_petri_net_alpha_plus(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Tuple[PetriNet, Marking, Marking]: + """ + Discovers a Petri net using the Alpha+ algorithm + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Tuple[PetriNet, Marking, Marking]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_alpha_plus(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + return alpha_miner.apply(log, variant=alpha_miner.Variants.ALPHA_VERSION_PLUS, parameters=get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key)) + + +def discover_petri_net_inductive(log: Union[EventLog, pd.DataFrame, DFG], multi_processing: bool = constants.ENABLE_MULTIPROCESSING_DEFAULT, noise_threshold: float = 0.0, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", disable_fallthroughs: bool = False) -> Tuple[ + PetriNet, Marking, Marking]: + """ + Discovers a Petri net using the inductive miner algorithm. + + The basic idea of Inductive Miner is about detecting a 'cut' in the log (e.g. sequential cut, parallel cut, concurrent cut and loop cut) and then recur on sublogs, which were found applying the cut, until a base case is found. The Directly-Follows variant avoids the recursion on the sublogs but uses the Directly Follows graph. + + Inductive miner models usually make extensive use of hidden transitions, especially for skipping/looping on a portion on the model. Furthermore, each visible transition has a unique label (there are no transitions in the model that share the same label). + + :param log: event log / Pandas dataframe / typed DFG + :param noise_threshold: noise threshold (default: 0.0) + :param multi_processing: boolean that enables/disables multiprocessing in inductive miner + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param disable_fallthroughs: disable the Inductive Miner fall-throughs + :rtype: ``Tuple[PetriNet, Marking, Marking]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + pt = discover_process_tree_inductive( + log, noise_threshold, multi_processing=multi_processing, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key, disable_fallthroughs=disable_fallthroughs) + from pm4py.convert import convert_to_petri_net + return convert_to_petri_net(pt) + + +def discover_petri_net_heuristics(log: Union[EventLog, pd.DataFrame], dependency_threshold: float = 0.5, + and_threshold: float = 0.65, + loop_two_threshold: float = 0.5, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Tuple[PetriNet, Marking, Marking]: + """ + Discover a Petri net using the Heuristics Miner + + Heuristics Miner is an algorithm that acts on the Directly-Follows Graph, providing way to handle with noise and to find common constructs (dependency between two activities, AND). The output of the Heuristics Miner is an Heuristics Net, so an object that contains the activities and the relationships between them. The Heuristics Net can be then converted into a Petri net. The paper can be visited by clicking on the upcoming link: this link). + + :param log: event log / Pandas dataframe + :param dependency_threshold: dependency threshold (default: 0.5) + :param and_threshold: AND threshold (default: 0.65) + :param loop_two_threshold: loop two threshold (default: 0.5) + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Tuple[PetriNet, Marking, Marking]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_heuristics(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + from pm4py.algo.discovery.heuristics.variants import classic as heuristics_miner + heu_parameters = heuristics_miner.Parameters + parameters = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters[heu_parameters.DEPENDENCY_THRESH] = dependency_threshold + parameters[heu_parameters.AND_MEASURE_THRESH] = and_threshold + parameters[heu_parameters.LOOP_LENGTH_TWO_THRESH] = loop_two_threshold + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + return heuristics_miner.apply_pandas(log, parameters=parameters) + else: + return heuristics_miner.apply(log, parameters=parameters) + + +def discover_process_tree_inductive(log: Union[EventLog, pd.DataFrame, DFG], noise_threshold: float = 0.0, multi_processing: bool = constants.ENABLE_MULTIPROCESSING_DEFAULT, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", disable_fallthroughs: bool = False) -> ProcessTree: + """ + Discovers a process tree using the inductive miner algorithm + + The basic idea of Inductive Miner is about detecting a 'cut' in the log (e.g. sequential cut, parallel cut, concurrent cut and loop cut) and then recur on sublogs, which were found applying the cut, until a base case is found. The Directly-Follows variant avoids the recursion on the sublogs but uses the Directly Follows graph. + + Inductive miner models usually make extensive use of hidden transitions, especially for skipping/looping on a portion on the model. Furthermore, each visible transition has a unique label (there are no transitions in the model that share the same label). + + :param log: event log / Pandas dataframe / typed DFG + :param noise_threshold: noise threshold (default: 0.0) + :param activity_key: attribute to be used for the activity + :param multi_processing: boolean that enables/disables multiprocessing in inductive miner + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param disable_fallthroughs: disable the Inductive Miner fall-throughs + :rtype: ``ProcessTree`` + + .. code-block:: python3 + + import pm4py + + process_tree = pm4py.discover_process_tree_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + parameters = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["noise_threshold"] = noise_threshold + parameters["multiprocessing"] = multi_processing + parameters["disable_fallthroughs"] = disable_fallthroughs + + variant = inductive_miner.Variants.IMf if noise_threshold > 0 else inductive_miner.Variants.IM + + if isinstance(log, DFG): + variant = inductive_miner.Variants.IMd + + return inductive_miner.apply(log, variant=variant, parameters=parameters) + + +def discover_heuristics_net(log: Union[EventLog, pd.DataFrame], dependency_threshold: float = 0.5, + and_threshold: float = 0.65, + loop_two_threshold: float = 0.5, min_act_count: int = 1, min_dfg_occurrences: int = 1, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", decoration: str = "frequency") -> HeuristicsNet: + """ + Discovers an heuristics net + + Heuristics Miner is an algorithm that acts on the Directly-Follows Graph, providing way to handle with noise and to find common constructs (dependency between two activities, AND). The output of the Heuristics Miner is an Heuristics Net, so an object that contains the activities and the relationships between them. The Heuristics Net can be then converted into a Petri net. The paper can be visited by clicking on the upcoming link: this link). + + :param log: event log / Pandas dataframe + :param dependency_threshold: dependency threshold (default: 0.5) + :param and_threshold: AND threshold (default: 0.65) + :param loop_two_threshold: loop two threshold (default: 0.5) + :param min_act_count: minimum number of occurrences per activity in order to be included in the discovery + :param min_dfg_occurrences: minimum number of occurrences per arc in the DFG in order to be included in the discovery + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param decoration: the decoration that should be used (frequency, performance) + :rtype: ``HeuristicsNet`` + + .. code-block:: python3 + + import pm4py + + heu_net = pm4py.discover_heuristics_net(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + from pm4py.algo.discovery.heuristics.variants import classic as heuristics_miner + heu_parameters = heuristics_miner.Parameters + parameters = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters[heu_parameters.DEPENDENCY_THRESH] = dependency_threshold + parameters[heu_parameters.AND_MEASURE_THRESH] = and_threshold + parameters[heu_parameters.LOOP_LENGTH_TWO_THRESH] = loop_two_threshold + parameters[heu_parameters.MIN_ACT_COUNT] = min_act_count + parameters[heu_parameters.MIN_DFG_OCCURRENCES] = min_dfg_occurrences + parameters[heu_parameters.HEU_NET_DECORATION] = decoration + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + return heuristics_miner.apply_heu_pandas(log, parameters=parameters) + else: + return heuristics_miner.apply_heu(log, parameters=parameters) + + +def derive_minimum_self_distance(log: Union[DataFrame, EventLog, EventStream], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[str, int]: + """ + This algorithm computes the minimum self-distance for each activity observed in an event log. + The self distance of a in is infinity, of a in is 0, in is 1, etc. + The activity key 'concept:name' is used. + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, int]`` + + .. code-block:: python3 + + import pm4py + + msd = pm4py.derive_minimum_self_distance(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.discovery.minimum_self_distance import algorithm as msd + return msd.apply(log, parameters=get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key)) + + +def discover_footprints(*args: Union[EventLog, Tuple[PetriNet, Marking, Marking], ProcessTree]) -> Union[ + List[Dict[str, Any]], Dict[str, Any]]: + """ + Discovers the footprints out of the provided event log / process model + + :param args: event log / process model + :rtype: ``Union[List[Dict[str, Any]], Dict[str, Any]]`` + + .. code-block:: python3 + + import pm4py + + footprints = pm4py.discover_footprints(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + from pm4py.algo.discovery.footprints import algorithm as fp_discovery + return fp_discovery.apply(*args) + + +def discover_eventually_follows_graph(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[Tuple[str, str], int]: + """ + Gets the eventually follows graph from a log object. + + The eventually follows graph is a dictionary associating to every + couple of activities which are eventually following each other the + number of occurrences of this relation. + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[Tuple[str, str], int]`` + + .. code-block:: python3 + + import pm4py + + efg = pm4py.discover_eventually_follows_graph(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.statistics.eventually_follows.pandas import get + return get.apply(log, parameters=properties) + else: + from pm4py.statistics.eventually_follows.log import get + return get.apply(log, parameters=properties) + + +def discover_bpmn_inductive(log: Union[EventLog, pd.DataFrame, DFG], noise_threshold: float = 0.0, multi_processing: bool = constants.ENABLE_MULTIPROCESSING_DEFAULT, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", disable_fallthroughs: bool = False) -> BPMN: + """ + Discovers a BPMN using the Inductive Miner algorithm + + The basic idea of Inductive Miner is about detecting a 'cut' in the log (e.g. sequential cut, parallel cut, concurrent cut and loop cut) and then recur on sublogs, which were found applying the cut, until a base case is found. The Directly-Follows variant avoids the recursion on the sublogs but uses the Directly Follows graph. + + Inductive miner models usually make extensive use of hidden transitions, especially for skipping/looping on a portion on the model. Furthermore, each visible transition has a unique label (there are no transitions in the model that share the same label). + + :param log: event log / Pandas dataframe / typed DFG + :param noise_threshold: noise threshold (default: 0.0) + :param multi_processing: boolean that enables/disables multiprocessing in inductive miner + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param disable_fallthroughs: disable the Inductive Miner fall-throughs + :rtype: ``BPMN`` + + .. code-block:: python3 + + import pm4py + + bpmn_graph = pm4py.discover_bpmn_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + pt = discover_process_tree_inductive( + log, noise_threshold, multi_processing=multi_processing, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key, disable_fallthroughs=disable_fallthroughs) + from pm4py.convert import convert_to_bpmn + return convert_to_bpmn(pt) + + +def discover_transition_system(log: Union[EventLog, pd.DataFrame], direction: str = "forward", window: int = 2, view: str = "sequence", activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> TransitionSystem: + """ + Discovers a transition system as described in the process mining book + "Process Mining: Data Science in Action" + + :param log: event log / Pandas dataframe + :param direction: direction in which the transition system is built (forward, backward) + :param window: window (2, 3, ...) + :param view: view to use in the construction of the states (sequence, set, multiset) + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``TransitionSystem`` + + .. code-block:: python3 + + import pm4py + + transition_system = pm4py.discover_transition_system(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + properties = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + properties["direction"] = direction + properties["window"] = window + properties["view"] = view + + from pm4py.algo.discovery.transition_system import algorithm as ts_discovery + return ts_discovery.apply(log, parameters=properties) + + +def discover_prefix_tree(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Trie: + """ + Discovers a prefix tree from the provided log object. + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Trie`` + + .. code-block:: python3 + + import pm4py + + prefix_tree = pm4py.discover_prefix_tree(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + properties = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.transformation.log_to_trie import algorithm as trie_discovery + return trie_discovery.apply(log, parameters=properties) + + +def discover_temporal_profile(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[Tuple[str, str], Tuple[float, float]]: + """ + Discovers a temporal profile from a log object. + + Implements the approach described in: + Stertz, Florian, Jürgen Mangler, and Stefanie Rinderle-Ma. "Temporal Conformance Checking at Runtime based on Time-infused Process Models." arXiv preprint arXiv:2008.07262 (2020). + + The output is a dictionary containing, for every couple of activities eventually following in at least a case of the log, + the average and the standard deviation of the difference of the timestamps. + + E.g. if the log has two cases: + + A (timestamp: 1980-01) B (timestamp: 1980-03) C (timestamp: 1980-06) + A (timestamp: 1990-01) B (timestamp: 1990-02) D (timestamp: 1990-03) + + The returned dictionary will contain: + {('A', 'B'): (1.5 months, 0.5 months), ('A', 'C'): (5 months, 0), ('A', 'D'): (2 months, 0)} + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[Tuple[str, str], Tuple[float, float]]`` + + .. code-block:: python3 + + import pm4py + + temporal_profile = pm4py.discover_temporal_profile(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + properties = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.discovery.temporal_profile import algorithm as temporal_profile_discovery + return temporal_profile_discovery.apply(log, parameters=properties) + + +def discover_log_skeleton(log: Union[EventLog, pd.DataFrame], noise_threshold: float = 0.0, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[str, Any]: + """ + Discovers a log skeleton from an event log. + + A log skeleton is a declarative model which consists of six different constraints: + - "directly_follows": specifies for some activities some strict bounds on the activities directly-following. For example, + 'A should be directly followed by B' and 'B should be directly followed by C'. + - "always_before": specifies that some activities may be executed only if some other activities are executed somewhen before + in the history of the case. + For example, 'C should always be preceded by A' + - "always_after": specifies that some activities should always trigger the execution of some other activities + in the future history of the case. + For example, 'A should always be followed by C' + - "equivalence": specifies that a given couple of activities should happen with the same number of occurrences inside + a case. + For example, 'B and C should always happen the same number of times'. + - "never_together": specifies that a given couple of activities should never happen together in the history of the case. + For example, 'there should be no case containing both C and D'. + - "activ_occurrences": specifies the allowed number of occurrences per activity: + E.g. A is allowed to be executed 1 or 2 times, B is allowed to be executed 1 or 2 or 3 or 4 times. + + Reference paper: + Verbeek, H. M. W., and R. Medeiros de Carvalho. "Log skeletons: A classification approach to process discovery." arXiv preprint arXiv:1806.08247 (2018). + + :param log: event log / Pandas dataframe + :param noise_threshold: noise threshold, acting as described in the paper. + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, Any]`` + + .. code-block:: python3 + + import pm4py + + log_skeleton = pm4py.discover_log_skeleton(dataframe, noise_threshold=0.1, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + properties = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + properties["noise_threshold"] = noise_threshold + + from pm4py.algo.discovery.log_skeleton import algorithm as log_skeleton_discovery + return log_skeleton_discovery.apply(log, parameters=properties) + + +def discover_declare(log: Union[EventLog, pd.DataFrame], allowed_templates: Optional[Set[str]] = None, considered_activities: Optional[Set[str]] = None, min_support_ratio: Optional[float] = None, min_confidence_ratio: Optional[float] = None, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[str, Dict[Any, Dict[str, int]]]: + """ + Discovers a DECLARE model from an event log. + + Reference paper: + F. M. Maggi, A. J. Mooij and W. M. P. van der Aalst, "User-guided discovery of declarative process models," 2011 IEEE Symposium on Computational Intelligence and Data Mining (CIDM), Paris, France, 2011, pp. 192-199, doi: 10.1109/CIDM.2011.5949297. + + :param log: event log / Pandas dataframe + :param allowed_templates: (optional) collection of templates to consider for the discovery + :param considered_activities: (optional) collection of activities to consider for the discovery + :param min_support_ratio: (optional, decided automatically otherwise) minimum percentage of cases (over the entire set of cases of the log) for which the discovered rules apply + :param min_confidence_ratio: (optional, decided automatically otherwise) minimum percentage of cases (over the rule's support) for which the discovered rules are valid + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, Any]`` + + .. code-block:: python3 + + import pm4py + + declare_model = pm4py.discover_declare(log) + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + properties = get_properties( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + properties["allowed_templates"] = allowed_templates + properties["considered_activities"] = considered_activities + properties["min_support_ratio"] = min_support_ratio + properties["min_confidence_ratio"] = min_confidence_ratio + + from pm4py.algo.discovery.declare import algorithm as declare_discovery + return declare_discovery.apply(log, parameters=properties) + + +def discover_powl(log: Union[EventLog, pd.DataFrame], variant=POWLDiscoveryVariant.MAXIMAL, + filtering_weight_factor: float = 0.0, order_graph_filtering_threshold: float = None, + activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", + case_id_key: str = "case:concept:name") -> POWL: + """ + Discovers a POWL model from an event log. + + Reference paper: + Kourani, Humam, and Sebastiaan J. van Zelst. "POWL: partially ordered workflow language." International Conference on Business Process Management. Cham: Springer Nature Switzerland, 2023. + + :param log: event log / Pandas dataframe + :param variant: variant of the algorithm + :param filtering_weight_factor: accepts values 0 <= x < 1 + :param order_graph_filtering_threshold: accepts values 0.5 < x <= 1 + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``POWL`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/receipt.xes') + powl_model = pm4py.discover_powl(log, activity_key='concept:name') + print(powl_model) + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + import pm4py + log = pm4py.convert_to_event_log(log, case_id_key=case_id_key) + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key) + + if order_graph_filtering_threshold is not None: + if variant is POWLDiscoveryVariant.DYNAMIC_CLUSTERING: + properties[ORDER_FREQUENCY_RATIO] = order_graph_filtering_threshold + else: + raise Exception("the order graph filtering threshold can only be used for the variant DYNAMIC_CLUSTERING") + + properties[FILTERING_THRESHOLD] = filtering_weight_factor + + from pm4py.algo.discovery.powl import algorithm as powl_discovery + return powl_discovery.apply(log, variant=variant, parameters=properties) + + +def discover_batches(log: Union[EventLog, pd.DataFrame], merge_distance: int = 15 * 60, min_batch_size: int = 2, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", resource_key: str = "org:resource") -> List[ + Tuple[Tuple[str, str], int, Dict[str, Any]]]: + """ + Discover batches from the provided log object + + We say that an activity is executed in batches by a given resource when the resource executes several times the same activity in a short period of time. + + Identifying such activities may identify points of the process that can be automated, since the activity of the person may be repetitive. + + The following categories of batches are detected: + - Simultaneous (all the events in the batch have identical start and end timestamps) + - Batching at start (all the events in the batch have identical start timestamp) + - Batching at end (all the events in the batch have identical end timestamp) + - Sequential batching (for all the consecutive events, the end of the first is equal to the start of the second) + - Concurrent batching (for all the consecutive events that are not sequentially matched) + + The approach has been described in the following paper: + Martin, N., Swennen, M., Depaire, B., Jans, M., Caris, A., & Vanhoof, K. (2015, December). Batch Processing: + Definition and Event Log Identification. In SIMPDA (pp. 137-140). + + The output is a (sorted) list containing tuples. Each tuple contain: + - Index 0: the activity-resource for which at least one batch has been detected + - Index 1: the number of batches for the given activity-resource + - Index 2: a list containing all the batches. Each batch is described by: + # The start timestamp of the batch + # The complete timestamp of the batch + # The list of events that are executed in the batch + + :param log: event log / Pandas dataframe + :param merge_distance: the maximum time distance between non-overlapping intervals in order for them to be considered belonging to the same batch (default: 15*60 15 minutes) + :param min_batch_size: the minimum number of events for a batch to be considered (default: 2) + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param resource_key: attribute to be used as resource + :rtype: ``List[Tuple[Tuple[str, str], int, Dict[str, Any]]]`` + + .. code-block:: python3 + + import pm4py + + batches = pm4py.discover_log_skeleton(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp', resource_key='org:resource') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns( + log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, + case_id_key=case_id_key, resource_key=resource_key) + properties["merge_distance"] = merge_distance + properties["min_batch_size"] = min_batch_size + + from pm4py.algo.discovery.batches import algorithm as batches_discovery + return batches_discovery.apply(log, parameters=properties) diff --git a/pm4py/pm4py/filtering.py b/pm4py/pm4py/filtering.py new file mode 100644 index 0000000000000000000000000000000000000000..7b49ce3107392017a06dd9a296f6ce6db607c01a --- /dev/null +++ b/pm4py/pm4py/filtering.py @@ -0,0 +1,1277 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.filtering`` module contains the filtering features offered in ``pm4py`` +""" + +from typing import Union, Set, List, Tuple, Collection, Any, Dict, Optional + +import pandas as pd + +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.util import constants, xes_constants, pandas_utils, nx_utils +import warnings +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns +from pm4py.utils import get_properties, __event_log_deprecation_warning +from pm4py.objects.ocel.obj import OCEL +import datetime + + +def filter_log_relative_occurrence_event_attribute(log: Union[EventLog, pd.DataFrame], min_relative_stake: float, attribute_key : str = xes_constants.DEFAULT_NAME_KEY, level="cases", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filters the event log keeping only the events having an attribute value which occurs: + - in at least the specified (min_relative_stake) percentage of events, when level="events" + - in at least the specified (min_relative_stake) percentage of cases, when level="cases" + + :param log: event log / Pandas dataframe + :param min_relative_stake: minimum percentage of cases (expressed as a number between 0 and 1) in which the attribute should occur. + :param attribute_key: the attribute to filter + :param level: the level of the filter (if level="events", then events / if level="cases", then cases) + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_log_relative_occurrence_event_attribute(dataframe, 0.5, level='cases', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, timestamp_key=timestamp_key, case_id_key=case_id_key, activity_key=attribute_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.attributes import attributes_filter + parameters[attributes_filter.Parameters.ATTRIBUTE_KEY] = attribute_key + parameters[attributes_filter.Parameters.KEEP_ONCE_PER_CASE] = True if level == "cases" else False + return attributes_filter.filter_df_relative_occurrence_event_attribute(log, min_relative_stake, parameters=parameters) + else: + from pm4py.algo.filtering.log.attributes import attributes_filter + parameters[attributes_filter.Parameters.ATTRIBUTE_KEY] = attribute_key + parameters[attributes_filter.Parameters.KEEP_ONCE_PER_CASE] = True if level == "cases" else False + return attributes_filter.filter_log_relative_occurrence_event_attribute(log, min_relative_stake, parameters=parameters) + + +def filter_start_activities(log: Union[EventLog, pd.DataFrame], activities: Union[Set[str], List[str]], retain: bool = True, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> \ +Union[EventLog, pd.DataFrame]: + """ + Filter cases having a start activity in the provided list + + :param log: event log / Pandas dataframe + :param activities: collection of start activities + :param retain: if True, we retain the traces containing the given start activities, if false, we drop the traces + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_start_activities(dataframe, ['Act. A'], activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.start_activities import start_activities_filter + parameters[start_activities_filter.Parameters.POSITIVE] = retain + return start_activities_filter.apply(log, activities, + parameters=parameters) + else: + from pm4py.algo.filtering.log.start_activities import start_activities_filter + parameters[start_activities_filter.Parameters.POSITIVE] = retain + return start_activities_filter.apply(log, activities, + parameters=parameters) + + +def filter_end_activities(log: Union[EventLog, pd.DataFrame], activities: Union[Set[str], List[str]], retain: bool = True, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[ + EventLog, pd.DataFrame]: + """ + Filter cases having an end activity in the provided list + + :param log: event log / Pandas dataframe + :param activities: collection of end activities + :param retain: if True, we retain the traces containing the given end activities, if false, we drop the traces + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_end_activities(dataframe, ['Act. Z'], activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.end_activities import end_activities_filter + parameters[end_activities_filter.Parameters.POSITIVE] = retain + return end_activities_filter.apply(log, activities, + parameters=parameters) + else: + from pm4py.algo.filtering.log.end_activities import end_activities_filter + parameters[end_activities_filter.Parameters.POSITIVE] = retain + return end_activities_filter.apply(log, activities, + parameters=parameters) + + +def filter_event_attribute_values(log: Union[EventLog, pd.DataFrame], attribute_key: str, values: Union[Set[str], List[str]], + level: str = "case", retain: bool = True, case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filter a log object on the values of some event attribute + + :param log: event log / Pandas dataframe + :param attribute_key: attribute to filter + :param values: admitted (or forbidden) values + :param level: specifies how the filter should be applied ('case' filters the cases where at least one occurrence happens, 'event' filter the events eventually trimming the cases) + :param retain: specifies if the values should be kept or removed + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_event_attribute_values(dataframe, 'concept:name', ['Act. A', 'Act. Z'], case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, case_id_key=case_id_key) + parameters[constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY] = attribute_key + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.attributes import attributes_filter + if level == "event": + parameters[attributes_filter.Parameters.POSITIVE] = retain + return attributes_filter.apply_events(log, values, + parameters=parameters) + elif level == "case": + parameters[attributes_filter.Parameters.POSITIVE] = retain + return attributes_filter.apply(log, values, parameters=parameters) + else: + from pm4py.algo.filtering.log.attributes import attributes_filter + if level == "event": + parameters[attributes_filter.Parameters.POSITIVE] = retain + return attributes_filter.apply_events(log, values, + parameters=parameters) + elif level == "case": + parameters[attributes_filter.Parameters.POSITIVE] = retain + return attributes_filter.apply(log, values, parameters=parameters) + + +def filter_trace_attribute_values(log: Union[EventLog, pd.DataFrame], attribute_key: str, values: Union[Set[str], List[str]], + retain: bool = True, case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filter a log on the values of a trace attribute + + :param log: event log / Pandas dataframe + :param attribute_key: attribute to filter + :param values: collection of values to filter + :param retain: boolean value (keep/discard matching traces) + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_trace_attribute_values(dataframe, 'case:creator', ['Mike'], case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, case_id_key=case_id_key) + parameters[constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY] = attribute_key + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.attributes import attributes_filter + parameters[attributes_filter.Parameters.POSITIVE] = retain + return attributes_filter.apply(log, values, + parameters=parameters) + else: + from pm4py.algo.filtering.log.attributes import attributes_filter + parameters[attributes_filter.Parameters.POSITIVE] = retain + return attributes_filter.apply_trace_attribute(log, values, parameters=parameters) + + +def filter_variants(log: Union[EventLog, pd.DataFrame], variants: Union[Set[str], List[str], List[Tuple[str]]], retain: bool = True, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[ + EventLog, pd.DataFrame]: + """ + Filter a log on a specified set of variants + + :param log: event log / Pandas dataframe + :param variants: collection of variants to filter; A variant should be specified as a list of tuples of activity names, e.g., [('a', 'b', 'c')] + :param retain: boolean; if True all traces conforming to the specified variants are retained; if False, all those traces are removed + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_variants(dataframe, [('Act. A', 'Act. B', 'Act. Z'), ('Act. A', 'Act. C', 'Act. Z')], activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + from pm4py.util import variants_util + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.variants import variants_filter + parameters[variants_filter.Parameters.POSITIVE] = retain + return variants_filter.apply(log, variants, + parameters=parameters) + else: + from pm4py.algo.filtering.log.variants import variants_filter + parameters[variants_filter.Parameters.POSITIVE] = retain + return variants_filter.apply(log, variants, + parameters=parameters) + + +def filter_directly_follows_relation(log: Union[EventLog, pd.DataFrame], relations: List[str], retain: bool = True, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> \ + Union[EventLog, pd.DataFrame]: + """ + Retain traces that contain any of the specified 'directly follows' relations. + For example, if relations == [('a','b'),('a','c')] and log [,,] + the resulting log will contain traces describing [,]. + + :param log: event log / Pandas dataframe + :param relations: list of activity name pairs, which are allowed/forbidden paths + :param retain: parameter that says whether the paths should be kept/removed + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_directly_follows_relation(dataframe, [('A','B'),('A','C')], activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + from pm4py.algo.filtering.pandas.paths import paths_filter + parameters[paths_filter.Parameters.POSITIVE] = retain + return paths_filter.apply(log, relations, parameters=parameters) + else: + from pm4py.algo.filtering.log.paths import paths_filter + parameters[paths_filter.Parameters.POSITIVE] = retain + return paths_filter.apply(log, relations, parameters=parameters) + + +def filter_eventually_follows_relation(log: Union[EventLog, pd.DataFrame], relations: List[str], retain: bool = True, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> \ + Union[EventLog, pd.DataFrame]: + """ + Retain traces that contain any of the specified 'eventually follows' relations. + For example, if relations == [('a','b'),('a','c')] and log [,,] + the resulting log will contain traces describing [,,]. + + :param log: event log / Pandas dataframe + :param relations: list of activity name pairs, which are allowed/forbidden paths + :param retain: parameter that says whether the paths should be kept/removed + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_eventually_follows_relation(dataframe, [('A','B'),('A','C')], activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + from pm4py.algo.filtering.pandas.ltl import ltl_checker + parameters[ltl_checker.Parameters.POSITIVE] = retain + if retain: + cases = set() + else: + cases = set(log[case_id_key].to_numpy().tolist()) + for path in relations: + filt_log = ltl_checker.eventually_follows(log, path, + parameters=parameters) + this_traces = set(filt_log[case_id_key].to_numpy().tolist()) + if retain: + cases = cases.union(this_traces) + else: + cases = cases.intersection(this_traces) + return log[log[case_id_key].isin(cases)] + else: + from pm4py.algo.filtering.log.ltl import ltl_checker + parameters[ltl_checker.Parameters.POSITIVE] = retain + if retain: + cases = set() + else: + cases = set(id(trace) for trace in log) + for path in relations: + filt_log = ltl_checker.eventually_follows(log, path, + parameters=parameters) + this_traces = set(id(trace) for trace in filt_log) + if retain: + cases = cases.union(this_traces) + else: + cases = cases.intersection(this_traces) + filtered_log = EventLog(attributes=log.attributes, extensions=log.extensions, omni_present=log.omni_present, + classifiers=log.classifiers, properties=log.properties) + for trace in log: + if id(trace) in cases: + filtered_log.append(trace) + return filtered_log + + +def filter_time_range(log: Union[EventLog, pd.DataFrame], dt1: str, dt2: str, mode="events", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[ + EventLog, pd.DataFrame]: + """ + Filter a log on a time interval + + :param log: event log / Pandas dataframe + :param dt1: left extreme of the interval + :param dt2: right extreme of the interval + :param mode: modality of filtering (events, traces_contained, traces_intersecting). events: any event that fits the time frame is retained; traces_contained: any trace completely contained in the timeframe is retained; traces_intersecting: any trace intersecting with the time-frame is retained. + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe1 = pm4py.filter_time_range(dataframe, '2010-01-01 00:00:00', '2011-01-01 00:00:00', mode='traces_contained', case_id_key='case:concept:name', timestamp_key='time:timestamp') + filtered_dataframe1 = pm4py.filter_time_range(dataframe, '2010-01-01 00:00:00', '2011-01-01 00:00:00', mode='traces_intersecting', case_id_key='case:concept:name', timestamp_key='time:timestamp') + filtered_dataframe1 = pm4py.filter_time_range(dataframe, '2010-01-01 00:00:00', '2011-01-01 00:00:00', mode='events', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + from pm4py.algo.filtering.pandas.timestamp import timestamp_filter + if mode == "events": + return timestamp_filter.apply_events(log, dt1, dt2, parameters=properties) + elif mode == "traces_contained": + return timestamp_filter.filter_traces_contained(log, dt1, dt2, parameters=properties) + elif mode == "traces_intersecting": + return timestamp_filter.filter_traces_intersecting(log, dt1, dt2, parameters=properties) + else: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn('mode provided: ' + mode + ' is not recognized; original log returned!') + return log + else: + from pm4py.algo.filtering.log.timestamp import timestamp_filter + if mode == "events": + return timestamp_filter.apply_events(log, dt1, dt2, parameters=properties) + elif mode == "traces_contained": + return timestamp_filter.filter_traces_contained(log, dt1, dt2, parameters=properties) + elif mode == "traces_intersecting": + return timestamp_filter.filter_traces_intersecting(log, dt1, dt2, parameters=properties) + else: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn('mode provided: ' + mode + ' is not recognized; original log returned!') + return log + + +def filter_between(log: Union[EventLog, pd.DataFrame], act1: Union[str, List[str]], act2: Union[str, List[str]], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Finds all the sub-cases leading from an event with activity "act1" to an event with activity "act2" in the log, + and returns a log containing only them. + + Example: + + Log + A B C D E F + A B E F C + A B F C B C B E F C + + act1 = B + act2 = C + + Returned sub-cases: + B C (from the first case) + B E F C (from the second case) + B F C (from the third case) + B C (from the third case) + B E F C (from the third case) + + :param log: event log / Pandas dataframe + :param act1: source activity (or collection of activities) + :param act2: target activity (or collection of activities) + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_between(dataframe, 'A', 'D', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.between import between_filter + return between_filter.apply(log, act1, act2, parameters=parameters) + else: + from pm4py.algo.filtering.log.between import between_filter + return between_filter.apply(log, act1, act2, parameters=parameters) + + +def filter_case_size(log: Union[EventLog, pd.DataFrame], min_size: int, max_size: int, case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filters the event log, keeping the cases having a length (number of events) included between min_size + and max_size + + :param log: event log / Pandas dataframe + :param min_size: minimum allowed number of events + :param max_size: maximum allowed number of events + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_case_size(dataframe, 5, 10, case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.cases import case_filter + case_id = parameters[ + constants.PARAMETER_CONSTANT_CASEID_KEY] if constants.PARAMETER_CONSTANT_CASEID_KEY in parameters else constants.CASE_CONCEPT_NAME + return case_filter.filter_on_case_size(log, case_id, min_size, max_size) + else: + from pm4py.algo.filtering.log.cases import case_filter + return case_filter.filter_on_case_size(log, min_size, max_size) + + +def filter_case_performance(log: Union[EventLog, pd.DataFrame], min_performance: float, max_performance: float, timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filters the event log, keeping the cases having a duration (the timestamp of the last event minus the timestamp + of the first event) included between min_performance and max_performance + + :param log: event log / Pandas dataframe + :param min_performance: minimum allowed case duration + :param max_performance: maximum allowed case duration + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_case_performance(dataframe, 3600.0, 86400.0, timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.cases import case_filter + return case_filter.filter_case_performance(log, min_performance, max_performance, parameters=parameters) + else: + from pm4py.algo.filtering.log.cases import case_filter + return case_filter.filter_case_performance(log, min_performance, max_performance, parameters=parameters) + + +def filter_activities_rework(log: Union[EventLog, pd.DataFrame], activity: str, min_occurrences: int = 2, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filters the event log, keeping the cases where the specified activity occurs at least min_occurrences times. + + :param log: event log / Pandas dataframe + :param activity: activity + :param min_occurrences: minimum desidered number of occurrences + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_activities_rework(dataframe, 'Approve Order', 2, activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["min_occurrences"] = min_occurrences + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.rework import rework_filter + return rework_filter.apply(log, activity, parameters=parameters) + else: + from pm4py.algo.filtering.log.rework import rework_filter + return rework_filter.apply(log, activity, parameters=parameters) + + +def filter_paths_performance(log: Union[EventLog, pd.DataFrame], path: Tuple[str, str], min_performance: float, max_performance: float, keep=True, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filters the event log, either: + - (keep=True) keeping the cases having the specified path (tuple of 2 activities) with a duration included between min_performance and max_performance + - (keep=False) discarding the cases having the specified path with a duration included between min_performance and max_performance + + :param log: event log / Pandas dataframe + :param path: tuple of two activities (source_activity, target_activity) + :param min_performance: minimum allowed performance (of the path) + :param max_performance: maximum allowed performance (of the path) + :param keep: keep/discard the cases having the specified path with a duration included between min_performance and max_performance + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_paths_performance(dataframe, ('A', 'D'), 3600.0, 86400.0, activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["positive"] = keep + parameters["min_performance"] = min_performance + parameters["max_performance"] = max_performance + path = tuple(path) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.paths import paths_filter + return paths_filter.apply_performance(log, path, parameters=parameters) + else: + from pm4py.algo.filtering.log.paths import paths_filter + return paths_filter.apply_performance(log, path, parameters=parameters) + + +def filter_variants_top_k(log: Union[EventLog, pd.DataFrame], k: int, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Keeps the top-k variants of the log + + :param log: event log / Pandas dataframe + :param k: number of variants that should be kept + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_variants_top_k(dataframe, 5, activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.variants import variants_filter + return variants_filter.filter_variants_top_k(log, k, parameters=parameters) + else: + from pm4py.algo.filtering.log.variants import variants_filter + return variants_filter.filter_variants_top_k(log, k, parameters=parameters) + + +def filter_variants_by_coverage_percentage(log: Union[EventLog, pd.DataFrame], min_coverage_percentage: float, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filters the variants of the log by a coverage percentage + (e.g., if min_coverage_percentage=0.4, and we have a log with 1000 cases, + of which 500 of the variant 1, 400 of the variant 2, and 100 of the variant 3, + the filter keeps only the traces of variant 1 and variant 2). + + :param log: event log / Pandas dataframe + :param min_coverage_percentage: minimum allowed percentage of coverage + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_variants_by_coverage_percentage(dataframe, 0.1, activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.variants import variants_filter + return variants_filter.filter_variants_by_coverage_percentage(log, min_coverage_percentage, parameters=parameters) + else: + from pm4py.algo.filtering.log.variants import variants_filter + return variants_filter.filter_variants_by_coverage_percentage(log, min_coverage_percentage, parameters=parameters) + + +def filter_variants_by_maximum_coverage_percentage(log: Union[EventLog, pd.DataFrame], max_coverage_percentage: float, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filters the variants of the log by a maximum coverage percentage + (e.g., if max_coverage_percentage=0.4, and we have a log with 1000 cases, + of which 500 of the variant 1, 400 of the variant 2, and 100 of the variant 3, + the filter keeps only the traces of variant 2 and variant 3). + + :param log: event log / Pandas dataframe + :param max_coverage_percentage: maximum allowed percentage of coverage + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_variants_by_maximum_coverage_percentage(dataframe, 0.1, activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + if type(log) not in [pd.DataFrame, EventLog, EventStream]: raise Exception("the method can be applied only to a traditional event log!") + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.variants import variants_filter + return variants_filter.filter_variants_by_maximum_coverage_percentage(log, max_coverage_percentage, parameters=parameters) + else: + from pm4py.algo.filtering.log.variants import variants_filter + return variants_filter.filter_variants_by_maximum_coverage_percentage(log, max_coverage_percentage, parameters=parameters) + + +def filter_prefixes(log: Union[EventLog, pd.DataFrame], activity: str, strict=True, first_or_last="first", activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filters the log, keeping the prefixes to a given activity. E.g., for a log with traces: + + A,B,C,D + A,B,Z,A,B,C,D + A,B,C,D,C,E,C,F + + The prefixes to "C" are respectively: + + A,B + A,B,Z,A,B + A,B + + :param log: event log / Pandas dataframe + :param activity: target activity of the filter + :param strict: applies the filter strictly (cuts the occurrences of the selected activity). + :param first_or_last: decides if the first or last occurrence of an activity should be selected as baseline for the filter. + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_prefixes(dataframe, 'Act. C', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["strict"] = strict + parameters["first_or_last"] = first_or_last + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.prefixes import prefix_filter + return prefix_filter.apply(log, activity, parameters=parameters) + else: + from pm4py.algo.filtering.log.prefixes import prefix_filter + return prefix_filter.apply(log, activity, parameters=parameters) + + +def filter_suffixes(log: Union[EventLog, pd.DataFrame], activity: str, strict=True, first_or_last="first", activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filters the log, keeping the suffixes from a given activity. E.g., for a log with traces: + + A,B,C,D + A,B,Z,A,B,C,D + A,B,C,D,C,E,C,F + + The suffixes from "C" are respectively: + + D + D + D,C,E,C,F + + :param log: event log / Pandas dataframe + :param activity: target activity of the filter + :param strict: applies the filter strictly (cuts the occurrences of the selected activity). + :param first_or_last: decides if the first or last occurrence of an activity should be selected as baseline for the filter. + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_prefixes(dataframe, 'Act. C', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["strict"] = strict + parameters["first_or_last"] = first_or_last + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.suffixes import suffix_filter + return suffix_filter.apply(log, activity, parameters=parameters) + else: + from pm4py.algo.filtering.log.suffixes import suffix_filter + return suffix_filter.apply(log, activity, parameters=parameters) + + +def filter_ocel_event_attribute(ocel: OCEL, attribute_key: str, attribute_values: Collection[Any], positive: bool = True) -> OCEL: + """ + Filters the object-centric event log on the provided event attributes values + + :param ocel: object-centric event log + :param attribute_key: attribute at the event level + :param attribute_values: collection of attribute values + :param positive: decides if the values should be kept (positive=True) or removed (positive=False) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + filtered_ocel = pm4py.filter_ocel_event_attribute(ocel, 'ocel:activity', ['A', 'B', 'D']) + """ + from pm4py.algo.filtering.ocel import event_attributes + + return event_attributes.apply(ocel, attribute_values, parameters={event_attributes.Parameters.ATTRIBUTE_KEY: attribute_key, event_attributes.Parameters.POSITIVE: positive}) + + +def filter_ocel_object_attribute(ocel: OCEL, attribute_key: str, attribute_values: Collection[Any], positive: bool = True) -> OCEL: + """ + Filters the object-centric event log on the provided object attributes values + + :param ocel: object-centric event log + :param attribute_key: attribute at the event level + :param attribute_values: collection of attribute values + :param positive: decides if the values should be kept (positive=True) or removed (positive=False) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + filtered_ocel = pm4py.filter_ocel_object_attribute(ocel, 'ocel:type', ['order']) + """ + from pm4py.algo.filtering.ocel import object_attributes + + return object_attributes.apply(ocel, attribute_values, parameters={object_attributes.Parameters.ATTRIBUTE_KEY: attribute_key, object_attributes.Parameters.POSITIVE: positive}) + + +def filter_ocel_object_types_allowed_activities(ocel: OCEL, correspondence_dict: Dict[str, Collection[str]]) -> OCEL: + """ + Filters an object-centric event log keeping only the specified object types + with the specified activity set (filters out the rest). + + :param ocel: object-centric event log + :param correspondence_dict: dictionary containing, for every object type of interest, a collection of allowed activities. Example: {"order": ["Create Order"], "element": ["Create Order", "Create Delivery"]} + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + filtered_ocel = pm4py.filter_ocel_object_types_allowed_activities(ocel, {'order': ['create order', 'pay order'], 'item}) + """ + from pm4py.algo.filtering.ocel import activity_type_matching + + return activity_type_matching.apply(ocel, correspondence_dict) + + +def filter_ocel_object_per_type_count(ocel: OCEL, min_num_obj_type: Dict[str, int]) -> OCEL: + """ + Filters the events of the object-centric logs which are related to at least + the specified amount of objects per type. + + E.g. pm4py.filter_object_per_type_count(ocel, {"order": 1, "element": 2}) + + Would keep the following events: + + ocel:eid ocel:timestamp ocel:activity ocel:type:element ocel:type:order + 0 e1 1980-01-01 Create Order [i4, i1, i3, i2] [o1] + 1 e11 1981-01-01 Create Order [i6, i5] [o2] + 2 e14 1981-01-04 Create Order [i8, i7] [o3] + + :param ocel: object-centric event log + :param min_num_obj_type: minimum number of objects per type + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + filtered_ocel = pm4py.filter_ocel_object_per_type_count(ocel, {'order': 1, 'element': 2}) + """ + from pm4py.algo.filtering.ocel import objects_ot_count + + return objects_ot_count.apply(ocel, min_num_obj_type) + + +def filter_ocel_start_events_per_object_type(ocel: OCEL, object_type: str) -> OCEL: + """ + Filters the events in which a new object for the given object type is spawn. + (E.g. an event with activity "Create Order" might spawn new orders). + + :param ocel: object-centric event log + :param object_type: object type to consider + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + filtered_ocel = pm4py.filter_ocel_start_events_per_object_type(ocel, 'delivery') + """ + from pm4py.algo.filtering.ocel import ot_endpoints + return ot_endpoints.filter_start_events_per_object_type(ocel, object_type) + + +def filter_ocel_end_events_per_object_type(ocel: OCEL, object_type: str) -> OCEL: + """ + Filters the events in which an object for the given object type terminates its lifecycle. + (E.g. an event with activity "Pay Order" might terminate an order). + + :param ocel: object-centric event log + :param object_type: object type to consider + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + filtered_ocel = pm4py.filter_ocel_end_events_per_object_type(ocel, 'delivery') + """ + from pm4py.algo.filtering.ocel import ot_endpoints + return ot_endpoints.filter_end_events_per_object_type(ocel, object_type) + + +def filter_ocel_events_timestamp(ocel: OCEL, min_timest: Union[datetime.datetime, str], max_timest: Union[datetime.datetime, str], timestamp_key: str = "ocel:timestamp") -> OCEL: + """ + Filters the object-centric event log keeping events in the provided timestamp range + + :param ocel: object-centric event log + :param min_timest: left extreme of the allowed timestamp interval (provided in the format: YYYY-mm-dd HH:MM:SS) + :param max_timest: right extreme of the allowed timestamp interval (provided in the format: YYYY-mm-dd HH:MM:SS) + :param timestamp_key: the attribute to use as timestamp (default: ocel:timestamp) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + filtered_ocel = pm4py.filter_ocel_events_timestamp(ocel, '1990-01-01 00:00:00', '2010-01-01 00:00:00') + """ + from pm4py.algo.filtering.ocel import event_attributes + return event_attributes.apply_timestamp(ocel, min_timest, max_timest, parameters={"pm4py:param:timestamp_key": timestamp_key}) + + +def filter_four_eyes_principle(log: Union[EventLog, pd.DataFrame], activity1: str, activity2: str, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", resource_key: str = "org:resource") -> Union[EventLog, pd.DataFrame]: + """ + Filter the cases of the log which violates the four eyes principle on the provided activities. + + :param log: event log + :param activity1: first activity + :param activity2: second activity + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param resource_key: attribute to be used as resource + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_four_eyes_principle(dataframe, 'Act. A', 'Act. B', activity_key='concept:name', resource_key='org:resource', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key, resource_key=resource_key) + properties["positive"] = True + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.filtering.pandas.ltl import ltl_checker + return ltl_checker.four_eyes_principle(log, activity1, activity2, parameters=properties) + else: + from pm4py.algo.filtering.log.ltl import ltl_checker + return ltl_checker.four_eyes_principle(log, activity1, activity2, parameters=properties) + + +def filter_activity_done_different_resources(log: Union[EventLog, pd.DataFrame], activity: str, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", resource_key: str = "org:resource") -> Union[EventLog, pd.DataFrame]: + """ + Filters the cases where an activity is repeated by different resources. + + :param log: event log + :param activity: activity to consider + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param resource_key: attribute to be used as resource + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + filtered_dataframe = pm4py.filter_activity_done_different_resources(dataframe, 'Act. A', activity_key='concept:name', resource_key='org:resource', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key, resource_key=resource_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.filtering.pandas.ltl import ltl_checker + return ltl_checker.attr_value_different_persons(log, activity, parameters=properties) + else: + from pm4py.algo.filtering.log.ltl import ltl_checker + return ltl_checker.attr_value_different_persons(log, activity, parameters=properties) + + +def filter_trace_segments(log: Union[EventLog, pd.DataFrame], admitted_traces: List[List[str]], positive: bool = True, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Filters an event log on a set of traces. A trace is a sequence of activities and "...", in which: + - a "..." before an activity tells that other activities can precede the given activity + - a "..." after an activity tells that other activities can follow the given activity + + For example: + - pm4py.filter_trace_segments(log, [["A", "B"]]) <- filters only the cases of the event log having exactly the process variant A,B + - pm4py.filter_trace_segments(log, [["...", "A", "B"]]) <- filters only the cases of the event log ending with the activities A,B + - pm4py.filter_trace_segments(log, [["A", "B", "..."]]) <- filters only the cases of the event log starting with the activities A,B + - pm4py.filter_trace_segments(log, [["...", "A", "B", "C", "..."], ["...", "D", "E", "F", "..."]] + <- filters only the cases of the event log in which at any point + there is A followed by B followed by C, and in which at any other point there is + D followed by E followed by F + + :param log: event log / Pandas dataframe + :param admitted_traces: collection of traces admitted from the filter (with the aforementioned criteria) + :param positive: (boolean) indicates if the filter should keep/discard the cases satisfying the filter + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/running-example.xes") + + filtered_log = pm4py.filter_trace_segments(log, [["...", "check ticket", "decide", "reinitiate request", "..."]]) + print(filtered_log) + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["positive"] = positive + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.algo.filtering.pandas.traces import trace_filter + return trace_filter.apply(log, admitted_traces, parameters=parameters) + else: + from pm4py.algo.filtering.log.traces import trace_filter + return trace_filter.apply(log, admitted_traces, parameters=parameters) + + +def filter_ocel_object_types(ocel: OCEL, obj_types: Collection[str], positive: bool = True, level: int = 1) -> OCEL: + """ + Filters the object types of an object-centric event log. + + :param ocel: object-centric event log + :param obj_types: object types to keep/remove + :param positive: boolean value (True=keep, False=remove) + :param level: recursively expand the set of object identifiers until the specified level + + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('log.jsonocel') + filtered_ocel = pm4py.filter_ocel_object_types(ocel, ['order']) + """ + from copy import copy + from pm4py.objects.ocel.util import filtering_utils + if level == 1: + filtered_ocel = copy(ocel) + if positive: + filtered_ocel.objects = filtered_ocel.objects[filtered_ocel.objects[filtered_ocel.object_type_column].isin(obj_types)] + else: + filtered_ocel.objects = filtered_ocel.objects[~filtered_ocel.objects[filtered_ocel.object_type_column].isin(obj_types)] + return filtering_utils.propagate_object_filtering(filtered_ocel) + else: + object_ids = pandas_utils.format_unique(ocel.objects[ocel.objects[ocel.object_type_column].isin(obj_types)][ocel.object_id_column].unique()) + return filter_ocel_objects(ocel, object_ids, level=level, positive=positive) + + +def filter_ocel_objects(ocel: OCEL, object_identifiers: Collection[str], positive: bool = True, level: int = 1) -> OCEL: + """ + Filters the object identifiers of an object-centric event log. + + :param ocel: object-centric event log + :param object_identifiers: object identifiers to keep/remove + :param positive: boolean value (True=keep, False=remove) + :param level: recursively expand the set of object identifiers until the specified level + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('log.jsonocel') + filtered_ocel = pm4py.filter_ocel_objects(ocel, ['o1'], level=1) + """ + object_identifiers = set(object_identifiers) + if level > 1: + ev_rel_obj = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + objects_ids = ocel.objects[ocel.object_id_column].to_numpy().tolist() + graph = {o: set() for o in objects_ids} + for ev in ev_rel_obj: + rel_obj = ev_rel_obj[ev] + for o1 in rel_obj: + for o2 in rel_obj: + if o1 != o2: + graph[o1].add(o2) + while level > 1: + curr = list(object_identifiers) + for el in curr: + for el2 in graph[el]: + object_identifiers.add(el2) + level = level - 1 + from copy import copy + from pm4py.objects.ocel.util import filtering_utils + filtered_ocel = copy(ocel) + if positive: + filtered_ocel.objects = filtered_ocel.objects[filtered_ocel.objects[filtered_ocel.object_id_column].isin(object_identifiers)] + else: + filtered_ocel.objects = filtered_ocel.objects[~filtered_ocel.objects[filtered_ocel.object_id_column].isin(object_identifiers)] + return filtering_utils.propagate_object_filtering(filtered_ocel) + + +def filter_ocel_events(ocel: OCEL, event_identifiers: Collection[str], positive: bool = True) -> OCEL: + """ + Filters the event identifiers of an object-centric event log. + + :param ocel: object-centric event log + :param event_identifiers: event identifiers to keep/remove + :param positive: boolean value (True=keep, False=remove) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('log.jsonocel') + filtered_ocel = pm4py.filter_ocel_events(ocel, ['e1']) + """ + from copy import copy + from pm4py.objects.ocel.util import filtering_utils + filtered_ocel = copy(ocel) + if positive: + filtered_ocel.events = filtered_ocel.events[filtered_ocel.events[filtered_ocel.event_id_column].isin(event_identifiers)] + else: + filtered_ocel.events = filtered_ocel.events[~filtered_ocel.events[filtered_ocel.event_id_column].isin(event_identifiers)] + return filtering_utils.propagate_event_filtering(filtered_ocel) + + +def filter_ocel_cc_object(ocel: OCEL, object_id: str, conn_comp: Optional[List[List[str]]] = None, return_conn_comp: bool = False) -> Union[OCEL, Tuple[OCEL, List[List[str]]]]: + """ + Returns the connected component of the object-centric event log + to which the object with the provided identifier belongs. + + :param ocel: object-centric event log + :param object_id: object identifier + :param conn_comp: (optional) connected components of the objects of the OCEL + :param return_conn_comp: if True, returns the computed connected components of the OCEL + :rtype: ``Union[OCEL, Tuple[OCEL, List[List[str]]]]`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('log.jsonocel') + filtered_ocel = pm4py.filter_ocel_cc_object(ocel, 'order1') + """ + if conn_comp is None: + from pm4py.algo.transformation.ocel.graphs import object_interaction_graph + + g0 = object_interaction_graph.apply(ocel) + g = nx_utils.Graph() + + for edge in g0: + g.add_edge(edge[0], edge[1]) + + conn_comp = list(nx_utils.connected_components(g)) + + for cc in conn_comp: + if object_id in cc: + if return_conn_comp: + return filter_ocel_objects(ocel, cc), conn_comp + else: + return filter_ocel_objects(ocel, cc) + + if return_conn_comp: + return filter_ocel_objects(ocel, [object_id]), conn_comp + else: + return filter_ocel_objects(ocel, [object_id]) + + +def filter_ocel_cc_length(ocel: OCEL, min_cc_length: int, max_cc_length: int) -> OCEL: + """ + Keeps only the objects in an OCEL belonging to a connected component with a length + falling in a specified range + + Paper: + Adams, Jan Niklas, et al. "Defining cases and variants for object-centric event data." 2022 4th International Conference on Process Mining (ICPM). IEEE, 2022. + + :param ocel: object-centric event log + :param min_cc_length: minimum allowed length for the connected component + :param max_cc_length: maximum allowed length for the connected component + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('log.jsonocel') + filtered_ocel = pm4py.filter_ocel_cc_length(ocel, 2, 10) + """ + from pm4py.algo.transformation.ocel.graphs import object_interaction_graph + + g0 = object_interaction_graph.apply(ocel) + g = nx_utils.Graph() + + for edge in g0: + g.add_edge(edge[0], edge[1]) + + conn_comp = list(nx_utils.connected_components(g)) + conn_comp = [x for x in conn_comp if min_cc_length <= len(x) <= max_cc_length] + objs = [y for x in conn_comp for y in x] + + return filter_ocel_objects(ocel, objs) + + +def filter_ocel_cc_otype(ocel: OCEL, otype: str, positive: bool = True) -> OCEL: + """ + Filters the objects belonging to the connected components having at least an object + of the provided object type. + + Paper: + Adams, Jan Niklas, et al. "Defining cases and variants for object-centric event data." 2022 4th International Conference on Process Mining (ICPM). IEEE, 2022. + + :param ocel: object-centric event log + :param otype: object type + :param positive: boolean that keeps or discards the objects of these components + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('log.jsonocel') + filtered_ocel = pm4py.filter_ocel_cc_otype(ocel, 'order') + """ + if positive: + objs = set(ocel.objects[ocel.objects[ocel.object_type_column] == otype][ocel.object_id_column]) + else: + objs = set(ocel.objects[~(ocel.objects[ocel.object_type_column] == otype)][ocel.object_id_column]) + + from pm4py.algo.transformation.ocel.graphs import object_interaction_graph + + g0 = object_interaction_graph.apply(ocel) + g = nx_utils.Graph() + + for edge in g0: + g.add_edge(edge[0], edge[1]) + + conn_comp = list(nx_utils.connected_components(g)) + conn_comp = [x for x in conn_comp if len(set(x).intersection(objs)) > 0] + + objs = [y for x in conn_comp for y in x] + + return filter_ocel_objects(ocel, objs) + + +def filter_ocel_cc_activity(ocel: OCEL, activity: str) -> OCEL: + """ + Filters the objects belonging to the connected components having at least an event + with the provided activity. + + Paper: + Adams, Jan Niklas, et al. "Defining cases and variants for object-centric event data." 2022 4th International Conference on Process Mining (ICPM). IEEE, 2022. + + :param ocel: object-centric event log + :param activity: activity + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('log.jsonocel') + filtered_ocel = pm4py.filter_ocel_cc_activity(ocel, 'Create Order') + """ + evs = ocel.events[ocel.events[ocel.event_activity] == activity][ocel.event_id_column].to_numpy().tolist() + objs = pandas_utils.format_unique(ocel.relations[ocel.relations[ocel.event_id_column].isin(evs)][ocel.object_id_column].unique()) + + from pm4py.algo.transformation.ocel.graphs import object_interaction_graph + + g0 = object_interaction_graph.apply(ocel) + g = nx_utils.Graph() + + for edge in g0: + g.add_edge(edge[0], edge[1]) + + conn_comp = list(nx_utils.connected_components(g)) + conn_comp = [x for x in conn_comp if len(set(x).intersection(objs)) > 0] + + objs = [y for x in conn_comp for y in x] + + return filter_ocel_objects(ocel, objs) diff --git a/pm4py/pm4py/hof.py b/pm4py/pm4py/hof.py new file mode 100644 index 0000000000000000000000000000000000000000..23d2434b03f036f18b989fda182e50a06bb5547b --- /dev/null +++ b/pm4py/pm4py/hof.py @@ -0,0 +1,112 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +""" + +import warnings +from pm4py.util import constants +from typing import Callable, Any, Union + +from pm4py.objects.log import obj as log_inst +from pm4py.utils import __event_log_deprecation_warning +import deprecation + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="the EventLog class will be removed in a future release.") +def filter_log(f: Callable[[Any], bool], log: log_inst.EventLog) -> Union[log_inst.EventLog, log_inst.EventStream]: + """ + Filters the log according to a given (lambda) function. + + :param f: function that specifies the filter criterion, may be a lambda + :param log: event log; either EventLog or EventStream Object + :rtype: ``Union[log_inst.EventLog, log_inst.EventStream]`` + """ + __event_log_deprecation_warning(log) + + if isinstance(log, log_inst.EventLog): + return log_inst.EventLog(list(filter(f, log)), attributes=log.attributes, classifiers=log.classifiers, + omni_present=log.omni_present, extensions=log.extensions, properties=log.properties) + elif isinstance(log, log_inst.EventStream): + return log_inst.EventStream(list(filter(f, log)), attributes=log.attributes, classifiers=log.classifiers, + omni_present=log.omni_present, extensions=log.extensions, properties=log.properties) + else: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn('input log object not of appropriate type, filter() not applied') + return log + + +def filter_trace(f: Callable[[Any], bool], trace: log_inst.Trace) -> log_inst.Trace: + """ + Filters the trace according to a given (lambda) function. + + :param f: function that specifies the filter criterion, may be a lambda + :param trace: trace; PM4Py trace object + :rtype: ``log_inst.Trace`` + """ + __event_log_deprecation_warning(trace) + + if isinstance(trace, log_inst.Trace): + return log_inst.Trace(list(filter(f, trace)), attributes=trace.attributes) + else: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn('input trace object is not of the appropriate type, filter() not applied') + return trace + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="the EventLog class will be removed in a future release.") +def sort_log(log: log_inst.EventLog, key, reverse: bool = False) -> Union[log_inst.EventLog, log_inst.EventStream]: + """ + Sorts the event log according to a given key. + + :param log: event log object; either EventLog or EventStream + :param key: sorting key + :param reverse: indicates whether sorting should be reversed or not + :rtype: ``Union[log_inst.EventLog, log_inst.EventStream]`` + """ + __event_log_deprecation_warning(log) + + if isinstance(log, log_inst.EventLog): + return log_inst.EventLog(sorted(log, key=key, reverse=reverse), attributes=log.attributes, + classifiers=log.classifiers, omni_present=log.omni_present, extensions=log.extensions, properties=log.properties) + elif isinstance(log, log_inst.EventStream): + return log_inst.EventStream(sorted(log, key=key, reverse=reverse), attributes=log.attributes, + classifiers=log.classifiers, + omni_present=log.omni_present, extensions=log.extensions, properties=log.properties) + else: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn('input log object not of appropriate type, sorted() not applied') + return log + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="the EventLog class will be removed in a future release.") +def sort_trace(trace: log_inst.Trace, key, reverse: bool = False) -> log_inst.Trace: + """ + Sorts the events in a trace according to a given key. + + :param trace: input trace + :param key: sorting key + :param reverse: indicates whether sorting should be reversed (default False) + :rtype: ``log_inst.Trace`` + """ + __event_log_deprecation_warning(trace) + + if isinstance(trace, log_inst.Trace): + return log_inst.Trace(sorted(trace, key=key, reverse=reverse)) + else: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn('input trace object not of appropriate type, sorted() not applied') + return trace diff --git a/pm4py/pm4py/llm.py b/pm4py/pm4py/llm.py new file mode 100644 index 0000000000000000000000000000000000000000..9b52f0a0e0ab4f02406ee1058b0797a957f26789 --- /dev/null +++ b/pm4py/pm4py/llm.py @@ -0,0 +1,454 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import pandas as pd +from pm4py.objects.log.obj import EventLog, EventStream, Trace +from typing import Union, Optional, Dict, Tuple, List, Any +from pm4py.utils import get_properties, constants, check_is_pandas_dataframe +from pm4py.utils import __event_log_deprecation_warning +from pm4py.objects.ocel.obj import OCEL +from sqlite3 import Connection as SQ3_Connection +from tempfile import NamedTemporaryFile +from copy import copy +from pm4py.objects.petri_net.obj import PetriNet, Marking + + +def openai_query(prompt: str, api_key: Optional[str] = None, openai_model: Optional[str] = None, api_url: Optional[str] = None, **kwargs) -> str: + """ + Executes the provided prompt, obtaining the answer from the OpenAI APIs. + + :param prompt: prompt that should be executed + :param api_key: OpenAI API key + :param openai_model: OpenAI model to be used (default: gpt-3.5-turbo) + :param api_url: OpenAI API URL + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + resp = pm4py.llm.openai_query('what is the result of 3+3?', api_key="sk-382393", openai_model="gpt-3.5-turbo") + print(resp) + """ + parameters = copy(kwargs) if kwargs is not None else {} + if api_url is not None: + parameters["api_url"] = api_url + if api_key is not None: + parameters["api_key"] = api_key + if openai_model is not None: + parameters["openai_model"] = openai_model + + from pm4py.algo.querying.llm.connectors import openai as perform_query + return perform_query.apply(prompt, parameters=parameters) + + +def abstract_dfg(log_obj: Union[pd.DataFrame, EventLog, EventStream], max_len: int = constants.OPENAI_MAX_LEN, include_performance: bool = True, relative_frequency: bool = False, response_header: bool = True, primary_performance_aggregation: str = "mean", secondary_performance_aggregation: Optional[str] = None, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> str: + """ + Obtains the DFG abstraction of a traditional event log + + :param log_obj: log object + :param max_len: maximum length of the (string) abstraction + :param include_performance: (boolean) includes the performance of the paths in the abstraction + :param relative_frequency: (boolean) uses the relative instead of the absolute frequency of the paths + :param response_header: includes a short header before the paths, pointing to the description of the abstraction + :param primary_performance_aggregation: primary aggregation to be used for the arc's performance (default: mean, other options: median, min, max, sum, stdev) + :param secondary_performance_aggregation: (optional) secondary aggregation to be used for the arc's performance (default None, other options: mean, median, min, max, sum, stdev) + :param activity_key: the column to be used as activity + :param timestamp_key: the column to be used as timestamp + :param case_id_key: the column to be used as case identifier + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/roadtraffic100traces.xes") + print(pm4py.llm.abstract_dfg(log)) + """ + __event_log_deprecation_warning(log_obj) + + parameters = get_properties( + log_obj, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["max_len"] = max_len + parameters["include_performance"] = include_performance + parameters["relative_frequency"] = relative_frequency + parameters["response_header"] = response_header + parameters["primary_performance_aggregation"] = primary_performance_aggregation + parameters["secondary_performance_aggregation"] = secondary_performance_aggregation + + from pm4py.algo.querying.llm.abstractions import log_to_dfg_descr + return log_to_dfg_descr.apply(log_obj, parameters=parameters) + + +def abstract_variants(log_obj: Union[pd.DataFrame, EventLog, EventStream], max_len: int = constants.OPENAI_MAX_LEN, include_performance: bool = True, relative_frequency: bool = False, response_header: bool = True, primary_performance_aggregation: str = "mean", secondary_performance_aggregation: Optional[str] = None, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> str: + """ + Obtains the variants abstraction of a traditional event log + + :param log_obj: log object + :param max_len: maximum length of the (string) abstraction + :param include_performance: (boolean) includes the performance of the variants in the abstraction + :param relative_frequency: (boolean) uses the relative instead of the absolute frequency of the variants + :param response_header: includes a short header before the variants, pointing to the description of the abstraction + :param primary_performance_aggregation: primary aggregation to be used for the arc's performance (default: mean, other options: median, min, max, sum, stdev) + :param secondary_performance_aggregation: (optional) secondary aggregation to be used for the arc's performance (default None, other options: mean, median, min, max, sum, stdev) + :param activity_key: the column to be used as activity + :param timestamp_key: the column to be used as timestamp + :param case_id_key: the column to be used as case identifier + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/roadtraffic100traces.xes") + print(pm4py.llm.abstract_variants(log)) + """ + __event_log_deprecation_warning(log_obj) + + parameters = get_properties( + log_obj, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["max_len"] = max_len + parameters["include_performance"] = include_performance + parameters["relative_frequency"] = relative_frequency + parameters["response_header"] = response_header + parameters["primary_performance_aggregation"] = primary_performance_aggregation + parameters["secondary_performance_aggregation"] = secondary_performance_aggregation + + from pm4py.algo.querying.llm.abstractions import log_to_variants_descr + return log_to_variants_descr.apply(log_obj, parameters=parameters) + + +def abstract_ocel(ocel: OCEL, include_timestamps: bool = True) -> str: + """ + Obtains the abstraction of an object-centric event log, including the list of events and the objects of the OCEL + + :param ocel: object-centric event log + :param include_timestamps: (boolean) includes the timestamp information in the abstraction + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel("tests/input_data/ocel/example_log.jsonocel") + print(pm4py.llm.abstract_ocel(ocel)) + """ + parameters = {} + parameters["include_timestamps"] = include_timestamps + + from pm4py.algo.transformation.ocel.description import algorithm as ocel_description + return ocel_description.apply(ocel, parameters=parameters) + + +def abstract_ocel_ocdfg(ocel: OCEL, include_header: bool = True, include_timestamps: bool = True, max_len: int = constants.OPENAI_MAX_LEN) -> str: + """ + Obtains the abstraction of an object-centric event log, representing in text the object-centric directly-follows + graph + + :param ocel: object-centric event log + :param include_header: (boolean) includes the header in the abstraction + :param include_timestamps: (boolean) includes the timestamp information in the abstraction + :param max_len: maximum length of the abstraction + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel("tests/input_data/ocel/example_log.jsonocel") + print(pm4py.llm.abstract_ocel_ocdfg(ocel)) + """ + parameters = {} + parameters["include_header"] = include_header + parameters["include_timestamps"] = include_timestamps + parameters["max_len"] = max_len + + from pm4py.algo.querying.llm.abstractions import ocel_ocdfg_descr + return ocel_ocdfg_descr.apply(ocel, parameters=parameters) + + +def abstract_ocel_features(ocel: OCEL, obj_type: str, include_header: bool = True, max_len: int = constants.OPENAI_MAX_LEN, debug: bool = False, enable_object_lifecycle_paths: bool = True) -> str: + """ + Obtains the abstraction of an object-centric event log, representing in text the features and their values. + + :param ocel: object-centric event log + :param obj_type: the object type that should be considered in the feature extraction + :param include_header: (boolean) includes the header in the abstraction + :param max_len: maximum length of the abstraction + :param debug: enables debugging mode (telling at which point of the feature extraction you are) + :param enable_object_lifecycle_paths: enables the "lifecycle paths" feature + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel("tests/input_data/ocel/example_log.jsonocel") + print(pm4py.llm.abstract_ocel_ocdfg(ocel)) + """ + parameters = {} + parameters["include_header"] = include_header + parameters["max_len"] = max_len + parameters["debug"] = debug + parameters["enable_object_lifecycle_paths"] = enable_object_lifecycle_paths + + from pm4py.algo.querying.llm.abstractions import ocel_fea_descr + return ocel_fea_descr.apply(ocel, obj_type, parameters=parameters) + + +def abstract_event_stream(log_obj: Union[pd.DataFrame, EventLog, EventStream], max_len: int = constants.OPENAI_MAX_LEN, response_header: bool = True, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> str: + """ + Obtains the event stream abstraction of a traditional event log + + :param log_obj: log object + :param max_len: maximum length of the (string) abstraction + :param response_header: includes a short header before the variants, pointing to the description of the abstraction + :param activity_key: the column to be used as activity + :param timestamp_key: the column to be used as timestamp + :param case_id_key: the column to be used as case identifier + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/roadtraffic100traces.xes") + print(pm4py.llm.abstract_event_stream(log)) + """ + __event_log_deprecation_warning(log_obj) + + parameters = get_properties( + log_obj, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["max_len"] = max_len + parameters["response_header"] = response_header + + from pm4py.algo.querying.llm.abstractions import stream_to_descr + return stream_to_descr.apply(log_obj, parameters=parameters) + + +def abstract_petri_net(net: PetriNet, im: Marking, fm: Marking, response_header: bool = True) -> str: + """ + Obtain an abstraction of a Petri net + + :param net: Petri net + :param im: Initial marking + :param fm: Final marking + :param response_header: includes the header of the response + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('tests/input_data/running-example.pnml') + print(pm4py.llm.abstract_petri_net(net, im, fm)) + """ + parameters = {} + parameters["response_header"] = response_header + + from pm4py.algo.querying.llm.abstractions import net_to_descr + return net_to_descr.apply(net, im, fm, parameters=parameters) + + +def abstract_log_attributes(log_obj: Union[pd.DataFrame, EventLog, EventStream], max_len: int = constants.OPENAI_MAX_LEN, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> str: + """ + Abstracts the attributes of a log (reporting their name, their type, and the top values) + + :param log_obj: log object + :param max_len: maximum length of the (string) abstraction + :param activity_key: the column to be used as activity + :param timestamp_key: the column to be used as timestamp + :param case_id_key: the column to be used as case identifier + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/roadtraffic100traces.xes") + print(pm4py.llm.abstract_log_attributes(log)) + """ + __event_log_deprecation_warning(log_obj) + + parameters = get_properties( + log_obj, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["max_len"] = max_len + + from pm4py.algo.querying.llm.abstractions import log_to_cols_descr + return log_to_cols_descr.apply(log_obj, parameters=parameters) + + +def abstract_log_features(log_obj: Union[pd.DataFrame, EventLog, EventStream], max_len: int = constants.OPENAI_MAX_LEN, include_header: bool = True, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> str: + """ + Abstracts the machine learning features obtained from a log (reporting the top features until the desired length is obtained) + + :param log_obj: log object + :param max_len: maximum length of the (string) abstraction + :param activity_key: the column to be used as activity + :param timestamp_key: the column to be used as timestamp + :param case_id_key: the column to be used as case identifier + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/roadtraffic100traces.xes") + print(pm4py.llm.abstract_log_features(log)) + """ + __event_log_deprecation_warning(log_obj) + + parameters = get_properties( + log_obj, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["max_len"] = max_len + parameters["include_header"] = include_header + + from pm4py.algo.querying.llm.abstractions import log_to_fea_descr + return log_to_fea_descr.apply(log_obj, parameters=parameters) + + +def abstract_temporal_profile(temporal_profile: Dict[Tuple[str, str], Tuple[float, float]], include_header: bool = True) -> str: + """ + Abstracts a temporal profile model to a string. + + :param temporal_profile: temporal profile model + :param include_header: includes an header in the response, describing the temporal profile + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/roadtraffic100traces.xes", return_legacy_log_object=True) + temporal_profile = pm4py.discover_temporal_profile(log) + text_abstr = pm4py.llm.abstract_temporal_profile(temporal_profile, include_header=True) + print(text_abstr) + """ + parameters = {} + parameters["include_header"] = include_header + + from pm4py.algo.querying.llm.abstractions import tempprofile_to_descr + return tempprofile_to_descr.apply(temporal_profile, parameters=parameters) + + +def abstract_case(case: Trace, include_case_attributes: bool = True, include_event_attributes: bool = True, include_timestamp: bool = True, include_header: bool = True, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp") -> str: + """ + Textually abstracts a case + + :param case: case object + :param include_case_attributes: (boolean) include or not the attributes at the case level + :param include_event_attributes: (boolean) include or not the attributes at the event level + :param include_timestamp: (boolean) include or not the event timestamp in the abstraction + :param include_header: (boolean) includes the header of the response + :param activity_key: the column to be used as activity + :param timestamp_key: the column to be used as timestamp + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/roadtraffic100traces.xes", return_legacy_log_object=True) + print(pm4py.llm.abstract_case(log[0])) + """ + parameters = {} + parameters["include_case_attributes"] = include_case_attributes + parameters["include_event_attributes"] = include_event_attributes + parameters["include_timestamp"] = include_timestamp + parameters["include_header"] = include_header + parameters[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = activity_key + parameters[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = timestamp_key + + from pm4py.algo.querying.llm.abstractions import case_to_descr + return case_to_descr.apply(case, parameters=parameters) + + +def abstract_declare(declare_model, include_header: bool = True) -> str: + """ + Textually abstracts a DECLARE model + + :param declare: DECLARE model + :param include_header: (boolean) includes the header of the response + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/roadtraffic100traces.xes", return_legacy_log_object=True) + log_ske = pm4py.discover_declare(log) + print(pm4py.llm.abstract_declare(log_ske)) + """ + parameters = {} + parameters["include_header"] = include_header + + from pm4py.algo.querying.llm.abstractions import declare_to_descr + return declare_to_descr.apply(declare_model, parameters=parameters) + + +def abstract_log_skeleton(log_skeleton, include_header: bool = True) -> str: + """ + Textually abstracts a log skeleton process model + + :param log_skeleton: log skeleton + :param include_header: (boolean) includes the header of the response + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/roadtraffic100traces.xes", return_legacy_log_object=True) + log_ske = pm4py.discover_log_skeleton(log) + print(pm4py.llm.abstract_log_skeleton(log_ske)) + """ + parameters = {} + parameters["include_header"] = include_header + + from pm4py.algo.querying.llm.abstractions import logske_to_descr + return logske_to_descr.apply(log_skeleton, parameters=parameters) + + +def explain_visualization(vis_saver, *args, connector=openai_query, **kwargs) -> str: + """ + Explains a process mining visualization by using LLMs (saving that first in a .png image, then providing the .png file to the + Large Language Model along with possibly a description of the visualization). + + :param vis_saver: the visualizer (saving to disk) to be used + :param args: the mandatory arguments that should be provided to the visualization + :param connector: the connector method to the large language model + :param kwargs: optional parameters of the visualization or the connector (for example, the annotation of the visualization, or the API key) + :rtype: ``str`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/running-example.xes") + descr = pm4py.llm.explain_visualization(pm4py.save_vis_dotted_chart, log, api_key="sk-5HN", show_legend=False) + print(descr) + """ + F = NamedTemporaryFile(suffix=".png") + image_path = F.name + F.close() + + description = vis_saver(*args, image_path, **kwargs) + + parameters = copy(kwargs) if kwargs is not None else {} + parameters["image_path"] = image_path + + return connector("Could you explain the included process mining visualization?\n\n" + description, **parameters) diff --git a/pm4py/pm4py/meta.py b/pm4py/pm4py/meta.py new file mode 100644 index 0000000000000000000000000000000000000000..34d835deacd6d6d371d25f7162feb3a862d0ea1f --- /dev/null +++ b/pm4py/pm4py/meta.py @@ -0,0 +1,25 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +__name__ = 'pm4py' +VERSION = '2.7.11.11' +__version__ = VERSION +__doc__ = 'Process mining for Python' +__author__ = 'Fraunhofer Institute for Applied Information Technology FIT' +__author_email__ = 'pm4py@fit.fraunhofer.de' +__maintainer__ = 'Fraunhofer Institute for Applied Information Technology FIT' +__maintainer_email__ = "pm4py@fit.fraunhofer.de" diff --git a/pm4py/pm4py/ml.py b/pm4py/pm4py/ml.py new file mode 100644 index 0000000000000000000000000000000000000000..e4b68fc696f8856812ecdaed53b320dea3601bcf --- /dev/null +++ b/pm4py/pm4py/ml.py @@ -0,0 +1,316 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.ml`` module contains the machine learning features offered in ``pm4py`` +""" + +from typing import Union, Tuple, Any, List, Collection, Optional +import pandas as pd +import numpy as np +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.utils import __event_log_deprecation_warning +import random +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns +from pm4py.utils import get_properties, constants, pandas_utils + + +def split_train_test(log: Union[EventLog, pd.DataFrame], train_percentage: float = 0.8, case_id_key="case:concept:name") -> Union[ + Tuple[EventLog, EventLog], Tuple[pd.DataFrame, pd.DataFrame]]: + """ + Split an event log in a training log and a test log (for machine learning purposes). + Returns the training and the test event log. + + :param log: event log / Pandas dataframe + :param train_percentage: fraction of traces to be included in the training log (from 0.0 to 1.0) + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[Tuple[EventLog, EventLog], Tuple[pd.DataFrame, pd.DataFrame]]`` + + .. code-block:: python3 + + import pm4py + + train_df, test_df = pm4py.split_train_test(dataframe, train_percentage=0.75) + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log) + cases = pandas_utils.format_unique(log[case_id_key].unique()) + train_cases = set() + test_cases = set() + for c in cases: + r = random.random() + if r <= train_percentage: + train_cases.add(c) + else: + test_cases.add(c) + train_df = log[log[case_id_key].isin(train_cases)] + test_df = log[log[case_id_key].isin(test_cases)] + return train_df, test_df + else: + from pm4py.objects.log.util import split_train_test + return split_train_test.split(log, train_percentage=train_percentage) + + +def get_prefixes_from_log(log: Union[EventLog, pd.DataFrame], length: int, case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + Gets the prefixes of a log of a given length. The returned log object contain the prefixes: + - if a trace has lower or identical length, it is included as-is + - if a trace has greater length, it is cut + + :param log: event log / Pandas dataframe + :param length: length + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + trimmed_df = pm4py.get_prefixes_from_log(dataframe, length=5, case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, case_id_key=case_id_key) + from pm4py.util import pandas_utils + log = pandas_utils.insert_ev_in_tr_index(log, case_id=case_id_key) + return log[log[constants.DEFAULT_INDEX_IN_TRACE_KEY] <= (length-1)] + else: + from pm4py.objects.log.util import get_prefixes + return get_prefixes.get_prefixes_from_log(log, length) + + +def extract_outcome_enriched_dataframe(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", + timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", + start_timestamp_key: str = "time:timestamp") -> pd.DataFrame: + """ + Inserts additional columns in the dataframe which are computed on the overall case, so they model the + outcome of the case. + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param start_timestamp_key: attribute to be used as start timestamp + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + enriched_df = pm4py.extract_outcome_enriched_dataframe(log, activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name', start_timestamp_key='time:timestamp') + + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + + log = log_converter.apply(log, variant=log_converter.Variants.TO_DATA_FRAME, parameters=properties) + + from pm4py.util import pandas_utils + + fea_df = extract_features_dataframe(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key, include_case_id=True) + log2 = pandas_utils.insert_case_arrival_finish_rate(log.copy(), timestamp_column=timestamp_key, case_id_column=case_id_key, start_timestamp_column=start_timestamp_key) + log2 = pandas_utils.insert_case_service_waiting_time(log2.copy(), timestamp_column=timestamp_key, case_id_column=case_id_key, start_timestamp_column=start_timestamp_key) + + return log2.merge(fea_df, left_on=case_id_key, right_on=case_id_key) + + +def extract_features_dataframe(log: Union[EventLog, pd.DataFrame], str_tr_attr=None, num_tr_attr=None, str_ev_attr=None, num_ev_attr=None, str_evsucc_attr=None, activity_key="concept:name", timestamp_key="time:timestamp", case_id_key=None, resource_key="org:resource", include_case_id: bool = False, **kwargs) -> pd.DataFrame: + """ + Extracts a dataframe containing the features of each case of the provided log object + + :param log: log object (event log / Pandas dataframe) + :param str_tr_attr: (if provided) string attributes at the case level which should be extracted as features + :param num_tr_attr: (if provided) numeric attributes at the case level which should be extracted as features + :param str_ev_attr: (if provided) string attributes at the event level which should be extracted as features (one-hot encoding) + :param num_ev_attr: (if provided) numeric attributes at the event level which should be extracted as features (last value per attribute in a case) + :param activity_key: the attribute to be used as activity + :param timestamp_key: the attribute to be used as timestamp + :param case_id_key: (if provided, otherwise default) the attribute to be used as case identifier + :param resource_key: the attribute to be used as resource + :param include_case_id: includes the case identifier column in the features table + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + features_df = pm4py.extract_features_dataframe(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + parameters = {} + if kwargs is not None: + parameters = kwargs + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + for prop in properties: + parameters[prop] = properties[prop] + + parameters["str_tr_attr"] = str_tr_attr + parameters["num_tr_attr"] = num_tr_attr + parameters["str_ev_attr"] = str_ev_attr + parameters["num_ev_attr"] = num_ev_attr + parameters["str_evsucc_attr"] = str_evsucc_attr + parameters["add_case_identifier_column"] = include_case_id + + from pm4py.algo.transformation.log_to_features import algorithm as log_to_features + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + + data, feature_names = log_to_features.apply(log, parameters=parameters) + + return pandas_utils.instantiate_dataframe(data, columns=feature_names) + + +def extract_ocel_features(ocel: OCEL, obj_type: str, enable_object_lifecycle_paths: bool = True, enable_object_work_in_progress: bool = False, object_str_attributes: Optional[Collection[str]] = None, object_num_attributes: Optional[Collection[str]] = None, include_obj_id: bool = False, debug: bool = False) -> pd.DataFrame: + """ + Extracts from an object-centric event log a set of features (returned as dataframe) computed on the OCEL + for the objects of a given object type. + + Implements the approach described in: + Berti, A., Herforth, J., Qafari, M.S. et al. Graph-based feature extraction on object-centric event logs. Int J Data Sci Anal (2023). https://doi.org/10.1007/s41060-023-00428-2 + + :param ocel: object-centric event log + :param obj_type: object type that should be considered + :param enable_object_lifecycle_paths: enables the "lifecycle paths" feature + :param enable_object_work_in_progress: enables the "work in progress" feature (which has an high computational cost) + :param object_str_attributes: string attributes at the object level to one-hot encode during the feature extraction + :param object_num_attributes: numeric attributes at the object level to one-hot encode during the feature extraction + :param include_obj_id: includes the object identifier as column of the "features" dataframe + :param debug: enables debugging mode (telling at which point of the feature extraction you are) + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('log.jsonocel') + fea_df = pm4py.extract_ocel_features(ocel, "item") + """ + if object_str_attributes is None: + object_str_attributes = [] + + if object_num_attributes is None: + object_num_attributes = [] + + parameters = {} + parameters["filter_per_type"] = obj_type + parameters["enable_object_lifecycle_paths"] = enable_object_lifecycle_paths + parameters["enable_object_work_in_progress"] = enable_object_work_in_progress + parameters["enable_object_str_attributes"] = len(object_str_attributes) > 0 + parameters["enable_object_num_attributes"] = len(object_num_attributes) > 0 + parameters["str_obj_attr"] = object_str_attributes + parameters["num_obj_attr"] = object_num_attributes + parameters["debug"] = debug + + from pm4py.algo.transformation.ocel.features.objects import algorithm as ocel_feature_extraction + + data, feature_names = ocel_feature_extraction.apply(ocel, parameters=parameters) + + dataframe = pandas_utils.instantiate_dataframe(data, columns=feature_names) + dataframe = dataframe.dropna(how="any", axis=1) + dataframe = dataframe.select_dtypes(include=np.number) + + if include_obj_id: + objects_with_type = ocel.objects[[ocel.object_id_column, ocel.object_type_column]].to_dict("records") + objects_with_type = [x[ocel.object_id_column] for x in objects_with_type if x[ocel.object_type_column] == obj_type] + dataframe[ocel.object_id_column] = objects_with_type + + return dataframe + + +def extract_temporal_features_dataframe(log: Union[EventLog, pd.DataFrame], grouper_freq="W", activity_key="concept:name", timestamp_key="time:timestamp", case_id_key=None, start_timestamp_key="time:timestamp", resource_key="org:resource") -> pd.DataFrame: + """ + Extracts a dataframe containing the temporal features of the provided log object + + Implements the approach described in the paper: + Pourbafrani, Mahsa, Sebastiaan J. van Zelst, and Wil MP van der Aalst. "Supporting automatic system dynamics model generation for simulation in the context of process mining." International Conference on Business Information Systems. Springer, Cham, 2020. + + :param log: log object (event log / Pandas dataframe) + :param grouper_freq: the grouping frequency (D, W, M, Y) to use + :param activity_key: the attribute to be used as activity + :param timestamp_key: the attribute to be used as timestamp + :param case_id_key: (if provided, otherwise default) the attribute to be used as case identifier + :param resource_key: the attribute to be used as resource + :param start_timestamp_key: the attribute to be used as start timestamp + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + temporal_features_df = pm4py.extract_temporal_features_dataframe(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.transformation.log_to_features.variants import temporal + + parameters[temporal.Parameters.GROUPER_FREQ] = grouper_freq + parameters[temporal.Parameters.ACTIVITY_COLUMN] = activity_key + parameters[temporal.Parameters.TIMESTAMP_COLUMN] = timestamp_key + if case_id_key is not None: + parameters[temporal.Parameters.CASE_ID_COLUMN] = case_id_key + parameters[temporal.Parameters.START_TIMESTAMP_COLUMN] = start_timestamp_key + parameters[temporal.Parameters.RESOURCE_COLUMN] = resource_key + + return temporal.apply(log, parameters=parameters) + + +def extract_target_vector(log: Union[EventLog, pd.DataFrame], variant: str, activity_key="concept:name", timestamp_key="time:timestamp", case_id_key="case:concept:name") -> Tuple[Any, List[str]]: + """ + Extracts from a log object the target vector for a specific ML use case + (next activity, next time, remaining time) + + :param log: log object (event log / Pandas dataframe) + :param variant: variant of the algorithm to be used: next_activity, next_time, remaining_time + :param activity_key: the attribute to be used as activity + :param timestamp_key: the attribute to be used as timestamp + :param case_id_key: the attribute to be used as case identifier + :rtype: ``Tuple[Any, List[str]]`` + + .. code-block:: python3 + + import pm4py + + vector_next_act, class_next_act = pm4py.extract_target_vector(log, 'next_activity', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + vector_next_time, class_next_time = pm4py.extract_target_vector(log, 'next_time', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + vector_rem_time, class_rem_time = pm4py.extract_target_vector(log, 'remaining_time', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.transformation.log_to_target import algorithm as log_to_target + + var_map = {"next_activity": log_to_target.Variants.NEXT_ACTIVITY, "next_time": log_to_target.Variants.NEXT_TIME, + "remaining_time": log_to_target.Variants.REMAINING_TIME} + + if variant not in var_map: + raise Exception( + "please provide the variant between: next_activity, next_time, remaining_time") + + target, classes = log_to_target.apply(log, variant=var_map[variant], parameters=parameters) + return target, classes diff --git a/pm4py/pm4py/objects/__init__.py b/pm4py/pm4py/objects/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0369875cfe88c2bb891ba948621e067592c48612 --- /dev/null +++ b/pm4py/pm4py/objects/__init__.py @@ -0,0 +1,22 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects import log, petri_net, transition_system, conversion, process_tree, \ + dfg, trie, org +import importlib.util + +if importlib.util.find_spec("networkx"): + from pm4py.objects import bpmn diff --git a/pm4py/pm4py/objects/bpmn/__init__.py b/pm4py/pm4py/objects/bpmn/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bd78dc52954fd2af522c32d7b3b1ebeefe7245d9 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/__init__.py @@ -0,0 +1,21 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.bpmn import obj, exporter, layout, semantics, util +import importlib.util + +if importlib.util.find_spec("lxml"): + from pm4py.objects.bpmn import importer diff --git a/pm4py/pm4py/objects/bpmn/exporter/__init__.py b/pm4py/pm4py/objects/bpmn/exporter/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..cd6b763a66ca69ab418f77b2b3a0929fcca6e777 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/exporter/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.bpmn.exporter import exporter, variants diff --git a/pm4py/pm4py/objects/bpmn/exporter/exporter.py b/pm4py/pm4py/objects/bpmn/exporter/exporter.py new file mode 100644 index 0000000000000000000000000000000000000000..0d3673d77aee78576ac005705097c3626edee7a4 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/exporter/exporter.py @@ -0,0 +1,74 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.bpmn.exporter.variants import etree +from pm4py.util import exec_utils + + +class Variants(Enum): + ETREE = etree + + +DEFAULT_VARIANT = Variants.ETREE + + +def apply(bpmn_graph, target_path, variant=DEFAULT_VARIANT, parameters=None): + """ + Exports the BPMN diagram to a file + + Parameters + ------------- + bpmn_graph + BPMN diagram + target_path + Target path + variant + Variant of the algorithm to use, possible values: + - Variants.ETREE + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(bpmn_graph, target_path, parameters=parameters) + + +def serialize(bpmn_graph, variant=DEFAULT_VARIANT, parameters=None): + """ + Serializes the BPMN object into a binary string + + Parameters + ------------- + bpmn_graph + BPMN diagram + variant + Variant of the algorithm to use, possible values: + - Variants.ETREE + parameters + Possible parameters of the algorithm + + Returns + ------------- + serialization + Binary string (BPMN 2.0 XML standard) + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).get_xml_string(bpmn_graph, parameters=parameters) diff --git a/pm4py/pm4py/objects/bpmn/exporter/variants/__init__.py b/pm4py/pm4py/objects/bpmn/exporter/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6f0ab7e7a22e505f7acee50fe2d34141dcb68127 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/exporter/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.bpmn.exporter.variants import etree diff --git a/pm4py/pm4py/objects/bpmn/exporter/variants/etree.py b/pm4py/pm4py/objects/bpmn/exporter/variants/etree.py new file mode 100644 index 0000000000000000000000000000000000000000..14099e423d4692660986020142a5e3e2edf98a85 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/exporter/variants/etree.py @@ -0,0 +1,181 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import uuid + +from pm4py.objects.bpmn.obj import BPMN +from pm4py.util import constants, exec_utils +from enum import Enum + + +class Parameters(Enum): + ENCODING = "encoding" + ENABLE_BPMN_PLANE_EXPORTING = "enble_bpmn_plane_exporting" + ENABLE_INCOMING_OUTGOING_EXPORTING = "enable_incoming_outgoing_exporting" + + +def apply(bpmn_graph, target_path, parameters=None): + """ + Exports the BPMN diagram to a file + + Parameters + ------------- + bpmn_graph + BPMN diagram + target_path + Target path + parameters + Possible parameters of the algorithm + """ + xml_string = get_xml_string(bpmn_graph, parameters=parameters) + F = open(target_path, "wb") + F.write(xml_string) + F.close() + + +def get_xml_string(bpmn_graph, parameters=None): + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + enble_bpmn_plane_exporting = exec_utils.get_param_value(Parameters.ENABLE_BPMN_PLANE_EXPORTING, parameters, True) + enable_incoming_outgoing_exporting = exec_utils.get_param_value(Parameters.ENABLE_INCOMING_OUTGOING_EXPORTING, parameters, True) + + layout = bpmn_graph.get_layout() + + import xml.etree.ElementTree as ET + from xml.dom import minidom + + definitions = ET.Element("bpmn:definitions") + definitions.set("xmlns:bpmn", "http://www.omg.org/spec/BPMN/20100524/MODEL") + definitions.set("xmlns:bpmndi", "http://www.omg.org/spec/BPMN/20100524/DI") + definitions.set("xmlns:omgdc", "http://www.omg.org/spec/DD/20100524/DC") + definitions.set("xmlns:omgdi", "http://www.omg.org/spec/DD/20100524/DI") + definitions.set("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance") + definitions.set("targetNamespace", "http://www.signavio.com/bpmn20") + definitions.set("typeLanguage", "http://www.w3.org/2001/XMLSchema") + definitions.set("expressionLanguage", "http://www.w3.org/1999/XPath") + definitions.set("xmlns:xsd", "http://www.w3.org/2001/XMLSchema") + + all_processes = set() + process_planes = {} + process_process = {} + process_participants = {} + for node in bpmn_graph.get_nodes(): + all_processes.add(node.get_process()) + for flow in bpmn_graph.get_flows(): + all_processes.add(flow.get_process()) + + if len(all_processes) > 1: + # when several swimlanes exist, their elements should be annexed to the same BPMN plane + bpmn_plane_id = "id" + str(uuid.uuid4()) + process_collaboration = ET.SubElement(definitions, "bpmn:collaboration", {"id": bpmn_plane_id}) + + for process in all_processes: + part_id = "id" + str(uuid.uuid4()) + ET.SubElement(process_collaboration, "bpmn:participant", {"id": part_id, "name": process, "processRef": "id" + process }) + process_participants[process] = part_id + else: + bpmn_plane_id = "id" + list(all_processes)[0] + + for process in all_processes: + p = ET.SubElement(definitions, "bpmn:process", + {"id": "id" + process, "isClosed": "false", "isExecutable": "false", + "processType": "None"}) + process_process[process] = p + + diagram = ET.SubElement(definitions, "bpmndi:BPMNDiagram", {"id": "id" + str(uuid.uuid4()), "name": "diagram"}) + + if enble_bpmn_plane_exporting: + plane = ET.SubElement(diagram, "bpmndi:BPMNPlane", + {"bpmnElement": bpmn_plane_id, "id": "id" + str(uuid.uuid4())}) + for process in all_processes: + process_planes[process] = plane + + for node in bpmn_graph.get_nodes(): + process = node.get_process() + + node_shape = ET.SubElement(process_planes[process], "bpmndi:BPMNShape", + {"bpmnElement": node.get_id(), "id": node.get_id() + "_gui"}) + node_shape_layout = ET.SubElement(node_shape, "omgdc:Bounds", + {"height": str(layout.get(node).get_height()), "width": str(layout.get(node).get_width()), + "x": str(layout.get(node).get_x()), + "y": str(layout.get(node).get_y())}) + + for flow in bpmn_graph.get_flows(): + process = flow.get_process() + + flow_shape = ET.SubElement(process_planes[process], "bpmndi:BPMNEdge", + {"bpmnElement": "id" + str(flow.get_id()), + "id": "id" + str(flow.get_id()) + "_gui"}) + for x, y in layout.get(flow).get_waypoints(): + waypoint = ET.SubElement(flow_shape, "omgdi:waypoint", {"x": str(x), "y": str(y)}) + + for node in bpmn_graph.get_nodes(): + process = process_process[node.get_process()] + + if isinstance(node, BPMN.StartEvent): + isInterrupting = "true" if node.get_isInterrupting() else "false" + parallelMultiple = "true" if node.get_parallelMultiple() else "false" + task = ET.SubElement(process, "bpmn:startEvent", + {"id": node.get_id(), "isInterrupting": isInterrupting, "name": node.get_name(), + "parallelMultiple": parallelMultiple}) + elif isinstance(node, BPMN.EndEvent): + task = ET.SubElement(process, "bpmn:endEvent", {"id": node.get_id(), "name": node.get_name()}) + elif isinstance(node, BPMN.IntermediateCatchEvent): + task = ET.SubElement(process, "bpmn:intermediateCatchEvent", {"id": node.get_id(), "name": node.get_name()}) + elif isinstance(node, BPMN.IntermediateThrowEvent): + task = ET.SubElement(process, "bpmn:intermediateThrowEvent", {"id": node.get_id(), "name": node.get_name()}) + elif isinstance(node, BPMN.BoundaryEvent): + task = ET.SubElement(process, "bpmn:boundaryEvent", {"id": node.get_id(), "name": node.get_name()}) + elif isinstance(node, BPMN.Task): + task = ET.SubElement(process, "bpmn:task", {"id": node.get_id(), "name": node.get_name()}) + elif isinstance(node, BPMN.SubProcess): + task = ET.SubElement(process, "bpmn:subProcess", {"id": node.get_id(), "name": node.get_name()}) + elif isinstance(node, BPMN.ExclusiveGateway): + task = ET.SubElement(process, "bpmn:exclusiveGateway", + {"id": node.get_id(), "gatewayDirection": node.get_gateway_direction().value, + "name": ""}) + elif isinstance(node, BPMN.ParallelGateway): + task = ET.SubElement(process, "bpmn:parallelGateway", + {"id": node.get_id(), "gatewayDirection": node.get_gateway_direction().value, + "name": ""}) + elif isinstance(node, BPMN.InclusiveGateway): + task = ET.SubElement(process, "bpmn:inclusiveGateway", + {"id": node.get_id(), "gatewayDirection": node.get_gateway_direction().value, + "name": ""}) + else: + raise Exception("Unexpected node type.") + + if enable_incoming_outgoing_exporting: + for in_arc in node.get_in_arcs(): + arc_xml = ET.SubElement(task, "bpmn:incoming") + arc_xml.text = "id" + str(in_arc.get_id()) + + for out_arc in node.get_out_arcs(): + arc_xml = ET.SubElement(task, "bpmn:outgoing") + arc_xml.text = "id" + str(out_arc.get_id()) + + for flow in bpmn_graph.get_flows(): + process = process_process[flow.get_process()] + + source = flow.get_source() + target = flow.get_target() + flow_xml = ET.SubElement(process, "bpmn:sequenceFlow", {"id": "id" + str(flow.get_id()), "name": flow.get_name(), + "sourceRef": str(source.get_id()), + "targetRef": str(target.get_id())}) + + return minidom.parseString(ET.tostring(definitions)).toprettyxml(encoding=encoding) diff --git a/pm4py/pm4py/objects/bpmn/importer/__init__.py b/pm4py/pm4py/objects/bpmn/importer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8dc8ed334da47c59ed1845f464a7cd2c56976fec --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/importer/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.bpmn.importer import importer, variants diff --git a/pm4py/pm4py/objects/bpmn/importer/importer.py b/pm4py/pm4py/objects/bpmn/importer/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..afee8da041f7f0e37dbcb0d1c16e536c224ee35d --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/importer/importer.py @@ -0,0 +1,77 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.bpmn.importer.variants import lxml +from pm4py.util import exec_utils + + +class Variants(Enum): + LXML = lxml + + +DEFAULT_VARIANT = Variants.LXML + + +def apply(path, variant=DEFAULT_VARIANT, parameters=None): + """ + Imports a BPMN diagram from a file + + Parameters + ------------- + path + Path to the file + variant + Variant of the algorithm to use, possible values: + - Variants.LXML + parameters + Parameters of the algorithm + + Returns + ------------- + bpmn_graph + BPMN graph + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(path, parameters=parameters) + + +def deserialize(bpmn_string, variant=DEFAULT_VARIANT, parameters=None): + """ + Deserialize a text/binary string representing a BPMN 2.0 + + Parameters + ------------- + bpmn_string + BPMN string + variant + Variant of the algorithm to use, possible values: + - Variants.LXML + parameters + Parameters of the algorithm + + Returns + ------------- + bpmn_graph + BPMN graph + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).import_from_string(bpmn_string, parameters=parameters) diff --git a/pm4py/pm4py/objects/bpmn/importer/variants/__init__.py b/pm4py/pm4py/objects/bpmn/importer/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..09877809d5e8c60537b75760995aaa54c4648389 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/importer/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.bpmn.importer.variants import lxml diff --git a/pm4py/pm4py/objects/bpmn/importer/variants/lxml.py b/pm4py/pm4py/objects/bpmn/importer/variants/lxml.py new file mode 100644 index 0000000000000000000000000000000000000000..ee85f42f1a1ad810c29d0cd936cd3af674d8f356 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/importer/variants/lxml.py @@ -0,0 +1,346 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.bpmn.obj import BPMN +from pm4py.util import constants, exec_utils +from enum import Enum + + +class Parameters(Enum): + ENCODING = "encoding" + + +class Counts: + def __init__(self): + self.number_processes = 0 + + +def parse_element(bpmn_graph, counts, curr_el, parents, incoming_dict, outgoing_dict, nodes_dict, nodes_bounds, + flow_info, process=None, node=None, bpmn_element=None, flow=None, rec_depth=0): + """ + Parses a BPMN element from the XML file + """ + layout = bpmn_graph.get_layout() + tag = curr_el.tag.lower() + if tag.endswith("subprocess"): # subprocess invocation + name = curr_el.get("name").replace("\r", "").replace("\n", "") if "name" in curr_el.attrib else "" + subprocess = BPMN.SubProcess(id=curr_el.get("id"), name=name, process=process, depth=rec_depth) + bpmn_graph.add_node(subprocess) + node = subprocess + process = curr_el.get("id") + nodes_dict[process] = node + elif tag.endswith("process"): # process of the current subtree + process = curr_el.get("id") + name = curr_el.get("name").replace("\r", "").replace("\n", "") if "name" in curr_el.attrib else "" + bpmn_graph.set_process_id(process) + bpmn_graph.set_name(name) + elif tag.endswith("shape"): # shape of a node, contains x,y,width,height information + bpmn_element = curr_el.get("bpmnElement") + elif tag.endswith("task"): # simple task object + id = curr_el.get("id") + name = curr_el.get("name").replace("\r", "").replace("\n", "") if "name" in curr_el.attrib else "" + #this_type = str(curr_el.tag) + #this_type = this_type[this_type.index("}") + 1:] + task = BPMN.Task(id=id, name=name, process=process) + bpmn_graph.add_node(task) + node = task + nodes_dict[id] = node + elif tag.endswith("startevent"): # start node starting the (sub)process + id = curr_el.get("id") + name = curr_el.get("name").replace("\r", " ").replace("\n", " ") if "name" in curr_el.attrib else "" + event_definitions = [child.tag.lower().replace("eventdefinition","") for child in curr_el if child.tag.lower().endswith("eventdefinition")] + if len(event_definitions) > 0: + event_type = event_definitions[0] + if event_type.endswith("message"): + start_event = BPMN.MessageStartEvent(id=curr_el.get("id"), name=name, process=process) + else: # TODO: expand functionality, support more start event types + start_event = BPMN.NormalStartEvent(id=curr_el.get("id"), name=name, process=process) + else: + start_event = BPMN.NormalStartEvent(id=curr_el.get("id"), name=name, process=process) + bpmn_graph.add_node(start_event) + node = start_event + nodes_dict[id] = node + elif tag.endswith("endevent"): # end node ending the (sub)process + id = curr_el.get("id") + name = curr_el.get("name").replace("\r", " ").replace("\n", " ") if "name" in curr_el.attrib else "" + event_definitions = [child.tag.lower().replace("eventdefinition","") for child in curr_el if child.tag.lower().endswith("eventdefinition")] + if len(event_definitions) > 0: + event_type = event_definitions[0] + if event_type.endswith("message"): + end_event = BPMN.MessageEndEvent(id=curr_el.get("id"), name=name, process=process) + elif event_type.endswith("terminate"): + end_event = BPMN.TerminateEndEvent(id=curr_el.get("id"), name=name, process=process) + elif event_type.endswith("error"): + end_event = BPMN.ErrorEndEvent(id=curr_el.get("id"), name=name, process=process) + elif event_type.endswith("cancel"): + end_event = BPMN.CancelEndEvent(id=curr_el.get("id"), name=name, process=process) + else: # TODO: expand functionality, support more start event types + end_event = BPMN.NormalEndEvent(id=curr_el.get("id"), name=name, process=process) + else: + end_event = BPMN.NormalEndEvent(id=curr_el.get("id"), name=name, process=process) + bpmn_graph.add_node(end_event) + node = end_event + nodes_dict[id] = node + elif tag.endswith("intermediatecatchevent"): # intermediate event that happens (externally) and can be catched + id = curr_el.get("id") + name = curr_el.get("name").replace("\r", " ").replace("\n", " ") if "name" in curr_el.attrib else "" + event_definitions = [child.tag.lower().replace("eventdefinition","") for child in curr_el if child.tag.lower().endswith("eventdefinition")] + if len(event_definitions) > 0: + event_type = event_definitions[0] + if event_type.endswith("message"): + intermediate_catch_event = BPMN.MessageIntermediateCatchEvent(id=curr_el.get("id"), name=name, process=process) + elif event_type.endswith("error"): + intermediate_catch_event = BPMN.ErrorIntermediateCatchEvent(id=curr_el.get("id"), name=name, process=process) + elif event_type.endswith("cancel"): + intermediate_catch_event = BPMN.CancelIntermediateCatchEvent(id=curr_el.get("id"), name=name, process=process) + else: + intermediate_catch_event = BPMN.IntermediateCatchEvent(id=curr_el.get("id"), name=name, process=process) + else: + intermediate_catch_event = BPMN.IntermediateCatchEvent(id=curr_el.get("id"), name=name, process=process) + bpmn_graph.add_node(intermediate_catch_event) + node = intermediate_catch_event + nodes_dict[id] = node + elif tag.endswith("intermediatethrowevent"): # intermediate event that is activated through the (sub)process + id = curr_el.get("id") + name = curr_el.get("name").replace("\r", " ").replace("\n", " ") if "name" in curr_el.attrib else "" + event_definitions = [child.tag.lower().replace("eventdefinition","") for child in curr_el if child.tag.lower().endswith("eventdefinition")] + if len(event_definitions) > 0: + event_type = event_definitions[0] + if event_type.endswith("message"): + intermediate_throw_event = BPMN.MessageIntermediateThrowEvent(id=curr_el.get("id"), name=name, process=process) + else: + intermediate_throw_event = BPMN.NormalIntermediateThrowEvent(id=curr_el.get("id"), name=name, process=process) + else: + intermediate_throw_event = BPMN.NormalIntermediateThrowEvent(id=curr_el.get("id"), name=name, process=process) + bpmn_graph.add_node(intermediate_throw_event) + node = intermediate_throw_event + nodes_dict[id] = node + elif tag.endswith("boundaryevent"): + id = curr_el.get("id") + ref_activity = curr_el.get("attachedToRef") + name = curr_el.get("name").replace("\r", " ").replace("\n", " ") if "name" in curr_el.attrib else "" + event_definitions = [child.tag.lower().replace("eventdefinition","") for child in curr_el if child.tag.lower().endswith("eventdefinition")] + if len(event_definitions) > 0: + event_type = event_definitions[0] + if event_type.endswith("message"): + boundary_event = BPMN.MessageBoundaryEvent(id=curr_el.get("id"), name=name, process=process, activity=ref_activity) + elif event_type.endswith("error"): + boundary_event = BPMN.ErrorBoundaryEvent(id=curr_el.get("id"), name=name, process=process, activity=ref_activity) + elif event_type.endswith("cancel"): + boundary_event = BPMN.CancelBoundaryEvent(id=curr_el.get("id"), name=name, process=process, activity=ref_activity) + else: + boundary_event = BPMN.BoundaryEvent(id=curr_el.get("id"), name=name, process=process, activity=ref_activity) + else: + boundary_event = BPMN.BoundaryEvent(id=curr_el.get("id"), name=name, process=process, activity=ref_activity) + bpmn_graph.add_node(boundary_event) + node = boundary_event + nodes_dict[id] = node + elif tag.endswith("edge"): # related to the x, y information of an arc + bpmnElement = curr_el.get("bpmnElement") + flow = bpmnElement + elif tag.endswith("exclusivegateway"): + id = curr_el.get("id") + name = curr_el.get("name").replace("\r", "").replace("\n", "") if "name" in curr_el.attrib else "" + try: + direction = BPMN.Gateway.Direction[curr_el.get("gatewayDirection").upper()] + exclusive_gateway = BPMN.ExclusiveGateway(id=curr_el.get("id"), name=name, gateway_direction=direction, process=process) + except: + exclusive_gateway = BPMN.ExclusiveGateway(id=curr_el.get("id"), name=name, gateway_direction=BPMN.Gateway.Direction.UNSPECIFIED, process=process) + bpmn_graph.add_node(exclusive_gateway) + node = exclusive_gateway + nodes_dict[id] = node + elif tag.endswith("parallelgateway"): + id = curr_el.get("id") + name = curr_el.get("name").replace("\r", "").replace("\n", "") if "name" in curr_el.attrib else "" + try: + direction = BPMN.Gateway.Direction[curr_el.get("gatewayDirection").upper()] + parallel_gateway = BPMN.ParallelGateway(id=curr_el.get("id"), name=name, gateway_direction=direction, process=process) + except: + parallel_gateway = BPMN.ParallelGateway(id=curr_el.get("id"), name=name, gateway_direction=BPMN.Gateway.Direction.UNSPECIFIED, process=process) + bpmn_graph.add_node(parallel_gateway) + node = parallel_gateway + nodes_dict[id] = node + elif tag.endswith("inclusivegateway"): + id = curr_el.get("id") + name = curr_el.get("name").replace("\r", "").replace("\n", "") if "name" in curr_el.attrib else "" + try: + direction = BPMN.Gateway.Direction[curr_el.get("gatewayDirection").upper()] + inclusive_gateway = BPMN.InclusiveGateway(id=curr_el.get("id"), name=name, gateway_direction=direction, process=process) + except: + inclusive_gateway = BPMN.InclusiveGateway(id=curr_el.get("id"), name=name, gateway_direction=BPMN.Gateway.Direction.UNSPECIFIED, process=process) + bpmn_graph.add_node(inclusive_gateway) + node = inclusive_gateway + nodes_dict[id] = node + elif tag.endswith("incoming"): # incoming flow of a node + name = curr_el.get("name").replace("\r", "").replace("\n", "") if "name" in curr_el.attrib else "" + if node is not None: + incoming_dict[curr_el.text.strip()] = (node, process, tag, name) + elif tag.endswith("outgoing"): # outgoing flow of a node + name = curr_el.get("name").replace("\r", "").replace("\n", "") if "name" in curr_el.attrib else "" + if node is not None: + outgoing_dict[curr_el.text.strip()] = (node, process, tag, name) + elif tag.endswith("sequenceflow"): # normal sequence flow between two nodes + seq_flow_id = curr_el.get("id") + source_ref = curr_el.get("sourceRef") + target_ref = curr_el.get("targetRef") + name = curr_el.get("name").replace("\r", "").replace("\n", "") if "name" in curr_el.attrib else "" + if source_ref is not None and target_ref is not None: + incoming_dict[seq_flow_id] = (target_ref, process, tag, name) + outgoing_dict[seq_flow_id] = (source_ref, process, tag, name) + elif tag.endswith("waypoint"): # contains information of x, y values of an edge + if flow is not None: + x = float(curr_el.get("x")) + y = float(curr_el.get("y")) + if not flow in flow_info: + flow_info[flow] = [] + flow_info[flow].append((x, y)) + elif tag.endswith("label"): # label of a node, mostly at the end of a shape object + bpmn_element = None + elif tag.endswith("bounds"): # contains information of width, height, x, y of a node + if bpmn_element is not None: + x = float(curr_el.get("x")) + y = float(curr_el.get("y")) + width = float(curr_el.get("width")) + height = float(curr_el.get("height")) + nodes_bounds[bpmn_element] = {"x": x, "y": y, "width": width, "height": height} + + for child in curr_el: + bpmn_graph = parse_element(bpmn_graph, counts, child, list(parents) + [child], incoming_dict, outgoing_dict, + nodes_dict, nodes_bounds, flow_info, process=process, node=node, + bpmn_element=bpmn_element, + flow=flow, rec_depth=rec_depth + 1) + # afterprocessing when the xml tree has been recursively parsed already + if rec_depth == 0: + # bpmn_graph.set_process_id(process) + for seq_flow_id in incoming_dict: + if incoming_dict[seq_flow_id][0] in nodes_dict: + incoming_dict[seq_flow_id] = (nodes_dict[incoming_dict[seq_flow_id][0]], incoming_dict[seq_flow_id][1], incoming_dict[seq_flow_id][2], incoming_dict[seq_flow_id][3]) + for seq_flow_id in outgoing_dict: + if outgoing_dict[seq_flow_id][0] in nodes_dict: + outgoing_dict[seq_flow_id] = (nodes_dict[outgoing_dict[seq_flow_id][0]], outgoing_dict[seq_flow_id][1], outgoing_dict[seq_flow_id][2], outgoing_dict[seq_flow_id][3]) + + # also supports flows without waypoints + flows_without_waypoints = set(flow_info).union(set(outgoing_dict).intersection(set(incoming_dict))) + for flow_id in flows_without_waypoints: + flow_info[flow_id] = [] + + for flow_id in flow_info: + if flow_id in outgoing_dict and flow_id in incoming_dict: + if isinstance(outgoing_dict[flow_id][0], BPMN.BPMNNode) and isinstance(incoming_dict[flow_id][0], BPMN.BPMNNode): + flow = BPMN.SequenceFlow(outgoing_dict[flow_id][0], incoming_dict[flow_id][0], id=flow_id, name=outgoing_dict[flow_id][3], process=outgoing_dict[flow_id][1]) + bpmn_graph.add_flow(flow) + layout.get(flow).del_waypoints() + for waypoint in flow_info[flow_id]: + layout.get(flow).add_waypoint(waypoint) + for node_id in nodes_bounds: + if node_id in nodes_dict: + bounds = nodes_bounds[node_id] + node = nodes_dict[node_id] + layout.get(node).set_x(bounds["x"]) + layout.get(node).set_y(bounds["y"]) + layout.get(node).set_width(bounds["width"]) + layout.get(node).set_height(bounds["height"]) + return bpmn_graph + + +def import_xml_tree_from_root(root): + """ + Imports a BPMN graph from (the root of) an XML tree + + Parameters + ------------- + root + Root of the tree + + Returns + ------------- + bpmn_graph + BPMN graph + """ + bpmn_graph = BPMN() + counts = Counts() + incoming_dict = {} + outgoing_dict = {} + nodes_dict = {} + nodes_bounds = {} + flow_info = {} + + return parse_element(bpmn_graph, counts, root, [], incoming_dict, outgoing_dict, nodes_dict, nodes_bounds, + flow_info) + + +def apply(path, parameters=None): + """ + Imports a BPMN diagram from a file + + Parameters + ------------- + path + Path to the file + parameters + Parameters of the algorithm + + Returns + ------------- + bpmn_graph + BPMN graph + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, None) + + from lxml import etree, objectify + + parser = etree.XMLParser(remove_comments=True, encoding=encoding) + + F = open(path, "rb") + xml_tree = objectify.parse(F, parser=parser) + F.close() + + return import_xml_tree_from_root(xml_tree.getroot()) + + +def import_from_string(bpmn_string, parameters=None): + """ + Imports a BPMN diagram from a string + + Parameters + ------------- + path + Path to the file + parameters + Parameters of the algorithm + + Returns + ------------- + bpmn_graph + BPMN graph + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + if type(bpmn_string) is str: + bpmn_string = bpmn_string.encode(encoding) + + from lxml import etree, objectify + + parser = etree.XMLParser(remove_comments=True) + root = objectify.fromstring(bpmn_string, parser=parser) + + return import_xml_tree_from_root(root) diff --git a/pm4py/pm4py/objects/bpmn/layout/__init__.py b/pm4py/pm4py/objects/bpmn/layout/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e6b3784b821f5a77641d289e27c4a869d37546a7 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/layout/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.bpmn.layout import variants, layouter diff --git a/pm4py/pm4py/objects/bpmn/layout/layouter.py b/pm4py/pm4py/objects/bpmn/layout/layouter.py new file mode 100644 index 0000000000000000000000000000000000000000..98b32c031603662960dd81032fcca0803e91d620 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/layout/layouter.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.bpmn.layout.variants import graphviz +from pm4py.util import exec_utils + + +class Variants(Enum): + GRAPHVIZ = graphviz + + +DEFAULT_VARIANT = Variants.GRAPHVIZ + + +def apply(bpmn_graph, variant=DEFAULT_VARIANT, parameters=None): + """ + Layouts a BPMN graph (inserting the positions of the nodes and the layouting of the edges) + + Parameters + ------------- + bpmn_graph + BPMN graph + variant + Variant of the algorithm to use, possible values: + - Variants.GRAPHVIZ + parameters + Parameters of the algorithm + + Returns + ------------- + bpmn_graph + BPMN graph with layout information + """ + return exec_utils.get_variant(variant).apply(bpmn_graph, parameters=parameters) diff --git a/pm4py/pm4py/objects/bpmn/layout/variants/__init__.py b/pm4py/pm4py/objects/bpmn/layout/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..257f3da9ca48f0a9c8cc70a107b3b2692ea163c7 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/layout/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.bpmn.layout.variants import graphviz diff --git a/pm4py/pm4py/objects/bpmn/layout/variants/graphviz.py b/pm4py/pm4py/objects/bpmn/layout/variants/graphviz.py new file mode 100644 index 0000000000000000000000000000000000000000..c889a3fec5fbbefc66239ecbb144558077bc2bc9 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/layout/variants/graphviz.py @@ -0,0 +1,398 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import uuid +from collections import Counter +from copy import deepcopy +from enum import Enum + +from pm4py.objects.bpmn.obj import BPMN +from pm4py.objects.bpmn.util.sorting import get_sorted_nodes_edges +from pm4py.util import exec_utils +import tempfile + + +class EndpointDirection(Enum): + RIGHT = "right" + LEFT = "left" + TOP = "top" + BOTTOM = "bottom" + + +class Parameters(Enum): + TASK_WH = "task_wh" + SCREEN_SIZE_X = "screen_size_x" + SCREEN_SIZE_Y = "screen_size_y" + SCALING_FACTOR = "scaling_factor" + + +def get_right_edge_coord(layout, node, p, partial_counter, total_counter): + y_factor = partial_counter[EndpointDirection.RIGHT] / (total_counter[EndpointDirection.RIGHT] + 1.0) + new_x = p[0] + layout.get(node).get_width() + new_y = p[1] + round( + layout.get(node).get_height() * y_factor) + return (new_x, new_y) + + +def get_left_edge_coord(layout, node, p, partial_counter, total_counter): + y_factor = partial_counter[EndpointDirection.LEFT] / (total_counter[EndpointDirection.LEFT] + 1.0) + new_x = p[0] + new_y = p[1] + round( + layout.get(node).get_height() * y_factor) + return (new_x, new_y) + + +def get_top_edge_coord(layout, node, p, partial_counter, total_counter): + x_factor = partial_counter[EndpointDirection.TOP] / (total_counter[EndpointDirection.TOP] + 1.0) + new_x = p[0] + round(layout.get(node).get_width() * x_factor) + new_y = p[1] + return (new_x, new_y) + + +def get_bottom_edge_coord(layout, node, p, partial_counter, total_counter): + x_factor = partial_counter[EndpointDirection.BOTTOM] / (total_counter[EndpointDirection.BOTTOM] + 1.0) + new_x = p[0] + round(layout.get(node).get_width() * x_factor) + new_y = p[1] + layout.get(node).get_height() + return (new_x, new_y) + + +def apply(bpmn_graph, parameters=None): + """ + Layouts a BPMN graph (inserting the positions of the nodes and the layouting of the edges) + + Parameters + ------------- + bpmn_graph + BPMN graph + parameters + Parameters of the algorithm: + - Parameters.SCREEN_SIZE_X => target size of the screen in pixels (default 1920.0) + - Parameters.SCREEN_SIZE_Y => target size of the screen in pixels (default 1080.0) + - Parameters.SCALING_FACTOR => scaling factor of the layouting (defualt 2.5) + + Returns + ------------- + bpmn_graph + BPMN graph with layout information + """ + from graphviz import Digraph + from pm4py.visualization.common import save as gsave + from pm4py.visualization.common import svg_pos_parser + + if parameters is None: + parameters = {} + + screen_size_x = exec_utils.get_param_value(Parameters.SCREEN_SIZE_X, parameters, 1920.0) + screen_size_y = exec_utils.get_param_value(Parameters.SCREEN_SIZE_Y, parameters, 1080.0) + scaling_factor = exec_utils.get_param_value(Parameters.SCALING_FACTOR, parameters, 2.5) + + nodes = bpmn_graph.get_nodes() + flows = bpmn_graph.get_flows() + layout = bpmn_graph.get_layout() + + filename_gv = tempfile.NamedTemporaryFile(suffix='.gv') + filename_gv.close() + filename_svg = tempfile.NamedTemporaryFile(suffix='.svg') + filename_svg.close() + viz = Digraph(bpmn_graph.get_name(), filename=filename_gv.name, engine='dot') + viz.format = "svg" + viz.graph_attr['rankdir'] = 'LR' + + graph_nodes, graph_edges = get_sorted_nodes_edges(bpmn_graph) + + nodes_dict = {} + inv_nodes_dict = {} + for n in graph_nodes: + node_uuid = str(uuid.uuid4()).replace("-", "") + nodes_dict[n] = node_uuid + inv_nodes_dict[node_uuid] = n + viz.node(node_uuid, label=" ", shape="box") + + for tup in graph_edges: + viz.edge(nodes_dict[tup[0]], nodes_dict[tup[1]]) + + gsave.save(viz, filename_svg.name) + + nodes_p, edges_p = svg_pos_parser.apply(filename_svg.name) + + nodes_pos = {} + for node in nodes_p: + nodes_pos[inv_nodes_dict[node]] = nodes_p[node]["polygon"] + + endpoints_wh = exec_utils.get_param_value(Parameters.TASK_WH, parameters, 30) + task_wh = exec_utils.get_param_value(Parameters.TASK_WH, parameters, 60) + + # add node positions to BPMN nodes + for n in graph_nodes: + node_pos = nodes_pos[n][0] + + pos_x = float(node_pos[0]) + pos_y = float(node_pos[1]) + layout.get(n).set_x(pos_x) + layout.get(n).set_y(pos_y) + if isinstance(n, BPMN.Task): + this_width = min(round(2 * task_wh), round(2 * (len(n.get_name()) + 7) * task_wh / 22.0)) + layout.get(n).set_width(this_width) + layout.get(n).set_height(task_wh) + elif isinstance(n, BPMN.StartEvent) or isinstance(n, BPMN.EndEvent): + layout.get(n).set_width(endpoints_wh) + layout.get(n).set_height(endpoints_wh) + else: + layout.get(n).set_width(task_wh) + layout.get(n).set_height(task_wh) + + max_x = max(1, max(abs(layout.get(node).get_x()) for node in nodes)) + max_y = max(1, max(abs(layout.get(node).get_y()) for node in nodes)) + different_x = len(set(layout.get(node).get_x() for node in nodes)) + different_y = len(set(layout.get(node).get_y() for node in nodes)) + + stretch_fact_x = scaling_factor * 1.25 * screen_size_x / max_x + stretch_fact_y = scaling_factor * screen_size_y / max_y + + for node in nodes: + layout.get(node).set_x(round(layout.get(node).get_x() * stretch_fact_x)) + layout.get(node).set_y(round(layout.get(node).get_y() * stretch_fact_y)) + + min_x = min(layout.get(node).get_x() for node in nodes) + min_y = min(layout.get(node).get_y() for node in nodes) + + for node in nodes: + x_coord = layout.get(node).get_x() - min_x + y_coord = layout.get(node).get_y() - min_y + layout.get(node).set_x(x_coord) + layout.get(node).set_y(y_coord) + + outgoing_edges = dict() + ingoing_edges = dict() + sources_dict = dict() + targets_dict = dict() + + for flow in flows: + source = flow.get_source() + target = flow.get_target() + + x_src = layout.get(source).get_x() + x_trg = layout.get(target).get_x() + y_src = layout.get(source).get_y() + y_trg = layout.get(target).get_y() + + sources_dict[(x_src, y_src)] = source + targets_dict[(x_trg, y_trg)] = target + + diff_x = abs(x_trg - x_src) + diff_y = abs(y_src - y_trg) + + if not (x_src, y_src) in outgoing_edges: + outgoing_edges[(x_src, y_src)] = {} + outgoing_edges[(x_src, y_src)][(x_trg, y_trg)] = {EndpointDirection.RIGHT: 0.0, EndpointDirection.LEFT: 0.0, + EndpointDirection.TOP: 0.0, EndpointDirection.BOTTOM: 0.0} + if not (x_trg, y_trg) in ingoing_edges: + ingoing_edges[(x_trg, y_trg)] = {} + ingoing_edges[(x_trg, y_trg)][(x_src, y_src)] = {EndpointDirection.RIGHT: 0.0, EndpointDirection.LEFT: 0.0, + EndpointDirection.TOP: 0.0, EndpointDirection.BOTTOM: 0.0} + + if x_trg > x_src: + outgoing_edges[(x_src, y_src)][(x_trg, y_trg)][EndpointDirection.RIGHT] = diff_x / (diff_x + diff_y) + ingoing_edges[(x_trg, y_trg)][(x_src, y_src)][EndpointDirection.LEFT] = diff_x / (diff_x + diff_y) + else: + outgoing_edges[(x_src, y_src)][(x_trg, y_trg)][EndpointDirection.LEFT] = diff_x / (diff_x + diff_y) + ingoing_edges[(x_trg, y_trg)][(x_src, y_src)][EndpointDirection.RIGHT] = diff_x / (diff_x + diff_y) + + if y_src > y_trg: + outgoing_edges[(x_src, y_src)][(x_trg, y_trg)][EndpointDirection.TOP] = diff_y / (diff_x + diff_y) + ingoing_edges[(x_trg, y_trg)][(x_src, y_src)][EndpointDirection.BOTTOM] = diff_y / (diff_x + diff_y) + else: + outgoing_edges[(x_src, y_src)][(x_trg, y_trg)][EndpointDirection.BOTTOM] = diff_y / (diff_x + diff_y) + ingoing_edges[(x_trg, y_trg)][(x_src, y_src)][EndpointDirection.TOP] = diff_y / (diff_x + diff_y) + + # normalization + outgoing_edges0 = deepcopy(outgoing_edges) + ingoing_edges0 = deepcopy(ingoing_edges) + + for p1 in outgoing_edges: + sum_right = 0.0 + sum_left = 0.0 + sum_top = 0.0 + sum_bottom = 0.0 + for p2 in outgoing_edges[p1]: + sum_right += outgoing_edges0[p1][p2][EndpointDirection.RIGHT] + sum_left += outgoing_edges0[p1][p2][EndpointDirection.LEFT] + sum_top += outgoing_edges0[p1][p2][EndpointDirection.TOP] + sum_bottom += outgoing_edges0[p1][p2][EndpointDirection.BOTTOM] + if p1 in ingoing_edges: + for p2 in ingoing_edges[p1]: + sum_right += ingoing_edges0[p1][p2][EndpointDirection.RIGHT] + sum_left += ingoing_edges0[p1][p2][EndpointDirection.LEFT] + sum_top += ingoing_edges0[p1][p2][EndpointDirection.TOP] + sum_bottom += ingoing_edges0[p1][p2][EndpointDirection.BOTTOM] + for p2 in outgoing_edges[p1]: + if sum_right > 0: + outgoing_edges[p1][p2][EndpointDirection.RIGHT] = outgoing_edges[p1][p2][ + EndpointDirection.RIGHT] ** 2 / sum_right + if sum_left > 0: + outgoing_edges[p1][p2][EndpointDirection.LEFT] = outgoing_edges[p1][p2][ + EndpointDirection.LEFT] ** 2 / sum_left + if sum_top > 0: + outgoing_edges[p1][p2][EndpointDirection.TOP] = outgoing_edges[p1][p2][ + EndpointDirection.TOP] ** 2 / sum_top + if sum_bottom > 0: + outgoing_edges[p1][p2][EndpointDirection.BOTTOM] = outgoing_edges[p1][p2][ + EndpointDirection.BOTTOM] ** 2 / sum_bottom + for p1 in ingoing_edges: + sum_right = 0.0 + sum_left = 0.0 + sum_top = 0.0 + sum_bottom = 0.0 + for p2 in ingoing_edges[p1]: + sum_right += ingoing_edges0[p1][p2][EndpointDirection.RIGHT] + sum_left += ingoing_edges0[p1][p2][EndpointDirection.LEFT] + sum_top += ingoing_edges0[p1][p2][EndpointDirection.TOP] + sum_bottom += ingoing_edges0[p1][p2][EndpointDirection.BOTTOM] + if p1 in outgoing_edges: + for p2 in outgoing_edges[p1]: + sum_right += outgoing_edges0[p1][p2][EndpointDirection.RIGHT] + sum_left += outgoing_edges0[p1][p2][EndpointDirection.LEFT] + sum_top += outgoing_edges0[p1][p2][EndpointDirection.TOP] + sum_bottom += outgoing_edges0[p1][p2][EndpointDirection.BOTTOM] + for p2 in ingoing_edges[p1]: + if sum_right > 0: + ingoing_edges[p1][p2][EndpointDirection.RIGHT] = ingoing_edges[p1][p2][ + EndpointDirection.RIGHT] ** 2 / sum_right + if sum_left > 0: + ingoing_edges[p1][p2][EndpointDirection.LEFT] = ingoing_edges[p1][p2][ + EndpointDirection.LEFT] ** 2 / sum_left + if sum_top > 0: + ingoing_edges[p1][p2][EndpointDirection.TOP] = ingoing_edges[p1][p2][ + EndpointDirection.TOP] ** 2 / sum_top + if sum_bottom > 0: + ingoing_edges[p1][p2][EndpointDirection.BOTTOM] = ingoing_edges[p1][p2][ + EndpointDirection.BOTTOM] ** 2 / sum_bottom + + # keep best direction + for p1 in outgoing_edges: + for p2 in outgoing_edges[p1]: + vals = sorted([(x, y) for x, y in outgoing_edges[p1][p2].items()], key=lambda x: x[1], reverse=True) + outgoing_edges[p1][p2] = vals[0][0] + for p1 in ingoing_edges: + for p2 in ingoing_edges[p1]: + vals = sorted([(x, y) for x, y in ingoing_edges[p1][p2].items()], key=lambda x: x[1], reverse=True) + ingoing_edges[p1][p2] = vals[0][0] + + total_counter = dict() + partial_counter = dict() + for p1 in outgoing_edges: + if p1 not in total_counter: + total_counter[p1] = Counter() + for p2 in outgoing_edges[p1]: + dir = outgoing_edges[p1][p2] + total_counter[p1][dir] += 1 + for p1 in ingoing_edges: + if p1 not in total_counter: + total_counter[p1] = Counter() + for p2 in ingoing_edges[p1]: + dir = ingoing_edges[p1][p2] + total_counter[p1][dir] += 1 + + outgoing_edges_dirs = deepcopy(outgoing_edges) + ingoing_edges_dirs = deepcopy(ingoing_edges) + + # decide exiting/entering point for edges + for p1 in outgoing_edges: + node = sources_dict[p1] + if p1 not in partial_counter: + partial_counter[p1] = Counter() + sorted_outgoing_edges = sorted(outgoing_edges[p1], key=lambda x: x, reverse=False) + for p2 in sorted_outgoing_edges: + dir = outgoing_edges[p1][p2] + partial_counter[p1][dir] += 1 + if dir == EndpointDirection.RIGHT: + outgoing_edges[p1][p2] = get_right_edge_coord(layout, node, p1, partial_counter[p1], total_counter[p1]) + elif dir == EndpointDirection.LEFT: + outgoing_edges[p1][p2] = get_left_edge_coord(layout, node, p1, partial_counter[p1], total_counter[p1]) + elif dir == EndpointDirection.TOP: + outgoing_edges[p1][p2] = get_top_edge_coord(layout, node, p1, partial_counter[p1], total_counter[p1]) + elif dir == EndpointDirection.BOTTOM: + outgoing_edges[p1][p2] = get_bottom_edge_coord(layout, node, p1, partial_counter[p1], total_counter[p1]) + for p1 in ingoing_edges: + node = targets_dict[p1] + if p1 not in partial_counter: + partial_counter[p1] = Counter() + sorted_ingoing_edges = sorted(ingoing_edges[p1], key=lambda x: x, reverse=False) + for p2 in sorted_ingoing_edges: + dir = ingoing_edges[p1][p2] + partial_counter[p1][dir] += 1 + if dir == EndpointDirection.RIGHT: + ingoing_edges[p1][p2] = get_right_edge_coord(layout, node, p1, partial_counter[p1], total_counter[p1]) + elif dir == EndpointDirection.LEFT: + ingoing_edges[p1][p2] = get_left_edge_coord(layout, node, p1, partial_counter[p1], total_counter[p1]) + elif dir == EndpointDirection.TOP: + ingoing_edges[p1][p2] = get_top_edge_coord(layout, node, p1, partial_counter[p1], total_counter[p1]) + elif dir == EndpointDirection.BOTTOM: + ingoing_edges[p1][p2] = get_bottom_edge_coord(layout, node, p1, partial_counter[p1], total_counter[p1]) + + # order the left-entering ingoing edges better + for p1 in ingoing_edges: + vals = [(x, y) for x, y in ingoing_edges[p1].items() if y[0] == p1[0]] + if len(vals) > 1: + vals_x = [x[0] for x in vals] + vals_y = [x[1] for x in vals] + vals_x = sorted(vals_x) + vals_y = sorted(vals_y) + for i in range(len(vals_x)): + ingoing_edges[p1][vals_x[i]] = vals_y[i] + + # set waypoints for edges + for flow in flows: + source = flow.get_source() + target = flow.get_target() + + flow.del_waypoints() + + x_src = layout.get(source).get_x() + x_trg = layout.get(target).get_x() + y_src = layout.get(source).get_y() + y_trg = layout.get(target).get_y() + p1 = (x_src, y_src) + p2 = (x_trg, y_trg) + + source_x = outgoing_edges[p1][p2][0] + source_y = outgoing_edges[p1][p2][1] + target_x = ingoing_edges[p2][p1][0] + target_y = ingoing_edges[p2][p1][1] + dir_source = outgoing_edges_dirs[p1][p2] + dir_target = ingoing_edges_dirs[p2][p1] + + middle_x = (source_x + target_x) / 2.0 + middle_y = (source_y + target_y) / 2.0 + + flow.add_waypoint((source_x, source_y)) + if dir_source in [EndpointDirection.LEFT, EndpointDirection.RIGHT]: + if dir_target in [EndpointDirection.LEFT, EndpointDirection.RIGHT]: + flow.add_waypoint((middle_x, source_y)) + flow.add_waypoint((middle_x, target_y)) + elif dir_target in [EndpointDirection.TOP, EndpointDirection.BOTTOM]: + flow.add_waypoint((target_x, source_y)) + elif dir_source in [EndpointDirection.TOP, EndpointDirection.BOTTOM]: + if dir_target in [EndpointDirection.TOP, EndpointDirection.BOTTOM]: + flow.add_waypoint((source_x, middle_y)) + flow.add_waypoint((target_x, middle_y)) + elif dir_target in [EndpointDirection.LEFT, EndpointDirection.RIGHT]: + flow.add_waypoint((source_x, target_y)) + + flow.add_waypoint((target_x, target_y)) + + return bpmn_graph diff --git a/pm4py/pm4py/objects/bpmn/obj.py b/pm4py/pm4py/objects/bpmn/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..28b8edbf98b1fab4987bef588a380cc80bb3f491 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/obj.py @@ -0,0 +1,561 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import uuid +from enum import Enum +from collections import Counter +from pm4py.util import nx_utils + + +DEFAULT_PROCESS = str(uuid.uuid4()) + + +class Marking(Counter): + pass + + # required = Counter() + + def __hash__(self): + r = 0 + for p in self.items(): + r += 31 * hash(p[0]) * p[1] + return r + + def __eq__(self, other): + if not self.keys() == other.keys(): + return False + for p in self.keys(): + if other.get(p) != self.get(p): + return False + return True + + def __le__(self, other): + if not self.keys() <= other.keys(): + return False + for p in self.keys(): + if sum(other.get(p)) < sum(self.get(p)): + return False + return True + + def __add__(self, other): + m = Marking() + for p in self.items(): + m[p[0]] = p[1] + for p in other.items(): + m[p[0]] += p[1] + return m + + def __sub__(self, other): + m = Marking() + for p in self.items(): + m[p[0]] = p[1] + for p in other.items(): + m[p[0]] -= p[1] + if m[p[0]] == 0: + del m[p[0]] + return m + + def __repr__(self): + # return str([str(p.name) + ":" + str(self.get(p)) for p in self.keys()]) + # The previous representation had a bug, it took into account the order of the places with tokens + return str([str(p.id) + ":" + str(self.get(p)) for p in sorted(list(self.keys()), key=lambda x: x.id)]) + + def __deepcopy__(self, memodict={}): + marking = Marking() + memodict[id(self)] = marking + for node in self: + node_occ = self[node] + new_node = memodict[id(node)] if id(node) in memodict else BPMN.BPMNNode(node.id, node.name) + marking[new_node] = node_occ + return marking + + +class BPMNNodeLayout(object): + def __init__(self): + self.__x = 0 + self.__y = 0 + self.__width = 100 + self.__height = 100 + + def set_x(self, x): + self.__x = x + + def set_y(self, y): + self.__y = y + + def get_x(self): + return self.__x + + def get_y(self): + return self.__y + + def get_width(self): + return self.__width + + def set_width(self, width): + self.__width = width + + def get_height(self): + return self.__height + + def set_height(self, height): + self.__height = height + + +class BPMNEdgeLayout(object): + def __init__(self): + self.__waypoints = [(0, 0), (0, 0)] + + def add_waypoint(self, waypoint): + self.__waypoints.append(waypoint) + + def del_waypoints(self): + self.__waypoints = list() + + def get_waypoints(self): + return self.__waypoints + + +class BPMNLayout(object): + def __init__(self): + self.layout_dict = {} + + def get(self, n): + if n not in self.layout_dict: + if isinstance(n, BPMN.BPMNNode): + self.layout_dict[n] = BPMNNodeLayout() + elif isinstance(n, BPMN.Flow): + self.layout_dict[n] = BPMNEdgeLayout() + return self.layout_dict[n] + + +class BPMN(object): + class BPMNNode(object): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + self.__id = ("id" + str(uuid.uuid4())) if id == "" else id + self.__name = name + self.__in_arcs = list() if in_arcs is None else in_arcs + self.__out_arcs = list() if out_arcs is None else out_arcs + self.__process = DEFAULT_PROCESS if process == None else process + self.__layout = BPMNLayout() + + def get_id(self): + return self.__id + + def get_name(self): + return self.__name + + def get_in_arcs(self): + return self.__in_arcs + + def get_out_arcs(self): + return self.__out_arcs + + def add_in_arc(self, in_arc): + if in_arc not in self.__in_arcs: + self.__in_arcs.append(in_arc) + + def add_out_arc(self, out_arc): + if out_arc not in self.__out_arcs: + self.__out_arcs.append(out_arc) + + def remove_in_arc(self, in_arc): + self.__in_arcs.remove(in_arc) + + def remove_out_arc(self, out_arc): + self.__out_arcs.remove(out_arc) + + def get_process(self): + return self.__process + + def set_process(self, process): + self.__process = process + + def set_x(self, x): + return self.__layout.get(self).set_x(x) + + def set_y(self, y): + return self.__layout.get(self).set_y(y) + + def get_x(self): + return self.__layout.get(self).get_x() + + def get_y(self): + return self.__layout.get(self).get_y() + + def get_width(self): + return self.__layout.get(self).get_width() + + def set_width(self, width): + return self.__layout.get(self).set_width(width) + + def get_height(self): + return self.__layout.get(self).get_height() + + def set_height(self, height): + return self.__layout.get(self).set_height(height) + + def get_layout(self): + return self.__layout + + def set_layout(self, layout): + self.__layout = layout + + def __hash__(self): + return hash(self.id) + + def __eq__(self, other): + # keep the ID for now in places + return hash(self) == hash(other) + + def __repr__(self): + return str(self.__id + "@" + self.__name) + + def __str__(self): + return self.__repr__() + + name = property(get_name) + id = property(get_id) + in_arcs = property(get_in_arcs) + out_arcs = property(get_out_arcs) + process = property(get_process, set_process) + + class Collaboration(BPMNNode): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.BPMNNode.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class Participant(BPMNNode): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None, process_ref=None): + self.process_ref = process_ref + BPMN.BPMNNode.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class TextAnnotation(BPMNNode): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None, text=None): + self.text = text + BPMN.BPMNNode.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class Event(BPMNNode): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.BPMNNode.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class StartEvent(Event): + def __init__(self, id="", isInterrupting=False, name="", parallelMultiple=False, in_arcs=None, out_arcs=None, + process=None): + BPMN.Event.__init__(self, id, name, in_arcs, out_arcs, process=process) + self.__isInterrupting = isInterrupting + self.__parallelMultiple = parallelMultiple + + def get_isInterrupting(self): + return self.__isInterrupting + + def get_parallelMultiple(self): + return self.__parallelMultiple + + class NormalStartEvent(StartEvent): + def __init__(self, id="", isInterrupting=False, name="", parallelMultiple=False, in_arcs=None, out_arcs=None, + process=None): + BPMN.StartEvent.__init__(self, id, isInterrupting, name, parallelMultiple, in_arcs, out_arcs, + process=process) + + class MessageStartEvent(StartEvent): + def __init__(self, id="", isInterrupting=False, name="", parallelMultiple=False, in_arcs=None, out_arcs=None, + process=None): + BPMN.StartEvent.__init__(self, id, isInterrupting, name, parallelMultiple, in_arcs, out_arcs, + process=process) + + class IntermediateCatchEvent(Event): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.Event.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class MessageIntermediateCatchEvent(IntermediateCatchEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.IntermediateCatchEvent.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class ErrorIntermediateCatchEvent(IntermediateCatchEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.IntermediateCatchEvent.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class CancelIntermediateCatchEvent(IntermediateCatchEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.IntermediateCatchEvent.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class BoundaryEvent(Event): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None, activity=None): + self.__activity = activity + BPMN.Event.__init__(self, id, name, in_arcs, out_arcs, process=process) + + def get_activity(self): + return self.__activity + + class MessageBoundaryEvent(BoundaryEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None, activity=None): + BPMN.BoundaryEvent.__init__(self, id, name, in_arcs, out_arcs, process=process, activity=activity) + + class ErrorBoundaryEvent(BoundaryEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None, activity=None): + BPMN.BoundaryEvent.__init__(self, id, name, in_arcs, out_arcs, process=process, activity=activity) + + class CancelBoundaryEvent(BoundaryEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None, activity=None): + BPMN.BoundaryEvent.__init__(self, id, name, in_arcs, out_arcs, process=process, activity=activity) + + class IntermediateThrowEvent(Event): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.Event.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class MessageIntermediateThrowEvent(IntermediateThrowEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.IntermediateThrowEvent.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class NormalIntermediateThrowEvent(IntermediateThrowEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.IntermediateThrowEvent.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class EndEvent(Event): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.Event.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class NormalEndEvent(EndEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.EndEvent.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class MessageEndEvent(EndEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.EndEvent.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class TerminateEndEvent(EndEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.EndEvent.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class ErrorEndEvent(EndEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.EndEvent.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class CancelEndEvent(EndEvent): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.EndEvent.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class Activity(BPMNNode): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.BPMNNode.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class Task(Activity): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.Activity.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class UserTask(Task): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.Task.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class SendTask(Task): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None): + BPMN.Task.__init__(self, id, name, in_arcs, out_arcs, process=process) + + class SubProcess(Activity): + def __init__(self, id="", name="", in_arcs=None, out_arcs=None, process=None, depth=None): + self.__depth = depth + BPMN.Activity.__init__(self, id, name, in_arcs, out_arcs, process=process) + + def get_depth(self): + return self.__depth + + class Gateway(BPMNNode): + class Direction(Enum): + UNSPECIFIED = "Unspecified" + DIVERGING = "Diverging" + CONVERGING = "Converging" + + def __init__(self, id="", name="", gateway_direction=Direction.UNSPECIFIED, in_arcs=None, out_arcs=None, + process=None): + BPMN.BPMNNode.__init__(self, id, name, in_arcs, out_arcs, process=process) + self.__gateway_direction = gateway_direction + + def get_gateway_direction(self): + return self.__gateway_direction + + def set_gateway_direction(self, direction): + self.__gateway_direction = direction + + class ParallelGateway(Gateway): + def __init__(self, id="", name="", gateway_direction=None, in_arcs=None, out_arcs=None, process=None): + gateway_direction = gateway_direction if gateway_direction is not None else BPMN.Gateway.Direction.UNSPECIFIED + BPMN.Gateway.__init__(self, id, name, gateway_direction, in_arcs, out_arcs, process=process) + + class ExclusiveGateway(Gateway): + def __init__(self, id="", name="", gateway_direction=None, in_arcs=None, out_arcs=None, process=None): + gateway_direction = gateway_direction if gateway_direction is not None else BPMN.Gateway.Direction.UNSPECIFIED + BPMN.Gateway.__init__(self, id, name, gateway_direction, in_arcs, out_arcs, process=process) + + class InclusiveGateway(Gateway): + def __init__(self, id="", name="", gateway_direction=None, in_arcs=None, out_arcs=None, process=None): + gateway_direction = gateway_direction if gateway_direction is not None else BPMN.Gateway.Direction.UNSPECIFIED + BPMN.Gateway.__init__(self, id, name, gateway_direction, in_arcs, out_arcs, process=process) + + class EventBasedGateway(Gateway): + def __init__(self, id="", name="", gateway_direction=None, in_arcs=None, out_arcs=None, process=None): + gateway_direction = gateway_direction if gateway_direction is not None else BPMN.Gateway.Direction.UNSPECIFIED + BPMN.Gateway.__init__(self, id, name, gateway_direction, in_arcs, out_arcs, process=process) + + class Flow(object): + def __init__(self, source, target, id="", name="", process=None): + self.__id = uuid.uuid4() if id == "" else id + self.__name = name + self.__source = source + source.add_out_arc(self) + self.__target = target + target.add_in_arc(self) + self.__process = DEFAULT_PROCESS if process == None else process + self.__layout = BPMNLayout() + + def get_id(self): + return self.__id + + def get_name(self): + return self.__name + + def get_source(self): + return self.__source + + def get_target(self): + return self.__target + + def get_process(self): + return self.__process + + def set_process(self, process): + self.__process = process + + def add_waypoint(self, waypoint): + return self.__layout.get(self).add_waypoint(waypoint) + + def del_waypoints(self): + return self.__layout.get(self).del_waypoints() + + def get_waypoints(self): + return self.__layout.get(self).get_waypoints() + + def get_layout(self): + return self.__layout + + def set_layout(self, layout): + self.__layout = layout + + def __repr__(self): + u_id = str(self.__source.get_id()) + "@" + str(self.__source.get_name()) + v_id = str(self.__target.get_id()) + "@" + str(self.__target.get_name()) + return u_id + " -> " + v_id + + def __str__(self): + return self.__repr__() + + source = property(get_source) + target = property(get_target) + + class SequenceFlow(Flow): + def __init__(self, source, target, id="", name="", process=None): + BPMN.Flow.__init__(self, source, target, id=id, name=name, process=process) + + class MessageFlow(Flow): + def __init__(self, source, target, id="", name="", process=None): + BPMN.Flow.__init__(self, source, target, id=id, name=name, process=process) + + class Association(Flow): + def __init__(self, source, target, id="", name="", process=None): + BPMN.Flow.__init__(self, source, target, id=id, name=name, process=process) + + def __init__(self, process_id=None, name="", nodes=None, flows=None): + self.__process_id = str(uuid.uuid4()) if process_id == None else process_id + + self.__name = name + self.__graph = nx_utils.MultiDiGraph() + self.__nodes = set() if nodes is None else nodes + self.__flows = set() if flows is None else flows + self.__layout = BPMNLayout() + + if nodes is not None: + for node in nodes: + node.set_layout(self.get_layout()) + self.__graph.add_node(node) + if flows is not None: + for flow in flows: + flow.set_layout(self.get_layout()) + self.__graph.add_edge(flow.get_source(), flow.get_target()) + + def get_process_id(self): + return self.__process_id + + def set_process_id(self, process_id): + self.__process_id = process_id + + def get_nodes(self): + return self.__nodes + + def get_flows(self): + return self.__flows + + def get_graph(self): + return self.__graph + + def get_name(self): + return self.__name + + def set_name(self, name: str): + self.__name = name + + def add_node(self, node): + node.set_layout(self.get_layout()) + self.__nodes.add(node) + self.__graph.add_node(node) + + def remove_node(self, node): + if node in self.__nodes: + self.__nodes.remove(node) + self.__graph.remove_node(node) + + def remove_flow(self, flow): + source = flow.get_source() + target = flow.get_target() + if source in self.__nodes: + source.remove_out_arc(flow) + if target in self.__nodes: + target.remove_in_arc(flow) + self.__flows.remove(flow) + self.__graph.remove_edge(source, target) + + def add_flow(self, flow): + if not isinstance(flow, BPMN.Flow): + raise Exception() + flow.set_layout(self.get_layout()) + source = flow.get_source() + target = flow.get_target() + if source not in self.__nodes: + self.add_node(source) + if target not in self.__nodes: + self.add_node(target) + self.__flows.add(flow) + self.__graph.add_edge(source, target, id=flow.get_id(), name=flow.get_name()) + source.add_out_arc(flow) + target.add_in_arc(flow) + + def get_layout(self): + return self.__layout + + def set_layout(self, layout): + self.__layout = layout + for n in self.__nodes: + n.set_layout(layout) + for e in self.__flows: + e.set_layout(layout) diff --git a/pm4py/pm4py/objects/bpmn/semantics.py b/pm4py/pm4py/objects/bpmn/semantics.py new file mode 100644 index 0000000000000000000000000000000000000000..0a42086eea492e269fd9483b12e4ad59928ace8f --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/semantics.py @@ -0,0 +1,217 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +from pm4py.objects.bpmn.util.bpmn_utils import * +from pm4py.objects.bpmn.obj import BPMN +from itertools import combinations, chain +import operator + + +def is_enabled(node, bpmn, m): + if node not in bpmn.get_nodes(): + return False + elif isinstance(node, ( + BPMN.ParallelGateway, + BPMN.InclusiveGateway)) and node.get_gateway_direction() == BPMN.Gateway.Direction.CONVERGING: + if m[node] < len(node.get_in_arcs()): + return False + else: + if m[node] < 1: + return False + return True + + +def execute(node, bpmn, m): + if not is_enabled(node, bpmn, m): + return None + + return weak_execute(node, m) + + +def try_to_execute(node, bpmn, m): + if not is_enabled(node, bpmn, m): + return None + else: + return execute(node, bpmn, m) + + +def add_vector(a, b): + return list(map(operator.add, a, b)) + + +def sub_vector(a, b): + return list(map(operator.sub, a, b)) + + +def power_set(iterable, min=1): + s = list(iterable) + return chain.from_iterable(combinations(s, r) for r in range(min, len(s) + 1)) + + +def weak_execute(node, m, bpmn_graph): + """ + Execute a transition even if it is not fully enabled + Returns multiple possible markings if the node is a gate + """ + + # this first if is a workaround. env events inside subprocesses will be handled explicitly + # tokens flow out to the first element outside the subprocess. the activated boundary events become deactivated + if isinstance(node, + (BPMN.NormalEndEvent, BPMN.TerminateEndEvent)) and node.get_process() != bpmn_graph.get_process_id(): + m_out = copy.copy(m) + # reset marking at current node + del m_out[node] + + sub_process_node = get_node_by_id(node.get_process(), bpmn_graph) + + # delete markings inside subprocess and from other enabled message transitions + for key in get_all_nodes_inside_process(node.get_process(), bpmn_graph): + if key in m_out: + del m_out[key] + for key in get_boundary_events_of_activity(node.get_process(), bpmn_graph): + if key in m_out and key != node: + del m_out[key] + + # add marking at outgoing flow + if len(sub_process_node.get_out_arcs()) > 0: + target_node = sub_process_node.get_out_arcs()[0].target + execute_token_flow(target_node, m_out, bpmn_graph) + + return [m_out] + + elif isinstance(node, (BPMN.Event, BPMN.Activity)) or ( + isinstance(node, BPMN.Gateway) and node.get_gateway_direction() == BPMN.Gateway.Direction.CONVERGING): + m_out = copy.copy(m) + # reset marking at current node + del m_out[node] + + # add marking at outgoing flow + if len(node.get_out_arcs()) > 0: + target_node = node.get_out_arcs()[0].target + execute_token_flow(target_node, m_out, bpmn_graph) + + # external subprocess cancellation + if isinstance(node, BPMN.MessageBoundaryEvent): + # delete markings inside subprocess and from other enabled message transitions + for key in get_all_nodes_inside_process(node.get_activity(), bpmn_graph): + if key in m_out: + del m_out[key] + for key in get_boundary_events_of_activity(node.get_activity(), bpmn_graph): + if key in m_out and key != node: + del m_out[key] + + return [m_out] + + elif isinstance(node, BPMN.Gateway): + m_outs = [] + if node.get_gateway_direction() == BPMN.Gateway.Direction.DIVERGING: + if isinstance(node, BPMN.ParallelGateway): + m_out = copy.copy(m) + del m_out[node] + for out_flow in node.get_out_arcs(): + execute_token_flow(out_flow.target, m_out, bpmn_graph) + m_outs.append(m_out) + elif isinstance(node, BPMN.ExclusiveGateway): + for out_flow in node.get_out_arcs(): + m_out = copy.copy(m) + del m_out[node] + execute_token_flow(out_flow.target, m_out, bpmn_graph) + m_outs.append(m_out) + elif isinstance(node, BPMN.InclusiveGateway): + for out_flows in power_set(node.get_out_arcs()): + for out_flow in out_flows: + m_out = copy.copy(m) + del m_out[node] + execute_token_flow(out_flow.target, m_out, bpmn_graph) + m_outs.append(m_out) + return m_outs + + +def execute_token_flow(target, marking, bpmn_graph): + # next node is a subprocess --> add tokens in its start events + if isinstance(target, BPMN.SubProcess): + start_events = get_start_events_of_subprocess(target.get_id(), bpmn_graph) + for start_event in start_events: + marking[start_event] += 1 + # handle external boundary events + for boundary_event in get_external_boundary_events_of_activity(target.get_id(), bpmn_graph): + marking[boundary_event] += 1 + elif isinstance(target, BPMN.EndEvent): + # end event globally + if target.get_process() == bpmn_graph.get_process_id(): + if isinstance(target, BPMN.TerminateEndEvent): + keys_to_delete = [key for key in marking if key != target] + for key in keys_to_delete: + del marking[key] + marking[target] += 1 + # end event is inside subprocess + else: + sub_process_node = get_node_by_id(target.get_process(), bpmn_graph) + # end event is connected to boundary transition + for boundary_event in get_boundary_events_of_activity(sub_process_node.get_id(), bpmn_graph): + if boundary_event.name == target.name: # TODO: also type of event could be checked, e.g. error end and boundary event + # add token to boundary event + marking[boundary_event] += 1 + # reset all tokens inside subprocess and on other boundary events + for key in get_all_nodes_inside_process(target.get_process(), bpmn_graph): + if key in marking: + del marking[key] + for key in get_boundary_events_of_activity(sub_process_node.get_id(), bpmn_graph): + if key in marking and key != boundary_event: + del marking[key] + return + # internal subprocess termination event + if isinstance(target, BPMN.TerminateEndEvent): + keys_to_delete = [key for key in marking if key != target and \ + key in get_all_nodes_inside_process(target.get_process(), + bpmn_graph) + get_boundary_events_of_activity( + sub_process_node.get_id(), bpmn_graph)] + for key in keys_to_delete: + del marking[key] + # add marking at outgoing flow + if len(sub_process_node.get_out_arcs()) > 0: + target_node = sub_process_node.get_out_arcs()[0].target + execute_token_flow(target_node, marking, bpmn_graph) + return + marking[ + target] += 1 # instead add token to end event, workaround to make sure that you can fire a message event even after the last event inside subprocess + # just normal token flow to next node + else: + marking[target] += 1 + + +def enabled_nodes(bpmn, m): + """ + Returns a set of enabled transitions in a Petri net and given marking + + Parameters + ---------- + :param pn: Petri net + :param m: marking of the pn + + Returns + ------- + :return: set of enabled transitions + """ + enabled = set() + for node in bpmn.get_nodes(): + if is_enabled(node, bpmn, m): + enabled.add(node) + if isinstance(node, + BPMN.EndEvent) and node.get_process() == bpmn.get_process_id(): # if there is a token in an end event, we are done and there is no enabled node anymore + return set() + return enabled diff --git a/pm4py/pm4py/objects/bpmn/util/__init__.py b/pm4py/pm4py/objects/bpmn/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e3ee77774a191f135e1e34e036992303ba819634 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.bpmn.util import reduction, sorting, bpmn_utils diff --git a/pm4py/pm4py/objects/bpmn/util/bpmn_utils.py b/pm4py/pm4py/objects/bpmn/util/bpmn_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..f15bfd57f872c1c7532f5a0fa9000ecf2eba6f26 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/util/bpmn_utils.py @@ -0,0 +1,172 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.bpmn.obj import BPMN, Marking + + +def get_node_by_id(id, bpmn_graph): + """ + Returns the node with specified id + + Parameters + ------------ + id + id string + bpmn_graph + BPMN graph + + Returns + ------------ + node that matches the id + """ + for node in bpmn_graph.get_nodes(): + if node.get_id() == id: + return node + return None + + +def get_global_start_events(bpmn_graph): + start_events = [] + for node in bpmn_graph.get_nodes(): + if isinstance(node, BPMN.StartEvent): + if node.get_process() == bpmn_graph.get_process_id(): + start_events.append(node) + return start_events + + +def get_initial_marking(bpmn_graph): + m = Marking() + for event in get_global_start_events(bpmn_graph): + m[event] = 1 + return m + + +def get_boundary_events_of_activity(activity_id, bpmn_graph): + boundary_events = [] + for node in bpmn_graph.get_nodes(): + if isinstance(node, BPMN.BoundaryEvent): + node_activity_id = node.get_activity() + if node_activity_id == activity_id: + boundary_events.append(node) + return boundary_events + + +def get_external_boundary_events_of_activity(activity_id, bpmn_graph): + boundary_events = [] + for node in bpmn_graph.get_nodes(): + if isinstance(node, BPMN.MessageBoundaryEvent): + node_activity_id = node.get_activity() + if node_activity_id == activity_id: + boundary_events.append(node) + return boundary_events + + +# TODO: Include nodes that are in deeper level, too +def get_all_nodes_inside_process(process_id, bpmn_graph, deep=True): + nodes = [] + for node in bpmn_graph.get_nodes(): + if deep: + if process_id in get_processes_deep(node, bpmn_graph): + nodes.append(node) + else: + if node.get_process() == process_id: + nodes.append(node) + return nodes + + +# return the direct children of a subprocess +def get_all_direct_child_subprocesses(process_id, bpmn_graph, include_normal=False): + nodes = set() + for node in bpmn_graph.get_nodes(): + if isinstance(node, BPMN.SubProcess) and node.get_process() == process_id: + if not include_normal: + boundary_events = get_boundary_events_of_activity(node.get_id(), bpmn_graph) + # termination events inside subprocess + termination_events = get_termination_events_of_subprocess_for_pnet(node.get_id(), bpmn_graph) + if len(boundary_events) > 0 or len(termination_events) > 0: + nodes.add(node) + else: + nodes.add(node) + return nodes + + +# return the direct and indirect children of a subprocess +def get_all_child_subprocesses(process_id, bpmn_graph, include_normal=False): + sub_processes = set() + for child in get_all_direct_child_subprocesses(process_id, bpmn_graph, include_normal): + sub_processes.add(child) + sub_processes = sub_processes.union(get_all_child_subprocesses(child.get_id(), bpmn_graph, include_normal)) + return sub_processes + + +def get_processes_deep(node, bpmn_graph): + if node.get_process() == bpmn_graph.get_process_id(): + return [bpmn_graph.get_process_id()] + else: + return [node.get_process()] + get_processes_deep(get_node_by_id(node.get_process(), bpmn_graph), bpmn_graph) + + +def get_subprocesses_sorted_by_depth(bpmn_graph): + return sorted([node for node in bpmn_graph.get_nodes() if isinstance(node, BPMN.SubProcess)], + key=lambda x: x.get_depth(), reverse=True) + + +def get_termination_events_of_subprocess(activity_id, bpmn_graph): + events = [] + for node in bpmn_graph.get_nodes(): + if node.get_process() == activity_id and isinstance(node, BPMN.TerminateEndEvent): + events.append(node) + return events + + +def get_termination_events_of_subprocess_for_pnet(activity_id, bpmn_graph): + events = [] + for node in bpmn_graph.get_nodes(): + if node.get_process() == activity_id and isinstance(node, + (BPMN.IntermediateCatchEvent, BPMN.IntermediateThrowEvent)): + cond = False + for boundary_event in get_boundary_events_of_activity(activity_id, bpmn_graph): + if boundary_event.get_name() == node.get_name(): + cond = True + if not cond: + events.append(node) + return events + + +def get_start_events_of_subprocess(activity_id, bpmn_graph): + events = [] + for node in bpmn_graph.get_nodes(): + if node.get_process() == activity_id and isinstance(node, BPMN.StartEvent): + events.append(node) + return events + + +def get_end_events_of_subprocess(activity_id, bpmn_graph): + events = [] + for node in bpmn_graph.get_nodes(): + if node.get_process() == activity_id and isinstance(node, BPMN.EndEvent): + events.append(node) + return events + + +def bpmn_graph_end_events_as_throw_events(bpmn_graph): + events = [] + for node in bpmn_graph.get_nodes(): + # subprocess end event + if node.get_process() != bpmn_graph.get_process_id() and isinstance(node, BPMN.EndEvent) and not isinstance( + node, BPMN.NormalEndEvent): + events.append(node) + return events diff --git a/pm4py/pm4py/objects/bpmn/util/reduction.py b/pm4py/pm4py/objects/bpmn/util/reduction.py new file mode 100644 index 0000000000000000000000000000000000000000..edbe49ad8e80b45d9a50b2370a0f84c0fa041fb1 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/util/reduction.py @@ -0,0 +1,103 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.bpmn.obj import BPMN + + +def reduce_xor_gateways(bpmn_graph, parameters=None): + """ + Reduces the number of XOR gateways in the diagram + + Parameters + ------------ + bpmn_graph + BPMN graph + parameters + Parameters + + Returns + ------------ + bpmn_graph + (possibly reduced) BPMN graph + """ + if parameters is None: + parameters = {} + + changed = True + while changed: + changed = False + outgoing_edges = None + incoming_edges = None + outgoing_edges = {} + incoming_edges = {} + + for flow in bpmn_graph.get_flows(): + source = flow.get_source() + target = flow.get_target() + + if source not in outgoing_edges: + outgoing_edges[source] = set() + outgoing_edges[source].add(flow) + + if target not in incoming_edges: + incoming_edges[target] = set() + incoming_edges[target].add(flow) + + nodes = list(bpmn_graph.get_nodes()) + for node in nodes: + if isinstance(node, BPMN.ExclusiveGateway): + if node in outgoing_edges and node in incoming_edges and len(outgoing_edges[node]) == 1 and len( + incoming_edges[node]) == 1: + changed = True + source_node = None + target_node = None + for flow in incoming_edges[node]: + source_node = flow.get_source() + if flow in bpmn_graph.get_flows(): + bpmn_graph.remove_flow(flow) + for flow in outgoing_edges[node]: + target_node = flow.get_target() + if flow in bpmn_graph.get_flows(): + bpmn_graph.remove_flow(flow) + if node in bpmn_graph.get_nodes(): + bpmn_graph.remove_node(node) + bpmn_graph.add_flow(BPMN.SequenceFlow(source_node, target_node)) + break + + return bpmn_graph + + +def apply(bpmn_graph, parameters=None): + """ + Reduce the complexity of a BPMN graph by removing useless elements + + Parameters + ------------ + bpmn_graph + BPMN graph + parameters + Parameters + + Returns + ------------ + bpmn_graph + (possibly reduced) BPMN graph + """ + if parameters is None: + parameters = {} + + bpmn_graph = reduce_xor_gateways(bpmn_graph, parameters=parameters) + return bpmn_graph diff --git a/pm4py/pm4py/objects/bpmn/util/sorting.py b/pm4py/pm4py/objects/bpmn/util/sorting.py new file mode 100644 index 0000000000000000000000000000000000000000..3d1dc368c1230ce5ac288693396566784e303da9 --- /dev/null +++ b/pm4py/pm4py/objects/bpmn/util/sorting.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Iterable, List, Tuple +from pm4py.objects.bpmn.obj import BPMN + +def bfs_bpmn(nodes: Iterable[BPMN.Event], edges: Iterable[Tuple[BPMN.Event, BPMN.Event]]): + start_nodes: List[BPMN.Event] = [n for n in nodes if isinstance(n, BPMN.StartEvent)] + level = 0 + bfs = {n: level for n in start_nodes} + while True: + level += 1 + to_visit = list(e[1] for e in edges if e[0] in bfs and e[1] not in bfs and not isinstance(e[1], BPMN.EndEvent)) + if not to_visit: + break + for n in to_visit: + bfs[n] = level + other_nodes = [n for n in nodes if n not in bfs] + level += 1 + for n in other_nodes: + bfs[n] = level + return bfs + + +def get_sorted_nodes_edges(bpmn_graph: BPMN) -> Tuple[List[BPMN.Event], List[Tuple[BPMN.Event, BPMN.Event]]]: + """ + Assure an ordering as-constant-as-possible + + Parameters + -------------- + bpmn_graph + BPMN graph + + Returns + -------------- + nodes + List of nodes of the BPMN graph + edges + List of edges of the BPMN graph + """ + graph = bpmn_graph.get_graph() + graph_nodes: List[BPMN.Event] = list(graph.nodes(data=False)) + graph_edges: List[Tuple[BPMN.Event, BPMN.Event]] = list(graph.edges(data=False)) + bfs = bfs_bpmn(graph_nodes, graph_edges) + graph_nodes = sorted(graph_nodes, key=lambda x: bfs[x]) + graph_edges = sorted(graph_edges, key=lambda x: (bfs[x[0]], bfs[x[1]])) + return graph_nodes, graph_edges diff --git a/pm4py/pm4py/objects/conversion/__init__.py b/pm4py/pm4py/objects/conversion/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d8b1b1488f6ff81e3e6c1cb4b8e0b343110b8bb6 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion import bpmn, heuristics_net, process_tree, wf_net, log, dfg diff --git a/pm4py/pm4py/objects/conversion/bpmn/__init__.py b/pm4py/pm4py/objects/conversion/bpmn/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7b154e8dd3ae382ca4462f0de43898671d54881e --- /dev/null +++ b/pm4py/pm4py/objects/conversion/bpmn/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.bpmn import converter, variants diff --git a/pm4py/pm4py/objects/conversion/bpmn/converter.py b/pm4py/pm4py/objects/conversion/bpmn/converter.py new file mode 100644 index 0000000000000000000000000000000000000000..e25fb93054423dc7f1aa833849d9a7678d7986ba --- /dev/null +++ b/pm4py/pm4py/objects/conversion/bpmn/converter.py @@ -0,0 +1,34 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.conversion.bpmn.variants import to_petri_net +from pm4py.util import exec_utils + + +class Variants(Enum): + TO_PETRI_NET = to_petri_net + + +DEFAULT_VARIANT = Variants.TO_PETRI_NET + + +def apply(obj, variant=DEFAULT_VARIANT, parameters=None): + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(obj, parameters=parameters) diff --git a/pm4py/pm4py/objects/conversion/bpmn/variants/__init__.py b/pm4py/pm4py/objects/conversion/bpmn/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..878434c41697196f9fcf27101287dac92e688adb --- /dev/null +++ b/pm4py/pm4py/objects/conversion/bpmn/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.bpmn.variants import to_petri_net diff --git a/pm4py/pm4py/objects/conversion/bpmn/variants/to_petri_net.py b/pm4py/pm4py/objects/conversion/bpmn/variants/to_petri_net.py new file mode 100644 index 0000000000000000000000000000000000000000..be51bd487739e25f342e0f8812af5a44555919aa --- /dev/null +++ b/pm4py/pm4py/objects/conversion/bpmn/variants/to_petri_net.py @@ -0,0 +1,265 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import uuid +from enum import Enum + +from pm4py.objects.petri_net.utils import reduction +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.bpmn.obj import BPMN +from pm4py.objects.petri_net.utils.petri_utils import remove_place +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to +from pm4py.util import exec_utils, nx_utils + + +class Parameters(Enum): + USE_ID = "use_id" + ENABLE_REDUCTION = "enable_reduction" + RETURN_FLOW_TRANS_MAP = "return_flow_trans_map" + + +def build_digraph_from_petri_net(net): + """ + Builds a directed graph from a Petri net + (for the purpose to add invisibles between inclusive gateways) + + Parameters + ------------- + net + Petri net + + Returns + ------------- + digraph + Digraph + """ + graph = nx_utils.DiGraph() + for place in net.places: + graph.add_node(place.name) + for trans in net.transitions: + in_places = [x.source for x in list(trans.in_arcs)] + out_places = [x.target for x in list(trans.out_arcs)] + for pl1 in in_places: + for pl2 in out_places: + graph.add_edge(pl1.name, pl2.name) + return graph + + +def apply(bpmn_graph, parameters=None): + """ + Converts a BPMN graph to an accepting Petri net + + Parameters + -------------- + bpmn_graph + BPMN graph + parameters + Parameters of the algorithm: + - Parameters.USE_ID => (default: False) uses the IDs of the objects instead of their labels in the conversion + - Parameters.ENABLE_REDUCTION => reduces the invisible transitions + - Parameters.RETURN_FLOW_TRANS_MAP => returns additional information on the conversion: + (iv) the places of the obtained Petri net that are corresponding to each + BPMN flow. + (v) the transitions of the Petri net related to the nodes of the BPMN + diagram. + + Returns + -------------- + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + + from pm4py.objects.bpmn.obj import BPMN + + use_id = exec_utils.get_param_value(Parameters.USE_ID, parameters, False) + return_flow_trans_map = exec_utils.get_param_value(Parameters.RETURN_FLOW_TRANS_MAP, parameters, False) + enable_reduction = exec_utils.get_param_value(Parameters.ENABLE_REDUCTION, parameters, True) + + if return_flow_trans_map: + enable_reduction = False + + net = PetriNet("") + source_place = PetriNet.Place("source") + net.places.add(source_place) + sink_place = PetriNet.Place("sink") + net.places.add(sink_place) + im = Marking() + fm = Marking() + im[source_place] = 1 + fm[sink_place] = 1 + + # keep this correspondence for adding invisible transitions for OR-gateways + inclusive_gateway_exit = set() + inclusive_gateway_entry = set() + + flow_place = {} + source_count = {} + target_count = {} + for flow in bpmn_graph.get_flows(): + if isinstance(flow, BPMN.SequenceFlow): + source = flow.get_source() + target = flow.get_target() + place = PetriNet.Place(str(flow.get_id())) + net.places.add(place) + flow_place[flow] = place + if source not in source_count: + source_count[source] = 0 + if target not in target_count: + target_count[target] = 0 + source_count[source] = source_count[source] + 1 + target_count[target] = target_count[target] + 1 + + for flow in bpmn_graph.get_flows(): + if isinstance(flow, BPMN.SequenceFlow): + source = flow.get_source() + target = flow.get_target() + place = PetriNet.Place(str(flow.get_id())) + if isinstance(source, BPMN.InclusiveGateway) and source_count[source] > 1: + inclusive_gateway_exit.add(place.name) + elif isinstance(target, BPMN.InclusiveGateway) and target_count[target] > 1: + inclusive_gateway_entry.add(place.name) + + # remove possible places that are both in inclusive_gateway_exit and inclusive_gateway_entry, + # because we do not need to add invisibles in this situation + incl_gat_set_inters = inclusive_gateway_entry.intersection(inclusive_gateway_exit) + inclusive_gateway_exit = inclusive_gateway_exit.difference(incl_gat_set_inters) + inclusive_gateway_entry = inclusive_gateway_entry.difference(incl_gat_set_inters) + + nodes_entering = {} + nodes_exiting = {} + trans_map = {} + + for node in bpmn_graph.get_nodes(): + if isinstance(node, BPMN.Task) or isinstance(node, BPMN.StartEvent) or isinstance(node, BPMN.EndEvent) or \ + isinstance(node, BPMN.ExclusiveGateway) or isinstance(node, BPMN.ParallelGateway) or \ + isinstance(node, BPMN.InclusiveGateway): + if not node in source_count: + source_count[node] = 0 + if not node in target_count: + target_count[node] = 0 + + entry_place = PetriNet.Place("ent_" + str(node.get_id())) + net.places.add(entry_place) + exiting_place = PetriNet.Place("exi_" + str(node.get_id())) + net.places.add(exiting_place) + if use_id: + label = str(node.get_id()) + else: + label = str(node.get_name()) if isinstance(node, BPMN.Task) else None + if not label: + label = None + transition = PetriNet.Transition(name=str(node.get_id()), label=label) + net.transitions.add(transition) + trans_map[node] = [transition] + add_arc_from_to(entry_place, transition, net) + add_arc_from_to(transition, exiting_place, net) + + if isinstance(node, BPMN.ParallelGateway) or isinstance(node, BPMN.InclusiveGateway): + if source_count[node] > 1: + exiting_object = PetriNet.Transition(str(uuid.uuid4()), None) + net.transitions.add(exiting_object) + add_arc_from_to(exiting_place, exiting_object, net) + trans_map[node].append(exiting_object) + else: + exiting_object = exiting_place + + if target_count[node] > 1: + entering_object = PetriNet.Transition(str(uuid.uuid4()), None) + net.transitions.add(entering_object) + add_arc_from_to(entering_object, entry_place, net) + trans_map[node].append(entering_object) + else: + entering_object = entry_place + nodes_entering[node] = entering_object + nodes_exiting[node] = exiting_object + else: + nodes_entering[node] = entry_place + nodes_exiting[node] = exiting_place + + if isinstance(node, BPMN.StartEvent): + start_transition = PetriNet.Transition(str(uuid.uuid4()), None) + net.transitions.add(start_transition) + add_arc_from_to(source_place, start_transition, net) + add_arc_from_to(start_transition, entry_place, net) + trans_map[node].append(start_transition) + elif isinstance(node, BPMN.EndEvent): + end_transition = PetriNet.Transition(str(uuid.uuid4()), None) + net.transitions.add(end_transition) + add_arc_from_to(exiting_place, end_transition, net) + add_arc_from_to(end_transition, sink_place, net) + trans_map[node].append(end_transition) + + for flow in bpmn_graph.get_flows(): + if isinstance(flow, BPMN.SequenceFlow): + if flow.get_source() in nodes_exiting and flow.get_target() in nodes_entering: + source_object = nodes_exiting[flow.get_source()] + target_object = nodes_entering[flow.get_target()] + + if isinstance(source_object, PetriNet.Place): + inv1 = PetriNet.Transition(f"sfl_{flow.get_id()}", None) + net.transitions.add(inv1) + add_arc_from_to(source_object, inv1, net) + source_object = inv1 + trans_map[flow.source].append(inv1) + + if isinstance(target_object, PetriNet.Place): + inv2 = PetriNet.Transition(f"tfl_{flow.get_id()}", None) + net.transitions.add(inv2) + add_arc_from_to(inv2, target_object, net) + target_object = inv2 + trans_map[flow.target].append(inv2) + + add_arc_from_to(source_object, flow_place[flow], net) + add_arc_from_to(flow_place[flow], target_object, net) + + if inclusive_gateway_exit and inclusive_gateway_entry: + # do the following steps if there are inclusive gateways: + # - calculate the shortest paths + # - add an invisible transition between couples of corresponding places + # this ensures soundness and the correct translation of the BPMN + inv_places = {x.name: x for x in net.places} + digraph = build_digraph_from_petri_net(net) + all_shortest_paths = dict(nx_utils.all_pairs_dijkstra(digraph)) + keys = list(all_shortest_paths.keys()) + + for pl1 in inclusive_gateway_exit: + if pl1 in keys: + output_places = sorted( + [(x, len(y)) for x, y in all_shortest_paths[pl1][1].items() if x in inclusive_gateway_entry], + key=lambda x: x[1]) + if output_places: + inv_trans = PetriNet.Transition(str(uuid.uuid4()), None) + net.transitions.add(inv_trans) + add_arc_from_to(inv_places[pl1], inv_trans, net) + add_arc_from_to(inv_trans, inv_places[output_places[0][0]], net) + + if enable_reduction: + reduction.apply_simple_reduction(net) + + for place in list(net.places): + if len(place.in_arcs) == 0 and len(place.out_arcs) == 0 and not place in im and not place in fm: + remove_place(net, place) + + if return_flow_trans_map: + return net, im, fm, flow_place, trans_map + + return net, im, fm diff --git a/pm4py/pm4py/objects/conversion/dfg/__init__.py b/pm4py/pm4py/objects/conversion/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3499edfc8d60f923b8cd038070e56c6a0d7c68da --- /dev/null +++ b/pm4py/pm4py/objects/conversion/dfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.dfg import converter, variants diff --git a/pm4py/pm4py/objects/conversion/dfg/converter.py b/pm4py/pm4py/objects/conversion/dfg/converter.py new file mode 100644 index 0000000000000000000000000000000000000000..cd8dc81f8598cfe943c12477bae4271baf87dd17 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/dfg/converter.py @@ -0,0 +1,31 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.dfg.variants import to_petri_net_activity_defines_place, to_petri_net_invisibles_no_duplicates +from enum import Enum +from pm4py.util import exec_utils + + +class Variants(Enum): + VERSION_TO_PETRI_NET_ACTIVITY_DEFINES_PLACE = to_petri_net_activity_defines_place + VERSION_TO_PETRI_NET_INVISIBLES_NO_DUPLICATES = to_petri_net_invisibles_no_duplicates + + +DEFAULT_VARIANT = Variants.VERSION_TO_PETRI_NET_ACTIVITY_DEFINES_PLACE + + +def apply(dfg, parameters=None, variant=DEFAULT_VARIANT): + return exec_utils.get_variant(variant).apply(dfg, parameters=parameters) diff --git a/pm4py/pm4py/objects/conversion/dfg/variants/__init__.py b/pm4py/pm4py/objects/conversion/dfg/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4c0c45cb4c2ddab9a020d27ef5a6a0355a6bd518 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/dfg/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.dfg.variants import to_petri_net_activity_defines_place, to_petri_net_invisibles_no_duplicates diff --git a/pm4py/pm4py/objects/conversion/dfg/variants/to_petri_net_activity_defines_place.py b/pm4py/pm4py/objects/conversion/dfg/variants/to_petri_net_activity_defines_place.py new file mode 100644 index 0000000000000000000000000000000000000000..9b3d699cf9d1179a3356f05fb95a265a4ba4956d --- /dev/null +++ b/pm4py/pm4py/objects/conversion/dfg/variants/to_petri_net_activity_defines_place.py @@ -0,0 +1,100 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.dfg.utils import dfg_utils +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils import petri_utils as pn_util +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + START_ACTIVITIES = 'start_activities' + END_ACTIVITIES = 'end_activities' + + +PARAM_KEY_START_ACTIVITIES = Parameters.START_ACTIVITIES +PARAM_KEY_END_ACTIVITIES = Parameters.END_ACTIVITIES + + +def apply(dfg, parameters=None): + """ + Applies the DFG mining on a given object (if it is a Pandas dataframe or a log, the DFG is calculated) + + Parameters + ------------- + dfg + Object (DFG) (if it is a Pandas dataframe or a log, the DFG is calculated) + parameters + Parameters + """ + if parameters is None: + parameters = {} + + dfg = dfg + start_activities = exec_utils.get_param_value(Parameters.START_ACTIVITIES, parameters, + dfg_utils.infer_start_activities( + dfg)) + end_activities = exec_utils.get_param_value(Parameters.END_ACTIVITIES, parameters, + dfg_utils.infer_end_activities(dfg)) + activities = dfg_utils.get_activities_from_dfg(dfg) + + net = PetriNet("") + im = Marking() + fm = Marking() + + source = PetriNet.Place("source") + net.places.add(source) + im[source] = 1 + sink = PetriNet.Place("sink") + net.places.add(sink) + fm[sink] = 1 + + places_corr = {} + index = 0 + + for act in activities: + places_corr[act] = PetriNet.Place(act) + net.places.add(places_corr[act]) + + for act in start_activities: + if act in places_corr: + index = index + 1 + trans = PetriNet.Transition(act + "_" + str(index), act) + net.transitions.add(trans) + pn_util.add_arc_from_to(source, trans, net) + pn_util.add_arc_from_to(trans, places_corr[act], net) + + for act in end_activities: + if act in places_corr: + index = index + 1 + inv_trans = PetriNet.Transition(act + "_" + str(index), None) + net.transitions.add(inv_trans) + pn_util.add_arc_from_to(places_corr[act], inv_trans, net) + pn_util.add_arc_from_to(inv_trans, sink, net) + + for el in dfg.keys(): + act1 = el[0] + act2 = el[1] + + index = index + 1 + trans = PetriNet.Transition(act2 + "_" + str(index), act2) + net.transitions.add(trans) + + pn_util.add_arc_from_to(places_corr[act1], trans, net) + pn_util.add_arc_from_to(trans, places_corr[act2], net) + + return net, im, fm diff --git a/pm4py/pm4py/objects/conversion/dfg/variants/to_petri_net_invisibles_no_duplicates.py b/pm4py/pm4py/objects/conversion/dfg/variants/to_petri_net_invisibles_no_duplicates.py new file mode 100644 index 0000000000000000000000000000000000000000..e47a29a516410b56ee71351c4e6d828a285d5344 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/dfg/variants/to_petri_net_invisibles_no_duplicates.py @@ -0,0 +1,101 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import copy +from enum import Enum +from typing import Optional, Dict, Any, Tuple + +from pm4py.objects.dfg.utils import dfg_utils +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils import petri_utils +from pm4py.util import exec_utils, constants + + +class Parameters(Enum): + START_ACTIVITIES = 'start_activities' + END_ACTIVITIES = 'end_activities' + PARAM_ARTIFICIAL_START_ACTIVITY = constants.PARAM_ARTIFICIAL_START_ACTIVITY + PARAM_ARTIFICIAL_END_ACTIVITY = constants.PARAM_ARTIFICIAL_END_ACTIVITY + + +def apply(dfg: Dict[Tuple[str, str], int], parameters: Optional[Dict[Any, Any]] = None): + """ + Applies the DFG mining on a given object (if it is a Pandas dataframe or a log, the DFG is calculated) + + Parameters + ------------- + dfg + Object (DFG) (if it is a Pandas dataframe or a log, the DFG is calculated) + parameters + Parameters: + - Parameters.START_ACTIVITIES: the start activities of the DFG + - Parameters.END_ACTIVITIES: the end activities of the DFG + + Returns + ------------- + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + + start_activities = exec_utils.get_param_value(Parameters.START_ACTIVITIES, parameters, + {x: 1 for x in dfg_utils.infer_start_activities( + dfg)}) + end_activities = exec_utils.get_param_value(Parameters.END_ACTIVITIES, parameters, + {x: 1 for x in dfg_utils.infer_end_activities(dfg)}) + artificial_start_activity = exec_utils.get_param_value(Parameters.PARAM_ARTIFICIAL_START_ACTIVITY, parameters, constants.DEFAULT_ARTIFICIAL_START_ACTIVITY) + artificial_end_activity = exec_utils.get_param_value(Parameters.PARAM_ARTIFICIAL_END_ACTIVITY, parameters, constants.DEFAULT_ARTIFICIAL_END_ACTIVITY) + + enriched_dfg = copy(dfg) + for act in start_activities: + enriched_dfg[(artificial_start_activity, act)] = start_activities[act] + for act in end_activities: + enriched_dfg[(act, artificial_end_activity)] = end_activities[act] + activities = set(x[1] for x in enriched_dfg).union(set(x[0] for x in enriched_dfg)) + net = PetriNet("") + im = Marking() + fm = Marking() + left_places = {} + transes = {} + right_places = {} + for act in activities: + pl1 = PetriNet.Place("source_" + act) + pl2 = PetriNet.Place("sink_" + act) + trans = PetriNet.Transition("trans_" + act, act) + if act in [artificial_start_activity, artificial_end_activity]: + trans.label = None + net.places.add(pl1) + net.places.add(pl2) + net.transitions.add(trans) + petri_utils.add_arc_from_to(pl1, trans, net) + petri_utils.add_arc_from_to(trans, pl2, net) + left_places[act] = pl1 + right_places[act] = pl2 + transes[act] = trans + for arc in enriched_dfg: + hidden = PetriNet.Transition(arc[0] + "_" + arc[1], None) + net.transitions.add(hidden) + petri_utils.add_arc_from_to(right_places[arc[0]], hidden, net) + petri_utils.add_arc_from_to(hidden, left_places[arc[1]], net) + im[left_places[artificial_start_activity]] = 1 + fm[right_places[artificial_end_activity]] = 1 + + return net, im, fm diff --git a/pm4py/pm4py/objects/conversion/heuristics_net/__init__.py b/pm4py/pm4py/objects/conversion/heuristics_net/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c2fa1f5c0bc71a755c6e805f280dea45ff2b501f --- /dev/null +++ b/pm4py/pm4py/objects/conversion/heuristics_net/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.heuristics_net import converter, variants diff --git a/pm4py/pm4py/objects/conversion/heuristics_net/converter.py b/pm4py/pm4py/objects/conversion/heuristics_net/converter.py new file mode 100644 index 0000000000000000000000000000000000000000..7ebdaac1c63758c53f1b9f1fe67ef2ec10d70256 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/heuristics_net/converter.py @@ -0,0 +1,40 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.heuristics_net.variants import to_petri_net +from enum import Enum +from pm4py.util import exec_utils + + +class Variants(Enum): + TO_PETRI_NET = to_petri_net + + +def apply(heu_net, parameters=None, variant=Variants.TO_PETRI_NET): + """ + Converts an Heuristics Net to a different type of object + + Parameters + -------------- + heu_net + Heuristics net + parameters + Possible parameters of the algorithm + variant + Variant of the algorithm: + - Variants.TO_PETRI_NET + """ + return exec_utils.get_variant(variant).apply(heu_net, parameters=parameters) diff --git a/pm4py/pm4py/objects/conversion/heuristics_net/variants/__init__.py b/pm4py/pm4py/objects/conversion/heuristics_net/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d1edafb0071ed49e868318caea9ffa8c5c624fab --- /dev/null +++ b/pm4py/pm4py/objects/conversion/heuristics_net/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.heuristics_net.variants import to_petri_net diff --git a/pm4py/pm4py/objects/conversion/heuristics_net/variants/to_petri_net.py b/pm4py/pm4py/objects/conversion/heuristics_net/variants/to_petri_net.py new file mode 100644 index 0000000000000000000000000000000000000000..432ae48c6eb2f3253957022982b0a010401e3c38 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/heuristics_net/variants/to_petri_net.py @@ -0,0 +1,255 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to, remove_transition +from pm4py.util import nx_utils + + +def remove_rendundant_invisible_transitions(net): + """ + Remove redundant transitions from Petri net + + Parameters + ----------- + net + Petri net + + Returns + ----------- + net + Cleaned net + """ + trans = [x for x in list(net.transitions) if not x.label] + i = 0 + while i < len(trans): + if trans[i] in net.transitions: + preset_i = set(x.source for x in trans[i].in_arcs) + postset_i = set(x.target for x in trans[i].out_arcs) + j = 0 + while j < len(trans): + if not j == i: + preset_j = set(x.source for x in trans[j].in_arcs) + postset_j = set(x.target for x in trans[j].out_arcs) + if len(preset_j) == len(preset_i) and len(postset_j) < len(postset_i): + if len(preset_j.intersection(preset_i)) == len(preset_j) and len( + postset_j.intersection(postset_i)) == len(postset_j): + remove_transition(net, trans[j]) + del trans[j] + continue + j = j + 1 + i = i + 1 + return net + + +def find_bindings(and_measures): + """ + Find the bindings given the AND measures + + Parameters + ------------- + and_measures + AND measures + + Returns + ------------- + bindings + Bindings + """ + G = nx_utils.Graph() + allocated_nodes = set() + for n1 in list(and_measures.keys()): + if n1 not in allocated_nodes: + allocated_nodes.add(n1) + G.add_node(n1) + for n2 in list(and_measures[n1].keys()): + if n2 not in allocated_nodes: + allocated_nodes.add(n2) + G.add_node(n1) + G.add_edge(n1, n2) + ret = list(nx_utils.find_cliques(G)) + return ret + + +def apply(heu_net, parameters=None): + """ + Converts an Heuristics Net to a Petri net + + Parameters + -------------- + heu_net + Heuristics net + parameters + Possible parameters of the algorithm + + Returns + -------------- + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + net = PetriNet("") + im = Marking() + fm = Marking() + source_places = [] + sink_places = [] + hid_trans_count = 0 + for index, sa_list in enumerate(heu_net.start_activities): + source = PetriNet.Place("source" + str(index)) + source_places.append(source) + net.places.add(source) + im[source] = 1 + for index, ea_list in enumerate(heu_net.end_activities): + sink = PetriNet.Place("sink" + str(index)) + sink_places.append(sink) + net.places.add(sink) + fm[sink] = 1 + act_trans = {} + who_is_entering = {} + who_is_exiting = {} + for act1_name in heu_net.nodes: + act1 = heu_net.nodes[act1_name] + if act1_name not in act_trans: + act_trans[act1_name] = PetriNet.Transition(act1_name, act1_name) + net.transitions.add(act_trans[act1_name]) + who_is_entering[act1_name] = set() + who_is_exiting[act1_name] = set() + for index, sa_list in enumerate(heu_net.start_activities): + if act1_name in sa_list: + who_is_entering[act1_name].add((None, index)) + for index, ea_list in enumerate(heu_net.end_activities): + if act1_name in ea_list: + who_is_exiting[act1_name].add((None, index)) + for act2 in act1.output_connections: + act2_name = act2.node_name + if act2_name not in act_trans: + act_trans[act2_name] = PetriNet.Transition(act2_name, act2_name) + net.transitions.add(act_trans[act2_name]) + who_is_entering[act2_name] = set() + who_is_exiting[act2_name] = set() + for index, sa_list in enumerate(heu_net.start_activities): + if act2_name in sa_list: + who_is_entering[act2_name].add((None, index)) + for index, ea_list in enumerate(heu_net.end_activities): + if act2_name in ea_list: + who_is_exiting[act2_name].add((None, index)) + who_is_entering[act2_name].add((act1_name, None)) + who_is_exiting[act1_name].add((act2_name, None)) + places_entering = {} + for act1 in who_is_entering: + cliques = find_bindings(heu_net.nodes[act1].and_measures_in) + places_entering[act1] = {} + entering_activities = list(who_is_entering[act1]) + entering_activities_wo_source = sorted([x for x in entering_activities if x[0] is not None], key=lambda x: x[0]) + entering_activities_only_source = [x for x in entering_activities if x[0] is None] + if entering_activities_wo_source: + master_place = PetriNet.Place("pre_" + act1) + net.places.add(master_place) + add_arc_from_to(master_place, act_trans[act1], net) + if len(entering_activities) == 1: + places_entering[act1][entering_activities[0]] = master_place + else: + for index, act in enumerate(entering_activities_wo_source): + if act[0] in heu_net.nodes[act1].and_measures_in: + z = 0 + while z < len(cliques): + if act[0] in cliques[z]: + hid_trans_count = hid_trans_count + 1 + hid_trans = PetriNet.Transition("hid_" + str(hid_trans_count), None) + net.transitions.add(hid_trans) + add_arc_from_to(hid_trans, master_place, net) + for act2 in cliques[z]: + if (act2, None) not in places_entering[act1]: + s_place = PetriNet.Place("splace_in_" + act1 + "_" + act2 + "_" + str(index)) + net.places.add(s_place) + places_entering[act1][(act2, None)] = s_place + add_arc_from_to(places_entering[act1][(act2, None)], hid_trans, net) + del cliques[z] + continue + z = z + 1 + pass + elif act not in places_entering[act1]: + hid_trans_count = hid_trans_count + 1 + hid_trans = PetriNet.Transition("hid_" + str(hid_trans_count), None) + net.transitions.add(hid_trans) + add_arc_from_to(hid_trans, master_place, net) + if act not in places_entering[act1]: + s_place = PetriNet.Place("splace_in_" + act1 + "_" + str(index)) + net.places.add(s_place) + places_entering[act1][act] = s_place + add_arc_from_to(places_entering[act1][act], hid_trans, net) + for el in entering_activities_only_source: + if len(entering_activities) == 1: + add_arc_from_to(source_places[el[1]], act_trans[act1], net) + else: + hid_trans_count = hid_trans_count + 1 + hid_trans = PetriNet.Transition("hid_" + str(hid_trans_count), None) + net.transitions.add(hid_trans) + add_arc_from_to(source_places[el[1]], hid_trans, net) + add_arc_from_to(hid_trans, master_place, net) + for act1 in who_is_exiting: + cliques = find_bindings(heu_net.nodes[act1].and_measures_out) + exiting_activities = list(who_is_exiting[act1]) + exiting_activities_wo_sink = sorted([x for x in exiting_activities if x[0] is not None], key=lambda x: x[0]) + exiting_activities_only_sink = [x for x in exiting_activities if x[0] is None] + if exiting_activities_wo_sink: + if len(exiting_activities) == 1 and len(exiting_activities_wo_sink) == 1: + ex_act = exiting_activities_wo_sink[0] + if (act1, None) in places_entering[ex_act[0]]: + add_arc_from_to(act_trans[act1], places_entering[ex_act[0]][(act1, None)], net) + else: + int_place = PetriNet.Place("intplace_" + str(act1)) + net.places.add(int_place) + add_arc_from_to(act_trans[act1], int_place, net) + for ex_act in exiting_activities_wo_sink: + if (act1, None) in places_entering[ex_act[0]]: + if ex_act[0] in heu_net.nodes[act1].and_measures_out: + z = 0 + while z < len(cliques): + if ex_act[0] in cliques[z]: + hid_trans_count = hid_trans_count + 1 + hid_trans = PetriNet.Transition("hid_" + str(hid_trans_count), None) + net.transitions.add(hid_trans) + add_arc_from_to(int_place, hid_trans, net) + for act in cliques[z]: + add_arc_from_to(hid_trans, places_entering[act][(act1, None)], net) + del cliques[z] + continue + z = z + 1 + else: + hid_trans_count = hid_trans_count + 1 + hid_trans = PetriNet.Transition("hid_" + str(hid_trans_count), None) + net.transitions.add(hid_trans) + add_arc_from_to(int_place, hid_trans, net) + add_arc_from_to(hid_trans, places_entering[ex_act[0]][(act1, None)], net) + for el in exiting_activities_only_sink: + if len(exiting_activities) == 1: + add_arc_from_to(act_trans[act1], sink_places[el[1]], net) + else: + hid_trans_count = hid_trans_count + 1 + hid_trans = PetriNet.Transition("hid_" + str(hid_trans_count), None) + net.transitions.add(hid_trans) + add_arc_from_to(int_place, hid_trans, net) + add_arc_from_to(hid_trans, sink_places[el[1]], net) + net = remove_rendundant_invisible_transitions(net) + from pm4py.objects.petri_net.utils import reduction + reduction.apply_simple_reduction(net) + return net, im, fm diff --git a/pm4py/pm4py/objects/conversion/log/__init__.py b/pm4py/pm4py/objects/conversion/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c0b5675426b0a856a73728030988e0240288b82b --- /dev/null +++ b/pm4py/pm4py/objects/conversion/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.log import variants, converter, constants diff --git a/pm4py/pm4py/objects/conversion/log/constants.py b/pm4py/pm4py/objects/conversion/log/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..8b670065020dd85e6884b8b7f8e39956054e1836 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/log/constants.py @@ -0,0 +1,27 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +TO_TRACE_LOG = 'to_event_log' +TO_EVENT_LOG = 'to_event_log' +TO_EVENT_STREAM = 'to_event_stream' +TO_DATAFRAME = 'to_dataframe' +FROM_DATAFRAME = 'from_dataframe' + +DF_TO_EVENT_LOG_1V = 'df_to_event_log_1v' +DF_TO_EVENT_LOG_NV = 'df_to_event_log_nv' + +DEEPCOPY = "deepcopy" +STREAM_POSTPROCESSING = "stream_postprocessing" diff --git a/pm4py/pm4py/objects/conversion/log/converter.py b/pm4py/pm4py/objects/conversion/log/converter.py new file mode 100644 index 0000000000000000000000000000000000000000..21cf8ffed3ce06037a91b8f89b0189c9de503395 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/log/converter.py @@ -0,0 +1,37 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.conversion.log.variants import to_event_stream, to_event_log, to_data_frame, to_nx + + +class Variants(Enum): + TO_EVENT_LOG = to_event_log + TO_EVENT_STREAM = to_event_stream + TO_DATA_FRAME = to_data_frame + TO_NX = to_nx + + +TO_EVENT_LOG = Variants.TO_EVENT_LOG +TO_EVENT_STREAM = Variants.TO_EVENT_STREAM +TO_DATA_FRAME = Variants.TO_DATA_FRAME + + +def apply(log, parameters=None, variant=None): + if variant is None: + variant = Variants.TO_EVENT_LOG + return variant.value.apply(log, parameters=parameters) diff --git a/pm4py/pm4py/objects/conversion/log/variants/__init__.py b/pm4py/pm4py/objects/conversion/log/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..35a099e8de33d7668e5fa2b01c139d793ceafcc8 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/log/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.log.variants import to_data_frame, to_event_stream, to_event_log, df_to_event_log_1v, df_to_event_log_nv diff --git a/pm4py/pm4py/objects/conversion/log/variants/df_to_event_log_1v.py b/pm4py/pm4py/objects/conversion/log/variants/df_to_event_log_1v.py new file mode 100644 index 0000000000000000000000000000000000000000..0c98865ebe9ee6f0024e22df9062394d7ed93e2f --- /dev/null +++ b/pm4py/pm4py/objects/conversion/log/variants/df_to_event_log_1v.py @@ -0,0 +1,55 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.util import xes_constants as xes +from pm4py.util import constants as pm4_constants + + +def apply(df, parameters=None): + """ + Convert a dataframe into a log containing 1 case per variant (only control-flow + perspective is considered) + + Parameters + ------------- + df + Dataframe + parameters + Parameters of the algorithm + + Returns + ------------- + log + Event log + """ + from pm4py.statistics.traces.generic.pandas import case_statistics + + if parameters is None: + parameters = {} + variant_stats = case_statistics.get_variant_statistics(df, parameters=parameters) + activity_key = parameters[ + pm4_constants.PARAMETER_CONSTANT_ACTIVITY_KEY] if pm4_constants.PARAMETER_CONSTANT_ACTIVITY_KEY in parameters else xes.DEFAULT_NAME_KEY + log = EventLog() + for vd in variant_stats: + variant = vd['variant'] + trace = Trace() + for activity in variant: + event = Event() + event[activity_key] = activity + trace.append(event) + log.append(trace) + return log diff --git a/pm4py/pm4py/objects/conversion/log/variants/df_to_event_log_nv.py b/pm4py/pm4py/objects/conversion/log/variants/df_to_event_log_nv.py new file mode 100644 index 0000000000000000000000000000000000000000..86e527c0af068dd60c5709dea861273173e9e85f --- /dev/null +++ b/pm4py/pm4py/objects/conversion/log/variants/df_to_event_log_nv.py @@ -0,0 +1,73 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.util import xes_constants as xes +from pm4py.util import constants as pm4_constants + +RETURN_VARIANTS = 'return_variants' + + +def apply(df, parameters=None): + """ + Convert a dataframe into a log containing N case per variant (only control-flow + perspective is considered) + + Parameters + ------------- + df + Dataframe + parameters + Parameters of the algorithm + + Returns + ------------- + log + Event log + """ + from pm4py.statistics.traces.generic.pandas import case_statistics + + if parameters is None: + parameters = {} + + return_variants = parameters[RETURN_VARIANTS] if RETURN_VARIANTS in parameters else False + + case_glue = parameters[ + pm4_constants.PARAMETER_CONSTANT_CASEID_KEY] if pm4_constants.PARAMETER_CONSTANT_CASEID_KEY in parameters else pm4_constants.CASE_CONCEPT_NAME + activity_key = parameters[ + pm4_constants.PARAMETER_CONSTANT_ACTIVITY_KEY] if pm4_constants.PARAMETER_CONSTANT_ACTIVITY_KEY in parameters else xes.DEFAULT_NAME_KEY + + variant_stats = case_statistics.get_variant_statistics(df, parameters=parameters) + + log = EventLog() + all_variants_log = {} + for vd in variant_stats: + variant = vd['variant'] + variant_count = vd[case_glue] + trace = Trace() + for activity in variant: + event = Event() + event[activity_key] = activity + trace.append(event) + all_variants_log[vd['variant']] = [] + for i in range(variant_count): + log.append(trace) + all_variants_log[vd['variant']].append(len(log) - 1) + + if return_variants: + return log, all_variants_log + + return log diff --git a/pm4py/pm4py/objects/conversion/log/variants/to_data_frame.py b/pm4py/pm4py/objects/conversion/log/variants/to_data_frame.py new file mode 100644 index 0000000000000000000000000000000000000000..5e4ab90213cd8230060f3ab1c5d7862c681ae344 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/log/variants/to_data_frame.py @@ -0,0 +1,72 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.conversion.log.variants import to_event_stream +from pm4py.objects.log import obj as log_instance +from pm4py.objects.conversion.log import constants +from copy import copy +from pm4py.util import constants as pm4_constants +from pm4py.util import pandas_utils + + +class Parameters(Enum): + DEEP_COPY = constants.DEEPCOPY + STREAM_POST_PROCESSING = constants.STREAM_POSTPROCESSING + CASE_ATTRIBUTE_PREFIX = "case_attribute_prefix" + + +def apply(log, parameters=None): + """ + Converts a provided event log object into a Pandas dataframe. As a basis, an EventStream object is used. + In case an EventLog object is given, it is first converted to an EventStream object. + Within the conversion, the order is not changed, i.e., the order imposed by the iterator is used. + + Parameters + ----------- + + log :class:`pm4py.log.log.EventLog` + Event log object, can either be an EventLog object, EventStream Object or Pandas dataframe + + parameters :class:`dict` + Parameters of the algorithm (currently, this converter is parameter free) + + Returns + ----------- + df + Pandas dataframe + """ + import pandas as pd + + if parameters is None: + parameters = dict() + if pandas_utils.check_is_pandas_dataframe(log): + return log + + if type(log) is log_instance.EventLog: + new_parameters = copy(parameters) + new_parameters["deepcopy"] = False + log = to_event_stream.apply(log, parameters=new_parameters) + + transf_log = [dict(x) for x in log] + df = pandas_utils.instantiate_dataframe(transf_log) + + df.attrs = copy(log.properties) + if pm4_constants.PARAMETER_CONSTANT_CASEID_KEY in df.attrs: + del df.attrs[pm4_constants.PARAMETER_CONSTANT_CASEID_KEY] + + return df diff --git a/pm4py/pm4py/objects/conversion/log/variants/to_event_log.py b/pm4py/pm4py/objects/conversion/log/variants/to_event_log.py new file mode 100644 index 0000000000000000000000000000000000000000..8b201700cc00bb49fed7d50f09d4f90dcc753d81 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/log/variants/to_event_log.py @@ -0,0 +1,107 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import copy +from copy import deepcopy +from enum import Enum + +from pm4py.objects.conversion.log import constants +from pm4py.objects.conversion.log.variants import to_event_stream +from pm4py.objects.log import obj as log_instance +from pm4py.util import xes_constants as xes +from pm4py.util import exec_utils, constants as pmconstants, pandas_utils +import pandas as pd + + +class Parameters(Enum): + DEEP_COPY = constants.DEEPCOPY + STREAM_POST_PROCESSING = constants.STREAM_POSTPROCESSING + CASE_ATTRIBUTE_PREFIX = "case_attribute_prefix" + CASE_ID_KEY = pmconstants.PARAMETER_CONSTANT_CASEID_KEY + + +def apply(log, parameters=None): + if parameters is None: + parameters = {} + + if type(log) is log_instance.Trace or type(log) is log_instance.EventLog: + return log + + enable_deepcopy = exec_utils.get_param_value(Parameters.DEEP_COPY, parameters, False) + glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, pmconstants.CASE_CONCEPT_NAME) + case_pref = exec_utils.get_param_value(Parameters.CASE_ATTRIBUTE_PREFIX, parameters, + "case:") + + if pandas_utils.check_is_pandas_dataframe(log): + log = to_event_stream.apply(log, parameters=parameters) + + if isinstance(log, log_instance.EventStream) and (not isinstance(log, log_instance.EventLog)): + return __transform_event_stream_to_event_log(log, case_glue=glue, include_case_attributes=True, + case_attribute_prefix=case_pref, enable_deepcopy=enable_deepcopy) + + return log + + +def __transform_event_stream_to_event_log(log, case_glue=Parameters.CASE_ID_KEY.value, + include_case_attributes=True, + case_attribute_prefix=Parameters.CASE_ATTRIBUTE_PREFIX.value, + enable_deepcopy=False): + """ + Converts the event stream to an event log + + Parameters + ---------- + log: :class:`pm4py.log.log.EventLog` + An event stream + case_glue: + Case identifier. Default is 'case:concept:name' + include_case_attributes: + Default is True + case_attribute_prefix: + Default is 'case:' + enable_deepcopy + Enables deepcopy (avoid references between input and output objects) + + Returns + ------- + log : :class:`pm4py.log.log.EventLog` + An event log + """ + if enable_deepcopy: + log = deepcopy(log) + + traces = {} + for orig_event in log: + event = copy(orig_event) + glue = event[case_glue] + if glue not in traces: + trace_attr = {} + if include_case_attributes: + for k in event.keys(): + if k.startswith(case_attribute_prefix): + trace_attr[k.replace(case_attribute_prefix, '')] = event[k] + if xes.DEFAULT_TRACEID_KEY not in trace_attr: + trace_attr[xes.DEFAULT_TRACEID_KEY] = glue + traces[glue] = log_instance.Trace(attributes=trace_attr) + + if include_case_attributes: + for k in list(event.keys()): + if k.startswith(case_attribute_prefix): + del event[k] + + traces[glue].append(event) + return log_instance.EventLog(traces.values(), attributes=log.attributes, classifiers=log.classifiers, + omni_present=log.omni_present, extensions=log.extensions, properties=log.properties) diff --git a/pm4py/pm4py/objects/conversion/log/variants/to_event_stream.py b/pm4py/pm4py/objects/conversion/log/variants/to_event_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..ca075787860b8edbb343fedcb830f8dc30de1bef --- /dev/null +++ b/pm4py/pm4py/objects/conversion/log/variants/to_event_stream.py @@ -0,0 +1,289 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import math +from copy import deepcopy, copy +from enum import Enum + +from pm4py.objects.conversion.log import constants +from pm4py.objects.log import obj as log_instance +from pm4py.objects.log.obj import EventLog, Event, XESExtension +from pm4py.util import constants as pmutil +from pm4py.util import exec_utils, pandas_utils, xes_constants +import pandas as pd + + +class Parameters(Enum): + DEEP_COPY = constants.DEEPCOPY + STREAM_POST_PROCESSING = constants.STREAM_POSTPROCESSING + CASE_ATTRIBUTE_PREFIX = "case_attribute_prefix" + INCLUDE_CASE_ATTRIBUTES = "include_case_attributes" + COMPRESS = "compress" + EXTENSIONS = "extensions" + + +def __postprocess_stream(list_events): + """ + Postprocess the list of events of the stream in order to make sure + that there are no NaN/NaT values + + Parameters + ------------- + list_events + List of events + + Returns + ------------- + list_events + Postprocessed stream + """ + import pandas + + for event in list_events: + event_keys = list(event.keys()) + for k in event_keys: + typ_k = type(event[k]) + if typ_k is pandas._libs.tslibs.nattype.NaTType: + del event[k] + continue + elif (typ_k is float or typ_k is int) and math.isnan(event[k]): + del event[k] + continue + elif event[k] is None: + del event[k] + continue + return list_events + + +def __compress(list_events): + """ + Compress a list of events, + using one instantiation for the same key/value. + + Parameters + -------------- + list_events + List of events of the stream + + Returns + -------------- + :param list_events: + :return: + """ + compress_dict = {} + i = 0 + while i < len(list_events): + # create a new event where keys and values are compressed + comp_ev = {} + for k, v in list_events[i].items(): + # check if the key has already been instantiated. + # in that case, use the current instantiation. + if k not in compress_dict: + compress_dict[k] = k + else: + k = compress_dict[k] + # check if the value has already been instantiated. + # in that case, use the current instantiation + if v not in compress_dict: + compress_dict[v] = v + else: + v = compress_dict[v] + # saves the compressed keys and values in the dictionary + comp_ev[k] = v + list_events[i] = comp_ev + i = i + 1 + return list_events + + +def apply(log, parameters=None): + """ + Converts the event log to an event stream + + Parameters + ---------- + log: :class:`pm4py.log.log.EventLog` + An Event log + include_case_attributes: + Default is True + case_attribute_prefix: + Default is 'case:' + enable_deepcopy + Enables deepcopy (avoid references between input and output objects) + + Returns + ------- + log : :class:`pm4py.log.log.EventLog` + An Event stream + """ + if parameters is None: + parameters = {} + + stream_post_processing = exec_utils.get_param_value(Parameters.STREAM_POST_PROCESSING, parameters, False) + case_pref = exec_utils.get_param_value(Parameters.CASE_ATTRIBUTE_PREFIX, parameters, 'case:') + enable_deepcopy = exec_utils.get_param_value(Parameters.DEEP_COPY, parameters, True) + include_case_attributes = exec_utils.get_param_value(Parameters.INCLUDE_CASE_ATTRIBUTES, parameters, True) + compress = exec_utils.get_param_value(Parameters.COMPRESS, parameters, False) + extensions = exec_utils.get_param_value(Parameters.EXTENSIONS, parameters, None) + + if pandas_utils.check_is_pandas_dataframe(log): + return __transform_dataframe_to_event_stream(log, stream_post_processing=stream_post_processing, compress=compress, extensions=extensions) + + if isinstance(log, EventLog): + return __transform_event_log_to_event_stream(log, include_case_attributes=include_case_attributes, + case_attribute_prefix=case_pref, enable_deepcopy=enable_deepcopy) + + return log + + +def __detect_extensions(df): + extensions = set() + for col in df.columns: + for single_key in col.split(':'): + for ext in XESExtension: + if single_key == ext.prefix: + extensions.add(ext) + return extensions + + +def __transform_dataframe_to_event_stream(dataframe, stream_post_processing=False, compress=True, extensions=None): + """ + Transforms a dataframe to an event stream + + Parameters + ------------------ + dataframe + Pandas dataframe + stream_post_processing + Boolean value that enables the post processing to remove NaN / NaT values + compress + Compresses the stream in order to reduce the memory utilization after the conversion + extensions + Provided extensions (to be included in the log) + + Returns + ------------------ + stream + Event stream + """ + if extensions is None: + extensions = __detect_extensions(dataframe) + list_events = pandas_utils.to_dict_records(dataframe) + if stream_post_processing: + list_events = __postprocess_stream(list_events) + if compress: + list_events = __compress(list_events) + for i in range(len(list_events)): + list_events[i] = Event(list_events[i]) + if hasattr(dataframe, 'attrs'): + properties = copy(dataframe.attrs) + if pmutil.PARAMETER_CONSTANT_CASEID_KEY in properties: + del properties[pmutil.PARAMETER_CONSTANT_CASEID_KEY] + else: + properties = {} + stream = log_instance.EventStream(list_events, attributes={'origin': 'csv'}, properties=properties) + for ex in extensions: + stream.extensions[ex.name] = { + xes_constants.KEY_PREFIX: ex.prefix, + xes_constants.KEY_URI: ex.uri} + return stream + + +def __transform_dataframe_to_event_stream_new(dataframe, stream_post_processing=False, compress=False, extensions=None): + """ + Transforms a dataframe to an event stream + + Parameters + ------------------ + dataframe + Pandas dataframe + stream_post_processing + Boolean value that enables the post processing to remove NaN / NaT values + compress + Compresses the stream in order to reduce the memory utilization after the conversion + extensions + Provided extensions (to be included in the log) + + Returns + ------------------ + stream + Event stream + """ + if extensions is None: + extensions = __detect_extensions(dataframe) + columns_names = list(dataframe.columns) + columns_corr = [] + for c in columns_names: + columns_corr.append(dataframe[c].to_numpy()) + length = columns_corr[-1].size + list_events = [] + for i in range(length): + eve = {} + for j in range(len(columns_names)): + eve[columns_names[j]] = columns_corr[j][i] + list_events.append(eve) + if stream_post_processing: + list_events = __postprocess_stream(list_events) + if compress: + list_events = __compress(list_events) + for i in range(len(list_events)): + list_events[i] = Event(list_events[i]) + if hasattr(dataframe, 'attrs'): + properties = copy(dataframe.attrs) + if pmutil.PARAMETER_CONSTANT_CASEID_KEY in properties: + del properties[pmutil.PARAMETER_CONSTANT_CASEID_KEY] + else: + properties = {} + stream = log_instance.EventStream(list_events, attributes={'origin': 'csv'}, properties=properties) + for ex in extensions: + stream.extensions[ex.name] = { + xes_constants.KEY_PREFIX: ex.prefix, + xes_constants.KEY_URI: ex.uri} + return stream + + +def __transform_event_log_to_event_stream(log, include_case_attributes=True, + case_attribute_prefix=pmutil.CASE_ATTRIBUTE_PREFIX, enable_deepcopy=False): + """ + Converts the event log to an event stream + + Parameters + ---------- + log: :class:`pm4py.log.log.EventLog` + An Event log + include_case_attributes: + Default is True + case_attribute_prefix: + Default is 'case:' + enable_deepcopy + Enables deepcopy (avoid references between input and output objects) + + Returns + ------- + log : :class:`pm4py.log.log.EventLog` + An Event stream + """ + event_stream = log_instance.EventStream([], attributes=log.attributes, classifiers=log.classifiers, + omni_present=log.omni_present, extensions=log.extensions, properties=log.properties) + for index, trace in enumerate(log): + for event in trace: + new_event = deepcopy(event) if enable_deepcopy else event + if include_case_attributes: + for key, value in trace.attributes.items(): + new_event[case_attribute_prefix + key] = value + else: + new_event[pmutil.CASE_ATTRIBUTE_GLUE] = str(index) + event_stream.append(new_event) + return event_stream diff --git a/pm4py/pm4py/objects/conversion/log/variants/to_nx.py b/pm4py/pm4py/objects/conversion/log/variants/to_nx.py new file mode 100644 index 0000000000000000000000000000000000000000..3853af06d3ffa4db0f2edcd09af697ab419388c0 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/log/variants/to_nx.py @@ -0,0 +1,113 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Optional, Dict, Any, Union +from pm4py.util import exec_utils, nx_utils +from pm4py.objects.conversion.log.variants import to_event_log + + +class Parameters(Enum): + INCLUDE_DF = "include_df" + CASE_ID_ATTRIBUTE = "case_id_attribute" + OTHER_CASE_ATTRIBUTES_AS_NODES = "other_case_attributes_as_nodes" + EVENT_ATTRIBUTES_AS_NODES = "event_attributes_as_nodes" + + +def apply(log_obj: Union[EventLog, EventStream, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None): + """ + Converts an event log object to a NetworkX DiGraph object. + The nodes of the graph are the events, the cases (and possibly the attributes of the log). + The edges are: + - Connecting each event to the corresponding case (BELONGS_TO type) + - Connecting every event to the directly-following one (DF type, if enabled) + - Connecting every case/event to the given attribute values (ATTRIBUTE_EDGE type) + + Parameters + ---------------- + log_obj + Log object (EventLog, EventStream, Pandas dataframe) + parameters + Parameters of the conversion, including: + - Parameters.INCLUDE_DF => include the directly-follows graph relation in the graph + - Parameters.CASE_ID_ATTRIBUTE => specify which attribute at the case level should be considered the case ID + - Parameters.OTHER_CASE_ATTRIBUTES_AS_NODES => specify which attributes at the case level should be inserted in the graph as nodes (other than the caseID) (list, default empty) + - Parameters.EVENT_ATTRIBUTES_AS_NODES => specify which attributes at the event level should be inserted in the graph as nodes (list, default empty) + + Returns + ---------------- + nx_digraph + NetworkX DiGraph object + """ + if parameters is None: + parameters = {} + + include_df = exec_utils.get_param_value(Parameters.INCLUDE_DF, parameters, True) + case_id_attribute = exec_utils.get_param_value(Parameters.CASE_ID_ATTRIBUTE, parameters, "concept:name") + other_case_attributes_as_nodes = exec_utils.get_param_value(Parameters.OTHER_CASE_ATTRIBUTES_AS_NODES, parameters, None) + event_attributes_as_nodes = exec_utils.get_param_value(Parameters.EVENT_ATTRIBUTES_AS_NODES, parameters, None) + + parameters["stream_postprocessing"] = True + log_obj = to_event_log.apply(log_obj, parameters=parameters) + + if event_attributes_as_nodes is None: + event_attributes_as_nodes = [] + if other_case_attributes_as_nodes is None: + other_case_attributes_as_nodes = [] + + nx_digraph = nx_utils.DiGraph() + + for case in log_obj: + case_id = "CASE="+str(case.attributes[case_id_attribute]) + dct_case = {"type": "CASE"} + for att in case.attributes: + dct_case[att] = case.attributes[att] + nx_digraph.add_node(case_id, attr=dct_case) + + for index, event in enumerate(case): + dct_ev = {"type": "EVENT"} + for att in event: + dct_ev[att] = event[att] + + ev_id = "EVENT="+str(case.attributes[case_id_attribute])+"_"+str(index) + nx_digraph.add_node(ev_id, attr=dct_ev) + nx_digraph.add_edge(ev_id, case_id, attr={"type": "BELONGS_TO"}) + + for ev_att in event_attributes_as_nodes: + if ev_att in event: + node_id = event[ev_att] + if node_id not in nx_digraph.nodes: + nx_digraph.add_node(node_id, attr={"type": "ATTRIBUTE_NODE"}) + nx_digraph.add_edge(ev_id, node_id, attr={"type": "ATTRIBUTE_EDGE", "name": ev_att}) + + if include_df: + for index in range(len(case)-1): + curr_ev = "EVENT="+str(case.attributes[case_id_attribute])+"_"+str(index) + next_ev = "EVENT="+str(case.attributes[case_id_attribute])+"_"+str(index+1) + + nx_digraph.add_edge(curr_ev, next_ev, attr={"type": "DF"}) + + for case_att in other_case_attributes_as_nodes: + if case_att in case.attributes: + node_id = case.attributes[case_att] + if node_id not in nx_digraph.nodes: + nx_digraph.add_node(node_id, attr={"type": "ATTRIBUTE_NODE"}) + nx_digraph.add_edge(case_id, node_id, attr={"type": "ATTRIBUTE_EDGE", "name": case_att}) + + return nx_digraph diff --git a/pm4py/pm4py/objects/conversion/ocel/__init__.py b/pm4py/pm4py/objects/conversion/ocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..38897e3b3fe28c81a10a0c273a8eab57361c2fb1 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/ocel/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.conversion.ocel import converter, variants diff --git a/pm4py/pm4py/objects/conversion/ocel/converter.py b/pm4py/pm4py/objects/conversion/ocel/converter.py new file mode 100644 index 0000000000000000000000000000000000000000..0253e70bc4268ecd59eb73d900a51cbaaf0e8eac --- /dev/null +++ b/pm4py/pm4py/objects/conversion/ocel/converter.py @@ -0,0 +1,48 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.objects.conversion.ocel.variants import ocel_to_nx, ocel_features_to_nx + + +class Variants(Enum): + OCEL_TO_NX = ocel_to_nx + OCEL_FEATURES_TO_NX = ocel_features_to_nx + + +def apply(ocel: OCEL, variant=Variants.OCEL_TO_NX, parameters: Optional[Dict[Any, Any]] = None): + """ + Converts an OCEL to another object. + + Parameters + ------------- + ocel + Object-centric event log + variant + Variant of the algorithm to use, posible values: + - Variants.OCEL_TO_NX: graph containing event and object IDS and two type of relations (REL=related objects, DF=directly-follows) + - Variants.OCEL_FEATURES_TO_NX: graph containing different types of interconnection at the object level + parameters + Variant-specific parameters + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(ocel, parameters=parameters) diff --git a/pm4py/pm4py/objects/conversion/ocel/variants/__init__.py b/pm4py/pm4py/objects/conversion/ocel/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7100fb8557a733ed469744d2dedb5b083b74050b --- /dev/null +++ b/pm4py/pm4py/objects/conversion/ocel/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.conversion.ocel.variants import ocel_to_nx, ocel_features_to_nx diff --git a/pm4py/pm4py/objects/conversion/ocel/variants/ocel_features_to_nx.py b/pm4py/pm4py/objects/conversion/ocel/variants/ocel_features_to_nx.py new file mode 100644 index 0000000000000000000000000000000000000000..1b75c4cee9b71b6ded0385cc5ffd964c8355a395 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/ocel/variants/ocel_features_to_nx.py @@ -0,0 +1,84 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.util import exec_utils, nx_utils +from pm4py.algo.transformation.ocel.graphs import object_interaction_graph, object_descendants_graph, object_inheritance_graph, object_cobirth_graph, object_codeath_graph + + +class Parameters(Enum): + INCLUDE_OBJ_INTERACTION_GRAPH = "include_obj_interaction_graph" + INCLUDE_OBJ_DESCENDANTS_GRAPH = "include_obj_descendants_graph" + INCLUDE_OBJ_INHERITANCE_GRAPH = "include_obj_inheritance_graph" + INCLUDE_OBJ_COBIRTH_GRAPH = "include_obj_cobirth_graph" + INCLUDE_OBJ_CODEATH_GRAPH = "include_obj_codeath_graph" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]]=None): + """ + Converts the graphs of features extracted from an OCEL to a NetworkX DiGraph object + + Parameters + -------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.INCLUDE_OBJ_INTERACTION_GRAPH => includes the object interaction graph in the NX DiGraph + - Parameters.INCLUDE_OBJ_DESCENDANTS_GRAPH => includes the object descendants graph in the NX DiGraph + - Parameters.INCLUDE_OBJ_INHERITANCE_GRAPH => includes the object inheritance graph in the NX DiGraph + - Parameters.INCLUDE_OBJ_COBIRTH_GRAPH => includes the object cobirth graph in the NX DiGraph + - Parameters.INCLUDE_OBJ_CODEATH_GRAPH => includes the object codeath graph in the NX DiGraph + + Returns + ------------- + G + NetworkX DiGraph + """ + if parameters is None: + parameters = {} + + include_obj_interaction_graph = exec_utils.get_param_value(Parameters.INCLUDE_OBJ_INTERACTION_GRAPH, parameters, True) + include_obj_descendants_graph = exec_utils.get_param_value(Parameters.INCLUDE_OBJ_DESCENDANTS_GRAPH, parameters, True) + include_obj_inheritance_graph = exec_utils.get_param_value(Parameters.INCLUDE_OBJ_INHERITANCE_GRAPH, parameters, True) + include_obj_cobirth_graph = exec_utils.get_param_value(Parameters.INCLUDE_OBJ_COBIRTH_GRAPH, parameters, True) + include_obj_codeath_graph = exec_utils.get_param_value(Parameters.INCLUDE_OBJ_CODEATH_GRAPH, parameters, True) + + G = nx_utils.DiGraph() + if include_obj_interaction_graph: + interaction_graph = object_interaction_graph.apply(ocel, parameters=parameters) + G.add_edges_from(interaction_graph, attr={"type": "INTERACTION"}) + + if include_obj_descendants_graph: + descendants_graph = object_descendants_graph.apply(ocel, parameters=parameters) + G.add_edges_from(descendants_graph, attr={"type": "DESCENDANTS"}) + + if include_obj_inheritance_graph: + inheritance_graph = object_inheritance_graph.apply(ocel, parameters=parameters) + G.add_edges_from(inheritance_graph, attr={"type": "INHERITANCE"}) + + if include_obj_cobirth_graph: + cobirth_graph = object_cobirth_graph.apply(ocel, parameters=parameters) + G.add_edges_from(cobirth_graph, attr={"type": "COBIRTH"}) + + if include_obj_codeath_graph: + codeath_graph = object_codeath_graph.apply(ocel, parameters=parameters) + G.add_edges_from(codeath_graph, attr={"type": "CODEATH"}) + + return G diff --git a/pm4py/pm4py/objects/conversion/ocel/variants/ocel_to_nx.py b/pm4py/pm4py/objects/conversion/ocel/variants/ocel_to_nx.py new file mode 100644 index 0000000000000000000000000000000000000000..c1e84e19812161e3b3ee5d7078a3d942f801a775 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/ocel/variants/ocel_to_nx.py @@ -0,0 +1,107 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.util import exec_utils, nx_utils +from pm4py.objects.conversion.log.variants import to_event_stream +from copy import copy + + +class Parameters(Enum): + INCLUDE_DF = "include_df" + INCLUDE_OBJECT_CHANGES = "include_object_changes" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Converts an OCEL to a NetworkX DiGraph object. + The nodes are the events and objects of the OCEL. + The edges are of two different types: + - relation edges, connecting an event to its related objects + - directly-follows edges, connecting an event to a following event (in the lifecycle of one of the related objects) + + Parameters + --------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.INCLUDE_DF => include the directly-follows relationship + + Returns + --------------- + G + NetworkX DiGraph + """ + if parameters is None: + parameters = {} + + include_df = exec_utils.get_param_value(Parameters.INCLUDE_DF, parameters, True) + include_object_changes = exec_utils.get_param_value(Parameters.INCLUDE_OBJECT_CHANGES, parameters, True) + + G = nx_utils.DiGraph() + + stream = ocel.events.to_dict("records") + stream = to_event_stream.__postprocess_stream(stream) + for ev in stream: + ev["type"] = "EVENT" + G.add_node(ev[ocel.event_id_column], attr=ev) + + stream = ocel.objects.to_dict("records") + stream = to_event_stream.__postprocess_stream(stream) + for obj in stream: + obj["type"] = "OBJECT" + G.add_node(obj[ocel.object_id_column], attr=obj) + + rel_cols = {ocel.event_id_column, ocel.object_id_column, ocel.qualifier} + + relations = ocel.relations[list(rel_cols)] + stream = relations.to_dict("records") + for rel in stream: + qualifier = rel[ocel.qualifier] + if qualifier is None: + qualifier = '' + G.add_edge(rel[ocel.event_id_column], rel[ocel.object_id_column], attr={"type": "E2O", "qualifier": qualifier}) + + obj_relations = ocel.o2o[[ocel.object_id_column, ocel.object_id_column + '_2', ocel.qualifier]] + stream = obj_relations.to_dict("records") + for rel in stream: + qualifier = rel[ocel.qualifier] + if qualifier is None: + qualifier = '' + G.add_edge(rel[ocel.object_id_column], rel[ocel.object_id_column + '_2'], + attr={"type": "O2O", "qualifier": qualifier}) + + if include_df: + lifecycle = relations.groupby(ocel.object_id_column).agg(list).to_dict()[ocel.event_id_column] + for obj in lifecycle: + lif = lifecycle[obj] + for i in range(len(lif) - 1): + G.add_edge(lif[i], lif[i + 1], attr={"type": "DF", "object": obj}) + + if include_object_changes: + object_changes = ocel.object_changes.to_dict("records") + for i in range(len(object_changes)): + change_id = "@@change##%d" % i + change_dict = copy(object_changes[i]) + change_dict["type"] = "CHANGE" + G.add_node(change_id, attr=change_dict) + G.add_edge(change_id, object_changes[i][ocel.object_id_column], attr={"type": "CHANGE"}) + + return G diff --git a/pm4py/pm4py/objects/conversion/powl/__init__.py b/pm4py/pm4py/objects/conversion/powl/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8cea81f11fdee4c1138c2b218699b436deef365c --- /dev/null +++ b/pm4py/pm4py/objects/conversion/powl/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.conversion.powl import * diff --git a/pm4py/pm4py/objects/conversion/powl/converter.py b/pm4py/pm4py/objects/conversion/powl/converter.py new file mode 100644 index 0000000000000000000000000000000000000000..9eeb5c6a788a103b42e9f516d2fdcf644c805f7b --- /dev/null +++ b/pm4py/pm4py/objects/conversion/powl/converter.py @@ -0,0 +1,50 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.conversion.powl.variants import to_petri_net +from pm4py.util import exec_utils +from enum import Enum + + +class Variants(Enum): + TO_PETRI_NET = to_petri_net + + +def apply(powl, parameters=None, variant=Variants.TO_PETRI_NET): + """ + Method for converting from POWL to Petri net + + Parameters + ----------- + powl + POWL model + parameters + Parameters of the algorithm + variant + Chosen variant of the algorithm: + - Variants.TO_PETRI_NET + + Returns + ----------- + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + """ + return exec_utils.get_variant(variant).apply(powl, parameters=parameters) diff --git a/pm4py/pm4py/objects/conversion/powl/variants/__init__.py b/pm4py/pm4py/objects/conversion/powl/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c18f147949e07169efd7e3b4356254b33f21b6fd --- /dev/null +++ b/pm4py/pm4py/objects/conversion/powl/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.conversion.powl.variants import * diff --git a/pm4py/pm4py/objects/conversion/powl/variants/to_petri_net.py b/pm4py/pm4py/objects/conversion/powl/variants/to_petri_net.py new file mode 100644 index 0000000000000000000000000000000000000000..1172d7079337a77ee2d5df40e4b3bf3b937c9587 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/powl/variants/to_petri_net.py @@ -0,0 +1,273 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import time +import uuid +from itertools import product + +import pm4py.objects.conversion.process_tree.variants.to_petri_net as pt_to_pn +from pm4py.objects.petri_net.obj import Marking +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to, remove_place +from pm4py.objects.powl.obj import Transition, SilentTransition, StrictPartialOrder, OperatorPOWL, FrequentTransition +from pm4py.objects.petri_net.utils import reduction +from pm4py.objects.process_tree.obj import Operator + + +def recursively_add_tree(powl, net, initial_entity_subtree, final_entity_subtree, counts, rec_depth, + force_add_skip=False): + """ + Recursively add the submodels to the Petri net + + Parameters + ----------- + powl + POWL model + net + Petri net + initial_entity_subtree + Initial entity (place/transition) that should be attached from the subtree + final_entity_subtree + Final entity (place/transition) that should be attached from the subtree + counts + Counts object (keeps the number of places, transitions and hidden transitions) + rec_depth + Recursion depth of the current iteration + force_add_skip + Boolean value that tells if the addition of a skip is mandatory + + Returns + ---------- + net + Updated Petri net + counts + Updated counts object (keeps the number of places, transitions and hidden transitions) + final_place + Last place added in this recursion + """ + if type(initial_entity_subtree) is PetriNet.Transition: + initial_place = get_new_place(counts) + net.places.add(initial_place) + add_arc_from_to(initial_entity_subtree, initial_place, net) + else: + initial_place = initial_entity_subtree + if final_entity_subtree is not None and type(final_entity_subtree) is PetriNet.Place: + final_place = final_entity_subtree + else: + final_place = get_new_place(counts) + net.places.add(final_place) + if final_entity_subtree is not None and type(final_entity_subtree) is PetriNet.Transition: + add_arc_from_to(final_place, final_entity_subtree, net) + + if force_add_skip: + invisible = get_new_hidden_trans(counts, type_trans="skip") + add_arc_from_to(initial_place, invisible, net) + add_arc_from_to(invisible, final_place, net) + + if isinstance(powl, Transition): + if isinstance(powl, SilentTransition): + petri_trans = get_new_hidden_trans(counts, type_trans="skip") + elif isinstance(powl, FrequentTransition): + petri_trans = get_transition(counts, powl.label, powl.activity, powl.skippable, powl.selfloop) + else: + petri_trans = get_transition(counts, powl.label, powl.label) + net.transitions.add(petri_trans) + add_arc_from_to(initial_place, petri_trans, net) + add_arc_from_to(petri_trans, final_place, net) + + elif isinstance(powl, OperatorPOWL): + tree_children = powl.children + if powl.operator == Operator.XOR: + for subtree in tree_children: + net, counts, intermediate_place = recursively_add_tree(subtree, net, initial_place, + final_place, + counts, + rec_depth + 1) + elif powl.operator == Operator.LOOP: + new_initial_place = get_new_place(counts) + net.places.add(new_initial_place) + init_loop_trans = get_new_hidden_trans(counts, type_trans="init_loop") + net.transitions.add(init_loop_trans) + add_arc_from_to(initial_place, init_loop_trans, net) + add_arc_from_to(init_loop_trans, new_initial_place, net) + initial_place = new_initial_place + loop_trans = get_new_hidden_trans(counts, type_trans="loop") + net.transitions.add(loop_trans) + + exit_node = SilentTransition() + do = tree_children[0] + redo = tree_children[1] + + net, counts, int1 = recursively_add_tree(do, net, initial_place, + None, counts, + rec_depth + 1) + net, counts, int2 = recursively_add_tree(redo, net, int1, + None, counts, + rec_depth + 1) + net, counts, int3 = recursively_add_tree(exit_node, net, int1, + final_place, counts, + rec_depth + 1) + + looping_place = int2 + + add_arc_from_to(looping_place, loop_trans, net) + add_arc_from_to(loop_trans, initial_place, net) + + elif isinstance(powl, StrictPartialOrder): + transitive_reduction = powl.order.get_transitive_reduction() + tree_children = list(powl.children) + tau_split = get_new_hidden_trans(counts, type_trans="tauSplit") + net.transitions.add(tau_split) + add_arc_from_to(initial_place, tau_split, net) + tau_join = get_new_hidden_trans(counts, type_trans="tauJoin") + net.transitions.add(tau_join) + add_arc_from_to(tau_join, final_place, net) + + init_trans = [] + final_trans = [] + start_nodes = transitive_reduction.get_start_nodes() + end_nodes = transitive_reduction.get_end_nodes() + for subtree in tree_children: + i_trans = get_new_hidden_trans(counts, type_trans="init_par") + net.transitions.add(i_trans) + if subtree in start_nodes: + i_place = get_new_place(counts) + net.places.add(i_place) + add_arc_from_to(tau_split, i_place, net) + + add_arc_from_to(i_place, i_trans, net) + + f_trans = get_new_hidden_trans(counts, type_trans="final_par") + net.transitions.add(f_trans) + if subtree in end_nodes: + f_place = get_new_place(counts) + net.places.add(f_place) + add_arc_from_to(f_trans, f_place, net) + add_arc_from_to(f_place, tau_join, net) + + net, counts, intermediate_place = recursively_add_tree(subtree, + net, + i_trans, + f_trans, + counts, + rec_depth + 1) + init_trans.append(i_trans) + final_trans.append(f_trans) + + n = range(len(tree_children)) + for i, j in product(n, n): + if transitive_reduction.is_edge_id(i, j): + new_place = get_new_place(counts) + net.places.add(new_place) + add_arc_from_to(final_trans[i], new_place, net) + add_arc_from_to(new_place, init_trans[j], net) + + return net, counts, final_place + + +def apply(powl, parameters=None): + """ + Apply from POWL model to Petri net + + Parameters + ----------- + powl + POWL model + parameters + Parameters of the algorithm + + Returns + ----------- + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + """ + + counts = pt_to_pn.Counts() + net = PetriNet('imdf_net_' + str(time.time())) + initial_marking = Marking() + final_marking = Marking() + source = get_new_place(counts) + source.name = "source" + sink = get_new_place(counts) + sink.name = "sink" + net.places.add(source) + net.places.add(sink) + initial_marking[source] = 1 + final_marking[sink] = 1 + initial_mandatory = True # check_tau_mandatory_at_initial_marking(powl) + final_mandatory = True # check_tau_mandatory_at_final_marking(powl) + if initial_mandatory: + initial_place = get_new_place(counts) + net.places.add(initial_place) + tau_initial = get_new_hidden_trans(counts, type_trans="tau") + net.transitions.add(tau_initial) + add_arc_from_to(source, tau_initial, net) + add_arc_from_to(tau_initial, initial_place, net) + else: + initial_place = source + if final_mandatory: + final_place = get_new_place(counts) + net.places.add(final_place) + tau_final = get_new_hidden_trans(counts, type_trans="tau") + net.transitions.add(tau_final) + add_arc_from_to(final_place, tau_final, net) + add_arc_from_to(tau_final, sink, net) + else: + final_place = sink + + net, counts, last_added_place = recursively_add_tree(powl, net, initial_place, final_place, counts, 0) + + reduction.apply_simple_reduction(net) + + places = list(net.places) + for place in places: + if len(place.out_arcs) == 0 and place not in final_marking: + remove_place(net, place) + if len(place.in_arcs) == 0 and place not in initial_marking: + remove_place(net, place) + + return net, initial_marking, final_marking + + +def get_new_place(counts): + """ + Create a new place in the Petri net + """ + counts.inc_places() + return PetriNet.Place('p_' + str(counts.num_places)) + + +def get_new_hidden_trans(counts, type_trans="unknown"): + """ + Create a new hidden transition in the Petri net + """ + counts.inc_no_hidden() + return PetriNet.Transition(type_trans + '_' + str(counts.num_hidden), None) + + +def get_transition(counts, label, activity, skippable=False, selfloop=False): + """ + Create a transitions with the specified label in the Petri net + """ + counts.inc_no_visible() + return PetriNet.Transition(str(uuid.uuid4()), label, properties={"activity": activity, + "skippable": skippable, + "selfloop": selfloop}) diff --git a/pm4py/pm4py/objects/conversion/process_tree/__init__.py b/pm4py/pm4py/objects/conversion/process_tree/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..34c4e1be97aa32658544f8bcf00d644955e29c89 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/process_tree/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.process_tree import converter, variants diff --git a/pm4py/pm4py/objects/conversion/process_tree/converter.py b/pm4py/pm4py/objects/conversion/process_tree/converter.py new file mode 100644 index 0000000000000000000000000000000000000000..55910968790b3486c8bee4f202efb37ed2e928e1 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/process_tree/converter.py @@ -0,0 +1,56 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.process_tree.variants import to_petri_net +from pm4py.objects.conversion.process_tree.variants import to_petri_net_transition_bordered +from pm4py.objects.conversion.process_tree.variants import to_bpmn +from pm4py.objects.conversion.process_tree.variants import to_powl +from pm4py.util import exec_utils +from enum import Enum + + +class Variants(Enum): + TO_PETRI_NET = to_petri_net + TO_PETRI_NET_TRANSITION_BORDERED = to_petri_net_transition_bordered + TO_BPMN = to_bpmn + TO_POWL = to_powl + + +def apply(tree, parameters=None, variant=Variants.TO_PETRI_NET): + """ + Method for converting from Process Tree to Petri net + + Parameters + ----------- + tree + Process tree + parameters + Parameters of the algorithm + variant + Chosen variant of the algorithm: + - Variants.TO_PETRI_NET + - Variants.TO_PETRI_NET_TRANSITION_BORDERED + + Returns + ----------- + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + """ + return exec_utils.get_variant(variant).apply(tree, parameters=parameters) diff --git a/pm4py/pm4py/objects/conversion/process_tree/variants/__init__.py b/pm4py/pm4py/objects/conversion/process_tree/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..980a17b5c06197a22cdc362296da136e65394aa3 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/process_tree/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.process_tree.variants import to_petri_net, to_petri_net_transition_bordered, to_bpmn diff --git a/pm4py/pm4py/objects/conversion/process_tree/variants/to_bpmn.py b/pm4py/pm4py/objects/conversion/process_tree/variants/to_bpmn.py new file mode 100644 index 0000000000000000000000000000000000000000..89108801e8336690a53bed3afca1905034d49687 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/process_tree/variants/to_bpmn.py @@ -0,0 +1,263 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy + +from pm4py.objects.process_tree.obj import Operator + + +class Counts(object): + """ + Shared variables among executions + """ + + def __init__(self): + """ + Constructor + """ + self.num_xor_gateways = 0 + self.num_para_gateways = 0 + self.num_tau_trans = 0 + self.tau_trans = [] + + def inc_xor_gateways(self): + """ + Increase the number of xor gateways (split + join) + """ + self.num_xor_gateways += 1 + + def inc_tau_trans(self): + """ + Increase the number of tau transitions + """ + self.num_tau_trans += 1 + + def inc_para_gateways(self): + """ + Increase the number of xor gateways (split + join) + """ + self.num_para_gateways += 1 + + def append_tau(self, tau_id): + self.tau_trans.append(tau_id) + + +def add_task(bpmn, counts, label): + """ + Create a task with the specified label in the BPMN + """ + from pm4py.objects.bpmn.obj import BPMN + task = BPMN.Task(name=label) + bpmn.add_node(task) + return bpmn, task, counts + + +def add_tau_task(bpmn, counts): + """ + Create a task with the specified label in the BPMN + """ + from pm4py.objects.bpmn.obj import BPMN + counts.inc_tau_trans() + tau_name = "tau_" + str(counts.num_tau_trans) + tau_task = BPMN.Task(name=tau_name) + bpmn.add_node(tau_task) + counts.append_tau(tau_task) + return bpmn, tau_task, counts + + +def add_xor_gateway(bpmn, counts): + from pm4py.objects.bpmn.obj import BPMN + counts.inc_xor_gateways() + split_name = "xor_" + str(counts.num_xor_gateways) + "_split" + join_name = "xor_" + str(counts.num_xor_gateways) + "_join" + + split = BPMN.ExclusiveGateway(name="", gateway_direction=BPMN.Gateway.Direction.DIVERGING) + join = BPMN.ExclusiveGateway(name="", gateway_direction=BPMN.Gateway.Direction.CONVERGING) + bpmn.add_node(split) + bpmn.add_node(join) + + return bpmn, split, join, counts + + +def add_parallel_gateway(bpmn, counts): + from pm4py.objects.bpmn.obj import BPMN + counts.inc_para_gateways() + split_name = "parallel_" + str(counts.num_para_gateways) + "_split" + join_name = "parallel_" + str(counts.num_para_gateways) + "_join" + + split = BPMN.ParallelGateway(name="", gateway_direction=BPMN.Gateway.Direction.DIVERGING) + join = BPMN.ParallelGateway(name="", gateway_direction=BPMN.Gateway.Direction.CONVERGING) + bpmn.add_node(split) + bpmn.add_node(join) + return bpmn, split, join, counts + + +def add_inclusive_gateway(bpmn, counts): + from pm4py.objects.bpmn.obj import BPMN + counts.inc_para_gateways() + split_name = "parallel_" + str(counts.num_para_gateways) + "_split" + join_name = "parallel_" + str(counts.num_para_gateways) + "_join" + + split = BPMN.InclusiveGateway(name="", gateway_direction=BPMN.Gateway.Direction.DIVERGING) + join = BPMN.InclusiveGateway(name="", gateway_direction=BPMN.Gateway.Direction.CONVERGING) + bpmn.add_node(split) + bpmn.add_node(join) + return bpmn, split, join, counts + + +def recursively_add_tree(parent_tree, tree, bpmn, initial_event, final_event, counts, rec_depth): + from pm4py.objects.bpmn.obj import BPMN + tree_childs = [child for child in tree.children] + initial_connector = None + final_connector = None + + if tree.operator is None: + trans = tree + if trans.label is None: + bpmn, task, counts = add_tau_task(bpmn, counts) + bpmn.add_flow(BPMN.SequenceFlow(initial_event, task)) + bpmn.add_flow(BPMN.SequenceFlow(task, final_event)) + initial_connector = task + final_connector = task + else: + bpmn, task, counts = add_task(bpmn, counts, trans.label) + bpmn.add_flow(BPMN.SequenceFlow(initial_event, task)) + bpmn.add_flow(BPMN.SequenceFlow(task, final_event)) + initial_connector = task + final_connector = task + + elif tree.operator == Operator.XOR: + bpmn, split_gateway, join_gateway, counts = add_xor_gateway(bpmn, counts) + for subtree in tree_childs: + bpmn, counts, x, y = recursively_add_tree(tree, subtree, bpmn, split_gateway, join_gateway, + counts, + rec_depth + 1) + bpmn.add_flow(BPMN.SequenceFlow(initial_event, split_gateway)) + bpmn.add_flow(BPMN.SequenceFlow(join_gateway, final_event)) + initial_connector = split_gateway + final_connector = join_gateway + + elif tree.operator == Operator.PARALLEL: + bpmn, split_gateway, join_gateway, counts = add_parallel_gateway(bpmn, counts) + for subtree in tree_childs: + bpmn, counts, x, y = recursively_add_tree(tree, subtree, bpmn, split_gateway, join_gateway, + counts, + rec_depth + 1) + bpmn.add_flow(BPMN.SequenceFlow(initial_event, split_gateway)) + bpmn.add_flow(BPMN.SequenceFlow(join_gateway, final_event)) + initial_connector = split_gateway + final_connector = join_gateway + + elif tree.operator == Operator.OR: + bpmn, split_gateway, join_gateway, counts = add_inclusive_gateway(bpmn, counts) + for subtree in tree_childs: + bpmn, counts, x, y = recursively_add_tree(tree, subtree, bpmn, split_gateway, join_gateway, + counts, + rec_depth + 1) + bpmn.add_flow(BPMN.SequenceFlow(initial_event, split_gateway)) + bpmn.add_flow(BPMN.SequenceFlow(join_gateway, final_event)) + initial_connector = split_gateway + final_connector = join_gateway + + elif tree.operator == Operator.SEQUENCE: + initial_intermediate_task = initial_event + bpmn, final_intermediate_task, counts = add_tau_task(bpmn, counts) + for i in range(len(tree_childs)): + bpmn, counts, initial_connect, final_connect = recursively_add_tree(tree, tree_childs[i], bpmn, + initial_intermediate_task, + final_intermediate_task, counts, + rec_depth + 1) + initial_intermediate_task = final_connect + if i == 0: + initial_connector = initial_connect + if i == len(tree_childs) - 2: + final_intermediate_task = final_event + else: + bpmn, final_intermediate_task, counts = add_tau_task(bpmn, counts) + final_connector = final_connect + + elif tree.operator == Operator.LOOP: + do = tree_childs[0] + bpmn, split, join, counts = add_xor_gateway(bpmn, counts) + bpmn, counts, i, y = recursively_add_tree(tree, do, bpmn, join, split, counts, rec_depth + 1) + for redo in tree_childs[1:]: + bpmn, counts, x, y = recursively_add_tree(tree, redo, bpmn, split, join, counts, rec_depth + 1) + bpmn.add_flow(BPMN.SequenceFlow(initial_event, join)) + bpmn.add_flow(BPMN.SequenceFlow(split, final_event)) + initial_connector = join + final_connector = split + + return bpmn, counts, initial_connector, final_connector + + +def delete_tau_transitions(bpmn, counts): + from pm4py.objects.bpmn.obj import BPMN + for tau_tran in counts.tau_trans: + in_arcs = tau_tran.get_in_arcs() + out_arcs = tau_tran.get_out_arcs() + if len(in_arcs) > 1 or len(out_arcs) > 1: + raise Exception("Tau transition has more than one incoming or outgoing edge!") + if in_arcs and out_arcs: + out_flow = out_arcs[0] + in_flow = in_arcs[0] + source = in_flow.get_source() + target = out_flow.get_target() + bpmn.remove_flow(out_flow) + bpmn.remove_flow(in_flow) + bpmn.add_flow(BPMN.SequenceFlow(source, target)) + else: + for in_flow in copy.copy(in_arcs): + bpmn.remove_flow(in_flow) + for out_flow in copy.copy(out_arcs): + bpmn.remove_flow(out_flow) + bpmn.remove_node(tau_tran) + + return bpmn + + +def apply(tree, parameters=None): + """ + Converts the process tree into a BPMN diagram + + Parameters + -------------- + tree + Process tree + parameters + Parameters of the algorithm + + Returns + -------------- + bpmn_graph + BPMN diagram + """ + from pm4py.objects.bpmn.obj import BPMN + counts = Counts() + bpmn = BPMN() + start_event = BPMN.StartEvent(name="start", isInterrupting=True) + end_event = BPMN.NormalEndEvent(name="end") + bpmn.add_node(start_event) + bpmn.add_node(end_event) + bpmn, counts, _, _ = recursively_add_tree(tree, tree, bpmn, start_event, end_event, counts, 0) + bpmn = delete_tau_transitions(bpmn, counts) + + for node in bpmn.get_nodes(): + node.set_process(bpmn.get_process_id()) + + for edge in bpmn.get_flows(): + edge.set_process(bpmn.get_process_id()) + + return bpmn diff --git a/pm4py/pm4py/objects/conversion/process_tree/variants/to_petri_net.py b/pm4py/pm4py/objects/conversion/process_tree/variants/to_petri_net.py new file mode 100644 index 0000000000000000000000000000000000000000..ff42f19e044d0b726c4c12e2356c0e5946a13927 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/process_tree/variants/to_petri_net.py @@ -0,0 +1,597 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import time +import uuid + +from pm4py.objects.petri_net.obj import Marking +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.objects.petri_net.utils.petri_utils import remove_transition, add_arc_from_to, remove_place +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.process_tree.obj import Operator +from pm4py.objects.petri_net.utils import reduction + + +class Counts(object): + """ + Shared variables among executions + """ + + def __init__(self): + """ + Constructor + """ + self.num_places = 0 + self.num_hidden = 0 + self.num_visible_trans = 0 + self.dict_skips = {} + self.dict_loops = {} + + def inc_places(self): + """ + Increase the number of places + """ + self.num_places = self.num_places + 1 + + def inc_no_hidden(self): + """ + Increase the number of hidden transitions + """ + self.num_hidden = self.num_hidden + 1 + + def inc_no_visible(self): + """ + Increase the number of visible transitions + """ + self.num_visible_trans = self.num_visible_trans + 1 + + +def clean_duplicate_transitions(net): + """ + Clean duplicate transitions in a Petri net + + Parameters + ------------ + net + Petri net + + Returns + ------------ + net + Cleaned Petri net + """ + transitions = list(net.transitions) + already_visited_combo = set() + for i in range(0, len(transitions)): + trans = transitions[i] + if trans.label is None: + in_arcs = trans.in_arcs + out_arcs = trans.out_arcs + to_delete = False + for in_arc in in_arcs: + in_place = in_arc.source + for out_arc in out_arcs: + out_place = out_arc.target + combo = in_place.name + " " + out_place.name + if combo in already_visited_combo: + to_delete = True + break + already_visited_combo.add(combo) + if to_delete: + net = remove_transition(net, trans) + return net + + +def get_new_place(counts): + """ + Create a new place in the Petri net + """ + counts.inc_places() + return PetriNet.Place('p_' + str(counts.num_places)) + + +def get_new_hidden_trans(counts, type_trans="unknown"): + """ + Create a new hidden transition in the Petri net + """ + counts.inc_no_hidden() + return PetriNet.Transition(type_trans + '_' + str(counts.num_hidden), None) + + +def get_transition(counts, label): + """ + Create a transitions with the specified label in the Petri net + """ + counts.inc_no_visible() + return PetriNet.Transition(str(uuid.uuid4()), label) + + +def get_first_terminal_child_transitions(tree): + """ + Gets the list of transitions belonging to the first terminal child node of the current tree + + Parameters + ---------- + tree + Process tree + + Returns + --------- + transitions_list + List of transitions belonging to the first terminal child node + """ + if tree.children: + if tree.children[0].operator: + return get_first_terminal_child_transitions(tree.children[0]) + else: + if tree.children[0].children: + return tree.children[0].children + else: + return [tree.children[0]] + return [] + + +def get_last_terminal_child_transitions(tree): + """ + Gets the list of transitions belonging to the last terminal child node of the current tree + + Parameters + ---------- + tree + Process tree + + Returns + --------- + transitions_list + List of transitions belonging to the first terminal child node + """ + if tree.children: + if tree.children[-1].operator: + return get_last_terminal_child_transitions(tree.children[-1]) + else: + if tree.children[-1].children: + return tree.children[-1].children + else: + return [tree.children[-1]] + return [] + + +def check_loop_to_first_operator(tree): + """ + Checks if loop to first operator + + Parameters + ------------ + tree + Process tree + + Returns + ------------ + boolean + Check if no loop to the first operator + """ + if tree.operator == Operator.LOOP: + return True + if tree.children: + if tree.children[0].operator == Operator.LOOP: + return True + else: + return check_loop_to_first_operator(tree.children[0]) + return tree.operator == Operator.LOOP + + +def check_loop_to_last_operator(tree): + """ + Checks if loop to last operator + + Parameters + ------------- + tree + Process tree + + Returns + ------------- + boolean + Check if no loop to the last operator + """ + if tree.operator == Operator.LOOP: + return True + if tree.children: + if tree.children[-1].operator == Operator.LOOP: + return True + else: + return check_loop_to_last_operator(tree.children[-1]) + return tree.operator == Operator.LOOP + + +def check_initial_loop(tree): + """ + Check if the tree, on-the-left, starts with a loop + + Parameters + ---------- + tree + Process tree + + Returns + ---------- + boolean + True if it starts with an initial loop + """ + if tree.children: + if tree.children[0].operator: + if tree.children[0].operator == Operator.LOOP: + return True + else: + return check_terminal_loop(tree.children[0]) + return False + + +def check_terminal_loop(tree): + """ + Check if the tree, on-the-right, ends with a loop + + Parameters + ---------- + tree + Process tree + + Returns + ----------- + boolean + True if it ends with a terminal loop + """ + if tree.children: + if tree.children[-1].operator: + if tree.children[-1].operator == Operator.LOOP: + return True + else: + return check_terminal_loop(tree.children[-1]) + return False + + +def check_tau_mandatory_at_initial_marking(tree): + """ + When a conversion to a Petri net is operated, check if is mandatory to add a hidden transition + at initial marking + + Parameters + ---------- + tree + Process tree + + Returns + ---------- + boolean + Boolean that is true if it is mandatory to add a hidden transition connecting the initial marking + to the rest of the process + """ + condition1 = check_initial_loop(tree) + terminal_transitions = get_first_terminal_child_transitions(tree) + condition2 = len(terminal_transitions) > 1 + condition3 = check_loop_to_first_operator(tree) + condition4 = tree.operator == Operator.XOR or tree.operator == Operator.PARALLEL + + return condition1 or condition2 or condition3 or condition4 + + +def check_tau_mandatory_at_final_marking(tree): + """ + When a conversion to a Petri net is operated, check if is mandatory to add a hidden transition + at final marking + + Returns + ---------- + boolean + Boolean that is true if it is mandatory to add a hidden transition connecting + the rest of the process to the final marking + """ + condition1 = check_terminal_loop(tree) + terminal_transitions = get_last_terminal_child_transitions(tree) + condition2 = len(terminal_transitions) > 1 + condition3 = check_loop_to_last_operator(tree) + condition4 = tree.operator == Operator.XOR or tree.operator == Operator.PARALLEL + + return condition1 or condition2 or condition3 or condition4 + + +def recursively_add_tree(parent_tree, tree, net, initial_entity_subtree, final_entity_subtree, counts, rec_depth, + force_add_skip=False): + """ + Recursively add the subtrees to the Petri net + + Parameters + ----------- + parent_tree + Parent tree + tree + Current subtree + net + Petri net + initial_entity_subtree + Initial entity (place/transition) that should be attached from the subtree + final_entity_subtree + Final entity (place/transition) that should be attached from the subtree + counts + Counts object (keeps the number of places, transitions and hidden transitions) + rec_depth + Recursion depth of the current iteration + force_add_skip + Boolean value that tells if the addition of a skip is mandatory + + Returns + ---------- + net + Updated Petri net + counts + Updated counts object (keeps the number of places, transitions and hidden transitions) + final_place + Last place added in this recursion + """ + if type(initial_entity_subtree) is PetriNet.Transition: + initial_place = get_new_place(counts) + net.places.add(initial_place) + add_arc_from_to(initial_entity_subtree, initial_place, net) + else: + initial_place = initial_entity_subtree + if final_entity_subtree is not None and type(final_entity_subtree) is PetriNet.Place: + final_place = final_entity_subtree + else: + final_place = get_new_place(counts) + net.places.add(final_place) + if final_entity_subtree is not None and type(final_entity_subtree) is PetriNet.Transition: + add_arc_from_to(final_place, final_entity_subtree, net) + tree_childs = [child for child in tree.children] + + if force_add_skip: + invisible = get_new_hidden_trans(counts, type_trans="skip") + add_arc_from_to(initial_place, invisible, net) + add_arc_from_to(invisible, final_place, net) + + if tree.operator is None: + trans = tree + if trans.label is None: + petri_trans = get_new_hidden_trans(counts, type_trans="skip") + else: + petri_trans = get_transition(counts, trans.label) + net.transitions.add(petri_trans) + add_arc_from_to(initial_place, petri_trans, net) + add_arc_from_to(petri_trans, final_place, net) + + if tree.operator == Operator.XOR: + for subtree in tree_childs: + net, counts, intermediate_place = recursively_add_tree(tree, subtree, net, initial_place, final_place, + counts, + rec_depth + 1) + elif tree.operator == Operator.OR: + new_initial_trans = get_new_hidden_trans(counts, type_trans="tauSplit") + net.transitions.add(new_initial_trans) + add_arc_from_to(initial_place, new_initial_trans, net) + new_final_trans = get_new_hidden_trans(counts, type_trans="tauJoin") + net.transitions.add(new_final_trans) + add_arc_from_to(new_final_trans, final_place, net) + terminal_place = get_new_place(counts) + net.places.add(terminal_place) + add_arc_from_to(terminal_place, new_final_trans, net) + first_place = get_new_place(counts) + net.places.add(first_place) + add_arc_from_to(new_initial_trans, first_place, net) + + for subtree in tree_childs: + subtree_init_place = get_new_place(counts) + net.places.add(subtree_init_place) + add_arc_from_to(new_initial_trans, subtree_init_place, net) + subtree_start_place = get_new_place(counts) + net.places.add(subtree_start_place) + subtree_end_place = get_new_place(counts) + net.places.add(subtree_end_place) + trans_start = get_new_hidden_trans(counts, type_trans="inclusiveStart") + trans_later = get_new_hidden_trans(counts, type_trans="inclusiveLater") + trans_skip = get_new_hidden_trans(counts, type_trans="inclusiveSkip") + net.transitions.add(trans_start) + net.transitions.add(trans_later) + net.transitions.add(trans_skip) + add_arc_from_to(first_place, trans_start, net) + add_arc_from_to(subtree_init_place, trans_start, net) + add_arc_from_to(trans_start, subtree_start_place, net) + add_arc_from_to(trans_start, terminal_place, net) + + add_arc_from_to(terminal_place, trans_later, net) + add_arc_from_to(subtree_init_place, trans_later, net) + add_arc_from_to(trans_later, subtree_start_place, net) + add_arc_from_to(trans_later, terminal_place, net) + + add_arc_from_to(terminal_place, trans_skip, net) + add_arc_from_to(subtree_init_place, trans_skip, net) + add_arc_from_to(trans_skip, terminal_place, net) + add_arc_from_to(trans_skip, subtree_end_place, net) + + add_arc_from_to(subtree_end_place, new_final_trans, net) + + net, counts, intermediate_place = recursively_add_tree(tree, subtree, net, subtree_start_place, + subtree_end_place, + counts, + rec_depth + 1) + + elif tree.operator == Operator.PARALLEL: + new_initial_trans = get_new_hidden_trans(counts, type_trans="tauSplit") + net.transitions.add(new_initial_trans) + add_arc_from_to(initial_place, new_initial_trans, net) + new_final_trans = get_new_hidden_trans(counts, type_trans="tauJoin") + net.transitions.add(new_final_trans) + add_arc_from_to(new_final_trans, final_place, net) + + for subtree in tree_childs: + net, counts, intermediate_place = recursively_add_tree(tree, subtree, net, new_initial_trans, + new_final_trans, + counts, + rec_depth + 1) + + elif tree.operator == Operator.INTERLEAVING: + new_initial_trans = get_new_hidden_trans(counts, type_trans="tauSplit") + net.transitions.add(new_initial_trans) + add_arc_from_to(initial_place, new_initial_trans, net) + new_final_trans = get_new_hidden_trans(counts, type_trans="tauJoin") + net.transitions.add(new_final_trans) + add_arc_from_to(new_final_trans, final_place, net) + + control_place = get_new_place(counts) + net.places.add(control_place) + + add_arc_from_to(new_initial_trans, control_place, net) + add_arc_from_to(control_place, new_final_trans, net) + + for subtree in tree_childs: + placeI = get_new_place(counts) + net.places.add(placeI) + iTrans = get_new_hidden_trans(counts, type_trans="iTrans") + net.transitions.add(iTrans) + placeF = get_new_place(counts) + net.places.add(placeF) + fTrans = get_new_hidden_trans(counts, type_trans="fTrans") + net.transitions.add(fTrans) + + add_arc_from_to(new_initial_trans, placeI, net) + add_arc_from_to(placeI, iTrans, net) + add_arc_from_to(fTrans, placeF, net) + add_arc_from_to(placeF, new_final_trans, net) + + add_arc_from_to(control_place, iTrans, net) + add_arc_from_to(fTrans, control_place, net) + + net, counts, intermediate_place = recursively_add_tree(tree, subtree, net, iTrans, + fTrans, + counts, + rec_depth + 1) + + elif tree.operator == Operator.SEQUENCE: + intermediate_place = initial_place + for i in range(len(tree_childs)): + final_connection_place = None + if i == len(tree_childs) - 1: + final_connection_place = final_place + net, counts, intermediate_place = recursively_add_tree(tree, tree_childs[i], net, intermediate_place, + final_connection_place, counts, + rec_depth + 1) + elif tree.operator == Operator.LOOP: + # if not parent_tree.operator == Operator.SEQUENCE: + new_initial_place = get_new_place(counts) + net.places.add(new_initial_place) + init_loop_trans = get_new_hidden_trans(counts, type_trans="init_loop") + net.transitions.add(init_loop_trans) + add_arc_from_to(initial_place, init_loop_trans, net) + add_arc_from_to(init_loop_trans, new_initial_place, net) + initial_place = new_initial_place + loop_trans = get_new_hidden_trans(counts, type_trans="loop") + net.transitions.add(loop_trans) + if len(tree_childs) == 1: + net, counts, intermediate_place = recursively_add_tree(tree, tree_childs[0], net, initial_place, + final_place, + counts, + rec_depth + 1) + add_arc_from_to(final_place, loop_trans, net) + add_arc_from_to(loop_trans, initial_place, net) + else: + net, counts, int1 = recursively_add_tree(tree, tree_childs[0], net, initial_place, + None, counts, + rec_depth + 1) + int2 = None + for i in range(1, len(tree_childs)): + net, counts, int2 = recursively_add_tree(tree, tree_childs[i], net, int1, + int2, counts, + rec_depth + 1) + + net, counts, int3 = recursively_add_tree(tree, ProcessTree(), net, int1, + final_place, counts, + rec_depth + 1) + + looping_place = int2 + + add_arc_from_to(looping_place, loop_trans, net) + add_arc_from_to(loop_trans, initial_place, net) + + return net, counts, final_place + + +def apply(tree, parameters=None): + """ + Apply from Process Tree to Petri net + + Parameters + ----------- + tree + Process tree + parameters + Parameters of the algorithm + + Returns + ----------- + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + """ + if parameters is None: + parameters = {} + del parameters + + counts = Counts() + net = PetriNet('imdf_net_' + str(time.time())) + initial_marking = Marking() + final_marking = Marking() + source = get_new_place(counts) + source.name = "source" + sink = get_new_place(counts) + sink.name = "sink" + net.places.add(source) + net.places.add(sink) + initial_marking[source] = 1 + final_marking[sink] = 1 + initial_mandatory = check_tau_mandatory_at_initial_marking(tree) + final_mandatory = check_tau_mandatory_at_final_marking(tree) + if initial_mandatory: + initial_place = get_new_place(counts) + net.places.add(initial_place) + tau_initial = get_new_hidden_trans(counts, type_trans="tau") + net.transitions.add(tau_initial) + add_arc_from_to(source, tau_initial, net) + add_arc_from_to(tau_initial, initial_place, net) + else: + initial_place = source + if final_mandatory: + final_place = get_new_place(counts) + net.places.add(final_place) + tau_final = get_new_hidden_trans(counts, type_trans="tau") + net.transitions.add(tau_final) + add_arc_from_to(final_place, tau_final, net) + add_arc_from_to(tau_final, sink, net) + else: + final_place = sink + + net, counts, last_added_place = recursively_add_tree(tree, tree, net, initial_place, final_place, counts, 0) + + reduction.apply_simple_reduction(net) + + places = list(net.places) + for place in places: + if len(place.out_arcs) == 0 and not place in final_marking: + remove_place(net, place) + if len(place.in_arcs) == 0 and not place in initial_marking: + remove_place(net, place) + + return net, initial_marking, final_marking diff --git a/pm4py/pm4py/objects/conversion/process_tree/variants/to_petri_net_transition_bordered.py b/pm4py/pm4py/objects/conversion/process_tree/variants/to_petri_net_transition_bordered.py new file mode 100644 index 0000000000000000000000000000000000000000..848df81799852854f73918e0dda75fc457d5dab0 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/process_tree/variants/to_petri_net_transition_bordered.py @@ -0,0 +1,124 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net import obj +from pm4py.objects.petri_net.utils import petri_utils as pn_util +from pm4py.objects.process_tree.obj import Operator as pt_opt + + +def apply(tree, parameters=None): + ''' + Only supports loops with 2 children! + :param tree: + :return: + ''' + net = obj.PetriNet(name=str(tree)) + if len(tree.children) == 0: + pn_util.add_transition(net, label=tree.label, name=str(id(tree))) + else: + sub_nets = list() + for c in tree.children: + sub_net, ini, fin = apply(c) + sub_nets.append(sub_net) + pn_util.merge(net, sub_nets) + switch = { + pt_opt.SEQUENCE: construct_sequence_pattern, + pt_opt.XOR: construct_xor_pattern, + pt_opt.PARALLEL: construct_and_pattern, + pt_opt.LOOP: construct_loop_pattern + } + net, ini, fin = switch[tree.operator](net, sub_nets) + if tree.parent is None: + p_ini = pn_util.add_place(net) + p_fin = pn_util.add_place(net) + pn_util.add_arc_from_to(p_ini, _get_src_transition(net), net) + pn_util.add_arc_from_to(_get_sink_transition(net), p_fin, net) + return net, obj.Marking({p_ini: 1}), obj.Marking({p_fin: 1}) + return net, obj.Marking(), obj.Marking() + + +def _get_src_transition(sub_net): + for t in sub_net.transitions: + if len(pn_util.pre_set(t)) == 0: + return t + return None + + +def _get_sink_transition(sub_net): + for t in sub_net.transitions: + if len(pn_util.post_set(t)) == 0: + return t + return None + + +def _add_src_sink_transitions(net, p_s, p_t): + src = pn_util.add_transition(net) + pn_util.add_arc_from_to(src, p_s, net) + sink = pn_util.add_transition(net) + pn_util.add_arc_from_to(p_t, sink, net) + return net, obj.Marking(), obj.Marking() + + +def construct_sequence_pattern(net, sub_nets): + places = [None] * (len(sub_nets) + 1) + for i in range(len(sub_nets) + 1): + places[i] = pn_util.add_place(net) + for i in range(len(sub_nets)): + pn_util.add_arc_from_to(places[i], _get_src_transition(sub_nets[i]), net) + pn_util.add_arc_from_to(_get_sink_transition(sub_nets[i]), places[i + 1], net) + src = pn_util.add_transition(net) + pn_util.add_arc_from_to(src, places[0], net) + sink = pn_util.add_transition(net) + pn_util.add_arc_from_to(places[len(places) - 1], sink, net) + return net, obj.Marking(), obj.Marking() + + +def construct_xor_pattern(net, sub_nets): + p_s = pn_util.add_place(net) + p_o = pn_util.add_place(net) + for n in sub_nets: + pn_util.add_arc_from_to(p_s, _get_src_transition(n), net) + pn_util.add_arc_from_to(_get_sink_transition(n), p_o, net) + return _add_src_sink_transitions(net, p_s, p_o) + + +def construct_and_pattern(net, sub_nets): + p_s = [None] * len(sub_nets) + p_t = [None] * len(sub_nets) + for i in range(len(sub_nets)): + p_s[i] = pn_util.add_place(net) + p_t[i] = pn_util.add_place(net) + pn_util.add_arc_from_to(p_s[i], _get_src_transition(sub_nets[i]), net) + pn_util.add_arc_from_to(_get_sink_transition(sub_nets[i]), p_t[i], net) + src = pn_util.add_transition(net) + for p in p_s: + pn_util.add_arc_from_to(src, p, net) + sink = pn_util.add_transition(net) + for p in p_t: + pn_util.add_arc_from_to(p, sink, net) + return net, obj.Marking(), obj.Marking() + + +def construct_loop_pattern(net, sub_nets): + assert (len(sub_nets) == 2) + p_s = pn_util.add_place(net) + p_t = pn_util.add_place(net) + pn_util.add_arc_from_to(p_s, _get_src_transition(sub_nets[0]), net) + pn_util.add_arc_from_to(p_t, _get_src_transition(sub_nets[1]), net) + pn_util.add_arc_from_to(_get_sink_transition(sub_nets[0]), p_t, net) + pn_util.add_arc_from_to(_get_sink_transition(sub_nets[1]), p_s, net) + net, ini, fin = _add_src_sink_transitions(net, p_s, p_t) + return net, obj.Marking(), obj.Marking() diff --git a/pm4py/pm4py/objects/conversion/process_tree/variants/to_powl.py b/pm4py/pm4py/objects/conversion/process_tree/variants/to_powl.py new file mode 100644 index 0000000000000000000000000000000000000000..cf4b034d0dc96e413a602ca61a3257a9614c204c --- /dev/null +++ b/pm4py/pm4py/objects/conversion/process_tree/variants/to_powl.py @@ -0,0 +1,69 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree.obj import ProcessTree, Operator as PTOperator +from pm4py.objects.powl.obj import POWL, StrictPartialOrder, OperatorPOWL, Transition, SilentTransition +from typing import Optional, Dict, Any + + +def apply_recursive(tree: ProcessTree, rec_depth=0) -> POWL: + """ + Internal method + """ + nodes = [] + + for c in tree.children: + nodes.append(apply_recursive(c, rec_depth+1)) + + if tree.operator is None: + if tree.label is not None: + powl = Transition(label=tree.label) + else: + powl = SilentTransition() + elif tree.operator == PTOperator.OR: + raise Exception("conversion of process trees containing OR nodes is not supported!") + elif tree.operator == PTOperator.XOR: + powl = OperatorPOWL(PTOperator.XOR, nodes) + elif tree.operator == PTOperator.LOOP: + powl = OperatorPOWL(PTOperator.LOOP, nodes) + else: + powl = StrictPartialOrder(nodes=nodes) + + if tree.operator == PTOperator.SEQUENCE: + for i in range(len(nodes)-1): + powl.order.add_edge(nodes[i], nodes[i+1]) + + return powl + + +def apply(tree: ProcessTree, parameters: Optional[Dict[Any, Any]] = None) -> POWL: + """ + Converts a process tree model to a POWL model + + Parameters + --------------- + tree + Process tree + + Returns + --------------- + powl_model + POWL model + """ + if parameters is None: + parameters = {} + + return apply_recursive(tree) diff --git a/pm4py/pm4py/objects/conversion/wf_net/__init__.py b/pm4py/pm4py/objects/conversion/wf_net/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..50963a4d916c96edc82481571b290e852f6f526c --- /dev/null +++ b/pm4py/pm4py/objects/conversion/wf_net/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.wf_net import variants, converter diff --git a/pm4py/pm4py/objects/conversion/wf_net/converter.py b/pm4py/pm4py/objects/conversion/wf_net/converter.py new file mode 100644 index 0000000000000000000000000000000000000000..c1e7e16cd0163e1dfb67eb3e6120f4d87bc8820a --- /dev/null +++ b/pm4py/pm4py/objects/conversion/wf_net/converter.py @@ -0,0 +1,32 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.conversion.wf_net.variants import to_process_tree, to_bpmn +from pm4py.util import exec_utils + + +class Variants(Enum): + TO_PROCESS_TREE = to_process_tree + TO_BPMN = to_bpmn + + +DEFAULT_VARIANT = Variants.TO_PROCESS_TREE + + +def apply(net, im, fm, variant=DEFAULT_VARIANT, parameters=None): + return exec_utils.get_variant(variant).apply(net, im, fm, parameters=parameters) diff --git a/pm4py/pm4py/objects/conversion/wf_net/variants/__init__.py b/pm4py/pm4py/objects/conversion/wf_net/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c716e3d635c764650cc1fb7d545999c4436b5282 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/wf_net/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.wf_net.variants import to_process_tree, to_bpmn diff --git a/pm4py/pm4py/objects/conversion/wf_net/variants/to_bpmn.py b/pm4py/pm4py/objects/conversion/wf_net/variants/to_bpmn.py new file mode 100644 index 0000000000000000000000000000000000000000..30c934ed393af0eb25f81a7838a5f3a3973ad1a9 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/wf_net/variants/to_bpmn.py @@ -0,0 +1,101 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def apply(net, im, fm, parameters=None): + """ + Converts an accepting Petri net into a BPMN diagram + + Parameters + -------------- + accepting_petri_net + Accepting Petri net (list containing net + im + fm) + parameters + Parameters of the algorithm + + Returns + -------------- + bpmn_graph + BPMN diagram + """ + if parameters is None: + parameters = {} + + from pm4py.objects.bpmn.obj import BPMN + from pm4py.objects.bpmn.util import reduction + + bpmn_graph = BPMN() + + entering_dictio = {} + exiting_dictio = {} + + for place in net.places: + node = BPMN.ExclusiveGateway() + bpmn_graph.add_node(node) + entering_dictio[place] = node + exiting_dictio[place] = node + + for trans in net.transitions: + if trans.label is None: + if len(trans.in_arcs) > 1: + node = BPMN.ParallelGateway(gateway_direction=BPMN.Gateway.Direction.CONVERGING) + elif len(trans.out_arcs) > 1: + node = BPMN.ParallelGateway(gateway_direction=BPMN.Gateway.Direction.DIVERGING) + else: + node = BPMN.ExclusiveGateway(gateway_direction=BPMN.Gateway.Direction.UNSPECIFIED) + bpmn_graph.add_node(node) + entering_dictio[trans] = node + exiting_dictio[trans] = node + else: + if len(trans.in_arcs) > 1: + entering_node = BPMN.ParallelGateway(gateway_direction=BPMN.Gateway.Direction.CONVERGING) + else: + entering_node = BPMN.ExclusiveGateway(gateway_direction=BPMN.Gateway.Direction.UNSPECIFIED) + + if len(trans.out_arcs) > 1: + exiting_node = BPMN.ParallelGateway(gateway_direction=BPMN.Gateway.Direction.DIVERGING) + else: + exiting_node = BPMN.ExclusiveGateway(gateway_direction=BPMN.Gateway.Direction.UNSPECIFIED) + + task = BPMN.Task(name=trans.label) + bpmn_graph.add_node(task) + + bpmn_graph.add_flow(BPMN.SequenceFlow(entering_node, task)) + bpmn_graph.add_flow(BPMN.SequenceFlow(task, exiting_node)) + + entering_dictio[trans] = entering_node + exiting_dictio[trans] = exiting_node + + for arc in net.arcs: + bpmn_graph.add_flow(BPMN.SequenceFlow(exiting_dictio[arc.source], entering_dictio[arc.target])) + + start_node = BPMN.StartEvent(name="start", isInterrupting=True) + end_node = BPMN.NormalEndEvent(name="end") + bpmn_graph.add_node(start_node) + bpmn_graph.add_node(end_node) + for place in im: + bpmn_graph.add_flow(BPMN.SequenceFlow(start_node, entering_dictio[place])) + for place in fm: + bpmn_graph.add_flow(BPMN.SequenceFlow(exiting_dictio[place], end_node)) + + bpmn_graph = reduction.apply(bpmn_graph) + + for node in bpmn_graph.get_nodes(): + node.set_process(bpmn_graph.get_process_id()) + + for edge in bpmn_graph.get_flows(): + edge.set_process(bpmn_graph.get_process_id()) + + return bpmn_graph diff --git a/pm4py/pm4py/objects/conversion/wf_net/variants/to_process_tree.py b/pm4py/pm4py/objects/conversion/wf_net/variants/to_process_tree.py new file mode 100644 index 0000000000000000000000000000000000000000..42f1b616247d884410a95b1c4250ef7b941896e1 --- /dev/null +++ b/pm4py/pm4py/objects/conversion/wf_net/variants/to_process_tree.py @@ -0,0 +1,367 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import datetime +import itertools +import uuid +from copy import deepcopy +from enum import Enum + +from pm4py.objects.petri_net.utils import petri_utils as pn_util +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.process_tree import obj as pt_operator +from pm4py.objects.process_tree.utils import generic as pt_util +from pm4py.objects.process_tree.utils.generic import tree_sort +from pm4py.util import exec_utils +from pm4py.objects.process_tree.utils.generic import parse + +TRANSITION_PREFIX = str(uuid.uuid4()) + + +class Parameters(Enum): + DEBUG = "debug" + FOLD = "fold" + + +def generate_label_for_transition(t): + return 'tau' if t.label is None else '\'' + t.label + '\'' if not t.name.startswith( + TRANSITION_PREFIX) else t.label + + +def generate_new_binary_transition(t1, t2, operator, net): + t = PetriNet.Transition(TRANSITION_PREFIX + str(datetime.datetime.now())) + t.label = str(operator) + '(' + generate_label_for_transition( + t1) + ', ' + generate_label_for_transition(t2) + ')' + return t + + +def loop_requirement(t1, t2): + if t1 == t2: + return False + for p in pn_util.pre_set(t2): + if len(pn_util.pre_set(p)) != 1: # check that the preset of the t2 preset has one entry + return False + if t1 not in pn_util.pre_set(p): # check that t1 is the unique way to mark the preset of t2 + return False + for p in pn_util.post_set(t2): + if len(pn_util.post_set(p)) != 1: + return False + if t1 not in pn_util.post_set(p): + return False + for p in pn_util.pre_set(t1): + if len(pn_util.post_set(p)) != 1: + return False + if t1 not in pn_util.post_set(p): + return False + if t2 not in pn_util.pre_set(p): # t2 has to enable t1! + return False + for p in pn_util.post_set(t1): + if len(pn_util.pre_set(p)) != 1: # check that the preset of the t2 preset has one entry + return False + if t1 not in pn_util.pre_set(p): # check that t1 is the unique way to mark the preset of t2 + return False + if t2 not in pn_util.post_set(p): + return False + return True + + +def binary_loop_detection(net): + c1 = None + c2 = None + for t1, t2 in itertools.product(net.transitions, net.transitions): + if loop_requirement(t1, t2): + c1 = t1 + c2 = t2 + break + if c1 is not None and c2 is not None: + t = generate_new_binary_transition(c1, c2, pt_operator.Operator.LOOP, net) + net.transitions.add(t) + # reduce + for a in c1.in_arcs: + pn_util.add_arc_from_to(a.source, t, net) + for a in c1.out_arcs: + pn_util.add_arc_from_to(t, a.target, net) + pn_util.remove_transition(net, c1) + pn_util.remove_transition(net, c2) + return net + return None + + +def concurrent_requirement(t1, t2): + if t1 == t2: # check if transitions different + return False + if len(pn_util.pre_set(t1)) == 0 or len(pn_util.post_set(t1)) == 0 or len(pn_util.pre_set(t2)) == 0 or len( + pn_util.post_set(t2)) == 0: # not possible in WF-net, just checking... + return False + pre_pre = set() + post_post = set() + for p in pn_util.pre_set(t1): # check if t1 is unique post of its preset + pre_pre = set.union(pre_pre, pn_util.pre_set(p)) + if len(pn_util.post_set(p)) > 1 or t1 not in pn_util.post_set(p): + return False + for p in pn_util.post_set(t1): # check if t1 is unique pre of its postset + post_post = set.union(post_post, pn_util.post_set(p)) + if len(pn_util.pre_set(p)) > 1 or t1 not in pn_util.pre_set(p): + return False + for p in pn_util.pre_set(t2): # check if t2 is unique post of its preset + pre_pre = set.union(pre_pre, pn_util.pre_set(p)) + if len(pn_util.post_set(p)) > 1 or t2 not in pn_util.post_set(p): + return False + for p in pn_util.post_set(t2): # check if t2 is unique pre of its postset + post_post = set.union(post_post, pn_util.post_set(p)) + if len(pn_util.pre_set(p)) > 1 or t2 not in pn_util.pre_set(p): + return False + for p in set.union(pn_util.pre_set(t1), pn_util.pre_set(t2)): # check if presets synchronize + for t in pre_pre: + if t not in pn_util.pre_set(p): + return False + for p in set.union(pn_util.post_set(t1), pn_util.post_set(t2)): # check if postsets synchronize + for t in post_post: + if t not in pn_util.post_set(p): + return False + return True + + +def binary_concurrency_detection(net): + c1 = None + c2 = None + for t1, t2 in itertools.product(net.transitions, net.transitions): + if concurrent_requirement(t1, t2): + c1 = t1 + c2 = t2 + break + if c1 is not None and c2 is not None: + t = generate_new_binary_transition(c1, c2, pt_operator.Operator.PARALLEL, net) + net.transitions.add(t) + # reduce + for a in c1.in_arcs: + pn_util.add_arc_from_to(a.source, t, net) + for a in c1.out_arcs: + pn_util.add_arc_from_to(t, a.target, net) + for a in c2.in_arcs: + pn_util.add_arc_from_to(a.source, t, net) + for a in c2.out_arcs: + pn_util.add_arc_from_to(t, a.target, net) + pn_util.remove_transition(net, c1) + pn_util.remove_transition(net, c2) + return net + return None + + +def choice_requirement(t1, t2): + return t1 != t2 and pn_util.pre_set(t1) == pn_util.pre_set(t2) and pn_util.post_set(t1) == pn_util.post_set( + t2) and len(pn_util.pre_set(t1)) > 0 and len( + pn_util.post_set(t1)) > 0 + + +def binary_choice_detection(net): + c1 = None + c2 = None + for t1, t2 in itertools.product(net.transitions, net.transitions): + if choice_requirement(t1, t2): + c1 = t1 + c2 = t2 + break + if c1 is not None and c2 is not None: + t = generate_new_binary_transition(c1, c2, pt_operator.Operator.XOR, net) + net.transitions.add(t) + for a in c1.in_arcs: + pn_util.add_arc_from_to(a.source, t, net) + for a in c2.out_arcs: + pn_util.add_arc_from_to(t, a.target, net) + pn_util.remove_transition(net, c1) + pn_util.remove_transition(net, c2) + return net + return None + + +def sequence_requirement(t1, t2): + if t1 == t2: + return False + if len(pn_util.pre_set(t2)) == 0: + return False + for p in pn_util.post_set(t1): + if len(pn_util.pre_set(p)) != 1 or len(pn_util.post_set(p)) != 1: + return False + if t1 not in pn_util.pre_set(p): + return False + if t2 not in pn_util.post_set(p): + return False + for p in pn_util.pre_set(t2): + if len(pn_util.pre_set(p)) != 1 or len(pn_util.post_set(p)) != 1: + return False + if t1 not in pn_util.pre_set(p): + return False + if t2 not in pn_util.post_set(p): # redundant check, just to be sure... + return False + return True + + +def binary_sequence_detection(net): + c1 = None + c2 = None + for t1, t2 in itertools.product(net.transitions, net.transitions): + if sequence_requirement(t1, t2): + c1 = t1 + c2 = t2 + break + if c1 is not None and c2 is not None: + t = generate_new_binary_transition(c1, c2, pt_operator.Operator.SEQUENCE, net) + net.transitions.add(t) + for a in c1.in_arcs: + pn_util.add_arc_from_to(a.source, t, net) + for a in c2.out_arcs: + pn_util.add_arc_from_to(t, a.target, net) + for p in pn_util.post_set(c1): + pn_util.remove_place(net, p) + pn_util.remove_transition(net, c1) + pn_util.remove_transition(net, c2) + return net + return None + + +def __group_blocks_internal(net, parameters=None): + if parameters is None: + parameters = {} + + if binary_choice_detection(net) is not None: + return True + elif binary_sequence_detection(net) is not None: + return True + elif binary_concurrency_detection(net) is not None: + return True + elif binary_loop_detection(net) is not None: + return True + else: + return False + + +def __insert_dummy_invisibles(net, im, fm, ini_places, parameters=None): + if parameters is None: + parameters = {} + + places = list(net.places) + + for p in places: + if p.name in ini_places: + if p not in im and p not in fm: + source_trans = [x.source for x in p.in_arcs] + target_trans = [x.target for x in p.out_arcs] + + pn_util.remove_place(net, p) + source_p = PetriNet.Place(str(uuid.uuid4())) + target_p = PetriNet.Place(str(uuid.uuid4())) + skip = PetriNet.Transition(str(uuid.uuid4())) + net.places.add(source_p) + net.places.add(target_p) + net.transitions.add(skip) + + pn_util.add_arc_from_to(source_p, skip, net) + pn_util.add_arc_from_to(skip, target_p, net) + + for t in source_trans: + pn_util.add_arc_from_to(t, source_p, net) + for t in target_trans: + pn_util.add_arc_from_to(target_p, t, net) + + +def group_blocks_in_net(net, parameters=None): + """ + Groups the blocks in the Petri net + + Parameters + -------------- + net + Petri net + parameters + Parameters of the algorithm + + Returns + -------------- + grouped_net + Petri net (blocks are grouped according to the algorithm) + """ + if parameters is None: + parameters = {} + + from pm4py.algo.analysis.workflow_net import algorithm as wf_eval + + if not wf_eval.apply(net): + raise ValueError('The Petri net provided is not a WF-net') + + net = deepcopy(net) + ini_places = set(x.name for x in net.places) + + while len(net.transitions) > 1: + im = Marking({p: 1 for p in net.places if len(p.in_arcs) == 0}) + fm = Marking({p: 1 for p in net.places if len(p.out_arcs) == 0}) + + if len(im) != 1 and len(fm) != 1: + # start/end conditions for block-structured nets + # do not hold + break + + if __group_blocks_internal(net, parameters): + continue + else: + __insert_dummy_invisibles(net, im, fm, ini_places, parameters) + if __group_blocks_internal(net, parameters): + continue + else: + break + + return net + + +def apply(net, im, fm, parameters=None): + """ + Transforms a WF-net to a process tree + + Parameters + ------------- + net + Petri net + im + Initial marking + fm + Final marking + + Returns + ------------- + tree + Process tree + """ + if parameters is None: + parameters = {} + + debug = exec_utils.get_param_value(Parameters.DEBUG, parameters, False) + fold = exec_utils.get_param_value(Parameters.FOLD, parameters, True) + + grouped_net = group_blocks_in_net(net, parameters=parameters) + + if debug: + from pm4py.visualization.petri_net import visualizer as pn_viz + pn_viz.view(pn_viz.apply(grouped_net, parameters={"format": "svg"})) + return grouped_net + else: + if len(grouped_net.transitions) == 1: + pt_str = list(grouped_net.transitions)[0].label + pt = parse(pt_str) + ret = pt_util.fold(pt) if fold else pt + tree_sort(ret) + return ret + else: + raise ValueError('Parsing of WF-net Failed') diff --git a/pm4py/pm4py/objects/dfg/__init__.py b/pm4py/pm4py/objects/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a51f6c5064128b24bca2a3f2e060f2aed5ec768d --- /dev/null +++ b/pm4py/pm4py/objects/dfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.dfg import obj, importer, exporter, utils diff --git a/pm4py/pm4py/objects/dfg/exporter/__init__.py b/pm4py/pm4py/objects/dfg/exporter/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bec3a8265e6ee921cb9136d69c5f0787ea1d5cc8 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/exporter/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.dfg.exporter import variants, exporter diff --git a/pm4py/pm4py/objects/dfg/exporter/exporter.py b/pm4py/pm4py/objects/dfg/exporter/exporter.py new file mode 100644 index 0000000000000000000000000000000000000000..b8b55297341e6e4c08a7d56ea13f86856ff06983 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/exporter/exporter.py @@ -0,0 +1,71 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.dfg.exporter.variants import classic +from pm4py.util import exec_utils + + +class Variants(Enum): + CLASSIC = classic + + +DEFAULT_VARIANT = Variants.CLASSIC + + +def apply(dfg, output_path, variant=DEFAULT_VARIANT, parameters=None): + """ + Exports a DFG + + Parameters + --------------- + dfg + Directly-Follows Graph + output_path + Output path + variant + Variants of the exporter, possible values: + - Variants.CLASSIC: exporting to a .dfg file + parameters + Variant-specific parameters + """ + exec_utils.get_variant(variant).apply(dfg, output_path, parameters=parameters) + + +def serialize(dfg, variant=DEFAULT_VARIANT, parameters=None): + """ + Serializes a DFG object into a binary string + + Parameters + -------------- + dfg + DFG + variant + Variants of the exporter, possible values: + - Variants.CLASSIC: exporting to a .dfg file + parameters + Variant-specific parameters + + Returns + -------------- + serialization + String that represents the DFG + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).export_as_string(dfg, parameters=parameters) diff --git a/pm4py/pm4py/objects/dfg/exporter/variants/__init__.py b/pm4py/pm4py/objects/dfg/exporter/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c07aa0d9f659ec35f89bd13bdb532f2976fdb169 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/exporter/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.dfg.exporter.variants import classic diff --git a/pm4py/pm4py/objects/dfg/exporter/variants/classic.py b/pm4py/pm4py/objects/dfg/exporter/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..e7bf5f0cacbd2bd045ee8f99e5685bed6200a5cb --- /dev/null +++ b/pm4py/pm4py/objects/dfg/exporter/variants/classic.py @@ -0,0 +1,138 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils +from enum import Enum +from collections import Counter +from pm4py.objects.dfg.utils import dfg_utils +from pm4py.util import constants + + +class Parameters(Enum): + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + ENCODING = "encoding" + + +def export_line_by_line(dfg, parameters=None): + """ + Exports a DFG into the .dfg format + - Line by line yielding + + Parameters + -------------- + dfg + DFG + parameters + Parameters of the algorithm + + Returns + -------------- + line + Lines of the .dfg file (yielded one-by-one) + """ + if parameters is None: + parameters = {} + + start_activities = exec_utils.get_param_value(Parameters.START_ACTIVITIES, parameters, + Counter(dfg_utils.infer_start_activities(dfg))) + end_activities = exec_utils.get_param_value(Parameters.END_ACTIVITIES, parameters, + Counter(dfg_utils.infer_end_activities(dfg))) + + if len(start_activities) == 0: + raise Exception( + "error: impossible to determine automatically the start activities from the DFG. Please specify them manually through the START_ACTIVITIES parameter") + + if len(end_activities) == 0: + raise Exception( + "error: impossible to determine automatically the end activities from the DFG. Please specify them manually through the END_ACTIVITIES parameter") + + activities = list(set(x[0] for x in dfg).union(set(x[1] for x in dfg))) + + yield "%d\n" % (len(activities)) + for act in activities: + yield "%s\n" % (act) + + yield "%d\n" % (len(start_activities)) + for act, count in start_activities.items(): + yield "%dx%d\n" % (activities.index(act), count) + + yield "%d\n" % (len(end_activities)) + for act, count in end_activities.items(): + yield "%dx%d\n" % (activities.index(act), count) + + for el, count in dfg.items(): + yield "%d>%dx%d\n" % (activities.index(el[0]), activities.index(el[1]), count) + + +def apply(dfg, output_path, parameters=None): + """ + Exports a DFG into a .dfg file + + Parameters + ---------------- + dfg + Directly-Follows Graph + output_path + Output path + parameters + Parameters of the algorithm, including: + Parameters.START_ACTIVITIES => Start activities of the DFG + Parameters.END_ACTIVITIES => End activities of the DFG + Parameters.ENCODING => The encoding to be used (default: utf-8) + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + F = open(output_path, "wb") + for row in export_line_by_line(dfg, parameters=parameters): + F.write(row.encode(encoding)) + F.close() + + +def export_as_string(dfg, parameters=None): + """ + Exports a DFG as a string + + Parameters + -------------- + dfg + Directly-Follows Graph + parameters + Parameters of the algorithm, including: + Parameters.START_ACTIVITIES => Start activities of the DFG + Parameters.END_ACTIVITIES => End activities of the DFG + Parameters.ENCODING => The encoding to be used (default: utf-8) + + Returns + -------------- + binary_string + Binary string + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + ret = [] + for row in export_line_by_line(dfg, parameters=parameters): + ret.append(row) + ret = "".join(ret) + ret = ret.encode(encoding) + + return ret diff --git a/pm4py/pm4py/objects/dfg/filtering/__init__.py b/pm4py/pm4py/objects/dfg/filtering/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/filtering/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/objects/dfg/filtering/dfg_filtering.py b/pm4py/pm4py/objects/dfg/filtering/dfg_filtering.py new file mode 100644 index 0000000000000000000000000000000000000000..27648ee52fa80766ea65bd024e8aa0e63ae55013 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/filtering/dfg_filtering.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.filtering.dfg.dfg_filtering import * diff --git a/pm4py/pm4py/objects/dfg/importer/__init__.py b/pm4py/pm4py/objects/dfg/importer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..eb316264ab6d06ecf861e085a435076462c8ebd2 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/importer/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.dfg.importer import importer, variants diff --git a/pm4py/pm4py/objects/dfg/importer/importer.py b/pm4py/pm4py/objects/dfg/importer/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..ab1aded8105c6344dceb2cabe436b1084f7f32d6 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/importer/importer.py @@ -0,0 +1,79 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.dfg.importer.variants import classic +from pm4py.util import exec_utils + + +class Variants(Enum): + CLASSIC = classic + + +DEFAULT_VARIANT = Variants.CLASSIC + + +def apply(file_path, variant=DEFAULT_VARIANT, parameters=None): + """ + Import a DFG (along with the start and end activities) + + Parameters + -------------- + file_path + Path of the DFG file + variant + Variant of the importer, possible values: + - Variants.CLASSIC: importing from a .dfg file + parameters + Possible parameters of the algorithm + + Returns + -------------- + dfg + DFG + start_activities + Start activities + end_activities + End activities + """ + return exec_utils.get_variant(variant).apply(file_path, parameters=parameters) + + +def deserialize(dfg_string, variant=DEFAULT_VARIANT, parameters=None): + """ + Import a DFG from a binary/textual string + + Parameters + -------------- + dfg_string + DFG represented as a string in the .dfg format + variant + Variant of the importer, possible values: + - Variants.CLASSIC: importing from a .dfg file + parameters + Possible parameters of the algorithm + + Returns + -------------- + dfg + DFG + start_activities + Start activities + end_activities + End activities + """ + return exec_utils.get_variant(variant).import_dfg_from_string(dfg_string, parameters=parameters) diff --git a/pm4py/pm4py/objects/dfg/importer/variants/__init__.py b/pm4py/pm4py/objects/dfg/importer/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..29365d9cb2190cd1a126b982b655be5e3bcc50d5 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/importer/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.dfg.importer.variants import classic diff --git a/pm4py/pm4py/objects/dfg/importer/variants/classic.py b/pm4py/pm4py/objects/dfg/importer/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..e55de1a28f05911c310fac79b3eff7bcce2ca6cf --- /dev/null +++ b/pm4py/pm4py/objects/dfg/importer/variants/classic.py @@ -0,0 +1,156 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import constants, exec_utils +from io import StringIO +from enum import Enum + + +class Parameters(Enum): + ENCODING = "encoding" + + +def import_dfg_from_rows(rows, parameters=None): + """ + Import a DFG (along with the start and end activities) from the rows of a .dfg file + + Parameters + -------------- + rows + Rows the DFG file + parameters + Possible parameters of the algorithm + + Returns + -------------- + dfg + DFG + start_activities + Start activities + end_activities + End activities + """ + if parameters is None: + parameters = {} + + activities = [] + start_activities = {} + end_activities = {} + dfg = {} + + num_activities = int(rows[0]) + i = 1 + while i <= num_activities: + activities.append(rows[i].strip()) + i = i + 1 + + num_sa = int(rows[i]) + + target = i + num_sa + i = i + 1 + + while i <= target: + act, count = rows[i].strip().split("x") + act = activities[int(act)] + count = int(count) + start_activities[act] = count + i = i + 1 + + num_ea = int(rows[i]) + + target = i + num_ea + i = i + 1 + + while i <= target: + act, count = rows[i].strip().split("x") + act = activities[int(act)] + count = int(count) + end_activities[act] = count + i = i + 1 + + while i < len(rows): + acts, count = rows[i].strip().split("x") + count = int(count) + a1, a2 = acts.split(">") + a1 = activities[int(a1)] + a2 = activities[int(a2)] + dfg[(a1, a2)] = count + i = i + 1 + + return dfg, start_activities, end_activities + + +def apply(file_path, parameters=None): + """ + Import a DFG (along with the start and end activities) from a .dfg file + + Parameters + -------------- + file_path + Path of the DFG file + parameters + Possible parameters of the algorithm + + Returns + -------------- + dfg + DFG + start_activities + Start activities + end_activities + End activities + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + F = open(file_path, "r", encoding=encoding) + content = F.readlines() + F.close() + + return import_dfg_from_rows(content, parameters=parameters) + + +def import_dfg_from_string(dfg_string, parameters=None): + """ + Import a DFG (along with the start and end activities) from a string representing a .dfg file + + Parameters + -------------- + dfg_string + String representing a .dfg file + parameters + Possible parameters of the algorithm + + Returns + -------------- + dfg + DFG + start_activities + Start activities + end_activities + End activities + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + if type(dfg_string) is bytes: + dfg_string = dfg_string.decode(encoding) + + return import_dfg_from_rows(StringIO(dfg_string).readlines(), parameters=parameters) diff --git a/pm4py/pm4py/objects/dfg/obj.py b/pm4py/pm4py/objects/dfg/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..3829fb01a067fce7797fc8c1159bca41b6a559c7 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/obj.py @@ -0,0 +1,58 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from typing import Tuple, Any, Counter as TCounter + + +class DirectlyFollowsGraph: + + def __init__(self, graph=None, start_activities=None, end_activities=None): + if graph is None: + graph = {} + if start_activities is None: + start_activities = {} + if end_activities is None: + end_activities = {} + self._graph = Counter(graph) + self._start_activities = Counter(start_activities) + self._end_activities = Counter(end_activities) + + @property + def graph(self) -> TCounter[Tuple[Any, Any]]: + return self._graph + + @property + def start_activities(self) -> TCounter[Any]: + return self._start_activities + + @property + def end_activities(self) -> TCounter[Any]: + return self._end_activities + + def __repr__(self): + return repr(self._graph) + + def __str__(self): + return str(self._graph) + + def __iter__(self): + yield dict(self.graph) + yield dict(self.start_activities) + yield dict(self.end_activities) + + +DFG = DirectlyFollowsGraph diff --git a/pm4py/pm4py/objects/dfg/retrieval/__init__.py b/pm4py/pm4py/objects/dfg/retrieval/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/retrieval/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/objects/dfg/retrieval/log.py b/pm4py/pm4py/objects/dfg/retrieval/log.py new file mode 100644 index 0000000000000000000000000000000000000000..ceb60a814c67328572e62ec3411f759a297b7068 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/retrieval/log.py @@ -0,0 +1,19 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.variants.freq_triples import * +from pm4py.algo.discovery.dfg.variants.native import * +from pm4py.algo.discovery.dfg.variants.performance import * diff --git a/pm4py/pm4py/objects/dfg/retrieval/pandas.py b/pm4py/pm4py/objects/dfg/retrieval/pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..dd2696ff860d65dbd510e54202687cfa2e2bc601 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/retrieval/pandas.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.adapters.pandas.df_statistics import * +from pm4py.algo.discovery.dfg.adapters.pandas.freq_triples import * diff --git a/pm4py/pm4py/objects/dfg/util.py b/pm4py/pm4py/objects/dfg/util.py new file mode 100644 index 0000000000000000000000000000000000000000..3fed580e2d649f844456a89089f2e7ca276231d9 --- /dev/null +++ b/pm4py/pm4py/objects/dfg/util.py @@ -0,0 +1,158 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from typing import Dict, Collection, Any, Tuple + +from pm4py.util import nx_utils + +from pm4py.objects.dfg.obj import DFG + + +def get_vertices(dfg: DFG) -> Collection[Any]: + """ + Returns the vertices of the dfg + + :param dfg: input directly follows graph + + :rtype: ``Collection[Any]`` + """ + alphabet = set() + [alphabet.update({a, b}) for (a, b) in dfg.graph] + [alphabet.update({a}) for a in dfg.start_activities] + [alphabet.update({a}) for a in dfg.end_activities] + return alphabet + + +def get_outgoing_arcs(dfg: DFG) -> Dict[Any, Dict[Any, int]]: + """ + Returns the outgoing arcs of the provided DFG graph. + Returns a dictionary mapping each 'source' node onto its set of 'target' nodes and associated frequency. + + :param dfg: ``DFG`` object + + :rtype: ``Dict[str, Counter[str]]`` + + """ + outgoing = {a: Counter() for a in get_vertices(dfg)} + for (a, b) in dfg.graph: + outgoing[a][b] = dfg.graph[(a, b)] if b not in outgoing[a] else outgoing[a][b] + dfg.graph[(a, b)] + return outgoing + + +def get_incoming_arcs(dfg: DFG) -> Dict[Any, Dict[Any, int]]: + """ + Returns the incoming arcs of the provided DFG graph. + Returns a dictionary mapping each 'target' node onto its set of 'source' nodes and associated frequency. + + :param dfg: ``DFG`` object + + :rtype: ``Dict[str, Counter[str]]`` + + """ + incoming = {a: Counter() for a in get_vertices(dfg)} + for (a, b) in dfg.graph: + incoming[b][a] = dfg.graph[(a, b)] if a not in incoming[b] else incoming[b][a] + dfg.graph[(a, b)] + return incoming + + +def get_source_vertices(dfg: DFG) -> Collection[Any]: + """ + Gets source vertices from a Directly-Follows Graph. + Vertices are returned that have no incoming arcs + + :param dfg: ``DFG`` object + + :rtype: ``Collection[Any]`` + """ + starters = set() + incoming = get_incoming_arcs(dfg) + [starters.add(a) for a in incoming if len(incoming[a]) == 0] + return starters + + +def get_sink_vertices(dfg: DFG) -> Collection[Any]: + """ + Gets sink vertices from a Directly-Follows Graph. + Vertices are returned that have no outgoing arcs + + :param dfg: ``DFG`` object + + :rtype: ``Collection[Any]`` + """ + ends = set() + outgoing = get_outgoing_arcs(dfg) + [ends.add(a) for a in outgoing if len(outgoing[a]) == 0] + return ends + + +def get_transitive_relations(dfg: DFG) -> Tuple[Dict[Any, Collection[Any]], Dict[Any, Collection[Any]]]: + ''' + Computes the full transitive relations in both directions (all activities reachable from a given activity and all + activities that can reach the activity) + + :param dfg: ``DFG`` object + + :rtype: ``Tuple[Dict[Any, Collection[Any]], Dict[Any, Collection[Any]]] first argument maps an activity on all other + activities that are able to reach the activity ('transitive pre set') + second argument maps an activity on all other activities that it can reach (transitively) ('transitive post set') + ''' + G = nx_utils.DiGraph() + alph = get_vertices(dfg) + + for act in alph: + G.add_node(act) + + for edge in dfg.graph: + G.add_edge(edge[0], edge[1]) + + pre = {} + post = {} + + for a in alph: + pre[a] = nx_utils.ancestors(G, a) + post[a] = nx_utils.descendants(G, a) + + return pre, post + + +def get_vertex_frequencies(dfg: DFG) -> Dict[Any, int]: + ''' + Computes the number of times a vertex in the dfg is visited. + The number equals the number of occurrences in the underlying log and is computed by summing up the incoming + arc frequency and the number of starts in the vertex. The value is equal to the number of outgoing arcs combined + with the number of endings of the vertex. + ''' + c = Counter() + for v in get_vertices(dfg): + c[v] = 0 + for (a, b) in dfg.graph: + c[a] += dfg.graph[(a, b)] + for a in dfg.start_activities: + c[a] += dfg.start_activities[a] + return c + + +def as_nx_graph(dfg: DFG): + nx_graph = nx_utils.DiGraph() + nx_graph.add_nodes_from(get_vertices(dfg)) + for a, b in dfg.graph: + nx_graph.add_edge(a, b) + return nx_graph + + +def get_edges(dfg: DFG) -> Collection[Tuple[Any, Any]]: + return dfg.graph.keys() diff --git a/pm4py/pm4py/objects/dfg/utils/__init__.py b/pm4py/pm4py/objects/dfg/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5ab069220033f99466a831b8b21290b58a24d33c --- /dev/null +++ b/pm4py/pm4py/objects/dfg/utils/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.dfg.utils import dfg_utils diff --git a/pm4py/pm4py/objects/dfg/utils/dfg_utils.py b/pm4py/pm4py/objects/dfg/utils/dfg_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..57a473ad035d0e273fcfb2d5c1d20344d040ae2b --- /dev/null +++ b/pm4py/pm4py/objects/dfg/utils/dfg_utils.py @@ -0,0 +1,945 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from copy import copy + +import numpy as np + +from pm4py.util import variants_util, nx_utils + + +def get_outgoing_edges(dfg): + """ + Gets outgoing edges of the provided DFG graph + """ + outgoing = {} + for el in dfg: + if type(el[0]) is str: + if not el[0] in outgoing: + outgoing[el[0]] = {} + outgoing[el[0]][el[1]] = dfg[el] + else: + if not el[0][0] in outgoing: + outgoing[el[0][0]] = {} + outgoing[el[0][0]][el[0][1]] = el[1] + return outgoing + + +def get_ingoing_edges(dfg): + """ + Get ingoing edges of the provided DFG graph + """ + ingoing = {} + for el in dfg: + if type(el[0]) is str: + if not el[1] in ingoing: + ingoing[el[1]] = {} + ingoing[el[1]][el[0]] = dfg[el] + else: + if not el[0][1] in ingoing: + ingoing[el[0][1]] = {} + ingoing[el[0][1]][el[0][0]] = el[1] + return ingoing + + +def infer_start_activities(dfg): + """ + Infer start activities from a Directly-Follows Graph + + Parameters + ---------- + dfg + Directly-Follows Graph + + Returns + ---------- + start_activities + Start activities in the log + """ + ingoing = get_ingoing_edges(dfg) + outgoing = get_outgoing_edges(dfg) + + start_activities = [] + + for act in outgoing: + if act not in ingoing: + start_activities.append(act) + + return start_activities + + +def infer_end_activities(dfg): + """ + Infer end activities from a Directly-Follows Graph + + Parameters + ---------- + dfg + Directly-Follows Graph + + Returns + ---------- + end_activities + End activities in the log + """ + ingoing = get_ingoing_edges(dfg) + outgoing = get_outgoing_edges(dfg) + + end_activities = [] + + for act in ingoing: + if act not in outgoing: + end_activities.append(act) + + return end_activities + + +def infer_start_activities_from_prev_connections_and_current_dfg(initial_dfg, dfg, activities, include_self=True): + """ + Infer the start activities from the previous connections + + Parameters + ----------- + initial_dfg + Initial DFG + dfg + Directly-follows graph + activities + List of the activities contained in DFG + """ + start_activities = set() + for el in initial_dfg: + if el[0][1] in activities and not el[0][0] in activities: + start_activities.add(el[0][1]) + if include_self: + start_activities = start_activities.union( + set(infer_start_activities(dfg))) + return start_activities + + +def infer_end_activities_from_succ_connections_and_current_dfg(initial_dfg, dfg, activities, include_self=True): + """ + Infer the end activities from the previous connections + + Parameters + ----------- + initial_dfg + Initial DFG + dfg + Directly-follows graph + activities + List of the activities contained in DFG + """ + end_activities = set() + for el in initial_dfg: + if el[0][0] in activities and not el[0][1] in activities: + end_activities.add(el[0][0]) + if include_self: + end_activities = end_activities.union(set(infer_end_activities(dfg))) + return end_activities + + +def get_outputs_of_outside_activities_going_to_start_activities(initial_dfg, dfg, activities): + """ + Get outputs of outside activities going to start activities + + Parameters + ------------ + initial_dfg + Initial DFG + dfg + Directly-follows graph + activities + Activities contained in the DFG + """ + outputs = set() + start_activities = infer_start_activities_from_prev_connections_and_current_dfg(initial_dfg, dfg, activities, + include_self=False) + outside_activities_going_to_start_activities = set() + for el in initial_dfg: + if el[0][0] not in activities and el[0][1] in start_activities: + outside_activities_going_to_start_activities.add(el[0][0]) + for el in initial_dfg: + if el[0][0] in outside_activities_going_to_start_activities and not el[0][1] in activities: + outputs.add(el[0][1]) + outputs = outputs - outside_activities_going_to_start_activities + return outputs + + +def get_inputs_of_outside_activities_reached_by_end_activities(initial_dfg, dfg, activities): + """ + Get inputs of outside activities going to start activities + + Parameters + ------------ + initial_dfg + Initial DFG + dfg + Directly-follows graph + activities + Activities contained in the DFG + """ + inputs = set() + end_activities = infer_end_activities_from_succ_connections_and_current_dfg(initial_dfg, dfg, activities, + include_self=False) + input_activities_reached_by_end_activities = set() + for el in initial_dfg: + if el[0][1] not in activities and el[0][0] in end_activities: + input_activities_reached_by_end_activities.add(el[0][1]) + for el in initial_dfg: + if el[0][1] in input_activities_reached_by_end_activities and not el[0][0] in activities: + inputs.add(el[0][0]) + inputs = inputs - input_activities_reached_by_end_activities + + return inputs + + +def get_activities_from_dfg(dfg): + """ + Get the list of attributes directly from DFG graph + + Parameters + ----------- + dfg + Directly-Follows graph + + Returns + ----------- + list_activities + List of activities that are present in the DFG graph + """ + set_activities = set() + for el in dfg: + if type(el[0]) is str: + set_activities.add(el[0]) + set_activities.add(el[1]) + else: + set_activities.add(el[0][0]) + set_activities.add(el[0][1]) + list_activities = sorted(list(set_activities)) + + return list_activities + + +def get_max_activity_count(dfg, act): + """ + Get maximum count of an ingoing/outgoing edge related to an activity + + Parameters + ------------ + dfg + Directly-Follows graph + act + Activity + + Returns + ------------ + max_value + Maximum count of ingoing/outgoing edges to attributes + """ + ingoing = get_ingoing_edges(dfg) + outgoing = get_outgoing_edges(dfg) + max_value = -1 + if act in ingoing: + for act2 in ingoing[act]: + if ingoing[act][act2] > max_value: + max_value = ingoing[act][act2] + if act in outgoing: + for act2 in outgoing[act]: + if outgoing[act][act2] > max_value: + max_value = outgoing[act][act2] + return max_value + + +def sum_ingoutg_val_activ(dictio, activity): + """ + Gets the sum of ingoing/outgoing values of an activity + + Parameters + ----------- + dictio + Dictionary + activity + Current examined activity + + Returns + ----------- + summ + """ + summ = 0 + for act2 in dictio[activity]: + summ += dictio[activity][act2] + return summ + + +def max_occ_all_activ(dfg): + """ + Get maximum ingoing/outgoing sum of values related to attributes in DFG graph + """ + ingoing = get_ingoing_edges(dfg) + outgoing = get_outgoing_edges(dfg) + max_value = -1 + + for act in ingoing: + summ = sum_ingoutg_val_activ(ingoing, act) + if summ > max_value: + max_value = summ + + for act in outgoing: + summ = sum_ingoutg_val_activ(outgoing, act) + if summ > max_value: + max_value = summ + + return max_value + + +def max_occ_among_specif_activ(dfg, activities): + """ + Get maximum ingoing/outgoing sum of values related to attributes in DFG graph + (here attributes to consider are specified) + """ + ingoing = get_ingoing_edges(dfg) + outgoing = get_outgoing_edges(dfg) + max_value = -1 + + for act in activities: + if act in ingoing: + summ = sum_ingoutg_val_activ(ingoing, act) + if summ > max_value: + max_value = summ + if act in outgoing: + summ = sum_ingoutg_val_activ(outgoing, act) + if summ > max_value: + max_value = summ + + return max_value + + +def sum_start_activities_count(dfg): + """ + Gets the sum of start attributes count inside a DFG + + Parameters + ------------- + dfg + Directly-Follows graph + + Returns + ------------- + Sum of start attributes count + """ + ingoing = get_ingoing_edges(dfg) + outgoing = get_outgoing_edges(dfg) + + sum_values = 0 + + for act in outgoing: + if act not in ingoing: + for act2 in outgoing[act]: + sum_values += outgoing[act][act2] + + return sum_values + + +def sum_end_activities_count(dfg): + """ + Gets the sum of end attributes count inside a DFG + + Parameters + ------------- + dfg + Directly-Follows graph + + Returns + ------------- + Sum of start attributes count + """ + ingoing = get_ingoing_edges(dfg) + outgoing = get_outgoing_edges(dfg) + + sum_values = 0 + + for act in ingoing: + if act not in outgoing: + for act2 in ingoing[act]: + sum_values += ingoing[act][act2] + + return sum_values + + +def sum_activities_count(dfg, activities, enable_halving=True): + """ + Gets the sum of specified attributes count inside a DFG + + Parameters + ------------- + dfg + Directly-Follows graph + activities + Activities to sum + enable_halving + Halves the sum in specific occurrences + + Returns + ------------- + Sum of start attributes count + """ + ingoing = get_ingoing_edges(dfg) + outgoing = get_outgoing_edges(dfg) + + sum_values = 0 + + for act in activities: + if act in outgoing: + for act2 in outgoing[act]: + sum_values += outgoing[act][act2] + if act in ingoing: + for act2 in ingoing[act]: + sum_values += ingoing[act][act2] + if enable_halving: + if act in ingoing and act in outgoing: + sum_values = int(sum_values / 2) + + return sum_values + + +def filter_dfg_on_act(dfg, listact): + """ + Filter a DFG graph on a list of attributes + (to produce a projected DFG graph) + + Parameters + ----------- + dfg + Current DFG graph + listact + List of attributes to filter on + """ + new_dfg = [] + for el in dfg: + if el[0][0] in listact and el[0][1] in listact: + new_dfg.append(el) + return new_dfg + + +def negate(dfg): + """ + Negate relationship in the DFG graph + + Parameters + ---------- + dfg + Directly-Follows graph + + Returns + ---------- + negated_dfg + Negated Directly-Follows graph (for parallel cut detection) + """ + negated_dfg = [] + + outgoing = get_outgoing_edges(dfg) + + for el in dfg: + if not (el[0][1] in outgoing and el[0][0] in outgoing[el[0][1]]): + negated_dfg.append(el) + + return negated_dfg + + +def get_activities_direction(dfg, activities): + """ + Calculate activities direction (in a similar way to Heuristics Miner) + + Parameters + ----------- + dfg + Directly-follows graph + activities + (if provided) activities of the subtree + + Returns + ----------- + direction + Dictionary that contains for each direction a number that goes from -1 (all ingoing edges) + to 1 (all outgoing edges) + """ + + if activities is None: + activities = get_activities_from_dfg(dfg) + + ingoing_list = get_ingoing_edges(dfg) + outgoing_list = get_outgoing_edges(dfg) + + direction = {} + for act in activities: + outgoing = 0 + ingoing = 0 + if act in outgoing_list: + outgoing = sum(list(outgoing_list[act].values())) + if act in ingoing_list: + ingoing = sum(list(ingoing_list[act].values())) + dependency = (outgoing - ingoing) / (ingoing + outgoing + 1) + direction[act] = dependency + return direction + + +def get_activities_dirlist(activities_direction): + """ + Form an ordered list out of a dictionary that contains for each activity + the direction (going from -1 if all ingoing edges, to 1 if all outgoing edges) + + Parameters + ----------- + activities_direction + Dictionary that contains for each direction a number that goes from -1 (all ingoing edges) + to 1 (all outgoing edges) + + Returns + ---------- + dirlist + Sorted list of couples of activity plus the direction + """ + dirlist = [] + for act in activities_direction: + dirlist.append([act, activities_direction[act]]) + dirlist = sorted(dirlist, key=lambda x: (x[1], x[0]), reverse=True) + return dirlist + + +def get_activities_self_loop(dfg): + """ + Get attributes that are in self-loop in this subtree + + Parameters + ---------- + dfg + Directly-follows graph + + Returns + ---------- + self_loop_act + Activities of the graph that are in subloop + """ + self_loop_act = [] + + outgoing = get_outgoing_edges(dfg) + + for act in outgoing: + if act in list(outgoing[act].keys()): + self_loop_act.append(act) + return self_loop_act + + +def get_connected_components(ingoing, outgoing, activities, force_insert_missing_acti=True): + """ + Get connected components in the DFG graph + + Parameters + ----------- + ingoing + Ingoing attributes + outgoing + Outgoing attributes + activities + Activities to consider + force_insert_missing_acti + Force the insertion of a missing activity + """ + activities_considered = set() + + connected_components = [] + + for act in ingoing: + ingoing_act = set(ingoing[act].keys()) + if act in outgoing: + ingoing_act = ingoing_act.union(set(outgoing[act].keys())) + + ingoing_act.add(act) + + if ingoing_act not in connected_components: + connected_components.append(ingoing_act) + activities_considered = activities_considered.union( + set(ingoing_act)) + + for act in outgoing: + if act not in ingoing: + outgoing_act = set(outgoing[act].keys()) + outgoing_act.add(act) + if outgoing_act not in connected_components: + connected_components.append(outgoing_act) + activities_considered = activities_considered.union( + set(outgoing_act)) + + if force_insert_missing_acti: + for activ in activities: + if activ not in activities_considered: + added_set = set() + added_set.add(activ) + connected_components.append(added_set) + activities_considered.add(activ) + + max_it = len(connected_components) + for it in range(max_it - 1): + something_changed = False + + old_connected_components = copy(connected_components) + connected_components = [] + + for i in range(len(old_connected_components)): + conn1 = old_connected_components[i] + + if conn1 is not None: + for j in range(i + 1, len(old_connected_components)): + conn2 = old_connected_components[j] + if conn2 is not None: + inte = conn1.intersection(conn2) + + if len(inte) > 0: + conn1 = conn1.union(conn2) + something_changed = True + old_connected_components[j] = None + + if conn1 is not None and conn1 not in connected_components: + connected_components.append(conn1) + + if not something_changed: + break + + if len(connected_components) == 0: + for activity in activities: + connected_components.append([activity]) + + return connected_components + + +def add_to_most_probable_component(comps, act2, ingoing, outgoing): + """ + Adds a lost component in parallel cut detection to the most probable component + + Parameters + ------------- + comps + Connected components + act2 + Activity that has been missed + ingoing + Map of ingoing attributes + outgoing + Map of outgoing attributes + + Returns + ------------- + comps + Fixed connected components + """ + sums = [] + idx_max_sum = 0 + + for comp in comps: + summ = 0 + for act1 in comp: + if act1 in ingoing and act2 in ingoing[act1]: + summ = summ + ingoing[act1][act2] + if act1 in outgoing and act2 in outgoing[act1]: + summ = summ + outgoing[act1][act2] + sums.append(summ) + if sums[-1] > sums[idx_max_sum]: + idx_max_sum = len(sums) - 1 + + comps[idx_max_sum].add(act2) + + return comps + + +def get_all_activities_connected_as_output_to_activity(dfg, activity): + """ + Gets all the activities that are connected as output to a given activity + + Parameters + ------------- + dfg + Directly-follows graph + activity + Activity + + Returns + ------------- + all_activities + All activities connected as output to a given activity + """ + all_activities = set() + + for el in dfg: + if el[0][0] == activity: + all_activities.add(el[0][1]) + + return all_activities + + +def get_all_activities_connected_as_input_to_activity(dfg, activity): + """ + Gets all the activities that are connected as input to a given activity + + Parameters + ------------ + dfg + Directly-follows graph + activity + Activity + + Returns + ------------ + all_activities + All activities connected as input to a given activities + """ + all_activities = set() + for el in dfg: + if el[0][1] == activity: + all_activities.add(el[0][0]) + return all_activities + + +def get_dfg_np_matrix(dfg): + """ + Gets a Numpy matrix describing the DFG graph, along with a dictionary + making correspondence between indexes and activities names + + Parameters + ------------- + dfg + Directly-Follows graph + + Returns + ------------- + matrix + Matrix describing the DFG + index_corresp + Dictionary making correspondence between indexes and activities names + """ + activities_in_dfg = get_activities_from_dfg(dfg) + matrix = np.zeros((len(activities_in_dfg), len(activities_in_dfg))) + + for el in dfg: + if type(el[0]) is str: + # manage DFG expressed as dictionary (the key is a tuple) + first_el = el[0] + second_el = el[1] + n_occ = dfg[el] + else: + # manage DFG expressed as list of: ((act0, act1), count) + first_el = el[0][0] + second_el = el[0][1] + n_occ = el[1] + act_ind_0 = activities_in_dfg.index(first_el) + act_ind_1 = activities_in_dfg.index(second_el) + matrix[act_ind_0, act_ind_1] = n_occ + + index_corresp = {} + for index, act in enumerate(activities_in_dfg): + index_corresp[index] = act + + return matrix, index_corresp + + +def get_dfg_sa_ea_act_from_variants(variants, parameters=None): + """ + Gets the DFG, the start and end activities, and the activities + from the dictionary/set/list of variants in the log + + Parameters + --------------- + variants + Dictionary/set/list of variants + parameters + Parameters of the algorithm, including: + - variants_sep: the delimiter splitting activities in a variant + + Returns + -------------- + dfg + DFG + list_act + List of different activities + start_activities + Start activities + end_activities + End activities + """ + if parameters is None: + parameters = {} + variants = set(variants_util.get_activities_from_variant(v) + for v in variants) + dfg = dict(Counter(list((x[i], x[i + 1]) + for x in variants for i in range(len(x) - 1)))) + list_act = list(set(y for x in variants for y in x)) + start_activities = dict(Counter(x[0] for x in variants if x)) + end_activities = dict(Counter(x[-1] for x in variants if x)) + return dfg, list_act, start_activities, end_activities + + +def transform_dfg_to_directed_nx_graph(dfg, activities=None): + """ + Transform DFG to directed NetworkX graph + + Returns + ------------ + G + NetworkX digraph + nodes_map + Correspondence between digraph nodes and activities + """ + if activities is None: + activities = get_activities_from_dfg(dfg) + + G = nx_utils.DiGraph() + for act in activities: + G.add_node(act) + for el in dfg: + act1 = el[0][0] + act2 = el[0][1] + G.add_edge(act1, act2) + return G + + +def get_successors(dfg, activities_model=None): + """ + Gets the successors of any node of the DFG graph + + Parameters + ---------------- + dfg + DFG + activities_model + Activities of the process model (if None, it is inferred from the process model) + + Returns + ----------------- + successors + Dictionary associating to each node all the descendants + """ + if activities_model is None: + activities_model = set(x[0] for x in dfg).union(set(x[1] for x in dfg)) + prev = {x: set() for x in activities_model} + curr = {x: set() for x in activities_model} + changed = {x: True for x in activities_model} + for x in dfg: + curr[x[0]].add(x[1]) + sthing_diff = True + while sthing_diff: + sthing_diff = False + diff = {} + for x in prev: + if changed[x]: + this_diff = curr[x].difference(prev[x]) + if this_diff: + sthing_diff = True + else: + changed[x] = False + diff[x] = this_diff + prev = copy(curr) + for x in diff: + if changed[x]: + for y in diff[x]: + curr[x] = curr[x].union(curr[y]) + return curr + + +def get_predecessors(dfg, activities_model=None): + """ + Gets the predecessors of any node of the DFG graph + + Parameters + ---------------- + dfg + DFG + activities_model + Activities of the process model (if None, it is inferred from the process model) + + Returns + ----------------- + predecessors + Dictionary associating to each node all the ascendants + """ + if activities_model is None: + activities_model = set(x[0] for x in dfg).union(set(x[1] for x in dfg)) + prev = {x: set() for x in activities_model} + curr = {x: set() for x in activities_model} + changed = {x: True for x in activities_model} + for x in dfg: + curr[x[1]].add(x[0]) + sthing_diff = True + while sthing_diff: + sthing_diff = False + diff = {} + for x in prev: + if changed[x]: + this_diff = curr[x].difference(prev[x]) + if this_diff: + sthing_diff = True + else: + changed[x] = False + diff[x] = this_diff + prev = copy(curr) + for x in diff: + if changed[x]: + for y in diff[x]: + curr[x] = curr[x].union(curr[y]) + return curr + + +def get_transitive_relations(dfg, alphabet): + ''' + + Parameters + ---------- + dfg + directly follows relation (counter describing activity pairs) + + Returns + ------- + tuple with two dicts. + first argument maps an activit on all other activities that are able to reach the activity ('transitive pre set') + second argument maps an activity on all other activities that it can reach (transitively) ('transitive post set') + + ''' + pre = {a: set() for a in alphabet} + post = {a: set() for a in alphabet} + if len(dfg) > 0: + q = [e for e in dfg] + while len(q) > 0: + s, t = q.pop(0) + post[s].add(t) + pre[t].add(s) + post[s].update(post[t]) + pre[t].update(pre[s]) + for a, b in dfg: + if b == s and not post[s].issubset(post[a]): + post[a].update(post[s]) + q.append((a, b)) + if a == t and not pre[t].issubset(pre[b]): + pre[b].update(pre[t]) + q.append((a, b)) + return pre, post + + +def get_alphabet(dfg): + alpha = set() + for a, b in dfg: + alpha.add(a) + alpha.add(b) + return alpha diff --git a/pm4py/pm4py/objects/heuristics_net/__init__.py b/pm4py/pm4py/objects/heuristics_net/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9cd164b85cd810788d1ebc64a0b12fd6b0edb7c4 --- /dev/null +++ b/pm4py/pm4py/objects/heuristics_net/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.heuristics_net import defaults, edge, obj, node diff --git a/pm4py/pm4py/objects/heuristics_net/defaults.py b/pm4py/pm4py/objects/heuristics_net/defaults.py new file mode 100644 index 0000000000000000000000000000000000000000..f30152662680ef9d3380f5d962d83c9108f92f8a --- /dev/null +++ b/pm4py/pm4py/objects/heuristics_net/defaults.py @@ -0,0 +1,29 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +DEPENDENCY_THRESH = "dependency_thresh" +AND_MEASURE_THRESH = "and_measure_thresh" +MIN_ACT_COUNT = "min_act_count" +MIN_DFG_OCCURRENCES = "min_dfg_occurrences" +DFG_PRE_CLEANING_NOISE_THRESH = "dfg_pre_cleaning_noise_thresh" +LOOP_LENGTH_TWO_THRESH = "loop_length_two_thresh" + +DEFAULT_DEPENDENCY_THRESH = 0.5 +DEFAULT_AND_MEASURE_THRESH = 0.65 +DEFAULT_MIN_ACT_COUNT = 1 +DEFAULT_MIN_DFG_OCCURRENCES = 1 +DEFAULT_DFG_PRE_CLEANING_NOISE_THRESH = 0.05 +DEFAULT_LOOP_LENGTH_TWO_THRESH = 0.5 diff --git a/pm4py/pm4py/objects/heuristics_net/edge.py b/pm4py/pm4py/objects/heuristics_net/edge.py new file mode 100644 index 0000000000000000000000000000000000000000..d7ddcdf140447c2da712bf82ec1575c7d6add500 --- /dev/null +++ b/pm4py/pm4py/objects/heuristics_net/edge.py @@ -0,0 +1,81 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +class Edge: + def __init__(self, start_node, end_node, dependency_value, dfg_value, repr_value, label="", repr_color="#000000", + edge_type="frequency", net_name=""): + """ + Constructor + + Parameters + ------------ + start_node + Start node of the edge + end_node + End node of the edge + dependency_value + Dependency value of the edge + dfg_value + DFG value of the edge + repr_value + Value used in the representation + label + (If provided) label of the edge + repr_color + (If provided) Color that shall represent the edge + edge_type + Type of the edge (frequency or performance) + net_name + (If provided) name of the Heuristics Net + """ + self.start_node = start_node + self.end_node = end_node + self.dependency_value = dependency_value + self.dfg_value = dfg_value + self.repr_value = repr_value + self.label = label + self.repr_color = repr_color + self.edge_type = edge_type + self.net_name = net_name + self.repr_font_color = None + self.pen_width = None + + def get_color(self): + """ + Gets the color to use for the representation + """ + return self.repr_color + + def get_font_color(self): + """ + Gets the font color to use for the representation + """ + if self.repr_font_color is not None: + return self.repr_font_color + return self.repr_color + + def get_penwidth(self, default): + """ + Gets the pen width to use for the representation + + Parameters + -------------- + default + Default value + """ + if self.pen_width is not None: + return self.pen_width + return default diff --git a/pm4py/pm4py/objects/heuristics_net/node.py b/pm4py/pm4py/objects/heuristics_net/node.py new file mode 100644 index 0000000000000000000000000000000000000000..09edaee17faaae142363ef2b0e1d482880f56466 --- /dev/null +++ b/pm4py/pm4py/objects/heuristics_net/node.py @@ -0,0 +1,233 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.heuristics_net import defaults +from pm4py.objects.heuristics_net.edge import Edge + + +class Node: + def __init__(self, heuristics_net, node_name, node_occ, is_start_node=False, is_end_node=False, + default_edges_color="#000000", node_type="frequency", net_name="", nodes_dictionary=None): + """ + Constructor + + Parameters + ------------- + heuristics_net + Parent heuristics net + node_name + Name of the node (may be the activity) + node_occ + Occurrences of the node + is_start_node + Tells if the node is a start node + is_end_node + Tells if the node is a end node + default_edges_color + Default edges color + node_type + Type of the node (frequency/performance) + net_name + (If provided) name of the Heuristics Net + """ + self.heuristics_net = heuristics_net + self.node_name = node_name + self.node_occ = node_occ + self.is_start_activity = is_start_node + self.is_end_activity = is_end_node + self.input_connections = {} + self.output_connections = {} + self.and_measures_in = {} + self.and_measures_out = {} + self.loop_length_two = {} + self.output_couples_and_measure = [] + self.default_edges_color = default_edges_color + self.node_type = node_type + self.net_name = net_name + self.nodes_dictionary = nodes_dictionary + self.fill_color = None + self.font_color = None + + def add_output_connection(self, other_node, dependency_value, dfg_value, repr_color=None, repr_value=None): + """ + Adds an output connection to another node + + Parameters + ------------- + other_node + Other node + dependency_value + Dependency value + dfg_value + DFG value + repr_color + Color associated to the edge + repr_value + Value associated to the edge (if None, dfg_value is used) + """ + if repr_color is None: + repr_color = self.default_edges_color + if repr_value is None: + repr_value = dfg_value + edge = Edge(self, other_node, dependency_value, dfg_value, repr_value, repr_color=repr_color, + edge_type=self.node_type, net_name=self.net_name) + if other_node not in self.output_connections: + self.output_connections[other_node] = [] + self.output_connections[other_node].append(edge) + + def add_input_connection(self, other_node, dependency_value, dfg_value, repr_color=None, repr_value=None): + """ + Adds an input connection to another node + + Parameters + ------------- + other_node + Other node + dependency_value + Dependency value + dfg_value + DFG value + repr_color + Color associated to the edge + repr_value + Value associated to the edge (if None, dfg_value is used) + """ + if repr_color is None: + repr_color = self.default_edges_color + if repr_value is None: + repr_value = dfg_value + edge = Edge(self, other_node, dependency_value, dfg_value, repr_value, repr_color=repr_color, + edge_type=self.node_type, net_name=self.net_name) + if other_node not in self.input_connections: + self.input_connections[other_node] = [] + self.input_connections[other_node].append(edge) + + def calculate_and_measure_out(self, and_measure_thresh=defaults.AND_MEASURE_THRESH): + """ + Calculate AND measure for output relations (as couples) + + Parameters + ------------- + and_measure_thresh + AND measure threshold + """ + out_nodes = sorted(list(self.output_connections), key=lambda x: x.node_name) + i = 0 + while i < len(out_nodes): + n1 = out_nodes[i].node_name + j = i + 1 + while j < len(out_nodes): + n2 = out_nodes[j].node_name + c1 = self.heuristics_net.dfg_matrix[n1][n2] if n1 in self.heuristics_net.dfg_matrix and n2 in \ + self.heuristics_net.dfg_matrix[n1] else 0 + c2 = self.heuristics_net.dfg_matrix[n2][n1] if n2 in self.heuristics_net.dfg_matrix and n1 in \ + self.heuristics_net.dfg_matrix[n2] else 0 + c3 = self.heuristics_net.dfg_matrix[self.node_name][n1] if self.node_name in self.heuristics_net.dfg_matrix and n1 in self.heuristics_net.dfg_matrix[self.node_name] else 0 + c4 = self.heuristics_net.dfg_matrix[self.node_name][n2] if self.node_name in self.heuristics_net.dfg_matrix and n2 in self.heuristics_net.dfg_matrix[self.node_name] else 0 + value = (c1 + c2) / (c3 + c4 + 1) + if value >= and_measure_thresh: + if n1 not in self.and_measures_out: + self.and_measures_out[n1] = {} + self.and_measures_out[n1][n2] = value + j = j + 1 + i = i + 1 + + def calculate_and_measure_in(self, and_measure_thresh=defaults.AND_MEASURE_THRESH): + """ + Calculate AND measure for input relations (as couples) + + Parameters + -------------- + and_measure_thresh + AND measure threshold + """ + in_nodes = sorted(list(self.input_connections), key=lambda x: x.node_name) + i = 0 + while i < len(in_nodes): + n1 = in_nodes[i].node_name + j = i + 1 + while j < len(in_nodes): + n2 = in_nodes[j].node_name + c1 = self.heuristics_net.dfg_matrix[n1][n2] if n1 in self.heuristics_net.dfg_matrix and n2 in \ + self.heuristics_net.dfg_matrix[n1] else 0 + c2 = self.heuristics_net.dfg_matrix[n2][n1] if n2 in self.heuristics_net.dfg_matrix and n1 in \ + self.heuristics_net.dfg_matrix[n2] else 0 + c3 = self.heuristics_net.dfg_matrix[n1][self.node_name] if n1 in self.heuristics_net.dfg_matrix and self.node_name in self.heuristics_net.dfg_matrix[n1] else 0 + c4 = self.heuristics_net.dfg_matrix[n2][self.node_name] if n2 in self.heuristics_net.dfg_matrix and self.node_name in self.heuristics_net.dfg_matrix[n2] else 0 + value = (c1 + c2) / (c3 + c4 + 1) + if value >= and_measure_thresh: + if n1 not in self.and_measures_in: + self.and_measures_in[n1] = {} + self.and_measures_in[n1][n2] = value + j = j + 1 + i = i + 1 + + def calculate_loops_length_two(self, dfg_matrix, freq_triples_matrix, + loops_length_two_thresh=defaults.DEFAULT_LOOP_LENGTH_TWO_THRESH): + """ + Calculate loops of length two + + Parameters + -------------- + dfg_matrix + DFG matrix + freq_triples_matrix + Matrix of triples + loops_length_two_thresh + Loops length two threshold + """ + if self.nodes_dictionary is not None and self.node_name in freq_triples_matrix: + n1 = self.node_name + for n2 in freq_triples_matrix[n1]: + c1 = dfg_matrix[n1][n2] if n1 in dfg_matrix and n2 in dfg_matrix[n1] else 0 + v1 = freq_triples_matrix[n1][n2] if n1 in freq_triples_matrix and n2 in freq_triples_matrix[n1] else 0 + v2 = freq_triples_matrix[n2][n1] if n2 in freq_triples_matrix and n1 in freq_triples_matrix[n2] else 0 + l2l = (v1 + v2) / (v1 + v2 + 1) + if l2l >= loops_length_two_thresh: + self.loop_length_two[n2] = c1 + + def get_fill_color(self, default): + """ + Gets the fill color for the representation + + Parameters + -------------- + default + Default value + """ + if self.fill_color is not None: + return self.fill_color + return default + + def get_font_color(self): + """ + Gets the font color for the representation + """ + if self.font_color is not None: + return self.font_color + return "#000000" + + def __repr__(self): + ret = "(node:" + self.node_name + " connections:{" + for index, conn in enumerate(self.output_connections.keys()): + if index > 0: + ret = ret + ", " + ret = ret + conn.node_name + ":" + str([x.dependency_value for x in self.output_connections[conn]]) + ret = ret + "})" + return ret + + def __str__(self): + return self.__repr__() diff --git a/pm4py/pm4py/objects/heuristics_net/obj.py b/pm4py/pm4py/objects/heuristics_net/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..b80d2e84143daedcb57717998fbc8bee8e12d1da --- /dev/null +++ b/pm4py/pm4py/objects/heuristics_net/obj.py @@ -0,0 +1,131 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import deepcopy + +from pm4py.objects.dfg.utils import dfg_utils + +DEFAULT_NET_NAME = "" + + +class HeuristicsNet: + def __init__(self, frequency_dfg, activities=None, start_activities=None, end_activities=None, + activities_occurrences=None, + default_edges_color="#000000", performance_dfg=None, dfg_window_2=None, freq_triples=None, + net_name=DEFAULT_NET_NAME): + """ + Initialize an Hueristics Net + + The implementation is based on the original paper on Heuristics Miner, namely: + + Weijters, A. J. M. M., Wil MP van Der Aalst, and AK Alves De Medeiros. + "Process mining with the heuristics miner-algorithm." + Technische Universiteit Eindhoven, Tech. Rep. WP 166 (2006): 1-34. + + and it manages to calculate the dependency matrix, the loops of length one and two, and + the AND measure + + Parameters + ------------- + frequency_dfg + Directly-Follows graph (frequency) + activities + Activities + start_activities + Start activities + end_activities + End activities + activities_occurrences + Activities occurrences + default_edges_color + (If provided) Default edges color + performance_dfg + Performance DFG + dfg_window_2 + DFG window 2 + freq_triples + Frequency triples + net_name + (If provided) name of the heuristics net + """ + self.net_name = [net_name] + + self.nodes = {} + self.dependency_matrix = {} + self.dfg_matrix = {} + + self.dfg = frequency_dfg + self.performance_dfg = performance_dfg + self.node_type = "frequency" if self.performance_dfg is None else "performance" + + self.activities = activities + if self.activities is None: + self.activities = dfg_utils.get_activities_from_dfg(frequency_dfg) + if start_activities is None: + self.start_activities = [dfg_utils.infer_start_activities(frequency_dfg)] + else: + self.start_activities = [start_activities] + if end_activities is None: + self.end_activities = [dfg_utils.infer_end_activities(frequency_dfg)] + else: + self.end_activities = [end_activities] + self.activities_occurrences = activities_occurrences + if self.activities_occurrences is None: + self.activities_occurrences = {} + for act in self.activities: + self.activities_occurrences[act] = dfg_utils.sum_activities_count(frequency_dfg, [act]) + self.default_edges_color = [default_edges_color] + self.dfg_window_2 = dfg_window_2 + self.dfg_window_2_matrix = {} + self.freq_triples = freq_triples + self.freq_triples_matrix = {} + self.concurrent_activities = {} + self.sojourn_times = {} + + def __add__(self, other_net): + copied_self = deepcopy(self) + for node_name in copied_self.nodes: + if node_name in other_net.nodes: + node1 = copied_self.nodes[node_name] + node2 = other_net.nodes[node_name] + n1n = {x.node_name: x for x in node1.output_connections} + n2n = {x.node_name: x for x in node2.output_connections} + for out_node1 in node1.output_connections: + if out_node1.node_name in n2n: + node1.output_connections[out_node1] = node1.output_connections[out_node1] + \ + node2.output_connections[n2n[out_node1.node_name]] + for out_node2 in node2.output_connections: + if out_node2.node_name not in n1n: + if out_node2.node_name in copied_self.nodes: + nn = copied_self.nodes[out_node2.node_name] + node1.output_connections[nn] = node2.output_connections[out_node2] + else: + node1.output_connections[out_node2] = node2.output_connections[out_node2] + diffext = [other_net.nodes[node] for node in other_net.nodes if node not in copied_self.nodes] + for node in diffext: + copied_self.nodes[node.node_name] = node + copied_self.start_activities = copied_self.start_activities + other_net.start_activities + copied_self.end_activities = copied_self.end_activities + other_net.end_activities + copied_self.default_edges_color = copied_self.default_edges_color + other_net.default_edges_color + copied_self.net_name = copied_self.net_name + other_net.net_name + + return copied_self + + def __repr__(self): + return str(self.nodes) + + def __str__(self): + return str(self.nodes) diff --git a/pm4py/pm4py/objects/log/__init__.py b/pm4py/pm4py/objects/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..56a2acc3a8fd1c0a298ec33a4f90fb844b6b9855 --- /dev/null +++ b/pm4py/pm4py/objects/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log import obj, exporter, importer, util diff --git a/pm4py/pm4py/objects/log/exporter/__init__.py b/pm4py/pm4py/objects/log/exporter/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..868e1e47e28c150066be28a542e86128c4ed1c00 --- /dev/null +++ b/pm4py/pm4py/objects/log/exporter/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.exporter import xes diff --git a/pm4py/pm4py/objects/log/exporter/xes/__init__.py b/pm4py/pm4py/objects/log/exporter/xes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8ab894ae4e661658a99b7cd9b0605a0aa4829797 --- /dev/null +++ b/pm4py/pm4py/objects/log/exporter/xes/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.exporter.xes import exporter, variants, util diff --git a/pm4py/pm4py/objects/log/exporter/xes/exporter.py b/pm4py/pm4py/objects/log/exporter/xes/exporter.py new file mode 100644 index 0000000000000000000000000000000000000000..26fbb8c9d1163f6aa1c7996388672477d10a820f --- /dev/null +++ b/pm4py/pm4py/objects/log/exporter/xes/exporter.py @@ -0,0 +1,76 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.objects.log.exporter.xes.variants import etree_xes_exp, line_by_line +from pm4py.util import exec_utils + + +class Variants(Enum): + ETREE = etree_xes_exp + LINE_BY_LINE = line_by_line + + +DEFAULT_VARIANT = Variants.LINE_BY_LINE + + +def apply(log, output_file_path, variant=DEFAULT_VARIANT, parameters=None): + """ + Method to export a XES from a log + + Parameters + ----------- + log + Trace log + output_file_path + Output file path + variant + Selected variant of the algorithm + parameters + Parameters of the algorithm: + Parameters.COMPRESS -> Indicates that the XES file must be compressed + """ + parameters = dict() if parameters is None else parameters + return exec_utils.get_variant(variant).apply(log_conversion.apply(log, variant=log_conversion.Variants.TO_EVENT_LOG, parameters=parameters), output_file_path, + parameters=parameters) + + +def serialize(log, variant=DEFAULT_VARIANT, parameters=None): + """ + Serialize a log into a binary string containing the XES of the log + + Parameters + ----------- + log + Trace log + variant + Selected variant of the algorithm + parameters + Parameters of the algorithm + + Returns + ----------- + string + String describing the XES + """ + parameters = dict() if parameters is None else parameters + + log_string = exec_utils.get_variant(variant).export_log_as_string(log_conversion.apply(log, variant=log_conversion.Variants.TO_EVENT_LOG, parameters=parameters), + parameters=parameters) + + return log_string diff --git a/pm4py/pm4py/objects/log/exporter/xes/util/__init__.py b/pm4py/pm4py/objects/log/exporter/xes/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..f71b9b08d59205e762bc081291995a3dce88426a --- /dev/null +++ b/pm4py/pm4py/objects/log/exporter/xes/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.exporter.xes.util import compression diff --git a/pm4py/pm4py/objects/log/exporter/xes/util/compression.py b/pm4py/pm4py/objects/log/exporter/xes/util/compression.py new file mode 100644 index 0000000000000000000000000000000000000000..ddf10788bc404ca5a961bc4efe1e94bf6b5b9ab5 --- /dev/null +++ b/pm4py/pm4py/objects/log/exporter/xes/util/compression.py @@ -0,0 +1,46 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import gzip +import os +import shutil +import tempfile + + +# this is ugly, should be done internally in the exporter... +def compress(file): + """ + Compress a file in-place adding .gz suffix + + Parameters + ----------- + file + Uncompressed file + + Returns + ----------- + compressed_file + Compressed file path + """ + extension = file.split(".")[-1] + ".gz" + fp = tempfile.NamedTemporaryFile(suffix=extension) + fp.close() + with open(file, 'rb') as f_in: + with gzip.open(fp.name, 'wb') as f_out: + shutil.copyfileobj(f_in, f_out) + shutil.move(fp.name, file + ".gz") + os.remove(file) + return file diff --git a/pm4py/pm4py/objects/log/exporter/xes/variants/__init__.py b/pm4py/pm4py/objects/log/exporter/xes/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..aa164f609c11a02d5ca16ec9db5df8f1e55adb4f --- /dev/null +++ b/pm4py/pm4py/objects/log/exporter/xes/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.exporter.xes.variants import etree_xes_exp, line_by_line diff --git a/pm4py/pm4py/objects/log/exporter/xes/variants/etree_xes_exp.py b/pm4py/pm4py/objects/log/exporter/xes/variants/etree_xes_exp.py new file mode 100644 index 0000000000000000000000000000000000000000..7275fa7e487efbb1f4fabbc10d7bb0081953dd45 --- /dev/null +++ b/pm4py/pm4py/objects/log/exporter/xes/variants/etree_xes_exp.py @@ -0,0 +1,391 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util +from enum import Enum + +try: + # do not compromise anymore importing the XES "exporter" package if "lxml" is / cannot be installed, + # and this variant cannot be used. + # after all, the default variant is now the "line_by_line" one. + from lxml import etree +except: + pass + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log import obj as log_instance +from pm4py.objects.log.util import xes as xes_util +from pm4py.util import constants +from pm4py.util import exec_utils +from io import BytesIO +import gzip + + +class Parameters(Enum): + COMPRESS = "compress" + SHOW_PROGRESS_BAR = "show_progress_bar" + ENCODING = "encoding" + + +# defines correspondence between Python types and XES types +__TYPE_CORRESPONDENCE = { + "str": xes_util.TAG_STRING, + "int": xes_util.TAG_INT, + "float": xes_util.TAG_FLOAT, + "datetime": xes_util.TAG_DATE, + "Timestamp": xes_util.TAG_DATE, + "bool": xes_util.TAG_BOOLEAN, + "dict": xes_util.TAG_LIST, + "numpy.int64": xes_util.TAG_INT, + "numpy.float64": xes_util.TAG_FLOAT, + "numpy.datetime64": xes_util.TAG_DATE +} +# if a type is not found in the previous list, then default to string +__DEFAULT_TYPE = xes_util.TAG_STRING + + +def __get_xes_attr_type(attr_name, attr_type): + """ + Transform a Python attribute type (e.g. str, datetime) into a XES attribute type (e.g. string, date) + + Parameters + ---------- + attr_name + Name of the attribute + attr_type: + Python attribute type + """ + if attr_name == xes_util.DEFAULT_NAME_KEY: + return xes_util.TAG_STRING + elif attr_type in __TYPE_CORRESPONDENCE: + attr_type_xes = __TYPE_CORRESPONDENCE[attr_type] + else: + attr_type_xes = __DEFAULT_TYPE + return attr_type_xes + + +def __get_xes_attr_value(attr_value, attr_type_xes): + """ + Transform an attribute value from Python format to XES format (the type is provided as argument) + + Parameters + ---------- + attr_value: + XES attribute value + attr_type_xes: + XES attribute type + + """ + if attr_type_xes == xes_util.TAG_DATE: + return attr_value.isoformat() + elif attr_type_xes == xes_util.TAG_BOOLEAN: + return str(attr_value).lower() + return str(attr_value) + + +def __export_attributes(log, root): + """ + Export XES attributes (at the log level) from a PM4PY log + + Parameters + ---------- + log: :class:`pm4py.log.log.EventLog` + PM4PY log + root: + Output XML root element + + """ + __export_attributes_element(log, root) + + +def __export_extensions(log, root): + """ + Export XES extensions from a PM4PY log + + Parameters + ---------- + log: :class:`pm4py.log.log.EventLog` + PM4PY log + root: + Output XML root element + + """ + for ext in log.extensions.keys(): + ext_value = log.extensions[ext] + log_extension = etree.SubElement(root, xes_util.TAG_EXTENSION) + if ext is not None and not ext_value[xes_util.KEY_PREFIX] is None and ext_value[xes_util.KEY_URI] is not None: + log_extension.set(xes_util.KEY_NAME, ext) + log_extension.set(xes_util.KEY_PREFIX, ext_value[xes_util.KEY_PREFIX]) + log_extension.set(xes_util.KEY_URI, ext_value[xes_util.KEY_URI]) + + +def __export_globals(log, root): + """ + Export XES globals from a PM4PY log + + Parameters + ---------- + log: :class:`pm4py.log.log.EventLog` + PM4PY log + root: + Output XML root element + + """ + for glob in log.omni_present.keys(): + glob_els = log.omni_present[glob] + xes_global = etree.SubElement(root, xes_util.TAG_GLOBAL) + xes_global.set(xes_util.KEY_SCOPE, glob) + __export_attributes_element(glob_els, xes_global) + + +def __export_classifiers(log, root): + """ + Export XES classifiers from a PM4PY log + + Parameters + ---------- + log: :class:`pm4py.log.log.EventLog` + PM4PY log + root: + Output XML root element + + """ + for clas in log.classifiers.keys(): + clas_value = log.classifiers[clas] + classifier = etree.SubElement(root, xes_util.TAG_CLASSIFIER) + classifier.set(xes_util.KEY_NAME, clas) + values_spaces = [(" " in x) for x in clas_value] + values_spaces = [x for x in values_spaces if x] + if len(values_spaces) > 0: + clas_value = ["'" + x + "'" for x in clas_value] + classifier.set(xes_util.KEY_KEYS, " ".join(clas_value)) + + +def __export_attributes_element(log_element, xml_element): + """ + Export attributes related to a single element + + Parameters + ---------- + log_element: + Element in log (event, trace ...) + xml_element: + XML element + """ + if hasattr(log_element, "attributes"): + log_element = log_element.attributes + + if isinstance(log_element, list) or isinstance(log_element, set): + items = log_element + else: + items = log_element.items() + + for attr, attr_value in items: + if attr is not None and attr_value is not None: + attr_type = type(attr_value).__name__ + attr_type_xes = __get_xes_attr_type(attr, attr_type) + if attr_type is not None and attr_type_xes is not None: + if attr_type_xes == xes_util.TAG_LIST: + if attr_value['value'] is None: + this_attribute = etree.SubElement(xml_element, attr_type_xes) + this_attribute.set(xes_util.KEY_KEY, attr) + this_attribute_values = etree.SubElement(this_attribute, "values") + __export_attributes_element(attr_value['children'], this_attribute_values) + else: + attr_type = type(attr_value['value']).__name__ + attr_type_xes = __get_xes_attr_type(attr, attr_type) + if attr_type is not None and attr_type_xes is not None: + if attr_value is not None: + this_attribute = etree.SubElement(xml_element, attr_type_xes) + this_attribute.set(xes_util.KEY_KEY, attr) + this_attribute.set(xes_util.KEY_VALUE, str(attr_value['value'])) + __export_attributes_element(attr_value['children'], this_attribute) + else: + attr_value = __get_xes_attr_value(attr_value, attr_type_xes) + if attr_value is not None: + this_attribute = etree.SubElement(xml_element, attr_type_xes) + this_attribute.set(xes_util.KEY_KEY, attr) + this_attribute.set(xes_util.KEY_VALUE, str(attr_value)) + + +def __export_traces_events(tr, trace): + """ + Export XES events given a PM4PY trace + + Parameters + ---------- + tr: :class:`pm4py.log.log.Trace` + PM4PY trace + trace: + Output XES trace + + """ + + for ev in tr: + event = etree.SubElement(trace, xes_util.TAG_EVENT) + __export_attributes_element(ev, event) + + +def __export_traces(log, root, parameters=None): + """ + Export XES traces from a PM4PY log + + Parameters + ---------- + log: :class:`pm4py.log.log.EventLog` + PM4PY log + root: + Output XML root element + + """ + if parameters is None: + parameters = {} + + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + + progress = None + if importlib.util.find_spec("tqdm") and show_progress_bar: + from tqdm.auto import tqdm + progress = tqdm(total=len(log), desc="exporting log, completed traces :: ") + + for tr in log: + trace = etree.SubElement(root, xes_util.TAG_TRACE) + __export_attributes_element(tr, trace) + __export_traces_events(tr, trace) + if progress is not None: + progress.update() + + # gracefully close progress bar + if progress is not None: + progress.close() + del progress + + +def export_log_tree(log, parameters=None): + """ + Get XES log XML tree from a PM4Py log + + Parameters + ----------- + log + PM4Py log + + Returns + ----------- + tree + XML tree + """ + # If the log is in log_instance.EventStream, then transform it into log_instance.EventLog format + if type(log) is log_instance.EventStream: + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + root = etree.Element(xes_util.TAG_LOG) + root.set(xes_util.TAG_VERSION, xes_util.VALUE_XES_VERSION) + root.set(xes_util.TAG_FEATURES, xes_util.VALUE_XES_FEATURES) + root.set(xes_util.TAG_XMLNS, xes_util.VALUE_XMLNS) + + # add attributes at the log level + __export_attributes(log, root) + # add extensions at the log level + __export_extensions(log, root) + # add globals at the log level + __export_globals(log, root) + # add classifiers at the log level + __export_classifiers(log, root) + # add traces at the log level + __export_traces(log, root, parameters=parameters) + + tree = etree.ElementTree(root) + + return tree + + +def export_log_as_string(log, parameters=None): + """ + Export a log into a string + + Parameters + ----------- + log: :class:`pm4py.log.log.EventLog` + PM4PY log + parameters + Parameters of the algorithm + + Returns + ----------- + logString + Log as a string + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + compress = exec_utils.get_param_value(Parameters.COMPRESS, parameters, False) + + # Gets the XML tree to export + tree = export_log_tree(log, parameters=parameters) + + b = BytesIO() + + if compress: + d = gzip.GzipFile(fileobj=b, mode="wb") + else: + d = b + + tree.write(d, pretty_print=True, xml_declaration=True, encoding=encoding) + + if compress: + d.close() + + return b.getvalue() + + +def __export_log(log, output_file_path, parameters=None): + """ + Export XES log from a PM4PY log + + Parameters + ---------- + log: :class:`pm4py.log.log.EventLog` + PM4PY log + output_file_path: + Output file path + parameters + Parameters of the algorithm + + """ + parameters = dict() if parameters is None else parameters + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + compress = exec_utils.get_param_value(Parameters.COMPRESS, parameters, output_file_path.lower().endswith(".gz")) + + # Gets the XML tree to export + tree = export_log_tree(log, parameters=parameters) + + if compress: + if not output_file_path.lower().endswith(".gz"): + output_file_path = output_file_path + ".gz" + f = gzip.open(output_file_path, mode="wb") + else: + f = open(output_file_path, "wb") + + # Effectively do the export of the event log + tree.write(f, pretty_print=True, xml_declaration=True, encoding=encoding) + + f.close() + + +def apply(log, output_file_path, parameters=None): + return __export_log(log, output_file_path, parameters) diff --git a/pm4py/pm4py/objects/log/exporter/xes/variants/line_by_line.py b/pm4py/pm4py/objects/log/exporter/xes/variants/line_by_line.py new file mode 100644 index 0000000000000000000000000000000000000000..2c8e2bdfa6c8f991923c92ed8b70d9f4cc232b20 --- /dev/null +++ b/pm4py/pm4py/objects/log/exporter/xes/variants/line_by_line.py @@ -0,0 +1,315 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import gzip +import importlib.util +from enum import Enum +from io import BytesIO + +from pm4py.objects.log.util import xes as xes_util +from pm4py.util import exec_utils, constants +from xml.sax.saxutils import quoteattr + + +class Parameters(Enum): + COMPRESS = "compress" + SHOW_PROGRESS_BAR = "show_progress_bar" + ENCODING = "encoding" + + +# defines correspondence between Python types and XES types +__TYPE_CORRESPONDENCE = { + "str": xes_util.TAG_STRING, + "int": xes_util.TAG_INT, + "float": xes_util.TAG_FLOAT, + "datetime": xes_util.TAG_DATE, + "Timestamp": xes_util.TAG_DATE, + "bool": xes_util.TAG_BOOLEAN, + "dict": xes_util.TAG_LIST, + "numpy.int64": xes_util.TAG_INT, + "numpy.float64": xes_util.TAG_FLOAT, + "numpy.datetime64": xes_util.TAG_DATE +} +# if a type is not found in the previous list, then default to string +__DEFAULT_TYPE = xes_util.TAG_STRING + + +def __get_xes_attr_type(attr_name, attr_type): + """ + Transform a Python attribute type (e.g. str, datetime) into a XES attribute type (e.g. string, date) + + Parameters + ---------- + attr_name + Name of the attribute + attr_type: + Python attribute type + """ + if attr_name == xes_util.DEFAULT_NAME_KEY: + return xes_util.TAG_STRING + elif attr_type in __TYPE_CORRESPONDENCE: + attr_type_xes = __TYPE_CORRESPONDENCE[attr_type] + else: + attr_type_xes = __DEFAULT_TYPE + return attr_type_xes + + +def __get_xes_attr_value(attr_value, attr_type_xes): + """ + Transform an attribute value from Python format to XES format (the type is provided as argument) + + Parameters + ---------- + attr_value: + XES attribute value + attr_type_xes: + XES attribute type + + """ + if attr_type_xes == xes_util.TAG_DATE: + return attr_value.isoformat() + elif attr_type_xes == xes_util.TAG_BOOLEAN: + return str(attr_value).lower() + return str(attr_value) + + +def get_tab_indent(n): + """ + Get the desidered number of indentations as string + + Parameters + ------------- + n + Number of indentations + + Returns + ------------- + str_tab_indent + Desidered number of indentations as string + """ + return "".join(["\t"] * n) + + +def escape(stru): + """ + XML-escape a string + + Parameters + ---------------- + stru + String to be escaped + + Returns + ---------------- + escaped_stru + Escaped string + """ + return quoteattr(stru) + + +def export_attribute(attr_name, attr_value, indent_level): + """ + Exports an attribute + + Parameters + -------------- + attr_name + Name of the attribute + attr_value + Value of the attribute + indent_level + Level of indentation + + Returns + -------------- + stru + String representing the content of the attribute + """ + ret = [] + if attr_name is not None and attr_value is not None: + attr_type = __get_xes_attr_type(attr_name, type(attr_value).__name__) + if not attr_type == xes_util.TAG_LIST: + attr_value = __get_xes_attr_value(attr_value, attr_type) + ret.append(get_tab_indent( + indent_level) + "<%s key=%s value=%s />\n" % (attr_type, escape(attr_name), escape(attr_value))) + else: + if attr_value[xes_util.KEY_VALUE] is None: + # list + ret.append(get_tab_indent(indent_level) + "\n" % (escape(attr_name))) + ret.append(get_tab_indent(indent_level + 1) + "\n") + for subattr in attr_value[xes_util.KEY_CHILDREN]: + ret.append(export_attribute(subattr[0], subattr[1], indent_level + 2)) + ret.append(get_tab_indent(indent_level + 1) + "\n") + ret.append(get_tab_indent(indent_level) + "\n") + else: + # nested attribute + this_value = attr_value[xes_util.KEY_VALUE] + this_type = __get_xes_attr_type(attr_name, type(this_value).__name__) + this_value = __get_xes_attr_value(this_value, this_type) + ret.append(get_tab_indent( + indent_level) + "<%s key=%s value=%s>\n" % (this_type, escape(attr_name), escape(this_value))) + for subattr_name, subattr_value in attr_value[xes_util.KEY_CHILDREN].items(): + ret.append(export_attribute(subattr_name, subattr_value, indent_level + 1)) + ret.append("\n" % this_type) + return "".join(ret) + + +def export_trace_line_by_line(trace, fp_obj, encoding): + """ + Exports the content of a trace line-by-line + to a file object + + Parameters + ----------------- + trace + Trace + fp_obj + File object + encoding + Encoding + """ + fp_obj.write((get_tab_indent(1) + "\n").encode(encoding)) + for attr_name, attr_value in trace.attributes.items(): + fp_obj.write(export_attribute(attr_name, attr_value, 2).encode(encoding)) + for event in trace: + fp_obj.write((get_tab_indent(2) + "\n").encode(encoding)) + for attr_name, attr_value in event.items(): + fp_obj.write(export_attribute(attr_name, attr_value, 3).encode(encoding)) + fp_obj.write((get_tab_indent(2) + "\n").encode(encoding)) + fp_obj.write((get_tab_indent(1) + "\n").encode(encoding)) + + +def export_log_line_by_line(log, fp_obj, encoding, parameters=None): + """ + Exports the contents of the log line-by-line + to a file object + + Parameters + -------------- + log + Event log + fp_obj + File object + encoding + Encoding + parameters + Parameters of the algorithm + """ + if parameters is None: + parameters = {} + + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + + progress = None + if importlib.util.find_spec("tqdm") and show_progress_bar: + from tqdm.auto import tqdm + progress = tqdm(total=len(log), desc="exporting log, completed traces :: ") + + fp_obj.write(("\n").encode( + encoding)) + fp_obj.write(("\n").encode(encoding)) + for ext_name, ext_value in log.extensions.items(): + fp_obj.write((get_tab_indent(1) + "\n" % ( + ext_name, ext_value[xes_util.KEY_PREFIX], ext_value[xes_util.KEY_URI])).encode(encoding)) + for clas_name, clas_attributes in log.classifiers.items(): + fp_obj.write((get_tab_indent(1) + "\n" % ( + clas_name, " ".join(clas_attributes))).encode(encoding)) + for attr_name, attr_value in log.attributes.items(): + fp_obj.write(export_attribute(attr_name, attr_value, 1).encode(encoding)) + for scope in log.omni_present: + fp_obj.write((get_tab_indent(1) + "\n" % (scope)).encode(encoding)) + for attr_name, attr_value in log.omni_present[scope].items(): + fp_obj.write(export_attribute(attr_name, attr_value, 2).encode(encoding)) + fp_obj.write((get_tab_indent(1) + "\n").encode(encoding)) + for trace in log: + export_trace_line_by_line(trace, fp_obj, encoding) + if progress is not None: + progress.update() + # gracefully close progress bar + if progress is not None: + progress.close() + del progress + + fp_obj.write("\n".encode(encoding)) + + +def apply(log, output_file_path, parameters=None): + """ + Exports a XES log using a non-standard exporter + (classifiers, lists, nested attributes, globals, extensions are not supported) + + Parameters + ------------ + log + Event log + output_file_path + Path to the XES file + parameters + Parameters + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + compress = exec_utils.get_param_value(Parameters.COMPRESS, parameters, output_file_path.lower().endswith(".gz")) + + if compress: + if not output_file_path.lower().endswith(".gz"): + output_file_path = output_file_path + ".gz" + f = gzip.open(output_file_path, mode="wb") + else: + f = open(output_file_path, "wb") + + export_log_line_by_line(log, f, encoding, parameters=parameters) + + f.close() + + +def export_log_as_string(log, parameters=None): + """ + Export a log into a string + + Parameters + ----------- + log: :class:`pm4py.log.log.EventLog` + PM4PY log + parameters + Parameters of the algorithm + + Returns + ----------- + logString + Log as a string + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + compress = exec_utils.get_param_value(Parameters.COMPRESS, parameters, False) + + b = BytesIO() + + if compress: + d = gzip.GzipFile(fileobj=b, mode="wb") + else: + d = b + + export_log_line_by_line(log, d, encoding, parameters=parameters) + + if compress: + d.close() + + return b.getvalue() diff --git a/pm4py/pm4py/objects/log/importer/__init__.py b/pm4py/pm4py/objects/log/importer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9f5bd8d5213003ec8b1cd14a91a0d49ccb5597a4 --- /dev/null +++ b/pm4py/pm4py/objects/log/importer/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.importer import xes diff --git a/pm4py/pm4py/objects/log/importer/xes/__init__.py b/pm4py/pm4py/objects/log/importer/xes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..deb045e811e0a35f2ec7b7eca0ff3e28ea86b847 --- /dev/null +++ b/pm4py/pm4py/objects/log/importer/xes/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.importer.xes import variants, importer diff --git a/pm4py/pm4py/objects/log/importer/xes/importer.py b/pm4py/pm4py/objects/log/importer/xes/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..ccef8dd0372fa717f0e49aac3c4205815be8b3fd --- /dev/null +++ b/pm4py/pm4py/objects/log/importer/xes/importer.py @@ -0,0 +1,122 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import constants + +from pm4py.objects.log.importer.xes.variants import iterparse, line_by_line, iterparse_mem_compressed, iterparse_20, chunk_regex, rustxes + + +class Variants(Enum): + ITERPARSE = iterparse + LINE_BY_LINE = line_by_line + ITERPARSE_MEM_COMPRESSED = iterparse_mem_compressed + ITERPARSE_20 = iterparse_20 + CHUNK_REGEX = chunk_regex + RUSTXES = rustxes + + +def __get_variant(variant_str: str): + variant = Variants.CHUNK_REGEX + + if variant_str == 'nonstandard': + variant = Variants.LINE_BY_LINE + elif variant_str == 'iterparse': + variant = Variants.ITERPARSE + elif variant_str == 'lxml': + variant = Variants.ITERPARSE + elif variant_str == 'chunk_regex': + variant = Variants.CHUNK_REGEX + elif variant_str == "line_by_line": + variant = Variants.LINE_BY_LINE + elif variant_str == "iterparse_20": + variant = Variants.ITERPARSE_20 + elif variant_str == "iterparse_mem_compressed": + variant = Variants.ITERPARSE_MEM_COMPRESSED + elif variant_str == "rustxes": + variant = Variants.RUSTXES + + return variant + + +def apply(path, parameters=None, variant=constants.DEFAULT_XES_PARSER): + """ + Import a XES log into a EventLog object + + Parameters + ----------- + path + Log path + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.INSERT_TRACE_INDICES -> Specify if trace indexes should be added as event attribute for each event + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + variant + Variant of the algorithm to use, including: + - Variants.ITERPARSE + - Variants.LINE_BY_LINE + + Returns + ----------- + log + Trace log object + """ + if parameters is None: + parameters = {} + + if type(variant) is str: + variant = __get_variant(variant) + + log = variant.value.apply(path, parameters=parameters) + + return log + + +def deserialize(log_string, parameters=None, variant=constants.DEFAULT_XES_PARSER): + """ + Deserialize a text/binary string representing a XES log + + Parameters + ----------- + log_string + String that contains the XES + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.INSERT_TRACE_INDICES -> Specify if trace indexes should be added as event attribute for each event + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + variant + Variant of the algorithm to use, including: + - Variants.ITERPARSE + - Variants.LINE_BY_LINE + + Returns + ----------- + log + Trace log object + """ + if parameters is None: + parameters = {} + + if type(variant) is str: + variant = __get_variant(variant) + + return variant.value.import_from_string(log_string, parameters=parameters) diff --git a/pm4py/pm4py/objects/log/importer/xes/variants/__init__.py b/pm4py/pm4py/objects/log/importer/xes/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bb7d830098f33a76e1cd781da5ae0185c6828649 --- /dev/null +++ b/pm4py/pm4py/objects/log/importer/xes/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.importer.xes.variants import iterparse, line_by_line, iterparse_mem_compressed, chunk_regex diff --git a/pm4py/pm4py/objects/log/importer/xes/variants/chunk_regex.py b/pm4py/pm4py/objects/log/importer/xes/variants/chunk_regex.py new file mode 100644 index 0000000000000000000000000000000000000000..617215b9d9abfe5efce6ea5451211c7aaaeff574 --- /dev/null +++ b/pm4py/pm4py/objects/log/importer/xes/variants/chunk_regex.py @@ -0,0 +1,260 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import gzip +import os +import sys +from enum import Enum +from io import BytesIO + +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.util import constants, exec_utils +from pm4py.util.dt_parsing import parser as dt_parser +import re +from collections import deque + + +class Parameters(Enum): + DECOMPRESS_SERIALIZATION = "decompress_serialization" + ENCODING = "encoding" + + +def apply(filename, parameters=None): + return import_log(filename, parameters) + + +def import_log_from_file_object(F, encoding, file_size=sys.maxsize, parameters=None): + """ + Import a log object from a (XML) file object + + Parameters + ----------- + F + file object + encoding + Encoding + file_size + Size of the file (measured on disk) + parameters + Parameters of the algorithm + + Returns + ----------- + log + Log file + """ + nb = 2 ** 12 # bytes per chunk + rex = re.compile(r"(<|>)") + parser = dt_parser.get() + cont = F.read(nb) + curr_els_attrs = [] + fk_dict = {} + log = EventLog() + trace = None + while cont: + lst = deque(rex.split(cont.decode(encoding))) + while lst: + el = lst.popleft() + if len(el.rstrip()) > 0: + if el == '<': + continue + elif el == '>': + continue + while len(lst) == 0: + # need to read more + cont = F.read(nb) + if cont: + lst2 = rex.split(cont.decode(encoding)) + el = el + lst2[0] + lst = deque(lst2[1:]) + else: + break + if el[0] == '/': + if len(curr_els_attrs) > 1: + curr_els_attrs.pop() + else: + return log + continue + idx = el.find(' ') + if idx > -1: + tag = el[:idx] + el = el.split('\"') + el[-1] = el[-1].strip() + if tag == "string": + curr_els_attrs[-1][el[1]] = el[3] + if el[-1] != '/': + curr_els_attrs.append(fk_dict) + continue + elif tag == "date": + curr_els_attrs[-1][el[1]] = parser.apply(el[3]) + if el[-1] != '/': + curr_els_attrs.append(fk_dict) + continue + elif tag == "int": + curr_els_attrs[-1][el[1]] = int(el[3]) + if el[-1] != '/': + curr_els_attrs.append(fk_dict) + continue + elif tag == "float": + curr_els_attrs[-1][el[1]] = float(el[3]) + if el[-1] != '/': + curr_els_attrs.append(fk_dict) + continue + elif tag == "boolean": + curr_els_attrs[-1][el[1]] = True if el[3] == "true" else False + if el[-1] != '/': + curr_els_attrs.append(fk_dict) + continue + elif tag == "extension": + ext = log.extensions + name = el[[i for i in range(len(el)) if "name=" in el[i]][0] + 1] + prefix = el[[i for i in range(len(el)) if "prefix=" in el[i]][0] + 1] + uri = el[[i for i in range(len(el)) if "uri=" in el[i]][0] + 1] + ext[name] = {"prefix": prefix, "uri": uri} + if el[-1] != '/': + curr_els_attrs.append(ext) + continue + elif tag == "classifier": + classif = log.classifiers + name = el[[i for i in range(len(el)) if "name=" in el[i]][0] + 1] + keys = el[[i for i in range(len(el)) if "keys=" in el[i]][0] + 1] + if "'" in keys: + classif[name] = [x for x in keys.split("'") if x.strip()] + else: + classif[name] = keys.split() + if el[-1] != '/': + curr_els_attrs.append(classif) + continue + elif tag == "global": + glob = log.omni_present + scope = el[1] + dct = {} + glob[scope] = dct + if el[-1] != '/': + curr_els_attrs.append(dct) + continue + elif tag == "log": + curr_els_attrs.append(log.attributes) + continue + elif tag == "list": + dct_children = {} + dct = {"value": None, "children": dct_children} + curr_els_attrs[-1][el[1]] = dct + curr_els_attrs.append(dct_children) + continue + else: + if el == "event": + event = Event() + curr_els_attrs.append(event) + trace.append(event) + continue + elif el == "trace": + trace = Trace() + curr_els_attrs.append(trace.attributes) + log.append(trace) + continue + elif el == "log": + curr_els_attrs.append(log.attributes) + continue + elif el == "values": + curr_els_attrs.append(curr_els_attrs[-1]) + cont = F.read(nb) + return log + + +def import_log(filename, parameters=None): + """ + Import a log object from a XML file + containing the traces, the events and the simple attributes of them + + Parameters + ----------- + filename + XES file to parse + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.MAX_BYTES -> Maximum number of bytes to read + Parameters.SKYP_BYTES -> Number of bytes to skip + Parameters.SET_ATTRIBUTES_TO_READ -> Names of the attributes that should be parsed. If not specified, + then, all the attributes are parsed. + Parameters.ENCODING -> Regulates the encoding of the log (default: utf-8) + + Returns + ----------- + log + Log file + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + is_compressed = filename.endswith(".gz") + file_size = os.stat(filename).st_size + + if is_compressed: + f = gzip.open(filename, mode="rb") + else: + f = open(filename, "rb") + + log = import_log_from_file_object(f, encoding, file_size=file_size, parameters=parameters) + + f.close() + + return log + + +def import_from_string(log_string, parameters=None): + """ + Deserialize a text/binary string representing a XES log + + Parameters + ----------- + log_string + String that contains the XES + parameters + Parameters of the algorithm + + Returns + ----------- + log + Trace log object + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + decompress_serialization = exec_utils.get_param_value(Parameters.DECOMPRESS_SERIALIZATION, parameters, False) + + if type(log_string) is str: + log_string = log_string.encode(constants.DEFAULT_ENCODING) + + b = BytesIO(log_string) + + if decompress_serialization: + s = gzip.GzipFile(fileobj=b, mode="rb") + else: + s = b + + log = import_log_from_file_object(s, encoding, parameters=parameters) + s.close() + b.close() + return log diff --git a/pm4py/pm4py/objects/log/importer/xes/variants/iterparse.py b/pm4py/pm4py/objects/log/importer/xes/variants/iterparse.py new file mode 100644 index 0000000000000000000000000000000000000000..333abb9f46fa4ad0d31a997803031694e3dea1eb --- /dev/null +++ b/pm4py/pm4py/objects/log/importer/xes/variants/iterparse.py @@ -0,0 +1,436 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import gzip +import logging +import importlib.util +import sys +from enum import Enum +from io import BytesIO + +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.objects.log.util import sorting +from pm4py.util import exec_utils, constants +from pm4py.util import xes_constants +from pm4py.util.dt_parsing import parser as dt_parser + + +class Parameters(Enum): + TIMESTAMP_SORT = "timestamp_sort" + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + REVERSE_SORT = "reverse_sort" + MAX_TRACES = "max_traces" + SHOW_PROGRESS_BAR = "show_progress_bar" + DECOMPRESS_SERIALIZATION = "decompress_serialization" + ENCODING = "encoding" + + +# ITERPARSE EVENTS +_EVENT_END = 'end' +_EVENT_START = 'start' + + +def count_traces(context): + """ + Efficiently count the number of traces of a XES event log + + Parameters + ------------- + context + XML iterparse context + Returns + ------------- + num_traces + Number of traces of the XES log + """ + num_traces = 0 + + for tree_event, elem in context: + if tree_event == _EVENT_START: # starting to read + if elem.tag.endswith(xes_constants.TAG_TRACE): + num_traces = num_traces + 1 + elem.clear() + + del context + + return num_traces + + +def import_from_context(context, num_traces, parameters=None): + """ + Import a XES log from an iterparse context + + Parameters + -------------- + context + Iterparse context + num_traces + Number of traces of the XES log + parameters + Parameters of the algorithm + + Returns + -------------- + log + Event log + """ + if parameters is None: + parameters = {} + + max_no_traces_to_import = exec_utils.get_param_value(Parameters.MAX_TRACES, parameters, sys.maxsize) + timestamp_sort = exec_utils.get_param_value(Parameters.TIMESTAMP_SORT, parameters, False) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + reverse_sort = exec_utils.get_param_value(Parameters.REVERSE_SORT, parameters, False) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + + date_parser = dt_parser.get() + progress = None + if importlib.util.find_spec("tqdm") and show_progress_bar: + from tqdm.auto import tqdm + progress = tqdm(total=num_traces, desc="parsing log, completed traces :: ") + + log = None + trace = None + event = None + + tree = {} + + for tree_event, elem in context: + if tree_event == _EVENT_START: # starting to read + parent = tree[elem.getparent()] if elem.getparent() in tree else None + + if elem.tag.endswith(xes_constants.TAG_STRING): + if parent is not None: + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), + elem.get(xes_constants.KEY_VALUE), tree) + continue + + elif elem.tag.endswith(xes_constants.TAG_DATE): + try: + dt = date_parser.apply(elem.get(xes_constants.KEY_VALUE)) + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), dt, tree) + except TypeError: + logging.info("failed to parse date: " + str(elem.get(xes_constants.KEY_VALUE))) + except ValueError: + logging.info("failed to parse date: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_EVENT): + if event is not None: + raise SyntaxError('file contains in another tag') + event = Event() + tree[elem] = event + continue + + elif elem.tag.endswith(xes_constants.TAG_TRACE): + if len(log) >= max_no_traces_to_import: + break + if trace is not None: + raise SyntaxError('file contains in another tag') + trace = Trace() + tree[elem] = trace.attributes + continue + + elif elem.tag.endswith(xes_constants.TAG_FLOAT): + if parent is not None: + try: + val = float(elem.get(xes_constants.KEY_VALUE)) + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse float: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_INT): + if parent is not None: + try: + val = int(elem.get(xes_constants.KEY_VALUE)) + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse int: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_BOOLEAN): + if parent is not None: + try: + val0 = elem.get(xes_constants.KEY_VALUE) + val = False + if str(val0).lower() == "true": + val = True + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse boolean: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_LIST): + if parent is not None: + # lists have no value, hence we put None as a value + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), None, tree) + continue + + elif elem.tag.endswith(xes_constants.TAG_ID): + if parent is not None: + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), + elem.get(xes_constants.KEY_VALUE), tree) + continue + + elif elem.tag.endswith(xes_constants.TAG_EXTENSION): + if log is None: + raise SyntaxError('extension found outside of tag') + if elem.get(xes_constants.KEY_NAME) is not None and elem.get( + xes_constants.KEY_PREFIX) is not None and elem.get(xes_constants.KEY_URI) is not None: + log.extensions[elem.get(xes_constants.KEY_NAME)] = { + xes_constants.KEY_PREFIX: elem.get(xes_constants.KEY_PREFIX), + xes_constants.KEY_URI: elem.get(xes_constants.KEY_URI)} + continue + + elif elem.tag.endswith(xes_constants.TAG_GLOBAL): + if log is None: + raise SyntaxError('global found outside of tag') + if elem.get(xes_constants.KEY_SCOPE) is not None: + log.omni_present[elem.get(xes_constants.KEY_SCOPE)] = {} + tree[elem] = log.omni_present[elem.get(xes_constants.KEY_SCOPE)] + continue + + elif elem.tag.endswith(xes_constants.TAG_CLASSIFIER): + if log is None: + raise SyntaxError('classifier found outside of tag') + if elem.get(xes_constants.KEY_KEYS) is not None: + classifier_value = elem.get(xes_constants.KEY_KEYS) + if "'" in classifier_value: + log.classifiers[elem.get(xes_constants.KEY_NAME)] = [x for x in classifier_value.split("'") + if x.strip()] + else: + log.classifiers[elem.get(xes_constants.KEY_NAME)] = classifier_value.split() + continue + + elif elem.tag.endswith(xes_constants.TAG_LOG): + if log is not None: + raise SyntaxError('file contains > 1 tags') + log = EventLog() + tree[elem] = log.attributes + continue + + elif tree_event == _EVENT_END: + if elem in tree: + del tree[elem] + elem.clear() + if elem.getprevious() is not None: + try: + del elem.getparent()[0] + except TypeError: + pass + + if elem.tag.endswith(xes_constants.TAG_EVENT): + if trace is not None: + trace.append(event) + event = None + continue + + elif elem.tag.endswith(xes_constants.TAG_TRACE): + log.append(trace) + + if progress is not None: + progress.update() + + trace = None + continue + + elif elem.tag.endswith(xes_constants.TAG_LOG): + continue + + # gracefully close progress bar + if progress is not None: + progress.close() + del context, progress + + if timestamp_sort: + log = sorting.sort_timestamp(log, timestamp_key=timestamp_key, reverse_sort=reverse_sort) + + # sets the activity key as default classifier in the log's properties + log.properties[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = xes_constants.DEFAULT_NAME_KEY + log.properties[constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY] = xes_constants.DEFAULT_NAME_KEY + # sets the default timestamp key + log.properties[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = xes_constants.DEFAULT_TIMESTAMP_KEY + # sets the default resource key + log.properties[constants.PARAMETER_CONSTANT_RESOURCE_KEY] = xes_constants.DEFAULT_RESOURCE_KEY + # sets the default transition key + log.properties[constants.PARAMETER_CONSTANT_TRANSITION_KEY] = xes_constants.DEFAULT_TRANSITION_KEY + # sets the default group key + log.properties[constants.PARAMETER_CONSTANT_GROUP_KEY] = xes_constants.DEFAULT_GROUP_KEY + + return log + + +def apply(filename, parameters=None): + """ + Imports an XES file into a log object + + Parameters + ---------- + filename: + Absolute filename + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + Parameters.ENCODING -> regulates the encoding (default: utf-8) + + Returns + ------- + log : :class:`pm4py.log.log.EventLog` + A log + """ + return import_log(filename, parameters) + + +def import_log(filename, parameters=None): + """ + Imports an XES file into a log object + + Parameters + ---------- + filename: + Absolute filename + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + Parameters.ENCODING -> regulates the encoding (default: utf-8) + + Returns + ------- + log : :class:`pm4py.log.log.EventLog` + A log + """ + from lxml import etree + + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + is_compressed = filename.lower().endswith(".gz") + + if importlib.util.find_spec("tqdm") and show_progress_bar: + if is_compressed: + f = gzip.open(filename, "rb") + else: + f = open(filename, "rb") + context = etree.iterparse(f, events=[_EVENT_START, _EVENT_END], encoding=encoding) + num_traces = count_traces(context) + f.close() + else: + # avoid the iteration to calculate the number of traces is "tqdm" is not used + num_traces = 0 + + if is_compressed: + f = gzip.open(filename, "rb") + else: + f = open(filename, "rb") + context = etree.iterparse(f, events=[_EVENT_START, _EVENT_END], encoding=encoding) + + log = import_from_context(context, num_traces, parameters=parameters) + f.close() + return log + + +def import_from_string(log_string, parameters=None): + """ + Deserialize a text/binary string representing a XES log + + Parameters + ----------- + log_string + String that contains the XES + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.INSERT_TRACE_INDICES -> Specify if trace indexes should be added as event attribute for each event + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + Parameters.ENCODING -> regulates the encoding (default: utf-8) + + Returns + ----------- + log + Trace log object + """ + from lxml import etree + + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + decompress_serialization = exec_utils.get_param_value(Parameters.DECOMPRESS_SERIALIZATION, parameters, False) + + if type(log_string) is str: + log_string = log_string.encode(constants.DEFAULT_ENCODING) + + if importlib.util.find_spec("tqdm") and show_progress_bar: + # first iteration: count the number of traces + b = BytesIO(log_string) + if decompress_serialization: + s = gzip.GzipFile(fileobj=b, mode="rb") + else: + s = b + context = etree.iterparse(s, events=[_EVENT_START, _EVENT_END], encoding=encoding) + num_traces = count_traces(context) + s.close() + b.close() + else: + # avoid the iteration to calculate the number of traces is "tqdm" is not used + num_traces = 0 + + # second iteration: actually read the content + b = BytesIO(log_string) + if decompress_serialization: + s = gzip.GzipFile(fileobj=b, mode="rb") + else: + s = b + context = etree.iterparse(s, events=[_EVENT_START, _EVENT_END], encoding=encoding) + log = import_from_context(context, num_traces, parameters=parameters) + s.close() + b.close() + return log + + +def __parse_attribute(elem, store, key, value, tree): + if len(elem.getchildren()) == 0: + if type(store) is list: + # changes to the store of lists: not dictionaries anymore + # but pairs of key-values. + store.append((key, value)) + else: + store[key] = value + else: + if elem.getchildren()[0].tag.endswith(xes_constants.TAG_VALUES): + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: list()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + tree[elem.getchildren()[0]] = tree[elem] + else: + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: dict()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + return tree diff --git a/pm4py/pm4py/objects/log/importer/xes/variants/iterparse_20.py b/pm4py/pm4py/objects/log/importer/xes/variants/iterparse_20.py new file mode 100644 index 0000000000000000000000000000000000000000..ba2ccc06d56f8062e0c0114e25406f2dd5910cb4 --- /dev/null +++ b/pm4py/pm4py/objects/log/importer/xes/variants/iterparse_20.py @@ -0,0 +1,440 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import gzip +import logging +import importlib.util +import sys +from enum import Enum +from io import BytesIO + +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.objects.log.util import sorting +from pm4py.util import exec_utils, constants +from pm4py.util import xes_constants +from pm4py.util.dt_parsing import parser as dt_parser + + +class Parameters(Enum): + TIMESTAMP_SORT = "timestamp_sort" + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + REVERSE_SORT = "reverse_sort" + MAX_TRACES = "max_traces" + SHOW_PROGRESS_BAR = "show_progress_bar" + DECOMPRESS_SERIALIZATION = "decompress_serialization" + ENCODING = "encoding" + + +# ITERPARSE EVENTS +_EVENT_END = 'end' +_EVENT_START = 'start' + + +def count_traces(context): + """ + Efficiently count the number of traces of a XES event log + + Parameters + ------------- + context + XML iterparse context + Returns + ------------- + num_traces + Number of traces of the XES log + """ + num_traces = 0 + + for tree_event, elem in context: + if tree_event == _EVENT_START: # starting to read + if elem.tag.endswith(xes_constants.TAG_TRACE): + num_traces = num_traces + 1 + elem.clear() + + del context + + return num_traces + + +def import_from_context(context, num_traces, parameters=None): + """ + Import a XES log from an iterparse context + + Parameters + -------------- + context + Iterparse context + num_traces + Number of traces of the XES log + parameters + Parameters of the algorithm + + Returns + -------------- + log + Event log + """ + if parameters is None: + parameters = {} + + max_no_traces_to_import = exec_utils.get_param_value(Parameters.MAX_TRACES, parameters, sys.maxsize) + timestamp_sort = exec_utils.get_param_value(Parameters.TIMESTAMP_SORT, parameters, False) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + reverse_sort = exec_utils.get_param_value(Parameters.REVERSE_SORT, parameters, False) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + + date_parser = dt_parser.get() + progress = None + if importlib.util.find_spec("tqdm") and show_progress_bar: + from tqdm.auto import tqdm + progress = tqdm(total=num_traces, desc="parsing log, completed traces :: ") + + log = None + trace = None + event = None + + tree = {} + + for tree_event, elem in context: + if tree_event == _EVENT_START: # starting to read + parent = tree[elem.getparent()] if elem.getparent() in tree else None + + if elem.tag.endswith(xes_constants.TAG_STRING): + if parent is not None: + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), + elem.get(xes_constants.KEY_VALUE), tree) + continue + + elif elem.tag.endswith(xes_constants.TAG_DATE): + try: + dt = date_parser.apply(elem.get(xes_constants.KEY_VALUE)) + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), dt, tree) + except TypeError: + logging.info("failed to parse date: " + str(elem.get(xes_constants.KEY_VALUE))) + except ValueError: + logging.info("failed to parse date: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_EVENT): + if event is not None: + raise SyntaxError('file contains in another tag') + event = Event() + tree[elem] = event + continue + + elif elem.tag.endswith(xes_constants.TAG_TRACE): + if len(log) >= max_no_traces_to_import: + break + if trace is not None: + raise SyntaxError('file contains in another tag') + trace = Trace() + tree[elem] = trace.attributes + continue + + elif elem.tag.endswith(xes_constants.TAG_FLOAT): + if parent is not None: + try: + val = float(elem.get(xes_constants.KEY_VALUE)) + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse float: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_INT): + if parent is not None: + try: + val = int(elem.get(xes_constants.KEY_VALUE)) + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse int: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_BOOLEAN): + if parent is not None: + try: + val0 = elem.get(xes_constants.KEY_VALUE) + val = False + if str(val0).lower() == "true": + val = True + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse boolean: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_LIST) or elem.tag.endswith(xes_constants.TAG_CONTAINER): + if parent is not None: + # lists have no value, hence we put None as a value + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), None, tree) + continue + + elif elem.tag.endswith(xes_constants.TAG_ID): + if parent is not None: + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), + elem.get(xes_constants.KEY_VALUE), tree) + continue + + elif elem.tag.endswith(xes_constants.TAG_EXTENSION): + if log is None: + raise SyntaxError('extension found outside of tag') + if elem.get(xes_constants.KEY_NAME) is not None and elem.get( + xes_constants.KEY_PREFIX) is not None and elem.get(xes_constants.KEY_URI) is not None: + log.extensions[elem.get(xes_constants.KEY_NAME)] = { + xes_constants.KEY_PREFIX: elem.get(xes_constants.KEY_PREFIX), + xes_constants.KEY_URI: elem.get(xes_constants.KEY_URI)} + continue + + elif elem.tag.endswith(xes_constants.TAG_GLOBAL): + if log is None: + raise SyntaxError('global found outside of tag') + if elem.get(xes_constants.KEY_SCOPE) is not None: + log.omni_present[elem.get(xes_constants.KEY_SCOPE)] = {} + tree[elem] = log.omni_present[elem.get(xes_constants.KEY_SCOPE)] + continue + + elif elem.tag.endswith(xes_constants.TAG_CLASSIFIER): + if log is None: + raise SyntaxError('classifier found outside of tag') + if elem.get(xes_constants.KEY_KEYS) is not None: + classifier_value = elem.get(xes_constants.KEY_KEYS) + if "'" in classifier_value: + log.classifiers[elem.get(xes_constants.KEY_NAME)] = [x for x in classifier_value.split("'") + if x.strip()] + else: + log.classifiers[elem.get(xes_constants.KEY_NAME)] = classifier_value.split() + continue + + elif elem.tag.endswith(xes_constants.TAG_LOG): + if log is not None: + raise SyntaxError('file contains > 1 tags') + log = EventLog() + tree[elem] = log.attributes + continue + + elif tree_event == _EVENT_END: + if elem in tree: + del tree[elem] + elem.clear() + if elem.getprevious() is not None: + try: + del elem.getparent()[0] + except TypeError: + pass + + if elem.tag.endswith(xes_constants.TAG_EVENT): + if trace is not None: + trace.append(event) + event = None + continue + + elif elem.tag.endswith(xes_constants.TAG_TRACE): + log.append(trace) + + if progress is not None: + progress.update() + + trace = None + continue + + elif elem.tag.endswith(xes_constants.TAG_LOG): + continue + + # gracefully close progress bar + if progress is not None: + progress.close() + del context, progress + + if timestamp_sort: + log = sorting.sort_timestamp(log, timestamp_key=timestamp_key, reverse_sort=reverse_sort) + + # sets the activity key as default classifier in the log's properties + log.properties[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = xes_constants.DEFAULT_NAME_KEY + log.properties[constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY] = xes_constants.DEFAULT_NAME_KEY + # sets the default timestamp key + log.properties[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = xes_constants.DEFAULT_TIMESTAMP_KEY + # sets the default resource key + log.properties[constants.PARAMETER_CONSTANT_RESOURCE_KEY] = xes_constants.DEFAULT_RESOURCE_KEY + # sets the default transition key + log.properties[constants.PARAMETER_CONSTANT_TRANSITION_KEY] = xes_constants.DEFAULT_TRANSITION_KEY + # sets the default group key + log.properties[constants.PARAMETER_CONSTANT_GROUP_KEY] = xes_constants.DEFAULT_GROUP_KEY + + return log + + +def apply(filename, parameters=None): + """ + Imports an XES file into a log object + + Parameters + ---------- + filename: + Absolute filename + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + Parameters.ENCODING -> regulates the encoding (default: utf-8) + + Returns + ------- + log : :class:`pm4py.log.log.EventLog` + A log + """ + return import_log(filename, parameters) + + +def import_log(filename, parameters=None): + """ + Imports an XES file into a log object + + Parameters + ---------- + filename: + Absolute filename + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + Parameters.ENCODING -> regulates the encoding (default: utf-8) + + Returns + ------- + log : :class:`pm4py.log.log.EventLog` + A log + """ + from lxml import etree + + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + is_compressed = filename.lower().endswith(".gz") + + if importlib.util.find_spec("tqdm") and show_progress_bar: + if is_compressed: + f = gzip.open(filename, "rb") + else: + f = open(filename, "rb") + context = etree.iterparse(f, events=[_EVENT_START, _EVENT_END], encoding=encoding) + num_traces = count_traces(context) + f.close() + else: + # avoid the iteration to calculate the number of traces is "tqdm" is not used + num_traces = 0 + + if is_compressed: + f = gzip.open(filename, "rb") + else: + f = open(filename, "rb") + context = etree.iterparse(f, events=[_EVENT_START, _EVENT_END], encoding=encoding) + + log = import_from_context(context, num_traces, parameters=parameters) + f.close() + return log + + +def import_from_string(log_string, parameters=None): + """ + Deserialize a text/binary string representing a XES log + + Parameters + ----------- + log_string + String that contains the XES + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.INSERT_TRACE_INDICES -> Specify if trace indexes should be added as event attribute for each event + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + Parameters.ENCODING -> regulates the encoding (default: utf-8) + + Returns + ----------- + log + Trace log object + """ + from lxml import etree + + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + decompress_serialization = exec_utils.get_param_value(Parameters.DECOMPRESS_SERIALIZATION, parameters, False) + + if type(log_string) is str: + log_string = log_string.encode(constants.DEFAULT_ENCODING) + + if importlib.util.find_spec("tqdm") and show_progress_bar: + # first iteration: count the number of traces + b = BytesIO(log_string) + if decompress_serialization: + s = gzip.GzipFile(fileobj=b, mode="rb") + else: + s = b + context = etree.iterparse(s, events=[_EVENT_START, _EVENT_END], encoding=encoding) + num_traces = count_traces(context) + s.close() + b.close() + else: + # avoid the iteration to calculate the number of traces is "tqdm" is not used + num_traces = 0 + + # second iteration: actually read the content + b = BytesIO(log_string) + if decompress_serialization: + s = gzip.GzipFile(fileobj=b, mode="rb") + else: + s = b + context = etree.iterparse(s, events=[_EVENT_START, _EVENT_END], encoding=encoding) + log = import_from_context(context, num_traces, parameters=parameters) + s.close() + b.close() + return log + + +def __parse_attribute(elem, store, key, value, tree): + if len(elem.getchildren()) == 0: + if type(store) is list: + # changes to the store of lists: not dictionaries anymore + # but pairs of key-values. + store.append((key, value)) + elif type(store) is set: + store.add((key, value)) + else: + store[key] = value + else: + if elem.tag.endswith(xes_constants.TAG_LIST): + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: list()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + elif elem.tag.endswith(xes_constants.TAG_CONTAINER): + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: set()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + else: + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: dict()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + return tree diff --git a/pm4py/pm4py/objects/log/importer/xes/variants/iterparse_mem_compressed.py b/pm4py/pm4py/objects/log/importer/xes/variants/iterparse_mem_compressed.py new file mode 100644 index 0000000000000000000000000000000000000000..3b7455925a0286f5f7182fbf8e47f3658f098489 --- /dev/null +++ b/pm4py/pm4py/objects/log/importer/xes/variants/iterparse_mem_compressed.py @@ -0,0 +1,450 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import gzip +import logging +import importlib.util +import sys +from enum import Enum +from io import BytesIO + +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.objects.log.util import sorting +from pm4py.util import exec_utils, constants +from pm4py.util import xes_constants +from pm4py.util.dt_parsing import parser as dt_parser + + +class Parameters(Enum): + TIMESTAMP_SORT = "timestamp_sort" + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + REVERSE_SORT = "reverse_sort" + MAX_TRACES = "max_traces" + SHOW_PROGRESS_BAR = "show_progress_bar" + DECOMPRESS_SERIALIZATION = "decompress_serialization" + ENCODING = "encoding" + + +# ITERPARSE EVENTS +_EVENT_END = 'end' +_EVENT_START = 'start' + + +def count_traces(context): + """ + Efficiently count the number of traces of a XES event log + + Parameters + ------------- + context + XML iterparse context + Returns + ------------- + num_traces + Number of traces of the XES log + """ + num_traces = 0 + + for tree_event, elem in context: + if tree_event == _EVENT_START: # starting to read + if elem.tag.endswith(xes_constants.TAG_TRACE): + num_traces = num_traces + 1 + elem.clear() + + del context + + return num_traces + + +def import_from_context(context, num_traces, log, parameters=None): + """ + Import a XES log from an iterparse context + + Parameters + -------------- + context + Iterparse context + num_traces + Number of traces of the XES log + log + Event log (empty) + parameters + Parameters of the algorithm + + Returns + -------------- + log + Event log (filled with the contents of the XES log) + """ + if parameters is None: + parameters = {} + + max_no_traces_to_import = exec_utils.get_param_value(Parameters.MAX_TRACES, parameters, sys.maxsize) + timestamp_sort = exec_utils.get_param_value(Parameters.TIMESTAMP_SORT, parameters, False) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + reverse_sort = exec_utils.get_param_value(Parameters.REVERSE_SORT, parameters, False) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + + date_parser = dt_parser.get() + progress = None + if importlib.util.find_spec("tqdm") and show_progress_bar: + from tqdm.auto import tqdm + progress = tqdm(total=num_traces, desc="parsing log, completed traces :: ") + + trace = None + event = None + + tree = {} + compression_dictio = {} + + for tree_event, elem in context: + if tree_event == _EVENT_START: # starting to read + parent = tree[elem.getparent()] if elem.getparent() in tree else None + + if elem.tag.endswith(xes_constants.TAG_STRING): + if parent is not None: + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), + elem.get(xes_constants.KEY_VALUE), tree, compression_dictio) + continue + + elif elem.tag.endswith(xes_constants.TAG_DATE): + try: + dt = date_parser.apply(elem.get(xes_constants.KEY_VALUE)) + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), dt, tree, + compression_dictio) + except TypeError: + logging.info("failed to parse date: " + str(elem.get(xes_constants.KEY_VALUE))) + except ValueError: + logging.info("failed to parse date: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_EVENT): + if event is not None: + raise SyntaxError('file contains in another tag') + event = Event() + tree[elem] = event + continue + + elif elem.tag.endswith(xes_constants.TAG_TRACE): + if len(log) >= max_no_traces_to_import: + break + if trace is not None: + raise SyntaxError('file contains in another tag') + trace = Trace() + tree[elem] = trace.attributes + continue + + elif elem.tag.endswith(xes_constants.TAG_FLOAT): + if parent is not None: + try: + val = float(elem.get(xes_constants.KEY_VALUE)) + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree, + compression_dictio) + except ValueError: + logging.info("failed to parse float: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_INT): + if parent is not None: + try: + val = int(elem.get(xes_constants.KEY_VALUE)) + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree, + compression_dictio) + except ValueError: + logging.info("failed to parse int: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_BOOLEAN): + if parent is not None: + try: + val0 = elem.get(xes_constants.KEY_VALUE) + val = False + if str(val0).lower() == "true": + val = True + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree, + compression_dictio) + except ValueError: + logging.info("failed to parse boolean: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_LIST): + if parent is not None: + # lists have no value, hence we put None as a value + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), None, tree, + compression_dictio) + continue + + elif elem.tag.endswith(xes_constants.TAG_ID): + if parent is not None: + tree = __parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), + elem.get(xes_constants.KEY_VALUE), tree, compression_dictio) + continue + + elif elem.tag.endswith(xes_constants.TAG_EXTENSION): + if elem.get(xes_constants.KEY_NAME) is not None and elem.get( + xes_constants.KEY_PREFIX) is not None and elem.get(xes_constants.KEY_URI) is not None: + log.extensions[elem.get(xes_constants.KEY_NAME)] = { + xes_constants.KEY_PREFIX: elem.get(xes_constants.KEY_PREFIX), + xes_constants.KEY_URI: elem.get(xes_constants.KEY_URI)} + continue + + elif elem.tag.endswith(xes_constants.TAG_GLOBAL): + if elem.get(xes_constants.KEY_SCOPE) is not None: + log.omni_present[elem.get(xes_constants.KEY_SCOPE)] = {} + tree[elem] = log.omni_present[elem.get(xes_constants.KEY_SCOPE)] + continue + + elif elem.tag.endswith(xes_constants.TAG_CLASSIFIER): + if elem.get(xes_constants.KEY_KEYS) is not None: + classifier_value = elem.get(xes_constants.KEY_KEYS) + if "'" in classifier_value: + log.classifiers[elem.get(xes_constants.KEY_NAME)] = [x for x in classifier_value.split("'") + if x.strip()] + else: + log.classifiers[elem.get(xes_constants.KEY_NAME)] = classifier_value.split() + continue + + elif elem.tag.endswith(xes_constants.TAG_LOG): + tree[elem] = log.attributes + continue + + elif tree_event == _EVENT_END: + if elem in tree: + del tree[elem] + elem.clear() + if elem.getprevious() is not None: + try: + del elem.getparent()[0] + except TypeError: + pass + + if elem.tag.endswith(xes_constants.TAG_EVENT): + if trace is not None: + trace.append(event) + event = None + continue + + elif elem.tag.endswith(xes_constants.TAG_TRACE): + log.append(trace) + + if progress is not None: + progress.update() + + trace = None + continue + + elif elem.tag.endswith(xes_constants.TAG_LOG): + continue + + # gracefully close progress bar + if progress is not None: + progress.close() + del context, progress + + if timestamp_sort: + log = sorting.sort_timestamp(log, timestamp_key=timestamp_key, reverse_sort=reverse_sort) + + # sets the activity key as default classifier in the log's properties + log.properties[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = xes_constants.DEFAULT_NAME_KEY + log.properties[constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY] = xes_constants.DEFAULT_NAME_KEY + # sets the default timestamp key + log.properties[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = xes_constants.DEFAULT_TIMESTAMP_KEY + # sets the default resource key + log.properties[constants.PARAMETER_CONSTANT_RESOURCE_KEY] = xes_constants.DEFAULT_RESOURCE_KEY + # sets the default transition key + log.properties[constants.PARAMETER_CONSTANT_TRANSITION_KEY] = xes_constants.DEFAULT_TRANSITION_KEY + # sets the default group key + log.properties[constants.PARAMETER_CONSTANT_GROUP_KEY] = xes_constants.DEFAULT_GROUP_KEY + + return log + + +def apply(filename, parameters=None): + """ + Imports an XES file into a log object + + Parameters + ---------- + filename: + Absolute filename + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + Parameters.ENCODING -> regulates the encoding (default: utf-8) + + Returns + ------- + log : :class:`pm4py.log.log.EventLog` + A log + """ + return import_log(filename, parameters) + + +def import_log(filename, parameters=None): + """ + Imports an XES file into a log object + + Parameters + ---------- + filename: + Absolute filename + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + Parameters.ENCODING -> regulates the encoding (default: utf-8) + + Returns + ------- + log : :class:`pm4py.log.log.EventLog` + A log + """ + from lxml import etree + + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + is_compressed = filename.lower().endswith(".gz") + + if importlib.util.find_spec("tqdm") and show_progress_bar: + if is_compressed: + f = gzip.open(filename, "rb") + else: + f = open(filename, "rb") + context = etree.iterparse(f, events=[_EVENT_START, _EVENT_END], encoding=encoding) + num_traces = count_traces(context) + f.close() + else: + # avoid the iteration to calculate the number of traces is "tqdm" is not used + num_traces = 0 + + if is_compressed: + f = gzip.open(filename, "rb") + else: + f = open(filename, "rb") + context = etree.iterparse(f, events=[_EVENT_START, _EVENT_END], encoding=encoding) + + log = EventLog() + log = import_from_context(context, num_traces, log, parameters=parameters) + f.close() + return log + + +def import_from_string(log_string, parameters=None): + """ + Deserialize a text/binary string representing a XES log + + Parameters + ----------- + log_string + String that contains the XES + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.INSERT_TRACE_INDICES -> Specify if trace indexes should be added as event attribute for each event + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.SHOW_PROGRESS_BAR -> Enables/disables the progress bar (default: True) + Parameters.ENCODING -> regulates the encoding (default: utf-8) + + Returns + ----------- + log + Trace log object + """ + from lxml import etree + + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, constants.SHOW_PROGRESS_BAR) + decompress_serialization = exec_utils.get_param_value(Parameters.DECOMPRESS_SERIALIZATION, parameters, False) + + if type(log_string) is str: + log_string = log_string.encode(constants.DEFAULT_ENCODING) + + if importlib.util.find_spec("tqdm") and show_progress_bar: + # first iteration: count the number of traces + b = BytesIO(log_string) + if decompress_serialization: + s = gzip.GzipFile(fileobj=b, mode="rb") + else: + s = b + context = etree.iterparse(s, events=[_EVENT_START, _EVENT_END], encoding=encoding) + num_traces = count_traces(context) + s.close() + b.close() + else: + # avoid the iteration to calculate the number of traces is "tqdm" is not used + num_traces = 0 + + # second iteration: actually read the content + b = BytesIO(log_string) + if decompress_serialization: + s = gzip.GzipFile(fileobj=b, mode="rb") + else: + s = b + context = etree.iterparse(s, events=[_EVENT_START, _EVENT_END], encoding=encoding) + log = EventLog() + log = import_from_context(context, num_traces, log, parameters=parameters) + s.close() + b.close() + return log + + +def __parse_attribute(elem, store, key, value, tree, compression_dict): + if len(elem.getchildren()) == 0: + if key in compression_dict: + # using existing istantiations of existing objects + key = compression_dict[key] + else: + # set up a new instantiation + compression_dict[key] = key + + if value in compression_dict: + # using existing istantiations of existing objects + value = compression_dict[value] + else: + # set up a new instantiation + compression_dict[value] = value + + if type(store) is list: + # changes to the store of lists: not dictionaries anymore + # but pairs of key-values. + store.append((key, value)) + else: + store[key] = value + else: + if elem.getchildren()[0].tag.endswith(xes_constants.TAG_VALUES): + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: list()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + tree[elem.getchildren()[0]] = tree[elem] + else: + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: dict()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + return tree diff --git a/pm4py/pm4py/objects/log/importer/xes/variants/line_by_line.py b/pm4py/pm4py/objects/log/importer/xes/variants/line_by_line.py new file mode 100644 index 0000000000000000000000000000000000000000..acf3f1ce59eee2cbce505a0977e6043e650825bb --- /dev/null +++ b/pm4py/pm4py/objects/log/importer/xes/variants/line_by_line.py @@ -0,0 +1,295 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import gzip +import os +import sys +from enum import Enum +from io import BytesIO + +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.objects.log.util import sorting +from pm4py.util import constants, xes_constants, exec_utils +from pm4py.util.dt_parsing import parser as dt_parser + + +class Parameters(Enum): + TIMESTAMP_SORT = "timestamp_sort" + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + REVERSE_SORT = "reverse_sort" + MAX_TRACES = "max_traces" + MAX_BYTES = "max_bytes" + SKIP_BYTES = "skip_bytes" + SET_ATTRIBUTES_TO_READ = "set_attributes_to_read" + DECOMPRESS_SERIALIZATION = "decompress_serialization" + ENCODING = "encoding" + + +def apply(filename, parameters=None): + return import_log(filename, parameters) + + +def __fetch_param_value(param, params): + return params[param] if param in params else param.value + + +def read_attribute_key_value(tag, content, date_parser, values_dict, set_attributes_to_read): + """ + Reads an attribute from the line of the log + + Parameters + -------------- + tag + Tag + content + Full content of the line + date_parser + Date parser + values_dict + Dictionary of keys/values already met during the parsing + set_attributes_to_read + Names of the attributes that should be parsed. If None, then, all the attributes are parsed. + + Returns + -------------- + key + Key of the attribute + value + Value of the attribute + """ + key = content[1] + value = None + + if set_attributes_to_read is None or key in set_attributes_to_read: + if tag.startswith("string"): + value = content[3] + elif tag.startswith("date"): + value = date_parser.apply(content[3]) + elif tag.startswith("int"): + value = int(content[3]) + elif tag.startswith("float"): + value = float(content[3]) + elif tag.startswith("boolean"): + value = True if content[3] == "true" else False + else: + value = content[3] + + # limits the number of different instantiations of the same key + if key in values_dict: + key = values_dict[key] + else: + values_dict[key] = key + + # limits the number of different instantations of the same value + if value in values_dict: + value = values_dict[value] + else: + values_dict[value] = value + + return key, value + + +def import_log_from_file_object(f, encoding, file_size=sys.maxsize, parameters=None): + """ + Import a log object from a (XML) file object + + Parameters + ----------- + f + file object + encoding + Encoding + file_size + Size of the file (measured on disk) + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.MAX_BYTES -> Maximum number of bytes to read + Parameters.SKYP_BYTES -> Number of bytes to skip + Parameters.SET_ATTRIBUTES_TO_READ -> Names of the attributes that should be parsed. If not specified, + then, all the attributes are parsed. + + Returns + ----------- + log + Log file + """ + values_dict = {} + date_parser = dt_parser.get() + + set_attributes_to_read = exec_utils.get_param_value(Parameters.SET_ATTRIBUTES_TO_READ, parameters, None) + max_no_traces_to_import = exec_utils.get_param_value(Parameters.MAX_TRACES, parameters, sys.maxsize) + timestamp_sort = exec_utils.get_param_value(Parameters.TIMESTAMP_SORT, parameters, False) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + reverse_sort = exec_utils.get_param_value(Parameters.REVERSE_SORT, parameters, False) + + skip_bytes = exec_utils.get_param_value(Parameters.SKIP_BYTES, parameters, False) + max_bytes_to_read = exec_utils.get_param_value(Parameters.MAX_BYTES, parameters, sys.maxsize) + + if file_size > max_bytes_to_read: + skip_bytes = file_size - max_bytes_to_read + + log = EventLog() + tracecount = 0 + trace = None + event = None + + f.seek(skip_bytes) + + for line in f: + content = line.decode(encoding).split("\"") + if len(content) > 0: + tag = content[0].split("<")[-1] + if trace is not None: + if event is not None: + if len(content) == 5: + key, value = read_attribute_key_value(tag, content, date_parser, values_dict, + set_attributes_to_read) + if value is not None: + event[key] = value + elif tag.startswith("/event"): + trace.append(event) + event = None + elif tag.startswith("event"): + event = Event() + elif len(content) == 5: + key, value = read_attribute_key_value(tag, content, date_parser, values_dict, + set_attributes_to_read) + if value is not None: + trace.attributes[key] = value + elif tag.startswith("/trace"): + log.append(trace) + tracecount += 1 + if tracecount > max_no_traces_to_import: + break + trace = None + elif tag.startswith("trace"): + trace = Trace() + + if timestamp_sort: + log = sorting.sort_timestamp(log, timestamp_key=timestamp_key, reverse_sort=reverse_sort) + + # sets the activity key as default classifier in the log's properties + log.properties[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = xes_constants.DEFAULT_NAME_KEY + log.properties[constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY] = xes_constants.DEFAULT_NAME_KEY + # sets the default timestamp key + log.properties[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = xes_constants.DEFAULT_TIMESTAMP_KEY + # sets the default resource key + log.properties[constants.PARAMETER_CONSTANT_RESOURCE_KEY] = xes_constants.DEFAULT_RESOURCE_KEY + # sets the default transition key + log.properties[constants.PARAMETER_CONSTANT_TRANSITION_KEY] = xes_constants.DEFAULT_TRANSITION_KEY + # sets the default group key + log.properties[constants.PARAMETER_CONSTANT_GROUP_KEY] = xes_constants.DEFAULT_GROUP_KEY + + return log + + +def import_log(filename, parameters=None): + """ + Import a log object from a XML file + containing the traces, the events and the simple attributes of them + + Parameters + ----------- + filename + XES file to parse + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.MAX_BYTES -> Maximum number of bytes to read + Parameters.SKYP_BYTES -> Number of bytes to skip + Parameters.SET_ATTRIBUTES_TO_READ -> Names of the attributes that should be parsed. If not specified, + then, all the attributes are parsed. + Parameters.ENCODING -> Regulates the encoding of the log (default: utf-8) + + Returns + ----------- + log + Log file + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + is_compressed = filename.endswith(".gz") + file_size = os.stat(filename).st_size + + if is_compressed: + f = gzip.open(filename, mode="rb") + else: + f = open(filename, "rb") + + log = import_log_from_file_object(f, encoding, file_size=file_size, parameters=parameters) + + f.close() + + return log + + +def import_from_string(log_string, parameters=None): + """ + Deserialize a text/binary string representing a XES log + + Parameters + ----------- + log_string + String that contains the XES + parameters + Parameters of the algorithm, including + Parameters.TIMESTAMP_SORT -> Specify if we should sort log by timestamp + Parameters.TIMESTAMP_KEY -> If sort is enabled, then sort the log by using this key + Parameters.REVERSE_SORT -> Specify in which direction the log should be sorted + Parameters.INSERT_TRACE_INDICES -> Specify if trace indexes should be added as event attribute for each event + Parameters.MAX_TRACES -> Specify the maximum number of traces to import from the log (read in order in the XML file) + Parameters.DECOMPRESS_SERIALIZATION -> Specify if the string needs to be decompressed during the parsing + Parameters.SET_ATTRIBUTES_TO_READ -> Names of the attributes that should be parsed. If not specified, + then, all the attributes are parsed. + Parameters.ENCODING -> Regulates the encoding of the log (default: utf-8) + + Returns + ----------- + log + Trace log object + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + decompress_serialization = exec_utils.get_param_value(Parameters.DECOMPRESS_SERIALIZATION, parameters, False) + + if type(log_string) is str: + log_string = log_string.encode(constants.DEFAULT_ENCODING) + + b = BytesIO(log_string) + + if decompress_serialization: + s = gzip.GzipFile(fileobj=b, mode="rb") + else: + s = b + + log = import_log_from_file_object(s, encoding, parameters=parameters) + s.close() + b.close() + return log diff --git a/pm4py/pm4py/objects/log/importer/xes/variants/rustxes.py b/pm4py/pm4py/objects/log/importer/xes/variants/rustxes.py new file mode 100644 index 0000000000000000000000000000000000000000..e8fb317539181482369c5dd7cba33fba3a71e9a3 --- /dev/null +++ b/pm4py/pm4py/objects/log/importer/xes/variants/rustxes.py @@ -0,0 +1,58 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter +import pandas as pd +from copy import copy +from pm4py.util.dt_parsing.variants import strpfromiso +import importlib.util + + +class Parameters(Enum): + RETURN_LEGACY_LOG_OBJECT = "return_legacy_log_object" + + +def apply(log_path: str, parameters: Optional[Dict[Any, Any]] = None) -> Union[EventLog, pd.DataFrame]: + if parameters is None: + parameters = {} + + return_legacy_log_object = exec_utils.get_param_value(Parameters.RETURN_LEGACY_LOG_OBJECT, parameters, True) + + import rustxes + + log = rustxes.import_xes(log_path) + log = log[0] + log = log.to_pandas() + + for col in log.columns: + if "date" in str(log[col].dtype) or "time" in str(log[col].dtype): + log[col] = strpfromiso.fix_dataframe_column(log[col]) + + if importlib.util.find_spec("cudf"): + import cudf + log = cudf.DataFrame(log) + + if return_legacy_log_object: + this_parameters = copy(parameters) + this_parameters["stream_postprocessing"] = True + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=this_parameters) + + return log diff --git a/pm4py/pm4py/objects/log/obj.py b/pm4py/pm4py/objects/log/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..b4914d4c4bb4f50d91d2f3e2bae7e3581eb0c9cc --- /dev/null +++ b/pm4py/pm4py/objects/log/obj.py @@ -0,0 +1,377 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +from collections.abc import Mapping, Sequence +from enum import Enum + + +class XESExtension(Enum): + ArtifactLifecycle = ( + 'ArtifactLifecycle', 'artifactlifecycle', 'http://www.xes-standard.org/artifactlifecycle.xesext') + Concept = ('Concept', 'concept', 'http://www.xes-standard.org/concept.xesext') + Cost = ('Cost', 'cost', 'http://www.xes-standard.org/cost.xesext') + Identity = ('Identity', 'identity', 'http://www.xes-standard.org/identity.xesext') + Lifecycle = ('Lifecycle', 'lifecycle', 'http://www.xes-standard.org/lifecycle.xesext') + Micro = ('Micro', 'micro', 'http://www.xes-standard.org/micro.xesext') + Organizational = ('Organizational', 'org', 'http://www.xes-standard.org/org.xesext') + Semantic = ('Semantic', 'semantic', 'http://www.xes-standard.org/semantic.xesext') + SoftwareCommunication = ('Software Communication', 'swcomm', 'http://www.xes-standard.org/swcomm.xesext') + SoftwareEvent = ('Software Event', 'swevent', 'http://www.xes-standard.org/swevent.xesext') + SoftwareTelemetry = ('Software Telemetry', 'swtelemetry', 'http://www.xes-standard.org/swtelemetry.xesext') + Time = ('Time', 'time', 'http://www.xes-standard.org/time.xesext') + + def __init__(self, name, prefix, uri): + self._name = name + self._prefix = prefix + self._uri = uri + + @property + def name(self): + return self._name + + @property + def prefix(self): + return self._prefix + + @property + def uri(self): + return self._uri + + +class Event(Mapping): + def __init__(self, *args, **kw): + self._dict = dict(*args, **kw) + + def __getitem__(self, key): + return self._dict[key] + + def __setitem__(self, key, value): + self._dict[key] = value + + def __iter__(self): + return iter(self._dict) + + def __len__(self): + return len(self._dict) + + def __delitem__(self, key): + del self._dict[key] + + def __repr__(self): + return str(dict(self)) + + def __hash__(self): + return hash(frozenset((str(x), str(y)) for x, y in self.items())) + + def __eq__(self, other): + return frozenset((str(x), str(y)) for x, y in self.items()) == frozenset((str(x), str(y)) for x, y in other.items()) + + def __copy__(self): + event = Event() + for k, v in self._dict.items(): + event[k] = v + return event + + def __deepcopy__(self, memodict={}): + event = Event() + for k, v in self._dict.items(): + if type(v) is dict: + event[k] = copy.deepcopy(v) + else: + event[k] = v + return event + + +class EventStream(Sequence): + + def __init__(self, *args, **kwargs): + self._attributes = kwargs['attributes'] if 'attributes' in kwargs else {} + self._extensions = kwargs['extensions'] if 'extensions' in kwargs else {} + self._omni = kwargs['omni_present'] if 'omni_present' in kwargs else kwargs[ + 'globals'] if 'globals' in kwargs else {} + self._classifiers = kwargs['classifiers'] if 'classifiers' in kwargs else {} + self._properties = kwargs['properties'] if 'properties' in kwargs else {} + self._list = list(*args) + + def __hash__(self): + ret = 0 + for ev in self._list: + ret += hash(ev) + ret = ret % 479001599 + return ret + + def __eq__(self, other): + if len(self) != len(other): + return False + elif self.attributes != other.attributes: + return False + elif self.extensions != other.extensions: + return False + elif self.omni_present != other.omni_present: + return False + elif self.classifiers != other.classifiers: + return False + else: + for i in range(len(self._list)): + if self[i] != other[i]: + return False + return True + + def __getitem__(self, key): + return self._list[key] + + def __iter__(self): + return iter(self._list) + + def __len__(self): + return len(self._list) + + def __contains__(self, item): + return item in self._list + + def __reversed__(self): + return reversed(self._list) + + def __setitem__(self, key, value): + self._list[key] = value + + def index(self, x, start: int = ..., end: int = ...): + return self._list.index(x, start, end) + + def count(self, x): + return self._list.count(x) + + def __str__(self): + return str(self._list) + + def append(self, x): + self._list.append(x) + + def _get_attributes(self): + return self._attributes + + def _get_extensions(self): + return self._extensions + + def _get_omni(self): + return self._omni + + def _get_classifiers(self): + return self._classifiers + + def _get_properties(self): + return self._properties + + def _set_properties(self, properties): + self._properties = properties + + def __copy__(self): + event_stream = EventStream() + event_stream._attributes = copy.copy(self._attributes) + event_stream._extensions = copy.copy(self._extensions) + event_stream._omni = copy.copy(self._omni) + event_stream._classifiers = copy.copy(self._classifiers) + event_stream._properties = copy.copy(self._properties) + for ev in self._list: + event_stream._list.append(ev) + return event_stream + + def __deepcopy__(self, memodict={}): + event_stream = EventStream() + event_stream._attributes = copy.deepcopy(self._attributes) + event_stream._extensions = copy.deepcopy(self._extensions) + event_stream._omni = copy.deepcopy(self._omni) + event_stream._classifiers = copy.deepcopy(self._classifiers) + event_stream._properties = copy.deepcopy(self._properties) + for ev in self._list: + event_stream._list.append(copy.deepcopy(ev)) + return event_stream + + attributes = property(_get_attributes) + extensions = property(_get_extensions) + omni_present = property(_get_omni) + classifiers = property(_get_classifiers) + properties = property(_get_properties, _set_properties) + + +class Trace(Sequence): + + def __init__(self, *args, **kwargs): + self._set_attributes(kwargs['attributes'] if 'attributes' in kwargs else {}) + self._properties = kwargs['properties'] if 'properties' in kwargs else {} + self._list = list(*args) + + def __hash__(self): + ret = 0 + for ev in self._list: + ret += hash(ev) + ret = ret % 479001599 + return ret + + def __eq__(self, other): + if len(self) != len(other): + return False + elif self.attributes != other.attributes: + return False + else: + for i in range(len(self._list)): + if self[i] != other[i]: + return False + return True + + def __getitem__(self, key): + return self._list[key] + + def __iter__(self): + return iter(self._list) + + def __len__(self): + return len(self._list) + + def __contains__(self, item): + return item in self._list + + def __reversed__(self): + return reversed(self._list) + + def __setitem__(self, key, value): + self._list[key] = value + + def index(self, x, start: int = ..., end: int = ...): + return self._list.index(x, start, end) + + def count(self, x): + return self._list.count(x) + + def insert(self, i, x): + self._list.insert(i, x) + + def append(self, x): + self._list.append(x) + + def _set_attributes(self, attributes): + self._attributes = attributes + + def _get_attributes(self): + return self._attributes + + def _get_properties(self): + return self._properties + + def _set_properties(self, properties): + self._properties = properties + + attributes = property(_get_attributes) + properties = property(_get_properties, _set_properties) + + def __repr__(self, ret_list=False): + if len(self._list) == 0: + ret = {"attributes": self._attributes, "events": []} + elif len(self._list) == 1: + ret = {"attributes": self._attributes, "events": [self._list[0]]} + else: + ret = {"attributes": self._attributes, "events": [self._list[0], "..", self._list[-1]]} + if ret_list: + return ret + return str(ret) + + def __str__(self): + return str(self.__repr__()) + + def __copy__(self): + new_attributes = {} + for k, v in self.attributes.items(): + new_attributes[k] = v + trace = Trace(attributes=new_attributes) + for ev in self._list: + trace.append(ev) + return trace + + def __deepcopy__(self, memodict={}): + new_attributes = {} + for k, v in self.attributes.items(): + if type(new_attributes) is dict: + new_attributes[k] = copy.deepcopy(v) + else: + new_attributes[k] = v + trace = Trace(attributes=new_attributes) + for ev in self._list: + trace.append(copy.deepcopy(ev)) + return trace + + +class EventLog(EventStream): + def __init__(self, *args, **kwargs): + super(EventLog, self).__init__(*args, **kwargs) + + def __repr__(self): + if len(self._list) == 0: + ret = [] + elif len(self._list) == 1: + ret = [self._list[0].__repr__(ret_list=True)] + else: + ret = [self._list[0].__repr__(ret_list=True), "....", self._list[-1].__repr__(ret_list=True)] + return str(ret) + + def __str__(self): + return str(self.__repr__()) + + def __copy__(self): + log = EventLog() + log._attributes = copy.copy(self._attributes) + log._extensions = copy.copy(self._extensions) + log._omni = copy.copy(self._omni) + log._classifiers = copy.copy(self._classifiers) + log._properties = copy.copy(self._properties) + for trace in self._list: + log._list.append(trace) + return log + + def __deepcopy__(self, memodict={}): + log = EventLog() + log._attributes = copy.deepcopy(self._attributes) + log._extensions = copy.deepcopy(self._extensions) + log._omni = copy.deepcopy(self._omni) + log._classifiers = copy.deepcopy(self._classifiers) + log._properties = copy.deepcopy(self._properties) + for trace in self._list: + log._list.append(copy.deepcopy(trace)) + return log + + def __hash__(self): + ret = 0 + for trace in self._list: + ret += hash(trace) + ret = ret % 479001599 + return ret + + def __eq__(self, other): + if len(self) != len(other): + return False + elif self.attributes != other.attributes: + return False + elif self.extensions != other.extensions: + return False + elif self.omni_present != other.omni_present: + return False + elif self.classifiers != other.classifiers: + return False + else: + for i in range(len(self._list)): + if self[i] != other[i]: + return False + return True diff --git a/pm4py/pm4py/objects/log/util/__init__.py b/pm4py/pm4py/objects/log/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a3c1317d37879f1f2fad5b7c52dbd9791836000d --- /dev/null +++ b/pm4py/pm4py/objects/log/util/__init__.py @@ -0,0 +1,20 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.util import insert_classifier, log, sampling, \ + sorting, index_attribute, get_class_representation, get_prefixes, \ + get_log_encoded, interval_lifecycle, basic_filter, \ + filtering_utils, split_train_test, xes, artificial, dataframe_utils diff --git a/pm4py/pm4py/objects/log/util/activities_to_alphabet.py b/pm4py/pm4py/objects/log/util/activities_to_alphabet.py new file mode 100644 index 0000000000000000000000000000000000000000..4129428a2ac151f2d27c113e3a002139b7c51fd8 --- /dev/null +++ b/pm4py/pm4py/objects/log/util/activities_to_alphabet.py @@ -0,0 +1,78 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.util import exec_utils, xes_constants +import pandas as pd +from typing import Optional, Dict, Any, Union, Tuple + + +class Parameters(Enum): + ACTIVITY_KEY = "activity_key" + RETURN_MAPPING = "return_mapping" + + +def apply(dataframe: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> Union[ + pd.DataFrame, Tuple[pd.DataFrame, Dict[str, str]]]: + """ + Remap the activities in a dataframe using an augmented alphabet to minimize the size of the encoding + + Running example: + + import pm4py + from pm4py.objects.log.util import activities_to_alphabet + from pm4py.util import constants + + dataframe = pm4py.read_xes("tests/input_data/running-example.xes") + renamed_dataframe = activities_to_alphabet.apply(dataframe, parameters={constants.PARAMETER_CONSTANT_ACTIVITY_KEY: "concept:name"}) + print(renamed_dataframe) + + Parameters + -------------- + dataframe + Pandas dataframe + parameters + Parameters of the method, including: + - Parameters.ACTIVITY_KEY => attribute to be used as activity + - Parameters.RETURN_MAPPING => (boolean) enables the returning the mapping dictionary (so the original activities can be re-constructed) + + Returns + -------------- + ren_dataframe + Pandas dataframe in which the activities have been remapped to the (augmented) alphabet + inv_mapping + (if required) Dictionary associating to every letter of the (augmented) alphabet the original activity + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + return_mapping = exec_utils.get_param_value(Parameters.RETURN_MAPPING, parameters, False) + + activities_count = list(dataframe[activity_key].value_counts().to_dict()) + remap_dict = {} + for index, act in enumerate(activities_count): + result = '' + while index >= 0: + result = chr((index % 26) + ord('A')) + result + index = index // 26 - 1 + remap_dict[act] = result + dataframe[activity_key] = dataframe[activity_key].map(remap_dict) + if return_mapping: + inverse_dct = {y: x for x, y in remap_dict.items()} + return dataframe, inverse_dct + return dataframe diff --git a/pm4py/pm4py/objects/log/util/artificial.py b/pm4py/pm4py/objects/log/util/artificial.py new file mode 100644 index 0000000000000000000000000000000000000000..3fc19db6e1118a7b429365fa99ab301a75d4cf42 --- /dev/null +++ b/pm4py/pm4py/objects/log/util/artificial.py @@ -0,0 +1,75 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.objects.log.obj import Event +from pm4py.objects.log.obj import EventLog +from pm4py.util import constants +from pm4py.util import exec_utils +from pm4py.util import xes_constants +import datetime + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + PARAM_ARTIFICIAL_START_ACTIVITY = constants.PARAM_ARTIFICIAL_START_ACTIVITY + PARAM_ARTIFICIAL_END_ACTIVITY = constants.PARAM_ARTIFICIAL_END_ACTIVITY + + +def insert_artificial_start_end(log: EventLog, parameters: Optional[Dict[Any, Any]] = None) -> EventLog: + """ + Inserts the artificial start/end activities in an event log + + Parameters + ------------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY: the activity + - Parameters.TIMESTAMP_KEY: the timestamp + + Returns + ------------------ + log + Enriched log + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + + artificial_start_activity = exec_utils.get_param_value(Parameters.PARAM_ARTIFICIAL_START_ACTIVITY, parameters, + constants.DEFAULT_ARTIFICIAL_START_ACTIVITY) + artificial_end_activity = exec_utils.get_param_value(Parameters.PARAM_ARTIFICIAL_END_ACTIVITY, parameters, + constants.DEFAULT_ARTIFICIAL_END_ACTIVITY) + + for trace in log: + start_event = Event({activity_key: artificial_start_activity}) + end_event = Event({activity_key: artificial_end_activity}) + if trace: + if timestamp_key in trace[0]: + start_event[timestamp_key] = trace[0][timestamp_key] - datetime.timedelta(seconds=1) + if timestamp_key in trace[-1]: + end_event[timestamp_key] = trace[-1][timestamp_key] + datetime.timedelta(seconds=1) + trace.insert(0, start_event) + trace.append(end_event) + + return log diff --git a/pm4py/pm4py/objects/log/util/basic_filter.py b/pm4py/pm4py/objects/log/util/basic_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..25d90f657d22a768904e4d5aecfa182a5f024628 --- /dev/null +++ b/pm4py/pm4py/objects/log/util/basic_filter.py @@ -0,0 +1,119 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import PARAMETER_CONSTANT_ATTRIBUTE_KEY +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.objects.log.obj import EventLog, Trace, EventStream +from pm4py.objects.conversion.log import converter as log_converter +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + ATTRIBUTE_KEY = PARAMETER_CONSTANT_ATTRIBUTE_KEY + POSITIVE = "positive" + + +def filter_log_events_attr(log, values, parameters=None): + """ + Filter log by keeping only events with an attribute value that belongs to the provided values list + + Parameters + ----------- + log + log + values + Allowed attributes + parameters + Parameters of the algorithm, including: + activity_key -> Attribute identifying the activity in the log + positive -> Indicate if events should be kept/removed + + Returns + ----------- + filtered_log + Filtered log + """ + + # CODE SAVING FROM FILTERS + + if parameters is None: + parameters = {} + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + stream = log_converter.apply(log, variant=log_converter.TO_EVENT_STREAM, parameters={"deepcopy": False}) + if positive: + stream = EventStream(list(filter(lambda x: x[attribute_key] in values, stream))) + else: + stream = EventStream(list(filter(lambda x: x[attribute_key] not in values, stream))) + + filtered_log = log_converter.apply(stream, variant=log_converter.Variants.TO_EVENT_LOG) + + return filtered_log + + +def filter_log_traces_attr(log, values, parameters=None): + """ + Filter log by keeping only traces that has/has not events with an attribute value that belongs to the provided + values list + + Parameters + ----------- + log + Trace log + values + Allowed attributes + parameters + Parameters of the algorithm, including: + activity_key -> Attribute identifying the activity in the log + positive -> Indicate if events should be kept/removed + + Returns + ----------- + filtered_log + Filtered log + """ + + # CODE SAVING FROM FILTERS + + if parameters is None: + parameters = {} + + attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, DEFAULT_NAME_KEY) + positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) + + filtered_log = EventLog() + for trace in log: + new_trace = Trace() + + found = False + for j in range(len(trace)): + if attribute_key in trace[j]: + attribute_value = trace[j][attribute_key] + if attribute_value in values: + found = True + + if (found and positive) or (not found and not positive): + new_trace = trace + else: + for attr in trace.attributes: + new_trace.attributes[attr] = trace.attributes[attr] + + if len(new_trace) > 0: + filtered_log.append(new_trace) + return filtered_log diff --git a/pm4py/pm4py/objects/log/util/dataframe_utils.py b/pm4py/pm4py/objects/log/util/dataframe_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..c4d84ef0c6075c5099f460f02342688d2844c0c4 --- /dev/null +++ b/pm4py/pm4py/objects/log/util/dataframe_utils.py @@ -0,0 +1,532 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, List + +import pandas as pd + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventStream +from pm4py.util import constants +from pm4py.util import exec_utils +from pm4py.util import points_subset +from pm4py.util import xes_constants, pandas_utils +from pm4py.util.dt_parsing.variants import strpfromiso +import numpy as np +import random +import traceback + + +LEGACY_PARQUET_TP_REPLACER = "AAA" +LEGACY_PARQUET_CASECONCEPTNAME = "caseAAAconceptAAAname" + + +class Parameters(Enum): + PARTITION_COLUMN = "partition_column" + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + CASE_PREFIX = constants.CASE_ATTRIBUTE_PREFIX + CASE_ATTRIBUTES = "case_attributes" + MANDATORY_ATTRIBUTES = "mandatory_attributes" + MAX_NO_CASES = "max_no_cases" + MIN_DIFFERENT_OCC_STR_ATTR = 5 + MAX_DIFFERENT_OCC_STR_ATTR = 50 + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + PARAM_ARTIFICIAL_START_ACTIVITY = constants.PARAM_ARTIFICIAL_START_ACTIVITY + PARAM_ARTIFICIAL_END_ACTIVITY = constants.PARAM_ARTIFICIAL_END_ACTIVITY + INDEX_KEY = "index_key" + CASE_INDEX_KEY = "case_index_key" + USE_EXTREMES_TIMESTAMP = "use_extremes_timestamp" + ADD_CASE_IDENTIFIER_COLUMN = "add_case_identifier_column" + DETERMINISTIC = "deterministic" + + +def insert_partitioning(df, num_partitions, parameters=None): + """ + Insert the partitioning in the specified dataframe + + Parameters + ------------- + df + Dataframe + num_partitions + Number of partitions + parameters + Parameters of the algorithm + + Returns + ------------- + df + Partitioned dataframe + """ + if parameters is None: + parameters = {} + + case_index_key = exec_utils.get_param_value(Parameters.CASE_INDEX_KEY, parameters, constants.DEFAULT_CASE_INDEX_KEY) + partition_column = exec_utils.get_param_value(Parameters.PARTITION_COLUMN, parameters, "@@partitioning") + + if case_index_key not in df.columns: + from pm4py.util import pandas_utils + df = pandas_utils.insert_case_index(df, case_index_key) + + df[partition_column] = df[case_index_key] % num_partitions + + return df + + +def legacy_parquet_support(df, parameters=None): + """ + For legacy support, Parquet files columns could not contain + a ":" that has been arbitrarily replaced by a replacer string. + This string substitutes the replacer to the : + + Parameters + --------------- + dataframe + Dataframe + parameters + Parameters of the algorithm + """ + if parameters is None: + parameters = {} + + df.columns = [x.replace(LEGACY_PARQUET_TP_REPLACER, ":") for x in df.columns] + + return df + + +def table_to_stream(table, parameters=None): + """ + Converts a Pyarrow table to an event stream + + Parameters + ------------ + table + Pyarrow table + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + dict0 = table.to_pydict() + keys = list(dict0.keys()) + # for legacy format support + if LEGACY_PARQUET_CASECONCEPTNAME in keys: + for key in keys: + dict0[key.replace(LEGACY_PARQUET_TP_REPLACER, ":")] = dict0.pop(key) + + stream = EventStream([dict(zip(dict0, i)) for i in zip(*dict0.values())]) + + return stream + + +def table_to_log(table, parameters=None): + """ + Converts a Pyarrow table to an event log + + Parameters + ------------ + table + Pyarrow table + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + stream = table_to_stream(table, parameters=parameters) + + return log_converter.apply(stream, parameters=parameters) + + +def convert_timestamp_columns_in_df(df, timest_format=None, timest_columns=None): + """ + Convert all dataframe columns in a dataframe + + Parameters + ----------- + df + Dataframe + timest_format + (If provided) Format of the timestamp columns in the CSV file + timest_columns + Columns of the CSV that shall be converted into timestamp + + Returns + ------------ + df + Dataframe with timestamp columns converted + + """ + if timest_format is None: + timest_format = constants.DEFAULT_TIMESTAMP_PARSE_FORMAT + + if timest_format is None: + timest_format = "mixed" + + for col in df.columns: + if timest_columns is None or col in timest_columns: + if "obj" in str(df[col].dtype) or "str" in str(df[col].dtype): + try: + df[col] = pandas_utils.dataframe_column_string_to_datetime(df[col], format=timest_format, utc=True) + except: + try: + df[col] = pandas_utils.dataframe_column_string_to_datetime(df[col], format=timest_format, exact=False, utc=True) + except: + try: + df[col] = pandas_utils.dataframe_column_string_to_datetime(df[col], format=timest_format) + except: + pass + + for col in df.columns: + if "date" in str(df[col].dtype) or "time" in str(df[col].dtype): + df[col] = strpfromiso.fix_dataframe_column(df[col]) + + return df + + +def sample_dataframe(df, parameters=None): + """ + Sample a dataframe on a given number of cases + + Parameters + -------------- + df + Dataframe + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY + - Parameters.CASE_ID_TO_RETAIN + + Returns + ------------- + sampled_df + Sampled dataframe + """ + if parameters is None: + parameters = {} + + deterministic = exec_utils.get_param_value(Parameters.DETERMINISTIC, parameters, False) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + max_no_cases = exec_utils.get_param_value(Parameters.MAX_NO_CASES, parameters, 100) + + case_ids = pandas_utils.format_unique(df[case_id_key].unique()) + case_ids = list(case_ids) + + if not deterministic: + random.shuffle(case_ids) + + case_id_to_retain = points_subset.pick_chosen_points_list(min(max_no_cases, len(case_ids)), case_ids) + + return df[df[case_id_key].isin(case_id_to_retain)] + + +def automatic_feature_selection_df(df, parameters=None): + """ + Performs an automatic feature selection on dataframes, + keeping the features useful for ML purposes + + Parameters + --------------- + df + Dataframe + parameters + Parameters of the algorithm + + Returns + --------------- + featured_df + Dataframe with only the features that have been selected + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + + mandatory_attributes = exec_utils.get_param_value(Parameters.MANDATORY_ATTRIBUTES, parameters, + set(df.columns).intersection( + {case_id_key, activity_key, + timestamp_key})) + + min_different_occ_str_attr = exec_utils.get_param_value(Parameters.MIN_DIFFERENT_OCC_STR_ATTR, parameters, 5) + max_different_occ_str_attr = exec_utils.get_param_value(Parameters.MAX_DIFFERENT_OCC_STR_ATTR, parameters, 50) + + cols_dtypes = {x: str(df[x].dtype) for x in df.columns} + other_attributes_to_retain = set() + + no_all_cases = df[case_id_key].nunique() + for x, y in cols_dtypes.items(): + attr_df = df.dropna(subset=[x]) + this_cases = attr_df[case_id_key].nunique() + + # in any case, keep attributes that appears at least once per case + if this_cases == no_all_cases: + if "float" in y or "int" in y: + # (as in the classic log version) retain always float/int attributes + other_attributes_to_retain.add(x) + elif "obj" in y or "str" in y: + # (as in the classic log version) keep string attributes if they have enough variability, but not too much + # (that would be hard to explain) + unique_val_count = df[x].nunique() + if min_different_occ_str_attr <= unique_val_count <= max_different_occ_str_attr: + other_attributes_to_retain.add(x) + else: + # not consider the attribute after this feature selection if it has other types (for example, date) + pass + + attributes_to_retain = mandatory_attributes.union(other_attributes_to_retain) + + return df[list(attributes_to_retain)] + + +def select_number_column(df: pd.DataFrame, fea_df: pd.DataFrame, col: str, + case_id_key=constants.CASE_CONCEPT_NAME) -> pd.DataFrame: + """ + Extract a column for the features dataframe for the given numeric attribute + + Parameters + -------------- + df + Dataframe + fea_df + Feature dataframe + col + Numeric column + case_id_key + Case ID key + + Returns + -------------- + fea_df + Feature dataframe (desidered output) + """ + df = df.dropna(subset=[col]).groupby(case_id_key).last().reset_index()[[case_id_key, col]] + fea_df = fea_df.merge(df, on=[case_id_key], how="left", suffixes=('', '_y')) + fea_df[col] = fea_df[col].astype(np.float32) + return fea_df + + +def select_string_column(df: pd.DataFrame, fea_df: pd.DataFrame, col: str, + case_id_key=constants.CASE_CONCEPT_NAME) -> pd.DataFrame: + """ + Extract N columns (for N different attribute values; hotencoding) for the features dataframe for the given string attribute + + Parameters + -------------- + df + Dataframe + fea_df + Feature dataframe + col + String column + case_id_key + Case ID key + + Returns + -------------- + fea_df + Feature dataframe (desidered output) + """ + vals = pandas_utils.format_unique(df[col].unique()) + for val in vals: + if val is not None: + filt_df_cases = pandas_utils.format_unique(df[df[col] == val][case_id_key].unique()) + new_col = col + "_" + val.encode('ascii', errors='ignore').decode('ascii').replace(" ", "") + fea_df[new_col] = fea_df[case_id_key].isin(filt_df_cases) + fea_df[new_col] = fea_df[new_col].astype(np.float32) + return fea_df + + +def get_features_df(df: pd.DataFrame, list_columns: List[str], + parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Given a dataframe and a list of columns, performs an automatic feature extraction + + Parameters + --------------- + df + Dataframe + list_column + List of column to consider in the feature extraction + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY: the case ID + + Returns + --------------- + fea_df + Feature dataframe (desidered output) + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + add_case_identifier_column = exec_utils.get_param_value(Parameters.ADD_CASE_IDENTIFIER_COLUMN, parameters, False) + + fea_df = pandas_utils.instantiate_dataframe({case_id_key: sorted(pandas_utils.format_unique(df[case_id_key].unique()))}) + for col in list_columns: + if "obj" in str(df[col].dtype) or "str" in str(df[col].dtype): + fea_df = select_string_column(df, fea_df, col, case_id_key=case_id_key) + elif "float" in str(df[col].dtype) or "int" in str(df[col].dtype): + fea_df = select_number_column(df, fea_df, col, case_id_key=case_id_key) + fea_df = fea_df.sort_values(case_id_key) + if not add_case_identifier_column: + del fea_df[case_id_key] + + return fea_df + + +def automatic_feature_extraction_df(df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Performs an automatic feature extraction given a dataframe + + Parameters + -------------- + df + Dataframe + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY: the case ID + - Parameters.MIN_DIFFERENT_OCC_STR_ATTR + - Parameters.MAX_DIFFERENT_OCC_STR_ATTR + + Returns + -------------- + fea_df + Dataframe with the features + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + + fea_sel_df = automatic_feature_selection_df(df, parameters=parameters) + columns = set(fea_sel_df.columns) + + if case_id_key in columns: + columns.remove(case_id_key) + + if timestamp_key in columns: + columns.remove(timestamp_key) + + return get_features_df(fea_sel_df, list(columns), parameters=parameters) + + +def insert_artificial_start_end(df0: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Inserts the artificial start/end activities in a Pandas dataframe + + Parameters + ------------------ + df0 + Dataframe + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY: the case identifier + - Parameters.TIMESTAMP_KEY: the timestamp + - Parameters.ACTIVITY_KEY: the activity + + Returns + ----------------- + enriched_df + Dataframe with artificial start/end activities + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + use_extremes_timestamp = exec_utils.get_param_value(Parameters.USE_EXTREMES_TIMESTAMP, parameters, False) + + artificial_start_activity = exec_utils.get_param_value(Parameters.PARAM_ARTIFICIAL_START_ACTIVITY, parameters, constants.DEFAULT_ARTIFICIAL_START_ACTIVITY) + artificial_end_activity = exec_utils.get_param_value(Parameters.PARAM_ARTIFICIAL_END_ACTIVITY, parameters, constants.DEFAULT_ARTIFICIAL_END_ACTIVITY) + + index_key = exec_utils.get_param_value(Parameters.INDEX_KEY, parameters, constants.DEFAULT_INDEX_KEY) + + df = df0.copy() + df = pandas_utils.insert_index(df, index_key) + df = df.sort_values([case_id_key, timestamp_key, index_key]) + + start_df = df[[case_id_key, timestamp_key]].groupby(case_id_key).first().reset_index() + end_df = df[[case_id_key, timestamp_key]].groupby(case_id_key).last().reset_index() + # stability trick: remove 1ms from the artificial start activity timestamp, add 1ms to the artificial end activity timestamp + if use_extremes_timestamp: + start_df[timestamp_key] = pd.Timestamp.min + end_df[timestamp_key] = pd.Timestamp.max + start_df[timestamp_key] = start_df[timestamp_key].dt.tz_localize("utc") + end_df[timestamp_key] = end_df[timestamp_key].dt.tz_localize("utc") + else: + start_df[timestamp_key] = start_df[timestamp_key] - pd.Timedelta("1 ms") + end_df[timestamp_key] = end_df[timestamp_key] + pd.Timedelta("1 ms") + + start_df[activity_key] = artificial_start_activity + end_df[activity_key] = artificial_end_activity + + df = pandas_utils.concat([start_df, df, end_df]) + df = pandas_utils.insert_index(df, index_key) + df = df.sort_values([case_id_key, timestamp_key, index_key]) + + df.attrs = df0.attrs + + return df + + +def dataframe_to_activity_case_table(df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None): + """ + Transforms a Pandas dataframe into: + - an "activity" table, containing the events and their attributes + - a "case" table, containing the cases and their attributes + + Parameters + -------------- + df + Dataframe + parameters + Parameters of the algorithm that should be used, including: + - Parameters.CASE_ID_KEY => the column to be used as case ID (shall be included both in the activity table and the case table) + - Parameters.CASE_PREFIX => if a list of attributes at the case level is not provided, then all the ones of the dataframe + starting with one of these are considered. + - Parameters.CASE_ATTRIBUTES => the attributes of the dataframe to be used as case columns + + Returns + --------------- + activity_table + Activity table + case_table + Case table + """ + if parameters is None: + parameters = {} + + # make sure we start from a dataframe object + df = log_converter.apply(df, variant=log_converter.Variants.TO_DATA_FRAME, parameters=parameters) + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + case_id_prefix = exec_utils.get_param_value(Parameters.CASE_PREFIX, parameters, constants.CASE_ATTRIBUTE_PREFIX) + + case_attributes = exec_utils.get_param_value(Parameters.CASE_ATTRIBUTES, parameters, set([x for x in df.columns if x.startswith(case_id_prefix)])) + event_attributes = set([x for x in df.columns if x not in case_attributes]) + + activity_table = df[event_attributes.union({case_id_key})] + case_table = df[case_attributes.union({case_id_key})].groupby(case_id_key).first().reset_index() + + return activity_table, case_table diff --git a/pm4py/pm4py/objects/log/util/filtering_utils.py b/pm4py/pm4py/objects/log/util/filtering_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..cce48ab76511b295d03258f6ae26c9a7a4202e4c --- /dev/null +++ b/pm4py/pm4py/objects/log/util/filtering_utils.py @@ -0,0 +1,73 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.variants.log import get as variants_module +from pm4py.objects.log.obj import EventLog, Trace, Event +from copy import copy + +def keep_one_trace_per_variant(log, parameters=None): + """ + Keeps only one trace per variant (does not matter for basic inductive miner) + + Parameters + -------------- + log + Log + parameters + Parameters of the algorithm + + Returns + -------------- + new_log + Log (with one trace per variant) + """ + if parameters is None: + parameters = {} + + new_log = EventLog() + if log is not None: + variants = variants_module.get_variants(log, parameters=parameters) + for var in variants: + curr_trace = variants[var][0] + new_trace = Trace(attributes=copy(curr_trace.attributes)) + new_trace.attributes["@@num_traces"] = len(variants[var]) + for ev in curr_trace: + new_trace.append(ev) + new_log.append(new_trace) + + return new_log + + +def keep_only_one_attribute_per_event(log, attribute_key): + """ + Keeps only one attribute per event + + Parameters + --------------- + log + Event log + attribute_key + Attribute key + """ + new_log = EventLog() + if log is not None: + for trace in log: + new_trace = Trace() + for ev in trace: + new_trace.append(Event({attribute_key: ev[attribute_key]})) + new_log.append(new_trace) + + return new_log diff --git a/pm4py/pm4py/objects/log/util/get_class_representation.py b/pm4py/pm4py/objects/log/util/get_class_representation.py new file mode 100644 index 0000000000000000000000000000000000000000..e65de857532cbe0f9222548c4b361bb5e926f80e --- /dev/null +++ b/pm4py/pm4py/objects/log/util/get_class_representation.py @@ -0,0 +1,153 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from pm4py.util.business_hours import BusinessHours +from pm4py.util import constants + +def get_class_representation_by_str_ev_attr_value_presence(log, str_attr_name, str_attr_value): + """ + Get the representation for the target part of the decision tree learning + if the focus is on the presence of a given value of a (string) event attribute + + Parameters + ------------- + log + Trace log + str_attr_name + Attribute name to consider + str_attr_value + Attribute value to consider + + Returns + ------------- + target + Target part for decision tree learning + classes + Name of the classes, in order + """ + count = 0 + dictionary = {} + target = [] + classes = [] + + for trace in log: + value = False + for event in trace: + if str_attr_name in event and event[str_attr_name] == str_attr_value: + value = True + if not str(value) in dictionary: + dictionary[str(value)] = count + classes.append(str(value)) + count = count + 1 + target.append(dictionary[str(value)]) + + target = np.array(target) + return target, classes + + +def get_class_representation_by_str_ev_attr_value_value(log, str_attr_name): + """ + Get the representation for the target part of the decision tree learning + if the focus is on all (string) values of an event attribute + + Parameters + ------------ + log + Trace log + str_attr_name + Attribute name to consider + + Returns + ------------ + target + Target part for decision tree learning + classes + Name of the classes, in order + """ + count = 0 + dictionary = {} + target = [] + classes = [] + + for trace in log: + value = "UNDEFINED" + for event in trace: + if str_attr_name in event and event[str_attr_name]: + value = event[str_attr_name] + if not str(value) in dictionary: + dictionary[str(value)] = count + classes.append(str(value)) + count = count + 1 + target.append(dictionary[str(value)]) + + target = np.array(target) + return target, classes + + +def get_class_representation_by_trace_duration(log, target_trace_duration, timestamp_key="time:timestamp", + parameters=None): + """ + Get class representation by splitting traces according to trace duration + + Parameters + ------------ + log + Trace log + target_trace_duration + Target trace duration + timestamp_key + Timestamp key + + Returns + ------------ + target + Target part for decision tree learning + classes + Name of the classes, in order + """ + if parameters is None: + parameters = {} + + business_hours = parameters["business_hours"] if "business_hours" in parameters else False + business_hours_slots = parameters["business_hour_slots"] if "business_hour_slots" in parameters else constants.DEFAULT_BUSINESS_HOUR_SLOTS + + count = 0 + dictionary = {} + target = [] + classes = [] + + for trace in log: + value = "LESSEQUAL" + if len(trace) > 0 and timestamp_key in trace[0] and timestamp_key in trace[-1]: + timestamp_st = trace[0][timestamp_key] + timestamp_et = trace[-1][timestamp_key] + if business_hours: + bh = BusinessHours(timestamp_st, timestamp_et, + business_hour_slots=business_hours_slots) + diff = bh.get_seconds() + else: + diff = (timestamp_et - timestamp_st).total_seconds() + if diff > target_trace_duration: + value = "GREATER" + if not str(value) in dictionary: + dictionary[str(value)] = count + classes.append(str(value)) + count = count + 1 + target.append(dictionary[str(value)]) + + target = np.array(target) + return target, classes diff --git a/pm4py/pm4py/objects/log/util/get_log_encoded.py b/pm4py/pm4py/objects/log/util/get_log_encoded.py new file mode 100644 index 0000000000000000000000000000000000000000..7ee7d975a03f9bd167649dbfd15948223d57b09e --- /dev/null +++ b/pm4py/pm4py/objects/log/util/get_log_encoded.py @@ -0,0 +1,96 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np + + +def get_log_encoded(event_log, + trace_attributes=[], + event_attributes=[], + concatenate=False): + """ + Get event log encoded into matrix. + + Parameters + ------------ + event_log + Trace log + trace_attributes + Attributes of the trace to be encoded + event_attributes + Attributes of the events to be encoded + concatenate + Boolean indicating if to generate all sub-sequences of events in a trace + + Returns + ------------ + dataset + A numpy matrix with the event log + columns + The names of the columns in the dataset + """ + columns = [] + dataset = [] + + max_trace_len = 0 + + for trace_index, trace in enumerate(event_log): + trace_encoding = [] + tr_columns = [] + + for trace_attribute in trace_attributes: + tr_columns.append(trace_attribute) + + try: + attr = trace.attributes[trace_attribute] + except: + attr = None + trace_encoding.append(attr) + + for event_index, event in enumerate(trace): + for event_attribute in event_attributes: + tr_columns.append(event_attribute) + + try: + attr = event[event_attribute] + except: + attr = None + trace_encoding.append(attr) + + # For each trace in the event log, sequentially append the + # event sequence until that event + if concatenate is True: + if len(trace_encoding) > max_trace_len: + max_trace_len = len(trace_encoding) + columns = tr_columns + + dataset.append(np.asarray(trace_encoding)) + + if concatenate is not True: + if len(trace_encoding) > max_trace_len: + max_trace_len = len(trace_encoding) + columns = tr_columns + + dataset.append(np.asarray(trace_encoding)) + + dataset = np.asarray([np.pad(a, + (0, max_trace_len - len(a)), + 'constant', + constant_values=0) for a in dataset]) + + columns = np.asarray(columns) + + return dataset, columns diff --git a/pm4py/pm4py/objects/log/util/get_prefixes.py b/pm4py/pm4py/objects/log/util/get_prefixes.py new file mode 100644 index 0000000000000000000000000000000000000000..825e034cf23e9bf904a3c4b3ebb6dfdee339e716 --- /dev/null +++ b/pm4py/pm4py/objects/log/util/get_prefixes.py @@ -0,0 +1,208 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import deepcopy + +from pm4py.objects.log.obj import EventLog, Trace +from pm4py.objects.log.util import basic_filter +from pm4py.util import xes_constants as xes +from pm4py.util import constants +import logging + + +def get_prefixes_from_log(log: EventLog, length: int) -> EventLog: + """ + Gets the prefixes of a log of a given length + + Parameters + ---------------- + log + Event log + length + Length + + Returns + ---------------- + prefix_log + Log contain the prefixes: + - if a trace has lower or identical length, it is included as-is + - if a trace has greater length, it is cut + """ + prefix_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + for trace in log: + if len(trace) <= length: + prefix_log.append(trace) + else: + new_trace = Trace(attributes=trace.attributes) + for i in range(length): + new_trace.append(trace[i]) + prefix_log.append(new_trace) + return prefix_log + + +def get_log_with_log_prefixes(log, parameters=None): + """ + Gets an extended log that contains, in order, all the prefixes for a case of the original log + + Parameters + -------------- + log + Original log + parameters + Possible parameters of the algorithm + + Returns + ------------- + all_prefixes_log + Log with all the prefixes + change_indexes + Indexes of the extended log where there was a change between cases + """ + all_prefixes_log = EventLog() + change_indexes = [] + + for trace in log: + cumulative_trace = Trace() + for event in trace: + all_prefixes_log.append(deepcopy(cumulative_trace)) + cumulative_trace.append(event) + all_prefixes_log.append(deepcopy(cumulative_trace)) + change_indexes.append([len(all_prefixes_log) - 1] * len(trace)) + + return all_prefixes_log, change_indexes + + +def get_log_traces_to_activities(log, activities, parameters=None): + """ + Get sublogs taking to each one of the specified activities + + Parameters + ------------- + log + Trace log object + activities + List of activities in the log + parameters + Possible parameters of the algorithm, including: + PARAMETER_CONSTANT_ACTIVITY_KEY -> activity + PARAMETER_CONSTANT_TIMESTAMP_KEY -> timestamp + + Returns + ------------- + list_logs + List of event logs taking to the first occurrence of each activity + considered_activities + All activities that are effectively have been inserted in the list of logs (in some of them, the resulting log + may be empty) + """ + if parameters is None: + parameters = {} + + activity_key = parameters[ + constants.PARAMETER_CONSTANT_ACTIVITY_KEY] if constants.PARAMETER_CONSTANT_ACTIVITY_KEY in parameters else xes.DEFAULT_NAME_KEY + parameters[constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY] = activity_key + + list_logs = [] + considered_activities = [] + for act in activities: + other_acts = [ac for ac in activities if not ac == act] + parameters_filt1 = deepcopy(parameters) + parameters_filt2 = deepcopy(parameters) + parameters_filt1["positive"] = True + parameters_filt2["positive"] = False + filtered_log = basic_filter.filter_log_traces_attr(log, [act], parameters=parameters_filt1) + logging.info("get_log_traces_to_activities activities=" + str(activities) + " act=" + str( + act) + " 0 len(filtered_log)=" + str(len(filtered_log))) + filtered_log = basic_filter.filter_log_traces_attr(filtered_log, other_acts, parameters=parameters_filt2) + logging.info("get_log_traces_to_activities activities=" + str(activities) + " act=" + str( + act) + " 1 len(filtered_log)=" + str(len(filtered_log))) + filtered_log, act_durations = get_log_traces_until_activity(filtered_log, act, parameters=parameters) + logging.info("get_log_traces_to_activities activities=" + str(activities) + " act=" + str( + act) + " 2 len(filtered_log)=" + str(len(filtered_log))) + if filtered_log: + list_logs.append(filtered_log) + considered_activities.append(act) + + return list_logs, considered_activities + + +def get_log_traces_until_activity(log, activity, parameters=None): + """ + Gets a reduced version of the log containing, for each trace, only the events before a + specified activity + + Parameters + ------------- + log + Trace log + activity + Activity to reach + parameters + Possible parameters of the algorithm, including: + PARAMETER_CONSTANT_ACTIVITY_KEY -> activity + PARAMETER_CONSTANT_TIMESTAMP_KEY -> timestamp + + Returns + ------------- + new_log + New log + """ + if parameters is None: + parameters = {} + + activity_key = parameters[ + constants.PARAMETER_CONSTANT_ACTIVITY_KEY] if constants.PARAMETER_CONSTANT_ACTIVITY_KEY in parameters else xes.DEFAULT_NAME_KEY + timestamp_key = parameters[ + constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] if constants.PARAMETER_CONSTANT_TIMESTAMP_KEY in parameters else xes.DEFAULT_TIMESTAMP_KEY + duration_attribute = parameters["duration"] if "duration" in parameters else None + use_future_attributes = parameters["use_future_attributes"] if "use_future_attributes" in parameters else False + + new_log = EventLog() + traces_interlapsed_time_to_act = [] + + i = 0 + while i < len(log): + ev_in_tr_w_act = sorted([j for j in range(len(log[i])) if log[i][j][activity_key] == activity]) + if ev_in_tr_w_act and ev_in_tr_w_act[0] > 0: + new_trace = Trace(log[i][0:ev_in_tr_w_act[0]]) + for attr in log[i].attributes: + new_trace.attributes[attr] = log[i].attributes[attr] + + if duration_attribute is None: + try: + curr_trace_interlapsed_time_to_act = log[i][ev_in_tr_w_act[0]][timestamp_key].timestamp() - \ + log[i][ev_in_tr_w_act[0] - 1][timestamp_key].timestamp() + except: + curr_trace_interlapsed_time_to_act = log[i][ev_in_tr_w_act[0]][timestamp_key] - \ + log[i][ev_in_tr_w_act[0] - 1][timestamp_key] + logging.error("timestamp_key not timestamp") + else: + curr_trace_interlapsed_time_to_act = log[i][ev_in_tr_w_act[0]][duration_attribute] + + traces_interlapsed_time_to_act.append(curr_trace_interlapsed_time_to_act) + + if use_future_attributes: + for j in range(ev_in_tr_w_act[0] + 1, len(log[i])): + new_ev = deepcopy(log[i][j]) + if activity_key in new_ev: + del new_ev[activity_key] + new_trace.append(new_ev) + + new_log.append(new_trace) + i = i + 1 + + return new_log, traces_interlapsed_time_to_act \ No newline at end of file diff --git a/pm4py/pm4py/objects/log/util/index_attribute.py b/pm4py/pm4py/objects/log/util/index_attribute.py new file mode 100644 index 0000000000000000000000000000000000000000..6ca10568fbf73bf8a737427dc0e24e5f638a04ba --- /dev/null +++ b/pm4py/pm4py/objects/log/util/index_attribute.py @@ -0,0 +1,55 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.obj import EventLog + + +def insert_event_index_as_event_attribute(stream, event_index_attr_name="@@eventindex"): + """ + Insert the current event index as event attribute + + Parameters + ----------- + stream + Stream + event_index_attr_name + Attribute name given to the event index + """ + + if not type(stream) is EventLog: + for i in range(0, len(stream._list)): + stream._list[i][event_index_attr_name] = i + 1 + + return stream + + +def insert_trace_index_as_event_attribute(log, trace_index_attr_name="@@traceindex"): + """ + Inserts the current trace index as event attribute + (overrides previous values if needed) + + Parameters + ----------- + log + Log + trace_index_attr_name + Attribute name given to the trace index + """ + for i in range(len(log._list)): + for j in range(len(log._list[i])): + log._list[i][j][trace_index_attr_name] = i + 1 + + return log diff --git a/pm4py/pm4py/objects/log/util/insert_classifier.py b/pm4py/pm4py/objects/log/util/insert_classifier.py new file mode 100644 index 0000000000000000000000000000000000000000..5b5a322f90a36df60df31fcab184f5f21e6043da --- /dev/null +++ b/pm4py/pm4py/objects/log/util/insert_classifier.py @@ -0,0 +1,103 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def search_act_class_attr(log, force_activity_transition_insertion=False): + """ + Search among classifiers expressed in the log one that is good for the process model extraction + + Parameters + ----------- + log + Trace log + force_activity_transition_insertion + Optionally force the activitiy+transition classifier insertion + + Returns + ----------- + log + Trace log (plus eventually one additional event attribute as the classifier) + """ + classifier = None + if log.classifiers and "Activity classifier" in log.classifiers and log.classifiers["Activity classifier"]: + classifier = "Activity classifier" + elif log.classifiers and "MXML Legacy Classifier" in log.classifiers and log.classifiers["MXML Legacy Classifier"]: + classifier = "MXML Legacy Classifier" + return insert_activity_classifier_attribute(log, classifier, + force_activity_transition_insertion=force_activity_transition_insertion) + + +def insert_activity_classifier_attribute(log, classifier, force_activity_transition_insertion=False): + """ + Insert the specified classifier as additional event attribute in the log + + Parameters + ----------- + log + Trace log + classifier + Event classifier + force_activity_transition_insertion + Optionally force the activitiy+transition classifier insertion + + Returns + -------- + log + Trace log (plus eventually one additional event attribute as the classifier) + classifier_attr_key + Attribute name of the attribute that contains the classifier value + """ + classifier_attr_key = None + if classifier is not None: + classifier_attr_key = "@@classifier" + for trace in log: + for event in trace: + classifier_value = "+".join([event[x] for x in log.classifiers[classifier]]) + event[classifier_attr_key] = classifier_value + elif force_activity_transition_insertion: + if len(log) > 0 and len(log[0]) > 0 and "concept:name" in log[0][0] and "lifecycle:transition" in log[0][0]: + classifier_attr_key = "@@classifier" + for trace in log: + for event in trace: + classifier_value = event["concept:name"] + "+" + event["lifecycle:transition"] + event[classifier_attr_key] = classifier_value + return log, classifier_attr_key + + +def insert_trace_classifier_attribute(log, classifier): + """ + Insert the specified classifier as additional trace attribute in the log + + Parameter + ----------- + log + Trace log + classifier + Event classifier + + Returns + ----------- + log + Trace log (plus eventually one additional event attribute as the classifier) + classifier_attr_key + Attribute name of the attribute that contains the classifier value + """ + classifier_attr_key = None + if classifier is not None: + classifier_attr_key = "@@traceClassifier" + for trace in log: + classifier_value = "+".join([trace.attributes[x] for x in log.classifiers[classifier]]) + trace.attributes[classifier_attr_key] = classifier_value + return log, classifier_attr_key diff --git a/pm4py/pm4py/objects/log/util/interval_lifecycle.py b/pm4py/pm4py/objects/log/util/interval_lifecycle.py new file mode 100644 index 0000000000000000000000000000000000000000..0e5ea8c942933a4362358ac89a2d307dd26d52d4 --- /dev/null +++ b/pm4py/pm4py/objects/log/util/interval_lifecycle.py @@ -0,0 +1,262 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.business_hours import BusinessHours +from pm4py.objects.log.util import sorting +from pm4py.util import constants +from pm4py.util import xes_constants as xes +from pm4py.objects.log.obj import EventLog, Trace, Event +from copy import copy +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TRANSITION_KEY = constants.PARAMETER_CONSTANT_TRANSITION_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + LIFECYCLE_INSTANCE_KEY = "pm4py:param:lifecycle:instance:key" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def to_interval(log, parameters=None): + """ + Converts a log to interval format (e.g. an event has two timestamps) + from lifecycle format (an event has only a timestamp, and a transition lifecycle) + + Parameters + ------------- + log + Log (expressed in the lifecycle format) + parameters + Possible parameters of the method (activity, timestamp key, start timestamp key, transition ...) + + Returns + ------------- + log + Interval event log + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes.DEFAULT_START_TIMESTAMP_KEY) + transition_key = exec_utils.get_param_value(Parameters.TRANSITION_KEY, parameters, xes.DEFAULT_TRANSITION_KEY) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + lifecycle_instance_key = exec_utils.get_param_value(Parameters.LIFECYCLE_INSTANCE_KEY, parameters, xes.DEFAULT_INSTANCE_KEY) + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + if log is not None and len(log) > 0: + if "PM4PY_TYPE" in log.attributes and log.attributes["PM4PY_TYPE"] == "interval": + return log + if log[0] is not None and len(log[0]) > 0: + first_event = log[0][0] + if start_timestamp_key in first_event: + return log + + new_log = EventLog(attributes=copy(log.attributes), extensions=copy(log.extensions), classifiers=copy(log.classifiers), + omni_present=copy(log.omni_present), properties=copy(log.properties)) + new_log.attributes["PM4PY_TYPE"] = "interval" + new_log.properties[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = xes.DEFAULT_START_TIMESTAMP_KEY + + for trace in log: + new_trace = Trace() + for attr in trace.attributes: + new_trace.attributes[attr] = trace.attributes[attr] + activities_start = {} + for event in trace: + activity = event[activity_key] + instance = event[lifecycle_instance_key] if lifecycle_instance_key in event else None + activity = (activity, instance) + transition = event[transition_key] if transition_key in event else "complete" + timestamp = event[timestamp_key] + if transition.lower() == "start": + if activity not in activities_start: + activities_start[activity] = list() + activities_start[activity].append(event) + elif transition.lower() == "complete": + start_event = None + start_timestamp = event[timestamp_key] + if activity in activities_start and len(activities_start[activity]) > 0: + start_event = activities_start[activity].pop(0) + start_timestamp = start_event[timestamp_key] + new_event = Event() + for attr in event: + if not attr == timestamp_key and not attr == transition_key: + new_event[attr] = event[attr] + if start_event is not None: + for attr in start_event: + if not attr == timestamp_key and not attr == transition_key: + new_event["@@startevent_" + attr] = start_event[attr] + new_event[start_timestamp_key] = start_timestamp + new_event[timestamp_key] = timestamp + new_event["@@duration"] = (timestamp - start_timestamp).total_seconds() + + if business_hours: + bh = BusinessHours(start_timestamp, timestamp, + business_hour_slots=business_hours_slots) + new_event["@@approx_bh_duration"] = bh.get_seconds() + + new_trace.append(new_event) + new_trace = sorting.sort_timestamp_trace(new_trace, start_timestamp_key) + new_log.append(new_trace) + return new_log + + return log + + +def to_lifecycle(log, parameters=None): + """ + Converts a log from interval format (e.g. an event has two timestamps) + to lifecycle format (an event has only a timestamp, and a transition lifecycle) + + Parameters + ------------- + log + Log (expressed in the interval format) + parameters + Possible parameters of the method (activity, timestamp key, start timestamp key, transition ...) + + Returns + ------------- + log + Lifecycle event log + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes.DEFAULT_START_TIMESTAMP_KEY) + transition_key = exec_utils.get_param_value(Parameters.TRANSITION_KEY, parameters, xes.DEFAULT_TRANSITION_KEY) + + if log is not None and len(log) > 0: + if "PM4PY_TYPE" in log.attributes and log.attributes["PM4PY_TYPE"] == "lifecycle": + return log + if log[0] is not None and len(log[0]) > 0: + first_event = log[0][0] + if transition_key in first_event: + return log + + new_log = EventLog(attributes=copy(log.attributes), extensions=copy(log.extensions), classifiers=copy(log.classifiers), + omni_present=copy(log.omni_present), properties=copy(log.properties)) + new_log.attributes["PM4PY_TYPE"] = "lifecycle" + + for trace in log: + new_trace = Trace() + for attr in trace.attributes: + new_trace.attributes[attr] = trace.attributes[attr] + list_events = [] + for index, event in enumerate(trace): + new_event_start = Event() + new_event_complete = Event() + for attr in event: + if not attr == timestamp_key and not attr == start_timestamp_key: + new_event_start[attr] = event[attr] + new_event_complete[attr] = event[attr] + new_event_start[timestamp_key] = event[start_timestamp_key] + new_event_start[transition_key] = "start" + new_event_start["@@custom_lif_id"] = 0 + new_event_start["@@origin_ev_idx"] = index + new_event_complete[timestamp_key] = event[timestamp_key] + new_event_complete[transition_key] = "complete" + new_event_complete["@@custom_lif_id"] = 1 + new_event_complete["@@origin_ev_idx"] = index + list_events.append(new_event_start) + list_events.append(new_event_complete) + list_events = sorted(list_events, + key=lambda x: (x[timestamp_key], x["@@origin_ev_idx"], x["@@custom_lif_id"])) + for ev in list_events: + new_trace.append(ev) + new_log.append(new_trace) + return new_log + return log + + +def assign_lead_cycle_time(log, parameters=None): + """ + Assigns the lead and cycle time to an interval log + + Parameters + ------------- + log + Interval log + parameters + Parameters of the algorithm, including: start_timestamp_key, timestamp_key, business_hour_slots + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes.DEFAULT_START_TIMESTAMP_KEY) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + interval_log = to_interval(log, parameters=parameters) + + for trace in interval_log: + approx_partial_lead_time = 0 + approx_partial_cycle_time = 0 + approx_wasted_time = 0 + max_et = None + max_et_seconds = 0 + for i in range(len(trace)): + this_wasted_time = 0 + st = trace[i][start_timestamp_key] + st_seconds = st.timestamp() + et = trace[i][timestamp_key] + et_seconds = et.timestamp() + + if max_et_seconds > 0 and st_seconds > max_et_seconds: + bh_unworked = BusinessHours(max_et, st, + business_hour_slots=business_hours_slots) + unworked_sec = bh_unworked.get_seconds() + approx_partial_lead_time = approx_partial_lead_time + unworked_sec + approx_wasted_time = approx_wasted_time + unworked_sec + this_wasted_time = unworked_sec + + if st_seconds > max_et_seconds: + bh = BusinessHours(st, et, + business_hour_slots=business_hours_slots) + approx_bh_duration = bh.get_seconds() + + approx_partial_cycle_time = approx_partial_cycle_time + approx_bh_duration + approx_partial_lead_time = approx_partial_lead_time + approx_bh_duration + elif st_seconds < max_et_seconds and et_seconds > max_et_seconds: + bh = BusinessHours(max_et, et, + business_hour_slots=business_hours_slots) + approx_bh_duration = bh.get_seconds() + + approx_partial_cycle_time = approx_partial_cycle_time + approx_bh_duration + approx_partial_lead_time = approx_partial_lead_time + approx_bh_duration + + if et_seconds > max_et_seconds: + max_et_seconds = et_seconds + max_et = et + + ratio_cycle_lead_time = 1 + if approx_partial_lead_time > 0: + ratio_cycle_lead_time = approx_partial_cycle_time / approx_partial_lead_time + + trace[i]["@@approx_bh_partial_cycle_time"] = approx_partial_cycle_time + trace[i]["@@approx_bh_partial_lead_time"] = approx_partial_lead_time + trace[i]["@@approx_bh_overall_wasted_time"] = approx_wasted_time + trace[i]["@@approx_bh_this_wasted_time"] = this_wasted_time + trace[i]["@approx_bh_ratio_cycle_lead_time"] = ratio_cycle_lead_time + + return interval_log diff --git a/pm4py/pm4py/objects/log/util/log.py b/pm4py/pm4py/objects/log/util/log.py new file mode 100644 index 0000000000000000000000000000000000000000..cec935f70fdf512660dccc12136c7d17ddd25270 --- /dev/null +++ b/pm4py/pm4py/objects/log/util/log.py @@ -0,0 +1,153 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import xes_constants as xes_util + + +# TODO: we can do some instance checking and then support both trace level and event level logs.. +def get_event_labels(event_log, key): + """ + Fetches the labels present in a log, given a key to use within the events. + + Parameters + ---------- + :param event_log: log to use + :param key: to use for event identification, can for example be "concept:name" + + Returns + ------- + :return: a list of labels + """ + labels = [] + for t in event_log: + for e in t: + if key in e and e[key] not in labels: + labels.append(e[key]) + return labels + + +def get_event_labels_counted(event_log, key): + """ + Fetches the labels (and their frequency) present in a log, given a key to use within the events. + + Parameters + ---------- + :param event_log: log to use + :param key: to use for event identification, can for example be "concept:name" + + Returns + ------- + :return: a list of labels + """ + labels = dict() + for t in event_log: + for e in t: + if key in e: + if e[key] not in labels: + labels[e[key]] = 0 + labels[e[key]] = labels[e[key]] + 1 + return labels + + +def get_trace_variants(event_log, key=xes_util.DEFAULT_NAME_KEY): + """ + Returns a pair of a list of (variants, dict[index -> trace]) where the index of a variant maps to all traces + describing that variant, with that key. + + Parameters + --------- + :param event_log: log + :param key: key to use to identify the label of an event + + Returns + ------- + :return: + """ + variants = [] + variant_map = dict() + for t in event_log: + variant = list(map(lambda e: e[key], t)) + new = True + for i in range(0, len(variants)): + if variants[i] == variant: + variant_map[i].append(t) + new = False + break + if new: + variant_map[len(variants)] = [t] + variants.append(variant) + return variants, variant_map + + +def project_traces(event_log, keys=xes_util.DEFAULT_NAME_KEY): + """ + projects traces on a (set of) event attribute key(s). + If the key provided is of type string, each trace is converted into a list of strings. + If the key provided is a collection, each trace is converted into a list of (smaller) dicts of key value pairs + + :param event_log: + :param keys: + :return: + """ + if isinstance(keys, str): + return list(map(lambda t: list(map(lambda e: e[keys], t)), event_log)) + else: + return list(map(lambda t: list(map(lambda e: {key: e[key] for key in keys}, t)), event_log)) + + +def derive_and_lift_trace_attributes_from_event_attributes(trlog, ignore=None, retain_on_event_level=False, + verbose=False): + if ignore is None: + ignore = set() + candidates = set(trlog[0][0].keys()) + for i in ignore: + candidates.remove(i) + if verbose: + print('candidates: %s' % candidates) + for t in trlog: + attr = dict(t[0]) + for e in t: + for k in candidates.copy(): + if k not in e: + if verbose: + print('removing %s, was not present in event' % k) + candidates.remove(k) + continue + if e[k] != attr[k]: + if verbose: + print('removing ' + k + ' for trace with id ' + t.attributes[ + 'concept:name'] + ', mismatch ' + str(e[k]) + ' != ' + str(attr[k])) + candidates.remove(k) + continue + if len(candidates) == 0: + return trlog + + for t in trlog: + for key in candidates: + t.attributes[key] = t[0][key] + if not retain_on_event_level: + for e in t: + del e[key] + + return trlog + + +def add_artficial_start_and_end(event_log, start='[start>', end='[end]', activity_key=xes_util.DEFAULT_NAME_KEY): + for trace in event_log: + trace.insert(0, event_log.Event({activity_key: start})) + trace.append(event_log.Event({activity_key: end})) + return event_log + diff --git a/pm4py/pm4py/objects/log/util/log_regex.py b/pm4py/pm4py/objects/log/util/log_regex.py new file mode 100644 index 0000000000000000000000000000000000000000..d18236d40e6fc6628903c82599c3f9e5b1c7606f --- /dev/null +++ b/pm4py/pm4py/objects/log/util/log_regex.py @@ -0,0 +1,161 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Dict + +from pm4py.objects.log.obj import EventLog +from pm4py.util import xes_constants as xes +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY +from pm4py.util.regex import SharedObj, get_new_char + + +def get_encoded_trace(trace, mapping, parameters=None): + """ + Gets the encoding of the provided trace + + Parameters + ------------- + trace + Trace of the event log + mapping + Mapping (activity to symbol) + + Returns + ------------- + trace_str + Trace string + """ + if parameters is None: + parameters = {} + + activity_key = parameters[ + PARAMETER_CONSTANT_ACTIVITY_KEY] if PARAMETER_CONSTANT_ACTIVITY_KEY in parameters else xes.DEFAULT_NAME_KEY + + trace_str = "".join([mapping[x[activity_key]] for x in trace if x[activity_key] in mapping]) + + return trace_str + + +def get_encoded_log(log, mapping, parameters=None): + """ + Gets the encoding of the provided log + + Parameters + ------------- + log + Event log + mapping + Mapping (activity to symbol) + + Returns + ------------- + list_str + List of encoded strings + """ + if parameters is None: + parameters = {} + + list_str = list() + + for trace in log: + list_str.append(get_encoded_trace(trace, mapping, parameters=parameters)) + + return list_str + + +def form_encoding_dictio_from_log(log, parameters=None): + """ + Forms the encoding dictionary from the current log + + Parameters + ------------- + log + Event log + parameters + Parameters of the algorithm + + Returns + ------------- + encoding_dictio + Encoding dictionary + """ + from pm4py.statistics.attributes.log import get as attributes_get + + if parameters is None: + parameters = {} + + activity_key = parameters[ + PARAMETER_CONSTANT_ACTIVITY_KEY] if PARAMETER_CONSTANT_ACTIVITY_KEY in parameters else xes.DEFAULT_NAME_KEY + + shared_obj = SharedObj() + + activities = attributes_get.get_attribute_values(log, activity_key, parameters=parameters) + + mapping = {} + + for act in activities: + get_new_char(act, shared_obj) + mapping[act] = shared_obj.mapping_dictio[act] + + return mapping + + +def form_encoding_dictio_from_two_logs(log1: EventLog, log2: EventLog, parameters=None) -> \ +Dict[str, str]: + """ + Forms the encoding dictionary from a couple of logs + + Parameters + ---------------- + log1 + First log + log2 + Second log + parameters + Parameters of the algorithm + + Returns + ---------------- + encoding_dictio + Encoding dictionary + """ + from pm4py.statistics.attributes.log import get as attributes_get + + if parameters is None: + parameters = {} + + activity_key = parameters[ + PARAMETER_CONSTANT_ACTIVITY_KEY] if PARAMETER_CONSTANT_ACTIVITY_KEY in parameters else xes.DEFAULT_NAME_KEY + + shared_obj = SharedObj() + + activities_log_1 = attributes_get.get_attribute_values(log1, activity_key, parameters=parameters) + activities_log_2 = attributes_get.get_attribute_values(log2, activity_key, parameters=parameters) + + mapping = {} + + for act in activities_log_1: + if act not in mapping: + get_new_char(act, shared_obj) + mapping[act] = shared_obj.mapping_dictio[act] + + for act in activities_log_2: + if act not in mapping: + get_new_char(act, shared_obj) + mapping[act] = shared_obj.mapping_dictio[act] + + return mapping diff --git a/pm4py/pm4py/objects/log/util/move_attrs_to_trace.py b/pm4py/pm4py/objects/log/util/move_attrs_to_trace.py new file mode 100644 index 0000000000000000000000000000000000000000..33655b9b116d600fa4284e09816a2f980812f5f2 --- /dev/null +++ b/pm4py/pm4py/objects/log/util/move_attrs_to_trace.py @@ -0,0 +1,80 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.obj import EventLog, XESExtension +from typing import Optional, Dict, Any, Union +from enum import Enum +from pm4py.util import exec_utils +from copy import deepcopy + + +class Parameters(Enum): + ENABLE_DEEPCOPY = "enable_deepcopy" + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> EventLog: + """ + Moves the attributes that are constant for all the events of the trace, and they + do not belong to a standard extension, to the trace level + + Parameters + ---------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.DEEPCOPY => enables the deepcopy of the event log + + Returns + ---------------- + log + Event log, where some attribute has been possibly moved from the event to the trace level + """ + if parameters is None: + parameters = {} + + enable_deepcopy = exec_utils.get_param_value(Parameters.ENABLE_DEEPCOPY, parameters, False) + if enable_deepcopy: + log = deepcopy(log) + + main_extensions = set() + for e in XESExtension: + main_extensions.add(e.value[1]) + + candidates = None + for trace in log: + values_count = {} + for eve in trace: + for attr in eve: + if attr.split(":")[0] not in main_extensions: + if attr not in trace.attributes: + if attr not in values_count: + values_count[attr] = [eve[attr]] + else: + values_count[attr].append(eve[attr]) + trace_candidates = set(x for x in values_count if len(values_count[x]) == len(trace) and len(set(values_count[x])) == 1) + if candidates is not None: + candidates = trace_candidates.intersection(candidates) + else: + candidates = trace_candidates + + for attr in candidates: + for trace in log: + trace.attributes[attr] = trace[0][attr] + for ev in trace: + del ev[attr] + + return log diff --git a/pm4py/pm4py/objects/log/util/pandas_log_wrapper.py b/pm4py/pm4py/objects/log/util/pandas_log_wrapper.py new file mode 100644 index 0000000000000000000000000000000000000000..0e6355f0071794ba5fb6e149aa4a8d808f0bd02d --- /dev/null +++ b/pm4py/pm4py/objects/log/util/pandas_log_wrapper.py @@ -0,0 +1,112 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import pandas as pd +from typing import Optional, Dict, Any +from pm4py.util import constants, exec_utils +from enum import Enum +from collections.abc import Sequence + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + CASE_ATTRIBUTE_PREFIX = constants.CASE_ATTRIBUTE_PREFIX + + +class PandasTraceWrapper(Sequence): + def __init__(self, dataframe: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None): + if parameters is None: + parameters = {} + + self.parameters = parameters + self.dataframe = dataframe + self.case_attribute_prefix = exec_utils.get_param_value(Parameters.CASE_ATTRIBUTE_PREFIX, parameters, + constants.CASE_ATTRIBUTE_PREFIX) + + self.attributes = self.dataframe.loc[0].to_dict() + self.attributes = {x.split(self.case_attribute_prefix)[-1]: y for x, y in self.attributes.items() if + x.startswith(self.case_attribute_prefix)} + + def __getitem__(self, key): + if type(key) is slice: + start = key.start % len(self.dataframe) + stop = key.stop % len(self.dataframe) + sli = slice(start, stop - 1, key.step) + return self.dataframe.loc[sli].to_dict("records") + key = key % len(self.dataframe) + return self.dataframe.loc[key].to_dict() + + def __iter__(self): + return iter(self.dataframe.to_dict('records')) + + def __len__(self): + return len(self.dataframe) + + def _get_list(self): + return self.dataframe.to_dict('records') + + _list = property(_get_list) + + +class PandasLogWrapper(Sequence): + # permits to iterate over a Pandas dataframe and access its Traces object *without* a conversion to EventLog + def __init__(self, dataframe: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None): + if parameters is None: + parameters = {} + + self.parameters = parameters + self.case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + self.dataframe = dataframe + + self.grouped_dataframe = self.dataframe.groupby(self.case_id_key).groups + self.keys = list(self.grouped_dataframe) + + self.attributes = {} + self.extensions = {} + self.omni_present = {} + self.classifiers = {} + self.properties = {} + + def __getitem__(self, key): + if type(key) is slice: + start = key.start % len(self.dataframe) + stop = key.stop % len(self.dataframe) + sli = slice(start, stop, key.step) + ret = [] + for x in self.keys[sli]: + ret.append(PandasTraceWrapper(self.dataframe.loc[self.grouped_dataframe[x]].copy().reset_index(), + parameters=self.parameters)) + return ret + key = key % len(self.grouped_dataframe) + return PandasTraceWrapper(self.dataframe.loc[self.grouped_dataframe[self.keys[key]]].copy().reset_index(), + parameters=self.parameters) + + def __iter__(self): + for key in self.keys: + yield PandasTraceWrapper(self.dataframe.loc[self.grouped_dataframe[key]].copy().reset_index(), + parameters=self.parameters) + + def __len__(self): + return len(self.grouped_dataframe) + + def _get_list(self): + ret = [] + for key in self.keys: + ret.append(PandasTraceWrapper(self.dataframe.loc[self.grouped_dataframe[key]].copy().reset_index(), + parameters=self.parameters)) + return ret + + _list = property(_get_list) diff --git a/pm4py/pm4py/objects/log/util/pandas_numpy_variants.py b/pm4py/pm4py/objects/log/util/pandas_numpy_variants.py new file mode 100644 index 0000000000000000000000000000000000000000..b0dc973c08d8f3a177c1d67e126fc8758f267b61 --- /dev/null +++ b/pm4py/pm4py/objects/log/util/pandas_numpy_variants.py @@ -0,0 +1,102 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import pandas as pd +from enum import Enum +from pm4py.util import constants, xes_constants, pandas_utils, exec_utils +import numpy as np +from collections import Counter +from typing import Tuple, Dict, Collection +import importlib.util + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + INDEX_KEY = "index_key" + + +def apply(dataframe: pd.DataFrame, parameters=None) -> Tuple[Dict[Collection[str], int], Dict[str, Collection[str]]]: + """ + Efficient method returning the variants from a Pandas dataframe (through Numpy) + + Minimum viable example: + + import pandas as pd + import pm4py + from pm4py.objects.log.util import pandas_numpy_variants + + dataframe = pd.read_csv('tests/input_data/receipt.csv') + dataframe = pm4py.format_dataframe(dataframe) + variants_dict, case_variant = pandas_numpy_variants.apply(dataframe) + + + Parameters + ------------------ + dataframe + Dataframe + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => the case identifier + - Parameters.ACTIVITY_KEY => the activity + - Parameters.TIMESTAMP_KEY => the timestamp + - Parameters.INDEX_KEY => the index + + Returns + ------------------ + variants_dict + Dictionary associating to each variant the number of occurrences in the dataframe + case_variant + Dictionary associating to each case identifier the corresponding variant + """ + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + index_key = exec_utils.get_param_value(Parameters.INDEX_KEY, parameters, constants.DEFAULT_INDEX_KEY) + + if not (hasattr(dataframe, "attrs") and dataframe.attrs): + # dataframe has not been initialized through format_dataframe + dataframe = pandas_utils.insert_index(dataframe, index_key) + dataframe.sort_values([case_id_key, timestamp_key, index_key]) + + case_variant = dict() + + if importlib.util.find_spec("cudf"): + case_variant = dataframe.groupby(case_id_key)[activity_key].agg(list).to_dict() + case_variant = {x: tuple(y) for x, y in case_variant.items()} + variants_counter = Counter(case_variant.values()) + else: + variants_counter = Counter() + cases = dataframe[case_id_key].to_numpy() + activities = dataframe[activity_key].to_numpy() + + c_unq, c_ind, c_counts = np.unique(cases, return_index=True, return_counts=True) + + for i in range(len(c_ind)): + si = c_ind[i] + ei = si + c_counts[i] + acts = tuple(activities[si:ei]) + variants_counter[acts] += 1 + case_variant[c_unq[i]] = acts + + # return as Python dictionary + variants_dict = {x: y for x, y in variants_counter.items()} + + return variants_dict, case_variant diff --git a/pm4py/pm4py/objects/log/util/sampling.py b/pm4py/pm4py/objects/log/util/sampling.py new file mode 100644 index 0000000000000000000000000000000000000000..1ba9ca8064837e353e51deb66f97da6707120d1f --- /dev/null +++ b/pm4py/pm4py/objects/log/util/sampling.py @@ -0,0 +1,86 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import random + +from pm4py.objects.log.obj import EventStream, EventLog + + +def sample_stream(event_log, no_events=100): + """ + Randomly sample a fixed number of events from the original event log + + Parameters + ----------- + event_log + Event log + no_events + Number of events that the sample should have + + Returns + ----------- + newLog + Filtered log + """ + new_log = EventStream(attributes=event_log.attributes, extensions=event_log.extensions, globals=event_log.omni_present, + classifiers=event_log.classifiers) + new_log._list = random.sample(event_log, min(no_events, len(event_log))) + return new_log + + +def sample_log(log, no_traces=100): + """ + Randomly sample a fixed number of traces from the original log + + Parameters + ----------- + log + Log + no_traces + Number of traces that the sample should have + + Returns + ----------- + newLog + Filtered log + """ + new_log = EventLog(attributes=log.attributes, extensions=log.extensions, globals=log.omni_present, + classifiers=log.classifiers, properties=log.properties) + new_log._list = random.sample(log, min(no_traces, len(log))) + return new_log + + +def sample(log, n=100): + """ + Randomly sample a fixed number of traces from the original log + + Parameters + ----------- + log + Trace/event log + n + Number of elements that the sample should have + + Returns + ----------- + newLog + Filtered log + """ + + if type(log) is EventLog: + return sample_log(log, no_traces=n) + + return sample_stream(log, no_events=n) diff --git a/pm4py/pm4py/objects/log/util/sorting.py b/pm4py/pm4py/objects/log/util/sorting.py new file mode 100644 index 0000000000000000000000000000000000000000..b12a176885228e101b9c5769a297ebc248e0417a --- /dev/null +++ b/pm4py/pm4py/objects/log/util/sorting.py @@ -0,0 +1,198 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.obj import EventLog, Trace, EventStream +from pm4py.util import xes_constants as xes +from pm4py.objects.conversion.log import converter as log_converter + + +def sort_timestamp_trace(trace, timestamp_key=xes.DEFAULT_TIMESTAMP_KEY, reverse_sort=False): + """ + Sort a trace based on timestamp key + + Parameters + ----------- + trace + Trace + timestamp_key + Timestamp key + reverse_sort + If true, reverses the direction in which the sort is done (ascending) + + Returns + ----------- + trace + Sorted trace + """ + events = sorted(trace._list, key=lambda x: x[timestamp_key], reverse=reverse_sort) + new_trace = Trace(events, attributes=trace.attributes) + return new_trace + + +def sort_timestamp_stream(event_log, timestamp_key=xes.DEFAULT_TIMESTAMP_KEY, reverse_sort=False): + """ + Sort an event log based on timestamp key + + Parameters + ----------- + event_log + Event log + timestamp_key + Timestamp key + reverse_sort + If true, reverses the direction in which the sort is done (ascending) + + Returns + ----------- + event_log + Sorted event log + """ + events = sorted(event_log._list, key=lambda x: x[timestamp_key], reverse=reverse_sort) + new_stream = EventStream(events, attributes=event_log.attributes, extensions=event_log.extensions, + omni_present=event_log.omni_present, classifiers=event_log.classifiers, + properties=event_log.properties) + return new_stream + + +def sort_timestamp_log(event_log, timestamp_key=xes.DEFAULT_TIMESTAMP_KEY, reverse_sort=False): + """ + Sort a log based on timestamp key + + Parameters + ----------- + event_log + Log + timestamp_key + Timestamp key + reverse_sort + If true, reverses the direction in which the sort is done (ascending) + + Returns + ----------- + log + Sorted log + """ + event_log = log_converter.apply(event_log, variant=log_converter.Variants.TO_EVENT_LOG) + + new_log = EventLog(attributes=event_log.attributes, extensions=event_log.extensions, + omni_present=event_log.omni_present, classifiers=event_log.classifiers, + properties=event_log.properties) + for trace in event_log: + if trace: + new_log.append(sort_timestamp_trace(trace, timestamp_key=timestamp_key, reverse_sort=reverse_sort)) + new_log._list.sort(key=lambda x: x[0][timestamp_key], reverse=reverse_sort) + + return new_log + + +def sort_timestamp(log, timestamp_key=xes.DEFAULT_TIMESTAMP_KEY, reverse_sort=False): + """ + Sort a log based on timestamp key + + Parameters + ----------- + log + Trace/Event log + timestamp_key + Timestamp key + reverse_sort + If true, reverses the direction in which the sort is done (ascending) + + Returns + ----------- + log + Sorted Trace/Event log + """ + if type(log) is EventLog: + return sort_timestamp_log(log, timestamp_key=timestamp_key, reverse_sort=reverse_sort) + return sort_timestamp_stream(log, timestamp_key=timestamp_key, reverse_sort=reverse_sort) + + +def sort_lambda_log(event_log, sort_function, reverse=False): + """ + Sort a log based on a lambda expression + + Parameters + ------------ + event_log + Log + sort_function + Sort function + reverse + Boolean (sort by reverse order) + + Returns + ------------ + new_log + Sorted log + """ + event_log = log_converter.apply(event_log, variant=log_converter.Variants.TO_EVENT_LOG) + + traces = sorted(event_log._list, key=sort_function, reverse=reverse) + new_log = EventLog(traces, attributes=event_log.attributes, extensions=event_log.extensions, + omni_present=event_log.omni_present, classifiers=event_log.classifiers, + properties=event_log.properties) + + return new_log + + +def sort_lambda_stream(event_log, sort_function, reverse=False): + """ + Sort a stream based on a lambda expression + + Parameters + ------------ + event_log + Stream + sort_function + Sort function + reverse + Boolean (sort by reverse order) + + Returns + ------------ + stream + Sorted stream + """ + events = sorted(event_log._list, key=sort_function, reverse=reverse) + new_stream = EventStream(events, attributes=event_log.attributes, extensions=event_log.extensions, + omni_present=event_log.omni_present, classifiers=event_log.classifiers, + properties=event_log.properties) + + return new_stream + + +def sort_lambda(log, sort_function, reverse=False): + """ + Sort a log based on lambda expression + + Parameters + ------------- + log + Log + sort_function + Sort function + reverse + Boolean (sort by reverse order) + + Returns + ------------- + log + Sorted log + """ + if type(log) is EventLog: + return sort_lambda_log(log, sort_function, reverse=reverse) + return sort_lambda_stream(log, sort_function, reverse=reverse) diff --git a/pm4py/pm4py/objects/log/util/split_train_test.py b/pm4py/pm4py/objects/log/util/split_train_test.py new file mode 100644 index 0000000000000000000000000000000000000000..03f014aef1b22307ac607ef39cdf0b3ef2123bc6 --- /dev/null +++ b/pm4py/pm4py/objects/log/util/split_train_test.py @@ -0,0 +1,54 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.obj import EventLog +from typing import Tuple +import random +import math + + +def split(log: EventLog, train_percentage: float = 0.8) -> Tuple[EventLog, EventLog]: + """ + Split an event log in a training log and a test log (for machine learning purposes) + + Parameters + -------------- + log + Event log + train_percentage + Fraction of traces to be included in the training log (from 0.0 to 1.0) + + Returns + -------------- + training_log + Training event log + test_log + Test event log + """ + idxs = [i for i in range(len(log))] + random.shuffle(idxs) + stop_idx = math.floor(len(idxs) * train_percentage) + 1 + idxs_train = idxs[:stop_idx] + idxs_test = idxs[stop_idx:] + train_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + test_log = EventLog(list(), attributes=log.attributes, extensions=log.extensions, classifiers=log.classifiers, + omni_present=log.omni_present, properties=log.properties) + for idx in idxs_train: + train_log.append(log[idx]) + for idx in idxs_test: + test_log.append(log[idx]) + return train_log, test_log diff --git a/pm4py/pm4py/objects/log/util/xes.py b/pm4py/pm4py/objects/log/util/xes.py new file mode 100644 index 0000000000000000000000000000000000000000..536ea4f285ef50a2897b3389e37fefd6de72334d --- /dev/null +++ b/pm4py/pm4py/objects/log/util/xes.py @@ -0,0 +1,55 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +# XES TAGS +TAG_BOOLEAN = 'boolean' +TAG_CLASSIFIER = 'classifier' +TAG_DATE = 'date' +TAG_EVENT = 'event' +TAG_EXTENSION = 'extension' +TAG_FLOAT = 'float' +TAG_GLOBAL = 'global' +TAG_ID = 'id' +TAG_INT = 'int' +TAG_LIST = 'list' +TAG_LOG = 'log' +TAG_STRING = 'string' +TAG_TRACE = 'trace' +TAG_VALUES = 'values' +TAG_VERSION = 'xes.version' +TAG_FEATURES = 'xes.features' +TAG_XMLNS = 'xmlns' + +# XES/INTERNAL KEYS +KEY_CHILDREN = 'children' +KEY_KEY = 'key' +KEY_KEYS = 'keys' +KEY_NAME = 'name' +KEY_PREFIX = 'prefix' +KEY_SCOPE = 'scope' +KEY_URI = 'uri' +KEY_VALUE = 'value' + +DEFAULT_NAME_KEY = 'concept:name' +DEFAULT_TIMESTAMP_KEY = 'time:timestamp' +DEFAULT_START_TIMESTAMP_KEY = 'start_timestamp' +DEFAULT_TRACEID_KEY = 'concept:name' +DEFAULT_RESOURCE_KEY = 'org:resource' +DEFAULT_TRANSITION_KEY = "lifecycle:transition" + +VALUE_XES_VERSION = '1849-2016' +VALUE_XES_FEATURES = "nested-attributes" +VALUE_XMLNS = 'http://www.xes-standard.org/' diff --git a/pm4py/pm4py/objects/ocel/__init__.py b/pm4py/pm4py/objects/ocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c0575b7a0aeeecf5c90737fe3f3ac807885061a3 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel import constants, obj, exporter, importer, util, validation diff --git a/pm4py/pm4py/objects/ocel/constants.py b/pm4py/pm4py/objects/ocel/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..7e30fc4c9a544ebc9083dff16fc962df1e50fe62 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/constants.py @@ -0,0 +1,61 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +PARAM_EVENT_ID = "param:event:id" +PARAM_EVENT_ACTIVITY = "param:event:activity" +PARAM_EVENT_TIMESTAMP = "param:event:timestamp" +PARAM_OBJECT_ID = "param:object:id" +PARAM_OBJECT_TYPE = "param:object:type" +PARAM_OBJECT_TYPE_PREFIX_EXTENDED = "param:object:type:prefix:extended" +PARAM_QUALIFIER = "param:qualifier" +PARAM_CHNGD_FIELD = "param:chngfield" + +DEFAULT_EVENT_ID = "ocel:eid" +DEFAULT_EVENT_ACTIVITY = "ocel:activity" +DEFAULT_EVENT_TIMESTAMP = "ocel:timestamp" +DEFAULT_OBJECT_ID = "ocel:oid" +DEFAULT_OBJECT_TYPE = "ocel:type" +DEFAULT_OBJECT_TYPE_PREFIX_EXTENDED = "ocel:type:" +DEFAULT_QUALIFIER = "ocel:qualifier" +DEFAULT_CHNGD_FIELD = "ocel:field" + +OCEL_PREFIX = "ocel:" +OCEL_EVENTS_KEY = "ocel:events" +OCEL_OBJECTS_KEY = "ocel:objects" +OCEL_ID_KEY = "ocel:id" +OCEL_OMAP_KEY = "ocel:omap" +OCEL_TYPED_OMAP_KEY = "ocel:typedOmap" +OCEL_VMAP_KEY = "ocel:vmap" +OCEL_OVMAP_KEY = "ocel:ovmap" +OCEL_O2O_KEY = "ocel:o2o" +OCEL_OBJCHANGES_KEY = "ocel:objectChanges" +OCEL_EVTYPES_KEY = "ocel:eventTypes" +OCEL_OBJTYPES_KEY = "ocel:objectTypes" +OCEL_GLOBAL_LOG = "ocel:global-log" +OCEL_GLOBAL_LOG_ATTRIBUTE_NAMES = "ocel:attribute-names" +OCEL_GLOBAL_LOG_OBJECT_TYPES = "ocel:object-types" +OCEL_GLOBAL_LOG_VERSION = "ocel:version" +OCEL_GLOBAL_LOG_ORDERING = "ocel:ordering" +OCEL_GLOBAL_EVENT = "ocel:global-event" +OCEL_GLOBAL_OBJECT = "ocel:global-object" + +PARAM_INTERNAL_INDEX = "param:internal:index" +DEFAULT_INTERNAL_INDEX = "@@index" + +DEFAULT_GLOBAL_EVENT = {"ocel:activity": "__INVALID__"} +DEFAULT_GLOBAL_OBJECT = {"ocel:type": "__INVALID__"} +DEFAULT_ORDERING = "timestamp" +CURRENT_VERSION = "1.0" diff --git a/pm4py/pm4py/objects/ocel/exporter/__init__.py b/pm4py/pm4py/objects/ocel/exporter/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..db49368a19a1ca02d0f742493b7661105c10f43b --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/__init__.py @@ -0,0 +1,21 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.exporter import util, csv, jsonocel +import importlib.util + +if importlib.util.find_spec("lxml"): + from pm4py.objects.ocel.exporter import xmlocel diff --git a/pm4py/pm4py/objects/ocel/exporter/csv/__init__.py b/pm4py/pm4py/objects/ocel/exporter/csv/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a51968a66004b4b2eaeabc549f9e73429cb7b41e --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/csv/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.exporter.csv import variants, exporter diff --git a/pm4py/pm4py/objects/ocel/exporter/csv/exporter.py b/pm4py/pm4py/objects/ocel/exporter/csv/exporter.py new file mode 100644 index 0000000000000000000000000000000000000000..3de3501624649b1f9d25facf0b53486133403888 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/csv/exporter.py @@ -0,0 +1,48 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.objects.ocel.exporter.csv.variants import pandas +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils + + +class Variants(Enum): + PANDAS = pandas + + +def apply(ocel: OCEL, output_path: str, variant=Variants.PANDAS, objects_path=None, + parameters: Optional[Dict[Any, Any]] = None): + """ + Exports an object-centric event log in a CSV file + + Parameters + ----------------- + ocel + Object-centric event log + output_path + Destination file + variant + Variant of the algorithm that should be used, possible values: + - Variants.PANDAS + objects_path + Optional path, where the objects dataframe is stored + parameters + Parameters of the algorithm + """ + return exec_utils.get_variant(variant).apply(ocel, output_path, objects_path=objects_path, parameters=parameters) diff --git a/pm4py/pm4py/objects/ocel/exporter/csv/variants/__init__.py b/pm4py/pm4py/objects/ocel/exporter/csv/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..03d00e9417e111e640517e0b0b18718b31c2e39f --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/csv/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.exporter.csv.variants import pandas diff --git a/pm4py/pm4py/objects/ocel/exporter/csv/variants/pandas.py b/pm4py/pm4py/objects/ocel/exporter/csv/variants/pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..190579e4a9a21dc9a0fb6828d41c7f64ea94eb78 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/csv/variants/pandas.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.objects.ocel.util import ocel_consistency +from enum import Enum +from pm4py.util import exec_utils, constants as pm4_constants + + +class Parameters(Enum): + ENCODING = "encoding" + + +def apply(ocel: OCEL, output_path: str, objects_path=None, parameters: Optional[Dict[Any, Any]] = None): + """ + Exports an object-centric event log in a CSV file, using Pandas as backend + + Parameters + ----------------- + ocel + Object-centric event log + output_path + Destination file + objects_path + Optional path, where the objects dataframe is stored + parameters + Parameters of the algorithm + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, pm4_constants.DEFAULT_ENCODING) + + ocel = ocel_consistency.apply(ocel, parameters=parameters) + + ocel.get_extended_table().to_csv(output_path, index=False, na_rep="", encoding=encoding) + + if objects_path is not None: + ocel.objects.to_csv(objects_path, index=False, na_rep="", encoding=encoding) diff --git a/pm4py/pm4py/objects/ocel/exporter/jsonocel/__init__.py b/pm4py/pm4py/objects/ocel/exporter/jsonocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ac8869277dd231bcd92df748f4afc71f7293f69f --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/jsonocel/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.exporter.jsonocel import exporter, variants diff --git a/pm4py/pm4py/objects/ocel/exporter/jsonocel/exporter.py b/pm4py/pm4py/objects/ocel/exporter/jsonocel/exporter.py new file mode 100644 index 0000000000000000000000000000000000000000..a6108e387c9bdc19f57cbd2c58d2ae86f41de3f6 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/jsonocel/exporter.py @@ -0,0 +1,47 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.objects.ocel.exporter.jsonocel.variants import classic, ocel20, ocel20_standard +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils + + +class Variants(Enum): + CLASSIC = classic + OCEL20 = ocel20 + OCEL20_STANDARD = ocel20_standard + + +def apply(ocel: OCEL, target_path: str, variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None): + """ + Exports an object-centric event log in a JSONOCEL file + + Parameters + ------------------ + ocel + Object-centric event log + target_path + Destination path + variant + Variant of the algorithm to use, possible values: + - Variants.CLASSIC + parameters + Variant-specific parameters + """ + return exec_utils.get_variant(variant).apply(ocel, target_path, parameters) diff --git a/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/__init__.py b/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2faad86cedc30b9655b39ee7a8f21e6c4120a11d --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.exporter.jsonocel.variants import classic, ocel20, ocel20_standard diff --git a/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/classic.py b/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..2030a3b3685fde16db6bf8735b50615da7aa299b --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/classic.py @@ -0,0 +1,125 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import json +from enum import Enum +from typing import Optional, Dict, Any + +import pandas as pd + +from pm4py.objects.ocel import constants +from pm4py.objects.ocel.exporter.util import clean_dataframes +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.ocel.util import attributes_names +from pm4py.objects.ocel.util import related_objects +from pm4py.util import exec_utils, constants as pm4_constants, pandas_utils +from pm4py.objects.ocel.util import ocel_consistency + + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + ENCODING = "encoding" + + +def get_base_json_object(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + all_object_types = pandas_utils.format_unique(ocel.objects[object_type].unique()) + all_attribute_names = attributes_names.get_attribute_names(ocel, parameters=parameters) + global_event_items = ocel.globals[ + constants.OCEL_GLOBAL_EVENT] if constants.OCEL_GLOBAL_EVENT in ocel.globals else constants.DEFAULT_GLOBAL_EVENT + global_object_items = ocel.globals[ + constants.OCEL_GLOBAL_OBJECT] if constants.OCEL_GLOBAL_OBJECT in ocel.globals else constants.DEFAULT_GLOBAL_OBJECT + rel_objs = related_objects.related_objects_dct_overall(ocel, parameters=parameters) + + events_items, objects_items = clean_dataframes.get_dataframes_from_ocel(ocel, parameters=parameters) + + base_object = {} + base_object[constants.OCEL_GLOBAL_EVENT] = global_event_items + base_object[constants.OCEL_GLOBAL_OBJECT] = global_object_items + base_object[constants.OCEL_GLOBAL_LOG] = {} + base_object[constants.OCEL_GLOBAL_LOG][constants.OCEL_GLOBAL_LOG_OBJECT_TYPES] = all_object_types + base_object[constants.OCEL_GLOBAL_LOG][constants.OCEL_GLOBAL_LOG_ATTRIBUTE_NAMES] = all_attribute_names + base_object[constants.OCEL_GLOBAL_LOG][constants.OCEL_GLOBAL_LOG_VERSION] = constants.CURRENT_VERSION + base_object[constants.OCEL_GLOBAL_LOG][constants.OCEL_GLOBAL_LOG_ORDERING] = constants.DEFAULT_ORDERING + base_object[constants.OCEL_EVENTS_KEY] = {} + base_object[constants.OCEL_OBJECTS_KEY] = {} + + events_items = events_items.to_dict("records") + i = 0 + while i < len(events_items): + event = events_items[i] + eid = event[event_id] + del event[event_id] + event = {k: v for k, v in event.items() if pd.notnull(v)} + vmap = {k: v for k, v in event.items() if not k.startswith(constants.OCEL_PREFIX)} + event = {k: v for k, v in event.items() if k.startswith(constants.OCEL_PREFIX)} + event[constants.OCEL_VMAP_KEY] = vmap + event[constants.OCEL_OMAP_KEY] = list(rel_objs[eid]) + base_object[constants.OCEL_EVENTS_KEY][eid] = event + i = i + 1 + del events_items + + objects_items = objects_items.to_dict("records") + i = 0 + while i < len(objects_items): + object = objects_items[i] + oid = object[object_id] + del object[object_id] + ovmap = {k: v for k, v in object.items() if pd.notnull(v) and not k.startswith(constants.OCEL_PREFIX)} + object = {object_type: object[object_type], constants.OCEL_OVMAP_KEY: ovmap} + base_object[constants.OCEL_OBJECTS_KEY][oid] = object + i = i + 1 + del objects_items + + return base_object + + +def apply(ocel: OCEL, target_path: str, parameters: Optional[Dict[Any, Any]] = None): + """ + Exports an object-centric event log in a JSONOCEL file, using the classic JSON dump + + Parameters + ------------------ + ocel + Object-centric event log + target_path + Destination path + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the event ID column + - Parameters.OBJECT_ID => the object ID column + - Parameters.OBJECT_TYPE => the object type column + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, pm4_constants.DEFAULT_ENCODING) + + ocel = ocel_consistency.apply(ocel, parameters=parameters) + + base_object = get_base_json_object(ocel, parameters=parameters) + + F = open(target_path, "w", encoding=encoding) + json.dump(base_object, F, indent=2) + F.close() diff --git a/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/ocel20.py b/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/ocel20.py new file mode 100644 index 0000000000000000000000000000000000000000..697bdc0438206c5cbca72d22cef821cfa2104f1a --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/ocel20.py @@ -0,0 +1,139 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import json +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.objects.ocel import constants +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils, constants as pm4_constants +from pm4py.objects.ocel.util import ocel_consistency +from pm4py.objects.ocel.exporter.jsonocel.variants import classic +from pm4py.objects.ocel.util import attributes_per_type + + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + EVENT_ACTIVITY = constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = constants.PARAM_EVENT_TIMESTAMP + ENCODING = "encoding" + + +def get_enriched_object(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, ocel.event_activity) + event_timestamp = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, ocel.event_timestamp) + + ocel = ocel_consistency.apply(ocel, parameters=parameters) + + base_object = classic.get_base_json_object(ocel, parameters=parameters) + + ets, ots = attributes_per_type.get(ocel, parameters=parameters) + + base_object[constants.OCEL_EVTYPES_KEY] = {} + for et in ets: + base_object[constants.OCEL_EVTYPES_KEY][et] = {} + et_atts = ets[et] + for k, v in et_atts.items(): + this_type = "string" + if "date" in v or "time" in v: + this_type = "date" + elif "float" in v or "double" in v: + this_type = "float" + base_object[constants.OCEL_EVTYPES_KEY][et][k] = this_type + + base_object[constants.OCEL_OBJTYPES_KEY] = {} + for ot in ots: + base_object[constants.OCEL_OBJTYPES_KEY][ot] = {} + ot_atts = ots[ot] + for k, v in ot_atts.items(): + this_type = "string" + if "date" in v or "time" in v: + this_type = "date" + elif "float" in v or "double" in v: + this_type = "float" + base_object[constants.OCEL_OBJTYPES_KEY][ot][k] = this_type + + base_object[constants.OCEL_OBJCHANGES_KEY] = [] + if len(ocel.object_changes) > 0: + object_changes = ocel.object_changes.to_dict("records") + for i in range(len(object_changes)): + object_changes[i][event_timestamp] = object_changes[i][event_timestamp].isoformat() + + base_object[constants.OCEL_OBJCHANGES_KEY] = object_changes + + e2o_list = ocel.relations[[event_id, object_id, constants.DEFAULT_QUALIFIER]].to_dict("records") + eids = set() + + for elem in e2o_list: + eid = elem[event_id] + oid = elem[object_id] + qualifier = elem[constants.DEFAULT_QUALIFIER] + + if eid not in eids: + base_object[constants.OCEL_EVENTS_KEY][eid][constants.OCEL_TYPED_OMAP_KEY] = [] + eids.add(eid) + + base_object[constants.OCEL_EVENTS_KEY][eid][constants.OCEL_TYPED_OMAP_KEY].append({object_id: oid, constants.DEFAULT_QUALIFIER: qualifier}) + + o2o_list = ocel.o2o.to_dict("records") + oids = set() + + for elem in o2o_list: + oid = elem[object_id] + oid2 = elem[object_id+"_2"] + qualifier = elem[constants.DEFAULT_QUALIFIER] + + if oid not in oids: + base_object[constants.OCEL_OBJECTS_KEY][oid][constants.OCEL_O2O_KEY] = [] + oids.add(oid) + + base_object[constants.OCEL_OBJECTS_KEY][oid][constants.OCEL_O2O_KEY].append({object_id: oid2, constants.DEFAULT_QUALIFIER: qualifier}) + + return base_object + + +def apply(ocel: OCEL, target_path: str, parameters: Optional[Dict[Any, Any]] = None): + """ + Exports an object-centric event log (OCEL 2.0) in a JSONOCEL 2.0 file, using the classic JSON dump + + Parameters + ------------------ + ocel + Object-centric event log + target_path + Destination path + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the event ID column + - Parameters.OBJECT_ID => the object ID column + - Parameters.OBJECT_TYPE => the object type column + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, pm4_constants.DEFAULT_ENCODING) + + json_object = get_enriched_object(ocel, parameters=parameters) + + F = open(target_path, "w", encoding=encoding) + json.dump(json_object, F, indent=2) + F.close() diff --git a/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/ocel20_standard.py b/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/ocel20_standard.py new file mode 100644 index 0000000000000000000000000000000000000000..88490687de2011cf8a701facfa813143ff590b3c --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/jsonocel/variants/ocel20_standard.py @@ -0,0 +1,108 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.exporter.jsonocel.variants import ocel20 +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +import json +from pm4py.util import exec_utils, constants as pm4_constants + + +class Parameters(Enum): + ENCODING = "encoding" + + +def apply(ocel: OCEL, target_path: str, parameters: Optional[Dict[Any, Any]] = None): + """ + Exports an object-centric event log (OCEL 2.0) in a JSON-OCEL 2.0 standard file + + Parameters + ------------------ + ocel + Object-centric event log + target_path + Destination path + parameters + Possible parameters of the method, including: + - Parameters.ENCODING + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, pm4_constants.DEFAULT_ENCODING) + + legacy_object = ocel20.get_enriched_object(ocel) + + json_object = {} + json_object["objectTypes"] = [] + json_object["eventTypes"] = [] + json_object["objects"] = [] + json_object["events"] = [] + + for ot, attrs in legacy_object["ocel:objectTypes"].items(): + descr = {"name": ot, "attributes": [{"name": x, "type": y} for x, y in attrs.items()]} + json_object["objectTypes"].append(descr) + + for et, attrs in legacy_object["ocel:eventTypes"].items(): + descr = {"name": et, "attributes": [{"name": x, "type": y} for x, y in attrs.items()]} + json_object["eventTypes"].append(descr) + + obj_idx = {} + for objid, obj in legacy_object["ocel:objects"].items(): + descr = {} + descr["id"] = objid + descr["type"] = obj["ocel:type"] + if "ocel:ovmap" in obj and obj["ocel:ovmap"]: + descr["attributes"] = [] + for k, v in obj["ocel:ovmap"].items(): + descr["attributes"].append({"name": k, "time": "1970-01-01T00:00:00Z", "value": v}) + if "ocel:o2o" in obj and obj["ocel:o2o"]: + descr["relationships"] = [] + for v in obj["ocel:o2o"]: + descr["relationships"].append({"objectId": v["ocel:oid"], "qualifier": v["ocel:qualifier"]}) + json_object["objects"].append(descr) + obj_idx[objid] = len(obj_idx) + + eve_idx = {} + for evid, eve in legacy_object["ocel:events"].items(): + descr = {} + descr["id"] = evid + descr["type"] = eve["ocel:activity"] + descr["time"] = eve["ocel:timestamp"] + if "ocel:vmap" in eve and eve["ocel:vmap"]: + descr["attributes"] = [] + for k, v in eve["ocel:vmap"].items(): + descr["attributes"].append({"name": k, "value": v}) + if "ocel:typedOmap" in eve and eve["ocel:typedOmap"]: + descr["relationships"] = [] + for v in eve["ocel:typedOmap"]: + descr["relationships"].append({"objectId": v["ocel:oid"], "qualifier": v["ocel:qualifier"]}) + json_object["events"].append(descr) + eve_idx[evid] = len(eve_idx) + + for change in legacy_object["ocel:objectChanges"]: + oid = change["ocel:oid"] + obj = json_object["objects"][obj_idx[oid]] + + obj["attributes"].append( + {"name": change["ocel:field"], "time": change["ocel:timestamp"], "value": change[change["ocel:field"]]}) + + json_object["objects"][obj_idx[oid]] = obj + + F = open(target_path, "w", encoding=encoding) + json.dump(json_object, F, indent=2) + F.close() diff --git a/pm4py/pm4py/objects/ocel/exporter/sqlite/__init__.py b/pm4py/pm4py/objects/ocel/exporter/sqlite/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ca1f5edf0fb5bdb3e3e7b712653932c53085551c --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/sqlite/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.exporter.sqlite import exporter, variants diff --git a/pm4py/pm4py/objects/ocel/exporter/sqlite/exporter.py b/pm4py/pm4py/objects/ocel/exporter/sqlite/exporter.py new file mode 100644 index 0000000000000000000000000000000000000000..593b69b8a2e9092c4b9175169a81582a6c7223ae --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/sqlite/exporter.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.ocel.exporter.sqlite.variants import pandas_exporter, ocel20 +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +class Variants(Enum): + PANDAS_EXPORTER = pandas_exporter + OCEL20 = ocel20 + + +def apply(ocel: OCEL, target_path: str, variant=Variants.PANDAS_EXPORTER, parameters: Optional[Dict[Any, Any]] = None): + """ + Exports an OCEL to a SQLite database + + Parameters + ------------- + ocel + Object-centric event log + target_path + Path to the SQLite database + variant + Variant to use. Possible values: + - Variants.PANDAS_EXPORTER => Pandas exporter + parameters + Variant-specific parameters + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(ocel, target_path, parameters=parameters) diff --git a/pm4py/pm4py/objects/ocel/exporter/sqlite/variants/__init__.py b/pm4py/pm4py/objects/ocel/exporter/sqlite/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b26d211296da6c0d29e922bc2e8f27e588dcd170 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/sqlite/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.exporter.sqlite.variants import pandas_exporter diff --git a/pm4py/pm4py/objects/ocel/exporter/sqlite/variants/ocel20.py b/pm4py/pm4py/objects/ocel/exporter/sqlite/variants/ocel20.py new file mode 100644 index 0000000000000000000000000000000000000000..79a91a8d3a98179d4baa864698a9c055d301bf33 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/sqlite/variants/ocel20.py @@ -0,0 +1,113 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +import os +import pandas as pd +from datetime import datetime +from pm4py.objects.ocel.util import names_stripping +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +from pm4py.objects.ocel.util import ocel_consistency + + +class Parameters(Enum): + ENABLE_NAMES_STRIPPING = "enable_names_stripping" + + +def apply(ocel: OCEL, file_path: str, parameters: Optional[Dict[Any, Any]] = None): + if parameters is None: + parameters = {} + + enable_names_stripping = exec_utils.get_param_value(Parameters.ENABLE_NAMES_STRIPPING, parameters, True) + + import sqlite3 + + if os.path.exists(file_path): + os.remove(file_path) + + ocel = ocel_consistency.apply(ocel, parameters=parameters) + + event_id = ocel.event_id_column + event_activity = ocel.event_activity + event_timestamp = ocel.event_timestamp + object_id = ocel.object_id_column + object_type = ocel.object_type_column + qualifier = ocel.qualifier + changed_field = ocel.changed_field + + conn = sqlite3.connect(file_path) + + EVENTS = ocel.events[[event_id, event_activity]].rename(columns={event_id: "ocel_id", event_activity: "ocel_type"}) + EVENTS = EVENTS.drop_duplicates() + EVENTS.to_sql("event", conn, index=False) + + OBJECTS = ocel.objects[[object_id, object_type]].rename(columns={object_id: "ocel_id", object_type: "ocel_type"}) + OBJECTS = OBJECTS.drop_duplicates() + OBJECTS.to_sql("object", conn, index=False) + + event_types = sorted(pandas_utils.format_unique(EVENTS["ocel_type"].unique())) + object_types = sorted(pandas_utils.format_unique(OBJECTS["ocel_type"].unique())) + + EVENT_CORR_TYPE = pandas_utils.instantiate_dataframe({"ocel_type": event_types, "ocel_type_map": event_types}) + OBJECT_CORR_TYPE = pandas_utils.instantiate_dataframe({"ocel_type": object_types, "ocel_type_map": object_types}) + + if enable_names_stripping: + EVENT_CORR_TYPE["ocel_type_map"] = EVENT_CORR_TYPE["ocel_type_map"].apply(lambda x: names_stripping.apply(x)) + OBJECT_CORR_TYPE["ocel_type_map"] = OBJECT_CORR_TYPE["ocel_type_map"].apply(lambda x: names_stripping.apply(x)) + + EVENT_CORR_TYPE.to_sql("event_map_type", conn, index=False) + OBJECT_CORR_TYPE.to_sql("object_map_type", conn, index=False) + + E2O = ocel.relations[[event_id, object_id, qualifier]].rename(columns={event_id: "ocel_event_id", object_id: "ocel_object_id", qualifier: "ocel_qualifier"}) + E2O.to_sql("event_object", conn, index=False) + + O2O = ocel.o2o.rename(columns={object_id: "ocel_source_id", object_id+"_2": "ocel_target_id", qualifier: "ocel_qualifier"}) + O2O.to_sql("object_object", conn, index=False) + + e_types = sorted(pandas_utils.format_unique(ocel.events[event_activity].unique())) + o_types = sorted(pandas_utils.format_unique(ocel.objects[object_type].unique())) + + for act in e_types: + df = ocel.events[ocel.events[event_activity] == act].dropna(how="all", axis="columns") + del df[event_activity] + df = df.rename(columns={event_id: "ocel_id", event_timestamp: "ocel_time"}) + df["ocel_id"] = df["ocel_id"].astype("string") + + act_red = names_stripping.apply(act) if enable_names_stripping else act + + df = df.drop_duplicates() + df.to_sql("event_"+act_red, conn, index=False) + + for ot in o_types: + df = ocel.objects[ocel.objects[object_type] == ot].dropna(how="all", axis="columns") + df = df.rename(columns={object_id: "ocel_id"}) + del df[object_type] + + df2 = ocel.object_changes[ocel.object_changes[object_type] == ot].dropna(how="all", axis="columns") + if len(df2) > 0: + del df2[object_type] + df2 = df2.rename(columns={object_id: "ocel_id", event_timestamp: "ocel_time", changed_field: "ocel_changed_field"}) + df = pandas_utils.concat([df, df2], axis=0) + + df["ocel_id"] = df["ocel_id"].astype("string") + + ot_red = names_stripping.apply(ot) if enable_names_stripping else ot + + df.to_sql("object_"+ot_red, conn, index=False) + + conn.close() diff --git a/pm4py/pm4py/objects/ocel/exporter/sqlite/variants/pandas_exporter.py b/pm4py/pm4py/objects/ocel/exporter/sqlite/variants/pandas_exporter.py new file mode 100644 index 0000000000000000000000000000000000000000..a47de7c3c1485ab35f9a5983334645e1bdf6d40d --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/sqlite/variants/pandas_exporter.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Dict, Any, Optional +from pm4py.objects.ocel.util import ocel_consistency +import os + + +def apply(ocel: OCEL, target_path: str, parameters: Optional[Dict[Any, Any]] = None): + """ + Exports an OCEL to a SQLite database using Pandas + + Parameters + --------------- + ocel + Object-centric event log + target_path + Path to the SQLite database + parameters + Parameters of the exporter + """ + if parameters is None: + parameters = {} + + import sqlite3 + + if os.path.exists(target_path): + os.remove(target_path) + + ocel = ocel_consistency.apply(ocel, parameters=parameters) + + conn = sqlite3.connect(target_path) + + ocel.events.to_sql("EVENTS", conn, index=False) + ocel.relations.to_sql("RELATIONS", conn, index=False) + ocel.objects.to_sql("OBJECTS", conn, index=False) + + conn.close() diff --git a/pm4py/pm4py/objects/ocel/exporter/util/__init__.py b/pm4py/pm4py/objects/ocel/exporter/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..90a21eefc29b27a9c8a2f50f3cbf57b6169a5847 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.exporter.util import clean_dataframes diff --git a/pm4py/pm4py/objects/ocel/exporter/util/clean_dataframes.py b/pm4py/pm4py/objects/ocel/exporter/util/clean_dataframes.py new file mode 100644 index 0000000000000000000000000000000000000000..6365dd51638128bc901a18356834f659c1738d68 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/util/clean_dataframes.py @@ -0,0 +1,43 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any, Tuple + +import pandas as pd + +from pm4py.objects.ocel.obj import OCEL + + +def get_dataframes_from_ocel(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Tuple[ + pd.DataFrame, pd.DataFrame]: + if parameters is None: + parameters = {} + + events = ocel.events.copy() + for col in events.columns: + if str(events[col].dtype) == "object": + events[col] = events[col].astype('string') + elif "date" in str(events[col].dtype): + events[col] = events[col].dt.strftime('%Y-%m-%dT%H:%M:%SZ') + + objects = ocel.objects.copy() + for col in objects.columns: + if str(objects[col].dtype) == "object": + objects[col] = objects[col].astype('string') + elif "date" in str(objects[col].dtype): + objects[col] = objects[col].dt.strftime('%Y-%m-%dT%H:%M:%SZ') + + return events, objects diff --git a/pm4py/pm4py/objects/ocel/exporter/xmlocel/__init__.py b/pm4py/pm4py/objects/ocel/exporter/xmlocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ca62a9351425214f6564d94a05525e69cee74353 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/xmlocel/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.exporter.xmlocel import exporter, variants diff --git a/pm4py/pm4py/objects/ocel/exporter/xmlocel/exporter.py b/pm4py/pm4py/objects/ocel/exporter/xmlocel/exporter.py new file mode 100644 index 0000000000000000000000000000000000000000..fe5c9b550a1e01d293bd061643dccf5ab3a81b88 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/xmlocel/exporter.py @@ -0,0 +1,46 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.objects.ocel.exporter.xmlocel.variants import classic, ocel20 +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils + + +class Variants(Enum): + CLASSIC = classic + OCEL20 = ocel20 + + +def apply(ocel: OCEL, target_path: str, variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None): + """ + Exports an object-centric event log to a XML-OCEL file. + + Parameters + ----------------- + ocel + Object-centric event log + target_path + Destination path + variant + Variant of the algorithm to use, possible values: + - Variants.CLASSIC + parameters + Variant-specific parameters + """ + return exec_utils.get_variant(variant).apply(ocel, target_path, parameters) diff --git a/pm4py/pm4py/objects/ocel/exporter/xmlocel/variants/__init__.py b/pm4py/pm4py/objects/ocel/exporter/xmlocel/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/xmlocel/variants/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/objects/ocel/exporter/xmlocel/variants/classic.py b/pm4py/pm4py/objects/ocel/exporter/xmlocel/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..1ecc0e8dc991751354096974a7a269b568f66125 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/xmlocel/variants/classic.py @@ -0,0 +1,191 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +import pandas as pd +from lxml import etree + +from pm4py.objects.ocel import constants +from pm4py.objects.ocel.exporter.util import clean_dataframes +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.ocel.util import attributes_names +from pm4py.objects.ocel.util import related_objects +from pm4py.util import exec_utils, constants as pm4_constants, pandas_utils +from pm4py.objects.ocel.util import ocel_consistency + + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + ENCODING = "encoding" + + +def get_type(t0): + if "float" in str(t0).lower() or "double" in str(t0).lower(): + return "float" + elif "date" in str(t0).lower(): + return "date" + elif "object" in str(t0).lower(): + return "string" + else: + return "string" + + +def apply(ocel: OCEL, target_path: str, parameters: Optional[Dict[Any, Any]] = None): + """ + Exports an object-centric event log to a XML-OCEL file, using LXML. + + Parameters + ----------------- + ocel + Object-centric event log + target_path + Destination path + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the event ID column + - Parameters.OBJECT_ID => the object ID column + - Parameters.OBJECT_TYPE => the object type column + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, pm4_constants.DEFAULT_ENCODING) + + ocel = ocel_consistency.apply(ocel, parameters=parameters) + + all_object_types = pandas_utils.format_unique(ocel.objects[object_type].unique()) + all_attribute_names = attributes_names.get_attribute_names(ocel, parameters=parameters) + global_event_items = ocel.globals[ + constants.OCEL_GLOBAL_EVENT] if constants.OCEL_GLOBAL_EVENT in ocel.globals else constants.DEFAULT_GLOBAL_EVENT + global_object_items = ocel.globals[ + constants.OCEL_GLOBAL_OBJECT] if constants.OCEL_GLOBAL_OBJECT in ocel.globals else constants.DEFAULT_GLOBAL_OBJECT + rel_objs = related_objects.related_objects_dct_overall(ocel, parameters=parameters) + + ev_cols_dtypes = {x: get_type(str(ocel.events[x].dtype)) for x in ocel.events.columns} + ob_cols_dtypes = {x: get_type(str(ocel.objects[x].dtype)) for x in ocel.objects.columns} + + events_items, objects_items = clean_dataframes.get_dataframes_from_ocel(ocel, parameters=parameters) + + root = etree.Element("log") + + global_event = etree.SubElement(root, "global") + global_event.set("scope", "event") + for k, v in global_event_items.items(): + child = etree.SubElement(global_event, "string") + child.set("key", k) + child.set("value", v) + + global_object = etree.SubElement(root, "global") + global_object.set("scope", "object") + for k, v in global_object_items.items(): + child = etree.SubElement(global_object, "string") + child.set("key", k) + child.set("value", v) + + global_log = etree.SubElement(root, "global") + global_log.set("scope", "log") + attribute_names = etree.SubElement(global_log, "list") + attribute_names.set("key", "attribute-names") + object_types = etree.SubElement(global_log, "list") + object_types.set("key", "object-types") + + for k in all_attribute_names: + subel = etree.SubElement(attribute_names, "string") + subel.set("key", "attribute-name") + subel.set("value", k) + for k in all_object_types: + subel = etree.SubElement(object_types, "string") + subel.set("key", "object-type") + subel.set("value", k) + version = etree.SubElement(global_log, "string") + version.set("key", "version") + version.set("value", constants.CURRENT_VERSION) + ordering = etree.SubElement(global_log, "string") + ordering.set("key", "ordering") + ordering.set("value", constants.DEFAULT_ORDERING) + + events = etree.SubElement(root, "events") + objects = etree.SubElement(root, "objects") + + events_items = events_items.to_dict("records") + i = 0 + while i < len(events_items): + event = etree.SubElement(events, "event") + event_item = events_items[i] + eid = event_item[event_id] + event_item = {k: v for k, v in event_item.items() if pd.notnull(v)} + vmap = {k: v for k, v in event_item.items() if not k.startswith(constants.OCEL_PREFIX)} + event_item = {k: v for k, v in event_item.items() if k.startswith(constants.OCEL_PREFIX) and k != event_id} + event_omap_items = rel_objs[eid] + xml_event_id = etree.SubElement(event, "string") + xml_event_id.set("key", constants.OCEL_ID_KEY.split(constants.OCEL_PREFIX)[1]) + xml_event_id.set("value", str(eid)) + for k, v in event_item.items(): + typ = ev_cols_dtypes[k] + prop = etree.SubElement(event, typ) + prop.set("key", k.split(constants.OCEL_PREFIX)[1]) + prop.set("value", v) + event_omap = etree.SubElement(event, "list") + event_omap.set("key", "omap") + for kk in event_omap_items: + obj = etree.SubElement(event_omap, "string") + obj.set("key", "object-id") + obj.set("value", str(kk)) + event_vmap = etree.SubElement(event, "list") + event_vmap.set("key", "vmap") + for k, v in vmap.items(): + typ = ev_cols_dtypes[k] + attr = etree.SubElement(event_vmap, typ) + attr.set("key", k) + attr.set("value", str(v)) + i = i + 1 + del events_items + + objects_items = objects_items.to_dict("records") + i = 0 + while i < len(objects_items): + object = etree.SubElement(objects, "object") + object_item = objects_items[i] + oid = object_item[object_id] + xml_object_id = etree.SubElement(object, "string") + xml_object_id.set("key", constants.OCEL_ID_KEY.split(constants.OCEL_PREFIX)[1]) + xml_object_id.set("value", str(oid)) + xml_object_type = etree.SubElement(object, "string") + xml_object_type.set("key", object_type.split(constants.OCEL_PREFIX)[1]) + xml_object_type.set("value", object_item[object_type]) + xml_ovmap = etree.SubElement(object, "list") + xml_ovmap.set("key", constants.OCEL_OVMAP_KEY.split(constants.OCEL_PREFIX)[1]) + ovmap = {k: v for k, v in object_item.items() if pd.notnull(v) and not k.startswith(constants.OCEL_PREFIX)} + for k, v in ovmap.items(): + typ = ob_cols_dtypes[k] + attr = etree.SubElement(xml_ovmap, typ) + attr.set("key", k) + attr.set("value", str(v)) + i = i + 1 + del objects_items + + tree = etree.ElementTree(root) + + F = open(target_path, "wb") + tree.write(F, pretty_print=True, xml_declaration=True, encoding=encoding) + F.close() diff --git a/pm4py/pm4py/objects/ocel/exporter/xmlocel/variants/ocel20.py b/pm4py/pm4py/objects/ocel/exporter/xmlocel/variants/ocel20.py new file mode 100644 index 0000000000000000000000000000000000000000..dda1b26d869a381504c2dfc43cba2e3d3bc617e6 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/exporter/xmlocel/variants/ocel20.py @@ -0,0 +1,186 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +import pandas as pd +from lxml import etree + +from pm4py.objects.ocel import constants +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils, constants as pm4_constants +from pm4py.objects.ocel.util import ocel_consistency +from pm4py.objects.ocel.util import attributes_per_type + + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + EVENT_ACTIVITY = constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = constants.PARAM_EVENT_TIMESTAMP + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + QUALIFIER = constants.PARAM_QUALIFIER + CHANGED_FIELD = constants.PARAM_CHNGD_FIELD + ENCODING = "encoding" + + +RELOBJ_TAG = "relationship" + + +def apply(ocel: OCEL, target_path: str, parameters: Optional[Dict[Any, Any]] = None): + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, pm4_constants.DEFAULT_ENCODING) + event_id_column = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + event_activity_column = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, ocel.event_activity) + event_timestamp_column = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, ocel.event_timestamp) + object_id_column = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type_column = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + qualifier_column = exec_utils.get_param_value(Parameters.QUALIFIER, parameters, ocel.qualifier) + changed_field_column = exec_utils.get_param_value(Parameters.CHANGED_FIELD, parameters, ocel.changed_field) + + ocel = ocel_consistency.apply(ocel, parameters=parameters) + + objects0 = ocel.objects.to_dict("records") + events0 = ocel.events.to_dict("records") + object_changes0 = ocel.object_changes.to_dict("records") + o2o_dict = ocel.o2o.groupby(object_id_column).agg(list).to_dict("tight") + o2o_dict = {o2o_dict["index"][i]: o2o_dict["data"][i] for i in range(len(o2o_dict["index"]))} + + relations0 = ocel.relations.groupby(event_id_column)[[object_id_column, qualifier_column]].agg(list).to_dict() + relations0_obj_ids = relations0[object_id_column] + relations0_qualifiers = relations0[qualifier_column] + + objects0 = {x[object_id_column]: x for x in objects0} + events0 = {x[event_id_column]: x for x in events0} + object_changes1 = {} + object_changes2 = {} + object_changes3 = {} + + for objid, obj in objects0.items(): + obj = {x: y for x, y in obj.items() if not x.startswith("ocel:") and y is not None and not pd.isna(y)} + if len(obj) > 0: + object_changes2[objid] = {} + object_changes3[objid] = [] + for x, y in obj.items(): + object_changes2[objid][x] = [(y, "1970-01-01T00:00:00Z")] + object_changes3[objid].append((x, y, "1970-01-01T00:00:00Z")) + + for chng in object_changes0: + oid = chng[object_id_column] + if oid not in object_changes1: + object_changes1[oid] = {} + if oid not in object_changes2: + object_changes2[oid] = {} + if oid not in object_changes3: + object_changes3[oid] = [] + chng_time = chng[event_timestamp_column] + if chng_time not in object_changes1[oid]: + object_changes1[oid][chng_time] = [] + chng_field = chng[changed_field_column] + if chng_field not in object_changes2[oid]: + object_changes2[oid][chng_field] = [] + + chng_value = chng[chng_field] + object_changes1[oid][chng_time].append((chng_field, chng_value)) + object_changes2[oid][chng_field].append((chng_value, chng_time.isoformat())) + object_changes3[oid].append((chng_field, chng_value, chng_time.isoformat())) + + ets, ots = attributes_per_type.get(ocel, parameters=parameters) + + root = etree.Element("log") + object_types = etree.SubElement(root, "object-types") + for ot in ots: + object_type = etree.SubElement(object_types, "object-type") + object_type.set("name", str(ot)) + object_type_attributes = etree.SubElement(object_type, "attributes") + if len(ots[ot]) > 0: + for k, v in ots[ot].items(): + this_type = "string" + if "date" in v or "time" in v: + this_type = "date" + elif "float" in v or "double" in v: + this_type = "float" + object_type_attribute = etree.SubElement(object_type_attributes, "attribute") + object_type_attribute.set("name", k) + object_type_attribute.set("type", this_type) + + event_types = etree.SubElement(root, "event-types") + for et in ets: + event_type = etree.SubElement(event_types, "event-type") + event_type.set("name", str(et)) + event_type_attributes = etree.SubElement(event_type, "attributes") + if len(ets[et]) > 0: + for k, v in ets[et].items(): + this_type = "string" + if "date" in v or "time" in v: + this_type = "date" + elif "float" in v or "double" in v: + this_type = "float" + event_type_attribute = etree.SubElement(event_type_attributes, "attribute") + event_type_attribute.set("name", k) + event_type_attribute.set("type", this_type) + + objects = etree.SubElement(root, "objects") + for objid, obj in objects0.items(): + object = etree.SubElement(objects, "object") + object.set("id", str(objid)) + object.set("type", str(obj[object_type_column])) + + object_attributes = etree.SubElement(object, "attributes") + if objid in object_changes3: + for val in object_changes3[objid]: + object_attribute = etree.SubElement(object_attributes, "attribute") + object_attribute.set("name", val[0]) + object_attribute.set("time", val[2]) + object_attribute.text = str(val[1]) + + if objid in o2o_dict: + object_objects = etree.SubElement(object, "objects") + for i in range(len(o2o_dict[objid][0])): + object_object = etree.SubElement(object_objects, RELOBJ_TAG) + object_object.set("object-id", o2o_dict[objid][0][i]) + object_object.set("qualifier", o2o_dict[objid][1][i]) + + events = etree.SubElement(root, "events") + for evid, eve in events0.items(): + event = etree.SubElement(events, "event") + event.set("id", str(evid)) + event.set("type", str(eve[event_activity_column])) + event.set("time", eve[event_timestamp_column].isoformat()) + event_attributes = etree.SubElement(event, "attributes") + event_objects = etree.SubElement(event, "objects") + if evid in relations0_obj_ids: + this_ids = relations0_obj_ids[evid] + this_qualifiers = relations0_qualifiers[evid] + for i in range(len(this_ids)): + event_object = etree.SubElement(event_objects, RELOBJ_TAG) + event_object.set("object-id", str(this_ids[i])) + event_object.set("qualifier", str(this_qualifiers[i])) + eve = {x: y for x, y in eve.items() if not x.startswith("ocel:") and y is not None and not pd.isna(y)} + if len(eve) > 0: + for k, v in eve.items(): + event_attribute = etree.SubElement(event_attributes, "attribute") + event_attribute.set("name", k) + event_attribute.text = str(v) + + tree = etree.ElementTree(root) + + F = open(target_path, "wb") + tree.write(F, pretty_print=True, xml_declaration=True, encoding=encoding) + F.close() diff --git a/pm4py/pm4py/objects/ocel/importer/__init__.py b/pm4py/pm4py/objects/ocel/importer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0f5736e668135e2b6584e9aa27c0996e407661f8 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/__init__.py @@ -0,0 +1,21 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.importer import csv, jsonocel +import importlib.util + +if importlib.util.find_spec("lxml"): + from pm4py.objects.ocel.importer import xmlocel diff --git a/pm4py/pm4py/objects/ocel/importer/csv/__init__.py b/pm4py/pm4py/objects/ocel/importer/csv/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3d66988f31ae49965b8c7d207e6aa8aa09c67135 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/csv/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.importer.csv import variants, importer diff --git a/pm4py/pm4py/objects/ocel/importer/csv/importer.py b/pm4py/pm4py/objects/ocel/importer/csv/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..2cf4b4e031c7ea20f6451cf356a3d68278db6ddb --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/csv/importer.py @@ -0,0 +1,51 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.objects.ocel.importer.csv.variants import pandas +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils + + +class Variants(Enum): + PANDAS = pandas + + +def apply(file_path: str, objects_path: str = None, variant=Variants.PANDAS, + parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an object-centric event log from a CSV file + + Parameters + ----------------- + file_path + Path to the object-centric event log + objects_path + Optional path to a CSV file containing the objects dataframe + variant + Variant of the algorithm that should be used, possible values: + - Variants.PANDAS + parameters + Parameters of the algorithm + + Returns + ------------------ + ocel + Object-centric event log + """ + return exec_utils.get_variant(variant).apply(file_path, objects_path, parameters) diff --git a/pm4py/pm4py/objects/ocel/importer/csv/variants/__init__.py b/pm4py/pm4py/objects/ocel/importer/csv/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0132ee7c1780cb5ad9f012f57cd116422818d68d --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/csv/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.importer.csv.variants import pandas diff --git a/pm4py/pm4py/objects/ocel/importer/csv/variants/pandas.py b/pm4py/pm4py/objects/ocel/importer/csv/variants/pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..df35f5c206172c8152802960d3b5f8ffe371997a --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/csv/variants/pandas.py @@ -0,0 +1,63 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any + +import pandas as pd + +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.ocel.util import extended_table +from pm4py.objects.ocel.util import ocel_consistency +from enum import Enum +from pm4py.util import exec_utils, constants as pm4_constants, pandas_utils + + +class Parameters(Enum): + ENCODING = "encoding" + + +def apply(file_path: str, objects_path: str = None, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an object-centric event log from a CSV file, using Pandas as backend + + Parameters + ----------------- + file_path + Path to the object-centric event log + objects_path + Optional path to a CSV file containing the objects dataframe + parameters + Parameters of the algorithm + + Returns + ------------------ + ocel + Object-centric event log + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, pm4_constants.DEFAULT_ENCODING) + table = pandas_utils.read_csv(file_path, index_col=False, encoding=encoding) + + objects = None + if objects_path is not None: + objects = pandas_utils.read_csv(objects_path, index_col=False, encoding=encoding) + + ocel = extended_table.get_ocel_from_extended_table(table, objects, parameters=parameters) + ocel = ocel_consistency.apply(ocel, parameters=parameters) + + return ocel diff --git a/pm4py/pm4py/objects/ocel/importer/jsonocel/__init__.py b/pm4py/pm4py/objects/ocel/importer/jsonocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9493395da58d00c1c7697358482b05a6e357eaa7 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/jsonocel/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.importer.jsonocel import importer, variants diff --git a/pm4py/pm4py/objects/ocel/importer/jsonocel/importer.py b/pm4py/pm4py/objects/ocel/importer/jsonocel/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..884d5aa03823d098aa6e7626850fde17f5710db4 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/jsonocel/importer.py @@ -0,0 +1,50 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.objects.ocel.importer.jsonocel.variants import classic, ocel20_standard, ocel20_rustxes +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils + + +class Variants(Enum): + CLASSIC = classic + OCEL20_STANDARD = ocel20_standard + OCEL20_RUSTXES = ocel20_rustxes + + +def apply(file_path: str, variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an object-centric event log from a JSON-OCEL file + + Parameters + ----------------- + file_path + Path to the JSON-OCEL file + variant + Variant of the algorithm to use, possible values: + - Variants.CLASSIC + parameters + Variant-specific parameters + + Returns + ------------------ + ocel + Object-centric event log + """ + return exec_utils.get_variant(variant).apply(file_path, parameters) diff --git a/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/__init__.py b/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a7a3d9d1ff79edb4f5b9fcfc9b314d68a8c7df46 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.importer.jsonocel.variants import classic, ocel20_standard diff --git a/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/classic.py b/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..bc33981719aba36cd79a383db0d36daaa2db0554 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/classic.py @@ -0,0 +1,166 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import json +from enum import Enum +from typing import Optional, Dict, Any + +import pandas as pd + +from pm4py.objects.ocel import constants +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.ocel.util import filtering_utils +from pm4py.objects.ocel.util import ocel_consistency +from pm4py.util import exec_utils, dt_parsing, constants as pm4_constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils + + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + EVENT_ACTIVITY = constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = constants.PARAM_EVENT_TIMESTAMP + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + INTERNAL_INDEX = constants.PARAM_INTERNAL_INDEX + ENCODING = "encoding" + + +def get_base_ocel(json_obj: Any, parameters: Optional[Dict[Any, Any]] = None): + events = [] + relations = [] + objects = [] + o2o = [] + object_changes = [] + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, constants.DEFAULT_EVENT_ID) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, constants.DEFAULT_EVENT_ACTIVITY) + event_timestamp = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, + constants.DEFAULT_EVENT_TIMESTAMP) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, constants.DEFAULT_OBJECT_ID) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, constants.DEFAULT_OBJECT_TYPE) + internal_index = exec_utils.get_param_value(Parameters.INTERNAL_INDEX, parameters, constants.DEFAULT_INTERNAL_INDEX) + + parser = dt_parsing.parser.get() + + types_dict = {} + for obj_id in json_obj[constants.OCEL_OBJECTS_KEY]: + obj = json_obj[constants.OCEL_OBJECTS_KEY][obj_id] + obj_type = obj[object_type] + types_dict[obj_id] = obj_type + dct = {object_id: obj_id, object_type: obj_type} + for k, v in obj[constants.OCEL_OVMAP_KEY].items(): + dct[k] = v + if constants.OCEL_O2O_KEY in obj: + this_rel_objs = obj[constants.OCEL_O2O_KEY] + for newel in this_rel_objs: + target_id = newel[object_id] + qualifier = newel[constants.DEFAULT_QUALIFIER] + o2o.append({object_id: obj_id, object_id+"_2": target_id, constants.DEFAULT_QUALIFIER: qualifier}) + objects.append(dct) + + for ev_id in json_obj[constants.OCEL_EVENTS_KEY]: + ev = json_obj[constants.OCEL_EVENTS_KEY][ev_id] + dct = {event_id: ev_id, event_timestamp: parser.apply(ev[event_timestamp]), + event_activity: ev[event_activity]} + for k, v in ev[constants.OCEL_VMAP_KEY].items(): + dct[k] = v + this_rel = {} + for obj in ev[constants.OCEL_OMAP_KEY]: + if obj in types_dict: + this_rel[obj] = {event_id: ev_id, event_activity: ev[event_activity], + event_timestamp: parser.apply(ev[event_timestamp]), object_id: obj, + object_type: types_dict[obj]} + if constants.OCEL_TYPED_OMAP_KEY in ev: + for element in ev[constants.OCEL_TYPED_OMAP_KEY]: + if object_id in element: + key1 = element[object_id] + if key1 in this_rel: + this_rel[key1][constants.DEFAULT_QUALIFIER] = element[constants.DEFAULT_QUALIFIER] + for obj in this_rel: + relations.append(this_rel[obj]) + events.append(dct) + + if constants.OCEL_OBJCHANGES_KEY in json_obj: + object_changes = json_obj[constants.OCEL_OBJCHANGES_KEY] + + events = pandas_utils.instantiate_dataframe(events) + objects = pandas_utils.instantiate_dataframe(objects) + relations = pandas_utils.instantiate_dataframe(relations) + + events = pandas_utils.insert_index(events, internal_index, reset_index=False, copy_dataframe=False) + relations = pandas_utils.insert_index(relations, internal_index, reset_index=False, copy_dataframe=False) + + events = events.sort_values([event_timestamp, internal_index]) + relations = relations.sort_values([event_timestamp, internal_index]) + + del events[internal_index] + del relations[internal_index] + + globals = {} + globals[constants.OCEL_GLOBAL_LOG] = json_obj[constants.OCEL_GLOBAL_LOG] + globals[constants.OCEL_GLOBAL_EVENT] = json_obj[constants.OCEL_GLOBAL_EVENT] + globals[constants.OCEL_GLOBAL_OBJECT] = json_obj[constants.OCEL_GLOBAL_OBJECT] + + o2o = pandas_utils.instantiate_dataframe(o2o) if o2o else None + object_changes = pandas_utils.instantiate_dataframe(object_changes) if object_changes else None + if object_changes is not None and len(object_changes) > 0: + object_changes = dataframe_utils.convert_timestamp_columns_in_df(object_changes, timest_format=pm4_constants.DEFAULT_XES_TIMESTAMP_PARSE_FORMAT, timest_columns=[event_timestamp]) + obj_id_map = objects[[object_id, object_type]].to_dict("records") + obj_id_map = {x[object_id]: x[object_type] for x in obj_id_map} + object_changes[object_type] = object_changes[object_id].map(obj_id_map) + + log = OCEL(events=events, objects=objects, relations=relations, o2o=o2o, object_changes=object_changes, globals=globals, parameters=parameters) + + return log + + +def apply(file_path: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an object-centric event log from a JSON-OCEL file, using the default JSON backend of Python + + Parameters + ----------------- + file_path + Path to the JSON-OCEL file + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID + - Parameters.EVENT_ACTIVITY + - Parameters.EVENT_TIMESTAMP + - Parameters.OBJECT_ID + - Parameters.OBJECT_TYPE + - Parameters.INTERNAL_INDEX + + Returns + ------------------ + ocel + Object-centric event log + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, pm4_constants.DEFAULT_ENCODING) + + F = open(file_path, "r", encoding=encoding) + json_obj = json.load(F) + F.close() + + log = get_base_ocel(json_obj, parameters=parameters) + + log = ocel_consistency.apply(log, parameters=parameters) + log = filtering_utils.propagate_relations_filtering(log, parameters=parameters) + + return log diff --git a/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/ocel20_rustxes.py b/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/ocel20_rustxes.py new file mode 100644 index 0000000000000000000000000000000000000000..f1af4f4dfcef6c2872dd124c04b5c7d5312cc12c --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/ocel20_rustxes.py @@ -0,0 +1,42 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any +from pm4py.objects.ocel.obj import OCEL + + +def apply(file_path: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an OCEL 2.0 JSON using the RUSTXES parser. + + Parameters + --------------- + file_path + Path to the OCEL 2.0 JSON + parameters + Optional parameters. + + Returns + --------------- + ocel + Object-centric event log + """ + if parameters is None: + parameters = {} + + import rustxes + + return rustxes.import_ocel_json_pm4py(file_path) diff --git a/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/ocel20_standard.py b/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/ocel20_standard.py new file mode 100644 index 0000000000000000000000000000000000000000..cd705b2b1b4595a7ce61739f3a6cc4e9d4a036c6 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/jsonocel/variants/ocel20_standard.py @@ -0,0 +1,100 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.objects.ocel.util import filtering_utils +from pm4py.objects.ocel.util import ocel_consistency +from pm4py.objects.ocel.importer.jsonocel.variants import classic +from pm4py.util import constants as pm4_constants +from enum import Enum +import json + + +class Parameters(Enum): + ENCODING = "encoding" + + +def apply(file_path: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an OCEL from a JSON-OCEL 2 standard file + + Parameters + -------------- + file_path + Path to the object-centric event log + parameters + Possible parameters of the method, including: + - Parameters.ENCODING + + Returns + ------------- + ocel + Object-centric event log + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, pm4_constants.DEFAULT_ENCODING) + + F = open(file_path, "r", encoding=encoding) + json_obj = json.load(F) + F.close() + + legacy_obj = {} + legacy_obj["ocel:events"] = {} + legacy_obj["ocel:objects"] = {} + legacy_obj["ocel:objectChanges"] = [] + + for eve in json_obj["events"]: + dct = {} + dct["ocel:activity"] = eve["type"] + dct["ocel:timestamp"] = eve["time"] + dct["ocel:vmap"] = {} + if "attributes" in eve and eve["attributes"]: + dct["ocel:vmap"] = {x["name"]: x["value"] for x in eve["attributes"]} + dct["ocel:typedOmap"] = [] + if "relationships" in eve and eve["relationships"]: + dct["ocel:typedOmap"] = [{"ocel:oid": x["objectId"], "ocel:qualifier": x["qualifier"]} for x in eve["relationships"]] + dct["ocel:omap"] = list(set(x["ocel:oid"] for x in dct["ocel:typedOmap"])) + legacy_obj["ocel:events"][eve["id"]] = dct + + for obj in json_obj["objects"]: + dct = {} + dct["ocel:type"] = obj["type"] + dct["ocel:ovmap"] = {} + if "attributes" in obj and obj["attributes"]: + for x in obj["attributes"]: + if x["name"] in dct["ocel:ovmap"]: + legacy_obj["ocel:objectChanges"].append({"ocel:oid": obj["id"], "ocel:type": obj["type"], "ocel:field": x["name"], x["name"]: x["value"], "ocel:timestamp": x["time"]}) + else: + dct["ocel:ovmap"][x["name"]] = x["value"] + dct["ocel:o2o"] = [] + if "relationships" in obj and obj["relationships"]: + dct["ocel:o2o"] = [{"ocel:oid": x["objectId"], "ocel:qualifier": x["qualifier"]} for x in obj["relationships"]] + legacy_obj["ocel:objects"][obj["id"]] = dct + + legacy_obj["ocel:global-log"] = {} + legacy_obj["ocel:global-event"] = {} + legacy_obj["ocel:global-object"] = {} + + log = classic.get_base_ocel(legacy_obj, parameters=parameters) + + log = ocel_consistency.apply(log, parameters=parameters) + log = filtering_utils.propagate_relations_filtering(log, parameters=parameters) + + return log diff --git a/pm4py/pm4py/objects/ocel/importer/sqlite/__init__.py b/pm4py/pm4py/objects/ocel/importer/sqlite/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..874c8c1650e99c371a368fb571123a465d45b858 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/sqlite/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.importer.sqlite import variants, importer diff --git a/pm4py/pm4py/objects/ocel/importer/sqlite/importer.py b/pm4py/pm4py/objects/ocel/importer/sqlite/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..8c4c37591851da31b2fc84aa315b90ad0eb87462 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/sqlite/importer.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Dict, Any +from enum import Enum +from typing import Optional +from pm4py.objects.ocel.importer.sqlite.variants import pandas_importer, ocel20 +from pm4py.util import exec_utils + + +class Variants(Enum): + PANDAS_IMPORTER = pandas_importer + OCEL20 = ocel20 + + +def apply(file_path: str, variant=Variants.PANDAS_IMPORTER, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an OCEL from a SQLite database + + Parameters + -------------- + file_path + Path to the SQLite database + variant + Variant of the importer to use: + - Variants.PANDAS_IMPORTER => Pandas + parameters + Variant-specific parameters + + Returns + -------------- + ocel + Object-centric event log + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(file_path, parameters=parameters) diff --git a/pm4py/pm4py/objects/ocel/importer/sqlite/variants/__init__.py b/pm4py/pm4py/objects/ocel/importer/sqlite/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5a9512f36a8f97db192b765dea44ec1ae7d987d0 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/sqlite/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.importer.sqlite.variants import pandas_importer diff --git a/pm4py/pm4py/objects/ocel/importer/sqlite/variants/ocel20.py b/pm4py/pm4py/objects/ocel/importer/sqlite/variants/ocel20.py new file mode 100644 index 0000000000000000000000000000000000000000..ad84a3a340076c9f4a86719f860243b3f8901228 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/sqlite/variants/ocel20.py @@ -0,0 +1,172 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.objects.ocel import constants +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils, pandas_utils +import pandas as pd +from pm4py.objects.ocel.util import ocel_consistency +from pm4py.objects.ocel.util import filtering_utils +from pm4py.objects.ocel.validation import ocel20_rel_validation +from pm4py.util import constants as pm4_constants +from pm4py.objects.log.util import dataframe_utils +import warnings + + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + EVENT_ACTIVITY = constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = constants.PARAM_EVENT_TIMESTAMP + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + INTERNAL_INDEX = constants.PARAM_INTERNAL_INDEX + QUALIFIER = constants.PARAM_QUALIFIER + CHANGED_FIELD = constants.PARAM_CHNGD_FIELD + CUMCOUNT = "cumcount" + VALIDATION = "validation" + EXCEPT_IF_INVALID = "except_if_invalid" + + +def apply(file_path: str, parameters: Optional[Dict[Any, Any]] = None): + if parameters is None: + parameters = {} + + import sqlite3 + + validation = exec_utils.get_param_value(Parameters.VALIDATION, parameters, True) + except_if_invalid = exec_utils.get_param_value(Parameters.EXCEPT_IF_INVALID, parameters, False) + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, constants.DEFAULT_EVENT_ID) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, constants.DEFAULT_EVENT_ACTIVITY) + event_timestamp = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, + constants.DEFAULT_EVENT_TIMESTAMP) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, constants.DEFAULT_OBJECT_ID) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, constants.DEFAULT_OBJECT_TYPE) + internal_index = exec_utils.get_param_value(Parameters.INTERNAL_INDEX, parameters, constants.DEFAULT_INTERNAL_INDEX) + qualifier_field = exec_utils.get_param_value(Parameters.QUALIFIER, parameters, constants.DEFAULT_QUALIFIER) + changed_field = exec_utils.get_param_value(Parameters.CHANGED_FIELD, parameters, constants.DEFAULT_CHNGD_FIELD) + cumcount_field = exec_utils.get_param_value(Parameters.CUMCOUNT, parameters, "@@cumcount") + + if validation: + satisfied, unsatisfied = ocel20_rel_validation.apply(file_path) + if unsatisfied: + if pm4_constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("There are unsatisfied OCEL 2.0 constraints in the given relational database: "+str(unsatisfied)) + + if except_if_invalid: + raise Exception("OCEL 2.0 validation failed.") + + conn = sqlite3.connect(file_path) + + EVENTS = pd.read_sql("SELECT * FROM event", conn) + OBJECTS = pd.read_sql("SELECT * FROM object", conn) + + etypes = sorted(pandas_utils.format_unique(EVENTS["ocel_type"].unique())) + otypes = sorted(pandas_utils.format_unique(OBJECTS["ocel_type"].unique())) + + EVENTS = EVENTS.to_dict("records") + OBJECTS = OBJECTS.to_dict("records") + events_id_type = {x["ocel_id"]: x["ocel_type"] for x in EVENTS} + objects_id_type = {x["ocel_id"]: x["ocel_type"] for x in OBJECTS} + + EVENT_CORR_TYPE = pd.read_sql("SELECT * FROM event_map_type", conn) + OBJECT_CORR_TYPE = pd.read_sql("SELECT * FROM object_map_type", conn) + EVENT_CORR_TYPE = EVENT_CORR_TYPE.to_dict("records") + OBJECT_CORR_TYPE = OBJECT_CORR_TYPE.to_dict("records") + + events_type_map = {x["ocel_type"]: x["ocel_type_map"] for x in EVENT_CORR_TYPE} + objects_type_map = {x["ocel_type"]: x["ocel_type_map"] for x in OBJECT_CORR_TYPE} + + event_types_coll = [] + object_types_coll = [] + + for act in etypes: + act_red = events_type_map[act] + df = pd.read_sql("SELECT * FROM event_"+act_red, conn) + df = df.rename(columns={"ocel_id": event_id, "ocel_time": event_timestamp}) + event_types_coll.append(df) + + for ot in otypes: + ot_red = objects_type_map[ot] + df = pd.read_sql("SELECT * FROM object_"+ot_red, conn) + df = df.rename(columns={"ocel_id": object_id, "ocel_time": event_timestamp}) + object_types_coll.append(df) + + event_types_coll = pandas_utils.concat(event_types_coll) + event_types_coll[event_activity] = event_types_coll[event_id].map(events_id_type) + event_types_coll = dataframe_utils.convert_timestamp_columns_in_df(event_types_coll, timest_format=pm4_constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=[event_timestamp]) + object_types_coll = pandas_utils.concat(object_types_coll) + object_types_coll[object_type] = object_types_coll[object_id].map(objects_id_type) + object_types_coll = object_types_coll.rename(columns={"ocel_changed_field": changed_field}) + + events_timestamp = event_types_coll[[event_id, event_timestamp]].to_dict('records') + events_timestamp = {x[event_id]: x[event_timestamp] for x in events_timestamp} + object_types_coll[cumcount_field] = object_types_coll.groupby(object_id).cumcount() + + if changed_field in object_types_coll: + objects = object_types_coll[object_types_coll[changed_field].isna()] + object_changes = object_types_coll[~object_types_coll[changed_field].isna()] + if len(objects) == 0: + objects = object_types_coll[object_types_coll[cumcount_field] == 0] + object_changes = object_types_coll[object_types_coll[cumcount_field] > 0] + if len(object_changes) == 0: + object_changes = None + del objects[changed_field] + else: + objects = object_types_coll + object_changes = None + + del objects[event_timestamp] + del objects[cumcount_field] + + E2O = pd.read_sql("SELECT * FROM event_object", conn) + E2O = E2O.rename(columns={"ocel_event_id": event_id, "ocel_object_id": object_id, "ocel_qualifier": qualifier_field}) + E2O[event_activity] = E2O[event_id].map(events_id_type) + E2O[event_timestamp] = E2O[event_id].map(events_timestamp) + E2O[object_type] = E2O[object_id].map(objects_id_type) + + O2O = pd.read_sql("SELECT * FROM object_object", conn) + O2O = O2O.rename(columns={"ocel_source_id": object_id, "ocel_target_id": object_id+"_2", "ocel_qualifier": qualifier_field}) + if len(O2O) == 0: + O2O = None + + conn.close() + + event_types_coll[internal_index] = event_types_coll.index + E2O[internal_index] = E2O.index + + event_types_coll = event_types_coll.sort_values([event_timestamp, internal_index]) + E2O = E2O.sort_values([event_timestamp, internal_index]) + + del event_types_coll[internal_index] + del E2O[internal_index] + + if object_changes is not None: + object_changes = dataframe_utils.convert_timestamp_columns_in_df(object_changes, + timest_format=pm4_constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, + timest_columns=[event_timestamp]) + object_changes[internal_index] = object_changes.index + object_changes = object_changes.sort_values([event_timestamp, internal_index]) + del object_changes[internal_index] + + ocel = OCEL(events=event_types_coll, objects=objects, relations=E2O, object_changes=object_changes, o2o=O2O, parameters=parameters) + ocel = ocel_consistency.apply(ocel, parameters=parameters) + ocel = filtering_utils.propagate_relations_filtering(ocel, parameters=parameters) + + return ocel diff --git a/pm4py/pm4py/objects/ocel/importer/sqlite/variants/pandas_importer.py b/pm4py/pm4py/objects/ocel/importer/sqlite/variants/pandas_importer.py new file mode 100644 index 0000000000000000000000000000000000000000..ece206abb013e246bfdca764e85114cef3cbd952 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/sqlite/variants/pandas_importer.py @@ -0,0 +1,66 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Dict, Any, Optional +import pandas as pd +from pm4py.objects.ocel.util import ocel_consistency +from pm4py.objects.ocel.util import filtering_utils +from pm4py.objects.log.util import dataframe_utils +from pm4py.util import pandas_utils, constants as pm4_constants + + +def apply(file_path: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an OCEL from a SQLite database using Pandas + + Parameters + -------------- + file_path + Path to the SQLite database + parameters + Parameters of the import + + Returns + -------------- + ocel + Object-centric event log + """ + if parameters is None: + parameters = {} + + import sqlite3 + + conn = sqlite3.connect(file_path) + + events = pd.read_sql("SELECT * FROM EVENTS", conn) + objects = pd.read_sql("SELECT * FROM OBJECTS", conn) + relations = pd.read_sql("SELECT * FROM RELATIONS", conn) + + events = dataframe_utils.convert_timestamp_columns_in_df(events, + timest_format=pm4_constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, + timest_columns=["ocel:timestamp"]) + + relations = dataframe_utils.convert_timestamp_columns_in_df(relations, + timest_format=pm4_constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, + timest_columns=["ocel:timestamp"]) + + ocel = OCEL(events=events, objects=objects, relations=relations, parameters=parameters) + ocel = ocel_consistency.apply(ocel, parameters=parameters) + ocel = filtering_utils.propagate_relations_filtering(ocel, parameters=parameters) + + return ocel diff --git a/pm4py/pm4py/objects/ocel/importer/xmlocel/__init__.py b/pm4py/pm4py/objects/ocel/importer/xmlocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..36da190fe0531a8480ee497c116f7c4782418887 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/xmlocel/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.importer.xmlocel import importer, variants diff --git a/pm4py/pm4py/objects/ocel/importer/xmlocel/importer.py b/pm4py/pm4py/objects/ocel/importer/xmlocel/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..5c0aeb35970ebc712ff36b718f7b9ec4cb495f34 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/xmlocel/importer.py @@ -0,0 +1,50 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.objects.ocel.importer.xmlocel.variants import classic, ocel20, ocel20_rustxes +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils + + +class Variants(Enum): + CLASSIC = classic + OCEL20 = ocel20 + OCEL20_RUSTXES = ocel20_rustxes + + +def apply(file_path: str, variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an object-centric event log from a XML-OCEL file + + Parameters + ----------------- + file_path + Path to the XML-OCEL file + variant + Variant of the algorithm to use, possible values: + - Variants.CLASSIC + parameters + Variant-specific parameters + + Returns + ------------------ + ocel + Object-centric event log + """ + return exec_utils.get_variant(variant).apply(file_path, parameters) diff --git a/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/__init__.py b/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..53dbef7872bb82c723b8659a2dd11c0de8a8d340 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.importer.xmlocel.variants import classic diff --git a/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/classic.py b/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..08fd9aa49576c69e10d2a85da5bd7d036d5c3366 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/classic.py @@ -0,0 +1,200 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +import pandas as pd +from lxml import etree, objectify + +from pm4py.objects.ocel import constants +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.ocel.util import filtering_utils +from pm4py.util import exec_utils, dt_parsing, pandas_utils +from pm4py.objects.ocel.util import ocel_consistency + + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + EVENT_ACTIVITY = constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = constants.PARAM_EVENT_TIMESTAMP + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + INTERNAL_INDEX = constants.PARAM_INTERNAL_INDEX + QUALIFIER = constants.PARAM_QUALIFIER + CHANGED_FIELD = constants.PARAM_CHNGD_FIELD + ENCODING = "encoding" + + +def parse_xml(value, tag_str_lower, parser): + if "float" in tag_str_lower: + return float(value) + elif "date" in tag_str_lower: + return parser.apply(value) + return str(value) + + +def apply(file_path: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an object-centric event log from a XNK-OCEL file, using LXML + + Parameters + ----------------- + file_path + Path to the XML-OCEL file + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID + - Parameters.EVENT_ACTIVITY + - Parameters.EVENT_TIMESTAMP + - Parameters.OBJECT_ID + - Parameters.OBJECT_TYPE + - Parameters.INTERNAL_INDEX + + Returns + ------------------ + ocel + Object-centric event log + """ + if parameters is None: + parameters = {} + + events = [] + relations = [] + objects = [] + object_changes = [] + o2o = [] + obj_type_dict = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, None) + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, constants.DEFAULT_EVENT_ID) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, constants.DEFAULT_EVENT_ACTIVITY) + event_timestamp = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, + constants.DEFAULT_EVENT_TIMESTAMP) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, constants.DEFAULT_OBJECT_ID) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, constants.DEFAULT_OBJECT_TYPE) + internal_index = exec_utils.get_param_value(Parameters.INTERNAL_INDEX, parameters, constants.DEFAULT_INTERNAL_INDEX) + qualifier_field = exec_utils.get_param_value(Parameters.QUALIFIER, parameters, constants.DEFAULT_QUALIFIER) + changed_field = exec_utils.get_param_value(Parameters.CHANGED_FIELD, parameters, constants.DEFAULT_CHNGD_FIELD) + + date_parser = dt_parsing.parser.get() + + parser = etree.XMLParser(remove_comments=True, encoding=encoding) + + F = open(file_path, "rb") + tree = objectify.parse(F, parser=parser) + F.close() + + root = tree.getroot() + + for child in root: + if child.tag.lower().endswith("events"): + for event in child: + eve_id = None + eve_activity = None + eve_timestamp = None + eve_omap = {} + eve_vmap = {} + for child2 in event: + if child2.get("key") == "id": + eve_id = child2.get("value") + elif child2.get("key") == "timestamp": + eve_timestamp = parse_xml(child2.get("value"), child2.tag.lower(), date_parser) + elif child2.get("key") == "activity": + eve_activity = child2.get("value") + elif child2.get("key") == "omap": + for child3 in child2: + objref = child3.get("value") + qualifier = child3.get("qualifier") if "qualifier" in child3.keys() else None + eve_omap[objref] = qualifier + elif child2.get("key") == "vmap": + for child3 in child2: + key = child3.get("key") + value = parse_xml(child3.get("value"), child3.tag.lower(), + date_parser) + eve_vmap[key] = value + + event_dict = {event_id: eve_id, event_activity: eve_activity, event_timestamp: eve_timestamp} + for k, v in eve_vmap.items(): + event_dict[k] = v + events.append(event_dict) + + for obj in eve_omap: + rel_dict = {event_id: eve_id, event_activity: eve_activity, event_timestamp: eve_timestamp, + object_id: obj, qualifier_field: eve_omap[obj]} + relations.append(rel_dict) + elif child.tag.lower().endswith("objects"): + for object in child: + obj_id = None + obj_type = None + obj_ovmap = [] + for child2 in object: + if child2.get("key") == "id": + obj_id = child2.get("value") + elif child2.get("key") == "type": + obj_type = child2.get("value") + elif child2.get("key") == "ovmap": + for child3 in child2: + key = child3.get("key") + value = parse_xml(child3.get("value"), child3.tag.lower(), + date_parser) + timestamp = child3.get("timestamp") if "timestamp" in child3.keys() else None + obj_ovmap.append((key, value, timestamp)) + dct = {object_id: obj_id, object_type: obj_type} + for el in obj_ovmap: + if el[0] not in dct: + dct[el[0]] = el[1] + else: + this_dct = {object_id: obj_id, object_type: obj_type} + this_dct[el[0]] = el[1] + this_dct[event_timestamp] = date_parser.apply(el[2]) + this_dct[changed_field] = el[0] + object_changes.append(this_dct) + objects.append(dct) + obj_type_dict[obj_id] = obj_type + elif child.tag.lower().endswith("o2o"): + for rel in child: + source = rel.get("source") + target = rel.get("target") + qualifier = rel.get("qualifier") + o2o.append({object_id: source, object_id+"_2": target, qualifier_field: qualifier}) + + for rel in relations: + rel[object_type] = obj_type_dict[rel[object_id]] + + events = pandas_utils.instantiate_dataframe(events) if events else None + objects = pandas_utils.instantiate_dataframe(objects) if objects else None + relations = pandas_utils.instantiate_dataframe(relations) if relations else None + o2o = pandas_utils.instantiate_dataframe(o2o) if o2o else None + object_changes = pandas_utils.instantiate_dataframe(object_changes) if object_changes else None + + events = pandas_utils.insert_index(events, internal_index, reset_index=False, copy_dataframe=False) + relations = pandas_utils.insert_index(relations, internal_index, reset_index=False, copy_dataframe=False) + + events = events.sort_values([event_timestamp, internal_index]) + relations = relations.sort_values([event_timestamp, internal_index]) + + del events[internal_index] + del relations[internal_index] + + globals = {} + + ocel = OCEL(events=events, objects=objects, relations=relations, globals=globals, o2o=o2o, object_changes=object_changes, parameters=parameters) + ocel = ocel_consistency.apply(ocel, parameters=parameters) + ocel = filtering_utils.propagate_relations_filtering(ocel) + + return ocel diff --git a/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/ocel20.py b/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/ocel20.py new file mode 100644 index 0000000000000000000000000000000000000000..69208d1bb46b6e696200427464ee0a7f196dd993 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/ocel20.py @@ -0,0 +1,208 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +import pandas as pd +from lxml import etree, objectify + +from pm4py.objects.ocel import constants +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.ocel.util import filtering_utils +from pm4py.util import exec_utils, dt_parsing, pandas_utils +from pm4py.objects.ocel.util import ocel_consistency + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + EVENT_ACTIVITY = constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = constants.PARAM_EVENT_TIMESTAMP + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + INTERNAL_INDEX = constants.PARAM_INTERNAL_INDEX + QUALIFIER = constants.PARAM_QUALIFIER + CHANGED_FIELD = constants.PARAM_CHNGD_FIELD + ENCODING = "encoding" + + +def parse_xml(value, tag_str_lower, parser): + if "float" in tag_str_lower: + if value == "null": + return 0 + return float(value) + elif "date" in tag_str_lower: + return embed_date_parser(parser.apply, value) + return str(value) + + +def embed_date_parser(date_parser, x): + try: + return date_parser(x) + except: + from dateutil.parser import parse + try: + return parse(x) + except: + return parse(x, fuzzy=True) + + +def apply(file_path: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + if parameters is None: + parameters = {} + + events_list = [] + relations_list = [] + objects_list = [] + object_changes_list = [] + o2o_list = [] + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, None) + + event_id_column = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, constants.DEFAULT_EVENT_ID) + event_activity_column = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, constants.DEFAULT_EVENT_ACTIVITY) + event_timestamp_column = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, + constants.DEFAULT_EVENT_TIMESTAMP) + object_id_column = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, constants.DEFAULT_OBJECT_ID) + object_type_column = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, constants.DEFAULT_OBJECT_TYPE) + internal_index_column = exec_utils.get_param_value(Parameters.INTERNAL_INDEX, parameters, constants.DEFAULT_INTERNAL_INDEX) + qualifier_field = exec_utils.get_param_value(Parameters.QUALIFIER, parameters, constants.DEFAULT_QUALIFIER) + changed_field = exec_utils.get_param_value(Parameters.CHANGED_FIELD, parameters, constants.DEFAULT_CHNGD_FIELD) + obj_type_dict = {} + + date_parser = dt_parsing.parser.get() + + parser = etree.XMLParser(remove_comments=True, encoding=encoding) + + F = open(file_path, "rb") + tree = objectify.parse(F, parser=parser) + F.close() + + root = tree.getroot() + + object_type_attributes = {} + event_type_attributes = {} + + for child in root: + if child.tag.endswith("object-types"): + for object_type in child: + object_type_name = object_type.get("name") + object_type_attributes[object_type_name] = {} + for attributes in object_type: + for attribute in attributes: + attribute_name = attribute.get("name") + attribute_type = attribute.get("type") + object_type_attributes[object_type_name][attribute_name] = attribute_type + elif child.tag.endswith("event-types"): + for event_type in child: + event_type_name = event_type.get("name") + event_type_attributes[event_type_name] = {} + for attributes in event_type: + for attribute in attributes: + attribute_name = attribute.get("name") + attribute_type = attribute.get("type") + event_type_attributes[event_type_name][attribute_name] = attribute_type + elif child.tag.endswith("objects"): + object_id = None + object_type = None + + for object in child: + object_id = object.get("id") + object_type = object.get("type") + + obj_dict = {object_id_column: object_id, object_type_column: object_type} + obj_type_dict[object_id] = object_type + + for child2 in object: + if child2.tag.endswith("objects"): + for target_object in child2: + target_object_id = target_object.get("object-id") + qualifier = target_object.get("qualifier") + + o2o_dict = {object_id_column: object_id, object_id_column+"_2": target_object_id, qualifier_field: qualifier} + o2o_list.append(o2o_dict) + + elif child2.tag.endswith("attributes"): + for attribute in child2: + attribute_name = attribute.get("name") + attribute_time = attribute.get("time") + try: + attribute_type = object_type_attributes[object_type][attribute_name] + except: + attribute_type = "string" + attribute_text = parse_xml(attribute.text, attribute_type, date_parser) + if attribute_time == "0" or attribute_time.startswith("1970-01-01T00:00:00"): + obj_dict[attribute_name] = attribute_text + else: + attribute_time = embed_date_parser(date_parser.apply, attribute_time) + obj_change_dict = {object_id_column: object_id, object_type_column: object_type, attribute_name: attribute_text, changed_field: attribute_name, event_timestamp_column: attribute_time} + object_changes_list.append(obj_change_dict) + + objects_list.append(obj_dict) + + elif child.tag.endswith("events"): + event_id = None + event_type = None + event_time = None + + for event in child: + event_id = event.get("id") + event_type = event.get("type") + event_time = embed_date_parser(date_parser.apply, event.get("time")) + + ev_dict = {event_id_column: event_id, event_activity_column: event_type, event_timestamp_column: event_time} + + for child2 in event: + if child2.tag.endswith("objects"): + for target_object in child2: + target_object_id = target_object.get("object-id") + qualifier = target_object.get("qualifier") + + if target_object_id in obj_type_dict: + rel_dict = {event_id_column: event_id, event_activity_column: event_type, event_timestamp_column: event_time, object_id_column: target_object_id, object_type_column: obj_type_dict[target_object_id], qualifier_field: qualifier} + relations_list.append(rel_dict) + elif child2.tag.endswith("attributes"): + for attribute in child2: + attribute_name = attribute.get("name") + attribute_text = attribute.text + try: + attribute_type = event_type_attributes[event_type][attribute_name] + except: + attribute_type = "string" + ev_dict[attribute_name] = parse_xml(attribute_text, attribute_type, date_parser) + + events_list.append(ev_dict) + + events_list = pandas_utils.instantiate_dataframe(events_list) if events_list else None + objects_list = pandas_utils.instantiate_dataframe(objects_list) if objects_list else None + relations_list = pandas_utils.instantiate_dataframe(relations_list) if relations_list else None + o2o_list = pandas_utils.instantiate_dataframe(o2o_list) if o2o_list else None + object_changes_list = pandas_utils.instantiate_dataframe(object_changes_list) if object_changes_list else None + globals = {} + + events_list[internal_index_column] = events_list.index + relations_list[internal_index_column] = relations_list.index + + events_list = events_list.sort_values([event_timestamp_column, internal_index_column]) + relations_list = relations_list.sort_values([event_timestamp_column, internal_index_column]) + + del events_list[internal_index_column] + del relations_list[internal_index_column] + + ocel = OCEL(events=events_list, objects=objects_list, relations=relations_list, globals=globals, o2o=o2o_list, object_changes=object_changes_list, parameters=parameters) + ocel = ocel_consistency.apply(ocel, parameters=parameters) + ocel = filtering_utils.propagate_relations_filtering(ocel) + + return ocel diff --git a/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/ocel20_rustxes.py b/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/ocel20_rustxes.py new file mode 100644 index 0000000000000000000000000000000000000000..ee25c27e2bc94dbeee9efa099a18f734f79bfed6 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/importer/xmlocel/variants/ocel20_rustxes.py @@ -0,0 +1,42 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any +from pm4py.objects.ocel.obj import OCEL + + +def apply(file_path: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Imports an OCEL 2.0 XML using the RUSTXES parser. + + Parameters + --------------- + file_path + Path to the OCEL 2.0 XML + parameters + Optional parameters. + + Returns + --------------- + ocel + Object-centric event log + """ + if parameters is None: + parameters = {} + + import rustxes + + return rustxes.import_ocel_xml_pm4py(file_path) diff --git a/pm4py/pm4py/objects/ocel/obj.py b/pm4py/pm4py/objects/ocel/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..32743a925da114f201cd3d447230d2863ef30ef5 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/obj.py @@ -0,0 +1,145 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.ocel import constants +from pm4py.util import exec_utils, pandas_utils +import pandas as pd +import numpy as np +from copy import copy, deepcopy + + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + EVENT_ACTIVITY = constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = constants.PARAM_EVENT_TIMESTAMP + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + QUALIFIER = constants.PARAM_QUALIFIER + CHANGED_FIELD = constants.PARAM_CHNGD_FIELD + + +class OCEL(object): + def __init__(self, events=None, objects=None, relations=None, globals=None, parameters=None, o2o=None, e2e=None, object_changes=None): + if parameters is None: + parameters = {} + + self.event_id_column = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, constants.DEFAULT_EVENT_ID) + self.object_id_column = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, + constants.DEFAULT_OBJECT_ID) + self.object_type_column = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, + constants.DEFAULT_OBJECT_TYPE) + + self.event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, + constants.DEFAULT_EVENT_ACTIVITY) + self.event_timestamp = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, + constants.DEFAULT_EVENT_TIMESTAMP) + self.qualifier = exec_utils.get_param_value(Parameters.QUALIFIER, parameters, constants.DEFAULT_QUALIFIER) + self.changed_field = exec_utils.get_param_value(Parameters.CHANGED_FIELD, parameters, constants.DEFAULT_CHNGD_FIELD) + + if events is None: + events = pandas_utils.instantiate_dataframe({self.event_id_column: [], self.event_activity: [], self.event_timestamp: []}) + if objects is None: + objects = pandas_utils.instantiate_dataframe({self.object_id_column: [], self.object_type_column: []}) + if relations is None: + relations = pandas_utils.instantiate_dataframe( + {self.event_id_column: [], self.event_activity: [], self.event_timestamp: [], self.object_id_column: [], + self.object_type_column: []}) + if globals is None: + globals = {} + if o2o is None: + o2o = pandas_utils.instantiate_dataframe({self.object_id_column: [], self.object_id_column+"_2": [], self.qualifier: []}) + if e2e is None: + e2e = pandas_utils.instantiate_dataframe({self.event_id_column: [], self.event_id_column+"_2": [], self.qualifier: []}) + if object_changes is None: + object_changes = pandas_utils.instantiate_dataframe({self.object_id_column: [], self.object_type_column: [], self.event_timestamp: [], self.changed_field: []}) + if self.qualifier not in relations: + relations[self.qualifier] = [None] * len(relations) + + self.events = events + self.objects = objects + self.relations = relations + self.globals = globals + self.o2o = o2o + self.e2e = e2e + self.object_changes = object_changes + + self.parameters = parameters + + def get_extended_table(self, ot_prefix=constants.DEFAULT_OBJECT_TYPE_PREFIX_EXTENDED) -> pd.DataFrame: + """ + Transforms the current OCEL data structure into a Pandas dataframe containing the events with their + attributes and the related objects per object type. + """ + object_types = pandas_utils.format_unique(self.relations[self.object_type_column].unique()) + table = self.events.copy().set_index(self.event_id_column) + for ot in object_types: + table[ot_prefix + ot] = \ + self.relations[self.relations[self.object_type_column] == ot].groupby(self.event_id_column)[ + self.object_id_column].agg(list) + table = table.reset_index() + return table + + def get_summary(self) -> str: + """ + Gets a string summary of the object-centric event log + """ + ret = [] + ret.append("Object-Centric Event Log (") + ret.append("number of events: %d" % (len(self.events))) + ret.append(", number of objects: %d" % (len(self.objects))) + ret.append(", number of activities: %d" % (self.events[self.event_activity].nunique())) + ret.append(", number of object types: %d" % (self.objects[self.object_type_column].nunique())) + ret.append(", events-objects relationships: %d)" % (len(self.relations))) + ret.append("\n") + ret.append("Activities occurrences: " + str(self.events[self.event_activity].value_counts().to_dict())) + ret.append("\n") + ret.append("Object types occurrences (number of objects): " + str( + self.objects[self.object_type_column].value_counts().to_dict())) + ret.append("\n") + ret.append( + "Please use .get_extended_table() to get a dataframe representation of the events related to the objects.") + return "".join(ret) + + def is_ocel20(self): + unique_qualifiers = [] + if self.qualifier in self.relations.columns: + unique_qualifiers = [x for x in pandas_utils.format_unique(self.relations[self.qualifier].unique()) if not self.__check_is_nan(x)] + + return len(self.o2o) > 0 or len(self.object_changes) > 0 or len(unique_qualifiers) > 0 + + def __check_is_nan(self, x): + try: + if x is None: + return True + if np.isnan(x): + return True + except: + return False + + def __str__(self): + return str(self.get_summary()) + + def __repr__(self): + return str(self.get_summary()) + + def __copy__(self): + return OCEL(self.events, self.objects, self.relations, copy(self.globals), copy(self.parameters), copy(self.o2o), copy(self.e2e), copy(self.object_changes)) + + def __deepcopy__(self, memo): + return OCEL(self.events.copy(), self.objects.copy(), self.relations.copy(), deepcopy(self.globals), + deepcopy(self.parameters), deepcopy(self.o2o), deepcopy(self.e2e), deepcopy(self.object_changes)) diff --git a/pm4py/pm4py/objects/ocel/util/__init__.py b/pm4py/pm4py/objects/ocel/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1f21af0480c25a50025a21bc4bf0ccf806bde9a1 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.util import attributes_names, extended_table, flattening, related_objects, related_events, filtering_utils, log_ocel, sampling, convergence_divergence_diagnostics, events_per_type_per_activity, objects_per_type_per_activity, events_per_object_type, ev_att_to_obj_type, event_prefix_suffix_per_obj, explode diff --git a/pm4py/pm4py/objects/ocel/util/attributes_names.py b/pm4py/pm4py/objects/ocel/util/attributes_names.py new file mode 100644 index 0000000000000000000000000000000000000000..7257b31458b004398f0aaee6a6eb0d7268cf134b --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/attributes_names.py @@ -0,0 +1,46 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any, List + +from pm4py.objects.ocel import constants +from pm4py.objects.ocel.obj import OCEL + + +def get_attribute_names(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> List[str]: + """ + Gets the list of attributes at the event and the object level of an object-centric event log + (e.g. ["cost", "amount", "name"]) + + Parameters + ------------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm + + Returns + ------------------- + attributes_list + List of attributes at the event and object level (e.g. ["cost", "amount", "name"]) + """ + if parameters is None: + parameters = {} + + attributes = sorted(set(x for x in ocel.events.columns if not x.startswith(constants.OCEL_PREFIX)).union( + x for x in ocel.objects.columns if not x.startswith(constants.OCEL_PREFIX))) + + return attributes diff --git a/pm4py/pm4py/objects/ocel/util/attributes_per_type.py b/pm4py/pm4py/objects/ocel/util/attributes_per_type.py new file mode 100644 index 0000000000000000000000000000000000000000..d083a15ee04f6626b39dc6008cce74af95d14f40 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/attributes_per_type.py @@ -0,0 +1,48 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.objects.ocel import constants +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + EVENT_ACTIVITY = constants.PARAM_EVENT_ACTIVITY + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + + +def get(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + if parameters is None: + parameters = {} + + event_activity_column = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, ocel.event_activity) + object_type_column = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + ets = {k: {x: str(v[x].dtype) for x in v.dropna(axis="columns", how="all").columns if not x.startswith("ocel:")} for k, v in ocel.events.groupby(event_activity_column)} + ots = {k: {x: str(v[x].dtype) for x in v.dropna(axis="columns", how="all").columns if not x.startswith("ocel:")} for k, v in ocel.objects.groupby(object_type_column)} + ots2 = {k: {x: str(v[x].dtype) for x in v.dropna(axis="columns", how="all").columns if not x.startswith("ocel:")} for k, v in ocel.object_changes.groupby(object_type_column)} + + for k in ots2: + if k not in ots: + ots[k] = ots2[k] + else: + for x in ots2[k]: + if x not in ots[k]: + ots[k][x] = ots2[k][x] + + return ets, ots diff --git a/pm4py/pm4py/objects/ocel/util/convergence_divergence_diagnostics.py b/pm4py/pm4py/objects/ocel/util/convergence_divergence_diagnostics.py new file mode 100644 index 0000000000000000000000000000000000000000..53508f490ee27ddc8af02e4f3d7ddffb68be1fac --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/convergence_divergence_diagnostics.py @@ -0,0 +1,61 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.util import events_per_type_per_activity, objects_per_type_per_activity +from typing import Optional, Dict, Any +from pm4py.objects.ocel.obj import OCEL + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Reports the activities and the object types for which the convergence / divergence problems occur. + + Parameters + ---------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm + + Returns + ---------------- + ret + Dictionary with two keys ("convergence" and "divergence"). Each key is associated to a set + of (activity, object_type) for which the specific problem occurs. An activity/object type + which does not appear neither in the "convergence" and "divergence" section does not suffer + of convergence and divergence problems. + """ + if parameters is None: + parameters = {} + + ev_per_type_per_act = events_per_type_per_activity.apply(ocel, parameters=parameters) + obj_per_type_per_act = objects_per_type_per_activity.apply(ocel, parameters=parameters) + + ret = {"divergence": set(), "convergence": set()} + + # analyze the divergence problems + for act in ev_per_type_per_act: + for ot in ev_per_type_per_act[act]: + if ev_per_type_per_act[act][ot]["median"] > 1: + ret["divergence"].add((act, ot)) + + # analyze the convergence problems + for act in obj_per_type_per_act: + for ot in obj_per_type_per_act[act]: + if obj_per_type_per_act[act][ot]["median"] > 1: + ret["convergence"].add((act, ot)) + + return ret diff --git a/pm4py/pm4py/objects/ocel/util/e2o_qualification.py b/pm4py/pm4py/objects/ocel/util/e2o_qualification.py new file mode 100644 index 0000000000000000000000000000000000000000..fbda6be769e54a688f4765bf0b9e1f008d8f9981 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/e2o_qualification.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils +from copy import copy + +class Parameters(Enum): + CONCATENER = "concatener" + CONCAT_COLUMN = "concat_column" + + +def apply(ocel: OCEL, qualifier_type: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + if parameters is None: + parameters = {} + + concatener = exec_utils.get_param_value(Parameters.CONCATENER, parameters, "@@") + concat_column = exec_utils.get_param_value(Parameters.CONCAT_COLUMN, parameters, "@@concat") + + ocel = copy(ocel) + ocel.relations[concat_column] = ocel.relations[ocel.event_id_column] + concatener + ocel.relations[ocel.object_id_column] + relations = ocel.relations.groupby(ocel.object_id_column)[ocel.event_id_column] + + if qualifier_type == "creation": + relations = relations.first().to_dict() + relations = {y + concatener + x: qualifier_type for x, y in relations.items()} + elif qualifier_type == "termination": + relations = relations.last().to_dict() + relations = {y + concatener + x: qualifier_type for x, y in relations.items()} + elif qualifier_type == "other": + relations0 = relations.agg(list).to_dict() + relations0 = {x: y[1:-1] for x, y in relations0.items()} + relations0 = {x: y for x, y in relations0.items() if y} + relations = {} + for x, y in relations0.items(): + for y1 in y: + relations[y1 + concatener + x] = qualifier_type + + ocel.relations[ocel.qualifier+"_2"] = ocel.relations[concat_column].map(relations) + ocel.relations[ocel.qualifier+"_2"] = ocel.relations[ocel.qualifier+"_2"].fillna(ocel.relations[ocel.qualifier]) + ocel.relations[ocel.qualifier] = ocel.relations[ocel.qualifier+"_2"] + + del ocel.relations[ocel.qualifier+"_2"] + del ocel.relations[concat_column] + + return ocel diff --git a/pm4py/pm4py/objects/ocel/util/ev_att_to_obj_type.py b/pm4py/pm4py/objects/ocel/util/ev_att_to_obj_type.py new file mode 100644 index 0000000000000000000000000000000000000000..08fd77e766416b69f8b668e3035fb41379e64865 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/ev_att_to_obj_type.py @@ -0,0 +1,88 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.objects.ocel import constants +from pm4py.util import exec_utils, pandas_utils +from copy import deepcopy +import pandas as pd + + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + EVENT_ACTIVITY = constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = constants.PARAM_EVENT_TIMESTAMP + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + INTERNAL_INDEX = constants.PARAM_INTERNAL_INDEX + + +def apply(ocel: OCEL, param: str, parameters: Optional[Dict[Any, Any]] = None): + """ + Transforms an event attribute to an object type. + + Parameters + --------------- + ocel + Object-centric event log + param + Event attribute that should be moved at the event level + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the event identifier column + - Parameters.EVENT_ACTIVITY => the event activity column + - Parameters.EVENT_TIMESTAMP => the event timestamp column + - Parameters.OBJECT_ID => the object identifier column + - Parameters.OBJECT_TYPE => the object type column + - Parameters.INTERNAL_INDEX => the internal index + + Returns + -------------- + new_ocel + OCEL in which the attribute has been moved to the object type level. + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, ocel.event_activity) + event_timestamp = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, ocel.event_timestamp) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + internal_index = exec_utils.get_param_value(Parameters.INTERNAL_INDEX, parameters, constants.DEFAULT_INTERNAL_INDEX) + + new_ocel = deepcopy(ocel) + new_ocel.events[param] = new_ocel.events[param].astype(str) + ev_param = new_ocel.events.dropna(subset=[param])[[event_id, event_activity, event_timestamp, param]] + vals = pandas_utils.format_unique(ev_param[param].unique()) + ev_param = ev_param.rename(columns={param: object_id}) + ev_param[object_type] = param + + new_objects_df = pandas_utils.instantiate_dataframe([{object_id: v, object_type: param} for v in vals]) + + new_ocel.objects = pandas_utils.concat([new_ocel.objects, new_objects_df]) + new_ocel.relations = pandas_utils.concat([new_ocel.relations, ev_param]) + + new_ocel.relations = pandas_utils.insert_index(new_ocel.relations, internal_index, reset_index=False, copy_dataframe=False) + + new_ocel.relations = new_ocel.relations.sort_values([event_timestamp, internal_index]) + + del new_ocel.events[param] + + return new_ocel diff --git a/pm4py/pm4py/objects/ocel/util/event_prefix_suffix_per_obj.py b/pm4py/pm4py/objects/ocel/util/event_prefix_suffix_per_obj.py new file mode 100644 index 0000000000000000000000000000000000000000..9da4fe2a1f26309eb73c23ff5fbc3eca00a00b0d --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/event_prefix_suffix_per_obj.py @@ -0,0 +1,99 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils, pandas_utils + + +class Parameters(Enum): + PREFIX_OR_SUFFIX = "prefix_or_suffix" + INDEX_ATTRIBUTE = "index_attribute" + LEFT_SUFFIX = "left_suffix" + RIGHT_SUFFIX = "right_suffix" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Gets for each event and each one of the related objects, + the prefix or the suffix. + E.g. if there is an object "o1" with lifecycle "e1", "e2", "e3", + then: + + The prefix of "e1" for "o1" is empty. + The prefix of "e2" for "o1" is ["e1"]. + The prefix of "e3" for "o1" is ["e1", "e2"]. + + The suffix of "e1" for "o1" is ["e2", "e3"]. + The suffix of "e2" for "o1" is ["o3"]. + The suffix of "e3" for "o1" is empty. + + Parameters + -------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.PREFIX_OR_SUFFIX => establishes if the prefix or the suffix of the event per object is + needed. Possible values: + - "prefix" + - "suffix" + - Parameters.INDEX_ATTRIBUTE => the index attribute which is artificially inserted in the relations df. + - Parameters.LEFT_SUFFIX => the suffix for the left-part of the merge. + - Parameters.RIGHT_SUFFIX => the suffix for the right-part of the merge + + Returns + -------------- + ret + A dictionary where the first key is the event, the second key is the object, and the value is a list + of events which are the object-specific prefix or suffix of the event. + """ + if parameters is None: + parameters = {} + + prefix_or_suffix = exec_utils.get_param_value(Parameters.PREFIX_OR_SUFFIX, parameters, "prefix") + index_attribute = exec_utils.get_param_value(Parameters.INDEX_ATTRIBUTE, parameters, "@@index") + left_suffix = exec_utils.get_param_value(Parameters.LEFT_SUFFIX, parameters, "_LEFT") + right_suffix = exec_utils.get_param_value(Parameters.RIGHT_SUFFIX, parameters, "_RIGHT") + + relations = ocel.relations.copy() + relations = pandas_utils.insert_index(relations, index_attribute, reset_index=False, copy_dataframe=False) + relations_merged = relations.merge(relations, left_on=ocel.object_id_column, right_on=ocel.object_id_column, suffixes=(left_suffix, right_suffix)) + if prefix_or_suffix == "prefix": + relations_merged = relations_merged[ + relations_merged[index_attribute + left_suffix] > relations_merged[index_attribute + right_suffix]] + else: + relations_merged = relations_merged[ + relations_merged[index_attribute + left_suffix] < relations_merged[index_attribute + right_suffix]] + relations_merged = relations_merged[[ocel.event_id_column+left_suffix, ocel.event_id_column+right_suffix, ocel.object_id_column]] + relations_merged = relations_merged[relations_merged[ocel.event_id_column+left_suffix] != relations_merged[ocel.event_id_column+right_suffix]] + relations_merged = relations_merged.to_dict('records') + + ret = {} + for el in relations_merged: + e1 = el[ocel.event_id_column+left_suffix] + e2 = el[ocel.event_id_column+right_suffix] + obj = el[ocel.object_id_column] + if e1 not in ret: + ret[e1] = {} + if obj not in ret[e1]: + ret[e1][obj] = [] + if e2 not in ret[e1][obj]: + ret[e1][obj].append(e2) + + return ret diff --git a/pm4py/pm4py/objects/ocel/util/events_per_object_type.py b/pm4py/pm4py/objects/ocel/util/events_per_object_type.py new file mode 100644 index 0000000000000000000000000000000000000000..1b2e03efc9b55a4d65506b14acd7faceae9436ab --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/events_per_object_type.py @@ -0,0 +1,61 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.ocel import constants as ocel_constants +from typing import Optional, Dict, Any + + +class Parameters(Enum): + EVENT_ID = ocel_constants.PARAM_EVENT_ID + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Returns for each object type the number of events related to at least one object of the given type. + + Parameters + ---------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the event identifier + - Parameters.OBJECT_TYPE => the object type column + + Returns + ----------------- + dictio + Dictionary associating to each object type the number of events related to at least one object of the given + type. + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + object_types = pandas_utils.format_unique(ocel.objects[object_type].unique()) + + ret = {} + + for ot in object_types: + ret[ot] = ocel.relations[ocel.relations[object_type] == ot][event_id].nunique() + + return ret diff --git a/pm4py/pm4py/objects/ocel/util/events_per_type_per_activity.py b/pm4py/pm4py/objects/ocel/util/events_per_type_per_activity.py new file mode 100644 index 0000000000000000000000000000000000000000..1847bef0783cef538f1444a1049cbd4057629faf --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/events_per_type_per_activity.py @@ -0,0 +1,77 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils, pandas_utils +from enum import Enum +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.objects.ocel import constants as ocel_constants +from statistics import mean, median + + +class Parameters(Enum): + EVENT_ID = ocel_constants.PARAM_EVENT_ID + EVENT_ACTIVITY = ocel_constants.PARAM_EVENT_ACTIVITY + OBJECT_ID = ocel_constants.PARAM_OBJECT_ID + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Dict[str, float]]: + """ + Provided statistics (mean, median, min, max) on the number of events of a given activity that are associated + to objects of a given type. + + Parameters + --------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the event identifier + - Parameters.EVENT_ACTIVITY => the activity + - Parameters.OBJECT_ID => the object identifier + - Parameters.OBJECT_TYPE => the object type + + Returns + --------------- + dictio + Dictionary in which the first key is the activity, the second key is the object type, + and the value is a dictionary containing the statistic for the given activity and object type. + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, ocel.event_activity) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + activities = pandas_utils.format_unique(ocel.events[event_activity].unique()) + object_types = pandas_utils.format_unique(ocel.objects[object_type].unique()) + + ret = {} + + for act in activities: + if act not in ret: + ret[act] = {} + df = ocel.relations[ocel.relations[event_activity] == act] + for ot in object_types: + all_counts = list(df[df[object_type] == ot].groupby(object_id)[event_id].agg("count").to_dict().values()) + if all_counts: + ret[act][ot] = {"min": min(all_counts), "max": max(all_counts), "mean": mean(all_counts), + "median": median(all_counts)} + + return ret diff --git a/pm4py/pm4py/objects/ocel/util/explode.py b/pm4py/pm4py/objects/ocel/util/explode.py new file mode 100644 index 0000000000000000000000000000000000000000..842ec693c5fac9193fa0af9340c0920862fbe58f --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/explode.py @@ -0,0 +1,48 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from copy import deepcopy + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Explode an OCEL: an event associated to N objects is "split" to N events, each one associated to one object. + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Possible parameters of the algorithm + + Returns + ----------------- + ocel + Exploded object-centric event log + """ + if parameters is None: + parameters = {} + + ocel = deepcopy(ocel) + ocel.relations[ocel.event_id_column] = ocel.relations[ocel.event_id_column] + "_" + ocel.relations[ocel.object_id_column] + ocel.events = ocel.relations.copy() + del ocel.events[ocel.object_id_column] + del ocel.events[ocel.object_type_column] + + return ocel diff --git a/pm4py/pm4py/objects/ocel/util/extended_table.py b/pm4py/pm4py/objects/ocel/util/extended_table.py new file mode 100644 index 0000000000000000000000000000000000000000..6e3c817cd09d5a9239cfa17263cd1648f957c52c --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/extended_table.py @@ -0,0 +1,110 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +import pandas as pd + +from pm4py.objects.ocel import constants +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import exec_utils, pandas_utils, constants as pm4_constants +from pm4py.objects.log.util import dataframe_utils + + +class Parameters(Enum): + OBJECT_TYPE_PREFIX = constants.PARAM_OBJECT_TYPE_PREFIX_EXTENDED + EVENT_ID = constants.PARAM_EVENT_ID + EVENT_ACTIVITY = constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = constants.PARAM_EVENT_TIMESTAMP + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + INTERNAL_INDEX = constants.PARAM_INTERNAL_INDEX + + +def parse_list(value): + if type(value) is str: + if value[0] == "[": + return eval(value) + return [] + + +def get_ocel_from_extended_table(df: pd.DataFrame, objects_df: Optional[Dict[Any, Any]] = None, + parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + if parameters is None: + parameters = {} + + object_type_prefix = exec_utils.get_param_value(Parameters.OBJECT_TYPE_PREFIX, parameters, + constants.DEFAULT_OBJECT_TYPE_PREFIX_EXTENDED) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, + constants.DEFAULT_EVENT_ACTIVITY) + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, constants.DEFAULT_EVENT_ID) + event_timestamp = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, + constants.DEFAULT_EVENT_TIMESTAMP) + object_id_column = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, constants.DEFAULT_OBJECT_ID) + object_type_column = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, constants.DEFAULT_OBJECT_TYPE) + + non_object_type_columns = set(x for x in df.columns if not x.startswith(object_type_prefix)) + object_type_columns = set(x for x in df.columns if x.startswith(object_type_prefix)) + meaningful_columns = object_type_columns.union({event_activity, event_id, event_timestamp}) + internal_index = exec_utils.get_param_value(Parameters.INTERNAL_INDEX, parameters, constants.DEFAULT_INTERNAL_INDEX) + + df_red = df[list(meaningful_columns)] + + stream = df_red.to_dict("records") + relations = [] + objects = {x: set() for x in object_type_columns} + + i = 0 + while i < len(stream): + ev = stream[i] + for ot in object_type_columns: + ev[ot] = parse_list(ev[ot]) + for ot in object_type_columns: + ot_stri = ot.split(object_type_prefix)[1] + oot = objects[ot] + for obj in ev[ot]: + oot.add(obj) + relations.append( + {event_id: ev[event_id], event_activity: ev[event_activity], + event_timestamp: ev[event_timestamp], + object_id_column: obj, object_type_column: ot_stri}) + i = i + 1 + + relations = pandas_utils.instantiate_dataframe(relations) + + if objects_df is None: + objects = [{object_type_column: x.split(object_type_prefix)[1], object_id_column: y} for x in objects for y in + objects[x]] + objects_df = pandas_utils.instantiate_dataframe(objects) + + del objects + + df = df[list(non_object_type_columns)] + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=pm4_constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=[event_timestamp]) + + df = pandas_utils.insert_index(df, internal_index, copy_dataframe=False, reset_index=False) + relations = pandas_utils.insert_index(relations, internal_index, reset_index=False, copy_dataframe=False) + + relations = dataframe_utils.convert_timestamp_columns_in_df(relations, timest_format=pm4_constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=[event_timestamp]) + + df = df.sort_values([event_timestamp, internal_index]) + relations = relations.sort_values([event_timestamp, internal_index]) + + del df[internal_index] + del relations[internal_index] + + return OCEL(events=df, objects=objects_df, relations=relations, parameters=parameters) diff --git a/pm4py/pm4py/objects/ocel/util/filtering_utils.py b/pm4py/pm4py/objects/ocel/util/filtering_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..6c9bbab3860759f04839ed9da86efa011f59a71d --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/filtering_utils.py @@ -0,0 +1,146 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel import constants +from enum import Enum +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.util import exec_utils, pandas_utils + + +class Parameters(Enum): + EVENT_ID = constants.PARAM_EVENT_ID + OBJECT_ID = constants.PARAM_OBJECT_ID + OBJECT_TYPE = constants.PARAM_OBJECT_TYPE + + +def propagate_event_filtering(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Propagates the filtering at the event level to the remaining parts of the OCEL structure + (objects, relations) + + Parameters + ---------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the column to be used as case identifier + - Parameters.OBJECT_ID => the column to be used as object identifier + - Parameters.OBJECT_TYPE => the column to be used as object type + + Returns + ---------------- + ocel + Object-centric event log with propagated filter + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + + selected_event_ids = set(pandas_utils.format_unique(ocel.events[event_id].unique())) + ocel.relations = ocel.relations[ocel.relations[event_id].isin(selected_event_ids)] + selected_object_ids = set(pandas_utils.format_unique(ocel.relations[object_id].unique())) + ocel.objects = ocel.objects[ocel.objects[object_id].isin(selected_object_ids)] + + ocel.e2e = ocel.e2e[(ocel.e2e[event_id].isin(selected_event_ids)) & (ocel.e2e[event_id+"_2"].isin(selected_event_ids))] + ocel.o2o = ocel.o2o[(ocel.o2o[object_id].isin(selected_object_ids)) & (ocel.o2o[object_id+"_2"].isin(selected_object_ids))] + + ocel.object_changes = ocel.object_changes[ocel.object_changes[object_id].isin(selected_object_ids)] + + return ocel + + +def propagate_object_filtering(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Propagates the filtering at the object level to the remaining parts of the OCEL structure + (events, relations) + + Parameters + ---------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the column to be used as case identifier + - Parameters.OBJECT_ID => the column to be used as object identifier + - Parameters.OBJECT_TYPE => the column to be used as object type + + Returns + ---------------- + ocel + Object-centric event log with propagated filter + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + + selected_object_ids = set(pandas_utils.format_unique(ocel.objects[object_id].unique())) + ocel.relations = ocel.relations[ocel.relations[object_id].isin(selected_object_ids)] + selected_event_ids = set(pandas_utils.format_unique(ocel.relations[event_id].unique())) + ocel.events = ocel.events[ocel.events[event_id].isin(selected_event_ids)] + + ocel.e2e = ocel.e2e[(ocel.e2e[event_id].isin(selected_event_ids)) & (ocel.e2e[event_id+"_2"].isin(selected_event_ids))] + ocel.o2o = ocel.o2o[(ocel.o2o[object_id].isin(selected_object_ids)) & (ocel.o2o[object_id+"_2"].isin(selected_object_ids))] + + ocel.object_changes = ocel.object_changes[ocel.object_changes[object_id].isin(selected_object_ids)] + + return ocel + + +def propagate_relations_filtering(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Propagates the filtering at the relations level to the remaining parts of the OCEL structure + (events, objects) + + Parameters + ---------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the column to be used as case identifier + - Parameters.OBJECT_ID => the column to be used as object identifier + - Parameters.OBJECT_TYPE => the column to be used as object type + + Returns + ---------------- + ocel + Object-centric event log with propagated filter + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + + selected_event_ids = set(pandas_utils.format_unique(ocel.relations[event_id].unique())).intersection(set(pandas_utils.format_unique(ocel.events[event_id].unique()))) + selected_object_ids = set(pandas_utils.format_unique(ocel.relations[object_id].unique())).intersection(set(pandas_utils.format_unique(ocel.objects[object_id].unique()))) + ocel.events = ocel.events[ocel.events[event_id].isin(selected_event_ids)] + ocel.objects = ocel.objects[ocel.objects[object_id].isin(selected_object_ids)] + ocel.relations = ocel.relations[ocel.relations[event_id].isin(selected_event_ids)] + ocel.relations = ocel.relations[ocel.relations[object_id].isin(selected_object_ids)] + + ocel.e2e = ocel.e2e[(ocel.e2e[event_id].isin(selected_event_ids)) & (ocel.e2e[event_id+"_2"].isin(selected_event_ids))] + ocel.o2o = ocel.o2o[(ocel.o2o[object_id].isin(selected_object_ids)) & (ocel.o2o[object_id+"_2"].isin(selected_object_ids))] + + ocel.object_changes = ocel.object_changes[ocel.object_changes[object_id].isin(selected_object_ids)] + + return ocel diff --git a/pm4py/pm4py/objects/ocel/util/flattening.py b/pm4py/pm4py/objects/ocel/util/flattening.py new file mode 100644 index 0000000000000000000000000000000000000000..80d1f091fa87b66cb26f1287f70b894a79dbd055 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/flattening.py @@ -0,0 +1,76 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +import pandas as pd + +from pm4py.objects.ocel import constants as ocel_constants +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import constants, xes_constants +from pm4py.util import exec_utils + + +class Parameters(Enum): + EVENT_ACTIVITY = ocel_constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = ocel_constants.PARAM_EVENT_TIMESTAMP + + +def flatten(ocel: OCEL, ot: str, parameters: Optional[Dict[Any, Any]] = None) -> pd.DataFrame: + """ + Flattens the object-centric event log to a traditional event log with the choice of an object type. + In the flattened log, the objects of a given object type are the cases, and each case + contains the set of events related to the object. + + Parameters + ------------------- + ocel + Object-centric event log + ot + Object type + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ACTIVITY + - Parameters.EVENT_TIMESTAMP + + Returns + ------------------ + dataframe + Flattened log in the form of a Pandas dataframe + """ + if parameters is None: + parameters = {} + + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, + ocel.event_activity) + event_timestamp = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, + ocel.event_timestamp) + + objects = ocel.objects[ocel.objects[ocel.object_type_column] == ot] + objects = objects.rename(columns={ocel.object_id_column: xes_constants.DEFAULT_TRACEID_KEY}) + objects = objects.rename(columns={x: constants.CASE_ATTRIBUTE_PREFIX + x for x in objects.columns}) + + relations = ocel.relations[ocel.relations[ocel.object_type_column] == ot][ + [ocel.object_id_column, ocel.event_id_column]] + relations = relations.rename(columns={ocel.object_id_column: constants.CASE_CONCEPT_NAME}) + + objects = objects.merge(relations, on=constants.CASE_CONCEPT_NAME) + + events = ocel.events.merge(objects, on=ocel.event_id_column).rename( + columns={event_activity: xes_constants.DEFAULT_NAME_KEY, event_timestamp: xes_constants.DEFAULT_TIMESTAMP_KEY}) + + return events diff --git a/pm4py/pm4py/objects/ocel/util/log_ocel.py b/pm4py/pm4py/objects/ocel/util/log_ocel.py new file mode 100644 index 0000000000000000000000000000000000000000..9d2f59e9bdd1ff96d99849613a48107e3434ed7a --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/log_ocel.py @@ -0,0 +1,398 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from typing import Optional, Dict, Any, Collection, Union +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.ocel import constants as ocel_constants +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.ocel.util import ocel_consistency +from copy import copy +import math + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + CASE_ATTRIBUTE_PREFIX = constants.PARAMETER_KEY_CASE_ATTRIBUTE_PRFIX + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + TARGET_OBJECT_TYPE = "target_object_type" + TARGET_OBJECT_TYPE_2 = "target_object_type_2" + LEFT_INDEX = "left_index" + RIGHT_INDEX = "right_index" + DIRECTION = "direction" + + +def __postprocess_stream(list_events): + """ + Postprocess the list of events of the stream in order to make sure + that there are no NaN/NaT values + + Parameters + ------------- + list_events + List of events + + Returns + ------------- + list_events + Postprocessed stream + """ + for event in list_events: + event_keys = list(event.keys()) + for k in event_keys: + typ_k = type(event[k]) + if typ_k is pd._libs.tslibs.nattype.NaTType: + del event[k] + continue + elif (typ_k is float or typ_k is int) and math.isnan(event[k]): + del event[k] + continue + elif event[k] is None: + del event[k] + continue + return list_events + + +def from_traditional_log(log: EventLog, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Transforms an EventLog to an OCEL + + Parameters + ----------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.TARGET_OBJECT_TYPE => the name of the object type to which the cases should be mapped + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.CASE_ID_KEY => the attribute to use as case identifier + + Returns + ----------------- + ocel + OCEL (equivalent to the provided event log) + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + target_object_type = exec_utils.get_param_value(Parameters.TARGET_OBJECT_TYPE, parameters, "OTYPE") + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + + events = [] + objects = [] + relations = [] + + ev_count = 0 + for trace in log: + case_id = trace.attributes[case_id_key] + obj = {ocel_constants.DEFAULT_OBJECT_ID: case_id, ocel_constants.DEFAULT_OBJECT_TYPE: target_object_type} + for attr in trace.attributes: + if attr != case_id_key: + obj[attr] = trace.attributes[attr] + objects.append(obj) + for ev in trace: + ev_count = ev_count + 1 + activity = ev[activity_key] + timestamp = ev[timestamp_key] + eve = {ocel_constants.DEFAULT_EVENT_ID: str(ev_count), ocel_constants.DEFAULT_EVENT_ACTIVITY: activity, + ocel_constants.DEFAULT_EVENT_TIMESTAMP: timestamp} + for attr in ev: + if attr not in [activity, timestamp]: + eve[attr] = ev[attr] + events.append(eve) + relations.append( + {ocel_constants.DEFAULT_EVENT_ID: str(ev_count), ocel_constants.DEFAULT_EVENT_ACTIVITY: activity, + ocel_constants.DEFAULT_EVENT_TIMESTAMP: timestamp, ocel_constants.DEFAULT_OBJECT_ID: case_id, + ocel_constants.DEFAULT_OBJECT_TYPE: target_object_type}) + + events = pandas_utils.instantiate_dataframe(events) + objects = pandas_utils.instantiate_dataframe(objects) + relations = pandas_utils.instantiate_dataframe(relations) + + return OCEL(events=events, objects=objects, relations=relations) + + +def __get_events_dataframe(df: pd.DataFrame, activity_key: str, timestamp_key: str, case_id_key: str, + case_attribute_prefix: str, events_prefix="E") -> pd.DataFrame: + """ + Internal method to get the events dataframe out of a traditional log stored as Pandas dataframe + """ + columns = {case_id_key}.union(set(x for x in df.columns if not x.startswith(case_attribute_prefix))) + columns = list(columns) + df = df[columns] + df = df.rename(columns={activity_key: ocel_constants.DEFAULT_EVENT_ACTIVITY, + timestamp_key: ocel_constants.DEFAULT_EVENT_TIMESTAMP, + case_id_key: ocel_constants.DEFAULT_OBJECT_ID}) + df[ocel_constants.DEFAULT_EVENT_ID] = events_prefix + df.index.astype(str) + return df + + +def __get_objects_dataframe(df: pd.DataFrame, case_id_key: str, case_attribute_prefix: str, + target_object_type: str) -> pd.DataFrame: + """ + Internal method to get the objects dataframe out of a traditional log stored as Pandas dataframe + """ + columns = {x for x in df.columns if x.startswith(case_attribute_prefix)} + columns = list(columns) + df = df[columns] + df = df.rename(columns={case_id_key: ocel_constants.DEFAULT_OBJECT_ID}) + df = df.groupby(ocel_constants.DEFAULT_OBJECT_ID).first().reset_index() + df[ocel_constants.DEFAULT_OBJECT_TYPE] = target_object_type + return df + + +def __get_relations_from_events(events: pd.DataFrame, target_object_type: str) -> pd.DataFrame: + """ + Internal method to get the relations dataframe out of a traditional log stored as Pandas dataframe + """ + relations = events[[ocel_constants.DEFAULT_EVENT_ACTIVITY, ocel_constants.DEFAULT_EVENT_TIMESTAMP, + ocel_constants.DEFAULT_OBJECT_ID, ocel_constants.DEFAULT_EVENT_ID]] + relations[ocel_constants.DEFAULT_OBJECT_TYPE] = target_object_type + return relations + + +def from_traditional_pandas(df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Transforms a dataframe to an OCEL + + Parameters + ----------------- + df + Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.TARGET_OBJECT_TYPE => the name of the object type to which the cases should be mapped + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.CASE_ID_KEY => the attribute to use as case identifier + - Parameters.CASE_ATTRIBUTE_PREFIX => the prefix identifying the attributes at the case level + + Returns + ----------------- + ocel + OCEL (equivalent to the provided event log) + """ + if parameters is None: + parameters = {} + + target_object_type = exec_utils.get_param_value(Parameters.TARGET_OBJECT_TYPE, parameters, "OTYPE") + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + case_attribute_prefix = exec_utils.get_param_value(Parameters.CASE_ATTRIBUTE_PREFIX, parameters, + constants.CASE_ATTRIBUTE_PREFIX) + + events = __get_events_dataframe(df, activity_key, timestamp_key, case_id_key, case_attribute_prefix) + objects = __get_objects_dataframe(df, case_id_key, case_attribute_prefix, target_object_type) + relations = __get_relations_from_events(events, target_object_type) + del events[ocel_constants.DEFAULT_OBJECT_ID] + + events = events.sort_values([ocel_constants.DEFAULT_EVENT_TIMESTAMP, ocel_constants.DEFAULT_EVENT_ID]) + relations = relations.sort_values([ocel_constants.DEFAULT_EVENT_TIMESTAMP, ocel_constants.DEFAULT_EVENT_ID]) + + return OCEL(events=events, objects=objects, relations=relations) + + +def from_interleavings(df1: pd.DataFrame, df2: pd.DataFrame, interleavings: pd.DataFrame, + parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Transforms a couple of dataframes, along with the interleavings between them, to an OCEL + + Parameters + ----------------- + df1 + First of the two dataframes + df2 + Second of the two dataframes + interleavings + Interleavings dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.CASE_ID_KEY => the attribute to use as case identifier + - Parameters.CASE_ATTRIBUTE_PREFIX => the prefix identifying the attributes at the case level + - Parameters.TARGET_OBJECT_TYPE => the name of the object type to which the cases of the first log should be mapped + - Parameters.TARGET_OBJECT_TYPE_2 => the name of the object type to which the cases of the second log should be mapped + - Parameters.LEFT_INDEX => the index column of the events of the first dataframe, in the interleavings dataframe + - Parameters.RIGHT_INDEX => the index column of the events of the second dataframe, in the interleavings + dataframe. + - Parameters.DIRECTION => the direction of the interleavings (LR or RL) + + Returns + ----------------- + ocel + OCEL (equivalent to the provided event log) + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + case_attribute_prefix = exec_utils.get_param_value(Parameters.CASE_ATTRIBUTE_PREFIX, parameters, + constants.CASE_ATTRIBUTE_PREFIX) + target_object_type = exec_utils.get_param_value(Parameters.TARGET_OBJECT_TYPE, parameters, "OTYPE") + target_object_type_2 = exec_utils.get_param_value(Parameters.TARGET_OBJECT_TYPE_2, parameters, "OTYPE2") + left_index = exec_utils.get_param_value(Parameters.LEFT_INDEX, parameters, "@@left_index") + right_index = exec_utils.get_param_value(Parameters.RIGHT_INDEX, parameters, "@@right_index") + direction = exec_utils.get_param_value(Parameters.DIRECTION, parameters, "@@direction") + + events1 = __get_events_dataframe(df1, activity_key, timestamp_key, case_id_key, case_attribute_prefix, + events_prefix="E1_") + objects1 = __get_objects_dataframe(df1, case_id_key, case_attribute_prefix, target_object_type) + relations1 = __get_relations_from_events(events1, target_object_type) + + relations1_minimal = relations1[ + {ocel_constants.DEFAULT_EVENT_ID, ocel_constants.DEFAULT_OBJECT_ID, ocel_constants.DEFAULT_OBJECT_TYPE}] + + events2 = __get_events_dataframe(df2, activity_key, timestamp_key, case_id_key, case_attribute_prefix, + events_prefix="E2_") + objects2 = __get_objects_dataframe(df2, case_id_key, case_attribute_prefix, target_object_type_2) + relations2 = __get_relations_from_events(events2, target_object_type_2) + relations2_minimal = relations2[ + {ocel_constants.DEFAULT_EVENT_ID, ocel_constants.DEFAULT_OBJECT_ID, ocel_constants.DEFAULT_OBJECT_TYPE}] + + interleavings[left_index] = "E1_" + interleavings[left_index].astype(int).astype(str) + interleavings[right_index] = "E2_" + interleavings[right_index].astype(int).astype(str) + interleavings_lr = interleavings[interleavings[direction] == "LR"][[left_index, right_index]] + interleavings_rl = interleavings[interleavings[direction] == "RL"][[left_index, right_index]] + + relations3 = events1.merge(interleavings_lr, left_on=ocel_constants.DEFAULT_EVENT_ID, right_on=left_index) + relations3 = relations3.merge(relations2_minimal, left_on=right_index, right_on=ocel_constants.DEFAULT_EVENT_ID, + suffixes=('', '_@#@#RIGHT')) + relations3[ocel_constants.DEFAULT_OBJECT_ID] = relations3[ocel_constants.DEFAULT_OBJECT_ID + '_@#@#RIGHT'] + relations3[ocel_constants.DEFAULT_OBJECT_TYPE] = target_object_type_2 + + relations4 = events2.merge(interleavings_rl, left_on=ocel_constants.DEFAULT_EVENT_ID, right_on=right_index) + relations4 = relations4.merge(relations1_minimal, left_on=left_index, right_on=ocel_constants.DEFAULT_EVENT_ID, + suffixes=('', '_@#@#LEFT')) + relations4[ocel_constants.DEFAULT_OBJECT_ID] = relations4[ocel_constants.DEFAULT_OBJECT_ID + '_@#@#LEFT'] + relations4[ocel_constants.DEFAULT_OBJECT_TYPE] = target_object_type + + del events1[ocel_constants.DEFAULT_OBJECT_ID] + del events2[ocel_constants.DEFAULT_OBJECT_ID] + + events = pandas_utils.concat([events1, events2]) + objects = pandas_utils.concat([objects1, objects2]) + relations = pandas_utils.concat([relations1, relations2, relations3, relations4]) + + events = events.sort_values([ocel_constants.DEFAULT_EVENT_TIMESTAMP, ocel_constants.DEFAULT_EVENT_ID]) + relations = relations.sort_values([ocel_constants.DEFAULT_EVENT_TIMESTAMP, ocel_constants.DEFAULT_EVENT_ID]) + + return OCEL(events=events, objects=objects, relations=relations) + + +def log_to_ocel_multiple_obj_types(log_obj: Union[EventLog, EventStream, pd.DataFrame], activity_column: str, timestamp_column: str, obj_types: Collection[str], obj_separator: str = " AND ", additional_event_attributes: Optional[Collection[str]] = None, additional_object_attributes: Optional[Dict[str, Collection[str]]] = None) -> OCEL: + """ + Converts an event log to an object-centric event log with one or more than one + object types. + + Parameters + --------------- + log_obj + Log object + activity_column + Activity column + timestamp_column + Timestamp column + object_types + List of columns to consider as object types + obj_separator + Separator between different objects in the same column + additional_event_attributes + Additional attributes to be considered as event attributes in the OCEL + additional_object_attributes + Additional attributes per object type to be considered as object attributes in the OCEL + (dictionary in which object types are associated to their attributes, i.e., + {"order": ["quantity", "cost"], "invoice": ["date", "due date"]}) + + Returns + ---------------- + ocel + Object-centric event log + """ + log_obj = log_converter.apply(log_obj, variant=log_converter.Variants.TO_DATA_FRAME) + + if additional_event_attributes is None: + additional_event_attributes = {} + + if additional_object_attributes is None: + additional_object_attributes = {} + + events = [] + objects = [] + relations = [] + + obj_ids = set() + + stream = log_obj.to_dict("records") + stream = __postprocess_stream(stream) + + for index, eve in enumerate(stream): + ocel_eve = {ocel_constants.DEFAULT_EVENT_ID: str(index), ocel_constants.DEFAULT_EVENT_ACTIVITY: eve[activity_column], ocel_constants.DEFAULT_EVENT_TIMESTAMP: eve[timestamp_column]} + for attr in additional_event_attributes: + if attr in eve: + ocel_eve[attr] = eve[attr] + events.append(ocel_eve) + + for ot in obj_types: + try: + objs = eve[ot].split(obj_separator) + + for obj in objs: + if len(obj.strip()) > 0: + if obj not in obj_ids: + obj_ids.add(obj) + obj_instance = {ocel_constants.DEFAULT_OBJECT_ID: obj, ocel_constants.DEFAULT_OBJECT_TYPE: ot} + + if ot in additional_object_attributes: + for objattname in additional_object_attributes[ot]: + if objattname in eve: + objattvalue = eve[objattname] + obj_instance[objattname] = objattvalue + + objects.append(obj_instance) + + rel = copy(ocel_eve) + rel[ocel_constants.DEFAULT_OBJECT_ID] = obj + rel[ocel_constants.DEFAULT_OBJECT_TYPE] = ot + + relations.append(rel) + except: + pass + + events = pandas_utils.instantiate_dataframe(events) + objects = pandas_utils.instantiate_dataframe(objects) + relations = pandas_utils.instantiate_dataframe(relations) + relations = relations.drop_duplicates(subset=[ocel_constants.DEFAULT_EVENT_ID, ocel_constants.DEFAULT_OBJECT_ID]) + + ocel = OCEL(events=events, objects=objects, relations=relations) + ocel = ocel_consistency.apply(ocel) + + return ocel diff --git a/pm4py/pm4py/objects/ocel/util/names_stripping.py b/pm4py/pm4py/objects/ocel/util/names_stripping.py new file mode 100644 index 0000000000000000000000000000000000000000..3a93fc884b14c97ba6a5eba2044876a94a47205e --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/names_stripping.py @@ -0,0 +1,34 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import re + + +match = re.compile(r'[^0-9a-zA-Z]+') + + +def apply(X: str, max_len: int = 100) -> str: + X = X.split(" ") + i = 0 + while i < len(X): + X[i] = X[i].capitalize() + i = i + 1 + X = "".join(X) + stru = match.sub('', X).strip() + if len(stru) > max_len: + stru = stru[:100] + return stru diff --git a/pm4py/pm4py/objects/ocel/util/objects_per_type_per_activity.py b/pm4py/pm4py/objects/ocel/util/objects_per_type_per_activity.py new file mode 100644 index 0000000000000000000000000000000000000000..6785717560b22ee466fdbf9bfdf7ec6cbb22b42d --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/objects_per_type_per_activity.py @@ -0,0 +1,77 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils, pandas_utils +from enum import Enum +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from pm4py.objects.ocel import constants as ocel_constants +from statistics import mean, median + + +class Parameters(Enum): + EVENT_ID = ocel_constants.PARAM_EVENT_ID + EVENT_ACTIVITY = ocel_constants.PARAM_EVENT_ACTIVITY + OBJECT_ID = ocel_constants.PARAM_OBJECT_ID + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Dict[str, float]]: + """ + Provided statistics (mean, median, min, max) on the number of objects of a given type that are associated to events + of a given activity. + + Parameters + --------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the event identifier + - Parameters.EVENT_ACTIVITY => the activity + - Parameters.OBJECT_ID => the object identifier + - Parameters.OBJECT_TYPE => the object type + + Returns + --------------- + dictio + Dictionary in which the first key is the activity, the second key is the object type, + and the value is a dictionary containing the statistic for the given activity and object type. + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, ocel.event_activity) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + activities = pandas_utils.format_unique(ocel.events[event_activity].unique()) + object_types = pandas_utils.format_unique(ocel.objects[object_type].unique()) + + ret = {} + + for act in activities: + if act not in ret: + ret[act] = {} + df = ocel.relations[ocel.relations[event_activity] == act] + for ot in object_types: + all_counts = list(df[df[object_type] == ot].groupby(event_id)[object_id].agg("count").to_dict().values()) + if all_counts: + ret[act][ot] = {"min": min(all_counts), "max": max(all_counts), "mean": mean(all_counts), + "median": median(all_counts)} + + return ret diff --git a/pm4py/pm4py/objects/ocel/util/ocel_consistency.py b/pm4py/pm4py/objects/ocel/util/ocel_consistency.py new file mode 100644 index 0000000000000000000000000000000000000000..009bc6d809a7c2d9d475c286e0d5ec543502229e --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/ocel_consistency.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Forces the consistency of the OCEL, ensuring that the event/object identifier, + event/object type are of type string and non-empty. + + Parameters + -------------- + ocel + OCEL + parameters + Possible parameters of the method + + Returns + -------------- + ocel + Consistent OCEL + """ + if parameters is None: + parameters = {} + + fields = { + "events": ["ocel:eid", "ocel:activity"], + "objects": ["ocel:oid", "ocel:type"], + "relations": ["ocel:eid", "ocel:oid", "ocel:activity", "ocel:type"], + "o2o": ["ocel:oid", "ocel:oid_2"], + "e2e": ["ocel:eid", "ocel:eid_2"], + "object_changes": ["ocel:oid"] + } + + for tab in fields: + df = getattr(ocel, tab) + for fie in fields[tab]: + df = df.dropna(subset=[fie], how="any") + df[fie] = df[fie].astype("string") + df = df.dropna(subset=[fie], how="any") + df = df[df[fie].str.len() > 0] + setattr(ocel, tab, df) + + return ocel diff --git a/pm4py/pm4py/objects/ocel/util/ocel_iterator.py b/pm4py/pm4py/objects/ocel/util/ocel_iterator.py new file mode 100644 index 0000000000000000000000000000000000000000..727c927650ed945831720462010cca9e8e3ef4bd --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/ocel_iterator.py @@ -0,0 +1,55 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.ocel import constants as ocel_constants +import pandas as pd + + +class Parameters(Enum): + OCEL_TYPE_PREFIX = ocel_constants.PARAM_OBJECT_TYPE_PREFIX_EXTENDED + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None): + """ + Creates an iterator over the events of an object-centric event log + + Parameters + ---------------- + ocel + OCEL + parameters + Parameters of the method, including: + - Parameters.OCEL_TYPE_PREFIX => the prefix of the object types in the OCEL (default: ocel:type) + + Returns + ---------------- + yielded event + The events of the OCEL, one by one. + """ + if parameters is None: + parameters = {} + + ot_prefix = exec_utils.get_param_value(Parameters.OCEL_TYPE_PREFIX, parameters, + ocel_constants.DEFAULT_OBJECT_TYPE_PREFIX_EXTENDED) + + ext_table = ocel.get_extended_table(ot_prefix) + + for k, ev in ext_table.iterrows(): + yield {x: y for x, y in dict(ev).items() if isinstance(y, list) or not pd.isna(y)} diff --git a/pm4py/pm4py/objects/ocel/util/ocel_to_dict_types_rel.py b/pm4py/pm4py/objects/ocel/util/ocel_to_dict_types_rel.py new file mode 100644 index 0000000000000000000000000000000000000000..cee4d4aa9cdcf30f00507177f0e3e9b3b4e9dcf6 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/ocel_to_dict_types_rel.py @@ -0,0 +1,111 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Dict, Union, Tuple +import pandas as pd +from pm4py.util import pandas_utils + + +def apply(ocel: OCEL) -> Dict[str, Dict[Union[str, Tuple[str, str]], pd.DataFrame]]: + """ + Gets from an object-centric event log (OCEL) + a dictionary associating to every event/object/e2o/o2o/change type + a dataframe containing the associated information. + This effectively splits the information of different event/object types + in dense dataframes. + + Running example: + + import pm4py + from pm4py.objects.ocel.util import ocel_to_dict_types_rel + + + ocel = pm4py.read_ocel("tests/input_data/ocel/example_log.jsonocel") + dct_types_rel = ocel_to_dict_types_rel.apply(ocel) + + # prints the dense dataframes for every event type of the log + for evt, table in dct_types_rel["ev_types"].items(): + print("\n") + print(evt) + print(table) + + Parameters + ------------- + ocel + Object-centric event log + + Returns + ----------- + dct_types_rel + Dictionary associating to every type the corresponding dense table. + + Keys at the first level: + - ev_types: pointing to the different event types of the object-centric event log + - obj_types: pointing to the different object types of the object-centric event log + - e2o: pointing to the different event-object relationships of the object-centric event log + - o2o: pointing to the different object-object relationships of the object-centric event log + - object_changes: pointing to temporal changes in the attributes of the different object types of an OCEL + + Keys at the second level: + - for "ev_types", "obj_types" and "object_changes": the name of the event/object type related to the dense table + - for "e2o": a tuple in which the first element is an event type, and the second element is an object type + - for "o2o": a tuple in which the two elements are interconnected object types + + Value: a Pandas dataframe (dense table). + """ + ev_types_list = pandas_utils.format_unique(ocel.events[ocel.event_activity].unique()) + obj_types_list = pandas_utils.format_unique(ocel.objects[ocel.object_type_column].unique()) + e2o_list = list(ocel.relations.groupby([ocel.event_activity, ocel.object_type_column]).size().to_dict()) + + obj_type_map = ocel.objects[[ocel.object_id_column, ocel.object_type_column]].to_dict("records") + obj_type_map = {x[ocel.object_id_column]: x[ocel.object_type_column] for x in obj_type_map} + overall_o2o = ocel.o2o.copy() + overall_o2o[ocel.object_type_column] = overall_o2o[ocel.object_id_column].map(obj_type_map) + overall_o2o[ocel.object_type_column+"_2"] = overall_o2o[ocel.object_id_column+"_2"].map(obj_type_map) + + o2o_list = list(overall_o2o.groupby([ocel.object_type_column, ocel.object_type_column+"_2"]).size().to_dict()) + changes_list = pandas_utils.format_unique(ocel.object_changes[ocel.object_type_column].unique()) + + dct_types_rel = {"ev_types": {}, "obj_types": {}, "e2o": {}, "o2o": {}, "changes": {}} + + for evt in ev_types_list: + events = ocel.events[ocel.events[ocel.event_activity] == evt] + events = events.dropna(axis="columns", how="all") + dct_types_rel["ev_types"][evt] = events + + for objt in obj_types_list: + objects = ocel.objects[ocel.objects[ocel.object_type_column] == objt] + objects = objects.dropna(axis="columns", how="all") + dct_types_rel["obj_types"][objt] = objects + + for e2ot in e2o_list: + e2o = ocel.relations[(ocel.relations[ocel.event_activity] == e2ot[0]) & (ocel.relations[ocel.object_type_column] == e2ot[1])] + e2o = e2o.dropna(axis="columns", how="all") + dct_types_rel["e2o"][e2ot] = e2o + + for o2ot in o2o_list: + o2o = overall_o2o[(overall_o2o[ocel.object_type_column] == o2ot[0]) & (overall_o2o[ocel.object_type_column+"_2"] == o2ot[1])] + o2o = o2o.dropna(axis="columns", how="all") + dct_types_rel["o2o"][o2ot] = o2o + + for objt in changes_list: + objects = ocel.object_changes[ocel.object_changes[ocel.object_type_column] == objt] + objects = objects.dropna(axis="columns", how="all") + dct_types_rel["changes"][objt] = objects + + return dct_types_rel diff --git a/pm4py/pm4py/objects/ocel/util/ocel_type_renaming.py b/pm4py/pm4py/objects/ocel/util/ocel_type_renaming.py new file mode 100644 index 0000000000000000000000000000000000000000..05dd35b1477e141db0b8adfd2306f916d557c5e1 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/ocel_type_renaming.py @@ -0,0 +1,88 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.ocel.util import names_stripping +from copy import deepcopy +from typing import Dict, Optional + + +def __rename_types_from_maps(ocel: OCEL, event_types_map: Optional[Dict[str, str]], object_types_map: Optional[Dict[str, str]]) -> OCEL: + ret_ocel = deepcopy(ocel) + + if event_types_map is not None: + ret_ocel.events[ocel.event_activity] = ret_ocel.events[ocel.event_activity].map(event_types_map) + ret_ocel.relations[ocel.event_activity] = ret_ocel.relations[ocel.event_activity].map(event_types_map) + + if object_types_map is not None: + ret_ocel.objects[ocel.object_type_column] = ret_ocel.objects[ocel.object_type_column].map(object_types_map) + ret_ocel.relations[ocel.object_type_column] = ret_ocel.relations[ocel.object_type_column].map(object_types_map) + ret_ocel.object_changes[ocel.object_type_column] = ret_ocel.object_changes[ocel.object_type_column].map(object_types_map) + + return ret_ocel + + +def remove_spaces_non_alphanumeric_characters_from_types(ocel: OCEL) -> OCEL: + """ + Creates a copy of the object-centric event log in which + spaces and non-alphanumeric characters inside the event/object types are stripped + + Parameters + ---------------- + ocel + Object-centric event log + + Returns + ---------------- + ocel + Object-centric event log with stripped types + """ + object_types = ocel.objects[ocel.object_type_column].value_counts().to_dict() + event_types = ocel.events[ocel.event_activity].value_counts().to_dict() + + object_types_map = {x: names_stripping.apply(x) for x in object_types} + event_types_map = {x: names_stripping.apply(x) for x in event_types} + + return __rename_types_from_maps(ocel, event_types_map, object_types_map) + + +def abbreviate_event_types(ocel: OCEL) -> OCEL: + """ + Creates a copy of the object-centric event log in which + the event types are replaced by the letters of the alphabet (A being the most frequent event type, ...). + This is particularly useful to textually abstract the object-centric event log. + + Parameters + ---------------- + ocel + Object-centric event log + + Returns + ---------------- + ocel + Object-centric event log with alphabetical event types + """ + event_types = list(ocel.events[ocel.event_activity].value_counts().to_dict()) + + event_types_map = {} + for index, act in enumerate(event_types): + result = '' + while index >= 0: + result = chr((index % 26) + ord('A')) + result + index = index // 26 - 1 + event_types_map[act] = result + + return __rename_types_from_maps(ocel, event_types_map, None) diff --git a/pm4py/pm4py/objects/ocel/util/parent_children_ref.py b/pm4py/pm4py/objects/ocel/util/parent_children_ref.py new file mode 100644 index 0000000000000000000000000000000000000000..4ed07beb355d1bc5fa68c22607be48c9201be07e --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/parent_children_ref.py @@ -0,0 +1,65 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +def apply(ocel: OCEL, child_obj_type: str, parent_obj_type: str, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Inserts an object attribute pointing to the parent of a child object, + by looking at the related objects of the events of the log. + This requires only the provision of the child object type and of the parent object type. + + Parameters + -------------- + ocel + Object-centric event log + child_obj_type + Child object type (e.g. item) + parent_obj_type + Parent object type (e.g. parent) + parameters + Possible parameters of the algorithm + + Returns + ------------- + ocel + Enriched object-centric event log + """ + if parameters is None: + parameters = {} + + ev_lf = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + obj_types = ocel.objects[[ocel.object_id_column, ocel.object_type_column]].to_dict("records") + obj_types = {x[ocel.object_id_column]: x[ocel.object_type_column] for x in obj_types} + parents = {} + + for ev_id, lif in ev_lf.items(): + for obj_id in lif: + if obj_types[obj_id] == child_obj_type: + for obj_id_2 in lif: + if obj_types[obj_id_2] == parent_obj_type: + parents[obj_id] = obj_id_2 + + col = ocel.objects[ocel.object_id_column].map(parents) + if parent_obj_type+"ID" not in ocel.objects.columns: + ocel.objects[parent_obj_type+"ID"] = col + else: + ocel.objects[parent_obj_type+"ID"] = ocel.objects[parent_obj_type+"ID"].fillna(col) + + return ocel diff --git a/pm4py/pm4py/objects/ocel/util/related_events.py b/pm4py/pm4py/objects/ocel/util/related_events.py new file mode 100644 index 0000000000000000000000000000000000000000..8c63c401066dc5062d71e4c310ff082f0a4c6480 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/related_events.py @@ -0,0 +1,32 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Dict, Any, Optional, List + +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import pandas_utils + + +def related_events_dct(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Dict[str, List[str]]]: + if parameters is None: + parameters = {} + + object_types = pandas_utils.format_unique(ocel.relations[ocel.object_type_column].unique()) + dct = {} + for ot in object_types: + dct[ot] = ocel.relations[ocel.relations[ocel.object_type_column] == ot].groupby(ocel.object_id_column)[ocel.event_id_column].apply( + list).to_dict() + return dct diff --git a/pm4py/pm4py/objects/ocel/util/related_objects.py b/pm4py/pm4py/objects/ocel/util/related_objects.py new file mode 100644 index 0000000000000000000000000000000000000000..0cb9fa9b9ce7692a2d80ce200880ea8e21c57cbc --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/related_objects.py @@ -0,0 +1,46 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Dict, Any, Optional, List + +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import pandas_utils + + +def related_objects_dct_per_type(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Dict[str, List[str]]]: + if parameters is None: + parameters = {} + + object_types = pandas_utils.format_unique(ocel.relations[ocel.object_type_column].unique()) + dct = {} + for ot in object_types: + dct[ot] = ocel.relations[ocel.relations[ocel.object_type_column] == ot].groupby(ocel.event_id_column)[ocel.object_id_column].apply( + list).to_dict() + return dct + + +def related_objects_dct_overall(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, List[str]]: + if parameters is None: + parameters = {} + + evids = pandas_utils.format_unique(ocel.events[ocel.event_id_column].unique()) + dct = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + + for evid in evids: + if evid not in dct: + dct[evid] = [] + + return dct diff --git a/pm4py/pm4py/objects/ocel/util/rename_objs_ot_tim_lex.py b/pm4py/pm4py/objects/ocel/util/rename_objs_ot_tim_lex.py new file mode 100644 index 0000000000000000000000000000000000000000..082567e8109bac7122fc676b15e5773b9e24d3ee --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/rename_objs_ot_tim_lex.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.ocel.obj import OCEL +from copy import deepcopy + + +def apply(ocel: OCEL) -> OCEL: + """ + Rename objects given their object type, lifecycle start/end timestamps, and lexicographic order, + + Parameters + ----------------- + ocel + Object-centric event log + + Returns + ---------------- + renamed_ocel + Object-centric event log with renaming + """ + objects_start = ocel.relations.groupby(ocel.object_id_column)[ocel.event_timestamp].first().to_dict() + objects_end = ocel.relations.groupby(ocel.object_id_column)[ocel.event_timestamp].last().to_dict() + objects_ot0 = ocel.objects[[ocel.object_id_column, ocel.object_type_column]].to_dict("records") + objects_ot0 = [(x[ocel.object_id_column], x[ocel.object_type_column]) for x in objects_ot0] + objects_ot1 = {} + + for el in objects_ot0: + if not el[1] in objects_ot1: + objects_ot1[el[1]] = [] + objects_ot1[el[1]].append(el[0]) + + overall_objects = {} + keys = sorted(list(objects_ot1)) + for ot in keys: + objects = objects_ot1[ot] + objects.sort(key=lambda x: (objects_start[x], objects_end[x], x)) + objects = {objects[i]: ot + "_" + str(i+1) for i in range(len(objects))} + overall_objects.update(objects) + + ocel = deepcopy(ocel) + ocel.objects[ocel.object_id_column] = ocel.objects[ocel.object_id_column].map(overall_objects) + ocel.relations[ocel.object_id_column] = ocel.relations[ocel.object_id_column].map(overall_objects) + ocel.o2o[ocel.object_id_column] = ocel.o2o[ocel.object_id_column].map(overall_objects) + ocel.o2o[ocel.object_id_column + "_2"] = ocel.o2o[ocel.object_id_column + "_2"].map(overall_objects) + ocel.object_changes[ocel.object_id_column] = ocel.object_changes[ocel.object_id_column].map(overall_objects) + + return ocel diff --git a/pm4py/pm4py/objects/ocel/util/sampling.py b/pm4py/pm4py/objects/ocel/util/sampling.py new file mode 100644 index 0000000000000000000000000000000000000000..ddf3f93ce6ccf9b2813529bbaa5e8b358e4ee824 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/util/sampling.py @@ -0,0 +1,105 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, pandas_utils +from pm4py.objects.ocel import constants +import random +from pm4py.objects.ocel.util import filtering_utils +from copy import copy +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +class Parameters(Enum): + OBJECT_ID = constants.PARAM_OBJECT_ID + EVENT_ID = constants.PARAM_EVENT_ID + NUM_ENTITIES = "num_entities" + + +def sample_ocel_events(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Keeps a sample of the events of an object-centric event log + + Parameters + ------------------ + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => event identifier + - Parameters.NUM_ENTITIES => number of events + + Returns + ------------------ + sampled_ocel + Sampled object-centric event log + """ + if parameters is None: + parameters = {} + + event_id_column = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + num_entities = exec_utils.get_param_value(Parameters.NUM_ENTITIES, parameters, 100) + + events = pandas_utils.format_unique(ocel.events[event_id_column].unique()) + num_events = min(len(events), num_entities) + + random.shuffle(events) + picked_events = events[:num_events] + + ocel = copy(ocel) + ocel.events = ocel.events[ocel.events[event_id_column].isin(picked_events)] + + return filtering_utils.propagate_event_filtering(ocel, parameters=parameters) + + +def sample_ocel_objects(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: + """ + Random samples the objects of the object-centric event log. + Then, only the events related to at least one of these objects are filtered from the event log. + As a note, the relationships between the different objects are probably going to be ruined by + this sampling. + + Parameters + ----------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.OBJECT_ID => object identifier + - Parameters.NUM_ENTITIES => number of objects to retain + + Returns + ---------------- + sampled_ocel + Sampled object-centric event log + """ + if parameters is None: + parameters = {} + + object_id_column = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + num_entities = exec_utils.get_param_value(Parameters.NUM_ENTITIES, parameters, 100) + + objects = pandas_utils.format_unique(ocel.objects[object_id_column].unique()) + num_objects = min(len(objects), num_entities) + + random.shuffle(objects) + picked_objects = objects[:num_objects] + + ocel = copy(ocel) + ocel.objects = ocel.objects[ocel.objects[object_id_column].isin(picked_objects)] + + return filtering_utils.propagate_object_filtering(ocel, parameters=parameters) diff --git a/pm4py/pm4py/objects/ocel/validation/__init__.py b/pm4py/pm4py/objects/ocel/validation/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..073b440c99345030b43a2160d903fef3e3dca1aa --- /dev/null +++ b/pm4py/pm4py/objects/ocel/validation/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.validation import jsonocel, xmlocel diff --git a/pm4py/pm4py/objects/ocel/validation/jsonocel.py b/pm4py/pm4py/objects/ocel/validation/jsonocel.py new file mode 100644 index 0000000000000000000000000000000000000000..77c17b1e3a026be199b91b3bde19c36e6057b7a8 --- /dev/null +++ b/pm4py/pm4py/objects/ocel/validation/jsonocel.py @@ -0,0 +1,37 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util + + +def apply(input_path, validation_path, parameters=None): + if not importlib.util.find_spec("jsonschema"): + raise Exception("please install jsonschema in order to validate a JSONOCEL file.") + + import json + import jsonschema + from jsonschema import validate + + if parameters is None: + parameters = {} + + file_content = json.load(open(input_path, "rb")) + schema_content = json.load(open(validation_path, "rb")) + try: + validate(instance=file_content, schema=schema_content) + return True + except jsonschema.exceptions.ValidationError as err: + return False diff --git a/pm4py/pm4py/objects/ocel/validation/ocel20_rel_validation.py b/pm4py/pm4py/objects/ocel/validation/ocel20_rel_validation.py new file mode 100644 index 0000000000000000000000000000000000000000..bf3ba9a5f67e5d3c41b6f735ebfc6c344e9a537a --- /dev/null +++ b/pm4py/pm4py/objects/ocel/validation/ocel20_rel_validation.py @@ -0,0 +1,344 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Tuple, Collection + + +def const_1_existence_type_independent_tables(curs): + query = """SELECT Count(*) FROM sqlite_master WHERE type = "table" AND tbl_name IN ("event_map_type", "object_map_type", "event", "object", "event_object", "object_object");""" + curs.execute(query) + res = curs.fetchone() + return res[0] == 6 + + +def const_2_existence_object_type_tables_map_obj_types(curs): + query = """SELECT Count(*) FROM (SELECT a.ocel_type_map, b.tbl_name FROM (SELECT ocel_type_map FROM object_map_type) a LEFT OUTER JOIN (SELECT tbl_name FROM sqlite_master WHERE type = "table" AND tbl_name LIKE "object_%") b ON b.tbl_name = "object_" || a.ocel_type_map WHERE b.tbl_name IS NULL);""" + curs.execute(query) + res0 = curs.fetchone() + + query = """SELECT Count(*) FROM (SELECT a.ocel_type_map, b.tbl_name FROM (SELECT tbl_name FROM sqlite_master WHERE type = "table" AND tbl_name LIKE "object_%") b LEFT OUTER JOIN (SELECT ocel_type_map FROM object_map_type) a ON b.tbl_name = "object_" || a.ocel_type_map WHERE a.ocel_type_map IS NULL);""" + curs.execute(query) + res1 = curs.fetchone() + + return res0[0] == 0 and res1[0] == 2 + + +def const_3_existence_event_type_tables_map_ev_types(curs): + query = """SELECT Count(*) FROM (SELECT a.ocel_type_map, b.tbl_name FROM (SELECT ocel_type_map FROM event_map_type) a LEFT OUTER JOIN (SELECT tbl_name FROM sqlite_master WHERE type = "table" AND tbl_name LIKE "event_%") b ON b.tbl_name = "event_" || a.ocel_type_map WHERE b.tbl_name IS NULL);""" + curs.execute(query) + res0 = curs.fetchone() + + query = """SELECT Count(*) FROM (SELECT a.ocel_type_map, b.tbl_name FROM (SELECT tbl_name FROM sqlite_master WHERE type = "table" AND tbl_name LIKE "event_%") b LEFT OUTER JOIN (SELECT ocel_type_map FROM event_map_type) a ON b.tbl_name = "event_" || a.ocel_type_map WHERE a.ocel_type_map IS NULL);""" + curs.execute(query) + res1 = curs.fetchone() + + return res0[0] == 0 and res1[0] == 2 + + +def const_4_ocel_type_column(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM sqlite_master m JOIN pragma_table_info(m.tbl_name) p WHERE m.tbl_name IN ("object_map_type", "event_map_type", "event", "object") AND m.type = "table" AND p.name = "ocel_type");""" + curs.execute(query) + res0 = curs.fetchone() + + return res0[0] == 4 + + +def const_5_ocel_type_map(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM sqlite_master m JOIN pragma_table_info(m.tbl_name) p WHERE m.tbl_name IN ("object_map_type", "event_map_type") AND m.type = "table" AND p.name = "ocel_type_map");""" + curs.execute(query) + res0 = curs.fetchone() + + return res0[0] == 2 + + +def const_6_ocel_id(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM sqlite_master m JOIN pragma_table_info(m.tbl_name) p WHERE m.tbl_name IN ("event", "object") AND m.type = "table" AND p.name = "ocel_id");""" + curs.execute(query) + res0 = curs.fetchone() + + return res0[0] == 2 + + +def const_7_ocel_qualifier(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM sqlite_master m JOIN pragma_table_info(m.tbl_name) p WHERE m.tbl_name IN ("event_object", "object_object") AND m.type = "table" AND p.name = "ocel_qualifier");""" + curs.execute(query) + res0 = curs.fetchone() + + return res0[0] == 2 + + +def const_8_event_object_fields(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM sqlite_master m JOIN pragma_table_info(m.tbl_name) p WHERE m.tbl_name = "event_object" AND m.type = "table" AND p.name IN ("ocel_event_id", "ocel_object_id"));""" + curs.execute(query) + res0 = curs.fetchone() + + return res0[0] == 2 + + +def const_9_object_object_fields(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM sqlite_master m JOIN pragma_table_info(m.tbl_name) p WHERE m.tbl_name = "object_object" AND m.type = "table" AND p.name IN ("ocel_source_id", "ocel_target_id"));""" + curs.execute(query) + res0 = curs.fetchone() + + return res0[0] == 2 + + +def const_10_existence_ocel_id_obj_type_spec_tables(curs): + query = """SELECT m.tbl_name, Count(*) FROM sqlite_master m JOIN object_map_type ty on m.tbl_name = "object_" || ty.ocel_type_map JOIN pragma_table_info(m.tbl_name) p WHERE m.type = "table" AND p.name = "ocel_id" GROUP BY m.tbl_name;""" + curs.execute(query) + res = curs.fetchall() + + ret = True + for el in res: + if el[1] != 1: + ret = False + break + + return ret + + +def const_11_existence_ocel_id_ev_type_spec_tables(curs): + query = """SELECT m.tbl_name, Count(*) FROM sqlite_master m JOIN event_map_type ty on m.tbl_name = "event_" || ty.ocel_type_map JOIN pragma_table_info(m.tbl_name) p WHERE m.type = "table" AND p.name = "ocel_id" GROUP BY m.tbl_name;""" + curs.execute(query) + res = curs.fetchall() + + ret = True + for el in res: + if el[1] != 1: + ret = False + break + + return ret + + +def const_12_existence_type_ocel_time_obj_type_spec_tables(curs): + query = """SELECT m.tbl_name, Count(*) FROM sqlite_master m JOIN object_map_type ty on m.tbl_name = "object_" || ty.ocel_type_map JOIN pragma_table_info(m.tbl_name) p WHERE m.type = "table" AND p.name = "ocel_time" AND p.type = "TIMESTAMP" GROUP BY m.tbl_name;""" + curs.execute(query) + res = curs.fetchall() + + ret = True + for el in res: + if el[1] != 1: + ret = False + break + + return ret + + +def const_13_existence_type_ocel_time_ev_type_spec_tables(curs): + query = """SELECT m.tbl_name, Count(*) FROM sqlite_master m JOIN event_map_type ty on m.tbl_name = "event_" || ty.ocel_type_map JOIN pragma_table_info(m.tbl_name) p WHERE m.type = "table" AND p.name = "ocel_time" AND p.type = "TIMESTAMP" GROUP BY m.tbl_name;""" + curs.execute(query) + res = curs.fetchall() + + ret = True + for el in res: + if el[1] != 1: + ret = False + break + + return ret + + +def const_14_primary_key_object_event_map_type_tables(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM sqlite_master m JOIN pragma_table_info(m.tbl_name) p WHERE m.type = "table" AND m.tbl_name IN ("object_map_type", "event_map_type") AND p.name = "ocel_type" AND p.pk > 0);""" + curs.execute(query) + res = curs.fetchall() + + ret = True + for el in res: + if el[0] != 2: + ret = False + break + + return ret + + +def const_15_primary_key_object_event_tables(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM sqlite_master m JOIN pragma_table_info(m.tbl_name) p WHERE m.type = "table" AND m.tbl_name IN ("object", "event") AND p.name = "ocel_id" AND p.pk > 0);""" + curs.execute(query) + res = curs.fetchall() + + ret = True + for el in res: + if el[0] != 2: + ret = False + break + + return ret + + +def const_16_primary_key_event_object_table(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM sqlite_master m JOIN pragma_table_info(m.tbl_name) p WHERE m.type = "table" AND m.tbl_name = "event_object" AND p.name IN ("ocel_event_id", "ocel_object_id", "ocel_qualifier") AND p.pk > 0);""" + curs.execute(query) + res = curs.fetchall() + + ret = True + for el in res: + if el[0] != 3: + ret = False + break + + return ret + + +def const_17_primary_key_object_object_table(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM sqlite_master m JOIN pragma_table_info(m.tbl_name) p WHERE m.type = "table" AND m.tbl_name = "object_object" AND p.name IN ("ocel_source_id", "ocel_target_id", "ocel_qualifier") AND p.pk > 0);""" + curs.execute(query) + res = curs.fetchall() + + ret = True + for el in res: + if el[0] != 3: + ret = False + break + + return ret + + +def const_18_primary_key_event_type_spec_tables(curs): + query = """SELECT m.tbl_name, sum(p.pk) FROM sqlite_master m JOIN event_map_type ty on m.tbl_name = "event_" || ty.ocel_type_map JOIN pragma_table_info(m.tbl_name) p WHERE m.type = "table" AND p.name = "ocel_id" GROUP BY m.tbl_name;""" + curs.execute(query) + res = curs.fetchall() + + ret = True + for el in res: + if el[1] != 1: + ret = False + break + + return ret + + +def const_19_foreign_key_event(curs): + query = """SELECT Count(*) FROM (SELECT * from pragma_foreign_key_list("event") p WHERE p."table" = "event_map_type" AND p."from" = "ocel_type" AND p."to" = "ocel_type");""" + curs.execute(query) + res0 = curs.fetchone() + + return res0[0] == 1 + + +def const_20_foreign_key_object(curs): + query = """SELECT Count(*) FROM (SELECT * from pragma_foreign_key_list("object") p WHERE p."table" = "object_map_type" AND p."from" = "ocel_type" AND p."to" = "ocel_type");""" + curs.execute(query) + res0 = curs.fetchone() + + return res0[0] == 1 + + +def const_21_foreign_key_event_object(curs): + query = """SELECT Count(*) FROM (SELECT * from pragma_foreign_key_list("event_object") p WHERE p."table" = "event" AND p."from" = "ocel_event_id" AND p."to" = "ocel_id");""" + curs.execute(query) + res0 = curs.fetchone() + + query = """SELECT Count(*) FROM (SELECT * from pragma_foreign_key_list("event_object") p WHERE p."table" = "object" AND p."from" = "ocel_object_id" AND p."to" = "ocel_id");""" + curs.execute(query) + res1 = curs.fetchone() + + return res0[0] == 1 and res1[0] == 1 + + +def const_22_foreign_key_object_object(curs): + query = """SELECT Count(*) FROM (SELECT * from pragma_foreign_key_list("object_object") p WHERE p."table" = "object" AND p."from" = "ocel_source_id" AND p."to" = "ocel_id");""" + curs.execute(query) + res0 = curs.fetchone() + + query = """SELECT Count(*) FROM (SELECT * from pragma_foreign_key_list("object_object") p WHERE p."table" = "object" AND p."from" = "ocel_target_id" AND p."to" = "ocel_id");""" + curs.execute(query) + res1 = curs.fetchone() + + return res0[0] == 1 and res1[0] == 1 + + +def const_23_foreign_key_event_type_specific(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM (SELECT tbl_name FROM sqlite_master WHERE type = "table") m JOIN event_map_type ty on m.tbl_name = "event_" || ty.ocel_type_map LEFT OUTER JOIN pragma_foreign_key_list(m.tbl_name) p ON p."table" = "event" AND p."from" = "ocel_id" AND p."to" = "ocel_id" WHERE p."table" IS NULL)""" + curs.execute(query) + res0 = curs.fetchone() + + return res0[0] == 0 + + +def const_24_foreign_key_object_type_specific(curs): + query = """SELECT Count(*) FROM (SELECT m.tbl_name, p.* FROM (SELECT tbl_name FROM sqlite_master WHERE type = "table") m JOIN object_map_type ty on m.tbl_name = "object_" || ty.ocel_type_map LEFT OUTER JOIN pragma_foreign_key_list(m.tbl_name) p ON p."table" = "object" AND p."from" = "ocel_id" AND p."to" = "ocel_id" WHERE p."table" IS NULL)""" + curs.execute(query) + res0 = curs.fetchone() + + return res0[0] == 0 + + +constraints = { + "const_1_existence_type_independent_tables": const_1_existence_type_independent_tables, + "const_2_existence_object_type_tables_map_obj_types": const_2_existence_object_type_tables_map_obj_types, + "const_3_existence_event_type_tables_map_ev_types": const_3_existence_event_type_tables_map_ev_types, + "const_4_ocel_type_column": const_4_ocel_type_column, + "const_5_ocel_type_map": const_5_ocel_type_map, + "const_6_ocel_id": const_6_ocel_id, + "const_7_ocel_qualifier": const_7_ocel_qualifier, + "const_8_event_object_fields": const_8_event_object_fields, + "const_9_object_object_fields": const_9_object_object_fields, + "const_10_existence_ocel_id_obj_type_spec_tables": const_10_existence_ocel_id_obj_type_spec_tables, + "const_11_existence_ocel_id_ev_type_spec_tables": const_11_existence_ocel_id_ev_type_spec_tables, + "const_12_existence_type_ocel_time_obj_type_spec_tables": const_12_existence_type_ocel_time_obj_type_spec_tables, + "const_13_existence_type_ocel_time_ev_type_spec_tables": const_13_existence_type_ocel_time_ev_type_spec_tables, + "const_14_primary_key_object_event_map_type_tables": const_14_primary_key_object_event_map_type_tables, + "const_15_primary_key_object_event_tables": const_15_primary_key_object_event_tables, + "const_16_primary_key_event_object_table": const_16_primary_key_event_object_table, + "const_17_primary_key_object_object_table": const_17_primary_key_object_object_table, + "const_18_primary_key_event_type_spec_tables": const_18_primary_key_event_type_spec_tables, + "const_19_foreign_key_event": const_19_foreign_key_event, + "const_20_foreign_key_object": const_20_foreign_key_object, + "const_21_foreign_key_event_object": const_21_foreign_key_event_object, + "const_22_foreign_key_object_object": const_22_foreign_key_object_object, + "const_23_foreign_key_event_type_specific": const_23_foreign_key_event_type_specific, + "const_24_foreign_key_object_type_specific": const_24_foreign_key_object_type_specific, +} + + +def apply(file_path: str) -> Tuple[Collection[str], Collection[str]]: + """ + Validates the relational schema of an OCEL 2.0 SQLite database + + Parameters + ---------------- + file_path + Path to the OCEL 2.0 SQLite database + + Returns + ---------------- + satisfied + List of satisfied constraints + unsatisfied + List of unsatisfied constraints + """ + import sqlite3 + + conn = sqlite3.connect(file_path) + curs = conn.cursor() + + satisfied = [] + unsatisfied = [] + + for c in constraints: + res = constraints[c](curs) + if res: + satisfied.append(c) + else: + unsatisfied.append(c) + + curs.close() + conn.close() + + return satisfied, unsatisfied diff --git a/pm4py/pm4py/objects/ocel/validation/xmlocel.py b/pm4py/pm4py/objects/ocel/validation/xmlocel.py new file mode 100644 index 0000000000000000000000000000000000000000..9d596ae6bbcf720c8dfb5303cd15c15c8810044a --- /dev/null +++ b/pm4py/pm4py/objects/ocel/validation/xmlocel.py @@ -0,0 +1,32 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util + + +def apply(input_path, validation_path, parameters=None): + if not importlib.util.find_spec("lxml"): + raise Exception("please install lxml in order to validate an XMLOCEL file.") + + import lxml.etree + + if parameters is None: + parameters = {} + + xml_file = lxml.etree.parse(input_path) + xml_validator = lxml.etree.XMLSchema(file=validation_path) + is_valid = xml_validator.validate(xml_file) + return is_valid diff --git a/pm4py/pm4py/objects/org/__init__.py b/pm4py/pm4py/objects/org/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1d72d7500f4281ab11e874ec258553ed1b72466f --- /dev/null +++ b/pm4py/pm4py/objects/org/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.org import roles, sna diff --git a/pm4py/pm4py/objects/org/roles/__init__.py b/pm4py/pm4py/objects/org/roles/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..dd672b0d7ab5eeba2ea7860b97e2bd0e016dfe17 --- /dev/null +++ b/pm4py/pm4py/objects/org/roles/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.org.roles import obj diff --git a/pm4py/pm4py/objects/org/roles/obj.py b/pm4py/pm4py/objects/org/roles/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..caa7d024a12b61d46cd843ed72da96f77aba8381 --- /dev/null +++ b/pm4py/pm4py/objects/org/roles/obj.py @@ -0,0 +1,32 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import List, Dict + + +class Role(object): + activities: List[str] + originator_importance = Dict[str, float] + + def __init__(self, activities: List[str], originator_importance: Dict[str, float]): + self.activities = activities + self.originator_importance = originator_importance + + def __repr__(self): + return "Activities: " + str(self.activities) + " Originators importance " + str(self.originator_importance) + + def __str__(self): + return "Activities: " + str(self.activities) + " Originators importance " + str(self.originator_importance) diff --git a/pm4py/pm4py/objects/org/sna/__init__.py b/pm4py/pm4py/objects/org/sna/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..83df0b0b1aab361c05c4c1fe42ffaf9d04b6e9d9 --- /dev/null +++ b/pm4py/pm4py/objects/org/sna/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.org.sna import obj diff --git a/pm4py/pm4py/objects/org/sna/obj.py b/pm4py/pm4py/objects/org/sna/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..2fa69be6880ee0e65933c2282ff11f41c1f857c8 --- /dev/null +++ b/pm4py/pm4py/objects/org/sna/obj.py @@ -0,0 +1,26 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Dict, Tuple + + +class SNA(object): + connections : Dict[Tuple[str, str], float] + is_directed : bool + + def __init__(self, connections: Dict[Tuple[str, str], int], is_directed: bool): + self.connections = connections + self.is_directed = is_directed diff --git a/pm4py/pm4py/objects/petri_net/__init__.py b/pm4py/pm4py/objects/petri_net/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..87064cc0e11f4368c212c2f57e4735f49248ee51 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.petri_net import obj, properties, semantics, utils, saw_net, stochastic diff --git a/pm4py/pm4py/objects/petri_net/data_petri_nets/__init__.py b/pm4py/pm4py/objects/petri_net/data_petri_nets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/data_petri_nets/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/objects/petri_net/data_petri_nets/data_marking.py b/pm4py/pm4py/objects/petri_net/data_petri_nets/data_marking.py new file mode 100644 index 0000000000000000000000000000000000000000..f78f10b459e935d3fa33c0097c56cc3f6d638851 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/data_petri_nets/data_marking.py @@ -0,0 +1,28 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.obj import Marking + + +class DataMarking(Marking): + def __init__(self, marking=None): + Marking.__init__(self, marking) + self.data_dict = {} + + def __repr__(self): + # return str([str(p.name) + ":" + str(self.get(p)) for p in self.keys()]) + # The previous representation had a bug, it took into account the order of the places with tokens + return str([str(p.name) + ":" + str(self.get(p)) for p in sorted(list(self.keys()), key=lambda x: x.name)]) + " " + str(self.data_dict) diff --git a/pm4py/pm4py/objects/petri_net/data_petri_nets/semantics.py b/pm4py/pm4py/objects/petri_net/data_petri_nets/semantics.py new file mode 100644 index 0000000000000000000000000000000000000000..f9f8db537d22e453fb9b34714328c00b4d59ec6b --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/data_petri_nets/semantics.py @@ -0,0 +1,209 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +from pm4py.objects.petri_net import properties as petri_properties +from pm4py.objects.petri_net.sem_interface import Semantics +import re + + +security_pattern = re.compile(r'[.]|\\x[0-9a-fA-F]+') + + +class DataPetriNetSemantics(Semantics): + def is_enabled(self, t, pn, m, **kwargs): + """ + Verifies whether a given transition is enabled in a given Petri net and marking + + Parameters + ---------- + :param t: transition to check + :param pn: Petri net + :param m: marking to check + :param e: associated event (optional, as keyword argument) + + Returns + ------- + :return: true if enabled, false otherwise + """ + e = kwargs["e"] if "e" in kwargs else {} + return is_enabled(t, pn, m, e) + + def execute(self, t, pn, m, **kwargs): + """ + Executes a given transition in a given Petri net, the given data marking and the associated event + + Parameters + ---------- + :param t: transition to execute + :param pn: Petri net + :param m: marking to use + :param e: associated event (optional, as keyword argument) + + Returns + ------- + :return: newly reached marking if :param t: is enabled, None otherwise + """ + e = kwargs["e"] if "e" in kwargs else {} + return execute(t, pn, m, e) + + def weak_execute(self, t, pn, m, **kwargs): + """ + Executes a given transition in a given Petri net, the given data marking and the associated event, + even if not fully enabled + + Parameters + ---------- + :param t: transition to execute + :param pn: Petri net + :param m: marking to use + :param e: associated event (optional, as keyword argument) + + Returns + ------- + :return: newly reached marking + """ + e = kwargs["e"] if "e" in kwargs else {} + return weak_execute(t, m, e) + + def enabled_transitions(self, pn, m, **kwargs): + """ + Returns a set of enabled transitions in a Petri net, the given data marking and the associated event + + Parameters + ---------- + :param pn: Petri net + :param m: marking of the pn + :param e: associated event (optional, as keyword argument) + + Returns + ------- + :return: set of enabled transitions + """ + e = kwargs["e"] if "e" in kwargs else {} + return enabled_transitions(pn, m, e) + + +def check_guard_safety(guard): + """ + Checks the security of a guard before evaluating that + + Parameters + ---------------- + guard + Guard + + Returns + ---------------- + safety + True if the guard is safe to execute, False otherwise + """ + return not security_pattern.search(guard) + + +def evaluate_guard(guard, read_variables, data): + """ + Evaluates a data Petri net guard given the current data + + Parameters + ------------------ + guard + Guard + read_variables + Read variables + + Returns + ------------------ + boolean + Boolean value + """ + guard = guard.replace("&&", " and ").replace("||", " or ").replace("true", "True").replace("false", "False") + try: + dct = {} + for k in read_variables: + dct[k] = None + for k, v in data.items(): + dct[k] = v + if check_guard_safety(guard): + ret = eval(guard, dct) + return ret + return False + except: + # the guard could not be evaluated (for example, given missing data) + return False + + + +# 29/08/2021: the following methods have been incapsulated in the DataPetriNetSemantics class. +# the long term idea is to remove them. However, first we need to adapt the existing code to the new +# structure. Moreover, for performance reason, it is better to leave the code here, without having +# to instantiate a DataPetriNetSemantics object. +def is_enabled(t, pn, m, e): + if t not in pn.transitions: + return False + else: + for a in t.in_arcs: + if m[a.source] < a.weight: + return False + + if petri_properties.TRANS_GUARD in t.properties: + guard = t.properties[petri_properties.TRANS_GUARD] + read_variables = t.properties[petri_properties.READ_VARIABLE] if petri_properties.READ_VARIABLE in t.properties else [] + data = copy.copy(m.data_dict) + data.update(e) + evaluate_guard(guard, read_variables, data) + + return True + + +def execute(t, pn, m, e): + if not is_enabled(t, pn, m, e): + return None + + m_out = copy.copy(m) + for a in t.in_arcs: + m_out[a.source] -= a.weight + if m_out[a.source] == 0: + del m_out[a.source] + + for a in t.out_arcs: + m_out[a.target] += a.weight + + m_out.data_dict.update(e) + + return m_out + + +def weak_execute(t, m, e): + m_out = copy.copy(m) + for a in t.in_arcs: + m_out[a.source] -= a.weight + if m_out[a.source] <= 0: + del m_out[a.source] + for a in t.out_arcs: + m_out[a.target] += a.weight + + m_out.data_dict.update(e) + + return m_out + + +def enabled_transitions(pn, m, e): + enabled = set() + for t in pn.transitions: + if is_enabled(t, pn, m, e): + enabled.add(t) + return enabled diff --git a/pm4py/pm4py/objects/petri_net/exporter/__init__.py b/pm4py/pm4py/objects/petri_net/exporter/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2673ab5802a696da6a07a601f66046f0b9ab2f18 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/exporter/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.exporter import variants, exporter diff --git a/pm4py/pm4py/objects/petri_net/exporter/exporter.py b/pm4py/pm4py/objects/petri_net/exporter/exporter.py new file mode 100644 index 0000000000000000000000000000000000000000..8dd22a9cd74bd0554df9a70a63522fa7005995ab --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/exporter/exporter.py @@ -0,0 +1,75 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.petri_net.exporter.variants import pnml +from pm4py.util import exec_utils + + +class Variants(Enum): + PNML = pnml + + +PNML = Variants.PNML + + +def apply(net, initial_marking, output_filename, final_marking=None, variant=PNML, parameters=None): + """ + Export a Petri net along with an initial marking (and possibly a final marking) to an output file + + Parameters + ------------ + net + Petri net + initial_marking + Initial marking + output_filename + Output filename + final_marking + Final marking + variant + Variant of the algorithm, possible values: + - Variants.PNML + parameters + Parameters of the exporter + """ + return exec_utils.get_variant(variant).export_net(net, initial_marking, output_filename, + final_marking=final_marking, parameters=parameters) + + +def serialize(net, initial_marking, final_marking=None, variant=PNML): + """ + Serialize a Petri net along with an initial marking (and possibly a final marking) to a binary PNML string + + Parameters + ------------ + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + variant + Variant of the algorithm, possible values: + - Variants.PNML + + Returns + ------------- + serialization + Binary string (BPMN 2.0 XML standard) + """ + return exec_utils.get_variant(variant).export_petri_as_string(net, initial_marking, final_marking=final_marking) diff --git a/pm4py/pm4py/objects/petri_net/exporter/variants/__init__.py b/pm4py/pm4py/objects/petri_net/exporter/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..780ab39b2680df8d30cab82aeec6cfb1b764ff81 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/exporter/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.exporter.variants import pnml diff --git a/pm4py/pm4py/objects/petri_net/exporter/variants/pnml.py b/pm4py/pm4py/objects/petri_net/exporter/variants/pnml.py new file mode 100644 index 0000000000000000000000000000000000000000..708a0603b60ae028a9eb4de79bf1d9b5f33bd6e2 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/exporter/variants/pnml.py @@ -0,0 +1,280 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import uuid + +from lxml import etree + +from pm4py.objects.petri_net.obj import Marking +from pm4py.objects.petri_net.obj import PetriNet, ResetNet, InhibitorNet +from pm4py.objects.petri_net import properties as petri_properties +from pm4py.util import constants, exec_utils +from enum import Enum + + +class Parameters(Enum): + ENCODING = "encoding" + + +def export_petri_tree(petrinet, marking, final_marking=None, export_prom5=False, parameters=None): + """ + Export a Petrinet to a XML tree + + Parameters + ---------- + petrinet: :class:`pm4py.entities.petri.petrinet.PetriNet` + Petri net + marking: :class:`pm4py.entities.petri.petrinet.Marking` + Marking + final_marking: :class:`pm4py.entities.petri.petrinet.Marking` + Final marking (optional) + export_prom5 + Enables exporting PNML files in a format that is ProM5-friendly + parameters + Other parameters of the algorithm + + Returns + ---------- + tree + XML tree + """ + if parameters is None: + parameters = {} + + if final_marking is None: + final_marking = Marking() + + root = etree.Element("pnml") + net = etree.SubElement(root, "net") + net.set("id", petrinet.name) + netname = etree.SubElement(net, "name") + netnametext = etree.SubElement(netname, "text") + netnametext.text = petrinet.name + net.set("type", "http://www.pnml.org/version-2009/grammar/pnmlcoremodel") + if export_prom5 is True: + page = net + else: + page = etree.SubElement(net, "page") + page.set("id", "n0") + places_map = {} + for place in petrinet.places: + places_map[place] = place.name + pl = etree.SubElement(page, "place") + pl.set("id", place.name) + pl_name = etree.SubElement(pl, "name") + pl_name_text = etree.SubElement(pl_name, "text") + pl_name_text.text = place.properties[ + constants.PLACE_NAME_TAG] if constants.PLACE_NAME_TAG in place.properties else place.name + if place in marking: + pl_initial_marking = etree.SubElement(pl, "initialMarking") + pl_initial_marking_text = etree.SubElement(pl_initial_marking, "text") + pl_initial_marking_text.text = str(marking[place]) + if constants.LAYOUT_INFORMATION_PETRI in place.properties: + graphics = etree.SubElement(pl, "graphics") + position = etree.SubElement(graphics, "position") + position.set("x", str(place.properties[constants.LAYOUT_INFORMATION_PETRI][0][0])) + position.set("y", str(place.properties[constants.LAYOUT_INFORMATION_PETRI][0][1])) + dimension = etree.SubElement(graphics, "dimension") + dimension.set("x", str(place.properties[constants.LAYOUT_INFORMATION_PETRI][1][0])) + dimension.set("y", str(place.properties[constants.LAYOUT_INFORMATION_PETRI][1][1])) + transitions_map = {} + for transition in petrinet.transitions: + transitions_map[transition] = transition.name + trans = etree.SubElement(page, "transition") + trans.set("id", transition.name) + trans_name = etree.SubElement(trans, "name") + trans_text = etree.SubElement(trans_name, "text") + if constants.LAYOUT_INFORMATION_PETRI in transition.properties: + graphics = etree.SubElement(trans, "graphics") + position = etree.SubElement(graphics, "position") + position.set("x", str(transition.properties[constants.LAYOUT_INFORMATION_PETRI][0][0])) + position.set("y", str(transition.properties[constants.LAYOUT_INFORMATION_PETRI][0][1])) + dimension = etree.SubElement(graphics, "dimension") + dimension.set("x", str(transition.properties[constants.LAYOUT_INFORMATION_PETRI][1][0])) + dimension.set("y", str(transition.properties[constants.LAYOUT_INFORMATION_PETRI][1][1])) + if constants.STOCHASTIC_DISTRIBUTION in transition.properties: + random_variable = transition.properties[constants.STOCHASTIC_DISTRIBUTION] + stochastic_information = etree.SubElement(trans, "toolspecific") + stochastic_information.set("tool", "StochasticPetriNet") + stochastic_information.set("version", "0.2") + distribution_type = etree.SubElement(stochastic_information, "property") + distribution_type.set("key", "distributionType") + distribution_type.text = random_variable.get_distribution_type() + if not random_variable.get_distribution_type() == "IMMEDIATE": + distribution_parameters = etree.SubElement(stochastic_information, "property") + distribution_parameters.set("key", "distributionParameters") + distribution_parameters.text = random_variable.get_distribution_parameters() + distribution_priority = etree.SubElement(stochastic_information, "property") + distribution_priority.set("key", "priority") + distribution_priority.text = str(random_variable.get_priority()) + distribution_invisible = etree.SubElement(stochastic_information, "property") + distribution_invisible.set("key", "invisible") + distribution_invisible.text = str(True if transition.label is None else False).lower() + distribution_weight = etree.SubElement(stochastic_information, "property") + distribution_weight.set("key", "weight") + distribution_weight.text = str(random_variable.get_weight()) + if transition.label is not None: + trans_text.text = transition.label + else: + trans_text.text = transition.name + tool_specific = etree.SubElement(trans, "toolspecific") + tool_specific.set("tool", "ProM") + tool_specific.set("version", "6.4") + tool_specific.set("activity", "$invisible$") + tool_specific.set("localNodeID", str(uuid.uuid4())) + if export_prom5 is True: + if transition.label is not None: + prom5_specific = etree.SubElement(trans, "toolspecific") + prom5_specific.set("tool", "ProM") + prom5_specific.set("version", "5.2") + log_event_prom5 = etree.SubElement(prom5_specific, "logevent") + event_name = transition.label.split("+")[0] + event_transition = transition.label.split("+")[1] if len( + transition.label.split("+")) > 1 else "complete" + log_event_prom5_name = etree.SubElement(log_event_prom5, "name") + log_event_prom5_name.text = event_name + log_event_prom5_type = etree.SubElement(log_event_prom5, "type") + log_event_prom5_type.text = event_transition + # specific for data Petri nets + if petri_properties.TRANS_GUARD in transition.properties: + trans.set(petri_properties.TRANS_GUARD, transition.properties[petri_properties.TRANS_GUARD]) + if petri_properties.READ_VARIABLE in transition.properties: + read_variables = transition.properties[petri_properties.READ_VARIABLE] + for rv in read_variables: + rv_el = etree.SubElement(trans, petri_properties.READ_VARIABLE) + rv_el.text = rv + if petri_properties.WRITE_VARIABLE in transition.properties: + write_variables = transition.properties[petri_properties.WRITE_VARIABLE] + for wv in write_variables: + wv_el = etree.SubElement(trans, petri_properties.WRITE_VARIABLE) + wv_el.text = wv + for arc in petrinet.arcs: + arc_el = etree.SubElement(page, "arc") + arc_el.set("id", str(hash(arc))) + if type(arc.source) is PetriNet.Place: + arc_el.set("source", str(places_map[arc.source])) + arc_el.set("target", str(transitions_map[arc.target])) + else: + arc_el.set("source", str(transitions_map[arc.source])) + arc_el.set("target", str(places_map[arc.target])) + + if arc.weight > 1: + inscription = etree.SubElement(arc_el, "inscription") + arc_weight = etree.SubElement(inscription, "text") + arc_weight.text = str(arc.weight) + + if isinstance(arc, ResetNet.ResetArc): + element = etree.SubElement(arc_el, petri_properties.ARCTYPE) + element_text = etree.SubElement(element, "text") + element_text.text = petri_properties.RESET_ARC + elif isinstance(arc, InhibitorNet.InhibitorArc): + element = etree.SubElement(arc_el, petri_properties.ARCTYPE) + element_text = etree.SubElement(element, "text") + element_text.text = petri_properties.INHIBITOR_ARC + + for prop_key in arc.properties: + if prop_key != petri_properties.ARCTYPE: + element = etree.SubElement(arc_el, prop_key) + element_text = etree.SubElement(element, "text") + element_text.text = str(arc.properties[prop_key]) + + if len(final_marking) > 0: + finalmarkings = etree.SubElement(net, "finalmarkings") + marking = etree.SubElement(finalmarkings, "marking") + + for place in final_marking: + placem = etree.SubElement(marking, "place") + placem.set("idref", place.name) + placem_text = etree.SubElement(placem, "text") + placem_text.text = str(final_marking[place]) + + # specific for data Petri nets + if petri_properties.VARIABLES in petrinet.properties: + variables = etree.SubElement(net, "variables") + for prop in petrinet.properties[petri_properties.VARIABLES]: + variable = etree.SubElement(variables, "variable") + variable.set("type", prop["type"]) + variable_name = etree.SubElement(variable, "name") + variable_name.text = prop["name"] + + tree = etree.ElementTree(root) + + return tree + + +def export_petri_as_string(petrinet, marking, final_marking=None, export_prom5=False, + parameters=None): + """ + Parameters + ---------- + petrinet: :class:`pm4py.entities.petri.petrinet.PetriNet` + Petri net + marking: :class:`pm4py.entities.petri.petrinet.Marking` + Marking + final_marking: :class:`pm4py.entities.petri.petrinet.Marking` + Final marking (optional) + export_prom5 + Enables exporting PNML files in a format that is ProM5-friendly + + Returns + ---------- + string + Petri net as string + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + # gets the XML tree + tree = export_petri_tree(petrinet, marking, final_marking=final_marking, + export_prom5=export_prom5) + + # removing default decoding (return binary string as in other parts of the application) + return etree.tostring(tree, xml_declaration=True, encoding=encoding) + + +def export_net(petrinet, marking, output_filename, final_marking=None, export_prom5=False, + parameters=None): + """ + Export a Petrinet to a PNML file + + Parameters + ---------- + petrinet: :class:`pm4py.entities.petri.petrinet.PetriNet` + Petri net + marking: :class:`pm4py.entities.petri.petrinet.Marking` + Marking + final_marking: :class:`pm4py.entities.petri.petrinet.Marking` + Final marking (optional) + output_filename: + Absolute output file name for saving the pnml file + export_prom5 + Enables exporting PNML files in a format that is ProM5-friendly + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + # gets the XML tree + tree = export_petri_tree(petrinet, marking, final_marking=final_marking, + export_prom5=export_prom5) + + # write the tree to a file + F = open(output_filename, "wb") + tree.write(F, pretty_print=True, xml_declaration=True, encoding=encoding) + F.close() diff --git a/pm4py/pm4py/objects/petri_net/importer/__init__.py b/pm4py/pm4py/objects/petri_net/importer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d8f13223a45f352557d401bd28ee362bce865667 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/importer/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.importer import variants, importer diff --git a/pm4py/pm4py/objects/petri_net/importer/importer.py b/pm4py/pm4py/objects/petri_net/importer/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..da28a8ea2550b76843e4685fa7942df53b2b37a8 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/importer/importer.py @@ -0,0 +1,61 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.petri_net.importer.variants import pnml +from pm4py.util import exec_utils + + +class Variants(Enum): + PNML = pnml + + +PNML = Variants.PNML + + +def apply(input_file_path, variant=PNML, parameters=None): + """ + Import a Petri net from a PNML file + + Parameters + ------------ + input_file_path + Input file path + parameters + Other parameters of the importer + variant + Variant of the algorithm to use, possible values: + - Variants.PNML + """ + return exec_utils.get_variant(variant).import_net(input_file_path, parameters=parameters) + + +def deserialize(petri_string, variant=PNML, parameters=None): + """ + Deserialize a text/binary string representing a Petri net in the PNML format + + Parameters + ---------- + petri_string + Petri net expressed as PNML string + variant + Variant of the algorithm to use, possible values: + - Variants.PNML + parameters + Other parameters of the algorithm + """ + return exec_utils.get_variant(variant).import_net_from_string(petri_string, parameters=parameters) diff --git a/pm4py/pm4py/objects/petri_net/importer/variants/__init__.py b/pm4py/pm4py/objects/petri_net/importer/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3f6f71e135c426a35a5b6e4e8ee06a1de9bc2296 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/importer/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.importer.variants import pnml diff --git a/pm4py/pm4py/objects/petri_net/importer/variants/pnml.py b/pm4py/pm4py/objects/petri_net/importer/variants/pnml.py new file mode 100644 index 0000000000000000000000000000000000000000..67d2e9e70fbcd86062d64ce775608ca4e2642653 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/importer/variants/pnml.py @@ -0,0 +1,359 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import time + +from lxml import etree, objectify + +from pm4py.objects.petri_net.utils import final_marking +from pm4py.objects.petri_net.obj import PetriNet, Marking, ResetNet, InhibitorNet, ResetInhibitorNet +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to +from pm4py.objects.petri_net import properties as petri_properties +from pm4py.util import constants, exec_utils +import warnings +from enum import Enum + + +class Parameters(Enum): + ENCODING = "encoding" + AUTO_GUESS_FINAL_MARKING = "auto_guess_final_marking" + RETURN_STOCHASTIC_MAP = "return_stochastic_map" + + +def import_net(input_file_path, parameters=None): + """ + Import a Petri net from a PNML file + + Parameters + ---------- + input_file_path + Input file path + parameters + Other parameters of the algorithm + + Returns + ----------- + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, None) + + parser = etree.XMLParser(remove_comments=True, encoding=encoding) + + F = open(input_file_path, "rb") + tree = objectify.parse(F, parser=parser) + F.close() + + root = tree.getroot() + + return import_net_from_xml_object(root, parameters=parameters) + + +def import_net_from_string(petri_string, parameters=None): + """ + Imports a Petri net from a string + + Parameters + ------------- + petri_string + (Binary) string representing the Petri net + parameters + Parameters of the algorithm + + Returns + ----------- + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + + if type(petri_string) is str: + petri_string = petri_string.encode(constants.DEFAULT_ENCODING) + + parser = etree.XMLParser(remove_comments=True) + root = objectify.fromstring(petri_string, parser=parser) + + return import_net_from_xml_object(root, parameters=parameters) + + +def import_net_from_xml_object(root, parameters=None): + """ + Import a Petri net from an etree XML object + + Parameters + ---------- + root + Root object of the XML + parameters + Other parameters of the algorithm: + - AUTO_GUESS_FINAL_MARKING: automatic guessing the final marking from the .pnml file + """ + if parameters is None: + parameters = {} + + auto_guess_final_marking = exec_utils.get_param_value(Parameters.AUTO_GUESS_FINAL_MARKING, parameters, True) + return_stochastic_information = exec_utils.get_param_value(Parameters.RETURN_STOCHASTIC_MAP, parameters, False) + + net = PetriNet('imported_' + str(time.time())) + marking = Marking() + fmarking = None + + nett = None + page = None + finalmarkings = None + variables = None + + stochastic_map = {} + + for child in root: + nett = child + + places_dict = {} + trans_dict = {} + + if nett is not None: + for child in nett: + if "page" in child.tag: + page = child + if "finalmarkings" in child.tag: + finalmarkings = child + if "variables" in child.tag: + variables = child + + if page is None: + page = nett + + if page is not None: + for child in page: + if "place" in child.tag: + position_X = None + position_Y = None + dimension_X = None + dimension_Y = None + place_id = child.get("id") + place_name = place_id + number = 0 + for child2 in child: + if child2.tag.endswith('name'): + for child3 in child2: + if child3.text: + place_name = child3.text + if child2.tag.endswith('initialMarking'): + for child3 in child2: + if child3.tag.endswith("text"): + number = int(child3.text) + if child2.tag.endswith('graphics'): + for child3 in child2: + if child3.tag.endswith('position'): + position_X = float(child3.get("x")) + position_Y = float(child3.get("y")) + elif child3.tag.endswith("dimension"): + dimension_X = float(child3.get("x")) + dimension_Y = float(child3.get("y")) + places_dict[place_id] = PetriNet.Place(place_id) + places_dict[place_id].properties[constants.PLACE_NAME_TAG] = place_name + net.places.add(places_dict[place_id]) + if position_X is not None and position_Y is not None and dimension_X is not None and dimension_Y is not None: + places_dict[place_id].properties[constants.LAYOUT_INFORMATION_PETRI] = ( + (position_X, position_Y), (dimension_X, dimension_Y)) + if number > 0: + marking[places_dict[place_id]] = number + del place_name + + if page is not None: + for child in page: + if child.tag.endswith("transition"): + position_X = None + position_Y = None + dimension_X = None + dimension_Y = None + trans_id = child.get("id") + trans_name = trans_id + trans_visible = True + trans_properties = {} + trans_guard = child.get("guard") + if trans_guard is not None: + trans_properties[petri_properties.TRANS_GUARD] = trans_guard + + random_variable = None + + for child2 in child: + if child2.tag.endswith("name"): + for child3 in child2: + if child3.text: + if trans_name == trans_id: + trans_name = child3.text + elif child2.tag.endswith("graphics"): + for child3 in child2: + if child3.tag.endswith("position"): + position_X = float(child3.get("x")) + position_Y = float(child3.get("y")) + elif child3.tag.endswith("dimension"): + dimension_X = float(child3.get("x")) + dimension_Y = float(child3.get("y")) + elif child2.tag.endswith("toolspecific"): + tool = child2.get("tool") + if "ProM" in tool: + activity = child2.get("activity") + if "invisible" in activity: + trans_visible = False + elif "StochasticPetriNet" in tool: + distribution_type = None + distribution_parameters = None + priority = None + weight = None + + for child3 in child2: + key = child3.get("key") + value = child3.text + + if key == "distributionType": + distribution_type = value + elif key == "distributionParameters": + distribution_parameters = value + elif key == "priority": + priority = int(value) + elif key == "weight": + weight = float(value) + elif key == "invisible": + if value.lower() == "true": + trans_visible = False + + from pm4py.objects.random_variables.random_variable import RandomVariable + + random_variable = RandomVariable() + random_variable.read_from_string(distribution_type, distribution_parameters) + random_variable.set_priority(priority) + random_variable.set_weight(weight) + elif child2.tag.endswith(petri_properties.WRITE_VARIABLE): + # property for data Petri nets + if petri_properties.WRITE_VARIABLE not in trans_properties: + trans_properties[petri_properties.WRITE_VARIABLE] = [] + trans_properties[petri_properties.WRITE_VARIABLE].append(child2.text) + elif child2.tag.endswith(petri_properties.READ_VARIABLE): + # property for data Petri nets + if petri_properties.READ_VARIABLE not in trans_properties: + trans_properties[petri_properties.READ_VARIABLE] = [] + trans_properties[petri_properties.READ_VARIABLE].append(child2.text) + + # 15/02/2021: the name associated in the PNML to invisible transitions was lost. + # at least save that as property. + if trans_visible: + trans_label = trans_name + else: + trans_label = None + + trans_dict[trans_id] = PetriNet.Transition(trans_id, trans_label) + trans_dict[trans_id].properties[constants.TRANS_NAME_TAG] = trans_name + for prop in trans_properties: + trans_dict[trans_id].properties[prop] = trans_properties[prop] + net.transitions.add(trans_dict[trans_id]) + + if random_variable is not None: + trans_dict[trans_id].properties[constants.STOCHASTIC_DISTRIBUTION] = random_variable + stochastic_map[trans_dict[trans_id]] = random_variable + + if position_X is not None and position_Y is not None and dimension_X is not None and dimension_Y is not None: + trans_dict[trans_id].properties[constants.LAYOUT_INFORMATION_PETRI] = ( + (position_X, position_Y), (dimension_X, dimension_Y)) + + if page is not None: + for child in page: + if child.tag.endswith("arc"): + arc_source = child.get("source") + arc_target = child.get("target") + arc_weight = 1 + arc_type = None + arc_properties = {} + + for arc_child in child: + if arc_child.tag.endswith("inscription"): + for text_element in arc_child: + if text_element.tag.endswith("text"): + arc_weight = int(text_element.text) + elif arc_child.tag.endswith(petri_properties.ARCTYPE): + for text_element in arc_child: + if text_element.tag.endswith("text"): + arc_type = text_element.text + + if arc_source in places_dict and arc_target in trans_dict: + if arc_type == petri_properties.INHIBITOR_ARC and not isinstance(net, InhibitorNet): + if isinstance(net, ResetNet): + net = ResetInhibitorNet(name=net.name, places=net.places, transitions=net.transitions, arcs=net.arcs, properties=net.properties) + else: + net = InhibitorNet(name=net.name, places=net.places, transitions=net.transitions, arcs=net.arcs, properties=net.properties) + if arc_type == petri_properties.RESET_ARC and not isinstance(net, ResetNet): + if isinstance(net, InhibitorNet): + net = ResetInhibitorNet(name=net.name, places=net.places, + transitions=net.transitions, arcs=net.arcs, + properties=net.properties) + else: + net = ResetNet(name=net.name, places=net.places, + transitions=net.transitions, arcs=net.arcs, + properties=net.properties) + a = add_arc_from_to(places_dict[arc_source], trans_dict[arc_target], net, weight=arc_weight, type=arc_type) + for prop in arc_properties: + a.properties[prop] = arc_properties[prop] + elif arc_target in places_dict and arc_source in trans_dict: + a = add_arc_from_to(trans_dict[arc_source], places_dict[arc_target], net, weight=arc_weight, type=arc_type) + for prop in arc_properties: + a.properties[prop] = arc_properties[prop] + + if finalmarkings is not None: + fmarking = Marking() + for child in finalmarkings: + for child2 in child: + place_id = child2.get("idref") + for child3 in child2: + if child3.tag.endswith("text"): + number = int(child3.text) + if number > 0: + fmarking[places_dict[place_id]] = number + + if variables is not None: + net.properties[petri_properties.VARIABLES] = [] + for child in variables: + variable_type = child.get("type") + variable_name = "" + for child2 in child: + if child2.tag.endswith("name"): + variable_name = child2.text + net.properties[petri_properties.VARIABLES].append({"type": variable_type, "name": variable_name}) + + if fmarking is None: + if auto_guess_final_marking: + # generate the final marking in the case has not been found + fmarking = final_marking.discover_final_marking(net) + else: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("the Petri net has been imported without a specified final marking. Please create it using the method pm4py.generate_marking") + + if return_stochastic_information: + return net, marking, fmarking, stochastic_map + + return net, marking, fmarking diff --git a/pm4py/pm4py/objects/petri_net/inhibitor_reset/__init__.py b/pm4py/pm4py/objects/petri_net/inhibitor_reset/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/inhibitor_reset/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/objects/petri_net/inhibitor_reset/semantics.py b/pm4py/pm4py/objects/petri_net/inhibitor_reset/semantics.py new file mode 100644 index 0000000000000000000000000000000000000000..45e37651c80cbf26dee31bd071a82c8448ee72f7 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/inhibitor_reset/semantics.py @@ -0,0 +1,151 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +from pm4py.objects.petri_net.sem_interface import Semantics +from pm4py.objects.petri_net.obj import ResetNet +from pm4py.objects.petri_net.obj import InhibitorNet + + +class InhibitorResetSemantics(Semantics): + def is_enabled(self, t, pn, m, **kwargs): + """ + Verifies whether a given transition is enabled in a given Petri net and marking + + Parameters + ---------- + :param t: transition to check + :param pn: Petri net + :param m: marking to check + + Returns + ------- + :return: true if enabled, false otherwise + """ + return is_enabled(t, pn, m) + + def execute(self, t, pn, m, **kwargs): + """ + Executes a given transition in a given Petri net and Marking + + Parameters + ---------- + :param t: transition to execute + :param pn: Petri net + :param m: marking to use + + Returns + ------- + :return: newly reached marking if :param t: is enabled, None otherwise + """ + return execute(t, pn, m) + + def weak_execute(self, t, pn, m, **kwargs): + """ + Execute a transition even if it is not fully enabled + + Parameters + ---------- + :param t: transition to execute + :param pn: Petri net + :param m: marking to use + + Returns + ------- + :return: newly reached marking if :param t: is enabled, None otherwise + """ + return weak_execute(t, m) + + def enabled_transitions(self, pn, m, **kwargs): + """ + Returns a set of enabled transitions in a Petri net and given marking + + Parameters + ---------- + :param pn: Petri net + :param m: marking of the pn + + Returns + ------- + :return: set of enabled transitions + """ + return enabled_transitions(pn, m) + + +# 29/08/2021: the following methods have been incapsulated in the InhibitorResetSemantics class. +# the long term idea is to remove them. However, first we need to adapt the existing code to the new +# structure. Moreover, for performance reason, it is better to leave the code here, without having +# to instantiate a InhibitorResetSemantics object. +def is_enabled(t, pn, m): + if t not in pn.transitions: + return False + else: + for a in t.in_arcs: + if isinstance(a, InhibitorNet.InhibitorArc): + if m[a.source] > 0: + return False + elif isinstance(a, ResetNet.ResetArc): + pass + elif m[a.source] < a.weight: + return False + return True + + +def execute(t, pn, m): + if not is_enabled(t, pn, m): + return None + + m_out = copy.copy(m) + for a in t.in_arcs: + if isinstance(a, ResetNet.ResetArc): + m_out[a.source] = 0 + del m_out[a.source] + elif isinstance(a, InhibitorNet.InhibitorArc): + pass + else: + m_out[a.source] -= a.weight + if m_out[a.source] == 0: + del m_out[a.source] + + for a in t.out_arcs: + m_out[a.target] += a.weight + + return m_out + + +def weak_execute(t, m): + m_out = copy.copy(m) + for a in t.in_arcs: + if isinstance(a, ResetNet.ResetArc): + m_out[a.source] = 0 + del m_out[a.source] + elif isinstance(a, InhibitorNet.InhibitorArc): + pass + else: + m_out[a.source] -= a.weight + if m_out[a.source] <= 0: + del m_out[a.source] + for a in t.out_arcs: + m_out[a.target] += a.weight + return m_out + + +def enabled_transitions(pn, m): + enabled = set() + for t in pn.transitions: + if is_enabled(t, pn, m): + enabled.add(t) + return enabled diff --git a/pm4py/pm4py/objects/petri_net/obj.py b/pm4py/pm4py/objects/petri_net/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..b8076cf774589b293525b44e04ae42ee00ee6bf0 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/obj.py @@ -0,0 +1,365 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from copy import deepcopy +from typing import Any, Collection, Dict + + +class Marking(Counter): + pass + + def __hash__(self): + return frozenset(self).__hash__() # credits egrocha + + def __eq__(self, other): + if not self.keys() == other.keys(): + return False + for p in self.keys(): + if other.get(p) != self.get(p): + return False + return True + + def __le__(self, other): + if not self.keys() <= other.keys(): + return False + for p in self.keys(): + if other.get(p) < self.get(p): + return False + return True + + def __add__(self, other): + m = Marking() + for p in self.items(): + m[p[0]] = p[1] + for p in other.items(): + m[p[0]] += p[1] + return m + + def __sub__(self, other): + m = Marking() + for p in self.items(): + m[p[0]] = p[1] + for p in other.items(): + m[p[0]] -= p[1] + if m[p[0]] == 0: + del m[p[0]] + return m + + def __repr__(self): + return str([str(p.name) + ":" + str(self.get(p)) for p in sorted(list(self.keys()), key=lambda x: x.name)]) + + def __str__(self): + return self.__repr__() + + def __deepcopy__(self, memodict={}): + marking = Marking() + memodict[id(self)] = marking + for place in self: + place_occ = self[place] + new_place = memodict[id(place)] if id(place) in memodict else PetriNet.Place(place.name, + properties=place.properties) + marking[new_place] = place_occ + return marking + + +class PetriNet(object): + class Place(object): + + def __init__(self, name, in_arcs=None, out_arcs=None, properties=None): + self.__name = name + self.__in_arcs = set() if in_arcs is None else in_arcs + self.__out_arcs = set() if out_arcs is None else out_arcs + self.__properties = dict() if properties is None else properties + + def __set_name(self, name): + self.__name = name + + def __get_name(self): + return self.__name + + def __get_out_arcs(self): + return self.__out_arcs + + def __get_in_arcs(self): + return self.__in_arcs + + def __get_properties(self): + return self.__properties + + def __repr__(self): + return str(self.name) + + def __str__(self): + return self.__repr__() + + def __eq__(self, other): + # keep the ID for now in places + return id(self) == id(other) + + def __hash__(self): + # keep the ID for now in places + return id(self) + + def __deepcopy__(self, memodict={}): + if id(self) in memodict: + return memodict[id(self)] + new_place = PetriNet.Place(self.name, properties=self.properties) + memodict[id(self)] = new_place + for arc in self.in_arcs: + new_arc = deepcopy(arc, memo=memodict) + new_place.in_arcs.add(new_arc) + for arc in self.out_arcs: + new_arc = deepcopy(arc, memo=memodict) + new_place.out_arcs.add(new_arc) + return new_place + + name = property(__get_name, __set_name) + in_arcs = property(__get_in_arcs) + out_arcs = property(__get_out_arcs) + properties = property(__get_properties) + + class Transition(object): + + def __init__(self, name, label=None, in_arcs=None, out_arcs=None, properties=None): + self.__name = name + self.__label = None if label is None else label + self.__in_arcs = set() if in_arcs is None else in_arcs + self.__out_arcs = set() if out_arcs is None else out_arcs + self.__properties = dict() if properties is None else properties + + def __set_name(self, name): + self.__name = name + + def __get_name(self): + return self.__name + + def __set_label(self, label): + self.__label = label + + def __get_label(self): + return self.__label + + def __get_out_arcs(self): + return self.__out_arcs + + def __get_in_arcs(self): + return self.__in_arcs + + def __get_properties(self): + return self.__properties + + def __repr__(self): + if self.label is None: + return "("+str(self.name)+", None)" + else: + return "("+str(self.name)+", '"+str(self.label)+"')" + + def __str__(self): + return self.__repr__() + + def __eq__(self, other): + # keep the ID for now in transitions + return id(self) == id(other) + + def __hash__(self): + # keep the ID for now in transitions + return id(self) + + def __deepcopy__(self, memodict={}): + if id(self) in memodict: + return memodict[id(self)] + new_trans = PetriNet.Transition(self.name, self.label, properties=self.properties) + memodict[id(self)] = new_trans + for arc in self.in_arcs: + new_arc = deepcopy(arc, memo=memodict) + new_trans.in_arcs.add(new_arc) + for arc in self.out_arcs: + new_arc = deepcopy(arc, memo=memodict) + new_trans.out_arcs.add(new_arc) + return new_trans + + name = property(__get_name, __set_name) + label = property(__get_label, __set_label) + in_arcs = property(__get_in_arcs) + out_arcs = property(__get_out_arcs) + properties = property(__get_properties) + + class Arc(object): + + def __init__(self, source, target, weight=1, properties=None): + if type(source) is type(target): + raise Exception('Petri nets are bipartite graphs!') + self.__source = source + self.__target = target + self.__weight = weight + self.__properties = dict() if properties is None else properties + + def __get_source(self): + return self.__source + + def __get_target(self): + return self.__target + + def __set_weight(self, weight): + self.__weight = weight + + def __get_weight(self): + return self.__weight + + def __get_properties(self): + return self.__properties + + def __repr__(self): + source_rep = repr(self.source) + target_rep = repr(self.target) + return source_rep+"->"+target_rep + + def __str__(self): + return self.__repr__() + + def __hash__(self): + return id(self) + + def __eq__(self, other): + return self.source == other.source and self.target == other.target + + def __deepcopy__(self, memodict={}): + if id(self) in memodict: + return memodict[id(self)] + new_source = memodict[id(self.source)] if id(self.source) in memodict else deepcopy(self.source, + memo=memodict) + new_target = memodict[id(self.target)] if id(self.target) in memodict else deepcopy(self.target, + memo=memodict) + memodict[id(self.source)] = new_source + memodict[id(self.target)] = new_target + new_arc = PetriNet.Arc(new_source, new_target, weight=self.weight, properties=self.properties) + memodict[id(self)] = new_arc + return new_arc + + source = property(__get_source) + target = property(__get_target) + weight = property(__get_weight, __set_weight) + properties = property(__get_properties) + + def __init__(self, name: str=None, places: Collection[Place]=None, transitions: Collection[Transition]=None, arcs: Collection[Arc]=None, properties:Dict[str, Any]=None): + self.__name = "" if name is None else name + self.__places = set() if places is None else places + self.__transitions = set() if transitions is None else transitions + self.__arcs = set() if arcs is None else arcs + self.__properties = dict() if properties is None else properties + + def __get_name(self) -> str: + return self.__name + + def __set_name(self, name): + self.__name = name + + def __get_places(self) -> Collection[Place]: + return self.__places + + def __get_transitions(self) -> Collection[Transition]: + return self.__transitions + + def __get_arcs(self) -> Collection[Arc]: + return self.__arcs + + def __get_properties(self) -> Dict[str, Any]: + return self.__properties + + def __hash__(self): + ret = 0 + for p in self.places: + ret += hash(p) + ret = ret % 479001599 + for t in self.transitions: + ret += hash(t) + ret = ret % 479001599 + return ret + + def __eq__(self, other): + # for the Petri net equality keep the ID for now + return id(self) == id(other) + + def __deepcopy__(self, memodict={}): + from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to + this_copy = PetriNet(self.name) + memodict[id(self)] = this_copy + for place in self.places: + place_copy = PetriNet.Place(place.name, properties=place.properties) + this_copy.places.add(place_copy) + memodict[id(place)] = place_copy + for trans in self.transitions: + trans_copy = PetriNet.Transition(trans.name, trans.label, properties=trans.properties) + this_copy.transitions.add(trans_copy) + memodict[id(trans)] = trans_copy + for arc in self.arcs: + add_arc_from_to(memodict[id(arc.source)], memodict[id(arc.target)], this_copy, weight=arc.weight) + return this_copy + + def __repr__(self): + ret = ["places: ["] + places_rep = [] + for place in self.places: + places_rep.append(repr(place)) + places_rep.sort() + ret.append(" " + ", ".join(places_rep) + " ") + ret.append("]\ntransitions: [") + trans_rep = [] + for trans in self.transitions: + trans_rep.append(repr(trans)) + trans_rep.sort() + ret.append(" " + ", ".join(trans_rep) + " ") + ret.append("]\narcs: [") + arcs_rep = [] + for arc in self.arcs: + arcs_rep.append(repr(arc)) + arcs_rep.sort() + ret.append(" " + ", ".join(arcs_rep) + " ") + ret.append("]") + return "".join(ret) + + def __str__(self): + return self.__repr__() + + name = property(__get_name, __set_name) + places = property(__get_places) + transitions = property(__get_transitions) + arcs = property(__get_arcs) + properties = property(__get_properties) + + +class InhibitorNet(PetriNet): + def __init__(self, name=None, places=None, transitions=None, arcs=None, properties=None): + PetriNet.__init__(self, name=name, places=places, transitions=transitions, arcs=arcs, properties=properties) + + class InhibitorArc(PetriNet.Arc): + def __init__(self, source, target, weight=1, properties=None): + PetriNet.Arc.__init__(self, source, target, weight=weight, properties=properties) + + +class ResetNet(PetriNet): + def __init__(self, name=None, places=None, transitions=None, arcs=None, properties=None): + PetriNet.__init__(self, name=name, places=places, transitions=transitions, arcs=arcs, properties=properties) + + class ResetArc(PetriNet.Arc): + def __init__(self, source, target, weight=1, properties=None): + PetriNet.Arc.__init__(self, source, target, weight=weight, properties=properties) + + +class ResetInhibitorNet(InhibitorNet, ResetNet): + def __init__(self, name=None, places=None, transitions=None, arcs=None, properties=None): + PetriNet.__init__(self, name=name, places=places, transitions=transitions, arcs=arcs, properties=properties) diff --git a/pm4py/pm4py/objects/petri_net/properties.py b/pm4py/pm4py/objects/petri_net/properties.py new file mode 100644 index 0000000000000000000000000000000000000000..aa91163dd79a8a63fbb62b9a6b0031b3b2a9b4f2 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/properties.py @@ -0,0 +1,33 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +# list of properties that can be associated to a Petri net or its entities + + +# distinguish Petri nets that are synchronous product nets +IS_SYNC_NET = "is_sync_net" +TRACE_NET_TRANS_INDEX = "trace_net_trans_index" +TRACE_NET_PLACE_INDEX = "trace_net_place_index" + +ARCTYPE = "arctype" +INHIBITOR_ARC = "inhibitor" +RESET_ARC = "reset" +STOCHASTIC_ARC = "stochastic_arc" + +TRANS_GUARD = "guard" +WRITE_VARIABLE = "writeVariable" +READ_VARIABLE = "readVariable" +VARIABLES = "variables" diff --git a/pm4py/pm4py/objects/petri_net/saw_net/__init__.py b/pm4py/pm4py/objects/petri_net/saw_net/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..55788a9773238125feced4179628529890c891a6 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/saw_net/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.petri_net.saw_net import obj, semantics, convert diff --git a/pm4py/pm4py/objects/petri_net/saw_net/convert.py b/pm4py/pm4py/objects/petri_net/saw_net/convert.py new file mode 100644 index 0000000000000000000000000000000000000000..8e0a0eae91139a4c57b0d9a5d141714538ce9b11 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/saw_net/convert.py @@ -0,0 +1,95 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.petri_net.saw_net.obj import StochasticArcWeightNet +from pm4py.objects.petri_net.stochastic.obj import StochasticPetriNet +from pm4py.objects.petri_net.saw_net.semantics import GlobalStochasticArcWeightNetSemantics as sawsem_global, LocalStochasticArcWeightNetSemantics as sawsem_local +from typing import Counter as TCounter, Tuple +from collections import deque + +def convert_saw_net_to_stochastic_net_global_semantics(saw: StochasticArcWeightNet) -> StochasticPetriNet: + sn = StochasticPetriNet() + p_map = dict() + for p in saw.places: + p_new = StochasticPetriNet.Place(p.name, properties=p.properties) + sn.places.add(p_new) + p_map[p] = p_new + + a_sums = dict() + for a in saw.arcs: + a_sums[a] = 0 + for (w, v) in a.weight_distribution.items(): + a_sums[a] = a_sums[a] + v + + for t in saw.transitions: + bindings = sawsem_global.all_legal_bindings(saw, t) + for b in bindings: + transition_weight = t.weight + t_new = StochasticPetriNet.Transition('t'+str(len(sn.transitions)),t.label) + sn.transitions.add(t_new) + for (a,w) in b: + a_new = StochasticPetriNet.Arc(t_new,p_map[a.target],w) if a.source == t else StochasticPetriNet.Arc(p_map[a.source],t_new,w) + if a.source == t: + t_new.out_arcs.add(a_new) + p_map[a.target].in_arcs.add(a_new) + else: + t_new.in_arcs.add(a_new) + p_map[a.source].out_arcs.add(a_new) + sn.arcs.add(a_new) + transition_weight = transition_weight * (a.weight_distribution[w] / a_sums[a]) + t_new.weight = transition_weight + return sn, p_map + + +def convert_saw_net_to_stochastic_net_local_semantics(saw: StochasticArcWeightNet, marking: TCounter[StochasticArcWeightNet.Place]) -> Tuple[StochasticPetriNet,TCounter[StochasticArcWeightNet.Place]]: + sn = StochasticPetriNet() + open = deque() + closed = set() + markings = dict() + markings[marking] = {p: StochasticPetriNet.Place(p.name+'-'+str(marking)) for p in marking if marking[p] > 0} + for p in markings[marking]: + sn.places.add(markings[marking][p]) + open.append(marking) + while len(open) > 0: + m = open.pop() + for t in saw.transitions: + if sawsem_local.is_enabled(saw,t,m): + for b in sawsem_local.all_enabled_bindings(saw,t,m): + m_out = sawsem_local.fire(saw,b,m) + if m_out not in markings: + markings[m_out] = {p: StochasticPetriNet.Place(p.name+'-'+str(m_out)) for p in m_out if m_out[p] > 0} + for p in markings[m_out]: + sn.places.add(markings[m_out][p]) + t_new = StochasticPetriNet.Transition(t.name + '-' + str(b), t.label, weight=t.weight * sawsem_local.amortized_priority(b)/sum([sawsem_local.amortized_priority(bb) for bb in sawsem_local.all_enabled_bindings(saw,t,m)])) + sn.transitions.add(t_new) + plcs_in = markings[m] + plcs_out = markings[m_out] + for p in m: + if m[p] > 0: + a = StochasticPetriNet.Arc(plcs_in[p],t_new,m[p]) + plcs_in[p].out_arcs.add(a) + t_new.in_arcs.add(a) + sn.arcs.add(a) + for p in m_out: + if m_out[p] > 0: + a = StochasticPetriNet.Arc(t_new,plcs_out[p],m_out[p]) + plcs_out[p].in_arcs.add(a) + t_new.out_arcs.add(a) + sn.arcs.add(a) + if m_out not in closed and m_out is not m: + open.append(m_out) + return sn, {markings[marking][p]: marking[p] for p in marking} diff --git a/pm4py/pm4py/objects/petri_net/saw_net/obj.py b/pm4py/pm4py/objects/petri_net/saw_net/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..05762057d49a3caaab2dc1043ca19e9f278a8027 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/saw_net/obj.py @@ -0,0 +1,39 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Dict, List, Tuple +from pm4py.objects.petri_net.stochastic.obj import StochasticPetriNet + + +class StochasticArcWeightNet(StochasticPetriNet): + ''' + Petri nets with stochastic arc weights. Arcs are assumed to desribe distributions of token consumption/production. + We utilize the weight attribute that is defined in the Petri net based class to store the distribution. + ''' + + class Arc(StochasticPetriNet.Arc): + + def __init__(self, source, target, weight={1: 1.0}, properties=None): + super().__init__(source, target, weight, properties) + + def __get_weight_distribution(self) -> Dict[int, float]: + return self.weight + + weight_distribution = property(__get_weight_distribution) + + + Binding = List[Tuple[Arc, int]] diff --git a/pm4py/pm4py/objects/petri_net/saw_net/semantics.py b/pm4py/pm4py/objects/petri_net/saw_net/semantics.py new file mode 100644 index 0000000000000000000000000000000000000000..029fd04fab0a851ffcc6565c62d609f553fcc49c --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/saw_net/semantics.py @@ -0,0 +1,268 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import copy +import itertools +import random +from abc import ABC, abstractclassmethod +from collections import Counter +from typing import Counter as TCounter +from typing import Generic, List, Optional, Tuple, TypeVar + +from pm4py.objects.petri_net.saw_net.obj import StochasticArcWeightNet +from pm4py.objects.petri_net.stochastic.semantics import \ + StochasticPetriNetSemantics + +N = TypeVar("N", bound=StochasticArcWeightNet) +T = TypeVar("T", bound=StochasticArcWeightNet.Transition) +P = TypeVar("P", bound=StochasticArcWeightNet.Place) +A = TypeVar("A", bound=StochasticArcWeightNet.Arc) +B = TypeVar("B", bound=StochasticArcWeightNet.Binding) + + +class StochasticArcWeightNetSemantics(StochasticPetriNetSemantics[N], Generic[N], ABC): + + @classmethod + def is_enabled(cls, pn: N, transition: T, marking: TCounter[P]) -> bool: + """ + Checks whether a given transition is enabled in a given Petri net and marking. + Every place should at least have the same number of tokens as the minimum binding that has a weight above 0 + + Parameters + ---------- + :param pn: Petri net + :param transition: transition to check + :param marking: marking to check + + Returns + ------- + :return: true if enabled, false otherwise + """ + if not transition in pn.transitions: + return False + for a in transition.in_arcs: + if marking[a.source] < min([k for k, v in a.weight_distribution.items() if v > 0]): + return False + return True + + @classmethod + def fire(cls, pn: N, binding: B, marking: TCounter[P]) -> TCounter[P]: + """fires the binding in the given marking. Does not check if the the binding is feasible (this should be handled by the invoking code) + + Args: + pn (N): saw net to use + marking (TCounter[P]): marking to use + binding (B): binding to use + + Returns: + TCounter[P]: _description_ + """ + m_out = copy.copy(marking) + for (a, w) in binding: + if isinstance(a.source, StochasticArcWeightNet.Place): + m_out[a.source] -= w + else: + m_out[a.target] += w + return m_out + + @classmethod + def all_legal_bindings(cls, pn: N, transition: T) -> List[List[Tuple[A, int]]]: + """ + Creates all possible bindings for a given input transition + + Parameters + ---------- + :param pn: Petri net + :param transition: transition to genereate all bindings for + + Returns + ------- + :return: list containing all posible bindings + """ + if transition not in pn.transitions: + return [] + else: + l = list() + for a in transition.in_arcs: + l.append([(a, k) for k, v in a.weight_distribution.items() + if v > 0]) + for a in transition.out_arcs: + l.append([(a, k) + for k, v in a.weight_distribution.items() if v > 0]) + return list(itertools.product(*l)) + + @classmethod + def all_enabled_bindings(cls, pn: N, transition: T, marking: TCounter[P]) -> List[List[Tuple[A, int]]]: + """ + Creates all possible feasible bindings for a given input transition in a given marking + + Parameters + ---------- + :param pn: Petri net + :param marking: marking to use + :param transition: transition to genereate all feasible bindings for + + Returns + ------- + :return: list containing all posible feasible bindings + """ + return list(filter(lambda b: cls.is_enabled_binding(pn, transition, b, marking), cls.all_legal_bindings(pn, transition))) + + @classmethod + def is_enabled_binding(cls, pn: N, transition: T, binding: StochasticArcWeightNet.Binding, marking: TCounter[P]) -> bool: + """ + Checks if the provided binding is enabled + + Parameters + ---------- + :param pn: Petri net + :param marking: marking to use + :param transition: transition to genereate all feasible bindings for + + Returns + ------- + :return: bool indicates if the binding is enabled + """ + if transition not in pn.transitions: + return False + places_in_bindings = set(filter(lambda x: isinstance(x, StochasticArcWeightNet.Place), [ + x for x in list(itertools.chain(*[(a.source, a.target) for (a, w) in binding]))])) + for a in transition.in_arcs: + if a.source not in places_in_bindings: + return False + for a in transition.out_arcs: + if a.target not in places_in_bindings: + return False + for (a, w) in binding: + if a.weight_distribution[w] == 0.0: + return False + if transition not in {a.source, a.target}: + return False + if transition == a.target: + if w > marking[a.source]: + return False + return True + + @classmethod + def amortized_priority(cls, binding: StochasticArcWeightNet.Binding) -> float: + """ + Computes the amortized priority (a.k.a weight) of a binding. The amortized priority is equal to the product of all individual weights of the arc weights includec in the binding. + + Args: + binding (StochasticArcWeightNet.Binding): input binding + + Returns: + float: amortized weight + """ + prod = 1 + for (a, w) in binding: + prod *= a.weight_distribution[w] + return prod + + @abstractclassmethod + def probability_of_binding(cls, pn: N, transition: T, binding: StochasticArcWeightNet.Binding, marking: TCounter[P]) -> float: + """ + Calculates the probability of firing a transition t under binding b in the net, in the given marking. + + Parameters + ---------- + :param pn: Petri net + :param transition: transition to fire + :param binding: binding to consider + :param marking: marking to use + + Returns + ------- + :return: firing probability of transition t under binding b + """ + pass + + +class LocalStochasticArcWeightNetSemantics(StochasticArcWeightNetSemantics[N], Generic[N]): + + @classmethod + def probability_of_binding(cls, pn: N, transition: T, binding: StochasticArcWeightNet.Binding, marking: TCounter[P]) -> float: + """ + Calculates the probability of firing a transition t under binding b in the net, in the given marking. + + Parameters + ---------- + :param pn: Petri net + :param transition: transition to fire + :param binding: binding to consider + :param marking: marking to use + + Returns + ------- + :return: firing probability of transition t under binding b + """ + s = 0 + for t in pn.transitions: + if cls.is_enabled(pn,t,marking): + for b in cls.all_enabled_bindings(pn,transition,marking): + s += t.weight * cls.amortized_priority(b) + + print(cls.amortized_priority(binding)) + return transition.weight * cls.amortized_priority(binding) / s + + +class GlobalStochasticArcWeightNetSemantics(StochasticArcWeightNetSemantics[N], Generic[N]): + + @classmethod + def probability_of_transition(cls, pn: N, transition: T, marking: TCounter[P]) -> float: + """ + Compute the probability of firing a transition in the net and marking. + + Args: + pn (N): Stochastic net + transition (T): transition to fire + marking (Counter[P]): marking to use + + Returns: + float: _description_ + """ + return 0.0 if not transition in pn.transitions or not cls.is_enabled(pn, transition, marking) else sum([transition.weight * cls.amortized_priority(b) for b in cls.all_enabled_bindings(pn, transition, marking)]) / sum([t.weight * cls.amortized_priority(b) for t in pn.transitions if cls.is_enabled(pn, t, marking) for b in cls.all_enabled_bindings(pn, t, marking)]) + + @classmethod + def sample_enabled_transition(cls, pn: N, marking: TCounter[P], seed: int = None) -> Optional[Tuple[T, B]]: + if seed is not None: + random.seed(seed) + bindings = list() + probs = list() + for t in [t for t in pn.transitions if cls.is_enabled(pn, t, marking)]: + for b in cls.all_enabled_bindings(pn, t, marking): + bindings.append((t, b)) + probs.append(cls.probability_of_binding(pn, t, b, marking)) + return None if len(bindings) == 0 else random.choices(bindings, probs)[0] + + @classmethod + def probability_of_binding(cls, pn: N, transition: T, binding: StochasticArcWeightNet.Binding, marking: TCounter[P]) -> float: + """ + Calculates the probability of firing a transition t under binding b in the net, in the given marking. + + Parameters + ---------- + :param pn: Petri net + :param transition: transition to fire + :param binding: binding to consider + :param marking: marking to use + + Returns + ------- + :return: firing probability of transition t under binding b + """ + return 0.0 if transition not in pn.transitions or not cls.is_enabled_binding(pn, transition, binding, marking) else (transition.weight * cls.amortized_priority(binding)) / sum([t.weight * cls.amortized_priority(b) for t in pn.transitions if cls.is_enabled(pn, t, marking) for b in cls.all_enabled_bindings(pn, t, marking)]) diff --git a/pm4py/pm4py/objects/petri_net/sem_interface.py b/pm4py/pm4py/objects/petri_net/sem_interface.py new file mode 100644 index 0000000000000000000000000000000000000000..13007f7355dd7b87faf8489b5c5d5906129242d9 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/sem_interface.py @@ -0,0 +1,35 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import deprecation + +class Semantics(object): + @deprecation.deprecated("2.3.0", "3.0.0", details="this method will be removed, use PetriNetSemantics.is_enabled() instead") + def is_enabled(self, t, pn, m, **kwargs): + pass + + @deprecation.deprecated("2.3.0", "3.0.0", details="this method will be removed, use PetriNetSemantics.fire() instead") + def execute(self, t, pn, m, **kwargs): + pass + + @deprecation.deprecated("2.3.0", "3.0.0", details="this method will be removed, use PetriNetSemantics.fire() instead") + def weak_execute(self, t, pn, m, **kwargs): + pass + + @deprecation.deprecated("2.3.0", "3.0.0", details="this method will be removed") + def enabled_transitions(self, pn, m, **kwargs): + pass diff --git a/pm4py/pm4py/objects/petri_net/semantics.py b/pm4py/pm4py/objects/petri_net/semantics.py new file mode 100644 index 0000000000000000000000000000000000000000..1b2adedd29f482a340f80411a4e671fe137bea4c --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/semantics.py @@ -0,0 +1,183 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +from typing import Counter, Generic, TypeVar +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.objects.petri_net.sem_interface import Semantics + +N = TypeVar("N", bound=PetriNet) +T = TypeVar("T", bound=PetriNet.Transition) +P = TypeVar("P", bound=PetriNet.Place) + + +class PetriNetSemantics(Generic[N]): + + @classmethod + def is_enabled(cls, pn: N, transition: T, marking: Counter[P]) -> bool: + """ + Checks whether a given transition is enabled in a given Petri net and marking + + Parameters + ---------- + :param pn: Petri net + :param transition: transition to check + :param marking: marking to check + + Returns + ------- + :return: true if enabled, false otherwise + """ + if transition not in pn.transitions: + return False + else: + for a in transition.in_arcs: + if marking[a.source] < a.weight: + return False + return True + + @classmethod + def fire(cls, pn: N, transition: T, marking: Counter[P]) -> Counter[P]: + """ + Execute a transition + For performance reasons, the algorithm method not check if the transition is enabled, i.e., this should be performed by the invoking algorithm (if needed). Hence, markings can become negative. + + Parameters + ---------- + :param pn: Petri net + :param transition: transition to execute + :param marking: marking to use + + Returns + ------- + :return: newly reached marking + """ + m_out = copy.copy(marking) + for a in transition.in_arcs: + m_out[a.source] -= a.weight + for a in transition.out_arcs: + m_out[a.target] += a.weight + return m_out + +class ClassicSemantics(Semantics): + def is_enabled(self, t, pn, m, **kwargs): + """ + Verifies whether a given transition is enabled in a given Petri net and marking + + Parameters + ---------- + :param t: transition to check + :param pn: Petri net + :param m: marking to check + + Returns + ------- + :return: true if enabled, false otherwise + """ + return is_enabled(t, pn, m) + + def execute(self, t, pn, m, **kwargs): + """ + Executes a given transition in a given Petri net and Marking + + Parameters + ---------- + :param t: transition to execute + :param pn: Petri net + :param m: marking to use + + Returns + ------- + :return: newly reached marking if :param t: is enabled, None otherwise + """ + return execute(t, pn, m) + + def weak_execute(self, t, pn, m, **kwargs): + """ + Execute a transition even if it is not fully enabled + + Parameters + ---------- + :param t: transition to execute + :param pn: Petri net + :param m: marking to use + + Returns + ------- + :return: newly reached marking if :param t: is enabled, None otherwise + """ + return weak_execute(t, m) + + + def enabled_transitions(self, pn, m, **kwargs): + """ + Returns a set of enabled transitions in a Petri net and given marking + + Parameters + ---------- + :param pn: Petri net + :param m: marking of the pn + + Returns + ------- + :return: set of enabled transitions + """ + return enabled_transitions(pn, m) + + +def is_enabled(t, pn, m): + if t not in pn.transitions: + return False + else: + for a in t.in_arcs: + if m[a.source] < a.weight: + return False + return True + + +def execute(t, pn, m): + if not is_enabled(t, pn, m): + return None + + m_out = copy.copy(m) + for a in t.in_arcs: + m_out[a.source] -= a.weight + if m_out[a.source] == 0: + del m_out[a.source] + + for a in t.out_arcs: + m_out[a.target] += a.weight + + return m_out + + +def weak_execute(t, m): + m_out = copy.copy(m) + for a in t.in_arcs: + m_out[a.source] -= a.weight + if m_out[a.source] <= 0: + del m_out[a.source] + for a in t.out_arcs: + m_out[a.target] += a.weight + return m_out + + +def enabled_transitions(pn, m): + enabled = set() + for t in pn.transitions: + if is_enabled(t, pn, m): + enabled.add(t) + return enabled diff --git a/pm4py/pm4py/objects/petri_net/stochastic/__init__.py b/pm4py/pm4py/objects/petri_net/stochastic/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ef56af9583520ca12b32bf783299189a16b89436 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/stochastic/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.petri_net.stochastic import obj, semantics diff --git a/pm4py/pm4py/objects/petri_net/stochastic/obj.py b/pm4py/pm4py/objects/petri_net/stochastic/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..eb610724f06e2ac3a157c034faceb661586eb039 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/stochastic/obj.py @@ -0,0 +1,36 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Any, Collection, Dict + +from pm4py.objects.petri_net.obj import PetriNet + + +class StochasticPetriNet(PetriNet): + + class Transition(PetriNet.Transition): + def __init__(self, name: str, label: str = None, in_arcs: Collection[PetriNet.Arc] = None, out_arcs: Collection[PetriNet.Arc] = None, weight: float = 1.0, properties: Dict[str, Any] = None): + super().__init__(name, label, in_arcs, out_arcs, properties) + self.__weight = weight + + def __set_weight(self, weight: float): + self.__weight = weight + + def __get_weight(self) -> float: + return self.__weight + + weight = property(__get_weight, __set_weight) diff --git a/pm4py/pm4py/objects/petri_net/stochastic/semantics.py b/pm4py/pm4py/objects/petri_net/stochastic/semantics.py new file mode 100644 index 0000000000000000000000000000000000000000..186f747bc92c7b094891f1c84b6b518d9baf322e --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/stochastic/semantics.py @@ -0,0 +1,67 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import random +from typing import Counter, Generic, TypeVar + +from pm4py.objects.petri_net.semantics import PetriNetSemantics +from pm4py.objects.petri_net.stochastic.obj import StochasticPetriNet + +N = TypeVar("N", bound=StochasticPetriNet) +T = TypeVar("T", bound=StochasticPetriNet.Transition) +P = TypeVar("P", bound=StochasticPetriNet.Place) + + +class StochasticPetriNetSemantics(PetriNetSemantics[N], Generic[N]): + + @classmethod + def sample_enabled_transition(cls, pn: N, marking: Counter[P], seed: int = None) -> T: + """ + Randomly samples a transition from all enabled transitions + + Parameters + ---------- + :param pn: Petri net + :param marking: marking to use + + Returns + ------- + :return: a transition sampled from the enabled transitions + """ + if seed is not None: + random.seed(seed) + enabled = list(filter(lambda t: cls.is_enabled( + pn, t, marking), [t for t in pn.transitions])) + weights = list(map(lambda t : cls.probability_of_transition(pn,t,marking), enabled)) + return random.choices(enabled, weights)[0] + + @classmethod + def probability_of_transition(cls, pn: N, transition: T, marking: Counter[P]) -> float: + """ + Compute the probability of firing a transition in the net and marking. + + Args: + pn (N): Stochastic net + transition (T): transition to fire + marking (Counter[P]): marking to use + + Returns: + float: _description_ + """ + if not transition in pn.transitions or not cls.is_enabled(pn, transition, marking): + return 0.0 + return transition.weight / sum(list(map(lambda t: t.weight, list(filter(lambda t: cls.is_enabled(pn, t, marking), [t for t in pn.transitions]))))) diff --git a/pm4py/pm4py/objects/petri_net/utils/__init__.py b/pm4py/pm4py/objects/petri_net/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..abc96434622d494890536067f0d2a6659b0107d7 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/__init__.py @@ -0,0 +1,19 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.utils import align_utils, check_soundness, consumption_matrix, decomposition, \ + embed_stochastic_map, explore_path, final_marking, incidence_matrix, initial_marking, performance_map, petri_utils, \ + projection, reachability_graph, reduction, synchronous_product diff --git a/pm4py/pm4py/objects/petri_net/utils/align_utils.py b/pm4py/pm4py/objects/petri_net/utils/align_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..a3a660f33278b0bb2cfd1695b36dcc4e147fc47f --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/align_utils.py @@ -0,0 +1,545 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import heapq +import sys +from copy import copy +from typing import List, Tuple + +import numpy as np + +from pm4py.objects.petri_net import semantics, properties +from pm4py.objects.petri_net.obj import Marking, PetriNet +from pm4py.util.lp import solver as lp_solver + +SKIP = '>>' +STD_MODEL_LOG_MOVE_COST = 10000 +STD_TAU_COST = 1 +STD_SYNC_COST = 0 + + +def search_path_among_sol(sync_net: PetriNet, ini: Marking, fin: Marking, + activated_transitions: List[PetriNet.Transition], skip=SKIP) -> Tuple[ + List[PetriNet.Transition], bool, int]: + """ + (Efficient method) Searches a firing sequence among the X vector that is the solution of the + (extended) marking equation + + Parameters + --------------- + sync_net + Synchronous product net + ini + Initial marking of the net + fin + Final marking of the net + activated_transitions + Transitions that have non-zero occurrences in the X vector + skip + Skip transition + + Returns + --------------- + firing_sequence + Firing sequence + reach_fm + Boolean value that tells if the final marking is reached by the firing sequence + explained_events + Number of explained events + """ + reach_fm = False + trans_empty_preset = set(t for t in sync_net.transitions if len(t.in_arcs) == 0) + trans_with_index = {} + trans_wo_index = set() + for t in activated_transitions: + if properties.TRACE_NET_TRANS_INDEX in t.properties: + trans_with_index[t.properties[properties.TRACE_NET_TRANS_INDEX]] = t + else: + trans_wo_index.add(t) + keys = sorted(list(trans_with_index.keys())) + trans_with_index = [trans_with_index[i] for i in keys] + best_tuple = (0, 0, ini, list()) + open_set = [best_tuple] + heapq.heapify(open_set) + visited = 0 + closed = set() + len_trace_with_index = len(trans_with_index) + while len(open_set) > 0: + curr = heapq.heappop(open_set) + index = -curr[0] + marking = curr[2] + if marking in closed: + continue + if index == len_trace_with_index: + reach_fm = True + if curr[0] < best_tuple[0]: + best_tuple = curr + break + if curr[0] < best_tuple[0]: + best_tuple = curr + closed.add(marking) + corr_trans = trans_with_index[index] + if corr_trans.sub_marking <= marking: + visited += 1 + new_marking = semantics.weak_execute(corr_trans, marking) + heapq.heappush(open_set, (-index-1, visited, new_marking, curr[3]+[corr_trans])) + else: + enabled = copy(trans_empty_preset) + for p in marking: + for t in p.ass_trans: + if t in trans_wo_index and t.sub_marking <= marking: + enabled.add(t) + for new_trans in enabled: + visited += 1 + new_marking = semantics.weak_execute(new_trans, marking) + heapq.heappush(open_set, (-index, visited, new_marking, curr[3]+[new_trans])) + return best_tuple[-1], reach_fm, -best_tuple[0] + + +def construct_standard_cost_function(synchronous_product_net, skip): + """ + Returns the standard cost function, which is: + * event moves: cost 1000 + * model moves: cost 1000 + * tau moves: cost 1 + * sync moves: cost 0 + :param synchronous_product_net: + :param skip: + :return: + """ + costs = {} + for t in synchronous_product_net.transitions: + if (skip == t.label[0] or skip == t.label[1]) and (t.label[0] is not None and t.label[1] is not None): + costs[t] = STD_MODEL_LOG_MOVE_COST + else: + if skip == t.label[0] and t.label[1] is None: + costs[t] = STD_TAU_COST + else: + costs[t] = STD_SYNC_COST + return costs + + +def pretty_print_alignments(alignments): + """ + Takes an alignment and prints it to the console, e.g.: + A | B | C | D | + -------------------- + A | B | C | >> | + :param alignment: + :return: Nothing + """ + if isinstance(alignments, list): + for alignment in alignments: + __print_single_alignment(alignment["alignment"]) + else: + __print_single_alignment(alignments["alignment"]) + + +def __print_single_alignment(step_list): + trace_steps = [] + model_steps = [] + max_label_length = 0 + for step in step_list: + trace_steps.append(" " + str(step[0]) + " ") + model_steps.append(" " + str(step[1]) + " ") + if len(step[0]) > max_label_length: + max_label_length = len(str(step[0])) + if len(str(step[1])) > max_label_length: + max_label_length = len(str(step[1])) + for i in range(len(trace_steps)): + if len(str(trace_steps[i])) - 2 < max_label_length: + step_length = len(str(trace_steps[i])) - 2 + spaces_to_add = max_label_length - step_length + for j in range(spaces_to_add): + if j % 2 == 0: + trace_steps[i] = trace_steps[i] + " " + else: + trace_steps[i] = " " + trace_steps[i] + print(trace_steps[i], end='|') + divider = "" + length_divider = len(trace_steps) * (max_label_length + 3) + for i in range(length_divider): + divider += "-" + print('\n' + divider) + for i in range(len(model_steps)): + if len(model_steps[i]) - 2 < max_label_length: + step_length = len(model_steps[i]) - 2 + spaces_to_add = max_label_length - step_length + for j in range(spaces_to_add): + if j % 2 == 0: + model_steps[i] = model_steps[i] + " " + else: + model_steps[i] = " " + model_steps[i] + + print(model_steps[i], end='|') + print('\n\n') + + +def add_markings(curr, add): + m = Marking() + for p in curr.items(): + m[p[0]] = p[1] + for p in add.items(): + m[p[0]] += p[1] + if m[p[0]] == 0: + del m[p[0]] + return m + + +def __get_alt(open_set, new_marking): + for item in open_set: + if item.m == new_marking: + return item + + +def __reconstruct_alignment(state, visited, queued, traversed, ret_tuple_as_trans_desc=False, lp_solved=0): + alignment = list() + if state.p is not None and state.t is not None: + parent = state.p + if ret_tuple_as_trans_desc: + alignment = [(state.t.name, state.t.label)] + while parent.p is not None: + alignment = [(parent.t.name, parent.t.label)] + alignment + parent = parent.p + else: + alignment = [state.t.label] + while parent.p is not None: + alignment = [parent.t.label] + alignment + parent = parent.p + return {'alignment': alignment, 'cost': state.g, 'visited_states': visited, 'queued_states': queued, + 'traversed_arcs': traversed, 'lp_solved': lp_solved} + + +def __derive_heuristic(incidence_matrix, cost_vec, x, t, h): + x_prime = x.copy() + x_prime[incidence_matrix.transitions[t]] -= 1 + return max(0, h - cost_vec[incidence_matrix.transitions[t]]), x_prime + + +def __is_model_move(t, skip): + return t.label[0] == skip and t.label[1] != skip + + +def __is_log_move(t, skip): + return t.label[0] != skip and t.label[1] == skip + + +def __trust_solution(x): + for v in x: + if v < -0.001: + return False + return True + + +def __compute_exact_heuristic_new_version(sync_net, a_matrix, h_cvx, g_matrix, cost_vec, incidence_matrix, + marking, fin_vec, variant, use_cvxopt=False, strict=True): + m_vec = incidence_matrix.encode_marking(marking) + b_term = [i - j for i, j in zip(fin_vec, m_vec)] + b_term = np.matrix([x * 1.0 for x in b_term]).transpose() + + if not strict: + g_matrix = np.vstack([g_matrix, a_matrix]) + h_cvx = np.vstack([h_cvx, b_term]) + a_matrix = np.zeros((0, a_matrix.shape[1])) + b_term = np.zeros((0, b_term.shape[1])) + + if use_cvxopt: + # not available in the latest version of PM4Py + from cvxopt import matrix + + b_term = matrix(b_term) + + parameters_solving = {"solver": "glpk"} + + sol = lp_solver.apply(cost_vec, g_matrix, h_cvx, a_matrix, b_term, parameters=parameters_solving, + variant=variant) + prim_obj = lp_solver.get_prim_obj_from_sol(sol, variant=variant) + points = lp_solver.get_points_from_sol(sol, variant=variant) + + prim_obj = prim_obj if prim_obj is not None else sys.maxsize + points = points if points is not None else [0.0] * len(sync_net.transitions) + + return prim_obj, points + + +def __get_tuple_from_queue(marking, queue): + for t in queue: + if t.m == marking: + return t + return None + + +def __vectorize_initial_final_cost(incidence_matrix, ini, fin, cost_function): + ini_vec = incidence_matrix.encode_marking(ini) + fini_vec = incidence_matrix.encode_marking(fin) + cost_vec = [0] * len(cost_function) + for t in cost_function.keys(): + cost_vec[incidence_matrix.transitions[t]] = cost_function[t] + return ini_vec, fini_vec, cost_vec + + +class SearchTuple: + # different properties of the class: + # - g => actual cost of the alignment moves + # - h => computed heuristic value + # - f => the sum of g and h, used for the A* algorithm + # - m => marking reached in the synchronous product net in the current state + # - p => parent state of the alignment (used at the end to reconstruct the alignment) + # - t => transition just visited + # - trustable => indicates if the heuristic comes from an exact solution of an (I)LP problem + # - x => solution vector of the (I)LP + def __init__(self, f, g, h, m, p, t, x, trust): + self.f = f + self.g = g + self.h = h + self.m = m + self.p = p + self.t = t + self.x = x + self.trust = trust + + def __lt__(self, other): + if self.f < other.f: + return True + elif other.f < self.f: + return False + elif self.trust and not other.trust: + return True + else: + return self.h < other.h + + def __get_firing_sequence(self): + ret = [] + if self.p is not None: + ret = ret + self.p.__get_firing_sequence() + if self.t is not None: + ret.append(self.t) + return ret + + def __repr__(self): + string_build = ["\nm=" + str(self.m), " f=" + str(self.f), ' g=' + str(self.g), " h=" + str(self.h), + " path=" + str(self.__get_firing_sequence()) + "\n\n"] + return " ".join(string_build) + + +class DijkstraSearchTuple: + def __init__(self, g, m, p, t, l): + self.g = g + self.m = m + self.p = p + self.t = t + self.l = l + + def __lt__(self, other): + if self.g < other.g: + return True + elif other.g < self.g: + return False + else: + return other.l < self.l + + def __get_firing_sequence(self): + ret = [] + if self.p is not None: + ret = ret + self.p.__get_firing_sequence() + if self.t is not None: + ret.append(self.t) + return ret + + def __repr__(self): + string_build = ["\nm=" + str(self.m), " g=" + str(self.g), + " path=" + str(self.__get_firing_sequence()) + "\n\n"] + return " ".join(string_build) + +class DijkstraSearchTupleForAntiAndMulti: + # in this version we keep the run and not the previous element + # the display is different + def __init__(self, g, m, r): + self.g = g + self.m = m + self.r = r + + def __lt__(self, other): + if self.g < other.g: + return True + elif other.g < self.g: + return False + else: + return len(other.r) < len(self.r) + + def __get_firing_sequence(self): + return self.r + + def __repr__(self): + string_build = ["\nm=" + str(self.m), " g=" + str(self.g), + " path=" + str(self.__get_firing_sequence()) + "\n\n"] + return " ".join(string_build) + +class TweakedSearchTuple: + def __init__(self, f, g, h, m, p, t, x, trust, virgin): + self.f = f + self.g = g + self.h = h + self.m = m + self.p = p + self.t = t + self.x = x + self.trust = trust + # a virgin status must be explored in its firing sequence + self.virgin = virgin + + def __lt__(self, other): + if self.f < other.f: + return True + elif other.f < self.f: + return False + elif self.virgin and not other.virgin: + return True + elif self.trust and not other.trust: + return True + else: + return self.h < other.h + + def __get_firing_sequence(self): + ret = [] + if self.p is not None: + ret = ret + self.p.__get_firing_sequence() + if self.t is not None: + ret.append(self.t) + return ret + + def __repr__(self): + string_build = ["\nm=" + str(self.m), " f=" + str(self.f), ' g=' + str(self.g), " h=" + str(self.h), + " path=" + str(self.__get_firing_sequence()) + "\n\n"] + return " ".join(string_build) + + +def get_visible_transitions_eventually_enabled_by_marking(net, marking): + """ + Get visible transitions eventually enabled by marking (passing possibly through hidden transitions) + Parameters + ---------- + net + Petri net + marking + Current marking + """ + all_enabled_transitions = sorted(list(semantics.enabled_transitions(net, marking)), + key=lambda x: (str(x.name), id(x))) + initial_all_enabled_transitions_marking_dictio = {} + all_enabled_transitions_marking_dictio = {} + for trans in all_enabled_transitions: + all_enabled_transitions_marking_dictio[trans] = marking + initial_all_enabled_transitions_marking_dictio[trans] = marking + visible_transitions = set() + visited_transitions = set() + + i = 0 + while i < len(all_enabled_transitions): + t = all_enabled_transitions[i] + marking_copy = copy(all_enabled_transitions_marking_dictio[t]) + + if repr([t, marking_copy]) not in visited_transitions: + if t.label is not None: + visible_transitions.add(t) + else: + if semantics.is_enabled(t, net, marking_copy): + new_marking = semantics.execute(t, net, marking_copy) + new_enabled_transitions = sorted(list(semantics.enabled_transitions(net, new_marking)), + key=lambda x: (str(x.name), id(x))) + for t2 in new_enabled_transitions: + all_enabled_transitions.append(t2) + all_enabled_transitions_marking_dictio[t2] = new_marking + visited_transitions.add(repr([t, marking_copy])) + i = i + 1 + + return visible_transitions + +def discountedEditDistance(s1,s2,exponent=2, modeled=True): + ''' + Fast implementation of the discounted distance + Inspired from the faster version of the edit distance + ''' + #print(s1,s2) + if len(s1) < len(s2): + return discountedEditDistance(s2, s1,exponent=exponent,modeled=False) + + previous_row = [0] + for a in range(len(s2)): + if not modeled and (s2[a]=="tau" or s2[a]==None or s2[a][0]=="n"): + previous_row.append(previous_row[-1]) + else : + previous_row.append(previous_row[-1]+exponent**(-(a))) + for i, c1 in enumerate(s1): + if modeled: + exp1 = sum(exponent**(-(a)) for a in range(i+1) if s1[a]!="tau" and s1[a]!=None and s1[a][0]!="n") + else : + exp1 = sum(exponent**(-(a)) for a in range(i+1)) + current_row = [exp1] + for j, c2 in enumerate(s2): + + exp2 = exponent**(-(i+1 + j)) + if modeled and (c1 in ["tau", None] or c1[0]=="n" or "skip" in c1): + insertions = previous_row[j +1 ] # j+1 instead of j since previous_row and current_row are one character longer + deletions = current_row[j] + exp2 # than s2 + elif not modeled and (c2 in ["tau", None] or c2[0]=="n"): + insertions = previous_row[j +1 ] + exp2 # j+1 instead of j since previous_row and current_row are one character longer + deletions = current_row[j] + else : + insertions = previous_row[j +1 ] + exp2 # j+1 instead of j since previous_row and current_row are one character longer + deletions = current_row[j] + exp2 + if (c1 != c2): + current_row.append(min(insertions, deletions)) + else : + substitutions = previous_row[j] + current_row.append(min(insertions, deletions, substitutions)) + + previous_row = current_row + return len(s1)+len(s2),previous_row[-1] + + +def levenshtein(seq1, seq2): + ''' + Edit distance without substitution + ''' + size_x = len(seq1) + 1 + size_y = len(seq2) + 1 + matrix = np.zeros ((size_x, size_y)) + for x in range(size_x): + matrix [x, 0] = x + for y in range(size_y): + matrix [0, y] = y + + for x in range(1, size_x): + for y in range(1, size_y): + if seq1[x-1] in [None,"tau"] or seq1[x-1][0]=='n' or "skip" in seq1[x-1] or "tau" in seq1[x-1] : + matrix [x,y] = min( + matrix[x-1, y], + matrix[x,y-1] + 1 + ) + elif seq1[x-1] == seq2[y-1]: + matrix [x,y] = min( + matrix[x-1, y] + 1, + matrix[x-1, y-1], + matrix[x, y-1] + 1 + ) + else: + matrix [x,y] = min( + matrix[x-1,y] + 1, + matrix[x,y-1] + 1 + ) + return (matrix[size_x - 1, size_y - 1]) + diff --git a/pm4py/pm4py/objects/petri_net/utils/check_soundness.py b/pm4py/pm4py/objects/petri_net/utils/check_soundness.py new file mode 100644 index 0000000000000000000000000000000000000000..3d41423020b5759d602071d865dff21b8f68433d --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/check_soundness.py @@ -0,0 +1,202 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.utils.networkx_graph import create_networkx_undirected_graph +from pm4py.objects.petri_net.utils import explore_path +from pm4py.objects.petri_net import obj +from pm4py.util import nx_utils + + +def check_source_and_sink_reachability(net, unique_source, unique_sink): + """ + Checks reachability of the source and the sink place from all simulation nodes (places/transitions) + of the Petri net + + Parameters + ------------- + net + Petri net + unique_source + Unique source place of the Petri net + unique_sink + Unique sink place of the Petri net + + Returns + ------------- + boolean + Boolean value that is true if each node is in a path from the source place to the sink place + """ + graph, unique_source_corr, unique_sink_corr, inv_dictionary = create_networkx_undirected_graph(net, unique_source, + unique_sink) + if unique_source_corr is not None and unique_sink_corr is not None: + nodes_list = list(graph.nodes()) + finish_to_sink = list(nx_utils.ancestors(graph, unique_sink_corr)) + connected_to_source = list(nx_utils.descendants(graph, unique_source_corr)) + if len(finish_to_sink) == len(nodes_list) - 1 and len(connected_to_source) == len(nodes_list) - 1: + return True + return False + + +def check_source_place_presence(net): + """ + Check if there is a unique source place with empty connections + + Parameters + ------------- + net + Petri net + + Returns + ------------- + place + Unique source place (or None otherwise) + """ + count_empty_input = 0 + unique_source = None + for place in net.places: + if len(place.in_arcs) == 0: + count_empty_input = count_empty_input + 1 + unique_source = place + if count_empty_input == 1: + return unique_source + return None + + +def check_sink_place_presence(net): + """ + Check if there is a unique sink place with empty connections + + Parameters + ------------- + net + Petri net + + Returns + ------------- + place + Unique source place (or None otherwise) + """ + count_empty_output = 0 + unique_sink = None + for place in net.places: + if len(place.out_arcs) == 0: + count_empty_output = count_empty_output + 1 + unique_sink = place + if count_empty_output == 1: + return unique_sink + return None + + +def check_wfnet(net): + """ + Check if the Petri net is a workflow net + + Parameters + ------------ + net + Petri net + + Returns + ------------ + boolean + Boolean value that is true when the Petri net is a workflow net + """ + unique_source_place = check_source_place_presence(net) + unique_sink_place = check_sink_place_presence(net) + source_sink_reachability = check_source_and_sink_reachability(net, unique_source_place, unique_sink_place) + + return (unique_source_place is not None) and (unique_sink_place is not None) and source_sink_reachability + + +def check_source_sink_place_conditions(net): + """ + Check some conditions on the source/sink place important + for a sound workflow net + + Parameters + -------------- + net + Petri net + + Returns + -------------- + boolean + Boolean value (True is good) + """ + # check also that the transitions connected to the source/sink place have unique arcs + unique_source_place = check_source_place_presence(net) + unique_sink_place = check_sink_place_presence(net) + if unique_source_place is not None: + for arc in unique_source_place.out_arcs: + trans = arc.target + if len(trans.in_arcs) > 1: + return False + if unique_sink_place is not None: + for arc in unique_sink_place.in_arcs: + trans = arc.source + if len(trans.out_arcs) > 1: + return False + return True + + +def check_easy_soundness_net_in_fin_marking(net, ini, fin): + """ + Checks the easy soundness of a Petri net having the initial and the final marking + + Parameters + ------------- + net + Petri net + ini + Initial marking + fin + Final marking + + Returns + ------------- + boolean + Boolean value + """ + try: + alignment = explore_path.__search(net, ini, fin) + if alignment is not None: + return True + return False + except: + return False + + +def check_easy_soundness_of_wfnet(net): + """ + Checks the easy soundness of a workflow net + + Parameters + ------------- + net + Petri net + + Returns + ------------- + boolean + Boolean value + """ + source = list(x for x in net.places if len(x.in_arcs) == 0)[0] + sink = list(x for x in net.places if len(x.out_arcs) == 0)[0] + + ini = obj.Marking({source: 1}) + fin = obj.Marking({sink: 1}) + + return check_easy_soundness_net_in_fin_marking(net, ini, fin) diff --git a/pm4py/pm4py/objects/petri_net/utils/consumption_matrix.py b/pm4py/pm4py/objects/petri_net/utils/consumption_matrix.py new file mode 100644 index 0000000000000000000000000000000000000000..98386d324e05e62c506743dd60c57fb504b881dc --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/consumption_matrix.py @@ -0,0 +1,123 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +""" +Implements the consumption matrix as explained in the following paper: + +van Dongen, Boudewijn F. "Efficiently computing alignments." International Conference on Business Process Management. +Springer, Cham, 2018. +https://link.springer.com/chapter/10.1007/978-3-319-98648-7_12 +""" + +from typing import Dict + +import numpy as np + +from pm4py.objects.petri_net.obj import PetriNet + + +class ConsumptionMatrix(object): + def __init__(self, net: PetriNet): + """ + Constructor + + Parameters + -------------- + net + Petri net + """ + self.__place_indices = {} + self.__transition_indices = {} + self.__C = None + places = sorted([x for x in net.places], key=lambda x: (x.name, id(x))) + transitions = sorted([x for x in net.transitions], key=lambda x: (x.name, id(x))) + + for p in places: + self.__place_indices[p] = len(self.__place_indices) + for t in transitions: + self.__transition_indices[t] = len(self.__transition_indices) + self.__compute_C_matrix(net) + + def __compute_C_matrix(self, net: PetriNet): + """ + Builds the C matrix + + Parameters + --------------- + net + Petri net + """ + inv_indices = {y: x for x, y in self.__transition_indices.items()} + inv_indices = [inv_indices[i] for i in range(len(inv_indices))] + self.__C = [[0 for i in range(len(self.__transition_indices))] for j in range(len(self.__place_indices))] + for p in net.places: + outgoing_trans = [a.target for a in p.out_arcs] + self.__C[self.__place_indices[p]] = [-1 if inv_indices[i] in outgoing_trans else 0 for i in + range(len(inv_indices))] + + def __get_transition_indices(self) -> Dict[PetriNet.Transition, int]: + """ + Gets the transitions in the order in which they have been inserted in the consumption matrix + + Returns + ------------- + trans_indices + Dictionary associating to each transition an incremental number + """ + return self.__transition_indices + + def __get_place_indices(self) -> Dict[PetriNet.Place, int]: + """ + Gets the places in the order in which they have been inserted in the consumption matrix + + Returns + ------------- + place_indices + Dictionary associating to each place an incremental number + """ + return self.__place_indices + + def __get_c_matrix(self) -> np.ndarray: + """ + Gets the Numpy representation of the consumption matrix + + Returns + ------------- + C + C matrix + """ + return self.__C + + places = property(__get_place_indices) + transitions = property(__get_transition_indices) + c_matrix = property(__get_c_matrix) + + +def construct(net: PetriNet) -> ConsumptionMatrix: + """ + Construct a consumption matrix given a Petri net + + Parameters + ---------------- + net + Petri net + + Returns + --------------- + cons_mat + Consumption matrix object + """ + return ConsumptionMatrix(net) diff --git a/pm4py/pm4py/objects/petri_net/utils/decomposition.py b/pm4py/pm4py/objects/petri_net/utils/decomposition.py new file mode 100644 index 0000000000000000000000000000000000000000..2b0708fe5eb2fb7768e594822c07bcd4bef8ca65 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/decomposition.py @@ -0,0 +1,169 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import hashlib + +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to +from pm4py.util import constants, nx_utils + + +def get_graph_components(places, inv_trans, trans_dup_label, tmap): + G = nx_utils.Graph() + for x in places: + G.add_node(x) + for x in inv_trans: + G.add_node(x) + for x in trans_dup_label: + G.add_node(x) + for x in trans_dup_label: + i = 0 + while i < len(tmap[x]) - 1: + j = i + 1 + while j < len(tmap[x]): + G.add_edge(tmap[x][i].label, tmap[x][j].label) + j = j + 1 + i = i + 1 + all_inserted_val = set(places.values()).union(inv_trans.values()).union(trans_dup_label.values()) + for v1 in all_inserted_val: + for arc in v1.out_arcs: + v2 = arc.target + if v2 in all_inserted_val: + G.add_edge(v1.name, v2.name) + conn_comp = list(nx_utils.connected_components(G)) + return conn_comp + + +def decompose(net, im, fm): + places = {x.name: x for x in net.places} + inv_trans = {x.name: x for x in net.transitions if x.label is None} + tmap = {} + for t in net.transitions: + if t.label is not None: + if t.label not in tmap: + tmap[t.label] = [] + tmap[t.label].append(t) + trans_dup_label = {x.label: x for x in net.transitions if x.label is not None and len(tmap[x.label]) > 1} + trans_labels = {x.name: x.label for x in net.transitions} + conn_comp = get_graph_components(places, inv_trans, trans_dup_label, tmap) + list_nets = [] + for cmp in conn_comp: + net_new = PetriNet("") + im_new = Marking() + fm_new = Marking() + lmap = {} + for el in cmp: + if el in places: + lmap[el] = PetriNet.Place(el) + net_new.places.add(lmap[el]) + elif el in inv_trans: + lmap[el] = PetriNet.Transition(el, None) + net_new.transitions.add(lmap[el]) + elif el in trans_labels: + lmap[el] = PetriNet.Transition(el, trans_labels[el]) + net_new.transitions.add(lmap[el]) + for el in cmp: + if el in places: + old_place = places[el] + for arc in old_place.in_arcs: + st = arc.source + if st.name not in lmap: + lmap[st.name] = PetriNet.Transition(st.name, trans_labels[st.name]) + net_new.transitions.add(lmap[st.name]) + add_arc_from_to(lmap[st.name], lmap[el], net_new) + for arc in old_place.out_arcs: + st = arc.target + if st.name not in lmap: + lmap[st.name] = PetriNet.Transition(st.name, trans_labels[st.name]) + net_new.transitions.add(lmap[st.name]) + add_arc_from_to(lmap[el], lmap[st.name], net_new) + if old_place in im: + im_new[lmap[el]] = im[old_place] + if old_place in fm: + fm_new[lmap[el]] = fm[old_place] + lvis_labels = sorted([t.label for t in net_new.transitions if t.label is not None]) + t_tuple = tuple( + sorted(list(int(hashlib.md5(t.name.encode(constants.DEFAULT_ENCODING)).hexdigest(), 16) for t in + net_new.transitions))) + net_new.lvis_labels = lvis_labels + net_new.t_tuple = t_tuple + + if len(net_new.places) > 0 or len(net_new.transitions) > 0: + list_nets.append((net_new, im_new, fm_new)) + + return list_nets + + +def merge_comp(comp1, comp2): + net = PetriNet("") + im = Marking() + fm = Marking() + places = {} + trans = {} + + for pl in comp1[0].places: + places[pl.name] = PetriNet.Place(pl.name) + net.places.add(places[pl.name]) + if pl in comp1[1]: + im[places[pl.name]] = comp1[1][pl] + if pl in comp1[2]: + fm[places[pl.name]] = comp1[2][pl] + + for pl in comp2[0].places: + places[pl.name] = PetriNet.Place(pl.name) + net.places.add(places[pl.name]) + if pl in comp2[1]: + im[places[pl.name]] = comp2[1][pl] + if pl in comp2[2]: + fm[places[pl.name]] = comp2[2][pl] + + for tr in comp1[0].transitions: + trans[tr.name] = PetriNet.Transition(tr.name, tr.label) + net.transitions.add(trans[tr.name]) + + for tr in comp2[0].transitions: + if not tr.name in trans: + trans[tr.name] = PetriNet.Transition(tr.name, tr.label) + net.transitions.add(trans[tr.name]) + + for arc in comp1[0].arcs: + if type(arc.source) is PetriNet.Place: + add_arc_from_to(places[arc.source.name], trans[arc.target.name], net) + else: + add_arc_from_to(trans[arc.source.name], places[arc.target.name], net) + + for arc in comp2[0].arcs: + if type(arc.source) is PetriNet.Place: + add_arc_from_to(places[arc.source.name], trans[arc.target.name], net) + else: + add_arc_from_to(trans[arc.source.name], places[arc.target.name], net) + + lvis_labels = sorted([t.label for t in net.transitions if t.label is not None]) + t_tuple = tuple(sorted( + list(int(hashlib.md5(t.name.encode(constants.DEFAULT_ENCODING)).hexdigest(), 16) for t in net.transitions))) + net.lvis_labels = lvis_labels + net.t_tuple = t_tuple + + return (net, im, fm) + + +def merge_sublist_nets(list_nets): + while len(list_nets) > 1: + list_nets.append(merge_comp(list_nets[0], list_nets[1])) + list_nets.pop(0) + list_nets.pop(0) + + return list_nets[0] diff --git a/pm4py/pm4py/objects/petri_net/utils/embed_stochastic_map.py b/pm4py/pm4py/objects/petri_net/utils/embed_stochastic_map.py new file mode 100644 index 0000000000000000000000000000000000000000..2037e0d3cce29e7a97c3632d0e485ef0f6575624 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/embed_stochastic_map.py @@ -0,0 +1,65 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import STOCHASTIC_DISTRIBUTION + + +def apply(smap, parameters=None): + """ + Embed the stochastic map into the Petri net + + Parameters + --------------- + smap + Stochastic map + parameters + Possible parameters of the algorithm + + Returns + --------------- + void + """ + if parameters is None: + parameters = {} + + for t in smap: + t.properties[STOCHASTIC_DISTRIBUTION] = smap[t] + + +def extract(net, parameters=None): + """ + Extract the stochastic map from the Petri net + + Parameters + -------------- + net + Petri net + parameters + Possible parameters of the algorithm + + Returns + -------------- + void + """ + if parameters is None: + parameters = {} + + smap = {} + + for t in net.transitions: + smap[t] = t.properties[STOCHASTIC_DISTRIBUTION] + + return smap diff --git a/pm4py/pm4py/objects/petri_net/utils/explore_path.py b/pm4py/pm4py/objects/petri_net/utils/explore_path.py new file mode 100644 index 0000000000000000000000000000000000000000..26e36b0b766bb8e141ef8e50a5588dea30a18757 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/explore_path.py @@ -0,0 +1,133 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +from pm4py.util.lp import solver as lp_solver +from pm4py.objects.petri_net.utils import align_utils as utils +from pm4py.objects.petri_net.utils.incidence_matrix import construct +from pm4py.objects.petri_net.utils.petri_utils import decorate_places_preset_trans, decorate_transitions_prepostset +from copy import copy +import heapq + + +def __search(net, ini, fin): + cost_function = {t: 1 for t in net.transitions} + + decorate_transitions_prepostset(net) + decorate_places_preset_trans(net) + + incidence_matrix = construct(net) + ini_vec, fin_vec, cost_vec = utils.__vectorize_initial_final_cost(incidence_matrix, ini, fin, cost_function) + + closed = set() + + a_matrix = np.asmatrix(incidence_matrix.a_matrix).astype(np.float64) + g_matrix = -np.eye(len(net.transitions)) + h_cvx = np.matrix(np.zeros(len(net.transitions))).transpose() + cost_vec = [x * 1.0 for x in cost_vec] + + use_cvxopt = False + if lp_solver.DEFAULT_LP_SOLVER_VARIANT == lp_solver.CVXOPT_SOLVER_CUSTOM_ALIGN or lp_solver.DEFAULT_LP_SOLVER_VARIANT == lp_solver.CVXOPT_SOLVER_CUSTOM_ALIGN_ILP: + use_cvxopt = True + + if use_cvxopt: + # not available in the latest version of PM4Py + from cvxopt import matrix + + a_matrix = matrix(a_matrix) + g_matrix = matrix(g_matrix) + h_cvx = matrix(h_cvx) + cost_vec = matrix(cost_vec) + + h, x = utils.__compute_exact_heuristic_new_version(net, a_matrix, h_cvx, g_matrix, cost_vec, incidence_matrix, ini, + fin_vec, lp_solver.DEFAULT_LP_SOLVER_VARIANT, + use_cvxopt=use_cvxopt) + ini_state = utils.SearchTuple(0 + h, 0, h, ini, None, None, x, True) + open_set = [ini_state] + heapq.heapify(open_set) + visited = 0 + queued = 0 + traversed = 0 + + trans_empty_preset = set(t for t in net.transitions if len(t.in_arcs) == 0) + + while not len(open_set) == 0: + curr = heapq.heappop(open_set) + + current_marking = curr.m + # 11/10/2019 (optimization Y, that was optimization X, + # but with the good reasons this way): avoid checking markings in the cycle using + # the __get_alt function, but check them 'on the road' + already_closed = current_marking in closed + if already_closed: + continue + + while not curr.trust: + h, x = utils.__compute_exact_heuristic_new_version(net, a_matrix, h_cvx, g_matrix, cost_vec, + incidence_matrix, curr.m, + fin_vec, lp_solver.DEFAULT_LP_SOLVER_VARIANT, + use_cvxopt=use_cvxopt) + + # 11/10/19: shall not a state for which we compute the exact heuristics be + # by nature a trusted solution? + tp = utils.SearchTuple(curr.g + h, curr.g, h, curr.m, curr.p, curr.t, x, True) + # 11/10/2019 (optimization ZA) heappushpop is slightly more efficient than pushing + # and popping separately + curr = heapq.heappushpop(open_set, tp) + current_marking = curr.m + + # max allowed heuristics value (27/10/2019, due to the numerical instability of some of our solvers) + if curr.h > lp_solver.MAX_ALLOWED_HEURISTICS: + continue + + # 12/10/2019: do it again, since the marking could be changed + already_closed = current_marking in closed + if already_closed: + continue + + # 12/10/2019: the current marking can be equal to the final marking only if the heuristics + # (underestimation of the remaining cost) is 0. Low-hanging fruits + if curr.h < 0.01: + if current_marking == fin: + return utils.__reconstruct_alignment(curr, visited, queued, traversed) + + closed.add(current_marking) + visited += 1 + + possible_enabling_transitions = copy(trans_empty_preset) + for p in current_marking: + for t in p.ass_trans: + possible_enabling_transitions.add(t) + + enabled_trans = [t for t in possible_enabling_transitions if t.sub_marking <= current_marking] + + trans_to_visit_with_cost = [(t, cost_function[t]) for t in enabled_trans] + + for t, cost in trans_to_visit_with_cost: + traversed += 1 + new_marking = utils.add_markings(current_marking, t.add_marking) + + if new_marking in closed: + continue + g = curr.g + cost + + queued += 1 + h, x = utils.__derive_heuristic(incidence_matrix, cost_vec, curr.x, t, curr.h) + trustable = utils.__trust_solution(x) + new_f = g + h + + tp = utils.SearchTuple(new_f, g, h, new_marking, curr, t, x, trustable) + heapq.heappush(open_set, tp) diff --git a/pm4py/pm4py/objects/petri_net/utils/final_marking.py b/pm4py/pm4py/objects/petri_net/utils/final_marking.py new file mode 100644 index 0000000000000000000000000000000000000000..f225da9646d2edadf8207f51161be98dea6d04a6 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/final_marking.py @@ -0,0 +1,40 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.obj import Marking + + +def discover_final_marking(petri): + """ + Discovers final marking from a Petri net + + Parameters + ----------- + petri + Petri net + + Returns + ----------- + final_marking + Final marking + """ + final_marking = Marking() + + for place in petri.places: + if len(place.out_arcs) == 0: + final_marking[place] = 1 + + return final_marking diff --git a/pm4py/pm4py/objects/petri_net/utils/incidence_matrix.py b/pm4py/pm4py/objects/petri_net/utils/incidence_matrix.py new file mode 100644 index 0000000000000000000000000000000000000000..746950e46b5137e730aa490bc8b852b48660ccca --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/incidence_matrix.py @@ -0,0 +1,61 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +class IncidenceMatrix(object): + + def __init__(self, net): + self.__A, self.__place_indices, self.__transition_indices = self.__construct_matrix(net) + + def encode_marking(self, marking): + x = [0 for i in range(len(self.places))] + for p in marking: + x[self.places[p]] = marking[p] + return x + + def __get_a_matrix(self): + return self.__A + + def __get_transition_indices(self): + return self.__transition_indices + + def __get_place_indices(self): + return self.__place_indices + + def __construct_matrix(self, net): + self.matrix_built = True + p_index, t_index = {}, {} + places = sorted([x for x in net.places], key=lambda x: (str(x.name), id(x))) + transitions = sorted([x for x in net.transitions], key=lambda x: (str(x.name), id(x))) + + for p in places: + p_index[p] = len(p_index) + for t in transitions: + t_index[t] = len(t_index) + a_matrix = [[0 for i in range(len(t_index))] for j in range(len(p_index))] + for p in net.places: + for a in p.in_arcs: + a_matrix[p_index[p]][t_index[a.source]] += 1 + for a in p.out_arcs: + a_matrix[p_index[p]][t_index[a.target]] -= 1 + return a_matrix, p_index, t_index + + a_matrix = property(__get_a_matrix) + places = property(__get_place_indices) + transitions = property(__get_transition_indices) + + +def construct(net): + return IncidenceMatrix(net) diff --git a/pm4py/pm4py/objects/petri_net/utils/initial_marking.py b/pm4py/pm4py/objects/petri_net/utils/initial_marking.py new file mode 100644 index 0000000000000000000000000000000000000000..4df2957bbcf68b0a005667e26d2984bab62e8e39 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/initial_marking.py @@ -0,0 +1,40 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.obj import Marking + + +def discover_initial_marking(petri): + """ + Discovers initial marking from a Petri net + + Parameters + ------------ + petri + Petri net + + Returns + ------------ + initial_marking + Initial marking of the Petri net + """ + initial_marking = Marking() + + for place in petri.places: + if len(place.in_arcs) == 0: + initial_marking[place] = 1 + + return initial_marking diff --git a/pm4py/pm4py/objects/petri_net/utils/murata.py b/pm4py/pm4py/objects/petri_net/utils/murata.py new file mode 100644 index 0000000000000000000000000000000000000000..a6ae185b4c214e29cb92e74545a3c54682d6f816 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/murata.py @@ -0,0 +1,131 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.util.lp import solver +from pm4py.objects.petri_net.utils.petri_utils import remove_place +from copy import copy +from typing import Tuple +from pm4py.objects.petri_net.obj import PetriNet, Marking + + +def apply_reduction(net: PetriNet, im: Marking, fm: Marking) -> Tuple[PetriNet, Marking, Marking]: + """ + Apply the Murata reduction to an accepting Petri net, removing the structurally redundant places. + + The implementation follows the Berthelot algorithm as in: + https://svn.win.tue.nl/repos/prom/Packages/Murata/Trunk/src/org/processmining/algorithms/BerthelotAlgorithm.java + + Parameters + --------------- + net + Petri net + im + Initial marking + fm + Final marking + + Returns + -------------- + net + Petri net + im + Initial marking + fm + Final marking + """ + Aeq = [] + Aub = [] + beq = [] + bub = [] + places = sorted(list(net.places), key=lambda x: x.name) + redundant = set() + for place in places: + # first constraint + constraint = [0] * (len(net.places) + 1) + for p2 in im: + if p2 not in redundant: + if p2 == place: + constraint[places.index(p2)] = im[p2] + else: + constraint[places.index(p2)] = -im[p2] + constraint[-1] = -1 + Aeq.append(constraint) + beq.append(0) + + # second constraints + for trans in net.transitions: + constraint = [0] * (len(net.places) + 1) + + for arc in trans.in_arcs: + p2 = arc.source + if p2 not in redundant: + if p2 == place: + constraint[places.index(p2)] = arc.weight + else: + constraint[places.index(p2)] = -arc.weight + constraint[-1] = -1 + Aub.append(constraint) + bub.append(0) + + # third constraints + for trans in net.transitions: + constraint = [0] * (len(net.places) + 1) + + for arc in trans.out_arcs: + p2 = arc.target + if p2 not in redundant: + if p2 == place: + constraint[places.index(p2)] = -arc.weight + else: + constraint[places.index(p2)] = arc.weight + Aub.append(constraint) + bub.append(0) + + # fourth constraint + for p2 in net.places: + if p2 not in redundant: + constraint = [0] * (len(net.places) + 1) + + constraint[places.index(p2)] = -1 + + Aub.append(constraint) + if p2 == place: + bub.append(-1) + else: + bub.append(0) + + # fifth constraint + constraint = [0] * (len(net.places) + 1) + constraint[-1] = -1 + Aub.append(constraint) + bub.append(0) + + c = [1] * (len(net.places) + 1) + integrality = [1] * (len(net.places) + 1) + + xx = solver.apply(c, Aub, bub, Aeq, beq, variant=solver.SCIPY, parameters={"integrality": integrality}) + if xx.success: + redundant.add(place) + + for place in redundant: + if place not in fm: + net = remove_place(net, place) + if place in im: + im = copy(im) + del im[place] + + return net, im, fm diff --git a/pm4py/pm4py/objects/petri_net/utils/networkx_graph.py b/pm4py/pm4py/objects/petri_net/utils/networkx_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..681cb14c1e6dc8871b44aefb788a6798c3d0eeb7 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/networkx_graph.py @@ -0,0 +1,127 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.util import nx_utils + + +def create_networkx_undirected_graph(net, unique_source, unique_sink): + """ + Create a NetworkX undirected graph from a Petri net, returning also correspondences for the unique + source and the unique sink places that were discovered + + Parameters + ------------- + net + Petri net + unique_source + Unique source place + unique_sink + Unique sink place + + Returns + ------------- + graph + NetworkX graph + unique_source_corr + Correspondence in the NetworkX graph of the unique source place + unique_sink_corr + Correspondence in the NetworkX graph of the unique sink place + inv_dictionary + Correspondence between NetworkX nodes and Petri net entities + """ + graph = nx_utils.Graph() + dictionary = {} + inv_dictionary = {} + for place in net.places: + value = len(dictionary) + dictionary[place] = value + inv_dictionary[value] = place + graph.add_node(dictionary[place]) + for transition in net.transitions: + value = len(dictionary) + dictionary[transition] = value + inv_dictionary[value] = transition + graph.add_node(dictionary[transition]) + for arc in net.arcs: + graph.add_edge(dictionary[arc.source], dictionary[arc.target]) + unique_source_corr = dictionary[unique_source] if unique_source in dictionary else None + unique_sink_corr = dictionary[unique_sink] if unique_sink in dictionary else None + + return graph, unique_source_corr, unique_sink_corr, inv_dictionary + + +def create_networkx_directed_graph(net, weight=None): + """ + Create a NetworkX directed graph from a Petri net + + Parameters + -------------- + net + Petri net + + Returns + -------------- + graph + NetworkX digraph + inv_dictionary + Correspondence between NetworkX nodes and Petri net entities + """ + # forward to new function + G, d, id = create_networkx_directed_graph_ret_dict_both_ways(net,weight) + return G,id + +def create_networkx_directed_graph_ret_dict_both_ways(net, weight=None): + """ + Create a NetworkX directed graph from a Petri net + + Parameters + -------------- + net + Petri net + + Returns + -------------- + graph + NetworkX digraph + dictionary + dict mapping Petri net nodes to NetworkX nodes + inv_dictionary + dict mapping NetworkX nodes to Petri net nodes + """ + graph = nx_utils.DiGraph() + dictionary = {} + inv_dictionary = {} + for place in net.places: + value = len(dictionary) + dictionary[place] = value + inv_dictionary[value] = place + graph.add_node(dictionary[place]) + for transition in net.transitions: + value = len(dictionary) + dictionary[transition] = value + inv_dictionary[value] = transition + graph.add_node(dictionary[transition]) + for arc in net.arcs: + source = dictionary[arc.source] + target = dictionary[arc.target] + graph.add_edge(source, target) + if weight is not None: + if type(inv_dictionary[source]) is PetriNet.Transition: + graph.edges[source, target]["weight"] = weight[inv_dictionary[source]] + else: + graph.edges[source, target]["weight"] = weight[inv_dictionary[target]] + return graph, dictionary, inv_dictionary diff --git a/pm4py/pm4py/objects/petri_net/utils/obj_marking.py b/pm4py/pm4py/objects/petri_net/utils/obj_marking.py new file mode 100644 index 0000000000000000000000000000000000000000..dac041753e194c32b35bbf82c915b6310dfc25ee --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/obj_marking.py @@ -0,0 +1,111 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import random + + +class ObjMarking(dict): + def __init__(self, *args, **kwargs): + self.picked_items = set() + self.update(*args, **kwargs) + + def __getitem_original__(self, key): + if key in self: + return dict.__getitem__(self, key) + return {} + + def __getitem__(self, key): + return ObjMarkingAccessor(self, key) + + def __setitem__(self, key, val): + dict.__setitem__(self, key, val) + + def update(self, *args, **kwargs): + for k, v in dict(*args, **kwargs).items(): + self[k] = v + + +class ObjMarkingAccessor(object): + def __init__(self, obj_marking, key): + self.obj_marking = obj_marking + self.key = key + + def __sub__(self, other): + if isinstance(other, int): + picked_items = set(random.sample(self.obj_marking.__getitem_original__(self.key), min(len(self.obj_marking.__getitem_original__(self.key)), other))) + self.obj_marking.picked_items = picked_items + diff = self.obj_marking.__getitem_original__(self.key).difference(picked_items) + return diff + else: + diff = self.obj_marking.__getitem_original__(self.key).difference(other) + return diff + + def __add__(self, other): + if isinstance(other, int): + picked_items = set(random.sample(self.obj_marking.picked_items, other)) + if self.key not in self.obj_marking: + self.obj_marking[self.key] = set() + new_value = self.obj_marking.__getitem_original__(self.key).union(picked_items) + self.obj_marking[self.key] = new_value + return new_value + else: + new_value = self.obj_marking.__getitem_original__(self.key).union(other) + self.obj_marking[self.key] = new_value + return new_value + + def __repr__(self): + return str(self.obj_marking.__getitem_original__(self.key)) + + def __str__(self): + return str(self.obj_marking.__getitem_original__(self.key)) + + def __lt__(self, other): + if isinstance(other, int): + if len(self.obj_marking.__getitem_original__(self.key)) < other: + return True + return False + + def __le__(self, other): + if isinstance(other, int): + if len(self.obj_marking.__getitem_original__(self.key)) <= other: + return True + return False + + def __gt__(self, other): + if isinstance(other, int): + if len(self.obj_marking.__getitem_original__(self.key)) > other: + return True + return False + + def __ge__(self, other): + if isinstance(other, int): + if len(self.obj_marking.__getitem_original__(self.key)) >= other: + return True + return False + + def __lt__(self, other): + if isinstance(other, int): + if len(self.obj_marking.__getitem_original__(self.key)) < other: + return True + return False + + def __eq__(self, other): + if isinstance(other, int): + if len(self.obj_marking.__getitem_original__(self.key)) <= other: + return True + return False + else: + return self.__dict__ == other.__dict__ diff --git a/pm4py/pm4py/objects/petri_net/utils/performance_map.py b/pm4py/pm4py/objects/petri_net/utils/performance_map.py new file mode 100644 index 0000000000000000000000000000000000000000..b00511ed73a9a26c2291e80f646e43156206311d --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/performance_map.py @@ -0,0 +1,532 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import copy +from statistics import stdev + +from pm4py.objects.petri_net import semantics +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.util.vis_utils import human_readable_stat, get_arc_penwidth, get_trans_freq_color +from statistics import median, mean +from pm4py.objects.log.obj import EventLog +from pm4py.util.business_hours import BusinessHours +from pm4py.util import constants + +MAX_NO_THREADS = 1000 + + +def calculate_annotation_for_trace(trace, net, initial_marking, act_trans, activity_key, ht_perf_method="last"): + """ + Calculate annotation for a trace in the variant, in order to retrieve information + useful for calculate frequency/performance for all the traces belonging to the variant + + Parameters + ----------- + trace + Trace + net + Petri net + initial_marking + Initial marking + act_trans + Activated transitions during token replay of the given trace + activity_key + Attribute that identifies the activity (must be specified if different from concept:name) + ht_perf_method + Method to use in order to annotate hidden transitions (performance value could be put on the last possible + point (last) or in the first possible point (first) + + Returns + ---------- + annotation + Statistics annotation for the given trace + """ + annotations_places_trans = {} + annotations_arcs = {} + trace_place_stats = {} + current_trace_index = 0 + j = 0 + marking = copy(initial_marking) + for place in marking: + if place not in annotations_places_trans: + annotations_places_trans[place] = {"count": 0} + annotations_places_trans[place]["count"] = annotations_places_trans[place]["count"] + marking[place] + trace_place_stats[place] = [current_trace_index] * marking[place] + + for z in range(len(act_trans)): + enabled_trans_in_marking = semantics.enabled_transitions(net, marking) + # print("enabled_trans_in_marking", enabled_trans_in_marking) + + for trans in enabled_trans_in_marking: + if trans not in annotations_places_trans: + annotations_places_trans[trans] = {"count": 0, "performance": [], "no_of_times_enabled": 0, + "no_of_times_activated": 0} + annotations_places_trans[trans]["no_of_times_enabled"] = annotations_places_trans[trans][ + "no_of_times_enabled"] + 1 + + trans = act_trans[z] + if trans not in annotations_places_trans: + annotations_places_trans[trans] = {"count": 0, "performance": [], "no_of_times_enabled": 0, + "no_of_times_activated": 0} + annotations_places_trans[trans]["count"] = annotations_places_trans[trans]["count"] + 1 + if trans not in enabled_trans_in_marking: + annotations_places_trans[trans]["no_of_times_enabled"] = annotations_places_trans[trans][ + "no_of_times_enabled"] + 1 + annotations_places_trans[trans]["no_of_times_activated"] = annotations_places_trans[trans][ + "no_of_times_activated"] + 1 + + new_marking = semantics.weak_execute(trans, marking) + if not new_marking: + break + marking_diff = set(new_marking).difference(set(marking)) + for place in marking_diff: + if place not in annotations_places_trans: + annotations_places_trans[place] = {"count": 0} + annotations_places_trans[place]["count"] = annotations_places_trans[place]["count"] + max( + new_marking[place] - marking[place], 1) + marking = new_marking + if j < len(trace): + current_trace_index = j + if trans.label == trace[j][activity_key]: + j = j + 1 + + in_arc_indexes = [trace_place_stats[arc.source][0] for arc in trans.in_arcs if + arc.source in trace_place_stats and trace_place_stats[arc.source]] + if in_arc_indexes: + min_in_arc_indexes = min(in_arc_indexes) + max_in_arc_indexes = max(in_arc_indexes) + else: + min_in_arc_indexes = None + max_in_arc_indexes = None + performance_for_this_trans_execution = [] + + for arc in trans.in_arcs: + source_place = arc.source + if arc not in annotations_arcs: + annotations_arcs[arc] = {"performance": [], "count": 0} + annotations_arcs[arc]["count"] = annotations_arcs[arc]["count"] + 1 + if source_place in trace_place_stats and trace_place_stats[source_place]: + if trans.label or ht_perf_method == "first": + annotations_arcs[arc]["performance"].append( + [current_trace_index, trace_place_stats[source_place][0]]) + performance_for_this_trans_execution.append( + [[current_trace_index, trace_place_stats[source_place][0]], + current_trace_index - trace_place_stats[source_place][0]]) + elif min_in_arc_indexes: + annotations_arcs[arc]["performance"].append([current_trace_index, current_trace_index]) + performance_for_this_trans_execution.append([[current_trace_index, current_trace_index], 0]) + + del trace_place_stats[source_place][0] + for arc in trans.out_arcs: + target_place = arc.target + if arc not in annotations_arcs: + annotations_arcs[arc] = {"performance": [], "count": 0} + annotations_arcs[arc]["count"] = annotations_arcs[arc]["count"] + 1 + if target_place not in trace_place_stats: + trace_place_stats[target_place] = [] + + if trans.label or ht_perf_method == "first": + trace_place_stats[target_place].append(current_trace_index) + elif max_in_arc_indexes: + trace_place_stats[target_place].append(max_in_arc_indexes) + + if performance_for_this_trans_execution: + performance_for_this_trans_execution = sorted(performance_for_this_trans_execution, key=lambda x: x[1]) + + annotations_places_trans[trans]["performance"].append(performance_for_this_trans_execution[0][0]) + + return annotations_places_trans, annotations_arcs + + +def single_element_statistics(log, net, initial_marking, aligned_traces, variants_idx, activity_key="concept:name", + timestamp_key="time:timestamp", ht_perf_method="last", parameters=None): + """ + Get single Petrinet element statistics + + Parameters + ------------ + log + Log + net + Petri net + initial_marking + Initial marking + aligned_traces + Result of the token-based replay + variants_idx + Variants along with indexes of belonging traces + activity_key + Activity key (must be specified if different from concept:name) + timestamp_key + Timestamp key (must be specified if different from time:timestamp) + ht_perf_method + Method to use in order to annotate hidden transitions (performance value could be put on the last possible + point (last) or in the first possible point (first) + parameters + Possible parameters of the algorithm + + Returns + ------------ + statistics + Petri net element statistics (frequency, unaggregated performance) + """ + if parameters is None: + parameters = {} + + from pm4py.objects.conversion.log import converter as log_converter + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + business_hours = parameters["business_hours"] if "business_hours" in parameters else False + business_hours_slots = parameters["business_hour_slots"] if "business_hour_slots" in parameters else constants.DEFAULT_BUSINESS_HOUR_SLOTS + count_once_per_trace = parameters["count_once_per_trace"] if "count_once_per_trace" in parameters else False + + statistics = {} + + for variant in variants_idx: + first_trace = log[variants_idx[variant][0]] + act_trans0 = aligned_traces[variants_idx[variant][0]]["activated_transitions"] + act_trans = [] + if count_once_per_trace: + for t in act_trans0: + if t not in act_trans: + act_trans.append(t) + else: + act_trans = act_trans0 + annotations_places_trans, annotations_arcs = calculate_annotation_for_trace(first_trace, net, initial_marking, + act_trans, activity_key, + ht_perf_method=ht_perf_method) + + for el in annotations_places_trans: + if el not in statistics: + statistics[el] = {"count": 0, "performance": [], "log_idx": [], "no_of_times_enabled": 0, + "no_of_times_activated": 0} + statistics[el]["count"] += annotations_places_trans[el]["count"] * len(variants_idx[variant]) + if "no_of_times_enabled" in annotations_places_trans[el]: + statistics[el]["no_of_times_enabled"] += annotations_places_trans[el]["no_of_times_enabled"] * len( + variants_idx[variant]) + statistics[el]["no_of_times_activated"] += annotations_places_trans[el]["no_of_times_activated"] * len( + variants_idx[variant]) + + if "performance" in annotations_places_trans[el]: + for trace_idx in variants_idx[variant]: + trace = log[trace_idx] + for perf_couple in annotations_places_trans[el]["performance"]: + if timestamp_key in trace[perf_couple[0]] and timestamp_key in trace[perf_couple[1]]: + if business_hours: + bh = BusinessHours(trace[perf_couple[1]][timestamp_key], + trace[perf_couple[0]][timestamp_key], + business_hour_slots=business_hours_slots) + perf = bh.get_seconds() + else: + perf = (trace[perf_couple[0]][timestamp_key] - trace[perf_couple[1]][ + timestamp_key]).total_seconds() + else: + perf = 0.0 + statistics[el]["performance"].append(perf) + statistics[el]["log_idx"].append(trace_idx) + for el in annotations_arcs: + if el not in statistics: + statistics[el] = {"count": 0, "performance": []} + statistics[el]["count"] += annotations_arcs[el]["count"] * len(variants_idx[variant]) + for trace_idx in variants_idx[variant]: + trace = log[trace_idx] + for perf_couple in annotations_arcs[el]["performance"]: + if timestamp_key in trace[perf_couple[0]] and timestamp_key in trace[perf_couple[1]]: + if business_hours: + bh = BusinessHours(trace[perf_couple[1]][timestamp_key], + trace[perf_couple[0]][timestamp_key], + business_hour_slots=business_hours_slots) + perf = bh.get_seconds() + else: + perf = (trace[perf_couple[0]][timestamp_key] - trace[perf_couple[1]][ + timestamp_key]).total_seconds() + else: + perf = 0.0 + statistics[el]["performance"].append(perf) + + return statistics + + +def find_min_max_trans_frequency(statistics): + """ + Find minimum and maximum transition frequency + + Parameters + ----------- + statistics + Element statistics + + Returns + ---------- + min_frequency + Minimum transition frequency (in the replay) + max_frequency + Maximum transition frequency (in the replay) + """ + min_frequency = 9999999999 + max_frequency = 0 + for elem in statistics.keys(): + if type(elem) is PetriNet.Transition: + if statistics[elem]["count"] < min_frequency: + min_frequency = statistics[elem]["count"] + if statistics[elem]["count"] > max_frequency: + max_frequency = statistics[elem]["count"] + return min_frequency, max_frequency + + +def find_min_max_arc_frequency(statistics): + """ + Find minimum and maximum arc frequency + + Parameters + ----------- + statistics + Element statistics + + Returns + ----------- + min_frequency + Minimum arc frequency + max_frequency + Maximum arc frequency + """ + min_frequency = 9999999999 + max_frequency = 0 + for elem in statistics.keys(): + if type(elem) is PetriNet.Arc: + if statistics[elem]["count"] < min_frequency: + min_frequency = statistics[elem]["count"] + if statistics[elem]["count"] > max_frequency: + max_frequency = statistics[elem]["count"] + return min_frequency, max_frequency + + +def aggregate_stats(statistics, elem, aggregation_measure): + """ + Aggregate the statistics + + Parameters + ----------- + statistics + Element statistics + elem + Current element + aggregation_measure + Aggregation measure (e.g. mean, min) to use + + Returns + ----------- + aggr_stat + Aggregated statistics + """ + aggr_stat = 0 + if aggregation_measure == "mean" or aggregation_measure is None: + aggr_stat = mean(statistics[elem]["performance"]) + elif aggregation_measure == "median": + aggr_stat = median(statistics[elem]["performance"]) + elif aggregation_measure == "stdev": + aggr_stat = stdev(statistics[elem]["performance"]) + elif aggregation_measure == "sum": + aggr_stat = sum(statistics[elem]["performance"]) + elif aggregation_measure == "min": + aggr_stat = min(statistics[elem]["performance"]) + elif aggregation_measure == "max": + aggr_stat = max(statistics[elem]["performance"]) + + return aggr_stat + + +def find_min_max_arc_performance(statistics, aggregation_measure): + """ + Find minimum and maximum arc performance + + Parameters + ----------- + statistics + Element statistics + aggregation_measure + Aggregation measure (e.g. mean, min) to use + + Returns + ----------- + min_performance + Minimum performance + max_performance + Maximum performance + """ + min_performance = 9999999999 + max_performance = 0 + for elem in statistics.keys(): + if type(elem) is PetriNet.Arc: + if statistics[elem]["performance"]: + aggr_stat = aggregate_stats(statistics, elem, aggregation_measure) + if aggr_stat < min_performance: + min_performance = aggr_stat + if aggr_stat > max_performance: + max_performance = aggr_stat + return min_performance, max_performance + + +def aggregate_statistics(statistics, measure="frequency", aggregation_measure=None, + stat_locale: dict = {}): + """ + Gets aggregated statistics + + Parameters + ---------- + statistics + Individual element statistics (including unaggregated performances) + measure + Desidered view on data (frequency or performance) + aggregation_measure + Aggregation measure (e.g. mean, min) to use + stat_locale + Dict to locale the stat strings + + Returns + ---------- + aggregated_statistics + Aggregated statistics for arcs, transitions, places + """ + min_trans_frequency, max_trans_frequency = find_min_max_trans_frequency(statistics) + min_arc_frequency, max_arc_frequency = find_min_max_arc_frequency(statistics) + min_arc_performance, max_arc_performance = find_min_max_arc_performance(statistics, aggregation_measure) + aggregated_statistics = {} + for elem in statistics.keys(): + if type(elem) is PetriNet.Arc: + if measure == "frequency": + freq = statistics[elem]["count"] + arc_penwidth = get_arc_penwidth(freq, min_arc_frequency, max_arc_frequency) + aggregated_statistics[elem] = {"label": str(freq), "penwidth": str(arc_penwidth)} + elif measure == "performance": + if statistics[elem]["performance"]: + aggr_stat = aggregate_stats(statistics, elem, aggregation_measure) + aggr_stat_hr = human_readable_stat(aggr_stat, stat_locale) + arc_penwidth = get_arc_penwidth(aggr_stat, min_arc_performance, max_arc_performance) + aggregated_statistics[elem] = {"label": aggr_stat_hr, "penwidth": str(arc_penwidth)} + elif type(elem) is PetriNet.Transition: + if measure == "frequency": + if elem.label is not None: + freq = statistics[elem]["count"] + color = get_trans_freq_color(freq, min_trans_frequency, max_trans_frequency) + aggregated_statistics[elem] = {"label": elem.label + " (" + str(freq) + ")", "color": color} + elif type(elem) is PetriNet.Place: + pass + return aggregated_statistics + + +def get_transition_performance_with_token_replay(log, net, im, fm): + """ + Gets the transition performance through the usage of token-based replay + + Parameters + ------------- + log + Event log + net + Petri net + im + Initial marking + fm + Final marking + + Returns + -------------- + transition_performance + Dictionary where each transition label is associated to performance measures + """ + from pm4py.algo.conformance.tokenreplay import algorithm as token_replay + from pm4py.statistics.variants.log import get as variants_get + + variants_idx = variants_get.get_variants_from_log_trace_idx(log) + aligned_traces = token_replay.apply(log, net, im, fm) + element_statistics = single_element_statistics(log, net, im, + aligned_traces, variants_idx) + + transition_performance = {} + for el in element_statistics: + if type(el) is PetriNet.Transition and el.label is not None: + if "log_idx" in element_statistics[el] and "performance" in element_statistics[el]: + if len(element_statistics[el]["performance"]) > 0: + transition_performance[str(el)] = {"all_values": [], "case_association": {}, "mean": 0.0, + "median": 0.0} + for i in range(len(element_statistics[el]["log_idx"])): + if not element_statistics[el]["log_idx"][i] in transition_performance[str(el)][ + "case_association"]: + transition_performance[str(el)]["case_association"][ + element_statistics[el]["log_idx"][i]] = [] + transition_performance[str(el)]["case_association"][ + element_statistics[el]["log_idx"][i]].append( + element_statistics[el]["performance"][i]) + transition_performance[str(el)]["all_values"].append(element_statistics[el]["performance"][i]) + transition_performance[str(el)]["all_values"] = sorted( + transition_performance[str(el)]["all_values"]) + if transition_performance[str(el)]["all_values"]: + transition_performance[str(el)]["mean"] = mean(transition_performance[str(el)]["all_values"]) + transition_performance[str(el)]["median"] = median( + transition_performance[str(el)]["all_values"]) + return transition_performance + + +def get_idx_exceeding_specified_acti_performance(log, transition_performance, activity, lower_bound): + """ + Get indexes of the cases exceeding the specified activity performance threshold + + Parameters + ------------ + log + Event log + transition_performance + Dictionary where each transition label is associated to performance measures + activity + Target activity (of the filter) + lower_bound + Lower bound (filter cases which have a duration of the activity exceeding) + + Returns + ------------ + idx + A list of indexes in the log + """ + satisfying_indexes = sorted(list(set( + x for x, y in transition_performance[activity]["case_association"].items() if max(y) >= lower_bound))) + return satisfying_indexes + + +def filter_cases_exceeding_specified_acti_performance(log, transition_performance, activity, lower_bound): + """ + Filter cases exceeding the specified activity performance threshold + + Parameters + ------------ + log + Event log + transition_performance + Dictionary where each transition label is associated to performance measures + activity + Target activity (of the filter) + lower_bound + Lower bound (filter cases which have a duration of the activity exceeding) + + Returns + ------------ + filtered_log + Filtered log + """ + satisfying_indexes = get_idx_exceeding_specified_acti_performance(log, transition_performance, activity, + lower_bound) + new_log = EventLog(list(log[i] for i in satisfying_indexes)) + return new_log diff --git a/pm4py/pm4py/objects/petri_net/utils/petri_utils.py b/pm4py/pm4py/objects/petri_net/utils/petri_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..e9a598b410a2341e8d562540f50f31ca52d448ed --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/petri_utils.py @@ -0,0 +1,588 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import random +import time + +from typing import Optional, Set +from copy import copy, deepcopy + +from pm4py.objects.log.obj import Trace, Event +from pm4py.objects.petri_net import semantics, properties +from pm4py.objects.petri_net.obj import PetriNet, Marking, ResetNet, InhibitorNet +from pm4py.objects.petri_net.saw_net.obj import StochasticArcWeightNet +from pm4py.util import xes_constants as xes_util + + +def is_sub_marking(sub_marking: Marking, marking: Marking) -> bool: + for p in sub_marking: + if p not in marking: + return False + elif marking[p] > sub_marking[p]: + return False + return True + + +def place_set_as_marking(places) -> Marking: + m = Marking() + for p in places: + m[p] = 1 + return m + + +def get_arc_type(elem): + if properties.ARCTYPE in elem.properties: + return elem.properties[properties.ARCTYPE] + return None + + +def pre_set(elem, arc_type=None) -> Set: + pre = set() + for a in elem.in_arcs: + if get_arc_type(a) == arc_type: + pre.add(a.source) + return pre + + +def post_set(elem, arc_type=None) -> Set: + post = set() + for a in elem.out_arcs: + if get_arc_type(a) == arc_type: + post.add(a.target) + return post + + +def remove_transition(net: PetriNet, trans: PetriNet.Transition) -> PetriNet: + """ + Remove a transition from a Petri net + + Parameters + ---------- + net + Petri net + trans + Transition to remove + + Returns + ---------- + net + Petri net + """ + if trans in net.transitions: + in_arcs = trans.in_arcs + for arc in in_arcs: + place = arc.source + place.out_arcs.remove(arc) + net.arcs.remove(arc) + out_arcs = trans.out_arcs + for arc in out_arcs: + place = arc.target + place.in_arcs.remove(arc) + net.arcs.remove(arc) + net.transitions.remove(trans) + return net + + +def add_place(net: PetriNet, name=None) -> PetriNet.Place: + name = name if name is not None else 'p_' + str(len(net.places)) + '_' + str(time.time()) + str( + random.randint(0, 10000)) + p = PetriNet.Place(name=name) + net.places.add(p) + return p + + +def add_transition(net: PetriNet, name=None, label=None) -> PetriNet.Transition: + name = name if name is not None else 't_' + str(len(net.transitions)) + '_' + str(time.time()) + str( + random.randint(0, 10000)) + t = PetriNet.Transition(name=name, label=label) + net.transitions.add(t) + return t + + +def merge(trgt: Optional[PetriNet]=None, nets=None) -> PetriNet: + trgt = trgt if trgt is not None else PetriNet() + nets = nets if nets is not None else list() + for net in nets: + trgt.transitions.update(net.transitions) + trgt.places.update(net.places) + trgt.arcs.update(net.arcs) + return trgt + + +def remove_place(net: PetriNet, place: PetriNet.Place) -> PetriNet: + """ + Remove a place from a Petri net + + Parameters + ------------- + net + Petri net + place + Place to remove + + Returns + ------------- + net + Petri net + """ + if place in net.places: + in_arcs = place.in_arcs + for arc in in_arcs: + trans = arc.source + trans.out_arcs.remove(arc) + net.arcs.remove(arc) + out_arcs = place.out_arcs + for arc in out_arcs: + trans = arc.target + trans.in_arcs.remove(arc) + net.arcs.remove(arc) + net.places.remove(place) + return net + + +def add_arc_from_to(fr, to, net: PetriNet, weight=1, type=None) -> PetriNet.Arc: + """ + Adds an arc from a specific element to another element in some net. Assumes from and to are in the net! + + Parameters + ---------- + fr: transition/place from + to: transition/place to + net: net to use + weight: weight associated to the arc + + Returns + ------- + None + """ + if type == properties.INHIBITOR_ARC: + if isinstance(net, InhibitorNet): + a = InhibitorNet.InhibitorArc(fr, to, weight) + a.properties[properties.ARCTYPE] = type + else: + raise Exception("trying to add an inhibitor arc on a traditional Petri net object.") + elif type == properties.RESET_ARC: + if isinstance(net, ResetNet): + a = ResetNet.ResetArc(fr, to, weight) + a.properties[properties.ARCTYPE] = type + else: + raise Exception("trying to add a reset arc on a traditional Petri net object.") + elif type == properties.STOCHASTIC_ARC: + if isinstance(net, StochasticArcWeightNet): + a = StochasticArcWeightNet.Arc(fr, to, weight) + #a.properties[properties.ARCTYPE] = type + else: + raise Exception("trying to add a stochastic arc on a traditional Petri net object.") + else: + a = PetriNet.Arc(fr, to, weight) + net.arcs.add(a) + fr.out_arcs.add(a) + to.in_arcs.add(a) + + return a + + +def construct_trace_net(trace, trace_name_key=xes_util.DEFAULT_NAME_KEY, activity_key=xes_util.DEFAULT_NAME_KEY): + """ + Creates a trace net, i.e. a trace in Petri net form. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events + trace_name_key: :class:`str` key of the attribute that defines the name of the trace + activity_key: :class:`str` key of the attribute of the events that defines the activity name + + Returns + ------- + tuple: :class:`tuple` of the net, initial marking and the final marking + + """ + net = PetriNet( + 'trace net of %s' % trace.attributes[trace_name_key] if trace_name_key in trace.attributes else ' ') + place_map = {0: PetriNet.Place('p_0')} + net.places.add(place_map[0]) + for i in range(0, len(trace)): + t = PetriNet.Transition('t_' + trace[i][activity_key] + '_' + str(i), trace[i][activity_key]) + # 16/02/2021: set the trace index as property of the transition of the trace net + t.properties[properties.TRACE_NET_TRANS_INDEX] = i + net.transitions.add(t) + place_map[i + 1] = PetriNet.Place('p_' + str(i + 1)) + # 16/02/2021: set the place index as property of the place of the trace net + place_map[i + 1].properties[properties.TRACE_NET_PLACE_INDEX] = i + 1 + net.places.add(place_map[i + 1]) + add_arc_from_to(place_map[i], t, net) + add_arc_from_to(t, place_map[i + 1], net) + return net, Marking({place_map[0]: 1}), Marking({place_map[len(trace)]: 1}) + + +def construct_trace_net_cost_aware(trace, costs, trace_name_key=xes_util.DEFAULT_NAME_KEY, + activity_key=xes_util.DEFAULT_NAME_KEY): + """ + Creates a trace net, i.e. a trace in Petri net form mapping specific costs to transitions. + + Parameters + ---------- + trace: :class:`list` input trace, assumed to be a list of events + costs: :class:`list` list of costs, length should be equal to the length of the input trace + trace_name_key: :class:`str` key of the attribute that defines the name of the trace + activity_key: :class:`str` key of the attribute of the events that defines the activity name + + Returns + ------- + tuple: :class:`tuple` of the net, initial marking, final marking and map of costs + + + """ + net = PetriNet( + 'trace net of %s' % trace.attributes[trace_name_key] if trace_name_key in trace.attributes else ' ') + place_map = {0: PetriNet.Place('p_0')} + net.places.add(place_map[0]) + cost_map = dict() + for i in range(0, len(trace)): + t = PetriNet.Transition('t_' + trace[i][activity_key] + '_' + str(i), trace[i][activity_key]) + # 16/02/2021: set the trace index as property of the transition of the trace net + t.properties[properties.TRACE_NET_TRANS_INDEX] = i + cost_map[t] = costs[i] + net.transitions.add(t) + place_map[i + 1] = PetriNet.Place('p_' + str(i + 1)) + # 16/02/2021: set the place index as property of the place of the trace net + place_map[i + 1].properties[properties.TRACE_NET_PLACE_INDEX] = i + 1 + net.places.add(place_map[i + 1]) + add_arc_from_to(place_map[i], t, net) + add_arc_from_to(t, place_map[i + 1], net) + return net, Marking({place_map[0]: 1}), Marking({place_map[len(trace)]: 1}), cost_map + + +def acyclic_net_variants(net, initial_marking, final_marking, activity_key=xes_util.DEFAULT_NAME_KEY): + """ + Given an acyclic accepting Petri net, initial and final marking extracts a set of variants (in form of traces) + replayable on the net. + Warning: this function is based on a marking exploration. If the accepting Petri net contains loops, the method + will not work properly as it stops the search if a specific marking has already been encountered. + + Parameters + ---------- + :param net: An acyclic workflow net + :param initial_marking: The initial marking of the net. + :param final_marking: The final marking of the net. + :param activity_key: activity key to use + + Returns + ------- + :return: variants: :class:`list` Set of variants - in the form of Trace objects - obtainable executing the net + + """ + active = {(initial_marking, ())} + visited = set() + variants = set() + while active: + curr_marking, curr_partial_trace = active.pop() + curr_pair = (curr_marking, curr_partial_trace) + enabled_transitions = semantics.enabled_transitions(net, curr_marking) + for transition in enabled_transitions: + if transition.label is not None: + next_partial_trace = curr_partial_trace + (transition.label,) + else: + next_partial_trace = curr_partial_trace + next_marking = semantics.execute(transition, net, curr_marking) + next_pair = (next_marking, next_partial_trace) + + if next_marking == final_marking: + variants.add(next_partial_trace) + else: + # If the next marking is not in visited, if the next marking+partial trace is different from the current one+partial trace + if next_pair not in visited and curr_pair != next_pair: + active.add(next_pair) + visited.add(curr_pair) + trace_variants = [] + for variant in variants: + trace = Trace() + for activity_label in variant: + trace.append(Event({activity_key: activity_label})) + trace_variants.append(trace) + return trace_variants + + +def get_transition_by_name(net: PetriNet, transition_name) -> Optional[PetriNet.Transition]: + """ + Get a transition by its name + + Parameters + ------------ + net + Petri net + transition_name + Transition name + + Returns + ------------ + transition + Transition object + """ + for t in net.transitions: + if t.name == transition_name: + return t + return None + + +def decorate_places_preset_trans(net: PetriNet): + """ + Decorate places with information useful for the replay + + Parameters + ------------- + net + Petri net + """ + for place in net.places: + place.ass_trans = set() + + for trans in net.transitions: + for place in trans.sub_marking: + place.ass_trans.add(trans) + + +def decorate_transitions_prepostset(net: PetriNet): + """ + Decorate transitions with sub and addition markings + + Parameters + ------------- + net + Petri net + """ + from pm4py.objects.petri_net.obj import Marking + for trans in net.transitions: + sub_marking = Marking() + add_marking = Marking() + + for arc in trans.in_arcs: + sub_marking[arc.source] = arc.weight + add_marking[arc.source] = -arc.weight + for arc in trans.out_arcs: + if arc.target in add_marking: + add_marking[arc.target] = arc.weight + add_marking[arc.target] + else: + add_marking[arc.target] = arc.weight + trans.sub_marking = sub_marking + trans.add_marking = add_marking + + +def get_places_shortest_path(net, place_to_populate, current_place, places_shortest_path, actual_list, rec_depth, + max_rec_depth): + """ + Get shortest path between places lead by hidden transitions + + Parameters + ---------- + net + Petri net + place_to_populate + Place that we are populating the shortest map of + current_place + Current visited place (must explore its transitions) + places_shortest_path + Current dictionary + actual_list + Actual list of transitions to enable + rec_depth + Recursion depth + max_rec_depth + Maximum recursion depth + """ + if rec_depth > max_rec_depth: + return places_shortest_path + if place_to_populate not in places_shortest_path: + places_shortest_path[place_to_populate] = {} + for t in current_place.out_arcs: + if t.target.label is None: + for p2 in t.target.out_arcs: + if p2.target not in places_shortest_path[place_to_populate] or len(actual_list) + 1 < len( + places_shortest_path[place_to_populate][p2.target]): + new_actual_list = copy(actual_list) + new_actual_list.append(t.target) + places_shortest_path[place_to_populate][p2.target] = copy(new_actual_list) + places_shortest_path = get_places_shortest_path(net, place_to_populate, p2.target, + places_shortest_path, new_actual_list, + rec_depth + 1, max_rec_depth) + return places_shortest_path + + +def get_places_shortest_path_by_hidden(net: PetriNet, max_rec_depth): + """ + Get shortest path between places lead by hidden transitions + + Parameters + ---------- + net + Petri net + max_rec_depth + Maximum recursion depth + """ + places_shortest_path = {} + for p in net.places: + places_shortest_path = get_places_shortest_path(net, p, p, places_shortest_path, [], 0, max_rec_depth) + return places_shortest_path + + +def invert_spaths_dictionary(spaths): + """ + Invert the shortest paths (between places) dictionary, + from target-source to source-target + + Parameters + ------------- + spaths + Shortest paths dictionary + + Returns + ------------- + inv_spaths + Inverted shortest paths dictionary + """ + inv_spaths = {} + for target_place in spaths: + for source_place in spaths[target_place]: + if not source_place in inv_spaths: + inv_spaths[source_place] = {} + if not target_place in inv_spaths[source_place]: + inv_spaths[source_place][target_place] = set() + inv_spaths[source_place][target_place] = inv_spaths[source_place][target_place].union( + spaths[target_place][source_place]) + return inv_spaths + + +def remove_unconnected_components(net: PetriNet) -> PetriNet: + """ + Remove unconnected components from a Petri net + + Parameters + ----------- + net + Petri net + + Returns + ----------- + net + Cleaned Petri net + """ + changed_something = True + while changed_something: + changed_something = False + places = list(net.places) + for place in places: + if len(place.in_arcs) == 0 and len(place.out_arcs) == 0: + remove_place(net, place) + changed_something = True + transitions = list(net.transitions) + for trans in transitions: + if len(trans.in_arcs) == 0 or len(trans.out_arcs) == 0: + remove_transition(net, trans) + changed_something = True + return net + + +def get_s_components_from_petri(net, im, fm, rec_depth=0, curr_s_comp=None, visited_places=None, + list_s_components=None, max_rec_depth=6): + """ + Gets the S-components from a Petri net + + Parameters + ------------- + net + Petri net + im + Initial marking + fm + Final marking + curr_s_comp + Current S component + visited_places + Visited places + list_s_components + List of S-components + max_rec_depth + Maximum recursion depth + + Returns + -------------- + s_components + List of S-components + """ + if list_s_components is None: + list_s_components = [] + if len(im) > 1 or len(fm) > 1: + return list_s_components + source = list(im.keys())[0] + if curr_s_comp is None: + curr_s_comp = [source] + if visited_places is None: + visited_places = [] + something_changed = True + while something_changed and rec_depth < max_rec_depth: + something_changed = False + places_to_visit = sorted(list(set(curr_s_comp[len(visited_places):])), key=lambda x: len(x.out_arcs), + reverse=True) + for place_to_visit in places_to_visit: + visited_places.append(place_to_visit) + target_trans = sorted(list(set([arc.target for arc in place_to_visit.out_arcs])), + key=lambda x: len(x.out_arcs)) + for trans in target_trans: + visited_places_names = [x.name for x in visited_places] + target_trans_target = list( + set([arc.target for arc in trans.out_arcs if arc.target.name not in visited_places_names])) + if target_trans_target: + something_changed = True + if len(target_trans_target) == 1: + new_place = target_trans_target[0] + curr_s_comp.append(new_place) + else: + for new_place in target_trans_target: + [new_curr_s_comp, new_visited_places] = deepcopy([curr_s_comp, visited_places]) + new_curr_s_comp.append(new_place) + list_s_components = get_s_components_from_petri(net, im, fm, rec_depth=rec_depth + 1, + curr_s_comp=new_curr_s_comp, + visited_places=new_visited_places, + list_s_components=list_s_components, + max_rec_depth=max_rec_depth) + + if not set([place.name for place in curr_s_comp]) in list_s_components: + list_s_components.append(set([place.name for place in curr_s_comp])) + + return list_s_components + + +def remove_arc(net: PetriNet, arc: PetriNet.Arc) -> PetriNet: + """ + Removes an arc from a Petri net + + Parameters + --------------- + net + Petri net + arc + Arc of the Petri net + + Returns + ------------- + net + Petri net + """ + net.arcs.remove(arc) + arc.source.out_arcs.remove(arc) + arc.target.in_arcs.remove(arc) + + return net diff --git a/pm4py/pm4py/objects/petri_net/utils/projection.py b/pm4py/pm4py/objects/petri_net/utils/projection.py new file mode 100644 index 0000000000000000000000000000000000000000..954cee445bd7ea20b78b1384724c677f9ebc7acb --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/projection.py @@ -0,0 +1,121 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np + +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to + + +def project_net_on_place(place): + """ + Project a Petri net on a place + + Parameters + ------------- + place + Place + + Returns + ------------- + net + (Place) net + im + Empty initial marking + fm + Empty final marking + """ + place_net = PetriNet() + place_net_im = Marking() + place_net_fm = Marking() + + input_trans = [arc.source for arc in place.in_arcs] + output_trans = [arc.target for arc in place.out_arcs] + + if len(input_trans) == 0 or len(output_trans) == 0: + raise Exception("place projection not available on source/sink places") + + input_trans_visible = [trans for trans in input_trans if trans.label] + output_trans_visible = [trans for trans in output_trans if trans.label] + + if not len(input_trans) == len(input_trans_visible) or not len(output_trans) == len(output_trans_visible): + raise Exception("place projection not available on places that have invisible transitions as preset/postset") + + new_place = PetriNet.Place(place.name) + place_net.places.add(new_place) + + for trans in input_trans: + new_trans = PetriNet.Transition(trans.name, trans.label) + place_net.transitions.add(new_trans) + add_arc_from_to(new_trans, new_place, place_net) + + for trans in output_trans: + new_trans = PetriNet.Transition(trans.name, trans.label) + place_net.transitions.add(new_trans) + add_arc_from_to(new_place, new_trans, place_net) + + return place_net, place_net_im, place_net_fm + + +def project_net_on_matrix(net, activities, parameters=None): + """ + Project a Petri net with: + - only visible transitions + - where each place preset/postset is disjoint + - with unique visible transitions + on a numeric matrix + + Parameters + -------------- + net + Petri net + activities + List of activities + parameters + Possible parameters of the algorithm + """ + inv_trans_map = {} + for trans in net.transitions: + if not trans.label: + raise Exception( + "the project_net_on_matrix works only with Petri net that do not contain invisible transitions") + if trans.label in inv_trans_map: + raise Exception( + "the project_net_on_matrix works only with Petri net that contains unique visible transitions") + inv_trans_map[trans.label] = trans + places_matrix = [] + for place in net.places: + place_repr = [0] * len(activities) + input_trans_labels = set([arc.source.label for arc in place.in_arcs]) + output_trans_labels = set([arc.target.label for arc in place.out_arcs]) + if len(input_trans_labels.intersection(output_trans_labels)) > 0: + raise Exception("place has a transition that belongs to both preset and postset") + for arc in place.in_arcs: + input_trans_label = arc.source.label + input_arc_weight = arc.weight + if input_trans_label in activities: + place_repr[activities.index(input_trans_label)] = -input_arc_weight + for arc in place.out_arcs: + output_trans_label = arc.target.label + output_arc_weight = arc.weight + if output_trans_label in activities: + place_repr[activities.index(output_trans_label)] = output_arc_weight + if min(place_repr) < 0 < max(place_repr): + places_matrix.append(place_repr) + if len(places_matrix) == 0: + raise Exception("no places numeric representation could be found") + places_matrix = np.transpose(np.asmatrix(places_matrix)) + return places_matrix diff --git a/pm4py/pm4py/objects/petri_net/utils/reachability_graph.py b/pm4py/pm4py/objects/petri_net/utils/reachability_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..64f463457477085a30444d3baab679e2bdb67f2f --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/reachability_graph.py @@ -0,0 +1,157 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import re + +from pm4py.objects import petri_net +from pm4py.objects.transition_system.obj import TransitionSystem +from pm4py.objects.petri_net.utils import align_utils +from pm4py.objects.transition_system import obj as ts +from pm4py.objects.transition_system import utils +from pm4py.util import exec_utils +from enum import Enum +import time + + +class Parameters(Enum): + MAX_ELAB_TIME = "max_elab_time" + PETRI_SEMANTICS = "petri_semantics" + + +def staterep(name): + """ + Creates a string representation for a state of a transition system. + Necessary because graphviz does not support symbols simulation than alphanimerics and '_'. + TODO: find a better representation. + + Parameters + ---------- + name: the name of a state + + Returns + ------- + Version of the name filtered of non-alphanumerical characters (except '_'). + """ + return re.sub(r'\W+', '', name) + + +def marking_flow_petri(net, im, return_eventually_enabled=False, parameters=None): + """ + Construct the marking flow of a Petri net + + Parameters + ----------------- + net + Petri net + im + Initial marking + return_eventually_enabled + Return the eventually enabled (visible) transitions + """ + if parameters is None: + parameters = {} + + # set a maximum execution time of 1 day (it can be changed by providing the parameter) + max_exec_time = exec_utils.get_param_value(Parameters.MAX_ELAB_TIME, parameters, 86400) + semantics = exec_utils.get_param_value(Parameters.PETRI_SEMANTICS, parameters, petri_net.semantics.ClassicSemantics()) + + start_time = time.time() + + incoming_transitions = {im: set()} + outgoing_transitions = {} + eventually_enabled = {} + + active = [im] + while active: + if (time.time() - start_time) >= max_exec_time: + # interrupt the execution + return incoming_transitions, outgoing_transitions, eventually_enabled + m = active.pop() + enabled_transitions = semantics.enabled_transitions(net, m) + if return_eventually_enabled: + eventually_enabled[m] = align_utils.get_visible_transitions_eventually_enabled_by_marking(net, m) + outgoing_transitions[m] = {} + for t in enabled_transitions: + nm = semantics.weak_execute(t, net, m) + outgoing_transitions[m][t] = nm + if nm not in incoming_transitions: + incoming_transitions[nm] = set() + if nm not in active: + active.append(nm) + incoming_transitions[nm].add(t) + + return incoming_transitions, outgoing_transitions, eventually_enabled + + +def construct_reachability_graph_from_flow(incoming_transitions, outgoing_transitions, + use_trans_name=False, parameters=None): + """ + Construct the reachability graph from the marking flow + + Parameters + ---------------- + incoming_transitions + Incoming transitions + outgoing_transitions + Outgoing transitions + use_trans_name + Use the transition name + + Returns + ---------------- + re_gr + Transition system that represents the reachability graph of the input Petri net. + """ + if parameters is None: + parameters = {} + + re_gr = ts.TransitionSystem() + + map_states = {} + for s in incoming_transitions: + map_states[s] = ts.TransitionSystem.State(staterep(repr(s))) + re_gr.states.add(map_states[s]) + + for s1 in outgoing_transitions: + for t in outgoing_transitions[s1]: + s2 = outgoing_transitions[s1][t] + if use_trans_name: + utils.add_arc_from_to(t.name, map_states[s1], map_states[s2], re_gr) + else: + utils.add_arc_from_to(repr(t), map_states[s1], map_states[s2], re_gr) + + return re_gr + + +def construct_reachability_graph(net, initial_marking, use_trans_name=False, parameters=None) -> TransitionSystem: + """ + Creates a reachability graph of a certain Petri net. + DO NOT ATTEMPT WITH AN UNBOUNDED PETRI NET, EVER. + + Parameters + ---------- + net: Petri net + initial_marking: initial marking of the Petri net. + + Returns + ------- + re_gr: Transition system that represents the reachability graph of the input Petri net. + """ + incoming_transitions, outgoing_transitions, eventually_enabled = marking_flow_petri(net, initial_marking, + parameters=parameters) + + return construct_reachability_graph_from_flow(incoming_transitions, outgoing_transitions, + use_trans_name=use_trans_name, parameters=parameters) diff --git a/pm4py/pm4py/objects/petri_net/utils/reduction.py b/pm4py/pm4py/objects/petri_net/utils/reduction.py new file mode 100644 index 0000000000000000000000000000000000000000..84a1cead6c60b3939b36cf3bdcdf654335c14396 --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/reduction.py @@ -0,0 +1,390 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.utils.petri_utils import remove_arc, remove_transition, remove_place, add_arc_from_to, pre_set, post_set, get_arc_type +from pm4py.objects.petri_net import properties +import itertools +from itertools import combinations, chain + + +def reduce_single_entry_transitions(net): + """ + Reduces the number of the single entry transitions in the Petri net + + Parameters + ---------------- + net + Petri net + """ + cont = True + while cont: + cont = False + single_entry_transitions = [t for t in net.transitions if t.label is None and len(t.in_arcs) == 1] + for i in range(len(single_entry_transitions)): + t = single_entry_transitions[i] + source_place = list(t.in_arcs)[0].source + target_places = [a.target for a in t.out_arcs] + if len(source_place.in_arcs) == 1 and len(source_place.out_arcs) == 1: + source_transition = list(source_place.in_arcs)[0].source + remove_transition(net, t) + remove_place(net, source_place) + for p in target_places: + add_arc_from_to(source_transition, p, net) + cont = True + break + return net + + +def reduce_single_exit_transitions(net): + """ + Reduces the number of the single exit transitions in the Petri net + + Parameters + -------------- + net + Petri net + """ + cont = True + while cont: + cont = False + single_exit_transitions = [t for t in net.transitions if t.label is None and len(t.out_arcs) == 1] + for i in range(len(single_exit_transitions)): + t = single_exit_transitions[i] + target_place = list(t.out_arcs)[0].target + source_places = [a.source for a in t.in_arcs] + if len(target_place.in_arcs) == 1 and len(target_place.out_arcs) == 1: + target_transition = list(target_place.out_arcs)[0].target + remove_transition(net, t) + remove_place(net, target_place) + for p in source_places: + add_arc_from_to(p, target_transition, net) + cont = True + break + return net + + +def apply_simple_reduction(net): + """ + Apply a simple reduction to the Petri net + + Parameters + -------------- + net + Petri net + """ + reduce_single_entry_transitions(net) + reduce_single_exit_transitions(net) + return net + + +def apply_fst_rule(net): + """ + Apply the Fusion of Series Transitions (FST) rule + + Parameters + -------------- + net + Reset Inhibitor net + """ + cont = True + while cont: + cont = False + for p, t, u in itertools.product(net.places, net.transitions, net.transitions): + if (len(list(p.in_arcs)) == 1 and list(p.in_arcs)[0].source == t) and \ + (len(list(p.out_arcs)) == 1 and list(p.out_arcs)[0].target == u) and \ + (len(list(u.in_arcs)) == 1 and list(u.in_arcs)[0].source == p) and \ + (len(post_set(t).intersection(post_set(u))) == 0) and \ + (set().union(*[post_set(place, properties.INHIBITOR_ARC) for place in post_set(u)]) == post_set(p, + properties.INHIBITOR_ARC)) and \ + (set().union(*[post_set(place, properties.RESET_ARC) for place in post_set(u)]) == post_set(p, + properties.RESET_ARC)) and \ + (len(pre_set(u, properties.RESET_ARC)) == 0 and len(pre_set(u, properties.INHIBITOR_ARC)) == 0): + if u.label == None: + remove_place(net, p) + for target in post_set(u): + add_arc_from_to(t, target, net) + remove_transition(net, u) + cont = True + break + + return net + + +def apply_fsp_rule(net, im=None, fm=None): + """ + Apply the Fusion of Series Places (FSP) rule + + Parameters + -------------- + net + Reset Inhibitor net + """ + if im is None: + im = {} + if fm is None: + fm = {} + cont = True + while cont: + cont = False + for p, q, t in itertools.product(net.places, net.places, net.transitions): + if t.label == None: # only silent transitions may be removed either way + if (len(t.in_arcs) == 1 and list(t.in_arcs)[0].source == p) and \ + (len(t.out_arcs) == 1 and list(t.out_arcs)[0].target == q) and \ + (len(post_set(p)) == 1 and list(post_set(p))[0] == t) and \ + (len(pre_set(p).intersection(pre_set(q))) == 0) and \ + (post_set(p, properties.RESET_ARC) == post_set(q, properties.RESET_ARC)) and \ + (post_set(p, properties.INHIBITOR_ARC) == post_set(q, properties.INHIBITOR_ARC)) and \ + (len(pre_set(t, properties.RESET_ARC)) == 0 and len( + pre_set(t, properties.INHIBITOR_ARC)) == 0): + # remove place p and transition t + remove_transition(net, t) + for source in pre_set(p): + add_arc_from_to(source, q, net) + remove_place(net, p) + if p in im: + del im[p] + im[q] = 1 + cont = True + break + + return net, im, fm + + +def apply_fpt_rule(net): + """ + Apply the Fusion of Parallel Transitions (FPT) rule + + Parameters + -------------- + net + Reset Inhibitor net + """ + cont = True + while cont: + cont = False + for V in power_set([transition for transition in net.transitions if transition.label == None], 2): + condition = True + for x, y in itertools.product(V, V): + if x != y: + if not ((pre_set(x) == pre_set(y)) and \ + (post_set(x) == post_set(y)) and \ + (pre_set(x, properties.RESET_ARC) == pre_set(y, properties.RESET_ARC)) and \ + (pre_set(x, properties.INHIBITOR_ARC) == pre_set(y, properties.INHIBITOR_ARC))): + condition = False + break + # V is a valid candidate + if condition: + # remove transitions except the first one + for t in V[1:]: + remove_transition(net, t) + cont = True + break + return net + + +def apply_fpp_rule(net, im=None): + """ + Apply the Fusion of Parallel Places (FPP) rule + + Parameters + -------------- + net + Reset Inhibitor net + """ + if im is None: + im = {} + cont = True + while cont: + cont = False + for Q in power_set(net.places, 2): + condition = True + for x, y in itertools.product(Q, Q): + if x != y: + if not ((pre_set(x) == pre_set(y)) and \ + (post_set(x) == post_set(y)) and \ + (post_set(x, properties.RESET_ARC) == post_set(y, properties.RESET_ARC)) and \ + (post_set(x, properties.INHIBITOR_ARC) == post_set(y, properties.INHIBITOR_ARC))): + condition = False + break + + for x in Q: + if x in im: + for y in Q: + if y in im and im[x] > im[y]: + if not (len(post_set(x, properties.INHIBITOR_ARC)) == 0): + condition = False + break + else: + continue + break + # Q is a valid candidate + if condition: + # remove places except the first one + for p in Q[1:]: + remove_place(net, p) + cont = True + break + return net + + +def apply_elt_rule(net): + """ + Apply the Elimination of Self-Loop Transitions (ELT) rule + + Parameters + -------------- + net + Reset Inhibitor net + """ + cont = True + while cont: + cont = False + for p, t in itertools.product(net.places, [t for t in net.transitions if t.label == None]): + if (len(list(t.in_arcs)) == 1 and list(t.in_arcs)[0].source == p) and \ + (len(list(t.out_arcs)) == 1 and list(t.out_arcs)[0].target == p) and \ + (len(list(p.in_arcs)) >= 2) and \ + (len(pre_set(t, properties.RESET_ARC)) == 0 and len(pre_set(t, properties.INHIBITOR_ARC)) == 0): + remove_transition(net, t) + cont = True + break + + return net + + +def apply_elp_rule(net, im=None): + """ + Apply the Elimination of Self-Loop Places (ELP) rule + + Parameters + -------------- + net + Reset Inhibitor net + """ + if im is None: + im = {} + cont = True + while cont: + cont = False + for p in [place for place in net.places]: + if (set([arc.target for arc in p.out_arcs]).issubset(set([arc.source for arc in p.in_arcs]))) and \ + (p in im and im[p] >= 1) and \ + (post_set(p, properties.RESET_ARC).union(set([arc.target for arc in p.out_arcs])) == set( + [arc.source for arc in p.in_arcs])) and \ + (len(post_set(p, properties.INHIBITOR_ARC)) == 0): + remove_place(net, p) + cont = True + break + + return net + + +def apply_a_rule(net): + """ + Apply the Abstraction (A) rule + + Parameters + -------------- + net + Reset Inhibitor net + """ + cont = True + while cont: + cont = False + for Q, U in itertools.product(power_set(net.places, 1), power_set(net.transitions, 1)): + for s, t in itertools.product([s for s in net.places if s not in Q], + [t for t in net.transitions if (t not in U) and (t.label == None)]): + if ((pre_set(t) == {s}) and \ + (post_set(s) == {t}) and \ + (pre_set(s) == set(U)) and \ + (post_set(t) == set(Q)) and \ + (len(set(itertools.product(pre_set(s), post_set(t))).intersection( + set([(arc.source, arc.target) for arc in net.arcs if + get_arc_type(arc) is None])))) == 0) and \ + (len(pre_set(t, properties.RESET_ARC)) == 0) and \ + (len(pre_set(t, properties.INHIBITOR_ARC)) == 0): + + # check conditions on Q + condition = True + for q in Q: + if not ((post_set(s, properties.RESET_ARC) == post_set(q, properties.RESET_ARC)) and \ + (post_set(s, properties.INHIBITOR_ARC) == post_set(q, properties.INHIBITOR_ARC))): + condition = False + break + # Q is a valid candidate + if condition: + for u in U: + for q in Q: + add_arc_from_to(u, q, net) + remove_place(net, s) + remove_transition(net, t) + cont = True + break + return net + + +def apply_r_rule(net): + """ + Apply the Reset Reduction (R) rule + + Parameters + -------------- + net + Reset Inhibitor net + """ + cont = True + while cont: + cont = False + for p, t in itertools.product(net.places, net.transitions): + if p in pre_set(t, properties.RESET_ARC).intersection(pre_set(t, properties.INHIBITOR_ARC)): + for arc in [arc for arc in net.arcs]: + if arc.source == p and arc.target == t and arc.arc_type == properties.RESET_ARC: + remove_arc(net, arc) + cont = True + break + + return net + + +def power_set(iterable, min=0): + s = list(iterable) + return chain.from_iterable(combinations(s, r) for r in range(min, len(s) + 1)) + + +def apply_reset_inhibitor_net_reduction(net, im=None, fm=None): + """ + Apply a thorough reduction to the Reset Inhibitor net + + Parameters + -------------- + net + Reset Inhibitor net + """ + if im is None: + im = {} + if fm is None: + fm = {} + apply_fst_rule(net) + apply_fsp_rule(net, im, fm) + # (FPT) rule is exponential to model size + # apply_fpt_rule(net) + # (FPP) rule is exponential to model size + # apply_fpp_rule(net, im) + apply_elt_rule(net) + apply_elp_rule(net, im) + # (A) rule is exponential to model size + # apply_a_rule(net) + apply_r_rule(net) + return net, im, fm diff --git a/pm4py/pm4py/objects/petri_net/utils/synchronous_product.py b/pm4py/pm4py/objects/petri_net/utils/synchronous_product.py new file mode 100644 index 0000000000000000000000000000000000000000..67d3a6f21b777609f0e3d09e510b314f57aa279f --- /dev/null +++ b/pm4py/pm4py/objects/petri_net/utils/synchronous_product.py @@ -0,0 +1,173 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils.petri_utils import add_arc_from_to +from pm4py.objects.petri_net import properties + + +def construct(pn1, im1, fm1, pn2, im2, fm2, skip): + """ + Constructs the synchronous product net of two given Petri nets. + + + :param pn1: Petri net 1 + :param im1: Initial marking of Petri net 1 + :param fm1: Final marking of Petri net 1 + :param pn2: Petri net 2 + :param im2: Initial marking of Petri net 2 + :param fm2: Final marking of Petri net 2 + :param skip: Symbol to be used as skip + + Returns + ------- + :return: Synchronous product net and associated marking labels are of the form (a,>>) + """ + sync_net = PetriNet('synchronous_product_net of %s and %s' % (pn1.name, pn2.name)) + t1_map, p1_map = __copy_into(pn1, sync_net, True, skip) + t2_map, p2_map = __copy_into(pn2, sync_net, False, skip) + + for t1 in pn1.transitions: + for t2 in pn2.transitions: + if t1.label == t2.label: + sync = PetriNet.Transition((t1.name, t2.name), (t1.label, t2.label)) + sync_net.transitions.add(sync) + # copy the properties of the transitions inside the transition of the sync net + for p1 in t1.properties: + sync.properties[p1] = t1.properties[p1] + for p2 in t2.properties: + sync.properties[p2] = t2.properties[p2] + for a in t1.in_arcs: + add_arc_from_to(p1_map[a.source], sync, sync_net) + for a in t2.in_arcs: + add_arc_from_to(p2_map[a.source], sync, sync_net) + for a in t1.out_arcs: + add_arc_from_to(sync, p1_map[a.target], sync_net) + for a in t2.out_arcs: + add_arc_from_to(sync, p2_map[a.target], sync_net) + + sync_im = Marking() + sync_fm = Marking() + for p in im1: + sync_im[p1_map[p]] = im1[p] + for p in im2: + sync_im[p2_map[p]] = im2[p] + for p in fm1: + sync_fm[p1_map[p]] = fm1[p] + for p in fm2: + sync_fm[p2_map[p]] = fm2[p] + + # update 06/02/2021: to distinguish the sync nets that are output of this method, put a property in the sync net + sync_net.properties[properties.IS_SYNC_NET] = True + + return sync_net, sync_im, sync_fm + + +def construct_cost_aware(pn1, im1, fm1, pn2, im2, fm2, skip, pn1_costs, pn2_costs, sync_costs): + """ + Constructs the synchronous product net of two given Petri nets. + + + :param pn1: Petri net 1 + :param im1: Initial marking of Petri net 1 + :param fm1: Final marking of Petri net 1 + :param pn2: Petri net 2 + :param im2: Initial marking of Petri net 2 + :param fm2: Final marking of Petri net 2 + :param skip: Symbol to be used as skip + :param pn1_costs: dictionary mapping transitions of pn1 to corresponding costs + :param pn2_costs: dictionary mapping transitions of pn2 to corresponding costs + :param pn1_costs: dictionary mapping pairs of transitions in pn1 and pn2 to costs + :param sync_costs: Costs of sync moves + + Returns + ------- + :return: Synchronous product net and associated marking labels are of the form (a,>>) + """ + sync_net = PetriNet('synchronous_product_net of %s and %s' % (pn1.name, pn2.name)) + t1_map, p1_map = __copy_into(pn1, sync_net, True, skip) + t2_map, p2_map = __copy_into(pn2, sync_net, False, skip) + costs = dict() + + for t1 in pn1.transitions: + costs[t1_map[t1]] = pn1_costs[t1] + for t2 in pn2.transitions: + costs[t2_map[t2]] = pn2_costs[t2] + + for t1 in pn1.transitions: + for t2 in pn2.transitions: + if t1.label == t2.label: + sync = PetriNet.Transition((t1.name, t2.name), (t1.label, t2.label)) + sync_net.transitions.add(sync) + costs[sync] = sync_costs[(t1, t2)] + # copy the properties of the transitions inside the transition of the sync net + for p1 in t1.properties: + sync.properties[p1] = t1.properties[p1] + for p2 in t2.properties: + sync.properties[p2] = t2.properties[p2] + for a in t1.in_arcs: + add_arc_from_to(p1_map[a.source], sync, sync_net) + for a in t2.in_arcs: + add_arc_from_to(p2_map[a.source], sync, sync_net) + for a in t1.out_arcs: + add_arc_from_to(sync, p1_map[a.target], sync_net) + for a in t2.out_arcs: + add_arc_from_to(sync, p2_map[a.target], sync_net) + + sync_im = Marking() + sync_fm = Marking() + for p in im1: + sync_im[p1_map[p]] = im1[p] + for p in im2: + sync_im[p2_map[p]] = im2[p] + for p in fm1: + sync_fm[p1_map[p]] = fm1[p] + for p in fm2: + sync_fm[p2_map[p]] = fm2[p] + + # update 06/02/2021: to distinguish the sync nets that are output of this method, put a property in the sync net + sync_net.properties[properties.IS_SYNC_NET] = True + + return sync_net, sync_im, sync_fm, costs + + +def __copy_into(source_net, target_net, upper, skip): + t_map = {} + p_map = {} + for t in source_net.transitions: + name = (t.name, skip) if upper else (skip, t.name) + label = (t.label, skip) if upper else (skip, t.label) + t_map[t] = PetriNet.Transition(name, label) + if properties.TRACE_NET_TRANS_INDEX in t.properties: + # 16/02/2021: copy the index property from the transition of the trace net + t_map[t].properties[properties.TRACE_NET_TRANS_INDEX] = t.properties[properties.TRACE_NET_TRANS_INDEX] + target_net.transitions.add(t_map[t]) + + for p in source_net.places: + name = (p.name, skip) if upper else (skip, p.name) + p_map[p] = PetriNet.Place(name) + if properties.TRACE_NET_PLACE_INDEX in p.properties: + # 16/02/2021: copy the index property from the place of the trace net + p_map[p].properties[properties.TRACE_NET_PLACE_INDEX] = p.properties[properties.TRACE_NET_PLACE_INDEX] + target_net.places.add(p_map[p]) + + for t in source_net.transitions: + for a in t.in_arcs: + add_arc_from_to(p_map[a.source], t_map[t], target_net) + for a in t.out_arcs: + add_arc_from_to(t_map[t], p_map[a.target], target_net) + + return t_map, p_map diff --git a/pm4py/pm4py/objects/powl/BinaryRelation.py b/pm4py/pm4py/objects/powl/BinaryRelation.py new file mode 100644 index 0000000000000000000000000000000000000000..2e6bc4dabe5b44654beeddaaa8a8bfb59f3b4419 --- /dev/null +++ b/pm4py/pm4py/objects/powl/BinaryRelation.py @@ -0,0 +1,183 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import copy +from itertools import product +from typing import Hashable, TypeVar, List as TList, Set as TSet + +T = TypeVar('T', bound=Hashable) + + +class BinaryRelation: + + def __init__(self, nodes: TList[T]): + self._number_nodes = 0 + self._set_nodes(nodes) + self._edges = [[False for _ in range(self._number_nodes)] for _ in range(self._number_nodes)] + self._start_nodes = None + self._end_nodes = None + + def get_nodes(self) -> TList[T]: + return self._nodes + + def _set_nodes(self, nodes: TList[T]) -> None: + self._nodes = nodes + self._map_node_to_id = {} + self._map_id_to_node = {} + n = 0 + for node in self._nodes: + self._map_node_to_id[node] = n + self._map_id_to_node[n] = node + n = n + 1 + self._number_nodes = n + + def add_edge(self, source: T, target: T) -> None: + try: + i = self._map_node_to_id[source] + j = self._map_node_to_id[target] + except Exception: + raise Exception("Unable to add edge! Source or target not found!") + else: + self._edges[i][j] = True + + def remove_edge(self, source: T, target: T) -> None: + try: + i = self._map_node_to_id[source] + j = self._map_node_to_id[target] + except Exception: + raise Exception("Unable to remove edge! Invalid source or target!") + else: + self._edges[i][j] = False + + def remove_edge_without_violating_transitivity(self, source: T, target: T) -> None: + try: + i = self._map_node_to_id[source] + j = self._map_node_to_id[target] + except Exception: + raise Exception("Unable to remove edge! Invalid source or target!") + else: + self._edges[i][j] = False + n = len(self.nodes) + changed = True + while changed: + changed = False + for i, j, k in product(range(n), range(n), range(n)): + if i != j and j != k and self._edges[i][j] and self._edges[j][k] and not self._edges[i][k]: + self._edges[j][k] = False + changed = True + + def add_node(self, node: T) -> None: + if node not in self._nodes: + self._nodes.append(node) + n = self._number_nodes + self._map_node_to_id[node] = n + self._map_id_to_node[n] = node + new_edges = [[False for _ in range(n + 1)] for _ in range(n + 1)] + for i in range(n): + for j in range(n): + new_edges[i][j] = self._edges[i][j] + + self._edges = new_edges + self._number_nodes = n + 1 + + def is_edge(self, source: T, target: T) -> bool: + try: + i = self._map_node_to_id[source] + j = self._map_node_to_id[target] + except Exception: + raise Exception("Unable to create edge! Invalid source or target!") + else: + return self._edges[i][j] + + def is_edge_id(self, i: int, j: int) -> bool: + return self._edges[i][j] + + def get_transitive_reduction(self) -> "BinaryRelation": + if not self.is_irreflexive(): + raise ValueError("Cannot generate transitive reduction! Reflexivity detected!") + res = BinaryRelation(self.nodes) + res._edges = copy.deepcopy(self._edges) + n = len(self.nodes) + for i, j, k in product(range(n), range(n), range(n)): + if i != j and j != k and self._edges[i][j] and self._edges[j][k] and res._edges[i][k]: + res._edges[i][k] = False + return res + + def add_transitive_edges(self) -> None: + n = len(self.nodes) + changed = True + while changed: + changed = False + for i, j, k in product(range(n), range(n), range(n)): + if i != j and j != k and self._edges[i][j] and self._edges[j][k] and not self.is_edge_id( + i, k): + self._edges[i][k] = True + changed = True + + def is_strict_partial_order(self) -> bool: + return self.is_irreflexive() and self.is_transitive() + + def get_start_nodes(self) -> TSet[T]: + res = set(self.nodes) + for i in range(len(self.nodes)): + for j in range(len(self.nodes)): + if self._edges[i][j]: + res.discard(self._map_id_to_node[j]) + return res + + def get_end_nodes(self) -> TSet[T]: + res = set(self.nodes) + for i in range(len(self.nodes)): + for j in range(len(self.nodes)): + if self._edges[i][j]: + res.discard(self._map_id_to_node[i]) + return res + + def is_irreflexive(self) -> bool: + n = len(self.nodes) + for i in range(n): + if self.is_edge_id(i, i): + return False + return True + + def is_transitive(self) -> bool: + n = len(self.nodes) + for i, j, k in product(range(n), range(n), range(n)): + if self.is_edge_id(i, j) and self.is_edge_id(j, k) and not self.is_edge_id(i, k): + return False + return True + + def __repr__(self) -> str: + res = "(nodes = { " + for node in self._nodes: + res = res + node.__repr__() + ", " + res = res[:-2] + res = res + " }, order = { " + for node in self._nodes: + i = self._map_node_to_id[node] + for node2 in self._nodes: + j = self._map_node_to_id[node2] + if self._edges[i][j]: + res = res + node.__repr__() + "-->" + node2.__repr__() + ", " + res = res[:-2] + return res + " })" + + nodes = property(get_nodes, _set_nodes) + + @property + def edges(self): + return self._edges diff --git a/pm4py/pm4py/objects/powl/__init__.py b/pm4py/pm4py/objects/powl/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..802e139ea92dfd231a17b1b30974137b0303394f --- /dev/null +++ b/pm4py/pm4py/objects/powl/__init__.py @@ -0,0 +1,19 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.powl import * + diff --git a/pm4py/pm4py/objects/powl/constants.py b/pm4py/pm4py/objects/powl/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..04a64ea4fdcd2d0b6ddf58f73f616799130b3dcf --- /dev/null +++ b/pm4py/pm4py/objects/powl/constants.py @@ -0,0 +1,19 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +SILENT_TRANSITION_LABEL = "tau" +STRICT_PARTIAL_ORDER_LABEL = "PO" diff --git a/pm4py/pm4py/objects/powl/obj.py b/pm4py/pm4py/objects/powl/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..b296087172a6d58f2f0c67cf3da763158fa849ce --- /dev/null +++ b/pm4py/pm4py/objects/powl/obj.py @@ -0,0 +1,397 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.powl.BinaryRelation import BinaryRelation +from pm4py.objects.powl.constants import STRICT_PARTIAL_ORDER_LABEL +from pm4py.objects.process_tree.obj import ProcessTree, Operator +from pm4py.util import hie_utils +import sys +from typing import List as TList, Optional, Union +from abc import ABC, abstractmethod + + + +class POWL(ProcessTree, ABC): + def print(self) -> None: + print(self.to_string()) + + def simplify_using_frequent_transitions(self) -> "POWL": + return self + + def simplify(self) -> "POWL": + return self + + def validate_partial_orders(self): + if isinstance(self, StrictPartialOrder): + if not self.order.is_irreflexive(): + raise Exception("The irreflexivity of the partial order is violated!") + if not self.order.is_transitive(): + raise Exception("The transitivity of the partial order is violated!") + if hasattr(self, 'children'): + for child in self.children: + child.validate_partial_orders() + + @staticmethod + def model_description() -> str: + descr = """A partially ordered workflow language (POWL) is a partially ordered graph representation of a process, extended with control-flow operators for modeling choice and loop structures. There are four types of POWL models: +- an activity (identified by its label, i.e., 'M' identifies the activity M). Silent activities with empty labels (tau labels) are also supported. +- a choice of other POWL models (an exclusive choice between the sub-models A and B is identified by X ( A, B ) ) +- a loop node between two POWL models (a loop between the sub-models A and B is identified by * ( A, B ) and tells that you execute A, then you either exit the loop or execute B and then A again, this is repeated until you exit the loop). +- a partial order over a set of POWL models. A partial order is a binary relation that is irreflexive, transitive, and asymmetric. A partial order sets an execution order between the sub-models (i.e., the target node cannot be executed before the source node is completed). Unconnected nodes in a partial order are considered to be concurrent. An example is PO=(nodes={ NODE1, NODE2 }, order={ }) +where NODE1 and NODE2 are independent and can be executed in parallel. Another example is PO=(nodes={ NODE1, NODE2 }, order={ NODE1-->NODE2 }) where NODE2 can only be executed after NODE1 is completed. + +A more advanced example: PO=(nodes={ NODE1, NODE2, NODE3, X ( NODE4, NODE5 ) }, order={ NODE1-->NODE2, NODE1-->X ( NODE4, NODE5 ), NODE2-->X ( NODE4, NODE5 ) }), in this case, NODE2 can be executed only after NODE1 is completed, while the choice between NODE4 and NODE5 needs to wait until both NODE1 and NODE2 are finalized. + + +""" + return descr + + @abstractmethod + def copy(self): + pass + + +class Transition(POWL): + transition_id: int = 0 + + def __init__(self, label: Optional[str] = None) -> None: + super().__init__() + self._label = label + self._identifier = Transition.transition_id + Transition.transition_id = Transition.transition_id + 1 + + def copy(self): + return Transition(self._label) + + def __eq__(self, other: object) -> bool: + if isinstance(other, Transition): + return self._label == other._label and self._identifier == other._identifier + return False + + def equal_content(self, other: object) -> bool: + if isinstance(other, Transition): + return self._label == other._label + return False + + def __hash__(self) -> int: + return self._identifier + + def __lt__(self, other: object) -> bool: + if isinstance(other, Transition): + if self.label and other.label and self.label < other.label: + return self.label < other.label + return self._identifier < other._identifier + elif isinstance(other, OperatorPOWL): + return True + elif isinstance(other, StrictPartialOrder): + return True + return NotImplemented + + +class SilentTransition(Transition): + def __init__(self) -> None: + super().__init__(label=None) + + def copy(self): + return SilentTransition() + + +class FrequentTransition(Transition): + def __init__(self, label, min_freq: Union[str, int], max_freq: Union[str, int]) -> None: + self.skippable = False + self.selfloop = False + if min_freq == 0: + self.skippable = True + if max_freq == "-": + self.selfloop = True + min_freq = "1" + self.activity = label + if self.skippable or self.selfloop: + label = str(label) + "\n" + "[" + str(min_freq) + "," + str(max_freq) + "]" + + super().__init__(label=label) + + +class StrictPartialOrder(POWL): + + def __init__(self, nodes: TList[POWL]) -> None: + super().__init__() + self.operator = Operator.PARTIALORDER + self._set_order(nodes) + self.additional_information = None + + def copy(self): + copied_nodes = {n:n.copy() for n in self.order.nodes} + res = StrictPartialOrder(list(copied_nodes.values())) + for n1 in self.order.nodes: + for n2 in self.order.nodes: + if self.order.is_edge(n1, n2): + res.add_edge(copied_nodes[n1], copied_nodes[n2]) + return res + + + def _set_order(self, nodes: TList[POWL]) -> None: + self.order = BinaryRelation(nodes) + + def get_order(self) -> BinaryRelation: + return self.order + + def _set_children(self, children: TList[POWL]) -> None: + self.order.nodes = children + + def get_children(self) -> TList[POWL]: + return self.order.nodes + + def to_string(self, level=0, indent=False, max_indent=sys.maxsize) -> str: + model_string = STRICT_PARTIAL_ORDER_LABEL + self.order.__repr__() + if indent: + model_string = "\n".join(hie_utils.indent_representation(model_string, max_indent=max_indent)) + return model_string + + def __repr__(self) -> str: + return self.to_string() + + def __lt__(self, other: object) -> bool: + if isinstance(other, StrictPartialOrder): + return self.__repr__() < other.__repr__() + elif isinstance(other, OperatorPOWL): + return False + elif isinstance(other, Transition): + return False + return NotImplemented + + partial_order = property(get_order, _set_order) + children = property(get_children, _set_children) + + # def __eq__(self, other): + # if not isinstance(other, StrictPartialOrder): + # return False + # + # ordered_nodes_1 = sorted(list(self.order.nodes)) + # ordered_nodes_2 = sorted(list(other.order.nodes)) + # if len(ordered_nodes_1) != len(ordered_nodes_2): + # return False + # for i in range(len(ordered_nodes_1)): + # source_1 = ordered_nodes_1[i] + # source_2 = ordered_nodes_2[i] + # if not source_1.__eq__(source_2): + # return False + # for j in range(len(ordered_nodes_1)): + # target_1 = ordered_nodes_1[j] + # target_2 = ordered_nodes_2[j] + # if self.order.is_edge(source_1, target_1) and not other.order.is_edge(source_2, target_2): + # return False + # if not self.order.is_edge(source_1, target_1) and other.order.is_edge(source_2, target_2): + # return False + # return True + + def equal_content(self, other: object) -> bool: + if not isinstance(other, StrictPartialOrder): + return False + + ordered_nodes_1 = sorted(list(self.order.nodes)) + ordered_nodes_2 = sorted(list(other.order.nodes)) + if len(ordered_nodes_1) != len(ordered_nodes_2): + return False + for i in range(len(ordered_nodes_1)): + source_1 = ordered_nodes_1[i] + source_2 = ordered_nodes_2[i] + if not source_1.equal_content(source_2): + return False + for j in range(len(ordered_nodes_1)): + target_1 = ordered_nodes_1[j] + target_2 = ordered_nodes_2[j] + if self.order.is_edge(source_1, target_1) and not other.order.is_edge(source_2, target_2): + return False + if not self.order.is_edge(source_1, target_1) and other.order.is_edge(source_2, target_2): + return False + return True + + def simplify_using_frequent_transitions(self) -> "StrictPartialOrder": + new_nodes = {node: node.simplify_using_frequent_transitions() for node in self.children} + res = StrictPartialOrder(list(new_nodes.values())) + for node_1 in self.children: + for node_2 in self.children: + if self.partial_order.is_edge(node_1, node_2): + res.partial_order.add_edge(new_nodes[node_1], new_nodes[node_2]) + + return res + + def simplify(self) -> "StrictPartialOrder": + simplified_nodes = {} + sub_nodes = {} + start_nodes = {} + end_nodes = {} + + def connected(node): + for node2 in self.children: + if self.partial_order.is_edge(node, node2) or self.partial_order.is_edge(node2, node): + return True + return False + + for node_1 in self.children: + simplified_node = node_1.simplify() + if isinstance(simplified_node, StrictPartialOrder): + + if not connected(node_1): + sub_nodes[node_1] = simplified_node + else: + s_nodes = simplified_node.order.get_start_nodes() + e_nodes = simplified_node.order.get_end_nodes() + if len(s_nodes) == 1 and len(e_nodes) == 1: + sub_nodes[node_1] = simplified_node + start_nodes[node_1] = list(s_nodes)[0] + end_nodes[node_1] = list(e_nodes)[0] + else: + simplified_nodes[node_1] = simplified_node + else: + simplified_nodes[node_1] = simplified_node + + new_nodes = list(simplified_nodes.values()) + for po, simplified_po in sub_nodes.items(): + new_nodes = new_nodes + list(simplified_po.children) + res = StrictPartialOrder(new_nodes) + for node_1 in self.children: + for node_2 in self.children: + if self.partial_order.is_edge(node_1, node_2): + if node_1 in simplified_nodes.keys() and node_2 in simplified_nodes.keys(): + res.partial_order.add_edge(simplified_nodes[node_1], simplified_nodes[node_2]) + elif node_1 in simplified_nodes.keys(): + res.partial_order.add_edge(simplified_nodes[node_1], start_nodes[node_2]) + elif node_2 in simplified_nodes.keys(): + res.partial_order.add_edge(end_nodes[node_1], simplified_nodes[node_2]) + else: + res.partial_order.add_edge(end_nodes[node_1], start_nodes[node_2]) + for po, simplified_po in sub_nodes.items(): + for node_1 in simplified_po.children: + for node_2 in simplified_po.children: + if simplified_po.partial_order.is_edge(node_1, node_2): + res.partial_order.add_edge(node_1, node_2) + return res + + def add_edge(self, source, target): + return self.order.add_edge(source, target) + + +class Sequence(StrictPartialOrder): + + def __init__(self, nodes: TList[POWL]) -> None: + super().__init__(nodes) + for i in range(len(nodes)): + for j in range(i + 1, len(nodes)): + self.partial_order.add_edge(nodes[i], nodes[j]) + + +class OperatorPOWL(POWL): + def __init__(self, operator: Operator, children: TList[POWL]) -> None: + if operator is Operator.XOR: + if len(children) < 2: + raise Exception("Cannot create a choice of less than 2 submodels!") + elif operator is Operator.LOOP: + if len(children) != 2: + raise Exception("Only loops of length 2 are supported!") + else: + raise Exception("Unsupported Operator!") + super().__init__() + self.operator = operator + self.children = children + + def copy(self): + copied_nodes = [n.copy() for n in self.children] + return OperatorPOWL(self.operator, copied_nodes) + + def __lt__(self, other: object) -> bool: + if isinstance(other, OperatorPOWL): + return self.__repr__() < other.__repr__() + elif isinstance(other, Transition): + return False + elif isinstance(other, StrictPartialOrder): + return True + return NotImplemented + + def equal_content(self, other: object) -> bool: + if not isinstance(other, OperatorPOWL): + return False + + if self.operator != other.operator: + return False + + ordered_nodes_1 = sorted(list(self.children)) + ordered_nodes_2 = sorted(list(other.children)) + if len(ordered_nodes_1) != len(ordered_nodes_2): + return False + for i in range(len(ordered_nodes_1)): + node_1 = ordered_nodes_1[i] + node_2 = ordered_nodes_2[i] + if not node_1.equal_content(node_2): + return False + return True + + def simplify_using_frequent_transitions(self) -> POWL: + if self.operator is Operator.XOR and len(self.children) == 2: + child_0 = self.children[0] + child_1 = self.children[1] + if isinstance(child_0, Transition) and isinstance(child_1, SilentTransition): + return FrequentTransition(label=child_0.label, min_freq=0, max_freq=1) + elif isinstance(child_1, Transition) and isinstance(child_0, SilentTransition): + return FrequentTransition(label=child_1.label, min_freq=0, max_freq=1) + + if self.operator is Operator.LOOP and len(self.children) == 2: + child_0 = self.children[0] + child_1 = self.children[1] + if isinstance(child_0, Transition) and isinstance(child_1, SilentTransition): + return FrequentTransition(label=child_0.label, min_freq=1, max_freq="-") + elif isinstance(child_1, Transition) and isinstance(child_0, SilentTransition): + return FrequentTransition(label=child_1.label, min_freq=0, max_freq="-") + + return OperatorPOWL(self.operator, [child.simplify_using_frequent_transitions() for child in self.children]) + + def simplify(self) -> "OperatorPOWL": + if self.operator is Operator.XOR and len(self.children) == 2: + child_0 = self.children[0] + child_1 = self.children[1] + + def merge_with_children(child0, child1): + if isinstance(child0, SilentTransition) and isinstance(child1, OperatorPOWL) \ + and child1.operator is Operator.LOOP: + if isinstance(child1.children[0], SilentTransition): + return OperatorPOWL(Operator.LOOP, [n.simplify() for n in child1.children]) + elif isinstance(child1.children[1], SilentTransition): + return OperatorPOWL(Operator.LOOP, list(reversed([n.simplify() for n in child1.children]))) + + return None + + res = merge_with_children(child_0, child_1) + if res is not None: + return res + + res = merge_with_children(child_1, child_0) + if res is not None: + return res + + if self.operator is Operator.XOR: + new_children = [] + for child in self.children: + s_child = child.simplify() + if isinstance(s_child, OperatorPOWL) and s_child.operator is Operator.XOR: + for node in s_child.children: + new_children.append(node.simplify()) + else: + new_children.append(s_child) + return OperatorPOWL(Operator.XOR, [child for child in new_children]) + else: + return OperatorPOWL(self.operator, [child.simplify() for child in self.children]) diff --git a/pm4py/pm4py/objects/powl/parser.py b/pm4py/pm4py/objects/powl/parser.py new file mode 100644 index 0000000000000000000000000000000000000000..7ad3e34a2b439b91d78883e5f3e5e71b3e0866ef --- /dev/null +++ b/pm4py/pm4py/objects/powl/parser.py @@ -0,0 +1,117 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.powl.obj import POWL, OperatorPOWL, StrictPartialOrder, SilentTransition, Transition +from pm4py.objects.process_tree.obj import Operator as PTOperator +from pm4py.util import hie_utils +import re + + +def parse_powl_model_string(powl_string, level=0) -> POWL: + """ + Parse a POWL model from a string representation of the process model + (with the same format as the __repr__ and __str__ methods of the POWL model) + + Minimum Viable Example: + + from pm4py.objects.powl.parser import parse_powl_model_string + + powl_model = parse_powl_model_string('PO=(nodes={ NODE1, NODE2, NODE3 }, order={ NODE1-->NODE2 }') + print(powl_model) + + + Parameters + ------------------ + powl_string + POWL model expressed as a string (__repr__ of the POWL model) + + Returns + ------------------ + powl_model + POWL model + """ + powl_string = powl_string.replace('\n', '').replace('\r', '').replace('\t', '').strip() + max_indent = 1 + if powl_string.startswith('PO=') or powl_string.startswith('PO('): + max_indent = 2 + if powl_string.startswith("'"): + max_indent = 0 + + indented_str_list = hie_utils.indent_representation(powl_string, max_indent=max_indent) + + indented_str_list = [x.strip() for x in indented_str_list] + indented_str_list = [x[:-1] if x and x[-1] == ',' else x for x in indented_str_list] + PO = None + nodes = [] + + if indented_str_list: + if indented_str_list[0].startswith('PO=') or indented_str_list[0].startswith('PO('): + nodes_dict = {} + + # read the nodes of the POWL + i = 2 + while i < len(indented_str_list): + if indented_str_list[i] == '}': + break + N = parse_powl_model_string(indented_str_list[i], level + 1) + nodes_dict[indented_str_list[i]] = N + nodes.append(N) + i = i + 1 + + pattern = '(' + '|'.join(map(re.escape, list(nodes_dict))) + ')' + + PO = StrictPartialOrder(nodes=nodes) + + # reads the edges of the POWL + i = i + 2 + while i < len(indented_str_list): + if indented_str_list[i] == '}': + break + + split_list = [x for x in re.split(pattern, indented_str_list[i]) if x] + + if len(split_list) == 3: + PO.order.add_edge(nodes_dict[split_list[0]], nodes_dict[split_list[2]]) + + i = i + 1 + + elif indented_str_list[0].startswith('X'): + i = 1 + while i < len(indented_str_list): + if indented_str_list[i] == ')': + break + N = parse_powl_model_string(indented_str_list[i], level + 1) + nodes.append(N) + i = i + 1 + PO = OperatorPOWL(PTOperator.XOR, nodes) + elif indented_str_list[0].startswith('*'): + i = 1 + while i < len(indented_str_list): + if indented_str_list[i] == ')': + break + N = parse_powl_model_string(indented_str_list[i], level + 1) + nodes.append(N) + i = i + 1 + PO = OperatorPOWL(PTOperator.LOOP, nodes) + elif indented_str_list[0].startswith('tau'): + PO = SilentTransition() + else: + label = indented_str_list[0] + if label.startswith("'"): + label = label[1:-1] + PO = Transition(label=label) + + return PO diff --git a/pm4py/pm4py/objects/process_tree/__init__.py b/pm4py/pm4py/objects/process_tree/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..459deeaaad3f74e87a5c58d534a2a563e7619f6e --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/__init__.py @@ -0,0 +1,21 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree import obj, semantics, state, utils +import importlib.util + +if importlib.util.find_spec("lxml"): + from pm4py.objects.process_tree import importer, exporter diff --git a/pm4py/pm4py/objects/process_tree/exporter/__init__.py b/pm4py/pm4py/objects/process_tree/exporter/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4555ae2e097e5f2537f6f45401fa74c3ab1f04a7 --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/exporter/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree.exporter import variants, exporter diff --git a/pm4py/pm4py/objects/process_tree/exporter/exporter.py b/pm4py/pm4py/objects/process_tree/exporter/exporter.py new file mode 100644 index 0000000000000000000000000000000000000000..8fad9b3ad41792b2a3d86bd447f97085c029dd16 --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/exporter/exporter.py @@ -0,0 +1,67 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree.exporter.variants import ptml +from pm4py.util import exec_utils +from enum import Enum + + +class Variants(Enum): + PTML = ptml + + +DEFAULT_VARIANT = Variants.PTML + + +def apply(tree, output_path, variant=DEFAULT_VARIANT, parameters=None): + """ + Exports the process tree to a file + + Parameters + ---------------- + tree + Process tree + output_path + Output path + variant + Variant of the algorithm: + - Variants.PTML + parameters + Parameters + """ + return exec_utils.get_variant(variant).apply(tree, output_path, parameters=parameters) + + +def serialize(tree, variant=DEFAULT_VARIANT, parameters=None): + """ + Serializes the process tree into a binary string + + Parameters + ---------------- + tree + Process tree + variant + Variant of the algorithm: + - Variants.PTML + parameters + Parameters + + Returns + --------------- + serialization + Serialized string + """ + return exec_utils.get_variant(variant).export_tree_as_string(tree, parameters=parameters) diff --git a/pm4py/pm4py/objects/process_tree/exporter/variants/__init__.py b/pm4py/pm4py/objects/process_tree/exporter/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6cc26472928a6b2581fe5dc3074993a470963c29 --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/exporter/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree.exporter.variants import ptml diff --git a/pm4py/pm4py/objects/process_tree/exporter/variants/ptml.py b/pm4py/pm4py/objects/process_tree/exporter/variants/ptml.py new file mode 100644 index 0000000000000000000000000000000000000000..b15871d7649abfd955bd21712fac755a4bf52ded --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/exporter/variants/ptml.py @@ -0,0 +1,194 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +import uuid + +from lxml import etree + +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.process_tree.obj import Operator +from pm4py.util import constants, exec_utils +from enum import Enum + + +class Parameters(Enum): + ENCODING = "encoding" + + +def get_list_nodes_from_tree(tree, parameters=None): + """ + Gets the list of nodes from a process tree + + Parameters + --------------- + tree + Process tree + parameters + Parameters + + Returns + --------------- + list_nodes + List of nodes of the process tree + """ + if parameters is None: + parameters = {} + + list_nodes = [] + to_visit = [tree] + + while len(to_visit) > 0: + node = to_visit.pop(0) + for child in node.children: + to_visit.append(child) + list_nodes.append(node) + + return list_nodes + + +def export_ptree_tree(tree, parameters=None): + """ + Exports the XML tree from a process tree + + Parameters + ----------------- + tree + Process tree + parameters + Parameters of the algorithm + + Returns + ----------------- + xml_tree + XML tree object + """ + tree = copy.deepcopy(tree) + if parameters is None: + parameters = {} + + nodes = get_list_nodes_from_tree(tree, parameters=parameters) + nodes_dict = {(id(x), x): str(uuid.uuid4()) for x in nodes} + + # make sure that in the exporting, loops have 3 children + # (for ProM compatibility) + # just add a skip as third child + for node in nodes: + if node.operator == Operator.LOOP and len(node.children) < 3: + third_children = ProcessTree(operator=None, label=None) + third_children.parent = node + node.children.append(third_children) + nodes_dict[(id(third_children), third_children)] = str(uuid.uuid4()) + + # repeat twice (structure has changed) + nodes = get_list_nodes_from_tree(tree, parameters=parameters) + nodes_dict = {(id(x), x): str(uuid.uuid4()) for x in nodes} + + root = etree.Element("ptml") + processtree = etree.SubElement(root, "processTree") + processtree.set("name", str(uuid.uuid4())) + processtree.set("root", nodes_dict[(id(tree), tree)]) + processtree.set("id", str(uuid.uuid4())) + + for node in nodes: + nk = nodes_dict[(id(node), node)] + child = None + if node.operator is None: + if node.label is None: + child = etree.SubElement(processtree, "automaticTask") + child.set("name", "") + else: + child = etree.SubElement(processtree, "manualTask") + child.set("name", node.label) + else: + if node.operator is Operator.SEQUENCE: + child = etree.SubElement(processtree, "sequence") + elif node.operator is Operator.XOR: + child = etree.SubElement(processtree, "xor") + elif node.operator is Operator.PARALLEL: + child = etree.SubElement(processtree, "and") + elif node.operator is Operator.OR: + child = etree.SubElement(processtree, "or") + elif node.operator is Operator.LOOP: + child = etree.SubElement(processtree, "xorLoop") + child.set("name", "") + child.set("id", nk) + + for node in nodes: + if not node == tree: + child = etree.SubElement(processtree, "parentsNode") + child.set("id", str(uuid.uuid4())) + child.set("sourceId", nodes_dict[(id(node.parent), node.parent)]) + child.set("targetId", nodes_dict[(id(node), node)]) + + tree = etree.ElementTree(root) + return tree + + +def export_tree_as_string(tree, parameters=None): + """ + Exports a process tree as a string + + Parameters + --------------- + tree + Process tree + parameters + Parameters + + Returns + --------------- + stri + XML string describing the process tree + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + # gets the XML tree + tree = export_ptree_tree(tree, parameters=parameters) + + return etree.tostring(tree, xml_declaration=True, encoding=encoding) + + +def apply(tree, output_path, parameters=None): + """ + Exports the process tree to a XML (.PTML) file + + Parameters + ---------------- + tree + Process tree + output_path + Output path + parameters + Parameters + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + # gets the XML tree + tree = export_ptree_tree(tree, parameters=parameters) + + # exports the tree to a file + F = open(output_path, "wb") + tree.write(F, pretty_print=True, xml_declaration=True, encoding=encoding) + F.close() + + return tree diff --git a/pm4py/pm4py/objects/process_tree/importer/__init__.py b/pm4py/pm4py/objects/process_tree/importer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c7d78e2b46200faf1903f0e47ccc2f6d04a09ff8 --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/importer/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree.importer import variants, importer diff --git a/pm4py/pm4py/objects/process_tree/importer/importer.py b/pm4py/pm4py/objects/process_tree/importer/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..6afd2b1077a3ee03c29f7d39a50e727c669f1b5f --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/importer/importer.py @@ -0,0 +1,71 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.process_tree.importer.variants import ptml +from pm4py.util import exec_utils + + +class Variants(Enum): + PTML = ptml + + +DEFAULT_VARIANT = Variants.PTML + + +def apply(file_path, variant=DEFAULT_VARIANT, parameters=None): + """ + Imports a process tree from the specified path + + Parameters + --------------- + path + Path + variant + Variant of the algorithm, possible values: + - Variants.PTML + parameters + Possible parameters (version specific) + + Returns + --------------- + tree + Process tree + """ + return exec_utils.get_variant(variant).apply(file_path, parameters=parameters) + + +def deserialize(tree_string, variant=DEFAULT_VARIANT, parameters=None): + """ + Deserialize a text/binary string representing a process tree in the PTML format + + Parameters + ---------- + tree_string + Process tree expressed as PTML string + variant + Variant of the algorithm, possible values: + - Variants.PTML + parameters + Other parameters of the algorithm + + Returns + ---------- + tree + Process tree + """ + return exec_utils.get_variant(variant).import_tree_from_string(tree_string, parameters=parameters) diff --git a/pm4py/pm4py/objects/process_tree/importer/variants/__init__.py b/pm4py/pm4py/objects/process_tree/importer/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5b838d040c53fc554bf7cfc09c38cb0505a8662f --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/importer/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree.importer.variants import ptml diff --git a/pm4py/pm4py/objects/process_tree/importer/variants/ptml.py b/pm4py/pm4py/objects/process_tree/importer/variants/ptml.py new file mode 100644 index 0000000000000000000000000000000000000000..e672bed78b60d52ae5abd32533bd0677d5d18ede --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/importer/variants/ptml.py @@ -0,0 +1,172 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from lxml import etree, objectify + +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.process_tree.obj import Operator +from pm4py.objects.process_tree.utils.generic import tree_sort +from pm4py.util import constants, exec_utils +from enum import Enum + + +class Parameters(Enum): + ENCODING = "encoding" + + +def apply(path, parameters=None): + """ + Imports a PTML file from the specified path + + Parameters + --------------- + path + Path + parameters + Possible parameters + + Returns + --------------- + tree + Process tree + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, None) + + parser = etree.XMLParser(remove_comments=True, encoding=encoding) + + F = open(path, "rb") + xml_tree = objectify.parse(F, parser=parser) + F.close() + + root = xml_tree.getroot() + + return import_tree_from_xml_object(root, parameters=parameters) + + +def import_tree_from_string(tree_string, parameters=None): + """ + Imports a PTML file from a (binary) string + + Parameters + --------------- + tree_string + String representing the process tree + parameters + Possible parameters + + Returns + --------------- + tree + Process tree + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + if type(tree_string) is str: + tree_string = tree_string.encode(encoding) + + parser = etree.XMLParser(remove_comments=True) + root = objectify.fromstring(tree_string, parser=parser) + + return import_tree_from_xml_object(root, parameters=parameters) + + +def import_tree_from_xml_object(root, parameters=None): + """ + Imports a process tree from the XML object + + Parameters + --------------- + root + Root of the XML object + parameters + Possible parameters + + Returns + --------------- + tree + Process tree + """ + if parameters is None: + parameters = {} + + nodes = {} + + for c0 in root: + root = c0.get("root") + for child in c0: + tag = child.tag + id = child.get("id") + name = child.get("name") + sourceId = child.get("sourceId") + targetId = child.get("targetId") + if name is not None: + # node + if tag == "and": + operator = Operator.PARALLEL + label = None + elif tag == "sequence": + operator = Operator.SEQUENCE + label = None + elif tag == "xor": + operator = Operator.XOR + label = None + elif tag == "xorLoop": + operator = Operator.LOOP + label = None + elif tag == "or": + operator = Operator.OR + label = None + elif tag == "manualTask": + operator = None + label = name + elif tag == "automaticTask": + operator = None + label = None + else: + raise Exception("unknown tag: " + tag) + tree = ProcessTree(operator=operator, label=label) + nodes[id] = tree + else: + nodes[sourceId].children.append(nodes[targetId]) + nodes[targetId].parent = nodes[sourceId] + + # make sure that .PTML files having loops with 3 children are imported + # into the PM4Py process tree structure + # we want loops to have two children + for node in nodes.values(): + if node.operator == Operator.LOOP and len(node.children) == 3: + if not (node.children[2].operator is None and node.children[2].label is None): + parent_node = node.parent + new_parent_node = ProcessTree(operator=Operator.SEQUENCE, label=None) + node.parent = new_parent_node + new_parent_node.children.append(node) + node.children[2].parent = new_parent_node + new_parent_node.children.append(node.children[2]) + if parent_node is not None: + new_parent_node.parent = parent_node + del parent_node.children[parent_node.children.index(node)] + parent_node.children.append(new_parent_node) + del node.children[2] + + root = nodes[root] + tree_sort(root) + return root diff --git a/pm4py/pm4py/objects/process_tree/obj.py b/pm4py/pm4py/objects/process_tree/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..0bbfd7b6cf685d25530995b3167441953fb3b09c --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/obj.py @@ -0,0 +1,262 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import hie_utils +import sys + + +class Operator(Enum): + # sequence operator + SEQUENCE = '->' + # exclusive choice operator + XOR = 'X' + # parallel operator + PARALLEL = '+' + # loop operator + LOOP = '*' + # or operator + OR = 'O' + # interleaving operator + INTERLEAVING = "<>" + # partially-ordered operator + PARTIALORDER = "PO" + + def __str__(self): + """ + Provides a string representation of the current operator + + Returns + ----------- + stri + String representation of the process tree + """ + return self.value + + def __repr__(self): + """ + Provides a string representation of the current operator + + Returns + ----------- + stri + String representation of the process tree + """ + return self.value + + +class ProcessTree(object): + + class OperatorState(Enum): + ENABLED = "enabled" + OPEN = "open" + CLOSED = "closed" + FUTURE = "future" + + def __init__(self, operator=None, parent=None, children=None, label=None): + """ + Constructor + + Parameters + ------------ + operator + Operator (of the current node) of the process tree + parent + Parent node (of the current node) + children + List of children of the current node + label + Label (of the current node) + """ + self._operator = operator + self._parent = parent + self._children = list() if children is None else children + self._label = label + self._properties = {} + + def __hash__(self): + if self.label is not None: + return hash(self.label) + elif len(self.children) == 0: + return 37 + else: + h = 1337 + for i in range(len(self.children)): + h += 41 * i * hash(self.children[i]) + if self.operator == Operator.SEQUENCE: + h = h * 13 + elif self.operator == Operator.XOR: + h = h * 17 + elif self.operator == Operator.OR: + h = h * 23 + elif self.operator == Operator.PARALLEL: + h = h * 29 + elif self.operator == Operator.LOOP: + h = h * 37 + elif self.operator == Operator.INTERLEAVING: + h = h * 41 + elif self.operator == Operator.PARTIALORDER: + h = h * 43 + return h % 268435456 + + def _set_operator(self, operator): + self._operator = operator + + def _set_parent(self, parent): + self._parent = parent + + def _set_label(self, label): + self._label = label + + def _set_children(self, children): + self._children = children + + def _get_children(self): + return self._children + + def _get_parent(self): + return self._parent + + def _get_operator(self): + return self._operator + + def _get_label(self): + return self._label + + def __eq__(self, other): + if isinstance(other, ProcessTree): + if self.label is not None: + return True if other.label == self.label else False + elif len(self.children) == 0: + return other.label is None and len(other.children) == 0 + else: + if self.operator == other.operator: + if len(self.children) != len(other.children): + return False + else: + for i in range(len(self.children)): + if self.children[i] != other.children[i]: + return False + return True + else: + return False + return False + + def to_string(self, level=0, indent=False, max_indent=sys.maxsize): + """ + Represents a process tree model as a string. + + Parameters + ----------------- + indent + Enable the indentation of the resulting string + max_indent + Maximum level of indentation + """ + if self.operator is not None: + rep = str(self._operator) + '( ' + for i in range(0, len(self._children)): + child = self._children[i] + if len(child.children) == 0: + if child.label is not None: + rep += '\'' + child.to_string(level=level+1) + '\'' + ', ' if i < len(self._children) - 1 else '\'' + child.to_string(level=level+1) + '\'' + else: + rep += child.to_string(level=level+1) + ', ' if i < len(self._children) - 1 else child.to_string(level=level+1) + else: + rep += child.to_string(level=level+1) + ', ' if i < len(self._children) - 1 else child.to_string(level=level+1) + stru = rep + ' )' + if level == 0 and indent: + stru = "\n".join(hie_utils.indent_representation(stru, max_indent=max_indent)) + return stru + elif self.label is not None: + return self.label + else: + return 'tau' + + def __repr__(self): + """ + Returns a string representation of the process tree + + Returns + ------------ + stri + String representation of the process tree + """ + return self.to_string() + + def __str__(self): + """ + Returns a string representation of the process tree + + Returns + ------------ + stri + String representation of the process tree + """ + return self.to_string() + + @staticmethod + def model_description() -> str: + descr = """A process tree is a hierarchical process model. +The following operators are defined for process trees: +-> ( A, B ) tells that the process tree A should be executed before the process tree B +X ( A, B ) tells that there is an exclusive choice between executing the process tree A or the process tree B ++ ( A, B ) tells that A and B are executed in true concurrency. +* ( A, B ) is a loop. So the process tree A is executed, then either you exit the loop, or you execute B and then A again (this can happen several times until the loop is exited). +the leafs of a process tree are either activities (denoted by 'X' where X is the name of the activity) or silent steps (indicated by tau). +An example process tree follows: ++ ( 'A', -> ( 'B', 'C' ) ) +tells that you should execute B before executing C. In true concurrency, you can execute A. So the possible traces are A->B->C, B->A->C, B->C->A. +""" + return descr + + def _get_root(self): + root = self + while root._get_parent() is not None: + root = root._get_parent() + return root + + def _get_leaves(self): + root = self._get_root() + leaves = [root] + if root._get_children() != list(): + leaves = root._get_children() + change_of_leaves = True + while change_of_leaves: + leaves_to_replace = list() + new_leaves = list() + for leaf in leaves: + if leaf._get_children() != list(): + leaves_to_replace.append(leaf) + else: + new_leaves.append(leaf) + if leaves_to_replace != list(): + for leaf in leaves_to_replace: + for el in leaf.children: + new_leaves.append(el) + leaves = new_leaves + else: + change_of_leaves = False + return leaves + + def _print_tree(self): + root = self._get_root() + print(root) + + parent = property(_get_parent, _set_parent) + children = property(_get_children, _set_children) + operator = property(_get_operator, _set_operator) + label = property(_get_label, _set_label) diff --git a/pm4py/pm4py/objects/process_tree/semantics.py b/pm4py/pm4py/objects/process_tree/semantics.py new file mode 100644 index 0000000000000000000000000000000000000000..3bfa691cde2129da1ecf4cb036dd539fc2a89247 --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/semantics.py @@ -0,0 +1,275 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import random + +from pm4py.objects.log.obj import EventLog, Trace, Event +from pm4py.util import xes_constants as xes +from pm4py.objects.process_tree import obj as pt_opt +from pm4py.objects.process_tree import state as pt_st +from pm4py.objects.process_tree.utils import generic as pt_util +from pm4py.objects.process_tree.obj import ProcessTree + +import datetime +from copy import deepcopy + + +class GenerationTree(ProcessTree): + # extend the parent class to replace the __eq__ and __hash__ method + def __init__(self, tree): + i = 0 + while i < len(tree.children): + tree.children[i] = GenerationTree(tree.children[i]) + tree.children[i].parent = self + i = i + 1 + ProcessTree.__init__(self, operator=tree.operator, parent=tree.parent, children=tree.children, label=tree.label) + + def __eq__(self, other): + # method that is different from default one (different taus must give different ID in log generation!!!!) + return id(self) == id(other) + + def __hash__(self): + return id(self) + + +def generate_log(pt0, no_traces=100): + """ + Generate a log out of a process tree + + Parameters + ------------ + pt + Process tree + no_traces + Number of traces contained in the process tree + + Returns + ------------ + log + Trace log object + """ + pt = deepcopy(pt0) + # different taus must give different ID in log generation!!!! + # so we cannot use the default process tree class + # we use this different one! + pt = GenerationTree(pt) + log = EventLog() + + # assigns to each event an increased timestamp from 1970 + curr_timestamp = 10000000 + + for i in range(no_traces): + ex_seq = execute(pt) + ex_seq_labels = pt_util.project_execution_sequence_to_labels(ex_seq) + trace = Trace() + trace.attributes[xes.DEFAULT_NAME_KEY] = str(i) + for label in ex_seq_labels: + event = Event() + event[xes.DEFAULT_NAME_KEY] = label + event[xes.DEFAULT_TIMESTAMP_KEY] = datetime.datetime.fromtimestamp(curr_timestamp) + + trace.append(event) + + curr_timestamp = curr_timestamp + 1 + + log.append(trace) + + return log + + +def execute(pt): + """ + Execute the process tree, returning an execution sequence + + Parameters + ----------- + pt + Process tree + + Returns + ----------- + exec_sequence + Execution sequence on the process tree + """ + enabled, open, closed = set(), set(), set() + enabled.add(pt) + # populate_closed(pt.children, closed) + execution_sequence = list() + while len(enabled) > 0: + execute_enabled(enabled, open, closed, execution_sequence) + return execution_sequence + + +def populate_closed(nodes, closed): + """ + Populate all closed nodes of a process tree + + Parameters + ------------ + nodes + Considered nodes of the process tree + closed + Closed nodes + """ + closed |= set(nodes) + for node in nodes: + populate_closed(node.children, closed) + + +def execute_enabled(enabled, open, closed, execution_sequence=None): + """ + Execute an enabled node of the process tree + + Parameters + ----------- + enabled + Enabled nodes + open + Open nodes + closed + Closed nodes + execution_sequence + Execution sequence + + Returns + ----------- + execution_sequence + Execution sequence + """ + execution_sequence = list() if execution_sequence is None else execution_sequence + vertex = random.sample(list(enabled), 1)[0] + enabled.remove(vertex) + open.add(vertex) + execution_sequence.append((vertex, pt_st.State.OPEN)) + if len(vertex.children) > 0: + if vertex.operator is pt_opt.Operator.LOOP: + while len(vertex.children) < 3: + vertex.children.append(ProcessTree(parent=vertex)) + if vertex.operator is pt_opt.Operator.SEQUENCE or vertex.operator is pt_opt.Operator.LOOP: + c = vertex.children[0] + enabled.add(c) + execution_sequence.append((c, pt_st.State.ENABLED)) + elif vertex.operator is pt_opt.Operator.PARALLEL: + enabled |= set(vertex.children) + for x in vertex.children: + if x in closed: + closed.remove(x) + map(lambda c: execution_sequence.append((c, pt_st.State.ENABLED)), vertex.children) + elif vertex.operator is pt_opt.Operator.XOR: + vc = vertex.children + c = vc[random.randint(0, len(vc) - 1)] + enabled.add(c) + execution_sequence.append((c, pt_st.State.ENABLED)) + elif vertex.operator is pt_opt.Operator.OR: + some_children = [c for c in vertex.children if random.random() < 0.5] + enabled |= set(some_children) + for x in some_children: + if x in closed: + closed.remove(x) + map(lambda c: execution_sequence.append((c, pt_st.State.ENABLED)), some_children) + elif vertex.operator is pt_opt.Operator.INTERLEAVING: + random.shuffle(vertex.children) + c = vertex.children[0] + enabled.add(c) + execution_sequence.append((c, pt_st.State.ENABLED)) + else: + close(vertex, enabled, open, closed, execution_sequence) + return execution_sequence + + +def close(vertex, enabled, open, closed, execution_sequence): + """ + Close a given vertex of the process tree + + Parameters + ------------ + vertex + Vertex to be closed + enabled + Set of enabled nodes + open + Set of open nodes + closed + Set of closed nodes + execution_sequence + Execution sequence on the process tree + """ + open.remove(vertex) + closed.add(vertex) + execution_sequence.append((vertex, pt_st.State.CLOSED)) + process_closed(vertex, enabled, open, closed, execution_sequence) + + +def process_closed(closed_node, enabled, open, closed, execution_sequence): + """ + Process a closed node, deciding further operations + + Parameters + ------------- + closed_node + Node that shall be closed + enabled + Set of enabled nodes + open + Set of open nodes + closed + Set of closed nodes + execution_sequence + Execution sequence on the process tree + """ + vertex = closed_node.parent + if vertex is not None and vertex in open: + if should_close(vertex, closed, closed_node): + close(vertex, enabled, open, closed, execution_sequence) + else: + enable = None + if vertex.operator is pt_opt.Operator.SEQUENCE or vertex.operator is pt_opt.Operator.INTERLEAVING: + enable = vertex.children[vertex.children.index(closed_node) + 1] + elif vertex.operator is pt_opt.Operator.LOOP: + enable = vertex.children[random.randint(1, 2)] if vertex.children.index(closed_node) == 0 else \ + vertex.children[0] + if enable is not None: + enabled.add(enable) + execution_sequence.append((enable, pt_st.State.ENABLED)) + + +def should_close(vertex, closed, child): + """ + Decides if a parent vertex shall be closed based on + the processed child + + Parameters + ------------ + vertex + Vertex of the process tree + closed + Set of closed nodes + child + Processed child + + Returns + ------------ + boolean + Boolean value (the vertex shall be closed) + """ + if vertex.children is None: + return True + elif vertex.operator is pt_opt.Operator.LOOP or vertex.operator is pt_opt.Operator.SEQUENCE or vertex.operator is pt_opt.Operator.INTERLEAVING: + return vertex.children.index(child) == len(vertex.children) - 1 + elif vertex.operator is pt_opt.Operator.XOR: + return True + else: + return set(vertex.children) <= closed diff --git a/pm4py/pm4py/objects/process_tree/state.py b/pm4py/pm4py/objects/process_tree/state.py new file mode 100644 index 0000000000000000000000000000000000000000..9a7b9f5e0c32b04d53f13f1d99ce53e3934cfe53 --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/state.py @@ -0,0 +1,26 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + + +class State(Enum): + # closed state + CLOSED = 1 + # enabled state + ENABLED = 2 + # open state + OPEN = 3 diff --git a/pm4py/pm4py/objects/process_tree/utils/__init__.py b/pm4py/pm4py/objects/process_tree/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/utils/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/objects/process_tree/utils/bottomup.py b/pm4py/pm4py/objects/process_tree/utils/bottomup.py new file mode 100644 index 0000000000000000000000000000000000000000..df0b9e1e3cde4902e0c17b34820bd2769157252e --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/utils/bottomup.py @@ -0,0 +1,236 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import math + +from pm4py.objects.process_tree.obj import Operator + + +def get_max_trace_length(tree, parameters=None): + """ + Get the maximum length of a trace allowed by the process tree + (can be infty) + + Parameters + --------------- + tree + Process tree + parameters + Possible parameters of the algorithm + + Returns + -------------- + max_trace_length + The maximum length of a trace + """ + if parameters is None: + parameters = {} + + bottomup = get_bottomup_nodes(tree, parameters=parameters) + max_length_dict = {} + for i in range(len(bottomup)): + get_max_length_dict(bottomup[i], max_length_dict, len(bottomup)) + + return max_length_dict[tree] + + +def get_min_trace_length(tree, parameters=None): + """ + Get the minimum length of a trace allowed by the process tree + + Parameters + --------------- + tree + Process tree + parameters + Possible parameters of the algorithm + + Returns + -------------- + min_trace_length + The minimum length of a trace + """ + if parameters is None: + parameters = {} + + bottomup = get_bottomup_nodes(tree, parameters=parameters) + min_length_dict = {} + for i in range(len(bottomup)): + get_min_length_dict(bottomup[i], min_length_dict) + + return min_length_dict[tree] + + +def get_max_rem_dict(tree, parameters=None): + """ + Gets for each node of the tree the maximum number of activities + that are inserted to 'complete' a trace of the overall tree + + Parameters + ---------------- + tree + Process tree + parameters + Parameters of the algorithm + + Returns + --------------- + max_rem_dict + Dictionary described in the docstring + """ + if parameters is None: + parameters = {} + + bottomup = get_bottomup_nodes(tree, parameters=parameters) + max_length_dict = {} + for i in range(len(bottomup)): + get_max_length_dict(bottomup[i], max_length_dict, len(bottomup)) + + max_rem_dict = {} + for i in range(len(bottomup)): + max_rem_dict[bottomup[i]] = max_length_dict[tree] - max_length_dict[bottomup[i]] + + return max_rem_dict + + +def get_min_rem_dict(tree, parameters=None): + """ + Gets for each node of the tree the minimum number of activities + that are inserted to 'complete' a trace of the overall tree + + Parameters + ---------------- + tree + Process tree + parameters + Parameters of the algorithm + + Returns + --------------- + min_rem_dict + Dictionary described in the docstring + """ + if parameters is None: + parameters = {} + + bottomup = get_bottomup_nodes(tree, parameters=parameters) + min_length_dict = {} + for i in range(len(bottomup)): + get_min_length_dict(bottomup[i], min_length_dict) + + min_rem_dict = {} + for i in range(len(bottomup)): + min_rem_dict[bottomup[i]] = min_length_dict[tree] - min_length_dict[bottomup[i]] + + return min_rem_dict + + +def get_max_length_dict(node, max_length_dict, num_nodes): + """ + Populates, given the nodes of a tree in a bottom-up order, the maximum length dictionary + (every trace generated from that point of the tree has at most length N) + + Parameters + --------------- + node + Node + max_length_dict + Dictionary that is populated in-place + num_nodes + Number of nodes in the process tree + """ + if len(node.children) == 0: + if node.label is None: + max_length_dict[node] = 0 + else: + max_length_dict[node] = 1 + elif node.operator == Operator.XOR: + max_length_dict[node] = max(max_length_dict[x] for x in node.children) + elif node.operator == Operator.PARALLEL or node.operator == Operator.SEQUENCE or node.operator == Operator.OR: + max_length_dict[node] = sum(max_length_dict[x] for x in node.children) + elif node.operator == Operator.LOOP: + max_length_dict[node] = sum(max_length_dict[x] for x in node.children) + 2 ** ( + 48 - math.ceil(math.log(num_nodes) / math.log(2))) + + +def get_min_length_dict(node, min_length_dict): + """ + Populates, given the nodes of a tree in a bottom-up order, the minimum length dictionary + (every trace generated from that point of the tree has at least length N) + + Parameters + --------------- + node + Node + min_length_dict + Dictionary that is populated in-place + """ + if len(node.children) == 0: + if node.label is None: + min_length_dict[node] = 0 + else: + min_length_dict[node] = 1 + elif node.operator == Operator.XOR: + min_length_dict[node] = min(min_length_dict[x] for x in node.children) + elif node.operator == Operator.PARALLEL or node.operator == Operator.SEQUENCE or node.operator == Operator.OR: + min_length_dict[node] = sum(min_length_dict[x] for x in node.children) + elif node.operator == Operator.LOOP: + min_length_dict[node] = min_length_dict[node.children[0]] + + +def get_bottomup_nodes(tree, parameters=None): + """ + Gets the nodes of a tree in a bottomup order (leafs come first, the master node comes after) + + Parameters + -------------- + tree + Process tree + parameters + Parameters of the algorithm + + Returns + ------------- + bottomup_nodes + Nodes of the tree in a bottomup order + """ + if parameters is None: + parameters = {} + + to_visit = [tree] + all_nodes = set() + while len(to_visit) > 0: + n = to_visit.pop(0) + all_nodes.add(n) + for child in n.children: + to_visit.append(child) + # starts to visit the tree from the leafs + bottomup = [x for x in all_nodes if len(x.children) == 0] + # then add iteratively the parent + i = 0 + while i < len(bottomup): + parent = bottomup[i].parent + if parent is not None and parent not in bottomup: + is_ok = True + for child in parent.children: + if not child in bottomup: + is_ok = False + break + if is_ok: + bottomup.append(parent) + i = i + 1 + + return bottomup diff --git a/pm4py/pm4py/objects/process_tree/utils/generic.py b/pm4py/pm4py/objects/process_tree/utils/generic.py new file mode 100644 index 0000000000000000000000000000000000000000..66b01931c332119a3d4074b21e00269270058a17 --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/utils/generic.py @@ -0,0 +1,464 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +import hashlib +from typing import Optional, List, Dict, Tuple + +from pm4py.objects.process_tree import obj as pt +from pm4py.objects.process_tree import obj as pt_op +from pm4py.objects.process_tree import state as pt_st +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.util import constants + + +def fold(tree): + ''' + This method reduces a process tree by merging nodes of the form N(N(a,b),c) into N(a,b,c), i.e., where + N = || or X. For example X(X(a,b),c) == X(a,b,c). + Furthermore, meaningless parts, e.g., internal nodes without children, or, operators with one child are removed + as well. + + :param tree: + :return: + ''' + tree = copy.deepcopy(tree) + tree = _fold(tree) + root = tree + while root.parent is None and len(tree.children) == 1: + root = tree.children[0] + root.parent = None + tree.children.clear() + del tree + tree = root + + tree_str = str(tree) + tree = reduce_tau_leafs(tree) + tau_leafs_red_tree_str = str(tree) + + if len(tau_leafs_red_tree_str) != len(tree_str): + tree = fold(tree) + tree_str = str(tree) + + tree2 = _fold(tree) + tree2_str = str(tree2) + + if len(tree2_str) != len(tree_str): + tree = fold(tree2) + + return tree + + +def _fold(tree): + tree = reduce_tau_leafs(tree) + + if len(tree.children) > 0: + tree.children = list(map(lambda c: _fold(c), tree.children)) + tree.children = list(filter(lambda c: c is not None, tree.children)) + + if len(tree.children) == 0: + tree.parent = None + tree.children = None + return None + elif len(tree.children) == 1: + child = tree.children[0] + child.parent = tree.parent + tree.parent = None + tree.children = None + return child + + if tree.operator in [pt_op.Operator.SEQUENCE, pt_op.Operator.PARALLEL]: + i = 0 + while i < len(tree.children): + child = tree.children[i] + if child.operator is None and child.label is None: + del tree.children[i] + continue + i = i + 1 + if len(tree.children) == 0: + tree.operator = None + + if tree.operator in [pt_op.Operator.SEQUENCE, pt_op.Operator.XOR, pt_op.Operator.PARALLEL]: + chlds = [c for c in tree.children] + for c in chlds: + if c.operator == tree.operator: + i = tree.children.index(c) + tree.children[i:i] = c.children + for cc in c.children: + cc.parent = tree + tree.children.remove(c) + c.children.clear() + c.parent = None + return tree + + +def reduce_tau_leafs(tree): + ''' + This method reduces tau leaves that are not meaningful. For example tree ->(a,\tau,b) is reduced to ->(a,b). + In some cases this results in constructs such as ->(a), i.e., a sequence with a single child. Such constructs + are not further reduced. + + :param tree: + :return: + ''' + if len(tree.children) > 0: + for c in tree.children: + reduce_tau_leafs(c) + silents = 0 + for c in tree.children: + if is_tau_leaf(c): + silents += 1 + if silents > 0: + if len(tree.children) == silents: + # all children are tau, keep one (might be folded later) + if tree.operator in [pt_op.Operator.SEQUENCE, pt_op.Operator.PARALLEL, pt_op.Operator.XOR, + pt_op.Operator.OR]: + # remove all but one, later reductions might need the fact that skipping is possible + while silents > 1: + cc = tree.children + for c in cc: + if is_tau_leaf(c): + c.parent = None + tree.children.remove(c) + silents -= 1 + break + elif tree.operator == pt_op.Operator.LOOP and len(tree.children) == 2: + # remove all loop is redundant + cc = tree.children + for c in cc: + if is_tau_leaf(c): + c.parent = None + tree.children.remove(c) + else: + # at least one non-tau child + if tree.operator in [pt_op.Operator.SEQUENCE, pt_op.Operator.PARALLEL]: + # remove all, they are redundant for these operators + cc = tree.children + for c in cc: + if is_tau_leaf(c): + c.parent = None + tree.children.remove(c) + elif tree.operator in [pt_op.Operator.XOR, pt_op.Operator.OR]: + # keep one, we should be able to skip + while silents > 1: + cc = tree.children + for c in cc: + if is_tau_leaf(c): + c.parent = None + tree.children.remove(c) + silents -= 1 + break + return tree + + +def is_tau_leaf(tree): + return is_leaf(tree) and tree.label is None + + +def is_leaf(tree): + return (tree.children is None or len(tree.children) == 0) and tree.operator is None + + +def project_execution_sequence_to_leafs(execution_sequence): + """ + Project an execution sequence to the set of leafs + of the tree. + + Parameters + ------------ + execution_sequence + Execution sequence on the process tree + + Returns + ------------ + list_leafs + Leafs nodes of the process tree + """ + return list(map(lambda x: x[0], + filter(lambda x: (x[1] is pt_st.State.OPEN and len(x[0].children) == 0), execution_sequence))) + + +def project_execution_sequence_to_labels(execution_sequence): + """ + Project an execution sequence to a set of labels + + Parameters + ------------ + execution_sequence + Execution sequence on the process tree + + Returns + ------------ + list_labels + List of labels contained in the process tree + """ + return list(map(lambda x: x.label, + filter(lambda x: x.label is not None, project_execution_sequence_to_leafs(execution_sequence)))) + + +def parse(string_rep): + """ + Parse a string provided by the user to a process tree + (initialization method) + + Parameters + ------------ + string_rep + String representation of the process tree + + Returns + ------------ + node + Process tree object + """ + depth_cache = dict() + depth = 0 + return parse_recursive(string_rep, depth_cache, depth) + + +def parse_recursive(string_rep, depth_cache, depth): + """ + Parse a string provided by the user to a process tree + (recursive method) + + Parameters + ------------ + string_rep + String representation of the process tree + depth_cache + Depth cache of the algorithm + depth + Current step depth + + Returns + ----------- + node + Process tree object + """ + string_rep = string_rep.strip().replace("\r", "").replace("\n", " ") + node = None + operator = None + if string_rep.startswith(pt_op.Operator.LOOP.value): + operator = pt_op.Operator.LOOP + string_rep = string_rep[len(pt_op.Operator.LOOP.value):] + elif string_rep.startswith(pt_op.Operator.PARALLEL.value): + operator = pt_op.Operator.PARALLEL + string_rep = string_rep[len(pt_op.Operator.PARALLEL.value):] + elif string_rep.startswith(pt_op.Operator.XOR.value): + operator = pt_op.Operator.XOR + string_rep = string_rep[len(pt_op.Operator.XOR.value):] + elif string_rep.startswith(pt_op.Operator.OR.value): + operator = pt_op.Operator.OR + string_rep = string_rep[len(pt_op.Operator.OR.value):] + elif string_rep.startswith(pt_op.Operator.SEQUENCE.value): + operator = pt_op.Operator.SEQUENCE + string_rep = string_rep[len(pt_op.Operator.SEQUENCE.value):] + elif string_rep.startswith(pt_op.Operator.INTERLEAVING.value): + operator = pt_op.Operator.INTERLEAVING + string_rep = string_rep[len(pt_op.Operator.INTERLEAVING.value):] + if operator is not None: + parent = None if depth == 0 else depth_cache[depth - 1] + node = pt.ProcessTree(operator=operator, parent=parent) + depth_cache[depth] = node + if parent is not None: + parent.children.append(node) + depth += 1 + string_rep = string_rep.strip() + assert (string_rep[0] == '(') + parse_recursive(string_rep[1:], depth_cache, depth) + else: + label = None + if string_rep.startswith('\''): + string_rep = string_rep[1:] + escape_ext = string_rep.find('\'') + label = string_rep[0:escape_ext] + string_rep = string_rep[escape_ext + 1:] + else: + assert (string_rep.startswith('tau') or string_rep.startswith('τ') or string_rep.startswith(u'\u03c4')) + if string_rep.startswith('tau'): + string_rep = string_rep[len('tau'):] + elif string_rep.startswith('τ'): + string_rep = string_rep[len('τ'):] + elif string_rep.startswith(u'\u03c4'): + string_rep = string_rep[len(u'\u03c4'):] + parent = None if depth == 0 else depth_cache[depth - 1] + node = pt.ProcessTree(operator=operator, parent=parent, label=label) + if parent is not None: + parent.children.append(node) + + while string_rep.strip().startswith(')'): + depth -= 1 + string_rep = (string_rep.strip())[1:] + if len(string_rep.strip()) > 0: + parse_recursive((string_rep.strip())[1:], depth_cache, depth) + return node + + +def tree_sort(tree): + """ + Sort a tree in such way that the order of the nodes + in AND/XOR children is always the same. + This is a recursive function + + Parameters + -------------- + tree + Process tree + """ + tree.labels_hash_sum = 0 + for child in tree.children: + tree_sort(child) + tree.labels_hash_sum += child.labels_hash_sum + if tree.label is not None: + # this assures that among different executions, the same string gets always the same hash + this_hash = int(hashlib.md5(str(tree.label).encode(constants.DEFAULT_ENCODING)).hexdigest(), 16) + tree.labels_hash_sum += this_hash + if tree.operator is pt_op.Operator.PARALLEL or tree.operator is pt_op.Operator.XOR: + tree.children = sorted(tree.children, key=lambda x: x.labels_hash_sum) + + +def structurally_language_equal(tree1, tree2): + ''' + this function checks if two given process trees are structurally equal, modulo, shuffling of children (if allowed), + i.e., in the parallel, or and xor operators, the order does not matter. + + :param tree1: + :param tree2: + :return: + ''' + if tree1.label is not None: + return True if tree2.label == tree1.label else False + elif len(tree1.children) == 0: + return tree2.label is None and len(tree2.children) == 0 + else: + if tree1.operator == tree2.operator: + if len(tree1.children) != len(tree2.children): + return False + if tree1.operator in [pt_op.Operator.SEQUENCE, pt_op.Operator.LOOP]: + for i in range(len(tree1.children)): + if not structurally_language_equal(tree1.children[i], tree2.children[i]): + return False + return True + elif tree1.operator in [pt_op.Operator.PARALLEL, pt_op.Operator.XOR, pt_op.Operator.OR]: + matches = list(range(len(tree1.children))) + for i in range(len(tree1.children)): + mm = [m for m in matches] + for j in mm: + if structurally_language_equal(tree1.children[i], tree2.children[j]): + matches.remove(j) + break + return True if len(matches) == 0 else False + else: + return False + + +def get_process_tree_height(pt: ProcessTree) -> int: + """ + calculates from the given node the max height downwards + :param pt: process tree node + :return: height + """ + if is_leaf(pt): + return 1 + else: + return 1 + max([get_process_tree_height(x) for x in pt.children]) + + +def process_tree_to_binary_process_tree(tree: ProcessTree) -> ProcessTree: + if len(tree.children) > 2: + left_tree = tree.children[0] + + right_tree_op = tree.operator + if tree.operator == pt_op.Operator.LOOP: + right_tree_op = pt_op.Operator.XOR + + right_tree = ProcessTree(operator=right_tree_op, parent=tree, + children=tree.children[1:]) + for child in right_tree.children: + child.parent = right_tree + + tree.children = [left_tree, right_tree] + + for child in tree.children: + process_tree_to_binary_process_tree(child) + + return tree + + +def common_ancestor(t1: ProcessTree, t2: ProcessTree) -> Optional[ProcessTree]: + parents = set() + parent = t1.parent + while parent is not None: + parents.add(parent) + parent = parent.parent + parent = t2.parent + while parent is not None: + if parent in parents: + return parent + parent = parent.parent + return None + + +def get_ancestors_until(t: ProcessTree, until: ProcessTree, include_until: bool = True) -> Optional[List[ProcessTree]]: + ancestors = list() + if t == until: + return ancestors + parent = t.parent + while parent != until: + ancestors.append(parent) + parent = parent.parent + if parent is None: + return None + if include_until: + ancestors.append(until) + return ancestors + + +def get_leaves(t: ProcessTree, leaves=None): + leaves = leaves if leaves is not None else set() + if len(t.children) == 0: + leaves.add(t) + else: + for c in t.children: + leaves = get_leaves(c, leaves) + return leaves + + +def get_leaves_as_tuples(t: ProcessTree, leaves=None): + leaves = leaves if leaves is not None else set() + if len(t.children) == 0: + leaves.add((id(t), t)) + else: + for c in t.children: + leaves = get_leaves_as_tuples(c, leaves) + return leaves + + +def is_operator(tree: ProcessTree, operator: pt_op.Operator) -> bool: + return tree is not None and tree.operator is not None and tree.operator == operator + + +def is_any_operator_of(tree: ProcessTree, operators: List[pt_op.Operator]) -> bool: + return tree is not None and tree.operator is not None and tree.operator in operators + + +def is_in_state(tree: ProcessTree, target_state: ProcessTree.OperatorState, + tree_state: Dict[Tuple[int, ProcessTree], ProcessTree.OperatorState]) -> bool: + return tree is not None and (id(tree), tree) in tree_state and tree_state[(id(tree), tree)] == target_state + + +def is_root(tree: ProcessTree) -> bool: + return tree.parent is None diff --git a/pm4py/pm4py/objects/process_tree/utils/regex.py b/pm4py/pm4py/objects/process_tree/utils/regex.py new file mode 100644 index 0000000000000000000000000000000000000000..df5954ed70b5bb9b31b644bf91de2d8da20f14d4 --- /dev/null +++ b/pm4py/pm4py/objects/process_tree/utils/regex.py @@ -0,0 +1,85 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.process_tree import obj as pt_operator +from pm4py.util.regex import SharedObj, get_new_char + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The regex package will be removed in a future release.") + + +def pt_to_regex(tree, rec_depth=0, shared_obj=None, parameters=None): + """ + Transforms a process tree to a regular expression + + NB: The conversion is not yet working with trees containing an AND and/or an OR operator! + + Parameters + ------------ + tree + Process tree + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + if shared_obj is None: + shared_obj = SharedObj() + + stru = "" + + if tree.operator is not None: + contains_tau = len(list(child for child in tree.children if child.operator is None and child.label is None)) > 0 + children_rep = [] + for child in tree.children: + rep, shared_obj = pt_to_regex(child, rec_depth=rec_depth + 1, shared_obj=shared_obj, parameters=parameters) + children_rep.append(rep) + if tree.operator == pt_operator.Operator.SEQUENCE: + children_rep = [x for x in children_rep if not x is None] + stru = "(" + "".join(children_rep) + ")" + elif tree.operator == pt_operator.Operator.XOR: + children_rep = [x for x in children_rep if not x is None] + stru = "(" + "|".join(children_rep) + ")" + if contains_tau: + stru = "(" + stru + "?)" + elif tree.operator == pt_operator.Operator.LOOP: + children_rep = [x for x in children_rep if not x is None] + if len(children_rep) == 1: + stru = "(" + children_rep[0] + ")+" + else: + stru = "(" + "".join(children_rep) + ")*" + children_rep[0] + elif tree.operator == pt_operator.Operator.PARALLEL: + raise Exception("the conversion is not yet working with trees containing an AND and/or an OR operator!") + elif tree.operator == pt_operator.Operator.OR: + raise Exception("the conversion is not yet working with trees containing an AND and/or an OR operator!") + + elif tree.label is not None: + if tree.label not in shared_obj.mapping_dictio: + get_new_char(tree.label, shared_obj) + stru = shared_obj.mapping_dictio[tree.label] + elif tree.label is None: + return None, shared_obj + + if rec_depth == 0: + ret = "^" + stru + "$", shared_obj.mapping_dictio + # print(ret) + return ret + + return stru, shared_obj diff --git a/pm4py/pm4py/objects/random_variables/__init__.py b/pm4py/pm4py/objects/random_variables/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bf10640738f63898f0da41b74cfde718f2cd894d --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.random_variables import constant0, normal, uniform, exponential, random_variable, lognormal, gamma + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The random_variables package will be removed in a future release.") diff --git a/pm4py/pm4py/objects/random_variables/basic_structure.py b/pm4py/pm4py/objects/random_variables/basic_structure.py new file mode 100644 index 0000000000000000000000000000000000000000..e5091339426e9f4574366956cbc1924b66ce2986 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/basic_structure.py @@ -0,0 +1,149 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +class BasicStructureRandomVariable(object): + def __init__(self): + """ + Constructor + """ + self.priority = 0 + self.weight = 0 + + def get_weight(self): + """ + Getter of weight + + Returns + ---------- + weight + Weight of the transition + """ + return self.weight + + def set_weight(self, weight): + """ + Setter of weight variable + + Parameters + ----------- + weight + Weight of the transition + """ + self.weight = weight + + def get_priority(self): + """ + Getter of the priority + + Returns + ----------- + priority + Priority of the transition + """ + return self.priority + + def set_priority(self, priority): + """ + Setter of the priority variable + + Parameters + ------------ + priority + Priority of the transition + """ + self.priority = priority + + def get_transition_type(self): + """ + Get the type of transition associated to the current distribution + + Returns + ----------- + transition_type + String representing the type of the transition + """ + return "TIMED" + + def get_distribution_type(self): + """ + Get current distribution type + + Returns + ----------- + distribution_type + String representing the distribution type + """ + return "NORMAL" + + def get_distribution_parameters(self): + """ + Get a string representing distribution parameters + + Returns + ----------- + distribution_parameters + String representing distribution parameters + """ + return "UNDEFINED" + + def __str__(self): + """ + Returns a representation of the current object + + Returns + ---------- + repr + Representation of the current object + """ + return self.get_distribution_type() + " " + self.get_distribution_parameters() + + def __repr__(self): + """ + Returns a representation of the current object + + Returns + ---------- + repr + Representation of the current object + """ + return self.get_distribution_type() + " " + self.get_distribution_parameters() + + def get_value(self): + """ + Get a random value following the distribution + + Returns + ----------- + value + Value obtained following the distribution + """ + return None + + def get_values(self, no_values=400): + """ + Get some random values following the distribution + + Parameters + ----------- + no_values + Number of values to return + + Returns + ---------- + values + Values extracted according to the probability distribution + """ + return [self.get_value() for i in range(no_values)] diff --git a/pm4py/pm4py/objects/random_variables/constant0/__init__.py b/pm4py/pm4py/objects/random_variables/constant0/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..06226ba5edadd4fe125cc4901bb67340e04b9c33 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/constant0/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.random_variables.constant0 import random_variable diff --git a/pm4py/pm4py/objects/random_variables/constant0/random_variable.py b/pm4py/pm4py/objects/random_variables/constant0/random_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..6a7b6115aea92ef9a9a509cef9d7be2dbbf9a561 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/constant0/random_variable.py @@ -0,0 +1,129 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +from pm4py.objects.random_variables.uniform.random_variable import Uniform + + +class Constant0(Uniform): + """ + Describes a constant0-equal-to-0 random variable + """ + + def __init__(self): + """ + Constructor + + Parameters + ---------- + value + Constant value of the distribution + """ + Uniform.__init__(self, loc=0, scale=0) + self.priority = 1 + + def read_from_string(self, distribution_parameters): + """ + Initialize distribution parameters from string + + Parameters + ----------- + distribution_parameters + Current distribution parameters as exported on the Petri net + """ + return None + + def get_transition_type(self): + """ + Get the type of transition associated to the current distribution + + Returns + ----------- + transition_type + String representing the type of the transition + """ + return "IMMEDIATE" + + def get_distribution_type(self): + """ + Get current distribution type + + Returns + ----------- + distribution_type + String representing the distribution type + """ + return "IMMEDIATE" + + def get_distribution_parameters(self): + """ + Get a string representing distribution parameters + + Returns + ----------- + distribution_parameters + String representing distribution parameters + """ + return "UNDEFINED" + + def get_value(self): + """ + Get a random value following the distribution + + Returns + ----------- + value + Value obtained following the distribution + """ + return 0 + + def get_values(self, no_values=400): + """ + Get some random values following the distribution + + Parameters + ----------- + no_values + Number of values to return + + Returns + ---------- + values + Values extracted according to the probability distribution + """ + return [self.get_value() for i in range(no_values)] + + def calculate_loglikelihood(self, values, tol=0.0001): + """ + Calculate log likelihood + + Parameters + ------------ + values + Empirical values to work on + tol + Tolerance about float values (consider them 0?) + + Returns + ------------ + likelihood + Log likelihood that the values follows the distribution + """ + values_0 = [x for x in values if abs(x) < tol] + if len(values) == len(values_0): + return sys.float_info.max + return -sys.float_info.max diff --git a/pm4py/pm4py/objects/random_variables/deterministic/__init__.py b/pm4py/pm4py/objects/random_variables/deterministic/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/deterministic/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/objects/random_variables/deterministic/random_variable.py b/pm4py/pm4py/objects/random_variables/deterministic/random_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..56478b9a1e17a2a3b5b893f65df3ecb241602fc6 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/deterministic/random_variable.py @@ -0,0 +1,130 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +from pm4py.objects.random_variables.basic_structure import BasicStructureRandomVariable + + +class Deterministic(BasicStructureRandomVariable): + """ + Describes a deterministic random variable + """ + + def __init__(self, value=0): + """ + Constructor + + Parameters + ---------- + value + Constant value of the distribution + """ + BasicStructureRandomVariable.__init__(self) + self.value = value + self.priority = 1 + + def read_from_string(self, distribution_parameters): + """ + Initialize distribution parameters from string + + Parameters + ----------- + distribution_parameters + Current distribution parameters as exported on the Petri net + """ + self.value = distribution_parameters + + def get_transition_type(self): + """ + Get the type of transition associated to the current distribution + + Returns + ----------- + transition_type + String representing the type of the transition + """ + return "DETERMINISTIC" + + def get_distribution_type(self): + """ + Get current distribution type + + Returns + ----------- + distribution_type + String representing the distribution type + """ + return "DETERMINISTIC" + + def get_distribution_parameters(self): + """ + Get a string representing distribution parameters + + Returns + ----------- + distribution_parameters + String representing distribution parameters + """ + return str(self.value) + + def get_value(self): + """ + Get a random value following the distribution + + Returns + ----------- + value + Value obtained following the distribution + """ + return self.value + + def get_values(self, no_values=400): + """ + Get some random values following the distribution + + Parameters + ----------- + no_values + Number of values to return + + Returns + ---------- + values + Values extracted according to the probability distribution + """ + return [self.get_value() for i in range(no_values)] + + def calculate_loglikelihood(self, values, tol=0.0001): + """ + Calculate log likelihood + + Parameters + ------------ + values + Empirical values to work on + tol + Tolerance about float values (consider them 0?) + + Returns + ------------ + likelihood + Log likelihood that the values follows the distribution + """ + values_0 = [x for x in values if abs(x-self.value) < tol] + if len(values) == len(values_0): + return sys.float_info.max + return -sys.float_info.max diff --git a/pm4py/pm4py/objects/random_variables/exponential/__init__.py b/pm4py/pm4py/objects/random_variables/exponential/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5f43abc3b19b7474ec4fd44d62c915e5d9633870 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/exponential/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.random_variables.exponential.random_variable import Exponential diff --git a/pm4py/pm4py/objects/random_variables/exponential/random_variable.py b/pm4py/pm4py/objects/random_variables/exponential/random_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..ee03ba27b75c62313b9111fbe7eeba16710bfa7e --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/exponential/random_variable.py @@ -0,0 +1,129 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +import numpy as np + +from pm4py.objects.random_variables.basic_structure import BasicStructureRandomVariable + + +class Exponential(BasicStructureRandomVariable): + """ + Describes a normal variable + """ + + def __init__(self, loc=1, scale=1): + """ + Constructor + + Parameters + ----------- + loc + Loc of the distribution (see docs.scipy.org/doc/scipy/reference/generated/scipy.stats.expon.html) + scale + Scale of the distribution + """ + self.loc = loc + self.scale = scale + self.priority = 0 + BasicStructureRandomVariable.__init__(self) + + def read_from_string(self, distribution_parameters): + """ + Initialize distribution parameters from string + + Parameters + ----------- + distribution_parameters + Current distribution parameters as exported on the Petri net + """ + self.loc = 0 + self.scale = 1.0 / float(distribution_parameters) + + def get_distribution_type(self): + """ + Get current distribution type + + Returns + ----------- + distribution_type + String representing the distribution type + """ + return "EXPONENTIAL" + + def get_distribution_parameters(self): + """ + Get a string representing distribution parameters + + Returns + ----------- + distribution_parameters + String representing distribution parameters + """ + if self.scale > 0: + return str(1.0 / float(self.scale)) + return "UNDEFINED" + + def calculate_loglikelihood(self, values): + """ + Calculate log likelihood + + Parameters + ------------ + values + Empirical values to work on + + Returns + ------------ + likelihood + Log likelihood that the values follows the distribution + """ + from scipy.stats import expon + + if len(values) > 1: + somma = 0 + for value in values: + somma = somma + np.log(expon.pdf(value, self.loc, self.scale)) + return somma + return -sys.float_info.max + + def calculate_parameters(self, values): + """ + Calculate parameters of the current distribution + + Parameters + ----------- + values + Empirical values to work on + """ + from scipy.stats import expon + + if len(values) > 1: + self.loc, self.scale = expon.fit(values, floc=0) + + def get_value(self): + """ + Get a random value following the distribution + + Returns + ----------- + value + Value obtained following the distribution + """ + from scipy.stats import expon + + return expon.rvs(self.loc, self.scale) diff --git a/pm4py/pm4py/objects/random_variables/gamma/__init__.py b/pm4py/pm4py/objects/random_variables/gamma/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c4ed0d458ee28250924a6bbd3e37784117f65aec --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/gamma/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.random_variables.gamma import random_variable diff --git a/pm4py/pm4py/objects/random_variables/gamma/random_variable.py b/pm4py/pm4py/objects/random_variables/gamma/random_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..b27364108cabaf99a286ba576c58c9d646979844 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/gamma/random_variable.py @@ -0,0 +1,127 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +import numpy as np + +from pm4py.objects.random_variables.basic_structure import BasicStructureRandomVariable +from pm4py.util import constants +import warnings + + +class Gamma(BasicStructureRandomVariable): + """ + Describes a normal variable + """ + + def __init__(self, a=1, loc=0, scale=1): + """ + Constructor + """ + self.a = a + self.loc = loc + self.scale = scale + BasicStructureRandomVariable.__init__(self) + + def read_from_string(self, distribution_parameters): + """ + Initialize distribution parameters from string + + Parameters + ----------- + distribution_parameters + Current distribution parameters as exported on the Petri net + """ + self.a = float(distribution_parameters.split(";")[0]) + self.loc = float(distribution_parameters.split(";")[1]) + self.scale = float(distribution_parameters.split(";")[2]) + + def get_distribution_type(self): + """ + Get current distribution type + + Returns + ----------- + distribution_type + String representing the distribution type + """ + return "GAMMA" + + def get_distribution_parameters(self): + """ + Get a string representing distribution parameters + + Returns + ----------- + distribution_parameters + String representing distribution parameters + """ + return str(self.a) + ";" + str(self.loc) + ";" + str(self.scale) + + def calculate_loglikelihood(self, values): + """ + Calculate log likelihood + + Parameters + ------------ + values + Empirical values to work on + + Returns + ------------ + likelihood + Log likelihood that the values follows the distribution + """ + from scipy.stats import gamma + + if len(values) > 1: + somma = 0 + for value in values: + somma = somma + np.log(gamma.pdf(value, self.a, self.loc, self.scale)) + return somma + return -sys.float_info.max + + def calculate_parameters(self, values): + """ + Calculate parameters of the current distribution + + Parameters + ----------- + values + Empirical values to work on + """ + from scipy.stats import gamma + + if len(values) > 1: + try: + self.a, self.loc, self.scale = gamma.fit(values) + except: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("Gamma fitting: Optimization converged to parameters that are outside the range allowed by the distribution") + + def get_value(self): + """ + Get a random value following the distribution + + Returns + ----------- + value + Value obtained following the distribution + """ + from scipy.stats import gamma + + return gamma.rvs(self.a, self.loc, self.scale) diff --git a/pm4py/pm4py/objects/random_variables/lognormal/__init__.py b/pm4py/pm4py/objects/random_variables/lognormal/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..cacd9c724e854ff820d073108c6f3d15a0b6d80f --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/lognormal/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.random_variables.lognormal import random_variable diff --git a/pm4py/pm4py/objects/random_variables/lognormal/random_variable.py b/pm4py/pm4py/objects/random_variables/lognormal/random_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..65284afe73136616464e3e472a4f70942b4519e9 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/lognormal/random_variable.py @@ -0,0 +1,121 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +import numpy as np + +from pm4py.objects.random_variables.basic_structure import BasicStructureRandomVariable + + +class LogNormal(BasicStructureRandomVariable): + """ + Describes a normal variable + """ + + def __init__(self, s=1, loc=0, scale=1): + """ + Constructor + """ + self.s = s + self.loc = loc + self.scale = scale + BasicStructureRandomVariable.__init__(self) + + def read_from_string(self, distribution_parameters): + """ + Initialize distribution parameters from string + + Parameters + ----------- + distribution_parameters + Current distribution parameters as exported on the Petri net + """ + self.s = float(distribution_parameters.split(";")[0]) + self.loc = float(distribution_parameters.split(";")[1]) + self.scale = float(distribution_parameters.split(";")[2]) + + def get_distribution_type(self): + """ + Get current distribution type + + Returns + ----------- + distribution_type + String representing the distribution type + """ + return "LOGNORMAL" + + def get_distribution_parameters(self): + """ + Get a string representing distribution parameters + + Returns + ----------- + distribution_parameters + String representing distribution parameters + """ + return str(self.s) + ";" + str(self.loc) + ";" + str(self.scale) + + def calculate_loglikelihood(self, values): + """ + Calculate log likelihood + + Parameters + ------------ + values + Empirical values to work on + + Returns + ------------ + likelihood + Log likelihood that the values follows the distribution + """ + from scipy.stats import lognorm + + if len(values) > 1: + somma = 0 + for value in values: + somma = somma + np.log(lognorm.pdf(value, self.s, self.loc, self.scale)) + return somma + return -sys.float_info.max + + def calculate_parameters(self, values): + """ + Calculate parameters of the current distribution + + Parameters + ----------- + values + Empirical values to work on + """ + from scipy.stats import lognorm + + if len(values) > 1: + self.s, self.loc, self.scale = lognorm.fit(values) + + def get_value(self): + """ + Get a random value following the distribution + + Returns + ----------- + value + Value obtained following the distribution + """ + from scipy.stats import lognorm + + return lognorm.rvs(self.s, self.loc, self.scale) diff --git a/pm4py/pm4py/objects/random_variables/normal/__init__.py b/pm4py/pm4py/objects/random_variables/normal/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1a6ed47d4b8886c69c61159c55218efbde344362 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/normal/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.random_variables.normal import random_variable diff --git a/pm4py/pm4py/objects/random_variables/normal/random_variable.py b/pm4py/pm4py/objects/random_variables/normal/random_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..60f6097e9807508b309874a014eb33949ab5b277 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/normal/random_variable.py @@ -0,0 +1,127 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +import numpy as np + +from pm4py.objects.random_variables.basic_structure import BasicStructureRandomVariable + + +class Normal(BasicStructureRandomVariable): + """ + Describes a normal variable + """ + + def __init__(self, mu=0, sigma=1): + """ + Constructor + + Parameters + ----------- + mu + Average of the normal distribution + sigma + Standard deviation of the normal distribution + """ + self.mu = mu + self.sigma = sigma + self.priority = 0 + BasicStructureRandomVariable.__init__(self) + + def read_from_string(self, distribution_parameters): + """ + Initialize distribution parameters from string + + Parameters + ----------- + distribution_parameters + Current distribution parameters as exported on the Petri net + """ + self.mu = distribution_parameters.split(";")[0] + self.sigma = distribution_parameters.split(";")[1] + + def get_distribution_type(self): + """ + Get current distribution type + + Returns + ----------- + distribution_type + String representing the distribution type + """ + return "NORMAL" + + def get_distribution_parameters(self): + """ + Get a string representing distribution parameters + + Returns + ----------- + distribution_parameters + String representing distribution parameters + """ + return str(self.mu) + ";" + str(self.sigma) + + def calculate_loglikelihood(self, values): + """ + Calculate log likelihood + + Parameters + ------------ + values + Empirical values to work on + + Returns + ------------ + likelihood + Log likelihood that the values follows the distribution + """ + from scipy.stats import norm + + if len(values) > 1: + somma = 0 + for value in values: + somma = somma + np.log(norm.pdf(value, self.mu, self.sigma)) + return somma + return -sys.float_info.max + + def calculate_parameters(self, values): + """ + Calculate parameters of the current distribution + + Parameters + ----------- + values + Empirical values to work on + """ + from scipy.stats import norm + + if len(values) > 1: + self.mu, self.sigma = norm.fit(values) + + def get_value(self): + """ + Get a random value following the distribution + + Returns + ----------- + value + Value obtained following the distribution + """ + from scipy.stats import norm + + return norm.rvs(self.mu, self.sigma) diff --git a/pm4py/pm4py/objects/random_variables/random_variable.py b/pm4py/pm4py/objects/random_variables/random_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..345c462ffeaae22e4ce4994da7b19c8aa5177121 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/random_variable.py @@ -0,0 +1,277 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np + +from pm4py.objects.random_variables.constant0.random_variable import Constant0 +from pm4py.objects.random_variables.deterministic.random_variable import Deterministic +from pm4py.objects.random_variables.exponential.random_variable import Exponential +from pm4py.objects.random_variables.normal.random_variable import Normal +from pm4py.objects.random_variables.uniform.random_variable import Uniform +from pm4py.objects.random_variables.lognormal.random_variable import LogNormal +from pm4py.objects.random_variables.gamma.random_variable import Gamma + + +class RandomVariable(object): + def __init__(self): + self.random_variable = None + + def read_from_string(self, distribution_type, distribution_parameters): + """ + Read the random variable from string + + Parameters + ----------- + distribution_type + Distribution type + distribution_parameters + Distribution parameters splitted by ; + """ + if distribution_type == "NORMAL": + self.random_variable = Normal() + self.random_variable.read_from_string(distribution_parameters) + elif distribution_type == "UNIFORM": + self.random_variable = Uniform() + self.random_variable.read_from_string(distribution_parameters) + elif distribution_type == "EXPONENTIAL": + self.random_variable = Exponential() + self.random_variable.read_from_string(distribution_parameters) + elif distribution_type == "LOGNORMAL": + self.random_variable = LogNormal() + self.random_variable.read_from_string(distribution_parameters) + elif distribution_type == "GAMMA": + self.random_variable = Gamma() + self.random_variable.read_from_string(distribution_parameters) + elif distribution_type == "DETERMINISTIC": + self.random_variable = Deterministic() + self.random_variable.read_from_string(distribution_parameters) + elif distribution_type == "IMMEDIATE": + self.random_variable = Constant0() + + def get_distribution_type(self): + """ + Get current distribution type + + Returns + ----------- + distribution_type + String representing the distribution type + """ + if self.random_variable is not None: + return self.random_variable.get_distribution_type() + + def get_transition_type(self): + """ + Get the type of transition associated to the current distribution + + Returns + ----------- + transition_type + String representing the type of the transition + """ + if self.random_variable is not None: + return self.random_variable.get_transition_type() + + def get_distribution_parameters(self): + """ + Get a string representing distribution parameters + + Returns + ----------- + distribution_parameters + String representing distribution parameters + """ + if self.random_variable is not None: + return self.random_variable.get_distribution_parameters() + + def calculate_loglikelihood(self, values): + """ + Calculate log likelihood + + Parameters + ------------ + values + Empirical values to work on + + Returns + ------------ + likelihood + Log likelihood that the values follows the distribution + """ + if self.random_variable is not None: + return self.random_variable.calculate_loglikelihood(values) + + def calculate_parameters(self, values, parameters=None, force_distribution=None): + """ + Calculate parameters of the current distribution + + Parameters + ----------- + values + Empirical values to work on + parameters + Possible parameters of the algorithm + force_distribution + If provided, distribution to force usage (e.g. EXPONENTIAL) + + """ + + if parameters is None: + parameters = {} + + debug_mode = parameters["debug"] if "debug" in parameters else False + + if self.random_variable is not None: + self.random_variable.calculate_parameters(values) + else: + norm = Normal() + unif = Uniform() + expon = Exponential() + constant = Constant0() + lognormal = LogNormal() + gamma = Gamma() + + if not force_distribution or not force_distribution == "EXPONENTIAL": + likelihoods = list() + likelihoods.append([constant, constant.calculate_loglikelihood(values)]) + if force_distribution == "NORMAL" or force_distribution is None: + norm.calculate_parameters(values) + likelihoods.append([norm, norm.calculate_loglikelihood(values)]) + if force_distribution == "UNIFORM" or force_distribution is None: + unif.calculate_parameters(values) + likelihoods.append([unif, unif.calculate_loglikelihood(values)]) + if force_distribution == "EXPONENTIAL" or force_distribution is None: + expon.calculate_parameters(values) + likelihoods.append([expon, expon.calculate_loglikelihood(values)]) + likelihoods = [x for x in likelihoods if str(x[1]) != 'nan'] + likelihoods = sorted(likelihoods, key=lambda x: x[1], reverse=True) + + if debug_mode: + print("likelihoods = ", likelihoods) + + self.random_variable = likelihoods[0][0] + else: + avg_values = np.average(values) + if values and avg_values > 0.00000: + expon.scale = avg_values + self.random_variable = expon + else: + self.random_variable = constant + + def get_value(self): + """ + Get a random value following the distribution + + Returns + ----------- + value + Value obtained following the distribution + """ + if self.random_variable is not None: + return self.random_variable.get_value() + + def get_values(self, no_values=400): + """ + Get some random values following the distribution + + Parameters + ----------- + no_values + Number of values to return + + Returns + ---------- + values + Values extracted according to the probability distribution + """ + if self.random_variable is not None: + return self.random_variable.get_values(no_values=no_values) + + def get_weight(self): + """ + Getter of weight + + Returns + ---------- + weight + Weight of the transition + """ + if self.random_variable is not None: + return self.random_variable.get_weight() + + def set_weight(self, weight): + """ + Setter of the weight + + Parameters + ----------- + weight + Weight of the transition + """ + if self.random_variable is not None: + self.random_variable.set_weight(weight) + + def get_priority(self): + """ + Getter of the priority + + Returns + ----------- + priority + Priority of the transition + """ + if self.random_variable is not None: + return self.random_variable.get_priority() + + def set_priority(self, priority): + """ + Setter of the priority variable + + Parameters + ------------ + priority + Priority of the transition + """ + if self.random_variable is not None: + self.random_variable.set_priority(priority) + + def __str__(self): + """ + Returns a representation of the current object + + Returns + ---------- + repr + Representation of the current object + """ + if self.random_variable is not None: + return str(self.random_variable) + else: + return "UNINITIALIZED" + + def __repr__(self): + """ + Returns a representation of the current object + + Returns + ---------- + repr + Representation of the current object + """ + if self.random_variable is not None: + return repr(self.random_variable) + else: + return "UNINITIALIZED" diff --git a/pm4py/pm4py/objects/random_variables/uniform/__init__.py b/pm4py/pm4py/objects/random_variables/uniform/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3ddab9cac7d3d53147953c84b51a3e335d0e87fe --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/uniform/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.random_variables.uniform import random_variable diff --git a/pm4py/pm4py/objects/random_variables/uniform/random_variable.py b/pm4py/pm4py/objects/random_variables/uniform/random_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..99cb2fd2b356bb48ddb75c951e4a1f123363d891 --- /dev/null +++ b/pm4py/pm4py/objects/random_variables/uniform/random_variable.py @@ -0,0 +1,127 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +import numpy as np + +from pm4py.objects.random_variables.basic_structure import BasicStructureRandomVariable + + +class Uniform(BasicStructureRandomVariable): + """ + Describes an uniform variable + """ + + def __init__(self, loc=0, scale=1): + """ + Constructor + + Parameters + ----------- + loc + Start of the interval + scale + Scale of the interval + """ + self.loc = loc + self.scale = scale + self.priority = 0 + BasicStructureRandomVariable.__init__(self) + + def read_from_string(self, distribution_parameters): + """ + Initialize distribution parameters from string + + Parameters + ----------- + distribution_parameters + Current distribution parameters as exported on the Petri net + """ + self.loc = distribution_parameters.split(";")[0] + self.scale = distribution_parameters.split(";")[1] + + def get_distribution_type(self): + """ + Get current distribution type + + Returns + ----------- + distribution_type + String representing the distribution type + """ + return "UNIFORM" + + def get_distribution_parameters(self): + """ + Get a string representing distribution parameters + + Returns + ----------- + distribution_parameters + String representing distribution parameters + """ + return str(self.loc) + ";" + str(self.scale) + + def calculate_loglikelihood(self, values): + """ + Calculate log likelihood + + Parameters + ------------ + values + Empirical values to work on + + Returns + ------------ + likelihood + Log likelihood that the values follows the distribution + """ + from scipy.stats import uniform + + if len(values) > 0: + somma = 0 + for value in values: + somma = somma + np.log(uniform.pdf(value, self.loc, self.scale)) + return somma + return -sys.float_info.max + + def calculate_parameters(self, values): + """ + Calculate parameters of the current distribution + + Parameters + ----------- + values + Empirical values to work on + """ + from scipy.stats import uniform + + if len(values) > 0: + self.loc, self.scale = uniform.fit(values) + + def get_value(self): + """ + Get a random value following the distribution + + Returns + ----------- + value + Value obtained following the distribution + """ + from scipy.stats import uniform + + return uniform.rvs(self.loc, self.scale) diff --git a/pm4py/pm4py/objects/stochastic_petri/__init__.py b/pm4py/pm4py/objects/stochastic_petri/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..94076c6271aae96c4fe3b3f647b0a48c1f08e3ef --- /dev/null +++ b/pm4py/pm4py/objects/stochastic_petri/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.stochastic_petri import tangible_reachability, utils + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The stochastic_petri package will be removed in a future release.") diff --git a/pm4py/pm4py/objects/stochastic_petri/ctmc.py b/pm4py/pm4py/objects/stochastic_petri/ctmc.py new file mode 100644 index 0000000000000000000000000000000000000000..5c406b131ee642d5a90abe5fa46fee54ea4b3ba4 --- /dev/null +++ b/pm4py/pm4py/objects/stochastic_petri/ctmc.py @@ -0,0 +1,388 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter + +import numpy as np + +from pm4py.objects.petri_net.utils.reachability_graph import construct_reachability_graph +from pm4py.objects.stochastic_petri import tangible_reachability +from pm4py.objects.conversion.dfg import converter as dfg_converter +from pm4py.objects.random_variables import exponential, random_variable + + +def get_corr_hex(num): + """ + Gets correspondence between a number + and an hexadecimal string + + Parameters + ------------- + num + Number + + Returns + ------------- + hex_string + Hexadecimal string + """ + if num < 10: + return str(int(num)) + elif num < 11: + return "A" + elif num < 12: + return "B" + elif num < 13: + return "C" + elif num < 14: + return "D" + elif num < 15: + return "E" + elif num < 16: + return "F" + + +def get_color_from_probabilities(prob_dictionary): + """ + Returns colors from a dictionary of probabilities + + Parameters + ------------- + prob_dictionary + Dictionary of probabilities + + Returns + ------------- + color_dictionary + Dictionary of colors + """ + color_dictionary = {} + + for state in prob_dictionary: + value = prob_dictionary[state] + whiteness = int(255.0 * (1.0 - value)) + w1 = whiteness / 16 + w2 = whiteness % 16 + c1 = get_corr_hex(w1) + c2 = get_corr_hex(w2) + color_dictionary[state] = "#FF" + c1 + c2 + c1 + c2 + + return color_dictionary + + +def get_tangible_reachability_and_q_matrix_from_dfg_performance(dfg_performance, invisible_firing_rate=1000.0, parameters=None): + """ + Get the tangible reachability graph and the Q matrix from the performance DFG + + Parameters + ------------- + dfg_performance + Performance DFG + invisible_firing_rate + Firing rate for invisible transitions + parameters + Parameters + + Returns + ------------- + reachab_graph + Reachability graph + tangible_reach_graph + Tangible reachability graph + stochastic_info + Stochastic information + q_matrix + Q-matrix from the tangible reachability graph + """ + if parameters is None: + parameters = {} + net, im, fm = dfg_converter.apply(dfg_performance, parameters=parameters) + stochastic_map = {} + for tr in net.transitions: + if tr.label is None: + rv = random_variable.RandomVariable() + exp = exponential.Exponential() + exp.scale = 1/invisible_firing_rate + rv.random_variable = exp + stochastic_map[tr] = rv + else: + input_arc = list(tr.in_arcs)[0] + output_arc = list(tr.out_arcs)[0] + rv = random_variable.RandomVariable() + el = (input_arc.source.name, output_arc.target.name) + scale = 0 + if el in dfg_performance: + scale = dfg_performance[el] + if scale == 0: + scale = 1/invisible_firing_rate + exp = exponential.Exponential() + exp.scale = scale + rv.random_variable = exp + stochastic_map[tr] = rv + tang_reach_graph = construct_reachability_graph(net, im, use_trans_name=True) + q_matrix = get_q_matrix_from_tangible_exponential(tang_reach_graph, stochastic_map) + return tang_reach_graph, tang_reach_graph, stochastic_map, q_matrix + + +def get_tangible_reachability_and_q_matrix_from_log_net(log, net, im, fm, parameters=None): + """ + Gets the tangible reachability graph from a log and an accepting Petri net + + Parameters + --------------- + log + Event log + net + Petri net + im + Initial marking + fm + Final marking + + Returns + ------------ + reachab_graph + Reachability graph + tangible_reach_graph + Tangible reachability graph + stochastic_info + Stochastic information + q_matrix + Q-matrix from the tangible reachability graph + """ + if parameters is None: + parameters = {} + reachability_graph, tangible_reachability_graph, stochastic_info = tangible_reachability.get_tangible_reachability_from_log_net_im_fm( + log, net, im, fm, parameters=parameters) + # gets the Q matrix assuming exponential distributions + q_matrix = get_q_matrix_from_tangible_exponential(tangible_reachability_graph, stochastic_info) + return reachability_graph, tangible_reachability_graph, stochastic_info, q_matrix + + +def transient_analysis_from_petri_net_and_smap(net, im, s_map, delay, parameters=None): + """ + Gets the transient analysis from a Petri net, a stochastic map and a delay + + Parameters + ------------- + log + Event log + delay + Time delay + parameters + Parameters of the algorithm + + Returns + ------------- + transient_result + Transient analysis result + """ + if parameters is None: + parameters = {} + # gets the reachability graph from the Petri net + reachab_graph = construct_reachability_graph(net, im) + states_reachable_from_start = set() + for trans in reachab_graph.transitions: + if str(trans.from_state) == "start1": + states_reachable_from_start.add(trans.to_state) + # get the tangible reachability graph from the reachability graph and the stochastic map + tang_reach_graph = tangible_reachability.get_tangible_reachability_from_reachability(reachab_graph, s_map) + # gets the Q matrix assuming exponential distributions + q_matrix = get_q_matrix_from_tangible_exponential(tang_reach_graph, s_map) + states = sorted(list(tang_reach_graph.states), key=lambda x: x.name) + states_vector = np.zeros((1, len(states))) + + for state in states_reachable_from_start: + states_vector[0, states.index(state)] = 1.0 / len(states_reachable_from_start) + + probabilities = transient_analysis_from_tangible_q_matrix_and_states_vector(tang_reach_graph, q_matrix, + states_vector, delay) + + color_dictionary = get_color_from_probabilities(probabilities) + + return tang_reach_graph, probabilities, color_dictionary + + +def get_q_matrix_from_tangible_exponential(tangible_reach_graph, stochastic_info): + """ + Gets Q matrix from tangible reachability graph and stochastic map where the + distribution type has been forced to be exponential + + Parameters + ----------- + tangible_reach_graph + Tangible reachability graph + stochastic_info + Stochastic map for each transition + + Returns + ----------- + q_matrix + Q-matrix from the tangible reachability graph + """ + stochastic_info_name = {} + for s in stochastic_info: + stochastic_info_name[s.name] = stochastic_info[s] + + states = sorted(list(tangible_reach_graph.states), key=lambda x: x.name) + no_states = len(states) + q_matrix = np.zeros((no_states, no_states)) + + for i in range(no_states): + sum_lambda = 0.0 + for trans in states[i].outgoing: + target_state = trans.to_state + target_state_index = states.index(target_state) + if not target_state_index == i: + sinfo = stochastic_info_name[trans.name] + lambda_value = 1.0 / float(sinfo.random_variable.scale) + sum_lambda = sum_lambda + lambda_value + q_matrix[i, target_state_index] = q_matrix[i, target_state_index] + lambda_value + q_matrix[i, i] = -sum_lambda + + return q_matrix + + +def transient_analysis_from_tangible_q_matrix_and_single_state(tangible_reach_graph, q_matrix, source_state, time_diff): + """ + Do transient analysis from tangible reachability graph, Q matrix and a single state to start from + + Parameters + ----------- + tangible_reach_graph + Tangible reachability graph + q_matrix + Q matrix + source_state + Source state to consider + time_diff + Time interval we want to investigate + + Returns + ----------- + transient_result + Transient analysis result + """ + states = sorted(list(tangible_reach_graph.states), key=lambda x: x.name) + state_index = states.index(source_state) + + states_vector = np.zeros((1, len(states))) + states_vector[0, state_index] = 1 + + return transient_analysis_from_tangible_q_matrix_and_states_vector(tangible_reach_graph, q_matrix, states_vector, + time_diff) + + +def transient_analysis_from_tangible_q_matrix_and_states_vector(tangible_reach_graph, q_matrix, states_vector, + time_diff): + """ + Do transient analysis from tangible reachability graph, Q matrix and a vector of probability of states + + Parameters + ------------ + tangible_reach_graph + Tangible reachability graph + q_matrix + Q matrix + states_vector + Vector of states probabilities to start from + time_diff + Time interval we want to investigate + + Returns + ----------- + transient_result + Transient analysis result + """ + from scipy.linalg import expm + + transient_result = Counter() + states = sorted(list(tangible_reach_graph.states), key=lambda x: x.name) + + ht_matrix = expm(q_matrix * time_diff) + + res = np.matmul(states_vector, ht_matrix) + # normalize to 1 the vector of probabilities + res = res / np.sum(res) + + for i in range(len(states)): + transient_result[states[i]] = res[0, i] + + return transient_result + + +def nullspace(a_matrix, atol=1e-13, rtol=0): + """Compute an approximate basis for the nullspace of A. + + The algorithm used by this function is based on the singular value + decomposition of `A`. + + Parameters + ---------- + a_matrix : ndarray + A should be at most 2-D. A 1-D array with length k will be treated + as a 2-D with shape (1, k) + atol : float + The absolute tolerance for a zero singular value. Singular values + smaller than `atol` are considered to be zero. + rtol : float + The relative tolerance. Singular values less than rtol*smax are + considered to be zero, where smax is the largest singular value. + + If both `atol` and `rtol` are positive, the combined tolerance is the + maximum of the two; that is:: + tol = max(atol, rtol * smax) + Singular values smaller than `tol` are considered to be zero. + + Returns + ------------ + ns : ndarray + If `A` is an array with shape (m, k), then `ns` will be an array + with shape (k, n), where n is the estimated dimension of the + nullspace of `A`. The columns of `ns` are a basis for the + nullspace; each element in numpy.dot(A, ns) will be approximately + zero. + """ + from numpy.linalg import svd + a_matrix = np.atleast_2d(a_matrix) + u, s, vh = svd(a_matrix) + tol = max(atol, rtol * s[0]) + nnz = (s >= tol).sum() + ns = vh[nnz:].conj().T + return ns + + +def perform_steadystate(q_matrix, tangible_reach_graph): + """ + Performs steady state analysis given the + :param q_matrix: + :return: + """ + transient_result = Counter() + states = sorted(list(tangible_reach_graph.states), key=lambda x: x.name) + q_matrix_trans = np.matrix.transpose(q_matrix) + if nullspace(q_matrix_trans).shape[1] > 0: + M = np.matrix.transpose(nullspace(q_matrix_trans)) + vec = np.zeros(M.shape[1]) + for i in range(M.shape[0]): + v = np.matmul(M[i], q_matrix_trans) + val = np.sum(v) / np.sum(M[i]) + vec = vec + val * M[i] + vec = vec / np.sum(vec) + for i in range(len(states)): + transient_result[states[i]] = vec[i] + return vec + return transient_result diff --git a/pm4py/pm4py/objects/stochastic_petri/tangible_reachability.py b/pm4py/pm4py/objects/stochastic_petri/tangible_reachability.py new file mode 100644 index 0000000000000000000000000000000000000000..5a4662cee359fc5eb2b84d5f6f6a5f6fc53f0bc5 --- /dev/null +++ b/pm4py/pm4py/objects/stochastic_petri/tangible_reachability.py @@ -0,0 +1,131 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.utils.reachability_graph import construct_reachability_graph +from pm4py.objects.conversion.log import converter as log_converter + + +def get_tangible_reachability_from_log_net_im_fm(log, net, im, fm, parameters=None): + """ + Gets the tangible reachability graph from a log and an accepting Petri net + + Parameters + --------------- + log + Event log + net + Petri net + im + Initial marking + fm + Final marking + + Returns + ------------ + reachab_graph + Reachability graph + tangible_reach_graph + Tangible reachability graph + stochastic_info + Stochastic information + """ + if parameters is None: + parameters = {} + + from pm4py.algo.simulation.montecarlo.utils import replay + stochastic_info = replay.get_map_from_log_and_net(log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters), net, im, fm, + parameters=parameters) + + reachability_graph, tangible_reachability_graph = get_tangible_reachability_from_net_im_sinfo(net, im, + stochastic_info, + parameters=parameters) + + return reachability_graph, tangible_reachability_graph, stochastic_info + + +def get_tangible_reachability_from_net_im_sinfo(net, im, stochastic_info, parameters=None): + """ + Gets the tangible reacahbility graph from a Petri net, an initial marking and a stochastic map + + Parameters + ------------- + net + Petri net + im + Initial marking + fm + Final marking + stochastic_info + Stochastic information + + Returns + ------------ + reachab_graph + Reachability graph + tangible_reach_graph + Tangible reachability graph + """ + if parameters is None: + parameters = {} + reachab_graph = construct_reachability_graph(net, im, use_trans_name=True) + tang_reach_graph = get_tangible_reachability_from_reachability(reachab_graph, stochastic_info) + + return reachab_graph, tang_reach_graph + + +def get_tangible_reachability_from_reachability(reach_graph, stochastic_info): + """ + Gets the tangible reachability graph from the reachability graph and the stochastic transition map + + Parameters + ------------ + reach_graph + Reachability graph + stochastic_info + Stochastic information + + Returns + ------------ + tangible_reach_graph + Tangible reachability graph + """ + timed_transitions = [] + for trans in stochastic_info.keys(): + random_variable = stochastic_info[trans] + transition_type = random_variable.get_transition_type() + if transition_type == "TIMED": + timed_transitions.append(trans.name) + states_reach = list(reach_graph.states) + for s in states_reach: + state_outgoing_trans = list(s.outgoing) + state_ingoing_trans = list(s.incoming) + timed_trans_outgoing = [x for x in state_outgoing_trans if x.name in timed_transitions] + if not len(state_outgoing_trans) == len(timed_trans_outgoing): + for t in state_outgoing_trans: + reach_graph.transitions.remove(t) + t.from_state.outgoing.remove(t) + t.to_state.incoming.remove(t) + for t in state_ingoing_trans: + reach_graph.transitions.remove(t) + t.from_state.outgoing.remove(t) + t.to_state.incoming.remove(t) + reach_graph.states.remove(s) + states_reach = list(reach_graph.states) + for s in states_reach: + if len(s.incoming) == 0 and len(s.outgoing) == 0: + reach_graph.states.remove(s) + + return reach_graph diff --git a/pm4py/pm4py/objects/stochastic_petri/utils.py b/pm4py/pm4py/objects/stochastic_petri/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2183ae919703fce3296a6d88cf7b453571aba69e --- /dev/null +++ b/pm4py/pm4py/objects/stochastic_petri/utils.py @@ -0,0 +1,48 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from numpy.random import choice + + +def pick_transition(et, smap): + """ + Pick a transition in a set of transitions based on the weights + specified by the stochastic map + + Parameters + -------------- + et + Enabled transitions + smap + Stochastic map + + Returns + -------------- + trans + Transition chosen according to the weights + """ + wmap = {ct: smap[ct].get_weight() if ct in smap else 1.0 for ct in et} + wmap_sv = sum(wmap.values()) + list_of_candidates = [] + probability_distribution = [] + for ct in wmap: + list_of_candidates.append(ct) + if wmap_sv == 0: + probability_distribution.append(1.0/float(len(wmap))) + else: + probability_distribution.append(wmap[ct] / wmap_sv) + ct = list(choice(et, 1, p=probability_distribution))[0] + return ct diff --git a/pm4py/pm4py/objects/transition_system/__init__.py b/pm4py/pm4py/objects/transition_system/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6fea8d2e3bf0a22f01b1393a676371526982ac42 --- /dev/null +++ b/pm4py/pm4py/objects/transition_system/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.transition_system import obj, utils, constants + diff --git a/pm4py/pm4py/objects/transition_system/constants.py b/pm4py/pm4py/objects/transition_system/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..5173f4b4004e2adf6842c9574c71589fdccd5c55 --- /dev/null +++ b/pm4py/pm4py/objects/transition_system/constants.py @@ -0,0 +1,19 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +INGOING_EVENTS = "ingoing_events" +OUTGOING_EVENTS = "outgoing_events" +EVENTS = "events" diff --git a/pm4py/pm4py/objects/transition_system/obj.py b/pm4py/pm4py/objects/transition_system/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..0afdd53ae8f0cfac5d19610010891001f2380771 --- /dev/null +++ b/pm4py/pm4py/objects/transition_system/obj.py @@ -0,0 +1,119 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.transition_system import constants + + +class TransitionSystem(object): + class State(object): + def __init__(self, name, incoming=None, outgoing=None, data=None): + self.__name = name + self.__incoming = set() if incoming is None else incoming + self.__outgoing = set() if outgoing is None else outgoing + self.__data = {constants.INGOING_EVENTS: [], constants.OUTGOING_EVENTS: []} if data is None else data + + def __get_name(self): + return self.__name + + def __set_name(self, name): + self.__name = name + + def __get_outgoing(self): + return self.__outgoing + + def __set_outgoing(self, outgoing): + self.__outgoing = outgoing + + def __get_incoming(self): + return self.__incoming + + def __set_incoming(self, incoming): + self.__incoming = incoming + + def __get_data(self): + return self.__data + + def __set_data(self, data): + self.__data = data + + def __repr__(self): + return str(self.name) + + name = property(__get_name, __set_name) + incoming = property(__get_incoming, __set_incoming) + outgoing = property(__get_outgoing, __set_outgoing) + data = property(__get_data, __set_data) + + class Transition(object): + + def __init__(self, name, from_state, to_state, data=None): + self.__name = name + self.__from_state = from_state + self.__to_state = to_state + self.__data = {constants.EVENTS: []} if data is None else data + + def __get_name(self): + return self.__name + + def __get_to_state(self): + return self.__to_state + + def __set_to_state(self, to_state): + self.__to_state = to_state + + def __get_from_state(self): + return self.__from_state + + def __set_from_state(self, from_state): + self.__from_state = from_state + + def __get_data(self): + return self.__data + + def __set_data(self, data): + self.__data = data + + def __repr__(self): + return str(self.name) + + name = property(__get_name) + from_state = property(__get_from_state, __set_from_state) + to_state = property(__get_to_state, __set_to_state) + data = property(__get_data, __set_data) + + def __init__(self, name=None, states=None, transitions=None): + self.__name = "" if name is None else name + self.__states = set() if states is None else states + self.__transitions = set() if transitions is None else transitions + + def __get_name(self): + return self.__name + + def __set_name(self, name): + self.__name = name + + def __get_states(self): + return self.__states + + def __get_transitions(self): + return self.__transitions + + def __set_transitions(self, transitions): + self.__transitions = transitions + + name = property(__get_name, __set_name) + states = property(__get_states) + transitions = property(__get_transitions, __set_transitions) diff --git a/pm4py/pm4py/objects/transition_system/utils.py b/pm4py/pm4py/objects/transition_system/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..4873e829f394e0ef0c84a736518766191185609f --- /dev/null +++ b/pm4py/pm4py/objects/transition_system/utils.py @@ -0,0 +1,111 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.transition_system import obj + + +def add_arc_from_to(name, fr, to, ts, data=None): + """ + Adds a transition from a state to another state in some transition system. + Assumes from and to are in the transition system! + + Parameters + ---------- + name: name of the transition + fr: state from + to: state to + ts: transition system to use + data: data associated to the Transition System + + Returns + ------- + None + """ + tran = obj.TransitionSystem.Transition(name, fr, to, data) + ts.transitions.add(tran) + fr.outgoing.add(tran) + to.incoming.add(tran) + + +def remove_arc_from_to(name, fr, to, ts): + """ + Removes a transition with a specific name from a state to another state in some transition system. + Assumes from and to are in the transition system! + + Parameters + ---------- + name: name of the transition + fr: state from + to: state to + ts: transition system to use + + Returns + ------- + None + """ + ts.transitions = [t for t in ts.transitions if t.name != name] + fr.outgoing = [t for t in fr.outgoing if t.name != name] + to.incoming = [t for t in to.incoming if t.name != name] + + +def remove_all_arcs_from_to(fr, to, ts): + """ + Removes all transitions from a state to another state in some transition system. + Assumes from and to are in the transition system! + + Parameters + ---------- + fr: state from + to: state to + ts: transition system to use + + Returns + ------- + None + """ + names_transitions_to_delete = [t.name for t in ts.transitions if t in fr.outgoing and t in to.incoming] + ts.transitions = set([t for t in ts.transitions if t.name not in names_transitions_to_delete]) + fr.outgoing = set([t for t in fr.outgoing if t.name not in names_transitions_to_delete]) + to.incoming = set([t for t in to.incoming if t.name not in names_transitions_to_delete]) + + +def transitive_reduction(ts): + """ + Computes the transitive reduction of an acyclic transition system. + Assumes the transition system in input to be acyclic. + + Parameters + ---------- + ts: acyclic transition system to use + + Returns + ------- + None + """ + + def check(this_state, this_child, this_done): + if this_child not in this_done: + child_children = [tr.to_state for tr in ts.transitions if tr in this_child.outgoing] + for child_child in child_children: + remove_all_arcs_from_to(this_state, child_child, ts) + check(this_state, child_child, this_done) + this_done.add(this_child) + + for state in ts.states: + done = set() + children = [tr.to_state for tr in ts.transitions if tr in state.outgoing] + for child in children: + check(state, child, done) diff --git a/pm4py/pm4py/objects/trie/__init__.py b/pm4py/pm4py/objects/trie/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d288caf129f59d21bdb492308c2a08e0aa6b168a --- /dev/null +++ b/pm4py/pm4py/objects/trie/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.trie import obj diff --git a/pm4py/pm4py/objects/trie/obj.py b/pm4py/pm4py/objects/trie/obj.py new file mode 100644 index 0000000000000000000000000000000000000000..390e95f6b405562bf936248d2c3884c1021d8a51 --- /dev/null +++ b/pm4py/pm4py/objects/trie/obj.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +class Trie(object): + + def __init__(self, label=None, parent=None, children=None, final=False, depth=0): + self._label = label + self._parent = parent + self._children = children if children is not None else list() + self._final = final + self._depth = depth + + def _set_parent(self, parent): + self._parent = parent + + def _set_label(self, label): + self._label = label + + def _set_children(self, children): + self._children = children + + def _set_final(self, final): + self._final = final + + def _get_children(self): + return self._children + + def _get_final(self): + return self._final + + def _get_parent(self): + return self._parent + + def _get_label(self): + return self._label + + def _set_depth(self, depth): + self._depth = depth + + def _get_depth(self): + return self._depth + + parent = property(_get_parent, _set_parent) + children = property(_get_children, _set_children) + label = property(_get_label, _set_label) + final = property(_get_final, _set_final) + depth = property(_get_depth, _set_depth) diff --git a/pm4py/pm4py/ocel.py b/pm4py/pm4py/ocel.py new file mode 100644 index 0000000000000000000000000000000000000000..d59103b521e617b7260fbccbe2a26adbfbdc8200 --- /dev/null +++ b/pm4py/pm4py/ocel.py @@ -0,0 +1,565 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.ocel`` module contains the object-centric process mining features offered in ``pm4py`` +""" + +from typing import List, Dict, Collection, Any, Optional, Set, Tuple + +import pandas as pd + +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import constants, pandas_utils +import sys +import random + + +def ocel_get_object_types(ocel: OCEL) -> List[str]: + """ + Gets the list of object types contained in the object-centric event log + (e.g., ["order", "item", "delivery"]). + + :param ocel: object-centric event log + :rtype: ``List[str]`` + + .. code-block:: python3 + + import pm4py + + object_types = pm4py.ocel_get_object_types(ocel) + """ + return pandas_utils.format_unique(ocel.objects[ocel.object_type_column].unique()) + + +def ocel_get_attribute_names(ocel: OCEL) -> List[str]: + """ + Gets the list of attributes at the event and the object level of an object-centric event log + (e.g. ["cost", "amount", "name"]) + + :param ocel: object-centric event log + :rtype: ``List[str]`` + + .. code-block:: python3 + + import pm4py + + attribute_names = pm4py.ocel_get_attribute_names(ocel) + """ + from pm4py.objects.ocel.util import attributes_names + return attributes_names.get_attribute_names(ocel) + + +def ocel_flattening(ocel: OCEL, object_type: str) -> pd.DataFrame: + """ + Flattens the object-centric event log to a traditional event log with the choice of an object type. + In the flattened log, the objects of a given object type are the cases, and each case + contains the set of events related to the object. + The flattened log follows the XES notations for case identifier, activity, and timestamp. In particular: + - "case:concept:name" is the column used for the case ID. + - "concept:name" is the column used for the activity. + - "time:timestamp" is the column used for the timestamp. + + :param ocel: object-centric event log + :param object_type: object type + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + event_log = pm4py.ocel_flattening(ocel, 'items') + """ + from pm4py.objects.ocel.util import flattening + return flattening.flatten(ocel, object_type) + + +def ocel_object_type_activities(ocel: OCEL) -> Dict[str, Collection[str]]: + """ + Gets the set of activities performed for each object type + + :param ocel: object-centric event log + :rtype: ``Dict[str, Collection[str]]`` + + .. code-block:: python3 + + import pm4py + + ot_activities = pm4py.ocel_object_type_activities(ocel) + """ + from pm4py.statistics.ocel import ot_activities + + return ot_activities.get_object_type_activities(ocel) + + +def ocel_objects_ot_count(ocel: OCEL) -> Dict[str, Dict[str, int]]: + """ + Counts for each event the number of related objects per type + + :param ocel: object-centric event log + :rtype: ``Dict[str, Dict[str, int]]`` + + .. code-block:: python3 + + import pm4py + + objects_ot_count = pm4py.ocel_objects_ot_count(ocel) + """ + from pm4py.statistics.ocel import objects_ot_count + + return objects_ot_count.get_objects_ot_count(ocel) + + +def ocel_temporal_summary(ocel: OCEL) -> pd.DataFrame: + """ + Returns the ``temporal summary'' from an object-centric event log. + The temporal summary aggregates all the events performed in the same timestamp, + and reports the list of activities and the involved objects. + + :param ocel: object-centric event log + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + temporal_summary = pm4py.ocel_temporal_summary(ocel) + """ + gdf = ocel.relations.groupby(ocel.event_timestamp) + act_comb = gdf[ocel.event_activity].agg(list).to_frame() + obj_comb = gdf[ocel.object_id_column].agg(list).to_frame() + temporal_summary = act_comb.join(obj_comb).reset_index() + return temporal_summary + + +def ocel_objects_summary(ocel: OCEL) -> pd.DataFrame: + """ + Gets the objects summary of an object-centric event log + + :param ocel: object-centric event log + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + objects_summary = pm4py.ocel_objects_summary(ocel) + """ + gdf = ocel.relations.groupby(ocel.object_id_column) + act_comb = gdf[ocel.event_activity].agg(list).to_frame().rename(columns={ocel.event_activity: "activities_lifecycle"}) + lif_start_tim = gdf[ocel.event_timestamp].min().to_frame().rename(columns={ocel.event_timestamp: "lifecycle_start"}) + lif_end_tim = gdf[ocel.event_timestamp].max().to_frame().rename(columns={ocel.event_timestamp: "lifecycle_end"}) + objects_summary = act_comb.join(lif_start_tim) + objects_summary = objects_summary.join(lif_end_tim) + objects_summary = objects_summary.reset_index() + objects_summary["lifecycle_duration"] = pandas_utils.get_total_seconds(objects_summary["lifecycle_end"] - objects_summary["lifecycle_start"]) + ev_rel_obj = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + objects_ids = pandas_utils.format_unique(ocel.objects[ocel.object_id_column].unique()) + graph = {o: set() for o in objects_ids} + for ev in ev_rel_obj: + rel_obj = ev_rel_obj[ev] + for o1 in rel_obj: + for o2 in rel_obj: + if o1 != o2: + graph[o1].add(o2) + objects_summary["interacting_objects"] = objects_summary[ocel.object_id_column].map(graph) + return objects_summary + + +def ocel_objects_interactions_summary(ocel: OCEL) -> pd.DataFrame: + """ + Gets the objects interactions summary of an object-centric event log. + The objects interactions summary has a row for every combination (event, related object, other related object). + Properties such as the activity of the event, and the object types of the two related objects, are included. + + :param ocel: object-centric event log + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + interactions_summary = pm4py.ocel_objects_interactions_summary(ocel) + """ + obj_types = ocel.objects.groupby(ocel.object_id_column)[ocel.object_type_column].first().to_dict() + eve_activities = ocel.events.groupby(ocel.event_id_column)[ocel.event_activity].first().to_dict() + ev_rel_obj = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].agg(list).to_dict() + stream = [] + for ev in ev_rel_obj: + rel_obj = ev_rel_obj[ev] + for o1 in rel_obj: + for o2 in rel_obj: + if o1 != o2: + stream.append({ocel.event_id_column: ev, ocel.event_activity: eve_activities[ev], + ocel.object_id_column: o1, ocel.object_type_column: obj_types[o1], + ocel.object_id_column+"_2": o2, ocel.object_type_column+"_2": obj_types[o2]}) + + return pandas_utils.instantiate_dataframe(stream) + + +def discover_ocdfg(ocel: OCEL, business_hours=False, business_hour_slots=constants.DEFAULT_BUSINESS_HOUR_SLOTS) -> Dict[str, Any]: + """ + Discovers an OC-DFG from an object-centric event log. + + Object-centric directly-follows multigraphs are a composition of directly-follows graphs for the single object type, which can be annotated with different metrics considering the entities of an object-centric event log (i.e., events, unique objects, total objects). + + Reference paper: + Berti, Alessandro, and Wil van der Aalst. "Extracting multiple viewpoint models from relational databases." Data-Driven Process Discovery and Analysis. Springer, Cham, 2018. 24-51. + + :param ocel: object-centric event log + :param business_hours: boolean value that enables the usage of the business hours + :param business_hour_slots: work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. [(7 * 60 * 60, 17 * 60 * 60), ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60),] meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + + :rtype: ``Dict[str, Any]`` + + .. code-block:: python3 + + import pm4py + + ocdfg = pm4py.discover_ocdfg(ocel) + """ + parameters = {} + parameters["business_hours"] = business_hours + parameters["business_hour_slots"] = business_hour_slots + from pm4py.algo.discovery.ocel.ocdfg import algorithm as ocdfg_discovery + return ocdfg_discovery.apply(ocel, parameters=parameters) + + +def discover_oc_petri_net(ocel: OCEL, inductive_miner_variant: str = "im", diagnostics_with_tbr: bool = False) -> Dict[str, Any]: + """ + Discovers an object-centric Petri net from the provided object-centric event log. + + Reference paper: van der Aalst, Wil MP, and Alessandro Berti. "Discovering object-centric Petri nets." Fundamenta informaticae 175.1-4 (2020): 1-40. + + :param ocel: object-centric event log + :param inductive_miner_variant: specify the variant of the inductive miner to be used + ("im" for traditional; "imd" for the faster inductive miner directly-follows) + :param diagnostics_with_tbr: (boolean) enables the computation of some diagnostics using token-based replay + :rtype: ``Dict[str, Any]`` + + .. code-block:: python3 + + import pm4py + + ocpn = pm4py.discover_oc_petri_net(ocel) + """ + from pm4py.algo.discovery.ocel.ocpn import algorithm as ocpn_discovery + parameters = {} + parameters["inductive_miner_variant"] = inductive_miner_variant + parameters["diagnostics_with_token_based_replay"] = diagnostics_with_tbr + + return ocpn_discovery.apply(ocel, parameters=parameters) + + +def discover_objects_graph(ocel: OCEL, graph_type: str = "object_interaction") -> Set[Tuple[str, str]]: + """ + Discovers an object graph from the provided object-centric event log + + :param ocel: object-centric event log + :param graph_type: type of graph to consider (object_interaction, object_descendants, object_inheritance, object_cobirth, object_codeath) + :rtype: ``Dict[str, Any]`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + obj_graph = pm4py.ocel_discover_objects_graph(ocel, graph_type='object_interaction') + """ + if graph_type == "object_interaction": + from pm4py.algo.transformation.ocel.graphs import object_interaction_graph + return object_interaction_graph.apply(ocel) + elif graph_type == "object_descendants": + from pm4py.algo.transformation.ocel.graphs import object_descendants_graph + return object_descendants_graph.apply(ocel) + elif graph_type == "object_inheritance": + from pm4py.algo.transformation.ocel.graphs import object_inheritance_graph + return object_inheritance_graph.apply(ocel) + elif graph_type == "object_cobirth": + from pm4py.algo.transformation.ocel.graphs import object_cobirth_graph + return object_cobirth_graph.apply(ocel) + elif graph_type == "object_codeath": + from pm4py.algo.transformation.ocel.graphs import object_codeath_graph + return object_codeath_graph.apply(ocel) + + +def ocel_o2o_enrichment(ocel: OCEL, included_graphs: Optional[Collection[str]] = None) -> OCEL: + """ + Inserts the information inferred from the graph computations (pm4py.discover_objects_graph) + in the list of O2O relations of the OCEL. + + :param ocel: object-centric event log + :param included_graphs: types of graphs to include, provided as list/set of strings (object_interaction_graph, object_descendants_graph, object_inheritance_graph, object_cobirth_graph, object_codeath_graph) + :rtype: ``OCEL`` + + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + ocel = pm4py.ocel_o2o_enrichment(ocel) + print(ocel.o2o) + """ + from pm4py.algo.transformation.ocel.graphs import ocel20_computation + return ocel20_computation.apply(ocel, parameters={"included_graphs": included_graphs}) + + +def ocel_e2o_lifecycle_enrichment(ocel: OCEL) -> OCEL: + """ + Inserts lifecycle-based information (when an object is created/terminated or other types of relations) + in the list of E2O relations of the OCEL + + :param ocel: object-centric event log + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + ocel = pm4py.ocel_e2o_lifecycle_enrichment(ocel) + print(ocel.relations) + """ + from pm4py.objects.ocel.util import e2o_qualification + ocel = e2o_qualification.apply(ocel, "termination") + ocel = e2o_qualification.apply(ocel, "creation") + ocel = e2o_qualification.apply(ocel, "other") + return ocel + + +def sample_ocel_objects(ocel: OCEL, num_objects: int) -> OCEL: + """ + Given an object-centric event log, returns a sampled event log with a subset of the objects + that is chosen in a random way. + Only the events related to at least one of these objects are filtered from the event log. + As a note, the relationships between the different objects are probably going to be ruined by + this sampling. + + :param ocel: Object-centric event log + :param num_objects: Number of objects of the object-centric event log + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + sampled_ocel = pm4py.sample_ocel_objects(ocel, 50) # keeps only 50 random objects + """ + from pm4py.objects.ocel.util import sampling + return sampling.sample_ocel_objects(ocel, parameters={"num_entities": num_objects}) + + +def sample_ocel_connected_components(ocel: OCEL, connected_components: int = 1, + max_num_events_per_cc: int = sys.maxsize, + max_num_objects_per_cc: int = sys.maxsize, + max_num_e2o_relations_per_cc: int = sys.maxsize) -> OCEL: + """ + Given an object-centric event log, returns a sampled event log with a subset of the executions. + The number of considered connected components need to be specified by the user. + + Paper: + Adams, Jan Niklas, et al. "Defining cases and variants for object-centric event data." 2022 4th International Conference on Process Mining (ICPM). IEEE, 2022. + + :param ocel: Object-centric event log + :param connected_components: Number of connected components to pick from the OCEL + :param max_num_events_per_cc: maximum number of events allowed per connected component (default: sys.maxsize) + :param max_num_objects_per_cc: maximum number of events allowed per connected component (default: sys.maxsize) + :param max_num_e2o_relations_per_cc: maximum number of event-to-object relationships allowed per connected component (default: sys.maxsize) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + sampled_ocel = pm4py.sample_ocel_connected_components(ocel, 5) # keeps only 5 connected components + """ + from pm4py.algo.transformation.ocel.split_ocel import algorithm + ocel_splits = algorithm.apply(ocel, variant=algorithm.Variants.CONNECTED_COMPONENTS) + events = None + objects = None + relations = None + ocel_splits = [x for x in ocel_splits if + len(x.events) <= max_num_events_per_cc and len(x.objects) <= max_num_objects_per_cc and len( + x.relations) <= max_num_e2o_relations_per_cc] + + if len(ocel_splits) > 0: + ocel_splits = random.sample(ocel_splits, min(connected_components, len(ocel_splits))) + + for cc in ocel_splits: + if events is None: + events = cc.events + objects = cc.objects + relations = cc.relations + else: + events = pandas_utils.concat([events, cc.events]) + objects = pandas_utils.concat([objects, cc.objects]) + relations = pandas_utils.concat([relations, cc.relations]) + + return OCEL(events, objects, relations) + + +def ocel_drop_duplicates(ocel: OCEL) -> OCEL: + """ + Drop relations between events and objects happening at the same time, + with the same activity, to the same object identifier. + This ends up cleaning the OCEL from duplicate events. + + :param ocel: object-centric event log + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + ocel = pm4py.ocel_drop_duplicates(ocel) + + """ + from pm4py.objects.ocel.util import filtering_utils + ocel.relations = ocel.relations.drop_duplicates( + subset=[ocel.event_activity, ocel.event_timestamp, ocel.object_id_column]) + ocel = filtering_utils.propagate_relations_filtering(ocel) + return ocel + + +def ocel_merge_duplicates(ocel: OCEL, have_common_object: Optional[bool]=False) -> OCEL: + """ + Merge events in the OCEL that happen with the same activity at the same timestamp + + :param ocel: object-centric event log + :param have_common_object: impose the additional merge condition that the two events should happen at the same + timestamp. + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + ocel = pm4py.ocel_merge_duplicates(ocel) + """ + import copy + import uuid + relations = copy.copy(ocel.relations) + if have_common_object: + relations["@@groupn"] = relations.groupby([ocel.object_id_column, ocel.event_activity, ocel.event_timestamp]).ngroup() + else: + relations["@@groupn"] = relations.groupby([ocel.event_activity, ocel.event_timestamp]).ngroup() + + group_size = relations["@@groupn"].value_counts().to_dict() + relations["@@groupsize"] = relations["@@groupn"].map(group_size) + relations = relations.sort_values(["@@groupsize", "@@groupn"], ascending=False) + val_corr = {x: str(uuid.uuid4()) for x in pandas_utils.format_unique(relations["@@groupn"].unique())} + relations = relations.groupby(ocel.event_id_column).first()["@@groupn"].to_dict() + relations = {x: val_corr[y] for x, y in relations.items()} + + ocel.events[ocel.event_id_column] = ocel.events[ocel.event_id_column].map(relations) + ocel.relations[ocel.event_id_column] = ocel.relations[ocel.event_id_column].map(relations) + + ocel.events = ocel.events.drop_duplicates(subset=[ocel.event_id_column]) + ocel.relations = ocel.relations.drop_duplicates(subset=[ocel.event_id_column, ocel.object_id_column]) + + return ocel + + + +def ocel_sort_by_additional_column(ocel: OCEL, additional_column: str, primary_column: str = "ocel:timestamp") -> OCEL: + """ + Sorts the OCEL not only based on the timestamp column and the index, + but using an additional sorting column that further determines the order of + the events happening at the same timestamp. + + :param ocel: object-centric event log + :param additional_column: additional column to use for the sorting + :param primary_column: primary column to be used for the sorting (default: ocel:timestamp) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + ocel = pm4py.ocel_sort_by_additional_column(ocel, 'ordering') + + """ + ocel.events = pandas_utils.insert_index(ocel.events, "@@index", reset_index=False, copy_dataframe=False) + ocel.events = ocel.events.sort_values([primary_column, additional_column, "@@index"]) + del ocel.events["@@index"] + ocel.events = ocel.events.reset_index(drop=True) + return ocel + + +def ocel_add_index_based_timedelta(ocel: OCEL) -> OCEL: + """ + Adds a small time-delta to the timestamp column based on the current index of the event. + This ensures the correct ordering of the events in any object-centric process mining + solution. + + :param ocel: object-centric event log + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + ocel = pm4py.ocel_add_index_based_timedelta(ocel) + + """ + from datetime import timedelta + eids = ocel.events[ocel.event_id_column].to_numpy().tolist() + eids = {eids[i]: timedelta(milliseconds=i) for i in range(len(eids))} + ocel.events["@@timedelta"] = ocel.events[ocel.event_id_column].map(eids) + ocel.relations["@@timedelta"] = ocel.relations[ocel.event_id_column].map(eids) + ocel.events[ocel.event_timestamp] = ocel.events[ocel.event_timestamp] + ocel.events["@@timedelta"] + ocel.relations[ocel.event_timestamp] = ocel.relations[ocel.event_timestamp] + ocel.relations["@@timedelta"] + del ocel.events["@@timedelta"] + del ocel.relations["@@timedelta"] + return ocel + + +def cluster_equivalent_ocel(ocel: OCEL, object_type: str, max_objs: int = sys.maxsize) -> Dict[str, Collection[OCEL]]: + """ + Perform a clustering of the object-centric event log, based on the 'executions' of + a single object type. Equivalent 'executions' are grouped in the output dictionary. + + :param ocel: object-centric event log + :param object_type: reference object type + :param max_objs: maximum number of objects (of the given object type) + :rtype: ``Dict[str, Collection[OCEL]]`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + clusters = pm4py.cluster_equivalent_ocel(ocel, "order") + """ + from pm4py.algo.transformation.ocel.split_ocel import algorithm as split_ocel_algorithm + from pm4py.objects.ocel.util import rename_objs_ot_tim_lex + from pm4py.algo.transformation.ocel.description import algorithm as ocel_description + lst_ocels = split_ocel_algorithm.apply(ocel, variant=split_ocel_algorithm.Variants.ANCESTORS_DESCENDANTS, parameters={"object_type": object_type, "max_objs": max_objs}) + ret = {} + for index, oc in enumerate(lst_ocels): + oc_ren = rename_objs_ot_tim_lex.apply(oc) + descr = ocel_description.apply(oc_ren, parameters={"include_timestamps": False}) + if descr not in ret: + ret[descr] = [] + ret[descr].append(oc) + return ret diff --git a/pm4py/pm4py/org.py b/pm4py/pm4py/org.py new file mode 100644 index 0000000000000000000000000000000000000000..7f13680289202a88fdda621c1bfd248e43658be1 --- /dev/null +++ b/pm4py/pm4py/org.py @@ -0,0 +1,243 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.org`` module contains the organizational analysis techniques offered in ``pm4py`` +""" + +from typing import Union + +import pandas as pd + +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns +from pm4py.utils import get_properties, __event_log_deprecation_warning +from pm4py.objects.org.sna.obj import SNA +from pm4py.objects.org.roles.obj import Role +from pm4py.util import xes_constants +from typing import Dict, Tuple, Any, List + + +def discover_handover_of_work_network(log: Union[EventLog, pd.DataFrame], beta=0, resource_key: str = "org:resource", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> SNA: + """ + Calculates the handover of work network of the event log. + The handover of work network is essentially the DFG of the event log, however, using the + resource as a node of the graph, instead of the activity. + As such, to use this, resource information should be present in the event log. + + :param log: event log / Pandas dataframe + :param beta: beta parameter for Handover metric + :param resource_key: attribute to be used for the resource + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + + .. code-block:: python3 + + import pm4py + + metric = pm4py.discover_handover_of_work_network(dataframe, resource_key='org:resource', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + from pm4py.algo.organizational_mining.sna import algorithm as sna + parameters = get_properties(log, resource_key=resource_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["beta"] = beta + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, timestamp_key=timestamp_key, case_id_key=case_id_key) + return sna.apply(log, variant=sna.Variants.HANDOVER_PANDAS, parameters=parameters) + else: + return sna.apply(log, variant=sna.Variants.HANDOVER_LOG, parameters=parameters) + + +def discover_working_together_network(log: Union[EventLog, pd.DataFrame], resource_key: str = "org:resource", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> SNA: + """ + Calculates the working together network of the process. + Two nodes resources are connected in the graph if the resources collaborate on an instance of the process. + + :param log: event log / Pandas dataframe + :param resource_key: attribute to be used for the resource + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + + .. code-block:: python3 + + import pm4py + + metric = pm4py.discover_working_together_network(dataframe, resource_key='org:resource', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, resource_key=resource_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.organizational_mining.sna import algorithm as sna + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, timestamp_key=timestamp_key, case_id_key=case_id_key) + return sna.apply(log, variant=sna.Variants.WORKING_TOGETHER_PANDAS, parameters=properties) + else: + return sna.apply(log, variant=sna.Variants.WORKING_TOGETHER_LOG, parameters=properties) + + +def discover_activity_based_resource_similarity(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", resource_key: str = "org:resource", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> SNA: + """ + Calculates similarity between the resources in the event log, based on their activity profiles. + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param resource_key: attribute to be used for the resource + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + + .. code-block:: python3 + + import pm4py + + act_res_sim = pm4py.discover_activity_based_resource_similarity(dataframe, resource_key='org:resource', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, resource_key=resource_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.organizational_mining.sna import algorithm as sna + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + return sna.apply(log, variant=sna.Variants.JOINTACTIVITIES_PANDAS, parameters=properties) + else: + return sna.apply(log, variant=sna.Variants.JOINTACTIVITIES_LOG, parameters=properties) + + +def discover_subcontracting_network(log: Union[EventLog, pd.DataFrame], n=2, resource_key: str = "org:resource", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> SNA: + """ + Calculates the subcontracting network of the process. + + :param log: event log / Pandas dataframe + :param n: n parameter for Subcontracting metric + :param resource_key: attribute to be used for the resource + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + + .. code-block:: python3 + + import pm4py + + metric = pm4py.discover_subcontracting_network(dataframe, resource_key='org:resource', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + from pm4py.algo.organizational_mining.sna import algorithm as sna + parameters = get_properties(log, resource_key=resource_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + parameters["n"] = n + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, timestamp_key=timestamp_key, case_id_key=case_id_key) + return sna.apply(log, variant=sna.Variants.SUBCONTRACTING_PANDAS, parameters=parameters) + else: + return sna.apply(log, variant=sna.Variants.SUBCONTRACTING_LOG, parameters=parameters) + + +def discover_organizational_roles(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", resource_key: str = "org:resource", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> List[Role]: + """ + Mines the organizational roles + + A role is a set of activities in the log that are executed by a similar (multi)set of resources. Hence, it is a specific function into organization. Grouping the activities in roles can help: + + Reference paper: + Burattin, Andrea, Alessandro Sperduti, and Marco Veluscek. “Business models enhancement through discovery of roles.” 2013 IEEE Symposium on Computational Intelligence and Data Mining (CIDM). IEEE, 2013. + + :param log: event log / Pandas dataframe + :param activity_key: attribute to be used for the activity + :param resource_key: attribute to be used for the resource + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + + .. code-block:: python3 + + import pm4py + + roles = pm4py.discover_organizational_roles(dataframe, resource_key='org:resource', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, resource_key=resource_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.organizational_mining.roles import algorithm as roles + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + return roles.apply(log, variant=roles.Variants.PANDAS, parameters=properties) + else: + return roles.apply(log, variant=roles.Variants.LOG, parameters=properties) + + +def discover_network_analysis(log: Union[pd.DataFrame, EventLog, EventStream], out_column: str, in_column: str, node_column_source: str, node_column_target: str, edge_column: str, edge_reference: str = "_out", performance: bool = False, sorting_column: str = xes_constants.DEFAULT_TIMESTAMP_KEY, timestamp_column: str = xes_constants.DEFAULT_TIMESTAMP_KEY) -> Dict[Tuple[str, str], Dict[str, Any]]: + """ + Performs a network analysis of the log based on the provided parameters. + + The classical social network analysis methods are based on the order of the events inside a case. For example, the Handover of Work metric considers the directly-follows relationships between resources during the work of a case. An edge is added between the two resources if such relationships occurs. + + Real-life scenarios may be more complicated. At first, is difficult to collect events inside the same case without having convergence/divergence issues (see first section of the OCEL part). At second, the type of relationship may also be important. Consider for example the relationship between two resources: this may be more efficient if the activity that is executed is liked by the resources, rather than disgusted. + + The network analysis that we introduce here generalizes some existing social network analysis metrics, becoming independent from the choice of a case notion and permitting to build a multi-graph instead of a simple graph. + + With this, we assume events to be linked by signals. An event emits a signal (that is contained as one attribute of the event) that is assumed to be received by other events (also, this is an attribute of these events) that follow the first event in the log. So, we assume there is an OUT attribute (of the event) that is identical to the IN attribute (of the other events). + + When we collect this information, we can build the network analysis graph: + - The source node of the relation is given by an aggregation over a node_column_source attribute. + - The target node of the relation is given by an aggregation over a node_column_target attribute. + - The type of edge is given by an aggregation over an edge_column attribute. + - The network analysis graph can either be annotated with frequency or performance information. + + The output is a multigraph. + Two events EV1 and EV2 of the log are merged (indipendently from the case notion) based on having + EV1.OUT_COLUMN = EV2.IN_COLUMN. + Then, an aggregation is applied on the couple of events (NODE_COLUMN) to obtain the nodes that are connected. + The edges between these nodes are aggregated based on some property of the *source* event (EDGE_COLUMN). + + :param log: event log / Pandas dataframe + :param out_column: the source column of the link (default: the case identifier; events of the same case are linked) + :param in_column: the target column of the link (default: the case identifier; events of the same case are linked) + :param node_column_source: the attribute to be used for the node definition of the source event (default: the resource of the log, org:resource) + :param node_column_target: the attribute to be used for the node definition of the target event (default: the resource of the log, org:resource) + :param edge_column: the attribute to be used for the edge definition (default: the activity of the log, concept:name) + :param edge_reference: decide if the edge attribute should be picked from the source event. Values: _out => the source event ; _in => the target event + :param performance: boolean value that enables the performance calculation on the edges of the network analysis + :param sorting_column: the column that should be used to sort the log before performing the network analysis (default: time:timestamp) + :param timestamp_column: the column that should be used as timestamp for the performance-related analysis (default: time:timestamp) + :rtype: ``Dict[Tuple[str, str], Dict[str, Any]]`` + + .. code-block:: python3 + + import pm4py + + net_ana = pm4py.discover_network_analysis(dataframe, out_column='case:concept:name', in_column='case:concept:name', node_column_source='org:resource', node_column_target='org:resource', edge_column='concept:name') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log) + + from pm4py.algo.organizational_mining.network_analysis.variants import dataframe + + parameters = {} + parameters[dataframe.Parameters.OUT_COLUMN] = out_column + parameters[dataframe.Parameters.IN_COLUMN] = in_column + parameters[dataframe.Parameters.NODE_COLUMN_SOURCE] = node_column_source + parameters[dataframe.Parameters.NODE_COLUMN_TARGET] = node_column_target + parameters[dataframe.Parameters.EDGE_COLUMN] = edge_column + parameters[dataframe.Parameters.EDGE_REFERENCE] = edge_reference + parameters[dataframe.Parameters.SORTING_COLUMN] = sorting_column + parameters[dataframe.Parameters.TIMESTAMP_KEY] = timestamp_column + parameters[dataframe.Parameters.INCLUDE_PERFORMANCE] = performance + + from pm4py.algo.organizational_mining.network_analysis import algorithm as network_analysis + return network_analysis.apply(log, parameters=parameters) diff --git a/pm4py/pm4py/privacy.py b/pm4py/pm4py/privacy.py new file mode 100644 index 0000000000000000000000000000000000000000..1c1e75acf7533739a0542518b7364d9fcdac1e18 --- /dev/null +++ b/pm4py/pm4py/privacy.py @@ -0,0 +1,67 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.objects.log.obj import EventLog +import pandas as pd +from typing import Union + + +def anonymize_differential_privacy(log: Union[EventLog, pd.DataFrame], epsilon: float = 1.0, k: int = 10, p: int = 20) -> pd.DataFrame: + """ + Protect event logs with differential privacy. Differential privacy is a guarantee that bounds the impact the data of one individual has on a query result. + + Control-flow information is anonymized with SaCoFa. This algorithm inserts noise into a trace-variant count, through the step-wise construction of a prefix tree. + + Contextual-information, like timestamps or resources, is anonymized with PRIPEL. This technique enriches a control-flow anonymized event log with contextual information from the original log, while still achieving differential privacy. + PRIPEL anonymizes each event's timestamp and other attributes, that are stored as strings, integers, floats, or booleans. + + Please install diffprivlib https://diffprivlib.readthedocs.io/en/latest/ (pip install diffprivlib==0.5.2) to run our algorithm. + + + SaCoFa is described in: + S. A. Fahrenkog-Petersen, M. Kabierski, F. Rösel, H. van der Aa and M. Weidlich, "SaCoFa: Semantics-aware + Control-flow Anonymization for Process Mining," 2021 3rd International Conference on Process Mining (ICPM), 2021, + pp. 72-79. https://doi.org/10.48550/arXiv.2109.08501 + + PRIPEL is described in: + Fahrenkrog-Petersen, S.A., van der Aa, H., Weidlich, M. (2020). PRIPEL: Privacy-Preserving Event Log Publishing + Including Contextual Information. In: Fahland, D., Ghidini, C., Becker, J., Dumas, M. (eds) Business Process + Management. BPM 2020. Lecture Notes in Computer Science, vol 12168. Springer, Cham. + https://doi.org/10.1007/978-3-030-58666-9_7 + + + :param log: event log / Pandas dataframe + :param epsilon: the strength of the differential privacy guarantee. The smaller the value of epsilon, the stronger the privacy guarantee that is provided. + :param k: the maximal length of considered traces in the prefix tree. We recommend setting k, that roughly 80% of all traces from the original event log are covered. + :param p: the pruning parameter, which denotes the minimum count a prefix has to have in order to not be discarded. The dependent exponential runtime of the algorithms is mitigated by the pruning parameter. + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + event_log = pm4py.read_xes("running-example.xes") + anonymized_event_log = pm4py.anonymize_differential_privacy(event_log, epsilon=1.0, k=10, p=20) + """ + + from pm4py.algo.anonymization.trace_variant_query import algorithm as trace_variant_query + sacofa_result = trace_variant_query.apply(log=log, variant=trace_variant_query.Variants.SACOFA, parameters={"epsilon": epsilon, "k": k, "p": p}) + + from pm4py.algo.anonymization.pripel import algorithm as pripel + anonymized_log = pripel.apply(log, sacofa_result, epsilon=epsilon) + + return anonymized_log diff --git a/pm4py/pm4py/read.py b/pm4py/pm4py/read.py new file mode 100644 index 0000000000000000000000000000000000000000..41fc6e91c0e69d7e3f0c9743b947217184434955 --- /dev/null +++ b/pm4py/pm4py/read.py @@ -0,0 +1,405 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Tuple, Dict, Optional + +from pm4py.objects.bpmn.obj import BPMN +from pm4py.objects.log.obj import EventLog +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.util import dataframe_utils +from pm4py.util import constants + +import os + +from pandas import DataFrame +import importlib.util +from typing import Union + +INDEX_COLUMN = "@@index" + +__doc__ = """ +The ``pm4py.read`` module contains all funcationality related to reading files/objects from disk. +""" + + +def read_xes(file_path: str, variant: Optional[str] = None, return_legacy_log_object: bool = constants.DEFAULT_READ_XES_LEGACY_OBJECT, encoding: str = constants.DEFAULT_ENCODING, **kwargs) -> Union[DataFrame, EventLog]: + """ + Reads an event log stored in XES format (see `xes-standard `_) + Returns a table (``pandas.DataFrame``) view of the event log. + + :param file_path: file path of the event log (``.xes`` file) on disk + :param variant: the variant of the importer to use. "iterparse" => traditional XML parser; "line_by_line" => text-based line-by-line importer ; "chunk_regex" => chunk-of-bytes importer (default); "iterparse20" => XES 2.0 importer + :param return_legacy_log_object: boolean value enabling returning a log object (default: False) + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``DataFrame`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + + if variant is None: + variant = constants.DEFAULT_XES_PARSER + + from pm4py.objects.log.importer.xes import importer as xes_importer + + v = xes_importer.Variants.CHUNK_REGEX + if variant == "iterparse_20": + v = xes_importer.Variants.ITERPARSE_20 + elif variant == "iterparse": + v = xes_importer.Variants.ITERPARSE + elif variant == "lxml": + v = xes_importer.Variants.ITERPARSE + elif variant == "iterparse_mem_compressed": + v = xes_importer.Variants.ITERPARSE_MEM_COMPRESSED + elif variant == "line_by_line": + v = xes_importer.Variants.LINE_BY_LINE + elif variant == "chunk_regex": + v = xes_importer.Variants.CHUNK_REGEX + elif variant == "rustxes": + v = xes_importer.Variants.RUSTXES + + from copy import copy + parameters = copy(kwargs) + parameters["encoding"] = encoding + parameters["return_legacy_log_object"] = return_legacy_log_object + + log = xes_importer.apply(file_path, variant=v, parameters=parameters) + + if type(log) is EventLog and not return_legacy_log_object: + log = log_converter.apply(log, variant=log_converter.Variants.TO_DATA_FRAME) + + return log + + +def read_pnml(file_path: str, auto_guess_final_marking: bool = False, encoding: str = constants.DEFAULT_ENCODING) -> Tuple[PetriNet, Marking, Marking]: + """ + Reads a Petri net object from a .pnml file. + The Petri net object returned is a triple containing the following objects: + + 1. Petrinet Object, encoded as a ``PetriNet`` class + #. Initial Marking + #. Final Marking + + :rtype: ``Tuple[PetriNet, Marking, Marking]`` + :param file_path: file path of the Petri net model (``.pnml`` file) on disk + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + pn = pm4py.read_pnml("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + from pm4py.objects.petri_net.importer import importer as pnml_importer + net, im, fm = pnml_importer.apply(file_path, parameters={"auto_guess_final_marking": auto_guess_final_marking, "encoding": encoding}) + return net, im, fm + + +def read_ptml(file_path: str, encoding: str = constants.DEFAULT_ENCODING) -> ProcessTree: + """ + Reads a process tree object from a .ptml file + + :param file_path: file path of the process tree object on disk + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``ProcessTree`` + + .. code-block:: python3 + + import pm4py + + process_tree = pm4py.read_ptml("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + from pm4py.objects.process_tree.importer import importer as tree_importer + tree = tree_importer.apply(file_path, parameters={"encoding": encoding}) + return tree + + +def read_dfg(file_path: str, encoding: str = constants.DEFAULT_ENCODING) -> Tuple[Dict[Tuple[str,str],int], Dict[str,int], Dict[str,int]]: + """ + Reads a DFG object from a .dfg file. + The DFG object returned is a triple containing the following objects: + + 1. DFG Object, encoded as a ``Dict[Tuple[str,str],int]``, s.t. ``DFG[('a','b')]=k`` implies that activity ``'a'`` is directly followed by activity ``'b'`` a total of ``k`` times in the log + #. Start activity dictionary, encoded as a ``Dict[str,int]``, s.t., ``S['a']=k`` implies that activity ``'a'`` is starting ``k`` traces in the event log + #. End activity dictionary, encoded as a ``Dict[str,int]``, s.t., ``E['z']=k`` implies that activity ``'z'`` is ending ``k`` traces in the event log. + + :rtype: ``Tuple[Dict[Tuple[str,str],int], Dict[str,int], Dict[str,int]]`` + :param file_path: file path of the dfg model on disk + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + dfg = pm4py.read_dfg("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + from pm4py.objects.dfg.importer import importer as dfg_importer + dfg, start_activities, end_activities = dfg_importer.apply(file_path, parameters={"encoding": encoding}) + return dfg, start_activities, end_activities + + +def read_bpmn(file_path: str, encoding: str = constants.DEFAULT_ENCODING) -> BPMN: + """ + Reads a BPMN model from a .bpmn file + + :param file_path: file path of the bpmn model + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``BPMN`` + + .. code-block:: python3 + + import pm4py + + bpmn = pm4py.read_bpmn('') + + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + from pm4py.objects.bpmn.importer import importer as bpmn_importer + bpmn_graph = bpmn_importer.apply(file_path, parameters={"encoding": encoding}) + return bpmn_graph + + +def read_ocel(file_path: str, objects_path: Optional[str] = None, encoding: str = constants.DEFAULT_ENCODING) -> OCEL: + """ + Reads an object-centric event log from a file (see: http://www.ocel-standard.org/). + The ``OCEL`` object is returned by this method + + :param file_path: file path of the object-centric event log + :param objects_path: [Optional] file path from which the objects dataframe should be read + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + if file_path.lower().endswith("csv"): + return read_ocel_csv(file_path, objects_path, encoding=encoding) + elif file_path.lower().endswith("jsonocel"): + return read_ocel_json(file_path, encoding=encoding) + elif file_path.lower().endswith("xmlocel"): + return read_ocel_xml(file_path, encoding=encoding) + elif file_path.lower().endswith(".sqlite"): + return read_ocel_sqlite(file_path, encoding=encoding) + raise Exception("unsupported file format") + + +def read_ocel_csv(file_path: str, objects_path: Optional[str] = None, encoding: str = constants.DEFAULT_ENCODING) -> OCEL: + """ + Reads an object-centric event log from a CSV file (see: http://www.ocel-standard.org/). + The ``OCEL`` object is returned by this method + + :param file_path: file path of the object-centric event log (.csv) + :param objects_path: [Optional] file path from which the objects dataframe should be read + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel_csv("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + + from pm4py.objects.ocel.importer.csv import importer as csv_importer + return csv_importer.apply(file_path, objects_path=objects_path, parameters={"encoding": encoding}) + + +def read_ocel_json(file_path: str, encoding: str = constants.DEFAULT_ENCODING) -> OCEL: + """ + Reads an object-centric event log from a JSON-OCEL file (see: http://www.ocel-standard.org/). + The ``OCEL`` object is returned by this method + + :param file_path: file path of the object-centric event log (.jsonocel) + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel_json("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + + from pm4py.objects.ocel.importer.jsonocel import importer as jsonocel_importer + return jsonocel_importer.apply(file_path, variant=jsonocel_importer.Variants.CLASSIC, parameters={"encoding": encoding}) + + +def read_ocel_xml(file_path: str, encoding: str = constants.DEFAULT_ENCODING) -> OCEL: + """ + Reads an object-centric event log from a XML-OCEL file (see: http://www.ocel-standard.org/). + The ``OCEL`` object is returned by this method + + :param file_path: file path of the object-centric event log (.xmlocel) + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel_xml("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + + from pm4py.objects.ocel.importer.xmlocel import importer as xmlocel_importer + return xmlocel_importer.apply(file_path, variant=xmlocel_importer.Variants.CLASSIC, parameters={"encoding": encoding}) + + +def read_ocel_sqlite(file_path: str, encoding: str = constants.DEFAULT_ENCODING) -> OCEL: + """ + Reads an object-centric event log from a SQLite database (see: http://www.ocel-standard.org/). + The ``OCEL`` object is returned by this method + + :param file_path: file path of the SQLite database (.sqlite) + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel_sqlite("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + + from pm4py.objects.ocel.importer.sqlite import importer as sqlite_importer + return sqlite_importer.apply(file_path, variant=sqlite_importer.Variants.PANDAS_IMPORTER, parameters={"encoding": encoding}) + + +def read_ocel2(file_path: str, variant_str: Optional[str] = None, encoding: str = constants.DEFAULT_ENCODING) -> OCEL: + """ + Reads an OCEL2.0 event log + + :param file_path: path to the OCEL2.0 event log + :param variant_str: (optional) specification of the importer variant to be used + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel2("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + + if file_path.lower().endswith("sqlite"): + return read_ocel2_sqlite(file_path, variant_str=variant_str, encoding=encoding) + elif file_path.lower().endswith("xml") or file_path.lower().endswith("xmlocel"): + return read_ocel2_xml(file_path, variant_str=variant_str, encoding=encoding) + elif file_path.lower().endswith("json") or file_path.lower().endswith("jsonocel"): + return read_ocel2_json(file_path, variant_str=variant_str, encoding=encoding) + + +def read_ocel2_json(file_path: str, variant_str: Optional[str] = None, encoding: str = constants.DEFAULT_ENCODING) -> OCEL: + """ + Reads an OCEL2.0 event log from a JSON-OCEL(2) file + + :param file_path: path to the JSON file + :param variant_str: (optional) specification of the importer variant to be used + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel2_json("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + + from pm4py.objects.ocel.importer.jsonocel import importer as jsonocel_importer + variant = jsonocel_importer.Variants.OCEL20_STANDARD + if variant_str == "ocel20_rustxes": + variant = jsonocel_importer.Variants.OCEL20_RUSTXES + + return jsonocel_importer.apply(file_path, variant=variant, parameters={"encoding": encoding}) + + +def read_ocel2_sqlite(file_path: str, variant_str: Optional[str] = None, encoding: str = constants.DEFAULT_ENCODING) -> OCEL: + """ + Reads an OCEL2.0 event log from a SQLite database + + :param file_path: path to the OCEL2.0 database + :param variant_str: (optional) specification of the importer variant to be used + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel2_sqlite("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + + from pm4py.objects.ocel.importer.sqlite import importer as sqlite_importer + return sqlite_importer.apply(file_path, variant=sqlite_importer.Variants.OCEL20, parameters={"encoding": encoding}) + + +def read_ocel2_xml(file_path: str, variant_str: Optional[str] = None, encoding: str = constants.DEFAULT_ENCODING) -> OCEL: + """ + Reads an OCEL2.0 event log from an XML file + + :param file_path: path to the OCEL2.0 event log + :param variant_str: (optional) specification of the importer variant to be used + :param encoding: the encoding to be used (default: utf-8) + :rtype: ``OCEL`` + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel2_xml("") + """ + if not os.path.exists(file_path): + raise Exception("File does not exist") + + from pm4py.objects.ocel.importer.xmlocel import importer as xml_importer + variant = xml_importer.Variants.OCEL20 + if variant_str == "ocel20_rustxes": + variant = xml_importer.Variants.OCEL20_RUSTXES + + return xml_importer.apply(file_path, variant=variant, parameters={"encoding": encoding}) diff --git a/pm4py/pm4py/sim.py b/pm4py/pm4py/sim.py new file mode 100644 index 0000000000000000000000000000000000000000..8248d08ca7d28abba4e5f0023c876e47cd335367 --- /dev/null +++ b/pm4py/pm4py/sim.py @@ -0,0 +1,106 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.sim`` module contains the simulation algorithms offered in ``pm4py`` +""" + +from collections import Counter +from typing import Union, Tuple + +from pm4py.objects.log.obj import EventLog +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.process_tree.obj import ProcessTree + + +def play_out(*args: Union[Tuple[PetriNet, Marking, Marking], dict, Counter, ProcessTree], **kwargs) -> EventLog: + """ + Performs the playout of the provided model, + i.e., gets a set of traces from the model. + The function either takes a petri net, initial and final marking, or, a process tree as an input. + + :param args: model (Petri net with initial and final marking, or process tree) + :param kwargs: optional parameters of the method, including: + - parameters: dictionary containing the parameters of the playout, including: + - smap: (if provided) stochastic map to be used to stochastically choose the transition + - log: (if provided) EventLog to be used to compute the stochastic map, if smap not provided + :rtype: ``EventLog`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.read_pnml('model.pnml') + log = pm4py.play_out(net, im, fm) + + """ + if len(args) == 3: + from pm4py.objects.petri_net.obj import PetriNet + if isinstance(args[0], PetriNet): + from pm4py.objects.petri_net.obj import ResetNet, InhibitorNet + from pm4py.algo.simulation.playout.petri_net import algorithm + from pm4py.objects.petri_net.semantics import ClassicSemantics + from pm4py.objects.petri_net.inhibitor_reset.semantics import InhibitorResetSemantics + net = args[0] + im = args[1] + fm = args[2] + parameters = kwargs["parameters"] if "parameters" in kwargs else None + if parameters is None: + parameters = {} + + variant = algorithm.Variants.BASIC_PLAYOUT + # if the log, or the stochastic map of the transitions, is provided + # use the stochastic playout in place of the basic playout + # (that means, the relative weight of the transitions in a marking + # will be considered during transition's picking) + if "log" in parameters or "smap" in parameters: + variant = algorithm.Variants.STOCHASTIC_PLAYOUT + + semantics = ClassicSemantics() + if isinstance(net, ResetNet) or isinstance(net, InhibitorNet): + semantics = InhibitorResetSemantics() + parameters["petri_semantics"] = semantics + + return algorithm.apply(net, im, final_marking=fm, variant=variant, parameters=parameters) + elif isinstance(args[0], dict): + from pm4py.algo.simulation.playout.dfg import algorithm as dfg_playout + return dfg_playout.apply(args[0], args[1], args[2], **kwargs) + elif len(args) == 1: + from pm4py.objects.process_tree.obj import ProcessTree + if type(args[0]) is ProcessTree: + from pm4py.algo.simulation.playout.process_tree import algorithm + return algorithm.apply(args[0], **kwargs) + raise Exception("unsupported model for playout") + + +def generate_process_tree(**kwargs) -> ProcessTree: + """ + Generates a process tree + + Reference paper: + PTandLogGenerator: A Generator for Artificial Event Data + + :param kwargs: dictionary containing the parameters of the process tree generator algorithm + :rtype: ``ProcessTree`` + + .. code-block:: python3 + + import pm4py + + process_tree = pm4py.generate_process_tree() + """ + from pm4py.algo.simulation.tree_generator import algorithm + return algorithm.apply(**kwargs) diff --git a/pm4py/pm4py/statistics/__init__.py b/pm4py/pm4py/statistics/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..df221245d1fd162b27f90fef15d81e23c2447be9 --- /dev/null +++ b/pm4py/pm4py/statistics/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics import traces, attributes, variants, start_activities, end_activities, \ + service_time, concurrent_activities, eventually_follows, rework diff --git a/pm4py/pm4py/statistics/attributes/__init__.py b/pm4py/pm4py/statistics/attributes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c75aaa6a143040919b3e8cece0cb563ccaac4f9b --- /dev/null +++ b/pm4py/pm4py/statistics/attributes/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.attributes import common, log, pandas diff --git a/pm4py/pm4py/statistics/attributes/common/__init__.py b/pm4py/pm4py/statistics/attributes/common/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6f45fe02117c1f4c3f9ccd638feff98e86f6d1e3 --- /dev/null +++ b/pm4py/pm4py/statistics/attributes/common/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.attributes.common import get diff --git a/pm4py/pm4py/statistics/attributes/common/get.py b/pm4py/pm4py/statistics/attributes/common/get.py new file mode 100644 index 0000000000000000000000000000000000000000..d2c37614c11a7267b7f0e72e459eec228ebc7c49 --- /dev/null +++ b/pm4py/pm4py/statistics/attributes/common/get.py @@ -0,0 +1,222 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import json, logging +import importlib.util + +from pm4py.util.points_subset import pick_chosen_points_list +from pm4py.util import exec_utils, pandas_utils, constants +from enum import Enum + + +class Parameters(Enum): + GRAPH_POINTS = "graph_points" + POINT_TO_SAMPLE = "points_to_sample" + + +def get_sorted_attributes_list(attributes): + """ + Gets sorted attributes list + + Parameters + ---------- + attributes + Dictionary of attributes associated with their count + + Returns + ---------- + listact + Sorted end attributes list + """ + listattr = [] + for a in attributes: + listattr.append([a, attributes[a]]) + listattr = sorted(listattr, key=lambda x: x[1], reverse=True) + return listattr + + +def get_attributes_threshold(alist, decreasing_factor, min_activity_count=1, max_activity_count=25): + """ + Get attributes cutting threshold + + Parameters + ---------- + alist + Sorted attributes list + decreasing_factor + Decreasing factor of the algorithm + min_activity_count + Minimum number of activities to include + max_activity_count + Maximum number of activities to include + + Returns + --------- + threshold + Activities cutting threshold + """ + index = max(0, min(min_activity_count - 1, len(alist) - 1)) + threshold = alist[index][1] + index = index + 1 + for i in range(index, len(alist)): + value = alist[i][1] + if value > threshold * decreasing_factor: + threshold = value + if i >= max_activity_count: + break + return threshold + + +def get_kde_numeric_attribute(values, parameters=None): + """ + Gets the KDE estimation for the distribution of a numeric attribute values + + Parameters + ------------- + values + Values of the numeric attribute value + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + + Returns + -------------- + x + X-axis values to represent + y + Y-axis values to represent + """ + if importlib.util.find_spec("scipy") and importlib.util.find_spec("numpy"): + from scipy.stats import gaussian_kde + import numpy as np + import pandas as pd + + if parameters is None: + parameters = {} + + graph_points = exec_utils.get_param_value(Parameters.GRAPH_POINTS, parameters, 200) + values = sorted(values) + density = gaussian_kde(values) + + xs1 = list(np.linspace(min(values), max(values), int(graph_points / 2))) + xs2 = list(np.geomspace(max(min(values), 0.000001), max(values), int(graph_points / 2))) + xs = sorted(xs1 + xs2) + + return [xs, list(density(xs))] + else: + msg = "scipy is not available. graphs cannot be built!" + logging.error(msg) + raise Exception(msg) + + +def get_kde_numeric_attribute_json(values, parameters=None): + """ + Gets the KDE estimation for the distribution of a numeric attribute values + (expressed as JSON) + + Parameters + -------------- + values + Values of the numeric attribute value + parameters + Possible parameters of the algorithm, including: + graph_points: number of points to include in the graph + + Returns + -------------- + json + JSON representing the graph points + """ + x, y = get_kde_numeric_attribute(values, parameters=parameters) + + ret = [] + for i in range(len(x)): + ret.append((x[i], y[i])) + + return json.dumps(ret) + + +def get_kde_date_attribute(values, parameters=None): + """ + Gets the KDE estimation for the distribution of a date attribute values + + Parameters + ------------- + values + Values of the date attribute value + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + + Returns + -------------- + x + X-axis values to represent + y + Y-axis values to represent + """ + if importlib.util.find_spec("scipy") and importlib.util.find_spec("numpy"): + from scipy.stats import gaussian_kde + import numpy as np + import pandas as pd + + if parameters is None: + parameters = {} + + graph_points = exec_utils.get_param_value(Parameters.GRAPH_POINTS, parameters, 200) + points_to_sample = exec_utils.get_param_value(Parameters.POINT_TO_SAMPLE, parameters, 400) + + red_values = pick_chosen_points_list(points_to_sample, values) + int_values = sorted( + [x.replace(tzinfo=None).timestamp() for x in red_values]) + density = gaussian_kde(int_values) + xs = np.linspace(min(int_values), max(int_values), graph_points) + xs_transf = pd.to_datetime(xs * 10 ** 9, unit="ns") + + return [xs_transf, density(xs)] + else: + msg = "scipy is not available. graphs cannot be built!" + logging.error(msg) + raise Exception(msg) + + +def get_kde_date_attribute_json(values, parameters=None): + """ + Gets the KDE estimation for the distribution of a date attribute values + (expressed as JSON) + + Parameters + -------------- + values + Values of the date attribute value + parameters + Possible parameters of the algorithm, including: + graph_points: number of points to include in the graph + + Returns + -------------- + json + JSON representing the graph points + """ + x, y = get_kde_date_attribute(values, parameters=parameters) + + ret = [] + for i in range(len(x)): + ret.append((x[i].replace(tzinfo=None).timestamp(), y[i])) + + return json.dumps(ret) diff --git a/pm4py/pm4py/statistics/attributes/log/__init__.py b/pm4py/pm4py/statistics/attributes/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..03d7e140ab02ab354c3a099f61f155215925d441 --- /dev/null +++ b/pm4py/pm4py/statistics/attributes/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.attributes.log import get, select diff --git a/pm4py/pm4py/statistics/attributes/log/get.py b/pm4py/pm4py/statistics/attributes/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..d9632ccae5c5c83bb6aa03d252d1c0a1e750a79a --- /dev/null +++ b/pm4py/pm4py/statistics/attributes/log/get.py @@ -0,0 +1,405 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.attributes.common import get as attributes_common +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.objects.log.obj import EventLog +from pm4py.util import xes_constants as xes +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY +from pm4py.util import exec_utils +from pm4py.util import constants +from enum import Enum +from collections import Counter +from copy import copy +from typing import Optional, Dict, Any, Union, Tuple, List, Set +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.util.dt_parsing.variants import strpfromiso + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def __add_left_0(stri: str, target_length: int) -> str: + """ + Adds left 0s to the current string until the target length is reached + + Parameters + ---------------- + stri + String + target_length + Target length + + Returns + ---------------- + stri + Revised string + """ + while len(stri) < target_length: + stri = "0" + stri + return stri + + +def get_events_distribution(log: EventLog, distr_type: str = "days_month", parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[List[str], List[int]]: + """ + Gets the distribution of the events in the specified dimension + + Parameters + ---------------- + log + Event log + distr_type + Type of distribution: + - days_month => Gets the distribution of the events among the days of a month (from 1 to 31) + - months => Gets the distribution of the events among the months (from 1 to 12) + - years => Gets the distribution of the events among the years of the event log + - hours => Gets the distribution of the events among the hours of a day (from 0 to 23) + - days_week => Gets the distribution of the events among the days of a week (from Monday to Sunday) + parameters + Parameters of the algorithm, including: + - Parameters.TIMESTAMP_KEY + + Returns + ---------------- + x + Points (of the X-axis) + y + Points (of the Y-axis) + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + + timestamp_values = [] + for trace in log: + for event in trace: + timestamp_values.append(event[timestamp_key]) + + values = None + all_values = None + if distr_type == "days_month": + values = Counter(x.day for x in timestamp_values) + all_values = Counter({i: 0 for i in range(1, 32)}) + elif distr_type == "months": + values = Counter(x.month for x in timestamp_values) + all_values = Counter({i: 0 for i in range(1, 13)}) + elif distr_type == "years": + values = Counter(x.year for x in timestamp_values) + all_values = Counter({i: 0 for i in range(min(values), max(values)+1)}) + elif distr_type == "hours": + values = Counter(x.hour for x in timestamp_values) + all_values = Counter({i: 0 for i in range(0, 24)}) + elif distr_type == "days_week": + values = Counter(x.weekday() for x in timestamp_values) + all_values = Counter({i: 0 for i in range(0, 7)}) + elif distr_type == "weeks": + values = Counter(x.isocalendar().week for x in timestamp_values) + all_values = Counter({i: 0 for i in range(0, 53)}) + + # make sure that all the possible values appear + for v in all_values: + if v not in values: + values[v] = all_values[v] + + values = sorted([(__add_left_0(str(x), 2), y) for x, y in values.items()]) + + if distr_type == "days_week": + mapping = {"00": "Monday", "01": "Tuesday", "02": "Wednesday", "03": "Thursday", "04": "Friday", + "05": "Saturday", "06": "Sunday"} + values = [(mapping[x[0]], x[1]) for x in values] + + return [x[0] for x in values], [x[1] for x in values] + + +def get_all_trace_attributes_from_log(log: EventLog) -> Set[str]: + """ + Get all trace attributes from the log + + Parameters + ------------ + log + Log + + Returns + ------------ + all_attributes + All trace attributes from the log + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + all_attributes = set() + for trace in log: + all_attributes = all_attributes.union(set(trace.attributes.keys())) + if xes.DEFAULT_TRACEID_KEY in all_attributes: + all_attributes.remove(xes.DEFAULT_TRACEID_KEY) + return all_attributes + + +def get_all_event_attributes_from_log(log: EventLog) -> Set[str]: + """ + Get all events attributes from the log + + Parameters + ------------- + log + Log + + Returns + ------------- + all_attributes + All trace attributes from the log + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + all_attributes = set() + for trace in log: + for event in trace: + all_attributes = all_attributes.union(set(event.keys())) + if xes.DEFAULT_TRANSITION_KEY in all_attributes: + all_attributes.remove(xes.DEFAULT_TRANSITION_KEY) + return all_attributes + + +def get_attribute_values(log: EventLog, attribute_key: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Any, int]: + """ + Get the attribute values of the log for the specified attribute along with their count + + Parameters + ---------- + log + Log + attribute_key + Attribute for which we would like to know the values along with their count + parameters + Possible parameters of the algorithm + + Returns + ---------- + attributes + Dictionary of attributes associated with their count + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + if parameters is None: + parameters = {} + + keep_once_per_case = exec_utils.get_param_value(Parameters.KEEP_ONCE_PER_CASE, parameters, False) + + attribute_values = {} + + for trace in log: + trace_values = [x[attribute_key] for x in trace if attribute_key in x] + if keep_once_per_case: + trace_values = set(trace_values) + + for val in trace_values: + if val not in attribute_values: + attribute_values[val] = 0 + attribute_values[val] = attribute_values[val] + 1 + + return attribute_values + + +def get_trace_attribute_values(log: EventLog, attribute_key: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Any, int]: + """ + Get the attribute values of the log for the specified attribute along with their count + + Parameters + ------------ + log + Log + attribute_key + Attribute for which we wish to get the values along with their count + parameters + Possible parameters of the algorithm + + Returns + ------------ + attributes + Dictionary of attributes associated with their count + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + attributes = {} + + for trace in log: + if attribute_key in trace.attributes: + attribute = trace.attributes[attribute_key] + if attribute not in attributes: + attributes[attribute] = 0 + attributes[attribute] = attributes[attribute] + 1 + + return attributes + + +def get_kde_numeric_attribute(log, attribute, parameters=None): + """ + Gets the KDE estimation for the distribution of a numeric attribute values + + Parameters + ------------- + log + Event stream object (if log, is converted) + attribute + Numeric attribute to analyse + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + + Returns + -------------- + x + + X-axis values to represent + y + Y-axis values to represent + """ + if parameters is None: + parameters = {} + + this_parameters = copy(parameters) + this_parameters["deepcopy"] = False + this_parameters["include_case_attributes"] = False + + event_log = log_conversion.apply(log, variant=log_conversion.TO_EVENT_STREAM, parameters=this_parameters) + + values = [event[attribute] for event in event_log if attribute in event] + + return attributes_common.get_kde_numeric_attribute(values, parameters=parameters) + + +def get_kde_numeric_attribute_json(log, attribute, parameters=None): + """ + Gets the KDE estimation for the distribution of a numeric attribute values + (expressed as JSON) + + Parameters + ------------- + log + Event log object (if log, is converted) + attribute + Numeric attribute to analyse + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + + Returns + -------------- + x + X-axis values to represent + y + Y-axis values to represent + """ + if parameters is None: + parameters = {} + + this_parameters = copy(parameters) + this_parameters["deepcopy"] = False + this_parameters["include_case_attributes"] = False + + event_log = log_conversion.apply(log, variant=log_conversion.TO_EVENT_STREAM, parameters=this_parameters) + + values = [event[attribute] for event in event_log if attribute in event] + + return attributes_common.get_kde_numeric_attribute_json(values, parameters=parameters) + + +def get_kde_date_attribute(log, attribute=DEFAULT_TIMESTAMP_KEY, parameters=None): + """ + Gets the KDE estimation for the distribution of a date attribute values + + Parameters + ------------- + log + Event stream object (if log, is converted) + attribute + Date attribute to analyse + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + + Returns + -------------- + x + X-axis values to represent + y + Y-axis values to represent + """ + if parameters is None: + parameters = {} + + this_parameters = copy(parameters) + this_parameters["deepcopy"] = False + this_parameters["include_case_attributes"] = False + + event_log = log_conversion.apply(log, variant=log_conversion.TO_EVENT_STREAM, parameters=this_parameters) + + values = [strpfromiso.fix_naivety(event[attribute]) for event in event_log if attribute in event] + + return attributes_common.get_kde_date_attribute(values, parameters=parameters) + + +def get_kde_date_attribute_json(log, attribute=DEFAULT_TIMESTAMP_KEY, parameters=None): + """ + Gets the KDE estimation for the distribution of a date attribute values + (expressed as JSON) + + Parameters + ------------- + log + Event stream object (if log, is converted) + attribute + Date attribute to analyse + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + + Returns + -------------- + x + X-axis values to represent + y + Y-axis values to represent + """ + if parameters is None: + parameters = {} + + this_parameters = copy(parameters) + this_parameters["deepcopy"] = False + this_parameters["include_case_attributes"] = False + + event_log = log_conversion.apply(log, variant=log_conversion.TO_EVENT_STREAM, parameters=this_parameters) + + values = [strpfromiso.fix_naivety(event[attribute]) for event in event_log if attribute in event] + + return attributes_common.get_kde_date_attribute_json(values, parameters=parameters) diff --git a/pm4py/pm4py/statistics/attributes/log/select.py b/pm4py/pm4py/statistics/attributes/log/select.py new file mode 100644 index 0000000000000000000000000000000000000000..f42577984758b114189b8c59c82ca877469099c0 --- /dev/null +++ b/pm4py/pm4py/statistics/attributes/log/select.py @@ -0,0 +1,193 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.attributes.log.get import get_attribute_values, get_all_event_attributes_from_log, get_all_trace_attributes_from_log, get_trace_attribute_values +from pm4py.objects.log.util import sampling +from typing import Union, List, Set +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +DEFAULT_MAX_CASES_FOR_ATTR_SELECTION = 50 + + +def select_attributes_from_log_for_tree(log: EventLog, max_cases_for_attr_selection=DEFAULT_MAX_CASES_FOR_ATTR_SELECTION, + max_diff_occ=DEFAULT_MAX_CASES_FOR_ATTR_SELECTION / 4): + """ + Select attributes from log for tree + + Parameters + ------------ + log + Log + max_cases_for_attr_selection + Maximum number of cases to consider for attribute selection + max_diff_occ + Maximum number of different occurrences + + Returns + ------------ + + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + if len(log) > max_cases_for_attr_selection: + filtered_log = sampling.sample(log, max_cases_for_attr_selection) + else: + filtered_log = log + event_attributes = get_all_event_attributes_from_log(filtered_log) + trace_attributes = get_all_trace_attributes_from_log(filtered_log) + event_attributes_values = {} + trace_attributes_values = {} + for attr in event_attributes: + event_attributes_values[attr] = set(get_attribute_values(log, attr).keys()) + for attr in trace_attributes: + trace_attributes_values[attr] = set(get_trace_attribute_values(log, attr).keys()) + + numeric_event_attributes_to_consider = list() + string_event_attributes_to_consider = list() + numeric_trace_attributes_to_consider = list() + string_trace_attributes_to_consider = list() + + for attr in event_attributes_values: + lst = list(event_attributes_values[attr]) + val = lst[0] + if type(val) is int or type(val) is float: + numeric_event_attributes_to_consider.append(attr) + elif type(val) is str and len(lst) < max_diff_occ: + string_event_attributes_to_consider.append(attr) + + for attr in trace_attributes_values: + lst = list(trace_attributes_values[attr]) + val = lst[0] + if type(val) is int or type(val) is float: + numeric_trace_attributes_to_consider.append(attr) + elif type(val) is str and len(lst) < max_diff_occ: + string_trace_attributes_to_consider.append(attr) + + numeric_event_attributes_to_consider = check_event_attributes_presence(log, + numeric_event_attributes_to_consider) + string_event_attributes_to_consider = check_event_attributes_presence(log, + string_event_attributes_to_consider) + numeric_trace_attributes_to_consider = check_trace_attributes_presence(log, + numeric_trace_attributes_to_consider) + string_trace_attributes_to_consider = check_trace_attributes_presence(log, + string_trace_attributes_to_consider) + + return string_trace_attributes_to_consider, string_event_attributes_to_consider, numeric_trace_attributes_to_consider, numeric_event_attributes_to_consider + + +def check_trace_attributes_presence(log: EventLog, attributes_set: Union[Set[str], List[str]]) -> Union[Set[str], List[str]]: + """ + Check trace attributes presence in all the traces of the log + + Parameters + ------------ + log + Log + attributes_set + Set of attributes + + Returns + ------------ + filtered_set + Filtered set of attributes + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + keys = list(attributes_set) + for attr in keys: + if not verify_if_trace_attribute_is_in_each_trace(log, attr): + attributes_set.remove(attr) + return attributes_set + + +def check_event_attributes_presence(log: EventLog, attributes_set: Union[Set[str], List[str]]) -> Union[Set[str], List[str]]: + """ + Check event attributes presence in all the traces of the log + + Parameters + ------------ + log + Log + attributes_set + Set of attributes + + Returns + ------------ + filtered_set + Filtered set of attributes + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + keys = list(attributes_set) + for attr in keys: + if not verify_if_event_attribute_is_in_each_trace(log, attr): + attributes_set.remove(attr) + return attributes_set + + +def verify_if_event_attribute_is_in_each_trace(log: EventLog, attribute: str) -> bool: + """ + Verify if the event attribute is in each trace + + Parameters + ------------ + log + Log + attribute + Attribute + + Returns + ------------ + boolean + Boolean value that is aiming to check if the event attribute is in each trace + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + for trace in log: + present = False + for event in trace: + if attribute in event: + present = True + break + if not present: + return False + return True + + +def verify_if_trace_attribute_is_in_each_trace(log: EventLog, attribute: str) -> bool: + """ + Verify if the trace attribute is in each trace + + Parameters + ------------- + log + Log + attribute + Attribute + + Returns + ------------ + boolean + Boolean value that is aiming to check if the trace attribute is in each trace + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + for trace in log: + if attribute not in trace.attributes: + return False + return True diff --git a/pm4py/pm4py/statistics/attributes/pandas/__init__.py b/pm4py/pm4py/statistics/attributes/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..dabc29cb171da9e451ea9eece04decbecb50a0d1 --- /dev/null +++ b/pm4py/pm4py/statistics/attributes/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.attributes.pandas import get diff --git a/pm4py/pm4py/statistics/attributes/pandas/get.py b/pm4py/pm4py/statistics/attributes/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..5b15e416080b847c677059636780ce5a5ef3332a --- /dev/null +++ b/pm4py/pm4py/statistics/attributes/pandas/get.py @@ -0,0 +1,277 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.attributes.common import get as attributes_common +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY +from pm4py.util import exec_utils +from pm4py.util import constants +from enum import Enum +from collections import Counter +import pandas as pd +from typing import Optional, Dict, Any, Union, Tuple, List + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def __add_left_0(stri: str, target_length: int) -> str: + """ + Adds left 0s to the current string until the target length is reached + + Parameters + ---------------- + stri + String + target_length + Target length + + Returns + ---------------- + stri + Revised string + """ + while len(stri) < target_length: + stri = "0" + stri + return stri + + +def get_events_distribution(df: pd.DataFrame, distr_type: str = "days_month", parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[List[str], List[int]]: + """ + Gets the distribution of the events in the specified dimension + + Parameters + ---------------- + df + Dataframe + distr_type + Type of distribution: + - days_month => Gets the distribution of the events among the days of a month (from 1 to 31) + - months => Gets the distribution of the events among the months (from 1 to 12) + - years => Gets the distribution of the events among the years of the event log + - hours => Gets the distribution of the events among the hours of a day (from 0 to 23) + - days_week => Gets the distribution of the events among the days of a week (from Monday to Sunday) + - weeks => Distribution of the events among the weeks of a year (from 0 to 52) + parameters + Parameters of the algorithm, including: + - Parameters.TIMESTAMP_KEY + + Returns + ---------------- + x + Points (of the X-axis) + y + Points (of the Y-axis) + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + + values = None + all_values = None + if distr_type == "days_month": + serie = df[timestamp_key].dt.day + values = Counter(serie.value_counts().to_dict()) + all_values = Counter({i: 0 for i in range(1, 32)}) + elif distr_type == "months": + serie = df[timestamp_key].dt.month + values = Counter(serie.value_counts().to_dict()) + all_values = Counter({i: 0 for i in range(1, 13)}) + elif distr_type == "years": + serie = df[timestamp_key].dt.year + values = Counter(serie.value_counts().to_dict()) + all_values = Counter({i: 0 for i in range(min(values), max(values)+1)}) + elif distr_type == "hours": + serie = df[timestamp_key].dt.hour + values = Counter(serie.value_counts().to_dict()) + all_values = Counter({i: 0 for i in range(0, 24)}) + elif distr_type == "days_week": + serie = df[timestamp_key].dt.dayofweek + values = Counter(serie.value_counts().to_dict()) + all_values = Counter({i: 0 for i in range(0, 7)}) + elif distr_type == "weeks": + serie = df[timestamp_key].dt.isocalendar().week + values = Counter(serie.value_counts().to_dict()) + all_values = Counter({i: 0 for i in range(0, 53)}) + + # make sure that all the possible values appear + for v in all_values: + if v not in values: + values[v] = all_values[v] + + values = sorted([(__add_left_0(str(x), 2), y) for x, y in values.items()]) + + if distr_type == "days_week": + mapping = {"00": "Monday", "01": "Tuesday", "02": "Wednesday", "03": "Thursday", "04": "Friday", + "05": "Saturday", "06": "Sunday"} + values = [(mapping[x[0]], x[1]) for x in values] + + return [x[0] for x in values], [x[1] for x in values] + + +def get_attribute_values(df: pd.DataFrame, attribute_key: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Any, int]: + """ + Return list of attribute values contained in the specified column of the CSV + + Parameters + ----------- + df + Pandas dataframe + attribute_key + Attribute for which we want to known the values and the count + parameters + Possible parameters of the algorithm + + Returns + ----------- + attributes_values_dict + Attributes in the specified column, along with their count + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + keep_once_per_case = exec_utils.get_param_value(Parameters.KEEP_ONCE_PER_CASE, parameters, False) + + if keep_once_per_case: + df = df.groupby([case_id_glue, attribute_key]).first().reset_index() + attributes_values_dict = df[attribute_key].value_counts().to_dict() + # print("attributes_values_dict=",attributes_values_dict) + return attributes_values_dict + + +def get_kde_numeric_attribute(df: pd.DataFrame, attribute: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Any, int]: + """ + Gets the KDE estimation for the distribution of a numeric attribute values + + Parameters + ------------- + df + Pandas dataframe + attribute + Numeric attribute to analyse + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + + Returns + -------------- + x + X-axis values to represent + y + Y-axis values to represent + """ + if parameters is None: + parameters = {} + + max_no_of_points_to_sample = exec_utils.get_param_value(Parameters.MAX_NO_POINTS_SAMPLE, parameters, 100000) + red_df = df.dropna(subset=[attribute]) + if len(red_df) > max_no_of_points_to_sample: + red_df = red_df.sample(n=max_no_of_points_to_sample) + values = list(red_df[attribute]) + + return attributes_common.get_kde_numeric_attribute(values, parameters=parameters) + + +def get_kde_numeric_attribute_json(df, attribute, parameters=None): + """ + Gets the KDE estimation for the distribution of a numeric attribute values + (expressed as JSON) + + Parameters + -------------- + df + Pandas dataframe + attribute + Numeric attribute to analyse + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + Returns + -------------- + json + JSON representing the graph points + """ + values = list(df.dropna(subset=[attribute])[attribute]) + + return attributes_common.get_kde_numeric_attribute_json(values, parameters=parameters) + + +def get_kde_date_attribute(df, attribute=DEFAULT_TIMESTAMP_KEY, parameters=None): + """ + Gets the KDE estimation for the distribution of a date attribute values + + Parameters + ------------- + df + Pandas dataframe + attribute + Date attribute to analyse + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + + Returns + -------------- + x + X-axis values to represent + y + Y-axis values to represent + """ + if parameters is None: + parameters = {} + + max_no_of_points_to_sample = exec_utils.get_param_value(Parameters.MAX_NO_POINTS_SAMPLE, parameters, 100000) + red_df = df.dropna(subset=[attribute]) + if len(red_df) > max_no_of_points_to_sample: + red_df = red_df.sample(n=max_no_of_points_to_sample) + date_values = list(red_df[attribute]) + return attributes_common.get_kde_date_attribute(date_values, parameters=parameters) + + +def get_kde_date_attribute_json(df, attribute=DEFAULT_TIMESTAMP_KEY, parameters=None): + """ + Gets the KDE estimation for the distribution of a date attribute values + (expressed as JSON) + + Parameters + -------------- + df + Pandas dataframe + attribute + Date attribute to analyse + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + Returns + -------------- + json + JSON representing the graph points + """ + values = list(df.dropna(subset=[attribute])[attribute]) + + return attributes_common.get_kde_date_attribute_json(values, parameters=parameters) diff --git a/pm4py/pm4py/statistics/concurrent_activities/__init__.py b/pm4py/pm4py/statistics/concurrent_activities/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2c737ec4db725da724b808933252ef3bbfa2ab28 --- /dev/null +++ b/pm4py/pm4py/statistics/concurrent_activities/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.concurrent_activities import log, pandas diff --git a/pm4py/pm4py/statistics/concurrent_activities/log/__init__.py b/pm4py/pm4py/statistics/concurrent_activities/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..62fc686badeeb81c130a3f54f5500cf9367f42ba --- /dev/null +++ b/pm4py/pm4py/statistics/concurrent_activities/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.concurrent_activities.log import get diff --git a/pm4py/pm4py/statistics/concurrent_activities/log/get.py b/pm4py/pm4py/statistics/concurrent_activities/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..b1b2386747fa3888d59bb3c2d79994545829fc4a --- /dev/null +++ b/pm4py/pm4py/statistics/concurrent_activities/log/get.py @@ -0,0 +1,92 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.conversion.log import converter +from pm4py.objects.log.util import sorting +from pm4py.util import exec_utils, constants, xes_constants +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + STRICT = "strict" + + +def apply(interval_log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple[str, str], int]: + """ + Gets the number of times for which two activities have been concurrent in the log + + Parameters + -------------- + interval_log + Interval event log + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => activity key + - Parameters.START_TIMESTAMP_KEY => start timestamp + - Parameters.TIMESTAMP_KEY => complete timestamp + - Parameters.STRICT => Determine if only entries that are strictly concurrent + (i.e. the length of the intersection as real interval is > 0) should be obtained. Default: False + + Returns + -------------- + ret_dict + Dictionaries associating to a couple of activities (tuple) the number of times for which they have been + executed in parallel in the log + """ + if parameters is None: + parameters = {} + + interval_log = converter.apply(interval_log, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + strict = exec_utils.get_param_value(Parameters.STRICT, parameters, False) + + ret_dict = {} + for trace in interval_log: + sorted_trace = sorting.sort_timestamp_trace(trace, start_timestamp_key) + i = 0 + while i < len(sorted_trace): + act1 = sorted_trace[i][activity_key] + ts1 = sorted_trace[i][start_timestamp_key] + tc1 = sorted_trace[i][timestamp_key] + j = i + 1 + while j < len(sorted_trace): + ts2 = sorted_trace[j][start_timestamp_key] + tc2 = sorted_trace[j][timestamp_key] + act2 = sorted_trace[j][activity_key] + if max(ts1, ts2) <= min(tc1, tc2): + if not strict or max(ts1, ts2) < min(tc1, tc2): + # avoid getting two entries for the same set of concurrent activities + tup = tuple(sorted((act1, act2))) + if tup not in ret_dict: + ret_dict[tup] = 0 + ret_dict[tup] = ret_dict[tup] + 1 + else: + break + j = j + 1 + i = i + 1 + + return ret_dict diff --git a/pm4py/pm4py/statistics/concurrent_activities/pandas/__init__.py b/pm4py/pm4py/statistics/concurrent_activities/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6107897900e2ba68b6e05e950452d953750c848d --- /dev/null +++ b/pm4py/pm4py/statistics/concurrent_activities/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.concurrent_activities.pandas import get diff --git a/pm4py/pm4py/statistics/concurrent_activities/pandas/get.py b/pm4py/pm4py/statistics/concurrent_activities/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..f464d3f801674f8da3a1cdcde6ea7bbe3ec9b00b --- /dev/null +++ b/pm4py/pm4py/statistics/concurrent_activities/pandas/get.py @@ -0,0 +1,80 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.algo.discovery.dfg.adapters.pandas.df_statistics import get_concurrent_events_dataframe +from pm4py.util import exec_utils, constants, xes_constants +from typing import Optional, Dict, Any, Union, Tuple +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + STRICT = "strict" + + +def apply(dataframe: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple[str, str], int]: + """ + Gets the number of times for which two activities have been concurrent in the log + + Parameters + -------------- + dataframe + Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => activity key + - Parameters.CASE_ID_KEY => case id + - Parameters.START_TIMESTAMP_KEY => start timestamp + - Parameters.TIMESTAMP_KEY => complete timestamp + - Parameters.STRICT => Determine if only entries that are strictly concurrent + (i.e. the length of the intersection as real interval is > 0) should be obtained. Default: False + + Returns + -------------- + ret_dict + Dictionaries associating to a couple of activities (tuple) the number of times for which they have been + executed in parallel in the log + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + strict = exec_utils.get_param_value(Parameters.STRICT, parameters, False) + + concurrent_dataframe = get_concurrent_events_dataframe(dataframe, start_timestamp_key=start_timestamp_key, + timestamp_key=timestamp_key, case_id_glue=case_id_glue, + activity_key=activity_key, strict=strict) + + ret_dict0 = concurrent_dataframe.groupby([activity_key, activity_key + '_2']).size().to_dict() + ret_dict = {} + + # assure to avoid problems with np.float64, by using the Python float type + for el in ret_dict0: + # avoid getting two entries for the same set of concurrent activities + el2 = tuple(sorted(el)) + ret_dict[el2] = int(ret_dict0[el]) + + return ret_dict + diff --git a/pm4py/pm4py/statistics/end_activities/__init__.py b/pm4py/pm4py/statistics/end_activities/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0ce52a111e5029c95ad1aaab6fcce69ca213bec2 --- /dev/null +++ b/pm4py/pm4py/statistics/end_activities/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.end_activities import common, log, pandas diff --git a/pm4py/pm4py/statistics/end_activities/common/__init__.py b/pm4py/pm4py/statistics/end_activities/common/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e30c9dd63c22b3099feb162e688349e61cba7582 --- /dev/null +++ b/pm4py/pm4py/statistics/end_activities/common/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.end_activities.common import get diff --git a/pm4py/pm4py/statistics/end_activities/common/get.py b/pm4py/pm4py/statistics/end_activities/common/get.py new file mode 100644 index 0000000000000000000000000000000000000000..74664750768bb0615db1c10ed22601d55b9d2672 --- /dev/null +++ b/pm4py/pm4py/statistics/end_activities/common/get.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def get_sorted_end_activities_list(end_activities): + """ + Gets sorted end attributes list + + Parameters + ---------- + end_activities + Dictionary of end attributes associated with their count + + Returns + ---------- + listact + Sorted end attributes list + """ + listact = [] + for ea in end_activities: + listact.append([ea, end_activities[ea]]) + listact = sorted(listact, key=lambda x: x[1], reverse=True) + return listact + + +def get_end_activities_threshold(ealist, decreasing_factor): + """ + Get end attributes cutting threshold + + Parameters + ---------- + ealist + Sorted end attributes list + decreasing_factor + Decreasing factor of the algorithm + + Returns + --------- + threshold + End attributes cutting threshold + """ + + threshold = ealist[0][1] + for i in range(1, len(ealist)): + value = ealist[i][1] + if value > threshold * decreasing_factor: + threshold = value + return threshold diff --git a/pm4py/pm4py/statistics/end_activities/log/__init__.py b/pm4py/pm4py/statistics/end_activities/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8287cfe795bc5981b0f4ae475524569c9fcc8200 --- /dev/null +++ b/pm4py/pm4py/statistics/end_activities/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.end_activities.log import get diff --git a/pm4py/pm4py/statistics/end_activities/log/get.py b/pm4py/pm4py/statistics/end_activities/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..d2615838f6afa26537ee8fa9baf03e380e6e20f2 --- /dev/null +++ b/pm4py/pm4py/statistics/end_activities/log/get.py @@ -0,0 +1,69 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util import exec_utils +from pm4py.util import constants +from enum import Enum +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def get_end_activities(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, int]: + """ + Get the end attributes of the log along with their count + + Parameters + ---------- + log + Log + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Attribute key (must be specified if different from concept:name) + + Returns + ---------- + end_activities + Dictionary of end attributes associated with their count + """ + if parameters is None: + parameters = {} + attribute_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + end_activities = {} + + for trace in log: + if len(trace) > 0: + if attribute_key in trace[-1]: + activity_last_event = trace[-1][attribute_key] + if activity_last_event not in end_activities: + end_activities[activity_last_event] = 0 + end_activities[activity_last_event] = end_activities[activity_last_event] + 1 + + return end_activities diff --git a/pm4py/pm4py/statistics/end_activities/pandas/__init__.py b/pm4py/pm4py/statistics/end_activities/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d8f8dbeeda50e6da0a6d5923a471008814876868 --- /dev/null +++ b/pm4py/pm4py/statistics/end_activities/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.end_activities.pandas import get diff --git a/pm4py/pm4py/statistics/end_activities/pandas/get.py b/pm4py/pm4py/statistics/end_activities/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..0130ea986044324efe58b8ee336432d3b471367f --- /dev/null +++ b/pm4py/pm4py/statistics/end_activities/pandas/get.py @@ -0,0 +1,67 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util.constants import GROUPED_DATAFRAME +from pm4py.util import exec_utils +from pm4py.util import constants +from enum import Enum +from typing import Optional, Dict, Any, Union +from collections import Counter +import pandas as pd + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def get_end_activities(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, int]: + """ + Get end activities count + + Parameters + ----------- + df + Pandas dataframe + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Case ID column in the dataframe + Parameters.ACTIVITY_KEY -> Column that represents the activity + + Returns + ----------- + endact_dict + Dictionary of end activities along with their count + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + grouped_df = parameters[GROUPED_DATAFRAME] if GROUPED_DATAFRAME in parameters else None + + if grouped_df is None: + grouped_df = df.groupby(case_id_glue, sort=False) + + endact_dict = dict(Counter(grouped_df[activity_key].last().to_numpy().tolist())) + return endact_dict diff --git a/pm4py/pm4py/statistics/eventually_follows/__init__.py b/pm4py/pm4py/statistics/eventually_follows/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..98209b647a58a0cc6ba4035846d0439ded5f89c4 --- /dev/null +++ b/pm4py/pm4py/statistics/eventually_follows/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.eventually_follows import log, uvcl, pandas diff --git a/pm4py/pm4py/statistics/eventually_follows/log/__init__.py b/pm4py/pm4py/statistics/eventually_follows/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8eb5c2e8aa1aed57144de4ec99ca4dec332d60d6 --- /dev/null +++ b/pm4py/pm4py/statistics/eventually_follows/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.eventually_follows.log import get diff --git a/pm4py/pm4py/statistics/eventually_follows/log/get.py b/pm4py/pm4py/statistics/eventually_follows/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..918738b002a22c8d31979e1e3f50ee3d55ca6c32 --- /dev/null +++ b/pm4py/pm4py/statistics/eventually_follows/log/get.py @@ -0,0 +1,67 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.objects.conversion.log import converter +from pm4py.objects.log.util import sorting +from pm4py.util import exec_utils, constants, xes_constants +from typing import Optional, Dict, Any, Union, Tuple +from pm4py.objects.log.obj import EventLog + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + KEEP_FIRST_FOLLOWING = "keep_first_following" + + +def apply(interval_log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple[str, str], int]: + if parameters is None: + parameters = {} + + interval_log = converter.apply(interval_log, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + keep_first_following = exec_utils.get_param_value(Parameters.KEEP_FIRST_FOLLOWING, parameters, False) + + ret_dict = {} + for trace in interval_log: + sorted_trace = sorting.sort_timestamp_trace(trace, start_timestamp_key) + i = 0 + while i < len(sorted_trace): + act1 = sorted_trace[i][activity_key] + tc1 = sorted_trace[i][timestamp_key] + j = i + 1 + while j < len(sorted_trace): + ts2 = sorted_trace[j][start_timestamp_key] + act2 = sorted_trace[j][activity_key] + if tc1 <= ts2: + tup = (act1, act2) + if tup not in ret_dict: + ret_dict[tup] = 0 + ret_dict[tup] = ret_dict[tup] + 1 + if keep_first_following: + break + j = j + 1 + i = i + 1 + + return ret_dict diff --git a/pm4py/pm4py/statistics/eventually_follows/pandas/__init__.py b/pm4py/pm4py/statistics/eventually_follows/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fe4f8eea19e4bf9d746475eaf2c2bc8803799e16 --- /dev/null +++ b/pm4py/pm4py/statistics/eventually_follows/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.eventually_follows.pandas import get diff --git a/pm4py/pm4py/statistics/eventually_follows/pandas/get.py b/pm4py/pm4py/statistics/eventually_follows/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..34eb8c312582307b1d05fe49fac619133a791069 --- /dev/null +++ b/pm4py/pm4py/statistics/eventually_follows/pandas/get.py @@ -0,0 +1,58 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.algo.discovery.dfg.adapters.pandas.df_statistics import get_partial_order_dataframe +from pm4py.util import exec_utils, constants, xes_constants +from typing import Optional, Dict, Any, Union, Tuple +import pandas as pd + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + KEEP_FIRST_FOLLOWING = "keep_first_following" + + +def apply(dataframe: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[Tuple[str, str], int]: + if parameters is None: + parameters = {} + + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + keep_first_following = exec_utils.get_param_value(Parameters.KEEP_FIRST_FOLLOWING, parameters, False) + + partial_order_dataframe = get_partial_order_dataframe(dataframe, start_timestamp_key=start_timestamp_key, + timestamp_key=timestamp_key, case_id_glue=case_id_glue, + activity_key=activity_key, + keep_first_following=keep_first_following) + + ret_dict = partial_order_dataframe.groupby([activity_key, activity_key + '_2']).size().to_dict() + + # assure to avoid problems with np.float64, by using the Python float type + for el in ret_dict: + ret_dict[el] = int(ret_dict[el]) + + return ret_dict diff --git a/pm4py/pm4py/statistics/eventually_follows/uvcl/__init__.py b/pm4py/pm4py/statistics/eventually_follows/uvcl/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1544806f6d71f95eee019e98142808fa15babe6b --- /dev/null +++ b/pm4py/pm4py/statistics/eventually_follows/uvcl/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.statistics.eventually_follows.uvcl import get \ No newline at end of file diff --git a/pm4py/pm4py/statistics/eventually_follows/uvcl/get.py b/pm4py/pm4py/statistics/eventually_follows/uvcl/get.py new file mode 100644 index 0000000000000000000000000000000000000000..c35a41a3471d3a365aae8dbd0eb907fb6d2ed72a --- /dev/null +++ b/pm4py/pm4py/statistics/eventually_follows/uvcl/get.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from enum import Enum + +from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL +from pm4py.util import constants +from typing import Optional, Dict, Any, Union, Tuple + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + KEEP_FIRST_FOLLOWING = "keep_first_following" + + +def apply(interval_log: IMDataStructureUVCL, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[ + Tuple[str, str], int]: + if parameters is None: + parameters = {} + + ret_dict = {} + for trace, freq in interval_log.data_structure.items(): + i = 0 + while i < len(trace): + act1 = trace[i] + j = i + 1 + while j < len(trace): + act2 = trace[j] + tup = (act1, act2) + if tup in ret_dict.keys(): + ret_dict[tup] = ret_dict[tup] + freq + else: + ret_dict[tup] = freq + j = j + 1 + i = i + 1 + + return ret_dict diff --git a/pm4py/pm4py/statistics/ocel/__init__.py b/pm4py/pm4py/statistics/ocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/statistics/ocel/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/statistics/ocel/act_ot_dependent.py b/pm4py/pm4py/statistics/ocel/act_ot_dependent.py new file mode 100644 index 0000000000000000000000000000000000000000..af9e773dee699e16eda476cb8042497d70192164 --- /dev/null +++ b/pm4py/pm4py/statistics/ocel/act_ot_dependent.py @@ -0,0 +1,104 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any, Tuple, Set, List +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.ocel import constants as ocel_constants +from pm4py.objects.ocel.obj import OCEL +from pm4py.statistics.ocel.act_utils import find_associations_from_relations_df + + +class Parameters(Enum): + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + + +def aggregate_events(associations: Dict[str, Dict[str, Set[Tuple[str, str]]]]) -> Dict[ + str, Dict[str, Set[Tuple[str, str]]]]: + """ + Utility method to calculate the "events" metric from the object-type specific associations. + """ + ret = {} + + for ot in associations: + ret[ot] = {} + for act in associations[ot]: + ret[ot][act] = set() + for el in associations[ot][act]: + ret[ot][act].add(el[0]) + + return ret + + +def aggregate_unique_objects(associations: Dict[str, Dict[str, Set[Tuple[str, str]]]]) -> Dict[ + str, Dict[str, Set[Tuple[str, str]]]]: + """ + Utility method to calculate the "unique objects" metric from the object-type specific associations. + """ + ret = {} + + for ot in associations: + ret[ot] = {} + for act in associations[ot]: + ret[ot][act] = set() + for el in associations[ot][act]: + ret[ot][act].add(el[1]) + + return ret + + +def aggregate_total_objects(associations: Dict[str, Dict[str, Set[Tuple[str, str]]]]) -> Dict[ + str, Dict[str, Set[Tuple[str, str]]]]: + """ + Utility method to calculate the "total objects" metric from the object-type specific associations. + """ + return associations + + +def find_associations_from_ocel(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[ + str, Dict[str, List[Tuple[str, str]]]]: + """ + Associates each object type and activity in the object-centric event log with the combinations + of event identifiers and objects that are associated to them. + + Parameters + ------------------ + ocel + Object-centric event log + parameters + Parameters of the method, including: + - Parameters.EVENT_ID => the attribute to use as event identifier + - Parameters.OBJECT_ID => the attribute to use as object identifier + - Parameters.EVENT_ACTIVITY => the attribute to use as activity + + Returns + ----------------- + dict_associations + Dictionary that associates each object type (first key) and activity (second key) + to its (ev. id, obj id.) combinations. + """ + if parameters is None: + parameters = {} + + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + ret = {} + + for ot, relations in ocel.relations.groupby(object_type): + ret[ot] = find_associations_from_relations_df(relations, parameters=parameters) + + return ret diff --git a/pm4py/pm4py/statistics/ocel/act_utils.py b/pm4py/pm4py/statistics/ocel/act_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..907322595c9671e63b8b87fba35f99e990309323 --- /dev/null +++ b/pm4py/pm4py/statistics/ocel/act_utils.py @@ -0,0 +1,145 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from typing import Optional, Dict, Any, Tuple, Set, List +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.ocel import constants as ocel_constants +import pandas as pd +from pm4py.objects.ocel.obj import OCEL +from copy import copy + + +class Parameters(Enum): + EVENT_ID = ocel_constants.PARAM_EVENT_ID + OBJECT_ID = ocel_constants.PARAM_OBJECT_ID + EVENT_ACTIVITY = ocel_constants.PARAM_EVENT_ACTIVITY + PREFILTERING = "prefiltering" + + +def aggregate_events(associations: Dict[str, Set[Tuple[str, str]]]) -> Dict[str, Set[str]]: + """ + Utility method to calculate the "events" metric from the associations. + """ + ret = {} + for act in associations: + ret[act] = set() + for el in associations[act]: + ret[act].add(el[0]) + return ret + + +def aggregate_unique_objects(associations: Dict[str, Set[Tuple[str, str]]]) -> Dict[str, Set[str]]: + """ + Utility method to calculate the "unique objects" metric from the associations. + """ + ret = {} + for act in associations: + ret[act] = set() + for el in associations[act]: + ret[act].add(el[1]) + return ret + + +def aggregate_total_objects(associations: Dict[str, Set[Tuple[str, str]]]) -> Dict[str, Set[Tuple[str, str]]]: + """ + Utility method to calculate the "total objects" metric from the associations. + """ + return associations + + +def find_associations_from_relations_df(relations_df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> \ +Dict[ + str, List[Tuple[str, str]]]: + """ + Associates each activity in the relationship dataframe with the combinations + of event identifiers and objects that are associated to the activity. + + Parameters + ------------------ + rel_df + Relations dataframe + parameters + Parameters of the method, including: + - Parameters.EVENT_ID => the attribute to use as event identifier + - Parameters.OBJECT_ID => the attribute to use as object identifier + - Parameters.EVENT_ACTIVITY => the attribute to use as activity + + Returns + ----------------- + dict_associations + Dictionary that associates each activity to its (ev. id, obj id.) combinations. + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel_constants.DEFAULT_EVENT_ID) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel_constants.DEFAULT_OBJECT_ID) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, + ocel_constants.DEFAULT_EVENT_ACTIVITY) + prefiltering = exec_utils.get_param_value(Parameters.PREFILTERING, parameters, "none") + + if prefiltering == "start": + relations_df = relations_df.groupby(object_id).first().reset_index() + elif prefiltering == "end": + relations_df = relations_df.groupby(object_id).last().reset_index() + associations1 = relations_df.groupby(event_activity)[[event_id, object_id]].agg(list).to_dict() + + associations = {} + for act, evs in associations1[event_id].items(): + associations[act] = [] + objs = associations1[object_id][act] + for i in range(len(evs)): + associations[act].append((evs[i], objs[i])) + + return associations + + +def find_associations_from_ocel(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Set[Any]]: + """ + Associates each activity in the OCEL with the combinations + of event identifiers and objects that are associated to the activity. + + Parameters + ------------------ + ocel + Object-centric event log + parameters + Parameters of the method, including: + - Parameters.EVENT_ID => the attribute to use as event identifier + - Parameters.OBJECT_ID => the attribute to use as object identifier + - Parameters.EVENT_ACTIVITY => the attribute to use as activity + + Returns + ----------------- + dict_associations + Dictionary that associates each activity to its (ev. id, obj id.) combinations. + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, + ocel.event_activity) + + new_parameters = copy(parameters) + new_parameters[Parameters.EVENT_ID] = event_id + new_parameters[Parameters.OBJECT_ID] = object_id + new_parameters[Parameters.EVENT_ACTIVITY] = event_activity + + return find_associations_from_relations_df(ocel.relations, parameters=new_parameters) diff --git a/pm4py/pm4py/statistics/ocel/edge_metrics.py b/pm4py/pm4py/statistics/ocel/edge_metrics.py new file mode 100644 index 0000000000000000000000000000000000000000..92f8c9296bc7986696a27b000d8adebc400ee481 --- /dev/null +++ b/pm4py/pm4py/statistics/ocel/edge_metrics.py @@ -0,0 +1,239 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any, Tuple, Collection, Set, List +from enum import Enum +from pm4py.util import exec_utils, constants +from pm4py.objects.ocel import constants as ocel_constants +from pm4py.util.business_hours import BusinessHours +import numpy as np +import datetime + + +class Parameters(Enum): + EVENT_ID = ocel_constants.PARAM_EVENT_ID + OBJECT_ID = ocel_constants.PARAM_OBJECT_ID + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + EVENT_ACTIVITY = ocel_constants.PARAM_EVENT_ACTIVITY + EVENT_TIMESTAMP = ocel_constants.PARAM_EVENT_TIMESTAMP + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def performance_calculation_ocel_aggregation(ocel: OCEL, aggregation: Dict[str, Dict[Tuple[str, str], Set[Any]]], + parameters: Optional[Dict[Any, Any]] = None) -> Dict[ + str, Dict[Tuple[str, str], List[float]]]: + """ + Calculates the performance based on one of the following aggregations: + - aggregate_ev_couples + - aggregate_total_objects + + Parameters + ---------------- + ocel + Object-centric event log + aggregation + Aggregation calculated using one of the aforementioned methods + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the event identifier + - Parameters.EVENT_TIMESTAMP => the timestamp + - Parameters.BUSINESS_HOURS => enables/disables the business hours + - Parameters.BUSINESS_HOURS_SLOTS => + work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business + hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. + [ + (7 * 60 * 60, 17 * 60 * 60), + ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), + ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60), + ] + meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + + Returns + ---------------- + edges_performance + For each object type, associate a dictionary where to each activity couple + all the times between the activities are recorded. + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + timestamp_key = exec_utils.get_param_value(Parameters.EVENT_TIMESTAMP, parameters, ocel.event_timestamp) + timestamps = ocel.events.groupby(event_id)[timestamp_key].agg(list).to_dict() + timestamps = {x: y[0] for x, y in timestamps.items()} + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + ret = {} + + for ot in aggregation: + ret[ot] = {} + for act in aggregation[ot]: + ret[ot][act] = [] + for el in aggregation[ot][act]: + if business_hours: + bh = BusinessHours(timestamps[el[0]], + timestamps[el[1]], + business_hour_slots=business_hours_slots, + workcalendar=workcalendar) + diff = bh.get_seconds() + else: + timedelta = timestamps[el[1]] - timestamps[el[0]] + diff = 0 + if isinstance(timedelta, np.timedelta64): + diff = timedelta / np.timedelta64(1, 's') + elif isinstance(timedelta, datetime.timedelta): + diff = timedelta.total_seconds() + ret[ot][act].append(diff) + ret[ot][act] = sorted(ret[ot][act]) + + return ret + + +def aggregate_ev_couples(edges: Dict[str, Dict[Tuple[str, str], Collection[Any]]]) -> Dict[ + str, Dict[Tuple[str, str], Set[Any]]]: + """ + Performs an aggregation of the occurrences of a given edge on the couple of events (source event, target event). + + Parameters + ------------------- + edges + Edges calculated using the find_associations_per_edge function + + Returns + ------------------- + aggregation + A dictionary associating to each object type another dictionary where to each edge (activity couple) all the + couples of related events are associated. + """ + ret = {} + for ot in edges: + ret[ot] = {} + for act in edges[ot]: + ret[ot][act] = set((x[0], x[1]) for x in edges[ot][act]) + return ret + + +def aggregate_unique_objects(edges: Dict[str, Dict[Tuple[str, str], Collection[Any]]]) -> Dict[ + str, Dict[Tuple[str, str], Set[Any]]]: + """ + Performs an aggregation of the occurrences of a given edge in the involved object. + + Parameters + ------------------- + edges + Edges calculated using the find_associations_per_edge function + + Returns + ------------------- + aggregation + A dictionary associating to each object type another dictionary where to each edge (activity couple) all the + involved objects are associated. + """ + ret = {} + for ot in edges: + ret[ot] = {} + for act in edges[ot]: + ret[ot][act] = set(x[2] for x in edges[ot][act]) + return ret + + +def aggregate_total_objects(edges: Dict[str, Dict[Tuple[str, str], Collection[Any]]]) -> Dict[ + str, Dict[Tuple[str, str], Set[Any]]]: + """ + Performs an aggregation of the occurrences of a given edge on the triple (source event, target event, object). + + Parameters + ------------------- + edges + Edges calculated using the find_associations_per_edge function + + Returns + ------------------- + aggregation + A dictionary associating to each object type another dictionary where to each edge (activity couple) all the + triples (source event, target event, object) are associated. + """ + ret = {} + for ot in edges: + ret[ot] = {} + for act in edges[ot]: + ret[ot][act] = set(edges[ot][act]) + return ret + + +def find_associations_per_edge(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[ + str, Dict[Tuple[str, str], Collection[Any]]]: + """ + Finds all the occurrences of a given edge (activity couple), expressed as triples (source event, target event, object ID). + + Parameters + ------------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ACTIVITY => the activity + - Parameters.EVENT_ID => the event identifier + - Parameters.OBJECT_ID => the object identifier + - Parameters.OBJECT_TYPE => the object type + + Returns + ------------------ + edges + A dictionary associating to each object type a dictionary where to each edge (activity couple) the list of triples (source event, target event, object ID) + is associated. + """ + if parameters is None: + parameters = {} + + event_activity = exec_utils.get_param_value(Parameters.EVENT_ACTIVITY, parameters, ocel.event_activity) + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + identifiers = ocel.events[event_id].to_numpy().tolist() + activities = ocel.events.groupby(event_id)[event_activity].agg(list).to_dict() + activities = {x: y[0] for x, y in activities.items()} + + omap = ocel.relations.groupby(event_id)[object_id].agg(list).to_dict() + objtypes = ocel.objects.groupby(object_id)[object_type].agg(list).to_dict() + objtypes = {x: y[0] for x, y in objtypes.items()} + + history = {} + edges = {} + + for evid in identifiers: + if evid in omap: + for obj in omap[evid]: + if obj in history: + objtype = objtypes[obj] + if objtype not in edges: + edges[objtype] = {} + previd = history[obj] + acttup = (activities[previd], activities[evid]) + if acttup not in edges[objtype]: + edges[objtype][acttup] = list() + edges[objtype][acttup].append((previd, evid, obj)) + history[obj] = evid + + return edges diff --git a/pm4py/pm4py/statistics/ocel/objects_ot_count.py b/pm4py/pm4py/statistics/ocel/objects_ot_count.py new file mode 100644 index 0000000000000000000000000000000000000000..f156d768dc4b7654a5254e00f26e22283e8f93b4 --- /dev/null +++ b/pm4py/pm4py/statistics/ocel/objects_ot_count.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.ocel import constants as ocel_constants +from collections import Counter +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any + + +class Parameters(Enum): + EVENT_ID = ocel_constants.PARAM_EVENT_ID + OBJECT_ID = ocel_constants.PARAM_OBJECT_ID + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + + +def get_objects_ot_count(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Dict[str, int]]: + """ + Counts for each event the number of related objects per type + + Parameters + ------------------- + ocel + Object-centric Event log + parameters + Parameters of the algorithm, including: + - Parameters.EVENT_ID => the event identifier to be used + - Parameters.OBJECT_ID => the object identifier to be used + - Parameters.OBJECT_TYPE => the object type to be used + + Returns + ------------------- + dict_ot + Dictionary associating to each event identifier a dictionary with the number of related objects + """ + if parameters is None: + parameters = {} + + event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) + object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) + object_type = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + ref0 = ocel.relations.groupby(event_id)[object_type].agg(list).to_dict() + ref = {x: Counter(y) for x, y in ref0.items()} + + return ref diff --git a/pm4py/pm4py/statistics/ocel/ot_activities.py b/pm4py/pm4py/statistics/ocel/ot_activities.py new file mode 100644 index 0000000000000000000000000000000000000000..8511136f027c9e4a13ba8c0d679e3c184e18840f --- /dev/null +++ b/pm4py/pm4py/statistics/ocel/ot_activities.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import constants +from pm4py.objects.ocel import constants as ocel_constants +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any, Collection + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + OBJECT_TYPE = ocel_constants.PARAM_OBJECT_TYPE + TEMP_COLUMN = "temp_column" + TEMP_SEPARATOR = "temp_separator" + + +def get_object_type_activities(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Collection[str]]: + """ + Gets the set of activities performed for each object type + + Parameters + ---------------- + ocel + Object-centric event log + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the activity key + - Parameters.OBJECT_TYPE => the object type column + + Returns + ---------------- + dict + A dictionary having as key the object types and as values the activities performed for that object type + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, ocel.event_activity) + object_type_column = exec_utils.get_param_value(Parameters.OBJECT_TYPE, parameters, ocel.object_type_column) + + matching_dict = {} + prel_dict = ocel.relations.groupby([activity_key, object_type_column]).size().to_dict() + + for el in prel_dict: + if not el[1] in matching_dict: + matching_dict[el[1]] = set() + matching_dict[el[1]].add(el[0]) + + return matching_dict diff --git a/pm4py/pm4py/statistics/overlap/__init__.py b/pm4py/pm4py/statistics/overlap/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1dc507c837530105ead8d6e58781e18a2935410f --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.overlap import cases, utils + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The overlap package will be removed in a future release.") diff --git a/pm4py/pm4py/statistics/overlap/cases/__init__.py b/pm4py/pm4py/statistics/overlap/cases/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6ef26e719dba80bc510fb5b91622cbf8236c24cb --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/cases/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.overlap.cases import log, pandas diff --git a/pm4py/pm4py/statistics/overlap/cases/log/__init__.py b/pm4py/pm4py/statistics/overlap/cases/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..f3de45e2701b864e2b5e8715b31f632534b71cbd --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/cases/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.overlap.cases.log import get diff --git a/pm4py/pm4py/statistics/overlap/cases/log/get.py b/pm4py/pm4py/statistics/overlap/cases/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..b6559d1188f3b5890ec8ce826137bd982560d23d --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/cases/log/get.py @@ -0,0 +1,66 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Dict, Optional, Any, List, Union + +from pm4py.objects.log.obj import EventLog +from pm4py.statistics.overlap.utils import compute +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.conversion.log import converter + + +class Parameters(Enum): + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[int]: + """ + Computes the case overlap statistic from an interval event log + + Parameters + ----------------- + log + Interval event log + parameters + Parameters of the algorithm, including: + - Parameters.TIMESTAMP_KEY => attribute representing the completion timestamp + - Parameters.START_TIMESTAMP_KEY => attribute representing the start timestamp + + Returns + ---------------- + case overlap + List associating to each case the number of open cases during the life of a case + """ + if parameters is None: + parameters = {} + + log = converter.apply(log, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + + points = [] + for trace in log: + case_points = [] + for event in trace: + case_points.append((event[start_timestamp_key].timestamp(), event[timestamp_key].timestamp())) + points.append((min(x[0] for x in case_points), max(x[1] for x in case_points))) + + return compute.apply(points, parameters=parameters) diff --git a/pm4py/pm4py/statistics/overlap/cases/pandas/__init__.py b/pm4py/pm4py/statistics/overlap/cases/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3b3dfe4c6da8e93a08531424cb2b17c15c92389c --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/cases/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.overlap.cases.pandas import get diff --git a/pm4py/pm4py/statistics/overlap/cases/pandas/get.py b/pm4py/pm4py/statistics/overlap/cases/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..1546bc5d12967cbae9483e618a868918e94d54b2 --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/cases/pandas/get.py @@ -0,0 +1,76 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Dict, Optional, Any, List, Union + +import pandas as pd + +from pm4py.statistics.overlap.utils import compute +from pm4py.util import exec_utils, constants, xes_constants + + +class Parameters(Enum): + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def apply(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[int]: + """ + Computes the case overlap statistic from a Pandas dataframe + + Parameters + ----------------- + df + Dataframe + parameters + Parameters of the algorithm, including: + - Parameters.TIMESTAMP_KEY => attribute representing the completion timestamp + - Parameters.START_TIMESTAMP_KEY => attribute representing the start timestamp + + Returns + ---------------- + case_overlap + List associating to each case the number of open cases during the life of a case + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + columns = list({timestamp_key, start_timestamp_key, case_id_key}) + stream = df[columns].to_dict('records') + + points = [] + cases = [] + cases_points = {} + for event in stream: + case_id = event[case_id_key] + if case_id not in cases: + cases.append(case_id) + cases_points[case_id] = [] + cases_points[case_id].append((event[start_timestamp_key].timestamp(), event[timestamp_key].timestamp())) + + for case in cases: + case_points = cases_points[case] + points.append((min(x[0] for x in case_points), max(x[1] for x in case_points))) + + return compute.apply(points, parameters=parameters) diff --git a/pm4py/pm4py/statistics/overlap/interval_events/__init__.py b/pm4py/pm4py/statistics/overlap/interval_events/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6ad0b2e897d32fcf19286ca471b7ca2b3342b6c0 --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/interval_events/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.overlap.interval_events import log, pandas diff --git a/pm4py/pm4py/statistics/overlap/interval_events/log/__init__.py b/pm4py/pm4py/statistics/overlap/interval_events/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..51388b855c43c0f135c156a8b0e6682977ead419 --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/interval_events/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.overlap.interval_events.log import get diff --git a/pm4py/pm4py/statistics/overlap/interval_events/log/get.py b/pm4py/pm4py/statistics/overlap/interval_events/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..1c7ddad13578ddf8215e1ca798e98a9fb093bbb7 --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/interval_events/log/get.py @@ -0,0 +1,65 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union, List + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.statistics.overlap.utils import compute +from pm4py.util import constants, xes_constants, exec_utils + + +class Parameters(Enum): + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + + +def apply(log: Union[EventLog, EventStream], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[int]: + """ + Counts the intersections of each interval event with the other interval events of the log + (all the events are considered, not looking at the activity) + + Parameters + ---------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.START_TIMESTAMP_KEY => the attribute to consider as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute to consider as timestamp + + Returns + ----------------- + overlap + For each interval event, ordered by the order of appearance in the log, associates the number + of intersecting events. + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + + points = [] + for trace in log: + for event in trace: + points.append((event[start_timestamp_key].timestamp(), event[timestamp_key].timestamp())) + + return compute.apply(points, parameters=parameters) diff --git a/pm4py/pm4py/statistics/overlap/interval_events/pandas/__init__.py b/pm4py/pm4py/statistics/overlap/interval_events/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..08f100e3792e73251deb108bf281ddaed95a9636 --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/interval_events/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.overlap.interval_events.pandas import get diff --git a/pm4py/pm4py/statistics/overlap/interval_events/pandas/get.py b/pm4py/pm4py/statistics/overlap/interval_events/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..cb42670e3ab4f08956fe0f7b49c7b296f24965b1 --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/interval_events/pandas/get.py @@ -0,0 +1,65 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, List, Union + +import pandas as pd + +from pm4py.statistics.overlap.utils import compute +from pm4py.util import constants, xes_constants, exec_utils + + +class Parameters(Enum): + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + + +def apply(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[int]: + """ + Counts the intersections of each interval event with the other interval events of the log + (all the events are considered, not looking at the activity) + + Parameters + ---------------- + df + Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.START_TIMESTAMP_KEY => the attribute to consider as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute to consider as timestamp + + Returns + ----------------- + overlap + For each interval event, ordered by the order of appearance in the log, associates the number + of intersecting events. + """ + if parameters is None: + parameters = {} + + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + + df = df[list({start_timestamp_key, timestamp_key})].to_dict('records') + points = [] + + for event in df: + points.append((event[start_timestamp_key].timestamp(), event[timestamp_key].timestamp())) + + return compute.apply(points) diff --git a/pm4py/pm4py/statistics/overlap/utils/__init__.py b/pm4py/pm4py/statistics/overlap/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..75d51a98a14a7e281dc7a9e3b1272ad186f4585e --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/utils/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.overlap.utils import compute diff --git a/pm4py/pm4py/statistics/overlap/utils/compute.py b/pm4py/pm4py/statistics/overlap/utils/compute.py new file mode 100644 index 0000000000000000000000000000000000000000..37d57b222d4daa1969049535271df3dff47b0edb --- /dev/null +++ b/pm4py/pm4py/statistics/overlap/utils/compute.py @@ -0,0 +1,61 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Tuple, List, Union + +from intervaltree import Interval, IntervalTree + +from pm4py.util import exec_utils + + +class Parameters(Enum): + EPSILON = "epsilon" + + +def apply(points: List[Tuple[float, float]], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[int]: + """ + Computes the overlap statistic given a list of points, expressed as (min_timestamp, max_timestamp) + + Parameters + ----------------- + points + List of points with the aforementioned features + parameters + Parameters of the method, including: + - Parameters.EPSILON + + Returns + ----------------- + overlap + List associating to each point the number of intersecting points + """ + if parameters is None: + parameters = {} + + epsilon = exec_utils.get_param_value(Parameters.EPSILON, parameters, 10 ** (-5)) + points = [(x[0] - epsilon, x[1] + epsilon) for x in points] + sorted_points = sorted(points) + tree = IntervalTree() + + for p in sorted_points: + tree.add(Interval(p[0], p[1])) + + overlap = [] + for p in points: + overlap.append(len(tree[p[0]:p[1]])) + + return overlap diff --git a/pm4py/pm4py/statistics/passed_time/__init__.py b/pm4py/pm4py/statistics/passed_time/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a8271d112a07b7673d42ccd7d62cdeb7ad49b2d7 --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.passed_time import log, pandas + diff --git a/pm4py/pm4py/statistics/passed_time/log/__init__.py b/pm4py/pm4py/statistics/passed_time/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d5b9988942a91652a90d79957a90c82a7d0fa49e --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.passed_time.log import algorithm, variants diff --git a/pm4py/pm4py/statistics/passed_time/log/algorithm.py b/pm4py/pm4py/statistics/passed_time/log/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..e75e224196bcf1b89eb9c4d251bbf56d04dd6e43 --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/log/algorithm.py @@ -0,0 +1,56 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.passed_time.log.variants import pre, post, prepost +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any +from pm4py.objects.log.obj import EventLog + + +class Variants(Enum): + PRE = pre + POST = post + PREPOST = prepost + + +VERSIONS = {Variants.PRE, Variants.POST, Variants.PREPOST} + + +def apply(log: EventLog, activity: str, variant=Variants.PRE, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Gets statistics on execution times of the paths to/from the activity + + Parameters + ------------ + log + Log + activity + Activity + variant + Variant: + - Variants.PRE + - Variants.POST + - Variants.PREPOST + parameters + Possible parameters of the algorithm + + Returns + ----------- + dictio + Dictio containing the times from/to the activity + """ + return exec_utils.get_variant(variant).apply(log, activity, parameters=parameters) diff --git a/pm4py/pm4py/statistics/passed_time/log/variants/__init__.py b/pm4py/pm4py/statistics/passed_time/log/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1ee3045581282f9e38a8bf6301b60b5a6dbec595 --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/log/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.passed_time.log.variants import pre, post, prepost diff --git a/pm4py/pm4py/statistics/passed_time/log/variants/post.py b/pm4py/pm4py/statistics/passed_time/log/variants/post.py new file mode 100644 index 0000000000000000000000000000000000000000..48553c1a3bd09bee405e2520886886d380ba3e1a --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/log/variants/post.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.variants import native, performance +from typing import Optional, Dict, Any +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +def apply(log: EventLog, activity: str, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Gets the time passed to each succeeding activity + + Parameters + ------------- + log + Log + activity + Activity that we are considering + parameters + Possible parameters of the algorithm + + Returns + ------------- + dictio + Dictionary containing a 'post' key with the + list of aggregates times from the given activity to each succeeding activity + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + dfg_frequency = native.native(log, parameters=parameters) + dfg_performance = performance.performance(log, parameters=parameters) + + post = [] + sum_perf_post = 0.0 + sum_acti_post = 0.0 + + for entry in dfg_performance.keys(): + if entry[0] == activity: + post.append([entry[1], float(dfg_performance[entry]), int(dfg_frequency[entry])]) + sum_perf_post = sum_perf_post + float(dfg_performance[entry]) * float(dfg_frequency[entry]) + sum_acti_post = sum_acti_post + float(dfg_frequency[entry]) + + perf_acti_post = 0.0 + if sum_acti_post > 0: + perf_acti_post = sum_perf_post / sum_acti_post + + return {"post": post, "post_avg_perf": perf_acti_post} diff --git a/pm4py/pm4py/statistics/passed_time/log/variants/pre.py b/pm4py/pm4py/statistics/passed_time/log/variants/pre.py new file mode 100644 index 0000000000000000000000000000000000000000..518d954891e375403d8f4f580364499bab5ff5bc --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/log/variants/pre.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.variants import native, performance +from typing import Optional, Dict, Any +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +def apply(log: EventLog, activity: str, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Gets the time passed from each preceding activity + + Parameters + ------------- + log + Log + activity + Activity that we are considering + parameters + Possible parameters of the algorithm + + Returns + ------------- + dictio + Dictionary containing a 'pre' key with the + list of aggregates times from each preceding activity to the given activity + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + dfg_frequency = native.native(log, parameters=parameters) + dfg_performance = performance.performance(log, parameters=parameters) + + pre = [] + sum_perf_pre = 0.0 + sum_acti_pre = 0.0 + + for entry in dfg_performance.keys(): + if entry[1] == activity: + pre.append([entry[0], float(dfg_performance[entry]), int(dfg_frequency[entry])]) + sum_perf_pre = sum_perf_pre + float(dfg_performance[entry]) * float(dfg_frequency[entry]) + sum_acti_pre = sum_acti_pre + float(dfg_frequency[entry]) + + perf_acti_pre = 0.0 + if sum_acti_pre > 0: + perf_acti_pre = sum_perf_pre / sum_acti_pre + + return {"pre": pre, "pre_avg_perf": perf_acti_pre} diff --git a/pm4py/pm4py/statistics/passed_time/log/variants/prepost.py b/pm4py/pm4py/statistics/passed_time/log/variants/prepost.py new file mode 100644 index 0000000000000000000000000000000000000000..23091b8d097f3743c41271f7c3c5aab1e85166fe --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/log/variants/prepost.py @@ -0,0 +1,76 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.variants import native, performance +from typing import Optional, Dict, Any +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +def apply(log: EventLog, activity: str, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Gets the time passed from each preceding activity and to each succeeding activity + + Parameters + ------------- + log + Log + activity + Activity that we are considering + parameters + Possible parameters of the algorithm + + Returns + ------------- + dictio + Dictionary containing a 'pre' key with the + list of aggregated times from each preceding activity to the given activity + and a 'post' key with the list of aggregates times from the given activity + to each succeeding activity + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + dfg_frequency = native.native(log, parameters=parameters) + dfg_performance = performance.performance(log, parameters=parameters) + + pre = [] + sum_perf_post = 0.0 + sum_acti_post = 0.0 + post = [] + sum_perf_pre = 0.0 + sum_acti_pre = 0.0 + + for entry in dfg_performance.keys(): + if entry[1] == activity: + pre.append([entry[0], float(dfg_performance[entry]), int(dfg_frequency[entry])]) + sum_perf_pre = sum_perf_pre + float(dfg_performance[entry]) * float(dfg_frequency[entry]) + sum_acti_pre = sum_acti_pre + float(dfg_frequency[entry]) + if entry[0] == activity: + post.append([entry[1], float(dfg_performance[entry]), int(dfg_frequency[entry])]) + sum_perf_post = sum_perf_post + float(dfg_performance[entry]) * float(dfg_frequency[entry]) + sum_acti_post = sum_acti_post + float(dfg_frequency[entry]) + + perf_acti_pre = 0.0 + if sum_acti_pre > 0: + perf_acti_pre = sum_perf_pre / sum_acti_pre + perf_acti_post = 0.0 + if sum_acti_post > 0: + perf_acti_post = sum_perf_post / sum_acti_post + + return {"pre": pre, "post": post, "post_avg_perf": perf_acti_post, "pre_avg_perf": perf_acti_pre} diff --git a/pm4py/pm4py/statistics/passed_time/pandas/__init__.py b/pm4py/pm4py/statistics/passed_time/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0259fc563795494ed5ea65076225d999570e9957 --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.passed_time.pandas import algorithm, variants diff --git a/pm4py/pm4py/statistics/passed_time/pandas/algorithm.py b/pm4py/pm4py/statistics/passed_time/pandas/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..3f9c326da0d42d45f351384e57483e695bed6e17 --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/pandas/algorithm.py @@ -0,0 +1,56 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.passed_time.pandas.variants import pre, post, prepost +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any +import pandas as pd + + +class Variants(Enum): + PRE = pre + POST = post + PREPOST = prepost + + +VERSIONS = {Variants.PRE, Variants.POST, Variants.PREPOST} + + +def apply(df: pd.DataFrame, activity: str, variant=Variants.PRE, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Gets statistics on execution times of the paths to/from the activity + + Parameters + ------------ + df + Dataframe + activity + Activity + variant + Variant: + - Variants.PRE + - Variants.POST + - Variants.PREPOST + parameters + Possible parameters of the algorithm + + Returns + ----------- + dictio + Dictio containing the times from/to the activity + """ + return exec_utils.get_variant(variant).apply(df, activity, parameters=parameters) diff --git a/pm4py/pm4py/statistics/passed_time/pandas/variants/__init__.py b/pm4py/pm4py/statistics/passed_time/pandas/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a43d6e61dc19e7377bcbdee413799c7a02541f30 --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/pandas/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.passed_time.pandas.variants import pre, post, prepost diff --git a/pm4py/pm4py/statistics/passed_time/pandas/variants/post.py b/pm4py/pm4py/statistics/passed_time/pandas/variants/post.py new file mode 100644 index 0000000000000000000000000000000000000000..a50adbfe88a48fdd75ed6d56689c14c4b1914b3d --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/pandas/variants/post.py @@ -0,0 +1,91 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.xes_constants import DEFAULT_NAME_KEY, DEFAULT_TIMESTAMP_KEY +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics as pandas +from pm4py.util import exec_utils +from pm4py.util import constants +from enum import Enum +from typing import Optional, Dict, Any +import pandas as pd + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def apply(df: pd.DataFrame, activity: str, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Gets the time passed to each succeeding activity + + Parameters + ------------- + df + Dataframe + activity + Activity that we are considering + parameters + Possible parameters of the algorithm + + Returns + ------------- + dictio + Dictionary containing a 'post' key with the + list of aggregates times from the given activity to each succeeding activity + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + [dfg_frequency, dfg_performance] = pandas.get_dfg_graph(df, measure="both", activity_key=activity_key, + case_id_glue=case_id_glue, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key, + business_hours=business_hours, business_hours_slot=business_hours_slots, workcalendar=workcalendar) + + post = [] + sum_perf_post = 0.0 + sum_acti_post = 0.0 + + for entry in dfg_performance.keys(): + if entry[0] == activity: + post.append([entry[1], float(dfg_performance[entry]), int(dfg_frequency[entry])]) + sum_perf_post = sum_perf_post + float(dfg_performance[entry]) * float(dfg_frequency[entry]) + sum_acti_post = sum_acti_post + float(dfg_frequency[entry]) + + perf_acti_post = 0.0 + if sum_acti_post > 0: + perf_acti_post = sum_perf_post / sum_acti_post + + return {"post": post, "post_avg_perf": perf_acti_post} diff --git a/pm4py/pm4py/statistics/passed_time/pandas/variants/pre.py b/pm4py/pm4py/statistics/passed_time/pandas/variants/pre.py new file mode 100644 index 0000000000000000000000000000000000000000..a3dc6ea2889a3aa0e68dab67fe20646cb2b33b97 --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/pandas/variants/pre.py @@ -0,0 +1,93 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.xes_constants import DEFAULT_NAME_KEY, DEFAULT_TIMESTAMP_KEY +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics as pandas +from pm4py.util import exec_utils +from pm4py.util import constants +from enum import Enum +from typing import Optional, Dict, Any +import pandas as pd + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def apply(df: pd.DataFrame, activity: str, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Gets the time passed from each preceding activity + + Parameters + ------------- + df + Dataframe + activity + Activity that we are considering + parameters + Possible parameters of the algorithm + + Returns + ------------- + dictio + Dictionary containing a 'pre' key with the + list of aggregates times from each preceding activity to the given activity + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + [dfg_frequency, dfg_performance] = pandas.get_dfg_graph(df, measure="both", activity_key=activity_key, + case_id_glue=case_id_glue, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key, + business_hours=business_hours, + business_hours_slot=business_hours_slots, + workcalendar=workcalendar) + + pre = [] + sum_perf_pre = 0.0 + sum_acti_pre = 0.0 + + for entry in dfg_performance.keys(): + if entry[1] == activity: + pre.append([entry[0], float(dfg_performance[entry]), int(dfg_frequency[entry])]) + sum_perf_pre = sum_perf_pre + float(dfg_performance[entry]) * float(dfg_frequency[entry]) + sum_acti_pre = sum_acti_pre + float(dfg_frequency[entry]) + + perf_acti_pre = 0.0 + if sum_acti_pre > 0: + perf_acti_pre = sum_perf_pre / sum_acti_pre + + return {"pre": pre, "pre_avg_perf": perf_acti_pre} diff --git a/pm4py/pm4py/statistics/passed_time/pandas/variants/prepost.py b/pm4py/pm4py/statistics/passed_time/pandas/variants/prepost.py new file mode 100644 index 0000000000000000000000000000000000000000..68f0d0b6da54b890e8448eae64d7600970042942 --- /dev/null +++ b/pm4py/pm4py/statistics/passed_time/pandas/variants/prepost.py @@ -0,0 +1,105 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.xes_constants import DEFAULT_NAME_KEY, DEFAULT_TIMESTAMP_KEY +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics as pandas +from pm4py.util import exec_utils +from pm4py.util import constants +from enum import Enum +from typing import Optional, Dict, Any +import pandas as pd + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def apply(df: pd.DataFrame, activity: str, parameters: Optional[Dict[Any, Any]] = None) -> Dict[str, Any]: + """ + Gets the time passed from each preceding activity and to each succeeding activity + + Parameters + ------------- + df + Dataframe + activity + Activity that we are considering + parameters + Possible parameters of the algorithm + + Returns + ------------- + dictio + Dictionary containing a 'pre' key with the + list of aggregated times from each preceding activity to the given activity + and a 'post' key with the list of aggregates times from the given activity + to each succeeding activity + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + [dfg_frequency, dfg_performance] = pandas.get_dfg_graph(df, measure="both", activity_key=activity_key, + case_id_glue=case_id_glue, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key, + business_hours=business_hours, + business_hours_slot=business_hours_slots, + workcalendar=workcalendar) + + pre = [] + sum_perf_post = 0.0 + sum_acti_post = 0.0 + post = [] + sum_perf_pre = 0.0 + sum_acti_pre = 0.0 + + for entry in dfg_performance.keys(): + if entry[1] == activity: + pre.append([entry[0], float(dfg_performance[entry]), int(dfg_frequency[entry])]) + sum_perf_pre = sum_perf_pre + float(dfg_performance[entry]) * float(dfg_frequency[entry]) + sum_acti_pre = sum_acti_pre + float(dfg_frequency[entry]) + if entry[0] == activity: + post.append([entry[1], float(dfg_performance[entry]), int(dfg_frequency[entry])]) + sum_perf_post = sum_perf_post + float(dfg_performance[entry]) * float(dfg_frequency[entry]) + sum_acti_post = sum_acti_post + float(dfg_frequency[entry]) + + perf_acti_pre = 0.0 + if sum_acti_pre > 0: + perf_acti_pre = sum_perf_pre / sum_acti_pre + perf_acti_post = 0.0 + if sum_acti_post > 0: + perf_acti_post = sum_perf_post / sum_acti_post + + return {"pre": pre, "post": post, "post_avg_perf": perf_acti_post, "pre_avg_perf": perf_acti_pre} diff --git a/pm4py/pm4py/statistics/rework/__init__.py b/pm4py/pm4py/statistics/rework/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1e4d15b5c0d6afcb41ae89d7fb4e6e6d4a314d8f --- /dev/null +++ b/pm4py/pm4py/statistics/rework/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.rework import log, pandas diff --git a/pm4py/pm4py/statistics/rework/cases/__init__.py b/pm4py/pm4py/statistics/rework/cases/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4c1318ad167cba01f3af698e3dae0e6443fdc08e --- /dev/null +++ b/pm4py/pm4py/statistics/rework/cases/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.rework.cases import log, pandas diff --git a/pm4py/pm4py/statistics/rework/cases/log/__init__.py b/pm4py/pm4py/statistics/rework/cases/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..02b2707c21fd582bef8fc8b1704b7cc26c6343a8 --- /dev/null +++ b/pm4py/pm4py/statistics/rework/cases/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.rework.cases.log import get diff --git a/pm4py/pm4py/statistics/rework/cases/log/get.py b/pm4py/pm4py/statistics/rework/cases/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..8f106fe671921cbcea8dcb893f22c8002ab3c793 --- /dev/null +++ b/pm4py/pm4py/statistics/rework/cases/log/get.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union + +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils, constants, xes_constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Dict[str, int]]: + """ + Computes for each trace of the event log how much rework occurs. + The rework is computed as the difference between the total number of activities of a trace and the + number of unique activities. + + Parameters + ---------------- + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the activity key + - Parameters.CASE_ID_KEY => the case identifier attribute + + Returns + ----------------- + dict + Dictionary associating to each case ID: + - The number of total activities of the case (number of events) + - The rework (difference between the total number of activities of a trace and the number of unique activities) + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, xes_constants.DEFAULT_TRACEID_KEY) + + rework_cases = {} + for trace in log: + activities = list([x[activity_key] for x in trace]) + unique_activities = set(activities) + rework = len(activities) - len(unique_activities) + rework_cases[trace.attributes[case_id_key]] = {"number_activities": len(activities), "rework": rework} + + return rework_cases diff --git a/pm4py/pm4py/statistics/rework/cases/pandas/__init__.py b/pm4py/pm4py/statistics/rework/cases/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c42ad0a073ea4a29b73172fc4a8b13d0d181ffed --- /dev/null +++ b/pm4py/pm4py/statistics/rework/cases/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.rework.cases.pandas import get diff --git a/pm4py/pm4py/statistics/rework/cases/pandas/get.py b/pm4py/pm4py/statistics/rework/cases/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..01bee63e1cac653ba65be2dd68253f0aefbd69f9 --- /dev/null +++ b/pm4py/pm4py/statistics/rework/cases/pandas/get.py @@ -0,0 +1,62 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union + +import pandas as pd +from pm4py.util import exec_utils, constants, xes_constants + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def apply(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Dict[str, int]]: + """ + Computes for each trace of the event log how much rework occurs. + The rework is computed as the difference between the total number of activities of a trace and the + number of unique activities. + + Parameters + ---------------- + df + Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the activity key + - Parameters.CASE_ID_KEY => the case identifier attribute + + Returns + ----------------- + dict + Dictionary associating to each case ID: + - The number of total activities of the case (number of events) + - The rework (difference between the total number of activities of a trace and the number of unique activities) + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + grouped_df = df.groupby(case_id_key)[activity_key].agg(["count", "nunique"]).reset_index().to_dict("records") + rework_cases = {} + for el in grouped_df: + rework_cases[el["case:concept:name"]] = {"number_activities": el["count"], "rework": el["count"] - el["nunique"]} + + return rework_cases diff --git a/pm4py/pm4py/statistics/rework/log/__init__.py b/pm4py/pm4py/statistics/rework/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e5d9a9bef38066be364594478ee33fb4abc63387 --- /dev/null +++ b/pm4py/pm4py/statistics/rework/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.rework.log import get diff --git a/pm4py/pm4py/statistics/rework/log/get.py b/pm4py/pm4py/statistics/rework/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..5c09b19e97391726cf3d332d0f8aa9eb596818c0 --- /dev/null +++ b/pm4py/pm4py/statistics/rework/log/get.py @@ -0,0 +1,61 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import constants, xes_constants, exec_utils +from enum import Enum +from collections import Counter +from pm4py.objects.log.obj import EventLog, EventStream +from typing import Union, Optional, Dict, Any +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +def apply(log: Union[EventLog, EventStream], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, int]: + """ + Associates to each activity (with at least one rework) the number of cases in the log for which + the rework happened. + + Parameters + ------------------ + log + Event log + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to be used as activity + + Returns + ------------------ + dict + Dictionary associating to each activity the number of cases for which the rework happened + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + ret = Counter() + + for trace in log: + activities = Counter([x[activity_key] for x in trace]) + activities = [x for x in activities if activities[x] > 1] + for act in activities: + ret[act] += 1 + + return dict(ret) diff --git a/pm4py/pm4py/statistics/rework/pandas/__init__.py b/pm4py/pm4py/statistics/rework/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3b6c92411021ea75be4374d1c87cc6d2f0b35379 --- /dev/null +++ b/pm4py/pm4py/statistics/rework/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.rework.pandas import get diff --git a/pm4py/pm4py/statistics/rework/pandas/get.py b/pm4py/pm4py/statistics/rework/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..e635478186c38f445993577a0e6634f1c88bfc3d --- /dev/null +++ b/pm4py/pm4py/statistics/rework/pandas/get.py @@ -0,0 +1,65 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union + +import pandas as pd + +from pm4py.util import constants, xes_constants, exec_utils + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +INT_CASE_ACT_SIZE = "@@int_case_act_size" + + +def apply(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, int]: + """ + Associates to each activity (with at least one rework) the number of cases in the log for which + the rework happened. + + Parameters + ------------------ + df + Dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to be used as activity + - Parameters.CASE_ID_KEY => the attribute to be used as case ID + + Returns + ------------------ + dict + Dictionary associating to each activity the number of cases for which the rework happened + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + df = df.copy() + df = df[list({activity_key, case_id_key})] + df[INT_CASE_ACT_SIZE] = df.groupby([activity_key, case_id_key]).cumcount() + df = df[df[INT_CASE_ACT_SIZE] > 0] + df = df.groupby([activity_key, case_id_key]).last() + ret = df.groupby(activity_key).size().to_dict() + + return ret diff --git a/pm4py/pm4py/statistics/service_time/__init__.py b/pm4py/pm4py/statistics/service_time/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..138dde3273b6a05bb885c59003fff740882081e3 --- /dev/null +++ b/pm4py/pm4py/statistics/service_time/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.service_time import log, pandas diff --git a/pm4py/pm4py/statistics/service_time/log/__init__.py b/pm4py/pm4py/statistics/service_time/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d4d7bad37d1eea63a2be52690486793fcd70de75 --- /dev/null +++ b/pm4py/pm4py/statistics/service_time/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.service_time.log import get diff --git a/pm4py/pm4py/statistics/service_time/log/get.py b/pm4py/pm4py/statistics/service_time/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..f3781a05c0e64169335dd28b6535869c18ef78f9 --- /dev/null +++ b/pm4py/pm4py/statistics/service_time/log/get.py @@ -0,0 +1,118 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from statistics import mean, median + +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.util.business_hours import BusinessHours +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + AGGREGATION_MEASURE = "aggregationMeasure" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +DIFF_KEY = "@@diff" + + +def apply(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, float]: + """ + Gets the service time per activity on an event log object + + Parameters + -------------- + dataframe + Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => activity key + - Parameters.START_TIMESTAMP_KEY => start timestamp key + - Parameters.TIMESTAMP_KEY => timestamp key + - Parameters.BUSINESS_HOURS => calculates the difference of time based on the business hours, not the total time. + Default: False + - Parameters.BUSINESS_HOURS_SLOTS => + work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business + hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. + [ + (7 * 60 * 60, 17 * 60 * 60), + ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), + ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60), + ] + meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + - Parameters.AGGREGATION_MEASURE => performance aggregation measure (sum, min, max, mean, median) + + Returns + -------------- + soj_time_dict + Service time dictionary + """ + if parameters is None: + parameters = {} + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, + parameters, "mean") + + durations_dict = {} + activities = [ev[activity_key] for trace in log for ev in trace] + for act in activities: + durations_dict[act] = [] + + for trace in log: + for event in trace: + activity = event[activity_key] + if business_hours: + bh = BusinessHours(event[start_timestamp_key], event[timestamp_key], + business_hour_slots=business_hours_slots, workcalendar=workcalendar) + durations_dict[activity].append(bh.get_seconds()) + else: + start_time = event[start_timestamp_key].timestamp() + complete_time = event[timestamp_key].timestamp() + durations_dict[activity].append(complete_time - start_time) + + for act in durations_dict: + if aggregation_measure == "median": + durations_dict[act] = median(durations_dict[act]) + elif aggregation_measure == "min": + durations_dict[act] = min(durations_dict[act]) + elif aggregation_measure == "max": + durations_dict[act] = max(durations_dict[act]) + elif aggregation_measure == "sum": + durations_dict[act] = sum(durations_dict[act]) + else: + durations_dict[act] = mean(durations_dict[act]) + + return durations_dict diff --git a/pm4py/pm4py/statistics/service_time/pandas/__init__.py b/pm4py/pm4py/statistics/service_time/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b88e9bf3cbc68504df1eaa4c81089304e3ba2237 --- /dev/null +++ b/pm4py/pm4py/statistics/service_time/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.service_time.pandas import get diff --git a/pm4py/pm4py/statistics/service_time/pandas/get.py b/pm4py/pm4py/statistics/service_time/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..03ce48ec886e802dc5753573b3c0cdc8b43fe427 --- /dev/null +++ b/pm4py/pm4py/statistics/service_time/pandas/get.py @@ -0,0 +1,109 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import pandas as pd +from enum import Enum + +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils +from pm4py.util.business_hours import soj_time_business_hours_diff +from typing import Optional, Dict, Any, Union + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + AGGREGATION_MEASURE = "aggregationMeasure" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +DIFF_KEY = "@@diff" + + +def apply(dataframe: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, float]: + """ + Gets the service time per activity on a Pandas dataframe + + Parameters + -------------- + dataframe + Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => activity key + - Parameters.START_TIMESTAMP_KEY => start timestamp key + - Parameters.TIMESTAMP_KEY => timestamp key + - Parameters.BUSINESS_HOURS => calculates the difference of time based on the business hours, not the total time. + Default: False + - Parameters.BUSINESS_HOURS_SLOTS => + work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business + hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. + [ + (7 * 60 * 60, 17 * 60 * 60), + ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), + ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60), + ] + meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + - Parameters.AGGREGATION_MEASURE => performance aggregation measure (sum, min, max, mean, median) + + Returns + -------------- + soj_time_dict + Service time dictionary + """ + if parameters is None: + parameters = {} + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, + parameters, "mean") + + if business_hours: + dataframe[DIFF_KEY] = dataframe.apply( + lambda x: soj_time_business_hours_diff(x[start_timestamp_key], x[timestamp_key], business_hours_slots, workcalendar), axis=1) + else: + dataframe[DIFF_KEY] = pandas_utils.get_total_seconds(dataframe[timestamp_key] - dataframe[start_timestamp_key]) + + dataframe = dataframe.reset_index() + + column = dataframe.groupby(activity_key)[DIFF_KEY] + if aggregation_measure == "median": + ret_dict = column.median().to_dict() + elif aggregation_measure == "min": + ret_dict = column.min().to_dict() + elif aggregation_measure == "max": + ret_dict = column.max().to_dict() + elif aggregation_measure == "sum": + ret_dict = column.sum().to_dict() + else: + ret_dict = column.mean().to_dict() + + # assure to avoid problems with np.float64, by using the Python float type + for el in ret_dict: + ret_dict[el] = float(ret_dict[el]) + + return ret_dict diff --git a/pm4py/pm4py/statistics/sojourn_time/__init__.py b/pm4py/pm4py/statistics/sojourn_time/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4c92062bad1841d71b4965ad43ab82dfeea14827 --- /dev/null +++ b/pm4py/pm4py/statistics/sojourn_time/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.service_time import * diff --git a/pm4py/pm4py/statistics/start_activities/__init__.py b/pm4py/pm4py/statistics/start_activities/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b461fbdfa84efc99203847dcb79099669147bbb1 --- /dev/null +++ b/pm4py/pm4py/statistics/start_activities/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.start_activities import common, log, pandas diff --git a/pm4py/pm4py/statistics/start_activities/common/__init__.py b/pm4py/pm4py/statistics/start_activities/common/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9b2eb23069eb14d5e86f7ccb85a08916f5a5b449 --- /dev/null +++ b/pm4py/pm4py/statistics/start_activities/common/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.start_activities.common import get diff --git a/pm4py/pm4py/statistics/start_activities/common/get.py b/pm4py/pm4py/statistics/start_activities/common/get.py new file mode 100644 index 0000000000000000000000000000000000000000..640a412b6304ed326e617091631158674668d8a5 --- /dev/null +++ b/pm4py/pm4py/statistics/start_activities/common/get.py @@ -0,0 +1,59 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def get_sorted_start_activities_list(start_activities): + """ + Gets sorted start attributes list + + Parameters + ---------- + start_activities + Dictionary of start attributes associated with their count + + Returns + ---------- + listact + Sorted start attributes list + """ + listact = [] + for sa in start_activities: + listact.append([sa, start_activities[sa]]) + listact = sorted(listact, key=lambda x: x[1], reverse=True) + return listact + + +def get_start_activities_threshold(salist, decreasing_factor): + """ + Get start attributes cutting threshold + + Parameters + ---------- + salist + Sorted start attributes list + decreasing_factor + Decreasing factor of the algorithm + + Returns + --------- + threshold + Start attributes cutting threshold + """ + threshold = salist[0][1] + for i in range(1, len(salist)): + value = salist[i][1] + if value > threshold * decreasing_factor: + threshold = value + return threshold diff --git a/pm4py/pm4py/statistics/start_activities/log/__init__.py b/pm4py/pm4py/statistics/start_activities/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e0977694a59686d4c3aab40f104fc6d715a2ece1 --- /dev/null +++ b/pm4py/pm4py/statistics/start_activities/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.start_activities.log import get diff --git a/pm4py/pm4py/statistics/start_activities/log/get.py b/pm4py/pm4py/statistics/start_activities/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..f272dd01494d80114f95f89d01ddf2f7df710541 --- /dev/null +++ b/pm4py/pm4py/statistics/start_activities/log/get.py @@ -0,0 +1,69 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util import exec_utils +from pm4py.util import constants +from enum import Enum +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def get_start_activities(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, int]: + """ + Get the start attributes of the log along with their count + + Parameters + ---------- + log + Log + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Attribute key (must be specified if different from concept:name) + + Returns + ---------- + start_activities + Dictionary of start attributes associated with their count + """ + if parameters is None: + parameters = {} + attribute_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + start_activities = {} + + for trace in log: + if len(trace) > 0: + if attribute_key in trace[0]: + activity_first_event = trace[0][attribute_key] + if activity_first_event not in start_activities: + start_activities[activity_first_event] = 0 + start_activities[activity_first_event] = start_activities[activity_first_event] + 1 + + return start_activities diff --git a/pm4py/pm4py/statistics/start_activities/pandas/__init__.py b/pm4py/pm4py/statistics/start_activities/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3f4c51ccd1e26a35758ea878cc3ee1e6e90c95cf --- /dev/null +++ b/pm4py/pm4py/statistics/start_activities/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.start_activities.pandas import get diff --git a/pm4py/pm4py/statistics/start_activities/pandas/get.py b/pm4py/pm4py/statistics/start_activities/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..0e478d2ed753cf71081022bbd5b839b6d883e75b --- /dev/null +++ b/pm4py/pm4py/statistics/start_activities/pandas/get.py @@ -0,0 +1,65 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.util.xes_constants import DEFAULT_NAME_KEY +from pm4py.util.constants import GROUPED_DATAFRAME +from pm4py.util import exec_utils +from pm4py.util import constants +from enum import Enum +from typing import Optional, Dict, Any, Union +from collections import Counter +import pandas as pd + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def get_start_activities(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, int]: + """ + Get start activities count + + Parameters + ----------- + df + Pandas dataframe + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Case ID column in the dataframe + Parameters.ACTIVITY_KEY -> Column that represents the activity + + Returns + ----------- + startact_dict + Dictionary of start activities along with their count + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, DEFAULT_NAME_KEY) + + grouped_df = parameters[GROUPED_DATAFRAME] if GROUPED_DATAFRAME in parameters else df.groupby(case_id_glue, sort=False) + + startact_dict = dict(Counter(grouped_df[activity_key].first().to_numpy().tolist())) + return startact_dict diff --git a/pm4py/pm4py/statistics/traces/__init__.py b/pm4py/pm4py/statistics/traces/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5245ddcc9e3f401b1255a6508ee8f167ae6319c7 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.traces import generic, cycle_time diff --git a/pm4py/pm4py/statistics/traces/cycle_time/__init__.py b/pm4py/pm4py/statistics/traces/cycle_time/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d4c2dc77b9f8a52509b42d4cd0e38e39cf418503 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/cycle_time/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.traces.cycle_time import log, pandas, util diff --git a/pm4py/pm4py/statistics/traces/cycle_time/log/__init__.py b/pm4py/pm4py/statistics/traces/cycle_time/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b9b36d1456122b29517558877990d4af045f644a --- /dev/null +++ b/pm4py/pm4py/statistics/traces/cycle_time/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.traces.cycle_time.log import get diff --git a/pm4py/pm4py/statistics/traces/cycle_time/log/get.py b/pm4py/pm4py/statistics/traces/cycle_time/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..db3e57fa826f0bbf7f02da925c162fb7aa453dc3 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/cycle_time/log/get.py @@ -0,0 +1,73 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.log.obj import EventLog, Trace +from pm4py.util import exec_utils, constants, xes_constants +from enum import Enum +from pm4py.objects.conversion.log import converter +from pm4py.statistics.traces.cycle_time.util import compute +from typing import Union, Dict, Optional, Any + + +class Parameters(Enum): + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + + +def apply(log_or_trace: Union[Trace, EventLog], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Computes the cycle time starting from an event log or a trace object + + The definition that has been followed is the one proposed in: + https://www.presentationeze.com/presentations/lean-manufacturing-just-in-time/lean-manufacturing-just-in-time-full-details/process-cycle-time-analysis/calculate-cycle-time/#:~:text=Cycle%20time%20%3D%20Average%20time%20between,is%2024%20minutes%20on%20average. + + So: + Cycle time = Average time between completion of units. + + Example taken from the website: + Consider a manufacturing facility, which is producing 100 units of product per 40 hour week. + The average throughput rate is 1 unit per 0.4 hours, which is one unit every 24 minutes. + Therefore the cycle time is 24 minutes on average. + + Parameters + ------------------ + log_or_trace + Log or trace + parameters + Parameters of the algorithm, including: + - Parameters.START_TIMESTAMP_KEY => the attribute acting as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute acting as timestamp + + Returns + ------------------ + cycle_time + Cycle time + """ + if parameters is None: + parameters = {} + + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, xes_constants.DEFAULT_TIMESTAMP_KEY) + + if type(log_or_trace) is Trace: + log = EventLog() + log.append(log_or_trace) + else: + log = converter.apply(log_or_trace, variant=converter.Variants.TO_EVENT_LOG, parameters=parameters) + + events = [(x[start_timestamp_key].timestamp(), x[timestamp_key].timestamp()) for trace in log for x in trace] + + return compute.cycle_time(events, len(log)) diff --git a/pm4py/pm4py/statistics/traces/cycle_time/pandas/__init__.py b/pm4py/pm4py/statistics/traces/cycle_time/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7f9319b41178eeaf0ce38c381d59e599798be400 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/cycle_time/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.traces.cycle_time.pandas import get diff --git a/pm4py/pm4py/statistics/traces/cycle_time/pandas/get.py b/pm4py/pm4py/statistics/traces/cycle_time/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..dade7ef9720ca164fd4412a452284636303db078 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/cycle_time/pandas/get.py @@ -0,0 +1,74 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Dict, Optional, Any, Union + +import pandas as pd + +from pm4py.statistics.traces.cycle_time.util import compute +from pm4py.util import exec_utils, constants, xes_constants + + +class Parameters(Enum): + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +def apply(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Computes the cycle time starting from a Pandas dataframe + + The definition that has been followed is the one proposed in: + https://www.presentationeze.com/presentations/lean-manufacturing-just-in-time/lean-manufacturing-just-in-time-full-details/process-cycle-time-analysis/calculate-cycle-time/#:~:text=Cycle%20time%20%3D%20Average%20time%20between,is%2024%20minutes%20on%20average. + + So: + Cycle time = Average time between completion of units. + + Example taken from the website: + Consider a manufacturing facility, which is producing 100 units of product per 40 hour week. + The average throughput rate is 1 unit per 0.4 hours, which is one unit every 24 minutes. + Therefore the cycle time is 24 minutes on average. + + Parameters + ------------------ + df + Dataframe + parameters + Parameters of the algorithm, including: + - Parameters.START_TIMESTAMP_KEY => the attribute acting as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute acting as timestamp + - Parameters.CASE_ID_KEY => the attribute acting as case identifier + + Returns + ------------------ + cycle_time + Cycle time + """ + if parameters is None: + parameters = {} + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + timestamp_key) + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + + events = [(x[start_timestamp_key].timestamp(), x[timestamp_key].timestamp()) for x in + df[list({start_timestamp_key, timestamp_key})].to_dict("records")] + + return compute.cycle_time(events, df[case_id_key].nunique()) diff --git a/pm4py/pm4py/statistics/traces/cycle_time/util/__init__.py b/pm4py/pm4py/statistics/traces/cycle_time/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6e9e7d334ffb334839d5bbead870d25a7d61ad36 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/cycle_time/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.traces.cycle_time.util import compute diff --git a/pm4py/pm4py/statistics/traces/cycle_time/util/compute.py b/pm4py/pm4py/statistics/traces/cycle_time/util/compute.py new file mode 100644 index 0000000000000000000000000000000000000000..22c3156591f5552f23a7cabba10df9675ce3753e --- /dev/null +++ b/pm4py/pm4py/statistics/traces/cycle_time/util/compute.py @@ -0,0 +1,65 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import List, Tuple + + +def cycle_time(events: List[Tuple[float, float]], num_instances: int) -> float: + """ + Computes the cycle time given a list of events (having a start and a complete timestamp) + and the number of instances of the log + + The definition that has been followed is the one proposed in: + https://www.presentationeze.com/presentations/lean-manufacturing-just-in-time/lean-manufacturing-just-in-time-full-details/process-cycle-time-analysis/calculate-cycle-time/#:~:text=Cycle%20time%20%3D%20Average%20time%20between,is%2024%20minutes%20on%20average. + + So: + Cycle time = Average time between completion of units. + + Example taken from the website: + Consider a manufacturing facility, which is producing 100 units of product per 40 hour week. + The average throughput rate is 1 unit per 0.4 hours, which is one unit every 24 minutes. + Therefore the cycle time is 24 minutes on average. + + Parameters + --------------- + events + List of events (each event is a tuple having the start and the complete timestamp) + num_instances + Number of instances of the log + + Returns + --------------- + cycle_time + Cycle time + """ + events = sorted(events, key=lambda x: (x[0], x[1])) + + st = events[0][0] + et = events[0][1] + + production_time = 0 + + for i in range(1, len(events)): + this_st = events[i][0] + this_et = events[i][1] + + if this_st > et: + production_time += (et - st) + st = this_st + + et = max(et, this_et) + + return production_time / num_instances diff --git a/pm4py/pm4py/statistics/traces/generic/__init__.py b/pm4py/pm4py/statistics/traces/generic/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c9a501593100c63baa8f83218c37f0b2d2861473 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/generic/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.traces.generic import common, log, pandas diff --git a/pm4py/pm4py/statistics/traces/generic/common/__init__.py b/pm4py/pm4py/statistics/traces/generic/common/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..f524d71f0c048f92fcaaf59b42cf59c2b7b6c66f --- /dev/null +++ b/pm4py/pm4py/statistics/traces/generic/common/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.traces.generic.common import case_duration diff --git a/pm4py/pm4py/statistics/traces/generic/common/case_duration.py b/pm4py/pm4py/statistics/traces/generic/common/case_duration.py new file mode 100644 index 0000000000000000000000000000000000000000..19568dbe476191f0a73cf3d48a09e222e6a85cc1 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/generic/common/case_duration.py @@ -0,0 +1,94 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import numpy as np +import json, logging +import importlib.util +from pm4py.util import exec_utils +from enum import Enum + + +class Parameters(Enum): + GRAPH_POINTS = "graph_points" + POINT_TO_SAMPLE = "points_to_sample" + + +def get_kde_caseduration(duration_values, parameters=None): + """ + Gets the estimation of KDE density for the case durations calculated on the log/dataframe + + Parameters + -------------- + duration_values + Values of duration + parameters + Possible parameters of the algorithm, including: + graph_points -> number of points to include in the graph + + Returns + -------------- + x + X-axis values to represent + y + Y-axis values to represent + """ + if importlib.util.find_spec("scipy"): + from scipy.stats import gaussian_kde + + if parameters is None: + parameters = {} + + graph_points = exec_utils.get_param_value(Parameters.GRAPH_POINTS, parameters, 200) + duration_values = sorted(duration_values) + density = gaussian_kde(duration_values) + xs1 = list(np.linspace(min(duration_values), max(duration_values), int(graph_points/2))) + xs2 = list(np.geomspace(max(min(duration_values), 0.001), max(duration_values), int(graph_points/2))) + xs = sorted(xs1 + xs2) + + return [xs, list(density(xs))] + else: + msg = "scipy is not available. graphs cannot be built!" + logging.error(msg) + raise Exception(msg) + + +def get_kde_caseduration_json(duration_values, parameters=None): + """ + Gets the estimation of KDE density for the case durations calculated on the log/dataframe + (expressed as JSON) + + Parameters + -------------- + duration_values + Values of duration + parameters + Possible parameters of the algorithm, including: + graph_points: number of points to include in the graph + + Returns + -------------- + json + JSON representing the graph points + """ + x, y = get_kde_caseduration(duration_values, parameters=parameters) + + ret = [] + for i in range(len(x)): + ret.append((x[i], y[i])) + + return json.dumps(ret) + + diff --git a/pm4py/pm4py/statistics/traces/generic/log/__init__.py b/pm4py/pm4py/statistics/traces/generic/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..81ebddad9b90cf4381f856ad8573de0b6bb8eb9b --- /dev/null +++ b/pm4py/pm4py/statistics/traces/generic/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.traces.generic.log import case_statistics diff --git a/pm4py/pm4py/statistics/traces/generic/log/case_arrival.py b/pm4py/pm4py/statistics/traces/generic/log/case_arrival.py new file mode 100644 index 0000000000000000000000000000000000000000..2679c460459999ac4fa13cd6842879c60337dafe --- /dev/null +++ b/pm4py/pm4py/statistics/traces/generic/log/case_arrival.py @@ -0,0 +1,128 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY +import statistics +from pm4py.util.business_hours import BusinessHours +from pm4py.util import exec_utils, constants +from enum import Enum +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def get_case_arrival_avg(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Gets the average time interlapsed between case starts + + Parameters + -------------- + log + Trace log + parameters + Parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> attribute of the log to be used as timestamp + + Returns + -------------- + case_arrival_avg + Average time interlapsed between case starts + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + + case_start_time = [trace[0][timestamp_key] for trace in log if trace and timestamp_key in trace[0]] + case_start_time = sorted(case_start_time) + + case_diff_start_time = [] + for i in range(len(case_start_time)-1): + if business_hours: + bh = BusinessHours(case_start_time[i], case_start_time[i+1], + business_hour_slots=business_hours_slots, workcalendar=workcalendar) + case_diff_start_time.append(bh.get_seconds()) + else: + case_diff_start_time.append((case_start_time[i+1]-case_start_time[i]).total_seconds()) + + if case_diff_start_time: + return statistics.mean(case_diff_start_time) + + return 0.0 + + +def get_case_dispersion_avg(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Gets the average time interlapsed between case ends + + Parameters + -------------- + log + Trace log + parameters + Parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> attribute of the log to be used as timestamp + + Returns + -------------- + case_dispersion_avg + Average time interlapsed between the completion of cases + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + + case_end_time = [trace[-1][timestamp_key] for trace in log if trace and timestamp_key in trace[0]] + case_end_time = sorted(case_end_time) + + case_diff_end_time = [] + for i in range(len(case_end_time)-1): + if business_hours: + bh = BusinessHours(case_end_time[i], case_end_time[i+1], + business_hour_slots=business_hours_slots, workcalendar=workcalendar) + case_diff_end_time.append(bh.get_seconds()) + else: + case_diff_end_time.append((case_end_time[i+1]-case_end_time[i]).total_seconds()) + + if case_diff_end_time: + return statistics.mean(case_diff_end_time) + + return 0.0 diff --git a/pm4py/pm4py/statistics/traces/generic/log/case_statistics.py b/pm4py/pm4py/statistics/traces/generic/log/case_statistics.py new file mode 100644 index 0000000000000000000000000000000000000000..7ac6bea640b91fad5dc3b798d5edf84ad42ecc07 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/generic/log/case_statistics.py @@ -0,0 +1,366 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.variants.log import get as variants_get +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY +from pm4py.util.xes_constants import DEFAULT_TRACEID_KEY +from pm4py.statistics.traces.generic.common import case_duration as case_duration_commons +from pm4py.util.business_hours import BusinessHours +import numpy as np +from enum import Enum +from pm4py.util import exec_utils +from pm4py.util import constants +from typing import Optional, Dict, Any, Union, List +from pm4py.objects.log.obj import EventLog +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + MAX_VARIANTS_TO_RETURN = "max_variants_to_return" + VARIANTS = "variants" + VAR_DURATIONS = "var_durations" + + ENABLE_SORT = "enable_sort" + SORT_BY_INDEX = "sort_by_index" + SORT_ASCENDING = "sort_ascending" + MAX_RET_CASES = "max_ret_cases" + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + INDEXED_LOG = "indexed_log" + + +def get_variant_statistics(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Union[List[Dict[str, int]], List[Dict[List[str], int]]]: + """ + Gets a dictionary whose key is the variant and as value there + is the list of traces that share the variant + + Parameters + ---------- + log + Log + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Attribute identifying the activity in the log + Parameters.MAX_VARIANTS_TO_RETURN -> Maximum number of variants to return + Parameters.VARIANT -> If provided, avoid recalculation of the variants + + Returns + ---------- + variants_list + List of variants along the statistics + """ + + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + max_variants_to_return = exec_utils.get_param_value(Parameters.MAX_VARIANTS_TO_RETURN, parameters, None) + varnt = exec_utils.get_param_value(Parameters.VARIANTS, parameters, variants_get.get_variants(log, + parameters=parameters)) + var_durations = exec_utils.get_param_value(Parameters.VAR_DURATIONS, parameters, None) + if var_durations is None: + var_durations = {} + variants_list = [] + for var in varnt: + var_el = {"variant": var, "count": len(varnt[var])} + if var in var_durations: + average = np.mean(var_durations[var]) + var_el["caseDuration"] = average + variants_list.append(var_el) + variants_list = sorted(variants_list, key=lambda x: (x["count"], x["variant"]), reverse=True) + if max_variants_to_return: + variants_list = variants_list[:min(len(variants_list), max_variants_to_return)] + return variants_list + + +def get_cases_description(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[str, Dict[str, Any]]: + """ + Get a description of traces present in the log + + Parameters + ----------- + log + Log + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Trace attribute in which the case ID is contained + Parameters.TIMESTAMP_KEY -> Column that identifies the timestamp + Parameters.ENABLE_SORT -> Enable sorting of traces + Parameters.SORT_BY_INDEX -> Sort the traces using this index: + 0 -> case ID + 1 -> start time + 2 -> end time + 3 -> difference + Parameters.SORT_ASCENDING -> Set sort direction (boolean; it true then the sort direction is ascending, otherwise + descending) + Parameters.MAX_RET_CASES -> Set the maximum number of returned traces + + Returns + ----------- + ret + Dictionary of traces associated to their start timestamp, their end timestamp and their duration + """ + + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, DEFAULT_TRACEID_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + enable_sort = exec_utils.get_param_value(Parameters.ENABLE_SORT, parameters, True) + sort_by_index = exec_utils.get_param_value(Parameters.SORT_BY_INDEX, parameters, 0) + sort_ascending = exec_utils.get_param_value(Parameters.SORT_ASCENDING, parameters, True) + max_ret_cases = exec_utils.get_param_value(Parameters.MAX_RET_CASES, parameters, None) + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + statistics_list = [] + + for index, trace in enumerate(log): + if trace: + ci = trace.attributes[case_id_key] if case_id_key in trace.attributes else "EMPTY" + str(index) + st = trace[0][timestamp_key] + et = trace[-1][timestamp_key] + if business_hours: + bh = BusinessHours(st, et, + business_hour_slots=business_hours_slots, workcalendar=workcalendar) + diff = bh.get_seconds() + else: + diff = et.timestamp() - st.timestamp() + st = st.timestamp() + et = et.timestamp() + statistics_list.append([ci, st, et, diff]) + + if enable_sort: + statistics_list = sorted(statistics_list, key=lambda x: x[sort_by_index], reverse=not sort_ascending) + + if max_ret_cases is not None: + statistics_list = statistics_list[:min(len(statistics_list), max_ret_cases)] + + statistics_dict = {} + + for el in statistics_list: + statistics_dict[str(el[0])] = {"startTime": el[1], "endTime": el[2], "caseDuration": el[3]} + + return statistics_dict + + +def index_log_caseid(log, parameters=None): + """ + Index a log according to case ID + + Parameters + ----------- + log + Log object + parameters + Possible parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Trace attribute in which the Case ID is contained + + Returns + ----------- + dict + Dictionary that has the case IDs as keys and the corresponding case as value + """ + + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, DEFAULT_TRACEID_KEY) + indexed_log = {} + + for trace in log: + trace_id = trace.attributes[case_id_key] + indexed_log[trace_id] = trace + + return indexed_log + + +def get_events(log: EventLog, case_id: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[Dict[str, Any]]: + """ + Get events belonging to the specified case + + Parameters + ----------- + log + Log object + case_id + Required case ID + parameters + Possible parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Trace attribute in which the case ID is contained + Parameters.INDEXED_LOG -> Indexed log (if it has been calculated previously) + + Returns + ---------- + list_eve + List of events belonging to the case + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + indexed_log = exec_utils.get_param_value(Parameters.INDEXED_LOG, parameters, index_log_caseid(log, + parameters)) + + list_eve = [] + for event in indexed_log[case_id]: + list_eve.append(dict(event)) + return list_eve + + +def get_all_case_durations(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[float]: + """ + Gets all the case durations out of the log + + Parameters + ------------ + log + Log object + parameters + Possible parameters of the algorithm + + Returns + ------------ + duration_values + List of all duration values + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + cases = get_cases_description(log, parameters=parameters) + duration_values = [x["caseDuration"] for x in cases.values()] + + return sorted(duration_values) + + +def get_first_quartile_case_duration(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Gets the first quartile out of the log + + Parameters + ------------- + log + Log + parameters + Possible parameters of the algorithm + + Returns + ------------- + value + First quartile value + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + duration_values = get_all_case_durations(log, parameters=parameters) + if duration_values: + return duration_values[int((len(duration_values) * 3) / 4)] + return 0 + + +def get_median_case_duration(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None): + """ + Gets the median case duration out of the log + + Parameters + ------------- + log + Log + parameters + Possible parameters of the algorithm + + Returns + ------------- + value + Median duration value + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + duration_values = get_all_case_durations(log, parameters=parameters) + if duration_values: + return duration_values[int(len(duration_values) / 2)] + return 0 + + +def get_kde_caseduration(log, parameters=None): + """ + Gets the estimation of KDE density for the case durations calculated on the log + + Parameters + -------------- + log + Log object + parameters + Possible parameters of the algorithm, including: + Parameters.GRAPH_POINTS -> number of points to include in the graph + + Returns + -------------- + x + X-axis values to represent + y + Y-axis values to represent + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + return case_duration_commons.get_kde_caseduration(get_all_case_durations(log, parameters=parameters), + parameters=parameters) + + +def get_kde_caseduration_json(log, parameters=None): + """ + Gets the estimation of KDE density for the case durations calculated on the log + (expressed as JSON) + + Parameters + -------------- + log + Log object + parameters + Possible parameters of the algorithm, including: + Parameters.GRAPH_POINTS -> number of points to include in the graph + Parameters.CASE_ID_KEY -> Column hosting the Case ID + + Returns + -------------- + json + JSON representing the graph points + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + cases = get_cases_description(log, parameters=parameters) + duration_values = [x["caseDuration"] for x in cases.values()] + + return case_duration_commons.get_kde_caseduration_json(duration_values, parameters=parameters) diff --git a/pm4py/pm4py/statistics/traces/generic/pandas/__init__.py b/pm4py/pm4py/statistics/traces/generic/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..05b08a2710f54e5fd5cfef0d83815b12ae45c485 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/generic/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.traces.generic.pandas import case_arrival diff --git a/pm4py/pm4py/statistics/traces/generic/pandas/case_arrival.py b/pm4py/pm4py/statistics/traces/generic/pandas/case_arrival.py new file mode 100644 index 0000000000000000000000000000000000000000..98faa100c84b87cdbb25bf446313f4caa5e981b7 --- /dev/null +++ b/pm4py/pm4py/statistics/traces/generic/pandas/case_arrival.py @@ -0,0 +1,112 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import pandas as pd + +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.util import exec_utils +from pm4py.util import constants, pandas_utils +from enum import Enum +from typing import Optional, Dict, Any, Union + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def get_case_arrival_avg(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> float: + """ + Gets the average time interlapsed between case starts + + Parameters + -------------- + df + Pandas dataframe + parameters + Parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> attribute of the log to be used as timestamp + + Returns + -------------- + case_arrival_avg + Average time interlapsed between case starts + """ + if parameters is None: + parameters = {} + + caseid_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + timest_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + + first_df = df.groupby(caseid_glue).first() + + first_df = first_df.sort_values(timest_key) + + first_df_shift = first_df.shift(-1) + + first_df_shift.columns = [str(col) + '_2' for col in first_df_shift.columns] + + df_successive_rows = pandas_utils.concat([first_df, first_df_shift], axis=1) + df_successive_rows['interlapsed_time'] = pandas_utils.get_total_seconds(df_successive_rows[timest_key + '_2'] - df_successive_rows[timest_key]) + + df_successive_rows = df_successive_rows.dropna(subset=['interlapsed_time']) + + return df_successive_rows['interlapsed_time'].mean() + + +def get_case_dispersion_avg(df, parameters=None): + """ + Gets the average time interlapsed between case ends + + Parameters + -------------- + df + Pandas dataframe + parameters + Parameters of the algorithm, including: + Parameters.TIMESTAMP_KEY -> attribute of the log to be used as timestamp + + Returns + -------------- + case_dispersion_avg + Average time interlapsed between the completion of cases + """ + if parameters is None: + parameters = {} + + caseid_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + timest_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + + first_df = df.groupby(caseid_glue).last() + + first_df = first_df.sort_values(timest_key) + + first_df_shift = first_df.shift(-1) + + first_df_shift.columns = [str(col) + '_2' for col in first_df_shift.columns] + + df_successive_rows = pandas_utils.concat([first_df, first_df_shift], axis=1) + df_successive_rows['interlapsed_time'] = pandas_utils.get_total_seconds(df_successive_rows[timest_key + '_2'] - df_successive_rows[timest_key]) + + df_successive_rows = df_successive_rows.dropna(subset=['interlapsed_time']) + + return df_successive_rows['interlapsed_time'].mean() diff --git a/pm4py/pm4py/statistics/traces/generic/pandas/case_statistics.py b/pm4py/pm4py/statistics/traces/generic/pandas/case_statistics.py new file mode 100644 index 0000000000000000000000000000000000000000..a0f4fe7e59d3752df07f207afa2c6621354c1dfe --- /dev/null +++ b/pm4py/pm4py/statistics/traces/generic/pandas/case_statistics.py @@ -0,0 +1,449 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple, List + +import pandas as pd + +from pm4py.statistics.traces.generic.common import case_duration as case_duration_commons +from pm4py.util import exec_utils, constants, pandas_utils +from pm4py.util import xes_constants as xes +from pm4py.util.business_hours import soj_time_business_hours_diff +from pm4py.util.constants import CASE_CONCEPT_NAME +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY +from collections import Counter +import importlib.util + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + + MAX_VARIANTS_TO_RETURN = "max_variants_to_return" + VARIANTS_DF = "variants_df" + ENABLE_SORT = "enable_sort" + SORT_BY_COLUMN = "sort_by_column" + SORT_ASCENDING = "sort_ascending" + MAX_RET_CASES = "max_ret_cases" + + BUSINESS_HOURS = "business_hours" + BUSINESS_HOUR_SLOTS = "business_hour_slots" + WORKCALENDAR = "workcalendar" + + +def get_variant_statistics(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Union[ + List[Dict[str, int]], List[Dict[List[str], int]]]: + """ + Get variants from a Pandas dataframe + + Parameters + ----------- + df + Dataframe + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Column that contains the Case ID + Parameters.ACTIVITY_KEY -> Column that contains the activity + Parameters.MAX_VARIANTS_TO_RETURN -> Maximum number of variants to return + variants_df -> If provided, avoid recalculation of the variants dataframe + + Returns + ----------- + variants_list + List of variants inside the Pandas dataframe + """ + if parameters is None: + parameters = {} + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + + max_variants_to_return = exec_utils.get_param_value(Parameters.MAX_VARIANTS_TO_RETURN, parameters, None) + + if importlib.util.find_spec("cudf"): + variants_list = [tuple(x) for x in df.groupby(case_id_glue)[activity_key].agg(list).to_dict().values()] + variants_list = Counter(variants_list) + variants_list = [{"variant": x, case_id_glue: y} for x, y in variants_list.items()] + else: + variants_df = exec_utils.get_param_value(Parameters.VARIANTS_DF, parameters, get_variants_df(df, + parameters=parameters)) + variants_df = variants_df.reset_index() + variants_list = pandas_utils.to_dict_records(variants_df.groupby("variant").agg("count").reset_index()) + + variants_list = sorted(variants_list, key=lambda x: (x[case_id_glue], x["variant"]), reverse=True) + + if max_variants_to_return: + variants_list = variants_list[:min(len(variants_list), max_variants_to_return)] + return variants_list + + +def get_variants_df_and_list(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[ + pd.DataFrame, Union[List[Dict[str, int]], List[Dict[List[str], int]]]]: + """ + (Technical method) Provides variants_df and variants_list out of the box + + Parameters + ------------ + df + Dataframe + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Column that contains the Case ID + Parameters.ACTIVITY_KEY -> Column that contains the activity + + Returns + ------------ + variants_df + Variants dataframe + variants_list + List of variants sorted by their count + """ + if parameters is None: + parameters = {} + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + + variants_df = get_variants_df(df, parameters=parameters) + variants_stats = get_variant_statistics(df, parameters=parameters) + variants_list = [] + for vd in variants_stats: + variant = vd["variant"] + count = vd[case_id_glue] + variants_list.append([variant, count]) + variants_list = sorted(variants_list, key=lambda x: (x[1], x[0]), reverse=True) + return variants_df, variants_list + + +def get_cases_description(df: pd.DataFrame, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Dict[ + str, Dict[str, Any]]: + """ + Get a description of traces present in the Pandas dataframe + + Parameters + ----------- + df + Pandas dataframe + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Column that identifies the case ID + Parameters.TIMESTAMP_KEY -> Column that identifies the timestamp + enable_sort -> Enable sorting of traces + Parameters.SORT_BY_COLUMN -> Sort traces inside the dataframe using the specified column. + Admitted values: startTime, endTime, caseDuration + Parameters.SORT_ASCENDING -> Set sort direction (boolean; it true then the sort direction is ascending, + otherwise descending) + Parameters.MAX_RET_CASES -> Set the maximum number of returned traces + + Returns + ----------- + ret + Dictionary of traces associated to their start timestamp, their end timestamp and their duration + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, None) + if start_timestamp_key is None: + start_timestamp_key = timestamp_key + + enable_sort = exec_utils.get_param_value(Parameters.ENABLE_SORT, parameters, True) + sort_by_column = exec_utils.get_param_value(Parameters.SORT_BY_COLUMN, parameters, "startTime") + sort_ascending = exec_utils.get_param_value(Parameters.SORT_ASCENDING, parameters, True) + max_ret_cases = exec_utils.get_param_value(Parameters.MAX_RET_CASES, parameters, None) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + grouped_df = df[[case_id_glue, timestamp_key]].groupby(case_id_glue) + # grouped_df = df[[case_id_glue, timestamp_key]].groupby(case_id_glue) + first_eve_df = grouped_df.first() + last_eve_df = grouped_df.last() + del grouped_df + last_eve_df.columns = [str(col) + '_2' for col in first_eve_df.columns] + stacked_df = pandas_utils.concat([first_eve_df, last_eve_df], axis=1) + del first_eve_df + del last_eve_df + if case_id_glue in stacked_df.columns: + del stacked_df[case_id_glue] + if case_id_glue + "_2" in stacked_df.columns: + del stacked_df[case_id_glue + "_2"] + + if business_hours: + stacked_df['caseDuration'] = stacked_df.apply( + lambda x: soj_time_business_hours_diff(x[start_timestamp_key], x[timestamp_key + "_2"], business_hours_slots, workcalendar), axis=1) + else: + stacked_df['caseDuration'] = stacked_df[timestamp_key + "_2"] - stacked_df[start_timestamp_key] + stacked_df['caseDuration'] = pandas_utils.get_total_seconds(stacked_df['caseDuration']) + + stacked_df[timestamp_key + "_2"] = stacked_df[timestamp_key + "_2"].astype('int64') // 10 ** 9 + stacked_df[start_timestamp_key] = stacked_df[start_timestamp_key].astype('int64') // 10 ** 9 + stacked_df = stacked_df.rename(columns={start_timestamp_key: 'startTime', timestamp_key + "_2": 'endTime'}) + if enable_sort: + stacked_df = stacked_df.sort_values(sort_by_column, ascending=sort_ascending) + + if max_ret_cases is not None: + stacked_df = stacked_df.head(n=min(max_ret_cases, len(stacked_df))) + ret = pandas_utils.to_dict_index(stacked_df) + return ret + + +def get_variants_df(df, parameters=None): + """ + Get variants dataframe from a Pandas dataframe + + Parameters + ----------- + df + Dataframe + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Column that contains the Case ID + Parameters.ACTIVITY_KEY -> Column that contains the activity + + Returns + ----------- + variants_df + Variants dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + + new_df = df.groupby(case_id_glue, sort=False)[activity_key].agg(tuple).to_frame() + + new_cols = list(new_df.columns) + new_df = new_df.rename(columns={new_cols[0]: "variant"}) + + return new_df + + +def get_variants_df_with_case_duration(df, parameters=None): + """ + Get variants dataframe from a Pandas dataframe, with case duration that is included + + Parameters + ----------- + df + Dataframe + parameters + Parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Column that contains the Case ID + Parameters.ACTIVITY_KEY -> Column that contains the activity + Parameters.TIMESTAMP_KEY -> Column that contains the timestamp + + Returns + ----------- + variants_df + Variants dataframe + """ + if parameters is None: + parameters = {} + + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + + business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False) + business_hours_slots = exec_utils.get_param_value(Parameters.BUSINESS_HOUR_SLOTS, parameters, constants.DEFAULT_BUSINESS_HOUR_SLOTS) + + workcalendar = exec_utils.get_param_value(Parameters.WORKCALENDAR, parameters, constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) + + grouped_df = df[[case_id_glue, timestamp_key, activity_key]].groupby(case_id_glue) + + df1 = grouped_df[activity_key].agg(tuple).to_frame() + new_cols = list(df1.columns) + df1 = df1.rename(columns={new_cols[0]: "variant"}) + + first_eve_df = grouped_df.first() + last_eve_df = grouped_df.last() + del grouped_df + last_eve_df.columns = [str(col) + '_2' for col in first_eve_df.columns] + stacked_df = pandas_utils.concat([first_eve_df, last_eve_df], axis=1) + del first_eve_df + del last_eve_df + if case_id_glue in stacked_df.columns: + del stacked_df[case_id_glue] + if case_id_glue + "_2" in stacked_df.columns: + del stacked_df[case_id_glue + "_2"] + stacked_df['caseDuration'] = stacked_df[timestamp_key + "_2"] - stacked_df[timestamp_key] + stacked_df['caseDuration'] = pandas_utils.get_total_seconds(stacked_df['caseDuration']) + if business_hours: + stacked_df['caseDuration'] = stacked_df.apply( + lambda x: soj_time_business_hours_diff(x[timestamp_key], x[timestamp_key + "_2"], business_hours_slots, workcalendar), axis=1) + else: + stacked_df['caseDuration'] = stacked_df[timestamp_key + "_2"] - stacked_df[timestamp_key] + stacked_df['caseDuration'] = pandas_utils.get_total_seconds(stacked_df['caseDuration']) + new_df = pandas_utils.concat([df1, stacked_df], axis=1) + del df1 + del stacked_df + return new_df + + +def get_events(df: pd.DataFrame, case_id: str, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> List[ + Dict[str, Any]]: + """ + Get events belonging to the specified case + + Parameters + ----------- + df + Pandas dataframe + case_id + Required case ID + parameters + Possible parameters of the algorithm, including: + Parameters.CASE_ID_KEY -> Column in which the case ID is contained + + Returns + ---------- + list_eve + List of events belonging to the case + """ + if parameters is None: + parameters = {} + case_id_glue = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, CASE_CONCEPT_NAME) + + return pandas_utils.to_dict_records(df[df[case_id_glue] == case_id]) + + +def get_kde_caseduration(df, parameters=None): + """ + Gets the estimation of KDE density for the case durations calculated on the dataframe + + Parameters + -------------- + df + Pandas dataframe + parameters + Possible parameters of the algorithm, including: + Parameters.GRAPH_POINTS -> number of points to include in the graph + Parameters.CASE_ID_KEY -> Column hosting the Case ID + + + Returns + -------------- + x + X-axis values to represent + y + Y-axis values to represent + """ + cases = get_cases_description(df, parameters=parameters) + duration_values = [x["caseDuration"] for x in cases.values()] + + return case_duration_commons.get_kde_caseduration(duration_values, parameters=parameters) + + +def get_kde_caseduration_json(df, parameters=None): + """ + Gets the estimation of KDE density for the case durations calculated on the log/dataframe + (expressed as JSON) + + Parameters + -------------- + df + Pandas dataframe + parameters + Possible parameters of the algorithm, including: + Parameters.GRAPH_POINTS -> number of points to include in the graph + Parameters.CASE_ID_KEY -> Column hosting the Case ID + + Returns + -------------- + json + JSON representing the graph points + """ + cases = get_cases_description(df, parameters=parameters) + duration_values = [x["caseDuration"] for x in cases.values()] + + return case_duration_commons.get_kde_caseduration_json(duration_values, parameters=parameters) + + +def get_all_case_durations(df, parameters=None): + """ + Gets all the case durations out of the log + + Parameters + ------------ + df + Pandas dataframe + parameters + Possible parameters of the algorithm + + Returns + ------------ + duration_values + List of all duration values + """ + cd = get_cases_description(df, parameters=parameters) + durations = [y["caseDuration"] for y in cd.values()] + return sorted(durations) + + +def get_first_quartile_case_duration(df, parameters=None): + """ + Gets the first quartile out of the log + + Parameters + ------------- + df + Pandas dataframe + parameters + Possible parameters of the algorithm + + Returns + ------------- + value + First quartile value + """ + if parameters is None: + parameters = {} + + duration_values = get_all_case_durations(df, parameters=parameters) + if duration_values: + return duration_values[int((len(duration_values) * 3) / 4)] + return 0 + + +def get_median_case_duration(df, parameters=None): + """ + Gets the median case duration out of the log + + Parameters + ------------- + df + Pandas dataframe + parameters + Possible parameters of the algorithm + + Returns + ------------- + value + Median duration value + """ + if parameters is None: + parameters = {} + + duration_values = get_all_case_durations(df, parameters=parameters) + if duration_values: + return duration_values[int(len(duration_values) / 2)] + return 0 diff --git a/pm4py/pm4py/statistics/util/__init__.py b/pm4py/pm4py/statistics/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..54a21be4853a0106ff0c2a0ca7f2d82fdd0ccbaa --- /dev/null +++ b/pm4py/pm4py/statistics/util/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.util import times_bipartite_matching + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The statistics.util package will be removed in a future release.") diff --git a/pm4py/pm4py/statistics/util/times_bipartite_matching.py b/pm4py/pm4py/statistics/util/times_bipartite_matching.py new file mode 100644 index 0000000000000000000000000000000000000000..b2abbfb29935daa90090da41e58758d7522ad2c2 --- /dev/null +++ b/pm4py/pm4py/statistics/util/times_bipartite_matching.py @@ -0,0 +1,61 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import nx_utils +import sys + + +def exact_match_minimum_average(l1, l2): + """ + Performs an exact matching, having minimum average, + of two lists of times (a timestamp of the first list + is matched with a timestamp of the second list that + is greater or equal). Some timestamps in the two lists + may be left out of the matching. + + Parameters + --------------- + l1 + First list of times + l2 + Second list of times + + Returns + --------------- + exact_matching + Exact matching (list of tuples having as first element + an element of the first list, and as second element + an element of the second list) + """ + G = nx_utils.Graph() + for i in range(len(l1)): + G.add_node(i) + for j in range(len(l2)): + G.add_node(len(l1) + j) + for i in range(len(l1)): + for j in range(len(l2)): + if l1[i] <= l2[j]: + G.add_edge(i, len(l1) + j, weight=(l2[j] - l1[i])) + else: + G.add_edge(i, len(l1) + j, weight=sys.maxsize) + matching0 = {x: y for x, y in nx_utils.minimum_weight_full_matching(G).items() if x < len(l1)} + matching = [] + for k1, k2 in matching0.items(): + v1 = l1[k1] + v2 = l2[k2 - len(l1)] + if v2 >= v1: + matching.append((v1, v2)) + return matching diff --git a/pm4py/pm4py/statistics/variants/__init__.py b/pm4py/pm4py/statistics/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..41becb18fe707842b98bfcdcca6d3c27290e7190 --- /dev/null +++ b/pm4py/pm4py/statistics/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.variants import log, pandas diff --git a/pm4py/pm4py/statistics/variants/log/__init__.py b/pm4py/pm4py/statistics/variants/log/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7d2a41767924fc084434f50ce715564794794d35 --- /dev/null +++ b/pm4py/pm4py/statistics/variants/log/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.variants.log import get diff --git a/pm4py/pm4py/statistics/variants/log/get.py b/pm4py/pm4py/statistics/variants/log/get.py new file mode 100644 index 0000000000000000000000000000000000000000..39525a2b60a3636112e4db923816231ee3402ab5 --- /dev/null +++ b/pm4py/pm4py/statistics/variants/log/get.py @@ -0,0 +1,219 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any, Union, Tuple, List + +import numpy as np + +from pm4py.objects.log.obj import EventLog, Trace +from pm4py.util import constants +from pm4py.util import exec_utils, variants_util +from pm4py.util.xes_constants import DEFAULT_TIMESTAMP_KEY +from pm4py.objects.conversion.log import converter as log_converter + + +class Parameters(Enum): + ATTRIBUTE_KEY = constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + MAX_NO_POINTS_SAMPLE = "max_no_of_points_to_sample" + KEEP_ONCE_PER_CASE = "keep_once_per_case" + + +def get_language(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Union[ + Dict[List[str], float], Dict[str, float]]: + """ + Gets the stochastic language of the log (from the variants) + + Parameters + -------------- + log + Event log + parameters + Parameters + + Returns + -------------- + dictio + Dictionary containing the stochastic language of the log + (variant associated to a number between 0 and 1; the sum is 1) + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + vars = get_variants(log, parameters=parameters) + vars = {variants_util.get_activities_from_variant(x): len(y) for x, y in vars.items()} + + all_values_sum = sum(vars.values()) + for x in vars: + vars[x] = vars[x] / all_values_sum + return vars + + +def get_variants(log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Union[ + Dict[List[str], List[Trace]], Dict[str, List[Trace]]]: + """ + Gets a dictionary whose key is the variant and as value there + is the list of traces that share the variant + + Parameters + ---------- + log + Trace log + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Attribute identifying the activity in the log + + Returns + ---------- + variant + Dictionary with variant as the key and the list of traces as the value + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + variants_trace_idx = get_variants_from_log_trace_idx(log, parameters=parameters) + + all_var = convert_variants_trace_idx_to_trace_obj(log, variants_trace_idx) + + return all_var + + +def get_variants_along_with_case_durations(log: EventLog, + parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Tuple[ + Union[Dict[List[str], List[Trace]], Dict[str, List[Trace]]], np.array]: + """ + Gets a dictionary whose key is the variant and as value there + is the list of traces that share the variant + + Parameters + ---------- + log + Trace log + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Attribute identifying the activity in the log + + Returns + ---------- + variant + Dictionary with variant as the key and the list of traces as the value + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, DEFAULT_TIMESTAMP_KEY) + + variants_trace_idx = get_variants_from_log_trace_idx(log, parameters=parameters) + all_var = convert_variants_trace_idx_to_trace_obj(log, variants_trace_idx) + + all_durations = {} + + for var in all_var: + all_durations[var] = [] + for trace in all_var[var]: + if trace and timestamp_key in trace[-1] and timestamp_key in trace[0]: + all_durations[var].append((trace[-1][timestamp_key] - trace[0][timestamp_key]).total_seconds()) + else: + all_durations[var].append(0) + all_durations[var] = np.array(all_durations[var]) + + return all_var, all_durations + + +def get_variants_from_log_trace_idx(log, parameters=None): + """ + Gets a dictionary whose key is the variant and as value there + is the list of traces indexes that share the variant + + Parameters + ---------- + log + Log + parameters + Parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Attribute identifying the activity in the log + + Returns + ---------- + variant + Dictionary with variant as the key and the list of traces indexes as the value + """ + if parameters is None: + parameters = {} + + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + + variants = {} + for trace_idx, trace in enumerate(log): + variant = variants_util.get_variant_from_trace(trace, parameters=parameters) + if variant not in variants: + variants[variant] = [] + variants[variant].append(trace_idx) + + return variants + + +def get_variants_sorted_by_count(variants): + """ + From the dictionary of variants returns an ordered list of variants + along with their count + + Parameters + ---------- + variants + Dictionary with variant as the key and the list of traces as the value + + Returns + ---------- + var_count + List of variant names along with their count + """ + var_count = [] + for variant in variants: + var_count.append([variant, len(variants[variant])]) + var_count = sorted(var_count, key=lambda x: (x[1], x[0]), reverse=True) + return var_count + + +def convert_variants_trace_idx_to_trace_obj(log, variants_trace_idx): + """ + Converts variants expressed as trace indexes to trace objects + + Parameters + ----------- + log + Trace log object + variants_trace_idx + Variants associated to a list of belonging indexes + + Returns + ----------- + variants + Variants associated to a list of belonging traces + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG) + + variants = {} + + for key in variants_trace_idx: + variants[key] = [] + for value in variants_trace_idx[key]: + variants[key].append(log[value]) + + return variants diff --git a/pm4py/pm4py/statistics/variants/pandas/__init__.py b/pm4py/pm4py/statistics/variants/pandas/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..94e53c8f18c9bad4834829ed4d9be94e8e8bd925 --- /dev/null +++ b/pm4py/pm4py/statistics/variants/pandas/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.statistics.variants.pandas import get diff --git a/pm4py/pm4py/statistics/variants/pandas/get.py b/pm4py/pm4py/statistics/variants/pandas/get.py new file mode 100644 index 0000000000000000000000000000000000000000..abe70767f94b9828ce11ad6506a4760c5efb9ad3 --- /dev/null +++ b/pm4py/pm4py/statistics/variants/pandas/get.py @@ -0,0 +1,72 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any, Union, List, Set + +import pandas as pd + +from pm4py.objects.log.util import pandas_numpy_variants + + +def get_variants_count(df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> Union[ + Dict[str, int], Dict[List[str], int]]: + """ + Gets the dictionary of variants from the current dataframe + + Parameters + -------------- + df + Dataframe + parameters + Possible parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Column that contains the activity + + Returns + -------------- + variants_set + Dictionary of variants in the log + """ + if parameters is None: + parameters = {} + + variants_counter, case_variant = pandas_numpy_variants.apply(df, parameters=parameters) + + return variants_counter + + +def get_variants_set(df: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None) -> Union[Set[str], Set[List[str]]]: + """ + Gets the set of variants from the current dataframe + + Parameters + -------------- + df + Dataframe + parameters + Possible parameters of the algorithm, including: + Parameters.ACTIVITY_KEY -> Column that contains the activity + + Returns + -------------- + variants_set + Set of variants in the log + """ + if parameters is None: + parameters = {} + + variants_dict = get_variants_count(df, parameters=parameters) + + return set(variants_dict.keys()) diff --git a/pm4py/pm4py/stats.py b/pm4py/pm4py/stats.py new file mode 100644 index 0000000000000000000000000000000000000000..2644415fd303dfa7e4a9ca087d51790c7aa91cf6 --- /dev/null +++ b/pm4py/pm4py/stats.py @@ -0,0 +1,790 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.stats`` module contains the statistics offered in ``pm4py`` +""" + +from typing import Dict, Union, List, Tuple, Collection, Iterator +from typing import Set, Optional +from typing import Counter as TCounter +from collections import Counter + +import pandas as pd + +from pm4py.objects.log.obj import EventLog, Trace, EventStream +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns, insert_ev_in_tr_index +from pm4py.utils import get_properties, __event_log_deprecation_warning +from pm4py.util import constants, pandas_utils +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.objects.process_tree.obj import ProcessTree +import deprecation + + +def get_start_activities(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[str, int]: + """ + Returns the start activities from a log object + + :param log: Log object + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, int]`` + + .. code-block:: python3 + + import pm4py + + start_activities = pm4py.get_start_activities(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.statistics.start_activities.pandas import get + return get.get_start_activities(log, parameters=properties) + else: + from pm4py.statistics.start_activities.log import get + return get.get_start_activities(log, parameters=properties) + + +def get_end_activities(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[str, int]: + """ + Returns the end activities of a log + + :param log: Log object + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, int]`` + + .. code-block:: python3 + + import pm4py + + end_activities = pm4py.get_end_activities(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.statistics.end_activities.pandas import get + return get.get_end_activities(log, parameters=properties) + else: + from pm4py.statistics.end_activities.log import get + return get.get_end_activities(log, parameters=properties) + + +def get_event_attributes(log: Union[EventLog, pd.DataFrame]) -> List[str]: + """ + Returns the attributes at the event level of the log + + :param log: Log object + :rtype: ``List[str]`` + + .. code-block:: python3 + + import pm4py + + event_attributes = pm4py.get_event_attributes(dataframe) + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log) + return list(log.columns) + else: + from pm4py.statistics.attributes.log import get + return list(get.get_all_event_attributes_from_log(log)) + + +def get_trace_attributes(log: Union[EventLog, pd.DataFrame]) -> List[str]: + """ + Gets the attributes at the trace level of a log object + + :param log: Log object + :rtype: ``List[str]`` + + .. code-block:: python3 + + import pm4py + + trace_attributes = pm4py.get_trace_attributes(dataframe) + """ + __event_log_deprecation_warning(log) + + from pm4py.util import constants + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log) + return [x for x in list(log.columns) if x.startswith(constants.CASE_ATTRIBUTE_PREFIX)] + else: + from pm4py.statistics.attributes.log import get + return list(get.get_all_trace_attributes_from_log(log)) + + +def get_event_attribute_values(log: Union[EventLog, pd.DataFrame], attribute: str, count_once_per_case=False, case_id_key: str = "case:concept:name") -> Dict[str, int]: + """ + Returns the values for a specified (event) attribute + + :param log: Log object + :param attribute: attribute + :param count_once_per_case: If True, consider only an occurrence of the given attribute value inside a case (if there are multiple events sharing the same attribute value, count only 1 occurrence) + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, int]`` + + .. code-block:: python3 + + import pm4py + + activities = pm4py.get_event_attribute_values(dataframe, 'concept:name', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, case_id_key=case_id_key) + parameters["keep_once_per_case"] = count_once_per_case + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, case_id_key=case_id_key) + from pm4py.statistics.attributes.pandas import get + return get.get_attribute_values(log, attribute, parameters=parameters) + else: + from pm4py.statistics.attributes.log import get + return get.get_attribute_values(log, attribute, parameters=parameters) + + +def get_trace_attribute_values(log: Union[EventLog, pd.DataFrame], attribute: str, case_id_key: str = "case:concept:name") -> Dict[str, int]: + """ + Returns the values for a specified trace attribute + + :param log: Log object + :param attribute: Attribute + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, int]`` + + .. code-block:: python3 + + import pm4py + + tr_attr_values = pm4py.get_trace_attribute_values(dataframe, 'case:attribute', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + parameters = get_properties(log, case_id_key=case_id_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, case_id_key=case_id_key) + from pm4py.statistics.attributes.pandas import get + if attribute not in log and constants.CASE_ATTRIBUTE_PREFIX + attribute in log: + # if "attribute" does not exist as column, but "case:attribute" exists, then use that + attribute = constants.CASE_ATTRIBUTE_PREFIX + attribute + ret = get.get_attribute_values(log, attribute, parameters=parameters) + return ret + else: + from pm4py.statistics.attributes.log import get + ret = get.get_trace_attribute_values(log, attribute, parameters=parameters) + + if not ret: + # if the provided attribute does not exist, but starts with "case:", try to get the attribute values + # removing the "case:" at the beginning + if attribute.startswith(constants.CASE_ATTRIBUTE_PREFIX): + attribute = attribute.split(constants.CASE_ATTRIBUTE_PREFIX)[-1] + ret = get.get_trace_attribute_values(log, attribute, parameters=parameters) + + return ret + + +def get_variants(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[Dict[Tuple[str], List[Trace]], Dict[Tuple[str], int]]: + """ + Gets the variants from the log + + :param log: Event log + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[Tuple[str], List[Trace]]`` + + .. code-block:: python3 + + import pm4py + + variants = pm4py.get_variants(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + return get_variants_as_tuples(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + +def get_variants_as_tuples(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Union[Dict[Tuple[str], List[Trace]], Dict[Tuple[str], int]]: + """ + Gets the variants from the log (where the keys are tuples and not strings) + + :param log: Event log + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[Tuple[str], List[Trace]]`` + + .. code-block:: python3 + + import pm4py + + variants = pm4py.get_variants_as_tuples(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.statistics.variants.pandas import get + return get.get_variants_count(log, parameters=properties) + else: + from pm4py.statistics.variants.log import get + return get.get_variants(log, parameters=properties) + + +def split_by_process_variant(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", + timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", + variant_column: str = "@@variant_column", + index_in_trace_column: str = "@@index_in_trace") -> Iterator[ + Tuple[Collection[str], pd.DataFrame]]: + """ + Splits an event log into sub-dataframes for each process variant. + The result is an iterator over the variants along with the sub-dataframes. + + :param log: Event log + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param variant_column: name of the utility column that stores the variant's tuple + :param index_in_trace_column: name of the utility column that stores the index of the event in the case + :rtype: ``Iterator[Tuple[Collection[str], pd.DataFrame]]`` + + .. code-block:: python3 + + import pandas as pd + import pm4py + + dataframe = pd.read_csv('tests/input_data/receipt.csv') + dataframe = pm4py.format_dataframe(dataframe) + for variant, subdf in pm4py.split_by_process_variant(dataframe): + print(variant) + print(subdf) + """ + __event_log_deprecation_warning(log) + + import pm4py + log = pm4py.convert_to_dataframe(log) + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.util import pandas_utils + log = pandas_utils.insert_ev_in_tr_index(log, case_id=case_id_key, column_name=index_in_trace_column) + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.objects.log.util import pandas_numpy_variants + variants_dict, case_variant = pandas_numpy_variants.apply(log, parameters=properties) + + log[variant_column] = log[case_id_key].map(case_variant) + + for variant, filtered_log in log.groupby(variant_column, sort=False): + yield variant, filtered_log + + +def get_variants_paths_duration(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", + timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", + variant_column: str = "@@variant_column", + variant_count: str = "@@variant_count", + index_in_trace_column: str = "@@index_in_trace", + cumulative_occ_path_column: str = "@@cumulative_occ_path_column", + times_agg: str = "mean") -> pd.DataFrame: + """ + Method that associates to a log object a Pandas dataframe aggregated by variants and positions (inside the variant). + Each row is associated to different columns: + - The variant + - The position (in the variant) + - The source activity (of the path) + - The target activity (of the path) + - An aggregation of the times between the two activities (for example, the mean over all the cases of the same variant) + - The cumulative occurrences of the path inside the case (for example, the first A->B would be associated to 0, + and the second A->B would be associated to 1) + + :param log: Event log + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param variant_column: name of the utility column that stores the variant's tuple + :param variant_count: name of the utility column that stores the variant's number of occurrences + :param index_in_trace_column: name of the utility column that stores the index of the event in the case + :param cumulative_occ_path_column: name of the column that stores the cumulative occurrences of the path inside the case + :param times_agg: aggregation (mean, median) to be used + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pandas as pd + import pm4py + + dataframe = pd.read_csv('tests/input_data/receipt.csv') + dataframe = pm4py.format_dataframe(dataframe) + + var_paths_durs = pm4py.get_variants_paths_duration(dataframe) + print(var_paths_durs) + """ + __event_log_deprecation_warning(log) + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + list_to_concat = [] + for variant, filtered_log in split_by_process_variant(log, activity_key=activity_key, timestamp_key=timestamp_key, + case_id_key=case_id_key, variant_column=variant_column, + index_in_trace_column=index_in_trace_column): + from pm4py.statistics.eventually_follows.pandas import get as eventually_follows + dir_follo_dataframe = eventually_follows.get_partial_order_dataframe(filtered_log.copy(), activity_key=activity_key, + timestamp_key=timestamp_key, + case_id_glue=case_id_key, + sort_caseid_required=False, + sort_timestamp_along_case_id=False, + reduce_dataframe=False) + dir_follo_dataframe[cumulative_occ_path_column] = dir_follo_dataframe.groupby( + [case_id_key, activity_key, activity_key + "_2"]).cumcount() + dir_follo_dataframe = dir_follo_dataframe[ + [index_in_trace_column, constants.DEFAULT_FLOW_TIME, cumulative_occ_path_column]].groupby( + index_in_trace_column).agg( + {constants.DEFAULT_FLOW_TIME: times_agg, cumulative_occ_path_column: 'min'}).reset_index() + dir_follo_dataframe[activity_key] = dir_follo_dataframe[index_in_trace_column].apply(lambda x: variant[x]) + dir_follo_dataframe[activity_key + "_2"] = dir_follo_dataframe[index_in_trace_column].apply( + lambda x: variant[x + 1]) + dir_follo_dataframe[variant_column] = dir_follo_dataframe[index_in_trace_column].apply(lambda x: variant) + dir_follo_dataframe[variant_count] = filtered_log[case_id_key].nunique() + + list_to_concat.append(dir_follo_dataframe) + + dataframe = pandas_utils.concat(list_to_concat) + dataframe[index_in_trace_column] = -dataframe[index_in_trace_column] + dataframe = dataframe.sort_values([variant_count, variant_column, index_in_trace_column], ascending=False) + dataframe[index_in_trace_column] = -dataframe[index_in_trace_column] + + return dataframe + +def get_stochastic_language(*args, **kwargs) -> Dict[List[str], float]: + """ + Gets the stochastic language from the provided object + + :param args: Pandas dataframe / event log / accepting Petri net / process tree + :param kwargs: keyword arguments + :rtype: ``Dict[List[str], float]`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/running-example.xes') + language_log = pm4py.get_stochastic_language(log) + print(language_log) + net, im, fm = pm4py.read_pnml('tests/input_data/running-example.pnml') + language_model = pm4py.get_stochastic_language(net, im, fm) + print(language_model) + """ + from pm4py.statistics.variants.log import get + if isinstance(args[0], EventLog) or isinstance(args[0], EventStream) or pandas_utils.check_is_pandas_dataframe(args[0]): + from pm4py.objects.conversion.log import converter as log_converter + log = log_converter.apply(args[0]) + return get.get_language(log) + elif isinstance(args[0], PetriNet) or isinstance(args[0], ProcessTree) or isinstance(args[0], dict): + import pm4py + log = pm4py.play_out(*args, **kwargs) + return get.get_language(log) + else: + raise Exception("unsupported input") + + +def get_minimum_self_distances(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[str, int]: + ''' + This algorithm computes the minimum self-distance for each activity observed in an event log. + The self distance of a in is infinity, of a in is 0, in is 1, etc. + The minimum self distance is the minimal observed self distance value in the event log. + + :param log: event log (either pandas.DataFrame, EventLog or EventStream) + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, int]`` + + .. code-block:: python3 + + import pm4py + + msd = pm4py.get_minimum_self_distances(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + ''' + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.discovery.minimum_self_distance import algorithm as msd_algo + return msd_algo.apply(log, parameters=properties) + + +def get_minimum_self_distance_witnesses(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[str, Set[str]]: + """ + This function derives the minimum self distance witnesses. + The self distance of a in is infinity, of a in is 0, in is 1, etc. + The minimum self distance is the minimal observed self distance value in the event log. + A 'witness' is an activity that witnesses the minimum self distance. + For example, if the minimum self distance of activity a in some log L is 2, then, + if trace is in log L, b and c are a witness of a. + + :param log: Event Log to use + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, Set[str]]`` + + .. code-block:: python3 + + import pm4py + + msd_wit = pm4py.get_minimum_self_distance_witnesses(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + from pm4py.algo.discovery.minimum_self_distance import algorithm as msd_algo + from pm4py.algo.discovery.minimum_self_distance import utils as msdw_algo + return msdw_algo.derive_msd_witnesses(log, msd_algo.apply(log, parameters=get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key))) + + +def get_case_arrival_average(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> float: + """ + Gets the average difference between the start times of two consecutive cases + + :param log: log object + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + case_arr_avg = pm4py.get_case_arrival_average(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.statistics.traces.generic.pandas import case_arrival + return case_arrival.get_case_arrival_avg(log, parameters=properties) + else: + from pm4py.statistics.traces.generic.log import case_arrival + return case_arrival.get_case_arrival_avg(log, parameters=properties) + + +def get_rework_cases_per_activity(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[str, int]: + """ + Find out for which activities of the log the rework (more than one occurrence in the trace for the activity) + occurs. + The output is a dictionary associating to each of the aforementioned activities + the number of cases for which the rework occurred. + + :param log: Log object + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, int]`` + + .. code-block:: python3 + + import pm4py + + rework = pm4py.get_rework_cases_per_activity(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.statistics.rework.pandas import get as rework_get + return rework_get.apply(log, parameters=properties) + else: + from pm4py.statistics.rework.log import get as rework_get + return rework_get.apply(log, parameters=properties) + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="the get_case_overlap function will be removed in a future release.") +def get_case_overlap(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> List[int]: + """ + Associates to each case in the log the number of cases concurrently open + + :param log: Log object + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``List[int]`` + + .. code-block:: python3 + + import pm4py + + overlap = pm4py.get_case_overlap(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.statistics.overlap.cases.pandas import get as cases_overlap + return cases_overlap.apply(log, parameters=properties) + else: + from pm4py.statistics.overlap.cases.log import get as cases_overlap + return cases_overlap.apply(log, parameters=properties) + + +def get_cycle_time(log: Union[EventLog, pd.DataFrame], activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> float: + """ + Calculates the cycle time of the event log. + + The definition that has been followed is the one proposed in: + https://www.presentationeze.com/presentations/lean-manufacturing-just-in-time/lean-manufacturing-just-in-time-full-details/process-cycle-time-analysis/calculate-cycle-time/#:~:text=Cycle%20time%20%3D%20Average%20time%20between,is%2024%20minutes%20on%20average. + + So: + Cycle time = Average time between completion of units. + + Example taken from the website: + Consider a manufacturing facility, which is producing 100 units of product per 40 hour week. + The average throughput rate is 1 unit per 0.4 hours, which is one unit every 24 minutes. + Therefore the cycle time is 24 minutes on average. + + :param log: Log object + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + cycle_time = pm4py.get_cycle_time(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.statistics.traces.cycle_time.pandas import get as cycle_time + return cycle_time.apply(log, parameters=properties) + else: + from pm4py.statistics.traces.cycle_time.log import get as cycle_time + return cycle_time.apply(log, parameters=properties) + + +def get_service_time(log: Union[EventLog, pd.DataFrame], aggregation_measure: str = "mean", activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", start_timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[str, float]: + """ + Gets the activities' (average/median/...) service time in the provided event log + + :param log: event log + :param aggregation_measure: the aggregation to be used (mean, median, min, max, sum) + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param start_timestamp_key: attribute to be used for the start timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[str, float]`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/interval_event_log.xes') + mean_serv_time = pm4py.get_service_time(log, start_timestamp_key='start_timestamp', aggregation_measure='mean') + print(mean_serv_time) + median_serv_time = pm4py.get_service_time(log, start_timestamp_key='start_timestamp', aggregation_measure='median') + print(median_serv_time) + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key, start_timestamp_key=start_timestamp_key) + properties["aggregationMeasure"] = aggregation_measure + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key, start_timestamp_key=start_timestamp_key) + from pm4py.statistics.service_time.pandas import get as serv_time_get + return serv_time_get.apply(log, parameters=properties) + else: + from pm4py.statistics.service_time.log import get as serv_time_get + return serv_time_get.apply(log, parameters=properties) + + +def get_all_case_durations(log: Union[EventLog, pd.DataFrame], business_hours: bool = False, business_hour_slots=constants.DEFAULT_BUSINESS_HOUR_SLOTS, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> List[float]: + """ + Gets the durations of the cases in the event log + + :param log: Event log + :param business_hours: Enables/disables the computation based on the business hours (default: False) + :param business_hour_slots: work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. [(7 * 60 * 60, 17 * 60 * 60), ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60),] meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``List[float]`` + + .. code-block:: python3 + + import pm4py + + case_durations = pm4py.get_all_case_durations(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + properties["business_hours"] = business_hours + properties["business_hour_slots"] = business_hour_slots + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.statistics.traces.generic.pandas import case_statistics + cd = case_statistics.get_cases_description(log, parameters=properties) + return sorted([x["caseDuration"] for x in cd.values()]) + else: + from pm4py.statistics.traces.generic.log import case_statistics + return case_statistics.get_all_case_durations(log, parameters=properties) + + +def get_case_duration(log: Union[EventLog, pd.DataFrame], case_id: str, business_hours: bool = False, business_hour_slots=constants.DEFAULT_BUSINESS_HOUR_SLOTS, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: Optional[str] = None) -> float: + """ + Gets the duration of a specific case + + :param log: Event log + :param case_id: Case identifier + :param business_hours: Enables/disables the computation based on the business hours (default: False) + :param business_hour_slots: work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. [(7 * 60 * 60, 17 * 60 * 60), ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60),] meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``float`` + + .. code-block:: python3 + + import pm4py + + duration = pm4py.get_case_duration(dataframe, 'case 1', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + properties = get_properties(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + properties["business_hours"] = business_hours + properties["business_hour_slots"] = business_hour_slots + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + from pm4py.statistics.traces.generic.pandas import case_statistics + cd = case_statistics.get_cases_description(log, parameters=properties) + return cd[case_id]["caseDuration"] + else: + from pm4py.statistics.traces.generic.log import case_statistics + cd = case_statistics.get_cases_description(log, parameters=properties) + return cd[case_id]["caseDuration"] + + +def get_frequent_trace_segments(log: Union[EventLog, pd.DataFrame], min_occ: int, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> TCounter: + """ + Get the traces (segments of activities) from an event log object. + Each trace is preceded and followed by "...", reminding that the trace/segment + can be preceded and followed by any other set of activities. + + :param log: event log + :param min_occ: minimum number of occurrence of a trace in order to be included + :param activity_key: the attribute to be used as activity + :param timestamp_key: the attribute to be used as timestamp + :param case_id_key: the attribute to be used as case identifier (for Pandas dataframes) + :rtype: ``TCounter`` + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes("tests/input_data/receipt.xes") + traces = pm4py.get_frequent_trace_segments(log, min_occ=100) + print(traces) + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + + import pm4py.utils + from prefixspan import PrefixSpan + + projection = pm4py.utils.project_on_event_attribute(log, attribute_key=activity_key, case_id_key=case_id_key) + traces0 = PrefixSpan(projection).frequent(min_occ) + traces = {} + for x in traces0: + trace = ["..."] + for i in range(len(x[1])): + if i > 0: + trace.append("...") + trace.append(x[1][i]) + trace.append("...") + trace = tuple(trace) + traces[trace] = x[0] + traces = Counter(traces) + + return traces + + +def get_activity_position_summary(log: Union[EventLog, pd.DataFrame], activity: str, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name") -> Dict[int, int]: + """ + Given an event log, returns a dictionary which summarize the positions + of the activities in the different cases of the event log. + E.g., if an activity happens 1000 times in the position 1 (the second event of a case), + and 500 times in the position 2 (the third event of a case), then the returned dictionary would be: + {1: 1000, 2: 500} + + :param log: Event log object / Pandas dataframe + :param activity: Activity to consider + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :rtype: ``Dict[int, int]`` + + .. code-block:: python3 + + import pm4py + + act_pos = pm4py.get_activity_position_summary(dataframe, 'Act. A', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, timestamp_key=timestamp_key, case_id_key=case_id_key) + log = insert_ev_in_tr_index(log, case_id_key, "@@index_in_trace") + ret = log[log[activity_key] == activity]["@@index_in_trace"].value_counts().to_dict() + return ret + else: + ret = Counter() + for trace in log: + for i in range(len(trace)): + this_act = trace[i][activity_key] + if this_act == activity: + ret[i] += 1 + return dict(ret) diff --git a/pm4py/pm4py/streaming/__init__.py b/pm4py/pm4py/streaming/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7e4ef3208b405def8631fb3abbf818cb7c6604ee --- /dev/null +++ b/pm4py/pm4py/streaming/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming import algo, stream, importer, util, conversion diff --git a/pm4py/pm4py/streaming/algo/__init__.py b/pm4py/pm4py/streaming/algo/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1f689e62573da93701fb046c3dbd1efba26018ad --- /dev/null +++ b/pm4py/pm4py/streaming/algo/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo import conformance, discovery, interface \ No newline at end of file diff --git a/pm4py/pm4py/streaming/algo/conformance/__init__.py b/pm4py/pm4py/streaming/algo/conformance/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..46c50112f4c48faae410134a63a930ed6e173cb0 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.conformance import footprints, tbr, temporal diff --git a/pm4py/pm4py/streaming/algo/conformance/footprints/__init__.py b/pm4py/pm4py/streaming/algo/conformance/footprints/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7f20c7736d16865d61f9290f7d4b855865ac5984 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/footprints/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.conformance.footprints import algorithm, variants diff --git a/pm4py/pm4py/streaming/algo/conformance/footprints/algorithm.py b/pm4py/pm4py/streaming/algo/conformance/footprints/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..d88ab1e2098ba1d0abdcb6b589fd91f88dc0c012 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/footprints/algorithm.py @@ -0,0 +1,44 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils +from pm4py.streaming.algo.conformance.footprints.variants import classic + + +class Variants(Enum): + CLASSIC = classic + + +def apply(footprints, variant=Variants.CLASSIC, parameters=None): + """ + Gets a footprints conformance checking object + + Parameters + -------------- + footprints + Footprints object (calculated from an entire log, from a process tree ...) + variant + Variant of the algorithm. Possible values: Variants.CLASSIC + parameters + Parameters of the algorithm + + Returns + -------------- + fp_check_obj + Footprints conformance checking object + """ + return exec_utils.get_variant(variant).apply(footprints, parameters=parameters) diff --git a/pm4py/pm4py/streaming/algo/conformance/footprints/variants/__init__.py b/pm4py/pm4py/streaming/algo/conformance/footprints/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0d4c20671d0ec313b8fcdc9d838706f26b9729f1 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/footprints/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.conformance.footprints.variants import classic diff --git a/pm4py/pm4py/streaming/algo/conformance/footprints/variants/classic.py b/pm4py/pm4py/streaming/algo/conformance/footprints/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..9342c5324ecc174fc1cd66a6dee667a9afe7f750 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/footprints/variants/classic.py @@ -0,0 +1,336 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import constants, exec_utils, xes_constants, pandas_utils +from pm4py.streaming.util.dictio import generator +from pm4py.streaming.algo.interface import StreamingAlgorithm +import logging +from copy import copy + + +class Parameters: + DICT_VARIANT = "dict_variant" + DICT_ID = "dict_id" + CASE_DICT_ID = "case_dict_id" + DEV_DICT_ID = "dev_dict_id" + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + + +START_ACTIVITIES = "start_activities" +END_ACTIVITIES = "end_activities" +ACTIVITIES = "activities" +SEQUENCE = "sequence" +PARALLEL = "parallel" + + +class FootprintsStreamingConformance(StreamingAlgorithm): + def __init__(self, footprints, parameters=None): + """ + Initialize the footprints streaming conformance object + + Parameters + --------------- + footprints + Footprints + parameters + Parameters of the algorithm + """ + self.footprints = footprints + self.case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + self.activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, + xes_constants.DEFAULT_NAME_KEY) + self.start_activities = footprints[START_ACTIVITIES] + self.end_activities = footprints[END_ACTIVITIES] + self.activities = footprints[ACTIVITIES] + self.all_fps = set(footprints[SEQUENCE]).union(set(footprints[PARALLEL])) + self.build_dictionaries(parameters=parameters) + StreamingAlgorithm.__init__(self) + + def build_dictionaries(self, parameters): + """ + Builds the dictionaries needed to store the information during the replay + + Parameters + --------------- + parameters + Parameters: + - Parameters.DICT_VARIANT: type of dictionary to use + - Parameters.CASE_DICT_ID: identifier of the dictionary hosting the last activity of a case (1) + - Parameters.DEV_DICT_ID: identifier of the dictionary hosting the deviations (2) + """ + dict_variant = exec_utils.get_param_value(Parameters.DICT_VARIANT, parameters, generator.Variants.THREAD_SAFE) + case_dict_id = exec_utils.get_param_value(Parameters.CASE_DICT_ID, parameters, 0) + dev_dict_id = exec_utils.get_param_value(Parameters.DEV_DICT_ID, parameters, 1) + parameters_case_dict = copy(parameters) + parameters_case_dict[Parameters.DICT_ID] = case_dict_id + parameters_dev_dict = copy(parameters) + parameters_dev_dict[Parameters.DICT_ID] = dev_dict_id + self.case_dict = generator.apply(variant=dict_variant, parameters=parameters_case_dict) + self.dev_dict = generator.apply(variant=dict_variant, parameters=parameters_dev_dict) + + def encode_str(self, stru): + """ + Encodes a string for storage in generic dictionaries + """ + return str(stru) + + def _process(self, event): + """ + Check an event and updates the case dictionary + + Parameters + ---------------- + event + Event (dictionary) + """ + case = event[self.case_id_key] if self.case_id_key in event else None + activity = event[self.activity_key] if self.activity_key in event else None + if case is not None and activity is not None: + self.verify_footprints(self.encode_str(case), self.encode_str(activity)) + else: + self.message_case_or_activity_not_in_event(event) + + def verify_footprints(self, case, activity): + """ + Verify the event according to the footprints + (assuming it has a case and an activity) + + Parameters + ---------------- + case + Case ID + activity + Activity + """ + if case not in self.case_dict.keys(): + self.dev_dict[case] = 0 + if activity in self.activities: + if case not in self.case_dict.keys(): + self.verify_start_case(case, activity) + else: + self.verify_intra_case(case, activity) + self.case_dict[case] = activity + else: + self.dev_dict[case] = int(self.dev_dict[case]) + 1 + self.message_activity_not_possible(activity, case) + + def verify_intra_case(self, case, activity): + """ + Verify the footprints of the current event + + Parameters + ---------------- + case + Case + activity + Activity + """ + prev = self.case_dict[case] + df = (prev, activity) + if df not in self.all_fps: + self.dev_dict[case] = int(self.dev_dict[case]) + 1 + self.message_footprints_not_possible(df, case) + + def verify_start_case(self, case, activity): + """ + Verify the start activity of a case + + Parameters + --------------- + case + Case + activity + Activity + """ + if activity not in self.start_activities: + self.dev_dict[case] = int(self.dev_dict[case]) + 1 + self.message_start_activity_not_possible(activity, case) + + def get_status(self, case): + """ + Gets the current status of a case + + Parameters + ----------------- + case + Case + + Returns + ----------------- + boolean + Boolean value (True if there are no deviations) + """ + if case in self.case_dict.keys(): + num_dev = int(self.dev_dict[case]) + if num_dev == 0: + return True + else: + return False + else: + self.message_case_not_in_dictionary(case) + + def terminate(self, case): + """ + Terminate a case (checking its end activity) + + Parameters + ----------------- + case + Case + + Returns + ----------------- + boolean + Boolean value (True if there are no deviations) + """ + if case in self.case_dict.keys(): + curr = self.case_dict[case] + if curr not in self.end_activities: + self.message_end_activity_not_possible(curr, case) + self.dev_dict[case] = int(self.dev_dict[case]) + 1 + num_dev = int(self.dev_dict[case]) + del self.case_dict[case] + del self.dev_dict[case] + if num_dev == 0: + return True + else: + return False + else: + self.message_case_not_in_dictionary(case) + + def terminate_all(self): + """ + Terminate all cases + """ + cases = list(self.case_dict.keys()) + for case in cases: + self.terminate(case) + + def message_case_or_activity_not_in_event(self, event): + """ + Sends a message if the case or the activity are not + there in the event + """ + logging.error("case or activities are none! " + str(event)) + + def message_activity_not_possible(self, activity, case): + """ + Sends a message if the activity is not contained in the footprints + + Parameters + -------------- + activity + Activity + case + Case + """ + logging.error( + "the activity " + str(activity) + " is not possible according to the footprints! case: " + str(case)) + + def message_footprints_not_possible(self, df, case): + """ + Sends a message if the directly-follows between two activities is + not possible + + Parameters + --------------- + df + Directly-follows relations + case + Case + """ + logging.error("the footprints " + str(df) + " are not possible! case: " + str(case)) + + def message_start_activity_not_possible(self, activity, case): + """ + Sends a message if the activity is not a possible start activity + + Parameters + --------------- + activity + Activity + case + Case + """ + logging.error("the activity " + str(activity) + " is not a possible start activity! case: " + str(case)) + + def message_end_activity_not_possible(self, activity, case): + """ + Sends a message if the activity is not a possible end activity + + Parameters + ---------------- + activity + Activity + case + Case + """ + logging.error("the activity " + str(activity) + " is not a possible end activity! case: " + str(case)) + + def message_case_not_in_dictionary(self, case): + """ + Sends a message if the case is not in the current dictionary + + Parameters + ---------------- + case + Case + """ + logging.error("the case " + str(case) + " is not in the dictionary! case: " + str(case)) + + def _current_result(self): + """ + Gets a diagnostics dataframe with the status of the cases + + Returns + ------- + diagn_df + Diagnostics dataframe + """ + import pandas as pd + + cases = list(self.case_dict.keys()) + + diagn_stream = [] + + for case in cases: + status = self.get_status(case) + diagn_stream.append({"case": case, "is_fit": status}) + + return pandas_utils.instantiate_dataframe(diagn_stream) + + +def apply(footprints, parameters=None): + """ + Gets a footprints conformance checking object + + Parameters + -------------- + footprints + Footprints object + parameters + Parameters of the algorithm + + Returns + -------------- + fp_check_obj + Footprints conformance checking object + """ + if parameters is None: + parameters = {} + + return FootprintsStreamingConformance(footprints, parameters=parameters) diff --git a/pm4py/pm4py/streaming/algo/conformance/tbr/__init__.py b/pm4py/pm4py/streaming/algo/conformance/tbr/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..45d4e091d5340ca8861a1893af21939e51ad9471 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/tbr/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.conformance.tbr import algorithm, variants diff --git a/pm4py/pm4py/streaming/algo/conformance/tbr/algorithm.py b/pm4py/pm4py/streaming/algo/conformance/tbr/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..1374f2ccd8fbe670810a99e6a1f8b1af75dd8860 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/tbr/algorithm.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils +from pm4py.streaming.algo.conformance.tbr.variants import classic + + +class Variants(Enum): + CLASSIC = classic + + +def apply(net, im, fm, variant=Variants.CLASSIC, parameters=None): + """ + Method that creates the TbrStreamingConformance object + + Parameters + ---------------- + net + Petri net + im + Initial marking + fm + Final marking + variant + Variant of the algorithm to use, possible: + - Variants.CLASSIC + parameters + Parameters of the algorithm + + Returns + ---------------- + conf_stream_obj + Conformance streaming object + """ + return exec_utils.get_variant(variant).apply(net, im, fm, parameters=parameters) diff --git a/pm4py/pm4py/streaming/algo/conformance/tbr/variants/__init__.py b/pm4py/pm4py/streaming/algo/conformance/tbr/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..98493b461b4b6b2d51dcfe22520047d64caa1c09 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/tbr/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.conformance.tbr.variants import classic diff --git a/pm4py/pm4py/streaming/algo/conformance/tbr/variants/classic.py b/pm4py/pm4py/streaming/algo/conformance/tbr/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..1c0b4917894895aa2a44a112eb566507d2a62ed7 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/tbr/variants/classic.py @@ -0,0 +1,471 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import constants, exec_utils, xes_constants +from pm4py.streaming.util.dictio import generator +import logging +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.streaming.algo.interface import StreamingAlgorithm +from pm4py.objects.petri_net import semantics +from pm4py.util import pandas_utils, nx_utils +from copy import copy +import sys + + +class Parameters: + DICT_VARIANT = "dict_variant" + DICT_ID = "dict_id" + CASE_DICT_ID = "case_dict_id" + MISSING_DICT_ID = "missing_dict_id" + REMAINING_DICT_ID = "remaining_dict_id" + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + MAXIMUM_ITERATIONS_INVISIBLES = "maximum_iterations_invisibles" + + +class TbrStreamingConformance(StreamingAlgorithm): + def __init__(self, net, im, fm, parameters=None): + """ + Initialize the token-based replay streaming conformance + + Parameters + -------------- + net + Petri net + im + Initial marking + fm + Final marking + """ + if parameters is None: + parameters = {} + self.case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + self.activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, + xes_constants.DEFAULT_NAME_KEY) + self.maximum_iterations_invisibles = exec_utils.get_param_value(Parameters.MAXIMUM_ITERATIONS_INVISIBLES, + parameters, 10) + self.net = net + self.im = im + self.fm = fm + self.places_inv_dict = {x.name: x for x in net.places} + self.activities = list(set(x.label for x in self.net.transitions)) + self.dictio_spaths = self.get_paths_net() + self.build_dictionaries(parameters=parameters) + StreamingAlgorithm.__init__(self) + + def build_dictionaries(self, parameters): + """ + Builds the dictionaries needed to store the information during the replay + + Parameters + --------------- + parameters + Parameters: + - Parameters.DICT_VARIANT: type of dictionary to use + - Parameters.CASE_DICT_ID: identifier of the dictionary hosting the markings (0) + - Parameters.MISSING_DICT_ID: identifier of the dictionary hosting the missing tokens (1) + - Parameters.REMAINING_DICT_ID: identifier of the dictionary hosting the remaining tokens (2) + """ + dict_variant = exec_utils.get_param_value(Parameters.DICT_VARIANT, parameters, generator.Variants.THREAD_SAFE) + case_dict_id = exec_utils.get_param_value(Parameters.CASE_DICT_ID, parameters, 0) + missing_dict_id = exec_utils.get_param_value(Parameters.MISSING_DICT_ID, parameters, 1) + remaining_dict_id = exec_utils.get_param_value(Parameters.REMAINING_DICT_ID, parameters, 2) + parameters_case_dict = copy(parameters) + parameters_case_dict[Parameters.DICT_ID] = case_dict_id + parameters_missing = copy(parameters) + parameters_case_dict[Parameters.DICT_ID] = missing_dict_id + parameters_remaining = copy(parameters) + parameters_remaining[Parameters.DICT_ID] = remaining_dict_id + self.case_dict = generator.apply(variant=dict_variant, parameters=parameters_case_dict) + self.missing = generator.apply(variant=dict_variant, parameters=parameters_missing) + self.remaining = generator.apply(variant=dict_variant, parameters=parameters_remaining) + + def get_paths_net(self): + """ + Gets the dictionary of shortest paths using invisibles transitions + + Returns + --------------- + dictio_spaths + Dictionary of shortest paths + """ + G = nx_utils.DiGraph() + for pl in self.net.places: + G.add_node(pl) + for tr in self.net.transitions: + G.add_node(tr) + if tr.label is None: + for a in tr.out_arcs: + target_place = a.target + G.add_edge(tr, target_place) + for a in tr.in_arcs: + source_place = a.source + G.add_edge(source_place, tr) + shortest_path = nx_utils.all_pairs_shortest_path(G) + dictio_spaths = {} + for el in shortest_path: + if type(el[0]) is PetriNet.Place: + for sel in el[1]: + spath = [x for x in el[1][sel][1:-2] if type(x) is PetriNet.Transition] + if spath: + if not el[0] in dictio_spaths: + dictio_spaths[el[0]] = {} + dictio_spaths[el[0]][sel] = spath + return dictio_spaths + + def _process(self, event): + """ + Checks the event according to the TBR + + Parameters + --------------- + event + Event (dictionary) + + Returns + --------------- + boolean + Boolean value + """ + case = event[self.case_id_key] if self.case_id_key in event else None + activity = event[self.activity_key] if self.activity_key in event else None + if case is not None and activity is not None: + self.verify_tbr(self.encode_str(case), activity) + else: + self.message_case_or_activity_not_in_event(event) + + def encode_str(self, stru): + """ + Encodes a string for storage in generic dictionaries + """ + return str(stru) + + def encode_marking(self, mark): + """ + Encodes a marking for storage in generic dictionaries + """ + em = {} + for pl in mark: + em[pl.name] = mark[pl] + return str(em) + + def decode_marking(self, ems): + """ + Decodes a marking from a generic dictionary + to a Marking object + """ + em = eval(ems) + mark = Marking() + for p in em: + mark[self.places_inv_dict[p]] = em[p] + return mark + + def verify_tbr(self, case, activity): + """ + Verifies an activity happening in a case + + Parameters + -------------- + case + Case + activity + Activity + """ + if activity in self.activities: + if case not in self.case_dict: + self.case_dict[case] = self.encode_marking(copy(self.im)) + self.missing[case] = 0 + self.remaining[case] = 0 + marking = self.decode_marking(self.case_dict[case]) + new_marking = marking + prev_marking = None + correct_exec = False + numb_it = 0 + while new_marking is not None and prev_marking != new_marking: + numb_it = numb_it + 1 + if numb_it > self.maximum_iterations_invisibles: + break + enabled_transitions = semantics.enabled_transitions(self.net, new_marking) + matching_transitions = [x for x in enabled_transitions if x.label == activity] + if matching_transitions: + new_marking = semantics.weak_execute(matching_transitions[0], new_marking) + self.case_dict[case] = self.encode_marking(new_marking) + correct_exec = True + break + prev_marking = new_marking + new_marking = self.enable_trans_with_invisibles(new_marking, activity) + correct_exec = False + if correct_exec is False: + self.message_missing_tokens(activity, case) + # enables one of the matching transitions + matching_transitions = [x for x in self.net.transitions if x.label == activity] + t = matching_transitions[0] + for a in t.in_arcs: + pl = a.source + mark = a.weight + if pl not in marking or new_marking[pl] < mark: + self.missing[case] = int(self.missing[case]) + (mark - marking[pl]) + marking[pl] = mark + new_marking = semantics.weak_execute(t, marking) + self.case_dict[case] = self.encode_marking(new_marking) + else: + self.message_activity_not_possible(activity, case) + + def enable_trans_with_invisibles(self, marking, activity): + """ + Enables a visible transition (that is not enabled) through + invisible transitions + + Parameters + ---------------- + marking + Marking + activity + Activity to enable + + Returns + --------------- + new_marking + New marking (where the transition CAN be enabled) + """ + corr_trans_to_act = [x for x in self.net.transitions if x.label == activity] + spath = None + spath_length = sys.maxsize + for pl in marking: + for tr in corr_trans_to_act: + if pl in self.dictio_spaths: + if tr in self.dictio_spaths[pl]: + new_path = self.dictio_spaths[pl][tr] + if len(new_path) < spath_length: + spath = new_path + spath_length = len(spath) + if spath is not None: + # try to fire the transitions + for tr in spath: + if tr in semantics.enabled_transitions(self.net, marking): + marking = semantics.weak_execute(tr, marking) + else: + return None + return marking + return None + + def get_status(self, case): + """ + Gets the status of an open case + + Parameters + ---------------- + case + Case + """ + if case in self.case_dict: + return {"marking": self.decode_marking(self.case_dict[case]), "missing": int(self.missing[case])} + else: + self.message_case_not_in_dictionary(case) + + def terminate(self, case): + """ + Terminate a case, checking if the final marking is reached + + Parameters + ---------------- + case + Case ID + + Returns + --------------- + dictio + Dictionary containing: the marking, the count of missing and remaining tokens + """ + case = self.encode_str(case) + if case in self.case_dict: + remaining = 0 + if not self.decode_marking(self.case_dict[case]) == self.fm: + new_marking = self.reach_fm_with_invisibles(self.case_dict[case]) + if new_marking is None: + new_marking = self.decode_marking(self.case_dict[case]) + if not new_marking == self.fm: + self.message_final_marking_not_reached(case, new_marking) + fm_copy = copy(self.fm) + for m in fm_copy: + if not m in new_marking: + new_marking[m] = 0 + self.missing[case] = int(self.missing[case]) + (fm_copy[m] - new_marking[m]) + for m in new_marking: + if not m in fm_copy: + fm_copy[m] = 0 + remaining += new_marking[m] - fm_copy[m] + missing = int(self.missing[case]) + is_fit = missing == 0 and remaining == 0 + ret = {"marking": self.decode_marking(self.case_dict[case]), "missing": missing, "remaining": remaining, "is_fit": is_fit} + del self.case_dict[case] + del self.missing[case] + del self.remaining[case] + return ret + else: + self.message_case_not_in_dictionary(case) + + def terminate_all(self): + """ + Terminate all open cases + """ + cases = list(self.case_dict.keys()) + for case in cases: + self.terminate(case) + + def reach_fm_with_invisibles(self, marking): + """ + Reaches the final marking using invisible transitions + + Parameters + -------------- + marking + Marking + + Returns + -------------- + new_marking + New marking (hopely equal to the final marking) + """ + spath = None + spath_length = sys.maxsize + for pl in marking: + if pl in self.dictio_spaths: + for pl2 in self.fm: + if pl2 in self.dictio_spaths[pl]: + new_path = self.dictio_spaths[pl][pl2] + if len(new_path) < spath_length: + spath = new_path + spath_length = len(spath) + if spath is not None: + # try to fire the transitions + for tr in spath: + if tr in semantics.enabled_transitions(self.net, marking): + marking = semantics.weak_execute(tr, marking) + else: + return None + return marking + return None + + def message_case_or_activity_not_in_event(self, event): + """ + Sends a message if the case or the activity are not + there in the event + """ + logging.error("case or activities are none! " + str(event)) + + def message_activity_not_possible(self, activity, case): + """ + Sends a message if the activity is not possible + according to the model + + Parameters + --------------- + activity + Activity + case + Case + """ + logging.error("the activity " + str(activity) + " is not possible according to the model! case: " + str(case)) + + def message_missing_tokens(self, activity, case): + """ + Sends a message if the insertion of missing + tokens occur + + Parameters + --------------- + activity + Activity + case + Case + """ + logging.error( + "the activity " + str(activity) + " could not be executed without inserting missing tokens! case: " + str( + case)) + + def message_case_not_in_dictionary(self, case): + """ + Sends a message if the provided case is not in the dictionary + + Parameters + --------------- + activity + Activity + case + Case + """ + logging.error("the case " + str(case) + " is not in the dictionary! case: " + str(case)) + + def message_final_marking_not_reached(self, case, marking): + """ + Sends a message if the final marking could not be reached + for the current case + + Parameters + --------------- + case + Case + """ + logging.error("the final marking is not reached! case: " + str(case) + " marking: " + str( + marking) + " final marking: " + str(self.fm)) + pass + + def _current_result(self): + """ + Gets a diagnostics dataframe with the status of the cases + + Returns + ------- + diagn_df + Diagnostics dataframe + """ + import pandas as pd + + cases = list(self.case_dict.keys()) + + diagn_stream = [] + + for case in cases: + status = self.get_status(case) + missing = status["missing"] + is_fit = missing == 0 + diagn_stream.append({"case": case, "is_fit": is_fit, "missing": missing}) + + return pandas_utils.instantiate_dataframe(diagn_stream) + + +def apply(net, im, fm, parameters=None): + """ + Method that creates the TbrStreamingConformance object + + Parameters + ---------------- + net + Petri net + im + Initial marking + fm + Final marking + parameters + Parameters of the algorithm + + Returns + ---------------- + conf_stream_obj + Conformance streaming object + """ + return TbrStreamingConformance(net, im, fm, parameters=parameters) diff --git a/pm4py/pm4py/streaming/algo/conformance/temporal/__init__.py b/pm4py/pm4py/streaming/algo/conformance/temporal/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c3acef8aaf74f5335a7b61e6f61ce0f1df80b7b0 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/temporal/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.conformance.temporal import algorithm, variants diff --git a/pm4py/pm4py/streaming/algo/conformance/temporal/algorithm.py b/pm4py/pm4py/streaming/algo/conformance/temporal/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..71f5a54426334934c9aee40fe75a3d27c5f130fd --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/temporal/algorithm.py @@ -0,0 +1,52 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.streaming.algo.conformance.temporal.variants import classic +from pm4py.util import exec_utils +from pm4py.util import typing + + +class Variants(Enum): + CLASSIC = classic + + +def apply(temporal_profile: typing.TemporalProfile, variant=Variants.CLASSIC, + parameters: Optional[Dict[Any, Any]] = None): + """ + Initialize the streaming conformance checking + + Parameters + --------------- + temporal_profile + Temporal profile + variant + Variant of the algorithm, possible values: + - Variants.CLASSIC + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.START_TIMESTAMP_KEY => the attribute to use as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.ZETA => multiplier for the standard deviation + - Parameters.CASE_ID_KEY => column to use as case identifier + - Parameters.DICT_VARIANT => the variant of dictionary to use + - Parameters.CASE_DICT_ID => the identifier of the case dictionary + - Parameters.DEV_DICT_ID => the identifier of the deviations dictionary + """ + return exec_utils.get_variant(variant).apply(temporal_profile, parameters=parameters) diff --git a/pm4py/pm4py/streaming/algo/conformance/temporal/variants/__init__.py b/pm4py/pm4py/streaming/algo/conformance/temporal/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fefe47e0cd4b75e0531f9a215980aa44a80c69bd --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/temporal/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.conformance.temporal.variants import classic diff --git a/pm4py/pm4py/streaming/algo/conformance/temporal/variants/classic.py b/pm4py/pm4py/streaming/algo/conformance/temporal/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..ff29c90d7bece20a8ea70c6f18021fd256009666 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/conformance/temporal/variants/classic.py @@ -0,0 +1,204 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import logging +import sys +from copy import copy +from enum import Enum +from typing import Optional, Dict, Any, Tuple + +from pm4py.objects.log.obj import Event +from pm4py.streaming.algo.interface import StreamingAlgorithm +from pm4py.streaming.util.dictio import generator +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.util import typing +import json + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ZETA = "zeta" + DICT_VARIANT = "dict_variant" + DICT_ID = "dict_id" + CASE_DICT_ID = "case_dict_id" + DEV_DICT_ID = "dev_dict_id" + + +class TemporalProfileStreamingConformance(StreamingAlgorithm): + def __init__(self, temporal_profile: typing.TemporalProfile, parameters: Optional[Dict[Any, Any]] = None): + """ + Initialize the streaming conformance checking. + + Implements the approach described in: + Stertz, Florian, Jürgen Mangler, and Stefanie Rinderle-Ma. "Temporal Conformance Checking at Runtime based on Time-infused Process Models." arXiv preprint arXiv:2008.07262 (2020). + + Parameters + --------------- + temporal_profile + Temporal profile + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.START_TIMESTAMP_KEY => the attribute to use as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.ZETA => multiplier for the standard deviation + - Parameters.CASE_ID_KEY => column to use as case identifier + - Parameters.DICT_VARIANT => the variant of dictionary to use + - Parameters.CASE_DICT_ID => the identifier of the case dictionary + - Parameters.DEV_DICT_ID => the identifier of the deviations dictionary + """ + if parameters is None: + parameters = {} + + self.temporal_profile = temporal_profile + self.activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, + xes_constants.DEFAULT_NAME_KEY) + self.timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + self.start_timestamp_key = exec_utils.get_param_value(Parameters.START_TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + self.case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + self.zeta = exec_utils.get_param_value(Parameters.ZETA, parameters, 6.0) + parameters_gen = copy(parameters) + dict_variant = exec_utils.get_param_value(Parameters.DICT_VARIANT, parameters, generator.Variants.THREAD_SAFE) + case_dict_id = exec_utils.get_param_value(Parameters.CASE_DICT_ID, parameters, 0) + parameters_gen[Parameters.DICT_ID] = case_dict_id + self.case_dictionary = generator.apply(variant=dict_variant, parameters=parameters_gen) + parameters_dev = copy(parameters) + dev_dict_id = exec_utils.get_param_value(Parameters.DEV_DICT_ID, parameters, 1) + parameters_dev[Parameters.DICT_ID] = dev_dict_id + self.deviations_dict = generator.apply(variant=dict_variant, parameters=parameters_dev) + StreamingAlgorithm.__init__(self) + + def _process(self, event: Event): + """ + Checks the incoming event, and stores it in the cases dictionary + + Parameters + --------------- + event + Event + """ + if self.case_id_key not in event or self.start_timestamp_key not in event or self.timestamp_key not in event or self.activity_key not in event: + self.message_event_is_not_complete(event) + else: + case = str(event[self.case_id_key]) + start_timestamp = event[self.start_timestamp_key].timestamp() + end_timestamp = event[self.timestamp_key].timestamp() + activity = str(event[self.activity_key]) + if case not in self.case_dictionary.keys(): + self.case_dictionary[case] = json.dumps([]) + self.deviations_dict[case] = json.dumps([]) + ev_red = (case, start_timestamp, end_timestamp, activity) + self.check_conformance(ev_red) + this_case = json.loads(self.case_dictionary[case]) + this_case.append(ev_red) + self.case_dictionary[case] = json.dumps(this_case) + + def check_conformance(self, event: Tuple[str, float, float, str]): + """ + Checks the conformance according to the temporal profile + + Parameters + --------------- + event + Event + """ + case, start_timestamp, end_timestamp, activity = event + prev_events = json.loads(self.case_dictionary[case]) + for i in range(len(prev_events)): + prev_case, prev_start_timestamp, prev_end_timestamp, prev_activity = prev_events[i] + if start_timestamp >= prev_end_timestamp: + if (prev_activity, activity) in self.temporal_profile: + diff = start_timestamp - prev_end_timestamp + mean = self.temporal_profile[(prev_activity, activity)][0] + std = self.temporal_profile[(prev_activity, activity)][1] + if diff < mean - self.zeta * std or diff > mean + self.zeta * std: + this_zeta = abs(diff - mean) / std if std > 0 else sys.maxsize + dev_descr = (case, prev_activity, activity, diff, this_zeta) + this_dev = json.loads(self.deviations_dict[case]) + this_dev.append(dev_descr) + self.deviations_dict[case] = json.dumps(this_dev) + self.message_deviation(dev_descr) + + def message_event_is_not_complete(self, event: Event): + """ + Method that is called when the event does not contain the case, or the activity, or the timestamp + + Parameters + -------------- + event + Incoming event + """ + logging.error("case or activities or timestamp are none! " + str(event)) + + def message_deviation(self, dev_descr: Tuple[str, str, str, float, float]): + """ + Method that is called to signal a deviation according to the temporal profile + + Parameters + -------------- + dev_descr + Description of the deviation to be printed + """ + logging.error("the temporal profile is broken in the following setting: " + str(dev_descr)) + + def _current_result(self) -> typing.TemporalProfileStreamingConfResults: + """ + Gets the current deviations identified by conformance checking + + Returns + ------------- + deviations_dict + Deviations dictionary + """ + dev_dict = {} + for x in self.deviations_dict.keys(): + y = json.loads(self.deviations_dict[x]) + if y: + dev_dict[x] = y + return dev_dict + + +def apply(temporal_profile: typing.TemporalProfile, parameters: Optional[Dict[Any, Any]] = None): + """ + Initialize the streaming conformance checking. + + Implements the approach described in: + Stertz, Florian, Jürgen Mangler, and Stefanie Rinderle-Ma. "Temporal Conformance Checking at Runtime based on Time-infused Process Models." arXiv preprint arXiv:2008.07262 (2020). + + Parameters + --------------- + temporal_profile + Temporal profile + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the attribute to use as activity + - Parameters.START_TIMESTAMP_KEY => the attribute to use as start timestamp + - Parameters.TIMESTAMP_KEY => the attribute to use as timestamp + - Parameters.ZETA => multiplier for the standard deviation + - Parameters.CASE_ID_KEY => column to use as case identifier + - Parameters.DICT_VARIANT => the variant of dictionary to use + - Parameters.CASE_DICT_ID => the identifier of the case dictionary + - Parameters.DEV_DICT_ID => the identifier of the deviations dictionary + """ + if parameters is None: + parameters = {} + + return TemporalProfileStreamingConformance(temporal_profile, parameters=parameters) diff --git a/pm4py/pm4py/streaming/algo/discovery/__init__.py b/pm4py/pm4py/streaming/algo/discovery/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6dff21e282c3764630eb7333973cf79f1592a3f9 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/discovery/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.discovery import dfg diff --git a/pm4py/pm4py/streaming/algo/discovery/dfg/__init__.py b/pm4py/pm4py/streaming/algo/discovery/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d108ce1450b7e155685639af2fdc5e6f1dc3b372 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/discovery/dfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.discovery.dfg import algorithm, variants diff --git a/pm4py/pm4py/streaming/algo/discovery/dfg/algorithm.py b/pm4py/pm4py/streaming/algo/discovery/dfg/algorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..2e77568d51e30ade0211586a11ac54d1961c92d8 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/discovery/dfg/algorithm.py @@ -0,0 +1,46 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.discovery.dfg.variants import frequency +from enum import Enum +from pm4py.util import exec_utils + + +class Variants(Enum): + FREQUENCY = frequency + + +DEFAULT_VARIANT = Variants.FREQUENCY + + +def apply(variant=DEFAULT_VARIANT, parameters=None): + """ + Discovers a DFG from an event stream + + Parameters + -------------- + variant + Variant of the algorithm (default: Variants.FREQUENCY) + + Returns + -------------- + stream_dfg_obj + Streaming DFG discovery object + """ + if parameters is None: + parameters = {} + + return exec_utils.get_variant(variant).apply(parameters=parameters) diff --git a/pm4py/pm4py/streaming/algo/discovery/dfg/variants/__init__.py b/pm4py/pm4py/streaming/algo/discovery/dfg/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bd594f42aa789ed35cd4e7cf682e1974c8e183c9 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/discovery/dfg/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.discovery.dfg.variants import frequency diff --git a/pm4py/pm4py/streaming/algo/discovery/dfg/variants/frequency.py b/pm4py/pm4py/streaming/algo/discovery/dfg/variants/frequency.py new file mode 100644 index 0000000000000000000000000000000000000000..8419964465a3466e43c25a977f493d7eec173b17 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/discovery/dfg/variants/frequency.py @@ -0,0 +1,182 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from collections import Counter +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.streaming.util.dictio import generator +from pm4py.streaming.algo.interface import StreamingAlgorithm +from enum import Enum +from copy import copy +import logging + + +class Parameters(Enum): + DICT_VARIANT = "dict_variant" + DICT_ID = "dict_id" + CASE_DICT_ID = "case_dict_id" + DFG_DICT_ID = "dfg_dict_id" + ACT_DICT_ID = "act_dict_id" + START_ACT_DICT_ID = "start_act_dict_id" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + + +class StreamingDfgDiscovery(StreamingAlgorithm): + def __init__(self, parameters=None): + """ + Initialize the StreamingDFGDiscovery object + + Parameters + --------------- + parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY: the key of the event to use as activity + - Parameters.CASE_ID_KEY: the key of the event to use as case identifier + """ + if parameters is None: + parameters = {} + + self.parameters = parameters + self.activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, + xes_constants.DEFAULT_NAME_KEY) + self.case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, + constants.CASE_CONCEPT_NAME) + self.build_dictionaries(parameters) + StreamingAlgorithm.__init__(self) + + def build_dictionaries(self, parameters): + """ + Builds the dictionaries that are needed by the + discovery operation + + Parameters + --------------- + parameters + Parameters: + - Parameters.DICT_VARIANT: type of dictionary to use + - Parameters.CASE_DICT_ID: identifier of the case dictionary (hosting the last activity of a case) (0) + - Parameters.DFG_DICT_ID: identifier of the DFG dictionary (1) + - Parameters.ACT_ID: identifier of the dictionary hosting the count of the activities (2) + - Parameters.START_ACT_DICT_ID: identifier of the dictionary hosting the count of the start activities (3) + """ + dict_variant = exec_utils.get_param_value(Parameters.DICT_VARIANT, parameters, generator.Variants.THREAD_SAFE) + case_dict_id = exec_utils.get_param_value(Parameters.CASE_DICT_ID, parameters, 0) + dfg_dict_id = exec_utils.get_param_value(Parameters.DFG_DICT_ID, parameters, 1) + act_dict_id = exec_utils.get_param_value(Parameters.ACT_DICT_ID, parameters, 2) + start_act_dict_id = exec_utils.get_param_value(Parameters.START_ACT_DICT_ID, parameters, 3) + parameters_case_dict = copy(parameters) + parameters_case_dict[Parameters.DICT_ID] = case_dict_id + parameters_dfg = copy(parameters) + parameters_dfg[Parameters.DICT_ID] = dfg_dict_id + parameters_activities = copy(parameters) + parameters_activities[Parameters.DICT_ID] = act_dict_id + parameters_start_activities = copy(parameters) + parameters_start_activities[Parameters.DICT_ID] = start_act_dict_id + self.case_dict = generator.apply(variant=dict_variant, parameters=parameters_case_dict) + self.dfg = generator.apply(variant=dict_variant, parameters=parameters_dfg) + self.activities = generator.apply(variant=dict_variant, parameters=parameters_activities) + self.start_activities = generator.apply(variant=dict_variant, parameters=parameters_start_activities) + + def event_without_activity_or_case(self, event): + """ + Print an error message when an event is without the + activity or the case identifier + + Parameters + ---------------- + event + Event + """ + logging.warning("event without activity or case: " + str(event)) + + def encode_str(self, stru): + """ + Encodes a string for storage in generic dictionaries + """ + return str(stru) + + def encode_tuple(self, tup): + """ + Encodes a tuple for storage in generic dictionaries + """ + return str(tup) + + def _process(self, event): + """ + Receives an event from the live event stream, + and appends it to the current DFG discovery + + Parameters + --------------- + event + Event + """ + if self.case_id_key in event and self.activity_key in event: + case = self.encode_str(event[self.case_id_key]) + activity = self.encode_str(event[self.activity_key]) + if case not in self.case_dict: + if activity not in self.start_activities: + self.start_activities[activity] = 1 + else: + self.start_activities[activity] = int(self.start_activities[activity]) + 1 + else: + df = self.encode_tuple((self.case_dict[case], activity)) + if df not in self.dfg: + self.dfg[df] = 1 + else: + self.dfg[df] = int(self.dfg[df]) + 1 + if activity not in self.activities: + self.activities[activity] = 1 + else: + self.activities[activity] = int(self.activities[activity]) + 1 + self.case_dict[case] = activity + else: + self.event_without_activity_or_case(event) + + def _current_result(self): + """ + Gets the current state of the DFG + + Returns + ---------------- + dfg + Directly-Follows Graph + activities + Activities + start_activities + Start activities + end_activities + End activities + """ + dfg = {eval(x): int(self.dfg[x]) for x in self.dfg} + activities = {x: int(self.activities[x]) for x in self.activities} + start_activities = {x: int(self.start_activities[x]) for x in self.start_activities} + end_activities = dict(Counter(self.case_dict[x] for x in self.case_dict)) + return dfg, activities, start_activities, end_activities + + +def apply(parameters=None): + """ + Creates a StreamingDFGDiscovery object + + Parameters + -------------- + parameters + Parameters of the algorithm + """ + if parameters is None: + parameters = {} + + return StreamingDfgDiscovery(parameters=parameters) diff --git a/pm4py/pm4py/streaming/algo/interface.py b/pm4py/pm4py/streaming/algo/interface.py new file mode 100644 index 0000000000000000000000000000000000000000..7707825e0a7b44b9bfb316f3f95296ae3a704716 --- /dev/null +++ b/pm4py/pm4py/streaming/algo/interface.py @@ -0,0 +1,50 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import abc +from threading import Lock +import traceback + + +class StreamingAlgorithm(abc.ABC): + def __init__(self, parameters=None): + self._lock = Lock() + + @abc.abstractmethod + def _process(self, event): + pass + + @abc.abstractmethod + def _current_result(self): + pass + + def get(self): + self._lock.acquire() + try: + ret = self._current_result() + except: + traceback.print_exc() + ret = None + self._lock.release() + return ret + + def receive(self, event): + self._lock.acquire() + try: + self._process(event) + except: + traceback.print_exc() + self._lock.release() diff --git a/pm4py/pm4py/streaming/connectors/__init__.py b/pm4py/pm4py/streaming/connectors/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/streaming/connectors/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/streaming/connectors/windows/__init__.py b/pm4py/pm4py/streaming/connectors/windows/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/streaming/connectors/windows/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/streaming/connectors/windows/click_key_logger.py b/pm4py/pm4py/streaming/connectors/windows/click_key_logger.py new file mode 100644 index 0000000000000000000000000000000000000000..061327cca361eb31353bbc1577c38a65b29197d5 --- /dev/null +++ b/pm4py/pm4py/streaming/connectors/windows/click_key_logger.py @@ -0,0 +1,166 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from threading import Thread, Lock +import pygetwindow as gw +from pynput import mouse, keyboard +from datetime import datetime +from pynput.keyboard import Key +from pm4py.objects.log.obj import Event +import time +import psutil +import win32process +import os +from PIL import ImageGrab + + +class WindowsEventLogger(Thread): + def __init__(self, event_stream, context_keys=None, screenshots_folder=None): + """ + Keyboard and mouse click recorder for Windows. This is useful for task mining purposes. + + Parameters + ---------- + event_stream + Event stream that should be used to record the events + context_keys + (if provided) list of keyboard keys to be considered context-switching (default: + {Key.tab, Key.enter, Key.esc, Key.f1, Key.f2, Key.f3, Key.f4, Key.f5, Key.f6, Key.f7, + Key.f8, Key.f9, Key.f10, Key.f11, Key.f12, Key.f13, Key.f14, Key.f15, Key.f16, Key.f16, + Key.f17, Key.f18, Key.f19, Key.f20, Key.home, Key.end} + ) + screenshots_folder + (if provided) folder in which the screenshots shall be saved + + Minimum Viable Example: + + from pm4py.streaming.stream.live_event_stream import LiveEventStream + from pm4py.streaming.connectors.windows.click_key_logger import WindowsEventLogger + from pm4py.streaming.util.event_stream_printer import EventStreamPrinter + import time + + stream = LiveEventStream() + wel = WindowsEventLogger(stream, screenshots_folder="output") + printer = EventStreamPrinter() + stream.register(printer) + stream.start() + wel.start() + + print("listening") + + # listen only for 5 seconds + time.sleep(5) + + wel.stop() + stream.stop() + + print("stopped") + """ + Thread.__init__(self) + + self.event_stream = event_stream + self.lock = Lock() + self.context_keys = context_keys + if self.context_keys is None: + self.context_keys = {Key.tab, Key.enter, Key.esc, Key.f1, Key.f2, Key.f3, Key.f4, Key.f5, Key.f6, Key.f7, + Key.f8, Key.f9, Key.f10, Key.f11, Key.f12, Key.f13, Key.f14, Key.f15, Key.f16, Key.f16, + Key.f17, Key.f18, Key.f19, Key.f20, Key.home, Key.end} + + self.screenshots_folder = screenshots_folder + if self.screenshots_folder is not None: + if not os.path.exists(self.screenshots_folder): + os.mkdir(self.screenshots_folder) + + self.mouse_listener = mouse.Listener(on_click=self.on_click) + self.keyboard_listener = keyboard.Listener(on_release=self.on_key_release) + + def run(self): + self.mouse_listener.start() + self.keyboard_listener.start() + + self.mouse_listener.join() + self.keyboard_listener.join() + + def stop(self): + self.mouse_listener.stop() + self.keyboard_listener.stop() + + def get_process_name(self, hwnd): + """Fetch the process name using the window handle.""" + try: + # Get the process ID associated with the handle + hwnd = gw.getActiveWindow()._hWnd + threadid, pid = win32process.GetWindowThreadProcessId(hwnd) + process = psutil.Process(pid) + return process.name() + except (psutil.NoSuchProcess, IndexError): + return None + + def record(self, windows_title, process_name=None, x=None, y=None, button=None, key=None): + self.lock.acquire() + + process_name = str(process_name) if process_name is not None else "" + x = str(x) if x is not None else "" + y = str(y) if y is not None else "" + button = str(button) if button is not None else "" + key = str(key) if key is not None else "" + + timestamp = time.time() + dt_object = datetime.utcfromtimestamp(timestamp) + + image_path = "" + img = None + + if self.screenshots_folder is not None: + image_path = os.path.join(self.screenshots_folder, "screenshot_%s.png" % ( + dt_object.strftime('%Y%m%d_%H%M%S') + '_' + dt_object.strftime('%f')[:3])) + + event = Event( + {"timestamp": "NONE", "windows_title": windows_title, "process_name": process_name, "x": x, "y": y, + "button": button, "key": key, "screenshot": image_path}) + self.event_stream.append(event) + + if image_path: + img = ImageGrab.grab(all_screens=True) + + self.lock.release() + + if image_path: + img.save(image_path, "PNG") + + def on_click(self, x, y, button, pressed): + if pressed: + # Introduce a short delay to allow window context switch + time.sleep(0.1) + + # Get the title of the now active window + window_title = gw.getActiveWindow().title + + # Get the process name using the window handle + process_name = self.get_process_name(gw.getActiveWindow()._hWnd) + + self.record(window_title, process_name=process_name, x=x, y=y, button=button) + + def on_key_release(self, key): + # Check if the released key is in the list + if key in self.context_keys: + # Get the title of the active window + window_title = gw.getActiveWindow().title + + # Get the process name using the window handle + process_name = self.get_process_name(gw.getActiveWindow()._hWnd) + + self.record(window_title, process_name=process_name, key=key) diff --git a/pm4py/pm4py/streaming/conversion/__init__.py b/pm4py/pm4py/streaming/conversion/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9990f1686593b210cdf487d988f9d100dd4272cc --- /dev/null +++ b/pm4py/pm4py/streaming/conversion/__init__.py @@ -0,0 +1,33 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' \ No newline at end of file diff --git a/pm4py/pm4py/streaming/conversion/from_pandas.py b/pm4py/pm4py/streaming/conversion/from_pandas.py new file mode 100644 index 0000000000000000000000000000000000000000..ecb911ec28db6c733b6a5a4763b2bba0a5f20969 --- /dev/null +++ b/pm4py/pm4py/streaming/conversion/from_pandas.py @@ -0,0 +1,125 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +import numpy as np +import pandas as pd + +from pm4py.objects.log.obj import Trace, Event +from pm4py.streaming.stream.live_trace_stream import LiveTraceStream +from pm4py.util import constants, xes_constants, exec_utils, pandas_utils + + +class Parameters(Enum): + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + INDEX_KEY = "index_key" + + +class PandasDataframeAsIterable(object): + def __init__(self, dataframe: pd.DataFrame, parameters: Optional[Dict[Any, Any]] = None): + if parameters is None: + parameters = {} + + case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + index_key = exec_utils.get_param_value(Parameters.INDEX_KEY, parameters, constants.DEFAULT_INDEX_KEY) + + if not (hasattr(dataframe, "attrs") and dataframe.attrs): + # dataframe has not been initialized through format_dataframe + dataframe = pandas_utils.insert_index(dataframe, index_key) + dataframe.sort_values([case_id_key, timestamp_key, index_key]) + + cases = dataframe[case_id_key].to_numpy() + + self.activities = dataframe[activity_key].to_numpy() + self.timestamps = dataframe[timestamp_key].to_numpy() + self.c_unq, self.c_ind, self.c_counts = np.unique(cases, return_index=True, return_counts=True) + self.no_traces = len(self.c_ind) + self.i = 0 + + def read_trace(self) -> Trace: + if self.i < self.no_traces: + case_id = self.c_unq[self.i] + si = self.c_ind[self.i] + ei = si + self.c_counts[self.i] + trace = Trace(attributes={xes_constants.DEFAULT_TRACEID_KEY: case_id}) + for j in range(si, ei): + event = Event({xes_constants.DEFAULT_NAME_KEY: self.activities[j], + xes_constants.DEFAULT_TIMESTAMP_KEY: self.timestamps[j]}) + trace.append(event) + self.i = self.i + 1 + return trace + + def reset(self): + self.i = 0 + + def __iter__(self): + """ + Starts the iteration + """ + return self + + def __next__(self): + """ + Gets the next trace + """ + trace = self.read_trace() + if trace is None: + raise StopIteration + return trace + + def to_trace_stream(self, trace_stream: LiveTraceStream): + """ + Sends the content of the dataframe to a trace stream + + Parameters + -------------- + trace_stream + Trace stream + """ + trace = self.read_trace() + while trace is not None: + trace_stream.append(trace) + trace = self.read_trace() + + +def apply(dataframe, parameters=None) -> PandasDataframeAsIterable: + """ + Transforms the Pandas dataframe object to an iterable + + Parameters + ---------------- + dataframe + Pandas dataframe + parameters + Parameters of the algorithm, including: + - Parameters.CASE_ID_KEY => the attribute to be used as case identifier (default: constants.CASE_CONCEPT_NAME) + - Parameters.ACTIVITY_KEY => the attribute to be used as activity (default: xes_constants.DEFAULT_NAME_KEY) + - Parameters.TIMESTAMP_KEY => the attribute to be used as timestamp (default: xes_constants.DEFAULT_TIMESTAMP_KEY) + + Returns + ---------------- + log_iterable + Iterable log object, which can be iterated directly or added to a live trace stream + (using the method to_trace_stream). + """ + return PandasDataframeAsIterable(dataframe, parameters=parameters) diff --git a/pm4py/pm4py/streaming/conversion/ocel_flatts_distributor.py b/pm4py/pm4py/streaming/conversion/ocel_flatts_distributor.py new file mode 100644 index 0000000000000000000000000000000000000000..087fe2100011e9ebddf2cfab79735d20d3be877c --- /dev/null +++ b/pm4py/pm4py/streaming/conversion/ocel_flatts_distributor.py @@ -0,0 +1,106 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any +from enum import Enum +from pm4py.util import exec_utils, constants, xes_constants +from pm4py.objects.ocel import constants as ocel_constants +from copy import copy +from pm4py.streaming.stream.live_event_stream import LiveEventStream + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + CASE_ID_KEY = constants.PARAMETER_CONSTANT_CASEID_KEY + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + OCEL_ACTIVITY_KEY = ocel_constants.PARAM_EVENT_ACTIVITY + OCEL_TIMESTAMP_KEY = ocel_constants.PARAM_EVENT_TIMESTAMP + OCEL_TYPE_PREFIX = ocel_constants.PARAM_OBJECT_TYPE_PREFIX_EXTENDED + + +class OcelFlattsDistributor(object): + def __init__(self, parameters: Optional[Dict[Any, Any]] = None): + """ + Instantiate the object, "distributing" an OCEL event among all + the event streams for the "flattened" events. + + Parameters + ----------------- + parameters + Parameters of the algorithm, including: + - Parameters.ACTIVITY_KEY => the activity key to use in the flattening + - Parameters.TIMESTAMP_KEY => the timestamp key to use in the flattening + - Parameters.OCEL_ACTIVITY_KEY => the attribute in the OCEL event that is the activity (default: ocel:activity) + - Parameters.OCEL_TIMESTAMP_KEY => the attribute in the OCEL event that is the timestamp (default: ocel:timestamp) + - Parameters.OCEL_TYPE_PREFIX => the prefix of the object types in the OCEL (default: ocel:type) + """ + if parameters is None: + parameters = {} + + self.activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, + xes_constants.DEFAULT_NAME_KEY) + self.case_id_key = exec_utils.get_param_value(Parameters.CASE_ID_KEY, parameters, constants.CASE_CONCEPT_NAME) + self.timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + self.ocel_activity = exec_utils.get_param_value(Parameters.OCEL_ACTIVITY_KEY, parameters, + ocel_constants.DEFAULT_EVENT_ACTIVITY) + self.ocel_timestamp = exec_utils.get_param_value(Parameters.OCEL_TIMESTAMP_KEY, parameters, + ocel_constants.DEFAULT_EVENT_TIMESTAMP) + + self.ot_prefix = exec_utils.get_param_value(Parameters.OCEL_TYPE_PREFIX, parameters, + ocel_constants.DEFAULT_OBJECT_TYPE_PREFIX_EXTENDED) + self.flattened_stream_listeners = {} + + def register(self, object_type: str, live_event_stream: LiveEventStream): + """ + Register a new event stream (listener) for a given object type. + + Parameters + ----------------- + object_type + Given object type + live_event_stream + Live event stream + """ + if object_type not in self.flattened_stream_listeners: + self.flattened_stream_listeners[object_type] = [] + self.flattened_stream_listeners[object_type].append(live_event_stream) + + def append(self, event: Dict[str, Any]): + """ + Flattens an OCEL among all the available object types, and send its flattening to each + corresponding event stream. + + Parameters + ------------- + event + OCEL event (obtained for example using the ocel_iterator) + """ + base_event = {x: y for x, y in event.items() if not x.startswith(self.ot_prefix)} + base_event[self.activity_key] = base_event[self.ocel_activity] + base_event[self.timestamp_key] = base_event[self.ocel_timestamp] + del base_event[self.ocel_activity] + del base_event[self.ocel_timestamp] + + ev_objects = {x.split(self.ot_prefix)[1]: y for x, y in event.items() if x.startswith(self.ot_prefix)} + + for ot in ev_objects: + if ot in self.flattened_stream_listeners: + for obj in ev_objects[ot]: + fl_ev = copy(base_event) + fl_ev[self.case_id_key] = obj + for listener in self.flattened_stream_listeners[ot]: + listener.append(fl_ev) diff --git a/pm4py/pm4py/streaming/importer/__init__.py b/pm4py/pm4py/streaming/importer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c222b97f0d1d59b5d6a14dce930ce61b7c2a7147 --- /dev/null +++ b/pm4py/pm4py/streaming/importer/__init__.py @@ -0,0 +1,21 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util +from pm4py.streaming.importer import csv + +if importlib.util.find_spec("lxml"): + from pm4py.streaming.importer import xes diff --git a/pm4py/pm4py/streaming/importer/csv/__init__.py b/pm4py/pm4py/streaming/importer/csv/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..12ef7aaa7089b2ced40262dee59d636d46f6de53 --- /dev/null +++ b/pm4py/pm4py/streaming/importer/csv/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.importer.csv import importer, variants diff --git a/pm4py/pm4py/streaming/importer/csv/importer.py b/pm4py/pm4py/streaming/importer/csv/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..6246edc672893d2a44191d81fb638cb86d3f3b5b --- /dev/null +++ b/pm4py/pm4py/streaming/importer/csv/importer.py @@ -0,0 +1,48 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils +from pm4py.streaming.importer.csv.variants import csv_event_stream + + +class Variants(Enum): + CSV_EVENT_STREAM = csv_event_stream + + +DEFAULT_VARIANT = Variants.CSV_EVENT_STREAM + + +def apply(path, variant=DEFAULT_VARIANT, parameters=None): + """ + Reads a stream object from a CSV file + + Parameters + --------------- + path + Path to the CSV file + variant + Variant of the importer, possible values: + - Variants.CSV_EVENT_STREAM + parameters + Parameters of the importer + + Returns + -------------- + stream_obj + Stream object + """ + return exec_utils.get_variant(variant).apply(path, parameters=parameters) diff --git a/pm4py/pm4py/streaming/importer/csv/variants/__init__.py b/pm4py/pm4py/streaming/importer/csv/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..702bdd9e0d2bea9dc2242e5fe1c0b2b953cfb025 --- /dev/null +++ b/pm4py/pm4py/streaming/importer/csv/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.importer.csv.variants import csv_event_stream diff --git a/pm4py/pm4py/streaming/importer/csv/variants/csv_event_stream.py b/pm4py/pm4py/streaming/importer/csv/variants/csv_event_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..d6de7adb4d990c46e5b6089ce130e3cea48afcd9 --- /dev/null +++ b/pm4py/pm4py/streaming/importer/csv/variants/csv_event_stream.py @@ -0,0 +1,111 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import csv +from enum import Enum +from pm4py.util import exec_utils + + +class Parameters(Enum): + TRANSFORMATION_FUNCTION = "transformation_function" + ACCEPTANCE_CONDITION = "acceptance_condition" + + +class CSVEventStreamReader(object): + def __init__(self, path, parameters=None): + self.path = path + self.parameters = parameters + self.transformation_function = exec_utils.get_param_value(Parameters.TRANSFORMATION_FUNCTION, parameters, + lambda x: x) + self.acceptance_condition = exec_utils.get_param_value(Parameters.ACCEPTANCE_CONDITION, parameters, + lambda x: True) + self.reset() + + def reset(self): + self.F = open(self.path, "r") + self.reader = csv.DictReader(self.F) + self.reading_log = True + + def __iter__(self): + """ + Starts the iteration + """ + return self + + def __next__(self): + """ + Gets the next element of the log + """ + event = self.read_event() + if self.reading_log: + return event + raise StopIteration + + def to_event_stream(self, event_stream): + """ + Sends the content of a CSV log to an event stream + + Parameters + -------------- + event_stream + Event stream + """ + while self.reading_log: + event = self.read_event() + if event is not None: + event_stream.append(event) + + def read_event(self): + """ + Reads an event from the CSV file + + Returns + ------------ + eve + Event + """ + while True: + try: + event = next(self.reader) + if event is not None: + event = dict(event) + event = self.transformation_function(event) + if self.acceptance_condition(event): + return event + else: + self.reading_log = False + return None + except StopIteration as exc: + self.reading_log = False + return None + +def apply(path, parameters=None): + """ + Creates the CSVEventStreamReaderObject + + Parameters + ------------- + path + Path to the CSV file + parameters + Parameters + + Returns + ------------- + stream_read_obj + Stream reader object + """ + return CSVEventStreamReader(path, parameters=parameters) diff --git a/pm4py/pm4py/streaming/importer/xes/__init__.py b/pm4py/pm4py/streaming/importer/xes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..f1f451a849e20255cc13d50d6bcda19debc024ae --- /dev/null +++ b/pm4py/pm4py/streaming/importer/xes/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.importer.xes import importer, variants diff --git a/pm4py/pm4py/streaming/importer/xes/importer.py b/pm4py/pm4py/streaming/importer/xes/importer.py new file mode 100644 index 0000000000000000000000000000000000000000..f1f14e7f9e59e4e16382b5e67d8138adeaf8a180 --- /dev/null +++ b/pm4py/pm4py/streaming/importer/xes/importer.py @@ -0,0 +1,48 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.importer.xes.variants import xes_trace_stream, xes_event_stream +from enum import Enum +from pm4py.util import exec_utils + + +class Variants(Enum): + XES_EVENT_STREAM = xes_event_stream + XES_TRACE_STREAM = xes_trace_stream + + +DEFAULT_VARIANT = Variants.XES_EVENT_STREAM + + +def apply(path, variant=DEFAULT_VARIANT, parameters=None): + """ + Imports a stream from a XES log + + Parameters + --------------- + path + Path to the XES log + variant + Variant of the importer: + - Variants.XES_EVENT_STREAM + - Variants.XES_TRACE_STREAM + + Returns + --------------- + streaming_reader + Streaming XES reader + """ + return exec_utils.get_variant(variant).apply(path, parameters=parameters) diff --git a/pm4py/pm4py/streaming/importer/xes/variants/__init__.py b/pm4py/pm4py/streaming/importer/xes/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1cc049b0502c3c965f54a5957f41756537db5699 --- /dev/null +++ b/pm4py/pm4py/streaming/importer/xes/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.importer.xes.variants import xes_event_stream, xes_trace_stream diff --git a/pm4py/pm4py/streaming/importer/xes/variants/xes_event_stream.py b/pm4py/pm4py/streaming/importer/xes/variants/xes_event_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..1018fc140676ad430167047d661e8ea9ca8b8cd9 --- /dev/null +++ b/pm4py/pm4py/streaming/importer/xes/variants/xes_event_stream.py @@ -0,0 +1,246 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import logging +from enum import Enum + +from pm4py.objects.log.obj import Event, Trace +from pm4py.util import xes_constants, exec_utils, constants +from pm4py.util.dt_parsing import parser as dt_parser + + +class Parameters(Enum): + ACCEPTANCE_CONDITION = "acceptance_condition" + + +_EVENT_END = 'end' +_EVENT_START = 'start' + + +def parse_attribute(elem, store, key, value, tree): + if len(elem.getchildren()) == 0: + if type(store) is list: + # changes to the store of lists: not dictionaries anymore + # but pairs of key-values. + store.append((key, value)) + else: + store[key] = value + else: + if elem.getchildren()[0].tag.endswith(xes_constants.TAG_VALUES): + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: list()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + tree[elem.getchildren()[0]] = tree[elem] + else: + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: dict()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + return tree + + +class StreamingEventXesReader: + def __init__(self, path, parameters=None): + """ + Initialize the iterable log object + + Parameters + ------------- + path + Path to the XES log + """ + if parameters is None: + parameters = {} + self.path = path + self.acceptance_condition = exec_utils.get_param_value(Parameters.ACCEPTANCE_CONDITION, parameters, + lambda x: True) + self.date_parser = dt_parser.get() + self.reset() + + def __iter__(self): + """ + Starts the iteration + """ + return self + + def __next__(self): + """ + Gets the next element of the log + """ + event = self.read_event() + if self.reading_log: + return event + raise StopIteration + + def to_event_stream(self, event_stream): + """ + Sends the content of a XES log to an event stream + + Parameters + -------------- + event_stream + Event stream + """ + while self.reading_log: + event = self.read_event() + if event is not None: + event_stream.append(event) + + def reset(self): + """ + Resets the iterator + """ + # reset the variables + from lxml import etree + + self.context = None + self.tree = None + # initialize the variables + self.context = etree.iterparse(self.path, events=[_EVENT_START, _EVENT_END]) + self.event = None + self.reading_log = True + self.reading_event = False + self.reading_trace = False + self.tree = {} + + def read_event(self): + """ + Gets the next event from the iterator + + Returns + ------------ + event + Event + """ + tree = self.tree + while True: + tree_event, elem = next(self.context) + + if tree_event == _EVENT_START: + parent = tree[elem.getparent()] if elem.getparent() in tree else None + + if elem.tag.endswith(xes_constants.TAG_TRACE): + self.trace = Trace() + tree[elem] = self.trace.attributes + self.reading_trace = True + continue + + if elem.tag.endswith(xes_constants.TAG_EVENT): + self.event = Event() + tree[elem] = self.event + self.reading_event = True + continue + + if self.reading_event or self.reading_trace: + if elem.tag.endswith(xes_constants.TAG_STRING): + if parent is not None: + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), + elem.get(xes_constants.KEY_VALUE), tree) + continue + + elif elem.tag.endswith(xes_constants.TAG_DATE): + try: + dt = self.date_parser.apply(elem.get(xes_constants.KEY_VALUE)) + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), dt, tree) + except TypeError: + logging.info("failed to parse date: " + str(elem.get(xes_constants.KEY_VALUE))) + except ValueError: + logging.info("failed to parse date: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_FLOAT): + if parent is not None: + try: + val = float(elem.get(xes_constants.KEY_VALUE)) + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse float: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_INT): + if parent is not None: + try: + val = int(elem.get(xes_constants.KEY_VALUE)) + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse int: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_BOOLEAN): + if parent is not None: + try: + val0 = elem.get(xes_constants.KEY_VALUE) + val = False + if str(val0).lower() == "true": + val = True + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse boolean: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_LIST): + if parent is not None: + # lists have no value, hence we put None as a value + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), None, tree) + continue + + elif elem.tag.endswith(xes_constants.TAG_ID): + if parent is not None: + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), + elem.get(xes_constants.KEY_VALUE), tree) + continue + + elif tree_event == _EVENT_END: + if elem in tree: + del tree[elem] + elem.clear() + if elem.getprevious() is not None: + try: + del elem.getparent()[0] + except TypeError: + pass + + if elem.tag.endswith(xes_constants.TAG_EVENT): + self.reading_event = False + if self.acceptance_condition(self.event): + for attr in self.trace.attributes: + self.event[constants.CASE_ATTRIBUTE_PREFIX + attr] = self.trace.attributes[attr] + return self.event + continue + + elif elem.tag.endswith(xes_constants.TAG_TRACE): + self.reading_trace = False + continue + + elif elem.tag.endswith(xes_constants.TAG_LOG): + self.reading_log = False + break + + +def apply(path, parameters=None): + """ + Creates a StreamingEventXesReader object + + Parameters + --------------- + path + Path + parameters + Parameters of the algorithm + + Returns + --------------- + stream_read_obj + Stream reader object + """ + return StreamingEventXesReader(path, parameters=parameters) diff --git a/pm4py/pm4py/streaming/importer/xes/variants/xes_trace_stream.py b/pm4py/pm4py/streaming/importer/xes/variants/xes_trace_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..e15b100e58b6b498645413c83010fe20de806788 --- /dev/null +++ b/pm4py/pm4py/streaming/importer/xes/variants/xes_trace_stream.py @@ -0,0 +1,245 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import logging +from enum import Enum + +from pm4py.objects.log.obj import Trace, Event +from pm4py.util import xes_constants, exec_utils +from pm4py.util.dt_parsing import parser as dt_parser + + +class Parameters(Enum): + ACCEPTANCE_CONDITION = "acceptance_condition" + + +_EVENT_END = 'end' +_EVENT_START = 'start' + + +def parse_attribute(elem, store, key, value, tree): + if len(elem.getchildren()) == 0: + if type(store) is list: + # changes to the store of lists: not dictionaries anymore + # but pairs of key-values. + store.append((key, value)) + else: + store[key] = value + else: + if elem.getchildren()[0].tag.endswith(xes_constants.TAG_VALUES): + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: list()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + tree[elem.getchildren()[0]] = tree[elem] + else: + store[key] = {xes_constants.KEY_VALUE: value, xes_constants.KEY_CHILDREN: dict()} + tree[elem] = store[key][xes_constants.KEY_CHILDREN] + return tree + + +class StreamingTraceXesReader: + def __init__(self, path, parameters=None): + """ + Initialize the iterable log object + + Parameters + ------------- + path + Path to the XES log + """ + if parameters is None: + parameters = {} + self.path = path + self.acceptance_condition = exec_utils.get_param_value(Parameters.ACCEPTANCE_CONDITION, parameters, + lambda x: True) + self.date_parser = dt_parser.get() + self.reset() + + def __iter__(self): + """ + Starts the iteration + """ + return self + + def __next__(self): + """ + Gets the next element of the log + """ + trace = self.read_trace() + if self.reading_log: + return trace + raise StopIteration + + def to_trace_stream(self, trace_stream): + """ + Sends the content of a XES log to a trace stream + + Parameters + -------------- + trace_stream + Trace stream + """ + while self.reading_log: + trace = self.read_trace() + if trace is not None: + trace_stream.append(trace) + + def reset(self): + """ + Resets the iterator + """ + # reset the variables + from lxml import etree + + self.context = None + self.tree = None + # initialize the variables + self.context = etree.iterparse(self.path, events=[_EVENT_START, _EVENT_END]) + self.trace = None + self.event = None + self.reading_log = True + self.reading_trace = False + self.tree = {} + + def read_trace(self): + """ + Gets the next trace from the iterator + + Returns + ------------ + trace + Trace + """ + tree = self.tree + while True: + tree_event, elem = next(self.context) + + if tree_event == _EVENT_START: + parent = tree[elem.getparent()] if elem.getparent() in tree else None + + if elem.tag.endswith(xes_constants.TAG_TRACE): + self.trace = Trace() + tree[elem] = self.trace.attributes + self.reading_trace = True + continue + + if self.reading_trace: + if elem.tag.endswith(xes_constants.TAG_STRING): + if parent is not None: + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), + elem.get(xes_constants.KEY_VALUE), tree) + continue + + elif elem.tag.endswith(xes_constants.TAG_DATE): + try: + dt = self.date_parser.apply(elem.get(xes_constants.KEY_VALUE)) + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), dt, tree) + except TypeError: + logging.info("failed to parse date: " + str(elem.get(xes_constants.KEY_VALUE))) + except ValueError: + logging.info("failed to parse date: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_EVENT): + self.event = Event() + tree[elem] = self.event + continue + + elif elem.tag.endswith(xes_constants.TAG_FLOAT): + if parent is not None: + try: + val = float(elem.get(xes_constants.KEY_VALUE)) + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse float: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_INT): + if parent is not None: + try: + val = int(elem.get(xes_constants.KEY_VALUE)) + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse int: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_BOOLEAN): + if parent is not None: + try: + val0 = elem.get(xes_constants.KEY_VALUE) + val = False + if str(val0).lower() == "true": + val = True + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), val, tree) + except ValueError: + logging.info("failed to parse boolean: " + str(elem.get(xes_constants.KEY_VALUE))) + continue + + elif elem.tag.endswith(xes_constants.TAG_LIST): + if parent is not None: + # lists have no value, hence we put None as a value + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), None, tree) + continue + + elif elem.tag.endswith(xes_constants.TAG_ID): + if parent is not None: + tree = parse_attribute(elem, parent, elem.get(xes_constants.KEY_KEY), + elem.get(xes_constants.KEY_VALUE), tree) + continue + + elif tree_event == _EVENT_END: + if elem in tree: + del tree[elem] + elem.clear() + if elem.getprevious() is not None: + try: + del elem.getparent()[0] + except TypeError: + pass + + if elem.tag.endswith(xes_constants.TAG_EVENT): + if self.trace is not None: + self.trace.append(self.event) + self.event = None + continue + + elif elem.tag.endswith(xes_constants.TAG_TRACE): + self.reading_trace = False + if self.acceptance_condition(self.trace): + return self.trace + continue + + elif elem.tag.endswith(xes_constants.TAG_LOG): + self.reading_log = False + break + + +def apply(path, parameters=None): + """ + Creates a StreamingTraceXesReader object + + Parameters + --------------- + path + Path + parameters + Parameters of the algorithm + + Returns + --------------- + stream_read_obj + Stream reader object + """ + return StreamingTraceXesReader(path, parameters=parameters) diff --git a/pm4py/pm4py/streaming/stream/__init__.py b/pm4py/pm4py/streaming/stream/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b4b42510d7fb18d9dcc9b44ecf8943fc4eff001e --- /dev/null +++ b/pm4py/pm4py/streaming/stream/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.stream import live_event_stream, live_trace_stream diff --git a/pm4py/pm4py/streaming/stream/live_event_stream.py b/pm4py/pm4py/streaming/stream/live_event_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..53aec6999aa854e4c88852960d182f9430366627 --- /dev/null +++ b/pm4py/pm4py/streaming/stream/live_event_stream.py @@ -0,0 +1,99 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import collections +import threading +from concurrent.futures import ThreadPoolExecutor +from enum import Enum +from pm4py.util import exec_utils + + +class StreamState(Enum): + INACTIVE = 1 + ACTIVE = 2 + FINISHED = 3 + + +class Parameters(Enum): + THREAD_POOL_SIZE = "thread_pool_size" + + +class LiveEventStream: + + def __init__(self, parameters=None): + self._dq = collections.deque() + self._state = StreamState.INACTIVE + self._lock = threading.Lock() + self._cond = threading.Condition(self._lock) + self._observers = set() + self._mail_man = None + self._tp = ThreadPoolExecutor(exec_utils.get_param_value(Parameters.THREAD_POOL_SIZE, parameters, 6)) + + def append(self, event): + self._cond.acquire() + if self._state != StreamState.FINISHED: + self._dq.append(event) + self._cond.notify() + self._cond.release() + + def _deliver(self): + while self._state != StreamState.INACTIVE: + self._cond.acquire() + while len(self._dq) == 0: + self._cond.notify() + if self._state != StreamState.FINISHED: + self._cond.wait() + else: + self._cond.release() + return + event = self._dq.popleft() + for algo in self._observers: + self._tp.submit(algo.receive, event) + self._cond.release() + + def start(self): + self._cond.acquire() + self._state = StreamState.ACTIVE + self._mail_man = threading.Thread(target=self._deliver) + self._mail_man.start() + self._cond.release() + + def stop(self): + self._cond.acquire() + while len(self._dq) > 0: + self._cond.wait() + self._tp.shutdown() + if self._state == StreamState.ACTIVE: + self._state = StreamState.FINISHED + self._cond.notify() + self._cond.release() + + def register(self, algo): + self._cond.acquire() + self._observers.add(algo) + self._cond.release() + + async def deregister(self, algo): + self._cond.acquire() + self._observers.remove(algo) + self._cond.release() + + def _get_state(self): + return self._state + + state = property(_get_state) + + diff --git a/pm4py/pm4py/streaming/stream/live_trace_stream.py b/pm4py/pm4py/streaming/stream/live_trace_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..c9e56ec48541d24dc5687d7ad69ce77cd885f17c --- /dev/null +++ b/pm4py/pm4py/streaming/stream/live_trace_stream.py @@ -0,0 +1,99 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import collections +import threading +from concurrent.futures import ThreadPoolExecutor +from enum import Enum +from pm4py.util import exec_utils + + +class StreamState(Enum): + INACTIVE = 1 + ACTIVE = 2 + FINISHED = 3 + + +class Parameters(Enum): + THREAD_POOL_SIZE = "thread_pool_size" + + +class LiveTraceStream: + + def __init__(self, parameters=None): + self._dq = collections.deque() + self._state = StreamState.INACTIVE + self._lock = threading.Lock() + self._cond = threading.Condition(self._lock) + self._observers = set() + self._mail_man = None + self._tp = ThreadPoolExecutor(exec_utils.get_param_value(Parameters.THREAD_POOL_SIZE, parameters, 6)) + + def append(self, event): + self._cond.acquire() + if self._state != StreamState.FINISHED: + self._dq.append(event) + self._cond.notify() + self._cond.release() + + def _deliver(self): + while self._state != StreamState.INACTIVE: + self._cond.acquire() + while len(self._dq) == 0: + self._cond.notify() + if self._state != StreamState.FINISHED: + self._cond.wait() + else: + self._cond.release() + return + event = self._dq.popleft() + for algo in self._observers: + self._tp.submit(algo.receive, event) + self._cond.release() + + def start(self): + self._cond.acquire() + self._state = StreamState.ACTIVE + self._mail_man = threading.Thread(target=self._deliver) + self._mail_man.start() + self._cond.release() + + def stop(self): + self._cond.acquire() + while len(self._dq) > 0: + self._cond.wait() + self._tp.shutdown() + if self._state == StreamState.ACTIVE: + self._state = StreamState.FINISHED + self._cond.notify() + self._cond.release() + + def register(self, algo): + self._cond.acquire() + self._observers.add(algo) + self._cond.release() + + async def deregister(self, algo): + self._cond.acquire() + self._observers.remove(algo) + self._cond.release() + + def _get_state(self): + return self._state + + state = property(_get_state) + + diff --git a/pm4py/pm4py/streaming/util/__init__.py b/pm4py/pm4py/streaming/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6a8a9a3f654a541f64d88aa666b3c5ea3e569206 --- /dev/null +++ b/pm4py/pm4py/streaming/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.util import dictio, event_stream_printer, trace_stream_printer diff --git a/pm4py/pm4py/streaming/util/dictio/__init__.py b/pm4py/pm4py/streaming/util/dictio/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bdc2e9be9162d51c26bb32d7edac422e63612368 --- /dev/null +++ b/pm4py/pm4py/streaming/util/dictio/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.util.dictio import versions, generator diff --git a/pm4py/pm4py/streaming/util/dictio/generator.py b/pm4py/pm4py/streaming/util/dictio/generator.py new file mode 100644 index 0000000000000000000000000000000000000000..3dc9b9bd9d6d0198511113535b49d88cebe4bda7 --- /dev/null +++ b/pm4py/pm4py/streaming/util/dictio/generator.py @@ -0,0 +1,49 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + +from pm4py.streaming.util.dictio.versions import classic, thread_safe, redis +from pm4py.util import exec_utils + + +class Variants(Enum): + CLASSIC = classic + THREAD_SAFE = thread_safe + REDIS = redis + + +DEFAULT_VARIANT = Variants.THREAD_SAFE + + +def apply(variant=DEFAULT_VARIANT, parameters=None): + """ + Generates a Python dictionary object + (different implementations are possible) + + Parameters + ---------------- + variant + Variant to use + parameters + Parameters to use in the generation + + Returns + ----------------- + dictio + Dictionary + """ + return exec_utils.get_variant(variant).apply(parameters=parameters) diff --git a/pm4py/pm4py/streaming/util/dictio/versions/__init__.py b/pm4py/pm4py/streaming/util/dictio/versions/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e2a505eb3535e86272c4c849750a01b9526a0747 --- /dev/null +++ b/pm4py/pm4py/streaming/util/dictio/versions/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.util.dictio.versions import classic, thread_safe diff --git a/pm4py/pm4py/streaming/util/dictio/versions/classic.py b/pm4py/pm4py/streaming/util/dictio/versions/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..83b945ded091787d258f0a9b445e816570c8f874 --- /dev/null +++ b/pm4py/pm4py/streaming/util/dictio/versions/classic.py @@ -0,0 +1,25 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def apply(parameters=None): + """ + Returns an object that is the classic + implementation of a Python dictionary + """ + if parameters is None: + parameters = {} + + return dict() diff --git a/pm4py/pm4py/streaming/util/dictio/versions/redis.py b/pm4py/pm4py/streaming/util/dictio/versions/redis.py new file mode 100644 index 0000000000000000000000000000000000000000..1f1d708c2e1fdf98fe9be40bc2401dde669f3ef2 --- /dev/null +++ b/pm4py/pm4py/streaming/util/dictio/versions/redis.py @@ -0,0 +1,109 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from threading import Lock +from typing import Optional, Dict, Any + +from pm4py.util import exec_utils + + +class Parameters(Enum): + HOSTNAME = "hostname" + PORT = "port" + DICT_ID = "dict_id" + + +class ThreadSafeRedisDict(dict): + def __init__(self, redis_connection, *args, **kw): + super(ThreadSafeRedisDict, self).__init__(*args, **kw) + self.redis_connection = redis_connection + self.lock = Lock() + + def __setitem__(self, key, value): + # TODO: what should happen to the order if + # the key is already in the dict + self.lock.acquire() + self.redis_connection[key] = value + super(ThreadSafeRedisDict, self).__setitem__(key, value) + self.lock.release() + + def __iter__(self): + self.lock.acquire() + ret = iter(list(self.redis_connection.keys())) + self.lock.release() + return ret + + def keys(self): + self.lock.acquire() + ret = list(self.redis_connection.keys()) + self.lock.release() + return ret + + def values(self): + self.lock.acquire() + ret = self.redis_connection.values() + self.lock.release() + return ret + + def itervalues(self): + self.lock.acquire() + ret = self.redis_connection.itervalues() + self.lock.release() + return ret + + def flushdb(self): + self.lock.acquire() + self.redis_connection.flushdb() + self.lock.release() + + def flushall(self): + self.lock.acquire() + self.redis_connection.flushall() + self.lock.release() + + +# typing not applied, since redis is not installed by default +# anyhow, the type of the returned "r" is redis.redis.Redis +def apply(parameters: Optional[Dict[Any, Any]] = None): + """ + Create a Python dictionary supported by a Redis database + + Parameters + -------------- + parameters + Parameters of the algorithm, including: + - Parameters.HOSTNAME => hostname of the connection to Redis (default: 127.0.0.1) + - Parameters.PORT => port of the connection to Redis (default: 6379) + - Parameters.DICT_ID => integer identifier of the specific dictionary in Redis (default: 0) + + Returns + -------------- + r + Redis (Python-like) dictionary + """ + if parameters is None: + parameters = {} + + import redis + + hostname = exec_utils.get_param_value(Parameters.HOSTNAME, parameters, "127.0.0.1") + port = exec_utils.get_param_value(Parameters.PORT, parameters, 6379) + dict_id = exec_utils.get_param_value(Parameters.DICT_ID, parameters, 0) + + r = redis.StrictRedis(host=hostname, port=port, db=dict_id, decode_responses=True) + + return ThreadSafeRedisDict(r) diff --git a/pm4py/pm4py/streaming/util/dictio/versions/thread_safe.py b/pm4py/pm4py/streaming/util/dictio/versions/thread_safe.py new file mode 100644 index 0000000000000000000000000000000000000000..7492c77dee484fe2625734bc2ebf9f823b3aaf64 --- /dev/null +++ b/pm4py/pm4py/streaming/util/dictio/versions/thread_safe.py @@ -0,0 +1,60 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from threading import Lock +from typing import Optional, Dict, Any, Union + + +class ThreadSafeDict(dict): + def __init__(self, *args, **kw): + super(ThreadSafeDict, self).__init__(*args, **kw) + self.lock = Lock() + self.itemlist = super(ThreadSafeDict, self).keys() + + def __setitem__(self, key, value): + # TODO: what should happen to the order if + # the key is already in the dict + self.lock.acquire() + super(ThreadSafeDict, self).__setitem__(key, value) + self.lock.release() + + def __iter__(self): + self.lock.acquire() + ret = iter(self.itemlist) + self.lock.release() + return ret + + def keys(self): + self.lock.acquire() + ret = set(self.itemlist) + self.lock.release() + return ret + + def values(self): + self.lock.acquire() + ret = [self[key] for key in self] + self.lock.release() + return ret + + def itervalues(self): + self.lock.acquire() + ret = (self[key] for key in self) + self.lock.release() + return ret + + +def apply(parameters: Optional[Dict[Any, Any]] = None): + return ThreadSafeDict() diff --git a/pm4py/pm4py/streaming/util/event_stream_printer.py b/pm4py/pm4py/streaming/util/event_stream_printer.py new file mode 100644 index 0000000000000000000000000000000000000000..9504aaf8d42049594db6ed894a61d5b52bdf1d53 --- /dev/null +++ b/pm4py/pm4py/streaming/util/event_stream_printer.py @@ -0,0 +1,28 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.interface import StreamingAlgorithm + + +class EventStreamPrinter(StreamingAlgorithm): + def __init__(self): + StreamingAlgorithm.__init__(self) + + def _process(self, event): + print("event received:", event) + + def _current_result(self): + pass diff --git a/pm4py/pm4py/streaming/util/live_to_static_stream.py b/pm4py/pm4py/streaming/util/live_to_static_stream.py new file mode 100644 index 0000000000000000000000000000000000000000..aa3f1d378e4a9b052aad2043da834454bd5d3dbc --- /dev/null +++ b/pm4py/pm4py/streaming/util/live_to_static_stream.py @@ -0,0 +1,32 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.interface import StreamingAlgorithm +from pm4py.objects.log.obj import EventStream + + +class LiveToStaticStream(StreamingAlgorithm): + static_stream = None + + def __init__(self): + self.static_stream = EventStream() + StreamingAlgorithm.__init__(self) + + def _process(self, event): + self.static_stream.append(event) + + def _current_result(self): + return self.static_stream diff --git a/pm4py/pm4py/streaming/util/trace_stream_printer.py b/pm4py/pm4py/streaming/util/trace_stream_printer.py new file mode 100644 index 0000000000000000000000000000000000000000..bcddaddba78f1c7ad2031c48e177d94fae276a67 --- /dev/null +++ b/pm4py/pm4py/streaming/util/trace_stream_printer.py @@ -0,0 +1,28 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.streaming.algo.interface import StreamingAlgorithm + + +class TraceStreamPrinter(StreamingAlgorithm): + def __init__(self): + StreamingAlgorithm.__init__(self) + + def _process(self, trace): + print("trace received:", trace) + + def _current_result(self): + pass diff --git a/pm4py/pm4py/util/__init__.py b/pm4py/pm4py/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0a83a9ebd3b2831d36f7a60816a38e5989d1a4cb --- /dev/null +++ b/pm4py/pm4py/util/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils, constants, xes_constants, pandas_utils, nx_utils, lp, variants_util, points_subset, business_hours, vis_utils, \ + dt_parsing, colors, typing, compression diff --git a/pm4py/pm4py/util/business_hours.py b/pm4py/pm4py/util/business_hours.py new file mode 100644 index 0000000000000000000000000000000000000000..40482669ef452baa2d0225a63028cc0f27e86fd3 --- /dev/null +++ b/pm4py/pm4py/util/business_hours.py @@ -0,0 +1,116 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import math +from datetime import timedelta, datetime, time +from typing import List, Tuple + +from pm4py.util import constants +from pm4py.util.dt_parsing.variants import strpfromiso + + +def soj_time_business_hours_diff(st: datetime, et: datetime, business_hour_slots: List[Tuple[int]], + work_calendar=constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR) -> float: + """ + Calculates the difference between the provided timestamps based on the business hours + + Parameters + ----------------- + st + Start timestamp + et + Complete timestamp + business_hour_slots + work schedule of the company, provided as a list of tuples where each tuple represents one time slot of business + hours. One slot i.e. one tuple consists of one start and one end time given in seconds since week start, e.g. + [ + (7 * 60 * 60, 17 * 60 * 60), + ((24 + 7) * 60 * 60, (24 + 12) * 60 * 60), + ((24 + 13) * 60 * 60, (24 + 17) * 60 * 60), + ] + meaning that business hours are Mondays 07:00 - 17:00 and Tuesdays 07:00 - 12:00 and 13:00 - 17:00 + work_calendar + work calendar (it permits querying if a given day is a working day in a given culture) + + Returns + ----------------- + diff + Difference in business hours + """ + bh = BusinessHours(st, et, + business_hour_slots=business_hour_slots, work_calendar=work_calendar) + return bh.get_seconds() + + +def get_overlapping_time(timespan1_begin: datetime, timespan1_end: datetime, + timespan2_begin: datetime, timespan2_end: datetime) -> float: + latest_start = max(timespan1_begin, timespan2_begin) + earliest_end = min(timespan1_end, timespan2_end) + delta = (earliest_end - latest_start).total_seconds() + overlap = max(0.0, delta) + return overlap + + +class BusinessHours: + def __init__(self, datetime1, datetime2, **kwargs): + self.datetime1 = datetime1.replace(tzinfo=None) + self.datetime2 = datetime2.replace(tzinfo=None) + + self.business_hour_slots = kwargs[ + "business_hour_slots"] if "business_hour_slots" in kwargs else constants.DEFAULT_BUSINESS_HOUR_SLOTS + + # union of business hour slots in order to avoid overlapping business hours + self.business_hour_slots_unified = [] + for begin, end in sorted(self.business_hour_slots): + if self.business_hour_slots_unified and self.business_hour_slots_unified[-1][1] >= begin - 1: + self.business_hour_slots_unified[-1][1] = max(self.business_hour_slots_unified[-1][1], end) + else: + self.business_hour_slots_unified.append([begin, end]) + + # work calendar (it permits querying if a given day is a working day in a given culture) - not used yet + self.work_calendar = kwargs[ + "work_calendar"] if "work_calendar" in kwargs else constants.DEFAULT_BUSINESS_HOURS_WORKCALENDAR + + def get_seconds(self): + sum = 0 + week_start = self.datetime1.date() - timedelta(days=self.datetime1.weekday()) + + for bhs, bhe in self.business_hour_slots_unified: + begin_day_of_week = math.floor(bhs / 60 / 60 / 24) + begin_seconds_of_day = bhs - 24 * 60 * 60 * begin_day_of_week + bh_start = datetime.combine(week_start, time.min) + timedelta(days=begin_day_of_week) + timedelta( + seconds=begin_seconds_of_day) + + end_day_of_week = math.floor(bhe / 60 / 60 / 24) + end_seconds_of_day = bhe - 24 * 60 * 60 * end_day_of_week + bh_end = datetime.combine(week_start, time.min) + timedelta(days=end_day_of_week) + timedelta( + seconds=end_seconds_of_day) + + overlapping_time = get_overlapping_time(self.datetime1, self.datetime2, bh_start, bh_end) + sum += overlapping_time + + while True: + bh_start += timedelta(days=7) + bh_end += timedelta(days=7) + + overlapping_time = get_overlapping_time(self.datetime1, self.datetime2, bh_start, bh_end) + + if overlapping_time <= 0: + break + + sum += overlapping_time + + return sum diff --git a/pm4py/pm4py/util/colors.py b/pm4py/pm4py/util/colors.py new file mode 100644 index 0000000000000000000000000000000000000000..da7cb19e6bdf9e3d9da7d481655ee207082dff44 --- /dev/null +++ b/pm4py/pm4py/util/colors.py @@ -0,0 +1,86 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def get_corr_hex(num): + """ + Gets correspondence between a number + and an hexadecimal string + + Parameters + ------------- + num + Number + + Returns + ------------- + hex_string + Hexadecimal string + """ + if num < 10: + return str(int(num)) + elif num < 11: + return "A" + elif num < 12: + return "B" + elif num < 13: + return "C" + elif num < 14: + return "D" + elif num < 15: + return "E" + elif num < 16: + return "F" + + +def get_transitions_color(count_move_on_model, count_fit): + """ + Gets the color associated to the transition + + Parameters + ------------ + count_move_on_model + Number of move on models + count_fit + Number of fit moves + + Returns + ----------- + color + Color associated to the transition + """ + factor = int(255.0 * float(count_fit) / float(count_move_on_model + count_fit + 0.00001)) + first = get_corr_hex(int(factor / 16)) + second = get_corr_hex(factor % 16) + return "#FF" + first + second + first + second + + +def get_string_from_int_below_255(factor): + """ + Gets a string from an integer below 255 + + Parameters + --------------- + factor + Factor + + Returns + --------------- + stru + Length 2 string + """ + first = get_corr_hex(int(factor / 16)) + second = get_corr_hex(factor % 16) + return first + second diff --git a/pm4py/pm4py/util/compression/__init__.py b/pm4py/pm4py/util/compression/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9320e5d3fa4f62635d87c448e4150de7d5f7cbbb --- /dev/null +++ b/pm4py/pm4py/util/compression/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.compression import dtypes, util \ No newline at end of file diff --git a/pm4py/pm4py/util/compression/dtypes.py b/pm4py/pm4py/util/compression/dtypes.py new file mode 100644 index 0000000000000000000000000000000000000000..062793b53123e1455ddaa55599594a5e3695a3b1 --- /dev/null +++ b/pm4py/pm4py/util/compression/dtypes.py @@ -0,0 +1,35 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import List, Tuple, Any, Counter + +UnivariateCompressedTrace = List[Any] +MultivariateCompressedTrace = List[Tuple[Any]] +UCT = UnivariateCompressedTrace +MCT = MultivariateCompressedTrace + +UnivariateCompressedLog = List[UCT] +MultivariateCompressedLog = List[MCT] +UCL = UnivariateCompressedLog +MCL = MultivariateCompressedLog + +UnivariateLookupTable = List[Any] +ULT = UnivariateLookupTable +MultivariateLookupTable = List[List[Any]] +MLT = MultivariateLookupTable + +UnivariateVariantCompressedLog = Counter[Tuple[Any]] +UVCL = UnivariateVariantCompressedLog diff --git a/pm4py/pm4py/util/compression/util.py b/pm4py/pm4py/util/compression/util.py new file mode 100644 index 0000000000000000000000000000000000000000..c46c7ad8ec7b202820542feaa7e6ce9cdfe5900c --- /dev/null +++ b/pm4py/pm4py/util/compression/util.py @@ -0,0 +1,251 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import copy +from collections import Counter +from typing import Union, Tuple, List, Any, Dict, Optional, Counter as TCounter + +import numpy as np +import pandas as pd + +from pm4py.objects.dfg.obj import DFG +from pm4py.objects.log.obj import EventLog +from pm4py.util.compression.dtypes import UCL, MCL, ULT, MLT, UVCL +from pm4py.util import pandas_utils + + +def project_univariate(log: Union[EventLog, pd.DataFrame], key: str = 'concept:name', + df_glue: str = 'case:concept:name', df_sorting_criterion_key='time:timestamp') -> Optional[UCL]: + ''' + Projects an event log to a univariate list of values + For example, an event log of the form [[('concept:name':A,'k1':v1,'k2':v2),('concept:name':B,'k1':v3,'k2':v4),...],...] + is converted to [['A','B',...],...] + + The method returns the compressed log + + :rtype: ``UCL`` + :param log: log to compress (either EventLog or Dataframe) + :param key: key to use for compression + :param df_glue: key to use for combining events into traces when the input is a dataframe. + :param df_sorting_criterion_key: key to use as a sorting criterion for traces (typically timestamps) + ''' + if type(log) is EventLog: + return [[e[key] for e in t] for t in log] + else: + log = log.loc[:, [key, df_glue, df_sorting_criterion_key]] + + cl = list() + log = log.sort_values(by=[df_glue, df_sorting_criterion_key]) + values = log[key].to_numpy().tolist() + distinct_ids, start_indexes, case_sizes = np.unique( + log[df_glue].to_numpy(), return_index=True, return_counts=True) + for i in range(len(distinct_ids)): + cl.append( + values[start_indexes[i]:start_indexes[i] + case_sizes[i]]) + return cl + return None + + +def compress_univariate(log: Union[EventLog, pd.DataFrame], key: str = 'concept:name', + df_glue: str = 'case:concept:name', + df_sorting_criterion_key='time:timestamp') -> Optional[Tuple[UCL, ULT]]: + """ + Compresses an event log to a univariate list of integer lists + For example, an event log of the form [[('concept:name':A,'k1':v1,'k2':v2),('concept:name':B,'k1':v3,'k2':v4),...],...] + is converted to [[0,1,...],...] with corresponding lookup table ['A', 'B'], i.e., if the 'concept:name' column is used + for comperssion. + + The method returns a tuple containing the compressed log and the lookup table + + :rtype: ``Tuple[UCL,ULT]`` + :param log: log to compress (either EventLog or Dataframe) + :param key: key to use for compression + :param df_glue: key to use for combining events into traces when the input is a dataframe. + :param df_sorting_criterion_key: key to use as a sorting criterion for traces (typically timestamps) + """ + if pandas_utils.check_is_pandas_dataframe(log): + log = log.loc[:, [key, df_glue, df_sorting_criterion_key]] + lookup = list(set([x for xs in [[e[key] for e in t] for t in log] + for x in xs])) if type(log) is EventLog else pandas_utils.format_unique(log[key].unique()) + lookup_inv = {lookup[i]: i for i in range(len(lookup))} + if type(log) is EventLog: + return [[lookup_inv[t[i][key]] for i in range(0, len(t))] for t in log], lookup + else: + log[key] = log[key].map(lookup_inv) + cl = list() + log = log.sort_values(by=[df_glue, df_sorting_criterion_key]) + encoded_values = log[key].to_numpy().tolist() + distinct_ids, start_indexes, case_sizes = np.unique( + log[df_glue].to_numpy(), return_index=True, return_counts=True) + for i in range(len(distinct_ids)): + cl.append(encoded_values[start_indexes[i] + :start_indexes[i] + case_sizes[i]]) + return cl, lookup + return None, None + + +def compress_multivariate(log: Union[EventLog, pd.DataFrame], keys: List[str] = ['concept:name'], + df_glue: str = 'case:concept:name', + df_sorting_criterion_key: str = 'time:timestamp', uncompressed: List[str] = []) -> Tuple[ + MCL, MLT]: + """ + Compresses an event log to a list of lists containing tupes of integers. + For example, an event log of the form [[('concept:name':A,'k1':v1,'k2':v2),('concept:name':B,'k1':v3,'k2':v4),...],...] + is converted to [[(0,0),(1,1),...],...] with corresponding lookup table ['A', 'B'], i.e., if the 'concept:name' and 'k1' columns are used + for comperssion. + The 2nd order criterion is used to sort the values that have the same trace attribute. + The uncompressed arguments will be included, yet, not compressed (e.g., a boolean value needs not to be compressed) + + The method returns a tuple containing the compressed log and the lookup table. The order of the data in the compressed log follows the ordering of the provided keys. First the compressed columns are stored, secondly the uncompressed columns + + :rtype: ``Tuple[MCL,MLT]`` + :param log: log to compress (either EventLog or Dataframe) + :param keys: keys to use for compression + :param df_glue: key to use for combining events into traces when the input is a dataframe. + :param df_sorting_criterion_key: key to use as a sorting criterion for traces (typically timestamps) + :param uncompressed: columns that need to be included in the compression yet need not to be compressed + + """ + if pandas_utils.check_is_pandas_dataframe(log): + retain = copy.copy(keys) + if df_glue not in retain: + retain.append(df_glue) + if df_sorting_criterion_key not in retain: + retain.append(df_sorting_criterion_key) + retain.extend([u for u in uncompressed if u not in retain]) + log = log.loc[:, retain] + lookup = dict() + lookup_inv = dict() + for key in keys: + if key not in uncompressed: + lookup[key] = list(set([x for xs in [[e[key] for e in t] for t in log] + for x in xs])) if type(log) is EventLog else pandas_utils.format_unique(log[key].unique()) + lookup_inv[key] = {lookup[key][i]: i for i in range(len(lookup[key]))} + if type(log) is EventLog: + encoded = list() + for t in log: + tr = list() + for i in range(0, len(t)): + vec = [] + for key in keys: + vec.append(lookup_inv[key][t[i][key]]) + for key in uncompressed: + vec.append(t[i][key]) + tr.append(tuple(vec)) + encoded.append(tr) + return encoded, lookup + else: + for key in keys: + log[key] = log[key].map(lookup_inv[key]) + cl = list() + log = log.sort_values(by=[df_glue, df_sorting_criterion_key]) + retain = copy.copy(keys) + retain.extend([u for u in uncompressed if u not in retain]) + encoded_values = list(log[retain].itertuples(index=False, name=None)) + distinct_ids, start_indexes, case_sizes = np.unique( + log[df_glue].to_numpy(), return_index=True, return_counts=True) + for i in range(len(distinct_ids)): + cl.append(encoded_values[start_indexes[i] + :start_indexes[i] + case_sizes[i]]) + return cl, lookup + + +def discover_dfg(log: Union[UCL, MCL], index: int = 0) -> DFG: + """ + Discover a DFG object from a compressed event log (either univariate or multivariate) + The DFG object represents a counter of integer pairs + + :rtype: ``Counter[Tuple[int, int]]`` + :param log: compressed event log (either uni or multivariate) + :param indes: index to use for dfg discovery in case of using an multivariate log + """ + log = _map_log_to_single_index(log, index) + dfg = DFG() + [dfg.graph.update([(t[i], t[i + 1])]) for t in log for i in range(0, len(t) - 1) if len(t)] + dfg.start_activities.update(get_start_activities(log, index)) + dfg.end_activities.update(get_end_activities(log, index)) + return dfg + + +def discover_dfg_uvcl(log: UVCL) -> DFG: + dfg = DFG() + [dfg.graph.update({(t[i], t[i + 1]): log[t]}) for t in log for i in range(0, len(t) - 1) if len(t)] + for a in get_alphabet(log): + for t in log: + if len(t) > 0: + if t[0] == a: + dfg.start_activities.update({a: log[t]}) + if t[len(t) - 1] == a: + dfg.end_activities.update({a: log[t]}) + return dfg + + +def get_start_activities(log: Union[UCL, MCL, UVCL], index: int = 0) -> TCounter[Any]: + log = _map_log_to_single_index(log, index) + starts = Counter() + starts.update(map(lambda t: t[0], filter(lambda t: len(t) > 0, log))) + return starts + + +def get_end_activities(log: Union[UCL, MCL, UVCL], index: int = 0) -> TCounter[Any]: + log = _map_log_to_single_index(log, index) + ends = Counter() + ends.update(map(lambda t: t[len(t) - 1], filter(lambda t: len(t) > 0, log))) + return ends + + +def get_alphabet(log: Union[UCL, MCL, UVCL], index: int = 0): + log = _map_log_to_single_index(log, index) + sorted_set = sorted(set([e for t in log for e in t])) + return sorted_set + + +def get_variants(log: Union[UCL, MCL], index: int = 0) -> UVCL: + log = _map_log_to_single_index(log, index) + return Counter(map(lambda t: tuple(t), log)) + + +def _map_log_to_single_index(log: Union[UCL, MCL, UVCL], i: int): + return [list(map(lambda v: v[i], t)) for t in log] if type(log) is MCL else log + + +def msd(ucl: Union[UCL, UVCL]) -> Dict[Any, int]: + msd = dict() + for a in get_alphabet(ucl): + activity_indices = list( + filter(lambda t: len(t) > 1, map(lambda t: [i for i, x in enumerate(t) if x == a], ucl))) + if len(activity_indices) > 0: + msd[a] = min([i for l in map(lambda t: [ + t[i - 1] - t[i] - 1 for i in range(len(t)) if i > 0], activity_indices) for i in l]) + return msd + + +def msdw(cl: Union[UCL, UVCL], msd: Dict[Any, int]) -> Dict[Any, Any]: + witnesses = dict() + alphabet = get_alphabet(cl) + for a in alphabet: + if a in msd and msd[a] > 0: + witnesses[a] = set() + else: + continue + for t in cl: + if len(list(filter(lambda e: e == a, t))) > 1: + indices = [i for i, x in enumerate(t) if x == a] + for i in range(len(indices) - 1): + if indices[i + 1] - indices[i] - 1 == msd[a]: + for b in t[indices[i] + 1:indices[i + 1]]: + witnesses[a].add(b) + return witnesses diff --git a/pm4py/pm4py/util/constants.py b/pm4py/pm4py/util/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..264ec9a810cd11d9d50cef2f1fb0aefe95677a27 --- /dev/null +++ b/pm4py/pm4py/util/constants.py @@ -0,0 +1,168 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import os +import importlib.util +from enum import Enum + + +def get_param_from_env(name, default): + if name in os.environ and os.environ[name]: + return str(os.environ[name]) + return default + + +TEST_CUDF_DATAFRAMES_ENVIRONMENT = get_param_from_env("PM4PY_TEST_CUDF_DATAFRAMES_ENVIRONMENT", False) + + +def get_default_timestamp_format(): + if importlib.util.find_spec("cudf") or TEST_CUDF_DATAFRAMES_ENVIRONMENT: + return "%Y-%m-%d %H:%M:%S" + pass + + return None + + +def get_default_xes_timestamp_format(): + if importlib.util.find_spec("cudf") or TEST_CUDF_DATAFRAMES_ENVIRONMENT: + return "%Y-%m-%dT%H:%M:%S" + pass + + return "ISO8601" + + +def get_default_is_aware_enabled(): + if importlib.util.find_spec("cudf") or TEST_CUDF_DATAFRAMES_ENVIRONMENT: + return False + pass + + return True + + +PARAMETER_CONSTANT_ACTIVITY_KEY = 'pm4py:param:activity_key' +PARAMETER_CONSTANT_ATTRIBUTE_KEY = "pm4py:param:attribute_key" +PARAMETER_CONSTANT_TIMESTAMP_KEY = 'pm4py:param:timestamp_key' +PARAMETER_CONSTANT_START_TIMESTAMP_KEY = 'pm4py:param:start_timestamp_key' +PARAMETER_CONSTANT_CASEID_KEY = 'pm4py:param:case_id_key' +PARAMETER_CONSTANT_RESOURCE_KEY = 'pm4py:param:resource_key' +PARAMETER_CONSTANT_TRANSITION_KEY = 'pm4py:param:transition_key' +PARAMETER_CONSTANT_GROUP_KEY = 'pm4py:param:group_key' + +GROUPED_DATAFRAME = 'grouped_dataframe' +RETURN_EA_COUNT_DICT_AUTOFILTER = 'return_ea_count_dict_autofilter' +PARAM_MOST_COMMON_VARIANT = "most_common_variant" +PARAM_MOST_COMMON_PATHS = "most_common_paths" + +CASE_CONCEPT_NAME = "case:concept:name" +CASE_ATTRIBUTE_GLUE = 'case:concept:name' +CASE_ATTRIBUTE_PREFIX = 'case:' + +# the following can be removed +PARAMETER_KEY_CASE_GLUE = 'case_id_glue' +PARAMETER_KEY_CASE_ATTRIBUTE_PRFIX = 'case:' + +STOCHASTIC_DISTRIBUTION = "stochastic_distribution" +LAYOUT_INFORMATION_PETRI = "layout_information_petri" +PLACE_NAME_TAG = "place_name_tag" +TRANS_NAME_TAG = "trans_name_tag" + +DEFAULT_VARIANT_SEP = "," +DEFAULT_INDEX_KEY = "@@index" +DEFAULT_CASE_INDEX_KEY = "@@case_index" +DEFAULT_INDEX_IN_TRACE_KEY = "@@index_in_trace" +DEFAULT_EVENT_INDEX_KEY = "@@event_index" +DEFAULT_FLOW_TIME = "@@flow_time" +DEFAULT_CLASSIFIER_ATTRIBUTE = "@@classifier" + +DEFAULT_ENCODING = get_param_from_env("PM4PY_DEFAULT_ENCODING", "utf-8") +DEFAULT_XES_PARSER = get_param_from_env("PM4PY_DEFAULT_XES_PARSER", "iterparse" if importlib.util.find_spec("lxml") else "chunk_regex") +DEFAULT_ALIGNMENTS_VARIANT = get_param_from_env("PM4PY_DEFAULT_ALIGNMENTS_VARIANT", "Variants.VERSION_STATE_EQUATION_A_STAR") + +PARAM_ARTIFICIAL_START_ACTIVITY = "pm4py:param:art_start_act" +PARAM_ARTIFICIAL_END_ACTIVITY = "pm4py:param:art_end_act" +DEFAULT_ARTIFICIAL_START_ACTIVITY = "▶" +DEFAULT_ARTIFICIAL_END_ACTIVITY = "■" + +DEFAULT_BUSINESS_HOURS_WORKCALENDAR = None + +SHOW_EVENT_LOG_DEPRECATION = True if get_param_from_env("PM4PY_SHOW_EVENT_LOG_DEPRECATION", "False").lower() == "true" else False +SHOW_INTERNAL_WARNINGS = True if get_param_from_env("PM4PY_SHOW_INTERNAL_WARNINGS", "True").lower() == "true" else False + +TRIGGERED_DT_PARSING_WARNING = False + +DEFAULT_BGCOLOR = get_param_from_env("PM4PY_DEFAULT_BGCOLOR", "white") +DEFAULT_FORMAT_GVIZ_VIEW = get_param_from_env("PM4PY_DEFAULT_FORMAT_GVIZ_VIEW", "png") +DEFAULT_RANKDIR_GVIZ = get_param_from_env("PM4PY_DEFAULT_RANKDIR_GVIZ", "LR") +DEFAULT_TIMESTAMP_PARSE_FORMAT = get_param_from_env("PM4PY_DEFAULT_TIMESTAMP_PARSE_FORMAT", get_default_timestamp_format()) +DEFAULT_XES_TIMESTAMP_PARSE_FORMAT = get_param_from_env("PM4PY_DEFAULT_XES_TIMESTAMP_PARSE_FORMAT", get_default_xes_timestamp_format()) + +ENABLE_MULTIPROCESSING_DEFAULT = True if get_param_from_env("PM4PY_ENABLE_MULTIPROCESSING_DEFAULT", "False").lower() == "true" else False +SHOW_PROGRESS_BAR = True if get_param_from_env("PM4PY_SHOW_PROGRESS_BAR", "True").lower() == "true" else False +DEFAULT_READ_XES_LEGACY_OBJECT = True if get_param_from_env("PM4PY_DEFAULT_READ_XES_LEGACY_OBJECT", "False").lower() == "true" else False +DEFAULT_RETURN_DIAGNOSTICS_DATAFRAME = True if get_param_from_env("PM4PY_DEFAULT_RETURN_DIAGNOSTICS_DATAFRAME", "False").lower() == "true" else False +DEFAULT_PANDAS_PARSING_DTYPE_BACKEND = get_param_from_env("PM4PY_DEFAULT_PANDAS_PARSING_DTYPE_BACKEND", "numpy_nullable") +ENABLE_DATETIME_COLUMNS_AWARE = get_param_from_env("PM4PY_ENABLE_DATETIME_COLUMNS_AWARE", get_default_is_aware_enabled()) + +# Default business hour slots: Mondays to Fridays, 7:00 - 17:00 (in seconds) +DEFAULT_BUSINESS_HOUR_SLOTS = [ + ((0 * 24 + 7) * 60 * 60, (0 * 24 + 17) * 60 * 60), + ((1 * 24 + 7) * 60 * 60, (1 * 24 + 17) * 60 * 60), + ((2 * 24 + 7) * 60 * 60, (2 * 24 + 17) * 60 * 60), + ((3 * 24 + 7) * 60 * 60, (3 * 24 + 17) * 60 * 60), + ((4 * 24 + 7) * 60 * 60, (4 * 24 + 17) * 60 * 60), +] + +OPENAI_MAX_LEN = int(get_param_from_env("PM4PY_OPENAI_MAX_LEN", "10000")) +OPENAI_API_KEY = get_param_from_env("PM4PY_OPENAI_API_KEY", None) +OPENAI_API_URL = get_param_from_env("PM4PY_OPENAI_API_URL", "https://api.openai.com/v1/") +OPENAI_DEFAULT_MODEL = get_param_from_env("PM4PY_OPENAI_DEFAULT_MODEL", "gpt-4o") +OPENAI_DEFAULT_VISION_MODEL = get_param_from_env("PM4PY_OPENAI_DEFAULT_VISION_MODEL", "gpt-4o") +OPENAI_DEFAULT_STT_MODEL = get_param_from_env("PM4PY_OPENAI_DEFAULT_STT_MODEL", "whisper-1") +OPENAI_DEFAULT_TTS_MODEL = get_param_from_env("PM4PY_OPENAI_DEFAULT_TTS_MODEL", "tts-1") +OPENAI_DEFAULT_TTS_VOICE = get_param_from_env("PM4PY_OPENAI_DEFAULT_TTS_VOICE", "alloy") + +OPENAI_EXEC_RESULT = True if get_param_from_env("PM4PY_OPENAI_EXEC_RESULT", "False").lower() == "true" else False +DEFAULT_GVIZ_VIEW = get_param_from_env("PM4PY_DEFAULT_GVIZ_VIEW", None) +DEFAULT_ENABLE_VISUALIZATIONS_VIEW = get_param_from_env("PM4PY_DEFAULT_ENABLE_VISUALIZATIONS_VIEW", True) + +JQUERY_LINK = "https://code.jquery.com/jquery-3.6.3.min.js" +GRAPHVIZJS_LINK = "https://github.com/mdaines/viz-js/releases/download/v1.8.2/viz.js" + +if importlib.util.find_spec("psutil"): + import psutil + + parent_pid = os.getppid() + try: + parent_name = str(psutil.Process(parent_pid).name()) + except psutil.NoSuchProcess: + parent_name = "UnknownProcess" + + if "PBIDesktop" in parent_name: + DEFAULT_GVIZ_VIEW = "matplotlib_view" + + +if DEFAULT_GVIZ_VIEW is None: + DEFAULT_GVIZ_VIEW = "view" + + +class AvailableSerializations(Enum): + EVENT_LOG = "event_log" + DATAFRAME = "dataframe" + PETRI_NET = "petri_net" + PROCESS_TREE = "process_tree" + BPMN = "bpmn" + DFG = "dfg" diff --git a/pm4py/pm4py/util/dt_parsing/__init__.py b/pm4py/pm4py/util/dt_parsing/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..efef1f944d163948ebde0ffcabc8b6877b1eab33 --- /dev/null +++ b/pm4py/pm4py/util/dt_parsing/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.dt_parsing import parser, variants diff --git a/pm4py/pm4py/util/dt_parsing/parser.py b/pm4py/pm4py/util/dt_parsing/parser.py new file mode 100644 index 0000000000000000000000000000000000000000..6eb9222d981438931aa282af50ff9e25fe739348 --- /dev/null +++ b/pm4py/pm4py/util/dt_parsing/parser.py @@ -0,0 +1,81 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +import importlib.util +import warnings +from pm4py.util import constants + + +CISO8601 = "ciso8601" +STRPFROMISO = "strpfromiso" +DUMMY = "dummy" + +VERSIONS = {} + + +from pm4py.util.dt_parsing.variants import dummy +VERSIONS[DUMMY] = dummy +# this option should never be used, except in particular situations +# (problematic Python <= 3.4,3.5,3.6 environments) +DEFAULT_VARIANT = DUMMY + + +# this variant is available only for Python 3.7 and greater +if sys.version_info >= (3, 7): + from pm4py.util.dt_parsing.variants import strpfromiso + + VERSIONS[STRPFROMISO] = strpfromiso + + DEFAULT_VARIANT = STRPFROMISO + +if importlib.util.find_spec("ciso8601"): + # ciso8601 variant is included only if ciso8601 installed + # slowly it will fade out of the default since now Python + # in the default package includes an equally performing library + # + # ciso8601 will be installed from requirements only if the Python + # version is <= than 3.6 + from pm4py.util.dt_parsing.variants import cs8601 + + VERSIONS[CISO8601] = cs8601 + DEFAULT_VARIANT = CISO8601 + + +def get(variant=DEFAULT_VARIANT): + """ + Gets a module with a function 'apply' that is + able to parse a date string to a datetime + + Parameters + -------------- + variant + Variant of the algorithm. Possible values: ciso8601 + + Returns + ------------- + mod + Module with a function 'apply' that is able to parse a date string to a datetime + """ + if DEFAULT_VARIANT == STRPFROMISO: + if not constants.TRIGGERED_DT_PARSING_WARNING: + if sys.version_info < (3, 11): + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn( + "ISO8601 strings are not fully supported with strpfromiso for Python versions below 3.11") + constants.TRIGGERED_DT_PARSING_WARNING = True + + return VERSIONS[variant] diff --git a/pm4py/pm4py/util/dt_parsing/variants/__init__.py b/pm4py/pm4py/util/dt_parsing/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/util/dt_parsing/variants/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/util/dt_parsing/variants/cs8601.py b/pm4py/pm4py/util/dt_parsing/variants/cs8601.py new file mode 100644 index 0000000000000000000000000000000000000000..cfdf7176c134249176f446888f02f58f89113129 --- /dev/null +++ b/pm4py/pm4py/util/dt_parsing/variants/cs8601.py @@ -0,0 +1,34 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import ciso8601 + + +def apply(dt): + """ + Parses the string to a datetime object (use ciso8601) + + Parameters + -------------- + dt + Date string + + Returns + -------------- + datetime + Datetime object + """ + return ciso8601.parse_datetime(dt) diff --git a/pm4py/pm4py/util/dt_parsing/variants/dummy.py b/pm4py/pm4py/util/dt_parsing/variants/dummy.py new file mode 100644 index 0000000000000000000000000000000000000000..c3e730f1c09d2df72e84a279d67777975a0cd089 --- /dev/null +++ b/pm4py/pm4py/util/dt_parsing/variants/dummy.py @@ -0,0 +1,41 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import datetime + + +def apply(dt): + if dt.endswith("Z"): + # Z at the end of date means UTC, but that is not ISO format. + # Replace "Z" with "+00:00" that is also UTC + dt = dt[:-1] + "+00:00" + dt0 = dt.split("T") + datepart = dt0[0].split("-") + dt2 = dt0[1].split("+") + hourpart = dt2[0].split(":") + year = int(datepart[0]) + month = int(datepart[1]) + day = int(datepart[2]) + hour = int(hourpart[0]) + minute = int(hourpart[1]) + sms = hourpart[2].split(".") + second = int(sms[0]) + if len(sms) > 1: + microseconds = int(sms[1])*1000 + else: + microseconds = 0 + + return datetime.datetime(year, month, day, hour, minute, second, microseconds) diff --git a/pm4py/pm4py/util/dt_parsing/variants/strpfromiso.py b/pm4py/pm4py/util/dt_parsing/variants/strpfromiso.py new file mode 100644 index 0000000000000000000000000000000000000000..c3c4e2dbabfd24e4159a0771c42d85eb22023567 --- /dev/null +++ b/pm4py/pm4py/util/dt_parsing/variants/strpfromiso.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from datetime import datetime, timezone +from pm4py.util import constants + + +def fix_dataframe_column(serie): + if constants.ENABLE_DATETIME_COLUMNS_AWARE: + # Convert to UTC if the datetime is naive + if serie.dt.tz is None: + serie = serie.dt.tz_localize('UTC') + else: + # Convert to UTC if it's not already in UTC + serie = serie.dt.tz_convert('UTC') + else: + serie = serie.dt.tz_localize(None) + + return serie + + +def fix_naivety(dt): + if constants.ENABLE_DATETIME_COLUMNS_AWARE: + dt = dt.replace(tzinfo=timezone.utc) + else: + dt = dt.replace(tzinfo=None) + + return dt + + +def apply(dt): + """ + Parses the string to a datetime object (uses Python default strptime) + + Parameters + -------------- + dt + Date string + + Returns + -------------- + datetime + Datetime object + """ + if dt.endswith("Z"): + # Z at the end of date means UTC, but that is not ISO format. + # Replace "Z" with "+00:00" that is also UTC + dt = dt[:-1] + "+00:00" + dt = datetime.fromisoformat(dt) + + return fix_naivety(dt) diff --git a/pm4py/pm4py/util/exec_utils.py b/pm4py/pm4py/util/exec_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..8dd225518d494dd2df266a1e22b04cc597cced6d --- /dev/null +++ b/pm4py/pm4py/util/exec_utils.py @@ -0,0 +1,46 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum + + +def unroll(value): + if isinstance(value, Enum): + return value.value + return value + + +# this function can be moved to a util when string values of the parameters are no longer supported. (or is no longer needed ;-)) +def get_param_value(p, parameters, default): + if parameters is None: + return unroll(default) + unrolled_parameters = {} + for p0 in parameters: + unrolled_parameters[unroll(p0)] = parameters[p0] + if p in parameters: + val = parameters[p] + return unroll(val) + up = unroll(p) + if up in unrolled_parameters: + val = unrolled_parameters[up] + return unroll(val) + return unroll(default) + + +def get_variant(variant): + if isinstance(variant, Enum): + return variant.value + return variant diff --git a/pm4py/pm4py/util/hie_utils.py b/pm4py/pm4py/util/hie_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..000e5fd2d25b7772fbb199729859d8d4615b81b4 --- /dev/null +++ b/pm4py/pm4py/util/hie_utils.py @@ -0,0 +1,48 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + + +def indent_representation(model_string, max_indent=sys.maxsize): + model_string = model_string.replace('\n', '').replace('\r', '').replace('\t', '').strip() + + indent_level = 0 + list_strs = [] + formatted_str = "" + for char in model_string: + if char in '({': + formatted_str += char + indent_level += 1 + if indent_level <= max_indent: + list_strs.append(formatted_str) + formatted_str = '\t' * indent_level + elif char in ')}': + indent_level -= 1 + if indent_level < max_indent: + if formatted_str[-1] not in '({': + list_strs.append(formatted_str) + formatted_str = '\t' * indent_level + formatted_str += char + elif char == ',': + formatted_str += char + if indent_level <= max_indent: + list_strs.append(formatted_str) + formatted_str = '\t' * indent_level + else: + formatted_str += char + list_strs.append(formatted_str) + return list_strs diff --git a/pm4py/pm4py/util/lp/__init__.py b/pm4py/pm4py/util/lp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..909ac6df0249bbe47c843bbe82a274d998d9179a --- /dev/null +++ b/pm4py/pm4py/util/lp/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.lp import solver, util, variants diff --git a/pm4py/pm4py/util/lp/solver.py b/pm4py/pm4py/util/lp/solver.py new file mode 100644 index 0000000000000000000000000000000000000000..4de177cdc617db2b25f4b5db9748b761fc534463 --- /dev/null +++ b/pm4py/pm4py/util/lp/solver.py @@ -0,0 +1,162 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util +from enum import Enum + + +class Parameters(Enum): + REQUIRE_ILP = "require_ilp" + + +# not available in the latest version of PM4Py +CVXOPT = "cvxopt" +PULP = "pulp" +SCIPY = "scipy" + +# not available in the latest version of PM4Py +CVXOPT_SOLVER_CUSTOM_ALIGN = "cvxopt_solver_custom_align" +CVXOPT_SOLVER_CUSTOM_ALIGN_ILP = "cvxopt_solver_custom_align_ilp" + +# max allowed heuristics value (27/10/2019, due to the numerical instability of some of our solvers) +MAX_ALLOWED_HEURISTICS = 10 ** 15 + +VERSIONS_APPLY = {} +VERSIONS_GET_PRIM_OBJ = {} +VERSIONS_GET_POINTS_FROM_SOL = {} +DEFAULT_LP_SOLVER_VARIANT = None + +if importlib.util.find_spec("pulp"): + # assuming pulp is installed + from pm4py.util.lp.variants import pulp_solver + + VERSIONS_APPLY[PULP] = pulp_solver.apply + VERSIONS_GET_PRIM_OBJ[PULP] = pulp_solver.get_prim_obj_from_sol + VERSIONS_GET_POINTS_FROM_SOL[PULP] = pulp_solver.get_points_from_sol + + DEFAULT_LP_SOLVER_VARIANT = PULP + +if importlib.util.find_spec("scipy"): + # in the case scipy is installed, it works + from pm4py.util.lp.variants import scipy_solver + + VERSIONS_APPLY[SCIPY] = scipy_solver.apply + VERSIONS_GET_PRIM_OBJ[SCIPY] = scipy_solver.get_prim_obj_from_sol + VERSIONS_GET_POINTS_FROM_SOL[SCIPY] = scipy_solver.get_points_from_sol + + DEFAULT_LP_SOLVER_VARIANT = SCIPY + +if importlib.util.find_spec("cvxopt"): + from pm4py.util.lp.variants import cvxopt_solver, cvxopt_solver_custom_align, cvxopt_solver_custom_align_ilp, \ + cvxopt_solver_custom_align_arm + + custom_solver = cvxopt_solver_custom_align + try: + # for ARM-based Linux, we need to use a different call to GLPK + if "arm" in str(os.uname()[-1]): + custom_solver = cvxopt_solver + except: + pass + + CVXOPT = "cvxopt" + CVXOPT_SOLVER_CUSTOM_ALIGN = "cvxopt_solver_custom_align" + CVXOPT_SOLVER_CUSTOM_ALIGN_ILP = "cvxopt_solver_custom_align_ilp" + + VERSIONS_APPLY[CVXOPT] = cvxopt_solver.apply + VERSIONS_GET_PRIM_OBJ[CVXOPT] = cvxopt_solver.get_prim_obj_from_sol + VERSIONS_GET_POINTS_FROM_SOL[CVXOPT] = cvxopt_solver.get_points_from_sol + + VERSIONS_APPLY[CVXOPT_SOLVER_CUSTOM_ALIGN] = custom_solver.apply + VERSIONS_GET_PRIM_OBJ[CVXOPT_SOLVER_CUSTOM_ALIGN] = custom_solver.get_prim_obj_from_sol + VERSIONS_GET_POINTS_FROM_SOL[CVXOPT_SOLVER_CUSTOM_ALIGN] = custom_solver.get_points_from_sol + + VERSIONS_APPLY[CVXOPT_SOLVER_CUSTOM_ALIGN_ILP] = cvxopt_solver_custom_align_ilp.apply + VERSIONS_GET_PRIM_OBJ[ + CVXOPT_SOLVER_CUSTOM_ALIGN_ILP] = cvxopt_solver_custom_align_ilp.get_prim_obj_from_sol + VERSIONS_GET_POINTS_FROM_SOL[ + CVXOPT_SOLVER_CUSTOM_ALIGN_ILP] = cvxopt_solver_custom_align_ilp.get_points_from_sol + + DEFAULT_LP_SOLVER_VARIANT = CVXOPT_SOLVER_CUSTOM_ALIGN + +def apply(c, Aub, bub, Aeq, beq, parameters=None, variant=DEFAULT_LP_SOLVER_VARIANT): + """ + Gets the overall solution of the problem + + Parameters + ------------ + c + c parameter of the algorithm + Aub + A_ub parameter of the algorithm + bub + b_ub parameter of the algorithm + Aeq + A_eq parameter of the algorithm + beq + b_eq parameter of the algorithm + parameters + Possible parameters of the algorithm + variant + Variant of the algorithm, possible values: pulp, scipy + + Returns + ------------- + sol + Solution of the LP problem by the given algorithm + """ + return VERSIONS_APPLY[variant](c, Aub, bub, Aeq, beq, parameters=parameters) + + +def get_prim_obj_from_sol(sol, parameters=None, variant=DEFAULT_LP_SOLVER_VARIANT): + """ + Gets the primal objective from the solution of the LP problem + + Parameters + ------------- + sol + Solution of the ILP problem by the given algorithm + parameters + Possible parameters of the algorithm + variant + Variant of the algorithm, possible values: pulp, scipy + + Returns + ------------- + prim_obj + Primal objective + """ + return VERSIONS_GET_PRIM_OBJ[variant](sol, parameters=parameters) + + +def get_points_from_sol(sol, parameters=None, variant=DEFAULT_LP_SOLVER_VARIANT): + """ + Gets the points from the solution + + Parameters + ------------- + sol + Solution of the LP problem by the given algorithm + parameters + Possible parameters of the algorithm + variant + Variant of the algorithm, possible values: pulp, scipy + + Returns + ------------- + points + Point of the solution + """ + return VERSIONS_GET_POINTS_FROM_SOL[variant](sol, parameters=parameters) diff --git a/pm4py/pm4py/util/lp/util/__init__.py b/pm4py/pm4py/util/lp/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/util/lp/util/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/util/lp/variants/__init__.py b/pm4py/pm4py/util/lp/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5d666de7ea50dbdcb4cdacbec53880a419729bf4 --- /dev/null +++ b/pm4py/pm4py/util/lp/variants/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util + +if importlib.util.find_spec("pulp"): + from pm4py.util.lp.variants import pulp_solver + +if importlib.util.find_spec("scipy"): + from pm4py.util.lp.variants import scipy_solver diff --git a/pm4py/pm4py/util/lp/variants/cvxopt_solver.py b/pm4py/pm4py/util/lp/variants/cvxopt_solver.py new file mode 100644 index 0000000000000000000000000000000000000000..c55c180538233796019391bc469cf2bee77184d9 --- /dev/null +++ b/pm4py/pm4py/util/lp/variants/cvxopt_solver.py @@ -0,0 +1,127 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +from cvxopt import matrix, solvers + + +def apply(c, Aub, bub, Aeq, beq, parameters=None): + """ + Gets the overall solution of the problem + + Parameters + ------------ + c + c parameter of the algorithm + Aub + A_ub parameter of the algorithm + bub + b_ub parameter of the algorithm + Aeq + A_eq parameter of the algorithm + beq + b_eq parameter of the algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + sol + Solution of the LP problem by the given algorithm + """ + if parameters is None: + parameters = {} + + solver = parameters["solver"] if "solver" in parameters else None + + c = matrix(c) + Aub = matrix(Aub) + bub = matrix(bub) + if Aeq is not None: + Aeq = matrix(Aeq) + if beq is not None: + beq = matrix(beq) + + solvers.options['glpk'] = {} + solvers.options['glpk']['LPX_K_MSGLEV'] = 0 + solvers.options['glpk']['msg_lev'] = 'GLP_MSG_OFF' + solvers.options['glpk']['show_progress'] = False + solvers.options['glpk']['presolve'] = "GLP_ON" + solvers.options['glpk']['meth'] = "GLP_PRIMAL" + solvers.options['msg_lev'] = 'GLP_MSG_OFF' + solvers.options['show_progress'] = False + + if solver: + sol = solvers.lp(c, Aub, bub, A=Aeq, b=beq, solver=solver) + else: + sol = solvers.lp(c, Aub, bub, A=Aeq, b=beq) + + return sol + + +def get_prim_obj_from_sol(sol, parameters=None): + """ + Gets the primal objective from the solution of the LP problem + + Parameters + ------------- + sol + Solution of the ILP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + prim_obj + Primal objective + """ + if parameters is None: + parameters = {} + + return sol["primal objective"] + + +def get_points_from_sol(sol, parameters=None): + """ + Gets the points from the solution + + Parameters + ------------- + sol + Solution of the LP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + points + Point of the solution + """ + if parameters is None: + parameters = {} + + maximize = parameters["maximize"] if "maximize" in parameters else False + return_when_none = parameters["return_when_none"] if "return_when_none" in parameters else False + var_corr = parameters["var_corr"] if "var_corr" in parameters else {} + + if sol and 'x' in sol and sol['x'] is not None: + return list(sol['x']) + else: + if return_when_none: + if maximize: + return [sys.float_info.max] * len(list(var_corr.keys())) + return [sys.float_info.min] * len(list(var_corr.keys())) diff --git a/pm4py/pm4py/util/lp/variants/cvxopt_solver_custom_align.py b/pm4py/pm4py/util/lp/variants/cvxopt_solver_custom_align.py new file mode 100644 index 0000000000000000000000000000000000000000..a766e740328a0939799bd60c60316097112dc7b9 --- /dev/null +++ b/pm4py/pm4py/util/lp/variants/cvxopt_solver_custom_align.py @@ -0,0 +1,122 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +from cvxopt import blas +from cvxopt import glpk + +this_options = {} +this_options["LPX_K_MSGLEV"] = 0 +this_options["msg_lev"] = "GLP_MSG_OFF" +this_options["show_progress"] = False +this_options["presolve"] = "GLP_ON" +this_options["tol_bnd"] = 10**-5 +this_options["tol_piv"] = 10**-5 +this_options["obj_ll"] = 10**-5 +this_options["obj_ul"] = 10**-5 +this_options["obj_ul"] = 10**-5 + + +def custom_solve_lp(c, G, h, A, b): + status, x, z, y = glpk.lp(c, G, h, A, b, options=this_options) + + if status == 'optimal': + pcost = blas.dot(c, x) + else: + pcost = None + + return {'status': status, 'x': x, 'primal objective': pcost} + + +def apply(c, Aub, bub, Aeq, beq, parameters=None): + """ + Gets the overall solution of the problem + + Parameters + ------------ + c + c parameter of the algorithm + Aub + A_ub parameter of the algorithm + bub + b_ub parameter of the algorithm + Aeq + A_eq parameter of the algorithm + beq + b_eq parameter of the algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + sol + Solution of the LP problem by the given algorithm + """ + sol = custom_solve_lp(c, Aub, bub, Aeq, beq) + + return sol + + +def get_prim_obj_from_sol(sol, parameters=None): + """ + Gets the primal objective from the solution of the LP problem + + Parameters + ------------- + sol + Solution of the ILP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + prim_obj + Primal objective + """ + return sol["primal objective"] + + +def get_points_from_sol(sol, parameters=None): + """ + Gets the points from the solution + + Parameters + ------------- + sol + Solution of the LP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + points + Point of the solution + """ + if parameters is None: + parameters = {} + + maximize = parameters["maximize"] if "maximize" in parameters else False + return_when_none = parameters["return_when_none"] if "return_when_none" in parameters else False + var_corr = parameters["var_corr"] if "var_corr" in parameters else {} + + if sol and 'x' in sol and sol['x'] is not None: + return list(sol['x']) + else: + if return_when_none: + if maximize: + return [sys.float_info.max] * len(list(var_corr.keys())) + return [sys.float_info.min] * len(list(var_corr.keys())) diff --git a/pm4py/pm4py/util/lp/variants/cvxopt_solver_custom_align_arm.py b/pm4py/pm4py/util/lp/variants/cvxopt_solver_custom_align_arm.py new file mode 100644 index 0000000000000000000000000000000000000000..e86b3657a401e9fce6312e4fc65e5d68ebfe7940 --- /dev/null +++ b/pm4py/pm4py/util/lp/variants/cvxopt_solver_custom_align_arm.py @@ -0,0 +1,111 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +from cvxopt import blas +from cvxopt import glpk + + +def custom_solve_lp(c, G, h, A, b): + status, x, z, y = glpk.lp(c, G, h, A, b) + + if status == 'optimal': + pcost = blas.dot(c, x) + else: + pcost = None + + return {'status': status, 'x': x, 'primal objective': pcost} + + +def apply(c, Aub, bub, Aeq, beq, parameters=None): + """ + Gets the overall solution of the problem + + Parameters + ------------ + c + c parameter of the algorithm + Aub + A_ub parameter of the algorithm + bub + b_ub parameter of the algorithm + Aeq + A_eq parameter of the algorithm + beq + b_eq parameter of the algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + sol + Solution of the LP problem by the given algorithm + """ + sol = custom_solve_lp(c, Aub, bub, Aeq, beq) + + return sol + + +def get_prim_obj_from_sol(sol, parameters=None): + """ + Gets the primal objective from the solution of the LP problem + + Parameters + ------------- + sol + Solution of the ILP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + prim_obj + Primal objective + """ + return sol["primal objective"] + + +def get_points_from_sol(sol, parameters=None): + """ + Gets the points from the solution + + Parameters + ------------- + sol + Solution of the LP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + points + Point of the solution + """ + if parameters is None: + parameters = {} + + maximize = parameters["maximize"] if "maximize" in parameters else False + return_when_none = parameters["return_when_none"] if "return_when_none" in parameters else False + var_corr = parameters["var_corr"] if "var_corr" in parameters else {} + + if sol and 'x' in sol and sol['x'] is not None: + return list(sol['x']) + else: + if return_when_none: + if maximize: + return [sys.float_info.max] * len(list(var_corr.keys())) + return [sys.float_info.min] * len(list(var_corr.keys())) diff --git a/pm4py/pm4py/util/lp/variants/cvxopt_solver_custom_align_ilp.py b/pm4py/pm4py/util/lp/variants/cvxopt_solver_custom_align_ilp.py new file mode 100644 index 0000000000000000000000000000000000000000..f571127fdf050b6fa5391c2f55791a5e68f3330d --- /dev/null +++ b/pm4py/pm4py/util/lp/variants/cvxopt_solver_custom_align_ilp.py @@ -0,0 +1,138 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys + +from cvxopt import blas +from cvxopt import glpk + +this_options = {} +this_options["LPX_K_MSGLEV"] = 0 +this_options["msg_lev"] = "GLP_MSG_OFF" +this_options["show_progress"] = False +this_options["presolve"] = "GLP_ON" + +this_options_lp = {} +this_options_lp["LPX_K_MSGLEV"] = 0 +this_options_lp["msg_lev"] = "GLP_MSG_OFF" +this_options_lp["show_progress"] = False +this_options_lp["presolve"] = "GLP_ON" + +TOL = 10**(-5) + + +def check_lp_sol_is_integer(x): + for i in range(len(x)): + if abs(x[i] - round(x[i])) > TOL: + return False + return True + + +def custom_solve_ilp(c, G, h, A, b): + status, x, y, z = glpk.lp(c, G, h, A, b, options=this_options_lp) + if status == "optimal": + if not check_lp_sol_is_integer(x): + size = G.size[1] + I = {i for i in range(size)} + status, x = glpk.ilp(c, G, h, A, b, I=I, options=this_options) + if status == 'optimal': + pcost = blas.dot(c, x) + else: + pcost = None + + return {'status': status, 'x': x, 'primal objective': pcost} + else: + return {'status': status, 'x': None, 'primal objective': None} + + +def apply(c, Aub, bub, Aeq, beq, parameters=None): + """ + Gets the overall solution of the problem + + Parameters + ------------ + c + c parameter of the algorithm + Aub + A_ub parameter of the algorithm + bub + b_ub parameter of the algorithm + Aeq + A_eq parameter of the algorithm + beq + b_eq parameter of the algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + sol + Solution of the LP problem by the given algorithm + """ + sol = custom_solve_ilp(c, Aub, bub, Aeq, beq) + + return sol + + +def get_prim_obj_from_sol(sol, parameters=None): + """ + Gets the primal objective from the solution of the LP problem + + Parameters + ------------- + sol + Solution of the ILP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + prim_obj + Primal objective + """ + return sol["primal objective"] + + +def get_points_from_sol(sol, parameters=None): + """ + Gets the points from the solution + + Parameters + ------------- + sol + Solution of the LP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + points + Point of the solution + """ + if parameters is None: + parameters = {} + + maximize = parameters["maximize"] if "maximize" in parameters else False + return_when_none = parameters["return_when_none"] if "return_when_none" in parameters else False + var_corr = parameters["var_corr"] if "var_corr" in parameters else {} + + if sol and 'x' in sol and sol['x'] is not None: + return list(sol['x']) + else: + if return_when_none: + if maximize: + return [sys.float_info.max] * len(list(var_corr.keys())) + return [sys.float_info.min] * len(list(var_corr.keys())) diff --git a/pm4py/pm4py/util/lp/variants/ortools_solver.py b/pm4py/pm4py/util/lp/variants/ortools_solver.py new file mode 100644 index 0000000000000000000000000000000000000000..ee48c6af6898f7eaa7e617c0506d85feb0d996eb --- /dev/null +++ b/pm4py/pm4py/util/lp/variants/ortools_solver.py @@ -0,0 +1,175 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +import tempfile +import numpy as np + +from ortools.linear_solver import pywraplp +from pm4py.util import exec_utils + +from enum import Enum + + +class Parameters(Enum): + REQUIRE_ILP = "require_ilp" + + +MIN_THRESHOLD = 10 ** -12 + + +def apply(c, Aub, bub, Aeq, beq, parameters=None): + """ + Gets the overall solution of the problem + + Parameters + ------------ + c + c parameter of the algorithm + Aub + A_ub parameter of the algorithm + bub + b_ub parameter of the algorithm + Aeq + A_eq parameter of the algorithm + beq + b_eq parameter of the algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + sol + Solution of the LP problem by the given algorithm + """ + if parameters is None: + parameters = {} + + require_ilp = exec_utils.get_param_value(Parameters.REQUIRE_ILP, parameters, False) + + solver = pywraplp.Solver('LinearProgrammingExample', + pywraplp.Solver.GLOP_LINEAR_PROGRAMMING) + solver.Clear() + solver.SuppressOutput() + + x_list = [] + for i in range(Aub.shape[1]): + if require_ilp: + x = solver.IntVar(-solver.infinity(), solver.infinity(), "x_" + str(i)) + else: + x = solver.NumVar(-solver.infinity(), solver.infinity(), "x_" + str(i)) + x_list.append(x) + + objective = solver.Objective() + for j in range(len(c)): + if abs(c[j]) > MIN_THRESHOLD: + objective.SetCoefficient(x_list[j], c[j]) + + for i in range(Aub.shape[0]): + ok = False + for j in range(Aub.shape[1]): + if abs(Aub[i, j]) > MIN_THRESHOLD: + ok = True + break + if ok: + constraint = solver.Constraint(-solver.infinity(), bub[i]) + for j in range(Aub.shape[1]): + if abs(Aub[i, j]) > MIN_THRESHOLD: + constraint.SetCoefficient(x_list[j], Aub[i, j]) + + if Aeq is not None and beq is not None: + for i in range(Aeq.shape[0]): + ok = False + for j in range(Aeq.shape[1]): + if abs(Aeq[i, j]) > MIN_THRESHOLD: + ok = True + break + if ok: + constraint = solver.Constraint(beq[i], beq[i]) + for j in range(Aeq.shape[1]): + if abs(Aeq[i, j]) > MIN_THRESHOLD: + constraint.SetCoefficient(x_list[j], Aeq[i, j]) + + objective.SetMinimization() + + status = solver.Solve() + + if status == 0: + sol_value = 0.0 + for j in range(len(c)): + if abs(c[j]) > MIN_THRESHOLD: + sol_value = sol_value + c[j] * x_list[j].solution_value() + points = [x.solution_value() for x in x_list] + else: + return None + + return {"c": c, "x_list": x_list, "sol_value": sol_value, "points": points} + + +def get_prim_obj_from_sol(sol, parameters=None): + """ + Gets the primal objective from the solution of the LP problem + + Parameters + ------------- + sol + Solution of the ILP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + prim_obj + Primal objective + """ + if parameters is None: + parameters = {} + + if sol is not None: + return sol["sol_value"] + + +def get_points_from_sol(sol, parameters=None): + """ + Gets the points from the solution + + Parameters + ------------- + sol + Solution of the LP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + points + Point of the solution + """ + if parameters is None: + parameters = {} + + maximize = parameters["maximize"] if "maximize" in parameters else False + return_when_none = parameters["return_when_none"] if "return_when_none" in parameters else False + var_corr = parameters["var_corr"] if "var_corr" in parameters else {} + + if sol is not None: + return sol["points"] + else: + if return_when_none: + if maximize: + return [sys.float_info.max] * len(list(var_corr.keys())) + return [sys.float_info.min] * len(list(var_corr.keys())) + diff --git a/pm4py/pm4py/util/lp/variants/pulp_solver.py b/pm4py/pm4py/util/lp/variants/pulp_solver.py new file mode 100644 index 0000000000000000000000000000000000000000..fd2542cb9279f9b7ccbe5b7167296efed13970f2 --- /dev/null +++ b/pm4py/pm4py/util/lp/variants/pulp_solver.py @@ -0,0 +1,215 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +import tempfile + +import pulp +from pulp import LpProblem, LpMinimize, LpVariable, LpStatus, value + +from pm4py.util import exec_utils + +from enum import Enum + + +class Parameters(Enum): + REQUIRE_ILP = "require_ilp" + + +MIN_THRESHOLD = 10 ** -12 +# max safe number of constraints (log10) +MAX_NUM_CONSTRAINTS = 7 + +# keeps compatibility with 1.6.x versions of PuLP in which the interface +# for solving was the latter one +if hasattr(pulp, "__version__"): + # new interface + from pulp import PULP_CBC_CMD + + solver = lambda prob: PULP_CBC_CMD(msg=0).solve(prob) +else: + # old interface + solver = lambda prob: prob.solve() + + +def get_terminal_part_name_num(num): + """ + Gets the terminal part of the name of a variable + + Parameters + --------------- + nam + Name + + Returns + --------------- + stru + String + """ + ret = str(num) + while len(ret) < MAX_NUM_CONSTRAINTS: + ret = "0" + ret + return ret + + +def apply(c, Aub, bub, Aeq, beq, parameters=None): + """ + Gets the overall solution of the problem + + Parameters + ------------ + c + c parameter of the algorithm + Aub + A_ub parameter of the algorithm + bub + b_ub parameter of the algorithm + Aeq + A_eq parameter of the algorithm + beq + b_eq parameter of the algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + sol + Solution of the LP problem by the given algorithm + """ + if parameters is None: + parameters = {} + + require_ilp = exec_utils.get_param_value(Parameters.REQUIRE_ILP, parameters, False) + + prob = LpProblem("", LpMinimize) + + x_list = [] + for i in range(Aub.shape[1]): + if require_ilp: + x_list.append(LpVariable("x_" + get_terminal_part_name_num(i), cat='Integer')) + else: + x_list.append(LpVariable("x_" + get_terminal_part_name_num(i))) + + eval_str = "" + expr_count = 0 + min_threshold = min(max(c[j] for j in range(len(c))), MIN_THRESHOLD) + for j in range(len(c)): + if abs(c[j]) >= min_threshold: + if expr_count > 0: + eval_str = eval_str + " + " + eval_str = eval_str + str(c[j]) + "*x_list[" + str(j) + "]" + expr_count = expr_count + 1 + eval_str = eval_str + ", \"objective\"" + prob += eval(eval_str) + + min_threshold = min(max(Aub[i, j] for i in range(Aub.shape[0]) for j in range(Aub.shape[1])), MIN_THRESHOLD) + for i in range(Aub.shape[0]): + expr_count = 0 + eval_str = 0 + eval_str = "" + for j in range(Aub.shape[1]): + if abs(Aub[i, j]) >= min_threshold: + if expr_count > 0: + eval_str = eval_str + " + " + eval_str = eval_str + str(Aub[i, j]) + "*x_list[" + str(j) + "]" + expr_count = expr_count + 1 + if eval_str: + eval_str = eval_str + "<=" + str( + bub[i]) + ", \"vinc_" + get_terminal_part_name_num(i) + "\"" + + prob += eval(eval_str) + + if Aeq is not None and beq is not None: + for i in range(Aeq.shape[0]): + expr_count = 0 + eval_str = 0 + eval_str = "" + for j in range(Aeq.shape[1]): + if abs(Aeq[i, j]) > MIN_THRESHOLD: + if expr_count > 0: + eval_str = eval_str + " + " + eval_str = eval_str + str(Aeq[i, j]) + "*x_list[" + str(j) + "]" + expr_count = expr_count + 1 + if eval_str: + eval_str = eval_str + "==" + str( + beq[i]) + ", \"vinceq_" + get_terminal_part_name_num( + i + 1 + Aub.shape[0]) + "\"" + + prob += eval(eval_str) + + filename = tempfile.NamedTemporaryFile(suffix='.lp') + filename.close() + prob.writeLP(filename.name) + solver(prob) + + return prob + + +def get_prim_obj_from_sol(sol, parameters=None): + """ + Gets the primal objective from the solution of the LP problem + + Parameters + ------------- + sol + Solution of the ILP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + prim_obj + Primal objective + """ + if parameters is None: + parameters = {} + + return value(sol.objective) + + +def get_points_from_sol(sol, parameters=None): + """ + Gets the points from the solution + + Parameters + ------------- + sol + Solution of the LP problem by the given algorithm + parameters + Possible parameters of the algorithm + + Returns + ------------- + points + Point of the solution + """ + if parameters is None: + parameters = {} + + maximize = parameters["maximize"] if "maximize" in parameters else False + return_when_none = parameters["return_when_none"] if "return_when_none" in parameters else False + var_corr = parameters["var_corr"] if "var_corr" in parameters else {} + + if str(LpStatus[sol.status]) == "Optimal": + x_i = [] + for v in sol.variables(): + x_i.append(v.varValue) + return x_i + else: + if return_when_none: + if maximize: + return [sys.float_info.max] * len(list(var_corr.keys())) + return [sys.float_info.min] * len(list(var_corr.keys())) diff --git a/pm4py/pm4py/util/lp/variants/scipy_solver.py b/pm4py/pm4py/util/lp/variants/scipy_solver.py new file mode 100644 index 0000000000000000000000000000000000000000..fae3e3bdb5ef9bfe5e2e4a304e1760ea63222a25 --- /dev/null +++ b/pm4py/pm4py/util/lp/variants/scipy_solver.py @@ -0,0 +1,47 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import numpy as np +from scipy.optimize import linprog, OptimizeResult +from typing import Optional, Dict, Any, List +from pm4py.util import exec_utils + + +class Parameters: + INTEGRALITY = "integrality" + METHOD = "method" + + +def apply(c: list, Aub: np.ndarray, bub: np.matrix, Aeq: np.matrix, beq: np.matrix, + parameters: Optional[Dict[Any, Any]] = None) -> OptimizeResult: + if parameters is None: + parameters = {} + + integrality = exec_utils.get_param_value(Parameters.INTEGRALITY, parameters, None) + method = exec_utils.get_param_value(Parameters.METHOD, parameters, "highs" if integrality is None else "highs") + sol = linprog(c, A_ub=Aub, b_ub=bub, A_eq=Aeq, b_eq=beq, method=method, integrality=integrality) + return sol + + +def get_prim_obj_from_sol(sol: OptimizeResult, parameters: Optional[Dict[Any, Any]] = None) -> int: + if sol.fun is not None: + return round(sol.fun) + + +def get_points_from_sol(sol: OptimizeResult, parameters: Optional[Dict[Any, Any]] = None) -> List[int]: + if sol.x is not None: + return [round(y) for y in sol.x] diff --git a/pm4py/pm4py/util/ml_utils.py b/pm4py/pm4py/util/ml_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..8e7d981426c2e9b1ac591e130d3f7c5de86dd8b6 --- /dev/null +++ b/pm4py/pm4py/util/ml_utils.py @@ -0,0 +1,47 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util + + +def DecisionTreeClassifier(*args, **kwargs): + from sklearn.tree import DecisionTreeClassifier + + return DecisionTreeClassifier(*args, **kwargs) + + +def AffinityPropagation(*args, **kwargs): + from sklearn.cluster import AffinityPropagation + + return AffinityPropagation(*args, **kwargs) + + +def KMeans(*args, **kwargs): + from sklearn.cluster import KMeans + + return KMeans(*args, **kwargs) + + +def KNeighborsRegressor(*args, **kwargs): + from sklearn.neighbors import KNeighborsRegressor + + return KNeighborsRegressor(*args, **kwargs) + + +def LocallyLinearEmbedding(*args, **kwargs): + from sklearn.manifold import LocallyLinearEmbedding + + return LocallyLinearEmbedding(*args, **kwargs) diff --git a/pm4py/pm4py/util/nx_utils.py b/pm4py/pm4py/util/nx_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..6858948f08dfbe14adda48dfec9dc7174dd98ea0 --- /dev/null +++ b/pm4py/pm4py/util/nx_utils.py @@ -0,0 +1,402 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import networkx as nx +from enum import Enum +from typing import Optional, Dict, Any +from pm4py.util import exec_utils, constants +import importlib.util +from copy import copy + + +class Parameters(Enum): + SHOW_PROGRESS_BAR = "show_progress_bar" + + +def get_default_nx_environment(): + return nx + + +DEFAULT_NX_ENVIRONMENT = get_default_nx_environment() + + +def Graph(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.Graph(*args, **kwargs) + + +def DiGraph(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.DiGraph(*args, **kwargs) + + +def MultiGraph(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.MultiGraph(*args, **kwargs) + + +def MultiDiGraph(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.MultiDiGraph(*args, **kwargs) + + +def ancestors(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.ancestors(*args, **kwargs) + + +def descendants(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.descendants(*args, **kwargs) + + +def connected_components(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.connected_components(*args, **kwargs) + + +def bfs_tree(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.bfs_tree(*args, **kwargs) + + +def contracted_nodes(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.contracted_nodes(*args, **kwargs) + + +def shortest_path(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.shortest_path(*args, **kwargs) + + +def strongly_connected_components(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.strongly_connected_components(*args, **kwargs) + + +def has_path(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.has_path(*args, **kwargs) + + +def is_strongly_connected(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.is_strongly_connected(*args, **kwargs) + + +def all_pairs_shortest_path(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.all_pairs_shortest_path(*args, **kwargs) + + +def all_pairs_dijkstra(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.all_pairs_dijkstra(*args, **kwargs) + + +def find_cliques(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.find_cliques(*args, **kwargs) + + +def degree_centrality(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.degree_centrality(*args, **kwargs) + + +def greedy_modularity_communities(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.algorithms.community.greedy_modularity_communities(*args, **kwargs) + + +def maximum_flow_value(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.maximum_flow_value(*args, **kwargs) + + +def minimum_weight_full_matching(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.bipartite.minimum_weight_full_matching(*args, **kwargs) + + +def Edmonds(*args, **kwargs): + return DEFAULT_NX_ENVIRONMENT.algorithms.tree.Edmonds(*args, **kwargs) + + +def __format_attrs(attributes0: Dict[str, Any]) -> Dict[str, Any]: + """ + Internal method to format properties. + """ + attributes = {} + + keys = list(attributes0.keys()) + + for k0 in keys: + v = attributes0[k0] + t = str(type(v)).lower() + + k = k0 + if "time" in t: + v = v.isoformat() + attributes[k] = v + elif "float" in t or "double" in t: + attributes[k] = v + elif "str" in t: + attributes[k] = v + else: + attributes[k] = str(v) + + return attributes + + +def neo4j_upload(nx_graph: nx.DiGraph, session, clean_db: bool = True, parameters: Optional[Dict[Any, Any]] = None): + """ + Uploads a NetworkX DiGraph obtained from a traditional/object-centric event log to a Neo4J session + + Parameters + --------------- + nx_graph + NetworkX graph + session + Neo4J session + clean_db + Cleans the database before uploading + parameters + Other optional parameters of the method, including: + - Parameters.SHOW_PROGRESS_BAR => shows the percentage of nodes/edges uploaded to Neo4J + """ + if parameters is None: + parameters = {} + + show_progress_bar = exec_utils.get_param_value(Parameters.SHOW_PROGRESS_BAR, parameters, + constants.SHOW_PROGRESS_BAR) + + if clean_db: + session.run("MATCH (n) DETACH DELETE n") + + nodes = list(nx_graph.nodes) + nodes_progress = None + edges = list(nx_graph.edges) + edges_progress = None + + if importlib.util.find_spec("tqdm") and show_progress_bar: + from tqdm.auto import tqdm + nodes_progress = tqdm(total=len(nodes), desc="uploading nodes, completed :: ") + + for node_id in nodes: + node_attrs = __format_attrs(nx_graph.nodes[node_id]['attr']) + node_type = node_attrs["type"] + + command = "CREATE (n:" + node_type + " {id: $id})\nSET n += $properties" + + session.run(command, id=node_id, properties=node_attrs) + + if nodes_progress is not None: + nodes_progress.update() + + if nodes_progress is not None: + nodes_progress.close() + + if importlib.util.find_spec("tqdm") and show_progress_bar: + from tqdm.auto import tqdm + edges_progress = tqdm(total=len(edges), desc="uploading edges, completed :: ") + + for edge_id in edges: + edge_attr = __format_attrs(nx_graph.edges[edge_id]['attr']) + edge_type = edge_attr["type"] + + command = "MATCH (a {id: $id1}), (b {id: $id2})\nCREATE (a)-[r:" + edge_type + " $props]->(b)" + + session.run(command, id1=edge_id[0], id2=edge_id[1], props=edge_attr, edge_type=edge_type) + + if edges_progress is not None: + edges_progress.update() + + if edges_progress is not None: + edges_progress.close() + + +def neo4j_download(session, parameters: Optional[Dict[Any, Any]] = None) -> nx.DiGraph: + """ + Downloads a NetworkX DiGraph starting from a Neo4J database. + + Parameters + -------------- + session + Neo4J session + parameters + Optional parameters of the method. + + Returns + -------------- + nx_graph + NetworkX DiGraph + """ + if parameters is None: + parameters = {} + + from pm4py.util import dt_parsing + date_parser = dt_parsing.parser.get() + + nodes = session.run("MATCH (n) RETURN n") + nodes = [dict(node["n"]) for node in nodes] + + edges = session.run("MATCH (n)-[r]->(m) RETURN n, r, m") + edges = [(edge["n"]["id"], edge["m"]["id"], dict(edge["r"])) for edge in edges] + + nx_graph = DiGraph() + + for n in nodes: + node_id = n["id"] + node_props = copy(n) + del node_props["id"] + + for k in ["ocel:timestamp", "time:timestamp"]: + if k in node_props: + node_props[k] = date_parser.apply(node_props[k]) + + nx_graph.add_node(node_id, attr=node_props) + + for e in edges: + nx_graph.add_edge(e[0], e[1], attr=e[2]) + + return nx_graph + + +def nx_to_ocel(nx_graph: nx.DiGraph, parameters: Optional[Dict[Any, Any]] = None): + """ + Transforms a NetworkX DiGraph representing an OCEL to a proper OCEL. + + Parameters + ---------------- + nx_graph + NetworkX DiGraph + parameters + Optional parameters of the method + + Returns + ---------------- + ocel + Object-centric event log + """ + if parameters is None: + parameters = {} + + from pm4py.util import pandas_utils + + events = [] + objects = [] + relations = [] + o2o = [] + object_changes = [] + + events_activity = {} + events_timestamp = {} + object_types = {} + + for node_id in nx_graph.nodes: + node_attrs = nx_graph.nodes[node_id]['attr'] + node_type = node_attrs['type'] + + if node_type == 'EVENT': + activity = node_attrs['ocel:activity'] + timestamp = node_attrs['ocel:timestamp'] + events_activity[node_id] = activity + events_timestamp[node_id] = timestamp + events.append(node_attrs) + elif node_type == 'OBJECT': + object_type = node_attrs['ocel:type'] + object_types[node_id] = object_type + objects.append(node_attrs) + elif node_type == 'CHANGE': + object_changes.append(node_attrs) + + for edge_id in nx_graph.edges: + source = edge_id[0] + target = edge_id[1] + edge_attrs = nx_graph.edges[edge_id]['attr'] + edge_type = edge_attrs['type'] + qualifier = edge_attrs['qualifier'] if 'qualifier' in edge_attrs else '' + + if edge_type == 'E2O': + activity = events_activity[source] + timestamp = events_timestamp[source] + object_type = object_types[target] + relations.append( + {"ocel:eid": source, "ocel:oid": target, "ocel:activity": activity, "ocel:timestamp": timestamp, + "ocel:type": object_type, "ocel:qualifier": qualifier}) + elif edge_type == 'O2O': + o2o.append({"ocel:oid": source, "ocel:oid_2": target, "ocel:qualifier": qualifier}) + + events = pandas_utils.instantiate_dataframe(events) + objects = pandas_utils.instantiate_dataframe(objects) + relations = pandas_utils.instantiate_dataframe(relations) + o2o = pandas_utils.instantiate_dataframe(o2o) if o2o else None + object_changes = pandas_utils.instantiate_dataframe(object_changes) if object_changes else None + + internal_index = "@@index" + events = pandas_utils.insert_index(events, internal_index, reset_index=False, copy_dataframe=False) + relations = pandas_utils.insert_index(relations, internal_index, reset_index=False, copy_dataframe=False) + + events = events.sort_values(["ocel:timestamp", internal_index]) + relations = relations.sort_values(["ocel:timestamp", internal_index]) + + del events[internal_index] + del relations[internal_index] + + del events["type"] + del objects["type"] + + if object_changes is not None: + del object_changes["type"] + + from pm4py.objects.ocel.obj import OCEL + + return OCEL(events, objects, relations, o2o=o2o, object_changes=object_changes) + + +def nx_to_event_log(nx_graph: nx.DiGraph, parameters: Optional[Dict[Any, Any]] = None): + """ + Transforms a NetworkX DiGraph representing a traditional event log to a proper event log. + + Parameters + ---------------- + nx_graph + NetworkX DiGraph + parameters + Optional parameters of the method + + Returns + ---------------- + event_log + Traditional event log. + """ + if parameters is None: + parameters = {} + + from pm4py.objects.log.obj import EventLog, Trace, Event + from pm4py.objects.log.util import sorting + + log = EventLog() + + case_nodes = [(k, v["attr"]) for k, v in nx_graph.nodes.items() if v["attr"]["type"] == "CASE"] + event_nodes = [(k, v["attr"]) for k, v in nx_graph.nodes.items() if v["attr"]["type"] == "EVENT"] + + cases = {} + for i in range(len(case_nodes)): + case_attrs = copy(case_nodes[i][1]) + del case_attrs["type"] + trace = Trace(attributes=case_attrs) + cases[case_nodes[i][0]] = trace + log.append(trace) + + events = {} + for i in range(len(event_nodes)): + event_attrs = copy(event_nodes[i][1]) + del event_attrs["type"] + events[event_nodes[i][0]] = Event(event_attrs) + + for edge_id, edge_attrs in nx_graph.edges.items(): + edge_attrs = edge_attrs["attr"] + edge_type = edge_attrs["type"] + + if edge_type == "BELONGS_TO": + cases[edge_id[1]].append(events[edge_id[0]]) + + log = sorting.sort_timestamp(log, "time:timestamp") + + return log diff --git a/pm4py/pm4py/util/pandas_utils.py b/pm4py/pm4py/util/pandas_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..634f9b958ac2a4214f9bf1cb572570ba040671ab --- /dev/null +++ b/pm4py/pm4py/util/pandas_utils.py @@ -0,0 +1,412 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import pandas as pd +import importlib.util + +from pm4py.util import constants, xes_constants +import numpy as np + + +def get_default_dataframe_environment(): + if importlib.util.find_spec("cudf"): + #import cudf; return cudf + import cudf.pandas + cudf.pandas.install() + import pandas as pd + return pd + + +DATAFRAME = get_default_dataframe_environment() + + +def to_dict_records(df): + """ + Pandas dataframe to dictionary (records method) + + Parameters + --------------- + df + Dataframe + + Returns + -------------- + list_dictio + List containing a dictionary for each row + """ + return df.to_dict('records') + + +def to_dict_index(df): + """ + Pandas dataframe to dictionary (index method) + + Parameters + --------------- + df + Dataframe + + Returns + -------------- + dict + dict like {index -> {column -> value}} + """ + return df.to_dict('index') + + +def insert_index(df, column_name=constants.DEFAULT_INDEX_KEY, copy_dataframe=True, reset_index=True): + """ + Inserts the dataframe index in the specified column + + Parameters + -------------- + df + Dataframe + column_name + Name of the column that should host the index + copy_dataframe + Establishes if the original dataframe should be copied before inserting the column + + Returns + -------------- + df + Dataframe with index + """ + if copy_dataframe: + df = df.copy() + + if reset_index: + df = df.reset_index(drop=True) + + df[column_name] = df.index + return df + + +def insert_case_index(df, column_name=constants.DEFAULT_CASE_INDEX_KEY, case_id=constants.CASE_CONCEPT_NAME, copy_dataframe=True): + """ + Inserts the case number in the dataframe + + Parameters + --------------- + df + Dataframe + column_name + Name of the column that should host the case index + case_id + Case identifier + copy_dataframe + Establishes if the original dataframe should be copied before inserting the column + + Returns + --------------- + df + Dataframe with case index + """ + if copy_dataframe: + df = df.copy() + + df[column_name] = df.groupby(case_id).ngroup() + return df + + +def insert_ev_in_tr_index(df: pd.DataFrame, case_id: str = constants.CASE_CONCEPT_NAME, + column_name: str = constants.DEFAULT_INDEX_IN_TRACE_KEY, copy_dataframe=True) -> pd.DataFrame: + """ + Inserts a column that specify the index of the event inside the case + + Parameters + --------------- + df + Dataframe + case_id + Column that hosts the case identifier + column_name + Name of the column that should host the index + + Returns + -------------- + df + Dataframe with index + """ + if copy_dataframe: + df = df.copy() + + df_trace_idx = df.groupby(case_id).cumcount() + df[column_name] = df_trace_idx + return df + + +def format_unique(values): + try: + values = values.to_numpy() + except: + pass + + values = values.tolist() + return values + + +def insert_feature_activity_position_in_trace(df: pd.DataFrame, case_id: str = constants.CASE_CONCEPT_NAME, + activity_key: str = xes_constants.DEFAULT_NAME_KEY, prefix="@@position_"): + """ + Inserts additional columns @@position_ACT1, @@position_ACT2 ... + which are populated for every event having activity ACT1, ACT2 respectively, + with the index of the event inside its case. + + Parameters + ------------------ + df + Pandas dataframe + case_id + Case idntifier + activity_key + Activity + prefix + Prefix of the "activity position in trace" feature (default: @@position_) + + Returns + ------------------ + df + Pandas dataframe + """ + df = insert_ev_in_tr_index(df, case_id=case_id) + activities = format_unique(df[activity_key].unique()) + for act in activities: + df[prefix + act] = df[activity_key].apply(lambda x: np.nan if x == act else -1) + df[prefix + act] = df[prefix + act].fillna(df[constants.DEFAULT_INDEX_IN_TRACE_KEY]) + df[prefix + act] = df[prefix + act].replace(-1, np.nan) + return df + + +def insert_case_arrival_finish_rate(log: pd.DataFrame, case_id_column=constants.CASE_CONCEPT_NAME, timestamp_column=xes_constants.DEFAULT_TIMESTAMP_KEY, start_timestamp_column=None, arrival_rate_column="@@arrival_rate", finish_rate_column="@@finish_rate") -> pd.DataFrame: + """ + Inserts the arrival/finish rate in the dataframe. + + Parameters + ----------------- + log + Pandas dataframe + + Returns + ----------------- + log + Pandas dataframe enriched by arrival and finish rate + """ + if start_timestamp_column is None: + start_timestamp_column = timestamp_column + + case_arrival = log.groupby(case_id_column)[start_timestamp_column].agg("min").to_dict() + case_arrival = [[x, y.timestamp()] for x, y in case_arrival.items()] + case_arrival.sort(key=lambda x: (x[1], x[0])) + + case_finish = log.groupby(case_id_column)[timestamp_column].agg("max").to_dict() + case_finish = [[x, y.timestamp()] for x, y in case_finish.items()] + case_finish.sort(key=lambda x: (x[1], x[0])) + + i = len(case_arrival) - 1 + while i > 0: + case_arrival[i][1] = case_arrival[i][1] - case_arrival[i-1][1] + i = i - 1 + case_arrival[0][1] = 0 + case_arrival = {x[0]: x[1] for x in case_arrival} + + i = len(case_finish) - 1 + while i > 0: + case_finish[i][1] = case_finish[i][1] - case_finish[i-1][1] + i = i - 1 + case_finish[0][1] = 0 + case_finish = {x[0]: x[1] for x in case_finish} + + log[arrival_rate_column] = log[case_id_column].map(case_arrival) + log[finish_rate_column] = log[case_id_column].map(case_finish) + + return log + + +def insert_case_service_waiting_time(log: pd.DataFrame, case_id_column=constants.CASE_CONCEPT_NAME, timestamp_column=xes_constants.DEFAULT_TIMESTAMP_KEY, start_timestamp_column=None, diff_start_end_column="@@diff_start_end", service_time_column="@@service_time", sojourn_time_column="@@sojourn_time", waiting_time_column="@@waiting_time") -> pd.DataFrame: + """ + Inserts the service/waiting/sojourn time in the dataframe. + + Parameters + ---------------- + log + Pandas dataframe + parameters + Parameters of the method + + Returns + ---------------- + log + Pandas dataframe with service, waiting and sojourn time + """ + if start_timestamp_column is None: + start_timestamp_column = timestamp_column + + log[diff_start_end_column] = get_total_seconds(log[timestamp_column] - log[start_timestamp_column]) + service_times = log.groupby(case_id_column)[diff_start_end_column].sum().to_dict() + log[service_time_column] = log[case_id_column].map(service_times) + + start_timestamps = log.groupby(case_id_column)[start_timestamp_column].agg("min").to_dict() + complete_timestamps = log.groupby(case_id_column)[timestamp_column].agg("max").to_dict() + sojourn_time_cases = {x: complete_timestamps[x].timestamp() - start_timestamps[x].timestamp() for x in start_timestamps} + + log[sojourn_time_column] = log[case_id_column].map(sojourn_time_cases) + log[waiting_time_column] = log[sojourn_time_column] - log[service_time_column] + + return log + + +def check_is_pandas_dataframe(log): + """ + Checks if a log object is a dataframe + + Parameters + ------------- + log + Log object + + Returns + ------------- + boolean + Is dataframe? + """ + log_type = str(type(log)).lower() + return "dataframe" in log_type + + +def instantiate_dataframe(*args, **kwargs): + return DATAFRAME.DataFrame(*args, **kwargs) + + +def instantiate_dataframe_from_dict(*args, **kwargs): + return DATAFRAME.DataFrame.from_dict(*args, **kwargs) + + +def instantiate_dataframe_from_records(*args, **kwargs): + return DATAFRAME.DataFrame.from_records(*args, **kwargs) + + +def get_grouper(*args, **kwargs): + return DATAFRAME.Grouper(*args, **kwargs) + + +def get_total_seconds(difference): + return 86400 * difference.dt.days + difference.dt.seconds + 10**-6 * difference.dt.microseconds + 10**-9 * difference.dt.nanoseconds + + +def convert_to_seconds(dt_column): + try: + # Pandas + return dt_column.values.astype(np.int64) / 10**9 + except: + # CUDF + return [x/10**9 for x in dt_column.to_numpy().tolist()] + + +def dataframe_column_string_to_datetime(*args, **kwargs): + if importlib.util.find_spec("cudf") or constants.TEST_CUDF_DATAFRAMES_ENVIRONMENT: + pass + """if DATAFRAME == pd: + format = kwargs["format"] if "format" in kwargs else None + if format not in [None, 'mixed', 'ISO8601']: + kwargs["exact"] = False""" + + return DATAFRAME.to_datetime(*args, **kwargs) + + +def read_csv(*args, **kwargs): + if importlib.util.find_spec("cudf") or constants.TEST_CUDF_DATAFRAMES_ENVIRONMENT: + if kwargs and "encoding" in kwargs: + del kwargs["encoding"] + + return DATAFRAME.read_csv(*args, **kwargs) + + +def concat(*args, **kwargs): + return DATAFRAME.concat(*args, **kwargs) + + +def merge(*args, **kwargs): + return DATAFRAME.merge(*args, **kwargs) + + +def check_pandas_dataframe_columns(df, activity_key=None, case_id_key=None, timestamp_key=None, start_timestamp_key=None): + """ + Checks if the dataframe contains all the required columns. + If not, raise an exception + + Parameters + -------------- + df + Pandas dataframe + """ + if len(df.columns) < 3: + raise Exception("the dataframe should (at least) contain a column for the case identifier, a column for the activity and a column for the timestamp.") + + str_columns = {x for x in df.columns if "str" in str(df[x].dtype).lower() or "obj" in str(df[x].dtype).lower()} + timest_columns = {x for x in df.columns if "date" in str(df[x].dtype).lower() or "time" in str(df[x].dtype).lower()} + + if len(str_columns) < 2: + raise Exception("the dataframe should (at least) contain a column of type string for the case identifier and a column of type string for the activity.") + + if len(timest_columns) < 1: + raise Exception("the dataframe should (at least) contain a column of type date") + + if case_id_key is not None: + if case_id_key not in df.columns: + raise Exception("the specified case ID column is not contained in the dataframe. Available columns: "+str(sorted(list(df.columns)))) + + if case_id_key not in str_columns: + raise Exception("the case ID column should be of type string.") + + if df[case_id_key].isnull().values.any(): + raise Exception("the case ID column should not contain any empty value.") + + if activity_key is not None: + if activity_key not in df.columns: + raise Exception("the specified activity column is not contained in the dataframe. Available columns: "+str(sorted(list(df.columns)))) + + if activity_key not in str_columns: + raise Exception("the activity column should be of type string.") + + if df[activity_key].isnull().values.any(): + raise Exception("the activity column should not contain any empty value.") + + if timestamp_key is not None: + if timestamp_key not in df.columns: + raise Exception("the specified timestamp column is not contained in the dataframe. Available columns: "+str(sorted(list(df.columns)))) + + if timestamp_key not in timest_columns: + raise Exception("the timestamp column should be of time datetime. Use the function pandas.to_datetime") + + if df[timestamp_key].isnull().values.any(): + raise Exception("the timestamp column should not contain any empty value.") + + if start_timestamp_key is not None: + if start_timestamp_key not in df.columns: + raise Exception("the specified start timestamp column is not contained in the dataframe. Available columns: "+str(sorted(list(df.columns)))) + + if start_timestamp_key not in timest_columns: + raise Exception("the start timestamp column should be of time datetime. Use the function pandas.to_datetime") + + if df[start_timestamp_key].isnull().values.any(): + raise Exception("the start timestamp column should not contain any empty value.") + + """if len(set(df.columns).intersection( + set([constants.CASE_CONCEPT_NAME, xes_constants.DEFAULT_NAME_KEY, + xes_constants.DEFAULT_TIMESTAMP_KEY]))) < 3: + raise Exception( + "please format your dataframe accordingly! df = pm4py.format_dataframe(df, case_id='', activity_key='', timestamp_key='')")""" diff --git a/pm4py/pm4py/util/points_subset.py b/pm4py/pm4py/util/points_subset.py new file mode 100644 index 0000000000000000000000000000000000000000..8a1dfb3d94d4beb03ca2b67398f702b31ba2290f --- /dev/null +++ b/pm4py/pm4py/util/points_subset.py @@ -0,0 +1,59 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def pick_chosen_points(m, n): + """ + Pick chosen points in a list + + Parameters + ------------ + m + Number of wanted points + n + Number of current points + + Returns + ------------ + indexes + Indexes of chosen points + """ + return [i * n // m + n // (2 * m) for i in range(m)] + + +def pick_chosen_points_list(m, lst): + """ + Pick a chosen number of points from a list + + Parameters + ------------- + m + Number of wanted points + lst + List + + Returns + ------------- + reduced_lst + Reduced list + """ + n = len(lst) + points = pick_chosen_points(m, n) + + ret = [] + for i in points: + ret.append(lst[i]) + + return ret diff --git a/pm4py/pm4py/util/regex.py b/pm4py/pm4py/util/regex.py new file mode 100644 index 0000000000000000000000000000000000000000..f200d06bd83e843a584be96468a5706e58ee3af1 --- /dev/null +++ b/pm4py/pm4py/util/regex.py @@ -0,0 +1,41 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +def get_new_char(label, shared_obj): + """ + Get a new single character describing the activity, for the regex + + Parameters + ------------ + label + Label of the transition + shared_obj + Shared object + """ + list_to_avoid = ["[", "]", "(", ")", "*", "+", "^", "?", "\r", "\n", " ", "\t", "$", "\"", "!", "#", "&", "%", "|", + ".", ",", ";", "-", "'", "\\", "/", "{", "}", "$"] + shared_obj.count_char = shared_obj.count_char + 1 + while chr(shared_obj.count_char) in list_to_avoid: + shared_obj.count_char = shared_obj.count_char + 1 + shared_obj.mapping_dictio[label] = chr(shared_obj.count_char) + + +class SharedObj: + def __init__(self): + self.mapping_dictio = None + if self.mapping_dictio is None: + self.mapping_dictio = {} + self.count_char = 0 diff --git a/pm4py/pm4py/util/string_distance.py b/pm4py/pm4py/util/string_distance.py new file mode 100644 index 0000000000000000000000000000000000000000..9217e65280216855c65d9b934b0ac458bceb952a --- /dev/null +++ b/pm4py/pm4py/util/string_distance.py @@ -0,0 +1,126 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +import importlib.util +from typing import List, Union + + +def levenshtein_distance(s1, s2): + if len(s1) < len(s2): + return levenshtein_distance(s2, s1) + + if len(s2) == 0: + return len(s1) + + previous_row = range(len(s2) + 1) + for i, c1 in enumerate(s1): + current_row = [i + 1] + for j, c2 in enumerate(s2): + insertions = previous_row[j + 1] + 1 + deletions = current_row[j] + 1 + substitutions = previous_row[j] + (c1 != c2) + current_row.append(min(insertions, deletions, substitutions)) + previous_row = current_row + + return previous_row[-1] + + +def levenshtein(stru1, stru2): + if importlib.util.find_spec("stringdist"): + import stringdist + return stringdist.levenshtein(stru1, stru2) + + return levenshtein_distance(stru1, stru2) + + +def argmin_levenshtein(stru: str, list_stri: List[str]) -> Union[str, None]: + """ + Given a string (stru), finds a string in a list + of strings (list_stri) that minimizes the Levenshtein distance. + + Parameters + -------------- + stru + String (that is compared) + list_stri + List of comparison strings + + Returns + -------------- + argmin_dist + String (belonging to list_stri) that minimizes the Levenshtein distance + with the 'stru' argument + """ + if list_stri: + len_stru = len(stru) + argmin_dist = None + min_edit_dist = sys.maxsize + # sort the strings in the list based on the actual length in comparison + # to the provided string + list_stri = sorted(list_stri, key=lambda x: abs(len(x) - len_stru)) + for comp_stri in list_stri: + this_length_diff = abs(len(comp_stri) - len_stru) + # to make things faster, breaks whether we reach a string + # which distance is greater or equal than the edit distance + # with a previous string, because the edit distance would then + # be trivially greater or equal in length + if this_length_diff >= min_edit_dist: + break + dist_this_comp = levenshtein(stru, comp_stri) + if dist_this_comp < min_edit_dist: + argmin_dist = comp_stri + min_edit_dist = dist_this_comp + return argmin_dist + return None + + +def argmax_levenshtein(stru: str, list_stri: List[str]) -> Union[str, None]: + """ + Given a string (stru), finds a string in a list + of strings (list_stri) that maximizes the Levenshtein distance. + + Parameters + -------------- + stru + String (that is compared) + list_stri + List of comparison strings + + Returns + -------------- + argmax_dist + String (belonging to list_stri) that maximizes the Levenshtein distance + with the 'stru' argument + """ + if list_stri: + len_stru = len(stru) + argmax_dist = None + max_edit_dist = 0 + # sort the strings in the list based on the actual length in comparison + # to the provided string + list_stri = sorted(list_stri, key=lambda x: -len(x)) + for comp_stri in list_stri: + # to make things faster, breaks whether the + # following condition is reached + if len(comp_stri) + len_stru <= max_edit_dist: + break + dist_this_comp = levenshtein(stru, comp_stri) + if dist_this_comp > max_edit_dist: + argmax_dist = comp_stri + max_edit_dist = dist_this_comp + return argmax_dist + return None diff --git a/pm4py/pm4py/util/typing.py b/pm4py/pm4py/util/typing.py new file mode 100644 index 0000000000000000000000000000000000000000..c7d42c34c65ee11679a112e5cec0db445db9f71b --- /dev/null +++ b/pm4py/pm4py/util/typing.py @@ -0,0 +1,24 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Tuple, Dict, List, Any + +TemporalProfile = Dict[Tuple[str, str], Tuple[float, float]] +TemporalProfileConformanceResults = List[List[Tuple[float, float, float, float]]] +TemporalProfileStreamingConfResults = Dict[str, List[Tuple[str, float, float, float, float]]] + +AlignmentResult = Dict[str, Any] +ListAlignments = List[AlignmentResult] diff --git a/pm4py/pm4py/util/variants_util.py b/pm4py/pm4py/util/variants_util.py new file mode 100644 index 0000000000000000000000000000000000000000..c2303bdf2f26679a7eed184f95dd1a3633f4cd81 --- /dev/null +++ b/pm4py/pm4py/util/variants_util.py @@ -0,0 +1,63 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils, constants, xes_constants +from enum import Enum + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + PARAMETER_VARIANT_DELIMITER = "variant_delimiter" + + +def variant_to_trace(variant, parameters=None): + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + variant_delimiter = exec_utils.get_param_value(Parameters.PARAMETER_VARIANT_DELIMITER, parameters, + constants.DEFAULT_VARIANT_SEP) + + from pm4py.objects.log.obj import Trace, Event + + trace = Trace() + if type(variant) is tuple or type(variant) is list: + for act in variant: + event = Event({activity_key: act}) + trace.append(event) + elif type(variant) is str: + var_act = variant.split(variant_delimiter) + for act in var_act: + event = Event({activity_key: act}) + trace.append(event) + + return trace + + +def get_activities_from_variant(variant, parameters=None): + if parameters is None: + parameters = {} + + return tuple(variant) + + +def get_variant_from_trace(trace, parameters=None): + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + + return tuple([x[activity_key] for x in trace]) diff --git a/pm4py/pm4py/util/vis_utils.py b/pm4py/pm4py/util/vis_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..8eab41abda1f3c5612a788c0a22ac59adfbeed87 --- /dev/null +++ b/pm4py/pm4py/util/vis_utils.py @@ -0,0 +1,230 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import base64 +import os +import subprocess +import sys +from typing import Optional, Dict + + +MAX_EDGE_PENWIDTH_GRAPHVIZ = 2.6 +MIN_EDGE_PENWIDTH_GRAPHVIZ = 1.0 + + +def human_readable_stat(timedelta, stat_locale: Optional[Dict[str, str]] = None) -> str: + """ + Transform a timedelta into a human readable string + + Parameters + ---------- + timedelta + Timedelta + + Returns + ---------- + string + Human readable string + """ + if stat_locale is None: + stat_locale = {} + + c = int(float(timedelta)) + years = c // 31104000 + months = c // 2592000 + days = c // 86400 + hours = c // 3600 % 24 + minutes = c // 60 % 60 + seconds = c % 60 + if years > 0: + return str(years) + stat_locale.get("year", "Y") + elif months > 0: + return str(months) + stat_locale.get("month", "MO") + elif days > 0: + return str(days) + stat_locale.get("day", "D") + elif hours > 0: + return str(hours) + stat_locale.get("hour", "h") + elif minutes > 0: + return str(minutes) + stat_locale.get("minute", "m") + elif seconds > 0: + return str(seconds) + stat_locale.get("second", "s") + else: + c = int(float(timedelta*1000)) + if c > 0: + return str(c) + stat_locale.get("millisecond", "ms") + else: + return str(int(float(timedelta * 10**9))) + stat_locale.get("nanosecond", "ns") + + +def get_arc_penwidth(arc_measure, min_arc_measure, max_arc_measure): + """ + Calculate arc width given the current arc measure value, the minimum arc measure value and the + maximum arc measure value + + Parameters + ----------- + arc_measure + Current arc measure value + min_arc_measure + Minimum measure value among all arcs + max_arc_measure + Maximum measure value among all arcs + + Returns + ----------- + penwidth + Current arc width in the graph + """ + return MIN_EDGE_PENWIDTH_GRAPHVIZ + (MAX_EDGE_PENWIDTH_GRAPHVIZ - MIN_EDGE_PENWIDTH_GRAPHVIZ) * ( + arc_measure - min_arc_measure) / (max_arc_measure - min_arc_measure + 0.00001) + + +def get_trans_freq_color(trans_count, min_trans_count, max_trans_count): + """ + Gets transition frequency color + + Parameters + ---------- + trans_count + Current transition count + min_trans_count + Minimum transition count + max_trans_count + Maximum transition count + + Returns + ---------- + color + Frequency color for visible transition + """ + trans_base_color = int(255 - 100 * (trans_count - min_trans_count) / (max_trans_count - min_trans_count + 0.00001)) + trans_base_color_hex = str(hex(trans_base_color))[2:].upper() + return "#" + trans_base_color_hex + trans_base_color_hex + "FF" + + +def get_base64_from_gviz(gviz): + """ + Get base 64 from string content of the file + + Parameters + ----------- + gviz + Graphviz diagram + + Returns + ----------- + base64 + Base64 string + """ + render = gviz.render(view=False) + with open(render, "rb") as f: + return base64.b64encode(f.read()) + + +def get_base64_from_file(temp_file): + """ + Get base 64 from string content of the file + + Parameters + ----------- + temp_file + Temporary file path + + Returns + ----------- + base64 + Base64 string + """ + with open(temp_file, "rb") as f: + return base64.b64encode(f.read()) + + +def check_visualization_inside_jupyter(): + """ + Checks if the visualization of the model is performed + inside a Jupyter notebook + """ + try: + shell = get_ipython().__class__.__name__ + if shell == "ZMQInteractiveShell" or shell == "Shell": + return True + else: + return False + except NameError: + return False + + +def view_image_in_jupyter(file_name): + """ + Visualizes a picture inside the Jupyter notebooks + + Parameters + ------------- + file_name + Name of the file + """ + from IPython.display import Image + image = Image(file_name) + from IPython.display import display + return display(image) + + +def open_opsystem_image_viewer(file_name): + """ + Visualizes a picture using the image viewer of the operating system + + Parameters + ------------- + file_name + Name of the file + """ + if sys.platform.startswith('darwin'): + subprocess.call(('open', file_name)) + elif os.name == 'nt': # For Windows + os.startfile(file_name) + elif os.name == 'posix': # For Linux, Mac, etc. + subprocess.call(('xdg-open', file_name)) + + +def get_corr_hex(num): + """ + Gets correspondence between a number + and an hexadecimal string + + Parameters + ------------- + num + Number + + Returns + ------------- + hex_string + Hexadecimal string + """ + if num < 10: + return str(int(num)) + elif num < 11: + return "A" + elif num < 12: + return "B" + elif num < 13: + return "C" + elif num < 14: + return "D" + elif num < 15: + return "E" + elif num < 16: + return "F" diff --git a/pm4py/pm4py/util/xes_constants.py b/pm4py/pm4py/util/xes_constants.py new file mode 100644 index 0000000000000000000000000000000000000000..c5902e06c07866af6ee534c8f29232ee89fe3bb5 --- /dev/null +++ b/pm4py/pm4py/util/xes_constants.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +# XES TAGS +TAG_BOOLEAN = 'boolean' +TAG_CLASSIFIER = 'classifier' +TAG_DATE = 'date' +TAG_EVENT = 'event' +TAG_EXTENSION = 'extension' +TAG_FLOAT = 'float' +TAG_GLOBAL = 'global' +TAG_ID = 'id' +TAG_INT = 'int' +TAG_LIST = 'list' +TAG_LOG = 'log' +TAG_STRING = 'string' +TAG_TRACE = 'trace' +TAG_VALUES = 'values' + +# XES 2.0 tags +TAG_CONTAINER = 'container' + +# XES/INTERNAL KEYS +KEY_CHILDREN = 'children' +KEY_KEY = 'key' +KEY_KEYS = 'keys' +KEY_NAME = 'name' +KEY_PREFIX = 'prefix' +KEY_SCOPE = 'scope' +KEY_URI = 'uri' +KEY_VALUE = 'value' + +DEFAULT_NAME_KEY = 'concept:name' +DEFAULT_INSTANCE_KEY = 'concept:instance' +DEFAULT_TIMESTAMP_KEY = 'time:timestamp' +DEFAULT_START_TIMESTAMP_KEY = 'start_timestamp' +DEFAULT_TRACEID_KEY = 'concept:name' +DEFAULT_RESOURCE_KEY = 'org:resource' +DEFAULT_TRANSITION_KEY = "lifecycle:transition" +DEFAULT_GROUP_KEY = 'org:group' diff --git a/pm4py/pm4py/utils.py b/pm4py/pm4py/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..92f72a14cf9e10c4cc7e7c7894ff14e76aa26328 --- /dev/null +++ b/pm4py/pm4py/utils.py @@ -0,0 +1,546 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +""" + +import datetime +from typing import Optional, Tuple, Any, Collection, Union, List + +import pandas as pd + +from pm4py.objects.log.obj import EventLog, EventStream, Trace, Event +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.objects.powl.obj import POWL +from pm4py.objects.ocel.obj import OCEL +from pm4py.util import constants, xes_constants, pandas_utils +import warnings +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns +from pm4py.util.dt_parsing.variants import strpfromiso +import deprecation + + +INDEX_COLUMN = "@@index" +CASE_INDEX_COLUMN = "@@case_index" + + +def format_dataframe(df: pd.DataFrame, case_id: str = constants.CASE_CONCEPT_NAME, + activity_key: str = xes_constants.DEFAULT_NAME_KEY, + timestamp_key: str = xes_constants.DEFAULT_TIMESTAMP_KEY, + start_timestamp_key: str = xes_constants.DEFAULT_START_TIMESTAMP_KEY, + timest_format: Optional[str] = None) -> pd.DataFrame: + """ + Give the appropriate format on the dataframe, for process mining purposes + + :param df: Dataframe + :param case_id: Case identifier column + :param activity_key: Activity column + :param timestamp_key: Timestamp column + :param start_timestamp_key: Start timestamp column + :param timest_format: Timestamp format that is provided to Pandas + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pandas as pd + import pm4py + + dataframe = pd.read_csv('event_log.csv') + dataframe = pm4py.format_dataframe(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp', start_timestamp_key='start_timestamp', timest_format='%Y-%m-%d %H:%M:%S') + """ + if timest_format is None: + timest_format = constants.DEFAULT_TIMESTAMP_PARSE_FORMAT + + from pm4py.objects.log.util import dataframe_utils + if case_id not in df.columns: + raise Exception(case_id + " column (case ID) is not in the dataframe!") + if activity_key not in df.columns: + raise Exception(activity_key + " column (activity) is not in the dataframe!") + if timestamp_key not in df.columns: + raise Exception(timestamp_key + " column (timestamp) is not in the dataframe!") + if case_id != constants.CASE_CONCEPT_NAME: + if constants.CASE_CONCEPT_NAME in df.columns: + del df[constants.CASE_CONCEPT_NAME] + df[constants.CASE_CONCEPT_NAME] = df[case_id] + if activity_key != xes_constants.DEFAULT_NAME_KEY: + if xes_constants.DEFAULT_NAME_KEY in df.columns: + del df[xes_constants.DEFAULT_NAME_KEY] + df[xes_constants.DEFAULT_NAME_KEY] = df[activity_key] + if timestamp_key != xes_constants.DEFAULT_TIMESTAMP_KEY: + if xes_constants.DEFAULT_TIMESTAMP_KEY in df.columns: + del df[xes_constants.DEFAULT_TIMESTAMP_KEY] + df[xes_constants.DEFAULT_TIMESTAMP_KEY] = df[timestamp_key] + # makes sure that the timestamps column are of timestamp type + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=timest_format) + # drop NaN(s) in the main columns (case ID, activity, timestamp) to ensure functioning of the + # algorithms + prev_length = len(df) + df = df.dropna(subset={constants.CASE_CONCEPT_NAME, xes_constants.DEFAULT_NAME_KEY, + xes_constants.DEFAULT_TIMESTAMP_KEY}, how="any") + + if len(df) < prev_length: + if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("Some rows of the Pandas data frame have been removed because of empty case IDs, activity labels, or timestamps to ensure the correct functioning of PM4Py's algorithms.") + + # make sure the case ID column is of string type + df[constants.CASE_CONCEPT_NAME] = df[constants.CASE_CONCEPT_NAME].astype("string") + # make sure the activity column is of string type + df[xes_constants.DEFAULT_NAME_KEY] = df[xes_constants.DEFAULT_NAME_KEY].astype("string") + # set an index column + df = pandas_utils.insert_index(df, INDEX_COLUMN, copy_dataframe=False) + # sorts the dataframe + df = df.sort_values([constants.CASE_CONCEPT_NAME, xes_constants.DEFAULT_TIMESTAMP_KEY, INDEX_COLUMN]) + # re-set the index column + df = pandas_utils.insert_index(df, INDEX_COLUMN, copy_dataframe=False) + # sets the index column in the dataframe + df = pandas_utils.insert_case_index(df, CASE_INDEX_COLUMN, copy_dataframe=False) + # sets the properties + if not hasattr(df, 'attrs'): + # legacy (Python 3.6) support + df.attrs = {} + if start_timestamp_key in df.columns: + df[xes_constants.DEFAULT_START_TIMESTAMP_KEY] = df[start_timestamp_key] + df.attrs[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = xes_constants.DEFAULT_START_TIMESTAMP_KEY + df.attrs[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = xes_constants.DEFAULT_NAME_KEY + df.attrs[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = xes_constants.DEFAULT_TIMESTAMP_KEY + df.attrs[constants.PARAMETER_CONSTANT_GROUP_KEY] = xes_constants.DEFAULT_GROUP_KEY + df.attrs[constants.PARAMETER_CONSTANT_TRANSITION_KEY] = xes_constants.DEFAULT_TRANSITION_KEY + df.attrs[constants.PARAMETER_CONSTANT_RESOURCE_KEY] = xes_constants.DEFAULT_RESOURCE_KEY + df.attrs[constants.PARAMETER_CONSTANT_CASEID_KEY] = constants.CASE_CONCEPT_NAME + return df + + +def rebase(log_obj: Union[EventLog, EventStream, pd.DataFrame], case_id: str = constants.CASE_CONCEPT_NAME, + activity_key: str = xes_constants.DEFAULT_NAME_KEY, + timestamp_key: str = xes_constants.DEFAULT_TIMESTAMP_KEY, + start_timestamp_key: str = xes_constants.DEFAULT_START_TIMESTAMP_KEY, timest_format: Optional[str] = None) -> Union[EventLog, EventStream, pd.DataFrame]: + """ + Re-base the log object, changing the case ID, activity and timestamp attributes. + + :param log_obj: Log object + :param case_id: Case identifier + :param activity_key: Activity + :param timestamp_key: Timestamp + :param start_timestamp_key: Start timestamp + :param timest_format: Timestamp format that is provided to Pandas + :rtype: ``Union[EventLog, EventStream, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + rebased_dataframe = pm4py.rebase(dataframe, case_id='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp') + """ + import pm4py + + __event_log_deprecation_warning(log_obj) + + if check_is_pandas_dataframe(log_obj): + check_pandas_dataframe_columns(log_obj) + + if check_is_pandas_dataframe(log_obj): + return format_dataframe(log_obj, case_id=case_id, activity_key=activity_key, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key, timest_format=timest_format) + elif isinstance(log_obj, EventLog): + log_obj = pm4py.convert_to_dataframe(log_obj) + log_obj = format_dataframe(log_obj, case_id=case_id, activity_key=activity_key, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key, timest_format=timest_format) + from pm4py.objects.conversion.log import converter + return converter.apply(log_obj, variant=converter.Variants.TO_EVENT_LOG) + elif isinstance(log_obj, EventStream): + log_obj = pm4py.convert_to_dataframe(log_obj) + log_obj = format_dataframe(log_obj, case_id=case_id, activity_key=activity_key, timestamp_key=timestamp_key, + start_timestamp_key=start_timestamp_key, timest_format=timest_format) + return pm4py.convert_to_event_stream(log_obj) + + +def parse_process_tree(tree_string: str) -> ProcessTree: + """ + Parse a process tree from a string + + :param tree_string: String representing a process tree (e.g. '-> ( 'A', O ( 'B', 'C' ), 'D' )'). Operators are '->': sequence, '+': parallel, 'X': xor choice, '*': binary loop, 'O' or choice + :rtype: ``ProcessTree`` + + .. code-block:: python3 + + import pm4py + + process_tree = pm4py.parse_process_tree('-> ( 'A', O ( 'B', 'C' ), 'D' )') + """ + from pm4py.objects.process_tree.utils.generic import parse + return parse(tree_string) + + +def parse_powl_model_string(powl_string: str) -> POWL: + """ + Parse a POWL model from a string representation of the process model + (with the same format as the __repr__ and __str__ methods of the POWL model) + + :param powl_string: POWL model expressed as a string (__repr__ of the POWL model) + :rtype: ``POWL`` + + .. code-block:: python3 + + import pm4py + + powl_model = pm4py.parse_powl_model_string('PO=(nodes={ NODE1, NODE2, NODE3 }, order={ NODE1-->NODE2 }') + print(powl_model) + + Parameters + ---------- + powl_string + + Returns + ------- + + """ + from pm4py.objects.powl import parser + return parser.parse_powl_model_string(powl_string) + + +def serialize(*args) -> Tuple[str, bytes]: + """ + Serialize a PM4Py object into a bytes string + + :param args: A PM4Py object, among: - an EventLog object - a Pandas dataframe object - a (Petrinet, Marking, Marking) tuple - a ProcessTree object - a BPMN object - a DFG, including the dictionary of the directly-follows relations, the start activities and the end activities + :rtype: ``Tuple[str, bytes]`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe) + serialization = pm4py.serialize(net, im, fm) + """ + from pm4py.objects.log.obj import EventLog + from pm4py.objects.petri_net.obj import PetriNet + from pm4py.objects.process_tree.obj import ProcessTree + from pm4py.objects.bpmn.obj import BPMN + from collections import Counter + + if type(args[0]) is EventLog: + from pm4py.objects.log.exporter.xes import exporter as xes_exporter + return (constants.AvailableSerializations.EVENT_LOG.value, xes_exporter.serialize(*args)) + elif pandas_utils.check_is_pandas_dataframe(args[0]): + from io import BytesIO + buffer = BytesIO() + args[0].to_parquet(buffer) + return (constants.AvailableSerializations.DATAFRAME.value, buffer.getvalue()) + elif len(args) == 3 and type(args[0]) is PetriNet: + from pm4py.objects.petri_net.exporter import exporter as petri_exporter + return (constants.AvailableSerializations.PETRI_NET.value, petri_exporter.serialize(*args)) + elif type(args[0]) is ProcessTree: + from pm4py.objects.process_tree.exporter import exporter as tree_exporter + return (constants.AvailableSerializations.PROCESS_TREE.value, tree_exporter.serialize(*args)) + elif type(args[0]) is BPMN: + from pm4py.objects.bpmn.exporter import exporter as bpmn_exporter + return (constants.AvailableSerializations.BPMN.value, bpmn_exporter.serialize(*args)) + elif len(args) == 3 and (isinstance(args[0], dict) or isinstance(args[0], Counter)): + from pm4py.objects.dfg.exporter import exporter as dfg_exporter + return (constants.AvailableSerializations.DFG.value, + dfg_exporter.serialize(args[0], parameters={"start_activities": args[1], "end_activities": args[2]})) + + +def deserialize(ser_obj: Tuple[str, bytes]) -> Any: + """ + Deserialize a bytes string to a PM4Py object + + :param ser_obj: Serialized object (a tuple consisting of a string denoting the type of the object, and a bytes string representing the serialization) + :rtype: ``Any`` + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe) + serialization = pm4py.serialize(net, im, fm) + net, im, fm = pm4py.deserialize(serialization) + """ + if ser_obj[0] == constants.AvailableSerializations.EVENT_LOG.value: + from pm4py.objects.log.importer.xes import importer as xes_importer + return xes_importer.deserialize(ser_obj[1]) + elif ser_obj[0] == constants.AvailableSerializations.DATAFRAME.value: + from io import BytesIO + buffer = BytesIO() + buffer.write(ser_obj[1]) + buffer.flush() + return pd.read_parquet(buffer) + elif ser_obj[0] == constants.AvailableSerializations.PETRI_NET.value: + from pm4py.objects.petri_net.importer import importer as petri_importer + return petri_importer.deserialize(ser_obj[1]) + elif ser_obj[0] == constants.AvailableSerializations.PROCESS_TREE.value: + from pm4py.objects.process_tree.importer import importer as tree_importer + return tree_importer.deserialize(ser_obj[1]) + elif ser_obj[0] == constants.AvailableSerializations.BPMN.value: + from pm4py.objects.bpmn.importer import importer as bpmn_importer + return bpmn_importer.deserialize(ser_obj[1]) + elif ser_obj[0] == constants.AvailableSerializations.DFG.value: + from pm4py.objects.dfg.importer import importer as dfg_importer + return dfg_importer.deserialize(ser_obj[1]) + + +def get_properties(log, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", resource_key: str = "org:resource", group_key: Optional[str] = None, start_timestamp_key: Optional[str] = None, **kwargs): + """ + Gets the properties from a log object + + :param log: Log object + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param start_timestamp_key: (optional) attribute to be used for the start timestamp + :param case_id_key: attribute to be used as case identifier + :param resource_key: (if provided) attribute to be used as resource + :param group_key: (if provided) attribute to be used as group identifier + :rtype: ``Dict`` + """ + __event_log_deprecation_warning(log) + + from copy import copy + parameters = copy(log.properties) if hasattr(log, 'properties') else copy(log.attrs) if hasattr(log, + 'attrs') else {} + + if activity_key is not None: + parameters[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = activity_key + parameters[constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY] = activity_key + + if timestamp_key is not None: + parameters[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = timestamp_key + + if start_timestamp_key is not None: + parameters[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = start_timestamp_key + + if case_id_key is not None: + parameters[constants.PARAMETER_CONSTANT_CASEID_KEY] = case_id_key + + if resource_key is not None: + parameters[constants.PARAMETER_CONSTANT_RESOURCE_KEY] = resource_key + + if group_key is not None: + parameters[constants.PARAMETER_CONSTANT_GROUP_KEY] = group_key + + for k, v in kwargs.items(): + parameters[k] = v + + return parameters + + +@deprecation.deprecated(deprecated_in="2.3.0", removed_in="3.0.0", details="this method will be removed in a future release." + "Please use the method-specific arguments.") +def set_classifier(log, classifier, classifier_attribute=constants.DEFAULT_CLASSIFIER_ATTRIBUTE): + """ + Methods to set the specified classifier on an existing event log + + :param log: Log object + :param classifier: Classifier that should be set: - A list of event attributes can be provided - A single event attribute can be provided - A classifier stored between the "classifiers" of the log object can be provided + :param classifier_attribute: The attribute of the event that should store the concatenation of the attribute values for the given classifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + """ + __event_log_deprecation_warning(log) + + if type(classifier) is list: + pass + elif type(classifier) is str: + if type(log) is EventLog and classifier in log.classifiers: + classifier = log.classifiers[classifier] + else: + classifier = [classifier] + + if type(log) is EventLog: + for trace in log: + for event in trace: + event[classifier_attribute] = "+".join(list(event[x] for x in classifier)) + log.properties[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = classifier_attribute + log.properties[constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY] = classifier_attribute + elif pandas_utils.check_is_pandas_dataframe(log): + log[classifier_attribute] = log[classifier[0]] + for i in range(1, len(classifier)): + log[classifier_attribute] = log[classifier_attribute] + "+" + log[classifier[i]] + log.attrs[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = classifier_attribute + log.attrs[constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY] = classifier_attribute + else: + raise Exception("setting classifier is not defined for this class of objects") + + return log + + +def parse_event_log_string(traces: Collection[str], sep: str = ",", + activity_key: str = xes_constants.DEFAULT_NAME_KEY, + timestamp_key: str = xes_constants.DEFAULT_TIMESTAMP_KEY, + case_id_key: str = constants.CASE_CONCEPT_NAME, + return_legacy_log_object: bool = constants.DEFAULT_READ_XES_LEGACY_OBJECT) -> Union[EventLog, pd.DataFrame]: + """ + Parse a collection of traces expressed as strings + (e.g., ["A,B,C,D", "A,C,B,D", "A,D"]) + to a log object (Pandas dataframe) + + :param traces: Collection of traces expressed as strings + :param sep: Separator used to split the activities of a string trace + :param activity_key: The attribute that should be used as activity + :param timestamp_key: The attribute that should be used as timestamp + :param case_id_key: The attribute that should be used as case identifier + :param return_legacy_log_object: boolean value enabling returning a log object (default: False) + :rtype: ``pd.DataFrame`` + + .. code-block:: python3 + + import pm4py + + dataframe = pm4py.parse_event_log_string(["A,B,C,D", "A,C,B,D", "A,D"]) + """ + cases = [] + activitiess = [] + timestamps = [] + this_timest = 10000000 + + for index, trace in enumerate(traces): + activities = trace.split(sep) + for act in activities: + cases.append(str(index)) + activitiess.append(act) + timestamps.append(strpfromiso.fix_naivety(datetime.datetime.fromtimestamp(this_timest))) + this_timest = this_timest + 1 + + dataframe = pandas_utils.instantiate_dataframe({case_id_key: cases, activity_key: activitiess, timestamp_key: timestamps}) + + if return_legacy_log_object: + import pm4py + + return pm4py.convert_to_event_log(dataframe, case_id_key=case_id_key) + + return dataframe + + +def project_on_event_attribute(log: Union[EventLog, pd.DataFrame], attribute_key=xes_constants.DEFAULT_NAME_KEY, case_id_key=None) -> \ +List[List[str]]: + """ + Project the event log on a specified event attribute. The result is a list, containing a list for each case: + all the cases are transformed to list of values for the specified attribute. + + Example: + + pm4py.project_on_event_attribute(log, "concept:name") + + [['register request', 'examine casually', 'check ticket', 'decide', 'reinitiate request', 'examine thoroughly', 'check ticket', 'decide', 'pay compensation'], + ['register request', 'check ticket', 'examine casually', 'decide', 'pay compensation'], + ['register request', 'examine thoroughly', 'check ticket', 'decide', 'reject request'], + ['register request', 'examine casually', 'check ticket', 'decide', 'pay compensation'], + ['register request', 'examine casually', 'check ticket', 'decide', 'reinitiate request', 'check ticket', 'examine casually', 'decide', 'reinitiate request', 'examine casually', 'check ticket', 'decide', 'reject request'], + ['register request', 'check ticket', 'examine thoroughly', 'decide', 'reject request']] + + :param log: Event log / Pandas dataframe + :param attribute_key: The attribute to be used + :param case_id_key: The attribute to be used as case identifier + :rtype: ``List[List[str]]`` + + .. code-block:: python3 + + import pm4py + + list_list_activities = pm4py.project_on_event_attribute(dataframe, 'concept:name') + """ + __event_log_deprecation_warning(log) + + output = [] + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log) + from pm4py.streaming.conversion import from_pandas + parameters = {from_pandas.Parameters.ACTIVITY_KEY: attribute_key} + if case_id_key is not None: + parameters[from_pandas.Parameters.CASE_ID_KEY] = case_id_key + it = from_pandas.apply(log, parameters=parameters) + for trace in it: + output.append([x[xes_constants.DEFAULT_NAME_KEY] if xes_constants.DEFAULT_NAME_KEY is not None else None for x in trace]) + else: + for trace in log: + output.append([x[attribute_key] if attribute_key is not None else None for x in trace]) + return output + + +def sample_cases(log: Union[EventLog, pd.DataFrame], num_cases: int, case_id_key: str = "case:concept:name") -> Union[EventLog, pd.DataFrame]: + """ + (Random) Sample a given number of cases from the event log. + + :param log: Event log / Pandas dataframe + :param num_cases: Number of cases to sample + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventLog, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + sampled_dataframe = pm4py.sample_cases(dataframe, 10, case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, case_id_key=case_id_key) + + properties = get_properties(log, case_id_key=case_id_key) + + if isinstance(log, EventLog): + from pm4py.objects.log.util import sampling + return sampling.sample(log, num_cases) + elif check_is_pandas_dataframe(log): + from pm4py.objects.log.util import dataframe_utils + properties["max_no_cases"] = num_cases + return dataframe_utils.sample_dataframe(log, parameters=properties) + + +def sample_events(log: Union[EventStream, OCEL], num_events: int) -> Union[EventStream, OCEL, pd.DataFrame]: + """ + (Random) Sample a given number of events from the event log. + + :param log: Event stream / OCEL / Pandas dataframes + :param num_events: Number of events to sample + :param case_id_key: attribute to be used as case identifier + :rtype: ``Union[EventStream, OCEL, pd.DataFrame]`` + + .. code-block:: python3 + + import pm4py + + sampled_dataframe = pm4py.sample_events(dataframe, 100) + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log) + + if isinstance(log, EventLog): + from pm4py.objects.log.util import sampling + return sampling.sample_log(log, num_events) + elif isinstance(log, EventStream): + from pm4py.objects.log.util import sampling + return sampling.sample_stream(log, num_events) + elif isinstance(log, OCEL): + from pm4py.objects.ocel.util import sampling + return sampling.sample_ocel_events(log, parameters={"num_entities": num_events}) + elif check_is_pandas_dataframe(log): + return log.sample(n=num_events) + + +def __event_log_deprecation_warning(log): + if constants.SHOW_EVENT_LOG_DEPRECATION and not hasattr(log, "deprecation_warning_shown"): + if constants.SHOW_INTERNAL_WARNINGS: + if isinstance(log, EventLog) or isinstance(log, Trace): + warnings.warn("the EventLog class has been deprecated and will be removed in a future release.") + log.deprecation_warning_shown = True + elif isinstance(log, Trace): + warnings.warn("the Trace class has been deprecated and will be removed in a future release.") + log.deprecation_warning_shown = True + elif isinstance(log, EventStream): + warnings.warn("the EventStream class has been deprecated and will be removed in a future release.") + log.deprecation_warning_shown = True diff --git a/pm4py/pm4py/vis.py b/pm4py/pm4py/vis.py new file mode 100644 index 0000000000000000000000000000000000000000..c10d4d1d871f895c2f9599dd852228ae3ad10309 --- /dev/null +++ b/pm4py/pm4py/vis.py @@ -0,0 +1,1382 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.vis`` module contains the visualizations offered in ``pm4py`` +""" + +import os +import sys +from typing import Optional +from typing import Union, List, Dict, Any, Tuple, Set + +import pandas as pd + +from pm4py.objects.bpmn.obj import BPMN +from pm4py.objects.powl.obj import POWL +from pm4py.objects.heuristics_net.obj import HeuristicsNet +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns +from pm4py.utils import get_properties +from pm4py.objects.transition_system.obj import TransitionSystem +from pm4py.objects.trie.obj import Trie +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.org.sna.obj import SNA +from pm4py.util import constants + + +def view_petri_net(petri_net: PetriNet, initial_marking: Optional[Marking] = None, + final_marking: Optional[Marking] = None, format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, bgcolor: str = "white", + decorations: Dict[Any, Any] = None, debug: bool = False, rankdir: str = constants.DEFAULT_RANKDIR_GVIZ): + """ + Views a (composite) Petri net + + :param petri_net: Petri net + :param initial_marking: Initial marking + :param final_marking: Final marking + :param format: Format of the output picture (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param bgcolor: Background color of the visualization (default: white) + :param decorations: Decorations (color, label) associated to the elements of the Petri net + :param debug: Boolean enabling/disabling the debug mode (show place and transition's names) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.view_petri_net(net, im, fm, format='svg') + """ + format = str(format).lower() + from pm4py.visualization.petri_net import visualizer as pn_visualizer + gviz = pn_visualizer.apply(petri_net, initial_marking, final_marking, + parameters={pn_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: format, "bgcolor": bgcolor, "decorations": decorations, "debug": debug, "set_rankdir": rankdir}) + pn_visualizer.view(gviz) + + +def save_vis_petri_net(petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, file_path: str, bgcolor: str = "white", + decorations: Dict[Any, Any] = None, debug: bool = False, rankdir: str = constants.DEFAULT_RANKDIR_GVIZ, **kwargs): + """ + Saves a Petri net visualization to a file + + :param petri_net: Petri net + :param initial_marking: Initial marking + :param final_marking: Final marking + :param file_path: Destination path + :param bgcolor: Background color of the visualization (default: white) + :param decorations: Decorations (color, label) associated to the elements of the Petri net + :param debug: Boolean enabling/disabling the debug mode (show place and transition's names) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.save_vis_petri_net(net, im, fm, 'petri_net.png') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.petri_net import visualizer as pn_visualizer + gviz = pn_visualizer.apply(petri_net, initial_marking, final_marking, + parameters={pn_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: format, "bgcolor": bgcolor, "decorations": decorations, "debug": debug, "set_rankdir": rankdir}) + return pn_visualizer.save(gviz, file_path) + + +def view_performance_dfg(dfg: dict, start_activities: dict, end_activities: dict, format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, + aggregation_measure="mean", bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ, serv_time: Optional[Dict[str, float]] = None): + """ + Views a performance DFG + + :param dfg: DFG object + :param start_activities: Start activities + :param end_activities: End activities + :param format: Format of the output picture (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param aggregation_measure: Aggregation measure (default: mean): mean, median, min, max, sum, stdev + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + :param serv_time: (optional) provides the activities' service times, used to decorate the graph + + .. code-block:: python3 + + import pm4py + + performance_dfg, start_activities, end_activities = pm4py.discover_performance_dfg(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp') + pm4py.view_performance_dfg(performance_dfg, start_activities, end_activities, format='svg') + """ + format = str(format).lower() + from pm4py.visualization.dfg import visualizer as dfg_visualizer + from pm4py.visualization.dfg.variants import performance as dfg_perf_visualizer + dfg_parameters = dfg_perf_visualizer.Parameters + parameters = {} + parameters[dfg_parameters.FORMAT] = format + parameters[dfg_parameters.START_ACTIVITIES] = start_activities + parameters[dfg_parameters.END_ACTIVITIES] = end_activities + parameters[dfg_parameters.AGGREGATION_MEASURE] = aggregation_measure + parameters["bgcolor"] = bgcolor + parameters["rankdir"] = rankdir + gviz = dfg_perf_visualizer.apply(dfg, serv_time=serv_time, parameters=parameters) + dfg_visualizer.view(gviz) + + +def save_vis_performance_dfg(dfg: dict, start_activities: dict, end_activities: dict, file_path: str, + aggregation_measure="mean", bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ, serv_time: Optional[Dict[str, float]] = None, **kwargs): + """ + Saves the visualization of a performance DFG + + :param dfg: DFG object + :param start_activities: Start activities + :param end_activities: End activities + :param file_path: Destination path + :param aggregation_measure: Aggregation measure (default: mean): mean, median, min, max, sum, stdev + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + :param serv_time: (optional) provides the activities' service times, used to decorate the graph + + .. code-block:: python3 + + import pm4py + + performance_dfg, start_activities, end_activities = pm4py.discover_performance_dfg(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp') + pm4py.save_vis_performance_dfg(performance_dfg, start_activities, end_activities, 'perf_dfg.png') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.dfg import visualizer as dfg_visualizer + from pm4py.visualization.dfg.variants import performance as dfg_perf_visualizer + dfg_parameters = dfg_perf_visualizer.Parameters + parameters = {} + parameters[dfg_parameters.FORMAT] = format + parameters[dfg_parameters.START_ACTIVITIES] = start_activities + parameters[dfg_parameters.END_ACTIVITIES] = end_activities + parameters[dfg_parameters.AGGREGATION_MEASURE] = aggregation_measure + parameters["bgcolor"] = bgcolor + parameters["rankdir"] = rankdir + gviz = dfg_perf_visualizer.apply(dfg, serv_time=serv_time, parameters=parameters) + return dfg_visualizer.save(gviz, file_path) + + +def view_dfg(dfg: dict, start_activities: dict, end_activities: dict, format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, bgcolor: str = "white", max_num_edges: int = sys.maxsize, rankdir: str = constants.DEFAULT_RANKDIR_GVIZ): + """ + Views a (composite) DFG + + :param dfg: DFG object + :param start_activities: Start activities + :param end_activities: End activities + :param format: Format of the output picture (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param bgcolor: Background color of the visualization (default: white) + :param max_num_edges: maximum number of edges to represent in the graph + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + dfg, start_activities, end_activities = pm4py.discover_dfg(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp') + pm4py.view_dfg(dfg, start_activities, end_activities, format='svg') + """ + format = str(format).lower() + from pm4py.visualization.dfg import visualizer as dfg_visualizer + dfg_parameters = dfg_visualizer.Variants.FREQUENCY.value.Parameters + parameters = {} + parameters[dfg_parameters.FORMAT] = format + parameters[dfg_parameters.START_ACTIVITIES] = start_activities + parameters[dfg_parameters.END_ACTIVITIES] = end_activities + parameters["bgcolor"] = bgcolor + parameters["rankdir"] = rankdir + parameters["maxNoOfEdgesInDiagram"] = max_num_edges + gviz = dfg_visualizer.apply(dfg, variant=dfg_visualizer.Variants.FREQUENCY, + parameters=parameters) + dfg_visualizer.view(gviz) + + +def save_vis_dfg(dfg: dict, start_activities: dict, end_activities: dict, file_path: str, bgcolor: str = "white", max_num_edges: int = sys.maxsize, rankdir: str = constants.DEFAULT_RANKDIR_GVIZ, **kwargs): + """ + Saves a DFG visualization to a file + + :param dfg: DFG object + :param start_activities: Start activities + :param end_activities: End activities + :param file_path: Destination path + :param bgcolor: Background color of the visualization (default: white) + :param max_num_edges: maximum number of edges to represent in the graph + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + dfg, start_activities, end_activities = pm4py.discover_dfg(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp') + pm4py.save_vis_dfg(dfg, start_activities, end_activities, 'dfg.png') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.dfg import visualizer as dfg_visualizer + dfg_parameters = dfg_visualizer.Variants.FREQUENCY.value.Parameters + parameters = {} + parameters[dfg_parameters.FORMAT] = format + parameters[dfg_parameters.START_ACTIVITIES] = start_activities + parameters[dfg_parameters.END_ACTIVITIES] = end_activities + parameters["bgcolor"] = bgcolor + parameters["rankdir"] = rankdir + parameters["maxNoOfEdgesInDiagram"] = max_num_edges + gviz = dfg_visualizer.apply(dfg, variant=dfg_visualizer.Variants.FREQUENCY, + parameters=parameters) + return dfg_visualizer.save(gviz, file_path) + + +def view_process_tree(tree: ProcessTree, format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ): + """ + Views a process tree + + :param tree: Process tree + :param format: Format of the visualization (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + process_tree = pm4py.discover_process_tree_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.view_process_tree(process_tree, format='svg') + """ + format = str(format).lower() + from pm4py.visualization.process_tree import visualizer as pt_visualizer + parameters = pt_visualizer.Variants.WO_DECORATION.value.Parameters + gviz = pt_visualizer.apply(tree, parameters={parameters.FORMAT: format, "bgcolor": bgcolor, "rankdir": rankdir}) + pt_visualizer.view(gviz) + + +def save_vis_process_tree(tree: ProcessTree, file_path: str, bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ, **kwargs): + """ + Saves the visualization of a process tree + + :param tree: Process tree + :param file_path: Destination path + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + process_tree = pm4py.discover_process_tree_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.save_vis_process_tree(process_tree, 'process_tree.png') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.process_tree import visualizer as pt_visualizer + parameters = pt_visualizer.Variants.WO_DECORATION.value.Parameters + gviz = pt_visualizer.apply(tree, parameters={parameters.FORMAT: format, "bgcolor": bgcolor, "rankdir": rankdir}) + return pt_visualizer.save(gviz, file_path) + + +def save_vis_bpmn(bpmn_graph: BPMN, file_path: str, bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ, variant_str: str = "classic", **kwargs): + """ + Saves the visualization of a BPMN graph + + :param bpmn_graph: BPMN graph + :param file_path: Destination path + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + :param variant_str: variant of the visualization to be used ("classic" or "dagrejs") + + .. code-block:: python3 + + import pm4py + + bpmn_graph = pm4py.discover_bpmn_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.save_vis_bpmn(bpmn_graph, 'trial.bpmn') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + + from pm4py.visualization.bpmn import visualizer as bpmn_visualizer + variant = None + if variant_str == "classic": + variant = bpmn_visualizer.Variants.CLASSIC + elif variant_str == "dagrejs": + variant = bpmn_visualizer.Variants.DAGREJS + + gviz = bpmn_visualizer.apply(bpmn_graph, variant=variant, parameters={"format": format, "bgcolor": bgcolor, "rankdir": rankdir}) + return bpmn_visualizer.save(gviz, file_path, variant=variant) + + +def view_bpmn(bpmn_graph: BPMN, format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ, variant_str: str = "classic"): + """ + Views a BPMN graph + + :param bpmn_graph: BPMN graph + :param format: Format of the visualization (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + :param variant_str: variant of the visualization to be used ("classic" or "dagrejs") + + .. code-block:: python3 + + import pm4py + + bpmn_graph = pm4py.discover_bpmn_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.view_bpmn(bpmn_graph) + """ + format = str(format).lower() + + from pm4py.visualization.bpmn import visualizer as bpmn_visualizer + variant = None + if variant_str == "classic": + variant = bpmn_visualizer.Variants.CLASSIC + elif variant_str == "dagrejs": + variant = bpmn_visualizer.Variants.DAGREJS + + gviz = bpmn_visualizer.apply(bpmn_graph, variant=variant, parameters={"format": format, "bgcolor": bgcolor, "rankdir": rankdir}) + bpmn_visualizer.view(gviz, variant=variant) + + +def view_heuristics_net(heu_net: HeuristicsNet, format: str = "png", bgcolor: str = "white"): + """ + Views an heuristics net + + :param heu_net: Heuristics net + :param format: Format of the visualization + :param bgcolor: Background color of the visualization (default: white) + + .. code-block:: python3 + + import pm4py + + heu_net = pm4py.discover_heuristics_net(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.view_heuristics_net(heu_net, format='svg') + """ + format = str(format).lower() + from pm4py.visualization.heuristics_net import visualizer as hn_visualizer + parameters = hn_visualizer.Variants.PYDOTPLUS.value.Parameters + gviz = hn_visualizer.apply(heu_net, parameters={parameters.FORMAT: format, "bgcolor": bgcolor}) + hn_visualizer.view(gviz) + + +def save_vis_heuristics_net(heu_net: HeuristicsNet, file_path: str, bgcolor: str = "white", **kwargs): + """ + Saves the visualization of an heuristics net + + :param heu_net: Heuristics net + :param file_path: Destination path + :param bgcolor: Background color of the visualization (default: white) + + .. code-block:: python3 + + import pm4py + + heu_net = pm4py.discover_heuristics_net(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.save_vis_heuristics_net(heu_net, 'heu.png') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.heuristics_net import visualizer as hn_visualizer + parameters = hn_visualizer.Variants.PYDOTPLUS.value.Parameters + gviz = hn_visualizer.apply(heu_net, parameters={parameters.FORMAT: format, "bgcolor": bgcolor}) + return hn_visualizer.save(gviz, file_path) + + +def __dotted_attribute_selection(log: Union[EventLog, pd.DataFrame], attributes): + """ + Default attribute selection for the dotted chart + """ + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log) + + if attributes is None: + from pm4py.util import xes_constants + from pm4py.objects.log.util import sorting + from pm4py.objects.conversion.log import converter + log = converter.apply(log, variant=converter.Variants.TO_EVENT_LOG) + log = sorting.sort_timestamp(log, xes_constants.DEFAULT_TIMESTAMP_KEY) + for index, trace in enumerate(log): + trace.attributes["@@index"] = index + attributes = ["time:timestamp", "case:@@index", "concept:name"] + return log, attributes + + +def view_dotted_chart(log: Union[EventLog, pd.DataFrame], format: str = "png", attributes=None, bgcolor: str = "white", show_legend: bool = True): + """ + Displays the dotted chart + + The dotted chart is a classic visualization of the events inside an event log across different dimensions. Each event of the event log is corresponding to a point. The dimensions are projected on a graph having: + - X axis: the values of the first dimension are represented there. + - Y-axis: the values of the second dimension are represented there. + - Color: the values of the third dimension are represented as different colors for the points of the dotted chart. + + The values can be either string, numeric or date values, and are managed accordingly by the dotted chart. + The dotted chart can be built on different attributes. A convenient choice for the dotted chart is to visualize the distribution of cases and events over the time, with the following choices: + - X-axis: the timestamp of the event. + - Y-axis: the index of the case inside the event log. + - Color: the activity of the event. + + The aforementioned choice permits to identify visually patterns such as: + - Batches. + - Variations in the case arrival rate. + - Variations in the case finishing rate. + + :param log: Event log + :param format: Image format + :param attributes: Attributes that should be used to construct the dotted chart. If None, the default dotted chart will be shown: x-axis: time y-axis: cases (in order of occurrence in the event log) color: activity. For custom attributes, use a list of attributes of the form [x-axis attribute, y-axis attribute, color attribute], e.g., ["concept:name", "org:resource", "concept:name"]) + :param bgcolor: background color to be used in the dotted chart + :param show_legend: boolean (enables/disables showing the legend) + + .. code-block:: python3 + + import pm4py + + pm4py.view_dotted_chart(dataframe, format='svg') + pm4py.view_dotted_chart(dataframe, attributes=['time:timestamp', 'concept:name', 'org:resource']) + """ + format = str(format).lower() + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log) + + log, attributes = __dotted_attribute_selection(log, attributes) + + parameters = {} + parameters["format"] = format + parameters["bgcolor"] = bgcolor + parameters["show_legend"] = show_legend + + from pm4py.visualization.dotted_chart import visualizer as dotted_chart_visualizer + gviz = dotted_chart_visualizer.apply(log, attributes, parameters=parameters) + dotted_chart_visualizer.view(gviz) + + +def save_vis_dotted_chart(log: Union[EventLog, pd.DataFrame], file_path: str, attributes=None, bgcolor: str = "white", show_legend: bool = True, **kwargs): + """ + Saves the visualization of the dotted chart + + The dotted chart is a classic visualization of the events inside an event log across different dimensions. Each event of the event log is corresponding to a point. The dimensions are projected on a graph having: + - X axis: the values of the first dimension are represented there. + - Y-axis: the values of the second dimension are represented there. + - Color: the values of the third dimension are represented as different colors for the points of the dotted chart. + + The values can be either string, numeric or date values, and are managed accordingly by the dotted chart. + The dotted chart can be built on different attributes. A convenient choice for the dotted chart is to visualize the distribution of cases and events over the time, with the following choices: + - X-axis: the timestamp of the event. + - Y-axis: the index of the case inside the event log. + - Color: the activity of the event. + + The aforementioned choice permits to identify visually patterns such as: + - Batches. + - Variations in the case arrival rate. + - Variations in the case finishing rate. + + :param log: Event log + :param file_path: Destination path + :param attributes: Attributes that should be used to construct the dotted chart (for example, ["concept:name", "org:resource"]) + :param bgcolor: background color to be used in the dotted chart + :param show_legend: boolean (enables/disables showing the legend) + + .. code-block:: python3 + + import pm4py + + pm4py.save_vis_dotted_chart(dataframe, 'dotted.png', attributes=['time:timestamp', 'concept:name', 'org:resource']) + """ + file_path = str(file_path) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log) + + format = os.path.splitext(file_path)[1][1:].lower() + log, attributes = __dotted_attribute_selection(log, attributes) + + parameters = {} + parameters["format"] = format + parameters["bgcolor"] = bgcolor + parameters["show_legend"] = show_legend + + from pm4py.visualization.dotted_chart import visualizer as dotted_chart_visualizer + gviz = dotted_chart_visualizer.apply(log, attributes, parameters=parameters) + return dotted_chart_visualizer.save(gviz, file_path) + + +def view_sna(sna_metric: SNA, variant_str: Optional[str] = None): + """ + Represents a SNA metric (.html) + + :param sna_metric: Values of the metric + :param variant_str: variant to be used (default: pyvis) + + .. code-block:: python3 + + import pm4py + + metric = pm4py.discover_subcontracting_network(dataframe, resource_key='org:resource', timestamp_key='time:timestamp', case_id_key='case:concept:name') + pm4py.view_sna(metric) + """ + if variant_str is None: + if constants.DEFAULT_GVIZ_VIEW == "matplotlib_view": + variant_str = "networkx" + else: + variant_str = "pyvis" + + from pm4py.visualization.sna import visualizer as sna_visualizer + variant = sna_visualizer.Variants.PYVIS + if variant_str == "networkx": + variant = sna_visualizer.Variants.NETWORKX + gviz = sna_visualizer.apply(sna_metric, variant=variant) + sna_visualizer.view(gviz, variant=variant) + + +def save_vis_sna(sna_metric: SNA, file_path: str, variant_str: Optional[str] = None, **kwargs): + """ + Saves the visualization of a SNA metric in a .html file + + :param sna_metric: Values of the metric + :param file_path: Destination path + :param variant_str: variant to be used (default: pyvis) + + .. code-block:: python3 + + import pm4py + + metric = pm4py.discover_subcontracting_network(dataframe, resource_key='org:resource', timestamp_key='time:timestamp', case_id_key='case:concept:name') + pm4py.save_vis_sna(metric, 'sna.png') + """ + file_path = str(file_path) + + if variant_str is None: + if constants.DEFAULT_GVIZ_VIEW == "matplotlib_view": + variant_str = "networkx" + else: + variant_str = "pyvis" + + from pm4py.visualization.sna import visualizer as sna_visualizer + variant = sna_visualizer.Variants.PYVIS + if variant_str == "networkx": + variant = sna_visualizer.Variants.NETWORKX + + gviz = sna_visualizer.apply(sna_metric, variant=variant) + return sna_visualizer.save(gviz, file_path, variant=variant) + + +def view_case_duration_graph(log: Union[EventLog, pd.DataFrame], format: str = "png", activity_key="concept:name", timestamp_key="time:timestamp", case_id_key="case:concept:name"): + """ + Visualizes the case duration graph + + :param log: Log object + :param format: Format of the visualization (png, svg, ...) + :param activity_key: attribute to be used as activity + :param case_id_key: attribute to be used as case identifier + :param timestamp_key: attribute to be used as timestamp + + .. code-block:: python3 + + import pm4py + + pm4py.view_case_duration_graph(dataframe, format='svg', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + format = str(format).lower() + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + from pm4py.statistics.traces.generic.pandas import case_statistics + graph = case_statistics.get_kde_caseduration(log, parameters=get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key)) + else: + from pm4py.statistics.traces.generic.log import case_statistics + graph = case_statistics.get_kde_caseduration(log, parameters=get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key)) + from pm4py.visualization.graphs import visualizer as graphs_visualizer + graph_vis = graphs_visualizer.apply(graph[0], graph[1], variant=graphs_visualizer.Variants.CASES, + parameters={"format": format}) + graphs_visualizer.view(graph_vis) + + +def save_vis_case_duration_graph(log: Union[EventLog, pd.DataFrame], file_path: str, activity_key="concept:name", timestamp_key="time:timestamp", case_id_key="case:concept:name", **kwargs): + """ + Saves the case duration graph in the specified path + + :param log: Log object + :param file_path: Destination path + :param activity_key: attribute to be used as activity + :param case_id_key: attribute to be used as case identifier + :param timestamp_key: attribute to be used as timestamp + + .. code-block:: python3 + + import pm4py + + pm4py.save_vis_case_duration_graph(dataframe, 'duration.png', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + file_path = str(file_path) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + from pm4py.statistics.traces.generic.pandas import case_statistics + graph = case_statistics.get_kde_caseduration(log, parameters=get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key)) + else: + from pm4py.statistics.traces.generic.log import case_statistics + graph = case_statistics.get_kde_caseduration(log, parameters=get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key)) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.graphs import visualizer as graphs_visualizer + graph_vis = graphs_visualizer.apply(graph[0], graph[1], variant=graphs_visualizer.Variants.CASES, + parameters={"format": format}) + return graphs_visualizer.save(graph_vis, file_path) + + +def view_events_per_time_graph(log: Union[EventLog, pd.DataFrame], format: str = "png", activity_key="concept:name", timestamp_key="time:timestamp", case_id_key="case:concept:name"): + """ + Visualizes the events per time graph + + :param log: Log object + :param format: Format of the visualization (png, svg, ...) + :param activity_key: attribute to be used as activity + :param case_id_key: attribute to be used as case identifier + :param timestamp_key: attribute to be used as timestamp + + .. code-block:: python3 + + import pm4py + + pm4py.view_events_per_time_graph(dataframe, format='svg', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + format = str(format).lower() + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + from pm4py.statistics.attributes.pandas import get as attributes_get + graph = attributes_get.get_kde_date_attribute(log, parameters=get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key)) + else: + from pm4py.statistics.attributes.log import get as attributes_get + graph = attributes_get.get_kde_date_attribute(log, parameters=get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key)) + from pm4py.visualization.graphs import visualizer as graphs_visualizer + graph_vis = graphs_visualizer.apply(graph[0], graph[1], variant=graphs_visualizer.Variants.DATES, + parameters={"format": format}) + graphs_visualizer.view(graph_vis) + + +def save_vis_events_per_time_graph(log: Union[EventLog, pd.DataFrame], file_path: str, activity_key="concept:name", timestamp_key="time:timestamp", case_id_key="case:concept:name", **kwargs): + """ + Saves the events per time graph in the specified path + + :param log: Log object + :param file_path: Destination path + :param activity_key: attribute to be used as activity + :param case_id_key: attribute to be used as case identifier + :param timestamp_key: attribute to be used as timestamp + + .. code-block:: python3 + + import pm4py + + pm4py.save_vis_events_per_time_graph(dataframe, 'ev_time.png', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + file_path = str(file_path) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + from pm4py.statistics.attributes.pandas import get as attributes_get + graph = attributes_get.get_kde_date_attribute(log, attribute=timestamp_key, parameters=get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key)) + else: + from pm4py.statistics.attributes.log import get as attributes_get + graph = attributes_get.get_kde_date_attribute(log, attribute=timestamp_key, parameters=get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key)) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.graphs import visualizer as graphs_visualizer + graph_vis = graphs_visualizer.apply(graph[0], graph[1], variant=graphs_visualizer.Variants.DATES, + parameters={"format": format}) + return graphs_visualizer.save(graph_vis, file_path) + + +def view_performance_spectrum(log: Union[EventLog, pd.DataFrame], activities: List[str], format: str = "png", activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", bgcolor: str = "white"): + """ + Displays the performance spectrum + + The performance spectrum is a novel visualization of the performance of the process of the time elapsed between different activities in the process executions. The performance spectrum has initially been described in: + + Denisov, Vadim, et al. "The Performance Spectrum Miner: Visual Analytics for Fine-Grained Performance Analysis of Processes." BPM (Dissertation/Demos/Industry). 2018. + + :param perf_spectrum: Performance spectrum + :param format: Format of the visualization (png, svg ...) + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param activity_key: attribute to be used as activity + :param case_id_key: attribute to be used as case identifier + :param timestamp_key: attribute to be used as timestamp + :param bgcolor: Background color of the visualization (default: white) + + .. code-block:: python3 + + import pm4py + + pm4py.view_performance_spectrum(dataframe, ['Act. A', 'Act. C', 'Act. D'], format='svg', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + format = str(format).lower() + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + + properties = get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + + from pm4py.algo.discovery.performance_spectrum import algorithm as performance_spectrum + perf_spectrum = performance_spectrum.apply(log, activities, parameters=properties) + from pm4py.visualization.performance_spectrum import visualizer as perf_spectrum_visualizer + from pm4py.visualization.performance_spectrum.variants import neato + gviz = perf_spectrum_visualizer.apply(perf_spectrum, parameters={neato.Parameters.FORMAT.value: format, "bgcolor": bgcolor}) + perf_spectrum_visualizer.view(gviz) + + +def save_vis_performance_spectrum(log: Union[EventLog, pd.DataFrame], activities: List[str], file_path: str, activity_key: str = "concept:name", timestamp_key: str = "time:timestamp", case_id_key: str = "case:concept:name", bgcolor: str = "white", **kwargs): + """ + Saves the visualization of the performance spectrum to a file + + The performance spectrum is a novel visualization of the performance of the process of the time elapsed between different activities in the process executions. The performance spectrum has initially been described in: + + Denisov, Vadim, et al. "The Performance Spectrum Miner: Visual Analytics for Fine-Grained Performance Analysis of Processes." BPM (Dissertation/Demos/Industry). 2018. + + :param log: Event log + :param activities: List of activities (in order) that is used to build the performance spectrum + :param file_path: Destination path (including the extension) + :param activity_key: attribute to be used for the activity + :param timestamp_key: attribute to be used for the timestamp + :param case_id_key: attribute to be used as case identifier + :param bgcolor: Background color of the visualization (default: white) + + .. code-block:: python3 + + import pm4py + + pm4py.save_vis_performance_spectrum(dataframe, ['Act. A', 'Act. C', 'Act. D'], 'perf_spec.png', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + file_path = str(file_path) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + + properties = get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + + from pm4py.algo.discovery.performance_spectrum import algorithm as performance_spectrum + perf_spectrum = performance_spectrum.apply(log, activities, parameters=properties) + from pm4py.visualization.performance_spectrum import visualizer as perf_spectrum_visualizer + from pm4py.visualization.performance_spectrum.variants import neato + format = os.path.splitext(file_path)[1][1:].lower() + gviz = perf_spectrum_visualizer.apply(perf_spectrum, parameters={neato.Parameters.FORMAT.value: format, "bgcolor": bgcolor}) + return perf_spectrum_visualizer.save(gviz, file_path) + + +def __builds_events_distribution_graph(log: Union[EventLog, pd.DataFrame], parameters, distr_type: str = "days_week"): + """ + Internal method to build the events distribution graph + """ + if distr_type == "days_month": + title = "Distribution of the Events over the Days of a Month"; + x_axis = "Day of month"; + y_axis = "Number of Events" + elif distr_type == "months": + title = "Distribution of the Events over the Months"; + x_axis = "Month"; + y_axis = "Number of Events" + elif distr_type == "years": + title = "Distribution of the Events over the Years"; + x_axis = "Year"; + y_axis = "Number of Events" + elif distr_type == "hours": + title = "Distribution of the Events over the Hours"; + x_axis = "Hour (of day)"; + y_axis = "Number of Events" + elif distr_type == "days_week": + title = "Distribution of the Events over the Days of a Week"; + x_axis = "Day of the Week"; + y_axis = "Number of Events" + elif distr_type == "weeks": + title = "Distribution of the Events over the Weeks of a Year"; + x_axis = "Week of the Year"; + y_axis = "Number of Events" + else: + raise Exception("unsupported distribution specified.") + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log) + from pm4py.statistics.attributes.pandas import get as attributes_get + x, y = attributes_get.get_events_distribution(log, distr_type=distr_type, parameters=parameters) + else: + from pm4py.statistics.attributes.log import get as attributes_get + x, y = attributes_get.get_events_distribution(log, distr_type=distr_type, parameters=parameters) + + return title, x_axis, y_axis, x, y + + +def view_events_distribution_graph(log: Union[EventLog, pd.DataFrame], distr_type: str = "days_week", format="png", activity_key="concept:name", timestamp_key="time:timestamp", case_id_key="case:concept:name"): + """ + Shows the distribution of the events in the specified dimension + + Observing the distribution of events over time permits to infer useful information about the work shifts, the working days, and the period of the year that are more or less busy. + + :param log: Event log + :param distr_type: Type of distribution (default: days_week): - days_month => Gets the distribution of the events among the days of a month (from 1 to 31) - months => Gets the distribution of the events among the months (from 1 to 12) - years => Gets the distribution of the events among the years of the event log - hours => Gets the distribution of the events among the hours of a day (from 0 to 23) - days_week => Gets the distribution of the events among the days of a week (from Monday to Sunday) - weeks => Gets the distribution of the events among the weeks of a year (from 0 to 52) + :param format: Format of the visualization (default: png) + :param activity_key: attribute to be used as activity + :param case_id_key: attribute to be used as case identifier + :param timestamp_key: attribute to be used as timestamp + + .. code-block:: python3 + + import pm4py + + pm4py.view_events_distribution_graph(dataframe, format='svg', distr_type='days_week', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + format = str(format).lower() + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + + parameters = get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + title, x_axis, y_axis, x, y = __builds_events_distribution_graph(log, parameters, distr_type) + parameters["title"] = title; + parameters["x_axis"] = x_axis; + parameters["y_axis"] = y_axis; + parameters["format"] = format + from pm4py.visualization.graphs import visualizer as graphs_visualizer + gviz = graphs_visualizer.apply(x, y, variant=graphs_visualizer.Variants.BARPLOT, parameters=parameters) + graphs_visualizer.view(gviz) + + +def save_vis_events_distribution_graph(log: Union[EventLog, pd.DataFrame], file_path: str, + distr_type: str = "days_week", activity_key="concept:name", timestamp_key="time:timestamp", case_id_key="case:concept:name", **kwargs): + """ + Saves the distribution of the events in a picture file + + Observing the distribution of events over time permits to infer useful information about the work shifts, the working days, and the period of the year that are more or less busy. + + :param log: Event log + :param file_path: Destination path (including the extension) + :param distr_type: Type of distribution (default: days_week): - days_month => Gets the distribution of the events among the days of a month (from 1 to 31) - months => Gets the distribution of the events among the months (from 1 to 12) - years => Gets the distribution of the events among the years of the event log - hours => Gets the distribution of the events among the hours of a day (from 0 to 23) - days_week => Gets the distribution of the events among the days of a week (from Monday to Sunday) + :param activity_key: attribute to be used as activity + :param case_id_key: attribute to be used as case identifier + :param timestamp_key: attribute to be used as timestamp + + .. code-block:: python3 + + import pm4py + + pm4py.save_vis_events_distribution_graph(dataframe, 'ev_distr_graph.png', distr_type='days_week', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + """ + file_path = str(file_path) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + + format = os.path.splitext(file_path)[1][1:].lower() + parameters = get_properties(log, activity_key=activity_key, case_id_key=case_id_key, timestamp_key=timestamp_key) + title, x_axis, y_axis, x, y = __builds_events_distribution_graph(log, parameters, distr_type) + parameters["title"] = title; + parameters["x_axis"] = x_axis; + parameters["y_axis"] = y_axis; + parameters["format"] = format + from pm4py.visualization.graphs import visualizer as graphs_visualizer + gviz = graphs_visualizer.apply(x, y, variant=graphs_visualizer.Variants.BARPLOT, parameters=parameters) + return graphs_visualizer.save(gviz, file_path) + + +def view_ocdfg(ocdfg: Dict[str, Any], annotation: str = "frequency", act_metric: str = "events", edge_metric="event_couples", act_threshold: int = 0, edge_threshold: int = 0, performance_aggregation: str = "mean", format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ): + """ + Views an OC-DFG (object-centric directly-follows graph) with the provided configuration. + + Object-centric directly-follows multigraphs are a composition of directly-follows graphs for the single object type, which can be annotated with different metrics considering the entities of an object-centric event log (i.e., events, unique objects, total objects). + + :param ocdfg: Object-centric directly-follows graph + :param annotation: The annotation to use for the visualization. Values: - "frequency": frequency annotation - "performance": performance annotation + :param act_metric: The metric to use for the activities. Available values: - "events" => number of events (default) - "unique_objects" => number of unique objects - "total_objects" => number of total objects + :param edge_metric: The metric to use for the edges. Available values: - "event_couples" => number of event couples (default) - "unique_objects" => number of unique objects - "total_objects" => number of total objects + :param act_threshold: The threshold to apply on the activities frequency (default: 0). Only activities having a frequency >= than this are kept in the graph. + :param edge_threshold: The threshold to apply on the edges frequency (default 0). Only edges having a frequency >= than this are kept in the graph. + :param performance_aggregation: The aggregation measure to use for the performance: mean, median, min, max, sum + :param format: The format of the output visualization (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.view_ocdfg(ocdfg, annotation='frequency', format='svg') + """ + format = str(format).lower() + + from pm4py.visualization.ocel.ocdfg import visualizer + from pm4py.visualization.ocel.ocdfg.variants import classic + parameters = {} + parameters[classic.Parameters.FORMAT] = format + parameters[classic.Parameters.ANNOTATION] = annotation + parameters[classic.Parameters.ACT_METRIC] = act_metric + parameters[classic.Parameters.EDGE_METRIC] = edge_metric + parameters[classic.Parameters.ACT_THRESHOLD] = act_threshold + parameters[classic.Parameters.EDGE_THRESHOLD] = edge_threshold + parameters[classic.Parameters.PERFORMANCE_AGGREGATION_MEASURE] = performance_aggregation + parameters["bgcolor"] = bgcolor + parameters["rankdir"] = rankdir + gviz = classic.apply(ocdfg, parameters=parameters) + visualizer.view(gviz) + + +def save_vis_ocdfg(ocdfg: Dict[str, Any], file_path: str, annotation: str = "frequency", act_metric: str = "events", edge_metric="event_couples", act_threshold: int = 0, edge_threshold: int = 0, performance_aggregation: str = "mean", bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ, **kwargs): + """ + Saves the visualization of an OC-DFG (object-centric directly-follows graph) with the provided configuration. + + Object-centric directly-follows multigraphs are a composition of directly-follows graphs for the single object type, which can be annotated with different metrics considering the entities of an object-centric event log (i.e., events, unique objects, total objects). + + :param ocdfg: Object-centric directly-follows graph + :param file_path: Destination path (including the extension) + :param annotation: The annotation to use for the visualization. Values: - "frequency": frequency annotation - "performance": performance annotation + :param act_metric: The metric to use for the activities. Available values: - "events" => number of events (default) - "unique_objects" => number of unique objects - "total_objects" => number of total objects + :param edge_metric: The metric to use for the edges. Available values: - "event_couples" => number of event couples (default) - "unique_objects" => number of unique objects - "total_objects" => number of total objects + :param act_threshold: The threshold to apply on the activities frequency (default: 0). Only activities having a frequency >= than this are kept in the graph. + :param edge_threshold: The threshold to apply on the edges frequency (default 0). Only edges having a frequency >= than this are kept in the graph. + :param performance_aggregation: The aggregation measure to use for the performance: mean, median, min, max, sum + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.save_vis_ocdfg(ocdfg, 'ocdfg.png', annotation='frequency') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.ocel.ocdfg import visualizer + from pm4py.visualization.ocel.ocdfg.variants import classic + parameters = {} + parameters[classic.Parameters.FORMAT] = format + parameters[classic.Parameters.ANNOTATION] = annotation + parameters[classic.Parameters.ACT_METRIC] = act_metric + parameters[classic.Parameters.EDGE_METRIC] = edge_metric + parameters[classic.Parameters.ACT_THRESHOLD] = act_threshold + parameters[classic.Parameters.EDGE_THRESHOLD] = edge_threshold + parameters[classic.Parameters.PERFORMANCE_AGGREGATION_MEASURE] = performance_aggregation + parameters["bgcolor"] = bgcolor + parameters["rankdir"] = rankdir + gviz = classic.apply(ocdfg, parameters=parameters) + return visualizer.save(gviz, file_path) + + +def view_ocpn(ocpn: Dict[str, Any], format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ): + """ + Visualizes on the screen the object-centric Petri net + + :param ocpn: Object-centric Petri net + :param format: Format of the visualization (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + ocpn = pm4py.discover_oc_petri_net(ocel) + pm4py.view_ocpn(ocpn, format='svg') + """ + format = str(format).lower() + + from pm4py.visualization.ocel.ocpn import visualizer as ocpn_visualizer + gviz = ocpn_visualizer.apply(ocpn, parameters={"format": format, "bgcolor": bgcolor, "rankdir": rankdir}) + ocpn_visualizer.view(gviz) + + +def save_vis_ocpn(ocpn: Dict[str, Any], file_path: str, bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ, **kwargs): + """ + Saves the visualization of the object-centric Petri net into a file + + :param ocpn: Object-centric Petri net + :param file_path: Target path of the visualization + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + ocpn = pm4py.discover_oc_petri_net(ocel) + pm4py.save_vis_ocpn(ocpn, 'ocpn.png') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.ocel.ocpn import visualizer as ocpn_visualizer + gviz = ocpn_visualizer.apply(ocpn, parameters={"format": format, "bgcolor": bgcolor, "rankdir": rankdir}) + return ocpn_visualizer.save(gviz, file_path) + + +def view_network_analysis(network_analysis: Dict[Tuple[str, str], Dict[str, Any]], variant: str = "frequency", format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, activity_threshold: int = 1, edge_threshold: int = 1, bgcolor: str = "white"): + """ + Visualizes the network analysis + + :param network_analysis: Network analysis + :param variant: Variant of the visualization: - frequency (if the discovered network analysis contains the frequency of the interactions) - performance (if the discovered network analysis contains the performance of the interactions) + :param format: Format of the visualization (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param activity_threshold: The minimum number of occurrences for an activity to be included (default: 1) + :param edge_threshold: The minimum number of occurrences for an edge to be included (default: 1) + :param bgcolor: Background color of the visualization (default: white) + + .. code-block:: python3 + + import pm4py + + net_ana = pm4py.discover_network_analysis(dataframe, out_column='case:concept:name', in_column='case:concept:name', node_column_source='org:resource', node_column_target='org:resource', edge_column='concept:name') + pm4py.view_network_analysis(net_ana, format='svg') + """ + format = str(format).lower() + + from pm4py.visualization.network_analysis import visualizer as network_analysis_visualizer + variant = network_analysis_visualizer.Variants.PERFORMANCE if variant == "performance" else network_analysis_visualizer.Variants.FREQUENCY + gviz = network_analysis_visualizer.apply(network_analysis, variant=variant, parameters={"format": format, "activity_threshold": activity_threshold, "edge_threshold": edge_threshold, "bgcolor": bgcolor}) + network_analysis_visualizer.view(gviz) + + +def save_vis_network_analysis(network_analysis: Dict[Tuple[str, str], Dict[str, Any]], file_path: str, variant: str = "frequency", activity_threshold: int = 1, edge_threshold: int = 1, bgcolor: str = "white", **kwargs): + """ + Saves the visualization of the network analysis + + :param network_analysis: Network analysis + :param file_path: Target path of the visualization + :param variant: Variant of the visualization: - frequency (if the discovered network analysis contains the frequency of the interactions) - performance (if the discovered network analysis contains the performance of the interactions) + :param activity_threshold: The minimum number of occurrences for an activity to be included (default: 1) + :param edge_threshold: The minimum number of occurrences for an edge to be included (default: 1) + :param bgcolor: Background color of the visualization (default: white) + + .. code-block:: python3 + + import pm4py + + net_ana = pm4py.discover_network_analysis(dataframe, out_column='case:concept:name', in_column='case:concept:name', node_column_source='org:resource', node_column_target='org:resource', edge_column='concept:name') + pm4py.save_vis_network_analysis(net_ana, 'net_ana.png') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.network_analysis import visualizer as network_analysis_visualizer + variant = network_analysis_visualizer.Variants.PERFORMANCE if variant == "performance" else network_analysis_visualizer.Variants.FREQUENCY + gviz = network_analysis_visualizer.apply(network_analysis, variant=variant, parameters={"format": format, "activity_threshold": activity_threshold, "edge_threshold": edge_threshold, "bgcolor": bgcolor}) + return network_analysis_visualizer.save(gviz, file_path) + + +def view_transition_system(transition_system: TransitionSystem, format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, bgcolor: str = "white"): + """ + Views a transition system + + :param transition_system: Transition system + :param format: Format of the visualization (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param bgcolor: Background color of the visualization (default: white) + + .. code-block:: python3 + + import pm4py + + transition_system = pm4py.discover_transition_system(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.view_transition_system(transition_system, format='svg') + """ + format = str(format).lower() + + from pm4py.visualization.transition_system import visualizer as ts_visualizer + gviz = ts_visualizer.apply(transition_system, parameters={"format": format, "bgcolor": bgcolor}) + ts_visualizer.view(gviz) + + +def save_vis_transition_system(transition_system: TransitionSystem, file_path: str, bgcolor: str = "white", **kwargs): + """ + Persists the visualization of a transition system + + :param transition_system: Transition system + :param file_path: Destination path + :param bgcolor: Background color of the visualization (default: white) + + .. code-block:: python3 + + import pm4py + + transition_system = pm4py.discover_transition_system(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.save_vis_transition_system(transition_system, 'trans_system.png') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.transition_system import visualizer as ts_visualizer + gviz = ts_visualizer.apply(transition_system, parameters={"format": format, "bgcolor": bgcolor}) + return ts_visualizer.save(gviz, file_path) + + +def view_prefix_tree(trie: Trie, format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, bgcolor: str = "white"): + """ + Views a prefix tree + + :param prefix_tree: Prefix tree + :param format: Format of the visualization (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param bgcolor: Background color of the visualization (default: white) + + .. code-block:: python3 + + import pm4py + + prefix_tree = pm4py.discover_prefix_tree(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.view_prefix_tree(prefix_tree, format='svg') + """ + format = str(format).lower() + + from pm4py.visualization.trie import visualizer as trie_visualizer + gviz = trie_visualizer.apply(trie, parameters={"format": format, "bgcolor": bgcolor}) + trie_visualizer.view(gviz) + + +def save_vis_prefix_tree(trie: Trie, file_path: str, bgcolor: str = "white", **kwargs): + """ + Persists the visualization of a prefix tree + + :param prefix_tree: Prefix tree + :param file_path: Destination path + :param bgcolor: Background color of the visualization (default: white) + + .. code-block:: python3 + + import pm4py + + prefix_tree = pm4py.discover_prefix_tree(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp') + pm4py.save_vis_prefix_tree(prefix_tree, 'trie.png') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.trie import visualizer as trie_visualizer + gviz = trie_visualizer.apply(trie, parameters={"format": format, "bgcolor": bgcolor}) + return trie_visualizer.save(gviz, file_path) + + +def view_alignments(log: Union[EventLog, pd.DataFrame], aligned_traces: List[Dict[str, Any]], format: str = "png"): + """ + Views the alignment table as a figure + + :param log: event log + :param aligned_traces: results of an alignment + :param format: format of the visualization (default: png) + + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/running-example.xes') + net, im, fm = pm4py.discover_petri_net_inductive(log) + aligned_traces = pm4py.conformance_diagnostics_alignments(log, net, im, fm) + pm4py.view_alignments(log, aligned_traces, format='svg') + """ + format = str(format).lower() + + from pm4py.visualization.align_table import visualizer + gviz = visualizer.apply(log, aligned_traces, parameters={"format": format}) + visualizer.view(gviz) + + +def save_vis_alignments(log: Union[EventLog, pd.DataFrame], aligned_traces: List[Dict[str, Any]], file_path: str, **kwargs): + """ + Saves an alignment table's figure in the disk + + :param log: event log + :param aligned_traces: results of an alignment + :param file_path: target path in the disk + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/running-example.xes') + net, im, fm = pm4py.discover_petri_net_inductive(log) + aligned_traces = pm4py.conformance_diagnostics_alignments(log, net, im, fm) + pm4py.save_vis_alignments(log, aligned_traces, 'output.svg') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.align_table import visualizer + gviz = visualizer.apply(log, aligned_traces, parameters={"format": format}) + return visualizer.save(gviz, file_path) + + +def view_footprints(footprints: Union[Tuple[Dict[str, Any], Dict[str, Any]], Dict[str, Any]], format: str = "png"): + """ + Views the footprints as a figure + + :param footprints: footprints + :param format: format of the visualization (default: png) + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/running-example.xes') + fp_log = pm4py.discover_footprints(log) + pm4py.view_footprints(fp_log, format='svg') + """ + format = str(format).lower() + + from pm4py.visualization.footprints import visualizer as fps_visualizer + + if isinstance(footprints, dict): + gviz = fps_visualizer.apply(footprints, parameters={"format": format}) + else: + gviz = fps_visualizer.apply(footprints[0], footprints[1], variant=fps_visualizer.Variants.COMPARISON_SYMMETRIC, parameters={"format": format}) + + fps_visualizer.view(gviz) + + +def save_vis_footprints(footprints: Union[Tuple[Dict[str, Any], Dict[str, Any]], Dict[str, Any]], file_path: str, **kwargs): + """ + Saves the footprints' visualization on disk + + :param footprints: footprints + :param file_path: target path of the visualization + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/running-example.xes') + fp_log = pm4py.discover_footprints(log) + pm4py.save_vis_footprints(fp_log, 'output.svg') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + + from pm4py.visualization.footprints import visualizer as fps_visualizer + + if isinstance(footprints, dict): + gviz = fps_visualizer.apply(footprints, parameters={"format": format}) + else: + gviz = fps_visualizer.apply(footprints[0], footprints[1], variant=fps_visualizer.Variants.COMPARISON_SYMMETRIC, parameters={"format": format}) + + return fps_visualizer.save(gviz, file_path) + + +def view_powl(powl: POWL, format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, bgcolor: str = "white", variant_str: str = "basic"): + """ + Perform a visualization of a POWL model. + + Reference paper: + Kourani, Humam, and Sebastiaan J. van Zelst. "POWL: partially ordered workflow language." International Conference on Business Process Management. Cham: Springer Nature Switzerland, 2023. + + :param powl: POWL model + :param format: format of the visualization (default: png) + :param bgcolor: background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + :param variant_str: variant of the visualization to be used (values: "basic", "net") + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/running-example.xes') + powl_model = pm4py.discover_powl(log) + pm4py.view_powl(powl_model, format='svg', variant_str='basic') + pm4py.view_powl(powl_model, format='svg', variant_str='net') + """ + from pm4py.visualization.powl.visualizer import POWLVisualizationVariants + variant = POWLVisualizationVariants.BASIC + + if variant_str == "basic": + variant = POWLVisualizationVariants.BASIC + elif variant_str == "net": + variant = POWLVisualizationVariants.NET + + format = str(format).lower() + parameters = parameters={"format": format, "bgcolor": bgcolor} + + from pm4py.visualization.powl import visualizer as powl_visualizer + gviz = powl_visualizer.apply(powl, variant=variant, parameters=parameters) + + powl_visualizer.view(gviz, parameters=parameters) + + +def save_vis_powl(powl: POWL, file_path: str, bgcolor: str = "white", rankdir: str = "TB", **kwargs): + """ + Saves the visualization of a POWL model. + + Reference paper: + Kourani, Humam, and Sebastiaan J. van Zelst. "POWL: partially ordered workflow language." International Conference on Business Process Management. Cham: Springer Nature Switzerland, 2023. + + :param powl: POWL model + :param file_path: target path of the visualization + :param bgcolor: background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + log = pm4py.read_xes('tests/input_data/running-example.xes') + powl_model = pm4py.discover_powl(log) + pm4py.save_vis_powl(powl_model, 'powl.png') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + parameters = {"format": format, "bgcolor": bgcolor, "rankdir": rankdir} + + from pm4py.visualization.powl import visualizer as powl_visualizer + gviz = powl_visualizer.apply(powl, parameters=parameters) + + return powl_visualizer.save(gviz, file_path, parameters=parameters) + + +def view_object_graph(ocel: OCEL, graph: Set[Tuple[str, str]], format: str = constants.DEFAULT_FORMAT_GVIZ_VIEW, bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ): + """ + Visualizes an object graph on the screen + + :param ocel: object-centric event log + :param graph: object graph + :param format: format of the visualization (if html is provided, GraphvizJS is used to render the visualization in an HTML page) + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + obj_graph = pm4py.ocel_discover_objects_graph(ocel, graph_type='object_interaction') + pm4py.view_object_graph(ocel, obj_graph, format='svg') + """ + format = str(format).lower() + + from pm4py.visualization.ocel.object_graph import visualizer as obj_graph_vis + gviz = obj_graph_vis.apply(ocel, graph, parameters={"format": format, "bgcolor": bgcolor, "rankdir": rankdir}) + obj_graph_vis.view(gviz) + + +def save_vis_object_graph(ocel: OCEL, graph: Set[Tuple[str, str]], file_path: str, bgcolor: str = "white", rankdir: str = constants.DEFAULT_RANKDIR_GVIZ, **kwargs): + """ + Saves the visualization of an object graph + + :param ocel: object-centric event log + :param graph: object graph + :param file_path: Destination path + :param bgcolor: Background color of the visualization (default: white) + :param rankdir: sets the direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + .. code-block:: python3 + + import pm4py + + ocel = pm4py.read_ocel('trial.ocel') + obj_graph = pm4py.ocel_discover_objects_graph(ocel, graph_type='object_interaction') + pm4py.save_vis_object_graph(ocel, obj_graph, 'trial.pdf') + """ + file_path = str(file_path) + format = os.path.splitext(file_path)[1][1:].lower() + from pm4py.visualization.ocel.object_graph import visualizer as obj_graph_vis + gviz = obj_graph_vis.apply(ocel, graph, parameters={"format": format, "bgcolor": bgcolor, "rankdir": rankdir}) + return obj_graph_vis.save(gviz, file_path) diff --git a/pm4py/pm4py/visualization/__init__.py b/pm4py/pm4py/visualization/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c43920943d3a0a83a44ec8c6c0e84ab097058d65 --- /dev/null +++ b/pm4py/pm4py/visualization/__init__.py @@ -0,0 +1,35 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.util + +if importlib.util.find_spec("graphviz"): + # imports the visualizations only if graphviz is installed + from pm4py.visualization import common, dfg, petri_net, process_tree, transition_system, \ + bpmn, trie, ocel, network_analysis + if importlib.util.find_spec("matplotlib") and importlib.util.find_spec("pyvis"): + # SNA requires both packages matplotlib and pyvis. These are included in the default installation; + # however, they may lead to problems in some platforms/deployments + from pm4py.visualization import sna, performance_spectrum + if importlib.util.find_spec("pydotplus"): + # heuristics net visualization requires pydotplus. This is included in the default installation; + # however, they may lead to problems in some platforms/deployments + from pm4py.visualization import heuristics_net + +if importlib.util.find_spec("matplotlib"): + # graphs require matplotlib. This is included in the default installation; + # however, they may lead to problems in some platforms/deployments + from pm4py.visualization import graphs diff --git a/pm4py/pm4py/visualization/align_table/__init__.py b/pm4py/pm4py/visualization/align_table/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9a8b62d575a78fb248410eb1968b5192b10e7908 --- /dev/null +++ b/pm4py/pm4py/visualization/align_table/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.align_table import visualizer diff --git a/pm4py/pm4py/visualization/align_table/variants/__init__.py b/pm4py/pm4py/visualization/align_table/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ac7f30f2f50ddda5554b0adb19b3a83f1b08917e --- /dev/null +++ b/pm4py/pm4py/visualization/align_table/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.align_table.variants import classic diff --git a/pm4py/pm4py/visualization/align_table/variants/classic.py b/pm4py/pm4py/visualization/align_table/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..269157d65ad09e0ccd21940695177e254b353923 --- /dev/null +++ b/pm4py/pm4py/visualization/align_table/variants/classic.py @@ -0,0 +1,100 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Source +import tempfile + +from pm4py.statistics.variants.log import get as variants_get +from pm4py.util import exec_utils +from enum import Enum +from typing import Optional, Dict, Any +from pm4py.objects.log.obj import EventLog +from pm4py.util import typing +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + + +def apply(log: EventLog, aligned_traces: typing.ListAlignments, parameters: Optional[Dict[Any, Any]] = None) -> graphviz.Source: + """ + Gets the alignment table visualization from the alignments output + + Parameters + ------------- + log + Event log + aligned_traces + Aligned traces + parameters + Parameters of the algorithm + + Returns + ------------- + gviz + Graphviz object + """ + if parameters is None: + parameters = {} + + variants_idx_dict = variants_get.get_variants_from_log_trace_idx(log, parameters=parameters) + + variants_idx_list = [] + for variant in variants_idx_dict: + variants_idx_list.append((variant, variants_idx_dict[variant])) + variants_idx_list = sorted(variants_idx_list, key=lambda x: len(x[1]), reverse=True) + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + + table_alignments_list = ["digraph {\n", "tbl [\n", "shape=plaintext\n", "label=<\n"] + table_alignments_list.append("\n") + + table_alignments_list.append("\n") + + for index, variant in enumerate(variants_idx_list): + al_tr = aligned_traces[variant[1][0]] + table_alignments_list.append("") + table_alignments_list.append( + "") + table_alignments_list.append("") + table_alignments_list.append("") + + table_alignments_list.append("
VariantAlignment
Variant " + str(index + 1) + " (" + str( + len(variant[1])) + " occurrences)") + for move in al_tr['alignment']: + if not (move[0] == ">>" or move[1] == ">>"): + # sync move + table_alignments_list.append("") + elif move[1] == ">>": + # move on log + table_alignments_list.append("") + elif move[0] == ">>": + # move on model + table_alignments_list.append("") + table_alignments_list.append("
" + str(move[1]).replace(">", ">") + "(LM)" + str(move[0]).replace(">", ">") + "(MM)" + str(move[1]).replace(">", ">") + "
\n") + table_alignments_list.append(">];\n") + table_alignments_list.append("}\n") + + table_alignments = "".join(table_alignments_list) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + gviz = Source(table_alignments, filename=filename.name) + gviz.format = image_format + + return gviz diff --git a/pm4py/pm4py/visualization/align_table/visualizer.py b/pm4py/pm4py/visualization/align_table/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..a94fa9deea418e902d91dfbb4cd6d1368df9e527 --- /dev/null +++ b/pm4py/pm4py/visualization/align_table/visualizer.py @@ -0,0 +1,99 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.align_table.variants import classic +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.visualization.common.gview import serialize, serialize_dot +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +from pm4py.util import typing +import graphviz +from pm4py.objects.conversion.log import converter as log_converter +import pandas as pd + +class Variants(Enum): + CLASSIC = classic + + +DEFAULT_VARIANT = Variants.CLASSIC + + +def apply(log: Union[EventLog, pd.DataFrame], aligned_traces: typing.ListAlignments, variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> graphviz.Source: + """ + Gets the alignment table visualization from the alignments output + + Parameters + ------------- + log + Event log + aligned_traces + Aligned traces + variant + Variant of the algorithm to apply, possible values: + - Variants.CLASSIC + parameters + Parameters of the algorithm + + Returns + ------------- + gviz + Graphviz object + """ + log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters) + return exec_utils.get_variant(variant).apply(log, aligned_traces, parameters=parameters) + + +def save(gviz: graphviz.Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz: graphviz.Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: graphviz.Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/bpmn/__init__.py b/pm4py/pm4py/visualization/bpmn/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fd5f32d0b2a90af86d93ee3deddfddd876767a77 --- /dev/null +++ b/pm4py/pm4py/visualization/bpmn/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.bpmn import visualizer, variants diff --git a/pm4py/pm4py/visualization/bpmn/util/__init__.py b/pm4py/pm4py/visualization/bpmn/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/visualization/bpmn/util/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/visualization/bpmn/util/dagrejs_base.html b/pm4py/pm4py/visualization/bpmn/util/dagrejs_base.html new file mode 100644 index 0000000000000000000000000000000000000000..89d883830f3272f603c75dbd325e0862be09b0de --- /dev/null +++ b/pm4py/pm4py/visualization/bpmn/util/dagrejs_base.html @@ -0,0 +1,271 @@ + + + + + + + + +
+ + + +
+
+
+
+ +
+
+
+ + + + diff --git a/pm4py/pm4py/visualization/bpmn/variants/__init__.py b/pm4py/pm4py/visualization/bpmn/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2b061a873bd4d691aa443f3a25b6f01df51e15a4 --- /dev/null +++ b/pm4py/pm4py/visualization/bpmn/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.bpmn.variants import classic diff --git a/pm4py/pm4py/visualization/bpmn/variants/classic.py b/pm4py/pm4py/visualization/bpmn/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..ae3c076b92c3ffdd5b3917f2693750862dc79b44 --- /dev/null +++ b/pm4py/pm4py/visualization/bpmn/variants/classic.py @@ -0,0 +1,167 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util import exec_utils +from enum import Enum +import tempfile +from graphviz import Digraph +from typing import Optional, Dict, Any +from pm4py.objects.bpmn.obj import BPMN +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.util import constants +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + RANKDIR = "rankdir" + FONT_SIZE = "font_size" + BGCOLOR = "bgcolor" + + +def add_bpmn_node(graph, n, font_size): + n_id = str(id(n)) + + if isinstance(n, BPMN.Task): + graph.node(n_id, shape="box", label=n.get_name(), fontsize=font_size) + elif isinstance(n, BPMN.StartEvent): + graph.node(n_id, label="", shape="circle", style="filled", fillcolor="green", fontsize=font_size) + elif isinstance(n, BPMN.EndEvent): + graph.node(n_id, label="", shape="circle", style="filled", fillcolor="orange", fontsize=font_size) + elif isinstance(n, BPMN.ParallelGateway): + graph.node(n_id, label="+", shape="diamond", fontsize=font_size) + elif isinstance(n, BPMN.ExclusiveGateway): + graph.node(n_id, label="X", shape="diamond", fontsize=font_size) + elif isinstance(n, BPMN.InclusiveGateway): + graph.node(n_id, label="O", shape="diamond", fontsize=font_size) + else: + graph.node(n_id, label="", shape="circle", fontsize=font_size) + + +def apply(bpmn_graph: BPMN, parameters: Optional[Dict[Any, Any]] = None) -> graphviz.Digraph: + """ + Visualize a BPMN graph + + Parameters + ------------- + bpmn_graph + BPMN graph + parameters + Parameters of the visualization, including: + - Parameters.FORMAT: the format of the visualization + - Parameters.RANKDIR: the direction of the representation (default: LR) + + Returns + ------------ + gviz + Graphviz representation + """ + if parameters is None: + parameters = {} + + from pm4py.objects.bpmn.obj import BPMN + from pm4py.objects.bpmn.util.sorting import get_sorted_nodes_edges + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + font_size = exec_utils.get_param_value(Parameters.FONT_SIZE, parameters, 12) + font_size = str(font_size) + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Digraph("", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + viz.graph_attr['rankdir'] = rankdir + + nodes, edges = get_sorted_nodes_edges(bpmn_graph) + process_ids = [] + for n in nodes: + if n.process not in process_ids: + process_ids.append(n.process) + process_ids_members = {n.process: list() for n in nodes} + for n in nodes: + process_ids_members[n.process].append(n) + + for n in nodes: + add_bpmn_node(viz, n, font_size) + + """ + viz.node('@@anchor', style='invis') + + for subp in process_ids: + with viz.subgraph(name="cluster"+subp) as c: + for n in process_ids_members[subp]: + c.attr(label=subp) + add_bpmn_node(c, n, font_size) + c.attr(rank='same') + + viz.edge('@@anchor', str(id(process_ids_members[subp][0])), style='invis') + """ + + for e in edges: + n_id_1 = str(id(e[0])) + n_id_2 = str(id(e[1])) + + viz.edge(n_id_1, n_id_2) + + viz.attr(overlap='false') + + viz.format = image_format.replace("html", "plain-ext") + + return viz + + +def save(gviz: graphviz.Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz: graphviz.Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: graphviz.Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/bpmn/variants/dagrejs.py b/pm4py/pm4py/visualization/bpmn/variants/dagrejs.py new file mode 100644 index 0000000000000000000000000000000000000000..758e4351c220d537e65c63535a837555b881d452 --- /dev/null +++ b/pm4py/pm4py/visualization/bpmn/variants/dagrejs.py @@ -0,0 +1,122 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any +from pm4py.objects.bpmn.obj import BPMN +from pm4py.util import exec_utils, constants, vis_utils +from enum import Enum +from copy import copy +import shutil +import tempfile +import importlib.resources + + +class Parameters(Enum): + ENCODING = "encoding" + IFRAME_WIDTH = "iframe_width" + IFRAME_HEIGHT = "iframe_height" + LOCAL_JUPYTER_FILE_NAME = "local_jupyter_file_name" + + +def get_html_file_contents(): + with importlib.resources.path("pm4py.visualization.bpmn.util", "dagrejs_base.html") as p: + with open(str(p), 'r') as html_file: + return html_file.read() + + +def apply(bpmn_graph: BPMN, parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Visualizes a BPMN graph by rendering it inside a HTML/Javascript file + + Parameters + -------------- + bpmn_graph + BPMN graph + parameters + Parameters of the algorithm, including: + - Parameters.ENCODING => the encoding of the HTML to be used + + Returns + --------------- + tmp_file_path + Path to the HTML file + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, constants.DEFAULT_ENCODING) + + from pm4py.objects.bpmn.exporter.variants import etree as bpmn_xml_exporter + export_parameters = copy(parameters) + xml_stri = bpmn_xml_exporter.get_xml_string(bpmn_graph, parameters=export_parameters) + xml_stri = xml_stri.decode(encoding).replace("\t", "").replace("\r", "").replace("\n", "") + + F = tempfile.NamedTemporaryFile(suffix=".html") + F.close() + + F = open(F.name, "w", encoding=encoding) + F.write(get_html_file_contents().replace("REPLACE", xml_stri)) + F.close() + + return F.name + + +def view(temp_file_name, parameters=None): + """ + View the SNA visualization on the screen + + Parameters + ------------- + temp_file_name + Temporary file name + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + iframe_width = exec_utils.get_param_value(Parameters.IFRAME_WIDTH, parameters, 900) + iframe_height = exec_utils.get_param_value(Parameters.IFRAME_HEIGHT, parameters, 600) + local_jupyter_file_name = exec_utils.get_param_value(Parameters.LOCAL_JUPYTER_FILE_NAME, parameters, "jupyter_bpmn_vis.html") + + if vis_utils.check_visualization_inside_jupyter(): + from IPython.display import IFrame + shutil.copyfile(temp_file_name, local_jupyter_file_name) + iframe = IFrame(local_jupyter_file_name, width=iframe_width, height=iframe_height) + from IPython.display import display + return display(iframe) + else: + vis_utils.open_opsystem_image_viewer(temp_file_name) + + +def save(temp_file_name, dest_file, parameters=None): + """ + Save the SNA visualization from a temporary file to a well-defined destination file + + Parameters + ------------- + temp_file_name + Temporary file name + dest_file + Destination file + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + shutil.copyfile(temp_file_name, dest_file) diff --git a/pm4py/pm4py/visualization/bpmn/visualizer.py b/pm4py/pm4py/visualization/bpmn/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..58dd13182dfa0d3f5f642c35282018fb99c924ae --- /dev/null +++ b/pm4py/pm4py/visualization/bpmn/visualizer.py @@ -0,0 +1,91 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.bpmn.variants import classic, dagrejs +from pm4py.util import exec_utils +from enum import Enum +from pm4py.visualization.common.gview import serialize, serialize_dot +from typing import Optional, Dict, Any +from pm4py.objects.bpmn.obj import BPMN +import graphviz + + +class Variants(Enum): + CLASSIC = classic + DAGREJS = dagrejs + + +DEFAULT_VARIANT = Variants.CLASSIC + + +def apply(bpmn_graph: BPMN, variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> graphviz.Digraph: + """ + Visualize a BPMN graph + + Parameters + ------------- + bpmn_graph + BPMN graph + variant + Variant of the visualization, possible values: + - Variants.CLASSIC + parameters + Version-specific parameters + + Returns + ------------ + gviz + Graphviz representation + """ + return exec_utils.get_variant(variant).apply(bpmn_graph, parameters=parameters) + + +def save(gviz: graphviz.Digraph, output_file_path: str, variant=DEFAULT_VARIANT, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + return exec_utils.get_variant(variant).save(gviz, output_file_path, parameters=parameters) + + +def view(gviz: graphviz.Digraph, variant=DEFAULT_VARIANT, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return exec_utils.get_variant(variant).view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: graphviz.Digraph, variant=DEFAULT_VARIANT, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + return exec_utils.get_variant(variant).matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/common/__init__.py b/pm4py/pm4py/visualization/common/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..75810400f0a0f8eb0f5313649b66e629fce221f6 --- /dev/null +++ b/pm4py/pm4py/visualization/common/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.visualization.common import save, utils, gview, visualizer, dot_util diff --git a/pm4py/pm4py/visualization/common/dot_util.py b/pm4py/pm4py/visualization/common/dot_util.py new file mode 100644 index 0000000000000000000000000000000000000000..812c78e06745e110a202c09baf87a586e93fbfd3 --- /dev/null +++ b/pm4py/pm4py/visualization/common/dot_util.py @@ -0,0 +1,33 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +def check_dot_installed(): + """ + Check if Graphviz's dot is installed correctly in the system + + Returns + ------- + boolean + Boolean telling if Graphviz's dot is installed correctly + """ + import subprocess + + try: + val = subprocess.run(['dot', '-V'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + return val.returncode == 0 + except: + return False diff --git a/pm4py/pm4py/visualization/common/gview.py b/pm4py/pm4py/visualization/common/gview.py new file mode 100644 index 0000000000000000000000000000000000000000..8b4e8be0ba590d1cdbc5facfac548e71afae1b6b --- /dev/null +++ b/pm4py/pm4py/visualization/common/gview.py @@ -0,0 +1,115 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import tempfile + +from pm4py.util import vis_utils, constants +from pm4py.visualization.common import dot_util, html +from io import BytesIO +from graphviz import Digraph + + +def view(gviz, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + if constants.DEFAULT_GVIZ_VIEW == "matplotlib_view": + return matplotlib_view(gviz, parameters=parameters) + + format = str(gviz.format).lower().replace("plain-ext", "html") + + is_dot_installed = dot_util.check_dot_installed() + + if format.startswith("html"): + html.view(gviz, parameters=parameters) + elif vis_utils.check_visualization_inside_jupyter(): + vis_utils.view_image_in_jupyter(gviz.render()) + else: + return gviz.view(cleanup=True) + + +def matplotlib_view(gviz, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + format = str(gviz.format).lower() + is_dot_installed = dot_util.check_dot_installed() + + from pm4py.visualization.common import save + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + + file_name = tempfile.NamedTemporaryFile(suffix='.'+format) + file_name.close() + + save.save(gviz, file_name.name) + + img = mpimg.imread(file_name.name) + plt.axis('off') + plt.tight_layout(pad=0, w_pad=0, h_pad=0) + plt.imshow(img) + plt.show() + + +def serialize_dot(gviz: Digraph, parameters=None) -> bytes: + """ + Serialize the DOT instructions of a Graphviz object + + Parameters + -------------- + gviz + Graphviz object + + Returns + -------------- + bytes_string + String containing the DOT instructions + """ + dot = str(gviz) + f = BytesIO() + f.write(dot.encode(constants.DEFAULT_ENCODING)) + return f.getvalue() + + +def serialize(gviz: Digraph, parameters=None) -> bytes: + """ + Serialize the image rendered from a Graphviz object + + Parameters + --------------- + gviz + Graphviz object + + Returns + --------------- + bytes_string + String containing the picture + """ + render = gviz.render(cleanup=True) + with open(render, "rb") as f1: + return f1.read() diff --git a/pm4py/pm4py/visualization/common/html.py b/pm4py/pm4py/visualization/common/html.py new file mode 100644 index 0000000000000000000000000000000000000000..467a91f4588626f38a726e8f2ba4705adc88bd30 --- /dev/null +++ b/pm4py/pm4py/visualization/common/html.py @@ -0,0 +1,106 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.util import constants, vis_utils +from tempfile import NamedTemporaryFile +from enum import Enum +from pm4py.util import exec_utils +import shutil + + +class Parameters(Enum): + IFRAME_WIDTH = "iframe_width" + IFRAME_HEIGHT = "iframe_height" + LOCAL_JUPYTER_FILE_NAME = "local_jupyter_file_name" + + +def form_html(gviz, name=None): + """ + Forms the HTML page using GraphvizJS + + Parameters + ----------- + gviz + GraphViz diagram + name + (optional) path where the GraphViz output should be saved + + Returns + ----------- + name + Path where the GraphvizJS output is saved + """ + if name is None: + html_file = NamedTemporaryFile(suffix=".html") + html_file.close() + name = html_file.name + + F = open(name, "w") + F.write('') + F.write('') + F.write('') + F.write('
') + F.close() + + return name + + +def save(gviz, output_file_path, parameters=None): + """ + Saves the diagram in HTML format + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + if parameters is None: + parameters = {} + + form_html(gviz, output_file_path) + + +def view(gviz, parameters=None): + """ + View the diagram in HTML format + + Parameters + ----------- + gviz + GraphViz diagram + """ + if parameters is None: + parameters = {} + + iframe_width = exec_utils.get_param_value(Parameters.IFRAME_WIDTH, parameters, 900) + iframe_height = exec_utils.get_param_value(Parameters.IFRAME_HEIGHT, parameters, 600) + local_jupyter_file_name = exec_utils.get_param_value(Parameters.LOCAL_JUPYTER_FILE_NAME, parameters, "jupyter_html_vis.html") + + temp_file_name = form_html(gviz) + + if vis_utils.check_visualization_inside_jupyter(): + from IPython.display import IFrame + shutil.copyfile(temp_file_name, local_jupyter_file_name) + iframe = IFrame(local_jupyter_file_name, width=iframe_width, height=iframe_height) + from IPython.display import display + return display(iframe) + else: + vis_utils.open_opsystem_image_viewer(temp_file_name) diff --git a/pm4py/pm4py/visualization/common/save.py b/pm4py/pm4py/visualization/common/save.py new file mode 100644 index 0000000000000000000000000000000000000000..40607c3e4f88cd2fa0546a8ad9f606e06808a7d3 --- /dev/null +++ b/pm4py/pm4py/visualization/common/save.py @@ -0,0 +1,43 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import shutil +import os +from pm4py.visualization.common import dot_util, html + + +def save(gviz, output_file_path, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + format = os.path.splitext(output_file_path)[1][1:].lower() + is_dot_installed = dot_util.check_dot_installed() + + if format.startswith("html"): + html.save(gviz, output_file_path, parameters=parameters) + else: + render = gviz.render(cleanup=True) + shutil.copyfile(render, output_file_path) + """elif not is_dot_installed: + raise Exception("impossible to save formats different from HTML without the Graphviz binary")""" + diff --git a/pm4py/pm4py/visualization/common/svg_pos_parser.py b/pm4py/pm4py/visualization/common/svg_pos_parser.py new file mode 100644 index 0000000000000000000000000000000000000000..5e72c139010b4dcc2260040aed768126597a39d1 --- /dev/null +++ b/pm4py/pm4py/visualization/common/svg_pos_parser.py @@ -0,0 +1,66 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import xml.etree.ElementTree as ET +from typing import Dict, Any, Tuple + + +def apply(file_name: str) -> Tuple[Dict[str, Any], Dict[str, Any]]: + tree = ET.parse(file_name) + root = tree.getroot() + nodes = {} + edges = {} + for child in root: + for child2 in child: + this_class = child2.get("class") + if this_class in ["cluster", "node", "edge"]: + title = None + label_x = None + label_y = None + label_text = None + polygon = None + waypoints = None + for child3 in child2: + if child3.tag.endswith("title"): + title = child3.text + elif child3.tag.endswith("text"): + label_x = child3.get("x") + label_y = child3.get("y") + label_text = child3.text + elif child3.tag.endswith("polygon"): + polygon = child3.get("points").split(" ") + polygon = [x.split(",") for x in polygon] + polygon = tuple((float(x[0]), float(x[1])) for x in polygon) + elif child3.tag.endswith("path"): + pa = child3.get("d").replace("C", " ")[1:] + waypoints = pa.split() + waypoints = [x.split(",") for x in waypoints] + waypoints = [(float(x[0]), float(x[1])) for x in waypoints] + + if this_class == "node" or this_class == "cluster": + key_name = title + if this_class == "cluster": + key_name = key_name.split(this_class)[-1] + nodes[key_name] = {"label": label_text, "label_x": label_x, "label_y": label_y, "polygon": polygon} + elif this_class == "edge": + title = title.replace("-", " ").replace(">", " ").strip() + these_nodes = tuple(title.split(" ")) + if these_nodes[0] in nodes and these_nodes[-1] in nodes: + edges[(these_nodes[0], these_nodes[-1])] = {"label": label_text, "label_x": label_x, "label_y": label_y, + "polygon": polygon, "waypoints": waypoints} + + return nodes, edges diff --git a/pm4py/pm4py/visualization/common/utils.py b/pm4py/pm4py/visualization/common/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..941482c0b6020cf35986dd29be621e53ecbc0e38 --- /dev/null +++ b/pm4py/pm4py/visualization/common/utils.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.vis_utils import human_readable_stat, get_arc_penwidth, get_trans_freq_color, get_base64_from_gviz, \ + get_base64_from_file diff --git a/pm4py/pm4py/visualization/common/visualizer.py b/pm4py/pm4py/visualization/common/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..c56214c50cbe6de6c51471671f9e0315d7fe06f3 --- /dev/null +++ b/pm4py/pm4py/visualization/common/visualizer.py @@ -0,0 +1,51 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import shutil + +from pm4py.util.vis_utils import human_readable_stat, get_arc_penwidth, get_trans_freq_color, get_base64_from_gviz, \ + get_base64_from_file +from pm4py.util import vis_utils + + +def save(gviz, output_file_path): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + render = gviz.render(cleanup=True) + shutil.copyfile(render, output_file_path) + + +def view(gviz): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + if vis_utils.check_visualization_inside_jupyter(): + vis_utils.view_image_in_jupyter(gviz.render()) + else: + return gviz.view(cleanup=True) diff --git a/pm4py/pm4py/visualization/decisiontree/__init__.py b/pm4py/pm4py/visualization/decisiontree/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3fd04791dd694804f5e37f0cbb903ec99dbc5f98 --- /dev/null +++ b/pm4py/pm4py/visualization/decisiontree/__init__.py @@ -0,0 +1,23 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.decisiontree import variants, visualizer + +from pm4py.util import constants +import warnings + +if constants.SHOW_INTERNAL_WARNINGS: + warnings.warn("The decisiontree visualizer will be removed in a future release (use Scikit Learn instead).") diff --git a/pm4py/pm4py/visualization/decisiontree/util/__init__.py b/pm4py/pm4py/visualization/decisiontree/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/visualization/decisiontree/util/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/visualization/decisiontree/util/dt_to_string.py b/pm4py/pm4py/visualization/decisiontree/util/dt_to_string.py new file mode 100644 index 0000000000000000000000000000000000000000..0c5613d8f357d9d4bd043dd2c615905d7412cd04 --- /dev/null +++ b/pm4py/pm4py/visualization/decisiontree/util/dt_to_string.py @@ -0,0 +1,66 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from sklearn.tree import DecisionTreeClassifier +from sklearn.tree import export_text +from typing import Dict, Tuple, Set, List + + +def apply(clf: DecisionTreeClassifier, columns: List[str]) -> Tuple[Dict[str, str], Dict[str, Set[str]]]: + """ + Translates a decision tree object into a dictionary + associating a set of conditions for each target class + + Parameters + ---------------- + clf + Decision tree classifier + columns + Columns + + Returns + ---------------- + dict_classes + Dictionary associating a set of conditions for each target class + """ + tree_string = export_text(clf).split("\n") + levels = {} + target_classes = {} + variables = {} + i = 0 + while i < len(tree_string): + if "---" in tree_string[i]: + level = len(tree_string[i].split("|")) - 2 + this_part = tree_string[i].split("--- ")[1] + this_part_idx_space = this_part.index(" ") + this_part_0 = this_part[:this_part_idx_space] + this_part_1 = this_part[this_part_idx_space+1:] + if "class" in this_part: + all_levels = "(" + " && ".join([levels[i] for i in range(level)]) + ")" + target_class = this_part.split(": ")[-1] + if target_class not in target_classes: + target_classes[target_class] = [] + target_classes[target_class].append(all_levels) + if target_class not in variables: + variables[target_class] = set() + for j in range(level): + variables[target_class].add(levels[j].split(" ")[0]) + else: + levels[level] = columns[int(this_part_0.split("_")[1])] + " " + this_part_1 + i = i + 1 + for cl in target_classes: + target_classes[cl] = " || ".join(target_classes[cl]) + return target_classes, variables diff --git a/pm4py/pm4py/visualization/decisiontree/variants/__init__.py b/pm4py/pm4py/visualization/decisiontree/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d3c1be826548b2f2800a72fbb537ef41448c2932 --- /dev/null +++ b/pm4py/pm4py/visualization/decisiontree/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.decisiontree.variants import classic diff --git a/pm4py/pm4py/visualization/decisiontree/variants/classic.py b/pm4py/pm4py/visualization/decisiontree/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..92ada38a7d5c085d84158ede3aa176a479ede3c1 --- /dev/null +++ b/pm4py/pm4py/visualization/decisiontree/variants/classic.py @@ -0,0 +1,67 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import tempfile +from pm4py.util import exec_utils +from enum import Enum +from sklearn.tree import DecisionTreeClassifier +from sklearn.tree import export_graphviz +from typing import Optional, Dict, Any, Union, List +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + + +def apply(clf: DecisionTreeClassifier, feature_names: List[str], classes: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Source: + """ + Apply the visualization of the decision tree + + Parameters + ------------ + clf + Decision tree + feature_names + Names of the provided features + classes + Names of the target classes + parameters + Possible parameters of the algorithm, including: + Parameters.FORMAT -> Image format (pdf, svg, png ...) + + Returns + ------------ + gviz + GraphViz object + """ + if parameters is None: + parameters = {} + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + dot_data = export_graphviz(clf, out_file=None, + feature_names=feature_names, + class_names=classes, + filled=True, rounded=True, + special_characters=True) + gviz = graphviz.Source(dot_data) + gviz.format = format + gviz.filename = filename.name + + return gviz diff --git a/pm4py/pm4py/visualization/decisiontree/visualizer.py b/pm4py/pm4py/visualization/decisiontree/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..64e74e7df018cf5564348895465ad2532ab42326 --- /dev/null +++ b/pm4py/pm4py/visualization/decisiontree/visualizer.py @@ -0,0 +1,98 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.decisiontree.variants import classic +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from enum import Enum +from pm4py.util import exec_utils +from pm4py.visualization.common.gview import serialize, serialize_dot +from sklearn.tree import DecisionTreeClassifier +from typing import Optional, Dict, Any, List +import graphviz + + +class Variants(Enum): + CLASSIC = classic + + +DEFAULT_VARIANT = Variants.CLASSIC + + +def apply(clf: DecisionTreeClassifier, feature_names: List[str], classes: List[str], parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> graphviz.Source: + """ + Method to apply the visualization of the decision tree + + Parameters + ------------ + clf + Decision tree + feature_names + Names of the provided features + classes + Names of the target classes + parameters + Possible parameters of the algorithm, including: + Parameters.FORMAT -> Image format (pdf, svg, png ...) + variant + Variant of the algorithm: + - Variants.CLASSIC + + Returns + ------------ + gviz + GraphViz object + """ + return exec_utils.get_variant(variant).apply(clf, feature_names, classes, parameters=parameters) + + +def save(gviz: graphviz.Source, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + + +def view(gviz: graphviz.Source, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: graphviz.Source, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/dfg/__init__.py b/pm4py/pm4py/visualization/dfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..578261dca689fd53b9764fecbb8ed6686a9eede7 --- /dev/null +++ b/pm4py/pm4py/visualization/dfg/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.visualization.dfg import visualizer, variants, util diff --git a/pm4py/pm4py/visualization/dfg/util/__init__.py b/pm4py/pm4py/visualization/dfg/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ac35dc317bcb3421d553c963bd23560dbef5f5f8 --- /dev/null +++ b/pm4py/pm4py/visualization/dfg/util/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.visualization.dfg.util import dfg_gviz diff --git a/pm4py/pm4py/visualization/dfg/util/dfg_gviz.py b/pm4py/pm4py/visualization/dfg/util/dfg_gviz.py new file mode 100644 index 0000000000000000000000000000000000000000..f3df2ee1505740627fdd4080bac05afdfdb218d8 --- /dev/null +++ b/pm4py/pm4py/visualization/dfg/util/dfg_gviz.py @@ -0,0 +1,265 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import tempfile +from copy import copy + +from graphviz import Digraph +from pm4py.util import constants +from pm4py.visualization.common.utils import * + + +def get_activities_color(activities_count): + """ + Get frequency color for attributes + + Parameters + ----------- + activities_count + Count of attributes in the log + + Returns + ----------- + activities_color + Color assigned to attributes in the graph + """ + activities_color = {} + + min_value, max_value = get_min_max_value(activities_count) + + for ac in activities_count: + v0 = activities_count[ac] + v1 = get_trans_freq_color(v0, min_value, max_value) + + activities_color[ac] = v1 + + return activities_color + + +def get_activities_color_serv_time(serv_time): + """ + Gets the color for the activities based on the service time + + Parameters + ---------------- + serv_time + Service time + + Returns + ---------------- + act_color + Dictionary associating each activity to a color based on the service time + """ + activities_color = {} + + min_soj_time, max_soj_time = get_min_max_value(serv_time) + + for ac in serv_time: + act_soj_time = serv_time[ac] + + trans_base_color = int( + 255 - 100 * (act_soj_time - min_soj_time) / (max_soj_time - min_soj_time + 0.00001)) + trans_base_color_hex = str(hex(trans_base_color))[2:].upper() + + activities_color[ac] = "#" + "FF" + trans_base_color_hex + trans_base_color_hex + + return activities_color + + +def get_min_max_value(dfg): + """ + Gets min and max value assigned to edges + in DFG graph + + Parameters + ----------- + dfg + Directly follows graph + + Returns + ----------- + min_value + Minimum value in directly follows graph + max_value + Maximum value in directly follows graph + """ + min_value = 9999999999 + max_value = -1 + + for edge in dfg: + if dfg[edge] < min_value: + min_value = dfg[edge] + if dfg[edge] > max_value: + max_value = dfg[edge] + + return min_value, max_value + + +def assign_penwidth_edges(dfg): + """ + Assign penwidth to edges in directly-follows graph + + Parameters + ----------- + dfg + Direcly follows graph + + Returns + ----------- + penwidth + Graph penwidth that edges should have in the direcly follows graph + """ + penwidth = {} + min_value, max_value = get_min_max_value(dfg) + for edge in dfg: + v0 = dfg[edge] + v1 = get_arc_penwidth(v0, min_value, max_value) + penwidth[edge] = str(v1) + + return penwidth + + +def graphviz_visualization(activities_count, dfg, image_format="png", measure="frequency", + max_no_of_edges_in_diagram=100000, start_activities=None, end_activities=None, serv_time=None, + font_size="12", bgcolor=constants.DEFAULT_BGCOLOR, rankdir=constants.DEFAULT_RANKDIR_GVIZ): + """ + Do GraphViz visualization of a DFG graph + + Parameters + ----------- + activities_count + Count of attributes in the log (may include attributes that are not in the DFG graph) + dfg + DFG graph + image_format + GraphViz should be represented in this format + measure + Describes which measure is assigned to edges in direcly follows graph (frequency/performance) + max_no_of_edges_in_diagram + Maximum number of edges in the diagram allowed for visualization + start_activities + Start activities of the log + end_activities + End activities of the log + serv_time + For each activity, the service time in the log + font_size + Size of the text on the activities/edges + bgcolor + Background color of the visualization (i.e., 'transparent', 'white', ...) + rankdir + Direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + + Returns + ----------- + viz + Digraph object + """ + if start_activities is None: + start_activities = [] + if end_activities is None: + end_activities = [] + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Digraph("", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor, 'rankdir': rankdir}) + + # first, remove edges in diagram that exceeds the maximum number of edges in the diagram + dfg_key_value_list = [] + for edge in dfg: + dfg_key_value_list.append([edge, dfg[edge]]) + # more fine grained sorting to avoid that edges that are below the threshold are + # undeterministically removed + dfg_key_value_list = sorted(dfg_key_value_list, key=lambda x: (x[1], x[0][0], x[0][1]), reverse=True) + dfg_key_value_list = dfg_key_value_list[0:min(len(dfg_key_value_list), max_no_of_edges_in_diagram)] + dfg_allowed_keys = [x[0] for x in dfg_key_value_list] + dfg_keys = list(dfg.keys()) + for edge in dfg_keys: + if edge not in dfg_allowed_keys: + del dfg[edge] + + # calculate edges penwidth + penwidth = assign_penwidth_edges(dfg) + + activities_count_int = copy(activities_count) + + activities_in_dfg = set(activities_count) + + # assign attributes color + if measure == "frequency": + activities_color = get_activities_color(activities_count_int) + else: + activities_color = get_activities_color_serv_time(serv_time) + + # represent nodes + viz.attr('node', shape='box') + + if len(activities_in_dfg) == 0: + activities_to_include = sorted(list(set(activities_count_int))) + else: + # take unique elements as a list not as a set (in this way, nodes are added in the same order to the graph) + activities_to_include = sorted(list(set(activities_in_dfg))) + + activities_map = {} + + for act in activities_to_include: + if "frequency" in measure and act in activities_count_int: + viz.node(str(hash(act)), act + " (" + str(activities_count_int[act]) + ")", style='filled', + fillcolor=activities_color[act], fontsize=font_size) + activities_map[act] = str(hash(act)) + elif "performance" in measure and act in serv_time and serv_time[act] >= 0: + viz.node(str(hash(act)), act + " (" + human_readable_stat(serv_time[act]) + ")", fontsize=font_size, + style='filled', fillcolor=activities_color[act]) + activities_map[act] = str(hash(act)) + else: + viz.node(str(hash(act)), act, fontsize=font_size) + activities_map[act] = str(hash(act)) + + # make edges addition always in the same order + dfg_edges = sorted(list(dfg.keys())) + + # represent edges + for edge in dfg_edges: + if "frequency" in measure or "cost" in measure: + label = str(dfg[edge]) + else: + label = human_readable_stat(dfg[edge]) + viz.edge(str(hash(edge[0])), str(hash(edge[1])), label=label, penwidth=str(penwidth[edge]), fontsize=font_size) + + start_activities_to_include = [act for act in start_activities if act in activities_map] + end_activities_to_include = [act for act in end_activities if act in activities_map] + + if start_activities_to_include: + viz.node("@@startnode", "<●>", shape='circle', fontsize="34") + for act in start_activities_to_include: + label = str(start_activities[act]) if isinstance(start_activities, dict) and measure == "frequency" else "" + viz.edge("@@startnode", activities_map[act], label=label, fontsize=font_size) + + if end_activities_to_include: + # <■> + viz.node("@@endnode", "<■>", shape='doublecircle', fontsize="32") + for act in end_activities_to_include: + label = str(end_activities[act]) if isinstance(end_activities, dict) and measure == "frequency" else "" + viz.edge(activities_map[act], "@@endnode", label=label, fontsize=font_size) + + viz.attr(overlap='false') + viz.attr(fontsize='11') + + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/dfg/variants/__init__.py b/pm4py/pm4py/visualization/dfg/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a8cab283f361e01521e0bcedc122a9457c0ab23e --- /dev/null +++ b/pm4py/pm4py/visualization/dfg/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.dfg.variants import frequency, performance diff --git a/pm4py/pm4py/visualization/dfg/variants/cost.py b/pm4py/pm4py/visualization/dfg/variants/cost.py new file mode 100644 index 0000000000000000000000000000000000000000..24a077aa59f32541b35553b6ebf8f2844db10758 --- /dev/null +++ b/pm4py/pm4py/visualization/dfg/variants/cost.py @@ -0,0 +1,124 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + + + +from pm4py.statistics.attributes.log import get as attr_get +from pm4py.objects.dfg.utils import dfg_utils +from pm4py.util import xes_constants as xes +from pm4py.util import exec_utils +from pm4py.statistics.service_time.log import get as serv_time_get +from enum import Enum +from pm4py.util import constants + +from typing import Optional, Dict, Any, Tuple +import graphviz +from pm4py.objects.log.obj import EventLog +from collections import Counter +from pm4py.visualization.dfg.util import dfg_gviz + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + FORMAT = "format" + MAX_NO_EDGES_IN_DIAGRAM = "maxNoOfEdgesInDiagram" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + FONT_SIZE = "font_size" + AGGREGATION_MEASURE = "aggregation_measure" + RANKDIR = "rankdir" + BGCOLOR = "bgcolor" + + +def apply(dfg: Dict[Tuple[str, str], int], log: EventLog = None, parameters: Optional[Dict[Any, Any]] = None, + activities_count: Dict[str, int] = None, serv_time: Dict[str, float] = None) -> graphviz.Digraph: + """ + Visualize a cost-based directly-follows graph + + Parameters + ----------------- + dfg + Performance Directly-follows graph + log + (if provided) Event log for the calculation of statistics + activities_count + (if provided) Dictionary associating to each activity the number of occurrences in the log. + serv_time + (if provided) Dictionary associating to each activity the average service time + parameters + Variant-specific parameters + + Returns + ----------------- + gviz + Graphviz digraph + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + max_no_of_edges_in_diagram = exec_utils.get_param_value(Parameters.MAX_NO_EDGES_IN_DIAGRAM, parameters, 100000) + start_activities = exec_utils.get_param_value(Parameters.START_ACTIVITIES, parameters, []) + end_activities = exec_utils.get_param_value(Parameters.END_ACTIVITIES, parameters, []) + font_size = exec_utils.get_param_value(Parameters.FONT_SIZE, parameters, 12) + font_size = str(font_size) + activities = dfg_utils.get_activities_from_dfg(dfg) + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, parameters, "mean") + + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + + # if all the aggregation measures are provided for a given key, + # then pick one of the values for the representation + dfg0 = dfg + dfg = {} + for key in dfg0: + try: + if aggregation_measure in dfg0[key]: + dfg[key] = dfg0[key][aggregation_measure] + else: + dfg[key] = dfg0[key] + except: + dfg[key] = dfg0[key] + + if activities_count is None: + if log is not None: + activities_count = attr_get.get_attribute_values(log, activity_key, parameters=parameters) + else: + # the frequency of an activity in the log is at least the number of occurrences of + # incoming arcs in the DFG. + # if the frequency of the start activities nodes is also provided, use also that. + activities_count = Counter({key: 0 for key in activities}) + for el in dfg: + activities_count[el[1]] += dfg[el] + if isinstance(start_activities, dict): + for act in start_activities: + activities_count[act] += start_activities[act] + + if serv_time is None: + if log is not None: + serv_time = serv_time_get.apply(log, parameters=parameters) + else: + serv_time = {key: -1 for key in activities} + + return dfg_gviz.graphviz_visualization(activities_count, dfg, image_format=image_format, measure="cost", + max_no_of_edges_in_diagram=max_no_of_edges_in_diagram, + start_activities=start_activities, end_activities=end_activities, serv_time=serv_time, + font_size=font_size, bgcolor=bgcolor, rankdir=rankdir) diff --git a/pm4py/pm4py/visualization/dfg/variants/frequency.py b/pm4py/pm4py/visualization/dfg/variants/frequency.py new file mode 100644 index 0000000000000000000000000000000000000000..7f21935e6a14a97e66dc14d1deb30624408214fb --- /dev/null +++ b/pm4py/pm4py/visualization/dfg/variants/frequency.py @@ -0,0 +1,112 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.statistics.attributes.log import get as attr_get +from pm4py.objects.dfg.utils import dfg_utils +from pm4py.util import xes_constants as xes +from pm4py.util import exec_utils +from pm4py.statistics.service_time.log import get as serv_time_get +from enum import Enum +from pm4py.util import constants +from typing import Optional, Dict, Any, Tuple +import graphviz +from pm4py.objects.log.obj import EventLog +from collections import Counter +from pm4py.visualization.dfg.util import dfg_gviz + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + FORMAT = "format" + MAX_NO_EDGES_IN_DIAGRAM = "maxNoOfEdgesInDiagram" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + FONT_SIZE = "font_size" + RANKDIR = "rankdir" + BGCOLOR = "bgcolor" + STAT_LOCALE = "stat_locale" + + +def apply(dfg: Dict[Tuple[str, str], int], log: EventLog = None, parameters: Optional[Dict[Any, Any]] = None, activities_count : Dict[str, int] = None, serv_time: Dict[str, float] = None) -> graphviz.Digraph: + """ + Visualize a frequency directly-follows graph + + Parameters + ----------------- + dfg + Frequency Directly-follows graph + log + (if provided) Event log for the calculation of statistics + activities_count + (if provided) Dictionary associating to each activity the number of occurrences in the log. + serv_time + (if provided) Dictionary associating to each activity the average service time + parameters + Variant-specific parameters + + Returns + ----------------- + gviz + Graphviz digraph + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + max_no_of_edges_in_diagram = exec_utils.get_param_value(Parameters.MAX_NO_EDGES_IN_DIAGRAM, parameters, 100000) + start_activities = exec_utils.get_param_value(Parameters.START_ACTIVITIES, parameters, {}) + end_activities = exec_utils.get_param_value(Parameters.END_ACTIVITIES, parameters, {}) + font_size = exec_utils.get_param_value(Parameters.FONT_SIZE, parameters, 12) + font_size = str(font_size) + + if start_activities is None: + start_activities = dict() + if end_activities is None: + end_activities = dict() + activities = sorted(list(set(dfg_utils.get_activities_from_dfg(dfg)).union(set(start_activities)).union(set(end_activities)))) + + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + stat_locale = exec_utils.get_param_value(Parameters.STAT_LOCALE, parameters, {}) + + if activities_count is None: + if log is not None: + activities_count = attr_get.get_attribute_values(log, activity_key, parameters=parameters) + else: + # the frequency of an activity in the log is at least the number of occurrences of + # incoming arcs in the DFG. + # if the frequency of the start activities nodes is also provided, use also that. + activities_count = Counter({key: 0 for key in activities}) + for el in dfg: + activities_count[el[1]] += dfg[el] + if isinstance(start_activities, dict): + for act in start_activities: + activities_count[act] += start_activities[act] + + if serv_time is None: + if log is not None: + serv_time = serv_time_get.apply(log, parameters=parameters) + else: + serv_time = {key: 0 for key in activities} + + return dfg_gviz.graphviz_visualization(activities_count, dfg, image_format=image_format, measure="frequency", + max_no_of_edges_in_diagram=max_no_of_edges_in_diagram, + start_activities=start_activities, end_activities=end_activities, serv_time=serv_time, + font_size=font_size, bgcolor=bgcolor, rankdir=rankdir) diff --git a/pm4py/pm4py/visualization/dfg/variants/performance.py b/pm4py/pm4py/visualization/dfg/variants/performance.py new file mode 100644 index 0000000000000000000000000000000000000000..b41e5ff7e62a9c5189e03f7cd490f31e15017eb8 --- /dev/null +++ b/pm4py/pm4py/visualization/dfg/variants/performance.py @@ -0,0 +1,124 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.statistics.attributes.log import get as attr_get +from pm4py.objects.dfg.utils import dfg_utils +from pm4py.util import xes_constants as xes +from pm4py.util import exec_utils +from pm4py.statistics.service_time.log import get as serv_time_get +from enum import Enum +from pm4py.util import constants +from enum import Enum +from collections import Counter + +from typing import Optional, Dict, Any, Tuple +import graphviz +from pm4py.objects.log.obj import EventLog +from collections import Counter +from pm4py.visualization.dfg.util import dfg_gviz + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + FORMAT = "format" + MAX_NO_EDGES_IN_DIAGRAM = "maxNoOfEdgesInDiagram" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + FONT_SIZE = "font_size" + AGGREGATION_MEASURE = "aggregation_measure" + RANKDIR = "rankdir" + BGCOLOR = "bgcolor" + STAT_LOCALE = "stat_locale" + +def apply(dfg: Dict[Tuple[str, str], int], log: EventLog = None, parameters: Optional[Dict[Any, Any]] = None, activities_count : Dict[str, int] = None, serv_time: Dict[str, float] = None) -> graphviz.Digraph: + """ + Visualize a performance directly-follows graph + + Parameters + ----------------- + dfg + Performance Directly-follows graph + log + (if provided) Event log for the calculation of statistics + activities_count + (if provided) Dictionary associating to each activity the number of occurrences in the log. + serv_time + (if provided) Dictionary associating to each activity the average service time + parameters + Variant-specific parameters + + Returns + ----------------- + gviz + Graphviz digraph + """ + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + max_no_of_edges_in_diagram = exec_utils.get_param_value(Parameters.MAX_NO_EDGES_IN_DIAGRAM, parameters, 100000) + start_activities = exec_utils.get_param_value(Parameters.START_ACTIVITIES, parameters, []) + end_activities = exec_utils.get_param_value(Parameters.END_ACTIVITIES, parameters, []) + font_size = exec_utils.get_param_value(Parameters.FONT_SIZE, parameters, 12) + font_size = str(font_size) + activities = dfg_utils.get_activities_from_dfg(dfg) + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, parameters, "mean") + + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + stat_locale = exec_utils.get_param_value(Parameters.STAT_LOCALE, parameters, {}) + + # if all the aggregation measures are provided for a given key, + # then pick one of the values for the representation + dfg0 = dfg + dfg = {} + for key in dfg0: + try: + if aggregation_measure in dfg0[key]: + dfg[key] = dfg0[key][aggregation_measure] + else: + dfg[key] = dfg0[key] + except: + dfg[key] = dfg0[key] + + if activities_count is None: + if log is not None: + activities_count = attr_get.get_attribute_values(log, activity_key, parameters=parameters) + else: + # the frequency of an activity in the log is at least the number of occurrences of + # incoming arcs in the DFG. + # if the frequency of the start activities nodes is also provided, use also that. + activities_count = Counter({key: 0 for key in activities}) + for el in dfg: + activities_count[el[1]] += dfg[el] + if isinstance(start_activities, dict): + for act in start_activities: + activities_count[act] += start_activities[act] + + if serv_time is None: + if log is not None: + serv_time = serv_time_get.apply(log, parameters=parameters) + else: + serv_time = {key: -1 for key in activities} + + return dfg_gviz.graphviz_visualization(activities_count, dfg, image_format=image_format, measure="performance", + max_no_of_edges_in_diagram=max_no_of_edges_in_diagram, + start_activities=start_activities, end_activities=end_activities, serv_time=serv_time, + font_size=font_size, bgcolor=bgcolor, rankdir=rankdir) diff --git a/pm4py/pm4py/visualization/dfg/variants/timeline.py b/pm4py/pm4py/visualization/dfg/variants/timeline.py new file mode 100644 index 0000000000000000000000000000000000000000..0f375a6822a05a05ecd378516be49b4318afb500 --- /dev/null +++ b/pm4py/pm4py/visualization/dfg/variants/timeline.py @@ -0,0 +1,310 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import tempfile +import re +import warnings +from copy import copy + +from graphviz import Digraph +from graphviz.dot import node + +from pm4py.statistics.attributes.log import get as attr_get +from pm4py.objects.dfg.utils import dfg_utils +from pm4py.util import xes_constants as xes +from pm4py.visualization.common.utils import * +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util import constants +from typing import Optional, Dict, Any, Tuple, no_type_check_decorator +from pm4py.objects.log.obj import EventLog +from collections import Counter + + +class Parameters(Enum): + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + FORMAT = "format" + MAX_NO_EDGES_IN_DIAGRAM = "maxNoOfEdgesInDiagram" + START_ACTIVITIES = "start_activities" + END_ACTIVITIES = "end_activities" + TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_TIMESTAMP_KEY + START_TIMESTAMP_KEY = constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY + FONT_SIZE = "font_size" + BGCOLOR = "bgcolor" + STAT_LOCALE = "stat_locale" + + +def get_min_max_value(dfg): + min_value = 9999999999 + max_value = -1 + + for edge in dfg: + if dfg[edge] < min_value: + min_value = dfg[edge] + if dfg[edge] > max_value: + max_value = dfg[edge] + + return min_value, max_value + + +def assign_penwidth_edges(dfg): + + penwidth = {} + min_value, max_value = get_min_max_value(dfg) + for edge in dfg: + v0 = dfg[edge] + v1 = get_arc_penwidth(v0, min_value, max_value) + penwidth[edge] = str(v1) + + return penwidth + + +def get_activities_color(activities_count): + + activities_color = {} + + min_value, max_value = get_min_max_value(activities_count) + + for ac in activities_count: + v0 = activities_count[ac] + """transBaseColor = int( + 255 - 100 * (v0 - min_value) / (max_value - min_value + 0.00001)) + transBaseColorHex = str(hex(transBaseColor))[2:].upper() + v1 = "#" + transBaseColorHex + transBaseColorHex + "FF""" + + v1 = get_trans_freq_color(v0, min_value, max_value) + + activities_color[ac] = v1 + + return activities_color + + +def graphviz_visualization(activities_count, dfg, dfg_time : Dict, image_format="png", measure="timeline", + max_no_of_edges_in_diagram=100000, start_activities=None, end_activities=None, soj_time=None, + font_size="12", bgcolor=constants.DEFAULT_BGCOLOR, stat_locale=None): + if start_activities is None: + start_activities = {} + if end_activities is None: + end_activities = {} + if stat_locale is None: + stat_locale = {} + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + viz = Digraph("", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + + '''first, remove edges in diagram that exceeds the maximum number of edges in the diagram''' + dfg_key_value_list = [] + for edge in dfg: + dfg_key_value_list.append([edge, dfg[edge]]) + + '''More fine grained sorting to avoid that edges that are below the threshold are + undeterministically removed''' + dfg_key_value_list = sorted(dfg_key_value_list, key=lambda x: (x[1], x[0][0], x[0][1]), reverse=True) + dfg_key_value_list = dfg_key_value_list[0:min(len(dfg_key_value_list), max_no_of_edges_in_diagram)] + dfg_allowed_keys = [x[0] for x in dfg_key_value_list] + dfg_keys = list(dfg.keys()) + for edge in dfg_keys: + if edge not in dfg_allowed_keys: + del dfg[edge] + + # calculate edges penwidth + penwidth = assign_penwidth_edges(dfg) + activities_in_dfg = set() + activities_count_int = copy(activities_count) + + for edge in dfg: + activities_in_dfg.add(edge[0]) + activities_in_dfg.add(edge[1]) + + # assign attributes color + activities_color = get_activities_color(activities_count_int) + + # represent nodes + viz.attr('node', shape='rect') + + if len(activities_in_dfg) == 0: + activities_to_include = sorted(list(set(activities_count_int))) + else: + # take unique elements as a list not as a set (in this way, nodes are added in the same order to the graph) + activities_to_include = sorted(list(set(activities_in_dfg))) + + + dfg_timestamps = sorted(dfg_time.items(), key = lambda x:x[1]) + act_time_map = {} + timestamps_to_include = [] + hash_timestamps_to_include = [] + + for dfg_timestamp in dfg_timestamps: + act = dfg_timestamp[0] + timestamp = dfg_timestamp[1].total_seconds() + stat = human_readable_stat(timestamp) + if stat not in timestamps_to_include: + viz.node(str(hash(stat)), str(stat), shape='circle', style='filled', fillcolor='pink') + hash_timestamps_to_include.append(str(hash(stat))) + timestamps_to_include.append(stat) + act_time_map[act] = str(hash(stat)) + + '''So far, we have created nodes for each timeline. Each node gets a unique value of the readable statistics + a dictionary (act_time_map) is created having keys as activity and value as the hash of the stat (human readable time). + There exists another dictionary (timestamp_hash) that has the hash value of the stat as key and an empty list as the value. + In the next step, we fill this empty list by those activities that are repeated having the same roudned time value. + The goal is to have a dictionary having the timestamps as keys and a list of activities as values. + ''' + + time_act_dict = {} + for key, value in act_time_map.items(): + if value in time_act_dict: + time_act_dict[value].append(key) + else: + time_act_dict[value] = [ key ] + + + ''' calculate how long each edge should be to make the edges proportional alomg the timeilne axis..''' + minlen_list = [] + + minlen_aux =[] + [minlen_aux.append(item) for item in timestamps_to_include if item not in minlen_aux] + + for i, t in enumerate(minlen_aux[:-1]): + int1 = int(re.search(r'\d+', minlen_aux[i]).group()) + int2 = int(re.search(r'\d+', minlen_aux[i+1]).group()) + minlen = int2 - int1 + if(minlen<1): + minlen = 1 + minlen_list.append(minlen) + + + #create edges for the timeline + edges_in_timeline = [] + for i, t in enumerate(hash_timestamps_to_include[:-1]): + minlen = str(minlen_list[i]) + edge = (t, hash_timestamps_to_include[i+1]) + edges_in_timeline.append(edge) + viz.edge(edge[0],edge[1], minlen=minlen) + + + '''Now we have the values that need to go on timeline and we have what activities are supposed to be aligned with what timestamp. + Next step is calculating how long each edge should be to make the edges proportional along the timeilne axis..''' + + activities_map = {} + + #nodes get defined here + for act in activities_to_include: + if "frequency" in measure and act in activities_count_int: + viz.node(str(hash(act)), act + " (" + str(activities_count_int[act]) + ")", style='filled', + fillcolor=activities_color[act], fontsize=font_size) + activities_map[act] = str(hash(act)) + else: + stat_string = human_readable_stat(soj_time[act], stat_locale) + viz.node(str(hash(act)), act + f" ({stat_string})", fontsize=font_size) + activities_map[act] = str(hash(act)) + + # make edges addition always in the same order + dfg_edges = sorted(list(dfg.keys())) + + # represent edges + for edge in dfg_edges: + if "frequency" in measure: + label = str(dfg[edge]) + else: + label = human_readable_stat(dfg[edge], stat_locale) + viz.edge(str(hash(edge[0])), str(hash(edge[1])), label=label, penwidth=str(penwidth[edge]), fontsize=font_size) + + start_activities_to_include = [act for act in start_activities if act in activities_map] + end_activities_to_include = [act for act in end_activities if act in activities_map] + + if start_activities_to_include: + viz.node("@@startnode", "<●>", shape='circle', fontsize="34") + for act in start_activities_to_include: + label = str(start_activities[act]) if isinstance(start_activities, dict) else "" + viz.edge("@@startnode", activities_map[act], label=label, fontsize=font_size) + + if end_activities_to_include: + viz.node("@@endnode", "<■>", shape='doublecircle', fontsize="32") + for act in end_activities_to_include: + label = str(end_activities[act]) if isinstance(end_activities, dict) else "" + viz.edge(activities_map[act], "@@endnode", label=label, fontsize=font_size) + + + '''Next, we create subgraphs & include those nodes which are to be aligned on the same rank. + Here, we include one node from the timeline axis and 1 or more nodes from the DFG. + We use the information of what activities are supposed to go on same level from + previous caluclation (i.e. we use time_Act_dict) + + We merge the dictiomaries of act_time_map with activities_map to ensure the alignment is + done on the activity node referencing to the same object.''' + + from collections import defaultdict + dd = defaultdict(list) + + for d in (activities_map, act_time_map): # you can list as many input dicts as you want here + for key, value in d.items(): + dd[key].append(value) + + + for hash_time in hash_timestamps_to_include: + s = Digraph(str(hash_time)) + s.attr(rank='same') + s.node(hash_time) + for values in time_act_dict[hash_time]: + s.node(dd[values][0]) + try: + s.node(dd[values][1]) + except IndexError: + warnings.warn(f"Data alignment issue: '{values}' does not have a corresponding timestamp or second element. Ensure each activity is properly matched with a timestamp.") + except Exception as e: + warnings.warn(f"Unexpected error for '{values}': {e}") + + + viz.subgraph(s) + + viz.attr(overlap='true') + viz.format = image_format + return viz + + +def apply(dfg: Dict[Tuple[str, str], int], dfg_time : Dict, log: EventLog = None, parameters: Optional[Dict[Any, Any]] = None, activities_count : Dict[str, int] = None, soj_time: Dict[str, float] = None) -> Digraph: + + if parameters is None: + parameters = {} + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + max_no_of_edges_in_diagram = exec_utils.get_param_value(Parameters.MAX_NO_EDGES_IN_DIAGRAM, parameters, 100000) + start_activities = exec_utils.get_param_value(Parameters.START_ACTIVITIES, parameters, {}) + end_activities = exec_utils.get_param_value(Parameters.END_ACTIVITIES, parameters, {}) + font_size = exec_utils.get_param_value(Parameters.FONT_SIZE, parameters, 12) + font_size = str(font_size) + activities = dfg_utils.get_activities_from_dfg(dfg) + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + stat_locale = exec_utils.get_param_value(Parameters.STAT_LOCALE, parameters, {}) + if activities_count is None: + if log is not None: + activities_count = attr_get.get_attribute_values(log, activity_key, parameters=parameters) + else: + activities_count = Counter({key: 0 for key in activities}) + for el in dfg: + activities_count[el[1]] += dfg[el] + if isinstance(start_activities, dict): + for act in start_activities: + activities_count[act] += start_activities[act] + + + return graphviz_visualization(activities_count, dfg, dfg_time, image_format=image_format, measure="frequency", + max_no_of_edges_in_diagram=max_no_of_edges_in_diagram, + start_activities=start_activities, end_activities=end_activities, + font_size=font_size, bgcolor=bgcolor, stat_locale=stat_locale) diff --git a/pm4py/pm4py/visualization/dfg/visualizer.py b/pm4py/pm4py/visualization/dfg/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..09e67e9ffa6f3a79d4ee85ded15e3f6ac93fb587 --- /dev/null +++ b/pm4py/pm4py/visualization/dfg/visualizer.py @@ -0,0 +1,105 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.visualization.dfg.variants import frequency, performance, cost +from enum import Enum +from pm4py.util import exec_utils +from copy import deepcopy +from pm4py.visualization.common.gview import serialize, serialize_dot +from typing import Optional, Dict, Any, Tuple +import graphviz +from pm4py.objects.log.obj import EventLog + + +class Variants(Enum): + FREQUENCY = frequency + PERFORMANCE = performance + COST = cost + + +DEFAULT_VARIANT = Variants.FREQUENCY + + +def apply(dfg0: Dict[Tuple[str, str], float], log: EventLog = None, activities_count : Dict[str, int] = None, serv_time: Dict[str, float] = None, parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> graphviz.Digraph: + """ + Visualize a frequency/performance directly-follows graph + + Parameters + ----------------- + dfg0 + Directly-follows graph + log + (if provided) Event log for the calculation of statistics + activities_count + (if provided) Dictionary associating to each activity the number of occurrences in the log. + serv_time + (if provided) Dictionary associating to each activity the average service time + parameters + Variant-specific parameters + variant + Variant: + - Frequency DFG representation + - Performance DFG representation + + Returns + ----------------- + gviz + Graphviz digraph + """ + dfg = deepcopy(dfg0) + return exec_utils.get_variant(variant).apply(dfg, log=log, activities_count=activities_count, serv_time=serv_time, parameters=parameters) + + +def save(gviz, output_file_path, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/dotted_chart/__init__.py b/pm4py/pm4py/visualization/dotted_chart/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..63c018e36e40febc54f2a9bc2bca45781af98310 --- /dev/null +++ b/pm4py/pm4py/visualization/dotted_chart/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.dotted_chart import visualizer, variants diff --git a/pm4py/pm4py/visualization/dotted_chart/variants/__init__.py b/pm4py/pm4py/visualization/dotted_chart/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..955e0cd619beb61dddb2163bf11953f7178b37b8 --- /dev/null +++ b/pm4py/pm4py/visualization/dotted_chart/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.dotted_chart.variants import classic diff --git a/pm4py/pm4py/visualization/dotted_chart/variants/classic.py b/pm4py/pm4py/visualization/dotted_chart/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..8faeffaa885b56d66897facbde471956f0484911 --- /dev/null +++ b/pm4py/pm4py/visualization/dotted_chart/variants/classic.py @@ -0,0 +1,231 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import datetime +import os +import tempfile +import uuid +from enum import Enum +from random import randint +from typing import List, Any, Tuple, Dict, Optional, Union + +from pm4py.util import exec_utils + + +class Parameters(Enum): + FORMAT = "format" + DOT_SIZE = "dot_size" + LAYOUT_EXT_MULTIPLIER = "layout_ext_multiplier" + SHOW_LEGEND = "show_legend" + + +def __build_unique_values(points_list: List[Any]) -> List[Any]: + """ + Finds the unique values among the attribute values + + Parameters + ---------------- + points_list + Points list + + Returns + ---------------- + list_unq_values + List of unique values for each attribute + """ + unique_values = [] + for i in range(len(points_list[0])): + unique_values.append(set()) + for j in range(len(points_list)): + unique_values[-1].add(points_list[j][i]) + unique_values[-1] = sorted(list(unique_values[-1])) + return unique_values + + +def __build_corr_dict(unique_values: List[Any]) -> Tuple[List[Any], List[str]]: + """ + Builds the correspondence between unique values and positions in the graph + + Parameters + ---------------- + unique_values + List of unique values for each attribute + + Returns + ---------------- + corr_dict + Correspondence between unique values and positions + attr_type + A list containing the attribute type for each attribute + """ + corr_dict = [] + attr_type = [] + for i in range(len(unique_values)): + corr_dict.append({}) + if isinstance(unique_values[i][0], datetime.datetime): + min_t = unique_values[i][0].timestamp() + max_t = unique_values[i][-1].timestamp() + for idx, v in enumerate(unique_values[i]): + corr_dict[-1][v] = 1.0 / len(unique_values[i]) + (len(unique_values[i]) - 1) / len(unique_values[i]) * ( + v.timestamp() - min_t) / (max_t - min_t + 0.00001) + attr_type.append("date") + elif isinstance(unique_values[i][0], float) or isinstance(unique_values[i][0], int): + min_t = unique_values[i][0] + max_t = unique_values[i][-1] + for idx, v in enumerate(unique_values[i]): + corr_dict[-1][v] = 1.0 / len(unique_values[i]) + (len(unique_values[i]) - 1) / len(unique_values[i]) * ( + v - min_t) / (max_t - min_t + 0.00001) + attr_type.append("number") + else: + for idx, v in enumerate(unique_values[i]): + corr_dict[-1][v] = float(idx + 1) / float(len(unique_values[i]) + 1) + attr_type.append("str") + return corr_dict, attr_type + + +def __build_color_dict(third_values: List[Any]) -> Dict[Any, str]: + """ + Builds the color map for the values of the third attribute + + Parameters + --------------- + third_values + Unique values of the third attribute + + Returns + --------------- + cmap + Color map + """ + color_dict = {} + for v in third_values: + color_dict[v] = '#%06X' % randint(0, 0xFFFFFF) + return color_dict + + +def apply(points_list: List[Any], attributes: List[str], parameters: Optional[Dict[Union[str, Parameters], Any]] = None): + """ + Creates the dotted chart with the event stream and the provided attributes + + Parameters + --------------- + points_list + List of points (event stream) + attributes + List of attributes that should be included in the dotted chart + parameters + Parameters of the visualization, including: + - Parameters.FORMAT => the format of the visualization (svg, png, ...) + - Parameters.DOT_SIZE => the size of the dot in the dotted chart + + Returns + --------------- + file_path + Path to the dotted chart visualization + """ + if parameters is None: + parameters = {} + + if attributes is None or len(attributes) < 2: + raise Exception("dotted chart requires the specification of at least two attributes") + elif len(attributes) > 3: + raise Exception("dotted chart requires the specification of at most three attributes") + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + dot_size = exec_utils.get_param_value(Parameters.DOT_SIZE, parameters, 0.07) + layout_ext_multiplier = exec_utils.get_param_value(Parameters.LAYOUT_EXT_MULTIPLIER, parameters, 50) + show_legend = exec_utils.get_param_value(Parameters.SHOW_LEGEND, parameters, True) + + unique_values = __build_unique_values(points_list) + corr_dict, attr_type = __build_corr_dict(unique_values) + color_dict = __build_color_dict(unique_values[2]) if len(attributes) == 3 else None + + x_length = 10 + y_length = 10 + if attr_type[0] == "str": + x_length = max(x_length, len(unique_values[0]) * 1.8) + if attr_type[1] == "str": + y_length = max(y_length, len(unique_values[1]) * 0.75) + + x_length *= layout_ext_multiplier + y_length *= layout_ext_multiplier + + output_file_gv = tempfile.NamedTemporaryFile(suffix=".gv") + output_file_gv.close() + output_file_img = tempfile.NamedTemporaryFile(suffix="." + format) + output_file_img.close() + + lines = ["graph G {"] + lines.append("origin [label=\"\", shape=none, width=\"0px\", height=\"0px\", pos=\"0,0!\"];") + lines.append("rightX [label=\"\", shape=none, width=\"0px\", height=\"0px\", pos=\"%d,0!\"];" % (x_length)) + lines.append("topY [label=\"\", shape=none, width=\"0px\", height=\"0px\", pos=\"0,%d!\"];" % (y_length)) + lines.append("rightXlabel [label=\"%s\", shape=none, width=\"0px\", height=\"0px\", pos=\"%d,0!\"];" % ( + attributes[0], x_length + 1.5)) + lines.append("topYlabel [label=\"%s\", shape=none, width=\"0px\", height=\"0px\", pos=\"0,%d!\"];" % ( + attributes[1], y_length + 1.0)) + lines.append("origin -- rightX [ color=\"black\" ];") + lines.append("origin -- topY [ color=\"black\" ];") + + if attr_type[0] == "str": + for k, v in corr_dict[0].items(): + n_id = "n" + str(uuid.uuid4()).replace("-", "") + "e" + lines.append( + "%s [label=\"%s\", shape=none, width=\"0px\", height=\"0px\", pos=\"%.10f,0!\", fontsize=\"6pt\"];" % ( + n_id, str(k), v * x_length)) + + if attr_type[1] == "str": + for k, v in corr_dict[1].items(): + n_id = "n" + str(uuid.uuid4()).replace("-", "") + "e" + lines.append( + "%s [label=\"%s\", shape=none, width=\"0px\", height=\"0px\", pos=\"0,%.10f!\", fontsize=\"6pt\"];" % ( + n_id, str(k), v * y_length)) + + for p in points_list: + coord_x = corr_dict[0][p[0]] + coord_y = corr_dict[1][p[1]] + color = color_dict[p[2]] if color_dict is not None else "blue" + n_id = "n" + str(uuid.uuid4()).replace("-", "") + "e" + lines.append( + "%s [label=\"\", shape=circle, width=\"%.10fpx\", height=\"%.10fpx\", pos=\"%.10f,%.10f!\", fontsize=\"6pt\", style=\"filled\", fillcolor=\"%s\", penwidth=0];" % ( + n_id, dot_size, dot_size, coord_x * x_length, coord_y * y_length, color)) + + if color_dict is not None and show_legend: + lines.append( + "Legend [label=\"legend (attribute: %s)\", shape=none, width=\"0px\", height=\"0px\", pos=\"0,-%d!\"]" % ( + attributes[2], 1*layout_ext_multiplier)) + row = -1 + for k, v in color_dict.items(): + row -= 1 + n_id = "n" + str(uuid.uuid4()).replace("-", "") + "e" + lines.append( + "%s [label=\"\", shape=circle, width=\"%.10fpx\", height=\"%.10fpx\", fontsize=\"6pt\", style=\"filled\", fillcolor=\"%s\", pos=\"0,%d!\"]" % ( + n_id, dot_size, dot_size, v, layout_ext_multiplier*row)) + n_id = "n" + str(uuid.uuid4()).replace("-", "") + "e" + lines.append( + "%s [label=\"%s\", shape=none, width=\"0px\", height=\"0px\", pos=\"1.5,%d!\", fontsize=\"9pt\"];" % ( + n_id, str(k), layout_ext_multiplier*row)) + + lines.append("}") + + lines = "\n".join(lines) + + F = open(output_file_gv.name, "w") + F.write(lines) + F.close() + + os.system("neato -n1 -T" + format + " " + output_file_gv.name + " > " + output_file_img.name) + + return output_file_img.name diff --git a/pm4py/pm4py/visualization/dotted_chart/visualizer.py b/pm4py/pm4py/visualization/dotted_chart/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..b93e9577c5173d17f707afe688c7f90b18b61d30 --- /dev/null +++ b/pm4py/pm4py/visualization/dotted_chart/visualizer.py @@ -0,0 +1,135 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import shutil +from enum import Enum +from typing import List, Any, Dict, Optional, Union + +import pandas as pd + +from pm4py.objects.conversion.log import converter as log_converter +from pm4py.objects.log.obj import EventLog +from pm4py.util import exec_utils, vis_utils +from pm4py.visualization.dotted_chart.variants import classic +from pm4py.util import constants, pandas_utils + + +class Variants(Enum): + CLASSIC = classic + + +def apply(log_obj: Union[pd.DataFrame, EventLog], attributes: List[str], variant=Variants.CLASSIC, + parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Creates the dotted chart with the log objects and the provided attributes + + Parameters + --------------- + log_obj + Log object + attributes + List of attributes that should be included in the dotted chart + parameters + Variant-specific parameters + + Returns + --------------- + file_path + Path to the dotted chart visualization + """ + if parameters is None: + parameters = {} + + if pandas_utils.check_is_pandas_dataframe(log_obj): + log_obj = log_obj[list(set(attributes))] + + parameters["deepcopy"] = False + stream = log_converter.apply(log_obj, variant=log_converter.Variants.TO_EVENT_STREAM, parameters=parameters) + stream = [tuple(y[a] for a in attributes) for y in stream] + + return exec_utils.get_variant(variant).apply(stream, attributes, parameters=parameters) + + +def view(figure: str): + """ + Views the dotted chart on the screen + + Parameters + --------------- + figure + Path to the dotted chart + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + if constants.DEFAULT_GVIZ_VIEW == "matplotlib_view": + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + img = mpimg.imread(figure) + plt.axis('off') + plt.tight_layout(pad=0, w_pad=0, h_pad=0) + plt.imshow(img) + plt.show() + return + + if vis_utils.check_visualization_inside_jupyter(): + vis_utils.view_image_in_jupyter(figure) + else: + vis_utils.open_opsystem_image_viewer(figure) + + +def save(figure: str, output_file_path: str): + """ + Saves the dotted chart to a specified path + + Parameters + ---------------- + figure + Current path to the dotted chart + output_file_path + Destination path + """ + shutil.copyfile(figure, output_file_path) + return "" + + +def serialize(figure: str): + """ + Performs the serialization of the dotted chart visualization + + Parameters + ----------------- + figure + Current path to the dotted chart + """ + with open(figure, "rb") as f: + return f.read() + + +def matplotlib_view(figure: str): + """ + Views the dotted chart on the screen using Matplotlib + + Parameters + --------------- + figure + Path to the dotted chart + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + + img = mpimg.imread(figure) + plt.imshow(img) + plt.show() diff --git a/pm4py/pm4py/visualization/footprints/__init__.py b/pm4py/pm4py/visualization/footprints/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b78c8601c443833c512c07cc80dd7235d88ac7e5 --- /dev/null +++ b/pm4py/pm4py/visualization/footprints/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.footprints import variants, visualizer diff --git a/pm4py/pm4py/visualization/footprints/variants/__init__.py b/pm4py/pm4py/visualization/footprints/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..14d79fbfe58a264ec605627d44316aeae946e47f --- /dev/null +++ b/pm4py/pm4py/visualization/footprints/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.footprints.variants import comparison, single, comparison_symmetric diff --git a/pm4py/pm4py/visualization/footprints/variants/comparison.py b/pm4py/pm4py/visualization/footprints/variants/comparison.py new file mode 100644 index 0000000000000000000000000000000000000000..f0afffc9cc77263aa182e99d4edb3afe5d4764a5 --- /dev/null +++ b/pm4py/pm4py/visualization/footprints/variants/comparison.py @@ -0,0 +1,109 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Source +import tempfile +from pm4py.util import exec_utils +from enum import Enum +from typing import Optional, Dict, Any, Union + + +class Parameters(Enum): + FORMAT = "format" + + +XOR_SYMBOL = "#" +PREV_SYMBOL = "<" +SEQUENCE_SYMBOL = ">" +PARALLEL_SYMBOL = "||" + + +def apply(fp1: Dict[str, Any], fp2: Dict[str, Any], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Source: + """ + Visualize a comparison between two footprint tables + + Parameters + --------------- + fp1 + Footprints associated to the log (NOT a list) + fp2 + Footprints associated to the model + parameters + Parameters of the algorithm, including: + - Parameters.FORMAT => Format of the visualization + + Returns + --------------- + gviz + Graphviz object + """ + if parameters is None: + parameters = {} + + if type(fp1) is list or type(fp2) is list: + raise Exception("footprints visualizer does not work on list of footprints!") + + activities = sorted(list(set(x[0] for x in fp1["sequence"]).union(set(x[1] for x in fp1["sequence"])).union( + set(x[0] for x in fp1["parallel"])).union(set(x[1] for x in fp1["parallel"])))) + fp_table = {} + + for a1 in activities: + fp_table[a1] = {} + for a2 in activities: + fp_table[a1][a2] = ("black", XOR_SYMBOL) + + for x in fp1["sequence"]: + if x not in fp1["parallel"]: + if x in fp2["sequence"]: + fp_table[x[0]][x[1]] = ("black", SEQUENCE_SYMBOL) + fp_table[x[1]][x[0]] = ("black", PREV_SYMBOL) + else: + fp_table[x[0]][x[1]] = ("red", SEQUENCE_SYMBOL) + fp_table[x[1]][x[0]] = ("red", PREV_SYMBOL) + for x in fp1["parallel"]: + if x in fp2["parallel"]: + fp_table[x[0]][x[1]] = ("black", PARALLEL_SYMBOL) + else: + fp_table[x[0]][x[1]] = ("red", PARALLEL_SYMBOL) + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + footprints_table = ["digraph {\n", "tbl [\n", "shape=plaintext\n", "label=<\n"] + footprints_table.append("\n") + + footprints_table.append("") + for act in activities: + footprints_table.append("") + footprints_table.append("\n") + for a1 in activities: + footprints_table.append("") + for a2 in activities: + footprints_table.append("") + footprints_table.append("\n") + + footprints_table.append("
"+act+"
"+a1+""+fp_table[a1][a2][1]+"
\n") + footprints_table.append(">];\n") + footprints_table.append("}\n") + + footprints_table = "".join(footprints_table) + + gviz = Source(footprints_table, filename=filename.name) + gviz.format = image_format + + return gviz diff --git a/pm4py/pm4py/visualization/footprints/variants/comparison_symmetric.py b/pm4py/pm4py/visualization/footprints/variants/comparison_symmetric.py new file mode 100644 index 0000000000000000000000000000000000000000..4391681d3dcf8847763570375eba546680199da5 --- /dev/null +++ b/pm4py/pm4py/visualization/footprints/variants/comparison_symmetric.py @@ -0,0 +1,119 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Source +import tempfile +from pm4py.util import exec_utils +from enum import Enum +from typing import Optional, Dict, Any, Union + + +class Parameters(Enum): + FORMAT = "format" + + +UNKNOWN_SYMBOL = "?" +XOR_SYMBOL = "#" +PREV_SYMBOL = "<" +SEQUENCE_SYMBOL = ">" +PARALLEL_SYMBOL = "||" + + +def apply(fp1: Dict[str, Any], fp2: Dict[str, Any], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Source: + """ + Visualize a comparison between two footprint tables + + Parameters + --------------- + fp1 + Footprints associated to the log (NOT a list) + fp2 + Footprints associated to the model + parameters + Parameters of the algorithm, including: + - Parameters.FORMAT => Format of the visualization + + Returns + --------------- + gviz + Graphviz object + """ + if parameters is None: + parameters = {} + + if type(fp1) is list or type(fp2) is list: + raise Exception("footprints visualizer does not work on list of footprints!") + + activities1 = sorted(list(set(x[0] for x in fp1["sequence"]).union(set(x[1] for x in fp1["sequence"])).union( + set(x[0] for x in fp1["parallel"])).union(set(x[1] for x in fp1["parallel"])))) + activities2 = sorted(list(set(x[0] for x in fp2["sequence"]).union(set(x[1] for x in fp2["sequence"])).union( + set(x[0] for x in fp2["parallel"])).union(set(x[1] for x in fp2["parallel"])))) + activities = sorted(list(set(activities1).union(set(activities2)))) + fp_table = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + footprints_table = ["digraph {\n", "tbl [\n", "shape=plaintext\n", "label=<\n"] + footprints_table.append("\n") + + footprints_table.append("") + for act in activities: + footprints_table.append("") + footprints_table.append("\n") + + for a1 in activities: + footprints_table.append("") + for a2 in activities: + symb_1 = "?" + symb_2 = "?" + + if a1 in activities1 and a2 in activities1: + symb_1 = XOR_SYMBOL + if (a1, a2) in fp1["parallel"]: + symb_1 = PARALLEL_SYMBOL + elif (a1, a2) in fp1["sequence"]: + symb_1 = SEQUENCE_SYMBOL + elif (a2, a1) in fp1["sequence"]: + symb_1 = PREV_SYMBOL + + if a1 in activities2 and a2 in activities2: + symb_2 = XOR_SYMBOL + if (a1, a2) in fp2["parallel"]: + symb_2 = PARALLEL_SYMBOL + elif (a1, a2) in fp2["sequence"]: + symb_2 = SEQUENCE_SYMBOL + elif (a2, a1) in fp2["sequence"]: + symb_2 = PREV_SYMBOL + + if symb_1 == symb_2: + footprints_table.append("") + else: + footprints_table.append("") + footprints_table.append("\n") + + footprints_table.append("
"+act+"
"+a1+""+symb_1+""+symb_1+"  "+symb_2+"
\n") + footprints_table.append(">];\n") + footprints_table.append("}\n") + + footprints_table = "".join(footprints_table) + + gviz = Source(footprints_table, filename=filename.name) + gviz.format = image_format + + return gviz diff --git a/pm4py/pm4py/visualization/footprints/variants/single.py b/pm4py/pm4py/visualization/footprints/variants/single.py new file mode 100644 index 0000000000000000000000000000000000000000..c7285e2744f6e66b51c36c82f6082f9ef4692077 --- /dev/null +++ b/pm4py/pm4py/visualization/footprints/variants/single.py @@ -0,0 +1,100 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Source +import tempfile +from pm4py.util import exec_utils +from enum import Enum +from typing import Optional, Dict, Any, Union + + +class Parameters(Enum): + FORMAT = "format" + + +XOR_SYMBOL = "#" +PREV_SYMBOL = "<" +SEQUENCE_SYMBOL = ">" +PARALLEL_SYMBOL = "||" + + +def apply(fp: Dict[str, Any], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Source: + """ + Visualize a footprints table + + Parameters + --------------- + fp + Footprints + parameters + Parameters of the algorithm, including: + - Parameters.FORMAT => Format of the visualization + + Returns + --------------- + gviz + Graphviz object + """ + if parameters is None: + parameters = {} + + if type(fp) is list: + raise Exception("footprints visualizer does not work on list of footprints!") + + activities = sorted(list(set(x[0] for x in fp["sequence"]).union(set(x[1] for x in fp["sequence"])).union( + set(x[0] for x in fp["parallel"])).union(set(x[1] for x in fp["parallel"])))) + fp_table = {} + + for a1 in activities: + fp_table[a1] = {} + for a2 in activities: + fp_table[a1][a2] = XOR_SYMBOL + + for x in fp["sequence"]: + if x not in fp["parallel"]: + fp_table[x[0]][x[1]] = SEQUENCE_SYMBOL + fp_table[x[1]][x[0]] = PREV_SYMBOL + + for x in fp["parallel"]: + fp_table[x[0]][x[1]] = PARALLEL_SYMBOL + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + footprints_table = ["digraph {\n", "tbl [\n", "shape=plaintext\n", "label=<\n"] + footprints_table.append("\n") + footprints_table.append("") + for act in activities: + footprints_table.append("") + footprints_table.append("\n") + for a1 in activities: + footprints_table.append("") + for a2 in activities: + footprints_table.append("") + footprints_table.append("\n") + + footprints_table.append("
"+act+"
"+a1+""+fp_table[a1][a2]+"
\n") + footprints_table.append(">];\n") + footprints_table.append("}\n") + + footprints_table = "".join(footprints_table) + + gviz = Source(footprints_table, filename=filename.name) + gviz.format = image_format + + return gviz diff --git a/pm4py/pm4py/visualization/footprints/visualizer.py b/pm4py/pm4py/visualization/footprints/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..f0d4739c291552da1c690ec80daeab371eec7271 --- /dev/null +++ b/pm4py/pm4py/visualization/footprints/visualizer.py @@ -0,0 +1,107 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.footprints.variants import comparison, single, comparison_symmetric +from enum import Enum +from pm4py.util import exec_utils, constants +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.visualization.common.gview import serialize, serialize_dot +import graphviz +from typing import Optional, Dict, Any + + +class Variants(Enum): + COMPARISON = comparison + SINGLE = single + COMPARISON_SYMMETRIC = comparison_symmetric + + +def apply(*args, variant=None, parameters: Optional[Dict[Any, Any]] = None) -> graphviz.Source: + """ + Visualize a footprints table or a comparison between footprints + tables + + Parameters + --------------- + args + Arguments: + - A single footprint table + - Two footprints table (first one associated to the log, second + one associated to the model) + parameters + Parameters of the algorithm, including: + - Parameters.FORMAT => Format of the visualization + + Returns + --------------- + gviz + Graphviz object + """ + if parameters is None: + parameters = {} + + if variant is None: + if len(args) == 1: + variant = Variants.SINGLE + else: + variant = Variants.COMPARISON + + if variant in [Variants.SINGLE]: + return exec_utils.get_variant(variant).apply(args[0], parameters=parameters) + elif variant in [Variants.COMPARISON, Variants.COMPARISON_SYMMETRIC]: + return exec_utils.get_variant(variant).apply(args[0], args[1], parameters=parameters) + + +def save(gviz, output_file_path, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/graphs/__init__.py b/pm4py/pm4py/visualization/graphs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e739829e7e32c66cdb763c779be551255136df3c --- /dev/null +++ b/pm4py/pm4py/visualization/graphs/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.graphs import visualizer, util, variants diff --git a/pm4py/pm4py/visualization/graphs/util/__init__.py b/pm4py/pm4py/visualization/graphs/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d8ac7da4f7901f95a939fa17b825322409838530 --- /dev/null +++ b/pm4py/pm4py/visualization/graphs/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.graphs.util import common diff --git a/pm4py/pm4py/visualization/graphs/util/common.py b/pm4py/pm4py/visualization/graphs/util/common.py new file mode 100644 index 0000000000000000000000000000000000000000..834590a39aa1461217457b3eae67dc86871f3c0f --- /dev/null +++ b/pm4py/pm4py/visualization/graphs/util/common.py @@ -0,0 +1,109 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import shutil +import tempfile + +from pm4py.util import vis_utils, constants + + +def get_temp_file_name(format): + """ + Gets a temporary file name for the image + + Parameters + ------------ + format + Format of the target image + """ + filename = tempfile.NamedTemporaryFile(suffix='.' + format) + + name = filename.name + + filename.close() + + return name + + +def save(temp_file_name, target_path): + """ + Saves the temporary image associated to the graph to the specified path + + Parameters + -------------- + temp_file_name + Path to the temporary file hosting the graph + target_path + Path where the image shall eventually be saved + """ + shutil.copyfile(temp_file_name, target_path) + return "" + + +def view(temp_file_name): + """ + View the graph + + Parameters + ------------ + temp_file_name + Path to the temporary file hosting the graph + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + if constants.DEFAULT_GVIZ_VIEW == "matplotlib_view": + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + img = mpimg.imread(temp_file_name) + plt.axis('off') + plt.tight_layout(pad=0, w_pad=0, h_pad=0) + plt.imshow(img) + plt.show() + return + if vis_utils.check_visualization_inside_jupyter(): + vis_utils.view_image_in_jupyter(temp_file_name) + else: + vis_utils.open_opsystem_image_viewer(temp_file_name) + + +def matplotlib_view(temp_file_name): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + temp_file_name + Path to the temporary file hosting the graph + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + + img = mpimg.imread(temp_file_name) + plt.imshow(img) + plt.show() + + +def serialize(temp_file_name: str) -> bytes: + """ + Serializes the graph + + Parameters + ------------ + temp_file_name + Path to the temporary file hosting the graph + """ + with open(temp_file_name, "rb") as f: + return f.read() diff --git a/pm4py/pm4py/visualization/graphs/variants/__init__.py b/pm4py/pm4py/visualization/graphs/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7fdcad1f4d5cc505fc9c6d099ca2866f60c5b87b --- /dev/null +++ b/pm4py/pm4py/visualization/graphs/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.graphs.variants import cases, attributes, dates, barplot diff --git a/pm4py/pm4py/visualization/graphs/variants/attributes.py b/pm4py/pm4py/visualization/graphs/variants/attributes.py new file mode 100644 index 0000000000000000000000000000000000000000..896d239c88f576ac48d68ed5a8d9d789e6adb6f3 --- /dev/null +++ b/pm4py/pm4py/visualization/graphs/variants/attributes.py @@ -0,0 +1,133 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import matplotlib +from copy import copy + +from pm4py.visualization.graphs.util import common +from pm4py.util import exec_utils, constants +from enum import Enum +from typing import Optional, Dict, Any, Union, List + + +class Parameters(Enum): + TITLE = "title" + FORMAT = "format" + X_AXIS = "x_axis" + Y_AXIS = "y_axis" + PYPLOT_PLOT_KWARGS = "pylot_plot_kwargs" + TRANSPARENT = "transparent" + + +ATTRIBUTE_LABEL = "Attribute value" +DENSITY_LABEL = "Density" +GRAPH_DEFAULT_TITLE = "Attribute Distribution" + + +def apply_plot(x: List[float], y: List[float], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> str: + """ + Plot (non-logarithmic way) the graph with axis values contained in x and y + + Parameters + ------------ + x + Values for x-axis + y + Values for y-axis + parameters + Parameters of the algorithm, including: + Parameters.FORMAT -> Format of the target image + Parameters.TITLE -> Title of the image + + Returns + ------------ + temp_file_name + Representation temporary file name + """ + if parameters is None: + parameters = {} + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + title = exec_utils.get_param_value(Parameters.TITLE, parameters, GRAPH_DEFAULT_TITLE) + x_axis = exec_utils.get_param_value(Parameters.X_AXIS, parameters, ATTRIBUTE_LABEL) + y_axis = exec_utils.get_param_value(Parameters.Y_AXIS, parameters, DENSITY_LABEL) + pyplot_plot_kwargs = exec_utils.get_param_value(Parameters.PYPLOT_PLOT_KWARGS, parameters, {}) + is_transp = exec_utils.get_param_value(Parameters.TRANSPARENT, parameters, True if constants.DEFAULT_BGCOLOR == "transparent" else False) + + filename = common.get_temp_file_name(format) + + current_backend = copy(matplotlib.get_backend()) + matplotlib.use('Agg') + from matplotlib import pyplot + + pyplot.clf() + pyplot.plot(x, y, **pyplot_plot_kwargs) + pyplot.xlabel(x_axis) + pyplot.ylabel(y_axis) + pyplot.savefig(filename, bbox_inches="tight", transparent=is_transp) + pyplot.title(title) + pyplot.clf() + + matplotlib.use(current_backend) + + return filename + + +def apply_semilogx(x: List[float], y: List[float], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> str: + """ + Plot (semi-logarithmic way) the graph with axis values contained in x and y + + Parameters + ------------ + x + Values for x-axis + y + Values for y-axis + parameters + Parameters of the algorithm, including: + Parameters.FORMAT -> Format of the target image + Parameters.TITLE -> Title of the image + + Returns + ------------ + temp_file_name + Representation temporary file name + """ + if parameters is None: + parameters = {} + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + title = exec_utils.get_param_value(Parameters.TITLE, parameters, GRAPH_DEFAULT_TITLE) + pyplot_plot_kwargs = exec_utils.get_param_value(Parameters.PYPLOT_PLOT_KWARGS, parameters, {}) + is_transp = exec_utils.get_param_value(Parameters.TRANSPARENT, parameters, True if constants.DEFAULT_BGCOLOR == "transparent" else False) + + filename = common.get_temp_file_name(format) + + current_backend = copy(matplotlib.get_backend()) + matplotlib.use('Agg') + from matplotlib import pyplot + + pyplot.clf() + pyplot.semilogx(x, y, **pyplot_plot_kwargs) + pyplot.xlabel(ATTRIBUTE_LABEL) + pyplot.ylabel(DENSITY_LABEL) + pyplot.savefig(filename, bbox_inches="tight", transparent=is_transp) + pyplot.title(title) + pyplot.clf() + + matplotlib.use(current_backend) + + return filename diff --git a/pm4py/pm4py/visualization/graphs/variants/barplot.py b/pm4py/pm4py/visualization/graphs/variants/barplot.py new file mode 100644 index 0000000000000000000000000000000000000000..a51b764c179048a1d6fc68662152b29fc6eb857d --- /dev/null +++ b/pm4py/pm4py/visualization/graphs/variants/barplot.py @@ -0,0 +1,83 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from copy import copy +from enum import Enum + +import matplotlib + +from pm4py.util import exec_utils, constants +from pm4py.visualization.graphs.util import common +from typing import Optional, Dict, Any, Union, List + + +class Parameters(Enum): + TITLE = "title" + FORMAT = "format" + X_AXIS = "x_axis" + Y_AXIS = "y_axis" + PYPLOT_FIGURE_KWARGS = "pylot_figure_kwargs" + TRANSPARENT = "transparent" + + +def apply_plot(x: List[float], y: List[float], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> str: + """ + Visualizes a barchar provided its x-axis and y-axis points + + Parameters + ----------------- + x + X-axis points + y + Y-axis points + parameters + Parameters + + Returns + ----------------- + tmp_file_name + Temporary file name + """ + if parameters is None: + parameters = {} + + title = exec_utils.get_param_value(Parameters.TITLE, parameters, "") + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + x_axis = exec_utils.get_param_value(Parameters.X_AXIS, parameters, "") + y_axis = exec_utils.get_param_value(Parameters.Y_AXIS, parameters, "") + pyplot_figure_kwargs = exec_utils.get_param_value(Parameters.PYPLOT_FIGURE_KWARGS, parameters, {}) + is_transp = exec_utils.get_param_value(Parameters.TRANSPARENT, parameters, True if constants.DEFAULT_BGCOLOR == "transparent" else False) + + filename = common.get_temp_file_name(format) + + current_backend = copy(matplotlib.get_backend()) + matplotlib.use('Agg') + from matplotlib import pyplot + + pyplot.clf() + fig = pyplot.figure(**pyplot_figure_kwargs) + ax = fig.add_axes([0, 0, 1, 1]) + ax.bar(x, y) + pyplot.xlabel(x_axis) + pyplot.xticks(rotation=90, fontsize=8) + pyplot.ylabel(y_axis) + pyplot.title(title) + pyplot.savefig(filename, bbox_inches="tight", transparent=is_transp) + pyplot.clf() + + matplotlib.use(current_backend) + + return filename diff --git a/pm4py/pm4py/visualization/graphs/variants/cases.py b/pm4py/pm4py/visualization/graphs/variants/cases.py new file mode 100644 index 0000000000000000000000000000000000000000..803e041a53096e1ac6590996f7640642c8b89435 --- /dev/null +++ b/pm4py/pm4py/visualization/graphs/variants/cases.py @@ -0,0 +1,133 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import matplotlib +from copy import copy + +from pm4py.visualization.graphs.util import common +from pm4py.util import exec_utils, constants +from enum import Enum +from typing import Optional, Dict, Any, Union, List + + +class Parameters(Enum): + TITLE = "title" + FORMAT = "format" + X_AXIS = "x_axis" + Y_AXIS = "y_axis" + PYPLOT_PLOT_KWARGS = "pylot_plot_kwargs" + TRANSPARENT = "transparent" + + +CASE_DURATION_LABEL = "Case duration" +DENSITY_LABEL = "Density" +GRAPH_DEFAULT_TITLE = "Case Duration" + + +def apply_plot(x: List[float], y: List[float], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> str: + """ + Plot (non-logarithmic way) the graph with axis values contained in x and y + + Parameters + ------------ + x + Values for x-axis + y + Values for y-axis + parameters + Parameters of the algorithm, including: + Parameters.FORMAT -> Format of the target image + Parameters.TITLE -> Title of the image + + Returns + ------------ + temp_file_name + Representation temporary file name + """ + if parameters is None: + parameters = {} + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + title = exec_utils.get_param_value(Parameters.TITLE, parameters, GRAPH_DEFAULT_TITLE) + x_axis = exec_utils.get_param_value(Parameters.X_AXIS, parameters, CASE_DURATION_LABEL) + y_axis = exec_utils.get_param_value(Parameters.Y_AXIS, parameters, DENSITY_LABEL) + pyplot_plot_kwargs = exec_utils.get_param_value(Parameters.PYPLOT_PLOT_KWARGS, parameters, {}) + is_transp = exec_utils.get_param_value(Parameters.TRANSPARENT, parameters, True if constants.DEFAULT_BGCOLOR == "transparent" else False) + + filename = common.get_temp_file_name(format) + + current_backend = copy(matplotlib.get_backend()) + matplotlib.use('Agg') + from matplotlib import pyplot + + pyplot.clf() + pyplot.plot(x, y, **pyplot_plot_kwargs) + pyplot.xlabel(x_axis) + pyplot.ylabel(y_axis) + pyplot.title(title) + pyplot.savefig(filename, bbox_inches="tight", transparent=is_transp) + pyplot.clf() + + matplotlib.use(current_backend) + + return filename + + +def apply_semilogx(x: List[float], y: List[float], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> str: + """ + Plot (semi-logarithmic way) the graph with axis values contained in x and y + + Parameters + ------------ + x + Values for x-axis + y + Values for y-axis + parameters + Parameters of the algorithm, including: + Parameters.FORMAT -> Format of the target image + Parameters.TITLE -> Title of the image + + Returns + ------------ + temp_file_name + Representation temporary file name + """ + if parameters is None: + parameters = {} + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + title = exec_utils.get_param_value(Parameters.TITLE, parameters, GRAPH_DEFAULT_TITLE) + pyplot_plot_kwargs = exec_utils.get_param_value(Parameters.PYPLOT_PLOT_KWARGS, parameters, {}) + is_transp = exec_utils.get_param_value(Parameters.TRANSPARENT, parameters, True if constants.DEFAULT_BGCOLOR == "transparent" else False) + + filename = common.get_temp_file_name(format) + + current_backend = copy(matplotlib.get_backend()) + matplotlib.use('Agg') + from matplotlib import pyplot + + pyplot.clf() + pyplot.semilogx(x, y, **pyplot_plot_kwargs) + pyplot.xlabel(CASE_DURATION_LABEL) + pyplot.ylabel(DENSITY_LABEL) + pyplot.title(title) + pyplot.savefig(filename, bbox_inches="tight", transparent=is_transp) + pyplot.clf() + + matplotlib.use(current_backend) + + return filename diff --git a/pm4py/pm4py/visualization/graphs/variants/dates.py b/pm4py/pm4py/visualization/graphs/variants/dates.py new file mode 100644 index 0000000000000000000000000000000000000000..1db353df14f2169a3e6b608f5515465653c21652 --- /dev/null +++ b/pm4py/pm4py/visualization/graphs/variants/dates.py @@ -0,0 +1,135 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import matplotlib +from copy import copy + +from pm4py.visualization.graphs.util import common +from pm4py.util import exec_utils, constants +from enum import Enum +from typing import Optional, Dict, Any, Union, List + + +class Parameters(Enum): + TITLE = "title" + FORMAT = "format" + X_AXIS = "x_axis" + Y_AXIS = "y_axis" + PYPLOT_PLOT_KWARGS = "pylot_plot_kwargs" + TRANSPARENT = "transparent" + + +TIMESTAMP_LABEL = "Date" +DENSITY_LABEL = "Density" +GRAPH_DEFAULT_TITLE = "Events per Time" + + +def apply_plot(x: List[float], y: List[float], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> str: + """ + Plot (non-logarithmic way) the graph with axis values contained in x and y + + Parameters + ------------ + x + Values for x-axis + y + Values for y-axis + parameters + Parameters of the algorithm, including: + Parameters.FORMAT -> Format of the target image + Parameters.TITLE -> Title of the image + + Returns + ------------ + temp_file_name + Representation temporary file name + """ + if parameters is None: + parameters = {} + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + title = exec_utils.get_param_value(Parameters.TITLE, parameters, GRAPH_DEFAULT_TITLE) + x_axis = exec_utils.get_param_value(Parameters.X_AXIS, parameters, TIMESTAMP_LABEL) + y_axis = exec_utils.get_param_value(Parameters.Y_AXIS, parameters, DENSITY_LABEL) + pyplot_plot_kwargs = exec_utils.get_param_value(Parameters.PYPLOT_PLOT_KWARGS, parameters, {}) + is_transp = exec_utils.get_param_value(Parameters.TRANSPARENT, parameters, True if constants.DEFAULT_BGCOLOR == "transparent" else False) + + filename = common.get_temp_file_name(format) + + current_backend = copy(matplotlib.get_backend()) + matplotlib.use('Agg') + from matplotlib import pyplot + + pyplot.clf() + pyplot.plot(x, y, **pyplot_plot_kwargs) + pyplot.xlabel(x_axis) + pyplot.ylabel(y_axis) + pyplot.title(title) + pyplot.xticks(rotation=90) + pyplot.savefig(filename, bbox_inches="tight", transparent=is_transp) + pyplot.clf() + + matplotlib.use(current_backend) + + return filename + + +def apply_semilogx(x: List[float], y: List[float], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> str: + """ + Plot (semi-logarithmic way) the graph with axis values contained in x and y + + Parameters + ------------ + x + Values for x-axis + y + Values for y-axis + parameters + Parameters of the algorithm, including: + Parameters.FORMAT -> Format of the target image + Parameters.TITLE -> Title of the image + + Returns + ------------ + temp_file_name + Representation temporary file name + """ + if parameters is None: + parameters = {} + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + title = exec_utils.get_param_value(Parameters.TITLE, parameters, GRAPH_DEFAULT_TITLE) + pyplot_plot_kwargs = exec_utils.get_param_value(Parameters.PYPLOT_PLOT_KWARGS, parameters, {}) + is_transp = exec_utils.get_param_value(Parameters.TRANSPARENT, parameters, True if constants.DEFAULT_BGCOLOR == "transparent" else False) + + filename = common.get_temp_file_name(format) + + current_backend = copy(matplotlib.get_backend()) + matplotlib.use('Agg') + from matplotlib import pyplot + + pyplot.clf() + pyplot.semilogx(x, y, **pyplot_plot_kwargs) + pyplot.xlabel(TIMESTAMP_LABEL) + pyplot.ylabel(DENSITY_LABEL) + pyplot.title(title) + pyplot.xticks(rotation=90) + pyplot.savefig(filename, bbox_inches="tight", transparent=is_transp) + pyplot.clf() + + matplotlib.use(current_backend) + + return filename diff --git a/pm4py/pm4py/visualization/graphs/visualizer.py b/pm4py/pm4py/visualization/graphs/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..d77a8e91b23b8dcc59a31a4c995d6c75b1d5a02e --- /dev/null +++ b/pm4py/pm4py/visualization/graphs/visualizer.py @@ -0,0 +1,118 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.graphs.variants import cases, attributes, dates, barplot +from pm4py.visualization.graphs.util.common import save, view, matplotlib_view, serialize +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, List + + +class Variants(Enum): + CASES = cases + ATTRIBUTES = attributes + DATES = dates + BARPLOT = barplot + + +DEFAULT_VARIANT = Variants.CASES + + +def apply(x: List[float], y: List[float], parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> str: + """ + Method to plot (non-logarithmic way) the graph with axis values contained in x and y + + Parameters + ------------ + x + Values for x-axis + y + Values for y-axis + parameters + Parameters of the algorithm, including: + Parameters.FORMAT -> Format of the target image + Parameters.TITLE -> Title of the image + variant + Variant of the algorithm to apply, including: + - Variants.CASES + - Variants.ATTRIBUTES + - Variants.DATES + - Variants.BARPLOT + + Returns + ------------ + temp_file_name + Representation temporary file name + """ + return exec_utils.get_variant(variant).apply_plot(x, y, parameters=parameters) + + +def apply_plot(x: List[float], y: List[float], parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> str: + """ + Method to plot (non-logarithmic way) the graph with axis values contained in x and y + + Parameters + ------------ + x + Values for x-axis + y + Values for y-axis + parameters + Parameters of the algorithm, including: + Parameters.FORMAT -> Format of the target image + Parameters.TITLE -> Title of the image + variant + Variant of the algorithm to apply, including: + - Variants.CASES + - Variants.ATTRIBUTES + - Variants.DATES + - Variants.BARPLOT + + Returns + ------------ + temp_file_name + Representation temporary file name + """ + return exec_utils.get_variant(variant).apply_plot(x, y, parameters=parameters) + + +def apply_semilogx(x: List[float], y: List[float], parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> str: + """ + Method to plot (semi-logarithmic way) the graph with axis values contained in x and y + + Parameters + ------------ + x + Values for x-axis + y + Values for y-axis + parameters + Parameters of the algorithm, including: + Parameters.FORMAT -> Format of the target image + Parameters.TITLE -> Title of the image + variant + Variant of the algorithm to apply, including: + - Variants.CASES + - Variants.ATTRIBUTES + - Variants.DATES + - Variants.BARPLOT + + Returns + ------------ + temp_file_name + Representation temporary file name + """ + return exec_utils.get_variant(variant).apply_semilogx(x, y, parameters=parameters) diff --git a/pm4py/pm4py/visualization/heuristics_net/__init__.py b/pm4py/pm4py/visualization/heuristics_net/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bf305929ebb0a3bab353b3362033acb086ed88b8 --- /dev/null +++ b/pm4py/pm4py/visualization/heuristics_net/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.heuristics_net import variants, visualizer diff --git a/pm4py/pm4py/visualization/heuristics_net/variants/__init__.py b/pm4py/pm4py/visualization/heuristics_net/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e3cad8ed666edff31bbdac32a356b4e924309e87 --- /dev/null +++ b/pm4py/pm4py/visualization/heuristics_net/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.heuristics_net.variants import pydotplus_vis diff --git a/pm4py/pm4py/visualization/heuristics_net/variants/pydotplus_vis.py b/pm4py/pm4py/visualization/heuristics_net/variants/pydotplus_vis.py new file mode 100644 index 0000000000000000000000000000000000000000..d78f3ef76df143162bba8259c3e1cda317a1ea20 --- /dev/null +++ b/pm4py/pm4py/visualization/heuristics_net/variants/pydotplus_vis.py @@ -0,0 +1,318 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +import math +import tempfile + +import pydotplus + +from pm4py.util import exec_utils, constants +from pm4py.visualization.common.utils import human_readable_stat +from enum import Enum +from pm4py.objects.heuristics_net.obj import HeuristicsNet +from typing import Optional, Dict, Any, Union +from uuid import uuid4 + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + + +def get_corr_hex(num): + """ + Gets correspondence between a number + and an hexadecimal string + + Parameters + ------------- + num + Number + + Returns + ------------- + hex_string + Hexadecimal string + """ + if num < 10: + return str(int(num)) + elif num < 11: + return "A" + elif num < 12: + return "B" + elif num < 13: + return "C" + elif num < 14: + return "D" + elif num < 15: + return "E" + elif num < 16: + return "F" + + +def transform_to_hex(graycolor): + """ + Transform color to hexadecimal representation + + Parameters + ------------- + graycolor + Gray color (int from 0 to 255) + + Returns + ------------- + hex_string + Hexadecimal color + """ + left0 = graycolor / 16 + right0 = graycolor % 16 + + left00 = get_corr_hex(left0) + right00 = get_corr_hex(right0) + + return "#" + left00 + right00 + left00 + right00 + left00 + right00 + + +def transform_to_hex_2(color): + """ + Transform color to hexadecimal representation + + Parameters + ------------- + color + Gray color (int from 0 to 255) + + Returns + ------------- + hex_string + Hexadecimal color + """ + color = 255 - color + color2 = 255 - color + + left0 = color / 16 + right0 = color % 16 + + left1 = color2 / 16 + right1 = color2 % 16 + + left0 = get_corr_hex(left0) + right0 = get_corr_hex(right0) + left1 = get_corr_hex(left1) + right1 = get_corr_hex(right1) + + return "#" + left0 + right0 + left1 + right1 + left1 + right1 + + +def get_graph(heu_net: HeuristicsNet, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> pydotplus.graphviz.Dot: + """ + Gets a representation of an Heuristics Net + + Parameters + ------------- + heu_net + Heuristics net + parameters + Possible parameters of the algorithm, including: + - Parameters.FORMAT + + Returns + ------------ + graph + Pydotplus graph + """ + if parameters is None: + parameters = {} + + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + graph = pydotplus.Dot(strict=True) + graph.obj_dict['attributes']['bgcolor'] = bgcolor + graph.set_bgcolor(bgcolor) + + corr_nodes = {} + corr_nodes_names = {} + is_frequency = False + + start_end_nodes_set = set() + + for index, sa_list in enumerate(heu_net.start_activities): + start_end_nodes_set = start_end_nodes_set.union({n for n in sa_list if n in corr_nodes_names}) + + for index, ea_list in enumerate(heu_net.end_activities): + start_end_nodes_set = start_end_nodes_set.union({n for n in ea_list if n in corr_nodes_names}) + + for node_name in heu_net.nodes: + node = heu_net.nodes[node_name] + if node_name in start_end_nodes_set or node.input_connections or node.output_connections: + node_occ = node.node_occ + graycolor = transform_to_hex_2(max(255 - math.log(node_occ) * 9, 0)) + if node.node_type == "frequency": + is_frequency = True + n = pydotplus.Node(name=str(uuid4()), shape="box", style="filled", + label=node_name + " (" + str(node_occ) + ")", fillcolor=node.get_fill_color(graycolor), + fontcolor=node.get_font_color()) + else: + n = pydotplus.Node(name=str(uuid4()), shape="box", style="filled", + label=node_name + " (" + human_readable_stat(heu_net.sojourn_times[ + node_name]) + ")" if node_name in heu_net.sojourn_times else node_name + " (0s)", + fillcolor=node.get_fill_color(graycolor), + fontcolor=node.get_font_color()) + corr_nodes[node] = n + corr_nodes_names[node_name] = n + graph.add_node(n) + + # gets max arc value + max_arc_value = -1 + for node_name in heu_net.nodes: + node = heu_net.nodes[node_name] + for other_node in node.output_connections: + if other_node in corr_nodes: + for edge in node.output_connections[other_node]: + max_arc_value = max(max_arc_value, edge.repr_value) + + for node_name in heu_net.nodes: + node = heu_net.nodes[node_name] + for other_node in node.output_connections: + if other_node in corr_nodes: + for edge in node.output_connections[other_node]: + this_pen_width = 1.0 + math.log(1 + edge.repr_value) / 11.0 + repr_value = str(edge.repr_value) + if edge.net_name: + if node.node_type == "frequency": + e = pydotplus.Edge(src=corr_nodes[node], dst=corr_nodes[other_node], + label=edge.net_name + " (" + repr_value + ")", + color=edge.get_color(), + fontcolor=edge.get_font_color(), + penwidth=edge.get_penwidth(this_pen_width)) + else: + e = pydotplus.Edge(src=corr_nodes[node], dst=corr_nodes[other_node], + label=edge.net_name + " (" + human_readable_stat(repr_value) + ")", + color=edge.get_color(), + fontcolor=edge.get_font_color(), + penwidth=edge.get_penwidth(this_pen_width)) + else: + if node.node_type == "frequency": + e = pydotplus.Edge(src=corr_nodes[node], dst=corr_nodes[other_node], label=repr_value, + color=edge.get_color(), + fontcolor=edge.get_font_color(), + penwidth=edge.get_penwidth(this_pen_width)) + else: + e = pydotplus.Edge(src=corr_nodes[node], dst=corr_nodes[other_node], + label=human_readable_stat(repr_value), + color=edge.get_color(), + fontcolor=edge.get_font_color(), + penwidth=edge.get_penwidth(this_pen_width)) + + graph.add_edge(e) + + for index, sa_list in enumerate(heu_net.start_activities): + effective_sa_list = [n for n in sa_list if n in corr_nodes_names] + if effective_sa_list: + start_i = pydotplus.Node(name="start_" + str(index), label="@@S", color=heu_net.default_edges_color[index], + fontsize="8", fontcolor="#32CD32", fillcolor="#32CD32", + style="filled") + graph.add_node(start_i) + for node_name in effective_sa_list: + sa = corr_nodes_names[node_name] + if type(heu_net.start_activities[index]) is dict: + occ = heu_net.start_activities[index][node_name] + if occ >= heu_net.min_dfg_occurrences: + if is_frequency: + this_pen_width = 1.0 + math.log(1 + occ) / 11.0 + if heu_net.net_name[index]: + e = pydotplus.Edge(src=start_i, dst=sa, + label=heu_net.net_name[index] + " (" + str(occ) + ")", + color=heu_net.default_edges_color[index], + fontcolor=heu_net.default_edges_color[index], penwidth=this_pen_width) + else: + e = pydotplus.Edge(src=start_i, dst=sa, label=str(occ), + color=heu_net.default_edges_color[index], + fontcolor=heu_net.default_edges_color[index], penwidth=this_pen_width) + else: + e = pydotplus.Edge(src=start_i, dst=sa, label=heu_net.net_name[index], + color=heu_net.default_edges_color[index], + fontcolor=heu_net.default_edges_color[index]) + else: + e = pydotplus.Edge(src=start_i, dst=sa, label=heu_net.net_name[index], + color=heu_net.default_edges_color[index], + fontcolor=heu_net.default_edges_color[index]) + graph.add_edge(e) + + for index, ea_list in enumerate(heu_net.end_activities): + effective_ea_list = [n for n in ea_list if n in corr_nodes_names] + if effective_ea_list: + end_i = pydotplus.Node(name="end_" + str(index), label="@@E", color="#FFA500", + fillcolor="#FFA500", fontcolor="#FFA500", fontsize="8", + style="filled") + graph.add_node(end_i) + for node_name in effective_ea_list: + ea = corr_nodes_names[node_name] + if type(heu_net.end_activities[index]) is dict: + occ = heu_net.end_activities[index][node_name] + if occ >= heu_net.min_dfg_occurrences: + if is_frequency: + this_pen_width = 1.0 + math.log(1 + occ) / 11.0 + if heu_net.net_name[index]: + e = pydotplus.Edge(src=ea, dst=end_i, label=heu_net.net_name[index] + " (" + str(occ) + ")", + color=heu_net.default_edges_color[index], + fontcolor=heu_net.default_edges_color[index], penwidth=this_pen_width) + else: + e = pydotplus.Edge(src=ea, dst=end_i, label=str(occ), + color=heu_net.default_edges_color[index], + fontcolor=heu_net.default_edges_color[index], penwidth=this_pen_width) + else: + e = pydotplus.Edge(src=ea, dst=end_i, label=heu_net.net_name[index], + color=heu_net.default_edges_color[index], + fontcolor=heu_net.default_edges_color[index]) + else: + e = pydotplus.Edge(src=ea, dst=end_i, label=heu_net.net_name[index], + color=heu_net.default_edges_color[index], + fontcolor=heu_net.default_edges_color[index]) + graph.add_edge(e) + + return graph + + +def apply(heu_net: HeuristicsNet, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> str: + """ + Gets a representation of an Heuristics Net + + Parameters + ------------- + heu_net + Heuristics net + parameters + Possible parameters of the algorithm, including: + - Parameters.FORMAT + + Returns + ------------ + gviz + Representation of the Heuristics Net + """ + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + + graph = get_graph(heu_net, parameters=parameters) + + file_name = tempfile.NamedTemporaryFile(suffix='.' + image_format) + file_name.close() + + graph.write(file_name.name, format=image_format) + return file_name diff --git a/pm4py/pm4py/visualization/heuristics_net/visualizer.py b/pm4py/pm4py/visualization/heuristics_net/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..a5d286688eb867c9a1eabea203840e9f2113c3d4 --- /dev/null +++ b/pm4py/pm4py/visualization/heuristics_net/visualizer.py @@ -0,0 +1,172 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import shutil +from enum import Enum + +import pydotplus +from pm4py.util import exec_utils, vis_utils +from pm4py.visualization.heuristics_net.variants import pydotplus_vis +import tempfile +from pm4py.objects.heuristics_net.obj import HeuristicsNet +from typing import Optional, Dict, Any +from pm4py.util import constants + + +class Variants(Enum): + PYDOTPLUS = pydotplus_vis + + +DEFAULT_VARIANT = Variants.PYDOTPLUS + + +def apply(heu_net: HeuristicsNet, parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> str: + """ + Gets a representation of an Heuristics Net + + Parameters + ------------- + heu_net + Heuristics net + parameters + Possible parameters of the algorithm, including: + - Parameters.FORMAT + variant + Variant of the algorithm to use: + - Variants.PYDOTPLUS + + Returns + ------------ + gviz + Representation of the Heuristics Net + """ + return exec_utils.get_variant(variant).apply(heu_net, parameters=parameters) + + +def get_graph(heu_net: HeuristicsNet, parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> pydotplus.graphviz.Dot: + """ + Gets a representation of an Heuristics Net + + Parameters + ------------- + heu_net + Heuristics net + parameters + Possible parameters of the algorithm, including: + - Parameters.FORMAT + variant + Variant of the algorithm to use: + - Variants.PYDOTPLUS + + Returns + ------------ + graph + Pydotplus graph + """ + return exec_utils.get_variant(variant).get_graph(heu_net, parameters=parameters) + + +def view(figure): + """ + View on the screen a figure that has been rendered + + Parameters + ---------- + figure + figure + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + try: + filename = figure.name + figure = filename + except AttributeError: + # continue without problems, a proper path has been provided + pass + + if constants.DEFAULT_GVIZ_VIEW == "matplotlib_view": + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + img = mpimg.imread(figure) + plt.axis('off') + plt.tight_layout(pad=0, w_pad=0, h_pad=0) + plt.imshow(img) + plt.show() + return + + if vis_utils.check_visualization_inside_jupyter(): + vis_utils.view_image_in_jupyter(figure) + else: + vis_utils.open_opsystem_image_viewer(figure) + + +def save(figure, output_file_path): + """ + Save a figure that has been rendered + + Parameters + ----------- + figure + figure + output_file_path + Path where the figure should be saved + """ + try: + filename = figure.name + figure = filename + except AttributeError: + # continue without problems, a proper path has been provided + pass + + shutil.copyfile(figure, output_file_path) + return "" + + +def serialize(figure: tempfile._TemporaryFileWrapper) -> bytes: + """ + Serialize a figure that has been rendered + + Parameters + ---------- + figure + figure + """ + with open(figure.name, "rb") as f: + return f.read() + + +def matplotlib_view(figure): + """ + Views the figure using Matplotlib + + Parameters + --------------- + figure + Figure + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + try: + filename = figure.name + figure = filename + except AttributeError: + # continue without problems, a proper path has been provided + pass + + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + + img = mpimg.imread(figure) + plt.imshow(img) + plt.show() diff --git a/pm4py/pm4py/visualization/network_analysis/__init__.py b/pm4py/pm4py/visualization/network_analysis/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..49c7c720285d40f89d42c5975d24b56e742c8404 --- /dev/null +++ b/pm4py/pm4py/visualization/network_analysis/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.network_analysis import visualizer, variants diff --git a/pm4py/pm4py/visualization/network_analysis/variants/__init__.py b/pm4py/pm4py/visualization/network_analysis/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d3e5b7395f5a4769e93c79c056cb5b6227d666a8 --- /dev/null +++ b/pm4py/pm4py/visualization/network_analysis/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.network_analysis.variants import frequency, performance diff --git a/pm4py/pm4py/visualization/network_analysis/variants/frequency.py b/pm4py/pm4py/visualization/network_analysis/variants/frequency.py new file mode 100644 index 0000000000000000000000000000000000000000..8fad60d922aeb9e876e40658d06ac401d24474e2 --- /dev/null +++ b/pm4py/pm4py/visualization/network_analysis/variants/frequency.py @@ -0,0 +1,112 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +import uuid +from enum import Enum +from pm4py.util import exec_utils +import tempfile +from graphviz import Digraph +from pm4py.util import vis_utils, constants +from typing import Dict, Optional, Any, Tuple + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + ACTIVITY_THRESHOLD = "activity_threshold" + EDGE_THRESHOLD = "edge_threshold" + + +def apply(network_analysis_edges: Dict[Tuple[str, str], Dict[str, int]], parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Creates a visualization of the network analysis + + Parameters + ----------------- + network_analysis_edges + Edges of the network analysis + parameters + Parameters of the algorithm, including: + - Parameters.FORMAT => the format of the visualization + - Parameters.BGCOLOR => the background color + - Parameters.ACTIVITY_THRESHOLD => the minimum number of occurrences for an activity to be included (default: 1) + - Parameters.EDGE_THRESHOLD => the minimum number of occurrences for an edge to be included (default: 1) + + Returns + ------------------ + digraph + Graphviz graph + """ + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + activity_threshold = exec_utils.get_param_value(Parameters.ACTIVITY_THRESHOLD, parameters, 1) + edge_threshold = exec_utils.get_param_value(Parameters.EDGE_THRESHOLD, parameters, 1) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Digraph("pt", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + viz.attr('node', shape='ellipse', fixedsize='false') + + nodes = set(x[0] for x in network_analysis_edges).union(set(x[1] for x in network_analysis_edges)) + nodes_in_degree = {x: 0 for x in nodes} + nodes_out_degree = {x: 0 for x in nodes} + for edge in network_analysis_edges: + for edge_value in network_analysis_edges[edge]: + if network_analysis_edges[edge][edge_value] >= edge_threshold: + nodes_in_degree[edge[1]] += network_analysis_edges[edge][edge_value] + nodes_out_degree[edge[0]] += network_analysis_edges[edge][edge_value] + nodes_max_degree = {x: max(nodes_in_degree[x], nodes_out_degree[x]) for x in nodes} + + max_node_value = sys.maxsize + min_node_value = -sys.maxsize + + nodes_dict = {} + for node in nodes_max_degree: + if nodes_max_degree[node] >= activity_threshold: + nodes_dict[node] = str(uuid.uuid4()) + viz.node(nodes_dict[node], node+"\n(in="+str(nodes_in_degree[node])+"; out="+str(nodes_out_degree[node])+")", style="filled", fillcolor=vis_utils.get_trans_freq_color(nodes_max_degree[node], max_node_value, max_node_value)) + count = nodes_max_degree[node] + if count > max_node_value: + max_node_value = count + elif count < min_node_value: + min_node_value = count + + min_edge_value = sys.maxsize + max_edge_value = -sys.maxsize + + for edge in network_analysis_edges: + if edge[0] in nodes_dict and edge[1] in nodes_dict: + for edge_value in network_analysis_edges[edge]: + count = network_analysis_edges[edge][edge_value] + if count > max_edge_value: + max_edge_value = count + elif count < min_edge_value: + min_edge_value = count + + for edge in network_analysis_edges: + if edge[0] in nodes_dict and edge[1] in nodes_dict: + for edge_value in network_analysis_edges[edge]: + if network_analysis_edges[edge][edge_value] >= edge_threshold: + viz.edge(nodes_dict[edge[0]], nodes_dict[edge[1]], label=edge_value+"\n"+str(network_analysis_edges[edge][edge_value])+"", penwidth=str(vis_utils.get_arc_penwidth(network_analysis_edges[edge][edge_value], min_edge_value, max_edge_value))) + + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/network_analysis/variants/performance.py b/pm4py/pm4py/visualization/network_analysis/variants/performance.py new file mode 100644 index 0000000000000000000000000000000000000000..0a6891527594cee4e635db8b6ee21d931c1bb39f --- /dev/null +++ b/pm4py/pm4py/visualization/network_analysis/variants/performance.py @@ -0,0 +1,138 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import sys +import uuid +from enum import Enum +from pm4py.util import exec_utils, constants +import tempfile +from graphviz import Digraph +from pm4py.util import vis_utils +from typing import Dict, Optional, Any, Tuple +from statistics import mean, median, stdev + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + ACTIVITY_THRESHOLD = "activity_threshold" + EDGE_THRESHOLD = "edge_threshold" + AGGREGATION_MEASURE = "aggregation_measure" + + +def apply(network_analysis_edges0: Dict[Tuple[str, str], Dict[str, Any]], parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Creates a visualization of the network analysis (performance view) + + Parameters + ----------------- + network_analysis_edges0 + Edges of the network analysis + parameters + Parameters of the algorithm, including: + - Parameters.FORMAT => the format of the visualization + - Parameters.BGCOLOR => the background color + - Parameters.ACTIVITY_THRESHOLD => the minimum number of occurrences for an activity to be included (default: 1) + - Parameters.EDGE_THRESHOLD => the minimum number of occurrences for an edge to be included (default: 1) + - Parameters.AGGREGATION_MEASURE => the aggregation measure (default: mean) + + Returns + ------------------ + digraph + Graphviz graph + """ + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + activity_threshold = exec_utils.get_param_value(Parameters.ACTIVITY_THRESHOLD, parameters, 1) + edge_threshold = exec_utils.get_param_value(Parameters.EDGE_THRESHOLD, parameters, 1) + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, parameters, "mean") + + aggregation_f = mean + + if aggregation_measure == "median": + aggregation_f = median + elif aggregation_measure == "min": + aggregation_f = min + elif aggregation_measure == "max": + aggregation_f = max + elif aggregation_measure == "stdev": + aggregation_f = stdev + elif aggregation_measure == "sum": + aggregation_f = sum + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Digraph("pt", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + viz.attr('node', shape='ellipse', fixedsize='false') + + network_analysis_edges = {} + network_analysis_edges_agg_performance = {} + for x in network_analysis_edges0: + network_analysis_edges[x] = {} + network_analysis_edges_agg_performance[x] = {} + for y in network_analysis_edges0[x]: + network_analysis_edges[x][y] = len(network_analysis_edges0[x][y]) + network_analysis_edges_agg_performance[x][y] = aggregation_f(network_analysis_edges0[x][y]) + + nodes = set(x[0] for x in network_analysis_edges).union(set(x[1] for x in network_analysis_edges)) + nodes_in_degree = {x: 0 for x in nodes} + nodes_out_degree = {x: 0 for x in nodes} + for edge in network_analysis_edges: + for edge_value in network_analysis_edges[edge]: + if network_analysis_edges[edge][edge_value] >= edge_threshold: + nodes_in_degree[edge[1]] += network_analysis_edges[edge][edge_value] + nodes_out_degree[edge[0]] += network_analysis_edges[edge][edge_value] + nodes_max_degree = {x: max(nodes_in_degree[x], nodes_out_degree[x]) for x in nodes} + + max_node_value = sys.maxsize + min_node_value = -sys.maxsize + + nodes_dict = {} + for node in nodes_max_degree: + if nodes_max_degree[node] >= activity_threshold: + nodes_dict[node] = str(uuid.uuid4()) + viz.node(nodes_dict[node], node+"\n(in="+str(nodes_in_degree[node])+"; out="+str(nodes_out_degree[node])+")", style="filled", fillcolor=vis_utils.get_trans_freq_color(nodes_max_degree[node], max_node_value, max_node_value)) + count = nodes_max_degree[node] + if count > max_node_value: + max_node_value = count + elif count < min_node_value: + min_node_value = count + + min_edge_value = sys.maxsize + max_edge_value = -sys.maxsize + + for edge in network_analysis_edges: + if edge[0] in nodes_dict and edge[1] in nodes_dict: + for edge_value in network_analysis_edges[edge]: + count = network_analysis_edges[edge][edge_value] + if count > max_edge_value: + max_edge_value = count + elif count < min_edge_value: + min_edge_value = count + + for edge in network_analysis_edges: + if edge[0] in nodes_dict and edge[1] in nodes_dict: + for edge_value in network_analysis_edges[edge]: + if network_analysis_edges[edge][edge_value] >= edge_threshold: + viz.edge(nodes_dict[edge[0]], nodes_dict[edge[1]], label=edge_value+"\n"+vis_utils.human_readable_stat(network_analysis_edges_agg_performance[edge][edge_value])+"", penwidth=str(vis_utils.get_arc_penwidth(network_analysis_edges[edge][edge_value], min_edge_value, max_edge_value))) + + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/network_analysis/visualizer.py b/pm4py/pm4py/visualization/network_analysis/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..2590e14575ba6ca00f6b446513fcf4b38878c00e --- /dev/null +++ b/pm4py/pm4py/visualization/network_analysis/visualizer.py @@ -0,0 +1,87 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from enum import Enum +from pm4py.visualization.network_analysis.variants import frequency, performance +from pm4py.util import exec_utils +from graphviz import Digraph +from typing import Dict, Optional, Any, Tuple + + +class Variants(Enum): + FREQUENCY = frequency + PERFORMANCE = performance + + +def apply(network_analysis_edges: Dict[Tuple[str, str], Dict[str, Any]], variant=Variants.FREQUENCY, parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Creates a visualization of the network analysis + + Parameters + ---------------- + network_analysis_edges + Edges of the network analysis + parameters + Version-specific parameters + + Returns + ---------------- + digraph + Graphviz graph + """ + return exec_utils.get_variant(variant).apply(network_analysis_edges, parameters=parameters) + + +def save(gviz: Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz: Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/networkx/__init__.py b/pm4py/pm4py/visualization/networkx/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/visualization/networkx/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/visualization/networkx/variants/__init__.py b/pm4py/pm4py/visualization/networkx/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/visualization/networkx/variants/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/visualization/networkx/variants/digraph.py b/pm4py/pm4py/visualization/networkx/variants/digraph.py new file mode 100644 index 0000000000000000000000000000000000000000..952245afcecb0855b6767670b5e16991e6d0fbc9 --- /dev/null +++ b/pm4py/pm4py/visualization/networkx/variants/digraph.py @@ -0,0 +1,104 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, constants +from typing import Optional, Dict, Any +import graphviz +import tempfile +import uuid +import networkx as nx + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + RANKDIR = "rankdir" + INCLUDE_NODE_ATTRIBUTES = "include_node_attributes" + INCLUDE_EDGE_ATTRIBUTES = "include_edge_attributes" + + +def apply(G: nx.DiGraph, parameters: Optional[Dict[Any, Any]] = None) -> graphviz.Digraph: + """ + Creates a Graphviz Digraph from a NetworkX DiGraph object. + + Minimum viable example: + + import pm4py + from pm4py.visualization.networkx import visualizer as nx_to_gv_vis + + log = pm4py.read_xes("../tests/input_data/running-example.xes") + # gets an 'event graph' where events, cases and their relationships + # are represented in a graph (NetworkX DiGraph) + event_graph = pm4py.convert_log_to_networkx(log) + + # visualize the NX DiGraph using Graphviz + gviz = nx_to_gv_vis.apply(event_graph, parameters={"format": "svg"}) + nx_to_gv_vis.view(gviz) + + + Parameters + --------------- + G + NetworkX DiGraph + parameters + Parameters of the visualization, including: + - Parameters.FORMAT => format of the visualization (.png, .svg) + - Parameters.BGCOLOR => background color of the visualization (transparent, white) + - Parameters.RANKDIR => direction of the graph (LR or TB) + - Parameters.INCLUDE_NODE_ATTRIBUTES => includes the node attributes in the node's label in the representation + - Parameters.INCLUDE_EDGE_ATTRIBUTES => includes the edge attributes in the edge's label in the representation + + Returns + -------------- + digraph + Graphviz DiGraph object + """ + if parameters is None: + parameters = {} + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, constants.DEFAULT_FORMAT_GVIZ_VIEW) + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, "LR") + + include_node_attributes = exec_utils.get_param_value(Parameters.INCLUDE_NODE_ATTRIBUTES, parameters, True) + include_edge_attributes = exec_utils.get_param_value(Parameters.INCLUDE_EDGE_ATTRIBUTES, parameters, True) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + viz = graphviz.Digraph("networkx_digraph", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + + nodes_dict = {} + for node in G.nodes: + node_id = str(uuid.uuid4()) + nodes_dict[node] = node_id + label = str(node) + + if include_node_attributes and G.nodes[node]: + label += "\n" + str(G.nodes[node]).replace(", ", ",\n") + + viz.node(node_id, label=label, shape="box") + + for edge in G.edges: + label = " " + if include_edge_attributes and G.edges[edge]: + label = str(G.edges[edge]).replace(", ", ",\n") + + viz.edge(nodes_dict[edge[0]], nodes_dict[edge[1]], label=label) + + viz.attr(rankdir=rankdir) + viz.format = format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/networkx/visualizer.py b/pm4py/pm4py/visualization/networkx/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..fb5068068d575f93140faf5177beacb277a81609 --- /dev/null +++ b/pm4py/pm4py/visualization/networkx/visualizer.py @@ -0,0 +1,87 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Digraph +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.visualization.networkx.variants import digraph +import networkx as nx + + +class Variants(Enum): + DIGRAPH = digraph + + +def apply(G: nx.DiGraph, variant=Variants.DIGRAPH, + parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Creates a Graphviz Digraph from a NetworkX DiGraph object. + + Parameters + --------------- + G + NetworkX DiGraph + parameters + Variant-specific parameters + + Returns + -------------- + digraph + Graphviz DiGraph object + """ + return exec_utils.get_variant(variant).apply(G, parameters=parameters) + + +def save(gviz: Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + + +def view(gviz: Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/ocel/__init__.py b/pm4py/pm4py/visualization/ocel/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..38f3678de71db02d474f304cd443c76e39ac5967 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.ocel import ocdfg, ocpn, object_graph, interleavings diff --git a/pm4py/pm4py/visualization/ocel/eve_to_obj_types/__init__.py b/pm4py/pm4py/visualization/ocel/eve_to_obj_types/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/eve_to_obj_types/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/visualization/ocel/eve_to_obj_types/variants/__init__.py b/pm4py/pm4py/visualization/ocel/eve_to_obj_types/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/eve_to_obj_types/variants/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/visualization/ocel/eve_to_obj_types/variants/graphviz.py b/pm4py/pm4py/visualization/ocel/eve_to_obj_types/variants/graphviz.py new file mode 100644 index 0000000000000000000000000000000000000000..d77fd2f129dd650dbd80180fc8a6c62dff5aaa95 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/eve_to_obj_types/variants/graphviz.py @@ -0,0 +1,90 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from pm4py.util import exec_utils, vis_utils, constants +from pm4py.objects.ocel.obj import OCEL +from typing import Optional, Dict, Any +from graphviz import Digraph +import tempfile +import uuid + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + RANKDIR = "rankdir" + ANNOTATE_FREQUENCY = "annotate_frequency" + + +def apply(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Shows the relationships between the different event and object types of the + object-centric event log. + + Parameters + --------------- + ocel + Object-centric event log + parameters + Parameters of the visualization, including: + - Parameters.FORMAT => format of the visualization (.png, .svg) + - Parameters.BGCOLOR => background color of the visualization (transparent, white) + - Parameters.RANKDIR => direction of the graph (LR or TB) + - Parameters.ANNOTATE_FREQUENCY => annotate the frequency on the arcs + + Returns + -------------- + gviz + Graphviz object + """ + if parameters is None: + parameters = {} + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, constants.DEFAULT_FORMAT_GVIZ_VIEW) + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, "LR") + annotate_frequency = exec_utils.get_param_value(Parameters.ANNOTATE_FREQUENCY, parameters, False) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + viz = Digraph("eve_to_obj_types", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + + event_types = sorted(list(ocel.events[ocel.event_activity].unique())) + object_types = sorted(list(ocel.objects[ocel.object_type_column].unique())) + ev_to_obj_types = ocel.relations.groupby([ocel.event_activity, ocel.object_type_column]).size().to_dict() + + min_num = min(ev_to_obj_types.values()) + max_num = max(ev_to_obj_types.values()) + + ev_types_dict = {e: str(uuid.uuid4()) for e in event_types} + obj_types_dict = {o: str(uuid.uuid4()) for o in object_types} + + for ev in event_types: + viz.node(ev_types_dict[ev], ev, style="filled", fillcolor="pink", shape='ellipse') + + for obj in object_types: + viz.node(obj_types_dict[obj], obj, style="filled", fillcolor="lightblue", shape='box') + + for arc in ev_to_obj_types: + label = " " + if annotate_frequency: + label = str(ev_to_obj_types[arc]) + viz.edge(ev_types_dict[arc[0]], obj_types_dict[arc[1]], label=label, penwidth=str(vis_utils.get_arc_penwidth(ev_to_obj_types[arc], min_num, max_num))) + + viz.attr(rankdir=rankdir) + viz.format = format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/ocel/eve_to_obj_types/visualizer.py b/pm4py/pm4py/visualization/ocel/eve_to_obj_types/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..931be44bf8150ef4eaef81be9d9b850a223a0c42 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/eve_to_obj_types/visualizer.py @@ -0,0 +1,97 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Digraph +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.visualization.ocel.eve_to_obj_types.variants import graphviz +from pm4py.objects.ocel.obj import OCEL + + +class Variants(Enum): + GRAPHVIZ = graphviz + + +def apply(ocel: OCEL, variant=Variants.GRAPHVIZ, + parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Shows the relationships between the different event and object types of the + object-centric event log. + + Minimum viable example: + + import pm4py + from pm4py.visualization.ocel.eve_to_obj_types import visualizer + + ocel = pm4py.read_ocel('tests/input_data/ocel/example_log.jsonocel') + gviz = visualizer.apply(ocel) + visualizer.view(gviz) + + Parameters + --------------- + ocel + Object-centric event log + parameters + Variant-specific parameters + + Returns + -------------- + gviz + Graphviz object + """ + return exec_utils.get_variant(variant).apply(ocel, parameters=parameters) + + +def save(gviz: Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + + +def view(gviz: Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/ocel/interleavings/__init__.py b/pm4py/pm4py/visualization/ocel/interleavings/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bdb96627c35cb6418443f253e6eed5a1530839ef --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/interleavings/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.ocel.interleavings import visualizer, variants diff --git a/pm4py/pm4py/visualization/ocel/interleavings/variants/__init__.py b/pm4py/pm4py/visualization/ocel/interleavings/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d9b5577cad9465be823e4d6357f82af20c272e9e --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/interleavings/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.ocel.interleavings.variants import graphviz diff --git a/pm4py/pm4py/visualization/ocel/interleavings/variants/graphviz.py b/pm4py/pm4py/visualization/ocel/interleavings/variants/graphviz.py new file mode 100644 index 0000000000000000000000000000000000000000..eb6e0e15fb67a270333db3f6a509477d9cf3dcab --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/interleavings/variants/graphviz.py @@ -0,0 +1,266 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Digraph +from enum import Enum + +import pm4py +from pm4py.util import exec_utils, constants, xes_constants +from typing import Optional, Dict, Any +import pandas as pd +from uuid import uuid4 +from pm4py.util import vis_utils +import tempfile +from pm4py.algo.filtering.dfg import dfg_filtering + + +def __get_freq_perf_df(dataframe: pd.DataFrame, activity_key: str, aggregation_measure: str, activity_percentage: float, + paths_percentage: float, dependency_threshold: float): + """ + Gets the frequency and performance DFG abstractions from the provided dataframe + (internal usage) + """ + freq_dfg, sa, ea = pm4py.discover_dfg(dataframe) + perf_dfg, sa, ea = pm4py.discover_performance_dfg(dataframe) + act_count = pm4py.get_event_attribute_values(dataframe, activity_key) + + freq_dfg, sa, ea, act_count = dfg_filtering.filter_dfg_on_activities_percentage(freq_dfg, sa, ea, act_count, + activity_percentage) + freq_dfg, sa, ea, act_count = dfg_filtering.filter_dfg_on_paths_percentage(freq_dfg, sa, ea, act_count, + paths_percentage) + freq_dfg, sa, ea, act_count = dfg_filtering.filter_dfg_keep_connected(freq_dfg, sa, ea, act_count, + dependency_threshold) + + perf_dfg = {x: y[aggregation_measure] for x, y in perf_dfg.items() if x in freq_dfg} + + return freq_dfg, perf_dfg, sa, ea, act_count + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + RANKDIR = "rankdir" + ANNOTATION = "annotation" + AGGREGATION_MEASURE = "aggregation_measure" + ACTIVITY_KEY = constants.PARAMETER_CONSTANT_ACTIVITY_KEY + ACTIVITY_PERCENTAGE = "activity_percentage" + PATHS_PERCENTAGE = "paths_percentage" + DEPENDENCY_THRESHOLD = "dependency_threshold" + MIN_FACT_EDGES_INTERLEAVINGS = "min_fact_edges_interleavings" + + +def apply(dataframe1: pd.DataFrame, dataframe2: pd.DataFrame, interleavings: pd.DataFrame, + parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Visualizes the interleavings discovered between two different processes. + We suppose to provide both event logs, and the discovered interleavings. + The visualization includes the DFG of both processes, along with the arcs discovered between them. + Both frequency and performance visualization are available. + + Parameters + -------------------- + dataframe1 + Dataframe of the first process + dataframe2 + Dataframe of the second process + interleavings + Interleavings between the two considered processes + parameters + Parameters of the algorithm, including: + - Parameters.FORMAT => the format of the visualization + - Parameters.BGCOLOR => the background color + - Parameters.RANKDIR => the rank direction (LR or TB; default: TB) + - Parameters.ANNOTATION => the annotation to represent (possible values: frequency or performance) + - Parameters.AGGREGATION_MEASURE => which aggregation should be used when considering performance + - Parameters.ACTIVITY_KEY => the activity key + - Parameters.ACTIVITY_PERCENTAGE => the percentage of activities to include for the DFG of the single processes + - Parameters.PATHS_PERCENTAGE => the percentage of paths to include for the DFG of the single processes + - Parameters.DEPENDENCY_THRESHOLD => the dependency threshold to consider for the DFG of the single processes + - Parameters.MIN_FACT_EDGES_INTERLEAVINGS => factor that is multiplied to the minimum number of occurrences of + edges in the single processes, to decide if the interleavings edge should + be included. E.g., if 0.3 is provided, only interleavings edges having a frequency + of at least 0.3 * MIN_EDGE_COUNT_IN_PROCESSES are included. + Returns + ---------------- + digraph + Graphviz Digraph + """ + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + annotation = exec_utils.get_param_value(Parameters.ANNOTATION, parameters, "frequency") + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, parameters, "mean") + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + activity_percentage = exec_utils.get_param_value(Parameters.ACTIVITY_PERCENTAGE, parameters, 0.3) + paths_percentage = exec_utils.get_param_value(Parameters.PATHS_PERCENTAGE, parameters, 0.3) + dependency_threshold = exec_utils.get_param_value(Parameters.DEPENDENCY_THRESHOLD, parameters, 0.3) + min_fact_edges_interleavings = exec_utils.get_param_value(Parameters.MIN_FACT_EDGES_INTERLEAVINGS, parameters, 0.3) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Digraph("interleavings", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + viz.attr('node', shape='ellipse', fixedsize='false') + + viz.attr(rankdir=rankdir) + viz.format = image_format.replace("html", "plain-ext") + + freq_dfg1, perf_dfg1, sa1, ea1, act_count1 = __get_freq_perf_df(dataframe1, activity_key, aggregation_measure, + activity_percentage, paths_percentage, + dependency_threshold) + freq_dfg2, perf_dfg2, sa2, ea2, act_count2 = __get_freq_perf_df(dataframe2, activity_key, aggregation_measure, + activity_percentage, paths_percentage, + dependency_threshold) + + min_act_count = min(min(act_count1.values()), min(act_count2.values())) + max_act_count = max(max(act_count1.values()), max(act_count2.values())) + + min_edge_count = min([min(freq_dfg1.values()), min(freq_dfg2.values())]) + + interleavings_lr_frequency = interleavings[interleavings["@@direction"] == "LR"][ + ["@@source_activity", "@@target_activity"]].value_counts().to_dict() + interleavings_lr_performance = \ + interleavings[interleavings["@@direction"] == "LR"].groupby(["@@source_activity", "@@target_activity"])[ + "@@timestamp_diff"].agg(aggregation_measure).to_dict() + interleavings_rl_frequency = interleavings[interleavings["@@direction"] == "RL"][ + ["@@source_activity", "@@target_activity"]].value_counts().to_dict() + interleavings_rl_performance = \ + interleavings[interleavings["@@direction"] == "RL"].groupby(["@@source_activity", "@@target_activity"])[ + "@@timestamp_diff"].agg(aggregation_measure).to_dict() + + interleavings_lr_frequency = {x: y for x, y in interleavings_lr_frequency.items() if x[0] in act_count1 and x[ + 1] in act_count2 and y >= min_edge_count * min_fact_edges_interleavings} + interleavings_rl_frequency = {x: y for x, y in interleavings_rl_frequency.items() if x[0] in act_count2 and x[ + 1] in act_count1 and y >= min_edge_count * min_fact_edges_interleavings} + interleavings_lr_performance = {x: y for x, y in interleavings_lr_performance.items() if + x[0] in act_count1 and x[1] in act_count2 and x in interleavings_lr_frequency} + interleavings_rl_performance = {x: y for x, y in interleavings_rl_performance.items() if + x[0] in act_count2 and x[1] in act_count1 and x in interleavings_rl_frequency} + + min_edge_count = min([min(freq_dfg1.values()), min(freq_dfg2.values()), min(interleavings_lr_frequency.values()), + min(interleavings_rl_frequency.values()), min(sa1.values()), min(sa2.values()), + min(ea1.values()), min(ea2.values())]) + max_edge_count = max([max(freq_dfg1.values()), max(freq_dfg2.values()), max(interleavings_lr_frequency.values()), + max(interleavings_rl_frequency.values()), max(sa1.values()), max(sa2.values()), + max(ea1.values()), max(ea2.values())]) + + min_edge_perf = min([min(perf_dfg1.values()), min(perf_dfg2.values()), min(interleavings_lr_performance.values()), + min(interleavings_rl_performance.values())]) + max_edge_perf = max([max(perf_dfg1.values()), max(perf_dfg2.values()), max(interleavings_lr_performance.values()), + max(interleavings_rl_performance.values())]) + + nodes1 = {} + nodes2 = {} + + with viz.subgraph(name="First Model") as c1: + c1.attr(style='filled') + c1.attr(color='lightgray') + c1.attr(label="First Model") + + for act in act_count1: + act_uuid = str(uuid4()) + nodes1[act] = act_uuid + color = vis_utils.get_trans_freq_color(act_count1[act], min_act_count, max_act_count) + c1.node(act_uuid, label=act + "\n" + str(act_count1[act]), shape="box", style="filled", fillcolor=color) + + for edge in freq_dfg1: + if annotation == "frequency": + count = freq_dfg1[edge] + label = str(count) + penwidth = str(vis_utils.get_arc_penwidth(count, min_edge_count, max_edge_count)) + elif annotation == "performance": + perf = perf_dfg1[edge] + label = vis_utils.human_readable_stat(perf) + penwidth = str(vis_utils.get_arc_penwidth(perf, min_edge_perf, max_edge_perf)) + viz.edge(nodes1[edge[0]], nodes1[edge[1]], label=label, penwidth=penwidth) + + c1.node("@@startnode1", "<●>", shape='circle', fontsize="34", color="black", fontcolor="black") + c1.node("@@endnode1", "<■>", shape='doublecircle', fontsize="32", color="black", fontcolor="black") + + for sa in sa1: + penwidth = str(vis_utils.get_arc_penwidth(sa1[sa], min_edge_count, max_edge_count)) + label = str(sa1[sa]) if annotation == "frequency" else " " + viz.edge("@@startnode1", nodes1[sa], color="black", label=label, penwidth=penwidth) + + for ea in ea1: + penwidth = str(vis_utils.get_arc_penwidth(ea1[ea], min_edge_count, max_edge_count)) + label = str(ea1[ea]) if annotation == "frequency" else " " + viz.edge(nodes1[ea], "@@endnode1", color="black", label=label, penwidth=penwidth) + + with viz.subgraph(name="Second Model") as c2: + c2.attr(style='filled') + c2.attr(color='lightgray') + c2.attr(label="Second Model") + + for act in act_count2: + act_uuid = str(uuid4()) + nodes2[act] = act_uuid + color = vis_utils.get_trans_freq_color(act_count2[act], min_act_count, max_act_count) + c2.node(act_uuid, label=act + "\n" + str(act_count2[act]), shape="box", style="filled", fillcolor=color, + color="gray", fontcolor="gray") + + for edge in freq_dfg2: + if annotation == "frequency": + count = freq_dfg2[edge] + label = str(count) + penwidth = str(vis_utils.get_arc_penwidth(count, min_edge_count, max_edge_count)) + elif annotation == "performance": + perf = perf_dfg2[edge] + label = vis_utils.human_readable_stat(perf) + penwidth = str(vis_utils.get_arc_penwidth(perf, min_edge_perf, max_edge_perf)) + viz.edge(nodes2[edge[0]], nodes2[edge[1]], label=label, penwidth=penwidth, color="gray", fontcolor="gray") + + c2.node("@@startnode2", "<●>", shape='circle', fontsize="34", color="gray", fontcolor="gray") + c2.node("@@endnode2", "<■>", shape='doublecircle', fontsize="32", color="gray", fontcolor="gray") + + for sa in sa2: + penwidth = str(vis_utils.get_arc_penwidth(sa2[sa], min_edge_count, max_edge_count)) + label = str(sa2[sa]) if annotation == "frequency" else " " + viz.edge("@@startnode2", nodes2[sa], color="gray", label=label, penwidth=penwidth) + + for ea in ea2: + penwidth = str(vis_utils.get_arc_penwidth(ea2[ea], min_edge_count, max_edge_count)) + label = str(ea2[ea]) if annotation == "frequency" else " " + viz.edge(nodes2[ea], "@@endnode2", color="gray", label=label, penwidth=penwidth) + + for edge in interleavings_lr_frequency: + if annotation == "frequency": + count = interleavings_lr_frequency[edge] + label = str(count) + penwidth = str(vis_utils.get_arc_penwidth(count, min_edge_count, max_edge_count)) + elif annotation == "performance": + perf = interleavings_lr_performance[edge] + label = vis_utils.human_readable_stat(perf) + penwidth = str(vis_utils.get_arc_penwidth(perf, min_edge_perf, max_edge_perf)) + viz.edge(nodes1[edge[0]], nodes2[edge[1]], label=label, penwidth=penwidth, color="violet", fontcolor="violet", + style="dashed") + + for edge in interleavings_rl_frequency: + if annotation == "frequency": + count = interleavings_rl_frequency[edge] + label = str(count) + penwidth = str(vis_utils.get_arc_penwidth(count, min_edge_count, max_edge_count)) + elif annotation == "performance": + perf = interleavings_rl_frequency[edge] + label = vis_utils.human_readable_stat(perf) + penwidth = str(vis_utils.get_arc_penwidth(perf, min_edge_perf, max_edge_perf)) + viz.edge(nodes2[edge[0]], nodes1[edge[1]], label=label, penwidth=penwidth, color="violet", fontcolor="violet", + style="dashed") + + return viz diff --git a/pm4py/pm4py/visualization/ocel/interleavings/visualizer.py b/pm4py/pm4py/visualization/ocel/interleavings/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..49558b53a87f0d2ef9dab43dd960a673d5543393 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/interleavings/visualizer.py @@ -0,0 +1,96 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Digraph +from enum import Enum +from pm4py.util import exec_utils +from typing import Optional, Dict, Any +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.visualization.ocel.interleavings.variants import graphviz +import pandas as pd + + +class Variants(Enum): + GRAPHVIZ = graphviz + + +def apply(dataframe1: pd.DataFrame, dataframe2: pd.DataFrame, interleavings: pd.DataFrame, variant=Variants.GRAPHVIZ, + parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Visualizes the interleavings discovered between two different processes. + We suppose to provide both event logs, and the discovered interleavings. + The visualization includes the DFG of both processes, along with the arcs discovered between them. + Both frequency and performance visualization are available. + + Parameters + -------------------- + dataframe1 + Dataframe of the first process + dataframe2 + Dataframe of the second process + interleavings + Interleavings between the two considered processes + variant + Variant of the visualizer to apply, possible values: Variants.GRAPHVIZ + parameters + Variant-specific parameters + + Returns + ---------------- + digraph + Graphviz Digraph + """ + return exec_utils.get_variant(variant).apply(dataframe1, dataframe2, interleavings, parameters=parameters) + + +def save(gviz: Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + + +def view(gviz: Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/ocel/object_graph/__init__.py b/pm4py/pm4py/visualization/ocel/object_graph/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/object_graph/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/visualization/ocel/object_graph/variants/__init__.py b/pm4py/pm4py/visualization/ocel/object_graph/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..414b624299e6341a950e5e44d251e43fd5df8f57 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/object_graph/variants/__init__.py @@ -0,0 +1,16 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' diff --git a/pm4py/pm4py/visualization/ocel/object_graph/variants/graphviz.py b/pm4py/pm4py/visualization/ocel/object_graph/variants/graphviz.py new file mode 100644 index 0000000000000000000000000000000000000000..d45c02659008bd1b5dd8ac8bbbdf1019587e8c0c --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/object_graph/variants/graphviz.py @@ -0,0 +1,98 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import uuid +from typing import Optional, Dict, Any, Set, Tuple +from graphviz import Digraph, Graph +from enum import Enum +from pm4py.util import exec_utils +import tempfile +from pm4py.util import vis_utils, constants +from pm4py.objects.ocel.obj import OCEL + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + RANKDIR = "rankdir" + DIRECTED = "directed" + + +def ot_to_color(ot: str) -> str: + ot = int(hash(ot)) + num = [] + while len(num) < 6: + num.insert(0, ot % 16) + ot = ot // 16 + ret = "#" + "".join([vis_utils.get_corr_hex(x) for x in num]) + return ret + + +def apply(ocel: OCEL, graph: Set[Tuple[str, str]], parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Visualizes an object graph + + Parameters + ------------- + ocel + Object-centric event log + graph + Object graph + parameters + Variant-specific parameters: + - Parameters.FORMAT => the format of the visualization ("png", "svg", ...) + - Parameters.BGCOLOR => the background color + - Parameters.RANKDIR => the rank direction (LR = left-right, TB = top-bottom) + - Parameters.DIRECTED => boolean value (draws a directed or undirected graph) + + Returns + ------------- + gviz + Graphviz object + """ + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, "transparent") + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + directed = exec_utils.get_param_value(Parameters.DIRECTED, parameters, True) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + if directed: + viz = Digraph("ograph", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + else: + viz = Graph("ograph", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + viz.attr('node', shape='ellipse', fixedsize='false') + + ob_type = ocel.objects.groupby(ocel.object_id_column).first()[ocel.object_type_column].to_dict() + + nodes = set(x[0] for x in graph).union(set(x[1] for x in graph)) + nodes_dict = {} + for n in nodes: + v = str(uuid.uuid4()) + nodes_dict[n] = v + viz.node(v, label=n, fontcolor=ot_to_color(ob_type[n]), color=ot_to_color(ob_type[n])) + + for e in graph: + viz.edge(nodes_dict[e[0]], nodes_dict[e[1]]) + + viz.attr(rankdir=rankdir) + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/ocel/object_graph/visualizer.py b/pm4py/pm4py/visualization/ocel/object_graph/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..d16fcb3b19b8021d201d48fae6ec0344d5f6185d --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/object_graph/visualizer.py @@ -0,0 +1,92 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Digraph +from enum import Enum +from pm4py.util import exec_utils +from pm4py.visualization.ocel.object_graph.variants import graphviz +from typing import Optional, Dict, Any, Set, Tuple +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.objects.ocel.obj import OCEL + + +class Variants(Enum): + GRAPHVIZ = graphviz + + +def apply(ocel: OCEL, graph: Set[Tuple[str, str]], variant=Variants.GRAPHVIZ, parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Visualizes an object graph + + Parameters + ----------------- + ocel + Object-centric event log + graph + Object graph + variant + Variant of the visualization to use, possible values: + - Variants.GRAPHVIZ + parameters + Variant-specific parameters + + Returns + ----------------- + gviz + Graphviz object + """ + return exec_utils.get_variant(variant).apply(ocel, graph, parameters=parameters) + + +def save(gviz: Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz: Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/ocel/ocdfg/__init__.py b/pm4py/pm4py/visualization/ocel/ocdfg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3d11d8f31412098cc9f05383f25d8eda3f43990b --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/ocdfg/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.ocel.ocdfg import visualizer, variants diff --git a/pm4py/pm4py/visualization/ocel/ocdfg/variants/__init__.py b/pm4py/pm4py/visualization/ocel/ocdfg/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..541f0a8b793dd08fda6695ae0864272812b080b8 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/ocdfg/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.ocel.ocdfg.variants import classic diff --git a/pm4py/pm4py/visualization/ocel/ocdfg/variants/classic.py b/pm4py/pm4py/visualization/ocel/ocdfg/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..b881f0b9799f7531730bdcae76150743d334f6f4 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/ocdfg/variants/classic.py @@ -0,0 +1,291 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from typing import Optional, Dict, Any +from graphviz import Digraph +from enum import Enum +from pm4py.util import exec_utils, constants +import tempfile +from uuid import uuid4 +from pm4py.util import vis_utils +from statistics import mean, median + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + RANKDIR = "rankdir" + ACT_METRIC = "act_metric" + EDGE_METRIC = "edge_metric" + ACT_THRESHOLD = "act_threshold" + EDGE_THRESHOLD = "edge_threshold" + ANNOTATION = "annotation" + PERFORMANCE_AGGREGATION_MEASURE = "aggregationMeasure" + + +def ot_to_color(ot: str) -> str: + ot = int(hash(ot)) + num = [] + while len(num) < 6: + num.insert(0, ot % 16) + ot = ot // 16 + ret = "#" + "".join([vis_utils.get_corr_hex(x) for x in num]) + return ret + + +def add_activity(G: Digraph, act, freq, act_prefix, nodes, annotation, min_freq, max_freq): + """ + Adds an activity node to the graph + """ + act_uuid = str(uuid4()) + nodes[act] = act_uuid + fillcolor = vis_utils.get_trans_freq_color(freq, min_freq, max_freq) + if annotation == "frequency": + G.node(act_uuid, label=act + "\n" + act_prefix + str(freq), shape="box", style="filled", fillcolor=fillcolor) + else: + G.node(act_uuid, label=act, shape="box") + + +def add_frequency_edge(G: Digraph, ot, act1, act2, freq, edge_prefix, nodes, min_freq, max_freq): + """ + Adds a edge (frequency annotation) + """ + otc = ot_to_color(ot) + act_uuid1 = nodes[act1] + act_uuid2 = nodes[act2] + penwidth = vis_utils.get_arc_penwidth(freq, min_freq, max_freq) + G.edge(act_uuid1, act_uuid2, label=ot + " " + edge_prefix + str(freq), fontsize="8", penwidth=str(penwidth), + color=otc, fontcolor=otc) + + +def add_performance_edge(G: Digraph, ot, act1, act2, perf, edge_prefix, nodes, aggregation_measure): + """ + Adds an edge (performance annotation) + """ + otc = ot_to_color(ot) + if aggregation_measure == "median": + perf = median(perf) + elif aggregation_measure == "min": + perf = min(perf) + elif aggregation_measure == "max": + perf = max(perf) + elif aggregation_measure == "sum": + perf = sum(perf) + else: + perf = mean(perf) + act_uuid1 = nodes[act1] + act_uuid2 = nodes[act2] + G.edge(act_uuid1, act_uuid2, label=ot + " " + edge_prefix + vis_utils.human_readable_stat(perf), fontsize="8", + color=otc, fontcolor=otc) + + +def add_start_node(G: Digraph, ot, act, freq, edge_prefix, nodes, annotation, min_freq, max_freq): + """ + Adds a start node to the graph + """ + otc = ot_to_color(ot) + act_uuid = nodes[act] + start_ot = "start_node@#@#" + ot + if start_ot not in nodes: + endpoint_uuid = str(uuid4()) + nodes[start_ot] = endpoint_uuid + G.node(endpoint_uuid, label=ot, shape="ellipse", style="filled", fillcolor=otc) + start_ot_uuid = nodes[start_ot] + edge_label = "" + if annotation == "frequency": + edge_label = ot + " " + edge_prefix + str(freq) + penwidth = vis_utils.get_arc_penwidth(freq, min_freq, max_freq) + G.edge(start_ot_uuid, act_uuid, label=edge_label, fontsize="8", penwidth=str(penwidth), fontcolor=otc, color=otc) + + +def add_end_node(G: Digraph, ot, act, freq, edge_prefix, nodes, annotation, min_freq, max_freq): + """ + Adds an end node to the graph + """ + otc = ot_to_color(ot) + act_uuid = nodes[act] + end_ot = "end_node@#@#" + ot + if end_ot not in nodes: + endpoint_uuid = str(uuid4()) + nodes[end_ot] = endpoint_uuid + G.node(endpoint_uuid, label=ot, shape="underline", fontcolor=otc) + end_ot_uuid = nodes[end_ot] + edge_label = "" + if annotation == "frequency": + edge_label = ot + " " + edge_prefix + str(freq) + penwidth = vis_utils.get_arc_penwidth(freq, min_freq, max_freq) + G.edge(act_uuid, end_ot_uuid, label=edge_label, fontsize="8", penwidth=str(penwidth), fontcolor=otc, color=otc) + + +def apply(ocdfg: Dict[str, Any], parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Visualizes an OC-DFG as a Graphviz di-graph + + Parameters + --------------- + ocdfg + OC-DFG + parameters + Parameters of the algorithm: + - Parameters.FORMAT => the format of the output visualization (default: "png") + - Parameters.BGCOLOR => the default background color (default: "bgcolor") + - Parameters.RANKDIR => direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + - Parameters.ACT_METRIC => the metric to use for the activities. Available values: + - "events" => number of events (default) + - "unique_objects" => number of unique objects + - "total_objects" => number of total objects + - Parameters.EDGE_METRIC => the metric to use for the edges. Available values: + - "event_couples" => number of event couples (default) + - "unique_objects" => number of unique objects + - "total_objects" => number of total objects + - Parameters.ACT_THRESHOLD => the threshold to apply on the activities frequency (default: 0). Only activities + having a frequency >= than this are kept in the graph. + - Parameters.EDGE_THRESHOLD => the threshold to apply on the edges frequency (default 0). Only edges + having a frequency >= than this are kept in the graph. + - Parameters.ANNOTATION => the annotation to use for the visualization. Values: + - "frequency": frequency annotation + - "performance": performance annotation + - Parameters.PERFORMANCE_AGGREGATION_MEASURE => the aggregation measure to use for the performance: + - mean + - median + - min + - max + - sum + + Returns + --------------- + viz + Graphviz DiGraph + """ + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + act_metric = exec_utils.get_param_value(Parameters.ACT_METRIC, parameters, "events") + edge_metric = exec_utils.get_param_value(Parameters.EDGE_METRIC, parameters, "event_couples") + act_threshold = exec_utils.get_param_value(Parameters.ACT_THRESHOLD, parameters, 0) + edge_threshold = exec_utils.get_param_value(Parameters.EDGE_THRESHOLD, parameters, 0) + annotation = exec_utils.get_param_value(Parameters.ANNOTATION, parameters, "frequency") + performance_aggregation_measure = exec_utils.get_param_value(Parameters.PERFORMANCE_AGGREGATION_MEASURE, parameters, + "mean") + + act_count = {} + act_ot_count = {} + sa_count = {} + ea_count = {} + act_prefix = "" + edges_count = {} + edges_performance = {} + edge_prefix = "" + + if act_metric == "events": + act_count = ocdfg["activities_indep"]["events"] + act_ot_count = ocdfg["activities_ot"]["events"] + sa_count = ocdfg["start_activities"]["events"] + ea_count = ocdfg["end_activities"]["events"] + act_prefix = "E=" + elif act_metric == "unique_objects": + act_count = ocdfg["activities_indep"]["unique_objects"] + act_ot_count = ocdfg["activities_ot"]["unique_objects"] + sa_count = ocdfg["start_activities"]["unique_objects"] + ea_count = ocdfg["end_activities"]["unique_objects"] + act_prefix = "UO=" + elif act_metric == "total_objects": + act_count = ocdfg["activities_indep"]["total_objects"] + act_ot_count = ocdfg["activities_ot"]["total_objects"] + sa_count = ocdfg["start_activities"]["total_objects"] + ea_count = ocdfg["end_activities"]["total_objects"] + act_prefix = "TO=" + + if edge_metric == "event_couples": + edges_count = ocdfg["edges"]["event_couples"] + edges_performance = ocdfg["edges_performance"]["event_couples"] + edge_prefix = "EC=" + elif edge_metric == "unique_objects": + edges_count = ocdfg["edges"]["unique_objects"] + edge_prefix = "UO=" + elif edge_metric == "total_objects": + edges_count = ocdfg["edges"]["total_objects"] + edges_performance = ocdfg["edges_performance"]["total_objects"] + edge_prefix = "TO=" + + if annotation == "performance" and edge_metric == "unique_objects": + raise Exception("unsupported performance visualization for unique objects!") + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Digraph("ocdfg", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + viz.attr('node', shape='ellipse', fixedsize='false') + + min_edges_count = {} + max_edges_count = {} + + for ot in edges_count: + all_edges_count = [len(y) for y in edges_count[ot].values()] + min_edges_count[ot] = min(all_edges_count) + max_edges_count[ot] = max(all_edges_count) + all_sa_count = [len(y) for y in sa_count[ot].values()] + min_edges_count[ot] = min(min(all_sa_count), min_edges_count[ot]) + max_edges_count[ot] = max(max(all_sa_count), max_edges_count[ot]) + all_ea_count = [len(y) for y in ea_count[ot].values()] + min_edges_count[ot] = min(min(all_ea_count), min_edges_count[ot]) + max_edges_count[ot] = max(max(all_ea_count), max_edges_count[ot]) + + act_count_values = [len(y) for y in act_count.values()] + min_act_count = min(act_count_values) + max_act_count = max(act_count_values) + + nodes = {} + for act in act_count: + if len(act_count[act]) >= act_threshold: + add_activity(viz, act, len(act_count[act]), act_prefix, nodes, annotation, min_act_count, max_act_count) + + for ot in edges_count: + for act_cou in edges_count[ot]: + if act_cou[0] in nodes and act_cou[1] in nodes: + if len(edges_count[ot][act_cou]) >= edge_threshold: + if annotation == "frequency": + add_frequency_edge(viz, ot, act_cou[0], act_cou[1], len(edges_count[ot][act_cou]), edge_prefix, + nodes, min_edges_count[ot], max_edges_count[ot]) + elif annotation == "performance": + add_performance_edge(viz, ot, act_cou[0], act_cou[1], edges_performance[ot][act_cou], + edge_prefix, nodes, performance_aggregation_measure) + + for ot in sa_count: + for act in sa_count[ot]: + if act in nodes: + if len(sa_count[ot][act]) >= edge_threshold: + miec = min_edges_count[ot] if ot in min_edges_count else len(sa_count[ot][act]) + maec = max_edges_count[ot] if ot in max_edges_count else len(sa_count[ot][act]) + add_start_node(viz, ot, act, len(sa_count[ot][act]), edge_prefix, nodes, annotation, + miec, maec) + + for ot in ea_count: + for act in ea_count[ot]: + if act in nodes: + if len(ea_count[ot][act]) >= edge_threshold: + miec = min_edges_count[ot] if ot in min_edges_count else len(ea_count[ot][act]) + maec = max_edges_count[ot] if ot in max_edges_count else len(ea_count[ot][act]) + add_end_node(viz, ot, act, len(ea_count[ot][act]), edge_prefix, nodes, annotation, + miec, maec) + + viz.attr(rankdir=rankdir) + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/ocel/ocdfg/visualizer.py b/pm4py/pm4py/visualization/ocel/ocdfg/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..6f424ba91a70e4a4b00048a46d3eff296cb76542 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/ocdfg/visualizer.py @@ -0,0 +1,89 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Digraph +from enum import Enum +from pm4py.util import exec_utils +from pm4py.visualization.ocel.ocdfg.variants import classic +from typing import Optional, Dict, Any +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave + + +class Variants(Enum): + CLASSIC = classic + + +def apply(ocdfg: Dict[str, Any], variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Visualizes an OC-DFG using one of the provided visualizations. + + Parameters + ---------------- + ocdfg + Object-centric directly-follows graph + variant + Available variants. Possible values: + - Variants.CLASSIC + parameters + Variant-specific parameters + + Returns + ---------------- + viz + Graphviz DiGraph + """ + return exec_utils.get_variant(variant).apply(ocdfg, parameters) + + +def save(gviz: Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz: Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/ocel/ocpn/__init__.py b/pm4py/pm4py/visualization/ocel/ocpn/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a717e57b487c989538573e7ccca3fe39b6cf55d1 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/ocpn/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.ocel.ocpn import visualizer, variants diff --git a/pm4py/pm4py/visualization/ocel/ocpn/variants/__init__.py b/pm4py/pm4py/visualization/ocel/ocpn/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..705e142d630cb4d212aa5941c1888e22619bfbea --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/ocpn/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.ocel.ocpn.variants import wo_decoration diff --git a/pm4py/pm4py/visualization/ocel/ocpn/variants/wo_decoration.py b/pm4py/pm4py/visualization/ocel/ocpn/variants/wo_decoration.py new file mode 100644 index 0000000000000000000000000000000000000000..5f7795241b13fc5e1d39eca5678648be40a553a4 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/ocpn/variants/wo_decoration.py @@ -0,0 +1,148 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import uuid +from typing import Optional, Dict, Any +from graphviz import Digraph +from enum import Enum +from pm4py.util import exec_utils +import tempfile +from pm4py.util import vis_utils, constants +from pm4py.objects.petri_net.obj import PetriNet + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + RANKDIR = "rankdir" + + +def ot_to_color(ot: str) -> str: + ot = int(hash(ot)) + num = [] + while len(num) < 6: + num.insert(0, ot % 16) + ot = ot // 16 + ret = "#" + "".join([vis_utils.get_corr_hex(x) for x in num]) + return ret + + +def apply(ocpn: Dict[str, Any], parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Obtains a visualization of the provided object-centric Petri net (without decoration). + + Reference paper: van der Aalst, Wil MP, and Alessandro Berti. "Discovering object-centric Petri nets." Fundamenta informaticae 175.1-4 (2020): 1-40. + + Parameters + ---------------- + ocpn + Object-centric Petri net + variant + Variant of the algorithm to be used + parameters + Variant-specific parameters: + - Parameters.FORMAT => the format of the visualization ("png", "svg", ...) + - Parameters.BGCOLOR => the background color + - Parameters.RANKDIR => the rank direction (LR = left-right, TB = top-bottom) + + Returns + --------------- + gviz + Graphviz digraph + """ + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Digraph("ocdfg", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + viz.attr('node', shape='ellipse', fixedsize='false') + + activities_map = {} + transition_map = {} + places = {} + + for act in ocpn["activities"]: + activities_map[act] = str(uuid.uuid4()) + viz.node(activities_map[act], label=act, shape="box") + + for ot in ocpn["petri_nets"]: + otc = ot_to_color(ot) + net, im, fm = ocpn["petri_nets"][ot] + all_places_diagn = {} + all_trans_diagn = {} + if ot in ocpn["tbr_results"]: + all_places_diagn = ocpn["tbr_results"][ot][0] + all_trans_diagn = ocpn["tbr_results"][ot][1] + + for place in net.places: + place_id = str(uuid.uuid4()) + places[place] = place_id + place_label = " " + place_shape = "circle" + place_fontcolor = None + place_fillcolor = otc + + if place in im: + place_label = ot + place_shape = "ellipse" + elif place in fm: + place_label = ot + place_shape = "underline" + place_fontcolor = otc + place_fillcolor = None + + # if the place has some TBR diagnostics, override the label in any case + if place in all_places_diagn: + this_diagn = all_places_diagn[place] + place_label = "p=%d m=%d\nc=%d r=%d" % ( + this_diagn['p'], this_diagn['m'], this_diagn['c'], this_diagn['r']) + + viz.node(places[place], label=place_label, shape=place_shape, style="filled" if place_fillcolor is not None else None, fillcolor=place_fillcolor, fontcolor=place_fontcolor) + + for trans in net.transitions: + if trans.label is not None: + transition_map[trans] = activities_map[trans.label] + else: + transition_map[trans] = str(uuid.uuid4()) + viz.node(transition_map[trans], label=" ", shape="box", style="filled", fillcolor=otc) + + for arc in net.arcs: + arc_label = " " + if type(arc.source) is PetriNet.Place: + is_double = arc.target.label in ocpn["double_arcs_on_activity"][ot] and \ + ocpn["double_arcs_on_activity"][ot][arc.target.label] + penwidth = "4.0" if is_double else "1.0" + if arc.target in all_trans_diagn: + arc_label = str(all_trans_diagn[arc.target]) + viz.edge(places[arc.source], transition_map[arc.target], color=otc, penwidth=penwidth, label=arc_label) + elif type(arc.source) is PetriNet.Transition: + is_double = arc.source.label in ocpn["double_arcs_on_activity"][ot] and \ + ocpn["double_arcs_on_activity"][ot][arc.source.label] + penwidth = "4.0" if is_double else "1.0" + if arc.source in all_trans_diagn: + arc_label = str(all_trans_diagn[arc.source]) + viz.edge(transition_map[arc.source], places[arc.target], color=otc, penwidth=penwidth, label=arc_label) + + viz.attr(rankdir=rankdir) + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/ocel/ocpn/visualizer.py b/pm4py/pm4py/visualization/ocel/ocpn/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..aaeb0bb96bb4e2d78d8bc265b4be8246381f5da5 --- /dev/null +++ b/pm4py/pm4py/visualization/ocel/ocpn/visualizer.py @@ -0,0 +1,90 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from graphviz import Digraph +from enum import Enum +from pm4py.util import exec_utils +from pm4py.visualization.ocel.ocpn.variants import wo_decoration +from typing import Optional, Dict, Any +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave + + +class Variants(Enum): + WO_DECORATION = wo_decoration + + +def apply(ocpn: Dict[str, Any], variant=Variants.WO_DECORATION, parameters: Optional[Dict[Any, Any]] = None) -> Digraph: + """ + Obtains a visualization of the provided object-centric Petri net + + Reference paper: van der Aalst, Wil MP, and Alessandro Berti. "Discovering object-centric Petri nets." Fundamenta informaticae 175.1-4 (2020): 1-40. + + Parameters + ---------------- + ocpn + Object-centric Petri net + variant + Variant of the algorithm to be used + parameters + Variant-specific parameters + + Returns + --------------- + gviz + Graphviz digraph + """ + return exec_utils.get_variant(variant).apply(ocpn, parameters=parameters) + + +def save(gviz: Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz: Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/performance_spectrum/__init__.py b/pm4py/pm4py/visualization/performance_spectrum/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0b402d0d787c521cf353dcf5901e65e7327b0b11 --- /dev/null +++ b/pm4py/pm4py/visualization/performance_spectrum/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.performance_spectrum import visualizer, variants diff --git a/pm4py/pm4py/visualization/performance_spectrum/variants/__init__.py b/pm4py/pm4py/visualization/performance_spectrum/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..87bdf092375b45e1e8a1de5e8a043475d5f5bbf4 --- /dev/null +++ b/pm4py/pm4py/visualization/performance_spectrum/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.performance_spectrum.variants import neato diff --git a/pm4py/pm4py/visualization/performance_spectrum/variants/neato.py b/pm4py/pm4py/visualization/performance_spectrum/variants/neato.py new file mode 100644 index 0000000000000000000000000000000000000000..5eb74fd6ca8eb62e5440bd66345c3de1753b4ee7 --- /dev/null +++ b/pm4py/pm4py/visualization/performance_spectrum/variants/neato.py @@ -0,0 +1,162 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import math +import os +import tempfile +import uuid +from datetime import datetime +from enum import Enum +from typing import Optional, Dict, Any, Union + +import matplotlib as mpl +import matplotlib.cm as cm + +from pm4py.util import exec_utils +from pm4py.util.dt_parsing.variants import strpfromiso +from pm4py.util.colors import get_string_from_int_below_255 + + +class Parameters(Enum): + FORMAT = "format" + ACT_DIVIDER_SPACE = "act_divider_space" + DATE_DIVIDER_SPACE = "date_divider_space" + OVERALL_LENGTH_X = "overall_length_x" + N_DIV_DATES = "n_div_dates" + PERC_PATHS = "perc_paths" + LAYOUT_EXT_MULTIPLIER = "layout_ext_multiplier" + + +def give_color_to_line(dir: float) -> str: + """ + Gives a gradient color to the line + + Parameters + ---------------- + dir + Intensity of the difference (number between 0 and 1; 0=min difference, 1=max difference) + + Returns + ---------------- + color + Gradient color + """ + dir = 0.5 + 0.5 * dir + norm = mpl.colors.Normalize(vmin=0, vmax=1) + nodes = [0.0, 0.01, 0.25, 0.4, 0.45, 0.55, 0.75, 0.99, 1.0] + colors = ["deepskyblue", "skyblue", "lightcyan", "lightgray", "gray", "lightgray", "mistyrose", "salmon", "tomato"] + cmap = mpl.colors.LinearSegmentedColormap.from_list("mycmap2", list(zip(nodes, colors))) + # cmap = cm.plasma + m = cm.ScalarMappable(norm=norm, cmap=cmap) + rgba = m.to_rgba(dir) + r = get_string_from_int_below_255(math.ceil(rgba[0] * 255.0)) + g = get_string_from_int_below_255(math.ceil(rgba[1] * 255.0)) + b = get_string_from_int_below_255(math.ceil(rgba[2] * 255.0)) + return "#" + r + g + b + + +def apply(perf_spectrum: Dict[str, Any], parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> str: + """ + Construct the performance spectrum visualization + + Parameters + ---------------- + perf_spectrum + Performance spectrum + parameters + Parameters of the algorithm, including: + - Parameters.FORMAT => format of the output (svg, png, ...) + - Parameters.ACT_DIVIDER_SPACE => space between the activities in the spectrum + - Parameters.DATE_DIVIDER_SPACE => space between the lines and the dates + - Parmaeters.OVERALL_LENGTH_X => length of the X-line + - Parameters.N_DIV_DATES => specifies the number of intermediate dates reported + - Parameters.PERC_PATHS => (if provided) filter the (overall) most long paths + + Returns + --------------- + file_path + Path containing the visualization + """ + if parameters is None: + parameters = {} + + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + act_divider = exec_utils.get_param_value(Parameters.ACT_DIVIDER_SPACE, parameters, 3.0) + date_divider = exec_utils.get_param_value(Parameters.DATE_DIVIDER_SPACE, parameters, 1.0) + overall_length = exec_utils.get_param_value(Parameters.OVERALL_LENGTH_X, parameters, 10.0) + n_div = exec_utils.get_param_value(Parameters.N_DIV_DATES, parameters, 2) + perc_paths = exec_utils.get_param_value(Parameters.PERC_PATHS, parameters, 1.0) + layout_ext_multiplier = exec_utils.get_param_value(Parameters.LAYOUT_EXT_MULTIPLIER, parameters, 100) + + output_file_gv = tempfile.NamedTemporaryFile(suffix=".gv") + output_file_gv.close() + + output_file_img = tempfile.NamedTemporaryFile(suffix="." + format) + output_file_img.close() + + lines = [] + lines.append("graph G {") + + min_x = min(x[0] for x in perf_spectrum["points"]) + max_x = max(x[-1] for x in perf_spectrum["points"]) + all_diffs = [x[i + 1] - x[i] for x in perf_spectrum["points"] for i in range(len(x) - 1)] + min_diff = min(all_diffs) + max_diff = max(all_diffs) + + points = sorted(perf_spectrum["points"], key=lambda x: x[-1] - x[0], reverse=True) + points = points[:math.ceil(perc_paths * len(points))] + + for polyline in points: + this_pts = [] + for i, p in enumerate(polyline): + p_id = "n" + str(uuid.uuid4()).replace("-", "") + "e" + first_coord = (p - min_x) / (max_x - min_x) * overall_length + second_coord = act_divider * (len(perf_spectrum["list_activities"]) - i - 1) + lines.append( + "%s [label=\"\", pos=\"%.10f,%.10f!\", shape=none, width=\"0px\", height=\"0px\"];" % (p_id, first_coord*layout_ext_multiplier, second_coord*layout_ext_multiplier)) + this_pts.append(p_id) + for i in range(len(this_pts) - 1): + diff = polyline[i + 1] - polyline[i] + color = give_color_to_line((diff - min_diff) / (max_diff - min_diff)) + lines.append("%s -- %s [ color=\"%s\" ];" % (this_pts[i], this_pts[i + 1], color)) + + for i, act in enumerate(perf_spectrum["list_activities"]): + second_coord = act_divider * (len(perf_spectrum["list_activities"]) - i - 1) + a_id = "n" + str(uuid.uuid4()).replace("-", "") + "e" + lines.append("%s [label=\"%s\", pos=\"%.10f,%.10f!\", shape=none, width=\"0px\", height=\"0px\"];" % ( + a_id, act, overall_length*layout_ext_multiplier, second_coord*layout_ext_multiplier)) + s_id = "n" + str(uuid.uuid4()).replace("-", "") + "e" + lines.append("%s [label=\"\", pos=\"0,%.10f!\", shape=none, width=\"0px\", height=\"0px\"];" % (s_id, second_coord*layout_ext_multiplier)) + lines.append("%s -- %s [ color=\"black\" ];" % (s_id, a_id)) + if i == len(perf_spectrum["list_activities"]) - 1: + for j in range(n_div + 1): + pos = float(j * overall_length) / float(n_div) + tst = min_x + float(j) / float(n_div) * (max_x - min_x) + dt = strpfromiso.fix_naivety(datetime.fromtimestamp(tst)) + n_id = "n" + str(uuid.uuid4()).replace("-", "") + "e" + lines.append("%s [label=\"%s\", pos=\"%.10f,%.10f!\", shape=none, width=\"0px\", height=\"0px\"];" % ( + n_id, str(dt), pos*layout_ext_multiplier, (second_coord - date_divider)*layout_ext_multiplier)) + + lines.append("}") + lines = "\n".join(lines) + + F = open(output_file_gv.name, "w") + F.write(lines) + F.close() + + os.system("neato -n1 -T" + format + " " + output_file_gv.name + " > " + output_file_img.name) + + return output_file_img.name diff --git a/pm4py/pm4py/visualization/performance_spectrum/visualizer.py b/pm4py/pm4py/visualization/performance_spectrum/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaec0b84fcb355635cb3256c48b40cd645ce0d2 --- /dev/null +++ b/pm4py/pm4py/visualization/performance_spectrum/visualizer.py @@ -0,0 +1,120 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import shutil +from enum import Enum +from typing import Optional, Dict, Any + +from pm4py.util import exec_utils, vis_utils, constants +from pm4py.visualization.performance_spectrum.variants import neato + + +class Variants(Enum): + NEATO = neato + + +def apply(perf_spectrum: Dict[str, Any], variant=Variants.NEATO, parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Construct the performance spectrum visualization + + Parameters + ---------------- + perf_spectrum + Performance spectrum + variant + Variant of the visualization to use: + - NEATO: using the Graphviz Neato layouter + parameters + Variant-specific parameters + + Returns + --------------- + file_path + Path containing the visualization + """ + return exec_utils.get_variant(variant).apply(perf_spectrum, parameters=parameters) + + +def view(figure: str): + """ + Views the performance spectrum + + Parameters + --------------- + figure + Path containing the visualization + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + if constants.DEFAULT_GVIZ_VIEW == "matplotlib_view": + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + img = mpimg.imread(figure) + plt.axis('off') + plt.tight_layout(pad=0, w_pad=0, h_pad=0) + plt.imshow(img) + plt.show() + return + + if vis_utils.check_visualization_inside_jupyter(): + vis_utils.view_image_in_jupyter(figure) + else: + vis_utils.open_opsystem_image_viewer(figure) + + +def save(figure: str, output_file_path: str): + """ + Saves the performance spectrum at the specified path + + Parameters + --------------- + figure + Path containing the visualization + output_file_path + Path into which the image should be saved + """ + shutil.copyfile(figure, output_file_path) + return "" + + +def serialize(figure: str): + """ + Serializes the performance spectrum visualization + + Parameters + --------------- + figure + Path containing the visualization + """ + with open(figure, "rb") as f: + return f.read() + + +def matplotlib_view(figure: str): + """ + Views the performance spectrum using Matplotlib + + Parameters + --------------- + figure + Path containing the visualization + """ + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + + img = mpimg.imread(figure) + plt.imshow(img) + plt.show() diff --git a/pm4py/pm4py/visualization/petri_net/__init__.py b/pm4py/pm4py/visualization/petri_net/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0599e1edffb0a77de135d3a5636a2c673ec72c24 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.petri_net import visualizer, common, util, variants diff --git a/pm4py/pm4py/visualization/petri_net/common/__init__.py b/pm4py/pm4py/visualization/petri_net/common/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2ce86b0d4fbfabb7b4743840f21f5961cede2577 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/common/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.petri_net.common import visualize diff --git a/pm4py/pm4py/visualization/petri_net/common/visualize.py b/pm4py/pm4py/visualization/petri_net/common/visualize.py new file mode 100644 index 0000000000000000000000000000000000000000..bd19d215b657e8f326137024c4da01cdb759e53c --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/common/visualize.py @@ -0,0 +1,229 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import tempfile + +from graphviz import Digraph + +from pm4py.objects.petri_net.obj import Marking +from pm4py.objects.petri_net import properties as petri_properties +from pm4py.util import exec_utils, constants +from enum import Enum +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_TIMESTAMP_KEY + + +class Parameters(Enum): + FORMAT = "format" + DEBUG = "debug" + RANKDIR = "set_rankdir" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + AGGREGATION_MEASURE = "aggregationMeasure" + FONT_SIZE = "font_size" + BGCOLOR = "bgcolor" + DECORATIONS = "decorations" + + +def apply(net, initial_marking, final_marking, decorations=None, parameters=None): + """ + Apply method for Petri net visualization (it calls the + graphviz_visualization method) + + Parameters + ----------- + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + decorations + Decorations for elements in the Petri net + parameters + Algorithm parameters + + Returns + ----------- + viz + Graph object + """ + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + debug = exec_utils.get_param_value(Parameters.DEBUG, parameters, False) + set_rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, None) + font_size = exec_utils.get_param_value(Parameters.FONT_SIZE, parameters, "12") + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + + if decorations is None: + decorations = exec_utils.get_param_value(Parameters.DECORATIONS, parameters, None) + + return graphviz_visualization(net, image_format=image_format, initial_marking=initial_marking, + final_marking=final_marking, decorations=decorations, debug=debug, + set_rankdir=set_rankdir, font_size=font_size, bgcolor=bgcolor) + + +def graphviz_visualization(net, image_format="png", initial_marking=None, final_marking=None, decorations=None, + debug=False, set_rankdir=None, font_size="12", bgcolor=constants.DEFAULT_BGCOLOR): + """ + Provides visualization for the petrinet + + Parameters + ---------- + net: :class:`pm4py.entities.petri.petrinet.PetriNet` + Petri net + image_format + Format that should be associated to the image + initial_marking + Initial marking of the Petri net + final_marking + Final marking of the Petri net + decorations + Decorations of the Petri net (says how element must be presented) + debug + Enables debug mode + set_rankdir + Sets the rankdir to LR (horizontal layout) + + Returns + ------- + viz : + Returns a graph object + """ + if initial_marking is None: + initial_marking = Marking() + if final_marking is None: + final_marking = Marking() + if decorations is None: + decorations = {} + + font_size = str(font_size) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Digraph(net.name, filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + if set_rankdir: + viz.graph_attr['rankdir'] = set_rankdir + else: + viz.graph_attr['rankdir'] = 'LR' + + # transitions + viz.attr('node', shape='box') + for t in net.transitions: + label = decorations[t]["label"] if t in decorations and "label" in decorations[t] else "" + fillcolor = decorations[t]["color"] if t in decorations and "color" in decorations[t] else None + textcolor = "black" + + if t.label is not None and not label: + label = t.label + if debug: + label = t.name + label = str(label) + + if fillcolor is None: + if t.label is None: + fillcolor = "black" + if label: + textcolor = "white" + else: + fillcolor = bgcolor + + viz.node(str(id(t)), label, style='filled', fillcolor=fillcolor, border='1', fontsize=font_size, fontcolor=textcolor) + + if petri_properties.TRANS_GUARD in t.properties: + guard = t.properties[petri_properties.TRANS_GUARD] + viz.node(str(id(t))+"guard", style="dotted", label=guard) + viz.edge(str(id(t))+"guard", str(id(t)), arrowhead="none", style="dotted") + + # places + # add places, in order by their (unique) name, to avoid undeterminism in the visualization + places_sort_list_im = sorted([x for x in list(net.places) if x in initial_marking], key=lambda x: x.name) + places_sort_list_fm = sorted([x for x in list(net.places) if x in final_marking and not x in initial_marking], + key=lambda x: x.name) + places_sort_list_not_im_fm = sorted( + [x for x in list(net.places) if x not in initial_marking and x not in final_marking], key=lambda x: x.name) + # making the addition happen in this order: + # - first, the places belonging to the initial marking + # - after, the places not belonging neither to the initial marking and the final marking + # - at last, the places belonging to the final marking (but not to the initial marking) + # in this way, is more probable that the initial marking is on the left and the final on the right + places_sort_list = places_sort_list_im + places_sort_list_not_im_fm + places_sort_list_fm + + for p in places_sort_list: + label = decorations[p]["label"] if p in decorations and "label" in decorations[p] else "" + fillcolor = decorations[p]["color"] if p in decorations and "color" in decorations[p] else bgcolor + + label = str(label) + if p in initial_marking: + if initial_marking[p] == 1: + viz.node(str(id(p)), "<●>", fontsize="34", fixedsize='true', shape="circle", width='0.75', style="filled", fillcolor=fillcolor) + else: + marking_label = str(initial_marking[p]) + if len(marking_label) >= 3: + viz.node(str(id(p)), marking_label, fontsize="34", shape="ellipse", style="filled", fillcolor=fillcolor) + else: + viz.node(str(id(p)), marking_label, fontsize="34", fixedsize='true', shape="circle", width='0.75', style="filled", fillcolor=fillcolor) + elif p in final_marking: + # <■> + viz.node(str(id(p)), "<■>", fontsize="32", shape='doublecircle', fixedsize='true', width='0.75', style="filled", fillcolor=fillcolor) + else: + if debug: + viz.node(str(id(p)), str(p.name), fontsize=font_size, shape="ellipse") + else: + if p in decorations and "label" in decorations[p]: + viz.node(str(id(p)), label, style='filled', fillcolor=fillcolor, + fontsize=font_size, shape="ellipse") + else: + viz.node(str(id(p)), label, shape='circle', fixedsize='true', width='0.75', style="filled", fillcolor=fillcolor) + + # add arcs, in order by their source and target objects names, to avoid undeterminism in the visualization + arcs_sort_list = sorted(list(net.arcs), key=lambda x: (x.source.name, x.target.name)) + + # check if there is an arc with weight different than 1. + # in that case, all the arcs in the visualization should have the arc weight visible + arc_weight_visible = False + for arc in arcs_sort_list: + if arc.weight != 1: + arc_weight_visible = True + break + + for a in arcs_sort_list: + penwidth = decorations[a]["penwidth"] if a in decorations and "penwidth" in decorations[a] else None + label = decorations[a]["label"] if a in decorations and "label" in decorations[a] else "" + color = decorations[a]["color"] if a in decorations and "color" in decorations[a] else None + + if not label and arc_weight_visible: + label = a.weight + + label = str(label) + arrowhead = "normal" + + if petri_properties.ARCTYPE in a.properties: + if a.properties[petri_properties.ARCTYPE] == petri_properties.RESET_ARC: + arrowhead = "vee" + elif a.properties[petri_properties.ARCTYPE] == petri_properties.INHIBITOR_ARC: + arrowhead = "dot" + + viz.edge(str(id(a.source)), str(id(a.target)), label=label, + penwidth=penwidth, color=color, fontsize=font_size, arrowhead=arrowhead, fontcolor=color) + + viz.attr(overlap='false') + + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/petri_net/util/__init__.py b/pm4py/pm4py/visualization/petri_net/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..909e2ef4a1b4dbedb2e4278ead139c1e2f9b5152 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.petri_net.util import performance_map, vis_trans_shortest_paths, alignments_decoration diff --git a/pm4py/pm4py/visualization/petri_net/util/alignments_decoration.py b/pm4py/pm4py/visualization/petri_net/util/alignments_decoration.py new file mode 100644 index 0000000000000000000000000000000000000000..a9e280c9c474b60c903429f749cf0165a5567f2b --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/util/alignments_decoration.py @@ -0,0 +1,75 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.util.colors import get_transitions_color + + +def get_alignments_decoration(net, im, fm, log=None, aligned_traces=None, parameters=None): + """ + Get a decoration for the Petri net based on alignments + + Parameters + ------------- + net + Petri net + im + Initial marking + fm + Final marking + log + Event log + aligned_traces + Aligned traces + parameters + Parameters of the algorithm + + Returns + ------------- + decorations + Decorations to use + """ + if parameters is None: + parameters = {} + if aligned_traces is None and log is not None: + from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments + aligned_traces = alignments.apply(log, net, im, fm, parameters={"ret_tuple_as_trans_desc": True}) + decorations = {} + net_transitions = {} + for trans in net.transitions: + net_transitions[trans.name] = trans + for align_trace0 in aligned_traces: + align_trace = align_trace0["alignment"] + for move in align_trace: + move_trans_name = move[0][1] + activity_trace_name = move[0][0] + if move_trans_name in net_transitions: + trans = net_transitions[move_trans_name] + if trans not in decorations: + decorations[trans] = {"count_fit": 0, "count_move_on_model": 0} + + if activity_trace_name == ">>": + decorations[trans]["count_move_on_model"] = decorations[trans]["count_move_on_model"] + 1 + else: + decorations[trans]["count_fit"] = decorations[trans]["count_fit"] + 1 + + for trans in decorations: + if trans.label is not None: + decorations[trans]["label"] = trans.label + " (" + str( + decorations[trans]["count_move_on_model"]) + "," + str(decorations[trans]["count_fit"]) + ")" + decorations[trans]["color"] = get_transitions_color(decorations[trans]["count_move_on_model"], + decorations[trans]["count_fit"]) + + return decorations diff --git a/pm4py/pm4py/visualization/petri_net/util/performance_map.py b/pm4py/pm4py/visualization/petri_net/util/performance_map.py new file mode 100644 index 0000000000000000000000000000000000000000..8f43cdb0ee5005290145157e9df71f54420e3f86 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/util/performance_map.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.petri_net.utils.performance_map import calculate_annotation_for_trace, single_element_statistics, find_min_max_trans_frequency, find_min_max_arc_frequency, aggregate_stats, find_min_max_arc_performance, aggregate_statistics, get_transition_performance_with_token_replay, get_idx_exceeding_specified_acti_performance, filter_cases_exceeding_specified_acti_performance diff --git a/pm4py/pm4py/visualization/petri_net/util/vis_trans_shortest_paths.py b/pm4py/pm4py/visualization/petri_net/util/vis_trans_shortest_paths.py new file mode 100644 index 0000000000000000000000000000000000000000..8ccccdca203afe6fe8b95a1c9a932c0b945d5215 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/util/vis_trans_shortest_paths.py @@ -0,0 +1,256 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from statistics import mean, median, stdev + +from pm4py.visualization.common.utils import * + + +def get_shortest_paths_from_trans(original_trans, trans, spaths, visited_arcs, visited_transitions, added_elements, + rec_depth): + """ + Get shortest paths from a given transition + + Parameters + -------------- + original_trans + Original transition + trans + Current considered transition + spaths + Map of shortest paths + visited_arcs + Set of visited arcs + visited_transitions + Set of visited transitions + added_elements + Elements to add recursively + rec_depth + Recursion depth + + Returns + ------------- + spaths + Map of shortest paths + visited_arcs + Set of visited arcs + added_elements + Elements to add recursively + """ + for out_arc in trans.out_arcs: + if out_arc not in visited_arcs: + visited_arcs.add(out_arc) + target_place = out_arc.target + for place_out_arc in target_place.out_arcs: + if place_out_arc not in visited_arcs: + visited_arcs.add(place_out_arc) + target_trans = place_out_arc.target + if target_trans not in visited_transitions: + visited_transitions.add(target_trans) + if target_trans.label: + el1 = ((original_trans.name, target_trans.name), 0, rec_depth) + if out_arc not in spaths: + spaths[out_arc] = set() + spaths[out_arc].add(el1) + added_elements.add(el1) + el2 = ((original_trans.name, target_trans.name), 1, rec_depth) + if place_out_arc not in spaths: + spaths[place_out_arc] = set() + spaths[place_out_arc].add(el2) + added_elements.add(el2) + else: + spaths, visited_arcs, visited_transitions, added_elements = get_shortest_paths_from_trans( + original_trans, + target_trans, spaths, + visited_arcs, + visited_transitions, + added_elements, + rec_depth + 1) + for element in added_elements: + new_element = list(element) + if new_element[1] == 0: + new_element[1] = 2 + if out_arc not in spaths: + spaths[out_arc] = set() + spaths[out_arc].add(tuple(new_element)) + if new_element[1] == 1: + new_element[1] = 3 + if place_out_arc not in spaths: + spaths[place_out_arc] = set() + spaths[place_out_arc].add(tuple(new_element)) + return spaths, visited_arcs, visited_transitions, added_elements + + +def get_shortest_paths(net, enable_extension=False): + """ + Gets shortest paths between visible transitions in a Petri net + + Parameters + ----------- + net + Petri net + enable_extension + Enable decoration of more arcs, in a risky way, when needed + + Returns + ----------- + spaths + Shortest paths + """ + spaths = {} + for trans in net.transitions: + if trans.label: + visited_arcs = set() + visited_transitions = set() + added_elements = set() + spaths, visited_arcs, visited_transitions, added_elements = get_shortest_paths_from_trans(trans, trans, + spaths, + visited_arcs, + visited_transitions, + added_elements, 0) + spaths_keys = list(spaths.keys()) + for edge in spaths_keys: + list_zeros = [el for el in spaths[edge] if el[1] == 0] + list_ones = [el for el in spaths[edge] if el[1] == 1] + if list_zeros: + spaths[edge] = {x for x in spaths[edge] if x[1] == 0} + min_dist = min([x[2] for x in spaths[edge]]) + possible_targets = set([x[0] for x in spaths[edge] if x[2] == min_dist]) + spaths[edge] = set() + for target in possible_targets: + spaths[edge].add((target, 0, min_dist)) + elif list_ones: + spaths[edge] = {x for x in spaths[edge] if x[1] == 1} + min_dist = min([x[2] for x in spaths[edge]]) + possible_targets = set([x[0] for x in spaths[edge] if x[2] == min_dist]) + spaths[edge] = set() + for target in possible_targets: + spaths[edge].add((target, 1, min_dist)) + else: + unique_targets = set([x[0] for x in spaths[edge]]) + if len(unique_targets) == 1: + spaths[edge] = set() + spaths[edge].add((list(unique_targets)[0], 2, 0)) + else: + if enable_extension: + min_dist = min([x[2] for x in spaths[edge]]) + possible_targets = set([x[0] for x in spaths[edge] if x[2] == min_dist]) + spaths[edge] = set() + for target in possible_targets: + spaths[edge].add((target, 2, min_dist)) + else: + del spaths[edge] + + return spaths + + +def get_decorations_from_dfg_spaths_acticount(net, dfg, spaths, activities_count, variant="frequency", + aggregation_measure=None, stat_locale: dict = {}): + """ + Get decorations from Petrinet without doing any replay + but based on DFG measures, shortest paths and activities count. + The variant could be 'frequency' or 'performance'. + Aggregation measure could also be specified + + Parameters + ----------- + net + Petri net + dfg + Directly-Follows graph + spaths + Shortest paths between visible transitions in the Petri net + activities_count + Count of activities in the Petri net + variant + Describe how to decorate the Petri net (could be frequency or performance) + aggregation_measure + Specifies the aggregation measure + stat_locale + Dict to locale the stat strings + + Returns + ----------- + decorations + Decorations to use for the Petri net + """ + decorations_single_contrib = {} + decorations_single_contrib_trans = {} + decorations_int = {} + decorations = {} + if aggregation_measure is None: + if "frequency" in variant: + aggregation_measure = "sum" + elif "performance" in variant: + aggregation_measure = "mean" + for arc in spaths: + for couple in spaths[arc]: + dfg_key = couple[0] + if dfg_key in dfg: + if arc not in decorations_single_contrib: + decorations_single_contrib[arc] = [] + decorations_single_contrib[arc].append(dfg[dfg_key]) + if dfg_key[1] not in decorations_single_contrib_trans: + decorations_single_contrib_trans[dfg_key[1]] = {} + decorations_single_contrib_trans[dfg_key[1]][dfg_key[0]] = dfg[dfg_key] + for arc in decorations_single_contrib: + decorations_value = None + if aggregation_measure == "sum": + decorations_value = sum(decorations_single_contrib[arc]) + elif aggregation_measure == "mean": + decorations_value = mean(decorations_single_contrib[arc]) + elif aggregation_measure == "median": + decorations_value = median(decorations_single_contrib[arc]) + elif aggregation_measure == "stdev": + decorations_value = stdev(decorations_single_contrib[arc]) + elif aggregation_measure == "min": + decorations_value = min(decorations_single_contrib[arc]) + elif aggregation_measure == "max": + decorations_value = max(decorations_single_contrib[arc]) + if decorations_value is not None: + decorations_int[arc] = decorations_value + + if decorations_int: + arcs_min_value = min(list(decorations_int.values())) + arcs_max_value = max(list(decorations_int.values())) + for arc in decorations_int: + if "performance" in variant: + arc_label = human_readable_stat(decorations_int[arc], stat_locale) + else: + arc_label = str(decorations_int[arc]) + decorations[arc] = {"label": arc_label, + "penwidth": str(get_arc_penwidth(decorations_int[arc], arcs_min_value, arcs_max_value))} + trans_map = {} + for trans in net.transitions: + if trans.label: + trans_map[trans.label] = trans + if "frequency" in variant: + act_min_value = min(list(activities_count.values())) + act_max_value = max(list(activities_count.values())) + for act in activities_count: + if act in trans_map: + trans = trans_map[act] + color = get_trans_freq_color(activities_count[act], act_min_value, act_max_value) + label = act + " (" + str(activities_count[act]) + ")" + decorations[trans] = {"label": label, "color": color} + elif "performance" in variant: + for act in decorations_single_contrib_trans: + if act in trans_map: + trans = trans_map[act] + trans_values = list(decorations_single_contrib_trans[act].values()) + decorations[trans] = {"performance": mean(trans_values)} + + return decorations diff --git a/pm4py/pm4py/visualization/petri_net/variants/__init__.py b/pm4py/pm4py/visualization/petri_net/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..280a225dd0755ba9ba4f2d90a7fd6c72552709be --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/variants/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.petri_net.variants import alignments, greedy_decoration_frequency, \ + greedy_decoration_performance, token_decoration_frequency, token_decoration_performance, wo_decoration diff --git a/pm4py/pm4py/visualization/petri_net/variants/alignments.py b/pm4py/pm4py/visualization/petri_net/variants/alignments.py new file mode 100644 index 0000000000000000000000000000000000000000..4c00f04678c9d73914b156152ba04927254ea47e --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/variants/alignments.py @@ -0,0 +1,53 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.petri_net.common import visualize +from pm4py.visualization.petri_net.util import alignments_decoration +from pm4py.objects.petri_net.obj import PetriNet, Marking +from typing import Optional, Dict, Any + + +def apply(net: PetriNet, initial_marking: Marking, final_marking: Marking, log=None, aggregated_statistics=None, parameters: Optional[Dict[Any, Any]] = None) -> str: + """ + Apply method for Petri net visualization (it calls the + graphviz_visualization method) + + Parameters + ----------- + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + log + (Optional) log + aggregated_statistics + Dictionary containing the frequency statistics + parameters + Algorithm parameters + + Returns + ----------- + viz + Graph object + """ + if aggregated_statistics is None and log is not None: + aggregated_statistics = alignments_decoration.get_alignments_decoration(net, initial_marking, final_marking, + log=log) + + return visualize.apply(net, initial_marking, final_marking, parameters=parameters, + decorations=aggregated_statistics) diff --git a/pm4py/pm4py/visualization/petri_net/variants/greedy_decoration_frequency.py b/pm4py/pm4py/visualization/petri_net/variants/greedy_decoration_frequency.py new file mode 100644 index 0000000000000000000000000000000000000000..5ba7d945a9401ca7bdb54e1522576a422de324f4 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/variants/greedy_decoration_frequency.py @@ -0,0 +1,117 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.variants import native, performance +from pm4py.statistics.attributes.log import get as attr_get +from pm4py.util import xes_constants as xes +from pm4py.visualization.petri_net.common import visualize +from pm4py.visualization.petri_net.util.vis_trans_shortest_paths import get_decorations_from_dfg_spaths_acticount +from pm4py.visualization.petri_net.util.vis_trans_shortest_paths import get_shortest_paths +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_TIMESTAMP_KEY +from pm4py.objects.petri_net.obj import PetriNet, Marking +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + DEBUG = "debug" + RANKDIR = "set_rankdir" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + AGGREGATION_MEASURE = "aggregationMeasure" + FONT_SIZE = "font_size" + + +def get_decorated_net(net: PetriNet, initial_marking: Marking, final_marking: Marking, log: EventLog, parameters: Optional[Dict[Union[str, Parameters], Any]] = None, variant: str = "frequency") -> graphviz.Digraph: + """ + Get a decorated net according to the specified variant (decorate Petri net based on DFG) + + Parameters + ------------ + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + log + Log to use to decorate the Petri net + parameters + Algorithm parameters + variant + Specify if the decoration should take into account the frequency or the performance + + Returns + ------------ + gviz + GraphViz object + """ + if parameters is None: + parameters = {} + + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, parameters, + "sum" if "frequency" in variant else "mean") + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + + # we find the DFG + if variant == "performance": + dfg = performance.performance(log, parameters=parameters) + else: + dfg = native.native(log, parameters=parameters) + # we find shortest paths + spaths = get_shortest_paths(net) + # we find the number of activities occurrences in the log + activities_count = attr_get.get_attribute_values(log, activity_key, parameters=parameters) + aggregated_statistics = get_decorations_from_dfg_spaths_acticount(net, dfg, spaths, + activities_count, + variant=variant, + aggregation_measure=aggregation_measure) + + return visualize.apply(net, initial_marking, final_marking, parameters=parameters, + decorations=aggregated_statistics) + + +def apply(net: PetriNet, initial_marking: Marking, final_marking: Marking, log: EventLog = None, aggregated_statistics=None, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Digraph: + """ + Apply frequency decoration through greedy algorithm (decorate Petri net based on DFG) + + Parameters + ------------ + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + log + Log to use to decorate the Petri net + aggregated_statistics + Dictionary containing the frequency statistics + parameters + Algorithm parameters + + Returns + ------------ + gviz + GraphViz object + """ + del aggregated_statistics + return get_decorated_net(net, initial_marking, final_marking, log, parameters=parameters, variant="frequency") diff --git a/pm4py/pm4py/visualization/petri_net/variants/greedy_decoration_performance.py b/pm4py/pm4py/visualization/petri_net/variants/greedy_decoration_performance.py new file mode 100644 index 0000000000000000000000000000000000000000..31f1ecee3ab28d7442915e683b2bb8ead0c91215 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/variants/greedy_decoration_performance.py @@ -0,0 +1,120 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.discovery.dfg.variants import native, performance +from pm4py.statistics.attributes.log import get as attr_get +from pm4py.util import xes_constants as xes +from pm4py.visualization.petri_net.common import visualize +from pm4py.visualization.petri_net.util.vis_trans_shortest_paths import get_decorations_from_dfg_spaths_acticount +from pm4py.visualization.petri_net.util.vis_trans_shortest_paths import get_shortest_paths +from pm4py.util import exec_utils +from enum import Enum +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_TIMESTAMP_KEY +from pm4py.objects.petri_net.obj import PetriNet, Marking +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + DEBUG = "debug" + RANKDIR = "set_rankdir" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + AGGREGATION_MEASURE = "aggregationMeasure" + FONT_SIZE = "font_size" + STAT_LOCALE = "stat_locale" + + +def get_decorated_net(net, initial_marking, final_marking, log, parameters=None, variant="frequency"): + """ + Get a decorated net according to the specified variant (decorate Petri net based on DFG) + + Parameters + ------------ + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + log + Log to use to decorate the Petri net + parameters + Algorithm parameters + variant + Specify if the decoration should take into account the frequency or the performance + + Returns + ------------ + gviz + GraphViz object + """ + if parameters is None: + parameters = {} + + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, parameters, + "sum" if "frequency" in variant else "mean") + + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes.DEFAULT_NAME_KEY) + stat_locale = exec_utils.get_param_value(Parameters.STAT_LOCALE, parameters, {}) + + # we find the DFG + if variant == "performance": + dfg = performance.performance(log, parameters=parameters) + else: + dfg = native.native(log, parameters=parameters) + # we find shortest paths + spaths = get_shortest_paths(net) + # we find the number of activities occurrences in the log + activities_count = attr_get.get_attribute_values(log, activity_key, parameters=parameters) + aggregated_statistics = get_decorations_from_dfg_spaths_acticount(net, dfg, spaths, + activities_count, + variant=variant, + aggregation_measure=aggregation_measure, + stat_locale=stat_locale) + + return visualize.apply(net, initial_marking, final_marking, parameters=parameters, + decorations=aggregated_statistics) + + +def apply(net: PetriNet, initial_marking: Marking, final_marking: Marking, log: EventLog = None, aggregated_statistics=None, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Digraph: + """ + Apply performance decoration through greedy algorithm (decorate Petri net based on DFG) + + Parameters + ------------ + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + log + Log to use to decorate the Petri net + aggregated_statistics + Dictionary containing the frequency statistics + parameters + Algorithm parameters + + Returns + ------------ + gviz + GraphViz object + """ + del aggregated_statistics + return get_decorated_net(net, initial_marking, final_marking, log, parameters=parameters, variant="performance") diff --git a/pm4py/pm4py/visualization/petri_net/variants/token_decoration_frequency.py b/pm4py/pm4py/visualization/petri_net/variants/token_decoration_frequency.py new file mode 100644 index 0000000000000000000000000000000000000000..37d00a50984022b5ea36ea516177794a4b7f2cc9 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/variants/token_decoration_frequency.py @@ -0,0 +1,131 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.tokenreplay import algorithm as token_replay +from pm4py.statistics.variants.log import get as variants_get +from pm4py.visualization.petri_net.common import visualize +from pm4py.visualization.petri_net.util import performance_map +from pm4py.util import exec_utils, xes_constants +from enum import Enum +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_TIMESTAMP_KEY +from pm4py.objects.petri_net.obj import PetriNet, Marking +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + DEBUG = "debug" + RANKDIR = "set_rankdir" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + AGGREGATION_MEASURE = "aggregationMeasure" + FONT_SIZE = "font_size" + + +def get_decorations(log, net, initial_marking, final_marking, parameters=None, measure="frequency", + ht_perf_method="last"): + """ + Calculate decorations in order to annotate the Petri net + + Parameters + ----------- + log + Trace log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters associated to the algorithm + measure + Measure to represent on the process model (frequency/performance) + ht_perf_method + Method to use in order to annotate hidden transitions (performance value could be put on the last possible + point (last) or in the first possible point (first) + + Returns + ------------ + decorations + Decorations to put on the process model + """ + if parameters is None: + parameters = {} + + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, parameters, None) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + + variants_idx = variants_get.get_variants_from_log_trace_idx(log, parameters=parameters) + variants = variants_get.convert_variants_trace_idx_to_trace_obj(log, variants_idx) + + parameters_tr = {token_replay.Variants.TOKEN_REPLAY.value.Parameters.ACTIVITY_KEY: activity_key, + token_replay.Variants.TOKEN_REPLAY.value.Parameters.VARIANTS: variants} + + # do the replay + aligned_traces = token_replay.apply(log, net, initial_marking, final_marking, parameters=parameters_tr) + + # apply petri_reduction technique in order to simplify the Petri net + # net = reduction.apply(net, parameters={"aligned_traces": aligned_traces}) + + element_statistics = performance_map.single_element_statistics(log, net, initial_marking, + aligned_traces, variants_idx, + activity_key=activity_key, + timestamp_key=timestamp_key, + ht_perf_method=ht_perf_method, + parameters=parameters) + + aggregated_statistics = performance_map.aggregate_statistics(element_statistics, measure=measure, + aggregation_measure=aggregation_measure) + + return aggregated_statistics + + +def apply(net: PetriNet, initial_marking: Marking, final_marking: Marking, log: EventLog = None, aggregated_statistics=None, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Digraph: + """ + Apply method for Petri net visualization (it calls the graphviz_visualization + method) adding frequency representation obtained by token replay + + Parameters + ----------- + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + log + (Optional) log + aggregated_statistics + Dictionary containing the frequency statistics + parameters + Algorithm parameters (including the activity key used during the replay, and the timestamp key) + + Returns + ----------- + viz + Graph object + """ + if aggregated_statistics is None: + if log is not None: + aggregated_statistics = get_decorations(log, net, initial_marking, final_marking, parameters=parameters, + measure="frequency") + return visualize.apply(net, initial_marking, final_marking, parameters=parameters, + decorations=aggregated_statistics) diff --git a/pm4py/pm4py/visualization/petri_net/variants/token_decoration_performance.py b/pm4py/pm4py/visualization/petri_net/variants/token_decoration_performance.py new file mode 100644 index 0000000000000000000000000000000000000000..f8ac2da54d528d414eb0a85801c7d8386d2c5343 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/variants/token_decoration_performance.py @@ -0,0 +1,134 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.algo.conformance.tokenreplay import algorithm as token_replay +from pm4py.statistics.variants.log import get as variants_get +from pm4py.visualization.petri_net.common import visualize +from pm4py.visualization.petri_net.util import performance_map +from pm4py.util import exec_utils, xes_constants +from enum import Enum +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_TIMESTAMP_KEY +from pm4py.objects.petri_net.obj import PetriNet, Marking +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + DEBUG = "debug" + RANKDIR = "set_rankdir" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + AGGREGATION_MEASURE = "aggregationMeasure" + FONT_SIZE = "font_size" + STAT_LOCALE = "stat_locale" + + +def get_decorations(log, net, initial_marking, final_marking, parameters=None, measure="frequency", + ht_perf_method="last"): + """ + Calculate decorations in order to annotate the Petri net + + Parameters + ----------- + log + Trace log + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + parameters + Parameters associated to the algorithm + measure + Measure to represent on the process model (frequency/performance) + ht_perf_method + Method to use in order to annotate hidden transitions (performance value could be put on the last possible + point (last) or in the first possible point (first) + + Returns + ------------ + decorations + Decorations to put on the process model + """ + if parameters is None: + parameters = {} + + aggregation_measure = exec_utils.get_param_value(Parameters.AGGREGATION_MEASURE, parameters, None) + activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY) + timestamp_key = exec_utils.get_param_value(Parameters.TIMESTAMP_KEY, parameters, + xes_constants.DEFAULT_TIMESTAMP_KEY) + stat_locale = exec_utils.get_param_value(Parameters.STAT_LOCALE, parameters, {}) + + variants_idx = variants_get.get_variants_from_log_trace_idx(log, parameters=parameters) + variants = variants_get.convert_variants_trace_idx_to_trace_obj(log, variants_idx) + + parameters_tr = {token_replay.Variants.TOKEN_REPLAY.value.Parameters.ACTIVITY_KEY: activity_key, + token_replay.Variants.TOKEN_REPLAY.value.Parameters.VARIANTS: variants} + + # do the replay + aligned_traces = token_replay.apply(log, net, initial_marking, final_marking, parameters=parameters_tr) + + # apply petri_reduction technique in order to simplify the Petri net + # net = reduction.apply(net, parameters={"aligned_traces": aligned_traces}) + + element_statistics = performance_map.single_element_statistics(log, net, initial_marking, + aligned_traces, variants_idx, + activity_key=activity_key, + timestamp_key=timestamp_key, + ht_perf_method=ht_perf_method, + parameters=parameters) + + aggregated_statistics = performance_map.aggregate_statistics(element_statistics, measure=measure, + aggregation_measure=aggregation_measure, + stat_locale=stat_locale) + + return aggregated_statistics + + +def apply(net: PetriNet, initial_marking: Marking, final_marking: Marking, log: EventLog = None, aggregated_statistics=None, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Digraph: + """ + Apply method for Petri net visualization (it calls the graphviz_visualization + method) adding performance representation obtained by token replay + + Parameters + ----------- + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + log + (Optional) log + aggregated_statistics + Dictionary containing the frequency statistics + parameters + Algorithm parameters (including the activity key used during the replay, and the timestamp key) + + Returns + ----------- + viz + Graph object + """ + if aggregated_statistics is None: + if log is not None: + aggregated_statistics = get_decorations(log, net, initial_marking, final_marking, parameters=parameters, + measure="performance") + return visualize.apply(net, initial_marking, final_marking, parameters=parameters, + decorations=aggregated_statistics) diff --git a/pm4py/pm4py/visualization/petri_net/variants/wo_decoration.py b/pm4py/pm4py/visualization/petri_net/variants/wo_decoration.py new file mode 100644 index 0000000000000000000000000000000000000000..9030b69cc320746770ead8567b952486da598bb6 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/variants/wo_decoration.py @@ -0,0 +1,64 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.petri_net.common import visualize +from enum import Enum +from pm4py.util.constants import PARAMETER_CONSTANT_ACTIVITY_KEY, PARAMETER_CONSTANT_TIMESTAMP_KEY +from pm4py.objects.petri_net.obj import PetriNet, Marking +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + DEBUG = "debug" + RANKDIR = "set_rankdir" + ACTIVITY_KEY = PARAMETER_CONSTANT_ACTIVITY_KEY + TIMESTAMP_KEY = PARAMETER_CONSTANT_TIMESTAMP_KEY + AGGREGATION_MEASURE = "aggregationMeasure" + FONT_SIZE = "font_size" + + +def apply(net: PetriNet, initial_marking: Marking, final_marking: Marking, log: EventLog = None, aggregated_statistics=None, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Digraph: + """ + Apply method for Petri net visualization (it calls the + graphviz_visualization method) + + Parameters + ----------- + net + Petri net + initial_marking + Initial marking + final_marking + Final marking + log + (Optional) log + aggregated_statistics + Dictionary containing the frequency statistics + parameters + Algorithm parameters + + Returns + ----------- + viz + Graph object + """ + # remove unused variables + del log + del aggregated_statistics + return visualize.apply(net, initial_marking, final_marking, parameters=parameters) diff --git a/pm4py/pm4py/visualization/petri_net/visualizer.py b/pm4py/pm4py/visualization/petri_net/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..38afe48343e1086a1e6fc288409327137cc46c84 --- /dev/null +++ b/pm4py/pm4py/visualization/petri_net/visualizer.py @@ -0,0 +1,100 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.visualization.petri_net.variants import wo_decoration, alignments, greedy_decoration_performance, \ + greedy_decoration_frequency, token_decoration_performance, token_decoration_frequency +from pm4py.util import exec_utils, pandas_utils +from enum import Enum +from pm4py.objects.petri_net.obj import PetriNet, Marking +from typing import Optional, Dict, Any, Union +from pm4py.objects.log.obj import EventLog, EventStream +import pandas as pd +from pm4py.objects.log.util import dataframe_utils +import graphviz + + +class Variants(Enum): + WO_DECORATION = wo_decoration + FREQUENCY = token_decoration_frequency + PERFORMANCE = token_decoration_performance + FREQUENCY_GREEDY = greedy_decoration_frequency + PERFORMANCE_GREEDY = greedy_decoration_performance + ALIGNMENTS = alignments + + +WO_DECORATION = Variants.WO_DECORATION +FREQUENCY_DECORATION = Variants.FREQUENCY +PERFORMANCE_DECORATION = Variants.PERFORMANCE +FREQUENCY_GREEDY = Variants.FREQUENCY_GREEDY +PERFORMANCE_GREEDY = Variants.PERFORMANCE_GREEDY +ALIGNMENTS = Variants.ALIGNMENTS + + +def apply(net: PetriNet, initial_marking: Marking = None, final_marking: Marking = None, log: Union[EventLog, EventStream, pd.DataFrame] = None, aggregated_statistics=None, parameters: Optional[Dict[Any, Any]] = None, + variant=Variants.WO_DECORATION) -> graphviz.Digraph: + if parameters is None: + parameters = {} + if log is not None: + if pandas_utils.check_is_pandas_dataframe(log): + log = dataframe_utils.convert_timestamp_columns_in_df(log) + + log = log_conversion.apply(log, parameters, log_conversion.TO_EVENT_LOG) + return exec_utils.get_variant(variant).apply(net, initial_marking, final_marking, log=log, + aggregated_statistics=aggregated_statistics, + parameters=parameters) + + +def save(gviz: graphviz.Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz: graphviz.Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: graphviz.Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/powl/__init__.py b/pm4py/pm4py/visualization/powl/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d263a97e247ec947871d750c08f201463ef58e56 --- /dev/null +++ b/pm4py/pm4py/visualization/powl/__init__.py @@ -0,0 +1,18 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' + +from pm4py.visualization.powl import visualizer, variants diff --git a/pm4py/pm4py/visualization/powl/variants/__init__.py b/pm4py/pm4py/visualization/powl/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1cf44886de7018a35379cfee390fdc2a369a3278 --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.powl.variants import icons, net, basic diff --git a/pm4py/pm4py/visualization/powl/variants/basic.py b/pm4py/pm4py/visualization/powl/variants/basic.py new file mode 100644 index 0000000000000000000000000000000000000000..deb13ae735921483abd9a74848ca59b69fd5ab86 --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/basic.py @@ -0,0 +1,225 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.resources +import tempfile +from enum import Enum +from graphviz import Digraph +from pm4py.objects.process_tree.obj import Operator +from pm4py.util import exec_utils +from pm4py.objects.powl.obj import POWL, Transition, SilentTransition, StrictPartialOrder, OperatorPOWL, \ + FrequentTransition + +OPERATOR_BOXES = True +FREQUENCY_TAG_IMAGES = True + +min_width = "1.5" # Set the minimum width in inches +min_height = "0.5" +fillcolor = "#fcfcfc" +opacity_change_ratio = 0.02 + + +class Parameters(Enum): + FORMAT = "format" + COLOR_MAP = "color_map" + ENABLE_DEEPCOPY = "enable_deepcopy" + FONT_SIZE = "font_size" + BGCOLOR = "bgcolor" + + +def apply(powl: POWL) -> Digraph: + """ + Obtain a POWL model representation through GraphViz + + Parameters + ----------- + powl + POWL model + + Returns + ----------- + gviz + GraphViz Digraph + """ + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + + viz = Digraph("powl", filename=filename.name, engine='dot') + viz.attr('node', shape='ellipse', fixedsize='false') + viz.attr(nodesep='1') + viz.attr(ranksep='1') + viz.attr(compound='true') + viz.attr(overlap='scale') + viz.attr(splines='true') + viz.attr(rankdir='TB') + viz.attr(style="filled") + viz.attr(fillcolor=fillcolor) + + color_map = exec_utils.get_param_value(Parameters.COLOR_MAP, {}, {}) + + repr_powl(powl, viz, color_map, level=0) + viz.format = "svg" + + return viz + + +def get_color(node, color_map): + """ + Gets a color for a node from the color map + + Parameters + -------------- + node + Node + color_map + Color map + """ + if node in color_map: + return color_map[node] + return "black" + + +def get_id_base(powl): + if isinstance(powl, Transition): + return str(id(powl)) + if isinstance(powl, OperatorPOWL): + return str(id(powl)) + if isinstance(powl, StrictPartialOrder): + for node in powl.children: + return get_id_base(node) + + +def get_id(powl): + if isinstance(powl, Transition): + return str(id(powl)) + if isinstance(powl, OperatorPOWL): + if OPERATOR_BOXES: + return "cluster_" + str(id(powl)) + else: + return "clusterINVIS_" + str(id(powl)) + if isinstance(powl, StrictPartialOrder): + return "cluster_" + str(id(powl)) + + +def add_operator_edge(vis, current_node_id, child, directory='none', style=""): + child_id = get_id(child) + if child_id.startswith("cluster_"): + vis.edge(current_node_id, get_id_base(child), dir=directory, lhead=child_id, style=style, minlen='2') + else: + vis.edge(current_node_id, get_id_base(child), dir=directory, style=style) + + +def add_order_edge(block, child_1, child_2, directory='forward', color="black", style=""): + child_id_1 = get_id(child_1) + child_id_2 = get_id(child_2) + if child_id_1.startswith("cluster_"): + if child_id_2.startswith("cluster_"): + block.edge(get_id_base(child_1), get_id_base(child_2), dir=directory, color=color, style=style, + ltail=child_id_1, lhead=child_id_2, minlen='2') + else: + block.edge(get_id_base(child_1), get_id_base(child_2), dir=directory, color=color, style=style, + ltail=child_id_1, minlen='2') + else: + if child_id_2.startswith("cluster_"): + block.edge(get_id_base(child_1), get_id_base(child_2), dir=directory, color=color, style=style, + lhead=child_id_2, minlen='2') + else: + block.edge(get_id_base(child_1), get_id_base(child_2), dir=directory, color=color, style=style) + + +def repr_powl(powl, viz, color_map, level): + font_size = "18" + this_node_id = str(id(powl)) + + current_color = darken_color(fillcolor, amount=opacity_change_ratio * level) + + if isinstance(powl, FrequentTransition): + label = powl.activity + if powl.skippable: + if powl.selfloop: + with importlib.resources.path("pm4py.visualization.powl.variants.icons", "skip-loop-tag.svg") as gimg: + image = str(gimg) + viz.node(this_node_id, label='\n' + label, imagepos='tr', image=image, + shape='box', width=min_width, fontsize=font_size, style='filled', fillcolor=current_color) + else: + with importlib.resources.path("pm4py.visualization.powl.variants.icons", "skip-tag.svg") as gimg: + image = str(gimg) + viz.node(this_node_id, label='\n' + label, imagepos='tr', image=image, + shape='box', width=min_width, fontsize=font_size, style='filled', fillcolor=current_color) + else: + if powl.selfloop: + with importlib.resources.path("pm4py.visualization.powl.variants.icons", "loop-tag.svg") as gimg: + image = str(gimg) + viz.node(this_node_id, label='\n' + label, imagepos='tr', image=image, + shape='box', width=min_width, fontsize=font_size, style='filled', fillcolor=current_color) + else: + viz.node(this_node_id, label=label, + shape='box', width=min_width, fontsize=font_size, style='filled', fillcolor=current_color) + elif isinstance(powl, Transition): + if isinstance(powl, SilentTransition): + viz.node(this_node_id, label='', style='filled', fillcolor='black', shape='square', + width='0.3', height='0.3', fixedsize="true") + else: + viz.node(this_node_id, str(powl.label), shape='box', fontsize=font_size, width=min_width, style='filled', + fillcolor=current_color) + + elif isinstance(powl, StrictPartialOrder): + transitive_reduction = powl.order.get_transitive_reduction() + with viz.subgraph(name=get_id(powl)) as block: + block.attr(margin="20,20") + block.attr(style="filled") + block.attr(fillcolor=current_color) + for child in powl.children: + repr_powl(child, block, color_map, level=level + 1) + for child in powl.children: + for child2 in powl.children: + if transitive_reduction.is_edge(child, child2): + add_order_edge(block, child, child2) + + elif isinstance(powl, OperatorPOWL): + with viz.subgraph(name=get_id(powl)) as block: + block.attr(margin="20,20") + block.attr(style="filled") + block.attr(fillcolor=current_color) + if powl.operator == Operator.LOOP: + with importlib.resources.path("pm4py.visualization.powl.variants.icons", "loop.svg") as gimg: + image = str(gimg) + block.node(this_node_id, image=image, label="", fontsize=font_size, + width='0.4', height='0.4', fixedsize="true") + do = powl.children[0] + redo = powl.children[1] + repr_powl(do, block, color_map, level=level + 1) + add_operator_edge(block, this_node_id, do) + repr_powl(redo, block, color_map, level=level + 1) + add_operator_edge(block, this_node_id, redo, style="dashed") + elif powl.operator == Operator.XOR: + with importlib.resources.path("pm4py.visualization.powl.variants.icons", "xor.svg") as gimg: + image = str(gimg) + block.node(this_node_id, image=image, label="", fontsize=font_size, + width='0.4', height='0.4', fixedsize="true") + for child in powl.children: + repr_powl(child, block, color_map, level=level + 1) + add_operator_edge(block, this_node_id, child) + + +def darken_color(color, amount): + """ Darkens the given color by the specified amount """ + import matplotlib.colors as mcolors + amount = min(0.3, amount) + + rgb = mcolors.to_rgb(color) + darker = [x * (1 - amount) for x in rgb] + return mcolors.to_hex(darker) diff --git a/pm4py/pm4py/visualization/powl/variants/icons/__init__.py b/pm4py/pm4py/visualization/powl/variants/icons/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e6126919a88a86e771d3377d88b69271b8f2c241 --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/icons/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.powl.variants.icons import * diff --git a/pm4py/pm4py/visualization/powl/variants/icons/end.svg b/pm4py/pm4py/visualization/powl/variants/icons/end.svg new file mode 100644 index 0000000000000000000000000000000000000000..92f89c5d6df4d37bc569b8dc1f6b76075d585144 --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/icons/end.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/pm4py/pm4py/visualization/powl/variants/icons/gate.svg b/pm4py/pm4py/visualization/powl/variants/icons/gate.svg new file mode 100644 index 0000000000000000000000000000000000000000..48e50d576dd581a346eefee684b1439590599f65 --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/icons/gate.svg @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/pm4py/pm4py/visualization/powl/variants/icons/loop-tag.svg b/pm4py/pm4py/visualization/powl/variants/icons/loop-tag.svg new file mode 100644 index 0000000000000000000000000000000000000000..e8dfb892b2a537a3315bc61a372a874da82e0a56 --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/icons/loop-tag.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + diff --git a/pm4py/pm4py/visualization/powl/variants/icons/loop.svg b/pm4py/pm4py/visualization/powl/variants/icons/loop.svg new file mode 100644 index 0000000000000000000000000000000000000000..fcaec49c01ce105cdad76793dd21f99bc01b05b8 --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/icons/loop.svg @@ -0,0 +1,33 @@ + + + + + + + + + diff --git a/pm4py/pm4py/visualization/powl/variants/icons/play.svg b/pm4py/pm4py/visualization/powl/variants/icons/play.svg new file mode 100644 index 0000000000000000000000000000000000000000..055f0b702933cc16ffa92c15572fffe2629b8fab --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/icons/play.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/pm4py/pm4py/visualization/powl/variants/icons/skip-loop-tag.svg b/pm4py/pm4py/visualization/powl/variants/icons/skip-loop-tag.svg new file mode 100644 index 0000000000000000000000000000000000000000..0193a729285735ae021c4f3f53e9244befc024ae --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/icons/skip-loop-tag.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + diff --git a/pm4py/pm4py/visualization/powl/variants/icons/skip-tag.svg b/pm4py/pm4py/visualization/powl/variants/icons/skip-tag.svg new file mode 100644 index 0000000000000000000000000000000000000000..4227cfe7e1e15ddca90a89d1f08008cc9ec71817 --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/icons/skip-tag.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + diff --git a/pm4py/pm4py/visualization/powl/variants/icons/xor.svg b/pm4py/pm4py/visualization/powl/variants/icons/xor.svg new file mode 100644 index 0000000000000000000000000000000000000000..5f903ee1a8b1b97745184fef7840f268df75538c --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/icons/xor.svg @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/pm4py/pm4py/visualization/powl/variants/net.py b/pm4py/pm4py/visualization/powl/variants/net.py new file mode 100644 index 0000000000000000000000000000000000000000..5471d7ae291218ddcbefd8acf547d1585c10e01a --- /dev/null +++ b/pm4py/pm4py/visualization/powl/variants/net.py @@ -0,0 +1,332 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import importlib.resources +import os + +from pm4py.objects.powl.obj import POWL +from enum import Enum +import tempfile +import graphviz +from graphviz import Digraph +from pm4py.util import constants +from pm4py.objects.bpmn.obj import BPMN +from pm4py.objects.bpmn.util.sorting import get_sorted_nodes_edges +from pm4py.objects.conversion.powl.converter import apply as powl_to_pn +from pm4py.objects.bpmn.util import reduction + + +class Parameters(Enum): + FORMAT = "format" + RANKDIR = "rankdir" + BGCOLOR = "bgcolor" + + +FREQUENCY_TAG_IMAGES = True +min_width = "1.5" # Set the minimum width in inches +min_height = "0.5" +node_color = "#f2f2f2" +silent_node_color = "black" + + +class SplitExclusiveGateway(BPMN.ExclusiveGateway): + pass + + +class JoinExclusiveGateway(BPMN.ExclusiveGateway): + pass + + +def can_connect_without_xor_violation(input_nodes, output_nodes): + for in_node in input_nodes: + for out_node in output_nodes: + if isinstance(in_node, BPMN.ExclusiveGateway) and len(output_nodes) > 1: + return False + if isinstance(out_node, BPMN.ExclusiveGateway) and len(input_nodes) > 1: + return False + + return True + + +def simplify_and_gateways(nodes, edges): + for n in nodes: + if isinstance(n, BPMN.ParallelGateway): + input_nodes = [edge[0] for edge in edges if edge[1] == n] + output_nodes = [edge[1] for edge in edges if edge[0] == n] + if can_connect_without_xor_violation(input_nodes, output_nodes): + nodes.remove(n) + edges = [edge for edge in edges if n not in edge] + + for in_node in input_nodes: + for out_node in output_nodes: + edges.append((in_node, out_node)) + return simplify_and_gateways(nodes, edges) + + return nodes, edges + + +def add_node(n, viz): + n_id = str(id(n)) + if isinstance(n, FrequencyTask): + font_size = '18' + if FREQUENCY_TAG_IMAGES: + if n.skippable: + if n.selfloop: + with importlib.resources.path("pm4py.visualization.powl.variants.icons", + "skip-loop-tag.svg") as gimg: + image = str(gimg) + viz.node(n_id, label='\n' + n.activity, imagepos='tr', + image=image, style='filled', fillcolor=node_color, + shape='box', width=min_width, fontsize=font_size) + else: + with importlib.resources.path("pm4py.visualization.powl.variants.icons", + "skip-tag.svg") as gimg: + skip_image = str(gimg) + viz.node(n_id, label="\n" + n.activity, imagepos='tr', + image=skip_image, style='filled', fillcolor=node_color, + shape='box', width=min_width, fontsize=font_size) + else: + if n.selfloop: + with importlib.resources.path("pm4py.visualization.powl.variants.icons", + "loop-tag.svg") as gimg: + loop_image = str(gimg) + viz.node(n_id, label="\n" + n.activity, imagepos='tr', + image=loop_image, style='filled', fillcolor=node_color, + shape='box', width=min_width, fontsize=font_size) + else: + viz.node(n_id, label=n.activity, style='filled', fillcolor=node_color, + shape='box', width=min_width, fontsize=font_size) + else: + if n.skippable: + viz.node(n_id, shape="box", label=n.activity, fontsize=font_size, + style="dashed", width=min_width) + else: + viz.node(n_id, shape="box", label=n.activity, fontsize=font_size, + width=min_width) + if n.selfloop: + viz.edge(n_id, n_id) + + elif isinstance(n, BPMN.StartEvent): + with importlib.resources.path("pm4py.visualization.powl.variants.icons", "play.svg") as gimg: + start_image = str(gimg) + viz.node(n_id, image=start_image, label="", shape="none", width='0.35', + height='0.35', fixedsize="true", style='filled', fillcolor=node_color) + elif isinstance(n, BPMN.EndEvent): + with importlib.resources.path("pm4py.visualization.powl.variants.icons", "end.svg") as gimg: + end_image = str(gimg) + viz.node(n_id, image=end_image, label="", shape="none", width='0.35', + height='0.35', fixedsize="true", style='filled', fillcolor=node_color) + elif isinstance(n, BPMN.ParallelGateway): + viz.node(n_id, label="", shape="square", style="filled", fillcolor=silent_node_color, width='0.3', + height='0.3') + elif isinstance(n, SplitExclusiveGateway): + with importlib.resources.path("pm4py.visualization.powl.variants.icons", "gate.svg") as gimg: + xor_image = str(gimg) + viz.node(n_id, label="", shape="diamond", style="filled", fillcolor="lightgreen", + width='0.4', height='0.4', fixedsize="true", image=xor_image) + elif isinstance(n, JoinExclusiveGateway): + with importlib.resources.path("pm4py.visualization.powl.variants.icons", "gate.svg") as gimg: + xor_image = str(gimg) + viz.node(n_id, label="", shape="diamond", style="filled", fillcolor="orange", + width='0.4', height='0.4', fixedsize="true", image=xor_image) + elif isinstance(n, BPMN.ExclusiveGateway): + with importlib.resources.path("pm4py.visualization.powl.variants.icons", "gate.svg") as gimg: + xor_image = str(gimg) + viz.node(n_id, label="", shape="diamond", style="filled", fillcolor=node_color, + width='0.4', height='0.4', fixedsize="true", image=xor_image) + else: + raise Exception("Unexpected instance of class " + str(type(n)) + "!") + + +def apply(powl: POWL) -> graphviz.Digraph: + pn_2, init_2, final_2 = powl_to_pn(powl) + bpmn_graph = to_bpmn(pn_2, init_2, final_2) + + nodes, edges = get_sorted_nodes_edges(bpmn_graph) + + for node in nodes: + + if isinstance(node, BPMN.ExclusiveGateway): + + incoming_edges = [e[0] for e in edges if e[1] is node] + outgoing_edges = [e[1] for e in edges if e[0] is node] + + if len(incoming_edges) == 1 and len(outgoing_edges) > 1: + + node.__class__ = SplitExclusiveGateway + + elif len(incoming_edges) > 1 and len(outgoing_edges) == 1: + + node.__class__ = JoinExclusiveGateway + + nodes, edges = simplify_and_gateways(nodes, edges) + + rankdir = "LR" + bgcolor = constants.DEFAULT_BGCOLOR + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + viz = Digraph("", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + viz.graph_attr['rankdir'] = rankdir + + gateway_edges = {} + + for e in edges: + if isinstance(e[0], BPMN.ParallelGateway) or isinstance(e[0], BPMN.ParallelGateway): + if e[0] not in gateway_edges: + gateway_edges[e[0]] = {'in': [], 'out': []} + gateway_edges[e[0]]['out'].append(e[1]) + continue + if isinstance(e[1], BPMN.ParallelGateway) or isinstance(e[1], BPMN.ParallelGateway): + if e[1] not in gateway_edges: + gateway_edges[e[1]] = {'in': [], 'out': []} + gateway_edges[e[1]]['in'].append(e[0]) + continue + + for node in nodes: + add_node(node, viz) + add_concurrent_subgraphs(viz, find_concurrent_groups(nodes, edges)) + + for e in edges: + n_id_1 = str(id(e[0])) + n_id_2 = str(id(e[1])) + + viz.edge(n_id_1, n_id_2) + + viz.attr(overlap='false') + + viz.format = "svg" + + return viz + + +class FrequencyTask(BPMN.Task): + def __init__(self, name, properties, id="", in_arcs=None, out_arcs=None, process=None): + super().__init__(id=id, name=name, in_arcs=in_arcs, out_arcs=out_arcs, process=process) + self.activity = properties["activity"] + self.skippable = properties["skippable"] + self.selfloop = properties["selfloop"] + script_dir = os.path.dirname(os.path.realpath(__file__)) + self.image = os.path.join(script_dir, "xor2.png") + + +def to_bpmn(net, im, fm): + """ + Converts an accepting Petri net into a BPMN diagram + + Parameters + -------------- + net + Petri net + im + initial marking + fm + final marking + + Returns + -------------- + bpmn_graph + BPMN diagram + """ + + bpmn_graph = BPMN() + + entering_dictio = {} + exiting_dictio = {} + + for place in net.places: + node = BPMN.ExclusiveGateway() + bpmn_graph.add_node(node) + entering_dictio[place] = node + exiting_dictio[place] = node + + for trans in net.transitions: + if trans.label is None: + if len(trans.in_arcs) > 1: + node = BPMN.ParallelGateway(gateway_direction=BPMN.Gateway.Direction.CONVERGING) + elif len(trans.out_arcs) > 1: + node = BPMN.ParallelGateway(gateway_direction=BPMN.Gateway.Direction.DIVERGING) + else: + node = BPMN.ExclusiveGateway(gateway_direction=BPMN.Gateway.Direction.UNSPECIFIED) + bpmn_graph.add_node(node) + entering_dictio[trans] = node + exiting_dictio[trans] = node + else: + if len(trans.in_arcs) > 1: + entering_node = BPMN.ParallelGateway(gateway_direction=BPMN.Gateway.Direction.CONVERGING) + else: + entering_node = BPMN.ExclusiveGateway(gateway_direction=BPMN.Gateway.Direction.UNSPECIFIED) + + if len(trans.out_arcs) > 1: + exiting_node = BPMN.ParallelGateway(gateway_direction=BPMN.Gateway.Direction.DIVERGING) + else: + exiting_node = BPMN.ExclusiveGateway(gateway_direction=BPMN.Gateway.Direction.UNSPECIFIED) + + task = FrequencyTask(name=trans.label, properties=trans.properties) + bpmn_graph.add_node(task) + + bpmn_graph.add_flow(BPMN.SequenceFlow(entering_node, task)) + bpmn_graph.add_flow(BPMN.SequenceFlow(task, exiting_node)) + + entering_dictio[trans] = entering_node + exiting_dictio[trans] = exiting_node + + for arc in net.arcs: + bpmn_graph.add_flow(BPMN.SequenceFlow(exiting_dictio[arc.source], entering_dictio[arc.target])) + + start_node = BPMN.StartEvent(name="start", isInterrupting=True) + end_node = BPMN.NormalEndEvent(name="end") + bpmn_graph.add_node(start_node) + bpmn_graph.add_node(end_node) + for place in im: + bpmn_graph.add_flow(BPMN.SequenceFlow(start_node, entering_dictio[place])) + for place in fm: + bpmn_graph.add_flow(BPMN.SequenceFlow(exiting_dictio[place], end_node)) + + bpmn_graph = reduction.apply(bpmn_graph) + + for node in bpmn_graph.get_nodes(): + node.set_process(bpmn_graph.get_process_id()) + + for edge in bpmn_graph.get_flows(): + edge.set_process(bpmn_graph.get_process_id()) + + return bpmn_graph + + +def find_concurrent_groups(nodes, edges): + predecessors = {n: [] for n in nodes} + successors = {n: [] for n in nodes} + for src, dst in edges: + successors[src].append(dst) + predecessors[dst].append(src) + + groups = {} + for node, preds in predecessors.items(): + if len(preds) == 1: + pred_id = str(id(preds[0])) + if pred_id not in groups: + groups[pred_id] = [] + groups[pred_id].append(node) + + return [group for group in groups.values() if len(group) > 1] + + +def add_concurrent_subgraphs(graph, concurrent_elements): + for group in concurrent_elements: + with graph.subgraph() as s: + s.attr(rank='same') + for n in group: + s.node(str(id(n))) diff --git a/pm4py/pm4py/visualization/powl/visualizer.py b/pm4py/pm4py/visualization/powl/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..41302a9c86c486b0197d34e5f1b6abca15f0f884 --- /dev/null +++ b/pm4py/pm4py/visualization/powl/visualizer.py @@ -0,0 +1,192 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import base64 +import os +import re +import shutil +import tempfile +import webbrowser + +from pm4py.visualization.powl.variants import basic +from pm4py.visualization.powl.variants import net +from enum import Enum +from pm4py.util import exec_utils, constants +from typing import Optional, Dict, Any +from pm4py.objects.powl.obj import POWL + + +class POWLVisualizationVariants(Enum): + BASIC = basic + NET = net + + +class Parameters(Enum): + FORMAT = "format" + ENCODING = "encoding" + + +DEFAULT_VARIANT = POWLVisualizationVariants.BASIC + + +def apply(powl: POWL, variant=DEFAULT_VARIANT, frequency_tags=True, parameters: Optional[Dict[Any, Any]] = None)\ + -> str: + """ + Method for POWL model representation + + Parameters + ----------- + powl + POWL model + parameters + Possible parameters of the algorithm: + Parameters.FORMAT -> Format of the image (PDF, PNG, SVG; default PNG) + variant + Variant of the algorithm to use: + - POWLVisualizationVariants.BASIC (default) + - POWLVisualizationVariants.NET: BPMN-like visualization with decision gates + frequency_tags + Simplify the visualization using frequency tags + + Returns + ----------- + str + SVG Content + """ + if parameters is None: + parameters = {} + + if frequency_tags: + powl = powl.simplify_using_frequent_transitions() + + viz = exec_utils.get_variant(variant).apply(powl) + svg_content = viz.pipe().decode('utf-8') + + def inline_images_and_svgs(svg_content): + img_pattern = re.compile(r']+xlink:href=["\'](.*?)["\'][^>]*>') + + def encode_file_to_base64(file_path): + with open(file_path, 'rb') as file: + return base64.b64encode(file.read()).decode('utf-8') + + def read_file_content_and_viewbox(file_path): + with open(file_path, 'r') as file: + content = file.read() + content = re.sub(r'<\?xml.*?\?>', '', content, flags=re.DOTALL) + content = re.sub(r'', '', content, flags=re.DOTALL) + viewBox_match = re.search(r'viewBox="([^"]*)"', content) + viewBox = viewBox_match.group(1) if viewBox_match else "0 0 1 1" + svg_content_match = re.search(r']*>(.*?)', content, re.DOTALL) + svg_content = svg_content_match.group(1) if svg_content_match else content + return svg_content, viewBox + + def replace_with_inline_content(match): + file_path = match.group(1) + if file_path.lower().endswith('.svg'): + svg_data, viewBox = read_file_content_and_viewbox(file_path) + viewBox_values = [float(v) for v in viewBox.split()] + actual_width, actual_height = viewBox_values[2], viewBox_values[3] + + intended_width = float(match.group(0).split('width="')[1].split('"')[0].replace('px', '')) + intended_height = float(match.group(0).split('height="')[1].split('"')[0].replace('px', '')) + x = float(match.group(0).split('x="')[1].split('"')[0]) + y = float(match.group(0).split('y="')[1].split('"')[0]) + + scale_x = intended_width / actual_width + scale_y = intended_height / actual_height + + return f'{svg_data}' + else: + base64_data = encode_file_to_base64(file_path) + return match.group(0).replace(file_path, f"data:image/png;base64,{base64_data}") + + return img_pattern.sub(replace_with_inline_content, svg_content) + + svg_content_with_inline_images = inline_images_and_svgs(svg_content) + + return svg_content_with_inline_images + + +def save(svg_content: str, output_file_path: str, parameters: Optional[Dict[Any, Any]] = None): + """ + Save the diagram in a specified format. + + Parameters + ----------- + svg_content : str + SVG content + output_file_path : str + Path where the output file should be saved + """ + if parameters is None: + parameters = {} + + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, "utf-8") + + with tempfile.NamedTemporaryFile(delete=False, mode='w+', suffix='.svg') as tmpfile: + tmpfile.write(svg_content) + tmpfile_path = tmpfile.name + + if output_file_path.endswith("svg"): + shutil.move(tmpfile_path, output_file_path) + elif output_file_path.endswith("png"): + import cairosvg as cairosvg + cairosvg.svg2png(bytestring=svg_content.encode(encoding), write_to=output_file_path) + elif output_file_path.endswith("pdf"): + import cairosvg as cairosvg + cairosvg.svg2pdf(bytestring=svg_content.encode(encoding), write_to=output_file_path) + else: + raise Exception(f"Unsupported format! Please use 'svg', 'png', or 'pdf'.") + + if os.path.exists(tmpfile_path): + os.remove(tmpfile_path) + + +def view(svg_content: str, parameters: Optional[Dict[Any, Any]] = None): + """ + View the diagram + + Parameters + ----------- + svg_content + SVG content + image_format + image format + """ + if parameters is None: + parameters = {} + + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + image_format = str(exec_utils.get_param_value(Parameters.FORMAT, parameters, "png")).lower() + encoding = exec_utils.get_param_value(Parameters.ENCODING, parameters, "utf-8") + + with tempfile.NamedTemporaryFile(delete=False, mode='w+', suffix='.svg') as tmpfile: + tmpfile.write(svg_content) + tmpfile_path = tmpfile.name + + if image_format == "svg": + absolute_path = os.path.abspath(tmpfile_path) + return webbrowser.open('file://' + absolute_path) + elif image_format == "png": + import cairosvg as cairosvg + cairosvg.svg2png(bytestring=svg_content.encode(encoding), write_to=tmpfile_path + '.png') + webbrowser.open('file://' + os.path.abspath(tmpfile_path + '.png')) + elif image_format == "pdf": + import cairosvg as cairosvg + cairosvg.svg2pdf(bytestring=svg_content.encode(encoding), write_to=tmpfile_path + '.pdf') + webbrowser.open('file://' + os.path.abspath(tmpfile_path + '.pdf')) + else: + raise Exception(f"Unsupported format: {image_format}. Please use 'svg', 'png', or 'pdf'.") diff --git a/pm4py/pm4py/visualization/process_tree/__init__.py b/pm4py/pm4py/visualization/process_tree/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..20b88b8355dd393db47c7af7c0e3f54fda165791 --- /dev/null +++ b/pm4py/pm4py/visualization/process_tree/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.process_tree import visualizer, variants diff --git a/pm4py/pm4py/visualization/process_tree/variants/__init__.py b/pm4py/pm4py/visualization/process_tree/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6d35f573c7ec15189c8d3620342fff4b24a5e18f --- /dev/null +++ b/pm4py/pm4py/visualization/process_tree/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.process_tree.variants import wo_decoration, symbolic diff --git a/pm4py/pm4py/visualization/process_tree/variants/frequency_annotation.py b/pm4py/pm4py/visualization/process_tree/variants/frequency_annotation.py new file mode 100644 index 0000000000000000000000000000000000000000..f3d64b22835753e37b4d61834024502189c702ed --- /dev/null +++ b/pm4py/pm4py/visualization/process_tree/variants/frequency_annotation.py @@ -0,0 +1,127 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import tempfile +from copy import deepcopy, copy +from enum import Enum + +from graphviz import Graph + +from pm4py.objects.process_tree.utils import generic +from pm4py.util import exec_utils +from typing import Optional, Dict, Any, Union +from pm4py.objects.process_tree.obj import ProcessTree +import graphviz +from pm4py.util import vis_utils, constants + + +class Parameters(Enum): + FORMAT = "format" + ENABLE_DEEPCOPY = "enable_deepcopy" + FONT_SIZE = "font_size" + BGCOLOR = "bgcolor" + RANKDIR = "rankdir" + NUM_EVENTS_PROPERTY = "num_events_property" + NUM_CASES_PROPERTY = "num_cases_property" + + +# maps the operators to the ProM strings +operators_mapping = {"->": "seq", "X": "xor", "+": "and", "*": "xor loop", "O": "or", "<>": "interleaving"} + +# root node parameter +ROOT_NODE_PARAMETER = "@@root_node" + + +def repr_tree_2(tree, viz, parameters): + num_events_property = exec_utils.get_param_value(Parameters.NUM_EVENTS_PROPERTY, parameters, "num_events") + num_cases_property = exec_utils.get_param_value(Parameters.NUM_CASES_PROPERTY, parameters, "num_cases") + root_node = parameters[ROOT_NODE_PARAMETER] + + root_node_num_cases = root_node._properties[num_cases_property] + this_node_num_cases = tree._properties[num_cases_property] if num_cases_property in tree._properties else 0 + this_node_num_events = tree._properties[num_events_property] if num_events_property in tree._properties else 0 + + font_size = exec_utils.get_param_value(Parameters.FONT_SIZE, parameters, 15) + font_size = str(font_size) + + this_node_id = str(id(tree)) + + if tree.operator is None: + if tree.label is None: + viz.node(this_node_id, "tau", style='filled', fillcolor='black', shape='point', width="0.075", fontsize=font_size) + else: + node_color = vis_utils.get_trans_freq_color(this_node_num_cases, 0, root_node_num_cases) + node_label = str(tree) + "\nC=%d E=%d" % (this_node_num_cases, this_node_num_events) + viz.node(this_node_id, node_label, fontsize=font_size, style="filled", fillcolor=node_color) + else: + node_color = vis_utils.get_trans_freq_color(this_node_num_cases, 0, root_node_num_cases) + viz.node(this_node_id, operators_mapping[str(tree.operator)], fontsize=font_size, style="filled", fillcolor=node_color) + + for child in tree.children: + repr_tree_2(child, viz, parameters) + + if tree.parent is not None: + viz.edge(str(id(tree.parent)), this_node_id, dirType='none') + + +def apply(tree: ProcessTree, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Graph: + """ + Obtain a Process Tree representation through GraphViz + + Parameters + ----------- + tree + Process tree + parameters + Possible parameters of the algorithm + + Returns + ----------- + gviz + GraphViz object + """ + if parameters is None: + parameters = {} + + parameters = copy(parameters) + parameters[ROOT_NODE_PARAMETER] = tree + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + + viz = Graph("pt", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor, "rankdir": rankdir}) + viz.attr('node', shape='ellipse', fixedsize='false') + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + + enable_deepcopy = exec_utils.get_param_value(Parameters.ENABLE_DEEPCOPY, parameters, False) + + if enable_deepcopy: + # since the process tree object needs to be sorted in the visualization, make a deepcopy of it before + # proceeding + tree = deepcopy(tree) + generic.tree_sort(tree) + + repr_tree_2(tree, viz, parameters) + + viz.attr(overlap='false') + viz.attr(splines='false') + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/process_tree/variants/symbolic.py b/pm4py/pm4py/visualization/process_tree/variants/symbolic.py new file mode 100644 index 0000000000000000000000000000000000000000..f1d380561594a01f98a1fc2918619302e015fa88 --- /dev/null +++ b/pm4py/pm4py/visualization/process_tree/variants/symbolic.py @@ -0,0 +1,124 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import tempfile +from copy import deepcopy +from enum import Enum + +from graphviz import Graph + +from pm4py.objects.process_tree.utils import generic as util +from pm4py.util import exec_utils, constants +from typing import Optional, Dict, Any, Union +from pm4py.objects.process_tree.obj import ProcessTree +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + COLOR_MAP = "color_map" + ENABLE_DEEPCOPY = "enable_deepcopy" + FONT_SIZE = "font_size" + BGCOLOR = "bgcolor" + RANKDIR = "rankdir" + + +def get_color(node, color_map): + """ + Gets a color for a node from the color map + + Parameters + -------------- + node + Node + color_map + Color map + """ + if node in color_map: + return color_map[node] + return "black" + + +def repr_tree(tree, viz, color_map, parameters): + font_size = exec_utils.get_param_value(Parameters.FONT_SIZE, parameters, 9) + font_size = str(font_size) + + this_node_id = str(id(tree)) + + if tree.operator is None: + if tree.label is None: + viz.node(this_node_id, "tau", style='filled', fillcolor='black', shape='box', fontsize=font_size) + else: + node_color = get_color(tree, color_map) + viz.node(this_node_id, str(tree), color=node_color, fontcolor=node_color, fontsize=font_size, shape='box') + else: + node_color = get_color(tree, color_map) + viz.node(this_node_id, str(tree.operator), color=node_color, fontcolor=node_color, + fontsize=font_size, shape='circle') + + for child in tree.children: + repr_tree(child, viz, color_map, parameters) + + if tree.parent is not None: + viz.edge(str(id(tree.parent)), this_node_id, dirType='none') + + +def apply(tree: ProcessTree, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Graph: + """ + Obtain a Process Tree representation through GraphViz + + Parameters + ----------- + tree + Process tree + parameters + Possible parameters of the algorithm + + Returns + ----------- + gviz + GraphViz object + """ + if parameters is None: + parameters = {} + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + + viz = Graph("pt", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor, "rankdir": rankdir}) + viz.attr('node', shape='ellipse', fixedsize='false') + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + color_map = exec_utils.get_param_value(Parameters.COLOR_MAP, parameters, {}) + + enable_deepcopy = exec_utils.get_param_value(Parameters.ENABLE_DEEPCOPY, parameters, True) + + if enable_deepcopy: + # since the process tree object needs to be sorted in the visualization, make a deepcopy of it before + # proceeding + tree = deepcopy(tree) + util.tree_sort(tree) + + repr_tree(tree, viz, color_map, parameters) + + viz.attr(overlap='false') + viz.attr(splines='false') + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/process_tree/variants/wo_decoration.py b/pm4py/pm4py/visualization/process_tree/variants/wo_decoration.py new file mode 100644 index 0000000000000000000000000000000000000000..0dc3c32c9c272644edc6871c64237d6c8ddfedf3 --- /dev/null +++ b/pm4py/pm4py/visualization/process_tree/variants/wo_decoration.py @@ -0,0 +1,127 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import tempfile +from copy import deepcopy +from enum import Enum + +from graphviz import Graph + +from pm4py.objects.process_tree.utils import generic +from pm4py.util import exec_utils, constants +from typing import Optional, Dict, Any, Union +from pm4py.objects.process_tree.obj import ProcessTree +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + COLOR_MAP = "color_map" + ENABLE_DEEPCOPY = "enable_deepcopy" + FONT_SIZE = "font_size" + BGCOLOR = "bgcolor" + RANKDIR = "rankdir" + + +# maps the operators to the ProM strings +operators_mapping = {"->": "seq", "X": "xor", "+": "and", "*": "xor loop", "O": "or", "<>": "interleaving"} + + +def get_color(node, color_map): + """ + Gets a color for a node from the color map + + Parameters + -------------- + node + Node + color_map + Color map + """ + if node in color_map: + return color_map[node] + return "black" + + +def repr_tree_2(tree, viz, color_map, parameters): + font_size = exec_utils.get_param_value(Parameters.FONT_SIZE, parameters, 15) + font_size = str(font_size) + + this_node_id = str(id(tree)) + + if tree.operator is None: + if tree.label is None: + viz.node(this_node_id, "tau", style='filled', fillcolor='black', shape='point', width="0.075", fontsize=font_size) + else: + node_color = get_color(tree, color_map) + viz.node(this_node_id, str(tree.label), color=node_color, fontcolor=node_color, fontsize=font_size) + else: + node_color = get_color(tree, color_map) + viz.node(this_node_id, operators_mapping[str(tree.operator)], color=node_color, fontcolor=node_color, fontsize=font_size) + + for child in tree.children: + repr_tree_2(child, viz, color_map, parameters) + + if tree.parent is not None: + viz.edge(str(id(tree.parent)), this_node_id, dirType='none') + + +def apply(tree: ProcessTree, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Graph: + """ + Obtain a Process Tree representation through GraphViz + + Parameters + ----------- + tree + Process tree + parameters + Possible parameters of the algorithm + + Returns + ----------- + gviz + GraphViz object + """ + if parameters is None: + parameters = {} + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + rankdir = exec_utils.get_param_value(Parameters.RANKDIR, parameters, constants.DEFAULT_RANKDIR_GVIZ) + + viz = Graph("pt", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor, 'rankdir': rankdir}) + viz.attr('node', shape='ellipse', fixedsize='false') + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + color_map = exec_utils.get_param_value(Parameters.COLOR_MAP, parameters, {}) + + enable_deepcopy = exec_utils.get_param_value(Parameters.ENABLE_DEEPCOPY, parameters, True) + + if enable_deepcopy: + # since the process tree object needs to be sorted in the visualization, make a deepcopy of it before + # proceeding + tree = deepcopy(tree) + generic.tree_sort(tree) + + repr_tree_2(tree, viz, color_map, parameters) + + viz.attr(overlap='false') + viz.attr(splines='false') + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/process_tree/visualizer.py b/pm4py/pm4py/visualization/process_tree/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..620ced4f942581cb9021f1a7f3aefa27e7382be8 --- /dev/null +++ b/pm4py/pm4py/visualization/process_tree/visualizer.py @@ -0,0 +1,99 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.visualization.process_tree.variants import wo_decoration, symbolic, frequency_annotation +from enum import Enum +from pm4py.util import exec_utils +from pm4py.visualization.common.gview import serialize, serialize_dot +from typing import Optional, Dict, Any +from pm4py.objects.process_tree.obj import ProcessTree +import graphviz + + +class Variants(Enum): + WO_DECORATION = wo_decoration + SYMBOLIC = symbolic + FREQUENCY_ANNOTATION = frequency_annotation + + +DEFAULT_VARIANT = Variants.WO_DECORATION + + +def apply(tree0: ProcessTree, parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> graphviz.Graph: + """ + Method for Process Tree representation + + Parameters + ----------- + tree + Process tree + parameters + Possible parameters of the algorithm: + Parameters.FORMAT -> Format of the image (PDF, PNG, SVG; default PNG) + Parameters.BGCOLOR -> Background color to be used (i.e., 'white' or 'transparent') + Parameters.RANKDIR -> Direction of the graph ("LR" for left-to-right; "TB" for top-to-bottom) + variant + Variant of the algorithm to use: + - Variants.WO_DECORATION + + Returns + ----------- + gviz + GraphViz object + """ + return exec_utils.get_variant(variant).apply(tree0, parameters=parameters) + + +def save(gviz: graphviz.Graph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz: graphviz.Graph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: graphviz.Graph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/sna/__init__.py b/pm4py/pm4py/visualization/sna/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ca9cc423740827ff00fff8748ee497b38ef93596 --- /dev/null +++ b/pm4py/pm4py/visualization/sna/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.sna import visualizer, variants diff --git a/pm4py/pm4py/visualization/sna/variants/__init__.py b/pm4py/pm4py/visualization/sna/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..06ed1934b9a0f1e10883aedecc13313fb5e02996 --- /dev/null +++ b/pm4py/pm4py/visualization/sna/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.sna.variants import networkx, pyvis diff --git a/pm4py/pm4py/visualization/sna/variants/networkx.py b/pm4py/pm4py/visualization/sna/variants/networkx.py new file mode 100644 index 0000000000000000000000000000000000000000..f7022ff692f5c0eecf2d9a2c6319b7b1b02b8430 --- /dev/null +++ b/pm4py/pm4py/visualization/sna/variants/networkx.py @@ -0,0 +1,150 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import shutil +import tempfile +from copy import copy +from enum import Enum + +import matplotlib + +from pm4py.util import exec_utils, vis_utils +from pm4py.objects.org.sna.obj import SNA +from pm4py.util import constants +from pm4py.util import nx_utils +import networkx as nx + + +class Parameters(Enum): + WEIGHT_THRESHOLD = "weight_threshold" + FORMAT = "format" + + +def get_temp_file_name(format): + """ + Gets a temporary file name for the image + + Parameters + ------------ + format + Format of the target image + """ + filename = tempfile.NamedTemporaryFile(suffix='.' + format) + filename.close() + + return filename.name + + +def apply(sna: SNA, parameters=None): + """ + Perform SNA visualization starting from the Matrix Container object + and the Resource-Resource matrix + + Parameters + ------------- + sna + Value of the metrics + parameters + Possible parameters of the algorithm, including: + - Parameters.WEIGHT_THRESHOLD -> the weight threshold to use in displaying the graph + - Parameters.FORMAT -> format of the output image (png, svg ...) + + Returns + ------------- + temp_file_name + Name of a temporary file where the visualization is placed + """ + if parameters is None: + parameters = {} + + weight_threshold = exec_utils.get_param_value(Parameters.WEIGHT_THRESHOLD, parameters, 0) + format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + + directed = sna.is_directed + + temp_file_name = get_temp_file_name(format) + + if directed: + graph = nx_utils.DiGraph() + else: + graph = nx_utils.Graph() + + connections = {x for x, y in sna.connections.items() if y >= weight_threshold} + + graph.add_edges_from(connections) + + current_backend = copy(matplotlib.get_backend()) + matplotlib.use('Agg') + from matplotlib import pyplot + + pyplot.clf() + nx.draw(graph, node_size=500, with_labels=True, pos=nx.circular_layout(graph)) + pyplot.savefig(temp_file_name, bbox_inches="tight") + pyplot.clf() + + matplotlib.use(current_backend) + + return temp_file_name + + +def view(temp_file_name, parameters=None): + """ + View the SNA visualization on the screen + + Parameters + ------------- + temp_file_name + Temporary file name + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + if constants.DEFAULT_GVIZ_VIEW == "matplotlib_view": + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + img = mpimg.imread(temp_file_name) + plt.axis('off') + plt.tight_layout(pad=0, w_pad=0, h_pad=0) + plt.imshow(img) + plt.show() + return + + if vis_utils.check_visualization_inside_jupyter(): + vis_utils.view_image_in_jupyter(temp_file_name) + else: + vis_utils.open_opsystem_image_viewer(temp_file_name) + + +def save(temp_file_name, dest_file, parameters=None): + """ + Save the SNA visualization from a temporary file to a well-defined destination file + + Parameters + ------------- + temp_file_name + Temporary file name + dest_file + Destination file + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + shutil.copyfile(temp_file_name, dest_file) diff --git a/pm4py/pm4py/visualization/sna/variants/pyvis.py b/pm4py/pm4py/visualization/sna/variants/pyvis.py new file mode 100644 index 0000000000000000000000000000000000000000..4038b2be4e053b8076b04a55795042c8c58e4578 --- /dev/null +++ b/pm4py/pm4py/visualization/sna/variants/pyvis.py @@ -0,0 +1,170 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import shutil +import tempfile +from enum import Enum + +from pm4py.util import exec_utils, vis_utils, constants +from pm4py.objects.org.sna.obj import SNA + + +class Parameters(Enum): + WEIGHT_THRESHOLD = "weight_threshold" + IFRAME_WIDTH = "iframe_width" + IFRAME_HEIGHT = "iframe_height" + LOCAL_JUPYTER_FILE_NAME = "local_jupyter_file_name" + + +def get_temp_file_name(format): + """ + Gets a temporary file name for the image + + Parameters + ------------ + format + Format of the target image + """ + filename = tempfile.NamedTemporaryFile(suffix='.' + format) + + name = filename.name + + filename.close() + + return name + + +def apply(sna: SNA, parameters=None): + """ + Perform SNA visualization starting from the Matrix Container object + and the Resource-Resource matrix + + Parameters + ------------- + sna + Value of the metrics + parameters + Possible parameters of the algorithm, including: + - Parameters.WEIGHT_THRESHOLD -> the weight threshold to use in displaying the graph + + Returns + ------------- + temp_file_name + Name of a temporary file where the visualization is placed + """ + from pyvis.network import Network + + if parameters is None: + parameters = {} + + weight_threshold = exec_utils.get_param_value(Parameters.WEIGHT_THRESHOLD, parameters, 0) + directed = sna.is_directed + + temp_file_name = get_temp_file_name("html") + + got_net = Network(height="750px", width="100%", bgcolor="black", font_color="#3de975", directed=directed) + # set the physics layout of the network + got_net.barnes_hut() + + for c, w in sna.connections.items(): + if w >= weight_threshold: + src = c[0] # convert ids to labels + dst = c[1] + + # I have to add some options here, there is no parameter + highlight = {'border': "#3de975", 'background': "#41e9df"} + # color = {'border': "#000000", 'background': "#123456"} + got_net.add_node(src, src, title=src, labelHighlightBold=True, color={'highlight': highlight}) + got_net.add_node(dst, dst, title=dst, labelHighlightBold=True, color={'highlight': highlight}) + got_net.add_edge(src, dst, value=w, title=w) + + neighbor_map = got_net.get_adj_list() + + # add neighbor data to node hover data + for node in got_net.nodes: + counter = 0 + if directed: + node["title"] = "

" + node["title"] + " Output Links:

" + else: + node["title"] = "

" + node["title"] + " Links:

" + for neighbor in neighbor_map[node["id"]]: + if (counter % 10 == 0): + node["title"] += "
::: " + neighbor + else: + node["title"] += " ::: " + neighbor + node["value"] = len(neighbor_map[node["id"]]) + counter += 1 + + got_net.show_buttons(filter_=['nodes', 'edges', 'physics']) + + F = open(temp_file_name, "w") + try: + F.write(got_net.generate_html()) + F.close() + except: + # networkx 3.1 + F.close() + got_net.write_html(temp_file_name) + + return temp_file_name + + +def view(temp_file_name, parameters=None): + """ + View the SNA visualization on the screen + + Parameters + ------------- + temp_file_name + Temporary file name + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + if constants.DEFAULT_ENABLE_VISUALIZATIONS_VIEW: + iframe_width = exec_utils.get_param_value(Parameters.IFRAME_WIDTH, parameters, 900) + iframe_height = exec_utils.get_param_value(Parameters.IFRAME_HEIGHT, parameters, 600) + local_jupyter_file_name = exec_utils.get_param_value(Parameters.LOCAL_JUPYTER_FILE_NAME, parameters, "jupyter_sna_vis.html") + + if vis_utils.check_visualization_inside_jupyter(): + from IPython.display import IFrame + shutil.copyfile(temp_file_name, local_jupyter_file_name) + iframe = IFrame(local_jupyter_file_name, width=iframe_width, height=iframe_height) + from IPython.display import display + return display(iframe) + else: + vis_utils.open_opsystem_image_viewer(temp_file_name) + + +def save(temp_file_name, dest_file, parameters=None): + """ + Save the SNA visualization from a temporary file to a well-defined destination file + + Parameters + ------------- + temp_file_name + Temporary file name + dest_file + Destination file + parameters + Possible parameters of the algorithm + """ + if parameters is None: + parameters = {} + + shutil.copyfile(temp_file_name, dest_file) diff --git a/pm4py/pm4py/visualization/sna/visualizer.py b/pm4py/pm4py/visualization/sna/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..9597718a8811143f83af64952ebb4bc21d0d8c8e --- /dev/null +++ b/pm4py/pm4py/visualization/sna/visualizer.py @@ -0,0 +1,82 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.sna.variants import networkx, pyvis +from enum import Enum +from pm4py.util import exec_utils +from pm4py.objects.org.sna.obj import SNA + + +class Variants(Enum): + NETWORKX = networkx + PYVIS = pyvis + + +DEFAULT_VARIANT = Variants.NETWORKX + + +def apply(metric_values: SNA, parameters=None, variant=DEFAULT_VARIANT): + """ + Perform SNA visualization starting from the Matrix Container object + and the Resource-Resource matrix + + Parameters + ------------- + metric_values + Value of the metrics + parameters + Possible parameters of the algorithm + variant + Variant of the algorithm to use, possible values: + - Variants.NETWORKX + - Variants.PYVIS + + Returns + ------------- + temp_file_name + Name of a temporary file where the visualization is placed + """ + return exec_utils.get_variant(variant).apply(metric_values, parameters=parameters) + + +def view(temp_file_name, parameters=None, variant=DEFAULT_VARIANT): + """ + View the SNA visualization on the screen + + Parameters + ------------- + temp_file_name + Temporary file name + parameters + Possible parameters of the algorithm + """ + return exec_utils.get_variant(variant).view(temp_file_name, parameters=parameters) + + +def save(temp_file_name, dest_file, parameters=None, variant=DEFAULT_VARIANT): + """ + Save the SNA visualization from a temporary file to a well-defined destination file + + Parameters + ------------- + temp_file_name + Temporary file name + dest_file + Destination file + parameters + Possible parameters of the algorithm + """ + return exec_utils.get_variant(variant).save(temp_file_name, dest_file, parameters=parameters) diff --git a/pm4py/pm4py/visualization/transition_system/__init__.py b/pm4py/pm4py/visualization/transition_system/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1403c53763572ece6fb96daa5c0483e29cf7781b --- /dev/null +++ b/pm4py/pm4py/visualization/transition_system/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.transition_system import visualizer, variants, util diff --git a/pm4py/pm4py/visualization/transition_system/util/__init__.py b/pm4py/pm4py/visualization/transition_system/util/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..57fbdefe15d9982f40525f3b55fa8a6bd51362dc --- /dev/null +++ b/pm4py/pm4py/visualization/transition_system/util/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.transition_system.util import visualize_graphviz diff --git a/pm4py/pm4py/visualization/transition_system/util/visualize_graphviz.py b/pm4py/pm4py/visualization/transition_system/util/visualize_graphviz.py new file mode 100644 index 0000000000000000000000000000000000000000..c1d3f12721a60b39482124cf47a88d1715e4bfa9 --- /dev/null +++ b/pm4py/pm4py/visualization/transition_system/util/visualize_graphviz.py @@ -0,0 +1,90 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import tempfile +from copy import copy + +from graphviz import Digraph +from pm4py.util import exec_utils, constants +from enum import Enum + + +class Parameters(Enum): + FORMAT = "format" + SHOW_LABELS = "show_labels" + SHOW_NAMES = "show_names" + FORCE_NAMES = "force_names" + FILLCOLORS = "fillcolors" + FONT_SIZE = "font_size" + BGCOLOR = "bgcolor" + + +def visualize(ts, parameters=None): + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + show_labels = exec_utils.get_param_value(Parameters.SHOW_LABELS, parameters, True) + show_names = exec_utils.get_param_value(Parameters.SHOW_NAMES, parameters, True) + force_names = exec_utils.get_param_value(Parameters.FORCE_NAMES, parameters, None) + fillcolors = exec_utils.get_param_value(Parameters.FILLCOLORS, parameters, {}) + font_size = exec_utils.get_param_value(Parameters.FONT_SIZE, parameters, 11) + font_size = str(font_size) + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + + for state in ts.states: + state.label = state.name + + perc_char = '%' + + if force_names: + nts = copy(ts) + for index, state in enumerate(nts.states): + state.name = state.name + " (%.2f)" % (force_names[state]) + state.label = "%.2f" % (force_names[state] * 100.0) + state.label = state.label + perc_char + ts = nts + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Digraph(ts.name, filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + + # states + viz.attr('node') + for s in ts.states: + if show_names: + if s in fillcolors: + viz.node(str(id(s)), str(s.label), style="filled", fillcolor=fillcolors[s], fontsize=font_size) + else: + viz.node(str(id(s)), str(s.label), fontsize=font_size) + else: + if s in fillcolors: + viz.node(str(id(s)), "", style="filled", fillcolor=fillcolors[s], fontsize=font_size) + else: + viz.node(str(id(s)), "", fontsize=font_size) + # arcs + for t in ts.transitions: + if show_labels: + viz.edge(str(id(t.from_state)), str(id(t.to_state)), label=t.name, fontsize=font_size) + else: + viz.edge(str(id(t.from_state)), str(id(t.to_state))) + + viz.attr(overlap='false') + + viz.format = image_format + + return viz diff --git a/pm4py/pm4py/visualization/transition_system/variants/__init__.py b/pm4py/pm4py/visualization/transition_system/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c37d6674d797fcc28b2f022b4fd109be925c9d79 --- /dev/null +++ b/pm4py/pm4py/visualization/transition_system/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.transition_system.variants import view_based, trans_frequency diff --git a/pm4py/pm4py/visualization/transition_system/variants/trans_frequency.py b/pm4py/pm4py/visualization/transition_system/variants/trans_frequency.py new file mode 100644 index 0000000000000000000000000000000000000000..02a14234626dc23a508d4f64bebb92ba38bdf708 --- /dev/null +++ b/pm4py/pm4py/visualization/transition_system/variants/trans_frequency.py @@ -0,0 +1,89 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import uuid + +from typing import Optional, Dict, Any, Union +from pm4py.objects.transition_system.obj import TransitionSystem +import graphviz + +import tempfile + +from graphviz import Digraph +from pm4py.util import exec_utils, constants +from enum import Enum + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + + +def get_perc(total_events, arc_events): + if total_events > 0: + return " " + str(total_events) + " / %.2f %%" % (100.0 * arc_events / total_events) + return " 0 / 0.00 %" + + +def apply(tsys: TransitionSystem, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Digraph: + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Digraph(tsys.name, filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + + states_dictio = {} + + for s in tsys.states: + node_uuid = str(uuid.uuid4()) + states_dictio[id(s)] = node_uuid + + sum_ingoing = 0 + sum_outgoing = 0 + + for t in s.incoming: + sum_ingoing += len(t.data["events"]) + + for t in s.outgoing: + sum_outgoing += len(t.data["events"]) + + fillcolor = "white" + + if sum_ingoing != len(s.data["ingoing_events"]) or sum_outgoing != len(s.data["outgoing_events"]): + fillcolor = "red" + + taillabel = get_perc(sum_ingoing, len(s.data["ingoing_events"])) + headlabel = get_perc(sum_outgoing, len(s.data["outgoing_events"])) + + label = "IN=" + taillabel + "\n" + str(s.name) + "\nOUT=" + headlabel + + viz.node(node_uuid, label=label, fontsize="10", style="filled", fillcolor=fillcolor) + + for t in tsys.transitions: + viz.edge(states_dictio[id(t.from_state)], states_dictio[id(t.to_state)], fontsize="8", label=str(t.name), + taillabel=get_perc(len(t.from_state.data["outgoing_events"]), len(t.data["events"])), + headlabel=get_perc(len(t.to_state.data["ingoing_events"]), len(t.data["events"]))) + + viz.attr(overlap='false') + + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/transition_system/variants/view_based.py b/pm4py/pm4py/visualization/transition_system/variants/view_based.py new file mode 100644 index 0000000000000000000000000000000000000000..5fab52198299cb4e2e96727d450eef440c3d0705 --- /dev/null +++ b/pm4py/pm4py/visualization/transition_system/variants/view_based.py @@ -0,0 +1,51 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.transition_system.util import visualize_graphviz +from enum import Enum +from typing import Optional, Dict, Any, Union +from pm4py.objects.transition_system.obj import TransitionSystem +import graphviz + + +class Parameters(Enum): + FORMAT = "format" + SHOW_LABELS = "show_labels" + SHOW_NAMES = "show_names" + FORCE_NAMES = "force_names" + FILLCOLORS = "fillcolors" + FONT_SIZE = "font_size" + + +def apply(tsys: TransitionSystem, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> graphviz.Digraph: + """ + Get visualization of a Transition System + + Parameters + ----------- + tsys + Transition system + parameters + Optional parameters of the algorithm + + Returns + ---------- + gviz + Graph visualization + """ + + gviz = visualize_graphviz.visualize(tsys, parameters=parameters) + return gviz diff --git a/pm4py/pm4py/visualization/transition_system/visualizer.py b/pm4py/pm4py/visualization/transition_system/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..0984cedfae3cea64f9d56cf301be2fc052e1bc67 --- /dev/null +++ b/pm4py/pm4py/visualization/transition_system/visualizer.py @@ -0,0 +1,95 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.visualization.transition_system.variants import view_based, trans_frequency +from enum import Enum +from pm4py.util import exec_utils +from pm4py.visualization.common.gview import serialize, serialize_dot +from typing import Optional, Dict, Any +from pm4py.objects.transition_system.obj import TransitionSystem +import graphviz + + +class Variants(Enum): + VIEW_BASED = view_based + TRANS_FREQUENCY = trans_frequency + + +DEFAULT_VARIANT = Variants.VIEW_BASED + + +def apply(tsys: TransitionSystem, parameters: Optional[Dict[Any, Any]] = None, variant=DEFAULT_VARIANT) -> graphviz.Digraph: + """ + Get visualization of a Transition System + + Parameters + ----------- + tsys + Transition system + parameters + Parameters of the algorithm + variant + Variant of the algorithm to use, including: + - Variants.VIEW_BASED + + Returns + ---------- + gviz + Graph visualization + """ + return exec_utils.get_variant(variant).apply(tsys, parameters=parameters) + + +def save(gviz: graphviz.Digraph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz: graphviz.Digraph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: graphviz.Digraph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/visualization/trie/__init__.py b/pm4py/pm4py/visualization/trie/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0bc7a54151dc751f4eaf498616a4dc889319cb27 --- /dev/null +++ b/pm4py/pm4py/visualization/trie/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.trie import visualizer, variants diff --git a/pm4py/pm4py/visualization/trie/variants/__init__.py b/pm4py/pm4py/visualization/trie/variants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0c28e5f0bf9a9b92aa2a806f63ac19e9b50027b8 --- /dev/null +++ b/pm4py/pm4py/visualization/trie/variants/__init__.py @@ -0,0 +1,17 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from pm4py.visualization.trie.variants import classic diff --git a/pm4py/pm4py/visualization/trie/variants/classic.py b/pm4py/pm4py/visualization/trie/variants/classic.py new file mode 100644 index 0000000000000000000000000000000000000000..c266d8750ca5745a5a7d3b1be9a8b1c6eb749009 --- /dev/null +++ b/pm4py/pm4py/visualization/trie/variants/classic.py @@ -0,0 +1,90 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +import tempfile +from enum import Enum +from typing import Optional, Dict, Any, Union + +from graphviz import Graph + +from pm4py.objects.trie.obj import Trie +from pm4py.util import exec_utils, constants + + +class Parameters(Enum): + FORMAT = "format" + BGCOLOR = "bgcolor" + + +def draw_recursive(trie_node: Trie, parent: Union[str, None], gviz: Graph): + """ + Draws recursively the specified trie node + + Parameters + -------------- + trie_node + Node of the trie + parent + Parent node in the graph (expressed as a string) + gviz + Graphviz object + """ + node_id = str(id(trie_node)) + if trie_node.label is not None: + gviz.node(node_id, label=trie_node.label, shape="box") + if parent is not None: + gviz.edge(parent, node_id) + for child in trie_node.children: + draw_recursive(child, node_id if trie_node.label is not None else None, gviz) + + +def apply(trie: Trie, parameters: Optional[Dict[Union[str, Parameters], Any]] = None) -> Graph: + """ + Represents the trie + + Parameters + ----------------- + trie + Trie + parameters + Parameters, including: + - Parameters.FORMAT: the format of the visualization + + Returns + ----------------- + graph + Representation of the trie + """ + if parameters is None: + parameters = {} + + image_format = exec_utils.get_param_value(Parameters.FORMAT, parameters, "png") + bgcolor = exec_utils.get_param_value(Parameters.BGCOLOR, parameters, constants.DEFAULT_BGCOLOR) + + filename = tempfile.NamedTemporaryFile(suffix='.gv') + filename.close() + + viz = Graph("pt", filename=filename.name, engine='dot', graph_attr={'bgcolor': bgcolor}) + viz.attr('node', shape='ellipse', fixedsize='false') + + draw_recursive(trie, None, viz) + + viz.attr(overlap='false') + viz.attr(splines='false') + viz.attr(rankdir='LR') + viz.format = image_format.replace("html", "plain-ext") + + return viz diff --git a/pm4py/pm4py/visualization/trie/visualizer.py b/pm4py/pm4py/visualization/trie/visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..2017501927e143fe3c683d3f57bb1385b8586016 --- /dev/null +++ b/pm4py/pm4py/visualization/trie/visualizer.py @@ -0,0 +1,93 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +from enum import Enum +from typing import Optional, Dict, Any + +from graphviz import Graph + +from pm4py.objects.trie.obj import Trie +from pm4py.util import exec_utils +from pm4py.visualization.common import gview +from pm4py.visualization.common import save as gsave +from pm4py.visualization.trie.variants import classic + + +class Variants(Enum): + CLASSIC = classic + + +def apply(trie: Trie, variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Graph: + """ + Represents the trie + + Parameters + ----------------- + trie + Trie + variant + Variant of the visualization, possible values: + - Variants.CLASSIC => graphviz visualization + parameters + Parameters, including: + - Parameters.FORMAT: the format of the visualization + + Returns + ----------------- + graph + Representation of the trie + """ + return exec_utils.get_variant(variant).apply(trie, parameters=parameters) + + +def save(gviz: Graph, output_file_path: str, parameters=None): + """ + Save the diagram + + Parameters + ----------- + gviz + GraphViz diagram + output_file_path + Path where the GraphViz output should be saved + """ + gsave.save(gviz, output_file_path, parameters=parameters) + return "" + + +def view(gviz: Graph, parameters=None): + """ + View the diagram + + Parameters + ----------- + gviz + GraphViz diagram + """ + return gview.view(gviz, parameters=parameters) + + +def matplotlib_view(gviz: Graph, parameters=None): + """ + Views the diagram using Matplotlib + + Parameters + --------------- + gviz + Graphviz + """ + + return gview.matplotlib_view(gviz, parameters=parameters) diff --git a/pm4py/pm4py/write.py b/pm4py/pm4py/write.py new file mode 100644 index 0000000000000000000000000000000000000000..918d2ed7c8ab3d61836ffee71e99287dc211be3e --- /dev/null +++ b/pm4py/pm4py/write.py @@ -0,0 +1,381 @@ +''' + This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de). + + PM4Py is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + PM4Py is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PM4Py. If not, see . +''' +__doc__ = """ +The ``pm4py.write`` module contains all funcationality related to writing files/objects to disk. +""" + +from pm4py.objects.bpmn.obj import BPMN +from pm4py.objects.log.obj import EventLog, EventStream +from pm4py.objects.ocel.obj import OCEL +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.utils import __event_log_deprecation_warning +import pandas as pd +from typing import Union, Optional, Collection, Tuple, Dict +from pm4py.util import constants +from pm4py.util.pandas_utils import check_is_pandas_dataframe, check_pandas_dataframe_columns +from pm4py.objects.log.obj import XESExtension + + +def write_xes(log: Union[EventLog, pd.DataFrame], file_path: str, case_id_key: str = "case:concept:name", extensions: Optional[Collection[XESExtension]] = None, encoding: str = constants.DEFAULT_ENCODING, **kwargs) -> None: + """ + Writes an event log to disk in the XES format (see `xes-standard `_) + + :param log: log object (``pandas.DataFrame``) that needs to be written to disk + :param file_path: target file path of the event log (``.xes`` file) on disk + :param case_id_key: column key that identifies the case identifier + :param extensions: extensions defined for the event log + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + pm4py.write_xes(log, '', case_id_key='case:concept:name') + """ + __event_log_deprecation_warning(log) + + if check_is_pandas_dataframe(log): + check_pandas_dataframe_columns(log, case_id_key=case_id_key) + + file_path = str(file_path) + if not (file_path.lower().endswith("xes") or file_path.lower().endswith("xes.gz")): + file_path = file_path + ".xes" + + parameters = {} + for k, v in kwargs.items(): + parameters[k] = v + parameters[constants.PARAMETER_CONSTANT_CASEID_KEY] = case_id_key + parameters["extensions"] = extensions + parameters["encoding"] = encoding + + from pm4py.objects.log.exporter.xes import exporter as xes_exporter + xes_exporter.apply(log, file_path, parameters=parameters) + + +def write_pnml(petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, file_path: str, encoding: str = constants.DEFAULT_ENCODING) -> None: + """ + Writes a Petri net object to disk in the ``.pnml`` format (see `pnml-standard `_) + + :param petri_net: Petri net object that needs to be written to disk + :param initial_marking: initial marking of the Petri net + :param final_marking: final marking of the Petri net + :param file_path: target file path on disk of the ``.pnml`` file + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_pnml(pn, im, fm, '') + """ + file_path = str(file_path) + if not file_path.lower().endswith("pnml"): + file_path = file_path + ".pnml" + + from pm4py.objects.petri_net.exporter import exporter as petri_exporter + petri_exporter.apply(petri_net, initial_marking, file_path, final_marking=final_marking, parameters={"encoding": encoding}) + + +def write_ptml(tree: ProcessTree, file_path: str, encoding: str = constants.DEFAULT_ENCODING) -> None: + """ + Writes a process tree object to disk in the ``.ptml`` format. + + :param tree: ProcessTree object that needs to be written to disk + :param file_path: target file path on disk of the ``.ptml`` file + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_ptml(tree, '') + """ + file_path = str(file_path) + if not file_path.lower().endswith("ptml"): + file_path = file_path + ".ptml" + + from pm4py.objects.process_tree.exporter import exporter as tree_exporter + tree_exporter.apply(tree, file_path, parameters={"encoding": encoding}) + + +def write_dfg(dfg: Dict[Tuple[str,str],int], start_activities: Dict[str,int], end_activities: Dict[str,int], file_path: str, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes a directly follows graph (DFG) object to disk in the ``.dfg`` format. + + :param dfg: directly follows relation (multiset of activity-activity pairs) + :param start_activities: multiset tracking the number of occurrences of start activities + :param end_activities: mulltiset tracking the number of occurrences of end activities + :param file_path: target file path on disk to write the dfg object to + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_dfg(dfg, sa, ea, '') + """ + file_path = str(file_path) + if not file_path.lower().endswith("dfg"): + file_path = file_path + ".dfg" + + from pm4py.objects.dfg.exporter import exporter as dfg_exporter + dfg_exporter.apply(dfg, file_path, + parameters={dfg_exporter.Variants.CLASSIC.value.Parameters.START_ACTIVITIES: start_activities, + dfg_exporter.Variants.CLASSIC.value.Parameters.END_ACTIVITIES: end_activities, + "encoding": encoding}) + + +def write_bpmn(model: BPMN, file_path: str, auto_layout: bool = True, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes a BPMN model object to disk in the ``.bpmn`` format. + + :param model: BPMN model to export + :param file_path: target file path on disk to write the BPMN object to + :param auto_layout: boolean indicating whether the model should get an auto layout (which is written to disk) + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_bpmn(model, '') + """ + file_path = str(file_path) + if not file_path.lower().endswith("bpmn"): + file_path = file_path + ".bpmn" + + if auto_layout: + from pm4py.objects.bpmn.layout import layouter + model = layouter.apply(model) + from pm4py.objects.bpmn.exporter import exporter + exporter.apply(model, file_path, parameters={"encoding": encoding}) + + +def write_ocel(ocel: OCEL, file_path: str, objects_path: str = None, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes an OCEL object to disk in the ``.bpmn`` format. + Different formats are supported, including CSV (flat table), JSON-OCEL, XML-OCEL and SQLite + (described in the site http://www.ocel-standard.org/). + + :param ocel: OCEL object to write to disk + :param file_path: target file path on disk to write the OCEL object to + :param objects_path: location of the objects table (only applicable in case of .csv exporting) + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_ocel(ocel, '') + """ + file_path = str(file_path) + + if file_path.lower().endswith("csv"): + return write_ocel_csv(ocel, file_path, objects_path, encoding=encoding) + elif file_path.lower().endswith("jsonocel"): + return write_ocel_json(ocel, file_path, encoding=encoding) + elif file_path.lower().endswith("xmlocel"): + return write_ocel_xml(ocel, file_path, encoding=encoding) + elif file_path.lower().endswith("sqlite"): + return write_ocel_sqlite(ocel, file_path, encoding=encoding) + raise Exception("unsupported file format") + + +def write_ocel_csv(ocel: OCEL, file_path: str, objects_path: str, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes an OCEL object to disk in the ``.csv`` file format. + The OCEL object is exported into two separate files, i.e., one event table and one objects table. + Both file paths should be specified + + :param ocel: OCEL object + :param file_path: target file path on disk to write the event table to + :param objects_path: target file path on disk to write the objects table to + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_ocel_csv(ocel, '', '') + """ + file_path = str(file_path) + if not file_path.lower().endswith("csv"): + file_path = file_path + ".csv" + + from pm4py.objects.ocel.exporter.csv import exporter as csv_exporter + return csv_exporter.apply(ocel, file_path, objects_path=objects_path, parameters={"encoding": encoding}) + + +def write_ocel_json(ocel: OCEL, file_path: str, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes an OCEL object to disk in the ``.json`` file format (exported as ``.oceljson`` file). + + :param ocel: OCEL object + :param file_path: target file path on disk to write the OCEL object to + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_ocel_json(ocel, '') + """ + file_path = str(file_path) + if not file_path.lower().endswith("jsonocel"): + file_path = file_path + ".jsonocel" + + from pm4py.objects.ocel.exporter.jsonocel import exporter as jsonocel_exporter + + is_ocel20 = ocel.is_ocel20() + variant = jsonocel_exporter.Variants.OCEL20 if is_ocel20 else jsonocel_exporter.Variants.CLASSIC + + return jsonocel_exporter.apply(ocel, file_path, variant=variant, parameters={"encoding": encoding}) + + +def write_ocel_xml(ocel: OCEL, file_path: str, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes an OCEL object to disk in the ``.xml`` file format (exported as ``.ocelxml`` file). + + :param ocel: OCEL object + :param file_path: target file path on disk to write the OCEL object to + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_ocel_xml(ocel, '') + """ + file_path = str(file_path) + if not file_path.lower().endswith("xmlocel"): + file_path = file_path + ".xmlocel" + + from pm4py.objects.ocel.exporter.xmlocel import exporter as xmlocel_exporter + return xmlocel_exporter.apply(ocel, file_path, variant=xmlocel_exporter.Variants.CLASSIC, parameters={"encoding": encoding}) + + +def write_ocel_sqlite(ocel: OCEL, file_path: str, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes an OCEL object to disk to a ``SQLite`` database (exported as ``.sqlite`` file). + + :param ocel: OCEL object + :param file_path: target file path to the SQLite datbaase + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_ocel_sqlite(ocel, '') + """ + file_path = str(file_path) + if not file_path.lower().endswith("sqlite"): + file_path = file_path + ".sqlite" + + from pm4py.objects.ocel.exporter.sqlite import exporter as sqlite_exporter + return sqlite_exporter.apply(ocel, file_path, variant=sqlite_exporter.Variants.PANDAS_EXPORTER, parameters={"encoding": encoding}) + + +def write_ocel2(ocel: OCEL, file_path: str, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes an OCEL2.0 object to disk + + :param ocel: OCEL object + :param file_path: target file path to the SQLite datbaase + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_ocel2(ocel, '') + """ + file_path = str(file_path) + + if file_path.lower().endswith("sqlite"): + return write_ocel2_sqlite(ocel, file_path, encoding=encoding) + elif file_path.lower().endswith("xml") or file_path.lower().endswith("xmlocel"): + return write_ocel2_xml(ocel, file_path, encoding=encoding) + elif file_path.lower().endswith("jsonocel"): + return write_ocel2_json(ocel, file_path, encoding=encoding) + + +def write_ocel2_json(ocel: OCEL, file_path: str, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes an OCEL2.0 object to disk to an ``JSON`` file (exported as ``.jsonocel`` file). + + :param ocel: OCEL object + :param file_path: target file path to the JSON file + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_ocel2_json(ocel, '') + """ + file_path = str(file_path) + if "json" not in file_path: + file_path = file_path + ".json" + + from pm4py.objects.ocel.exporter.jsonocel import exporter as jsonocel_exporter + return jsonocel_exporter.apply(ocel, file_path, variant=jsonocel_exporter.Variants.OCEL20_STANDARD, parameters={"encoding": encoding}) + + +def write_ocel2_sqlite(ocel: OCEL, file_path: str, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes an OCEL2.0 object to disk to a ``SQLite`` database (exported as ``.sqlite`` file). + + :param ocel: OCEL object + :param file_path: target file path to the SQLite datbaase + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_ocel2_sqlite(ocel, '') + """ + file_path = str(file_path) + if not file_path.lower().endswith("sqlite"): + file_path = file_path + ".sqlite" + + from pm4py.objects.ocel.exporter.sqlite import exporter as sqlite_exporter + return sqlite_exporter.apply(ocel, file_path, variant=sqlite_exporter.Variants.OCEL20, parameters={"encoding": encoding}) + + +def write_ocel2_xml(ocel: OCEL, file_path: str, encoding: str = constants.DEFAULT_ENCODING): + """ + Writes an OCEL2.0 object to disk to an ``XML`` file (exported as ``.xmlocel`` file). + + :param ocel: OCEL object + :param file_path: target file path to the XML file + :param encoding: the encoding to be used (default: utf-8) + + .. code-block:: python3 + + import pm4py + + log = pm4py.write_ocel2_xml(ocel, '') + """ + file_path = str(file_path) + if not file_path.lower().endswith("xml") and not file_path.lower().endswith("xmlocel"): + file_path = file_path + ".xmlocel" + + from pm4py.objects.ocel.exporter.xmlocel import exporter as xml_exporter + return xml_exporter.apply(ocel, file_path, variant=xml_exporter.Variants.OCEL20, parameters={"encoding": encoding}) diff --git a/pm4py/requirements.txt b/pm4py/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..9bf46c732577f791447978f5a48e9db396f024b0 --- /dev/null +++ b/pm4py/requirements.txt @@ -0,0 +1,15 @@ +numpy +pandas +deprecation +networkx +graphviz +wheel +setuptools +intervaltree +lxml +matplotlib +pydotplus +pytz +scipy +tqdm +cvxopt;python_version<'3.13' diff --git a/pm4py/requirements_complete.txt b/pm4py/requirements_complete.txt new file mode 100644 index 0000000000000000000000000000000000000000..b2b2396a2f83bea711bd381cf09764a6ab27694e --- /dev/null +++ b/pm4py/requirements_complete.txt @@ -0,0 +1,26 @@ +colorama +contourpy +cycler +deprecation +fonttools +graphviz +intervaltree +kiwisolver +lxml +matplotlib +networkx +numpy +packaging +pandas +pillow +pydotplus +pyparsing +python-dateutil +pytz +scipy +setuptools +six +sortedcontainers +tqdm +tzdata +wheel diff --git a/pm4py/requirements_stable.txt b/pm4py/requirements_stable.txt new file mode 100644 index 0000000000000000000000000000000000000000..89893ae19524b8c4e9697c5400244d0208426f2f --- /dev/null +++ b/pm4py/requirements_stable.txt @@ -0,0 +1,26 @@ +colorama==0.4.6 +contourpy==1.2.1 +cycler==0.12.1 +deprecation==2.1.0 +fonttools==4.53.0 +graphviz==0.20.3 +intervaltree==3.1.0 +kiwisolver==1.4.5 +lxml==5.2.2 +matplotlib==3.9.0 +networkx==3.3 +numpy==2.0.0 +packaging==24.1 +pandas==2.2.2 +pillow==10.4.0 +pydotplus==2.0.2 +pyparsing==3.1.2 +python-dateutil==2.9.0.post0 +pytz==2024.1 +scipy==1.14.0 +setuptools==70.1.1 +six==1.16.0 +sortedcontainers==2.4.0 +tqdm==4.66.4 +tzdata==2024.1 +wheel==0.43.0 diff --git a/pm4py/safety_checks/20220111 b/pm4py/safety_checks/20220111 new file mode 100644 index 0000000000000000000000000000000000000000..803cc534bb6935dff2551a6375120311bd98f4cf --- /dev/null +++ b/pm4py/safety_checks/20220111 @@ -0,0 +1,22 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 41 packages, using free DB (updated once a month) | ++============================+===========+==========================+==========+ +| package | installed | affected | ID | ++============================+===========+==========================+==========+ +| numpy | 1.22.2 | >0 | 44715 | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220125 b/pm4py/safety_checks/20220125 new file mode 100644 index 0000000000000000000000000000000000000000..9d8ada9d670c5c4969972bb06b17746bb054b5b7 --- /dev/null +++ b/pm4py/safety_checks/20220125 @@ -0,0 +1,21 @@ +>safety check -r requirements_stable.txt ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220325 b/pm4py/safety_checks/20220325 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220325 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220401 b/pm4py/safety_checks/20220401 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220401 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220410 b/pm4py/safety_checks/20220410 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220410 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220512 b/pm4py/safety_checks/20220512 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220512 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220528 b/pm4py/safety_checks/20220528 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220528 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220603 b/pm4py/safety_checks/20220603 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220603 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220610 b/pm4py/safety_checks/20220610 new file mode 100644 index 0000000000000000000000000000000000000000..12060b81de1c22d09d1510868fac7f309c532c44 --- /dev/null +++ b/pm4py/safety_checks/20220610 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ \ No newline at end of file diff --git a/pm4py/safety_checks/20220622 b/pm4py/safety_checks/20220622 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220622 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220712 b/pm4py/safety_checks/20220712 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220712 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220729 b/pm4py/safety_checks/20220729 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220729 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220805 b/pm4py/safety_checks/20220805 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220805 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220819 b/pm4py/safety_checks/20220819 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220819 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20220901 b/pm4py/safety_checks/20220901 new file mode 100644 index 0000000000000000000000000000000000000000..02d617f1120912774214f8e893b2281ccdec297a --- /dev/null +++ b/pm4py/safety_checks/20220901 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20221106 b/pm4py/safety_checks/20221106 new file mode 100644 index 0000000000000000000000000000000000000000..7bbf4370aa373621954f7d90363a9c0dfd6b62f2 --- /dev/null +++ b/pm4py/safety_checks/20221106 @@ -0,0 +1,39 @@ ++======================================================================================================================+ + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++======================================================================================================================+ + REPORT + + You are using Safety's free vulnerability database. This data is outdated, limited, and + licensed for non-commercial use only. + All commercial projects must sign up and get an API key at https://pyup.io + + Safety v2.3.1 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 44 packages + Timestamp 2022-11-06 09:11:46 + 0 vulnerabilities found + 0 vulnerabilities ignored ++======================================================================================================================+ + No known security vulnerabilities found. + ++======================================================================================================================+ + You are using Safety's free vulnerability database. This data is outdated, limited, and + licensed for non-commercial use only. + All commercial projects must sign up and get an API key at https://pyup.io + ++======================================================================================================================+ \ No newline at end of file diff --git a/pm4py/safety_checks/20221110 b/pm4py/safety_checks/20221110 new file mode 100644 index 0000000000000000000000000000000000000000..09459caea8b958fe080b7ab3b416446455eb8c95 --- /dev/null +++ b/pm4py/safety_checks/20221110 @@ -0,0 +1,22 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 44 packages, using free DB (updated once a month) | ++============================+===========+==========================+==========+ +| package | installed | affected | ID | ++============================+===========+==========================+==========+ +| mpmath | 1.2.1 | >=1.0.0,<=1.2.1 | 51549 | ++==============================================================================+ diff --git a/pm4py/safety_checks/20221125 b/pm4py/safety_checks/20221125 new file mode 100644 index 0000000000000000000000000000000000000000..09459caea8b958fe080b7ab3b416446455eb8c95 --- /dev/null +++ b/pm4py/safety_checks/20221125 @@ -0,0 +1,22 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 44 packages, using free DB (updated once a month) | ++============================+===========+==========================+==========+ +| package | installed | affected | ID | ++============================+===========+==========================+==========+ +| mpmath | 1.2.1 | >=1.0.0,<=1.2.1 | 51549 | ++==============================================================================+ diff --git a/pm4py/safety_checks/20221202 b/pm4py/safety_checks/20221202 new file mode 100644 index 0000000000000000000000000000000000000000..09459caea8b958fe080b7ab3b416446455eb8c95 --- /dev/null +++ b/pm4py/safety_checks/20221202 @@ -0,0 +1,22 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 44 packages, using free DB (updated once a month) | ++============================+===========+==========================+==========+ +| package | installed | affected | ID | ++============================+===========+==========================+==========+ +| mpmath | 1.2.1 | >=1.0.0,<=1.2.1 | 51549 | ++==============================================================================+ diff --git a/pm4py/safety_checks/20221209 b/pm4py/safety_checks/20221209 new file mode 100644 index 0000000000000000000000000000000000000000..9f7a949f9b641ecc5d7850f22478d2c78e281e22 --- /dev/null +++ b/pm4py/safety_checks/20221209 @@ -0,0 +1,22 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 45 packages, using free DB (updated once a month) | ++============================+===========+==========================+==========+ +| package | installed | affected | ID | ++============================+===========+==========================+==========+ +| mpmath | 1.2.1 | >=1.0.0,<=1.2.1 | 51549 | ++==============================================================================+ diff --git a/pm4py/safety_checks/20221223 b/pm4py/safety_checks/20221223 new file mode 100644 index 0000000000000000000000000000000000000000..57b392ffd3249599941bdfcd270bb2a67b4e077e --- /dev/null +++ b/pm4py/safety_checks/20221223 @@ -0,0 +1,20 @@ ++==============================================================================+ +| | +| /$$$$$$ /$$ | +| /$$__ $$ | $$ | +| /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ | +| /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ | +| | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ | +| \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ | +| /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ | +| |_______/ \_______/|__/ \_______/ \___/ \____ $$ | +| /$$ | $$ | +| | $$$$$$/ | +| by pyup.io \______/ | +| | ++==============================================================================+ +| REPORT | +| checked 24 packages, using free DB (updated once a month) | ++==============================================================================+ +| No known security vulnerabilities found. | ++==============================================================================+ diff --git a/pm4py/safety_checks/20230109 b/pm4py/safety_checks/20230109 new file mode 100644 index 0000000000000000000000000000000000000000..498490ad308f0d593e52b464d7ce321ee09fabc5 --- /dev/null +++ b/pm4py/safety_checks/20230109 @@ -0,0 +1,37 @@ ++======================================================================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++======================================================================================================================+ + + REPORT + + You are using Safety's free vulnerability database. This data is outdated, limited, and + licensed for non-commercial use only. + All commercial projects must sign up and get an API key at https://pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-01-09 07:31:28 + 0 vulnerabilities found + 0 vulnerabilities ignored ++======================================================================================================================+ + + No known security vulnerabilities found. + ++======================================================================================================================+ diff --git a/pm4py/safety_checks/20230119 b/pm4py/safety_checks/20230119 new file mode 100644 index 0000000000000000000000000000000000000000..aa8cdbcd4747eb4708c07becd439d751de54ba49 --- /dev/null +++ b/pm4py/safety_checks/20230119 @@ -0,0 +1,43 @@ ++======================================================================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++======================================================================================================================+ + + REPORT + + You are using Safety's free vulnerability database. This data is outdated, limited, and + licensed for non-commercial use only. + All commercial projects must sign up and get an API key at https://pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-01-19 14:44:30 + 0 vulnerabilities found + 0 vulnerabilities ignored ++======================================================================================================================+ + + No known security vulnerabilities found. + ++======================================================================================================================+ + + You are using Safety's free vulnerability database. This data is outdated, limited, and + licensed for non-commercial use only. + All commercial projects must sign up and get an API key at https://pyup.io + ++======================================================================================================================+ diff --git a/pm4py/safety_checks/20230130 b/pm4py/safety_checks/20230130 new file mode 100644 index 0000000000000000000000000000000000000000..7366fbc017e65210d25d0d2e3aa0a456a6c7f5a3 --- /dev/null +++ b/pm4py/safety_checks/20230130 @@ -0,0 +1,43 @@ ++======================================================================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++======================================================================================================================+ + + REPORT + + You are using Safety's free vulnerability database. This data is outdated, limited, and + licensed for non-commercial use only. + All commercial projects must sign up and get an API key at https://pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-01-30 07:02:48 + 0 vulnerabilities found + 0 vulnerabilities ignored ++======================================================================================================================+ + + No known security vulnerabilities found. + ++======================================================================================================================+ + + You are using Safety's free vulnerability database. This data is outdated, limited, and + licensed for non-commercial use only. + All commercial projects must sign up and get an API key at https://pyup.io + ++======================================================================================================================+ diff --git a/pm4py/safety_checks/20230211 b/pm4py/safety_checks/20230211 new file mode 100644 index 0000000000000000000000000000000000000000..00640fbca4aec4ca73e19ea2894ff2bbe57317e0 --- /dev/null +++ b/pm4py/safety_checks/20230211 @@ -0,0 +1,41 @@ ++======================================================================================================================+ + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++======================================================================================================================+ + REPORT + + Safety is using PyUp's free open-source vulnerability database. This data is delayed by up to 30 days and +limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more; get an API key at https://pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-02-11 12:39:23 + 0 vulnerabilities found + 0 vulnerabilities ignored ++======================================================================================================================+ + No known security vulnerabilities found. + ++======================================================================================================================+ + Safety is using PyUp's free open-source vulnerability database. This data is delayed by up to 30 days and +limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more; get an API key at https://pyup.io + ++======================================================================================================================+ diff --git a/pm4py/safety_checks/20230305 b/pm4py/safety_checks/20230305 new file mode 100644 index 0000000000000000000000000000000000000000..c9901c750667266defa68dc362e5a73e48292801 --- /dev/null +++ b/pm4py/safety_checks/20230305 @@ -0,0 +1,41 @@ ++======================================================================================================================+ + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++======================================================================================================================+ + REPORT + + Safety is using PyUp's free open-source vulnerability database. This data is delayed by up to 30 days and +limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more; get an API key at https://pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-03-05 13:34:31 + 0 vulnerabilities found + 0 vulnerabilities ignored ++======================================================================================================================+ + No known security vulnerabilities found. + ++======================================================================================================================+ + Safety is using PyUp's free open-source vulnerability database. This data is delayed by up to 30 days and +limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more; get an API key at https://pyup.io + ++======================================================================================================================+ \ No newline at end of file diff --git a/pm4py/safety_checks/20230311 b/pm4py/safety_checks/20230311 new file mode 100644 index 0000000000000000000000000000000000000000..7f236b07b7a28326671466bb8d5436aca11dc5fb --- /dev/null +++ b/pm4py/safety_checks/20230311 @@ -0,0 +1,39 @@ ++======================================================================================================================+ + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++======================================================================================================================+ + REPORT + + Safety is using PyUp's free open-source vulnerability database. This data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-03-11 10:43:19 + 0 vulnerabilities found + 0 vulnerabilities ignored ++======================================================================================================================+ + No known security vulnerabilities found. + ++======================================================================================================================+ + Safety is using PyUp's free open-source vulnerability database. This data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more sign up at https://pyup.io or email sales@pyup.io + ++======================================================================================================================+ diff --git a/pm4py/safety_checks/20230323 b/pm4py/safety_checks/20230323 new file mode 100644 index 0000000000000000000000000000000000000000..6aa83246bd873265bf15d5406cfc8b4d5bfeb5cb --- /dev/null +++ b/pm4py/safety_checks/20230323 @@ -0,0 +1,43 @@ ++======================================================================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++======================================================================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-03-22 14:51:49 + 0 vulnerabilities found + 0 vulnerabilities ignored ++======================================================================================================================+ + + No known security vulnerabilities found. + ++======================================================================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more sign up at https://pyup.io or email sales@pyup.io + ++======================================================================================================================+ diff --git a/pm4py/safety_checks/20230328 b/pm4py/safety_checks/20230328 new file mode 100644 index 0000000000000000000000000000000000000000..a1f2573e3545d9352561cf5d472bc2f615f17f3d --- /dev/null +++ b/pm4py/safety_checks/20230328 @@ -0,0 +1,43 @@ ++======================================================================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++======================================================================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-03-28 11:21:57 + 0 vulnerabilities found + 0 vulnerabilities ignored ++======================================================================================================================+ + + No known security vulnerabilities found. + ++======================================================================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more sign up at https://pyup.io or email sales@pyup.io + ++======================================================================================================================+ diff --git a/pm4py/safety_checks/20230403 b/pm4py/safety_checks/20230403 new file mode 100644 index 0000000000000000000000000000000000000000..59f1acbc91cddf276b0ad10295de0b6fceb00961 --- /dev/null +++ b/pm4py/safety_checks/20230403 @@ -0,0 +1,43 @@ ++======================================================================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++======================================================================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-04-03 11:00:04 + 0 vulnerabilities found + 0 vulnerabilities ignored ++======================================================================================================================+ + + No known security vulnerabilities found. + ++======================================================================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity reporting, cybersecurity support, team +and project policy management and more sign up at https://pyup.io or email sales@pyup.io + ++======================================================================================================================+ diff --git a/pm4py/safety_checks/20230412 b/pm4py/safety_checks/20230412 new file mode 100644 index 0000000000000000000000000000000000000000..a08708516a5a34c7a3c854323c881a0bb4851df6 --- /dev/null +++ b/pm4py/safety_checks/20230412 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited.  + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-04-12 12:22:23 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited.  + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20230505 b/pm4py/safety_checks/20230505 new file mode 100644 index 0000000000000000000000000000000000000000..bc6ff98eb91433dfa9e373b7cfbe695b60c65e25 --- /dev/null +++ b/pm4py/safety_checks/20230505 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-05-05 13:55:32 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20230616 b/pm4py/safety_checks/20230616 new file mode 100644 index 0000000000000000000000000000000000000000..efe3c9fd956381e9a9761d155ae56f4878ae9abb --- /dev/null +++ b/pm4py/safety_checks/20230616 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 24 packages + Timestamp 2023-06-16 13:08:28 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20230630 b/pm4py/safety_checks/20230630 new file mode 100644 index 0000000000000000000000000000000000000000..bb77207ab51347f46b2e38abe7e8c952a84b5e2c --- /dev/null +++ b/pm4py/safety_checks/20230630 @@ -0,0 +1,25 @@ +Requirement already satisfied: colorama==0.4.6 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 1)) (0.4.6) +Requirement already satisfied: contourpy==1.1.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 2)) (1.1.0) +Requirement already satisfied: cycler==0.11.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 3)) (0.11.0) +Requirement already satisfied: deprecation==2.1.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 4)) (2.1.0) +Requirement already satisfied: fonttools==4.40.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 5)) (4.40.0) +Requirement already satisfied: graphviz==0.20.1 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 6)) (0.20.1) +Requirement already satisfied: intervaltree==3.1.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 7)) (3.1.0) +Requirement already satisfied: kiwisolver==1.4.4 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 8)) (1.4.4) +Requirement already satisfied: lxml==4.9.2 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 9)) (4.9.2) +Requirement already satisfied: matplotlib==3.7.1 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 10)) (3.7.1) +Requirement already satisfied: networkx==3.1 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 11)) (3.1) +Requirement already satisfied: numpy==1.25.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 12)) (1.25.0) +Requirement already satisfied: packaging==23.1 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 13)) (23.1) +Requirement already satisfied: pandas==2.0.3 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 14)) (2.0.3) +Requirement already satisfied: pillow==9.5.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 15)) (9.5.0) +Requirement already satisfied: pydotplus==2.0.2 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 16)) (2.0.2) +Requirement already satisfied: pyparsing==3.1.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 17)) (3.1.0) +Requirement already satisfied: python-dateutil==2.8.2 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 18)) (2.8.2) +Requirement already satisfied: pytz==2023.3 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 19)) (2023.3) +Requirement already satisfied: scipy==1.11.1 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 20)) (1.11.1) +Requirement already satisfied: six==1.16.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 21)) (1.16.0) +Requirement already satisfied: sortedcontainers==2.4.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 22)) (2.4.0) +Requirement already satisfied: stringdist==1.0.9 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 23)) (1.0.9) +Requirement already satisfied: tqdm==4.65.0 in c:\python310\lib\site-packages (from -r requirements_stable.txt (line 24)) (4.65.0) +Requirement already satisfied: tzdata>=2022.1 in c:\python310\lib\site-packages (from pandas==2.0.3->-r requirements_stable.txt (line 14)) (2022.7) diff --git a/pm4py/safety_checks/20230714 b/pm4py/safety_checks/20230714 new file mode 100644 index 0000000000000000000000000000000000000000..44919811324f2c641aa3015a692cb96af3a69c6a --- /dev/null +++ b/pm4py/safety_checks/20230714 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-07-14 07:12:29 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20230728 b/pm4py/safety_checks/20230728 new file mode 100644 index 0000000000000000000000000000000000000000..df406eb00a0b962788f927ab4637b82a20ffd922 --- /dev/null +++ b/pm4py/safety_checks/20230728 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-07-28 13:17:25 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20230825 b/pm4py/safety_checks/20230825 new file mode 100644 index 0000000000000000000000000000000000000000..e54323275f36cbba33db212d6eedf1fd768fc1b7 --- /dev/null +++ b/pm4py/safety_checks/20230825 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-08-25 09:09:47 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20230828 b/pm4py/safety_checks/20230828 new file mode 100644 index 0000000000000000000000000000000000000000..7a4832ef3ae3ebbff60fa64c1120c03a69674c2d --- /dev/null +++ b/pm4py/safety_checks/20230828 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-08-28 09:18:39 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20230830 b/pm4py/safety_checks/20230830 new file mode 100644 index 0000000000000000000000000000000000000000..90377e56763c910ff71ab634413181f19e3edd32 --- /dev/null +++ b/pm4py/safety_checks/20230830 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-08-30 07:51:17 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20230922 b/pm4py/safety_checks/20230922 new file mode 100644 index 0000000000000000000000000000000000000000..96c6299c5dc8df121294a7cc7b6cd5f08b365baf --- /dev/null +++ b/pm4py/safety_checks/20230922 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-09-22 07:46:26 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20231005 b/pm4py/safety_checks/20231005 new file mode 100644 index 0000000000000000000000000000000000000000..48e2215f4c8ae5aa946a70b71df879bb49ed51c6 --- /dev/null +++ b/pm4py/safety_checks/20231005 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-10-05 08:07:08 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20231012 b/pm4py/safety_checks/20231012 new file mode 100644 index 0000000000000000000000000000000000000000..644af9798db3122552f4224a3f259afbbfbab1f3 --- /dev/null +++ b/pm4py/safety_checks/20231012 @@ -0,0 +1,53 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + ANNOUNCEMENTS + + * Special Advisory: cURL High Severity Vulnerability: https://bit.ly/3FeaPsm + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-10-12 08:36:32 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20231115 b/pm4py/safety_checks/20231115 new file mode 100644 index 0000000000000000000000000000000000000000..69c784b33637b1730e6a18a1a8f00279b9ca8c6a --- /dev/null +++ b/pm4py/safety_checks/20231115 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-11-15 12:51:20 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20231120 b/pm4py/safety_checks/20231120 new file mode 100644 index 0000000000000000000000000000000000000000..485c39af77ab69e4cba34910d8fd777a7966fa1c --- /dev/null +++ b/pm4py/safety_checks/20231120 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-11-20 08:19:42 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20231214 b/pm4py/safety_checks/20231214 new file mode 100644 index 0000000000000000000000000000000000000000..cba24d1d7615f8d455aa92cd318746a3cfdb41a3 --- /dev/null +++ b/pm4py/safety_checks/20231214 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-12-14 07:28:53 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20231810 b/pm4py/safety_checks/20231810 new file mode 100644 index 0000000000000000000000000000000000000000..6aeb6b9e5bf33632f037bddb21bec7da4c92a2a0 --- /dev/null +++ b/pm4py/safety_checks/20231810 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2023-10-18 11:56:09 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20240129 b/pm4py/safety_checks/20240129 new file mode 100644 index 0000000000000000000000000000000000000000..dead986c9976ae7a9f4e9ecf5c1b1ae7f1c0bfc2 --- /dev/null +++ b/pm4py/safety_checks/20240129 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2024-01-29 07:07:08 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20240222 b/pm4py/safety_checks/20240222 new file mode 100644 index 0000000000000000000000000000000000000000..59d7f4af8ddef02342c3144ca58afc1a5f9d5147 --- /dev/null +++ b/pm4py/safety_checks/20240222 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2024-02-22 07:09:34 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20240301 b/pm4py/safety_checks/20240301 new file mode 100644 index 0000000000000000000000000000000000000000..982c8d94e2b3aa85684832f9d13ea0a50ff1d0a8 --- /dev/null +++ b/pm4py/safety_checks/20240301 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2024-03-01 07:48:36 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20240304 b/pm4py/safety_checks/20240304 new file mode 100644 index 0000000000000000000000000000000000000000..0cae836ae2167b9ec61af2938abf8c7a5a754a73 --- /dev/null +++ b/pm4py/safety_checks/20240304 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by pyup.io \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v2.3.5 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using non-commercial database + Found and scanned 25 packages + Timestamp 2024-03-04 11:38:54 + 0 vulnerabilities found + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities found. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/safety_checks/20240314 b/pm4py/safety_checks/20240314 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pm4py/safety_checks/20240701 b/pm4py/safety_checks/20240701 new file mode 100644 index 0000000000000000000000000000000000000000..1186c22d961512053da1f349998c2b19bb56dd21 --- /dev/null +++ b/pm4py/safety_checks/20240701 @@ -0,0 +1,47 @@ ++==============================================================================+ + + /$$$$$$ /$$ + /$$__ $$ | $$ + /$$$$$$$ /$$$$$$ | $$ \__//$$$$$$ /$$$$$$ /$$ /$$ + /$$_____/ |____ $$| $$$$ /$$__ $$|_ $$_/ | $$ | $$ + | $$$$$$ /$$$$$$$| $$_/ | $$$$$$$$ | $$ | $$ | $$ + \____ $$ /$$__ $$| $$ | $$_____/ | $$ /$$| $$ | $$ + /$$$$$$$/| $$$$$$$| $$ | $$$$$$$ | $$$$/| $$$$$$$ + |_______/ \_______/|__/ \_______/ \___/ \____ $$ + /$$ | $$ + | $$$$$$/ + by safetycli.com \______/ + ++==============================================================================+ + + REPORT + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + + Safety v3.1.0 is scanning for Vulnerabilities... + Scanning dependencies in your files: + + -> requirements_stable.txt + + Using open-source vulnerability database + Found and scanned 26 packages + Timestamp 2024-07-01 06:38:05 + 0 vulnerabilities reported + 0 vulnerabilities ignored ++==============================================================================+ + + No known security vulnerabilities reported. + ++==============================================================================+ + + Safety is using PyUp's free open-source vulnerability database. This +data is 30 days old and limited. + For real-time enhanced vulnerability data, fix recommendations, severity +reporting, cybersecurity support, team and project policy management and more +sign up at https://pyup.io or email sales@pyup.io + ++==============================================================================+ diff --git a/pm4py/setup.py b/pm4py/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..27e10a9a78791a65aff317d93eed9af5ae48dafd --- /dev/null +++ b/pm4py/setup.py @@ -0,0 +1,36 @@ +import runpy +from os.path import dirname, join +from pathlib import Path +from setuptools import setup, find_packages + + +# Import only the metadata of the pm4py to use in the setup. We cannot import it directly because +# then we need to import packages that are about to be installed by the setup itself. +meta_path = Path(__file__).parent.absolute() / "pm4py" / "meta.py" +meta = runpy.run_path(str(meta_path)) + + +def read_file(filename): + with open(join(dirname(__file__), filename)) as f: + return f.read() + + +setup( + name=meta['__name__'], + version=meta['__version__'], + description=meta['__doc__'].strip(), + long_description=read_file('README.md'), + author=meta['__author__'], + author_email=meta['__author_email__'], + py_modules=['pm4py'], + include_package_data=True, + packages=[x for x in find_packages() if x.startswith("pm4py")], + url='https://pm4py.fit.fraunhofer.de', + license='GPL 3.0', + install_requires=read_file("requirements.txt").split("\n"), + project_urls={ + 'Documentation': 'https://pm4py.fit.fraunhofer.de', + 'Source': 'https://github.com/pm4py/pm4py-source', + 'Tracker': 'https://github.com/pm4py/pm4py-source/issues', + } +) diff --git a/pm4py/tests/README.txt b/pm4py/tests/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..d85368654f2e5eb1c4bcf80ba1934d660cba0c36 --- /dev/null +++ b/pm4py/tests/README.txt @@ -0,0 +1,3 @@ +To execute all tests: + +python execute_tests.py \ No newline at end of file diff --git a/pm4py/tests/__init__.py b/pm4py/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pm4py/tests/algorithm_test.py b/pm4py/tests/algorithm_test.py new file mode 100644 index 0000000000000000000000000000000000000000..442e4c961291cbe87e54538c3c6a2f43c09d717e --- /dev/null +++ b/pm4py/tests/algorithm_test.py @@ -0,0 +1,129 @@ +import unittest +from pm4py.objects.log.util import dataframe_utils +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.conversion.process_tree import converter as process_tree_converter +from pm4py.util import constants, pandas_utils +import os + + +class AlgorithmTest(unittest.TestCase): + def test_importing_xes(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "running-example.xes"), + variant=xes_importer.Variants.ITERPARSE) + log = xes_importer.apply(os.path.join("input_data", "running-example.xes"), + variant=xes_importer.Variants.LINE_BY_LINE) + log = xes_importer.apply(os.path.join("input_data", "running-example.xes"), + variant=xes_importer.Variants.ITERPARSE_MEM_COMPRESSED) + log = xes_importer.apply(os.path.join("input_data", "running-example.xes"), + variant=xes_importer.Variants.CHUNK_REGEX) + + """def test_hiearch_clustering(self): + from pm4py.algo.clustering.trace_attribute_driven import algorithm as clust_algorithm + log = xes_importer.apply(os.path.join("input_data", "receipt.xes"), variant=xes_importer.Variants.LINE_BY_LINE, + parameters={xes_importer.Variants.LINE_BY_LINE.value.Parameters.MAX_TRACES: 50}) + # raise Exception("%d" % (len(log))) + clust_algorithm.apply(log, "responsible", variant=clust_algorithm.Variants.VARIANT_DMM_VEC)""" + + def test_log_skeleton(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.log_skeleton import algorithm as lsk_discovery + model = lsk_discovery.apply(log) + from pm4py.algo.conformance.log_skeleton import algorithm as lsk_conformance + conf = lsk_conformance.apply(log, model) + + def test_alignment(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net, im, fm = alpha_miner.apply(log) + from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments + aligned_traces = alignments.apply(log, net, im, fm, variant=alignments.Variants.VERSION_STATE_EQUATION_A_STAR) + aligned_traces = alignments.apply(log, net, im, fm, variant=alignments.Variants.VERSION_DIJKSTRA_NO_HEURISTICS) + from pm4py.algo.evaluation.replay_fitness import algorithm as rp_fitness_evaluator + fitness = rp_fitness_evaluator.apply(log, net, im, fm, variant=rp_fitness_evaluator.Variants.ALIGNMENT_BASED) + evaluation = rp_fitness_evaluator.evaluate(aligned_traces, + variant=rp_fitness_evaluator.Variants.ALIGNMENT_BASED) + from pm4py.algo.evaluation.precision import algorithm as precision_evaluator + precision = precision_evaluator.apply(log, net, im, fm, variant=rp_fitness_evaluator.Variants.ALIGNMENT_BASED) + + def test_decomp_alignment(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net, im, fm = alpha_miner.apply(log) + from pm4py.algo.conformance.alignments.decomposed import algorithm as decomp_align + aligned_traces = decomp_align.apply(log, net, im, fm, variant=decomp_align.Variants.RECOMPOS_MAXIMAL) + + def test_tokenreplay(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net, im, fm = alpha_miner.apply(log) + from pm4py.algo.conformance.tokenreplay import algorithm as token_replay + replayed_traces = token_replay.apply(log, net, im, fm, variant=token_replay.Variants.TOKEN_REPLAY) + replayed_traces = token_replay.apply(log, net, im, fm, variant=token_replay.Variants.BACKWARDS) + from pm4py.algo.evaluation.replay_fitness import algorithm as rp_fitness_evaluator + fitness = rp_fitness_evaluator.apply(log, net, im, fm, variant=rp_fitness_evaluator.Variants.TOKEN_BASED) + evaluation = rp_fitness_evaluator.evaluate(replayed_traces, variant=rp_fitness_evaluator.Variants.TOKEN_BASED) + from pm4py.algo.evaluation.precision import algorithm as precision_evaluator + precision = precision_evaluator.apply(log, net, im, fm, + variant=precision_evaluator.Variants.ETCONFORMANCE_TOKEN) + from pm4py.algo.evaluation.generalization import algorithm as generalization_evaluation + generalization = generalization_evaluation.apply(log, net, im, fm, + variant=generalization_evaluation.Variants.GENERALIZATION_TOKEN) + + def test_evaluation(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net, im, fm = alpha_miner.apply(log) + from pm4py.algo.evaluation.simplicity import algorithm as simplicity + simp = simplicity.apply(net) + from pm4py.algo.evaluation import algorithm as evaluation_method + eval = evaluation_method.apply(log, net, im, fm) + + def test_playout(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net, im, fm = alpha_miner.apply(log) + from pm4py.algo.simulation.playout.petri_net import algorithm + log2 = algorithm.apply(net, im, fm) + + def test_tree_generation(self): + from pm4py.algo.simulation.tree_generator import algorithm as tree_simulator + tree1 = tree_simulator.apply(variant=tree_simulator.Variants.BASIC) + tree2 = tree_simulator.apply(variant=tree_simulator.Variants.PTANDLOGGENERATOR) + + def test_alpha_miner_log(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net1, im1, fm1 = alpha_miner.apply(log, variant=alpha_miner.Variants.ALPHA_VERSION_CLASSIC) + net2, im2, fm2 = alpha_miner.apply(log, variant=alpha_miner.Variants.ALPHA_VERSION_PLUS) + from pm4py.algo.discovery.dfg import algorithm as dfg_discovery + dfg = dfg_discovery.apply(log) + net3, im3, fm3 = alpha_miner.apply_dfg(dfg, variant=alpha_miner.Variants.ALPHA_VERSION_CLASSIC) + + def test_alpha_miner_dataframe(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net, im, fm = alpha_miner.apply(df, variant=alpha_miner.Variants.ALPHA_VERSION_CLASSIC) + + def test_tsystem(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.transition_system import algorithm as ts_system + tsystem = ts_system.apply(log, variant=ts_system.Variants.VIEW_BASED) + + def test_inductive_miner(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + + def test_performance_spectrum(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.performance_spectrum import algorithm as pspectrum + ps = pspectrum.apply(log, ["register request", "decide"]) + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + ps = pspectrum.apply(df, ["register request", "decide"]) + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/alignment_test.py b/pm4py/tests/alignment_test.py new file mode 100644 index 0000000000000000000000000000000000000000..e1ac4e559b91fe3cfecb6fbb39781c11a6dc4b97 --- /dev/null +++ b/pm4py/tests/alignment_test.py @@ -0,0 +1,106 @@ +import os +import unittest + +from pm4py.algo.conformance.alignments.petri_net import algorithm as align_alg +from pm4py.algo.discovery.alpha import algorithm as alpha_alg +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.objects import petri_net +from pm4py.objects.log.importer.xes import importer as xes_importer +from tests.constants import INPUT_DATA_DIR +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + + +class AlignmentTest(unittest.TestCase): + def test_alignment_alpha(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + net, marking, fmarking = alpha_alg.apply(log) + final_marking = petri_net.obj.Marking() + for p in net.places: + if not p.out_arcs: + final_marking[p] = 1 + for trace in log: + cf_result = \ + align_alg.apply(trace, net, marking, final_marking, variant=align_alg.VERSION_DIJKSTRA_NO_HEURISTICS)[ + 'alignment'] + is_fit = True + for couple in cf_result: + if not (couple[0] == couple[1] or couple[0] == ">>" and couple[1] is None): + is_fit = False + if not is_fit: + raise Exception("should be fit") + + def test_alignment_pnml(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, marking, final_marking = process_tree_converter.apply(process_tree) + for trace in log: + cf_result = \ + align_alg.apply(trace, net, marking, final_marking, variant=align_alg.VERSION_DIJKSTRA_NO_HEURISTICS)[ + 'alignment'] + is_fit = True + for couple in cf_result: + if not (couple[0] == couple[1] or couple[0] == ">>" and couple[1] is None): + is_fit = False + if not is_fit: + raise Exception("should be fit") + + def test_tree_align_receipt(self): + import pm4py + log = pm4py.read_xes("input_data/receipt.xes") + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.2) + al = pm4py.conformance_diagnostics_alignments(log, tree, return_diagnostics_dataframe=False) + + def test_tree_align_reviewing(self): + import pm4py + log = pm4py.read_xes("compressed_input_data/04_reviewing.xes.gz") + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.2) + al = pm4py.conformance_diagnostics_alignments(log, tree, return_diagnostics_dataframe=False) + + def test_tree_align_reviewing_classifier(self): + import pm4py + log = xes_importer.apply("compressed_input_data/04_reviewing.xes.gz") + for trace in log: + for event in trace: + event["concept:name"] = event["concept:name"] + "+" + event["lifecycle:transition"] + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.2) + al = pm4py.conformance_diagnostics_alignments(log, tree, return_diagnostics_dataframe=False) + + def test_tree_align_reviewing_classifier_different_key(self): + import pm4py + log = xes_importer.apply("compressed_input_data/04_reviewing.xes.gz") + for trace in log: + for event in trace: + event["@@classifier"] = event["concept:name"] + "+" + event["lifecycle:transition"] + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + tree = inductive_miner.apply(log, parameters={inductive_miner.Parameters.ACTIVITY_KEY: "@@classifier"}) + from pm4py.algo.conformance.alignments.process_tree.variants import search_graph_pt + al = search_graph_pt.apply(log, tree, parameters={search_graph_pt.Parameters.ACTIVITY_KEY: "@@classifier"}) + + def test_variant_state_eq_a_star(self): + import pm4py + log = pm4py.read_xes("input_data/running-example.xes") + net, im, fm = pm4py.discover_petri_net_inductive(log) + align_alg.apply(log, net, im, fm, variant=align_alg.Variants.VERSION_STATE_EQUATION_A_STAR) + + def test_variant_dijkstra_less_memory(self): + import pm4py + log = pm4py.read_xes("input_data/running-example.xes") + net, im, fm = pm4py.discover_petri_net_inductive(log) + align_alg.apply(log, net, im, fm, variant=align_alg.Variants.VERSION_DIJKSTRA_LESS_MEMORY) + + def test_variant_tweaked_state_eq_a_star(self): + import pm4py + log = pm4py.read_xes("input_data/running-example.xes") + net, im, fm = pm4py.discover_petri_net_inductive(log) + align_alg.apply(log, net, im, fm, variant=align_alg.Variants.VERSION_TWEAKED_STATE_EQUATION_A_STAR) + + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/alpha_test.py b/pm4py/tests/alpha_test.py new file mode 100644 index 0000000000000000000000000000000000000000..c6585acf29bcd48f6effd2c264163ed1ab87fa75 --- /dev/null +++ b/pm4py/tests/alpha_test.py @@ -0,0 +1,114 @@ +import logging +import os +import unittest + +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.algo.conformance.tokenreplay import algorithm as token_replay +from pm4py.algo.conformance.tokenreplay.variants.token_replay import NoConceptNameException +from pm4py.algo.discovery.alpha import algorithm as alpha_alg +from pm4py.objects import petri_net +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.util import sampling, sorting, index_attribute +from pm4py.objects.petri_net.exporter import exporter as petri_exporter +from pm4py.visualization.petri_net.common import visualize as pn_viz +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils +from tests.constants import INPUT_DATA_DIR, OUTPUT_DATA_DIR, PROBLEMATIC_XES_DIR + + +class AlphaMinerTest(unittest.TestCase): + def obtainPetriNetThroughAlphaMiner(self, log_name): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + + if ".xes" in log_name: + log = xes_importer.apply(log_name) + else: + df = pandas_utils.read_csv(log_name) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + log = log_conversion.apply(df, variant=log_conversion.Variants.TO_EVENT_LOG) + net, marking, fmarking = alpha_alg.apply(log) + + return log, net, marking, fmarking + + def test_applyAlphaMinerToXES(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + # calculate and compare Petri nets obtained on the same log to verify that instances + # are working correctly + log1, net1, marking1, fmarking1 = self.obtainPetriNetThroughAlphaMiner( + os.path.join(INPUT_DATA_DIR, "running-example.xes")) + log2, net2, marking2, fmarking2 = self.obtainPetriNetThroughAlphaMiner( + os.path.join(INPUT_DATA_DIR, "running-example.xes")) + log1 = sorting.sort_timestamp(log1) + log1 = sampling.sample(log1) + log1 = index_attribute.insert_trace_index_as_event_attribute(log1) + log2 = sorting.sort_timestamp(log2) + log2 = sampling.sample(log2) + log2 = index_attribute.insert_trace_index_as_event_attribute(log2) + self.assertEqual(log2, log2) + petri_exporter.apply(net1, marking1, os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + os.remove(os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + self.assertEqual(len(net1.places), len(net2.places)) + self.assertEqual(len(net1.transitions), len(net2.transitions)) + self.assertEqual(len(net1.arcs), len(net2.arcs)) + final_marking = petri_net.obj.Marking() + for p in net1.places: + if not p.out_arcs: + final_marking[p] = 1 + aligned_traces = token_replay.apply(log1, net1, marking1, final_marking) + self.assertEqual(aligned_traces, aligned_traces) + + def test_applyAlphaMinerToCSV(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + # calculate and compare Petri nets obtained on the same log to verify that instances + # are working correctly + log1, net1, marking1, fmarking1 = self.obtainPetriNetThroughAlphaMiner( + os.path.join(INPUT_DATA_DIR, "running-example.csv")) + log2, net2, marking2, fmarking2 = self.obtainPetriNetThroughAlphaMiner( + os.path.join(INPUT_DATA_DIR, "running-example.csv")) + log1 = sorting.sort_timestamp(log1) + log1 = sampling.sample(log1) + log1 = index_attribute.insert_trace_index_as_event_attribute(log1) + log2 = sorting.sort_timestamp(log2) + log2 = sampling.sample(log2) + log2 = index_attribute.insert_trace_index_as_event_attribute(log2) + petri_exporter.apply(net1, marking1, os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + os.remove(os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + self.assertEqual(len(net1.places), len(net2.places)) + self.assertEqual(len(net1.transitions), len(net2.transitions)) + self.assertEqual(len(net1.arcs), len(net2.arcs)) + final_marking = petri_net.obj.Marking() + for p in net1.places: + if not p.out_arcs: + final_marking[p] = 1 + aligned_traces = token_replay.apply(log1, net1, marking1, final_marking) + self.assertEqual(aligned_traces, aligned_traces) + + def test_alphaMinerVisualizationFromXES(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log, net, marking, fmarking = self.obtainPetriNetThroughAlphaMiner( + os.path.join(INPUT_DATA_DIR, "running-example.xes")) + log = sorting.sort_timestamp(log) + log = sampling.sample(log) + log = index_attribute.insert_trace_index_as_event_attribute(log) + petri_exporter.apply(net, marking, os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + os.remove(os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + gviz = pn_viz.graphviz_visualization(net) + self.assertEqual(gviz, gviz) + final_marking = petri_net.obj.Marking() + for p in net.places: + if not p.out_arcs: + final_marking[p] = 1 + aligned_traces = token_replay.apply(log, net, marking, fmarking) + self.assertEqual(aligned_traces, aligned_traces) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/bpmn_tests.py b/pm4py/tests/bpmn_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..e3a7427b1410a3edabfa25428302aaedb164d860 --- /dev/null +++ b/pm4py/tests/bpmn_tests.py @@ -0,0 +1,40 @@ +import os +import unittest +import pm4py +from pm4py.objects.conversion.bpmn import converter as bpmn_converter +from pm4py.objects.conversion.process_tree import converter as tree_converter +from pm4py.objects.bpmn.importer import importer as bpmn_importer +from pm4py.objects.bpmn.layout import layouter as bpmn_layouter +from pm4py.objects.bpmn.exporter import exporter as bpmn_exporter + + +class BPMNTests(unittest.TestCase): + def test_tree_to_bpmn(self): + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes")) + tree = pm4py.discover_process_tree_inductive(log) + bpmn_graph = tree_converter.apply(tree, variant=tree_converter.Variants.TO_BPMN) + + def test_bpmn_to_petri_net(self): + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes")) + bpmn_graph = bpmn_importer.apply(os.path.join("input_data", "running-example.bpmn")) + net, im, fm = bpmn_converter.apply(bpmn_graph, variant=bpmn_converter.Variants.TO_PETRI_NET) + fitness_tbr = pm4py.fitness_token_based_replay(log, net, im, fm) + + def test_bpmn_layouting(self): + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes")) + tree = pm4py.discover_process_tree_inductive(log) + bpmn_graph = tree_converter.apply(tree, variant=tree_converter.Variants.TO_BPMN) + bpmn_graph = bpmn_layouter.apply(bpmn_graph) + + def test_bpmn_exporting(self): + bpmn_graph = bpmn_importer.apply(os.path.join("input_data", "running-example.bpmn")) + bpmn_exporter.apply(bpmn_graph, os.path.join("test_output_data", "running-example.bpmn")) + os.remove(os.path.join("test_output_data", "running-example.bpmn")) + + def test_bpmn_importing_and_layouting(self): + bpmn_graph = bpmn_importer.apply(os.path.join("input_data", "running-example.bpmn")) + bpmn_graph = bpmn_layouter.apply(bpmn_graph) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/compressed_input_data/01_running-example.xes.gz b/pm4py/tests/compressed_input_data/01_running-example.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..f1bb49f4968150b3ce745158e5e4dade52dc2e17 --- /dev/null +++ b/pm4py/tests/compressed_input_data/01_running-example.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd1bd0744ff53acbb4d9ed4a6a6c4588e4c0d2d9953c39d09f01169608cb1745 +size 1226 diff --git a/pm4py/tests/compressed_input_data/02_teleclaims.xes.gz b/pm4py/tests/compressed_input_data/02_teleclaims.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..e4882b1f37f8b43690ac1bf86f7d6bc0c6bed1b9 --- /dev/null +++ b/pm4py/tests/compressed_input_data/02_teleclaims.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12844ef86e61b2c315d6dfa1f304ce45a5202387ee883112b0bd2f5cc6ee1536 +size 364931 diff --git a/pm4py/tests/compressed_input_data/03_repairExample.xes.gz b/pm4py/tests/compressed_input_data/03_repairExample.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..552c282d4a2b0cfca1d5996e3c9e7a40ee9e3d44 --- /dev/null +++ b/pm4py/tests/compressed_input_data/03_repairExample.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be9fc936a4c456a757e0af0c1532ba99f3a27e7ebf09943fb799297f7deb15a5 +size 100436 diff --git a/pm4py/tests/compressed_input_data/04_reviewing.xes.gz b/pm4py/tests/compressed_input_data/04_reviewing.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..b16f31327b9f4d8233409a541e20bdd074c64b2d --- /dev/null +++ b/pm4py/tests/compressed_input_data/04_reviewing.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35f02e5cfd8562df80bd5d72523c089604b582e1406f6d1069754db282eb896f +size 28366 diff --git a/pm4py/tests/compressed_input_data/06_bpic2013_closed.xes.gz b/pm4py/tests/compressed_input_data/06_bpic2013_closed.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..cdcf8b198b5680651166a27eb1c83e7282008aaf --- /dev/null +++ b/pm4py/tests/compressed_input_data/06_bpic2013_closed.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d2a6c64666621dd258765cabe38c013b5a8c59cc42b55d4191ddf57b6da072f +size 186515 diff --git a/pm4py/tests/compressed_input_data/08_receipt.xes.gz b/pm4py/tests/compressed_input_data/08_receipt.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..86f578dfba2700ba068082be9e4af73e8973363d --- /dev/null +++ b/pm4py/tests/compressed_input_data/08_receipt.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79b75d03aa6fefb4146473a987cea984d2244e6c39a4bd177392d879755af9f +size 211391 diff --git a/pm4py/tests/compressed_input_data/09_a32f0n00.xes.gz b/pm4py/tests/compressed_input_data/09_a32f0n00.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..895441aaccbb58d75e816eed4e78e810a01499a4 --- /dev/null +++ b/pm4py/tests/compressed_input_data/09_a32f0n00.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72eba15dd46c942ca9ec9a1382c69cdbe04650b3f445812918065cb93c5d4624 +size 41237 diff --git a/pm4py/tests/compressed_input_data/10_orders.xes.gz b/pm4py/tests/compressed_input_data/10_orders.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..3dc29dac251af9ff09a0c1e7732a9cc7bf4c55bf --- /dev/null +++ b/pm4py/tests/compressed_input_data/10_orders.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8b193f06c726bda1eef3fbaba90e9d19a9e810c2178020c78961033ce717129 +size 2076 diff --git a/pm4py/tests/compressed_input_data/11_tickets.xes.gz b/pm4py/tests/compressed_input_data/11_tickets.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..eb859beeb4e6cf558c58d6e45971dd6ec1324891 --- /dev/null +++ b/pm4py/tests/compressed_input_data/11_tickets.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39f087b392509a211c7c2051fa8118f50f9c3ac11f3c21ede792b3dd67da3d2a +size 360 diff --git a/pm4py/tests/compressed_input_data/12_roadtraffic_1t_per_variant.xes.gz b/pm4py/tests/compressed_input_data/12_roadtraffic_1t_per_variant.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..69a5287c6a33ddf8ad2fb33f08df6416f25dd67a --- /dev/null +++ b/pm4py/tests/compressed_input_data/12_roadtraffic_1t_per_variant.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68fb408a87e7dffe5cc19d48a4593a958197d0dab19168040003407710134388 +size 10270 diff --git a/pm4py/tests/compressed_input_data/13_SEPSIS_1t_per_variant.xes.gz b/pm4py/tests/compressed_input_data/13_SEPSIS_1t_per_variant.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..5756e222570d717ee777a81f9a9a430ce4074340 --- /dev/null +++ b/pm4py/tests/compressed_input_data/13_SEPSIS_1t_per_variant.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cba69e403106278e2e45125475cfcf50d058e828d75dc58bb54cd2c38defa8fa +size 87707 diff --git a/pm4py/tests/compressed_input_data/14_Billing_1t_per_variant.xes.gz b/pm4py/tests/compressed_input_data/14_Billing_1t_per_variant.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..ca5705869861c2e823419f396b2e44e6825d102f --- /dev/null +++ b/pm4py/tests/compressed_input_data/14_Billing_1t_per_variant.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03f003b62a23af012ebd673184606cf2f756182040fa9fd8a663ee3d39f5c96c +size 97029 diff --git a/pm4py/tests/compressed_input_data/15_bpic2020_permit_log_1t_per_variant.xes.gz b/pm4py/tests/compressed_input_data/15_bpic2020_permit_log_1t_per_variant.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..0528088d0c0997eab3ba88344f87ec014967dc2d --- /dev/null +++ b/pm4py/tests/compressed_input_data/15_bpic2020_permit_log_1t_per_variant.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2762e158369dc9444d04c8c6fd9da281dc1449e2a962191540a4a4f4fd464c47 +size 197286 diff --git a/pm4py/tests/compressed_input_data/19_roadtraffic_1t_per_variant.xes.gz b/pm4py/tests/compressed_input_data/19_roadtraffic_1t_per_variant.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..c009f4b1178c012e9ae5adaf321b27d58b5325b7 --- /dev/null +++ b/pm4py/tests/compressed_input_data/19_roadtraffic_1t_per_variant.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3abfc0172165055e9f47a0272045e2f9eaecf515fc4e78bc85d56e402f382dfa +size 1814 diff --git a/pm4py/tests/compressed_input_data/DISCLAIMER b/pm4py/tests/compressed_input_data/DISCLAIMER new file mode 100644 index 0000000000000000000000000000000000000000..132ae4fa11090e16ae54313a8e3335cef4dc22e5 --- /dev/null +++ b/pm4py/tests/compressed_input_data/DISCLAIMER @@ -0,0 +1,14 @@ +These logs were taken from the 4TU.ResearchData log repository located at https://data.4tu.nl/repository/collection:event_logs_real + +And they were published under the license found on https://researchdata.4tu.nl/fileadmin/editor_upload/pdf/Terms_of_use/General_terms_of_use_4TU.ResearchData.pdf + +In particular, the terms of license obligate to cite the authors: + +BPI Challenge 2013 logs: +Ward Steeman + +Receipt phase of an environmental permit application process (‘WABO’), CoSeLoG project: +Buijs, J.C.A.M. + +BPI Challenge 2017: +van Dongen, B.F. (Boudewijn) \ No newline at end of file diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/01_running-example-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/01_running-example-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..047a97710c080ee11edc130080db92dd81935681 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/01_running-example-im.ptml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/01_running-example-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/01_running-example-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..eca12b6e8c1289f2583a849d6091272877291686 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/01_running-example-imf.ptml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/05_bpic2017-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/05_bpic2017-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..081eef28189093250822723c994b5246a6988cf6 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/05_bpic2017-im.ptml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/05_bpic2017-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/05_bpic2017-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..059141f84d28005313e70ee14a9fe09d70cd14c6 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/05_bpic2017-imf.ptml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/06_bpic2013_closed-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/06_bpic2013_closed-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..67f3ec67ad4564f7d29f04b5e588f94b9f0fd688 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/06_bpic2013_closed-im.ptml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/06_bpic2013_closed-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/06_bpic2013_closed-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..9bbd9746989d5c032902cb8af3b33742137c88a7 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/06_bpic2013_closed-imf.ptml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/07_bpic2013_incidents-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/07_bpic2013_incidents-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..28b31e07a0029381c14f02bf94886c1c03257571 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/07_bpic2013_incidents-im.ptml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/07_bpic2013_incidents-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/07_bpic2013_incidents-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..d34e794863abbf21a0e5e1f0b4e738eff77a1401 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/07_bpic2013_incidents-imf.ptml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/08_receipt-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/08_receipt-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..0a9b22ff37d12474813c92ac8ff518c1c794da11 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/08_receipt-im.ptml @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/08_receipt-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/08_receipt-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..22fdd44edcc464bc10cf9fbb07b5435794e2c7de --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/08_receipt-imf.ptml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/09_a32f0n00-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/09_a32f0n00-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..e2ddf516854006d47bfcfb6aa793a0aec6ea282b --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/09_a32f0n00-im.ptml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/09_a32f0n00-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/09_a32f0n00-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..5eaca7c86c49979158abc18f4988e3b169b9ce5b --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/09_a32f0n00-imf.ptml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/10_orders-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/10_orders-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..c61b0d78dc94333a99f9eb48af6b4d7d5fa75bdd --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/10_orders-im.ptml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/10_orders-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/10_orders-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..e449742d340d11a3f99ec970a81a5f78ed74e429 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/10_orders-imf.ptml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/11_tickets-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/11_tickets-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..5f31be721688b7ded32850963875ef58fc963ac6 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/11_tickets-im.ptml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/11_tickets-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/11_tickets-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..932371cc956c6847a34aa4816b43387f32dfcce7 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/11_tickets-imf.ptml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/12_roadtraffic_1t_per_variant-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/12_roadtraffic_1t_per_variant-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..6fd66d0f4f7276ce46379e85c4f97274e705db6f --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/12_roadtraffic_1t_per_variant-im.ptml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/12_roadtraffic_1t_per_variant-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/12_roadtraffic_1t_per_variant-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..1486abc09792e9be47ac0c8b23cc5898a57875fc --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/12_roadtraffic_1t_per_variant-imf.ptml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/13_SEPSIS_1t_per_variant-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/13_SEPSIS_1t_per_variant-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..fae0c00caa4083afe8268969b81a525a0102834b --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/13_SEPSIS_1t_per_variant-im.ptml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/13_SEPSIS_1t_per_variant-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/13_SEPSIS_1t_per_variant-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..3f1434ff54aa044f9119f068d3a8a599df7f8485 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/13_SEPSIS_1t_per_variant-imf.ptml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/14_Billing_1t_per_variant-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/14_Billing_1t_per_variant-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..07e57f0bbf92886717190b951341371119771a66 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/14_Billing_1t_per_variant-im.ptml @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/14_Billing_1t_per_variant-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/14_Billing_1t_per_variant-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..aecf44b7ca85c240b5d9cd36bf31be9ebc2527b2 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/14_Billing_1t_per_variant-imf.ptml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/15_bpic2020_permit_log_1t_per_variant-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/15_bpic2020_permit_log_1t_per_variant-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..1d72ccd59674b7baebb459574122d02479b62cc8 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/15_bpic2020_permit_log_1t_per_variant-im.ptml @@ -0,0 +1,534 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/15_bpic2020_permit_log_1t_per_variant-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/15_bpic2020_permit_log_1t_per_variant-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..00d85d1f945f10a47ad1630a4c06ec54172fd3db --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/15_bpic2020_permit_log_1t_per_variant-imf.ptml @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/16_bpic2019_1t_per_variant-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/16_bpic2019_1t_per_variant-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..212dcbcf4788b4a4d28896c2d38b94adde293077 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/16_bpic2019_1t_per_variant-im.ptml @@ -0,0 +1,344 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/16_bpic2019_1t_per_variant-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/16_bpic2019_1t_per_variant-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..25d70d79dc0b4c3843b91c8c218e709f33f5f1d0 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/16_bpic2019_1t_per_variant-imf.ptml @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/18_bpic2017_application_1t_per_variant-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/18_bpic2017_application_1t_per_variant-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..9bf541df67b12472ee25c8960c865a3aad9bc458 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/18_bpic2017_application_1t_per_variant-im.ptml @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/18_bpic2017_application_1t_per_variant-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/18_bpic2017_application_1t_per_variant-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..aaf6b59c9b5e8b5270d544dd26c307dfc2d336d9 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/18_bpic2017_application_1t_per_variant-imf.ptml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/19_roadtraffic_1t_per_variant-im.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/19_roadtraffic_1t_per_variant-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..e21fd5bac14d1f76fee2fae5a877200e4d746c13 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/19_roadtraffic_1t_per_variant-im.ptml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_classifier/19_roadtraffic_1t_per_variant-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_classifier/19_roadtraffic_1t_per_variant-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..778cf01ea812d65fd023ad4bc515a989f597a8f5 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_classifier/19_roadtraffic_1t_per_variant-imf.ptml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/02_teleclaims-im.ptml b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/02_teleclaims-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..c5055fec05cc32524924738f9346608ae7fe996d --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/02_teleclaims-im.ptml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/02_teleclaims-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/02_teleclaims-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..5cb841b04e17c1c92a008974358585c6ab769c2e --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/02_teleclaims-imf.ptml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/03_repairExample-im.ptml b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/03_repairExample-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..79a699a81006b68bc4a11df0704022671b378ef1 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/03_repairExample-im.ptml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/03_repairExample-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/03_repairExample-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..695282020c8663b9bbcc67142e93e792707e60d9 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/03_repairExample-imf.ptml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/04_reviewing-im.ptml b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/04_reviewing-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..fe50a0878c5d593fd3ab9c0652d9c0d1622b6aa4 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/04_reviewing-im.ptml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/04_reviewing-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/04_reviewing-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..f76130453906852d0382e419b147ae839555351e --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/04_reviewing-imf.ptml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/17_bpic2012_1t_per_variant-im.ptml b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/17_bpic2012_1t_per_variant-im.ptml new file mode 100644 index 0000000000000000000000000000000000000000..ef017f457e0043ab86f2d56d7a700c9f139d8cc7 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/17_bpic2012_1t_per_variant-im.ptml @@ -0,0 +1,366 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/17_bpic2012_1t_per_variant-imf.ptml b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/17_bpic2012_1t_per_variant-imf.ptml new file mode 100644 index 0000000000000000000000000000000000000000..54c9244e6310b16cd1cdc9660a21faa4bcdf0711 --- /dev/null +++ b/pm4py/tests/compressed_input_data/models/activity_lifecycle_classifier/17_bpic2012_1t_per_variant-imf.ptml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/constants.py b/pm4py/tests/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..c3feed22f7bfc4ae746ae60644137d8bb4383e7a --- /dev/null +++ b/pm4py/tests/constants.py @@ -0,0 +1,4 @@ +INPUT_DATA_DIR = "input_data" +OUTPUT_DATA_DIR = "test_output_data" +PROBLEMATIC_XES_DIR = "xes_importer_tests" +COMPRESSED_INPUT_DATA = "compressed_input_data" diff --git a/pm4py/tests/csv_impexp_test.py b/pm4py/tests/csv_impexp_test.py new file mode 100644 index 0000000000000000000000000000000000000000..5fee57a322ac0cc825bbb49220bd08ba9f339913 --- /dev/null +++ b/pm4py/tests/csv_impexp_test.py @@ -0,0 +1,61 @@ +import os +import unittest + +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.objects.log.util import dataframe_utils +from pm4py.objects.log.exporter.xes import exporter as xes_exporter +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.util import sampling, sorting, index_attribute +from pm4py.util import constants, pandas_utils +from tests.constants import INPUT_DATA_DIR, OUTPUT_DATA_DIR + + +class CsvImportExportTest(unittest.TestCase): + def test_importExportCSVtoXES(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + df = pandas_utils.read_csv(os.path.join(INPUT_DATA_DIR, "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + event_log = log_conversion.apply(df, variant=log_conversion.TO_EVENT_STREAM) + event_log = sorting.sort_timestamp(event_log) + event_log = sampling.sample(event_log) + event_log = index_attribute.insert_event_index_as_event_attribute(event_log) + log = log_conversion.apply(event_log, variant=log_conversion.Variants.TO_EVENT_LOG) + log = sorting.sort_timestamp(log) + log = sampling.sample(log) + log = index_attribute.insert_trace_index_as_event_attribute(log) + xes_exporter.apply(log, os.path.join(OUTPUT_DATA_DIR, "running-example-exported.xes")) + log_imported_after_export = xes_importer.apply( + os.path.join(OUTPUT_DATA_DIR, "running-example-exported.xes")) + self.assertEqual(len(log), len(log_imported_after_export)) + os.remove(os.path.join(OUTPUT_DATA_DIR, "running-example-exported.xes")) + + def test_importExportCSVtoCSV(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + df = pandas_utils.read_csv(os.path.join(INPUT_DATA_DIR, "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + event_log = log_conversion.apply(df, variant=log_conversion.TO_EVENT_STREAM) + event_log = sorting.sort_timestamp(event_log) + event_log = sampling.sample(event_log) + event_log = index_attribute.insert_event_index_as_event_attribute(event_log) + log = log_conversion.apply(event_log, variant=log_conversion.Variants.TO_EVENT_LOG) + log = sorting.sort_timestamp(log) + log = sampling.sample(log) + log = index_attribute.insert_trace_index_as_event_attribute(log) + event_log_transformed = log_conversion.apply(log, variant=log_conversion.TO_EVENT_STREAM) + df = log_conversion.apply(event_log_transformed, variant=log_conversion.TO_DATA_FRAME) + df.to_csv(os.path.join(OUTPUT_DATA_DIR, "running-example-exported.csv")) + df = pandas_utils.read_csv(os.path.join(OUTPUT_DATA_DIR, "running-example-exported.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + event_log_imported_after_export = log_conversion.apply(df, variant=log_conversion.TO_EVENT_STREAM) + log_imported_after_export = log_conversion.apply( + event_log_imported_after_export, variant=log_conversion.Variants.TO_EVENT_LOG) + self.assertEqual(len(log), len(log_imported_after_export)) + os.remove(os.path.join(OUTPUT_DATA_DIR, "running-example-exported.csv")) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/dec_tree_test.py b/pm4py/tests/dec_tree_test.py new file mode 100644 index 0000000000000000000000000000000000000000..d733344ae9768b30b7dbea09b6943e03408d97ba --- /dev/null +++ b/pm4py/tests/dec_tree_test.py @@ -0,0 +1,54 @@ +import os +import unittest +import importlib.util + +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.util import get_class_representation +from pm4py.algo.transformation.log_to_features import algorithm as log_to_features + + +class DecisionTreeTest(unittest.TestCase): + def test_decisiontree_evattrvalue(self): + if importlib.util.find_spec("sklearn"): + from pm4py.util import ml_utils + from pm4py.visualization.decisiontree import visualizer as dt_vis + + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log_path = os.path.join("input_data", "roadtraffic50traces.xes") + log = xes_importer.apply(log_path) + data, feature_names = log_to_features.apply(log, variant=log_to_features.Variants.TRACE_BASED, + parameters={"str_tr_attr": [], "str_ev_attr": ["concept:name"], + "num_tr_attr": [], "num_ev_attr": ["amount"]}) + target, classes = get_class_representation.get_class_representation_by_str_ev_attr_value_value(log, + "concept:name") + clf = ml_utils.DecisionTreeClassifier(max_depth=7) + clf.fit(data, target) + gviz = dt_vis.apply(clf, feature_names, classes, + parameters={dt_vis.Variants.CLASSIC.value.Parameters.FORMAT: "svg"}) + del gviz + + def test_decisiontree_traceduration(self): + if importlib.util.find_spec("sklearn"): + from pm4py.util import ml_utils + from pm4py.visualization.decisiontree import visualizer as dt_vis + + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log_path = os.path.join("input_data", "roadtraffic50traces.xes") + log = xes_importer.apply(log_path) + data, feature_names = log_to_features.apply(log, variant=log_to_features.Variants.TRACE_BASED, + parameters={"str_tr_attr": [], "str_ev_attr": ["concept:name"], + "num_tr_attr": [], "num_ev_attr": ["amount"]}) + target, classes = get_class_representation.get_class_representation_by_trace_duration(log, 2 * 8640000) + clf = ml_utils.DecisionTreeClassifier(max_depth=7) + clf.fit(data, target) + gviz = dt_vis.apply(clf, feature_names, classes, + parameters={dt_vis.Variants.CLASSIC.value.Parameters.FORMAT: "svg"}) + del gviz + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/dfg_tests.py b/pm4py/tests/dfg_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..44796c8f15ca3b4969760f4f835775310a828433 --- /dev/null +++ b/pm4py/tests/dfg_tests.py @@ -0,0 +1,23 @@ +import unittest + +import pm4py + + +class DfgTests(unittest.TestCase): + def test_filter_act_percentage(self): + from pm4py.algo.filtering.dfg import dfg_filtering + log = pm4py.read_xes("input_data/running-example.xes") + dfg, sa, ea = pm4py.discover_dfg(log) + act_count = pm4py.get_event_attribute_values(log, "concept:name") + dfg_filtering.filter_dfg_on_activities_percentage(dfg, sa, ea, act_count, 0.1) + + def test_filter_paths_percentage(self): + from pm4py.algo.filtering.dfg import dfg_filtering + log = pm4py.read_xes("input_data/running-example.xes") + dfg, sa, ea = pm4py.discover_dfg(log) + act_count = pm4py.get_event_attribute_values(log, "concept:name") + dfg_filtering.filter_dfg_on_paths_percentage(dfg, sa, ea, act_count, 0.3) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/diagn_df_conf_checking.py b/pm4py/tests/diagn_df_conf_checking.py new file mode 100644 index 0000000000000000000000000000000000000000..86d38d86b1b41d7f361815f6aa7c3d8b5685e77e --- /dev/null +++ b/pm4py/tests/diagn_df_conf_checking.py @@ -0,0 +1,55 @@ +import unittest +import pm4py +from pm4py.algo.conformance.tokenreplay import algorithm as token_based_replay +from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments +from pm4py.algo.discovery.log_skeleton import algorithm as log_skeleton_discovery +from pm4py.algo.conformance.log_skeleton import algorithm as log_skeleton_conformance +from pm4py.algo.discovery.footprints import algorithm as footprints_discovery +from pm4py.algo.conformance.footprints.variants import log_model, trace_extensive +from pm4py.objects.log.importer.xes import importer as xes_importer + + +class DiagnDfConfChecking(unittest.TestCase): + def test_tbr_normal(self): + log = xes_importer.apply("input_data/running-example.xes") + net, im, fm = pm4py.discover_petri_net_inductive(log, noise_threshold=0.2) + replayed_traces = token_based_replay.apply(log, net, im, fm) + diagn_df = token_based_replay.get_diagnostics_dataframe(log, replayed_traces) + + def test_tbr_backwards(self): + log = xes_importer.apply("input_data/running-example.xes") + net, im, fm = pm4py.discover_petri_net_inductive(log, noise_threshold=0.2) + replayed_traces = token_based_replay.apply(log, net, im, fm, variant=token_based_replay.Variants.BACKWARDS) + diagn_df = token_based_replay.get_diagnostics_dataframe(log, replayed_traces, variant=token_based_replay.Variants.BACKWARDS) + + def test_align(self): + log = xes_importer.apply("input_data/running-example.xes") + net, im, fm = pm4py.discover_petri_net_inductive(log, noise_threshold=0.2) + aligned_traces = alignments.apply(log, net, im, fm) + diagn_df = alignments.get_diagnostics_dataframe(log, aligned_traces) + + def test_log_skeleton(self): + log = xes_importer.apply("input_data/running-example.xes") + log_skeleton = log_skeleton_discovery.apply(log, parameters={log_skeleton_discovery.Variants.CLASSIC.value.Parameters.NOISE_THRESHOLD: 0.05}) + conf_result = log_skeleton_conformance.apply(log, log_skeleton) + diagn_df = log_skeleton_conformance.get_diagnostics_dataframe(log, conf_result) + + def test_footprints_classic(self): + log = xes_importer.apply("input_data/running-example.xes") + fp_log = footprints_discovery.apply(log, variant=footprints_discovery.Variants.TRACE_BY_TRACE) + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.2) + fp_model = footprints_discovery.apply(tree) + conf_result = log_model.apply(fp_log, fp_model) + diagn_df = log_model.get_diagnostics_dataframe(log, conf_result) + + def test_footprints_extensive(self): + log = xes_importer.apply("input_data/running-example.xes") + fp_log = footprints_discovery.apply(log, variant=footprints_discovery.Variants.TRACE_BY_TRACE) + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.2) + fp_model = footprints_discovery.apply(tree) + conf_result = trace_extensive.apply(fp_log, fp_model) + diagn_df = trace_extensive.get_diagnostics_dataframe(log, conf_result) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/doc_tests.py b/pm4py/tests/doc_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..92089a9463c46f3d59a77f2e97f34da2bbfdc50f --- /dev/null +++ b/pm4py/tests/doc_tests.py @@ -0,0 +1,1102 @@ +from pm4py.objects.log.util import dataframe_utils +import unittest +import importlib.util +import os +from pm4py.util import constants, pandas_utils +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + + +class DocTests(unittest.TestCase): + def load_running_example_xes(self): + from pm4py.objects.log.importer.xes import importer + log = importer.apply(os.path.join("input_data", "running-example.xes")) + return log + + def load_running_example_df(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + return df + + def load_running_example_stream(self): + from pm4py.objects.conversion.log import converter + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + stream = converter.apply(df, variant=converter.TO_EVENT_STREAM) + return stream + + def load_running_example_pnml(self): + from pm4py.objects.petri_net.importer import importer + net, im, fm = importer.apply(os.path.join("input_data", "running-example.pnml")) + return net, im, fm + + def load_receipt_xes(self): + from pm4py.objects.log.importer.xes import importer + log = importer.apply(os.path.join("input_data", "receipt.xes")) + return log + + def load_receipt_df(self): + df = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + return df + + def load_receipt_stream(self): + from pm4py.objects.conversion.log import converter + df = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + stream = converter.apply(df, variant=converter.TO_EVENT_STREAM) + return stream + + def load_roadtraffic50_xes(self): + from pm4py.objects.log.importer.xes import importer + log = importer.apply(os.path.join("input_data", "roadtraffic50traces.xes")) + return log + + def load_roadtraffic100_xes(self): + from pm4py.objects.log.importer.xes import importer + log = importer.apply(os.path.join("input_data", "roadtraffic100traces.xes")) + return log + + def load_roadtraffic100_csv(self): + from pm4py.objects.log.importer.xes import importer + log = importer.apply(os.path.join("input_data", "roadtraffic100traces.csv")) + return log + + def test_1(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + def test_2(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + variant = xes_importer.Variants.ITERPARSE + parameters = {variant.value.Parameters.TIMESTAMP_SORT: True} + log = xes_importer.apply(os.path.join("input_data", "running-example.xes"), + variant=variant, parameters=parameters) + + def test_3(self): + from pm4py.objects.conversion.log import converter as log_converter + + log_csv = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv"), sep=',') + event_log = log_converter.apply(log_csv, variant=log_converter.Variants.TO_EVENT_LOG) + + def test_4(self): + from pm4py.objects.conversion.log import converter as log_converter + + log_csv = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv"), sep=',') + log_csv = log_csv.rename(columns={'case:concept:name': 'case'}) + parameters = {log_converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ID_KEY: 'case'} + event_log = log_converter.apply(log_csv, parameters=parameters, variant=log_converter.Variants.TO_EVENT_LOG) + + def test_5(self): + log = self.load_running_example_xes() + from pm4py.objects.log.exporter.xes import exporter as xes_exporter + path = os.path.join("test_output_data", "ru.xes") + xes_exporter.apply(log, path) + os.remove(path) + + def test_6(self): + log = self.load_running_example_xes() + from pm4py.objects.conversion.log import converter as log_converter + dataframe = log_converter.apply(log, variant=log_converter.Variants.TO_DATA_FRAME) + dataframe.to_csv("ru.csv") + os.remove("ru.csv") + + def test_8(self): + from pm4py.algo.filtering.log.timestamp import timestamp_filter + log = self.load_running_example_xes() + filtered_log = timestamp_filter.filter_traces_contained(log, "2011-03-09 00:00:00", "2012-01-18 23:59:59") + + def test_9(self): + from pm4py.algo.filtering.pandas.timestamp import timestamp_filter + dataframe = self.load_running_example_df() + df_timest_intersecting = timestamp_filter.filter_traces_intersecting(dataframe, "2011-03-09 00:00:00", + "2012-01-18 23:59:59", parameters={ + timestamp_filter.Parameters.CASE_ID_KEY: "case:concept:name", + timestamp_filter.Parameters.TIMESTAMP_KEY: "time:timestamp"}) + + def test_10(self): + from pm4py.algo.filtering.log.timestamp import timestamp_filter + log = self.load_running_example_xes() + filtered_log = timestamp_filter.filter_traces_intersecting(log, "2011-03-09 00:00:00", "2012-01-18 23:59:59") + + def test_11(self): + from pm4py.algo.filtering.pandas.timestamp import timestamp_filter + dataframe = self.load_running_example_df() + df_timest_intersecting = timestamp_filter.filter_traces_intersecting(dataframe, "2011-03-09 00:00:00", + "2012-01-18 23:59:59", parameters={ + timestamp_filter.Parameters.CASE_ID_KEY: "case:concept:name", + timestamp_filter.Parameters.TIMESTAMP_KEY: "time:timestamp"}) + + def test_12(self): + from pm4py.algo.filtering.log.timestamp import timestamp_filter + log = self.load_running_example_xes() + filtered_log_events = timestamp_filter.apply_events(log, "2011-03-09 00:00:00", "2012-01-18 23:59:59") + + def test_13(self): + from pm4py.algo.filtering.pandas.timestamp import timestamp_filter + dataframe = self.load_running_example_df() + df_timest_events = timestamp_filter.apply_events(dataframe, "2011-03-09 00:00:00", "2012-01-18 23:59:59", + parameters={ + timestamp_filter.Parameters.CASE_ID_KEY: "case:concept:name", + timestamp_filter.Parameters.TIMESTAMP_KEY: "time:timestamp"}) + + def test_14(self): + from pm4py.algo.filtering.log.cases import case_filter + log = self.load_running_example_xes() + filtered_log = case_filter.filter_case_performance(log, 86400, 864000) + + def test_15(self): + from pm4py.algo.filtering.pandas.cases import case_filter + dataframe = self.load_running_example_df() + df_cases = case_filter.filter_case_performance(dataframe, min_case_performance=86400, + max_case_performance=864000, parameters={ + case_filter.Parameters.CASE_ID_KEY: "case:concept:name", + case_filter.Parameters.TIMESTAMP_KEY: "time:timestamp"}) + + def test_22(self): + from pm4py.algo.filtering.log.variants import variants_filter + log = self.load_running_example_xes() + variants = variants_filter.get_variants(log) + + def test_23(self): + from pm4py.statistics.traces.generic.pandas import case_statistics + df = self.load_running_example_df() + variants = case_statistics.get_variants_df(df, + parameters={ + case_statistics.Parameters.CASE_ID_KEY: "case:concept:name", + case_statistics.Parameters.ACTIVITY_KEY: "concept:name"}) + + def test_24(self): + from pm4py.statistics.traces.generic.log import case_statistics + log = self.load_running_example_xes() + variants_count = case_statistics.get_variant_statistics(log) + variants_count = sorted(variants_count, key=lambda x: x['count'], reverse=True) + + def test_25(self): + from pm4py.statistics.traces.generic.pandas import case_statistics + df = self.load_running_example_df() + variants_count = case_statistics.get_variant_statistics(df, + parameters={ + case_statistics.Parameters.CASE_ID_KEY: "case:concept:name", + case_statistics.Parameters.ACTIVITY_KEY: "concept:name", + case_statistics.Parameters.TIMESTAMP_KEY: "time:timestamp"}) + variants_count = sorted(variants_count, key=lambda x: x['case:concept:name'], reverse=True) + + def test_26(self): + from pm4py.algo.filtering.log.variants import variants_filter + log = self.load_running_example_xes() + variants = ["register request,examine thoroughly,check ticket,decide,reject request"] + filtered_log1 = variants_filter.apply(log, variants) + + def test_27(self): + from pm4py.algo.filtering.pandas.variants import variants_filter + df = self.load_running_example_df() + variants = ["register request,examine thoroughly,check ticket,decide,reject request"] + filtered_df1 = variants_filter.apply(df, variants, + parameters={variants_filter.Parameters.CASE_ID_KEY: "case:concept:name", + variants_filter.Parameters.ACTIVITY_KEY: "concept:name"}) + + def test_28(self): + from pm4py.algo.filtering.log.variants import variants_filter + log = self.load_running_example_xes() + variants = ["register request,examine thoroughly,check ticket,decide,reject request"] + filtered_log2 = variants_filter.apply(log, variants, parameters={variants_filter.Parameters.POSITIVE: False}) + + def test_29(self): + from pm4py.algo.filtering.pandas.variants import variants_filter + df = self.load_running_example_df() + variants = ["register request,examine thoroughly,check ticket,decide,reject request"] + filtered_df2 = variants_filter.apply(df, variants, + parameters={variants_filter.Parameters.POSITIVE: False, + variants_filter.Parameters.CASE_ID_KEY: "case:concept:name", + variants_filter.Parameters.ACTIVITY_KEY: "concept:name"}) + + def test_32(self): + from pm4py.algo.filtering.log.attributes import attributes_filter + log = self.load_running_example_xes() + activities = attributes_filter.get_attribute_values(log, "concept:name") + resources = attributes_filter.get_attribute_values(log, "org:resource") + + def test_33(self): + from pm4py.algo.filtering.pandas.attributes import attributes_filter + df = self.load_running_example_df() + activities = attributes_filter.get_attribute_values(df, attribute_key="concept:name") + resources = attributes_filter.get_attribute_values(df, attribute_key="org:resource") + + def test_34(self): + from pm4py.algo.filtering.log.attributes import attributes_filter + log = self.load_receipt_xes() + tracefilter_log_pos = attributes_filter.apply(log, ["Resource10"], + parameters={ + attributes_filter.Parameters.ATTRIBUTE_KEY: "org:resource", + attributes_filter.Parameters.POSITIVE: True}) + tracefilter_log_neg = attributes_filter.apply(log, ["Resource10"], + parameters={ + attributes_filter.Parameters.ATTRIBUTE_KEY: "org:resource", + attributes_filter.Parameters.POSITIVE: False}) + + def test_35(self): + from pm4py.algo.filtering.pandas.attributes import attributes_filter + df = self.load_receipt_df() + df_traces_pos = attributes_filter.apply(df, ["Resource10"], + parameters={ + attributes_filter.Parameters.CASE_ID_KEY: "case:concept:name", + attributes_filter.Parameters.ATTRIBUTE_KEY: "org:resource", + attributes_filter.Parameters.POSITIVE: True}) + df_traces_neg = attributes_filter.apply(df, ["Resource10"], + parameters={ + attributes_filter.Parameters.CASE_ID_KEY: "case:concept:name", + attributes_filter.Parameters.ATTRIBUTE_KEY: "org:resource", + attributes_filter.Parameters.POSITIVE: False}) + + def test_38(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "roadtraffic100traces.xes")) + + from pm4py.algo.filtering.log.attributes import attributes_filter + filtered_log_events = attributes_filter.apply_numeric_events(log, 34, 36, + parameters={ + attributes_filter.Parameters.ATTRIBUTE_KEY: "amount"}) + + filtered_log_cases = attributes_filter.apply_numeric(log, 34, 36, + parameters={ + attributes_filter.Parameters.ATTRIBUTE_KEY: "amount"}) + + filtered_log_cases = attributes_filter.apply_numeric(log, 34, 500, + parameters={ + attributes_filter.Parameters.ATTRIBUTE_KEY: "amount", + attributes_filter.Parameters.STREAM_FILTER_KEY1: "concept:name", + attributes_filter.Parameters.STREAM_FILTER_VALUE1: "Add penalty"}) + + def test_39(self): + import os + df = pandas_utils.read_csv(os.path.join("input_data", "roadtraffic100traces.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + + from pm4py.algo.filtering.pandas.attributes import attributes_filter + filtered_df_events = attributes_filter.apply_numeric_events(df, 34, 36, + parameters={ + attributes_filter.Parameters.CASE_ID_KEY: "case:concept:name", + attributes_filter.Parameters.ATTRIBUTE_KEY: "amount"}) + + filtered_df_cases = attributes_filter.apply_numeric(df, 34, 36, + parameters={ + attributes_filter.Parameters.CASE_ID_KEY: "case:concept:name", + attributes_filter.Parameters.ATTRIBUTE_KEY: "amount"}) + + filtered_df_cases = attributes_filter.apply_numeric(df, 34, 500, + parameters={ + attributes_filter.Parameters.CASE_ID_KEY: "case:concept:name", + attributes_filter.Parameters.ATTRIBUTE_KEY: "amount", + attributes_filter.Parameters.STREAM_FILTER_KEY1: "concept:name", + attributes_filter.Parameters.STREAM_FILTER_VALUE1: "Add penalty"}) + + def test_40(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net, initial_marking, final_marking = alpha_miner.apply(log) + + def test_41(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, initial_marking, final_marking = process_tree_converter.apply(process_tree) + + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + from pm4py.visualization.process_tree import visualizer as pt_visualizer + + tree = inductive_miner.apply(log) + + gviz = pt_visualizer.apply(tree) + + from pm4py.objects.conversion.process_tree import converter as pt_converter + net, initial_marking, final_marking = pt_converter.apply(tree, variant=pt_converter.Variants.TO_PETRI_NET) + + def test_42(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + import os + log_path = os.path.join("compressed_input_data", "09_a32f0n00.xes.gz") + log = xes_importer.apply(log_path) + + from pm4py.algo.discovery.heuristics import algorithm as heuristics_miner + heu_net = heuristics_miner.apply_heu(log, parameters={ + heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.99}) + + from pm4py.visualization.heuristics_net import visualizer as hn_visualizer + gviz = hn_visualizer.apply(heu_net) + + from pm4py.algo.discovery.heuristics import algorithm as heuristics_miner + net, im, fm = heuristics_miner.apply(log, parameters={ + heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.99}) + + from pm4py.visualization.petri_net import visualizer as pn_visualizer + gviz = pn_visualizer.apply(net, im, fm) + + def test_43(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + from pm4py.algo.discovery.dfg import algorithm as dfg_discovery + dfg = dfg_discovery.apply(log) + + from pm4py.visualization.dfg import visualizer as dfg_visualization + gviz = dfg_visualization.apply(dfg, log=log, variant=dfg_visualization.Variants.FREQUENCY) + + def test_44(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + from pm4py.algo.discovery.dfg import algorithm as dfg_discovery + from pm4py.visualization.dfg import visualizer as dfg_visualization + + dfg = dfg_discovery.apply(log, variant=dfg_discovery.Variants.PERFORMANCE) + gviz = dfg_visualization.apply(dfg, log=log, variant=dfg_visualization.Variants.PERFORMANCE) + + def test_45(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + from pm4py.algo.discovery.dfg import algorithm as dfg_discovery + from pm4py.visualization.dfg import visualizer as dfg_visualization + + dfg = dfg_discovery.apply(log, variant=dfg_discovery.Variants.PERFORMANCE) + parameters = {dfg_visualization.Variants.PERFORMANCE.value.Parameters.FORMAT: "svg"} + gviz = dfg_visualization.apply(dfg, log=log, variant=dfg_visualization.Variants.PERFORMANCE, + parameters=parameters) + + dfg_visualization.save(gviz, os.path.join("test_output_data", "dfg.svg")) + os.remove(os.path.join("test_output_data", "dfg.svg")) + + def test_46(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + from pm4py.algo.discovery.dfg import algorithm as dfg_discovery + dfg = dfg_discovery.apply(log) + + from pm4py.objects.conversion.dfg import converter as dfg_mining + net, im, fm = dfg_mining.apply(dfg) + + def test_47(self): + log = self.load_running_example_xes() + + import os + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + process_tree = inductive_miner.apply(log) + net, initial_marking, final_marking = process_tree_converter.apply(process_tree) + + from pm4py.visualization.petri_net import visualizer as pn_visualizer + parameters = {pn_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "png"} + gviz = pn_visualizer.apply(net, initial_marking, final_marking, parameters=parameters, + variant=pn_visualizer.Variants.FREQUENCY, log=log) + pn_visualizer.save(gviz, os.path.join("test_output_data", "inductive_frequency.png")) + + os.remove(os.path.join("test_output_data", "inductive_frequency.png")) + + def test_48(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + parameters = {alpha_miner.Variants.ALPHA_VERSION_CLASSIC.value.Parameters.ACTIVITY_KEY: "concept:name"} + net, initial_marking, final_marking = alpha_miner.apply(log, parameters=parameters) + + def test_49(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + classifiers = log.classifiers + + from pm4py.objects.log.util import insert_classifier + log, activity_key = insert_classifier.insert_activity_classifier_attribute(log, "Activity classifier") + + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + parameters = {alpha_miner.Variants.ALPHA_VERSION_CLASSIC.value.Parameters.ACTIVITY_KEY: activity_key} + net, initial_marking, final_marking = alpha_miner.apply(log, parameters=parameters) + + def test_50(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + for trace in log: + for event in trace: + event["customClassifier"] = event["concept:name"] + event["lifecycle:transition"] + + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + parameters = {alpha_miner.Variants.ALPHA_VERSION_CLASSIC.value.Parameters.ACTIVITY_KEY: "customClassifier"} + net, initial_marking, final_marking = alpha_miner.apply(log, parameters=parameters) + + def test_51(self): + import os + from pm4py.objects.petri_net.importer import importer as pnml_importer + net, initial_marking, final_marking = pnml_importer.apply( + os.path.join("input_data", "running-example.pnml")) + + from pm4py.visualization.petri_net import visualizer as pn_visualizer + gviz = pn_visualizer.apply(net, initial_marking, final_marking) + + from pm4py.objects.petri_net.exporter import exporter as pnml_exporter + pnml_exporter.apply(net, initial_marking, "petri.pnml") + + pnml_exporter.apply(net, initial_marking, "petri_final.pnml", final_marking=final_marking) + + os.remove("petri.pnml") + os.remove("petri_final.pnml") + + from pm4py.objects.petri_net import semantics + transitions = semantics.enabled_transitions(net, initial_marking) + + places = net.places + transitions = net.transitions + arcs = net.arcs + + for place in places: + stru = "\nPLACE: " + place.name + for arc in place.in_arcs: + stru = str(arc.source.name) + " " + str(arc.source.label) + + def test_52(self): + # creating an empty Petri net + from pm4py.objects.petri_net.obj import PetriNet, Marking + net = PetriNet("new_petri_net") + + # creating source, p_1 and sink place + source = PetriNet.Place("source") + sink = PetriNet.Place("sink") + p_1 = PetriNet.Place("p_1") + # add the places to the Petri Net + net.places.add(source) + net.places.add(sink) + net.places.add(p_1) + + # Create transitions + t_1 = PetriNet.Transition("name_1", "label_1") + t_2 = PetriNet.Transition("name_2", "label_2") + # Add the transitions to the Petri Net + net.transitions.add(t_1) + net.transitions.add(t_2) + + # Add arcs + from pm4py.objects.petri_net.utils import petri_utils + petri_utils.add_arc_from_to(source, t_1, net) + petri_utils.add_arc_from_to(t_1, p_1, net) + petri_utils.add_arc_from_to(p_1, t_2, net) + petri_utils.add_arc_from_to(t_2, sink, net) + + # Adding tokens + initial_marking = Marking() + initial_marking[source] = 1 + final_marking = Marking() + final_marking[sink] = 1 + + from pm4py.objects.petri_net.exporter import exporter as pnml_exporter + pnml_exporter.apply(net, initial_marking, "createdPetriNet1.pnml", final_marking=final_marking) + + from pm4py.visualization.petri_net import visualizer as pn_visualizer + gviz = pn_visualizer.apply(net, initial_marking, final_marking) + + from pm4py.visualization.petri_net import visualizer as pn_visualizer + parameters = {pn_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "svg"} + gviz = pn_visualizer.apply(net, initial_marking, final_marking, parameters=parameters) + + from pm4py.visualization.petri_net import visualizer as pn_visualizer + parameters = {pn_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "svg"} + gviz = pn_visualizer.apply(net, initial_marking, final_marking, parameters=parameters) + pn_visualizer.save(gviz, "alpha.svg") + + os.remove("createdPetriNet1.pnml") + os.remove("alpha.svg") + + def test_56(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + process_tree = inductive_miner.apply(log) + net, initial_marking, final_marking = process_tree_converter.apply(process_tree) + + from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments + alignments = alignments.apply_log(log, net, initial_marking, final_marking) + + def test_57(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + for trace in log: + for event in trace: + event["customClassifier"] = event["concept:name"] + event["concept:name"] + + from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments + + # define the activity key in the parameters + parameters = {inductive_miner.Parameters.ACTIVITY_KEY: "customClassifier", + alignments.Variants.VERSION_STATE_EQUATION_A_STAR.value.Parameters.ACTIVITY_KEY: "customClassifier"} + + # calculate process model using the given classifier + process_tree = inductive_miner.apply(log) + net, initial_marking, final_marking = process_tree_converter.apply(process_tree) + alignments = alignments.apply_log(log, net, initial_marking, final_marking, parameters=parameters) + + from pm4py.algo.evaluation.replay_fitness import algorithm as replay_fitness + log_fitness = replay_fitness.evaluate(alignments, variant=replay_fitness.Variants.ALIGNMENT_BASED) + + def test_58(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + process_tree = inductive_miner.apply(log) + net, initial_marking, final_marking = process_tree_converter.apply(process_tree) + + from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments + + model_cost_function = dict() + sync_cost_function = dict() + for t in net.transitions: + # if the label is not None, we have a visible transition + if t.label is not None: + # associate cost 1000 to each move-on-model associated to visible transitions + model_cost_function[t] = 1000 + # associate cost 0 to each move-on-log + sync_cost_function[t] = 0 + else: + # associate cost 1 to each move-on-model associated to hidden transitions + model_cost_function[t] = 1 + + parameters = {} + parameters[ + alignments.Variants.VERSION_STATE_EQUATION_A_STAR.value.Parameters.PARAM_MODEL_COST_FUNCTION] = model_cost_function + parameters[ + alignments.Variants.VERSION_STATE_EQUATION_A_STAR.value.Parameters.PARAM_SYNC_COST_FUNCTION] = sync_cost_function + + alignments = alignments.apply_log(log, net, initial_marking, final_marking, parameters=parameters) + + def test_59(self): + from pm4py.algo.simulation.tree_generator import algorithm as tree_gen + parameters = {} + tree = tree_gen.apply(parameters=parameters) + + from pm4py.objects.process_tree import semantics + log = semantics.generate_log(tree, no_traces=100) + + from pm4py.objects.conversion.process_tree import converter as pt_converter + net, im, fm = pt_converter.apply(tree) + + from pm4py.visualization.process_tree import visualizer as pt_visualizer + gviz = pt_visualizer.apply(tree, parameters={pt_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "png"}) + + def test_60(self): + if importlib.util.find_spec("sklearn"): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "roadtraffic50traces.xes")) + + from pm4py.algo.transformation.log_to_features.variants import trace_based + str_trace_attributes = [] + str_event_attributes = ["concept:name"] + num_trace_attributes = [] + num_event_attributes = ["amount"] + data, feature_names = trace_based.apply(log) + data, feature_names = trace_based.apply(log, parameters={"str_tr_attr": str_trace_attributes, "str_ev_attr": str_event_attributes, "num_tr_attr": num_trace_attributes, "num_ev_attr": num_event_attributes}) + + from pm4py.objects.log.util import get_class_representation + target, classes = get_class_representation.get_class_representation_by_str_ev_attr_value_value(log, + "concept:name") + + from pm4py.util import ml_utils + clf = ml_utils.DecisionTreeClassifier() + clf.fit(data, target) + + from pm4py.visualization.decisiontree import visualizer as dectree_visualizer + gviz = dectree_visualizer.apply(clf, feature_names, classes) + + def test_61(self): + if importlib.util.find_spec("sklearn"): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "roadtraffic50traces.xes")) + + from pm4py.algo.transformation.log_to_features.variants import trace_based + str_trace_attributes = [] + str_event_attributes = ["concept:name"] + num_trace_attributes = [] + num_event_attributes = ["amount"] + data, feature_names = trace_based.apply(log) + data, feature_names = trace_based.apply(log, parameters={"str_tr_attr": str_trace_attributes, "str_ev_attr": str_event_attributes, "num_tr_attr": num_trace_attributes, "num_ev_attr": num_event_attributes}) + + from pm4py.objects.log.util import get_class_representation + target, classes = get_class_representation.get_class_representation_by_trace_duration(log, 2 * 8640000) + + from pm4py.util import ml_utils + clf = ml_utils.DecisionTreeClassifier() + clf.fit(data, target) + + from pm4py.visualization.decisiontree import visualizer as dectree_visualizer + gviz = dectree_visualizer.apply(clf, feature_names, classes) + + def test_62(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + xes_importer.Variants.ITERPARSE.value.Parameters.TIMESTAMP_SORT + xes_importer.Variants.ITERPARSE.value.Parameters.TIMESTAMP_KEY + xes_importer.Variants.ITERPARSE.value.Parameters.REVERSE_SORT + xes_importer.Variants.ITERPARSE.value.Parameters.MAX_TRACES + + def test_63(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + xes_importer.Variants.LINE_BY_LINE.value.Parameters.TIMESTAMP_SORT + xes_importer.Variants.LINE_BY_LINE.value.Parameters.TIMESTAMP_KEY + xes_importer.Variants.LINE_BY_LINE.value.Parameters.REVERSE_SORT + xes_importer.Variants.LINE_BY_LINE.value.Parameters.MAX_TRACES + xes_importer.Variants.LINE_BY_LINE.value.Parameters.MAX_BYTES + + def test_64(self): + from pm4py.objects.conversion.log import converter + converter.Variants.TO_EVENT_LOG.value.Parameters.STREAM_POST_PROCESSING + converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ATTRIBUTE_PREFIX + converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ID_KEY + converter.Variants.TO_EVENT_LOG.value.Parameters.DEEP_COPY + converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ID_KEY + + def test_65(self): + from pm4py.objects.conversion.log import converter + converter.Variants.TO_EVENT_STREAM.value.Parameters.STREAM_POST_PROCESSING + converter.Variants.TO_EVENT_STREAM.value.Parameters.CASE_ATTRIBUTE_PREFIX + converter.Variants.TO_EVENT_STREAM.value.Parameters.DEEP_COPY + + def test_66(self): + from pm4py.objects.conversion.log import converter + converter.Variants.TO_EVENT_STREAM.value.Parameters.CASE_ATTRIBUTE_PREFIX + converter.Variants.TO_EVENT_STREAM.value.Parameters.DEEP_COPY + + def test_67(self): + from pm4py.objects.log.exporter.xes import exporter as xes_exporter + xes_exporter.Variants.ETREE.value.Parameters.COMPRESS + + def test_tbr_diagn_1(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + + from pm4py.algo.filtering.log.variants import variants_filter + filtered_log = variants_filter.filter_log_variants_percentage(log, 0.2) + + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + process_tree = inductive_miner.apply(log) + net, initial_marking, final_marking = process_tree_converter.apply(process_tree) + + from pm4py.algo.conformance.tokenreplay import algorithm as token_based_replay + parameters_tbr = {token_based_replay.Variants.TOKEN_REPLAY.value.Parameters.DISABLE_VARIANTS: True, + token_based_replay.Variants.TOKEN_REPLAY.value.Parameters.ENABLE_PLTR_FITNESS: True} + replayed_traces, place_fitness, trans_fitness, unwanted_activities = token_based_replay.apply(log, net, + initial_marking, + final_marking, + parameters=parameters_tbr) + + from pm4py.algo.conformance.tokenreplay.diagnostics import duration_diagnostics + trans_diagnostics = duration_diagnostics.diagnose_from_trans_fitness(log, trans_fitness) + for trans in trans_diagnostics: + #print(trans, trans_diagnostics[trans]) + pass + + from pm4py.algo.conformance.tokenreplay.diagnostics import duration_diagnostics + act_diagnostics = duration_diagnostics.diagnose_from_notexisting_activities(log, unwanted_activities) + for act in act_diagnostics: + #print(act, act_diagnostics[act]) + pass + + def test_tbr_diagn_2(self): + if importlib.util.find_spec("sklearn"): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + + from pm4py.algo.filtering.log.variants import variants_filter + filtered_log = variants_filter.filter_log_variants_percentage(log, 0.2) + + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + process_tree = inductive_miner.apply(log) + net, initial_marking, final_marking = process_tree_converter.apply(process_tree) + + # build decision trees + string_attributes = ["org:group"] + numeric_attributes = [] + parameters = {"string_attributes": string_attributes, "numeric_attributes": numeric_attributes} + + from pm4py.algo.conformance.tokenreplay import algorithm as token_based_replay + parameters_tbr = {token_based_replay.Variants.TOKEN_REPLAY.value.Parameters.DISABLE_VARIANTS: True, + token_based_replay.Variants.TOKEN_REPLAY.value.Parameters.ENABLE_PLTR_FITNESS: True} + replayed_traces, place_fitness, trans_fitness, unwanted_activities = token_based_replay.apply(log, net, + initial_marking, + final_marking, + parameters=parameters_tbr) + + from pm4py.algo.conformance.tokenreplay.diagnostics import root_cause_analysis + trans_root_cause = root_cause_analysis.diagnose_from_trans_fitness(log, trans_fitness, parameters=parameters) + + + from pm4py.visualization.decisiontree import visualizer as dt_vis + for trans in trans_root_cause: + clf = trans_root_cause[trans]["clf"] + feature_names = trans_root_cause[trans]["feature_names"] + classes = trans_root_cause[trans]["classes"] + + # visualization could be called + gviz = dt_vis.apply(clf, feature_names, classes) + break + + from pm4py.algo.conformance.tokenreplay.diagnostics import root_cause_analysis + act_root_cause = root_cause_analysis.diagnose_from_notexisting_activities(log, unwanted_activities, + parameters=parameters) + + from pm4py.visualization.decisiontree import visualizer as dt_vis + for act in act_root_cause: + clf = act_root_cause[act]["clf"] + feature_names = act_root_cause[act]["feature_names"] + classes = act_root_cause[act]["classes"] + # visualization could be called + gviz = dt_vis.apply(clf, feature_names, classes) + break + + def test_max_decomp(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + net, im, fm = alpha_miner.apply(log) + + from pm4py.objects.petri_net.utils.decomposition import decompose + + list_nets = decompose(net, im, fm) + + from pm4py.visualization.petri_net import visualizer + gviz = [] + for index, model in enumerate(list_nets): + subnet, s_im, s_fm = model + + gviz.append(visualizer.apply(subnet, s_im, s_fm, parameters={visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "png"})) + break + + def test_reach_graph(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + net, im, fm = alpha_miner.apply(log) + + from pm4py.objects.petri_net.utils import reachability_graph + + ts = reachability_graph.construct_reachability_graph(net, im) + + from pm4py.visualization.transition_system import visualizer as ts_visualizer + + gviz = ts_visualizer.apply(ts, parameters={ts_visualizer.Variants.VIEW_BASED.value.Parameters.FORMAT: "svg"}) + + def test_decomp(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + net, im, fm = alpha_miner.apply(log) + + from pm4py.algo.conformance.alignments.decomposed import algorithm as decomp_alignments + + conf = decomp_alignments.apply(log, net, im, fm, parameters={ + decomp_alignments.Variants.RECOMPOS_MAXIMAL.value.Parameters.PARAM_THRESHOLD_BORDER_AGREEMENT: 2}) + + from pm4py.algo.evaluation.replay_fitness import algorithm as rp_fitness_evaluator + + fitness = rp_fitness_evaluator.evaluate(conf, variant=rp_fitness_evaluator.Variants.ALIGNMENT_BASED) + + def test_footprints(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + import os + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + + from pm4py.algo.discovery.footprints import algorithm as footprints_discovery + + fp_log = footprints_discovery.apply(log, variant=footprints_discovery.Variants.ENTIRE_EVENT_LOG) + + from pm4py.algo.discovery.footprints import algorithm as footprints_discovery + + fp_trace_by_trace = footprints_discovery.apply(log, variant=footprints_discovery.Variants.TRACE_BY_TRACE) + + fp_net = footprints_discovery.apply(net, im, fm) + + from pm4py.visualization.footprints import visualizer as fp_visualizer + + gviz = fp_visualizer.apply(fp_net, parameters={fp_visualizer.Variants.SINGLE.value.Parameters.FORMAT: "svg"}) + + from pm4py.visualization.footprints import visualizer as fp_visualizer + + gviz = fp_visualizer.apply(fp_log, fp_net, + parameters={fp_visualizer.Variants.COMPARISON.value.Parameters.FORMAT: "svg"}) + + from pm4py.objects.log.importer.xes import importer as xes_importer + import os + from copy import deepcopy + from pm4py.algo.filtering.log.variants import variants_filter + + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + filtered_log = variants_filter.filter_log_variants_percentage(log, 0.2) + + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + + from pm4py.algo.conformance.footprints import algorithm as footprints_conformance + + conf_fp = footprints_conformance.apply(fp_trace_by_trace, fp_net) + + def test_log_skeleton(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + import os + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + from pm4py.algo.discovery.log_skeleton import algorithm as lsk_discovery + skeleton = lsk_discovery.apply(log, parameters={ + lsk_discovery.Variants.CLASSIC.value.Parameters.NOISE_THRESHOLD: 0.0}) + + from pm4py.objects.log.importer.xes import importer as xes_importer + import os + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + from copy import deepcopy + from pm4py.algo.filtering.log.variants import variants_filter + filtered_log = variants_filter.filter_log_variants_percentage(log, 0.2) + + from pm4py.algo.conformance.log_skeleton import algorithm as lsk_conformance + conf_result = lsk_conformance.apply(log, skeleton) + + from pm4py.algo.discovery.log_skeleton import algorithm as lsk_discovery + skeleton = lsk_discovery.apply(log, parameters={ + lsk_discovery.Variants.CLASSIC.value.Parameters.NOISE_THRESHOLD: 0.03}) + + from pm4py.algo.conformance.log_skeleton import algorithm as lsk_conformance + conf_result = lsk_conformance.apply(log, skeleton) + + def test_throughput_time(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + import os + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + from pm4py.statistics.traces.generic.log import case_statistics + all_case_durations = case_statistics.get_all_case_durations(log, parameters={ + case_statistics.Parameters.TIMESTAMP_KEY: "time:timestamp"}) + + from pm4py.statistics.traces.generic.log import case_statistics + median_case_duration = case_statistics.get_median_case_duration(log, parameters={ + case_statistics.Parameters.TIMESTAMP_KEY: "time:timestamp" + }) + + def test_case_arrival(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + import os + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + from pm4py.statistics.traces.generic.log import case_arrival + case_arrival_ratio = case_arrival.get_case_arrival_avg(log, parameters={ + case_arrival.Parameters.TIMESTAMP_KEY: "time:timestamp"}) + + from pm4py.statistics.traces.generic.log import case_arrival + case_dispersion_ratio = case_arrival.get_case_dispersion_avg(log, parameters={ + case_arrival.Parameters.TIMESTAMP_KEY: "time:timestamp"}) + + def test_ps(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + import os + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + from pm4py.algo.discovery.performance_spectrum import algorithm as performance_spectrum + ps = performance_spectrum.apply(log, ["register request", "decide"], + parameters={performance_spectrum.Parameters.ACTIVITY_KEY: "concept:name", + performance_spectrum.Parameters.TIMESTAMP_KEY: "time:timestamp"}) + + def test_business_hours(self): + from pm4py.util.business_hours import BusinessHours + from datetime import datetime + from pm4py.util.dt_parsing.variants import strpfromiso + from pm4py.util import constants + + st = strpfromiso.fix_naivety(datetime.fromtimestamp(100000000)) + et = strpfromiso.fix_naivety(datetime.fromtimestamp(200000000)) + bh_object = BusinessHours(st, et) + worked_time = bh_object.get_seconds() + + bh_object = BusinessHours(st, et, business_hour_slots=constants.DEFAULT_BUSINESS_HOUR_SLOTS) + worked_time = bh_object.get_seconds() + + def test_cycle_waiting_time(self): + from pm4py.objects.log.importer.xes import importer as xes_importer + import os + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + + from pm4py.objects.log.util import interval_lifecycle + enriched_log = interval_lifecycle.assign_lead_cycle_time(log) + + def test_distr_case_duration(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log_path = os.path.join("input_data", "receipt.xes") + log = xes_importer.apply(log_path) + + from pm4py.util import constants + from pm4py.statistics.traces.generic.log import case_statistics + x, y = case_statistics.get_kde_caseduration(log, parameters={ + constants.PARAMETER_CONSTANT_TIMESTAMP_KEY: "time:timestamp"}) + + if importlib.util.find_spec("matplotlib"): + from pm4py.visualization.graphs import visualizer as graphs_visualizer + + gviz = graphs_visualizer.apply_plot(x, y, variant=graphs_visualizer.Variants.CASES) + gviz = graphs_visualizer.apply_semilogx(x, y, variant=graphs_visualizer.Variants.CASES) + + def test_distr_num_attribute(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + + log_path = os.path.join("input_data", "roadtraffic100traces.xes") + log = xes_importer.apply(log_path) + + from pm4py.algo.filtering.log.attributes import attributes_filter + + x, y = attributes_filter.get_kde_numeric_attribute(log, "amount") + + if importlib.util.find_spec("matplotlib"): + from pm4py.visualization.graphs import visualizer as graphs_visualizer + + gviz = graphs_visualizer.apply_plot(x, y, variant=graphs_visualizer.Variants.ATTRIBUTES) + + from pm4py.visualization.graphs import visualizer as graphs_visualizer + + gviz = graphs_visualizer.apply_semilogx(x, y, variant=graphs_visualizer.Variants.ATTRIBUTES) + + def test_evaluation(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + net, im, fm = alpha_miner.apply(log) + + from pm4py.algo.evaluation.replay_fitness import algorithm as replay_fitness_evaluator + fitness = replay_fitness_evaluator.apply(log, net, im, fm, + variant=replay_fitness_evaluator.Variants.TOKEN_BASED) + + from pm4py.algo.evaluation.replay_fitness import algorithm as replay_fitness_evaluator + fitness = replay_fitness_evaluator.apply(log, net, im, fm, + variant=replay_fitness_evaluator.Variants.ALIGNMENT_BASED) + + from pm4py.algo.evaluation.precision import algorithm as precision_evaluator + prec = precision_evaluator.apply(log, net, im, fm, variant=precision_evaluator.Variants.ETCONFORMANCE_TOKEN) + + from pm4py.algo.evaluation.precision import algorithm as precision_evaluator + prec = precision_evaluator.apply(log, net, im, fm, variant=precision_evaluator.Variants.ALIGN_ETCONFORMANCE) + + from pm4py.algo.evaluation.generalization import algorithm as generalization_evaluator + gen = generalization_evaluator.apply(log, net, im, fm) + + from pm4py.algo.evaluation.simplicity import algorithm as simplicity_evaluator + simp = simplicity_evaluator.apply(net) + + def test_sna(self): + if importlib.util.find_spec("pyvis"): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + + from pm4py.algo.organizational_mining.sna import algorithm as sna + hw_values = sna.apply(log, variant=sna.Variants.HANDOVER_LOG) + + from pm4py.visualization.sna import visualizer as sna_visualizer + gviz_hw_py = sna_visualizer.apply(hw_values, variant=sna_visualizer.Variants.PYVIS) + + from pm4py.algo.organizational_mining.sna import algorithm as sna + sub_values = sna.apply(log, variant=sna.Variants.SUBCONTRACTING_LOG) + + from pm4py.visualization.sna import visualizer as sna_visualizer + gviz_sub_py = sna_visualizer.apply(sub_values, variant=sna_visualizer.Variants.PYVIS) + + from pm4py.algo.organizational_mining.sna import algorithm as sna + wt_values = sna.apply(log, variant=sna.Variants.WORKING_TOGETHER_LOG) + + from pm4py.visualization.sna import visualizer as sna_visualizer + gviz_wt_py = sna_visualizer.apply(wt_values, variant=sna_visualizer.Variants.PYVIS) + + from pm4py.algo.organizational_mining.sna import algorithm as sna + ja_values = sna.apply(log, variant=sna.Variants.JOINTACTIVITIES_LOG) + + from pm4py.visualization.sna import visualizer as sna_visualizer + gviz_ja_py = sna_visualizer.apply(ja_values, variant=sna_visualizer.Variants.PYVIS) + + from pm4py.algo.organizational_mining.roles import algorithm as roles_discovery + roles = roles_discovery.apply(log) + + def test_playout(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + net, im, fm = alpha_miner.apply(log) + + from pm4py.algo.simulation.playout.petri_net import algorithm + + simulated_log = algorithm.apply(net, im, variant=algorithm.Variants.BASIC_PLAYOUT, + parameters={algorithm.Variants.BASIC_PLAYOUT.value.Parameters.NO_TRACES: 50}) + + from pm4py.algo.simulation.playout.petri_net import algorithm + + simulated_log = algorithm.apply(net, im, variant=algorithm.Variants.EXTENSIVE, + parameters={algorithm.Variants.EXTENSIVE.value.Parameters.MAX_TRACE_LENGTH: 7}) + + def test_ctmc(self): + import os + from pm4py.objects.log.importer.xes import importer as xes_importer + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.dfg import algorithm as dfg_discovery + dfg_perf = dfg_discovery.apply(log, variant=dfg_discovery.Variants.PERFORMANCE) + from pm4py.statistics.start_activities.log import get as start_activities + from pm4py.statistics.end_activities.log import get as end_activities + sa = start_activities.get_start_activities(log) + ea = end_activities.get_end_activities(log) + + from pm4py.algo.filtering.log.variants import variants_filter + log = variants_filter.filter_log_variants_percentage(log, 0.2) + + from pm4py.objects.stochastic_petri import ctmc + reach_graph, tang_reach_graph, stochastic_map, q_matrix = ctmc.get_tangible_reachability_and_q_matrix_from_dfg_performance( + dfg_perf, parameters={"start_activities": sa, "end_activities": ea}) + + # pick the source state + state = [x for x in tang_reach_graph.states if x.name == "source1"][0] + # analyse the distribution over the states of the system starting from the source after 172800.0 seconds (2 days) + transient_result = ctmc.transient_analysis_from_tangible_q_matrix_and_single_state(tang_reach_graph, q_matrix, + state, + 172800.0) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/etc_tests.py b/pm4py/tests/etc_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..c2742d56f22a8288248634ef8263956f1fab11bc --- /dev/null +++ b/pm4py/tests/etc_tests.py @@ -0,0 +1,24 @@ +import os +import unittest + +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.evaluation.precision import algorithm as etc_alg +from pm4py.objects.log.importer.xes import importer as xes_importer +from tests.constants import INPUT_DATA_DIR +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + + +class ETCTest(unittest.TestCase): + def test_etc1(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, marking, final_marking = process_tree_converter.apply(process_tree) + precision = etc_alg.apply(log, net, marking, final_marking, variant=etc_alg.ETCONFORMANCE_TOKEN) + del precision + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/evaluation_tests.py b/pm4py/tests/evaluation_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..595e971dc32415f651ac9d2871967448c5007904 --- /dev/null +++ b/pm4py/tests/evaluation_tests.py @@ -0,0 +1,64 @@ +import os +import unittest + +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.evaluation import algorithm as evaluation_alg +from pm4py.algo.evaluation.generalization import algorithm as generalization_alg +from pm4py.algo.evaluation.precision import algorithm as precision_alg +from pm4py.algo.evaluation.replay_fitness import algorithm as fitness_alg +from pm4py.algo.evaluation.simplicity import algorithm as simplicity_alg +from pm4py.objects.log.importer.xes import importer as xes_importer +from tests.constants import INPUT_DATA_DIR +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + + +class ProcessModelEvaluationTests(unittest.TestCase): + def test_evaluation_pm1(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, marking, final_marking = process_tree_converter.apply(process_tree) + fitness = fitness_alg.apply(log, net, marking, final_marking) + precision = precision_alg.apply(log, net, marking, final_marking) + generalization = generalization_alg.apply(log, net, marking, final_marking) + simplicity = simplicity_alg.apply(net) + del fitness + del precision + del generalization + del simplicity + + def test_evaluation_pm2(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, initial_marking, final_marking = process_tree_converter.apply(process_tree) + metrics = evaluation_alg.apply(log, net, initial_marking, final_marking) + del metrics + + def test_simplicity_arc_degree(self): + import pm4py + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + from pm4py.algo.evaluation.simplicity import algorithm as simplicity_evaluator + val = simplicity_evaluator.apply(net, variant=simplicity_evaluator.Variants.SIMPLICITY_ARC_DEGREE) + + + def test_simplicity_extended_cardoso(self): + import pm4py + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + from pm4py.algo.evaluation.simplicity import algorithm as simplicity_evaluator + val = simplicity_evaluator.apply(net, variant=simplicity_evaluator.Variants.EXTENDED_CARDOSO) + + + def test_simplicity_extended_cyclomatic(self): + import pm4py + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + from pm4py.algo.evaluation.simplicity import algorithm as simplicity_evaluator + val = simplicity_evaluator.apply(net, variant=simplicity_evaluator.Variants.EXTENDED_CYCLOMATIC) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/execute_tests.py b/pm4py/tests/execute_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..5e3a56ad750b6897292964aa1cd0ca9a6f6b61a4 --- /dev/null +++ b/pm4py/tests/execute_tests.py @@ -0,0 +1,361 @@ +import inspect +import os +import sys +import unittest +import importlib.util + +current_dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) +parent_dir = os.path.dirname(current_dir) +sys.path.insert(0, parent_dir) + +EXECUTE_TESTS = True + +import pm4py +import numpy +import pandas +import networkx + +pm4py.util.constants.SHOW_PROGRESS_BAR = False +pm4py.util.constants.SHOW_EVENT_LOG_DEPRECATION = False +pm4py.util.constants.SHOW_INTERNAL_WARNINGS = False +# pm4py.util.constants.DEFAULT_TIMESTAMP_PARSE_FORMAT = None + +enabled_tests = ["SimplifiedInterfaceTest", "SimplifiedInterface2Test", "DocTests", "RoleDetectionTest", + "PassedTimeTest", "Pm4pyImportPackageTest", "XesImportExportTest", "CsvImportExportTest", + "OtherPartsTests", "AlphaMinerTest", "InductiveMinerTest", "InductiveMinerTreeTest", + "AlignmentTest", "DfgTests", "SnaTests", "PetriImportExportTest", "BPMNTests", "ETCTest", + "DiagnDfConfChecking", "ProcessModelEvaluationTests", "DecisionTreeTest", "GraphsForming", + "HeuMinerTest", "MainFactoriesTest", "AlgorithmTest", "LogFilteringTest", + "DataframePrefilteringTest", "StatisticsLogTest", "StatisticsDfTest", "TransitionSystemTest", + "ImpExpFromString", "WoflanTest", "OcelFilteringTest", "OcelDiscoveryTest", "LlmTest"] + +loader = unittest.TestLoader() +suite = unittest.TestSuite() + +failed = 0 + +if not importlib.util.find_spec("graphviz"): + print("important! install 'grapviz' from pip") + failed +=1 + +if not importlib.util.find_spec("lxml"): + print("important! install 'lxml' from pip") + failed += 1 + +if "SimplifiedInterfaceTest" in enabled_tests: + try: + from tests.simplified_interface import SimplifiedInterfaceTest + suite.addTests(loader.loadTestsFromTestCase(SimplifiedInterfaceTest)) + except: + print("SimplifiedInterfaceTest import failed!") + failed += 1 + +if "SimplifiedInterface2Test" in enabled_tests: + try: + from tests.simplified_interface_2 import SimplifiedInterface2Test + suite.addTests(loader.loadTestsFromTestCase(SimplifiedInterface2Test)) + except: + print("SimplifiedInterface2Test import failed!") + failed += 1 + +if "DocTests" in enabled_tests: + try: + from tests.doc_tests import DocTests + suite.addTests(loader.loadTestsFromTestCase(DocTests)) + except: + print("DocTests import failed!") + failed += 1 + +if "RoleDetectionTest" in enabled_tests: + try: + from tests.role_detection import RoleDetectionTest + suite.addTests(loader.loadTestsFromTestCase(RoleDetectionTest)) + except: + print("RoleDetectionTest import failed!") + failed += 1 + +if "PassedTimeTest" in enabled_tests: + try: + from tests.passed_time import PassedTimeTest + suite.addTests(loader.loadTestsFromTestCase(PassedTimeTest)) + except: + print("PassedTimeTest import failed!") + failed += 1 + +if "Pm4pyImportPackageTest" in enabled_tests: + try: + from tests.imp_everything import Pm4pyImportPackageTest + suite.addTests(loader.loadTestsFromTestCase(Pm4pyImportPackageTest)) + except: + print("Pm4pyImportPackageTest import failed!") + failed += 1 + +if "XesImportExportTest" in enabled_tests: + try: + from tests.xes_impexp_test import XesImportExportTest + suite.addTests(loader.loadTestsFromTestCase(XesImportExportTest)) + except: + print("XesImportExportTest import failed!") + failed += 1 + +if "CsvImportExportTest" in enabled_tests: + try: + from tests.csv_impexp_test import CsvImportExportTest + suite.addTests(loader.loadTestsFromTestCase(CsvImportExportTest)) + except: + print("CsvImportExportTest import failed!") + failed += 1 + +if "OtherPartsTests" in enabled_tests: + try: + from tests.other_tests import OtherPartsTests + suite.addTests(loader.loadTestsFromTestCase(OtherPartsTests)) + except: + print("OtherPartsTests import failed!") + failed += 1 + +if "AlphaMinerTest" in enabled_tests: + try: + from tests.alpha_test import AlphaMinerTest + suite.addTests(loader.loadTestsFromTestCase(AlphaMinerTest)) + except: + print("AlphaMinerTest import failed!") + failed += 1 + +if "InductiveMinerTest" in enabled_tests: + try: + from tests.inductive_test import InductiveMinerTest + suite.addTests(loader.loadTestsFromTestCase(InductiveMinerTest)) + except: + print("InductiveMinerTest import failed!") + failed += 1 + +if "InductiveMinerTreeTest" in enabled_tests: + try: + from tests.inductive_tree_test import InductiveMinerTreeTest + suite.addTests(loader.loadTestsFromTestCase(InductiveMinerTreeTest)) + except: + print("InductiveMinerTreeTest import failed!") + failed += 1 + +if "AlignmentTest" in enabled_tests: + try: + from tests.alignment_test import AlignmentTest + suite.addTests(loader.loadTestsFromTestCase(AlignmentTest)) + except: + print("AlignmentTest import failed!") + failed += 1 + +if "DfgTests" in enabled_tests: + try: + from tests.dfg_tests import DfgTests + suite.addTests(loader.loadTestsFromTestCase(DfgTests)) + except: + print("DfgTests import failed!") + failed += 1 + +if "SnaTests" in enabled_tests: + try: + from tests.sna_test import SnaTests + suite.addTests(loader.loadTestsFromTestCase(SnaTests)) + except: + print("SnaTests import failed!") + failed += 1 + +if "PetriImportExportTest" in enabled_tests: + try: + from tests.petri_imp_exp_test import PetriImportExportTest + suite.addTests(loader.loadTestsFromTestCase(PetriImportExportTest)) + except: + print("PetriImportExportTest import failed!") + failed += 1 + +if "BPMNTests" in enabled_tests: + try: + from tests.bpmn_tests import BPMNTests + suite.addTests(loader.loadTestsFromTestCase(BPMNTests)) + except: + print("BPMNTests import failed!") + failed += 1 + +if "ETCTest" in enabled_tests: + try: + from tests.etc_tests import ETCTest + suite.addTests(loader.loadTestsFromTestCase(ETCTest)) + except: + print("ETCTest import failed!") + failed += 1 + +if "DiagnDfConfChecking" in enabled_tests: + try: + from tests.diagn_df_conf_checking import DiagnDfConfChecking + suite.addTests(loader.loadTestsFromTestCase(DiagnDfConfChecking)) + except: + print("DiagnDfConfChecking import failed!") + failed += 1 + +if "ProcessModelEvaluationTests" in enabled_tests: + try: + from tests.evaluation_tests import ProcessModelEvaluationTests + suite.addTests(loader.loadTestsFromTestCase(ProcessModelEvaluationTests)) + except: + print("ProcessModelEvaluationTests import failed!") + failed += 1 + +if "DecisionTreeTest" in enabled_tests: + try: + from tests.dec_tree_test import DecisionTreeTest + suite.addTests(loader.loadTestsFromTestCase(DecisionTreeTest)) + except: + print("DecisionTreeTest import failed!") + failed += 1 + +if "GraphsForming" in enabled_tests: + try: + from tests.graphs_forming import GraphsForming + suite.addTests(loader.loadTestsFromTestCase(GraphsForming)) + except: + print("GraphsForming import failed!") + failed += 1 + +if "HeuMinerTest" in enabled_tests: + try: + from tests.heuminer_test import HeuMinerTest + suite.addTests(loader.loadTestsFromTestCase(HeuMinerTest)) + except: + print("HeuMinerTest import failed!") + failed += 1 + +if "MainFactoriesTest" in enabled_tests: + try: + from tests.main_fac_test import MainFactoriesTest + suite.addTests(loader.loadTestsFromTestCase(MainFactoriesTest)) + except: + print("MainFactoriesTest import failed!") + failed += 1 + +if "AlgorithmTest" in enabled_tests: + try: + from tests.algorithm_test import AlgorithmTest + suite.addTests(loader.loadTestsFromTestCase(AlgorithmTest)) + except: + print("AlgorithmTest import failed!") + failed += 1 + +if "LogFilteringTest" in enabled_tests: + try: + from tests.filtering_log_test import LogFilteringTest + suite.addTests(loader.loadTestsFromTestCase(LogFilteringTest)) + except: + print("LogFilteringTest import failed!") + failed += 1 + +if "DataframePrefilteringTest" in enabled_tests: + try: + from tests.filtering_pandas_test import DataframePrefilteringTest + suite.addTests(loader.loadTestsFromTestCase(DataframePrefilteringTest)) + except: + print("DataframePrefilteringTest import failed!") + failed += 1 + +if "StatisticsLogTest" in enabled_tests: + try: + from tests.statistics_log_test import StatisticsLogTest + suite.addTests(loader.loadTestsFromTestCase(StatisticsLogTest)) + except: + print("StatisticsLogTest import failed!") + failed += 1 + +if "StatisticsDfTest" in enabled_tests: + try: + from tests.statistics_df_test import StatisticsDfTest + suite.addTests(loader.loadTestsFromTestCase(StatisticsDfTest)) + except: + print("StatisticsDfTest import failed!") + failed += 1 + +if "TransitionSystemTest" in enabled_tests: + try: + from tests.trans_syst_tests import TransitionSystemTest + suite.addTests(loader.loadTestsFromTestCase(TransitionSystemTest)) + except: + print("TransitionSystemTest import failed!") + failed += 1 + +if "ImpExpFromString" in enabled_tests: + try: + from tests.imp_exp_from_string import ImpExpFromString + suite.addTests(loader.loadTestsFromTestCase(ImpExpFromString)) + except: + print("ImpExpFromString import failed!") + failed += 1 + +if "WoflanTest" in enabled_tests: + try: + from tests.woflan_tests import WoflanTest + suite.addTests(loader.loadTestsFromTestCase(WoflanTest)) + except: + print("WoflanTest import failed!") + failed += 1 + +if "OcelFilteringTest" in enabled_tests: + try: + from tests.ocel_filtering_test import OcelFilteringTest + suite.addTests(loader.loadTestsFromTestCase(OcelFilteringTest)) + except: + print("OcelFilteringTest import failed!") + failed += 1 + +if "OcelDiscoveryTest" in enabled_tests: + try: + from tests.ocel_discovery_test import OcelDiscoveryTest + suite.addTests(loader.loadTestsFromTestCase(OcelDiscoveryTest)) + except: + print("OcelDiscoveryTest import failed!") + failed += 1 + +if "LlmTest" in enabled_tests: + try: + from tests.llm_test import LlmTest + suite.addTests(loader.loadTestsFromTestCase(LlmTest)) + except: + print("LlmTest import failed!") + failed += 1 + + +if failed > 0: + print("-- PRESS ENTER TO CONTINUE --") + input() + + +def main(): + if EXECUTE_TESTS: + runner = unittest.TextTestRunner() + runner.run(suite) + + print("numpy version: "+str(numpy.__version__)) + print("pandas version: "+str(pandas.__version__)) + print("networkx version: "+str(networkx.__version__)) + + if importlib.util.find_spec("scipy"): + import scipy + print("scipy version: "+str(scipy.__version__)) + + if importlib.util.find_spec("lxml"): + import lxml + print("lxml version: "+str(lxml.__version__)) + + if importlib.util.find_spec("matplotlib"): + import matplotlib + print("matplotlib version: "+str(matplotlib.__version__)) + + if importlib.util.find_spec("sklearn"): + import sklearn + print("sklearn version: "+str(sklearn.__version__)) + + print("pm4py version: "+str(pm4py.__version__)) + print("Python version: "+str(sys.version)) + + +if __name__ == "__main__": + main() diff --git a/pm4py/tests/filtering_log_test.py b/pm4py/tests/filtering_log_test.py new file mode 100644 index 0000000000000000000000000000000000000000..21a81d20f690bdabe3a303bfadf304f71c48aade --- /dev/null +++ b/pm4py/tests/filtering_log_test.py @@ -0,0 +1,176 @@ +import os +import unittest + +from pm4py.algo.filtering.log.attributes import attributes_filter +from pm4py.algo.filtering.log.cases import case_filter +from pm4py.algo.filtering.log.end_activities import end_activities_filter +from pm4py.algo.filtering.log.paths import paths_filter +from pm4py.algo.filtering.log.start_activities import start_activities_filter +from pm4py.algo.filtering.log.variants import variants_filter as variants_module +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.statistics.traces.generic.log import case_statistics +from pm4py.algo.filtering.log.ltl import ltl_checker +from pm4py.algo.filtering.log.timestamp import timestamp_filter +from tests.constants import INPUT_DATA_DIR +from pm4py.util import constants, pandas_utils + + +class LogFilteringTest(unittest.TestCase): + def test_filtering_attributes_events(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.xes") + log = xes_importer.apply(input_log) + log1 = attributes_filter.apply_events(log, ["reject request"], + parameters={attributes_filter.Parameters.POSITIVE: True}) + log2 = attributes_filter.apply_events(log, ["reject request"], + parameters={attributes_filter.Parameters.POSITIVE: True}) + del log1 + del log2 + + def test_filtering_attributes_traces(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.xes") + log = xes_importer.apply(input_log) + log1 = attributes_filter.apply(log, ["reject request"], + parameters={attributes_filter.Parameters.POSITIVE: True}) + log2 = attributes_filter.apply(log, ["reject request"], + parameters={attributes_filter.Parameters.POSITIVE: True}) + del log1 + del log2 + + def test_attribute_selection(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.xes") + log = xes_importer.apply(input_log) + attributes_filter.select_attributes_from_log_for_tree(log) + + def test_filtering_variants(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.xes") + log = xes_importer.apply(input_log) + considered_variant = "register request,examine casually,check ticket,decide,reinitiate request" + considered_variant = considered_variant + ",examine thoroughly,check ticket,decide,pay compensation" + log1 = variants_module.apply(log, [ + considered_variant], + parameters={attributes_filter.Parameters.POSITIVE: False}) + log2 = variants_module.apply(log, [ + considered_variant], + parameters={attributes_filter.Parameters.POSITIVE: True}) + del log1 + del log2 + + def test_obtaining_variants(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.xes") + log = xes_importer.apply(input_log) + stats = case_statistics.get_variant_statistics(log) + del stats + + def test_casefilter_ncases(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.xes") + log = xes_importer.apply(input_log) + cases = case_filter.filter_on_ncases(log, 1) + del cases + + def test_casefilter_casesize(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.xes") + log = xes_importer.apply(input_log) + cases = case_filter.filter_on_case_size(log, min_case_size=3, max_case_size=5) + del cases + + def test_pathsfilter(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.xes") + log = xes_importer.apply(input_log) + log1 = paths_filter.apply(log, [("examine casually", "check ticket")], {paths_filter.Parameters.POSITIVE: True}) + log2 = paths_filter.apply(log, [("examine casually", "check ticket")], {paths_filter.Parameters.POSITIVE: False}) + del log1 + del log2 + + def test_AeventuallyB_pos(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filt_A_ev_B_pos = ltl_checker.eventually_follows(log, ["check ticket", "pay compensation"], + parameters={ltl_checker.Parameters.POSITIVE: True}) + + def test_AeventuallyB_neg(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filt_A_ev_B_neg = ltl_checker.eventually_follows(log, ["check ticket", "pay compensation"], + parameters={ltl_checker.Parameters.POSITIVE: False}) + + def test_AeventuallyBeventuallyC_pos(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filt_A_ev_B_ev_C_pos = ltl_checker.eventually_follows(log, ["check ticket", "decide", + "pay compensation"], + parameters={ + ltl_checker.Parameters.POSITIVE: True}) + + def test_AeventuallyBeventuallyC_neg(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filt_A_ev_B_ev_C_neg = ltl_checker.eventually_follows(log, ["check ticket", "decide", + "pay compensation"], + parameters={ + ltl_checker.Parameters.POSITIVE: False}) + + def test_AnextBnextC_pos(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filt_A_next_B_next_C_pos = ltl_checker.A_next_B_next_C(log, "check ticket", "decide", "pay compensation", + parameters={ltl_checker.Parameters.POSITIVE: True}) + + def test_AnextBnextC_neg(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filt_A_next_B_next_C_neg = ltl_checker.A_next_B_next_C(log, "check ticket", "decide", "pay compensation", + parameters={ltl_checker.Parameters.POSITIVE: False}) + + def test_fourEeyesPrinciple_pos(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filt_foureyes_pos = ltl_checker.four_eyes_principle(log, "check ticket", "pay compensation", + parameters={ltl_checker.Parameters.POSITIVE: True}) + + def test_fourEeyesPrinciple_neg(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filt_foureyes_neg = ltl_checker.four_eyes_principle(log, "check ticket", "pay compensation", + parameters={ltl_checker.Parameters.POSITIVE: False}) + + def test_attrValueDifferentPersons_pos(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + attr_value_different_persons_pos = ltl_checker.attr_value_different_persons(log, "check ticket", + parameters={ + ltl_checker.Parameters.POSITIVE: True}) + + def test_attrValueDifferentPersons_neg(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + attr_value_different_persons_neg = ltl_checker.attr_value_different_persons(log, "check ticket", + parameters={ + ltl_checker.Parameters.POSITIVE: False}) + + + def test_attr_value_repetition(self): + from pm4py.algo.filtering.log.attr_value_repetition import filter + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filtered_log = filter.apply(log, "Sara", parameters={constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: "org:resource"}) + + def test_filter_traces_attribute_in_timeframe(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + filtered_log = timestamp_filter.filter_traces_attribute_in_timeframe(log, "concept:name", "reinitiate request", "2011-01-06 00:00:00", "2011-01-07 23:59:59") + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/filtering_pandas_test.py b/pm4py/tests/filtering_pandas_test.py new file mode 100644 index 0000000000000000000000000000000000000000..4fbe830735550fe14fe364a8330cfe37745f0441 --- /dev/null +++ b/pm4py/tests/filtering_pandas_test.py @@ -0,0 +1,167 @@ +import os +import unittest + +from pm4py.algo.filtering.pandas.attributes import attributes_filter +from pm4py.algo.filtering.pandas.cases import case_filter +from pm4py.algo.filtering.pandas.paths import paths_filter +from pm4py.algo.filtering.pandas.timestamp import timestamp_filter +from pm4py.algo.filtering.pandas.variants import variants_filter +from pm4py.objects.log.util import dataframe_utils +from pm4py.objects.conversion.log import converter as log_conv_fact +from pm4py.statistics.traces.generic.pandas import case_statistics +from pm4py.algo.filtering.pandas.ltl import ltl_checker +from tests.constants import INPUT_DATA_DIR +from pm4py.util import constants, pandas_utils + + +class DataframePrefilteringTest(unittest.TestCase): + def test_prefiltering_dataframe(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.csv") + dataframe = pandas_utils.read_csv(input_log) + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + dataframe = attributes_filter.filter_df_keeping_spno_activities(dataframe, activity_key="concept:name") + dataframe = case_filter.filter_on_ncases(dataframe, case_id_glue="case:concept:name") + dataframe = dataframe.sort_values('time:timestamp') + event_log = log_conv_fact.apply(dataframe, variant=log_conv_fact.TO_EVENT_STREAM) + log = log_conv_fact.apply(event_log, variant=log_conv_fact.Variants.TO_EVENT_LOG) + del log + + def test_filtering_variants(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.csv") + dataframe = pandas_utils.read_csv(input_log) + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + variants = case_statistics.get_variant_statistics(dataframe) + chosen_variants = [variants[0]["variant"]] + dataframe = variants_filter.apply(dataframe, chosen_variants) + del dataframe + + def test_filtering_attr_events(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.csv") + dataframe = pandas_utils.read_csv(input_log) + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + df1 = attributes_filter.apply_events(dataframe, ["reject request"], + parameters={attributes_filter.Parameters.POSITIVE: True}) + df2 = attributes_filter.apply_events(dataframe, ["reject request"], + parameters={attributes_filter.Parameters.POSITIVE: False}) + del df1 + del df2 + + def test_filtering_paths(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.csv") + dataframe = pandas_utils.read_csv(input_log) + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + df3 = paths_filter.apply(dataframe, [("examine casually", "check ticket")], + {paths_filter.Parameters.POSITIVE: False}) + del df3 + df3 = paths_filter.apply(dataframe, [("examine casually", "check ticket")], + {paths_filter.Parameters.POSITIVE: True}) + del df3 + + def test_filtering_timeframe(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "receipt.csv") + df = pandas_utils.read_csv(input_log) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + df1 = timestamp_filter.apply_events(df, "2011-03-09 00:00:00", "2012-01-18 23:59:59") + df2 = timestamp_filter.filter_traces_intersecting(df, "2011-03-09 00:00:00", "2012-01-18 23:59:59") + df3 = timestamp_filter.filter_traces_contained(df, "2011-03-09 00:00:00", "2012-01-18 23:59:59") + del df1 + del df2 + del df3 + + def test_filtering_traces_attribute_in_timeframe(self): + input_log = os.path.join(INPUT_DATA_DIR, "receipt.csv") + df = pandas_utils.read_csv(input_log) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + df1 = timestamp_filter.filter_traces_attribute_in_timeframe(df, "concept:name", "Confirmation of receipt", "2011-03-09 00:00:00", "2012-01-18 23:59:59") + + def test_AeventuallyB_pos(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + filt_A_ev_B_pos = ltl_checker.eventually_follows(df, ["check ticket", "pay compensation"], + parameters={ltl_checker.Parameters.POSITIVE: True}) + + def test_AeventuallyB_neg(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + filt_A_ev_B_neg = ltl_checker.eventually_follows(df, ["check ticket", "pay compensation"], + parameters={ltl_checker.Parameters.POSITIVE: False}) + + def test_AeventuallyBeventuallyC_pos(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + filt_A_ev_B_ev_C_pos = ltl_checker.eventually_follows(df, ["check ticket", "decide", + "pay compensation"], + parameters={ + ltl_checker.Parameters.POSITIVE: True}) + + def test_AeventuallyBeventuallyC_neg(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + filt_A_ev_B_ev_C_neg = ltl_checker.eventually_follows(df, ["check ticket", "decide", + "pay compensation"], + parameters={ + ltl_checker.Parameters.POSITIVE: False}) + + def test_AnextBnextC_pos(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + filt_A_next_B_next_C_pos = ltl_checker.A_next_B_next_C(df, "check ticket", "decide", "pay compensation", + parameters={ltl_checker.Parameters.POSITIVE: True}) + + def test_AnextBnextC_neg(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + filt_A_next_B_next_C_neg = ltl_checker.A_next_B_next_C(df, "check ticket", "decide", "pay compensation", + parameters={ltl_checker.Parameters.POSITIVE: False}) + + def test_fourEeyesPrinciple_pos(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + filt_foureyes_pos = ltl_checker.four_eyes_principle(df, "check ticket", "pay compensation", + parameters={ltl_checker.Parameters.POSITIVE: True}) + + def test_fourEeyesPrinciple_neg(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + filt_foureyes_neg = ltl_checker.four_eyes_principle(df, "check ticket", "pay compensation", + parameters={ltl_checker.Parameters.POSITIVE: False}) + + def test_attrValueDifferentPersons_pos(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + attr_value_different_persons_pos = ltl_checker.attr_value_different_persons(df, "check ticket", + parameters={ + ltl_checker.Parameters.POSITIVE: True}) + + def test_attrValueDifferentPersons_neg(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + attr_value_different_persons_neg = ltl_checker.attr_value_different_persons(df, "check ticket", + parameters={ + ltl_checker.Parameters.POSITIVE: False}) + + + def test_attr_value_repetition(self): + from pm4py.algo.filtering.pandas.attr_value_repetition import filter + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + filtered_df = filter.apply(df, "Sara", parameters={constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: "org:resource"}) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/graphs_forming.py b/pm4py/tests/graphs_forming.py new file mode 100644 index 0000000000000000000000000000000000000000..7115e1406ba9f16ef1c93237ea77b78c475b0b58 --- /dev/null +++ b/pm4py/tests/graphs_forming.py @@ -0,0 +1,59 @@ +import os +import unittest + +from pm4py.statistics.traces.generic.pandas import case_statistics as pd_case_statistics +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.statistics.traces.generic.log import case_statistics as log_case_statistics +from pm4py.statistics.attributes.log import get as log_attributes_filter +from pm4py.statistics.attributes.pandas import get as pd_attributes_filter +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils + + +class GraphsForming(unittest.TestCase): + def test_dfCasedurationPlotSemilogx(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + + df = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + x, y = pd_case_statistics.get_kde_caseduration(df) + json = pd_case_statistics.get_kde_caseduration_json(df) + del json + + def test_logCaseDurationPlotSemiLogx(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + x, y = log_case_statistics.get_kde_caseduration(log) + json = log_case_statistics.get_kde_caseduration_json(log) + del json + + def test_dfNumericAttribute(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + + df = pandas_utils.read_csv(os.path.join("input_data", "roadtraffic100traces.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + + x, y = pd_attributes_filter.get_kde_numeric_attribute(df, "amount") + json = pd_attributes_filter.get_kde_numeric_attribute_json(df, "amount") + del json + + def test_logNumericAttribute(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + + log = xes_importer.apply(os.path.join("input_data", "roadtraffic100traces.xes")) + x, y = log_attributes_filter.get_kde_numeric_attribute(log, "amount") + json = log_attributes_filter.get_kde_numeric_attribute_json(log, "amount") + del json + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/heuminer_test.py b/pm4py/tests/heuminer_test.py new file mode 100644 index 0000000000000000000000000000000000000000..e98b0a82f383de34cddca52c4915a45bacdcd2de --- /dev/null +++ b/pm4py/tests/heuminer_test.py @@ -0,0 +1,66 @@ +import os +import unittest + +from pm4py.algo.discovery.heuristics import algorithm as heuristics_miner +from pm4py.objects.log.util import dataframe_utils +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.visualization.heuristics_net import visualizer as hn_vis +from pm4py.visualization.petri_net import visualizer as pn_vis +from pm4py.util import constants, pandas_utils +from tests.constants import INPUT_DATA_DIR + + +class HeuMinerTest(unittest.TestCase): + def test_heunet_running_example(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + heu_net = heuristics_miner.apply_heu(log) + gviz = hn_vis.apply(heu_net) + del gviz + + def test_petrinet_running_example(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + net, im, fm = heuristics_miner.apply(log) + gviz = pn_vis.apply(net, im, fm) + del gviz + + def test_petrinet_receipt_df(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + df = pandas_utils.read_csv(os.path.join(INPUT_DATA_DIR, "receipt.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + net, im, fm = heuristics_miner.apply(df) + gviz = pn_vis.apply(net, im, fm) + del gviz + + def test_heuplusplus_perf_df(self): + df = pandas_utils.read_csv(os.path.join(INPUT_DATA_DIR, "interval_event_log.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + heu_net = heuristics_miner.Variants.PLUSPLUS.value.apply_heu_pandas(df, parameters={"heu_net_decoration": "performance"}) + gviz = hn_vis.apply(heu_net) + + def test_heuplusplus_perf_log(self): + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "interval_event_log.xes")) + heu_net = heuristics_miner.apply_heu(log, variant=heuristics_miner.Variants.PLUSPLUS, parameters={"heu_net_decoration": "performance"}) + gviz = hn_vis.apply(heu_net) + + def test_heuplusplus_petri_df(self): + df = pandas_utils.read_csv(os.path.join(INPUT_DATA_DIR, "interval_event_log.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + net, im, fm = heuristics_miner.Variants.PLUSPLUS.value.apply_pandas(df) + gviz = pn_vis.apply(net, im, fm) + + def test_heuplusplus_petri_log(self): + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "interval_event_log.xes")) + net, im, fm = heuristics_miner.apply(log, variant=heuristics_miner.Variants.PLUSPLUS) + gviz = pn_vis.apply(net, im, fm) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/imp_everything.py b/pm4py/tests/imp_everything.py new file mode 100644 index 0000000000000000000000000000000000000000..ae90d71560cd129c3ff03edcddb58902ed9d0da9 --- /dev/null +++ b/pm4py/tests/imp_everything.py @@ -0,0 +1,17 @@ +import os +import unittest + + +class Pm4pyImportPackageTest(unittest.TestCase): + def test_importeverything(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + import pm4py + log = pm4py.objects.log.importer.xes.importer.apply( + os.path.join("input_data", "running-example.xes")) + self.assertEqual(len(log), 6) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/imp_exp_from_string.py b/pm4py/tests/imp_exp_from_string.py new file mode 100644 index 0000000000000000000000000000000000000000..2d4d360194d2e457a9767670fc41759c5a0ba357 --- /dev/null +++ b/pm4py/tests/imp_exp_from_string.py @@ -0,0 +1,92 @@ +import os +import unittest + +import pm4py +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.petri_net.importer import importer as petri_importer +from pm4py.objects.process_tree.importer import importer as tree_importer +from pm4py.objects.bpmn.importer import importer as bpmn_importer +from pm4py.objects.log.exporter.xes import exporter as xes_exporter +from pm4py.objects.petri_net.exporter import exporter as petri_exporter +from pm4py.objects.process_tree.exporter import exporter as tree_exporter +from pm4py.objects.bpmn.exporter import exporter as bpmn_exporter + + +class ImpExpFromString(unittest.TestCase): + def test_imp_xes_from_str(self): + F = open(os.path.join("input_data", "running-example.xes"), "rb") + content = F.read() + F.close() + log = xes_importer.deserialize(content) + self.assertIsNotNone(log) + + def test_imp_petri_from_str(self): + F = open(os.path.join("input_data", "running-example.pnml"), "rb") + content = F.read() + F.close() + net, im, fm = petri_importer.deserialize(content) + self.assertIsNotNone(net) + self.assertIsNotNone(im) + + def test_imp_tree_from_str(self): + F = open(os.path.join("input_data", "running-example.ptml"), "rb") + content = F.read() + F.close() + tree = tree_importer.deserialize(content) + self.assertIsNotNone(tree) + + def test_imp_bpmn_from_str(self): + F = open(os.path.join("input_data", "running-example.bpmn"), "rb") + content = F.read() + F.close() + bpmn_graph = bpmn_importer.deserialize(content) + self.assertIsNotNone(bpmn_graph) + + def test_imp_xes_from_str2(self): + F = open(os.path.join("input_data", "running-example.xes"), "r") + content = F.read() + F.close() + log = xes_importer.deserialize(content) + self.assertIsNotNone(log) + + def test_imp_petri_from_str2(self): + F = open(os.path.join("input_data", "running-example.pnml"), "r") + content = F.read() + F.close() + net, im, fm = petri_importer.deserialize(content) + self.assertIsNotNone(net) + self.assertIsNotNone(im) + + def test_imp_tree_from_str2(self): + F = open(os.path.join("input_data", "running-example.ptml"), "r") + content = F.read() + F.close() + tree = tree_importer.deserialize(content) + self.assertIsNotNone(tree) + + def test_imp_bpmn_from_str2(self): + F = open(os.path.join("input_data", "running-example.bpmn"), "r") + content = F.read() + F.close() + bpmn_graph = bpmn_importer.deserialize(content) + self.assertIsNotNone(bpmn_graph) + + def test_exp_xes_to_str(self): + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes")) + xes_exporter.serialize(log) + + def test_exp_pnml_to_str(self): + net, im, fm = pm4py.read_pnml(os.path.join("input_data", "running-example.pnml")) + petri_exporter.serialize(net, im, fm) + + def test_exp_ptml_to_str(self): + tree = pm4py.read_ptml(os.path.join("input_data", "running-example.ptml")) + tree_exporter.serialize(tree) + + def test_exp_bpmn_to_str(self): + bpmn_graph = pm4py.read_bpmn(os.path.join("input_data", "running-example.bpmn")) + bpmn_exporter.serialize(bpmn_graph) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/inductive_test.py b/pm4py/tests/inductive_test.py new file mode 100644 index 0000000000000000000000000000000000000000..59a7f20b92e07f7a12b4f32cea3822feedb40a45 --- /dev/null +++ b/pm4py/tests/inductive_test.py @@ -0,0 +1,172 @@ +import logging +import os, sys +import unittest + +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.algo.conformance.tokenreplay import algorithm as token_replay +from pm4py.algo.conformance.tokenreplay.variants.token_replay import NoConceptNameException +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.objects import petri_net +from pm4py.objects.log.util import dataframe_utils +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.util import sampling, sorting, index_attribute +from pm4py.objects.petri_net.exporter import exporter as petri_exporter +from pm4py.visualization.petri_net.common import visualize as pn_viz +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + +# from tests.constants import INPUT_DATA_DIR, OUTPUT_DATA_DIR, PROBLEMATIC_XES_DIR + +INPUT_DATA_DIR = "input_data" +OUTPUT_DATA_DIR = "test_output_data" +PROBLEMATIC_XES_DIR = "xes_importer_tests" +COMPRESSED_INPUT_DATA = "compressed_input_data" + + +class InductiveMinerTest(unittest.TestCase): + def obtain_petri_net_through_im(self, log_name, variant=inductive_miner.Variants.IM): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + if ".xes" in log_name: + log = xes_importer.apply(log_name) + else: + df = pandas_utils.read_csv(log_name) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + log = log_conversion.apply(df, variant=log_conversion.Variants.TO_EVENT_LOG) + process_tree = inductive_miner.apply(log) + net, marking, final_marking = process_tree_converter.apply(process_tree) + + return log, net, marking, final_marking + + def test_applyImdfToXES(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + # calculate and compare Petri nets obtained on the same log to verify that instances + # are working correctly + log1, net1, marking1, fmarking1 = self.obtain_petri_net_through_im( + os.path.join(INPUT_DATA_DIR, "running-example.xes")) + log2, net2, marking2, fmarking2 = self.obtain_petri_net_through_im( + os.path.join(INPUT_DATA_DIR, "running-example.xes")) + log1 = sorting.sort_timestamp(log1) + log1 = sampling.sample(log1) + log1 = index_attribute.insert_trace_index_as_event_attribute(log1) + log2 = sorting.sort_timestamp(log2) + log2 = sampling.sample(log2) + log2 = index_attribute.insert_trace_index_as_event_attribute(log2) + petri_exporter.apply(net1, marking1, os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + os.remove(os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + self.assertEqual(len(net1.places), len(net2.places)) + final_marking = petri_net.obj.Marking() + for p in net1.places: + if not p.out_arcs: + final_marking[p] = 1 + aligned_traces = token_replay.apply(log1, net1, marking1, final_marking) + del aligned_traces + + def test_applyImdfToCSV(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + # calculate and compare Petri nets obtained on the same log to verify that instances + # are working correctly + log1, net1, marking1, fmarking1 = self.obtain_petri_net_through_im( + os.path.join(INPUT_DATA_DIR, "running-example.csv")) + log2, net2, marking2, fmarking2 = self.obtain_petri_net_through_im( + os.path.join(INPUT_DATA_DIR, "running-example.csv")) + log1 = sorting.sort_timestamp(log1) + log1 = sampling.sample(log1) + log1 = index_attribute.insert_trace_index_as_event_attribute(log1) + log2 = sorting.sort_timestamp(log2) + log2 = sampling.sample(log2) + log2 = index_attribute.insert_trace_index_as_event_attribute(log2) + petri_exporter.apply(net1, marking1, os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + os.remove(os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + self.assertEqual(len(net1.places), len(net2.places)) + final_marking = petri_net.obj.Marking() + for p in net1.places: + if not p.out_arcs: + final_marking[p] = 1 + aligned_traces = token_replay.apply(log1, net1, marking1, final_marking) + del aligned_traces + + def test_imdfVisualizationFromXES(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log, net, marking, fmarking = self.obtain_petri_net_through_im( + os.path.join(INPUT_DATA_DIR, "running-example.xes")) + log = sorting.sort_timestamp(log) + log = sampling.sample(log) + log = index_attribute.insert_trace_index_as_event_attribute(log) + petri_exporter.apply(net, marking, os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + os.remove(os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + gviz = pn_viz.graphviz_visualization(net) + final_marking = petri_net.obj.Marking() + for p in net.places: + if not p.out_arcs: + final_marking[p] = 1 + aligned_traces = token_replay.apply(log, net, marking, final_marking) + del gviz + del aligned_traces + + def test_inductive_miner_new_log(self): + import pm4py + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=True) + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.2) + + def test_inductive_miner_new_df(self): + import pm4py + log = pm4py.read_xes("input_data/running-example.xes") + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.2) + + def test_inductive_miner_new_log_dfg(self): + import pm4py + from pm4py.objects.dfg.obj import DFG + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=True) + dfg, sa, ea = pm4py.discover_dfg(log) + typed_dfg = DFG(dfg, sa, ea) + tree = pm4py.discover_process_tree_inductive(typed_dfg, noise_threshold=0.2) + + def test_inductive_miner_new_df_dfg(self): + import pm4py + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=False) + typed_dfg = pm4py.discover_dfg_typed(log) + tree = pm4py.discover_process_tree_inductive(typed_dfg, noise_threshold=0.2) + + def test_inductive_miner_new_log_variants(self): + import pm4py + from pm4py.util.compression.dtypes import UVCL + from pm4py.algo.discovery.inductive.variants.imf import IMFUVCL + from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=True) + variants = pm4py.get_variants(log) + uvcl = UVCL() + for var, occ in variants.items(): + uvcl[var] = len(occ) + parameters = {"noise_threshold": 0.2} + imfuvcl = IMFUVCL(parameters) + + tree = imfuvcl.apply(IMDataStructureUVCL(uvcl), parameters=parameters) + + + def test_inductive_miner_new_df_variants(self): + import pm4py + from pm4py.util.compression.dtypes import UVCL + from pm4py.algo.discovery.inductive.variants.imf import IMFUVCL + from pm4py.algo.discovery.inductive.dtypes.im_ds import IMDataStructureUVCL + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=True) + variants = pm4py.get_variants(log) + uvcl = UVCL() + for var, occ in variants.items(): + uvcl[var] = len(occ) + parameters = {"noise_threshold": 0.2} + imfuvcl = IMFUVCL(parameters) + + tree = imfuvcl.apply(IMDataStructureUVCL(uvcl), parameters=parameters) + + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/inductive_tree_test.py b/pm4py/tests/inductive_tree_test.py new file mode 100644 index 0000000000000000000000000000000000000000..41a3ac618e8f5a5514eead6567d1fc54862cbe89 --- /dev/null +++ b/pm4py/tests/inductive_tree_test.py @@ -0,0 +1,45 @@ +import os +import unittest + +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.visualization.process_tree import visualizer as pt_vis +from pm4py.objects.process_tree import semantics as pt_semantics +from pm4py.objects.process_tree.utils import generic as pt_util +from tests.constants import INPUT_DATA_DIR + + +class InductiveMinerTreeTest(unittest.TestCase): + def test_tree_running_example_log_plain_based(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + tree = inductive_miner.apply(log, variant=inductive_miner.Variants.IM) + gviz = pt_vis.apply(tree) + del gviz + # test log generation + log = pt_semantics.generate_log(tree) + del log + + def test_tree_receipt_log_plain_based(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "receipt.xes")) + tree = inductive_miner.apply(log, variant=inductive_miner.Variants.IM) + gviz = pt_vis.apply(tree) + del gviz + del log + + def test_tree_parsing(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + tree = pt_util.parse("->(X('a', 'b', tau), +('c', 'd'))") + # test log generation + log = pt_semantics.generate_log(tree) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/input_data/a32f0n00.bpmn b/pm4py/tests/input_data/a32f0n00.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..50fb508cd5f5a1f0bd5dae7df59b12447bc1e654 --- /dev/null +++ b/pm4py/tests/input_data/a32f0n00.bpmn @@ -0,0 +1,842 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ide645c80e-811d-4c60-91ff-03f3fa39e401 + id49ab6647-e009-4801-aa18-b4d8ec09b3ff + ida4e36754-cb1a-468f-9527-d72c242ccda4 + + + idab05d56b-d733-424c-a222-2aa1cb68cf00 + ida4e36754-cb1a-468f-9527-d72c242ccda4 + idab416733-1509-42ca-b1c4-9ca57dd3e1f4 + + + ida8878ddd-5324-4775-9f2a-e5e58fb89769 + id03a00427-659a-497b-a707-d4a650f5a7f6 + + + idb18a5d12-dabc-439f-a8d7-ec9d9551bd64 + id58ae1653-3f8d-4165-bc3b-6b08d721b20a + + + id7d297f6b-ccb2-45bc-a51e-8608d13cd1b2 + id1490e3b2-04ee-4490-a821-316bedbe816c + + + idcba35301-c888-402c-94ad-5916216882f0 + id54f7a323-032e-4ad4-bd0e-bef628b8ebf2 + id0ff848cf-47b3-4731-9210-0b97d5be9900 + + + idf082aebd-8302-4ec5-9103-589a272bcd9a + id5f57ada6-d031-4781-ad22-75ecb3b2516a + + + idab416733-1509-42ca-b1c4-9ca57dd3e1f4 + id9d6588bf-e1f7-4277-8437-9f53e69d2bf0 + + + id70bea102-329a-480d-9ec0-6a6f42801739 + idf5b75ed7-a72e-4b71-9a84-7bc150176d71 + id9d52e83e-2121-4208-8b83-de44898042d3 + + + id0a5664cf-01d2-435b-b7bb-5516b1369807 + ide9ff161c-a704-4179-995a-d9b4a9f540c4 + id1cf8501c-74c9-4a26-9609-bbf5e30dc4d5 + + + id054b847d-5eab-4cc7-ab76-6b359a9f543c + idab05d56b-d733-424c-a222-2aa1cb68cf00 + + + idef4e6e17-bb09-4060-b12a-63d50a8d7395 + idb521957d-23f4-4754-8dc4-0223a1071d8c + + + idcd91cebf-4958-43f0-a796-16286fce3721 + id4683b906-b5cc-402b-addf-5c7a91d39095 + + + id3815c02c-c7ef-45b8-96b3-a4f9137467c7 + idc34b1bde-39c3-4fd6-9407-58304c7f16e3 + + + id1cf8501c-74c9-4a26-9609-bbf5e30dc4d5 + id459b6b2d-449c-4cc7-b2eb-362cdc10556a + + + id9d52e83e-2121-4208-8b83-de44898042d3 + ide9ff161c-a704-4179-995a-d9b4a9f540c4 + + + id1d13d6c7-ab90-48c8-bec5-26ef9ac29234 + id3bdf3e1e-191f-4c20-9e17-732c3001b94a + ida8878ddd-5324-4775-9f2a-e5e58fb89769 + + + idb7ad6f52-2f98-4dee-8031-60cc5085b46c + id3bdf3e1e-191f-4c20-9e17-732c3001b94a + + + id4683b906-b5cc-402b-addf-5c7a91d39095 + id7d297f6b-ccb2-45bc-a51e-8608d13cd1b2 + idef4e6e17-bb09-4060-b12a-63d50a8d7395 + + + idb0c546f4-0a4e-4ef0-8c12-9de8284da3d4 + ida4cb8859-3dcb-4d49-bfb4-7c21a4c65973 + id22496ec3-618e-49ed-98ff-1b481c664b51 + + + id66a403a2-1083-4b99-b643-1c4537482092 + idb0c546f4-0a4e-4ef0-8c12-9de8284da3d4 + + + id2ec1a2b9-47f0-46f9-a0a4-9d9186a91049 + id694e8563-7967-4be6-94d2-797842f7b7fb + + + id680f0676-4465-449b-ab5e-37d28cd38c2a + ida4cb8859-3dcb-4d49-bfb4-7c21a4c65973 + + + id22496ec3-618e-49ed-98ff-1b481c664b51 + idd7330ec7-2925-401b-9b84-63f17fc86046 + + + idb521957d-23f4-4754-8dc4-0223a1071d8c + id66a403a2-1083-4b99-b643-1c4537482092 + id680f0676-4465-449b-ab5e-37d28cd38c2a + + + id2baaf473-1a53-41a2-90cd-d1d9c1a5eb40 + id54f7a323-032e-4ad4-bd0e-bef628b8ebf2 + + + id0ff848cf-47b3-4731-9210-0b97d5be9900 + idb14b326c-aa12-43df-b829-104f5aad457d + + + id4d6e2169-417f-4b72-99fb-7bb159d01c63 + id89029c49-1998-412c-9ca8-1815a8e16755 + + + id2408c349-8781-45a9-b0b5-a7758f897707 + idce49c7bc-ef45-4efa-8de3-61b1eef1792e + idb0079fef-c1af-4f2d-abaf-1b8e8da3c2e1 + + + id47f99cee-f653-4948-87af-2cd696614b22 + idb18a5d12-dabc-439f-a8d7-ec9d9551bd64 + + + id76a17a59-f6d3-425b-aea7-05804b5241ea + ida23db89d-55ab-44fd-9436-6ce7ee83d141 + + + idb5edfcc0-8862-46b9-a837-e7c5688f53f1 + id0a5664cf-01d2-435b-b7bb-5516b1369807 + + + id6c51fee8-fb06-48fb-aa20-74a7bbab0217 + idcba35301-c888-402c-94ad-5916216882f0 + + + id22e798c7-dba4-4e87-8a6e-1cbd437d7c2c + idce49c7bc-ef45-4efa-8de3-61b1eef1792e + + + id459b6b2d-449c-4cc7-b2eb-362cdc10556a + + + id9d6588bf-e1f7-4277-8437-9f53e69d2bf0 + id054b847d-5eab-4cc7-ab76-6b359a9f543c + idb7ad6f52-2f98-4dee-8031-60cc5085b46c + + + id2c9f5555-3f3e-47ab-ae37-0928e520351b + id40531792-b54c-4ec2-ab8d-91c1b53dd412 + + + idc92f9b53-089d-4356-971b-2a1b7436ba73 + id2ec1a2b9-47f0-46f9-a0a4-9d9186a91049 + id76a17a59-f6d3-425b-aea7-05804b5241ea + + + idb0079fef-c1af-4f2d-abaf-1b8e8da3c2e1 + id2c9f5555-3f3e-47ab-ae37-0928e520351b + id6215fd77-cd35-4a27-a76f-9aa28153ea0b + idc428956b-c73b-4703-9cf1-0a7ba38e1354 + + + idc34b1bde-39c3-4fd6-9407-58304c7f16e3 + idd7330ec7-2925-401b-9b84-63f17fc86046 + idb5edfcc0-8862-46b9-a837-e7c5688f53f1 + + + id25255a92-c60f-47d3-8ab7-c9c95920074a + idc92f9b53-089d-4356-971b-2a1b7436ba73 + + + id49ab6647-e009-4801-aa18-b4d8ec09b3ff + id1d13d6c7-ab90-48c8-bec5-26ef9ac29234 + + + idfe798bb8-8819-4ce5-bbb4-8ecb15541abe + id3f26cb9f-e02c-4b31-9494-d154bb871d04 + + + id694e8563-7967-4be6-94d2-797842f7b7fb + ida23db89d-55ab-44fd-9436-6ce7ee83d141 + id4d6e2169-417f-4b72-99fb-7bb159d01c63 + + + id588b0c2e-028a-4171-a096-3f917467a1a9 + id2baaf473-1a53-41a2-90cd-d1d9c1a5eb40 + + + id47f99cee-f653-4948-87af-2cd696614b22 + + + id1490e3b2-04ee-4490-a821-316bedbe816c + idfe798bb8-8819-4ce5-bbb4-8ecb15541abe + idf082aebd-8302-4ec5-9103-589a272bcd9a + + + idc428956b-c73b-4703-9cf1-0a7ba38e1354 + ide645c80e-811d-4c60-91ff-03f3fa39e401 + + + id6215fd77-cd35-4a27-a76f-9aa28153ea0b + id25255a92-c60f-47d3-8ab7-c9c95920074a + + + id3f26cb9f-e02c-4b31-9494-d154bb871d04 + id5f57ada6-d031-4781-ad22-75ecb3b2516a + id3815c02c-c7ef-45b8-96b3-a4f9137467c7 + + + id58ae1653-3f8d-4165-bc3b-6b08d721b20a + idcd91cebf-4958-43f0-a796-16286fce3721 + id22e798c7-dba4-4e87-8a6e-1cbd437d7c2c + + + idb14b326c-aa12-43df-b829-104f5aad457d + id89029c49-1998-412c-9ca8-1815a8e16755 + id03a00427-659a-497b-a707-d4a650f5a7f6 + id70bea102-329a-480d-9ec0-6a6f42801739 + + + id40531792-b54c-4ec2-ab8d-91c1b53dd412 + id6c51fee8-fb06-48fb-aa20-74a7bbab0217 + id588b0c2e-028a-4171-a096-3f917467a1a9 + + + idf5b75ed7-a72e-4b71-9a84-7bc150176d71 + id2408c349-8781-45a9-b0b5-a7758f897707 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/correlation_mining.csv b/pm4py/tests/input_data/correlation_mining.csv new file mode 100644 index 0000000000000000000000000000000000000000..94b53e1393fc4cd56b8cb284eb24922de274ea93 --- /dev/null +++ b/pm4py/tests/input_data/correlation_mining.csv @@ -0,0 +1,31 @@ +case:concept:name,concept:name,time:timestamp +1,A,1971-01-01 00:20 +1,B,1971-01-01 02:04 +1,E,1971-01-01 02:32 +2,A,1971-01-01 02:15 +2,D,1971-01-01 03:14 +2,E,1971-01-01 05:06 +3,A,1971-01-01 02:27 +3,D,1971-01-01 04:17 +3,E,1971-01-01 06:51 +4,A,1971-01-01 03:06 +4,B,1971-01-01 05:04 +4,E,1971-01-01 07:26 +5,A,1971-01-01 03:40 +5,B,1971-01-01 05:59 +5,E,1971-01-01 07:49 +6,A,1971-01-01 04:18 +6,C,1971-01-01 07:08 +6,E,1971-01-01 09:05 +7,A,1971-01-01 05:54 +7,C,1971-01-01 07:30 +7,E,1971-01-01 09:17 +8,A,1971-01-01 06:20 +8,D,1971-01-01 08:36 +8,E,1971-01-01 10:03 +9,A,1971-01-01 06:41 +9,D,1971-01-01 08:56 +9,E,1971-01-01 10:20 +10,A,1971-01-01 07:13 +10,C,1971-01-01 09:10 +10,E,1971-01-01 10:26 diff --git a/pm4py/tests/input_data/data_petri_net.pnml b/pm4py/tests/input_data/data_petri_net.pnml new file mode 100644 index 0000000000000000000000000000000000000000..3f65aa3dba133a586bccec3f5c90a1285d21ad53 --- /dev/null +++ b/pm4py/tests/input_data/data_petri_net.pnml @@ -0,0 +1,642 @@ + + + + + + + sink 20 + + + + + + + + + sink 19 + + + + + + + + + sink 22 + + + + + + + + + sink 25 + + + + + + + + + sink 27 + + + + + + + + + sink 29 + + + + + + + + + sink 34 + + + + + + + + + source 18 + + + 1 + + + + + + + + + sink 21 + + + + + + + + + source 23 + + + + + + + + + sink 24 + + + + + + + + + source 26 + + + + + + + + + source 28 + + + + + + + + + source 30 + + + + + + + + + sink 31 + + + + + + + + + sink 32 + + + + + + + + + sink 33 + + + + + + + + + n20 + + + + + + + + + + Add penalty + + + + + + amount + expense + article + points + amount + + + + n24 + + + + + + + + + + n28 + + + + + + + + + + Insert Date Appeal to Prefecture + + + + + + + + + n37 + + + + + + + + + + Send for Credit Collection + + + + + + amount + totalPaymentAmount + + + + n19 + + + + + + + + + + Notify Result Appeal to Offender + + + + + + + + + n22 + + + + + + + + + + Receive Result Appeal from Prefecture + + + + + + + + + Appeal to Judge + + + + + + + + + Payment + + + + + + amount + totalPaymentAmount + + + + Create Fine + + + + + + amount + totalPaymentAmount + article + points + + + + Send Appeal to Prefecture + + + + + + + + + n31 + + + + + + + + + + n21 + + + + + + + + + + n35 + + + + + + + + + + Send Fine + + + + + + expense + + + + Insert Fine Notification + + + + + + amount + expense + + + + n33 + + + + + + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + normal + + + + + + + 1 + + + + + + amount + + + totalPaymentAmount + + + expense + + + article + + + points + + + + diff --git a/pm4py/tests/input_data/db/MIT_LICENSE_Chinook.md b/pm4py/tests/input_data/db/MIT_LICENSE_Chinook.md new file mode 100644 index 0000000000000000000000000000000000000000..59b58939bace30cdc74c30ed5e9a550b4f0657c8 --- /dev/null +++ b/pm4py/tests/input_data/db/MIT_LICENSE_Chinook.md @@ -0,0 +1,11 @@ +Chinook Database +-------------------------------------- +Copyright (c) 2008-2017 Luis Rocha + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/pm4py/tests/input_data/db/MIT_LICENSE_SQLite.md b/pm4py/tests/input_data/db/MIT_LICENSE_SQLite.md new file mode 100644 index 0000000000000000000000000000000000000000..7b784d8b065952c289f6fe51adf74ed780c4d996 --- /dev/null +++ b/pm4py/tests/input_data/db/MIT_LICENSE_SQLite.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 JP White + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pm4py/tests/input_data/db/northwind.sqlite b/pm4py/tests/input_data/db/northwind.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..ab186d95a98f4784c4d105399eab85d9cb237824 --- /dev/null +++ b/pm4py/tests/input_data/db/northwind.sqlite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98a2b8bd66914504f9e77f54539cc999e73a476e6eefde111b163fed58f3bbeb +size 602112 diff --git a/pm4py/tests/input_data/ex1.pnml b/pm4py/tests/input_data/ex1.pnml new file mode 100644 index 0000000000000000000000000000000000000000..47c236cd50fe6ddd2258bc58bbca42ffc69b0eb6 --- /dev/null +++ b/pm4py/tests/input_data/ex1.pnml @@ -0,0 +1,96 @@ + + + + + + + p1 + + + + + p5 + + + + + p2 + + + + + source + + + 1 + + + + + p4 + + + + + sink + + + + + p3 + + + + + p6 + + + + + A + + + + + B + + + + + C + + + + + D + + + + + E + + + + + + + + + + + + + + + + + + + + + 1 + + + + + diff --git a/pm4py/tests/input_data/ex2.pnml b/pm4py/tests/input_data/ex2.pnml new file mode 100644 index 0000000000000000000000000000000000000000..c333e299e06d2519f42896358508112b0b3f9d1c --- /dev/null +++ b/pm4py/tests/input_data/ex2.pnml @@ -0,0 +1,134 @@ + + + + + + + c1 + + + + + c6 + + + + + c2 + + + + + c5 + + + + + source + + + 1 + + + + + c3 + + + + + c4 + + + + + sink + + + + + c7 + + + + + c8 + + + + + Compute Low-value Claim + + + + + Consult Expert + + + + + Set Checkpoint + + + + + Check Liability + + + + + Check Policy + + + + + Set Checkpoint + + + + + Compute High-value Claim + + + + + Register as High-Value Claim + + + + + Register as Low-Value Claim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + diff --git a/pm4py/tests/input_data/fairness/hiring_log_high.xes.gz b/pm4py/tests/input_data/fairness/hiring_log_high.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..172bcacec1841541da42dd1aa76824b31c43995a --- /dev/null +++ b/pm4py/tests/input_data/fairness/hiring_log_high.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8497ca23d4884e79ae0570102991e98884a0149c50a3dfa8ca65de4eb34ae5a +size 964179 diff --git a/pm4py/tests/input_data/fairness/lending_log_high.xes.gz b/pm4py/tests/input_data/fairness/lending_log_high.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..086615fcdc51df17583d352d8b89bc0fe87c8ea6 --- /dev/null +++ b/pm4py/tests/input_data/fairness/lending_log_high.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:077e083e3eba245de8cb86b180c297212e8468875b708e8211396f079f5506b8 +size 994808 diff --git a/pm4py/tests/input_data/helpdesk.xes.gz b/pm4py/tests/input_data/helpdesk.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..4ee6f74c7763ee83e89378023a2e1e530f261b4e --- /dev/null +++ b/pm4py/tests/input_data/helpdesk.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb133a5b70711d523bdbb95279d6bd86d975661ad3d23d23129bfe5121cea453 +size 319499 diff --git a/pm4py/tests/input_data/interleavings/case_relations.csv b/pm4py/tests/input_data/interleavings/case_relations.csv new file mode 100644 index 0000000000000000000000000000000000000000..75e24e808a6d27f7d98847902cc106da8d4f839e --- /dev/null +++ b/pm4py/tests/input_data/interleavings/case_relations.csv @@ -0,0 +1,1319 @@ +case:concept:name_LEFT,case:concept:name_RIGHT +LEFT_case-3987,RIGHT_case-3987 +LEFT_case-10066,RIGHT_case-10066 +LEFT_case-7832,RIGHT_case-7832 +LEFT_case-5036,RIGHT_case-5036 +LEFT_case-4769,RIGHT_case-4769 +LEFT_case-9762,RIGHT_case-9762 +LEFT_case-10350,RIGHT_case-10350 +LEFT_case-4102,RIGHT_case-4102 +LEFT_case-5580,RIGHT_case-5580 +LEFT_case-6667,RIGHT_case-6667 +LEFT_case-5712,RIGHT_case-5712 +LEFT_case-10028,RIGHT_case-10028 +LEFT_case-9337,RIGHT_case-9337 +LEFT_case-9941,RIGHT_case-9941 +LEFT_case-4833,RIGHT_case-4833 +LEFT_case-7119,RIGHT_case-7119 +LEFT_case-4997,RIGHT_case-4997 +LEFT_case-7763,RIGHT_case-7763 +LEFT_case-5245,RIGHT_case-5245 +LEFT_case-6515,RIGHT_case-6515 +LEFT_case-4527,RIGHT_case-4527 +LEFT_case-4601,RIGHT_case-4601 +LEFT_case-7112,RIGHT_case-7112 +LEFT_case-4159,RIGHT_case-4159 +LEFT_case-6862,RIGHT_case-6862 +LEFT_case-6737,RIGHT_case-6737 +LEFT_case-6015,RIGHT_case-6015 +LEFT_case-8079,RIGHT_case-8079 +LEFT_case-8403,RIGHT_case-8403 +LEFT_case-9574,RIGHT_case-9574 +LEFT_case-7256,RIGHT_case-7256 +LEFT_case-10473,RIGHT_case-10473 +LEFT_case-7134,RIGHT_case-7134 +LEFT_case-5286,RIGHT_case-5286 +LEFT_case-6234,RIGHT_case-6234 +LEFT_case-3877,RIGHT_case-3877 +LEFT_case-9793,RIGHT_case-9793 +LEFT_case-5921,RIGHT_case-5921 +LEFT_case-7694,RIGHT_case-7694 +LEFT_case-7497,RIGHT_case-7497 +LEFT_case-9860,RIGHT_case-9860 +LEFT_case-6326,RIGHT_case-6326 +LEFT_case-4995,RIGHT_case-4995 +LEFT_case-4922,RIGHT_case-4922 +LEFT_case-8263,RIGHT_case-8263 +LEFT_case-8017,RIGHT_case-8017 +LEFT_case-5895,RIGHT_case-5895 +LEFT_case-9890,RIGHT_case-9890 +LEFT_case-5121,RIGHT_case-5121 +LEFT_case-7094,RIGHT_case-7094 +LEFT_case-6617,RIGHT_case-6617 +LEFT_case-5021,RIGHT_case-5021 +LEFT_case-4920,RIGHT_case-4920 +LEFT_case-5401,RIGHT_case-5401 +LEFT_case-8138,RIGHT_case-8138 +LEFT_case-10863,RIGHT_case-10863 +LEFT_case-8409,RIGHT_case-8409 +LEFT_case-8461,RIGHT_case-8461 +LEFT_case-8441,RIGHT_case-8441 +LEFT_case-8777,RIGHT_case-8777 +LEFT_case-3995,RIGHT_case-3995 +LEFT_case-7005,RIGHT_case-7005 +LEFT_case-7274,RIGHT_case-7274 +LEFT_case-8199,RIGHT_case-8199 +LEFT_case-6807,RIGHT_case-6807 +LEFT_case-8560,RIGHT_case-8560 +LEFT_case-8421,RIGHT_case-8421 +LEFT_case-9289,RIGHT_case-9289 +LEFT_case-11154,RIGHT_case-11154 +LEFT_case-9904,RIGHT_case-9904 +LEFT_case-4505,RIGHT_case-4505 +LEFT_case-8954,RIGHT_case-8954 +LEFT_case-8784,RIGHT_case-8784 +LEFT_case-7759,RIGHT_case-7759 +LEFT_case-10160,RIGHT_case-10160 +LEFT_case-8770,RIGHT_case-8770 +LEFT_case-4981,RIGHT_case-4981 +LEFT_case-9013,RIGHT_case-9013 +LEFT_case-9897,RIGHT_case-9897 +LEFT_case-4582,RIGHT_case-4582 +LEFT_case-4519,RIGHT_case-4519 +LEFT_case-4437,RIGHT_case-4437 +LEFT_case-10297,RIGHT_case-10297 +LEFT_case-10688,RIGHT_case-10688 +LEFT_case-7665,RIGHT_case-7665 +LEFT_case-10073,RIGHT_case-10073 +LEFT_case-10788,RIGHT_case-10788 +LEFT_case-5351,RIGHT_case-5351 +LEFT_case-4504,RIGHT_case-4504 +LEFT_case-8822,RIGHT_case-8822 +LEFT_case-4973,RIGHT_case-4973 +LEFT_case-4986,RIGHT_case-4986 +LEFT_case-7363,RIGHT_case-7363 +LEFT_case-10499,RIGHT_case-10499 +LEFT_case-4345,RIGHT_case-4345 +LEFT_case-9026,RIGHT_case-9026 +LEFT_case-10198,RIGHT_case-10198 +LEFT_case-6606,RIGHT_case-6606 +LEFT_case-4247,RIGHT_case-4247 +LEFT_case-6495,RIGHT_case-6495 +LEFT_case-9631,RIGHT_case-9631 +LEFT_case-6437,RIGHT_case-6437 +LEFT_case-4175,RIGHT_case-4175 +LEFT_case-7760,RIGHT_case-7760 +LEFT_case-8423,RIGHT_case-8423 +LEFT_case-6790,RIGHT_case-6790 +LEFT_case-8446,RIGHT_case-8446 +LEFT_case-7612,RIGHT_case-7612 +LEFT_case-5275,RIGHT_case-5275 +LEFT_case-6872,RIGHT_case-6872 +LEFT_case-4640,RIGHT_case-4640 +LEFT_case-4498,RIGHT_case-4498 +LEFT_case-5928,RIGHT_case-5928 +LEFT_case-4511,RIGHT_case-4511 +LEFT_case-8467,RIGHT_case-8467 +LEFT_case-4161,RIGHT_case-4161 +LEFT_case-6235,RIGHT_case-6235 +LEFT_case-10025,RIGHT_case-10025 +LEFT_case-4532,RIGHT_case-4532 +LEFT_case-5577,RIGHT_case-5577 +LEFT_case-7469,RIGHT_case-7469 +LEFT_case-10407,RIGHT_case-10407 +LEFT_case-5986,RIGHT_case-5986 +LEFT_case-6279,RIGHT_case-6279 +LEFT_case-8993,RIGHT_case-8993 +LEFT_case-11059,RIGHT_case-11059 +LEFT_case-5299,RIGHT_case-5299 +LEFT_case-10065,RIGHT_case-10065 +LEFT_case-4779,RIGHT_case-4779 +LEFT_case-9373,RIGHT_case-9373 +LEFT_case-4503,RIGHT_case-4503 +LEFT_case-6471,RIGHT_case-6471 +LEFT_case-8399,RIGHT_case-8399 +LEFT_case-6904,RIGHT_case-6904 +LEFT_case-9442,RIGHT_case-9442 +LEFT_case-5657,RIGHT_case-5657 +LEFT_case-5115,RIGHT_case-5115 +LEFT_case-6957,RIGHT_case-6957 +LEFT_case-10410,RIGHT_case-10410 +LEFT_case-6948,RIGHT_case-6948 +LEFT_case-4764,RIGHT_case-4764 +LEFT_case-6055,RIGHT_case-6055 +LEFT_case-7004,RIGHT_case-7004 +LEFT_case-4249,RIGHT_case-4249 +LEFT_case-4512,RIGHT_case-4512 +LEFT_case-5594,RIGHT_case-5594 +LEFT_case-9927,RIGHT_case-9927 +LEFT_case-6145,RIGHT_case-6145 +LEFT_case-11007,RIGHT_case-11007 +LEFT_case-10892,RIGHT_case-10892 +LEFT_case-9545,RIGHT_case-9545 +LEFT_case-4219,RIGHT_case-4219 +LEFT_case-9212,RIGHT_case-9212 +LEFT_case-6671,RIGHT_case-6671 +LEFT_case-8234,RIGHT_case-8234 +LEFT_case-7418,RIGHT_case-7418 +LEFT_case-9032,RIGHT_case-9032 +LEFT_case-7565,RIGHT_case-7565 +LEFT_case-8507,RIGHT_case-8507 +LEFT_case-6804,RIGHT_case-6804 +LEFT_case-4117,RIGHT_case-4117 +LEFT_case-9652,RIGHT_case-9652 +LEFT_case-10218,RIGHT_case-10218 +LEFT_case-5549,RIGHT_case-5549 +LEFT_case-5194,RIGHT_case-5194 +LEFT_case-6950,RIGHT_case-6950 +LEFT_case-8922,RIGHT_case-8922 +LEFT_case-4403,RIGHT_case-4403 +LEFT_case-11058,RIGHT_case-11058 +LEFT_case-7911,RIGHT_case-7911 +LEFT_case-4767,RIGHT_case-4767 +LEFT_case-4100,RIGHT_case-4100 +LEFT_case-7110,RIGHT_case-7110 +LEFT_case-5091,RIGHT_case-5091 +LEFT_case-9232,RIGHT_case-9232 +LEFT_case-5044,RIGHT_case-5044 +LEFT_case-5380,RIGHT_case-5380 +LEFT_case-6383,RIGHT_case-6383 +LEFT_case-5298,RIGHT_case-5298 +LEFT_case-4653,RIGHT_case-4653 +LEFT_case-9088,RIGHT_case-9088 +LEFT_case-10011,RIGHT_case-10011 +LEFT_case-7421,RIGHT_case-7421 +LEFT_case-7314,RIGHT_case-7314 +LEFT_case-10378,RIGHT_case-10378 +LEFT_case-7632,RIGHT_case-7632 +LEFT_case-8786,RIGHT_case-8786 +LEFT_case-8798,RIGHT_case-8798 +LEFT_case-7917,RIGHT_case-7917 +LEFT_case-6787,RIGHT_case-6787 +LEFT_case-8133,RIGHT_case-8133 +LEFT_case-7541,RIGHT_case-7541 +LEFT_case-6319,RIGHT_case-6319 +LEFT_case-5101,RIGHT_case-5101 +LEFT_case-10223,RIGHT_case-10223 +LEFT_case-6212,RIGHT_case-6212 +LEFT_case-10593,RIGHT_case-10593 +LEFT_case-8958,RIGHT_case-8958 +LEFT_case-8342,RIGHT_case-8342 +LEFT_case-10497,RIGHT_case-10497 +LEFT_case-4902,RIGHT_case-4902 +LEFT_case-7579,RIGHT_case-7579 +LEFT_case-10101,RIGHT_case-10101 +LEFT_case-5558,RIGHT_case-5558 +LEFT_case-4188,RIGHT_case-4188 +LEFT_case-7685,RIGHT_case-7685 +LEFT_case-4999,RIGHT_case-4999 +LEFT_case-10221,RIGHT_case-10221 +LEFT_case-5559,RIGHT_case-5559 +LEFT_case-6149,RIGHT_case-6149 +LEFT_case-4903,RIGHT_case-4903 +LEFT_case-10971,RIGHT_case-10971 +LEFT_case-10598,RIGHT_case-10598 +LEFT_case-8776,RIGHT_case-8776 +LEFT_case-9955,RIGHT_case-9955 +LEFT_case-4834,RIGHT_case-4834 +LEFT_case-4057,RIGHT_case-4057 +LEFT_case-5311,RIGHT_case-5311 +LEFT_case-8796,RIGHT_case-8796 +LEFT_case-5534,RIGHT_case-5534 +LEFT_case-7269,RIGHT_case-7269 +LEFT_case-5959,RIGHT_case-5959 +LEFT_case-11096,RIGHT_case-11096 +LEFT_case-9928,RIGHT_case-9928 +LEFT_case-4186,RIGHT_case-4186 +LEFT_case-6034,RIGHT_case-6034 +LEFT_case-10623,RIGHT_case-10623 +LEFT_case-3998,RIGHT_case-3998 +LEFT_case-4927,RIGHT_case-4927 +LEFT_case-8179,RIGHT_case-8179 +LEFT_case-4924,RIGHT_case-4924 +LEFT_case-4346,RIGHT_case-4346 +LEFT_case-6084,RIGHT_case-6084 +LEFT_case-6517,RIGHT_case-6517 +LEFT_case-10061,RIGHT_case-10061 +LEFT_case-8018,RIGHT_case-8018 +LEFT_case-7908,RIGHT_case-7908 +LEFT_case-10017,RIGHT_case-10017 +LEFT_case-6498,RIGHT_case-6498 +LEFT_case-7915,RIGHT_case-7915 +LEFT_case-5247,RIGHT_case-5247 +LEFT_case-9870,RIGHT_case-9870 +LEFT_case-4806,RIGHT_case-4806 +LEFT_case-9923,RIGHT_case-9923 +LEFT_case-5504,RIGHT_case-5504 +LEFT_case-5870,RIGHT_case-5870 +LEFT_case-9430,RIGHT_case-9430 +LEFT_case-8425,RIGHT_case-8425 +LEFT_case-5983,RIGHT_case-5983 +LEFT_case-8012,RIGHT_case-8012 +LEFT_case-5288,RIGHT_case-5288 +LEFT_case-6650,RIGHT_case-6650 +LEFT_case-6672,RIGHT_case-6672 +LEFT_case-5503,RIGHT_case-5503 +LEFT_case-6785,RIGHT_case-6785 +LEFT_case-5646,RIGHT_case-5646 +LEFT_case-10147,RIGHT_case-10147 +LEFT_case-5566,RIGHT_case-5566 +LEFT_case-6320,RIGHT_case-6320 +LEFT_case-8458,RIGHT_case-8458 +LEFT_case-8136,RIGHT_case-8136 +LEFT_case-4923,RIGHT_case-4923 +LEFT_case-8989,RIGHT_case-8989 +LEFT_case-4762,RIGHT_case-4762 +LEFT_case-5190,RIGHT_case-5190 +LEFT_case-4980,RIGHT_case-4980 +LEFT_case-7093,RIGHT_case-7093 +LEFT_case-5557,RIGHT_case-5557 +LEFT_case-9697,RIGHT_case-9697 +LEFT_case-5684,RIGHT_case-5684 +LEFT_case-6655,RIGHT_case-6655 +LEFT_case-8020,RIGHT_case-8020 +LEFT_case-11080,RIGHT_case-11080 +LEFT_case-5767,RIGHT_case-5767 +LEFT_case-9206,RIGHT_case-9206 +LEFT_case-7761,RIGHT_case-7761 +LEFT_case-4998,RIGHT_case-4998 +LEFT_case-3983,RIGHT_case-3983 +LEFT_case-8785,RIGHT_case-8785 +LEFT_case-4513,RIGHT_case-4513 +LEFT_case-7961,RIGHT_case-7961 +LEFT_case-6036,RIGHT_case-6036 +LEFT_case-9892,RIGHT_case-9892 +LEFT_case-5120,RIGHT_case-5120 +LEFT_case-6322,RIGHT_case-6322 +LEFT_case-6262,RIGHT_case-6262 +LEFT_case-5297,RIGHT_case-5297 +LEFT_case-5382,RIGHT_case-5382 +LEFT_case-5660,RIGHT_case-5660 +LEFT_case-10299,RIGHT_case-10299 +LEFT_case-3989,RIGHT_case-3989 +LEFT_case-6711,RIGHT_case-6711 +LEFT_case-7980,RIGHT_case-7980 +LEFT_case-6407,RIGHT_case-6407 +LEFT_case-6012,RIGHT_case-6012 +LEFT_case-4146,RIGHT_case-4146 +LEFT_case-8844,RIGHT_case-8844 +LEFT_case-6347,RIGHT_case-6347 +LEFT_case-9226,RIGHT_case-9226 +LEFT_case-8385,RIGHT_case-8385 +LEFT_case-5554,RIGHT_case-5554 +LEFT_case-6297,RIGHT_case-6297 +LEFT_case-11427,RIGHT_case-11427 +LEFT_case-8264,RIGHT_case-8264 +LEFT_case-7364,RIGHT_case-7364 +LEFT_case-9528,RIGHT_case-9528 +LEFT_case-7683,RIGHT_case-7683 +LEFT_case-8728,RIGHT_case-8728 +LEFT_case-8259,RIGHT_case-8259 +LEFT_case-10583,RIGHT_case-10583 +LEFT_case-9885,RIGHT_case-9885 +LEFT_case-7907,RIGHT_case-7907 +LEFT_case-6080,RIGHT_case-6080 +LEFT_case-6512,RIGHT_case-6512 +LEFT_case-6969,RIGHT_case-6969 +LEFT_case-5956,RIGHT_case-5956 +LEFT_case-6217,RIGHT_case-6217 +LEFT_case-5548,RIGHT_case-5548 +LEFT_case-4946,RIGHT_case-4946 +LEFT_case-4898,RIGHT_case-4898 +LEFT_case-7563,RIGHT_case-7563 +LEFT_case-9948,RIGHT_case-9948 +LEFT_case-6902,RIGHT_case-6902 +LEFT_case-7443,RIGHT_case-7443 +LEFT_case-4976,RIGHT_case-4976 +LEFT_case-9946,RIGHT_case-9946 +LEFT_case-4144,RIGHT_case-4144 +LEFT_case-8420,RIGHT_case-8420 +LEFT_case-6631,RIGHT_case-6631 +LEFT_case-10858,RIGHT_case-10858 +LEFT_case-10814,RIGHT_case-10814 +LEFT_case-4678,RIGHT_case-4678 +LEFT_case-4778,RIGHT_case-4778 +LEFT_case-6995,RIGHT_case-6995 +LEFT_case-7016,RIGHT_case-7016 +LEFT_case-6865,RIGHT_case-6865 +LEFT_case-5573,RIGHT_case-5573 +LEFT_case-9752,RIGHT_case-9752 +LEFT_case-4185,RIGHT_case-4185 +LEFT_case-10576,RIGHT_case-10576 +LEFT_case-10463,RIGHT_case-10463 +LEFT_case-8550,RIGHT_case-8550 +LEFT_case-4187,RIGHT_case-4187 +LEFT_case-7341,RIGHT_case-7341 +LEFT_case-9376,RIGHT_case-9376 +LEFT_case-8448,RIGHT_case-8448 +LEFT_case-4017,RIGHT_case-4017 +LEFT_case-8016,RIGHT_case-8016 +LEFT_case-7178,RIGHT_case-7178 +LEFT_case-7053,RIGHT_case-7053 +LEFT_case-6996,RIGHT_case-6996 +LEFT_case-9934,RIGHT_case-9934 +LEFT_case-7117,RIGHT_case-7117 +LEFT_case-4410,RIGHT_case-4410 +LEFT_case-5714,RIGHT_case-5714 +LEFT_case-5405,RIGHT_case-5405 +LEFT_case-10765,RIGHT_case-10765 +LEFT_case-8734,RIGHT_case-8734 +LEFT_case-7085,RIGHT_case-7085 +LEFT_case-5381,RIGHT_case-5381 +LEFT_case-7558,RIGHT_case-7558 +LEFT_case-4666,RIGHT_case-4666 +LEFT_case-6516,RIGHT_case-6516 +LEFT_case-4534,RIGHT_case-4534 +LEFT_case-6241,RIGHT_case-6241 +LEFT_case-9417,RIGHT_case-9417 +LEFT_case-4555,RIGHT_case-4555 +LEFT_case-7268,RIGHT_case-7268 +LEFT_case-7700,RIGHT_case-7700 +LEFT_case-4827,RIGHT_case-4827 +LEFT_case-10263,RIGHT_case-10263 +LEFT_case-10856,RIGHT_case-10856 +LEFT_case-7690,RIGHT_case-7690 +LEFT_case-6786,RIGHT_case-6786 +LEFT_case-7978,RIGHT_case-7978 +LEFT_case-7132,RIGHT_case-7132 +LEFT_case-8297,RIGHT_case-8297 +LEFT_case-6544,RIGHT_case-6544 +LEFT_case-9415,RIGHT_case-9415 +LEFT_case-7000,RIGHT_case-7000 +LEFT_case-6757,RIGHT_case-6757 +LEFT_case-7693,RIGHT_case-7693 +LEFT_case-4589,RIGHT_case-4589 +LEFT_case-8962,RIGHT_case-8962 +LEFT_case-8863,RIGHT_case-8863 +LEFT_case-6078,RIGHT_case-6078 +LEFT_case-4059,RIGHT_case-4059 +LEFT_case-4969,RIGHT_case-4969 +LEFT_case-11473,RIGHT_case-11473 +LEFT_case-9228,RIGHT_case-9228 +LEFT_case-4344,RIGHT_case-4344 +LEFT_case-4837,RIGHT_case-4837 +LEFT_case-7442,RIGHT_case-7442 +LEFT_case-9366,RIGHT_case-9366 +LEFT_case-7755,RIGHT_case-7755 +LEFT_case-10854,RIGHT_case-10854 +LEFT_case-9653,RIGHT_case-9653 +LEFT_case-4537,RIGHT_case-4537 +LEFT_case-5010,RIGHT_case-5010 +LEFT_case-6982,RIGHT_case-6982 +LEFT_case-4243,RIGHT_case-4243 +LEFT_case-7120,RIGHT_case-7120 +LEFT_case-7089,RIGHT_case-7089 +LEFT_case-9894,RIGHT_case-9894 +LEFT_case-8833,RIGHT_case-8833 +LEFT_case-11437,RIGHT_case-11437 +LEFT_case-4565,RIGHT_case-4565 +LEFT_case-7568,RIGHT_case-7568 +LEFT_case-9884,RIGHT_case-9884 +LEFT_case-4586,RIGHT_case-4586 +LEFT_case-10183,RIGHT_case-10183 +LEFT_case-9067,RIGHT_case-9067 +LEFT_case-6390,RIGHT_case-6390 +LEFT_case-5099,RIGHT_case-5099 +LEFT_case-4328,RIGHT_case-4328 +LEFT_case-8645,RIGHT_case-8645 +LEFT_case-5942,RIGHT_case-5942 +LEFT_case-9395,RIGHT_case-9395 +LEFT_case-6504,RIGHT_case-6504 +LEFT_case-5045,RIGHT_case-5045 +LEFT_case-7264,RIGHT_case-7264 +LEFT_case-7192,RIGHT_case-7192 +LEFT_case-10551,RIGHT_case-10551 +LEFT_case-3756,RIGHT_case-3756 +LEFT_case-5185,RIGHT_case-5185 +LEFT_case-6545,RIGHT_case-6545 +LEFT_case-10675,RIGHT_case-10675 +LEFT_case-5761,RIGHT_case-5761 +LEFT_case-6644,RIGHT_case-6644 +LEFT_case-10089,RIGHT_case-10089 +LEFT_case-3984,RIGHT_case-3984 +LEFT_case-7976,RIGHT_case-7976 +LEFT_case-4781,RIGHT_case-4781 +LEFT_case-4516,RIGHT_case-4516 +LEFT_case-5406,RIGHT_case-5406 +LEFT_case-4944,RIGHT_case-4944 +LEFT_case-6709,RIGHT_case-6709 +LEFT_case-11006,RIGHT_case-11006 +LEFT_case-4414,RIGHT_case-4414 +LEFT_case-4598,RIGHT_case-4598 +LEFT_case-4526,RIGHT_case-4526 +LEFT_case-4060,RIGHT_case-4060 +LEFT_case-4546,RIGHT_case-4546 +LEFT_case-4623,RIGHT_case-4623 +LEFT_case-9919,RIGHT_case-9919 +LEFT_case-5704,RIGHT_case-5704 +LEFT_case-6739,RIGHT_case-6739 +LEFT_case-4941,RIGHT_case-4941 +LEFT_case-4518,RIGHT_case-4518 +LEFT_case-10541,RIGHT_case-10541 +LEFT_case-8983,RIGHT_case-8983 +LEFT_case-5024,RIGHT_case-5024 +LEFT_case-8969,RIGHT_case-8969 +LEFT_case-4954,RIGHT_case-4954 +LEFT_case-4021,RIGHT_case-4021 +LEFT_case-9929,RIGHT_case-9929 +LEFT_case-6411,RIGHT_case-6411 +LEFT_case-6710,RIGHT_case-6710 +LEFT_case-3927,RIGHT_case-3927 +LEFT_case-8015,RIGHT_case-8015 +LEFT_case-8652,RIGHT_case-8652 +LEFT_case-4619,RIGHT_case-4619 +LEFT_case-9626,RIGHT_case-9626 +LEFT_case-6542,RIGHT_case-6542 +LEFT_case-8710,RIGHT_case-8710 +LEFT_case-9271,RIGHT_case-9271 +LEFT_case-5521,RIGHT_case-5521 +LEFT_case-9557,RIGHT_case-9557 +LEFT_case-5397,RIGHT_case-5397 +LEFT_case-6782,RIGHT_case-6782 +LEFT_case-8500,RIGHT_case-8500 +LEFT_case-5686,RIGHT_case-5686 +LEFT_case-10138,RIGHT_case-10138 +LEFT_case-7631,RIGHT_case-7631 +LEFT_case-9670,RIGHT_case-9670 +LEFT_case-4158,RIGHT_case-4158 +LEFT_case-5372,RIGHT_case-5372 +LEFT_case-8639,RIGHT_case-8639 +LEFT_case-6684,RIGHT_case-6684 +LEFT_case-10509,RIGHT_case-10509 +LEFT_case-6585,RIGHT_case-6585 +LEFT_case-10757,RIGHT_case-10757 +LEFT_case-8083,RIGHT_case-8083 +LEFT_case-7349,RIGHT_case-7349 +LEFT_case-5520,RIGHT_case-5520 +LEFT_case-7310,RIGHT_case-7310 +LEFT_case-10127,RIGHT_case-10127 +LEFT_case-8656,RIGHT_case-8656 +LEFT_case-5113,RIGHT_case-5113 +LEFT_case-8081,RIGHT_case-8081 +LEFT_case-8775,RIGHT_case-8775 +LEFT_case-4000,RIGHT_case-4000 +LEFT_case-9794,RIGHT_case-9794 +LEFT_case-6381,RIGHT_case-6381 +LEFT_case-6993,RIGHT_case-6993 +LEFT_case-10164,RIGHT_case-10164 +LEFT_case-10502,RIGHT_case-10502 +LEFT_case-7079,RIGHT_case-7079 +LEFT_case-4500,RIGHT_case-4500 +LEFT_case-10600,RIGHT_case-10600 +LEFT_case-11268,RIGHT_case-11268 +LEFT_case-3879,RIGHT_case-3879 +LEFT_case-5418,RIGHT_case-5418 +LEFT_case-7918,RIGHT_case-7918 +LEFT_case-5250,RIGHT_case-5250 +LEFT_case-8456,RIGHT_case-8456 +LEFT_case-8511,RIGHT_case-8511 +LEFT_case-5546,RIGHT_case-5546 +LEFT_case-6166,RIGHT_case-6166 +LEFT_case-5878,RIGHT_case-5878 +LEFT_case-4396,RIGHT_case-4396 +LEFT_case-6339,RIGHT_case-6339 +LEFT_case-7566,RIGHT_case-7566 +LEFT_case-3988,RIGHT_case-3988 +LEFT_case-6169,RIGHT_case-6169 +LEFT_case-10810,RIGHT_case-10810 +LEFT_case-6388,RIGHT_case-6388 +LEFT_case-10326,RIGHT_case-10326 +LEFT_case-4892,RIGHT_case-4892 +LEFT_case-8131,RIGHT_case-8131 +LEFT_case-10067,RIGHT_case-10067 +LEFT_case-4084,RIGHT_case-4084 +LEFT_case-8444,RIGHT_case-8444 +LEFT_case-9165,RIGHT_case-9165 +LEFT_case-8135,RIGHT_case-8135 +LEFT_case-10661,RIGHT_case-10661 +LEFT_case-3997,RIGHT_case-3997 +LEFT_case-5952,RIGHT_case-5952 +LEFT_case-3766,RIGHT_case-3766 +LEFT_case-4384,RIGHT_case-4384 +LEFT_case-6258,RIGHT_case-6258 +LEFT_case-10071,RIGHT_case-10071 +LEFT_case-6654,RIGHT_case-6654 +LEFT_case-6209,RIGHT_case-6209 +LEFT_case-10749,RIGHT_case-10749 +LEFT_case-5561,RIGHT_case-5561 +LEFT_case-6987,RIGHT_case-6987 +LEFT_case-7416,RIGHT_case-7416 +LEFT_case-10068,RIGHT_case-10068 +LEFT_case-9554,RIGHT_case-9554 +LEFT_case-7043,RIGHT_case-7043 +LEFT_case-5301,RIGHT_case-5301 +LEFT_case-10099,RIGHT_case-10099 +LEFT_case-4773,RIGHT_case-4773 +LEFT_case-9413,RIGHT_case-9413 +LEFT_case-3926,RIGHT_case-3926 +LEFT_case-9078,RIGHT_case-9078 +LEFT_case-7080,RIGHT_case-7080 +LEFT_case-4901,RIGHT_case-4901 +LEFT_case-6226,RIGHT_case-6226 +LEFT_case-4255,RIGHT_case-4255 +LEFT_case-9133,RIGHT_case-9133 +LEFT_case-9438,RIGHT_case-9438 +LEFT_case-4930,RIGHT_case-4930 +LEFT_case-9011,RIGHT_case-9011 +LEFT_case-6387,RIGHT_case-6387 +LEFT_case-7426,RIGHT_case-7426 +LEFT_case-6953,RIGHT_case-6953 +LEFT_case-8014,RIGHT_case-8014 +LEFT_case-7266,RIGHT_case-7266 +LEFT_case-4763,RIGHT_case-4763 +LEFT_case-8839,RIGHT_case-8839 +LEFT_case-7757,RIGHT_case-7757 +LEFT_case-6748,RIGHT_case-6748 +LEFT_case-8754,RIGHT_case-8754 +LEFT_case-9213,RIGHT_case-9213 +LEFT_case-4895,RIGHT_case-4895 +LEFT_case-8849,RIGHT_case-8849 +LEFT_case-6681,RIGHT_case-6681 +LEFT_case-6612,RIGHT_case-6612 +LEFT_case-5750,RIGHT_case-5750 +LEFT_case-4832,RIGHT_case-4832 +LEFT_case-9563,RIGHT_case-9563 +LEFT_case-8653,RIGHT_case-8653 +LEFT_case-4149,RIGHT_case-4149 +LEFT_case-8855,RIGHT_case-8855 +LEFT_case-5517,RIGHT_case-5517 +LEFT_case-9016,RIGHT_case-9016 +LEFT_case-8410,RIGHT_case-8410 +LEFT_case-9411,RIGHT_case-9411 +LEFT_case-9925,RIGHT_case-9925 +LEFT_case-10375,RIGHT_case-10375 +LEFT_case-9839,RIGHT_case-9839 +LEFT_case-7905,RIGHT_case-7905 +LEFT_case-10159,RIGHT_case-10159 +LEFT_case-8424,RIGHT_case-8424 +LEFT_case-5653,RIGHT_case-5653 +LEFT_case-6140,RIGHT_case-6140 +LEFT_case-8746,RIGHT_case-8746 +LEFT_case-10514,RIGHT_case-10514 +LEFT_case-6130,RIGHT_case-6130 +LEFT_case-6475,RIGHT_case-6475 +LEFT_case-8967,RIGHT_case-8967 +LEFT_case-5879,RIGHT_case-5879 +LEFT_case-8265,RIGHT_case-8265 +LEFT_case-8778,RIGHT_case-8778 +LEFT_case-4955,RIGHT_case-4955 +LEFT_case-7194,RIGHT_case-7194 +LEFT_case-9701,RIGHT_case-9701 +LEFT_case-9916,RIGHT_case-9916 +LEFT_case-4683,RIGHT_case-4683 +LEFT_case-8964,RIGHT_case-8964 +LEFT_case-7628,RIGHT_case-7628 +LEFT_case-7990,RIGHT_case-7990 +LEFT_case-7953,RIGHT_case-7953 +LEFT_case-10384,RIGHT_case-10384 +LEFT_case-7923,RIGHT_case-7923 +LEFT_case-9270,RIGHT_case-9270 +LEFT_case-8388,RIGHT_case-8388 +LEFT_case-9172,RIGHT_case-9172 +LEFT_case-5040,RIGHT_case-5040 +LEFT_case-5135,RIGHT_case-5135 +LEFT_case-7045,RIGHT_case-7045 +LEFT_case-7047,RIGHT_case-7047 +LEFT_case-6379,RIGHT_case-6379 +LEFT_case-6747,RIGHT_case-6747 +LEFT_case-9407,RIGHT_case-9407 +LEFT_case-4063,RIGHT_case-4063 +LEFT_case-7052,RIGHT_case-7052 +LEFT_case-8802,RIGHT_case-8802 +LEFT_case-8401,RIGHT_case-8401 +LEFT_case-8923,RIGHT_case-8923 +LEFT_case-9700,RIGHT_case-9700 +LEFT_case-9986,RIGHT_case-9986 +LEFT_case-6678,RIGHT_case-6678 +LEFT_case-9778,RIGHT_case-9778 +LEFT_case-5141,RIGHT_case-5141 +LEFT_case-7058,RIGHT_case-7058 +LEFT_case-5043,RIGHT_case-5043 +LEFT_case-5133,RIGHT_case-5133 +LEFT_case-4639,RIGHT_case-4639 +LEFT_case-5137,RIGHT_case-5137 +LEFT_case-6749,RIGHT_case-6749 +LEFT_case-9804,RIGHT_case-9804 +LEFT_case-11129,RIGHT_case-11129 +LEFT_case-9281,RIGHT_case-9281 +LEFT_case-6345,RIGHT_case-6345 +LEFT_case-8068,RIGHT_case-8068 +LEFT_case-8102,RIGHT_case-8102 +LEFT_case-9014,RIGHT_case-9014 +LEFT_case-6988,RIGHT_case-6988 +LEFT_case-9932,RIGHT_case-9932 +LEFT_case-6375,RIGHT_case-6375 +LEFT_case-10498,RIGHT_case-10498 +LEFT_case-4014,RIGHT_case-4014 +LEFT_case-7981,RIGHT_case-7981 +LEFT_case-8390,RIGHT_case-8390 +LEFT_case-9012,RIGHT_case-9012 +LEFT_case-4900,RIGHT_case-4900 +LEFT_case-9926,RIGHT_case-9926 +LEFT_case-8654,RIGHT_case-8654 +LEFT_case-4896,RIGHT_case-4896 +LEFT_case-10550,RIGHT_case-10550 +LEFT_case-6032,RIGHT_case-6032 +LEFT_case-6438,RIGHT_case-6438 +LEFT_case-8365,RIGHT_case-8365 +LEFT_case-4897,RIGHT_case-4897 +LEFT_case-7091,RIGHT_case-7091 +LEFT_case-5737,RIGHT_case-5737 +LEFT_case-6540,RIGHT_case-6540 +LEFT_case-10670,RIGHT_case-10670 +LEFT_case-11115,RIGHT_case-11115 +LEFT_case-4975,RIGHT_case-4975 +LEFT_case-9075,RIGHT_case-9075 +LEFT_case-8363,RIGHT_case-8363 +LEFT_case-5923,RIGHT_case-5923 +LEFT_case-4926,RIGHT_case-4926 +LEFT_case-7814,RIGHT_case-7814 +LEFT_case-10890,RIGHT_case-10890 +LEFT_case-6838,RIGHT_case-6838 +LEFT_case-9295,RIGHT_case-9295 +LEFT_case-8137,RIGHT_case-8137 +LEFT_case-4891,RIGHT_case-4891 +LEFT_case-6537,RIGHT_case-6537 +LEFT_case-8323,RIGHT_case-8323 +LEFT_case-7584,RIGHT_case-7584 +LEFT_case-9203,RIGHT_case-9203 +LEFT_case-4587,RIGHT_case-4587 +LEFT_case-9494,RIGHT_case-9494 +LEFT_case-7233,RIGHT_case-7233 +LEFT_case-7686,RIGHT_case-7686 +LEFT_case-5961,RIGHT_case-5961 +LEFT_case-8551,RIGHT_case-8551 +LEFT_case-9711,RIGHT_case-9711 +LEFT_case-8381,RIGHT_case-8381 +LEFT_case-9969,RIGHT_case-9969 +LEFT_case-5535,RIGHT_case-5535 +LEFT_case-5155,RIGHT_case-5155 +LEFT_case-4765,RIGHT_case-4765 +LEFT_case-4208,RIGHT_case-4208 +LEFT_case-8841,RIGHT_case-8841 +LEFT_case-6171,RIGHT_case-6171 +LEFT_case-7129,RIGHT_case-7129 +LEFT_case-7187,RIGHT_case-7187 +LEFT_case-5540,RIGHT_case-5540 +LEFT_case-5533,RIGHT_case-5533 +LEFT_case-7175,RIGHT_case-7175 +LEFT_case-6216,RIGHT_case-6216 +LEFT_case-5457,RIGHT_case-5457 +LEFT_case-4251,RIGHT_case-4251 +LEFT_case-6848,RIGHT_case-6848 +LEFT_case-10671,RIGHT_case-10671 +LEFT_case-6668,RIGHT_case-6668 +LEFT_case-7320,RIGHT_case-7320 +LEFT_case-4279,RIGHT_case-4279 +LEFT_case-8921,RIGHT_case-8921 +LEFT_case-10289,RIGHT_case-10289 +LEFT_case-9947,RIGHT_case-9947 +LEFT_case-8852,RIGHT_case-8852 +LEFT_case-7189,RIGHT_case-7189 +LEFT_case-5530,RIGHT_case-5530 +LEFT_case-6056,RIGHT_case-6056 +LEFT_case-6653,RIGHT_case-6653 +LEFT_case-6385,RIGHT_case-6385 +LEFT_case-7912,RIGHT_case-7912 +LEFT_case-11378,RIGHT_case-11378 +LEFT_case-8047,RIGHT_case-8047 +LEFT_case-9920,RIGHT_case-9920 +LEFT_case-7556,RIGHT_case-7556 +LEFT_case-10489,RIGHT_case-10489 +LEFT_case-7270,RIGHT_case-7270 +LEFT_case-5273,RIGHT_case-5273 +LEFT_case-10669,RIGHT_case-10669 +LEFT_case-4654,RIGHT_case-4654 +LEFT_case-9777,RIGHT_case-9777 +LEFT_case-9040,RIGHT_case-9040 +LEFT_case-4540,RIGHT_case-4540 +LEFT_case-10232,RIGHT_case-10232 +LEFT_case-4563,RIGHT_case-4563 +LEFT_case-10592,RIGHT_case-10592 +LEFT_case-10517,RIGHT_case-10517 +LEFT_case-4766,RIGHT_case-4766 +LEFT_case-10324,RIGHT_case-10324 +LEFT_case-10090,RIGHT_case-10090 +LEFT_case-5146,RIGHT_case-5146 +LEFT_case-4274,RIGHT_case-4274 +LEFT_case-6997,RIGHT_case-6997 +LEFT_case-10511,RIGHT_case-10511 +LEFT_case-9887,RIGHT_case-9887 +LEFT_case-10646,RIGHT_case-10646 +LEFT_case-709,RIGHT_case-709 +LEFT_case-6146,RIGHT_case-6146 +LEFT_case-10461,RIGHT_case-10461 +LEFT_case-9199,RIGHT_case-9199 +LEFT_case-8842,RIGHT_case-8842 +LEFT_case-4413,RIGHT_case-4413 +LEFT_case-6335,RIGHT_case-6335 +LEFT_case-9532,RIGHT_case-9532 +LEFT_case-7272,RIGHT_case-7272 +LEFT_case-4027,RIGHT_case-4027 +LEFT_case-5683,RIGHT_case-5683 +LEFT_case-5531,RIGHT_case-5531 +LEFT_case-10196,RIGHT_case-10196 +LEFT_case-4010,RIGHT_case-4010 +LEFT_case-5769,RIGHT_case-5769 +LEFT_case-7523,RIGHT_case-7523 +LEFT_case-4632,RIGHT_case-4632 +LEFT_case-10072,RIGHT_case-10072 +LEFT_case-5536,RIGHT_case-5536 +LEFT_case-6496,RIGHT_case-6496 +LEFT_case-5378,RIGHT_case-5378 +LEFT_case-7503,RIGHT_case-7503 +LEFT_case-8183,RIGHT_case-8183 +LEFT_case-10098,RIGHT_case-10098 +LEFT_case-10220,RIGHT_case-10220 +LEFT_case-4533,RIGHT_case-4533 +LEFT_case-9394,RIGHT_case-9394 +LEFT_case-9759,RIGHT_case-9759 +LEFT_case-9290,RIGHT_case-9290 +LEFT_case-8646,RIGHT_case-8646 +LEFT_case-7960,RIGHT_case-7960 +LEFT_case-8082,RIGHT_case-8082 +LEFT_case-10199,RIGHT_case-10199 +LEFT_case-10474,RIGHT_case-10474 +LEFT_case-10864,RIGHT_case-10864 +LEFT_case-9943,RIGHT_case-9943 +LEFT_case-6417,RIGHT_case-6417 +LEFT_case-9786,RIGHT_case-9786 +LEFT_case-6363,RIGHT_case-6363 +LEFT_case-6168,RIGHT_case-6168 +LEFT_case-9331,RIGHT_case-9331 +LEFT_case-4811,RIGHT_case-4811 +LEFT_case-6315,RIGHT_case-6315 +LEFT_case-5287,RIGHT_case-5287 +LEFT_case-4013,RIGHT_case-4013 +LEFT_case-4605,RIGHT_case-4605 +LEFT_case-6068,RIGHT_case-6068 +LEFT_case-7197,RIGHT_case-7197 +LEFT_case-6662,RIGHT_case-6662 +LEFT_case-10484,RIGHT_case-10484 +LEFT_case-6715,RIGHT_case-6715 +LEFT_case-7358,RIGHT_case-7358 +LEFT_case-10357,RIGHT_case-10357 +LEFT_case-5749,RIGHT_case-5749 +LEFT_case-8501,RIGHT_case-8501 +LEFT_case-6141,RIGHT_case-6141 +LEFT_case-5875,RIGHT_case-5875 +LEFT_case-10070,RIGHT_case-10070 +LEFT_case-10799,RIGHT_case-10799 +LEFT_case-7699,RIGHT_case-7699 +LEFT_case-10059,RIGHT_case-10059 +LEFT_case-8021,RIGHT_case-8021 +LEFT_case-10464,RIGHT_case-10464 +LEFT_case-5748,RIGHT_case-5748 +LEFT_case-9722,RIGHT_case-9722 +LEFT_case-10336,RIGHT_case-10336 +LEFT_case-10662,RIGHT_case-10662 +LEFT_case-9767,RIGHT_case-9767 +LEFT_case-5109,RIGHT_case-5109 +LEFT_case-9542,RIGHT_case-9542 +LEFT_case-5877,RIGHT_case-5877 +LEFT_case-5997,RIGHT_case-5997 +LEFT_case-5289,RIGHT_case-5289 +LEFT_case-9368,RIGHT_case-9368 +LEFT_case-891,RIGHT_case-891 +LEFT_case-10512,RIGHT_case-10512 +LEFT_case-4081,RIGHT_case-4081 +LEFT_case-6386,RIGHT_case-6386 +LEFT_case-10300,RIGHT_case-10300 +LEFT_case-4656,RIGHT_case-4656 +LEFT_case-10483,RIGHT_case-10483 +LEFT_case-5919,RIGHT_case-5919 +LEFT_case-8408,RIGHT_case-8408 +LEFT_case-10105,RIGHT_case-10105 +LEFT_case-7083,RIGHT_case-7083 +LEFT_case-8261,RIGHT_case-8261 +LEFT_case-9796,RIGHT_case-9796 +LEFT_case-8858,RIGHT_case-8858 +LEFT_case-9370,RIGHT_case-9370 +LEFT_case-4809,RIGHT_case-4809 +LEFT_case-10146,RIGHT_case-10146 +LEFT_case-8864,RIGHT_case-8864 +LEFT_case-8093,RIGHT_case-8093 +LEFT_case-4147,RIGHT_case-4147 +LEFT_case-10663,RIGHT_case-10663 +LEFT_case-10951,RIGHT_case-10951 +LEFT_case-4777,RIGHT_case-4777 +LEFT_case-10202,RIGHT_case-10202 +LEFT_case-6113,RIGHT_case-6113 +LEFT_case-8320,RIGHT_case-8320 +LEFT_case-9544,RIGHT_case-9544 +LEFT_case-7535,RIGHT_case-7535 +LEFT_case-9970,RIGHT_case-9970 +LEFT_case-4111,RIGHT_case-4111 +LEFT_case-7750,RIGHT_case-7750 +LEFT_case-4380,RIGHT_case-4380 +LEFT_case-8398,RIGHT_case-8398 +LEFT_case-8853,RIGHT_case-8853 +LEFT_case-4943,RIGHT_case-4943 +LEFT_case-9758,RIGHT_case-9758 +LEFT_case-5532,RIGHT_case-5532 +LEFT_case-6413,RIGHT_case-6413 +LEFT_case-7273,RIGHT_case-7273 +LEFT_case-9710,RIGHT_case-9710 +LEFT_case-4758,RIGHT_case-4758 +LEFT_case-4774,RIGHT_case-4774 +LEFT_case-6541,RIGHT_case-6541 +LEFT_case-10624,RIGHT_case-10624 +LEFT_case-4317,RIGHT_case-4317 +LEFT_case-6153,RIGHT_case-6153 +LEFT_case-6389,RIGHT_case-6389 +LEFT_case-10855,RIGHT_case-10855 +LEFT_case-8743,RIGHT_case-8743 +LEFT_case-4608,RIGHT_case-4608 +LEFT_case-6900,RIGHT_case-6900 +LEFT_case-7590,RIGHT_case-7590 +LEFT_case-6955,RIGHT_case-6955 +LEFT_case-10352,RIGHT_case-10352 +LEFT_case-4083,RIGHT_case-4083 +LEFT_case-8077,RIGHT_case-8077 +LEFT_case-9207,RIGHT_case-9207 +LEFT_case-4408,RIGHT_case-4408 +LEFT_case-9004,RIGHT_case-9004 +LEFT_case-8504,RIGHT_case-8504 +LEFT_case-10950,RIGHT_case-10950 +LEFT_case-6251,RIGHT_case-6251 +LEFT_case-7131,RIGHT_case-7131 +LEFT_case-5998,RIGHT_case-5998 +LEFT_case-7060,RIGHT_case-7060 +LEFT_case-10763,RIGHT_case-10763 +LEFT_case-4759,RIGHT_case-4759 +LEFT_case-10779,RIGHT_case-10779 +LEFT_case-10460,RIGHT_case-10460 +LEFT_case-5186,RIGHT_case-5186 +LEFT_case-8100,RIGHT_case-8100 +LEFT_case-11458,RIGHT_case-11458 +LEFT_case-5743,RIGHT_case-5743 +LEFT_case-9921,RIGHT_case-9921 +LEFT_case-8321,RIGHT_case-8321 +LEFT_case-11214,RIGHT_case-11214 +LEFT_case-8105,RIGHT_case-8105 +LEFT_case-8812,RIGHT_case-8812 +LEFT_case-6380,RIGHT_case-6380 +LEFT_case-10211,RIGHT_case-10211 +LEFT_case-8503,RIGHT_case-8503 +LEFT_case-8505,RIGHT_case-8505 +LEFT_case-5576,RIGHT_case-5576 +LEFT_case-9635,RIGHT_case-9635 +LEFT_case-7856,RIGHT_case-7856 +LEFT_case-5167,RIGHT_case-5167 +LEFT_case-6712,RIGHT_case-6712 +LEFT_case-10339,RIGHT_case-10339 +LEFT_case-6343,RIGHT_case-6343 +LEFT_case-6009,RIGHT_case-6009 +LEFT_case-5932,RIGHT_case-5932 +LEFT_case-9076,RIGHT_case-9076 +LEFT_case-8823,RIGHT_case-8823 +LEFT_case-6944,RIGHT_case-6944 +LEFT_case-5191,RIGHT_case-5191 +LEFT_case-8502,RIGHT_case-8502 +LEFT_case-8465,RIGHT_case-8465 +LEFT_case-6108,RIGHT_case-6108 +LEFT_case-4641,RIGHT_case-4641 +LEFT_case-9218,RIGHT_case-9218 +LEFT_case-6665,RIGHT_case-6665 +LEFT_case-9624,RIGHT_case-9624 +LEFT_case-6167,RIGHT_case-6167 +LEFT_case-6767,RIGHT_case-6767 +LEFT_case-11517,RIGHT_case-11517 +LEFT_case-9966,RIGHT_case-9966 +LEFT_case-9633,RIGHT_case-9633 +LEFT_case-6246,RIGHT_case-6246 +LEFT_case-7570,RIGHT_case-7570 +LEFT_case-8459,RIGHT_case-8459 +LEFT_case-10103,RIGHT_case-10103 +LEFT_case-6028,RIGHT_case-6028 +LEFT_case-11048,RIGHT_case-11048 +LEFT_case-9721,RIGHT_case-9721 +LEFT_case-4899,RIGHT_case-4899 +LEFT_case-7630,RIGHT_case-7630 +LEFT_case-4509,RIGHT_case-4509 +LEFT_case-5585,RIGHT_case-5585 +LEFT_case-9942,RIGHT_case-9942 +LEFT_case-4395,RIGHT_case-4395 +LEFT_case-6682,RIGHT_case-6682 +LEFT_case-9410,RIGHT_case-9410 +LEFT_case-5254,RIGHT_case-5254 +LEFT_case-6215,RIGHT_case-6215 +LEFT_case-10709,RIGHT_case-10709 +LEFT_case-5529,RIGHT_case-5529 +LEFT_case-10479,RIGHT_case-10479 +LEFT_case-8851,RIGHT_case-8851 +LEFT_case-6415,RIGHT_case-6415 +LEFT_case-5042,RIGHT_case-5042 +LEFT_case-11375,RIGHT_case-11375 +LEFT_case-5196,RIGHT_case-5196 +LEFT_case-4118,RIGHT_case-4118 +LEFT_case-4583,RIGHT_case-4583 +LEFT_case-8142,RIGHT_case-8142 +LEFT_case-6259,RIGHT_case-6259 +LEFT_case-9443,RIGHT_case-9443 +LEFT_case-7012,RIGHT_case-7012 +LEFT_case-7958,RIGHT_case-7958 +LEFT_case-6805,RIGHT_case-6805 +LEFT_case-9972,RIGHT_case-9972 +LEFT_case-10322,RIGHT_case-10322 +LEFT_case-9201,RIGHT_case-9201 +LEFT_case-9967,RIGHT_case-9967 +LEFT_case-6480,RIGHT_case-6480 +LEFT_case-9628,RIGHT_case-9628 +LEFT_case-8419,RIGHT_case-8419 +LEFT_case-6649,RIGHT_case-6649 +LEFT_case-8840,RIGHT_case-8840 +LEFT_case-4025,RIGHT_case-4025 +LEFT_case-4388,RIGHT_case-4388 +LEFT_case-4603,RIGHT_case-4603 +LEFT_case-9336,RIGHT_case-9336 +LEFT_case-4972,RIGHT_case-4972 +LEFT_case-5556,RIGHT_case-5556 +LEFT_case-8782,RIGHT_case-8782 +LEFT_case-7666,RIGHT_case-7666 +LEFT_case-10392,RIGHT_case-10392 +LEFT_case-8318,RIGHT_case-8318 +LEFT_case-10287,RIGHT_case-10287 +LEFT_case-11275,RIGHT_case-11275 +LEFT_case-7477,RIGHT_case-7477 +LEFT_case-4058,RIGHT_case-4058 +LEFT_case-10575,RIGHT_case-10575 +LEFT_case-6366,RIGHT_case-6366 +LEFT_case-4020,RIGHT_case-4020 +LEFT_case-4397,RIGHT_case-4397 +LEFT_case-4407,RIGHT_case-4407 +LEFT_case-5039,RIGHT_case-5039 +LEFT_case-9944,RIGHT_case-9944 +LEFT_case-6998,RIGHT_case-6998 +LEFT_case-6714,RIGHT_case-6714 +LEFT_case-6382,RIGHT_case-6382 +LEFT_case-8295,RIGHT_case-8295 +LEFT_case-6610,RIGHT_case-6610 +LEFT_case-10286,RIGHT_case-10286 +LEFT_case-6990,RIGHT_case-6990 +LEFT_case-9883,RIGHT_case-9883 +LEFT_case-7114,RIGHT_case-7114 +LEFT_case-6378,RIGHT_case-6378 +LEFT_case-10621,RIGHT_case-10621 +LEFT_case-8267,RIGHT_case-8267 +LEFT_case-8098,RIGHT_case-8098 +LEFT_case-7818,RIGHT_case-7818 +LEFT_case-7753,RIGHT_case-7753 +LEFT_case-4517,RIGHT_case-4517 +LEFT_case-9961,RIGHT_case-9961 +LEFT_case-8755,RIGHT_case-8755 +LEFT_case-9543,RIGHT_case-9543 +LEFT_case-4599,RIGHT_case-4599 +LEFT_case-9209,RIGHT_case-9209 +LEFT_case-6989,RIGHT_case-6989 +LEFT_case-4760,RIGHT_case-4760 +LEFT_case-8779,RIGHT_case-8779 +LEFT_case-5582,RIGHT_case-5582 +LEFT_case-9487,RIGHT_case-9487 +LEFT_case-7002,RIGHT_case-7002 +LEFT_case-6778,RIGHT_case-6778 +LEFT_case-8092,RIGHT_case-8092 +LEFT_case-6713,RIGHT_case-6713 +LEFT_case-7092,RIGHT_case-7092 +LEFT_case-5941,RIGHT_case-5941 +LEFT_case-7425,RIGHT_case-7425 +LEFT_case-10222,RIGHT_case-10222 +LEFT_case-5874,RIGHT_case-5874 +LEFT_case-8132,RIGHT_case-8132 +LEFT_case-10647,RIGHT_case-10647 +LEFT_case-8469,RIGHT_case-8469 +LEFT_case-4808,RIGHT_case-4808 +LEFT_case-9886,RIGHT_case-9886 +LEFT_case-4584,RIGHT_case-4584 +LEFT_case-8011,RIGHT_case-8011 +LEFT_case-4556,RIGHT_case-4556 +LEFT_case-4810,RIGHT_case-4810 +LEFT_case-6622,RIGHT_case-6622 +LEFT_case-5766,RIGHT_case-5766 +LEFT_case-10284,RIGHT_case-10284 +LEFT_case-6800,RIGHT_case-6800 +LEFT_case-5957,RIGHT_case-5957 +LEFT_case-6947,RIGHT_case-6947 +LEFT_case-4114,RIGHT_case-4114 +LEFT_case-9895,RIGHT_case-9895 +LEFT_case-9782,RIGHT_case-9782 +LEFT_case-11470,RIGHT_case-11470 +LEFT_case-8837,RIGHT_case-8837 +LEFT_case-5011,RIGHT_case-5011 +LEFT_case-9408,RIGHT_case-9408 +LEFT_case-8460,RIGHT_case-8460 +LEFT_case-6177,RIGHT_case-6177 +LEFT_case-7567,RIGHT_case-7567 +LEFT_case-8061,RIGHT_case-8061 +LEFT_case-5037,RIGHT_case-5037 +LEFT_case-9791,RIGHT_case-9791 +LEFT_case-7301,RIGHT_case-7301 +LEFT_case-9389,RIGHT_case-9389 +LEFT_case-9562,RIGHT_case-9562 +LEFT_case-4600,RIGHT_case-4600 +LEFT_case-6680,RIGHT_case-6680 +LEFT_case-9754,RIGHT_case-9754 +LEFT_case-6607,RIGHT_case-6607 +LEFT_case-9823,RIGHT_case-9823 +LEFT_case-8750,RIGHT_case-8750 +LEFT_case-4411,RIGHT_case-4411 +LEFT_case-4028,RIGHT_case-4028 +LEFT_case-7305,RIGHT_case-7305 +LEFT_case-8749,RIGHT_case-8749 +LEFT_case-6070,RIGHT_case-6070 +LEFT_case-7297,RIGHT_case-7297 +LEFT_case-10087,RIGHT_case-10087 +LEFT_case-7851,RIGHT_case-7851 +LEFT_case-7051,RIGHT_case-7051 +LEFT_case-9924,RIGHT_case-9924 +LEFT_case-5014,RIGHT_case-5014 +LEFT_case-8184,RIGHT_case-8184 +LEFT_case-4554,RIGHT_case-4554 +LEFT_case-6679,RIGHT_case-6679 +LEFT_case-7182,RIGHT_case-7182 +LEFT_case-9756,RIGHT_case-9756 +LEFT_case-4780,RIGHT_case-4780 +LEFT_case-9385,RIGHT_case-9385 +LEFT_case-10120,RIGHT_case-10120 +LEFT_case-6999,RIGHT_case-6999 +LEFT_case-8445,RIGHT_case-8445 +LEFT_case-10069,RIGHT_case-10069 +LEFT_case-9033,RIGHT_case-9033 +LEFT_case-10136,RIGHT_case-10136 +LEFT_case-9274,RIGHT_case-9274 +LEFT_case-4319,RIGHT_case-4319 +LEFT_case-7423,RIGHT_case-7423 +LEFT_case-6646,RIGHT_case-6646 +LEFT_case-10526,RIGHT_case-10526 +LEFT_case-7087,RIGHT_case-7087 +LEFT_case-8733,RIGHT_case-8733 +LEFT_case-5266,RIGHT_case-5266 +LEFT_case-5994,RIGHT_case-5994 +LEFT_case-5552,RIGHT_case-5552 +LEFT_case-6648,RIGHT_case-6648 +LEFT_case-4807,RIGHT_case-4807 +LEFT_case-8198,RIGHT_case-8198 +LEFT_case-6391,RIGHT_case-6391 +LEFT_case-5922,RIGHT_case-5922 +LEFT_case-10853,RIGHT_case-10853 +LEFT_case-11460,RIGHT_case-11460 +LEFT_case-5543,RIGHT_case-5543 +LEFT_case-4061,RIGHT_case-4061 +LEFT_case-10487,RIGHT_case-10487 +LEFT_case-7525,RIGHT_case-7525 +LEFT_case-7311,RIGHT_case-7311 +LEFT_case-8522,RIGHT_case-8522 +LEFT_case-8457,RIGHT_case-8457 +LEFT_case-6683,RIGHT_case-6683 +LEFT_case-4103,RIGHT_case-4103 +LEFT_case-5462,RIGHT_case-5462 +LEFT_case-8462,RIGHT_case-8462 +LEFT_case-9414,RIGHT_case-9414 +LEFT_case-7267,RIGHT_case-7267 +LEFT_case-8411,RIGHT_case-8411 +LEFT_case-6116,RIGHT_case-6116 +LEFT_case-7048,RIGHT_case-7048 +LEFT_case-4553,RIGHT_case-4553 +LEFT_case-6324,RIGHT_case-6324 +LEFT_case-6459,RIGHT_case-6459 +LEFT_case-5706,RIGHT_case-5706 +LEFT_case-9143,RIGHT_case-9143 +LEFT_case-8854,RIGHT_case-8854 +LEFT_case-11376,RIGHT_case-11376 +LEFT_case-9725,RIGHT_case-9725 +LEFT_case-10102,RIGHT_case-10102 +LEFT_case-8742,RIGHT_case-8742 +LEFT_case-7991,RIGHT_case-7991 +LEFT_case-9294,RIGHT_case-9294 +LEFT_case-7362,RIGHT_case-7362 +LEFT_case-7108,RIGHT_case-7108 +LEFT_case-9957,RIGHT_case-9957 +LEFT_case-9277,RIGHT_case-9277 +LEFT_case-7317,RIGHT_case-7317 +LEFT_case-8815,RIGHT_case-8815 +LEFT_case-5721,RIGHT_case-5721 +LEFT_case-9997,RIGHT_case-9997 +LEFT_case-4677,RIGHT_case-4677 +LEFT_case-4680,RIGHT_case-4680 +LEFT_case-8642,RIGHT_case-8642 +LEFT_case-10094,RIGHT_case-10094 +LEFT_case-11094,RIGHT_case-11094 +LEFT_case-6010,RIGHT_case-6010 +LEFT_case-8998,RIGHT_case-8998 +LEFT_case-6864,RIGHT_case-6864 +LEFT_case-6738,RIGHT_case-6738 +LEFT_case-4077,RIGHT_case-4077 +LEFT_case-6979,RIGHT_case-6979 +LEFT_case-8442,RIGHT_case-8442 +LEFT_case-7265,RIGHT_case-7265 +LEFT_case-7988,RIGHT_case-7988 +LEFT_case-7667,RIGHT_case-7667 +LEFT_case-9751,RIGHT_case-9751 +LEFT_case-8959,RIGHT_case-8959 +LEFT_case-6719,RIGHT_case-6719 +LEFT_case-6156,RIGHT_case-6156 +LEFT_case-7697,RIGHT_case-7697 +LEFT_case-7922,RIGHT_case-7922 +LEFT_case-9639,RIGHT_case-9639 +LEFT_case-10564,RIGHT_case-10564 +LEFT_case-9623,RIGHT_case-9623 +LEFT_case-4978,RIGHT_case-4978 +LEFT_case-7037,RIGHT_case-7037 +LEFT_case-4157,RIGHT_case-4157 +LEFT_case-8934,RIGHT_case-8934 +LEFT_case-10555,RIGHT_case-10555 +LEFT_case-7810,RIGHT_case-7810 +LEFT_case-8744,RIGHT_case-8744 +LEFT_case-4560,RIGHT_case-4560 +LEFT_case-4604,RIGHT_case-4604 +LEFT_case-8919,RIGHT_case-8919 +LEFT_case-5545,RIGHT_case-5545 +LEFT_case-9424,RIGHT_case-9424 +LEFT_case-7762,RIGHT_case-7762 +LEFT_case-8848,RIGHT_case-8848 +LEFT_case-5144,RIGHT_case-5144 +LEFT_case-416,RIGHT_case-416 +LEFT_case-6645,RIGHT_case-6645 +LEFT_case-4592,RIGHT_case-4592 +LEFT_case-8905,RIGHT_case-8905 +LEFT_case-9931,RIGHT_case-9931 +LEFT_case-7084,RIGHT_case-7084 +LEFT_case-4515,RIGHT_case-4515 +LEFT_case-3991,RIGHT_case-3991 +LEFT_case-4401,RIGHT_case-4401 +LEFT_case-10948,RIGHT_case-10948 +LEFT_case-7847,RIGHT_case-7847 +LEFT_case-7300,RIGHT_case-7300 +LEFT_case-5595,RIGHT_case-5595 +LEFT_case-10838,RIGHT_case-10838 +LEFT_case-10546,RIGHT_case-10546 +LEFT_case-4814,RIGHT_case-4814 +LEFT_case-8084,RIGHT_case-8084 +LEFT_case-7957,RIGHT_case-7957 +LEFT_case-9495,RIGHT_case-9495 +LEFT_case-10800,RIGHT_case-10800 +LEFT_case-6802,RIGHT_case-6802 +LEFT_case-8427,RIGHT_case-8427 +LEFT_case-6128,RIGHT_case-6128 +LEFT_case-8986,RIGHT_case-8986 +LEFT_case-11380,RIGHT_case-11380 +LEFT_case-4602,RIGHT_case-4602 +LEFT_case-5355,RIGHT_case-5355 +LEFT_case-5145,RIGHT_case-5145 +LEFT_case-6152,RIGHT_case-6152 +LEFT_case-6357,RIGHT_case-6357 +LEFT_case-6292,RIGHT_case-6292 +LEFT_case-6225,RIGHT_case-6225 +LEFT_case-9936,RIGHT_case-9936 +LEFT_case-10626,RIGHT_case-10626 +LEFT_case-5383,RIGHT_case-5383 +LEFT_case-9072,RIGHT_case-9072 +LEFT_case-11050,RIGHT_case-11050 +LEFT_case-6148,RIGHT_case-6148 +LEFT_case-5235,RIGHT_case-5235 +LEFT_case-7956,RIGHT_case-7956 +LEFT_case-8344,RIGHT_case-8344 +LEFT_case-5000,RIGHT_case-5000 +LEFT_case-6223,RIGHT_case-6223 +LEFT_case-9776,RIGHT_case-9776 +LEFT_case-9292,RIGHT_case-9292 +LEFT_case-4939,RIGHT_case-4939 +LEFT_case-7815,RIGHT_case-7815 +LEFT_case-7926,RIGHT_case-7926 +LEFT_case-7929,RIGHT_case-7929 +LEFT_case-9747,RIGHT_case-9747 +LEFT_case-7322,RIGHT_case-7322 +LEFT_case-8663,RIGHT_case-8663 +LEFT_case-4071,RIGHT_case-4071 +LEFT_case-4771,RIGHT_case-4771 +LEFT_case-8449,RIGHT_case-8449 +LEFT_case-5946,RIGHT_case-5946 +LEFT_case-5707,RIGHT_case-5707 +LEFT_case-10693,RIGHT_case-10693 +LEFT_case-5512,RIGHT_case-5512 +LEFT_case-5943,RIGHT_case-5943 +LEFT_case-9753,RIGHT_case-9753 +LEFT_case-4277,RIGHT_case-4277 +LEFT_case-10929,RIGHT_case-10929 +LEFT_case-7008,RIGHT_case-7008 +LEFT_case-3818,RIGHT_case-3818 +LEFT_case-5151,RIGHT_case-5151 +LEFT_case-10472,RIGHT_case-10472 +LEFT_case-4585,RIGHT_case-4585 +LEFT_case-5294,RIGHT_case-5294 +LEFT_case-4012,RIGHT_case-4012 +LEFT_case-7751,RIGHT_case-7751 +LEFT_case-5379,RIGHT_case-5379 +LEFT_case-8232,RIGHT_case-8232 +LEFT_case-10492,RIGHT_case-10492 +LEFT_case-7758,RIGHT_case-7758 +LEFT_case-6751,RIGHT_case-6751 +LEFT_case-9981,RIGHT_case-9981 +LEFT_case-4559,RIGHT_case-4559 +LEFT_case-7817,RIGHT_case-7817 +LEFT_case-8745,RIGHT_case-8745 +LEFT_case-10861,RIGHT_case-10861 +LEFT_case-5560,RIGHT_case-5560 +LEFT_case-6374,RIGHT_case-6374 +LEFT_case-10735,RIGHT_case-10735 +LEFT_case-9963,RIGHT_case-9963 +LEFT_case-6069,RIGHT_case-6069 +LEFT_case-8180,RIGHT_case-8180 +LEFT_case-11399,RIGHT_case-11399 +LEFT_case-7472,RIGHT_case-7472 +LEFT_case-9749,RIGHT_case-9749 +LEFT_case-8936,RIGHT_case-8936 +LEFT_case-10777,RIGHT_case-10777 +LEFT_case-8982,RIGHT_case-8982 +LEFT_case-9176,RIGHT_case-9176 +LEFT_case-4687,RIGHT_case-4687 +LEFT_case-5398,RIGHT_case-5398 +LEFT_case-10225,RIGHT_case-10225 +LEFT_case-11481,RIGHT_case-11481 +LEFT_case-8856,RIGHT_case-8856 +LEFT_case-4529,RIGHT_case-4529 +LEFT_case-9765,RIGHT_case-9765 +LEFT_case-4925,RIGHT_case-4925 +LEFT_case-3961,RIGHT_case-3961 +LEFT_case-4539,RIGHT_case-4539 +LEFT_case-9727,RIGHT_case-9727 +LEFT_case-8847,RIGHT_case-8847 +LEFT_case-4101,RIGHT_case-4101 +LEFT_case-8780,RIGHT_case-8780 +LEFT_case-6765,RIGHT_case-6765 +LEFT_case-5046,RIGHT_case-5046 +LEFT_case-4538,RIGHT_case-4538 +LEFT_case-10024,RIGHT_case-10024 +LEFT_case-7805,RIGHT_case-7805 +LEFT_case-5153,RIGHT_case-5153 +LEFT_case-4011,RIGHT_case-4011 +LEFT_case-10946,RIGHT_case-10946 +LEFT_case-11063,RIGHT_case-11063 +LEFT_case-7569,RIGHT_case-7569 +LEFT_case-5897,RIGHT_case-5897 +LEFT_case-8266,RIGHT_case-8266 +LEFT_case-10857,RIGHT_case-10857 +LEFT_case-6317,RIGHT_case-6317 +LEFT_case-7014,RIGHT_case-7014 +LEFT_case-8367,RIGHT_case-8367 +LEFT_case-9163,RIGHT_case-9163 +LEFT_case-5547,RIGHT_case-5547 +LEFT_case-10134,RIGHT_case-10134 +LEFT_case-4119,RIGHT_case-4119 +LEFT_case-9748,RIGHT_case-9748 +LEFT_case-8141,RIGHT_case-8141 +LEFT_case-10459,RIGHT_case-10459 +LEFT_case-8406,RIGHT_case-8406 +LEFT_case-5519,RIGHT_case-5519 +LEFT_case-10542,RIGHT_case-10542 +LEFT_case-4502,RIGHT_case-4502 +LEFT_case-4947,RIGHT_case-4947 +LEFT_case-11053,RIGHT_case-11053 +LEFT_case-4667,RIGHT_case-4667 +LEFT_case-5865,RIGHT_case-5865 +LEFT_case-5710,RIGHT_case-5710 +LEFT_case-5599,RIGHT_case-5599 +LEFT_case-5597,RIGHT_case-5597 +LEFT_case-5243,RIGHT_case-5243 +LEFT_case-10636,RIGHT_case-10636 +LEFT_case-9746,RIGHT_case-9746 +LEFT_case-8771,RIGHT_case-8771 diff --git a/pm4py/tests/input_data/interleavings/receipt_even.csv b/pm4py/tests/input_data/interleavings/receipt_even.csv new file mode 100644 index 0000000000000000000000000000000000000000..865ea2b254c4fbb16eaa1cc14821e748020e06e8 --- /dev/null +++ b/pm4py/tests/input_data/interleavings/receipt_even.csv @@ -0,0 +1,4444 @@ +case:channel,case:concept:name,case:deadline,case:department,case:enddate,case:enddate_planned,case:group,case:responsible,case:startdate,concept:instance,concept:name,lifecycle:transition,org:group,org:resource,time:timestamp +Internet,LEFT_case-10011,2011-12-06 13:41:31.788000+00:00,General,,2011-12-06 13:41:31.788000+00:00,Group 2,Resource21,2011-10-11 13:42:22.688000+00:00,task-42933,Confirmation of receipt,complete,Group 1,Resource21,2011-10-11 13:45:40.276000+00:00 +Internet,LEFT_case-10011,2011-12-06 13:41:31.788000+00:00,General,,2011-12-06 13:41:31.788000+00:00,Group 2,Resource21,2011-10-11 13:42:22.688000+00:00,task-42957,T03 Adjust confirmation of receipt,complete,Group 1,Resource21,2011-11-24 15:36:51.302000+00:00 +Internet,LEFT_case-10017,2011-12-06 01:06:40+00:00,General,2011-10-18 13:56:55.943000+00:00,2011-12-06 01:06:40.010000+00:00,Group 5,Resource04,2011-10-11 01:06:40.020000+00:00,task-43021,Confirmation of receipt,complete,EMPTY,Resource30,2011-10-18 13:46:39.679000+00:00 +Internet,LEFT_case-10017,2011-12-06 01:06:40+00:00,General,2011-10-18 13:56:55.943000+00:00,2011-12-06 01:06:40.010000+00:00,Group 5,Resource04,2011-10-11 01:06:40.020000+00:00,task-43672,T06 Determine necessity of stop advice,complete,Group 1,Resource30,2011-10-18 13:47:06.950000+00:00 +Internet,LEFT_case-10017,2011-12-06 01:06:40+00:00,General,2011-10-18 13:56:55.943000+00:00,2011-12-06 01:06:40.010000+00:00,Group 5,Resource04,2011-10-11 01:06:40.020000+00:00,task-43674,T03 Adjust confirmation of receipt,complete,Group 1,Resource30,2011-10-18 13:47:41.811000+00:00 +Internet,LEFT_case-10017,2011-12-06 01:06:40+00:00,General,2011-10-18 13:56:55.943000+00:00,2011-12-06 01:06:40.010000+00:00,Group 5,Resource04,2011-10-11 01:06:40.020000+00:00,task-43676,T03 Adjust confirmation of receipt,complete,Group 1,Resource30,2011-10-18 13:48:30.632000+00:00 +Internet,LEFT_case-10017,2011-12-06 01:06:40+00:00,General,2011-10-18 13:56:55.943000+00:00,2011-12-06 01:06:40.010000+00:00,Group 5,Resource04,2011-10-11 01:06:40.020000+00:00,task-43686,T03 Adjust confirmation of receipt,complete,Group 1,admin2,2011-10-18 13:56:57.603000+00:00 +Internet,LEFT_case-10024,2011-12-01 01:06:40+00:00,General,2011-11-17 07:53:06.189000+00:00,2011-12-01 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43229,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-18 15:53:19.732000+00:00 +Internet,LEFT_case-10024,2011-12-01 01:06:40+00:00,General,2011-11-17 07:53:06.189000+00:00,2011-12-01 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43729,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-18 15:53:53.778000+00:00 +Internet,LEFT_case-10024,2011-12-01 01:06:40+00:00,General,2011-11-17 07:53:06.189000+00:00,2011-12-01 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43728,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-18 15:54:24.121000+00:00 +Internet,LEFT_case-10025,2011-12-05 01:06:40+00:00,General,2011-11-14 09:15:07.941000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-43231,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-25 09:27:08.484000+00:00 +Internet,LEFT_case-10025,2011-12-05 01:06:40+00:00,General,2011-11-14 09:15:07.941000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44377,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-25 09:27:46.307000+00:00 +Internet,LEFT_case-10025,2011-12-05 01:06:40+00:00,General,2011-11-14 09:15:07.941000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44376,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-25 09:28:15.484000+00:00 +Internet,LEFT_case-10028,2011-12-05 01:06:40+00:00,General,2011-12-05 15:34:49.174000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-43250,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-25 14:13:10.744000+00:00 +Internet,LEFT_case-10028,2011-12-05 01:06:40+00:00,General,2011-12-05 15:34:49.174000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44469,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-25 14:13:49.542000+00:00 +Internet,LEFT_case-10028,2011-12-05 01:06:40+00:00,General,2011-12-05 15:34:49.174000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44468,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-25 14:22:15.239000+00:00 +Internet,LEFT_case-10028,2011-12-05 01:06:40+00:00,General,2011-12-05 15:34:49.174000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44472,T16 Report reasons to hold request,complete,Group 1,Resource03,2011-10-25 14:23:58.755000+00:00 +Internet,LEFT_case-10028,2011-12-05 01:06:40+00:00,General,2011-12-05 15:34:49.174000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44474,T19 Determine report Y to stop indication,complete,Group 3,Resource03,2011-10-25 14:24:55.079000+00:00 +Internet,LEFT_case-10059,2011-12-12 14:23:48.241000+00:00,General,2011-10-24 11:10:14.651000+00:00,2011-12-12 14:23:48.241000+00:00,Group 5,Resource06,2011-10-17 14:23:48.241000+00:00,task-43463,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-17 15:31:27.570000+00:00 +Internet,LEFT_case-10059,2011-12-12 14:23:48.241000+00:00,General,2011-10-24 11:10:14.651000+00:00,2011-12-12 14:23:48.241000+00:00,Group 5,Resource06,2011-10-17 14:23:48.241000+00:00,task-43501,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-17 15:32:34.591000+00:00 +Internet,LEFT_case-10059,2011-12-12 14:23:48.241000+00:00,General,2011-10-24 11:10:14.651000+00:00,2011-12-12 14:23:48.241000+00:00,Group 5,Resource06,2011-10-17 14:23:48.241000+00:00,task-43500,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-17 15:34:25.518000+00:00 +Internet,LEFT_case-10061,2011-12-06 01:06:40+00:00,General,2011-11-23 08:50:44.645000+00:00,2012-12-06 01:06:40.010000+00:00,Group 8,Resource11,2011-10-11 01:06:40.020000+00:00,task-43657,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-24 15:00:50.433000+00:00 +Internet,LEFT_case-10061,2011-12-06 01:06:40+00:00,General,2011-11-23 08:50:44.645000+00:00,2012-12-06 01:06:40.010000+00:00,Group 8,Resource11,2011-10-11 01:06:40.020000+00:00,task-44274,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-24 15:01:21.907000+00:00 +Internet,LEFT_case-10061,2011-12-06 01:06:40+00:00,General,2011-11-23 08:50:44.645000+00:00,2012-12-06 01:06:40.010000+00:00,Group 8,Resource11,2011-10-11 01:06:40.020000+00:00,task-44277,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-24 15:02:16.227000+00:00 +Internet,LEFT_case-10062,2012-01-03 13:51:06.416000+00:00,Customer contact,2011-10-18 13:34:37.957000+00:00,2012-01-03 13:51:06.416000+00:00,,admin3,2011-10-17 14:51:06.416000+00:00,task-43664,Confirmation of receipt,complete,Group 1,admin2,2011-10-18 13:34:39.087000+00:00 +Internet,LEFT_case-10065,2012-01-11 01:06:40+00:00,General,2011-12-16 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource06,2011-10-12 01:06:40.020000+00:00,task-43698,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-28 10:31:29.136000+00:00 +Internet,LEFT_case-10065,2012-01-11 01:06:40+00:00,General,2011-12-16 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource06,2011-10-12 01:06:40.020000+00:00,task-44949,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-28 10:32:08.374000+00:00 +Internet,LEFT_case-10065,2012-01-11 01:06:40+00:00,General,2011-12-16 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource06,2011-10-12 01:06:40.020000+00:00,task-44948,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-28 10:45:06.394000+00:00 +Internet,LEFT_case-10066,2012-12-08 01:06:40+00:00,General,2011-11-30 08:48:31.281000+00:00,2012-12-08 01:06:40.010000+00:00,Group 5,Resource22,2011-10-13 01:06:40.020000+00:00,task-43721,Confirmation of receipt,complete,EMPTY,Resource22,2011-11-22 13:46:36.256000+00:00 +Internet,LEFT_case-10066,2012-12-08 01:06:40+00:00,General,2011-11-30 08:48:31.281000+00:00,2012-12-08 01:06:40.010000+00:00,Group 5,Resource22,2011-10-13 01:06:40.020000+00:00,task-47565,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-11-22 13:49:21.982000+00:00 +Internet,LEFT_case-10066,2012-12-08 01:06:40+00:00,General,2011-11-30 08:48:31.281000+00:00,2012-12-08 01:06:40.010000+00:00,Group 5,Resource22,2011-10-13 01:06:40.020000+00:00,task-47562,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-11-22 13:57:59.101000+00:00 +Internet,LEFT_case-10067,2011-12-08 01:06:40+00:00,General,2011-11-16 10:31:30.572000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-13 01:06:40.020000+00:00,task-43787,Confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 20:39:03.392000+00:00 +Internet,LEFT_case-10067,2011-12-08 01:06:40+00:00,General,2011-11-16 10:31:30.572000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-13 01:06:40.020000+00:00,task-46131,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 20:40:02.334000+00:00 +Internet,LEFT_case-10067,2011-12-08 01:06:40+00:00,General,2011-11-16 10:31:30.572000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-13 01:06:40.020000+00:00,task-46130,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-11-09 20:40:49.698000+00:00 +Internet,LEFT_case-10068,2011-12-09 01:06:40+00:00,General,2011-10-24 11:39:09.003000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource06,2011-10-14 01:06:40.020000+00:00,task-43788,Confirmation of receipt,complete,EMPTY,Resource20,2011-10-20 12:39:37.946000+00:00 +Internet,LEFT_case-10068,2011-12-09 01:06:40+00:00,General,2011-10-24 11:39:09.003000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource06,2011-10-14 01:06:40.020000+00:00,task-43993,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-10-20 12:40:31.903000+00:00 +Internet,LEFT_case-10068,2011-12-09 01:06:40+00:00,General,2011-10-24 11:39:09.003000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource06,2011-10-14 01:06:40.020000+00:00,task-43992,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-10-20 12:41:28.600000+00:00 +Internet,LEFT_case-10069,2012-01-05 00:00:00+00:00,General,2011-12-30 15:41:42.684000+00:00,2012-01-05 00:00:00.010000+00:00,Group 5,Resource08,2011-10-14 01:06:40.020000+00:00,task-43792,Confirmation of receipt,complete,EMPTY,Resource08,2011-11-07 15:10:10.205000+00:00 +Internet,LEFT_case-10069,2012-01-05 00:00:00+00:00,General,2011-12-30 15:41:42.684000+00:00,2012-01-05 00:00:00.010000+00:00,Group 5,Resource08,2011-10-14 01:06:40.020000+00:00,task-45610,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-11-07 15:12:53.254000+00:00 +Internet,LEFT_case-10069,2012-01-05 00:00:00+00:00,General,2011-12-30 15:41:42.684000+00:00,2012-01-05 00:00:00.010000+00:00,Group 5,Resource08,2011-10-14 01:06:40.020000+00:00,task-45609,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-11-07 15:14:49.848000+00:00 +Internet,LEFT_case-10070,2011-12-09 01:06:40+00:00,General,2011-11-18 09:47:22.105000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource13,2011-10-14 01:06:40.020000+00:00,task-43793,Confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 19:43:25.050000+00:00 +Internet,LEFT_case-10070,2011-12-09 01:06:40+00:00,General,2011-11-18 09:47:22.105000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource13,2011-10-14 01:06:40.020000+00:00,task-46107,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-11-09 19:43:50.463000+00:00 +Internet,LEFT_case-10070,2011-12-09 01:06:40+00:00,General,2011-11-18 09:47:22.105000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource13,2011-10-14 01:06:40.020000+00:00,task-46109,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 19:44:58.894000+00:00 +Internet,LEFT_case-10071,2011-12-12 01:06:40+00:00,General,2012-01-18 09:50:57.856000+00:00,2011-12-12 01:06:40.010000+00:00,Group 2,Resource21,2011-10-17 01:06:40.020000+00:00,task-43844,Confirmation of receipt,complete,Group 1,Resource21,2011-10-19 09:56:55.204000+00:00 +Internet,LEFT_case-10071,2011-12-12 01:06:40+00:00,General,2012-01-18 09:50:57.856000+00:00,2011-12-12 01:06:40.010000+00:00,Group 2,Resource21,2011-10-17 01:06:40.020000+00:00,task-43848,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-10-19 09:58:15.323000+00:00 +Internet,LEFT_case-10071,2011-12-12 01:06:40+00:00,General,2012-01-18 09:50:57.856000+00:00,2011-12-12 01:06:40.010000+00:00,Group 2,Resource21,2011-10-17 01:06:40.020000+00:00,task-43847,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-10-19 09:58:54.326000+00:00 +Internet,LEFT_case-10071,2011-12-12 01:06:40+00:00,General,2012-01-18 09:50:57.856000+00:00,2011-12-12 01:06:40.010000+00:00,Group 2,Resource21,2011-10-17 01:06:40.020000+00:00,task-44022,T11 Create document X request unlicensed,complete,Group 1,Resource21,2012-01-18 09:48:33.680000+00:00 +Internet,LEFT_case-10071,2011-12-12 01:06:40+00:00,General,2012-01-18 09:50:57.856000+00:00,2011-12-12 01:06:40.010000+00:00,Group 2,Resource21,2011-10-17 01:06:40.020000+00:00,task-53049,T14 Determine document X request unlicensed,complete,Group 3,Resource21,2012-01-18 09:49:44.753000+00:00 +Internet,LEFT_case-10072,2011-12-11 01:06:40+00:00,General,2011-12-07 15:03:44.321000+00:00,2011-12-11 01:06:40.010000+00:00,,admin1,2011-10-16 01:06:40.020000+00:00,task-43796,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-31 11:09:14.275000+00:00 +Internet,LEFT_case-10072,2011-12-11 01:06:40+00:00,General,2011-12-07 15:03:44.321000+00:00,2011-12-11 01:06:40.010000+00:00,,admin1,2011-10-16 01:06:40.020000+00:00,task-45105,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-31 11:10:37.260000+00:00 +Internet,LEFT_case-10072,2011-12-11 01:06:40+00:00,General,2011-12-07 15:03:44.321000+00:00,2011-12-11 01:06:40.010000+00:00,,admin1,2011-10-16 01:06:40.020000+00:00,task-45104,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-31 11:36:38.174000+00:00 +Internet,LEFT_case-10073,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource22,2011-10-17 01:06:40.020000+00:00,task-43868,Confirmation of receipt,complete,EMPTY,Resource22,2011-11-29 14:28:08.930000+00:00 +Internet,LEFT_case-10073,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource22,2011-10-17 01:06:40.020000+00:00,task-48490,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-11-29 14:40:32.371000+00:00 +Internet,LEFT_case-10073,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource22,2011-10-17 01:06:40.020000+00:00,task-48487,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-11-29 14:42:10.340000+00:00 +Internet,LEFT_case-10073,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource22,2011-10-17 01:06:40.020000+00:00,task-48492,T08 Draft and send request for advice,complete,Group 1,Resource22,2011-11-30 10:54:46.581000+00:00 +Internet,LEFT_case-10073,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource22,2011-10-17 01:06:40.020000+00:00,task-48563,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-11-30 11:04:28.307000+00:00 +Internet,LEFT_case-10075,2012-01-03 14:45:00.878000+00:00,Customer contact,2011-10-20 11:57:51.715000+00:00,2012-01-03 14:45:00.878000+00:00,,admin3,2011-10-17 15:45:00.878000+00:00,task-43984,Confirmation of receipt,complete,Group 1,admin2,2011-10-20 11:57:52.783000+00:00 +Internet,LEFT_case-10087,2011-12-13 01:06:40+00:00,General,2011-12-21 00:00:00.010000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-43905,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-24 15:57:27.372000+00:00 +Internet,LEFT_case-10087,2011-12-13 01:06:40+00:00,General,2011-12-21 00:00:00.010000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44300,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-24 15:58:02.043000+00:00 +Internet,LEFT_case-10087,2011-12-13 01:06:40+00:00,General,2011-12-21 00:00:00.010000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44299,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-24 15:58:34.305000+00:00 +Internet,LEFT_case-10089,2011-12-09 01:06:40+00:00,General,2011-10-24 12:02:19.895000+00:00,2011-12-09 01:06:40.010000+00:00,Group 2,Resource20,2011-10-14 01:06:40.020000+00:00,task-43627,Confirmation of receipt,complete,Group 1,Resource20,2011-10-18 16:12:35.899000+00:00 +Internet,LEFT_case-10089,2011-12-09 01:06:40+00:00,General,2011-10-24 12:02:19.895000+00:00,2011-12-09 01:06:40.010000+00:00,Group 2,Resource20,2011-10-14 01:06:40.020000+00:00,task-43751,T04 Determine confirmation of receipt,complete,EMPTY,Resource20,2011-10-18 16:14:55.271000+00:00 +Internet,LEFT_case-10089,2011-12-09 01:06:40+00:00,General,2011-10-24 12:02:19.895000+00:00,2011-12-09 01:06:40.010000+00:00,Group 2,Resource20,2011-10-14 01:06:40.020000+00:00,task-43749,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-10-18 16:16:01.203000+00:00 +Internet,LEFT_case-10089,2011-12-09 01:06:40+00:00,General,2011-10-24 12:02:19.895000+00:00,2011-12-09 01:06:40.010000+00:00,Group 2,Resource20,2011-10-14 01:06:40.020000+00:00,task-43760,T11 Create document X request unlicensed,complete,Group 1,admin2,2011-10-24 12:02:20.931000+00:00 +Internet,LEFT_case-10090,2011-12-13 01:06:40+00:00,General,2011-12-23 10:15:43.378000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource01,2011-10-18 01:06:40.020000+00:00,task-43906,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-24 16:25:16.886000+00:00 +Internet,LEFT_case-10090,2011-12-13 01:06:40+00:00,General,2011-12-23 10:15:43.378000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource01,2011-10-18 01:06:40.020000+00:00,task-44321,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-24 16:26:08.810000+00:00 +Internet,LEFT_case-10090,2011-12-13 01:06:40+00:00,General,2011-12-23 10:15:43.378000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource01,2011-10-18 01:06:40.020000+00:00,task-44320,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-24 16:27:22.161000+00:00 +Internet,LEFT_case-10094,2011-12-13 01:06:40+00:00,General,2011-11-23 09:10:27.977000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-43907,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-25 15:07:27.732000+00:00 +Internet,LEFT_case-10094,2011-12-13 01:06:40+00:00,General,2011-11-23 09:10:27.977000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44513,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-25 15:08:07.876000+00:00 +Internet,LEFT_case-10094,2011-12-13 01:06:40+00:00,General,2011-11-23 09:10:27.977000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44512,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-25 15:08:48.537000+00:00 +Internet,LEFT_case-10095,2011-12-13 01:06:40+00:00,General,2011-11-11 00:00:00.010000+00:00,2011-12-13 01:06:40.010000+00:00,Group 5,Resource05,2011-10-18 01:06:40.020000+00:00,task-44056,Confirmation of receipt,complete,EMPTY,admin2,2011-11-14 09:26:07.385000+00:00 +Internet,LEFT_case-10098,2011-12-13 01:06:40+00:00,General,2011-11-21 10:55:59.502000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44006,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-25 16:06:58.586000+00:00 +Internet,LEFT_case-10098,2011-12-13 01:06:40+00:00,General,2011-11-21 10:55:59.502000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44540,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-25 16:07:48.289000+00:00 +Internet,LEFT_case-10098,2011-12-13 01:06:40+00:00,General,2011-11-21 10:55:59.502000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44539,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-25 16:08:54.842000+00:00 +Internet,LEFT_case-10099,2011-12-13 01:06:40+00:00,General,2011-11-23 09:18:38.635000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44008,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 09:04:38.421000+00:00 +Internet,LEFT_case-10099,2011-12-13 01:06:40+00:00,General,2011-11-23 09:18:38.635000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44590,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 09:05:15.074000+00:00 +Internet,LEFT_case-10099,2011-12-13 01:06:40+00:00,General,2011-11-23 09:18:38.635000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44589,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 09:05:43.792000+00:00 +Internet,LEFT_case-10101,2011-12-13 01:06:40+00:00,General,2011-11-16 14:34:26.165000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44010,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 11:44:51.917000+00:00 +Internet,LEFT_case-10101,2011-12-13 01:06:40+00:00,General,2011-11-16 14:34:26.165000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44666,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 11:45:54.899000+00:00 +Internet,LEFT_case-10101,2011-12-13 01:06:40+00:00,General,2011-11-16 14:34:26.165000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44665,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 11:46:40.098000+00:00 +Internet,LEFT_case-10102,2012-01-24 01:06:40+00:00,General,,2012-01-24 01:06:40.010000+00:00,Group 5,Resource02,2011-10-18 01:06:40.020000+00:00,task-43717,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-20 11:06:16.081000+00:00 +Internet,LEFT_case-10102,2012-01-24 01:06:40+00:00,General,,2012-01-24 01:06:40.010000+00:00,Group 5,Resource02,2011-10-18 01:06:40.020000+00:00,task-44912,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-27 13:46:49.205000+00:00 +Internet,LEFT_case-10102,2012-01-24 01:06:40+00:00,General,,2012-01-24 01:06:40.010000+00:00,Group 5,Resource02,2011-10-18 01:06:40.020000+00:00,task-43961,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-11-17 08:13:20.068000+00:00 +Internet,LEFT_case-10103,2012-01-02 00:00:00+00:00,General,2012-01-18 14:42:30.860000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-10-11 01:06:40.020000+00:00,task-43718,Confirmation of receipt,complete,EMPTY,Resource02,2011-11-15 07:20:14.205000+00:00 +Internet,LEFT_case-10103,2012-01-02 00:00:00+00:00,General,2012-01-18 14:42:30.860000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-10-11 01:06:40.020000+00:00,task-46640,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-11-15 07:21:00.327000+00:00 +Internet,LEFT_case-10103,2012-01-02 00:00:00+00:00,General,2012-01-18 14:42:30.860000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-10-11 01:06:40.020000+00:00,task-46639,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-11-15 07:42:16.335000+00:00 +Internet,LEFT_case-10105,2011-12-13 01:06:40+00:00,General,2011-11-14 09:21:17.077000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44050,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 14:45:46.454000+00:00 +Internet,LEFT_case-10105,2011-12-13 01:06:40+00:00,General,2011-11-14 09:21:17.077000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44692,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 14:46:20.612000+00:00 +Internet,LEFT_case-10105,2011-12-13 01:06:40+00:00,General,2011-11-14 09:21:17.077000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44691,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 14:46:55.969000+00:00 +Internet,LEFT_case-10120,2011-12-15 01:06:40+00:00,General,2011-11-18 10:41:02.406000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource05,2011-10-20 01:06:40.020000+00:00,task-44018,Confirmation of receipt,complete,EMPTY,Resource05,2011-10-25 09:56:31.704000+00:00 +Internet,LEFT_case-10120,2011-12-15 01:06:40+00:00,General,2011-11-18 10:41:02.406000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource05,2011-10-20 01:06:40.020000+00:00,task-44403,T04 Determine confirmation of receipt,complete,EMPTY,Resource05,2011-10-25 11:34:25.395000+00:00 +Internet,LEFT_case-10120,2011-12-15 01:06:40+00:00,General,2011-11-18 10:41:02.406000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource05,2011-10-20 01:06:40.020000+00:00,task-44402,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-10-25 11:35:58.954000+00:00 +Internet,LEFT_case-10127,2011-12-15 01:06:40+00:00,General,2011-11-14 16:28:14.523000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource06,2011-10-20 01:06:40.020000+00:00,task-44038,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-27 08:37:51.459000+00:00 +Internet,LEFT_case-10127,2011-12-15 01:06:40+00:00,General,2011-11-14 16:28:14.523000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource06,2011-10-20 01:06:40.020000+00:00,task-44811,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-27 08:38:39.137000+00:00 +Internet,LEFT_case-10127,2011-12-15 01:06:40+00:00,General,2011-11-14 16:28:14.523000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource06,2011-10-20 01:06:40.020000+00:00,task-44810,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-27 08:39:43.531000+00:00 +Internet,LEFT_case-10134,2011-12-16 01:06:40+00:00,General,2011-11-21 10:22:01.058000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44094,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 15:04:21.840000+00:00 +Internet,LEFT_case-10134,2011-12-16 01:06:40+00:00,General,2011-11-21 10:22:01.058000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44713,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 15:05:00.324000+00:00 +Internet,LEFT_case-10134,2011-12-16 01:06:40+00:00,General,2011-11-21 10:22:01.058000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44712,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 15:05:34.867000+00:00 +Internet,LEFT_case-10136,2011-12-16 01:06:40+00:00,General,2011-11-21 10:47:45.048000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44102,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 15:40:46.193000+00:00 +Internet,LEFT_case-10136,2011-12-16 01:06:40+00:00,General,2011-11-21 10:47:45.048000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44738,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 15:41:05.144000+00:00 +Internet,LEFT_case-10136,2011-12-16 01:06:40+00:00,General,2011-11-21 10:47:45.048000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44740,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 15:41:39.797000+00:00 +Internet,LEFT_case-10138,2011-12-16 01:06:40+00:00,General,,2011-12-16 01:06:40.010000+00:00,Group 5,Resource12,2011-10-21 01:06:40.020000+00:00,task-44150,Confirmation of receipt,complete,EMPTY,Resource12,2011-12-08 14:52:51.432000+00:00 +Internet,LEFT_case-10138,2011-12-16 01:06:40+00:00,General,,2011-12-16 01:06:40.010000+00:00,Group 5,Resource12,2011-10-21 01:06:40.020000+00:00,task-49494,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-12-08 14:53:55.363000+00:00 +Internet,LEFT_case-10138,2011-12-16 01:06:40+00:00,General,,2011-12-16 01:06:40.010000+00:00,Group 5,Resource12,2011-10-21 01:06:40.020000+00:00,task-49491,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-12-08 14:55:00.037000+00:00 +Internet,LEFT_case-10139,2012-01-09 08:57:00.805000+00:00,Customer contact,2011-10-21 10:07:15.049000+00:00,2012-01-09 08:57:00.805000+00:00,,admin3,2011-10-21 09:57:00.805000+00:00,task-44093,Confirmation of receipt,complete,Group 1,admin2,2011-10-21 10:07:16.084000+00:00 +Internet,LEFT_case-10146,2011-12-16 01:06:40+00:00,General,2011-11-16 12:19:00.566000+00:00,2011-12-16 01:06:40.010000+00:00,Group 2,Resource03,2011-10-21 01:06:40.020000+00:00,task-44278,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-07 15:24:56.152000+00:00 +Internet,LEFT_case-10146,2011-12-16 01:06:40+00:00,General,2011-11-16 12:19:00.566000+00:00,2011-12-16 01:06:40.010000+00:00,Group 2,Resource03,2011-10-21 01:06:40.020000+00:00,task-45624,T04 Determine confirmation of receipt,complete,EMPTY,Resource03,2011-11-16 12:05:43.389000+00:00 +Internet,LEFT_case-10146,2011-12-16 01:06:40+00:00,General,2011-11-16 12:19:00.566000+00:00,2011-12-16 01:06:40.010000+00:00,Group 2,Resource03,2011-10-21 01:06:40.020000+00:00,task-45623,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-16 12:06:32.021000+00:00 +Internet,LEFT_case-10147,2011-12-17 01:06:40+00:00,General,2011-11-21 14:00:38.805000+00:00,2011-12-17 01:06:40.010000+00:00,Group 8,Resource11,2011-10-22 01:06:40.020000+00:00,task-44297,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 16:07:55.282000+00:00 +Internet,LEFT_case-10147,2011-12-17 01:06:40+00:00,General,2011-11-21 14:00:38.805000+00:00,2011-12-17 01:06:40.010000+00:00,Group 8,Resource11,2011-10-22 01:06:40.020000+00:00,task-44761,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 16:10:19.743000+00:00 +Internet,LEFT_case-10147,2011-12-17 01:06:40+00:00,General,2011-11-21 14:00:38.805000+00:00,2011-12-17 01:06:40.010000+00:00,Group 8,Resource11,2011-10-22 01:06:40.020000+00:00,task-44760,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 16:10:58.544000+00:00 +Internet,LEFT_case-10159,2011-12-18 01:06:40+00:00,General,2011-12-07 08:39:52.978000+00:00,2011-12-18 01:06:40.010000+00:00,Group 8,Resource11,2011-10-23 01:06:40.020000+00:00,task-44315,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-10 11:00:39.952000+00:00 +Internet,LEFT_case-10159,2011-12-18 01:06:40+00:00,General,2011-12-07 08:39:52.978000+00:00,2011-12-18 01:06:40.010000+00:00,Group 8,Resource11,2011-10-23 01:06:40.020000+00:00,task-46202,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-10 11:02:07.499000+00:00 +Internet,LEFT_case-10159,2011-12-18 01:06:40+00:00,General,2011-12-07 08:39:52.978000+00:00,2011-12-18 01:06:40.010000+00:00,Group 8,Resource11,2011-10-23 01:06:40.020000+00:00,task-46201,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-10 11:02:41.340000+00:00 +Internet,LEFT_case-10160,2012-01-29 01:06:40+00:00,General,,2012-01-29 01:06:40.010000+00:00,Group 5,Resource02,2011-10-23 01:06:40.020000+00:00,task-44421,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-25 15:20:00.343000+00:00 +Internet,LEFT_case-10160,2012-01-29 01:06:40+00:00,General,,2012-01-29 01:06:40.010000+00:00,Group 5,Resource02,2011-10-23 01:06:40.020000+00:00,task-44534,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-25 15:21:33.582000+00:00 +Internet,LEFT_case-10160,2012-01-29 01:06:40+00:00,General,,2012-01-29 01:06:40.010000+00:00,Group 5,Resource02,2011-10-23 01:06:40.020000+00:00,task-44533,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-25 15:24:25.818000+00:00 +Internet,LEFT_case-10163,2011-12-18 01:06:40+00:00,Customer contact,2011-10-27 10:17:23.186000+00:00,2011-12-18 01:06:40.010000+00:00,,admin3,2011-10-23 01:06:40.020000+00:00,task-44838,Confirmation of receipt,complete,Group 1,admin2,2011-10-27 10:17:24.156000+00:00 +Internet,LEFT_case-10164,2011-12-19 01:06:40+00:00,General,2011-11-18 16:02:50.407000+00:00,2011-12-19 01:06:40.010000+00:00,Group 8,Resource01,2011-10-24 01:06:40.020000+00:00,task-44845,Confirmation of receipt,complete,Group 1,Resource01,2011-10-27 11:02:53.821000+00:00 +Internet,LEFT_case-10164,2011-12-19 01:06:40+00:00,General,2011-11-18 16:02:50.407000+00:00,2011-12-19 01:06:40.010000+00:00,Group 8,Resource01,2011-10-24 01:06:40.020000+00:00,task-44862,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-11-18 16:02:51.452000+00:00 +Internet,LEFT_case-10164,2011-12-19 01:06:40+00:00,General,2011-11-18 16:02:50.407000+00:00,2011-12-19 01:06:40.010000+00:00,Group 8,Resource01,2011-10-24 01:06:40.020000+00:00,task-44867,T04 Determine confirmation of receipt,complete,EMPTY,admin2,2011-11-18 16:02:52.082000+00:00 +Internet,LEFT_case-10183,2013-01-02 00:00:00+00:00,General,,2011-12-20 00:00:00.010000+00:00,Group 5,Resource09,2011-10-25 01:06:40.020000+00:00,task-44619,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-09 14:16:10.879000+00:00 +Internet,LEFT_case-10183,2013-01-02 00:00:00+00:00,General,,2011-12-20 00:00:00.010000+00:00,Group 5,Resource09,2011-10-25 01:06:40.020000+00:00,task-49577,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-09 14:17:02.175000+00:00 +Internet,LEFT_case-10183,2013-01-02 00:00:00+00:00,General,,2011-12-20 00:00:00.010000+00:00,Group 5,Resource09,2011-10-25 01:06:40.020000+00:00,task-49576,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-09 14:17:35.863000+00:00 +Internet,LEFT_case-10194,2011-12-22 01:06:40+00:00,General,2012-01-17 11:28:46.518000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource02,2011-10-05 01:06:40.020000+00:00,task-44570,Confirmation of receipt,complete,EMPTY,admin2,2012-01-17 11:28:47.373000+00:00 +Internet,LEFT_case-10195,2011-12-22 01:06:40+00:00,General,2012-01-17 11:29:38.198000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource02,2011-10-05 01:06:40.020000+00:00,task-44573,Confirmation of receipt,complete,EMPTY,admin2,2012-01-17 11:29:39.271000+00:00 +Internet,LEFT_case-10196,2011-12-28 00:00:00+00:00,General,2011-12-23 16:08:22.587000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource23,2011-10-12 01:06:40.020000+00:00,task-44626,Confirmation of receipt,complete,EMPTY,Resource23,2011-11-07 08:53:41.967000+00:00 +Internet,LEFT_case-10196,2011-12-28 00:00:00+00:00,General,2011-12-23 16:08:22.587000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource23,2011-10-12 01:06:40.020000+00:00,task-45501,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-11-07 08:59:55.396000+00:00 +Internet,LEFT_case-10196,2011-12-28 00:00:00+00:00,General,2011-12-23 16:08:22.587000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource23,2011-10-12 01:06:40.020000+00:00,task-45500,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-11-07 09:03:53.415000+00:00 +Internet,LEFT_case-10198,2011-12-21 01:06:40+00:00,General,2011-12-07 08:50:52.710000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-26 01:06:40.020000+00:00,task-44868,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-07 15:41:35.421000+00:00 +Internet,LEFT_case-10198,2011-12-21 01:06:40+00:00,General,2011-12-07 08:50:52.710000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-26 01:06:40.020000+00:00,task-45627,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-07 15:42:00.650000+00:00 +Internet,LEFT_case-10198,2011-12-21 01:06:40+00:00,General,2011-12-07 08:50:52.710000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-26 01:06:40.020000+00:00,task-45631,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-07 15:42:53.160000+00:00 +Desk,LEFT_case-10199,2011-12-13 01:06:40+00:00,General,2011-12-07 15:23:56.316000+00:00,2011-12-13 01:06:40.010000+00:00,Group 5,Resource13,2011-10-18 01:06:40.020000+00:00,task-44710,Confirmation of receipt,complete,EMPTY,Resource13,2011-10-31 12:27:03.433000+00:00 +Desk,LEFT_case-10199,2011-12-13 01:06:40+00:00,General,2011-12-07 15:23:56.316000+00:00,2011-12-13 01:06:40.010000+00:00,Group 5,Resource13,2011-10-18 01:06:40.020000+00:00,task-45154,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-10-31 12:29:26.336000+00:00 +Desk,LEFT_case-10199,2011-12-13 01:06:40+00:00,General,2011-12-07 15:23:56.316000+00:00,2011-12-13 01:06:40.010000+00:00,Group 5,Resource13,2011-10-18 01:06:40.020000+00:00,task-45153,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-10-31 12:30:58.868000+00:00 +Desk,LEFT_case-10202,2012-01-11 00:00:00+00:00,General,2012-01-09 16:52:03.253000+00:00,2012-01-11 00:00:00.010000+00:00,Group 5,Resource23,2011-10-24 01:06:40.020000+00:00,task-44758,Confirmation of receipt,complete,EMPTY,Resource23,2011-11-11 11:26:45.553000+00:00 +Desk,LEFT_case-10202,2012-01-11 00:00:00+00:00,General,2012-01-09 16:52:03.253000+00:00,2012-01-11 00:00:00.010000+00:00,Group 5,Resource23,2011-10-24 01:06:40.020000+00:00,task-46357,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-11-11 11:27:35.312000+00:00 +Desk,LEFT_case-10202,2012-01-11 00:00:00+00:00,General,2012-01-09 16:52:03.253000+00:00,2012-01-11 00:00:00.010000+00:00,Group 5,Resource23,2011-10-24 01:06:40.020000+00:00,task-46356,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-11-11 11:28:54.141000+00:00 +Internet,LEFT_case-10210,2011-12-22 01:06:40+00:00,General,2011-11-02 16:23:21.225000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource01,2011-10-27 01:06:40.020000+00:00,task-44918,Confirmation of receipt,complete,EMPTY,admin2,2011-11-02 16:23:22.365000+00:00 +Internet,LEFT_case-10211,2011-12-22 01:06:40+00:00,General,2011-11-21 13:48:22.259000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-44920,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-07 16:10:25.162000+00:00 +Internet,LEFT_case-10211,2011-12-22 01:06:40+00:00,General,2011-11-21 13:48:22.259000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45663,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-07 16:11:03.116000+00:00 +Internet,LEFT_case-10211,2011-12-22 01:06:40+00:00,General,2011-11-21 13:48:22.259000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45662,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-07 16:11:33.028000+00:00 +Internet,LEFT_case-10218,2011-12-22 01:06:40+00:00,General,2011-12-07 08:59:51.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-44926,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-07 16:38:30.783000+00:00 +Internet,LEFT_case-10218,2011-12-22 01:06:40+00:00,General,2011-12-07 08:59:51.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45683,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-07 16:40:14.204000+00:00 +Internet,LEFT_case-10218,2011-12-22 01:06:40+00:00,General,2011-12-07 08:59:51.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45682,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-07 16:40:42.920000+00:00 +Internet,LEFT_case-10220,2011-12-22 01:06:40+00:00,General,2011-12-07 09:17:33.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-44928,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-08 09:00:30.827000+00:00 +Internet,LEFT_case-10220,2011-12-22 01:06:40+00:00,General,2011-12-07 09:17:33.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45707,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-08 09:01:39.235000+00:00 +Internet,LEFT_case-10220,2011-12-22 01:06:40+00:00,General,2011-12-07 09:17:33.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45706,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-08 09:02:13.352000+00:00 +Internet,LEFT_case-10221,2011-12-22 01:06:40+00:00,General,2011-12-12 15:03:53.791000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-44932,Confirmation of receipt,complete,EMPTY,Resource14,2011-11-29 12:27:58.006000+00:00 +Internet,LEFT_case-10221,2011-12-22 01:06:40+00:00,General,2011-12-12 15:03:53.791000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-48454,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-11-29 12:30:24.691000+00:00 +Internet,LEFT_case-10221,2011-12-22 01:06:40+00:00,General,2011-12-12 15:03:53.791000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-48453,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-11-29 12:41:42.876000+00:00 +Internet,LEFT_case-10222,2011-12-22 00:00:00+00:00,General,2012-01-05 16:07:21.119000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource22,2011-10-27 01:06:40.020000+00:00,task-44933,Confirmation of receipt,complete,EMPTY,Resource22,2011-11-24 14:48:41.587000+00:00 +Internet,LEFT_case-10222,2011-12-22 00:00:00+00:00,General,2012-01-05 16:07:21.119000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource22,2011-10-27 01:06:40.020000+00:00,task-47895,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-11-24 14:50:25.478000+00:00 +Internet,LEFT_case-10222,2011-12-22 00:00:00+00:00,General,2012-01-05 16:07:21.119000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource22,2011-10-27 01:06:40.020000+00:00,task-47891,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-11-24 15:25:55.356000+00:00 +Internet,LEFT_case-10223,2011-12-22 00:00:00+00:00,General,2011-12-19 08:48:52.854000+00:00,2011-12-22 00:00:00.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-44935,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-08 09:18:47.312000+00:00 +Internet,LEFT_case-10223,2011-12-22 00:00:00+00:00,General,2011-12-19 08:48:52.854000+00:00,2011-12-22 00:00:00.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45742,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-08 09:20:41.418000+00:00 +Internet,LEFT_case-10223,2011-12-22 00:00:00+00:00,General,2011-12-19 08:48:52.854000+00:00,2011-12-22 00:00:00.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45741,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-08 09:21:16.142000+00:00 +Internet,LEFT_case-10225,2011-12-22 00:00:00+00:00,General,2012-01-18 12:34:02.740000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-45089,Confirmation of receipt,complete,EMPTY,Resource14,2011-12-07 09:11:29.887000+00:00 +Internet,LEFT_case-10225,2011-12-22 00:00:00+00:00,General,2012-01-18 12:34:02.740000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-49272,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-12-07 10:01:02.208000+00:00 +Internet,LEFT_case-10225,2011-12-22 00:00:00+00:00,General,2012-01-18 12:34:02.740000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-49296,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-12-07 10:05:05.939000+00:00 +Internet,LEFT_case-10228,2012-01-16 01:06:40+00:00,Customer contact,2011-10-31 10:14:34.772000+00:00,2012-01-16 01:06:40.010000+00:00,,admin3,2011-10-28 01:06:40.020000+00:00,task-45092,Confirmation of receipt,complete,Group 1,admin2,2011-10-31 10:14:35.980000+00:00 +Internet,LEFT_case-10232,2011-12-23 01:06:40+00:00,General,2011-12-14 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource01,2011-10-28 01:06:40.020000+00:00,task-45094,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-07 12:16:57.518000+00:00 +Internet,LEFT_case-10232,2011-12-23 01:06:40+00:00,General,2011-12-14 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource01,2011-10-28 01:06:40.020000+00:00,task-49337,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-07 12:21:05.443000+00:00 +Internet,LEFT_case-10232,2011-12-23 01:06:40+00:00,General,2011-12-14 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource01,2011-10-28 01:06:40.020000+00:00,task-49333,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-07 12:21:51.193000+00:00 +Internet,LEFT_case-10244,2012-01-16 01:06:40+00:00,Customer contact,2011-11-02 16:13:15.190000+00:00,2012-01-16 01:06:40.010000+00:00,,admin3,2011-10-29 01:06:40.020000+00:00,task-45408,Confirmation of receipt,complete,Group 1,admin2,2011-11-02 16:13:16.366000+00:00 +Internet,LEFT_case-10259,2011-12-26 01:06:40+00:00,General,2011-12-07 14:16:29.410000+00:00,2011-12-26 01:06:40.010000+00:00,Group 5,Resource09,2011-10-31 01:06:40.010000+00:00,task-45351,Confirmation of receipt,complete,EMPTY,admin2,2011-12-07 14:16:30.384000+00:00 +Internet,LEFT_case-10263,2011-12-26 01:06:40+00:00,General,,2011-12-26 01:06:40.010000+00:00,Group 5,Resource12,2011-10-31 01:06:40.010000+00:00,task-45829,Confirmation of receipt,complete,EMPTY,Resource12,2011-11-18 14:15:19.355000+00:00 +Internet,LEFT_case-10263,2011-12-26 01:06:40+00:00,General,,2011-12-26 01:06:40.010000+00:00,Group 5,Resource12,2011-10-31 01:06:40.010000+00:00,task-47275,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-11-18 14:17:30.382000+00:00 +Internet,LEFT_case-10263,2011-12-26 01:06:40+00:00,General,,2011-12-26 01:06:40.010000+00:00,Group 5,Resource12,2011-10-31 01:06:40.010000+00:00,task-47272,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-11-29 14:23:32.990000+00:00 +Internet,LEFT_case-10266,2011-12-26 01:06:40+00:00,General,2011-11-15 11:45:02.515000+00:00,2011-12-26 01:06:40.010000+00:00,Group 5,Resource06,2011-10-31 01:06:40.010000+00:00,task-45368,Confirmation of receipt,complete,EMPTY,admin2,2011-11-15 11:45:03.544000+00:00 +Internet,LEFT_case-10273,2011-12-27 01:06:40+00:00,General,2011-12-09 10:19:24.639000+00:00,2011-12-27 01:06:40.010000+00:00,Group 5,Resource04,2011-11-01 01:06:40.010000+00:00,task-45420,Confirmation of receipt,complete,EMPTY,admin2,2011-12-09 10:19:25.642000+00:00 +Internet,LEFT_case-10284,2011-12-28 01:06:40+00:00,General,2011-12-07 09:34:15.575000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45606,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-09 10:10:47.105000+00:00 +Internet,LEFT_case-10284,2011-12-28 01:06:40+00:00,General,2011-12-07 09:34:15.575000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45908,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-09 10:11:19.508000+00:00 +Internet,LEFT_case-10284,2011-12-28 01:06:40+00:00,General,2011-12-07 09:34:15.575000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45910,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-09 10:12:31.413000+00:00 +Post,LEFT_case-10286,2011-12-23 01:06:40+00:00,General,2011-12-07 09:11:03.638000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-28 01:06:40.020000+00:00,task-45479,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-09 09:19:20.905000+00:00 +Post,LEFT_case-10286,2011-12-23 01:06:40+00:00,General,2011-12-07 09:11:03.638000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-28 01:06:40.020000+00:00,task-45887,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-09 09:22:39.816000+00:00 +Post,LEFT_case-10286,2011-12-23 01:06:40+00:00,General,2011-12-07 09:11:03.638000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-28 01:06:40.020000+00:00,task-45886,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-09 09:23:13.487000+00:00 +Internet,LEFT_case-10287,2011-12-28 00:00:00+00:00,General,2011-12-23 14:11:59.502000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45580,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-09 10:36:08.748000+00:00 +Internet,LEFT_case-10287,2011-12-28 00:00:00+00:00,General,2011-12-23 14:11:59.502000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45931,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-09 10:36:44.917000+00:00 +Internet,LEFT_case-10287,2011-12-28 00:00:00+00:00,General,2011-12-23 14:11:59.502000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45930,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-09 10:37:15.027000+00:00 +Internet,LEFT_case-10289,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource06,2011-11-02 01:06:40.010000+00:00,task-45524,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-10 11:33:31.398000+00:00 +Internet,LEFT_case-10289,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource06,2011-11-02 01:06:40.010000+00:00,task-46228,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-10 11:38:11.514000+00:00 +Internet,LEFT_case-10289,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource06,2011-11-02 01:06:40.010000+00:00,task-46223,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-10 11:39:49.369000+00:00 +Internet,LEFT_case-10291,2011-12-28 01:06:40+00:00,General,2011-11-17 15:25:45.174000+00:00,2011-12-28 01:06:40.010000+00:00,Group 2,Resource03,2011-11-02 01:06:40.010000+00:00,task-45419,Confirmation of receipt,complete,EMPTY,admin2,2011-11-17 15:25:46.106000+00:00 +Internet,LEFT_case-10297,2011-12-28 01:06:40+00:00,General,2011-12-07 10:53:41.781000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45581,Confirmation of receipt,complete,EMPTY,Resource21,2011-11-09 12:23:28.314000+00:00 +Internet,LEFT_case-10297,2011-12-28 01:06:40+00:00,General,2011-12-07 10:53:41.781000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45989,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-11-09 12:24:19.850000+00:00 +Internet,LEFT_case-10297,2011-12-28 01:06:40+00:00,General,2011-12-07 10:53:41.781000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45988,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-11-09 12:42:02.828000+00:00 +Internet,LEFT_case-10299,2011-12-28 01:06:40+00:00,General,2011-12-13 07:41:22.236000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45582,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-09 11:01:38.475000+00:00 +Internet,LEFT_case-10299,2011-12-28 01:06:40+00:00,General,2011-12-13 07:41:22.236000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45951,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-09 11:02:18.044000+00:00 +Internet,LEFT_case-10299,2011-12-28 01:06:40+00:00,General,2011-12-13 07:41:22.236000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45950,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-09 11:03:10.328000+00:00 +Internet,LEFT_case-10300,2011-12-28 01:06:40+00:00,General,2011-12-13 07:47:04.800000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45583,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-10 10:34:14.137000+00:00 +Internet,LEFT_case-10300,2011-12-28 01:06:40+00:00,General,2011-12-13 07:47:04.800000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-46175,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-10 10:34:50.827000+00:00 +Internet,LEFT_case-10300,2011-12-28 01:06:40+00:00,General,2011-12-13 07:47:04.800000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-46174,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-10 10:35:24.410000+00:00 +Internet,LEFT_case-10306,2011-12-28 01:06:40+00:00,General,2011-12-21 13:52:37.326000+00:00,2011-12-28 01:06:40.010000+00:00,Group 5,Resource08,2011-11-02 01:06:40.010000+00:00,task-45418,Confirmation of receipt,complete,EMPTY,admin2,2011-12-21 13:52:38.616000+00:00 +Internet,LEFT_case-10322,2011-12-30 01:06:40+00:00,General,2011-12-13 07:51:46.479000+00:00,2011-12-30 01:06:40.010000+00:00,Group 8,Resource11,2011-11-04 01:06:40.010000+00:00,task-45613,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-15 08:52:21.307000+00:00 +Internet,LEFT_case-10322,2011-12-30 01:06:40+00:00,General,2011-12-13 07:51:46.479000+00:00,2011-12-30 01:06:40.010000+00:00,Group 8,Resource11,2011-11-04 01:06:40.010000+00:00,task-46666,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-15 08:54:00.462000+00:00 +Internet,LEFT_case-10322,2011-12-30 01:06:40+00:00,General,2011-12-13 07:51:46.479000+00:00,2011-12-30 01:06:40.010000+00:00,Group 8,Resource11,2011-11-04 01:06:40.010000+00:00,task-46665,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-15 08:54:28.851000+00:00 +Internet,LEFT_case-10324,2011-12-30 13:03:40.343000+00:00,General,,2011-12-30 13:03:40.343000+00:00,,Resource26,2011-11-04 13:03:40.343000+00:00,task-45433,Confirmation of receipt,complete,Group 1,Resource26,2011-11-04 13:05:32.854000+00:00 +Internet,LEFT_case-10324,2011-12-30 13:03:40.343000+00:00,General,,2011-12-30 13:03:40.343000+00:00,,Resource26,2011-11-04 13:03:40.343000+00:00,task-45435,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-11-08 11:03:26.870000+00:00 +Internet,LEFT_case-10326,2012-02-05 00:00:00+00:00,General,,2011-12-30 00:00:00.010000+00:00,Group 5,Resource09,2011-11-04 01:06:40.010000+00:00,task-45813,Confirmation of receipt,complete,EMPTY,Resource09,2011-11-30 15:55:18.032000+00:00 +Internet,LEFT_case-10326,2012-02-05 00:00:00+00:00,General,,2011-12-30 00:00:00.010000+00:00,Group 5,Resource09,2011-11-04 01:06:40.010000+00:00,task-48676,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-11-30 15:57:16.513000+00:00 +Internet,LEFT_case-10326,2012-02-05 00:00:00+00:00,General,,2011-12-30 00:00:00.010000+00:00,Group 5,Resource09,2011-11-04 01:06:40.010000+00:00,task-48675,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-11-30 15:58:23.761000+00:00 +Internet,LEFT_case-10336,2011-12-31 00:00:00+00:00,General,2011-12-20 10:45:09.086000+00:00,2011-12-31 00:00:00.010000+00:00,Group 8,Resource11,2011-11-05 01:06:40.010000+00:00,task-45822,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-17 15:56:50.215000+00:00 +Internet,LEFT_case-10336,2011-12-31 00:00:00+00:00,General,2011-12-20 10:45:09.086000+00:00,2011-12-31 00:00:00.010000+00:00,Group 8,Resource11,2011-11-05 01:06:40.010000+00:00,task-47043,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-17 15:57:53.421000+00:00 +Internet,LEFT_case-10336,2011-12-31 00:00:00+00:00,General,2011-12-20 10:45:09.086000+00:00,2011-12-31 00:00:00.010000+00:00,Group 8,Resource11,2011-11-05 01:06:40.010000+00:00,task-47041,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-17 15:58:38.333000+00:00 +Internet,LEFT_case-10339,2011-12-31 01:06:40+00:00,General,,2011-12-31 01:06:40.010000+00:00,Group 5,Resource06,2011-11-05 01:06:40.010000+00:00,task-45831,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-14 13:52:08.621000+00:00 +Internet,LEFT_case-10339,2011-12-31 01:06:40+00:00,General,,2011-12-31 01:06:40.010000+00:00,Group 5,Resource06,2011-11-05 01:06:40.010000+00:00,task-46549,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-14 13:55:44.472000+00:00 +Internet,LEFT_case-10339,2011-12-31 01:06:40+00:00,General,,2011-12-31 01:06:40.010000+00:00,Group 5,Resource06,2011-11-05 01:06:40.010000+00:00,task-46543,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-14 13:57:03.737000+00:00 +Internet,LEFT_case-10350,2012-01-01 01:06:40+00:00,General,2011-12-07 09:48:15.041000+00:00,2012-01-01 01:06:40.010000+00:00,Group 8,Resource11,2011-11-06 01:06:40.010000+00:00,task-45830,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-10 15:10:55.045000+00:00 +Internet,LEFT_case-10350,2012-01-01 01:06:40+00:00,General,2011-12-07 09:48:15.041000+00:00,2012-01-01 01:06:40.010000+00:00,Group 8,Resource11,2011-11-06 01:06:40.010000+00:00,task-46271,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-10 15:11:31.757000+00:00 +Internet,LEFT_case-10350,2012-01-01 01:06:40+00:00,General,2011-12-07 09:48:15.041000+00:00,2012-01-01 01:06:40.010000+00:00,Group 8,Resource11,2011-11-06 01:06:40.010000+00:00,task-46270,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-10 15:12:02.898000+00:00 +Internet,LEFT_case-10352,2012-01-01 01:06:40+00:00,General,2011-11-18 10:49:10.069000+00:00,2012-01-01 01:06:40.010000+00:00,Group 2,Resource20,2011-11-06 01:06:40.010000+00:00,task-45832,Confirmation of receipt,complete,EMPTY,Resource20,2011-11-14 10:50:37.798000+00:00 +Internet,LEFT_case-10352,2012-01-01 01:06:40+00:00,General,2011-11-18 10:49:10.069000+00:00,2012-01-01 01:06:40.010000+00:00,Group 2,Resource20,2011-11-06 01:06:40.010000+00:00,task-46471,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-11-14 11:59:27.024000+00:00 +Internet,LEFT_case-10352,2012-01-01 01:06:40+00:00,General,2011-11-18 10:49:10.069000+00:00,2012-01-01 01:06:40.010000+00:00,Group 2,Resource20,2011-11-06 01:06:40.010000+00:00,task-46470,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-11-14 12:00:44.335000+00:00 +Internet,LEFT_case-10354,2012-01-02 08:47:37.906000+00:00,Customer contact,2011-11-07 08:48:38.223000+00:00,2012-01-02 08:47:37.906000+00:00,,test,2011-11-07 08:47:37.906000+00:00,task-45496,Confirmation of receipt,complete,Group 1,admin2,2011-11-07 08:48:39.290000+00:00 +Internet,LEFT_case-10357,2012-01-02 01:06:40+00:00,General,2011-11-14 09:21:48.989000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource06,2011-11-07 01:06:40.010000+00:00,task-45881,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-09 11:29:46.788000+00:00 +Internet,LEFT_case-10357,2012-01-02 01:06:40+00:00,General,2011-11-14 09:21:48.989000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource06,2011-11-07 01:06:40.010000+00:00,task-45963,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-09 11:30:27.273000+00:00 +Internet,LEFT_case-10357,2012-01-02 01:06:40+00:00,General,2011-11-14 09:21:48.989000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource06,2011-11-07 01:06:40.010000+00:00,task-45962,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-09 11:31:04.655000+00:00 +Internet,LEFT_case-10357,2012-01-02 01:06:40+00:00,General,2011-11-14 09:21:48.989000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource06,2011-11-07 01:06:40.010000+00:00,task-45966,T11 Create document X request unlicensed,complete,Group 1,Resource06,2011-11-09 11:34:00.271000+00:00 +Internet,LEFT_case-10357,2012-01-02 01:06:40+00:00,General,2011-11-14 09:21:48.989000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource06,2011-11-07 01:06:40.010000+00:00,task-45968,T14 Determine document X request unlicensed,complete,Group 3,Resource06,2011-11-09 11:40:39.482000+00:00 +Internet,LEFT_case-10360,2012-01-02 01:06:40+00:00,General,2011-12-05 09:42:17.930000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource13,2011-11-07 01:06:40.010000+00:00,task-45986,Confirmation of receipt,complete,EMPTY,admin2,2011-12-05 09:42:18.947000+00:00 +Internet,LEFT_case-10375,2012-01-02 00:00:00+00:00,General,2012-01-18 11:32:31.001000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 01:06:40.010000+00:00,task-46071,Confirmation of receipt,complete,EMPTY,Resource14,2011-11-17 14:30:18.360000+00:00 +Internet,LEFT_case-10375,2012-01-02 00:00:00+00:00,General,2012-01-18 11:32:31.001000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 01:06:40.010000+00:00,task-47000,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-11-17 14:49:24.984000+00:00 +Internet,LEFT_case-10375,2012-01-02 00:00:00+00:00,General,2012-01-18 11:32:31.001000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 01:06:40.010000+00:00,task-46993,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-11-17 15:23:53.401000+00:00 +Post,LEFT_case-10378,2012-03-13 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-10-26 01:06:40.020000+00:00,task-45765,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-08 12:51:26.998000+00:00 +Post,LEFT_case-10378,2012-03-13 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-10-26 01:06:40.020000+00:00,task-45795,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-08 12:52:07.613000+00:00 +Post,LEFT_case-10378,2012-03-13 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-10-26 01:06:40.020000+00:00,task-45794,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-08 12:52:43.378000+00:00 +Internet,LEFT_case-10384,2012-01-03 00:00:00+00:00,General,2011-12-30 14:58:37.454000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource23,2011-11-08 01:06:40.010000+00:00,task-46092,Confirmation of receipt,complete,EMPTY,Resource23,2011-11-25 11:17:52.239000+00:00 +Internet,LEFT_case-10384,2012-01-03 00:00:00+00:00,General,2011-12-30 14:58:37.454000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource23,2011-11-08 01:06:40.010000+00:00,task-48056,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-11-25 11:19:28.587000+00:00 +Internet,LEFT_case-10384,2012-01-03 00:00:00+00:00,General,2011-12-30 14:58:37.454000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource23,2011-11-08 01:06:40.010000+00:00,task-48055,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-11-25 11:22:40.036000+00:00 +Internet,LEFT_case-10392,2012-01-04 00:00:00+00:00,General,2011-12-22 15:18:30.995000+00:00,2012-01-04 00:00:00.010000+00:00,Group 8,Resource11,2011-11-09 01:06:40.010000+00:00,task-46220,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 09:09:30.172000+00:00 +Internet,LEFT_case-10392,2012-01-04 00:00:00+00:00,General,2011-12-22 15:18:30.995000+00:00,2012-01-04 00:00:00.010000+00:00,Group 8,Resource11,2011-11-09 01:06:40.010000+00:00,task-47125,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 09:18:08.748000+00:00 +Internet,LEFT_case-10392,2012-01-04 00:00:00+00:00,General,2011-12-22 15:18:30.995000+00:00,2012-01-04 00:00:00.010000+00:00,Group 8,Resource11,2011-11-09 01:06:40.010000+00:00,task-47124,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 09:18:39.882000+00:00 +Internet,LEFT_case-10392,2012-01-04 00:00:00+00:00,General,2011-12-22 15:18:30.995000+00:00,2012-01-04 00:00:00.010000+00:00,Group 8,Resource11,2011-11-09 01:06:40.010000+00:00,task-47128,T16 Report reasons to hold request,complete,Group 1,Resource03,2011-11-18 09:19:33.548000+00:00 +Internet,LEFT_case-10392,2012-01-04 00:00:00+00:00,General,2011-12-22 15:18:30.995000+00:00,2012-01-04 00:00:00.010000+00:00,Group 8,Resource11,2011-11-09 01:06:40.010000+00:00,task-47130,T19 Determine report Y to stop indication,complete,Group 3,Resource03,2011-11-18 09:21:19.608000+00:00 +Internet,LEFT_case-10394,2012-01-04 01:06:40+00:00,General,2011-12-07 15:44:34.237000+00:00,2012-01-04 01:06:40.010000+00:00,Group 7,Resource35,2011-11-09 01:06:40.010000+00:00,task-46236,Confirmation of receipt,complete,EMPTY,admin2,2011-12-07 15:44:35.181000+00:00 +Internet,LEFT_case-10407,2012-01-05 01:06:40+00:00,General,2011-11-18 11:02:10.932000+00:00,2012-01-05 01:06:40.010000+00:00,Group 2,Resource20,2011-11-10 01:06:40.010000+00:00,task-46221,Confirmation of receipt,complete,EMPTY,Resource20,2011-11-14 12:58:01.365000+00:00 +Internet,LEFT_case-10407,2012-01-05 01:06:40+00:00,General,2011-11-18 11:02:10.932000+00:00,2012-01-05 01:06:40.010000+00:00,Group 2,Resource20,2011-11-10 01:06:40.010000+00:00,task-46517,T04 Determine confirmation of receipt,complete,EMPTY,Resource20,2011-11-14 13:06:50.609000+00:00 +Internet,LEFT_case-10407,2012-01-05 01:06:40+00:00,General,2011-11-18 11:02:10.932000+00:00,2012-01-05 01:06:40.010000+00:00,Group 2,Resource20,2011-11-10 01:06:40.010000+00:00,task-46516,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-11-14 13:09:12.841000+00:00 +Internet,LEFT_case-10410,2012-01-05 01:06:40+00:00,General,,2012-01-05 01:06:40.010000+00:00,Group 5,Resource09,2011-11-10 01:06:40.010000+00:00,task-47381,Confirmation of receipt,complete,EMPTY,Resource09,2011-11-30 14:46:15.565000+00:00 +Internet,LEFT_case-10410,2012-01-05 01:06:40+00:00,General,,2012-01-05 01:06:40.010000+00:00,Group 5,Resource09,2011-11-10 01:06:40.010000+00:00,task-48647,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-11-30 14:47:52.207000+00:00 +Internet,LEFT_case-10410,2012-01-05 01:06:40+00:00,General,,2012-01-05 01:06:40.010000+00:00,Group 5,Resource09,2011-11-10 01:06:40.010000+00:00,task-48646,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-11-30 16:32:41.199000+00:00 +Internet,LEFT_case-10459,2012-01-09 01:06:40+00:00,General,2011-11-25 09:54:28.893000+00:00,2012-01-09 01:06:40.010000+00:00,Group 5,Resource08,2011-11-14 01:06:40.010000+00:00,task-46654,Confirmation of receipt,complete,EMPTY,Resource08,2011-11-22 14:30:37.731000+00:00 +Internet,LEFT_case-10459,2012-01-09 01:06:40+00:00,General,2011-11-25 09:54:28.893000+00:00,2012-01-09 01:06:40.010000+00:00,Group 5,Resource08,2011-11-14 01:06:40.010000+00:00,task-47614,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-11-22 14:38:58.795000+00:00 +Internet,LEFT_case-10459,2012-01-09 01:06:40+00:00,General,2011-11-25 09:54:28.893000+00:00,2012-01-09 01:06:40.010000+00:00,Group 5,Resource08,2011-11-14 01:06:40.010000+00:00,task-47613,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-11-22 14:45:24.199000+00:00 +Internet,LEFT_case-10460,2012-01-09 01:06:40+00:00,General,2011-11-25 09:31:43.698000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource20,2011-11-14 01:06:40.010000+00:00,task-46678,Confirmation of receipt,complete,EMPTY,Resource20,2011-11-22 15:03:05.355000+00:00 +Internet,LEFT_case-10460,2012-01-09 01:06:40+00:00,General,2011-11-25 09:31:43.698000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource20,2011-11-14 01:06:40.010000+00:00,task-47646,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-11-22 15:03:59.803000+00:00 +Internet,LEFT_case-10460,2012-01-09 01:06:40+00:00,General,2011-11-25 09:31:43.698000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource20,2011-11-14 01:06:40.010000+00:00,task-47644,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-11-22 15:09:28.407000+00:00 +Internet,LEFT_case-10461,2012-01-09 01:06:40+00:00,General,2011-11-23 14:06:55.068000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource03,2011-11-14 01:06:40.010000+00:00,task-46694,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 09:53:38.081000+00:00 +Internet,LEFT_case-10461,2012-01-09 01:06:40+00:00,General,2011-11-23 14:06:55.068000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource03,2011-11-14 01:06:40.010000+00:00,task-47153,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 09:54:20.930000+00:00 +Internet,LEFT_case-10461,2012-01-09 01:06:40+00:00,General,2011-11-23 14:06:55.068000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource03,2011-11-14 01:06:40.010000+00:00,task-47152,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 09:55:15.110000+00:00 +Internet,LEFT_case-10461,2012-01-09 01:06:40+00:00,General,2011-11-23 14:06:55.068000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource03,2011-11-14 01:06:40.010000+00:00,task-47157,T16 Report reasons to hold request,complete,Group 1,Resource03,2011-11-18 09:56:06.771000+00:00 +Internet,LEFT_case-10461,2012-01-09 01:06:40+00:00,General,2011-11-23 14:06:55.068000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource03,2011-11-14 01:06:40.010000+00:00,task-47159,T19 Determine report Y to stop indication,complete,Group 3,Resource03,2011-11-18 09:56:44.304000+00:00 +Internet,LEFT_case-10463,2012-02-29 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-11-14 01:06:40.010000+00:00,task-46759,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-25 16:09:50.422000+00:00 +Internet,LEFT_case-10463,2012-02-29 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-11-14 01:06:40.010000+00:00,task-48123,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-25 16:10:39.345000+00:00 +Internet,LEFT_case-10463,2012-02-29 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-11-14 01:06:40.010000+00:00,task-48122,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-25 16:15:35.699000+00:00 +Internet,LEFT_case-10464,2012-02-20 00:00:00+00:00,General,,2012-02-20 00:00:00.010000+00:00,Group 5,Resource09,2011-11-14 01:06:40.010000+00:00,task-47422,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-15 14:10:18.508000+00:00 +Internet,LEFT_case-10464,2012-02-20 00:00:00+00:00,General,,2012-02-20 00:00:00.010000+00:00,Group 5,Resource09,2011-11-14 01:06:40.010000+00:00,task-50012,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-15 14:10:56.673000+00:00 +Internet,LEFT_case-10464,2012-02-20 00:00:00+00:00,General,,2012-02-20 00:00:00.010000+00:00,Group 5,Resource09,2011-11-14 01:06:40.010000+00:00,task-50027,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-15 14:22:32.946000+00:00 +Internet,LEFT_case-10472,2012-01-10 01:06:40+00:00,General,2011-12-13 08:01:09.294000+00:00,2012-01-10 01:06:40.010000+00:00,Group 8,Resource11,2011-11-15 01:06:40.010000+00:00,task-46765,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-17 16:42:14.396000+00:00 +Internet,LEFT_case-10472,2012-01-10 01:06:40+00:00,General,2011-12-13 08:01:09.294000+00:00,2012-01-10 01:06:40.010000+00:00,Group 8,Resource11,2011-11-15 01:06:40.010000+00:00,task-47097,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-17 16:42:51.761000+00:00 +Internet,LEFT_case-10472,2012-01-10 01:06:40+00:00,General,2011-12-13 08:01:09.294000+00:00,2012-01-10 01:06:40.010000+00:00,Group 8,Resource11,2011-11-15 01:06:40.010000+00:00,task-47096,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-17 16:43:24.256000+00:00 +Internet,LEFT_case-10473,2012-01-10 00:00:00+00:00,General,2012-01-09 16:41:15.601000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-46729,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-15 11:50:45.760000+00:00 +Internet,LEFT_case-10473,2012-01-10 00:00:00+00:00,General,2012-01-09 16:41:15.601000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-46745,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-15 11:51:56.604000+00:00 +Internet,LEFT_case-10473,2012-01-10 00:00:00+00:00,General,2012-01-09 16:41:15.601000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-46743,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-15 11:52:55.810000+00:00 +Internet,LEFT_case-10474,2012-01-10 00:00:00+00:00,General,2012-01-09 16:36:35.304000+00:00,2012-01-10 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-46762,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-28 09:15:12.675000+00:00 +Internet,LEFT_case-10474,2012-01-10 00:00:00+00:00,General,2012-01-09 16:36:35.304000+00:00,2012-01-10 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-48149,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-28 09:31:39.371000+00:00 +Internet,LEFT_case-10474,2012-01-10 00:00:00+00:00,General,2012-01-09 16:36:35.304000+00:00,2012-01-10 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-48144,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-28 09:32:25.848000+00:00 +Internet,LEFT_case-10479,2012-01-10 01:06:40+00:00,General,2011-11-18 11:14:22.481000+00:00,2012-01-10 01:06:40.010000+00:00,Group 2,Resource03,2011-11-15 01:06:40.010000+00:00,task-46766,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 10:39:14.337000+00:00 +Internet,LEFT_case-10479,2012-01-10 01:06:40+00:00,General,2011-11-18 11:14:22.481000+00:00,2012-01-10 01:06:40.010000+00:00,Group 2,Resource03,2011-11-15 01:06:40.010000+00:00,task-47186,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 10:58:40.012000+00:00 +Internet,LEFT_case-10479,2012-01-10 01:06:40+00:00,General,2011-11-18 11:14:22.481000+00:00,2012-01-10 01:06:40.010000+00:00,Group 2,Resource03,2011-11-15 01:06:40.010000+00:00,task-47185,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-11-18 11:14:23.398000+00:00 +Internet,LEFT_case-10483,2012-02-22 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-46826,Confirmation of receipt,complete,EMPTY,Resource02,2012-01-09 11:31:41.636000+00:00 +Internet,LEFT_case-10483,2012-02-22 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-51619,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2012-01-09 11:32:51.848000+00:00 +Internet,LEFT_case-10484,2012-02-22 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-46860,Confirmation of receipt,complete,EMPTY,Resource02,2012-01-09 12:11:30.587000+00:00 +Internet,LEFT_case-10484,2012-02-22 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-51629,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2012-01-09 12:12:57.161000+00:00 +Internet,LEFT_case-10487,2012-01-11 01:06:40+00:00,General,2011-12-07 09:56:05.674000+00:00,2012-01-11 01:06:40.010000+00:00,Group 8,Resource11,2011-11-16 01:06:40.010000+00:00,task-46867,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 12:02:46.930000+00:00 +Internet,LEFT_case-10487,2012-01-11 01:06:40+00:00,General,2011-12-07 09:56:05.674000+00:00,2012-01-11 01:06:40.010000+00:00,Group 8,Resource11,2011-11-16 01:06:40.010000+00:00,task-47212,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 12:03:27.687000+00:00 +Internet,LEFT_case-10487,2012-01-11 01:06:40+00:00,General,2011-12-07 09:56:05.674000+00:00,2012-01-11 01:06:40.010000+00:00,Group 8,Resource11,2011-11-16 01:06:40.010000+00:00,task-47211,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 12:04:04.405000+00:00 +Internet,LEFT_case-10489,2012-02-23 00:00:00+00:00,General,,2012-02-23 00:00:00.010000+00:00,Group 5,Resource02,2011-11-16 01:06:40.010000+00:00,task-46874,Confirmation of receipt,complete,EMPTY,Resource02,2011-12-01 14:44:04.954000+00:00 +Internet,LEFT_case-10489,2012-02-23 00:00:00+00:00,General,,2012-02-23 00:00:00.010000+00:00,Group 5,Resource02,2011-11-16 01:06:40.010000+00:00,task-48808,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-12-01 14:44:57.380000+00:00 +Internet,LEFT_case-10489,2012-02-23 00:00:00+00:00,General,,2012-02-23 00:00:00.010000+00:00,Group 5,Resource02,2011-11-16 01:06:40.010000+00:00,task-48807,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-12-01 14:47:15.322000+00:00 +Internet,LEFT_case-10492,2012-01-11 01:06:40+00:00,General,2011-11-22 10:25:17.026000+00:00,2012-01-11 01:06:40.010000+00:00,Group 2,Resource03,2011-11-16 01:06:40.010000+00:00,task-46950,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-22 09:52:39.368000+00:00 +Internet,LEFT_case-10492,2012-01-11 01:06:40+00:00,General,2011-11-22 10:25:17.026000+00:00,2012-01-11 01:06:40.010000+00:00,Group 2,Resource03,2011-11-16 01:06:40.010000+00:00,task-47492,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-22 09:53:51.826000+00:00 +Internet,LEFT_case-10492,2012-01-11 01:06:40+00:00,General,2011-11-22 10:25:17.026000+00:00,2012-01-11 01:06:40.010000+00:00,Group 2,Resource03,2011-11-16 01:06:40.010000+00:00,task-47491,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-22 09:55:09.933000+00:00 +Internet,LEFT_case-10497,2012-01-12 01:06:40+00:00,General,2011-12-13 07:56:25.045000+00:00,2012-01-12 01:06:40.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-46955,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 14:15:41.322000+00:00 +Internet,LEFT_case-10497,2012-01-12 01:06:40+00:00,General,2011-12-13 07:56:25.045000+00:00,2012-01-12 01:06:40.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47276,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 14:16:21.225000+00:00 +Internet,LEFT_case-10497,2012-01-12 01:06:40+00:00,General,2011-12-13 07:56:25.045000+00:00,2012-01-12 01:06:40.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47274,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 14:18:13.728000+00:00 +Internet,LEFT_case-10498,2012-01-12 00:00:00+00:00,General,2011-12-23 15:10:40.223000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-46958,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 14:41:16.794000+00:00 +Internet,LEFT_case-10498,2012-01-12 00:00:00+00:00,General,2011-12-23 15:10:40.223000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47302,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 14:41:55.081000+00:00 +Internet,LEFT_case-10498,2012-01-12 00:00:00+00:00,General,2011-12-23 15:10:40.223000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47301,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 14:54:15.830000+00:00 +Internet,LEFT_case-10499,2012-01-12 00:00:00+00:00,General,2011-12-23 15:35:14.426000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-46972,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 15:22:24.611000+00:00 +Internet,LEFT_case-10499,2012-01-12 00:00:00+00:00,General,2011-12-23 15:35:14.426000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47325,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 15:22:57.393000+00:00 +Internet,LEFT_case-10499,2012-01-12 00:00:00+00:00,General,2011-12-23 15:35:14.426000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47324,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 15:23:34.611000+00:00 +Internet,LEFT_case-10502,2012-01-12 00:00:00+00:00,General,2012-01-16 15:09:57.947000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-46996,Confirmation of receipt,complete,EMPTY,Resource13,2011-12-15 11:25:23.298000+00:00 +Internet,LEFT_case-10502,2012-01-12 00:00:00+00:00,General,2012-01-16 15:09:57.947000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-49961,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-12-15 11:26:41.370000+00:00 +Internet,LEFT_case-10502,2012-01-12 00:00:00+00:00,General,2012-01-16 15:09:57.947000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-49960,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-12-15 11:29:36.267000+00:00 +Internet,LEFT_case-10509,2012-01-04 01:06:40+00:00,General,2011-11-30 16:08:40.943000+00:00,2012-01-04 01:06:40.010000+00:00,Group 5,Resource05,2011-11-09 01:06:40.010000+00:00,task-47039,Confirmation of receipt,complete,EMPTY,Resource05,2011-11-28 09:50:57.605000+00:00 +Internet,LEFT_case-10509,2012-01-04 01:06:40+00:00,General,2011-11-30 16:08:40.943000+00:00,2012-01-04 01:06:40.010000+00:00,Group 5,Resource05,2011-11-09 01:06:40.010000+00:00,task-48167,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-11-28 09:51:19.170000+00:00 +Internet,LEFT_case-10509,2012-01-04 01:06:40+00:00,General,2011-11-30 16:08:40.943000+00:00,2012-01-04 01:06:40.010000+00:00,Group 5,Resource05,2011-11-09 01:06:40.010000+00:00,task-48169,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-11-28 09:52:31.415000+00:00 +Internet,LEFT_case-10511,2011-12-28 00:00:00+00:00,General,2011-12-07 09:39:48.523000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 00:00:00.010000+00:00,task-46990,Confirmation of receipt,complete,Group 1,Resource03,2011-11-17 15:11:00.004000+00:00 +Internet,LEFT_case-10511,2011-12-28 00:00:00+00:00,General,2011-12-07 09:39:48.523000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 00:00:00.010000+00:00,task-47011,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-17 15:11:43.109000+00:00 +Internet,LEFT_case-10511,2011-12-28 00:00:00+00:00,General,2011-12-07 09:39:48.523000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 00:00:00.010000+00:00,task-47010,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-17 15:16:28.264000+00:00 +Internet,LEFT_case-10512,2012-02-15 00:00:00+00:00,General,2012-01-19 14:41:04.746000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-47424,Confirmation of receipt,complete,EMPTY,Resource13,2011-11-30 21:02:08.700000+00:00 +Internet,LEFT_case-10512,2012-02-15 00:00:00+00:00,General,2012-01-19 14:41:04.746000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-48714,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-11-30 21:03:54.644000+00:00 +Internet,LEFT_case-10512,2012-02-15 00:00:00+00:00,General,2012-01-19 14:41:04.746000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-48713,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-11-30 21:05:25.227000+00:00 +Internet,LEFT_case-10514,2012-01-12 00:00:00+00:00,General,2012-01-18 11:59:00.881000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource09,2011-11-17 01:06:40.010000+00:00,task-47468,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-22 12:44:26.417000+00:00 +Internet,LEFT_case-10514,2012-01-12 00:00:00+00:00,General,2012-01-18 11:59:00.881000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource09,2011-11-17 01:06:40.010000+00:00,task-50642,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-22 12:45:30.961000+00:00 +Internet,LEFT_case-10514,2012-01-12 00:00:00+00:00,General,2012-01-18 11:59:00.881000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource09,2011-11-17 01:06:40.010000+00:00,task-50641,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-22 12:46:05.225000+00:00 +Internet,LEFT_case-10517,2012-01-12 00:00:00+00:00,General,2011-12-23 10:01:29.356000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47465,Confirmation of receipt,complete,EMPTY,Resource01,2011-11-24 15:28:31.455000+00:00 +Internet,LEFT_case-10517,2012-01-12 00:00:00+00:00,General,2011-12-23 10:01:29.356000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47943,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-11-24 15:29:09.116000+00:00 +Internet,LEFT_case-10517,2012-01-12 00:00:00+00:00,General,2011-12-23 10:01:29.356000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47942,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-11-24 15:29:52.922000+00:00 +Internet,LEFT_case-10526,2012-01-13 00:00:00+00:00,General,2011-12-23 11:25:49.557000+00:00,2012-01-13 00:00:00.010000+00:00,Group 8,Resource11,2011-11-18 01:06:40.010000+00:00,task-47466,Confirmation of receipt,complete,EMPTY,Resource01,2011-11-24 15:17:03.683000+00:00 +Internet,LEFT_case-10526,2012-01-13 00:00:00+00:00,General,2011-12-23 11:25:49.557000+00:00,2012-01-13 00:00:00.010000+00:00,Group 8,Resource11,2011-11-18 01:06:40.010000+00:00,task-47917,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-11-24 15:17:28.049000+00:00 +Internet,LEFT_case-10526,2012-01-13 00:00:00+00:00,General,2011-12-23 11:25:49.557000+00:00,2012-01-13 00:00:00.010000+00:00,Group 8,Resource11,2011-11-18 01:06:40.010000+00:00,task-47919,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-11-24 15:18:11.416000+00:00 +Internet,LEFT_case-10541,2012-01-16 01:06:40+00:00,General,2011-11-25 10:01:30.375000+00:00,2012-01-16 01:06:40.010000+00:00,Group 5,Resource08,2011-11-21 01:06:40.010000+00:00,task-47481,Confirmation of receipt,complete,EMPTY,Resource08,2011-11-24 11:39:46.582000+00:00 +Internet,LEFT_case-10541,2012-01-16 01:06:40+00:00,General,2011-11-25 10:01:30.375000+00:00,2012-01-16 01:06:40.010000+00:00,Group 5,Resource08,2011-11-21 01:06:40.010000+00:00,task-47807,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-11-24 11:48:07.308000+00:00 +Internet,LEFT_case-10541,2012-01-16 01:06:40+00:00,General,2011-11-25 10:01:30.375000+00:00,2012-01-16 01:06:40.010000+00:00,Group 5,Resource08,2011-11-21 01:06:40.010000+00:00,task-47803,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-11-24 11:53:15.660000+00:00 +Internet,LEFT_case-10542,2012-02-27 00:00:00+00:00,General,,2012-02-27 00:00:00.010000+00:00,Group 5,Resource02,2011-11-21 01:06:40.010000+00:00,task-47527,Confirmation of receipt,complete,EMPTY,Resource02,2012-01-17 11:24:14.147000+00:00 +Internet,LEFT_case-10542,2012-02-27 00:00:00+00:00,General,,2012-02-27 00:00:00.010000+00:00,Group 5,Resource02,2011-11-21 01:06:40.010000+00:00,task-52770,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2012-01-17 11:25:40.715000+00:00 +Internet,LEFT_case-10546,2011-12-28 00:00:00+00:00,General,2011-12-22 00:00:00.010000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource08,2011-11-02 01:06:40.010000+00:00,task-47387,Confirmation of receipt,complete,EMPTY,Resource08,2011-11-24 15:18:50.269000+00:00 +Internet,LEFT_case-10546,2011-12-28 00:00:00+00:00,General,2011-12-22 00:00:00.010000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource08,2011-11-02 01:06:40.010000+00:00,task-47930,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-11-24 15:21:12.700000+00:00 +Internet,LEFT_case-10546,2011-12-28 00:00:00+00:00,General,2011-12-22 00:00:00.010000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource08,2011-11-02 01:06:40.010000+00:00,task-47923,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-11-24 15:24:35.976000+00:00 +Internet,LEFT_case-10550,2012-01-16 01:06:40+00:00,General,2011-11-25 09:08:53.865000+00:00,2012-01-16 01:06:40.010000+00:00,Group 2,Resource20,2011-11-21 01:06:40.010000+00:00,task-47482,Confirmation of receipt,complete,EMPTY,Resource20,2011-11-22 13:48:53.252000+00:00 +Internet,LEFT_case-10550,2012-01-16 01:06:40+00:00,General,2011-11-25 09:08:53.865000+00:00,2012-01-16 01:06:40.010000+00:00,Group 2,Resource20,2011-11-21 01:06:40.010000+00:00,task-47569,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-11-22 13:49:42.964000+00:00 +Internet,LEFT_case-10550,2012-01-16 01:06:40+00:00,General,2011-11-25 09:08:53.865000+00:00,2012-01-16 01:06:40.010000+00:00,Group 2,Resource20,2011-11-21 01:06:40.010000+00:00,task-47568,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-11-22 13:50:35.789000+00:00 +Internet,LEFT_case-10551,2012-01-16 00:00:00+00:00,General,,2012-01-16 00:00:00.010000+00:00,Group 5,Resource09,2011-11-21 01:06:40.010000+00:00,task-47532,Confirmation of receipt,complete,EMPTY,Resource09,2012-01-11 12:00:05.791000+00:00 +Internet,LEFT_case-10551,2012-01-16 00:00:00+00:00,General,,2012-01-16 00:00:00.010000+00:00,Group 5,Resource09,2011-11-21 01:06:40.010000+00:00,task-51938,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2012-01-11 12:00:53.694000+00:00 +Internet,LEFT_case-10551,2012-01-16 00:00:00+00:00,General,,2012-01-16 00:00:00.010000+00:00,Group 5,Resource09,2011-11-21 01:06:40.010000+00:00,task-51941,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2012-01-11 12:04:31.551000+00:00 +Internet,LEFT_case-10555,2012-01-16 00:00:00+00:00,General,2011-12-23 12:04:26.129000+00:00,2012-01-16 00:00:00.010000+00:00,Group 8,Resource11,2011-11-21 01:06:40.010000+00:00,task-47544,Confirmation of receipt,complete,EMPTY,Resource01,2011-11-24 14:48:48.674000+00:00 +Internet,LEFT_case-10555,2012-01-16 00:00:00+00:00,General,2011-12-23 12:04:26.129000+00:00,2012-01-16 00:00:00.010000+00:00,Group 8,Resource11,2011-11-21 01:06:40.010000+00:00,task-47894,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-11-24 14:50:11.471000+00:00 +Internet,LEFT_case-10555,2012-01-16 00:00:00+00:00,General,2011-12-23 12:04:26.129000+00:00,2012-01-16 00:00:00.010000+00:00,Group 8,Resource11,2011-11-21 01:06:40.010000+00:00,task-47893,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-11-24 14:50:57.458000+00:00 +Internet,LEFT_case-10563,2012-02-08 08:54:00.925000+00:00,Customer contact,2011-11-22 11:56:10.095000+00:00,2012-02-08 08:54:00.925000+00:00,,admin3,2011-11-22 08:54:00.925000+00:00,task-47550,Confirmation of receipt,complete,Group 1,admin2,2011-11-22 11:56:11.144000+00:00 +Internet,LEFT_case-10564,2012-01-17 00:00:00+00:00,General,,2012-01-17 00:00:00.010000+00:00,Group 5,Resource09,2011-11-22 01:06:40.010000+00:00,task-48825,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-08 14:15:29.375000+00:00 +Internet,LEFT_case-10564,2012-01-17 00:00:00+00:00,General,,2012-01-17 00:00:00.010000+00:00,Group 5,Resource09,2011-11-22 01:06:40.010000+00:00,task-49480,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-08 14:16:42.668000+00:00 +Internet,LEFT_case-10564,2012-01-17 00:00:00+00:00,General,,2012-01-17 00:00:00.010000+00:00,Group 5,Resource09,2011-11-22 01:06:40.010000+00:00,task-49479,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-08 14:17:39.570000+00:00 +Internet,LEFT_case-10571,2012-01-17 01:06:40+00:00,General,2011-12-09 10:15:03.846000+00:00,2012-01-17 01:06:40.010000+00:00,Group 5,Resource04,2011-11-22 01:06:40.010000+00:00,task-47712,Confirmation of receipt,complete,EMPTY,admin2,2011-12-09 10:15:04.933000+00:00 +Internet,LEFT_case-10575,2012-01-18 00:00:00+00:00,General,2012-01-05 14:32:52.039000+00:00,2012-01-18 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-47750,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-01 08:33:35.361000+00:00 +Internet,LEFT_case-10575,2012-01-18 00:00:00+00:00,General,2012-01-05 14:32:52.039000+00:00,2012-01-18 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-48739,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-01 08:34:49.023000+00:00 +Internet,LEFT_case-10575,2012-01-18 00:00:00+00:00,General,2012-01-05 14:32:52.039000+00:00,2012-01-18 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-48737,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-01 08:37:42.825000+00:00 +Internet,LEFT_case-10576,2012-02-09 00:00:00+00:00,General,2012-01-12 14:47:41.335000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-47755,Confirmation of receipt,complete,EMPTY,Resource01,2011-11-24 14:30:50.714000+00:00 +Internet,LEFT_case-10576,2012-02-09 00:00:00+00:00,General,2012-01-12 14:47:41.335000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-47872,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-11-24 14:31:22.728000+00:00 +Internet,LEFT_case-10576,2012-02-09 00:00:00+00:00,General,2012-01-12 14:47:41.335000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-47874,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-11-24 14:32:07.053000+00:00 +Internet,LEFT_case-10582,2012-02-09 16:21:00.744000+00:00,Customer contact,2011-11-24 09:15:48.187000+00:00,2012-02-09 16:21:00.744000+00:00,,admin3,2011-11-23 16:21:00.744000+00:00,task-47796,Confirmation of receipt,complete,Group 1,admin2,2011-11-24 09:15:49.144000+00:00 +Internet,LEFT_case-10583,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource09,2011-11-23 01:06:40.010000+00:00,task-48829,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-15 14:42:52.507000+00:00 +Internet,LEFT_case-10583,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource09,2011-11-23 01:06:40.010000+00:00,task-50037,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-15 14:45:47.035000+00:00 +Internet,LEFT_case-10583,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource09,2011-11-23 01:06:40.010000+00:00,task-50036,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-15 14:46:49.392000+00:00 +Internet,LEFT_case-10592,2012-01-19 01:06:40+00:00,General,2011-12-12 15:18:40.732000+00:00,2012-01-19 01:06:40.010000+00:00,Group 5,Resource12,2011-11-24 01:06:40.010000+00:00,task-47915,Confirmation of receipt,complete,EMPTY,Resource12,2011-11-29 11:46:06.532000+00:00 +Internet,LEFT_case-10592,2012-01-19 01:06:40+00:00,General,2011-12-12 15:18:40.732000+00:00,2012-01-19 01:06:40.010000+00:00,Group 5,Resource12,2011-11-24 01:06:40.010000+00:00,task-48428,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-11-29 11:47:32.540000+00:00 +Internet,LEFT_case-10592,2012-01-19 01:06:40+00:00,General,2011-12-12 15:18:40.732000+00:00,2012-01-19 01:06:40.010000+00:00,Group 5,Resource12,2011-11-24 01:06:40.010000+00:00,task-48427,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-11-29 12:08:36.453000+00:00 +Internet,LEFT_case-10593,2012-01-19 00:00:00+00:00,General,2012-01-17 14:33:56.518000+00:00,2012-01-19 00:00:00.010000+00:00,Group 5,Resource04,2011-11-24 01:06:40.010000+00:00,task-48182,Confirmation of receipt,complete,EMPTY,Resource04,2011-11-30 13:54:33.716000+00:00 +Internet,LEFT_case-10593,2012-01-19 00:00:00+00:00,General,2012-01-17 14:33:56.518000+00:00,2012-01-19 00:00:00.010000+00:00,Group 5,Resource04,2011-11-24 01:06:40.010000+00:00,task-48609,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-11-30 13:55:14.723000+00:00 +Internet,LEFT_case-10593,2012-01-19 00:00:00+00:00,General,2012-01-17 14:33:56.518000+00:00,2012-01-19 00:00:00.010000+00:00,Group 5,Resource04,2011-11-24 01:06:40.010000+00:00,task-48608,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-11-30 13:55:50.019000+00:00 +Internet,LEFT_case-10598,2012-01-20 01:06:40+00:00,General,2011-11-30 15:52:53.757000+00:00,2012-01-20 01:06:40.010000+00:00,Group 2,Resource20,2011-11-24 01:06:40.010000+00:00,task-47964,Confirmation of receipt,complete,EMPTY,Resource20,2011-11-24 16:28:52.911000+00:00 +Internet,LEFT_case-10598,2012-01-20 01:06:40+00:00,General,2011-11-30 15:52:53.757000+00:00,2012-01-20 01:06:40.010000+00:00,Group 2,Resource20,2011-11-24 01:06:40.010000+00:00,task-47967,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-11-24 16:30:49.801000+00:00 +Internet,LEFT_case-10598,2012-01-20 01:06:40+00:00,General,2011-11-30 15:52:53.757000+00:00,2012-01-20 01:06:40.010000+00:00,Group 2,Resource20,2011-11-24 01:06:40.010000+00:00,task-47966,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-11-24 16:31:57.491000+00:00 +Internet,LEFT_case-10600,2012-01-19 00:00:00+00:00,General,2012-01-12 14:34:01.420000+00:00,2012-01-19 00:00:00.010000+00:00,Group 8,Resource11,2011-11-24 01:06:40.010000+00:00,task-48203,Confirmation of receipt,complete,EMPTY,Resource01,2011-12-21 10:20:20.213000+00:00 +Internet,LEFT_case-10600,2012-01-19 00:00:00+00:00,General,2012-01-12 14:34:01.420000+00:00,2012-01-19 00:00:00.010000+00:00,Group 8,Resource11,2011-11-24 01:06:40.010000+00:00,task-50436,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-12-21 10:47:24.332000+00:00 +Internet,LEFT_case-10600,2012-01-19 00:00:00+00:00,General,2012-01-12 14:34:01.420000+00:00,2012-01-19 00:00:00.010000+00:00,Group 8,Resource11,2011-11-24 01:06:40.010000+00:00,task-50413,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-12-21 10:48:36.883000+00:00 +Internet,LEFT_case-10621,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource14,2011-11-28 01:06:40.010000+00:00,task-48247,Confirmation of receipt,complete,EMPTY,Resource21,2012-01-20 13:02:41.692000+00:00 +Internet,LEFT_case-10621,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource14,2011-11-28 01:06:40.010000+00:00,task-53322,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2012-01-20 13:04:42.498000+00:00 +Internet,LEFT_case-10621,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource14,2011-11-28 01:06:40.010000+00:00,task-53321,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2012-01-20 13:05:47.919000+00:00 +Internet,LEFT_case-10623,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-28 01:06:40.010000+00:00,task-48349,Confirmation of receipt,complete,EMPTY,Resource06,2011-12-02 09:10:04.876000+00:00 +Internet,LEFT_case-10623,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-28 01:06:40.010000+00:00,task-48839,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-12-02 09:54:36.749000+00:00 +Internet,LEFT_case-10623,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-28 01:06:40.010000+00:00,task-48835,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-12-02 09:58:38.507000+00:00 +Internet,LEFT_case-10624,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource04,2011-11-28 01:06:40.010000+00:00,task-48467,Confirmation of receipt,complete,EMPTY,Resource04,2011-12-01 10:44:22.790000+00:00 +Internet,LEFT_case-10624,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource04,2011-11-28 01:06:40.010000+00:00,task-48766,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-12-01 10:45:46.710000+00:00 +Internet,LEFT_case-10624,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource04,2011-11-28 01:06:40.010000+00:00,task-48765,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-12-01 12:52:52.161000+00:00 +Internet,LEFT_case-10626,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-48507,Confirmation of receipt,complete,EMPTY,Resource02,2012-01-16 10:05:19.539000+00:00 +Internet,LEFT_case-10626,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-52436,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2012-01-16 10:35:25.190000+00:00 +Internet,LEFT_case-10626,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-52414,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2012-01-16 10:39:51.238000+00:00 +Internet,LEFT_case-10636,2012-01-12 00:00:00+00:00,General,2012-01-19 15:07:29.638000+00:00,2012-01-12 00:00:00.010000+00:00,Group 2,Resource21,2011-11-28 01:06:40.010000+00:00,task-48544,Confirmation of receipt,complete,EMPTY,Resource21,2012-01-18 10:04:47.448000+00:00 +Internet,LEFT_case-10636,2012-01-12 00:00:00+00:00,General,2012-01-19 15:07:29.638000+00:00,2012-01-12 00:00:00.010000+00:00,Group 2,Resource21,2011-11-28 01:06:40.010000+00:00,task-53058,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2012-01-18 10:06:07.388000+00:00 +Internet,LEFT_case-10636,2012-01-12 00:00:00+00:00,General,2012-01-19 15:07:29.638000+00:00,2012-01-12 00:00:00.010000+00:00,Group 2,Resource21,2011-11-28 01:06:40.010000+00:00,task-53057,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2012-01-18 10:07:26.118000+00:00 +Internet,LEFT_case-10646,2012-01-24 01:06:40+00:00,General,2011-12-09 15:47:19.142000+00:00,2012-01-24 01:06:40.010000+00:00,Group 5,Resource06,2011-11-29 01:06:40.010000+00:00,task-48826,Confirmation of receipt,complete,EMPTY,Resource06,2011-12-02 15:07:18.216000+00:00 +Internet,LEFT_case-10646,2012-01-24 01:06:40+00:00,General,2011-12-09 15:47:19.142000+00:00,2012-01-24 01:06:40.010000+00:00,Group 5,Resource06,2011-11-29 01:06:40.010000+00:00,task-48889,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-12-02 15:08:06.030000+00:00 +Internet,LEFT_case-10646,2012-01-24 01:06:40+00:00,General,2011-12-09 15:47:19.142000+00:00,2012-01-24 01:06:40.010000+00:00,Group 5,Resource06,2011-11-29 01:06:40.010000+00:00,task-48888,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-12-02 15:08:56.053000+00:00 +Internet,LEFT_case-10647,2012-01-24 00:00:00+00:00,General,2012-01-17 11:03:50.415000+00:00,2012-01-24 00:00:00.010000+00:00,Group 8,Resource11,2011-11-29 01:06:40.010000+00:00,task-48804,Confirmation of receipt,complete,EMPTY,Resource03,2011-12-06 15:01:49.228000+00:00 +Internet,LEFT_case-10647,2012-01-24 00:00:00+00:00,General,2012-01-17 11:03:50.415000+00:00,2012-01-24 00:00:00.010000+00:00,Group 8,Resource11,2011-11-29 01:06:40.010000+00:00,task-49182,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-12-06 15:02:41.153000+00:00 +Internet,LEFT_case-10647,2012-01-24 00:00:00+00:00,General,2012-01-17 11:03:50.415000+00:00,2012-01-24 00:00:00.010000+00:00,Group 8,Resource11,2011-11-29 01:06:40.010000+00:00,task-49181,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-12-06 15:03:19.558000+00:00 +Internet,LEFT_case-10660,2012-02-16 08:48:01.064000+00:00,Customer contact,2011-12-01 00:00:00.010000+00:00,2012-02-16 08:48:01.064000+00:00,,admin3,2011-11-30 08:48:01.064000+00:00,task-48833,Confirmation of receipt,complete,Group 1,admin2,2011-12-02 08:29:50.103000+00:00 +Internet,LEFT_case-10661,2012-01-25 00:00:00+00:00,General,2012-01-20 16:08:56.917000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource06,2011-11-30 01:06:40.010000+00:00,task-48838,Confirmation of receipt,complete,EMPTY,Resource06,2011-12-13 13:04:48.724000+00:00 +Internet,LEFT_case-10661,2012-01-25 00:00:00+00:00,General,2012-01-20 16:08:56.917000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource06,2011-11-30 01:06:40.010000+00:00,task-49771,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-12-13 13:54:01.182000+00:00 +Internet,LEFT_case-10661,2012-01-25 00:00:00+00:00,General,2012-01-20 16:08:56.917000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource06,2011-11-30 01:06:40.010000+00:00,task-49772,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-12-13 13:55:18.189000+00:00 +Desk,LEFT_case-10662,2012-01-20 01:06:40+00:00,General,2011-12-09 16:10:54.408000+00:00,2012-01-20 01:06:40.010000+00:00,Group 5,Resource06,2011-11-25 01:06:40.010000+00:00,task-48537,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-30 16:04:11.166000+00:00 +Desk,LEFT_case-10662,2012-01-20 01:06:40+00:00,General,2011-12-09 16:10:54.408000+00:00,2012-01-20 01:06:40.010000+00:00,Group 5,Resource06,2011-11-25 01:06:40.010000+00:00,task-48684,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-30 16:05:16.298000+00:00 +Desk,LEFT_case-10662,2012-01-20 01:06:40+00:00,General,2011-12-09 16:10:54.408000+00:00,2012-01-20 01:06:40.010000+00:00,Group 5,Resource06,2011-11-25 01:06:40.010000+00:00,task-48683,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-30 16:06:12.022000+00:00 +Internet,LEFT_case-10663,2012-01-25 00:00:00+00:00,General,2012-01-18 15:38:08.002000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource04,2011-11-30 01:06:40.010000+00:00,task-48953,Confirmation of receipt,complete,EMPTY,Resource04,2011-12-09 12:49:19.454000+00:00 +Internet,LEFT_case-10663,2012-01-25 00:00:00+00:00,General,2012-01-18 15:38:08.002000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource04,2011-11-30 01:06:40.010000+00:00,task-49559,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-12-09 12:50:16.571000+00:00 +Internet,LEFT_case-10663,2012-01-25 00:00:00+00:00,General,2012-01-18 15:38:08.002000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource04,2011-11-30 01:06:40.010000+00:00,task-49558,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-12-09 12:50:59.806000+00:00 +Internet,LEFT_case-10669,2012-01-25 00:00:00+00:00,General,2012-01-05 14:04:24.457000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-48987,Confirmation of receipt,complete,EMPTY,Resource03,2011-12-06 16:11:54.463000+00:00 +Internet,LEFT_case-10669,2012-01-25 00:00:00+00:00,General,2012-01-05 14:04:24.457000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-49210,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-12-06 16:12:35.482000+00:00 +Internet,LEFT_case-10669,2012-01-25 00:00:00+00:00,General,2012-01-05 14:04:24.457000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-49209,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-12-06 16:13:06.971000+00:00 +Internet,LEFT_case-10670,2012-01-25 00:00:00+00:00,General,2012-01-05 14:43:14.280000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-48989,Confirmation of receipt,complete,EMPTY,Resource03,2011-12-07 14:45:21.482000+00:00 +Internet,LEFT_case-10670,2012-01-25 00:00:00+00:00,General,2012-01-05 14:43:14.280000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-49368,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-12-07 14:46:44.803000+00:00 +Internet,LEFT_case-10670,2012-01-25 00:00:00+00:00,General,2012-01-05 14:43:14.280000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-49367,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-12-07 14:47:22.169000+00:00 +Internet,LEFT_case-10671,2012-01-25 00:00:00+00:00,General,2012-01-20 15:53:31.556000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource05,2011-11-30 01:06:40.010000+00:00,task-48999,Confirmation of receipt,complete,EMPTY,Resource05,2011-12-15 12:17:50.970000+00:00 +Internet,LEFT_case-10671,2012-01-25 00:00:00+00:00,General,2012-01-20 15:53:31.556000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource05,2011-11-30 01:06:40.010000+00:00,task-49985,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-12-15 12:18:57.325000+00:00 +Internet,LEFT_case-10671,2012-01-25 00:00:00+00:00,General,2012-01-20 15:53:31.556000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource05,2011-11-30 01:06:40.010000+00:00,task-49984,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-12-15 12:21:06.553000+00:00 +Internet,LEFT_case-10675,2012-01-25 00:00:00+00:00,General,,2012-01-25 00:00:00.010000+00:00,Group 5,Resource09,2011-11-30 01:06:40.010000+00:00,task-49000,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-23 14:36:26.442000+00:00 +Internet,LEFT_case-10675,2012-01-25 00:00:00+00:00,General,,2012-01-25 00:00:00.010000+00:00,Group 5,Resource09,2011-11-30 01:06:40.010000+00:00,task-50760,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-23 14:38:23.853000+00:00 +Internet,LEFT_case-10688,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 5,Resource04,2011-12-01 01:06:40.010000+00:00,task-49018,Confirmation of receipt,complete,EMPTY,Resource04,2011-12-09 16:37:36.011000+00:00 +Internet,LEFT_case-10688,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 5,Resource04,2011-12-01 01:06:40.010000+00:00,task-49624,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-12-09 16:38:15.458000+00:00 +Internet,LEFT_case-10688,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 5,Resource04,2011-12-01 01:06:40.010000+00:00,task-49623,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-12-22 11:10:39.999000+00:00 +e-mail,LEFT_case-10693,2011-12-24 01:06:40+00:00,General,2011-12-06 14:41:38.980000+00:00,2011-12-24 01:06:40.010000+00:00,Group 2,Resource03,2011-10-29 01:06:40.020000+00:00,task-48816,Confirmation of receipt,complete,EMPTY,Resource03,2011-12-06 14:40:10.889000+00:00 +e-mail,LEFT_case-10693,2011-12-24 01:06:40+00:00,General,2011-12-06 14:41:38.980000+00:00,2011-12-24 01:06:40.010000+00:00,Group 2,Resource03,2011-10-29 01:06:40.020000+00:00,task-49166,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-12-06 14:40:51.708000+00:00 +e-mail,LEFT_case-10693,2011-12-24 01:06:40+00:00,General,2011-12-06 14:41:38.980000+00:00,2011-12-24 01:06:40.010000+00:00,Group 2,Resource03,2011-10-29 01:06:40.020000+00:00,task-49165,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-12-06 14:41:40.040000+00:00 +Internet,LEFT_case-10709,2012-01-27 00:00:00+00:00,General,,2012-01-27 00:00:00.010000+00:00,Group 5,Resource09,2011-12-02 01:06:40.010000+00:00,task-49007,Confirmation of receipt,complete,EMPTY,Resource09,2012-01-10 13:14:31.452000+00:00 +Internet,LEFT_case-10709,2012-01-27 00:00:00+00:00,General,,2012-01-27 00:00:00.010000+00:00,Group 5,Resource09,2011-12-02 01:06:40.010000+00:00,task-51736,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2012-01-10 13:47:41.697000+00:00 +Internet,LEFT_case-10709,2012-01-27 00:00:00+00:00,General,,2012-01-27 00:00:00.010000+00:00,Group 5,Resource09,2011-12-02 01:06:40.010000+00:00,task-51737,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2012-01-10 14:11:40.999000+00:00 +Internet,LEFT_case-10735,2012-01-30 00:00:00+00:00,General,2012-01-05 14:51:53.398000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49022,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-07 11:27:27.810000+00:00 +Internet,LEFT_case-10735,2012-01-30 00:00:00+00:00,General,2012-01-05 14:51:53.398000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49313,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-07 11:28:27.297000+00:00 +Internet,LEFT_case-10735,2012-01-30 00:00:00+00:00,General,2012-01-05 14:51:53.398000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49312,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-07 11:29:25.305000+00:00 +Internet,LEFT_case-10749,2012-01-30 00:00:00+00:00,General,2012-01-17 11:40:15.756000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49076,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-06 13:30:29.664000+00:00 +Internet,LEFT_case-10749,2012-01-30 00:00:00+00:00,General,2012-01-17 11:40:15.756000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49132,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-06 13:38:09.733000+00:00 +Internet,LEFT_case-10749,2012-01-30 00:00:00+00:00,General,2012-01-17 11:40:15.756000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49130,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-06 13:38:57.461000+00:00 +Internet,LEFT_case-10757,2012-01-31 00:00:00+00:00,General,2012-01-17 15:05:03.138000+00:00,2012-01-31 00:00:00.010000+00:00,Group 5,Resource06,2011-12-06 01:06:40.010000+00:00,task-49100,Confirmation of receipt,complete,EMPTY,Resource06,2011-12-13 12:09:28.917000+00:00 +Internet,LEFT_case-10757,2012-01-31 00:00:00+00:00,General,2012-01-17 15:05:03.138000+00:00,2012-01-31 00:00:00.010000+00:00,Group 5,Resource06,2011-12-06 01:06:40.010000+00:00,task-49805,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-12-13 15:19:42.246000+00:00 +Internet,LEFT_case-10757,2012-01-31 00:00:00+00:00,General,2012-01-17 15:05:03.138000+00:00,2012-01-31 00:00:00.010000+00:00,Group 5,Resource06,2011-12-06 01:06:40.010000+00:00,task-49763,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-12-13 15:28:47.163000+00:00 +Internet,LEFT_case-10763,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 7,Resource35,2011-12-05 00:00:00.010000+00:00,task-49158,Confirmation of receipt,complete,EMPTY,Resource35,2011-12-17 16:16:49.296000+00:00 +Internet,LEFT_case-10763,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 7,Resource35,2011-12-05 00:00:00.010000+00:00,task-50089,T04 Determine confirmation of receipt,complete,Group 3,Resource35,2011-12-17 16:17:56.913000+00:00 +Internet,LEFT_case-10763,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 7,Resource35,2011-12-05 00:00:00.010000+00:00,task-50088,T06 Determine necessity of stop advice,complete,Group 1,Resource35,2011-12-17 16:18:30.884000+00:00 +Internet,LEFT_case-10765,2012-01-31 01:06:40+00:00,General,,2012-01-31 01:06:40.010000+00:00,Group 5,Resource23,2011-12-06 01:06:40.010000+00:00,task-49206,Confirmation of receipt,complete,EMPTY,Resource23,2011-12-12 14:30:43.309000+00:00 +Internet,LEFT_case-10765,2012-01-31 01:06:40+00:00,General,,2012-01-31 01:06:40.010000+00:00,Group 5,Resource23,2011-12-06 01:06:40.010000+00:00,task-49674,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-12-12 14:32:40.534000+00:00 +Internet,LEFT_case-10777,2012-02-01 00:00:00+00:00,General,2012-01-05 15:00:31.243000+00:00,2012-02-01 00:00:00.010000+00:00,Group 8,Resource11,2011-12-07 01:06:40.010000+00:00,task-49364,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-09 08:51:11.509000+00:00 +Internet,LEFT_case-10777,2012-02-01 00:00:00+00:00,General,2012-01-05 15:00:31.243000+00:00,2012-02-01 00:00:00.010000+00:00,Group 8,Resource11,2011-12-07 01:06:40.010000+00:00,task-49527,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-09 08:52:21.123000+00:00 +Internet,LEFT_case-10777,2012-02-01 00:00:00+00:00,General,2012-01-05 15:00:31.243000+00:00,2012-02-01 00:00:00.010000+00:00,Group 8,Resource11,2011-12-07 01:06:40.010000+00:00,task-49526,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-09 08:53:04.728000+00:00 +Internet,LEFT_case-10779,2011-12-26 00:00:00+00:00,General,,2011-12-26 00:00:00.010000+00:00,Group 5,Resource09,2011-10-31 01:06:40.010000+00:00,task-49365,Confirmation of receipt,complete,Group 1,Resource09,2011-12-07 15:52:49.492000+00:00 +Internet,LEFT_case-10779,2011-12-26 00:00:00+00:00,General,,2011-12-26 00:00:00.010000+00:00,Group 5,Resource09,2011-10-31 01:06:40.010000+00:00,task-49404,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-07 15:56:56.564000+00:00 +Internet,LEFT_case-10779,2011-12-26 00:00:00+00:00,General,,2011-12-26 00:00:00.010000+00:00,Group 5,Resource09,2011-10-31 01:06:40.010000+00:00,task-49406,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-07 16:00:17.096000+00:00 +Internet,LEFT_case-10788,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource14,2011-12-08 01:06:40.010000+00:00,task-49448,Confirmation of receipt,complete,Group 1,Resource14,2012-01-12 15:13:12.379000+00:00 +Internet,LEFT_case-10788,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource14,2011-12-08 01:06:40.010000+00:00,task-52179,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2012-01-12 15:14:33.885000+00:00 +Internet,LEFT_case-10788,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource14,2011-12-08 01:06:40.010000+00:00,task-52178,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2012-01-12 15:17:05.134000+00:00 +Internet,LEFT_case-10799,2012-02-02 00:00:00+00:00,General,2012-01-05 15:13:32.700000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-49657,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-21 12:35:49.971000+00:00 +Internet,LEFT_case-10799,2012-02-02 00:00:00+00:00,General,2012-01-05 15:13:32.700000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-50490,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-21 13:11:54.559000+00:00 +Internet,LEFT_case-10799,2012-02-02 00:00:00+00:00,General,2012-01-05 15:13:32.700000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-50489,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-21 13:15:40.720000+00:00 +Internet,LEFT_case-10800,2012-02-02 00:00:00+00:00,General,2012-01-10 14:25:59.612000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-49661,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-21 14:23:48.367000+00:00 +Internet,LEFT_case-10800,2012-02-02 00:00:00+00:00,General,2012-01-10 14:25:59.612000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-50523,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-21 14:24:58.629000+00:00 +Internet,LEFT_case-10800,2012-02-02 00:00:00+00:00,General,2012-01-10 14:25:59.612000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-50522,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-21 14:25:50.026000+00:00 +Internet,LEFT_case-10810,2012-02-03 00:00:00+00:00,General,2012-01-17 15:16:21.542000+00:00,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-12-09 01:06:40.010000+00:00,task-49664,Confirmation of receipt,complete,EMPTY,Resource06,2012-01-12 15:56:12.766000+00:00 +Internet,LEFT_case-10810,2012-02-03 00:00:00+00:00,General,2012-01-17 15:16:21.542000+00:00,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-12-09 01:06:40.010000+00:00,task-52217,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2012-01-12 16:08:24.037000+00:00 +Internet,LEFT_case-10810,2012-02-03 00:00:00+00:00,General,2012-01-17 15:16:21.542000+00:00,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-12-09 01:06:40.010000+00:00,task-52202,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2012-01-12 16:10:05.481000+00:00 +Internet,LEFT_case-10814,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource12,2011-12-09 01:06:40.010000+00:00,task-49676,Confirmation of receipt,complete,EMPTY,Resource12,2011-12-28 14:19:04.153000+00:00 +Internet,LEFT_case-10814,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource12,2011-12-09 01:06:40.010000+00:00,task-50877,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-12-28 14:21:05.710000+00:00 +Internet,LEFT_case-10814,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource12,2011-12-09 01:06:40.010000+00:00,task-50876,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-12-28 14:39:32.658000+00:00 +Internet,LEFT_case-10838,2012-02-05 00:00:00+00:00,General,,2012-02-05 00:00:00.010000+00:00,Group 5,Resource04,2011-12-11 01:06:40.010000+00:00,task-49838,Confirmation of receipt,complete,EMPTY,Resource04,2012-01-03 12:51:49.190000+00:00 +Internet,LEFT_case-10838,2012-02-05 00:00:00+00:00,General,,2012-02-05 00:00:00.010000+00:00,Group 5,Resource04,2011-12-11 01:06:40.010000+00:00,task-51108,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2012-01-03 12:53:19.645000+00:00 +Internet,LEFT_case-10838,2012-02-05 00:00:00+00:00,General,,2012-02-05 00:00:00.010000+00:00,Group 5,Resource04,2011-12-11 01:06:40.010000+00:00,task-51107,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2012-01-04 08:57:57.196000+00:00 +Internet,LEFT_case-10853,2012-02-06 00:00:00+00:00,General,2012-01-17 15:26:34.656000+00:00,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-49898,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 16:54:34.620000+00:00 +Internet,LEFT_case-10853,2012-02-06 00:00:00+00:00,General,2012-01-17 15:26:34.656000+00:00,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51532,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 16:55:29.771000+00:00 +Internet,LEFT_case-10853,2012-02-06 00:00:00+00:00,General,2012-01-17 15:26:34.656000+00:00,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51531,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 09:03:39.027000+00:00 +Internet,LEFT_case-10854,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-49907,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 16:57:48.131000+00:00 +Internet,LEFT_case-10854,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51536,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 16:58:37.766000+00:00 +Internet,LEFT_case-10854,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51535,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 09:10:58.906000+00:00 +Internet,LEFT_case-10855,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-49914,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 17:01:10.603000+00:00 +Internet,LEFT_case-10855,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51540,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 17:02:16.472000+00:00 +Internet,LEFT_case-10855,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51539,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 09:13:55.440000+00:00 +Internet,LEFT_case-10856,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-49938,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 17:06:05.709000+00:00 +Internet,LEFT_case-10856,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51544,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 17:07:13.824000+00:00 +Internet,LEFT_case-10856,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51543,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 09:57:11.425000+00:00 +Internet,LEFT_case-10857,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource13,2011-12-12 01:06:40.010000+00:00,task-49946,Confirmation of receipt,complete,EMPTY,Resource13,2012-01-04 19:36:09.258000+00:00 +Internet,LEFT_case-10857,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource13,2011-12-12 01:06:40.010000+00:00,task-51231,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2012-01-04 19:37:33.931000+00:00 +Internet,LEFT_case-10857,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource13,2011-12-12 01:06:40.010000+00:00,task-51233,T16 Report reasons to hold request,complete,Group 1,Resource13,2012-01-04 19:54:44.634000+00:00 +Internet,LEFT_case-10857,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource13,2011-12-12 01:06:40.010000+00:00,task-51235,T19 Determine report Y to stop indication,complete,EMPTY,Resource13,2012-01-04 19:56:18.050000+00:00 +Internet,LEFT_case-10857,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource13,2011-12-12 01:06:40.010000+00:00,task-51250,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 12:47:06.479000+00:00 +Internet,LEFT_case-10858,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-49950,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 17:09:08.572000+00:00 +Internet,LEFT_case-10858,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51548,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 17:10:02.415000+00:00 +Internet,LEFT_case-10858,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51547,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 09:59:39.010000+00:00 +Internet,LEFT_case-10861,2012-02-07 00:00:00+00:00,General,,2012-02-07 00:00:00.010000+00:00,Group 2,Resource20,2011-12-13 01:06:40.010000+00:00,task-49951,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 17:15:03.958000+00:00 +Internet,LEFT_case-10861,2012-02-07 00:00:00+00:00,General,,2012-02-07 00:00:00.010000+00:00,Group 2,Resource20,2011-12-13 01:06:40.010000+00:00,task-51556,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 17:15:58.425000+00:00 +Internet,LEFT_case-10861,2012-02-07 00:00:00+00:00,General,,2012-02-07 00:00:00.010000+00:00,Group 2,Resource20,2011-12-13 01:06:40.010000+00:00,task-51555,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 10:13:58.004000+00:00 +Internet,LEFT_case-10862,2012-02-06 00:00:00+00:00,Customer contact,2011-12-12 00:00:00.010000+00:00,2012-02-06 00:00:00.010000+00:00,,admin3,2011-12-12 01:06:40.010000+00:00,task-49958,Confirmation of receipt,complete,EMPTY,admin2,2011-12-15 11:53:12.667000+00:00 +Internet,LEFT_case-10863,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-49982,Confirmation of receipt,complete,Group 1,Resource20,2012-01-06 17:12:33.877000+00:00 +Internet,LEFT_case-10863,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51552,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 17:13:26.748000+00:00 +Internet,LEFT_case-10863,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51551,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 10:01:58.448000+00:00 +Internet,LEFT_case-10864,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource14,2011-12-12 01:06:40.010000+00:00,task-49987,Confirmation of receipt,complete,Group 1,Resource03,2011-12-16 12:08:04.183000+00:00 +Internet,LEFT_case-10864,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource14,2011-12-12 01:06:40.010000+00:00,task-52190,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2012-01-12 15:46:21.518000+00:00 +Internet,LEFT_case-10864,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource14,2011-12-12 01:06:40.010000+00:00,task-50078,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2012-01-12 15:47:44.589000+00:00 +Internet,LEFT_case-10890,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource18,2011-12-13 01:06:40.010000+00:00,task-50051,Confirmation of receipt,complete,EMPTY,Resource18,2012-01-10 15:22:52.336000+00:00 +Internet,LEFT_case-10890,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource18,2011-12-13 01:06:40.010000+00:00,task-51831,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2012-01-10 15:24:44.401000+00:00 +Internet,LEFT_case-10890,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource18,2011-12-13 01:06:40.010000+00:00,task-51830,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2012-01-10 15:54:53.704000+00:00 +Internet,LEFT_case-10892,2012-02-07 00:00:00+00:00,General,2012-01-12 14:17:12.049000+00:00,2012-02-07 00:00:00.010000+00:00,Group 8,Resource11,2011-12-13 01:06:40.010000+00:00,task-50052,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-21 08:41:50.337000+00:00 +Internet,LEFT_case-10892,2012-02-07 00:00:00+00:00,General,2012-01-12 14:17:12.049000+00:00,2012-02-07 00:00:00.010000+00:00,Group 8,Resource11,2011-12-13 01:06:40.010000+00:00,task-50387,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-21 08:44:56.141000+00:00 +Internet,LEFT_case-10892,2012-02-07 00:00:00+00:00,General,2012-01-12 14:17:12.049000+00:00,2012-02-07 00:00:00.010000+00:00,Group 8,Resource11,2011-12-13 01:06:40.010000+00:00,task-50386,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-21 08:52:15.331000+00:00 +Internet,LEFT_case-10918,2012-03-01 00:00:00+00:00,General,,2012-03-01 00:00:00.010000+00:00,,Resource26,2011-12-14 09:54:01.065000+00:00,task-49844,Confirmation of receipt,complete,EMPTY,Resource42,2012-01-23 10:23:25.017000+00:00 +Internet,LEFT_case-10929,2012-02-01 00:00:00+00:00,General,2012-01-19 14:03:29.080000+00:00,2012-02-01 00:00:00.010000+00:00,Group 11,Resource28,2011-12-07 01:06:40.010000+00:00,task-49932,Confirmation of receipt,complete,EMPTY,Resource28,2011-12-19 15:34:47.491000+00:00 +Internet,LEFT_case-10929,2012-02-01 00:00:00+00:00,General,2012-01-19 14:03:29.080000+00:00,2012-02-01 00:00:00.010000+00:00,Group 11,Resource28,2011-12-07 01:06:40.010000+00:00,task-50251,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-12-19 15:38:21.935000+00:00 +Internet,LEFT_case-10929,2012-02-01 00:00:00+00:00,General,2012-01-19 14:03:29.080000+00:00,2012-02-01 00:00:00.010000+00:00,Group 11,Resource28,2011-12-07 01:06:40.010000+00:00,task-50252,T04 Determine confirmation of receipt,complete,EMPTY,Resource28,2012-01-16 13:17:48.717000+00:00 +Internet,LEFT_case-10946,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource05,2011-12-15 01:06:40.010000+00:00,task-50195,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-03 10:04:36.517000+00:00 +Internet,LEFT_case-10946,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource05,2011-12-15 01:06:40.010000+00:00,task-51050,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-03 10:06:40.471000+00:00 +Internet,LEFT_case-10946,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource05,2011-12-15 01:06:40.010000+00:00,task-51049,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-03 10:09:42.388000+00:00 +Internet,LEFT_case-10948,2012-02-09 00:00:00+00:00,General,2012-01-12 14:08:04.148000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-12-15 01:06:40.010000+00:00,task-50197,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-21 10:24:17.770000+00:00 +Internet,LEFT_case-10948,2012-02-09 00:00:00+00:00,General,2012-01-12 14:08:04.148000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-12-15 01:06:40.010000+00:00,task-50418,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-21 10:25:34.019000+00:00 +Internet,LEFT_case-10948,2012-02-09 00:00:00+00:00,General,2012-01-12 14:08:04.148000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-12-15 01:06:40.010000+00:00,task-50417,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-21 10:26:32.902000+00:00 +Internet,LEFT_case-10950,2012-01-02 00:00:00+00:00,General,,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 00:00:00.010000+00:00,task-50050,Confirmation of receipt,complete,EMPTY,Resource14,2011-12-20 10:22:12.713000+00:00 +Internet,LEFT_case-10950,2012-01-02 00:00:00+00:00,General,,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 00:00:00.010000+00:00,task-50315,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-12-20 11:03:39.353000+00:00 +Internet,LEFT_case-10950,2012-01-02 00:00:00+00:00,General,,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 00:00:00.010000+00:00,task-50310,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-12-20 11:08:02.697000+00:00 +Internet,LEFT_case-10951,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource13,2011-12-15 01:06:40.010000+00:00,task-50217,Confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 10:24:58.463000+00:00 +Internet,LEFT_case-10951,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource13,2011-12-15 01:06:40.010000+00:00,task-51287,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2012-01-05 10:32:39.507000+00:00 +Internet,LEFT_case-10951,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource13,2011-12-15 01:06:40.010000+00:00,task-51289,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 10:34:29.305000+00:00 +Internet,LEFT_case-10971,2012-02-11 00:00:00+00:00,General,,2012-02-11 00:00:00.010000+00:00,Group 5,Resource13,2011-12-16 01:06:40.010000+00:00,task-50227,Confirmation of receipt,complete,EMPTY,Resource13,2012-01-10 13:16:23.523000+00:00 +Internet,LEFT_case-10971,2012-02-11 00:00:00+00:00,General,,2012-02-11 00:00:00.010000+00:00,Group 5,Resource13,2011-12-16 01:06:40.010000+00:00,task-51741,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2012-01-10 13:21:13.637000+00:00 +Internet,LEFT_case-10971,2012-02-11 00:00:00+00:00,General,,2012-02-11 00:00:00.010000+00:00,Group 5,Resource13,2011-12-16 01:06:40.010000+00:00,task-51739,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2012-01-10 13:21:56.885000+00:00 +Internet,LEFT_case-11006,2012-02-13 00:00:00+00:00,General,2012-01-17 13:54:25.963000+00:00,2012-02-13 00:00:00.010000+00:00,Group 8,Resource11,2011-12-19 01:06:40.010000+00:00,task-50245,Confirmation of receipt,complete,EMPTY,Resource01,2011-12-28 15:36:23.336000+00:00 +Internet,LEFT_case-11006,2012-02-13 00:00:00+00:00,General,2012-01-17 13:54:25.963000+00:00,2012-02-13 00:00:00.010000+00:00,Group 8,Resource11,2011-12-19 01:06:40.010000+00:00,task-50900,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-12-28 15:37:17.275000+00:00 +Internet,LEFT_case-11006,2012-02-13 00:00:00+00:00,General,2012-01-17 13:54:25.963000+00:00,2012-02-13 00:00:00.010000+00:00,Group 8,Resource11,2011-12-19 01:06:40.010000+00:00,task-50899,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-12-28 15:39:34.441000+00:00 +Internet,LEFT_case-11007,2012-02-13 00:00:00+00:00,General,,2012-02-13 00:00:00.010000+00:00,Group 5,Resource05,2011-12-19 01:06:40.010000+00:00,task-50273,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-03 16:02:18.024000+00:00 +Internet,LEFT_case-11007,2012-02-13 00:00:00+00:00,General,,2012-02-13 00:00:00.010000+00:00,Group 5,Resource05,2011-12-19 01:06:40.010000+00:00,task-51251,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-05 08:45:59.214000+00:00 +Internet,LEFT_case-11007,2012-02-13 00:00:00+00:00,General,,2012-02-13 00:00:00.010000+00:00,Group 5,Resource05,2011-12-19 01:06:40.010000+00:00,task-51129,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-05 09:51:36.497000+00:00 +Internet,LEFT_case-11048,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-50486,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-05 14:00:46.902000+00:00 +Internet,LEFT_case-11048,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-51386,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-05 14:05:58.518000+00:00 +Internet,LEFT_case-11048,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-51385,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-05 14:07:46.415000+00:00 +Internet,LEFT_case-11050,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-50487,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-17 07:29:45.807000+00:00 +Internet,LEFT_case-11050,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-52656,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-17 07:31:04.679000+00:00 +Internet,LEFT_case-11050,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-52655,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-17 07:32:09.582000+00:00 +Internet,LEFT_case-11053,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-50505,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-17 08:38:18.138000+00:00 +Internet,LEFT_case-11053,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-52693,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-17 08:39:32.646000+00:00 +Internet,LEFT_case-11053,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-52694,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-17 08:40:36.442000+00:00 +Internet,LEFT_case-11058,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource22,2011-12-21 01:06:40.010000+00:00,task-50536,Confirmation of receipt,complete,EMPTY,Resource22,2012-01-17 09:55:10.977000+00:00 +Internet,LEFT_case-11058,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource22,2011-12-21 01:06:40.010000+00:00,task-52725,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2012-01-17 09:57:45.295000+00:00 +Internet,LEFT_case-11058,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource22,2011-12-21 01:06:40.010000+00:00,task-52824,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2012-01-17 13:57:00.334000+00:00 +Internet,LEFT_case-11059,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-50546,Confirmation of receipt,complete,EMPTY,Resource04,2012-01-11 12:55:56.776000+00:00 +Internet,LEFT_case-11059,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-51957,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2012-01-11 12:57:02.860000+00:00 +Internet,LEFT_case-11059,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-51956,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2012-01-17 14:44:06.677000+00:00 +Internet,LEFT_case-11063,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-50607,Confirmation of receipt,complete,EMPTY,Resource04,2012-01-11 16:17:53.202000+00:00 +Internet,LEFT_case-11063,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-51991,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2012-01-11 16:19:13.590000+00:00 +Internet,LEFT_case-11063,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-51990,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2012-01-11 16:20:14.985000+00:00 +Internet,LEFT_case-11080,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource14,2011-12-22 01:06:40.010000+00:00,task-50658,Confirmation of receipt,complete,EMPTY,Resource14,2012-01-23 11:58:31.282000+00:00 +Internet,LEFT_case-11080,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource14,2011-12-22 01:06:40.010000+00:00,task-53422,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2012-01-23 12:00:48.419000+00:00 +Internet,LEFT_case-11080,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource14,2011-12-22 01:06:40.010000+00:00,task-53421,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2012-01-23 12:02:03.196000+00:00 +Internet,LEFT_case-11094,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource13,2011-12-22 01:06:40.010000+00:00,task-50687,Confirmation of receipt,complete,EMPTY,Resource13,2012-01-15 13:22:12.557000+00:00 +Internet,LEFT_case-11094,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource13,2011-12-22 01:06:40.010000+00:00,task-52368,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2012-01-15 13:24:50.228000+00:00 +Internet,LEFT_case-11094,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource13,2011-12-22 01:06:40.010000+00:00,task-52367,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2012-01-15 13:26:35.968000+00:00 +Internet,LEFT_case-11096,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource06,2011-12-22 01:06:40.010000+00:00,task-51200,Confirmation of receipt,complete,EMPTY,Resource06,2012-01-13 15:43:24.396000+00:00 +Internet,LEFT_case-11096,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource06,2011-12-22 01:06:40.010000+00:00,task-52318,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2012-01-13 15:45:05.357000+00:00 +Internet,LEFT_case-11096,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource06,2011-12-22 01:06:40.010000+00:00,task-52317,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2012-01-13 15:46:12.274000+00:00 +Internet,LEFT_case-11115,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 5,Resource13,2011-12-23 01:06:40.010000+00:00,task-51224,Confirmation of receipt,complete,EMPTY,Resource13,2012-01-18 15:46:13.649000+00:00 +Internet,LEFT_case-11115,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 5,Resource13,2011-12-23 01:06:40.010000+00:00,task-53208,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2012-01-18 15:46:47.535000+00:00 +Internet,LEFT_case-11115,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 5,Resource13,2011-12-23 01:06:40.010000+00:00,task-53210,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2012-01-18 15:48:12.759000+00:00 +Internet,LEFT_case-11129,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 2,Resource20,2011-12-23 01:06:40.010000+00:00,task-51225,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 14:20:51.185000+00:00 +Internet,LEFT_case-11129,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 2,Resource20,2011-12-23 01:06:40.010000+00:00,task-51494,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 14:25:09.701000+00:00 +Internet,LEFT_case-11129,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 2,Resource20,2011-12-23 01:06:40.010000+00:00,task-51492,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-06 14:52:05.571000+00:00 +Internet,LEFT_case-11154,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource06,2011-12-27 01:06:40.010000+00:00,task-51254,Confirmation of receipt,complete,EMPTY,Resource06,2012-01-16 12:31:11.027000+00:00 +Internet,LEFT_case-11154,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource06,2011-12-27 01:06:40.010000+00:00,task-52521,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2012-01-16 12:33:01.053000+00:00 +Internet,LEFT_case-11154,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource06,2011-12-27 01:06:40.010000+00:00,task-52520,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2012-01-16 12:34:23.168000+00:00 +Internet,LEFT_case-11214,2012-03-25 00:00:00+00:00,General,,2012-02-26 00:00:00.010000+00:00,Group 2,Resource07,2012-01-01 01:06:40.010000+00:00,task-51257,Confirmation of receipt,complete,EMPTY,Resource07,2012-01-10 14:41:29.553000+00:00 +Internet,LEFT_case-11214,2012-03-25 00:00:00+00:00,General,,2012-02-26 00:00:00.010000+00:00,Group 2,Resource07,2012-01-01 01:06:40.010000+00:00,task-51801,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2012-01-10 14:42:36.740000+00:00 +Internet,LEFT_case-11214,2012-03-25 00:00:00+00:00,General,,2012-02-26 00:00:00.010000+00:00,Group 2,Resource07,2012-01-01 01:06:40.010000+00:00,task-51800,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2012-01-10 14:48:12.062000+00:00 +Internet,LEFT_case-11268,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource12,2012-01-04 01:06:40.010000+00:00,task-51259,Confirmation of receipt,complete,EMPTY,Resource12,2012-01-12 14:25:56.505000+00:00 +Internet,LEFT_case-11268,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource12,2012-01-04 01:06:40.010000+00:00,task-52138,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2012-01-12 14:31:29.075000+00:00 +Internet,LEFT_case-11268,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource12,2012-01-04 01:06:40.010000+00:00,task-52137,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2012-01-12 14:34:39.302000+00:00 +Internet,LEFT_case-11275,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource22,2011-12-22 01:06:40.010000+00:00,task-51199,Confirmation of receipt,complete,EMPTY,Resource22,2012-01-12 14:36:54.782000+00:00 +Internet,LEFT_case-11275,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource22,2011-12-22 01:06:40.010000+00:00,task-52149,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2012-01-12 14:38:52.849000+00:00 +Internet,LEFT_case-11275,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource22,2011-12-22 01:06:40.010000+00:00,task-52147,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2012-01-12 14:41:22.579000+00:00 +Internet,LEFT_case-11375,2012-01-13 00:00:00+00:00,General,2012-01-18 12:40:44.606000+00:00,2012-01-13 00:00:00.010000+00:00,Group 5,Resource12,2011-11-18 01:06:40.010000+00:00,task-51896,Confirmation of receipt,complete,EMPTY,Resource12,2012-01-11 12:11:08.204000+00:00 +Internet,LEFT_case-11375,2012-01-13 00:00:00+00:00,General,2012-01-18 12:40:44.606000+00:00,2012-01-13 00:00:00.010000+00:00,Group 5,Resource12,2011-11-18 01:06:40.010000+00:00,task-51948,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2012-01-11 12:13:05.661000+00:00 +Internet,LEFT_case-11375,2012-01-13 00:00:00+00:00,General,2012-01-18 12:40:44.606000+00:00,2012-01-13 00:00:00.010000+00:00,Group 5,Resource12,2011-11-18 01:06:40.010000+00:00,task-51947,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2012-01-11 12:14:22.771000+00:00 +Internet,LEFT_case-11375,2012-01-13 00:00:00+00:00,General,2012-01-18 12:40:44.606000+00:00,2012-01-13 00:00:00.010000+00:00,Group 5,Resource12,2011-11-18 01:06:40.010000+00:00,task-51952,T16 Report reasons to hold request,complete,Group 1,Resource12,2012-01-13 07:40:31.256000+00:00 +Internet,LEFT_case-11375,2012-01-13 00:00:00+00:00,General,2012-01-18 12:40:44.606000+00:00,2012-01-13 00:00:00.010000+00:00,Group 5,Resource12,2011-11-18 01:06:40.010000+00:00,task-52237,T19 Determine report Y to stop indication,complete,Group 3,Resource12,2012-01-13 07:41:41.200000+00:00 +Internet,LEFT_case-11376,2012-02-27 00:00:00+00:00,General,,2012-02-27 00:00:00.010000+00:00,Group 5,Resource02,2011-11-21 01:06:40.010000+00:00,task-51913,Confirmation of receipt,complete,EMPTY,Resource02,2012-01-17 07:49:54.680000+00:00 +Internet,LEFT_case-11376,2012-02-27 00:00:00+00:00,General,,2012-02-27 00:00:00.010000+00:00,Group 5,Resource02,2011-11-21 01:06:40.010000+00:00,task-52785,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2012-01-17 12:01:16.626000+00:00 +Internet,LEFT_case-11376,2012-02-27 00:00:00+00:00,General,,2012-02-27 00:00:00.010000+00:00,Group 5,Resource02,2011-11-21 01:06:40.010000+00:00,task-52674,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2012-01-17 12:03:44.842000+00:00 +Internet,LEFT_case-11378,2012-01-20 00:00:00+00:00,General,2012-01-20 09:12:24.814000+00:00,2012-01-20 00:00:00.010000+00:00,Group 8,Resource11,2011-11-25 01:06:40.010000+00:00,task-51638,Confirmation of receipt,complete,EMPTY,Resource07,2012-01-17 09:02:43.992000+00:00 +Internet,LEFT_case-11378,2012-01-20 00:00:00+00:00,General,2012-01-20 09:12:24.814000+00:00,2012-01-20 00:00:00.010000+00:00,Group 8,Resource11,2011-11-25 01:06:40.010000+00:00,task-52708,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2012-01-17 09:04:01.485000+00:00 +Internet,LEFT_case-11378,2012-01-20 00:00:00+00:00,General,2012-01-20 09:12:24.814000+00:00,2012-01-20 00:00:00.010000+00:00,Group 8,Resource11,2011-11-25 01:06:40.010000+00:00,task-52707,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2012-01-17 09:05:19.033000+00:00 +Internet,LEFT_case-11380,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource06,2012-01-09 01:06:40.010000+00:00,task-51961,Confirmation of receipt,complete,EMPTY,Resource06,2012-01-13 16:29:03.742000+00:00 +Internet,LEFT_case-11380,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource06,2012-01-09 01:06:40.010000+00:00,task-52339,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2012-01-13 16:30:51.650000+00:00 +Internet,LEFT_case-11380,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource06,2012-01-09 01:06:40.010000+00:00,task-52338,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2012-01-13 16:32:45.283000+00:00 +Internet,LEFT_case-11399,2012-01-24 00:00:00+00:00,General,2012-01-17 10:01:44.200000+00:00,2012-01-24 00:00:00.010000+00:00,Group 6,Resource40,2011-11-29 00:00:00.010000+00:00,task-51720,Confirmation of receipt,complete,Group 1,Resource27,2012-01-12 11:11:27.976000+00:00 +Internet,LEFT_case-11399,2012-01-24 00:00:00+00:00,General,2012-01-17 10:01:44.200000+00:00,2012-01-24 00:00:00.010000+00:00,Group 6,Resource40,2011-11-29 00:00:00.010000+00:00,task-52050,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2012-01-12 11:18:08.932000+00:00 +Internet,LEFT_case-11399,2012-01-24 00:00:00+00:00,General,2012-01-17 10:01:44.200000+00:00,2012-01-24 00:00:00.010000+00:00,Group 6,Resource40,2011-11-29 00:00:00.010000+00:00,task-52053,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2012-01-12 11:19:40.782000+00:00 +Internet,LEFT_case-11399,2012-01-24 00:00:00+00:00,General,2012-01-17 10:01:44.200000+00:00,2012-01-24 00:00:00.010000+00:00,Group 6,Resource40,2011-11-29 00:00:00.010000+00:00,task-52056,T16 Report reasons to hold request,complete,Group 1,Resource11,2012-01-12 11:25:33.823000+00:00 +Internet,LEFT_case-11399,2012-01-24 00:00:00+00:00,General,2012-01-17 10:01:44.200000+00:00,2012-01-24 00:00:00.010000+00:00,Group 6,Resource40,2011-11-29 00:00:00.010000+00:00,task-52059,T19 Determine report Y to stop indication,complete,Group 3,Resource11,2012-01-12 11:26:54.747000+00:00 +Internet,LEFT_case-11427,2012-03-07 00:00:00+00:00,General,,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-51977,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-23 14:21:35.335000+00:00 +Internet,LEFT_case-11427,2012-03-07 00:00:00+00:00,General,,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-53447,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-23 14:22:47.598000+00:00 +Internet,LEFT_case-11427,2012-03-07 00:00:00+00:00,General,,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-53446,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-23 14:38:16.158000+00:00 +Internet,LEFT_case-11437,2012-03-07 00:00:00+00:00,General,2012-01-18 10:25:47.641000+00:00,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-51998,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-18 09:39:31.608000+00:00 +Internet,LEFT_case-11437,2012-03-07 00:00:00+00:00,General,2012-01-18 10:25:47.641000+00:00,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-53029,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-18 09:40:33.063000+00:00 +Internet,LEFT_case-11437,2012-03-07 00:00:00+00:00,General,2012-01-18 10:25:47.641000+00:00,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-53028,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-18 09:41:36.146000+00:00 +Internet,LEFT_case-11458,2012-03-08 00:00:00+00:00,General,,2012-03-08 00:00:00.010000+00:00,Group 5,Resource05,2012-01-12 01:06:40.010000+00:00,task-52267,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-23 15:39:28.185000+00:00 +Internet,LEFT_case-11458,2012-03-08 00:00:00+00:00,General,,2012-03-08 00:00:00.010000+00:00,Group 5,Resource05,2012-01-12 01:06:40.010000+00:00,task-53488,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-23 15:40:42.753000+00:00 +Internet,LEFT_case-11458,2012-03-08 00:00:00+00:00,General,,2012-03-08 00:00:00.010000+00:00,Group 5,Resource05,2012-01-12 01:06:40.010000+00:00,task-53487,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-23 15:42:10.417000+00:00 +Desk,LEFT_case-11460,2012-03-02 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource06,2012-01-06 01:06:40.010000+00:00,task-52286,Confirmation of receipt,complete,EMPTY,Resource06,2012-01-19 16:12:19.703000+00:00 +Desk,LEFT_case-11460,2012-03-02 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource06,2012-01-06 01:06:40.010000+00:00,task-53277,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2012-01-19 16:14:39.497000+00:00 +Desk,LEFT_case-11460,2012-03-02 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource06,2012-01-06 01:06:40.010000+00:00,task-53276,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2012-01-19 16:15:25.469000+00:00 +Internet,LEFT_case-11470,2012-03-09 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource18,2012-01-13 01:06:40.010000+00:00,task-52400,Confirmation of receipt,complete,EMPTY,Resource18,2012-01-18 09:10:47.037000+00:00 +Internet,LEFT_case-11470,2012-03-09 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource18,2012-01-13 01:06:40.010000+00:00,task-53022,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2012-01-18 09:15:25.069000+00:00 +Internet,LEFT_case-11470,2012-03-09 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource18,2012-01-13 01:06:40.010000+00:00,task-53021,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2012-01-18 09:24:07.559000+00:00 +Internet,LEFT_case-11473,2012-03-09 00:00:00+00:00,General,,2012-03-09 00:00:00.010000+00:00,Group 5,Resource18,2012-01-13 01:06:40.010000+00:00,task-52544,Confirmation of receipt,complete,EMPTY,Resource18,2012-01-18 10:29:52.496000+00:00 +Internet,LEFT_case-11473,2012-03-09 00:00:00+00:00,General,,2012-03-09 00:00:00.010000+00:00,Group 5,Resource18,2012-01-13 01:06:40.010000+00:00,task-53146,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2012-01-18 11:51:41.408000+00:00 +Internet,LEFT_case-11481,2012-03-10 00:00:00+00:00,General,,2012-03-10 00:00:00.010000+00:00,Group 5,Resource23,2012-01-14 01:06:40.010000+00:00,task-52561,Confirmation of receipt,complete,EMPTY,Resource23,2012-01-23 10:41:13.388000+00:00 +Internet,LEFT_case-11481,2012-03-10 00:00:00+00:00,General,,2012-03-10 00:00:00.010000+00:00,Group 5,Resource23,2012-01-14 01:06:40.010000+00:00,task-53402,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2012-01-23 10:45:51.220000+00:00 +Internet,LEFT_case-11517,2012-03-13 00:00:00+00:00,General,,2012-03-13 00:00:00.010000+00:00,Group 5,Resource06,2012-01-17 01:06:40.010000+00:00,task-52825,Confirmation of receipt,complete,EMPTY,Resource18,2012-01-17 16:54:45.106000+00:00 +Internet,LEFT_case-11517,2012-03-13 00:00:00+00:00,General,,2012-03-13 00:00:00.010000+00:00,Group 5,Resource06,2012-01-17 01:06:40.010000+00:00,task-52977,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2012-01-17 17:01:50.545000+00:00 +Desk,LEFT_case-3756,2010-11-29 01:06:40+00:00,General,2010-11-29 14:51:06.575000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource02,2010-10-04 01:06:40.020000+00:00,task-25,Confirmation of receipt,complete,EMPTY,Resource02,2010-10-05 08:32:48.565000+00:00 +Desk,LEFT_case-3756,2010-11-29 01:06:40+00:00,General,2010-11-29 14:51:06.575000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource02,2010-10-04 01:06:40.020000+00:00,task-45,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-10-05 08:42:49.801000+00:00 +Desk,LEFT_case-3756,2010-11-29 01:06:40+00:00,General,2010-11-29 14:51:06.575000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource02,2010-10-04 01:06:40.020000+00:00,task-48,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-10-05 09:39:14.231000+00:00 +Desk,LEFT_case-3756,2010-11-29 01:06:40+00:00,General,2010-11-29 14:51:06.575000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource02,2010-10-04 01:06:40.020000+00:00,task-47,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-05 10:44:20.945000+00:00 +Desk,LEFT_case-3766,2010-11-29 01:06:40+00:00,Experts,2010-11-29 13:18:50.141000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource08,2010-10-04 01:06:40.020000+00:00,task-35,Confirmation of receipt,complete,EMPTY,Resource08,2010-10-05 13:01:58.437000+00:00 +Desk,LEFT_case-3766,2010-11-29 01:06:40+00:00,Experts,2010-11-29 13:18:50.141000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource08,2010-10-04 01:06:40.020000+00:00,task-67,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-10-05 13:07:35.391000+00:00 +Desk,LEFT_case-3766,2010-11-29 01:06:40+00:00,Experts,2010-11-29 13:18:50.141000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource08,2010-10-04 01:06:40.020000+00:00,task-81,T03 Adjust confirmation of receipt,complete,Group 1,Resource08,2010-10-05 15:22:03.157000+00:00 +Desk,LEFT_case-3766,2010-11-29 01:06:40+00:00,Experts,2010-11-29 13:18:50.141000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource08,2010-10-04 01:06:40.020000+00:00,task-86,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-06 09:12:49.541000+00:00 +Internet,LEFT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-128,Confirmation of receipt,complete,Group 1,Resource12,2010-10-18 09:24:27.073000+00:00 +Internet,LEFT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-273,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-10-18 10:45:17.970000+00:00 +Internet,LEFT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-277,T03 Adjust confirmation of receipt,complete,Group 1,Resource12,2010-10-18 12:27:27.873000+00:00 +Internet,LEFT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-275,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-10-21 08:14:04.349000+00:00 +Internet,LEFT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-333,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-10-21 08:36:37.616000+00:00 +Internet,LEFT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-312,T03 Adjust confirmation of receipt,complete,Group 1,Resource12,2010-10-21 09:23:05.590000+00:00 +Internet,LEFT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-358,T03 Adjust confirmation of receipt,complete,Group 1,Resource12,2010-10-21 11:47:50.697000+00:00 +Internet,LEFT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-360,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-10-22 13:21:52.847000+00:00 +Internet,LEFT_case-3877,2010-11-30 01:06:40+00:00,General,2011-03-01 09:23:58.143000+00:00,2010-11-30 01:06:40.010000+00:00,,Resource12,2010-10-11 01:06:40.020000+00:00,task-187,Confirmation of receipt,complete,Group 1,Resource12,2010-11-01 10:37:56.964000+00:00 +Internet,LEFT_case-3877,2010-11-30 01:06:40+00:00,General,2011-03-01 09:23:58.143000+00:00,2010-11-30 01:06:40.010000+00:00,,Resource12,2010-10-11 01:06:40.020000+00:00,task-609,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-11-02 10:38:19.621000+00:00 +Internet,LEFT_case-3877,2010-11-30 01:06:40+00:00,General,2011-03-01 09:23:58.143000+00:00,2010-11-30 01:06:40.010000+00:00,,Resource12,2010-10-11 01:06:40.020000+00:00,task-706,T04 Determine confirmation of receipt,complete,EMPTY,Resource12,2010-11-02 10:42:47.991000+00:00 +Internet,LEFT_case-3877,2010-11-30 01:06:40+00:00,General,2011-03-01 09:23:58.143000+00:00,2010-11-30 01:06:40.010000+00:00,,Resource12,2010-10-11 01:06:40.020000+00:00,task-704,T08 Draft and send request for advice,complete,Group 1,Resource12,2010-11-03 10:06:27.156000+00:00 +Internet,LEFT_case-3877,2010-11-30 01:06:40+00:00,General,2011-03-01 09:23:58.143000+00:00,2010-11-30 01:06:40.010000+00:00,,Resource12,2010-10-11 01:06:40.020000+00:00,task-705,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-11-03 10:06:46.745000+00:00 +Internet,LEFT_case-3877,2010-11-30 01:06:40+00:00,General,2011-03-01 09:23:58.143000+00:00,2010-11-30 01:06:40.010000+00:00,,Resource12,2010-10-11 01:06:40.020000+00:00,task-786,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-11-03 10:07:47.559000+00:00 +Internet,LEFT_case-3879,2010-12-06 00:00:00+00:00,General,2010-12-06 09:01:13.501000+00:00,2010-12-06 00:00:00.010000+00:00,,Resource01,2010-10-11 00:00:00.020000+00:00,task-189,Confirmation of receipt,complete,EMPTY,Resource11,2010-10-27 09:27:51.856000+00:00 +Internet,LEFT_case-3879,2010-12-06 00:00:00+00:00,General,2010-12-06 09:01:13.501000+00:00,2010-12-06 00:00:00.010000+00:00,,Resource01,2010-10-11 00:00:00.020000+00:00,task-533,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-04 15:03:15.752000+00:00 +Internet,LEFT_case-3879,2010-12-06 00:00:00+00:00,General,2010-12-06 09:01:13.501000+00:00,2010-12-06 00:00:00.010000+00:00,,Resource01,2010-10-11 00:00:00.020000+00:00,task-873,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-26 09:30:16.271000+00:00 +e-mail,LEFT_case-3926,2010-12-09 00:00:00+00:00,Experts,2011-01-28 15:31:07.302000+00:00,2010-12-09 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-238,Confirmation of receipt,complete,Group 1,Resource02,2010-11-04 11:33:28.141000+00:00 +e-mail,LEFT_case-3926,2010-12-09 00:00:00+00:00,Experts,2011-01-28 15:31:07.302000+00:00,2010-12-09 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-879,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-11-04 14:59:41.086000+00:00 +e-mail,LEFT_case-3926,2010-12-09 00:00:00+00:00,Experts,2011-01-28 15:31:07.302000+00:00,2010-12-09 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-944,T03 Adjust confirmation of receipt,complete,Group 1,Resource02,2010-11-04 15:14:32.442000+00:00 +e-mail,LEFT_case-3926,2010-12-09 00:00:00+00:00,Experts,2011-01-28 15:31:07.302000+00:00,2010-12-09 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-996,T03 Adjust confirmation of receipt,complete,Group 1,Resource02,2010-11-05 08:25:01.081000+00:00 +e-mail,LEFT_case-3926,2010-12-09 00:00:00+00:00,Experts,2011-01-28 15:31:07.302000+00:00,2010-12-09 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-1019,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-11 15:04:26.194000+00:00 +e-mail,LEFT_case-3927,2010-12-03 01:06:40+00:00,General,2011-09-02 11:03:10.777000+00:00,2010-12-03 01:06:40.010000+00:00,Group 5,Resource12,2010-10-08 01:06:40.020000+00:00,task-239,Confirmation of receipt,complete,Group 1,Resource15,2010-11-23 11:34:13.017000+00:00 +e-mail,LEFT_case-3927,2010-12-03 01:06:40+00:00,General,2011-09-02 11:03:10.777000+00:00,2010-12-03 01:06:40.010000+00:00,Group 5,Resource12,2010-10-08 01:06:40.020000+00:00,task-2103,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-11-30 10:23:33.230000+00:00 +e-mail,LEFT_case-3927,2010-12-03 01:06:40+00:00,General,2011-09-02 11:03:10.777000+00:00,2010-12-03 01:06:40.010000+00:00,Group 5,Resource12,2010-10-08 01:06:40.020000+00:00,task-1878,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-27 12:00:24.623000+00:00 +Desk,LEFT_case-3961,2010-12-13 01:06:40+00:00,General,2011-01-14 15:34:24.686000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource07,2010-10-12 01:06:40.020000+00:00,task-276,Confirmation of receipt,complete,Group 1,Resource11,2010-10-27 08:59:50.876000+00:00 +Desk,LEFT_case-3961,2010-12-13 01:06:40+00:00,General,2011-01-14 15:34:24.686000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource07,2010-10-12 01:06:40.020000+00:00,task-529,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-10-27 09:04:29.967000+00:00 +Desk,LEFT_case-3961,2010-12-13 01:06:40+00:00,General,2011-01-14 15:34:24.686000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource07,2010-10-12 01:06:40.020000+00:00,task-530,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource11,2010-10-27 09:20:34.229000+00:00 +Desk,LEFT_case-3961,2010-12-13 01:06:40+00:00,General,2011-01-14 15:34:24.686000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource07,2010-10-12 01:06:40.020000+00:00,task-531,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 08:42:39.946000+00:00 +Desk,LEFT_case-3961,2010-12-13 01:06:40+00:00,General,2011-01-14 15:34:24.686000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource07,2010-10-12 01:06:40.020000+00:00,task-885,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 13:18:12.405000+00:00 +Internet,LEFT_case-3983,2010-12-07 01:06:40+00:00,General,2010-12-20 12:50:32.733000+00:00,2010-12-07 01:06:40.010000+00:00,,Resource06,2010-10-12 01:06:40.020000+00:00,task-300,Confirmation of receipt,complete,Group 1,Resource06,2010-11-25 08:59:33.164000+00:00 +Internet,LEFT_case-3983,2010-12-07 01:06:40+00:00,General,2010-12-20 12:50:32.733000+00:00,2010-12-07 01:06:40.010000+00:00,,Resource06,2010-10-12 01:06:40.020000+00:00,task-2022,T03 Adjust confirmation of receipt,complete,Group 1,Resource06,2010-11-25 09:07:20.020000+00:00 +Internet,LEFT_case-3983,2010-12-07 01:06:40+00:00,General,2010-12-20 12:50:32.733000+00:00,2010-12-07 01:06:40.010000+00:00,,Resource06,2010-10-12 01:06:40.020000+00:00,task-2025,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2010-11-25 09:08:09.843000+00:00 +Internet,LEFT_case-3983,2010-12-07 01:06:40+00:00,General,2010-12-20 12:50:32.733000+00:00,2010-12-07 01:06:40.010000+00:00,,Resource06,2010-10-12 01:06:40.020000+00:00,task-2019,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2010-11-25 09:08:35.547000+00:00 +Internet,LEFT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-301,Confirmation of receipt,complete,Group 1,Resource09,2010-10-25 15:57:54.249000+00:00 +Internet,LEFT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-479,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-10-25 16:13:31.442000+00:00 +Internet,LEFT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-485,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource09,2010-10-26 09:38:40.195000+00:00 +Internet,LEFT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-480,T08 Draft and send request for advice,complete,Group 1,Resource09,2010-10-26 09:41:04.891000+00:00 +Internet,LEFT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-482,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource35,2010-11-02 15:47:29.459000+00:00 +Internet,LEFT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-484,T07-4 Draft internal advice to hold for type 4,complete,Group 12,Resource32,2010-11-04 09:07:41.168000+00:00 +Internet,LEFT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-483,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource32,2010-11-04 09:12:24.545000+00:00 +Internet,LEFT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-844,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2010-11-04 09:37:44.329000+00:00 +Internet,LEFT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-839,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-04 13:56:19.742000+00:00 +Internet,LEFT_case-3987,2011-01-05 01:06:40+00:00,Experts,2011-01-05 15:59:41.857000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-14 01:06:40.020000+00:00,task-304,Confirmation of receipt,complete,Group 1,Resource08,2010-10-26 10:47:33.327000+00:00 +Internet,LEFT_case-3987,2011-01-05 01:06:40+00:00,Experts,2011-01-05 15:59:41.857000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-14 01:06:40.020000+00:00,task-498,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-10-26 12:23:24.830000+00:00 +Internet,LEFT_case-3987,2011-01-05 01:06:40+00:00,Experts,2011-01-05 15:59:41.857000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-14 01:06:40.020000+00:00,task-514,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-28 11:46:00.571000+00:00 +Internet,LEFT_case-3988,2010-12-15 01:06:40+00:00,Experts,2010-12-03 13:08:58.576000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource02,2010-10-14 01:06:40.020000+00:00,task-306,Confirmation of receipt,complete,Group 1,Resource02,2010-11-08 13:51:30.397000+00:00 +Internet,LEFT_case-3988,2010-12-15 01:06:40+00:00,Experts,2010-12-03 13:08:58.576000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource02,2010-10-14 01:06:40.020000+00:00,task-1174,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-11-09 08:46:13.771000+00:00 +Internet,LEFT_case-3988,2010-12-15 01:06:40+00:00,Experts,2010-12-03 13:08:58.576000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource02,2010-10-14 01:06:40.020000+00:00,task-1228,T11 Create document X request unlicensed,complete,Group 1,Resource02,2010-11-09 12:03:37.792000+00:00 +Internet,LEFT_case-3988,2010-12-15 01:06:40+00:00,Experts,2010-12-03 13:08:58.576000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource02,2010-10-14 01:06:40.020000+00:00,task-1301,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:56:31.497000+00:00 +Internet,LEFT_case-3988,2010-12-15 01:06:40+00:00,Experts,2010-12-03 13:08:58.576000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource02,2010-10-14 01:06:40.020000+00:00,task-1270,T13 Adjust document X request unlicensed,complete,Group 1,admin2,2010-12-03 13:08:59.345000+00:00 +Internet,LEFT_case-3989,2010-12-10 01:06:40+00:00,General,2010-12-29 16:18:00.338000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-308,Confirmation of receipt,complete,Group 1,Resource12,2010-10-22 09:57:23.546000+00:00 +Internet,LEFT_case-3989,2010-12-10 01:06:40+00:00,General,2010-12-29 16:18:00.338000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-384,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2010-10-22 09:58:13.317000+00:00 +Internet,LEFT_case-3989,2010-12-10 01:06:40+00:00,General,2010-12-29 16:18:00.338000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-383,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-10-22 09:59:04.836000+00:00 +Internet,LEFT_case-3991,2010-12-10 01:06:40+00:00,General,2010-12-08 14:19:25.375000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource04,2010-10-15 01:06:40.020000+00:00,task-310,Confirmation of receipt,complete,Group 1,Resource04,2010-10-22 11:17:05.605000+00:00 +Internet,LEFT_case-3991,2010-12-10 01:06:40+00:00,General,2010-12-08 14:19:25.375000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource04,2010-10-15 01:06:40.020000+00:00,task-410,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-10-22 11:23:44.282000+00:00 +Internet,LEFT_case-3991,2010-12-10 01:06:40+00:00,General,2010-12-08 14:19:25.375000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource04,2010-10-15 01:06:40.020000+00:00,task-412,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-10-22 11:24:08.474000+00:00 +Internet,LEFT_case-3995,2011-01-05 01:06:40+00:00,Experts,2010-12-28 09:28:09.296000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-20 01:06:40.020000+00:00,task-320,Confirmation of receipt,complete,EMPTY,Resource08,2010-10-26 09:45:05.690000+00:00 +Internet,LEFT_case-3995,2011-01-05 01:06:40+00:00,Experts,2010-12-28 09:28:09.296000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-20 01:06:40.020000+00:00,task-512,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-28 11:44:43.133000+00:00 +Internet,LEFT_case-3995,2011-01-05 01:06:40+00:00,Experts,2010-12-28 09:28:09.296000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-20 01:06:40.020000+00:00,task-495,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-08 14:42:25.008000+00:00 +Internet,LEFT_case-3997,2010-12-12 01:06:40+00:00,Experts,2010-12-03 00:00:00.010000+00:00,2010-12-12 01:06:40.010000+00:00,,Resource17,2010-10-17 01:06:40.020000+00:00,task-322,Confirmation of receipt,complete,Group 1,Resource17,2010-11-04 14:30:42.541000+00:00 +Internet,LEFT_case-3997,2010-12-12 01:06:40+00:00,Experts,2010-12-03 00:00:00.010000+00:00,2010-12-12 01:06:40.010000+00:00,,Resource17,2010-10-17 01:06:40.020000+00:00,task-947,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-11-04 14:31:21.178000+00:00 +Internet,LEFT_case-3997,2010-12-12 01:06:40+00:00,Experts,2010-12-03 00:00:00.010000+00:00,2010-12-12 01:06:40.010000+00:00,,Resource17,2010-10-17 01:06:40.020000+00:00,task-1635,T04 Determine confirmation of receipt,complete,EMPTY,Resource02,2010-11-22 12:08:49.070000+00:00 +Internet,LEFT_case-3998,2010-12-15 01:06:40+00:00,Experts,2010-12-15 15:27:27.932000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-323,Confirmation of receipt,complete,EMPTY,Resource08,2010-10-26 09:18:14.992000+00:00 +Internet,LEFT_case-3998,2010-12-15 01:06:40+00:00,Experts,2010-12-15 15:27:27.932000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-513,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-28 11:45:05.599000+00:00 +Internet,LEFT_case-3998,2010-12-15 01:06:40+00:00,Experts,2010-12-15 15:27:27.932000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-492,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-02 14:38:22.827000+00:00 +Internet,LEFT_case-4000,2010-12-15 01:06:40+00:00,Experts,2010-12-01 16:06:48.028000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource17,2010-10-18 01:06:40.020000+00:00,task-325,Confirmation of receipt,complete,Group 1,Resource17,2010-11-04 11:45:14.018000+00:00 +Internet,LEFT_case-4000,2010-12-15 01:06:40+00:00,Experts,2010-12-01 16:06:48.028000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource17,2010-10-18 01:06:40.020000+00:00,task-891,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-11-04 11:45:48.226000+00:00 +Internet,LEFT_case-4000,2010-12-15 01:06:40+00:00,Experts,2010-12-01 16:06:48.028000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource17,2010-10-18 01:06:40.020000+00:00,task-1630,T03 Adjust confirmation of receipt,complete,Group 1,Resource17,2010-11-18 10:40:05.522000+00:00 +Internet,LEFT_case-4000,2010-12-15 01:06:40+00:00,Experts,2010-12-01 16:06:48.028000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource17,2010-10-18 01:06:40.020000+00:00,task-1633,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-24 11:14:28.576000+00:00 +Internet,LEFT_case-4008,2010-12-16 00:00:00+00:00,General,2010-10-26 15:28:42.703000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-346,Confirmation of receipt,complete,Group 1,admin2,2010-10-26 15:28:43.424000+00:00 +Internet,LEFT_case-4010,2010-12-13 01:06:40+00:00,Experts,2010-12-14 16:12:14.310000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-348,Confirmation of receipt,complete,Group 1,Resource08,2010-10-26 11:03:01.924000+00:00 +Internet,LEFT_case-4010,2010-12-13 01:06:40+00:00,Experts,2010-12-14 16:12:14.310000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-515,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-28 11:46:26.703000+00:00 +Internet,LEFT_case-4010,2010-12-13 01:06:40+00:00,Experts,2010-12-14 16:12:14.310000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-501,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-04 11:36:38.175000+00:00 +Internet,LEFT_case-4011,2010-12-14 01:06:40+00:00,General,2010-12-10 14:12:45.513000+00:00,2010-12-14 01:06:40.010000+00:00,,Resource07,2010-10-21 01:06:40.020000+00:00,task-349,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-08 09:18:09.532000+00:00 +Internet,LEFT_case-4011,2010-12-14 01:06:40+00:00,General,2010-12-10 14:12:45.513000+00:00,2010-12-14 01:06:40.010000+00:00,,Resource07,2010-10-21 01:06:40.020000+00:00,task-1082,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-08 09:18:29.688000+00:00 +Internet,LEFT_case-4011,2010-12-14 01:06:40+00:00,General,2010-12-10 14:12:45.513000+00:00,2010-12-14 01:06:40.010000+00:00,,Resource07,2010-10-21 01:06:40.020000+00:00,task-1222,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-11-29 14:58:20.142000+00:00 +Internet,LEFT_case-4011,2010-12-14 01:06:40+00:00,General,2010-12-10 14:12:45.513000+00:00,2010-12-14 01:06:40.010000+00:00,,Resource07,2010-10-21 01:06:40.020000+00:00,task-2258,T03 Adjust confirmation of receipt,complete,Group 1,Resource07,2010-12-10 08:26:07.397000+00:00 +Internet,LEFT_case-4011,2010-12-14 01:06:40+00:00,General,2010-12-10 14:12:45.513000+00:00,2010-12-14 01:06:40.010000+00:00,,Resource07,2010-10-21 01:06:40.020000+00:00,task-3535,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-10 08:28:24.637000+00:00 +Internet,LEFT_case-4012,2010-12-15 01:06:40+00:00,General,2010-12-10 14:08:36.611000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource01,2010-10-20 01:06:40.020000+00:00,task-351,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-08 09:42:06.196000+00:00 +Internet,LEFT_case-4012,2010-12-15 01:06:40+00:00,General,2010-12-10 14:08:36.611000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource01,2010-10-20 01:06:40.020000+00:00,task-1094,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-08 09:42:23.986000+00:00 +Internet,LEFT_case-4012,2010-12-15 01:06:40+00:00,General,2010-12-10 14:08:36.611000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource01,2010-10-20 01:06:40.020000+00:00,task-1971,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-11-29 14:50:55.327000+00:00 +Internet,LEFT_case-4013,2011-02-25 01:06:40+00:00,Experts,2010-12-24 15:25:31.676000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-352,Confirmation of receipt,complete,Group 1,Resource17,2010-11-11 15:05:22.193000+00:00 +Internet,LEFT_case-4013,2011-02-25 01:06:40+00:00,Experts,2010-12-24 15:25:31.676000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-1407,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-11-11 15:06:10.159000+00:00 +Internet,LEFT_case-4013,2011-02-25 01:06:40+00:00,Experts,2010-12-24 15:25:31.676000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-1531,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-22 08:26:54.898000+00:00 +Internet,LEFT_case-4014,2010-12-16 00:00:00+00:00,General,2010-12-02 13:12:39.256000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-354,Confirmation of receipt,complete,Group 1,Resource11,2010-11-01 11:22:55.945000+00:00 +Internet,LEFT_case-4014,2010-12-16 00:00:00+00:00,General,2010-12-02 13:12:39.256000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-612,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 11:25:03.686000+00:00 +Internet,LEFT_case-4014,2010-12-16 00:00:00+00:00,General,2010-12-02 13:12:39.256000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-625,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-01 12:39:19.161000+00:00 +Internet,LEFT_case-4015,2010-12-16 00:00:00+00:00,General,2010-11-04 15:37:38.995000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-355,Confirmation of receipt,complete,EMPTY,admin2,2010-11-04 15:37:39.639000+00:00 +Post,LEFT_case-4017,2010-12-16 00:00:00+00:00,General,2010-12-07 14:49:47.626000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-18 00:00:00.020000+00:00,task-357,Confirmation of receipt,complete,Group 1,Resource11,2010-11-01 12:16:04.360000+00:00 +Post,LEFT_case-4017,2010-12-16 00:00:00+00:00,General,2010-12-07 14:49:47.626000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-18 00:00:00.020000+00:00,task-628,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 12:19:33.758000+00:00 +Post,LEFT_case-4017,2010-12-16 00:00:00+00:00,General,2010-12-07 14:49:47.626000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-18 00:00:00.020000+00:00,task-639,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-01 12:52:53.315000+00:00 +Post,LEFT_case-4020,2010-12-16 00:00:00+00:00,General,2010-12-02 13:54:08.640000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-364,Confirmation of receipt,complete,Group 1,Resource11,2010-11-01 12:46:24.892000+00:00 +Post,LEFT_case-4020,2010-12-16 00:00:00+00:00,General,2010-12-02 13:54:08.640000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-643,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 12:46:55.737000+00:00 +Post,LEFT_case-4020,2010-12-16 00:00:00+00:00,General,2010-12-02 13:54:08.640000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-853,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-09 11:20:01.131000+00:00 +Internet,LEFT_case-4021,2010-12-16 00:00:00+00:00,General,2010-12-06 15:58:40.035000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-12 00:00:00.020000+00:00,task-366,Confirmation of receipt,complete,Group 1,Resource11,2010-11-01 13:55:26.056000+00:00 +Internet,LEFT_case-4021,2010-12-16 00:00:00+00:00,General,2010-12-06 15:58:40.035000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-12 00:00:00.020000+00:00,task-663,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 13:56:49.019000+00:00 +Internet,LEFT_case-4021,2010-12-16 00:00:00+00:00,General,2010-12-06 15:58:40.035000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-12 00:00:00.020000+00:00,task-665,T16 Report reasons to hold request,complete,Group 1,Resource11,2010-11-01 14:08:01.278000+00:00 +Internet,LEFT_case-4021,2010-12-16 00:00:00+00:00,General,2010-12-06 15:58:40.035000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-12 00:00:00.020000+00:00,task-667,T19 Determine report Y to stop indication,complete,Group 3,Resource11,2010-11-01 14:22:02.839000+00:00 +Internet,LEFT_case-4021,2010-12-16 00:00:00+00:00,General,2010-12-06 15:58:40.035000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-12 00:00:00.020000+00:00,task-1229,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-09 13:04:41.176000+00:00 +Internet,LEFT_case-4024,2010-12-16 00:00:00+00:00,Experts,2010-12-01 00:00:00.010000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource17,2010-10-20 00:00:00.020000+00:00,task-369,Confirmation of receipt,complete,Group 1,admin2,2010-12-20 12:10:34.164000+00:00 +Post,LEFT_case-4025,2010-12-16 00:00:00+00:00,General,2010-12-06 08:34:01.693000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-370,Confirmation of receipt,complete,Group 1,Resource11,2010-11-01 15:05:27.606000+00:00 +Post,LEFT_case-4025,2010-12-16 00:00:00+00:00,General,2010-12-06 08:34:01.693000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-676,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 15:05:48.091000+00:00 +Post,LEFT_case-4025,2010-12-16 00:00:00+00:00,General,2010-12-06 08:34:01.693000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-679,T03 Adjust confirmation of receipt,complete,Group 1,Resource07,2010-12-02 10:03:09.970000+00:00 +Post,LEFT_case-4025,2010-12-16 00:00:00+00:00,General,2010-12-06 08:34:01.693000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-2616,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-02 10:04:10.288000+00:00 +Post,LEFT_case-4027,2010-12-16 01:06:40+00:00,General,2010-12-02 14:40:49.817000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource07,2010-10-01 01:06:40.020000+00:00,task-373,Confirmation of receipt,complete,Group 1,Resource11,2010-11-02 07:32:35.409000+00:00 +Post,LEFT_case-4027,2010-12-16 01:06:40+00:00,General,2010-12-02 14:40:49.817000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource07,2010-10-01 01:06:40.020000+00:00,task-693,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-02 07:33:03.163000+00:00 +Post,LEFT_case-4027,2010-12-16 01:06:40+00:00,General,2010-12-02 14:40:49.817000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource07,2010-10-01 01:06:40.020000+00:00,task-848,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-11-04 11:34:39.983000+00:00 +Post,LEFT_case-4028,2010-12-16 00:00:00+00:00,General,2010-12-02 14:23:04.930000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-01 00:00:00.020000+00:00,task-376,Confirmation of receipt,complete,Group 1,Resource01,2010-11-02 12:42:19.582000+00:00 +Post,LEFT_case-4028,2010-12-16 00:00:00+00:00,General,2010-12-02 14:23:04.930000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-01 00:00:00.020000+00:00,task-716,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-11-02 12:45:03.277000+00:00 +Post,LEFT_case-4028,2010-12-16 00:00:00+00:00,General,2010-12-02 14:23:04.930000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-01 00:00:00.020000+00:00,task-847,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 15:27:23.404000+00:00 +e-mail,LEFT_case-4057,2010-12-20 00:00:00+00:00,General,2010-12-09 14:16:49.836000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-451,Confirmation of receipt,complete,Group 1,Resource11,2010-11-03 07:29:21.044000+00:00 +e-mail,LEFT_case-4057,2010-12-20 00:00:00+00:00,General,2010-12-09 14:16:49.836000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-741,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-03 07:29:43.407000+00:00 +e-mail,LEFT_case-4057,2010-12-20 00:00:00+00:00,General,2010-12-09 14:16:49.836000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-750,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-11-03 07:52:15.597000+00:00 +e-mail,LEFT_case-4057,2010-12-20 00:00:00+00:00,General,2010-12-09 14:16:49.836000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-851,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-11 14:56:32.965000+00:00 +e-mail,LEFT_case-4058,2010-12-20 00:00:00+00:00,General,2010-12-09 13:44:04.791000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-452,Confirmation of receipt,complete,Group 1,Resource11,2010-11-03 07:58:51.869000+00:00 +e-mail,LEFT_case-4058,2010-12-20 00:00:00+00:00,General,2010-12-09 13:44:04.791000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-756,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-03 07:59:55.594000+00:00 +e-mail,LEFT_case-4058,2010-12-20 00:00:00+00:00,General,2010-12-09 13:44:04.791000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-850,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-11 14:38:59.844000+00:00 +e-mail,LEFT_case-4059,2010-12-20 00:00:00+00:00,General,2010-11-30 12:43:36.529000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-464,Confirmation of receipt,complete,Group 1,Resource11,2010-11-03 08:28:13.934000+00:00 +e-mail,LEFT_case-4059,2010-12-20 00:00:00+00:00,General,2010-11-30 12:43:36.529000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-767,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-03 08:29:04.356000+00:00 +e-mail,LEFT_case-4059,2010-12-20 00:00:00+00:00,General,2010-11-30 12:43:36.529000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-852,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-11 14:57:37.754000+00:00 +e-mail,LEFT_case-4060,2010-12-20 00:00:00+00:00,General,2010-12-02 12:43:39.676000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-465,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-08 10:25:51.042000+00:00 +e-mail,LEFT_case-4060,2010-12-20 00:00:00+00:00,General,2010-12-02 12:43:39.676000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-1122,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-08 10:26:14.161000+00:00 +e-mail,LEFT_case-4060,2010-12-20 00:00:00+00:00,General,2010-12-02 12:43:39.676000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-2101,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-11-26 15:42:09.276000+00:00 +e-mail,LEFT_case-4061,2010-12-20 00:00:00+00:00,General,2010-12-03 10:33:27.505000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-466,Confirmation of receipt,complete,Group 1,Resource11,2010-11-04 08:33:20.405000+00:00 +e-mail,LEFT_case-4061,2010-12-20 00:00:00+00:00,General,2010-12-03 10:33:27.505000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-827,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-04 08:33:48.717000+00:00 +e-mail,LEFT_case-4061,2010-12-20 00:00:00+00:00,General,2010-12-03 10:33:27.505000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-854,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 11:51:09.059000+00:00 +e-mail,LEFT_case-4063,2010-12-20 00:00:00+00:00,General,2010-12-10 09:44:08.348000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-468,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-04 10:42:56.993000+00:00 +e-mail,LEFT_case-4063,2010-12-20 00:00:00+00:00,General,2010-12-10 09:44:08.348000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-857,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-04 10:44:29.599000+00:00 +e-mail,LEFT_case-4063,2010-12-20 00:00:00+00:00,General,2010-12-10 09:44:08.348000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-874,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 11:30:38.645000+00:00 +Post,LEFT_case-4071,2010-12-20 00:00:00+00:00,General,2010-12-03 14:17:45.760000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-08 00:00:00.020000+00:00,task-476,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-08 09:58:52.315000+00:00 +Post,LEFT_case-4071,2010-12-20 00:00:00+00:00,General,2010-12-03 14:17:45.760000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-08 00:00:00.020000+00:00,task-1108,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-08 09:59:08.857000+00:00 +Post,LEFT_case-4071,2010-12-20 00:00:00+00:00,General,2010-12-03 14:17:45.760000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-08 00:00:00.020000+00:00,task-2061,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-01 10:14:30.086000+00:00 +Internet,LEFT_case-4077,2010-12-21 01:06:40+00:00,General,2010-12-22 15:29:11.843000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource09,2010-10-21 01:06:40.020000+00:00,task-490,Confirmation of receipt,complete,Group 1,Resource08,2010-11-05 11:42:28.549000+00:00 +Internet,LEFT_case-4077,2010-12-21 01:06:40+00:00,General,2010-12-22 15:29:11.843000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource09,2010-10-21 01:06:40.020000+00:00,task-1299,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:48:36.475000+00:00 +Internet,LEFT_case-4077,2010-12-21 01:06:40+00:00,General,2010-12-22 15:29:11.843000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource09,2010-10-21 01:06:40.020000+00:00,task-1036,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-17 12:06:19.161000+00:00 +Internet,LEFT_case-4081,2010-12-21 01:06:40+00:00,Experts,2010-11-30 15:33:33.288000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-11 01:06:40.020000+00:00,task-508,Confirmation of receipt,complete,Group 1,Resource08,2010-11-05 08:58:23.197000+00:00 +Internet,LEFT_case-4081,2010-12-21 01:06:40+00:00,Experts,2010-11-30 15:33:33.288000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-11 01:06:40.020000+00:00,task-1023,T03 Adjust confirmation of receipt,complete,Group 1,Resource08,2010-11-05 11:22:11.329000+00:00 +Internet,LEFT_case-4081,2010-12-21 01:06:40+00:00,Experts,2010-11-30 15:33:33.288000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-11 01:06:40.020000+00:00,task-1297,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 15:02:26.576000+00:00 +Internet,LEFT_case-4081,2010-12-21 01:06:40+00:00,Experts,2010-11-30 15:33:33.288000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-11 01:06:40.020000+00:00,task-1012,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-18 12:24:28.715000+00:00 +Internet,LEFT_case-4083,2010-12-21 00:00:00+00:00,General,2011-01-13 08:57:53.945000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource05,2010-10-21 00:00:00.020000+00:00,task-511,Confirmation of receipt,complete,Group 1,Resource05,2010-11-09 08:46:13.078000+00:00 +Internet,LEFT_case-4083,2010-12-21 00:00:00+00:00,General,2011-01-13 08:57:53.945000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource05,2010-10-21 00:00:00.020000+00:00,task-1227,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-11-09 08:49:59.813000+00:00 +Internet,LEFT_case-4083,2010-12-21 00:00:00+00:00,General,2011-01-13 08:57:53.945000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource05,2010-10-21 00:00:00.020000+00:00,task-1279,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:52:24.857000+00:00 +Internet,LEFT_case-4084,2010-12-21 00:00:00+00:00,General,2010-12-20 12:38:26.767000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-516,Confirmation of receipt,complete,Group 1,Resource09,2010-11-04 15:18:51.161000+00:00 +Internet,LEFT_case-4084,2010-12-21 00:00:00+00:00,General,2010-12-20 12:38:26.767000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-985,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-09 08:58:12.628000+00:00 +Internet,LEFT_case-4084,2010-12-21 00:00:00+00:00,General,2010-12-20 12:38:26.767000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-1223,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2010-11-16 12:26:36.800000+00:00 +Internet,LEFT_case-4084,2010-12-21 00:00:00+00:00,General,2010-12-20 12:38:26.767000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-1533,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2010-11-16 13:56:45.290000+00:00 +Internet,LEFT_case-4084,2010-12-21 00:00:00+00:00,General,2010-12-20 12:38:26.767000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-1580,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-22 08:30:48.002000+00:00 +Internet,LEFT_case-4084,2010-12-21 00:00:00+00:00,General,2010-12-20 12:38:26.767000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-1237,T07-5 Draft intern advice aspect 5,complete,Group 1,admin2,2010-12-20 12:38:27.652000+00:00 +Internet,LEFT_case-4085,2010-12-21 00:00:00+00:00,General,2010-12-20 12:49:39.180000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-517,Confirmation of receipt,complete,EMPTY,admin2,2010-12-20 12:49:40.212000+00:00 +Internet,LEFT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-546,Confirmation of receipt,complete,Group 1,Resource09,2010-11-04 11:46:41.738000+00:00 +Internet,LEFT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-899,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-04 11:49:30.047000+00:00 +Internet,LEFT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-901,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource09,2010-11-04 11:56:08.505000+00:00 +Internet,LEFT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-906,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-04 11:58:11.677000+00:00 +Internet,LEFT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-945,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2010-11-04 14:50:14.865000+00:00 +Internet,LEFT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-994,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2010-11-04 15:44:28.309000+00:00 +Internet,LEFT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-1530,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-17 13:45:24.748000+00:00 +Internet,LEFT_case-4101,2010-12-23 01:06:40+00:00,General,2011-02-04 09:40:40.613000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource05,2010-10-21 01:06:40.020000+00:00,task-548,Confirmation of receipt,complete,Group 1,Resource05,2010-11-09 09:38:24.169000+00:00 +Internet,LEFT_case-4101,2010-12-23 01:06:40+00:00,General,2011-02-04 09:40:40.613000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource05,2010-10-21 01:06:40.020000+00:00,task-1246,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-11-09 09:39:15.034000+00:00 +Internet,LEFT_case-4101,2010-12-23 01:06:40+00:00,General,2011-02-04 09:40:40.613000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource05,2010-10-21 01:06:40.020000+00:00,task-1280,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:54:10.595000+00:00 +Internet,LEFT_case-4102,2010-12-23 00:00:00+00:00,Experts,2010-12-30 11:23:06.047000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource08,2010-10-21 00:00:00.020000+00:00,task-549,Confirmation of receipt,complete,Group 1,Resource08,2010-11-05 09:26:50.492000+00:00 +Internet,LEFT_case-4102,2010-12-23 00:00:00+00:00,Experts,2010-12-30 11:23:06.047000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource08,2010-10-21 00:00:00.020000+00:00,task-1021,T03 Adjust confirmation of receipt,complete,Group 1,Resource08,2010-11-05 09:43:41.331000+00:00 +Internet,LEFT_case-4102,2010-12-23 00:00:00+00:00,Experts,2010-12-30 11:23:06.047000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource08,2010-10-21 00:00:00.020000+00:00,task-1298,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:58:23.296000+00:00 +Internet,LEFT_case-4102,2010-12-23 00:00:00+00:00,Experts,2010-12-30 11:23:06.047000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource08,2010-10-21 00:00:00.020000+00:00,task-1018,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-16 16:09:30.900000+00:00 +Internet,LEFT_case-4103,2010-12-16 01:06:40+00:00,General,2010-12-10 14:39:00.949000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource01,2010-10-21 01:06:40.020000+00:00,task-550,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-08 10:47:19.211000+00:00 +Internet,LEFT_case-4103,2010-12-16 01:06:40+00:00,General,2010-12-10 14:39:00.949000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource01,2010-10-21 01:06:40.020000+00:00,task-1139,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-08 10:47:36.538000+00:00 +Internet,LEFT_case-4103,2010-12-16 01:06:40+00:00,General,2010-12-10 14:39:00.949000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource01,2010-10-21 01:06:40.020000+00:00,task-1257,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:50:12.389000+00:00 +Internet,LEFT_case-4111,2011-05-05 01:06:40+00:00,General,2011-04-13 00:00:00.020000+00:00,2011-05-05 01:06:40.020000+00:00,,Resource02,2010-10-23 01:06:40.020000+00:00,task-558,Confirmation of receipt,complete,EMPTY,Resource02,2010-11-09 15:00:48.543000+00:00 +Internet,LEFT_case-4111,2011-05-05 01:06:40+00:00,General,2011-04-13 00:00:00.020000+00:00,2011-05-05 01:06:40.020000+00:00,,Resource02,2010-10-23 01:06:40.020000+00:00,task-1288,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-11-09 16:02:46.641000+00:00 +Internet,LEFT_case-4111,2011-05-05 01:06:40+00:00,General,2011-04-13 00:00:00.020000+00:00,2011-05-05 01:06:40.020000+00:00,,Resource02,2010-10-23 01:06:40.020000+00:00,task-1308,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-11-09 16:04:24.683000+00:00 +Internet,LEFT_case-4111,2011-05-05 01:06:40+00:00,General,2011-04-13 00:00:00.020000+00:00,2011-05-05 01:06:40.020000+00:00,,Resource02,2010-10-23 01:06:40.020000+00:00,task-1304,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 15:04:23.485000+00:00 +Internet,LEFT_case-4114,2010-12-24 01:06:40+00:00,General,2010-12-30 12:12:57.114000+00:00,2010-12-24 01:06:40.010000+00:00,,Resource08,2010-10-24 01:06:40.020000+00:00,task-561,Confirmation of receipt,complete,Group 1,Resource08,2010-11-05 15:19:40.640000+00:00 +Internet,LEFT_case-4114,2010-12-24 01:06:40+00:00,General,2010-12-30 12:12:57.114000+00:00,2010-12-24 01:06:40.010000+00:00,,Resource08,2010-10-24 01:06:40.020000+00:00,task-1295,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:46:48.754000+00:00 +Internet,LEFT_case-4114,2010-12-24 01:06:40+00:00,General,2010-12-30 12:12:57.114000+00:00,2010-12-24 01:06:40.010000+00:00,,Resource08,2010-10-24 01:06:40.020000+00:00,task-1054,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-18 14:45:48.314000+00:00 +Internet,LEFT_case-4117,2010-12-20 01:06:40+00:00,General,2010-12-10 13:41:17.791000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource34,2010-10-25 01:06:40.020000+00:00,task-564,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-25 15:19:58.537000+00:00 +Internet,LEFT_case-4117,2010-12-20 01:06:40+00:00,General,2010-12-10 13:41:17.791000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource34,2010-10-25 01:06:40.020000+00:00,task-2053,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-25 15:24:57.419000+00:00 +Internet,LEFT_case-4117,2010-12-20 01:06:40+00:00,General,2010-12-10 13:41:17.791000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource34,2010-10-25 01:06:40.020000+00:00,task-2119,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-11-29 08:04:51.772000+00:00 +Internet,LEFT_case-4117,2010-12-20 01:06:40+00:00,General,2010-12-10 13:41:17.791000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource34,2010-10-25 01:06:40.020000+00:00,task-2278,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-09 13:38:51.711000+00:00 +Internet,LEFT_case-4118,2010-12-28 01:06:40+00:00,General,2010-12-31 10:00:12.259000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource04,2010-10-25 01:06:40.020000+00:00,task-565,Confirmation of receipt,complete,Group 1,Resource04,2010-11-09 16:09:47.500000+00:00 +Internet,LEFT_case-4118,2010-12-28 01:06:40+00:00,General,2010-12-31 10:00:12.259000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource04,2010-10-25 01:06:40.020000+00:00,task-1311,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-09 16:10:15.497000+00:00 +Internet,LEFT_case-4118,2010-12-28 01:06:40+00:00,General,2010-12-31 10:00:12.259000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource04,2010-10-25 01:06:40.020000+00:00,task-1532,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-22 08:28:28.030000+00:00 +Internet,LEFT_case-4119,2010-12-21 01:06:40+00:00,General,2010-12-17 09:22:09.134000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-566,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-09 07:57:04.484000+00:00 +Internet,LEFT_case-4119,2010-12-21 01:06:40+00:00,General,2010-12-17 09:22:09.134000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-1215,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-09 07:57:33.991000+00:00 +Internet,LEFT_case-4119,2010-12-21 01:06:40+00:00,General,2010-12-17 09:22:09.134000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-1260,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 09:00:02.359000+00:00 +Internet,LEFT_case-4144,2010-12-21 01:06:40+00:00,General,2011-01-14 15:36:37.929000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource07,2010-10-26 01:06:40.020000+00:00,task-595,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-10 12:09:40.789000+00:00 +Internet,LEFT_case-4144,2010-12-21 01:06:40+00:00,General,2011-01-14 15:36:37.929000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource07,2010-10-26 01:06:40.020000+00:00,task-3614,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-10 12:10:20.113000+00:00 +Internet,LEFT_case-4144,2010-12-21 01:06:40+00:00,General,2011-01-14 15:36:37.929000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource07,2010-10-26 01:06:40.020000+00:00,task-3634,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-10 13:45:13.774000+00:00 +Internet,LEFT_case-4146,2010-12-21 01:06:40+00:00,General,2010-12-15 14:45:23.624000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource06,2010-10-26 01:06:40.020000+00:00,task-602,Confirmation of receipt,complete,EMPTY,Resource07,2010-11-25 16:15:12.031000+00:00 +Internet,LEFT_case-4146,2010-12-21 01:06:40+00:00,General,2010-12-15 14:45:23.624000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource06,2010-10-26 01:06:40.020000+00:00,task-2063,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-11-25 16:15:42.738000+00:00 +Internet,LEFT_case-4146,2010-12-21 01:06:40+00:00,General,2010-12-15 14:45:23.624000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource06,2010-10-26 01:06:40.020000+00:00,task-2323,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 09:10:50.238000+00:00 +Internet,LEFT_case-4147,2010-12-21 01:06:40+00:00,General,2011-01-21 12:03:50.618000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource02,2010-10-26 01:06:40.020000+00:00,task-603,Confirmation of receipt,complete,Group 1,Resource02,2010-12-01 16:24:55.077000+00:00 +Internet,LEFT_case-4147,2010-12-21 01:06:40+00:00,General,2011-01-21 12:03:50.618000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource02,2010-10-26 01:06:40.020000+00:00,task-2540,T03 Adjust confirmation of receipt,complete,Group 1,Resource02,2010-12-06 13:59:49.294000+00:00 +Internet,LEFT_case-4147,2010-12-21 01:06:40+00:00,General,2011-01-21 12:03:50.618000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource02,2010-10-26 01:06:40.020000+00:00,task-2991,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 08:15:15.538000+00:00 +Internet,LEFT_case-4147,2010-12-21 01:06:40+00:00,General,2011-01-21 12:03:50.618000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource02,2010-10-26 01:06:40.020000+00:00,task-2539,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-08 16:12:55.966000+00:00 +Internet,LEFT_case-4149,2010-12-21 01:06:40+00:00,General,2010-12-17 12:04:02.816000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-26 01:06:40.020000+00:00,task-605,Confirmation of receipt,complete,Group 1,Resource08,2010-11-05 14:30:08.159000+00:00 +Internet,LEFT_case-4149,2010-12-21 01:06:40+00:00,General,2010-12-17 12:04:02.816000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-26 01:06:40.020000+00:00,task-1047,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-05 14:31:07.966000+00:00 +Internet,LEFT_case-4149,2010-12-21 01:06:40+00:00,General,2010-12-17 12:04:02.816000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-26 01:06:40.020000+00:00,task-1296,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 15:00:18.957000+00:00 +Internet,LEFT_case-4157,2010-12-21 01:06:40+00:00,Customer contact,2010-12-17 10:21:41.974000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-659,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 08:24:42.997000+00:00 +Internet,LEFT_case-4157,2010-12-21 01:06:40+00:00,Customer contact,2010-12-17 10:21:41.974000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-2290,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 08:25:31.275000+00:00 +Internet,LEFT_case-4157,2010-12-21 01:06:40+00:00,Customer contact,2010-12-17 10:21:41.974000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-2291,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 08:26:34.330000+00:00 +Internet,LEFT_case-4157,2010-12-21 01:06:40+00:00,Customer contact,2010-12-17 10:21:41.974000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-2292,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 08:27:08.940000+00:00 +Internet,LEFT_case-4157,2010-12-21 01:06:40+00:00,Customer contact,2010-12-17 10:21:41.974000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-2293,T07-4 Draft internal advice to hold for type 4,complete,EMPTY,Resource11,2010-11-30 08:27:59.445000+00:00 +Internet,LEFT_case-4157,2010-12-21 01:06:40+00:00,Customer contact,2010-12-17 10:21:41.974000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-2294,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 08:28:44.151000+00:00 +Internet,LEFT_case-4157,2010-12-21 01:06:40+00:00,Customer contact,2010-12-17 10:21:41.974000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-3258,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 11:08:59.730000+00:00 +Internet,LEFT_case-4158,2010-12-21 01:06:40+00:00,Customer contact,2011-01-14 11:39:10.177000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-660,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 07:47:54.417000+00:00 +Internet,LEFT_case-4158,2010-12-21 01:06:40+00:00,Customer contact,2011-01-14 11:39:10.177000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-2551,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-08 11:43:04.093000+00:00 +Internet,LEFT_case-4158,2010-12-21 01:06:40+00:00,Customer contact,2011-01-14 11:39:10.177000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-3026,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 11:43:51.948000+00:00 +Internet,LEFT_case-4159,2010-12-22 01:06:40+00:00,General,2010-12-21 14:28:26.692000+00:00,2010-12-22 01:06:40.010000+00:00,,Resource02,2010-10-27 01:06:40.020000+00:00,task-661,Confirmation of receipt,complete,Group 1,Resource02,2010-11-26 11:50:26.184000+00:00 +Internet,LEFT_case-4159,2010-12-22 01:06:40+00:00,General,2010-12-21 14:28:26.692000+00:00,2010-12-22 01:06:40.010000+00:00,,Resource02,2010-10-27 01:06:40.020000+00:00,task-2147,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-11-26 11:53:55.563000+00:00 +Internet,LEFT_case-4159,2010-12-22 01:06:40+00:00,General,2010-12-21 14:28:26.692000+00:00,2010-12-22 01:06:40.010000+00:00,,Resource02,2010-10-27 01:06:40.020000+00:00,task-2163,T04 Determine confirmation of receipt,complete,EMPTY,Resource02,2010-12-03 11:40:19.957000+00:00 +Internet,LEFT_case-416,2010-11-26 01:06:40+00:00,General,,2010-11-26 01:06:40.010000+00:00,,Resource26,2010-10-01 01:06:40.020000+00:00,task-1,Confirmation of receipt,complete,Group 1,Resource21,2010-10-20 12:56:58.348000+00:00 +Internet,LEFT_case-416,2010-11-26 01:06:40+00:00,General,,2010-11-26 01:06:40.010000+00:00,,Resource26,2010-10-01 01:06:40.020000+00:00,task-317,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2010-10-20 12:58:58.565000+00:00 +Internet,LEFT_case-416,2010-11-26 01:06:40+00:00,General,,2010-11-26 01:06:40.010000+00:00,,Resource26,2010-10-01 01:06:40.020000+00:00,task-316,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2010-10-20 13:02:33.507000+00:00 +Internet,LEFT_case-4161,2010-12-27 01:06:40+00:00,General,2011-02-07 10:04:22.258000+00:00,2010-12-27 01:06:40.010000+00:00,,Resource15,2010-10-27 01:06:40.020000+00:00,task-684,Confirmation of receipt,complete,Group 1,Resource15,2010-11-23 12:19:41.441000+00:00 +Internet,LEFT_case-4161,2010-12-27 01:06:40+00:00,General,2011-02-07 10:04:22.258000+00:00,2010-12-27 01:06:40.010000+00:00,,Resource15,2010-10-27 01:06:40.020000+00:00,task-2107,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-11-30 08:21:40.981000+00:00 +Internet,LEFT_case-4161,2010-12-27 01:06:40+00:00,General,2011-02-07 10:04:22.258000+00:00,2010-12-27 01:06:40.010000+00:00,,Resource15,2010-10-27 01:06:40.020000+00:00,task-2288,T03 Adjust confirmation of receipt,complete,Group 1,admin2,2011-02-07 10:04:23.135000+00:00 +Internet,LEFT_case-4161,2010-12-27 01:06:40+00:00,General,2011-02-07 10:04:22.258000+00:00,2010-12-27 01:06:40.010000+00:00,,Resource15,2010-10-27 01:06:40.020000+00:00,task-1883,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-02-07 10:04:23.862000+00:00 +Internet,LEFT_case-4175,2010-12-08 00:00:00+00:00,General,2010-12-09 09:06:23.826000+00:00,2010-12-08 00:00:00.010000+00:00,,Resource25,2010-10-08 00:00:00.020000+00:00,task-730,Confirmation of receipt,complete,Group 1,Resource25,2010-11-04 15:18:33.535000+00:00 +Internet,LEFT_case-4175,2010-12-08 00:00:00+00:00,General,2010-12-09 09:06:23.826000+00:00,2010-12-08 00:00:00.010000+00:00,,Resource25,2010-10-08 00:00:00.020000+00:00,task-983,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-11-04 15:21:59.690000+00:00 +Internet,LEFT_case-4175,2010-12-08 00:00:00+00:00,General,2010-12-09 09:06:23.826000+00:00,2010-12-08 00:00:00.010000+00:00,,Resource25,2010-10-08 00:00:00.020000+00:00,task-990,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource25,2010-11-10 14:20:21.653000+00:00 +Internet,LEFT_case-4175,2010-12-08 00:00:00+00:00,General,2010-12-09 09:06:23.826000+00:00,2010-12-08 00:00:00.010000+00:00,,Resource25,2010-10-08 00:00:00.020000+00:00,task-1352,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-11-10 14:21:06.822000+00:00 +Internet,LEFT_case-4175,2010-12-08 00:00:00+00:00,General,2010-12-09 09:06:23.826000+00:00,2010-12-08 00:00:00.010000+00:00,,Resource25,2010-10-08 00:00:00.020000+00:00,task-1353,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource25,2010-11-10 14:25:50.320000+00:00 +Internet,LEFT_case-4175,2010-12-08 00:00:00+00:00,General,2010-12-09 09:06:23.826000+00:00,2010-12-08 00:00:00.010000+00:00,,Resource25,2010-10-08 00:00:00.020000+00:00,task-1354,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-11-10 14:26:38.744000+00:00 +Internet,LEFT_case-4175,2010-12-08 00:00:00+00:00,General,2010-12-09 09:06:23.826000+00:00,2010-12-08 00:00:00.010000+00:00,,Resource25,2010-10-08 00:00:00.020000+00:00,task-1374,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-17 13:41:03.018000+00:00 +Internet,LEFT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-782,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:11:39.624000+00:00 +Internet,LEFT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-2568,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-02 08:11:57.582000+00:00 +Internet,LEFT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-2573,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-12-02 08:21:46.572000+00:00 +Internet,LEFT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-2576,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-12-02 08:27:39.920000+00:00 +Internet,LEFT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-2578,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:28:43.868000+00:00 +Internet,LEFT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-2579,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-12-02 08:29:00.825000+00:00 +Internet,LEFT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-3361,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-12-08 14:36:17.802000+00:00 +Internet,LEFT_case-4186,2010-12-29 00:00:00+00:00,General,2011-01-10 15:40:27.145000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource11,2010-10-29 00:00:00.020000+00:00,task-783,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:00:12.219000+00:00 +Internet,LEFT_case-4186,2010-12-29 00:00:00+00:00,General,2011-01-10 15:40:27.145000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource11,2010-10-29 00:00:00.020000+00:00,task-2560,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-02 08:02:51.102000+00:00 +Internet,LEFT_case-4186,2010-12-29 00:00:00+00:00,General,2011-01-10 15:40:27.145000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource11,2010-10-29 00:00:00.020000+00:00,task-3028,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 08:53:52.015000+00:00 +Internet,LEFT_case-4187,2010-12-26 01:06:40+00:00,Customer contact,2010-12-23 08:38:15.922000+00:00,2010-12-26 01:06:40.010000+00:00,,Resource11,2010-10-31 02:06:40.020000+00:00,task-791,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 07:53:22.504000+00:00 +Internet,LEFT_case-4187,2010-12-26 01:06:40+00:00,Customer contact,2010-12-23 08:38:15.922000+00:00,2010-12-26 01:06:40.010000+00:00,,Resource11,2010-10-31 02:06:40.020000+00:00,task-2553,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-02 07:54:13.466000+00:00 +Internet,LEFT_case-4187,2010-12-26 01:06:40+00:00,Customer contact,2010-12-23 08:38:15.922000+00:00,2010-12-26 01:06:40.010000+00:00,,Resource11,2010-10-31 02:06:40.020000+00:00,task-3027,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 12:28:13.793000+00:00 +Internet,LEFT_case-4188,2010-12-29 00:00:00+00:00,General,2010-12-22 12:00:45.003000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource09,2010-10-20 00:00:00.020000+00:00,task-810,Confirmation of receipt,complete,EMPTY,Resource09,2010-11-08 12:44:00.430000+00:00 +Internet,LEFT_case-4188,2010-12-29 00:00:00+00:00,General,2010-12-22 12:00:45.003000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource09,2010-10-20 00:00:00.020000+00:00,task-1159,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-08 12:46:16.023000+00:00 +Internet,LEFT_case-4188,2010-12-29 00:00:00+00:00,General,2010-12-22 12:00:45.003000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource09,2010-10-20 00:00:00.020000+00:00,task-1160,T08 Draft and send request for advice,complete,Group 1,Resource09,2010-11-08 12:46:56.586000+00:00 +Internet,LEFT_case-4188,2010-12-29 00:00:00+00:00,General,2010-12-22 12:00:45.003000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource09,2010-10-20 00:00:00.020000+00:00,task-1162,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-08 12:47:34.348000+00:00 +Internet,LEFT_case-4188,2010-12-29 00:00:00+00:00,General,2010-12-22 12:00:45.003000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource09,2010-10-20 00:00:00.020000+00:00,task-1265,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 09:02:49.872000+00:00 +Internet,LEFT_case-4189,2010-12-20 01:06:40+00:00,General,2010-12-20 12:36:27.539000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource06,2010-10-25 01:06:40.020000+00:00,task-812,Confirmation of receipt,complete,EMPTY,admin2,2010-12-20 12:36:28.288000+00:00 +Internet,LEFT_case-4208,2010-12-28 01:06:40+00:00,General,2010-12-20 11:17:48.529000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource11,2010-11-02 01:06:40.010000+00:00,task-900,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:47:31.459000+00:00 +Internet,LEFT_case-4208,2010-12-28 01:06:40+00:00,General,2010-12-20 11:17:48.529000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource11,2010-11-02 01:06:40.010000+00:00,task-2584,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-02 08:50:22.430000+00:00 +Internet,LEFT_case-4208,2010-12-28 01:06:40+00:00,General,2010-12-20 11:17:48.529000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource11,2010-11-02 01:06:40.010000+00:00,task-2585,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:54:01.332000+00:00 +Internet,LEFT_case-4219,2010-12-31 00:00:00+00:00,General,2011-03-29 15:16:05.641000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-1025,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-07 16:20:44.780000+00:00 +Internet,LEFT_case-4219,2010-12-31 00:00:00+00:00,General,2011-03-29 15:16:05.641000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-3166,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2010-12-07 16:47:52.078000+00:00 +Internet,LEFT_case-4219,2010-12-31 00:00:00+00:00,General,2011-03-29 15:16:05.641000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-3163,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-07 16:49:47.960000+00:00 +Internet,LEFT_case-4243,2010-12-29 01:06:40+00:00,Customer contact,2010-12-23 08:11:02.555000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-1092,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 10:05:01.220000+00:00 +Internet,LEFT_case-4243,2010-12-29 01:06:40+00:00,Customer contact,2010-12-23 08:11:02.555000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-3230,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-08 10:05:22.642000+00:00 +Internet,LEFT_case-4243,2010-12-29 01:06:40+00:00,Customer contact,2010-12-23 08:11:02.555000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-3232,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 10:52:20.092000+00:00 +Internet,LEFT_case-4247,2010-12-29 01:06:40+00:00,General,2010-12-23 09:28:01.451000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource07,2010-11-03 01:06:40.010000+00:00,task-1151,Confirmation of receipt,complete,Group 1,Resource07,2010-11-25 16:26:23.142000+00:00 +Internet,LEFT_case-4247,2010-12-29 01:06:40+00:00,General,2010-12-23 09:28:01.451000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource07,2010-11-03 01:06:40.010000+00:00,task-2071,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-11-25 16:26:41.545000+00:00 +Internet,LEFT_case-4247,2010-12-29 01:06:40+00:00,General,2010-12-23 09:28:01.451000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource07,2010-11-03 01:06:40.010000+00:00,task-2380,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-11-30 11:33:21.851000+00:00 +Internet,LEFT_case-4248,2011-01-03 01:06:40+00:00,General,2010-12-20 12:50:05.982000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource06,2010-10-14 01:06:40.020000+00:00,task-1153,Confirmation of receipt,complete,EMPTY,admin2,2010-12-20 12:50:06.640000+00:00 +Internet,LEFT_case-4249,2010-12-29 01:06:40+00:00,General,2010-12-21 09:21:08.535000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-1156,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:05:24.139000+00:00 +Internet,LEFT_case-4249,2010-12-29 01:06:40+00:00,General,2010-12-21 09:21:08.535000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-2396,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 12:18:29.293000+00:00 +Internet,LEFT_case-4249,2010-12-29 01:06:40+00:00,General,2010-12-21 09:21:08.535000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-2401,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-11-30 12:20:31.346000+00:00 +Internet,LEFT_case-4251,2011-01-03 00:00:00+00:00,General,2010-12-29 10:22:32.417000+00:00,2011-01-03 00:00:00.010000+00:00,,Resource05,2010-10-13 00:00:00.020000+00:00,task-1172,Confirmation of receipt,complete,Group 1,Resource05,2010-11-18 09:19:56.129000+00:00 +Internet,LEFT_case-4251,2011-01-03 00:00:00+00:00,General,2010-12-29 10:22:32.417000+00:00,2011-01-03 00:00:00.010000+00:00,,Resource05,2010-10-13 00:00:00.020000+00:00,task-1614,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-11-18 09:24:17.458000+00:00 +Internet,LEFT_case-4251,2011-01-03 00:00:00+00:00,General,2010-12-29 10:22:32.417000+00:00,2011-01-03 00:00:00.010000+00:00,,Resource05,2010-10-13 00:00:00.020000+00:00,task-1738,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-24 11:33:38.008000+00:00 +Internet,LEFT_case-4255,2010-12-30 01:06:40+00:00,General,2010-12-16 15:21:14.531000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource01,2010-11-04 01:06:40.010000+00:00,task-1195,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:34:39.201000+00:00 +Internet,LEFT_case-4255,2010-12-30 01:06:40+00:00,General,2010-12-16 15:21:14.531000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource01,2010-11-04 01:06:40.010000+00:00,task-2414,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-11-30 12:36:27.260000+00:00 +Internet,LEFT_case-4255,2010-12-30 01:06:40+00:00,General,2010-12-16 15:21:14.531000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource01,2010-11-04 01:06:40.010000+00:00,task-2413,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 12:37:31.816000+00:00 +Internet,LEFT_case-4274,2010-12-30 01:06:40+00:00,General,2010-12-24 11:59:41.447000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-1243,Confirmation of receipt,complete,EMPTY,Resource17,2010-11-19 10:30:32.551000+00:00 +Internet,LEFT_case-4274,2010-12-30 01:06:40+00:00,General,2010-12-24 11:59:41.447000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-1699,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-11-19 10:31:15.981000+00:00 +Internet,LEFT_case-4274,2010-12-30 01:06:40+00:00,General,2010-12-24 11:59:41.447000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-1723,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2010-11-24 11:23:03.928000+00:00 +Internet,LEFT_case-4277,2010-12-30 01:06:40+00:00,General,2011-03-15 10:58:41.393000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource02,2010-11-04 01:06:40.010000+00:00,task-1259,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-02 15:03:17.656000+00:00 +Internet,LEFT_case-4277,2010-12-30 01:06:40+00:00,General,2011-03-15 10:58:41.393000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource02,2010-11-04 01:06:40.010000+00:00,task-2654,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-06 14:42:57.169000+00:00 +Internet,LEFT_case-4277,2010-12-30 01:06:40+00:00,General,2011-03-15 10:58:41.393000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource02,2010-11-04 01:06:40.010000+00:00,task-2992,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 08:47:24.975000+00:00 +Internet,LEFT_case-4279,2010-12-10 01:06:40+00:00,General,2011-03-02 08:30:51.773000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-1269,Confirmation of receipt,complete,Group 1,Resource12,2010-11-10 11:21:33.057000+00:00 +Internet,LEFT_case-4279,2010-12-10 01:06:40+00:00,General,2011-03-02 08:30:51.773000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-1345,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-11-11 14:13:35.775000+00:00 +Internet,LEFT_case-4279,2010-12-10 01:06:40+00:00,General,2011-03-02 08:30:51.773000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-1394,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2010-11-11 14:33:20.077000+00:00 +Internet,LEFT_case-4317,2010-12-30 01:06:40+00:00,General,2010-12-29 12:44:23.411000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource08,2010-11-04 01:06:40.010000+00:00,task-1426,Confirmation of receipt,complete,Group 1,Resource08,2010-11-23 12:58:39.850000+00:00 +Internet,LEFT_case-4317,2010-12-30 01:06:40+00:00,General,2010-12-29 12:44:23.411000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource08,2010-11-04 01:06:40.010000+00:00,task-1891,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-23 13:02:43.993000+00:00 +Internet,LEFT_case-4317,2010-12-30 01:06:40+00:00,General,2010-12-29 12:44:23.411000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource08,2010-11-04 01:06:40.010000+00:00,task-2102,T04 Determine confirmation of receipt,complete,EMPTY,Resource04,2010-11-26 10:09:50.090000+00:00 +Internet,LEFT_case-4319,2010-12-31 01:06:40+00:00,General,2010-12-17 15:00:28.299000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-1429,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 13:56:43.347000+00:00 +Internet,LEFT_case-4319,2010-12-31 01:06:40+00:00,General,2010-12-17 15:00:28.299000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-2426,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 13:58:42.811000+00:00 +Internet,LEFT_case-4319,2010-12-31 01:06:40+00:00,General,2010-12-17 15:00:28.299000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-2427,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 13:59:06.922000+00:00 +Internet,LEFT_case-4328,2011-01-08 00:00:00+00:00,General,2011-03-21 12:35:29.160000+00:00,2011-01-08 00:00:00.010000+00:00,,Resource51,2010-11-13 00:00:00.010000+00:00,task-1450,Confirmation of receipt,complete,EMPTY,Resource36,2011-03-01 15:45:50.426000+00:00 +Internet,LEFT_case-4328,2011-01-08 00:00:00+00:00,General,2011-03-21 12:35:29.160000+00:00,2011-01-08 00:00:00.010000+00:00,,Resource51,2010-11-13 00:00:00.010000+00:00,task-14764,T06 Determine necessity of stop advice,complete,Group 1,Resource36,2011-03-01 15:50:53.503000+00:00 +Internet,LEFT_case-4328,2011-01-08 00:00:00+00:00,General,2011-03-21 12:35:29.160000+00:00,2011-01-08 00:00:00.010000+00:00,,Resource51,2010-11-13 00:00:00.010000+00:00,task-14765,T04 Determine confirmation of receipt,complete,Group 3,Resource36,2011-03-01 15:52:02.024000+00:00 +Internet,LEFT_case-4344,2011-01-10 00:00:00+00:00,General,2011-04-04 14:05:56.004000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1466,Confirmation of receipt,complete,Group 1,Resource04,2010-11-23 09:16:35.832000+00:00 +Internet,LEFT_case-4344,2011-01-10 00:00:00+00:00,General,2011-04-04 14:05:56.004000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1825,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-11-23 09:19:10.039000+00:00 +Internet,LEFT_case-4344,2011-01-10 00:00:00+00:00,General,2011-04-04 14:05:56.004000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1824,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-23 09:25:26.571000+00:00 +Internet,LEFT_case-4345,2011-01-10 00:00:00+00:00,General,2010-11-30 14:25:46.767000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1467,Confirmation of receipt,complete,Group 1,Resource21,2010-11-23 15:59:06.988000+00:00 +Internet,LEFT_case-4345,2011-01-10 00:00:00+00:00,General,2010-11-30 14:25:46.767000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1947,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-25 10:16:49.103000+00:00 +Internet,LEFT_case-4345,2011-01-10 00:00:00+00:00,General,2010-11-30 14:25:46.767000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1942,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-30 13:58:39.431000+00:00 +Internet,LEFT_case-4346,2011-01-10 00:00:00+00:00,General,2011-08-18 08:42:21.805000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1468,Confirmation of receipt,complete,Group 1,Resource21,2010-11-25 09:01:06.997000+00:00 +Internet,LEFT_case-4346,2011-01-10 00:00:00+00:00,General,2011-08-18 08:42:21.805000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-2032,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2010-11-25 10:24:54.306000+00:00 +Internet,LEFT_case-4346,2011-01-10 00:00:00+00:00,General,2011-08-18 08:42:21.805000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-2021,T06 Determine necessity of stop advice,complete,EMPTY,Resource21,2011-04-04 13:48:49.776000+00:00 +Internet,LEFT_case-4346,2011-01-10 00:00:00+00:00,General,2011-08-18 08:42:21.805000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-18945,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-04-04 13:52:20.251000+00:00 +Internet,LEFT_case-4347,2011-01-10 00:00:00+00:00,General,2010-11-23 15:37:50.423000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource26,2010-11-10 00:00:00.010000+00:00,task-1477,Confirmation of receipt,complete,Group 1,admin2,2010-11-23 15:37:51.505000+00:00 +Internet,LEFT_case-4348,2011-01-10 00:00:00+00:00,General,2010-11-23 15:47:48.446000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource26,2010-11-10 00:00:00.010000+00:00,task-1478,Confirmation of receipt,complete,Group 1,admin2,2010-11-23 15:47:49.945000+00:00 +Internet,LEFT_case-4349,2011-01-10 00:00:00+00:00,General,2010-11-23 15:48:24.623000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource26,2010-11-10 00:00:00.010000+00:00,task-1479,Confirmation of receipt,complete,Group 1,admin2,2010-11-23 15:48:25.571000+00:00 +Internet,LEFT_case-4350,2011-01-10 00:00:00+00:00,General,2011-01-19 10:12:27.752000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource26,2010-11-10 00:00:00.010000+00:00,task-1480,Confirmation of receipt,complete,EMPTY,admin2,2011-01-19 10:12:28.533000+00:00 +Internet,LEFT_case-4363,2011-01-10 00:00:00+00:00,General,2010-11-23 15:59:10.740000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource26,2010-11-10 00:00:00.010000+00:00,task-1493,Confirmation of receipt,complete,Group 1,admin2,2010-11-23 15:59:11.872000+00:00 +Internet,LEFT_case-4380,2010-12-23 01:06:40+00:00,General,2010-12-22 16:21:33.700000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource15,2010-11-01 01:06:40.010000+00:00,task-1510,Confirmation of receipt,complete,Group 1,Resource15,2010-11-23 12:25:37.551000+00:00 +Internet,LEFT_case-4380,2010-12-23 01:06:40+00:00,General,2010-12-22 16:21:33.700000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource15,2010-11-01 01:06:40.010000+00:00,task-2104,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-11-30 08:39:05.866000+00:00 +Internet,LEFT_case-4380,2010-12-23 01:06:40+00:00,General,2010-12-22 16:21:33.700000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource15,2010-11-01 01:06:40.010000+00:00,task-1885,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-11-30 08:40:11.604000+00:00 +Internet,LEFT_case-4384,2010-12-31 01:06:40+00:00,General,2010-12-14 16:11:07.326000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource01,2010-11-05 01:06:40.010000+00:00,task-1521,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 11:46:32.331000+00:00 +Internet,LEFT_case-4384,2010-12-31 01:06:40+00:00,General,2010-12-14 16:11:07.326000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource01,2010-11-05 01:06:40.010000+00:00,task-3855,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-13 11:54:01.983000+00:00 +Internet,LEFT_case-4384,2010-12-31 01:06:40+00:00,General,2010-12-14 16:11:07.326000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource01,2010-11-05 01:06:40.010000+00:00,task-3860,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-12-13 11:56:03.074000+00:00 +Internet,LEFT_case-4388,2010-12-16 01:06:40+00:00,General,2010-12-13 14:06:03.626000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource04,2010-10-21 01:06:40.020000+00:00,task-1535,Confirmation of receipt,complete,Group 1,Resource04,2010-11-19 10:27:47.282000+00:00 +Internet,LEFT_case-4388,2010-12-16 01:06:40+00:00,General,2010-12-13 14:06:03.626000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource04,2010-10-21 01:06:40.020000+00:00,task-1695,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-19 10:30:03.931000+00:00 +Internet,LEFT_case-4388,2010-12-16 01:06:40+00:00,General,2010-12-13 14:06:03.626000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource04,2010-10-21 01:06:40.020000+00:00,task-1709,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-11-23 12:48:10.035000+00:00 +Internet,LEFT_case-4389,2011-01-11 00:00:00+00:00,General,2010-11-23 15:58:37.623000+00:00,2011-01-11 00:00:00.010000+00:00,,Resource04,2010-10-28 00:00:00.020000+00:00,task-1541,Confirmation of receipt,complete,Group 1,admin2,2010-11-23 15:58:38.429000+00:00 +Internet,LEFT_case-4394,2011-01-05 01:06:40+00:00,General,2010-12-15 00:00:00.010000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource14,2010-11-10 01:06:40.010000+00:00,task-1551,Confirmation of receipt,complete,EMPTY,admin2,2010-12-16 12:40:07.939000+00:00 +Internet,LEFT_case-4395,2011-01-03 01:06:40+00:00,General,2010-12-23 08:12:42.801000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-1552,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:39:01.149000+00:00 +Internet,LEFT_case-4395,2011-01-03 01:06:40+00:00,General,2010-12-23 08:12:42.801000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3896,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-13 12:39:41.069000+00:00 +Internet,LEFT_case-4395,2011-01-03 01:06:40+00:00,General,2010-12-23 08:12:42.801000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3899,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:51:57.779000+00:00 +Internet,LEFT_case-4396,2010-12-30 01:06:40+00:00,General,2010-12-23 08:12:07.587000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource07,2010-11-04 01:06:40.010000+00:00,task-1553,Confirmation of receipt,complete,Group 1,Resource07,2010-11-25 16:35:43.970000+00:00 +Internet,LEFT_case-4396,2010-12-30 01:06:40+00:00,General,2010-12-23 08:12:07.587000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource07,2010-11-04 01:06:40.010000+00:00,task-2079,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-11-25 16:35:59.878000+00:00 +Internet,LEFT_case-4396,2010-12-30 01:06:40+00:00,General,2010-12-23 08:12:07.587000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource07,2010-11-04 01:06:40.010000+00:00,task-2092,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-11-30 12:01:22.599000+00:00 +Internet,LEFT_case-4397,2011-01-05 01:06:40+00:00,Customer contact,2011-01-03 11:20:14.128000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource11,2010-11-10 01:06:40.010000+00:00,task-1554,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 08:38:28.119000+00:00 +Internet,LEFT_case-4397,2011-01-05 01:06:40+00:00,Customer contact,2011-01-03 11:20:14.128000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource11,2010-11-10 01:06:40.010000+00:00,task-4315,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 08:42:06.640000+00:00 +Internet,LEFT_case-4397,2011-01-05 01:06:40+00:00,Customer contact,2011-01-03 11:20:14.128000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource11,2010-11-10 01:06:40.010000+00:00,task-4337,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 09:08:19.661000+00:00 +Internet,LEFT_case-4401,2010-12-20 01:06:40+00:00,Customer contact,2010-12-10 14:27:40.740000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource11,2010-10-25 01:06:40.020000+00:00,task-1558,Confirmation of receipt,complete,EMPTY,Resource19,2010-12-09 11:32:24.762000+00:00 +Internet,LEFT_case-4401,2010-12-20 01:06:40+00:00,Customer contact,2010-12-10 14:27:40.740000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource11,2010-10-25 01:06:40.020000+00:00,task-3456,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-12-09 11:44:13.624000+00:00 +Internet,LEFT_case-4401,2010-12-20 01:06:40+00:00,Customer contact,2010-12-10 14:27:40.740000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource11,2010-10-25 01:06:40.020000+00:00,task-3450,T06 Determine necessity of stop advice,complete,EMPTY,Resource11,2010-12-09 11:44:31.005000+00:00 +Internet,LEFT_case-4403,2011-01-12 01:06:40+00:00,General,2010-12-17 08:49:03.043000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-1560,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-13 10:28:58.696000+00:00 +Internet,LEFT_case-4403,2011-01-12 01:06:40+00:00,General,2010-12-17 08:49:03.043000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-3793,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-13 10:29:44.324000+00:00 +Internet,LEFT_case-4403,2011-01-12 01:06:40+00:00,General,2010-12-17 08:49:03.043000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-3792,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-13 10:30:16.612000+00:00 +Internet,LEFT_case-4407,2011-12-21 01:06:40+00:00,General,2010-12-17 09:10:48.138000+00:00,2011-12-21 01:06:40.010000+00:00,,Resource34,2010-10-26 01:06:40.020000+00:00,task-1583,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-13 10:14:42.822000+00:00 +Internet,LEFT_case-4407,2011-12-21 01:06:40+00:00,General,2010-12-17 09:10:48.138000+00:00,2011-12-21 01:06:40.010000+00:00,,Resource34,2010-10-26 01:06:40.020000+00:00,task-3772,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-13 10:15:27.006000+00:00 +Internet,LEFT_case-4407,2011-12-21 01:06:40+00:00,General,2010-12-17 09:10:48.138000+00:00,2011-12-21 01:06:40.010000+00:00,,Resource34,2010-10-26 01:06:40.020000+00:00,task-3771,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-13 10:16:22.877000+00:00 +Internet,LEFT_case-4408,2011-01-07 01:06:40+00:00,Customer contact,2010-12-30 11:54:42.174000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource11,2010-11-12 01:06:40.010000+00:00,task-1589,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 09:31:28.615000+00:00 +Internet,LEFT_case-4408,2011-01-07 01:06:40+00:00,Customer contact,2010-12-30 11:54:42.174000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource11,2010-11-12 01:06:40.010000+00:00,task-4365,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 09:32:15.833000+00:00 +Internet,LEFT_case-4408,2011-01-07 01:06:40+00:00,Customer contact,2010-12-30 11:54:42.174000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource11,2010-11-12 01:06:40.010000+00:00,task-4471,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 15:02:22.927000+00:00 +Internet,LEFT_case-4410,2010-12-31 01:06:40+00:00,General,2010-12-21 16:58:51.915000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-1591,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:03:26.710000+00:00 +Internet,LEFT_case-4410,2010-12-31 01:06:40+00:00,General,2010-12-21 16:58:51.915000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-3866,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-12-13 12:04:12.053000+00:00 +Internet,LEFT_case-4410,2010-12-31 01:06:40+00:00,General,2010-12-21 16:58:51.915000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-3865,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-13 12:05:04.400000+00:00 +Internet,LEFT_case-4411,2010-12-31 01:06:40+00:00,General,2011-01-21 16:16:25.452000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource15,2010-11-05 01:06:40.010000+00:00,task-1599,Confirmation of receipt,complete,Group 1,Resource15,2010-11-23 12:36:04.005000+00:00 +Internet,LEFT_case-4411,2010-12-31 01:06:40+00:00,General,2011-01-21 16:16:25.452000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource15,2010-11-05 01:06:40.010000+00:00,task-1887,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-11-24 11:41:40.604000+00:00 +Internet,LEFT_case-4411,2010-12-31 01:06:40+00:00,General,2011-01-21 16:16:25.452000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource15,2010-11-05 01:06:40.010000+00:00,task-2105,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-11-30 08:55:50.262000+00:00 +Internet,LEFT_case-4413,2010-12-31 01:06:40+00:00,General,2010-12-23 08:10:26.014000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-1601,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 08:00:28.887000+00:00 +Internet,LEFT_case-4413,2010-12-31 01:06:40+00:00,General,2010-12-23 08:10:26.014000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-4287,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 08:04:02.850000+00:00 +Internet,LEFT_case-4413,2010-12-31 01:06:40+00:00,General,2010-12-23 08:10:26.014000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-4329,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:04:34.939000+00:00 +Internet,LEFT_case-4414,2010-12-15 01:06:40+00:00,General,2010-12-20 14:49:55.261000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource04,2010-10-20 01:06:40.020000+00:00,task-1602,Confirmation of receipt,complete,Group 1,Resource04,2010-11-19 09:08:14.971000+00:00 +Internet,LEFT_case-4414,2010-12-15 01:06:40+00:00,General,2010-12-20 14:49:55.261000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource04,2010-10-20 01:06:40.020000+00:00,task-1678,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-19 09:12:32.973000+00:00 +Internet,LEFT_case-4414,2010-12-15 01:06:40+00:00,General,2010-12-20 14:49:55.261000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource04,2010-10-20 01:06:40.020000+00:00,task-1684,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-11-23 12:47:07.717000+00:00 +Internet,LEFT_case-4437,2011-01-03 01:06:40+00:00,General,2011-01-14 11:39:00.429000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource15,2010-11-08 01:06:40.010000+00:00,task-1720,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-08 14:03:15.964000+00:00 +Internet,LEFT_case-4437,2011-01-03 01:06:40+00:00,General,2011-01-14 11:39:00.429000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource15,2010-11-08 01:06:40.010000+00:00,task-3352,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-12-08 14:07:44.692000+00:00 +Internet,LEFT_case-4437,2011-01-03 01:06:40+00:00,General,2011-01-14 11:39:00.429000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource15,2010-11-08 01:06:40.010000+00:00,task-3351,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-24 10:10:47.806000+00:00 +Internet,LEFT_case-4498,2011-01-03 01:06:40+00:00,General,2010-12-27 09:32:51.456000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-1879,Confirmation of receipt,complete,Group 1,Resource01,2010-11-30 09:47:16.066000+00:00 +Internet,LEFT_case-4498,2011-01-03 01:06:40+00:00,General,2010-12-27 09:32:51.456000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-2348,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-11-30 09:57:06.659000+00:00 +Internet,LEFT_case-4498,2011-01-03 01:06:40+00:00,General,2010-12-27 09:32:51.456000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3129,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 14:49:08.718000+00:00 +Internet,LEFT_case-4500,2010-12-07 00:00:00+00:00,General,2010-12-07 10:30:13.041000+00:00,2010-12-07 00:00:00.010000+00:00,,Resource04,2010-10-12 00:00:00.020000+00:00,task-1903,Confirmation of receipt,complete,Group 1,Resource04,2010-11-24 16:02:24.377000+00:00 +Internet,LEFT_case-4500,2010-12-07 00:00:00+00:00,General,2010-12-07 10:30:13.041000+00:00,2010-12-07 00:00:00.010000+00:00,,Resource04,2010-10-12 00:00:00.020000+00:00,task-1990,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-11-24 16:02:47.233000+00:00 +Internet,LEFT_case-4500,2010-12-07 00:00:00+00:00,General,2010-12-07 10:30:13.041000+00:00,2010-12-07 00:00:00.010000+00:00,,Resource04,2010-10-12 00:00:00.020000+00:00,task-1989,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-24 16:02:59.904000+00:00 +Internet,LEFT_case-4502,2011-01-03 01:06:40+00:00,General,2010-12-27 09:33:21.478000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-1907,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 13:59:10.764000+00:00 +Internet,LEFT_case-4502,2011-01-03 01:06:40+00:00,General,2010-12-27 09:33:21.478000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3962,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 14:00:21.666000+00:00 +Internet,LEFT_case-4502,2011-01-03 01:06:40+00:00,General,2010-12-27 09:33:21.478000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3961,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-13 14:00:40.629000+00:00 +Internet,LEFT_case-4503,2010-12-28 00:00:00+00:00,General,2010-12-24 11:31:03.532000+00:00,2010-12-28 00:00:00.010000+00:00,,Resource17,2010-11-02 00:00:00.010000+00:00,task-1908,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-09 10:41:02.292000+00:00 +Internet,LEFT_case-4503,2010-12-28 00:00:00+00:00,General,2010-12-24 11:31:03.532000+00:00,2010-12-28 00:00:00.010000+00:00,,Resource17,2010-11-02 00:00:00.010000+00:00,task-3478,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-09 13:44:12.572000+00:00 +Internet,LEFT_case-4503,2010-12-28 00:00:00+00:00,General,2010-12-24 11:31:03.532000+00:00,2010-12-28 00:00:00.010000+00:00,,Resource17,2010-11-02 00:00:00.010000+00:00,task-3444,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-17 10:42:56.319000+00:00 +Internet,LEFT_case-4504,2010-12-31 00:00:00+00:00,General,2010-12-29 10:59:05.066000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource05,2010-11-05 00:00:00.010000+00:00,task-1912,Confirmation of receipt,complete,EMPTY,Resource05,2010-12-06 10:34:37.814000+00:00 +Internet,LEFT_case-4504,2010-12-31 00:00:00+00:00,General,2010-12-29 10:59:05.066000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource05,2010-11-05 00:00:00.010000+00:00,task-2849,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 10:47:33.803000+00:00 +Internet,LEFT_case-4504,2010-12-31 00:00:00+00:00,General,2010-12-29 10:59:05.066000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource05,2010-11-05 00:00:00.010000+00:00,task-2853,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2010-12-06 11:23:17.384000+00:00 +Internet,LEFT_case-4505,2011-02-10 01:06:40+00:00,General,2011-02-08 13:23:14.212000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-1913,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-07 13:59:27.164000+00:00 +Internet,LEFT_case-4505,2011-02-10 01:06:40+00:00,General,2011-02-08 13:23:14.212000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-3104,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-07 14:00:15.088000+00:00 +Internet,LEFT_case-4505,2011-02-10 01:06:40+00:00,General,2011-02-08 13:23:14.212000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-3210,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-08 11:59:19.048000+00:00 +Internet,LEFT_case-4509,2011-01-04 00:00:00+00:00,General,2010-12-29 15:36:23.770000+00:00,2011-01-04 00:00:00.010000+00:00,,Resource15,2010-11-09 00:00:00.010000+00:00,task-1917,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-06 09:16:04.356000+00:00 +Internet,LEFT_case-4509,2011-01-04 00:00:00+00:00,General,2010-12-29 15:36:23.770000+00:00,2011-01-04 00:00:00.010000+00:00,,Resource15,2010-11-09 00:00:00.010000+00:00,task-2820,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-06 09:30:05.090000+00:00 +Internet,LEFT_case-4509,2011-01-04 00:00:00+00:00,General,2010-12-29 15:36:23.770000+00:00,2011-01-04 00:00:00.010000+00:00,,Resource15,2010-11-09 00:00:00.010000+00:00,task-2821,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 11:51:00.046000+00:00 +Internet,LEFT_case-4511,2011-01-05 00:00:00+00:00,General,2011-01-05 14:46:51.620000+00:00,2011-01-05 00:00:00.010000+00:00,,Resource08,2010-11-10 00:00:00.010000+00:00,task-1924,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-03 12:12:23.592000+00:00 +Internet,LEFT_case-4511,2011-01-05 00:00:00+00:00,General,2011-01-05 14:46:51.620000+00:00,2011-01-05 00:00:00.010000+00:00,,Resource08,2010-11-10 00:00:00.010000+00:00,task-2691,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-03 12:13:11.392000+00:00 +Internet,LEFT_case-4511,2011-01-05 00:00:00+00:00,General,2011-01-05 14:46:51.620000+00:00,2011-01-05 00:00:00.010000+00:00,,Resource08,2010-11-10 00:00:00.010000+00:00,task-2692,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-03 12:22:49.461000+00:00 +Internet,LEFT_case-4512,2011-05-26 01:06:40+00:00,General,2011-04-19 13:21:09.087000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource02,2010-11-12 01:06:40.010000+00:00,task-1932,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-08 17:31:19.128000+00:00 +Internet,LEFT_case-4512,2011-05-26 01:06:40+00:00,General,2011-04-19 13:21:09.087000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource02,2010-11-12 01:06:40.010000+00:00,task-5463,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-22 14:16:11.506000+00:00 +Internet,LEFT_case-4512,2011-05-26 01:06:40+00:00,General,2011-04-19 13:21:09.087000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource02,2010-11-12 01:06:40.010000+00:00,task-3418,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-05 15:04:18.521000+00:00 +Internet,LEFT_case-4513,2011-01-11 01:06:40+00:00,General,2011-01-07 14:47:52.474000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource15,2010-11-16 01:06:40.010000+00:00,task-1933,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-03 14:23:44.825000+00:00 +Internet,LEFT_case-4513,2011-01-11 01:06:40+00:00,General,2011-01-07 14:47:52.474000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource15,2010-11-16 01:06:40.010000+00:00,task-2749,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-03 14:54:23.415000+00:00 +Internet,LEFT_case-4513,2011-01-11 01:06:40+00:00,General,2011-01-07 14:47:52.474000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource15,2010-11-16 01:06:40.010000+00:00,task-2748,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-08 09:43:34.084000+00:00 +Internet,LEFT_case-4515,2011-01-03 01:06:40+00:00,General,2010-12-17 15:13:58.294000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource07,2010-11-08 01:06:40.010000+00:00,task-1938,Confirmation of receipt,complete,Group 1,Resource07,2010-12-02 09:14:36.341000+00:00 +Internet,LEFT_case-4515,2011-01-03 01:06:40+00:00,General,2010-12-17 15:13:58.294000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource07,2010-11-08 01:06:40.010000+00:00,task-2595,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-02 09:15:36.139000+00:00 +Internet,LEFT_case-4515,2011-01-03 01:06:40+00:00,General,2010-12-17 15:13:58.294000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource07,2010-11-08 01:06:40.010000+00:00,task-2600,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-02 09:23:38.418000+00:00 +Internet,LEFT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-1944,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-09 11:58:38.877000+00:00 +Internet,LEFT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-3466,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-09 12:00:00.659000+00:00 +Internet,LEFT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-3491,T11 Create document X request unlicensed,complete,Group 1,Resource17,2011-01-04 11:04:26.169000+00:00 +Internet,LEFT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-7149,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 08:57:48.917000+00:00 +Internet,LEFT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-6683,T13 Adjust document X request unlicensed,complete,Group 1,Resource17,2011-01-07 08:58:41.064000+00:00 +Internet,LEFT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-7152,T14 Determine document X request unlicensed,complete,EMPTY,Resource10,2011-01-07 11:28:15.929000+00:00 +Internet,LEFT_case-4517,2011-01-12 00:00:00+00:00,General,2011-01-04 09:31:35.967000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource01,2010-11-17 00:00:00.010000+00:00,task-1949,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 10:50:08.645000+00:00 +Internet,LEFT_case-4517,2011-01-12 00:00:00+00:00,General,2011-01-04 09:31:35.967000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource01,2010-11-17 00:00:00.010000+00:00,task-4423,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 10:51:42.943000+00:00 +Internet,LEFT_case-4517,2011-01-12 00:00:00+00:00,General,2011-01-04 09:31:35.967000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource01,2010-11-17 00:00:00.010000+00:00,task-4424,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:39:16.015000+00:00 +Internet,LEFT_case-4518,2011-01-12 00:00:00+00:00,General,2010-12-13 10:05:15.332000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource05,2010-11-17 00:00:00.010000+00:00,task-1950,Confirmation of receipt,complete,EMPTY,Resource05,2010-12-06 11:09:48.632000+00:00 +Internet,LEFT_case-4518,2011-01-12 00:00:00+00:00,General,2010-12-13 10:05:15.332000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource05,2010-11-17 00:00:00.010000+00:00,task-2886,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2010-12-06 11:11:12.638000+00:00 +Internet,LEFT_case-4518,2011-01-12 00:00:00+00:00,General,2010-12-13 10:05:15.332000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource05,2010-11-17 00:00:00.010000+00:00,task-2885,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 11:11:52.086000+00:00 +Internet,LEFT_case-4518,2011-01-12 00:00:00+00:00,General,2010-12-13 10:05:15.332000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource05,2010-11-17 00:00:00.010000+00:00,task-2891,T11 Create document X request unlicensed,complete,EMPTY,Resource05,2010-12-06 11:19:56.774000+00:00 +Internet,LEFT_case-4518,2011-01-12 00:00:00+00:00,General,2010-12-13 10:05:15.332000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource05,2010-11-17 00:00:00.010000+00:00,task-3757,T14 Determine document X request unlicensed,complete,Group 3,Resource05,2010-12-13 09:58:45.641000+00:00 +Internet,LEFT_case-4519,2011-01-12 01:06:40+00:00,General,2010-12-24 10:59:35.765000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource01,2010-11-17 01:06:40.010000+00:00,task-1951,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 11:14:18.499000+00:00 +Internet,LEFT_case-4519,2011-01-12 01:06:40+00:00,General,2010-12-24 10:59:35.765000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource01,2010-11-17 01:06:40.010000+00:00,task-4443,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 11:15:38.180000+00:00 +Internet,LEFT_case-4519,2011-01-12 01:06:40+00:00,General,2010-12-24 10:59:35.765000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource01,2010-11-17 01:06:40.010000+00:00,task-4444,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:26:15.178000+00:00 +Internet,LEFT_case-4526,2011-01-04 01:06:40+00:00,General,2011-01-04 15:11:30.255000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource08,2010-11-09 01:06:40.010000+00:00,task-1958,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-03 15:47:30.578000+00:00 +Internet,LEFT_case-4526,2011-01-04 01:06:40+00:00,General,2011-01-04 15:11:30.255000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource08,2010-11-09 01:06:40.010000+00:00,task-2765,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 08:23:21.296000+00:00 +Internet,LEFT_case-4526,2011-01-04 01:06:40+00:00,General,2011-01-04 15:11:30.255000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource08,2010-11-09 01:06:40.010000+00:00,task-2764,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-09 14:25:07.465000+00:00 +Internet,LEFT_case-4527,2011-02-24 01:06:40+00:00,General,2011-01-31 11:39:05.417000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource02,2010-11-18 01:06:40.010000+00:00,task-1959,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-11 07:47:45.213000+00:00 +Internet,LEFT_case-4527,2011-02-24 01:06:40+00:00,General,2011-01-31 11:39:05.417000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource02,2010-11-18 01:06:40.010000+00:00,task-7513,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 08:14:59.202000+00:00 +Internet,LEFT_case-4527,2011-02-24 01:06:40+00:00,General,2011-01-31 11:39:05.417000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource02,2010-11-18 01:06:40.010000+00:00,task-7512,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-11 12:32:45.042000+00:00 +Internet,LEFT_case-4529,2011-01-13 00:00:00+00:00,General,2011-01-28 13:14:26.380000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource02,2010-11-18 00:00:00.010000+00:00,task-1961,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-03 13:39:15.425000+00:00 +Internet,LEFT_case-4529,2011-01-13 00:00:00+00:00,General,2011-01-28 13:14:26.380000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource02,2010-11-18 00:00:00.010000+00:00,task-2878,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 11:52:41.561000+00:00 +Internet,LEFT_case-4529,2011-01-13 00:00:00+00:00,General,2011-01-28 13:14:26.380000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource02,2010-11-18 00:00:00.010000+00:00,task-2721,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-07 14:32:16.240000+00:00 +Internet,LEFT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-1967,Confirmation of receipt,complete,EMPTY,Resource05,2010-12-06 11:47:02.080000+00:00 +Internet,LEFT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2947,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2010-12-06 11:49:16.129000+00:00 +Internet,LEFT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2945,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 11:50:04.994000+00:00 +Internet,LEFT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2950,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource05,2010-12-06 11:50:30.956000+00:00 +Internet,LEFT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2951,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 11:50:52.453000+00:00 +Internet,LEFT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2952,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource05,2010-12-06 11:52:06.628000+00:00 +Internet,LEFT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2954,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 11:54:10.625000+00:00 +Internet,LEFT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2957,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource05,2010-12-06 11:55:50.234000+00:00 +Internet,LEFT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2963,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 11:56:03.915000+00:00 +Internet,LEFT_case-4533,2011-01-04 01:06:40+00:00,General,2010-12-17 00:00:00.010000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-1968,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-03 13:53:37.924000+00:00 +Internet,LEFT_case-4533,2011-01-04 01:06:40+00:00,General,2010-12-17 00:00:00.010000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-2734,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-03 14:47:50.288000+00:00 +Internet,LEFT_case-4533,2011-01-04 01:06:40+00:00,General,2010-12-17 00:00:00.010000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-2729,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-16 11:18:58.845000+00:00 +Internet,LEFT_case-4534,2011-01-04 01:06:40+00:00,General,2011-01-10 13:23:01.068000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-1978,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-14 09:58:30.806000+00:00 +Internet,LEFT_case-4534,2011-01-04 01:06:40+00:00,General,2011-01-10 13:23:01.068000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4066,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-14 10:02:44.613000+00:00 +Internet,LEFT_case-4534,2011-01-04 01:06:40+00:00,General,2011-01-10 13:23:01.068000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4067,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:10:14.646000+00:00 +Internet,LEFT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-1984,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-14 15:08:54.503000+00:00 +Internet,LEFT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-4776,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:21:30.318000+00:00 +Internet,LEFT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-4241,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 12:48:43.961000+00:00 +Internet,LEFT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-6051,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-01-13 15:04:16.192000+00:00 +Internet,LEFT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-8183,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-13 15:04:49.935000+00:00 +Internet,LEFT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-10157,T16 Report reasons to hold request,complete,Group 1,Resource12,2011-02-15 14:40:08.631000+00:00 +Internet,LEFT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-12326,T19 Determine report Y to stop indication,complete,EMPTY,Resource12,2011-02-15 14:43:16.487000+00:00 +Internet,LEFT_case-4538,2011-01-04 01:06:40+00:00,General,2010-12-24 10:32:30.453000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-1985,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-14 11:31:05.784000+00:00 +Internet,LEFT_case-4538,2011-01-04 01:06:40+00:00,General,2010-12-24 10:32:30.453000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4098,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-14 11:32:05.930000+00:00 +Internet,LEFT_case-4538,2011-01-04 01:06:40+00:00,General,2010-12-24 10:32:30.453000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4099,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:15:20.129000+00:00 +Internet,LEFT_case-4539,2010-12-24 00:00:00+00:00,General,2010-12-24 14:55:51.294000+00:00,2010-12-24 00:00:00.010000+00:00,,Resource09,2010-10-29 00:00:00.020000+00:00,task-1987,Confirmation of receipt,complete,EMPTY,Resource09,2010-12-08 10:36:47.253000+00:00 +Internet,LEFT_case-4539,2010-12-24 00:00:00+00:00,General,2010-12-24 14:55:51.294000+00:00,2010-12-24 00:00:00.010000+00:00,,Resource09,2010-10-29 00:00:00.020000+00:00,task-3243,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-12-08 10:37:27.181000+00:00 +Internet,LEFT_case-4539,2010-12-24 00:00:00+00:00,General,2010-12-24 14:55:51.294000+00:00,2010-12-24 00:00:00.010000+00:00,,Resource09,2010-10-29 00:00:00.020000+00:00,task-3244,T08 Draft and send request for advice,complete,Group 1,Resource09,2010-12-08 10:38:16.074000+00:00 +Internet,LEFT_case-4539,2010-12-24 00:00:00+00:00,General,2010-12-24 14:55:51.294000+00:00,2010-12-24 00:00:00.010000+00:00,,Resource09,2010-10-29 00:00:00.020000+00:00,task-3247,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-12-08 10:38:56.857000+00:00 +Internet,LEFT_case-4539,2010-12-24 00:00:00+00:00,General,2010-12-24 14:55:51.294000+00:00,2010-12-24 00:00:00.010000+00:00,,Resource09,2010-10-29 00:00:00.020000+00:00,task-5153,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2010-12-20 14:22:43.875000+00:00 +Internet,LEFT_case-4540,2011-01-19 00:00:00+00:00,General,2010-12-23 15:15:58.399000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-2011,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-13 14:12:59.193000+00:00 +Internet,LEFT_case-4540,2011-01-19 00:00:00+00:00,General,2010-12-23 15:15:58.399000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3975,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-13 14:13:33.180000+00:00 +Internet,LEFT_case-4540,2011-01-19 00:00:00+00:00,General,2010-12-23 15:15:58.399000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3977,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-13 14:14:34.976000+00:00 +Internet,LEFT_case-4546,2011-01-20 00:00:00+00:00,General,2011-01-12 14:38:39.025000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource05,2010-11-25 00:00:00.010000+00:00,task-2051,Confirmation of receipt,complete,EMPTY,Resource05,2010-12-06 12:33:07.552000+00:00 +Internet,LEFT_case-4546,2011-01-20 00:00:00+00:00,General,2011-01-12 14:38:39.025000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource05,2010-11-25 00:00:00.010000+00:00,task-2976,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 12:35:04.050000+00:00 +Internet,LEFT_case-4546,2011-01-20 00:00:00+00:00,General,2011-01-12 14:38:39.025000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource05,2010-11-25 00:00:00.010000+00:00,task-2977,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 08:10:52.054000+00:00 +Internet,LEFT_case-4553,2011-02-15 01:06:40+00:00,General,2011-01-19 13:55:58.483000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-2122,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-03 14:05:12.402000+00:00 +Internet,LEFT_case-4553,2011-02-15 01:06:40+00:00,General,2011-01-19 13:55:58.483000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-2877,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 11:56:23.729000+00:00 +Internet,LEFT_case-4553,2011-02-15 01:06:40+00:00,General,2011-01-19 13:55:58.483000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-2737,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-13 12:51:15.058000+00:00 +Internet,LEFT_case-4553,2011-02-15 01:06:40+00:00,General,2011-01-19 13:55:58.483000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-3901,T07-4 Draft internal advice to hold for type 4,complete,Group 12,Resource02,2010-12-13 12:53:31.919000+00:00 +Internet,LEFT_case-4553,2011-02-15 01:06:40+00:00,General,2011-01-19 13:55:58.483000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-3906,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-13 12:55:22.347000+00:00 +Internet,LEFT_case-4554,2011-01-04 01:06:40+00:00,General,2011-01-04 09:32:14.134000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-2136,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-14 11:58:24.911000+00:00 +Internet,LEFT_case-4554,2011-01-04 01:06:40+00:00,General,2011-01-04 09:32:14.134000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4119,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-14 12:03:20.292000+00:00 +Internet,LEFT_case-4554,2011-01-04 01:06:40+00:00,General,2011-01-04 09:32:14.134000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4120,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:18:19.159000+00:00 +Internet,LEFT_case-4555,2011-01-05 01:06:40+00:00,General,2010-12-04 00:00:00.010000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-11-10 01:06:40.010000+00:00,task-2143,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-07 14:57:17.433000+00:00 +Internet,LEFT_case-4555,2011-01-05 01:06:40+00:00,General,2010-12-04 00:00:00.010000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-11-10 01:06:40.010000+00:00,task-3145,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-07 14:57:50.377000+00:00 +Internet,LEFT_case-4555,2011-01-05 01:06:40+00:00,General,2010-12-04 00:00:00.010000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-11-10 01:06:40.010000+00:00,task-3146,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 17:27:36.808000+00:00 +Internet,LEFT_case-4556,2011-01-05 01:06:40+00:00,General,2011-01-04 10:04:20.408000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource04,2010-11-10 01:06:40.010000+00:00,task-2144,Confirmation of receipt,complete,Group 1,Resource04,2010-11-29 14:13:38.573000+00:00 +Internet,LEFT_case-4556,2011-01-05 01:06:40+00:00,General,2011-01-04 10:04:20.408000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource04,2010-11-10 01:06:40.010000+00:00,task-2228,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-11-29 14:15:43.456000+00:00 +Internet,LEFT_case-4556,2011-01-05 01:06:40+00:00,General,2011-01-04 10:04:20.408000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource04,2010-11-10 01:06:40.010000+00:00,task-2226,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-29 14:17:11.457000+00:00 +Internet,LEFT_case-4559,2011-01-06 01:06:40+00:00,General,2011-01-31 12:44:28.588000+00:00,2011-01-06 01:06:40.010000+00:00,,Resource01,2010-11-11 01:06:40.010000+00:00,task-2154,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-14 12:24:35.032000+00:00 +Internet,LEFT_case-4559,2011-01-06 01:06:40+00:00,General,2011-01-31 12:44:28.588000+00:00,2011-01-06 01:06:40.010000+00:00,,Resource01,2010-11-11 01:06:40.010000+00:00,task-4137,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-14 12:25:24.609000+00:00 +Internet,LEFT_case-4559,2011-01-06 01:06:40+00:00,General,2011-01-31 12:44:28.588000+00:00,2011-01-06 01:06:40.010000+00:00,,Resource01,2010-11-11 01:06:40.010000+00:00,task-4138,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:20:45.445000+00:00 +Internet,LEFT_case-4560,2011-01-07 01:06:40+00:00,General,2011-01-04 09:31:19.742000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-2161,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 08:50:39.546000+00:00 +Internet,LEFT_case-4560,2011-01-07 01:06:40+00:00,General,2011-01-04 09:31:19.742000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-4323,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 08:54:27.582000+00:00 +Internet,LEFT_case-4560,2011-01-07 01:06:40+00:00,General,2011-01-04 09:31:19.742000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-4324,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:04:01.308000+00:00 +Internet,LEFT_case-4563,2011-01-07 01:06:40+00:00,General,2011-01-10 15:39:15.646000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-2166,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 14:03:12.375000+00:00 +Internet,LEFT_case-4563,2011-01-07 01:06:40+00:00,General,2011-01-10 15:39:15.646000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-4535,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 14:04:39.364000+00:00 +Internet,LEFT_case-4563,2011-01-07 01:06:40+00:00,General,2011-01-10 15:39:15.646000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-4638,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-16 10:17:28.950000+00:00 +Internet,LEFT_case-4565,2011-01-21 01:06:40+00:00,General,2011-01-21 11:50:25.729000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-11-12 01:06:40.010000+00:00,task-2171,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-13 14:40:49.987000+00:00 +Internet,LEFT_case-4565,2011-01-21 01:06:40+00:00,General,2011-01-21 11:50:25.729000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-11-12 01:06:40.010000+00:00,task-3995,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-13 14:41:49.419000+00:00 +Internet,LEFT_case-4565,2011-01-21 01:06:40+00:00,General,2011-01-21 11:50:25.729000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-11-12 01:06:40.010000+00:00,task-4056,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-14 09:34:12.534000+00:00 +Internet,LEFT_case-4582,2011-01-08 01:06:40+00:00,General,2010-12-23 08:16:13.446000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2332,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-06 10:52:43.232000+00:00 +Internet,LEFT_case-4582,2011-01-08 01:06:40+00:00,General,2010-12-23 08:16:13.446000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2863,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-06 10:53:12.421000+00:00 +Internet,LEFT_case-4582,2011-01-08 01:06:40+00:00,General,2010-12-23 08:16:13.446000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2864,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-06 10:56:39.545000+00:00 +Internet,LEFT_case-4583,2011-01-08 01:06:40+00:00,General,2010-12-31 15:49:44.284000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2365,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-06 11:12:17.536000+00:00 +Internet,LEFT_case-4583,2011-01-08 01:06:40+00:00,General,2010-12-31 15:49:44.284000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2890,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-06 11:12:33.385000+00:00 +Internet,LEFT_case-4583,2011-01-08 01:06:40+00:00,General,2010-12-31 15:49:44.284000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2893,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-06 11:16:40.882000+00:00 +Internet,LEFT_case-4584,2011-01-08 01:06:40+00:00,General,2011-01-10 12:34:51.330000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource02,2010-11-13 01:06:40.010000+00:00,task-2375,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-06 09:29:42.346000+00:00 +Internet,LEFT_case-4584,2011-01-08 01:06:40+00:00,General,2011-01-10 12:34:51.330000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource02,2010-11-13 01:06:40.010000+00:00,task-2879,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 11:54:27.223000+00:00 +Internet,LEFT_case-4584,2011-01-08 01:06:40+00:00,General,2011-01-10 12:34:51.330000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource02,2010-11-13 01:06:40.010000+00:00,task-2823,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-01-10 12:34:52.561000+00:00 +Internet,LEFT_case-4585,2011-01-10 01:06:40+00:00,General,2011-01-05 09:19:52.557000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource01,2010-11-15 01:06:40.010000+00:00,task-2386,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 10:19:34.036000+00:00 +Internet,LEFT_case-4585,2011-01-10 01:06:40+00:00,General,2011-01-05 09:19:52.557000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource01,2010-11-15 01:06:40.010000+00:00,task-4408,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 10:20:49.913000+00:00 +Internet,LEFT_case-4585,2011-01-10 01:06:40+00:00,General,2011-01-05 09:19:52.557000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource01,2010-11-15 01:06:40.010000+00:00,task-4409,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:06:38.602000+00:00 +Internet,LEFT_case-4586,2011-01-10 01:06:40+00:00,General,2011-01-11 16:28:31.047000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource02,2010-11-15 01:06:40.010000+00:00,task-2424,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-06 11:31:06.615000+00:00 +Internet,LEFT_case-4586,2011-01-10 01:06:40+00:00,General,2011-01-11 16:28:31.047000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource02,2010-11-15 01:06:40.010000+00:00,task-2927,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 11:59:32.057000+00:00 +Internet,LEFT_case-4586,2011-01-10 01:06:40+00:00,General,2011-01-11 16:28:31.047000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource02,2010-11-15 01:06:40.010000+00:00,task-2926,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-11 08:06:16.422000+00:00 +Internet,LEFT_case-4587,2011-01-10 01:06:40+00:00,General,2011-01-07 14:10:30.410000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource17,2010-11-15 01:06:40.010000+00:00,task-2453,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-02 15:19:45.492000+00:00 +Internet,LEFT_case-4587,2011-01-10 01:06:40+00:00,General,2011-01-07 14:10:30.410000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource17,2010-11-15 01:06:40.010000+00:00,task-2656,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-02 15:20:40.607000+00:00 +Internet,LEFT_case-4587,2011-01-10 01:06:40+00:00,General,2011-01-07 14:10:30.410000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource17,2010-11-15 01:06:40.010000+00:00,task-3510,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-10 08:19:38.578000+00:00 +Internet,LEFT_case-4589,2011-01-11 01:06:40+00:00,General,2010-12-24 12:27:38.174000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-2487,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-06 10:16:34.347000+00:00 +Internet,LEFT_case-4589,2011-01-11 01:06:40+00:00,General,2010-12-24 12:27:38.174000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-2836,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-06 10:18:57.378000+00:00 +Internet,LEFT_case-4589,2011-01-11 01:06:40+00:00,General,2010-12-24 12:27:38.174000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-2838,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-06 10:19:40.450000+00:00 +Internet,LEFT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-2502,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-14 10:02:42.366000+00:00 +Internet,LEFT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4069,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-14 10:03:43.130000+00:00 +Internet,LEFT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4075,T16 Report reasons to hold request,complete,Group 1,Resource07,2010-12-14 10:08:02.373000+00:00 +Internet,LEFT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4079,T19 Determine report Y to stop indication,complete,Group 3,Resource07,2010-12-14 10:09:44.859000+00:00 +Internet,LEFT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4618,T03 Adjust confirmation of receipt,complete,Group 1,Resource07,2010-12-16 10:46:30.287000+00:00 +Internet,LEFT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4652,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-16 10:47:46.773000+00:00 +Internet,LEFT_case-4598,2011-01-19 01:06:40+00:00,General,2010-12-17 11:50:32.847000+00:00,2011-01-19 01:06:40.010000+00:00,,Resource34,2010-11-24 01:06:40.010000+00:00,task-2508,Confirmation of receipt,complete,EMPTY,Resource34,2010-12-10 14:42:47.518000+00:00 +Internet,LEFT_case-4598,2011-01-19 01:06:40+00:00,General,2010-12-17 11:50:32.847000+00:00,2011-01-19 01:06:40.010000+00:00,,Resource34,2010-11-24 01:06:40.010000+00:00,task-3669,T04 Determine confirmation of receipt,complete,EMPTY,Resource34,2010-12-10 14:45:04.207000+00:00 +Internet,LEFT_case-4598,2011-01-19 01:06:40+00:00,General,2010-12-17 11:50:32.847000+00:00,2011-01-19 01:06:40.010000+00:00,,Resource34,2010-11-24 01:06:40.010000+00:00,task-3668,T06 Determine necessity of stop advice,complete,Group 1,Resource34,2010-12-10 14:46:56.741000+00:00 +Internet,LEFT_case-4599,2011-01-12 01:06:40+00:00,General,2011-01-10 15:10:36.074000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource02,2010-11-17 01:06:40.010000+00:00,task-2509,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-06 13:55:44.720000+00:00 +Internet,LEFT_case-4599,2011-01-12 01:06:40+00:00,General,2011-01-10 15:10:36.074000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource02,2010-11-17 01:06:40.010000+00:00,task-2989,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 08:17:59.224000+00:00 +Internet,LEFT_case-4599,2011-01-12 01:06:40+00:00,General,2011-01-10 15:10:36.074000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource02,2010-11-17 01:06:40.010000+00:00,task-2988,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-01-10 15:10:37.132000+00:00 +Internet,LEFT_case-4600,2011-01-11 01:06:40+00:00,General,2011-05-16 13:03:56.250000+00:00,2011-01-11 01:06:40.010000+00:00,,admin1,2010-11-16 01:06:40.010000+00:00,task-2510,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-14 14:59:22.948000+00:00 +Internet,LEFT_case-4600,2011-01-11 01:06:40+00:00,General,2011-05-16 13:03:56.250000+00:00,2011-01-11 01:06:40.010000+00:00,,admin1,2010-11-16 01:06:40.010000+00:00,task-4773,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:29:45.264000+00:00 +Internet,LEFT_case-4600,2011-01-11 01:06:40+00:00,General,2011-05-16 13:03:56.250000+00:00,2011-01-11 01:06:40.010000+00:00,,admin1,2010-11-16 01:06:40.010000+00:00,task-4237,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-06 13:01:03.546000+00:00 +Internet,LEFT_case-4601,2011-01-12 01:06:40+00:00,General,2011-09-19 16:50:59.362000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource12,2010-11-17 01:06:40.010000+00:00,task-2526,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-14 14:36:38.009000+00:00 +Internet,LEFT_case-4601,2011-01-12 01:06:40+00:00,General,2011-09-19 16:50:59.362000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource12,2010-11-17 01:06:40.010000+00:00,task-4765,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:29:29.517000+00:00 +Internet,LEFT_case-4601,2011-01-12 01:06:40+00:00,General,2011-09-19 16:50:59.362000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource12,2010-11-17 01:06:40.010000+00:00,task-4223,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-16 11:44:54.556000+00:00 +Internet,LEFT_case-4602,2011-01-26 00:00:00+00:00,General,2011-01-28 12:28:46.892000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource17,2010-11-17 00:00:00.010000+00:00,task-2527,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-09 16:13:14.649000+00:00 +Internet,LEFT_case-4602,2011-01-26 00:00:00+00:00,General,2011-01-28 12:28:46.892000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource17,2010-11-17 00:00:00.010000+00:00,task-3515,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-09 16:13:53.468000+00:00 +Internet,LEFT_case-4602,2011-01-26 00:00:00+00:00,General,2011-01-28 12:28:46.892000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource17,2010-11-17 00:00:00.010000+00:00,task-3664,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-10 16:13:27.991000+00:00 +Internet,LEFT_case-4603,2011-01-12 01:06:40+00:00,General,2010-12-24 12:11:58.365000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource07,2010-11-17 01:06:40.010000+00:00,task-2528,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-06 11:43:40.461000+00:00 +Internet,LEFT_case-4603,2011-01-12 01:06:40+00:00,General,2010-12-24 12:11:58.365000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource07,2010-11-17 01:06:40.010000+00:00,task-2933,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-06 11:44:11.319000+00:00 +Internet,LEFT_case-4603,2011-01-12 01:06:40+00:00,General,2010-12-24 12:11:58.365000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource07,2010-11-17 01:06:40.010000+00:00,task-2932,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-06 11:44:36.318000+00:00 +Internet,LEFT_case-4604,2011-01-12 00:00:00+00:00,General,2010-12-24 11:08:17.541000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource07,2010-11-17 00:00:00.010000+00:00,task-2530,Confirmation of receipt,complete,Group 1,Resource07,2010-12-02 16:30:23.852000+00:00 +Internet,LEFT_case-4604,2011-01-12 00:00:00+00:00,General,2010-12-24 11:08:17.541000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource07,2010-11-17 00:00:00.010000+00:00,task-2664,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-02 16:31:39.999000+00:00 +Internet,LEFT_case-4604,2011-01-12 00:00:00+00:00,General,2010-12-24 11:08:17.541000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource07,2010-11-17 00:00:00.010000+00:00,task-2666,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-02 16:33:13.669000+00:00 +Internet,LEFT_case-4605,2011-01-12 00:00:00+00:00,General,2011-02-02 14:42:57.829000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource04,2010-11-17 00:00:00.010000+00:00,task-2531,Confirmation of receipt,complete,EMPTY,Resource04,2010-12-07 15:33:40.283000+00:00 +Internet,LEFT_case-4605,2011-01-12 00:00:00+00:00,General,2011-02-02 14:42:57.829000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource04,2010-11-17 00:00:00.010000+00:00,task-3161,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 17:40:02.396000+00:00 +Internet,LEFT_case-4605,2011-01-12 00:00:00+00:00,General,2011-02-02 14:42:57.829000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource04,2010-11-17 00:00:00.010000+00:00,task-3160,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-12-08 16:04:09.031000+00:00 +Internet,LEFT_case-4608,2011-02-21 01:06:40+00:00,General,2011-02-18 12:15:49.689000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource04,2010-11-17 01:06:40.010000+00:00,task-2534,Confirmation of receipt,complete,EMPTY,Resource04,2010-12-17 13:09:03.663000+00:00 +Internet,LEFT_case-4608,2011-02-21 01:06:40+00:00,General,2011-02-18 12:15:49.689000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource04,2010-11-17 01:06:40.010000+00:00,task-4914,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-12-17 13:09:36.206000+00:00 +Internet,LEFT_case-4608,2011-02-21 01:06:40+00:00,General,2011-02-18 12:15:49.689000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource04,2010-11-17 01:06:40.010000+00:00,task-4913,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-12-17 13:09:49.891000+00:00 +Internet,LEFT_case-4619,2011-01-13 00:00:00+00:00,General,2011-01-13 12:29:05.367000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource08,2010-11-18 00:00:00.010000+00:00,task-2599,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-03 13:48:01.931000+00:00 +Internet,LEFT_case-4619,2011-01-13 00:00:00+00:00,General,2011-01-13 12:29:05.367000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource08,2010-11-18 00:00:00.010000+00:00,task-2724,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-03 14:50:01.850000+00:00 +Internet,LEFT_case-4619,2011-01-13 00:00:00+00:00,General,2011-01-13 12:29:05.367000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource08,2010-11-18 00:00:00.010000+00:00,task-2723,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-13 10:37:38.475000+00:00 +Internet,LEFT_case-4623,2011-01-13 00:00:00+00:00,General,2010-12-10 09:36:48.051000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource07,2010-11-18 00:00:00.010000+00:00,task-2631,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-07 09:07:53.862000+00:00 +Internet,LEFT_case-4623,2011-01-13 00:00:00+00:00,General,2010-12-10 09:36:48.051000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource07,2010-11-18 00:00:00.010000+00:00,task-3051,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-07 09:11:47.505000+00:00 +Internet,LEFT_case-4623,2011-01-13 00:00:00+00:00,General,2010-12-10 09:36:48.051000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource07,2010-11-18 00:00:00.010000+00:00,task-3122,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 16:43:51.518000+00:00 +Internet,LEFT_case-4623,2011-01-13 00:00:00+00:00,General,2010-12-10 09:36:48.051000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource07,2010-11-18 00:00:00.010000+00:00,task-3057,T11 Create document X request unlicensed,complete,Group 1,Resource07,2010-12-10 08:11:58.211000+00:00 +Internet,LEFT_case-4623,2011-01-13 00:00:00+00:00,General,2010-12-10 09:36:48.051000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource07,2010-11-18 00:00:00.010000+00:00,task-3540,T14 Determine document X request unlicensed,complete,Group 3,Resource07,2010-12-10 09:36:37.075000+00:00 +Internet,LEFT_case-4632,2011-01-13 01:06:40+00:00,General,2011-01-10 14:46:35.026000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource07,2010-11-18 01:06:40.010000+00:00,task-2670,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-07 09:49:35.925000+00:00 +Internet,LEFT_case-4632,2011-01-13 01:06:40+00:00,General,2011-01-10 14:46:35.026000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource07,2010-11-18 01:06:40.010000+00:00,task-3060,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-07 09:50:57.824000+00:00 +Internet,LEFT_case-4632,2011-01-13 01:06:40+00:00,General,2011-01-10 14:46:35.026000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource07,2010-11-18 01:06:40.010000+00:00,task-3123,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 16:24:15.374000+00:00 +Internet,LEFT_case-4633,2010-12-07 01:06:40+00:00,General,2011-01-19 10:13:08.646000+00:00,2010-12-07 01:06:40.010000+00:00,,Resource26,2010-10-12 01:06:40.020000+00:00,task-2671,Confirmation of receipt,complete,EMPTY,admin2,2011-01-19 10:13:09.527000+00:00 +Internet,LEFT_case-4639,2011-01-15 00:00:00+00:00,General,2010-12-27 16:13:22.464000+00:00,2011-01-15 00:00:00.010000+00:00,,Resource01,2010-11-20 00:00:00.010000+00:00,task-2716,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 11:52:03.599000+00:00 +Internet,LEFT_case-4639,2011-01-15 00:00:00+00:00,General,2010-12-27 16:13:22.464000+00:00,2011-01-15 00:00:00.010000+00:00,,Resource01,2010-11-20 00:00:00.010000+00:00,task-4488,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2010-12-15 11:58:21.887000+00:00 +Internet,LEFT_case-4639,2011-01-15 00:00:00+00:00,General,2010-12-27 16:13:22.464000+00:00,2011-01-15 00:00:00.010000+00:00,,Resource01,2010-11-20 00:00:00.010000+00:00,task-4487,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 12:00:06.209000+00:00 +Internet,LEFT_case-4640,2011-01-16 00:00:00+00:00,General,2011-01-10 13:18:15.437000+00:00,2011-01-16 00:00:00.010000+00:00,,Resource08,2010-11-21 00:00:00.010000+00:00,task-2733,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-09 15:58:25.494000+00:00 +Internet,LEFT_case-4640,2011-01-16 00:00:00+00:00,General,2011-01-10 13:18:15.437000+00:00,2011-01-16 00:00:00.010000+00:00,,Resource08,2010-11-21 00:00:00.010000+00:00,task-3513,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-10 08:21:44.667000+00:00 +Internet,LEFT_case-4640,2011-01-16 00:00:00+00:00,General,2011-01-10 13:18:15.437000+00:00,2011-01-16 00:00:00.010000+00:00,,Resource08,2010-11-21 00:00:00.010000+00:00,task-3512,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-13 13:29:35.449000+00:00 +Internet,LEFT_case-4641,2011-01-17 00:00:00+00:00,General,2010-12-27 16:24:10.172000+00:00,2011-01-17 00:00:00.010000+00:00,,Resource07,2010-11-22 00:00:00.010000+00:00,task-2750,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-10 15:58:10.790000+00:00 +Internet,LEFT_case-4641,2011-01-17 00:00:00+00:00,General,2010-12-27 16:24:10.172000+00:00,2011-01-17 00:00:00.010000+00:00,,Resource07,2010-11-22 00:00:00.010000+00:00,task-3695,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-10 15:59:33.005000+00:00 +Internet,LEFT_case-4641,2011-01-17 00:00:00+00:00,General,2010-12-27 16:24:10.172000+00:00,2011-01-17 00:00:00.010000+00:00,,Resource07,2010-11-22 00:00:00.010000+00:00,task-3697,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-10 16:06:24.227000+00:00 +Internet,LEFT_case-4653,2011-01-14 01:06:40+00:00,General,2011-01-17 16:42:46.600000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource15,2010-11-19 01:06:40.010000+00:00,task-2956,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-10 09:06:10.530000+00:00 +Internet,LEFT_case-4653,2011-01-14 01:06:40+00:00,General,2011-01-17 16:42:46.600000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource15,2010-11-19 01:06:40.010000+00:00,task-3543,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-12-10 09:06:42.567000+00:00 +Internet,LEFT_case-4653,2011-01-14 01:06:40+00:00,General,2011-01-17 16:42:46.600000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource15,2010-11-19 01:06:40.010000+00:00,task-3542,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-10 09:17:46.605000+00:00 +Internet,LEFT_case-4654,2011-01-17 01:06:40+00:00,General,2011-01-14 15:44:16.899000+00:00,2011-01-17 01:06:40.010000+00:00,,Resource15,2010-11-22 01:06:40.010000+00:00,task-2994,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-10 10:56:54.593000+00:00 +Internet,LEFT_case-4654,2011-01-17 01:06:40+00:00,General,2011-01-14 15:44:16.899000+00:00,2011-01-17 01:06:40.010000+00:00,,Resource15,2010-11-22 01:06:40.010000+00:00,task-3588,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-10 10:57:14.025000+00:00 +Internet,LEFT_case-4654,2011-01-17 01:06:40+00:00,General,2011-01-14 15:44:16.899000+00:00,2011-01-17 01:06:40.010000+00:00,,Resource15,2010-11-22 01:06:40.010000+00:00,task-3590,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-12-10 10:58:44.669000+00:00 +Internet,LEFT_case-4656,2011-03-14 01:06:40+00:00,General,2011-02-23 00:00:00.010000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource17,2010-11-23 01:06:40.010000+00:00,task-3017,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-14 15:42:36.276000+00:00 +Internet,LEFT_case-4656,2011-03-14 01:06:40+00:00,General,2011-02-23 00:00:00.010000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource17,2010-11-23 01:06:40.010000+00:00,task-4256,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-14 15:43:41.072000+00:00 +Internet,LEFT_case-4656,2011-03-14 01:06:40+00:00,General,2011-02-23 00:00:00.010000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource17,2010-11-23 01:06:40.010000+00:00,task-4257,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2010-12-14 15:44:42.533000+00:00 +Internet,LEFT_case-4666,2011-01-18 01:06:40+00:00,General,2011-01-18 09:52:21.599000+00:00,2011-01-18 01:06:40.010000+00:00,,Resource08,2010-11-23 01:06:40.010000+00:00,task-3134,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-14 12:50:47.719000+00:00 +Internet,LEFT_case-4666,2011-01-18 01:06:40+00:00,General,2011-01-18 09:52:21.599000+00:00,2011-01-18 01:06:40.010000+00:00,,Resource08,2010-11-23 01:06:40.010000+00:00,task-4163,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-15 16:47:37.064000+00:00 +Internet,LEFT_case-4666,2011-01-18 01:06:40+00:00,General,2011-01-18 09:52:21.599000+00:00,2011-01-18 01:06:40.010000+00:00,,Resource08,2010-11-23 01:06:40.010000+00:00,task-4162,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-07 14:44:48.678000+00:00 +Internet,LEFT_case-4667,2011-01-31 00:00:00+00:00,General,2011-01-26 15:10:16.721000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource12,2010-12-06 00:00:00.010000+00:00,task-3156,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-14 10:10:14.666000+00:00 +Internet,LEFT_case-4667,2011-01-31 00:00:00+00:00,General,2011-01-26 15:10:16.721000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource12,2010-12-06 00:00:00.010000+00:00,task-5462,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-22 14:14:47.466000+00:00 +Internet,LEFT_case-4667,2011-01-31 00:00:00+00:00,General,2011-01-26 15:10:16.721000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource12,2010-12-06 00:00:00.010000+00:00,task-4084,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-06 12:21:20.609000+00:00 +Internet,LEFT_case-4667,2011-01-31 00:00:00+00:00,General,2011-01-26 15:10:16.721000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource12,2010-12-06 00:00:00.010000+00:00,task-7049,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-01-06 12:21:55.888000+00:00 +Internet,LEFT_case-4667,2011-01-31 00:00:00+00:00,General,2011-01-26 15:10:16.721000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource12,2010-12-06 00:00:00.010000+00:00,task-7050,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-06 12:22:24.200000+00:00 +Internet,LEFT_case-4667,2011-01-31 00:00:00+00:00,General,2011-01-26 15:10:16.721000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource12,2010-12-06 00:00:00.010000+00:00,task-7051,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-01-06 12:22:51.490000+00:00 +Internet,LEFT_case-4667,2011-01-31 00:00:00+00:00,General,2011-01-26 15:10:16.721000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource12,2010-12-06 00:00:00.010000+00:00,task-7052,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-06 12:23:38.884000+00:00 +Internet,LEFT_case-4677,2011-02-28 01:06:40+00:00,General,2011-02-25 09:44:56.521000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2011-01-03 01:06:40.010000+00:00,task-3233,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-10 11:23:33.213000+00:00 +Internet,LEFT_case-4677,2011-02-28 01:06:40+00:00,General,2011-02-25 09:44:56.521000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2011-01-03 01:06:40.010000+00:00,task-3606,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-12-10 11:24:00.090000+00:00 +Internet,LEFT_case-4677,2011-02-28 01:06:40+00:00,General,2011-02-25 09:44:56.521000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2011-01-03 01:06:40.010000+00:00,task-3605,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-10 11:24:23.663000+00:00 +Internet,LEFT_case-4678,2011-01-18 00:00:00+00:00,General,2010-12-24 13:53:53.755000+00:00,2011-01-18 00:00:00.010000+00:00,,Resource07,2010-11-23 00:00:00.010000+00:00,task-3284,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-10 16:20:10.289000+00:00 +Internet,LEFT_case-4678,2011-01-18 00:00:00+00:00,General,2010-12-24 13:53:53.755000+00:00,2011-01-18 00:00:00.010000+00:00,,Resource07,2010-11-23 00:00:00.010000+00:00,task-3710,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-10 16:23:10.841000+00:00 +Internet,LEFT_case-4678,2011-01-18 00:00:00+00:00,General,2010-12-24 13:53:53.755000+00:00,2011-01-18 00:00:00.010000+00:00,,Resource07,2010-11-23 00:00:00.010000+00:00,task-3817,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-13 13:18:34.872000+00:00 +Internet,LEFT_case-4680,2011-01-19 00:00:00+00:00,General,2011-01-10 16:17:53.605000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3344,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 11:14:56.714000+00:00 +Internet,LEFT_case-4680,2011-01-19 00:00:00+00:00,General,2011-01-10 16:17:53.605000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-4446,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 11:18:47.684000+00:00 +Internet,LEFT_case-4680,2011-01-19 00:00:00+00:00,General,2011-01-10 16:17:53.605000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-4628,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-16 10:11:57.396000+00:00 +Internet,LEFT_case-4683,2011-01-19 00:00:00+00:00,General,2011-01-20 09:42:03.621000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3386,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-10 16:52:36.937000+00:00 +Internet,LEFT_case-4683,2011-01-19 00:00:00+00:00,General,2011-01-20 09:42:03.621000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3724,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-10 16:52:53.468000+00:00 +Internet,LEFT_case-4683,2011-01-19 00:00:00+00:00,General,2011-01-20 09:42:03.621000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3820,T04 Determine confirmation of receipt,complete,Group 3,Resource26,2010-12-13 15:43:21.453000+00:00 +Internet,LEFT_case-4687,2011-01-20 00:00:00+00:00,General,2011-01-10 13:21:56.701000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-3412,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 09:51:38.429000+00:00 +Internet,LEFT_case-4687,2011-01-20 00:00:00+00:00,General,2011-01-10 13:21:56.701000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-4391,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 15:18:20.714000+00:00 +Internet,LEFT_case-4687,2011-01-20 00:00:00+00:00,General,2011-01-10 13:21:56.701000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-4619,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-16 10:06:11.632000+00:00 +Internet,LEFT_case-4758,2011-03-12 01:06:40+00:00,General,2011-03-09 10:12:00.243000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource08,2010-11-24 01:06:40.010000+00:00,task-4063,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-23 15:12:06.884000+00:00 +Internet,LEFT_case-4758,2011-03-12 01:06:40+00:00,General,2011-03-09 10:12:00.243000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource08,2010-11-24 01:06:40.010000+00:00,task-5544,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-23 15:13:01.771000+00:00 +Internet,LEFT_case-4758,2011-03-12 01:06:40+00:00,General,2011-03-09 10:12:00.243000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource08,2010-11-24 01:06:40.010000+00:00,task-5545,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 09:26:17.172000+00:00 +Internet,LEFT_case-4759,2011-01-13 01:06:40+00:00,General,2011-02-08 15:45:37.389000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource15,2010-11-18 01:06:40.010000+00:00,task-4096,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-24 15:41:15.271000+00:00 +Internet,LEFT_case-4759,2011-01-13 01:06:40+00:00,General,2011-02-08 15:45:37.389000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource15,2010-11-18 01:06:40.010000+00:00,task-5763,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 15:52:58.737000+00:00 +Internet,LEFT_case-4759,2011-01-13 01:06:40+00:00,General,2011-02-08 15:45:37.389000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource15,2010-11-18 01:06:40.010000+00:00,task-5742,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-04 09:49:09.870000+00:00 +Internet,LEFT_case-4760,2011-01-20 01:06:40+00:00,General,2011-01-10 12:42:32.647000+00:00,2011-01-20 01:06:40.010000+00:00,,Resource11,2010-11-25 01:06:40.010000+00:00,task-4132,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:13:19.586000+00:00 +Internet,LEFT_case-4760,2011-01-20 01:06:40+00:00,General,2011-01-10 12:42:32.647000+00:00,2011-01-20 01:06:40.010000+00:00,,Resource11,2010-11-25 01:06:40.010000+00:00,task-4821,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:36:47.021000+00:00 +Internet,LEFT_case-4760,2011-01-20 01:06:40+00:00,General,2011-01-10 12:42:32.647000+00:00,2011-01-20 01:06:40.010000+00:00,,Resource11,2010-11-25 01:06:40.010000+00:00,task-4756,T06 Determine necessity of stop advice,complete,EMPTY,Resource11,2010-12-27 12:13:01.685000+00:00 +Desk,LEFT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4169,Confirmation of receipt,complete,Group 1,Resource25,2010-12-14 14:18:22.511000+00:00 +Desk,LEFT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4195,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-12-14 14:19:59.793000+00:00 +Desk,LEFT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4198,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource25,2010-12-14 14:21:46.996000+00:00 +Desk,LEFT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4197,T08 Draft and send request for advice,complete,Group 1,Resource25,2010-12-14 14:23:12.190000+00:00 +Desk,LEFT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4202,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource25,2010-12-14 14:23:26.150000+00:00 +Desk,LEFT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4204,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-12-14 14:24:32.145000+00:00 +Desk,LEFT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4208,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource25,2010-12-14 14:25:01.495000+00:00 +Desk,LEFT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4209,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-12-14 14:25:20.301000+00:00 +Desk,LEFT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4253,T04 Determine confirmation of receipt,complete,Group 3,Resource25,2010-12-14 15:28:58.029000+00:00 +Internet,LEFT_case-4763,2011-02-09 01:06:40+00:00,General,2011-02-08 15:46:11.268000+00:00,2011-02-09 01:06:40.010000+00:00,,Resource04,2010-11-29 01:06:40.010000+00:00,task-4172,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:13:44.427000+00:00 +Internet,LEFT_case-4763,2011-02-09 01:06:40+00:00,General,2011-02-08 15:46:11.268000+00:00,2011-02-09 01:06:40.010000+00:00,,Resource04,2010-11-29 01:06:40.010000+00:00,task-4822,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:32:02.597000+00:00 +Internet,LEFT_case-4763,2011-02-09 01:06:40+00:00,General,2011-02-08 15:46:11.268000+00:00,2011-02-09 01:06:40.010000+00:00,,Resource04,2010-11-29 01:06:40.010000+00:00,task-4758,T06 Determine necessity of stop advice,complete,EMPTY,Resource04,2010-12-17 14:33:12.157000+00:00 +Internet,LEFT_case-4764,2011-01-24 01:06:40+00:00,General,2011-02-02 13:27:54.785000+00:00,2011-01-24 01:06:40.010000+00:00,,Resource08,2010-11-29 01:06:40.010000+00:00,task-4174,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:14:56.246000+00:00 +Internet,LEFT_case-4764,2011-01-24 01:06:40+00:00,General,2011-02-02 13:27:54.785000+00:00,2011-01-24 01:06:40.010000+00:00,,Resource08,2010-11-29 01:06:40.010000+00:00,task-4819,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:37:33.595000+00:00 +Internet,LEFT_case-4764,2011-01-24 01:06:40+00:00,General,2011-02-02 13:27:54.785000+00:00,2011-01-24 01:06:40.010000+00:00,,Resource08,2010-11-29 01:06:40.010000+00:00,task-4760,T06 Determine necessity of stop advice,complete,EMPTY,Resource08,2010-12-23 14:05:11.820000+00:00 +Internet,LEFT_case-4765,2011-01-25 00:00:00+00:00,General,2011-01-13 09:53:06.668000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource07,2010-11-30 00:00:00.010000+00:00,task-4178,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:15:20.283000+00:00 +Internet,LEFT_case-4765,2011-01-25 00:00:00+00:00,General,2011-01-13 09:53:06.668000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource07,2010-11-30 00:00:00.010000+00:00,task-4810,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:36:12.941000+00:00 +Internet,LEFT_case-4765,2011-01-25 00:00:00+00:00,General,2011-01-13 09:53:06.668000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource07,2010-11-30 00:00:00.010000+00:00,task-4762,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 14:28:48.056000+00:00 +Post,LEFT_case-4766,2010-12-31 00:00:00+00:00,General,2010-12-23 08:11:45.103000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource07,2010-11-05 00:00:00.010000+00:00,task-4179,Confirmation of receipt,complete,Group 1,Resource01,2010-12-15 08:24:10.397000+00:00 +Post,LEFT_case-4766,2010-12-31 00:00:00+00:00,General,2010-12-23 08:11:45.103000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource07,2010-11-05 00:00:00.010000+00:00,task-4295,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 08:25:15.553000+00:00 +Post,LEFT_case-4766,2010-12-31 00:00:00+00:00,General,2010-12-23 08:11:45.103000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource07,2010-11-05 00:00:00.010000+00:00,task-4296,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 08:56:36.486000+00:00 +Internet,LEFT_case-4767,2011-01-25 01:06:40+00:00,General,2011-01-28 14:06:44.443000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource17,2010-11-30 01:06:40.010000+00:00,task-4186,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:15:36.442000+00:00 +Internet,LEFT_case-4767,2011-01-25 01:06:40+00:00,General,2011-01-28 14:06:44.443000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource17,2010-11-30 01:06:40.010000+00:00,task-4811,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:37:19.123000+00:00 +Internet,LEFT_case-4767,2011-01-25 01:06:40+00:00,General,2011-01-28 14:06:44.443000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource17,2010-11-30 01:06:40.010000+00:00,task-4764,T06 Determine necessity of stop advice,complete,EMPTY,Resource17,2010-12-20 11:20:28.836000+00:00 +Internet,LEFT_case-4769,2011-01-25 00:00:00+00:00,General,2011-01-06 09:08:32.961000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource11,2010-11-30 00:00:00.010000+00:00,task-4193,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:17:43.814000+00:00 +Internet,LEFT_case-4769,2011-01-25 00:00:00+00:00,General,2011-01-06 09:08:32.961000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource11,2010-11-30 00:00:00.010000+00:00,task-4813,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:33:21.802000+00:00 +Internet,LEFT_case-4769,2011-01-25 00:00:00+00:00,General,2011-01-06 09:08:32.961000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource11,2010-11-30 00:00:00.010000+00:00,task-4772,T06 Determine necessity of stop advice,complete,EMPTY,Resource26,2010-12-21 11:11:52.039000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-4226,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:17:03.921000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-4816,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:38:48.972000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-4768,T06 Determine necessity of stop advice,complete,EMPTY,Resource15,2011-01-04 10:24:29.864000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-6660,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource35,2011-01-11 10:24:48.073000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-6661,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource33,2011-01-11 15:14:25.680000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-7779,T06 Determine necessity of stop advice,complete,EMPTY,Resource15,2011-01-13 11:07:20.473000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-8070,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource15,2011-01-13 11:07:45.604000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-8071,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource15,2011-01-13 11:07:57.393000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-8073,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-13 11:08:12.119000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-8074,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource15,2011-01-13 11:08:28.915000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-8075,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource15,2011-01-13 11:08:39.178000+00:00 +Internet,LEFT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-8076,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-13 11:09:01.790000+00:00 +Internet,LEFT_case-4773,2011-01-25 00:00:00+00:00,General,2011-01-26 16:07:58.280000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource04,2010-11-30 00:00:00.010000+00:00,task-4235,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:18:24.004000+00:00 +Internet,LEFT_case-4773,2011-01-25 00:00:00+00:00,General,2011-01-26 16:07:58.280000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource04,2010-11-30 00:00:00.010000+00:00,task-4804,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:35:01.148000+00:00 +Internet,LEFT_case-4773,2011-01-25 00:00:00+00:00,General,2011-01-26 16:07:58.280000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource04,2010-11-30 00:00:00.010000+00:00,task-4775,T06 Determine necessity of stop advice,complete,EMPTY,Resource04,2010-12-21 11:02:52.451000+00:00 +Internet,LEFT_case-4774,2011-01-20 00:00:00+00:00,General,2011-01-14 15:56:17.205000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-4246,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:19:30.551000+00:00 +Internet,LEFT_case-4774,2011-01-20 00:00:00+00:00,General,2011-01-14 15:56:17.205000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-4814,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:33:40.838000+00:00 +Internet,LEFT_case-4774,2011-01-20 00:00:00+00:00,General,2011-01-14 15:56:17.205000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-4778,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 13:54:27.318000+00:00 +Internet,LEFT_case-4777,2011-01-20 00:00:00+00:00,General,2011-01-11 09:00:56.175000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-4261,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:17:21.054000+00:00 +Internet,LEFT_case-4777,2011-01-20 00:00:00+00:00,General,2011-01-11 09:00:56.175000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-4812,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:37:55.751000+00:00 +Internet,LEFT_case-4777,2011-01-20 00:00:00+00:00,General,2011-01-11 09:00:56.175000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-4770,T06 Determine necessity of stop advice,complete,EMPTY,Resource11,2010-12-27 11:18:00.183000+00:00 +Internet,LEFT_case-4778,2011-01-21 00:00:00+00:00,General,2011-01-07 12:06:15.036000+00:00,2011-01-21 00:00:00.010000+00:00,,Resource07,2010-11-26 00:00:00.010000+00:00,task-4262,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:19:50.098000+00:00 +Internet,LEFT_case-4778,2011-01-21 00:00:00+00:00,General,2011-01-07 12:06:15.036000+00:00,2011-01-21 00:00:00.010000+00:00,,Resource07,2010-11-26 00:00:00.010000+00:00,task-4806,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:37:04.384000+00:00 +Internet,LEFT_case-4778,2011-01-21 00:00:00+00:00,General,2011-01-07 12:06:15.036000+00:00,2011-01-21 00:00:00.010000+00:00,,Resource07,2010-11-26 00:00:00.010000+00:00,task-4780,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 14:20:24.922000+00:00 +Internet,LEFT_case-4779,2011-01-23 00:00:00+00:00,General,2011-01-20 15:34:07.266000+00:00,2011-01-23 00:00:00.010000+00:00,,Resource11,2010-11-28 00:00:00.010000+00:00,task-4271,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:20:29.781000+00:00 +Internet,LEFT_case-4779,2011-01-23 00:00:00+00:00,General,2011-01-20 15:34:07.266000+00:00,2011-01-23 00:00:00.010000+00:00,,Resource11,2010-11-28 00:00:00.010000+00:00,task-4815,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:38:19.241000+00:00 +Internet,LEFT_case-4779,2011-01-23 00:00:00+00:00,General,2011-01-20 15:34:07.266000+00:00,2011-01-23 00:00:00.010000+00:00,,Resource11,2010-11-28 00:00:00.010000+00:00,task-4784,T06 Determine necessity of stop advice,complete,EMPTY,Resource11,2010-12-27 12:44:59.302000+00:00 +Post,LEFT_case-4780,2011-01-20 00:00:00+00:00,General,2011-01-13 09:39:30.383000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-4272,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:20:07.645000+00:00 +Post,LEFT_case-4780,2011-01-20 00:00:00+00:00,General,2011-01-13 09:39:30.383000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-4807,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:30:47.275000+00:00 +Post,LEFT_case-4780,2011-01-20 00:00:00+00:00,General,2011-01-13 09:39:30.383000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-4782,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 14:07:03.617000+00:00 +Desk,LEFT_case-4781,2010-12-21 00:00:00+00:00,General,2010-12-17 14:50:32.046000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource07,2010-10-26 00:00:00.020000+00:00,task-4275,Confirmation of receipt,complete,Group 1,Resource01,2010-12-15 09:44:43.229000+00:00 +Desk,LEFT_case-4781,2010-12-21 00:00:00+00:00,General,2010-12-17 14:50:32.046000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource07,2010-10-26 00:00:00.020000+00:00,task-4384,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 09:49:10.045000+00:00 +Desk,LEFT_case-4781,2010-12-21 00:00:00+00:00,General,2010-12-17 14:50:32.046000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource07,2010-10-26 00:00:00.020000+00:00,task-4385,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:29:58.709000+00:00 +Post,LEFT_case-4806,2011-01-25 00:00:00+00:00,General,2011-01-07 12:27:29.250000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource34,2010-11-30 00:00:00.010000+00:00,task-4636,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:22:27.456000+00:00 +Post,LEFT_case-4806,2011-01-25 00:00:00+00:00,General,2011-01-07 12:27:29.250000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource34,2010-11-30 00:00:00.010000+00:00,task-4831,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:35:20.827000+00:00 +Post,LEFT_case-4806,2011-01-25 00:00:00+00:00,General,2011-01-07 12:27:29.250000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource34,2010-11-30 00:00:00.010000+00:00,task-4795,T06 Determine necessity of stop advice,complete,EMPTY,Resource34,2010-12-17 12:08:11.969000+00:00 +Desk,LEFT_case-4807,2011-04-05 01:06:40+00:00,General,2011-04-01 15:58:08.848000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource22,2010-11-30 01:06:40.010000+00:00,task-4645,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:21:46.261000+00:00 +Desk,LEFT_case-4807,2011-04-05 01:06:40+00:00,General,2011-04-01 15:58:08.848000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource22,2010-11-30 01:06:40.010000+00:00,task-4818,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:35:37.087000+00:00 +Desk,LEFT_case-4807,2011-04-05 01:06:40+00:00,General,2011-04-01 15:58:08.848000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource22,2010-11-30 01:06:40.010000+00:00,task-4791,T06 Determine necessity of stop advice,complete,EMPTY,Resource22,2010-12-27 09:39:54.086000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-4647,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:22:08.980000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-4820,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:38:33.422000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-4793,T06 Determine necessity of stop advice,complete,EMPTY,Resource15,2010-12-24 10:50:19.906000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-5613,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource29,2011-01-18 14:18:44.152000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8823,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-01-18 14:19:49.591000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8828,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource29,2011-01-18 14:20:07.827000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8829,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-01-18 14:20:39.983000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8830,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource29,2011-01-18 14:21:26.953000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8831,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-01-18 14:21:49.421000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8833,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource29,2011-01-18 14:22:23.694000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8834,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-01-18 14:22:55.328000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8835,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource29,2011-01-18 14:24:31.856000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8837,T06 Determine necessity of stop advice,complete,Group 7,Resource15,2011-01-19 10:43:13.997000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8929,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource15,2011-01-19 10:43:31.437000+00:00 +Desk,LEFT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8930,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-19 10:43:46.628000+00:00 +Post,LEFT_case-4809,2011-01-28 00:00:00+00:00,General,2011-01-13 12:22:49.908000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-4648,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:22:44.741000+00:00 +Post,LEFT_case-4809,2011-01-28 00:00:00+00:00,General,2011-01-13 12:22:49.908000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-4832,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:39:56.296000+00:00 +Post,LEFT_case-4809,2011-01-28 00:00:00+00:00,General,2011-01-13 12:22:49.908000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-4797,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 15:52:37.727000+00:00 +Post,LEFT_case-4810,2011-01-28 00:00:00+00:00,General,2011-01-13 11:32:30.318000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-4649,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:23:06.388000+00:00 +Post,LEFT_case-4810,2011-01-28 00:00:00+00:00,General,2011-01-13 11:32:30.318000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-4825,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:31:08.294000+00:00 +Post,LEFT_case-4810,2011-01-28 00:00:00+00:00,General,2011-01-13 11:32:30.318000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-4799,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 16:02:51.272000+00:00 +Desk,LEFT_case-4811,2011-02-03 00:00:00+00:00,General,2011-01-20 13:03:01.643000+00:00,2011-02-03 00:00:00.010000+00:00,,Resource07,2010-12-09 00:00:00.010000+00:00,task-4675,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:23:24.758000+00:00 +Desk,LEFT_case-4811,2011-02-03 00:00:00+00:00,General,2011-01-20 13:03:01.643000+00:00,2011-02-03 00:00:00.010000+00:00,,Resource07,2010-12-09 00:00:00.010000+00:00,task-4841,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:41:38.831000+00:00 +Desk,LEFT_case-4811,2011-02-03 00:00:00+00:00,General,2011-01-20 13:03:01.643000+00:00,2011-02-03 00:00:00.010000+00:00,,Resource07,2010-12-09 00:00:00.010000+00:00,task-4801,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 16:07:05.547000+00:00 +Internet,LEFT_case-4814,2011-01-26 00:00:00+00:00,General,2011-01-10 13:20:26.529000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-4701,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:23:41.409000+00:00 +Internet,LEFT_case-4814,2011-01-26 00:00:00+00:00,General,2011-01-10 13:20:26.529000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-4828,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:31:46.391000+00:00 +Internet,LEFT_case-4814,2011-01-26 00:00:00+00:00,General,2011-01-10 13:20:26.529000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-4803,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 14:39:16.689000+00:00 +Internet,LEFT_case-4827,2011-01-26 01:06:40+00:00,General,2011-01-14 15:56:54.775000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource34,2010-12-01 01:06:40.010000+00:00,task-4746,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:25:16.565000+00:00 +Internet,LEFT_case-4827,2011-01-26 01:06:40+00:00,General,2011-01-14 15:56:54.775000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource34,2010-12-01 01:06:40.010000+00:00,task-4833,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:40:11.444000+00:00 +Internet,LEFT_case-4827,2011-01-26 01:06:40+00:00,General,2011-01-14 15:56:54.775000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource34,2010-12-01 01:06:40.010000+00:00,task-4809,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-27 12:45:58.852000+00:00 +Internet,LEFT_case-4827,2011-01-26 01:06:40+00:00,General,2011-01-14 15:56:54.775000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource34,2010-12-01 01:06:40.010000+00:00,task-5875,T11 Create document X request unlicensed,complete,Group 1,admin2,2011-01-14 15:56:55.509000+00:00 +Post,LEFT_case-4832,2011-01-13 00:00:00+00:00,General,2010-12-31 10:44:23.501000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource12,2010-11-18 00:00:00.010000+00:00,task-4938,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-20 11:15:59.433000+00:00 +Post,LEFT_case-4832,2011-01-13 00:00:00+00:00,General,2010-12-31 10:44:23.501000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource12,2010-11-18 00:00:00.010000+00:00,task-5069,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2010-12-20 11:59:19.872000+00:00 +Post,LEFT_case-4832,2011-01-13 00:00:00+00:00,General,2010-12-31 10:44:23.501000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource12,2010-11-18 00:00:00.010000+00:00,task-5036,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-20 12:07:19.758000+00:00 +Internet,LEFT_case-4833,2011-01-26 00:00:00+00:00,General,2011-01-13 11:08:01.835000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-4940,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-20 11:59:43.112000+00:00 +Internet,LEFT_case-4833,2011-01-26 00:00:00+00:00,General,2011-01-13 11:08:01.835000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-5125,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-22 09:38:39.114000+00:00 +Internet,LEFT_case-4833,2011-01-26 00:00:00+00:00,General,2011-01-13 11:08:01.835000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-5072,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-24 14:56:31.361000+00:00 +Internet,LEFT_case-4834,2011-01-26 00:00:00+00:00,General,2011-01-06 09:46:31.789000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-4961,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-20 17:02:46.928000+00:00 +Internet,LEFT_case-4834,2011-01-26 00:00:00+00:00,General,2011-01-06 09:46:31.789000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-5389,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-22 10:50:08.896000+00:00 +Internet,LEFT_case-4834,2011-01-26 00:00:00+00:00,General,2011-01-06 09:46:31.789000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-5215,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-28 07:46:32.295000+00:00 +Internet,LEFT_case-4837,2011-01-26 01:06:40+00:00,General,2011-01-25 17:04:40.546000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-4975,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-20 16:57:01.202000+00:00 +Internet,LEFT_case-4837,2011-01-26 01:06:40+00:00,General,2011-01-25 17:04:40.546000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5383,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-22 09:47:15.917000+00:00 +Internet,LEFT_case-4837,2011-01-26 01:06:40+00:00,General,2011-01-25 17:04:40.546000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5213,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-24 15:18:12.487000+00:00 +Internet,LEFT_case-4891,2011-01-26 00:00:00+00:00,General,2011-01-25 09:49:29.713000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-5251,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-23 16:54:48.171000+00:00 +Internet,LEFT_case-4891,2011-01-26 00:00:00+00:00,General,2011-01-25 09:49:29.713000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-5628,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 12:01:13.266000+00:00 +Internet,LEFT_case-4891,2011-01-26 00:00:00+00:00,General,2011-01-25 09:49:29.713000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-5554,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-29 10:23:42.144000+00:00 +Internet,LEFT_case-4892,2011-01-31 01:06:40+00:00,General,2011-03-01 11:33:59.752000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-5253,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 12:50:56.125000+00:00 +Internet,LEFT_case-4892,2011-01-31 01:06:40+00:00,General,2011-03-01 11:33:59.752000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-6346,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-30 12:51:50.602000+00:00 +Internet,LEFT_case-4892,2011-01-31 01:06:40+00:00,General,2011-03-01 11:33:59.752000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-6347,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:15:23.521000+00:00 +Internet,LEFT_case-4895,2011-01-31 00:00:00+00:00,General,2011-02-17 13:41:01.229000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource02,2010-12-06 00:00:00.010000+00:00,task-5266,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 14:24:54.305000+00:00 +Internet,LEFT_case-4895,2011-01-31 00:00:00+00:00,General,2011-02-17 13:41:01.229000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource02,2010-12-06 00:00:00.010000+00:00,task-8162,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-13 14:26:41.361000+00:00 +Internet,LEFT_case-4895,2011-01-31 00:00:00+00:00,General,2011-02-17 13:41:01.229000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource02,2010-12-06 00:00:00.010000+00:00,task-8163,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:17:16.640000+00:00 +Internet,LEFT_case-4896,2011-01-26 01:06:40+00:00,General,2011-01-10 13:28:35.749000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5267,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-23 17:03:00.964000+00:00 +Internet,LEFT_case-4896,2011-01-26 01:06:40+00:00,General,2011-01-10 13:28:35.749000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5629,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 12:02:37.237000+00:00 +Internet,LEFT_case-4896,2011-01-26 01:06:40+00:00,General,2011-01-10 13:28:35.749000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5558,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-24 15:28:54.616000+00:00 +Internet,LEFT_case-4897,2011-01-26 01:06:40+00:00,General,2011-01-26 15:50:04.617000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource08,2010-12-01 01:06:40.010000+00:00,task-5268,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-28 15:04:42.577000+00:00 +Internet,LEFT_case-4897,2011-01-26 01:06:40+00:00,General,2011-01-26 15:50:04.617000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource08,2010-12-01 01:06:40.010000+00:00,task-6083,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-28 16:13:58.317000+00:00 +Internet,LEFT_case-4897,2011-01-26 01:06:40+00:00,General,2011-01-26 15:50:04.617000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource08,2010-12-01 01:06:40.010000+00:00,task-6082,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-10 08:57:13.534000+00:00 +Internet,LEFT_case-4898,2011-01-31 01:06:40+00:00,General,2011-02-15 10:58:40.180000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource02,2010-12-06 01:06:40.010000+00:00,task-5270,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 15:48:54.503000+00:00 +Internet,LEFT_case-4898,2011-01-31 01:06:40+00:00,General,2011-02-15 10:58:40.180000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource02,2010-12-06 01:06:40.010000+00:00,task-8208,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:32:11.122000+00:00 +Internet,LEFT_case-4898,2011-01-31 01:06:40+00:00,General,2011-02-15 10:58:40.180000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource02,2010-12-06 01:06:40.010000+00:00,task-8207,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-13 17:07:14.033000+00:00 +Internet,LEFT_case-4899,2011-01-27 00:00:00+00:00,General,2011-01-06 08:41:05.254000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource07,2010-12-02 00:00:00.010000+00:00,task-5271,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-23 17:07:44.891000+00:00 +Internet,LEFT_case-4899,2011-01-27 00:00:00+00:00,General,2011-01-06 08:41:05.254000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource07,2010-12-02 00:00:00.010000+00:00,task-5627,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 12:00:23.682000+00:00 +Internet,LEFT_case-4899,2011-01-27 00:00:00+00:00,General,2011-01-06 08:41:05.254000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource07,2010-12-02 00:00:00.010000+00:00,task-5560,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-24 15:43:11.974000+00:00 +Internet,LEFT_case-4900,2011-01-27 00:00:00+00:00,General,2011-01-20 18:10:18.448000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource11,2010-12-02 00:00:00.010000+00:00,task-5272,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-23 16:59:56.008000+00:00 +Internet,LEFT_case-4900,2011-01-27 00:00:00+00:00,General,2011-01-20 18:10:18.448000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource11,2010-12-02 00:00:00.010000+00:00,task-5586,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 10:13:56.270000+00:00 +Internet,LEFT_case-4900,2011-01-27 00:00:00+00:00,General,2011-01-20 18:10:18.448000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource11,2010-12-02 00:00:00.010000+00:00,task-5556,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-28 08:32:38.344000+00:00 +Internet,LEFT_case-4901,2011-01-27 00:00:00+00:00,General,2011-02-04 12:16:54.067000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource05,2010-12-02 00:00:00.010000+00:00,task-5276,Confirmation of receipt,complete,EMPTY,Resource05,2011-01-03 11:12:15.095000+00:00 +Internet,LEFT_case-4901,2011-01-27 00:00:00+00:00,General,2011-02-04 12:16:54.067000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource05,2010-12-02 00:00:00.010000+00:00,task-6504,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-01-03 11:18:15.118000+00:00 +Internet,LEFT_case-4901,2011-01-27 00:00:00+00:00,General,2011-02-04 12:16:54.067000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource05,2010-12-02 00:00:00.010000+00:00,task-6509,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-01-03 11:36:07.703000+00:00 +Internet,LEFT_case-4902,2011-01-28 01:06:40+00:00,General,2011-01-25 09:56:35.150000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource07,2010-12-03 01:06:40.010000+00:00,task-5281,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-27 09:56:41.044000+00:00 +Internet,LEFT_case-4902,2011-01-28 01:06:40+00:00,General,2011-01-25 09:56:35.150000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource07,2010-12-03 01:06:40.010000+00:00,task-5822,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-27 09:57:11.887000+00:00 +Internet,LEFT_case-4902,2011-01-28 01:06:40+00:00,General,2011-01-25 09:56:35.150000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource07,2010-12-03 01:06:40.010000+00:00,task-5833,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-27 10:03:40.607000+00:00 +Internet,LEFT_case-4903,2011-01-28 01:06:40+00:00,General,2011-02-08 00:00:00.010000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource35,2010-12-03 01:06:40.010000+00:00,task-5289,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-04 11:24:04.105000+00:00 +Internet,LEFT_case-4903,2011-01-28 01:06:40+00:00,General,2011-02-08 00:00:00.010000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource35,2010-12-03 01:06:40.010000+00:00,task-6737,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-04 16:43:11.086000+00:00 +Internet,LEFT_case-4903,2011-01-28 01:06:40+00:00,General,2011-02-08 00:00:00.010000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource35,2010-12-03 01:06:40.010000+00:00,task-6677,T06 Determine necessity of stop advice,complete,Group 1,Resource35,2011-01-12 16:56:06.080000+00:00 +Post,LEFT_case-4920,2011-04-13 01:06:40+00:00,General,2011-04-12 14:12:50.523000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource15,2010-12-08 01:06:40.010000+00:00,task-5402,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-12 14:45:57.475000+00:00 +Post,LEFT_case-4920,2011-04-13 01:06:40+00:00,General,2011-04-12 14:12:50.523000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource15,2010-12-08 01:06:40.010000+00:00,task-8087,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 11:15:33.108000+00:00 +Post,LEFT_case-4920,2011-04-13 01:06:40+00:00,General,2011-04-12 14:12:50.523000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource15,2010-12-08 01:06:40.010000+00:00,task-7938,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-24 08:59:58.170000+00:00 +Post,LEFT_case-4922,2011-02-10 00:00:00+00:00,General,2011-02-11 11:36:29.855000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-5410,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 11:08:48.046000+00:00 +Post,LEFT_case-4922,2011-02-10 00:00:00+00:00,General,2011-02-11 11:36:29.855000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8561,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-17 11:58:20.624000+00:00 +Post,LEFT_case-4922,2011-02-10 00:00:00+00:00,General,2011-02-11 11:36:29.855000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8560,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 08:41:58.518000+00:00 +Post,LEFT_case-4923,2011-02-10 00:00:00+00:00,General,2011-02-11 11:28:04.497000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-5411,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 11:50:08.510000+00:00 +Post,LEFT_case-4923,2011-02-10 00:00:00+00:00,General,2011-02-11 11:28:04.497000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8575,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-17 12:08:19.897000+00:00 +Post,LEFT_case-4923,2011-02-10 00:00:00+00:00,General,2011-02-11 11:28:04.497000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8574,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 09:48:46.250000+00:00 +Post,LEFT_case-4923,2011-02-10 00:00:00+00:00,General,2011-02-11 11:28:04.497000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8736,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 09:49:51.532000+00:00 +Desk,LEFT_case-4924,2011-02-14 00:00:00+00:00,General,2011-03-28 12:41:17.155000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-20 00:00:00.010000+00:00,task-5422,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-18 12:53:37.525000+00:00 +Desk,LEFT_case-4924,2011-02-14 00:00:00+00:00,General,2011-03-28 12:41:17.155000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-20 00:00:00.010000+00:00,task-8800,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-18 12:54:37.901000+00:00 +Desk,LEFT_case-4924,2011-02-14 00:00:00+00:00,General,2011-03-28 12:41:17.155000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-20 00:00:00.010000+00:00,task-11299,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-02-09 14:00:41.522000+00:00 +Desk,LEFT_case-4924,2011-02-14 00:00:00+00:00,General,2011-03-28 12:41:17.155000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-20 00:00:00.010000+00:00,task-11527,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-09 15:06:28.296000+00:00 +Desk,LEFT_case-4925,2011-02-11 01:06:40+00:00,General,,2011-02-11 01:06:40.010000+00:00,,Resource12,2010-12-17 01:06:40.010000+00:00,task-5434,Confirmation of receipt,complete,EMPTY,Resource12,2011-01-03 11:33:36.015000+00:00 +Desk,LEFT_case-4925,2011-02-11 01:06:40+00:00,General,,2011-02-11 01:06:40.010000+00:00,,Resource12,2010-12-17 01:06:40.010000+00:00,task-6523,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-03 13:55:10.205000+00:00 +Desk,LEFT_case-4925,2011-02-11 01:06:40+00:00,General,,2011-02-11 01:06:40.010000+00:00,,Resource12,2010-12-17 01:06:40.010000+00:00,task-6522,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-12 10:17:44.150000+00:00 +Desk,LEFT_case-4925,2011-02-11 01:06:40+00:00,General,,2011-02-11 01:06:40.010000+00:00,,Resource12,2010-12-17 01:06:40.010000+00:00,task-8096,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-13 11:30:30.314000+00:00 +Desk,LEFT_case-4926,2011-04-04 01:06:40+00:00,General,2011-03-17 09:22:44.335000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-5438,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-12 14:54:04.422000+00:00 +Desk,LEFT_case-4926,2011-04-04 01:06:40+00:00,General,2011-03-17 09:22:44.335000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-7941,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-12 15:20:58.827000+00:00 +Desk,LEFT_case-4926,2011-04-04 01:06:40+00:00,General,2011-03-17 09:22:44.335000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-8089,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 11:17:40.718000+00:00 +Desk,LEFT_case-4927,2011-02-14 00:00:00+00:00,General,2011-01-13 11:56:15.421000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource07,2010-12-20 00:00:00.010000+00:00,task-5441,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-30 07:55:59.103000+00:00 +Desk,LEFT_case-4927,2011-02-14 00:00:00+00:00,General,2011-01-13 11:56:15.421000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource07,2010-12-20 00:00:00.010000+00:00,task-6237,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-30 07:56:43.232000+00:00 +Desk,LEFT_case-4927,2011-02-14 00:00:00+00:00,General,2011-01-13 11:56:15.421000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource07,2010-12-20 00:00:00.010000+00:00,task-6260,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:12:15.940000+00:00 +Internet,LEFT_case-4930,2011-02-10 01:06:40+00:00,General,2011-02-16 14:49:13.268000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-03 01:06:40.010000+00:00,task-5467,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 09:09:02.887000+00:00 +Internet,LEFT_case-4930,2011-02-10 01:06:40+00:00,General,2011-02-16 14:49:13.268000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-03 01:06:40.010000+00:00,task-7161,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-07 09:48:45.404000+00:00 +Internet,LEFT_case-4930,2011-02-10 01:06:40+00:00,General,2011-02-16 14:49:13.268000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-03 01:06:40.010000+00:00,task-7185,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-07 11:32:18.303000+00:00 +Internet,LEFT_case-4939,2011-02-01 00:00:00+00:00,General,2011-02-01 16:16:17.020000+00:00,2011-02-01 00:00:00.010000+00:00,,Resource17,2010-12-07 00:00:00.010000+00:00,task-5519,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 10:28:15.346000+00:00 +Internet,LEFT_case-4939,2011-02-01 00:00:00+00:00,General,2011-02-01 16:16:17.020000+00:00,2011-02-01 00:00:00.010000+00:00,,Resource17,2010-12-07 00:00:00.010000+00:00,task-7391,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-10 10:28:28.630000+00:00 +Internet,LEFT_case-4939,2011-02-01 00:00:00+00:00,General,2011-02-01 16:16:17.020000+00:00,2011-02-01 00:00:00.010000+00:00,,Resource17,2010-12-07 00:00:00.010000+00:00,task-7394,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-10 11:49:59.816000+00:00 +Internet,LEFT_case-4941,2011-02-02 00:00:00+00:00,General,2011-05-11 09:38:26.369000+00:00,2011-02-02 00:00:00.010000+00:00,,Resource09,2010-12-08 00:00:00.010000+00:00,task-5523,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-05 12:04:46.010000+00:00 +Internet,LEFT_case-4941,2011-02-02 00:00:00+00:00,General,2011-05-11 09:38:26.369000+00:00,2011-02-02 00:00:00.010000+00:00,,Resource09,2010-12-08 00:00:00.010000+00:00,task-6857,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-05 12:10:24.898000+00:00 +Internet,LEFT_case-4941,2011-02-02 00:00:00+00:00,General,2011-05-11 09:38:26.369000+00:00,2011-02-02 00:00:00.010000+00:00,,Resource09,2010-12-08 00:00:00.010000+00:00,task-6858,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource09,2011-01-13 12:14:58.802000+00:00 +Internet,LEFT_case-4941,2011-02-02 00:00:00+00:00,General,2011-05-11 09:38:26.369000+00:00,2011-02-02 00:00:00.010000+00:00,,Resource09,2010-12-08 00:00:00.010000+00:00,task-8121,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-13 12:15:20.489000+00:00 +Internet,LEFT_case-4941,2011-02-02 00:00:00+00:00,General,2011-05-11 09:38:26.369000+00:00,2011-02-02 00:00:00.010000+00:00,,Resource09,2010-12-08 00:00:00.010000+00:00,task-8156,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:21:31.379000+00:00 +Internet,LEFT_case-4943,2011-04-14 01:06:40+00:00,General,2011-04-11 00:00:00.020000+00:00,2011-04-14 01:06:40.020000+00:00,,Resource17,2010-12-09 01:06:40.010000+00:00,task-5542,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 12:15:38.509000+00:00 +Internet,LEFT_case-4943,2011-04-14 01:06:40+00:00,General,2011-04-11 00:00:00.020000+00:00,2011-04-14 01:06:40.020000+00:00,,Resource17,2010-12-09 01:06:40.010000+00:00,task-7416,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-10 12:15:54.133000+00:00 +Internet,LEFT_case-4943,2011-04-14 01:06:40+00:00,General,2011-04-11 00:00:00.020000+00:00,2011-04-14 01:06:40.020000+00:00,,Resource17,2010-12-09 01:06:40.010000+00:00,task-7421,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-10 14:23:12.135000+00:00 +Internet,LEFT_case-4944,2011-03-17 01:06:40+00:00,General,2011-03-02 10:27:28.139000+00:00,2011-03-17 01:06:40.010000+00:00,,Resource02,2010-12-09 01:06:40.010000+00:00,task-5552,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-19 17:08:59.152000+00:00 +Internet,LEFT_case-4944,2011-03-17 01:06:40+00:00,General,2011-03-02 10:27:28.139000+00:00,2011-03-17 01:06:40.010000+00:00,,Resource02,2010-12-09 01:06:40.010000+00:00,task-9029,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-20 07:51:24.410000+00:00 +Internet,LEFT_case-4944,2011-03-17 01:06:40+00:00,General,2011-03-02 10:27:28.139000+00:00,2011-03-17 01:06:40.010000+00:00,,Resource02,2010-12-09 01:06:40.010000+00:00,task-9030,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-21 09:24:24.968000+00:00 +Desk,LEFT_case-4946,2011-02-04 01:06:40+00:00,General,2011-02-17 15:11:15.249000+00:00,2011-02-04 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-5580,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:19:04.351000+00:00 +Desk,LEFT_case-4946,2011-02-04 01:06:40+00:00,General,2011-02-17 15:11:15.249000+00:00,2011-02-04 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-6364,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:19:30.644000+00:00 +Desk,LEFT_case-4946,2011-02-04 01:06:40+00:00,General,2011-02-17 15:11:15.249000+00:00,2011-02-04 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-6363,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-11 15:57:57.437000+00:00 +Desk,LEFT_case-4947,2011-02-10 01:06:40+00:00,General,2011-02-10 16:09:18.704000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-16 01:06:40.010000+00:00,task-5597,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 15:11:45.596000+00:00 +Desk,LEFT_case-4947,2011-02-10 01:06:40+00:00,General,2011-02-10 16:09:18.704000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-16 01:06:40.010000+00:00,task-7457,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-10 15:12:08.048000+00:00 +Desk,LEFT_case-4947,2011-02-10 01:06:40+00:00,General,2011-02-10 16:09:18.704000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-16 01:06:40.010000+00:00,task-7462,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-10 15:36:15.847000+00:00 +Post,LEFT_case-4954,2011-01-31 00:00:00+00:00,General,2011-02-01 20:59:36.460000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource17,2010-12-06 00:00:00.010000+00:00,task-5719,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 15:54:09.192000+00:00 +Post,LEFT_case-4954,2011-01-31 00:00:00+00:00,General,2011-02-01 20:59:36.460000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource17,2010-12-06 00:00:00.010000+00:00,task-7328,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-07 15:54:55.831000+00:00 +Post,LEFT_case-4954,2011-01-31 00:00:00+00:00,General,2011-02-01 20:59:36.460000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource17,2010-12-06 00:00:00.010000+00:00,task-7329,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-07 16:22:30.887000+00:00 +Post,LEFT_case-4955,2011-02-14 01:06:40+00:00,General,2011-02-11 08:39:09.903000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-5730,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 13:45:37.206000+00:00 +Post,LEFT_case-4955,2011-02-14 01:06:40+00:00,General,2011-02-11 08:39:09.903000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-6360,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:18:14.969000+00:00 +Post,LEFT_case-4955,2011-02-14 01:06:40+00:00,General,2011-02-11 08:39:09.903000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-6359,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-10 15:17:56.354000+00:00 +Internet,LEFT_case-4969,2011-02-18 01:06:40+00:00,General,2011-02-17 11:25:34.815000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-5816,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:34:56.858000+00:00 +Internet,LEFT_case-4969,2011-02-18 01:06:40+00:00,General,2011-02-17 11:25:34.815000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-6367,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-13 15:51:06.212000+00:00 +Internet,LEFT_case-4969,2011-02-18 01:06:40+00:00,General,2011-02-17 11:25:34.815000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-8205,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:33:27.908000+00:00 +Internet,LEFT_case-4972,2011-02-21 00:00:00+00:00,General,2010-12-30 12:07:16.045000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-5838,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-28 16:52:10.618000+00:00 +Internet,LEFT_case-4972,2011-02-21 00:00:00+00:00,General,2010-12-30 12:07:16.045000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-6109,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-28 16:52:31.705000+00:00 +Internet,LEFT_case-4972,2011-02-21 00:00:00+00:00,General,2010-12-30 12:07:16.045000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-6253,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-30 09:37:15.629000+00:00 +Internet,LEFT_case-4973,2011-02-21 00:00:00+00:00,General,2010-12-30 12:01:52.371000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-5839,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-28 16:23:37.616000+00:00 +Internet,LEFT_case-4973,2011-02-21 00:00:00+00:00,General,2010-12-30 12:01:52.371000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-6097,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-28 16:23:56.714000+00:00 +Internet,LEFT_case-4973,2011-02-21 00:00:00+00:00,General,2010-12-30 12:01:52.371000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-6257,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-30 10:31:48.154000+00:00 +Internet,LEFT_case-4975,2011-04-28 01:06:40+00:00,General,2011-04-21 16:09:13.659000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource04,2010-12-10 01:06:40.010000+00:00,task-5846,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-03 10:31:34.480000+00:00 +Internet,LEFT_case-4975,2011-04-28 01:06:40+00:00,General,2011-04-21 16:09:13.659000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource04,2010-12-10 01:06:40.010000+00:00,task-6491,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-03 11:07:11.735000+00:00 +Internet,LEFT_case-4975,2011-04-28 01:06:40+00:00,General,2011-04-21 16:09:13.659000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource04,2010-12-10 01:06:40.010000+00:00,task-6492,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-03 12:00:57.185000+00:00 +Post,LEFT_case-4976,2011-02-07 00:00:00+00:00,General,2011-02-03 12:17:25.080000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource11,2010-12-13 00:00:00.010000+00:00,task-5847,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-28 08:58:59.254000+00:00 +Post,LEFT_case-4976,2011-02-07 00:00:00+00:00,General,2011-02-03 12:17:25.080000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource11,2010-12-13 00:00:00.010000+00:00,task-5972,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-28 09:01:15.042000+00:00 +Post,LEFT_case-4976,2011-02-07 00:00:00+00:00,General,2011-02-03 12:17:25.080000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource11,2010-12-13 00:00:00.010000+00:00,task-6044,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-28 12:25:19.053000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-5858,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-28 13:41:00.042000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6061,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2010-12-28 13:44:21.732000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6060,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 13:48:35.091000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6064,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-12-28 13:50:35.760000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6065,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 13:51:22.871000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6066,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-12-28 13:52:06.561000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6067,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 13:53:08.382000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6068,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-12-28 13:54:25.935000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6069,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 13:55:00.162000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6070,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-12-28 13:55:43.786000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6071,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 13:57:46.642000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6072,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-01-03 13:55:42.514000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6579,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-03 14:00:58.818000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6580,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-01-03 14:01:42.761000+00:00 +Desk,LEFT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6581,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-03 14:02:43.156000+00:00 +Internet,LEFT_case-4980,2011-02-07 01:06:40+00:00,General,2011-04-07 15:43:27.347000+00:00,2011-02-07 01:06:40.010000+00:00,,Resource09,2010-12-13 01:06:40.010000+00:00,task-5872,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-05 13:16:11.638000+00:00 +Internet,LEFT_case-4980,2011-02-07 01:06:40+00:00,General,2011-04-07 15:43:27.347000+00:00,2011-02-07 01:06:40.010000+00:00,,Resource09,2010-12-13 01:06:40.010000+00:00,task-6870,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-05 13:17:19.396000+00:00 +Internet,LEFT_case-4980,2011-02-07 01:06:40+00:00,General,2011-04-07 15:43:27.347000+00:00,2011-02-07 01:06:40.010000+00:00,,Resource09,2010-12-13 01:06:40.010000+00:00,task-8155,T04 Determine confirmation of receipt,complete,EMPTY,Resource09,2011-01-25 09:22:42.562000+00:00 +Internet,LEFT_case-4981,2011-02-07 00:00:00+00:00,General,2011-03-11 10:49:44.794000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource14,2010-12-13 00:00:00.010000+00:00,task-5876,Confirmation of receipt,complete,EMPTY,Resource14,2011-01-11 09:49:19.363000+00:00 +Internet,LEFT_case-4981,2011-02-07 00:00:00+00:00,General,2011-03-11 10:49:44.794000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource14,2010-12-13 00:00:00.010000+00:00,task-7571,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-01-11 10:29:35.262000+00:00 +Internet,LEFT_case-4981,2011-02-07 00:00:00+00:00,General,2011-03-11 10:49:44.794000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource14,2010-12-13 00:00:00.010000+00:00,task-7588,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 10:48:54.789000+00:00 +Internet,LEFT_case-4986,2011-03-01 01:06:40+00:00,General,2011-02-23 14:25:50.802000+00:00,2011-03-01 01:06:40.010000+00:00,,Resource04,2010-12-14 01:06:40.010000+00:00,task-5919,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-03 10:36:13.845000+00:00 +Internet,LEFT_case-4986,2011-03-01 01:06:40+00:00,General,2011-02-23 14:25:50.802000+00:00,2011-03-01 01:06:40.010000+00:00,,Resource04,2010-12-14 01:06:40.010000+00:00,task-6494,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-03 12:56:44.341000+00:00 +Internet,LEFT_case-4986,2011-03-01 01:06:40+00:00,General,2011-02-23 14:25:50.802000+00:00,2011-03-01 01:06:40.010000+00:00,,Resource04,2010-12-14 01:06:40.010000+00:00,task-6495,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-03 12:57:05.714000+00:00 +Desk,LEFT_case-4995,2011-02-14 00:00:00+00:00,General,2011-03-02 16:51:39.087000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource14,2010-12-20 00:00:00.010000+00:00,task-5995,Confirmation of receipt,complete,EMPTY,Resource14,2011-01-11 11:04:08.708000+00:00 +Desk,LEFT_case-4995,2011-02-14 00:00:00+00:00,General,2011-03-02 16:51:39.087000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource14,2010-12-20 00:00:00.010000+00:00,task-7609,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-01-11 11:06:49.696000+00:00 +Desk,LEFT_case-4995,2011-02-14 00:00:00+00:00,General,2011-03-02 16:51:39.087000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource14,2010-12-20 00:00:00.010000+00:00,task-7666,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 12:16:13.822000+00:00 +Internet,LEFT_case-4997,2011-04-26 01:06:40+00:00,General,2011-04-20 15:20:40.063000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-5997,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-05 10:10:22.641000+00:00 +Internet,LEFT_case-4997,2011-04-26 01:06:40+00:00,General,2011-04-20 15:20:40.063000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6808,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-05 10:17:46.929000+00:00 +Internet,LEFT_case-4997,2011-04-26 01:06:40+00:00,General,2011-04-20 15:20:40.063000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6811,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:33:24.735000+00:00 +Internet,LEFT_case-4997,2011-04-26 01:06:40+00:00,General,2011-04-20 15:20:40.063000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6809,T08 Draft and send request for advice,complete,Group 1,Resource15,2011-01-06 08:33:16.134000+00:00 +Internet,LEFT_case-4997,2011-04-26 01:06:40+00:00,General,2011-04-20 15:20:40.063000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6940,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-06 08:33:51.069000+00:00 +Post,LEFT_case-4998,2011-02-22 01:06:40+00:00,General,2011-02-24 13:44:43.546000+00:00,2011-02-22 01:06:40.010000+00:00,,Resource17,2010-12-20 01:06:40.010000+00:00,task-5999,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 15:25:48.168000+00:00 +Post,LEFT_case-4998,2011-02-22 01:06:40+00:00,General,2011-02-24 13:44:43.546000+00:00,2011-02-22 01:06:40.010000+00:00,,Resource17,2010-12-20 01:06:40.010000+00:00,task-7473,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-10 15:26:18.630000+00:00 +Post,LEFT_case-4998,2011-02-22 01:06:40+00:00,General,2011-02-24 13:44:43.546000+00:00,2011-02-22 01:06:40.010000+00:00,,Resource17,2010-12-20 01:06:40.010000+00:00,task-7474,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-10 15:42:28.937000+00:00 +Post,LEFT_case-4999,2011-02-14 01:06:40+00:00,General,2011-01-27 10:50:30.276000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource07,2010-12-20 01:06:40.010000+00:00,task-6005,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-30 11:06:21.508000+00:00 +Post,LEFT_case-4999,2011-02-14 01:06:40+00:00,General,2011-01-27 10:50:30.276000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource07,2010-12-20 01:06:40.010000+00:00,task-6305,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-30 11:08:05.623000+00:00 +Post,LEFT_case-4999,2011-02-14 01:06:40+00:00,General,2011-01-27 10:50:30.276000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource07,2010-12-20 01:06:40.010000+00:00,task-6309,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-30 11:22:30.793000+00:00 +Internet,LEFT_case-5000,2011-04-06 01:06:40+00:00,General,2011-03-25 16:33:11.436000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6012,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-05 09:06:38.252000+00:00 +Internet,LEFT_case-5000,2011-04-06 01:06:40+00:00,General,2011-03-25 16:33:11.436000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6777,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-05 09:13:42.787000+00:00 +Internet,LEFT_case-5000,2011-04-06 01:06:40+00:00,General,2011-03-25 16:33:11.436000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6794,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 09:32:05.934000+00:00 +Internet,LEFT_case-5002,2011-02-16 00:00:00+00:00,General,2011-01-19 10:10:45.508000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource26,2010-12-14 00:00:00.010000+00:00,task-6017,Confirmation of receipt,complete,EMPTY,admin2,2011-01-19 10:10:46.594000+00:00 +Internet,LEFT_case-5010,2011-02-09 00:00:00+00:00,General,2011-01-20 00:00:00.010000+00:00,2011-02-09 00:00:00.010000+00:00,,Resource08,2010-12-15 00:00:00.010000+00:00,task-6077,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:39:11.950000+00:00 +Internet,LEFT_case-5010,2011-02-09 00:00:00+00:00,General,2011-01-20 00:00:00.010000+00:00,2011-02-09 00:00:00.010000+00:00,,Resource08,2010-12-15 00:00:00.010000+00:00,task-6370,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:16:52.406000+00:00 +Internet,LEFT_case-5010,2011-02-09 00:00:00+00:00,General,2011-01-20 00:00:00.010000+00:00,2011-02-09 00:00:00.010000+00:00,,Resource08,2010-12-15 00:00:00.010000+00:00,task-6369,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-13 16:07:36.422000+00:00 +Internet,LEFT_case-5011,2011-04-21 01:06:40+00:00,General,2011-04-20 12:10:05.125000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource08,2010-12-16 01:06:40.010000+00:00,task-6085,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:49:18.954000+00:00 +Internet,LEFT_case-5011,2011-04-21 01:06:40+00:00,General,2011-04-20 12:10:05.125000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource08,2010-12-16 01:06:40.010000+00:00,task-6373,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:20:50.538000+00:00 +Internet,LEFT_case-5011,2011-04-21 01:06:40+00:00,General,2011-04-20 12:10:05.125000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource08,2010-12-16 01:06:40.010000+00:00,task-6372,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-14 09:01:49.572000+00:00 +Internet,LEFT_case-5014,2011-03-10 01:06:40+00:00,General,2011-03-10 10:23:39.974000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource15,2010-12-16 01:06:40.010000+00:00,task-6092,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-05 09:48:40.762000+00:00 +Internet,LEFT_case-5014,2011-03-10 01:06:40+00:00,General,2011-03-10 10:23:39.974000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource15,2010-12-16 01:06:40.010000+00:00,task-6802,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-10 09:44:54.890000+00:00 +Internet,LEFT_case-5014,2011-03-10 01:06:40+00:00,General,2011-03-10 10:23:39.974000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource15,2010-12-16 01:06:40.010000+00:00,task-7374,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-10 11:48:40.187000+00:00 +Internet,LEFT_case-5021,2011-03-10 01:06:40+00:00,General,2011-03-08 12:13:10.584000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource04,2010-12-16 01:06:40.010000+00:00,task-6138,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-07 14:42:49.358000+00:00 +Internet,LEFT_case-5021,2011-03-10 01:06:40+00:00,General,2011-03-08 12:13:10.584000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource04,2010-12-16 01:06:40.010000+00:00,task-7273,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-07 14:43:12.423000+00:00 +Internet,LEFT_case-5021,2011-03-10 01:06:40+00:00,General,2011-03-08 12:13:10.584000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource04,2010-12-16 01:06:40.010000+00:00,task-7274,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-07 15:25:03.384000+00:00 +Internet,LEFT_case-5024,2011-02-08 00:00:00+00:00,General,2011-01-20 15:42:14.981000+00:00,2011-02-08 00:00:00.010000+00:00,,Resource11,2010-12-14 00:00:00.010000+00:00,task-6189,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 10:41:13.343000+00:00 +Internet,LEFT_case-5024,2011-02-08 00:00:00+00:00,General,2011-01-20 15:42:14.981000+00:00,2011-02-08 00:00:00.010000+00:00,,Resource11,2010-12-14 00:00:00.010000+00:00,task-6667,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-06 11:34:46.345000+00:00 +Internet,LEFT_case-5024,2011-02-08 00:00:00+00:00,General,2011-01-20 15:42:14.981000+00:00,2011-02-08 00:00:00.010000+00:00,,Resource11,2010-12-14 00:00:00.010000+00:00,task-6815,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-07 10:04:20.198000+00:00 +Internet,LEFT_case-5036,2011-02-16 01:06:40+00:00,General,2011-02-11 16:37:55.743000+00:00,2011-02-16 01:06:40.010000+00:00,,Resource02,2010-12-15 01:06:40.010000+00:00,task-6312,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 10:23:04.049000+00:00 +Internet,LEFT_case-5036,2011-02-16 01:06:40+00:00,General,2011-02-11 16:37:55.743000+00:00,2011-02-16 01:06:40.010000+00:00,,Resource02,2010-12-15 01:06:40.010000+00:00,task-8037,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-13 10:56:43.766000+00:00 +Internet,LEFT_case-5036,2011-02-16 01:06:40+00:00,General,2011-02-11 16:37:55.743000+00:00,2011-02-16 01:06:40.010000+00:00,,Resource02,2010-12-15 01:06:40.010000+00:00,task-8038,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 11:06:13.687000+00:00 +Internet,LEFT_case-5037,2011-02-24 00:00:00+00:00,General,2011-01-13 12:28:26.950000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource07,2010-12-30 00:00:00.010000+00:00,task-6334,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:37:29.489000+00:00 +Internet,LEFT_case-5037,2011-02-24 00:00:00+00:00,General,2011-01-13 12:28:26.950000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource07,2010-12-30 00:00:00.010000+00:00,task-6821,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:38:04.778000+00:00 +Internet,LEFT_case-5037,2011-02-24 00:00:00+00:00,General,2011-01-13 12:28:26.950000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource07,2010-12-30 00:00:00.010000+00:00,task-6736,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-06 12:30:01.742000+00:00 +Internet,LEFT_case-5039,2011-02-10 00:00:00+00:00,General,2011-02-01 08:57:30.509000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6343,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:55:20.668000+00:00 +Internet,LEFT_case-5039,2011-02-10 00:00:00+00:00,General,2011-02-01 08:57:30.509000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6822,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:35:45.348000+00:00 +Internet,LEFT_case-5039,2011-02-10 00:00:00+00:00,General,2011-02-01 08:57:30.509000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6755,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-02-01 08:57:31.646000+00:00 +Internet,LEFT_case-5040,2011-02-10 00:00:00+00:00,General,2011-02-03 13:07:56.840000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6354,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:56:50.730000+00:00 +Internet,LEFT_case-5040,2011-02-10 00:00:00+00:00,General,2011-02-03 13:07:56.840000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6823,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:38:55.193000+00:00 +Internet,LEFT_case-5040,2011-02-10 00:00:00+00:00,General,2011-02-03 13:07:56.840000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6757,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-06 10:17:28.682000+00:00 +Internet,LEFT_case-5041,2011-02-10 00:00:00+00:00,General,2011-01-11 10:22:10.369000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource05,2010-12-16 00:00:00.010000+00:00,task-6357,Confirmation of receipt,complete,EMPTY,admin2,2011-01-11 10:22:11.419000+00:00 +Internet,LEFT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-6365,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 12:18:48.641000+00:00 +Internet,LEFT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8129,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 12:24:35.501000+00:00 +Internet,LEFT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8128,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-13 12:27:27.358000+00:00 +Internet,LEFT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8136,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource41,2011-01-17 14:44:31.552000+00:00 +Internet,LEFT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8673,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 10:41:00.512000+00:00 +Internet,LEFT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8769,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource02,2011-01-18 10:46:37.453000+00:00 +Internet,LEFT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8772,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 10:47:07.678000+00:00 +Internet,LEFT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8773,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource02,2011-01-18 10:48:04.717000+00:00 +Internet,LEFT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8774,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 10:53:05.790000+00:00 +Internet,LEFT_case-5043,2011-02-11 00:00:00+00:00,General,2011-02-04 11:55:21.184000+00:00,2011-02-11 00:00:00.010000+00:00,,Resource07,2010-12-17 00:00:00.010000+00:00,task-6374,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:58:10.831000+00:00 +Internet,LEFT_case-5043,2011-02-11 00:00:00+00:00,General,2011-02-04 11:55:21.184000+00:00,2011-02-11 00:00:00.010000+00:00,,Resource07,2010-12-17 00:00:00.010000+00:00,task-6826,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-01-05 11:13:04.736000+00:00 +Internet,LEFT_case-5043,2011-02-11 00:00:00+00:00,General,2011-02-04 11:55:21.184000+00:00,2011-02-11 00:00:00.010000+00:00,,Resource07,2010-12-17 00:00:00.010000+00:00,task-6759,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-01-05 11:39:00.880000+00:00 +Internet,LEFT_case-5044,2011-06-10 01:06:40+00:00,General,2011-06-07 11:13:01.358000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource02,2010-12-17 01:06:40.010000+00:00,task-6375,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-11 10:41:14.829000+00:00 +Internet,LEFT_case-5044,2011-06-10 01:06:40+00:00,General,2011-06-07 11:13:01.358000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource02,2010-12-17 01:06:40.010000+00:00,task-7594,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-11 10:44:42.991000+00:00 +Internet,LEFT_case-5044,2011-06-10 01:06:40+00:00,General,2011-06-07 11:13:01.358000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource02,2010-12-17 01:06:40.010000+00:00,task-7597,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-11 10:46:02.018000+00:00 +Internet,LEFT_case-5044,2011-06-10 01:06:40+00:00,General,2011-06-07 11:13:01.358000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource02,2010-12-17 01:06:40.010000+00:00,task-7595,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 10:54:13.503000+00:00 +Internet,LEFT_case-5045,2011-02-11 01:06:40+00:00,General,2011-01-20 13:13:35.461000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource11,2010-12-17 01:06:40.010000+00:00,task-6377,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-03 11:58:10.679000+00:00 +Internet,LEFT_case-5045,2011-02-11 01:06:40+00:00,General,2011-01-20 13:13:35.461000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource11,2010-12-17 01:06:40.010000+00:00,task-6543,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-03 11:59:18.291000+00:00 +Internet,LEFT_case-5045,2011-02-11 01:06:40+00:00,General,2011-01-20 13:13:35.461000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource11,2010-12-17 01:06:40.010000+00:00,task-6611,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-04 08:41:17.509000+00:00 +Internet,LEFT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-6382,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-05 13:50:03.479000+00:00 +Internet,LEFT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-6885,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-05 13:51:29.400000+00:00 +Internet,LEFT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-6886,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource25,2011-01-07 14:06:04.017000+00:00 +Internet,LEFT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-7262,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-11 14:17:48.704000+00:00 +Internet,LEFT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-7718,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource09,2011-01-11 14:18:59.524000+00:00 +Internet,LEFT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-8040,T04 Determine confirmation of receipt,complete,Group 3,Resource24,2011-01-13 10:26:30.641000+00:00 +Internet,LEFT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-7723,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-17 10:59:36.797000+00:00 +Internet,LEFT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-8554,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource09,2011-01-17 11:00:11.396000+00:00 +Internet,LEFT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-8556,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-17 11:00:37.651000+00:00 +Internet,LEFT_case-5091,2011-02-15 00:00:00+00:00,General,2011-01-20 09:41:09.024000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6540,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:33:32.666000+00:00 +Internet,LEFT_case-5091,2011-02-15 00:00:00+00:00,General,2011-01-20 09:41:09.024000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6818,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:34:26.824000+00:00 +Internet,LEFT_case-5091,2011-02-15 00:00:00+00:00,General,2011-01-20 09:41:09.024000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6732,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-06 10:21:29.090000+00:00 +Internet,LEFT_case-5099,2011-02-15 00:00:00+00:00,General,2011-01-13 12:40:33.053000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6577,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:35:23.458000+00:00 +Internet,LEFT_case-5099,2011-02-15 00:00:00+00:00,General,2011-01-13 12:40:33.053000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6817,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:36:39.061000+00:00 +Internet,LEFT_case-5099,2011-02-15 00:00:00+00:00,General,2011-01-13 12:40:33.053000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6734,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-06 12:17:19.977000+00:00 +Internet,LEFT_case-5101,2011-02-15 00:00:00+00:00,General,2011-01-27 10:29:27.194000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6605,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-06 10:37:39.773000+00:00 +Internet,LEFT_case-5101,2011-02-15 00:00:00+00:00,General,2011-01-27 10:29:27.194000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6970,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-06 12:00:30.307000+00:00 +Internet,LEFT_case-5101,2011-02-15 00:00:00+00:00,General,2011-01-27 10:29:27.194000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-7031,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-07 11:21:38.240000+00:00 +Internet,LEFT_case-5102,2011-02-15 00:00:00+00:00,Customer contact,2011-01-05 09:28:07.195000+00:00,2011-02-15 00:00:00.010000+00:00,,admin3,2010-12-21 00:00:00.010000+00:00,task-6606,Confirmation of receipt,complete,EMPTY,admin2,2011-01-05 09:28:07.911000+00:00 +Internet,LEFT_case-5109,2011-02-20 01:06:40+00:00,General,2011-02-03 13:18:21.261000+00:00,2011-02-20 01:06:40.010000+00:00,,Resource01,2010-12-26 01:06:40.010000+00:00,task-6641,Confirmation of receipt,complete,EMPTY,Resource01,2011-01-06 10:49:52.689000+00:00 +Internet,LEFT_case-5109,2011-02-20 01:06:40+00:00,General,2011-02-03 13:18:21.261000+00:00,2011-02-20 01:06:40.010000+00:00,,Resource01,2010-12-26 01:06:40.010000+00:00,task-6972,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-06 10:51:57.478000+00:00 +Internet,LEFT_case-5109,2011-02-20 01:06:40+00:00,General,2011-02-03 13:18:21.261000+00:00,2011-02-20 01:06:40.010000+00:00,,Resource01,2010-12-26 01:06:40.010000+00:00,task-6973,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-07 10:26:10.339000+00:00 +Desk,LEFT_case-5113,2011-02-15 00:00:00+00:00,General,2011-02-11 13:12:36.819000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource17,2010-12-21 00:00:00.010000+00:00,task-6681,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-20 18:14:09.459000+00:00 +Desk,LEFT_case-5113,2011-02-15 00:00:00+00:00,General,2011-02-11 13:12:36.819000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource17,2010-12-21 00:00:00.010000+00:00,task-9128,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-20 18:15:29.480000+00:00 +Desk,LEFT_case-5113,2011-02-15 00:00:00+00:00,General,2011-02-11 13:12:36.819000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource17,2010-12-21 00:00:00.010000+00:00,task-9129,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-21 09:05:42.549000+00:00 +Post,LEFT_case-5115,2011-02-17 00:00:00+00:00,General,2011-02-24 13:42:20.236000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource18,2010-12-23 00:00:00.010000+00:00,task-6684,Confirmation of receipt,complete,EMPTY,Resource18,2011-01-06 10:16:58.972000+00:00 +Post,LEFT_case-5115,2011-02-17 00:00:00+00:00,General,2011-02-24 13:42:20.236000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource18,2010-12-23 00:00:00.010000+00:00,task-7623,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 11:54:53.574000+00:00 +Post,LEFT_case-5115,2011-02-17 00:00:00+00:00,General,2011-02-24 13:42:20.236000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource18,2010-12-23 00:00:00.010000+00:00,task-6962,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-12 10:56:15.145000+00:00 +Post,LEFT_case-5116,2011-02-17 00:00:00+00:00,General,2011-01-26 08:24:35.551000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource07,2010-12-23 00:00:00.010000+00:00,task-6701,Confirmation of receipt,complete,EMPTY,admin2,2011-01-26 08:24:39.677000+00:00 +Post,LEFT_case-5120,2011-02-16 00:00:00+00:00,General,2011-02-08 10:13:36.786000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource02,2010-12-22 00:00:00.010000+00:00,task-6723,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-14 15:36:32.573000+00:00 +Post,LEFT_case-5120,2011-02-16 00:00:00+00:00,General,2011-02-08 10:13:36.786000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource02,2010-12-22 00:00:00.010000+00:00,task-8603,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 14:54:45.337000+00:00 +Post,LEFT_case-5120,2011-02-16 00:00:00+00:00,General,2011-02-08 10:13:36.786000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource02,2010-12-22 00:00:00.010000+00:00,task-8445,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-25 16:55:54.784000+00:00 +Internet,LEFT_case-5121,2011-07-05 01:06:40+00:00,General,2011-07-06 15:23:31.924000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource04,2011-01-04 01:06:40.010000+00:00,task-6724,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-26 08:44:55.483000+00:00 +Internet,LEFT_case-5121,2011-07-05 01:06:40+00:00,General,2011-07-06 15:23:31.924000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource04,2011-01-04 01:06:40.010000+00:00,task-9578,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-27 10:19:14.099000+00:00 +Internet,LEFT_case-5121,2011-07-05 01:06:40+00:00,General,2011-07-06 15:23:31.924000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource04,2011-01-04 01:06:40.010000+00:00,task-9577,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-02-01 16:18:11.423000+00:00 +Post,LEFT_case-5122,2011-02-21 01:06:40+00:00,General,2011-02-08 14:04:03.360000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource09,2010-12-27 01:06:40.010000+00:00,task-6729,Confirmation of receipt,complete,EMPTY,admin2,2011-02-08 14:04:04.616000+00:00 +Post,LEFT_case-5132,2011-02-21 00:00:00+00:00,General,2011-02-08 13:54:54.571000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource09,2010-12-27 00:00:00.010000+00:00,task-6770,Confirmation of receipt,complete,EMPTY,admin2,2011-02-08 13:54:55.354000+00:00 +Post,LEFT_case-5133,2011-02-22 00:00:00+00:00,General,2011-02-18 14:46:47.461000+00:00,2011-02-22 00:00:00.010000+00:00,,Resource08,2010-12-28 00:00:00.010000+00:00,task-6774,Confirmation of receipt,complete,EMPTY,Resource08,2011-01-18 08:12:04.353000+00:00 +Post,LEFT_case-5133,2011-02-22 00:00:00+00:00,General,2011-02-18 14:46:47.461000+00:00,2011-02-22 00:00:00.010000+00:00,,Resource08,2010-12-28 00:00:00.010000+00:00,task-8699,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-01-18 15:29:10.307000+00:00 +Post,LEFT_case-5133,2011-02-22 00:00:00+00:00,General,2011-02-18 14:46:47.461000+00:00,2011-02-22 00:00:00.010000+00:00,,Resource08,2010-12-28 00:00:00.010000+00:00,task-8698,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-31 13:26:10.607000+00:00 +Internet,LEFT_case-5135,2011-03-30 01:06:40+00:00,General,2011-04-20 10:56:09.528000+00:00,2011-03-30 01:06:40.020000+00:00,,Resource02,2010-12-22 01:06:40.010000+00:00,task-6797,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-06 16:34:14.660000+00:00 +Internet,LEFT_case-5135,2011-03-30 01:06:40+00:00,General,2011-04-20 10:56:09.528000+00:00,2011-03-30 01:06:40.020000+00:00,,Resource02,2010-12-22 01:06:40.010000+00:00,task-7130,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-07 07:42:40.950000+00:00 +Internet,LEFT_case-5135,2011-03-30 01:06:40+00:00,General,2011-04-20 10:56:09.528000+00:00,2011-03-30 01:06:40.020000+00:00,,Resource02,2010-12-22 01:06:40.010000+00:00,task-7139,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-07 07:52:11.980000+00:00 +Internet,LEFT_case-5135,2011-03-30 01:06:40+00:00,General,2011-04-20 10:56:09.528000+00:00,2011-03-30 01:06:40.020000+00:00,,Resource02,2010-12-22 01:06:40.010000+00:00,task-7141,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-07 07:53:00.836000+00:00 +Internet,LEFT_case-5135,2011-03-30 01:06:40+00:00,General,2011-04-20 10:56:09.528000+00:00,2011-03-30 01:06:40.020000+00:00,,Resource02,2010-12-22 01:06:40.010000+00:00,task-7131,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-07 08:02:08.049000+00:00 +Desk,LEFT_case-5137,2011-05-03 01:06:40+00:00,General,2011-04-18 16:09:57.975000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource14,2010-12-28 01:06:40.010000+00:00,task-6799,Confirmation of receipt,complete,EMPTY,Resource14,2011-01-11 11:17:00.962000+00:00 +Desk,LEFT_case-5137,2011-05-03 01:06:40+00:00,General,2011-04-18 16:09:57.975000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource14,2010-12-28 01:06:40.010000+00:00,task-7625,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-01-11 11:17:55.130000+00:00 +Desk,LEFT_case-5137,2011-05-03 01:06:40+00:00,General,2011-04-18 16:09:57.975000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource14,2010-12-28 01:06:40.010000+00:00,task-8158,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:15:51.204000+00:00 +Internet,LEFT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-6816,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-19 15:05:04.530000+00:00 +Internet,LEFT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-8972,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-19 15:05:33.840000+00:00 +Internet,LEFT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-11298,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-03-21 12:08:33.771000+00:00 +Internet,LEFT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-17007,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-03-21 13:14:54.468000+00:00 +Internet,LEFT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-17021,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-03-21 13:51:17.484000+00:00 +Internet,LEFT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-17038,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-03-21 13:53:23.131000+00:00 +Desk,LEFT_case-5144,2011-02-24 01:06:40+00:00,General,2011-04-12 13:53:01.110000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource12,2010-12-30 01:06:40.010000+00:00,task-6859,Confirmation of receipt,complete,EMPTY,Resource12,2011-01-13 09:54:02.081000+00:00 +Desk,LEFT_case-5144,2011-02-24 01:06:40+00:00,General,2011-04-12 13:53:01.110000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource12,2010-12-30 01:06:40.010000+00:00,task-8021,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-14 08:20:20.482000+00:00 +Desk,LEFT_case-5144,2011-02-24 01:06:40+00:00,General,2011-04-12 13:53:01.110000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource12,2010-12-30 01:06:40.010000+00:00,task-8292,T04 Determine confirmation of receipt,complete,EMPTY,Resource12,2011-02-17 11:57:53.105000+00:00 +Internet,LEFT_case-5145,2011-02-15 00:00:00+00:00,General,2011-02-09 15:24:56.103000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource15,2010-12-21 00:00:00.010000+00:00,task-6866,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-11 14:41:26.858000+00:00 +Internet,LEFT_case-5145,2011-02-15 00:00:00+00:00,General,2011-02-09 15:24:56.103000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource15,2010-12-21 00:00:00.010000+00:00,task-7752,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-11 14:42:07.187000+00:00 +Internet,LEFT_case-5145,2011-02-15 00:00:00+00:00,General,2011-02-09 15:24:56.103000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource15,2010-12-21 00:00:00.010000+00:00,task-7886,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-12 11:43:08.537000+00:00 +Post,LEFT_case-5146,2011-02-24 01:06:40+00:00,General,2011-03-09 09:14:56.415000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-6868,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-11 11:09:33.517000+00:00 +Post,LEFT_case-5146,2011-02-24 01:06:40+00:00,General,2011-03-09 09:14:56.415000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-7617,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-11 11:12:37.268000+00:00 +Post,LEFT_case-5146,2011-02-24 01:06:40+00:00,General,2011-03-09 09:14:56.415000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-7668,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 12:17:54.812000+00:00 +Internet,LEFT_case-5151,2011-03-01 00:00:00+00:00,General,2011-02-03 13:29:48.588000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource01,2011-01-04 00:00:00.010000+00:00,task-6907,Confirmation of receipt,complete,EMPTY,Resource01,2011-01-06 11:15:36.220000+00:00 +Internet,LEFT_case-5151,2011-03-01 00:00:00+00:00,General,2011-02-03 13:29:48.588000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource01,2011-01-04 00:00:00.010000+00:00,task-7003,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-06 11:18:47.531000+00:00 +Internet,LEFT_case-5151,2011-03-01 00:00:00+00:00,General,2011-02-03 13:29:48.588000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource01,2011-01-04 00:00:00.010000+00:00,task-7004,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-07 10:48:17.595000+00:00 +Post,LEFT_case-5153,2011-03-16 01:06:40+00:00,General,2011-03-24 14:17:15.719000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-6920,Confirmation of receipt,complete,Group 1,Resource18,2011-01-06 13:10:53.097000+00:00 +Post,LEFT_case-5153,2011-03-16 01:06:40+00:00,General,2011-03-24 14:17:15.719000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-7629,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 11:58:06.114000+00:00 +Post,LEFT_case-5153,2011-03-16 01:06:40+00:00,General,2011-03-24 14:17:15.719000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-7095,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-11 14:35:26.111000+00:00 +Post,LEFT_case-5155,2011-03-16 01:06:40+00:00,General,2011-03-17 15:47:34.137000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-6929,Confirmation of receipt,complete,Group 1,Resource18,2011-01-06 13:17:33.109000+00:00 +Post,LEFT_case-5155,2011-03-16 01:06:40+00:00,General,2011-03-17 15:47:34.137000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-7630,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 12:02:42.852000+00:00 +Post,LEFT_case-5155,2011-03-16 01:06:40+00:00,General,2011-03-17 15:47:34.137000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-7097,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-11 14:46:52.367000+00:00 +Internet,LEFT_case-5167,2011-02-17 00:00:00+00:00,General,2011-01-27 10:38:44.999000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource01,2010-12-23 00:00:00.010000+00:00,task-7026,Confirmation of receipt,complete,EMPTY,Resource01,2011-01-07 09:14:50.920000+00:00 +Internet,LEFT_case-5167,2011-02-17 00:00:00+00:00,General,2011-01-27 10:38:44.999000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource01,2010-12-23 00:00:00.010000+00:00,task-7164,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-07 09:15:29.928000+00:00 +Internet,LEFT_case-5167,2011-02-17 00:00:00+00:00,General,2011-01-27 10:38:44.999000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource01,2010-12-23 00:00:00.010000+00:00,task-7165,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-07 11:38:14.655000+00:00 +e-mail,LEFT_case-5185,2011-03-03 00:00:00+00:00,General,2011-01-31 14:22:37.998000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource14,2011-01-06 00:00:00.010000+00:00,task-7178,Confirmation of receipt,complete,EMPTY,Resource14,2011-01-11 14:28:22.812000+00:00 +e-mail,LEFT_case-5185,2011-03-03 00:00:00+00:00,General,2011-01-31 14:22:37.998000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource14,2011-01-06 00:00:00.010000+00:00,task-7741,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-01-11 14:52:59.433000+00:00 +e-mail,LEFT_case-5185,2011-03-03 00:00:00+00:00,General,2011-01-31 14:22:37.998000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource14,2011-01-06 00:00:00.010000+00:00,task-7888,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-12 11:45:36.126000+00:00 +Internet,LEFT_case-5186,2011-02-18 01:06:40+00:00,General,2011-02-11 15:02:31.454000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource18,2010-12-24 01:06:40.010000+00:00,task-7181,Confirmation of receipt,complete,Group 1,Resource38,2011-01-07 09:57:09.885000+00:00 +Internet,LEFT_case-5186,2011-02-18 01:06:40+00:00,General,2011-02-11 15:02:31.454000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource18,2010-12-24 01:06:40.010000+00:00,task-7628,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-01-11 12:29:58.051000+00:00 +Internet,LEFT_case-5186,2011-02-18 01:06:40+00:00,General,2011-02-11 15:02:31.454000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource18,2010-12-24 01:06:40.010000+00:00,task-7198,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-11 12:37:23.480000+00:00 +Internet,LEFT_case-5187,2011-02-20 00:00:00+00:00,General,2011-01-11 08:39:13.496000+00:00,2011-02-20 00:00:00.010000+00:00,,Resource01,2010-12-26 00:00:00.010000+00:00,task-7208,Confirmation of receipt,complete,EMPTY,admin2,2011-01-11 08:39:14.261000+00:00 +Internet,LEFT_case-5190,2011-02-28 01:06:40+00:00,General,2011-02-25 13:11:59.215000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2010-12-27 01:06:40.010000+00:00,task-7219,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-11 14:09:18.394000+00:00 +Internet,LEFT_case-5190,2011-02-28 01:06:40+00:00,General,2011-02-25 13:11:59.215000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2010-12-27 01:06:40.010000+00:00,task-7712,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-11 14:11:20.424000+00:00 +Internet,LEFT_case-5190,2011-02-28 01:06:40+00:00,General,2011-02-25 13:11:59.215000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2010-12-27 01:06:40.010000+00:00,task-7890,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-12 11:47:15.588000+00:00 +e-mail,LEFT_case-5191,2011-03-04 00:00:00+00:00,General,2011-02-08 14:32:39.711000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-7221,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-07 08:49:51.378000+00:00 +e-mail,LEFT_case-5191,2011-03-04 00:00:00+00:00,General,2011-02-08 14:32:39.711000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-11153,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-07 08:54:22.518000+00:00 +e-mail,LEFT_case-5191,2011-03-04 00:00:00+00:00,General,2011-02-08 14:32:39.711000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-11155,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-02-07 08:57:05.110000+00:00 +e-mail,LEFT_case-5194,2011-03-04 00:00:00+00:00,General,2011-02-08 15:36:36.783000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-7233,Confirmation of receipt,complete,EMPTY,Resource08,2011-01-17 09:36:33.985000+00:00 +e-mail,LEFT_case-5194,2011-03-04 00:00:00+00:00,General,2011-02-08 15:36:36.783000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-8494,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-01-17 09:37:39.327000+00:00 +e-mail,LEFT_case-5194,2011-03-04 00:00:00+00:00,General,2011-02-08 15:36:36.783000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-8493,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-17 09:38:26.926000+00:00 +Internet,LEFT_case-5196,2011-03-03 00:00:00+00:00,General,2011-02-08 11:10:10.493000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource02,2011-01-06 00:00:00.010000+00:00,task-7248,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 14:09:30.414000+00:00 +Internet,LEFT_case-5196,2011-03-03 00:00:00+00:00,General,2011-02-08 11:10:10.493000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource02,2011-01-06 00:00:00.010000+00:00,task-8662,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-17 15:09:43.827000+00:00 +Internet,LEFT_case-5196,2011-03-03 00:00:00+00:00,General,2011-02-08 11:10:10.493000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource02,2011-01-06 00:00:00.010000+00:00,task-8664,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 15:07:32.811000+00:00 +Internet,LEFT_case-5235,2011-03-07 00:00:00+00:00,General,2011-02-24 13:36:06.546000+00:00,2011-03-07 00:00:00.010000+00:00,,Resource25,2011-01-10 00:00:00.010000+00:00,task-7501,Confirmation of receipt,complete,EMPTY,Resource37,2011-01-20 14:59:06.147000+00:00 +Internet,LEFT_case-5235,2011-03-07 00:00:00+00:00,General,2011-02-24 13:36:06.546000+00:00,2011-03-07 00:00:00.010000+00:00,,Resource25,2011-01-10 00:00:00.010000+00:00,task-9101,T06 Determine necessity of stop advice,complete,Group 1,Resource37,2011-01-20 15:03:04.970000+00:00 +Internet,LEFT_case-5235,2011-03-07 00:00:00+00:00,General,2011-02-24 13:36:06.546000+00:00,2011-03-07 00:00:00.010000+00:00,,Resource25,2011-01-10 00:00:00.010000+00:00,task-9102,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource37,2011-01-20 15:03:49.691000+00:00 +Internet,LEFT_case-5235,2011-03-07 00:00:00+00:00,General,2011-02-24 13:36:06.546000+00:00,2011-03-07 00:00:00.010000+00:00,,Resource25,2011-01-10 00:00:00.010000+00:00,task-9103,T06 Determine necessity of stop advice,complete,Group 1,Resource37,2011-01-20 15:04:34.320000+00:00 +Internet,LEFT_case-5235,2011-03-07 00:00:00+00:00,General,2011-02-24 13:36:06.546000+00:00,2011-03-07 00:00:00.010000+00:00,,Resource25,2011-01-10 00:00:00.010000+00:00,task-9436,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-26 13:13:15.164000+00:00 +Internet,LEFT_case-5243,2011-03-20 01:06:40+00:00,General,2011-03-16 16:29:55.520000+00:00,2011-03-20 01:06:40.010000+00:00,,Resource04,2010-12-27 01:06:40.010000+00:00,task-7566,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-17 13:08:29.581000+00:00 +Internet,LEFT_case-5243,2011-03-20 01:06:40+00:00,General,2011-03-16 16:29:55.520000+00:00,2011-03-20 01:06:40.010000+00:00,,Resource04,2010-12-27 01:06:40.010000+00:00,task-8608,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-17 13:09:12.513000+00:00 +Internet,LEFT_case-5243,2011-03-20 01:06:40+00:00,General,2011-03-16 16:29:55.520000+00:00,2011-03-20 01:06:40.010000+00:00,,Resource04,2010-12-27 01:06:40.010000+00:00,task-8609,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 14:57:14.202000+00:00 +Internet,LEFT_case-5245,2011-01-21 01:06:40+00:00,General,2011-01-21 16:00:15.194000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-7614,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-18 09:27:21.804000+00:00 +Internet,LEFT_case-5245,2011-01-21 01:06:40+00:00,General,2011-01-21 16:00:15.194000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-8712,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-18 09:27:38.295000+00:00 +Internet,LEFT_case-5245,2011-01-21 01:06:40+00:00,General,2011-01-21 16:00:15.194000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-8729,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-01-18 09:40:52.540000+00:00 +Internet,LEFT_case-5247,2011-01-16 01:06:40+00:00,General,2011-01-14 14:24:26.688000+00:00,2011-01-16 01:06:40.010000+00:00,,Resource08,2011-01-11 01:06:40.010000+00:00,task-7635,Confirmation of receipt,complete,Group 1,Resource21,2011-01-11 11:42:43.292000+00:00 +Internet,LEFT_case-5247,2011-01-16 01:06:40+00:00,General,2011-01-14 14:24:26.688000+00:00,2011-01-16 01:06:40.010000+00:00,,Resource08,2011-01-11 01:06:40.010000+00:00,task-7652,T06 Determine necessity of stop advice,complete,EMPTY,Resource08,2011-01-13 10:21:09.735000+00:00 +Internet,LEFT_case-5247,2011-01-16 01:06:40+00:00,General,2011-01-14 14:24:26.688000+00:00,2011-01-16 01:06:40.010000+00:00,,Resource08,2011-01-11 01:06:40.010000+00:00,task-8030,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-01-13 10:21:59.109000+00:00 +Internet,LEFT_case-5250,2011-01-31 00:00:00+00:00,General,2011-02-09 11:50:34.042000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource09,2010-12-06 00:00:00.010000+00:00,task-7700,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-17 09:36:13.653000+00:00 +Internet,LEFT_case-5250,2011-01-31 00:00:00+00:00,General,2011-02-09 11:50:34.042000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource09,2010-12-06 00:00:00.010000+00:00,task-8491,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-17 09:41:11.425000+00:00 +Internet,LEFT_case-5250,2011-01-31 00:00:00+00:00,General,2011-02-09 11:50:34.042000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource09,2010-12-06 00:00:00.010000+00:00,task-8604,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 14:55:55.230000+00:00 +Internet,LEFT_case-5254,2011-05-19 01:06:40+00:00,General,2011-06-20 11:43:02.571000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource18,2010-12-27 01:06:40.010000+00:00,task-7787,Confirmation of receipt,complete,EMPTY,Resource18,2011-01-13 11:38:56.153000+00:00 +Internet,LEFT_case-5254,2011-05-19 01:06:40+00:00,General,2011-06-20 11:43:02.571000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource18,2010-12-27 01:06:40.010000+00:00,task-8105,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-13 11:39:27.720000+00:00 +Internet,LEFT_case-5254,2011-05-19 01:06:40+00:00,General,2011-06-20 11:43:02.571000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource18,2010-12-27 01:06:40.010000+00:00,task-8218,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:09:38.658000+00:00 +Internet,LEFT_case-5266,2011-02-21 00:00:00+00:00,General,2011-04-29 14:21:55.843000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource12,2010-12-27 00:00:00.010000+00:00,task-7836,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-13 15:00:42.373000+00:00 +Internet,LEFT_case-5266,2011-02-21 00:00:00+00:00,General,2011-04-29 14:21:55.843000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource12,2010-12-27 00:00:00.010000+00:00,task-8237,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:26:26.698000+00:00 +Internet,LEFT_case-5266,2011-02-21 00:00:00+00:00,General,2011-04-29 14:21:55.843000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource12,2010-12-27 00:00:00.010000+00:00,task-8182,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-18 11:50:28.597000+00:00 +Internet,LEFT_case-5268,2011-02-21 00:00:00+00:00,General,2011-01-13 12:35:15.061000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource26,2010-12-27 00:00:00.010000+00:00,task-7842,Confirmation of receipt,complete,EMPTY,admin2,2011-01-13 12:35:15.762000+00:00 +Internet,LEFT_case-5273,2011-02-21 01:06:40+00:00,General,2011-05-19 14:16:01.675000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource14,2010-12-27 01:06:40.010000+00:00,task-7896,Confirmation of receipt,complete,EMPTY,Resource14,2011-01-13 11:34:18.143000+00:00 +Internet,LEFT_case-5273,2011-02-21 01:06:40+00:00,General,2011-05-19 14:16:01.675000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource14,2010-12-27 01:06:40.010000+00:00,task-8215,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:04:41.638000+00:00 +Internet,LEFT_case-5273,2011-02-21 01:06:40+00:00,General,2011-05-19 14:16:01.675000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource14,2010-12-27 01:06:40.010000+00:00,task-8103,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-01-24 10:11:55.548000+00:00 +Internet,LEFT_case-5275,2011-06-07 01:06:40+00:00,General,2011-06-07 15:05:26.063000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource18,2010-12-28 01:06:40.010000+00:00,task-7909,Confirmation of receipt,complete,EMPTY,Resource18,2011-01-14 16:03:09.840000+00:00 +Internet,LEFT_case-5275,2011-06-07 01:06:40+00:00,General,2011-06-07 15:05:26.063000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource18,2010-12-28 01:06:40.010000+00:00,task-8452,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-17 09:06:42.726000+00:00 +Internet,LEFT_case-5275,2011-06-07 01:06:40+00:00,General,2011-06-07 15:05:26.063000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource18,2010-12-28 01:06:40.010000+00:00,task-8634,T03 Adjust confirmation of receipt,complete,Group 1,Resource18,2011-01-20 13:39:54.930000+00:00 +Internet,LEFT_case-5275,2011-06-07 01:06:40+00:00,General,2011-06-07 15:05:26.063000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource18,2010-12-28 01:06:40.010000+00:00,task-9079,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-01-20 13:41:34.147000+00:00 +Internet,LEFT_case-5285,2011-02-15 00:00:00+00:00,General,2011-01-19 10:11:56.843000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource26,2010-12-23 00:00:00.010000+00:00,task-7953,Confirmation of receipt,complete,Group 1,admin2,2011-01-19 10:11:57.658000+00:00 +Internet,LEFT_case-5286,2011-02-23 00:00:00+00:00,General,2011-08-19 08:50:23.351000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource12,2010-12-29 00:00:00.010000+00:00,task-7954,Confirmation of receipt,complete,EMPTY,Resource12,2011-02-02 15:31:51.578000+00:00 +Internet,LEFT_case-5286,2011-02-23 00:00:00+00:00,General,2011-08-19 08:50:23.351000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource12,2010-12-29 00:00:00.010000+00:00,task-10698,T04 Determine confirmation of receipt,complete,EMPTY,Resource12,2011-02-03 09:37:37.396000+00:00 +Internet,LEFT_case-5286,2011-02-23 00:00:00+00:00,General,2011-08-19 08:50:23.351000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource12,2010-12-29 00:00:00.010000+00:00,task-10697,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-02-03 09:43:18.262000+00:00 +Internet,LEFT_case-5286,2011-02-23 00:00:00+00:00,General,2011-08-19 08:50:23.351000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource12,2010-12-29 00:00:00.010000+00:00,task-10763,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-02-03 09:44:56.122000+00:00 +Internet,LEFT_case-5286,2011-02-23 00:00:00+00:00,General,2011-08-19 08:50:23.351000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource12,2010-12-29 00:00:00.010000+00:00,task-10765,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-02-03 09:45:49.765000+00:00 +Internet,LEFT_case-5287,2011-02-11 01:06:40+00:00,General,2011-02-16 12:12:40.005000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource05,2010-12-17 01:06:40.010000+00:00,task-7955,Confirmation of receipt,complete,Group 1,Resource05,2011-01-19 11:02:30.901000+00:00 +Internet,LEFT_case-5287,2011-02-11 01:06:40+00:00,General,2011-02-16 12:12:40.005000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource05,2010-12-17 01:06:40.010000+00:00,task-8937,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-01-19 11:04:13.688000+00:00 +Internet,LEFT_case-5287,2011-02-11 01:06:40+00:00,General,2011-02-16 12:12:40.005000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource05,2010-12-17 01:06:40.010000+00:00,task-8938,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-01-19 11:04:31.732000+00:00 +Internet,LEFT_case-5288,2011-04-01 01:06:40+00:00,General,2011-04-01 14:45:51.635000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource08,2010-12-17 01:06:40.010000+00:00,task-7956,Confirmation of receipt,complete,EMPTY,Resource08,2011-01-13 15:13:10.761000+00:00 +Internet,LEFT_case-5288,2011-04-01 01:06:40+00:00,General,2011-04-01 14:45:51.635000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource08,2010-12-17 01:06:40.010000+00:00,task-8188,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-13 15:13:40.597000+00:00 +Internet,LEFT_case-5288,2011-04-01 01:06:40+00:00,General,2011-04-01 14:45:51.635000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource08,2010-12-17 01:06:40.010000+00:00,task-8191,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:27:39.707000+00:00 +Desk,LEFT_case-5289,2011-04-22 01:06:40+00:00,General,2011-04-20 15:45:28.388000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-7960,Confirmation of receipt,complete,Group 1,Resource15,2011-01-13 15:12:26.011000+00:00 +Desk,LEFT_case-5289,2011-04-22 01:06:40+00:00,General,2011-04-20 15:45:28.388000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-8234,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:23:53.685000+00:00 +Desk,LEFT_case-5289,2011-04-22 01:06:40+00:00,General,2011-04-20 15:45:28.388000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-8186,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-14 08:13:13.195000+00:00 +Internet,LEFT_case-5294,2011-03-23 01:06:40+00:00,General,2011-03-22 16:05:24.947000+00:00,2011-03-23 01:06:40.010000+00:00,,Resource15,2010-12-29 01:06:40.010000+00:00,task-7988,Confirmation of receipt,complete,Group 1,Resource15,2011-01-13 15:16:25.244000+00:00 +Internet,LEFT_case-5294,2011-03-23 01:06:40+00:00,General,2011-03-22 16:05:24.947000+00:00,2011-03-23 01:06:40.010000+00:00,,Resource15,2010-12-29 01:06:40.010000+00:00,task-8240,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:29:02.459000+00:00 +Internet,LEFT_case-5294,2011-03-23 01:06:40+00:00,General,2011-03-22 16:05:24.947000+00:00,2011-03-23 01:06:40.010000+00:00,,Resource15,2010-12-29 01:06:40.010000+00:00,task-8193,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-14 10:04:18.865000+00:00 +Internet,LEFT_case-5297,2011-03-19 01:06:40+00:00,General,2011-03-16 14:41:16.283000+00:00,2011-03-19 01:06:40.010000+00:00,,Resource04,2010-12-29 01:06:40.010000+00:00,task-8085,Confirmation of receipt,complete,Group 1,Resource04,2011-01-17 13:52:35.916000+00:00 +Internet,LEFT_case-5297,2011-03-19 01:06:40+00:00,General,2011-03-16 14:41:16.283000+00:00,2011-03-19 01:06:40.010000+00:00,,Resource04,2010-12-29 01:06:40.010000+00:00,task-8636,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-17 13:53:08.838000+00:00 +Internet,LEFT_case-5297,2011-03-19 01:06:40+00:00,General,2011-03-16 14:41:16.283000+00:00,2011-03-19 01:06:40.010000+00:00,,Resource04,2010-12-29 01:06:40.010000+00:00,task-8637,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 15:05:34.699000+00:00 +Post,LEFT_case-5298,2011-03-02 00:00:00+00:00,General,2011-02-04 13:28:24.157000+00:00,2011-03-02 00:00:00.010000+00:00,,Resource12,2011-01-05 00:00:00.010000+00:00,task-8091,Confirmation of receipt,complete,Group 1,Resource12,2011-01-14 08:06:51.863000+00:00 +Post,LEFT_case-5298,2011-03-02 00:00:00+00:00,General,2011-02-04 13:28:24.157000+00:00,2011-03-02 00:00:00.010000+00:00,,Resource12,2011-01-05 00:00:00.010000+00:00,task-8273,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-14 08:08:01.042000+00:00 +Post,LEFT_case-5298,2011-03-02 00:00:00+00:00,General,2011-02-04 13:28:24.157000+00:00,2011-03-02 00:00:00.010000+00:00,,Resource12,2011-01-05 00:00:00.010000+00:00,task-10968,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-02-04 13:11:07.780000+00:00 +Internet,LEFT_case-5299,2011-02-25 01:06:40+00:00,General,2011-02-15 10:59:01.802000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource08,2010-12-31 01:06:40.010000+00:00,task-8119,Confirmation of receipt,complete,EMPTY,Resource08,2011-01-14 14:16:02.335000+00:00 +Internet,LEFT_case-5299,2011-02-25 01:06:40+00:00,General,2011-02-15 10:59:01.802000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource08,2010-12-31 01:06:40.010000+00:00,task-8415,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-14 14:16:52.078000+00:00 +Internet,LEFT_case-5299,2011-02-25 01:06:40+00:00,General,2011-02-15 10:59:01.802000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource08,2010-12-31 01:06:40.010000+00:00,task-8416,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-01-14 14:18:46.191000+00:00 +Internet,LEFT_case-5301,2011-03-10 00:00:00+00:00,General,2011-03-04 11:47:56.186000+00:00,2011-03-10 00:00:00.010000+00:00,,Resource13,2011-01-13 00:00:00.010000+00:00,task-8140,Confirmation of receipt,complete,EMPTY,Resource13,2011-01-27 10:32:14.323000+00:00 +Internet,LEFT_case-5301,2011-03-10 00:00:00+00:00,General,2011-03-04 11:47:56.186000+00:00,2011-03-10 00:00:00.010000+00:00,,Resource13,2011-01-13 00:00:00.010000+00:00,task-9772,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-27 10:39:23.652000+00:00 +Internet,LEFT_case-5301,2011-03-10 00:00:00+00:00,General,2011-03-04 11:47:56.186000+00:00,2011-03-10 00:00:00.010000+00:00,,Resource13,2011-01-13 00:00:00.010000+00:00,task-9765,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-01-27 10:46:48.803000+00:00 +Desk,LEFT_case-5311,2011-02-14 00:00:00+00:00,General,2011-04-14 14:12:56.814000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-27 00:00:00.010000+00:00,task-8365,Confirmation of receipt,complete,Group 1,Resource09,2011-01-17 13:58:21.153000+00:00 +Desk,LEFT_case-5311,2011-02-14 00:00:00+00:00,General,2011-04-14 14:12:56.814000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-27 00:00:00.010000+00:00,task-8643,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-17 13:59:31.321000+00:00 +Desk,LEFT_case-5311,2011-02-14 00:00:00+00:00,General,2011-04-14 14:12:56.814000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-27 00:00:00.010000+00:00,task-8976,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 15:09:37.013000+00:00 +Internet,LEFT_case-5337,2011-03-12 00:00:00+00:00,Customer contact,2011-01-15 13:42:03.349000+00:00,2011-03-12 00:00:00.010000+00:00,,admin3,2011-01-15 00:00:00.010000+00:00,task-8466,Confirmation of receipt,complete,Group 1,admin2,2011-01-15 13:42:05.411000+00:00 +Internet,LEFT_case-5351,2011-03-14 00:00:00+00:00,General,2011-08-18 08:43:00.267000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource21,2011-01-17 00:00:00.010000+00:00,task-8666,Confirmation of receipt,complete,Group 1,Resource21,2011-01-17 14:15:36.633000+00:00 +Internet,LEFT_case-5351,2011-03-14 00:00:00+00:00,General,2011-08-18 08:43:00.267000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource21,2011-01-17 00:00:00.010000+00:00,task-8668,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-01-17 14:20:38.278000+00:00 +Internet,LEFT_case-5351,2011-03-14 00:00:00+00:00,General,2011-08-18 08:43:00.267000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource21,2011-01-17 00:00:00.010000+00:00,task-8811,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-01-18 14:08:35.153000+00:00 +Internet,LEFT_case-5351,2011-03-14 00:00:00+00:00,General,2011-08-18 08:43:00.267000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource21,2011-01-17 00:00:00.010000+00:00,task-18390,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-30 11:15:20.861000+00:00 +Internet,LEFT_case-5355,2011-02-24 00:00:00+00:00,General,2011-04-07 15:45:12.541000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource12,2010-12-30 00:00:00.010000+00:00,task-8686,Confirmation of receipt,complete,EMPTY,Resource12,2011-03-01 13:43:51.747000+00:00 +Internet,LEFT_case-5355,2011-02-24 00:00:00+00:00,General,2011-04-07 15:45:12.541000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource12,2010-12-30 00:00:00.010000+00:00,task-14730,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-03-02 08:33:01.590000+00:00 +Internet,LEFT_case-5355,2011-02-24 00:00:00+00:00,General,2011-04-07 15:45:12.541000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource12,2010-12-30 00:00:00.010000+00:00,task-14828,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-02 09:00:13.975000+00:00 +Internet,LEFT_case-5372,2011-10-06 01:06:40+00:00,General,2011-10-03 16:33:42.541000+00:00,2011-10-06 01:06:40.020000+00:00,,Resource04,2010-12-30 01:06:40.010000+00:00,task-8779,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-25 08:28:31.212000+00:00 +Internet,LEFT_case-5372,2011-10-06 01:06:40+00:00,General,2011-10-03 16:33:42.541000+00:00,2011-10-06 01:06:40.020000+00:00,,Resource04,2010-12-30 01:06:40.010000+00:00,task-9401,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-25 12:25:56.074000+00:00 +Internet,LEFT_case-5372,2011-10-06 01:06:40+00:00,General,2011-10-03 16:33:42.541000+00:00,2011-10-06 01:06:40.020000+00:00,,Resource04,2010-12-30 01:06:40.010000+00:00,task-9400,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-02-07 12:19:06.668000+00:00 +Internet,LEFT_case-5377,2011-02-24 01:06:40+00:00,General,2011-02-08 14:43:40.566000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource09,2010-12-30 01:06:40.010000+00:00,task-8808,Confirmation of receipt,complete,EMPTY,admin2,2011-02-08 14:43:41.336000+00:00 +Internet,LEFT_case-5378,2011-06-23 01:06:40+00:00,General,2011-06-27 09:48:16.948000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-8840,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-25 08:50:39.572000+00:00 +Internet,LEFT_case-5378,2011-06-23 01:06:40+00:00,General,2011-06-27 09:48:16.948000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-9403,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-25 08:51:18.222000+00:00 +Internet,LEFT_case-5378,2011-06-23 01:06:40+00:00,General,2011-06-27 09:48:16.948000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-9404,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-25 12:06:45.847000+00:00 +Internet,LEFT_case-5379,2011-02-24 00:00:00+00:00,General,2011-02-23 09:52:26.725000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource04,2010-12-30 00:00:00.010000+00:00,task-8845,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-26 08:48:44.956000+00:00 +Internet,LEFT_case-5379,2011-02-24 00:00:00+00:00,General,2011-02-23 09:52:26.725000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource04,2010-12-30 00:00:00.010000+00:00,task-9584,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-27 09:03:25.903000+00:00 +Internet,LEFT_case-5379,2011-02-24 00:00:00+00:00,General,2011-02-23 09:52:26.725000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource04,2010-12-30 00:00:00.010000+00:00,task-9583,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-02-07 13:38:33.219000+00:00 +Desk,LEFT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-8885,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-01 16:35:39.977000+00:00 +Desk,LEFT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10487,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-02 09:12:07.958000+00:00 +Desk,LEFT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10554,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-02 09:21:52.637000+00:00 +Desk,LEFT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10557,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-02 09:23:40.770000+00:00 +Desk,LEFT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10560,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-02 09:24:55.446000+00:00 +Desk,LEFT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10488,T04 Determine confirmation of receipt,complete,EMPTY,Resource02,2011-02-02 10:49:15.212000+00:00 +Internet,LEFT_case-5381,2011-02-24 00:00:00+00:00,General,2011-02-15 10:33:29.582000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-8886,Confirmation of receipt,complete,Group 1,Resource18,2011-01-20 13:56:59.677000+00:00 +Internet,LEFT_case-5381,2011-02-24 00:00:00+00:00,General,2011-02-15 10:33:29.582000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-9086,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-01-20 14:00:12.609000+00:00 +Internet,LEFT_case-5381,2011-02-24 00:00:00+00:00,General,2011-02-15 10:33:29.582000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-9085,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-25 09:13:56.754000+00:00 +Desk,LEFT_case-5382,2011-04-12 01:06:40+00:00,General,2011-04-07 12:04:53.294000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource17,2010-12-21 01:06:40.010000+00:00,task-8887,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-10 11:26:36.273000+00:00 +Desk,LEFT_case-5382,2011-04-12 01:06:40+00:00,General,2011-04-07 12:04:53.294000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource17,2010-12-21 01:06:40.010000+00:00,task-11662,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-10 11:42:11.791000+00:00 +Desk,LEFT_case-5382,2011-04-12 01:06:40+00:00,General,2011-04-07 12:04:53.294000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource17,2010-12-21 01:06:40.010000+00:00,task-11676,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-10 12:00:29.578000+00:00 +Desk,LEFT_case-5383,2011-02-23 00:00:00+00:00,General,2011-03-04 15:53:21.175000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource04,2010-12-29 00:00:00.010000+00:00,task-8888,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-28 15:29:43.786000+00:00 +Desk,LEFT_case-5383,2011-02-23 00:00:00+00:00,General,2011-03-04 15:53:21.175000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource04,2010-12-29 00:00:00.010000+00:00,task-10083,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-01-28 15:30:14.758000+00:00 +Desk,LEFT_case-5383,2011-02-23 00:00:00+00:00,General,2011-03-04 15:53:21.175000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource04,2010-12-29 00:00:00.010000+00:00,task-10082,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-02-04 14:18:50.548000+00:00 +Desk,LEFT_case-5385,2011-02-24 01:06:40+00:00,Customer contact,2011-01-26 14:03:16.115000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource03,2010-12-30 01:06:40.010000+00:00,task-8890,Confirmation of receipt,complete,EMPTY,admin2,2011-01-26 14:03:17.013000+00:00 +Internet,LEFT_case-5397,2011-02-25 00:00:00+00:00,General,2011-02-08 10:30:23.514000+00:00,2011-02-25 00:00:00.010000+00:00,,Resource01,2010-12-31 00:00:00.010000+00:00,task-8933,Confirmation of receipt,complete,EMPTY,Resource01,2011-01-27 12:56:08.180000+00:00 +Internet,LEFT_case-5397,2011-02-25 00:00:00+00:00,General,2011-02-08 10:30:23.514000+00:00,2011-02-25 00:00:00.010000+00:00,,Resource01,2010-12-31 00:00:00.010000+00:00,task-9851,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-27 12:59:55.993000+00:00 +Internet,LEFT_case-5397,2011-02-25 00:00:00+00:00,General,2011-02-08 10:30:23.514000+00:00,2011-02-25 00:00:00.010000+00:00,,Resource01,2010-12-31 00:00:00.010000+00:00,task-9852,T04 Determine confirmation of receipt,complete,EMPTY,Resource07,2011-02-03 10:05:31.598000+00:00 +Internet,LEFT_case-5398,2011-03-28 01:06:40+00:00,General,2011-03-18 12:04:12.415000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource04,2010-12-31 01:06:40.010000+00:00,task-8949,Confirmation of receipt,complete,Group 1,Resource04,2011-01-19 16:28:08.208000+00:00 +Internet,LEFT_case-5398,2011-03-28 01:06:40+00:00,General,2011-03-18 12:04:12.415000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource04,2010-12-31 01:06:40.010000+00:00,task-9186,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-01-21 09:14:32.449000+00:00 +Internet,LEFT_case-5398,2011-03-28 01:06:40+00:00,General,2011-03-18 12:04:12.415000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource04,2010-12-31 01:06:40.010000+00:00,task-9020,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-21 09:14:58.812000+00:00 +Internet,LEFT_case-5401,2011-02-24 00:00:00+00:00,General,2011-02-24 10:18:42.399000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-8952,Confirmation of receipt,complete,Group 1,Resource18,2011-01-20 14:06:00.418000+00:00 +Internet,LEFT_case-5401,2011-02-24 00:00:00+00:00,General,2011-02-24 10:18:42.399000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-9091,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-01-20 14:09:32.926000+00:00 +Internet,LEFT_case-5401,2011-02-24 00:00:00+00:00,General,2011-02-24 10:18:42.399000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-9089,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-25 10:03:39.049000+00:00 +Internet,LEFT_case-5405,2011-05-30 01:06:40+00:00,General,2011-05-30 11:00:16.928000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource17,2010-12-31 01:06:40.010000+00:00,task-8960,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-27 15:26:47.162000+00:00 +Internet,LEFT_case-5405,2011-05-30 01:06:40+00:00,General,2011-05-30 11:00:16.928000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource17,2010-12-31 01:06:40.010000+00:00,task-9913,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-01-27 15:27:16.374000+00:00 +Internet,LEFT_case-5405,2011-05-30 01:06:40+00:00,General,2011-05-30 11:00:16.928000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource17,2010-12-31 01:06:40.010000+00:00,task-9912,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-28 14:30:22.451000+00:00 +Desk,LEFT_case-5406,2011-02-23 00:00:00+00:00,General,2011-02-17 16:41:02.698000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource07,2010-12-29 00:00:00.010000+00:00,task-8962,Confirmation of receipt,complete,EMPTY,Resource01,2011-01-27 14:34:17.431000+00:00 +Desk,LEFT_case-5406,2011-02-23 00:00:00+00:00,General,2011-02-17 16:41:02.698000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource07,2010-12-29 00:00:00.010000+00:00,task-9892,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-27 14:44:42.382000+00:00 +Desk,LEFT_case-5406,2011-02-23 00:00:00+00:00,General,2011-02-17 16:41:02.698000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource07,2010-12-29 00:00:00.010000+00:00,task-9893,T04 Determine confirmation of receipt,complete,EMPTY,Resource07,2011-02-03 11:10:54.978000+00:00 +Desk,LEFT_case-5418,2011-03-04 00:00:00+00:00,General,2011-02-22 09:30:55.455000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource07,2011-01-07 00:00:00.010000+00:00,task-9059,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-24 17:06:35.720000+00:00 +Desk,LEFT_case-5418,2011-03-04 00:00:00+00:00,General,2011-02-22 09:30:55.455000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource07,2011-01-07 00:00:00.010000+00:00,task-9658,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-01-26 13:05:22.117000+00:00 +Desk,LEFT_case-5418,2011-03-04 00:00:00+00:00,General,2011-02-22 09:30:55.455000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource07,2011-01-07 00:00:00.010000+00:00,task-9389,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-31 14:17:14.446000+00:00 +Desk,LEFT_case-5419,2011-03-01 00:00:00+00:00,General,2011-02-15 14:59:06.211000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource35,2011-01-04 00:00:00.010000+00:00,task-9060,Confirmation of receipt,complete,EMPTY,admin2,2011-02-15 14:59:07.340000+00:00 +Internet,LEFT_case-5457,2011-03-03 00:00:00+00:00,General,2011-04-21 00:00:00.020000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource09,2011-01-06 00:00:00.010000+00:00,task-9302,Confirmation of receipt,complete,EMPTY,Resource09,2011-02-22 08:47:36.176000+00:00 +Internet,LEFT_case-5457,2011-03-03 00:00:00+00:00,General,2011-04-21 00:00:00.020000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource09,2011-01-06 00:00:00.010000+00:00,task-13446,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-02-22 08:48:39.670000+00:00 +Internet,LEFT_case-5457,2011-03-03 00:00:00+00:00,General,2011-04-21 00:00:00.020000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource09,2011-01-06 00:00:00.010000+00:00,task-23757,T04 Determine confirmation of receipt,complete,EMPTY,admin2,2011-05-24 12:03:42.916000+00:00 +Desk,LEFT_case-5462,2011-03-07 01:06:40+00:00,General,2011-01-28 12:03:52.245000+00:00,2011-03-07 01:06:40.010000+00:00,,Resource26,2011-01-10 01:06:40.010000+00:00,task-9344,Confirmation of receipt,complete,EMPTY,Resource26,2011-01-26 08:49:48.547000+00:00 +Desk,LEFT_case-5462,2011-03-07 01:06:40+00:00,General,2011-01-28 12:03:52.245000+00:00,2011-03-07 01:06:40.010000+00:00,,Resource26,2011-01-10 01:06:40.010000+00:00,task-9586,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-01-26 08:50:30.333000+00:00 +Desk,LEFT_case-5462,2011-03-07 01:06:40+00:00,General,2011-01-28 12:03:52.245000+00:00,2011-03-07 01:06:40.010000+00:00,,Resource26,2011-01-10 01:06:40.010000+00:00,task-9768,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-27 10:34:47.547000+00:00 +Desk,LEFT_case-5462,2011-03-07 01:06:40+00:00,General,2011-01-28 12:03:52.245000+00:00,2011-03-07 01:06:40.010000+00:00,,Resource26,2011-01-10 01:06:40.010000+00:00,task-9590,T11 Create document X request unlicensed,complete,Group 1,admin2,2011-01-28 12:03:54.080000+00:00 +Internet,LEFT_case-5469,2011-03-08 01:06:40+00:00,General,2011-04-07 15:42:13.759000+00:00,2011-02-08 01:06:40.010000+00:00,,Resource22,2010-12-14 01:06:40.010000+00:00,task-9383,Confirmation of receipt,complete,EMPTY,admin2,2011-04-07 15:42:14.621000+00:00 +Desk,LEFT_case-5482,2011-02-10 00:00:00+00:00,General,2011-01-28 14:59:54.161000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource18,2010-12-16 00:00:00.010000+00:00,task-9528,Confirmation of receipt,complete,EMPTY,admin2,2011-01-28 14:59:55.010000+00:00 +Desk,LEFT_case-5483,2011-02-11 01:06:40+00:00,General,2011-01-28 15:00:49.640000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource18,2010-12-17 01:06:40.010000+00:00,task-9549,Confirmation of receipt,complete,EMPTY,admin2,2011-01-28 15:00:50.404000+00:00 +Desk,LEFT_case-5484,2011-02-16 00:00:00+00:00,General,2011-01-28 15:46:53.371000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource18,2010-12-22 00:00:00.010000+00:00,task-9550,Confirmation of receipt,complete,EMPTY,admin2,2011-01-28 15:46:54.296000+00:00 +Intern,LEFT_case-5503,2011-03-10 01:06:40+00:00,General,2011-02-04 16:05:09.655000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource11,2011-01-13 01:06:40.010000+00:00,task-9574,Confirmation of receipt,complete,EMPTY,Resource11,2011-01-26 10:05:01.299000+00:00 +Intern,LEFT_case-5503,2011-03-10 01:06:40+00:00,General,2011-02-04 16:05:09.655000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource11,2011-01-13 01:06:40.010000+00:00,task-9611,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-01-26 10:05:50.741000+00:00 +Intern,LEFT_case-5503,2011-03-10 01:06:40+00:00,General,2011-02-04 16:05:09.655000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource11,2011-01-13 01:06:40.010000+00:00,task-9668,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-01-26 13:18:42.196000+00:00 +Internet,LEFT_case-5504,2011-03-14 00:00:00+00:00,General,2011-02-04 12:16:16.911000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource11,2011-01-17 00:00:00.010000+00:00,task-9592,Confirmation of receipt,complete,Group 1,Resource11,2011-01-26 09:23:48.980000+00:00 +Internet,LEFT_case-5504,2011-03-14 00:00:00+00:00,General,2011-02-04 12:16:16.911000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource11,2011-01-17 00:00:00.010000+00:00,task-9595,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-01-26 09:24:08.406000+00:00 +Internet,LEFT_case-5504,2011-03-14 00:00:00+00:00,General,2011-02-04 12:16:16.911000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource11,2011-01-17 00:00:00.010000+00:00,task-9662,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-01-26 13:10:26.279000+00:00 +Internet,LEFT_case-5510,2011-03-08 01:06:40+00:00,Customer contact,2011-02-08 09:06:06.356000+00:00,2011-03-08 01:06:40.010000+00:00,,admin3,2011-01-11 01:06:40.010000+00:00,task-9636,Confirmation of receipt,complete,EMPTY,admin2,2011-02-08 09:06:07.304000+00:00 +Internet,LEFT_case-5512,2011-03-09 01:06:40+00:00,General,2011-03-02 15:58:38.081000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource08,2011-01-12 01:06:40.010000+00:00,task-9638,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-01 09:33:52.903000+00:00 +Internet,LEFT_case-5512,2011-03-09 01:06:40+00:00,General,2011-03-02 15:58:38.081000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource08,2011-01-12 01:06:40.010000+00:00,task-10370,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-01 09:35:29.345000+00:00 +Internet,LEFT_case-5512,2011-03-09 01:06:40+00:00,General,2011-03-02 15:58:38.081000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource08,2011-01-12 01:06:40.010000+00:00,task-10371,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-01 15:12:57.030000+00:00 +Desk,LEFT_case-5517,2011-03-10 01:06:40+00:00,General,2011-03-03 13:45:12.539000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource13,2011-01-13 01:06:40.010000+00:00,task-9679,Confirmation of receipt,complete,Group 1,Resource13,2011-01-27 11:11:33.565000+00:00 +Desk,LEFT_case-5517,2011-03-10 01:06:40+00:00,General,2011-03-03 13:45:12.539000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource13,2011-01-13 01:06:40.010000+00:00,task-9814,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-27 11:50:59.589000+00:00 +Desk,LEFT_case-5517,2011-03-10 01:06:40+00:00,General,2011-03-03 13:45:12.539000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource13,2011-01-13 01:06:40.010000+00:00,task-9788,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-02-02 08:28:50.038000+00:00 +Desk,LEFT_case-5517,2011-03-10 01:06:40+00:00,General,2011-03-03 13:45:12.539000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource13,2011-01-13 01:06:40.010000+00:00,task-10515,T16 Report reasons to hold request,complete,Group 1,Resource13,2011-02-02 08:34:01.141000+00:00 +Desk,LEFT_case-5517,2011-03-10 01:06:40+00:00,General,2011-03-03 13:45:12.539000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource13,2011-01-13 01:06:40.010000+00:00,task-10521,T19 Determine report Y to stop indication,complete,Group 3,Resource13,2011-02-02 08:35:55.993000+00:00 +Desk,LEFT_case-5519,2011-03-11 01:06:40+00:00,General,2011-02-24 08:49:04.322000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource11,2011-01-14 01:06:40.010000+00:00,task-9688,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-31 16:19:31.273000+00:00 +Desk,LEFT_case-5519,2011-03-11 01:06:40+00:00,General,2011-02-24 08:49:04.322000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource11,2011-01-14 01:06:40.010000+00:00,task-10325,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-31 16:20:24.743000+00:00 +Desk,LEFT_case-5519,2011-03-11 01:06:40+00:00,General,2011-02-24 08:49:04.322000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource11,2011-01-14 01:06:40.010000+00:00,task-10326,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-31 16:33:38.948000+00:00 +Desk,LEFT_case-5520,2011-03-09 01:06:40+00:00,General,2011-03-11 12:23:42.322000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource11,2011-01-12 01:06:40.010000+00:00,task-9691,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-31 15:24:36.539000+00:00 +Desk,LEFT_case-5520,2011-03-09 01:06:40+00:00,General,2011-03-11 12:23:42.322000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource11,2011-01-12 01:06:40.010000+00:00,task-10306,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-01-31 15:25:06.852000+00:00 +Desk,LEFT_case-5520,2011-03-09 01:06:40+00:00,General,2011-03-11 12:23:42.322000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource11,2011-01-12 01:06:40.010000+00:00,task-10305,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-31 15:25:34.905000+00:00 +Desk,LEFT_case-5521,2011-02-11 01:06:40+00:00,General,2011-03-23 14:26:35.578000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-9708,Confirmation of receipt,complete,Group 1,Resource21,2011-01-27 10:16:05.297000+00:00 +Desk,LEFT_case-5521,2011-02-11 01:06:40+00:00,General,2011-03-23 14:26:35.578000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-9745,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-02-07 10:36:21.148000+00:00 +Desk,LEFT_case-5521,2011-02-11 01:06:40+00:00,General,2011-03-23 14:26:35.578000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-11193,T04 Determine confirmation of receipt,complete,EMPTY,Resource09,2011-02-09 09:07:00.990000+00:00 +Internet,LEFT_case-5529,2011-03-11 01:06:40+00:00,General,2011-03-03 15:36:44.177000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource02,2011-01-14 01:06:40.010000+00:00,task-9716,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-07 11:11:07.485000+00:00 +Internet,LEFT_case-5529,2011-03-11 01:06:40+00:00,General,2011-03-03 15:36:44.177000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource02,2011-01-14 01:06:40.010000+00:00,task-11203,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-02-07 11:20:12.503000+00:00 +Internet,LEFT_case-5529,2011-03-11 01:06:40+00:00,General,2011-03-03 15:36:44.177000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource02,2011-01-14 01:06:40.010000+00:00,task-11202,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-07 11:21:45.194000+00:00 +Internet,LEFT_case-5530,2011-03-12 01:06:40+00:00,General,2011-02-22 14:41:05.508000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource17,2011-01-15 01:06:40.010000+00:00,task-9721,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-03 11:07:02.147000+00:00 +Internet,LEFT_case-5530,2011-03-12 01:06:40+00:00,General,2011-02-22 14:41:05.508000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource17,2011-01-15 01:06:40.010000+00:00,task-10800,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-03 11:31:02.259000+00:00 +Internet,LEFT_case-5530,2011-03-12 01:06:40+00:00,General,2011-02-22 14:41:05.508000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource17,2011-01-15 01:06:40.010000+00:00,task-10790,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-07 08:58:22.287000+00:00 +Internet,LEFT_case-5531,2011-03-14 00:00:00+00:00,General,2011-02-18 12:48:02.415000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource02,2011-01-17 00:00:00.010000+00:00,task-9723,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-18 12:31:08.898000+00:00 +Internet,LEFT_case-5531,2011-03-14 00:00:00+00:00,General,2011-02-18 12:48:02.415000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource02,2011-01-17 00:00:00.010000+00:00,task-13036,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-02-18 12:31:39.196000+00:00 +Internet,LEFT_case-5531,2011-03-14 00:00:00+00:00,General,2011-02-18 12:48:02.415000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource02,2011-01-17 00:00:00.010000+00:00,task-13034,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-18 12:32:05.080000+00:00 +Internet,LEFT_case-5531,2011-03-14 00:00:00+00:00,General,2011-02-18 12:48:02.415000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource02,2011-01-17 00:00:00.010000+00:00,task-13043,T11 Create document X request unlicensed,complete,Group 1,Resource02,2011-02-18 12:46:14.108000+00:00 +Internet,LEFT_case-5531,2011-03-14 00:00:00+00:00,General,2011-02-18 12:48:02.415000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource02,2011-01-17 00:00:00.010000+00:00,task-13059,T14 Determine document X request unlicensed,complete,Group 3,Resource02,2011-02-18 12:46:41.984000+00:00 +Desk,LEFT_case-5532,2011-03-08 00:00:00+00:00,General,2011-02-24 08:38:09.385000+00:00,2011-03-08 00:00:00.010000+00:00,,Resource01,2011-01-11 00:00:00.010000+00:00,task-9730,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-31 16:36:17.331000+00:00 +Desk,LEFT_case-5532,2011-03-08 00:00:00+00:00,General,2011-02-24 08:38:09.385000+00:00,2011-03-08 00:00:00.010000+00:00,,Resource01,2011-01-11 00:00:00.010000+00:00,task-10359,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-01 08:02:35.437000+00:00 +Desk,LEFT_case-5532,2011-03-08 00:00:00+00:00,General,2011-02-24 08:38:09.385000+00:00,2011-03-08 00:00:00.010000+00:00,,Resource01,2011-01-11 00:00:00.010000+00:00,task-10336,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-02 10:04:09.738000+00:00 +Internet,LEFT_case-5533,2011-03-11 00:00:00+00:00,General,2011-02-15 11:25:09.252000+00:00,2011-03-11 00:00:00.010000+00:00,,Resource17,2011-01-14 00:00:00.010000+00:00,task-9731,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-14 08:39:23.914000+00:00 +Internet,LEFT_case-5533,2011-03-11 00:00:00+00:00,General,2011-02-15 11:25:09.252000+00:00,2011-03-11 00:00:00.010000+00:00,,Resource17,2011-01-14 00:00:00.010000+00:00,task-12104,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-14 08:40:18.353000+00:00 +Internet,LEFT_case-5533,2011-03-11 00:00:00+00:00,General,2011-02-15 11:25:09.252000+00:00,2011-03-11 00:00:00.010000+00:00,,Resource17,2011-01-14 00:00:00.010000+00:00,task-12107,T11 Create document X request unlicensed,complete,Group 1,Resource17,2011-02-14 08:57:35.249000+00:00 +Internet,LEFT_case-5533,2011-03-11 00:00:00+00:00,General,2011-02-15 11:25:09.252000+00:00,2011-03-11 00:00:00.010000+00:00,,Resource17,2011-01-14 00:00:00.010000+00:00,task-12105,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-14 12:01:30.911000+00:00 +Internet,LEFT_case-5533,2011-03-11 00:00:00+00:00,General,2011-02-15 11:25:09.252000+00:00,2011-03-11 00:00:00.010000+00:00,,Resource17,2011-01-14 00:00:00.010000+00:00,task-12119,T14 Determine document X request unlicensed,complete,Group 3,Resource10,2011-02-14 12:03:23.014000+00:00 +Internet,LEFT_case-5534,2011-04-07 01:06:40+00:00,General,2011-04-05 11:44:31.845000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-9732,Confirmation of receipt,complete,Group 1,Resource15,2011-01-28 15:01:55.547000+00:00 +Internet,LEFT_case-5534,2011-04-07 01:06:40+00:00,General,2011-04-05 11:44:31.845000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-10069,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-01-28 15:02:58.272000+00:00 +Internet,LEFT_case-5534,2011-04-07 01:06:40+00:00,General,2011-04-05 11:44:31.845000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-10068,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-02 10:00:16.614000+00:00 +Internet,LEFT_case-5535,2011-03-14 01:06:40+00:00,General,2011-03-11 12:25:27.553000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource11,2011-01-17 01:06:40.010000+00:00,task-9733,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-08 13:49:59.784000+00:00 +Internet,LEFT_case-5535,2011-03-14 01:06:40+00:00,General,2011-03-11 12:25:27.553000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource11,2011-01-17 01:06:40.010000+00:00,task-11394,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-08 13:50:36.598000+00:00 +Internet,LEFT_case-5535,2011-03-14 01:06:40+00:00,General,2011-03-11 12:25:27.553000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource11,2011-01-17 01:06:40.010000+00:00,task-11412,T04 Determine confirmation of receipt,complete,EMPTY,Resource07,2011-02-10 09:45:41.590000+00:00 +Internet,LEFT_case-5536,2011-03-14 01:06:40+00:00,General,2011-03-18 10:16:28.139000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource08,2011-01-17 01:06:40.010000+00:00,task-9738,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-10 13:13:09.414000+00:00 +Internet,LEFT_case-5536,2011-03-14 01:06:40+00:00,General,2011-03-18 10:16:28.139000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource08,2011-01-17 01:06:40.010000+00:00,task-11751,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-10 13:14:55.089000+00:00 +Internet,LEFT_case-5536,2011-03-14 01:06:40+00:00,General,2011-03-18 10:16:28.139000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource08,2011-01-17 01:06:40.010000+00:00,task-11752,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-02-11 08:49:04.649000+00:00 +Internet,LEFT_case-5540,2011-03-15 00:00:00+00:00,General,2011-02-24 08:59:07.092000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-9778,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-01 16:42:32.524000+00:00 +Internet,LEFT_case-5540,2011-03-15 00:00:00+00:00,General,2011-02-24 08:59:07.092000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-10491,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-01 16:43:00.397000+00:00 +Internet,LEFT_case-5540,2011-03-15 00:00:00+00:00,General,2011-02-24 08:59:07.092000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-10490,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-02 08:58:45.206000+00:00 +Internet,LEFT_case-5541,2011-03-15 00:00:00+00:00,General,2011-02-15 14:33:41.919000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource08,2011-01-18 00:00:00.010000+00:00,task-9785,Confirmation of receipt,complete,EMPTY,admin2,2011-02-15 14:33:43.076000+00:00 +Desk,LEFT_case-5542,2011-03-10 00:00:00+00:00,General,2011-02-14 15:18:04.862000+00:00,2011-03-10 00:00:00.010000+00:00,,Resource06,2011-01-13 00:00:00.010000+00:00,task-9786,Confirmation of receipt,complete,EMPTY,admin2,2011-02-14 15:18:06.124000+00:00 +Internet,LEFT_case-5543,2011-03-15 00:00:00+00:00,General,2011-03-01 09:28:52.160000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-9791,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-01 16:32:27.473000+00:00 +Internet,LEFT_case-5543,2011-03-15 00:00:00+00:00,General,2011-03-01 09:28:52.160000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-10484,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-01 16:33:13.930000+00:00 +Internet,LEFT_case-5543,2011-03-15 00:00:00+00:00,General,2011-03-01 09:28:52.160000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-10483,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-02 09:46:48.693000+00:00 +Internet,LEFT_case-5545,2011-03-16 00:00:00+00:00,General,2011-04-08 10:31:15.081000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource14,2011-01-19 00:00:00.010000+00:00,task-9806,Confirmation of receipt,complete,EMPTY,Resource14,2011-03-21 12:17:58.134000+00:00 +Internet,LEFT_case-5545,2011-03-16 00:00:00+00:00,General,2011-04-08 10:31:15.081000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource14,2011-01-19 00:00:00.010000+00:00,task-16965,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-03-21 12:18:17.101000+00:00 +Internet,LEFT_case-5545,2011-03-16 00:00:00+00:00,General,2011-04-08 10:31:15.081000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource14,2011-01-19 00:00:00.010000+00:00,task-16970,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-03-21 12:19:25.676000+00:00 +Internet,LEFT_case-5546,2011-03-16 00:00:00+00:00,General,2011-02-24 12:22:00.602000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource11,2011-01-19 00:00:00.010000+00:00,task-9807,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-02 16:03:33.805000+00:00 +Internet,LEFT_case-5546,2011-03-16 00:00:00+00:00,General,2011-02-24 12:22:00.602000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource11,2011-01-19 00:00:00.010000+00:00,task-10701,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-02 16:04:33.817000+00:00 +Internet,LEFT_case-5546,2011-03-16 00:00:00+00:00,General,2011-02-24 12:22:00.602000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource11,2011-01-19 00:00:00.010000+00:00,task-10702,T04 Determine confirmation of receipt,complete,EMPTY,Resource07,2011-02-03 08:42:24.750000+00:00 +Internet,LEFT_case-5547,2011-03-14 00:00:00+00:00,General,2011-03-01 14:42:05.676000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource25,2011-01-17 00:00:00.010000+00:00,task-9811,Confirmation of receipt,complete,EMPTY,Resource25,2011-02-17 08:50:26.915000+00:00 +Internet,LEFT_case-5547,2011-03-14 00:00:00+00:00,General,2011-03-01 14:42:05.676000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource25,2011-01-17 00:00:00.010000+00:00,task-12687,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-02-17 08:55:28.954000+00:00 +Internet,LEFT_case-5547,2011-03-14 00:00:00+00:00,General,2011-03-01 14:42:05.676000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource25,2011-01-17 00:00:00.010000+00:00,task-12688,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-21 09:42:46.001000+00:00 +Internet,LEFT_case-5548,2011-03-16 00:00:00+00:00,General,2011-02-22 16:53:55.093000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource01,2011-01-19 00:00:00.010000+00:00,task-9812,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-01 16:20:43.760000+00:00 +Internet,LEFT_case-5548,2011-03-16 00:00:00+00:00,General,2011-02-22 16:53:55.093000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource01,2011-01-19 00:00:00.010000+00:00,task-10477,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-01 16:21:17.706000+00:00 +Internet,LEFT_case-5548,2011-03-16 00:00:00+00:00,General,2011-02-22 16:53:55.093000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource01,2011-01-19 00:00:00.010000+00:00,task-10476,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-01 16:21:43.665000+00:00 +Internet,LEFT_case-5549,2011-03-15 00:00:00+00:00,General,2011-03-15 10:08:48.138000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource06,2011-01-18 00:00:00.010000+00:00,task-9824,Confirmation of receipt,complete,EMPTY,Resource06,2011-02-16 11:30:59.689000+00:00 +Internet,LEFT_case-5549,2011-03-15 00:00:00+00:00,General,2011-03-15 10:08:48.138000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource06,2011-01-18 00:00:00.010000+00:00,task-12516,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-02-16 11:31:39.228000+00:00 +Internet,LEFT_case-5549,2011-03-15 00:00:00+00:00,General,2011-03-15 10:08:48.138000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource06,2011-01-18 00:00:00.010000+00:00,task-12517,T04 Determine confirmation of receipt,complete,EMPTY,Resource06,2011-02-16 13:46:42.897000+00:00 +Internet,LEFT_case-5552,2011-05-26 01:06:40+00:00,General,2011-05-02 11:21:37.498000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource15,2011-01-19 01:06:40.010000+00:00,task-9863,Confirmation of receipt,complete,Group 1,Resource15,2011-01-28 09:37:18.080000+00:00 +Internet,LEFT_case-5552,2011-05-26 01:06:40+00:00,General,2011-05-02 11:21:37.498000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource15,2011-01-19 01:06:40.010000+00:00,task-9952,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-01-28 09:37:59.290000+00:00 +Internet,LEFT_case-5552,2011-05-26 01:06:40+00:00,General,2011-05-02 11:21:37.498000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource15,2011-01-19 01:06:40.010000+00:00,task-9951,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-28 09:43:57.474000+00:00 +Internet,LEFT_case-5554,2011-05-08 01:06:40+00:00,General,2011-05-04 16:07:36.807000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-01-14 01:06:40.010000+00:00,task-9872,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-01 16:06:53.322000+00:00 +Internet,LEFT_case-5554,2011-05-08 01:06:40+00:00,General,2011-05-04 16:07:36.807000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-01-14 01:06:40.010000+00:00,task-10459,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-01 16:07:48.511000+00:00 +Internet,LEFT_case-5554,2011-05-08 01:06:40+00:00,General,2011-05-04 16:07:36.807000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-01-14 01:06:40.010000+00:00,task-10460,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-02 13:32:53.512000+00:00 +Internet,LEFT_case-5556,2011-03-20 00:00:00+00:00,General,2011-02-28 11:17:49.041000+00:00,2011-03-20 00:00:00.010000+00:00,,Resource01,2011-01-23 00:00:00.010000+00:00,task-9886,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-31 17:01:32.529000+00:00 +Internet,LEFT_case-5556,2011-03-20 00:00:00+00:00,General,2011-02-28 11:17:49.041000+00:00,2011-03-20 00:00:00.010000+00:00,,Resource01,2011-01-23 00:00:00.010000+00:00,task-10346,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-01-31 17:02:07.423000+00:00 +Internet,LEFT_case-5556,2011-03-20 00:00:00+00:00,General,2011-02-28 11:17:49.041000+00:00,2011-03-20 00:00:00.010000+00:00,,Resource01,2011-01-23 00:00:00.010000+00:00,task-10345,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-04 09:35:23.398000+00:00 +Internet,LEFT_case-5557,2011-03-21 01:06:40+00:00,General,2011-05-16 16:12:18.768000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource09,2011-01-24 01:06:40.010000+00:00,task-9889,Confirmation of receipt,complete,EMPTY,Resource09,2011-03-07 16:14:30.553000+00:00 +Internet,LEFT_case-5557,2011-03-21 01:06:40+00:00,General,2011-05-16 16:12:18.768000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource09,2011-01-24 01:06:40.010000+00:00,task-15392,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-03-07 16:15:16.704000+00:00 +Internet,LEFT_case-5557,2011-03-21 01:06:40+00:00,General,2011-05-16 16:12:18.768000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource09,2011-01-24 01:06:40.010000+00:00,task-15391,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-08 08:32:34.688000+00:00 +Internet,LEFT_case-5558,2011-03-01 00:00:00+00:00,General,2011-02-25 16:18:49.424000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource05,2011-01-04 00:00:00.010000+00:00,task-9890,Confirmation of receipt,complete,EMPTY,Resource05,2011-02-03 10:59:55.704000+00:00 +Internet,LEFT_case-5558,2011-03-01 00:00:00+00:00,General,2011-02-25 16:18:49.424000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource05,2011-01-04 00:00:00.010000+00:00,task-10784,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-02-03 11:04:02.100000+00:00 +Internet,LEFT_case-5558,2011-03-01 00:00:00+00:00,General,2011-02-25 16:18:49.424000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource05,2011-01-04 00:00:00.010000+00:00,task-10783,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-03 11:08:44.913000+00:00 +Internet,LEFT_case-5559,2011-04-18 01:06:40+00:00,General,2011-03-22 14:50:27.887000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource06,2011-01-24 01:06:40.010000+00:00,task-9894,Confirmation of receipt,complete,EMPTY,Resource06,2011-02-16 14:10:34.432000+00:00 +Internet,LEFT_case-5559,2011-04-18 01:06:40+00:00,General,2011-03-22 14:50:27.887000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource06,2011-01-24 01:06:40.010000+00:00,task-12569,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-02-16 14:10:56.225000+00:00 +Internet,LEFT_case-5559,2011-04-18 01:06:40+00:00,General,2011-03-22 14:50:27.887000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource06,2011-01-24 01:06:40.010000+00:00,task-13695,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-28 11:51:04.126000+00:00 +Internet,LEFT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-9901,Confirmation of receipt,complete,EMPTY,Resource05,2011-02-01 16:17:34.957000+00:00 +Internet,LEFT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-10467,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-01 16:18:37.840000+00:00 +Internet,LEFT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-10473,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-02-01 16:21:14.816000+00:00 +Internet,LEFT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-10470,T08 Draft and send request for advice,complete,Group 1,Resource05,2011-02-02 08:46:45.966000+00:00 +Internet,LEFT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-10546,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-02 09:13:51.772000+00:00 +Internet,LEFT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-10549,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-02 09:17:39.040000+00:00 +Internet,LEFT_case-5561,2011-03-23 00:00:00+00:00,General,2011-02-28 11:41:07.295000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource01,2011-01-26 00:00:00.010000+00:00,task-9907,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-09 09:16:53.116000+00:00 +Internet,LEFT_case-5561,2011-03-23 00:00:00+00:00,General,2011-02-28 11:41:07.295000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource01,2011-01-26 00:00:00.010000+00:00,task-11445,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-09 09:17:43.728000+00:00 +Internet,LEFT_case-5561,2011-03-23 00:00:00+00:00,General,2011-02-28 11:41:07.295000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource01,2011-01-26 00:00:00.010000+00:00,task-11446,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-10 11:47:31.055000+00:00 +Internet,LEFT_case-5566,2011-03-21 01:06:40+00:00,General,2011-03-22 14:33:55.175000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource08,2011-01-24 01:06:40.010000+00:00,task-9929,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-08 14:41:45.686000+00:00 +Internet,LEFT_case-5566,2011-03-21 01:06:40+00:00,General,2011-03-22 14:33:55.175000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource08,2011-01-24 01:06:40.010000+00:00,task-11411,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-09 07:59:25.720000+00:00 +Internet,LEFT_case-5566,2011-03-21 01:06:40+00:00,General,2011-03-22 14:33:55.175000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource08,2011-01-24 01:06:40.010000+00:00,task-11410,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-11 14:32:16.404000+00:00 +Internet,LEFT_case-5573,2011-03-22 00:00:00+00:00,General,2011-03-22 11:26:39.827000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource02,2011-01-25 00:00:00.010000+00:00,task-9940,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-21 10:54:35.132000+00:00 +Internet,LEFT_case-5573,2011-03-22 00:00:00+00:00,General,2011-03-22 11:26:39.827000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource02,2011-01-25 00:00:00.010000+00:00,task-13291,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-21 10:57:34.609000+00:00 +Internet,LEFT_case-5573,2011-03-22 00:00:00+00:00,General,2011-03-22 11:26:39.827000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource02,2011-01-25 00:00:00.010000+00:00,task-13307,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-21 11:19:32.766000+00:00 +Internet,LEFT_case-5573,2011-03-22 00:00:00+00:00,General,2011-03-22 11:26:39.827000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource02,2011-01-25 00:00:00.010000+00:00,task-13293,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-21 15:17:49.393000+00:00 +Internet,LEFT_case-5574,2011-03-23 01:06:40+00:00,General,2011-03-10 00:00:00.010000+00:00,2011-03-23 01:06:40.010000+00:00,,Resource11,2011-01-26 01:06:40.010000+00:00,task-9946,Confirmation of receipt,complete,EMPTY,admin2,2011-03-17 13:01:49.516000+00:00 +Desk,LEFT_case-5576,2011-03-14 01:06:40+00:00,General,2011-03-02 11:00:27.952000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource13,2011-01-17 01:06:40.010000+00:00,task-9964,Confirmation of receipt,complete,EMPTY,Resource13,2011-02-02 10:37:30.381000+00:00 +Desk,LEFT_case-5576,2011-03-14 01:06:40+00:00,General,2011-03-02 11:00:27.952000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource13,2011-01-17 01:06:40.010000+00:00,task-10623,T04 Determine confirmation of receipt,complete,Group 3,Resource13,2011-02-02 10:40:28.295000+00:00 +Desk,LEFT_case-5576,2011-03-14 01:06:40+00:00,General,2011-03-02 11:00:27.952000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource13,2011-01-17 01:06:40.010000+00:00,task-10621,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-02-02 10:43:00.641000+00:00 +Internet,LEFT_case-5577,2011-03-24 00:00:00+00:00,General,2011-05-19 14:23:29.363000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource02,2011-01-27 00:00:00.010000+00:00,task-9976,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-21 15:11:58.599000+00:00 +Internet,LEFT_case-5577,2011-03-24 00:00:00+00:00,General,2011-05-19 14:23:29.363000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource02,2011-01-27 00:00:00.010000+00:00,task-13414,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-21 15:41:41.395000+00:00 +Internet,LEFT_case-5577,2011-03-24 00:00:00+00:00,General,2011-05-19 14:23:29.363000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource02,2011-01-27 00:00:00.010000+00:00,task-13415,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-23 10:30:47.062000+00:00 +Internet,LEFT_case-5578,2011-03-24 01:06:40+00:00,General,2011-04-05 09:58:13.961000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-9983,Confirmation of receipt,complete,EMPTY,admin2,2011-04-05 09:58:14.844000+00:00 +Desk,LEFT_case-5580,2011-03-23 00:00:00+00:00,General,2011-03-10 15:56:19.858000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource11,2011-01-26 00:00:00.010000+00:00,task-9986,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-09 15:52:24.439000+00:00 +Desk,LEFT_case-5580,2011-03-23 00:00:00+00:00,General,2011-03-10 15:56:19.858000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource11,2011-01-26 00:00:00.010000+00:00,task-11539,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-10 11:52:23.353000+00:00 +Desk,LEFT_case-5580,2011-03-23 00:00:00+00:00,General,2011-03-10 15:56:19.858000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource11,2011-01-26 00:00:00.010000+00:00,task-11538,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-10 14:40:31.733000+00:00 +Internet,LEFT_case-5582,2011-06-07 01:06:40+00:00,General,2011-06-07 09:29:10.521000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-01-25 01:06:40.010000+00:00,task-9988,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-14 12:01:18.318000+00:00 +Internet,LEFT_case-5582,2011-06-07 01:06:40+00:00,General,2011-06-07 09:29:10.521000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-01-25 01:06:40.010000+00:00,task-12159,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-14 12:02:29.678000+00:00 +Internet,LEFT_case-5582,2011-06-07 01:06:40+00:00,General,2011-06-07 09:29:10.521000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-01-25 01:06:40.010000+00:00,task-12161,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-14 12:10:06.831000+00:00 +Desk,LEFT_case-5583,2011-03-07 01:06:40+00:00,General,2011-02-15 15:12:38.123000+00:00,2011-03-07 01:06:40.010000+00:00,,Resource35,2011-01-10 01:06:40.010000+00:00,task-9993,Confirmation of receipt,complete,EMPTY,admin2,2011-02-15 15:12:39.185000+00:00 +Internet,LEFT_case-5585,2011-03-24 01:06:40+00:00,General,2011-09-22 14:45:23.851000+00:00,2011-03-24 01:06:40.010000+00:00,Group 2,Resource07,2011-01-27 01:06:40.010000+00:00,task-10012,Confirmation of receipt,complete,EMPTY,Resource26,2011-06-16 20:22:17.020000+00:00 +Internet,LEFT_case-5585,2011-03-24 01:06:40+00:00,General,2011-09-22 14:45:23.851000+00:00,2011-03-24 01:06:40.010000+00:00,Group 2,Resource07,2011-01-27 01:06:40.010000+00:00,task-28853,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-16 20:22:44.111000+00:00 +Internet,LEFT_case-5585,2011-03-24 01:06:40+00:00,General,2011-09-22 14:45:23.851000+00:00,2011-03-24 01:06:40.010000+00:00,Group 2,Resource07,2011-01-27 01:06:40.010000+00:00,task-28855,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource40,2011-08-08 16:02:07.078000+00:00 +Internet,LEFT_case-5585,2011-03-24 01:06:40+00:00,General,2011-09-22 14:45:23.851000+00:00,2011-03-24 01:06:40.010000+00:00,Group 2,Resource07,2011-01-27 01:06:40.010000+00:00,task-35756,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-09-15 12:10:48.214000+00:00 +Internet,LEFT_case-5585,2011-03-24 01:06:40+00:00,General,2011-09-22 14:45:23.851000+00:00,2011-03-24 01:06:40.010000+00:00,Group 2,Resource07,2011-01-27 01:06:40.010000+00:00,task-39062,T07-2 Draft intern advice aspect 2,complete,Group 15,admin2,2011-09-22 14:45:26.304000+00:00 +Desk,LEFT_case-5594,2011-03-24 01:06:40+00:00,General,2011-03-15 14:40:56.024000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource08,2011-01-27 01:06:40.010000+00:00,task-10058,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-08 15:30:55.087000+00:00 +Desk,LEFT_case-5594,2011-03-24 01:06:40+00:00,General,2011-03-15 14:40:56.024000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource08,2011-01-27 01:06:40.010000+00:00,task-11439,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-09 07:57:03.458000+00:00 +Desk,LEFT_case-5594,2011-03-24 01:06:40+00:00,General,2011-03-15 14:40:56.024000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource08,2011-01-27 01:06:40.010000+00:00,task-11422,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-14 14:32:29.749000+00:00 +Internet,LEFT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-10059,Confirmation of receipt,complete,EMPTY,Resource09,2011-03-08 09:54:58.423000+00:00 +Internet,LEFT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-15447,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-08 09:56:18.083000+00:00 +Internet,LEFT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-15449,T08 Draft and send request for advice,complete,Group 1,Resource09,2011-03-08 09:57:10.588000+00:00 +Internet,LEFT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-15451,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource09,2011-03-08 10:03:43.830000+00:00 +Internet,LEFT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-15454,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-08 10:04:17.627000+00:00 +Internet,LEFT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-17533,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-04-18 14:29:18.014000+00:00 +Internet,LEFT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-20834,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-04-18 14:29:49.734000+00:00 +Desk,LEFT_case-5597,2011-03-24 00:00:00+00:00,General,2011-02-28 11:47:00.573000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource11,2011-01-27 00:00:00.010000+00:00,task-10085,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-15 15:09:27.025000+00:00 +Desk,LEFT_case-5597,2011-03-24 00:00:00+00:00,General,2011-02-28 11:47:00.573000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource11,2011-01-27 00:00:00.010000+00:00,task-12357,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-15 15:10:40.691000+00:00 +Desk,LEFT_case-5597,2011-03-24 00:00:00+00:00,General,2011-02-28 11:47:00.573000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource11,2011-01-27 00:00:00.010000+00:00,task-12356,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-15 15:11:24.982000+00:00 +Desk,LEFT_case-5597,2011-03-24 00:00:00+00:00,General,2011-02-28 11:47:00.573000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource11,2011-01-27 00:00:00.010000+00:00,task-12360,T11 Create document X request unlicensed,complete,Group 1,Resource07,2011-02-24 15:53:25.233000+00:00 +Desk,LEFT_case-5597,2011-03-24 00:00:00+00:00,General,2011-02-28 11:47:00.573000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource11,2011-01-27 00:00:00.010000+00:00,task-14193,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-02-28 09:02:43.447000+00:00 +Internet,LEFT_case-5599,2011-03-24 01:06:40+00:00,General,2011-02-28 11:54:34.507000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource01,2011-01-27 01:06:40.010000+00:00,task-10087,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-10 15:19:26.313000+00:00 +Internet,LEFT_case-5599,2011-03-24 01:06:40+00:00,General,2011-02-28 11:54:34.507000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource01,2011-01-27 01:06:40.010000+00:00,task-11801,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-10 15:20:13.637000+00:00 +Internet,LEFT_case-5599,2011-03-24 01:06:40+00:00,General,2011-02-28 11:54:34.507000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource01,2011-01-27 01:06:40.010000+00:00,task-11800,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-11 11:29:14.514000+00:00 +Internet,LEFT_case-5646,2011-03-25 01:06:40+00:00,General,2011-02-28 12:13:30.183000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource07,2011-01-28 01:06:40.010000+00:00,task-10147,Confirmation of receipt,complete,EMPTY,Resource43,2011-02-01 08:57:01.159000+00:00 +Internet,LEFT_case-5646,2011-03-25 01:06:40+00:00,General,2011-02-28 12:13:30.183000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource07,2011-01-28 01:06:40.010000+00:00,task-10365,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-01 08:58:33.106000+00:00 +Internet,LEFT_case-5646,2011-03-25 01:06:40+00:00,General,2011-02-28 12:13:30.183000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource07,2011-01-28 01:06:40.010000+00:00,task-10364,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-01 09:12:36.288000+00:00 +Internet,LEFT_case-5653,2011-06-01 01:06:40+00:00,General,2011-05-03 11:52:25.459000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource04,2011-01-29 01:06:40.010000+00:00,task-10162,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-24 16:19:32.977000+00:00 +Internet,LEFT_case-5653,2011-06-01 01:06:40+00:00,General,2011-05-03 11:52:25.459000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource04,2011-01-29 01:06:40.010000+00:00,task-17763,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-24 16:20:37.383000+00:00 +Internet,LEFT_case-5653,2011-06-01 01:06:40+00:00,General,2011-05-03 11:52:25.459000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource04,2011-01-29 01:06:40.010000+00:00,task-17764,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-03-30 09:29:54.217000+00:00 +Internet,LEFT_case-5657,2011-03-26 00:00:00+00:00,General,2011-03-25 10:24:50.603000+00:00,2011-03-26 00:00:00.010000+00:00,,Resource17,2011-01-29 00:00:00.010000+00:00,task-10169,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-18 10:34:31.311000+00:00 +Internet,LEFT_case-5657,2011-03-26 00:00:00+00:00,General,2011-03-25 10:24:50.603000+00:00,2011-03-26 00:00:00.010000+00:00,,Resource17,2011-01-29 00:00:00.010000+00:00,task-12981,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-02-18 11:45:57.223000+00:00 +Internet,LEFT_case-5657,2011-03-26 00:00:00+00:00,General,2011-03-25 10:24:50.603000+00:00,2011-03-26 00:00:00.010000+00:00,,Resource17,2011-01-29 00:00:00.010000+00:00,task-12982,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-18 12:28:39.760000+00:00 +Internet,LEFT_case-5660,2011-03-26 01:06:40+00:00,General,2011-03-29 11:36:18.189000+00:00,2011-03-26 01:06:40.010000+00:00,,Resource15,2011-01-29 01:06:40.010000+00:00,task-10177,Confirmation of receipt,complete,EMPTY,Resource15,2011-02-02 09:49:30.098000+00:00 +Internet,LEFT_case-5660,2011-03-26 01:06:40+00:00,General,2011-03-29 11:36:18.189000+00:00,2011-03-26 01:06:40.010000+00:00,,Resource15,2011-01-29 01:06:40.010000+00:00,task-10584,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-02 09:49:49.264000+00:00 +Internet,LEFT_case-5660,2011-03-26 01:06:40+00:00,General,2011-03-29 11:36:18.189000+00:00,2011-03-26 01:06:40.010000+00:00,,Resource15,2011-01-29 01:06:40.010000+00:00,task-10675,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-02 13:39:09.844000+00:00 +Internet,LEFT_case-5683,2011-03-28 01:06:40+00:00,General,2011-03-03 12:19:24.121000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource07,2011-01-31 01:06:40.010000+00:00,task-10429,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-08 10:55:26.620000+00:00 +Internet,LEFT_case-5683,2011-03-28 01:06:40+00:00,General,2011-03-03 12:19:24.121000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource07,2011-01-31 01:06:40.010000+00:00,task-11358,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-08 10:57:16.401000+00:00 +Internet,LEFT_case-5683,2011-03-28 01:06:40+00:00,General,2011-03-03 12:19:24.121000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource07,2011-01-31 01:06:40.010000+00:00,task-11359,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-10 11:48:57.639000+00:00 +Internet,LEFT_case-5684,2011-03-28 00:00:00+00:00,General,2011-03-08 16:39:44.521000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource07,2011-01-31 00:00:00.010000+00:00,task-10430,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-04 16:55:51.677000+00:00 +Internet,LEFT_case-5684,2011-03-28 00:00:00+00:00,General,2011-03-08 16:39:44.521000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource07,2011-01-31 00:00:00.010000+00:00,task-11055,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-04 16:57:16.601000+00:00 +Internet,LEFT_case-5684,2011-03-28 00:00:00+00:00,General,2011-03-08 16:39:44.521000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource07,2011-01-31 00:00:00.010000+00:00,task-11054,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-04 16:57:46.898000+00:00 +Internet,LEFT_case-5686,2011-03-29 00:00:00+00:00,General,2011-02-28 12:21:03.615000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-10432,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-11 09:30:00.863000+00:00 +Internet,LEFT_case-5686,2011-03-29 00:00:00+00:00,General,2011-02-28 12:21:03.615000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11863,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-11 09:31:55.567000+00:00 +Internet,LEFT_case-5686,2011-03-29 00:00:00+00:00,General,2011-02-28 12:21:03.615000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11862,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-11 09:33:28.394000+00:00 +Desk,LEFT_case-5704,2011-03-22 00:00:00+00:00,General,2011-03-15 15:43:05.532000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-02-25 00:00:00.010000+00:00,task-10510,Confirmation of receipt,complete,EMPTY,Resource05,2011-02-14 12:59:07.997000+00:00 +Desk,LEFT_case-5704,2011-03-22 00:00:00+00:00,General,2011-03-15 15:43:05.532000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-02-25 00:00:00.010000+00:00,task-12190,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-14 13:00:33.090000+00:00 +Desk,LEFT_case-5704,2011-03-22 00:00:00+00:00,General,2011-03-15 15:43:05.532000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-02-25 00:00:00.010000+00:00,task-12191,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-15 16:35:19.685000+00:00 +Desk,LEFT_case-5706,2011-03-23 00:00:00+00:00,General,2011-02-17 16:46:23.611000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource07,2011-01-26 00:00:00.010000+00:00,task-10512,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-04 15:19:59.421000+00:00 +Desk,LEFT_case-5706,2011-03-23 00:00:00+00:00,General,2011-02-17 16:46:23.611000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource07,2011-01-26 00:00:00.010000+00:00,task-11031,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-04 15:20:59.258000+00:00 +Desk,LEFT_case-5706,2011-03-23 00:00:00+00:00,General,2011-02-17 16:46:23.611000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource07,2011-01-26 00:00:00.010000+00:00,task-11029,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-04 15:21:27.504000+00:00 +Internet,LEFT_case-5707,2011-03-29 00:00:00+00:00,General,2011-03-03 11:36:28.283000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource11,2011-02-01 00:00:00.010000+00:00,task-10517,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 15:29:12.869000+00:00 +Internet,LEFT_case-5707,2011-03-29 00:00:00+00:00,General,2011-03-03 11:36:28.283000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource11,2011-02-01 00:00:00.010000+00:00,task-12891,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 15:30:40.633000+00:00 +Internet,LEFT_case-5707,2011-03-29 00:00:00+00:00,General,2011-03-03 11:36:28.283000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource11,2011-02-01 00:00:00.010000+00:00,task-12890,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 15:31:07.581000+00:00 +Internet,LEFT_case-5710,2011-03-29 00:00:00+00:00,General,2011-02-22 09:37:38.363000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-10547,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-09 12:07:29.300000+00:00 +Internet,LEFT_case-5710,2011-03-29 00:00:00+00:00,General,2011-02-22 09:37:38.363000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11494,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-09 13:16:38.491000+00:00 +Internet,LEFT_case-5710,2011-03-29 00:00:00+00:00,General,2011-02-22 09:37:38.363000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11495,T04 Determine confirmation of receipt,complete,EMPTY,Resource01,2011-02-10 09:58:36.256000+00:00 +Internet,LEFT_case-5712,2011-03-29 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-10598,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-10 09:30:52.063000+00:00 +Internet,LEFT_case-5712,2011-03-29 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11574,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-10 09:31:57.654000+00:00 +Internet,LEFT_case-5712,2011-03-29 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11573,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-10 09:32:34.788000+00:00 +Internet,LEFT_case-5714,2011-03-29 00:00:00+00:00,General,2011-04-12 13:55:18.788000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource07,2011-02-01 00:00:00.010000+00:00,task-10653,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-16 15:22:10.836000+00:00 +Internet,LEFT_case-5714,2011-03-29 00:00:00+00:00,General,2011-04-12 13:55:18.788000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource07,2011-02-01 00:00:00.010000+00:00,task-12621,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-16 15:22:38.402000+00:00 +Internet,LEFT_case-5714,2011-03-29 00:00:00+00:00,General,2011-04-12 13:55:18.788000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource07,2011-02-01 00:00:00.010000+00:00,task-12620,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-03-01 10:16:07.490000+00:00 +e-mail,LEFT_case-5721,2011-03-30 00:00:00+00:00,General,2011-05-16 09:48:44.730000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource09,2011-02-02 00:00:00.010000+00:00,task-10670,Confirmation of receipt,complete,EMPTY,Resource09,2011-03-10 09:42:52.622000+00:00 +e-mail,LEFT_case-5721,2011-03-30 00:00:00+00:00,General,2011-05-16 09:48:44.730000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource09,2011-02-02 00:00:00.010000+00:00,task-15695,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-03-10 09:43:27.281000+00:00 +e-mail,LEFT_case-5721,2011-03-30 00:00:00+00:00,General,2011-05-16 09:48:44.730000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource09,2011-02-02 00:00:00.010000+00:00,task-15697,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-03-10 09:44:17.616000+00:00 +e-mail,LEFT_case-5721,2011-03-30 00:00:00+00:00,General,2011-05-16 09:48:44.730000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource09,2011-02-02 00:00:00.010000+00:00,task-15694,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-10 09:44:54.788000+00:00 +Internet,LEFT_case-5737,2011-03-30 00:00:00+00:00,General,2011-03-17 10:36:27.613000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource06,2011-02-02 00:00:00.010000+00:00,task-10799,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-10 18:06:48.012000+00:00 +Internet,LEFT_case-5737,2011-03-30 00:00:00+00:00,General,2011-03-17 10:36:27.613000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource06,2011-02-02 00:00:00.010000+00:00,task-15871,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-10 18:52:50.554000+00:00 +Internet,LEFT_case-5737,2011-03-30 00:00:00+00:00,General,2011-03-17 10:36:27.613000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource06,2011-02-02 00:00:00.010000+00:00,task-15901,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-11 10:06:38.077000+00:00 +Internet,LEFT_case-5743,2011-03-30 00:00:00+00:00,General,2011-03-08 16:52:32.517000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource11,2011-02-03 00:00:00.010000+00:00,task-10845,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 12:00:30.436000+00:00 +Internet,LEFT_case-5743,2011-03-30 00:00:00+00:00,General,2011-03-08 16:52:32.517000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource11,2011-02-03 00:00:00.010000+00:00,task-12760,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 12:01:00.905000+00:00 +Internet,LEFT_case-5743,2011-03-30 00:00:00+00:00,General,2011-03-08 16:52:32.517000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource11,2011-02-03 00:00:00.010000+00:00,task-12759,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 12:01:42.241000+00:00 +Desk,LEFT_case-5748,2011-04-28 00:00:00+00:00,General,2011-04-21 12:15:07.155000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource05,2011-01-31 00:00:00.010000+00:00,task-10852,Confirmation of receipt,complete,EMPTY,Resource05,2011-02-23 10:33:49.721000+00:00 +Desk,LEFT_case-5748,2011-04-28 00:00:00+00:00,General,2011-04-21 12:15:07.155000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource05,2011-01-31 00:00:00.010000+00:00,task-13803,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-02-23 10:34:41.492000+00:00 +Desk,LEFT_case-5748,2011-04-28 00:00:00+00:00,General,2011-04-21 12:15:07.155000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource05,2011-01-31 00:00:00.010000+00:00,task-13801,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-23 10:37:17.249000+00:00 +Desk,LEFT_case-5748,2011-04-28 00:00:00+00:00,General,2011-04-21 12:15:07.155000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource05,2011-01-31 00:00:00.010000+00:00,task-13814,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-23 10:38:16.373000+00:00 +Desk,LEFT_case-5748,2011-04-28 00:00:00+00:00,General,2011-04-21 12:15:07.155000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource05,2011-01-31 00:00:00.010000+00:00,task-13816,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-23 10:39:20.688000+00:00 +Internet,LEFT_case-5749,2011-06-09 01:06:40+00:00,General,2011-06-16 10:00:31.852000+00:00,2011-06-09 01:06:40.020000+00:00,,Resource23,2011-02-03 01:06:40.010000+00:00,task-10853,Confirmation of receipt,complete,EMPTY,Resource23,2011-02-15 13:54:11.090000+00:00 +Internet,LEFT_case-5749,2011-06-09 01:06:40+00:00,General,2011-06-16 10:00:31.852000+00:00,2011-06-09 01:06:40.020000+00:00,,Resource23,2011-02-03 01:06:40.010000+00:00,task-12323,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-02-16 13:52:04.901000+00:00 +Internet,LEFT_case-5749,2011-06-09 01:06:40+00:00,General,2011-06-16 10:00:31.852000+00:00,2011-06-09 01:06:40.020000+00:00,,Resource23,2011-02-03 01:06:40.010000+00:00,task-12549,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-16 14:58:18.910000+00:00 +Internet,LEFT_case-5750,2011-03-25 01:06:40+00:00,General,2011-04-20 09:52:55.437000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource14,2011-01-28 01:06:40.010000+00:00,task-10854,Confirmation of receipt,complete,EMPTY,Resource14,2011-02-24 10:33:47.626000+00:00 +Internet,LEFT_case-5750,2011-03-25 01:06:40+00:00,General,2011-04-20 09:52:55.437000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource14,2011-01-28 01:06:40.010000+00:00,task-13953,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-02-24 10:37:49.302000+00:00 +Internet,LEFT_case-5750,2011-03-25 01:06:40+00:00,General,2011-04-20 09:52:55.437000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource14,2011-01-28 01:06:40.010000+00:00,task-13962,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-02-24 10:43:58.366000+00:00 +Desk,LEFT_case-5761,2011-03-29 00:00:00+00:00,General,2011-02-23 16:30:01.646000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource18,2011-02-01 00:00:00.010000+00:00,task-10981,Confirmation of receipt,complete,EMPTY,Resource18,2011-02-11 14:44:32.645000+00:00 +Desk,LEFT_case-5761,2011-03-29 00:00:00+00:00,General,2011-02-23 16:30:01.646000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource18,2011-02-01 00:00:00.010000+00:00,task-12015,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-02-11 14:45:15.718000+00:00 +Desk,LEFT_case-5761,2011-03-29 00:00:00+00:00,General,2011-02-23 16:30:01.646000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource18,2011-02-01 00:00:00.010000+00:00,task-12044,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-02-11 15:16:23.241000+00:00 +Desk,LEFT_case-5766,2011-04-01 00:00:00+00:00,General,2011-04-01 09:42:43.367000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-11004,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 12:43:42.612000+00:00 +Desk,LEFT_case-5766,2011-04-01 00:00:00+00:00,General,2011-04-01 09:42:43.367000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-12793,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 12:44:10.561000+00:00 +Desk,LEFT_case-5766,2011-04-01 00:00:00+00:00,General,2011-04-01 09:42:43.367000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-12792,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 12:44:30.601000+00:00 +Desk,LEFT_case-5767,2011-04-01 00:00:00+00:00,General,2011-03-11 12:31:00.801000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-11005,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-10 12:06:34.506000+00:00 +Desk,LEFT_case-5767,2011-04-01 00:00:00+00:00,General,2011-03-11 12:31:00.801000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-11707,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-10 12:07:01.894000+00:00 +Desk,LEFT_case-5767,2011-04-01 00:00:00+00:00,General,2011-03-11 12:31:00.801000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-11706,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-28 13:21:28.433000+00:00 +Internet,LEFT_case-5769,2011-04-01 00:00:00+00:00,General,2011-03-31 07:48:34.557000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource11,2011-02-04 00:00:00.010000+00:00,task-11042,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-18 09:09:45.415000+00:00 +Internet,LEFT_case-5769,2011-04-01 00:00:00+00:00,General,2011-03-31 07:48:34.557000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource11,2011-02-04 00:00:00.010000+00:00,task-12956,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-18 09:13:38.905000+00:00 +Internet,LEFT_case-5769,2011-04-01 00:00:00+00:00,General,2011-03-31 07:48:34.557000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource11,2011-02-04 00:00:00.010000+00:00,task-12955,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-28 13:53:40.453000+00:00 +Internet,LEFT_case-5865,2011-04-01 01:06:40+00:00,General,2011-04-01 09:42:16.979000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource11,2011-02-04 01:06:40.010000+00:00,task-11244,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 15:23:19.194000+00:00 +Internet,LEFT_case-5865,2011-04-01 01:06:40+00:00,General,2011-04-01 09:42:16.979000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource11,2011-02-04 01:06:40.010000+00:00,task-12887,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 15:23:44.713000+00:00 +Internet,LEFT_case-5865,2011-04-01 01:06:40+00:00,General,2011-04-01 09:42:16.979000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource11,2011-02-04 01:06:40.010000+00:00,task-12886,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-01 12:36:22.050000+00:00 +Internet,LEFT_case-5865,2011-04-01 01:06:40+00:00,General,2011-04-01 09:42:16.979000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource11,2011-02-04 01:06:40.010000+00:00,task-18536,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-03-30 16:12:57.295000+00:00 +Internet,LEFT_case-5865,2011-04-01 01:06:40+00:00,General,2011-04-01 09:42:16.979000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource11,2011-02-04 01:06:40.010000+00:00,task-18608,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-03-31 14:31:43.007000+00:00 +Internet,LEFT_case-5870,2011-04-02 00:00:00+00:00,General,2011-03-08 17:04:44.582000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource07,2011-02-05 00:00:00.010000+00:00,task-11268,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 15:08:53.884000+00:00 +Internet,LEFT_case-5870,2011-04-02 00:00:00+00:00,General,2011-03-08 17:04:44.582000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource07,2011-02-05 00:00:00.010000+00:00,task-12855,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 15:09:30.127000+00:00 +Internet,LEFT_case-5870,2011-04-02 00:00:00+00:00,General,2011-03-08 17:04:44.582000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource07,2011-02-05 00:00:00.010000+00:00,task-12854,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 15:09:53.380000+00:00 +Internet,LEFT_case-5874,2011-04-02 00:00:00+00:00,General,2011-03-19 00:00:00.010000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource08,2011-02-05 00:00:00.010000+00:00,task-11295,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-11 15:09:11.760000+00:00 +Internet,LEFT_case-5874,2011-04-02 00:00:00+00:00,General,2011-03-19 00:00:00.010000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource08,2011-02-05 00:00:00.010000+00:00,task-12055,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-14 11:58:26.238000+00:00 +Internet,LEFT_case-5874,2011-04-02 00:00:00+00:00,General,2011-03-19 00:00:00.010000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource08,2011-02-05 00:00:00.010000+00:00,task-12036,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-17 13:22:13.249000+00:00 +Internet,LEFT_case-5875,2011-04-04 00:00:00+00:00,General,2011-03-08 17:12:31.223000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource07,2011-02-07 00:00:00.010000+00:00,task-11301,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 14:55:55.319000+00:00 +Internet,LEFT_case-5875,2011-04-04 00:00:00+00:00,General,2011-03-08 17:12:31.223000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource07,2011-02-07 00:00:00.010000+00:00,task-12835,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 14:56:21.947000+00:00 +Internet,LEFT_case-5875,2011-04-04 00:00:00+00:00,General,2011-03-08 17:12:31.223000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource07,2011-02-07 00:00:00.010000+00:00,task-12834,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 14:56:57.561000+00:00 +Internet,LEFT_case-5877,2011-03-30 00:00:00+00:00,General,2011-03-30 00:00:00.020000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource37,2011-02-02 00:00:00.010000+00:00,task-11307,Confirmation of receipt,complete,EMPTY,Resource09,2011-03-14 08:14:49.727000+00:00 +Internet,LEFT_case-5877,2011-03-30 00:00:00+00:00,General,2011-03-30 00:00:00.020000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource37,2011-02-02 00:00:00.010000+00:00,task-15981,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-03-14 08:15:47.584000+00:00 +Internet,LEFT_case-5877,2011-03-30 00:00:00+00:00,General,2011-03-30 00:00:00.020000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource37,2011-02-02 00:00:00.010000+00:00,task-15980,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-14 08:16:49.373000+00:00 +Internet,LEFT_case-5878,2011-04-03 00:00:00+00:00,General,2011-03-31 15:40:23.559000+00:00,2011-04-03 00:00:00.020000+00:00,,Resource17,2011-02-06 00:00:00.010000+00:00,task-11308,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-14 09:49:45.134000+00:00 +Internet,LEFT_case-5878,2011-04-03 00:00:00+00:00,General,2011-03-31 15:40:23.559000+00:00,2011-04-03 00:00:00.020000+00:00,,Resource17,2011-02-06 00:00:00.010000+00:00,task-12132,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-14 09:50:40.423000+00:00 +Internet,LEFT_case-5878,2011-04-03 00:00:00+00:00,General,2011-03-31 15:40:23.559000+00:00,2011-04-03 00:00:00.020000+00:00,,Resource17,2011-02-06 00:00:00.010000+00:00,task-12134,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-14 12:19:09.483000+00:00 +Desk,LEFT_case-5879,2011-05-16 01:06:40+00:00,General,2011-04-20 14:23:27.429000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource02,2011-02-07 01:06:40.010000+00:00,task-11309,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-23 15:14:53.768000+00:00 +Desk,LEFT_case-5879,2011-05-16 01:06:40+00:00,General,2011-04-20 14:23:27.429000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource02,2011-02-07 01:06:40.010000+00:00,task-13887,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-23 16:43:34.117000+00:00 +Desk,LEFT_case-5879,2011-05-16 01:06:40+00:00,General,2011-04-20 14:23:27.429000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource02,2011-02-07 01:06:40.010000+00:00,task-13888,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-28 08:42:16.545000+00:00 +Internet,LEFT_case-5895,2011-04-04 01:06:40+00:00,General,2011-04-04 16:08:08.213000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource04,2011-02-07 01:06:40.010000+00:00,task-11342,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-01 11:40:39.151000+00:00 +Internet,LEFT_case-5895,2011-04-04 01:06:40+00:00,General,2011-04-04 16:08:08.213000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource04,2011-02-07 01:06:40.010000+00:00,task-14701,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-01 11:41:16.464000+00:00 +Internet,LEFT_case-5895,2011-04-04 01:06:40+00:00,General,2011-04-04 16:08:08.213000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource04,2011-02-07 01:06:40.010000+00:00,task-14700,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-02 16:06:16.190000+00:00 +Internet,LEFT_case-5897,2011-05-03 01:06:40+00:00,General,,2011-04-18 01:06:40.020000+00:00,Group 10,Resource52,2011-02-08 01:06:40.010000+00:00,task-11355,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-16 11:31:40.766000+00:00 +Internet,LEFT_case-5897,2011-05-03 01:06:40+00:00,General,,2011-04-18 01:06:40.020000+00:00,Group 10,Resource52,2011-02-08 01:06:40.010000+00:00,task-16412,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-03-16 11:33:03.326000+00:00 +Internet,LEFT_case-5897,2011-05-03 01:06:40+00:00,General,,2011-04-18 01:06:40.020000+00:00,Group 10,Resource52,2011-02-08 01:06:40.010000+00:00,task-16410,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-16 11:34:56.807000+00:00 +Internet,LEFT_case-5919,2011-04-06 00:00:00+00:00,General,2011-03-31 07:47:54.447000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-11512,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-18 10:56:02.026000+00:00 +Internet,LEFT_case-5919,2011-04-06 00:00:00+00:00,General,2011-03-31 07:47:54.447000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-12991,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-18 10:57:49.808000+00:00 +Internet,LEFT_case-5919,2011-04-06 00:00:00+00:00,General,2011-03-31 07:47:54.447000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-12990,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-18 10:59:01.208000+00:00 +Internet,LEFT_case-5921,2011-04-06 00:00:00+00:00,General,2011-04-04 08:13:48.018000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-11516,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 11:26:11.595000+00:00 +Internet,LEFT_case-5921,2011-04-06 00:00:00+00:00,General,2011-04-04 08:13:48.018000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-12738,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 11:26:37.683000+00:00 +Internet,LEFT_case-5921,2011-04-06 00:00:00+00:00,General,2011-04-04 08:13:48.018000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-12737,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 11:26:53.996000+00:00 +Internet,LEFT_case-5922,2011-04-06 00:00:00+00:00,General,2011-04-05 14:29:29.177000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource17,2011-02-09 00:00:00.010000+00:00,task-11519,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-18 10:23:35.556000+00:00 +Internet,LEFT_case-5922,2011-04-06 00:00:00+00:00,General,2011-04-05 14:29:29.177000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource17,2011-02-09 00:00:00.010000+00:00,task-12972,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-18 10:24:03.795000+00:00 +Internet,LEFT_case-5922,2011-04-06 00:00:00+00:00,General,2011-04-05 14:29:29.177000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource17,2011-02-09 00:00:00.010000+00:00,task-13056,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-18 12:41:57.209000+00:00 +Desk,LEFT_case-5923,2011-02-28 00:00:00+00:00,General,2011-02-17 16:36:58.066000+00:00,2011-02-28 00:00:00.010000+00:00,,Resource07,2011-01-03 00:00:00.010000+00:00,task-11522,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-14 08:29:15.391000+00:00 +Desk,LEFT_case-5923,2011-02-28 00:00:00+00:00,General,2011-02-17 16:36:58.066000+00:00,2011-02-28 00:00:00.010000+00:00,,Resource07,2011-01-03 00:00:00.010000+00:00,task-12094,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-14 08:30:04.764000+00:00 +Desk,LEFT_case-5923,2011-02-28 00:00:00+00:00,General,2011-02-17 16:36:58.066000+00:00,2011-02-28 00:00:00.010000+00:00,,Resource07,2011-01-03 00:00:00.010000+00:00,task-12093,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-14 08:30:29.648000+00:00 +Desk,LEFT_case-5926,2011-03-22 01:06:40+00:00,Customer contact,2011-02-09 15:06:37.905000+00:00,2011-03-22 01:06:40.010000+00:00,,admin3,2011-01-25 01:06:40.010000+00:00,task-11526,Confirmation of receipt,complete,Group 1,admin2,2011-02-09 15:06:38.763000+00:00 +Desk,LEFT_case-5928,2011-07-05 01:06:40+00:00,General,2011-07-06 15:12:01.192000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource17,2011-01-19 01:06:40.010000+00:00,task-11533,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-15 16:17:26.017000+00:00 +Desk,LEFT_case-5928,2011-07-05 01:06:40+00:00,General,2011-07-06 15:12:01.192000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource17,2011-01-19 01:06:40.010000+00:00,task-16233,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-15 16:26:08.851000+00:00 +Desk,LEFT_case-5928,2011-07-05 01:06:40+00:00,General,2011-07-06 15:12:01.192000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource17,2011-01-19 01:06:40.010000+00:00,task-16238,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-03-15 16:27:06.675000+00:00 +Desk,LEFT_case-5932,2011-03-14 00:00:00+00:00,General,2011-02-25 16:28:20.090000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource05,2011-01-24 00:00:00.010000+00:00,task-11540,Confirmation of receipt,complete,EMPTY,Resource05,2011-02-23 08:59:07.791000+00:00 +Desk,LEFT_case-5932,2011-03-14 00:00:00+00:00,General,2011-02-25 16:28:20.090000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource05,2011-01-24 00:00:00.010000+00:00,task-13737,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-02-23 09:00:12.959000+00:00 +Desk,LEFT_case-5932,2011-03-14 00:00:00+00:00,General,2011-02-25 16:28:20.090000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource05,2011-01-24 00:00:00.010000+00:00,task-13736,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-23 09:02:37.380000+00:00 +Internet,LEFT_case-5941,2011-05-04 01:06:40+00:00,General,2011-05-02 11:33:28.439000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource02,2011-02-09 01:06:40.010000+00:00,task-11634,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-22 16:38:42.897000+00:00 +Internet,LEFT_case-5941,2011-05-04 01:06:40+00:00,General,2011-05-02 11:33:28.439000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource02,2011-02-09 01:06:40.010000+00:00,task-13713,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-22 16:51:11.147000+00:00 +Internet,LEFT_case-5941,2011-05-04 01:06:40+00:00,General,2011-05-02 11:33:28.439000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource02,2011-02-09 01:06:40.010000+00:00,task-13714,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-23 10:44:27.382000+00:00 +Internet,LEFT_case-5942,2011-04-07 01:06:40+00:00,General,2011-04-13 11:53:23.561000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-11648,Confirmation of receipt,complete,EMPTY,Resource18,2011-02-14 16:20:31.973000+00:00 +Internet,LEFT_case-5942,2011-04-07 01:06:40+00:00,General,2011-04-13 11:53:23.561000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-12259,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-02-14 16:21:20.653000+00:00 +Internet,LEFT_case-5942,2011-04-07 01:06:40+00:00,General,2011-04-13 11:53:23.561000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-13316,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-21 15:42:33.606000+00:00 +Internet,LEFT_case-5943,2011-04-06 00:00:00+00:00,General,2011-02-22 10:33:42.168000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource02,2011-02-09 00:00:00.010000+00:00,task-11649,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-14 15:46:18.518000+00:00 +Internet,LEFT_case-5943,2011-04-06 00:00:00+00:00,General,2011-02-22 10:33:42.168000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource02,2011-02-09 00:00:00.010000+00:00,task-12242,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-14 15:47:01.511000+00:00 +Internet,LEFT_case-5943,2011-04-06 00:00:00+00:00,General,2011-02-22 10:33:42.168000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource02,2011-02-09 00:00:00.010000+00:00,task-12243,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-15 16:43:16.047000+00:00 +Internet,LEFT_case-5946,2011-04-06 01:06:40+00:00,General,2011-04-06 11:26:14.402000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource04,2011-02-09 01:06:40.010000+00:00,task-11744,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-01 11:58:34.191000+00:00 +Internet,LEFT_case-5946,2011-04-06 01:06:40+00:00,General,2011-04-06 11:26:14.402000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource04,2011-02-09 01:06:40.010000+00:00,task-14706,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-01 11:58:56.649000+00:00 +Internet,LEFT_case-5946,2011-04-06 01:06:40+00:00,General,2011-04-06 11:26:14.402000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource04,2011-02-09 01:06:40.010000+00:00,task-14705,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-03 11:52:38.970000+00:00 +Internet,LEFT_case-5952,2011-04-07 00:00:00+00:00,General,2011-03-07 08:46:58.682000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource18,2011-02-10 00:00:00.010000+00:00,task-11839,Confirmation of receipt,complete,EMPTY,Resource18,2011-02-14 16:30:11.722000+00:00 +Internet,LEFT_case-5952,2011-04-07 00:00:00+00:00,General,2011-03-07 08:46:58.682000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource18,2011-02-10 00:00:00.010000+00:00,task-12268,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-02-14 16:30:31.521000+00:00 +Internet,LEFT_case-5952,2011-04-07 00:00:00+00:00,General,2011-03-07 08:46:58.682000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource18,2011-02-10 00:00:00.010000+00:00,task-13318,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-21 15:44:17.404000+00:00 +Desk,LEFT_case-5956,2011-05-02 01:06:40+00:00,General,2011-05-13 08:18:57.460000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-12005,Confirmation of receipt,complete,EMPTY,Resource15,2011-02-16 11:26:51.816000+00:00 +Desk,LEFT_case-5956,2011-05-02 01:06:40+00:00,General,2011-05-13 08:18:57.460000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-12544,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-16 12:35:48.090000+00:00 +Desk,LEFT_case-5956,2011-05-02 01:06:40+00:00,General,2011-05-13 08:18:57.460000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-12514,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-28 14:44:17.301000+00:00 +Desk,LEFT_case-5957,2011-04-07 00:00:00+00:00,General,2011-04-07 14:57:18.547000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource11,2011-02-10 00:00:00.010000+00:00,task-12006,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 10:21:31.067000+00:00 +Desk,LEFT_case-5957,2011-04-07 00:00:00+00:00,General,2011-04-07 14:57:18.547000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource11,2011-02-10 00:00:00.010000+00:00,task-12706,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 10:22:15.628000+00:00 +Desk,LEFT_case-5957,2011-04-07 00:00:00+00:00,General,2011-04-07 14:57:18.547000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource11,2011-02-10 00:00:00.010000+00:00,task-12705,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 10:22:51.453000+00:00 +Desk,LEFT_case-5958,2011-03-08 00:00:00+00:00,General,2011-02-17 08:19:32.055000+00:00,2011-03-08 00:00:00.010000+00:00,,Resource07,2011-01-11 00:00:00.010000+00:00,task-12007,Confirmation of receipt,complete,EMPTY,admin2,2011-02-17 08:19:33.087000+00:00 +Internet,LEFT_case-5959,2011-04-04 00:00:00+00:00,General,2011-07-14 10:25:49.485000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource26,2011-02-07 00:00:00.010000+00:00,task-12008,Confirmation of receipt,complete,EMPTY,Resource25,2011-02-24 13:29:42.415000+00:00 +Internet,LEFT_case-5959,2011-04-04 00:00:00+00:00,General,2011-07-14 10:25:49.485000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource26,2011-02-07 00:00:00.010000+00:00,task-14053,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-15 12:00:51.677000+00:00 +Internet,LEFT_case-5959,2011-04-04 00:00:00+00:00,General,2011-07-14 10:25:49.485000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource26,2011-02-07 00:00:00.010000+00:00,task-15324,T04 Determine confirmation of receipt,complete,EMPTY,Resource26,2011-06-15 13:40:28.689000+00:00 +Desk,LEFT_case-5961,2011-04-26 01:06:40+00:00,General,2011-04-20 16:04:55.300000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-02-04 01:06:40.010000+00:00,task-12058,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-25 15:33:01.866000+00:00 +Desk,LEFT_case-5961,2011-04-26 01:06:40+00:00,General,2011-04-20 16:04:55.300000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-02-04 01:06:40.010000+00:00,task-14281,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-28 11:34:18.014000+00:00 +Desk,LEFT_case-5961,2011-04-26 01:06:40+00:00,General,2011-04-20 16:04:55.300000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-02-04 01:06:40.010000+00:00,task-14282,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-28 12:18:05.833000+00:00 +Internet,LEFT_case-5983,2011-04-10 00:00:00+00:00,General,2011-03-29 14:10:17.464000+00:00,2011-04-10 00:00:00.020000+00:00,,Resource15,2011-02-13 00:00:00.010000+00:00,task-12172,Confirmation of receipt,complete,EMPTY,Resource15,2011-02-16 11:37:58.519000+00:00 +Internet,LEFT_case-5983,2011-04-10 00:00:00+00:00,General,2011-03-29 14:10:17.464000+00:00,2011-04-10 00:00:00.020000+00:00,,Resource15,2011-02-13 00:00:00.010000+00:00,task-12547,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-16 12:37:18.779000+00:00 +Internet,LEFT_case-5983,2011-04-10 00:00:00+00:00,General,2011-03-29 14:10:17.464000+00:00,2011-04-10 00:00:00.020000+00:00,,Resource15,2011-02-13 00:00:00.010000+00:00,task-12524,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-18 10:36:01.130000+00:00 +Internet,LEFT_case-5986,2011-05-08 01:06:40+00:00,General,2011-06-28 09:35:48.698000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-02-13 01:06:40.010000+00:00,task-12239,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-28 16:11:41.938000+00:00 +Internet,LEFT_case-5986,2011-05-08 01:06:40+00:00,General,2011-06-28 09:35:48.698000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-02-13 01:06:40.010000+00:00,task-14578,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-02-28 16:20:59.567000+00:00 +Internet,LEFT_case-5986,2011-05-08 01:06:40+00:00,General,2011-06-28 09:35:48.698000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-02-13 01:06:40.010000+00:00,task-14576,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-01 08:25:31.376000+00:00 +Internet,LEFT_case-5986,2011-05-08 01:06:40+00:00,General,2011-06-28 09:35:48.698000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-02-13 01:06:40.010000+00:00,task-14629,T16 Report reasons to hold request,complete,Group 1,Resource08,2011-03-01 08:34:32.492000+00:00 +Internet,LEFT_case-5986,2011-05-08 01:06:40+00:00,General,2011-06-28 09:35:48.698000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-02-13 01:06:40.010000+00:00,task-14638,T19 Determine report Y to stop indication,complete,Group 3,Resource08,2011-03-01 08:35:50.559000+00:00 +Internet,LEFT_case-5987,2011-04-11 01:06:40+00:00,General,2011-02-16 14:23:07.250000+00:00,2011-04-11 01:06:40.020000+00:00,,Resource23,2011-02-14 01:06:40.010000+00:00,task-12249,Confirmation of receipt,complete,EMPTY,admin2,2011-02-16 14:23:08.600000+00:00 +Internet,LEFT_case-5994,2011-04-11 00:00:00+00:00,General,2011-04-04 08:26:16.417000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-12277,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 09:43:30.149000+00:00 +Internet,LEFT_case-5994,2011-04-11 00:00:00+00:00,General,2011-04-04 08:26:16.417000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-13462,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 09:44:13.036000+00:00 +Internet,LEFT_case-5994,2011-04-11 00:00:00+00:00,General,2011-04-04 08:26:16.417000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-13461,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 09:44:54.659000+00:00 +Internet,LEFT_case-5997,2011-04-11 00:00:00+00:00,General,2011-04-11 08:18:12.264000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-12280,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 13:37:31.328000+00:00 +Internet,LEFT_case-5997,2011-04-11 00:00:00+00:00,General,2011-04-11 08:18:12.264000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-13603,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 13:37:58.037000+00:00 +Internet,LEFT_case-5997,2011-04-11 00:00:00+00:00,General,2011-04-11 08:18:12.264000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-13602,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 13:38:19.754000+00:00 +Internet,LEFT_case-5998,2011-04-11 00:00:00+00:00,General,2011-04-07 09:09:05.884000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource02,2011-02-14 00:00:00.010000+00:00,task-12281,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-22 12:33:34.076000+00:00 +Internet,LEFT_case-5998,2011-04-11 00:00:00+00:00,General,2011-04-07 09:09:05.884000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource02,2011-02-14 00:00:00.010000+00:00,task-13560,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-22 12:39:29.929000+00:00 +Internet,LEFT_case-5998,2011-04-11 00:00:00+00:00,General,2011-04-07 09:09:05.884000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource02,2011-02-14 00:00:00.010000+00:00,task-13563,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-22 12:40:22.166000+00:00 +Internet,LEFT_case-5998,2011-04-11 00:00:00+00:00,General,2011-04-07 09:09:05.884000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource02,2011-02-14 00:00:00.010000+00:00,task-13565,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-22 12:40:43.308000+00:00 +Internet,LEFT_case-5998,2011-04-11 00:00:00+00:00,General,2011-04-07 09:09:05.884000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource02,2011-02-14 00:00:00.010000+00:00,task-13561,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-23 10:31:51.061000+00:00 +Internet,LEFT_case-6009,2011-07-08 01:06:40+00:00,General,2011-07-12 14:59:47.005000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource18,2010-12-22 01:06:40.010000+00:00,task-12324,Confirmation of receipt,complete,EMPTY,Resource18,2011-02-15 15:02:12.233000+00:00 +Internet,LEFT_case-6009,2011-07-08 01:06:40+00:00,General,2011-07-12 14:59:47.005000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource18,2010-12-22 01:06:40.010000+00:00,task-12347,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-02-15 15:03:11.659000+00:00 +Internet,LEFT_case-6009,2011-07-08 01:06:40+00:00,General,2011-07-12 14:59:47.005000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource18,2010-12-22 01:06:40.010000+00:00,task-12346,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-02-15 15:08:54.387000+00:00 +Internet,LEFT_case-6010,2011-03-24 00:00:00+00:00,General,2011-04-28 09:24:48.587000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource09,2011-01-27 00:00:00.010000+00:00,task-12327,Confirmation of receipt,complete,EMPTY,Resource09,2011-03-22 14:00:09.265000+00:00 +Internet,LEFT_case-6010,2011-03-24 00:00:00+00:00,General,2011-04-28 09:24:48.587000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource09,2011-01-27 00:00:00.010000+00:00,task-17204,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-22 14:16:48.583000+00:00 +Internet,LEFT_case-6010,2011-03-24 00:00:00+00:00,General,2011-04-28 09:24:48.587000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource09,2011-01-27 00:00:00.010000+00:00,task-17212,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-22 14:17:33.559000+00:00 +Internet,LEFT_case-6010,2011-03-24 00:00:00+00:00,General,2011-04-28 09:24:48.587000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource09,2011-01-27 00:00:00.010000+00:00,task-17235,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-03-22 14:24:23.966000+00:00 +Internet,LEFT_case-6012,2011-05-04 14:56:16.838000+00:00,General,2011-03-16 12:10:18.381000+00:00,2011-05-04 14:56:16.838000+00:00,,Resource06,2011-02-15 14:56:16.838000+00:00,task-12336,Confirmation of receipt,complete,EMPTY,Resource06,2011-02-15 16:21:09.031000+00:00 +Internet,LEFT_case-6012,2011-05-04 14:56:16.838000+00:00,General,2011-03-16 12:10:18.381000+00:00,2011-05-04 14:56:16.838000+00:00,,Resource06,2011-02-15 14:56:16.838000+00:00,task-12396,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-02-15 16:21:36.900000+00:00 +Internet,LEFT_case-6012,2011-05-04 14:56:16.838000+00:00,General,2011-03-16 12:10:18.381000+00:00,2011-05-04 14:56:16.838000+00:00,,Resource06,2011-02-15 14:56:16.838000+00:00,task-12395,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-02-15 16:21:58.843000+00:00 +Internet,LEFT_case-6015,2011-05-04 15:00:43.554000+00:00,General,2011-03-11 15:50:56.266000+00:00,2011-05-04 15:00:43.554000+00:00,,Resource06,2011-02-15 15:00:43.554000+00:00,task-12344,Confirmation of receipt,complete,EMPTY,Resource06,2011-02-15 15:29:29.915000+00:00 +Internet,LEFT_case-6015,2011-05-04 15:00:43.554000+00:00,General,2011-03-11 15:50:56.266000+00:00,2011-05-04 15:00:43.554000+00:00,,Resource06,2011-02-15 15:00:43.554000+00:00,task-12371,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-02-15 15:46:10.121000+00:00 +Internet,LEFT_case-6015,2011-05-04 15:00:43.554000+00:00,General,2011-03-11 15:50:56.266000+00:00,2011-05-04 15:00:43.554000+00:00,,Resource06,2011-02-15 15:00:43.554000+00:00,task-12369,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-02-15 15:46:33.991000+00:00 +Internet,LEFT_case-6015,2011-05-04 15:00:43.554000+00:00,General,2011-03-11 15:50:56.266000+00:00,2011-05-04 15:00:43.554000+00:00,,Resource06,2011-02-15 15:00:43.554000+00:00,task-12374,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-02-15 15:47:47.680000+00:00 +Internet,LEFT_case-6028,2011-04-06 01:06:40+00:00,General,2011-08-29 11:59:25.489000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource23,2011-02-09 01:06:40.010000+00:00,task-12563,Confirmation of receipt,complete,EMPTY,Resource23,2011-02-18 13:12:55.873000+00:00 +Internet,LEFT_case-6028,2011-04-06 01:06:40+00:00,General,2011-08-29 11:59:25.489000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource23,2011-02-09 01:06:40.010000+00:00,task-13063,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-02-18 13:50:02.588000+00:00 +Internet,LEFT_case-6028,2011-04-06 01:06:40+00:00,General,2011-08-29 11:59:25.489000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource23,2011-02-09 01:06:40.010000+00:00,task-13073,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource23,2011-02-18 13:52:21.237000+00:00 +Internet,LEFT_case-6028,2011-04-06 01:06:40+00:00,General,2011-08-29 11:59:25.489000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource23,2011-02-09 01:06:40.010000+00:00,task-13074,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-02-18 13:53:41.779000+00:00 +Internet,LEFT_case-6028,2011-04-06 01:06:40+00:00,General,2011-08-29 11:59:25.489000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource23,2011-02-09 01:06:40.010000+00:00,task-13218,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-21 08:31:01.425000+00:00 +Internet,LEFT_case-6032,2011-04-13 00:00:00+00:00,General,2011-04-12 07:30:39.271000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-12641,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 13:54:08.256000+00:00 +Internet,LEFT_case-6032,2011-04-13 00:00:00+00:00,General,2011-04-12 07:30:39.271000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-13629,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 13:54:39.175000+00:00 +Internet,LEFT_case-6032,2011-04-13 00:00:00+00:00,General,2011-04-12 07:30:39.271000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-13628,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 13:54:59.636000+00:00 +Internet,LEFT_case-6034,2011-04-13 00:00:00+00:00,General,2011-04-04 08:38:31.554000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource11,2011-02-16 00:00:00.010000+00:00,task-12649,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 14:38:33.075000+00:00 +Internet,LEFT_case-6034,2011-04-13 00:00:00+00:00,General,2011-04-04 08:38:31.554000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource11,2011-02-16 00:00:00.010000+00:00,task-13674,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 14:40:13.046000+00:00 +Internet,LEFT_case-6034,2011-04-13 00:00:00+00:00,General,2011-04-04 08:38:31.554000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource11,2011-02-16 00:00:00.010000+00:00,task-13673,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 14:40:34.911000+00:00 +Internet,LEFT_case-6036,2011-04-12 00:00:00+00:00,General,2011-04-04 08:46:19.676000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-12655,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 14:09:48.369000+00:00 +Internet,LEFT_case-6036,2011-04-12 00:00:00+00:00,General,2011-04-04 08:46:19.676000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-13650,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 14:10:19.024000+00:00 +Internet,LEFT_case-6036,2011-04-12 00:00:00+00:00,General,2011-04-04 08:46:19.676000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-13649,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 14:10:39.921000+00:00 +Internet,LEFT_case-6055,2011-04-14 01:06:40+00:00,General,2011-04-04 13:11:59.089000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource11,2011-02-16 01:06:40.010000+00:00,task-12910,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 11:08:27.138000+00:00 +Internet,LEFT_case-6055,2011-04-14 01:06:40+00:00,General,2011-04-04 13:11:59.089000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource11,2011-02-16 01:06:40.010000+00:00,task-13500,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 11:09:02.605000+00:00 +Internet,LEFT_case-6055,2011-04-14 01:06:40+00:00,General,2011-04-04 13:11:59.089000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource11,2011-02-16 01:06:40.010000+00:00,task-13499,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 11:09:25.958000+00:00 +Internet,LEFT_case-6056,2011-04-13 01:06:40+00:00,General,2011-05-31 14:41:22.033000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource14,2011-02-16 01:06:40.010000+00:00,task-12925,Confirmation of receipt,complete,EMPTY,Resource14,2011-03-16 14:21:26.788000+00:00 +Internet,LEFT_case-6056,2011-04-13 01:06:40+00:00,General,2011-05-31 14:41:22.033000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource14,2011-02-16 01:06:40.010000+00:00,task-16469,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-03-16 14:28:24.821000+00:00 +Internet,LEFT_case-6056,2011-04-13 01:06:40+00:00,General,2011-05-31 14:41:22.033000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource14,2011-02-16 01:06:40.010000+00:00,task-16939,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-03-21 11:42:07.701000+00:00 +Internet,LEFT_case-6068,2011-04-13 00:00:00+00:00,General,2011-02-25 11:11:42.522000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-12969,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-25 08:35:57.643000+00:00 +Internet,LEFT_case-6068,2011-04-13 00:00:00+00:00,General,2011-02-25 11:11:42.522000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-14168,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-25 08:36:33.624000+00:00 +Internet,LEFT_case-6068,2011-04-13 00:00:00+00:00,General,2011-02-25 11:11:42.522000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-14167,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-25 08:37:04.785000+00:00 +Internet,LEFT_case-6069,2011-04-13 00:00:00+00:00,General,2011-03-04 00:00:00.010000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-12978,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-25 08:30:18.153000+00:00 +Internet,LEFT_case-6069,2011-04-13 00:00:00+00:00,General,2011-03-04 00:00:00.010000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-14163,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-25 08:30:46.492000+00:00 +Internet,LEFT_case-6069,2011-04-13 00:00:00+00:00,General,2011-03-04 00:00:00.010000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-14162,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-25 08:31:19.584000+00:00 +Internet,LEFT_case-6070,2011-04-14 00:00:00+00:00,General,2011-03-09 14:40:03.533000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource02,2011-02-17 00:00:00.010000+00:00,task-12988,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-23 12:21:43.483000+00:00 +Internet,LEFT_case-6070,2011-04-14 00:00:00+00:00,General,2011-03-09 14:40:03.533000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource02,2011-02-17 00:00:00.010000+00:00,task-13854,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-23 12:23:23.308000+00:00 +Internet,LEFT_case-6070,2011-04-14 00:00:00+00:00,General,2011-03-09 14:40:03.533000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource02,2011-02-17 00:00:00.010000+00:00,task-13855,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-28 08:35:24.034000+00:00 +Internet,LEFT_case-6070,2011-04-14 00:00:00+00:00,General,2011-03-09 14:40:03.533000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource02,2011-02-17 00:00:00.010000+00:00,task-15636,T11 Create document X request unlicensed,complete,Group 1,Resource02,2011-03-09 14:39:16.401000+00:00 +Internet,LEFT_case-6070,2011-04-14 00:00:00+00:00,General,2011-03-09 14:40:03.533000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource02,2011-02-17 00:00:00.010000+00:00,task-15641,T14 Determine document X request unlicensed,complete,Group 3,Resource02,2011-03-09 14:39:45.537000+00:00 +Internet,LEFT_case-6071,2011-04-14 00:00:00+00:00,General,2011-04-15 10:48:38.110000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource09,2011-02-17 00:00:00.010000+00:00,task-13007,Confirmation of receipt,complete,EMPTY,admin2,2011-04-15 10:48:39.224000+00:00 +Desk,LEFT_case-6078,2011-04-11 00:00:00+00:00,General,2011-04-11 15:03:39.275000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource08,2011-02-14 00:00:00.010000+00:00,task-13141,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-01 10:50:41.841000+00:00 +Desk,LEFT_case-6078,2011-04-11 00:00:00+00:00,General,2011-04-11 15:03:39.275000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource08,2011-02-14 00:00:00.010000+00:00,task-14696,T04 Determine confirmation of receipt,complete,EMPTY,admin3,2011-03-02 08:58:25.690000+00:00 +Desk,LEFT_case-6078,2011-04-11 00:00:00+00:00,General,2011-04-11 15:03:39.275000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource08,2011-02-14 00:00:00.010000+00:00,task-14695,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-15 15:35:06.940000+00:00 +Desk,LEFT_case-6080,2011-04-12 01:06:40+00:00,General,2011-08-30 15:42:21.722000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource14,2011-02-15 01:06:40.010000+00:00,task-13146,Confirmation of receipt,complete,EMPTY,Resource14,2011-08-24 10:34:05.988000+00:00 +Desk,LEFT_case-6080,2011-04-12 01:06:40+00:00,General,2011-08-30 15:42:21.722000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource14,2011-02-15 01:06:40.010000+00:00,task-37020,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-24 10:34:55.136000+00:00 +Desk,LEFT_case-6080,2011-04-12 01:06:40+00:00,General,2011-08-30 15:42:21.722000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource14,2011-02-15 01:06:40.010000+00:00,task-37018,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-24 10:37:39.051000+00:00 +Desk,LEFT_case-6084,2011-04-08 00:00:00+00:00,General,2011-04-04 12:59:01.454000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource11,2011-02-11 00:00:00.010000+00:00,task-13200,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 12:50:06.201000+00:00 +Desk,LEFT_case-6084,2011-04-08 00:00:00+00:00,General,2011-04-04 12:59:01.454000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource11,2011-02-11 00:00:00.010000+00:00,task-13574,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 12:50:38.221000+00:00 +Desk,LEFT_case-6084,2011-04-08 00:00:00+00:00,General,2011-04-04 12:59:01.454000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource11,2011-02-11 00:00:00.010000+00:00,task-13573,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 12:50:58.790000+00:00 +Internet,LEFT_case-6108,2011-04-15 00:00:00+00:00,General,2011-04-19 15:00:56.690000+00:00,2011-04-15 00:00:00.020000+00:00,,Resource09,2011-02-21 00:00:00.010000+00:00,task-13275,Confirmation of receipt,complete,EMPTY,Resource09,2011-04-11 11:35:13.544000+00:00 +Internet,LEFT_case-6108,2011-04-15 00:00:00+00:00,General,2011-04-19 15:00:56.690000+00:00,2011-04-15 00:00:00.020000+00:00,,Resource09,2011-02-21 00:00:00.010000+00:00,task-19834,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-04-11 11:35:34.107000+00:00 +Internet,LEFT_case-6108,2011-04-15 00:00:00+00:00,General,2011-04-19 15:00:56.690000+00:00,2011-04-15 00:00:00.020000+00:00,,Resource09,2011-02-21 00:00:00.010000+00:00,task-19840,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-04-11 11:37:48.452000+00:00 +Internet,LEFT_case-6110,2011-04-16 00:00:00+00:00,General,2011-02-24 00:00:00.010000+00:00,2011-04-16 00:00:00.020000+00:00,,Resource23,2011-02-19 00:00:00.010000+00:00,task-13295,Confirmation of receipt,complete,EMPTY,admin2,2011-04-06 11:01:22.808000+00:00 +Internet,LEFT_case-6112,2011-04-15 00:00:00+00:00,General,2011-03-01 09:57:13.497000+00:00,2011-04-15 00:00:00.020000+00:00,,Resource09,2011-02-18 00:00:00.010000+00:00,task-13317,Confirmation of receipt,complete,EMPTY,admin2,2011-03-01 09:57:14.427000+00:00 +Internet,LEFT_case-6113,2011-04-17 00:00:00+00:00,General,2011-07-26 08:06:13.303000+00:00,2011-04-17 00:00:00.020000+00:00,,Resource12,2011-02-20 00:00:00.010000+00:00,task-13331,Confirmation of receipt,complete,EMPTY,Resource12,2011-03-03 11:03:56.100000+00:00 +Internet,LEFT_case-6113,2011-04-17 00:00:00+00:00,General,2011-07-26 08:06:13.303000+00:00,2011-04-17 00:00:00.020000+00:00,,Resource12,2011-02-20 00:00:00.010000+00:00,task-15269,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-07 16:29:43.657000+00:00 +Internet,LEFT_case-6113,2011-04-17 00:00:00+00:00,General,2011-07-26 08:06:13.303000+00:00,2011-04-17 00:00:00.020000+00:00,,Resource12,2011-02-20 00:00:00.010000+00:00,task-15041,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-03-14 09:47:49.474000+00:00 +Internet,LEFT_case-6116,2011-04-18 00:00:00+00:00,General,2011-03-11 09:34:22.368000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource18,2011-02-21 00:00:00.010000+00:00,task-13346,Confirmation of receipt,complete,EMPTY,Resource18,2011-02-24 15:48:16.499000+00:00 +Internet,LEFT_case-6116,2011-04-18 00:00:00+00:00,General,2011-03-11 09:34:22.368000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource18,2011-02-21 00:00:00.010000+00:00,task-14124,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-02-24 15:48:47.328000+00:00 +Internet,LEFT_case-6116,2011-04-18 00:00:00+00:00,General,2011-03-11 09:34:22.368000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource18,2011-02-21 00:00:00.010000+00:00,task-14123,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-02-24 15:56:47.417000+00:00 +Internet,LEFT_case-6128,2011-06-13 01:06:40+00:00,General,2011-06-08 00:00:00.020000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource08,2011-02-21 01:06:40.010000+00:00,task-13444,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-01 12:01:43.728000+00:00 +Internet,LEFT_case-6128,2011-06-13 01:06:40+00:00,General,2011-06-08 00:00:00.020000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource08,2011-02-21 01:06:40.010000+00:00,task-14709,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-01 12:13:55.733000+00:00 +Internet,LEFT_case-6128,2011-06-13 01:06:40+00:00,General,2011-06-08 00:00:00.020000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource08,2011-02-21 01:06:40.010000+00:00,task-14713,T04 Determine confirmation of receipt,complete,EMPTY,admin3,2011-03-02 09:01:11.685000+00:00 +Internet,LEFT_case-6130,2011-04-05 01:06:40+00:00,General,2011-03-31 09:55:25.855000+00:00,2011-04-05 01:06:40.020000+00:00,,Resource11,2011-02-08 01:06:40.010000+00:00,task-13527,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-10 12:09:05.416000+00:00 +Internet,LEFT_case-6130,2011-04-05 01:06:40+00:00,General,2011-03-31 09:55:25.855000+00:00,2011-04-05 01:06:40.020000+00:00,,Resource11,2011-02-08 01:06:40.010000+00:00,task-15773,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-10 12:09:33.830000+00:00 +Internet,LEFT_case-6130,2011-04-05 01:06:40+00:00,General,2011-03-31 09:55:25.855000+00:00,2011-04-05 01:06:40.020000+00:00,,Resource11,2011-02-08 01:06:40.010000+00:00,task-15770,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-10 12:09:57.564000+00:00 +Internet,LEFT_case-6140,2011-04-18 01:06:40+00:00,General,2011-04-18 09:35:17.988000+00:00,2011-04-18 01:06:40.020000+00:00,,Resource17,2011-02-21 01:06:40.010000+00:00,task-13724,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-24 12:35:09.094000+00:00 +Internet,LEFT_case-6140,2011-04-18 01:06:40+00:00,General,2011-04-18 09:35:17.988000+00:00,2011-04-18 01:06:40.020000+00:00,,Resource17,2011-02-21 01:06:40.010000+00:00,task-14020,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-24 12:39:14.121000+00:00 +Internet,LEFT_case-6140,2011-04-18 01:06:40+00:00,General,2011-04-18 09:35:17.988000+00:00,2011-04-18 01:06:40.020000+00:00,,Resource17,2011-02-21 01:06:40.010000+00:00,task-14021,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-28 12:07:06.216000+00:00 +Internet,LEFT_case-6141,2011-03-25 00:00:00+00:00,General,2011-04-12 08:14:31.155000+00:00,2011-03-25 00:00:00.010000+00:00,,Resource01,2011-01-28 00:00:00.010000+00:00,task-13725,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-02 08:25:12.415000+00:00 +Internet,LEFT_case-6141,2011-03-25 00:00:00+00:00,General,2011-04-12 08:14:31.155000+00:00,2011-03-25 00:00:00.010000+00:00,,Resource01,2011-01-28 00:00:00.010000+00:00,task-14822,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-02 08:25:30.190000+00:00 +Internet,LEFT_case-6141,2011-03-25 00:00:00+00:00,General,2011-04-12 08:14:31.155000+00:00,2011-03-25 00:00:00.010000+00:00,,Resource01,2011-01-28 00:00:00.010000+00:00,task-14827,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-02 08:27:09.024000+00:00 +Internet,LEFT_case-6145,2011-05-03 01:06:40+00:00,General,2011-04-26 11:53:49.140000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource15,2011-02-22 01:06:40.010000+00:00,task-13784,Confirmation of receipt,complete,EMPTY,Resource15,2011-02-23 12:45:30.822000+00:00 +Internet,LEFT_case-6145,2011-05-03 01:06:40+00:00,General,2011-04-26 11:53:49.140000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource15,2011-02-22 01:06:40.010000+00:00,task-13859,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-23 12:51:58.381000+00:00 +Internet,LEFT_case-6145,2011-05-03 01:06:40+00:00,General,2011-04-26 11:53:49.140000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource15,2011-02-22 01:06:40.010000+00:00,task-14426,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-28 11:53:15.005000+00:00 +Internet,LEFT_case-6146,2011-04-19 01:06:40+00:00,General,2011-03-30 13:37:17.561000+00:00,2011-04-19 01:06:40.020000+00:00,,Resource22,2011-02-22 01:06:40.010000+00:00,task-13810,Confirmation of receipt,complete,EMPTY,Resource22,2011-03-01 15:14:59.796000+00:00 +Internet,LEFT_case-6146,2011-04-19 01:06:40+00:00,General,2011-03-30 13:37:17.561000+00:00,2011-04-19 01:06:40.020000+00:00,,Resource22,2011-02-22 01:06:40.010000+00:00,task-14744,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-03-01 15:16:25.593000+00:00 +Internet,LEFT_case-6146,2011-04-19 01:06:40+00:00,General,2011-03-30 13:37:17.561000+00:00,2011-04-19 01:06:40.020000+00:00,,Resource22,2011-02-22 01:06:40.010000+00:00,task-14745,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-02 08:58:58.804000+00:00 +Internet,LEFT_case-6147,2011-04-19 01:06:40+00:00,General,2011-09-16 00:00:00.020000+00:00,2011-04-19 01:06:40.020000+00:00,,Resource14,2011-02-22 01:06:40.010000+00:00,task-13845,Confirmation of receipt,complete,EMPTY,admin2,2011-09-19 10:26:06.536000+00:00 +Internet,LEFT_case-6148,2011-04-20 00:00:00+00:00,General,2011-03-23 14:39:43.350000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource02,2011-02-23 00:00:00.010000+00:00,task-13851,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-28 09:22:36.039000+00:00 +Internet,LEFT_case-6148,2011-04-20 00:00:00+00:00,General,2011-03-23 14:39:43.350000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource02,2011-02-23 00:00:00.010000+00:00,task-14348,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-28 09:23:12.522000+00:00 +Internet,LEFT_case-6148,2011-04-20 00:00:00+00:00,General,2011-03-23 14:39:43.350000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource02,2011-02-23 00:00:00.010000+00:00,task-14350,T04 Determine confirmation of receipt,complete,EMPTY,Resource09,2011-02-28 10:43:09.537000+00:00 +Internet,LEFT_case-6149,2011-04-20 00:00:00+00:00,General,2011-03-28 00:00:00.020000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-13857,Confirmation of receipt,complete,EMPTY,Resource07,2011-03-01 13:22:53.680000+00:00 +Internet,LEFT_case-6149,2011-04-20 00:00:00+00:00,General,2011-03-28 00:00:00.020000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-14724,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-03-01 13:23:36.467000+00:00 +Internet,LEFT_case-6149,2011-04-20 00:00:00+00:00,General,2011-03-28 00:00:00.020000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-14723,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-03-01 13:24:00.608000+00:00 +Internet,LEFT_case-6152,2011-04-18 00:00:00+00:00,General,2011-03-09 11:14:12.705000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-21 00:00:00.010000+00:00,task-13875,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-28 11:55:34.582000+00:00 +Internet,LEFT_case-6152,2011-04-18 00:00:00+00:00,General,2011-03-09 11:14:12.705000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-21 00:00:00.010000+00:00,task-14432,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-28 11:56:45.082000+00:00 +Internet,LEFT_case-6152,2011-04-18 00:00:00+00:00,General,2011-03-09 11:14:12.705000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-21 00:00:00.010000+00:00,task-14433,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-02-28 12:53:10.243000+00:00 +Internet,LEFT_case-6153,2011-04-11 00:00:00+00:00,General,2011-04-29 09:04:28.140000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource05,2011-02-14 00:00:00.010000+00:00,task-13882,Confirmation of receipt,complete,EMPTY,Resource05,2011-03-14 12:12:11.558000+00:00 +Internet,LEFT_case-6153,2011-04-11 00:00:00+00:00,General,2011-04-29 09:04:28.140000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource05,2011-02-14 00:00:00.010000+00:00,task-16065,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-03-14 12:13:59.873000+00:00 +Internet,LEFT_case-6153,2011-04-11 00:00:00+00:00,General,2011-04-29 09:04:28.140000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource05,2011-02-14 00:00:00.010000+00:00,task-16064,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-03-16 07:36:30.927000+00:00 +Desk,LEFT_case-6156,2011-04-13 00:00:00+00:00,General,2011-04-08 14:25:31.842000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource17,2011-02-16 00:00:00.010000+00:00,task-13894,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-10 14:30:26.555000+00:00 +Desk,LEFT_case-6156,2011-04-13 00:00:00+00:00,General,2011-04-08 14:25:31.842000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource17,2011-02-16 00:00:00.010000+00:00,task-15832,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-03-10 14:31:41.363000+00:00 +Desk,LEFT_case-6156,2011-04-13 00:00:00+00:00,General,2011-04-08 14:25:31.842000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource17,2011-02-16 00:00:00.010000+00:00,task-15831,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-10 14:31:51.986000+00:00 +Internet,LEFT_case-6166,2011-04-20 00:00:00+00:00,General,2011-04-11 07:36:38.039000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-14054,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-10 13:29:02.485000+00:00 +Internet,LEFT_case-6166,2011-04-20 00:00:00+00:00,General,2011-04-11 07:36:38.039000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-15806,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-10 13:29:38.656000+00:00 +Internet,LEFT_case-6166,2011-04-20 00:00:00+00:00,General,2011-04-11 07:36:38.039000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-15805,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-10 13:30:01.953000+00:00 +Internet,LEFT_case-6167,2011-04-20 00:00:00+00:00,General,2011-04-12 10:45:01.060000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource07,2011-02-23 00:00:00.010000+00:00,task-14061,Confirmation of receipt,complete,EMPTY,Resource07,2011-03-24 08:53:45.448000+00:00 +Internet,LEFT_case-6167,2011-04-20 00:00:00+00:00,General,2011-04-12 10:45:01.060000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource07,2011-02-23 00:00:00.010000+00:00,task-18554,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-31 08:34:33.972000+00:00 +Internet,LEFT_case-6167,2011-04-20 00:00:00+00:00,General,2011-04-12 10:45:01.060000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource07,2011-02-23 00:00:00.010000+00:00,task-17481,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 15:07:02.535000+00:00 +Internet,LEFT_case-6168,2011-04-21 00:00:00+00:00,General,2011-04-06 12:09:43.071000+00:00,2011-04-21 00:00:00.020000+00:00,,Resource11,2011-02-24 00:00:00.010000+00:00,task-14064,Confirmation of receipt,complete,EMPTY,Resource07,2011-03-01 16:49:39.248000+00:00 +Internet,LEFT_case-6168,2011-04-21 00:00:00+00:00,General,2011-04-06 12:09:43.071000+00:00,2011-04-21 00:00:00.020000+00:00,,Resource11,2011-02-24 00:00:00.010000+00:00,task-14793,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-03-01 16:50:22.029000+00:00 +Internet,LEFT_case-6168,2011-04-21 00:00:00+00:00,General,2011-04-06 12:09:43.071000+00:00,2011-04-21 00:00:00.020000+00:00,,Resource11,2011-02-24 00:00:00.010000+00:00,task-14792,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-03-01 16:50:49.752000+00:00 +Internet,LEFT_case-6169,2011-05-14 01:06:40+00:00,General,2011-05-09 16:30:11.401000+00:00,2011-05-14 01:06:40.020000+00:00,,Resource15,2011-02-24 01:06:40.010000+00:00,task-14094,Confirmation of receipt,complete,EMPTY,Resource15,2011-02-25 14:29:00.446000+00:00 +Internet,LEFT_case-6169,2011-05-14 01:06:40+00:00,General,2011-05-09 16:30:11.401000+00:00,2011-05-14 01:06:40.020000+00:00,,Resource15,2011-02-24 01:06:40.010000+00:00,task-14256,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-28 11:56:49.898000+00:00 +Internet,LEFT_case-6169,2011-05-14 01:06:40+00:00,General,2011-05-09 16:30:11.401000+00:00,2011-05-14 01:06:40.020000+00:00,,Resource15,2011-02-24 01:06:40.010000+00:00,task-15235,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-07 16:22:27.319000+00:00 +Internet,LEFT_case-6171,2011-04-18 00:00:00+00:00,General,2011-04-12 00:00:00.020000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-22 00:00:00.010000+00:00,task-14127,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-28 14:13:12.709000+00:00 +Internet,LEFT_case-6171,2011-04-18 00:00:00+00:00,General,2011-04-12 00:00:00.020000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-22 00:00:00.010000+00:00,task-14524,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-28 14:14:00.358000+00:00 +Internet,LEFT_case-6171,2011-04-18 00:00:00+00:00,General,2011-04-12 00:00:00.020000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-22 00:00:00.010000+00:00,task-14525,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-28 16:33:42.976000+00:00 +Internet,LEFT_case-6177,2011-04-08 00:00:00+00:00,General,2011-04-06 13:57:14.410000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource08,2010-12-06 00:00:00.010000+00:00,task-14196,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-18 08:43:48.512000+00:00 +Internet,LEFT_case-6177,2011-04-08 00:00:00+00:00,General,2011-04-06 13:57:14.410000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource08,2010-12-06 00:00:00.010000+00:00,task-16687,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-03-18 08:47:03.966000+00:00 +Internet,LEFT_case-6177,2011-04-08 00:00:00+00:00,General,2011-04-06 13:57:14.410000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource08,2010-12-06 00:00:00.010000+00:00,task-16686,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-18 08:49:12.821000+00:00 +Internet,LEFT_case-6209,2011-04-22 01:06:40+00:00,General,2011-04-12 11:40:18.410000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-14374,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:00:22.304000+00:00 +Internet,LEFT_case-6209,2011-04-22 01:06:40+00:00,General,2011-04-12 11:40:18.410000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-17488,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:01:02.490000+00:00 +Internet,LEFT_case-6209,2011-04-22 01:06:40+00:00,General,2011-04-12 11:40:18.410000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-17487,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-24 14:38:07.063000+00:00 +Internet,LEFT_case-6212,2011-04-22 00:00:00+00:00,General,2011-04-12 11:12:37.664000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-14399,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:05:45.728000+00:00 +Internet,LEFT_case-6212,2011-04-22 00:00:00+00:00,General,2011-04-12 11:12:37.664000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-17494,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:06:15.166000+00:00 +Internet,LEFT_case-6212,2011-04-22 00:00:00+00:00,General,2011-04-12 11:12:37.664000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-17493,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-24 15:11:22.488000+00:00 +Internet,LEFT_case-6215,2011-04-22 00:00:00+00:00,General,2011-03-30 12:25:31.869000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource02,2011-02-25 00:00:00.010000+00:00,task-14489,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-03 11:11:27.996000+00:00 +Internet,LEFT_case-6215,2011-04-22 00:00:00+00:00,General,2011-03-30 12:25:31.869000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource02,2011-02-25 00:00:00.010000+00:00,task-15044,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-03 11:37:25.886000+00:00 +Internet,LEFT_case-6215,2011-04-22 00:00:00+00:00,General,2011-03-30 12:25:31.869000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource02,2011-02-25 00:00:00.010000+00:00,task-15045,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-03 14:51:02.665000+00:00 +Internet,LEFT_case-6216,2011-06-10 01:06:40+00:00,General,2011-05-17 15:14:34.635000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-14551,Confirmation of receipt,complete,EMPTY,Resource18,2011-03-07 10:49:17.828000+00:00 +Internet,LEFT_case-6216,2011-06-10 01:06:40+00:00,General,2011-05-17 15:14:34.635000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-15307,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-03-07 10:49:42.826000+00:00 +Internet,LEFT_case-6216,2011-06-10 01:06:40+00:00,General,2011-05-17 15:14:34.635000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-15306,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-03-07 10:50:04.880000+00:00 +Internet,LEFT_case-6217,2011-04-22 00:00:00+00:00,General,2011-04-07 15:22:44.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource18,2011-02-25 00:00:00.010000+00:00,task-14554,Confirmation of receipt,complete,EMPTY,Resource18,2011-03-02 11:42:20.454000+00:00 +Internet,LEFT_case-6217,2011-04-22 00:00:00+00:00,General,2011-04-07 15:22:44.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource18,2011-02-25 00:00:00.010000+00:00,task-14954,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-03-02 11:42:44.924000+00:00 +Internet,LEFT_case-6217,2011-04-22 00:00:00+00:00,General,2011-04-07 15:22:44.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource18,2011-02-25 00:00:00.010000+00:00,task-14953,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-03-02 11:43:12.337000+00:00 +Internet,LEFT_case-6223,2011-04-22 00:00:00+00:00,General,2011-05-12 08:16:32.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-14613,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 14:03:10.408000+00:00 +Internet,LEFT_case-6223,2011-04-22 00:00:00+00:00,General,2011-05-12 08:16:32.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-16451,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 14:03:34.914000+00:00 +Internet,LEFT_case-6223,2011-04-22 00:00:00+00:00,General,2011-05-12 08:16:32.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-16450,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-24 15:25:33.420000+00:00 +Internet,LEFT_case-6225,2011-04-22 01:06:40+00:00,General,2011-03-23 14:46:49.016000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource02,2011-02-25 01:06:40.010000+00:00,task-14615,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-04 09:26:31.928000+00:00 +Internet,LEFT_case-6225,2011-04-22 01:06:40+00:00,General,2011-03-23 14:46:49.016000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource02,2011-02-25 01:06:40.010000+00:00,task-15171,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-04 10:09:04.342000+00:00 +Internet,LEFT_case-6225,2011-04-22 01:06:40+00:00,General,2011-03-23 14:46:49.016000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource02,2011-02-25 01:06:40.010000+00:00,task-15172,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-04 10:39:14.353000+00:00 +Internet,LEFT_case-6226,2011-04-23 00:00:00+00:00,General,2011-03-21 10:21:24.593000+00:00,2011-04-23 00:00:00.020000+00:00,,Resource15,2011-02-26 00:00:00.010000+00:00,task-14616,Confirmation of receipt,complete,EMPTY,Resource15,2011-03-02 13:55:59.454000+00:00 +Internet,LEFT_case-6226,2011-04-23 00:00:00+00:00,General,2011-03-21 10:21:24.593000+00:00,2011-04-23 00:00:00.020000+00:00,,Resource15,2011-02-26 00:00:00.010000+00:00,task-14970,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-03-02 14:00:21.667000+00:00 +Internet,LEFT_case-6226,2011-04-23 00:00:00+00:00,General,2011-03-21 10:21:24.593000+00:00,2011-04-23 00:00:00.020000+00:00,,Resource15,2011-02-26 00:00:00.010000+00:00,task-15234,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-07 14:31:56.274000+00:00 +Internet,LEFT_case-6234,2011-05-07 01:06:40+00:00,General,2011-05-02 12:54:01.947000+00:00,2011-05-07 01:06:40.020000+00:00,,Resource11,2011-02-27 01:06:40.010000+00:00,task-14689,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 14:15:53.935000+00:00 +Internet,LEFT_case-6234,2011-05-07 01:06:40+00:00,General,2011-05-02 12:54:01.947000+00:00,2011-05-07 01:06:40.020000+00:00,,Resource11,2011-02-27 01:06:40.010000+00:00,task-16459,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 14:16:24.507000+00:00 +Internet,LEFT_case-6234,2011-05-07 01:06:40+00:00,General,2011-05-02 12:54:01.947000+00:00,2011-05-07 01:06:40.020000+00:00,,Resource11,2011-02-27 01:06:40.010000+00:00,task-16458,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-24 15:40:00.365000+00:00 +Internet,LEFT_case-6235,2011-04-21 01:06:40+00:00,General,2011-04-06 12:16:19.764000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource11,2011-02-24 01:06:40.010000+00:00,task-14698,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 13:56:44.109000+00:00 +Internet,LEFT_case-6235,2011-04-21 01:06:40+00:00,General,2011-04-06 12:16:19.764000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource11,2011-02-24 01:06:40.010000+00:00,task-16446,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 13:57:14.633000+00:00 +Internet,LEFT_case-6235,2011-04-21 01:06:40+00:00,General,2011-04-06 12:16:19.764000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource11,2011-02-24 01:06:40.010000+00:00,task-16445,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-24 14:28:05.341000+00:00 +Internet,LEFT_case-6241,2011-04-20 01:06:40+00:00,General,2011-04-06 15:36:52.448000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-14789,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-03 10:58:15.051000+00:00 +Internet,LEFT_case-6241,2011-04-20 01:06:40+00:00,General,2011-04-06 15:36:52.448000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-15038,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-03 10:58:48.540000+00:00 +Internet,LEFT_case-6241,2011-04-20 01:06:40+00:00,General,2011-04-06 15:36:52.448000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-15037,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-03 13:30:55.551000+00:00 +Internet,LEFT_case-6246,2011-06-07 01:06:40+00:00,General,2011-05-30 12:08:55.438000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-14814,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 09:25:54.441000+00:00 +Internet,LEFT_case-6246,2011-06-07 01:06:40+00:00,General,2011-05-30 12:08:55.438000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-16515,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-17 09:36:55.354000+00:00 +Internet,LEFT_case-6246,2011-06-07 01:06:40+00:00,General,2011-05-30 12:08:55.438000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-16516,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-17 09:54:25.550000+00:00 +Internet,LEFT_case-6251,2011-04-20 01:06:40+00:00,General,2011-05-12 07:13:17.541000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-14819,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 13:36:08.610000+00:00 +Internet,LEFT_case-6251,2011-04-20 01:06:40+00:00,General,2011-05-12 07:13:17.541000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-16435,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 13:36:35.137000+00:00 +Internet,LEFT_case-6251,2011-04-20 01:06:40+00:00,General,2011-05-12 07:13:17.541000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-16434,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 12:43:21.644000+00:00 +Internet,LEFT_case-6258,2011-04-27 01:06:40+00:00,General,2011-04-13 08:29:20.365000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource34,2011-03-02 01:06:40.010000+00:00,task-14962,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:10:31.842000+00:00 +Internet,LEFT_case-6258,2011-04-27 01:06:40+00:00,General,2011-04-13 08:29:20.365000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource34,2011-03-02 01:06:40.010000+00:00,task-17498,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:10:58.510000+00:00 +Internet,LEFT_case-6258,2011-04-27 01:06:40+00:00,General,2011-04-13 08:29:20.365000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource34,2011-03-02 01:06:40.010000+00:00,task-17497,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 13:43:40.177000+00:00 +Internet,LEFT_case-6259,2011-04-27 01:06:40+00:00,General,2011-04-12 11:06:44.831000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-14966,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:30:18.063000+00:00 +Internet,LEFT_case-6259,2011-04-27 01:06:40+00:00,General,2011-04-12 11:06:44.831000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-17508,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:30:51.601000+00:00 +Internet,LEFT_case-6259,2011-04-27 01:06:40+00:00,General,2011-04-12 11:06:44.831000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-17507,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 13:54:46.065000+00:00 +Internet,LEFT_case-6262,2011-04-27 01:06:40+00:00,General,2011-04-12 11:02:08.639000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-14973,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:39:50.320000+00:00 +Internet,LEFT_case-6262,2011-04-27 01:06:40+00:00,General,2011-04-12 11:02:08.639000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-17512,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:40:18.159000+00:00 +Internet,LEFT_case-6262,2011-04-27 01:06:40+00:00,General,2011-04-12 11:02:08.639000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-17511,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 14:06:27.530000+00:00 +Internet,LEFT_case-6279,2011-04-28 00:00:00+00:00,General,2011-08-18 08:44:13.497000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource21,2011-03-03 00:00:00.010000+00:00,task-15104,Confirmation of receipt,complete,Group 1,Resource21,2011-03-03 13:02:09.062000+00:00 +Internet,LEFT_case-6279,2011-04-28 00:00:00+00:00,General,2011-08-18 08:44:13.497000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource21,2011-03-03 00:00:00.010000+00:00,task-15630,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-03-09 12:13:20.976000+00:00 +Internet,LEFT_case-6279,2011-04-28 00:00:00+00:00,General,2011-08-18 08:44:13.497000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource21,2011-03-03 00:00:00.010000+00:00,task-15114,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-08-18 08:44:14.462000+00:00 +Internet,LEFT_case-6292,2011-04-12 00:00:00+00:00,General,2011-04-13 08:13:28.262000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-15169,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-10 13:08:32.931000+00:00 +Internet,LEFT_case-6292,2011-04-12 00:00:00+00:00,General,2011-04-13 08:13:28.262000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-15794,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-10 13:09:33.239000+00:00 +Internet,LEFT_case-6292,2011-04-12 00:00:00+00:00,General,2011-04-13 08:13:28.262000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-15793,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-10 13:09:58.753000+00:00 +Desk,LEFT_case-6297,2011-05-25 01:06:40+00:00,General,2011-10-18 10:30:07.730000+00:00,2011-05-25 01:06:40.020000+00:00,Group 5,Resource02,2011-02-16 01:06:40.010000+00:00,task-15232,Confirmation of receipt,complete,EMPTY,Resource15,2011-03-10 08:56:43.057000+00:00 +Desk,LEFT_case-6297,2011-05-25 01:06:40+00:00,General,2011-10-18 10:30:07.730000+00:00,2011-05-25 01:06:40.020000+00:00,Group 5,Resource02,2011-02-16 01:06:40.010000+00:00,task-15687,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-03-10 08:57:34.633000+00:00 +Desk,LEFT_case-6297,2011-05-25 01:06:40+00:00,General,2011-10-18 10:30:07.730000+00:00,2011-05-25 01:06:40.020000+00:00,Group 5,Resource02,2011-02-16 01:06:40.010000+00:00,task-16074,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-14 12:41:16.175000+00:00 +Internet,LEFT_case-6315,2011-04-27 00:00:00+00:00,General,2011-04-26 08:42:34.517000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-15298,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 14:24:05.757000+00:00 +Internet,LEFT_case-6315,2011-04-27 00:00:00+00:00,General,2011-04-26 08:42:34.517000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-16477,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 14:24:41.835000+00:00 +Internet,LEFT_case-6315,2011-04-27 00:00:00+00:00,General,2011-04-26 08:42:34.517000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-16476,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 14:49:13.323000+00:00 +Internet,LEFT_case-6315,2011-04-27 00:00:00+00:00,General,2011-04-26 08:42:34.517000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-21851,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-04-21 12:49:32.785000+00:00 +Internet,LEFT_case-6315,2011-04-27 00:00:00+00:00,General,2011-04-26 08:42:34.517000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-21867,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-04-21 13:51:09.121000+00:00 +Internet,LEFT_case-6317,2011-04-28 00:00:00+00:00,General,2011-04-12 10:52:22.399000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-15313,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:44:52.459000+00:00 +Internet,LEFT_case-6317,2011-04-28 00:00:00+00:00,General,2011-04-12 10:52:22.399000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17518,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:46:03.263000+00:00 +Internet,LEFT_case-6317,2011-04-28 00:00:00+00:00,General,2011-04-12 10:52:22.399000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17516,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 14:25:57.841000+00:00 +Internet,LEFT_case-6319,2011-04-27 00:00:00+00:00,General,2011-03-09 11:40:43.035000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource04,2011-03-02 00:00:00.010000+00:00,task-15317,Confirmation of receipt,complete,Group 1,Resource04,2011-03-07 13:36:57.093000+00:00 +Internet,LEFT_case-6319,2011-04-27 00:00:00+00:00,General,2011-03-09 11:40:43.035000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource04,2011-03-02 00:00:00.010000+00:00,task-15326,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-07 13:48:36.190000+00:00 +Internet,LEFT_case-6319,2011-04-27 00:00:00+00:00,General,2011-03-09 11:40:43.035000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource04,2011-03-02 00:00:00.010000+00:00,task-15333,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-07 13:52:06.444000+00:00 +Internet,LEFT_case-6319,2011-04-27 00:00:00+00:00,General,2011-03-09 11:40:43.035000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource04,2011-03-02 00:00:00.010000+00:00,task-15335,T11 Create document X request unlicensed,complete,Group 1,Resource04,2011-03-07 13:52:25.633000+00:00 +Internet,LEFT_case-6319,2011-04-27 00:00:00+00:00,General,2011-03-09 11:40:43.035000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource04,2011-03-02 00:00:00.010000+00:00,task-15342,T14 Determine document X request unlicensed,complete,EMPTY,Resource10,2011-03-07 16:51:33.418000+00:00 +Internet,LEFT_case-6320,2011-04-28 00:00:00+00:00,General,2011-04-26 08:43:45.444000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-15321,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 10:19:50.916000+00:00 +Internet,LEFT_case-6320,2011-04-28 00:00:00+00:00,General,2011-04-26 08:43:45.444000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17525,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 10:20:57.418000+00:00 +Internet,LEFT_case-6320,2011-04-28 00:00:00+00:00,General,2011-04-26 08:43:45.444000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17524,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 14:57:40.052000+00:00 +Internet,LEFT_case-6320,2011-04-28 00:00:00+00:00,General,2011-04-26 08:43:45.444000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-21868,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-04-21 12:56:59.950000+00:00 +Internet,LEFT_case-6320,2011-04-28 00:00:00+00:00,General,2011-04-26 08:43:45.444000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-21870,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-04-21 13:56:47.101000+00:00 +Internet,LEFT_case-6322,2011-04-28 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-15343,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 10:31:41.008000+00:00 +Internet,LEFT_case-6322,2011-04-28 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17532,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 10:33:16.713000+00:00 +Internet,LEFT_case-6322,2011-04-28 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17531,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-03-29 15:41:11.001000+00:00 +Internet,LEFT_case-6324,2011-04-29 00:00:00+00:00,General,2011-04-20 12:01:12.029000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource11,2011-03-04 00:00:00.010000+00:00,task-15358,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 10:38:43.588000+00:00 +Internet,LEFT_case-6324,2011-04-29 00:00:00+00:00,General,2011-04-20 12:01:12.029000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource11,2011-03-04 00:00:00.010000+00:00,task-17538,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 10:39:17.708000+00:00 +Internet,LEFT_case-6324,2011-04-29 00:00:00+00:00,General,2011-04-20 12:01:12.029000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource11,2011-03-04 00:00:00.010000+00:00,task-17537,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-06 09:31:26.349000+00:00 +Internet,LEFT_case-6326,2011-06-23 01:06:40+00:00,General,2011-06-29 16:30:05.642000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-03-04 01:06:40.010000+00:00,task-15386,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-08 11:45:20.444000+00:00 +Internet,LEFT_case-6326,2011-06-23 01:06:40+00:00,General,2011-06-29 16:30:05.642000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-03-04 01:06:40.010000+00:00,task-15508,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-08 11:46:24.986000+00:00 +Internet,LEFT_case-6326,2011-06-23 01:06:40+00:00,General,2011-06-29 16:30:05.642000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-03-04 01:06:40.010000+00:00,task-15507,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-08 11:46:53.439000+00:00 +Internet,LEFT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-15433,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 10:45:41.418000+00:00 +Internet,LEFT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-17542,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 10:46:13.946000+00:00 +Internet,LEFT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-17541,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-06 10:06:24.073000+00:00 +Internet,LEFT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19233,T16 Report reasons to hold request,complete,Group 1,Resource11,2011-04-06 14:14:40.223000+00:00 +Internet,LEFT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19324,T18 Adjust report Y to stop indicition,complete,Group 1,Resource11,2011-04-06 14:15:31.424000+00:00 +Internet,LEFT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19326,T18 Adjust report Y to stop indicition,complete,Group 1,Resource11,2011-04-06 14:16:29.966000+00:00 +Internet,LEFT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19328,T18 Adjust report Y to stop indicition,complete,Group 1,Resource11,2011-04-06 14:17:34.132000+00:00 +Internet,LEFT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19330,T18 Adjust report Y to stop indicition,complete,Group 1,Resource11,2011-04-06 14:19:25.491000+00:00 +Internet,LEFT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19332,T19 Determine report Y to stop indication,complete,Group 3,Resource11,2011-04-06 14:19:53.076000+00:00 +Internet,LEFT_case-6339,2011-06-01 01:06:40+00:00,General,2011-06-20 15:22:26.262000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource15,2011-03-06 01:06:40.010000+00:00,task-15448,Confirmation of receipt,complete,EMPTY,Resource15,2011-03-10 14:19:56.082000+00:00 +Internet,LEFT_case-6339,2011-06-01 01:06:40+00:00,General,2011-06-20 15:22:26.262000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource15,2011-03-06 01:06:40.010000+00:00,task-15828,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-03-10 14:24:42.827000+00:00 +Internet,LEFT_case-6339,2011-06-01 01:06:40+00:00,General,2011-06-20 15:22:26.262000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource15,2011-03-06 01:06:40.010000+00:00,task-16598,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-03-17 12:14:45.083000+00:00 +Internet,LEFT_case-6343,2011-05-01 00:00:00+00:00,General,2011-03-10 16:06:00.711000+00:00,2011-05-01 00:00:00.020000+00:00,,Resource02,2011-03-06 00:00:00.010000+00:00,task-15489,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-10 14:48:56.527000+00:00 +Internet,LEFT_case-6343,2011-05-01 00:00:00+00:00,General,2011-03-10 16:06:00.711000+00:00,2011-05-01 00:00:00.020000+00:00,,Resource02,2011-03-06 00:00:00.010000+00:00,task-15845,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-10 14:49:28.279000+00:00 +Internet,LEFT_case-6343,2011-05-01 00:00:00+00:00,General,2011-03-10 16:06:00.711000+00:00,2011-05-01 00:00:00.020000+00:00,,Resource02,2011-03-06 00:00:00.010000+00:00,task-15843,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-10 14:50:26.819000+00:00 +Internet,LEFT_case-6343,2011-05-01 00:00:00+00:00,General,2011-03-10 16:06:00.711000+00:00,2011-05-01 00:00:00.020000+00:00,,Resource02,2011-03-06 00:00:00.010000+00:00,task-15854,T11 Create document X request unlicensed,complete,Group 1,Resource02,2011-03-10 16:05:05.115000+00:00 +Internet,LEFT_case-6343,2011-05-01 00:00:00+00:00,General,2011-03-10 16:06:00.711000+00:00,2011-05-01 00:00:00.020000+00:00,,Resource02,2011-03-06 00:00:00.010000+00:00,task-15858,T14 Determine document X request unlicensed,complete,Group 3,Resource02,2011-03-10 16:05:50.620000+00:00 +Internet,LEFT_case-6345,2011-04-20 01:06:40+00:00,General,2011-03-29 10:21:56.682000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource05,2011-02-23 01:06:40.010000+00:00,task-15528,Confirmation of receipt,complete,EMPTY,Resource05,2011-03-16 09:08:00.882000+00:00 +Internet,LEFT_case-6345,2011-04-20 01:06:40+00:00,General,2011-03-29 10:21:56.682000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource05,2011-02-23 01:06:40.010000+00:00,task-16310,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-03-16 09:08:19.734000+00:00 +Internet,LEFT_case-6345,2011-04-20 01:06:40+00:00,General,2011-03-29 10:21:56.682000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource05,2011-02-23 01:06:40.010000+00:00,task-16312,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-03-16 09:14:53.973000+00:00 +Internet,LEFT_case-6347,2011-04-13 00:00:00+00:00,General,2011-04-12 11:45:11.374000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource04,2011-02-16 00:00:00.010000+00:00,task-15541,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-09 14:39:11.807000+00:00 +Internet,LEFT_case-6347,2011-04-13 00:00:00+00:00,General,2011-04-12 11:45:11.374000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource04,2011-02-16 00:00:00.010000+00:00,task-15638,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-09 14:39:56.499000+00:00 +Internet,LEFT_case-6347,2011-04-13 00:00:00+00:00,General,2011-04-12 11:45:11.374000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource04,2011-02-16 00:00:00.010000+00:00,task-15640,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-09 14:53:07.472000+00:00 +Internet,LEFT_case-6357,2011-04-28 01:06:40+00:00,General,2011-03-21 09:43:11.638000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource05,2011-03-03 01:06:40.010000+00:00,task-15595,Confirmation of receipt,complete,EMPTY,Resource05,2011-03-16 10:31:36.855000+00:00 +Internet,LEFT_case-6357,2011-04-28 01:06:40+00:00,General,2011-03-21 09:43:11.638000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource05,2011-03-03 01:06:40.010000+00:00,task-16388,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-03-16 10:32:08.125000+00:00 +Internet,LEFT_case-6357,2011-04-28 01:06:40+00:00,General,2011-03-21 09:43:11.638000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource05,2011-03-03 01:06:40.010000+00:00,task-16387,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-03-16 10:32:35.840000+00:00 +Internet,LEFT_case-6357,2011-04-28 01:06:40+00:00,General,2011-03-21 09:43:11.638000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource05,2011-03-03 01:06:40.010000+00:00,task-16392,T11 Create document X request unlicensed,complete,Group 1,Resource05,2011-03-17 10:42:26.537000+00:00 +Internet,LEFT_case-6357,2011-04-28 01:06:40+00:00,General,2011-03-21 09:43:11.638000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource05,2011-03-03 01:06:40.010000+00:00,task-16559,T14 Determine document X request unlicensed,complete,Group 3,Resource05,2011-03-17 10:42:53.564000+00:00 +Internet,LEFT_case-6363,2011-04-15 01:06:40+00:00,General,2011-04-12 12:06:58.622000+00:00,2011-04-15 01:06:40.020000+00:00,,Resource11,2011-02-18 01:06:40.010000+00:00,task-15650,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 10:22:42.986000+00:00 +Internet,LEFT_case-6363,2011-04-15 01:06:40+00:00,General,2011-04-12 12:06:58.622000+00:00,2011-04-15 01:06:40.020000+00:00,,Resource11,2011-02-18 01:06:40.010000+00:00,task-16364,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 10:23:10.215000+00:00 +Internet,LEFT_case-6363,2011-04-15 01:06:40+00:00,General,2011-04-12 12:06:58.622000+00:00,2011-04-15 01:06:40.020000+00:00,,Resource11,2011-02-18 01:06:40.010000+00:00,task-16362,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-16 10:27:36.826000+00:00 +Internet,LEFT_case-6366,2011-06-13 01:06:40+00:00,General,2011-05-31 11:21:14.607000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource04,2011-02-22 01:06:40.010000+00:00,task-15658,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-15 16:56:23.105000+00:00 +Internet,LEFT_case-6366,2011-06-13 01:06:40+00:00,General,2011-05-31 11:21:14.607000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource04,2011-02-22 01:06:40.010000+00:00,task-16253,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-15 16:56:48.465000+00:00 +Internet,LEFT_case-6366,2011-06-13 01:06:40+00:00,General,2011-05-31 11:21:14.607000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource04,2011-02-22 01:06:40.010000+00:00,task-16252,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-15 16:57:07.681000+00:00 +Internet,LEFT_case-6374,2011-05-03 00:00:00+00:00,General,2011-08-19 09:01:30.370000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource12,2011-03-08 00:00:00.010000+00:00,task-15681,Confirmation of receipt,complete,EMPTY,Resource12,2011-03-14 14:45:01.445000+00:00 +Internet,LEFT_case-6374,2011-05-03 00:00:00+00:00,General,2011-08-19 09:01:30.370000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource12,2011-03-08 00:00:00.010000+00:00,task-16595,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-03-17 12:37:46.103000+00:00 +Internet,LEFT_case-6374,2011-05-03 00:00:00+00:00,General,2011-08-19 09:01:30.370000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource12,2011-03-08 00:00:00.010000+00:00,task-16100,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-19 08:04:16.027000+00:00 +Internet,LEFT_case-6374,2011-05-03 00:00:00+00:00,General,2011-08-19 09:01:30.370000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource12,2011-03-08 00:00:00.010000+00:00,task-25599,T08 Draft and send request for advice,complete,Group 1,Resource12,2011-05-19 11:57:53.015000+00:00 +Internet,LEFT_case-6374,2011-05-03 00:00:00+00:00,General,2011-08-19 09:01:30.370000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource12,2011-03-08 00:00:00.010000+00:00,task-25694,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-19 12:01:53.824000+00:00 +Internet,LEFT_case-6375,2011-05-03 00:00:00+00:00,General,2011-04-27 11:17:53.563000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource14,2011-03-08 00:00:00.010000+00:00,task-15692,Confirmation of receipt,complete,EMPTY,Resource14,2011-03-21 13:39:45.091000+00:00 +Internet,LEFT_case-6375,2011-05-03 00:00:00+00:00,General,2011-04-27 11:17:53.563000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource14,2011-03-08 00:00:00.010000+00:00,task-17027,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-03-21 13:40:15.552000+00:00 +Internet,LEFT_case-6375,2011-05-03 00:00:00+00:00,General,2011-04-27 11:17:53.563000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource14,2011-03-08 00:00:00.010000+00:00,task-17097,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-21 20:44:54.592000+00:00 +Internet,LEFT_case-6378,2011-07-01 01:06:40+00:00,General,2011-06-16 13:55:21.953000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource02,2011-03-09 01:06:40.010000+00:00,task-15739,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-11 14:58:30.063000+00:00 +Internet,LEFT_case-6378,2011-07-01 01:06:40+00:00,General,2011-06-16 13:55:21.953000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource02,2011-03-09 01:06:40.010000+00:00,task-15947,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-11 14:59:09.837000+00:00 +Internet,LEFT_case-6378,2011-07-01 01:06:40+00:00,General,2011-06-16 13:55:21.953000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource02,2011-03-09 01:06:40.010000+00:00,task-15948,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-11 15:39:35.315000+00:00 +Internet,LEFT_case-6379,2011-05-11 01:06:40+00:00,General,2011-05-09 16:26:24.721000+00:00,2011-05-11 01:06:40.020000+00:00,,Resource04,2011-03-09 01:06:40.010000+00:00,task-15740,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-24 14:36:59.627000+00:00 +Internet,LEFT_case-6379,2011-05-11 01:06:40+00:00,General,2011-05-09 16:26:24.721000+00:00,2011-05-11 01:06:40.020000+00:00,,Resource04,2011-03-09 01:06:40.010000+00:00,task-17657,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-24 14:37:55.570000+00:00 +Internet,LEFT_case-6379,2011-05-11 01:06:40+00:00,General,2011-05-09 16:26:24.721000+00:00,2011-05-11 01:06:40.020000+00:00,,Resource04,2011-03-09 01:06:40.010000+00:00,task-17659,T04 Determine confirmation of receipt,complete,EMPTY,Resource04,2011-04-21 10:45:39.546000+00:00 +Internet,LEFT_case-6380,2011-05-04 00:00:00+00:00,General,2011-04-20 11:24:44.730000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-15762,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 10:59:14.184000+00:00 +Internet,LEFT_case-6380,2011-05-04 00:00:00+00:00,General,2011-04-20 11:24:44.730000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-17549,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 10:59:44.022000+00:00 +Internet,LEFT_case-6380,2011-05-04 00:00:00+00:00,General,2011-04-20 11:24:44.730000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-17548,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-06 10:48:27.359000+00:00 +Internet,LEFT_case-6381,2011-05-04 00:00:00+00:00,General,2011-04-18 08:15:41.589000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-15801,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:04:53.722000+00:00 +Internet,LEFT_case-6381,2011-05-04 00:00:00+00:00,General,2011-04-18 08:15:41.589000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-17554,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:05:22.308000+00:00 +Internet,LEFT_case-6381,2011-05-04 00:00:00+00:00,General,2011-04-18 08:15:41.589000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-17553,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-06 11:06:49.250000+00:00 +Internet,LEFT_case-6382,2011-05-04 00:00:00+00:00,General,2011-04-20 11:15:03.092000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-15803,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-28 15:10:34.271000+00:00 +Internet,LEFT_case-6382,2011-05-04 00:00:00+00:00,General,2011-04-20 11:15:03.092000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-18566,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-31 15:11:59.469000+00:00 +Internet,LEFT_case-6382,2011-05-04 00:00:00+00:00,General,2011-04-20 11:15:03.092000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-18091,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-13 10:09:03.032000+00:00 +Internet,LEFT_case-6383,2011-05-04 00:00:00+00:00,General,2011-05-03 11:47:54.952000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource05,2011-03-09 00:00:00.010000+00:00,task-15817,Confirmation of receipt,complete,EMPTY,Resource05,2011-03-23 10:31:11.571000+00:00 +Internet,LEFT_case-6383,2011-05-04 00:00:00+00:00,General,2011-05-03 11:47:54.952000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource05,2011-03-09 00:00:00.010000+00:00,task-17346,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-03-23 10:31:47.783000+00:00 +Internet,LEFT_case-6383,2011-05-04 00:00:00+00:00,General,2011-05-03 11:47:54.952000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource05,2011-03-09 00:00:00.010000+00:00,task-17345,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-03-23 10:33:59.691000+00:00 +Internet,LEFT_case-6384,2011-03-30 00:00:00+00:00,General,2011-03-11 15:56:41.344000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource01,2011-02-02 00:00:00.010000+00:00,task-15818,Confirmation of receipt,complete,EMPTY,admin2,2011-03-11 15:56:42.040000+00:00 +Internet,LEFT_case-6385,2011-05-04 00:00:00+00:00,General,2011-04-21 08:58:31.264000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource08,2011-03-09 00:00:00.010000+00:00,task-15819,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 10:55:11.230000+00:00 +Internet,LEFT_case-6385,2011-05-04 00:00:00+00:00,General,2011-04-21 08:58:31.264000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource08,2011-03-09 00:00:00.010000+00:00,task-16563,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-17 11:05:13.385000+00:00 +Internet,LEFT_case-6385,2011-05-04 00:00:00+00:00,General,2011-04-21 08:58:31.264000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource08,2011-03-09 00:00:00.010000+00:00,task-16568,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-17 11:05:28.030000+00:00 +Internet,LEFT_case-6386,2011-05-17 01:06:40+00:00,General,2011-04-21 13:54:07.106000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource02,2011-02-22 01:06:40.010000+00:00,task-15841,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-18 08:08:34.304000+00:00 +Internet,LEFT_case-6386,2011-05-17 01:06:40+00:00,General,2011-04-21 13:54:07.106000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource02,2011-02-22 01:06:40.010000+00:00,task-16676,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-18 08:09:10.789000+00:00 +Internet,LEFT_case-6386,2011-05-17 01:06:40+00:00,General,2011-04-21 13:54:07.106000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource02,2011-02-22 01:06:40.010000+00:00,task-16675,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-18 08:23:16.197000+00:00 +Internet,LEFT_case-6387,2011-05-05 00:00:00+00:00,General,2011-04-01 14:54:09.591000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource17,2011-03-10 00:00:00.010000+00:00,task-15844,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-21 14:05:50.672000+00:00 +Internet,LEFT_case-6387,2011-05-05 00:00:00+00:00,General,2011-04-01 14:54:09.591000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource17,2011-03-10 00:00:00.010000+00:00,task-17043,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-21 14:06:03.322000+00:00 +Internet,LEFT_case-6387,2011-05-05 00:00:00+00:00,General,2011-04-01 14:54:09.591000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource17,2011-03-10 00:00:00.010000+00:00,task-17049,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-21 20:40:48.032000+00:00 +Internet,LEFT_case-6388,2011-04-22 01:06:40+00:00,General,2011-04-20 10:57:13.852000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-15851,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 14:06:20.555000+00:00 +Internet,LEFT_case-6388,2011-04-22 01:06:40+00:00,General,2011-04-20 10:57:13.852000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-16455,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 14:06:49.523000+00:00 +Internet,LEFT_case-6388,2011-04-22 01:06:40+00:00,General,2011-04-20 10:57:13.852000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-16454,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-06 08:03:30.605000+00:00 +Internet,LEFT_case-6389,2011-05-05 00:00:00+00:00,General,2011-05-02 08:36:22.633000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-15852,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:20:25.179000+00:00 +Internet,LEFT_case-6389,2011-05-05 00:00:00+00:00,General,2011-05-02 08:36:22.633000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17558,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:21:00.083000+00:00 +Internet,LEFT_case-6389,2011-05-05 00:00:00+00:00,General,2011-05-02 08:36:22.633000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17557,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-07 08:08:11.893000+00:00 +Internet,LEFT_case-6390,2011-05-05 00:00:00+00:00,General,2011-04-18 08:08:51.714000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-15853,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:27:28.459000+00:00 +Internet,LEFT_case-6390,2011-05-05 00:00:00+00:00,General,2011-04-18 08:08:51.714000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17562,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:28:03.232000+00:00 +Internet,LEFT_case-6390,2011-05-05 00:00:00+00:00,General,2011-04-18 08:08:51.714000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17561,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-07 09:07:03.482000+00:00 +Internet,LEFT_case-6391,2011-06-06 01:06:40+00:00,General,2011-04-21 17:10:22.871000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-15855,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-21 14:25:02.773000+00:00 +Internet,LEFT_case-6391,2011-06-06 01:06:40+00:00,General,2011-04-21 17:10:22.871000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-17054,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-21 14:25:53.604000+00:00 +Internet,LEFT_case-6391,2011-06-06 01:06:40+00:00,General,2011-04-21 17:10:22.871000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-17055,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-21 20:42:14.588000+00:00 +Internet,LEFT_case-6407,2011-05-05 00:00:00+00:00,General,2011-04-26 09:22:50.149000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-15895,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:35:13.025000+00:00 +Internet,LEFT_case-6407,2011-05-05 00:00:00+00:00,General,2011-04-26 09:22:50.149000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17566,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:35:45.161000+00:00 +Internet,LEFT_case-6407,2011-05-05 00:00:00+00:00,General,2011-04-26 09:22:50.149000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17565,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-07 09:25:22.643000+00:00 +Internet,LEFT_case-6411,2011-06-30 01:06:40+00:00,General,2011-06-30 12:17:32.708000+00:00,2011-06-30 01:06:40.020000+00:00,,Resource18,2011-03-11 01:06:40.010000+00:00,task-15904,Confirmation of receipt,complete,EMPTY,Resource18,2011-03-14 15:35:19.672000+00:00 +Internet,LEFT_case-6411,2011-06-30 01:06:40+00:00,General,2011-06-30 12:17:32.708000+00:00,2011-06-30 01:06:40.020000+00:00,,Resource18,2011-03-11 01:06:40.010000+00:00,task-16110,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-14 16:31:03.092000+00:00 +Internet,LEFT_case-6411,2011-06-30 01:06:40+00:00,General,2011-06-30 12:17:32.708000+00:00,2011-06-30 01:06:40.020000+00:00,,Resource18,2011-03-11 01:06:40.010000+00:00,task-16104,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-03-22 15:24:41.524000+00:00 +Internet,LEFT_case-6413,2011-05-06 01:06:40+00:00,General,2011-05-04 16:12:17.687000+00:00,2011-05-06 01:06:40.020000+00:00,,Resource08,2011-03-11 01:06:40.010000+00:00,task-15919,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 15:45:51.260000+00:00 +Internet,LEFT_case-6413,2011-05-06 01:06:40+00:00,General,2011-05-04 16:12:17.687000+00:00,2011-05-06 01:06:40.020000+00:00,,Resource08,2011-03-11 01:06:40.010000+00:00,task-16655,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-17 16:09:07.952000+00:00 +Internet,LEFT_case-6413,2011-05-06 01:06:40+00:00,General,2011-05-04 16:12:17.687000+00:00,2011-05-06 01:06:40.020000+00:00,,Resource08,2011-03-11 01:06:40.010000+00:00,task-16654,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-22 14:15:45.552000+00:00 +Internet,LEFT_case-6413,2011-05-06 01:06:40+00:00,General,2011-05-04 16:12:17.687000+00:00,2011-05-06 01:06:40.020000+00:00,,Resource08,2011-03-11 01:06:40.010000+00:00,task-17210,T16 Report reasons to hold request,complete,Group 1,Resource08,2011-03-22 14:18:06.052000+00:00 +Internet,LEFT_case-6413,2011-05-06 01:06:40+00:00,General,2011-05-04 16:12:17.687000+00:00,2011-05-06 01:06:40.020000+00:00,,Resource08,2011-03-11 01:06:40.010000+00:00,task-17215,T19 Determine report Y to stop indication,complete,EMPTY,Resource08,2011-03-22 14:19:09.344000+00:00 +Desk,LEFT_case-6415,2011-04-26 01:06:40+00:00,General,2011-04-21 15:00:04.459000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-15939,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 11:26:16.789000+00:00 +Desk,LEFT_case-6415,2011-04-26 01:06:40+00:00,General,2011-04-21 15:00:04.459000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-16585,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-17 11:39:04.143000+00:00 +Desk,LEFT_case-6415,2011-04-26 01:06:40+00:00,General,2011-04-21 15:00:04.459000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-16586,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-17 12:28:28.215000+00:00 +Desk,LEFT_case-6417,2011-04-26 00:00:00+00:00,General,2011-04-26 10:55:15.989000+00:00,2011-04-26 00:00:00.020000+00:00,,Resource17,2011-03-01 00:00:00.010000+00:00,task-15941,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-16 14:16:42.565000+00:00 +Desk,LEFT_case-6417,2011-04-26 00:00:00+00:00,General,2011-04-26 10:55:15.989000+00:00,2011-04-26 00:00:00.020000+00:00,,Resource17,2011-03-01 00:00:00.010000+00:00,task-16462,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-16 14:17:57.267000+00:00 +Desk,LEFT_case-6417,2011-04-26 00:00:00+00:00,General,2011-04-26 10:55:15.989000+00:00,2011-04-26 00:00:00.020000+00:00,,Resource17,2011-03-01 00:00:00.010000+00:00,task-16463,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-16 20:54:53.049000+00:00 +Internet,LEFT_case-6437,2011-05-09 00:00:00+00:00,General,2011-08-18 08:45:49.181000+00:00,2011-05-09 00:00:00.020000+00:00,,Resource21,2011-03-14 00:00:00.010000+00:00,task-16035,Confirmation of receipt,complete,Group 1,Resource21,2011-03-14 10:59:59.290000+00:00 +Internet,LEFT_case-6437,2011-05-09 00:00:00+00:00,General,2011-08-18 08:45:49.181000+00:00,2011-05-09 00:00:00.020000+00:00,,Resource21,2011-03-14 00:00:00.010000+00:00,task-16038,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-08-18 08:45:50.227000+00:00 +Internet,LEFT_case-6438,2011-05-08 00:00:00+00:00,General,2011-05-04 16:15:12.118000+00:00,2011-05-08 00:00:00.020000+00:00,,Resource13,2011-03-13 00:00:00.010000+00:00,task-16036,Confirmation of receipt,complete,EMPTY,Resource13,2011-03-15 12:26:46.532000+00:00 +Internet,LEFT_case-6438,2011-05-08 00:00:00+00:00,General,2011-05-04 16:15:12.118000+00:00,2011-05-08 00:00:00.020000+00:00,,Resource13,2011-03-13 00:00:00.010000+00:00,task-16161,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-03-15 12:42:29.969000+00:00 +Internet,LEFT_case-6438,2011-05-08 00:00:00+00:00,General,2011-05-04 16:15:12.118000+00:00,2011-05-08 00:00:00.020000+00:00,,Resource13,2011-03-13 00:00:00.010000+00:00,task-16169,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource13,2011-03-15 12:45:29.514000+00:00 +Internet,LEFT_case-6438,2011-05-08 00:00:00+00:00,General,2011-05-04 16:15:12.118000+00:00,2011-05-08 00:00:00.020000+00:00,,Resource13,2011-03-13 00:00:00.010000+00:00,task-16170,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-03-15 12:45:48.978000+00:00 +Internet,LEFT_case-6438,2011-05-08 00:00:00+00:00,General,2011-05-04 16:15:12.118000+00:00,2011-05-08 00:00:00.020000+00:00,,Resource13,2011-03-13 00:00:00.010000+00:00,task-16167,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-15 13:00:46.953000+00:00 +Internet,LEFT_case-6459,2011-04-24 00:00:00+00:00,General,2011-04-21 14:24:59.920000+00:00,2011-04-24 00:00:00.020000+00:00,,Resource17,2011-02-27 00:00:00.010000+00:00,task-16271,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-22 12:19:27.628000+00:00 +Internet,LEFT_case-6459,2011-04-24 00:00:00+00:00,General,2011-04-21 14:24:59.920000+00:00,2011-04-24 00:00:00.020000+00:00,,Resource17,2011-02-27 00:00:00.010000+00:00,task-17190,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-22 12:21:07.860000+00:00 +Internet,LEFT_case-6459,2011-04-24 00:00:00+00:00,General,2011-04-21 14:24:59.920000+00:00,2011-04-24 00:00:00.020000+00:00,,Resource17,2011-02-27 00:00:00.010000+00:00,task-17191,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-23 10:00:12.840000+00:00 +Internet,LEFT_case-6471,2011-05-10 01:06:40+00:00,General,2011-05-11 13:43:32.245000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource11,2011-03-15 01:06:40.010000+00:00,task-16314,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:47:16.104000+00:00 +Internet,LEFT_case-6471,2011-05-10 01:06:40+00:00,General,2011-05-11 13:43:32.245000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource11,2011-03-15 01:06:40.010000+00:00,task-17571,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:48:29.478000+00:00 +Internet,LEFT_case-6471,2011-05-10 01:06:40+00:00,General,2011-05-11 13:43:32.245000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource11,2011-03-15 01:06:40.010000+00:00,task-17570,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-07 09:55:21.957000+00:00 +Internet,LEFT_case-6475,2011-05-10 00:00:00+00:00,General,2011-04-18 08:00:57.296000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-16404,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:53:20.647000+00:00 +Internet,LEFT_case-6475,2011-05-10 00:00:00+00:00,General,2011-04-18 08:00:57.296000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-17575,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:54:01.657000+00:00 +Internet,LEFT_case-6475,2011-05-10 00:00:00+00:00,General,2011-04-18 08:00:57.296000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-17574,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-07 12:52:53.268000+00:00 +Internet,LEFT_case-6480,2011-05-10 00:00:00+00:00,General,2011-05-02 11:28:13.405000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-16488,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 13:10:19.436000+00:00 +Internet,LEFT_case-6480,2011-05-10 00:00:00+00:00,General,2011-05-02 11:28:13.405000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-17593,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 13:11:00.180000+00:00 +Internet,LEFT_case-6480,2011-05-10 00:00:00+00:00,General,2011-05-02 11:28:13.405000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-17589,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-13 09:10:48.963000+00:00 +Internet,LEFT_case-6495,2011-05-11 00:00:00+00:00,General,2011-03-31 15:24:59.444000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource02,2011-03-16 00:00:00.010000+00:00,task-16525,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-18 12:02:41.499000+00:00 +Internet,LEFT_case-6495,2011-05-11 00:00:00+00:00,General,2011-03-31 15:24:59.444000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource02,2011-03-16 00:00:00.010000+00:00,task-16822,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-18 12:03:32.093000+00:00 +Internet,LEFT_case-6495,2011-05-11 00:00:00+00:00,General,2011-03-31 15:24:59.444000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource02,2011-03-16 00:00:00.010000+00:00,task-16823,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-18 12:04:24.733000+00:00 +Internet,LEFT_case-6496,2011-05-11 00:00:00+00:00,General,2011-04-07 10:39:01.540000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource05,2011-03-16 00:00:00.010000+00:00,task-16544,Confirmation of receipt,complete,EMPTY,Resource05,2011-03-24 14:20:30.457000+00:00 +Internet,LEFT_case-6496,2011-05-11 00:00:00+00:00,General,2011-04-07 10:39:01.540000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource05,2011-03-16 00:00:00.010000+00:00,task-17639,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-03-28 10:43:34.600000+00:00 +Internet,LEFT_case-6496,2011-05-11 00:00:00+00:00,General,2011-04-07 10:39:01.540000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource05,2011-03-16 00:00:00.010000+00:00,task-17640,T04 Determine confirmation of receipt,complete,EMPTY,Resource05,2011-03-28 10:43:48.234000+00:00 +Internet,LEFT_case-6498,2011-06-22 01:06:40+00:00,General,2011-06-27 08:56:56.974000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource08,2011-03-16 01:06:40.010000+00:00,task-16561,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-24 13:42:52.644000+00:00 +Internet,LEFT_case-6498,2011-06-22 01:06:40+00:00,General,2011-06-27 08:56:56.974000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource08,2011-03-16 01:06:40.010000+00:00,task-17614,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-24 14:10:38.337000+00:00 +Internet,LEFT_case-6498,2011-06-22 01:06:40+00:00,General,2011-06-27 08:56:56.974000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource08,2011-03-16 01:06:40.010000+00:00,task-17613,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-24 14:13:19.441000+00:00 +Desk,LEFT_case-6503,2011-05-02 00:00:00+00:00,Customer contact,2011-03-18 10:02:30.725000+00:00,2011-05-02 00:00:00.020000+00:00,,admin3,2011-03-07 00:00:00.010000+00:00,task-16589,Confirmation of receipt,complete,Group 1,admin2,2011-03-18 10:02:31.892000+00:00 +Desk,LEFT_case-6504,2011-05-04 01:06:40+00:00,General,2011-04-29 09:44:59.052000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource06,2011-03-09 01:06:40.010000+00:00,task-16597,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-23 09:52:52.743000+00:00 +Desk,LEFT_case-6504,2011-05-04 01:06:40+00:00,General,2011-04-29 09:44:59.052000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource06,2011-03-09 01:06:40.010000+00:00,task-17323,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-23 09:53:44.550000+00:00 +Desk,LEFT_case-6504,2011-05-04 01:06:40+00:00,General,2011-04-29 09:44:59.052000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource06,2011-03-09 01:06:40.010000+00:00,task-17324,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-23 09:56:27.960000+00:00 +Internet,LEFT_case-6512,2011-05-11 00:00:00+00:00,General,2011-03-24 14:33:41.874000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource06,2011-03-16 00:00:00.010000+00:00,task-16632,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-23 14:33:55.879000+00:00 +Internet,LEFT_case-6512,2011-05-11 00:00:00+00:00,General,2011-03-24 14:33:41.874000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource06,2011-03-16 00:00:00.010000+00:00,task-17401,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-03-23 14:34:29.198000+00:00 +Internet,LEFT_case-6512,2011-05-11 00:00:00+00:00,General,2011-03-24 14:33:41.874000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource06,2011-03-16 00:00:00.010000+00:00,task-17400,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-23 14:35:00.802000+00:00 +Internet,LEFT_case-6512,2011-05-11 00:00:00+00:00,General,2011-03-24 14:33:41.874000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource06,2011-03-16 00:00:00.010000+00:00,task-17404,T11 Create document X request unlicensed,complete,Group 1,Resource06,2011-03-23 14:44:16.587000+00:00 +Internet,LEFT_case-6512,2011-05-11 00:00:00+00:00,General,2011-03-24 14:33:41.874000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource06,2011-03-16 00:00:00.010000+00:00,task-17409,T14 Determine document X request unlicensed,complete,EMPTY,Resource10,2011-03-23 16:26:46.007000+00:00 +Internet,LEFT_case-6515,2011-04-22 00:00:00+00:00,General,2011-03-18 15:06:58.511000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16639,Confirmation of receipt,complete,Group 1,Resource04,2011-03-18 09:40:49.471000+00:00 +Internet,LEFT_case-6515,2011-04-22 00:00:00+00:00,General,2011-03-18 15:06:58.511000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16715,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-18 09:41:10.991000+00:00 +Internet,LEFT_case-6515,2011-04-22 00:00:00+00:00,General,2011-03-18 15:06:58.511000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16714,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-18 09:41:34.507000+00:00 +Internet,LEFT_case-6516,2011-06-21 01:06:40+00:00,General,2011-06-01 11:48:48.133000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource18,2011-03-16 01:06:40.010000+00:00,task-16640,Confirmation of receipt,complete,EMPTY,Resource18,2011-03-22 15:14:21.822000+00:00 +Internet,LEFT_case-6516,2011-06-21 01:06:40+00:00,General,2011-06-01 11:48:48.133000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource18,2011-03-16 01:06:40.010000+00:00,task-17289,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-03-22 15:37:05.755000+00:00 +Internet,LEFT_case-6516,2011-06-21 01:06:40+00:00,General,2011-06-01 11:48:48.133000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource18,2011-03-16 01:06:40.010000+00:00,task-17283,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-04-07 08:19:55.232000+00:00 +Internet,LEFT_case-6517,2011-04-22 00:00:00+00:00,General,2011-03-18 15:44:27.843000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16643,Confirmation of receipt,complete,Group 1,Resource04,2011-03-18 11:02:01.540000+00:00 +Internet,LEFT_case-6517,2011-04-22 00:00:00+00:00,General,2011-03-18 15:44:27.843000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16771,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-18 11:02:43.261000+00:00 +Internet,LEFT_case-6517,2011-04-22 00:00:00+00:00,General,2011-03-18 15:44:27.843000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16770,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-18 11:03:07.477000+00:00 +Internet,LEFT_case-6537,2011-05-09 00:00:00+00:00,General,2011-05-10 12:24:24.005000+00:00,2011-05-09 00:00:00.020000+00:00,,admin1,2011-03-14 00:00:00.010000+00:00,task-16732,Confirmation of receipt,complete,Group 1,Resource25,2011-03-18 11:47:03.758000+00:00 +Internet,LEFT_case-6537,2011-05-09 00:00:00+00:00,General,2011-05-10 12:24:24.005000+00:00,2011-05-09 00:00:00.020000+00:00,,admin1,2011-03-14 00:00:00.010000+00:00,task-16808,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-03-18 11:53:15.898000+00:00 +Internet,LEFT_case-6537,2011-05-09 00:00:00+00:00,General,2011-05-10 12:24:24.005000+00:00,2011-05-09 00:00:00.020000+00:00,,admin1,2011-03-14 00:00:00.010000+00:00,task-16809,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-03-18 12:33:16.444000+00:00 +Internet,LEFT_case-6538,2011-05-07 01:06:40+00:00,General,2011-03-31 13:56:51.700000+00:00,2011-05-07 01:06:40.020000+00:00,,Resource05,2011-03-12 01:06:40.010000+00:00,task-16744,Confirmation of receipt,complete,EMPTY,admin2,2011-03-31 13:56:52.639000+00:00 +Internet,LEFT_case-6540,2011-05-02 01:06:40+00:00,General,2011-04-19 11:59:28.010000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource02,2011-03-07 01:06:40.010000+00:00,task-16777,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-25 09:51:00.887000+00:00 +Internet,LEFT_case-6540,2011-05-02 01:06:40+00:00,General,2011-04-19 11:59:28.010000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource02,2011-03-07 01:06:40.010000+00:00,task-17796,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-25 09:51:40.344000+00:00 +Internet,LEFT_case-6540,2011-05-02 01:06:40+00:00,General,2011-04-19 11:59:28.010000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource02,2011-03-07 01:06:40.010000+00:00,task-17795,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-25 09:55:17.819000+00:00 +Desk,LEFT_case-6541,2011-04-20 01:06:40+00:00,General,2011-05-09 16:33:35.631000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource14,2011-02-23 01:06:40.010000+00:00,task-16805,Confirmation of receipt,complete,EMPTY,Resource14,2011-03-29 13:06:09.671000+00:00 +Desk,LEFT_case-6541,2011-04-20 01:06:40+00:00,General,2011-05-09 16:33:35.631000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource14,2011-02-23 01:06:40.010000+00:00,task-18292,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-03-29 14:41:16.385000+00:00 +Desk,LEFT_case-6541,2011-04-20 01:06:40+00:00,General,2011-05-09 16:33:35.631000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource14,2011-02-23 01:06:40.010000+00:00,task-18275,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-03 08:38:10.260000+00:00 +Desk,LEFT_case-6542,2011-05-11 00:00:00+00:00,General,2011-05-03 07:05:55.556000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-16806,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 13:17:07.257000+00:00 +Desk,LEFT_case-6542,2011-05-11 00:00:00+00:00,General,2011-05-03 07:05:55.556000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-17597,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 13:17:46.211000+00:00 +Desk,LEFT_case-6542,2011-05-11 00:00:00+00:00,General,2011-05-03 07:05:55.556000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-17596,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-13 14:30:33.753000+00:00 +Post,LEFT_case-6544,2011-05-12 00:00:00+00:00,General,2011-05-03 07:17:38.353000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-16844,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 13:30:23.768000+00:00 +Post,LEFT_case-6544,2011-05-12 00:00:00+00:00,General,2011-05-03 07:17:38.353000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-17601,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 13:33:53.495000+00:00 +Post,LEFT_case-6544,2011-05-12 00:00:00+00:00,General,2011-05-03 07:17:38.353000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-17600,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 11:22:45.588000+00:00 +Desk,LEFT_case-6545,2011-05-12 00:00:00+00:00,General,2011-03-30 12:29:45.678000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource06,2011-03-17 00:00:00.010000+00:00,task-16845,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-23 15:34:29.285000+00:00 +Desk,LEFT_case-6545,2011-05-12 00:00:00+00:00,General,2011-03-30 12:29:45.678000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource06,2011-03-17 00:00:00.010000+00:00,task-17423,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-03-23 15:34:56.770000+00:00 +Desk,LEFT_case-6545,2011-05-12 00:00:00+00:00,General,2011-03-30 12:29:45.678000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource06,2011-03-17 00:00:00.010000+00:00,task-17422,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-23 15:35:18.651000+00:00 +Internet,LEFT_case-6585,2011-05-12 00:00:00+00:00,General,2011-05-02 15:08:33.826000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-16930,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 13:37:20.727000+00:00 +Internet,LEFT_case-6585,2011-05-12 00:00:00+00:00,General,2011-05-02 15:08:33.826000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-17605,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 13:37:50.901000+00:00 +Internet,LEFT_case-6585,2011-05-12 00:00:00+00:00,General,2011-05-02 15:08:33.826000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-17604,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 11:31:58.267000+00:00 +Internet,LEFT_case-6606,2011-05-16 01:06:40+00:00,General,2011-04-28 10:45:13.017000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource08,2011-03-21 01:06:40.010000+00:00,task-17123,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-23 14:22:44.682000+00:00 +Internet,LEFT_case-6606,2011-05-16 01:06:40+00:00,General,2011-04-28 10:45:13.017000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource08,2011-03-21 01:06:40.010000+00:00,task-17397,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-23 14:40:54.342000+00:00 +Internet,LEFT_case-6606,2011-05-16 01:06:40+00:00,General,2011-04-28 10:45:13.017000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource08,2011-03-21 01:06:40.010000+00:00,task-17406,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-24 08:35:34.920000+00:00 +Internet,LEFT_case-6607,2011-05-21 01:06:40+00:00,General,2011-05-23 15:03:05.403000+00:00,2011-05-21 01:06:40.020000+00:00,,Resource06,2011-03-20 01:06:40.010000+00:00,task-17132,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-30 10:52:56.391000+00:00 +Internet,LEFT_case-6607,2011-05-21 01:06:40+00:00,General,2011-05-23 15:03:05.403000+00:00,2011-05-21 01:06:40.020000+00:00,,Resource06,2011-03-20 01:06:40.010000+00:00,task-18421,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-30 10:53:25.969000+00:00 +Internet,LEFT_case-6607,2011-05-21 01:06:40+00:00,General,2011-05-23 15:03:05.403000+00:00,2011-05-21 01:06:40.020000+00:00,,Resource06,2011-03-20 01:06:40.010000+00:00,task-18422,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-30 11:31:18.653000+00:00 +Internet,LEFT_case-6610,2011-05-15 00:00:00+00:00,General,2011-05-03 07:20:58.757000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource11,2011-03-20 00:00:00.010000+00:00,task-17179,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 13:42:14.825000+00:00 +Internet,LEFT_case-6610,2011-05-15 00:00:00+00:00,General,2011-05-03 07:20:58.757000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource11,2011-03-20 00:00:00.010000+00:00,task-17610,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 13:42:41.839000+00:00 +Internet,LEFT_case-6610,2011-05-15 00:00:00+00:00,General,2011-05-03 07:20:58.757000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource11,2011-03-20 00:00:00.010000+00:00,task-17609,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 11:42:31.449000+00:00 +Internet,LEFT_case-6612,2011-05-17 01:06:40+00:00,General,2011-05-12 14:00:01.208000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource08,2011-03-22 01:06:40.010000+00:00,task-17186,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-23 11:25:25.751000+00:00 +Internet,LEFT_case-6612,2011-05-17 01:06:40+00:00,General,2011-05-12 14:00:01.208000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource08,2011-03-22 01:06:40.010000+00:00,task-17365,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-23 11:42:29.855000+00:00 +Internet,LEFT_case-6612,2011-05-17 01:06:40+00:00,General,2011-05-12 14:00:01.208000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource08,2011-03-22 01:06:40.010000+00:00,task-17366,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-24 08:32:34.198000+00:00 +Internet,LEFT_case-6617,2011-04-28 01:06:40+00:00,General,2011-04-28 15:44:56.661000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource17,2011-03-03 01:06:40.010000+00:00,task-17200,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-28 10:32:32.241000+00:00 +Internet,LEFT_case-6617,2011-04-28 01:06:40+00:00,General,2011-04-28 15:44:56.661000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource17,2011-03-03 01:06:40.010000+00:00,task-22521,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-04-28 10:40:08.486000+00:00 +Internet,LEFT_case-6617,2011-04-28 01:06:40+00:00,General,2011-04-28 15:44:56.661000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource17,2011-03-03 01:06:40.010000+00:00,task-22518,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-28 10:40:28.675000+00:00 +Internet,LEFT_case-6622,2011-05-17 00:00:00+00:00,General,2011-04-13 14:48:57.628000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource18,2011-03-22 00:00:00.010000+00:00,task-17284,Confirmation of receipt,complete,EMPTY,Resource18,2011-03-24 08:52:35.965000+00:00 +Internet,LEFT_case-6622,2011-05-17 00:00:00+00:00,General,2011-04-13 14:48:57.628000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource18,2011-03-22 00:00:00.010000+00:00,task-17482,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-24 08:58:15.209000+00:00 +Internet,LEFT_case-6622,2011-05-17 00:00:00+00:00,General,2011-04-13 14:48:57.628000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource18,2011-03-22 00:00:00.010000+00:00,task-17479,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-03-24 08:58:52.772000+00:00 +Post,LEFT_case-6631,2011-05-18 01:06:40+00:00,General,2011-05-16 14:11:42.356000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-03-02 01:06:40.010000+00:00,task-17362,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-28 15:11:07.890000+00:00 +Post,LEFT_case-6631,2011-05-18 01:06:40+00:00,General,2011-05-16 14:11:42.356000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-03-02 01:06:40.010000+00:00,task-18093,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-28 15:40:39.470000+00:00 +Post,LEFT_case-6631,2011-05-18 01:06:40+00:00,General,2011-05-16 14:11:42.356000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-03-02 01:06:40.010000+00:00,task-18094,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-30 10:29:33.636000+00:00 +Post,LEFT_case-6644,2011-04-27 00:00:00+00:00,General,2011-04-04 00:00:00.020000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource17,2011-03-02 00:00:00.010000+00:00,task-17476,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-01 09:58:07.735000+00:00 +Post,LEFT_case-6644,2011-04-27 00:00:00+00:00,General,2011-04-04 00:00:00.020000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource17,2011-03-02 00:00:00.010000+00:00,task-18793,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-04-01 10:00:50.028000+00:00 +Post,LEFT_case-6644,2011-04-27 00:00:00+00:00,General,2011-04-04 00:00:00.020000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource17,2011-03-02 00:00:00.010000+00:00,task-18788,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-04 14:18:57.120000+00:00 +Post,LEFT_case-6644,2011-04-27 00:00:00+00:00,General,2011-04-04 00:00:00.020000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource17,2011-03-02 00:00:00.010000+00:00,task-18965,T11 Create document X request unlicensed,complete,Group 1,admin2,2011-04-21 10:15:37.535000+00:00 +Post,LEFT_case-6645,2011-04-27 00:00:00+00:00,General,2011-04-26 15:11:59.286000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-17514,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-28 14:13:54.187000+00:00 +Post,LEFT_case-6645,2011-04-27 00:00:00+00:00,General,2011-04-26 15:11:59.286000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-18071,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-03-28 14:14:38.609000+00:00 +Post,LEFT_case-6645,2011-04-27 00:00:00+00:00,General,2011-04-26 15:11:59.286000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-18559,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-31 15:20:45.078000+00:00 +Post,LEFT_case-6646,2011-05-02 00:00:00+00:00,General,2011-05-02 14:11:47.699000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-17520,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-29 10:48:24.971000+00:00 +Post,LEFT_case-6646,2011-05-02 00:00:00+00:00,General,2011-05-02 14:11:47.699000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-18208,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-29 10:48:53.630000+00:00 +Post,LEFT_case-6646,2011-05-02 00:00:00+00:00,General,2011-05-02 14:11:47.699000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-18207,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-29 12:18:21.237000+00:00 +Post,LEFT_case-6648,2011-05-02 00:00:00+00:00,General,2011-05-02 14:19:56.484000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-17568,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-29 11:19:26.058000+00:00 +Post,LEFT_case-6648,2011-05-02 00:00:00+00:00,General,2011-05-02 14:19:56.484000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-18234,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-29 11:45:49.119000+00:00 +Post,LEFT_case-6648,2011-05-02 00:00:00+00:00,General,2011-05-02 14:19:56.484000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-18215,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-29 11:46:21.883000+00:00 +Post,LEFT_case-6649,2011-05-03 00:00:00+00:00,General,2011-05-19 15:31:20.458000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource11,2011-03-08 00:00:00.010000+00:00,task-17580,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-28 14:57:22.374000+00:00 +Post,LEFT_case-6649,2011-05-03 00:00:00+00:00,General,2011-05-19 15:31:20.458000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource11,2011-03-08 00:00:00.010000+00:00,task-18695,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 15:46:16.205000+00:00 +Post,LEFT_case-6649,2011-05-03 00:00:00+00:00,General,2011-05-19 15:31:20.458000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource11,2011-03-08 00:00:00.010000+00:00,task-18088,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-05-12 14:58:44.794000+00:00 +Post,LEFT_case-6650,2011-05-05 00:00:00+00:00,General,2011-05-03 11:50:19.323000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource06,2011-03-10 00:00:00.010000+00:00,task-17607,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-12 10:20:59.394000+00:00 +Post,LEFT_case-6650,2011-05-05 00:00:00+00:00,General,2011-05-03 11:50:19.323000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource06,2011-03-10 00:00:00.010000+00:00,task-19966,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-12 10:21:32.123000+00:00 +Post,LEFT_case-6650,2011-05-05 00:00:00+00:00,General,2011-05-03 11:50:19.323000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource06,2011-03-10 00:00:00.010000+00:00,task-19965,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-12 10:21:56.804000+00:00 +Post,LEFT_case-6653,2011-05-06 00:00:00+00:00,General,2011-04-29 11:29:43.730000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource06,2011-03-11 00:00:00.010000+00:00,task-17660,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-29 10:11:42.068000+00:00 +Post,LEFT_case-6653,2011-05-06 00:00:00+00:00,General,2011-04-29 11:29:43.730000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource06,2011-03-11 00:00:00.010000+00:00,task-18182,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-29 10:12:14.032000+00:00 +Post,LEFT_case-6653,2011-05-06 00:00:00+00:00,General,2011-04-29 11:29:43.730000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource06,2011-03-11 00:00:00.010000+00:00,task-18184,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-30 10:37:24.914000+00:00 +Post,LEFT_case-6654,2011-05-06 00:00:00+00:00,General,2011-05-02 09:54:01.913000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource11,2011-03-11 00:00:00.010000+00:00,task-17712,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-29 07:44:33.058000+00:00 +Post,LEFT_case-6654,2011-05-06 00:00:00+00:00,General,2011-05-02 09:54:01.913000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource11,2011-03-11 00:00:00.010000+00:00,task-18572,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-03-31 08:51:16.749000+00:00 +Post,LEFT_case-6654,2011-05-06 00:00:00+00:00,General,2011-05-02 09:54:01.913000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource11,2011-03-11 00:00:00.010000+00:00,task-18159,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 09:30:58.759000+00:00 +Internet,LEFT_case-6655,2011-05-01 01:06:40+00:00,Experts,2011-04-28 00:00:00.020000+00:00,2011-04-24 01:06:40.020000+00:00,,Resource06,2011-02-27 01:06:40.010000+00:00,task-17734,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-25 10:08:19.522000+00:00 +Internet,LEFT_case-6655,2011-05-01 01:06:40+00:00,Experts,2011-04-28 00:00:00.020000+00:00,2011-04-24 01:06:40.020000+00:00,,Resource06,2011-02-27 01:06:40.010000+00:00,task-17804,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-25 10:11:46.960000+00:00 +Internet,LEFT_case-6655,2011-05-01 01:06:40+00:00,Experts,2011-04-28 00:00:00.020000+00:00,2011-04-24 01:06:40.020000+00:00,,Resource06,2011-02-27 01:06:40.010000+00:00,task-17805,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-25 12:09:20.531000+00:00 +Post,LEFT_case-6662,2011-05-30 01:06:40+00:00,General,2011-05-27 13:03:53.522000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource15,2011-03-25 01:06:40.010000+00:00,task-17778,Confirmation of receipt,complete,EMPTY,Resource15,2011-03-29 10:12:33.993000+00:00 +Post,LEFT_case-6662,2011-05-30 01:06:40+00:00,General,2011-05-27 13:03:53.522000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource15,2011-03-25 01:06:40.010000+00:00,task-18191,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-03-29 10:13:40.066000+00:00 +Post,LEFT_case-6662,2011-05-30 01:06:40+00:00,General,2011-05-27 13:03:53.522000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource15,2011-03-25 01:06:40.010000+00:00,task-18188,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-03-29 10:22:25.572000+00:00 +Post,LEFT_case-6665,2011-05-05 00:00:00+00:00,General,2011-05-02 09:35:12.891000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17793,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-29 07:20:06.180000+00:00 +Post,LEFT_case-6665,2011-05-05 00:00:00+00:00,General,2011-05-02 09:35:12.891000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-18569,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-03-31 08:49:20.888000+00:00 +Post,LEFT_case-6665,2011-05-05 00:00:00+00:00,General,2011-05-02 09:35:12.891000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-18157,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 09:46:10.761000+00:00 +Post,LEFT_case-6667,2011-05-11 00:00:00+00:00,General,2011-05-02 15:30:05.555000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-17803,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-29 08:34:24.689000+00:00 +Post,LEFT_case-6667,2011-05-11 00:00:00+00:00,General,2011-05-02 15:30:05.555000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-18575,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-03-31 08:54:32.497000+00:00 +Post,LEFT_case-6667,2011-05-11 00:00:00+00:00,General,2011-05-02 15:30:05.555000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-18163,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 10:58:26.111000+00:00 +Post,LEFT_case-6668,2011-06-22 01:06:40+00:00,General,2011-06-01 10:43:32.531000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource04,2011-03-16 01:06:40.010000+00:00,task-17819,Confirmation of receipt,complete,EMPTY,Resource04,2011-04-01 09:19:25.794000+00:00 +Post,LEFT_case-6668,2011-06-22 01:06:40+00:00,General,2011-06-01 10:43:32.531000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource04,2011-03-16 01:06:40.010000+00:00,task-18764,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-04-01 09:20:07.958000+00:00 +Post,LEFT_case-6668,2011-06-22 01:06:40+00:00,General,2011-06-01 10:43:32.531000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource04,2011-03-16 01:06:40.010000+00:00,task-18765,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-01 09:41:17.414000+00:00 +Post,LEFT_case-6671,2011-05-17 00:00:00+00:00,General,2011-07-26 14:14:27.386000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource09,2011-03-22 00:00:00.010000+00:00,task-17842,Confirmation of receipt,complete,EMPTY,Resource09,2011-07-11 12:24:17.317000+00:00 +Post,LEFT_case-6671,2011-05-17 00:00:00+00:00,General,2011-07-26 14:14:27.386000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource09,2011-03-22 00:00:00.010000+00:00,task-31581,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-11 12:25:09.516000+00:00 +Post,LEFT_case-6671,2011-05-17 00:00:00+00:00,General,2011-07-26 14:14:27.386000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource09,2011-03-22 00:00:00.010000+00:00,task-31580,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-11 12:25:56.513000+00:00 +Post,LEFT_case-6672,2011-05-02 00:00:00+00:00,General,2011-05-11 15:19:21.594000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource22,2011-03-07 00:00:00.010000+00:00,task-17862,Confirmation of receipt,complete,EMPTY,Resource22,2011-03-31 15:46:08.599000+00:00 +Post,LEFT_case-6672,2011-05-02 00:00:00+00:00,General,2011-05-11 15:19:21.594000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource22,2011-03-07 00:00:00.010000+00:00,task-18727,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-03-31 15:49:45.086000+00:00 +Post,LEFT_case-6672,2011-05-02 00:00:00+00:00,General,2011-05-11 15:19:21.594000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource22,2011-03-07 00:00:00.010000+00:00,task-18730,T04 Determine confirmation of receipt,complete,EMPTY,Resource22,2011-04-06 14:34:52.128000+00:00 +Internet,LEFT_case-6678,2011-05-17 01:06:40+00:00,General,2011-07-08 11:55:22.139000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource04,2011-03-22 01:06:40.010000+00:00,task-17872,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-31 08:56:25.924000+00:00 +Internet,LEFT_case-6678,2011-05-17 01:06:40+00:00,General,2011-07-08 11:55:22.139000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource04,2011-03-22 01:06:40.010000+00:00,task-18578,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-31 13:43:50.888000+00:00 +Internet,LEFT_case-6678,2011-05-17 01:06:40+00:00,General,2011-07-08 11:55:22.139000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource04,2011-03-22 01:06:40.010000+00:00,task-18579,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-31 15:14:04.582000+00:00 +Internet,LEFT_case-6679,2011-05-17 00:00:00+00:00,General,2011-05-17 09:51:38.926000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource17,2011-03-22 00:00:00.010000+00:00,task-17879,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-01 16:21:55.067000+00:00 +Internet,LEFT_case-6679,2011-05-17 00:00:00+00:00,General,2011-05-17 09:51:38.926000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource17,2011-03-22 00:00:00.010000+00:00,task-18846,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-04 08:11:13.044000+00:00 +Internet,LEFT_case-6679,2011-05-17 00:00:00+00:00,General,2011-05-17 09:51:38.926000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource17,2011-03-22 00:00:00.010000+00:00,task-18845,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-04 11:29:46.426000+00:00 +Internet,LEFT_case-6680,2011-07-11 01:06:40+00:00,General,2011-07-12 15:13:17.702000+00:00,2011-07-11 01:06:40.020000+00:00,,Resource13,2011-03-23 01:06:40.010000+00:00,task-17893,Confirmation of receipt,complete,EMPTY,Resource13,2011-04-08 11:38:20.410000+00:00 +Internet,LEFT_case-6680,2011-07-11 01:06:40+00:00,General,2011-07-12 15:13:17.702000+00:00,2011-07-11 01:06:40.020000+00:00,,Resource13,2011-03-23 01:06:40.010000+00:00,task-19672,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-04-08 11:39:48.397000+00:00 +Internet,LEFT_case-6680,2011-07-11 01:06:40+00:00,General,2011-07-12 15:13:17.702000+00:00,2011-07-11 01:06:40.020000+00:00,,Resource13,2011-03-23 01:06:40.010000+00:00,task-19673,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-11 09:05:31.787000+00:00 +Internet,LEFT_case-6681,2011-05-17 00:00:00+00:00,General,2011-05-12 12:05:59.735000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource15,2011-03-22 00:00:00.010000+00:00,task-17896,Confirmation of receipt,complete,EMPTY,Resource15,2011-03-29 11:21:59.517000+00:00 +Internet,LEFT_case-6681,2011-05-17 00:00:00+00:00,General,2011-05-12 12:05:59.735000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource15,2011-03-22 00:00:00.010000+00:00,task-18218,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-03-29 11:22:32.161000+00:00 +Internet,LEFT_case-6681,2011-05-17 00:00:00+00:00,General,2011-05-12 12:05:59.735000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource15,2011-03-22 00:00:00.010000+00:00,task-18217,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-03-29 11:22:46.075000+00:00 +Internet,LEFT_case-6682,2011-08-05 01:06:40+00:00,General,2011-08-03 14:52:24.942000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource18,2011-03-23 01:06:40.010000+00:00,task-17897,Confirmation of receipt,complete,EMPTY,Resource18,2011-04-07 11:09:40.019000+00:00 +Internet,LEFT_case-6682,2011-08-05 01:06:40+00:00,General,2011-08-03 14:52:24.942000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource18,2011-03-23 01:06:40.010000+00:00,task-19498,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-04-07 11:14:39.795000+00:00 +Internet,LEFT_case-6682,2011-08-05 01:06:40+00:00,General,2011-08-03 14:52:24.942000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource18,2011-03-23 01:06:40.010000+00:00,task-19501,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-04-07 11:15:33.805000+00:00 +Internet,LEFT_case-6683,2011-05-19 00:00:00+00:00,General,2011-06-16 07:50:11.848000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-17898,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-30 14:33:12.923000+00:00 +Internet,LEFT_case-6683,2011-05-19 00:00:00+00:00,General,2011-06-16 07:50:11.848000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-18523,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-30 14:34:09.776000+00:00 +Internet,LEFT_case-6683,2011-05-19 00:00:00+00:00,General,2011-06-16 07:50:11.848000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-18527,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-03-30 14:35:45.553000+00:00 +Internet,LEFT_case-6684,2011-05-19 01:06:40+00:00,General,2011-06-20 16:40:14.763000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource14,2011-03-24 01:06:40.010000+00:00,task-17907,Confirmation of receipt,complete,EMPTY,Resource14,2011-04-20 14:57:48.940000+00:00 +Internet,LEFT_case-6684,2011-05-19 01:06:40+00:00,General,2011-06-20 16:40:14.763000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource14,2011-03-24 01:06:40.010000+00:00,task-21506,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-04-20 14:58:23.121000+00:00 +Internet,LEFT_case-6684,2011-05-19 01:06:40+00:00,General,2011-06-20 16:40:14.763000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource14,2011-03-24 01:06:40.010000+00:00,task-21504,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-04-20 14:58:52.993000+00:00 +Internet,LEFT_case-6709,2011-05-19 00:00:00+00:00,General,2011-05-30 07:48:47.369000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-17958,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 12:11:18.800000+00:00 +Internet,LEFT_case-6709,2011-05-19 00:00:00+00:00,General,2011-05-30 07:48:47.369000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-20514,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-14 12:11:54.461000+00:00 +Internet,LEFT_case-6709,2011-05-19 00:00:00+00:00,General,2011-05-30 07:48:47.369000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-20513,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-28 14:25:03.615000+00:00 +Internet,LEFT_case-6710,2011-05-19 00:00:00+00:00,General,2011-05-03 07:44:05.415000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-17968,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-29 09:01:33.141000+00:00 +Internet,LEFT_case-6710,2011-05-19 00:00:00+00:00,General,2011-05-03 07:44:05.415000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-18580,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-03-31 08:57:17.530000+00:00 +Internet,LEFT_case-6710,2011-05-19 00:00:00+00:00,General,2011-05-03 07:44:05.415000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-18167,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 12:37:31.728000+00:00 +Internet,LEFT_case-6711,2011-05-19 00:00:00+00:00,General,2011-05-19 10:14:27.216000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-17969,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-30 14:20:08.616000+00:00 +Internet,LEFT_case-6711,2011-05-19 00:00:00+00:00,General,2011-05-19 10:14:27.216000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-18518,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-03-30 14:21:19.895000+00:00 +Internet,LEFT_case-6711,2011-05-19 00:00:00+00:00,General,2011-05-19 10:14:27.216000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-18517,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-30 14:21:35.699000+00:00 +Internet,LEFT_case-6712,2011-05-20 00:00:00+00:00,General,2011-05-04 08:15:10.967000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource11,2011-03-25 00:00:00.010000+00:00,task-17972,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-29 09:10:12.157000+00:00 +Internet,LEFT_case-6712,2011-05-20 00:00:00+00:00,General,2011-05-04 08:15:10.967000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource11,2011-03-25 00:00:00.010000+00:00,task-18582,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-03-31 08:59:52.809000+00:00 +Internet,LEFT_case-6712,2011-05-20 00:00:00+00:00,General,2011-05-04 08:15:10.967000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource11,2011-03-25 00:00:00.010000+00:00,task-18169,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 12:56:17.895000+00:00 +Internet,LEFT_case-6713,2011-05-20 00:00:00+00:00,General,2011-06-21 09:39:12.616000+00:00,2011-05-20 00:00:00.020000+00:00,,admin1,2011-03-25 00:00:00.010000+00:00,task-17997,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-10 13:42:11.433000+00:00 +Internet,LEFT_case-6713,2011-05-20 00:00:00+00:00,General,2011-06-21 09:39:12.616000+00:00,2011-05-20 00:00:00.020000+00:00,,admin1,2011-03-25 00:00:00.010000+00:00,task-24258,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-10 13:42:56.397000+00:00 +Internet,LEFT_case-6713,2011-05-20 00:00:00+00:00,General,2011-06-21 09:39:12.616000+00:00,2011-05-20 00:00:00.020000+00:00,,admin1,2011-03-25 00:00:00.010000+00:00,task-24257,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-10 13:43:36.047000+00:00 +Internet,LEFT_case-6714,2011-06-24 01:06:40+00:00,General,2011-06-21 15:18:27.406000+00:00,2011-06-24 01:06:40.020000+00:00,Group 5,Resource04,2011-03-25 01:06:40.010000+00:00,task-18023,Confirmation of receipt,complete,EMPTY,Resource04,2011-05-02 15:14:08.285000+00:00 +Internet,LEFT_case-6714,2011-06-24 01:06:40+00:00,General,2011-06-21 15:18:27.406000+00:00,2011-06-24 01:06:40.020000+00:00,Group 5,Resource04,2011-03-25 01:06:40.010000+00:00,task-23216,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-02 15:15:13.818000+00:00 +Internet,LEFT_case-6714,2011-06-24 01:06:40+00:00,General,2011-06-21 15:18:27.406000+00:00,2011-06-24 01:06:40.020000+00:00,Group 5,Resource04,2011-03-25 01:06:40.010000+00:00,task-23213,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-02 15:15:33.991000+00:00 +Internet,LEFT_case-6715,2011-05-20 01:06:40+00:00,General,2011-05-18 16:16:04.715000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource04,2011-03-25 01:06:40.010000+00:00,task-18029,Confirmation of receipt,complete,EMPTY,Resource04,2011-05-03 11:12:20.665000+00:00 +Internet,LEFT_case-6715,2011-05-20 01:06:40+00:00,General,2011-05-18 16:16:04.715000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource04,2011-03-25 01:06:40.010000+00:00,task-23404,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-03 11:12:47.808000+00:00 +Internet,LEFT_case-6715,2011-05-20 01:06:40+00:00,General,2011-05-18 16:16:04.715000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource04,2011-03-25 01:06:40.010000+00:00,task-23403,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-03 11:13:07.305000+00:00 +Internet,LEFT_case-6719,2011-06-17 01:06:40+00:00,General,2011-06-16 12:09:17.112000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource06,2011-03-25 01:06:40.010000+00:00,task-18043,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-11 10:15:48.048000+00:00 +Internet,LEFT_case-6719,2011-06-17 01:06:40+00:00,General,2011-06-16 12:09:17.112000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource06,2011-03-25 01:06:40.010000+00:00,task-19787,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-11 10:16:23.586000+00:00 +Internet,LEFT_case-6719,2011-06-17 01:06:40+00:00,General,2011-06-16 12:09:17.112000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource06,2011-03-25 01:06:40.010000+00:00,task-20132,T03 Adjust confirmation of receipt,complete,Group 1,Resource06,2011-05-10 15:54:29.275000+00:00 +Internet,LEFT_case-6719,2011-06-17 01:06:40+00:00,General,2011-06-16 12:09:17.112000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource06,2011-03-25 01:06:40.010000+00:00,task-24319,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-10 15:57:28.404000+00:00 +e-mail,LEFT_case-6724,2011-04-27 01:06:40+00:00,General,2011-05-16 09:51:38.002000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource09,2011-03-02 01:06:40.010000+00:00,task-18081,Confirmation of receipt,complete,EMPTY,admin2,2011-05-16 09:51:39.219000+00:00 +Internet,LEFT_case-6737,2011-05-20 01:06:40+00:00,General,2011-05-11 10:03:04.278000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource11,2011-03-25 01:06:40.010000+00:00,task-18172,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 13:51:52.883000+00:00 +Internet,LEFT_case-6737,2011-05-20 01:06:40+00:00,General,2011-05-11 10:03:04.278000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource11,2011-03-25 01:06:40.010000+00:00,task-20557,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-14 13:52:25.320000+00:00 +Internet,LEFT_case-6737,2011-05-20 01:06:40+00:00,General,2011-05-11 10:03:04.278000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource11,2011-03-25 01:06:40.010000+00:00,task-20556,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 13:52:54.576000+00:00 +Internet,LEFT_case-6738,2011-05-21 00:00:00+00:00,General,2011-05-03 07:26:00.355000+00:00,2011-05-21 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-18201,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 08:22:48.586000+00:00 +Internet,LEFT_case-6738,2011-05-21 00:00:00+00:00,General,2011-05-03 07:26:00.355000+00:00,2011-05-21 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21582,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 08:23:28.928000+00:00 +Internet,LEFT_case-6738,2011-05-21 00:00:00+00:00,General,2011-05-03 07:26:00.355000+00:00,2011-05-21 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21581,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 08:23:56.720000+00:00 +Internet,LEFT_case-6738,2011-05-21 00:00:00+00:00,General,2011-05-03 07:26:00.355000+00:00,2011-05-21 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21585,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-04-21 09:17:10.387000+00:00 +Internet,LEFT_case-6738,2011-05-21 00:00:00+00:00,General,2011-05-03 07:26:00.355000+00:00,2011-05-21 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21879,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-04-21 13:39:15.779000+00:00 +Internet,LEFT_case-6739,2011-05-22 00:00:00+00:00,General,2011-05-04 08:33:12.367000+00:00,2011-05-22 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-18210,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-19 13:57:25.855000+00:00 +Internet,LEFT_case-6739,2011-05-22 00:00:00+00:00,General,2011-05-04 08:33:12.367000+00:00,2011-05-22 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21135,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-19 13:57:58.222000+00:00 +Internet,LEFT_case-6739,2011-05-22 00:00:00+00:00,General,2011-05-04 08:33:12.367000+00:00,2011-05-22 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21134,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-19 14:00:16.714000+00:00 +Internet,LEFT_case-6747,2011-05-23 00:00:00+00:00,General,2011-06-09 12:02:47.145000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource11,2011-03-28 00:00:00.020000+00:00,task-18288,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 09:40:56.538000+00:00 +Internet,LEFT_case-6747,2011-05-23 00:00:00+00:00,General,2011-06-09 12:02:47.145000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource11,2011-03-28 00:00:00.020000+00:00,task-21625,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 09:41:56.687000+00:00 +Internet,LEFT_case-6747,2011-05-23 00:00:00+00:00,General,2011-06-09 12:02:47.145000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource11,2011-03-28 00:00:00.020000+00:00,task-21624,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 09:42:16.131000+00:00 +Internet,LEFT_case-6748,2011-05-23 00:00:00+00:00,General,2011-05-20 10:16:51.355000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource13,2011-03-28 00:00:00.020000+00:00,task-18294,Confirmation of receipt,complete,EMPTY,Resource13,2011-04-11 11:21:13.656000+00:00 +Internet,LEFT_case-6748,2011-05-23 00:00:00+00:00,General,2011-05-20 10:16:51.355000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource13,2011-03-28 00:00:00.020000+00:00,task-19818,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-04-11 12:03:41.676000+00:00 +Internet,LEFT_case-6748,2011-05-23 00:00:00+00:00,General,2011-05-20 10:16:51.355000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource13,2011-03-28 00:00:00.020000+00:00,task-19819,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-12 08:25:41.283000+00:00 +Internet,LEFT_case-6749,2011-05-23 01:06:40+00:00,General,2011-05-18 14:05:02.912000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource08,2011-03-28 01:06:40.020000+00:00,task-18302,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 14:46:05.312000+00:00 +Internet,LEFT_case-6749,2011-05-23 01:06:40+00:00,General,2011-05-18 14:05:02.912000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource08,2011-03-28 01:06:40.020000+00:00,task-19569,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 14:51:36.240000+00:00 +Internet,LEFT_case-6749,2011-05-23 01:06:40+00:00,General,2011-05-18 14:05:02.912000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource08,2011-03-28 01:06:40.020000+00:00,task-19565,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-07 14:51:49.090000+00:00 +Internet,LEFT_case-6751,2011-05-12 00:00:00+00:00,General,2011-05-11 15:38:18.938000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource05,2011-03-17 00:00:00.010000+00:00,task-18313,Confirmation of receipt,complete,EMPTY,Resource05,2011-04-27 08:26:21.667000+00:00 +Internet,LEFT_case-6751,2011-05-12 00:00:00+00:00,General,2011-05-11 15:38:18.938000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource05,2011-03-17 00:00:00.010000+00:00,task-22222,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-05-11 15:38:19.908000+00:00 +Internet,LEFT_case-6751,2011-05-12 00:00:00+00:00,General,2011-05-11 15:38:18.938000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource05,2011-03-17 00:00:00.010000+00:00,task-22223,T03 Adjust confirmation of receipt,complete,Group 1,admin2,2011-05-11 15:38:20.615000+00:00 +e-mail,LEFT_case-6757,2011-04-29 00:00:00+00:00,General,2011-08-31 11:20:42.561000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource14,2011-03-04 00:00:00.010000+00:00,task-18382,Confirmation of receipt,complete,EMPTY,Resource14,2011-04-08 09:00:47.160000+00:00 +e-mail,LEFT_case-6757,2011-04-29 00:00:00+00:00,General,2011-08-31 11:20:42.561000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource14,2011-03-04 00:00:00.010000+00:00,task-19614,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-04-08 09:01:44.647000+00:00 +e-mail,LEFT_case-6757,2011-04-29 00:00:00+00:00,General,2011-08-31 11:20:42.561000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource14,2011-03-04 00:00:00.010000+00:00,task-19613,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-04-08 09:02:59.214000+00:00 +Internet,LEFT_case-6765,2011-05-13 00:00:00+00:00,General,2011-05-13 09:54:20.801000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-18537,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-05 16:03:42.144000+00:00 +Internet,LEFT_case-6765,2011-05-13 00:00:00+00:00,General,2011-05-13 09:54:20.801000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-19308,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-06 13:37:59.901000+00:00 +Internet,LEFT_case-6765,2011-05-13 00:00:00+00:00,General,2011-05-13 09:54:20.801000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-19177,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-06 13:44:00.734000+00:00 +Internet,LEFT_case-6767,2011-05-24 00:00:00+00:00,General,2011-05-19 15:45:39.897000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource05,2011-03-29 00:00:00.020000+00:00,task-18541,Confirmation of receipt,complete,EMPTY,admin1,2011-04-12 15:37:05.390000+00:00 +Internet,LEFT_case-6767,2011-05-24 00:00:00+00:00,General,2011-05-19 15:45:39.897000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource05,2011-03-29 00:00:00.020000+00:00,task-20066,T04 Determine confirmation of receipt,complete,Group 3,admin1,2011-04-12 16:04:12.375000+00:00 +Internet,LEFT_case-6767,2011-05-24 00:00:00+00:00,General,2011-05-19 15:45:39.897000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource05,2011-03-29 00:00:00.020000+00:00,task-20063,T06 Determine necessity of stop advice,complete,EMPTY,Resource05,2011-05-09 09:26:55.702000+00:00 +Internet,LEFT_case-6778,2011-05-13 00:00:00+00:00,General,2011-05-13 10:13:27.812000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-18587,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 13:20:34.912000+00:00 +Internet,LEFT_case-6778,2011-05-13 00:00:00+00:00,General,2011-05-13 10:13:27.812000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-19536,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 13:31:18.565000+00:00 +Internet,LEFT_case-6778,2011-05-13 00:00:00+00:00,General,2011-05-13 10:13:27.812000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-19535,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-07 13:31:40.561000+00:00 +Internet,LEFT_case-6782,2011-07-27 01:06:40+00:00,General,2011-08-31 11:48:48.898000+00:00,2011-07-27 01:06:40.020000+00:00,,admin1,2011-03-28 01:06:40.020000+00:00,task-18603,Confirmation of receipt,complete,EMPTY,Resource15,2011-04-06 10:36:47.785000+00:00 +Internet,LEFT_case-6782,2011-07-27 01:06:40+00:00,General,2011-08-31 11:48:48.898000+00:00,2011-07-27 01:06:40.020000+00:00,,admin1,2011-03-28 01:06:40.020000+00:00,task-19247,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-14 08:57:13.347000+00:00 +Internet,LEFT_case-6782,2011-07-27 01:06:40+00:00,General,2011-08-31 11:48:48.898000+00:00,2011-07-27 01:06:40.020000+00:00,,admin1,2011-03-28 01:06:40.020000+00:00,task-20351,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-04-14 09:08:15.597000+00:00 +Internet,LEFT_case-6785,2011-05-24 00:00:00+00:00,General,2011-05-17 13:24:16.426000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource08,2011-03-29 00:00:00.020000+00:00,task-18681,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 15:50:12.956000+00:00 +Internet,LEFT_case-6785,2011-05-24 00:00:00+00:00,General,2011-05-17 13:24:16.426000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource08,2011-03-29 00:00:00.020000+00:00,task-19594,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 15:53:28.472000+00:00 +Internet,LEFT_case-6785,2011-05-24 00:00:00+00:00,General,2011-05-17 13:24:16.426000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource08,2011-03-29 00:00:00.020000+00:00,task-19593,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-07 15:54:09.882000+00:00 +Internet,LEFT_case-6786,2011-05-25 00:00:00+00:00,General,2011-04-21 12:15:57.402000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource06,2011-03-30 00:00:00.020000+00:00,task-18683,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-06 14:58:48.017000+00:00 +Internet,LEFT_case-6786,2011-05-25 00:00:00+00:00,General,2011-04-21 12:15:57.402000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource06,2011-03-30 00:00:00.020000+00:00,task-19353,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-06 14:59:35.465000+00:00 +Internet,LEFT_case-6786,2011-05-25 00:00:00+00:00,General,2011-04-21 12:15:57.402000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource06,2011-03-30 00:00:00.020000+00:00,task-19354,T04 Determine confirmation of receipt,complete,EMPTY,admin1,2011-04-21 12:15:45.418000+00:00 +Internet,LEFT_case-6787,2011-05-25 01:06:40+00:00,General,2011-05-04 11:08:57.615000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource11,2011-03-30 01:06:40.020000+00:00,task-18690,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 10:21:19.162000+00:00 +Internet,LEFT_case-6787,2011-05-25 01:06:40+00:00,General,2011-05-04 11:08:57.615000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource11,2011-03-30 01:06:40.020000+00:00,task-21672,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 10:22:17.855000+00:00 +Internet,LEFT_case-6787,2011-05-25 01:06:40+00:00,General,2011-05-04 11:08:57.615000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource11,2011-03-30 01:06:40.020000+00:00,task-21670,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 10:23:56.234000+00:00 +Internet,LEFT_case-6790,2011-05-25 00:00:00+00:00,General,2011-05-12 08:59:34.294000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource11,2011-03-30 00:00:00.020000+00:00,task-18701,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 10:01:24.870000+00:00 +Internet,LEFT_case-6790,2011-05-25 00:00:00+00:00,General,2011-05-12 08:59:34.294000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource11,2011-03-30 00:00:00.020000+00:00,task-21655,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 10:01:54.551000+00:00 +Internet,LEFT_case-6790,2011-05-25 00:00:00+00:00,General,2011-05-12 08:59:34.294000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource11,2011-03-30 00:00:00.020000+00:00,task-21654,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 10:02:23.352000+00:00 +Internet,LEFT_case-6790,2011-05-25 00:00:00+00:00,General,2011-05-12 08:59:34.294000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource11,2011-03-30 00:00:00.020000+00:00,task-24271,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-05-10 14:53:49.695000+00:00 +Internet,LEFT_case-6790,2011-05-25 00:00:00+00:00,General,2011-05-12 08:59:34.294000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource11,2011-03-30 00:00:00.020000+00:00,task-24294,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-05-11 16:02:19.076000+00:00 +Internet,LEFT_case-6800,2011-05-25 01:06:40+00:00,General,2011-09-07 15:24:18.355000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource14,2011-03-30 01:06:40.020000+00:00,task-18756,Confirmation of receipt,complete,EMPTY,Resource14,2011-06-17 08:32:19.910000+00:00 +Internet,LEFT_case-6800,2011-05-25 01:06:40+00:00,General,2011-09-07 15:24:18.355000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource14,2011-03-30 01:06:40.020000+00:00,task-28864,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-06-17 08:33:09.044000+00:00 +Internet,LEFT_case-6800,2011-05-25 01:06:40+00:00,General,2011-09-07 15:24:18.355000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource14,2011-03-30 01:06:40.020000+00:00,task-28863,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-06-17 08:45:14.789000+00:00 +Internet,LEFT_case-6801,2011-05-26 00:00:00+00:00,General,2011-04-21 10:43:49.725000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-18757,Confirmation of receipt,complete,EMPTY,admin2,2011-04-21 10:43:50.470000+00:00 +Internet,LEFT_case-6802,2011-05-26 00:00:00+00:00,General,2011-05-04 08:47:50.171000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-18761,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 10:54:31.606000+00:00 +Internet,LEFT_case-6802,2011-05-26 00:00:00+00:00,General,2011-05-04 08:47:50.171000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21735,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 10:55:23.901000+00:00 +Internet,LEFT_case-6802,2011-05-26 00:00:00+00:00,General,2011-05-04 08:47:50.171000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21734,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 10:55:51.445000+00:00 +Internet,LEFT_case-6804,2011-05-26 00:00:00+00:00,General,2011-05-11 10:08:17.075000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-18774,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 11:02:52.955000+00:00 +Internet,LEFT_case-6804,2011-05-26 00:00:00+00:00,General,2011-05-11 10:08:17.075000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21751,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 11:03:28.186000+00:00 +Internet,LEFT_case-6804,2011-05-26 00:00:00+00:00,General,2011-05-11 10:08:17.075000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21750,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 11:03:50.973000+00:00 +Internet,LEFT_case-6805,2011-05-26 00:00:00+00:00,General,2011-06-30 09:38:10.645000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource09,2011-03-31 00:00:00.020000+00:00,task-18786,Confirmation of receipt,complete,EMPTY,Resource09,2011-05-17 12:18:54.427000+00:00 +Internet,LEFT_case-6805,2011-05-26 00:00:00+00:00,General,2011-06-30 09:38:10.645000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource09,2011-03-31 00:00:00.020000+00:00,task-25249,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-05-17 12:19:13.915000+00:00 +Internet,LEFT_case-6805,2011-05-26 00:00:00+00:00,General,2011-06-30 09:38:10.645000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource09,2011-03-31 00:00:00.020000+00:00,task-25254,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-05-17 12:21:09.902000+00:00 +Internet,LEFT_case-6807,2011-05-27 00:00:00+00:00,General,2011-05-11 10:38:56.426000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource11,2011-04-01 00:00:00.020000+00:00,task-18820,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 11:22:10.877000+00:00 +Internet,LEFT_case-6807,2011-05-27 00:00:00+00:00,General,2011-05-11 10:38:56.426000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource11,2011-04-01 00:00:00.020000+00:00,task-21772,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 11:22:42.473000+00:00 +Internet,LEFT_case-6807,2011-05-27 00:00:00+00:00,General,2011-05-11 10:38:56.426000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource11,2011-04-01 00:00:00.020000+00:00,task-21771,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 11:23:04.852000+00:00 +Internet,LEFT_case-6838,2011-05-27 00:00:00+00:00,General,2011-05-31 11:22:53.024000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource14,2011-04-01 00:00:00.020000+00:00,task-18916,Confirmation of receipt,complete,EMPTY,Resource14,2011-04-13 09:05:15.465000+00:00 +Internet,LEFT_case-6838,2011-05-27 00:00:00+00:00,General,2011-05-31 11:22:53.024000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource14,2011-04-01 00:00:00.020000+00:00,task-20152,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-04-13 09:06:01.065000+00:00 +Internet,LEFT_case-6838,2011-05-27 00:00:00+00:00,General,2011-05-31 11:22:53.024000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource14,2011-04-01 00:00:00.020000+00:00,task-20151,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-04-13 09:45:49.567000+00:00 +Post,LEFT_case-6848,2011-05-09 00:00:00+00:00,General,2011-05-20 14:23:58.983000+00:00,2011-05-09 00:00:00.020000+00:00,,Resource11,2011-03-14 00:00:00.010000+00:00,task-18969,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 10:23:52.791000+00:00 +Post,LEFT_case-6848,2011-05-09 00:00:00+00:00,General,2011-05-20 14:23:58.983000+00:00,2011-05-09 00:00:00.020000+00:00,,Resource11,2011-03-14 00:00:00.010000+00:00,task-20409,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-14 10:24:24.463000+00:00 +Post,LEFT_case-6848,2011-05-09 00:00:00+00:00,General,2011-05-20 14:23:58.983000+00:00,2011-05-09 00:00:00.020000+00:00,,Resource11,2011-03-14 00:00:00.010000+00:00,task-20408,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 10:24:47.705000+00:00 +Internet,LEFT_case-6862,2011-05-15 00:00:00+00:00,General,2011-06-01 08:27:49.750000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource23,2011-03-20 00:00:00.010000+00:00,task-19075,Confirmation of receipt,complete,EMPTY,Resource23,2011-04-06 10:40:13.700000+00:00 +Internet,LEFT_case-6862,2011-05-15 00:00:00+00:00,General,2011-06-01 08:27:49.750000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource23,2011-03-20 00:00:00.010000+00:00,task-19249,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-04-06 10:51:11.013000+00:00 +Internet,LEFT_case-6862,2011-05-15 00:00:00+00:00,General,2011-06-01 08:27:49.750000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource23,2011-03-20 00:00:00.010000+00:00,task-19253,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource23,2011-04-06 10:54:49.381000+00:00 +Internet,LEFT_case-6862,2011-05-15 00:00:00+00:00,General,2011-06-01 08:27:49.750000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource23,2011-03-20 00:00:00.010000+00:00,task-19455,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-04-07 09:53:10.816000+00:00 +Internet,LEFT_case-6862,2011-05-15 00:00:00+00:00,General,2011-06-01 08:27:49.750000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource23,2011-03-20 00:00:00.010000+00:00,task-19474,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-04-07 10:12:05.283000+00:00 +Internet,LEFT_case-6864,2011-05-31 00:00:00+00:00,General,2011-05-11 10:12:43.232000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource11,2011-04-05 00:00:00.020000+00:00,task-19172,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 11:37:58.407000+00:00 +Internet,LEFT_case-6864,2011-05-31 00:00:00+00:00,General,2011-05-11 10:12:43.232000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource11,2011-04-05 00:00:00.020000+00:00,task-21793,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 11:38:34.130000+00:00 +Internet,LEFT_case-6864,2011-05-31 00:00:00+00:00,General,2011-05-11 10:12:43.232000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource11,2011-04-05 00:00:00.020000+00:00,task-21792,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 11:38:59.640000+00:00 +Internet,LEFT_case-6865,2011-05-31 01:06:40+00:00,General,2011-05-11 10:24:18.810000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource11,2011-04-05 01:06:40.020000+00:00,task-19173,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 11:57:59.419000+00:00 +Internet,LEFT_case-6865,2011-05-31 01:06:40+00:00,General,2011-05-11 10:24:18.810000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource11,2011-04-05 01:06:40.020000+00:00,task-21814,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 11:58:30.448000+00:00 +Internet,LEFT_case-6865,2011-05-31 01:06:40+00:00,General,2011-05-11 10:24:18.810000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource11,2011-04-05 01:06:40.020000+00:00,task-21813,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 11:59:02.639000+00:00 +Internet,LEFT_case-6869,2011-05-31 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource01,2011-04-06 00:00:00.020000+00:00,task-19234,Confirmation of receipt,complete,EMPTY,admin2,2011-05-26 13:12:22.644000+00:00 +Internet,LEFT_case-6872,2011-05-31 00:00:00+00:00,General,2011-05-26 14:44:18.896000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource06,2011-04-06 00:00:00.020000+00:00,task-19250,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-26 12:25:03.223000+00:00 +Internet,LEFT_case-6872,2011-05-31 00:00:00+00:00,General,2011-05-26 14:44:18.896000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource06,2011-04-06 00:00:00.020000+00:00,task-22177,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-26 12:58:44.562000+00:00 +Internet,LEFT_case-6872,2011-05-31 00:00:00+00:00,General,2011-05-26 14:44:18.896000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource06,2011-04-06 00:00:00.020000+00:00,task-22172,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-27 08:29:40.103000+00:00 +Internet,LEFT_case-6874,2011-05-31 01:06:40+00:00,General,2011-05-30 00:00:00.020000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource01,2011-04-06 01:06:40.020000+00:00,task-19274,Confirmation of receipt,complete,EMPTY,admin2,2011-05-31 07:49:04.675000+00:00 +Internet,LEFT_case-6899,2011-06-01 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource01,2011-04-06 00:00:00.020000+00:00,task-19505,Confirmation of receipt,complete,EMPTY,admin2,2011-05-26 13:12:56.277000+00:00 +Internet,LEFT_case-6900,2011-06-01 00:00:00+00:00,General,2011-05-19 10:38:35.015000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-19510,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 13:18:49.743000+00:00 +Internet,LEFT_case-6900,2011-06-01 00:00:00+00:00,General,2011-05-19 10:38:35.015000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-21873,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 13:19:23.812000+00:00 +Internet,LEFT_case-6900,2011-06-01 00:00:00+00:00,General,2011-05-19 10:38:35.015000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-21872,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 13:19:47.516000+00:00 +Internet,LEFT_case-6901,2011-04-07 01:06:40+00:00,General,2011-05-09 11:55:01.282000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource22,2011-02-25 01:06:40.010000+00:00,task-19523,Confirmation of receipt,complete,EMPTY,admin2,2011-05-09 11:55:02.416000+00:00 +Internet,LEFT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-19528,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-02 09:53:08.159000+00:00 +Internet,LEFT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22928,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-02 09:54:58.525000+00:00 +Internet,LEFT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22926,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 09:56:28.248000+00:00 +Internet,LEFT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22932,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-05-02 09:57:45.909000+00:00 +Internet,LEFT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22935,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 09:58:06.941000+00:00 +Internet,LEFT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22937,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-05-02 09:58:28.736000+00:00 +Internet,LEFT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22938,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 09:58:52.039000+00:00 +Internet,LEFT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22939,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-05-02 10:00:14.673000+00:00 +Internet,LEFT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22944,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 10:20:49.180000+00:00 +Internet,LEFT_case-6904,2011-06-01 00:00:00+00:00,General,2011-05-11 10:44:38.184000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-19556,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 11:08:51.932000+00:00 +Internet,LEFT_case-6904,2011-06-01 00:00:00+00:00,General,2011-05-11 10:44:38.184000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-22552,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 11:09:27.171000+00:00 +Internet,LEFT_case-6904,2011-06-01 00:00:00+00:00,General,2011-05-11 10:44:38.184000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-22551,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-28 11:09:52.935000+00:00 +Desk,LEFT_case-6912,2011-05-17 01:06:40+00:00,General,2011-05-12 08:39:47.740000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource06,2011-03-22 01:06:40.010000+00:00,task-19669,Confirmation of receipt,complete,EMPTY,admin2,2011-05-12 08:39:48.752000+00:00 +Internet,LEFT_case-6944,2011-06-01 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource01,2011-04-06 00:00:00.020000+00:00,task-19958,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 13:30:26.922000+00:00 +Internet,LEFT_case-6944,2011-06-01 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource01,2011-04-06 00:00:00.020000+00:00,task-22639,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 13:31:55.907000+00:00 +Internet,LEFT_case-6944,2011-06-01 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource01,2011-04-06 00:00:00.020000+00:00,task-22638,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-28 13:34:04.228000+00:00 +Internet,LEFT_case-6947,2011-06-02 01:06:40+00:00,General,2011-05-23 09:49:37.059000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource11,2011-04-07 01:06:40.020000+00:00,task-19962,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 14:53:24.088000+00:00 +Internet,LEFT_case-6947,2011-06-02 01:06:40+00:00,General,2011-05-23 09:49:37.059000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource11,2011-04-07 01:06:40.020000+00:00,task-22678,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 14:53:56.885000+00:00 +Internet,LEFT_case-6947,2011-06-02 01:06:40+00:00,General,2011-05-23 09:49:37.059000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource11,2011-04-07 01:06:40.020000+00:00,task-22677,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-12 09:34:14.232000+00:00 +Internet,LEFT_case-6948,2011-06-02 00:00:00+00:00,General,2011-05-19 11:46:19.473000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-19975,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 15:16:02.969000+00:00 +Internet,LEFT_case-6948,2011-06-02 00:00:00+00:00,General,2011-05-19 11:46:19.473000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-22691,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 15:16:32.023000+00:00 +Internet,LEFT_case-6948,2011-06-02 00:00:00+00:00,General,2011-05-19 11:46:19.473000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-22690,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-03 12:03:51.093000+00:00 +Internet,LEFT_case-6948,2011-06-02 00:00:00+00:00,General,2011-05-19 11:46:19.473000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-24705,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-05-12 13:46:33.389000+00:00 +Internet,LEFT_case-6948,2011-06-02 00:00:00+00:00,General,2011-05-19 11:46:19.473000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-24707,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-05-19 10:35:15.145000+00:00 +Internet,LEFT_case-6950,2011-06-05 00:00:00+00:00,General,2011-05-19 12:06:02.771000+00:00,2011-06-05 00:00:00.020000+00:00,,Resource11,2011-04-10 00:00:00.020000+00:00,task-19993,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 15:05:51.422000+00:00 +Internet,LEFT_case-6950,2011-06-05 00:00:00+00:00,General,2011-05-19 12:06:02.771000+00:00,2011-06-05 00:00:00.020000+00:00,,Resource11,2011-04-10 00:00:00.020000+00:00,task-22683,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 15:06:20.254000+00:00 +Internet,LEFT_case-6950,2011-06-05 00:00:00+00:00,General,2011-05-19 12:06:02.771000+00:00,2011-06-05 00:00:00.020000+00:00,,Resource11,2011-04-10 00:00:00.020000+00:00,task-22682,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-12 09:46:12.540000+00:00 +Internet,LEFT_case-6951,2011-04-14 01:06:40+00:00,General,2011-04-12 00:00:00.020000+00:00,2011-04-14 01:06:40.020000+00:00,,Resource17,2010-12-09 01:06:40.010000+00:00,task-20008,Confirmation of receipt,complete,EMPTY,admin2,2011-04-14 08:20:48.570000+00:00 +Internet,LEFT_case-6953,2011-06-01 01:06:40+00:00,General,2011-06-17 08:32:56.223000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-04-06 01:06:40.020000+00:00,task-20035,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-19 10:10:25.445000+00:00 +Internet,LEFT_case-6953,2011-06-01 01:06:40+00:00,General,2011-06-17 08:32:56.223000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-04-06 01:06:40.020000+00:00,task-21033,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-19 10:11:00.222000+00:00 +Internet,LEFT_case-6953,2011-06-01 01:06:40+00:00,General,2011-06-17 08:32:56.223000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-04-06 01:06:40.020000+00:00,task-21032,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-19 10:11:26.110000+00:00 +Internet,LEFT_case-6955,2011-06-02 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-20037,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 14:49:47.708000+00:00 +Internet,LEFT_case-6955,2011-06-02 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-22673,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 14:50:15.040000+00:00 +Internet,LEFT_case-6955,2011-06-02 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-22672,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-05-26 13:13:58.332000+00:00 +Internet,LEFT_case-6957,2011-06-03 00:00:00+00:00,General,2011-05-26 11:37:57.372000+00:00,2011-06-03 00:00:00.020000+00:00,,Resource13,2011-04-08 00:00:00.020000+00:00,task-20039,Confirmation of receipt,complete,EMPTY,Resource13,2011-04-13 10:53:05.329000+00:00 +Internet,LEFT_case-6957,2011-06-03 00:00:00+00:00,General,2011-05-26 11:37:57.372000+00:00,2011-06-03 00:00:00.020000+00:00,,Resource13,2011-04-08 00:00:00.020000+00:00,task-20221,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-04-13 10:54:16.536000+00:00 +Internet,LEFT_case-6957,2011-06-03 00:00:00+00:00,General,2011-05-26 11:37:57.372000+00:00,2011-06-03 00:00:00.020000+00:00,,Resource13,2011-04-08 00:00:00.020000+00:00,task-20222,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-15 14:56:28.069000+00:00 +Desk,LEFT_case-6969,2011-05-20 00:00:00+00:00,General,2011-05-23 16:14:21.628000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource06,2011-03-25 00:00:00.010000+00:00,task-20175,Confirmation of receipt,complete,Group 1,Resource06,2011-04-13 11:59:05.016000+00:00 +Desk,LEFT_case-6969,2011-05-20 00:00:00+00:00,General,2011-05-23 16:14:21.628000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource06,2011-03-25 00:00:00.010000+00:00,task-20248,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-13 11:59:35.192000+00:00 +Desk,LEFT_case-6969,2011-05-20 00:00:00+00:00,General,2011-05-23 16:14:21.628000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource06,2011-03-25 00:00:00.010000+00:00,task-20247,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-27 13:41:29.549000+00:00 +Internet,LEFT_case-6979,2011-06-02 00:00:00+00:00,General,2011-05-25 15:38:06.845000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource02,2011-04-07 00:00:00.020000+00:00,task-20354,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-15 07:47:43.344000+00:00 +Internet,LEFT_case-6979,2011-06-02 00:00:00+00:00,General,2011-05-25 15:38:06.845000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource02,2011-04-07 00:00:00.020000+00:00,task-20590,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-15 07:48:38.937000+00:00 +Internet,LEFT_case-6979,2011-06-02 00:00:00+00:00,General,2011-05-25 15:38:06.845000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource02,2011-04-07 00:00:00.020000+00:00,task-20589,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-15 08:38:48.306000+00:00 +Internet,LEFT_case-6982,2011-06-06 01:06:40+00:00,General,2011-06-24 09:37:47.317000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource06,2011-04-09 01:06:40.020000+00:00,task-20455,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-26 09:45:57.669000+00:00 +Internet,LEFT_case-6982,2011-06-06 01:06:40+00:00,General,2011-06-24 09:37:47.317000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource06,2011-04-09 01:06:40.020000+00:00,task-22076,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-26 09:46:27.373000+00:00 +Internet,LEFT_case-6982,2011-06-06 01:06:40+00:00,General,2011-06-24 09:37:47.317000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource06,2011-04-09 01:06:40.020000+00:00,task-22075,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-26 09:46:53.741000+00:00 +Internet,LEFT_case-6987,2011-06-02 01:06:40+00:00,General,2011-04-21 09:38:51.239000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource15,2011-04-07 01:06:40.020000+00:00,task-20566,Confirmation of receipt,complete,Group 1,Resource15,2011-04-18 09:52:36.194000+00:00 +Internet,LEFT_case-6987,2011-06-02 01:06:40+00:00,General,2011-04-21 09:38:51.239000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource15,2011-04-07 01:06:40.020000+00:00,task-20736,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-04-18 09:53:10.803000+00:00 +Internet,LEFT_case-6987,2011-06-02 01:06:40+00:00,General,2011-04-21 09:38:51.239000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource15,2011-04-07 01:06:40.020000+00:00,task-20735,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-18 09:53:24.166000+00:00 +Internet,LEFT_case-6988,2011-07-01 01:06:40+00:00,General,2011-07-07 15:01:56.078000+00:00,2011-07-01 01:06:40.020000+00:00,Group 5,Resource02,2011-04-09 01:06:40.020000+00:00,task-20572,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:01:09.032000+00:00 +Internet,LEFT_case-6988,2011-07-01 01:06:40+00:00,General,2011-07-07 15:01:56.078000+00:00,2011-07-01 01:06:40.020000+00:00,Group 5,Resource02,2011-04-09 01:06:40.020000+00:00,task-21938,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-21 15:09:38.036000+00:00 +Internet,LEFT_case-6988,2011-07-01 01:06:40+00:00,General,2011-07-07 15:01:56.078000+00:00,2011-07-01 01:06:40.020000+00:00,Group 5,Resource02,2011-04-09 01:06:40.020000+00:00,task-21940,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:10:42.016000+00:00 +Internet,LEFT_case-6989,2011-06-06 00:00:00+00:00,General,2011-05-19 10:53:50.047000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-20579,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 15:11:56.573000+00:00 +Internet,LEFT_case-6989,2011-06-06 00:00:00+00:00,General,2011-05-19 10:53:50.047000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-22687,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 15:12:27.245000+00:00 +Internet,LEFT_case-6989,2011-06-06 00:00:00+00:00,General,2011-05-19 10:53:50.047000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-22686,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-13 08:36:59.996000+00:00 +Internet,LEFT_case-6989,2011-06-06 00:00:00+00:00,General,2011-05-19 10:53:50.047000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-24882,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-05-13 08:58:35.387000+00:00 +Internet,LEFT_case-6989,2011-06-06 00:00:00+00:00,General,2011-05-19 10:53:50.047000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-24885,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-05-19 10:32:05.630000+00:00 +Internet,LEFT_case-6990,2011-06-06 00:00:00+00:00,General,2011-05-31 08:25:25.998000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-20582,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 15:26:41.819000+00:00 +Internet,LEFT_case-6990,2011-06-06 00:00:00+00:00,General,2011-05-31 08:25:25.998000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-22697,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 15:27:17.716000+00:00 +Internet,LEFT_case-6990,2011-06-06 00:00:00+00:00,General,2011-05-31 08:25:25.998000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-22696,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-12 11:04:47.362000+00:00 +Internet,LEFT_case-6993,2011-06-06 00:00:00+00:00,General,2011-06-06 00:00:00.020000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-20586,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 15:43:32.808000+00:00 +Internet,LEFT_case-6993,2011-06-06 00:00:00+00:00,General,2011-06-06 00:00:00.020000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-22710,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 15:44:05.222000+00:00 +Internet,LEFT_case-6993,2011-06-06 00:00:00+00:00,General,2011-06-06 00:00:00.020000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-22709,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-12 11:45:14.303000+00:00 +Internet,LEFT_case-6995,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-20598,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 09:28:23.446000+00:00 +Internet,LEFT_case-6995,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21281,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-04-20 09:31:24.907000+00:00 +Internet,LEFT_case-6995,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21280,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-20 09:32:36.702000+00:00 +Desk,LEFT_case-6996,2011-05-17 00:00:00+00:00,General,2011-05-23 09:22:52.709000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource11,2011-03-22 00:00:00.010000+00:00,task-20605,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-19 09:10:57.850000+00:00 +Desk,LEFT_case-6996,2011-05-17 00:00:00+00:00,General,2011-05-23 09:22:52.709000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource11,2011-03-22 00:00:00.010000+00:00,task-20983,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-19 09:11:30.897000+00:00 +Desk,LEFT_case-6996,2011-05-17 00:00:00+00:00,General,2011-05-23 09:22:52.709000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource11,2011-03-22 00:00:00.010000+00:00,task-20981,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-19 09:12:15.048000+00:00 +Internet,LEFT_case-6997,2011-06-06 00:00:00+00:00,General,2011-05-31 07:51:26.263000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-20606,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 08:59:03.302000+00:00 +Internet,LEFT_case-6997,2011-06-06 00:00:00+00:00,General,2011-05-31 07:51:26.263000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-22875,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 08:59:35.086000+00:00 +Internet,LEFT_case-6997,2011-06-06 00:00:00+00:00,General,2011-05-31 07:51:26.263000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-22876,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 08:59:49.634000+00:00 +Desk,LEFT_case-6998,2011-07-01 01:06:40+00:00,General,2011-06-20 15:22:29.132000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource13,2011-03-22 01:06:40.010000+00:00,task-20613,Confirmation of receipt,complete,EMPTY,Resource13,2011-04-20 07:56:26.031000+00:00 +Desk,LEFT_case-6998,2011-07-01 01:06:40+00:00,General,2011-06-20 15:22:29.132000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource13,2011-03-22 01:06:40.010000+00:00,task-21246,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-04-20 07:57:15.696000+00:00 +Desk,LEFT_case-6998,2011-07-01 01:06:40+00:00,General,2011-06-20 15:22:29.132000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource13,2011-03-22 01:06:40.010000+00:00,task-21248,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-04-27 09:06:36.518000+00:00 +Internet,LEFT_case-6999,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-20623,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 10:02:58.352000+00:00 +Internet,LEFT_case-6999,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21313,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 10:08:24.390000+00:00 +Internet,LEFT_case-6999,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21303,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-20 10:13:46.327000+00:00 +Desk,LEFT_case-7000,2011-05-18 01:06:40+00:00,General,2011-05-17 10:41:23.512000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource17,2011-03-23 01:06:40.010000+00:00,task-20635,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:55:07.600000+00:00 +Desk,LEFT_case-7000,2011-05-18 01:06:40+00:00,General,2011-05-17 10:41:23.512000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource17,2011-03-23 01:06:40.010000+00:00,task-21975,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 18:32:28.746000+00:00 +Desk,LEFT_case-7000,2011-05-18 01:06:40+00:00,General,2011-05-17 10:41:23.512000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource17,2011-03-23 01:06:40.010000+00:00,task-21965,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-21 18:32:48.153000+00:00 +Internet,LEFT_case-7002,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-20638,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 13:38:18.469000+00:00 +Internet,LEFT_case-7002,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-21114,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 13:39:54.520000+00:00 +Internet,LEFT_case-7002,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-21113,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-19 13:54:22.612000+00:00 +Internet,LEFT_case-7004,2011-05-15 01:06:40+00:00,General,2011-05-04 08:00:41.113000+00:00,2011-05-15 01:06:40.020000+00:00,,Resource11,2011-03-24 01:06:40.010000+00:00,task-20641,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-19 10:23:00.736000+00:00 +Internet,LEFT_case-7004,2011-05-15 01:06:40+00:00,General,2011-05-04 08:00:41.113000+00:00,2011-05-15 01:06:40.020000+00:00,,Resource11,2011-03-24 01:06:40.010000+00:00,task-21048,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-19 10:23:57.921000+00:00 +Internet,LEFT_case-7004,2011-05-15 01:06:40+00:00,General,2011-05-04 08:00:41.113000+00:00,2011-05-15 01:06:40.020000+00:00,,Resource11,2011-03-24 01:06:40.010000+00:00,task-21046,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-19 10:24:53.065000+00:00 +Internet,LEFT_case-7005,2011-06-12 01:06:40+00:00,General,2011-06-06 14:43:46.515000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource11,2011-04-12 01:06:40.020000+00:00,task-20642,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 08:56:59.477000+00:00 +Internet,LEFT_case-7005,2011-06-12 01:06:40+00:00,General,2011-06-06 14:43:46.515000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource11,2011-04-12 01:06:40.020000+00:00,task-22871,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 08:57:41.286000+00:00 +Internet,LEFT_case-7005,2011-06-12 01:06:40+00:00,General,2011-06-06 14:43:46.515000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource11,2011-04-12 01:06:40.020000+00:00,task-22870,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 08:58:18.142000+00:00 +Internet,LEFT_case-7008,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-20653,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:04:50.163000+00:00 +Internet,LEFT_case-7008,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-21170,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-19 15:29:59.098000+00:00 +Internet,LEFT_case-7008,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-21181,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:32:07.586000+00:00 +Desk,LEFT_case-7012,2011-05-19 00:00:00+00:00,General,2011-05-18 13:24:47.744000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource02,2011-03-24 00:00:00.010000+00:00,task-20662,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-20 09:56:02.184000+00:00 +Desk,LEFT_case-7012,2011-05-19 00:00:00+00:00,General,2011-05-18 13:24:47.744000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource02,2011-03-24 00:00:00.010000+00:00,task-21298,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-20 09:58:32.879000+00:00 +Desk,LEFT_case-7012,2011-05-19 00:00:00+00:00,General,2011-05-18 13:24:47.744000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource02,2011-03-24 00:00:00.010000+00:00,task-21297,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-20 10:03:16.476000+00:00 +Internet,LEFT_case-7014,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-20664,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:59:00.266000+00:00 +Internet,LEFT_case-7014,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21207,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 16:00:49.544000+00:00 +Internet,LEFT_case-7014,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21205,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-19 16:03:31.448000+00:00 +Internet,LEFT_case-7016,2011-05-20 01:06:40+00:00,General,2011-06-21 14:20:05.524000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource12,2011-03-25 01:06:40.010000+00:00,task-20668,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-02 12:46:29.233000+00:00 +Internet,LEFT_case-7016,2011-05-20 01:06:40+00:00,General,2011-06-21 14:20:05.524000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource12,2011-03-25 01:06:40.010000+00:00,task-23145,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-02 13:34:59.433000+00:00 +Internet,LEFT_case-7016,2011-05-20 01:06:40+00:00,General,2011-06-21 14:20:05.524000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource12,2011-03-25 01:06:40.010000+00:00,task-23113,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 13:45:23.536000+00:00 +Internet,LEFT_case-7016,2011-05-20 01:06:40+00:00,General,2011-06-21 14:20:05.524000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource12,2011-03-25 01:06:40.010000+00:00,task-23158,T08 Draft and send request for advice,complete,Group 1,Resource12,2011-05-02 13:47:15.573000+00:00 +Internet,LEFT_case-7016,2011-05-20 01:06:40+00:00,General,2011-06-21 14:20:05.524000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource12,2011-03-25 01:06:40.010000+00:00,task-23161,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 13:48:15.157000+00:00 +Internet,LEFT_case-7036,2011-06-05 01:06:40+00:00,General,2011-05-27 00:00:00.020000+00:00,2011-06-05 01:06:40.020000+00:00,,Resource09,2011-04-10 01:06:40.020000+00:00,task-20694,Confirmation of receipt,complete,EMPTY,admin2,2011-06-06 16:34:14.325000+00:00 +Internet,LEFT_case-7037,2011-07-18 01:06:40+00:00,General,2011-07-19 13:15:08.506000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource15,2011-04-11 01:06:40.020000+00:00,task-20700,Confirmation of receipt,complete,EMPTY,Resource15,2011-04-18 13:37:20.938000+00:00 +Internet,LEFT_case-7037,2011-07-18 01:06:40+00:00,General,2011-07-19 13:15:08.506000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource15,2011-04-11 01:06:40.020000+00:00,task-20819,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-04-18 13:37:50.086000+00:00 +Internet,LEFT_case-7037,2011-07-18 01:06:40+00:00,General,2011-07-19 13:15:08.506000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource15,2011-04-11 01:06:40.020000+00:00,task-20818,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-28 11:59:24.001000+00:00 +Internet,LEFT_case-7042,2011-06-07 01:06:40+00:00,General,2011-06-30 09:41:23.780000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource09,2011-04-12 01:06:40.020000+00:00,task-20724,Confirmation of receipt,complete,EMPTY,admin2,2011-06-30 09:41:24.724000+00:00 +Internet,LEFT_case-7043,2011-06-07 00:00:00+00:00,General,2011-05-30 12:56:19.706000+00:00,2011-06-07 00:00:00.020000+00:00,,Resource02,2011-04-12 00:00:00.020000+00:00,task-20732,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-20 15:06:51.527000+00:00 +Internet,LEFT_case-7043,2011-06-07 00:00:00+00:00,General,2011-05-30 12:56:19.706000+00:00,2011-06-07 00:00:00.020000+00:00,,Resource02,2011-04-12 00:00:00.020000+00:00,task-21519,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-20 15:07:23.977000+00:00 +Internet,LEFT_case-7043,2011-06-07 00:00:00+00:00,General,2011-05-30 12:56:19.706000+00:00,2011-06-07 00:00:00.020000+00:00,,Resource02,2011-04-12 00:00:00.020000+00:00,task-21518,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-21 09:08:09.585000+00:00 +Internet,LEFT_case-7045,2011-06-23 01:06:40+00:00,General,2011-06-22 16:04:10.860000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-04-12 01:06:40.020000+00:00,task-20758,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:38:27.803000+00:00 +Internet,LEFT_case-7045,2011-06-23 01:06:40+00:00,General,2011-06-22 16:04:10.860000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-04-12 01:06:40.020000+00:00,task-21957,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-21 15:38:44.484000+00:00 +Internet,LEFT_case-7045,2011-06-23 01:06:40+00:00,General,2011-06-22 16:04:10.860000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-04-12 01:06:40.020000+00:00,task-21959,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:41:04.015000+00:00 +Internet,LEFT_case-7047,2011-06-08 00:00:00+00:00,General,2011-05-19 12:28:29.205000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-20769,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 08:54:36.776000+00:00 +Internet,LEFT_case-7047,2011-06-08 00:00:00+00:00,General,2011-05-19 12:28:29.205000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22866,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 08:55:32.081000+00:00 +Internet,LEFT_case-7047,2011-06-08 00:00:00+00:00,General,2011-05-19 12:28:29.205000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22865,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 08:56:10.221000+00:00 +Internet,LEFT_case-7048,2011-06-08 00:00:00+00:00,General,2011-05-19 14:07:15.448000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-20791,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 09:05:51.779000+00:00 +Internet,LEFT_case-7048,2011-06-08 00:00:00+00:00,General,2011-05-19 14:07:15.448000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22882,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 09:06:29.623000+00:00 +Internet,LEFT_case-7048,2011-06-08 00:00:00+00:00,General,2011-05-19 14:07:15.448000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22881,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 09:06:52.392000+00:00 +Internet,LEFT_case-7051,2011-06-08 01:06:40+00:00,General,2011-05-19 13:54:09.449000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-20806,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 10:21:53.200000+00:00 +Internet,LEFT_case-7051,2011-06-08 01:06:40+00:00,General,2011-05-19 13:54:09.449000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-22968,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 10:22:40.005000+00:00 +Internet,LEFT_case-7051,2011-06-08 01:06:40+00:00,General,2011-05-19 13:54:09.449000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-22967,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 10:23:05.243000+00:00 +Internet,LEFT_case-7052,2011-06-08 00:00:00+00:00,General,2011-05-23 14:09:24.011000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-20809,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 09:14:09.273000+00:00 +Internet,LEFT_case-7052,2011-06-08 00:00:00+00:00,General,2011-05-23 14:09:24.011000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22889,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 09:14:29.481000+00:00 +Internet,LEFT_case-7052,2011-06-08 00:00:00+00:00,General,2011-05-23 14:09:24.011000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22891,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 09:15:05.702000+00:00 +Internet,LEFT_case-7053,2011-06-08 00:00:00+00:00,General,2011-06-06 15:24:53.815000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource17,2011-04-13 00:00:00.020000+00:00,task-20810,Confirmation of receipt,complete,EMPTY,Resource17,2011-05-30 13:39:34.619000+00:00 +Internet,LEFT_case-7053,2011-06-08 00:00:00+00:00,General,2011-06-06 15:24:53.815000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource17,2011-04-13 00:00:00.020000+00:00,task-27124,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-05-30 13:40:00.596000+00:00 +Internet,LEFT_case-7053,2011-06-08 00:00:00+00:00,General,2011-06-06 15:24:53.815000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource17,2011-04-13 00:00:00.020000+00:00,task-27125,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-05-30 13:40:54.484000+00:00 +Internet,LEFT_case-7058,2011-06-08 00:00:00+00:00,General,2011-05-31 14:07:43.182000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource15,2011-04-13 00:00:00.020000+00:00,task-20824,Confirmation of receipt,complete,EMPTY,Resource15,2011-04-21 08:57:21.371000+00:00 +Internet,LEFT_case-7058,2011-06-08 00:00:00+00:00,General,2011-05-31 14:07:43.182000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource15,2011-04-13 00:00:00.020000+00:00,task-21599,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-04-21 08:57:50.896000+00:00 +Internet,LEFT_case-7058,2011-06-08 00:00:00+00:00,General,2011-05-31 14:07:43.182000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource15,2011-04-13 00:00:00.020000+00:00,task-21598,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-21 08:58:43.039000+00:00 +Internet,LEFT_case-7060,2011-06-09 01:06:40+00:00,General,2011-09-14 16:00:50.214000+00:00,2011-06-09 01:06:40.020000+00:00,Group 5,Resource12,2011-04-14 01:06:40.020000+00:00,task-20831,Confirmation of receipt,complete,EMPTY,Resource18,2011-05-02 12:17:29.209000+00:00 +Internet,LEFT_case-7060,2011-06-09 01:06:40+00:00,General,2011-09-14 16:00:50.214000+00:00,2011-06-09 01:06:40.020000+00:00,Group 5,Resource12,2011-04-14 01:06:40.020000+00:00,task-23062,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-05-02 12:18:30.463000+00:00 +Internet,LEFT_case-7060,2011-06-09 01:06:40+00:00,General,2011-09-14 16:00:50.214000+00:00,2011-06-09 01:06:40.020000+00:00,Group 5,Resource12,2011-04-14 01:06:40.020000+00:00,task-23061,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-27 09:37:57.009000+00:00 +Internet,LEFT_case-7079,2011-06-09 00:00:00+00:00,General,2011-05-30 14:47:00.868000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource02,2011-04-14 00:00:00.020000+00:00,task-20941,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-21 16:37:33.380000+00:00 +Internet,LEFT_case-7079,2011-06-09 00:00:00+00:00,General,2011-05-30 14:47:00.868000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource02,2011-04-14 00:00:00.020000+00:00,task-21971,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-21 16:47:33.947000+00:00 +Internet,LEFT_case-7079,2011-06-09 00:00:00+00:00,General,2011-05-30 14:47:00.868000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource02,2011-04-14 00:00:00.020000+00:00,task-21970,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-21 16:47:56.392000+00:00 +Internet,LEFT_case-7080,2011-06-08 01:06:40+00:00,General,2011-05-19 14:11:26.431000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-20943,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 09:22:38.942000+00:00 +Internet,LEFT_case-7080,2011-06-08 01:06:40+00:00,General,2011-05-19 14:11:26.431000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-22910,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 09:23:18.843000+00:00 +Internet,LEFT_case-7080,2011-06-08 01:06:40+00:00,General,2011-05-19 14:11:26.431000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-22909,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 09:23:53.482000+00:00 +Internet,LEFT_case-7083,2011-06-10 01:06:40+00:00,General,2011-06-09 16:14:51.712000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource14,2011-04-15 01:06:40.020000+00:00,task-21002,Confirmation of receipt,complete,EMPTY,Resource14,2011-05-09 10:12:35.003000+00:00 +Internet,LEFT_case-7083,2011-06-10 01:06:40+00:00,General,2011-06-09 16:14:51.712000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource14,2011-04-15 01:06:40.020000+00:00,task-23908,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-09 10:14:12.584000+00:00 +Internet,LEFT_case-7083,2011-06-10 01:06:40+00:00,General,2011-06-09 16:14:51.712000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource14,2011-04-15 01:06:40.020000+00:00,task-23907,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-09 12:16:30.342000+00:00 +Internet,LEFT_case-7084,2011-06-13 00:00:00+00:00,General,2011-06-09 17:50:00.750000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-21021,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 10:46:52.264000+00:00 +Internet,LEFT_case-7084,2011-06-13 00:00:00+00:00,General,2011-06-09 17:50:00.750000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-22987,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 10:47:26.664000+00:00 +Internet,LEFT_case-7084,2011-06-13 00:00:00+00:00,General,2011-06-09 17:50:00.750000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-22986,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 10:47:49.397000+00:00 +Internet,LEFT_case-7085,2011-06-14 00:00:00+00:00,General,2011-08-18 08:47:26.880000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource21,2011-04-19 00:00:00.020000+00:00,task-21027,Confirmation of receipt,complete,Group 1,Resource21,2011-04-19 10:32:59.775000+00:00 +Internet,LEFT_case-7085,2011-06-14 00:00:00+00:00,General,2011-08-18 08:47:26.880000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource21,2011-04-19 00:00:00.020000+00:00,task-21058,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-04-19 10:34:54.325000+00:00 +Internet,LEFT_case-7085,2011-06-14 00:00:00+00:00,General,2011-08-18 08:47:26.880000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource21,2011-04-19 00:00:00.020000+00:00,task-21056,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-05-18 09:25:14.945000+00:00 +Internet,LEFT_case-7087,2011-05-31 01:06:40+00:00,General,,2011-05-31 01:06:40.020000+00:00,Group 5,Resource14,2011-04-05 01:06:40.020000+00:00,task-21075,Confirmation of receipt,complete,EMPTY,Resource15,2011-04-20 11:21:34.857000+00:00 +Internet,LEFT_case-7087,2011-05-31 01:06:40+00:00,General,,2011-05-31 01:06:40.020000+00:00,Group 5,Resource14,2011-04-05 01:06:40.020000+00:00,task-21398,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-04-20 11:22:34.430000+00:00 +Internet,LEFT_case-7087,2011-05-31 01:06:40+00:00,General,,2011-05-31 01:06:40.020000+00:00,Group 5,Resource14,2011-04-05 01:06:40.020000+00:00,task-21397,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-20 11:24:35.924000+00:00 +Internet,LEFT_case-7089,2011-04-22 01:06:40+00:00,General,2011-04-21 15:28:13.241000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource18,2011-04-14 01:06:40.020000+00:00,task-21093,Confirmation of receipt,complete,Group 1,admin3,2011-04-19 13:53:36.217000+00:00 +Internet,LEFT_case-7089,2011-04-22 01:06:40+00:00,General,2011-04-21 15:28:13.241000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource18,2011-04-14 01:06:40.020000+00:00,task-21127,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-04-19 15:54:25.939000+00:00 +Internet,LEFT_case-7089,2011-04-22 01:06:40+00:00,General,2011-04-21 15:28:13.241000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource18,2011-04-14 01:06:40.020000+00:00,task-21188,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-04-19 15:54:37.365000+00:00 +Internet,LEFT_case-709,2010-11-26 00:00:00+00:00,General,2011-08-18 08:41:39.734000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource21,2010-10-01 00:00:00.020000+00:00,task-3,Confirmation of receipt,complete,Group 1,Resource21,2010-11-03 10:57:52.384000+00:00 +Internet,LEFT_case-709,2010-11-26 00:00:00+00:00,General,2011-08-18 08:41:39.734000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource21,2010-10-01 00:00:00.020000+00:00,task-808,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2010-11-03 11:00:23.028000+00:00 +Internet,LEFT_case-709,2010-11-26 00:00:00+00:00,General,2011-08-18 08:41:39.734000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource21,2010-10-01 00:00:00.020000+00:00,task-804,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2010-11-09 14:33:13.103000+00:00 +Internet,LEFT_case-709,2010-11-26 00:00:00+00:00,General,2011-08-18 08:41:39.734000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource21,2010-10-01 00:00:00.020000+00:00,task-1281,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource21,2010-11-09 14:33:55.830000+00:00 +Internet,LEFT_case-709,2010-11-26 00:00:00+00:00,General,2011-08-18 08:41:39.734000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource21,2010-10-01 00:00:00.020000+00:00,task-1282,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2010-11-09 14:34:28.410000+00:00 +Internet,LEFT_case-7091,2011-05-24 01:06:40+00:00,General,2011-05-20 16:28:57.947000+00:00,2011-05-24 01:06:40.020000+00:00,,Resource04,2011-03-29 01:06:40.020000+00:00,task-21158,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-04 12:19:12.020000+00:00 +Internet,LEFT_case-7091,2011-05-24 01:06:40+00:00,General,2011-05-20 16:28:57.947000+00:00,2011-05-24 01:06:40.020000+00:00,,Resource04,2011-03-29 01:06:40.020000+00:00,task-23736,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-04 12:52:03.911000+00:00 +Internet,LEFT_case-7091,2011-05-24 01:06:40+00:00,General,2011-05-20 16:28:57.947000+00:00,2011-05-24 01:06:40.020000+00:00,,Resource04,2011-03-29 01:06:40.020000+00:00,task-23718,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-04 12:52:31.157000+00:00 +Internet,LEFT_case-7092,2011-05-26 00:00:00+00:00,General,2011-05-11 10:29:02.178000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21165,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-27 11:05:46.277000+00:00 +Internet,LEFT_case-7092,2011-05-26 00:00:00+00:00,General,2011-05-11 10:29:02.178000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-22350,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-27 11:06:49.973000+00:00 +Internet,LEFT_case-7092,2011-05-26 00:00:00+00:00,General,2011-05-11 10:29:02.178000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-22346,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-27 13:06:46.444000+00:00 +Internet,LEFT_case-7093,2011-05-26 00:00:00+00:00,General,2011-05-11 10:20:22.501000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21168,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 09:26:03.180000+00:00 +Internet,LEFT_case-7093,2011-05-26 00:00:00+00:00,General,2011-05-11 10:20:22.501000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-22487,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 09:26:33.419000+00:00 +Internet,LEFT_case-7093,2011-05-26 00:00:00+00:00,General,2011-05-11 10:20:22.501000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-22486,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-28 09:44:31.203000+00:00 +Internet,LEFT_case-7094,2011-05-26 00:00:00+00:00,General,2011-06-16 14:45:04.264000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource05,2011-03-31 00:00:00.020000+00:00,task-21171,Confirmation of receipt,complete,EMPTY,Resource05,2011-05-02 09:48:02.020000+00:00 +Internet,LEFT_case-7094,2011-05-26 00:00:00+00:00,General,2011-06-16 14:45:04.264000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource05,2011-03-31 00:00:00.020000+00:00,task-22921,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-02 09:51:37.777000+00:00 +Internet,LEFT_case-7094,2011-05-26 00:00:00+00:00,General,2011-06-16 14:45:04.264000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource05,2011-03-31 00:00:00.020000+00:00,task-22920,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-02 09:52:19.979000+00:00 +Internet,LEFT_case-7094,2011-05-26 00:00:00+00:00,General,2011-06-16 14:45:04.264000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource05,2011-03-31 00:00:00.020000+00:00,task-22927,T16 Report reasons to hold request,complete,Group 1,Resource05,2011-05-02 09:56:11.751000+00:00 +Internet,LEFT_case-7094,2011-05-26 00:00:00+00:00,General,2011-06-16 14:45:04.264000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource05,2011-03-31 00:00:00.020000+00:00,task-22934,T19 Determine report Y to stop indication,complete,Group 3,Resource05,2011-05-02 09:59:10.319000+00:00 +Internet,LEFT_case-7108,2011-06-12 00:00:00+00:00,General,2011-06-09 16:52:12.437000+00:00,2011-06-12 00:00:00.020000+00:00,,Resource14,2011-04-17 00:00:00.020000+00:00,task-21254,Confirmation of receipt,complete,EMPTY,Resource14,2011-05-09 10:18:51.421000+00:00 +Internet,LEFT_case-7108,2011-06-12 00:00:00+00:00,General,2011-06-09 16:52:12.437000+00:00,2011-06-12 00:00:00.020000+00:00,,Resource14,2011-04-17 00:00:00.020000+00:00,task-23914,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-09 10:19:33.719000+00:00 +Internet,LEFT_case-7108,2011-06-12 00:00:00+00:00,General,2011-06-09 16:52:12.437000+00:00,2011-06-12 00:00:00.020000+00:00,,Resource14,2011-04-17 00:00:00.020000+00:00,task-23913,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-09 12:11:03.404000+00:00 +Internet,LEFT_case-7110,2011-04-12 00:00:00+00:00,General,2011-04-20 12:40:53.709000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource06,2011-02-15 00:00:00.010000+00:00,task-21283,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-20 10:21:47.949000+00:00 +Internet,LEFT_case-7110,2011-04-12 00:00:00+00:00,General,2011-04-20 12:40:53.709000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource06,2011-02-15 00:00:00.010000+00:00,task-21339,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-20 10:22:36.294000+00:00 +Internet,LEFT_case-7110,2011-04-12 00:00:00+00:00,General,2011-04-20 12:40:53.709000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource06,2011-02-15 00:00:00.010000+00:00,task-21337,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-20 10:23:07.406000+00:00 +e-mail,LEFT_case-7112,2011-05-20 01:06:40+00:00,General,2011-05-24 15:00:51.630000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource25,2011-03-25 01:06:40.010000+00:00,task-21294,Confirmation of receipt,complete,EMPTY,Resource25,2011-05-18 15:11:02.512000+00:00 +e-mail,LEFT_case-7112,2011-05-20 01:06:40+00:00,General,2011-05-24 15:00:51.630000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource25,2011-03-25 01:06:40.010000+00:00,task-25552,T04 Determine confirmation of receipt,complete,EMPTY,Resource25,2011-05-18 15:12:53.203000+00:00 +e-mail,LEFT_case-7112,2011-05-20 01:06:40+00:00,General,2011-05-24 15:00:51.630000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource25,2011-03-25 01:06:40.010000+00:00,task-25551,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-05-18 15:18:52.187000+00:00 +Desk,LEFT_case-7114,2011-05-27 00:00:00+00:00,General,2011-08-30 10:59:41.122000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-21378,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-03 15:18:22.690000+00:00 +Desk,LEFT_case-7114,2011-05-27 00:00:00+00:00,General,2011-08-30 10:59:41.122000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-23536,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-03 15:19:18.200000+00:00 +Desk,LEFT_case-7114,2011-05-27 00:00:00+00:00,General,2011-08-30 10:59:41.122000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-23535,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-03 15:20:30.072000+00:00 +Desk,LEFT_case-7117,2011-05-27 00:00:00+00:00,General,2011-08-30 09:21:52.980000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-21441,Confirmation of receipt,complete,EMPTY,Resource12,2011-06-06 14:32:52.471000+00:00 +Desk,LEFT_case-7117,2011-05-27 00:00:00+00:00,General,2011-08-30 09:21:52.980000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-27870,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-06-06 14:33:56.060000+00:00 +Desk,LEFT_case-7117,2011-05-27 00:00:00+00:00,General,2011-08-30 09:21:52.980000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-27867,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-06-06 14:34:33.716000+00:00 +Internet,LEFT_case-7119,2011-05-26 00:00:00+00:00,General,2011-05-25 11:56:19.436000+00:00,2011-05-26 00:00:00.020000+00:00,,admin1,2011-03-31 00:00:00.020000+00:00,task-21464,Confirmation of receipt,complete,EMPTY,Resource05,2011-05-02 11:54:04.911000+00:00 +Internet,LEFT_case-7119,2011-05-26 00:00:00+00:00,General,2011-05-25 11:56:19.436000+00:00,2011-05-26 00:00:00.020000+00:00,,admin1,2011-03-31 00:00:00.020000+00:00,task-23027,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-02 11:54:35.131000+00:00 +Internet,LEFT_case-7119,2011-05-26 00:00:00+00:00,General,2011-05-25 11:56:19.436000+00:00,2011-05-26 00:00:00.020000+00:00,,admin1,2011-03-31 00:00:00.020000+00:00,task-23026,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-02 11:56:32.814000+00:00 +Internet,LEFT_case-7120,2011-05-18 00:00:00+00:00,General,2011-05-13 14:57:38.805000+00:00,2011-05-18 00:00:00.020000+00:00,,Resource14,2011-03-22 00:00:00.010000+00:00,task-21484,Confirmation of receipt,complete,EMPTY,Resource14,2011-05-02 12:30:02.570000+00:00 +Internet,LEFT_case-7120,2011-05-18 00:00:00+00:00,General,2011-05-13 14:57:38.805000+00:00,2011-05-18 00:00:00.020000+00:00,,Resource14,2011-03-22 00:00:00.010000+00:00,task-23077,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-02 12:31:24.822000+00:00 +Internet,LEFT_case-7120,2011-05-18 00:00:00+00:00,General,2011-05-13 14:57:38.805000+00:00,2011-05-18 00:00:00.020000+00:00,,Resource14,2011-03-22 00:00:00.010000+00:00,task-23073,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-02 12:31:51.678000+00:00 +Internet,LEFT_case-7129,2011-06-14 01:06:40+00:00,General,2011-06-17 08:57:46.186000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource13,2011-04-19 01:06:40.020000+00:00,task-21617,Confirmation of receipt,complete,EMPTY,Resource13,2011-04-27 08:14:55.727000+00:00 +Internet,LEFT_case-7129,2011-06-14 01:06:40+00:00,General,2011-06-17 08:57:46.186000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource13,2011-04-19 01:06:40.020000+00:00,task-22217,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-04-27 08:16:01.424000+00:00 +Internet,LEFT_case-7129,2011-06-14 01:06:40+00:00,General,2011-06-17 08:57:46.186000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource13,2011-04-19 01:06:40.020000+00:00,task-22218,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-27 09:20:27.017000+00:00 +Internet,LEFT_case-7131,2011-06-14 00:00:00+00:00,General,2011-05-25 08:15:25.760000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource11,2011-04-19 00:00:00.020000+00:00,task-21790,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 10:58:18.808000+00:00 +Internet,LEFT_case-7131,2011-06-14 00:00:00+00:00,General,2011-05-25 08:15:25.760000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource11,2011-04-19 00:00:00.020000+00:00,task-22995,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 10:58:52.488000+00:00 +Internet,LEFT_case-7131,2011-06-14 00:00:00+00:00,General,2011-05-25 08:15:25.760000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource11,2011-04-19 00:00:00.020000+00:00,task-22994,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 10:59:23.436000+00:00 +Internet,LEFT_case-7132,2011-05-23 01:06:40+00:00,General,2011-05-23 12:40:03.643000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource17,2011-03-28 01:06:40.020000+00:00,task-21811,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-29 13:41:07.912000+00:00 +Internet,LEFT_case-7132,2011-05-23 01:06:40+00:00,General,2011-05-23 12:40:03.643000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource17,2011-03-28 01:06:40.020000+00:00,task-22794,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-05-02 13:41:00.637000+00:00 +Internet,LEFT_case-7132,2011-05-23 01:06:40+00:00,General,2011-05-23 12:40:03.643000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource17,2011-03-28 01:06:40.020000+00:00,task-23151,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-05-02 13:41:17.556000+00:00 +Internet,LEFT_case-7134,2011-05-27 00:00:00+00:00,General,2011-05-31 11:41:15.066000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource18,2011-04-01 00:00:00.020000+00:00,task-21864,Confirmation of receipt,complete,EMPTY,Resource18,2011-04-28 12:36:55.668000+00:00 +Internet,LEFT_case-7134,2011-05-27 00:00:00+00:00,General,2011-05-31 11:41:15.066000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource18,2011-04-01 00:00:00.020000+00:00,task-22620,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-04-28 12:37:19.577000+00:00 +Internet,LEFT_case-7134,2011-05-27 00:00:00+00:00,General,2011-05-31 11:41:15.066000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource18,2011-04-01 00:00:00.020000+00:00,task-22619,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-05-30 08:10:55.101000+00:00 +Internet,LEFT_case-7175,2011-06-14 00:00:00+00:00,General,2011-05-31 15:05:31.360000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource05,2011-04-19 00:00:00.020000+00:00,task-22021,Confirmation of receipt,complete,EMPTY,Resource05,2011-05-09 15:09:06.672000+00:00 +Internet,LEFT_case-7175,2011-06-14 00:00:00+00:00,General,2011-05-31 15:05:31.360000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource05,2011-04-19 00:00:00.020000+00:00,task-24013,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-09 15:09:23.924000+00:00 +Internet,LEFT_case-7175,2011-06-14 00:00:00+00:00,General,2011-05-31 15:05:31.360000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource05,2011-04-19 00:00:00.020000+00:00,task-24016,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-09 15:11:08.707000+00:00 +Internet,LEFT_case-7177,2011-06-14 01:06:40+00:00,General,2011-05-04 08:18:25.137000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource13,2011-04-19 01:06:40.020000+00:00,task-22026,Confirmation of receipt,complete,EMPTY,admin2,2011-05-04 08:18:26.126000+00:00 +Internet,LEFT_case-7178,2011-06-15 00:00:00+00:00,General,2011-05-25 08:18:19.702000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource11,2011-04-20 00:00:00.020000+00:00,task-22032,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 12:34:06.750000+00:00 +Internet,LEFT_case-7178,2011-06-15 00:00:00+00:00,General,2011-05-25 08:18:19.702000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource11,2011-04-20 00:00:00.020000+00:00,task-23093,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 12:34:50.146000+00:00 +Internet,LEFT_case-7178,2011-06-15 00:00:00+00:00,General,2011-05-25 08:18:19.702000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource11,2011-04-20 00:00:00.020000+00:00,task-23092,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 12:35:17.532000+00:00 +Internet,LEFT_case-7182,2011-08-13 01:06:40+00:00,General,2011-08-12 15:44:31.411000+00:00,2011-08-13 01:06:40.020000+00:00,Group 5,Resource13,2011-04-20 01:06:40.020000+00:00,task-22097,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-28 13:12:38.150000+00:00 +Internet,LEFT_case-7182,2011-08-13 01:06:40+00:00,General,2011-08-12 15:44:31.411000+00:00,2011-08-13 01:06:40.020000+00:00,Group 5,Resource13,2011-04-20 01:06:40.020000+00:00,task-22625,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-28 13:13:47.328000+00:00 +Internet,LEFT_case-7182,2011-08-13 01:06:40+00:00,General,2011-08-12 15:44:31.411000+00:00,2011-08-13 01:06:40.020000+00:00,Group 5,Resource13,2011-04-20 01:06:40.020000+00:00,task-22624,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-28 13:14:34.853000+00:00 +Internet,LEFT_case-7183,2011-03-24 01:06:40+00:00,General,2011-05-25 12:10:33.468000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource02,2011-01-27 01:06:40.010000+00:00,task-22098,Confirmation of receipt,complete,EMPTY,admin2,2011-05-25 12:10:34.852000+00:00 +Internet,LEFT_case-7187,2011-06-15 01:06:40+00:00,General,2011-06-16 09:47:30.599000+00:00,2011-06-15 01:06:40.020000+00:00,,Resource04,2011-04-20 01:06:40.020000+00:00,task-22103,Confirmation of receipt,complete,EMPTY,Resource04,2011-05-04 09:36:12.987000+00:00 +Internet,LEFT_case-7187,2011-06-15 01:06:40+00:00,General,2011-06-16 09:47:30.599000+00:00,2011-06-15 01:06:40.020000+00:00,,Resource04,2011-04-20 01:06:40.020000+00:00,task-23645,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-04 09:36:38.144000+00:00 +Internet,LEFT_case-7187,2011-06-15 01:06:40+00:00,General,2011-06-16 09:47:30.599000+00:00,2011-06-15 01:06:40.020000+00:00,,Resource04,2011-04-20 01:06:40.020000+00:00,task-23644,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-04 09:36:57.377000+00:00 +e-mail,LEFT_case-7189,2011-06-15 00:00:00+00:00,General,2011-06-01 09:36:32.823000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource02,2011-04-20 00:00:00.020000+00:00,task-22128,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-27 09:04:01.644000+00:00 +e-mail,LEFT_case-7189,2011-06-15 00:00:00+00:00,General,2011-06-01 09:36:32.823000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource02,2011-04-20 00:00:00.020000+00:00,task-22266,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-27 09:04:46.032000+00:00 +e-mail,LEFT_case-7189,2011-06-15 00:00:00+00:00,General,2011-06-01 09:36:32.823000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource02,2011-04-20 00:00:00.020000+00:00,task-22265,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-27 09:05:22.067000+00:00 +Internet,LEFT_case-7192,2011-07-14 01:06:40+00:00,General,2011-07-11 11:28:34.813000+00:00,2011-07-14 01:06:40.020000+00:00,Group 8,Resource32,2011-04-21 01:06:40.020000+00:00,task-22137,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 12:40:33.789000+00:00 +Internet,LEFT_case-7192,2011-07-14 01:06:40+00:00,General,2011-07-11 11:28:34.813000+00:00,2011-07-14 01:06:40.020000+00:00,Group 8,Resource32,2011-04-21 01:06:40.020000+00:00,task-23106,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 12:53:14.048000+00:00 +Internet,LEFT_case-7192,2011-07-14 01:06:40+00:00,General,2011-07-11 11:28:34.813000+00:00,2011-07-14 01:06:40.020000+00:00,Group 8,Resource32,2011-04-21 01:06:40.020000+00:00,task-23104,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 12:53:39.950000+00:00 +Internet,LEFT_case-7194,2011-06-17 01:06:40+00:00,General,2011-06-16 13:33:48.845000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource02,2011-04-22 01:06:40.020000+00:00,task-22147,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-28 11:47:22.008000+00:00 +Internet,LEFT_case-7194,2011-06-17 01:06:40+00:00,General,2011-06-16 13:33:48.845000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource02,2011-04-22 01:06:40.020000+00:00,task-22574,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-28 11:47:51.670000+00:00 +Internet,LEFT_case-7194,2011-06-17 01:06:40+00:00,General,2011-06-16 13:33:48.845000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource02,2011-04-22 01:06:40.020000+00:00,task-22573,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-28 11:57:56.151000+00:00 +Internet,LEFT_case-7197,2011-06-19 00:00:00+00:00,General,2011-07-15 08:56:51.052000+00:00,2011-06-19 00:00:00.020000+00:00,,Resource01,2011-04-24 00:00:00.020000+00:00,task-22180,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 12:59:09.915000+00:00 +Internet,LEFT_case-7197,2011-06-19 00:00:00+00:00,General,2011-07-15 08:56:51.052000+00:00,2011-06-19 00:00:00.020000+00:00,,Resource01,2011-04-24 00:00:00.020000+00:00,task-23130,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 12:59:50.226000+00:00 +Internet,LEFT_case-7197,2011-06-19 00:00:00+00:00,General,2011-07-15 08:56:51.052000+00:00,2011-06-19 00:00:00.020000+00:00,,Resource01,2011-04-24 00:00:00.020000+00:00,task-23129,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 13:00:36.051000+00:00 +Desk,LEFT_case-7233,2011-07-08 01:06:40+00:00,General,2011-07-08 16:02:33.750000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource02,2011-04-01 01:06:40.020000+00:00,task-22343,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-02 12:59:54.065000+00:00 +Desk,LEFT_case-7233,2011-07-08 01:06:40+00:00,General,2011-07-08 16:02:33.750000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource02,2011-04-01 01:06:40.020000+00:00,task-23137,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-02 13:00:33.228000+00:00 +Desk,LEFT_case-7233,2011-07-08 01:06:40+00:00,General,2011-07-08 16:02:33.750000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource02,2011-04-01 01:06:40.020000+00:00,task-23135,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-02 13:52:13.021000+00:00 +Internet,LEFT_case-7256,2011-06-20 01:06:40+00:00,General,2011-06-22 16:49:24.689000+00:00,2011-06-20 01:06:40.020000+00:00,Group 5,Resource05,2011-04-25 01:06:40.020000+00:00,task-22644,Confirmation of receipt,complete,EMPTY,Resource05,2011-05-10 15:39:31.734000+00:00 +Internet,LEFT_case-7256,2011-06-20 01:06:40+00:00,General,2011-06-22 16:49:24.689000+00:00,2011-06-20 01:06:40.020000+00:00,Group 5,Resource05,2011-04-25 01:06:40.020000+00:00,task-24302,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-10 15:40:05.495000+00:00 +Internet,LEFT_case-7256,2011-06-20 01:06:40+00:00,General,2011-06-22 16:49:24.689000+00:00,2011-06-20 01:06:40.020000+00:00,Group 5,Resource05,2011-04-25 01:06:40.020000+00:00,task-24301,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-10 15:40:45.356000+00:00 +Internet,LEFT_case-7264,2011-08-30 01:06:40+00:00,General,2011-08-29 09:49:09.129000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-04-26 01:06:40.020000+00:00,task-22745,Confirmation of receipt,complete,EMPTY,Resource15,2011-05-04 11:12:18.601000+00:00 +Internet,LEFT_case-7264,2011-08-30 01:06:40+00:00,General,2011-08-29 09:49:09.129000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-04-26 01:06:40.020000+00:00,task-23711,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-04 11:12:46.880000+00:00 +Internet,LEFT_case-7264,2011-08-30 01:06:40+00:00,General,2011-08-29 09:49:09.129000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-04-26 01:06:40.020000+00:00,task-23710,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-11 08:36:33.250000+00:00 +Internet,LEFT_case-7265,2011-06-20 01:06:40+00:00,General,2011-07-15 11:43:59.244000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource08,2011-04-25 01:06:40.020000+00:00,task-22746,Confirmation of receipt,complete,EMPTY,Resource08,2011-05-04 08:42:05.468000+00:00 +Internet,LEFT_case-7265,2011-06-20 01:06:40+00:00,General,2011-07-15 11:43:59.244000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource08,2011-04-25 01:06:40.020000+00:00,task-23612,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-05-04 08:44:54.863000+00:00 +Internet,LEFT_case-7265,2011-06-20 01:06:40+00:00,General,2011-07-15 11:43:59.244000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource08,2011-04-25 01:06:40.020000+00:00,task-23613,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-05-04 08:45:10.390000+00:00 +Internet,LEFT_case-7266,2011-08-01 01:06:40+00:00,General,2011-07-29 10:07:52.691000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource13,2011-04-25 01:06:40.020000+00:00,task-22750,Confirmation of receipt,complete,EMPTY,Resource13,2011-05-03 12:58:50.048000+00:00 +Internet,LEFT_case-7266,2011-08-01 01:06:40+00:00,General,2011-07-29 10:07:52.691000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource13,2011-04-25 01:06:40.020000+00:00,task-23464,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-05-04 07:13:08.933000+00:00 +Internet,LEFT_case-7266,2011-08-01 01:06:40+00:00,General,2011-07-29 10:07:52.691000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource13,2011-04-25 01:06:40.020000+00:00,task-23465,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-05-09 08:24:46.118000+00:00 +Internet,LEFT_case-7267,2011-06-21 00:00:00+00:00,General,2011-05-30 08:37:38.745000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-22762,Confirmation of receipt,complete,Group 1,Resource07,2011-05-02 15:40:12.711000+00:00 +Internet,LEFT_case-7267,2011-06-21 00:00:00+00:00,General,2011-05-30 08:37:38.745000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-23239,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 15:40:41.287000+00:00 +Internet,LEFT_case-7267,2011-06-21 00:00:00+00:00,General,2011-05-30 08:37:38.745000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-23240,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 15:41:03.946000+00:00 +Internet,LEFT_case-7268,2011-06-21 00:00:00+00:00,General,2011-05-12 14:18:55.154000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource01,2011-04-26 00:00:00.020000+00:00,task-22763,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-10 13:30:54.631000+00:00 +Internet,LEFT_case-7268,2011-06-21 00:00:00+00:00,General,2011-05-12 14:18:55.154000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource01,2011-04-26 00:00:00.020000+00:00,task-24229,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-10 13:31:30.791000+00:00 +Internet,LEFT_case-7268,2011-06-21 00:00:00+00:00,General,2011-05-12 14:18:55.154000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource01,2011-04-26 00:00:00.020000+00:00,task-24228,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-10 13:32:22.348000+00:00 +Internet,LEFT_case-7269,2011-06-21 00:00:00+00:00,General,2011-05-30 08:51:10.622000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-22764,Confirmation of receipt,complete,Group 1,Resource07,2011-05-02 15:59:17.860000+00:00 +Internet,LEFT_case-7269,2011-06-21 00:00:00+00:00,General,2011-05-30 08:51:10.622000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-23246,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 16:00:20.137000+00:00 +Internet,LEFT_case-7269,2011-06-21 00:00:00+00:00,General,2011-05-30 08:51:10.622000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-23244,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 16:00:45.588000+00:00 +Desk,LEFT_case-7270,2011-05-30 00:00:00+00:00,General,2011-06-28 16:02:27.895000+00:00,2011-05-30 00:00:00.020000+00:00,,Resource18,2011-04-04 00:00:00.020000+00:00,task-22770,Confirmation of receipt,complete,EMPTY,Resource18,2011-05-03 13:21:17.150000+00:00 +Desk,LEFT_case-7270,2011-05-30 00:00:00+00:00,General,2011-06-28 16:02:27.895000+00:00,2011-05-30 00:00:00.020000+00:00,,Resource18,2011-04-04 00:00:00.020000+00:00,task-23477,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-05-03 13:21:48.957000+00:00 +Desk,LEFT_case-7270,2011-05-30 00:00:00+00:00,General,2011-06-28 16:02:27.895000+00:00,2011-05-30 00:00:00.020000+00:00,,Resource18,2011-04-04 00:00:00.020000+00:00,task-23476,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-06-06 14:25:05.865000+00:00 +Internet,LEFT_case-7272,2011-06-21 01:06:40+00:00,General,,2011-06-21 01:06:40.020000+00:00,Group 5,Resource14,2011-04-26 01:06:40.020000+00:00,task-22787,Confirmation of receipt,complete,EMPTY,Resource15,2011-06-06 08:51:08.069000+00:00 +Internet,LEFT_case-7272,2011-06-21 01:06:40+00:00,General,,2011-06-21 01:06:40.020000+00:00,Group 5,Resource14,2011-04-26 01:06:40.020000+00:00,task-27648,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-06-06 08:51:38.698000+00:00 +Internet,LEFT_case-7272,2011-06-21 01:06:40+00:00,General,,2011-06-21 01:06:40.020000+00:00,Group 5,Resource14,2011-04-26 01:06:40.020000+00:00,task-27647,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-06-06 08:52:14.255000+00:00 +Internet,LEFT_case-7273,2011-08-03 01:06:40+00:00,General,2011-08-03 10:53:58.465000+00:00,2011-08-03 01:06:40.020000+00:00,,Resource02,2011-04-27 01:06:40.020000+00:00,task-22815,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-03 15:35:48.714000+00:00 +Internet,LEFT_case-7273,2011-08-03 01:06:40+00:00,General,2011-08-03 10:53:58.465000+00:00,2011-08-03 01:06:40.020000+00:00,,Resource02,2011-04-27 01:06:40.020000+00:00,task-23551,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-03 15:38:51.947000+00:00 +Internet,LEFT_case-7273,2011-08-03 01:06:40+00:00,General,2011-08-03 10:53:58.465000+00:00,2011-08-03 01:06:40.020000+00:00,,Resource02,2011-04-27 01:06:40.020000+00:00,task-23552,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-03 15:44:50.367000+00:00 +Internet,LEFT_case-7274,2011-04-25 01:06:40+00:00,General,2011-05-03 13:36:04.846000+00:00,2011-04-25 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-22820,Confirmation of receipt,complete,Group 1,Resource17,2011-05-02 09:19:19.171000+00:00 +Internet,LEFT_case-7274,2011-04-25 01:06:40+00:00,General,2011-05-03 13:36:04.846000+00:00,2011-04-25 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-22895,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-05-02 09:19:49.681000+00:00 +Internet,LEFT_case-7274,2011-04-25 01:06:40+00:00,General,2011-05-03 13:36:04.846000+00:00,2011-04-25 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-22894,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-05-02 09:20:09.013000+00:00 +Internet,LEFT_case-7297,2011-06-21 00:00:00+00:00,General,2011-05-31 08:44:23.922000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-22862,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-11 13:47:03.917000+00:00 +Internet,LEFT_case-7297,2011-06-21 00:00:00+00:00,General,2011-05-31 08:44:23.922000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-24514,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-11 13:47:36.918000+00:00 +Internet,LEFT_case-7297,2011-06-21 00:00:00+00:00,General,2011-05-31 08:44:23.922000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-24513,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-18 14:41:52.854000+00:00 +Internet,LEFT_case-7300,2011-06-23 00:00:00+00:00,General,2011-07-06 11:55:18.834000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-22914,Confirmation of receipt,complete,EMPTY,Resource04,2011-05-04 10:24:19.569000+00:00 +Internet,LEFT_case-7300,2011-06-23 00:00:00+00:00,General,2011-07-06 11:55:18.834000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-23679,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-04 10:24:44.766000+00:00 +Internet,LEFT_case-7300,2011-06-23 00:00:00+00:00,General,2011-07-06 11:55:18.834000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-23678,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-04 10:25:04.730000+00:00 +Desk,LEFT_case-7301,2011-06-03 01:06:40+00:00,General,2011-08-30 10:29:38.597000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource06,2011-04-08 01:06:40.020000+00:00,task-22918,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-18 12:10:27.211000+00:00 +Desk,LEFT_case-7301,2011-06-03 01:06:40+00:00,General,2011-08-30 10:29:38.597000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource06,2011-04-08 01:06:40.020000+00:00,task-25420,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-18 12:11:47.404000+00:00 +Desk,LEFT_case-7301,2011-06-03 01:06:40+00:00,General,2011-08-30 10:29:38.597000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource06,2011-04-08 01:06:40.020000+00:00,task-25418,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-18 12:12:28.523000+00:00 +Internet,LEFT_case-7305,2011-05-02 01:06:40+00:00,General,2011-06-09 16:49:33.859000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-22969,Confirmation of receipt,complete,EMPTY,Resource15,2011-05-27 11:46:44.277000+00:00 +Internet,LEFT_case-7305,2011-05-02 01:06:40+00:00,General,2011-06-09 16:49:33.859000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-26701,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-27 11:47:03.473000+00:00 +Internet,LEFT_case-7305,2011-05-02 01:06:40+00:00,General,2011-06-09 16:49:33.859000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-26705,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-27 11:47:34.696000+00:00 +Internet,LEFT_case-7305,2011-05-02 01:06:40+00:00,General,2011-06-09 16:49:33.859000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-26707,T11 Create document X request unlicensed,complete,Group 1,Resource15,2011-05-27 12:06:46.107000+00:00 +Internet,LEFT_case-7305,2011-05-02 01:06:40+00:00,General,2011-06-09 16:49:33.859000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-26720,T14 Determine document X request unlicensed,complete,Group 3,Resource15,2011-05-27 12:07:11.856000+00:00 +Desk,LEFT_case-7310,2011-06-28 01:06:40+00:00,General,2011-07-26 08:47:26.864000+00:00,2011-06-28 01:06:40.020000+00:00,Group 5,Resource22,2011-03-22 01:06:40.010000+00:00,task-22998,Confirmation of receipt,complete,EMPTY,Resource15,2011-05-03 11:43:12.886000+00:00 +Desk,LEFT_case-7310,2011-06-28 01:06:40+00:00,General,2011-07-26 08:47:26.864000+00:00,2011-06-28 01:06:40.020000+00:00,Group 5,Resource22,2011-03-22 01:06:40.010000+00:00,task-23433,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-03 11:44:28.932000+00:00 +Desk,LEFT_case-7310,2011-06-28 01:06:40+00:00,General,2011-07-26 08:47:26.864000+00:00,2011-06-28 01:06:40.020000+00:00,Group 5,Resource22,2011-03-22 01:06:40.010000+00:00,task-23432,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-03 11:49:32.745000+00:00 +Internet,LEFT_case-7311,2011-06-24 00:00:00+00:00,General,2011-06-24 14:16:14.675000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource02,2011-04-29 00:00:00.020000+00:00,task-23005,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-09 09:47:21.850000+00:00 +Internet,LEFT_case-7311,2011-06-24 00:00:00+00:00,General,2011-06-24 14:16:14.675000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource02,2011-04-29 00:00:00.020000+00:00,task-23899,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-09 09:48:04.829000+00:00 +Internet,LEFT_case-7311,2011-06-24 00:00:00+00:00,General,2011-06-24 14:16:14.675000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource02,2011-04-29 00:00:00.020000+00:00,task-23898,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-09 12:06:00.081000+00:00 +Internet,LEFT_case-7314,2011-06-24 00:00:00+00:00,General,2011-05-30 09:02:48.360000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource11,2011-04-29 00:00:00.020000+00:00,task-23057,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-11 14:00:22.518000+00:00 +Internet,LEFT_case-7314,2011-06-24 00:00:00+00:00,General,2011-05-30 09:02:48.360000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource11,2011-04-29 00:00:00.020000+00:00,task-24519,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-11 14:00:49.190000+00:00 +Internet,LEFT_case-7314,2011-06-24 00:00:00+00:00,General,2011-05-30 09:02:48.360000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource11,2011-04-29 00:00:00.020000+00:00,task-24518,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-18 15:00:20.275000+00:00 +Desk,LEFT_case-7317,2011-06-09 00:00:00+00:00,General,2011-05-31 11:22:16.958000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource14,2011-04-14 00:00:00.020000+00:00,task-23108,Confirmation of receipt,complete,EMPTY,Resource14,2011-05-20 12:08:45.978000+00:00 +Desk,LEFT_case-7317,2011-06-09 00:00:00+00:00,General,2011-05-31 11:22:16.958000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource14,2011-04-14 00:00:00.020000+00:00,task-25845,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-20 12:09:19.150000+00:00 +Desk,LEFT_case-7317,2011-06-09 00:00:00+00:00,General,2011-05-31 11:22:16.958000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource14,2011-04-14 00:00:00.020000+00:00,task-25844,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-20 12:09:52.885000+00:00 +Internet,LEFT_case-7320,2011-06-26 00:00:00+00:00,General,2011-06-28 09:29:37.394000+00:00,2011-06-26 00:00:00.020000+00:00,,Resource02,2011-05-01 00:00:00.020000+00:00,task-23186,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-10 14:19:08.002000+00:00 +Internet,LEFT_case-7320,2011-06-26 00:00:00+00:00,General,2011-06-28 09:29:37.394000+00:00,2011-06-26 00:00:00.020000+00:00,,Resource02,2011-05-01 00:00:00.020000+00:00,task-24287,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-10 14:53:10.645000+00:00 +Internet,LEFT_case-7320,2011-06-26 00:00:00+00:00,General,2011-06-28 09:29:37.394000+00:00,2011-06-26 00:00:00.020000+00:00,,Resource02,2011-05-01 00:00:00.020000+00:00,task-24286,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-10 15:16:16.005000+00:00 +Internet,LEFT_case-7322,2011-05-31 01:06:40+00:00,General,2011-10-07 16:30:37.337000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource14,2011-04-05 01:06:40.020000+00:00,task-23209,Confirmation of receipt,complete,EMPTY,Resource14,2011-05-19 11:45:56.728000+00:00 +Internet,LEFT_case-7322,2011-05-31 01:06:40+00:00,General,2011-10-07 16:30:37.337000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource14,2011-04-05 01:06:40.020000+00:00,task-25677,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-19 11:47:05.956000+00:00 +Internet,LEFT_case-7322,2011-05-31 01:06:40+00:00,General,2011-10-07 16:30:37.337000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource14,2011-04-05 01:06:40.020000+00:00,task-25675,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-06-07 13:58:45.371000+00:00 +e-mail,LEFT_case-7341,2011-06-24 01:06:40+00:00,General,2011-05-20 11:59:47.595000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource02,2011-04-29 01:06:40.020000+00:00,task-23333,Confirmation of receipt,complete,Group 1,Resource02,2011-05-10 10:23:17.026000+00:00 +e-mail,LEFT_case-7341,2011-06-24 01:06:40+00:00,General,2011-05-20 11:59:47.595000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource02,2011-04-29 01:06:40.020000+00:00,task-24133,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-10 10:23:53.523000+00:00 +e-mail,LEFT_case-7341,2011-06-24 01:06:40+00:00,General,2011-05-20 11:59:47.595000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource02,2011-04-29 01:06:40.020000+00:00,task-24132,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-10 10:32:56.148000+00:00 +Internet,LEFT_case-7349,2011-06-06 00:00:00+00:00,General,2011-06-01 15:45:41.973000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource15,2011-05-03 00:00:00.020000+00:00,task-23533,Confirmation of receipt,complete,Group 1,Resource15,2011-05-10 10:42:12.520000+00:00 +Internet,LEFT_case-7349,2011-06-06 00:00:00+00:00,General,2011-06-01 15:45:41.973000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource15,2011-05-03 00:00:00.020000+00:00,task-24149,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-10 10:42:42.497000+00:00 +Internet,LEFT_case-7349,2011-06-06 00:00:00+00:00,General,2011-06-01 15:45:41.973000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource15,2011-05-03 00:00:00.020000+00:00,task-24147,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-10 10:42:56.639000+00:00 +Internet,LEFT_case-7358,2011-06-29 01:06:40+00:00,General,2011-09-02 10:03:10.286000+00:00,2011-06-29 01:06:40.020000+00:00,Group 5,Resource09,2011-05-04 01:06:40.020000+00:00,task-23633,Confirmation of receipt,complete,Group 1,Resource15,2011-05-10 12:09:25.071000+00:00 +Internet,LEFT_case-7358,2011-06-29 01:06:40+00:00,General,2011-09-02 10:03:10.286000+00:00,2011-06-29 01:06:40.020000+00:00,Group 5,Resource09,2011-05-04 01:06:40.020000+00:00,task-24195,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-10 12:11:01.924000+00:00 +Internet,LEFT_case-7358,2011-06-29 01:06:40+00:00,General,2011-09-02 10:03:10.286000+00:00,2011-06-29 01:06:40.020000+00:00,Group 5,Resource09,2011-05-04 01:06:40.020000+00:00,task-24199,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-10 12:12:10.553000+00:00 +Internet,LEFT_case-7358,2011-06-29 01:06:40+00:00,General,2011-09-02 10:03:10.286000+00:00,2011-06-29 01:06:40.020000+00:00,Group 5,Resource09,2011-05-04 01:06:40.020000+00:00,task-24198,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource33,2011-05-30 12:13:59.270000+00:00 +Internet,LEFT_case-7358,2011-06-29 01:06:40+00:00,General,2011-09-02 10:03:10.286000+00:00,2011-06-29 01:06:40.020000+00:00,Group 5,Resource09,2011-05-04 01:06:40.020000+00:00,task-27031,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-30 13:58:45.433000+00:00 +Post,LEFT_case-7362,2011-06-14 00:00:00+00:00,General,2011-08-03 10:41:37.121000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource09,2011-04-19 00:00:00.020000+00:00,task-23665,Confirmation of receipt,complete,EMPTY,Resource09,2011-06-08 14:08:44.629000+00:00 +Post,LEFT_case-7362,2011-06-14 00:00:00+00:00,General,2011-08-03 10:41:37.121000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource09,2011-04-19 00:00:00.020000+00:00,task-28343,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-06-08 14:09:11.946000+00:00 +Post,LEFT_case-7362,2011-06-14 00:00:00+00:00,General,2011-08-03 10:41:37.121000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource09,2011-04-19 00:00:00.020000+00:00,task-28345,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-06-08 14:09:48.020000+00:00 +Post,LEFT_case-7363,2011-06-15 00:00:00+00:00,General,2011-05-31 08:36:31.861000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource12,2011-04-20 00:00:00.020000+00:00,task-23675,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-17 12:38:44.749000+00:00 +Post,LEFT_case-7363,2011-06-15 00:00:00+00:00,General,2011-05-31 08:36:31.861000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource12,2011-04-20 00:00:00.020000+00:00,task-25274,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-17 12:40:40.293000+00:00 +Post,LEFT_case-7363,2011-06-15 00:00:00+00:00,General,2011-05-31 08:36:31.861000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource12,2011-04-20 00:00:00.020000+00:00,task-25273,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-26 14:15:02.840000+00:00 +Internet,LEFT_case-7364,2011-06-29 01:06:40+00:00,General,2011-05-11 11:59:11.016000+00:00,2011-06-29 01:06:40.020000+00:00,,Resource02,2011-05-04 01:06:40.020000+00:00,task-23691,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-11 11:46:34.343000+00:00 +Internet,LEFT_case-7364,2011-06-29 01:06:40+00:00,General,2011-05-11 11:59:11.016000+00:00,2011-06-29 01:06:40.020000+00:00,,Resource02,2011-05-04 01:06:40.020000+00:00,task-24473,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-11 11:47:05.844000+00:00 +Internet,LEFT_case-7364,2011-06-29 01:06:40+00:00,General,2011-05-11 11:59:11.016000+00:00,2011-06-29 01:06:40.020000+00:00,,Resource02,2011-05-04 01:06:40.020000+00:00,task-24472,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-11 11:48:56.756000+00:00 +Internet,LEFT_case-7364,2011-06-29 01:06:40+00:00,General,2011-05-11 11:59:11.016000+00:00,2011-06-29 01:06:40.020000+00:00,,Resource02,2011-05-04 01:06:40.020000+00:00,task-24476,T11 Create document X request unlicensed,complete,Group 1,Resource02,2011-05-11 11:58:08.252000+00:00 +Internet,LEFT_case-7364,2011-06-29 01:06:40+00:00,General,2011-05-11 11:59:11.016000+00:00,2011-06-29 01:06:40.020000+00:00,,Resource02,2011-05-04 01:06:40.020000+00:00,task-24479,T14 Determine document X request unlicensed,complete,Group 3,Resource02,2011-05-11 11:59:00.071000+00:00 +Internet,LEFT_case-7416,2011-06-28 00:00:00+00:00,General,2011-11-18 11:17:34.048000+00:00,2011-06-28 00:00:00.020000+00:00,,admin1,2011-05-03 00:00:00.020000+00:00,task-23849,Confirmation of receipt,complete,EMPTY,Resource09,2011-06-07 11:31:22.403000+00:00 +Internet,LEFT_case-7416,2011-06-28 00:00:00+00:00,General,2011-11-18 11:17:34.048000+00:00,2011-06-28 00:00:00.020000+00:00,,admin1,2011-05-03 00:00:00.020000+00:00,task-28089,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-06-07 11:31:59.148000+00:00 +Internet,LEFT_case-7416,2011-06-28 00:00:00+00:00,General,2011-11-18 11:17:34.048000+00:00,2011-06-28 00:00:00.020000+00:00,,admin1,2011-05-03 00:00:00.020000+00:00,task-28088,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-06-07 11:32:25.780000+00:00 +Internet,LEFT_case-7418,2011-06-24 00:00:00+00:00,General,2011-10-26 11:29:00.694000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource12,2011-04-29 00:00:00.020000+00:00,task-23902,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-16 11:41:29.436000+00:00 +Internet,LEFT_case-7418,2011-06-24 00:00:00+00:00,General,2011-10-26 11:29:00.694000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource12,2011-04-29 00:00:00.020000+00:00,task-25122,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-16 11:51:48.198000+00:00 +Internet,LEFT_case-7418,2011-06-24 00:00:00+00:00,General,2011-10-26 11:29:00.694000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource12,2011-04-29 00:00:00.020000+00:00,task-25120,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-06-06 10:53:12.796000+00:00 +Desk,LEFT_case-7421,2011-05-26 00:00:00+00:00,General,2011-05-25 10:32:35.580000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource06,2011-03-31 00:00:00.020000+00:00,task-23956,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-12 15:06:02.799000+00:00 +Desk,LEFT_case-7421,2011-05-26 00:00:00+00:00,General,2011-05-25 10:32:35.580000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource06,2011-03-31 00:00:00.020000+00:00,task-24771,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-12 15:10:29.245000+00:00 +Desk,LEFT_case-7421,2011-05-26 00:00:00+00:00,General,2011-05-25 10:32:35.580000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource06,2011-03-31 00:00:00.020000+00:00,task-24780,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-12 15:11:02.261000+00:00 +Internet,LEFT_case-7423,2011-07-14 01:06:40+00:00,General,2011-10-14 16:31:58.382000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-04 01:06:40.020000+00:00,task-23982,Confirmation of receipt,complete,Group 1,Resource08,2011-05-10 10:40:07.422000+00:00 +Internet,LEFT_case-7423,2011-07-14 01:06:40+00:00,General,2011-10-14 16:31:58.382000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-04 01:06:40.020000+00:00,task-24145,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-05-10 10:42:18.290000+00:00 +Internet,LEFT_case-7423,2011-07-14 01:06:40+00:00,General,2011-10-14 16:31:58.382000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-04 01:06:40.020000+00:00,task-24144,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-05-10 10:42:45.998000+00:00 +Post,LEFT_case-7425,2011-06-20 01:06:40+00:00,General,2011-07-15 11:12:45.695000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource18,2011-04-25 01:06:40.020000+00:00,task-23997,Confirmation of receipt,complete,EMPTY,Resource18,2011-06-17 14:28:42.453000+00:00 +Post,LEFT_case-7425,2011-06-20 01:06:40+00:00,General,2011-07-15 11:12:45.695000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource18,2011-04-25 01:06:40.020000+00:00,task-28996,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-06-17 14:32:02.649000+00:00 +Post,LEFT_case-7425,2011-06-20 01:06:40+00:00,General,2011-07-15 11:12:45.695000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource18,2011-04-25 01:06:40.020000+00:00,task-28999,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-06-17 14:32:48.654000+00:00 +Post,LEFT_case-7426,2011-06-20 00:00:00+00:00,General,2011-07-20 10:35:05.430000+00:00,2011-06-20 00:00:00.020000+00:00,,Resource18,2011-04-25 00:00:00.020000+00:00,task-24032,Confirmation of receipt,complete,EMPTY,Resource18,2011-06-21 13:53:40.406000+00:00 +Post,LEFT_case-7426,2011-06-20 00:00:00+00:00,General,2011-07-20 10:35:05.430000+00:00,2011-06-20 00:00:00.020000+00:00,,Resource18,2011-04-25 00:00:00.020000+00:00,task-29322,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-06-21 13:54:23.025000+00:00 +Post,LEFT_case-7426,2011-06-20 00:00:00+00:00,General,2011-07-20 10:35:05.430000+00:00,2011-06-20 00:00:00.020000+00:00,,Resource18,2011-04-25 00:00:00.020000+00:00,task-29321,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-06-21 13:54:58.269000+00:00 +Internet,LEFT_case-7442,2011-06-30 00:00:00+00:00,General,2011-05-23 14:00:45.003000+00:00,2011-06-30 00:00:00.020000+00:00,,Resource11,2011-05-05 00:00:00.020000+00:00,task-24126,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-13 15:04:01.676000+00:00 +Internet,LEFT_case-7442,2011-06-30 00:00:00+00:00,General,2011-05-23 14:00:45.003000+00:00,2011-06-30 00:00:00.020000+00:00,,Resource11,2011-05-05 00:00:00.020000+00:00,task-25011,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-13 15:04:29.810000+00:00 +Internet,LEFT_case-7442,2011-06-30 00:00:00+00:00,General,2011-05-23 14:00:45.003000+00:00,2011-06-30 00:00:00.020000+00:00,,Resource11,2011-05-05 00:00:00.020000+00:00,task-25010,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-13 15:04:59.317000+00:00 +Internet,LEFT_case-7443,2011-07-03 01:06:40+00:00,General,2011-05-11 15:00:12.108000+00:00,2011-07-03 01:06:40.020000+00:00,,Resource02,2011-05-08 01:06:40.020000+00:00,task-24161,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-11 14:35:35.318000+00:00 +Internet,LEFT_case-7443,2011-07-03 01:06:40+00:00,General,2011-05-11 15:00:12.108000+00:00,2011-07-03 01:06:40.020000+00:00,,Resource02,2011-05-08 01:06:40.020000+00:00,task-24523,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-11 14:36:15.591000+00:00 +Internet,LEFT_case-7443,2011-07-03 01:06:40+00:00,General,2011-05-11 15:00:12.108000+00:00,2011-07-03 01:06:40.020000+00:00,,Resource02,2011-05-08 01:06:40.020000+00:00,task-24522,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-11 14:36:55.073000+00:00 +Internet,LEFT_case-7443,2011-07-03 01:06:40+00:00,General,2011-05-11 15:00:12.108000+00:00,2011-07-03 01:06:40.020000+00:00,,Resource02,2011-05-08 01:06:40.020000+00:00,task-24527,T11 Create document X request unlicensed,complete,Group 1,Resource02,2011-05-11 14:59:21.655000+00:00 +Internet,LEFT_case-7443,2011-07-03 01:06:40+00:00,General,2011-05-11 15:00:12.108000+00:00,2011-07-03 01:06:40.020000+00:00,,Resource02,2011-05-08 01:06:40.020000+00:00,task-24537,T14 Determine document X request unlicensed,complete,Group 3,Resource02,2011-05-11 14:59:58.415000+00:00 +Desk,LEFT_case-7469,2011-07-03 01:06:40+00:00,General,2011-06-09 11:56:05.923000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource11,2011-04-27 01:06:40.020000+00:00,task-24384,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-13 10:46:32.480000+00:00 +Desk,LEFT_case-7469,2011-07-03 01:06:40+00:00,General,2011-06-09 11:56:05.923000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource11,2011-04-27 01:06:40.020000+00:00,task-24962,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-13 13:03:05.025000+00:00 +Desk,LEFT_case-7469,2011-07-03 01:06:40+00:00,General,2011-06-09 11:56:05.923000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource11,2011-04-27 01:06:40.020000+00:00,task-24941,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-13 13:03:45.572000+00:00 +Desk,LEFT_case-7472,2011-06-16 01:06:40+00:00,General,2011-06-16 10:45:12.296000+00:00,2011-06-16 01:06:40.020000+00:00,,Resource08,2011-04-21 01:06:40.020000+00:00,task-24467,Confirmation of receipt,complete,EMPTY,Resource08,2011-05-12 15:08:38.389000+00:00 +Desk,LEFT_case-7472,2011-06-16 01:06:40+00:00,General,2011-06-16 10:45:12.296000+00:00,2011-06-16 01:06:40.020000+00:00,,Resource08,2011-04-21 01:06:40.020000+00:00,task-24776,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-05-12 15:10:49.451000+00:00 +Desk,LEFT_case-7472,2011-06-16 01:06:40+00:00,General,2011-06-16 10:45:12.296000+00:00,2011-06-16 01:06:40.020000+00:00,,Resource08,2011-04-21 01:06:40.020000+00:00,task-24773,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-05-12 15:11:19.925000+00:00 +Desk,LEFT_case-7477,2011-06-13 00:00:00+00:00,General,2011-06-06 07:30:41.375000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-24516,Confirmation of receipt,complete,Group 1,Resource01,2011-05-12 15:09:41.022000+00:00 +Desk,LEFT_case-7477,2011-06-13 00:00:00+00:00,General,2011-06-06 07:30:41.375000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-24777,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-12 15:10:24.466000+00:00 +Desk,LEFT_case-7477,2011-06-13 00:00:00+00:00,General,2011-06-06 07:30:41.375000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-24775,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-13 14:44:39.096000+00:00 +Desk,LEFT_case-7497,2011-07-21 01:06:40+00:00,General,2011-07-20 09:23:56.285000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource13,2011-04-21 01:06:40.020000+00:00,task-24929,Confirmation of receipt,complete,EMPTY,Resource13,2011-05-20 11:19:41.410000+00:00 +Desk,LEFT_case-7497,2011-07-21 01:06:40+00:00,General,2011-07-20 09:23:56.285000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource13,2011-04-21 01:06:40.020000+00:00,task-25829,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-05-20 11:49:32.796000+00:00 +Desk,LEFT_case-7497,2011-07-21 01:06:40+00:00,General,2011-07-20 09:23:56.285000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource13,2011-04-21 01:06:40.020000+00:00,task-25830,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-05-26 08:37:42.971000+00:00 +Desk,LEFT_case-7503,2011-09-15 01:06:40+00:00,General,2011-09-15 12:22:10.181000+00:00,2011-09-15 01:06:40.020000+00:00,,Resource06,2011-04-28 01:06:40.020000+00:00,task-25041,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-26 16:52:16.671000+00:00 +Desk,LEFT_case-7503,2011-09-15 01:06:40+00:00,General,2011-09-15 12:22:10.181000+00:00,2011-09-15 01:06:40.020000+00:00,,Resource06,2011-04-28 01:06:40.020000+00:00,task-26594,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-26 16:52:51.250000+00:00 +Desk,LEFT_case-7503,2011-09-15 01:06:40+00:00,General,2011-09-15 12:22:10.181000+00:00,2011-09-15 01:06:40.020000+00:00,,Resource06,2011-04-28 01:06:40.020000+00:00,task-26593,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-26 16:53:13.295000+00:00 +Internet,LEFT_case-7523,2011-09-20 01:06:40+00:00,General,2011-09-01 12:40:46.536000+00:00,2011-09-20 01:06:40.020000+00:00,,Resource02,2011-05-10 01:06:40.020000+00:00,task-25098,Confirmation of receipt,complete,Group 1,Resource02,2011-05-24 09:51:25.110000+00:00 +Internet,LEFT_case-7523,2011-09-20 01:06:40+00:00,General,2011-09-01 12:40:46.536000+00:00,2011-09-20 01:06:40.020000+00:00,,Resource02,2011-05-10 01:06:40.020000+00:00,task-26167,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-24 09:52:19.767000+00:00 +Internet,LEFT_case-7523,2011-09-20 01:06:40+00:00,General,2011-09-01 12:40:46.536000+00:00,2011-09-20 01:06:40.020000+00:00,,Resource02,2011-05-10 01:06:40.020000+00:00,task-26166,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-24 10:26:18.635000+00:00 +Internet,LEFT_case-7525,2011-08-01 01:06:40+00:00,General,2011-08-02 11:10:20.030000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource02,2011-05-11 01:06:40.020000+00:00,task-25103,Confirmation of receipt,complete,Group 1,Resource02,2011-05-23 15:38:02.577000+00:00 +Internet,LEFT_case-7525,2011-08-01 01:06:40+00:00,General,2011-08-02 11:10:20.030000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource02,2011-05-11 01:06:40.020000+00:00,task-27392,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-06-01 07:54:29.708000+00:00 +Internet,LEFT_case-7525,2011-08-01 01:06:40+00:00,General,2011-08-02 11:10:20.030000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource02,2011-05-11 01:06:40.020000+00:00,task-26112,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-06-01 09:43:46.526000+00:00 +Desk,LEFT_case-7535,2011-06-21 00:00:00+00:00,General,2011-05-27 09:10:17.111000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource08,2011-04-26 00:00:00.020000+00:00,task-25174,Confirmation of receipt,complete,Group 1,Resource08,2011-05-19 14:18:29.277000+00:00 +Desk,LEFT_case-7535,2011-06-21 00:00:00+00:00,General,2011-05-27 09:10:17.111000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource08,2011-04-26 00:00:00.020000+00:00,task-25759,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-05-19 14:19:10.571000+00:00 +Desk,LEFT_case-7535,2011-06-21 00:00:00+00:00,General,2011-05-27 09:10:17.111000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource08,2011-04-26 00:00:00.020000+00:00,task-25763,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-05-19 14:21:11.536000+00:00 +Desk,LEFT_case-7535,2011-06-21 00:00:00+00:00,General,2011-05-27 09:10:17.111000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource08,2011-04-26 00:00:00.020000+00:00,task-25762,T11 Create document X request unlicensed,complete,Group 1,Resource08,2011-05-20 09:12:28.197000+00:00 +Desk,LEFT_case-7535,2011-06-21 00:00:00+00:00,General,2011-05-27 09:10:17.111000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource08,2011-04-26 00:00:00.020000+00:00,task-25824,T14 Determine document X request unlicensed,complete,Group 3,Resource08,2011-05-20 10:45:30.738000+00:00 +Desk,LEFT_case-7541,2011-06-23 00:00:00+00:00,General,2011-06-01 11:08:31.534000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-25180,Confirmation of receipt,complete,Group 1,Resource04,2011-05-19 11:55:23.539000+00:00 +Desk,LEFT_case-7541,2011-06-23 00:00:00+00:00,General,2011-06-01 11:08:31.534000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-25683,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-19 11:55:39.014000+00:00 +Desk,LEFT_case-7541,2011-06-23 00:00:00+00:00,General,2011-06-01 11:08:31.534000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-25685,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-19 11:56:03.092000+00:00 +Internet,LEFT_case-7556,2011-07-06 00:00:00+00:00,General,2011-07-11 11:35:18.493000+00:00,2011-07-06 00:00:00.020000+00:00,Group 5,Resource02,2011-05-11 00:00:00.020000+00:00,task-25215,Confirmation of receipt,complete,EMPTY,Resource08,2011-05-27 09:15:44.787000+00:00 +Internet,LEFT_case-7556,2011-07-06 00:00:00+00:00,General,2011-07-11 11:35:18.493000+00:00,2011-07-06 00:00:00.020000+00:00,Group 5,Resource02,2011-05-11 00:00:00.020000+00:00,task-26620,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-05-27 09:17:02.587000+00:00 +Internet,LEFT_case-7556,2011-07-06 00:00:00+00:00,General,2011-07-11 11:35:18.493000+00:00,2011-07-06 00:00:00.020000+00:00,Group 5,Resource02,2011-05-11 00:00:00.020000+00:00,task-26619,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-06-01 13:48:13.149000+00:00 +Internet,LEFT_case-7558,2011-07-06 00:00:00+00:00,General,2011-05-31 00:00:00.020000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource12,2011-05-11 00:00:00.020000+00:00,task-25231,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-26 09:32:07.512000+00:00 +Internet,LEFT_case-7558,2011-07-06 00:00:00+00:00,General,2011-05-31 00:00:00.020000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource12,2011-05-11 00:00:00.020000+00:00,task-26387,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-26 09:33:10.240000+00:00 +Internet,LEFT_case-7558,2011-07-06 00:00:00+00:00,General,2011-05-31 00:00:00.020000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource12,2011-05-11 00:00:00.020000+00:00,task-26386,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-26 09:34:01.579000+00:00 +Internet,LEFT_case-7563,2011-07-07 00:00:00+00:00,General,2011-06-06 14:57:38.616000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-25283,Confirmation of receipt,complete,Group 1,Resource01,2011-05-18 14:26:19.203000+00:00 +Internet,LEFT_case-7563,2011-07-07 00:00:00+00:00,General,2011-06-06 14:57:38.616000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-25505,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-18 14:28:52.647000+00:00 +Internet,LEFT_case-7563,2011-07-07 00:00:00+00:00,General,2011-06-06 14:57:38.616000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-25504,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-26 10:19:42.709000+00:00 +Internet,LEFT_case-7565,2011-08-18 01:06:40+00:00,General,2011-08-15 11:57:56.227000+00:00,2011-08-18 01:06:40.020000+00:00,,Resource13,2011-05-12 01:06:40.020000+00:00,task-25290,Confirmation of receipt,complete,EMPTY,Resource13,2011-05-24 07:14:18.292000+00:00 +Internet,LEFT_case-7565,2011-08-18 01:06:40+00:00,General,2011-08-15 11:57:56.227000+00:00,2011-08-18 01:06:40.020000+00:00,,Resource13,2011-05-12 01:06:40.020000+00:00,task-26135,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-05-24 07:15:36.573000+00:00 +Internet,LEFT_case-7565,2011-08-18 01:06:40+00:00,General,2011-08-15 11:57:56.227000+00:00,2011-08-18 01:06:40.020000+00:00,,Resource13,2011-05-12 01:06:40.020000+00:00,task-26136,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-05-26 08:41:27.038000+00:00 +Internet,LEFT_case-7566,2011-07-07 00:00:00+00:00,General,2011-08-22 12:42:33.383000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource05,2011-05-12 00:00:00.020000+00:00,task-25291,Confirmation of receipt,complete,Group 1,Resource05,2011-05-23 11:58:36.043000+00:00 +Internet,LEFT_case-7566,2011-07-07 00:00:00+00:00,General,2011-08-22 12:42:33.383000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource05,2011-05-12 00:00:00.020000+00:00,task-26030,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-23 12:19:21.547000+00:00 +Internet,LEFT_case-7566,2011-07-07 00:00:00+00:00,General,2011-08-22 12:42:33.383000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource05,2011-05-12 00:00:00.020000+00:00,task-26024,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-23 12:24:04.495000+00:00 +Internet,LEFT_case-7567,2011-07-07 00:00:00+00:00,General,2011-06-09 11:33:30.970000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-25293,Confirmation of receipt,complete,Group 1,Resource01,2011-05-18 14:33:56.160000+00:00 +Internet,LEFT_case-7567,2011-07-07 00:00:00+00:00,General,2011-06-09 11:33:30.970000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-25510,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-18 14:35:24.369000+00:00 +Internet,LEFT_case-7567,2011-07-07 00:00:00+00:00,General,2011-06-09 11:33:30.970000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-25509,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-23 12:30:30.770000+00:00 +Internet,LEFT_case-7568,2011-07-07 00:00:00+00:00,General,2011-08-30 12:09:03.786000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource18,2011-05-12 00:00:00.020000+00:00,task-25294,Confirmation of receipt,complete,EMPTY,Resource18,2011-06-20 14:29:09.929000+00:00 +Internet,LEFT_case-7568,2011-07-07 00:00:00+00:00,General,2011-08-30 12:09:03.786000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource18,2011-05-12 00:00:00.020000+00:00,task-29189,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-06-20 14:30:14.271000+00:00 +Internet,LEFT_case-7568,2011-07-07 00:00:00+00:00,General,2011-08-30 12:09:03.786000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource18,2011-05-12 00:00:00.020000+00:00,task-29188,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-06-20 14:36:11.751000+00:00 +Internet,LEFT_case-7569,2011-07-07 00:00:00+00:00,General,2011-08-30 13:50:32.613000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource12,2011-05-12 00:00:00.020000+00:00,task-25299,Confirmation of receipt,complete,EMPTY,Resource12,2011-06-06 09:00:20.128000+00:00 +Internet,LEFT_case-7569,2011-07-07 00:00:00+00:00,General,2011-08-30 13:50:32.613000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource12,2011-05-12 00:00:00.020000+00:00,task-27654,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-06-06 09:01:10.436000+00:00 +Internet,LEFT_case-7569,2011-07-07 00:00:00+00:00,General,2011-08-30 13:50:32.613000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource12,2011-05-12 00:00:00.020000+00:00,task-27711,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-06-06 10:28:36.647000+00:00 +Internet,LEFT_case-7570,2011-07-10 00:00:00+00:00,General,2011-07-11 12:17:31.615000+00:00,2011-07-10 00:00:00.020000+00:00,,Resource01,2011-05-15 00:00:00.020000+00:00,task-25300,Confirmation of receipt,complete,Group 1,Resource01,2011-05-20 15:08:44.165000+00:00 +Internet,LEFT_case-7570,2011-07-10 00:00:00+00:00,General,2011-07-11 12:17:31.615000+00:00,2011-07-10 00:00:00.020000+00:00,,Resource01,2011-05-15 00:00:00.020000+00:00,task-25889,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-20 15:09:20.155000+00:00 +Internet,LEFT_case-7570,2011-07-10 00:00:00+00:00,General,2011-07-11 12:17:31.615000+00:00,2011-07-10 00:00:00.020000+00:00,,Resource01,2011-05-15 00:00:00.020000+00:00,task-25888,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-26 13:27:09.297000+00:00 +Desk,LEFT_case-7579,2011-07-04 00:00:00+00:00,General,2011-07-01 15:17:49.913000+00:00,2011-07-04 00:00:00.020000+00:00,,Resource15,2011-05-09 00:00:00.020000+00:00,task-25354,Confirmation of receipt,complete,Group 1,Resource15,2011-05-23 11:01:16.373000+00:00 +Desk,LEFT_case-7579,2011-07-04 00:00:00+00:00,General,2011-07-01 15:17:49.913000+00:00,2011-07-04 00:00:00.020000+00:00,,Resource15,2011-05-09 00:00:00.020000+00:00,task-26012,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-23 11:01:47.042000+00:00 +Desk,LEFT_case-7579,2011-07-04 00:00:00+00:00,General,2011-07-01 15:17:49.913000+00:00,2011-07-04 00:00:00.020000+00:00,,Resource15,2011-05-09 00:00:00.020000+00:00,task-26011,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-23 11:06:36.303000+00:00 +Internet,LEFT_case-7584,2011-07-13 00:00:00+00:00,General,2011-08-18 08:47:56.972000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource21,2011-05-18 00:00:00.020000+00:00,task-25384,Confirmation of receipt,complete,Group 1,Resource21,2011-05-18 10:50:58.184000+00:00 +Internet,LEFT_case-7584,2011-07-13 00:00:00+00:00,General,2011-08-18 08:47:56.972000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource21,2011-05-18 00:00:00.020000+00:00,task-25388,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-05-18 10:54:18.275000+00:00 +Internet,LEFT_case-7584,2011-07-13 00:00:00+00:00,General,2011-08-18 08:47:56.972000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource21,2011-05-18 00:00:00.020000+00:00,task-25386,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-05-18 11:13:26.409000+00:00 +Desk,LEFT_case-7590,2011-06-24 00:00:00+00:00,General,2011-06-24 14:21:57.533000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource05,2011-04-29 00:00:00.020000+00:00,task-25435,Confirmation of receipt,complete,EMPTY,Resource05,2011-05-30 09:38:37.698000+00:00 +Desk,LEFT_case-7590,2011-06-24 00:00:00+00:00,General,2011-06-24 14:21:57.533000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource05,2011-04-29 00:00:00.020000+00:00,task-26907,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-30 09:39:45.400000+00:00 +Desk,LEFT_case-7590,2011-06-24 00:00:00+00:00,General,2011-06-24 14:21:57.533000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource05,2011-04-29 00:00:00.020000+00:00,task-26908,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-30 09:40:16.266000+00:00 +Internet,LEFT_case-7612,2011-07-11 00:00:00+00:00,General,2011-10-31 10:00:36.314000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource09,2011-05-16 00:00:00.020000+00:00,task-25729,Confirmation of receipt,complete,EMPTY,Resource09,2011-06-07 14:21:39.731000+00:00 +Internet,LEFT_case-7612,2011-07-11 00:00:00+00:00,General,2011-10-31 10:00:36.314000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource09,2011-05-16 00:00:00.020000+00:00,task-28170,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-06-07 14:22:18.227000+00:00 +Internet,LEFT_case-7612,2011-07-11 00:00:00+00:00,General,2011-10-31 10:00:36.314000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource09,2011-05-16 00:00:00.020000+00:00,task-28188,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-06-07 14:33:59.280000+00:00 +Internet,LEFT_case-7612,2011-07-11 00:00:00+00:00,General,2011-10-31 10:00:36.314000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource09,2011-05-16 00:00:00.020000+00:00,task-28172,T16 Report reasons to hold request,complete,Group 1,Resource09,2011-06-07 14:35:38.902000+00:00 +Internet,LEFT_case-7612,2011-07-11 00:00:00+00:00,General,2011-10-31 10:00:36.314000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource09,2011-05-16 00:00:00.020000+00:00,task-28193,T19 Determine report Y to stop indication,complete,Group 3,Resource09,2011-06-07 14:36:15.510000+00:00 +Internet,LEFT_case-7628,2011-08-22 01:06:40+00:00,General,2011-08-22 16:26:36.759000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-25816,Confirmation of receipt,complete,EMPTY,Resource15,2011-06-06 12:13:35.272000+00:00 +Internet,LEFT_case-7628,2011-08-22 01:06:40+00:00,General,2011-08-22 16:26:36.759000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-27787,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-06-06 12:14:23.185000+00:00 +Internet,LEFT_case-7628,2011-08-22 01:06:40+00:00,General,2011-08-22 16:26:36.759000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-27786,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-06-06 12:15:48.356000+00:00 +Desk,LEFT_case-7630,2011-07-20 01:06:40+00:00,General,2011-07-20 08:55:48.402000+00:00,2011-07-20 01:06:40.020000+00:00,,admin1,2011-04-27 01:06:40.020000+00:00,task-25823,Confirmation of receipt,complete,EMPTY,Resource13,2011-05-30 12:02:24.800000+00:00 +Desk,LEFT_case-7630,2011-07-20 01:06:40+00:00,General,2011-07-20 08:55:48.402000+00:00,2011-07-20 01:06:40.020000+00:00,,admin1,2011-04-27 01:06:40.020000+00:00,task-27015,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-05-30 12:16:02.609000+00:00 +Desk,LEFT_case-7630,2011-07-20 01:06:40+00:00,General,2011-07-20 08:55:48.402000+00:00,2011-07-20 01:06:40.020000+00:00,,admin1,2011-04-27 01:06:40.020000+00:00,task-27014,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-05-30 12:18:29.788000+00:00 +Internet,LEFT_case-7631,2011-07-12 01:06:40+00:00,General,2011-07-13 15:54:41.180000+00:00,2011-07-12 01:06:40.020000+00:00,,Resource17,2011-05-17 01:06:40.020000+00:00,task-25835,Confirmation of receipt,complete,EMPTY,Resource17,2011-05-26 14:24:20.017000+00:00 +Internet,LEFT_case-7631,2011-07-12 01:06:40+00:00,General,2011-07-13 15:54:41.180000+00:00,2011-07-12 01:06:40.020000+00:00,,Resource17,2011-05-17 01:06:40.020000+00:00,task-26514,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-05-26 14:25:11.419000+00:00 +Internet,LEFT_case-7631,2011-07-12 01:06:40+00:00,General,2011-07-13 15:54:41.180000+00:00,2011-07-12 01:06:40.020000+00:00,,Resource17,2011-05-17 01:06:40.020000+00:00,task-26515,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-05-26 22:55:04.881000+00:00 +Internet,LEFT_case-7632,2011-07-13 01:06:40+00:00,General,2011-07-12 11:04:49.692000+00:00,2011-07-13 01:06:40.020000+00:00,,Resource02,2011-05-18 01:06:40.020000+00:00,task-25874,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-31 09:36:11.980000+00:00 +Internet,LEFT_case-7632,2011-07-13 01:06:40+00:00,General,2011-07-12 11:04:49.692000+00:00,2011-07-13 01:06:40.020000+00:00,,Resource02,2011-05-18 01:06:40.020000+00:00,task-27261,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-31 09:36:50.205000+00:00 +Internet,LEFT_case-7632,2011-07-13 01:06:40+00:00,General,2011-07-12 11:04:49.692000+00:00,2011-07-13 01:06:40.020000+00:00,,Resource02,2011-05-18 01:06:40.020000+00:00,task-27262,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-31 09:37:32.864000+00:00 +Internet,LEFT_case-7664,2011-07-14 00:00:00+00:00,General,2011-06-21 08:33:13.322000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource01,2011-05-19 00:00:00.020000+00:00,task-25954,Confirmation of receipt,complete,EMPTY,admin2,2011-06-21 08:33:14.630000+00:00 +Internet,LEFT_case-7665,2011-07-14 01:06:40+00:00,General,2011-06-21 14:23:14.147000+00:00,2011-07-14 01:06:40.020000+00:00,,Resource11,2011-05-19 01:06:40.020000+00:00,task-25969,Confirmation of receipt,complete,Group 1,Resource01,2011-05-26 14:28:31.073000+00:00 +Internet,LEFT_case-7665,2011-07-14 01:06:40+00:00,General,2011-06-21 14:23:14.147000+00:00,2011-07-14 01:06:40.020000+00:00,,Resource11,2011-05-19 01:06:40.020000+00:00,task-26519,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-26 14:29:00.068000+00:00 +Internet,LEFT_case-7665,2011-07-14 01:06:40+00:00,General,2011-06-21 14:23:14.147000+00:00,2011-07-14 01:06:40.020000+00:00,,Resource11,2011-05-19 01:06:40.020000+00:00,task-26520,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-26 14:29:15.012000+00:00 +Internet,LEFT_case-7666,2011-07-14 00:00:00+00:00,General,2011-06-22 09:03:31.262000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-25984,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-26 14:41:12.564000+00:00 +Internet,LEFT_case-7666,2011-07-14 00:00:00+00:00,General,2011-06-22 09:03:31.262000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26542,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-26 14:41:41.810000+00:00 +Internet,LEFT_case-7666,2011-07-14 00:00:00+00:00,General,2011-06-22 09:03:31.262000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26541,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-26 14:42:06.503000+00:00 +Internet,LEFT_case-7667,2011-07-14 00:00:00+00:00,General,2011-06-22 08:58:43.213000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26016,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-26 14:53:50.287000+00:00 +Internet,LEFT_case-7667,2011-07-14 00:00:00+00:00,General,2011-06-22 08:58:43.213000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26563,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-26 14:54:20.900000+00:00 +Internet,LEFT_case-7667,2011-07-14 00:00:00+00:00,General,2011-06-22 08:58:43.213000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26562,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-26 14:54:49.989000+00:00 +Internet,LEFT_case-7683,2011-07-14 00:00:00+00:00,General,2011-07-13 16:40:02.484000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource02,2011-05-19 00:00:00.020000+00:00,task-26151,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-25 14:45:39.553000+00:00 +Internet,LEFT_case-7683,2011-07-14 00:00:00+00:00,General,2011-07-13 16:40:02.484000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource02,2011-05-19 00:00:00.020000+00:00,task-26313,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-25 14:46:58.001000+00:00 +Internet,LEFT_case-7683,2011-07-14 00:00:00+00:00,General,2011-07-13 16:40:02.484000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource02,2011-05-19 00:00:00.020000+00:00,task-26312,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-25 14:56:57.164000+00:00 +Internet,LEFT_case-7685,2011-07-14 00:00:00+00:00,General,2011-07-14 16:10:39.025000+00:00,2011-07-14 00:00:00.020000+00:00,Group 5,Resource02,2011-05-19 00:00:00.020000+00:00,task-26161,Confirmation of receipt,complete,EMPTY,Resource09,2011-07-04 12:08:41.453000+00:00 +Internet,LEFT_case-7685,2011-07-14 00:00:00+00:00,General,2011-07-14 16:10:39.025000+00:00,2011-07-14 00:00:00.020000+00:00,Group 5,Resource02,2011-05-19 00:00:00.020000+00:00,task-30775,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-04 12:10:22.753000+00:00 +Internet,LEFT_case-7685,2011-07-14 00:00:00+00:00,General,2011-07-14 16:10:39.025000+00:00,2011-07-14 00:00:00.020000+00:00,Group 5,Resource02,2011-05-19 00:00:00.020000+00:00,task-30774,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-04 13:55:33.712000+00:00 +Internet,LEFT_case-7686,2011-07-15 00:00:00+00:00,General,2011-07-13 07:51:18.158000+00:00,2011-07-15 00:00:00.020000+00:00,Group 8,Resource11,2011-05-20 00:00:00.020000+00:00,task-26178,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-26 15:18:56.464000+00:00 +Internet,LEFT_case-7686,2011-07-15 00:00:00+00:00,General,2011-07-13 07:51:18.158000+00:00,2011-07-15 00:00:00.020000+00:00,Group 8,Resource11,2011-05-20 00:00:00.020000+00:00,task-26583,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-26 15:19:23.645000+00:00 +Internet,LEFT_case-7686,2011-07-15 00:00:00+00:00,General,2011-07-13 07:51:18.158000+00:00,2011-07-15 00:00:00.020000+00:00,Group 8,Resource11,2011-05-20 00:00:00.020000+00:00,task-26582,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 13:18:33.952000+00:00 +Internet,LEFT_case-7689,2011-07-15 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-07-15 00:00:00.020000+00:00,,Resource04,2011-05-20 00:00:00.020000+00:00,task-26186,Confirmation of receipt,complete,EMPTY,admin2,2011-06-06 15:59:00.644000+00:00 +Internet,LEFT_case-7690,2011-08-19 01:06:40+00:00,General,2011-08-17 14:51:31.130000+00:00,2011-08-19 01:06:40.020000+00:00,,Resource06,2011-05-13 01:06:40.020000+00:00,task-26193,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-27 10:37:35.162000+00:00 +Internet,LEFT_case-7690,2011-08-19 01:06:40+00:00,General,2011-08-17 14:51:31.130000+00:00,2011-08-19 01:06:40.020000+00:00,,Resource06,2011-05-13 01:06:40.020000+00:00,task-26655,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-27 10:39:09.781000+00:00 +Internet,LEFT_case-7690,2011-08-19 01:06:40+00:00,General,2011-08-17 14:51:31.130000+00:00,2011-08-19 01:06:40.020000+00:00,,Resource06,2011-05-13 01:06:40.020000+00:00,task-26654,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-27 10:39:34.029000+00:00 +Internet,LEFT_case-7693,2011-07-12 00:00:00+00:00,General,2011-06-16 10:08:59.610000+00:00,2011-07-12 00:00:00.020000+00:00,,Resource08,2011-05-17 00:00:00.020000+00:00,task-26207,Confirmation of receipt,complete,EMPTY,Resource08,2011-05-31 10:38:41.113000+00:00 +Internet,LEFT_case-7693,2011-07-12 00:00:00+00:00,General,2011-06-16 10:08:59.610000+00:00,2011-07-12 00:00:00.020000+00:00,,Resource08,2011-05-17 00:00:00.020000+00:00,task-27293,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-05-31 10:39:59.467000+00:00 +Internet,LEFT_case-7693,2011-07-12 00:00:00+00:00,General,2011-06-16 10:08:59.610000+00:00,2011-07-12 00:00:00.020000+00:00,,Resource08,2011-05-17 00:00:00.020000+00:00,task-27291,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-05-31 10:54:07.286000+00:00 +Internet,LEFT_case-7693,2011-07-12 00:00:00+00:00,General,2011-06-16 10:08:59.610000+00:00,2011-07-12 00:00:00.020000+00:00,,Resource08,2011-05-17 00:00:00.020000+00:00,task-27298,T11 Create document X request unlicensed,complete,Group 1,Resource08,2011-05-31 11:24:47.869000+00:00 +Internet,LEFT_case-7693,2011-07-12 00:00:00+00:00,General,2011-06-16 10:08:59.610000+00:00,2011-07-12 00:00:00.020000+00:00,,Resource08,2011-05-17 00:00:00.020000+00:00,task-27307,T14 Determine document X request unlicensed,complete,Group 3,Resource17,2011-05-31 11:51:37.184000+00:00 +Internet,LEFT_case-7694,2011-07-07 00:00:00+00:00,General,2011-08-16 09:07:19.279000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource14,2011-05-12 00:00:00.020000+00:00,task-26208,Confirmation of receipt,complete,Group 1,Resource14,2011-05-31 09:07:53.980000+00:00 +Internet,LEFT_case-7694,2011-07-07 00:00:00+00:00,General,2011-08-16 09:07:19.279000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource14,2011-05-12 00:00:00.020000+00:00,task-27249,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-31 09:08:32.255000+00:00 +Internet,LEFT_case-7694,2011-07-07 00:00:00+00:00,General,2011-08-16 09:07:19.279000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource14,2011-05-12 00:00:00.020000+00:00,task-27248,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-31 09:09:04.334000+00:00 +Internet,LEFT_case-7697,2011-07-15 01:06:40+00:00,General,2011-06-09 17:07:38.304000+00:00,2011-07-15 01:06:40.020000+00:00,,Resource06,2011-05-20 01:06:40.020000+00:00,task-26211,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-30 13:29:51.762000+00:00 +Internet,LEFT_case-7697,2011-07-15 01:06:40+00:00,General,2011-06-09 17:07:38.304000+00:00,2011-07-15 01:06:40.020000+00:00,,Resource06,2011-05-20 01:06:40.020000+00:00,task-27138,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-30 13:50:11.872000+00:00 +Internet,LEFT_case-7697,2011-07-15 01:06:40+00:00,General,2011-06-09 17:07:38.304000+00:00,2011-07-15 01:06:40.020000+00:00,,Resource06,2011-05-20 01:06:40.020000+00:00,task-27110,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-30 13:50:45.338000+00:00 +Internet,LEFT_case-7697,2011-07-15 01:06:40+00:00,General,2011-06-09 17:07:38.304000+00:00,2011-07-15 01:06:40.020000+00:00,,Resource06,2011-05-20 01:06:40.020000+00:00,task-27167,T11 Create document X request unlicensed,complete,Group 1,Resource06,2011-05-30 14:50:28.051000+00:00 +Internet,LEFT_case-7697,2011-07-15 01:06:40+00:00,General,2011-06-09 17:07:38.304000+00:00,2011-07-15 01:06:40.020000+00:00,,Resource06,2011-05-20 01:06:40.020000+00:00,task-27189,T14 Determine document X request unlicensed,complete,Group 3,Resource06,2011-05-30 14:52:25.927000+00:00 +Internet,LEFT_case-7699,2011-08-10 01:06:40+00:00,General,2011-08-12 12:13:02.602000+00:00,2011-08-10 01:06:40.020000+00:00,,Resource04,2011-05-11 01:06:40.020000+00:00,task-26214,Confirmation of receipt,complete,Group 1,Resource04,2011-05-30 13:37:25.501000+00:00 +Internet,LEFT_case-7699,2011-08-10 01:06:40+00:00,General,2011-08-12 12:13:02.602000+00:00,2011-08-10 01:06:40.020000+00:00,,Resource04,2011-05-11 01:06:40.020000+00:00,task-27115,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-30 13:37:50.560000+00:00 +Internet,LEFT_case-7699,2011-08-10 01:06:40+00:00,General,2011-08-12 12:13:02.602000+00:00,2011-08-10 01:06:40.020000+00:00,,Resource04,2011-05-11 01:06:40.020000+00:00,task-27116,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-30 13:38:01.061000+00:00 +Internet,LEFT_case-7700,2011-09-05 01:06:40+00:00,General,2011-09-22 09:29:32.860000+00:00,2011-09-05 01:06:40.020000+00:00,,Resource06,2011-05-16 01:06:40.020000+00:00,task-26215,Confirmation of receipt,complete,Group 1,Resource06,2011-05-27 11:57:52.750000+00:00 +Internet,LEFT_case-7700,2011-09-05 01:06:40+00:00,General,2011-09-22 09:29:32.860000+00:00,2011-09-05 01:06:40.020000+00:00,,Resource06,2011-05-16 01:06:40.020000+00:00,task-26713,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-27 11:59:25.792000+00:00 +Internet,LEFT_case-7700,2011-09-05 01:06:40+00:00,General,2011-09-22 09:29:32.860000+00:00,2011-09-05 01:06:40.020000+00:00,,Resource06,2011-05-16 01:06:40.020000+00:00,task-26712,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-27 11:59:38.595000+00:00 +Internet,LEFT_case-7750,2011-07-22 01:06:40+00:00,General,2011-07-20 10:00:20.946000+00:00,2011-07-22 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-26627,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-06 12:46:00.801000+00:00 +Internet,LEFT_case-7750,2011-07-22 01:06:40+00:00,General,2011-07-20 10:00:20.946000+00:00,2011-07-22 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-27799,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-06 12:46:56.367000+00:00 +Internet,LEFT_case-7750,2011-07-22 01:06:40+00:00,General,2011-07-20 10:00:20.946000+00:00,2011-07-22 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-27800,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-06 12:47:30.081000+00:00 +Internet,LEFT_case-7751,2011-02-06 00:00:00+00:00,General,2011-05-30 16:47:33.837000+00:00,2011-02-06 00:00:00.010000+00:00,,Resource22,2010-12-12 00:00:00.010000+00:00,task-26648,Confirmation of receipt,complete,Group 1,Resource22,2011-05-27 12:51:00.124000+00:00 +Internet,LEFT_case-7751,2011-02-06 00:00:00+00:00,General,2011-05-30 16:47:33.837000+00:00,2011-02-06 00:00:00.010000+00:00,,Resource22,2010-12-12 00:00:00.010000+00:00,task-26731,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-05-27 12:51:55.269000+00:00 +Internet,LEFT_case-7751,2011-02-06 00:00:00+00:00,General,2011-05-30 16:47:33.837000+00:00,2011-02-06 00:00:00.010000+00:00,,Resource22,2010-12-12 00:00:00.010000+00:00,task-26730,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-05-27 12:53:19.857000+00:00 +e-mail,LEFT_case-7753,2011-07-11 00:00:00+00:00,General,2011-07-12 15:26:10.291000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource04,2011-05-16 00:00:00.020000+00:00,task-26709,Confirmation of receipt,complete,Group 1,Resource04,2011-05-31 13:20:06.562000+00:00 +e-mail,LEFT_case-7753,2011-07-11 00:00:00+00:00,General,2011-07-12 15:26:10.291000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource04,2011-05-16 00:00:00.020000+00:00,task-27327,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-31 13:20:31.568000+00:00 +e-mail,LEFT_case-7753,2011-07-11 00:00:00+00:00,General,2011-07-12 15:26:10.291000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource04,2011-05-16 00:00:00.020000+00:00,task-27326,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-31 13:20:50.875000+00:00 +Internet,LEFT_case-7754,2011-07-19 00:00:00+00:00,Customer contact,2011-05-25 00:00:00.020000+00:00,2011-07-19 00:00:00.020000+00:00,,admin3,2011-05-24 00:00:00.020000+00:00,task-26710,Confirmation of receipt,complete,Group 1,admin2,2011-05-27 13:10:58.848000+00:00 +Internet,LEFT_case-7755,2011-07-20 01:06:40+00:00,General,2011-06-21 15:00:53.806000+00:00,2011-07-20 01:06:40.020000+00:00,,Resource01,2011-05-25 01:06:40.020000+00:00,task-26739,Confirmation of receipt,complete,Group 1,Resource11,2011-06-01 08:20:39.043000+00:00 +Internet,LEFT_case-7755,2011-07-20 01:06:40+00:00,General,2011-06-21 15:00:53.806000+00:00,2011-07-20 01:06:40.020000+00:00,,Resource01,2011-05-25 01:06:40.020000+00:00,task-27396,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-06-01 08:21:41.571000+00:00 +Internet,LEFT_case-7755,2011-07-20 01:06:40+00:00,General,2011-06-21 15:00:53.806000+00:00,2011-07-20 01:06:40.020000+00:00,,Resource01,2011-05-25 01:06:40.020000+00:00,task-27395,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-06-01 08:22:10.135000+00:00 +Internet,LEFT_case-7757,2011-07-19 00:00:00+00:00,General,2011-07-12 07:47:56.905000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-26741,Confirmation of receipt,complete,Group 1,Resource11,2011-06-01 08:58:23.157000+00:00 +Internet,LEFT_case-7757,2011-07-19 00:00:00+00:00,General,2011-07-12 07:47:56.905000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-27423,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-06-01 08:59:18.956000+00:00 +Internet,LEFT_case-7757,2011-07-19 00:00:00+00:00,General,2011-07-12 07:47:56.905000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-27422,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-06-01 09:00:10.189000+00:00 +Internet,LEFT_case-7758,2011-07-18 00:00:00+00:00,General,2011-08-15 07:52:55.041000+00:00,2011-07-18 00:00:00.020000+00:00,Group 8,Resource11,2011-05-23 00:00:00.020000+00:00,task-26769,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 11:19:05.151000+00:00 +Internet,LEFT_case-7758,2011-07-18 00:00:00+00:00,General,2011-08-15 07:52:55.041000+00:00,2011-07-18 00:00:00.020000+00:00,Group 8,Resource11,2011-05-23 00:00:00.020000+00:00,task-30019,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 11:19:54.601000+00:00 +Internet,LEFT_case-7758,2011-07-18 00:00:00+00:00,General,2011-08-15 07:52:55.041000+00:00,2011-07-18 00:00:00.020000+00:00,Group 8,Resource11,2011-05-23 00:00:00.020000+00:00,task-30018,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 11:20:31.497000+00:00 +Internet,LEFT_case-7759,2011-07-18 01:06:40+00:00,General,2011-07-19 09:57:29.392000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-26774,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-01 11:40:47.712000+00:00 +Internet,LEFT_case-7759,2011-07-18 01:06:40+00:00,General,2011-07-19 09:57:29.392000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-27493,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-01 11:45:44.548000+00:00 +Internet,LEFT_case-7759,2011-07-18 01:06:40+00:00,General,2011-07-19 09:57:29.392000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-27494,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-01 11:46:14.974000+00:00 +Internet,LEFT_case-7760,2011-07-19 00:00:00+00:00,General,2011-06-06 15:09:33.450000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource01,2011-05-24 00:00:00.020000+00:00,task-26775,Confirmation of receipt,complete,Group 1,Resource11,2011-05-30 12:03:04.514000+00:00 +Internet,LEFT_case-7760,2011-07-19 00:00:00+00:00,General,2011-06-06 15:09:33.450000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource01,2011-05-24 00:00:00.020000+00:00,task-27017,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-05-30 12:06:59.856000+00:00 +Internet,LEFT_case-7760,2011-07-19 00:00:00+00:00,General,2011-06-06 15:09:33.450000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource01,2011-05-24 00:00:00.020000+00:00,task-27473,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-06-01 11:01:52.677000+00:00 +Internet,LEFT_case-7761,2011-08-19 01:06:40+00:00,General,2011-08-17 16:30:51.464000+00:00,2011-08-19 01:06:40.020000+00:00,Group 5,Resource04,2011-05-27 01:06:40.020000+00:00,task-26781,Confirmation of receipt,complete,Group 1,Resource04,2011-06-07 09:05:16.998000+00:00 +Internet,LEFT_case-7761,2011-08-19 01:06:40+00:00,General,2011-08-17 16:30:51.464000+00:00,2011-08-19 01:06:40.020000+00:00,Group 5,Resource04,2011-05-27 01:06:40.020000+00:00,task-28028,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-06-07 09:07:41.844000+00:00 +Internet,LEFT_case-7761,2011-08-19 01:06:40+00:00,General,2011-08-17 16:30:51.464000+00:00,2011-08-19 01:06:40.020000+00:00,Group 5,Resource04,2011-05-27 01:06:40.020000+00:00,task-28027,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-06-07 14:47:04.516000+00:00 +Internet,LEFT_case-7762,2011-08-29 01:06:40+00:00,General,2011-09-21 15:19:39.030000+00:00,2011-08-29 01:06:40.020000+00:00,,Resource02,2011-05-23 01:06:40.020000+00:00,task-26782,Confirmation of receipt,complete,EMPTY,Resource02,2011-07-14 15:49:44.468000+00:00 +Internet,LEFT_case-7762,2011-08-29 01:06:40+00:00,General,2011-09-21 15:19:39.030000+00:00,2011-08-29 01:06:40.020000+00:00,,Resource02,2011-05-23 01:06:40.020000+00:00,task-32118,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-07-14 15:50:26.228000+00:00 +Internet,LEFT_case-7762,2011-08-29 01:06:40+00:00,General,2011-09-21 15:19:39.030000+00:00,2011-08-29 01:06:40.020000+00:00,,Resource02,2011-05-23 01:06:40.020000+00:00,task-32117,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-07-14 15:51:26.472000+00:00 +Internet,LEFT_case-7763,2011-07-22 00:00:00+00:00,General,2011-06-01 09:02:45.723000+00:00,2011-07-22 00:00:00.020000+00:00,,Resource02,2011-05-27 00:00:00.020000+00:00,task-26786,Confirmation of receipt,complete,Group 1,Resource02,2011-05-30 11:17:44.400000+00:00 +Internet,LEFT_case-7763,2011-07-22 00:00:00+00:00,General,2011-06-01 09:02:45.723000+00:00,2011-07-22 00:00:00.020000+00:00,,Resource02,2011-05-27 00:00:00.020000+00:00,task-26978,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-30 11:18:30.188000+00:00 +Internet,LEFT_case-7763,2011-07-22 00:00:00+00:00,General,2011-06-01 09:02:45.723000+00:00,2011-07-22 00:00:00.020000+00:00,,Resource02,2011-05-27 00:00:00.020000+00:00,task-26977,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-30 11:20:40.832000+00:00 +Internet,LEFT_case-7805,2011-07-21 01:06:40+00:00,General,,2011-07-21 01:06:40.020000+00:00,,Resource14,2011-05-26 01:06:40.020000+00:00,task-26920,Confirmation of receipt,complete,Group 1,Resource14,2011-06-20 08:47:42.688000+00:00 +Internet,LEFT_case-7805,2011-07-21 01:06:40+00:00,General,,2011-07-21 01:06:40.020000+00:00,,Resource14,2011-05-26 01:06:40.020000+00:00,task-29082,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-06-20 08:48:31.478000+00:00 +Internet,LEFT_case-7805,2011-07-21 01:06:40+00:00,General,,2011-07-21 01:06:40.020000+00:00,,Resource14,2011-05-26 01:06:40.020000+00:00,task-29081,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-06-20 09:07:02.065000+00:00 +Internet,LEFT_case-7807,2011-07-21 00:00:00+00:00,General,2011-08-17 12:25:55.993000+00:00,2011-07-21 00:00:00.020000+00:00,,Resource12,2011-05-26 00:00:00.020000+00:00,task-26960,Confirmation of receipt,complete,EMPTY,admin2,2011-08-17 12:25:56.906000+00:00 +Internet,LEFT_case-7810,2011-07-21 00:00:00+00:00,General,2011-07-20 08:27:32.767000+00:00,2011-07-21 00:00:00.020000+00:00,,Resource13,2011-05-26 00:00:00.020000+00:00,task-26975,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-07 08:44:09.680000+00:00 +Internet,LEFT_case-7810,2011-07-21 00:00:00+00:00,General,2011-07-20 08:27:32.767000+00:00,2011-07-21 00:00:00.020000+00:00,,Resource13,2011-05-26 00:00:00.020000+00:00,task-28007,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-07 08:47:51.956000+00:00 +Internet,LEFT_case-7810,2011-07-21 00:00:00+00:00,General,2011-07-20 08:27:32.767000+00:00,2011-07-21 00:00:00.020000+00:00,,Resource13,2011-05-26 00:00:00.020000+00:00,task-28006,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-07 08:52:25.071000+00:00 +Internet,LEFT_case-7814,2011-06-27 00:00:00+00:00,General,2011-06-28 12:08:16.358000+00:00,2011-06-27 00:00:00.020000+00:00,,Resource02,2011-05-02 00:00:00.020000+00:00,task-27178,Confirmation of receipt,complete,Group 1,Resource02,2011-06-06 15:00:09.673000+00:00 +Internet,LEFT_case-7814,2011-06-27 00:00:00+00:00,General,2011-06-28 12:08:16.358000+00:00,2011-06-27 00:00:00.020000+00:00,,Resource02,2011-05-02 00:00:00.020000+00:00,task-27901,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-06-06 15:00:53.220000+00:00 +Internet,LEFT_case-7814,2011-06-27 00:00:00+00:00,General,2011-06-28 12:08:16.358000+00:00,2011-06-27 00:00:00.020000+00:00,,Resource02,2011-05-02 00:00:00.020000+00:00,task-27900,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-06-09 11:35:49.390000+00:00 +Internet,LEFT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27193,Confirmation of receipt,complete,EMPTY,Resource05,2011-06-06 09:47:31.708000+00:00 +Internet,LEFT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27679,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-06-06 09:48:04.553000+00:00 +Internet,LEFT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27678,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-06 09:49:04.495000+00:00 +Internet,LEFT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27683,T16 Report reasons to hold request,complete,Group 1,Resource05,2011-06-06 09:56:09.998000+00:00 +Internet,LEFT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27687,T18 Adjust report Y to stop indicition,complete,Group 1,Resource05,2011-06-06 09:57:01.276000+00:00 +Internet,LEFT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27689,T18 Adjust report Y to stop indicition,complete,Group 1,Resource05,2011-06-06 09:57:34.132000+00:00 +Internet,LEFT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27691,T19 Determine report Y to stop indication,complete,Group 3,Resource05,2011-06-06 09:58:44.603000+00:00 +Internet,LEFT_case-7817,2011-07-13 00:00:00+00:00,General,2011-07-07 09:39:24.114000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource01,2011-05-18 00:00:00.020000+00:00,task-27197,Confirmation of receipt,complete,EMPTY,Resource01,2011-06-16 08:29:10.537000+00:00 +Internet,LEFT_case-7817,2011-07-13 00:00:00+00:00,General,2011-07-07 09:39:24.114000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource01,2011-05-18 00:00:00.020000+00:00,task-29259,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-21 09:25:29.771000+00:00 +Internet,LEFT_case-7817,2011-07-13 00:00:00+00:00,General,2011-07-07 09:39:24.114000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource01,2011-05-18 00:00:00.020000+00:00,task-28738,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-21 09:26:06.235000+00:00 +Internet,LEFT_case-7817,2011-07-13 00:00:00+00:00,General,2011-07-07 09:39:24.114000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource01,2011-05-18 00:00:00.020000+00:00,task-29445,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-06-28 09:22:56.913000+00:00 +Internet,LEFT_case-7817,2011-07-13 00:00:00+00:00,General,2011-07-07 09:39:24.114000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource01,2011-05-18 00:00:00.020000+00:00,task-29923,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-07-01 16:09:31.009000+00:00 +Internet,LEFT_case-7818,2011-07-08 00:00:00+00:00,General,2011-08-03 00:00:00.020000+00:00,2011-07-08 00:00:00.020000+00:00,Group 5,Resource06,2011-05-13 00:00:00.020000+00:00,task-27205,Confirmation of receipt,complete,EMPTY,Resource08,2011-06-01 11:19:56.489000+00:00 +Internet,LEFT_case-7818,2011-07-08 00:00:00+00:00,General,2011-08-03 00:00:00.020000+00:00,2011-07-08 00:00:00.020000+00:00,Group 5,Resource06,2011-05-13 00:00:00.020000+00:00,task-27488,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-06-01 11:23:06.576000+00:00 +Internet,LEFT_case-7818,2011-07-08 00:00:00+00:00,General,2011-08-03 00:00:00.020000+00:00,2011-07-08 00:00:00.020000+00:00,Group 5,Resource06,2011-05-13 00:00:00.020000+00:00,task-27485,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-06-08 10:10:11.262000+00:00 +Internet,LEFT_case-7832,2011-09-08 01:06:40+00:00,General,2011-08-02 10:53:16.729000+00:00,2011-09-08 01:06:40.020000+00:00,,Resource02,2011-05-29 01:06:40.020000+00:00,task-27356,Confirmation of receipt,complete,EMPTY,Resource08,2011-06-21 14:55:44.927000+00:00 +Internet,LEFT_case-7832,2011-09-08 01:06:40+00:00,General,2011-08-02 10:53:16.729000+00:00,2011-09-08 01:06:40.020000+00:00,,Resource02,2011-05-29 01:06:40.020000+00:00,task-29357,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-06-21 14:56:31.383000+00:00 +Internet,LEFT_case-7832,2011-09-08 01:06:40+00:00,General,2011-08-02 10:53:16.729000+00:00,2011-09-08 01:06:40.020000+00:00,,Resource02,2011-05-29 01:06:40.020000+00:00,task-29356,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-06-21 15:13:11.486000+00:00 +Internet,LEFT_case-7847,2011-10-26 01:06:40+00:00,General,2011-10-20 11:05:33.020000+00:00,2011-10-26 01:06:40.020000+00:00,,Resource02,2011-05-30 01:06:40.020000+00:00,task-27445,Confirmation of receipt,complete,EMPTY,Resource08,2011-06-21 15:37:56.799000+00:00 +Internet,LEFT_case-7847,2011-10-26 01:06:40+00:00,General,2011-10-20 11:05:33.020000+00:00,2011-10-26 01:06:40.020000+00:00,,Resource02,2011-05-30 01:06:40.020000+00:00,task-29379,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-06-21 15:39:06.247000+00:00 +Internet,LEFT_case-7847,2011-10-26 01:06:40+00:00,General,2011-10-20 11:05:33.020000+00:00,2011-10-26 01:06:40.020000+00:00,,Resource02,2011-05-30 01:06:40.020000+00:00,task-29378,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-06-21 15:40:57.622000+00:00 +Internet,LEFT_case-7851,2011-07-25 00:00:00+00:00,General,2011-07-20 11:28:19.607000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource06,2011-05-30 00:00:00.020000+00:00,task-27479,Confirmation of receipt,complete,EMPTY,Resource06,2011-06-07 12:13:13.124000+00:00 +Internet,LEFT_case-7851,2011-07-25 00:00:00+00:00,General,2011-07-20 11:28:19.607000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource06,2011-05-30 00:00:00.020000+00:00,task-28125,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-06-07 12:13:39.709000+00:00 +Internet,LEFT_case-7851,2011-07-25 00:00:00+00:00,General,2011-07-20 11:28:19.607000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource06,2011-05-30 00:00:00.020000+00:00,task-28129,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-06-07 12:14:25.041000+00:00 +Internet,LEFT_case-7856,2011-07-25 00:00:00+00:00,General,2011-08-15 11:22:26.220000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource05,2011-05-30 00:00:00.020000+00:00,task-27531,Confirmation of receipt,complete,Group 1,Resource05,2011-06-07 12:05:30.699000+00:00 +Internet,LEFT_case-7856,2011-07-25 00:00:00+00:00,General,2011-08-15 11:22:26.220000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource05,2011-05-30 00:00:00.020000+00:00,task-28118,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-06-07 12:06:06.233000+00:00 +Internet,LEFT_case-7856,2011-07-25 00:00:00+00:00,General,2011-08-15 11:22:26.220000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource05,2011-05-30 00:00:00.020000+00:00,task-28117,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-07 12:10:23.239000+00:00 +Internet,LEFT_case-7905,2011-07-26 00:00:00+00:00,General,2011-07-25 09:57:39.681000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-27660,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 10:31:05.590000+00:00 +Internet,LEFT_case-7905,2011-07-26 00:00:00+00:00,General,2011-07-25 09:57:39.681000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29953,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 10:31:49.896000+00:00 +Internet,LEFT_case-7905,2011-07-26 00:00:00+00:00,General,2011-07-25 09:57:39.681000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29952,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 10:32:20.566000+00:00 +Internet,LEFT_case-7907,2011-07-26 01:06:40+00:00,General,2011-07-18 14:17:16.031000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-27694,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 11:51:05.031000+00:00 +Internet,LEFT_case-7907,2011-07-26 01:06:40+00:00,General,2011-07-18 14:17:16.031000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-30067,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 11:51:44.852000+00:00 +Internet,LEFT_case-7907,2011-07-26 01:06:40+00:00,General,2011-07-18 14:17:16.031000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-30066,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 11:52:28.638000+00:00 +Internet,LEFT_case-7908,2011-07-26 00:00:00+00:00,General,2011-07-13 07:56:32.983000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-27705,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 10:45:11.259000+00:00 +Internet,LEFT_case-7908,2011-07-26 00:00:00+00:00,General,2011-07-13 07:56:32.983000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29974,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 10:47:08.522000+00:00 +Internet,LEFT_case-7908,2011-07-26 00:00:00+00:00,General,2011-07-13 07:56:32.983000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29972,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 10:47:51.061000+00:00 +Internet,LEFT_case-7911,2011-07-26 00:00:00+00:00,General,2011-07-13 08:05:04.176000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-27721,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 11:03:09.846000+00:00 +Internet,LEFT_case-7911,2011-07-26 00:00:00+00:00,General,2011-07-13 08:05:04.176000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29995,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 11:03:45.757000+00:00 +Internet,LEFT_case-7911,2011-07-26 00:00:00+00:00,General,2011-07-13 08:05:04.176000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29994,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 11:04:22.702000+00:00 +Internet,LEFT_case-7912,2011-07-26 00:00:00+00:00,General,2011-07-13 08:17:38.614000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-27750,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 11:34:57.533000+00:00 +Internet,LEFT_case-7912,2011-07-26 00:00:00+00:00,General,2011-07-13 08:17:38.614000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-30039,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 11:35:37.546000+00:00 +Internet,LEFT_case-7912,2011-07-26 00:00:00+00:00,General,2011-07-13 08:17:38.614000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-30038,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 11:36:05.355000+00:00 +Internet,LEFT_case-7915,2011-07-26 01:06:40+00:00,General,2011-07-25 07:33:19.467000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-27755,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 13:01:39.026000+00:00 +Internet,LEFT_case-7915,2011-07-26 01:06:40+00:00,General,2011-07-25 07:33:19.467000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-30129,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 13:02:44.429000+00:00 +Internet,LEFT_case-7915,2011-07-26 01:06:40+00:00,General,2011-07-25 07:33:19.467000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-30127,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 13:05:04.688000+00:00 +Internet,LEFT_case-7917,2011-07-27 00:00:00+00:00,General,2011-07-18 14:32:07.502000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-27757,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 11:07:53.965000+00:00 +Internet,LEFT_case-7917,2011-07-27 00:00:00+00:00,General,2011-07-18 14:32:07.502000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30351,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 11:13:52.277000+00:00 +Internet,LEFT_case-7918,2011-07-27 00:00:00+00:00,General,2011-07-18 14:40:29.864000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-27763,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 11:23:57.674000+00:00 +Internet,LEFT_case-7918,2011-07-27 00:00:00+00:00,General,2011-07-18 14:40:29.864000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30373,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 11:25:01.702000+00:00 +Internet,LEFT_case-7918,2011-07-27 00:00:00+00:00,General,2011-07-18 14:40:29.864000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30372,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 11:25:36.548000+00:00 +Internet,LEFT_case-7920,2011-07-27 00:00:00+00:00,General,2011-07-01 00:00:00.020000+00:00,2011-07-27 00:00:00.020000+00:00,,Resource01,2011-06-01 00:00:00.020000+00:00,task-27779,Confirmation of receipt,complete,EMPTY,admin2,2011-07-11 08:25:30.438000+00:00 +Internet,LEFT_case-7922,2011-07-27 00:00:00+00:00,General,2011-07-20 10:04:31.199000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-27791,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 11:52:38.122000+00:00 +Internet,LEFT_case-7922,2011-07-27 00:00:00+00:00,General,2011-07-20 10:04:31.199000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30402,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 11:53:17.631000+00:00 +Internet,LEFT_case-7922,2011-07-27 00:00:00+00:00,General,2011-07-20 10:04:31.199000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30400,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 11:53:49.061000+00:00 +Internet,LEFT_case-7923,2011-07-27 00:00:00+00:00,General,2011-07-20 10:12:12.378000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-27802,Confirmation of receipt,complete,EMPTY,Resource01,2011-06-30 12:33:06.653000+00:00 +Internet,LEFT_case-7923,2011-07-27 00:00:00+00:00,General,2011-07-20 10:12:12.378000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30439,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 12:33:50.680000+00:00 +Internet,LEFT_case-7923,2011-07-27 00:00:00+00:00,General,2011-07-20 10:12:12.378000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30436,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 12:34:23.629000+00:00 +Internet,LEFT_case-7926,2011-10-25 01:06:40+00:00,General,2011-10-05 12:35:48.463000+00:00,2011-10-25 01:06:40.020000+00:00,,Resource04,2011-06-01 01:06:40.020000+00:00,task-27850,Confirmation of receipt,complete,Group 1,Resource04,2011-06-09 13:09:30.176000+00:00 +Internet,LEFT_case-7926,2011-10-25 01:06:40+00:00,General,2011-10-05 12:35:48.463000+00:00,2011-10-25 01:06:40.020000+00:00,,Resource04,2011-06-01 01:06:40.020000+00:00,task-28520,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-06-09 13:10:13.713000+00:00 +Internet,LEFT_case-7926,2011-10-25 01:06:40+00:00,General,2011-10-05 12:35:48.463000+00:00,2011-10-25 01:06:40.020000+00:00,,Resource04,2011-06-01 01:06:40.020000+00:00,task-28519,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-06-09 13:11:21.696000+00:00 +Internet,LEFT_case-7929,2011-07-29 00:00:00+00:00,General,2012-01-06 08:33:38.909000+00:00,2011-07-29 00:00:00.020000+00:00,,Resource14,2011-06-03 00:00:00.020000+00:00,task-27898,Confirmation of receipt,complete,EMPTY,Resource14,2011-07-12 13:51:55.251000+00:00 +Internet,LEFT_case-7929,2011-07-29 00:00:00+00:00,General,2012-01-06 08:33:38.909000+00:00,2011-07-29 00:00:00.020000+00:00,,Resource14,2011-06-03 00:00:00.020000+00:00,task-31766,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-07-12 13:59:41.646000+00:00 +Internet,LEFT_case-7929,2011-07-29 00:00:00+00:00,General,2012-01-06 08:33:38.909000+00:00,2011-07-29 00:00:00.020000+00:00,,Resource14,2011-06-03 00:00:00.020000+00:00,task-31760,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-07-12 14:07:30.278000+00:00 +Internet,LEFT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28148,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-16 10:29:10.512000+00:00 +Internet,LEFT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28750,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:32:05.724000+00:00 +Internet,LEFT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28752,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:38:06.334000+00:00 +Internet,LEFT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28755,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:40:22.888000+00:00 +Internet,LEFT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28757,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:49:05.232000+00:00 +Internet,LEFT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28764,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:50:46.469000+00:00 +Internet,LEFT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28749,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-27 13:48:16.435000+00:00 +Internet,LEFT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-29866,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:49:29.835000+00:00 +Internet,LEFT_case-7956,2011-07-19 00:00:00+00:00,General,2011-07-19 13:43:38.735000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource12,2011-05-24 00:00:00.020000+00:00,task-28203,Confirmation of receipt,complete,EMPTY,Resource12,2011-07-12 09:52:19.528000+00:00 +Internet,LEFT_case-7956,2011-07-19 00:00:00+00:00,General,2011-07-19 13:43:38.735000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource12,2011-05-24 00:00:00.020000+00:00,task-31684,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-07-12 09:53:25.523000+00:00 +Internet,LEFT_case-7956,2011-07-19 00:00:00+00:00,General,2011-07-19 13:43:38.735000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource12,2011-05-24 00:00:00.020000+00:00,task-31683,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-07-12 09:54:41.147000+00:00 +Internet,LEFT_case-7957,2011-07-19 00:00:00+00:00,General,2011-08-18 15:56:42.667000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-28222,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 09:53:18.435000+00:00 +Internet,LEFT_case-7957,2011-07-19 00:00:00+00:00,General,2011-08-18 15:56:42.667000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-29933,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 09:53:56.992000+00:00 +Internet,LEFT_case-7957,2011-07-19 00:00:00+00:00,General,2011-08-18 15:56:42.667000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-29932,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 09:54:26.182000+00:00 +Internet,LEFT_case-7958,2011-07-21 01:06:40+00:00,General,2011-07-20 07:59:15.627000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource05,2011-05-26 01:06:40.020000+00:00,task-28234,Confirmation of receipt,complete,EMPTY,Resource05,2011-06-09 12:28:41.018000+00:00 +Internet,LEFT_case-7958,2011-07-21 01:06:40+00:00,General,2011-07-20 07:59:15.627000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource05,2011-05-26 01:06:40.020000+00:00,task-28509,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-09 12:29:36.488000+00:00 +Internet,LEFT_case-7958,2011-07-21 01:06:40+00:00,General,2011-07-20 07:59:15.627000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource05,2011-05-26 01:06:40.020000+00:00,task-28510,T04 Determine confirmation of receipt,complete,EMPTY,Resource05,2011-06-09 12:40:21.057000+00:00 +Internet,LEFT_case-7960,2011-08-01 00:00:00+00:00,General,,2011-08-01 00:00:00.020000+00:00,,Resource12,2011-06-06 00:00:00.020000+00:00,task-28241,Confirmation of receipt,complete,EMPTY,Resource12,2011-07-26 09:59:34.888000+00:00 +Internet,LEFT_case-7960,2011-08-01 00:00:00+00:00,General,,2011-08-01 00:00:00.020000+00:00,,Resource12,2011-06-06 00:00:00.020000+00:00,task-33445,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-07-26 10:00:49.092000+00:00 +Internet,LEFT_case-7960,2011-08-01 00:00:00+00:00,General,,2011-08-01 00:00:00.020000+00:00,,Resource12,2011-06-06 00:00:00.020000+00:00,task-33442,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-07-26 10:02:17.423000+00:00 +Internet,LEFT_case-7961,2011-08-09 01:06:40+00:00,General,2011-08-12 15:10:50.100000+00:00,2011-08-09 01:06:40.020000+00:00,,Resource13,2011-05-30 01:06:40.020000+00:00,task-28250,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-16 10:54:19.134000+00:00 +Internet,LEFT_case-7961,2011-08-09 01:06:40+00:00,General,2011-08-12 15:10:50.100000+00:00,2011-08-09 01:06:40.020000+00:00,,Resource13,2011-05-30 01:06:40.020000+00:00,task-28769,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:55:11.383000+00:00 +Internet,LEFT_case-7961,2011-08-09 01:06:40+00:00,General,2011-08-12 15:10:50.100000+00:00,2011-08-09 01:06:40.020000+00:00,,Resource13,2011-05-30 01:06:40.020000+00:00,task-30058,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 11:43:19.875000+00:00 +Internet,LEFT_case-7961,2011-08-09 01:06:40+00:00,General,2011-08-12 15:10:50.100000+00:00,2011-08-09 01:06:40.020000+00:00,,Resource13,2011-05-30 01:06:40.020000+00:00,task-28768,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-28 11:44:08.985000+00:00 +Internet,LEFT_case-7976,2011-08-01 00:00:00+00:00,General,2011-07-20 10:20:56.199000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-28286,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 12:46:08.925000+00:00 +Internet,LEFT_case-7976,2011-08-01 00:00:00+00:00,General,2011-07-20 10:20:56.199000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-30461,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 12:46:32.845000+00:00 +Internet,LEFT_case-7976,2011-08-01 00:00:00+00:00,General,2011-07-20 10:20:56.199000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-30463,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 12:47:04.719000+00:00 +Internet,LEFT_case-7978,2011-07-25 00:00:00+00:00,General,2011-06-24 14:40:16.300000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource15,2011-05-30 00:00:00.020000+00:00,task-28298,Confirmation of receipt,complete,Group 1,Resource15,2011-06-17 10:51:58.423000+00:00 +Internet,LEFT_case-7978,2011-07-25 00:00:00+00:00,General,2011-06-24 14:40:16.300000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource15,2011-05-30 00:00:00.020000+00:00,task-28910,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-06-17 10:52:48.800000+00:00 +Internet,LEFT_case-7978,2011-07-25 00:00:00+00:00,General,2011-06-24 14:40:16.300000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource15,2011-05-30 00:00:00.020000+00:00,task-28909,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-06-17 10:53:18.877000+00:00 +Internet,LEFT_case-7980,2011-07-13 01:06:40+00:00,General,,2011-07-13 01:06:40.020000+00:00,Group 10,Resource53,2011-05-18 01:06:40.020000+00:00,task-28317,Confirmation of receipt,complete,Group 1,Resource05,2011-06-16 15:10:50.230000+00:00 +Internet,LEFT_case-7980,2011-07-13 01:06:40+00:00,General,,2011-07-13 01:06:40.020000+00:00,Group 10,Resource53,2011-05-18 01:06:40.020000+00:00,task-28822,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-16 17:43:58.860000+00:00 +Internet,LEFT_case-7980,2011-07-13 01:06:40+00:00,General,,2011-07-13 01:06:40.020000+00:00,Group 10,Resource53,2011-05-18 01:06:40.020000+00:00,task-28844,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-16 17:44:54.732000+00:00 +Internet,LEFT_case-7980,2011-07-13 01:06:40+00:00,General,,2011-07-13 01:06:40.020000+00:00,Group 10,Resource53,2011-05-18 01:06:40.020000+00:00,task-28845,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-21 09:10:30.832000+00:00 +Internet,LEFT_case-7980,2011-07-13 01:06:40+00:00,General,,2011-07-13 01:06:40.020000+00:00,Group 10,Resource53,2011-05-18 01:06:40.020000+00:00,task-28843,T03 Adjust confirmation of receipt,complete,Group 1,Resource05,2011-06-21 11:41:10.753000+00:00 +Internet,LEFT_case-7980,2011-07-13 01:06:40+00:00,General,,2011-07-13 01:06:40.020000+00:00,Group 10,Resource53,2011-05-18 01:06:40.020000+00:00,task-29300,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-06-21 11:41:51.657000+00:00 +Internet,LEFT_case-7981,2011-07-06 00:00:00+00:00,General,2011-07-08 15:19:47.775000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource15,2011-05-11 00:00:00.020000+00:00,task-28321,Confirmation of receipt,complete,Group 1,Resource15,2011-06-22 10:45:55.002000+00:00 +Internet,LEFT_case-7981,2011-07-06 00:00:00+00:00,General,2011-07-08 15:19:47.775000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource15,2011-05-11 00:00:00.020000+00:00,task-29464,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-06-22 11:06:12.747000+00:00 +Internet,LEFT_case-7981,2011-07-06 00:00:00+00:00,General,2011-07-08 15:19:47.775000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource15,2011-05-11 00:00:00.020000+00:00,task-29461,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-06-22 11:06:35.855000+00:00 +Internet,LEFT_case-7986,2011-07-26 00:00:00+00:00,General,2011-06-17 13:39:08.410000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource02,2011-05-31 00:00:00.020000+00:00,task-28336,Confirmation of receipt,complete,Group 1,admin2,2011-06-17 13:39:09.245000+00:00 +Internet,LEFT_case-7988,2011-07-26 00:00:00+00:00,General,2011-07-15 11:38:31.886000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource13,2011-05-31 00:00:00.020000+00:00,task-28354,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:22:31.482000+00:00 +Internet,LEFT_case-7988,2011-07-26 00:00:00+00:00,General,2011-07-15 11:38:31.886000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource13,2011-05-31 00:00:00.020000+00:00,task-30102,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:24:27.354000+00:00 +Internet,LEFT_case-7988,2011-07-26 00:00:00+00:00,General,2011-07-15 11:38:31.886000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource13,2011-05-31 00:00:00.020000+00:00,task-30101,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-28 12:25:04.502000+00:00 +Internet,LEFT_case-7988,2011-07-26 00:00:00+00:00,General,2011-07-15 11:38:31.886000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource13,2011-05-31 00:00:00.020000+00:00,task-30105,T11 Create document X request unlicensed,complete,Group 1,Resource13,2011-06-28 12:33:50.587000+00:00 +Internet,LEFT_case-7988,2011-07-26 00:00:00+00:00,General,2011-07-15 11:38:31.886000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource13,2011-05-31 00:00:00.020000+00:00,task-30107,T14 Determine document X request unlicensed,complete,EMPTY,Resource10,2011-06-30 15:13:24.822000+00:00 +Internet,LEFT_case-7990,2011-08-01 00:00:00+00:00,General,2011-07-20 10:34:03.921000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-28388,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-07 13:54:38.149000+00:00 +Internet,LEFT_case-7990,2011-08-01 00:00:00+00:00,General,2011-07-20 10:34:03.921000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-31323,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-07 13:55:44.681000+00:00 +Internet,LEFT_case-7990,2011-08-01 00:00:00+00:00,General,2011-07-20 10:34:03.921000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-31322,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-07 13:56:49.249000+00:00 +Internet,LEFT_case-7991,2011-08-02 00:00:00+00:00,General,2011-07-28 11:36:29.366000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource01,2011-06-07 00:00:00.020000+00:00,task-28395,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 15:02:42.489000+00:00 +Internet,LEFT_case-7991,2011-08-02 00:00:00+00:00,General,2011-07-28 11:36:29.366000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource01,2011-06-07 00:00:00.020000+00:00,task-30528,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 15:03:54.462000+00:00 +Internet,LEFT_case-7991,2011-08-02 00:00:00+00:00,General,2011-07-28 11:36:29.366000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource01,2011-06-07 00:00:00.020000+00:00,task-30527,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 15:04:28.205000+00:00 +Internet,LEFT_case-8011,2011-08-01 00:00:00+00:00,General,2011-07-20 10:47:01.655000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-28441,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 14:42:27.967000+00:00 +Internet,LEFT_case-8011,2011-08-01 00:00:00+00:00,General,2011-07-20 10:47:01.655000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-30508,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 14:43:05.822000+00:00 +Internet,LEFT_case-8011,2011-08-01 00:00:00+00:00,General,2011-07-20 10:47:01.655000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-30507,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 14:43:42.808000+00:00 +Internet,LEFT_case-8012,2011-08-03 00:00:00+00:00,General,2011-07-20 11:29:19.470000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-28454,Confirmation of receipt,complete,Group 1,Resource31,2011-07-04 10:12:40.719000+00:00 +Internet,LEFT_case-8012,2011-08-03 00:00:00+00:00,General,2011-07-20 11:29:19.470000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30687,T04 Determine confirmation of receipt,complete,Group 3,Resource31,2011-07-04 10:15:50.379000+00:00 +Internet,LEFT_case-8012,2011-08-03 00:00:00+00:00,General,2011-07-20 11:29:19.470000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30686,T06 Determine necessity of stop advice,complete,Group 1,Resource31,2011-07-04 10:17:15.429000+00:00 +Internet,LEFT_case-8014,2011-08-03 00:00:00+00:00,General,2011-07-20 11:36:05.108000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-28465,Confirmation of receipt,complete,Group 1,Resource31,2011-07-04 11:29:01.430000+00:00 +Internet,LEFT_case-8014,2011-08-03 00:00:00+00:00,General,2011-07-20 11:36:05.108000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30737,T04 Determine confirmation of receipt,complete,Group 3,Resource31,2011-07-04 11:32:34.009000+00:00 +Internet,LEFT_case-8014,2011-08-03 00:00:00+00:00,General,2011-07-20 11:36:05.108000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30734,T06 Determine necessity of stop advice,complete,Group 1,Resource31,2011-07-04 11:33:07.186000+00:00 +Internet,LEFT_case-8015,2011-08-03 00:00:00+00:00,General,2011-07-25 10:11:47.884000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-28466,Confirmation of receipt,complete,Group 1,Resource07,2011-07-05 08:56:27.430000+00:00 +Internet,LEFT_case-8015,2011-08-03 00:00:00+00:00,General,2011-07-25 10:11:47.884000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30896,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-07-05 08:58:02.540000+00:00 +Internet,LEFT_case-8015,2011-08-03 00:00:00+00:00,General,2011-07-25 10:11:47.884000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30895,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-07-05 08:59:30.379000+00:00 +Internet,LEFT_case-8016,2011-08-03 00:00:00+00:00,General,2011-07-27 08:35:00.199000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-28470,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-14 11:57:04.590000+00:00 +Internet,LEFT_case-8016,2011-08-03 00:00:00+00:00,General,2011-07-27 08:35:00.199000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-31994,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-14 11:57:59.754000+00:00 +Internet,LEFT_case-8016,2011-08-03 00:00:00+00:00,General,2011-07-27 08:35:00.199000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-31993,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-14 11:59:01.101000+00:00 +Internet,LEFT_case-8017,2011-08-03 00:00:00+00:00,General,2011-07-21 09:46:33.313000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-28474,Confirmation of receipt,complete,Group 1,Resource16,2011-07-04 15:32:23.852000+00:00 +Internet,LEFT_case-8017,2011-08-03 00:00:00+00:00,General,2011-07-21 09:46:33.313000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30839,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-04 15:33:54.454000+00:00 +Internet,LEFT_case-8017,2011-08-03 00:00:00+00:00,General,2011-07-21 09:46:33.313000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30838,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-04 15:35:05.342000+00:00 +Internet,LEFT_case-8018,2011-08-02 00:00:00+00:00,General,2011-07-20 11:00:36.494000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource11,2011-06-07 00:00:00.020000+00:00,task-28475,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 15:34:21.881000+00:00 +Internet,LEFT_case-8018,2011-08-02 00:00:00+00:00,General,2011-07-20 11:00:36.494000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource11,2011-06-07 00:00:00.020000+00:00,task-30551,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 15:35:01.003000+00:00 +Internet,LEFT_case-8018,2011-08-02 00:00:00+00:00,General,2011-07-20 11:00:36.494000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource11,2011-06-07 00:00:00.020000+00:00,task-30550,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 15:35:33.071000+00:00 +Internet,LEFT_case-8019,2011-08-04 00:00:00+00:00,General,2011-06-21 08:32:30.705000+00:00,2011-08-04 00:00:00.020000+00:00,Group 8,Resource01,2011-06-09 00:00:00.020000+00:00,task-28476,Confirmation of receipt,complete,Group 1,admin2,2011-06-21 08:32:35.088000+00:00 +Internet,LEFT_case-8020,2011-08-04 00:00:00+00:00,General,2011-07-25 08:11:56.678000+00:00,2011-08-04 00:00:00.020000+00:00,Group 8,Resource11,2011-06-09 00:00:00.020000+00:00,task-28486,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-07 09:31:06.477000+00:00 +Internet,LEFT_case-8020,2011-08-04 00:00:00+00:00,General,2011-07-25 08:11:56.678000+00:00,2011-08-04 00:00:00.020000+00:00,Group 8,Resource11,2011-06-09 00:00:00.020000+00:00,task-31244,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-07 09:31:54.384000+00:00 +Internet,LEFT_case-8020,2011-08-04 00:00:00+00:00,General,2011-07-25 08:11:56.678000+00:00,2011-08-04 00:00:00.020000+00:00,Group 8,Resource11,2011-06-09 00:00:00.020000+00:00,task-31243,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-07 09:32:28.272000+00:00 +Internet,LEFT_case-8021,2011-08-04 00:00:00+00:00,General,2011-08-02 11:20:35.789000+00:00,2011-08-04 00:00:00.020000+00:00,Group 5,Resource13,2011-06-09 00:00:00.020000+00:00,task-28492,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:53:07.115000+00:00 +Internet,LEFT_case-8021,2011-08-04 00:00:00+00:00,General,2011-08-02 11:20:35.789000+00:00,2011-08-04 00:00:00.020000+00:00,Group 5,Resource13,2011-06-09 00:00:00.020000+00:00,task-30115,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-28 12:54:03.737000+00:00 +Internet,LEFT_case-8021,2011-08-04 00:00:00+00:00,General,2011-08-02 11:20:35.789000+00:00,2011-08-04 00:00:00.020000+00:00,Group 5,Resource13,2011-06-09 00:00:00.020000+00:00,task-30116,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:55:03.585000+00:00 +Internet,LEFT_case-8047,2011-08-05 17:00:10.794000+00:00,General,,2011-08-05 17:00:10.794000+00:00,,Resource26,2011-06-10 17:00:10.794000+00:00,task-28617,Confirmation of receipt,complete,Group 1,admin2,2011-06-15 08:43:42.105000+00:00 +Internet,LEFT_case-8047,2011-08-05 17:00:10.794000+00:00,General,,2011-08-05 17:00:10.794000+00:00,,Resource26,2011-06-10 17:00:10.794000+00:00,task-28678,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-15 11:51:34.970000+00:00 +Internet,LEFT_case-8047,2011-08-05 17:00:10.794000+00:00,General,,2011-08-05 17:00:10.794000+00:00,,Resource26,2011-06-10 17:00:10.794000+00:00,task-28692,T04 Determine confirmation of receipt,complete,Group 3,Resource26,2011-06-15 20:55:28.037000+00:00 +Internet,LEFT_case-8047,2011-08-05 17:00:10.794000+00:00,General,,2011-08-05 17:00:10.794000+00:00,,Resource26,2011-06-10 17:00:10.794000+00:00,task-28725,T03 Adjust confirmation of receipt,complete,Group 1,Resource26,2011-06-15 20:55:48.260000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28634,Confirmation of receipt,complete,Group 1,admin2,2011-06-14 15:49:29.332000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28672,T04 Determine confirmation of receipt,complete,Group 3,admin2,2011-06-15 10:21:17.087000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28671,T06 Determine necessity of stop advice,complete,Group 1,test,2011-06-15 11:12:55.261000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28694,T08 Draft and send request for advice,complete,Group 1,test,2011-06-15 11:18:47.458000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28701,T09-3 Process or receive external advice from party 3,complete,Group 1,test,2011-06-15 11:23:17.210000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28696,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource26,2011-06-15 11:53:50.708000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28699,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource26,2011-06-15 11:54:09.601000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28700,T09-2 Process or receive external advice from party 2,complete,Group 1,Resource26,2011-06-15 12:04:01.557000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28697,T07-2 Draft intern advice aspect 2,complete,Group 15,test,2011-06-15 13:46:46.820000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28698,T07-4 Draft internal advice to hold for type 4,complete,Group 12,Resource26,2011-06-16 15:48:58.173000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28831,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-16 15:49:43.934000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28833,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-16 15:50:32.990000+00:00 +Internet,LEFT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28834,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-16 15:51:57.591000+00:00 +Internet,LEFT_case-8068,2011-08-09 10:08:29.011000+00:00,General,2011-10-24 12:38:10.339000+00:00,2011-08-09 10:08:29.011000+00:00,Group 5,Resource14,2011-06-14 10:08:29.011000+00:00,task-28647,Confirmation of receipt,complete,Group 1,Resource14,2011-07-05 08:44:33.356000+00:00 +Internet,LEFT_case-8068,2011-08-09 10:08:29.011000+00:00,General,2011-10-24 12:38:10.339000+00:00,2011-08-09 10:08:29.011000+00:00,Group 5,Resource14,2011-06-14 10:08:29.011000+00:00,task-30887,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-07-05 08:45:08.567000+00:00 +Internet,LEFT_case-8068,2011-08-09 10:08:29.011000+00:00,General,2011-10-24 12:38:10.339000+00:00,2011-08-09 10:08:29.011000+00:00,Group 5,Resource14,2011-06-14 10:08:29.011000+00:00,task-30889,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-07-05 08:48:20.709000+00:00 +Internet,LEFT_case-8077,2011-08-09 01:06:40+00:00,General,2011-08-08 00:00:00.020000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource04,2011-06-14 01:06:40.020000+00:00,task-28662,Confirmation of receipt,complete,Group 1,Resource04,2011-06-22 08:45:07.133000+00:00 +Internet,LEFT_case-8077,2011-08-09 01:06:40+00:00,General,2011-08-08 00:00:00.020000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource04,2011-06-14 01:06:40.020000+00:00,task-29416,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-06-22 08:45:44.302000+00:00 +Internet,LEFT_case-8077,2011-08-09 01:06:40+00:00,General,2011-08-08 00:00:00.020000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource04,2011-06-14 01:06:40.020000+00:00,task-29415,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-06-22 08:50:26.977000+00:00 +Internet,LEFT_case-8079,2011-08-31 14:45:00.957000+00:00,General,,2011-08-31 14:45:00.957000+00:00,,Resource26,2011-06-14 14:45:00.957000+00:00,task-28666,Confirmation of receipt,complete,Group 1,Resource26,2011-06-15 13:42:34.168000+00:00 +Internet,LEFT_case-8079,2011-08-31 14:45:00.957000+00:00,General,,2011-08-31 14:45:00.957000+00:00,,Resource26,2011-06-14 14:45:00.957000+00:00,task-28731,T03 Adjust confirmation of receipt,complete,Group 1,Resource26,2011-06-15 21:01:53.785000+00:00 +Internet,LEFT_case-8081,2011-08-09 01:06:40+00:00,General,2011-07-25 09:12:43.992000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-28667,Confirmation of receipt,complete,EMPTY,Resource16,2011-07-05 13:29:10.018000+00:00 +Internet,LEFT_case-8081,2011-08-09 01:06:40+00:00,General,2011-07-25 09:12:43.992000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31064,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-05 13:30:01.661000+00:00 +Internet,LEFT_case-8081,2011-08-09 01:06:40+00:00,General,2011-07-25 09:12:43.992000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31063,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-05 13:31:04.022000+00:00 +Internet,LEFT_case-8082,2011-08-09 01:06:40+00:00,General,2011-07-25 08:20:52.864000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-28668,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-13 09:53:25.176000+00:00 +Internet,LEFT_case-8082,2011-08-09 01:06:40+00:00,General,2011-07-25 08:20:52.864000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31867,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-13 09:54:09.035000+00:00 +Internet,LEFT_case-8082,2011-08-09 01:06:40+00:00,General,2011-07-25 08:20:52.864000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31866,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-13 09:54:46.981000+00:00 +Internet,LEFT_case-8083,2011-08-09 01:06:40+00:00,General,2011-07-25 08:38:59.632000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-28669,Confirmation of receipt,complete,EMPTY,Resource16,2011-07-05 14:12:57.409000+00:00 +Internet,LEFT_case-8083,2011-08-09 01:06:40+00:00,General,2011-07-25 08:38:59.632000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31086,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-05 14:13:56.984000+00:00 +Internet,LEFT_case-8083,2011-08-09 01:06:40+00:00,General,2011-07-25 08:38:59.632000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31085,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-05 14:14:39.156000+00:00 +Internet,LEFT_case-8084,2011-08-09 01:06:40+00:00,General,2011-07-25 08:51:37.539000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-28673,Confirmation of receipt,complete,EMPTY,Resource16,2011-07-08 09:26:23.650000+00:00 +Internet,LEFT_case-8084,2011-08-09 01:06:40+00:00,General,2011-07-25 08:51:37.539000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31391,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-08 09:27:23.002000+00:00 +Internet,LEFT_case-8084,2011-08-09 01:06:40+00:00,General,2011-07-25 08:51:37.539000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31390,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-08 09:28:11.385000+00:00 +Internet,LEFT_case-8092,2011-08-05 01:06:40+00:00,General,2011-07-13 15:30:24.198000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource13,2011-06-10 01:06:40.020000+00:00,task-28686,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-22 13:47:16.381000+00:00 +Internet,LEFT_case-8092,2011-08-05 01:06:40+00:00,General,2011-07-13 15:30:24.198000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource13,2011-06-10 01:06:40.020000+00:00,task-29523,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-22 13:51:58.810000+00:00 +Internet,LEFT_case-8092,2011-08-05 01:06:40+00:00,General,2011-07-13 15:30:24.198000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource13,2011-06-10 01:06:40.020000+00:00,task-29525,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-22 13:53:38.453000+00:00 +Internet,LEFT_case-8093,2011-09-21 01:06:40+00:00,General,2011-09-05 11:45:11.852000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-28688,Confirmation of receipt,complete,Group 1,Resource04,2011-06-22 10:31:37.672000+00:00 +Internet,LEFT_case-8093,2011-09-21 01:06:40+00:00,General,2011-09-05 11:45:11.852000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-29448,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-06-22 10:32:41.570000+00:00 +Internet,LEFT_case-8093,2011-09-21 01:06:40+00:00,General,2011-09-05 11:45:11.852000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-29447,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-06-22 15:11:01.976000+00:00 +Desk,LEFT_case-8098,2011-07-21 01:06:40+00:00,General,2011-08-23 10:00:13.100000+00:00,2011-07-21 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-28713,Confirmation of receipt,complete,EMPTY,Resource13,2011-07-04 11:28:30.205000+00:00 +Desk,LEFT_case-8098,2011-07-21 01:06:40+00:00,General,2011-08-23 10:00:13.100000+00:00,2011-07-21 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-30735,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-07-04 11:32:00.667000+00:00 +Desk,LEFT_case-8098,2011-07-21 01:06:40+00:00,General,2011-08-23 10:00:13.100000+00:00,2011-07-21 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-30732,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-07-04 11:33:04.137000+00:00 +Internet,LEFT_case-8099,2011-08-10 15:16:24.392000+00:00,Customer contact,2011-08-09 14:37:32.274000+00:00,2011-08-10 15:16:24.392000+00:00,,admin3,2011-06-15 15:16:24.392000+00:00,task-28714,Confirmation of receipt,complete,EMPTY,admin2,2011-08-09 14:37:33.620000+00:00 +Internet,LEFT_case-8100,2011-05-27 01:06:40+00:00,General,2011-06-24 10:10:32.020000+00:00,2011-05-27 01:06:40.020000+00:00,Group 5,Resource06,2011-04-01 01:06:40.020000+00:00,task-28715,Confirmation of receipt,complete,Group 1,Resource06,2011-06-20 09:03:00.459000+00:00 +Internet,LEFT_case-8100,2011-05-27 01:06:40+00:00,General,2011-06-24 10:10:32.020000+00:00,2011-05-27 01:06:40.020000+00:00,Group 5,Resource06,2011-04-01 01:06:40.020000+00:00,task-29094,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-06-20 09:19:53.648000+00:00 +Internet,LEFT_case-8100,2011-05-27 01:06:40+00:00,General,2011-06-24 10:10:32.020000+00:00,2011-05-27 01:06:40.020000+00:00,Group 5,Resource06,2011-04-01 01:06:40.020000+00:00,task-29086,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-06-20 09:20:34.147000+00:00 +Internet,LEFT_case-8102,2011-09-01 01:06:40+00:00,General,2011-08-26 14:51:04.144000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-28717,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:30:22.026000+00:00 +Internet,LEFT_case-8102,2011-09-01 01:06:40+00:00,General,2011-08-26 14:51:04.144000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-29837,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:32:28.618000+00:00 +Internet,LEFT_case-8102,2011-09-01 01:06:40+00:00,General,2011-08-26 14:51:04.144000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-29836,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-27 13:32:52.784000+00:00 +Desk,LEFT_case-8104,2011-08-10 16:26:53.432000+00:00,General,2011-07-14 09:04:09.877000+00:00,2011-08-10 16:26:53.432000+00:00,Group 7,Resource35,2011-06-15 16:26:53.432000+00:00,task-28719,Confirmation of receipt,complete,EMPTY,admin2,2011-07-14 09:04:11.137000+00:00 +Internet,LEFT_case-8105,2011-08-10 16:27:56.852000+00:00,General,2011-08-12 11:34:09.085000+00:00,2011-08-10 16:27:56.852000+00:00,Group 5,Resource12,2011-06-15 16:31:28.724000+00:00,task-28720,Confirmation of receipt,complete,EMPTY,Resource12,2011-07-21 11:06:02.203000+00:00 +Internet,LEFT_case-8105,2011-08-10 16:27:56.852000+00:00,General,2011-08-12 11:34:09.085000+00:00,2011-08-10 16:27:56.852000+00:00,Group 5,Resource12,2011-06-15 16:31:28.724000+00:00,task-32988,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-07-21 11:20:37.912000+00:00 +Internet,LEFT_case-8105,2011-08-10 16:27:56.852000+00:00,General,2011-08-12 11:34:09.085000+00:00,2011-08-10 16:27:56.852000+00:00,Group 5,Resource12,2011-06-15 16:31:28.724000+00:00,task-32984,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-07-21 11:22:40.287000+00:00 +Internet,LEFT_case-8131,2011-08-12 01:06:40+00:00,General,2011-07-25 09:18:52.518000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-28883,Confirmation of receipt,complete,Group 1,Resource16,2011-07-08 10:00:07.989000+00:00 +Internet,LEFT_case-8131,2011-08-12 01:06:40+00:00,General,2011-07-25 09:18:52.518000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-31415,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-08 10:01:27.763000+00:00 +Internet,LEFT_case-8131,2011-08-12 01:06:40+00:00,General,2011-07-25 09:18:52.518000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-31414,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-08 10:02:15.183000+00:00 +Internet,LEFT_case-8132,2011-08-12 01:06:40+00:00,General,2011-07-27 08:41:31.032000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-28887,Confirmation of receipt,complete,Group 1,Resource16,2011-07-05 12:10:25.728000+00:00 +Internet,LEFT_case-8132,2011-08-12 01:06:40+00:00,General,2011-07-27 08:41:31.032000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-31034,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-05 12:11:23.993000+00:00 +Internet,LEFT_case-8132,2011-08-12 01:06:40+00:00,General,2011-07-27 08:41:31.032000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-31033,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-05 12:12:15.069000+00:00 +Internet,LEFT_case-8133,2011-08-12 01:06:40+00:00,General,2011-07-27 08:57:47.557000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-28894,Confirmation of receipt,complete,Group 1,Resource16,2011-07-05 11:17:08.904000+00:00 +Internet,LEFT_case-8133,2011-08-12 01:06:40+00:00,General,2011-07-27 08:57:47.557000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-30965,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-05 11:18:00.678000+00:00 +Internet,LEFT_case-8133,2011-08-12 01:06:40+00:00,General,2011-07-27 08:57:47.557000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-30964,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-05 11:19:09.878000+00:00 +Internet,LEFT_case-8135,2011-08-12 01:06:40+00:00,General,2011-07-27 09:01:43.489000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-28902,Confirmation of receipt,complete,Group 1,Resource07,2011-07-05 10:08:44.375000+00:00 +Internet,LEFT_case-8135,2011-08-12 01:06:40+00:00,General,2011-07-27 09:01:43.489000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-30937,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-07-05 10:25:35.428000+00:00 +Internet,LEFT_case-8135,2011-08-12 01:06:40+00:00,General,2011-07-27 09:01:43.489000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-30934,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-07-05 10:27:08.266000+00:00 +Desk,LEFT_case-8136,2011-08-12 01:06:40+00:00,General,2011-08-01 15:11:23.676000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource09,2011-06-17 01:06:40.020000+00:00,task-28903,Confirmation of receipt,complete,Group 1,Resource09,2011-07-01 10:39:07.949000+00:00 +Desk,LEFT_case-8136,2011-08-12 01:06:40+00:00,General,2011-08-01 15:11:23.676000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource09,2011-06-17 01:06:40.020000+00:00,task-30582,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-01 10:40:21.914000+00:00 +Desk,LEFT_case-8136,2011-08-12 01:06:40+00:00,General,2011-08-01 15:11:23.676000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource09,2011-06-17 01:06:40.020000+00:00,task-30581,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-01 10:41:08.528000+00:00 +Internet,LEFT_case-8137,2011-08-10 01:06:40+00:00,General,2011-08-10 16:23:05.862000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource13,2011-06-15 01:06:40.020000+00:00,task-28904,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 12:55:24.837000+00:00 +Internet,LEFT_case-8137,2011-08-10 01:06:40+00:00,General,2011-08-10 16:23:05.862000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource13,2011-06-15 01:06:40.020000+00:00,task-29812,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 12:56:49.205000+00:00 +Internet,LEFT_case-8137,2011-08-10 01:06:40+00:00,General,2011-08-10 16:23:05.862000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource13,2011-06-15 01:06:40.020000+00:00,task-29811,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-27 12:57:49.676000+00:00 +Internet,LEFT_case-8138,2011-08-12 01:06:40+00:00,General,2011-07-27 09:55:01.014000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-28907,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-14 12:32:42.453000+00:00 +Internet,LEFT_case-8138,2011-08-12 01:06:40+00:00,General,2011-07-27 09:55:01.014000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-32011,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-14 12:33:48.564000+00:00 +Internet,LEFT_case-8138,2011-08-12 01:06:40+00:00,General,2011-07-27 09:55:01.014000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-32010,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-14 12:34:40.687000+00:00 +Desk,LEFT_case-8141,2011-08-12 01:06:40+00:00,General,2011-12-09 15:08:00.018000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-29031,Confirmation of receipt,complete,EMPTY,Resource06,2011-07-12 14:53:32.546000+00:00 +Desk,LEFT_case-8141,2011-08-12 01:06:40+00:00,General,2011-12-09 15:08:00.018000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-31799,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-21 10:28:10.022000+00:00 +Desk,LEFT_case-8141,2011-08-12 01:06:40+00:00,General,2011-12-09 15:08:00.018000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-45877,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-09 08:53:24.370000+00:00 +Desk,LEFT_case-8142,2011-08-12 15:53:34.450000+00:00,General,2011-07-29 15:08:16.210000+00:00,2011-08-12 15:53:34.450000+00:00,Group 5,Resource09,2011-06-17 15:53:34.450000+00:00,task-29050,Confirmation of receipt,complete,Group 1,Resource09,2011-07-06 15:04:32.166000+00:00 +Desk,LEFT_case-8142,2011-08-12 15:53:34.450000+00:00,General,2011-07-29 15:08:16.210000+00:00,2011-08-12 15:53:34.450000+00:00,Group 5,Resource09,2011-06-17 15:53:34.450000+00:00,task-31200,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-06 15:05:12.160000+00:00 +Desk,LEFT_case-8142,2011-08-12 15:53:34.450000+00:00,General,2011-07-29 15:08:16.210000+00:00,2011-08-12 15:53:34.450000+00:00,Group 5,Resource09,2011-06-17 15:53:34.450000+00:00,task-31202,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-06 15:07:01.336000+00:00 +Internet,LEFT_case-8179,2011-08-12 01:06:40+00:00,General,2011-08-12 14:08:34.496000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource13,2011-06-17 01:06:40.020000+00:00,task-29084,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-29 10:07:01.086000+00:00 +Internet,LEFT_case-8179,2011-08-12 01:06:40+00:00,General,2011-08-12 14:08:34.496000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource13,2011-06-17 01:06:40.020000+00:00,task-30205,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-29 10:09:09.227000+00:00 +Internet,LEFT_case-8179,2011-08-12 01:06:40+00:00,General,2011-08-12 14:08:34.496000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource13,2011-06-17 01:06:40.020000+00:00,task-30207,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-29 10:11:22.480000+00:00 +Internet,LEFT_case-8180,2011-08-14 01:06:40+00:00,General,2011-07-27 09:16:35.299000+00:00,2011-08-14 01:06:40.020000+00:00,Group 8,Resource11,2011-06-19 01:06:40.020000+00:00,task-29098,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-07 11:20:55.087000+00:00 +Internet,LEFT_case-8180,2011-08-14 01:06:40+00:00,General,2011-07-27 09:16:35.299000+00:00,2011-08-14 01:06:40.020000+00:00,Group 8,Resource11,2011-06-19 01:06:40.020000+00:00,task-31280,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-07 11:21:44.747000+00:00 +Internet,LEFT_case-8180,2011-08-14 01:06:40+00:00,General,2011-07-27 09:16:35.299000+00:00,2011-08-14 01:06:40.020000+00:00,Group 8,Resource11,2011-06-19 01:06:40.020000+00:00,task-31278,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-07 11:22:38.614000+00:00 +Desk,LEFT_case-8183,2011-09-06 01:06:40+00:00,General,2011-08-30 09:42:28.600000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource06,2011-05-31 01:06:40.020000+00:00,task-29109,Confirmation of receipt,complete,Group 1,Resource06,2011-06-27 09:47:40.274000+00:00 +Desk,LEFT_case-8183,2011-09-06 01:06:40+00:00,General,2011-08-30 09:42:28.600000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource06,2011-05-31 01:06:40.020000+00:00,task-29784,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-06-27 13:03:24.786000+00:00 +Desk,LEFT_case-8183,2011-09-06 01:06:40+00:00,General,2011-08-30 09:42:28.600000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource06,2011-05-31 01:06:40.020000+00:00,task-29759,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-06-27 13:07:18.920000+00:00 +Desk,LEFT_case-8184,2011-09-27 01:06:40+00:00,General,2011-09-20 16:08:58.791000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource23,2011-05-31 01:06:40.020000+00:00,task-29138,Confirmation of receipt,complete,Group 1,Resource23,2011-06-28 12:49:13.915000+00:00 +Desk,LEFT_case-8184,2011-09-27 01:06:40+00:00,General,2011-09-20 16:08:58.791000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource23,2011-05-31 01:06:40.020000+00:00,task-30110,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-06-28 12:50:39.203000+00:00 +Desk,LEFT_case-8184,2011-09-27 01:06:40+00:00,General,2011-09-20 16:08:58.791000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource23,2011-05-31 01:06:40.020000+00:00,task-30109,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-07-01 11:19:09.308000+00:00 +Internet,LEFT_case-8186,2011-08-15 01:06:40+00:00,General,,2011-08-15 01:06:40.020000+00:00,,Resource26,2011-06-20 01:06:40.020000+00:00,task-29167,Confirmation of receipt,complete,Group 1,Resource26,2011-06-21 22:30:05.950000+00:00 +Internet,LEFT_case-8198,2011-08-16 01:06:40+00:00,General,2011-07-28 07:24:34.315000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-29263,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-13 13:12:58.533000+00:00 +Internet,LEFT_case-8198,2011-08-16 01:06:40+00:00,General,2011-07-28 07:24:34.315000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-31924,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-13 13:13:41.158000+00:00 +Internet,LEFT_case-8198,2011-08-16 01:06:40+00:00,General,2011-07-28 07:24:34.315000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-31923,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-13 13:14:15.882000+00:00 +Internet,LEFT_case-8199,2011-08-16 01:06:40+00:00,General,2011-08-10 14:38:57.142000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-29294,Confirmation of receipt,complete,Group 1,Resource04,2011-06-22 14:01:31.637000+00:00 +Internet,LEFT_case-8199,2011-08-16 01:06:40+00:00,General,2011-08-10 14:38:57.142000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-29543,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-06-22 14:02:10.143000+00:00 +Internet,LEFT_case-8199,2011-08-16 01:06:40+00:00,General,2011-08-10 14:38:57.142000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-29542,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-06-24 08:52:19.621000+00:00 +Internet,LEFT_case-8232,2011-08-19 10:33:04.860000+00:00,General,2011-08-17 10:06:11.016000+00:00,2011-08-19 10:33:04.860000+00:00,Group 5,Resource05,2011-06-24 10:33:04.860000+00:00,task-29671,Confirmation of receipt,complete,EMPTY,Resource05,2011-07-04 13:52:06.292000+00:00 +Internet,LEFT_case-8232,2011-08-19 10:33:04.860000+00:00,General,2011-08-17 10:06:11.016000+00:00,2011-08-19 10:33:04.860000+00:00,Group 5,Resource05,2011-06-24 10:33:04.860000+00:00,task-30789,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-07-04 14:06:54.393000+00:00 +Internet,LEFT_case-8232,2011-08-19 10:33:04.860000+00:00,General,2011-08-17 10:06:11.016000+00:00,2011-08-19 10:33:04.860000+00:00,Group 5,Resource05,2011-06-24 10:33:04.860000+00:00,task-30807,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-04 14:13:17.216000+00:00 +Internet,LEFT_case-8234,2011-08-19 11:23:22.882000+00:00,General,2011-11-16 10:16:19.364000+00:00,2011-08-19 11:23:22.882000+00:00,Group 5,Resource14,2011-06-24 11:23:22.882000+00:00,task-29675,Confirmation of receipt,complete,EMPTY,Resource14,2011-08-26 10:38:57.113000+00:00 +Internet,LEFT_case-8234,2011-08-19 11:23:22.882000+00:00,General,2011-11-16 10:16:19.364000+00:00,2011-08-19 11:23:22.882000+00:00,Group 5,Resource14,2011-06-24 11:23:22.882000+00:00,task-37189,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-26 10:39:45.761000+00:00 +Internet,LEFT_case-8234,2011-08-19 11:23:22.882000+00:00,General,2011-11-16 10:16:19.364000+00:00,2011-08-19 11:23:22.882000+00:00,Group 5,Resource14,2011-06-24 11:23:22.882000+00:00,task-37188,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-26 10:40:37.718000+00:00 +Internet,LEFT_case-8259,2011-08-17 01:06:40+00:00,General,2011-08-15 12:57:08.915000+00:00,2011-08-17 01:06:40.020000+00:00,Group 5,Resource12,2011-06-22 01:06:40.020000+00:00,task-29770,Confirmation of receipt,complete,EMPTY,Resource12,2011-08-08 14:44:02.220000+00:00 +Internet,LEFT_case-8259,2011-08-17 01:06:40+00:00,General,2011-08-15 12:57:08.915000+00:00,2011-08-17 01:06:40.020000+00:00,Group 5,Resource12,2011-06-22 01:06:40.020000+00:00,task-35687,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-08-08 14:45:33.258000+00:00 +Internet,LEFT_case-8259,2011-08-17 01:06:40+00:00,General,2011-08-15 12:57:08.915000+00:00,2011-08-17 01:06:40.020000+00:00,Group 5,Resource12,2011-06-22 01:06:40.020000+00:00,task-35686,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-08 14:46:44.947000+00:00 +Internet,LEFT_case-8261,2011-08-17 01:06:40+00:00,General,2011-07-28 07:29:13.253000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-29785,Confirmation of receipt,complete,Group 1,Resource27,2011-06-27 10:50:43.177000+00:00 +Internet,LEFT_case-8261,2011-08-17 01:06:40+00:00,General,2011-07-28 07:29:13.253000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-29787,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-14 13:58:06.481000+00:00 +Internet,LEFT_case-8261,2011-08-17 01:06:40+00:00,General,2011-07-28 07:29:13.253000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32050,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-14 14:00:10.399000+00:00 +Internet,LEFT_case-8263,2011-08-17 01:06:40+00:00,General,2011-08-01 07:58:15.718000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-29791,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 09:07:08.407000+00:00 +Internet,LEFT_case-8263,2011-08-17 01:06:40+00:00,General,2011-08-01 07:58:15.718000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32553,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 09:08:01.275000+00:00 +Internet,LEFT_case-8263,2011-08-17 01:06:40+00:00,General,2011-08-01 07:58:15.718000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32552,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 09:08:41.227000+00:00 +Internet,LEFT_case-8264,2011-08-17 01:06:40+00:00,General,2011-07-28 07:33:28.173000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-29792,Confirmation of receipt,complete,Group 1,Resource27,2011-06-27 11:17:25.441000+00:00 +Internet,LEFT_case-8264,2011-08-17 01:06:40+00:00,General,2011-07-28 07:33:28.173000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32072,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-14 14:32:28.491000+00:00 +Internet,LEFT_case-8264,2011-08-17 01:06:40+00:00,General,2011-07-28 07:33:28.173000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-29794,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-14 14:33:17.387000+00:00 +Internet,LEFT_case-8265,2011-08-18 01:06:40+00:00,General,2011-08-01 08:08:24.381000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-29798,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 09:19:32.759000+00:00 +Internet,LEFT_case-8265,2011-08-18 01:06:40+00:00,General,2011-08-01 08:08:24.381000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-32578,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 09:20:18.700000+00:00 +Internet,LEFT_case-8265,2011-08-18 01:06:40+00:00,General,2011-08-01 08:08:24.381000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-32576,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 09:20:53.838000+00:00 +Internet,LEFT_case-8266,2011-08-18 01:06:40+00:00,General,2011-08-01 08:16:20.110000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-29803,Confirmation of receipt,complete,Group 1,Resource27,2011-06-27 11:48:49.676000+00:00 +Internet,LEFT_case-8266,2011-08-18 01:06:40+00:00,General,2011-08-01 08:16:20.110000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-32611,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 10:02:53.044000+00:00 +Internet,LEFT_case-8266,2011-08-18 01:06:40+00:00,General,2011-08-01 08:16:20.110000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-29805,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 10:03:36.415000+00:00 +Internet,LEFT_case-8267,2011-08-18 01:06:40+00:00,Customer contact,2011-06-24 00:00:00.020000+00:00,2011-08-18 01:06:40.020000+00:00,,admin3,2011-06-24 01:06:40.020000+00:00,task-29806,Confirmation of receipt,complete,Group 1,Resource27,2011-06-27 12:06:24.059000+00:00 +Internet,LEFT_case-8267,2011-08-18 01:06:40+00:00,Customer contact,2011-06-24 00:00:00.020000+00:00,2011-08-18 01:06:40.020000+00:00,,admin3,2011-06-24 01:06:40.020000+00:00,task-29808,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-06-27 12:14:44.515000+00:00 +Internet,LEFT_case-8269,2011-08-18 01:06:40+00:00,General,2011-07-14 09:01:39.196000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource18,2011-06-23 01:06:40.020000+00:00,task-29864,Confirmation of receipt,complete,EMPTY,admin2,2011-07-14 09:01:43.571000+00:00 +Internet,LEFT_case-8295,2011-08-19 01:06:40+00:00,General,,2011-08-19 01:06:40.020000+00:00,Group 5,Resource14,2011-06-24 01:06:40.020000+00:00,task-29998,Confirmation of receipt,complete,Group 1,Resource27,2011-06-28 11:11:03.646000+00:00 +Internet,LEFT_case-8295,2011-08-19 01:06:40+00:00,General,,2011-08-19 01:06:40.020000+00:00,Group 5,Resource14,2011-06-24 01:06:40.020000+00:00,task-31655,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-07-11 16:04:37.109000+00:00 +Internet,LEFT_case-8295,2011-08-19 01:06:40+00:00,General,,2011-08-19 01:06:40.020000+00:00,Group 5,Resource14,2011-06-24 01:06:40.020000+00:00,task-30016,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-07-11 16:05:11.701000+00:00 +Internet,LEFT_case-8297,2011-10-04 01:06:40+00:00,General,2011-09-26 14:55:43.297000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource04,2011-06-28 01:06:40.020000+00:00,task-30064,Confirmation of receipt,complete,Group 1,Resource18,2011-06-30 14:12:33.519000+00:00 +Internet,LEFT_case-8297,2011-10-04 01:06:40+00:00,General,2011-09-26 14:55:43.297000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource04,2011-06-28 01:06:40.020000+00:00,task-30502,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-06-30 14:13:35.292000+00:00 +Internet,LEFT_case-8297,2011-10-04 01:06:40+00:00,General,2011-09-26 14:55:43.297000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource04,2011-06-28 01:06:40.020000+00:00,task-30501,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-07-08 11:11:43.094000+00:00 +Internet,LEFT_case-8318,2011-08-04 01:06:40+00:00,General,2011-08-15 15:58:15.067000+00:00,2011-08-04 01:06:40.020000+00:00,Group 5,Resource05,2011-06-09 01:06:40.020000+00:00,task-30279,Confirmation of receipt,complete,Group 1,Resource05,2011-07-04 09:52:56.673000+00:00 +Internet,LEFT_case-8318,2011-08-04 01:06:40+00:00,General,2011-08-15 15:58:15.067000+00:00,2011-08-04 01:06:40.020000+00:00,Group 5,Resource05,2011-06-09 01:06:40.020000+00:00,task-30666,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-07-04 09:55:15.654000+00:00 +Internet,LEFT_case-8318,2011-08-04 01:06:40+00:00,General,2011-08-15 15:58:15.067000+00:00,2011-08-04 01:06:40.020000+00:00,Group 5,Resource05,2011-06-09 01:06:40.020000+00:00,task-30667,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-04 09:55:56.746000+00:00 +Internet,LEFT_case-8318,2011-08-04 01:06:40+00:00,General,2011-08-15 15:58:15.067000+00:00,2011-08-04 01:06:40.020000+00:00,Group 5,Resource05,2011-06-09 01:06:40.020000+00:00,task-30669,T03 Adjust confirmation of receipt,complete,Group 1,Resource05,2011-07-04 09:57:27.039000+00:00 +Internet,LEFT_case-8318,2011-08-04 01:06:40+00:00,General,2011-08-15 15:58:15.067000+00:00,2011-08-04 01:06:40.020000+00:00,Group 5,Resource05,2011-06-09 01:06:40.020000+00:00,task-30671,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-04 10:04:34.230000+00:00 +Internet,LEFT_case-8320,2011-08-05 01:06:40+00:00,General,2011-09-19 08:51:33.367000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource09,2011-06-10 01:06:40.020000+00:00,task-30289,Confirmation of receipt,complete,EMPTY,Resource09,2011-07-26 09:19:50.943000+00:00 +Internet,LEFT_case-8320,2011-08-05 01:06:40+00:00,General,2011-09-19 08:51:33.367000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource09,2011-06-10 01:06:40.020000+00:00,task-33440,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-26 14:12:15.038000+00:00 +Internet,LEFT_case-8320,2011-08-05 01:06:40+00:00,General,2011-09-19 08:51:33.367000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource09,2011-06-10 01:06:40.020000+00:00,task-33499,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-26 14:13:26.300000+00:00 +Desk,LEFT_case-8321,2011-08-16 01:06:40+00:00,General,2011-07-27 09:20:19.791000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-30291,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-14 14:52:03.390000+00:00 +Desk,LEFT_case-8321,2011-08-16 01:06:40+00:00,General,2011-07-27 09:20:19.791000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-32095,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-14 15:00:23.744000+00:00 +Desk,LEFT_case-8321,2011-08-16 01:06:40+00:00,General,2011-07-27 09:20:19.791000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-32094,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-14 15:02:37.155000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-30300,Confirmation of receipt,complete,Group 1,Resource05,2011-07-04 12:37:42.658000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-30782,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:31:06.192000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34604,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-01 09:47:40.251000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34605,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:48:33.074000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34608,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:49:15.388000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34611,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:50:36.984000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34614,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:52:36.664000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34616,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:54:16.734000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34618,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:55:09.509000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34620,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:56:10.861000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34623,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:57:19.958000+00:00 +Internet,LEFT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34626,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:58:48.159000+00:00 +Internet,LEFT_case-8342,2011-08-24 01:06:40+00:00,General,2011-07-13 09:48:49.381000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource14,2011-06-29 01:06:40.020000+00:00,task-30386,Confirmation of receipt,complete,Group 1,Resource27,2011-06-30 11:31:44.747000+00:00 +Internet,LEFT_case-8342,2011-08-24 01:06:40+00:00,General,2011-07-13 09:48:49.381000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource14,2011-06-29 01:06:40.020000+00:00,task-31267,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-07-07 10:57:46.754000+00:00 +Internet,LEFT_case-8342,2011-08-24 01:06:40+00:00,General,2011-07-13 09:48:49.381000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource14,2011-06-29 01:06:40.020000+00:00,task-30393,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-07-07 10:58:51.116000+00:00 +Internet,LEFT_case-8344,2011-08-22 01:06:40+00:00,General,2011-08-22 15:03:08.467000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-30434,Confirmation of receipt,complete,Group 1,Resource27,2011-06-30 12:37:49.667000+00:00 +Internet,LEFT_case-8344,2011-08-22 01:06:40+00:00,General,2011-08-22 15:03:08.467000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-30456,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-07-05 08:42:43.888000+00:00 +Internet,LEFT_case-8344,2011-08-22 01:06:40+00:00,General,2011-08-22 15:03:08.467000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-30880,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-05 08:43:22.152000+00:00 +Internet,LEFT_case-8363,2011-08-22 01:06:40+00:00,General,2011-09-06 10:31:34.113000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-30617,Confirmation of receipt,complete,EMPTY,Resource05,2011-07-05 13:13:13.848000+00:00 +Internet,LEFT_case-8363,2011-08-22 01:06:40+00:00,General,2011-09-06 10:31:34.113000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-31061,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-05 13:46:54.343000+00:00 +Internet,LEFT_case-8363,2011-08-22 01:06:40+00:00,General,2011-09-06 10:31:34.113000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-31060,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-07-05 14:23:01.480000+00:00 +Internet,LEFT_case-8365,2011-08-23 01:06:40+00:00,General,2011-08-22 15:30:39.953000+00:00,2011-08-23 01:06:40.020000+00:00,Group 5,Resource05,2011-06-28 01:06:40.020000+00:00,task-30631,Confirmation of receipt,complete,Group 1,Resource05,2011-07-05 12:01:03.447000+00:00 +Internet,LEFT_case-8365,2011-08-23 01:06:40+00:00,General,2011-08-22 15:30:39.953000+00:00,2011-08-23 01:06:40.020000+00:00,Group 5,Resource05,2011-06-28 01:06:40.020000+00:00,task-31010,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-07-05 12:02:21.068000+00:00 +Internet,LEFT_case-8365,2011-08-23 01:06:40+00:00,General,2011-08-22 15:30:39.953000+00:00,2011-08-23 01:06:40.020000+00:00,Group 5,Resource05,2011-06-28 01:06:40.020000+00:00,task-31011,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-05 12:02:59.624000+00:00 +Internet,LEFT_case-8367,2011-08-26 01:06:40+00:00,General,2011-09-05 10:52:02.922000+00:00,2011-08-26 01:06:40.020000+00:00,Group 6,Resource29,2011-06-27 01:06:40.020000+00:00,task-30641,Confirmation of receipt,complete,EMPTY,Resource29,2011-07-05 15:40:37.140000+00:00 +Internet,LEFT_case-8367,2011-08-26 01:06:40+00:00,General,2011-09-05 10:52:02.922000+00:00,2011-08-26 01:06:40.020000+00:00,Group 6,Resource29,2011-06-27 01:06:40.020000+00:00,task-31114,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-07-05 15:41:41.174000+00:00 +Internet,LEFT_case-8367,2011-08-26 01:06:40+00:00,General,2011-09-05 10:52:02.922000+00:00,2011-08-26 01:06:40.020000+00:00,Group 6,Resource29,2011-06-27 01:06:40.020000+00:00,task-31126,T04 Determine confirmation of receipt,complete,EMPTY,Resource29,2011-07-05 16:02:36.727000+00:00 +Internet,LEFT_case-8381,2011-10-06 01:06:40+00:00,General,2011-09-30 14:05:01.438000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-30655,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 09:44:59.104000+00:00 +Internet,LEFT_case-8381,2011-10-06 01:06:40+00:00,General,2011-09-30 14:05:01.438000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33653,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 09:48:10.881000+00:00 +Internet,LEFT_case-8381,2011-10-06 01:06:40+00:00,General,2011-09-30 14:05:01.438000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33652,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 09:49:12.271000+00:00 +Internet,LEFT_case-8385,2011-10-06 01:06:40+00:00,General,2011-09-21 16:08:47.117000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-30777,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 09:55:45.135000+00:00 +Internet,LEFT_case-8385,2011-10-06 01:06:40+00:00,General,2011-09-21 16:08:47.117000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33665,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 09:56:29.974000+00:00 +Internet,LEFT_case-8385,2011-10-06 01:06:40+00:00,General,2011-09-21 16:08:47.117000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33664,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 09:57:03.816000+00:00 +Internet,LEFT_case-8388,2011-10-06 01:06:40+00:00,General,2011-09-30 10:33:31.866000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-30792,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:00:00.473000+00:00 +Internet,LEFT_case-8388,2011-10-06 01:06:40+00:00,General,2011-09-30 10:33:31.866000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33676,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:00:40.355000+00:00 +Internet,LEFT_case-8388,2011-10-06 01:06:40+00:00,General,2011-09-30 10:33:31.866000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33674,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:01:14.403000+00:00 +Internet,LEFT_case-8390,2011-08-24 01:06:40+00:00,General,2011-08-23 16:10:49.238000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource02,2011-05-18 01:06:40.020000+00:00,task-30836,Confirmation of receipt,complete,Group 1,Resource02,2011-07-12 09:23:21.707000+00:00 +Internet,LEFT_case-8390,2011-08-24 01:06:40+00:00,General,2011-08-23 16:10:49.238000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource02,2011-05-18 01:06:40.020000+00:00,task-31679,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-07-12 09:24:32.537000+00:00 +Internet,LEFT_case-8390,2011-08-24 01:06:40+00:00,General,2011-08-23 16:10:49.238000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource02,2011-05-18 01:06:40.020000+00:00,task-31678,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-07-28 14:11:07.460000+00:00 +Internet,LEFT_case-8398,2011-08-24 01:06:40+00:00,General,2011-08-01 08:22:05.095000+00:00,2011-08-24 01:06:40.020000+00:00,Group 8,Resource11,2011-06-29 01:06:40.020000+00:00,task-30924,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 10:54:58.203000+00:00 +Internet,LEFT_case-8398,2011-08-24 01:06:40+00:00,General,2011-08-01 08:22:05.095000+00:00,2011-08-24 01:06:40.020000+00:00,Group 8,Resource11,2011-06-29 01:06:40.020000+00:00,task-32662,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 10:55:40.914000+00:00 +Internet,LEFT_case-8398,2011-08-24 01:06:40+00:00,General,2011-08-01 08:22:05.095000+00:00,2011-08-24 01:06:40.020000+00:00,Group 8,Resource11,2011-06-29 01:06:40.020000+00:00,task-32661,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 10:56:22.428000+00:00 +Internet,LEFT_case-8399,2011-08-25 01:06:40+00:00,General,2011-08-02 07:44:03.231000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-30931,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 11:06:42.119000+00:00 +Internet,LEFT_case-8399,2011-08-25 01:06:40+00:00,General,2011-08-02 07:44:03.231000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-32682,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 11:09:17.358000+00:00 +Internet,LEFT_case-8399,2011-08-25 01:06:40+00:00,General,2011-08-02 07:44:03.231000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-32681,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 11:10:07.349000+00:00 +Internet,LEFT_case-8401,2011-08-25 01:06:40+00:00,General,2011-08-02 07:38:55.391000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-30935,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 11:19:15.585000+00:00 +Internet,LEFT_case-8401,2011-08-25 01:06:40+00:00,General,2011-08-02 07:38:55.391000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-32699,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 11:20:32.112000+00:00 +Internet,LEFT_case-8401,2011-08-25 01:06:40+00:00,General,2011-08-02 07:38:55.391000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-32698,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 11:21:19.126000+00:00 +Internet,LEFT_case-8403,2011-08-26 01:06:40+00:00,General,2011-08-02 07:33:56.390000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-30945,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 11:36:46.518000+00:00 +Internet,LEFT_case-8403,2011-08-26 01:06:40+00:00,General,2011-08-02 07:33:56.390000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32724,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 11:37:27.853000+00:00 +Internet,LEFT_case-8403,2011-08-26 01:06:40+00:00,General,2011-08-02 07:33:56.390000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32721,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 11:38:01.070000+00:00 +Internet,LEFT_case-8406,2011-08-26 01:06:40+00:00,General,2011-08-03 07:23:49.587000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-30959,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 12:35:02.996000+00:00 +Internet,LEFT_case-8406,2011-08-26 01:06:40+00:00,General,2011-08-03 07:23:49.587000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32773,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 12:36:28.010000+00:00 +Internet,LEFT_case-8406,2011-08-26 01:06:40+00:00,General,2011-08-03 07:23:49.587000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32772,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 12:37:03.628000+00:00 +Internet,LEFT_case-8408,2011-08-30 11:08:46.379000+00:00,General,2011-08-26 15:40:55.950000+00:00,2011-08-30 11:08:46.379000+00:00,Group 5,Resource06,2011-07-05 11:08:46.379000+00:00,task-30962,Confirmation of receipt,complete,Group 1,Resource06,2011-07-05 11:26:14.600000+00:00 +Internet,LEFT_case-8408,2011-08-30 11:08:46.379000+00:00,General,2011-08-26 15:40:55.950000+00:00,2011-08-30 11:08:46.379000+00:00,Group 5,Resource06,2011-07-05 11:08:46.379000+00:00,task-30986,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-05 11:26:58.666000+00:00 +Internet,LEFT_case-8408,2011-08-30 11:08:46.379000+00:00,General,2011-08-26 15:40:55.950000+00:00,2011-08-30 11:08:46.379000+00:00,Group 5,Resource06,2011-07-05 11:08:46.379000+00:00,task-30985,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-05 11:28:14.194000+00:00 +Internet,LEFT_case-8409,2011-08-24 01:06:40+00:00,General,2011-08-24 15:51:35.662000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource13,2011-06-29 01:06:40.020000+00:00,task-30982,Confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 15:06:50.185000+00:00 +Internet,LEFT_case-8409,2011-08-24 01:06:40+00:00,General,2011-08-24 15:51:35.662000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource13,2011-06-29 01:06:40.020000+00:00,task-34178,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 15:07:57.837000+00:00 +Internet,LEFT_case-8409,2011-08-24 01:06:40+00:00,General,2011-08-24 15:51:35.662000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource13,2011-06-29 01:06:40.020000+00:00,task-34176,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-07-28 15:08:45.589000+00:00 +Internet,LEFT_case-8410,2011-10-06 01:06:40+00:00,General,2011-09-30 11:21:21.336000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource05,2011-06-30 01:06:40.020000+00:00,task-31008,Confirmation of receipt,complete,EMPTY,Resource05,2011-08-01 13:45:15.806000+00:00 +Internet,LEFT_case-8410,2011-10-06 01:06:40+00:00,General,2011-09-30 11:21:21.336000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource05,2011-06-30 01:06:40.020000+00:00,task-34696,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-01 13:49:05.274000+00:00 +Internet,LEFT_case-8410,2011-10-06 01:06:40+00:00,General,2011-09-30 11:21:21.336000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource05,2011-06-30 01:06:40.020000+00:00,task-34695,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 14:06:16.955000+00:00 +Internet,LEFT_case-8411,2011-10-20 01:06:40+00:00,General,2011-11-16 10:25:18.295000+00:00,2011-08-25 01:06:40.020000+00:00,,admin1,2011-06-30 01:06:40.020000+00:00,task-31082,Confirmation of receipt,complete,EMPTY,Resource09,2011-08-04 13:53:12.097000+00:00 +Internet,LEFT_case-8411,2011-10-20 01:06:40+00:00,General,2011-11-16 10:25:18.295000+00:00,2011-08-25 01:06:40.020000+00:00,,admin1,2011-06-30 01:06:40.020000+00:00,task-35430,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-08-04 13:53:59.896000+00:00 +Internet,LEFT_case-8411,2011-10-20 01:06:40+00:00,General,2011-11-16 10:25:18.295000+00:00,2011-08-25 01:06:40.020000+00:00,,admin1,2011-06-30 01:06:40.020000+00:00,task-35433,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-08-04 13:54:52.007000+00:00 +Internet,LEFT_case-8419,2011-11-22 01:06:40+00:00,General,2011-10-31 15:25:21.985000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource06,2011-06-30 01:06:40.020000+00:00,task-31150,Confirmation of receipt,complete,Group 1,Resource27,2011-07-06 09:08:49.694000+00:00 +Internet,LEFT_case-8419,2011-11-22 01:06:40+00:00,General,2011-10-31 15:25:21.985000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource06,2011-06-30 01:06:40.020000+00:00,task-31154,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-20 13:05:10.530000+00:00 +Internet,LEFT_case-8419,2011-11-22 01:06:40+00:00,General,2011-10-31 15:25:21.985000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource06,2011-06-30 01:06:40.020000+00:00,task-32827,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-20 13:06:52.610000+00:00 +Internet,LEFT_case-8420,2011-10-14 01:06:40+00:00,General,2011-10-12 09:57:54.797000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource02,2011-06-28 01:06:40.020000+00:00,task-31151,Confirmation of receipt,complete,EMPTY,Resource02,2011-08-05 12:11:03.200000+00:00 +Internet,LEFT_case-8420,2011-10-14 01:06:40+00:00,General,2011-10-12 09:57:54.797000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource02,2011-06-28 01:06:40.020000+00:00,task-35542,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-05 12:11:51.285000+00:00 +Internet,LEFT_case-8420,2011-10-14 01:06:40+00:00,General,2011-10-12 09:57:54.797000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource02,2011-06-28 01:06:40.020000+00:00,task-35541,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-05 12:12:39.133000+00:00 +Internet,LEFT_case-8421,2011-08-26 01:06:40+00:00,General,2011-08-03 07:28:53.760000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-31155,Confirmation of receipt,complete,Group 1,Resource27,2011-07-06 09:37:38.241000+00:00 +Internet,LEFT_case-8421,2011-08-26 01:06:40+00:00,General,2011-08-03 07:28:53.760000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32791,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 12:47:57.432000+00:00 +Internet,LEFT_case-8421,2011-08-26 01:06:40+00:00,General,2011-08-03 07:28:53.760000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-31157,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 12:48:40.717000+00:00 +Internet,LEFT_case-8423,2011-10-22 01:06:40+00:00,General,2011-09-21 10:39:04.742000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource23,2011-06-30 01:06:40.020000+00:00,task-31159,Confirmation of receipt,complete,Group 1,Resource23,2011-07-12 12:20:32.901000+00:00 +Internet,LEFT_case-8423,2011-10-22 01:06:40+00:00,General,2011-09-21 10:39:04.742000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource23,2011-06-30 01:06:40.020000+00:00,task-31750,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-07-12 12:21:20.010000+00:00 +Internet,LEFT_case-8423,2011-10-22 01:06:40+00:00,General,2011-09-21 10:39:04.742000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource23,2011-06-30 01:06:40.020000+00:00,task-31749,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-07-15 15:49:17.010000+00:00 +Internet,LEFT_case-8424,2011-08-27 01:06:40+00:00,General,2011-09-26 16:47:18.815000+00:00,2011-08-27 01:06:40.020000+00:00,Group 5,Resource12,2011-07-02 01:06:40.020000+00:00,task-31160,Confirmation of receipt,complete,Group 1,Resource27,2011-07-06 09:57:52.606000+00:00 +Internet,LEFT_case-8424,2011-08-27 01:06:40+00:00,General,2011-09-26 16:47:18.815000+00:00,2011-08-27 01:06:40.020000+00:00,Group 5,Resource12,2011-07-02 01:06:40.020000+00:00,task-38823,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-13 10:53:15.574000+00:00 +Internet,LEFT_case-8424,2011-08-27 01:06:40+00:00,General,2011-09-26 16:47:18.815000+00:00,2011-08-27 01:06:40.020000+00:00,Group 5,Resource12,2011-07-02 01:06:40.020000+00:00,task-31162,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-13 10:55:01.244000+00:00 +Internet,LEFT_case-8425,2011-08-25 01:06:40+00:00,General,2011-09-05 10:03:36.724000+00:00,2011-08-25 01:06:40.020000+00:00,Group 5,Resource12,2011-06-30 01:06:40.020000+00:00,task-31176,Confirmation of receipt,complete,EMPTY,Resource12,2011-08-29 09:03:12.499000+00:00 +Internet,LEFT_case-8425,2011-08-25 01:06:40+00:00,General,2011-09-05 10:03:36.724000+00:00,2011-08-25 01:06:40.020000+00:00,Group 5,Resource12,2011-06-30 01:06:40.020000+00:00,task-37289,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-08-29 09:22:43.054000+00:00 +Internet,LEFT_case-8425,2011-08-25 01:06:40+00:00,General,2011-09-05 10:03:36.724000+00:00,2011-08-25 01:06:40.020000+00:00,Group 5,Resource12,2011-06-30 01:06:40.020000+00:00,task-37288,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-29 09:24:23.319000+00:00 +Desk,LEFT_case-8427,2011-08-12 01:06:40+00:00,General,2011-07-19 14:05:33.768000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-31178,Confirmation of receipt,complete,Group 1,Resource06,2011-07-12 14:08:38.777000+00:00 +Desk,LEFT_case-8427,2011-08-12 01:06:40+00:00,General,2011-07-19 14:05:33.768000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-31776,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-12 14:09:17.357000+00:00 +Desk,LEFT_case-8427,2011-08-12 01:06:40+00:00,General,2011-07-19 14:05:33.768000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-31775,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-12 14:09:47.962000+00:00 +Internet,LEFT_case-8441,2011-08-30 01:06:40+00:00,General,2011-07-13 00:00:00.020000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource01,2011-07-05 01:06:40.020000+00:00,task-31314,Confirmation of receipt,complete,Group 1,Resource27,2011-07-07 13:35:43.950000+00:00 +Internet,LEFT_case-8441,2011-08-30 01:06:40+00:00,General,2011-07-13 00:00:00.020000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource01,2011-07-05 01:06:40.020000+00:00,task-31316,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-07-15 13:45:49.995000+00:00 +Internet,LEFT_case-8442,2011-08-30 01:06:40+00:00,General,2011-08-03 07:35:35.509000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-31318,Confirmation of receipt,complete,Group 1,Resource27,2011-07-07 13:50:59.813000+00:00 +Internet,LEFT_case-8442,2011-08-30 01:06:40+00:00,General,2011-08-03 07:35:35.509000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-31320,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 13:05:26.141000+00:00 +Internet,LEFT_case-8442,2011-08-30 01:06:40+00:00,General,2011-08-03 07:35:35.509000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-32823,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 13:06:04.607000+00:00 +Internet,LEFT_case-8444,2011-09-01 13:59:04.071000+00:00,General,2011-08-04 07:54:02.568000+00:00,2011-09-01 13:59:04.071000+00:00,Group 8,Resource11,2011-07-07 13:59:04.071000+00:00,task-31335,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 14:59:59.481000+00:00 +Internet,LEFT_case-8444,2011-09-01 13:59:04.071000+00:00,General,2011-08-04 07:54:02.568000+00:00,2011-09-01 13:59:04.071000+00:00,Group 8,Resource11,2011-07-07 13:59:04.071000+00:00,task-32886,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 15:01:15.268000+00:00 +Internet,LEFT_case-8444,2011-09-01 13:59:04.071000+00:00,General,2011-08-04 07:54:02.568000+00:00,2011-09-01 13:59:04.071000+00:00,Group 8,Resource11,2011-07-07 13:59:04.071000+00:00,task-32885,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 15:02:28.259000+00:00 +Internet,LEFT_case-8445,2011-09-01 14:19:53.925000+00:00,General,2011-08-04 08:00:49.806000+00:00,2011-09-01 14:19:53.925000+00:00,Group 8,Resource11,2011-07-07 14:19:53.925000+00:00,task-31339,Confirmation of receipt,complete,Group 1,Resource27,2011-07-07 14:23:08.713000+00:00 +Internet,LEFT_case-8445,2011-09-01 14:19:53.925000+00:00,General,2011-08-04 08:00:49.806000+00:00,2011-09-01 14:19:53.925000+00:00,Group 8,Resource11,2011-07-07 14:19:53.925000+00:00,task-33049,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 13:07:45.973000+00:00 +Internet,LEFT_case-8445,2011-09-01 14:19:53.925000+00:00,General,2011-08-04 08:00:49.806000+00:00,2011-09-01 14:19:53.925000+00:00,Group 8,Resource11,2011-07-07 14:19:53.925000+00:00,task-31342,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 13:09:07.022000+00:00 +Internet,LEFT_case-8446,2011-09-01 14:45:13.369000+00:00,General,2011-09-02 15:09:31.995000+00:00,2011-09-01 14:45:13.369000+00:00,Group 5,Resource12,2011-07-07 14:45:13.369000+00:00,task-31344,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-01 12:11:45.413000+00:00 +Internet,LEFT_case-8446,2011-09-01 14:45:13.369000+00:00,General,2011-09-02 15:09:31.995000+00:00,2011-09-01 14:45:13.369000+00:00,Group 5,Resource12,2011-07-07 14:45:13.369000+00:00,task-37837,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-01 12:15:34.181000+00:00 +Internet,LEFT_case-8446,2011-09-01 14:45:13.369000+00:00,General,2011-09-02 15:09:31.995000+00:00,2011-09-01 14:45:13.369000+00:00,Group 5,Resource12,2011-07-07 14:45:13.369000+00:00,task-37836,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-01 12:16:41.339000+00:00 +Internet,LEFT_case-8448,2011-08-30 01:06:40+00:00,General,2011-08-29 12:32:13.621000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-07-05 01:06:40.020000+00:00,task-31346,Confirmation of receipt,complete,Group 1,Resource27,2011-07-07 14:54:49.619000+00:00 +Internet,LEFT_case-8448,2011-08-30 01:06:40+00:00,General,2011-08-29 12:32:13.621000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-07-05 01:06:40.020000+00:00,task-34257,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 16:12:15.589000+00:00 +Internet,LEFT_case-8448,2011-08-30 01:06:40+00:00,General,2011-08-29 12:32:13.621000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-07-05 01:06:40.020000+00:00,task-31350,T06 Determine necessity of stop advice,complete,EMPTY,Resource13,2011-07-28 16:13:25.795000+00:00 +Internet,LEFT_case-8449,2011-09-01 15:05:36.177000+00:00,General,2011-08-04 08:06:12.876000+00:00,2011-09-01 15:05:36.177000+00:00,Group 8,Resource11,2011-07-07 15:05:36.177000+00:00,task-31354,Confirmation of receipt,complete,Group 1,Resource27,2011-07-07 15:09:02.441000+00:00 +Internet,LEFT_case-8449,2011-09-01 15:05:36.177000+00:00,General,2011-08-04 08:06:12.876000+00:00,2011-09-01 15:05:36.177000+00:00,Group 8,Resource11,2011-07-07 15:05:36.177000+00:00,task-32980,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 11:04:53.620000+00:00 +Internet,LEFT_case-8449,2011-09-01 15:05:36.177000+00:00,General,2011-08-04 08:06:12.876000+00:00,2011-09-01 15:05:36.177000+00:00,Group 8,Resource11,2011-07-07 15:05:36.177000+00:00,task-31356,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 11:20:23.582000+00:00 +Internet,LEFT_case-8456,2011-10-06 01:06:40+00:00,General,2011-09-30 09:29:26.396000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-31388,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:03:42.616000+00:00 +Internet,LEFT_case-8456,2011-10-06 01:06:40+00:00,General,2011-09-30 09:29:26.396000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33689,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:04:17.457000+00:00 +Internet,LEFT_case-8456,2011-10-06 01:06:40+00:00,General,2011-09-30 09:29:26.396000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33688,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:04:49.535000+00:00 +Internet,LEFT_case-8457,2011-10-06 01:06:40+00:00,General,2011-09-21 09:32:53.661000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-31397,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:09:37.142000+00:00 +Internet,LEFT_case-8457,2011-10-06 01:06:40+00:00,General,2011-09-21 09:32:53.661000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33701,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:10:11.502000+00:00 +Internet,LEFT_case-8457,2011-10-06 01:06:40+00:00,General,2011-09-21 09:32:53.661000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33700,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:10:41.626000+00:00 +Internet,LEFT_case-8458,2011-10-06 01:06:40+00:00,General,2011-09-20 11:36:08.106000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-31411,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:13:43.875000+00:00 +Internet,LEFT_case-8458,2011-10-06 01:06:40+00:00,General,2011-09-20 11:36:08.106000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33709,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:14:18.365000+00:00 +Internet,LEFT_case-8458,2011-10-06 01:06:40+00:00,General,2011-09-20 11:36:08.106000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33708,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:14:50.196000+00:00 +Internet,LEFT_case-8459,2011-10-06 01:06:40+00:00,General,2011-09-30 16:45:08.267000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-31412,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:24:57.488000+00:00 +Internet,LEFT_case-8459,2011-10-06 01:06:40+00:00,General,2011-09-30 16:45:08.267000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33729,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:25:31.224000+00:00 +Internet,LEFT_case-8459,2011-10-06 01:06:40+00:00,General,2011-09-30 16:45:08.267000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33728,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:26:01.983000+00:00 +Internet,LEFT_case-8460,2011-10-06 01:06:40+00:00,General,2011-09-30 16:25:55.393000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-31445,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:30:41.918000+00:00 +Internet,LEFT_case-8460,2011-10-06 01:06:40+00:00,General,2011-09-30 16:25:55.393000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33736,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:31:17.057000+00:00 +Internet,LEFT_case-8460,2011-10-06 01:06:40+00:00,General,2011-09-30 16:25:55.393000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33735,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:32:04.761000+00:00 +Internet,LEFT_case-8461,2011-09-27 01:06:40+00:00,General,2011-09-05 12:50:10.453000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-31449,Confirmation of receipt,complete,EMPTY,Resource06,2011-07-29 10:09:43.120000+00:00 +Internet,LEFT_case-8461,2011-09-27 01:06:40+00:00,General,2011-09-05 12:50:10.453000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-34355,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-29 10:10:27.079000+00:00 +Internet,LEFT_case-8461,2011-09-27 01:06:40+00:00,General,2011-09-05 12:50:10.453000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-34354,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-29 10:33:10.329000+00:00 +Internet,LEFT_case-8462,2011-10-06 01:06:40+00:00,General,2011-09-30 16:41:10.569000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-31455,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:34:44.315000+00:00 +Internet,LEFT_case-8462,2011-10-06 01:06:40+00:00,General,2011-09-30 16:41:10.569000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33744,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:35:25.095000+00:00 +Internet,LEFT_case-8462,2011-10-06 01:06:40+00:00,General,2011-09-30 16:41:10.569000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33743,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:36:02.570000+00:00 +Internet,LEFT_case-8465,2011-09-01 01:06:40+00:00,General,2011-08-03 07:44:33.808000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-31471,Confirmation of receipt,complete,Group 1,Resource27,2011-07-08 11:12:19.739000+00:00 +Internet,LEFT_case-8465,2011-09-01 01:06:40+00:00,General,2011-08-03 07:44:33.808000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-32962,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 10:47:10.490000+00:00 +Internet,LEFT_case-8465,2011-09-01 01:06:40+00:00,General,2011-08-03 07:44:33.808000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-31476,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 10:47:46.359000+00:00 +Internet,LEFT_case-8467,2011-09-01 01:06:40+00:00,General,2011-09-26 16:08:33.468000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-31484,Confirmation of receipt,complete,Group 1,Resource27,2011-07-08 11:30:34.380000+00:00 +Internet,LEFT_case-8467,2011-09-01 01:06:40+00:00,General,2011-09-26 16:08:33.468000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-33593,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-07-26 20:01:11.635000+00:00 +Internet,LEFT_case-8467,2011-09-01 01:06:40+00:00,General,2011-09-26 16:08:33.468000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-31488,T06 Determine necessity of stop advice,complete,EMPTY,Resource13,2011-07-26 20:02:08.050000+00:00 +Internet,LEFT_case-8469,2011-09-02 01:06:40+00:00,General,2011-08-04 08:13:39.644000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31493,Confirmation of receipt,complete,Group 1,Resource27,2011-07-08 12:02:36.640000+00:00 +Internet,LEFT_case-8469,2011-09-02 01:06:40+00:00,General,2011-08-04 08:13:39.644000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33064,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 13:25:22.779000+00:00 +Internet,LEFT_case-8469,2011-09-02 01:06:40+00:00,General,2011-08-04 08:13:39.644000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31495,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 13:26:00.381000+00:00 +Internet,LEFT_case-8495,2011-09-03 01:06:40+00:00,General,2011-08-12 00:00:00.020000+00:00,2011-09-03 01:06:40.020000+00:00,Group 5,Resource14,2011-07-09 01:06:40.020000+00:00,task-31546,Confirmation of receipt,complete,EMPTY,admin2,2011-08-15 08:56:22.507000+00:00 +Internet,LEFT_case-8500,2011-09-02 01:06:40+00:00,General,2011-08-04 08:42:11.097000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31567,Confirmation of receipt,complete,Group 1,Resource27,2011-07-11 11:39:25.745000+00:00 +Internet,LEFT_case-8500,2011-09-02 01:06:40+00:00,General,2011-08-04 08:42:11.097000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33081,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 13:38:28.138000+00:00 +Internet,LEFT_case-8500,2011-09-02 01:06:40+00:00,General,2011-08-04 08:42:11.097000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31569,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 13:39:26.770000+00:00 +Internet,LEFT_case-8501,2011-09-02 01:06:40+00:00,General,2011-08-04 08:49:44.997000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31572,Confirmation of receipt,complete,Group 1,Resource27,2011-07-11 11:49:05.918000+00:00 +Internet,LEFT_case-8501,2011-09-02 01:06:40+00:00,General,2011-08-04 08:49:44.997000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33095,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 14:07:29.612000+00:00 +Internet,LEFT_case-8501,2011-09-02 01:06:40+00:00,General,2011-08-04 08:49:44.997000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31574,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 14:10:32.812000+00:00 +Internet,LEFT_case-8502,2011-09-02 01:06:40+00:00,General,2011-08-04 08:54:16.463000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31575,Confirmation of receipt,complete,Group 1,Resource27,2011-07-11 11:59:09.881000+00:00 +Internet,LEFT_case-8502,2011-09-02 01:06:40+00:00,General,2011-08-04 08:54:16.463000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33115,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 14:48:15.617000+00:00 +Internet,LEFT_case-8502,2011-09-02 01:06:40+00:00,General,2011-08-04 08:54:16.463000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31577,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 14:50:47.836000+00:00 +Internet,LEFT_case-8503,2011-09-01 01:06:40+00:00,General,2011-08-10 16:05:07.760000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource02,2011-07-07 01:06:40.020000+00:00,task-31589,Confirmation of receipt,complete,EMPTY,Resource02,2011-08-08 11:14:55.636000+00:00 +Internet,LEFT_case-8503,2011-09-01 01:06:40+00:00,General,2011-08-10 16:05:07.760000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource02,2011-07-07 01:06:40.020000+00:00,task-35623,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-08 11:16:18.899000+00:00 +Internet,LEFT_case-8503,2011-09-01 01:06:40+00:00,General,2011-08-10 16:05:07.760000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource02,2011-07-07 01:06:40.020000+00:00,task-35622,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-08 11:16:58.950000+00:00 +Internet,LEFT_case-8504,2011-09-01 01:06:40+00:00,General,2011-10-04 10:35:33.466000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-31610,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-26 12:38:48.188000+00:00 +Internet,LEFT_case-8504,2011-09-01 01:06:40+00:00,General,2011-10-04 10:35:33.466000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-40420,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-26 12:39:44.674000+00:00 +Internet,LEFT_case-8504,2011-09-01 01:06:40+00:00,General,2011-10-04 10:35:33.466000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-40419,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-26 12:41:18.891000+00:00 +Internet,LEFT_case-8505,2011-09-01 01:06:40+00:00,General,2011-10-04 10:54:58.673000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-31611,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-26 14:19:20.926000+00:00 +Internet,LEFT_case-8505,2011-09-01 01:06:40+00:00,General,2011-10-04 10:54:58.673000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-40466,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-26 14:20:25.975000+00:00 +Internet,LEFT_case-8505,2011-09-01 01:06:40+00:00,General,2011-10-04 10:54:58.673000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-40465,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-26 14:21:43.272000+00:00 +Internet,LEFT_case-8507,2011-09-05 13:50:18.729000+00:00,General,2011-08-29 13:41:34.539000+00:00,2011-09-05 13:50:18.729000+00:00,Group 5,Resource12,2011-07-11 13:53:24.202000+00:00,task-31617,Confirmation of receipt,complete,EMPTY,Resource12,2011-08-04 12:05:37.629000+00:00 +Internet,LEFT_case-8507,2011-09-05 13:50:18.729000+00:00,General,2011-08-29 13:41:34.539000+00:00,2011-09-05 13:50:18.729000+00:00,Group 5,Resource12,2011-07-11 13:53:24.202000+00:00,task-35374,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-08-04 12:06:58.959000+00:00 +Internet,LEFT_case-8507,2011-09-05 13:50:18.729000+00:00,General,2011-08-29 13:41:34.539000+00:00,2011-09-05 13:50:18.729000+00:00,Group 5,Resource12,2011-07-11 13:53:24.202000+00:00,task-35373,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-04 12:16:02.819000+00:00 +Internet,LEFT_case-8511,2011-10-14 01:06:40+00:00,General,2011-10-11 13:55:52.280000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource22,2011-07-08 01:06:40.020000+00:00,task-31637,Confirmation of receipt,complete,EMPTY,Resource22,2011-07-20 11:36:49.743000+00:00 +Internet,LEFT_case-8511,2011-10-14 01:06:40+00:00,General,2011-10-11 13:55:52.280000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource22,2011-07-08 01:06:40.020000+00:00,task-32727,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-07-20 11:38:43.145000+00:00 +Internet,LEFT_case-8511,2011-10-14 01:06:40+00:00,General,2011-10-11 13:55:52.280000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource22,2011-07-08 01:06:40.020000+00:00,task-32723,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-07-20 11:41:01.552000+00:00 +Internet,LEFT_case-8522,2011-09-02 01:06:40+00:00,General,2011-10-14 11:57:22.270000+00:00,2011-09-02 01:06:40.020000+00:00,Group 5,Resource09,2011-07-08 01:06:40.020000+00:00,task-31691,Confirmation of receipt,complete,EMPTY,Resource09,2011-07-27 09:53:04.511000+00:00 +Internet,LEFT_case-8522,2011-09-02 01:06:40+00:00,General,2011-10-14 11:57:22.270000+00:00,2011-09-02 01:06:40.020000+00:00,Group 5,Resource09,2011-07-08 01:06:40.020000+00:00,task-33658,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-27 09:54:59.441000+00:00 +Internet,LEFT_case-8522,2011-09-02 01:06:40+00:00,General,2011-10-14 11:57:22.270000+00:00,2011-09-02 01:06:40.020000+00:00,Group 5,Resource09,2011-07-08 01:06:40.020000+00:00,task-33659,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-27 09:55:27.690000+00:00 +Internet,LEFT_case-8550,2011-09-06 01:06:40+00:00,General,2011-09-30 09:05:15.234000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource22,2011-07-12 01:06:40.020000+00:00,task-31895,Confirmation of receipt,complete,Group 1,Resource27,2011-07-13 10:50:42.053000+00:00 +Internet,LEFT_case-8550,2011-09-06 01:06:40+00:00,General,2011-09-30 09:05:15.234000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource22,2011-07-12 01:06:40.020000+00:00,task-40061,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-09-23 11:28:22.149000+00:00 +Internet,LEFT_case-8550,2011-09-06 01:06:40+00:00,General,2011-09-30 09:05:15.234000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource22,2011-07-12 01:06:40.020000+00:00,task-31899,T06 Determine necessity of stop advice,complete,EMPTY,Resource22,2011-09-23 11:30:38.375000+00:00 +Internet,LEFT_case-8551,2011-09-06 01:06:40+00:00,General,2011-08-30 11:57:35.095000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-31909,Confirmation of receipt,complete,Group 1,Resource27,2011-07-13 11:12:19.592000+00:00 +Internet,LEFT_case-8551,2011-09-06 01:06:40+00:00,General,2011-08-30 11:57:35.095000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-35906,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-09 11:29:49.894000+00:00 +Internet,LEFT_case-8551,2011-09-06 01:06:40+00:00,General,2011-08-30 11:57:35.095000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-31911,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-09 11:32:01.558000+00:00 +e-mail,LEFT_case-8560,2011-08-31 01:06:40+00:00,General,2011-10-12 16:40:30.274000+00:00,2011-08-31 01:06:40.020000+00:00,Group 11,Resource25,2011-07-06 01:06:40.020000+00:00,task-31953,Confirmation of receipt,complete,EMPTY,Resource09,2011-10-12 10:48:22.500000+00:00 +e-mail,LEFT_case-8560,2011-08-31 01:06:40+00:00,General,2011-10-12 16:40:30.274000+00:00,2011-08-31 01:06:40.020000+00:00,Group 11,Resource25,2011-07-06 01:06:40.020000+00:00,task-43003,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-12 11:17:12.857000+00:00 +e-mail,LEFT_case-8560,2011-08-31 01:06:40+00:00,General,2011-10-12 16:40:30.274000+00:00,2011-08-31 01:06:40.020000+00:00,Group 11,Resource25,2011-07-06 01:06:40.020000+00:00,task-43017,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-10-12 11:20:02.737000+00:00 +Internet,LEFT_case-8639,2011-09-07 01:06:40+00:00,General,2011-08-04 08:59:29.552000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-32296,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 10:56:56.180000+00:00 +Internet,LEFT_case-8639,2011-09-07 01:06:40+00:00,General,2011-08-04 08:59:29.552000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-33138,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 15:20:40.509000+00:00 +Internet,LEFT_case-8639,2011-09-07 01:06:40+00:00,General,2011-08-04 08:59:29.552000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-32298,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 15:21:28.167000+00:00 +Internet,LEFT_case-8642,2011-09-07 01:06:40+00:00,General,2011-09-30 14:31:28.812000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-32308,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 11:24:55.234000+00:00 +Internet,LEFT_case-8642,2011-09-07 01:06:40+00:00,General,2011-09-30 14:31:28.812000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-33233,T03 Adjust confirmation of receipt,complete,Group 1,Resource01,2011-07-22 14:07:09.996000+00:00 +Internet,LEFT_case-8642,2011-09-07 01:06:40+00:00,General,2011-09-30 14:31:28.812000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-33235,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-22 14:18:48.492000+00:00 +Internet,LEFT_case-8642,2011-09-07 01:06:40+00:00,General,2011-09-30 14:31:28.812000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-32312,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 11:46:27.552000+00:00 +Internet,LEFT_case-8645,2011-09-07 01:06:40+00:00,General,2011-08-09 08:29:57.963000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-32314,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 11:41:38.077000+00:00 +Internet,LEFT_case-8645,2011-09-07 01:06:40+00:00,General,2011-08-09 08:29:57.963000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-33888,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-28 09:01:22.840000+00:00 +Internet,LEFT_case-8645,2011-09-07 01:06:40+00:00,General,2011-08-09 08:29:57.963000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-32316,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-28 09:02:28.361000+00:00 +Internet,LEFT_case-8646,2011-10-19 01:06:40+00:00,General,2011-10-04 15:20:59.123000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource06,2011-07-13 01:06:40.020000+00:00,task-32317,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 12:01:13.168000+00:00 +Internet,LEFT_case-8646,2011-10-19 01:06:40+00:00,General,2011-10-04 15:20:59.123000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource06,2011-07-13 01:06:40.020000+00:00,task-37595,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-31 10:12:32.952000+00:00 +Internet,LEFT_case-8646,2011-10-19 01:06:40+00:00,General,2011-10-04 15:20:59.123000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource06,2011-07-13 01:06:40.020000+00:00,task-32320,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-31 10:13:31.537000+00:00 +Internet,LEFT_case-8650,2011-09-08 01:06:40+00:00,General,2011-07-21 13:58:54.784000+00:00,2011-09-08 01:06:40.020000+00:00,Group 8,Resource01,2011-07-14 01:06:40.020000+00:00,task-32330,Confirmation of receipt,complete,Group 1,admin2,2011-07-21 13:58:55.760000+00:00 +Internet,LEFT_case-8652,2011-09-09 01:06:40+00:00,General,2011-08-09 08:39:45.323000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-32338,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 14:09:48.466000+00:00 +Internet,LEFT_case-8652,2011-09-09 01:06:40+00:00,General,2011-08-09 08:39:45.323000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-33864,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 08:41:17.114000+00:00 +Internet,LEFT_case-8652,2011-09-09 01:06:40+00:00,General,2011-08-09 08:39:45.323000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-32340,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 08:42:04.881000+00:00 +Internet,LEFT_case-8653,2011-10-21 01:06:40+00:00,General,2011-10-24 14:09:10.905000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-07-15 01:06:40.020000+00:00,task-32345,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 14:20:30.486000+00:00 +Internet,LEFT_case-8653,2011-10-21 01:06:40+00:00,General,2011-10-24 14:09:10.905000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-07-15 01:06:40.020000+00:00,task-37661,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-31 12:46:24.009000+00:00 +Internet,LEFT_case-8653,2011-10-21 01:06:40+00:00,General,2011-10-24 14:09:10.905000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-07-15 01:06:40.020000+00:00,task-32347,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-31 12:46:55.291000+00:00 +Internet,LEFT_case-8654,2011-09-09 01:06:40+00:00,General,2011-08-09 08:53:03.538000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-32352,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 14:30:04.073000+00:00 +Internet,LEFT_case-8654,2011-09-09 01:06:40+00:00,General,2011-08-09 08:53:03.538000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-34132,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 14:33:33.339000+00:00 +Internet,LEFT_case-8654,2011-09-09 01:06:40+00:00,General,2011-08-09 08:53:03.538000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-32354,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 14:35:45.363000+00:00 +Internet,LEFT_case-8656,2011-09-11 01:06:40+00:00,General,2011-09-09 00:00:00.020000+00:00,2011-09-11 01:06:40.020000+00:00,Group 5,Resource12,2011-07-17 01:06:40.020000+00:00,task-32359,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 14:40:34.291000+00:00 +Internet,LEFT_case-8656,2011-09-11 01:06:40+00:00,General,2011-09-09 00:00:00.020000+00:00,2011-09-11 01:06:40.020000+00:00,Group 5,Resource12,2011-07-17 01:06:40.020000+00:00,task-32362,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-09-23 15:21:07.801000+00:00 +Internet,LEFT_case-8663,2011-10-21 01:06:40+00:00,General,2011-10-04 15:53:09.142000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource13,2011-07-15 01:06:40.020000+00:00,task-32401,Confirmation of receipt,complete,Group 1,Resource27,2011-07-19 08:40:38.469000+00:00 +Internet,LEFT_case-8663,2011-10-21 01:06:40+00:00,General,2011-10-04 15:53:09.142000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource13,2011-07-15 01:06:40.020000+00:00,task-33212,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-07-22 12:22:32.416000+00:00 +Internet,LEFT_case-8663,2011-10-21 01:06:40+00:00,General,2011-10-04 15:53:09.142000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource13,2011-07-15 01:06:40.020000+00:00,task-32403,T06 Determine necessity of stop advice,complete,EMPTY,Resource13,2011-07-22 12:23:30.039000+00:00 +Internet,LEFT_case-8704,2011-08-09 01:06:40+00:00,General,2011-08-24 12:04:43.618000+00:00,2011-08-09 01:06:40.020000+00:00,Group 7,Resource35,2011-06-14 01:06:40.020000+00:00,task-32857,Confirmation of receipt,complete,EMPTY,admin2,2011-08-24 12:04:44.655000+00:00 +Internet,LEFT_case-8708,2011-09-14 16:14:11.461000+00:00,General,2011-07-28 12:20:49.887000+00:00,2011-09-14 16:14:11.461000+00:00,Group 5,Resource09,2011-07-20 16:14:11.461000+00:00,task-32911,Confirmation of receipt,complete,EMPTY,admin2,2011-07-28 12:20:51.068000+00:00 +Internet,LEFT_case-8709,2011-09-14 01:06:40+00:00,General,2011-07-28 12:22:12.460000+00:00,2011-09-14 01:06:40.020000+00:00,Group 5,Resource09,2011-07-20 01:06:40.020000+00:00,task-32912,Confirmation of receipt,complete,EMPTY,admin2,2011-07-28 12:22:13.305000+00:00 +Internet,LEFT_case-8710,2011-08-09 01:06:40+00:00,General,2011-09-13 12:17:12.615000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource14,2011-06-14 01:06:40.020000+00:00,task-32913,Confirmation of receipt,complete,EMPTY,Resource09,2011-07-28 15:19:45.681000+00:00 +Internet,LEFT_case-8710,2011-08-09 01:06:40+00:00,General,2011-09-13 12:17:12.615000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource14,2011-06-14 01:06:40.020000+00:00,task-34200,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-28 15:22:21.540000+00:00 +Internet,LEFT_case-8710,2011-08-09 01:06:40+00:00,General,2011-09-13 12:17:12.615000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource14,2011-06-14 01:06:40.020000+00:00,task-34205,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-28 15:25:00.933000+00:00 +Internet,LEFT_case-8728,2011-07-28 01:06:40+00:00,General,2011-07-29 10:25:34.265000+00:00,2011-07-28 01:06:40.020000+00:00,Group 5,Resource06,2011-05-11 01:06:40.020000+00:00,task-32987,Confirmation of receipt,complete,EMPTY,Resource06,2011-07-28 11:53:35.431000+00:00 +Internet,LEFT_case-8728,2011-07-28 01:06:40+00:00,General,2011-07-29 10:25:34.265000+00:00,2011-07-28 01:06:40.020000+00:00,Group 5,Resource06,2011-05-11 01:06:40.020000+00:00,task-34027,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-28 11:59:34.415000+00:00 +Internet,LEFT_case-8728,2011-07-28 01:06:40+00:00,General,2011-07-29 10:25:34.265000+00:00,2011-07-28 01:06:40.020000+00:00,Group 5,Resource06,2011-05-11 01:06:40.020000+00:00,task-34022,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-28 12:01:42.793000+00:00 +Internet,LEFT_case-8733,2011-08-10 01:06:40+00:00,General,2011-09-02 11:43:53.132000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource06,2011-06-15 01:06:40.020000+00:00,task-33113,Confirmation of receipt,complete,EMPTY,Resource06,2011-08-25 12:49:35.899000+00:00 +Internet,LEFT_case-8733,2011-08-10 01:06:40+00:00,General,2011-09-02 11:43:53.132000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource06,2011-06-15 01:06:40.020000+00:00,task-37127,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-25 12:49:57.360000+00:00 +Internet,LEFT_case-8733,2011-08-10 01:06:40+00:00,General,2011-09-02 11:43:53.132000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource06,2011-06-15 01:06:40.020000+00:00,task-37129,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-25 12:50:50.892000+00:00 +Internet,LEFT_case-8734,2011-10-05 01:06:40+00:00,General,2011-09-08 10:31:27.899000+00:00,2011-10-05 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-33165,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-26 14:51:10.078000+00:00 +Internet,LEFT_case-8734,2011-10-05 01:06:40+00:00,General,2011-09-08 10:31:27.899000+00:00,2011-10-05 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-33524,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-26 14:51:50.229000+00:00 +Internet,LEFT_case-8734,2011-10-05 01:06:40+00:00,General,2011-09-08 10:31:27.899000+00:00,2011-10-05 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-33523,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-26 14:52:24.125000+00:00 +Internet,LEFT_case-8742,2011-10-24 01:06:40+00:00,General,2011-10-03 15:53:03.902000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource02,2011-07-18 01:06:40.020000+00:00,task-33173,Confirmation of receipt,complete,Group 1,Resource27,2011-07-22 08:57:13.058000+00:00 +Internet,LEFT_case-8742,2011-10-24 01:06:40+00:00,General,2011-10-03 15:53:03.902000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource02,2011-07-18 01:06:40.020000+00:00,task-36037,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-10 11:07:31.882000+00:00 +Internet,LEFT_case-8742,2011-10-24 01:06:40+00:00,General,2011-10-03 15:53:03.902000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource02,2011-07-18 01:06:40.020000+00:00,task-33175,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-10 11:09:41.491000+00:00 +Internet,LEFT_case-8743,2011-09-12 00:00:00+00:00,General,,2011-09-12 00:00:00.020000+00:00,Group 5,Resource14,2011-07-18 01:06:40.020000+00:00,task-33176,Confirmation of receipt,complete,Group 1,Resource27,2011-07-22 09:15:19.798000+00:00 +Internet,LEFT_case-8743,2011-09-12 00:00:00+00:00,General,,2011-09-12 00:00:00.020000+00:00,Group 5,Resource14,2011-07-18 01:06:40.020000+00:00,task-36640,T04 Determine confirmation of receipt,complete,EMPTY,Resource14,2011-09-05 10:55:43.211000+00:00 +Internet,LEFT_case-8743,2011-09-12 00:00:00+00:00,General,,2011-09-12 00:00:00.020000+00:00,Group 5,Resource14,2011-07-18 01:06:40.020000+00:00,task-33178,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-09-05 10:56:26.855000+00:00 +Internet,LEFT_case-8744,2011-09-12 01:06:40+00:00,General,2011-08-17 13:39:47.957000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource13,2011-07-18 01:06:40.020000+00:00,task-33181,Confirmation of receipt,complete,Group 1,Resource27,2011-07-22 09:33:26.440000+00:00 +Internet,LEFT_case-8744,2011-09-12 01:06:40+00:00,General,2011-08-17 13:39:47.957000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource13,2011-07-18 01:06:40.020000+00:00,task-34790,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-08-01 20:51:16.837000+00:00 +Internet,LEFT_case-8744,2011-09-12 01:06:40+00:00,General,2011-08-17 13:39:47.957000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource13,2011-07-18 01:06:40.020000+00:00,task-33184,T06 Determine necessity of stop advice,complete,EMPTY,Resource13,2011-08-01 20:52:31.652000+00:00 +Internet,LEFT_case-8745,2011-08-16 01:06:40+00:00,General,2011-08-25 12:17:08.219000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource06,2011-06-21 01:06:40.020000+00:00,task-33192,Confirmation of receipt,complete,EMPTY,Resource06,2011-08-22 12:23:15.787000+00:00 +Internet,LEFT_case-8745,2011-08-16 01:06:40+00:00,General,2011-08-25 12:17:08.219000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource06,2011-06-21 01:06:40.020000+00:00,task-36911,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-22 12:23:34.814000+00:00 +Internet,LEFT_case-8745,2011-08-16 01:06:40+00:00,General,2011-08-25 12:17:08.219000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource06,2011-06-21 01:06:40.020000+00:00,task-36913,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-22 12:24:25.690000+00:00 +Internet,LEFT_case-8746,2011-09-13 01:06:40+00:00,General,2011-08-23 12:25:02.669000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource06,2011-07-19 01:06:40.020000+00:00,task-33195,Confirmation of receipt,complete,Group 1,Resource27,2011-07-22 10:48:01.228000+00:00 +Internet,LEFT_case-8746,2011-09-13 01:06:40+00:00,General,2011-08-23 12:25:02.669000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource06,2011-07-19 01:06:40.020000+00:00,task-35065,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-03 13:20:52.370000+00:00 +Internet,LEFT_case-8746,2011-09-13 01:06:40+00:00,General,2011-08-23 12:25:02.669000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource06,2011-07-19 01:06:40.020000+00:00,task-33199,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-03 13:21:11.212000+00:00 +Internet,LEFT_case-8749,2011-10-10 01:06:40+00:00,General,2011-08-31 14:45:05.672000+00:00,2011-10-10 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-33209,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 14:15:09.454000+00:00 +Internet,LEFT_case-8749,2011-10-10 01:06:40+00:00,General,2011-08-31 14:45:05.672000+00:00,2011-10-10 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-34105,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 14:15:47.739000+00:00 +Internet,LEFT_case-8749,2011-10-10 01:06:40+00:00,General,2011-08-31 14:45:05.672000+00:00,2011-10-10 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-34104,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 14:17:02.058000+00:00 +Internet,LEFT_case-8750,2011-08-18 01:06:40+00:00,General,2011-09-29 09:43:32.752000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-33218,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 10:46:20.281000+00:00 +Internet,LEFT_case-8750,2011-08-18 01:06:40+00:00,General,2011-09-29 09:43:32.752000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-35331,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 10:47:53.263000+00:00 +Internet,LEFT_case-8750,2011-08-18 01:06:40+00:00,General,2011-09-29 09:43:32.752000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-35330,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 10:48:27.068000+00:00 +Internet,LEFT_case-8754,2011-09-16 14:46:57.572000+00:00,General,2011-10-13 14:29:53.414000+00:00,2011-09-16 14:46:57.572000+00:00,Group 5,Resource22,2011-07-22 14:46:57.572000+00:00,task-33238,Confirmation of receipt,complete,EMPTY,Resource22,2011-10-11 08:56:02.200000+00:00 +Internet,LEFT_case-8754,2011-09-16 14:46:57.572000+00:00,General,2011-10-13 14:29:53.414000+00:00,2011-09-16 14:46:57.572000+00:00,Group 5,Resource22,2011-07-22 14:46:57.572000+00:00,task-42707,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-10-11 08:57:13.231000+00:00 +Internet,LEFT_case-8754,2011-09-16 14:46:57.572000+00:00,General,2011-10-13 14:29:53.414000+00:00,2011-09-16 14:46:57.572000+00:00,Group 5,Resource22,2011-07-22 14:46:57.572000+00:00,task-42706,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-10-11 08:58:46.644000+00:00 +Internet,LEFT_case-8755,2011-08-24 01:06:40+00:00,General,2011-09-14 09:58:37.835000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-06-29 01:06:40.020000+00:00,task-33239,Confirmation of receipt,complete,EMPTY,Resource06,2011-07-29 08:15:08.678000+00:00 +Internet,LEFT_case-8755,2011-08-24 01:06:40+00:00,General,2011-09-14 09:58:37.835000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-06-29 01:06:40.020000+00:00,task-34294,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-29 09:39:24.256000+00:00 +Internet,LEFT_case-8755,2011-08-24 01:06:40+00:00,General,2011-09-14 09:58:37.835000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-06-29 01:06:40.020000+00:00,task-34325,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-29 09:40:15.528000+00:00 +Internet,LEFT_case-8770,2012-02-28 00:00:00+00:00,General,,2012-02-28 00:00:00.010000+00:00,Group 5,Resource04,2011-07-20 01:06:40.020000+00:00,task-33282,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 11:17:45.605000+00:00 +Internet,LEFT_case-8770,2012-02-28 00:00:00+00:00,General,,2012-02-28 00:00:00.010000+00:00,Group 5,Resource04,2011-07-20 01:06:40.020000+00:00,task-33762,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 11:18:38.442000+00:00 +Internet,LEFT_case-8770,2012-02-28 00:00:00+00:00,General,,2012-02-28 00:00:00.010000+00:00,Group 5,Resource04,2011-07-20 01:06:40.020000+00:00,task-33761,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 11:19:14.054000+00:00 +Internet,LEFT_case-8771,2011-10-26 01:06:40+00:00,General,2011-10-05 10:31:29.082000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-33285,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-02 14:13:47.848000+00:00 +Internet,LEFT_case-8771,2011-10-26 01:06:40+00:00,General,2011-10-05 10:31:29.082000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-34934,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-02 14:14:30.759000+00:00 +Internet,LEFT_case-8771,2011-10-26 01:06:40+00:00,General,2011-10-05 10:31:29.082000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-34933,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-02 14:15:03.233000+00:00 +Internet,LEFT_case-8774,2011-09-16 01:06:40+00:00,General,2011-07-26 14:53:09.051000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource06,2011-07-22 01:06:40.020000+00:00,task-33290,Confirmation of receipt,complete,EMPTY,admin2,2011-07-26 14:53:09.884000+00:00 +Internet,LEFT_case-8775,2011-09-16 01:06:40+00:00,General,2011-08-09 09:26:18.340000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-33293,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 15:36:16.459000+00:00 +Internet,LEFT_case-8775,2011-09-16 01:06:40+00:00,General,2011-08-09 09:26:18.340000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34236,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 15:38:37.719000+00:00 +Internet,LEFT_case-8775,2011-09-16 01:06:40+00:00,General,2011-08-09 09:26:18.340000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34235,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 15:40:15.659000+00:00 +Internet,LEFT_case-8776,2011-10-26 01:06:40+00:00,General,2011-10-05 10:27:54.449000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-33299,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 15:11:18.319000+00:00 +Internet,LEFT_case-8776,2011-10-26 01:06:40+00:00,General,2011-10-05 10:27:54.449000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-33834,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 15:17:08.369000+00:00 +Internet,LEFT_case-8776,2011-10-26 01:06:40+00:00,General,2011-10-05 10:27:54.449000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-33833,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-02 11:54:51.998000+00:00 +Internet,LEFT_case-8777,2011-09-16 01:06:40+00:00,General,2011-08-09 11:34:14.669000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-33300,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-29 13:56:08.528000+00:00 +Internet,LEFT_case-8777,2011-09-16 01:06:40+00:00,General,2011-08-09 11:34:14.669000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34453,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-29 13:56:48.714000+00:00 +Internet,LEFT_case-8777,2011-09-16 01:06:40+00:00,General,2011-08-09 11:34:14.669000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34454,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-29 13:57:20.196000+00:00 +Internet,LEFT_case-8778,2011-10-26 01:06:40+00:00,General,2011-10-05 12:40:23.654000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-33301,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 15:10:45.070000+00:00 +Internet,LEFT_case-8778,2011-10-26 01:06:40+00:00,General,2011-10-05 12:40:23.654000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-33836,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 15:18:35.385000+00:00 +Internet,LEFT_case-8778,2011-10-26 01:06:40+00:00,General,2011-10-05 12:40:23.654000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-33831,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-02 12:41:36.677000+00:00 +Internet,LEFT_case-8779,2011-09-16 01:06:40+00:00,General,2011-08-09 09:05:57.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-33302,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-29 14:12:05.171000+00:00 +Internet,LEFT_case-8779,2011-09-16 01:06:40+00:00,General,2011-08-09 09:05:57.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34472,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-29 14:13:14.316000+00:00 +Internet,LEFT_case-8779,2011-09-16 01:06:40+00:00,General,2011-08-09 09:05:57.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34471,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-29 14:15:13.926000+00:00 +Internet,LEFT_case-8780,2011-09-16 01:06:40+00:00,General,2011-11-14 16:02:47.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource12,2011-07-22 01:06:40.020000+00:00,task-33303,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-12 12:24:48.211000+00:00 +Internet,LEFT_case-8780,2011-09-16 01:06:40+00:00,General,2011-11-14 16:02:47.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource12,2011-07-22 01:06:40.020000+00:00,task-38679,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-12 12:25:55.668000+00:00 +Internet,LEFT_case-8780,2011-09-16 01:06:40+00:00,General,2011-11-14 16:02:47.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource12,2011-07-22 01:06:40.020000+00:00,task-38678,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-12 12:27:03.627000+00:00 +Internet,LEFT_case-8782,2011-09-16 01:06:40+00:00,General,2011-09-26 12:37:11.822000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource05,2011-07-22 01:06:40.020000+00:00,task-33307,Confirmation of receipt,complete,EMPTY,Resource05,2011-08-09 08:31:58.154000+00:00 +Internet,LEFT_case-8782,2011-09-16 01:06:40+00:00,General,2011-09-26 12:37:11.822000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource05,2011-07-22 01:06:40.020000+00:00,task-35811,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-09 08:32:59.076000+00:00 +Internet,LEFT_case-8782,2011-09-16 01:06:40+00:00,General,2011-09-26 12:37:11.822000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource05,2011-07-22 01:06:40.020000+00:00,task-35810,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-09 08:33:59.702000+00:00 +Internet,LEFT_case-8783,2011-09-12 01:06:40+00:00,Customer contact,2011-07-25 14:19:14.858000+00:00,2011-09-12 01:06:40.020000+00:00,,admin3,2011-07-18 01:06:40.020000+00:00,task-33310,Confirmation of receipt,complete,Group 1,admin2,2011-07-25 14:19:15.791000+00:00 +Internet,LEFT_case-8784,2011-09-15 01:06:40+00:00,General,2011-08-30 11:49:28.929000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-33311,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 10:52:38.558000+00:00 +Internet,LEFT_case-8784,2011-09-15 01:06:40+00:00,General,2011-08-30 11:49:28.929000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-33972,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 10:54:41.798000+00:00 +Internet,LEFT_case-8784,2011-09-15 01:06:40+00:00,General,2011-08-30 11:49:28.929000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-33971,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 11:11:05.041000+00:00 +Internet,LEFT_case-8785,2011-09-15 01:06:40+00:00,General,2011-08-09 10:29:59.542000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-33312,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 14:55:35.612000+00:00 +Internet,LEFT_case-8785,2011-09-15 01:06:40+00:00,General,2011-08-09 10:29:59.542000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-34156,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 14:56:26.634000+00:00 +Internet,LEFT_case-8785,2011-09-15 01:06:40+00:00,General,2011-08-09 10:29:59.542000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-34155,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 14:57:06.221000+00:00 +Internet,LEFT_case-8786,2011-09-15 01:06:40+00:00,General,2011-08-09 11:58:54.199000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-33313,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 15:23:25.436000+00:00 +Internet,LEFT_case-8786,2011-09-15 01:06:40+00:00,General,2011-08-09 11:58:54.199000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-34206,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 15:24:32.742000+00:00 +Internet,LEFT_case-8786,2011-09-15 01:06:40+00:00,General,2011-08-09 11:58:54.199000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-34204,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 15:25:21.609000+00:00 +Internet,LEFT_case-8796,2011-10-31 01:06:40+00:00,General,2011-10-27 11:41:12.036000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-07-25 01:06:40.020000+00:00,task-33459,Confirmation of receipt,complete,EMPTY,Resource06,2011-07-29 12:26:00.756000+00:00 +Internet,LEFT_case-8796,2011-10-31 01:06:40+00:00,General,2011-10-27 11:41:12.036000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-07-25 01:06:40.020000+00:00,task-34438,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-29 12:26:19.746000+00:00 +Internet,LEFT_case-8796,2011-10-31 01:06:40+00:00,General,2011-10-27 11:41:12.036000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-07-25 01:06:40.020000+00:00,task-34440,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-29 12:26:58.268000+00:00 +Internet,LEFT_case-8798,2011-09-19 01:06:40+00:00,General,2011-08-19 14:11:48.617000+00:00,2011-09-19 01:06:40.020000+00:00,Group 8,Resource01,2011-07-25 01:06:40.020000+00:00,task-33483,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-11 10:37:19.681000+00:00 +Internet,LEFT_case-8798,2011-09-19 01:06:40+00:00,General,2011-08-19 14:11:48.617000+00:00,2011-09-19 01:06:40.020000+00:00,Group 8,Resource01,2011-07-25 01:06:40.020000+00:00,task-36268,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-08-19 14:03:48.678000+00:00 +Internet,LEFT_case-8798,2011-09-19 01:06:40+00:00,General,2011-08-19 14:11:48.617000+00:00,2011-09-19 01:06:40.020000+00:00,Group 8,Resource01,2011-07-25 01:06:40.020000+00:00,task-36267,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-08-19 14:11:49.508000+00:00 +Internet,LEFT_case-8802,2011-08-30 01:06:40+00:00,General,2011-08-08 08:47:37.770000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-33506,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 09:37:15.024000+00:00 +Internet,LEFT_case-8802,2011-08-30 01:06:40+00:00,General,2011-08-08 08:47:37.770000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-35236,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 09:37:51.424000+00:00 +Internet,LEFT_case-8802,2011-08-30 01:06:40+00:00,General,2011-08-08 08:47:37.770000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-35235,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 09:38:23.015000+00:00 +Internet,LEFT_case-8812,2011-09-20 01:06:40+00:00,General,2011-08-02 07:51:55.717000+00:00,2011-09-20 01:06:40.020000+00:00,Group 8,Resource11,2011-07-26 01:06:40.020000+00:00,task-33705,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 09:01:50.194000+00:00 +Internet,LEFT_case-8812,2011-09-20 01:06:40+00:00,General,2011-08-02 07:51:55.717000+00:00,2011-09-20 01:06:40.020000+00:00,Group 8,Resource11,2011-07-26 01:06:40.020000+00:00,task-33892,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 09:02:34.125000+00:00 +Internet,LEFT_case-8812,2011-09-20 01:06:40+00:00,General,2011-08-02 07:51:55.717000+00:00,2011-09-20 01:06:40.020000+00:00,Group 8,Resource11,2011-07-26 01:06:40.020000+00:00,task-33891,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 09:03:11.186000+00:00 +Internet,LEFT_case-8815,2011-08-18 01:06:40+00:00,General,2011-08-15 14:46:00.636000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource05,2011-06-23 01:06:40.020000+00:00,task-33771,Confirmation of receipt,complete,EMPTY,Resource05,2011-08-03 09:03:38.213000+00:00 +Internet,LEFT_case-8815,2011-08-18 01:06:40+00:00,General,2011-08-15 14:46:00.636000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource05,2011-06-23 01:06:40.020000+00:00,task-35002,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-03 09:17:11.394000+00:00 +Internet,LEFT_case-8815,2011-08-18 01:06:40+00:00,General,2011-08-15 14:46:00.636000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource05,2011-06-23 01:06:40.020000+00:00,task-35000,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-03 09:17:57.264000+00:00 +Internet,LEFT_case-8822,2011-08-26 01:06:40+00:00,General,2011-08-26 11:42:50.171000+00:00,2011-08-26 01:06:40.020000+00:00,Group 5,Resource06,2011-07-01 01:06:40.020000+00:00,task-33827,Confirmation of receipt,complete,EMPTY,Resource06,2011-08-03 15:53:29.904000+00:00 +Internet,LEFT_case-8822,2011-08-26 01:06:40+00:00,General,2011-08-26 11:42:50.171000+00:00,2011-08-26 01:06:40.020000+00:00,Group 5,Resource06,2011-07-01 01:06:40.020000+00:00,task-35124,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-03 15:54:05.596000+00:00 +Internet,LEFT_case-8822,2011-08-26 01:06:40+00:00,General,2011-08-26 11:42:50.171000+00:00,2011-08-26 01:06:40.020000+00:00,Group 5,Resource06,2011-07-01 01:06:40.020000+00:00,task-35123,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-03 15:54:42.441000+00:00 +Internet,LEFT_case-8823,2011-11-22 01:06:40+00:00,General,2011-10-10 09:55:02.628000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource02,2011-06-23 01:06:40.020000+00:00,task-33838,Confirmation of receipt,complete,EMPTY,Resource02,2011-08-04 15:25:51.474000+00:00 +Internet,LEFT_case-8823,2011-11-22 01:06:40+00:00,General,2011-10-10 09:55:02.628000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource02,2011-06-23 01:06:40.020000+00:00,task-35489,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-04 15:26:46.830000+00:00 +Internet,LEFT_case-8823,2011-11-22 01:06:40+00:00,General,2011-10-10 09:55:02.628000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource02,2011-06-23 01:06:40.020000+00:00,task-35488,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-04 15:28:51.536000+00:00 +Internet,LEFT_case-8833,2011-09-19 01:06:40+00:00,General,2011-08-30 15:15:19.487000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource12,2011-07-25 01:06:40.020000+00:00,task-33860,Confirmation of receipt,complete,EMPTY,Resource12,2011-08-04 08:46:14.618000+00:00 +Internet,LEFT_case-8833,2011-09-19 01:06:40+00:00,General,2011-08-30 15:15:19.487000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource12,2011-07-25 01:06:40.020000+00:00,task-35206,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-08-04 08:48:19.265000+00:00 +Internet,LEFT_case-8833,2011-09-19 01:06:40+00:00,General,2011-08-30 15:15:19.487000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource12,2011-07-25 01:06:40.020000+00:00,task-35205,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-04 08:50:07.551000+00:00 +Internet,LEFT_case-8837,2011-08-30 01:06:40+00:00,General,2011-08-08 09:03:47.077000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-33935,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 09:48:32.895000+00:00 +Internet,LEFT_case-8837,2011-08-30 01:06:40+00:00,General,2011-08-08 09:03:47.077000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-35269,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 09:49:16.196000+00:00 +Internet,LEFT_case-8837,2011-08-30 01:06:40+00:00,General,2011-08-08 09:03:47.077000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-35268,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 09:49:46.636000+00:00 +Internet,LEFT_case-8839,2011-08-30 00:00:00+00:00,General,2012-01-18 09:56:50.954000+00:00,2011-08-30 00:00:00.020000+00:00,Group 5,Resource14,2011-07-04 01:06:40.020000+00:00,task-33947,Confirmation of receipt,complete,EMPTY,Resource14,2011-08-09 12:17:14.032000+00:00 +Internet,LEFT_case-8839,2011-08-30 00:00:00+00:00,General,2012-01-18 09:56:50.954000+00:00,2011-08-30 00:00:00.020000+00:00,Group 5,Resource14,2011-07-04 01:06:40.020000+00:00,task-35921,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-09 12:18:07.245000+00:00 +Internet,LEFT_case-8839,2011-08-30 00:00:00+00:00,General,2012-01-18 09:56:50.954000+00:00,2011-08-30 00:00:00.020000+00:00,Group 5,Resource14,2011-07-04 01:06:40.020000+00:00,task-35920,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-09 12:20:43.465000+00:00 +Internet,LEFT_case-8840,2011-09-20 01:06:40+00:00,General,2011-08-30 12:28:15.307000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource06,2011-07-26 01:06:40.020000+00:00,task-33951,Confirmation of receipt,complete,EMPTY,Resource06,2011-08-04 08:39:44.970000+00:00 +Internet,LEFT_case-8840,2011-09-20 01:06:40+00:00,General,2011-08-30 12:28:15.307000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource06,2011-07-26 01:06:40.020000+00:00,task-35188,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-04 08:40:20.179000+00:00 +Internet,LEFT_case-8840,2011-09-20 01:06:40+00:00,General,2011-08-30 12:28:15.307000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource06,2011-07-26 01:06:40.020000+00:00,task-35187,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-04 08:41:54.151000+00:00 +Internet,LEFT_case-8841,2011-09-21 01:06:40+00:00,General,2011-08-18 08:10:00.879000+00:00,2011-09-21 01:06:40.020000+00:00,Group 8,Resource11,2011-07-27 01:06:40.020000+00:00,task-33967,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-11 08:53:05.442000+00:00 +Internet,LEFT_case-8841,2011-09-21 01:06:40+00:00,General,2011-08-18 08:10:00.879000+00:00,2011-09-21 01:06:40.020000+00:00,Group 8,Resource11,2011-07-27 01:06:40.020000+00:00,task-36177,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-11 08:53:40.240000+00:00 +Internet,LEFT_case-8841,2011-09-21 01:06:40+00:00,General,2011-08-18 08:10:00.879000+00:00,2011-09-21 01:06:40.020000+00:00,Group 8,Resource11,2011-07-27 01:06:40.020000+00:00,task-36176,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-11 08:54:39.774000+00:00 +Internet,LEFT_case-8842,2011-08-30 01:06:40+00:00,General,2011-08-08 08:41:27.017000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-33969,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 10:20:33.171000+00:00 +Internet,LEFT_case-8842,2011-08-30 01:06:40+00:00,General,2011-08-08 08:41:27.017000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-35307,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 10:21:15.634000+00:00 +Internet,LEFT_case-8842,2011-08-30 01:06:40+00:00,General,2011-08-08 08:41:27.017000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-35306,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 10:21:52.096000+00:00 +Internet,LEFT_case-8844,2011-09-21 01:06:40+00:00,General,2011-11-22 09:38:17.689000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource02,2011-07-27 01:06:40.020000+00:00,task-33978,Confirmation of receipt,complete,EMPTY,Resource02,2011-08-19 11:12:50.362000+00:00 +Internet,LEFT_case-8844,2011-09-21 01:06:40+00:00,General,2011-11-22 09:38:17.689000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource02,2011-07-27 01:06:40.020000+00:00,task-36813,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-19 11:17:53.079000+00:00 +Internet,LEFT_case-8844,2011-09-21 01:06:40+00:00,General,2011-11-22 09:38:17.689000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource02,2011-07-27 01:06:40.020000+00:00,task-36812,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-19 11:21:01.840000+00:00 +Internet,LEFT_case-8847,2011-09-21 01:06:40+00:00,General,2011-08-30 14:37:31.919000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource05,2011-07-27 01:06:40.020000+00:00,task-34003,Confirmation of receipt,complete,EMPTY,Resource05,2011-08-03 10:01:03.756000+00:00 +Internet,LEFT_case-8847,2011-09-21 01:06:40+00:00,General,2011-08-30 14:37:31.919000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource05,2011-07-27 01:06:40.020000+00:00,task-35031,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-03 10:02:08.192000+00:00 +Internet,LEFT_case-8847,2011-09-21 01:06:40+00:00,General,2011-08-30 14:37:31.919000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource05,2011-07-27 01:06:40.020000+00:00,task-35030,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-03 10:03:20.534000+00:00 +Internet,LEFT_case-8848,2011-09-22 11:42:57.229000+00:00,General,2011-08-09 09:33:16.510000+00:00,2011-09-22 11:42:57.229000+00:00,Group 8,Resource11,2011-07-28 11:42:57.229000+00:00,task-34018,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 09:59:05.463000+00:00 +Internet,LEFT_case-8848,2011-09-22 11:42:57.229000+00:00,General,2011-08-09 09:33:16.510000+00:00,2011-09-22 11:42:57.229000+00:00,Group 8,Resource11,2011-07-28 11:42:57.229000+00:00,task-35289,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 09:59:43.384000+00:00 +Internet,LEFT_case-8848,2011-09-22 11:42:57.229000+00:00,General,2011-08-09 09:33:16.510000+00:00,2011-09-22 11:42:57.229000+00:00,Group 8,Resource11,2011-07-28 11:42:57.229000+00:00,task-35288,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 10:00:17.269000+00:00 +Internet,LEFT_case-8849,2011-08-31 01:06:40+00:00,General,2011-08-04 11:29:19.019000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource04,2011-07-05 01:06:40.020000+00:00,task-34026,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-03 15:55:27.259000+00:00 +Internet,LEFT_case-8849,2011-08-31 01:06:40+00:00,General,2011-08-04 11:29:19.019000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource04,2011-07-05 01:06:40.020000+00:00,task-35134,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-03 15:56:19.760000+00:00 +Internet,LEFT_case-8849,2011-08-31 01:06:40+00:00,General,2011-08-04 11:29:19.019000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource04,2011-07-05 01:06:40.020000+00:00,task-35132,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-03 15:57:10.427000+00:00 +Internet,LEFT_case-8851,2011-09-01 01:06:40+00:00,General,,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-34085,Confirmation of receipt,complete,EMPTY,Resource14,2011-08-10 12:24:02.297000+00:00 +Internet,LEFT_case-8851,2011-09-01 01:06:40+00:00,General,,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-36080,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-10 12:25:07.162000+00:00 +Internet,LEFT_case-8851,2011-09-01 01:06:40+00:00,General,,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-36079,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-10 12:26:11.567000+00:00 +Internet,LEFT_case-8852,2011-09-01 01:06:40+00:00,General,2011-08-29 12:24:36.662000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-34094,Confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:40:30.301000+00:00 +Internet,LEFT_case-8852,2011-09-01 01:06:40+00:00,General,2011-08-29 12:24:36.662000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-35105,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-08-03 15:42:29.092000+00:00 +Internet,LEFT_case-8852,2011-09-01 01:06:40+00:00,General,2011-08-29 12:24:36.662000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-35108,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:43:57.368000+00:00 +Internet,LEFT_case-8853,2011-08-31 01:06:40+00:00,General,2011-08-29 12:52:51.806000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource13,2011-07-06 01:06:40.020000+00:00,task-34096,Confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:04:37.733000+00:00 +Internet,LEFT_case-8853,2011-08-31 01:06:40+00:00,General,2011-08-29 12:52:51.806000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource13,2011-07-06 01:06:40.020000+00:00,task-35083,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:08:16.825000+00:00 +Internet,LEFT_case-8853,2011-08-31 01:06:40+00:00,General,2011-08-29 12:52:51.806000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource13,2011-07-06 01:06:40.020000+00:00,task-35082,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-08-03 15:08:58.365000+00:00 +Internet,LEFT_case-8854,2011-08-04 01:06:40+00:00,General,2011-10-05 09:14:52.564000+00:00,2011-08-04 01:06:40.020000+00:00,Group 11,Resource24,2011-06-09 01:06:40.020000+00:00,task-34097,Confirmation of receipt,complete,EMPTY,Resource09,2011-08-02 15:36:37.720000+00:00 +Internet,LEFT_case-8854,2011-08-04 01:06:40+00:00,General,2011-10-05 09:14:52.564000+00:00,2011-08-04 01:06:40.020000+00:00,Group 11,Resource24,2011-06-09 01:06:40.020000+00:00,task-34951,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-08-02 15:38:38.518000+00:00 +Internet,LEFT_case-8854,2011-08-04 01:06:40+00:00,General,2011-10-05 09:14:52.564000+00:00,2011-08-04 01:06:40.020000+00:00,Group 11,Resource24,2011-06-09 01:06:40.020000+00:00,task-34950,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-08-02 15:39:28.302000+00:00 +Internet,LEFT_case-8855,2011-09-01 01:06:40+00:00,General,2011-08-18 07:55:06.759000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-34113,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 13:11:13.023000+00:00 +Internet,LEFT_case-8855,2011-09-01 01:06:40+00:00,General,2011-08-18 07:55:06.759000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-35404,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 13:12:51.212000+00:00 +Internet,LEFT_case-8855,2011-09-01 01:06:40+00:00,General,2011-08-18 07:55:06.759000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-35403,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 13:13:56.694000+00:00 +Internet,LEFT_case-8856,2011-09-02 01:06:40+00:00,General,2011-10-04 08:42:50.217000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource01,2011-07-08 01:06:40.020000+00:00,task-34131,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 12:03:43.336000+00:00 +Internet,LEFT_case-8856,2011-09-02 01:06:40+00:00,General,2011-10-04 08:42:50.217000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource01,2011-07-08 01:06:40.020000+00:00,task-35383,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 12:47:05.201000+00:00 +Internet,LEFT_case-8856,2011-09-02 01:06:40+00:00,General,2011-10-04 08:42:50.217000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource01,2011-07-08 01:06:40.020000+00:00,task-35367,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 12:48:34.861000+00:00 +Internet,LEFT_case-8858,2011-09-01 01:06:40+00:00,General,2011-11-09 16:11:48.715000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-34153,Confirmation of receipt,complete,EMPTY,Resource14,2011-08-16 14:13:19.944000+00:00 +Internet,LEFT_case-8858,2011-09-01 01:06:40+00:00,General,2011-11-09 16:11:48.715000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-36544,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-16 14:28:19.502000+00:00 +Internet,LEFT_case-8858,2011-09-01 01:06:40+00:00,General,2011-11-09 16:11:48.715000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-36551,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-16 14:30:58.954000+00:00 +Internet,LEFT_case-8863,2011-10-19 01:06:40+00:00,General,2011-10-04 15:36:34.804000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource02,2011-07-11 01:06:40.020000+00:00,task-34196,Confirmation of receipt,complete,EMPTY,Resource02,2011-08-08 14:38:14.155000+00:00 +Internet,LEFT_case-8863,2011-10-19 01:06:40+00:00,General,2011-10-04 15:36:34.804000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource02,2011-07-11 01:06:40.020000+00:00,task-35679,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-08 14:39:22.139000+00:00 +Internet,LEFT_case-8863,2011-10-19 01:06:40+00:00,General,2011-10-04 15:36:34.804000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource02,2011-07-11 01:06:40.020000+00:00,task-35678,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-08 14:40:18.949000+00:00 +Internet,LEFT_case-8864,2011-09-06 01:06:40+00:00,General,2011-08-18 08:01:10.666000+00:00,2011-09-06 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-34230,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 15:31:38.201000+00:00 +Internet,LEFT_case-8864,2011-09-06 01:06:40+00:00,General,2011-08-18 08:01:10.666000+00:00,2011-09-06 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-35495,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 15:32:18.665000+00:00 +Internet,LEFT_case-8864,2011-09-06 01:06:40+00:00,General,2011-08-18 08:01:10.666000+00:00,2011-09-06 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-35494,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 15:32:52.326000+00:00 +Internet,LEFT_case-8905,2011-09-26 01:06:40+00:00,General,2011-08-02 10:41:40.140000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource02,2011-08-01 01:06:40.020000+00:00,task-34681,Confirmation of receipt,complete,Group 1,Resource02,2011-08-01 15:20:40.408000+00:00 +Internet,LEFT_case-8905,2011-09-26 01:06:40+00:00,General,2011-08-02 10:41:40.140000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource02,2011-08-01 01:06:40.020000+00:00,task-34763,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-01 15:21:22.927000+00:00 +Internet,LEFT_case-8905,2011-09-26 01:06:40+00:00,General,2011-08-02 10:41:40.140000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource02,2011-08-01 01:06:40.020000+00:00,task-34761,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-01 15:23:51.774000+00:00 +Internet,LEFT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-4,Confirmation of receipt,complete,Group 1,Resource26,2010-10-02 09:20:39.266000+00:00 +Internet,LEFT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-7,T03 Adjust confirmation of receipt,complete,Group 1,Resource26,2010-10-02 09:31:12.836000+00:00 +Internet,LEFT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-9,T03 Adjust confirmation of receipt,complete,Group 1,Resource26,2010-10-02 09:32:01.401000+00:00 +Internet,LEFT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1275,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2010-11-09 14:14:10.016000+00:00 +Internet,LEFT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-6,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2010-11-09 14:14:37.300000+00:00 +Internet,LEFT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1278,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2010-11-10 07:52:33.800000+00:00 +Internet,LEFT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1336,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2010-11-10 07:53:08.065000+00:00 +Internet,LEFT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1338,T11 Create document X request unlicensed,complete,Group 1,admin1,2010-11-10 09:38:57.202000+00:00 +Internet,LEFT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1340,T14 Determine document X request unlicensed,complete,Group 3,admin1,2010-11-10 09:39:21.494000+00:00 +Internet,LEFT_case-8919,2011-09-29 01:06:40+00:00,General,2011-09-12 10:44:33.854000+00:00,2011-09-29 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-34927,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-10 10:27:23.598000+00:00 +Internet,LEFT_case-8919,2011-09-29 01:06:40+00:00,General,2011-09-12 10:44:33.854000+00:00,2011-09-29 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-36026,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-10 10:35:54.845000+00:00 +Internet,LEFT_case-8919,2011-09-29 01:06:40+00:00,General,2011-09-12 10:44:33.854000+00:00,2011-09-29 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-36025,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-10 10:37:22.264000+00:00 +Internet,LEFT_case-8921,2011-08-18 01:06:40+00:00,General,2011-08-09 14:32:23.632000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource04,2011-06-22 01:06:40.020000+00:00,task-34930,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-09 12:38:23.664000+00:00 +Internet,LEFT_case-8921,2011-08-18 01:06:40+00:00,General,2011-08-09 14:32:23.632000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource04,2011-06-22 01:06:40.020000+00:00,task-35936,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-09 12:39:17.208000+00:00 +Internet,LEFT_case-8921,2011-08-18 01:06:40+00:00,General,2011-08-09 14:32:23.632000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource04,2011-06-22 01:06:40.020000+00:00,task-35934,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-09 12:39:51.234000+00:00 +Internet,LEFT_case-8921,2011-08-18 01:06:40+00:00,General,2011-08-09 14:32:23.632000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource04,2011-06-22 01:06:40.020000+00:00,task-35940,T11 Create document X request unlicensed,complete,Group 1,Resource04,2011-08-09 14:31:12.429000+00:00 +Internet,LEFT_case-8921,2011-08-18 01:06:40+00:00,General,2011-08-09 14:32:23.632000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource04,2011-06-22 01:06:40.020000+00:00,task-35960,T14 Determine document X request unlicensed,complete,Group 3,Resource04,2011-08-09 14:32:00.893000+00:00 +Internet,LEFT_case-8922,2011-09-20 01:06:40+00:00,General,2011-09-14 11:50:53.694000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource04,2011-07-14 01:06:40.020000+00:00,task-34947,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-08 14:56:56.883000+00:00 +Internet,LEFT_case-8922,2011-09-20 01:06:40+00:00,General,2011-09-14 11:50:53.694000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource04,2011-07-14 01:06:40.020000+00:00,task-35705,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-08 14:57:37.893000+00:00 +Internet,LEFT_case-8922,2011-09-20 01:06:40+00:00,General,2011-09-14 11:50:53.694000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource04,2011-07-14 01:06:40.020000+00:00,task-35704,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-08 15:15:44.899000+00:00 +Internet,LEFT_case-8923,2011-11-08 01:06:40+00:00,General,2011-10-04 11:51:03.131000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource13,2011-07-25 01:06:40.020000+00:00,task-34958,Confirmation of receipt,complete,EMPTY,Resource13,2011-08-15 09:37:07.097000+00:00 +Internet,LEFT_case-8923,2011-11-08 01:06:40+00:00,General,2011-10-04 11:51:03.131000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource13,2011-07-25 01:06:40.020000+00:00,task-36413,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-08-15 09:37:27.921000+00:00 +Internet,LEFT_case-8923,2011-11-08 01:06:40+00:00,General,2011-10-04 11:51:03.131000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource13,2011-07-25 01:06:40.020000+00:00,task-36416,T04 Determine confirmation of receipt,complete,Group 3,Resource13,2011-08-15 09:38:43.809000+00:00 +Internet,LEFT_case-8932,2011-09-09 01:06:40+00:00,General,2011-08-15 09:04:11.312000+00:00,2011-09-09 01:06:40.020000+00:00,Group 5,Resource09,2011-07-15 01:06:40.020000+00:00,task-34989,Confirmation of receipt,complete,Group 1,admin2,2011-08-15 09:04:12.097000+00:00 +Internet,LEFT_case-8934,2011-09-19 01:06:40+00:00,General,2011-09-12 14:12:18.624000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource05,2011-07-25 01:06:40.020000+00:00,task-35001,Confirmation of receipt,complete,Group 1,Resource05,2011-08-11 09:25:50.571000+00:00 +Internet,LEFT_case-8934,2011-09-19 01:06:40+00:00,General,2011-09-12 14:12:18.624000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource05,2011-07-25 01:06:40.020000+00:00,task-36219,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-11 09:26:19.437000+00:00 +Internet,LEFT_case-8934,2011-09-19 01:06:40+00:00,General,2011-09-12 14:12:18.624000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource05,2011-07-25 01:06:40.020000+00:00,task-36221,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-11 09:27:01.459000+00:00 +Internet,LEFT_case-8936,2011-11-01 01:06:40+00:00,General,2011-11-07 15:47:19.133000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-35028,Confirmation of receipt,complete,Group 1,Resource02,2011-08-10 15:03:16.600000+00:00 +Internet,LEFT_case-8936,2011-11-01 01:06:40+00:00,General,2011-11-07 15:47:19.133000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-36118,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-10 15:04:03.653000+00:00 +Internet,LEFT_case-8936,2011-11-01 01:06:40+00:00,General,2011-11-07 15:47:19.133000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-36117,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-10 15:04:39.823000+00:00 +Internet,LEFT_case-8954,2011-11-18 01:06:40+00:00,General,2011-11-16 10:10:47.056000+00:00,2011-11-18 01:06:40.010000+00:00,Group 5,Resource23,2011-07-22 01:06:40.020000+00:00,task-35230,Confirmation of receipt,complete,Group 1,Resource04,2011-08-04 11:33:25.033000+00:00 +Internet,LEFT_case-8954,2011-11-18 01:06:40+00:00,General,2011-11-16 10:10:47.056000+00:00,2011-11-18 01:06:40.010000+00:00,Group 5,Resource23,2011-07-22 01:06:40.020000+00:00,task-35357,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-04 11:34:05.872000+00:00 +Internet,LEFT_case-8954,2011-11-18 01:06:40+00:00,General,2011-11-16 10:10:47.056000+00:00,2011-11-18 01:06:40.010000+00:00,Group 5,Resource23,2011-07-22 01:06:40.020000+00:00,task-35356,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-04 11:34:42.221000+00:00 +Internet,LEFT_case-8958,2011-09-16 01:06:40+00:00,General,2011-10-31 16:46:01.941000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource14,2011-07-22 01:06:40.020000+00:00,task-35321,Confirmation of receipt,complete,Group 1,Resource14,2011-08-09 10:11:55.902000+00:00 +Internet,LEFT_case-8958,2011-09-16 01:06:40+00:00,General,2011-10-31 16:46:01.941000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource14,2011-07-22 01:06:40.020000+00:00,task-35872,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-09 10:12:56.494000+00:00 +Internet,LEFT_case-8958,2011-09-16 01:06:40+00:00,General,2011-10-31 16:46:01.941000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource14,2011-07-22 01:06:40.020000+00:00,task-35871,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-09 10:41:14.999000+00:00 +Internet,LEFT_case-8959,2011-09-23 01:06:40+00:00,General,2011-09-12 13:55:36.171000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-35353,Confirmation of receipt,complete,Group 1,Resource01,2011-08-10 14:16:59.274000+00:00 +Internet,LEFT_case-8959,2011-09-23 01:06:40+00:00,General,2011-09-12 13:55:36.171000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36094,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-10 14:17:50.313000+00:00 +Internet,LEFT_case-8959,2011-09-23 01:06:40+00:00,General,2011-09-12 13:55:36.171000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36093,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-10 14:19:30.470000+00:00 +Internet,LEFT_case-8962,2011-09-23 01:06:40+00:00,General,2011-08-18 08:15:43.236000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-35364,Confirmation of receipt,complete,Group 1,Resource01,2011-08-10 15:32:50.308000+00:00 +Internet,LEFT_case-8962,2011-09-23 01:06:40+00:00,General,2011-08-18 08:15:43.236000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36136,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-10 15:34:56.533000+00:00 +Internet,LEFT_case-8962,2011-09-23 01:06:40+00:00,General,2011-08-18 08:15:43.236000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36134,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-10 15:35:35.913000+00:00 +Internet,LEFT_case-8964,2011-09-23 01:06:40+00:00,General,2011-08-18 08:30:02.345000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-35417,Confirmation of receipt,complete,Group 1,Resource01,2011-08-11 09:17:34.597000+00:00 +Internet,LEFT_case-8964,2011-09-23 01:06:40+00:00,General,2011-08-18 08:30:02.345000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36199,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-11 09:18:25.057000+00:00 +Internet,LEFT_case-8964,2011-09-23 01:06:40+00:00,General,2011-08-18 08:30:02.345000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36198,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-11 09:19:04.671000+00:00 +Internet,LEFT_case-8967,2011-10-31 01:06:40+00:00,General,2011-10-28 15:56:53.545000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource04,2011-07-29 01:06:40.020000+00:00,task-35469,Confirmation of receipt,complete,Group 1,Resource04,2011-08-15 14:47:45.427000+00:00 +Internet,LEFT_case-8967,2011-10-31 01:06:40+00:00,General,2011-10-28 15:56:53.545000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource04,2011-07-29 01:06:40.020000+00:00,task-36465,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-15 14:48:41.486000+00:00 +Internet,LEFT_case-8967,2011-10-31 01:06:40+00:00,General,2011-10-28 15:56:53.545000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource04,2011-07-29 01:06:40.020000+00:00,task-36464,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-15 14:59:03.928000+00:00 +Internet,LEFT_case-8969,2011-09-26 01:06:40+00:00,General,2011-09-08 00:00:00.020000+00:00,2011-09-26 01:06:40.020000+00:00,Group 8,Resource01,2011-08-01 01:06:40.020000+00:00,task-35484,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 08:59:20.294000+00:00 +Internet,LEFT_case-8969,2011-09-26 01:06:40+00:00,General,2011-09-08 00:00:00.020000+00:00,2011-09-26 01:06:40.020000+00:00,Group 8,Resource01,2011-08-01 01:06:40.020000+00:00,task-38256,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-09-09 09:22:30.850000+00:00 +Internet,LEFT_case-8969,2011-09-26 01:06:40+00:00,General,2011-09-08 00:00:00.020000+00:00,2011-09-26 01:06:40.020000+00:00,Group 8,Resource01,2011-08-01 01:06:40.020000+00:00,task-38255,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-09-15 09:36:09.253000+00:00 +Internet,LEFT_case-8977,2011-09-23 01:06:40+00:00,General,,2011-09-23 01:06:40.020000+00:00,Group 5,Resource09,2011-07-29 01:06:40.020000+00:00,task-35530,Confirmation of receipt,complete,EMPTY,Resource30,2011-09-14 13:20:07.989000+00:00 +Internet,LEFT_case-8982,2011-09-24 01:06:40+00:00,General,2011-08-30 10:01:11.614000+00:00,2011-09-24 01:06:40.020000+00:00,Group 5,Resource13,2011-07-30 01:06:40.020000+00:00,task-35535,Confirmation of receipt,complete,EMPTY,Resource13,2011-08-12 11:47:42.594000+00:00 +Internet,LEFT_case-8982,2011-09-24 01:06:40+00:00,General,2011-08-30 10:01:11.614000+00:00,2011-09-24 01:06:40.020000+00:00,Group 5,Resource13,2011-07-30 01:06:40.020000+00:00,task-36343,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-08-12 11:50:06.654000+00:00 +Internet,LEFT_case-8982,2011-09-24 01:06:40+00:00,General,2011-08-30 10:01:11.614000+00:00,2011-09-24 01:06:40.020000+00:00,Group 5,Resource13,2011-07-30 01:06:40.020000+00:00,task-36342,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-08-12 11:53:06.407000+00:00 +Internet,LEFT_case-8983,2011-11-05 01:06:40+00:00,General,2011-10-31 11:27:42.585000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource02,2011-07-30 01:06:40.020000+00:00,task-35536,Confirmation of receipt,complete,Group 1,Resource02,2011-08-22 08:46:15.702000+00:00 +Internet,LEFT_case-8983,2011-11-05 01:06:40+00:00,General,2011-10-31 11:27:42.585000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource02,2011-07-30 01:06:40.020000+00:00,task-36887,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-22 09:05:22.802000+00:00 +Internet,LEFT_case-8983,2011-11-05 01:06:40+00:00,General,2011-10-31 11:27:42.585000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource02,2011-07-30 01:06:40.020000+00:00,task-36886,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-09-25 18:17:48.604000+00:00 +Internet,LEFT_case-8986,2011-09-26 01:06:40+00:00,General,2011-11-18 09:55:27.554000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource14,2011-08-01 01:06:40.020000+00:00,task-35539,Confirmation of receipt,complete,Group 1,Resource14,2011-08-26 12:50:15.651000+00:00 +Internet,LEFT_case-8986,2011-09-26 01:06:40+00:00,General,2011-11-18 09:55:27.554000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource14,2011-08-01 01:06:40.020000+00:00,task-37228,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-26 12:50:58.097000+00:00 +Internet,LEFT_case-8986,2011-09-26 01:06:40+00:00,General,2011-11-18 09:55:27.554000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource14,2011-08-01 01:06:40.020000+00:00,task-37227,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-29 10:40:23.636000+00:00 +Internet,LEFT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-35555,Confirmation of receipt,complete,Group 1,Resource12,2011-08-11 14:25:17.524000+00:00 +Internet,LEFT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36296,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-08-11 14:26:51.380000+00:00 +Internet,LEFT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36295,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-11 14:33:07.403000+00:00 +Internet,LEFT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36299,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource12,2011-08-11 14:35:16.881000+00:00 +Internet,LEFT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36300,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource12,2011-08-11 14:45:44.795000+00:00 +Internet,LEFT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36301,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-11 14:46:35.333000+00:00 +Internet,LEFT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36303,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource12,2011-08-11 14:47:03.653000+00:00 +Internet,LEFT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36302,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource12,2011-08-11 14:47:22.767000+00:00 +Internet,LEFT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36304,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-11 14:47:46.348000+00:00 +Internet,LEFT_case-8992,2011-09-27 01:06:40+00:00,General,2011-09-01 00:00:00.020000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-35558,Confirmation of receipt,complete,EMPTY,admin2,2011-09-26 08:35:08.169000+00:00 +Internet,LEFT_case-8993,2011-11-05 01:06:40+00:00,General,2011-10-31 11:31:25.901000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource06,2011-08-03 01:06:40.020000+00:00,task-35559,Confirmation of receipt,complete,Group 1,Resource06,2011-08-10 08:46:13.009000+00:00 +Internet,LEFT_case-8993,2011-11-05 01:06:40+00:00,General,2011-10-31 11:31:25.901000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource06,2011-08-03 01:06:40.020000+00:00,task-35996,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-10 08:47:00.406000+00:00 +Internet,LEFT_case-8993,2011-11-05 01:06:40+00:00,General,2011-10-31 11:31:25.901000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource06,2011-08-03 01:06:40.020000+00:00,task-35995,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-10 08:47:37.307000+00:00 +Internet,LEFT_case-8998,2011-09-19 01:06:40+00:00,General,2011-11-25 10:13:25.412000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource14,2011-07-25 01:06:40.020000+00:00,task-35583,Confirmation of receipt,complete,Group 1,Resource14,2011-08-11 09:19:07.312000+00:00 +Internet,LEFT_case-8998,2011-09-19 01:06:40+00:00,General,2011-11-25 10:13:25.412000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource14,2011-07-25 01:06:40.020000+00:00,task-36205,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-11 09:20:17.986000+00:00 +Internet,LEFT_case-8998,2011-09-19 01:06:40+00:00,General,2011-11-25 10:13:25.412000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource14,2011-07-25 01:06:40.020000+00:00,task-36203,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-11 10:19:57.784000+00:00 +Internet,LEFT_case-9004,2011-09-21 01:06:40+00:00,General,2011-10-17 16:51:57.398000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource14,2011-07-27 01:06:40.020000+00:00,task-35714,Confirmation of receipt,complete,Group 1,Resource14,2011-08-16 11:14:52.974000+00:00 +Internet,LEFT_case-9004,2011-09-21 01:06:40+00:00,General,2011-10-17 16:51:57.398000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource14,2011-07-27 01:06:40.020000+00:00,task-36513,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-16 11:16:26.667000+00:00 +Internet,LEFT_case-9004,2011-09-21 01:06:40+00:00,General,2011-10-17 16:51:57.398000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource14,2011-07-27 01:06:40.020000+00:00,task-36512,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-16 11:54:43.404000+00:00 +Internet,LEFT_case-9011,2011-09-20 01:06:40+00:00,General,2011-08-29 11:39:41.422000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-35929,Confirmation of receipt,complete,Group 1,Resource02,2011-08-18 09:03:47.712000+00:00 +Internet,LEFT_case-9011,2011-09-20 01:06:40+00:00,General,2011-08-29 11:39:41.422000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-36711,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-18 09:04:46.787000+00:00 +Internet,LEFT_case-9011,2011-09-20 01:06:40+00:00,General,2011-08-29 11:39:41.422000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-36710,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-18 09:06:46.928000+00:00 +Internet,LEFT_case-9012,2011-09-29 01:06:40+00:00,General,2011-10-18 08:40:01.225000+00:00,2011-09-29 01:06:40.020000+00:00,Group 5,Resource12,2011-08-04 01:06:40.020000+00:00,task-35958,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-23 14:35:40.202000+00:00 +Internet,LEFT_case-9012,2011-09-29 01:06:40+00:00,General,2011-10-18 08:40:01.225000+00:00,2011-09-29 01:06:40.020000+00:00,Group 5,Resource12,2011-08-04 01:06:40.020000+00:00,task-40152,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-23 14:36:54.957000+00:00 +Internet,LEFT_case-9012,2011-09-29 01:06:40+00:00,General,2011-10-18 08:40:01.225000+00:00,2011-09-29 01:06:40.020000+00:00,Group 5,Resource12,2011-08-04 01:06:40.020000+00:00,task-40151,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-23 14:38:01.057000+00:00 +Internet,LEFT_case-9013,2011-09-30 01:06:40+00:00,General,2011-09-29 15:21:29.582000+00:00,2011-09-30 01:06:40.020000+00:00,,admin1,2011-08-05 01:06:40.020000+00:00,task-35962,Confirmation of receipt,complete,EMPTY,Resource09,2011-09-23 14:15:36.688000+00:00 +Internet,LEFT_case-9013,2011-09-30 01:06:40+00:00,General,2011-09-29 15:21:29.582000+00:00,2011-09-30 01:06:40.020000+00:00,,admin1,2011-08-05 01:06:40.020000+00:00,task-40128,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-09-23 14:16:28.347000+00:00 +Internet,LEFT_case-9013,2011-09-30 01:06:40+00:00,General,2011-09-29 15:21:29.582000+00:00,2011-09-30 01:06:40.020000+00:00,,admin1,2011-08-05 01:06:40.020000+00:00,task-40129,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-09-23 14:16:47.753000+00:00 +Internet,LEFT_case-9014,2011-09-30 01:06:40+00:00,General,2011-08-26 13:49:10.193000+00:00,2011-09-30 01:06:40.020000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-35970,Confirmation of receipt,complete,Group 1,Resource04,2011-08-19 14:26:09.623000+00:00 +Internet,LEFT_case-9014,2011-09-30 01:06:40+00:00,General,2011-08-26 13:49:10.193000+00:00,2011-09-30 01:06:40.020000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-36856,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-19 14:26:53.536000+00:00 +Internet,LEFT_case-9014,2011-09-30 01:06:40+00:00,General,2011-08-26 13:49:10.193000+00:00,2011-09-30 01:06:40.020000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-36855,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-24 12:35:45.035000+00:00 +Internet,LEFT_case-9016,2011-11-14 01:06:40+00:00,General,2011-09-22 14:17:37.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-08-08 01:06:40.020000+00:00,task-35987,Confirmation of receipt,complete,Group 1,Resource06,2011-08-19 12:18:13.372000+00:00 +Internet,LEFT_case-9016,2011-11-14 01:06:40+00:00,General,2011-09-22 14:17:37.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-08-08 01:06:40.020000+00:00,task-36842,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-19 12:19:20.102000+00:00 +Internet,LEFT_case-9016,2011-11-14 01:06:40+00:00,General,2011-09-22 14:17:37.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-08-08 01:06:40.020000+00:00,task-36841,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-19 12:23:02.680000+00:00 +Internet,LEFT_case-9026,2011-11-25 01:06:40+00:00,General,2011-11-07 11:21:25.159000+00:00,2011-11-25 01:06:40.010000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-36158,Confirmation of receipt,complete,Group 1,Resource04,2011-08-17 16:18:25.744000+00:00 +Internet,LEFT_case-9026,2011-11-25 01:06:40+00:00,General,2011-11-07 11:21:25.159000+00:00,2011-11-25 01:06:40.010000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-36669,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-17 16:19:03.116000+00:00 +Internet,LEFT_case-9026,2011-11-25 01:06:40+00:00,General,2011-11-07 11:21:25.159000+00:00,2011-11-25 01:06:40.010000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-36668,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-17 16:19:43.773000+00:00 +Internet,LEFT_case-9032,2011-10-03 00:00:00+00:00,General,2012-01-17 13:52:44.800000+00:00,2011-10-03 00:00:00.020000+00:00,Group 5,Resource14,2011-08-08 01:06:40.020000+00:00,task-36192,Confirmation of receipt,complete,EMPTY,Resource14,2011-10-19 08:59:01.108000+00:00 +Internet,LEFT_case-9032,2011-10-03 00:00:00+00:00,General,2012-01-17 13:52:44.800000+00:00,2011-10-03 00:00:00.020000+00:00,Group 5,Resource14,2011-08-08 01:06:40.020000+00:00,task-43821,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-10-19 09:00:03.974000+00:00 +Internet,LEFT_case-9032,2011-10-03 00:00:00+00:00,General,2012-01-17 13:52:44.800000+00:00,2011-10-03 00:00:00.020000+00:00,Group 5,Resource14,2011-08-08 01:06:40.020000+00:00,task-43820,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-10-19 09:01:11.070000+00:00 +Internet,LEFT_case-9033,2011-11-24 01:06:40+00:00,General,2011-11-18 10:34:52.323000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource02,2011-08-10 01:06:40.020000+00:00,task-36229,Confirmation of receipt,complete,Group 1,Resource02,2011-08-17 14:17:51.542000+00:00 +Internet,LEFT_case-9033,2011-11-24 01:06:40+00:00,General,2011-11-18 10:34:52.323000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource02,2011-08-10 01:06:40.020000+00:00,task-36647,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-17 14:18:37.866000+00:00 +Internet,LEFT_case-9033,2011-11-24 01:06:40+00:00,General,2011-11-18 10:34:52.323000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource02,2011-08-10 01:06:40.020000+00:00,task-36646,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-17 14:19:46.790000+00:00 +Internet,LEFT_case-9040,2011-10-06 01:06:40+00:00,General,2011-09-12 14:11:45.124000+00:00,2011-10-06 01:06:40.020000+00:00,Group 8,Resource11,2011-08-11 01:06:40.020000+00:00,task-36311,Confirmation of receipt,complete,Group 1,Resource01,2011-08-18 10:44:35.702000+00:00 +Internet,LEFT_case-9040,2011-10-06 01:06:40+00:00,General,2011-09-12 14:11:45.124000+00:00,2011-10-06 01:06:40.020000+00:00,Group 8,Resource11,2011-08-11 01:06:40.020000+00:00,task-36720,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-18 10:45:10.506000+00:00 +Internet,LEFT_case-9040,2011-10-06 01:06:40+00:00,General,2011-09-12 14:11:45.124000+00:00,2011-10-06 01:06:40.020000+00:00,Group 8,Resource11,2011-08-11 01:06:40.020000+00:00,task-36719,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-18 10:45:46.626000+00:00 +Internet,LEFT_case-9067,2011-11-09 01:06:40+00:00,General,2011-11-09 14:40:07.417000+00:00,2011-11-09 01:06:40.010000+00:00,Group 5,Resource02,2011-08-03 01:06:40.020000+00:00,task-36409,Confirmation of receipt,complete,Group 1,Resource02,2011-08-16 14:19:21.654000+00:00 +Internet,LEFT_case-9067,2011-11-09 01:06:40+00:00,General,2011-11-09 14:40:07.417000+00:00,2011-11-09 01:06:40.010000+00:00,Group 5,Resource02,2011-08-03 01:06:40.020000+00:00,task-36546,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-16 14:23:14.460000+00:00 +Internet,LEFT_case-9067,2011-11-09 01:06:40+00:00,General,2011-11-09 14:40:07.417000+00:00,2011-11-09 01:06:40.010000+00:00,Group 5,Resource02,2011-08-03 01:06:40.020000+00:00,task-36548,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-16 14:24:29.432000+00:00 +Internet,LEFT_case-9072,2012-02-10 00:00:00+00:00,General,,2012-02-10 00:00:00.010000+00:00,Group 5,Resource04,2011-08-10 01:06:40.020000+00:00,task-36432,Confirmation of receipt,complete,Group 1,Resource04,2011-08-18 15:38:25.593000+00:00 +Internet,LEFT_case-9072,2012-02-10 00:00:00+00:00,General,,2012-02-10 00:00:00.010000+00:00,Group 5,Resource04,2011-08-10 01:06:40.020000+00:00,task-36762,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-18 15:42:15.810000+00:00 +Internet,LEFT_case-9072,2012-02-10 00:00:00+00:00,General,,2012-02-10 00:00:00.010000+00:00,Group 5,Resource04,2011-08-10 01:06:40.020000+00:00,task-36761,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-19 11:36:16.497000+00:00 +Internet,LEFT_case-9075,2011-10-21 01:06:40+00:00,General,2011-10-29 00:00:00.020000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-08-14 01:06:40.020000+00:00,task-36451,Confirmation of receipt,complete,Group 1,Resource21,2011-08-17 10:24:11.767000+00:00 +Internet,LEFT_case-9075,2011-10-21 01:06:40+00:00,General,2011-10-29 00:00:00.020000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-08-14 01:06:40.020000+00:00,task-36601,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-08-17 10:26:55.924000+00:00 +Internet,LEFT_case-9075,2011-10-21 01:06:40+00:00,General,2011-10-29 00:00:00.020000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-08-14 01:06:40.020000+00:00,task-36600,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-08-17 10:29:21.115000+00:00 +Internet,LEFT_case-9076,2011-09-22 01:06:40+00:00,General,2011-10-05 11:01:50.118000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource25,2011-07-28 01:06:40.020000+00:00,task-36455,Confirmation of receipt,complete,EMPTY,Resource33,2011-08-15 14:51:34.879000+00:00 +Internet,LEFT_case-9076,2011-09-22 01:06:40+00:00,General,2011-10-05 11:01:50.118000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource25,2011-07-28 01:06:40.020000+00:00,task-36468,T06 Determine necessity of stop advice,complete,Group 1,Resource33,2011-08-16 08:47:33.884000+00:00 +Internet,LEFT_case-9076,2011-09-22 01:06:40+00:00,General,2011-10-05 11:01:50.118000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource25,2011-07-28 01:06:40.020000+00:00,task-36488,T04 Determine confirmation of receipt,complete,Group 3,Resource33,2011-08-16 08:52:10.147000+00:00 +Internet,LEFT_case-9076,2011-09-22 01:06:40+00:00,General,2011-10-05 11:01:50.118000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource25,2011-07-28 01:06:40.020000+00:00,task-36497,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource33,2011-08-29 11:26:14.520000+00:00 +Internet,LEFT_case-9076,2011-09-22 01:06:40+00:00,General,2011-10-05 11:01:50.118000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource25,2011-07-28 01:06:40.020000+00:00,task-36496,T08 Draft and send request for advice,complete,Group 1,Resource33,2011-08-29 13:16:38.971000+00:00 +Internet,LEFT_case-9076,2011-09-22 01:06:40+00:00,General,2011-10-05 11:01:50.118000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource25,2011-07-28 01:06:40.020000+00:00,task-37391,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource25,2011-10-04 14:15:39.384000+00:00 +Internet,LEFT_case-9076,2011-09-22 01:06:40+00:00,General,2011-10-05 11:01:50.118000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource25,2011-07-28 01:06:40.020000+00:00,task-41558,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-10-04 14:16:25.969000+00:00 +Internet,LEFT_case-9078,2011-10-04 01:06:40+00:00,General,2011-09-22 10:06:40.242000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource12,2011-08-09 01:06:40.020000+00:00,task-36480,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-15 12:21:46.754000+00:00 +Internet,LEFT_case-9078,2011-10-04 01:06:40+00:00,General,2011-09-22 10:06:40.242000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource12,2011-08-09 01:06:40.020000+00:00,task-39070,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-15 12:23:07.183000+00:00 +Internet,LEFT_case-9078,2011-10-04 01:06:40+00:00,General,2011-09-22 10:06:40.242000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource12,2011-08-09 01:06:40.020000+00:00,task-39069,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-15 12:27:37.627000+00:00 +Internet,LEFT_case-9088,2011-10-10 01:06:40+00:00,General,2011-09-05 10:52:52.445000+00:00,2011-10-10 01:06:40.020000+00:00,Group 7,Resource35,2011-08-15 01:06:40.020000+00:00,task-36508,Confirmation of receipt,complete,EMPTY,Resource30,2011-09-05 09:20:22.831000+00:00 +Internet,LEFT_case-9088,2011-10-10 01:06:40+00:00,General,2011-09-05 10:52:52.445000+00:00,2011-10-10 01:06:40.020000+00:00,Group 7,Resource35,2011-08-15 01:06:40.020000+00:00,task-37967,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-09-05 10:52:53.482000+00:00 +Internet,LEFT_case-9089,2011-11-24 01:06:40+00:00,General,2011-08-17 12:27:43.697000+00:00,2011-11-24 01:06:40.010000+00:00,Group 2,Resource21,2011-05-26 01:06:40.020000+00:00,task-36515,Confirmation of receipt,complete,Group 1,admin2,2011-08-17 12:27:44.527000+00:00 +Internet,LEFT_case-9133,2011-09-13 01:06:40+00:00,General,2011-11-18 09:31:40.645000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource09,2011-07-19 01:06:40.020000+00:00,task-36771,Confirmation of receipt,complete,EMPTY,Resource09,2011-09-12 15:19:26.747000+00:00 +Internet,LEFT_case-9133,2011-09-13 01:06:40+00:00,General,2011-11-18 09:31:40.645000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource09,2011-07-19 01:06:40.020000+00:00,task-38773,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-09-12 15:21:43.146000+00:00 +Internet,LEFT_case-9133,2011-09-13 01:06:40+00:00,General,2011-11-18 09:31:40.645000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource09,2011-07-19 01:06:40.020000+00:00,task-38771,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-04 15:00:14.121000+00:00 +Internet,LEFT_case-9143,2011-09-12 01:06:40+00:00,General,2011-09-20 12:16:27.702000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource05,2011-07-18 01:06:40.020000+00:00,task-36810,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-07 10:25:04.412000+00:00 +Internet,LEFT_case-9143,2011-09-12 01:06:40+00:00,General,2011-09-20 12:16:27.702000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource05,2011-07-18 01:06:40.020000+00:00,task-38179,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-07 10:57:21.420000+00:00 +Internet,LEFT_case-9143,2011-09-12 01:06:40+00:00,General,2011-09-20 12:16:27.702000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource05,2011-07-18 01:06:40.020000+00:00,task-38177,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-07 11:02:31.921000+00:00 +Internet,LEFT_case-9163,2011-10-13 01:06:40+00:00,General,2011-10-04 13:14:49.460000+00:00,2011-10-13 01:06:40.020000+00:00,Group 5,Resource05,2011-08-18 01:06:40.020000+00:00,task-36891,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-12 14:37:40.577000+00:00 +Internet,LEFT_case-9163,2011-10-13 01:06:40+00:00,General,2011-10-04 13:14:49.460000+00:00,2011-10-13 01:06:40.020000+00:00,Group 5,Resource05,2011-08-18 01:06:40.020000+00:00,task-38741,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-12 14:38:54.982000+00:00 +Internet,LEFT_case-9163,2011-10-13 01:06:40+00:00,General,2011-10-04 13:14:49.460000+00:00,2011-10-13 01:06:40.020000+00:00,Group 5,Resource05,2011-08-18 01:06:40.020000+00:00,task-38740,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-12 14:40:36.483000+00:00 +Internet,LEFT_case-9165,2011-10-14 01:06:40+00:00,General,2011-10-05 08:55:57.593000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource06,2011-08-19 01:06:40.020000+00:00,task-36893,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-04 11:44:39.661000+00:00 +Internet,LEFT_case-9165,2011-10-14 01:06:40+00:00,General,2011-10-05 08:55:57.593000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource06,2011-08-19 01:06:40.020000+00:00,task-41514,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-04 11:45:27.816000+00:00 +Internet,LEFT_case-9165,2011-10-14 01:06:40+00:00,General,2011-10-05 08:55:57.593000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource06,2011-08-19 01:06:40.020000+00:00,task-41513,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-04 11:46:28.496000+00:00 +Internet,LEFT_case-9172,2011-10-17 01:06:40+00:00,General,2011-09-22 09:53:49.581000+00:00,2011-10-17 01:06:40.020000+00:00,Group 5,Resource23,2011-08-22 01:06:40.020000+00:00,task-36952,Confirmation of receipt,complete,EMPTY,Resource23,2011-09-09 11:20:27.804000+00:00 +Internet,LEFT_case-9172,2011-10-17 01:06:40+00:00,General,2011-09-22 09:53:49.581000+00:00,2011-10-17 01:06:40.020000+00:00,Group 5,Resource23,2011-08-22 01:06:40.020000+00:00,task-38579,T04 Determine confirmation of receipt,complete,EMPTY,Resource23,2011-09-09 11:24:52.826000+00:00 +Internet,LEFT_case-9172,2011-10-17 01:06:40+00:00,General,2011-09-22 09:53:49.581000+00:00,2011-10-17 01:06:40.020000+00:00,Group 5,Resource23,2011-08-22 01:06:40.020000+00:00,task-38578,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-09-16 11:08:12.417000+00:00 +Internet,LEFT_case-9176,2011-10-17 15:58:34.116000+00:00,General,2011-10-04 14:08:14.324000+00:00,2011-10-17 15:58:34.116000+00:00,Group 5,Resource12,2011-08-22 16:00:29.157000+00:00,task-36959,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-26 08:54:17.224000+00:00 +Internet,LEFT_case-9176,2011-10-17 15:58:34.116000+00:00,General,2011-10-04 14:08:14.324000+00:00,2011-10-17 15:58:34.116000+00:00,Group 5,Resource12,2011-08-22 16:00:29.157000+00:00,task-40252,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-26 08:55:18.388000+00:00 +Internet,LEFT_case-9176,2011-10-17 15:58:34.116000+00:00,General,2011-10-04 14:08:14.324000+00:00,2011-10-17 15:58:34.116000+00:00,Group 5,Resource12,2011-08-22 16:00:29.157000+00:00,task-40251,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-26 08:56:18.831000+00:00 +Internet,LEFT_case-9199,2011-09-13 01:06:40+00:00,General,2011-09-14 16:46:58.318000+00:00,2011-09-13 01:06:40.020000+00:00,Group 6,Resource29,2011-07-19 01:06:40.020000+00:00,task-37012,Confirmation of receipt,complete,EMPTY,Resource29,2011-09-08 12:36:59.555000+00:00 +Internet,LEFT_case-9199,2011-09-13 01:06:40+00:00,General,2011-09-14 16:46:58.318000+00:00,2011-09-13 01:06:40.020000+00:00,Group 6,Resource29,2011-07-19 01:06:40.020000+00:00,task-38489,T04 Determine confirmation of receipt,complete,EMPTY,Resource29,2011-09-08 12:40:23.759000+00:00 +Internet,LEFT_case-9199,2011-09-13 01:06:40+00:00,General,2011-09-14 16:46:58.318000+00:00,2011-09-13 01:06:40.020000+00:00,Group 6,Resource29,2011-07-19 01:06:40.020000+00:00,task-38487,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-09-08 12:43:08.695000+00:00 +Internet,LEFT_case-9201,2011-09-19 01:06:40+00:00,General,2011-09-14 10:37:35.447000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource04,2011-07-25 01:06:40.020000+00:00,task-37014,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-29 11:34:19.176000+00:00 +Internet,LEFT_case-9201,2011-09-19 01:06:40+00:00,General,2011-09-14 10:37:35.447000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource04,2011-07-25 01:06:40.020000+00:00,task-37355,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-29 11:35:14.747000+00:00 +Internet,LEFT_case-9201,2011-09-19 01:06:40+00:00,General,2011-09-14 10:37:35.447000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource04,2011-07-25 01:06:40.020000+00:00,task-37354,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-29 11:35:58.206000+00:00 +Internet,LEFT_case-9203,2011-06-22 01:06:40+00:00,General,2011-09-01 07:23:15.377000+00:00,2011-06-22 01:06:40.020000+00:00,Group 8,Resource01,2011-04-27 01:06:40.020000+00:00,task-37043,Confirmation of receipt,complete,EMPTY,Resource11,2011-08-31 13:23:06.586000+00:00 +Internet,LEFT_case-9203,2011-06-22 01:06:40+00:00,General,2011-09-01 07:23:15.377000+00:00,2011-06-22 01:06:40.020000+00:00,Group 8,Resource01,2011-04-27 01:06:40.020000+00:00,task-37681,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2011-08-31 13:23:54.958000+00:00 +Internet,LEFT_case-9203,2011-06-22 01:06:40+00:00,General,2011-09-01 07:23:15.377000+00:00,2011-06-22 01:06:40.020000+00:00,Group 8,Resource01,2011-04-27 01:06:40.020000+00:00,task-37683,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2011-08-31 13:26:26.682000+00:00 +Internet,LEFT_case-9203,2011-06-22 01:06:40+00:00,General,2011-09-01 07:23:15.377000+00:00,2011-06-22 01:06:40.020000+00:00,Group 8,Resource01,2011-04-27 01:06:40.020000+00:00,task-37686,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-08-31 13:27:20.538000+00:00 +Internet,LEFT_case-9203,2011-06-22 01:06:40+00:00,General,2011-09-01 07:23:15.377000+00:00,2011-06-22 01:06:40.020000+00:00,Group 8,Resource01,2011-04-27 01:06:40.020000+00:00,task-37680,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-08-31 13:28:27.190000+00:00 +Internet,LEFT_case-9206,2011-07-11 01:06:40+00:00,General,,2011-07-11 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-37047,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-12 10:36:02.977000+00:00 +Internet,LEFT_case-9206,2011-07-11 01:06:40+00:00,General,,2011-07-11 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-43000,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-12 10:36:40.937000+00:00 +Internet,LEFT_case-9206,2011-07-11 01:06:40+00:00,General,,2011-07-11 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-42999,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-12 11:18:20.323000+00:00 +Internet,LEFT_case-9207,2011-07-14 01:06:40+00:00,General,2011-10-04 10:01:07.865000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-19 01:06:40.020000+00:00,task-37048,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-26 08:48:32.489000+00:00 +Internet,LEFT_case-9207,2011-07-14 01:06:40+00:00,General,2011-10-04 10:01:07.865000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-19 01:06:40.020000+00:00,task-40249,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-26 10:40:40.917000+00:00 +Internet,LEFT_case-9207,2011-07-14 01:06:40+00:00,General,2011-10-04 10:01:07.865000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-19 01:06:40.020000+00:00,task-40315,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-26 10:41:14.676000+00:00 +Internet,LEFT_case-9209,2011-08-03 00:00:00+00:00,General,2012-01-17 13:28:28.475000+00:00,2011-08-03 00:00:00.020000+00:00,Group 5,Resource02,2011-06-08 01:06:40.020000+00:00,task-37057,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-12 07:56:57.799000+00:00 +Internet,LEFT_case-9209,2011-08-03 00:00:00+00:00,General,2012-01-17 13:28:28.475000+00:00,2011-08-03 00:00:00.020000+00:00,Group 5,Resource02,2011-06-08 01:06:40.020000+00:00,task-42951,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-12 08:02:24.053000+00:00 +Internet,LEFT_case-9209,2011-08-03 00:00:00+00:00,General,2012-01-17 13:28:28.475000+00:00,2011-08-03 00:00:00.020000+00:00,Group 5,Resource02,2011-06-08 01:06:40.020000+00:00,task-42949,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-12 08:05:04.738000+00:00 +Internet,LEFT_case-9212,2011-08-19 01:06:40+00:00,General,2011-09-01 08:29:34.390000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37060,Confirmation of receipt,complete,EMPTY,Resource11,2011-09-01 07:24:31.792000+00:00 +Internet,LEFT_case-9212,2011-08-19 01:06:40+00:00,General,2011-09-01 08:29:34.390000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37746,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-09-01 07:25:34.985000+00:00 +Internet,LEFT_case-9212,2011-08-19 01:06:40+00:00,General,2011-09-01 08:29:34.390000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37748,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-09-01 07:26:28.713000+00:00 +Internet,LEFT_case-9213,2011-08-19 01:06:40+00:00,General,2011-09-01 09:17:15.452000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37064,Confirmation of receipt,complete,EMPTY,Resource11,2011-09-01 08:39:09.918000+00:00 +Internet,LEFT_case-9213,2011-08-19 01:06:40+00:00,General,2011-09-01 09:17:15.452000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37779,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-09-01 08:40:46.025000+00:00 +Internet,LEFT_case-9213,2011-08-19 01:06:40+00:00,General,2011-09-01 09:17:15.452000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37784,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-09-01 08:43:26.015000+00:00 +Internet,LEFT_case-9214,2011-08-26 01:06:40+00:00,General,2011-08-31 13:32:18.102000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource01,2011-07-01 01:06:40.020000+00:00,task-37068,Confirmation of receipt,complete,EMPTY,admin2,2011-08-31 13:32:18.984000+00:00 +Internet,LEFT_case-9218,2011-10-13 01:06:40+00:00,General,2011-09-12 14:20:29.359000+00:00,2011-10-13 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-37072,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 09:25:07.087000+00:00 +Internet,LEFT_case-9218,2011-10-13 01:06:40+00:00,General,2011-09-12 14:20:29.359000+00:00,2011-10-13 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-38275,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 09:25:47.157000+00:00 +Internet,LEFT_case-9218,2011-10-13 01:06:40+00:00,General,2011-09-12 14:20:29.359000+00:00,2011-10-13 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-38274,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 09:26:22.061000+00:00 +Desk,LEFT_case-9226,2011-08-30 01:06:40+00:00,General,2011-08-31 10:01:57.853000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-37106,Confirmation of receipt,complete,EMPTY,Resource06,2011-08-30 09:39:00.949000+00:00 +Desk,LEFT_case-9226,2011-08-30 01:06:40+00:00,General,2011-08-31 10:01:57.853000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-37444,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-30 09:39:51.600000+00:00 +Desk,LEFT_case-9226,2011-08-30 01:06:40+00:00,General,2011-08-31 10:01:57.853000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-37443,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-30 09:40:32.773000+00:00 +Internet,LEFT_case-9228,2011-10-26 01:06:40+00:00,General,2011-10-05 13:01:08.242000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-37110,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-29 10:10:18.965000+00:00 +Internet,LEFT_case-9228,2011-10-26 01:06:40+00:00,General,2011-10-05 13:01:08.242000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-37302,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-29 10:11:01.504000+00:00 +Internet,LEFT_case-9228,2011-10-26 01:06:40+00:00,General,2011-10-05 13:01:08.242000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-37301,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-29 10:11:41.777000+00:00 +Internet,LEFT_case-9232,2011-09-16 01:06:40+00:00,General,2011-10-31 14:40:10.648000+00:00,2011-09-16 01:06:40.020000+00:00,,admin1,2011-07-22 01:06:40.020000+00:00,task-37145,Confirmation of receipt,complete,EMPTY,Resource09,2011-09-28 10:32:38.239000+00:00 +Internet,LEFT_case-9232,2011-09-16 01:06:40+00:00,General,2011-10-31 14:40:10.648000+00:00,2011-09-16 01:06:40.020000+00:00,,admin1,2011-07-22 01:06:40.020000+00:00,task-40701,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-09-28 10:33:48.879000+00:00 +Internet,LEFT_case-9232,2011-09-16 01:06:40+00:00,General,2011-10-31 14:40:10.648000+00:00,2011-09-16 01:06:40.020000+00:00,,admin1,2011-07-22 01:06:40.020000+00:00,task-40700,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-09-28 10:34:37.914000+00:00 +Internet,LEFT_case-9270,2011-10-18 01:06:40+00:00,General,2011-11-18 10:06:45.299000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource14,2011-08-23 01:06:40.020000+00:00,task-37295,Confirmation of receipt,complete,EMPTY,Resource14,2011-11-14 10:16:51.933000+00:00 +Internet,LEFT_case-9270,2011-10-18 01:06:40+00:00,General,2011-11-18 10:06:45.299000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource14,2011-08-23 01:06:40.020000+00:00,task-46446,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-11-14 10:17:39.932000+00:00 +Internet,LEFT_case-9270,2011-10-18 01:06:40+00:00,General,2011-11-18 10:06:45.299000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource14,2011-08-23 01:06:40.020000+00:00,task-46445,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-11-14 10:18:44.261000+00:00 +Internet,LEFT_case-9271,2011-10-24 00:00:00+00:00,General,2011-12-23 15:11:46.687000+00:00,2011-10-24 00:00:00.020000+00:00,,admin1,2011-08-29 10:05:57.665000+00:00,task-37299,Confirmation of receipt,complete,EMPTY,Resource09,2011-10-17 15:08:22.470000+00:00 +Internet,LEFT_case-9271,2011-10-24 00:00:00+00:00,General,2011-12-23 15:11:46.687000+00:00,2011-10-24 00:00:00.020000+00:00,,admin1,2011-08-29 10:05:57.665000+00:00,task-43485,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-17 15:09:30.620000+00:00 +Internet,LEFT_case-9271,2011-10-24 00:00:00+00:00,General,2011-12-23 15:11:46.687000+00:00,2011-10-24 00:00:00.020000+00:00,,admin1,2011-08-29 10:05:57.665000+00:00,task-43486,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-10-17 15:09:57.370000+00:00 +Internet,LEFT_case-9274,2011-10-20 01:06:40+00:00,General,2011-10-19 13:46:28.582000+00:00,2011-10-20 01:06:40.020000+00:00,Group 8,Resource01,2011-08-25 01:06:40.020000+00:00,task-37340,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 09:54:59.225000+00:00 +Internet,LEFT_case-9274,2011-10-20 01:06:40+00:00,General,2011-10-19 13:46:28.582000+00:00,2011-10-20 01:06:40.020000+00:00,Group 8,Resource01,2011-08-25 01:06:40.020000+00:00,task-38292,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 09:55:51.692000+00:00 +Internet,LEFT_case-9274,2011-10-20 01:06:40+00:00,General,2011-10-19 13:46:28.582000+00:00,2011-10-20 01:06:40.020000+00:00,Group 8,Resource01,2011-08-25 01:06:40.020000+00:00,task-38293,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 09:57:03.412000+00:00 +Internet,LEFT_case-9277,2011-09-09 01:06:40+00:00,General,2011-10-06 15:04:16.609000+00:00,2011-09-09 01:06:40.020000+00:00,Group 5,Resource05,2011-07-15 01:06:40.020000+00:00,task-37371,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-06 14:47:05.185000+00:00 +Internet,LEFT_case-9277,2011-09-09 01:06:40+00:00,General,2011-10-06 15:04:16.609000+00:00,2011-09-09 01:06:40.020000+00:00,Group 5,Resource05,2011-07-15 01:06:40.020000+00:00,task-38091,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-06 14:58:10.671000+00:00 +Internet,LEFT_case-9277,2011-09-09 01:06:40+00:00,General,2011-10-06 15:04:16.609000+00:00,2011-09-09 01:06:40.020000+00:00,Group 5,Resource05,2011-07-15 01:06:40.020000+00:00,task-38090,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-06 14:58:55.630000+00:00 +Internet,LEFT_case-9281,2011-10-24 13:56:40.490000+00:00,General,2011-09-09 00:00:00.020000+00:00,2011-10-24 13:56:40.490000+00:00,Group 8,Resource01,2011-08-29 13:56:40.490000+00:00,task-37399,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 13:10:38.550000+00:00 +Internet,LEFT_case-9281,2011-10-24 13:56:40.490000+00:00,General,2011-09-09 00:00:00.020000+00:00,2011-10-24 13:56:40.490000+00:00,Group 8,Resource01,2011-08-29 13:56:40.490000+00:00,task-38517,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-09-09 09:30:43.422000+00:00 +Internet,LEFT_case-9281,2011-10-24 13:56:40.490000+00:00,General,2011-09-09 00:00:00.020000+00:00,2011-10-24 13:56:40.490000+00:00,Group 8,Resource01,2011-08-29 13:56:40.490000+00:00,task-38515,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-09-15 09:37:39.033000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37428,Confirmation of receipt,complete,EMPTY,Resource28,2011-08-31 14:16:45.403000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37714,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-08-31 14:24:54.608000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37716,T08 Draft and send request for advice,complete,Group 1,Resource28,2011-08-31 15:06:49.707000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37730,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource28,2011-08-31 15:10:26.204000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37715,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-08-31 15:19:13.128000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37733,T03 Adjust confirmation of receipt,complete,Group 1,Resource28,2011-09-01 09:17:53.293000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37816,T04 Determine confirmation of receipt,complete,Group 3,Resource28,2011-09-01 09:19:59.433000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37717,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource28,2011-09-06 13:47:00.452000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38084,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-09-06 13:47:37.892000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38085,T08 Draft and send request for advice,complete,Group 1,Resource28,2011-09-06 13:48:32.486000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38087,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource28,2011-09-06 13:49:06.451000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38086,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource28,2011-09-06 15:32:21.434000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38113,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-09-06 15:32:50.799000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38115,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource28,2011-09-06 15:34:32.598000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38114,T08 Draft and send request for advice,complete,Group 1,Resource28,2011-09-06 15:35:00.732000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38116,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource28,2011-09-06 15:35:27.742000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38117,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-09-06 15:35:57.624000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38118,T08 Draft and send request for advice,complete,Group 1,Resource28,2011-09-06 15:36:57.508000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38120,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource28,2011-09-06 15:37:21.293000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38119,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource28,2011-09-06 15:37:40.982000+00:00 +Internet,LEFT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38121,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-09-06 15:38:06.003000+00:00 +Internet,LEFT_case-9290,2011-10-12 01:06:40+00:00,General,,2011-10-12 01:06:40.020000+00:00,Group 5,Resource14,2011-08-17 01:06:40.020000+00:00,task-37462,Confirmation of receipt,complete,EMPTY,Resource14,2011-11-17 09:00:49.548000+00:00 +Internet,LEFT_case-9290,2011-10-12 01:06:40+00:00,General,,2011-10-12 01:06:40.020000+00:00,Group 5,Resource14,2011-08-17 01:06:40.020000+00:00,task-46942,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-11-17 09:06:15.256000+00:00 +Internet,LEFT_case-9290,2011-10-12 01:06:40+00:00,General,,2011-10-12 01:06:40.020000+00:00,Group 5,Resource14,2011-08-17 01:06:40.020000+00:00,task-46941,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-11-17 09:06:52.343000+00:00 +Internet,LEFT_case-9292,2011-11-24 01:06:40+00:00,General,2011-12-01 00:00:00.010000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource01,2011-08-18 01:06:40.020000+00:00,task-37475,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-30 13:40:01.094000+00:00 +Internet,LEFT_case-9292,2011-11-24 01:06:40+00:00,General,2011-12-01 00:00:00.010000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource01,2011-08-18 01:06:40.020000+00:00,task-41029,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-30 13:42:15.520000+00:00 +Internet,LEFT_case-9292,2011-11-24 01:06:40+00:00,General,2011-12-01 00:00:00.010000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource01,2011-08-18 01:06:40.020000+00:00,task-41028,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-30 13:45:34.479000+00:00 +Internet,LEFT_case-9294,2011-11-24 01:06:40+00:00,General,2011-11-25 09:40:46.473000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource13,2011-08-18 01:06:40.020000+00:00,task-37481,Confirmation of receipt,complete,EMPTY,Resource13,2011-09-16 11:22:01.912000+00:00 +Internet,LEFT_case-9294,2011-11-24 01:06:40+00:00,General,2011-11-25 09:40:46.473000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource13,2011-08-18 01:06:40.020000+00:00,task-39226,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-09-16 11:28:07.415000+00:00 +Internet,LEFT_case-9294,2011-11-24 01:06:40+00:00,General,2011-11-25 09:40:46.473000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource13,2011-08-18 01:06:40.020000+00:00,task-39222,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-09-16 11:30:04.519000+00:00 +Internet,LEFT_case-9295,2011-10-24 01:06:40+00:00,General,2011-10-05 10:52:33.979000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource05,2011-08-29 01:06:40.020000+00:00,task-37503,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-15 11:24:40.993000+00:00 +Internet,LEFT_case-9295,2011-10-24 01:06:40+00:00,General,2011-10-05 10:52:33.979000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource05,2011-08-29 01:06:40.020000+00:00,task-39030,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-15 11:25:25.938000+00:00 +Internet,LEFT_case-9295,2011-10-24 01:06:40+00:00,General,2011-10-05 10:52:33.979000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource05,2011-08-29 01:06:40.020000+00:00,task-39029,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-15 11:31:19.790000+00:00 +Internet,LEFT_case-9331,2011-10-14 01:06:40+00:00,General,2011-10-03 12:01:25.051000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-37856,Confirmation of receipt,complete,EMPTY,Resource23,2011-09-01 13:56:19.252000+00:00 +Internet,LEFT_case-9331,2011-10-14 01:06:40+00:00,General,2011-10-03 12:01:25.051000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-37880,T04 Determine confirmation of receipt,complete,EMPTY,Resource23,2011-09-01 13:57:52.262000+00:00 +Internet,LEFT_case-9331,2011-10-14 01:06:40+00:00,General,2011-10-03 12:01:25.051000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-37879,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-09-01 13:59:02.412000+00:00 +Internet,LEFT_case-9336,2011-10-27 15:40:26.738000+00:00,General,2011-10-27 11:16:39.329000+00:00,2011-10-27 15:40:26.738000+00:00,Group 8,Resource11,2011-09-01 15:40:26.738000+00:00,task-37905,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 11:03:09.173000+00:00 +Internet,LEFT_case-9336,2011-10-27 15:40:26.738000+00:00,General,2011-10-27 11:16:39.329000+00:00,2011-10-27 15:40:26.738000+00:00,Group 8,Resource11,2011-09-01 15:40:26.738000+00:00,task-38360,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 11:03:47.373000+00:00 +Internet,LEFT_case-9336,2011-10-27 15:40:26.738000+00:00,General,2011-10-27 11:16:39.329000+00:00,2011-10-27 15:40:26.738000+00:00,Group 8,Resource11,2011-09-01 15:40:26.738000+00:00,task-38359,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 11:04:22.543000+00:00 +Internet,LEFT_case-9337,2011-10-27 16:09:49.687000+00:00,General,2011-10-05 00:00:00.020000+00:00,2011-10-27 16:09:49.687000+00:00,Group 8,Resource11,2011-09-01 16:09:49.687000+00:00,task-37906,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 11:13:05.487000+00:00 +Internet,LEFT_case-9337,2011-10-27 16:09:49.687000+00:00,General,2011-10-05 00:00:00.020000+00:00,2011-10-27 16:09:49.687000+00:00,Group 8,Resource11,2011-09-01 16:09:49.687000+00:00,task-38380,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 11:13:42.580000+00:00 +Internet,LEFT_case-9337,2011-10-27 16:09:49.687000+00:00,General,2011-10-05 00:00:00.020000+00:00,2011-10-27 16:09:49.687000+00:00,Group 8,Resource11,2011-09-01 16:09:49.687000+00:00,task-38379,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 11:14:16.452000+00:00 +Internet,LEFT_case-9366,2011-10-27 01:06:40+00:00,General,2011-10-05 13:14:11.328000+00:00,2011-10-27 01:06:40.020000+00:00,Group 5,Resource05,2011-09-01 01:06:40.020000+00:00,task-37975,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-15 18:47:36.235000+00:00 +Internet,LEFT_case-9366,2011-10-27 01:06:40+00:00,General,2011-10-05 13:14:11.328000+00:00,2011-10-27 01:06:40.020000+00:00,Group 5,Resource05,2011-09-01 01:06:40.020000+00:00,task-39164,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-15 18:48:47.297000+00:00 +Internet,LEFT_case-9366,2011-10-27 01:06:40+00:00,General,2011-10-05 13:14:11.328000+00:00,2011-10-27 01:06:40.020000+00:00,Group 5,Resource05,2011-09-01 01:06:40.020000+00:00,task-39163,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-15 18:51:45.644000+00:00 +Internet,LEFT_case-9368,2011-10-27 01:06:40+00:00,General,2011-09-21 13:55:53.053000+00:00,2011-10-27 01:06:40.020000+00:00,Group 8,Resource11,2011-09-01 01:06:40.020000+00:00,task-37994,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 10:45:41.620000+00:00 +Internet,LEFT_case-9368,2011-10-27 01:06:40+00:00,General,2011-09-21 13:55:53.053000+00:00,2011-10-27 01:06:40.020000+00:00,Group 8,Resource11,2011-09-01 01:06:40.020000+00:00,task-38330,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 10:46:45.565000+00:00 +Internet,LEFT_case-9368,2011-10-27 01:06:40+00:00,General,2011-09-21 13:55:53.053000+00:00,2011-10-27 01:06:40.020000+00:00,Group 8,Resource11,2011-09-01 01:06:40.020000+00:00,task-38329,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 10:47:22.708000+00:00 +Internet,LEFT_case-9370,2011-10-28 01:06:40+00:00,General,2011-09-20 12:13:30.037000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38012,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 11:21:58.956000+00:00 +Internet,LEFT_case-9370,2011-10-28 01:06:40+00:00,General,2011-09-20 12:13:30.037000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38403,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 11:22:36.500000+00:00 +Internet,LEFT_case-9370,2011-10-28 01:06:40+00:00,General,2011-09-20 12:13:30.037000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38402,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 11:23:14.747000+00:00 +Internet,LEFT_case-9373,2011-10-28 01:06:40+00:00,General,2011-09-20 12:18:28.793000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38022,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 11:31:49.409000+00:00 +Internet,LEFT_case-9373,2011-10-28 01:06:40+00:00,General,2011-09-20 12:18:28.793000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38422,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 11:32:25.830000+00:00 +Internet,LEFT_case-9373,2011-10-28 01:06:40+00:00,General,2011-09-20 12:18:28.793000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38421,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 11:33:03.878000+00:00 +Internet,LEFT_case-9376,2011-11-24 01:06:40+00:00,General,2011-11-25 09:21:24.447000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource04,2011-09-02 01:06:40.020000+00:00,task-38025,Confirmation of receipt,complete,EMPTY,Resource04,2011-09-12 15:53:00.121000+00:00 +Internet,LEFT_case-9376,2011-11-24 01:06:40+00:00,General,2011-11-25 09:21:24.447000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource04,2011-09-02 01:06:40.020000+00:00,task-38780,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-09-12 15:53:40.486000+00:00 +Internet,LEFT_case-9376,2011-11-24 01:06:40+00:00,General,2011-11-25 09:21:24.447000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource04,2011-09-02 01:06:40.020000+00:00,task-38779,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-09-12 15:54:32.202000+00:00 +Internet,LEFT_case-9385,2011-10-31 01:06:40+00:00,General,2011-10-28 14:46:41.985000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-09-05 01:06:40.020000+00:00,task-38058,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-12 14:39:45.245000+00:00 +Internet,LEFT_case-9385,2011-10-31 01:06:40+00:00,General,2011-10-28 14:46:41.985000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-09-05 01:06:40.020000+00:00,task-43145,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-12 14:40:41.087000+00:00 +Internet,LEFT_case-9385,2011-10-31 01:06:40+00:00,General,2011-10-28 14:46:41.985000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-09-05 01:06:40.020000+00:00,task-43144,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-12 14:41:58.247000+00:00 +Internet,LEFT_case-9389,2011-10-31 01:06:40+00:00,General,2011-10-05 15:16:45.222000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource05,2011-09-05 01:06:40.020000+00:00,task-38083,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-19 10:16:45.370000+00:00 +Internet,LEFT_case-9389,2011-10-31 01:06:40+00:00,General,2011-10-05 15:16:45.222000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource05,2011-09-05 01:06:40.020000+00:00,task-39402,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-19 10:18:06.933000+00:00 +Internet,LEFT_case-9389,2011-10-31 01:06:40+00:00,General,2011-10-05 15:16:45.222000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource05,2011-09-05 01:06:40.020000+00:00,task-39401,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-19 10:18:43.791000+00:00 +Internet,LEFT_case-9394,2011-11-01 15:15:44.205000+00:00,General,2011-10-21 11:39:20.626000+00:00,2011-11-01 15:15:44.205000+00:00,Group 5,Resource02,2011-09-06 15:21:18.331000+00:00,task-38112,Confirmation of receipt,complete,EMPTY,Resource02,2011-09-26 15:07:52.805000+00:00 +Internet,LEFT_case-9394,2011-11-01 15:15:44.205000+00:00,General,2011-10-21 11:39:20.626000+00:00,2011-11-01 15:15:44.205000+00:00,Group 5,Resource02,2011-09-06 15:21:18.331000+00:00,task-40521,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-09-26 15:08:44.222000+00:00 +Internet,LEFT_case-9394,2011-11-01 15:15:44.205000+00:00,General,2011-10-21 11:39:20.626000+00:00,2011-11-01 15:15:44.205000+00:00,Group 5,Resource02,2011-09-06 15:21:18.331000+00:00,task-40520,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-09-26 15:37:32.379000+00:00 +Internet,LEFT_case-9395,2011-11-01 01:06:40+00:00,General,2011-09-23 10:18:23.947000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-38123,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-19 14:51:41.225000+00:00 +Internet,LEFT_case-9395,2011-11-01 01:06:40+00:00,General,2011-09-23 10:18:23.947000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39482,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-19 14:54:19.103000+00:00 +Internet,LEFT_case-9395,2011-11-01 01:06:40+00:00,General,2011-09-23 10:18:23.947000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39486,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-09-21 12:38:15.584000+00:00 +Internet,LEFT_case-9395,2011-11-01 01:06:40+00:00,General,2011-09-23 10:18:23.947000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39484,T04 Determine confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 12:38:33.934000+00:00 +Internet,LEFT_case-9395,2011-11-01 01:06:40+00:00,General,2011-09-23 10:18:23.947000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-40036,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-09-23 10:18:08.982000+00:00 +Internet,LEFT_case-9407,2011-11-01 01:06:40+00:00,General,2011-09-26 09:12:19.969000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-38163,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-19 16:39:59.355000+00:00 +Internet,LEFT_case-9407,2011-11-01 01:06:40+00:00,General,2011-09-26 09:12:19.969000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39496,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-19 16:42:22.882000+00:00 +Internet,LEFT_case-9407,2011-11-01 01:06:40+00:00,General,2011-09-26 09:12:19.969000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39497,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-09-25 21:23:18.352000+00:00 +Internet,LEFT_case-9407,2011-11-01 01:06:40+00:00,General,2011-09-26 09:12:19.969000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39499,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-09-26 09:11:04.340000+00:00 +Internet,LEFT_case-9407,2011-11-01 01:06:40+00:00,General,2011-09-26 09:12:19.969000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-40259,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-09-26 09:12:03.930000+00:00 +Internet,LEFT_case-9408,2011-11-01 01:06:40+00:00,General,2011-11-18 10:13:52.690000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource14,2011-09-06 01:06:40.020000+00:00,task-38168,Confirmation of receipt,complete,EMPTY,Resource14,2011-10-11 08:26:07.057000+00:00 +Internet,LEFT_case-9408,2011-11-01 01:06:40+00:00,General,2011-11-18 10:13:52.690000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource14,2011-09-06 01:06:40.020000+00:00,task-42671,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-10-11 08:26:57.473000+00:00 +Internet,LEFT_case-9408,2011-11-01 01:06:40+00:00,General,2011-11-18 10:13:52.690000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource14,2011-09-06 01:06:40.020000+00:00,task-42670,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-10-11 08:27:37.936000+00:00 +Internet,LEFT_case-9410,2011-10-28 01:06:40+00:00,General,2011-10-17 13:02:05.819000+00:00,2011-10-28 01:06:40.020000+00:00,Group 5,Resource02,2011-09-02 01:06:40.020000+00:00,task-38200,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-06 08:04:24.927000+00:00 +Internet,LEFT_case-9410,2011-10-28 01:06:40+00:00,General,2011-10-17 13:02:05.819000+00:00,2011-10-28 01:06:40.020000+00:00,Group 5,Resource02,2011-09-02 01:06:40.020000+00:00,task-41907,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-06 08:05:07.576000+00:00 +Internet,LEFT_case-9410,2011-10-28 01:06:40+00:00,General,2011-10-17 13:02:05.819000+00:00,2011-10-28 01:06:40.020000+00:00,Group 5,Resource02,2011-09-02 01:06:40.020000+00:00,task-41906,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-06 08:05:49.874000+00:00 +Internet,LEFT_case-9411,2011-11-02 11:21:02.567000+00:00,General,2011-10-05 15:34:43.763000+00:00,2011-11-02 11:21:02.567000+00:00,Group 5,Resource02,2011-09-07 11:21:02.567000+00:00,task-38203,Confirmation of receipt,complete,EMPTY,Resource02,2011-09-26 11:09:34.608000+00:00 +Internet,LEFT_case-9411,2011-11-02 11:21:02.567000+00:00,General,2011-10-05 15:34:43.763000+00:00,2011-11-02 11:21:02.567000+00:00,Group 5,Resource02,2011-09-07 11:21:02.567000+00:00,task-40341,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-09-26 11:10:24.969000+00:00 +Internet,LEFT_case-9411,2011-11-02 11:21:02.567000+00:00,General,2011-10-05 15:34:43.763000+00:00,2011-11-02 11:21:02.567000+00:00,Group 5,Resource02,2011-09-07 11:21:02.567000+00:00,task-40340,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-09-26 11:11:05.468000+00:00 +Internet,LEFT_case-9413,2011-11-02 13:02:36.975000+00:00,General,2011-09-21 14:00:25.191000+00:00,2011-11-02 13:02:36.975000+00:00,Group 8,Resource11,2011-09-07 13:02:36.975000+00:00,task-38215,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-15 16:00:34.039000+00:00 +Internet,LEFT_case-9413,2011-11-02 13:02:36.975000+00:00,General,2011-09-21 14:00:25.191000+00:00,2011-11-02 13:02:36.975000+00:00,Group 8,Resource11,2011-09-07 13:02:36.975000+00:00,task-39147,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-15 16:01:12.398000+00:00 +Internet,LEFT_case-9413,2011-11-02 13:02:36.975000+00:00,General,2011-09-21 14:00:25.191000+00:00,2011-11-02 13:02:36.975000+00:00,Group 8,Resource11,2011-09-07 13:02:36.975000+00:00,task-39146,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-15 16:01:53.090000+00:00 +Internet,LEFT_case-9414,2011-11-02 13:34:52.554000+00:00,General,2011-09-26 14:31:54.627000+00:00,2011-11-02 13:34:52.554000+00:00,Group 8,Resource11,2011-09-07 13:34:52.554000+00:00,task-38221,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-20 15:37:27.717000+00:00 +Internet,LEFT_case-9414,2011-11-02 13:34:52.554000+00:00,General,2011-09-26 14:31:54.627000+00:00,2011-11-02 13:34:52.554000+00:00,Group 8,Resource11,2011-09-07 13:34:52.554000+00:00,task-39611,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-20 15:40:18.931000+00:00 +Internet,LEFT_case-9414,2011-11-02 13:34:52.554000+00:00,General,2011-09-26 14:31:54.627000+00:00,2011-11-02 13:34:52.554000+00:00,Group 8,Resource11,2011-09-07 13:34:52.554000+00:00,task-39612,T04 Determine confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 14:05:25.697000+00:00 +Internet,LEFT_case-9415,2011-11-02 14:23:25.265000+00:00,General,2011-09-21 14:06:20.661000+00:00,2011-11-02 14:23:25.265000+00:00,Group 8,Resource11,2011-09-07 14:23:25.265000+00:00,task-38222,Confirmation of receipt,complete,EMPTY,Resource16,2011-09-16 09:47:00.123000+00:00 +Internet,LEFT_case-9415,2011-11-02 14:23:25.265000+00:00,General,2011-09-21 14:06:20.661000+00:00,2011-11-02 14:23:25.265000+00:00,Group 8,Resource11,2011-09-07 14:23:25.265000+00:00,task-39188,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-09-16 09:50:01.221000+00:00 +Internet,LEFT_case-9415,2011-11-02 14:23:25.265000+00:00,General,2011-09-21 14:06:20.661000+00:00,2011-11-02 14:23:25.265000+00:00,Group 8,Resource11,2011-09-07 14:23:25.265000+00:00,task-39187,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-09-16 09:51:08.489000+00:00 +Internet,LEFT_case-9417,2011-11-02 01:06:40+00:00,General,2011-09-29 11:50:24.416000+00:00,2011-11-02 01:06:40.010000+00:00,Group 8,Resource11,2011-09-07 01:06:40.020000+00:00,task-38239,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-15 13:20:12.002000+00:00 +Internet,LEFT_case-9417,2011-11-02 01:06:40+00:00,General,2011-09-29 11:50:24.416000+00:00,2011-11-02 01:06:40.010000+00:00,Group 8,Resource11,2011-09-07 01:06:40.020000+00:00,task-39098,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-15 13:20:52.222000+00:00 +Internet,LEFT_case-9417,2011-11-02 01:06:40+00:00,General,2011-09-29 11:50:24.416000+00:00,2011-11-02 01:06:40.010000+00:00,Group 8,Resource11,2011-09-07 01:06:40.020000+00:00,task-39097,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-15 13:22:08.191000+00:00 +Internet,LEFT_case-9424,2011-12-14 00:00:00+00:00,General,2012-01-17 14:10:50.857000+00:00,2011-12-14 00:00:00.010000+00:00,Group 5,Resource04,2011-09-07 01:06:40.020000+00:00,task-38248,Confirmation of receipt,complete,EMPTY,Resource04,2011-09-12 16:05:03.134000+00:00 +Internet,LEFT_case-9424,2011-12-14 00:00:00+00:00,General,2012-01-17 14:10:50.857000+00:00,2011-12-14 00:00:00.010000+00:00,Group 5,Resource04,2011-09-07 01:06:40.020000+00:00,task-38786,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-09-12 16:05:49.293000+00:00 +Internet,LEFT_case-9424,2011-12-14 00:00:00+00:00,General,2012-01-17 14:10:50.857000+00:00,2011-12-14 00:00:00.010000+00:00,Group 5,Resource04,2011-09-07 01:06:40.020000+00:00,task-38785,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-09-12 16:09:37.100000+00:00 +Internet,LEFT_case-9430,2011-11-03 10:26:54.251000+00:00,General,2011-10-10 14:55:18.420000+00:00,2011-11-03 10:26:54.251000+00:00,Group 8,Resource11,2011-09-08 10:26:54.251000+00:00,task-38314,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 10:39:04.408000+00:00 +Internet,LEFT_case-9430,2011-11-03 10:26:54.251000+00:00,General,2011-10-10 14:55:18.420000+00:00,2011-11-03 10:26:54.251000+00:00,Group 8,Resource11,2011-09-08 10:26:54.251000+00:00,task-39722,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-21 10:39:52.924000+00:00 +Internet,LEFT_case-9430,2011-11-03 10:26:54.251000+00:00,General,2011-10-10 14:55:18.420000+00:00,2011-11-03 10:26:54.251000+00:00,Group 8,Resource11,2011-09-08 10:26:54.251000+00:00,task-39721,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-21 10:42:24.039000+00:00 +Internet,LEFT_case-9438,2011-11-03 00:00:00+00:00,General,,2011-11-03 00:00:00.010000+00:00,Group 5,Resource14,2011-09-08 01:06:40.020000+00:00,task-38488,Confirmation of receipt,complete,EMPTY,Resource14,2011-10-20 11:45:06.641000+00:00 +Internet,LEFT_case-9438,2011-11-03 00:00:00+00:00,General,,2011-11-03 00:00:00.010000+00:00,Group 5,Resource14,2011-09-08 01:06:40.020000+00:00,task-43967,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-10-20 11:45:53.151000+00:00 +Internet,LEFT_case-9438,2011-11-03 00:00:00+00:00,General,,2011-11-03 00:00:00.010000+00:00,Group 5,Resource14,2011-09-08 01:06:40.020000+00:00,task-43966,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-10-20 11:46:37.953000+00:00 +Internet,LEFT_case-9442,2011-11-03 01:06:40+00:00,General,2011-09-29 13:28:52.704000+00:00,2011-11-03 01:06:40.010000+00:00,Group 8,Resource11,2011-09-08 01:06:40.020000+00:00,task-38527,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-20 16:20:58.206000+00:00 +Internet,LEFT_case-9442,2011-11-03 01:06:40+00:00,General,2011-09-29 13:28:52.704000+00:00,2011-11-03 01:06:40.010000+00:00,Group 8,Resource11,2011-09-08 01:06:40.020000+00:00,task-39645,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-21 09:53:12.406000+00:00 +Internet,LEFT_case-9442,2011-11-03 01:06:40+00:00,General,2011-09-29 13:28:52.704000+00:00,2011-11-03 01:06:40.010000+00:00,Group 8,Resource11,2011-09-08 01:06:40.020000+00:00,task-39646,T04 Determine confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 10:12:38.485000+00:00 +Internet,LEFT_case-9443,2011-11-03 15:51:10.593000+00:00,General,2011-09-26 14:43:51.468000+00:00,2011-11-03 15:51:10.593000+00:00,Group 8,Resource11,2011-09-08 15:51:10.592000+00:00,task-38541,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 11:27:59.759000+00:00 +Internet,LEFT_case-9443,2011-11-03 15:51:10.593000+00:00,General,2011-09-26 14:43:51.468000+00:00,2011-11-03 15:51:10.593000+00:00,Group 8,Resource11,2011-09-08 15:51:10.592000+00:00,task-39750,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-21 11:28:37.309000+00:00 +Internet,LEFT_case-9443,2011-11-03 15:51:10.593000+00:00,General,2011-09-26 14:43:51.468000+00:00,2011-11-03 15:51:10.593000+00:00,Group 8,Resource11,2011-09-08 15:51:10.592000+00:00,task-39749,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-21 11:29:18.493000+00:00 +Desk,LEFT_case-9487,2011-11-04 01:06:40+00:00,General,2011-10-24 14:28:59.828000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource13,2011-09-09 01:06:40.020000+00:00,task-38632,Confirmation of receipt,complete,EMPTY,Resource13,2011-09-21 09:42:20.087000+00:00 +Desk,LEFT_case-9487,2011-11-04 01:06:40+00:00,General,2011-10-24 14:28:59.828000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource13,2011-09-09 01:06:40.020000+00:00,task-39673,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-09-21 09:43:29.330000+00:00 +Desk,LEFT_case-9487,2011-11-04 01:06:40+00:00,General,2011-10-24 14:28:59.828000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource13,2011-09-09 01:06:40.020000+00:00,task-39672,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-09-21 09:44:18.054000+00:00 +Internet,LEFT_case-9494,2011-11-06 01:06:40+00:00,General,2011-09-29 13:34:49.834000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-38650,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 15:27:33.064000+00:00 +Internet,LEFT_case-9494,2011-11-06 01:06:40+00:00,General,2011-09-29 13:34:49.834000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-39838,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-21 15:28:23.539000+00:00 +Internet,LEFT_case-9494,2011-11-06 01:06:40+00:00,General,2011-09-29 13:34:49.834000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-39837,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-21 15:28:55.259000+00:00 +Internet,LEFT_case-9495,2011-11-06 01:06:40+00:00,General,2011-11-07 11:24:35.404000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-38661,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-22 08:57:36.892000+00:00 +Internet,LEFT_case-9495,2011-11-06 01:06:40+00:00,General,2011-11-07 11:24:35.404000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-39894,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-22 08:58:21.088000+00:00 +Internet,LEFT_case-9495,2011-11-06 01:06:40+00:00,General,2011-11-07 11:24:35.404000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-39893,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-22 08:59:21.522000+00:00 +Internet,LEFT_case-9528,2011-11-07 01:06:40+00:00,General,2011-10-06 14:30:49.004000+00:00,2011-11-07 01:06:40.010000+00:00,Group 5,Resource05,2011-09-12 01:06:40.020000+00:00,task-38811,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-19 12:19:52.001000+00:00 +Internet,LEFT_case-9528,2011-11-07 01:06:40+00:00,General,2011-10-06 14:30:49.004000+00:00,2011-11-07 01:06:40.010000+00:00,Group 5,Resource05,2011-09-12 01:06:40.020000+00:00,task-39431,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-19 12:25:37.065000+00:00 +Internet,LEFT_case-9528,2011-11-07 01:06:40+00:00,General,2011-10-06 14:30:49.004000+00:00,2011-11-07 01:06:40.010000+00:00,Group 5,Resource05,2011-09-12 01:06:40.020000+00:00,task-39428,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-19 12:52:20.414000+00:00 +Internet,LEFT_case-9532,2011-11-08 01:06:40+00:00,General,2011-10-25 14:14:37.632000+00:00,2011-11-08 01:06:40.010000+00:00,Group 6,Resource37,2011-09-13 01:06:40.020000+00:00,task-38815,Confirmation of receipt,complete,EMPTY,Resource25,2011-10-25 09:12:28.347000+00:00 +Internet,LEFT_case-9532,2011-11-08 01:06:40+00:00,General,2011-10-25 14:14:37.632000+00:00,2011-11-08 01:06:40.010000+00:00,Group 6,Resource37,2011-09-13 01:06:40.020000+00:00,task-44355,T04 Determine confirmation of receipt,complete,Group 3,Resource25,2011-10-25 09:13:21.444000+00:00 +Internet,LEFT_case-9532,2011-11-08 01:06:40+00:00,General,2011-10-25 14:14:37.632000+00:00,2011-11-08 01:06:40.010000+00:00,Group 6,Resource37,2011-09-13 01:06:40.020000+00:00,task-44354,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-10-25 09:14:07.874000+00:00 +Internet,LEFT_case-9532,2011-11-08 01:06:40+00:00,General,2011-10-25 14:14:37.632000+00:00,2011-11-08 01:06:40.010000+00:00,Group 6,Resource37,2011-09-13 01:06:40.020000+00:00,task-44357,T08 Draft and send request for advice,complete,Group 1,Resource25,2011-10-25 09:14:42.520000+00:00 +Internet,LEFT_case-9532,2011-11-08 01:06:40+00:00,General,2011-10-25 14:14:37.632000+00:00,2011-11-08 01:06:40.010000+00:00,Group 6,Resource37,2011-09-13 01:06:40.020000+00:00,task-44358,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource25,2011-10-25 09:15:24.426000+00:00 +Internet,LEFT_case-9532,2011-11-08 01:06:40+00:00,General,2011-10-25 14:14:37.632000+00:00,2011-11-08 01:06:40.010000+00:00,Group 6,Resource37,2011-09-13 01:06:40.020000+00:00,task-44359,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-10-25 09:15:51.403000+00:00 +Internet,LEFT_case-9542,2011-11-08 00:00:00+00:00,General,,2011-11-08 00:00:00.010000+00:00,Group 5,Resource09,2011-09-13 13:53:46.937000+00:00,task-38847,Confirmation of receipt,complete,EMPTY,Resource09,2012-01-12 11:30:24.529000+00:00 +Internet,LEFT_case-9542,2011-11-08 00:00:00+00:00,General,,2011-11-08 00:00:00.010000+00:00,Group 5,Resource09,2011-09-13 13:53:46.937000+00:00,task-52066,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2012-01-12 11:31:48.940000+00:00 +Internet,LEFT_case-9542,2011-11-08 00:00:00+00:00,General,,2011-11-08 00:00:00.010000+00:00,Group 5,Resource09,2011-09-13 13:53:46.937000+00:00,task-52065,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2012-01-12 11:33:21.699000+00:00 +Internet,LEFT_case-9543,2011-11-04 01:06:40+00:00,General,2011-09-29 11:58:55.050000+00:00,2011-11-04 01:06:40.010000+00:00,Group 8,Resource11,2011-09-09 01:06:40.020000+00:00,task-38859,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 14:45:03.537000+00:00 +Internet,LEFT_case-9543,2011-11-04 01:06:40+00:00,General,2011-09-29 11:58:55.050000+00:00,2011-11-04 01:06:40.010000+00:00,Group 8,Resource11,2011-09-09 01:06:40.020000+00:00,task-39814,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-21 14:45:50.165000+00:00 +Internet,LEFT_case-9543,2011-11-04 01:06:40+00:00,General,2011-09-29 11:58:55.050000+00:00,2011-11-04 01:06:40.010000+00:00,Group 8,Resource11,2011-09-09 01:06:40.020000+00:00,task-39813,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-21 14:46:22.940000+00:00 +Internet,LEFT_case-9544,2011-11-08 14:29:44.135000+00:00,General,2011-09-29 13:44:39.420000+00:00,2011-11-08 14:29:44.135000+00:00,Group 8,Resource11,2011-09-13 14:29:44.135000+00:00,task-38883,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 15:58:04.647000+00:00 +Internet,LEFT_case-9544,2011-11-08 14:29:44.135000+00:00,General,2011-09-29 13:44:39.420000+00:00,2011-11-08 14:29:44.135000+00:00,Group 8,Resource11,2011-09-13 14:29:44.135000+00:00,task-39859,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-21 15:59:14.985000+00:00 +Internet,LEFT_case-9544,2011-11-08 14:29:44.135000+00:00,General,2011-09-29 13:44:39.420000+00:00,2011-11-08 14:29:44.135000+00:00,Group 8,Resource11,2011-09-13 14:29:44.135000+00:00,task-39858,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-21 16:00:01.786000+00:00 +Internet,LEFT_case-9545,2011-11-08 01:06:40+00:00,General,2011-10-10 11:38:23.529000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-38890,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-20 15:39:16.472000+00:00 +Internet,LEFT_case-9545,2011-11-08 01:06:40+00:00,General,2011-10-10 11:38:23.529000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-39615,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-20 15:40:30.567000+00:00 +Internet,LEFT_case-9545,2011-11-08 01:06:40+00:00,General,2011-10-10 11:38:23.529000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-39614,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-20 15:41:42.340000+00:00 +Internet,LEFT_case-9554,2011-11-08 01:06:40+00:00,General,2011-11-01 09:46:40.220000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-38908,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-27 10:19:27.159000+00:00 +Internet,LEFT_case-9554,2011-11-08 01:06:40+00:00,General,2011-11-01 09:46:40.220000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-40586,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-27 10:20:23.298000+00:00 +Internet,LEFT_case-9554,2011-11-08 01:06:40+00:00,General,2011-11-01 09:46:40.220000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-40585,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-27 10:21:02.345000+00:00 +Internet,LEFT_case-9554,2011-11-08 01:06:40+00:00,General,2011-11-01 09:46:40.220000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-40590,T16 Report reasons to hold request,complete,Group 1,Resource05,2011-09-27 10:22:41.154000+00:00 +Internet,LEFT_case-9554,2011-11-08 01:06:40+00:00,General,2011-11-01 09:46:40.220000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-40599,T19 Determine report Y to stop indication,complete,Group 3,Resource05,2011-09-27 10:33:40.371000+00:00 +Internet,LEFT_case-9557,2011-12-21 01:06:40+00:00,General,2011-12-12 15:51:22.111000+00:00,2011-12-21 01:06:40.010000+00:00,Group 5,Resource02,2011-09-14 01:06:40.020000+00:00,task-38913,Confirmation of receipt,complete,EMPTY,Resource02,2011-09-26 10:25:34.011000+00:00 +Internet,LEFT_case-9557,2011-12-21 01:06:40+00:00,General,2011-12-12 15:51:22.111000+00:00,2011-12-21 01:06:40.010000+00:00,Group 5,Resource02,2011-09-14 01:06:40.020000+00:00,task-40310,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-09-26 10:26:28.080000+00:00 +Internet,LEFT_case-9557,2011-12-21 01:06:40+00:00,General,2011-12-12 15:51:22.111000+00:00,2011-12-21 01:06:40.010000+00:00,Group 5,Resource02,2011-09-14 01:06:40.020000+00:00,task-40309,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-17 14:57:01.989000+00:00 +Internet,LEFT_case-9562,2011-11-08 01:06:40+00:00,General,2011-10-06 09:07:47.705000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource12,2011-09-13 01:06:40.020000+00:00,task-38959,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-22 14:40:19.636000+00:00 +Internet,LEFT_case-9562,2011-11-08 01:06:40+00:00,General,2011-10-06 09:07:47.705000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource12,2011-09-13 01:06:40.020000+00:00,task-39977,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-22 14:44:00.716000+00:00 +Internet,LEFT_case-9562,2011-11-08 01:06:40+00:00,General,2011-10-06 09:07:47.705000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource12,2011-09-13 01:06:40.020000+00:00,task-39976,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-22 14:45:08.036000+00:00 +Internet,LEFT_case-9563,2011-10-28 01:06:40+00:00,General,2011-09-20 12:06:47.797000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-38963,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-15 08:50:22.376000+00:00 +Internet,LEFT_case-9563,2011-10-28 01:06:40+00:00,General,2011-09-20 12:06:47.797000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-38976,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-15 08:50:58.360000+00:00 +Internet,LEFT_case-9563,2011-10-28 01:06:40+00:00,General,2011-09-20 12:06:47.797000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-38975,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-15 08:51:34.799000+00:00 +Internet,LEFT_case-9574,2011-11-09 01:06:40+00:00,General,2011-09-27 14:48:52.484000+00:00,2011-11-09 01:06:40.010000+00:00,Group 8,Resource01,2011-09-14 01:06:40.020000+00:00,task-39083,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-26 14:40:40.421000+00:00 +Internet,LEFT_case-9574,2011-11-09 01:06:40+00:00,General,2011-09-27 14:48:52.484000+00:00,2011-11-09 01:06:40.010000+00:00,Group 8,Resource01,2011-09-14 01:06:40.020000+00:00,task-40492,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-26 14:46:14.377000+00:00 +Internet,LEFT_case-9574,2011-11-09 01:06:40+00:00,General,2011-09-27 14:48:52.484000+00:00,2011-11-09 01:06:40.010000+00:00,Group 8,Resource01,2011-09-14 01:06:40.020000+00:00,task-40493,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-09-27 14:01:18.292000+00:00 +Internet,LEFT_case-9574,2011-11-09 01:06:40+00:00,General,2011-09-27 14:48:52.484000+00:00,2011-11-09 01:06:40.010000+00:00,Group 8,Resource01,2011-09-14 01:06:40.020000+00:00,task-40509,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-09-27 14:47:55.209000+00:00 +Internet,LEFT_case-9574,2011-11-09 01:06:40+00:00,General,2011-09-27 14:48:52.484000+00:00,2011-11-09 01:06:40.010000+00:00,Group 8,Resource01,2011-09-14 01:06:40.020000+00:00,task-40674,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-09-27 14:48:37.187000+00:00 +Internet,LEFT_case-9623,2011-11-10 01:06:40+00:00,General,2011-11-01 12:19:15.572000+00:00,2011-11-10 01:06:40.010000+00:00,Group 8,Resource11,2011-09-15 01:06:40.020000+00:00,task-39386,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-30 14:05:30.453000+00:00 +Internet,LEFT_case-9623,2011-11-10 01:06:40+00:00,General,2011-11-01 12:19:15.572000+00:00,2011-11-10 01:06:40.010000+00:00,Group 8,Resource11,2011-09-15 01:06:40.020000+00:00,task-41044,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-30 14:06:05.944000+00:00 +Internet,LEFT_case-9623,2011-11-10 01:06:40+00:00,General,2011-11-01 12:19:15.572000+00:00,2011-11-10 01:06:40.010000+00:00,Group 8,Resource11,2011-09-15 01:06:40.020000+00:00,task-41043,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-30 14:06:37.513000+00:00 +e-mail,LEFT_case-9624,2011-11-14 08:53:11.527000+00:00,General,2011-10-06 10:00:38.440000+00:00,2011-11-14 08:53:11.527000+00:00,,admin1,2011-09-19 08:53:11.527000+00:00,task-39388,Confirmation of receipt,complete,EMPTY,Resource09,2011-09-19 12:32:59.548000+00:00 +e-mail,LEFT_case-9624,2011-11-14 08:53:11.527000+00:00,General,2011-10-06 10:00:38.440000+00:00,2011-11-14 08:53:11.527000+00:00,,admin1,2011-09-19 08:53:11.527000+00:00,task-39435,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-09-19 12:34:58.803000+00:00 +e-mail,LEFT_case-9624,2011-11-14 08:53:11.527000+00:00,General,2011-10-06 10:00:38.440000+00:00,2011-11-14 08:53:11.527000+00:00,,admin1,2011-09-19 08:53:11.527000+00:00,task-39445,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-09-19 12:47:07.785000+00:00 +Internet,LEFT_case-9626,2011-12-23 01:06:40+00:00,General,2011-12-19 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource23,2011-09-16 01:06:40.020000+00:00,task-39399,Confirmation of receipt,complete,EMPTY,Resource23,2011-09-26 13:23:50.214000+00:00 +Internet,LEFT_case-9626,2011-12-23 01:06:40+00:00,General,2011-12-19 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource23,2011-09-16 01:06:40.020000+00:00,task-40448,T04 Determine confirmation of receipt,complete,EMPTY,Resource23,2011-09-26 13:26:12.802000+00:00 +Internet,LEFT_case-9626,2011-12-23 01:06:40+00:00,General,2011-12-19 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource23,2011-09-16 01:06:40.020000+00:00,task-40447,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-09-26 13:27:16.922000+00:00 +Internet,LEFT_case-9628,2011-11-14 11:28:43.636000+00:00,General,2011-11-16 10:04:26.017000+00:00,2011-11-14 11:28:43.636000+00:00,Group 5,Resource04,2011-09-19 11:28:43.636000+00:00,task-39420,Confirmation of receipt,complete,EMPTY,Resource04,2011-09-27 09:46:52.030000+00:00 +Internet,LEFT_case-9628,2011-11-14 11:28:43.636000+00:00,General,2011-11-16 10:04:26.017000+00:00,2011-11-14 11:28:43.636000+00:00,Group 5,Resource04,2011-09-19 11:28:43.636000+00:00,task-40578,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-09-27 10:18:49.679000+00:00 +Internet,LEFT_case-9628,2011-11-14 11:28:43.636000+00:00,General,2011-11-16 10:04:26.017000+00:00,2011-11-14 11:28:43.636000+00:00,Group 5,Resource04,2011-09-19 11:28:43.636000+00:00,task-40577,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-09-27 10:23:52.916000+00:00 +Internet,LEFT_case-9631,2011-11-13 01:06:40+00:00,General,2011-10-10 15:07:48.586000+00:00,2011-11-13 01:06:40.010000+00:00,Group 8,Resource11,2011-09-18 01:06:40.020000+00:00,task-39455,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-26 14:57:41.419000+00:00 +Internet,LEFT_case-9631,2011-11-13 01:06:40+00:00,General,2011-10-10 15:07:48.586000+00:00,2011-11-13 01:06:40.010000+00:00,Group 8,Resource11,2011-09-18 01:06:40.020000+00:00,task-40515,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-26 15:01:45.731000+00:00 +Internet,LEFT_case-9631,2011-11-13 01:06:40+00:00,General,2011-10-10 15:07:48.586000+00:00,2011-11-13 01:06:40.010000+00:00,Group 8,Resource11,2011-09-18 01:06:40.020000+00:00,task-40514,T06 Determine necessity of stop advice,complete,EMPTY,Resource03,2011-09-26 15:02:25.581000+00:00 +Internet,LEFT_case-9631,2011-11-13 01:06:40+00:00,General,2011-10-10 15:07:48.586000+00:00,2011-11-13 01:06:40.010000+00:00,Group 8,Resource11,2011-09-18 01:06:40.020000+00:00,task-40518,T16 Report reasons to hold request,complete,Group 1,Resource01,2011-09-29 13:51:57.612000+00:00 +Internet,LEFT_case-9631,2011-11-13 01:06:40+00:00,General,2011-10-10 15:07:48.586000+00:00,2011-11-13 01:06:40.010000+00:00,Group 8,Resource11,2011-09-18 01:06:40.020000+00:00,task-40840,T19 Determine report Y to stop indication,complete,Group 3,Resource01,2011-09-29 13:52:34.107000+00:00 +Internet,LEFT_case-9633,2011-11-14 01:06:40+00:00,General,2011-11-16 09:56:19.555000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-39464,Confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 15:49:18.282000+00:00 +Internet,LEFT_case-9633,2011-11-14 01:06:40+00:00,General,2011-11-16 09:56:19.555000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41115,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 15:50:57.872000+00:00 +Internet,LEFT_case-9633,2011-11-14 01:06:40+00:00,General,2011-11-16 09:56:19.555000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41111,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-10-05 21:38:45.530000+00:00 +Internet,LEFT_case-9635,2011-11-09 01:06:40+00:00,General,,2011-11-09 01:06:40.010000+00:00,Group 6,Resource33,2011-09-14 01:06:40.020000+00:00,task-39480,Confirmation of receipt,complete,EMPTY,Resource33,2011-10-03 14:34:49.913000+00:00 +Internet,LEFT_case-9635,2011-11-09 01:06:40+00:00,General,,2011-11-09 01:06:40.010000+00:00,Group 6,Resource33,2011-09-14 01:06:40.020000+00:00,task-41265,T06 Determine necessity of stop advice,complete,Group 1,Resource33,2011-10-03 14:53:44.874000+00:00 +Internet,LEFT_case-9635,2011-11-09 01:06:40+00:00,General,,2011-11-09 01:06:40.010000+00:00,Group 6,Resource33,2011-09-14 01:06:40.020000+00:00,task-41310,T04 Determine confirmation of receipt,complete,Group 3,Resource38,2011-10-03 16:28:31.692000+00:00 +Internet,LEFT_case-9639,2011-11-14 01:06:40+00:00,General,2011-10-20 13:47:55.996000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-09-19 01:06:40.020000+00:00,task-39493,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-14 10:11:00.255000+00:00 +Internet,LEFT_case-9639,2011-11-14 01:06:40+00:00,General,2011-10-20 13:47:55.996000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-09-19 01:06:40.020000+00:00,task-43328,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-14 10:11:44.272000+00:00 +Internet,LEFT_case-9639,2011-11-14 01:06:40+00:00,General,2011-10-20 13:47:55.996000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-09-19 01:06:40.020000+00:00,task-43327,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-14 10:12:19.209000+00:00 +Internet,LEFT_case-9652,2011-11-14 01:06:40+00:00,General,2011-10-11 07:57:35.374000+00:00,2011-11-14 01:06:40.010000+00:00,Group 8,Resource11,2011-09-19 01:06:40.020000+00:00,task-39584,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-26 10:15:09.846000+00:00 +Internet,LEFT_case-9652,2011-11-14 01:06:40+00:00,General,2011-10-11 07:57:35.374000+00:00,2011-11-14 01:06:40.010000+00:00,Group 8,Resource11,2011-09-19 01:06:40.020000+00:00,task-40306,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-26 10:17:03.554000+00:00 +Internet,LEFT_case-9652,2011-11-14 01:06:40+00:00,General,2011-10-11 07:57:35.374000+00:00,2011-11-14 01:06:40.010000+00:00,Group 8,Resource11,2011-09-19 01:06:40.020000+00:00,task-40305,T06 Determine necessity of stop advice,complete,EMPTY,Resource03,2011-09-26 10:37:09.017000+00:00 +Internet,LEFT_case-9653,2011-11-15 01:06:40+00:00,General,2011-11-07 07:57:09.029000+00:00,2011-11-15 01:06:40.010000+00:00,Group 8,Resource11,2011-09-20 01:06:40.020000+00:00,task-39591,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 11:08:28.762000+00:00 +Internet,LEFT_case-9653,2011-11-15 01:06:40+00:00,General,2011-11-07 07:57:09.029000+00:00,2011-11-15 01:06:40.010000+00:00,Group 8,Resource11,2011-09-20 01:06:40.020000+00:00,task-42845,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 11:09:02.832000+00:00 +Internet,LEFT_case-9653,2011-11-15 01:06:40+00:00,General,2011-11-07 07:57:09.029000+00:00,2011-11-15 01:06:40.010000+00:00,Group 8,Resource11,2011-09-20 01:06:40.020000+00:00,task-42844,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 11:09:54.859000+00:00 +Internet,LEFT_case-9670,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,,Resource50,2011-09-15 01:06:40.020000+00:00,task-39724,Confirmation of receipt,complete,EMPTY,Resource02,2011-09-26 08:41:00.730000+00:00 +Internet,LEFT_case-9670,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,,Resource50,2011-09-15 01:06:40.020000+00:00,task-40244,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-09-26 08:42:04.392000+00:00 +Internet,LEFT_case-9670,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,,Resource50,2011-09-15 01:06:40.020000+00:00,task-40243,T06 Determine necessity of stop advice,complete,EMPTY,Resource13,2011-09-30 16:29:19.407000+00:00 +Internet,LEFT_case-9697,2011-11-14 01:06:40+00:00,General,2011-10-24 13:18:28.237000+00:00,2011-11-14 01:06:40.010000+00:00,,admin1,2011-09-19 01:06:40.020000+00:00,task-39891,Confirmation of receipt,complete,EMPTY,Resource09,2011-10-14 10:20:48.245000+00:00 +Internet,LEFT_case-9697,2011-11-14 01:06:40+00:00,General,2011-10-24 13:18:28.237000+00:00,2011-11-14 01:06:40.010000+00:00,,admin1,2011-09-19 01:06:40.020000+00:00,task-43341,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-14 10:22:39.101000+00:00 +Internet,LEFT_case-9697,2011-11-14 01:06:40+00:00,General,2011-10-24 13:18:28.237000+00:00,2011-11-14 01:06:40.010000+00:00,,admin1,2011-09-19 01:06:40.020000+00:00,task-43342,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-10-14 10:52:05.305000+00:00 +Internet,LEFT_case-9700,2011-11-03 01:06:40+00:00,General,2011-10-24 14:29:49.295000+00:00,2011-11-03 01:06:40.010000+00:00,Group 5,Resource04,2011-07-28 01:06:40.020000+00:00,task-39921,Confirmation of receipt,complete,EMPTY,Resource04,2011-09-23 09:58:15.049000+00:00 +Internet,LEFT_case-9700,2011-11-03 01:06:40+00:00,General,2011-10-24 14:29:49.295000+00:00,2011-11-03 01:06:40.010000+00:00,Group 5,Resource04,2011-07-28 01:06:40.020000+00:00,task-40029,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-09-23 10:03:00.213000+00:00 +Internet,LEFT_case-9700,2011-11-03 01:06:40+00:00,General,2011-10-24 14:29:49.295000+00:00,2011-11-03 01:06:40.010000+00:00,Group 5,Resource04,2011-07-28 01:06:40.020000+00:00,task-40026,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-09-23 10:03:36.047000+00:00 +Internet,LEFT_case-9701,2011-11-16 01:06:40+00:00,General,2011-09-29 13:56:04.146000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-39943,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-26 09:19:57.013000+00:00 +Internet,LEFT_case-9701,2011-11-16 01:06:40+00:00,General,2011-09-29 13:56:04.146000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40273,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-26 09:20:34.553000+00:00 +Internet,LEFT_case-9701,2011-11-16 01:06:40+00:00,General,2011-09-29 13:56:04.146000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40277,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-26 09:21:46.194000+00:00 +Internet,LEFT_case-9704,2011-11-16 01:06:40+00:00,General,2011-10-06 14:25:21.217000+00:00,2011-11-16 01:06:40.010000+00:00,Group 5,Resource23,2011-09-21 01:06:40.020000+00:00,task-39948,Confirmation of receipt,complete,EMPTY,admin2,2011-10-06 14:25:22.501000+00:00 +Internet,LEFT_case-9710,2011-11-17 01:06:40+00:00,General,2011-10-11 08:30:07.381000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-39991,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-23 15:01:51.693000+00:00 +Internet,LEFT_case-9710,2011-11-17 01:06:40+00:00,General,2011-10-11 08:30:07.381000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40174,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-23 15:02:29.598000+00:00 +Internet,LEFT_case-9710,2011-11-17 01:06:40+00:00,General,2011-10-11 08:30:07.381000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40173,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-23 15:03:06.523000+00:00 +Internet,LEFT_case-9711,2011-11-16 01:06:40+00:00,General,2011-10-11 08:03:06.258000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-39995,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-30 10:43:30.220000+00:00 +Internet,LEFT_case-9711,2011-11-16 01:06:40+00:00,General,2011-10-11 08:03:06.258000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40967,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-30 10:44:12.160000+00:00 +Internet,LEFT_case-9711,2011-11-16 01:06:40+00:00,General,2011-10-11 08:03:06.258000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40966,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-30 10:44:46.049000+00:00 +Internet,LEFT_case-9721,2011-11-16 01:06:40+00:00,General,2011-10-04 09:10:22.547000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource01,2011-09-21 01:06:40.020000+00:00,task-40019,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-30 11:03:34.407000+00:00 +Internet,LEFT_case-9721,2011-11-16 01:06:40+00:00,General,2011-10-04 09:10:22.547000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource01,2011-09-21 01:06:40.020000+00:00,task-40987,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-10-03 15:21:23.183000+00:00 +Internet,LEFT_case-9721,2011-11-16 01:06:40+00:00,General,2011-10-04 09:10:22.547000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource01,2011-09-21 01:06:40.020000+00:00,task-40986,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-04 09:07:29.503000+00:00 +Internet,LEFT_case-9721,2011-11-16 01:06:40+00:00,General,2011-10-04 09:10:22.547000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource01,2011-09-21 01:06:40.020000+00:00,task-41353,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-10-04 09:09:32.457000+00:00 +Internet,LEFT_case-9721,2011-11-16 01:06:40+00:00,General,2011-10-04 09:10:22.547000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource01,2011-09-21 01:06:40.020000+00:00,task-41355,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-10-04 09:10:06.901000+00:00 +Internet,LEFT_case-9722,2011-11-16 01:06:40+00:00,General,2011-10-21 11:58:15.716000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40024,Confirmation of receipt,complete,EMPTY,Resource21,2011-09-30 11:21:13.671000+00:00 +Internet,LEFT_case-9722,2011-11-16 01:06:40+00:00,General,2011-10-21 11:58:15.716000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40992,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-09-30 11:22:00.194000+00:00 +Internet,LEFT_case-9722,2011-11-16 01:06:40+00:00,General,2011-10-21 11:58:15.716000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40995,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-09-30 11:23:39.538000+00:00 +Internet,LEFT_case-9725,2011-11-16 01:06:40+00:00,General,2011-10-11 08:08:42.352000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40076,Confirmation of receipt,complete,EMPTY,Resource16,2011-09-30 08:32:23.321000+00:00 +Internet,LEFT_case-9725,2011-11-16 01:06:40+00:00,General,2011-10-11 08:08:42.352000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40898,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-09-30 08:33:53.476000+00:00 +Internet,LEFT_case-9725,2011-11-16 01:06:40+00:00,General,2011-10-11 08:08:42.352000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40899,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-09-30 08:34:50.848000+00:00 +Internet,LEFT_case-9727,2011-11-17 01:06:40+00:00,General,2011-10-11 08:37:46.803000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40197,Confirmation of receipt,complete,EMPTY,Resource16,2011-09-30 09:58:40.550000+00:00 +Internet,LEFT_case-9727,2011-11-17 01:06:40+00:00,General,2011-10-11 08:37:46.803000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40941,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-09-30 09:59:38.257000+00:00 +Internet,LEFT_case-9727,2011-11-17 01:06:40+00:00,General,2011-10-11 08:37:46.803000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40940,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-09-30 10:00:27.528000+00:00 +Internet,LEFT_case-9746,2011-11-17 01:06:40+00:00,General,2011-10-04 09:15:07.546000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource01,2011-09-22 01:06:40.020000+00:00,task-40246,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-03 10:18:35.659000+00:00 +Internet,LEFT_case-9746,2011-11-17 01:06:40+00:00,General,2011-10-04 09:15:07.546000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource01,2011-09-22 01:06:40.020000+00:00,task-41197,T04 Determine confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 09:12:56.342000+00:00 +Internet,LEFT_case-9746,2011-11-17 01:06:40+00:00,General,2011-10-04 09:15:07.546000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource01,2011-09-22 01:06:40.020000+00:00,task-41196,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-04 09:13:29.252000+00:00 +Internet,LEFT_case-9746,2011-11-17 01:06:40+00:00,General,2011-10-04 09:15:07.546000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource01,2011-09-22 01:06:40.020000+00:00,task-41359,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-10-04 09:14:15.302000+00:00 +Internet,LEFT_case-9746,2011-11-17 01:06:40+00:00,General,2011-10-04 09:15:07.546000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource01,2011-09-22 01:06:40.020000+00:00,task-41361,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-10-04 09:14:52.889000+00:00 +Internet,LEFT_case-9747,2013-01-03 00:00:00+00:00,General,,2013-01-03 00:00:00.010000+00:00,Group 5,Resource22,2011-09-22 01:06:40.020000+00:00,task-40290,Confirmation of receipt,complete,EMPTY,Resource22,2011-10-10 12:50:47.498000+00:00 +Internet,LEFT_case-9747,2013-01-03 00:00:00+00:00,General,,2013-01-03 00:00:00.010000+00:00,Group 5,Resource22,2011-09-22 01:06:40.020000+00:00,task-42440,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-10-10 12:51:55.574000+00:00 +Internet,LEFT_case-9747,2013-01-03 00:00:00+00:00,General,,2013-01-03 00:00:00.010000+00:00,Group 5,Resource22,2011-09-22 01:06:40.020000+00:00,task-42439,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-10-10 12:59:33.869000+00:00 +Internet,LEFT_case-9748,2011-11-17 01:06:40+00:00,General,2011-10-26 11:02:42.995000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40303,Confirmation of receipt,complete,Group 1,Resource03,2011-09-30 15:42:14.628000+00:00 +Internet,LEFT_case-9748,2011-11-17 01:06:40+00:00,General,2011-10-26 11:02:42.995000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41099,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-30 15:46:10.426000+00:00 +Internet,LEFT_case-9748,2011-11-17 01:06:40+00:00,General,2011-10-26 11:02:42.995000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41098,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-30 15:46:40.636000+00:00 +Internet,LEFT_case-9749,2011-11-17 01:06:40+00:00,General,2011-10-11 10:08:25.252000+00:00,2011-11-17 01:06:40.010000+00:00,Group 5,Resource05,2011-09-22 01:06:40.020000+00:00,task-40312,Confirmation of receipt,complete,EMPTY,Resource05,2011-10-06 17:41:44.676000+00:00 +Internet,LEFT_case-9749,2011-11-17 01:06:40+00:00,General,2011-10-11 10:08:25.252000+00:00,2011-11-17 01:06:40.010000+00:00,Group 5,Resource05,2011-09-22 01:06:40.020000+00:00,task-42026,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-10-06 17:42:55.518000+00:00 +Internet,LEFT_case-9749,2011-11-17 01:06:40+00:00,General,2011-10-11 10:08:25.252000+00:00,2011-11-17 01:06:40.010000+00:00,Group 5,Resource05,2011-09-22 01:06:40.020000+00:00,task-42027,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-10-06 17:43:11.945000+00:00 +Internet,LEFT_case-9751,2011-11-17 01:06:40+00:00,General,2011-10-26 09:52:00.253000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40342,Confirmation of receipt,complete,Group 1,Resource03,2011-09-30 16:07:41.244000+00:00 +Internet,LEFT_case-9751,2011-11-17 01:06:40+00:00,General,2011-10-26 09:52:00.253000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41132,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-30 16:08:19.588000+00:00 +Internet,LEFT_case-9751,2011-11-17 01:06:40+00:00,General,2011-10-26 09:52:00.253000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41131,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-30 16:08:50.711000+00:00 +Internet,LEFT_case-9752,2011-10-18 01:06:40+00:00,General,2011-10-17 13:52:49.040000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-40365,Confirmation of receipt,complete,Group 1,Resource02,2011-09-29 11:57:15.876000+00:00 +Internet,LEFT_case-9752,2011-10-18 01:06:40+00:00,General,2011-10-17 13:52:49.040000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-40800,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-09-29 11:59:06.872000+00:00 +Internet,LEFT_case-9752,2011-10-18 01:06:40+00:00,General,2011-10-17 13:52:49.040000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-40798,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-09-29 12:00:14.150000+00:00 +Internet,LEFT_case-9753,2011-11-17 01:06:40+00:00,General,2011-10-11 09:01:04.653000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40373,Confirmation of receipt,complete,Group 1,Resource03,2011-10-03 09:09:18.501000+00:00 +Internet,LEFT_case-9753,2011-11-17 01:06:40+00:00,General,2011-10-11 09:01:04.653000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41174,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-03 09:10:26.100000+00:00 +Internet,LEFT_case-9753,2011-11-17 01:06:40+00:00,General,2011-10-11 09:01:04.653000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41173,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-03 09:10:58.831000+00:00 +Internet,LEFT_case-9754,2011-11-17 01:06:40+00:00,General,2011-10-21 12:45:22.019000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40383,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-04 08:43:35.546000+00:00 +Internet,LEFT_case-9754,2011-11-17 01:06:40+00:00,General,2011-10-21 12:45:22.019000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41333,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-04 08:44:54.909000+00:00 +Internet,LEFT_case-9754,2011-11-17 01:06:40+00:00,General,2011-10-21 12:45:22.019000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41332,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-04 08:46:21.048000+00:00 +Internet,LEFT_case-9756,2011-11-17 01:06:40+00:00,General,2011-10-21 12:53:05.599000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40398,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 09:37:52.101000+00:00 +Internet,LEFT_case-9756,2011-11-17 01:06:40+00:00,General,2011-10-21 12:53:05.599000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41376,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-04 09:38:38.057000+00:00 +Internet,LEFT_case-9756,2011-11-17 01:06:40+00:00,General,2011-10-21 12:53:05.599000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41375,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-04 09:39:14.261000+00:00 +Internet,LEFT_case-9758,2011-11-18 01:06:40+00:00,General,2011-10-21 13:05:18.728000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-40413,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 10:11:44.556000+00:00 +Internet,LEFT_case-9758,2011-11-18 01:06:40+00:00,General,2011-10-21 13:05:18.728000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-41421,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-04 10:12:34.443000+00:00 +Internet,LEFT_case-9758,2011-11-18 01:06:40+00:00,General,2011-10-21 13:05:18.728000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-41418,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-04 10:13:02.739000+00:00 +Internet,LEFT_case-9759,2011-11-18 01:06:40+00:00,General,,2011-11-18 01:06:40.010000+00:00,Group 5,Resource04,2011-09-23 01:06:40.020000+00:00,task-40439,Confirmation of receipt,complete,EMPTY,Resource04,2011-10-10 11:41:25.702000+00:00 +Internet,LEFT_case-9759,2011-11-18 01:06:40+00:00,General,,2011-11-18 01:06:40.010000+00:00,Group 5,Resource04,2011-09-23 01:06:40.020000+00:00,task-42397,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-10-10 11:42:09.309000+00:00 +Internet,LEFT_case-9759,2011-11-18 01:06:40+00:00,General,,2011-11-18 01:06:40.010000+00:00,Group 5,Resource04,2011-09-23 01:06:40.020000+00:00,task-42396,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-10-10 14:34:23.097000+00:00 +Internet,LEFT_case-9762,2011-11-18 01:06:40+00:00,General,2011-10-21 13:14:40.192000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-40454,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 10:29:15.847000+00:00 +Internet,LEFT_case-9762,2011-11-18 01:06:40+00:00,General,2011-10-21 13:14:40.192000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-41451,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-04 10:29:40.505000+00:00 +Internet,LEFT_case-9762,2011-11-18 01:06:40+00:00,General,2011-10-21 13:14:40.192000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-41455,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-04 10:34:40.222000+00:00 +Internet,LEFT_case-9763,2011-12-13 13:30:01.533000+00:00,Experts,2011-09-26 15:19:04.083000+00:00,2011-12-13 13:30:01.533000+00:00,,Resource54,2011-09-26 14:30:01.533000+00:00,task-40504,Confirmation of receipt,complete,Group 1,admin2,2011-09-26 15:19:05.401000+00:00 +Internet,LEFT_case-9765,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,Group 5,Resource09,2011-09-15 01:06:40.020000+00:00,task-40539,Confirmation of receipt,complete,EMPTY,Resource09,2011-11-09 12:30:39.630000+00:00 +Internet,LEFT_case-9765,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,Group 5,Resource09,2011-09-15 01:06:40.020000+00:00,task-45992,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-11-09 12:31:16.108000+00:00 +Internet,LEFT_case-9765,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,Group 5,Resource09,2011-09-15 01:06:40.020000+00:00,task-45995,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-11-09 12:33:16.236000+00:00 +Internet,LEFT_case-9767,2011-11-14 01:06:40+00:00,General,2011-10-06 10:26:46.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-40555,Confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 14:30:00.552000+00:00 +Internet,LEFT_case-9767,2011-11-14 01:06:40+00:00,General,2011-10-06 10:26:46.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41064,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 14:31:20.426000+00:00 +Internet,LEFT_case-9767,2011-11-14 01:06:40+00:00,General,2011-10-06 10:26:46.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41063,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-09-30 14:32:17.902000+00:00 +Internet,LEFT_case-9776,2011-11-14 01:06:40+00:00,General,2011-10-05 10:53:29.744000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource05,2011-09-19 01:06:40.020000+00:00,task-40567,Confirmation of receipt,complete,EMPTY,Resource05,2011-10-04 13:55:53.460000+00:00 +Internet,LEFT_case-9776,2011-11-14 01:06:40+00:00,General,2011-10-05 10:53:29.744000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource05,2011-09-19 01:06:40.020000+00:00,task-41549,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-10-04 13:56:52.113000+00:00 +Internet,LEFT_case-9776,2011-11-14 01:06:40+00:00,General,2011-10-05 10:53:29.744000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource05,2011-09-19 01:06:40.020000+00:00,task-41551,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-10-04 13:57:55.358000+00:00 +Internet,LEFT_case-9776,2011-11-14 01:06:40+00:00,General,2011-10-05 10:53:29.744000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource05,2011-09-19 01:06:40.020000+00:00,task-41553,T11 Create document X request unlicensed,complete,Group 1,Resource05,2011-10-04 15:31:19.507000+00:00 +Internet,LEFT_case-9776,2011-11-14 01:06:40+00:00,General,2011-10-05 10:53:29.744000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource05,2011-09-19 01:06:40.020000+00:00,task-41599,T14 Determine document X request unlicensed,complete,Group 3,Resource05,2011-10-04 15:32:07.911000+00:00 +Internet,LEFT_case-9777,2011-11-14 01:06:40+00:00,General,,2011-11-14 01:06:40.010000+00:00,Group 5,Resource04,2011-09-19 01:06:40.020000+00:00,task-40579,Confirmation of receipt,complete,EMPTY,Resource04,2011-10-06 13:40:22.485000+00:00 +Internet,LEFT_case-9777,2011-11-14 01:06:40+00:00,General,,2011-11-14 01:06:40.010000+00:00,Group 5,Resource04,2011-09-19 01:06:40.020000+00:00,task-41963,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-10-06 13:41:04.006000+00:00 +Internet,LEFT_case-9777,2011-11-14 01:06:40+00:00,General,,2011-11-14 01:06:40.010000+00:00,Group 5,Resource04,2011-09-19 01:06:40.020000+00:00,task-41962,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-10-06 13:41:36.316000+00:00 +Internet,LEFT_case-9778,2011-11-14 01:06:40+00:00,General,2011-10-10 12:20:07.940000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-40598,Confirmation of receipt,complete,EMPTY,Resource13,2011-10-05 20:25:09.904000+00:00 +Internet,LEFT_case-9778,2011-11-14 01:06:40+00:00,General,2011-10-10 12:20:07.940000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41846,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-10-05 20:27:50.334000+00:00 +Internet,LEFT_case-9778,2011-11-14 01:06:40+00:00,General,2011-10-10 12:20:07.940000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41845,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-10-05 20:28:43.792000+00:00 +Internet,LEFT_case-9781,2011-11-15 01:06:40+00:00,General,2011-10-24 15:37:57.124000+00:00,2011-11-15 01:06:40.010000+00:00,Group 7,Resource35,2011-09-20 01:06:40.020000+00:00,task-40615,Confirmation of receipt,complete,EMPTY,admin2,2011-10-24 15:37:58.098000+00:00 +Internet,LEFT_case-9782,2011-11-15 01:06:40+00:00,General,2011-10-10 12:36:44.702000+00:00,2011-11-15 01:06:40.010000+00:00,Group 5,Resource05,2011-09-20 01:06:40.020000+00:00,task-40625,Confirmation of receipt,complete,EMPTY,Resource05,2011-10-06 15:03:45.228000+00:00 +Internet,LEFT_case-9782,2011-11-15 01:06:40+00:00,General,2011-10-10 12:36:44.702000+00:00,2011-11-15 01:06:40.010000+00:00,Group 5,Resource05,2011-09-20 01:06:40.020000+00:00,task-41990,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-10-06 15:05:11.911000+00:00 +Internet,LEFT_case-9782,2011-11-15 01:06:40+00:00,General,2011-10-10 12:36:44.702000+00:00,2011-11-15 01:06:40.010000+00:00,Group 5,Resource05,2011-09-20 01:06:40.020000+00:00,task-41989,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-10-06 15:06:55.274000+00:00 +Internet,LEFT_case-9786,2011-11-22 15:41:20.390000+00:00,General,2011-10-26 11:31:48.362000+00:00,2011-11-22 15:41:20.390000+00:00,Group 8,Resource11,2011-09-27 15:41:20.390000+00:00,task-40678,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-04 09:36:42.586000+00:00 +Internet,LEFT_case-9786,2011-11-22 15:41:20.390000+00:00,General,2011-10-26 11:31:48.362000+00:00,2011-11-22 15:41:20.390000+00:00,Group 8,Resource11,2011-09-27 15:41:20.390000+00:00,task-41372,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-04 09:37:35.615000+00:00 +Internet,LEFT_case-9786,2011-11-22 15:41:20.390000+00:00,General,2011-10-26 11:31:48.362000+00:00,2011-11-22 15:41:20.390000+00:00,Group 8,Resource11,2011-09-27 15:41:20.390000+00:00,task-41371,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-04 09:38:24.716000+00:00 +Internet,LEFT_case-9791,2011-11-22 01:06:40+00:00,General,2011-10-05 15:08:13.591000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-40685,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 10:56:59.202000+00:00 +Internet,LEFT_case-9791,2011-11-22 01:06:40+00:00,General,2011-10-05 15:08:13.591000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41496,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-10-05 13:39:46.563000+00:00 +Internet,LEFT_case-9791,2011-11-22 01:06:40+00:00,General,2011-10-05 15:08:13.591000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41495,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-05 15:06:52.563000+00:00 +Internet,LEFT_case-9791,2011-11-22 01:06:40+00:00,General,2011-10-05 15:08:13.591000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41788,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-10-05 15:07:29.219000+00:00 +Internet,LEFT_case-9791,2011-11-22 01:06:40+00:00,General,2011-10-05 15:08:13.591000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41791,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-10-05 15:08:00.214000+00:00 +Internet,LEFT_case-9793,2011-11-22 01:06:40+00:00,General,2011-10-05 15:10:19.252000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-40689,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 11:26:13.158000+00:00 +Internet,LEFT_case-9793,2011-11-22 01:06:40+00:00,General,2011-10-05 15:10:19.252000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41507,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-10-05 13:41:58.942000+00:00 +Internet,LEFT_case-9793,2011-11-22 01:06:40+00:00,General,2011-10-05 15:10:19.252000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41506,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-05 15:08:54.142000+00:00 +Internet,LEFT_case-9793,2011-11-22 01:06:40+00:00,General,2011-10-05 15:10:19.252000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41794,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-10-05 15:09:32.391000+00:00 +Internet,LEFT_case-9793,2011-11-22 01:06:40+00:00,General,2011-10-05 15:10:19.252000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41797,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-10-05 15:10:04.500000+00:00 +Internet,LEFT_case-9794,2011-11-22 01:06:40+00:00,General,2011-10-11 14:38:37.510000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource05,2011-09-27 01:06:40.020000+00:00,task-40696,Confirmation of receipt,complete,EMPTY,Resource05,2011-10-10 09:52:01.554000+00:00 +Internet,LEFT_case-9794,2011-11-22 01:06:40+00:00,General,2011-10-11 14:38:37.510000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource05,2011-09-27 01:06:40.020000+00:00,task-42315,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-10-10 09:53:05.367000+00:00 +Internet,LEFT_case-9794,2011-11-22 01:06:40+00:00,General,2011-10-11 14:38:37.510000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource05,2011-09-27 01:06:40.020000+00:00,task-42316,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-10-10 09:53:29.073000+00:00 +Internet,LEFT_case-9796,2011-11-22 01:06:40+00:00,General,2011-10-26 11:19:51.767000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource11,2011-09-27 01:06:40.020000+00:00,task-40698,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-04 10:12:14.127000+00:00 +Internet,LEFT_case-9796,2011-11-22 01:06:40+00:00,General,2011-10-26 11:19:51.767000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource11,2011-09-27 01:06:40.020000+00:00,task-41473,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-04 10:49:26.572000+00:00 +Internet,LEFT_case-9796,2011-11-22 01:06:40+00:00,General,2011-10-26 11:19:51.767000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource11,2011-09-27 01:06:40.020000+00:00,task-41420,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-04 10:50:12.328000+00:00 +Internet,LEFT_case-9804,2011-08-19 01:06:40+00:00,General,2011-10-10 14:48:03.366000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource11,2011-06-24 01:06:40.020000+00:00,task-40738,Confirmation of receipt,complete,EMPTY,Resource11,2011-10-04 08:24:58.199000+00:00 +Internet,LEFT_case-9804,2011-08-19 01:06:40+00:00,General,2011-10-10 14:48:03.366000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource11,2011-06-24 01:06:40.020000+00:00,task-41330,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-10-05 07:48:09.663000+00:00 +Internet,LEFT_case-9804,2011-08-19 01:06:40+00:00,General,2011-10-10 14:48:03.366000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource11,2011-06-24 01:06:40.020000+00:00,task-41620,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2011-10-05 07:51:06.795000+00:00 +Internet,LEFT_case-9823,2011-10-26 01:06:40+00:00,General,2011-10-26 09:46:21.997000+00:00,2011-10-26 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-40807,Confirmation of receipt,complete,EMPTY,Resource01,2011-10-13 17:56:27.069000+00:00 +Internet,LEFT_case-9823,2011-10-26 01:06:40+00:00,General,2011-10-26 09:46:21.997000+00:00,2011-10-26 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-43296,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-10-13 17:57:06.123000+00:00 +Internet,LEFT_case-9823,2011-10-26 01:06:40+00:00,General,2011-10-26 09:46:21.997000+00:00,2011-10-26 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-43298,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-10-13 17:58:10.389000+00:00 +Internet,LEFT_case-9826,2011-11-23 01:06:40+00:00,General,2011-11-30 12:44:48.919000+00:00,2011-11-23 01:06:40.010000+00:00,Group 5,Resource22,2011-09-28 01:06:40.020000+00:00,task-40863,Confirmation of receipt,complete,EMPTY,admin2,2011-11-30 12:44:49.990000+00:00 +Internet,LEFT_case-9837,2011-12-19 00:00:00+00:00,General,,2011-12-19 00:00:00.010000+00:00,Group 2,Resource21,2011-09-30 01:06:40.020000+00:00,task-40957,Confirmation of receipt,complete,EMPTY,Resource21,2011-12-13 12:11:46.729000+00:00 +Internet,LEFT_case-9839,2011-11-25 01:06:40+00:00,General,2011-10-27 12:08:55.838000+00:00,2011-11-25 01:06:40.010000+00:00,Group 8,Resource11,2011-09-30 01:06:40.020000+00:00,task-41004,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-05 10:47:10.795000+00:00 +Internet,LEFT_case-9839,2011-11-25 01:06:40+00:00,General,2011-10-27 12:08:55.838000+00:00,2011-11-25 01:06:40.010000+00:00,Group 8,Resource11,2011-09-30 01:06:40.020000+00:00,task-41673,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-05 10:48:23.828000+00:00 +Internet,LEFT_case-9839,2011-11-25 01:06:40+00:00,General,2011-10-27 12:08:55.838000+00:00,2011-11-25 01:06:40.010000+00:00,Group 8,Resource11,2011-09-30 01:06:40.020000+00:00,task-41672,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-05 10:49:15.759000+00:00 +Internet,LEFT_case-9844,2011-12-18 23:00:00+00:00,General,2011-11-15 09:45:22.531000+00:00,2011-12-18 23:00:00.010000+00:00,,Resource20,2011-09-30 00:00:00.020000+00:00,task-41041,Confirmation of receipt,complete,EMPTY,admin2,2011-11-15 09:45:23.438000+00:00 +Internet,LEFT_case-9845,2011-12-18 23:00:00+00:00,General,2011-11-15 09:46:01.946000+00:00,2011-12-18 23:00:00.010000+00:00,,Resource20,2011-09-30 00:00:00.020000+00:00,task-41089,Confirmation of receipt,complete,EMPTY,admin2,2011-11-15 09:46:02.943000+00:00 +Internet,LEFT_case-9860,2011-11-22 00:00:00+00:00,General,2012-01-18 10:43:56.634000+00:00,2011-11-22 00:00:00.010000+00:00,Group 5,Resource14,2011-09-27 01:06:40.020000+00:00,task-41194,Confirmation of receipt,complete,EMPTY,Resource14,2011-10-13 15:15:49.560000+00:00 +Internet,LEFT_case-9860,2011-11-22 00:00:00+00:00,General,2012-01-18 10:43:56.634000+00:00,2011-11-22 00:00:00.010000+00:00,Group 5,Resource14,2011-09-27 01:06:40.020000+00:00,task-43265,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-10-13 15:16:43.584000+00:00 +Internet,LEFT_case-9860,2011-11-22 00:00:00+00:00,General,2012-01-18 10:43:56.634000+00:00,2011-11-22 00:00:00.010000+00:00,Group 5,Resource14,2011-09-27 01:06:40.020000+00:00,task-43263,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-10-13 15:31:53.957000+00:00 +Internet,LEFT_case-9870,2011-11-04 01:06:40+00:00,General,2011-10-31 15:58:24.653000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-41215,Confirmation of receipt,complete,Group 1,Resource23,2011-10-03 12:26:45.990000+00:00 +Internet,LEFT_case-9870,2011-11-04 01:06:40+00:00,General,2011-10-31 15:58:24.653000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-41228,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-10-03 12:28:26.193000+00:00 +Internet,LEFT_case-9870,2011-11-04 01:06:40+00:00,General,2011-10-31 15:58:24.653000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-41227,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-10-03 12:32:06.531000+00:00 +Internet,LEFT_case-9883,2012-01-10 00:00:00+00:00,General,2012-01-09 16:47:20.282000+00:00,2011-11-29 00:00:00.010000+00:00,Group 5,Resource09,2011-10-04 01:06:40.020000+00:00,task-41339,Confirmation of receipt,complete,EMPTY,Resource09,2011-11-24 14:05:19.191000+00:00 +Internet,LEFT_case-9883,2012-01-10 00:00:00+00:00,General,2012-01-09 16:47:20.282000+00:00,2011-11-29 00:00:00.010000+00:00,Group 5,Resource09,2011-10-04 01:06:40.020000+00:00,task-47859,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-11-24 14:07:05.561000+00:00 +Internet,LEFT_case-9883,2012-01-10 00:00:00+00:00,General,2012-01-09 16:47:20.282000+00:00,2011-11-29 00:00:00.010000+00:00,Group 5,Resource09,2011-10-04 01:06:40.020000+00:00,task-47858,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-11-24 14:08:10.995000+00:00 +Internet,LEFT_case-9884,2011-11-29 09:06:52.777000+00:00,General,2011-10-27 12:18:43.686000+00:00,2011-11-29 09:06:52.777000+00:00,Group 8,Resource11,2011-10-04 09:06:52.777000+00:00,task-41352,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 10:05:57.552000+00:00 +Internet,LEFT_case-9884,2011-11-29 09:06:52.777000+00:00,General,2011-10-27 12:18:43.686000+00:00,2011-11-29 09:06:52.777000+00:00,Group 8,Resource11,2011-10-04 09:06:52.777000+00:00,task-42339,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 10:22:01.954000+00:00 +Internet,LEFT_case-9884,2011-11-29 09:06:52.777000+00:00,General,2011-10-27 12:18:43.686000+00:00,2011-11-29 09:06:52.777000+00:00,Group 8,Resource11,2011-10-04 09:06:52.777000+00:00,task-42337,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 10:22:41.765000+00:00 +Internet,LEFT_case-9885,2011-12-08 01:06:40+00:00,General,2011-11-25 09:48:38.851000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-04 01:06:40.020000+00:00,task-41362,Confirmation of receipt,complete,EMPTY,Resource13,2011-10-07 12:35:08.589000+00:00 +Internet,LEFT_case-9885,2011-12-08 01:06:40+00:00,General,2011-11-25 09:48:38.851000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-04 01:06:40.020000+00:00,task-42187,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-10-07 12:35:30.666000+00:00 +Internet,LEFT_case-9885,2011-12-08 01:06:40+00:00,General,2011-11-25 09:48:38.851000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-04 01:06:40.020000+00:00,task-42189,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-10-07 12:37:13.471000+00:00 +Internet,LEFT_case-9886,2011-11-29 09:19:19.745000+00:00,General,2011-10-18 14:40:05.269000+00:00,2011-11-29 09:19:19.745000+00:00,Group 2,Resource03,2011-10-04 09:19:19.745000+00:00,task-41365,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 11:56:12.906000+00:00 +Internet,LEFT_case-9886,2011-11-29 09:19:19.745000+00:00,General,2011-10-18 14:40:05.269000+00:00,2011-11-29 09:19:19.745000+00:00,Group 2,Resource03,2011-10-04 09:19:19.745000+00:00,task-42403,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 11:57:09.725000+00:00 +Internet,LEFT_case-9886,2011-11-29 09:19:19.745000+00:00,General,2011-10-18 14:40:05.269000+00:00,2011-11-29 09:19:19.745000+00:00,Group 2,Resource03,2011-10-04 09:19:19.745000+00:00,task-42402,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 12:23:56.500000+00:00 +Internet,LEFT_case-9887,2011-11-29 09:24:23.041000+00:00,General,2011-10-12 00:00:00.020000+00:00,2011-11-29 09:24:23.041000+00:00,Group 5,Resource23,2011-10-04 09:24:23.041000+00:00,task-41366,Confirmation of receipt,complete,EMPTY,Resource30,2011-10-12 09:12:32.218000+00:00 +Internet,LEFT_case-9887,2011-11-29 09:24:23.041000+00:00,General,2011-10-12 00:00:00.020000+00:00,2011-11-29 09:24:23.041000+00:00,Group 5,Resource23,2011-10-04 09:24:23.041000+00:00,task-42981,T06 Determine necessity of stop advice,complete,Group 1,Resource30,2011-10-12 09:13:03.103000+00:00 +Internet,LEFT_case-9888,2011-11-22 01:06:40+00:00,General,2011-10-24 15:31:37.489000+00:00,2011-11-22 01:06:40.010000+00:00,Group 7,Resource35,2011-09-27 01:06:40.020000+00:00,task-41367,Confirmation of receipt,complete,EMPTY,admin2,2011-10-24 15:31:38.520000+00:00 +Internet,LEFT_case-9890,2011-11-29 09:31:36.900000+00:00,General,2011-10-27 11:35:45.803000+00:00,2011-11-29 09:31:36.900000+00:00,Group 8,Resource11,2011-10-04 09:31:36.900000+00:00,task-41369,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 10:51:30.841000+00:00 +Internet,LEFT_case-9890,2011-11-29 09:31:36.900000+00:00,General,2011-10-27 11:35:45.803000+00:00,2011-11-29 09:31:36.900000+00:00,Group 8,Resource11,2011-10-04 09:31:36.900000+00:00,task-42365,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 10:52:13.396000+00:00 +Internet,LEFT_case-9890,2011-11-29 09:31:36.900000+00:00,General,2011-10-27 11:35:45.803000+00:00,2011-11-29 09:31:36.900000+00:00,Group 8,Resource11,2011-10-04 09:31:36.900000+00:00,task-42364,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 10:52:43.675000+00:00 +Internet,LEFT_case-9892,2011-11-24 01:06:40+00:00,General,2011-10-26 11:44:41.624000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource11,2011-09-29 01:06:40.020000+00:00,task-41394,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-07 16:12:59.069000+00:00 +Internet,LEFT_case-9892,2011-11-24 01:06:40+00:00,General,2011-10-26 11:44:41.624000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource11,2011-09-29 01:06:40.020000+00:00,task-42247,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-07 16:14:08.421000+00:00 +Internet,LEFT_case-9892,2011-11-24 01:06:40+00:00,General,2011-10-26 11:44:41.624000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource11,2011-09-29 01:06:40.020000+00:00,task-42246,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-07 16:55:53.075000+00:00 +Internet,LEFT_case-9893,2011-11-16 01:06:40+00:00,General,2011-10-24 15:34:42.610000+00:00,2011-11-16 01:06:40.010000+00:00,Group 7,Resource35,2011-09-21 01:06:40.020000+00:00,task-41414,Confirmation of receipt,complete,EMPTY,admin2,2011-10-24 15:34:43.435000+00:00 +Internet,LEFT_case-9894,2011-12-21 01:06:40+00:00,General,2011-10-05 16:54:17.281000+00:00,2011-12-21 01:06:40.010000+00:00,Group 2,Resource21,2011-10-04 01:06:40.020000+00:00,task-41446,Confirmation of receipt,complete,EMPTY,Resource26,2011-10-04 15:21:40.365000+00:00 +Internet,LEFT_case-9894,2011-12-21 01:06:40+00:00,General,2011-10-05 16:54:17.281000+00:00,2011-12-21 01:06:40.010000+00:00,Group 2,Resource21,2011-10-04 01:06:40.020000+00:00,task-41597,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-10-05 16:54:18.610000+00:00 +Internet,LEFT_case-9895,2011-11-21 01:06:40+00:00,General,2011-11-07 08:02:00.900000+00:00,2011-11-21 01:06:40.010000+00:00,Group 8,Resource11,2011-09-26 01:06:40.020000+00:00,task-41457,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 12:49:05.896000+00:00 +Internet,LEFT_case-9895,2011-11-21 01:06:40+00:00,General,2011-11-07 08:02:00.900000+00:00,2011-11-21 01:06:40.010000+00:00,Group 8,Resource11,2011-09-26 01:06:40.020000+00:00,task-42882,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 12:49:30.730000+00:00 +Internet,LEFT_case-9895,2011-11-21 01:06:40+00:00,General,2011-11-07 08:02:00.900000+00:00,2011-11-21 01:06:40.010000+00:00,Group 8,Resource11,2011-09-26 01:06:40.020000+00:00,task-42883,T07-4 Draft internal advice to hold for type 4,complete,Group 12,Resource03,2011-10-11 12:49:46.177000+00:00 +Internet,LEFT_case-9895,2011-11-21 01:06:40+00:00,General,2011-11-07 08:02:00.900000+00:00,2011-11-21 01:06:40.010000+00:00,Group 8,Resource11,2011-09-26 01:06:40.020000+00:00,task-42884,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 12:50:00.788000+00:00 +Internet,LEFT_case-9895,2011-11-21 01:06:40+00:00,General,2011-11-07 08:02:00.900000+00:00,2011-11-21 01:06:40.010000+00:00,Group 8,Resource11,2011-09-26 01:06:40.020000+00:00,task-42887,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 12:50:51.298000+00:00 +Internet,LEFT_case-9896,2011-11-21 01:06:40+00:00,General,2011-10-24 15:28:39.607000+00:00,2011-11-21 01:06:40.010000+00:00,Group 7,Resource35,2011-09-26 01:06:40.020000+00:00,task-41497,Confirmation of receipt,complete,EMPTY,admin2,2011-10-24 15:28:40.618000+00:00 +Internet,LEFT_case-9897,2012-01-02 00:00:00+00:00,General,2012-01-17 14:23:20.043000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-09-26 01:06:40.020000+00:00,task-41499,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-05 12:37:17.065000+00:00 +Internet,LEFT_case-9897,2012-01-02 00:00:00+00:00,General,2012-01-17 14:23:20.043000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-09-26 01:06:40.020000+00:00,task-41728,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-05 12:38:14.918000+00:00 +Internet,LEFT_case-9897,2012-01-02 00:00:00+00:00,General,2012-01-17 14:23:20.043000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-09-26 01:06:40.020000+00:00,task-41727,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-05 12:40:34.844000+00:00 +Internet,LEFT_case-9904,2011-12-21 01:06:40+00:00,General,2011-11-07 10:00:24.618000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-41773,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 09:10:57.835000+00:00 +Internet,LEFT_case-9904,2011-12-21 01:06:40+00:00,General,2011-11-07 10:00:24.618000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-42290,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 09:11:45.822000+00:00 +Internet,LEFT_case-9904,2011-12-21 01:06:40+00:00,General,2011-11-07 10:00:24.618000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-42289,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 09:23:10.365000+00:00 +Internet,LEFT_case-9916,2011-11-29 01:06:40+00:00,General,2011-11-30 08:10:59.139000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-41746,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 11:37:39.876000+00:00 +Internet,LEFT_case-9916,2011-11-29 01:06:40+00:00,General,2011-11-30 08:10:59.139000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-42866,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 11:38:32.571000+00:00 +Internet,LEFT_case-9916,2011-11-29 01:06:40+00:00,General,2011-11-30 08:10:59.139000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-42865,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 11:39:12.189000+00:00 +Internet,LEFT_case-9916,2011-11-29 01:06:40+00:00,General,2011-11-30 08:10:59.139000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-42869,T07-4 Draft internal advice to hold for type 4,complete,EMPTY,Resource03,2011-10-18 09:59:35.030000+00:00 +Internet,LEFT_case-9916,2011-11-29 01:06:40+00:00,General,2011-11-30 08:10:59.139000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-43595,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-18 09:59:53.419000+00:00 +Internet,LEFT_case-9919,2011-12-22 01:06:40+00:00,General,2011-11-30 07:40:07.644000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-41803,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-07 09:06:53.480000+00:00 +Internet,LEFT_case-9919,2011-12-22 01:06:40+00:00,General,2011-11-30 07:40:07.644000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42099,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-07 09:07:48.870000+00:00 +Internet,LEFT_case-9919,2011-12-22 01:06:40+00:00,General,2011-11-30 07:40:07.644000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42098,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-07 09:08:24.290000+00:00 +Internet,LEFT_case-9920,2011-12-22 01:06:40+00:00,General,2011-11-21 14:23:38.004000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-41816,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-07 08:39:18.634000+00:00 +Internet,LEFT_case-9920,2011-12-22 01:06:40+00:00,General,2011-11-21 14:23:38.004000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42062,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-07 08:40:22.614000+00:00 +Internet,LEFT_case-9920,2011-12-22 01:06:40+00:00,General,2011-11-21 14:23:38.004000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42061,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-07 08:40:59.538000+00:00 +Internet,LEFT_case-9921,2011-11-28 01:06:40+00:00,General,2011-11-07 12:32:52.389000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource04,2011-10-03 01:06:40.020000+00:00,task-41704,Confirmation of receipt,complete,EMPTY,Resource09,2011-10-31 15:22:24.741000+00:00 +Internet,LEFT_case-9921,2011-11-28 01:06:40+00:00,General,2011-11-07 12:32:52.389000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource04,2011-10-03 01:06:40.020000+00:00,task-45245,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-10-31 15:25:26.050000+00:00 +Internet,LEFT_case-9921,2011-11-28 01:06:40+00:00,General,2011-11-07 12:32:52.389000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource04,2011-10-03 01:06:40.020000+00:00,task-45244,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-31 15:25:52.415000+00:00 +Internet,LEFT_case-9921,2011-11-28 01:06:40+00:00,General,2011-11-07 12:32:52.389000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource04,2011-10-03 01:06:40.020000+00:00,task-45251,T11 Create document X request unlicensed,complete,Group 1,Resource09,2011-10-31 15:51:33.320000+00:00 +Internet,LEFT_case-9921,2011-11-28 01:06:40+00:00,General,2011-11-07 12:32:52.389000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource04,2011-10-03 01:06:40.020000+00:00,task-45269,T14 Determine document X request unlicensed,complete,Group 3,Resource04,2011-10-31 16:16:26.975000+00:00 +Internet,LEFT_case-9923,2011-11-28 01:06:40+00:00,General,2011-10-31 16:55:13.160000+00:00,2011-11-28 01:06:40.010000+00:00,Group 2,Resource20,2011-10-03 01:06:40.020000+00:00,task-41716,Confirmation of receipt,complete,EMPTY,Resource20,2011-10-26 12:04:17.338000+00:00 +Internet,LEFT_case-9923,2011-11-28 01:06:40+00:00,General,2011-10-31 16:55:13.160000+00:00,2011-11-28 01:06:40.010000+00:00,Group 2,Resource20,2011-10-03 01:06:40.020000+00:00,task-44844,T04 Determine confirmation of receipt,complete,EMPTY,Resource20,2011-10-27 10:47:51.088000+00:00 +Internet,LEFT_case-9923,2011-11-28 01:06:40+00:00,General,2011-10-31 16:55:13.160000+00:00,2011-11-28 01:06:40.010000+00:00,Group 2,Resource20,2011-10-03 01:06:40.020000+00:00,task-44686,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-10-27 10:49:30.585000+00:00 +Internet,LEFT_case-9924,2011-12-22 01:06:40+00:00,General,2011-11-21 09:37:01.435000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-41819,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-07 10:00:49.113000+00:00 +Internet,LEFT_case-9924,2011-12-22 01:06:40+00:00,General,2011-11-21 09:37:01.435000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42124,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-07 10:01:35.421000+00:00 +Internet,LEFT_case-9924,2011-12-22 01:06:40+00:00,General,2011-11-21 09:37:01.435000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42123,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-07 10:02:26.888000+00:00 +Internet,LEFT_case-9925,2011-12-22 01:06:40+00:00,General,2011-11-21 09:44:12.722000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-41823,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 14:39:28.524000+00:00 +Internet,LEFT_case-9925,2011-12-22 01:06:40+00:00,General,2011-11-21 09:44:12.722000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42497,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 14:40:05.221000+00:00 +Internet,LEFT_case-9925,2011-12-22 01:06:40+00:00,General,2011-11-21 09:44:12.722000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42495,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 14:40:41.099000+00:00 +Internet,LEFT_case-9926,2011-12-22 01:06:40+00:00,General,2011-10-26 08:05:04.376000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource02,2011-10-05 01:06:40.020000+00:00,task-41831,Confirmation of receipt,complete,EMPTY,Resource20,2011-10-18 09:41:14.043000+00:00 +Internet,LEFT_case-9926,2011-12-22 01:06:40+00:00,General,2011-10-26 08:05:04.376000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource02,2011-10-05 01:06:40.020000+00:00,task-43585,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-10-18 09:45:24.098000+00:00 +Internet,LEFT_case-9926,2011-12-22 01:06:40+00:00,General,2011-10-26 08:05:04.376000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource02,2011-10-05 01:06:40.020000+00:00,task-43586,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-10-18 10:37:50.168000+00:00 +Internet,LEFT_case-9927,2011-12-22 01:06:40+00:00,General,2011-11-15 10:37:58.468000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource05,2011-10-05 01:06:40.020000+00:00,task-41833,Confirmation of receipt,complete,EMPTY,Resource05,2011-11-08 11:41:03.047000+00:00 +Internet,LEFT_case-9927,2011-12-22 01:06:40+00:00,General,2011-11-15 10:37:58.468000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource05,2011-10-05 01:06:40.020000+00:00,task-45774,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-11-08 11:41:56.772000+00:00 +Internet,LEFT_case-9927,2011-12-22 01:06:40+00:00,General,2011-11-15 10:37:58.468000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource05,2011-10-05 01:06:40.020000+00:00,task-45773,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-11-08 11:42:43.344000+00:00 +Internet,LEFT_case-9927,2011-12-22 01:06:40+00:00,General,2011-11-15 10:37:58.468000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource05,2011-10-05 01:06:40.020000+00:00,task-45777,T16 Report reasons to hold request,complete,Group 1,Resource05,2011-11-08 11:43:56.699000+00:00 +Internet,LEFT_case-9927,2011-12-22 01:06:40+00:00,General,2011-11-15 10:37:58.468000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource05,2011-10-05 01:06:40.020000+00:00,task-45779,T19 Determine report Y to stop indication,complete,Group 3,Resource05,2011-11-08 11:45:36.126000+00:00 +Internet,LEFT_case-9928,2011-11-28 01:06:40+00:00,General,2011-12-07 12:55:18.299000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource22,2011-10-03 01:06:40.020000+00:00,task-41741,Confirmation of receipt,complete,EMPTY,Resource22,2011-10-24 09:59:01.977000+00:00 +Internet,LEFT_case-9928,2011-11-28 01:06:40+00:00,General,2011-12-07 12:55:18.299000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource22,2011-10-03 01:06:40.020000+00:00,task-44218,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-10-24 10:00:42.057000+00:00 +Internet,LEFT_case-9928,2011-11-28 01:06:40+00:00,General,2011-12-07 12:55:18.299000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource22,2011-10-03 01:06:40.020000+00:00,task-44217,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-10-24 10:03:05.042000+00:00 +Internet,LEFT_case-9929,2011-12-22 01:06:40+00:00,General,2011-11-17 08:26:24.943000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-41834,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-07 10:54:10.132000+00:00 +Internet,LEFT_case-9929,2011-12-22 01:06:40+00:00,General,2011-11-17 08:26:24.943000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42163,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-07 10:55:00.562000+00:00 +Internet,LEFT_case-9929,2011-12-22 01:06:40+00:00,General,2011-11-17 08:26:24.943000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42162,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-07 11:09:20.555000+00:00 +Internet,LEFT_case-9931,2011-12-22 01:06:40+00:00,General,2011-11-21 09:55:44.983000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-41835,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-07 10:22:11.258000+00:00 +Internet,LEFT_case-9931,2011-12-22 01:06:40+00:00,General,2011-11-21 09:55:44.983000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42143,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-07 10:23:09.462000+00:00 +Internet,LEFT_case-9931,2011-12-22 01:06:40+00:00,General,2011-11-21 09:55:44.983000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42142,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-07 10:23:50.389000+00:00 +Internet,LEFT_case-9932,2011-12-22 01:06:40+00:00,General,2011-11-17 08:54:03.790000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-41836,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 16:27:46.227000+00:00 +Internet,LEFT_case-9932,2011-12-22 01:06:40+00:00,General,2011-11-17 08:54:03.790000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42608,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 16:32:12.805000+00:00 +Internet,LEFT_case-9932,2011-12-22 01:06:40+00:00,General,2011-11-17 08:54:03.790000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42609,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 16:32:29.516000+00:00 +Internet,LEFT_case-9934,2011-12-22 01:06:40+00:00,General,2011-11-21 10:13:59.758000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-41837,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 15:10:44.354000+00:00 +Internet,LEFT_case-9934,2011-12-22 01:06:40+00:00,General,2011-11-21 10:13:59.758000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42541,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 15:11:18.435000+00:00 +Internet,LEFT_case-9934,2011-12-22 01:06:40+00:00,General,2011-11-21 10:13:59.758000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42542,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 15:12:17.748000+00:00 +Internet,LEFT_case-9936,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-10-05 01:06:40.020000+00:00,task-42105,Confirmation of receipt,complete,EMPTY,Resource04,2011-10-20 14:28:41.313000+00:00 +Internet,LEFT_case-9936,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-10-05 01:06:40.020000+00:00,task-44027,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-10-20 14:31:27.177000+00:00 +Internet,LEFT_case-9936,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-10-05 01:06:40.020000+00:00,task-44026,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-10-20 14:32:06.126000+00:00 +Internet,LEFT_case-9941,2011-12-22 00:00:00+00:00,General,2012-01-05 15:39:06.431000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource13,2011-10-06 01:06:40.020000+00:00,task-42054,Confirmation of receipt,complete,EMPTY,Resource13,2011-10-19 19:41:32.262000+00:00 +Internet,LEFT_case-9941,2011-12-22 00:00:00+00:00,General,2012-01-05 15:39:06.431000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource13,2011-10-06 01:06:40.020000+00:00,task-43921,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-10-19 19:42:29.666000+00:00 +Internet,LEFT_case-9941,2011-12-22 00:00:00+00:00,General,2012-01-05 15:39:06.431000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource13,2011-10-06 01:06:40.020000+00:00,task-43920,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-10-19 19:43:13.100000+00:00 +Internet,LEFT_case-9942,2011-12-23 01:06:40+00:00,General,2011-11-21 10:39:21.672000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-41923,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-12 08:55:03.746000+00:00 +Internet,LEFT_case-9942,2011-12-23 01:06:40+00:00,General,2011-11-21 10:39:21.672000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42962,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-12 08:56:01.197000+00:00 +Internet,LEFT_case-9942,2011-12-23 01:06:40+00:00,General,2011-11-21 10:39:21.672000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42961,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-12 08:56:43.907000+00:00 +Internet,LEFT_case-9943,2011-11-29 01:06:40+00:00,General,2011-11-07 09:28:24.079000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-41926,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-12 12:36:36.794000+00:00 +Internet,LEFT_case-9943,2011-11-29 01:06:40+00:00,General,2011-11-07 09:28:24.079000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-43098,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-12 12:46:47.190000+00:00 +Internet,LEFT_case-9943,2011-11-29 01:06:40+00:00,General,2011-11-07 09:28:24.079000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-43096,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-12 12:47:22.696000+00:00 +Internet,LEFT_case-9944,2011-12-23 01:06:40+00:00,General,2011-11-17 08:47:54.571000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-41952,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-12 11:49:54.420000+00:00 +Internet,LEFT_case-9944,2011-12-23 01:06:40+00:00,General,2011-11-17 08:47:54.571000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43061,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-12 11:50:38.925000+00:00 +Internet,LEFT_case-9944,2011-12-23 01:06:40+00:00,General,2011-11-17 08:47:54.571000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43056,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-12 11:51:16.166000+00:00 +Internet,LEFT_case-9946,2011-11-23 01:06:40+00:00,General,2011-11-14 08:31:14.790000+00:00,2011-11-23 01:06:40.010000+00:00,Group 8,Resource11,2011-09-28 01:06:40.020000+00:00,task-41932,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-12 15:13:15.006000+00:00 +Internet,LEFT_case-9946,2011-11-23 01:06:40+00:00,General,2011-11-14 08:31:14.790000+00:00,2011-11-23 01:06:40.010000+00:00,Group 8,Resource11,2011-09-28 01:06:40.020000+00:00,task-43165,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-12 15:17:44.756000+00:00 +Internet,LEFT_case-9946,2011-11-23 01:06:40+00:00,General,2011-11-14 08:31:14.790000+00:00,2011-11-23 01:06:40.010000+00:00,Group 8,Resource11,2011-09-28 01:06:40.020000+00:00,task-43162,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-12 15:18:18.572000+00:00 +Internet,LEFT_case-9947,2012-01-15 00:00:00+00:00,General,2012-01-16 15:45:57.982000+00:00,2012-01-15 00:00:00.010000+00:00,Group 5,Resource02,2011-10-03 01:06:40.020000+00:00,task-41933,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-18 13:22:17.174000+00:00 +Internet,LEFT_case-9947,2012-01-15 00:00:00+00:00,General,2012-01-16 15:45:57.982000+00:00,2012-01-15 00:00:00.010000+00:00,Group 5,Resource02,2011-10-03 01:06:40.020000+00:00,task-43660,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-18 13:23:44.438000+00:00 +Internet,LEFT_case-9947,2012-01-15 00:00:00+00:00,General,2012-01-16 15:45:57.982000+00:00,2012-01-15 00:00:00.010000+00:00,Group 5,Resource02,2011-10-03 01:06:40.020000+00:00,task-43659,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-18 14:06:13.467000+00:00 +Internet,LEFT_case-9948,2011-12-23 01:06:40+00:00,General,2011-10-14 13:03:38.170000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-41951,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 15:40:31.164000+00:00 +Internet,LEFT_case-9948,2011-12-23 01:06:40+00:00,General,2011-10-14 13:03:38.170000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42565,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 15:41:22.694000+00:00 +Internet,LEFT_case-9948,2011-12-23 01:06:40+00:00,General,2011-10-14 13:03:38.170000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42566,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 15:41:38.735000+00:00 +Internet,LEFT_case-9955,2011-12-23 00:00:00+00:00,General,2011-12-23 15:35:09.572000+00:00,2011-12-23 00:00:00.010000+00:00,Group 5,Resource02,2011-10-06 01:06:40.020000+00:00,task-42311,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-31 14:52:30.132000+00:00 +Internet,LEFT_case-9955,2011-12-23 00:00:00+00:00,General,2011-12-23 15:35:09.572000+00:00,2011-12-23 00:00:00.010000+00:00,Group 5,Resource02,2011-10-06 01:06:40.020000+00:00,task-45229,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-31 14:53:18.768000+00:00 +Internet,LEFT_case-9955,2011-12-23 00:00:00+00:00,General,2011-12-23 15:35:09.572000+00:00,2011-12-23 00:00:00.010000+00:00,Group 5,Resource02,2011-10-06 01:06:40.020000+00:00,task-45228,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-11-23 08:38:57.507000+00:00 +Internet,LEFT_case-9957,2011-12-01 00:00:00+00:00,General,2012-01-05 14:13:21.439000+00:00,2011-12-01 00:00:00.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42338,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 13:16:57.661000+00:00 +Internet,LEFT_case-9957,2011-12-01 00:00:00+00:00,General,2012-01-05 14:13:21.439000+00:00,2011-12-01 00:00:00.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42915,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 13:17:35.672000+00:00 +Internet,LEFT_case-9957,2011-12-01 00:00:00+00:00,General,2012-01-05 14:13:21.439000+00:00,2011-12-01 00:00:00.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42914,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 13:19:09.983000+00:00 +Internet,LEFT_case-9957,2011-12-01 00:00:00+00:00,General,2012-01-05 14:13:21.439000+00:00,2011-12-01 00:00:00.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42919,T16 Report reasons to hold request,complete,Group 1,Resource03,2011-10-11 13:21:31.944000+00:00 +Internet,LEFT_case-9957,2011-12-01 00:00:00+00:00,General,2012-01-05 14:13:21.439000+00:00,2011-12-01 00:00:00.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42921,T19 Determine report Y to stop indication,complete,Group 3,Resource03,2011-10-11 13:22:10.284000+00:00 +Internet,LEFT_case-9961,2011-12-26 01:06:40+00:00,General,2011-11-23 08:56:59.365000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42221,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-11 09:12:50.433000+00:00 +Internet,LEFT_case-9961,2011-12-26 01:06:40+00:00,General,2011-11-23 08:56:59.365000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42727,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-11 09:13:36.932000+00:00 +Internet,LEFT_case-9961,2011-12-26 01:06:40+00:00,General,2011-11-23 08:56:59.365000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42726,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-11 09:14:16.008000+00:00 +Internet,LEFT_case-9963,2011-12-02 01:06:40+00:00,General,2011-11-14 08:40:38.838000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42357,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-11 09:54:15.948000+00:00 +Internet,LEFT_case-9963,2011-12-02 01:06:40+00:00,General,2011-11-14 08:40:38.838000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42776,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-11 09:58:52.580000+00:00 +Internet,LEFT_case-9963,2011-12-02 01:06:40+00:00,General,2011-11-14 08:40:38.838000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42775,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-11 09:59:35.492000+00:00 +Internet,LEFT_case-9966,2011-12-02 01:06:40+00:00,General,2011-12-02 14:48:58.581000+00:00,2011-12-02 01:06:40.010000+00:00,Group 5,Resource09,2011-10-07 01:06:40.020000+00:00,task-42362,Confirmation of receipt,complete,EMPTY,Resource09,2011-10-25 11:17:19.567000+00:00 +Internet,LEFT_case-9966,2011-12-02 01:06:40+00:00,General,2011-12-02 14:48:58.581000+00:00,2011-12-02 01:06:40.010000+00:00,Group 5,Resource09,2011-10-07 01:06:40.020000+00:00,task-44420,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-25 12:14:58.533000+00:00 +Internet,LEFT_case-9966,2011-12-02 01:06:40+00:00,General,2011-12-02 14:48:58.581000+00:00,2011-12-02 01:06:40.010000+00:00,Group 5,Resource09,2011-10-07 01:06:40.020000+00:00,task-44427,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-10-25 12:49:59.137000+00:00 +Internet,LEFT_case-9966,2011-12-02 01:06:40+00:00,General,2011-12-02 14:48:58.581000+00:00,2011-12-02 01:06:40.010000+00:00,Group 5,Resource09,2011-10-07 01:06:40.020000+00:00,task-44438,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-11-01 08:55:52.385000+00:00 +Internet,LEFT_case-9966,2011-12-02 01:06:40+00:00,General,2011-12-02 14:48:58.581000+00:00,2011-12-02 01:06:40.010000+00:00,Group 5,Resource09,2011-10-07 01:06:40.020000+00:00,task-45341,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-11-01 08:59:28.350000+00:00 +Internet,LEFT_case-9967,2011-12-02 01:06:40+00:00,General,2011-11-07 10:54:05.508000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42292,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-11 08:34:50.571000+00:00 +Internet,LEFT_case-9967,2011-12-02 01:06:40+00:00,General,2011-11-07 10:54:05.508000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42682,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-11 08:35:13.280000+00:00 +Internet,LEFT_case-9967,2011-12-02 01:06:40+00:00,General,2011-11-07 10:54:05.508000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42684,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-11 08:35:58.321000+00:00 +Internet,LEFT_case-9969,2011-12-02 01:06:40+00:00,General,2011-11-14 08:50:36.749000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42300,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 16:01:16.213000+00:00 +Internet,LEFT_case-9969,2011-12-02 01:06:40+00:00,General,2011-11-14 08:50:36.749000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42589,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 16:01:49.941000+00:00 +Internet,LEFT_case-9969,2011-12-02 01:06:40+00:00,General,2011-11-14 08:50:36.749000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42588,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 16:02:59.871000+00:00 +Internet,LEFT_case-9970,2011-12-26 01:06:40+00:00,General,2011-11-23 09:03:22.743000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42384,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 16:48:24.273000+00:00 +Internet,LEFT_case-9970,2011-12-26 01:06:40+00:00,General,2011-11-23 09:03:22.743000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42632,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 16:49:19.540000+00:00 +Internet,LEFT_case-9970,2011-12-26 01:06:40+00:00,General,2011-11-23 09:03:22.743000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42631,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 16:50:07.416000+00:00 +Internet,LEFT_case-9972,2011-12-02 01:06:40+00:00,General,2011-11-07 08:11:54.768000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42392,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 09:33:40.916000+00:00 +Internet,LEFT_case-9972,2011-12-02 01:06:40+00:00,General,2011-11-07 08:11:54.768000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42750,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 09:34:26.398000+00:00 +Internet,LEFT_case-9972,2011-12-02 01:06:40+00:00,General,2011-11-07 08:11:54.768000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42749,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 09:36:17.726000+00:00 +Internet,LEFT_case-9981,2011-12-03 01:06:40+00:00,General,2011-10-11 10:36:32.140000+00:00,2011-12-03 01:06:40.010000+00:00,Group 2,Resource03,2011-10-08 01:06:40.020000+00:00,task-42399,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 10:22:13.618000+00:00 +Internet,LEFT_case-9981,2011-12-03 01:06:40+00:00,General,2011-10-11 10:36:32.140000+00:00,2011-12-03 01:06:40.010000+00:00,Group 2,Resource03,2011-10-08 01:06:40.020000+00:00,task-42802,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 10:22:46.603000+00:00 +Internet,LEFT_case-9981,2011-12-03 01:06:40+00:00,General,2011-10-11 10:36:32.140000+00:00,2011-12-03 01:06:40.010000+00:00,Group 2,Resource03,2011-10-08 01:06:40.020000+00:00,task-42801,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 10:23:27.058000+00:00 +Internet,LEFT_case-9986,2011-12-04 01:06:40+00:00,General,2011-10-27 13:21:44.814000+00:00,2011-12-04 01:06:40.010000+00:00,Group 2,Resource20,2011-10-09 01:06:40.020000+00:00,task-42426,Confirmation of receipt,complete,EMPTY,Resource20,2011-10-26 10:05:29.211000+00:00 +Internet,LEFT_case-9986,2011-12-04 01:06:40+00:00,General,2011-10-27 13:21:44.814000+00:00,2011-12-04 01:06:40.010000+00:00,Group 2,Resource20,2011-10-09 01:06:40.020000+00:00,task-44629,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-10-26 10:07:03.750000+00:00 +Internet,LEFT_case-9986,2011-12-04 01:06:40+00:00,General,2011-10-27 13:21:44.814000+00:00,2011-12-04 01:06:40.010000+00:00,Group 2,Resource20,2011-10-09 01:06:40.020000+00:00,task-44628,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-10-26 10:07:49.759000+00:00 +Internet,LEFT_case-9997,2011-12-01 01:06:40+00:00,General,2011-10-20 14:19:44.448000+00:00,2011-12-01 01:06:40.010000+00:00,Group 5,Resource06,2011-10-06 01:06:40.020000+00:00,task-42287,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-18 09:03:12.303000+00:00 +Internet,LEFT_case-9997,2011-12-01 01:06:40+00:00,General,2011-10-20 14:19:44.448000+00:00,2011-12-01 01:06:40.010000+00:00,Group 5,Resource06,2011-10-06 01:06:40.020000+00:00,task-43562,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-18 09:05:12.359000+00:00 +Internet,LEFT_case-9997,2011-12-01 01:06:40+00:00,General,2011-10-20 14:19:44.448000+00:00,2011-12-01 01:06:40.010000+00:00,Group 5,Resource06,2011-10-06 01:06:40.020000+00:00,task-43561,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-18 09:06:01.468000+00:00 diff --git a/pm4py/tests/input_data/interleavings/receipt_odd.csv b/pm4py/tests/input_data/interleavings/receipt_odd.csv new file mode 100644 index 0000000000000000000000000000000000000000..ca63809bde67b79ad38fe0d7c54136e021351849 --- /dev/null +++ b/pm4py/tests/input_data/interleavings/receipt_odd.csv @@ -0,0 +1,4135 @@ +case:channel,case:concept:name,case:deadline,case:department,case:enddate,case:enddate_planned,case:group,case:responsible,case:startdate,concept:instance,concept:name,lifecycle:transition,org:group,org:resource,time:timestamp +Internet,RIGHT_case-10011,2011-12-06 13:41:31.788000+00:00,General,,2011-12-06 13:41:31.788000+00:00,Group 2,Resource21,2011-10-11 13:42:22.688000+00:00,task-42935,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-10-12 08:26:25.398000+00:00 +Internet,RIGHT_case-10011,2011-12-06 13:41:31.788000+00:00,General,,2011-12-06 13:41:31.788000+00:00,Group 2,Resource21,2011-10-11 13:42:22.688000+00:00,task-47958,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-11-24 15:37:16.553000+00:00 +Internet,RIGHT_case-10017,2011-12-06 01:06:40+00:00,General,2011-10-18 13:56:55.943000+00:00,2011-12-06 01:06:40.010000+00:00,Group 5,Resource04,2011-10-11 01:06:40.020000+00:00,task-43671,T02 Check confirmation of receipt,complete,Group 4,Resource30,2011-10-18 13:47:26.235000+00:00 +Internet,RIGHT_case-10017,2011-12-06 01:06:40+00:00,General,2011-10-18 13:56:55.943000+00:00,2011-12-06 01:06:40.010000+00:00,Group 5,Resource04,2011-10-11 01:06:40.020000+00:00,task-43675,T02 Check confirmation of receipt,complete,Group 4,Resource30,2011-10-18 13:47:57.979000+00:00 +Internet,RIGHT_case-10017,2011-12-06 01:06:40+00:00,General,2011-10-18 13:56:55.943000+00:00,2011-12-06 01:06:40.010000+00:00,Group 5,Resource04,2011-10-11 01:06:40.020000+00:00,task-43673,T10 Determine necessity to stop indication,complete,Group 1,Resource30,2011-10-18 13:48:15.357000+00:00 +Internet,RIGHT_case-10017,2011-12-06 01:06:40+00:00,General,2011-10-18 13:56:55.943000+00:00,2011-12-06 01:06:40.010000+00:00,Group 5,Resource04,2011-10-11 01:06:40.020000+00:00,task-43679,T02 Check confirmation of receipt,complete,Group 4,Resource30,2011-10-18 13:51:01.525000+00:00 +Internet,RIGHT_case-10024,2011-12-01 01:06:40+00:00,General,2011-11-17 07:53:06.189000+00:00,2011-12-01 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43727,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-18 15:53:38.108000+00:00 +Internet,RIGHT_case-10024,2011-12-01 01:06:40+00:00,General,2011-11-17 07:53:06.189000+00:00,2011-12-01 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43730,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-18 15:54:06.717000+00:00 +Internet,RIGHT_case-10024,2011-12-01 01:06:40+00:00,General,2011-11-17 07:53:06.189000+00:00,2011-12-01 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43731,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-18 15:57:18.847000+00:00 +Internet,RIGHT_case-10025,2011-12-05 01:06:40+00:00,General,2011-11-14 09:15:07.941000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44375,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-25 09:27:27.316000+00:00 +Internet,RIGHT_case-10025,2011-12-05 01:06:40+00:00,General,2011-11-14 09:15:07.941000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44379,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-25 09:28:00.504000+00:00 +Internet,RIGHT_case-10025,2011-12-05 01:06:40+00:00,General,2011-11-14 09:15:07.941000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44380,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-25 09:28:33.002000+00:00 +Internet,RIGHT_case-10028,2011-12-05 01:06:40+00:00,General,2011-12-05 15:34:49.174000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44467,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-25 14:13:31.837000+00:00 +Internet,RIGHT_case-10028,2011-12-05 01:06:40+00:00,General,2011-12-05 15:34:49.174000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44470,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-25 14:14:24.249000+00:00 +Internet,RIGHT_case-10028,2011-12-05 01:06:40+00:00,General,2011-12-05 15:34:49.174000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44471,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-25 14:23:06.272000+00:00 +Internet,RIGHT_case-10028,2011-12-05 01:06:40+00:00,General,2011-12-05 15:34:49.174000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44473,T17 Check report Y to stop indication,complete,Group 4,Resource03,2011-10-25 14:24:22.922000+00:00 +Internet,RIGHT_case-10028,2011-12-05 01:06:40+00:00,General,2011-12-05 15:34:49.174000+00:00,2011-12-05 01:06:40.010000+00:00,Group 8,Resource11,2011-10-10 01:06:40.020000+00:00,task-44475,T20 Print report Y to stop indication,complete,Group 2,Resource03,2011-10-25 14:25:10.989000+00:00 +Internet,RIGHT_case-10059,2011-12-12 14:23:48.241000+00:00,General,2011-10-24 11:10:14.651000+00:00,2011-12-12 14:23:48.241000+00:00,Group 5,Resource06,2011-10-17 14:23:48.241000+00:00,task-43499,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-17 15:31:51.615000+00:00 +Internet,RIGHT_case-10059,2011-12-12 14:23:48.241000+00:00,General,2011-10-24 11:10:14.651000+00:00,2011-12-12 14:23:48.241000+00:00,Group 5,Resource06,2011-10-17 14:23:48.241000+00:00,task-43503,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-17 15:33:42.796000+00:00 +Internet,RIGHT_case-10059,2011-12-12 14:23:48.241000+00:00,General,2011-10-24 11:10:14.651000+00:00,2011-12-12 14:23:48.241000+00:00,Group 5,Resource06,2011-10-17 14:23:48.241000+00:00,task-43504,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-17 15:41:19.472000+00:00 +Internet,RIGHT_case-10061,2011-12-06 01:06:40+00:00,General,2011-11-23 08:50:44.645000+00:00,2012-12-06 01:06:40.010000+00:00,Group 8,Resource11,2011-10-11 01:06:40.020000+00:00,task-44275,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-24 15:01:44.536000+00:00 +Internet,RIGHT_case-10061,2011-12-06 01:06:40+00:00,General,2011-11-23 08:50:44.645000+00:00,2012-12-06 01:06:40.010000+00:00,Group 8,Resource11,2011-10-11 01:06:40.020000+00:00,task-44273,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-24 15:01:59.826000+00:00 +Internet,RIGHT_case-10061,2011-12-06 01:06:40+00:00,General,2011-11-23 08:50:44.645000+00:00,2012-12-06 01:06:40.010000+00:00,Group 8,Resource11,2011-10-11 01:06:40.020000+00:00,task-44279,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-24 15:02:32.399000+00:00 +Internet,RIGHT_case-10065,2012-01-11 01:06:40+00:00,General,2011-12-16 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource06,2011-10-12 01:06:40.020000+00:00,task-44947,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-28 10:31:49.811000+00:00 +Internet,RIGHT_case-10065,2012-01-11 01:06:40+00:00,General,2011-12-16 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource06,2011-10-12 01:06:40.020000+00:00,task-44950,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-28 10:32:49.753000+00:00 +Internet,RIGHT_case-10065,2012-01-11 01:06:40+00:00,General,2011-12-16 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource06,2011-10-12 01:06:40.020000+00:00,task-44955,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-28 11:01:50.118000+00:00 +Internet,RIGHT_case-10066,2012-12-08 01:06:40+00:00,General,2011-11-30 08:48:31.281000+00:00,2012-12-08 01:06:40.010000+00:00,Group 5,Resource22,2011-10-13 01:06:40.020000+00:00,task-47561,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-11-22 13:48:39.989000+00:00 +Internet,RIGHT_case-10066,2012-12-08 01:06:40+00:00,General,2011-11-30 08:48:31.281000+00:00,2012-12-08 01:06:40.010000+00:00,Group 5,Resource22,2011-10-13 01:06:40.020000+00:00,task-47570,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-11-22 13:52:51.629000+00:00 +Internet,RIGHT_case-10066,2012-12-08 01:06:40+00:00,General,2011-11-30 08:48:31.281000+00:00,2012-12-08 01:06:40.010000+00:00,Group 5,Resource22,2011-10-13 01:06:40.020000+00:00,task-47579,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-11-22 13:59:50.916000+00:00 +Internet,RIGHT_case-10067,2011-12-08 01:06:40+00:00,General,2011-11-16 10:31:30.572000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-13 01:06:40.020000+00:00,task-46129,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 20:39:34.137000+00:00 +Internet,RIGHT_case-10067,2011-12-08 01:06:40+00:00,General,2011-11-16 10:31:30.572000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-13 01:06:40.020000+00:00,task-46132,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 20:40:26.677000+00:00 +Internet,RIGHT_case-10067,2011-12-08 01:06:40+00:00,General,2011-11-16 10:31:30.572000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-13 01:06:40.020000+00:00,task-46133,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-11-09 20:41:13.745000+00:00 +Internet,RIGHT_case-10068,2011-12-09 01:06:40+00:00,General,2011-10-24 11:39:09.003000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource06,2011-10-14 01:06:40.020000+00:00,task-43991,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-10-20 12:40:07.912000+00:00 +Internet,RIGHT_case-10068,2011-12-09 01:06:40+00:00,General,2011-10-24 11:39:09.003000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource06,2011-10-14 01:06:40.020000+00:00,task-43994,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-10-20 12:41:02.031000+00:00 +Internet,RIGHT_case-10068,2011-12-09 01:06:40+00:00,General,2011-10-24 11:39:09.003000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource06,2011-10-14 01:06:40.020000+00:00,task-43995,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-10-20 12:42:01.990000+00:00 +Internet,RIGHT_case-10069,2012-01-05 00:00:00+00:00,General,2011-12-30 15:41:42.684000+00:00,2012-01-05 00:00:00.010000+00:00,Group 5,Resource08,2011-10-14 01:06:40.020000+00:00,task-45608,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-11-07 15:11:51.689000+00:00 +Internet,RIGHT_case-10069,2012-01-05 00:00:00+00:00,General,2011-12-30 15:41:42.684000+00:00,2012-01-05 00:00:00.010000+00:00,Group 5,Resource08,2011-10-14 01:06:40.020000+00:00,task-45611,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-11-07 15:13:17.976000+00:00 +Internet,RIGHT_case-10069,2012-01-05 00:00:00+00:00,General,2011-12-30 15:41:42.684000+00:00,2012-01-05 00:00:00.010000+00:00,Group 5,Resource08,2011-10-14 01:06:40.020000+00:00,task-45612,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-11-07 15:16:47.427000+00:00 +Internet,RIGHT_case-10070,2011-12-09 01:06:40+00:00,General,2011-11-18 09:47:22.105000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource13,2011-10-14 01:06:40.020000+00:00,task-46106,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 19:44:27.071000+00:00 +Internet,RIGHT_case-10070,2011-12-09 01:06:40+00:00,General,2011-11-18 09:47:22.105000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource13,2011-10-14 01:06:40.020000+00:00,task-46108,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-11-09 19:45:21.385000+00:00 +Internet,RIGHT_case-10070,2011-12-09 01:06:40+00:00,General,2011-11-18 09:47:22.105000+00:00,2011-12-09 01:06:40.010000+00:00,Group 5,Resource13,2011-10-14 01:06:40.020000+00:00,task-46110,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-11-09 19:48:48.443000+00:00 +Internet,RIGHT_case-10071,2011-12-12 01:06:40+00:00,General,2012-01-18 09:50:57.856000+00:00,2011-12-12 01:06:40.010000+00:00,Group 2,Resource21,2011-10-17 01:06:40.020000+00:00,task-43846,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-10-19 09:57:39.722000+00:00 +Internet,RIGHT_case-10071,2011-12-12 01:06:40+00:00,General,2012-01-18 09:50:57.856000+00:00,2011-12-12 01:06:40.010000+00:00,Group 2,Resource21,2011-10-17 01:06:40.020000+00:00,task-43849,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-10-19 09:58:36.018000+00:00 +Internet,RIGHT_case-10071,2011-12-12 01:06:40+00:00,General,2012-01-18 09:50:57.856000+00:00,2011-12-12 01:06:40.010000+00:00,Group 2,Resource21,2011-10-17 01:06:40.020000+00:00,task-43850,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-10-20 14:06:59.060000+00:00 +Internet,RIGHT_case-10071,2011-12-12 01:06:40+00:00,General,2012-01-18 09:50:57.856000+00:00,2011-12-12 01:06:40.010000+00:00,Group 2,Resource21,2011-10-17 01:06:40.020000+00:00,task-53047,T12 Check document X request unlicensed,complete,Group 4,Resource21,2012-01-18 09:49:09.359000+00:00 +Internet,RIGHT_case-10071,2011-12-12 01:06:40+00:00,General,2012-01-18 09:50:57.856000+00:00,2011-12-12 01:06:40.010000+00:00,Group 2,Resource21,2011-10-17 01:06:40.020000+00:00,task-53051,T15 Print document X request unlicensed,complete,Group 2,Resource21,2012-01-18 09:50:57.577000+00:00 +Internet,RIGHT_case-10072,2011-12-11 01:06:40+00:00,General,2011-12-07 15:03:44.321000+00:00,2011-12-11 01:06:40.010000+00:00,,admin1,2011-10-16 01:06:40.020000+00:00,task-45103,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-31 11:10:03.929000+00:00 +Internet,RIGHT_case-10072,2011-12-11 01:06:40+00:00,General,2011-12-07 15:03:44.321000+00:00,2011-12-11 01:06:40.010000+00:00,,admin1,2011-10-16 01:06:40.020000+00:00,task-45106,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-31 11:10:54.423000+00:00 +Internet,RIGHT_case-10072,2011-12-11 01:06:40+00:00,General,2011-12-07 15:03:44.321000+00:00,2011-12-11 01:06:40.010000+00:00,,admin1,2011-10-16 01:06:40.020000+00:00,task-45129,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-31 11:37:11.319000+00:00 +Internet,RIGHT_case-10073,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource22,2011-10-17 01:06:40.020000+00:00,task-48486,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-11-29 14:40:03.247000+00:00 +Internet,RIGHT_case-10073,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource22,2011-10-17 01:06:40.020000+00:00,task-48491,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-11-29 14:41:12.227000+00:00 +Internet,RIGHT_case-10073,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource22,2011-10-17 01:06:40.020000+00:00,task-48493,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource22,2011-11-30 10:53:50.203000+00:00 +Internet,RIGHT_case-10073,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource22,2011-10-17 01:06:40.020000+00:00,task-48562,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource22,2011-11-30 11:02:33.530000+00:00 +Internet,RIGHT_case-10073,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource22,2011-10-17 01:06:40.020000+00:00,task-48564,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-11-30 11:05:12.807000+00:00 +Internet,RIGHT_case-10087,2011-12-13 01:06:40+00:00,General,2011-12-21 00:00:00.010000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44298,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-24 15:57:45.747000+00:00 +Internet,RIGHT_case-10087,2011-12-13 01:06:40+00:00,General,2011-12-21 00:00:00.010000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44301,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-24 15:58:19.298000+00:00 +Internet,RIGHT_case-10087,2011-12-13 01:06:40+00:00,General,2011-12-21 00:00:00.010000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44302,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-24 15:58:55.006000+00:00 +Internet,RIGHT_case-10089,2011-12-09 01:06:40+00:00,General,2011-10-24 12:02:19.895000+00:00,2011-12-09 01:06:40.010000+00:00,Group 2,Resource20,2011-10-14 01:06:40.020000+00:00,task-43748,T02 Check confirmation of receipt,complete,EMPTY,Resource20,2011-10-18 16:14:00.020000+00:00 +Internet,RIGHT_case-10089,2011-12-09 01:06:40+00:00,General,2011-10-24 12:02:19.895000+00:00,2011-12-09 01:06:40.010000+00:00,Group 2,Resource20,2011-10-14 01:06:40.020000+00:00,task-43755,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-10-18 16:15:26.326000+00:00 +Internet,RIGHT_case-10089,2011-12-09 01:06:40+00:00,General,2011-10-24 12:02:19.895000+00:00,2011-12-09 01:06:40.010000+00:00,Group 2,Resource20,2011-10-14 01:06:40.020000+00:00,task-43759,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-10-18 16:16:30.526000+00:00 +Internet,RIGHT_case-10090,2011-12-13 01:06:40+00:00,General,2011-12-23 10:15:43.378000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource01,2011-10-18 01:06:40.020000+00:00,task-44319,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-24 16:25:48.093000+00:00 +Internet,RIGHT_case-10090,2011-12-13 01:06:40+00:00,General,2011-12-23 10:15:43.378000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource01,2011-10-18 01:06:40.020000+00:00,task-44322,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-24 16:26:35.495000+00:00 +Internet,RIGHT_case-10090,2011-12-13 01:06:40+00:00,General,2011-12-23 10:15:43.378000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource01,2011-10-18 01:06:40.020000+00:00,task-44323,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-24 16:27:44.390000+00:00 +Internet,RIGHT_case-10094,2011-12-13 01:06:40+00:00,General,2011-11-23 09:10:27.977000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44511,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-25 15:07:50.830000+00:00 +Internet,RIGHT_case-10094,2011-12-13 01:06:40+00:00,General,2011-11-23 09:10:27.977000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44514,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-25 15:08:27.483000+00:00 +Internet,RIGHT_case-10094,2011-12-13 01:06:40+00:00,General,2011-11-23 09:10:27.977000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44515,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-25 15:09:15.981000+00:00 +Internet,RIGHT_case-10098,2011-12-13 01:06:40+00:00,General,2011-11-21 10:55:59.502000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44538,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-25 16:07:20.077000+00:00 +Internet,RIGHT_case-10098,2011-12-13 01:06:40+00:00,General,2011-11-21 10:55:59.502000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44541,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-25 16:08:23.484000+00:00 +Internet,RIGHT_case-10098,2011-12-13 01:06:40+00:00,General,2011-11-21 10:55:59.502000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44542,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-25 16:09:21.982000+00:00 +Internet,RIGHT_case-10099,2011-12-13 01:06:40+00:00,General,2011-11-23 09:18:38.635000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44588,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 09:04:58.466000+00:00 +Internet,RIGHT_case-10099,2011-12-13 01:06:40+00:00,General,2011-11-23 09:18:38.635000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44591,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 09:05:29.235000+00:00 +Internet,RIGHT_case-10099,2011-12-13 01:06:40+00:00,General,2011-11-23 09:18:38.635000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44592,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 09:07:16.656000+00:00 +Internet,RIGHT_case-10101,2011-12-13 01:06:40+00:00,General,2011-11-16 14:34:26.165000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44664,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 11:45:23.672000+00:00 +Internet,RIGHT_case-10101,2011-12-13 01:06:40+00:00,General,2011-11-16 14:34:26.165000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44667,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 11:46:16.939000+00:00 +Internet,RIGHT_case-10101,2011-12-13 01:06:40+00:00,General,2011-11-16 14:34:26.165000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44668,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 11:47:15.161000+00:00 +Internet,RIGHT_case-10102,2012-01-24 01:06:40+00:00,General,,2012-01-24 01:06:40.010000+00:00,Group 5,Resource02,2011-10-18 01:06:40.020000+00:00,task-43960,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-10-27 13:46:27.098000+00:00 +Internet,RIGHT_case-10102,2012-01-24 01:06:40+00:00,General,,2012-01-24 01:06:40.010000+00:00,Group 5,Resource02,2011-10-18 01:06:40.020000+00:00,task-44913,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-10-27 15:11:16.295000+00:00 +Internet,RIGHT_case-10102,2012-01-24 01:06:40+00:00,General,,2012-01-24 01:06:40.010000+00:00,Group 5,Resource02,2011-10-18 01:06:40.020000+00:00,task-46924,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-11-17 08:14:21.708000+00:00 +Internet,RIGHT_case-10103,2012-01-02 00:00:00+00:00,General,2012-01-18 14:42:30.860000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-10-11 01:06:40.020000+00:00,task-46638,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-11-15 07:20:38.880000+00:00 +Internet,RIGHT_case-10103,2012-01-02 00:00:00+00:00,General,2012-01-18 14:42:30.860000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-10-11 01:06:40.020000+00:00,task-46641,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-11-15 07:21:22.524000+00:00 +Internet,RIGHT_case-10103,2012-01-02 00:00:00+00:00,General,2012-01-18 14:42:30.860000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-10-11 01:06:40.020000+00:00,task-46642,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-11-15 07:42:43.828000+00:00 +Internet,RIGHT_case-10105,2011-12-13 01:06:40+00:00,General,2011-11-14 09:21:17.077000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44690,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 14:46:05.211000+00:00 +Internet,RIGHT_case-10105,2011-12-13 01:06:40+00:00,General,2011-11-14 09:21:17.077000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44693,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 14:46:39.019000+00:00 +Internet,RIGHT_case-10105,2011-12-13 01:06:40+00:00,General,2011-11-14 09:21:17.077000+00:00,2011-12-13 01:06:40.010000+00:00,Group 8,Resource11,2011-10-18 01:06:40.020000+00:00,task-44694,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 14:47:17.500000+00:00 +Internet,RIGHT_case-10120,2011-12-15 01:06:40+00:00,General,2011-11-18 10:41:02.406000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource05,2011-10-20 01:06:40.020000+00:00,task-44401,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-10-25 09:57:00.379000+00:00 +Internet,RIGHT_case-10120,2011-12-15 01:06:40+00:00,General,2011-11-18 10:41:02.406000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource05,2011-10-20 01:06:40.020000+00:00,task-44423,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-10-25 11:34:46.250000+00:00 +Internet,RIGHT_case-10120,2011-12-15 01:06:40+00:00,General,2011-11-18 10:41:02.406000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource05,2011-10-20 01:06:40.020000+00:00,task-44424,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-10-25 13:45:05.459000+00:00 +Internet,RIGHT_case-10127,2011-12-15 01:06:40+00:00,General,2011-11-14 16:28:14.523000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource06,2011-10-20 01:06:40.020000+00:00,task-44809,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-27 08:38:11.536000+00:00 +Internet,RIGHT_case-10127,2011-12-15 01:06:40+00:00,General,2011-11-14 16:28:14.523000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource06,2011-10-20 01:06:40.020000+00:00,task-44812,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-27 08:39:02.930000+00:00 +Internet,RIGHT_case-10127,2011-12-15 01:06:40+00:00,General,2011-11-14 16:28:14.523000+00:00,2011-12-15 01:06:40.010000+00:00,Group 5,Resource06,2011-10-20 01:06:40.020000+00:00,task-44814,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-27 08:40:03.485000+00:00 +Internet,RIGHT_case-10134,2011-12-16 01:06:40+00:00,General,2011-11-21 10:22:01.058000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44711,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 15:04:43.045000+00:00 +Internet,RIGHT_case-10134,2011-12-16 01:06:40+00:00,General,2011-11-21 10:22:01.058000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44714,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 15:05:19.716000+00:00 +Internet,RIGHT_case-10134,2011-12-16 01:06:40+00:00,General,2011-11-21 10:22:01.058000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44715,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 15:05:59.098000+00:00 +Internet,RIGHT_case-10136,2011-12-16 01:06:40+00:00,General,2011-11-21 10:47:45.048000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44737,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 15:41:23.359000+00:00 +Internet,RIGHT_case-10136,2011-12-16 01:06:40+00:00,General,2011-11-21 10:47:45.048000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44741,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 15:41:56.091000+00:00 +Internet,RIGHT_case-10136,2011-12-16 01:06:40+00:00,General,2011-11-21 10:47:45.048000+00:00,2011-12-16 01:06:40.010000+00:00,Group 8,Resource11,2011-10-21 01:06:40.020000+00:00,task-44739,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 15:42:22.465000+00:00 +Internet,RIGHT_case-10138,2011-12-16 01:06:40+00:00,General,,2011-12-16 01:06:40.010000+00:00,Group 5,Resource12,2011-10-21 01:06:40.020000+00:00,task-49490,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-12-08 14:53:26.952000+00:00 +Internet,RIGHT_case-10138,2011-12-16 01:06:40+00:00,General,,2011-12-16 01:06:40.010000+00:00,Group 5,Resource12,2011-10-21 01:06:40.020000+00:00,task-49496,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-12-08 14:55:37.151000+00:00 +Internet,RIGHT_case-10138,2011-12-16 01:06:40+00:00,General,,2011-12-16 01:06:40.010000+00:00,Group 5,Resource12,2011-10-21 01:06:40.020000+00:00,task-49495,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-12-14 13:36:32.274000+00:00 +Internet,RIGHT_case-10146,2011-12-16 01:06:40+00:00,General,2011-11-16 12:19:00.566000+00:00,2011-12-16 01:06:40.010000+00:00,Group 2,Resource03,2011-10-21 01:06:40.020000+00:00,task-45622,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-07 15:25:45.882000+00:00 +Internet,RIGHT_case-10146,2011-12-16 01:06:40+00:00,General,2011-11-16 12:19:00.566000+00:00,2011-12-16 01:06:40.010000+00:00,Group 2,Resource03,2011-10-21 01:06:40.020000+00:00,task-46832,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-16 12:06:16.314000+00:00 +Internet,RIGHT_case-10146,2011-12-16 01:06:40+00:00,General,2011-11-16 12:19:00.566000+00:00,2011-12-16 01:06:40.010000+00:00,Group 2,Resource03,2011-10-21 01:06:40.020000+00:00,task-46833,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-16 12:07:02.208000+00:00 +Internet,RIGHT_case-10147,2011-12-17 01:06:40+00:00,General,2011-11-21 14:00:38.805000+00:00,2011-12-17 01:06:40.010000+00:00,Group 8,Resource11,2011-10-22 01:06:40.020000+00:00,task-44759,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 16:10:03.859000+00:00 +Internet,RIGHT_case-10147,2011-12-17 01:06:40+00:00,General,2011-11-21 14:00:38.805000+00:00,2011-12-17 01:06:40.010000+00:00,Group 8,Resource11,2011-10-22 01:06:40.020000+00:00,task-44762,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 16:10:44.250000+00:00 +Internet,RIGHT_case-10147,2011-12-17 01:06:40+00:00,General,2011-11-21 14:00:38.805000+00:00,2011-12-17 01:06:40.010000+00:00,Group 8,Resource11,2011-10-22 01:06:40.020000+00:00,task-44763,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 16:11:19.812000+00:00 +Internet,RIGHT_case-10159,2011-12-18 01:06:40+00:00,General,2011-12-07 08:39:52.978000+00:00,2011-12-18 01:06:40.010000+00:00,Group 8,Resource11,2011-10-23 01:06:40.020000+00:00,task-46200,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-10 11:01:15.080000+00:00 +Internet,RIGHT_case-10159,2011-12-18 01:06:40+00:00,General,2011-12-07 08:39:52.978000+00:00,2011-12-18 01:06:40.010000+00:00,Group 8,Resource11,2011-10-23 01:06:40.020000+00:00,task-46203,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-10 11:02:24.015000+00:00 +Internet,RIGHT_case-10159,2011-12-18 01:06:40+00:00,General,2011-12-07 08:39:52.978000+00:00,2011-12-18 01:06:40.010000+00:00,Group 8,Resource11,2011-10-23 01:06:40.020000+00:00,task-46204,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-10 11:03:55.840000+00:00 +Internet,RIGHT_case-10160,2012-01-29 01:06:40+00:00,General,,2012-01-29 01:06:40.010000+00:00,Group 5,Resource02,2011-10-23 01:06:40.020000+00:00,task-44532,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-25 15:21:08.384000+00:00 +Internet,RIGHT_case-10160,2012-01-29 01:06:40+00:00,General,,2012-01-29 01:06:40.010000+00:00,Group 5,Resource02,2011-10-23 01:06:40.020000+00:00,task-44535,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-25 15:22:26.004000+00:00 +Internet,RIGHT_case-10164,2011-12-19 01:06:40+00:00,General,2011-11-18 16:02:50.407000+00:00,2011-12-19 01:06:40.010000+00:00,Group 8,Resource01,2011-10-24 01:06:40.020000+00:00,task-44861,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2011-10-27 11:18:08.789000+00:00 +Internet,RIGHT_case-10183,2013-01-02 00:00:00+00:00,General,,2011-12-20 00:00:00.010000+00:00,Group 5,Resource09,2011-10-25 01:06:40.020000+00:00,task-49575,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-09 14:16:39.383000+00:00 +Internet,RIGHT_case-10183,2013-01-02 00:00:00+00:00,General,,2011-12-20 00:00:00.010000+00:00,Group 5,Resource09,2011-10-25 01:06:40.020000+00:00,task-49579,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-09 14:24:28.994000+00:00 +Internet,RIGHT_case-10183,2013-01-02 00:00:00+00:00,General,,2011-12-20 00:00:00.010000+00:00,Group 5,Resource09,2011-10-25 01:06:40.020000+00:00,task-49578,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-09 14:30:04.403000+00:00 +Internet,RIGHT_case-10196,2011-12-28 00:00:00+00:00,General,2011-12-23 16:08:22.587000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource23,2011-10-12 01:06:40.020000+00:00,task-45499,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-11-07 08:59:27.936000+00:00 +Internet,RIGHT_case-10196,2011-12-28 00:00:00+00:00,General,2011-12-23 16:08:22.587000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource23,2011-10-12 01:06:40.020000+00:00,task-45502,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-11-07 09:00:26.195000+00:00 +Internet,RIGHT_case-10196,2011-12-28 00:00:00+00:00,General,2011-12-23 16:08:22.587000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource23,2011-10-12 01:06:40.020000+00:00,task-45503,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-11-07 09:04:19.919000+00:00 +Internet,RIGHT_case-10198,2011-12-21 01:06:40+00:00,General,2011-12-07 08:50:52.710000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-26 01:06:40.020000+00:00,task-45626,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-07 15:42:25.734000+00:00 +Internet,RIGHT_case-10198,2011-12-21 01:06:40+00:00,General,2011-12-07 08:50:52.710000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-26 01:06:40.020000+00:00,task-45632,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-07 15:43:09.610000+00:00 +Internet,RIGHT_case-10198,2011-12-21 01:06:40+00:00,General,2011-12-07 08:50:52.710000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-26 01:06:40.020000+00:00,task-45630,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-07 15:43:33.300000+00:00 +Desk,RIGHT_case-10199,2011-12-13 01:06:40+00:00,General,2011-12-07 15:23:56.316000+00:00,2011-12-13 01:06:40.010000+00:00,Group 5,Resource13,2011-10-18 01:06:40.020000+00:00,task-45152,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-10-31 12:27:59.136000+00:00 +Desk,RIGHT_case-10199,2011-12-13 01:06:40+00:00,General,2011-12-07 15:23:56.316000+00:00,2011-12-13 01:06:40.010000+00:00,Group 5,Resource13,2011-10-18 01:06:40.020000+00:00,task-45155,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-10-31 12:30:30.258000+00:00 +Desk,RIGHT_case-10199,2011-12-13 01:06:40+00:00,General,2011-12-07 15:23:56.316000+00:00,2011-12-13 01:06:40.010000+00:00,Group 5,Resource13,2011-10-18 01:06:40.020000+00:00,task-45159,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-10-31 12:31:26.913000+00:00 +Desk,RIGHT_case-10202,2012-01-11 00:00:00+00:00,General,2012-01-09 16:52:03.253000+00:00,2012-01-11 00:00:00.010000+00:00,Group 5,Resource23,2011-10-24 01:06:40.020000+00:00,task-46355,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-11-11 11:27:13.213000+00:00 +Desk,RIGHT_case-10202,2012-01-11 00:00:00+00:00,General,2012-01-09 16:52:03.253000+00:00,2012-01-11 00:00:00.010000+00:00,Group 5,Resource23,2011-10-24 01:06:40.020000+00:00,task-46358,T05 Print and send confirmation of receipt,complete,EMPTY,Resource23,2011-11-11 11:28:32.859000+00:00 +Desk,RIGHT_case-10202,2012-01-11 00:00:00+00:00,General,2012-01-09 16:52:03.253000+00:00,2012-01-11 00:00:00.010000+00:00,Group 5,Resource23,2011-10-24 01:06:40.020000+00:00,task-46360,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-11-11 11:29:22.728000+00:00 +Internet,RIGHT_case-10211,2011-12-22 01:06:40+00:00,General,2011-11-21 13:48:22.259000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45661,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-07 16:10:46.884000+00:00 +Internet,RIGHT_case-10211,2011-12-22 01:06:40+00:00,General,2011-11-21 13:48:22.259000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45664,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-07 16:11:17.467000+00:00 +Internet,RIGHT_case-10211,2011-12-22 01:06:40+00:00,General,2011-11-21 13:48:22.259000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45665,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-07 16:11:56.020000+00:00 +Internet,RIGHT_case-10218,2011-12-22 01:06:40+00:00,General,2011-12-07 08:59:51.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45681,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-07 16:39:57.124000+00:00 +Internet,RIGHT_case-10218,2011-12-22 01:06:40+00:00,General,2011-12-07 08:59:51.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45684,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-07 16:40:27.744000+00:00 +Internet,RIGHT_case-10218,2011-12-22 01:06:40+00:00,General,2011-12-07 08:59:51.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45685,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-07 16:41:08.668000+00:00 +Internet,RIGHT_case-10220,2011-12-22 01:06:40+00:00,General,2011-12-07 09:17:33.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45705,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-08 09:01:19.566000+00:00 +Internet,RIGHT_case-10220,2011-12-22 01:06:40+00:00,General,2011-12-07 09:17:33.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45708,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-08 09:01:56.265000+00:00 +Internet,RIGHT_case-10220,2011-12-22 01:06:40+00:00,General,2011-12-07 09:17:33.356000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45709,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-08 09:02:42.865000+00:00 +Internet,RIGHT_case-10221,2011-12-22 01:06:40+00:00,General,2011-12-12 15:03:53.791000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-48452,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-11-29 12:29:42.082000+00:00 +Internet,RIGHT_case-10221,2011-12-22 01:06:40+00:00,General,2011-12-12 15:03:53.791000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-48455,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-11-29 12:30:47.253000+00:00 +Internet,RIGHT_case-10221,2011-12-22 01:06:40+00:00,General,2011-12-12 15:03:53.791000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-48460,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-11-29 12:43:19.895000+00:00 +Internet,RIGHT_case-10222,2011-12-22 00:00:00+00:00,General,2012-01-05 16:07:21.119000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource22,2011-10-27 01:06:40.020000+00:00,task-47890,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-11-24 14:49:36.208000+00:00 +Internet,RIGHT_case-10222,2011-12-22 00:00:00+00:00,General,2012-01-05 16:07:21.119000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource22,2011-10-27 01:06:40.020000+00:00,task-47897,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-11-24 14:51:41.327000+00:00 +Internet,RIGHT_case-10222,2011-12-22 00:00:00+00:00,General,2012-01-05 16:07:21.119000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource22,2011-10-27 01:06:40.020000+00:00,task-47939,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-11-24 15:27:02.129000+00:00 +Internet,RIGHT_case-10223,2011-12-22 00:00:00+00:00,General,2011-12-19 08:48:52.854000+00:00,2011-12-22 00:00:00.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45740,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-08 09:20:22.751000+00:00 +Internet,RIGHT_case-10223,2011-12-22 00:00:00+00:00,General,2011-12-19 08:48:52.854000+00:00,2011-12-22 00:00:00.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45743,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-08 09:20:56.808000+00:00 +Internet,RIGHT_case-10223,2011-12-22 00:00:00+00:00,General,2011-12-19 08:48:52.854000+00:00,2011-12-22 00:00:00.010000+00:00,Group 8,Resource11,2011-10-27 01:06:40.020000+00:00,task-45744,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-08 09:21:43.487000+00:00 +Internet,RIGHT_case-10225,2011-12-22 00:00:00+00:00,General,2012-01-18 12:34:02.740000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-49271,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-12-07 10:04:22.794000+00:00 +Internet,RIGHT_case-10225,2011-12-22 00:00:00+00:00,General,2012-01-18 12:34:02.740000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-49298,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-12-07 10:05:36.523000+00:00 +Internet,RIGHT_case-10225,2011-12-22 00:00:00+00:00,General,2012-01-18 12:34:02.740000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource14,2011-10-27 01:06:40.020000+00:00,task-49294,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-12-07 10:16:31.803000+00:00 +Internet,RIGHT_case-10232,2011-12-23 01:06:40+00:00,General,2011-12-14 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource01,2011-10-28 01:06:40.020000+00:00,task-49332,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-07 12:20:41.121000+00:00 +Internet,RIGHT_case-10232,2011-12-23 01:06:40+00:00,General,2011-12-14 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource01,2011-10-28 01:06:40.020000+00:00,task-49338,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-07 12:21:28.467000+00:00 +Internet,RIGHT_case-10232,2011-12-23 01:06:40+00:00,General,2011-12-14 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource01,2011-10-28 01:06:40.020000+00:00,task-49339,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-07 12:22:21.436000+00:00 +Internet,RIGHT_case-10263,2011-12-26 01:06:40+00:00,General,,2011-12-26 01:06:40.010000+00:00,Group 5,Resource12,2011-10-31 01:06:40.010000+00:00,task-47271,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-11-18 14:15:51.435000+00:00 +Internet,RIGHT_case-10263,2011-12-26 01:06:40+00:00,General,,2011-12-26 01:06:40.010000+00:00,Group 5,Resource12,2011-10-31 01:06:40.010000+00:00,task-47278,T05 Print and send confirmation of receipt,complete,Group 2,Resource27,2011-11-30 12:02:03.222000+00:00 +Internet,RIGHT_case-10284,2011-12-28 01:06:40+00:00,General,2011-12-07 09:34:15.575000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45907,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-09 10:11:49.422000+00:00 +Internet,RIGHT_case-10284,2011-12-28 01:06:40+00:00,General,2011-12-07 09:34:15.575000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45911,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-09 10:17:20.992000+00:00 +Internet,RIGHT_case-10284,2011-12-28 01:06:40+00:00,General,2011-12-07 09:34:15.575000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45909,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-09 10:17:42.795000+00:00 +Post,RIGHT_case-10286,2011-12-23 01:06:40+00:00,General,2011-12-07 09:11:03.638000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-28 01:06:40.020000+00:00,task-45885,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-09 09:22:21.141000+00:00 +Post,RIGHT_case-10286,2011-12-23 01:06:40+00:00,General,2011-12-07 09:11:03.638000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-28 01:06:40.020000+00:00,task-45888,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-09 09:22:57.042000+00:00 +Post,RIGHT_case-10286,2011-12-23 01:06:40+00:00,General,2011-12-07 09:11:03.638000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-28 01:06:40.020000+00:00,task-45889,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-09 09:31:00.488000+00:00 +Internet,RIGHT_case-10287,2011-12-28 00:00:00+00:00,General,2011-12-23 14:11:59.502000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45929,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-09 10:36:27.973000+00:00 +Internet,RIGHT_case-10287,2011-12-28 00:00:00+00:00,General,2011-12-23 14:11:59.502000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45932,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-09 10:36:59.330000+00:00 +Internet,RIGHT_case-10287,2011-12-28 00:00:00+00:00,General,2011-12-23 14:11:59.502000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45933,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-09 10:37:34.862000+00:00 +Internet,RIGHT_case-10289,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource06,2011-11-02 01:06:40.010000+00:00,task-46222,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-10 11:37:51.725000+00:00 +Internet,RIGHT_case-10289,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource06,2011-11-02 01:06:40.010000+00:00,task-46229,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-10 11:38:30.166000+00:00 +Internet,RIGHT_case-10289,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource06,2011-11-02 01:06:40.010000+00:00,task-46230,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-10 11:40:42.373000+00:00 +Internet,RIGHT_case-10297,2011-12-28 01:06:40+00:00,General,2011-12-07 10:53:41.781000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45987,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-11-09 12:23:55.292000+00:00 +Internet,RIGHT_case-10297,2011-12-28 01:06:40+00:00,General,2011-12-07 10:53:41.781000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45990,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-11-09 12:24:37.827000+00:00 +Internet,RIGHT_case-10297,2011-12-28 01:06:40+00:00,General,2011-12-07 10:53:41.781000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45999,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-11-09 12:42:35.139000+00:00 +Internet,RIGHT_case-10299,2011-12-28 01:06:40+00:00,General,2011-12-13 07:41:22.236000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45949,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-09 11:01:59.252000+00:00 +Internet,RIGHT_case-10299,2011-12-28 01:06:40+00:00,General,2011-12-13 07:41:22.236000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45952,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-09 11:02:37.096000+00:00 +Internet,RIGHT_case-10299,2011-12-28 01:06:40+00:00,General,2011-12-13 07:41:22.236000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-45953,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-09 11:03:41.390000+00:00 +Internet,RIGHT_case-10300,2011-12-28 01:06:40+00:00,General,2011-12-13 07:47:04.800000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-46173,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-10 10:34:33.033000+00:00 +Internet,RIGHT_case-10300,2011-12-28 01:06:40+00:00,General,2011-12-13 07:47:04.800000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-46176,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-10 10:35:08.823000+00:00 +Internet,RIGHT_case-10300,2011-12-28 01:06:40+00:00,General,2011-12-13 07:47:04.800000+00:00,2011-12-28 01:06:40.010000+00:00,Group 8,Resource11,2011-11-02 01:06:40.010000+00:00,task-46178,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-10 10:35:48.129000+00:00 +Internet,RIGHT_case-10322,2011-12-30 01:06:40+00:00,General,2011-12-13 07:51:46.479000+00:00,2011-12-30 01:06:40.010000+00:00,Group 8,Resource11,2011-11-04 01:06:40.010000+00:00,task-46664,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-15 08:53:38.329000+00:00 +Internet,RIGHT_case-10322,2011-12-30 01:06:40+00:00,General,2011-12-13 07:51:46.479000+00:00,2011-12-30 01:06:40.010000+00:00,Group 8,Resource11,2011-11-04 01:06:40.010000+00:00,task-46667,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-15 08:54:14.252000+00:00 +Internet,RIGHT_case-10322,2011-12-30 01:06:40+00:00,General,2011-12-13 07:51:46.479000+00:00,2011-12-30 01:06:40.010000+00:00,Group 8,Resource11,2011-11-04 01:06:40.010000+00:00,task-46668,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-15 08:54:50.336000+00:00 +Internet,RIGHT_case-10324,2011-12-30 13:03:40.343000+00:00,General,,2011-12-30 13:03:40.343000+00:00,,Resource26,2011-11-04 13:03:40.343000+00:00,task-45766,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource24,2011-12-12 12:12:42.140000+00:00 +Internet,RIGHT_case-10326,2012-02-05 00:00:00+00:00,General,,2011-12-30 00:00:00.010000+00:00,Group 5,Resource09,2011-11-04 01:06:40.010000+00:00,task-48674,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-11-30 15:56:06.840000+00:00 +Internet,RIGHT_case-10326,2012-02-05 00:00:00+00:00,General,,2011-12-30 00:00:00.010000+00:00,Group 5,Resource09,2011-11-04 01:06:40.010000+00:00,task-48679,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-11-30 15:57:41.635000+00:00 +Internet,RIGHT_case-10326,2012-02-05 00:00:00+00:00,General,,2011-12-30 00:00:00.010000+00:00,Group 5,Resource09,2011-11-04 01:06:40.010000+00:00,task-48680,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-11-30 16:04:43.684000+00:00 +Internet,RIGHT_case-10336,2011-12-31 00:00:00+00:00,General,2011-12-20 10:45:09.086000+00:00,2011-12-31 00:00:00.010000+00:00,Group 8,Resource11,2011-11-05 01:06:40.010000+00:00,task-47040,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-17 15:57:14.361000+00:00 +Internet,RIGHT_case-10336,2011-12-31 00:00:00+00:00,General,2011-12-20 10:45:09.086000+00:00,2011-12-31 00:00:00.010000+00:00,Group 8,Resource11,2011-11-05 01:06:40.010000+00:00,task-47044,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-17 15:58:15.308000+00:00 +Internet,RIGHT_case-10336,2011-12-31 00:00:00+00:00,General,2011-12-20 10:45:09.086000+00:00,2011-12-31 00:00:00.010000+00:00,Group 8,Resource11,2011-11-05 01:06:40.010000+00:00,task-47046,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-17 15:59:46.294000+00:00 +Internet,RIGHT_case-10339,2011-12-31 01:06:40+00:00,General,,2011-12-31 01:06:40.010000+00:00,Group 5,Resource06,2011-11-05 01:06:40.010000+00:00,task-46542,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-14 13:55:13.723000+00:00 +Internet,RIGHT_case-10339,2011-12-31 01:06:40+00:00,General,,2011-12-31 01:06:40.010000+00:00,Group 5,Resource06,2011-11-05 01:06:40.010000+00:00,task-46550,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-14 13:56:07.190000+00:00 +Internet,RIGHT_case-10339,2011-12-31 01:06:40+00:00,General,,2011-12-31 01:06:40.010000+00:00,Group 5,Resource06,2011-11-05 01:06:40.010000+00:00,task-46554,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-14 13:57:28.105000+00:00 +Internet,RIGHT_case-10350,2012-01-01 01:06:40+00:00,General,2011-12-07 09:48:15.041000+00:00,2012-01-01 01:06:40.010000+00:00,Group 8,Resource11,2011-11-06 01:06:40.010000+00:00,task-46269,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-10 15:11:15.596000+00:00 +Internet,RIGHT_case-10350,2012-01-01 01:06:40+00:00,General,2011-12-07 09:48:15.041000+00:00,2012-01-01 01:06:40.010000+00:00,Group 8,Resource11,2011-11-06 01:06:40.010000+00:00,task-46272,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-10 15:11:46.581000+00:00 +Internet,RIGHT_case-10350,2012-01-01 01:06:40+00:00,General,2011-12-07 09:48:15.041000+00:00,2012-01-01 01:06:40.010000+00:00,Group 8,Resource11,2011-11-06 01:06:40.010000+00:00,task-46273,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-10 15:12:27.629000+00:00 +Internet,RIGHT_case-10352,2012-01-01 01:06:40+00:00,General,2011-11-18 10:49:10.069000+00:00,2012-01-01 01:06:40.010000+00:00,Group 2,Resource20,2011-11-06 01:06:40.010000+00:00,task-46469,T02 Check confirmation of receipt,complete,EMPTY,Resource20,2011-11-14 10:51:38.023000+00:00 +Internet,RIGHT_case-10352,2012-01-01 01:06:40+00:00,General,2011-11-18 10:49:10.069000+00:00,2012-01-01 01:06:40.010000+00:00,Group 2,Resource20,2011-11-06 01:06:40.010000+00:00,task-46476,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-11-14 12:00:15.861000+00:00 +Internet,RIGHT_case-10352,2012-01-01 01:06:40+00:00,General,2011-11-18 10:49:10.069000+00:00,2012-01-01 01:06:40.010000+00:00,Group 2,Resource20,2011-11-06 01:06:40.010000+00:00,task-46477,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-11-14 12:01:17.656000+00:00 +Internet,RIGHT_case-10357,2012-01-02 01:06:40+00:00,General,2011-11-14 09:21:48.989000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource06,2011-11-07 01:06:40.010000+00:00,task-45961,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-09 11:30:08.582000+00:00 +Internet,RIGHT_case-10357,2012-01-02 01:06:40+00:00,General,2011-11-14 09:21:48.989000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource06,2011-11-07 01:06:40.010000+00:00,task-45964,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-09 11:30:44.331000+00:00 +Internet,RIGHT_case-10357,2012-01-02 01:06:40+00:00,General,2011-11-14 09:21:48.989000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource06,2011-11-07 01:06:40.010000+00:00,task-45965,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-09 11:31:33.707000+00:00 +Internet,RIGHT_case-10357,2012-01-02 01:06:40+00:00,General,2011-11-14 09:21:48.989000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource06,2011-11-07 01:06:40.010000+00:00,task-45967,T12 Check document X request unlicensed,complete,Group 4,Resource06,2011-11-09 11:40:14.529000+00:00 +Internet,RIGHT_case-10357,2012-01-02 01:06:40+00:00,General,2011-11-14 09:21:48.989000+00:00,2012-01-02 01:06:40.010000+00:00,Group 5,Resource06,2011-11-07 01:06:40.010000+00:00,task-45969,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-11-14 09:21:48.805000+00:00 +Internet,RIGHT_case-10375,2012-01-02 00:00:00+00:00,General,2012-01-18 11:32:31.001000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 01:06:40.010000+00:00,task-46992,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-11-17 14:48:22.100000+00:00 +Internet,RIGHT_case-10375,2012-01-02 00:00:00+00:00,General,2012-01-18 11:32:31.001000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 01:06:40.010000+00:00,task-47001,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-11-17 14:49:44.706000+00:00 +Internet,RIGHT_case-10375,2012-01-02 00:00:00+00:00,General,2012-01-18 11:32:31.001000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 01:06:40.010000+00:00,task-47031,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-11-17 15:24:32.419000+00:00 +Post,RIGHT_case-10378,2012-03-13 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-10-26 01:06:40.020000+00:00,task-45793,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-08 12:51:49.834000+00:00 +Post,RIGHT_case-10378,2012-03-13 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-10-26 01:06:40.020000+00:00,task-45796,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-08 12:52:24.716000+00:00 +Post,RIGHT_case-10378,2012-03-13 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-10-26 01:06:40.020000+00:00,task-45797,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-08 12:53:03.885000+00:00 +Internet,RIGHT_case-10384,2012-01-03 00:00:00+00:00,General,2011-12-30 14:58:37.454000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource23,2011-11-08 01:06:40.010000+00:00,task-48054,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-11-25 11:18:56.984000+00:00 +Internet,RIGHT_case-10384,2012-01-03 00:00:00+00:00,General,2011-12-30 14:58:37.454000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource23,2011-11-08 01:06:40.010000+00:00,task-48058,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-11-25 11:19:51.210000+00:00 +Internet,RIGHT_case-10384,2012-01-03 00:00:00+00:00,General,2011-12-30 14:58:37.454000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource23,2011-11-08 01:06:40.010000+00:00,task-48061,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-11-25 11:23:04.911000+00:00 +Internet,RIGHT_case-10392,2012-01-04 00:00:00+00:00,General,2011-12-22 15:18:30.995000+00:00,2012-01-04 00:00:00.010000+00:00,Group 8,Resource11,2011-11-09 01:06:40.010000+00:00,task-47123,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 09:09:49.213000+00:00 +Internet,RIGHT_case-10392,2012-01-04 00:00:00+00:00,General,2011-12-22 15:18:30.995000+00:00,2012-01-04 00:00:00.010000+00:00,Group 8,Resource11,2011-11-09 01:06:40.010000+00:00,task-47126,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 09:18:24.008000+00:00 +Internet,RIGHT_case-10392,2012-01-04 00:00:00+00:00,General,2011-12-22 15:18:30.995000+00:00,2012-01-04 00:00:00.010000+00:00,Group 8,Resource11,2011-11-09 01:06:40.010000+00:00,task-47127,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 09:19:13.974000+00:00 +Internet,RIGHT_case-10392,2012-01-04 00:00:00+00:00,General,2011-12-22 15:18:30.995000+00:00,2012-01-04 00:00:00.010000+00:00,Group 8,Resource11,2011-11-09 01:06:40.010000+00:00,task-47129,T17 Check report Y to stop indication,complete,Group 4,Resource03,2011-11-18 09:19:51.377000+00:00 +Internet,RIGHT_case-10392,2012-01-04 00:00:00+00:00,General,2011-12-22 15:18:30.995000+00:00,2012-01-04 00:00:00.010000+00:00,Group 8,Resource11,2011-11-09 01:06:40.010000+00:00,task-47131,T20 Print report Y to stop indication,complete,Group 2,Resource03,2011-11-18 09:21:34.851000+00:00 +Internet,RIGHT_case-10407,2012-01-05 01:06:40+00:00,General,2011-11-18 11:02:10.932000+00:00,2012-01-05 01:06:40.010000+00:00,Group 2,Resource20,2011-11-10 01:06:40.010000+00:00,task-46515,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-11-14 12:58:28.781000+00:00 +Internet,RIGHT_case-10407,2012-01-05 01:06:40+00:00,General,2011-11-18 11:02:10.932000+00:00,2012-01-05 01:06:40.010000+00:00,Group 2,Resource20,2011-11-10 01:06:40.010000+00:00,task-46520,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-11-14 13:07:46.421000+00:00 +Internet,RIGHT_case-10407,2012-01-05 01:06:40+00:00,General,2011-11-18 11:02:10.932000+00:00,2012-01-05 01:06:40.010000+00:00,Group 2,Resource20,2011-11-10 01:06:40.010000+00:00,task-46522,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-11-14 13:09:55.809000+00:00 +Internet,RIGHT_case-10410,2012-01-05 01:06:40+00:00,General,,2012-01-05 01:06:40.010000+00:00,Group 5,Resource09,2011-11-10 01:06:40.010000+00:00,task-48645,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-11-30 14:47:01.891000+00:00 +Internet,RIGHT_case-10410,2012-01-05 01:06:40+00:00,General,,2012-01-05 01:06:40.010000+00:00,Group 5,Resource09,2011-11-10 01:06:40.010000+00:00,task-48648,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-11-30 14:48:46.418000+00:00 +Internet,RIGHT_case-10410,2012-01-05 01:06:40+00:00,General,,2012-01-05 01:06:40.010000+00:00,Group 5,Resource09,2011-11-10 01:06:40.010000+00:00,task-48699,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-11-30 16:34:56.762000+00:00 +Internet,RIGHT_case-10459,2012-01-09 01:06:40+00:00,General,2011-11-25 09:54:28.893000+00:00,2012-01-09 01:06:40.010000+00:00,Group 5,Resource08,2011-11-14 01:06:40.010000+00:00,task-47612,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-11-22 14:32:58.478000+00:00 +Internet,RIGHT_case-10459,2012-01-09 01:06:40+00:00,General,2011-11-25 09:54:28.893000+00:00,2012-01-09 01:06:40.010000+00:00,Group 5,Resource08,2011-11-14 01:06:40.010000+00:00,task-47621,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-11-22 14:41:49.850000+00:00 +Internet,RIGHT_case-10459,2012-01-09 01:06:40+00:00,General,2011-11-25 09:54:28.893000+00:00,2012-01-09 01:06:40.010000+00:00,Group 5,Resource08,2011-11-14 01:06:40.010000+00:00,task-47622,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-11-22 14:45:46.562000+00:00 +Internet,RIGHT_case-10460,2012-01-09 01:06:40+00:00,General,2011-11-25 09:31:43.698000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource20,2011-11-14 01:06:40.010000+00:00,task-47643,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-11-22 15:03:37.543000+00:00 +Internet,RIGHT_case-10460,2012-01-09 01:06:40+00:00,General,2011-11-25 09:31:43.698000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource20,2011-11-14 01:06:40.010000+00:00,task-47647,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-11-22 15:04:51.662000+00:00 +Internet,RIGHT_case-10460,2012-01-09 01:06:40+00:00,General,2011-11-25 09:31:43.698000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource20,2011-11-14 01:06:40.010000+00:00,task-47650,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-11-22 15:35:03.653000+00:00 +Internet,RIGHT_case-10461,2012-01-09 01:06:40+00:00,General,2011-11-23 14:06:55.068000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource03,2011-11-14 01:06:40.010000+00:00,task-47151,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 09:54:05.458000+00:00 +Internet,RIGHT_case-10461,2012-01-09 01:06:40+00:00,General,2011-11-23 14:06:55.068000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource03,2011-11-14 01:06:40.010000+00:00,task-47155,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 09:54:54.994000+00:00 +Internet,RIGHT_case-10461,2012-01-09 01:06:40+00:00,General,2011-11-23 14:06:55.068000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource03,2011-11-14 01:06:40.010000+00:00,task-47156,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 09:55:50.240000+00:00 +Internet,RIGHT_case-10461,2012-01-09 01:06:40+00:00,General,2011-11-23 14:06:55.068000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource03,2011-11-14 01:06:40.010000+00:00,task-47158,T17 Check report Y to stop indication,complete,Group 4,Resource03,2011-11-18 09:56:27.350000+00:00 +Internet,RIGHT_case-10461,2012-01-09 01:06:40+00:00,General,2011-11-23 14:06:55.068000+00:00,2012-01-09 01:06:40.010000+00:00,Group 2,Resource03,2011-11-14 01:06:40.010000+00:00,task-47160,T20 Print report Y to stop indication,complete,Group 2,Resource03,2011-11-18 09:56:58.025000+00:00 +Internet,RIGHT_case-10463,2012-02-29 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-11-14 01:06:40.010000+00:00,task-48121,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-25 16:10:19.837000+00:00 +Internet,RIGHT_case-10463,2012-02-29 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-11-14 01:06:40.010000+00:00,task-48124,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-25 16:10:54.528000+00:00 +Internet,RIGHT_case-10463,2012-02-29 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource06,2011-11-14 01:06:40.010000+00:00,task-48125,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-25 16:15:57.008000+00:00 +Internet,RIGHT_case-10464,2012-02-20 00:00:00+00:00,General,,2012-02-20 00:00:00.010000+00:00,Group 5,Resource09,2011-11-14 01:06:40.010000+00:00,task-50013,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-15 14:12:14.656000+00:00 +Internet,RIGHT_case-10464,2012-02-20 00:00:00+00:00,General,,2012-02-20 00:00:00.010000+00:00,Group 5,Resource09,2011-11-14 01:06:40.010000+00:00,task-50011,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-15 14:19:41.933000+00:00 +Internet,RIGHT_case-10464,2012-02-20 00:00:00+00:00,General,,2012-02-20 00:00:00.010000+00:00,Group 5,Resource09,2011-11-14 01:06:40.010000+00:00,task-50033,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-15 14:25:00.655000+00:00 +Internet,RIGHT_case-10472,2012-01-10 01:06:40+00:00,General,2011-12-13 08:01:09.294000+00:00,2012-01-10 01:06:40.010000+00:00,Group 8,Resource11,2011-11-15 01:06:40.010000+00:00,task-47095,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-17 16:42:35.975000+00:00 +Internet,RIGHT_case-10472,2012-01-10 01:06:40+00:00,General,2011-12-13 08:01:09.294000+00:00,2012-01-10 01:06:40.010000+00:00,Group 8,Resource11,2011-11-15 01:06:40.010000+00:00,task-47098,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-17 16:43:05.721000+00:00 +Internet,RIGHT_case-10472,2012-01-10 01:06:40+00:00,General,2011-12-13 08:01:09.294000+00:00,2012-01-10 01:06:40.010000+00:00,Group 8,Resource11,2011-11-15 01:06:40.010000+00:00,task-47099,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-17 16:43:45.101000+00:00 +Internet,RIGHT_case-10473,2012-01-10 00:00:00+00:00,General,2012-01-09 16:41:15.601000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-46742,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-15 11:51:37.240000+00:00 +Internet,RIGHT_case-10473,2012-01-10 00:00:00+00:00,General,2012-01-09 16:41:15.601000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-46746,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-15 11:52:14.927000+00:00 +Internet,RIGHT_case-10473,2012-01-10 00:00:00+00:00,General,2012-01-09 16:41:15.601000+00:00,2012-01-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-46747,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-15 11:53:23.792000+00:00 +Internet,RIGHT_case-10474,2012-01-10 00:00:00+00:00,General,2012-01-09 16:36:35.304000+00:00,2012-01-10 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-48143,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-28 09:31:16.975000+00:00 +Internet,RIGHT_case-10474,2012-01-10 00:00:00+00:00,General,2012-01-09 16:36:35.304000+00:00,2012-01-10 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-48151,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-28 09:31:58.732000+00:00 +Internet,RIGHT_case-10474,2012-01-10 00:00:00+00:00,General,2012-01-09 16:36:35.304000+00:00,2012-01-10 00:00:00.010000+00:00,Group 5,Resource06,2011-11-15 01:06:40.010000+00:00,task-48153,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-28 09:32:46.412000+00:00 +Internet,RIGHT_case-10479,2012-01-10 01:06:40+00:00,General,2011-11-18 11:14:22.481000+00:00,2012-01-10 01:06:40.010000+00:00,Group 2,Resource03,2011-11-15 01:06:40.010000+00:00,task-47184,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 10:39:34.311000+00:00 +Internet,RIGHT_case-10479,2012-01-10 01:06:40+00:00,General,2011-11-18 11:14:22.481000+00:00,2012-01-10 01:06:40.010000+00:00,Group 2,Resource03,2011-11-15 01:06:40.010000+00:00,task-47193,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 11:13:53.173000+00:00 +Internet,RIGHT_case-10483,2012-02-22 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-51617,T02 Check confirmation of receipt,complete,Group 4,Resource02,2012-01-09 11:32:15.732000+00:00 +Internet,RIGHT_case-10483,2012-02-22 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-51620,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2012-01-09 11:33:18.309000+00:00 +Internet,RIGHT_case-10484,2012-02-22 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-51627,T02 Check confirmation of receipt,complete,Group 4,Resource02,2012-01-09 12:12:07.726000+00:00 +Internet,RIGHT_case-10484,2012-02-22 00:00:00+00:00,General,,2012-02-22 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-51630,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2012-01-09 12:13:51.633000+00:00 +Internet,RIGHT_case-10487,2012-01-11 01:06:40+00:00,General,2011-12-07 09:56:05.674000+00:00,2012-01-11 01:06:40.010000+00:00,Group 8,Resource11,2011-11-16 01:06:40.010000+00:00,task-47210,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 12:03:07.303000+00:00 +Internet,RIGHT_case-10487,2012-01-11 01:06:40+00:00,General,2011-12-07 09:56:05.674000+00:00,2012-01-11 01:06:40.010000+00:00,Group 8,Resource11,2011-11-16 01:06:40.010000+00:00,task-47213,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 12:03:42.380000+00:00 +Internet,RIGHT_case-10487,2012-01-11 01:06:40+00:00,General,2011-12-07 09:56:05.674000+00:00,2012-01-11 01:06:40.010000+00:00,Group 8,Resource11,2011-11-16 01:06:40.010000+00:00,task-47214,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 12:04:25.848000+00:00 +Internet,RIGHT_case-10489,2012-02-23 00:00:00+00:00,General,,2012-02-23 00:00:00.010000+00:00,Group 5,Resource02,2011-11-16 01:06:40.010000+00:00,task-48806,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-12-01 14:44:34.050000+00:00 +Internet,RIGHT_case-10489,2012-02-23 00:00:00+00:00,General,,2012-02-23 00:00:00.010000+00:00,Group 5,Resource02,2011-11-16 01:06:40.010000+00:00,task-48809,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-12-01 14:45:21.242000+00:00 +Internet,RIGHT_case-10489,2012-02-23 00:00:00+00:00,General,,2012-02-23 00:00:00.010000+00:00,Group 5,Resource02,2011-11-16 01:06:40.010000+00:00,task-48810,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-12-01 14:47:58.903000+00:00 +Internet,RIGHT_case-10492,2012-01-11 01:06:40+00:00,General,2011-11-22 10:25:17.026000+00:00,2012-01-11 01:06:40.010000+00:00,Group 2,Resource03,2011-11-16 01:06:40.010000+00:00,task-47490,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-22 09:53:28.689000+00:00 +Internet,RIGHT_case-10492,2012-01-11 01:06:40+00:00,General,2011-11-22 10:25:17.026000+00:00,2012-01-11 01:06:40.010000+00:00,Group 2,Resource03,2011-11-16 01:06:40.010000+00:00,task-47493,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-22 09:54:27.929000+00:00 +Internet,RIGHT_case-10492,2012-01-11 01:06:40+00:00,General,2011-11-22 10:25:17.026000+00:00,2012-01-11 01:06:40.010000+00:00,Group 2,Resource03,2011-11-16 01:06:40.010000+00:00,task-47494,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-22 09:55:54.193000+00:00 +Internet,RIGHT_case-10497,2012-01-12 01:06:40+00:00,General,2011-12-13 07:56:25.045000+00:00,2012-01-12 01:06:40.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47273,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 14:16:05.061000+00:00 +Internet,RIGHT_case-10497,2012-01-12 01:06:40+00:00,General,2011-12-13 07:56:25.045000+00:00,2012-01-12 01:06:40.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47277,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 14:17:48.146000+00:00 +Internet,RIGHT_case-10497,2012-01-12 01:06:40+00:00,General,2011-12-13 07:56:25.045000+00:00,2012-01-12 01:06:40.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47279,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 14:18:48.561000+00:00 +Internet,RIGHT_case-10498,2012-01-12 00:00:00+00:00,General,2011-12-23 15:10:40.223000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47300,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 14:41:39.728000+00:00 +Internet,RIGHT_case-10498,2012-01-12 00:00:00+00:00,General,2011-12-23 15:10:40.223000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47303,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 14:42:12.895000+00:00 +Internet,RIGHT_case-10498,2012-01-12 00:00:00+00:00,General,2011-12-23 15:10:40.223000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47305,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 15:01:23.990000+00:00 +Internet,RIGHT_case-10499,2012-01-12 00:00:00+00:00,General,2011-12-23 15:35:14.426000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47323,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 15:22:42.192000+00:00 +Internet,RIGHT_case-10499,2012-01-12 00:00:00+00:00,General,2011-12-23 15:35:14.426000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47326,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 15:23:20.869000+00:00 +Internet,RIGHT_case-10499,2012-01-12 00:00:00+00:00,General,2011-12-23 15:35:14.426000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47327,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 15:24:52.767000+00:00 +Internet,RIGHT_case-10502,2012-01-12 00:00:00+00:00,General,2012-01-16 15:09:57.947000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-49959,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-12-15 11:26:04.272000+00:00 +Internet,RIGHT_case-10502,2012-01-12 00:00:00+00:00,General,2012-01-16 15:09:57.947000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-49962,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-12-15 11:27:17.646000+00:00 +Internet,RIGHT_case-10502,2012-01-12 00:00:00+00:00,General,2012-01-16 15:09:57.947000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-49963,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-12-15 11:30:06.832000+00:00 +Internet,RIGHT_case-10509,2012-01-04 01:06:40+00:00,General,2011-11-30 16:08:40.943000+00:00,2012-01-04 01:06:40.010000+00:00,Group 5,Resource05,2011-11-09 01:06:40.010000+00:00,task-48166,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-11-28 09:51:59.079000+00:00 +Internet,RIGHT_case-10509,2012-01-04 01:06:40+00:00,General,2011-11-30 16:08:40.943000+00:00,2012-01-04 01:06:40.010000+00:00,Group 5,Resource05,2011-11-09 01:06:40.010000+00:00,task-48170,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-11-28 09:52:48.615000+00:00 +Internet,RIGHT_case-10509,2012-01-04 01:06:40+00:00,General,2011-11-30 16:08:40.943000+00:00,2012-01-04 01:06:40.010000+00:00,Group 5,Resource05,2011-11-09 01:06:40.010000+00:00,task-48168,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-11-28 09:53:34.153000+00:00 +Internet,RIGHT_case-10511,2011-12-28 00:00:00+00:00,General,2011-12-07 09:39:48.523000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 00:00:00.010000+00:00,task-47009,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-17 15:11:23.105000+00:00 +Internet,RIGHT_case-10511,2011-12-28 00:00:00+00:00,General,2011-12-07 09:39:48.523000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 00:00:00.010000+00:00,task-47012,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-17 15:12:03.851000+00:00 +Internet,RIGHT_case-10511,2011-12-28 00:00:00+00:00,General,2011-12-07 09:39:48.523000+00:00,2011-12-28 00:00:00.010000+00:00,Group 8,Resource11,2011-11-02 00:00:00.010000+00:00,task-47014,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-17 15:16:57.113000+00:00 +Internet,RIGHT_case-10512,2012-02-15 00:00:00+00:00,General,2012-01-19 14:41:04.746000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-48712,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-11-30 21:02:49.223000+00:00 +Internet,RIGHT_case-10512,2012-02-15 00:00:00+00:00,General,2012-01-19 14:41:04.746000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-48715,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-11-30 21:04:57.092000+00:00 +Internet,RIGHT_case-10512,2012-02-15 00:00:00+00:00,General,2012-01-19 14:41:04.746000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource13,2011-11-17 01:06:40.010000+00:00,task-48716,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-11-30 21:05:48.871000+00:00 +Internet,RIGHT_case-10514,2012-01-12 00:00:00+00:00,General,2012-01-18 11:59:00.881000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource09,2011-11-17 01:06:40.010000+00:00,task-50640,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-22 12:45:02.538000+00:00 +Internet,RIGHT_case-10514,2012-01-12 00:00:00+00:00,General,2012-01-18 11:59:00.881000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource09,2011-11-17 01:06:40.010000+00:00,task-50644,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-22 12:46:51.746000+00:00 +Internet,RIGHT_case-10514,2012-01-12 00:00:00+00:00,General,2012-01-18 11:59:00.881000+00:00,2012-01-12 00:00:00.010000+00:00,Group 5,Resource09,2011-11-17 01:06:40.010000+00:00,task-50643,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-22 12:47:21.763000+00:00 +Internet,RIGHT_case-10517,2012-01-12 00:00:00+00:00,General,2011-12-23 10:01:29.356000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47941,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-11-24 15:28:49.749000+00:00 +Internet,RIGHT_case-10517,2012-01-12 00:00:00+00:00,General,2011-12-23 10:01:29.356000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47944,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-11-24 15:29:25.785000+00:00 +Internet,RIGHT_case-10517,2012-01-12 00:00:00+00:00,General,2011-12-23 10:01:29.356000+00:00,2012-01-12 00:00:00.010000+00:00,Group 8,Resource11,2011-11-17 01:06:40.010000+00:00,task-47945,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-11-24 15:30:19.049000+00:00 +Internet,RIGHT_case-10526,2012-01-13 00:00:00+00:00,General,2011-12-23 11:25:49.557000+00:00,2012-01-13 00:00:00.010000+00:00,Group 8,Resource11,2011-11-18 01:06:40.010000+00:00,task-47916,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-11-24 15:17:45.367000+00:00 +Internet,RIGHT_case-10526,2012-01-13 00:00:00+00:00,General,2011-12-23 11:25:49.557000+00:00,2012-01-13 00:00:00.010000+00:00,Group 8,Resource11,2011-11-18 01:06:40.010000+00:00,task-47920,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-11-24 15:18:29.633000+00:00 +Internet,RIGHT_case-10526,2012-01-13 00:00:00+00:00,General,2011-12-23 11:25:49.557000+00:00,2012-01-13 00:00:00.010000+00:00,Group 8,Resource11,2011-11-18 01:06:40.010000+00:00,task-47918,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-11-24 15:18:46.116000+00:00 +Internet,RIGHT_case-10541,2012-01-16 01:06:40+00:00,General,2011-11-25 10:01:30.375000+00:00,2012-01-16 01:06:40.010000+00:00,Group 5,Resource08,2011-11-21 01:06:40.010000+00:00,task-47802,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-11-24 11:46:52.160000+00:00 +Internet,RIGHT_case-10541,2012-01-16 01:06:40+00:00,General,2011-11-25 10:01:30.375000+00:00,2012-01-16 01:06:40.010000+00:00,Group 5,Resource08,2011-11-21 01:06:40.010000+00:00,task-47808,T05 Print and send confirmation of receipt,complete,Group 2,Resource08,2011-11-24 11:48:40.018000+00:00 +Internet,RIGHT_case-10541,2012-01-16 01:06:40+00:00,General,2011-11-25 10:01:30.375000+00:00,2012-01-16 01:06:40.010000+00:00,Group 5,Resource08,2011-11-21 01:06:40.010000+00:00,task-47810,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-11-24 12:10:33.205000+00:00 +Internet,RIGHT_case-10542,2012-02-27 00:00:00+00:00,General,,2012-02-27 00:00:00.010000+00:00,Group 5,Resource02,2011-11-21 01:06:40.010000+00:00,task-52768,T02 Check confirmation of receipt,complete,Group 4,Resource02,2012-01-17 11:24:50.099000+00:00 +Internet,RIGHT_case-10542,2012-02-27 00:00:00+00:00,General,,2012-02-27 00:00:00.010000+00:00,Group 5,Resource02,2011-11-21 01:06:40.010000+00:00,task-52771,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2012-01-17 11:26:47.870000+00:00 +Internet,RIGHT_case-10546,2011-12-28 00:00:00+00:00,General,2011-12-22 00:00:00.010000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource08,2011-11-02 01:06:40.010000+00:00,task-47922,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-11-24 15:20:34.623000+00:00 +Internet,RIGHT_case-10546,2011-12-28 00:00:00+00:00,General,2011-12-22 00:00:00.010000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource08,2011-11-02 01:06:40.010000+00:00,task-47934,T05 Print and send confirmation of receipt,complete,Group 2,Resource08,2011-11-24 15:22:56.138000+00:00 +Internet,RIGHT_case-10546,2011-12-28 00:00:00+00:00,General,2011-12-22 00:00:00.010000+00:00,2011-12-28 00:00:00.010000+00:00,Group 5,Resource08,2011-11-02 01:06:40.010000+00:00,task-47938,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-11-28 10:22:58.669000+00:00 +Internet,RIGHT_case-10550,2012-01-16 01:06:40+00:00,General,2011-11-25 09:08:53.865000+00:00,2012-01-16 01:06:40.010000+00:00,Group 2,Resource20,2011-11-21 01:06:40.010000+00:00,task-47567,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-11-22 13:49:20.353000+00:00 +Internet,RIGHT_case-10550,2012-01-16 01:06:40+00:00,General,2011-11-25 09:08:53.865000+00:00,2012-01-16 01:06:40.010000+00:00,Group 2,Resource20,2011-11-21 01:06:40.010000+00:00,task-47572,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-11-22 13:50:08.478000+00:00 +Internet,RIGHT_case-10550,2012-01-16 01:06:40+00:00,General,2011-11-25 09:08:53.865000+00:00,2012-01-16 01:06:40.010000+00:00,Group 2,Resource20,2011-11-21 01:06:40.010000+00:00,task-47573,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-11-22 13:50:57.789000+00:00 +Internet,RIGHT_case-10551,2012-01-16 00:00:00+00:00,General,,2012-01-16 00:00:00.010000+00:00,Group 5,Resource09,2011-11-21 01:06:40.010000+00:00,task-51939,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2012-01-11 12:01:55.141000+00:00 +Internet,RIGHT_case-10551,2012-01-16 00:00:00+00:00,General,,2012-01-16 00:00:00.010000+00:00,Group 5,Resource09,2011-11-21 01:06:40.010000+00:00,task-51937,T02 Check confirmation of receipt,complete,Group 4,Resource09,2012-01-11 12:02:51.856000+00:00 +Internet,RIGHT_case-10551,2012-01-16 00:00:00+00:00,General,,2012-01-16 00:00:00.010000+00:00,Group 5,Resource09,2011-11-21 01:06:40.010000+00:00,task-51942,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2012-01-11 12:05:14.491000+00:00 +Internet,RIGHT_case-10555,2012-01-16 00:00:00+00:00,General,2011-12-23 12:04:26.129000+00:00,2012-01-16 00:00:00.010000+00:00,Group 8,Resource11,2011-11-21 01:06:40.010000+00:00,task-47892,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-11-24 14:49:31.532000+00:00 +Internet,RIGHT_case-10555,2012-01-16 00:00:00+00:00,General,2011-12-23 12:04:26.129000+00:00,2012-01-16 00:00:00.010000+00:00,Group 8,Resource11,2011-11-21 01:06:40.010000+00:00,task-47896,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-11-24 14:50:42.141000+00:00 +Internet,RIGHT_case-10555,2012-01-16 00:00:00+00:00,General,2011-12-23 12:04:26.129000+00:00,2012-01-16 00:00:00.010000+00:00,Group 8,Resource11,2011-11-21 01:06:40.010000+00:00,task-47898,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-11-24 14:51:29.552000+00:00 +Internet,RIGHT_case-10564,2012-01-17 00:00:00+00:00,General,,2012-01-17 00:00:00.010000+00:00,Group 5,Resource09,2011-11-22 01:06:40.010000+00:00,task-49478,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-08 14:16:06.431000+00:00 +Internet,RIGHT_case-10564,2012-01-17 00:00:00+00:00,General,,2012-01-17 00:00:00.010000+00:00,Group 5,Resource09,2011-11-22 01:06:40.010000+00:00,task-49481,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-08 14:17:07.988000+00:00 +Internet,RIGHT_case-10564,2012-01-17 00:00:00+00:00,General,,2012-01-17 00:00:00.010000+00:00,Group 5,Resource09,2011-11-22 01:06:40.010000+00:00,task-49482,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-08 14:40:56.319000+00:00 +Internet,RIGHT_case-10575,2012-01-18 00:00:00+00:00,General,2012-01-05 14:32:52.039000+00:00,2012-01-18 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-48736,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-01 08:34:01.593000+00:00 +Internet,RIGHT_case-10575,2012-01-18 00:00:00+00:00,General,2012-01-05 14:32:52.039000+00:00,2012-01-18 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-48740,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-01 08:36:40.264000+00:00 +Internet,RIGHT_case-10575,2012-01-18 00:00:00+00:00,General,2012-01-05 14:32:52.039000+00:00,2012-01-18 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-48741,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-01 08:38:10.344000+00:00 +Internet,RIGHT_case-10576,2012-02-09 00:00:00+00:00,General,2012-01-12 14:47:41.335000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-47871,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-11-24 14:31:48.853000+00:00 +Internet,RIGHT_case-10576,2012-02-09 00:00:00+00:00,General,2012-01-12 14:47:41.335000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-47876,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-11-24 14:32:23.408000+00:00 +Internet,RIGHT_case-10576,2012-02-09 00:00:00+00:00,General,2012-01-12 14:47:41.335000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-11-23 01:06:40.010000+00:00,task-47873,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-11-24 14:32:46.077000+00:00 +Internet,RIGHT_case-10583,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource09,2011-11-23 01:06:40.010000+00:00,task-50035,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-15 14:45:08.364000+00:00 +Internet,RIGHT_case-10583,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource09,2011-11-23 01:06:40.010000+00:00,task-50038,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-15 14:46:19.010000+00:00 +Internet,RIGHT_case-10583,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource09,2011-11-23 01:06:40.010000+00:00,task-50039,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-15 14:47:46.628000+00:00 +Internet,RIGHT_case-10592,2012-01-19 01:06:40+00:00,General,2011-12-12 15:18:40.732000+00:00,2012-01-19 01:06:40.010000+00:00,Group 5,Resource12,2011-11-24 01:06:40.010000+00:00,task-48426,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-11-29 11:46:54.371000+00:00 +Internet,RIGHT_case-10592,2012-01-19 01:06:40+00:00,General,2011-12-12 15:18:40.732000+00:00,2012-01-19 01:06:40.010000+00:00,Group 5,Resource12,2011-11-24 01:06:40.010000+00:00,task-48445,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-11-29 12:09:11.004000+00:00 +Internet,RIGHT_case-10592,2012-01-19 01:06:40+00:00,General,2011-12-12 15:18:40.732000+00:00,2012-01-19 01:06:40.010000+00:00,Group 5,Resource12,2011-11-24 01:06:40.010000+00:00,task-48429,T05 Print and send confirmation of receipt,complete,Group 2,Resource27,2011-11-30 12:02:36.695000+00:00 +Internet,RIGHT_case-10593,2012-01-19 00:00:00+00:00,General,2012-01-17 14:33:56.518000+00:00,2012-01-19 00:00:00.010000+00:00,Group 5,Resource04,2011-11-24 01:06:40.010000+00:00,task-48607,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-11-30 13:54:56.948000+00:00 +Internet,RIGHT_case-10593,2012-01-19 00:00:00+00:00,General,2012-01-17 14:33:56.518000+00:00,2012-01-19 00:00:00.010000+00:00,Group 5,Resource04,2011-11-24 01:06:40.010000+00:00,task-48611,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-11-30 13:55:33.200000+00:00 +Internet,RIGHT_case-10593,2012-01-19 00:00:00+00:00,General,2012-01-17 14:33:56.518000+00:00,2012-01-19 00:00:00.010000+00:00,Group 5,Resource04,2011-11-24 01:06:40.010000+00:00,task-48613,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-11-30 13:56:09.588000+00:00 +Internet,RIGHT_case-10598,2012-01-20 01:06:40+00:00,General,2011-11-30 15:52:53.757000+00:00,2012-01-20 01:06:40.010000+00:00,Group 2,Resource20,2011-11-24 01:06:40.010000+00:00,task-47965,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-11-24 16:30:32.541000+00:00 +Internet,RIGHT_case-10598,2012-01-20 01:06:40+00:00,General,2011-11-30 15:52:53.757000+00:00,2012-01-20 01:06:40.010000+00:00,Group 2,Resource20,2011-11-24 01:06:40.010000+00:00,task-47968,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-11-24 16:31:26.522000+00:00 +Internet,RIGHT_case-10598,2012-01-20 01:06:40+00:00,General,2011-11-30 15:52:53.757000+00:00,2012-01-20 01:06:40.010000+00:00,Group 2,Resource20,2011-11-24 01:06:40.010000+00:00,task-47969,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-11-24 16:32:30.511000+00:00 +Internet,RIGHT_case-10600,2012-01-19 00:00:00+00:00,General,2012-01-12 14:34:01.420000+00:00,2012-01-19 00:00:00.010000+00:00,Group 8,Resource11,2011-11-24 01:06:40.010000+00:00,task-50412,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-12-21 10:46:42.284000+00:00 +Internet,RIGHT_case-10600,2012-01-19 00:00:00+00:00,General,2012-01-12 14:34:01.420000+00:00,2012-01-19 00:00:00.010000+00:00,Group 8,Resource11,2011-11-24 01:06:40.010000+00:00,task-50438,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-12-21 10:48:11.870000+00:00 +Internet,RIGHT_case-10600,2012-01-19 00:00:00+00:00,General,2012-01-12 14:34:01.420000+00:00,2012-01-19 00:00:00.010000+00:00,Group 8,Resource11,2011-11-24 01:06:40.010000+00:00,task-50439,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-12-21 10:50:36.805000+00:00 +Internet,RIGHT_case-10621,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource14,2011-11-28 01:06:40.010000+00:00,task-53320,T02 Check confirmation of receipt,complete,Group 4,Resource21,2012-01-20 13:03:22.343000+00:00 +Internet,RIGHT_case-10621,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource14,2011-11-28 01:06:40.010000+00:00,task-53323,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2012-01-20 13:05:14.580000+00:00 +Internet,RIGHT_case-10621,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource14,2011-11-28 01:06:40.010000+00:00,task-53324,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2012-01-20 13:06:25.475000+00:00 +Internet,RIGHT_case-10623,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-28 01:06:40.010000+00:00,task-48834,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-12-02 09:53:30.525000+00:00 +Internet,RIGHT_case-10623,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-28 01:06:40.010000+00:00,task-48840,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-12-02 09:55:02.061000+00:00 +Internet,RIGHT_case-10623,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-11-28 01:06:40.010000+00:00,task-48841,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-12-02 09:59:01.611000+00:00 +Internet,RIGHT_case-10624,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource04,2011-11-28 01:06:40.010000+00:00,task-48764,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-12-01 10:45:28.019000+00:00 +Internet,RIGHT_case-10624,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource04,2011-11-28 01:06:40.010000+00:00,task-48767,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-12-01 10:46:04.524000+00:00 +Internet,RIGHT_case-10624,2012-01-23 00:00:00+00:00,General,,2012-01-23 00:00:00.010000+00:00,Group 5,Resource04,2011-11-28 01:06:40.010000+00:00,task-48782,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-12-01 12:53:18.284000+00:00 +Internet,RIGHT_case-10626,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-52413,T02 Check confirmation of receipt,complete,Group 4,Resource02,2012-01-16 10:27:20.523000+00:00 +Internet,RIGHT_case-10626,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-52437,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2012-01-16 10:37:59.698000+00:00 +Internet,RIGHT_case-10626,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource02,2011-11-15 01:06:40.010000+00:00,task-52438,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2012-01-16 10:50:04.279000+00:00 +Internet,RIGHT_case-10636,2012-01-12 00:00:00+00:00,General,2012-01-19 15:07:29.638000+00:00,2012-01-12 00:00:00.010000+00:00,Group 2,Resource21,2011-11-28 01:06:40.010000+00:00,task-53056,T02 Check confirmation of receipt,complete,Group 4,Resource21,2012-01-18 10:05:30.029000+00:00 +Internet,RIGHT_case-10636,2012-01-12 00:00:00+00:00,General,2012-01-19 15:07:29.638000+00:00,2012-01-12 00:00:00.010000+00:00,Group 2,Resource21,2011-11-28 01:06:40.010000+00:00,task-53059,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2012-01-18 10:06:51.311000+00:00 +Internet,RIGHT_case-10636,2012-01-12 00:00:00+00:00,General,2012-01-19 15:07:29.638000+00:00,2012-01-12 00:00:00.010000+00:00,Group 2,Resource21,2011-11-28 01:06:40.010000+00:00,task-53060,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2012-01-18 10:08:01.844000+00:00 +Internet,RIGHT_case-10646,2012-01-24 01:06:40+00:00,General,2011-12-09 15:47:19.142000+00:00,2012-01-24 01:06:40.010000+00:00,Group 5,Resource06,2011-11-29 01:06:40.010000+00:00,task-48887,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-12-02 15:07:47.141000+00:00 +Internet,RIGHT_case-10646,2012-01-24 01:06:40+00:00,General,2011-12-09 15:47:19.142000+00:00,2012-01-24 01:06:40.010000+00:00,Group 5,Resource06,2011-11-29 01:06:40.010000+00:00,task-48890,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-12-02 15:08:24.428000+00:00 +Internet,RIGHT_case-10646,2012-01-24 01:06:40+00:00,General,2011-12-09 15:47:19.142000+00:00,2012-01-24 01:06:40.010000+00:00,Group 5,Resource06,2011-11-29 01:06:40.010000+00:00,task-48891,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-12-02 15:09:23.531000+00:00 +Internet,RIGHT_case-10647,2012-01-24 00:00:00+00:00,General,2012-01-17 11:03:50.415000+00:00,2012-01-24 00:00:00.010000+00:00,Group 8,Resource11,2011-11-29 01:06:40.010000+00:00,task-49180,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-12-06 15:02:24.505000+00:00 +Internet,RIGHT_case-10647,2012-01-24 00:00:00+00:00,General,2012-01-17 11:03:50.415000+00:00,2012-01-24 00:00:00.010000+00:00,Group 8,Resource11,2011-11-29 01:06:40.010000+00:00,task-49183,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-12-06 15:02:57.205000+00:00 +Internet,RIGHT_case-10647,2012-01-24 00:00:00+00:00,General,2012-01-17 11:03:50.415000+00:00,2012-01-24 00:00:00.010000+00:00,Group 8,Resource11,2011-11-29 01:06:40.010000+00:00,task-49184,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-12-06 15:04:39.219000+00:00 +Internet,RIGHT_case-10661,2012-01-25 00:00:00+00:00,General,2012-01-20 16:08:56.917000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource06,2011-11-30 01:06:40.010000+00:00,task-49770,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-12-13 13:06:38.157000+00:00 +Internet,RIGHT_case-10661,2012-01-25 00:00:00+00:00,General,2012-01-20 16:08:56.917000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource06,2011-11-30 01:06:40.010000+00:00,task-49787,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-12-13 13:54:35.391000+00:00 +Internet,RIGHT_case-10661,2012-01-25 00:00:00+00:00,General,2012-01-20 16:08:56.917000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource06,2011-11-30 01:06:40.010000+00:00,task-49789,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-12-13 13:59:02.065000+00:00 +Desk,RIGHT_case-10662,2012-01-20 01:06:40+00:00,General,2011-12-09 16:10:54.408000+00:00,2012-01-20 01:06:40.010000+00:00,Group 5,Resource06,2011-11-25 01:06:40.010000+00:00,task-48682,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-30 16:04:34.445000+00:00 +Desk,RIGHT_case-10662,2012-01-20 01:06:40+00:00,General,2011-12-09 16:10:54.408000+00:00,2012-01-20 01:06:40.010000+00:00,Group 5,Resource06,2011-11-25 01:06:40.010000+00:00,task-48686,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-30 16:05:37.734000+00:00 +Desk,RIGHT_case-10662,2012-01-20 01:06:40+00:00,General,2011-12-09 16:10:54.408000+00:00,2012-01-20 01:06:40.010000+00:00,Group 5,Resource06,2011-11-25 01:06:40.010000+00:00,task-48689,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-30 16:06:44.087000+00:00 +Internet,RIGHT_case-10663,2012-01-25 00:00:00+00:00,General,2012-01-18 15:38:08.002000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource04,2011-11-30 01:06:40.010000+00:00,task-49557,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-12-09 12:49:50.916000+00:00 +Internet,RIGHT_case-10663,2012-01-25 00:00:00+00:00,General,2012-01-18 15:38:08.002000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource04,2011-11-30 01:06:40.010000+00:00,task-49560,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-12-09 12:50:39.797000+00:00 +Internet,RIGHT_case-10663,2012-01-25 00:00:00+00:00,General,2012-01-18 15:38:08.002000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource04,2011-11-30 01:06:40.010000+00:00,task-49561,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-12-09 12:51:22.060000+00:00 +Internet,RIGHT_case-10669,2012-01-25 00:00:00+00:00,General,2012-01-05 14:04:24.457000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-49208,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-12-06 16:12:17.249000+00:00 +Internet,RIGHT_case-10669,2012-01-25 00:00:00+00:00,General,2012-01-05 14:04:24.457000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-49211,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-12-06 16:12:50.221000+00:00 +Internet,RIGHT_case-10669,2012-01-25 00:00:00+00:00,General,2012-01-05 14:04:24.457000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-49213,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-12-06 16:13:33.793000+00:00 +Internet,RIGHT_case-10670,2012-01-25 00:00:00+00:00,General,2012-01-05 14:43:14.280000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-49366,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-12-07 14:46:27.071000+00:00 +Internet,RIGHT_case-10670,2012-01-25 00:00:00+00:00,General,2012-01-05 14:43:14.280000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-49369,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-12-07 14:47:02.003000+00:00 +Internet,RIGHT_case-10670,2012-01-25 00:00:00+00:00,General,2012-01-05 14:43:14.280000+00:00,2012-01-25 00:00:00.010000+00:00,Group 8,Resource11,2011-11-30 01:06:40.010000+00:00,task-49370,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-12-07 14:47:44.738000+00:00 +Internet,RIGHT_case-10671,2012-01-25 00:00:00+00:00,General,2012-01-20 15:53:31.556000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource05,2011-11-30 01:06:40.010000+00:00,task-49983,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-12-15 12:18:31.532000+00:00 +Internet,RIGHT_case-10671,2012-01-25 00:00:00+00:00,General,2012-01-20 15:53:31.556000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource05,2011-11-30 01:06:40.010000+00:00,task-49986,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-12-15 12:20:03.012000+00:00 +Internet,RIGHT_case-10671,2012-01-25 00:00:00+00:00,General,2012-01-20 15:53:31.556000+00:00,2012-01-25 00:00:00.010000+00:00,Group 5,Resource05,2011-11-30 01:06:40.010000+00:00,task-49988,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-12-15 12:21:41.425000+00:00 +Internet,RIGHT_case-10675,2012-01-25 00:00:00+00:00,General,,2012-01-25 00:00:00.010000+00:00,Group 5,Resource09,2011-11-30 01:06:40.010000+00:00,task-50761,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-23 14:39:08.074000+00:00 +Internet,RIGHT_case-10688,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 5,Resource04,2011-12-01 01:06:40.010000+00:00,task-49622,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-12-09 16:37:57.329000+00:00 +Internet,RIGHT_case-10688,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 5,Resource04,2011-12-01 01:06:40.010000+00:00,task-49625,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-12-09 16:38:31.683000+00:00 +Internet,RIGHT_case-10688,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 5,Resource04,2011-12-01 01:06:40.010000+00:00,task-50601,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-12-22 11:11:38.505000+00:00 +e-mail,RIGHT_case-10693,2011-12-24 01:06:40+00:00,General,2011-12-06 14:41:38.980000+00:00,2011-12-24 01:06:40.010000+00:00,Group 2,Resource03,2011-10-29 01:06:40.020000+00:00,task-49164,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-12-06 14:40:35.378000+00:00 +e-mail,RIGHT_case-10693,2011-12-24 01:06:40+00:00,General,2011-12-06 14:41:38.980000+00:00,2011-12-24 01:06:40.010000+00:00,Group 2,Resource03,2011-10-29 01:06:40.020000+00:00,task-49167,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-12-06 14:41:07.822000+00:00 +Internet,RIGHT_case-10709,2012-01-27 00:00:00+00:00,General,,2012-01-27 00:00:00.010000+00:00,Group 5,Resource09,2011-12-02 01:06:40.010000+00:00,task-51735,T02 Check confirmation of receipt,complete,Group 4,Resource09,2012-01-10 13:15:26.688000+00:00 +Internet,RIGHT_case-10709,2012-01-27 00:00:00+00:00,General,,2012-01-27 00:00:00.010000+00:00,Group 5,Resource09,2011-12-02 01:06:40.010000+00:00,task-51762,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2012-01-10 14:09:25.832000+00:00 +Internet,RIGHT_case-10709,2012-01-27 00:00:00+00:00,General,,2012-01-27 00:00:00.010000+00:00,Group 5,Resource09,2011-12-02 01:06:40.010000+00:00,task-51776,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2012-01-10 14:12:14.059000+00:00 +Internet,RIGHT_case-10735,2012-01-30 00:00:00+00:00,General,2012-01-05 14:51:53.398000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49311,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-07 11:27:59.544000+00:00 +Internet,RIGHT_case-10735,2012-01-30 00:00:00+00:00,General,2012-01-05 14:51:53.398000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49314,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-07 11:29:01.432000+00:00 +Internet,RIGHT_case-10735,2012-01-30 00:00:00+00:00,General,2012-01-05 14:51:53.398000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49315,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-07 11:30:00.766000+00:00 +Internet,RIGHT_case-10749,2012-01-30 00:00:00+00:00,General,2012-01-17 11:40:15.756000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49129,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-06 13:37:47.452000+00:00 +Internet,RIGHT_case-10749,2012-01-30 00:00:00+00:00,General,2012-01-17 11:40:15.756000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49133,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-06 13:38:30.187000+00:00 +Internet,RIGHT_case-10749,2012-01-30 00:00:00+00:00,General,2012-01-17 11:40:15.756000+00:00,2012-01-30 00:00:00.010000+00:00,Group 8,Resource11,2011-12-05 01:06:40.010000+00:00,task-49135,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-06 13:39:25.089000+00:00 +Internet,RIGHT_case-10757,2012-01-31 00:00:00+00:00,General,2012-01-17 15:05:03.138000+00:00,2012-01-31 00:00:00.010000+00:00,Group 5,Resource06,2011-12-06 01:06:40.010000+00:00,task-49762,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-12-13 15:18:51.703000+00:00 +Internet,RIGHT_case-10757,2012-01-31 00:00:00+00:00,General,2012-01-17 15:05:03.138000+00:00,2012-01-31 00:00:00.010000+00:00,Group 5,Resource06,2011-12-06 01:06:40.010000+00:00,task-49806,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-12-13 15:20:26.891000+00:00 +Internet,RIGHT_case-10757,2012-01-31 00:00:00+00:00,General,2012-01-17 15:05:03.138000+00:00,2012-01-31 00:00:00.010000+00:00,Group 5,Resource06,2011-12-06 01:06:40.010000+00:00,task-49812,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-12-13 15:29:29.822000+00:00 +Internet,RIGHT_case-10763,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 7,Resource35,2011-12-05 00:00:00.010000+00:00,task-50087,T02 Check confirmation of receipt,complete,Group 4,Resource35,2011-12-17 16:17:26.955000+00:00 +Internet,RIGHT_case-10763,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 7,Resource35,2011-12-05 00:00:00.010000+00:00,task-50091,T10 Determine necessity to stop indication,complete,Group 1,Resource35,2011-12-17 16:19:13.622000+00:00 +Internet,RIGHT_case-10763,2012-01-30 00:00:00+00:00,General,,2012-01-30 00:00:00.010000+00:00,Group 7,Resource35,2011-12-05 00:00:00.010000+00:00,task-50090,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-12-19 11:34:23.055000+00:00 +Internet,RIGHT_case-10765,2012-01-31 01:06:40+00:00,General,,2012-01-31 01:06:40.010000+00:00,Group 5,Resource23,2011-12-06 01:06:40.010000+00:00,task-49672,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-12-12 14:32:01.716000+00:00 +Internet,RIGHT_case-10765,2012-01-31 01:06:40+00:00,General,,2012-01-31 01:06:40.010000+00:00,Group 5,Resource23,2011-12-06 01:06:40.010000+00:00,task-49675,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-12-12 14:33:38.186000+00:00 +Internet,RIGHT_case-10777,2012-02-01 00:00:00+00:00,General,2012-01-05 15:00:31.243000+00:00,2012-02-01 00:00:00.010000+00:00,Group 8,Resource11,2011-12-07 01:06:40.010000+00:00,task-49525,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-09 08:51:52.760000+00:00 +Internet,RIGHT_case-10777,2012-02-01 00:00:00+00:00,General,2012-01-05 15:00:31.243000+00:00,2012-02-01 00:00:00.010000+00:00,Group 8,Resource11,2011-12-07 01:06:40.010000+00:00,task-49528,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-09 08:52:41.023000+00:00 +Internet,RIGHT_case-10777,2012-02-01 00:00:00+00:00,General,2012-01-05 15:00:31.243000+00:00,2012-02-01 00:00:00.010000+00:00,Group 8,Resource11,2011-12-07 01:06:40.010000+00:00,task-49529,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-09 08:53:29.259000+00:00 +Internet,RIGHT_case-10779,2011-12-26 00:00:00+00:00,General,,2011-12-26 00:00:00.010000+00:00,Group 5,Resource09,2011-10-31 01:06:40.010000+00:00,task-49403,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-07 15:58:29.727000+00:00 +Internet,RIGHT_case-10779,2011-12-26 00:00:00+00:00,General,,2011-12-26 00:00:00.010000+00:00,Group 5,Resource09,2011-10-31 01:06:40.010000+00:00,task-49405,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-07 15:59:40.804000+00:00 +Internet,RIGHT_case-10779,2011-12-26 00:00:00+00:00,General,,2011-12-26 00:00:00.010000+00:00,Group 5,Resource09,2011-10-31 01:06:40.010000+00:00,task-49408,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-07 16:00:46.464000+00:00 +Internet,RIGHT_case-10788,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource14,2011-12-08 01:06:40.010000+00:00,task-52177,T02 Check confirmation of receipt,complete,Group 4,Resource14,2012-01-12 15:13:56.588000+00:00 +Internet,RIGHT_case-10788,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource14,2011-12-08 01:06:40.010000+00:00,task-52180,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2012-01-12 15:16:01.964000+00:00 +Internet,RIGHT_case-10788,2012-02-02 00:00:00+00:00,General,,2012-02-02 00:00:00.010000+00:00,Group 5,Resource14,2011-12-08 01:06:40.010000+00:00,task-52181,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2012-01-12 15:18:11.016000+00:00 +Internet,RIGHT_case-10799,2012-02-02 00:00:00+00:00,General,2012-01-05 15:13:32.700000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-50488,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-21 12:36:33.658000+00:00 +Internet,RIGHT_case-10799,2012-02-02 00:00:00+00:00,General,2012-01-05 15:13:32.700000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-50493,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-21 13:15:09.991000+00:00 +Internet,RIGHT_case-10799,2012-02-02 00:00:00+00:00,General,2012-01-05 15:13:32.700000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-50495,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-21 13:22:30.403000+00:00 +Internet,RIGHT_case-10800,2012-02-02 00:00:00+00:00,General,2012-01-10 14:25:59.612000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-50521,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-21 14:24:27.676000+00:00 +Internet,RIGHT_case-10800,2012-02-02 00:00:00+00:00,General,2012-01-10 14:25:59.612000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-50524,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-21 14:25:24.973000+00:00 +Internet,RIGHT_case-10800,2012-02-02 00:00:00+00:00,General,2012-01-10 14:25:59.612000+00:00,2012-02-02 00:00:00.010000+00:00,Group 8,Resource11,2011-12-08 01:06:40.010000+00:00,task-50525,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-21 14:26:26.932000+00:00 +Internet,RIGHT_case-10810,2012-02-03 00:00:00+00:00,General,2012-01-17 15:16:21.542000+00:00,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-12-09 01:06:40.010000+00:00,task-52201,T02 Check confirmation of receipt,complete,Group 4,Resource06,2012-01-12 16:07:45.635000+00:00 +Internet,RIGHT_case-10810,2012-02-03 00:00:00+00:00,General,2012-01-17 15:16:21.542000+00:00,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-12-09 01:06:40.010000+00:00,task-52218,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2012-01-12 16:09:31.229000+00:00 +Internet,RIGHT_case-10810,2012-02-03 00:00:00+00:00,General,2012-01-17 15:16:21.542000+00:00,2012-02-03 00:00:00.010000+00:00,Group 5,Resource06,2011-12-09 01:06:40.010000+00:00,task-52219,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2012-01-12 16:11:11.427000+00:00 +Internet,RIGHT_case-10814,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource12,2011-12-09 01:06:40.010000+00:00,task-50875,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-12-28 14:20:33.399000+00:00 +Internet,RIGHT_case-10814,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource12,2011-12-09 01:06:40.010000+00:00,task-50880,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-12-28 14:45:48.231000+00:00 +Internet,RIGHT_case-10814,2012-02-03 00:00:00+00:00,General,,2012-02-03 00:00:00.010000+00:00,Group 5,Resource12,2011-12-09 01:06:40.010000+00:00,task-50878,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-12-30 10:01:44.557000+00:00 +Internet,RIGHT_case-10838,2012-02-05 00:00:00+00:00,General,,2012-02-05 00:00:00.010000+00:00,Group 5,Resource04,2011-12-11 01:06:40.010000+00:00,task-51106,T02 Check confirmation of receipt,complete,Group 4,Resource04,2012-01-03 12:52:18.360000+00:00 +Internet,RIGHT_case-10838,2012-02-05 00:00:00+00:00,General,,2012-02-05 00:00:00.010000+00:00,Group 5,Resource04,2011-12-11 01:06:40.010000+00:00,task-51110,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2012-01-03 12:53:44.316000+00:00 +Internet,RIGHT_case-10838,2012-02-05 00:00:00+00:00,General,,2012-02-05 00:00:00.010000+00:00,Group 5,Resource04,2011-12-11 01:06:40.010000+00:00,task-51148,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2012-01-04 08:58:41.444000+00:00 +Internet,RIGHT_case-10853,2012-02-06 00:00:00+00:00,General,2012-01-17 15:26:34.656000+00:00,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51530,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 16:55:03.629000+00:00 +Internet,RIGHT_case-10853,2012-02-06 00:00:00+00:00,General,2012-01-17 15:26:34.656000+00:00,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51533,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 16:55:55.212000+00:00 +Internet,RIGHT_case-10853,2012-02-06 00:00:00+00:00,General,2012-01-17 15:26:34.656000+00:00,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51588,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 09:04:19.401000+00:00 +Internet,RIGHT_case-10854,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51534,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 16:58:14.608000+00:00 +Internet,RIGHT_case-10854,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51537,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 16:59:02.444000+00:00 +Internet,RIGHT_case-10854,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51592,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 09:11:58.715000+00:00 +Internet,RIGHT_case-10855,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51538,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 17:01:38.601000+00:00 +Internet,RIGHT_case-10855,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51541,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 17:02:44.551000+00:00 +Internet,RIGHT_case-10855,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51596,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 09:14:25.478000+00:00 +Internet,RIGHT_case-10856,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51542,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 17:06:35.887000+00:00 +Internet,RIGHT_case-10856,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51545,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 17:07:34.752000+00:00 +Internet,RIGHT_case-10856,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51601,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 09:57:58.055000+00:00 +Internet,RIGHT_case-10857,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource13,2011-12-12 01:06:40.010000+00:00,task-51232,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2012-01-04 19:53:52.494000+00:00 +Internet,RIGHT_case-10857,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource13,2011-12-12 01:06:40.010000+00:00,task-51234,T17 Check report Y to stop indication,complete,EMPTY,Resource13,2012-01-04 19:55:41.647000+00:00 +Internet,RIGHT_case-10857,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource13,2011-12-12 01:06:40.010000+00:00,task-51236,T20 Print report Y to stop indication,complete,Group 2,Resource13,2012-01-04 19:56:54.192000+00:00 +Internet,RIGHT_case-10857,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource13,2011-12-12 01:06:40.010000+00:00,task-51230,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 08:19:19.141000+00:00 +Internet,RIGHT_case-10857,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource13,2011-12-12 01:06:40.010000+00:00,task-51359,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 12:47:44.454000+00:00 +Internet,RIGHT_case-10858,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51546,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 17:09:34.549000+00:00 +Internet,RIGHT_case-10858,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51549,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 17:10:25.423000+00:00 +Internet,RIGHT_case-10858,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51605,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 10:00:18.393000+00:00 +Internet,RIGHT_case-10861,2012-02-07 00:00:00+00:00,General,,2012-02-07 00:00:00.010000+00:00,Group 2,Resource20,2011-12-13 01:06:40.010000+00:00,task-51554,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 17:15:31.581000+00:00 +Internet,RIGHT_case-10861,2012-02-07 00:00:00+00:00,General,,2012-02-07 00:00:00.010000+00:00,Group 2,Resource20,2011-12-13 01:06:40.010000+00:00,task-51557,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 17:16:21.170000+00:00 +Internet,RIGHT_case-10861,2012-02-07 00:00:00+00:00,General,,2012-02-07 00:00:00.010000+00:00,Group 2,Resource20,2011-12-13 01:06:40.010000+00:00,task-51614,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 10:14:27.715000+00:00 +Internet,RIGHT_case-10863,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51550,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 17:13:03.650000+00:00 +Internet,RIGHT_case-10863,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51553,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 17:13:47.123000+00:00 +Internet,RIGHT_case-10863,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 2,Resource20,2011-12-12 01:06:40.010000+00:00,task-51609,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 10:02:31.647000+00:00 +Internet,RIGHT_case-10864,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource14,2011-12-12 01:06:40.010000+00:00,task-50077,T02 Check confirmation of receipt,complete,Group 4,Resource14,2012-01-12 15:42:20.138000+00:00 +Internet,RIGHT_case-10864,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource14,2011-12-12 01:06:40.010000+00:00,task-52191,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2012-01-12 15:47:07.049000+00:00 +Internet,RIGHT_case-10864,2012-02-06 00:00:00+00:00,General,,2012-02-06 00:00:00.010000+00:00,Group 5,Resource14,2011-12-12 01:06:40.010000+00:00,task-52192,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2012-01-12 15:48:18.252000+00:00 +Internet,RIGHT_case-10890,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource18,2011-12-13 01:06:40.010000+00:00,task-51829,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2012-01-10 15:23:38.942000+00:00 +Internet,RIGHT_case-10890,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource18,2011-12-13 01:06:40.010000+00:00,task-51832,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2012-01-10 15:25:19.302000+00:00 +Internet,RIGHT_case-10890,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource18,2011-12-13 01:06:40.010000+00:00,task-51855,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2012-01-10 15:55:30.283000+00:00 +Internet,RIGHT_case-10892,2012-02-07 00:00:00+00:00,General,2012-01-12 14:17:12.049000+00:00,2012-02-07 00:00:00.010000+00:00,Group 8,Resource11,2011-12-13 01:06:40.010000+00:00,task-50385,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-21 08:42:49.661000+00:00 +Internet,RIGHT_case-10892,2012-02-07 00:00:00+00:00,General,2012-01-12 14:17:12.049000+00:00,2012-02-07 00:00:00.010000+00:00,Group 8,Resource11,2011-12-13 01:06:40.010000+00:00,task-50388,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-21 08:51:22.982000+00:00 +Internet,RIGHT_case-10892,2012-02-07 00:00:00+00:00,General,2012-01-12 14:17:12.049000+00:00,2012-02-07 00:00:00.010000+00:00,Group 8,Resource11,2011-12-13 01:06:40.010000+00:00,task-50389,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-21 08:53:08.141000+00:00 +Internet,RIGHT_case-10929,2012-02-01 00:00:00+00:00,General,2012-01-19 14:03:29.080000+00:00,2012-02-01 00:00:00.010000+00:00,Group 11,Resource28,2011-12-07 01:06:40.010000+00:00,task-50250,T02 Check confirmation of receipt,complete,EMPTY,Resource28,2011-12-19 15:37:28.906000+00:00 +Internet,RIGHT_case-10929,2012-02-01 00:00:00+00:00,General,2012-01-19 14:03:29.080000+00:00,2012-02-01 00:00:00.010000+00:00,Group 11,Resource28,2011-12-07 01:06:40.010000+00:00,task-50253,T10 Determine necessity to stop indication,complete,Group 1,Resource28,2011-12-19 15:39:29.045000+00:00 +Internet,RIGHT_case-10929,2012-02-01 00:00:00+00:00,General,2012-01-19 14:03:29.080000+00:00,2012-02-01 00:00:00.010000+00:00,Group 11,Resource28,2011-12-07 01:06:40.010000+00:00,task-52548,T05 Print and send confirmation of receipt,complete,Group 2,Resource28,2012-01-16 13:18:38.578000+00:00 +Internet,RIGHT_case-10946,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource05,2011-12-15 01:06:40.010000+00:00,task-51048,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-03 10:05:52.122000+00:00 +Internet,RIGHT_case-10946,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource05,2011-12-15 01:06:40.010000+00:00,task-51051,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-03 10:07:09.781000+00:00 +Internet,RIGHT_case-10946,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource05,2011-12-15 01:06:40.010000+00:00,task-51052,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-03 10:10:27.621000+00:00 +Internet,RIGHT_case-10948,2012-02-09 00:00:00+00:00,General,2012-01-12 14:08:04.148000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-12-15 01:06:40.010000+00:00,task-50416,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-21 10:25:05.167000+00:00 +Internet,RIGHT_case-10948,2012-02-09 00:00:00+00:00,General,2012-01-12 14:08:04.148000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-12-15 01:06:40.010000+00:00,task-50419,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-21 10:25:58.710000+00:00 +Internet,RIGHT_case-10948,2012-02-09 00:00:00+00:00,General,2012-01-12 14:08:04.148000+00:00,2012-02-09 00:00:00.010000+00:00,Group 8,Resource11,2011-12-15 01:06:40.010000+00:00,task-50420,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-21 10:27:41.001000+00:00 +Internet,RIGHT_case-10950,2012-01-02 00:00:00+00:00,General,,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 00:00:00.010000+00:00,task-50309,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-12-20 10:29:17.765000+00:00 +Internet,RIGHT_case-10950,2012-01-02 00:00:00+00:00,General,,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 00:00:00.010000+00:00,task-50323,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-12-20 11:04:13.923000+00:00 +Internet,RIGHT_case-10950,2012-01-02 00:00:00+00:00,General,,2012-01-02 00:00:00.010000+00:00,Group 5,Resource14,2011-11-07 00:00:00.010000+00:00,task-50324,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-12-20 11:11:21.148000+00:00 +Internet,RIGHT_case-10951,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource13,2011-12-15 01:06:40.010000+00:00,task-51286,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 10:33:36.161000+00:00 +Internet,RIGHT_case-10951,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource13,2011-12-15 01:06:40.010000+00:00,task-51290,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 10:36:25.145000+00:00 +Internet,RIGHT_case-10951,2012-02-09 00:00:00+00:00,General,,2012-02-09 00:00:00.010000+00:00,Group 5,Resource13,2011-12-15 01:06:40.010000+00:00,task-51288,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2012-01-05 10:36:53.293000+00:00 +Internet,RIGHT_case-10971,2012-02-11 00:00:00+00:00,General,,2012-02-11 00:00:00.010000+00:00,Group 5,Resource13,2011-12-16 01:06:40.010000+00:00,task-51738,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2012-01-10 13:19:00.861000+00:00 +Internet,RIGHT_case-10971,2012-02-11 00:00:00+00:00,General,,2012-02-11 00:00:00.010000+00:00,Group 5,Resource13,2011-12-16 01:06:40.010000+00:00,task-51742,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2012-01-10 13:23:49.193000+00:00 +Internet,RIGHT_case-10971,2012-02-11 00:00:00+00:00,General,,2012-02-11 00:00:00.010000+00:00,Group 5,Resource13,2011-12-16 01:06:40.010000+00:00,task-51743,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2012-01-10 13:26:48.822000+00:00 +Internet,RIGHT_case-11006,2012-02-13 00:00:00+00:00,General,2012-01-17 13:54:25.963000+00:00,2012-02-13 00:00:00.010000+00:00,Group 8,Resource11,2011-12-19 01:06:40.010000+00:00,task-50898,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-12-28 15:36:51.757000+00:00 +Internet,RIGHT_case-11006,2012-02-13 00:00:00+00:00,General,2012-01-17 13:54:25.963000+00:00,2012-02-13 00:00:00.010000+00:00,Group 8,Resource11,2011-12-19 01:06:40.010000+00:00,task-50901,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-12-28 15:38:14.575000+00:00 +Internet,RIGHT_case-11006,2012-02-13 00:00:00+00:00,General,2012-01-17 13:54:25.963000+00:00,2012-02-13 00:00:00.010000+00:00,Group 8,Resource11,2011-12-19 01:06:40.010000+00:00,task-50902,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-12-28 15:44:34.115000+00:00 +Internet,RIGHT_case-11007,2012-02-13 00:00:00+00:00,General,,2012-02-13 00:00:00.010000+00:00,Group 5,Resource05,2011-12-19 01:06:40.010000+00:00,task-51128,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-05 08:40:10.511000+00:00 +Internet,RIGHT_case-11007,2012-02-13 00:00:00+00:00,General,,2012-02-13 00:00:00.010000+00:00,Group 5,Resource05,2011-12-19 01:06:40.010000+00:00,task-51253,T05 Print and send confirmation of receipt,complete,EMPTY,Resource05,2012-01-05 09:49:38.861000+00:00 +Internet,RIGHT_case-11007,2012-02-13 00:00:00+00:00,General,,2012-02-13 00:00:00.010000+00:00,Group 5,Resource05,2011-12-19 01:06:40.010000+00:00,task-51260,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-05 09:52:53.749000+00:00 +Internet,RIGHT_case-11048,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-51384,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-05 14:01:29.103000+00:00 +Internet,RIGHT_case-11048,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-51388,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-05 14:06:28.934000+00:00 +Internet,RIGHT_case-11048,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-51392,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-05 14:09:51.300000+00:00 +Internet,RIGHT_case-11050,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-52654,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-17 07:30:21.486000+00:00 +Internet,RIGHT_case-11050,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-52657,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-17 07:31:40.568000+00:00 +Internet,RIGHT_case-11050,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-52658,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-17 07:32:43.377000+00:00 +Internet,RIGHT_case-11053,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-52692,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-17 08:38:52.371000+00:00 +Internet,RIGHT_case-11053,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-52697,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-17 08:42:11.053000+00:00 +Internet,RIGHT_case-11053,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource05,2011-12-21 01:06:40.010000+00:00,task-52695,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-17 08:44:59.677000+00:00 +Internet,RIGHT_case-11058,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource22,2011-12-21 01:06:40.010000+00:00,task-52724,T02 Check confirmation of receipt,complete,Group 4,Resource22,2012-01-17 13:55:22.771000+00:00 +Internet,RIGHT_case-11058,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource22,2011-12-21 01:06:40.010000+00:00,task-52826,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2012-01-17 13:57:39.208000+00:00 +Internet,RIGHT_case-11058,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource22,2011-12-21 01:06:40.010000+00:00,task-52726,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2012-01-17 13:58:38.544000+00:00 +Internet,RIGHT_case-11059,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-51955,T02 Check confirmation of receipt,complete,Group 4,Resource04,2012-01-11 12:56:33.884000+00:00 +Internet,RIGHT_case-11059,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-51958,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2012-01-11 12:57:29.891000+00:00 +Internet,RIGHT_case-11059,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-52855,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2012-01-17 14:44:48.567000+00:00 +Internet,RIGHT_case-11063,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-51989,T02 Check confirmation of receipt,complete,Group 4,Resource04,2012-01-11 16:18:28.394000+00:00 +Internet,RIGHT_case-11063,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-51992,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2012-01-11 16:19:43.202000+00:00 +Internet,RIGHT_case-11063,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-12-21 01:06:40.010000+00:00,task-51993,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2012-01-11 16:20:54.744000+00:00 +Internet,RIGHT_case-11080,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource14,2011-12-22 01:06:40.010000+00:00,task-53420,T02 Check confirmation of receipt,complete,Group 4,Resource14,2012-01-23 11:59:02.529000+00:00 +Internet,RIGHT_case-11080,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource14,2011-12-22 01:06:40.010000+00:00,task-53423,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2012-01-23 12:01:17.550000+00:00 +Internet,RIGHT_case-11080,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource14,2011-12-22 01:06:40.010000+00:00,task-53424,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2012-01-23 12:02:37.738000+00:00 +Internet,RIGHT_case-11094,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource13,2011-12-22 01:06:40.010000+00:00,task-52366,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2012-01-15 13:23:36.084000+00:00 +Internet,RIGHT_case-11094,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource13,2011-12-22 01:06:40.010000+00:00,task-52369,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2012-01-15 13:25:55.526000+00:00 +Internet,RIGHT_case-11094,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource13,2011-12-22 01:06:40.010000+00:00,task-52370,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2012-01-15 13:27:11.044000+00:00 +Internet,RIGHT_case-11096,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource06,2011-12-22 01:06:40.010000+00:00,task-52316,T02 Check confirmation of receipt,complete,Group 4,Resource06,2012-01-13 15:44:18.052000+00:00 +Internet,RIGHT_case-11096,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource06,2011-12-22 01:06:40.010000+00:00,task-52319,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2012-01-13 15:45:37.394000+00:00 +Internet,RIGHT_case-11096,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource06,2011-12-22 01:06:40.010000+00:00,task-52320,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2012-01-13 15:46:46.222000+00:00 +Internet,RIGHT_case-11115,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 5,Resource13,2011-12-23 01:06:40.010000+00:00,task-53207,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2012-01-18 15:47:30.077000+00:00 +Internet,RIGHT_case-11115,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 5,Resource13,2011-12-23 01:06:40.010000+00:00,task-53209,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2012-01-18 15:48:49.021000+00:00 +Internet,RIGHT_case-11115,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 5,Resource13,2011-12-23 01:06:40.010000+00:00,task-53211,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2012-01-18 15:49:34.655000+00:00 +Internet,RIGHT_case-11129,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 2,Resource20,2011-12-23 01:06:40.010000+00:00,task-51491,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 14:23:09.346000+00:00 +Internet,RIGHT_case-11129,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 2,Resource20,2011-12-23 01:06:40.010000+00:00,task-51495,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 14:25:43.079000+00:00 +Internet,RIGHT_case-11129,2012-02-17 00:00:00+00:00,General,,2012-02-17 00:00:00.010000+00:00,Group 2,Resource20,2011-12-23 01:06:40.010000+00:00,task-51499,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-06 14:53:11.253000+00:00 +Internet,RIGHT_case-11154,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource06,2011-12-27 01:06:40.010000+00:00,task-52519,T02 Check confirmation of receipt,complete,Group 4,Resource06,2012-01-16 12:32:13.632000+00:00 +Internet,RIGHT_case-11154,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource06,2011-12-27 01:06:40.010000+00:00,task-52522,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2012-01-16 12:33:43.742000+00:00 +Internet,RIGHT_case-11154,2012-02-21 00:00:00+00:00,General,,2012-02-21 00:00:00.010000+00:00,Group 5,Resource06,2011-12-27 01:06:40.010000+00:00,task-52523,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2012-01-16 12:35:08.739000+00:00 +Internet,RIGHT_case-11214,2012-03-25 00:00:00+00:00,General,,2012-02-26 00:00:00.010000+00:00,Group 2,Resource07,2012-01-01 01:06:40.010000+00:00,task-51799,T02 Check confirmation of receipt,complete,Group 4,Resource07,2012-01-10 14:42:09.187000+00:00 +Internet,RIGHT_case-11214,2012-03-25 00:00:00+00:00,General,,2012-02-26 00:00:00.010000+00:00,Group 2,Resource07,2012-01-01 01:06:40.010000+00:00,task-51802,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2012-01-10 14:43:18.047000+00:00 +Internet,RIGHT_case-11214,2012-03-25 00:00:00+00:00,General,,2012-02-26 00:00:00.010000+00:00,Group 2,Resource07,2012-01-01 01:06:40.010000+00:00,task-51803,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2012-01-10 14:48:58.604000+00:00 +Internet,RIGHT_case-11268,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource12,2012-01-04 01:06:40.010000+00:00,task-52136,T02 Check confirmation of receipt,complete,Group 4,Resource12,2012-01-12 14:30:49.989000+00:00 +Internet,RIGHT_case-11268,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource12,2012-01-04 01:06:40.010000+00:00,task-52141,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2012-01-12 14:35:16.754000+00:00 +Internet,RIGHT_case-11268,2012-02-29 00:00:00+00:00,General,,2012-02-29 00:00:00.010000+00:00,Group 5,Resource12,2012-01-04 01:06:40.010000+00:00,task-52139,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2012-01-20 13:49:57.510000+00:00 +Internet,RIGHT_case-11275,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource22,2011-12-22 01:06:40.010000+00:00,task-52146,T02 Check confirmation of receipt,complete,Group 4,Resource22,2012-01-12 14:37:39.465000+00:00 +Internet,RIGHT_case-11275,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource22,2011-12-22 01:06:40.010000+00:00,task-52150,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2012-01-12 14:40:39.515000+00:00 +Internet,RIGHT_case-11275,2012-02-16 00:00:00+00:00,General,,2012-02-16 00:00:00.010000+00:00,Group 5,Resource22,2011-12-22 01:06:40.010000+00:00,task-52154,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2012-01-12 14:42:05.233000+00:00 +Internet,RIGHT_case-11375,2012-01-13 00:00:00+00:00,General,2012-01-18 12:40:44.606000+00:00,2012-01-13 00:00:00.010000+00:00,Group 5,Resource12,2011-11-18 01:06:40.010000+00:00,task-51946,T02 Check confirmation of receipt,complete,Group 4,Resource12,2012-01-11 12:12:22.011000+00:00 +Internet,RIGHT_case-11375,2012-01-13 00:00:00+00:00,General,2012-01-18 12:40:44.606000+00:00,2012-01-13 00:00:00.010000+00:00,Group 5,Resource12,2011-11-18 01:06:40.010000+00:00,task-51950,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2012-01-11 12:16:09.310000+00:00 +Internet,RIGHT_case-11375,2012-01-13 00:00:00+00:00,General,2012-01-18 12:40:44.606000+00:00,2012-01-13 00:00:00.010000+00:00,Group 5,Resource12,2011-11-18 01:06:40.010000+00:00,task-52236,T17 Check report Y to stop indication,complete,Group 4,Resource12,2012-01-13 07:41:08.656000+00:00 +Internet,RIGHT_case-11375,2012-01-13 00:00:00+00:00,General,2012-01-18 12:40:44.606000+00:00,2012-01-13 00:00:00.010000+00:00,Group 5,Resource12,2011-11-18 01:06:40.010000+00:00,task-52238,T20 Print report Y to stop indication,complete,Group 2,Resource12,2012-01-13 07:42:16.811000+00:00 +Internet,RIGHT_case-11375,2012-01-13 00:00:00+00:00,General,2012-01-18 12:40:44.606000+00:00,2012-01-13 00:00:00.010000+00:00,Group 5,Resource12,2011-11-18 01:06:40.010000+00:00,task-51949,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2012-01-13 08:08:42.768000+00:00 +Internet,RIGHT_case-11376,2012-02-27 00:00:00+00:00,General,,2012-02-27 00:00:00.010000+00:00,Group 5,Resource02,2011-11-21 01:06:40.010000+00:00,task-52673,T02 Check confirmation of receipt,complete,Group 4,Resource02,2012-01-17 12:00:33.584000+00:00 +Internet,RIGHT_case-11376,2012-02-27 00:00:00+00:00,General,,2012-02-27 00:00:00.010000+00:00,Group 5,Resource02,2011-11-21 01:06:40.010000+00:00,task-52786,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2012-01-17 12:02:13.821000+00:00 +Internet,RIGHT_case-11376,2012-02-27 00:00:00+00:00,General,,2012-02-27 00:00:00.010000+00:00,Group 5,Resource02,2011-11-21 01:06:40.010000+00:00,task-52788,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2012-01-17 12:04:35.396000+00:00 +Internet,RIGHT_case-11378,2012-01-20 00:00:00+00:00,General,2012-01-20 09:12:24.814000+00:00,2012-01-20 00:00:00.010000+00:00,Group 8,Resource11,2011-11-25 01:06:40.010000+00:00,task-52706,T02 Check confirmation of receipt,complete,Group 4,Resource07,2012-01-17 09:03:25.633000+00:00 +Internet,RIGHT_case-11378,2012-01-20 00:00:00+00:00,General,2012-01-20 09:12:24.814000+00:00,2012-01-20 00:00:00.010000+00:00,Group 8,Resource11,2011-11-25 01:06:40.010000+00:00,task-52711,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2012-01-17 09:04:28.414000+00:00 +Internet,RIGHT_case-11378,2012-01-20 00:00:00+00:00,General,2012-01-20 09:12:24.814000+00:00,2012-01-20 00:00:00.010000+00:00,Group 8,Resource11,2011-11-25 01:06:40.010000+00:00,task-52712,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2012-01-17 09:05:57.074000+00:00 +Internet,RIGHT_case-11380,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource06,2012-01-09 01:06:40.010000+00:00,task-52337,T02 Check confirmation of receipt,complete,Group 4,Resource06,2012-01-13 16:30:16.897000+00:00 +Internet,RIGHT_case-11380,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource06,2012-01-09 01:06:40.010000+00:00,task-52340,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2012-01-13 16:31:20.117000+00:00 +Internet,RIGHT_case-11380,2012-03-05 00:00:00+00:00,General,,2012-03-05 00:00:00.010000+00:00,Group 5,Resource06,2012-01-09 01:06:40.010000+00:00,task-52341,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2012-01-13 16:33:17.201000+00:00 +Internet,RIGHT_case-11399,2012-01-24 00:00:00+00:00,General,2012-01-17 10:01:44.200000+00:00,2012-01-24 00:00:00.010000+00:00,Group 6,Resource40,2011-11-29 00:00:00.010000+00:00,task-52049,T02 Check confirmation of receipt,complete,Group 4,Resource11,2012-01-12 11:18:48.350000+00:00 +Internet,RIGHT_case-11399,2012-01-24 00:00:00+00:00,General,2012-01-17 10:01:44.200000+00:00,2012-01-24 00:00:00.010000+00:00,Group 6,Resource40,2011-11-29 00:00:00.010000+00:00,task-52054,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2012-01-12 11:20:20.992000+00:00 +Internet,RIGHT_case-11399,2012-01-24 00:00:00+00:00,General,2012-01-17 10:01:44.200000+00:00,2012-01-24 00:00:00.010000+00:00,Group 6,Resource40,2011-11-29 00:00:00.010000+00:00,task-52052,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2012-01-12 11:21:00.074000+00:00 +Internet,RIGHT_case-11399,2012-01-24 00:00:00+00:00,General,2012-01-17 10:01:44.200000+00:00,2012-01-24 00:00:00.010000+00:00,Group 6,Resource40,2011-11-29 00:00:00.010000+00:00,task-52058,T17 Check report Y to stop indication,complete,Group 4,Resource11,2012-01-12 11:26:15.750000+00:00 +Internet,RIGHT_case-11399,2012-01-24 00:00:00+00:00,General,2012-01-17 10:01:44.200000+00:00,2012-01-24 00:00:00.010000+00:00,Group 6,Resource40,2011-11-29 00:00:00.010000+00:00,task-52060,T20 Print report Y to stop indication,complete,Group 2,Resource11,2012-01-12 11:27:40.453000+00:00 +Internet,RIGHT_case-11427,2012-03-07 00:00:00+00:00,General,,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-53445,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-23 14:22:11.094000+00:00 +Internet,RIGHT_case-11427,2012-03-07 00:00:00+00:00,General,,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-53448,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-23 14:36:04.241000+00:00 +Internet,RIGHT_case-11427,2012-03-07 00:00:00+00:00,General,,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-53449,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-23 14:39:21.894000+00:00 +Internet,RIGHT_case-11437,2012-03-07 00:00:00+00:00,General,2012-01-18 10:25:47.641000+00:00,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-53027,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-18 09:40:02.238000+00:00 +Internet,RIGHT_case-11437,2012-03-07 00:00:00+00:00,General,2012-01-18 10:25:47.641000+00:00,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-53030,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-18 09:40:58.960000+00:00 +Internet,RIGHT_case-11437,2012-03-07 00:00:00+00:00,General,2012-01-18 10:25:47.641000+00:00,2012-03-07 00:00:00.010000+00:00,Group 5,Resource05,2012-01-11 01:06:40.010000+00:00,task-53031,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-18 09:42:22.166000+00:00 +Internet,RIGHT_case-11458,2012-03-08 00:00:00+00:00,General,,2012-03-08 00:00:00.010000+00:00,Group 5,Resource05,2012-01-12 01:06:40.010000+00:00,task-53486,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-23 15:40:01.303000+00:00 +Internet,RIGHT_case-11458,2012-03-08 00:00:00+00:00,General,,2012-03-08 00:00:00.010000+00:00,Group 5,Resource05,2012-01-12 01:06:40.010000+00:00,task-53490,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-23 15:41:12.424000+00:00 +Internet,RIGHT_case-11458,2012-03-08 00:00:00+00:00,General,,2012-03-08 00:00:00.010000+00:00,Group 5,Resource05,2012-01-12 01:06:40.010000+00:00,task-53491,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-23 15:42:54.644000+00:00 +Desk,RIGHT_case-11460,2012-03-02 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource06,2012-01-06 01:06:40.010000+00:00,task-53275,T02 Check confirmation of receipt,complete,Group 4,Resource06,2012-01-19 16:14:07.239000+00:00 +Desk,RIGHT_case-11460,2012-03-02 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource06,2012-01-06 01:06:40.010000+00:00,task-53279,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2012-01-19 16:15:58.589000+00:00 +Desk,RIGHT_case-11460,2012-03-02 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource06,2012-01-06 01:06:40.010000+00:00,task-53278,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2012-01-20 13:53:13.367000+00:00 +Internet,RIGHT_case-11470,2012-03-09 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource18,2012-01-13 01:06:40.010000+00:00,task-53019,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2012-01-18 09:13:20.508000+00:00 +Internet,RIGHT_case-11470,2012-03-09 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource18,2012-01-13 01:06:40.010000+00:00,task-53023,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2012-01-18 09:17:33.202000+00:00 +Internet,RIGHT_case-11470,2012-03-09 00:00:00+00:00,General,,2012-03-02 00:00:00.010000+00:00,Group 5,Resource18,2012-01-13 01:06:40.010000+00:00,task-53024,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2012-01-18 09:38:45.355000+00:00 +Internet,RIGHT_case-11473,2012-03-09 00:00:00+00:00,General,,2012-03-09 00:00:00.010000+00:00,Group 5,Resource18,2012-01-13 01:06:40.010000+00:00,task-53085,T02 Check confirmation of receipt,complete,Group 4,Resource18,2012-01-18 11:51:06.633000+00:00 +Internet,RIGHT_case-11473,2012-03-09 00:00:00+00:00,General,,2012-03-09 00:00:00.010000+00:00,Group 5,Resource18,2012-01-13 01:06:40.010000+00:00,task-53147,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2012-01-18 11:52:44.235000+00:00 +Internet,RIGHT_case-11481,2012-03-10 00:00:00+00:00,General,,2012-03-10 00:00:00.010000+00:00,Group 5,Resource23,2012-01-14 01:06:40.010000+00:00,task-53400,T02 Check confirmation of receipt,complete,Group 4,Resource23,2012-01-23 10:45:16.188000+00:00 +Internet,RIGHT_case-11481,2012-03-10 00:00:00+00:00,General,,2012-03-10 00:00:00.010000+00:00,Group 5,Resource23,2012-01-14 01:06:40.010000+00:00,task-53403,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2012-01-23 10:46:17.711000+00:00 +Internet,RIGHT_case-11517,2012-03-13 00:00:00+00:00,General,,2012-03-13 00:00:00.010000+00:00,Group 5,Resource06,2012-01-17 01:06:40.010000+00:00,task-52975,T02 Check confirmation of receipt,complete,Group 4,Resource18,2012-01-17 16:59:56.347000+00:00 +Internet,RIGHT_case-11517,2012-03-13 00:00:00+00:00,General,,2012-03-13 00:00:00.010000+00:00,Group 5,Resource06,2012-01-17 01:06:40.010000+00:00,task-52978,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2012-01-17 17:02:29.572000+00:00 +Desk,RIGHT_case-3756,2010-11-29 01:06:40+00:00,General,2010-11-29 14:51:06.575000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource02,2010-10-04 01:06:40.020000+00:00,task-44,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-05 09:31:29.133000+00:00 +Desk,RIGHT_case-3756,2010-11-29 01:06:40+00:00,General,2010-11-29 14:51:06.575000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource02,2010-10-04 01:06:40.020000+00:00,task-46,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource24,2010-10-05 09:32:37.563000+00:00 +Desk,RIGHT_case-3756,2010-11-29 01:06:40+00:00,General,2010-11-29 14:51:06.575000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource02,2010-10-04 01:06:40.020000+00:00,task-49,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-10-05 09:40:16.663000+00:00 +Desk,RIGHT_case-3756,2010-11-29 01:06:40+00:00,General,2010-11-29 14:51:06.575000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource02,2010-10-04 01:06:40.020000+00:00,task-59,T05 Print and send confirmation of receipt,complete,EMPTY,Resource21,2010-10-05 15:16:10.469000+00:00 +Desk,RIGHT_case-3766,2010-11-29 01:06:40+00:00,Experts,2010-11-29 13:18:50.141000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource08,2010-10-04 01:06:40.020000+00:00,task-68,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-10-05 13:08:22.858000+00:00 +Desk,RIGHT_case-3766,2010-11-29 01:06:40+00:00,Experts,2010-11-29 13:18:50.141000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource08,2010-10-04 01:06:40.020000+00:00,task-66,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-05 15:03:36.552000+00:00 +Desk,RIGHT_case-3766,2010-11-29 01:06:40+00:00,Experts,2010-11-29 13:18:50.141000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource08,2010-10-04 01:06:40.020000+00:00,task-84,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-05 15:26:38.519000+00:00 +Desk,RIGHT_case-3766,2010-11-29 01:06:40+00:00,Experts,2010-11-29 13:18:50.141000+00:00,2010-11-29 01:06:40.010000+00:00,,Resource08,2010-10-04 01:06:40.020000+00:00,task-96,T05 Print and send confirmation of receipt,complete,Group 2,Resource08,2010-10-07 15:16:55.755000+00:00 +Internet,RIGHT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-272,T02 Check confirmation of receipt,complete,EMPTY,Resource26,2010-10-18 11:25:15.229000+00:00 +Internet,RIGHT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-280,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-20 12:18:19.102000+00:00 +Internet,RIGHT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-334,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2010-10-21 08:37:49.327000+00:00 +Internet,RIGHT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-350,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-21 11:40:14.028000+00:00 +Internet,RIGHT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-359,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-21 11:50:06.814000+00:00 +Internet,RIGHT_case-3818,2010-12-02 01:06:40+00:00,General,2011-03-02 08:30:11.985000+00:00,2010-12-02 01:06:40.010000+00:00,,Resource12,2010-10-06 01:06:40.020000+00:00,task-432,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-10-25 11:52:01.185000+00:00 +Internet,RIGHT_case-3877,2010-11-30 01:06:40+00:00,General,2011-03-01 09:23:58.143000+00:00,2010-11-30 01:06:40.010000+00:00,,Resource12,2010-10-11 01:06:40.020000+00:00,task-608,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2010-11-02 10:41:42.166000+00:00 +Internet,RIGHT_case-3877,2010-11-30 01:06:40+00:00,General,2011-03-01 09:23:58.143000+00:00,2010-11-30 01:06:40.010000+00:00,,Resource12,2010-10-11 01:06:40.020000+00:00,task-707,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-03 08:46:54.881000+00:00 +Internet,RIGHT_case-3877,2010-11-30 01:06:40+00:00,General,2011-03-01 09:23:58.143000+00:00,2010-11-30 01:06:40.010000+00:00,,Resource12,2010-10-11 01:06:40.020000+00:00,task-785,T09-4 Process or receive external advice from party 4,complete,Group 1,Resource12,2010-11-03 10:07:03.160000+00:00 +Internet,RIGHT_case-3877,2010-11-30 01:06:40+00:00,General,2011-03-01 09:23:58.143000+00:00,2010-11-30 01:06:40.010000+00:00,,Resource12,2010-10-11 01:06:40.020000+00:00,task-787,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2010-11-03 10:08:13.786000+00:00 +Internet,RIGHT_case-3879,2010-12-06 00:00:00+00:00,General,2010-12-06 09:01:13.501000+00:00,2010-12-06 00:00:00.010000+00:00,,Resource01,2010-10-11 00:00:00.020000+00:00,task-532,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 11:23:25.112000+00:00 +Internet,RIGHT_case-3879,2010-12-06 00:00:00+00:00,General,2010-12-06 09:01:13.501000+00:00,2010-12-06 00:00:00.010000+00:00,,Resource01,2010-10-11 00:00:00.020000+00:00,task-972,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-04 15:03:49.437000+00:00 +Internet,RIGHT_case-3879,2010-12-06 00:00:00+00:00,General,2010-12-06 09:01:13.501000+00:00,2010-12-06 00:00:00.010000+00:00,,Resource01,2010-10-11 00:00:00.020000+00:00,task-2120,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 07:40:21.413000+00:00 +e-mail,RIGHT_case-3926,2010-12-09 00:00:00+00:00,Experts,2011-01-28 15:31:07.302000+00:00,2010-12-09 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-878,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-04 14:01:34.394000+00:00 +e-mail,RIGHT_case-3926,2010-12-09 00:00:00+00:00,Experts,2011-01-28 15:31:07.302000+00:00,2010-12-09 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-968,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-11-04 15:01:20.367000+00:00 +e-mail,RIGHT_case-3926,2010-12-09 00:00:00+00:00,Experts,2011-01-28 15:31:07.302000+00:00,2010-12-09 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-981,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-04 15:51:18.204000+00:00 +e-mail,RIGHT_case-3926,2010-12-09 00:00:00+00:00,Experts,2011-01-28 15:31:07.302000+00:00,2010-12-09 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-1010,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-05 09:34:08.144000+00:00 +e-mail,RIGHT_case-3926,2010-12-09 00:00:00+00:00,Experts,2011-01-28 15:31:07.302000+00:00,2010-12-09 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-1405,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:09:08.525000+00:00 +e-mail,RIGHT_case-3927,2010-12-03 01:06:40+00:00,General,2011-09-02 11:03:10.777000+00:00,2010-12-03 01:06:40.010000+00:00,Group 5,Resource12,2010-10-08 01:06:40.020000+00:00,task-1877,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 08:57:47.280000+00:00 +e-mail,RIGHT_case-3927,2010-12-03 01:06:40+00:00,General,2011-09-02 11:03:10.777000+00:00,2010-12-03 01:06:40.010000+00:00,Group 5,Resource12,2010-10-08 01:06:40.020000+00:00,task-2369,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:17:29.108000+00:00 +e-mail,RIGHT_case-3927,2010-12-03 01:06:40+00:00,General,2011-09-02 11:03:10.777000+00:00,2010-12-03 01:06:40.010000+00:00,Group 5,Resource12,2010-10-08 01:06:40.020000+00:00,task-22365,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-27 12:00:46.956000+00:00 +Desk,RIGHT_case-3961,2010-12-13 01:06:40+00:00,General,2011-01-14 15:34:24.686000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource07,2010-10-12 01:06:40.020000+00:00,task-596,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 08:43:32.894000+00:00 +Desk,RIGHT_case-3961,2010-12-13 01:06:40+00:00,General,2011-01-14 15:34:24.686000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource07,2010-10-12 01:06:40.020000+00:00,task-528,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-04 11:39:31.978000+00:00 +Desk,RIGHT_case-3961,2010-12-13 01:06:40+00:00,General,2011-01-14 15:34:24.686000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource07,2010-10-12 01:06:40.020000+00:00,task-934,T05 Print and send confirmation of receipt,complete,EMPTY,Resource27,2010-11-04 13:52:36.812000+00:00 +Internet,RIGHT_case-3983,2010-12-07 01:06:40+00:00,General,2010-12-20 12:50:32.733000+00:00,2010-12-07 01:06:40.010000+00:00,,Resource06,2010-10-12 01:06:40.020000+00:00,task-2018,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-11-25 09:01:56.987000+00:00 +Internet,RIGHT_case-3983,2010-12-07 01:06:40+00:00,General,2010-12-20 12:50:32.733000+00:00,2010-12-07 01:06:40.010000+00:00,,Resource06,2010-10-12 01:06:40.020000+00:00,task-2024,T02 Check confirmation of receipt,complete,Group 4,Resource06,2010-11-25 09:07:47.085000+00:00 +Internet,RIGHT_case-3983,2010-12-07 01:06:40+00:00,General,2010-12-20 12:50:32.733000+00:00,2010-12-07 01:06:40.010000+00:00,,Resource06,2010-10-12 01:06:40.020000+00:00,task-2027,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2010-11-25 09:08:59.165000+00:00 +Internet,RIGHT_case-3983,2010-12-07 01:06:40+00:00,General,2010-12-20 12:50:32.733000+00:00,2010-12-07 01:06:40.010000+00:00,,Resource06,2010-10-12 01:06:40.020000+00:00,task-2026,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:31:08.264000+00:00 +Internet,RIGHT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-481,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource09,2010-10-26 09:39:17.902000+00:00 +Internet,RIGHT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-493,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource09,2010-10-26 09:42:16.765000+00:00 +Internet,RIGHT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-478,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 09:34:05.717000+00:00 +Internet,RIGHT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-845,T05 Print and send confirmation of receipt,complete,EMPTY,Resource27,2010-11-04 13:41:14.073000+00:00 +Internet,RIGHT_case-3984,2010-12-15 01:06:40+00:00,General,2010-12-21 00:00:00.010000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource09,2010-10-15 01:06:40.020000+00:00,task-938,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2010-11-04 13:56:48.479000+00:00 +Internet,RIGHT_case-3987,2011-01-05 01:06:40+00:00,Experts,2011-01-05 15:59:41.857000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-14 01:06:40.020000+00:00,task-504,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-10-26 12:27:17.766000+00:00 +Internet,RIGHT_case-3987,2011-01-05 01:06:40+00:00,Experts,2011-01-05 15:59:41.857000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-14 01:06:40.020000+00:00,task-497,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-10-26 15:52:17.181000+00:00 +Internet,RIGHT_case-3987,2011-01-05 01:06:40+00:00,Experts,2011-01-05 15:59:41.857000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-14 01:06:40.020000+00:00,task-545,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-10-28 13:46:25.048000+00:00 +Internet,RIGHT_case-3988,2010-12-15 01:06:40+00:00,Experts,2010-12-03 13:08:58.576000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource02,2010-10-14 01:06:40.020000+00:00,task-1226,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-11-09 08:47:00.517000+00:00 +Internet,RIGHT_case-3988,2010-12-15 01:06:40+00:00,Experts,2010-12-03 13:08:58.576000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource02,2010-10-14 01:06:40.020000+00:00,task-1263,T12 Check document X request unlicensed,complete,EMPTY,Resource24,2010-11-09 12:56:25.059000+00:00 +Internet,RIGHT_case-3988,2010-12-15 01:06:40+00:00,Experts,2010-12-03 13:08:58.576000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource02,2010-10-14 01:06:40.020000+00:00,task-1173,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:57:15.740000+00:00 +Internet,RIGHT_case-3988,2010-12-15 01:06:40+00:00,Experts,2010-12-03 13:08:58.576000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource02,2010-10-14 01:06:40.020000+00:00,task-1440,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:26:00.772000+00:00 +Internet,RIGHT_case-3989,2010-12-10 01:06:40+00:00,General,2010-12-29 16:18:00.338000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-382,T02 Check confirmation of receipt,complete,Group 4,Resource12,2010-10-22 09:57:46.254000+00:00 +Internet,RIGHT_case-3989,2010-12-10 01:06:40+00:00,General,2010-12-29 16:18:00.338000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-385,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2010-10-22 09:58:35.137000+00:00 +Internet,RIGHT_case-3989,2010-12-10 01:06:40+00:00,General,2010-12-29 16:18:00.338000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-386,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2010-10-22 09:59:36.800000+00:00 +Internet,RIGHT_case-3991,2010-12-10 01:06:40+00:00,General,2010-12-08 14:19:25.375000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource04,2010-10-15 01:06:40.020000+00:00,task-409,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-10-22 11:23:58.873000+00:00 +Internet,RIGHT_case-3991,2010-12-10 01:06:40+00:00,General,2010-12-08 14:19:25.375000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource04,2010-10-15 01:06:40.020000+00:00,task-411,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-10-22 11:30:31.019000+00:00 +Internet,RIGHT_case-3991,2010-12-10 01:06:40+00:00,General,2010-12-08 14:19:25.375000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource04,2010-10-15 01:06:40.020000+00:00,task-413,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2010-10-22 11:34:43.024000+00:00 +Internet,RIGHT_case-3995,2011-01-05 01:06:40+00:00,Experts,2010-12-28 09:28:09.296000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-20 01:06:40.020000+00:00,task-494,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-10-26 15:51:10.937000+00:00 +Internet,RIGHT_case-3995,2011-01-05 01:06:40+00:00,Experts,2010-12-28 09:28:09.296000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-20 01:06:40.020000+00:00,task-543,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-10-28 13:44:25.273000+00:00 +Internet,RIGHT_case-3995,2011-01-05 01:06:40+00:00,Experts,2010-12-28 09:28:09.296000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-10-20 01:06:40.020000+00:00,task-1184,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-08 15:17:20.902000+00:00 +Internet,RIGHT_case-3997,2010-12-12 01:06:40+00:00,Experts,2010-12-03 00:00:00.010000+00:00,2010-12-12 01:06:40.010000+00:00,,Resource17,2010-10-17 01:06:40.020000+00:00,task-948,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-11-04 14:31:40.155000+00:00 +Internet,RIGHT_case-3997,2010-12-12 01:06:40+00:00,Experts,2010-12-03 00:00:00.010000+00:00,2010-12-12 01:06:40.010000+00:00,,Resource17,2010-10-17 01:06:40.020000+00:00,task-946,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-11-18 11:31:22.936000+00:00 +Internet,RIGHT_case-3997,2010-12-12 01:06:40+00:00,Experts,2010-12-03 00:00:00.010000+00:00,2010-12-12 01:06:40.010000+00:00,,Resource17,2010-10-17 01:06:40.020000+00:00,task-1806,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:15:04.106000+00:00 +Internet,RIGHT_case-3998,2010-12-15 01:06:40+00:00,Experts,2010-12-15 15:27:27.932000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-491,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-10-26 15:51:51.369000+00:00 +Internet,RIGHT_case-3998,2010-12-15 01:06:40+00:00,Experts,2010-12-15 15:27:27.932000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-544,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-10-28 13:45:19.365000+00:00 +Internet,RIGHT_case-3998,2010-12-15 01:06:40+00:00,Experts,2010-12-15 15:27:27.932000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-724,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-02 14:38:47.479000+00:00 +Internet,RIGHT_case-4000,2010-12-15 01:06:40+00:00,Experts,2010-12-01 16:06:48.028000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource17,2010-10-18 01:06:40.020000+00:00,task-892,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-11-04 11:46:07.945000+00:00 +Internet,RIGHT_case-4000,2010-12-15 01:06:40+00:00,Experts,2010-12-01 16:06:48.028000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource17,2010-10-18 01:06:40.020000+00:00,task-890,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-11-18 10:35:48.552000+00:00 +Internet,RIGHT_case-4000,2010-12-15 01:06:40+00:00,Experts,2010-12-01 16:06:48.028000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource17,2010-10-18 01:06:40.020000+00:00,task-1631,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-11-18 10:44:34.458000+00:00 +Internet,RIGHT_case-4000,2010-12-15 01:06:40+00:00,Experts,2010-12-01 16:06:48.028000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource17,2010-10-18 01:06:40.020000+00:00,task-1966,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:26:54.924000+00:00 +Internet,RIGHT_case-4010,2010-12-13 01:06:40+00:00,Experts,2010-12-14 16:12:14.310000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-500,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-10-26 15:52:41.293000+00:00 +Internet,RIGHT_case-4010,2010-12-13 01:06:40+00:00,Experts,2010-12-14 16:12:14.310000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-547,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-10-28 13:47:04.666000+00:00 +Internet,RIGHT_case-4010,2010-12-13 01:06:40+00:00,Experts,2010-12-14 16:12:14.310000+00:00,2010-12-13 01:06:40.010000+00:00,,Resource08,2010-10-18 01:06:40.020000+00:00,task-883,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-04 11:36:57.035000+00:00 +Internet,RIGHT_case-4011,2010-12-14 01:06:40+00:00,General,2010-12-10 14:12:45.513000+00:00,2010-12-14 01:06:40.010000+00:00,,Resource07,2010-10-21 01:06:40.020000+00:00,task-1083,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-08 09:18:55.857000+00:00 +Internet,RIGHT_case-4011,2010-12-14 01:06:40+00:00,General,2010-12-10 14:12:45.513000+00:00,2010-12-14 01:06:40.010000+00:00,,Resource07,2010-10-21 01:06:40.020000+00:00,task-1081,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-09 08:13:59.914000+00:00 +Internet,RIGHT_case-4011,2010-12-14 01:06:40+00:00,General,2010-12-10 14:12:45.513000+00:00,2010-12-14 01:06:40.010000+00:00,,Resource07,2010-10-21 01:06:40.020000+00:00,task-2250,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-11-29 15:05:45.486000+00:00 +Internet,RIGHT_case-4011,2010-12-14 01:06:40+00:00,General,2010-12-10 14:12:45.513000+00:00,2010-12-14 01:06:40.010000+00:00,,Resource07,2010-10-21 01:06:40.020000+00:00,task-3534,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-10 08:27:33.436000+00:00 +Internet,RIGHT_case-4011,2010-12-14 01:06:40+00:00,General,2010-12-10 14:12:45.513000+00:00,2010-12-14 01:06:40.010000+00:00,,Resource07,2010-10-21 01:06:40.020000+00:00,task-3536,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-10 08:28:35.351000+00:00 +Internet,RIGHT_case-4012,2010-12-15 01:06:40+00:00,General,2010-12-10 14:08:36.611000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource01,2010-10-20 01:06:40.020000+00:00,task-1095,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-08 09:43:14.965000+00:00 +Internet,RIGHT_case-4012,2010-12-15 01:06:40+00:00,General,2010-12-10 14:08:36.611000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource01,2010-10-20 01:06:40.020000+00:00,task-1093,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-11-24 11:31:26.888000+00:00 +Internet,RIGHT_case-4012,2010-12-15 01:06:40+00:00,General,2010-12-10 14:08:36.611000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource01,2010-10-20 01:06:40.020000+00:00,task-2248,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-11-29 15:41:08.959000+00:00 +Internet,RIGHT_case-4013,2011-02-25 01:06:40+00:00,Experts,2010-12-24 15:25:31.676000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-1408,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-11-11 15:06:32.510000+00:00 +Internet,RIGHT_case-4013,2011-02-25 01:06:40+00:00,Experts,2010-12-24 15:25:31.676000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-1406,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-11-16 13:32:33.837000+00:00 +Internet,RIGHT_case-4013,2011-02-25 01:06:40+00:00,Experts,2010-12-24 15:25:31.676000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-1785,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 08:59:53.407000+00:00 +Internet,RIGHT_case-4014,2010-12-16 00:00:00+00:00,General,2010-12-02 13:12:39.256000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-613,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 11:25:43.152000+00:00 +Internet,RIGHT_case-4014,2010-12-16 00:00:00+00:00,General,2010-12-02 13:12:39.256000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-611,T02 Check confirmation of receipt,complete,EMPTY,Resource21,2010-11-01 11:45:22.431000+00:00 +Internet,RIGHT_case-4014,2010-12-16 00:00:00+00:00,General,2010-12-02 13:12:39.256000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-638,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-03 08:45:12.305000+00:00 +Post,RIGHT_case-4017,2010-12-16 00:00:00+00:00,General,2010-12-07 14:49:47.626000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-18 00:00:00.020000+00:00,task-629,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 12:21:48.593000+00:00 +Post,RIGHT_case-4017,2010-12-16 00:00:00+00:00,General,2010-12-07 14:49:47.626000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-18 00:00:00.020000+00:00,task-627,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-01 12:40:15.155000+00:00 +Post,RIGHT_case-4017,2010-12-16 00:00:00+00:00,General,2010-12-07 14:49:47.626000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-18 00:00:00.020000+00:00,task-654,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-03 08:46:13.204000+00:00 +Post,RIGHT_case-4020,2010-12-16 00:00:00+00:00,General,2010-12-02 13:54:08.640000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-644,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 12:47:52.420000+00:00 +Post,RIGHT_case-4020,2010-12-16 00:00:00+00:00,General,2010-12-02 13:54:08.640000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-642,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:29:40.881000+00:00 +Post,RIGHT_case-4020,2010-12-16 00:00:00+00:00,General,2010-12-02 13:54:08.640000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-1258,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-11 12:53:21.394000+00:00 +Internet,RIGHT_case-4021,2010-12-16 00:00:00+00:00,General,2010-12-06 15:58:40.035000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-12 00:00:00.020000+00:00,task-664,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 13:59:17.587000+00:00 +Internet,RIGHT_case-4021,2010-12-16 00:00:00+00:00,General,2010-12-06 15:58:40.035000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-12 00:00:00.020000+00:00,task-666,T17 Check report Y to stop indication,complete,Group 4,Resource11,2010-11-01 14:21:05.870000+00:00 +Internet,RIGHT_case-4021,2010-12-16 00:00:00+00:00,General,2010-12-06 15:58:40.035000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-12 00:00:00.020000+00:00,task-668,T20 Print report Y to stop indication,complete,Group 2,Resource11,2010-11-01 14:22:22.753000+00:00 +Internet,RIGHT_case-4021,2010-12-16 00:00:00+00:00,General,2010-12-06 15:58:40.035000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-12 00:00:00.020000+00:00,task-662,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-09 08:47:01.792000+00:00 +Internet,RIGHT_case-4021,2010-12-16 00:00:00+00:00,General,2010-12-06 15:58:40.035000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource01,2010-10-12 00:00:00.020000+00:00,task-1272,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-11 12:54:27.065000+00:00 +Post,RIGHT_case-4025,2010-12-16 00:00:00+00:00,General,2010-12-06 08:34:01.693000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-677,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 15:06:29.816000+00:00 +Post,RIGHT_case-4025,2010-12-16 00:00:00+00:00,General,2010-12-06 08:34:01.693000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-675,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-11-01 15:06:53.096000+00:00 +Post,RIGHT_case-4025,2010-12-16 00:00:00+00:00,General,2010-12-06 08:34:01.693000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-2615,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-02 10:03:48.065000+00:00 +Post,RIGHT_case-4025,2010-12-16 00:00:00+00:00,General,2010-12-06 08:34:01.693000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-2617,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-02 10:10:12.758000+00:00 +Post,RIGHT_case-4027,2010-12-16 01:06:40+00:00,General,2010-12-02 14:40:49.817000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource07,2010-10-01 01:06:40.020000+00:00,task-694,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-02 07:33:46.468000+00:00 +Post,RIGHT_case-4027,2010-12-16 01:06:40+00:00,General,2010-12-02 14:40:49.817000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource07,2010-10-01 01:06:40.020000+00:00,task-692,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:16:16.748000+00:00 +Post,RIGHT_case-4027,2010-12-16 01:06:40+00:00,General,2010-12-02 14:40:49.817000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource07,2010-10-01 01:06:40.020000+00:00,task-880,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-04 17:04:13.689000+00:00 +Post,RIGHT_case-4028,2010-12-16 00:00:00+00:00,General,2010-12-02 14:23:04.930000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-01 00:00:00.020000+00:00,task-717,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-11-02 12:46:01.076000+00:00 +Post,RIGHT_case-4028,2010-12-16 00:00:00+00:00,General,2010-12-02 14:23:04.930000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-01 00:00:00.020000+00:00,task-715,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:01:23.772000+00:00 +Post,RIGHT_case-4028,2010-12-16 00:00:00+00:00,General,2010-12-02 14:23:04.930000+00:00,2010-12-16 00:00:00.010000+00:00,,Resource07,2010-10-01 00:00:00.020000+00:00,task-993,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-11 12:52:39.426000+00:00 +e-mail,RIGHT_case-4057,2010-12-20 00:00:00+00:00,General,2010-12-09 14:16:49.836000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-742,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-03 07:34:41.207000+00:00 +e-mail,RIGHT_case-4057,2010-12-20 00:00:00+00:00,General,2010-12-09 14:16:49.836000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-740,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-11-03 07:43:45.093000+00:00 +e-mail,RIGHT_case-4057,2010-12-20 00:00:00+00:00,General,2010-12-09 14:16:49.836000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-754,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:25:04.170000+00:00 +e-mail,RIGHT_case-4057,2010-12-20 00:00:00+00:00,General,2010-12-09 14:16:49.836000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-12 00:00:00.020000+00:00,task-1403,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:06:20.910000+00:00 +e-mail,RIGHT_case-4058,2010-12-20 00:00:00+00:00,General,2010-12-09 13:44:04.791000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-757,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-03 08:00:44.893000+00:00 +e-mail,RIGHT_case-4058,2010-12-20 00:00:00+00:00,General,2010-12-09 13:44:04.791000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-755,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:20:57.159000+00:00 +e-mail,RIGHT_case-4058,2010-12-20 00:00:00+00:00,General,2010-12-09 13:44:04.791000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-1401,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:20:22.813000+00:00 +e-mail,RIGHT_case-4059,2010-12-20 00:00:00+00:00,General,2010-11-30 12:43:36.529000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-768,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-03 08:29:32.087000+00:00 +e-mail,RIGHT_case-4059,2010-12-20 00:00:00+00:00,General,2010-11-30 12:43:36.529000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-766,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:26:39.061000+00:00 +e-mail,RIGHT_case-4059,2010-12-20 00:00:00+00:00,General,2010-11-30 12:43:36.529000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource07,2010-10-04 00:00:00.020000+00:00,task-1404,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:07:03.744000+00:00 +e-mail,RIGHT_case-4060,2010-12-20 00:00:00+00:00,General,2010-12-02 12:43:39.676000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-1123,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-08 10:26:42.087000+00:00 +e-mail,RIGHT_case-4060,2010-12-20 00:00:00+00:00,General,2010-12-02 12:43:39.676000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-1121,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 08:56:40.517000+00:00 +e-mail,RIGHT_case-4060,2010-12-20 00:00:00+00:00,General,2010-12-02 12:43:39.676000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-2174,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-11-26 15:47:51.848000+00:00 +e-mail,RIGHT_case-4061,2010-12-20 00:00:00+00:00,General,2010-12-03 10:33:27.505000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-828,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-04 08:34:22.793000+00:00 +e-mail,RIGHT_case-4061,2010-12-20 00:00:00+00:00,General,2010-12-03 10:33:27.505000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-826,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:33:02.334000+00:00 +e-mail,RIGHT_case-4061,2010-12-20 00:00:00+00:00,General,2010-12-03 10:33:27.505000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-04 00:00:00.020000+00:00,task-902,T05 Print and send confirmation of receipt,complete,EMPTY,Resource27,2010-11-04 13:46:12.386000+00:00 +e-mail,RIGHT_case-4063,2010-12-20 00:00:00+00:00,General,2010-12-10 09:44:08.348000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-858,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-04 10:45:04.398000+00:00 +e-mail,RIGHT_case-4063,2010-12-20 00:00:00+00:00,General,2010-12-10 09:44:08.348000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-856,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 11:24:06.515000+00:00 +e-mail,RIGHT_case-4063,2010-12-20 00:00:00+00:00,General,2010-12-10 09:44:08.348000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource11,2010-10-04 00:00:00.020000+00:00,task-877,T05 Print and send confirmation of receipt,complete,EMPTY,Resource27,2010-11-04 13:38:23.965000+00:00 +Post,RIGHT_case-4071,2010-12-20 00:00:00+00:00,General,2010-12-03 14:17:45.760000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-08 00:00:00.020000+00:00,task-1109,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-08 09:59:43.904000+00:00 +Post,RIGHT_case-4071,2010-12-20 00:00:00+00:00,General,2010-12-03 14:17:45.760000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-08 00:00:00.020000+00:00,task-1107,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-25 15:51:46.498000+00:00 +Post,RIGHT_case-4071,2010-12-20 00:00:00+00:00,General,2010-12-03 14:17:45.760000+00:00,2010-12-20 00:00:00.010000+00:00,,Resource01,2010-10-08 00:00:00.020000+00:00,task-2511,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-03 13:34:06.358000+00:00 +Internet,RIGHT_case-4077,2010-12-21 01:06:40+00:00,General,2010-12-22 15:29:11.843000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource09,2010-10-21 01:06:40.020000+00:00,task-1035,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:56:48.464000+00:00 +Internet,RIGHT_case-4077,2010-12-21 01:06:40+00:00,General,2010-12-22 15:29:11.843000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource09,2010-10-21 01:06:40.020000+00:00,task-1435,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:23:00.561000+00:00 +Internet,RIGHT_case-4077,2010-12-21 01:06:40+00:00,General,2010-12-22 15:29:11.843000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource09,2010-10-21 01:06:40.020000+00:00,task-1564,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2010-11-17 12:06:46.426000+00:00 +Internet,RIGHT_case-4081,2010-12-21 01:06:40+00:00,Experts,2010-11-30 15:33:33.288000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-11 01:06:40.020000+00:00,task-1011,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-05 09:39:29.677000+00:00 +Internet,RIGHT_case-4081,2010-12-21 01:06:40+00:00,Experts,2010-11-30 15:33:33.288000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-11 01:06:40.020000+00:00,task-1032,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:45:27.109000+00:00 +Internet,RIGHT_case-4081,2010-12-21 01:06:40+00:00,Experts,2010-11-30 15:33:33.288000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-11 01:06:40.020000+00:00,task-1443,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:29:07.375000+00:00 +Internet,RIGHT_case-4081,2010-12-21 01:06:40+00:00,Experts,2010-11-30 15:33:33.288000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-11 01:06:40.020000+00:00,task-1644,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-18 12:24:43.413000+00:00 +Internet,RIGHT_case-4083,2010-12-21 00:00:00+00:00,General,2011-01-13 08:57:53.945000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource05,2010-10-21 00:00:00.020000+00:00,task-1230,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-11-09 08:51:09.549000+00:00 +Internet,RIGHT_case-4083,2010-12-21 00:00:00+00:00,General,2011-01-13 08:57:53.945000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource05,2010-10-21 00:00:00.020000+00:00,task-1225,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 14:23:14.328000+00:00 +Internet,RIGHT_case-4083,2010-12-21 00:00:00+00:00,General,2011-01-13 08:57:53.945000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource05,2010-10-21 00:00:00.020000+00:00,task-1438,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:28:14.641000+00:00 +Internet,RIGHT_case-4084,2010-12-21 00:00:00+00:00,General,2010-12-20 12:38:26.767000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-984,T02 Check confirmation of receipt,complete,EMPTY,Resource09,2010-11-09 08:41:47.429000+00:00 +Internet,RIGHT_case-4084,2010-12-21 00:00:00+00:00,General,2010-12-20 12:38:26.767000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-1526,T02 Check confirmation of receipt,complete,EMPTY,Resource09,2010-11-16 13:56:09.421000+00:00 +Internet,RIGHT_case-4084,2010-12-21 00:00:00+00:00,General,2010-12-20 12:38:26.767000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-1534,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-17 13:43:42.511000+00:00 +Internet,RIGHT_case-4084,2010-12-21 00:00:00+00:00,General,2010-12-20 12:38:26.767000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource06,2010-10-21 00:00:00.020000+00:00,task-1787,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:02:53.720000+00:00 +Internet,RIGHT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-909,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2010-11-04 11:58:44.612000+00:00 +Internet,RIGHT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-898,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-04 14:03:18.938000+00:00 +Internet,RIGHT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-966,T02 Check confirmation of receipt,complete,Group 4,Resource09,2010-11-04 15:41:35.618000+00:00 +Internet,RIGHT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-995,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-11-16 13:28:40.803000+00:00 +Internet,RIGHT_case-4100,2010-12-23 00:00:00+00:00,General,2010-12-22 14:43:48.030000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource09,2010-10-21 00:00:00.020000+00:00,task-1581,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-22 14:06:25.987000+00:00 +Internet,RIGHT_case-4101,2010-12-23 01:06:40+00:00,General,2011-02-04 09:40:40.613000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource05,2010-10-21 01:06:40.020000+00:00,task-1247,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-11-09 09:43:28.490000+00:00 +Internet,RIGHT_case-4101,2010-12-23 01:06:40+00:00,General,2011-02-04 09:40:40.613000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource05,2010-10-21 01:06:40.020000+00:00,task-1245,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 14:24:44.350000+00:00 +Internet,RIGHT_case-4101,2010-12-23 01:06:40+00:00,General,2011-02-04 09:40:40.613000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource05,2010-10-21 01:06:40.020000+00:00,task-1439,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:23:37.090000+00:00 +Internet,RIGHT_case-4102,2010-12-23 00:00:00+00:00,Experts,2010-12-30 11:23:06.047000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource08,2010-10-21 00:00:00.020000+00:00,task-1017,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-05 09:36:28.810000+00:00 +Internet,RIGHT_case-4102,2010-12-23 00:00:00+00:00,Experts,2010-12-30 11:23:06.047000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource08,2010-10-21 00:00:00.020000+00:00,task-1024,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:46:11.084000+00:00 +Internet,RIGHT_case-4102,2010-12-23 00:00:00+00:00,Experts,2010-12-30 11:23:06.047000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource08,2010-10-21 00:00:00.020000+00:00,task-1441,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:27:07.150000+00:00 +Internet,RIGHT_case-4102,2010-12-23 00:00:00+00:00,Experts,2010-12-30 11:23:06.047000+00:00,2010-12-23 00:00:00.010000+00:00,,Resource08,2010-10-21 00:00:00.020000+00:00,task-1544,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-16 16:12:49.284000+00:00 +Internet,RIGHT_case-4103,2010-12-16 01:06:40+00:00,General,2010-12-10 14:39:00.949000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource01,2010-10-21 01:06:40.020000+00:00,task-1141,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-08 10:48:12.243000+00:00 +Internet,RIGHT_case-4103,2010-12-16 01:06:40+00:00,General,2010-12-10 14:39:00.949000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource01,2010-10-21 01:06:40.020000+00:00,task-1138,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-09 10:23:46.696000+00:00 +Internet,RIGHT_case-4103,2010-12-16 01:06:40+00:00,General,2010-12-10 14:39:00.949000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource01,2010-10-21 01:06:40.020000+00:00,task-1436,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:27:45.067000+00:00 +Internet,RIGHT_case-4111,2011-05-05 01:06:40+00:00,General,2011-04-13 00:00:00.020000+00:00,2011-05-05 01:06:40.020000+00:00,,Resource02,2010-10-23 01:06:40.020000+00:00,task-1287,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 16:01:52.270000+00:00 +Internet,RIGHT_case-4111,2011-05-05 01:06:40+00:00,General,2011-04-13 00:00:00.020000+00:00,2011-05-05 01:06:40.020000+00:00,,Resource02,2010-10-23 01:06:40.020000+00:00,task-1307,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource02,2010-11-09 16:04:00.213000+00:00 +Internet,RIGHT_case-4111,2011-05-05 01:06:40+00:00,General,2011-04-13 00:00:00.020000+00:00,2011-05-05 01:06:40.020000+00:00,,Resource02,2010-10-23 01:06:40.020000+00:00,task-1444,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:22:26.674000+00:00 +Internet,RIGHT_case-4111,2011-05-05 01:06:40+00:00,General,2011-04-13 00:00:00.020000+00:00,2011-05-05 01:06:40.020000+00:00,,Resource02,2010-10-23 01:06:40.020000+00:00,task-1309,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-08 11:54:32.200000+00:00 +Internet,RIGHT_case-4114,2010-12-24 01:06:40+00:00,General,2010-12-30 12:12:57.114000+00:00,2010-12-24 01:06:40.010000+00:00,,Resource08,2010-10-24 01:06:40.020000+00:00,task-1053,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:43:08.091000+00:00 +Internet,RIGHT_case-4114,2010-12-24 01:06:40+00:00,General,2010-12-30 12:12:57.114000+00:00,2010-12-24 01:06:40.010000+00:00,,Resource08,2010-10-24 01:06:40.020000+00:00,task-1434,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:26:34.559000+00:00 +Internet,RIGHT_case-4114,2010-12-24 01:06:40+00:00,General,2010-12-30 12:12:57.114000+00:00,2010-12-24 01:06:40.010000+00:00,,Resource08,2010-10-24 01:06:40.020000+00:00,task-1662,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-18 14:46:07.723000+00:00 +Internet,RIGHT_case-4117,2010-12-20 01:06:40+00:00,General,2010-12-10 13:41:17.791000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource34,2010-10-25 01:06:40.020000+00:00,task-2054,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-25 15:31:09.270000+00:00 +Internet,RIGHT_case-4117,2010-12-20 01:06:40+00:00,General,2010-12-10 13:41:17.791000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource34,2010-10-25 01:06:40.020000+00:00,task-2052,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-26 09:29:43.743000+00:00 +Internet,RIGHT_case-4117,2010-12-20 01:06:40+00:00,General,2010-12-10 13:41:17.791000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource34,2010-10-25 01:06:40.020000+00:00,task-2202,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 07:53:13.904000+00:00 +Internet,RIGHT_case-4117,2010-12-20 01:06:40+00:00,General,2010-12-10 13:41:17.791000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource34,2010-10-25 01:06:40.020000+00:00,task-3486,T05 Print and send confirmation of receipt,complete,Group 2,Resource34,2010-12-10 09:11:23.508000+00:00 +Internet,RIGHT_case-4118,2010-12-28 01:06:40+00:00,General,2010-12-31 10:00:12.259000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource04,2010-10-25 01:06:40.020000+00:00,task-1312,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-09 16:10:33.992000+00:00 +Internet,RIGHT_case-4118,2010-12-28 01:06:40+00:00,General,2010-12-31 10:00:12.259000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource04,2010-10-25 01:06:40.020000+00:00,task-1310,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-11-16 13:34:40.273000+00:00 +Internet,RIGHT_case-4118,2010-12-28 01:06:40+00:00,General,2010-12-31 10:00:12.259000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource04,2010-10-25 01:06:40.020000+00:00,task-1786,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:01:21.356000+00:00 +Internet,RIGHT_case-4119,2010-12-21 01:06:40+00:00,General,2010-12-17 09:22:09.134000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-1216,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-09 08:01:14.050000+00:00 +Internet,RIGHT_case-4119,2010-12-21 01:06:40+00:00,General,2010-12-17 09:22:09.134000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-1214,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-09 11:30:54.690000+00:00 +Internet,RIGHT_case-4119,2010-12-21 01:06:40+00:00,General,2010-12-17 09:22:09.134000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-1419,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:21:07.769000+00:00 +Internet,RIGHT_case-4144,2010-12-21 01:06:40+00:00,General,2011-01-14 15:36:37.929000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource07,2010-10-26 01:06:40.020000+00:00,task-3615,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-10 12:13:38.826000+00:00 +Internet,RIGHT_case-4144,2010-12-21 01:06:40+00:00,General,2011-01-14 15:36:37.929000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource07,2010-10-26 01:06:40.020000+00:00,task-3613,T02 Check confirmation of receipt,complete,EMPTY,Resource34,2010-12-10 12:57:20.976000+00:00 +Internet,RIGHT_case-4144,2010-12-21 01:06:40+00:00,General,2011-01-14 15:36:37.929000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource07,2010-10-26 01:06:40.020000+00:00,task-3639,T05 Print and send confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 14:11:41.002000+00:00 +Internet,RIGHT_case-4146,2010-12-21 01:06:40+00:00,General,2010-12-15 14:45:23.624000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource06,2010-10-26 01:06:40.020000+00:00,task-2064,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-11-25 16:16:29.698000+00:00 +Internet,RIGHT_case-4146,2010-12-21 01:06:40+00:00,General,2010-12-15 14:45:23.624000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource06,2010-10-26 01:06:40.020000+00:00,task-2062,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 09:09:54.177000+00:00 +Internet,RIGHT_case-4146,2010-12-21 01:06:40+00:00,General,2010-12-15 14:45:23.624000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource06,2010-10-26 01:06:40.020000+00:00,task-2324,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-11-30 09:11:11.593000+00:00 +Internet,RIGHT_case-4147,2010-12-21 01:06:40+00:00,General,2011-01-21 12:03:50.618000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource02,2010-10-26 01:06:40.020000+00:00,task-2538,T02 Check confirmation of receipt,complete,EMPTY,Resource39,2010-12-01 16:34:36.807000+00:00 +Internet,RIGHT_case-4147,2010-12-21 01:06:40+00:00,General,2011-01-21 12:03:50.618000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource02,2010-10-26 01:06:40.020000+00:00,task-2990,T02 Check confirmation of receipt,complete,Group 4,Resource02,2010-12-06 14:00:05.661000+00:00 +Internet,RIGHT_case-4147,2010-12-21 01:06:40+00:00,General,2011-01-21 12:03:50.618000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource02,2010-10-26 01:06:40.020000+00:00,task-3020,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-07 08:32:14.837000+00:00 +Internet,RIGHT_case-4147,2010-12-21 01:06:40+00:00,General,2011-01-21 12:03:50.618000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource02,2010-10-26 01:06:40.020000+00:00,task-3399,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-08 16:16:39.128000+00:00 +Internet,RIGHT_case-4149,2010-12-21 01:06:40+00:00,General,2010-12-17 12:04:02.816000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-26 01:06:40.020000+00:00,task-1048,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-05 14:31:35.445000+00:00 +Internet,RIGHT_case-4149,2010-12-21 01:06:40+00:00,General,2010-12-17 12:04:02.816000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-26 01:06:40.020000+00:00,task-1046,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:44:17.788000+00:00 +Internet,RIGHT_case-4149,2010-12-21 01:06:40+00:00,General,2010-12-17 12:04:02.816000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource08,2010-10-26 01:06:40.020000+00:00,task-1442,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:25:26.201000+00:00 +Internet,RIGHT_case-4157,2010-12-21 01:06:40+00:00,Customer contact,2010-12-17 10:21:41.974000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-2295,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-30 08:29:45.853000+00:00 +Internet,RIGHT_case-4157,2010-12-21 01:06:40+00:00,Customer contact,2010-12-17 10:21:41.974000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-2289,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 11:07:58.906000+00:00 +Internet,RIGHT_case-4157,2010-12-21 01:06:40+00:00,Customer contact,2010-12-17 10:21:41.974000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-3259,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 13:34:40.772000+00:00 +Internet,RIGHT_case-4158,2010-12-21 01:06:40+00:00,Customer contact,2011-01-14 11:39:10.177000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-2550,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 08:34:56.309000+00:00 +Internet,RIGHT_case-4158,2010-12-21 01:06:40+00:00,Customer contact,2011-01-14 11:39:10.177000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-3292,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-08 11:45:40.022000+00:00 +Internet,RIGHT_case-4158,2010-12-21 01:06:40+00:00,Customer contact,2011-01-14 11:39:10.177000+00:00,2010-12-21 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-3293,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-14 13:49:29.028000+00:00 +Internet,RIGHT_case-4159,2010-12-22 01:06:40+00:00,General,2010-12-21 14:28:26.692000+00:00,2010-12-22 01:06:40.010000+00:00,,Resource02,2010-10-27 01:06:40.020000+00:00,task-2148,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-11-26 11:54:25.036000+00:00 +Internet,RIGHT_case-4159,2010-12-22 01:06:40+00:00,General,2010-12-21 14:28:26.692000+00:00,2010-12-22 01:06:40.010000+00:00,,Resource02,2010-10-27 01:06:40.020000+00:00,task-2146,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-11-26 14:23:11.333000+00:00 +Internet,RIGHT_case-4159,2010-12-22 01:06:40+00:00,General,2010-12-21 14:28:26.692000+00:00,2010-12-22 01:06:40.010000+00:00,,Resource02,2010-10-27 01:06:40.020000+00:00,task-2687,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:38:19.085000+00:00 +Internet,RIGHT_case-416,2010-11-26 01:06:40+00:00,General,,2010-11-26 01:06:40.010000+00:00,,Resource26,2010-10-01 01:06:40.020000+00:00,task-315,T02 Check confirmation of receipt,complete,Group 4,Resource21,2010-10-20 12:57:49.263000+00:00 +Internet,RIGHT_case-416,2010-11-26 01:06:40+00:00,General,,2010-11-26 01:06:40.010000+00:00,,Resource26,2010-10-01 01:06:40.020000+00:00,task-318,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2010-10-20 12:59:23.662000+00:00 +Internet,RIGHT_case-416,2010-11-26 01:06:40+00:00,General,,2010-11-26 01:06:40.010000+00:00,,Resource26,2010-10-01 01:06:40.020000+00:00,task-319,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2010-11-08 14:07:42.360000+00:00 +Internet,RIGHT_case-4161,2010-12-27 01:06:40+00:00,General,2011-02-07 10:04:22.258000+00:00,2010-12-27 01:06:40.010000+00:00,,Resource15,2010-10-27 01:06:40.020000+00:00,task-1882,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 09:00:46.351000+00:00 +Internet,RIGHT_case-4175,2010-12-08 00:00:00+00:00,General,2010-12-09 09:06:23.826000+00:00,2010-12-08 00:00:00.010000+00:00,,Resource25,2010-10-08 00:00:00.020000+00:00,task-1355,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2010-11-10 14:28:05.476000+00:00 +Internet,RIGHT_case-4175,2010-12-08 00:00:00+00:00,General,2010-12-09 09:06:23.826000+00:00,2010-12-08 00:00:00.010000+00:00,,Resource25,2010-10-08 00:00:00.020000+00:00,task-982,T02 Check confirmation of receipt,complete,EMPTY,Resource28,2010-11-11 13:20:04.142000+00:00 +Internet,RIGHT_case-4175,2010-12-08 00:00:00+00:00,General,2010-12-09 09:06:23.826000+00:00,2010-12-08 00:00:00.010000+00:00,,Resource25,2010-10-08 00:00:00.020000+00:00,task-1579,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 08:56:13.703000+00:00 +Internet,RIGHT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-2569,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-02 08:13:55.406000+00:00 +Internet,RIGHT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-2567,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-12-02 08:20:08.769000+00:00 +Internet,RIGHT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-2575,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:27:20.046000+00:00 +Internet,RIGHT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-2577,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-12-02 08:28:03.007000+00:00 +Internet,RIGHT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-2580,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 14:31:19.493000+00:00 +Internet,RIGHT_case-4185,2010-12-23 01:06:40+00:00,Customer contact,2010-12-16 15:30:50.573000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource11,2010-10-28 01:06:40.020000+00:00,task-3363,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 13:57:18.174000+00:00 +Internet,RIGHT_case-4186,2010-12-29 00:00:00+00:00,General,2011-01-10 15:40:27.145000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource11,2010-10-29 00:00:00.020000+00:00,task-2561,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-02 08:03:20.160000+00:00 +Internet,RIGHT_case-4186,2010-12-29 00:00:00+00:00,General,2011-01-10 15:40:27.145000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource11,2010-10-29 00:00:00.020000+00:00,task-2559,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 08:37:16.390000+00:00 +Internet,RIGHT_case-4186,2010-12-29 00:00:00+00:00,General,2011-01-10 15:40:27.145000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource11,2010-10-29 00:00:00.020000+00:00,task-3048,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-07 09:09:18.787000+00:00 +Internet,RIGHT_case-4187,2010-12-26 01:06:40+00:00,Customer contact,2010-12-23 08:38:15.922000+00:00,2010-12-26 01:06:40.010000+00:00,,Resource11,2010-10-31 02:06:40.020000+00:00,task-2554,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-02 07:54:35.995000+00:00 +Internet,RIGHT_case-4187,2010-12-26 01:06:40+00:00,Customer contact,2010-12-23 08:38:15.922000+00:00,2010-12-26 01:06:40.010000+00:00,,Resource11,2010-10-31 02:06:40.020000+00:00,task-2552,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 08:35:27.763000+00:00 +Internet,RIGHT_case-4187,2010-12-26 01:06:40+00:00,Customer contact,2010-12-23 08:38:15.922000+00:00,2010-12-26 01:06:40.010000+00:00,,Resource11,2010-10-31 02:06:40.020000+00:00,task-3331,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-14 13:53:30.413000+00:00 +Internet,RIGHT_case-4188,2010-12-29 00:00:00+00:00,General,2010-12-22 12:00:45.003000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource09,2010-10-20 00:00:00.020000+00:00,task-1161,T09-4 Process or receive external advice from party 4,complete,Group 1,Resource09,2010-11-08 12:47:12.538000+00:00 +Internet,RIGHT_case-4188,2010-12-29 00:00:00+00:00,General,2010-12-22 12:00:45.003000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource09,2010-10-20 00:00:00.020000+00:00,task-1163,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2010-11-08 12:49:11.529000+00:00 +Internet,RIGHT_case-4188,2010-12-29 00:00:00+00:00,General,2010-12-22 12:00:45.003000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource09,2010-10-20 00:00:00.020000+00:00,task-1158,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-09 12:13:20.418000+00:00 +Internet,RIGHT_case-4188,2010-12-29 00:00:00+00:00,General,2010-12-22 12:00:45.003000+00:00,2010-12-29 00:00:00.010000+00:00,,Resource09,2010-10-20 00:00:00.020000+00:00,task-1420,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:21:50.718000+00:00 +Internet,RIGHT_case-4208,2010-12-28 01:06:40+00:00,General,2010-12-20 11:17:48.529000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource11,2010-11-02 01:06:40.010000+00:00,task-2583,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:48:34.402000+00:00 +Internet,RIGHT_case-4208,2010-12-28 01:06:40+00:00,General,2010-12-20 11:17:48.529000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource11,2010-11-02 01:06:40.010000+00:00,task-2587,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-02 08:53:00.533000+00:00 +Internet,RIGHT_case-4208,2010-12-28 01:06:40+00:00,General,2010-12-20 11:17:48.529000+00:00,2010-12-28 01:06:40.010000+00:00,,Resource11,2010-11-02 01:06:40.010000+00:00,task-2592,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:54:39.811000+00:00 +Internet,RIGHT_case-4219,2010-12-31 00:00:00+00:00,General,2011-03-29 15:16:05.641000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-3162,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2010-12-07 16:43:55.262000+00:00 +Internet,RIGHT_case-4219,2010-12-31 00:00:00+00:00,General,2011-03-29 15:16:05.641000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-3167,T05 Print and send confirmation of receipt,complete,EMPTY,Resource02,2010-12-07 16:48:44.941000+00:00 +Internet,RIGHT_case-4219,2010-12-31 00:00:00+00:00,General,2011-03-29 15:16:05.641000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource02,2010-10-07 00:00:00.020000+00:00,task-3168,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-07 16:50:10.110000+00:00 +Internet,RIGHT_case-4243,2010-12-29 01:06:40+00:00,Customer contact,2010-12-23 08:11:02.555000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-3229,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 10:07:08.958000+00:00 +Internet,RIGHT_case-4243,2010-12-29 01:06:40+00:00,Customer contact,2010-12-23 08:11:02.555000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-3231,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-08 10:08:28.383000+00:00 +Internet,RIGHT_case-4243,2010-12-29 01:06:40+00:00,Customer contact,2010-12-23 08:11:02.555000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-3257,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 13:31:07.754000+00:00 +Internet,RIGHT_case-4247,2010-12-29 01:06:40+00:00,General,2010-12-23 09:28:01.451000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource07,2010-11-03 01:06:40.010000+00:00,task-2072,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-11-25 16:27:03.105000+00:00 +Internet,RIGHT_case-4247,2010-12-29 01:06:40+00:00,General,2010-12-23 09:28:01.451000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource07,2010-11-03 01:06:40.010000+00:00,task-2070,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-11-30 11:15:10.421000+00:00 +Internet,RIGHT_case-4247,2010-12-29 01:06:40+00:00,General,2010-12-23 09:28:01.451000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource07,2010-11-03 01:06:40.010000+00:00,task-2382,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:26:33.377000+00:00 +Internet,RIGHT_case-4249,2010-12-29 01:06:40+00:00,General,2010-12-21 09:21:08.535000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-2395,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:19:14.969000+00:00 +Internet,RIGHT_case-4249,2010-12-29 01:06:40+00:00,General,2010-12-21 09:21:08.535000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-2400,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-30 12:19:49.002000+00:00 +Internet,RIGHT_case-4249,2010-12-29 01:06:40+00:00,General,2010-12-21 09:21:08.535000+00:00,2010-12-29 01:06:40.010000+00:00,,Resource11,2010-11-03 01:06:40.010000+00:00,task-2405,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-11-30 12:20:46.444000+00:00 +Internet,RIGHT_case-4251,2011-01-03 00:00:00+00:00,General,2010-12-29 10:22:32.417000+00:00,2011-01-03 00:00:00.010000+00:00,,Resource05,2010-10-13 00:00:00.020000+00:00,task-1616,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-11-18 09:25:18.636000+00:00 +Internet,RIGHT_case-4251,2011-01-03 00:00:00+00:00,General,2010-12-29 10:22:32.417000+00:00,2011-01-03 00:00:00.010000+00:00,,Resource05,2010-10-13 00:00:00.020000+00:00,task-1613,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-19 16:22:08.685000+00:00 +Internet,RIGHT_case-4251,2011-01-03 00:00:00+00:00,General,2010-12-29 10:22:32.417000+00:00,2011-01-03 00:00:00.010000+00:00,,Resource05,2010-10-13 00:00:00.020000+00:00,task-1972,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:28:28.886000+00:00 +Internet,RIGHT_case-4255,2010-12-30 01:06:40+00:00,General,2010-12-16 15:21:14.531000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource01,2010-11-04 01:06:40.010000+00:00,task-2412,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:35:52.251000+00:00 +Internet,RIGHT_case-4255,2010-12-30 01:06:40+00:00,General,2010-12-16 15:21:14.531000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource01,2010-11-04 01:06:40.010000+00:00,task-2415,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:37:18.867000+00:00 +Internet,RIGHT_case-4255,2010-12-30 01:06:40+00:00,General,2010-12-16 15:21:14.531000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource01,2010-11-04 01:06:40.010000+00:00,task-2416,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-30 12:37:50.542000+00:00 +Internet,RIGHT_case-4274,2010-12-30 01:06:40+00:00,General,2010-12-24 11:59:41.447000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-1702,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-11-19 10:31:45.859000+00:00 +Internet,RIGHT_case-4274,2010-12-30 01:06:40+00:00,General,2010-12-24 11:59:41.447000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-1698,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-11-19 14:02:07.406000+00:00 +Internet,RIGHT_case-4274,2010-12-30 01:06:40+00:00,General,2010-12-24 11:59:41.447000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-1970,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:29:49.304000+00:00 +Internet,RIGHT_case-4277,2010-12-30 01:06:40+00:00,General,2011-03-15 10:58:41.393000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource02,2010-11-04 01:06:40.010000+00:00,task-2653,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2010-12-06 14:10:19.116000+00:00 +Internet,RIGHT_case-4277,2010-12-30 01:06:40+00:00,General,2011-03-15 10:58:41.393000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource02,2010-11-04 01:06:40.010000+00:00,task-2996,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-06 14:51:10.689000+00:00 +Internet,RIGHT_case-4277,2010-12-30 01:06:40+00:00,General,2011-03-15 10:58:41.393000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource02,2010-11-04 01:06:40.010000+00:00,task-3040,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-07 08:49:10.781000+00:00 +Internet,RIGHT_case-4279,2010-12-10 01:06:40+00:00,General,2011-03-02 08:30:51.773000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-1377,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2010-11-11 14:14:13.332000+00:00 +Internet,RIGHT_case-4279,2010-12-10 01:06:40+00:00,General,2011-03-02 08:30:51.773000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-1344,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2010-11-11 14:32:50.573000+00:00 +Internet,RIGHT_case-4279,2010-12-10 01:06:40+00:00,General,2011-03-02 08:30:51.773000+00:00,2010-12-10 01:06:40.010000+00:00,,Resource12,2010-10-15 01:06:40.020000+00:00,task-1395,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2010-11-11 14:33:31.895000+00:00 +Internet,RIGHT_case-4317,2010-12-30 01:06:40+00:00,General,2010-12-29 12:44:23.411000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource08,2010-11-04 01:06:40.010000+00:00,task-1892,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-23 13:03:09.100000+00:00 +Internet,RIGHT_case-4317,2010-12-30 01:06:40+00:00,General,2010-12-29 12:44:23.411000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource08,2010-11-04 01:06:40.010000+00:00,task-1890,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 08:57:14.441000+00:00 +Internet,RIGHT_case-4317,2010-12-30 01:06:40+00:00,General,2010-12-29 12:44:23.411000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource08,2010-11-04 01:06:40.010000+00:00,task-2130,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 10:02:41.089000+00:00 +Internet,RIGHT_case-4319,2010-12-31 01:06:40+00:00,General,2010-12-17 15:00:28.299000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-2425,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-11-30 13:57:29.374000+00:00 +Internet,RIGHT_case-4319,2010-12-31 01:06:40+00:00,General,2010-12-17 15:00:28.299000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-2431,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 14:00:38.275000+00:00 +Internet,RIGHT_case-4319,2010-12-31 01:06:40+00:00,General,2010-12-17 15:00:28.299000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-2429,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-30 14:01:04.464000+00:00 +Internet,RIGHT_case-4328,2011-01-08 00:00:00+00:00,General,2011-03-21 12:35:29.160000+00:00,2011-01-08 00:00:00.010000+00:00,,Resource51,2010-11-13 00:00:00.010000+00:00,task-14763,T02 Check confirmation of receipt,complete,Group 4,Resource36,2011-03-01 15:50:01.543000+00:00 +Internet,RIGHT_case-4328,2011-01-08 00:00:00+00:00,General,2011-03-21 12:35:29.160000+00:00,2011-01-08 00:00:00.010000+00:00,,Resource51,2010-11-13 00:00:00.010000+00:00,task-14767,T05 Print and send confirmation of receipt,complete,Group 2,Resource36,2011-03-01 15:53:25.806000+00:00 +Internet,RIGHT_case-4328,2011-01-08 00:00:00+00:00,General,2011-03-21 12:35:29.160000+00:00,2011-01-08 00:00:00.010000+00:00,,Resource51,2010-11-13 00:00:00.010000+00:00,task-14766,T10 Determine necessity to stop indication,complete,Group 1,Resource36,2011-03-01 15:55:04.214000+00:00 +Internet,RIGHT_case-4344,2011-01-10 00:00:00+00:00,General,2011-04-04 14:05:56.004000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1823,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-11-23 09:18:53.915000+00:00 +Internet,RIGHT_case-4344,2011-01-10 00:00:00+00:00,General,2011-04-04 14:05:56.004000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1826,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2010-11-23 09:24:11.612000+00:00 +Internet,RIGHT_case-4344,2011-01-10 00:00:00+00:00,General,2011-04-04 14:05:56.004000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1827,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-23 09:27:57.790000+00:00 +Internet,RIGHT_case-4345,2011-01-10 00:00:00+00:00,General,2010-11-30 14:25:46.767000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-1941,T02 Check confirmation of receipt,complete,Group 4,Resource21,2010-11-23 16:08:15.596000+00:00 +Internet,RIGHT_case-4345,2011-01-10 00:00:00+00:00,General,2010-11-30 14:25:46.767000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-2040,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:46:14.548000+00:00 +Internet,RIGHT_case-4345,2011-01-10 00:00:00+00:00,General,2010-11-30 14:25:46.767000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-2428,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-30 13:58:56.702000+00:00 +Internet,RIGHT_case-4346,2011-01-10 00:00:00+00:00,General,2011-08-18 08:42:21.805000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-2020,T02 Check confirmation of receipt,complete,EMPTY,Resource21,2010-11-25 09:09:53.721000+00:00 +Internet,RIGHT_case-4346,2011-01-10 00:00:00+00:00,General,2011-08-18 08:42:21.805000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-2041,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:32:31.628000+00:00 +Internet,RIGHT_case-4346,2011-01-10 00:00:00+00:00,General,2011-08-18 08:42:21.805000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-18944,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource21,2011-04-04 13:51:48.317000+00:00 +Internet,RIGHT_case-4346,2011-01-10 00:00:00+00:00,General,2011-08-18 08:42:21.805000+00:00,2011-01-10 00:00:00.010000+00:00,,Resource21,2010-11-15 00:00:00.010000+00:00,task-18946,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-04-04 13:54:21.379000+00:00 +Internet,RIGHT_case-4380,2010-12-23 01:06:40+00:00,General,2010-12-22 16:21:33.700000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource15,2010-11-01 01:06:40.010000+00:00,task-1884,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 08:58:13.474000+00:00 +Internet,RIGHT_case-4380,2010-12-23 01:06:40+00:00,General,2010-12-22 16:21:33.700000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource15,2010-11-01 01:06:40.010000+00:00,task-2305,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-11-30 08:40:35.638000+00:00 +Internet,RIGHT_case-4380,2010-12-23 01:06:40+00:00,General,2010-12-22 16:21:33.700000+00:00,2010-12-23 01:06:40.010000+00:00,,Resource15,2010-11-01 01:06:40.010000+00:00,task-2304,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:16:35.712000+00:00 +Internet,RIGHT_case-4384,2010-12-31 01:06:40+00:00,General,2010-12-14 16:11:07.326000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource01,2010-11-05 01:06:40.010000+00:00,task-3856,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-13 11:54:37.414000+00:00 +Internet,RIGHT_case-4384,2010-12-31 01:06:40+00:00,General,2010-12-14 16:11:07.326000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource01,2010-11-05 01:06:40.010000+00:00,task-3854,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 11:55:48.228000+00:00 +Internet,RIGHT_case-4384,2010-12-31 01:06:40+00:00,General,2010-12-14 16:11:07.326000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource01,2010-11-05 01:06:40.010000+00:00,task-3861,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 11:56:47.362000+00:00 +Internet,RIGHT_case-4388,2010-12-16 01:06:40+00:00,General,2010-12-13 14:06:03.626000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource04,2010-10-21 01:06:40.020000+00:00,task-1696,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-19 10:30:25.507000+00:00 +Internet,RIGHT_case-4388,2010-12-16 01:06:40+00:00,General,2010-12-13 14:06:03.626000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource04,2010-10-21 01:06:40.020000+00:00,task-1694,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2010-11-19 10:33:50.591000+00:00 +Internet,RIGHT_case-4388,2010-12-16 01:06:40+00:00,General,2010-12-13 14:06:03.626000+00:00,2010-12-16 01:06:40.010000+00:00,,Resource04,2010-10-21 01:06:40.020000+00:00,task-1889,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2010-11-23 12:48:54.429000+00:00 +Internet,RIGHT_case-4395,2011-01-03 01:06:40+00:00,General,2010-12-23 08:12:42.801000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3895,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:51:14.991000+00:00 +Internet,RIGHT_case-4395,2011-01-03 01:06:40+00:00,General,2010-12-23 08:12:42.801000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3902,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:52:39.872000+00:00 +Internet,RIGHT_case-4395,2011-01-03 01:06:40+00:00,General,2010-12-23 08:12:42.801000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3897,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-13 12:53:15.462000+00:00 +Internet,RIGHT_case-4396,2010-12-30 01:06:40+00:00,General,2010-12-23 08:12:07.587000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource07,2010-11-04 01:06:40.010000+00:00,task-2080,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-11-25 16:36:17.475000+00:00 +Internet,RIGHT_case-4396,2010-12-30 01:06:40+00:00,General,2010-12-23 08:12:07.587000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource07,2010-11-04 01:06:40.010000+00:00,task-2078,T02 Check confirmation of receipt,complete,Group 4,Resource32,2010-11-25 17:36:52.317000+00:00 +Internet,RIGHT_case-4396,2010-12-30 01:06:40+00:00,General,2010-12-23 08:12:07.587000+00:00,2010-12-30 01:06:40.010000+00:00,,Resource07,2010-11-04 01:06:40.010000+00:00,task-2394,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:18:46.819000+00:00 +Internet,RIGHT_case-4397,2011-01-05 01:06:40+00:00,Customer contact,2011-01-03 11:20:14.128000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource11,2010-11-10 01:06:40.010000+00:00,task-4316,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 08:44:09.988000+00:00 +Internet,RIGHT_case-4397,2011-01-05 01:06:40+00:00,Customer contact,2011-01-03 11:20:14.128000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource11,2010-11-10 01:06:40.010000+00:00,task-4314,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 08:58:06.213000+00:00 +Internet,RIGHT_case-4397,2011-01-05 01:06:40+00:00,Customer contact,2011-01-03 11:20:14.128000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource11,2010-11-10 01:06:40.010000+00:00,task-4350,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-15 09:08:44.350000+00:00 +Internet,RIGHT_case-4401,2010-12-20 01:06:40+00:00,Customer contact,2010-12-10 14:27:40.740000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource11,2010-10-25 01:06:40.020000+00:00,task-3449,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-12-09 11:41:54.519000+00:00 +Internet,RIGHT_case-4401,2010-12-20 01:06:40+00:00,Customer contact,2010-12-10 14:27:40.740000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource11,2010-10-25 01:06:40.020000+00:00,task-3458,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-09 11:44:55.698000+00:00 +Internet,RIGHT_case-4401,2010-12-20 01:06:40+00:00,Customer contact,2010-12-10 14:27:40.740000+00:00,2010-12-20 01:06:40.010000+00:00,,Resource11,2010-10-25 01:06:40.020000+00:00,task-3457,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-10 10:05:41.449000+00:00 +Internet,RIGHT_case-4403,2011-01-12 01:06:40+00:00,General,2010-12-17 08:49:03.043000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-3791,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-13 10:29:20.204000+00:00 +Internet,RIGHT_case-4403,2011-01-12 01:06:40+00:00,General,2010-12-17 08:49:03.043000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-3794,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-13 10:30:05.509000+00:00 +Internet,RIGHT_case-4403,2011-01-12 01:06:40+00:00,General,2010-12-17 08:49:03.043000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource11,2010-10-26 01:06:40.020000+00:00,task-3795,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-13 10:39:16.049000+00:00 +Internet,RIGHT_case-4407,2011-12-21 01:06:40+00:00,General,2010-12-17 09:10:48.138000+00:00,2011-12-21 01:06:40.010000+00:00,,Resource34,2010-10-26 01:06:40.020000+00:00,task-3770,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-13 10:15:06.626000+00:00 +Internet,RIGHT_case-4407,2011-12-21 01:06:40+00:00,General,2010-12-17 09:10:48.138000+00:00,2011-12-21 01:06:40.010000+00:00,,Resource34,2010-10-26 01:06:40.020000+00:00,task-3774,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-13 10:16:08.245000+00:00 +Internet,RIGHT_case-4407,2011-12-21 01:06:40+00:00,General,2010-12-17 09:10:48.138000+00:00,2011-12-21 01:06:40.010000+00:00,,Resource34,2010-10-26 01:06:40.020000+00:00,task-3775,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-13 10:21:25.358000+00:00 +Internet,RIGHT_case-4408,2011-01-07 01:06:40+00:00,Customer contact,2010-12-30 11:54:42.174000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource11,2010-11-12 01:06:40.010000+00:00,task-4366,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 09:34:41.886000+00:00 +Internet,RIGHT_case-4408,2011-01-07 01:06:40+00:00,Customer contact,2010-12-30 11:54:42.174000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource11,2010-11-12 01:06:40.010000+00:00,task-4364,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:23:35.595000+00:00 +Internet,RIGHT_case-4408,2011-01-07 01:06:40+00:00,Customer contact,2010-12-30 11:54:42.174000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource11,2010-11-12 01:06:40.010000+00:00,task-4585,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:09:53.180000+00:00 +Internet,RIGHT_case-4410,2010-12-31 01:06:40+00:00,General,2010-12-21 16:58:51.915000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-3864,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-12-13 12:03:51.008000+00:00 +Internet,RIGHT_case-4410,2010-12-31 01:06:40+00:00,General,2010-12-21 16:58:51.915000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-3867,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:04:49.579000+00:00 +Internet,RIGHT_case-4410,2010-12-31 01:06:40+00:00,General,2010-12-21 16:58:51.915000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-3868,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-13 12:05:24.780000+00:00 +Internet,RIGHT_case-4411,2010-12-31 01:06:40+00:00,General,2011-01-21 16:16:25.452000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource15,2010-11-05 01:06:40.010000+00:00,task-1976,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-11-24 11:42:11.894000+00:00 +Internet,RIGHT_case-4411,2010-12-31 01:06:40+00:00,General,2011-01-21 16:16:25.452000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource15,2010-11-05 01:06:40.010000+00:00,task-1886,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 08:58:36.790000+00:00 +Internet,RIGHT_case-4411,2010-12-31 01:06:40+00:00,General,2011-01-21 16:16:25.452000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource15,2010-11-05 01:06:40.010000+00:00,task-2319,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:17:13.976000+00:00 +Internet,RIGHT_case-4413,2010-12-31 01:06:40+00:00,General,2010-12-23 08:10:26.014000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-4288,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 08:13:46.791000+00:00 +Internet,RIGHT_case-4413,2010-12-31 01:06:40+00:00,General,2010-12-23 08:10:26.014000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-4286,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 08:55:20.876000+00:00 +Internet,RIGHT_case-4413,2010-12-31 01:06:40+00:00,General,2010-12-23 08:10:26.014000+00:00,2010-12-31 01:06:40.010000+00:00,,Resource11,2010-11-05 01:06:40.010000+00:00,task-4437,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:11:24.730000+00:00 +Internet,RIGHT_case-4414,2010-12-15 01:06:40+00:00,General,2010-12-20 14:49:55.261000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource04,2010-10-20 01:06:40.020000+00:00,task-1679,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-19 09:12:51.630000+00:00 +Internet,RIGHT_case-4414,2010-12-15 01:06:40+00:00,General,2010-12-20 14:49:55.261000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource04,2010-10-20 01:06:40.020000+00:00,task-1677,T02 Check confirmation of receipt,complete,EMPTY,Resource14,2010-11-19 09:13:40.046000+00:00 +Internet,RIGHT_case-4414,2010-12-15 01:06:40+00:00,General,2010-12-20 14:49:55.261000+00:00,2010-12-15 01:06:40.010000+00:00,,Resource04,2010-10-20 01:06:40.020000+00:00,task-1888,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:25:07.358000+00:00 +Internet,RIGHT_case-4437,2011-01-03 01:06:40+00:00,General,2011-01-14 11:39:00.429000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource15,2010-11-08 01:06:40.010000+00:00,task-3350,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-08 14:07:33.763000+00:00 +Internet,RIGHT_case-4437,2011-01-03 01:06:40+00:00,General,2011-01-14 11:39:00.429000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource15,2010-11-08 01:06:40.010000+00:00,task-3353,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 13:53:47.516000+00:00 +Internet,RIGHT_case-4437,2011-01-03 01:06:40+00:00,General,2011-01-14 11:39:00.429000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource15,2010-11-08 01:06:40.010000+00:00,task-5587,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-24 10:11:08.029000+00:00 +Internet,RIGHT_case-4498,2011-01-03 01:06:40+00:00,General,2010-12-27 09:32:51.456000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-2350,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-11-30 09:57:25.842000+00:00 +Internet,RIGHT_case-4498,2011-01-03 01:06:40+00:00,General,2010-12-27 09:32:51.456000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-2347,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 14:38:12.562000+00:00 +Internet,RIGHT_case-4498,2011-01-03 01:06:40+00:00,General,2010-12-27 09:32:51.456000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3136,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-08 09:35:45.376000+00:00 +Internet,RIGHT_case-4500,2010-12-07 00:00:00+00:00,General,2010-12-07 10:30:13.041000+00:00,2010-12-07 00:00:00.010000+00:00,,Resource04,2010-10-12 00:00:00.020000+00:00,task-1988,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-11-24 16:02:37.600000+00:00 +Internet,RIGHT_case-4500,2010-12-07 00:00:00+00:00,General,2010-12-07 10:30:13.041000+00:00,2010-12-07 00:00:00.010000+00:00,,Resource04,2010-10-12 00:00:00.020000+00:00,task-1992,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-24 16:03:16.770000+00:00 +Internet,RIGHT_case-4500,2010-12-07 00:00:00+00:00,General,2010-12-07 10:30:13.041000+00:00,2010-12-07 00:00:00.010000+00:00,,Resource04,2010-10-12 00:00:00.020000+00:00,task-1991,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2010-11-24 16:26:00.225000+00:00 +Internet,RIGHT_case-4502,2011-01-03 01:06:40+00:00,General,2010-12-27 09:33:21.478000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3960,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-12-13 13:59:42.994000+00:00 +Internet,RIGHT_case-4502,2011-01-03 01:06:40+00:00,General,2010-12-27 09:33:21.478000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3963,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-13 14:01:38.027000+00:00 +Internet,RIGHT_case-4502,2011-01-03 01:06:40+00:00,General,2010-12-27 09:33:21.478000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource01,2010-11-08 01:06:40.010000+00:00,task-3966,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-13 14:01:56.554000+00:00 +Internet,RIGHT_case-4503,2010-12-28 00:00:00+00:00,General,2010-12-24 11:31:03.532000+00:00,2010-12-28 00:00:00.010000+00:00,,Resource17,2010-11-02 00:00:00.010000+00:00,task-3443,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-09 12:51:04.296000+00:00 +Internet,RIGHT_case-4503,2010-12-28 00:00:00+00:00,General,2010-12-24 11:31:03.532000+00:00,2010-12-28 00:00:00.010000+00:00,,Resource17,2010-11-02 00:00:00.010000+00:00,task-3490,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:01:54.490000+00:00 +Internet,RIGHT_case-4503,2010-12-28 00:00:00+00:00,General,2010-12-24 11:31:03.532000+00:00,2010-12-28 00:00:00.010000+00:00,,Resource17,2010-11-02 00:00:00.010000+00:00,task-4854,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-17 10:51:35.454000+00:00 +Internet,RIGHT_case-4504,2010-12-31 00:00:00+00:00,General,2010-12-29 10:59:05.066000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource05,2010-11-05 00:00:00.010000+00:00,task-2848,T02 Check confirmation of receipt,complete,Group 4,Resource05,2010-12-06 10:46:53.521000+00:00 +Internet,RIGHT_case-4504,2010-12-31 00:00:00+00:00,General,2010-12-29 10:59:05.066000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource05,2010-11-05 00:00:00.010000+00:00,task-2854,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-12-06 10:48:47.503000+00:00 +Internet,RIGHT_case-4504,2010-12-31 00:00:00+00:00,General,2010-12-29 10:59:05.066000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource05,2010-11-05 00:00:00.010000+00:00,task-2920,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2010-12-06 11:24:09.769000+00:00 +Internet,RIGHT_case-4505,2011-02-10 01:06:40+00:00,General,2011-02-08 13:23:14.212000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-3105,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-07 14:00:30.156000+00:00 +Internet,RIGHT_case-4505,2011-02-10 01:06:40+00:00,General,2011-02-08 13:23:14.212000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-3103,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-08 09:19:42.102000+00:00 +Internet,RIGHT_case-4505,2011-02-10 01:06:40+00:00,General,2011-02-08 13:23:14.212000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-11-04 01:06:40.010000+00:00,task-3312,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 13:46:55.828000+00:00 +Internet,RIGHT_case-4509,2011-01-04 00:00:00+00:00,General,2010-12-29 15:36:23.770000+00:00,2011-01-04 00:00:00.010000+00:00,,Resource15,2010-11-09 00:00:00.010000+00:00,task-2819,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-06 09:26:09.124000+00:00 +Internet,RIGHT_case-4509,2011-01-04 00:00:00+00:00,General,2010-12-29 15:36:23.770000+00:00,2011-01-04 00:00:00.010000+00:00,,Resource15,2010-11-09 00:00:00.010000+00:00,task-2824,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-06 09:31:52.506000+00:00 +Internet,RIGHT_case-4509,2011-01-04 00:00:00+00:00,General,2010-12-29 15:36:23.770000+00:00,2011-01-04 00:00:00.010000+00:00,,Resource15,2010-11-09 00:00:00.010000+00:00,task-2953,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:09:15.693000+00:00 +Internet,RIGHT_case-4511,2011-01-05 00:00:00+00:00,General,2011-01-05 14:46:51.620000+00:00,2011-01-05 00:00:00.010000+00:00,,Resource08,2010-11-10 00:00:00.010000+00:00,task-2690,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-03 12:12:46.827000+00:00 +Internet,RIGHT_case-4511,2011-01-05 00:00:00+00:00,General,2011-01-05 14:46:51.620000+00:00,2011-01-05 00:00:00.010000+00:00,,Resource08,2010-11-10 00:00:00.010000+00:00,task-2693,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-03 12:13:27.511000+00:00 +Internet,RIGHT_case-4511,2011-01-05 00:00:00+00:00,General,2011-01-05 14:46:51.620000+00:00,2011-01-05 00:00:00.010000+00:00,,Resource08,2010-11-10 00:00:00.010000+00:00,task-2703,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:39:47.169000+00:00 +Internet,RIGHT_case-4512,2011-05-26 01:06:40+00:00,General,2011-04-19 13:21:09.087000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource02,2010-11-12 01:06:40.010000+00:00,task-3417,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-12-22 14:09:43.539000+00:00 +Internet,RIGHT_case-4512,2011-05-26 01:06:40+00:00,General,2011-04-19 13:21:09.087000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource02,2010-11-12 01:06:40.010000+00:00,task-5466,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 10:01:18.997000+00:00 +Internet,RIGHT_case-4512,2011-05-26 01:06:40+00:00,General,2011-04-19 13:21:09.087000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource02,2010-11-12 01:06:40.010000+00:00,task-6908,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-05 15:41:43.800000+00:00 +Internet,RIGHT_case-4513,2011-01-11 01:06:40+00:00,General,2011-01-07 14:47:52.474000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource15,2010-11-16 01:06:40.010000+00:00,task-2747,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-03 14:25:37.215000+00:00 +Internet,RIGHT_case-4513,2011-01-11 01:06:40+00:00,General,2011-01-07 14:47:52.474000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource15,2010-11-16 01:06:40.010000+00:00,task-2754,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:24:42.802000+00:00 +Internet,RIGHT_case-4513,2011-01-11 01:06:40+00:00,General,2011-01-07 14:47:52.474000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource15,2010-11-16 01:06:40.010000+00:00,task-3218,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-08 09:43:49.538000+00:00 +Internet,RIGHT_case-4515,2011-01-03 01:06:40+00:00,General,2010-12-17 15:13:58.294000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource07,2010-11-08 01:06:40.010000+00:00,task-2596,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-02 09:22:48.215000+00:00 +Internet,RIGHT_case-4515,2011-01-03 01:06:40+00:00,General,2010-12-17 15:13:58.294000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource07,2010-11-08 01:06:40.010000+00:00,task-2594,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-02 09:23:22.313000+00:00 +Internet,RIGHT_case-4515,2011-01-03 01:06:40+00:00,General,2010-12-17 15:13:58.294000+00:00,2011-01-03 01:06:40.010000+00:00,,Resource07,2010-11-08 01:06:40.010000+00:00,task-2601,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:33:31.641000+00:00 +Internet,RIGHT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-3467,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-09 13:44:21.064000+00:00 +Internet,RIGHT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-6670,T12 Check document X request unlicensed,complete,EMPTY,Resource24,2011-01-04 11:58:58.041000+00:00 +Internet,RIGHT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-3465,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 08:57:03.458000+00:00 +Internet,RIGHT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-7150,T05 Print and send confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 08:58:30.889000+00:00 +Internet,RIGHT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-7151,T12 Check document X request unlicensed,complete,Group 4,Resource17,2011-01-07 08:59:10.268000+00:00 +Internet,RIGHT_case-4516,2011-01-12 01:06:40+00:00,General,2011-01-10 11:01:52.963000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource17,2010-11-17 01:06:40.010000+00:00,task-7223,T15 Print document X request unlicensed,complete,Group 2,Resource17,2011-01-10 11:01:52.812000+00:00 +Internet,RIGHT_case-4517,2011-01-12 00:00:00+00:00,General,2011-01-04 09:31:35.967000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource01,2010-11-17 00:00:00.010000+00:00,task-4422,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 10:50:35.547000+00:00 +Internet,RIGHT_case-4517,2011-01-12 00:00:00+00:00,General,2011-01-04 09:31:35.967000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource01,2010-11-17 00:00:00.010000+00:00,task-4425,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 10:52:34.597000+00:00 +Internet,RIGHT_case-4517,2011-01-12 00:00:00+00:00,General,2011-01-04 09:31:35.967000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource01,2010-11-17 00:00:00.010000+00:00,task-4627,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:17:19.301000+00:00 +Internet,RIGHT_case-4518,2011-01-12 00:00:00+00:00,General,2010-12-13 10:05:15.332000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource05,2010-11-17 00:00:00.010000+00:00,task-2884,T02 Check confirmation of receipt,complete,Group 4,Resource05,2010-12-06 11:10:28.555000+00:00 +Internet,RIGHT_case-4518,2011-01-12 00:00:00+00:00,General,2010-12-13 10:05:15.332000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource05,2010-11-17 00:00:00.010000+00:00,task-2888,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-12-06 11:12:27.556000+00:00 +Internet,RIGHT_case-4518,2011-01-12 00:00:00+00:00,General,2010-12-13 10:05:15.332000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource05,2010-11-17 00:00:00.010000+00:00,task-2887,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2010-12-06 11:13:36.416000+00:00 +Internet,RIGHT_case-4518,2011-01-12 00:00:00+00:00,General,2010-12-13 10:05:15.332000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource05,2010-11-17 00:00:00.010000+00:00,task-2907,T12 Check document X request unlicensed,complete,Group 4,Resource05,2010-12-13 09:58:10.924000+00:00 +Internet,RIGHT_case-4518,2011-01-12 00:00:00+00:00,General,2010-12-13 10:05:15.332000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource05,2010-11-17 00:00:00.010000+00:00,task-3758,T15 Print document X request unlicensed,complete,Group 2,Resource05,2010-12-13 10:05:15.164000+00:00 +Internet,RIGHT_case-4519,2011-01-12 01:06:40+00:00,General,2010-12-24 10:59:35.765000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource01,2010-11-17 01:06:40.010000+00:00,task-4442,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 11:14:33.948000+00:00 +Internet,RIGHT_case-4519,2011-01-12 01:06:40+00:00,General,2010-12-24 10:59:35.765000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource01,2010-11-17 01:06:40.010000+00:00,task-4448,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 11:16:02.558000+00:00 +Internet,RIGHT_case-4519,2011-01-12 01:06:40+00:00,General,2010-12-24 10:59:35.765000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource01,2010-11-17 01:06:40.010000+00:00,task-4622,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:15:45.864000+00:00 +Internet,RIGHT_case-4526,2011-01-04 01:06:40+00:00,General,2011-01-04 15:11:30.255000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource08,2010-11-09 01:06:40.010000+00:00,task-2763,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-03 15:54:20.198000+00:00 +Internet,RIGHT_case-4526,2011-01-04 01:06:40+00:00,General,2011-01-04 15:11:30.255000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource08,2010-11-09 01:06:40.010000+00:00,task-2788,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:26:34.572000+00:00 +Internet,RIGHT_case-4526,2011-01-04 01:06:40+00:00,General,2011-01-04 15:11:30.255000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource08,2010-11-09 01:06:40.010000+00:00,task-3497,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-21 11:48:46.252000+00:00 +Internet,RIGHT_case-4527,2011-02-24 01:06:40+00:00,General,2011-01-31 11:39:05.417000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource02,2010-11-18 01:06:40.010000+00:00,task-7511,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-11 07:54:35.176000+00:00 +Internet,RIGHT_case-4527,2011-02-24 01:06:40+00:00,General,2011-01-31 11:39:05.417000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource02,2010-11-18 01:06:40.010000+00:00,task-7519,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 09:16:51.017000+00:00 +Internet,RIGHT_case-4527,2011-02-24 01:06:40+00:00,General,2011-01-31 11:39:05.417000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource02,2010-11-18 01:06:40.010000+00:00,task-7678,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-11 12:33:06.980000+00:00 +Internet,RIGHT_case-4529,2011-01-13 00:00:00+00:00,General,2011-01-28 13:14:26.380000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource02,2010-11-18 00:00:00.010000+00:00,task-2720,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-06 11:03:30.734000+00:00 +Internet,RIGHT_case-4529,2011-01-13 00:00:00+00:00,General,2011-01-28 13:14:26.380000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource02,2010-11-18 00:00:00.010000+00:00,task-2955,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:10:14.038000+00:00 +Internet,RIGHT_case-4529,2011-01-13 00:00:00+00:00,General,2011-01-28 13:14:26.380000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource02,2010-11-18 00:00:00.010000+00:00,task-3125,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-07 14:32:36.452000+00:00 +Internet,RIGHT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2943,T02 Check confirmation of receipt,complete,Group 4,Resource05,2010-12-06 11:48:57.302000+00:00 +Internet,RIGHT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2964,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-12-06 11:56:22.116000+00:00 +Internet,RIGHT_case-4532,2011-01-14 01:06:40+00:00,General,2010-12-22 10:20:02.829000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource05,2010-11-19 01:06:40.010000+00:00,task-2948,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:04:27.090000+00:00 +Internet,RIGHT_case-4533,2011-01-04 01:06:40+00:00,General,2010-12-17 00:00:00.010000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-2728,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-03 13:58:47.227000+00:00 +Internet,RIGHT_case-4533,2011-01-04 01:06:40+00:00,General,2010-12-17 00:00:00.010000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-2751,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:22:14.802000+00:00 +Internet,RIGHT_case-4533,2011-01-04 01:06:40+00:00,General,2010-12-17 00:00:00.010000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-4657,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-16 11:19:20.894000+00:00 +Internet,RIGHT_case-4534,2011-01-04 01:06:40+00:00,General,2011-01-10 13:23:01.068000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4065,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-14 10:00:36.354000+00:00 +Internet,RIGHT_case-4534,2011-01-04 01:06:40+00:00,General,2011-01-10 13:23:01.068000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4070,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-14 10:04:17.190000+00:00 +Internet,RIGHT_case-4534,2011-01-04 01:06:40+00:00,General,2011-01-10 13:23:01.068000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4440,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:14:01.720000+00:00 +Internet,RIGHT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-4240,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:19:10.470000+00:00 +Internet,RIGHT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-4789,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:23:50.542000+00:00 +Internet,RIGHT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-8184,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-31 11:01:18.270000+00:00 +Internet,RIGHT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-12325,T17 Check report Y to stop indication,complete,Group 4,Resource12,2011-02-15 14:40:44.022000+00:00 +Internet,RIGHT_case-4537,2011-01-04 01:06:40+00:00,General,,2011-01-04 01:06:40.010000+00:00,,Resource12,2010-11-09 01:06:40.010000+00:00,task-12329,T20 Print report Y to stop indication,complete,Group 2,Resource12,2011-02-15 14:43:43.912000+00:00 +Internet,RIGHT_case-4538,2011-01-04 01:06:40+00:00,General,2010-12-24 10:32:30.453000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4097,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-14 11:31:29.201000+00:00 +Internet,RIGHT_case-4538,2011-01-04 01:06:40+00:00,General,2010-12-24 10:32:30.453000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4100,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-14 11:32:48.547000+00:00 +Internet,RIGHT_case-4538,2011-01-04 01:06:40+00:00,General,2010-12-24 10:32:30.453000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4447,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:14:59.683000+00:00 +Internet,RIGHT_case-4539,2010-12-24 00:00:00+00:00,General,2010-12-24 14:55:51.294000+00:00,2010-12-24 00:00:00.010000+00:00,,Resource09,2010-10-29 00:00:00.020000+00:00,task-3245,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource09,2010-12-08 10:37:47.194000+00:00 +Internet,RIGHT_case-4539,2010-12-24 00:00:00+00:00,General,2010-12-24 14:55:51.294000+00:00,2010-12-24 00:00:00.010000+00:00,,Resource09,2010-10-29 00:00:00.020000+00:00,task-3246,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource09,2010-12-08 10:38:33.164000+00:00 +Internet,RIGHT_case-4539,2010-12-24 00:00:00+00:00,General,2010-12-24 14:55:51.294000+00:00,2010-12-24 00:00:00.010000+00:00,,Resource09,2010-10-29 00:00:00.020000+00:00,task-3248,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2010-12-08 10:39:22.815000+00:00 +Internet,RIGHT_case-4539,2010-12-24 00:00:00+00:00,General,2010-12-24 14:55:51.294000+00:00,2010-12-24 00:00:00.010000+00:00,,Resource09,2010-10-29 00:00:00.020000+00:00,task-3242,T02 Check confirmation of receipt,complete,EMPTY,Resource09,2010-12-20 14:21:51.192000+00:00 +Internet,RIGHT_case-4539,2010-12-24 00:00:00+00:00,General,2010-12-24 14:55:51.294000+00:00,2010-12-24 00:00:00.010000+00:00,,Resource09,2010-10-29 00:00:00.020000+00:00,task-5156,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2010-12-20 14:23:42.284000+00:00 +Internet,RIGHT_case-4540,2011-01-19 00:00:00+00:00,General,2010-12-23 15:15:58.399000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3974,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-13 14:14:06.699000+00:00 +Internet,RIGHT_case-4540,2011-01-19 00:00:00+00:00,General,2010-12-23 15:15:58.399000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3978,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-13 14:15:15.140000+00:00 +Internet,RIGHT_case-4540,2011-01-19 00:00:00+00:00,General,2010-12-23 15:15:58.399000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3976,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-13 16:38:02.696000+00:00 +Internet,RIGHT_case-4546,2011-01-20 00:00:00+00:00,General,2011-01-12 14:38:39.025000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource05,2010-11-25 00:00:00.010000+00:00,task-2975,T02 Check confirmation of receipt,complete,Group 4,Resource05,2010-12-06 12:34:43.472000+00:00 +Internet,RIGHT_case-4546,2011-01-20 00:00:00+00:00,General,2011-01-12 14:38:39.025000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource05,2010-11-25 00:00:00.010000+00:00,task-2978,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-12-06 12:35:27.484000+00:00 +Internet,RIGHT_case-4546,2011-01-20 00:00:00+00:00,General,2011-01-12 14:38:39.025000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource05,2010-11-25 00:00:00.010000+00:00,task-3019,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-07 08:32:28.223000+00:00 +Internet,RIGHT_case-4553,2011-02-15 01:06:40+00:00,General,2011-01-19 13:55:58.483000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-2736,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-06 11:02:58.683000+00:00 +Internet,RIGHT_case-4553,2011-02-15 01:06:40+00:00,General,2011-01-19 13:55:58.483000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-2966,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:11:57.194000+00:00 +Internet,RIGHT_case-4553,2011-02-15 01:06:40+00:00,General,2011-01-19 13:55:58.483000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-3900,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource02,2010-12-13 12:52:55.750000+00:00 +Internet,RIGHT_case-4553,2011-02-15 01:06:40+00:00,General,2011-01-19 13:55:58.483000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource02,2010-11-09 01:06:40.010000+00:00,task-3909,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-13 12:55:53.481000+00:00 +Internet,RIGHT_case-4554,2011-01-04 01:06:40+00:00,General,2011-01-04 09:32:14.134000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4118,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-14 11:58:42.082000+00:00 +Internet,RIGHT_case-4554,2011-01-04 01:06:40+00:00,General,2011-01-04 09:32:14.134000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4122,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-14 12:06:16.251000+00:00 +Internet,RIGHT_case-4554,2011-01-04 01:06:40+00:00,General,2011-01-04 09:32:14.134000+00:00,2011-01-04 01:06:40.010000+00:00,,Resource01,2010-11-09 01:06:40.010000+00:00,task-4456,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:21:11.832000+00:00 +Internet,RIGHT_case-4555,2011-01-05 01:06:40+00:00,General,2010-12-04 00:00:00.010000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-11-10 01:06:40.010000+00:00,task-3144,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-07 14:57:33.329000+00:00 +Internet,RIGHT_case-4555,2011-01-05 01:06:40+00:00,General,2010-12-04 00:00:00.010000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-11-10 01:06:40.010000+00:00,task-3147,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-07 14:58:21.998000+00:00 +Internet,RIGHT_case-4555,2011-01-05 01:06:40+00:00,General,2010-12-04 00:00:00.010000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource08,2010-11-10 01:06:40.010000+00:00,task-3181,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-08 09:40:15.864000+00:00 +Internet,RIGHT_case-4556,2011-01-05 01:06:40+00:00,General,2011-01-04 10:04:20.408000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource04,2010-11-10 01:06:40.010000+00:00,task-2225,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-11-29 14:15:30.723000+00:00 +Internet,RIGHT_case-4556,2011-01-05 01:06:40+00:00,General,2011-01-04 10:04:20.408000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource04,2010-11-10 01:06:40.010000+00:00,task-2232,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-29 14:29:07.956000+00:00 +Internet,RIGHT_case-4556,2011-01-05 01:06:40+00:00,General,2011-01-04 10:04:20.408000+00:00,2011-01-05 01:06:40.010000+00:00,,Resource04,2010-11-10 01:06:40.010000+00:00,task-2229,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 10:17:33.827000+00:00 +Internet,RIGHT_case-4559,2011-01-06 01:06:40+00:00,General,2011-01-31 12:44:28.588000+00:00,2011-01-06 01:06:40.010000+00:00,,Resource01,2010-11-11 01:06:40.010000+00:00,task-4136,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-14 12:24:50.979000+00:00 +Internet,RIGHT_case-4559,2011-01-06 01:06:40+00:00,General,2011-01-31 12:44:28.588000+00:00,2011-01-06 01:06:40.010000+00:00,,Resource01,2010-11-11 01:06:40.010000+00:00,task-4139,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-14 12:26:08.036000+00:00 +Internet,RIGHT_case-4559,2011-01-06 01:06:40+00:00,General,2011-01-31 12:44:28.588000+00:00,2011-01-06 01:06:40.010000+00:00,,Resource01,2010-11-11 01:06:40.010000+00:00,task-4469,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:18:04.905000+00:00 +Internet,RIGHT_case-4560,2011-01-07 01:06:40+00:00,General,2011-01-04 09:31:19.742000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-4322,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 08:50:57.304000+00:00 +Internet,RIGHT_case-4560,2011-01-07 01:06:40+00:00,General,2011-01-04 09:31:19.742000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-4325,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 08:54:44.709000+00:00 +Internet,RIGHT_case-4560,2011-01-07 01:06:40+00:00,General,2011-01-04 09:31:19.742000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-4436,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:16:01.021000+00:00 +Internet,RIGHT_case-4563,2011-01-07 01:06:40+00:00,General,2011-01-10 15:39:15.646000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-4536,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 14:08:19.176000+00:00 +Internet,RIGHT_case-4563,2011-01-07 01:06:40+00:00,General,2011-01-10 15:39:15.646000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-4534,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:59:33.212000+00:00 +Internet,RIGHT_case-4563,2011-01-07 01:06:40+00:00,General,2011-01-10 15:39:15.646000+00:00,2011-01-07 01:06:40.010000+00:00,,Resource01,2010-11-12 01:06:40.010000+00:00,task-4646,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:22:12.235000+00:00 +Internet,RIGHT_case-4565,2011-01-21 01:06:40+00:00,General,2011-01-21 11:50:25.729000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-11-12 01:06:40.010000+00:00,task-3997,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-13 15:25:12.686000+00:00 +Internet,RIGHT_case-4565,2011-01-21 01:06:40+00:00,General,2011-01-21 11:50:25.729000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-11-12 01:06:40.010000+00:00,task-3994,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-14 08:48:17.357000+00:00 +Internet,RIGHT_case-4565,2011-01-21 01:06:40+00:00,General,2011-01-21 11:50:25.729000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-11-12 01:06:40.010000+00:00,task-4062,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-14 13:05:45.917000+00:00 +Internet,RIGHT_case-4582,2011-01-08 01:06:40+00:00,General,2010-12-23 08:16:13.446000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2862,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-06 10:52:58.348000+00:00 +Internet,RIGHT_case-4582,2011-01-08 01:06:40+00:00,General,2010-12-23 08:16:13.446000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2865,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-06 10:54:44.003000+00:00 +Internet,RIGHT_case-4582,2011-01-08 01:06:40+00:00,General,2010-12-23 08:16:13.446000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2872,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:42:59.019000+00:00 +Internet,RIGHT_case-4583,2011-01-08 01:06:40+00:00,General,2010-12-31 15:49:44.284000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2889,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-06 11:15:59.708000+00:00 +Internet,RIGHT_case-4583,2011-01-08 01:06:40+00:00,General,2010-12-31 15:49:44.284000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2892,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-06 11:16:23.369000+00:00 +Internet,RIGHT_case-4583,2011-01-08 01:06:40+00:00,General,2010-12-31 15:49:44.284000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource07,2010-11-13 01:06:40.010000+00:00,task-2898,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:53:45.674000+00:00 +Internet,RIGHT_case-4584,2011-01-08 01:06:40+00:00,General,2011-01-10 12:34:51.330000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource02,2010-11-13 01:06:40.010000+00:00,task-2822,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-06 11:03:46.296000+00:00 +Internet,RIGHT_case-4584,2011-01-08 01:06:40+00:00,General,2011-01-10 12:34:51.330000+00:00,2011-01-08 01:06:40.010000+00:00,,Resource02,2010-11-13 01:06:40.010000+00:00,task-2958,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:06:42.682000+00:00 +Internet,RIGHT_case-4585,2011-01-10 01:06:40+00:00,General,2011-01-05 09:19:52.557000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource01,2010-11-15 01:06:40.010000+00:00,task-4407,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 10:19:48.333000+00:00 +Internet,RIGHT_case-4585,2011-01-10 01:06:40+00:00,General,2011-01-05 09:19:52.557000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource01,2010-11-15 01:06:40.010000+00:00,task-4410,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 10:21:48.053000+00:00 +Internet,RIGHT_case-4585,2011-01-10 01:06:40+00:00,General,2011-01-05 09:19:52.557000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource01,2010-11-15 01:06:40.010000+00:00,task-4620,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:13:46.099000+00:00 +Internet,RIGHT_case-4586,2011-01-10 01:06:40+00:00,General,2011-01-11 16:28:31.047000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource02,2010-11-15 01:06:40.010000+00:00,task-2925,T02 Check confirmation of receipt,complete,Group 4,Resource02,2010-12-06 11:31:25.672000+00:00 +Internet,RIGHT_case-4586,2011-01-10 01:06:40+00:00,General,2011-01-11 16:28:31.047000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource02,2010-11-15 01:06:40.010000+00:00,task-2970,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:12:40.900000+00:00 +Internet,RIGHT_case-4586,2011-01-10 01:06:40+00:00,General,2011-01-11 16:28:31.047000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource02,2010-11-15 01:06:40.010000+00:00,task-7514,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-11 08:06:40.034000+00:00 +Internet,RIGHT_case-4587,2011-01-10 01:06:40+00:00,General,2011-01-07 14:10:30.410000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource17,2010-11-15 01:06:40.010000+00:00,task-2657,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-02 15:27:36.589000+00:00 +Internet,RIGHT_case-4587,2011-01-10 01:06:40+00:00,General,2011-01-07 14:10:30.410000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource17,2010-11-15 01:06:40.010000+00:00,task-2655,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-09 15:29:05.537000+00:00 +Internet,RIGHT_case-4587,2011-01-10 01:06:40+00:00,General,2011-01-07 14:10:30.410000+00:00,2011-01-10 01:06:40.010000+00:00,,Resource17,2010-11-15 01:06:40.010000+00:00,task-3532,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:04:12.304000+00:00 +Internet,RIGHT_case-4589,2011-01-11 01:06:40+00:00,General,2010-12-24 12:27:38.174000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-2835,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-06 10:19:25.141000+00:00 +Internet,RIGHT_case-4589,2011-01-11 01:06:40+00:00,General,2010-12-24 12:27:38.174000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-2837,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-06 10:20:07.236000+00:00 +Internet,RIGHT_case-4589,2011-01-11 01:06:40+00:00,General,2010-12-24 12:27:38.174000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-2839,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:42:01.490000+00:00 +Internet,RIGHT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4071,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-14 10:04:53.418000+00:00 +Internet,RIGHT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4078,T17 Check report Y to stop indication,complete,Group 4,Resource07,2010-12-14 10:09:30.738000+00:00 +Internet,RIGHT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4081,T20 Print report Y to stop indication,complete,Group 2,Resource07,2010-12-14 10:10:06.033000+00:00 +Internet,RIGHT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4068,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:01:32.454000+00:00 +Internet,RIGHT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4651,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-16 10:47:06.958000+00:00 +Internet,RIGHT_case-4592,2011-01-11 01:06:40+00:00,General,2010-12-30 12:29:20.384000+00:00,2011-01-11 01:06:40.010000+00:00,,Resource07,2010-11-16 01:06:40.010000+00:00,task-4653,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-16 10:48:20.867000+00:00 +Internet,RIGHT_case-4598,2011-01-19 01:06:40+00:00,General,2010-12-17 11:50:32.847000+00:00,2011-01-19 01:06:40.010000+00:00,,Resource34,2010-11-24 01:06:40.010000+00:00,task-3667,T02 Check confirmation of receipt,complete,EMPTY,Resource34,2010-12-10 14:44:09.214000+00:00 +Internet,RIGHT_case-4598,2011-01-19 01:06:40+00:00,General,2010-12-17 11:50:32.847000+00:00,2011-01-19 01:06:40.010000+00:00,,Resource34,2010-11-24 01:06:40.010000+00:00,task-3670,T05 Print and send confirmation of receipt,complete,EMPTY,Resource34,2010-12-10 14:45:54.662000+00:00 +Internet,RIGHT_case-4598,2011-01-19 01:06:40+00:00,General,2010-12-17 11:50:32.847000+00:00,2011-01-19 01:06:40.010000+00:00,,Resource34,2010-11-24 01:06:40.010000+00:00,task-3671,T10 Determine necessity to stop indication,complete,Group 1,Resource34,2010-12-10 14:48:00.370000+00:00 +Internet,RIGHT_case-4599,2011-01-12 01:06:40+00:00,General,2011-01-10 15:10:36.074000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource02,2010-11-17 01:06:40.010000+00:00,task-2987,T02 Check confirmation of receipt,complete,Group 4,Resource02,2010-12-06 13:55:59.228000+00:00 +Internet,RIGHT_case-4599,2011-01-12 01:06:40+00:00,General,2011-01-10 15:10:36.074000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource02,2010-11-17 01:06:40.010000+00:00,task-3021,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-07 08:32:44.765000+00:00 +Internet,RIGHT_case-4600,2011-01-11 01:06:40+00:00,General,2011-05-16 13:03:56.250000+00:00,2011-01-11 01:06:40.010000+00:00,,admin1,2010-11-16 01:06:40.010000+00:00,task-4236,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:18:09.656000+00:00 +Internet,RIGHT_case-4600,2011-01-11 01:06:40+00:00,General,2011-05-16 13:03:56.250000+00:00,2011-01-11 01:06:40.010000+00:00,,admin1,2010-11-16 01:06:40.010000+00:00,task-4824,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-21 11:03:49.027000+00:00 +Internet,RIGHT_case-4600,2011-01-11 01:06:40+00:00,General,2011-05-16 13:03:56.250000+00:00,2011-01-11 01:06:40.010000+00:00,,admin1,2010-11-16 01:06:40.010000+00:00,task-7085,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-06 13:01:37.422000+00:00 +Internet,RIGHT_case-4601,2011-01-12 01:06:40+00:00,General,2011-09-19 16:50:59.362000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource12,2010-11-17 01:06:40.010000+00:00,task-4222,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:16:48.413000+00:00 +Internet,RIGHT_case-4601,2011-01-12 01:06:40+00:00,General,2011-09-19 16:50:59.362000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource12,2010-11-17 01:06:40.010000+00:00,task-4823,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-21 11:25:16.429000+00:00 +Internet,RIGHT_case-4601,2011-01-12 01:06:40+00:00,General,2011-09-19 16:50:59.362000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource12,2010-11-17 01:06:40.010000+00:00,task-39247,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-16 11:45:39.533000+00:00 +Internet,RIGHT_case-4602,2011-01-26 00:00:00+00:00,General,2011-01-28 12:28:46.892000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource17,2010-11-17 00:00:00.010000+00:00,task-3516,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-09 16:14:07.565000+00:00 +Internet,RIGHT_case-4602,2011-01-26 00:00:00+00:00,General,2011-01-28 12:28:46.892000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource17,2010-11-17 00:00:00.010000+00:00,task-3514,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-10 14:29:28.270000+00:00 +Internet,RIGHT_case-4602,2011-01-26 00:00:00+00:00,General,2011-01-28 12:28:46.892000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource17,2010-11-17 00:00:00.010000+00:00,task-3707,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-14 08:30:14.495000+00:00 +Internet,RIGHT_case-4603,2011-01-12 01:06:40+00:00,General,2010-12-24 12:11:58.365000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource07,2010-11-17 01:06:40.010000+00:00,task-2931,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-06 11:43:57.995000+00:00 +Internet,RIGHT_case-4603,2011-01-12 01:06:40+00:00,General,2010-12-24 12:11:58.365000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource07,2010-11-17 01:06:40.010000+00:00,task-2935,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-06 11:44:56.579000+00:00 +Internet,RIGHT_case-4603,2011-01-12 01:06:40+00:00,General,2010-12-24 12:11:58.365000+00:00,2011-01-12 01:06:40.010000+00:00,,Resource07,2010-11-17 01:06:40.010000+00:00,task-2934,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:05:46.768000+00:00 +Internet,RIGHT_case-4604,2011-01-12 00:00:00+00:00,General,2010-12-24 11:08:17.541000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource07,2010-11-17 00:00:00.010000+00:00,task-2663,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-02 16:32:38.152000+00:00 +Internet,RIGHT_case-4604,2011-01-12 00:00:00+00:00,General,2010-12-24 11:08:17.541000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource07,2010-11-17 00:00:00.010000+00:00,task-2667,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:36:38.951000+00:00 +Internet,RIGHT_case-4604,2011-01-12 00:00:00+00:00,General,2010-12-24 11:08:17.541000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource07,2010-11-17 00:00:00.010000+00:00,task-2665,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-07 08:38:07.394000+00:00 +Internet,RIGHT_case-4605,2011-01-12 00:00:00+00:00,General,2011-02-02 14:42:57.829000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource04,2010-11-17 00:00:00.010000+00:00,task-3159,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-12-07 15:33:55.010000+00:00 +Internet,RIGHT_case-4605,2011-01-12 00:00:00+00:00,General,2011-02-02 14:42:57.829000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource04,2010-11-17 00:00:00.010000+00:00,task-3184,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-08 09:42:51.112000+00:00 +Internet,RIGHT_case-4605,2011-01-12 00:00:00+00:00,General,2011-02-02 14:42:57.829000+00:00,2011-01-12 00:00:00.010000+00:00,,Resource04,2010-11-17 00:00:00.010000+00:00,task-3392,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-12-08 16:04:22.644000+00:00 +Internet,RIGHT_case-4608,2011-02-21 01:06:40+00:00,General,2011-02-18 12:15:49.689000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource04,2010-11-17 01:06:40.010000+00:00,task-4912,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-12-17 13:09:24.659000+00:00 +Internet,RIGHT_case-4608,2011-02-21 01:06:40+00:00,General,2011-02-18 12:15:49.689000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource04,2010-11-17 01:06:40.010000+00:00,task-4916,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-12-17 13:10:07.683000+00:00 +Internet,RIGHT_case-4608,2011-02-21 01:06:40+00:00,General,2011-02-18 12:15:49.689000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource04,2010-11-17 01:06:40.010000+00:00,task-4915,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2010-12-20 16:15:26.476000+00:00 +Internet,RIGHT_case-4619,2011-01-13 00:00:00+00:00,General,2011-01-13 12:29:05.367000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource08,2010-11-18 00:00:00.010000+00:00,task-2722,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-03 13:48:16.495000+00:00 +Internet,RIGHT_case-4619,2011-01-13 00:00:00+00:00,General,2011-01-13 12:29:05.367000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource08,2010-11-18 00:00:00.010000+00:00,task-2752,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:40:49.307000+00:00 +Internet,RIGHT_case-4619,2011-01-13 00:00:00+00:00,General,2011-01-13 12:29:05.367000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource08,2010-11-18 00:00:00.010000+00:00,task-3801,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-13 10:37:55.173000+00:00 +Internet,RIGHT_case-4623,2011-01-13 00:00:00+00:00,General,2010-12-10 09:36:48.051000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource07,2010-11-18 00:00:00.010000+00:00,task-3053,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-07 09:23:21.902000+00:00 +Internet,RIGHT_case-4623,2011-01-13 00:00:00+00:00,General,2010-12-10 09:36:48.051000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource07,2010-11-18 00:00:00.010000+00:00,task-3050,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 14:30:37.692000+00:00 +Internet,RIGHT_case-4623,2011-01-13 00:00:00+00:00,General,2010-12-10 09:36:48.051000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource07,2010-11-18 00:00:00.010000+00:00,task-3165,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-08 09:38:23.535000+00:00 +Internet,RIGHT_case-4623,2011-01-13 00:00:00+00:00,General,2010-12-10 09:36:48.051000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource07,2010-11-18 00:00:00.010000+00:00,task-3525,T12 Check document X request unlicensed,complete,Group 4,Resource19,2010-12-10 08:46:30.628000+00:00 +Internet,RIGHT_case-4623,2011-01-13 00:00:00+00:00,General,2010-12-10 09:36:48.051000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource07,2010-11-18 00:00:00.010000+00:00,task-3552,T15 Print document X request unlicensed,complete,Group 2,Resource07,2010-12-10 09:36:47.840000+00:00 +Internet,RIGHT_case-4632,2011-01-13 01:06:40+00:00,General,2011-01-10 14:46:35.026000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource07,2010-11-18 01:06:40.010000+00:00,task-3061,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-07 09:52:00.389000+00:00 +Internet,RIGHT_case-4632,2011-01-13 01:06:40+00:00,General,2011-01-10 14:46:35.026000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource07,2010-11-18 01:06:40.010000+00:00,task-3059,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 14:31:47.009000+00:00 +Internet,RIGHT_case-4632,2011-01-13 01:06:40+00:00,General,2011-01-10 14:46:35.026000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource07,2010-11-18 01:06:40.010000+00:00,task-3164,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-08 09:37:15.669000+00:00 +Internet,RIGHT_case-4639,2011-01-15 00:00:00+00:00,General,2010-12-27 16:13:22.464000+00:00,2011-01-15 00:00:00.010000+00:00,,Resource01,2010-11-20 00:00:00.010000+00:00,task-4486,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 11:56:46.605000+00:00 +Internet,RIGHT_case-4639,2011-01-15 00:00:00+00:00,General,2010-12-27 16:13:22.464000+00:00,2011-01-15 00:00:00.010000+00:00,,Resource01,2010-11-20 00:00:00.010000+00:00,task-4490,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2010-12-15 11:59:52.331000+00:00 +Internet,RIGHT_case-4639,2011-01-15 00:00:00+00:00,General,2010-12-27 16:13:22.464000+00:00,2011-01-15 00:00:00.010000+00:00,,Resource01,2010-11-20 00:00:00.010000+00:00,task-4491,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 12:00:32.199000+00:00 +Internet,RIGHT_case-4640,2011-01-16 00:00:00+00:00,General,2011-01-10 13:18:15.437000+00:00,2011-01-16 00:00:00.010000+00:00,,Resource08,2010-11-21 00:00:00.010000+00:00,task-3511,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-09 15:58:39.802000+00:00 +Internet,RIGHT_case-4640,2011-01-16 00:00:00+00:00,General,2011-01-10 13:18:15.437000+00:00,2011-01-16 00:00:00.010000+00:00,,Resource08,2010-11-21 00:00:00.010000+00:00,task-3533,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:03:12.340000+00:00 +Internet,RIGHT_case-4640,2011-01-16 00:00:00+00:00,General,2011-01-10 13:18:15.437000+00:00,2011-01-16 00:00:00.010000+00:00,,Resource08,2010-11-21 00:00:00.010000+00:00,task-3950,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-14 09:32:26.216000+00:00 +Internet,RIGHT_case-4641,2011-01-17 00:00:00+00:00,General,2010-12-27 16:24:10.172000+00:00,2011-01-17 00:00:00.010000+00:00,,Resource07,2010-11-22 00:00:00.010000+00:00,task-3694,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-10 16:02:14.805000+00:00 +Internet,RIGHT_case-4641,2011-01-17 00:00:00+00:00,General,2010-12-27 16:24:10.172000+00:00,2011-01-17 00:00:00.010000+00:00,,Resource07,2010-11-22 00:00:00.010000+00:00,task-3696,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-10 16:03:45.699000+00:00 +Internet,RIGHT_case-4641,2011-01-17 00:00:00+00:00,General,2010-12-27 16:24:10.172000+00:00,2011-01-17 00:00:00.010000+00:00,,Resource07,2010-11-22 00:00:00.010000+00:00,task-3701,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-10 16:06:34.697000+00:00 +Internet,RIGHT_case-4653,2011-01-14 01:06:40+00:00,General,2011-01-17 16:42:46.600000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource15,2010-11-19 01:06:40.010000+00:00,task-3541,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-10 09:06:28.682000+00:00 +Internet,RIGHT_case-4653,2011-01-14 01:06:40+00:00,General,2011-01-17 16:42:46.600000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource15,2010-11-19 01:06:40.010000+00:00,task-3546,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-10 09:19:16.776000+00:00 +Internet,RIGHT_case-4653,2011-01-14 01:06:40+00:00,General,2011-01-17 16:42:46.600000+00:00,2011-01-14 01:06:40.010000+00:00,,Resource15,2010-11-19 01:06:40.010000+00:00,task-3544,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:07:31.101000+00:00 +Internet,RIGHT_case-4654,2011-01-17 01:06:40+00:00,General,2011-01-14 15:44:16.899000+00:00,2011-01-17 01:06:40.010000+00:00,,Resource15,2010-11-22 01:06:40.010000+00:00,task-3587,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-10 10:58:30.167000+00:00 +Internet,RIGHT_case-4654,2011-01-17 01:06:40+00:00,General,2011-01-14 15:44:16.899000+00:00,2011-01-17 01:06:40.010000+00:00,,Resource15,2010-11-22 01:06:40.010000+00:00,task-3589,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-10 10:59:02.440000+00:00 +Internet,RIGHT_case-4654,2011-01-17 01:06:40+00:00,General,2011-01-14 15:44:16.899000+00:00,2011-01-17 01:06:40.010000+00:00,,Resource15,2010-11-22 01:06:40.010000+00:00,task-3591,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:11:06.185000+00:00 +Internet,RIGHT_case-4656,2011-03-14 01:06:40+00:00,General,2011-02-23 00:00:00.010000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource17,2010-11-23 01:06:40.010000+00:00,task-4255,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2010-12-14 15:43:12.701000+00:00 +Internet,RIGHT_case-4656,2011-03-14 01:06:40+00:00,General,2011-02-23 00:00:00.010000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource17,2010-11-23 01:06:40.010000+00:00,task-4258,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-14 15:45:04.757000+00:00 +Internet,RIGHT_case-4656,2011-03-14 01:06:40+00:00,General,2011-02-23 00:00:00.010000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource17,2010-11-23 01:06:40.010000+00:00,task-4259,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 08:35:18.185000+00:00 +Internet,RIGHT_case-4666,2011-01-18 01:06:40+00:00,General,2011-01-18 09:52:21.599000+00:00,2011-01-18 01:06:40.010000+00:00,,Resource08,2010-11-23 01:06:40.010000+00:00,task-4161,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-14 12:51:07.579000+00:00 +Internet,RIGHT_case-4666,2011-01-18 01:06:40+00:00,General,2011-01-18 09:52:21.599000+00:00,2011-01-18 01:06:40.010000+00:00,,Resource08,2010-11-23 01:06:40.010000+00:00,task-4610,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:11:54.027000+00:00 +Internet,RIGHT_case-4666,2011-01-18 01:06:40+00:00,General,2011-01-18 09:52:21.599000+00:00,2011-01-18 01:06:40.010000+00:00,,Resource08,2010-11-23 01:06:40.010000+00:00,task-7277,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-07 14:45:05.256000+00:00 +Internet,RIGHT_case-4667,2011-01-31 00:00:00+00:00,General,2011-01-26 15:10:16.721000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource12,2010-12-06 00:00:00.010000+00:00,task-4083,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-12-22 14:09:01.192000+00:00 +Internet,RIGHT_case-4667,2011-01-31 00:00:00+00:00,General,2011-01-26 15:10:16.721000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource12,2010-12-06 00:00:00.010000+00:00,task-5465,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 10:03:05.766000+00:00 +Internet,RIGHT_case-4667,2011-01-31 00:00:00+00:00,General,2011-01-26 15:10:16.721000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource12,2010-12-06 00:00:00.010000+00:00,task-7053,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-06 12:24:09.724000+00:00 +Internet,RIGHT_case-4677,2011-02-28 01:06:40+00:00,General,2011-02-25 09:44:56.521000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2011-01-03 01:06:40.010000+00:00,task-3604,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-10 11:23:49.409000+00:00 +Internet,RIGHT_case-4677,2011-02-28 01:06:40+00:00,General,2011-02-25 09:44:56.521000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2011-01-03 01:06:40.010000+00:00,task-3608,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-10 11:24:45.453000+00:00 +Internet,RIGHT_case-4677,2011-02-28 01:06:40+00:00,General,2011-02-25 09:44:56.521000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2011-01-03 01:06:40.010000+00:00,task-3607,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:12:49.726000+00:00 +Internet,RIGHT_case-4678,2011-01-18 00:00:00+00:00,General,2010-12-24 13:53:53.755000+00:00,2011-01-18 00:00:00.010000+00:00,,Resource07,2010-11-23 00:00:00.010000+00:00,task-3711,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-10 16:23:39.510000+00:00 +Internet,RIGHT_case-4678,2011-01-18 00:00:00+00:00,General,2010-12-24 13:53:53.755000+00:00,2011-01-18 00:00:00.010000+00:00,,Resource07,2010-11-23 00:00:00.010000+00:00,task-3709,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-13 10:46:30.738000+00:00 +Internet,RIGHT_case-4678,2011-01-18 00:00:00+00:00,General,2010-12-24 13:53:53.755000+00:00,2011-01-18 00:00:00.010000+00:00,,Resource07,2010-11-23 00:00:00.010000+00:00,task-3943,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-13 13:18:59.128000+00:00 +Internet,RIGHT_case-4680,2011-01-19 00:00:00+00:00,General,2011-01-10 16:17:53.605000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-4459,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 11:19:08.606000+00:00 +Internet,RIGHT_case-4680,2011-01-19 00:00:00+00:00,General,2011-01-10 16:17:53.605000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-4445,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:41:59.769000+00:00 +Internet,RIGHT_case-4680,2011-01-19 00:00:00+00:00,General,2011-01-10 16:17:53.605000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-4643,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:20:19.080000+00:00 +Internet,RIGHT_case-4683,2011-01-19 00:00:00+00:00,General,2011-01-20 09:42:03.621000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3725,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-10 16:53:12.143000+00:00 +Internet,RIGHT_case-4683,2011-01-19 00:00:00+00:00,General,2011-01-20 09:42:03.621000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-3723,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-13 10:50:02.107000+00:00 +Internet,RIGHT_case-4683,2011-01-19 00:00:00+00:00,General,2011-01-20 09:42:03.621000+00:00,2011-01-19 00:00:00.010000+00:00,,Resource07,2010-11-24 00:00:00.010000+00:00,task-4024,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-13 16:35:31.886000+00:00 +Internet,RIGHT_case-4687,2011-01-20 00:00:00+00:00,General,2011-01-10 13:21:56.701000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-4588,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 15:26:25.687000+00:00 +Internet,RIGHT_case-4687,2011-01-20 00:00:00+00:00,General,2011-01-10 13:21:56.701000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-4390,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:04:18.683000+00:00 +Internet,RIGHT_case-4687,2011-01-20 00:00:00+00:00,General,2011-01-10 13:21:56.701000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-4641,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:18:49.301000+00:00 +Internet,RIGHT_case-4758,2011-03-12 01:06:40+00:00,General,2011-03-09 10:12:00.243000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource08,2010-11-24 01:06:40.010000+00:00,task-5543,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-23 15:12:31.902000+00:00 +Internet,RIGHT_case-4758,2011-03-12 01:06:40+00:00,General,2011-03-09 10:12:00.243000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource08,2010-11-24 01:06:40.010000+00:00,task-5546,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-23 15:13:26.677000+00:00 +Internet,RIGHT_case-4758,2011-03-12 01:06:40+00:00,General,2011-03-09 10:12:00.243000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource08,2010-11-24 01:06:40.010000+00:00,task-5577,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 10:04:59.868000+00:00 +Internet,RIGHT_case-4759,2011-01-13 01:06:40+00:00,General,2011-02-08 15:45:37.389000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource15,2010-11-18 01:06:40.010000+00:00,task-5741,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2010-12-24 15:50:46.154000+00:00 +Internet,RIGHT_case-4759,2011-01-13 01:06:40+00:00,General,2011-02-08 15:45:37.389000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource15,2010-11-18 01:06:40.010000+00:00,task-5767,T05 Print and send confirmation of receipt,complete,EMPTY,admin1,2010-12-30 13:10:44.088000+00:00 +Internet,RIGHT_case-4759,2011-01-13 01:06:40+00:00,General,2011-02-08 15:45:37.389000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource15,2010-11-18 01:06:40.010000+00:00,task-6644,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-04 09:49:28.293000+00:00 +Internet,RIGHT_case-4760,2011-01-20 01:06:40+00:00,General,2011-01-10 12:42:32.647000+00:00,2011-01-20 01:06:40.010000+00:00,,Resource11,2010-11-25 01:06:40.010000+00:00,task-4755,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:28:56.960000+00:00 +Internet,RIGHT_case-4760,2011-01-20 01:06:40+00:00,General,2011-01-10 12:42:32.647000+00:00,2011-01-20 01:06:40.010000+00:00,,Resource11,2010-11-25 01:06:40.010000+00:00,task-5862,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-27 12:13:18.227000+00:00 +Internet,RIGHT_case-4760,2011-01-20 01:06:40+00:00,General,2011-01-10 12:42:32.647000+00:00,2011-01-20 01:06:40.010000+00:00,,Resource11,2010-11-25 01:06:40.010000+00:00,task-4842,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-29 08:58:19.317000+00:00 +Desk,RIGHT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4210,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2010-12-14 14:25:46.918000+00:00 +Desk,RIGHT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4194,T02 Check confirmation of receipt,complete,Group 4,Resource25,2010-12-14 15:28:36.139000+00:00 +Desk,RIGHT_case-4762,2011-01-13 01:06:40+00:00,General,2011-02-02 09:55:29.925000+00:00,2011-01-13 01:06:40.010000+00:00,,Resource25,2010-11-18 01:06:40.010000+00:00,task-4254,T05 Print and send confirmation of receipt,complete,Group 2,Resource25,2010-12-14 15:29:17.828000+00:00 +Internet,RIGHT_case-4763,2011-02-09 01:06:40+00:00,General,2011-02-08 15:46:11.268000+00:00,2011-02-09 01:06:40.010000+00:00,,Resource04,2010-11-29 01:06:40.010000+00:00,task-4757,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:29:12.335000+00:00 +Internet,RIGHT_case-4763,2011-02-09 01:06:40+00:00,General,2011-02-08 15:46:11.268000+00:00,2011-02-09 01:06:40.010000+00:00,,Resource04,2010-11-29 01:06:40.010000+00:00,task-4939,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-12-17 14:33:28.363000+00:00 +Internet,RIGHT_case-4763,2011-02-09 01:06:40+00:00,General,2011-02-08 15:46:11.268000+00:00,2011-02-09 01:06:40.010000+00:00,,Resource04,2010-11-29 01:06:40.010000+00:00,task-4830,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-21 10:24:37.017000+00:00 +Internet,RIGHT_case-4764,2011-01-24 01:06:40+00:00,General,2011-02-02 13:27:54.785000+00:00,2011-01-24 01:06:40.010000+00:00,,Resource08,2010-11-29 01:06:40.010000+00:00,task-4759,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:28:20.061000+00:00 +Internet,RIGHT_case-4764,2011-01-24 01:06:40+00:00,General,2011-02-02 13:27:54.785000+00:00,2011-01-24 01:06:40.010000+00:00,,Resource08,2010-11-29 01:06:40.010000+00:00,task-4845,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2010-12-23 13:58:32.473000+00:00 +Internet,RIGHT_case-4764,2011-01-24 01:06:40+00:00,General,2011-02-02 13:27:54.785000+00:00,2011-01-24 01:06:40.010000+00:00,,Resource08,2010-11-29 01:06:40.010000+00:00,task-5525,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-23 14:05:27.585000+00:00 +Internet,RIGHT_case-4765,2011-01-25 00:00:00+00:00,General,2011-01-13 09:53:06.668000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource07,2010-11-30 00:00:00.010000+00:00,task-4761,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:25:35.968000+00:00 +Internet,RIGHT_case-4765,2011-01-25 00:00:00+00:00,General,2011-01-13 09:53:06.668000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource07,2010-11-30 00:00:00.010000+00:00,task-5685,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 14:31:04.482000+00:00 +Internet,RIGHT_case-4765,2011-01-25 00:00:00+00:00,General,2011-01-13 09:53:06.668000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource07,2010-11-30 00:00:00.010000+00:00,task-4840,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-06 10:50:16.044000+00:00 +Post,RIGHT_case-4766,2010-12-31 00:00:00+00:00,General,2010-12-23 08:11:45.103000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource07,2010-11-05 00:00:00.010000+00:00,task-4294,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 08:24:27.187000+00:00 +Post,RIGHT_case-4766,2010-12-31 00:00:00+00:00,General,2010-12-23 08:11:45.103000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource07,2010-11-05 00:00:00.010000+00:00,task-4297,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 08:26:22.885000+00:00 +Post,RIGHT_case-4766,2010-12-31 00:00:00+00:00,General,2010-12-23 08:11:45.103000+00:00,2010-12-31 00:00:00.010000+00:00,,Resource07,2010-11-05 00:00:00.010000+00:00,task-4333,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 10:21:26.537000+00:00 +Internet,RIGHT_case-4767,2011-01-25 01:06:40+00:00,General,2011-01-28 14:06:44.443000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource17,2010-11-30 01:06:40.010000+00:00,task-4763,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:25:50.044000+00:00 +Internet,RIGHT_case-4767,2011-01-25 01:06:40+00:00,General,2011-01-28 14:06:44.443000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource17,2010-11-30 01:06:40.010000+00:00,task-5044,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-20 11:20:44.566000+00:00 +Internet,RIGHT_case-4767,2011-01-25 01:06:40+00:00,General,2011-01-28 14:06:44.443000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource17,2010-11-30 01:06:40.010000+00:00,task-4844,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2010-12-20 13:35:44.989000+00:00 +Internet,RIGHT_case-4769,2011-01-25 00:00:00+00:00,General,2011-01-06 09:08:32.961000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource11,2010-11-30 00:00:00.010000+00:00,task-4771,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:26:25.577000+00:00 +Internet,RIGHT_case-4769,2011-01-25 00:00:00+00:00,General,2011-01-06 09:08:32.961000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource11,2010-11-30 00:00:00.010000+00:00,task-5260,T10 Determine necessity to stop indication,complete,Group 1,Resource26,2010-12-21 11:12:11.623000+00:00 +Internet,RIGHT_case-4769,2011-01-25 00:00:00+00:00,General,2011-01-06 09:08:32.961000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource11,2010-11-30 00:00:00.010000+00:00,task-4834,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-21 11:22:34.266000+00:00 +Internet,RIGHT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-4767,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:27:20.636000+00:00 +Internet,RIGHT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-4849,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-30 13:07:43.684000+00:00 +Internet,RIGHT_case-4771,2011-05-31 01:06:40+00:00,General,2011-04-07 15:40:43.697000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource15,2010-11-30 01:06:40.010000+00:00,task-8078,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-13 11:09:20.055000+00:00 +Internet,RIGHT_case-4773,2011-01-25 00:00:00+00:00,General,2011-01-26 16:07:58.280000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource04,2010-11-30 00:00:00.010000+00:00,task-4774,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:24:25.535000+00:00 +Internet,RIGHT_case-4773,2011-01-25 00:00:00+00:00,General,2011-01-26 16:07:58.280000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource04,2010-11-30 00:00:00.010000+00:00,task-4837,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-21 10:25:16.468000+00:00 +Internet,RIGHT_case-4773,2011-01-25 00:00:00+00:00,General,2011-01-26 16:07:58.280000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource04,2010-11-30 00:00:00.010000+00:00,task-5257,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-12-21 11:03:05.310000+00:00 +Internet,RIGHT_case-4774,2011-01-20 00:00:00+00:00,General,2011-01-14 15:56:17.205000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-4777,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:26:44.199000+00:00 +Internet,RIGHT_case-4774,2011-01-20 00:00:00+00:00,General,2011-01-14 15:56:17.205000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-4835,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 10:25:24.065000+00:00 +Internet,RIGHT_case-4774,2011-01-20 00:00:00+00:00,General,2011-01-14 15:56:17.205000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-5653,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 13:56:57.236000+00:00 +Internet,RIGHT_case-4777,2011-01-20 00:00:00+00:00,General,2011-01-11 09:00:56.175000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-4769,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:26:07.771000+00:00 +Internet,RIGHT_case-4777,2011-01-20 00:00:00+00:00,General,2011-01-11 09:00:56.175000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-5848,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-27 11:18:32.337000+00:00 +Internet,RIGHT_case-4777,2011-01-20 00:00:00+00:00,General,2011-01-11 09:00:56.175000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource11,2010-11-25 00:00:00.010000+00:00,task-4846,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-04 16:40:38.369000+00:00 +Internet,RIGHT_case-4778,2011-01-21 00:00:00+00:00,General,2011-01-07 12:06:15.036000+00:00,2011-01-21 00:00:00.010000+00:00,,Resource07,2010-11-26 00:00:00.010000+00:00,task-4779,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:24:47.466000+00:00 +Internet,RIGHT_case-4778,2011-01-21 00:00:00+00:00,General,2011-01-07 12:06:15.036000+00:00,2011-01-21 00:00:00.010000+00:00,,Resource07,2010-11-26 00:00:00.010000+00:00,task-5675,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 14:20:59.792000+00:00 +Internet,RIGHT_case-4778,2011-01-21 00:00:00+00:00,General,2011-01-07 12:06:15.036000+00:00,2011-01-21 00:00:00.010000+00:00,,Resource07,2010-11-26 00:00:00.010000+00:00,task-4843,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-04 09:07:44.006000+00:00 +Internet,RIGHT_case-4779,2011-01-23 00:00:00+00:00,General,2011-01-20 15:34:07.266000+00:00,2011-01-23 00:00:00.010000+00:00,,Resource11,2010-11-28 00:00:00.010000+00:00,task-4783,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:27:03.150000+00:00 +Internet,RIGHT_case-4779,2011-01-23 00:00:00+00:00,General,2011-01-20 15:34:07.266000+00:00,2011-01-23 00:00:00.010000+00:00,,Resource11,2010-11-28 00:00:00.010000+00:00,task-5873,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-27 14:17:44.817000+00:00 +Internet,RIGHT_case-4779,2011-01-23 00:00:00+00:00,General,2011-01-20 15:34:07.266000+00:00,2011-01-23 00:00:00.010000+00:00,,Resource11,2010-11-28 00:00:00.010000+00:00,task-4847,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-29 09:19:45.561000+00:00 +Post,RIGHT_case-4780,2011-01-20 00:00:00+00:00,General,2011-01-13 09:39:30.383000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-4781,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:25:01.055000+00:00 +Post,RIGHT_case-4780,2011-01-20 00:00:00+00:00,General,2011-01-13 09:39:30.383000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-5663,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 14:13:09.438000+00:00 +Post,RIGHT_case-4780,2011-01-20 00:00:00+00:00,General,2011-01-13 09:39:30.383000+00:00,2011-01-20 00:00:00.010000+00:00,,Resource07,2010-11-25 00:00:00.010000+00:00,task-4826,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-06 10:49:38.437000+00:00 +Desk,RIGHT_case-4781,2010-12-21 00:00:00+00:00,General,2010-12-17 14:50:32.046000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource07,2010-10-26 00:00:00.020000+00:00,task-4383,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 09:45:11.956000+00:00 +Desk,RIGHT_case-4781,2010-12-21 00:00:00+00:00,General,2010-12-17 14:50:32.046000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource07,2010-10-26 00:00:00.020000+00:00,task-4386,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 09:49:34.866000+00:00 +Desk,RIGHT_case-4781,2010-12-21 00:00:00+00:00,General,2010-12-17 14:50:32.046000+00:00,2010-12-21 00:00:00.010000+00:00,,Resource07,2010-10-26 00:00:00.020000+00:00,task-4478,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:20:23.619000+00:00 +Post,RIGHT_case-4806,2011-01-25 00:00:00+00:00,General,2011-01-07 12:27:29.250000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource34,2010-11-30 00:00:00.010000+00:00,task-4794,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:32:26.625000+00:00 +Post,RIGHT_case-4806,2011-01-25 00:00:00+00:00,General,2011-01-07 12:27:29.250000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource34,2010-11-30 00:00:00.010000+00:00,task-4888,T10 Determine necessity to stop indication,complete,Group 1,Resource34,2010-12-17 12:12:08.687000+00:00 +Post,RIGHT_case-4806,2011-01-25 00:00:00+00:00,General,2011-01-07 12:27:29.250000+00:00,2011-01-25 00:00:00.010000+00:00,,Resource34,2010-11-30 00:00:00.010000+00:00,task-4838,T05 Print and send confirmation of receipt,complete,EMPTY,admin1,2010-12-21 11:44:14.896000+00:00 +Desk,RIGHT_case-4807,2011-04-05 01:06:40+00:00,General,2011-04-01 15:58:08.848000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource22,2010-11-30 01:06:40.010000+00:00,task-4790,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:27:55.552000+00:00 +Desk,RIGHT_case-4807,2011-04-05 01:06:40+00:00,General,2011-04-01 15:58:08.848000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource22,2010-11-30 01:06:40.010000+00:00,task-5817,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2010-12-27 09:41:07.887000+00:00 +Desk,RIGHT_case-4807,2011-04-05 01:06:40+00:00,General,2011-04-01 15:58:08.848000+00:00,2011-01-25 01:06:40.010000+00:00,,Resource22,2010-11-30 01:06:40.010000+00:00,task-4839,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-30 13:07:07.218000+00:00 +Desk,RIGHT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-4792,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:28:40.301000+00:00 +Desk,RIGHT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-4848,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-30 13:07:27.346000+00:00 +Desk,RIGHT_case-4808,2011-01-27 00:00:00+00:00,General,2011-02-08 15:10:58.033000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource15,2010-12-02 00:00:00.010000+00:00,task-8931,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-19 10:44:37.479000+00:00 +Post,RIGHT_case-4809,2011-01-28 00:00:00+00:00,General,2011-01-13 12:22:49.908000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-4796,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:32:51.677000+00:00 +Post,RIGHT_case-4809,2011-01-28 00:00:00+00:00,General,2011-01-13 12:22:49.908000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-5766,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 15:57:48.331000+00:00 +Post,RIGHT_case-4809,2011-01-28 00:00:00+00:00,General,2011-01-13 12:22:49.908000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-4850,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 08:21:06.050000+00:00 +Post,RIGHT_case-4810,2011-01-28 00:00:00+00:00,General,2011-01-13 11:32:30.318000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-4798,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:30:06.351000+00:00 +Post,RIGHT_case-4810,2011-01-28 00:00:00+00:00,General,2011-01-13 11:32:30.318000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-4827,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 08:28:53.203000+00:00 +Post,RIGHT_case-4810,2011-01-28 00:00:00+00:00,General,2011-01-13 11:32:30.318000+00:00,2011-01-28 00:00:00.010000+00:00,,Resource07,2010-12-03 00:00:00.010000+00:00,task-5777,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-04 08:24:48.655000+00:00 +Desk,RIGHT_case-4811,2011-02-03 00:00:00+00:00,General,2011-01-20 13:03:01.643000+00:00,2011-02-03 00:00:00.010000+00:00,,Resource07,2010-12-09 00:00:00.010000+00:00,task-4800,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:36:30.956000+00:00 +Desk,RIGHT_case-4811,2011-02-03 00:00:00+00:00,General,2011-01-20 13:03:01.643000+00:00,2011-02-03 00:00:00.010000+00:00,,Resource07,2010-12-09 00:00:00.010000+00:00,task-5778,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 16:09:05.193000+00:00 +Desk,RIGHT_case-4811,2011-02-03 00:00:00+00:00,General,2011-01-20 13:03:01.643000+00:00,2011-02-03 00:00:00.010000+00:00,,Resource07,2010-12-09 00:00:00.010000+00:00,task-4852,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 13:35:39.251000+00:00 +Internet,RIGHT_case-4814,2011-01-26 00:00:00+00:00,General,2011-01-10 13:20:26.529000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-4802,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:31:27.846000+00:00 +Internet,RIGHT_case-4814,2011-01-26 00:00:00+00:00,General,2011-01-10 13:20:26.529000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-5695,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 14:41:08.088000+00:00 +Internet,RIGHT_case-4814,2011-01-26 00:00:00+00:00,General,2011-01-10 13:20:26.529000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-4829,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-29 13:08:53.593000+00:00 +Internet,RIGHT_case-4827,2011-01-26 01:06:40+00:00,General,2011-01-14 15:56:54.775000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource34,2010-12-01 01:06:40.010000+00:00,task-4808,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:33:06.722000+00:00 +Internet,RIGHT_case-4827,2011-01-26 01:06:40+00:00,General,2011-01-14 15:56:54.775000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource34,2010-12-01 01:06:40.010000+00:00,task-5874,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-27 12:47:34.547000+00:00 +Internet,RIGHT_case-4827,2011-01-26 01:06:40+00:00,General,2011-01-14 15:56:54.775000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource34,2010-12-01 01:06:40.010000+00:00,task-4851,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 08:27:28.493000+00:00 +Post,RIGHT_case-4832,2011-01-13 00:00:00+00:00,General,2010-12-31 10:44:23.501000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource12,2010-11-18 00:00:00.010000+00:00,task-5035,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2010-12-20 11:58:52.029000+00:00 +Post,RIGHT_case-4832,2011-01-13 00:00:00+00:00,General,2010-12-31 10:44:23.501000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource12,2010-11-18 00:00:00.010000+00:00,task-5070,T05 Print and send confirmation of receipt,complete,EMPTY,Resource12,2010-12-20 12:00:32.783000+00:00 +Post,RIGHT_case-4832,2011-01-13 00:00:00+00:00,General,2010-12-31 10:44:23.501000+00:00,2011-01-13 00:00:00.010000+00:00,,Resource12,2010-11-18 00:00:00.010000+00:00,task-5077,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2010-12-20 12:08:11.685000+00:00 +Internet,RIGHT_case-4833,2011-01-26 00:00:00+00:00,General,2011-01-13 11:08:01.835000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-5071,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-20 13:12:51.349000+00:00 +Internet,RIGHT_case-4833,2011-01-26 00:00:00+00:00,General,2011-01-13 11:08:01.835000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-5382,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 09:48:18.886000+00:00 +Internet,RIGHT_case-4833,2011-01-26 00:00:00+00:00,General,2011-01-13 11:08:01.835000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource07,2010-12-01 00:00:00.010000+00:00,task-5710,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 14:58:08.132000+00:00 +Internet,RIGHT_case-4834,2011-01-26 00:00:00+00:00,General,2011-01-06 09:46:31.789000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-5214,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-22 09:52:52.099000+00:00 +Internet,RIGHT_case-4834,2011-01-26 00:00:00+00:00,General,2011-01-06 09:46:31.789000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-5423,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 09:59:17.610000+00:00 +Internet,RIGHT_case-4834,2011-01-26 00:00:00+00:00,General,2011-01-06 09:46:31.789000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-5941,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-28 07:48:12.199000+00:00 +Internet,RIGHT_case-4837,2011-01-26 01:06:40+00:00,General,2011-01-25 17:04:40.546000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5212,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-22 09:40:30.035000+00:00 +Internet,RIGHT_case-4837,2011-01-26 01:06:40+00:00,General,2011-01-25 17:04:40.546000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5386,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 09:42:30.661000+00:00 +Internet,RIGHT_case-4837,2011-01-26 01:06:40+00:00,General,2011-01-25 17:04:40.546000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5721,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 15:20:07.739000+00:00 +Internet,RIGHT_case-4891,2011-01-26 00:00:00+00:00,General,2011-01-25 09:49:29.713000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-5553,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-24 11:36:43.053000+00:00 +Internet,RIGHT_case-4891,2011-01-26 00:00:00+00:00,General,2011-01-25 09:49:29.713000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-5637,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-28 08:01:37.583000+00:00 +Internet,RIGHT_case-4891,2011-01-26 00:00:00+00:00,General,2011-01-25 09:49:29.713000+00:00,2011-01-26 00:00:00.010000+00:00,,Resource11,2010-12-01 00:00:00.010000+00:00,task-6149,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-29 10:24:01.310000+00:00 +Internet,RIGHT_case-4892,2011-01-31 01:06:40+00:00,General,2011-03-01 11:33:59.752000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-6345,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 12:51:36.433000+00:00 +Internet,RIGHT_case-4892,2011-01-31 01:06:40+00:00,General,2011-03-01 11:33:59.752000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-6348,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-30 13:02:05.943000+00:00 +Internet,RIGHT_case-4892,2011-01-31 01:06:40+00:00,General,2011-03-01 11:33:59.752000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-6389,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-31 11:28:32.972000+00:00 +Internet,RIGHT_case-4895,2011-01-31 00:00:00+00:00,General,2011-02-17 13:41:01.229000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource02,2010-12-06 00:00:00.010000+00:00,task-8161,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-01-13 14:25:56.228000+00:00 +Internet,RIGHT_case-4895,2011-01-31 00:00:00+00:00,General,2011-02-17 13:41:01.229000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource02,2010-12-06 00:00:00.010000+00:00,task-8164,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-13 14:27:01.109000+00:00 +Internet,RIGHT_case-4895,2011-01-31 00:00:00+00:00,General,2011-02-17 13:41:01.229000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource02,2010-12-06 00:00:00.010000+00:00,task-8226,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:53:21.844000+00:00 +Internet,RIGHT_case-4896,2011-01-26 01:06:40+00:00,General,2011-01-10 13:28:35.749000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5557,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-24 11:38:36.243000+00:00 +Internet,RIGHT_case-4896,2011-01-26 01:06:40+00:00,General,2011-01-10 13:28:35.749000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5732,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 15:36:10.435000+00:00 +Internet,RIGHT_case-4896,2011-01-26 01:06:40+00:00,General,2011-01-10 13:28:35.749000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource07,2010-12-01 01:06:40.010000+00:00,task-5638,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-28 10:02:48.526000+00:00 +Internet,RIGHT_case-4897,2011-01-26 01:06:40+00:00,General,2011-01-26 15:50:04.617000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource08,2010-12-01 01:06:40.010000+00:00,task-6081,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-28 15:05:24.948000+00:00 +Internet,RIGHT_case-4897,2011-01-26 01:06:40+00:00,General,2011-01-26 15:50:04.617000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource08,2010-12-01 01:06:40.010000+00:00,task-6093,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-01-10 08:47:24.236000+00:00 +Internet,RIGHT_case-4897,2011-01-26 01:06:40+00:00,General,2011-01-26 15:50:04.617000+00:00,2011-01-26 01:06:40.010000+00:00,,Resource08,2010-12-01 01:06:40.010000+00:00,task-7370,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-10 09:26:08.390000+00:00 +Internet,RIGHT_case-4898,2011-01-31 01:06:40+00:00,General,2011-02-15 10:58:40.180000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource02,2010-12-06 01:06:40.010000+00:00,task-8206,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 15:49:37.672000+00:00 +Internet,RIGHT_case-4898,2011-01-31 01:06:40+00:00,General,2011-02-15 10:58:40.180000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource02,2010-12-06 01:06:40.010000+00:00,task-8245,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-14 07:47:15.029000+00:00 +Internet,RIGHT_case-4898,2011-01-31 01:06:40+00:00,General,2011-02-15 10:58:40.180000+00:00,2011-01-31 01:06:40.010000+00:00,,Resource02,2010-12-06 01:06:40.010000+00:00,task-8243,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:52:11.811000+00:00 +Internet,RIGHT_case-4899,2011-01-27 00:00:00+00:00,General,2011-01-06 08:41:05.254000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource07,2010-12-02 00:00:00.010000+00:00,task-5559,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-24 11:34:58.337000+00:00 +Internet,RIGHT_case-4899,2011-01-27 00:00:00+00:00,General,2011-01-06 08:41:05.254000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource07,2010-12-02 00:00:00.010000+00:00,task-5746,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 15:45:07.747000+00:00 +Internet,RIGHT_case-4899,2011-01-27 00:00:00+00:00,General,2011-01-06 08:41:05.254000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource07,2010-12-02 00:00:00.010000+00:00,task-5636,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-29 11:24:54.895000+00:00 +Internet,RIGHT_case-4900,2011-01-27 00:00:00+00:00,General,2011-01-20 18:10:18.448000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource11,2010-12-02 00:00:00.010000+00:00,task-5555,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-24 10:09:05.143000+00:00 +Internet,RIGHT_case-4900,2011-01-27 00:00:00+00:00,General,2011-01-20 18:10:18.448000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource11,2010-12-02 00:00:00.010000+00:00,task-5592,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-28 08:30:29.179000+00:00 +Internet,RIGHT_case-4900,2011-01-27 00:00:00+00:00,General,2011-01-20 18:10:18.448000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource11,2010-12-02 00:00:00.010000+00:00,task-5957,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-28 08:33:01.592000+00:00 +Internet,RIGHT_case-4901,2011-01-27 00:00:00+00:00,General,2011-02-04 12:16:54.067000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource05,2010-12-02 00:00:00.010000+00:00,task-6503,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-01-03 11:14:02.661000+00:00 +Internet,RIGHT_case-4901,2011-01-27 00:00:00+00:00,General,2011-02-04 12:16:54.067000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource05,2010-12-02 00:00:00.010000+00:00,task-6511,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-01-03 11:18:59.517000+00:00 +Internet,RIGHT_case-4901,2011-01-27 00:00:00+00:00,General,2011-02-04 12:16:54.067000+00:00,2011-01-27 00:00:00.010000+00:00,,Resource05,2010-12-02 00:00:00.010000+00:00,task-6524,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-01-03 11:39:13.388000+00:00 +Internet,RIGHT_case-4902,2011-01-28 01:06:40+00:00,General,2011-01-25 09:56:35.150000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource07,2010-12-03 01:06:40.010000+00:00,task-5824,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-27 09:57:34.660000+00:00 +Internet,RIGHT_case-4902,2011-01-28 01:06:40+00:00,General,2011-01-25 09:56:35.150000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource07,2010-12-03 01:06:40.010000+00:00,task-5821,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-27 10:03:26.385000+00:00 +Internet,RIGHT_case-4902,2011-01-28 01:06:40+00:00,General,2011-01-25 09:56:35.150000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource07,2010-12-03 01:06:40.010000+00:00,task-5834,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-28 08:13:40.017000+00:00 +Internet,RIGHT_case-4903,2011-01-28 01:06:40+00:00,General,2011-02-08 00:00:00.010000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource35,2010-12-03 01:06:40.010000+00:00,task-6676,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-04 16:42:52.586000+00:00 +Internet,RIGHT_case-4903,2011-01-28 01:06:40+00:00,General,2011-02-08 00:00:00.010000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource35,2010-12-03 01:06:40.010000+00:00,task-6739,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 11:55:07.330000+00:00 +Internet,RIGHT_case-4903,2011-01-28 01:06:40+00:00,General,2011-02-08 00:00:00.010000+00:00,2011-01-28 01:06:40.010000+00:00,,Resource35,2010-12-03 01:06:40.010000+00:00,task-7961,T10 Determine necessity to stop indication,complete,Group 1,admin2,2011-02-09 09:28:46.539000+00:00 +Post,RIGHT_case-4920,2011-04-13 01:06:40+00:00,General,2011-04-12 14:12:50.523000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource15,2010-12-08 01:06:40.010000+00:00,task-7937,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 11:15:12.572000+00:00 +Post,RIGHT_case-4920,2011-04-13 01:06:40+00:00,General,2011-04-12 14:12:50.523000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource15,2010-12-08 01:06:40.010000+00:00,task-8088,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:40:48.568000+00:00 +Post,RIGHT_case-4920,2011-04-13 01:06:40+00:00,General,2011-04-12 14:12:50.523000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource15,2010-12-08 01:06:40.010000+00:00,task-9278,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-24 09:00:21.103000+00:00 +Post,RIGHT_case-4922,2011-02-10 00:00:00+00:00,General,2011-02-11 11:36:29.855000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8559,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 11:09:50.532000+00:00 +Post,RIGHT_case-4922,2011-02-10 00:00:00+00:00,General,2011-02-11 11:36:29.855000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8703,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-18 08:42:16.927000+00:00 +Post,RIGHT_case-4922,2011-02-10 00:00:00+00:00,General,2011-02-11 11:36:29.855000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8585,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 10:12:55.742000+00:00 +Post,RIGHT_case-4923,2011-02-10 00:00:00+00:00,General,2011-02-11 11:28:04.497000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8573,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 11:50:56.307000+00:00 +Post,RIGHT_case-4923,2011-02-10 00:00:00+00:00,General,2011-02-11 11:28:04.497000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8735,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-01-18 09:49:33.297000+00:00 +Post,RIGHT_case-4923,2011-02-10 00:00:00+00:00,General,2011-02-11 11:28:04.497000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8737,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-18 09:50:05.744000+00:00 +Post,RIGHT_case-4923,2011-02-10 00:00:00+00:00,General,2011-02-11 11:28:04.497000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource02,2010-12-16 00:00:00.010000+00:00,task-8594,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 10:09:36.866000+00:00 +Desk,RIGHT_case-4924,2011-02-14 00:00:00+00:00,General,2011-03-28 12:41:17.155000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-20 00:00:00.010000+00:00,task-8801,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-18 12:55:08.036000+00:00 +Desk,RIGHT_case-4924,2011-02-14 00:00:00+00:00,General,2011-03-28 12:41:17.155000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-20 00:00:00.010000+00:00,task-8799,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-02-07 15:33:18.597000+00:00 +Desk,RIGHT_case-4924,2011-02-14 00:00:00+00:00,General,2011-03-28 12:41:17.155000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-20 00:00:00.010000+00:00,task-11518,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-09 15:06:11.727000+00:00 +Desk,RIGHT_case-4924,2011-02-14 00:00:00+00:00,General,2011-03-28 12:41:17.155000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-20 00:00:00.010000+00:00,task-11528,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-11 08:38:09.108000+00:00 +Desk,RIGHT_case-4925,2011-02-11 01:06:40+00:00,General,,2011-02-11 01:06:40.010000+00:00,,Resource12,2010-12-17 01:06:40.010000+00:00,task-6521,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-01-03 11:34:03.359000+00:00 +Desk,RIGHT_case-4925,2011-02-11 01:06:40+00:00,General,,2011-02-11 01:06:40.010000+00:00,,Resource12,2010-12-17 01:06:40.010000+00:00,task-6578,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 11:50:26.443000+00:00 +Desk,RIGHT_case-4925,2011-02-11 01:06:40+00:00,General,,2011-02-11 01:06:40.010000+00:00,,Resource12,2010-12-17 01:06:40.010000+00:00,task-7856,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource12,2011-01-13 11:30:08.958000+00:00 +Desk,RIGHT_case-4925,2011-02-11 01:06:40+00:00,General,,2011-02-11 01:06:40.010000+00:00,,Resource12,2010-12-17 01:06:40.010000+00:00,task-8097,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-13 11:31:10.934000+00:00 +Desk,RIGHT_case-4926,2011-04-04 01:06:40+00:00,General,2011-03-17 09:22:44.335000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-7946,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-12 15:21:16.895000+00:00 +Desk,RIGHT_case-4926,2011-04-04 01:06:40+00:00,General,2011-03-17 09:22:44.335000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-7940,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 11:17:26.872000+00:00 +Desk,RIGHT_case-4926,2011-04-04 01:06:40+00:00,General,2011-03-17 09:22:44.335000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-8090,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:42:16.277000+00:00 +Desk,RIGHT_case-4927,2011-02-14 00:00:00+00:00,General,2011-01-13 11:56:15.421000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource07,2010-12-20 00:00:00.010000+00:00,task-6238,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-30 08:01:02.994000+00:00 +Desk,RIGHT_case-4927,2011-02-14 00:00:00+00:00,General,2011-01-13 11:56:15.421000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource07,2010-12-20 00:00:00.010000+00:00,task-6236,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-30 09:09:49.746000+00:00 +Desk,RIGHT_case-4927,2011-02-14 00:00:00+00:00,General,2011-01-13 11:56:15.421000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource07,2010-12-20 00:00:00.010000+00:00,task-6387,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-03 16:32:49.294000+00:00 +Internet,RIGHT_case-4930,2011-02-10 01:06:40+00:00,General,2011-02-16 14:49:13.268000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-03 01:06:40.010000+00:00,task-7183,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-07 09:49:04.509000+00:00 +Internet,RIGHT_case-4930,2011-02-10 01:06:40+00:00,General,2011-02-16 14:49:13.268000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-03 01:06:40.010000+00:00,task-7160,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 09:49:42.207000+00:00 +Internet,RIGHT_case-4930,2011-02-10 01:06:40+00:00,General,2011-02-16 14:49:13.268000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-03 01:06:40.010000+00:00,task-7225,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 15:45:32.198000+00:00 +Internet,RIGHT_case-4939,2011-02-01 00:00:00+00:00,General,2011-02-01 16:16:17.020000+00:00,2011-02-01 00:00:00.010000+00:00,,Resource17,2010-12-07 00:00:00.010000+00:00,task-7392,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-10 10:28:47.739000+00:00 +Internet,RIGHT_case-4939,2011-02-01 00:00:00+00:00,General,2011-02-01 16:16:17.020000+00:00,2011-02-01 00:00:00.010000+00:00,,Resource17,2010-12-07 00:00:00.010000+00:00,task-7390,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 10:29:22.672000+00:00 +Internet,RIGHT_case-4939,2011-02-01 00:00:00+00:00,General,2011-02-01 16:16:17.020000+00:00,2011-02-01 00:00:00.010000+00:00,,Resource17,2010-12-07 00:00:00.010000+00:00,task-7411,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:27:46.315000+00:00 +Internet,RIGHT_case-4941,2011-02-02 00:00:00+00:00,General,2011-05-11 09:38:26.369000+00:00,2011-02-02 00:00:00.010000+00:00,,Resource09,2010-12-08 00:00:00.010000+00:00,task-8122,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-13 12:15:47.147000+00:00 +Internet,RIGHT_case-4941,2011-02-02 00:00:00+00:00,General,2011-05-11 09:38:26.369000+00:00,2011-02-02 00:00:00.010000+00:00,,Resource09,2010-12-08 00:00:00.010000+00:00,task-6856,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-13 12:59:56.180000+00:00 +Internet,RIGHT_case-4941,2011-02-02 00:00:00+00:00,General,2011-05-11 09:38:26.369000+00:00,2011-02-02 00:00:00.010000+00:00,,Resource09,2010-12-08 00:00:00.010000+00:00,task-8233,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:33:55.023000+00:00 +Internet,RIGHT_case-4943,2011-04-14 01:06:40+00:00,General,2011-04-11 00:00:00.020000+00:00,2011-04-14 01:06:40.020000+00:00,,Resource17,2010-12-09 01:06:40.010000+00:00,task-7417,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-10 12:16:06.257000+00:00 +Internet,RIGHT_case-4943,2011-04-14 01:06:40+00:00,General,2011-04-11 00:00:00.020000+00:00,2011-04-14 01:06:40.020000+00:00,,Resource17,2010-12-09 01:06:40.010000+00:00,task-7415,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 12:18:14.442000+00:00 +Internet,RIGHT_case-4943,2011-04-14 01:06:40+00:00,General,2011-04-11 00:00:00.020000+00:00,2011-04-14 01:06:40.020000+00:00,,Resource17,2010-12-09 01:06:40.010000+00:00,task-7445,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:25:53.817000+00:00 +Internet,RIGHT_case-4944,2011-03-17 01:06:40+00:00,General,2011-03-02 10:27:28.139000+00:00,2011-03-17 01:06:40.010000+00:00,,Resource02,2010-12-09 01:06:40.010000+00:00,task-9028,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-19 17:09:55.928000+00:00 +Internet,RIGHT_case-4944,2011-03-17 01:06:40+00:00,General,2011-03-02 10:27:28.139000+00:00,2011-03-17 01:06:40.010000+00:00,,Resource02,2010-12-09 01:06:40.010000+00:00,task-9034,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-20 08:38:19.981000+00:00 +Internet,RIGHT_case-4944,2011-03-17 01:06:40+00:00,General,2011-03-02 10:27:28.139000+00:00,2011-03-17 01:06:40.010000+00:00,,Resource02,2010-12-09 01:06:40.010000+00:00,task-9193,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 12:20:40.484000+00:00 +Desk,RIGHT_case-4946,2011-02-04 01:06:40+00:00,General,2011-02-17 15:11:15.249000+00:00,2011-02-04 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-6362,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:19:39.338000+00:00 +Desk,RIGHT_case-4946,2011-02-04 01:06:40+00:00,General,2011-02-17 15:11:15.249000+00:00,2011-02-04 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-6392,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-31 11:43:06.997000+00:00 +Desk,RIGHT_case-4946,2011-02-04 01:06:40+00:00,General,2011-02-17 15:11:15.249000+00:00,2011-02-04 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-7789,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-11 16:06:35.978000+00:00 +Desk,RIGHT_case-4947,2011-02-10 01:06:40+00:00,General,2011-02-10 16:09:18.704000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-16 01:06:40.010000+00:00,task-7458,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-10 15:12:24.068000+00:00 +Desk,RIGHT_case-4947,2011-02-10 01:06:40+00:00,General,2011-02-10 16:09:18.704000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-16 01:06:40.010000+00:00,task-7456,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 15:13:10.742000+00:00 +Desk,RIGHT_case-4947,2011-02-10 01:06:40+00:00,General,2011-02-10 16:09:18.704000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource17,2010-12-16 01:06:40.010000+00:00,task-7490,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 11:38:07.480000+00:00 +Post,RIGHT_case-4954,2011-01-31 00:00:00+00:00,General,2011-02-01 20:59:36.460000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource17,2010-12-06 00:00:00.010000+00:00,task-7327,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 15:54:38.491000+00:00 +Post,RIGHT_case-4954,2011-01-31 00:00:00+00:00,General,2011-02-01 20:59:36.460000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource17,2010-12-06 00:00:00.010000+00:00,task-7330,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-07 15:55:12.717000+00:00 +Post,RIGHT_case-4954,2011-01-31 00:00:00+00:00,General,2011-02-01 20:59:36.460000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource17,2010-12-06 00:00:00.010000+00:00,task-7342,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 11:41:24.562000+00:00 +Post,RIGHT_case-4955,2011-02-14 01:06:40+00:00,General,2011-02-11 08:39:09.903000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-6358,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 13:46:11.494000+00:00 +Post,RIGHT_case-4955,2011-02-14 01:06:40+00:00,General,2011-02-11 08:39:09.903000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-6391,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-31 11:42:36.327000+00:00 +Post,RIGHT_case-4955,2011-02-14 01:06:40+00:00,General,2011-02-11 08:39:09.903000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource08,2010-12-06 01:06:40.010000+00:00,task-7469,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-10 15:40:01.059000+00:00 +Internet,RIGHT_case-4969,2011-02-18 01:06:40+00:00,General,2011-02-17 11:25:34.815000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-6366,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-01-13 15:48:45.500000+00:00 +Internet,RIGHT_case-4969,2011-02-18 01:06:40+00:00,General,2011-02-17 11:25:34.815000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-8209,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-13 15:51:32.019000+00:00 +Internet,RIGHT_case-4969,2011-02-18 01:06:40+00:00,General,2011-02-17 11:25:34.815000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource08,2010-12-10 01:06:40.010000+00:00,task-8244,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:36:13.350000+00:00 +Internet,RIGHT_case-4972,2011-02-21 00:00:00+00:00,General,2010-12-30 12:07:16.045000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-6110,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-28 16:53:21.828000+00:00 +Internet,RIGHT_case-4972,2011-02-21 00:00:00+00:00,General,2010-12-30 12:07:16.045000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-6108,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-30 08:59:32.164000+00:00 +Internet,RIGHT_case-4972,2011-02-21 00:00:00+00:00,General,2010-12-30 12:07:16.045000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-6271,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 09:37:28.595000+00:00 +Internet,RIGHT_case-4973,2011-02-21 00:00:00+00:00,General,2010-12-30 12:01:52.371000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-6098,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-28 16:24:13.731000+00:00 +Internet,RIGHT_case-4973,2011-02-21 00:00:00+00:00,General,2010-12-30 12:01:52.371000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-6096,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-30 09:04:50.621000+00:00 +Internet,RIGHT_case-4973,2011-02-21 00:00:00+00:00,General,2010-12-30 12:01:52.371000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource07,2010-12-27 00:00:00.010000+00:00,task-6293,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 10:32:04.094000+00:00 +Internet,RIGHT_case-4975,2011-04-28 01:06:40+00:00,General,2011-04-21 16:09:13.659000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource04,2010-12-10 01:06:40.010000+00:00,task-6490,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-03 10:32:13.490000+00:00 +Internet,RIGHT_case-4975,2011-04-28 01:06:40+00:00,General,2011-04-21 16:09:13.659000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource04,2010-12-10 01:06:40.010000+00:00,task-6500,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-03 11:07:26.033000+00:00 +Internet,RIGHT_case-4975,2011-04-28 01:06:40+00:00,General,2011-04-21 16:09:13.659000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource04,2010-12-10 01:06:40.010000+00:00,task-6550,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 11:48:13.916000+00:00 +Post,RIGHT_case-4976,2011-02-07 00:00:00+00:00,General,2011-02-03 12:17:25.080000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource11,2010-12-13 00:00:00.010000+00:00,task-5975,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-28 09:01:33.415000+00:00 +Post,RIGHT_case-4976,2011-02-07 00:00:00+00:00,General,2011-02-03 12:17:25.080000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource11,2010-12-13 00:00:00.010000+00:00,task-5971,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-28 12:25:05.826000+00:00 +Post,RIGHT_case-4976,2011-02-07 00:00:00+00:00,General,2011-02-03 12:17:25.080000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource11,2010-12-13 00:00:00.010000+00:00,task-6045,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-29 11:02:58.354000+00:00 +Desk,RIGHT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6059,T02 Check confirmation of receipt,complete,Group 4,Resource12,2010-12-28 13:42:16.852000+00:00 +Desk,RIGHT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6063,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-01-03 13:52:15.336000+00:00 +Desk,RIGHT_case-4978,2011-02-10 01:06:40+00:00,General,2011-10-26 11:26:41.868000+00:00,2011-02-10 01:06:40.010000+00:00,,Resource12,2010-12-16 01:06:40.010000+00:00,task-6582,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-03 14:03:13.971000+00:00 +Internet,RIGHT_case-4980,2011-02-07 01:06:40+00:00,General,2011-04-07 15:43:27.347000+00:00,2011-02-07 01:06:40.010000+00:00,,Resource09,2010-12-13 01:06:40.010000+00:00,task-6871,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-05 13:40:23.362000+00:00 +Internet,RIGHT_case-4980,2011-02-07 01:06:40+00:00,General,2011-04-07 15:43:27.347000+00:00,2011-02-07 01:06:40.010000+00:00,,Resource09,2010-12-13 01:06:40.010000+00:00,task-6869,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-13 12:59:26.562000+00:00 +Internet,RIGHT_case-4980,2011-02-07 01:06:40+00:00,General,2011-04-07 15:43:27.347000+00:00,2011-02-07 01:06:40.010000+00:00,,Resource09,2010-12-13 01:06:40.010000+00:00,task-9417,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-01-25 09:23:19.236000+00:00 +Internet,RIGHT_case-4981,2011-02-07 00:00:00+00:00,General,2011-03-11 10:49:44.794000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource14,2010-12-13 00:00:00.010000+00:00,task-7584,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-01-11 10:29:52.600000+00:00 +Internet,RIGHT_case-4981,2011-02-07 00:00:00+00:00,General,2011-03-11 10:49:44.794000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource14,2010-12-13 00:00:00.010000+00:00,task-7570,T02 Check confirmation of receipt,complete,EMPTY,Resource14,2011-01-11 10:31:20.626000+00:00 +Internet,RIGHT_case-4981,2011-02-07 00:00:00+00:00,General,2011-03-11 10:49:44.794000+00:00,2011-02-07 00:00:00.010000+00:00,,Resource14,2010-12-13 00:00:00.010000+00:00,task-7603,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 14:11:50.889000+00:00 +Internet,RIGHT_case-4986,2011-03-01 01:06:40+00:00,General,2011-02-23 14:25:50.802000+00:00,2011-03-01 01:06:40.010000+00:00,,Resource04,2010-12-14 01:06:40.010000+00:00,task-6493,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-03 10:36:26.627000+00:00 +Internet,RIGHT_case-4986,2011-03-01 01:06:40+00:00,General,2011-02-23 14:25:50.802000+00:00,2011-03-01 01:06:40.010000+00:00,,Resource04,2010-12-14 01:06:40.010000+00:00,task-6563,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-03 12:57:00.153000+00:00 +Internet,RIGHT_case-4986,2011-03-01 01:06:40+00:00,General,2011-02-23 14:25:50.802000+00:00,2011-03-01 01:06:40.010000+00:00,,Resource04,2010-12-14 01:06:40.010000+00:00,task-6566,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 11:52:15.292000+00:00 +Desk,RIGHT_case-4995,2011-02-14 00:00:00+00:00,General,2011-03-02 16:51:39.087000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource14,2010-12-20 00:00:00.010000+00:00,task-7610,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-01-11 11:07:05.230000+00:00 +Desk,RIGHT_case-4995,2011-02-14 00:00:00+00:00,General,2011-03-02 16:51:39.087000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource14,2010-12-20 00:00:00.010000+00:00,task-7608,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-11 12:16:03.586000+00:00 +Desk,RIGHT_case-4995,2011-02-14 00:00:00+00:00,General,2011-03-02 16:51:39.087000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource14,2010-12-20 00:00:00.010000+00:00,task-7667,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:59:22.494000+00:00 +Internet,RIGHT_case-4997,2011-04-26 01:06:40+00:00,General,2011-04-20 15:20:40.063000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6807,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-01-05 10:25:20.918000+00:00 +Internet,RIGHT_case-4997,2011-04-26 01:06:40+00:00,General,2011-04-20 15:20:40.063000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6939,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource15,2011-01-06 08:33:32.413000+00:00 +Internet,RIGHT_case-4997,2011-04-26 01:06:40+00:00,General,2011-04-20 15:20:40.063000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6941,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-06 08:34:09.099000+00:00 +Internet,RIGHT_case-4997,2011-04-26 01:06:40+00:00,General,2011-04-20 15:20:40.063000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6860,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 15:22:59.592000+00:00 +Post,RIGHT_case-4998,2011-02-22 01:06:40+00:00,General,2011-02-24 13:44:43.546000+00:00,2011-02-22 01:06:40.010000+00:00,,Resource17,2010-12-20 01:06:40.010000+00:00,task-7472,T02 Check confirmation of receipt,complete,Group 4,Resource17,2011-01-10 15:26:01.053000+00:00 +Post,RIGHT_case-4998,2011-02-22 01:06:40+00:00,General,2011-02-24 13:44:43.546000+00:00,2011-02-22 01:06:40.010000+00:00,,Resource17,2010-12-20 01:06:40.010000+00:00,task-7475,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-10 15:26:34.907000+00:00 +Post,RIGHT_case-4998,2011-02-22 01:06:40+00:00,General,2011-02-24 13:44:43.546000+00:00,2011-02-22 01:06:40.010000+00:00,,Resource17,2010-12-20 01:06:40.010000+00:00,task-7498,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:21:00.919000+00:00 +Post,RIGHT_case-4999,2011-02-14 01:06:40+00:00,General,2011-01-27 10:50:30.276000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource07,2010-12-20 01:06:40.010000+00:00,task-6304,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-30 11:10:03.881000+00:00 +Post,RIGHT_case-4999,2011-02-14 01:06:40+00:00,General,2011-01-27 10:50:30.276000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource07,2010-12-20 01:06:40.010000+00:00,task-6306,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-30 11:20:02.359000+00:00 +Post,RIGHT_case-4999,2011-02-14 01:06:40+00:00,General,2011-01-27 10:50:30.276000+00:00,2011-02-14 01:06:40.010000+00:00,,Resource07,2010-12-20 01:06:40.010000+00:00,task-6321,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-03 16:30:26.236000+00:00 +Internet,RIGHT_case-5000,2011-04-06 01:06:40+00:00,General,2011-03-25 16:33:11.436000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6780,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-05 09:13:59.063000+00:00 +Internet,RIGHT_case-5000,2011-04-06 01:06:40+00:00,General,2011-03-25 16:33:11.436000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6776,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-05 09:31:51.052000+00:00 +Internet,RIGHT_case-5000,2011-04-06 01:06:40+00:00,General,2011-03-25 16:33:11.436000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource15,2010-12-15 01:06:40.010000+00:00,task-6795,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 12:18:31.862000+00:00 +Internet,RIGHT_case-5010,2011-02-09 00:00:00+00:00,General,2011-01-20 00:00:00.010000+00:00,2011-02-09 00:00:00.010000+00:00,,Resource08,2010-12-15 00:00:00.010000+00:00,task-6368,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:39:51.140000+00:00 +Internet,RIGHT_case-5010,2011-02-09 00:00:00+00:00,General,2011-01-20 00:00:00.010000+00:00,2011-02-09 00:00:00.010000+00:00,,Resource08,2010-12-15 00:00:00.010000+00:00,task-6390,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-31 11:32:16.370000+00:00 +Internet,RIGHT_case-5010,2011-02-09 00:00:00+00:00,General,2011-01-20 00:00:00.010000+00:00,2011-02-09 00:00:00.010000+00:00,,Resource08,2010-12-15 00:00:00.010000+00:00,task-8217,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-13 16:13:14.209000+00:00 +Internet,RIGHT_case-5011,2011-04-21 01:06:40+00:00,General,2011-04-20 12:10:05.125000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource08,2010-12-16 01:06:40.010000+00:00,task-6371,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:49:58.782000+00:00 +Internet,RIGHT_case-5011,2011-04-21 01:06:40+00:00,General,2011-04-20 12:10:05.125000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource08,2010-12-16 01:06:40.010000+00:00,task-6393,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-31 11:42:49.311000+00:00 +Internet,RIGHT_case-5011,2011-04-21 01:06:40+00:00,General,2011-04-20 12:10:05.125000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource08,2010-12-16 01:06:40.010000+00:00,task-8298,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-14 09:02:22.983000+00:00 +Internet,RIGHT_case-5014,2011-03-10 01:06:40+00:00,General,2011-03-10 10:23:39.974000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource15,2010-12-16 01:06:40.010000+00:00,task-6801,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-01-10 09:42:21.463000+00:00 +Internet,RIGHT_case-5014,2011-03-10 01:06:40+00:00,General,2011-03-10 10:23:39.974000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource15,2010-12-16 01:06:40.010000+00:00,task-7375,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-10 09:45:17.156000+00:00 +Internet,RIGHT_case-5014,2011-03-10 01:06:40+00:00,General,2011-03-10 10:23:39.974000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource15,2010-12-16 01:06:40.010000+00:00,task-7410,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:30:46.933000+00:00 +Internet,RIGHT_case-5021,2011-03-10 01:06:40+00:00,General,2011-03-08 12:13:10.584000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource04,2010-12-16 01:06:40.010000+00:00,task-7271,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-07 14:43:02.116000+00:00 +Internet,RIGHT_case-5021,2011-03-10 01:06:40+00:00,General,2011-03-08 12:13:10.584000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource04,2010-12-16 01:06:40.010000+00:00,task-7275,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-07 15:25:59.426000+00:00 +Internet,RIGHT_case-5021,2011-03-10 01:06:40+00:00,General,2011-03-08 12:13:10.584000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource04,2010-12-16 01:06:40.010000+00:00,task-7309,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 15:48:40.718000+00:00 +Internet,RIGHT_case-5024,2011-02-08 00:00:00+00:00,General,2011-01-20 15:42:14.981000+00:00,2011-02-08 00:00:00.010000+00:00,,Resource11,2010-12-14 00:00:00.010000+00:00,task-6666,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:02:31.403000+00:00 +Internet,RIGHT_case-5024,2011-02-08 00:00:00+00:00,General,2011-01-20 15:42:14.981000+00:00,2011-02-08 00:00:00.010000+00:00,,Resource11,2010-12-14 00:00:00.010000+00:00,task-7200,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-07 13:31:13.435000+00:00 +Internet,RIGHT_case-5024,2011-02-08 00:00:00+00:00,General,2011-01-20 15:42:14.981000+00:00,2011-02-08 00:00:00.010000+00:00,,Resource11,2010-12-14 00:00:00.010000+00:00,task-7025,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-01-12 08:31:51.362000+00:00 +Internet,RIGHT_case-5036,2011-02-16 01:06:40+00:00,General,2011-02-11 16:37:55.743000+00:00,2011-02-16 01:06:40.010000+00:00,,Resource02,2010-12-15 01:06:40.010000+00:00,task-8036,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-01-13 10:23:53.689000+00:00 +Internet,RIGHT_case-5036,2011-02-16 01:06:40+00:00,General,2011-02-11 16:37:55.743000+00:00,2011-02-16 01:06:40.010000+00:00,,Resource02,2010-12-15 01:06:40.010000+00:00,task-8058,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-13 10:57:02.562000+00:00 +Internet,RIGHT_case-5036,2011-02-16 01:06:40+00:00,General,2011-02-11 16:37:55.743000+00:00,2011-02-16 01:06:40.010000+00:00,,Resource02,2010-12-15 01:06:40.010000+00:00,task-8069,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:39:28.814000+00:00 +Internet,RIGHT_case-5037,2011-02-24 00:00:00+00:00,General,2011-01-13 12:28:26.950000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource07,2010-12-30 00:00:00.010000+00:00,task-6735,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:09:05.023000+00:00 +Internet,RIGHT_case-5037,2011-02-24 00:00:00+00:00,General,2011-01-13 12:28:26.950000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource07,2010-12-30 00:00:00.010000+00:00,task-6864,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-06 12:29:36.525000+00:00 +Internet,RIGHT_case-5037,2011-02-24 00:00:00+00:00,General,2011-01-13 12:28:26.950000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource07,2010-12-30 00:00:00.010000+00:00,task-7067,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-06 12:33:51.324000+00:00 +Internet,RIGHT_case-5039,2011-02-10 00:00:00+00:00,General,2011-02-01 08:57:30.509000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6754,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:10:15.620000+00:00 +Internet,RIGHT_case-5039,2011-02-10 00:00:00+00:00,General,2011-02-01 08:57:30.509000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6862,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-06 10:54:04.863000+00:00 +Internet,RIGHT_case-5040,2011-02-10 00:00:00+00:00,General,2011-02-03 13:07:56.840000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6756,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:11:35.465000+00:00 +Internet,RIGHT_case-5040,2011-02-10 00:00:00+00:00,General,2011-02-03 13:07:56.840000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6865,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-06 10:17:11.945000+00:00 +Internet,RIGHT_case-5040,2011-02-10 00:00:00+00:00,General,2011-02-03 13:07:56.840000+00:00,2011-02-10 00:00:00.010000+00:00,,Resource07,2010-12-16 00:00:00.010000+00:00,task-6963,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-06 11:01:13.253000+00:00 +Internet,RIGHT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8127,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 12:19:49.949000+00:00 +Internet,RIGHT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8135,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:43:42.315000+00:00 +Internet,RIGHT_case-5042,2011-03-15 01:06:40+00:00,General,2011-03-15 16:32:41.443000+00:00,2011-03-15 01:06:40.010000+00:00,,Resource02,2010-12-07 01:06:40.010000+00:00,task-8775,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-18 11:04:49.352000+00:00 +Internet,RIGHT_case-5043,2011-02-11 00:00:00+00:00,General,2011-02-04 11:55:21.184000+00:00,2011-02-11 00:00:00.010000+00:00,,Resource07,2010-12-17 00:00:00.010000+00:00,task-6758,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:12:44.191000+00:00 +Internet,RIGHT_case-5043,2011-02-11 00:00:00+00:00,General,2011-02-04 11:55:21.184000+00:00,2011-02-11 00:00:00.010000+00:00,,Resource07,2010-12-17 00:00:00.010000+00:00,task-6827,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2011-01-05 11:36:31.255000+00:00 +Internet,RIGHT_case-5043,2011-02-11 00:00:00+00:00,General,2011-02-04 11:55:21.184000+00:00,2011-02-11 00:00:00.010000+00:00,,Resource07,2010-12-17 00:00:00.010000+00:00,task-6841,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-01-05 11:39:27.077000+00:00 +Internet,RIGHT_case-5044,2011-06-10 01:06:40+00:00,General,2011-06-07 11:13:01.358000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource02,2010-12-17 01:06:40.010000+00:00,task-7593,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-11 10:42:13.291000+00:00 +Internet,RIGHT_case-5044,2011-06-10 01:06:40+00:00,General,2011-06-07 11:13:01.358000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource02,2010-12-17 01:06:40.010000+00:00,task-7596,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-01-11 10:45:40.010000+00:00 +Internet,RIGHT_case-5044,2011-06-10 01:06:40+00:00,General,2011-06-07 11:13:01.358000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource02,2010-12-17 01:06:40.010000+00:00,task-7598,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-11 10:46:37.624000+00:00 +Internet,RIGHT_case-5044,2011-06-10 01:06:40+00:00,General,2011-06-07 11:13:01.358000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource02,2010-12-17 01:06:40.010000+00:00,task-7607,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 14:16:05.601000+00:00 +Internet,RIGHT_case-5045,2011-02-11 01:06:40+00:00,General,2011-01-20 13:13:35.461000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource11,2010-12-17 01:06:40.010000+00:00,task-6544,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-03 11:59:37.887000+00:00 +Internet,RIGHT_case-5045,2011-02-11 01:06:40+00:00,General,2011-01-20 13:13:35.461000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource11,2010-12-17 01:06:40.010000+00:00,task-6542,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-03 16:08:49.361000+00:00 +Internet,RIGHT_case-5045,2011-02-11 01:06:40+00:00,General,2011-01-20 13:13:35.461000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource11,2010-12-17 01:06:40.010000+00:00,task-6640,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-04 16:48:30.524000+00:00 +Internet,RIGHT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-6884,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-13 10:25:57.769000+00:00 +Internet,RIGHT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-8557,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-17 12:17:15.543000+00:00 +Internet,RIGHT_case-5046,2011-02-11 01:06:40+00:00,General,2011-02-10 14:04:38.006000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-8041,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:38:16.529000+00:00 +Internet,RIGHT_case-5091,2011-02-15 00:00:00+00:00,General,2011-01-20 09:41:09.024000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6731,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:06:08.165000+00:00 +Internet,RIGHT_case-5091,2011-02-15 00:00:00+00:00,General,2011-01-20 09:41:09.024000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6861,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-06 10:21:14.403000+00:00 +Internet,RIGHT_case-5091,2011-02-15 00:00:00+00:00,General,2011-01-20 09:41:09.024000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6965,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-06 11:30:17.980000+00:00 +Internet,RIGHT_case-5099,2011-02-15 00:00:00+00:00,General,2011-01-13 12:40:33.053000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6733,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:03:56.397000+00:00 +Internet,RIGHT_case-5099,2011-02-15 00:00:00+00:00,General,2011-01-13 12:40:33.053000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6863,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-06 10:20:02.390000+00:00 +Internet,RIGHT_case-5099,2011-02-15 00:00:00+00:00,General,2011-01-13 12:40:33.053000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-7040,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-06 12:17:40.020000+00:00 +Internet,RIGHT_case-5101,2011-02-15 00:00:00+00:00,General,2011-01-27 10:29:27.194000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-6969,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-01-06 11:59:25.872000+00:00 +Internet,RIGHT_case-5101,2011-02-15 00:00:00+00:00,General,2011-01-27 10:29:27.194000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-7032,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-06 12:24:59.849000+00:00 +Internet,RIGHT_case-5101,2011-02-15 00:00:00+00:00,General,2011-01-27 10:29:27.194000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource07,2010-12-21 00:00:00.010000+00:00,task-7218,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-07 14:55:41.914000+00:00 +Internet,RIGHT_case-5109,2011-02-20 01:06:40+00:00,General,2011-02-03 13:18:21.261000+00:00,2011-02-20 01:06:40.010000+00:00,,Resource01,2010-12-26 01:06:40.010000+00:00,task-6971,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-01-06 10:50:38.615000+00:00 +Internet,RIGHT_case-5109,2011-02-20 01:06:40+00:00,General,2011-02-03 13:18:21.261000+00:00,2011-02-20 01:06:40.010000+00:00,,Resource01,2010-12-26 01:06:40.010000+00:00,task-6974,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-06 10:53:43.485000+00:00 +Internet,RIGHT_case-5109,2011-02-20 01:06:40+00:00,General,2011-02-03 13:18:21.261000+00:00,2011-02-20 01:06:40.010000+00:00,,Resource01,2010-12-26 01:06:40.010000+00:00,task-7207,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-07 15:04:37.202000+00:00 +Desk,RIGHT_case-5113,2011-02-15 00:00:00+00:00,General,2011-02-11 13:12:36.819000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource17,2010-12-21 00:00:00.010000+00:00,task-9127,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-20 18:15:16.077000+00:00 +Desk,RIGHT_case-5113,2011-02-15 00:00:00+00:00,General,2011-02-11 13:12:36.819000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource17,2010-12-21 00:00:00.010000+00:00,task-9130,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-20 18:15:55.081000+00:00 +Desk,RIGHT_case-5113,2011-02-15 00:00:00+00:00,General,2011-02-11 13:12:36.819000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource17,2010-12-21 00:00:00.010000+00:00,task-9172,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 12:08:25.996000+00:00 +Post,RIGHT_case-5115,2011-02-17 00:00:00+00:00,General,2011-02-24 13:42:20.236000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource18,2010-12-23 00:00:00.010000+00:00,task-6961,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-01-11 11:14:52.864000+00:00 +Post,RIGHT_case-5115,2011-02-17 00:00:00+00:00,General,2011-02-24 13:42:20.236000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource18,2010-12-23 00:00:00.010000+00:00,task-7660,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 14:07:34.908000+00:00 +Post,RIGHT_case-5115,2011-02-17 00:00:00+00:00,General,2011-02-24 13:42:20.236000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource18,2010-12-23 00:00:00.010000+00:00,task-7865,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-12 10:56:29.555000+00:00 +Post,RIGHT_case-5120,2011-02-16 00:00:00+00:00,General,2011-02-08 10:13:36.786000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource02,2010-12-22 00:00:00.010000+00:00,task-8444,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-17 12:38:13.316000+00:00 +Post,RIGHT_case-5120,2011-02-16 00:00:00+00:00,General,2011-02-08 10:13:36.786000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource02,2010-12-22 00:00:00.010000+00:00,task-8965,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:20:09.442000+00:00 +Post,RIGHT_case-5120,2011-02-16 00:00:00+00:00,General,2011-02-08 10:13:36.786000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource02,2010-12-22 00:00:00.010000+00:00,task-9541,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-25 16:56:12.975000+00:00 +Internet,RIGHT_case-5121,2011-07-05 01:06:40+00:00,General,2011-07-06 15:23:31.924000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource04,2011-01-04 01:06:40.010000+00:00,task-9576,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-26 08:45:12.394000+00:00 +Internet,RIGHT_case-5121,2011-07-05 01:06:40+00:00,General,2011-07-06 15:23:31.924000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource04,2011-01-04 01:06:40.010000+00:00,task-9749,T05 Print and send confirmation of receipt,complete,EMPTY,Resource04,2011-01-27 15:39:29.408000+00:00 +Internet,RIGHT_case-5121,2011-07-05 01:06:40+00:00,General,2011-07-06 15:23:31.924000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource04,2011-01-04 01:06:40.010000+00:00,task-10468,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-02-01 16:18:25.318000+00:00 +Post,RIGHT_case-5133,2011-02-22 00:00:00+00:00,General,2011-02-18 14:46:47.461000+00:00,2011-02-22 00:00:00.010000+00:00,,Resource08,2010-12-28 00:00:00.010000+00:00,task-8697,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-01-18 08:12:37.316000+00:00 +Post,RIGHT_case-5133,2011-02-22 00:00:00+00:00,General,2011-02-18 14:46:47.461000+00:00,2011-02-22 00:00:00.010000+00:00,,Resource08,2010-12-28 00:00:00.010000+00:00,task-8880,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 10:51:31.787000+00:00 +Post,RIGHT_case-5133,2011-02-22 00:00:00+00:00,General,2011-02-18 14:46:47.461000+00:00,2011-02-22 00:00:00.010000+00:00,,Resource08,2010-12-28 00:00:00.010000+00:00,task-10200,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-31 13:26:27.235000+00:00 +Internet,RIGHT_case-5135,2011-03-30 01:06:40+00:00,General,2011-04-20 10:56:09.528000+00:00,2011-03-30 01:06:40.020000+00:00,,Resource02,2010-12-22 01:06:40.010000+00:00,task-7129,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-06 16:36:03.719000+00:00 +Internet,RIGHT_case-5135,2011-03-30 01:06:40+00:00,General,2011-04-20 10:56:09.528000+00:00,2011-03-30 01:06:40.020000+00:00,,Resource02,2010-12-22 01:06:40.010000+00:00,task-7138,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-01-07 07:51:53.105000+00:00 +Internet,RIGHT_case-5135,2011-03-30 01:06:40+00:00,General,2011-04-20 10:56:09.528000+00:00,2011-03-30 01:06:40.020000+00:00,,Resource02,2010-12-22 01:06:40.010000+00:00,task-7140,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource02,2011-01-07 07:52:36.087000+00:00 +Internet,RIGHT_case-5135,2011-03-30 01:06:40+00:00,General,2011-04-20 10:56:09.528000+00:00,2011-03-30 01:06:40.020000+00:00,,Resource02,2010-12-22 01:06:40.010000+00:00,task-7142,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-07 07:53:24.448000+00:00 +Internet,RIGHT_case-5135,2011-03-30 01:06:40+00:00,General,2011-04-20 10:56:09.528000+00:00,2011-03-30 01:06:40.020000+00:00,,Resource02,2010-12-22 01:06:40.010000+00:00,task-7144,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 15:37:17.405000+00:00 +Desk,RIGHT_case-5137,2011-05-03 01:06:40+00:00,General,2011-04-18 16:09:57.975000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource14,2010-12-28 01:06:40.010000+00:00,task-7626,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-01-11 11:18:11.442000+00:00 +Desk,RIGHT_case-5137,2011-05-03 01:06:40+00:00,General,2011-04-18 16:09:57.975000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource14,2010-12-28 01:06:40.010000+00:00,task-7624,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-13 13:01:06.651000+00:00 +Desk,RIGHT_case-5137,2011-05-03 01:06:40+00:00,General,2011-04-18 16:09:57.975000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource14,2010-12-28 01:06:40.010000+00:00,task-8225,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 10:07:50.341000+00:00 +Internet,RIGHT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-8973,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-19 15:06:03.508000+00:00 +Internet,RIGHT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-8971,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-02-07 15:31:47.396000+00:00 +Internet,RIGHT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-16955,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-21 13:11:10.252000+00:00 +Internet,RIGHT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-17020,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-21 13:16:27.307000+00:00 +Internet,RIGHT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-17036,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-21 13:53:05.298000+00:00 +Internet,RIGHT_case-5141,2011-02-16 00:00:00+00:00,General,2011-04-18 12:50:19.125000+00:00,2011-02-16 00:00:00.010000+00:00,,Resource09,2010-12-22 00:00:00.010000+00:00,task-17039,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-03-21 13:53:37.981000+00:00 +Desk,RIGHT_case-5144,2011-02-24 01:06:40+00:00,General,2011-04-12 13:53:01.110000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource12,2010-12-30 01:06:40.010000+00:00,task-8288,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-14 08:20:51.784000+00:00 +Desk,RIGHT_case-5144,2011-02-24 01:06:40+00:00,General,2011-04-12 13:53:01.110000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource12,2010-12-30 01:06:40.010000+00:00,task-8020,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-01-14 08:23:19.475000+00:00 +Desk,RIGHT_case-5144,2011-02-24 01:06:40+00:00,General,2011-04-12 13:53:01.110000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource12,2010-12-30 01:06:40.010000+00:00,task-12757,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-17 15:00:55.430000+00:00 +Internet,RIGHT_case-5145,2011-02-15 00:00:00+00:00,General,2011-02-09 15:24:56.103000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource15,2010-12-21 00:00:00.010000+00:00,task-7753,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-11 14:43:57.211000+00:00 +Internet,RIGHT_case-5145,2011-02-15 00:00:00+00:00,General,2011-02-09 15:24:56.103000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource15,2010-12-21 00:00:00.010000+00:00,task-7751,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-12 11:42:55.939000+00:00 +Internet,RIGHT_case-5145,2011-02-15 00:00:00+00:00,General,2011-02-09 15:24:56.103000+00:00,2011-02-15 00:00:00.010000+00:00,,Resource15,2010-12-21 00:00:00.010000+00:00,task-7887,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-12 14:43:41.124000+00:00 +Post,RIGHT_case-5146,2011-02-24 01:06:40+00:00,General,2011-03-09 09:14:56.415000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-7621,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-11 11:13:03.112000+00:00 +Post,RIGHT_case-5146,2011-02-24 01:06:40+00:00,General,2011-03-09 09:14:56.415000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-7616,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-11 12:17:23.067000+00:00 +Post,RIGHT_case-5146,2011-02-24 01:06:40+00:00,General,2011-03-09 09:14:56.415000+00:00,2011-02-24 01:06:40.010000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-7669,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:43:29.280000+00:00 +Internet,RIGHT_case-5151,2011-03-01 00:00:00+00:00,General,2011-02-03 13:29:48.588000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource01,2011-01-04 00:00:00.010000+00:00,task-7002,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-01-06 11:15:53.252000+00:00 +Internet,RIGHT_case-5151,2011-03-01 00:00:00+00:00,General,2011-02-03 13:29:48.588000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource01,2011-01-04 00:00:00.010000+00:00,task-7005,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-06 11:20:30.973000+00:00 +Internet,RIGHT_case-5151,2011-03-01 00:00:00+00:00,General,2011-02-03 13:29:48.588000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource01,2011-01-04 00:00:00.010000+00:00,task-7214,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-07 15:20:18.020000+00:00 +Post,RIGHT_case-5153,2011-03-16 01:06:40+00:00,General,2011-03-24 14:17:15.719000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-7094,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-01-11 11:21:22.692000+00:00 +Post,RIGHT_case-5153,2011-03-16 01:06:40+00:00,General,2011-03-24 14:17:15.719000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-7661,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 14:05:18.828000+00:00 +Post,RIGHT_case-5153,2011-03-16 01:06:40+00:00,General,2011-03-24 14:17:15.719000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-7743,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-11 14:35:49.744000+00:00 +Post,RIGHT_case-5155,2011-03-16 01:06:40+00:00,General,2011-03-17 15:47:34.137000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-7096,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-01-11 11:22:44.910000+00:00 +Post,RIGHT_case-5155,2011-03-16 01:06:40+00:00,General,2011-03-17 15:47:34.137000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-7664,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:49:46.226000+00:00 +Post,RIGHT_case-5155,2011-03-16 01:06:40+00:00,General,2011-03-17 15:47:34.137000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource18,2010-12-29 01:06:40.010000+00:00,task-7760,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-11 14:47:15.114000+00:00 +Internet,RIGHT_case-5167,2011-02-17 00:00:00+00:00,General,2011-01-27 10:38:44.999000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource01,2010-12-23 00:00:00.010000+00:00,task-7163,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-01-07 09:15:05.586000+00:00 +Internet,RIGHT_case-5167,2011-02-17 00:00:00+00:00,General,2011-01-27 10:38:44.999000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource01,2010-12-23 00:00:00.010000+00:00,task-7166,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-07 09:15:55.787000+00:00 +Internet,RIGHT_case-5167,2011-02-17 00:00:00+00:00,General,2011-01-27 10:38:44.999000+00:00,2011-02-17 00:00:00.010000+00:00,,Resource01,2010-12-23 00:00:00.010000+00:00,task-7227,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-07 15:38:36.184000+00:00 +e-mail,RIGHT_case-5185,2011-03-03 00:00:00+00:00,General,2011-01-31 14:22:37.998000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource14,2011-01-06 00:00:00.010000+00:00,task-7774,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-01-11 14:53:19.335000+00:00 +e-mail,RIGHT_case-5185,2011-03-03 00:00:00+00:00,General,2011-01-31 14:22:37.998000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource14,2011-01-06 00:00:00.010000+00:00,task-7740,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-12 11:45:22.480000+00:00 +e-mail,RIGHT_case-5185,2011-03-03 00:00:00+00:00,General,2011-01-31 14:22:37.998000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource14,2011-01-06 00:00:00.010000+00:00,task-7889,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-12 15:01:30.274000+00:00 +Internet,RIGHT_case-5186,2011-02-18 01:06:40+00:00,General,2011-02-11 15:02:31.454000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource18,2010-12-24 01:06:40.010000+00:00,task-7197,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-01-11 11:19:12.683000+00:00 +Internet,RIGHT_case-5186,2011-02-18 01:06:40+00:00,General,2011-02-11 15:02:31.454000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource18,2010-12-24 01:06:40.010000+00:00,task-7683,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-11 12:38:44.810000+00:00 +Internet,RIGHT_case-5186,2011-02-18 01:06:40+00:00,General,2011-02-11 15:02:31.454000+00:00,2011-02-18 01:06:40.010000+00:00,,Resource18,2010-12-24 01:06:40.010000+00:00,task-7676,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 14:59:35.424000+00:00 +Internet,RIGHT_case-5190,2011-02-28 01:06:40+00:00,General,2011-02-25 13:11:59.215000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2010-12-27 01:06:40.010000+00:00,task-7714,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-11 14:11:36.208000+00:00 +Internet,RIGHT_case-5190,2011-02-28 01:06:40+00:00,General,2011-02-25 13:11:59.215000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2010-12-27 01:06:40.010000+00:00,task-7711,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-12 11:47:01.218000+00:00 +Internet,RIGHT_case-5190,2011-02-28 01:06:40+00:00,General,2011-02-25 13:11:59.215000+00:00,2011-02-28 01:06:40.010000+00:00,,Resource15,2010-12-27 01:06:40.010000+00:00,task-7891,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-12 15:01:12.940000+00:00 +e-mail,RIGHT_case-5191,2011-03-04 00:00:00+00:00,General,2011-02-08 14:32:39.711000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-11152,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-02-07 08:54:51.568000+00:00 +e-mail,RIGHT_case-5191,2011-03-04 00:00:00+00:00,General,2011-02-08 14:32:39.711000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-11157,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-02-07 08:57:47.858000+00:00 +e-mail,RIGHT_case-5191,2011-03-04 00:00:00+00:00,General,2011-02-08 14:32:39.711000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-11154,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-07 09:42:27.649000+00:00 +e-mail,RIGHT_case-5194,2011-03-04 00:00:00+00:00,General,2011-02-08 15:36:36.783000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-8492,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-01-17 09:37:09.764000+00:00 +e-mail,RIGHT_case-5194,2011-03-04 00:00:00+00:00,General,2011-02-08 15:36:36.783000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-8495,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-01-17 09:38:16.995000+00:00 +e-mail,RIGHT_case-5194,2011-03-04 00:00:00+00:00,General,2011-02-08 15:36:36.783000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource08,2011-01-07 00:00:00.010000+00:00,task-8496,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-17 09:38:45.924000+00:00 +Internet,RIGHT_case-5196,2011-03-03 00:00:00+00:00,General,2011-02-08 11:10:10.493000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource02,2011-01-06 00:00:00.010000+00:00,task-8661,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 14:10:22.198000+00:00 +Internet,RIGHT_case-5196,2011-03-03 00:00:00+00:00,General,2011-02-08 11:10:10.493000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource02,2011-01-06 00:00:00.010000+00:00,task-8681,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-17 15:14:08.197000+00:00 +Internet,RIGHT_case-5196,2011-03-03 00:00:00+00:00,General,2011-02-08 11:10:10.493000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource02,2011-01-06 00:00:00.010000+00:00,task-8987,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-21 14:14:59.560000+00:00 +Internet,RIGHT_case-5235,2011-03-07 00:00:00+00:00,General,2011-02-24 13:36:06.546000+00:00,2011-03-07 00:00:00.010000+00:00,,Resource25,2011-01-10 00:00:00.010000+00:00,task-9104,T10 Determine necessity to stop indication,complete,Group 1,Resource37,2011-01-20 15:05:29.600000+00:00 +Internet,RIGHT_case-5235,2011-03-07 00:00:00+00:00,General,2011-02-24 13:36:06.546000+00:00,2011-03-07 00:00:00.010000+00:00,,Resource25,2011-01-10 00:00:00.010000+00:00,task-9100,T02 Check confirmation of receipt,complete,EMPTY,Resource25,2011-01-25 10:06:48.377000+00:00 +Internet,RIGHT_case-5235,2011-03-07 00:00:00+00:00,General,2011-02-24 13:36:06.546000+00:00,2011-03-07 00:00:00.010000+00:00,,Resource25,2011-01-10 00:00:00.010000+00:00,task-9665,T05 Print and send confirmation of receipt,complete,EMPTY,admin1,2011-02-17 14:45:27.116000+00:00 +Internet,RIGHT_case-5243,2011-03-20 01:06:40+00:00,General,2011-03-16 16:29:55.520000+00:00,2011-03-20 01:06:40.010000+00:00,,Resource04,2010-12-27 01:06:40.010000+00:00,task-8607,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-17 13:08:52.108000+00:00 +Internet,RIGHT_case-5243,2011-03-20 01:06:40+00:00,General,2011-03-16 16:29:55.520000+00:00,2011-03-20 01:06:40.010000+00:00,,Resource04,2010-12-27 01:06:40.010000+00:00,task-8610,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-17 13:09:27.162000+00:00 +Internet,RIGHT_case-5243,2011-03-20 01:06:40+00:00,General,2011-03-16 16:29:55.520000+00:00,2011-03-20 01:06:40.010000+00:00,,Resource04,2010-12-27 01:06:40.010000+00:00,task-8967,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:02:55.996000+00:00 +Internet,RIGHT_case-5245,2011-01-21 01:06:40+00:00,General,2011-01-21 16:00:15.194000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-8713,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-18 09:28:01.375000+00:00 +Internet,RIGHT_case-5245,2011-01-21 01:06:40+00:00,General,2011-01-21 16:00:15.194000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-8711,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-18 09:39:19.245000+00:00 +Internet,RIGHT_case-5245,2011-01-21 01:06:40+00:00,General,2011-01-21 16:00:15.194000+00:00,2011-01-21 01:06:40.010000+00:00,,Resource17,2010-10-20 01:06:40.020000+00:00,task-8730,T05 Print and send confirmation of receipt,complete,EMPTY,Resource17,2011-01-18 09:41:45.512000+00:00 +Internet,RIGHT_case-5247,2011-01-16 01:06:40+00:00,General,2011-01-14 14:24:26.688000+00:00,2011-01-16 01:06:40.010000+00:00,,Resource08,2011-01-11 01:06:40.010000+00:00,task-7651,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-01-13 10:20:52.791000+00:00 +Internet,RIGHT_case-5247,2011-01-16 01:06:40+00:00,General,2011-01-14 14:24:26.688000+00:00,2011-01-16 01:06:40.010000+00:00,,Resource08,2011-01-11 01:06:40.010000+00:00,task-8031,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-13 10:21:24.502000+00:00 +Internet,RIGHT_case-5247,2011-01-16 01:06:40+00:00,General,2011-01-14 14:24:26.688000+00:00,2011-01-16 01:06:40.010000+00:00,,Resource08,2011-01-11 01:06:40.010000+00:00,task-8033,T05 Print and send confirmation of receipt,complete,Group 2,Resource08,2011-01-13 10:22:14.108000+00:00 +Internet,RIGHT_case-5250,2011-01-31 00:00:00+00:00,General,2011-02-09 11:50:34.042000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource09,2010-12-06 00:00:00.010000+00:00,task-8498,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-17 09:41:38.083000+00:00 +Internet,RIGHT_case-5250,2011-01-31 00:00:00+00:00,General,2011-02-09 11:50:34.042000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource09,2010-12-06 00:00:00.010000+00:00,task-8490,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-17 12:38:43.397000+00:00 +Internet,RIGHT_case-5250,2011-01-31 00:00:00+00:00,General,2011-02-09 11:50:34.042000+00:00,2011-01-31 00:00:00.010000+00:00,,Resource09,2010-12-06 00:00:00.010000+00:00,task-8966,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:43:44.009000+00:00 +Internet,RIGHT_case-5254,2011-05-19 01:06:40+00:00,General,2011-06-20 11:43:02.571000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource18,2010-12-27 01:06:40.010000+00:00,task-8106,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-13 11:40:11.410000+00:00 +Internet,RIGHT_case-5254,2011-05-19 01:06:40+00:00,General,2011-06-20 11:43:02.571000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource18,2010-12-27 01:06:40.010000+00:00,task-8104,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 16:09:20.719000+00:00 +Internet,RIGHT_case-5254,2011-05-19 01:06:40+00:00,General,2011-06-20 11:43:02.571000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource18,2010-12-27 01:06:40.010000+00:00,task-8219,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:46:52.717000+00:00 +Internet,RIGHT_case-5266,2011-02-21 00:00:00+00:00,General,2011-04-29 14:21:55.843000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource12,2010-12-27 00:00:00.010000+00:00,task-8181,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 16:25:51.513000+00:00 +Internet,RIGHT_case-5266,2011-02-21 00:00:00+00:00,General,2011-04-29 14:21:55.843000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource12,2010-12-27 00:00:00.010000+00:00,task-8238,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:39:01.188000+00:00 +Internet,RIGHT_case-5266,2011-02-21 00:00:00+00:00,General,2011-04-29 14:21:55.843000+00:00,2011-02-21 00:00:00.010000+00:00,,Resource12,2010-12-27 00:00:00.010000+00:00,task-8784,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-18 11:50:51.180000+00:00 +Internet,RIGHT_case-5273,2011-02-21 01:06:40+00:00,General,2011-05-19 14:16:01.675000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource14,2010-12-27 01:06:40.010000+00:00,task-8102,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 16:01:07.457000+00:00 +Internet,RIGHT_case-5273,2011-02-21 01:06:40+00:00,General,2011-05-19 14:16:01.675000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource14,2010-12-27 01:06:40.010000+00:00,task-8216,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:45:26.978000+00:00 +Internet,RIGHT_case-5273,2011-02-21 01:06:40+00:00,General,2011-05-19 14:16:01.675000+00:00,2011-02-21 01:06:40.010000+00:00,,Resource14,2010-12-27 01:06:40.010000+00:00,task-9304,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-01-24 10:14:45.458000+00:00 +Internet,RIGHT_case-5275,2011-06-07 01:06:40+00:00,General,2011-06-07 15:05:26.063000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource18,2010-12-28 01:06:40.010000+00:00,task-8480,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-17 09:09:14.670000+00:00 +Internet,RIGHT_case-5275,2011-06-07 01:06:40+00:00,General,2011-06-07 15:05:26.063000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource18,2010-12-28 01:06:40.010000+00:00,task-8451,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-17 13:47:49.460000+00:00 +Internet,RIGHT_case-5275,2011-06-07 01:06:40+00:00,General,2011-06-07 15:05:26.063000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource18,2010-12-28 01:06:40.010000+00:00,task-9078,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-01-20 13:40:10.916000+00:00 +Internet,RIGHT_case-5275,2011-06-07 01:06:40+00:00,General,2011-06-07 15:05:26.063000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource18,2010-12-28 01:06:40.010000+00:00,task-9080,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:04:54.827000+00:00 +Internet,RIGHT_case-5286,2011-02-23 00:00:00+00:00,General,2011-08-19 08:50:23.351000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource12,2010-12-29 00:00:00.010000+00:00,task-10696,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-02-02 15:47:52.354000+00:00 +Internet,RIGHT_case-5286,2011-02-23 00:00:00+00:00,General,2011-08-19 08:50:23.351000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource12,2010-12-29 00:00:00.010000+00:00,task-10759,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-02-03 09:41:52.753000+00:00 +Internet,RIGHT_case-5286,2011-02-23 00:00:00+00:00,General,2011-08-19 08:50:23.351000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource12,2010-12-29 00:00:00.010000+00:00,task-10760,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource12,2011-02-03 09:44:22.757000+00:00 +Internet,RIGHT_case-5286,2011-02-23 00:00:00+00:00,General,2011-08-19 08:50:23.351000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource12,2010-12-29 00:00:00.010000+00:00,task-10764,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource12,2011-02-03 09:45:20.401000+00:00 +Internet,RIGHT_case-5286,2011-02-23 00:00:00+00:00,General,2011-08-19 08:50:23.351000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource12,2010-12-29 00:00:00.010000+00:00,task-10766,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-02-03 09:48:39.077000+00:00 +Internet,RIGHT_case-5287,2011-02-11 01:06:40+00:00,General,2011-02-16 12:12:40.005000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource05,2010-12-17 01:06:40.010000+00:00,task-8936,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-01-19 11:03:09.168000+00:00 +Internet,RIGHT_case-5287,2011-02-11 01:06:40+00:00,General,2011-02-16 12:12:40.005000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource05,2010-12-17 01:06:40.010000+00:00,task-8940,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-01-19 11:04:58.566000+00:00 +Internet,RIGHT_case-5287,2011-02-11 01:06:40+00:00,General,2011-02-16 12:12:40.005000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource05,2010-12-17 01:06:40.010000+00:00,task-8939,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-01-19 11:06:00.493000+00:00 +Internet,RIGHT_case-5288,2011-04-01 01:06:40+00:00,General,2011-04-01 14:45:51.635000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource08,2010-12-17 01:06:40.010000+00:00,task-8189,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-13 15:14:01.163000+00:00 +Internet,RIGHT_case-5288,2011-04-01 01:06:40+00:00,General,2011-04-01 14:45:51.635000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource08,2010-12-17 01:06:40.010000+00:00,task-8187,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-01-13 15:14:30.109000+00:00 +Internet,RIGHT_case-5288,2011-04-01 01:06:40+00:00,General,2011-04-01 14:45:51.635000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource08,2010-12-17 01:06:40.010000+00:00,task-8239,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:19:42.487000+00:00 +Desk,RIGHT_case-5289,2011-04-22 01:06:40+00:00,General,2011-04-20 15:45:28.388000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-8185,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 16:23:42.177000+00:00 +Desk,RIGHT_case-5289,2011-04-22 01:06:40+00:00,General,2011-04-20 15:45:28.388000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-8280,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-14 08:14:07.545000+00:00 +Desk,RIGHT_case-5289,2011-04-22 01:06:40+00:00,General,2011-04-20 15:45:28.388000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource15,2010-12-17 01:06:40.010000+00:00,task-8235,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:29:06.653000+00:00 +Internet,RIGHT_case-5294,2011-03-23 01:06:40+00:00,General,2011-03-22 16:05:24.947000+00:00,2011-03-23 01:06:40.010000+00:00,,Resource15,2010-12-29 01:06:40.010000+00:00,task-8192,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 16:28:51.610000+00:00 +Internet,RIGHT_case-5294,2011-03-23 01:06:40+00:00,General,2011-03-22 16:05:24.947000+00:00,2011-03-23 01:06:40.010000+00:00,,Resource15,2010-12-29 01:06:40.010000+00:00,task-8318,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-14 10:04:36.681000+00:00 +Internet,RIGHT_case-5294,2011-03-23 01:06:40+00:00,General,2011-03-22 16:05:24.947000+00:00,2011-03-23 01:06:40.010000+00:00,,Resource15,2010-12-29 01:06:40.010000+00:00,task-8241,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 10:05:20.024000+00:00 +Internet,RIGHT_case-5297,2011-03-19 01:06:40+00:00,General,2011-03-16 14:41:16.283000+00:00,2011-03-19 01:06:40.010000+00:00,,Resource04,2010-12-29 01:06:40.010000+00:00,task-8635,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-17 13:52:51.477000+00:00 +Internet,RIGHT_case-5297,2011-03-19 01:06:40+00:00,General,2011-03-16 14:41:16.283000+00:00,2011-03-19 01:06:40.010000+00:00,,Resource04,2010-12-29 01:06:40.010000+00:00,task-8638,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-17 13:53:38.250000+00:00 +Internet,RIGHT_case-5297,2011-03-19 01:06:40+00:00,General,2011-03-16 14:41:16.283000+00:00,2011-03-19 01:06:40.010000+00:00,,Resource04,2010-12-29 01:06:40.010000+00:00,task-8974,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:48:28.585000+00:00 +Post,RIGHT_case-5298,2011-03-02 00:00:00+00:00,General,2011-02-04 13:28:24.157000+00:00,2011-03-02 00:00:00.010000+00:00,,Resource12,2011-01-05 00:00:00.010000+00:00,task-8274,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-14 08:08:26.001000+00:00 +Post,RIGHT_case-5298,2011-03-02 00:00:00+00:00,General,2011-02-04 13:28:24.157000+00:00,2011-03-02 00:00:00.010000+00:00,,Resource12,2011-01-05 00:00:00.010000+00:00,task-8272,T02 Check confirmation of receipt,complete,EMPTY,Resource21,2011-02-04 13:09:08.172000+00:00 +Post,RIGHT_case-5298,2011-03-02 00:00:00+00:00,General,2011-02-04 13:28:24.157000+00:00,2011-03-02 00:00:00.010000+00:00,,Resource12,2011-01-05 00:00:00.010000+00:00,task-10969,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-02-04 13:27:34.329000+00:00 +Internet,RIGHT_case-5299,2011-02-25 01:06:40+00:00,General,2011-02-15 10:59:01.802000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource08,2010-12-31 01:06:40.010000+00:00,task-8414,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-01-14 14:16:34.590000+00:00 +Internet,RIGHT_case-5299,2011-02-25 01:06:40+00:00,General,2011-02-15 10:59:01.802000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource08,2010-12-31 01:06:40.010000+00:00,task-8418,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:31:34.057000+00:00 +Internet,RIGHT_case-5299,2011-02-25 01:06:40+00:00,General,2011-02-15 10:59:01.802000+00:00,2011-02-25 01:06:40.010000+00:00,,Resource08,2010-12-31 01:06:40.010000+00:00,task-8417,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-31 11:30:46.404000+00:00 +Internet,RIGHT_case-5301,2011-03-10 00:00:00+00:00,General,2011-03-04 11:47:56.186000+00:00,2011-03-10 00:00:00.010000+00:00,,Resource13,2011-01-13 00:00:00.010000+00:00,task-9764,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-27 10:38:13.989000+00:00 +Internet,RIGHT_case-5301,2011-03-10 00:00:00+00:00,General,2011-03-04 11:47:56.186000+00:00,2011-03-10 00:00:00.010000+00:00,,Resource13,2011-01-13 00:00:00.010000+00:00,task-9774,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-01-27 10:45:28.139000+00:00 +Internet,RIGHT_case-5301,2011-03-10 00:00:00+00:00,General,2011-03-04 11:47:56.186000+00:00,2011-03-10 00:00:00.010000+00:00,,Resource13,2011-01-13 00:00:00.010000+00:00,task-9779,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-01-27 10:47:29.537000+00:00 +Desk,RIGHT_case-5311,2011-02-14 00:00:00+00:00,General,2011-04-14 14:12:56.814000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-27 00:00:00.010000+00:00,task-8648,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-17 14:00:14.123000+00:00 +Desk,RIGHT_case-5311,2011-02-14 00:00:00+00:00,General,2011-04-14 14:12:56.814000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-27 00:00:00.010000+00:00,task-8642,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-19 15:06:31.204000+00:00 +Desk,RIGHT_case-5311,2011-02-14 00:00:00+00:00,General,2011-04-14 14:12:56.814000+00:00,2011-02-14 00:00:00.010000+00:00,,Resource09,2010-12-27 00:00:00.010000+00:00,task-8989,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:29:18.142000+00:00 +Internet,RIGHT_case-5351,2011-03-14 00:00:00+00:00,General,2011-08-18 08:43:00.267000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource21,2011-01-17 00:00:00.010000+00:00,task-8670,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource21,2011-01-18 14:08:06.004000+00:00 +Internet,RIGHT_case-5351,2011-03-14 00:00:00+00:00,General,2011-08-18 08:43:00.267000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource21,2011-01-17 00:00:00.010000+00:00,task-8812,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-01-18 14:09:19.866000+00:00 +Internet,RIGHT_case-5351,2011-03-14 00:00:00+00:00,General,2011-08-18 08:43:00.267000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource21,2011-01-17 00:00:00.010000+00:00,task-8667,T02 Check confirmation of receipt,complete,EMPTY,Resource21,2011-03-30 10:00:52.380000+00:00 +Internet,RIGHT_case-5351,2011-03-14 00:00:00+00:00,General,2011-08-18 08:43:00.267000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource21,2011-01-17 00:00:00.010000+00:00,task-18443,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 08:49:54.077000+00:00 +Internet,RIGHT_case-5355,2011-02-24 00:00:00+00:00,General,2011-04-07 15:45:12.541000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource12,2010-12-30 00:00:00.010000+00:00,task-14729,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-03-02 08:27:07.117000+00:00 +Internet,RIGHT_case-5355,2011-02-24 00:00:00+00:00,General,2011-04-07 15:45:12.541000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource12,2010-12-30 00:00:00.010000+00:00,task-14842,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-03-02 08:33:39.344000+00:00 +Internet,RIGHT_case-5355,2011-02-24 00:00:00+00:00,General,2011-04-07 15:45:12.541000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource12,2010-12-30 00:00:00.010000+00:00,task-14859,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-02 14:26:03.181000+00:00 +Internet,RIGHT_case-5372,2011-10-06 01:06:40+00:00,General,2011-10-03 16:33:42.541000+00:00,2011-10-06 01:06:40.020000+00:00,,Resource04,2010-12-30 01:06:40.010000+00:00,task-9399,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-25 08:28:50.452000+00:00 +Internet,RIGHT_case-5372,2011-10-06 01:06:40+00:00,General,2011-10-03 16:33:42.541000+00:00,2011-10-06 01:06:40.020000+00:00,,Resource04,2010-12-30 01:06:40.010000+00:00,task-9479,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 13:34:52.394000+00:00 +Internet,RIGHT_case-5372,2011-10-06 01:06:40+00:00,General,2011-10-03 16:33:42.541000+00:00,2011-10-06 01:06:40.020000+00:00,,Resource04,2010-12-30 01:06:40.010000+00:00,task-11226,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-02-07 12:19:21.429000+00:00 +Internet,RIGHT_case-5378,2011-06-23 01:06:40+00:00,General,2011-06-27 09:48:16.948000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-9402,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-01-25 08:50:58.132000+00:00 +Internet,RIGHT_case-5378,2011-06-23 01:06:40+00:00,General,2011-06-27 09:48:16.948000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-9405,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-25 08:56:09.803000+00:00 +Internet,RIGHT_case-5378,2011-06-23 01:06:40+00:00,General,2011-06-27 09:48:16.948000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-9473,T05 Print and send confirmation of receipt,complete,Group 2,Resource15,2011-01-27 12:36:49.981000+00:00 +Internet,RIGHT_case-5379,2011-02-24 00:00:00+00:00,General,2011-02-23 09:52:26.725000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource04,2010-12-30 00:00:00.010000+00:00,task-9582,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-26 08:48:57.670000+00:00 +Internet,RIGHT_case-5379,2011-02-24 00:00:00+00:00,General,2011-02-23 09:52:26.725000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource04,2010-12-30 00:00:00.010000+00:00,task-9719,T05 Print and send confirmation of receipt,complete,EMPTY,Resource04,2011-02-07 12:34:15.775000+00:00 +Internet,RIGHT_case-5379,2011-02-24 00:00:00+00:00,General,2011-02-23 09:52:26.725000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource04,2010-12-30 00:00:00.010000+00:00,task-11251,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-02-07 13:38:45.419000+00:00 +Desk,RIGHT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10486,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-02-01 16:37:33.275000+00:00 +Desk,RIGHT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10545,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-02-02 09:19:05.488000+00:00 +Desk,RIGHT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10555,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource02,2011-02-02 09:22:52.817000+00:00 +Desk,RIGHT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10559,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-02-02 09:24:33.044000+00:00 +Desk,RIGHT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10561,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-02 09:25:15.384000+00:00 +Desk,RIGHT_case-5380,2011-03-04 01:06:40+00:00,General,2011-02-04 15:10:26.588000+00:00,2011-03-04 01:06:40.010000+00:00,,Resource02,2011-01-07 01:06:40.010000+00:00,task-10632,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-02-02 10:51:01.951000+00:00 +Internet,RIGHT_case-5381,2011-02-24 00:00:00+00:00,General,2011-02-15 10:33:29.582000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-9084,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-01-20 13:59:54.727000+00:00 +Internet,RIGHT_case-5381,2011-02-24 00:00:00+00:00,General,2011-02-15 10:33:29.582000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-9087,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 12:00:28.441000+00:00 +Internet,RIGHT_case-5381,2011-02-24 00:00:00+00:00,General,2011-02-15 10:33:29.582000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-9410,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-25 09:14:15.919000+00:00 +Desk,RIGHT_case-5382,2011-04-12 01:06:40+00:00,General,2011-04-07 12:04:53.294000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource17,2010-12-21 01:06:40.010000+00:00,task-11660,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-02-10 11:38:31.394000+00:00 +Desk,RIGHT_case-5382,2011-04-12 01:06:40+00:00,General,2011-04-07 12:04:53.294000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource17,2010-12-21 01:06:40.010000+00:00,task-11677,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-10 11:42:29.053000+00:00 +Desk,RIGHT_case-5382,2011-04-12 01:06:40+00:00,General,2011-04-07 12:04:53.294000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource17,2010-12-21 01:06:40.010000+00:00,task-11700,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-11 09:09:15.209000+00:00 +Desk,RIGHT_case-5383,2011-02-23 00:00:00+00:00,General,2011-03-04 15:53:21.175000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource04,2010-12-29 00:00:00.010000+00:00,task-10081,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-28 15:30:00.274000+00:00 +Desk,RIGHT_case-5383,2011-02-23 00:00:00+00:00,General,2011-03-04 15:53:21.175000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource04,2010-12-29 00:00:00.010000+00:00,task-10084,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-01-28 15:31:20.711000+00:00 +Desk,RIGHT_case-5383,2011-02-23 00:00:00+00:00,General,2011-03-04 15:53:21.175000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource04,2010-12-29 00:00:00.010000+00:00,task-10990,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-02-04 14:19:04.058000+00:00 +Internet,RIGHT_case-5397,2011-02-25 00:00:00+00:00,General,2011-02-08 10:30:23.514000+00:00,2011-02-25 00:00:00.010000+00:00,,Resource01,2010-12-31 00:00:00.010000+00:00,task-9850,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-01-27 12:56:23.514000+00:00 +Internet,RIGHT_case-5397,2011-02-25 00:00:00+00:00,General,2011-02-08 10:30:23.514000+00:00,2011-02-25 00:00:00.010000+00:00,,Resource01,2010-12-31 00:00:00.010000+00:00,task-9854,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-27 13:00:37.807000+00:00 +Internet,RIGHT_case-5397,2011-02-25 00:00:00+00:00,General,2011-02-08 10:30:23.514000+00:00,2011-02-25 00:00:00.010000+00:00,,Resource01,2010-12-31 00:00:00.010000+00:00,task-10776,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-03 10:06:00.875000+00:00 +Internet,RIGHT_case-5398,2011-03-28 01:06:40+00:00,General,2011-03-18 12:04:12.415000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource04,2010-12-31 01:06:40.010000+00:00,task-9019,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-21 09:14:19.467000+00:00 +Internet,RIGHT_case-5398,2011-03-28 01:06:40+00:00,General,2011-03-18 12:04:12.415000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource04,2010-12-31 01:06:40.010000+00:00,task-9189,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-21 09:15:11.544000+00:00 +Internet,RIGHT_case-5398,2011-03-28 01:06:40+00:00,General,2011-03-18 12:04:12.415000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource04,2010-12-31 01:06:40.010000+00:00,task-9188,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 12:13:40.735000+00:00 +Internet,RIGHT_case-5401,2011-02-24 00:00:00+00:00,General,2011-02-24 10:18:42.399000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-9088,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-01-20 14:09:11.295000+00:00 +Internet,RIGHT_case-5401,2011-02-24 00:00:00+00:00,General,2011-02-24 10:18:42.399000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-9092,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:08:35.372000+00:00 +Internet,RIGHT_case-5401,2011-02-24 00:00:00+00:00,General,2011-02-24 10:18:42.399000+00:00,2011-02-24 00:00:00.010000+00:00,,Resource18,2010-12-30 00:00:00.010000+00:00,task-9432,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-25 10:03:58.554000+00:00 +Internet,RIGHT_case-5405,2011-05-30 01:06:40+00:00,General,2011-05-30 11:00:16.928000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource17,2010-12-31 01:06:40.010000+00:00,task-9911,T02 Check confirmation of receipt,complete,Group 4,Resource17,2011-01-27 15:27:04.749000+00:00 +Internet,RIGHT_case-5405,2011-05-30 01:06:40+00:00,General,2011-05-30 11:00:16.928000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource17,2010-12-31 01:06:40.010000+00:00,task-9914,T05 Print and send confirmation of receipt,complete,EMPTY,Resource17,2011-01-27 15:29:54.206000+00:00 +Internet,RIGHT_case-5405,2011-05-30 01:06:40+00:00,General,2011-05-30 11:00:16.928000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource17,2010-12-31 01:06:40.010000+00:00,task-10046,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-28 14:30:42.716000+00:00 +Desk,RIGHT_case-5406,2011-02-23 00:00:00+00:00,General,2011-02-17 16:41:02.698000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource07,2010-12-29 00:00:00.010000+00:00,task-9891,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-01-27 14:34:41.072000+00:00 +Desk,RIGHT_case-5406,2011-02-23 00:00:00+00:00,General,2011-02-17 16:41:02.698000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource07,2010-12-29 00:00:00.010000+00:00,task-9895,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-27 14:47:13.317000+00:00 +Desk,RIGHT_case-5406,2011-02-23 00:00:00+00:00,General,2011-02-17 16:41:02.698000+00:00,2011-02-23 00:00:00.010000+00:00,,Resource07,2010-12-29 00:00:00.010000+00:00,task-10793,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-03 11:11:24.300000+00:00 +Desk,RIGHT_case-5418,2011-03-04 00:00:00+00:00,General,2011-02-22 09:30:55.455000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource07,2011-01-07 00:00:00.010000+00:00,task-9388,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-26 13:05:07.161000+00:00 +Desk,RIGHT_case-5418,2011-03-04 00:00:00+00:00,General,2011-02-22 09:30:55.455000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource07,2011-01-07 00:00:00.010000+00:00,task-9659,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-27 09:18:53.526000+00:00 +Desk,RIGHT_case-5418,2011-03-04 00:00:00+00:00,General,2011-02-22 09:30:55.455000+00:00,2011-03-04 00:00:00.010000+00:00,,Resource07,2011-01-07 00:00:00.010000+00:00,task-10243,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-31 14:21:42.504000+00:00 +Internet,RIGHT_case-5457,2011-03-03 00:00:00+00:00,General,2011-04-21 00:00:00.020000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource09,2011-01-06 00:00:00.010000+00:00,task-13447,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-02-22 08:49:05.234000+00:00 +Internet,RIGHT_case-5457,2011-03-03 00:00:00+00:00,General,2011-04-21 00:00:00.020000+00:00,2011-03-03 00:00:00.010000+00:00,,Resource09,2011-01-06 00:00:00.010000+00:00,task-13445,T02 Check confirmation of receipt,complete,EMPTY,Resource39,2011-05-04 13:31:54.094000+00:00 +Desk,RIGHT_case-5462,2011-03-07 01:06:40+00:00,General,2011-01-28 12:03:52.245000+00:00,2011-03-07 01:06:40.010000+00:00,,Resource26,2011-01-10 01:06:40.010000+00:00,task-9588,T10 Determine necessity to stop indication,complete,Group 1,Resource26,2011-01-26 08:50:52.694000+00:00 +Desk,RIGHT_case-5462,2011-03-07 01:06:40+00:00,General,2011-01-28 12:03:52.245000+00:00,2011-03-07 01:06:40.010000+00:00,,Resource26,2011-01-10 01:06:40.010000+00:00,task-9585,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-27 10:34:33.729000+00:00 +Desk,RIGHT_case-5462,2011-03-07 01:06:40+00:00,General,2011-01-28 12:03:52.245000+00:00,2011-03-07 01:06:40.010000+00:00,,Resource26,2011-01-10 01:06:40.010000+00:00,task-9771,T05 Print and send confirmation of receipt,complete,Group 2,admin2,2011-01-28 12:03:53.599000+00:00 +Intern,RIGHT_case-5503,2011-03-10 01:06:40+00:00,General,2011-02-04 16:05:09.655000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource11,2011-01-13 01:06:40.010000+00:00,task-9612,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-01-26 10:06:19.899000+00:00 +Intern,RIGHT_case-5503,2011-03-10 01:06:40+00:00,General,2011-02-04 16:05:09.655000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource11,2011-01-13 01:06:40.010000+00:00,task-9610,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-26 13:17:25.720000+00:00 +Intern,RIGHT_case-5503,2011-03-10 01:06:40+00:00,General,2011-02-04 16:05:09.655000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource11,2011-01-13 01:06:40.010000+00:00,task-9669,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-27 09:20:35.668000+00:00 +Internet,RIGHT_case-5504,2011-03-14 00:00:00+00:00,General,2011-02-04 12:16:16.911000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource11,2011-01-17 00:00:00.010000+00:00,task-9596,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-01-26 09:25:31.414000+00:00 +Internet,RIGHT_case-5504,2011-03-14 00:00:00+00:00,General,2011-02-04 12:16:16.911000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource11,2011-01-17 00:00:00.010000+00:00,task-9594,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-26 13:09:30.634000+00:00 +Internet,RIGHT_case-5504,2011-03-14 00:00:00+00:00,General,2011-02-04 12:16:16.911000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource11,2011-01-17 00:00:00.010000+00:00,task-9663,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-27 09:23:52.738000+00:00 +Internet,RIGHT_case-5512,2011-03-09 01:06:40+00:00,General,2011-03-02 15:58:38.081000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource08,2011-01-12 01:06:40.010000+00:00,task-10369,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-01 09:35:13.754000+00:00 +Internet,RIGHT_case-5512,2011-03-09 01:06:40+00:00,General,2011-03-02 15:58:38.081000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource08,2011-01-12 01:06:40.010000+00:00,task-10372,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-01 09:35:51.153000+00:00 +Internet,RIGHT_case-5512,2011-03-09 01:06:40+00:00,General,2011-03-02 15:58:38.081000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource08,2011-01-12 01:06:40.010000+00:00,task-10442,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 14:37:24.440000+00:00 +Desk,RIGHT_case-5517,2011-03-10 01:06:40+00:00,General,2011-03-03 13:45:12.539000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource13,2011-01-13 01:06:40.010000+00:00,task-9787,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-27 11:50:45.604000+00:00 +Desk,RIGHT_case-5517,2011-03-10 01:06:40+00:00,General,2011-03-03 13:45:12.539000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource13,2011-01-13 01:06:40.010000+00:00,task-9815,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-02-02 08:28:32.263000+00:00 +Desk,RIGHT_case-5517,2011-03-10 01:06:40+00:00,General,2011-03-03 13:45:12.539000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource13,2011-01-13 01:06:40.010000+00:00,task-10514,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-02-02 08:29:13.189000+00:00 +Desk,RIGHT_case-5517,2011-03-10 01:06:40+00:00,General,2011-03-03 13:45:12.539000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource13,2011-01-13 01:06:40.010000+00:00,task-10519,T17 Check report Y to stop indication,complete,EMPTY,Resource13,2011-02-02 08:35:14.052000+00:00 +Desk,RIGHT_case-5517,2011-03-10 01:06:40+00:00,General,2011-03-03 13:45:12.539000+00:00,2011-03-10 01:06:40.010000+00:00,,Resource13,2011-01-13 01:06:40.010000+00:00,task-10522,T20 Print report Y to stop indication,complete,Group 2,Resource13,2011-02-02 08:36:13.619000+00:00 +Desk,RIGHT_case-5519,2011-03-11 01:06:40+00:00,General,2011-02-24 08:49:04.322000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource11,2011-01-14 01:06:40.010000+00:00,task-10324,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-01-31 16:20:02.135000+00:00 +Desk,RIGHT_case-5519,2011-03-11 01:06:40+00:00,General,2011-02-24 08:49:04.322000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource11,2011-01-14 01:06:40.010000+00:00,task-10333,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 14:19:51.604000+00:00 +Desk,RIGHT_case-5519,2011-03-11 01:06:40+00:00,General,2011-02-24 08:49:04.322000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource11,2011-01-14 01:06:40.010000+00:00,task-10327,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-10 09:17:57.972000+00:00 +Desk,RIGHT_case-5520,2011-03-09 01:06:40+00:00,General,2011-03-11 12:23:42.322000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource11,2011-01-12 01:06:40.010000+00:00,task-10304,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-01-31 15:24:55.041000+00:00 +Desk,RIGHT_case-5520,2011-03-09 01:06:40+00:00,General,2011-03-11 12:23:42.322000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource11,2011-01-12 01:06:40.010000+00:00,task-10307,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-31 15:25:22.986000+00:00 +Desk,RIGHT_case-5520,2011-03-09 01:06:40+00:00,General,2011-03-11 12:23:42.322000+00:00,2011-03-09 01:06:40.010000+00:00,,Resource11,2011-01-12 01:06:40.010000+00:00,task-10308,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-08 15:05:57.935000+00:00 +Desk,RIGHT_case-5521,2011-02-11 01:06:40+00:00,General,2011-03-23 14:26:35.578000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-9744,T02 Check confirmation of receipt,complete,EMPTY,Resource09,2011-02-07 09:59:47.985000+00:00 +Desk,RIGHT_case-5521,2011-02-11 01:06:40+00:00,General,2011-03-23 14:26:35.578000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-11195,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-02-07 10:36:43.908000+00:00 +Desk,RIGHT_case-5521,2011-02-11 01:06:40+00:00,General,2011-03-23 14:26:35.578000+00:00,2011-02-11 01:06:40.010000+00:00,,Resource09,2010-12-17 01:06:40.010000+00:00,task-11443,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-02-09 09:07:17.986000+00:00 +Internet,RIGHT_case-5529,2011-03-11 01:06:40+00:00,General,2011-03-03 15:36:44.177000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource02,2011-01-14 01:06:40.010000+00:00,task-11201,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-07 11:15:21.902000+00:00 +Internet,RIGHT_case-5529,2011-03-11 01:06:40+00:00,General,2011-03-03 15:36:44.177000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource02,2011-01-14 01:06:40.010000+00:00,task-11204,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-02-07 11:21:19.202000+00:00 +Internet,RIGHT_case-5529,2011-03-11 01:06:40+00:00,General,2011-03-03 15:36:44.177000+00:00,2011-03-11 01:06:40.010000+00:00,,Resource02,2011-01-14 01:06:40.010000+00:00,task-11205,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-07 11:22:20.117000+00:00 +Internet,RIGHT_case-5530,2011-03-12 01:06:40+00:00,General,2011-02-22 14:41:05.508000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource17,2011-01-15 01:06:40.010000+00:00,task-10789,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-03 11:30:35.377000+00:00 +Internet,RIGHT_case-5530,2011-03-12 01:06:40+00:00,General,2011-02-22 14:41:05.508000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource17,2011-01-15 01:06:40.010000+00:00,task-11158,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-07 09:00:07.478000+00:00 +Internet,RIGHT_case-5530,2011-03-12 01:06:40+00:00,General,2011-02-22 14:41:05.508000+00:00,2011-03-12 01:06:40.010000+00:00,,Resource17,2011-01-15 01:06:40.010000+00:00,task-10801,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-02-07 10:01:03.436000+00:00 +Internet,RIGHT_case-5531,2011-03-14 00:00:00+00:00,General,2011-02-18 12:48:02.415000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource02,2011-01-17 00:00:00.010000+00:00,task-13033,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-18 12:31:23.873000+00:00 +Internet,RIGHT_case-5531,2011-03-14 00:00:00+00:00,General,2011-02-18 12:48:02.415000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource02,2011-01-17 00:00:00.010000+00:00,task-13037,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-02-18 12:31:49.205000+00:00 +Internet,RIGHT_case-5531,2011-03-14 00:00:00+00:00,General,2011-02-18 12:48:02.415000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource02,2011-01-17 00:00:00.010000+00:00,task-13039,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-18 12:32:43.980000+00:00 +Internet,RIGHT_case-5531,2011-03-14 00:00:00+00:00,General,2011-02-18 12:48:02.415000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource02,2011-01-17 00:00:00.010000+00:00,task-13058,T12 Check document X request unlicensed,complete,Group 4,Resource02,2011-02-18 12:46:27.790000+00:00 +Internet,RIGHT_case-5531,2011-03-14 00:00:00+00:00,General,2011-02-18 12:48:02.415000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource02,2011-01-17 00:00:00.010000+00:00,task-13060,T15 Print document X request unlicensed,complete,Group 2,Resource02,2011-02-18 12:48:02.276000+00:00 +Desk,RIGHT_case-5532,2011-03-08 00:00:00+00:00,General,2011-02-24 08:38:09.385000+00:00,2011-03-08 00:00:00.010000+00:00,,Resource01,2011-01-11 00:00:00.010000+00:00,task-10335,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-01 08:02:15.930000+00:00 +Desk,RIGHT_case-5532,2011-03-08 00:00:00+00:00,General,2011-02-24 08:38:09.385000+00:00,2011-03-08 00:00:00.010000+00:00,,Resource01,2011-01-11 00:00:00.010000+00:00,task-10602,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-02 10:05:33.092000+00:00 +Desk,RIGHT_case-5532,2011-03-08 00:00:00+00:00,General,2011-02-24 08:38:09.385000+00:00,2011-03-08 00:00:00.010000+00:00,,Resource01,2011-01-11 00:00:00.010000+00:00,task-10360,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 14:36:54.119000+00:00 +Internet,RIGHT_case-5533,2011-03-11 00:00:00+00:00,General,2011-02-15 11:25:09.252000+00:00,2011-03-11 00:00:00.010000+00:00,,Resource17,2011-01-14 00:00:00.010000+00:00,task-12103,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-02-14 08:40:05.195000+00:00 +Internet,RIGHT_case-5533,2011-03-11 00:00:00+00:00,General,2011-02-15 11:25:09.252000+00:00,2011-03-11 00:00:00.010000+00:00,,Resource17,2011-01-14 00:00:00.010000+00:00,task-12106,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-14 08:40:35.976000+00:00 +Internet,RIGHT_case-5533,2011-03-11 00:00:00+00:00,General,2011-02-15 11:25:09.252000+00:00,2011-03-11 00:00:00.010000+00:00,,Resource17,2011-01-14 00:00:00.010000+00:00,task-12111,T12 Check document X request unlicensed,complete,EMPTY,Resource15,2011-02-14 09:17:01.432000+00:00 +Internet,RIGHT_case-5533,2011-03-11 00:00:00+00:00,General,2011-02-15 11:25:09.252000+00:00,2011-03-11 00:00:00.010000+00:00,,Resource17,2011-01-14 00:00:00.010000+00:00,task-12160,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-15 11:21:45.035000+00:00 +Internet,RIGHT_case-5533,2011-03-11 00:00:00+00:00,General,2011-02-15 11:25:09.252000+00:00,2011-03-11 00:00:00.010000+00:00,,Resource17,2011-01-14 00:00:00.010000+00:00,task-12164,T15 Print document X request unlicensed,complete,Group 2,admin1,2011-02-15 11:25:09.113000+00:00 +Internet,RIGHT_case-5534,2011-04-07 01:06:40+00:00,General,2011-04-05 11:44:31.845000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-10067,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-01-28 15:02:42.463000+00:00 +Internet,RIGHT_case-5534,2011-04-07 01:06:40+00:00,General,2011-04-05 11:44:31.845000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-10070,T05 Print and send confirmation of receipt,complete,Group 2,Resource15,2011-01-28 15:03:08.687000+00:00 +Internet,RIGHT_case-5534,2011-04-07 01:06:40+00:00,General,2011-04-05 11:44:31.845000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource15,2010-12-30 01:06:40.010000+00:00,task-10597,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-02 10:00:43.977000+00:00 +Internet,RIGHT_case-5535,2011-03-14 01:06:40+00:00,General,2011-03-11 12:25:27.553000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource11,2011-01-17 01:06:40.010000+00:00,task-11395,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-08 13:55:10.041000+00:00 +Internet,RIGHT_case-5535,2011-03-14 01:06:40+00:00,General,2011-03-11 12:25:27.553000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource11,2011-01-17 01:06:40.010000+00:00,task-11393,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-02-08 14:43:02.610000+00:00 +Internet,RIGHT_case-5535,2011-03-14 01:06:40+00:00,General,2011-03-11 12:25:27.553000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource11,2011-01-17 01:06:40.010000+00:00,task-11608,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-10 09:45:54.059000+00:00 +Internet,RIGHT_case-5536,2011-03-14 01:06:40+00:00,General,2011-03-18 10:16:28.139000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource08,2011-01-17 01:06:40.010000+00:00,task-11750,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-10 13:13:25.364000+00:00 +Internet,RIGHT_case-5536,2011-03-14 01:06:40+00:00,General,2011-03-18 10:16:28.139000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource08,2011-01-17 01:06:40.010000+00:00,task-11756,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-10 13:15:11.585000+00:00 +Internet,RIGHT_case-5536,2011-03-14 01:06:40+00:00,General,2011-03-18 10:16:28.139000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource08,2011-01-17 01:06:40.010000+00:00,task-11841,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-11 09:12:14.412000+00:00 +Internet,RIGHT_case-5540,2011-03-15 00:00:00+00:00,General,2011-02-24 08:59:07.092000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-10489,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-01 16:42:46.188000+00:00 +Internet,RIGHT_case-5540,2011-03-15 00:00:00+00:00,General,2011-02-24 08:59:07.092000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-10492,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-01 16:43:10.482000+00:00 +Internet,RIGHT_case-5540,2011-03-15 00:00:00+00:00,General,2011-02-24 08:59:07.092000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-10534,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-02 08:59:40.397000+00:00 +Internet,RIGHT_case-5543,2011-03-15 00:00:00+00:00,General,2011-03-01 09:28:52.160000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-10482,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-01 16:32:59.610000+00:00 +Internet,RIGHT_case-5543,2011-03-15 00:00:00+00:00,General,2011-03-01 09:28:52.160000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-10485,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-01 16:33:25.007000+00:00 +Internet,RIGHT_case-5543,2011-03-15 00:00:00+00:00,General,2011-03-01 09:28:52.160000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource01,2011-01-18 00:00:00.010000+00:00,task-10573,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-02 09:48:04.651000+00:00 +Internet,RIGHT_case-5545,2011-03-16 00:00:00+00:00,General,2011-04-08 10:31:15.081000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource14,2011-01-19 00:00:00.010000+00:00,task-16966,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-03-21 12:18:33.195000+00:00 +Internet,RIGHT_case-5545,2011-03-16 00:00:00+00:00,General,2011-04-08 10:31:15.081000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource14,2011-01-19 00:00:00.010000+00:00,task-16964,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-03-21 12:19:11.678000+00:00 +Internet,RIGHT_case-5545,2011-03-16 00:00:00+00:00,General,2011-04-08 10:31:15.081000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource14,2011-01-19 00:00:00.010000+00:00,task-16971,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-03-21 12:19:40.570000+00:00 +Internet,RIGHT_case-5546,2011-03-16 00:00:00+00:00,General,2011-02-24 12:22:00.602000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource11,2011-01-19 00:00:00.010000+00:00,task-10700,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-02 16:04:02.926000+00:00 +Internet,RIGHT_case-5546,2011-03-16 00:00:00+00:00,General,2011-02-24 12:22:00.602000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource11,2011-01-19 00:00:00.010000+00:00,task-10703,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-02 16:05:59.790000+00:00 +Internet,RIGHT_case-5546,2011-03-16 00:00:00+00:00,General,2011-02-24 12:22:00.602000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource11,2011-01-19 00:00:00.010000+00:00,task-10748,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-03 08:43:26.737000+00:00 +Internet,RIGHT_case-5547,2011-03-14 00:00:00+00:00,General,2011-03-01 14:42:05.676000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource25,2011-01-17 00:00:00.010000+00:00,task-12686,T02 Check confirmation of receipt,complete,Group 4,Resource25,2011-02-17 08:50:51.959000+00:00 +Internet,RIGHT_case-5547,2011-03-14 00:00:00+00:00,General,2011-03-01 14:42:05.676000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource25,2011-01-17 00:00:00.010000+00:00,task-12689,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2011-02-17 08:57:25.431000+00:00 +Internet,RIGHT_case-5547,2011-03-14 00:00:00+00:00,General,2011-03-01 14:42:05.676000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource25,2011-01-17 00:00:00.010000+00:00,task-13256,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-22 16:12:06.818000+00:00 +Internet,RIGHT_case-5548,2011-03-16 00:00:00+00:00,General,2011-02-22 16:53:55.093000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource01,2011-01-19 00:00:00.010000+00:00,task-10475,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-01 16:20:59.925000+00:00 +Internet,RIGHT_case-5548,2011-03-16 00:00:00+00:00,General,2011-02-22 16:53:55.093000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource01,2011-01-19 00:00:00.010000+00:00,task-10479,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-01 16:21:28.859000+00:00 +Internet,RIGHT_case-5548,2011-03-16 00:00:00+00:00,General,2011-02-22 16:53:55.093000+00:00,2011-03-16 00:00:00.010000+00:00,,Resource01,2011-01-19 00:00:00.010000+00:00,task-10480,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-03 08:43:32.014000+00:00 +Internet,RIGHT_case-5549,2011-03-15 00:00:00+00:00,General,2011-03-15 10:08:48.138000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource06,2011-01-18 00:00:00.010000+00:00,task-12515,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-02-16 11:31:21.991000+00:00 +Internet,RIGHT_case-5549,2011-03-15 00:00:00+00:00,General,2011-03-15 10:08:48.138000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource06,2011-01-18 00:00:00.010000+00:00,task-12518,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-02-16 11:32:05.835000+00:00 +Internet,RIGHT_case-5549,2011-03-15 00:00:00+00:00,General,2011-03-15 10:08:48.138000+00:00,2011-03-15 00:00:00.010000+00:00,,Resource06,2011-01-18 00:00:00.010000+00:00,task-12552,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-16 14:28:55.869000+00:00 +Internet,RIGHT_case-5552,2011-05-26 01:06:40+00:00,General,2011-05-02 11:21:37.498000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource15,2011-01-19 01:06:40.010000+00:00,task-9950,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-01-28 09:37:38.230000+00:00 +Internet,RIGHT_case-5552,2011-05-26 01:06:40+00:00,General,2011-05-02 11:21:37.498000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource15,2011-01-19 01:06:40.010000+00:00,task-9953,T05 Print and send confirmation of receipt,complete,Group 2,Resource15,2011-01-28 09:38:13.949000+00:00 +Internet,RIGHT_case-5552,2011-05-26 01:06:40+00:00,General,2011-05-02 11:21:37.498000+00:00,2011-05-26 01:06:40.020000+00:00,,Resource15,2011-01-19 01:06:40.010000+00:00,task-9954,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-28 09:44:19.953000+00:00 +Internet,RIGHT_case-5554,2011-05-08 01:06:40+00:00,General,2011-05-04 16:07:36.807000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-01-14 01:06:40.010000+00:00,task-10458,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-01 16:07:13.385000+00:00 +Internet,RIGHT_case-5554,2011-05-08 01:06:40+00:00,General,2011-05-04 16:07:36.807000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-01-14 01:06:40.010000+00:00,task-10461,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-01 16:09:32.110000+00:00 +Internet,RIGHT_case-5554,2011-05-08 01:06:40+00:00,General,2011-05-04 16:07:36.807000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-01-14 01:06:40.010000+00:00,task-10673,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 14:47:50.672000+00:00 +Internet,RIGHT_case-5556,2011-03-20 00:00:00+00:00,General,2011-02-28 11:17:49.041000+00:00,2011-03-20 00:00:00.010000+00:00,,Resource01,2011-01-23 00:00:00.010000+00:00,task-10344,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-01-31 17:01:56.115000+00:00 +Internet,RIGHT_case-5556,2011-03-20 00:00:00+00:00,General,2011-02-28 11:17:49.041000+00:00,2011-03-20 00:00:00.010000+00:00,,Resource01,2011-01-23 00:00:00.010000+00:00,task-10347,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-31 17:02:18.133000+00:00 +Internet,RIGHT_case-5556,2011-03-20 00:00:00+00:00,General,2011-02-28 11:17:49.041000+00:00,2011-03-20 00:00:00.010000+00:00,,Resource01,2011-01-23 00:00:00.010000+00:00,task-10860,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-04 09:35:52.167000+00:00 +Internet,RIGHT_case-5557,2011-03-21 01:06:40+00:00,General,2011-05-16 16:12:18.768000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource09,2011-01-24 01:06:40.010000+00:00,task-15390,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-07 16:14:51.104000+00:00 +Internet,RIGHT_case-5557,2011-03-21 01:06:40+00:00,General,2011-05-16 16:12:18.768000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource09,2011-01-24 01:06:40.010000+00:00,task-15393,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-03-07 16:15:26.952000+00:00 +Internet,RIGHT_case-5557,2011-03-21 01:06:40+00:00,General,2011-05-16 16:12:18.768000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource09,2011-01-24 01:06:40.010000+00:00,task-15411,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-03-08 08:33:34.070000+00:00 +Internet,RIGHT_case-5558,2011-03-01 00:00:00+00:00,General,2011-02-25 16:18:49.424000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource05,2011-01-04 00:00:00.010000+00:00,task-10782,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-02-03 11:00:14.089000+00:00 +Internet,RIGHT_case-5558,2011-03-01 00:00:00+00:00,General,2011-02-25 16:18:49.424000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource05,2011-01-04 00:00:00.010000+00:00,task-10788,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-02-03 11:05:05.119000+00:00 +Internet,RIGHT_case-5558,2011-03-01 00:00:00+00:00,General,2011-02-25 16:18:49.424000+00:00,2011-03-01 00:00:00.010000+00:00,,Resource05,2011-01-04 00:00:00.010000+00:00,task-10791,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-02-03 11:11:57.557000+00:00 +Internet,RIGHT_case-5559,2011-04-18 01:06:40+00:00,General,2011-03-22 14:50:27.887000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource06,2011-01-24 01:06:40.010000+00:00,task-12570,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-02-16 14:12:28.219000+00:00 +Internet,RIGHT_case-5559,2011-04-18 01:06:40+00:00,General,2011-03-22 14:50:27.887000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource06,2011-01-24 01:06:40.010000+00:00,task-12568,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-02-22 14:53:56.427000+00:00 +Internet,RIGHT_case-5559,2011-04-18 01:06:40+00:00,General,2011-03-22 14:50:27.887000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource06,2011-01-24 01:06:40.010000+00:00,task-14423,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 09:58:22.103000+00:00 +Internet,RIGHT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-10466,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-02-01 16:19:02.498000+00:00 +Internet,RIGHT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-10478,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-02-01 16:21:28.866000+00:00 +Internet,RIGHT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-10532,T09-4 Process or receive external advice from party 4,complete,Group 1,Resource05,2011-02-02 09:13:18.989000+00:00 +Internet,RIGHT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-10548,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-02-02 09:17:23.844000+00:00 +Internet,RIGHT_case-5560,2011-03-22 00:00:00+00:00,General,2011-02-24 15:16:49.882000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-01-25 00:00:00.010000+00:00,task-10550,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-02-02 09:18:02.685000+00:00 +Internet,RIGHT_case-5561,2011-03-23 00:00:00+00:00,General,2011-02-28 11:41:07.295000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource01,2011-01-26 00:00:00.010000+00:00,task-11444,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-09 09:17:10.172000+00:00 +Internet,RIGHT_case-5561,2011-03-23 00:00:00+00:00,General,2011-02-28 11:41:07.295000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource01,2011-01-26 00:00:00.010000+00:00,task-11689,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-11 09:07:52.194000+00:00 +Internet,RIGHT_case-5561,2011-03-23 00:00:00+00:00,General,2011-02-28 11:41:07.295000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource01,2011-01-26 00:00:00.010000+00:00,task-11447,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-11 11:03:25.763000+00:00 +Internet,RIGHT_case-5566,2011-03-21 01:06:40+00:00,General,2011-03-22 14:33:55.175000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource08,2011-01-24 01:06:40.010000+00:00,task-11409,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-08 14:42:01.733000+00:00 +Internet,RIGHT_case-5566,2011-03-21 01:06:40+00:00,General,2011-03-22 14:33:55.175000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource08,2011-01-24 01:06:40.010000+00:00,task-11441,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-09 12:12:19.613000+00:00 +Internet,RIGHT_case-5566,2011-03-21 01:06:40+00:00,General,2011-03-22 14:33:55.175000+00:00,2011-03-21 01:06:40.010000+00:00,,Resource08,2011-01-24 01:06:40.010000+00:00,task-12009,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-11 14:34:55.921000+00:00 +Internet,RIGHT_case-5573,2011-03-22 00:00:00+00:00,General,2011-03-22 11:26:39.827000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource02,2011-01-25 00:00:00.010000+00:00,task-13290,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-21 10:57:01.807000+00:00 +Internet,RIGHT_case-5573,2011-03-22 00:00:00+00:00,General,2011-03-22 11:26:39.827000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource02,2011-01-25 00:00:00.010000+00:00,task-13294,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-02-21 11:18:54.176000+00:00 +Internet,RIGHT_case-5573,2011-03-22 00:00:00+00:00,General,2011-03-22 11:26:39.827000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource02,2011-01-25 00:00:00.010000+00:00,task-13309,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-21 11:19:54.380000+00:00 +Internet,RIGHT_case-5573,2011-03-22 00:00:00+00:00,General,2011-03-22 11:26:39.827000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource02,2011-01-25 00:00:00.010000+00:00,task-13417,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 11:01:06.231000+00:00 +Desk,RIGHT_case-5576,2011-03-14 01:06:40+00:00,General,2011-03-02 11:00:27.952000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource13,2011-01-17 01:06:40.010000+00:00,task-10620,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-02-02 10:38:52.942000+00:00 +Desk,RIGHT_case-5576,2011-03-14 01:06:40+00:00,General,2011-03-02 11:00:27.952000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource13,2011-01-17 01:06:40.010000+00:00,task-10624,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-02-02 10:42:46.317000+00:00 +Desk,RIGHT_case-5576,2011-03-14 01:06:40+00:00,General,2011-03-02 11:00:27.952000+00:00,2011-03-14 01:06:40.010000+00:00,,Resource13,2011-01-17 01:06:40.010000+00:00,task-10625,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-02-02 10:47:06.288000+00:00 +Internet,RIGHT_case-5577,2011-03-24 00:00:00+00:00,General,2011-05-19 14:23:29.363000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource02,2011-01-27 00:00:00.010000+00:00,task-13413,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-21 15:12:19.354000+00:00 +Internet,RIGHT_case-5577,2011-03-24 00:00:00+00:00,General,2011-05-19 14:23:29.363000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource02,2011-01-27 00:00:00.010000+00:00,task-13423,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-21 15:42:01.485000+00:00 +Internet,RIGHT_case-5577,2011-03-24 00:00:00+00:00,General,2011-05-19 14:23:29.363000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource02,2011-01-27 00:00:00.010000+00:00,task-13797,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 12:06:41.890000+00:00 +Desk,RIGHT_case-5580,2011-03-23 00:00:00+00:00,General,2011-03-10 15:56:19.858000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource11,2011-01-26 00:00:00.010000+00:00,task-11537,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-09 15:52:49.522000+00:00 +Desk,RIGHT_case-5580,2011-03-23 00:00:00+00:00,General,2011-03-10 15:56:19.858000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource11,2011-01-26 00:00:00.010000+00:00,task-11692,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-10 13:18:24.356000+00:00 +Desk,RIGHT_case-5580,2011-03-23 00:00:00+00:00,General,2011-03-10 15:56:19.858000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource11,2011-01-26 00:00:00.010000+00:00,task-11786,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-10 15:04:09.440000+00:00 +Internet,RIGHT_case-5582,2011-06-07 01:06:40+00:00,General,2011-06-07 09:29:10.521000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-01-25 01:06:40.010000+00:00,task-12158,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-02-14 12:02:06.338000+00:00 +Internet,RIGHT_case-5582,2011-06-07 01:06:40+00:00,General,2011-06-07 09:29:10.521000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-01-25 01:06:40.010000+00:00,task-12162,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-14 12:02:49.723000+00:00 +Internet,RIGHT_case-5582,2011-06-07 01:06:40+00:00,General,2011-06-07 09:29:10.521000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-01-25 01:06:40.010000+00:00,task-12169,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-15 11:21:59.047000+00:00 +Internet,RIGHT_case-5585,2011-03-24 01:06:40+00:00,General,2011-09-22 14:45:23.851000+00:00,2011-03-24 01:06:40.010000+00:00,Group 2,Resource07,2011-01-27 01:06:40.010000+00:00,task-28854,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource24,2011-07-18 14:11:32.085000+00:00 +Internet,RIGHT_case-5585,2011-03-24 01:06:40+00:00,General,2011-09-22 14:45:23.851000+00:00,2011-03-24 01:06:40.010000+00:00,Group 2,Resource07,2011-01-27 01:06:40.010000+00:00,task-39061,T07-1 Draft intern advice aspect 1,complete,Group 7,admin2,2011-09-22 14:45:24.932000+00:00 +Internet,RIGHT_case-5585,2011-03-24 01:06:40+00:00,General,2011-09-22 14:45:23.851000+00:00,2011-03-24 01:06:40.010000+00:00,Group 2,Resource07,2011-01-27 01:06:40.010000+00:00,task-28852,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-09-22 14:45:25.613000+00:00 +Desk,RIGHT_case-5594,2011-03-24 01:06:40+00:00,General,2011-03-15 14:40:56.024000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource08,2011-01-27 01:06:40.010000+00:00,task-11421,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-09 07:56:45.858000+00:00 +Desk,RIGHT_case-5594,2011-03-24 01:06:40+00:00,General,2011-03-15 14:40:56.024000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource08,2011-01-27 01:06:40.010000+00:00,task-11440,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-09 12:10:43.894000+00:00 +Desk,RIGHT_case-5594,2011-03-24 01:06:40+00:00,General,2011-03-15 14:40:56.024000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource08,2011-01-27 01:06:40.010000+00:00,task-12218,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-14 14:35:51.244000+00:00 +Internet,RIGHT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-15450,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource09,2011-03-08 10:03:22.949000+00:00 +Internet,RIGHT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-15452,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource09,2011-03-08 10:04:03.072000+00:00 +Internet,RIGHT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-15455,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-03-08 10:04:36.616000+00:00 +Internet,RIGHT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-15446,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-03-24 10:32:54.458000+00:00 +Internet,RIGHT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-20833,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-04-18 14:29:36.540000+00:00 +Internet,RIGHT_case-5595,2011-03-24 01:06:40+00:00,General,2011-06-06 10:55:21.981000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource09,2011-01-27 01:06:40.010000+00:00,task-20835,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-04-18 14:30:01.996000+00:00 +Desk,RIGHT_case-5597,2011-03-24 00:00:00+00:00,General,2011-02-28 11:47:00.573000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource11,2011-01-27 00:00:00.010000+00:00,task-12355,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-15 15:09:49.796000+00:00 +Desk,RIGHT_case-5597,2011-03-24 00:00:00+00:00,General,2011-02-28 11:47:00.573000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource11,2011-01-27 00:00:00.010000+00:00,task-12358,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-15 15:11:06.077000+00:00 +Desk,RIGHT_case-5597,2011-03-24 00:00:00+00:00,General,2011-02-28 11:47:00.573000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource11,2011-01-27 00:00:00.010000+00:00,task-12359,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-15 15:11:46.393000+00:00 +Desk,RIGHT_case-5597,2011-03-24 00:00:00+00:00,General,2011-02-28 11:47:00.573000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource11,2011-01-27 00:00:00.010000+00:00,task-14128,T12 Check document X request unlicensed,complete,EMPTY,Resource01,2011-02-25 09:10:36.708000+00:00 +Desk,RIGHT_case-5597,2011-03-24 00:00:00+00:00,General,2011-02-28 11:47:00.573000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource11,2011-01-27 00:00:00.010000+00:00,task-14339,T15 Print document X request unlicensed,complete,Group 2,Resource07,2011-02-28 11:47:00.458000+00:00 +Internet,RIGHT_case-5599,2011-03-24 01:06:40+00:00,General,2011-02-28 11:54:34.507000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource01,2011-01-27 01:06:40.010000+00:00,task-11799,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-10 15:19:38.966000+00:00 +Internet,RIGHT_case-5599,2011-03-24 01:06:40+00:00,General,2011-02-28 11:54:34.507000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource01,2011-01-27 01:06:40.010000+00:00,task-11802,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-10 15:20:34.639000+00:00 +Internet,RIGHT_case-5599,2011-03-24 01:06:40+00:00,General,2011-02-28 11:54:34.507000+00:00,2011-03-24 01:06:40.010000+00:00,,Resource01,2011-01-27 01:06:40.010000+00:00,task-11966,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-11 11:29:36.478000+00:00 +Internet,RIGHT_case-5646,2011-03-25 01:06:40+00:00,General,2011-02-28 12:13:30.183000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource07,2011-01-28 01:06:40.010000+00:00,task-10363,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-01 08:57:54.921000+00:00 +Internet,RIGHT_case-5646,2011-03-25 01:06:40+00:00,General,2011-02-28 12:13:30.183000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource07,2011-01-28 01:06:40.010000+00:00,task-10366,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-01 09:12:20.423000+00:00 +Internet,RIGHT_case-5646,2011-03-25 01:06:40+00:00,General,2011-02-28 12:13:30.183000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource07,2011-01-28 01:06:40.010000+00:00,task-10367,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 14:56:35.288000+00:00 +Internet,RIGHT_case-5653,2011-06-01 01:06:40+00:00,General,2011-05-03 11:52:25.459000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource04,2011-01-29 01:06:40.010000+00:00,task-17762,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-24 16:19:46.591000+00:00 +Internet,RIGHT_case-5653,2011-06-01 01:06:40+00:00,General,2011-05-03 11:52:25.459000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource04,2011-01-29 01:06:40.010000+00:00,task-17765,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-24 16:20:57.395000+00:00 +Internet,RIGHT_case-5653,2011-06-01 01:06:40+00:00,General,2011-05-03 11:52:25.459000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource04,2011-01-29 01:06:40.010000+00:00,task-18360,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:17:46.237000+00:00 +Internet,RIGHT_case-5657,2011-03-26 00:00:00+00:00,General,2011-03-25 10:24:50.603000+00:00,2011-03-26 00:00:00.010000+00:00,,Resource17,2011-01-29 00:00:00.010000+00:00,task-12980,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-02-18 10:35:10.612000+00:00 +Internet,RIGHT_case-5657,2011-03-26 00:00:00+00:00,General,2011-03-25 10:24:50.603000+00:00,2011-03-26 00:00:00.010000+00:00,,Resource17,2011-01-29 00:00:00.010000+00:00,task-13014,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-02-18 11:46:11.455000+00:00 +Internet,RIGHT_case-5657,2011-03-26 00:00:00+00:00,General,2011-03-25 10:24:50.603000+00:00,2011-03-26 00:00:00.010000+00:00,,Resource17,2011-01-29 00:00:00.010000+00:00,task-13031,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-22 14:48:09.468000+00:00 +Internet,RIGHT_case-5660,2011-03-26 01:06:40+00:00,General,2011-03-29 11:36:18.189000+00:00,2011-03-26 01:06:40.010000+00:00,,Resource15,2011-01-29 01:06:40.010000+00:00,task-10586,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-02 11:22:49.928000+00:00 +Internet,RIGHT_case-5660,2011-03-26 01:06:40+00:00,General,2011-03-29 11:36:18.189000+00:00,2011-03-26 01:06:40.010000+00:00,,Resource15,2011-01-29 01:06:40.010000+00:00,task-10583,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-02 13:38:16.453000+00:00 +Internet,RIGHT_case-5660,2011-03-26 01:06:40+00:00,General,2011-03-29 11:36:18.189000+00:00,2011-03-26 01:06:40.010000+00:00,,Resource15,2011-01-29 01:06:40.010000+00:00,task-10676,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 13:52:02.513000+00:00 +Internet,RIGHT_case-5683,2011-03-28 01:06:40+00:00,General,2011-03-03 12:19:24.121000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource07,2011-01-31 01:06:40.010000+00:00,task-11357,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-08 10:55:52.858000+00:00 +Internet,RIGHT_case-5683,2011-03-28 01:06:40+00:00,General,2011-03-03 12:19:24.121000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource07,2011-01-31 01:06:40.010000+00:00,task-11360,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-08 10:58:00.736000+00:00 +Internet,RIGHT_case-5683,2011-03-28 01:06:40+00:00,General,2011-03-03 12:19:24.121000+00:00,2011-03-28 01:06:40.020000+00:00,,Resource07,2011-01-31 01:06:40.010000+00:00,task-11690,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-11 09:06:51.545000+00:00 +Internet,RIGHT_case-5684,2011-03-28 00:00:00+00:00,General,2011-03-08 16:39:44.521000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource07,2011-01-31 00:00:00.010000+00:00,task-11053,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-04 16:56:40.140000+00:00 +Internet,RIGHT_case-5684,2011-03-28 00:00:00+00:00,General,2011-03-08 16:39:44.521000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource07,2011-01-31 00:00:00.010000+00:00,task-11056,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-04 16:57:29.595000+00:00 +Internet,RIGHT_case-5684,2011-03-28 00:00:00+00:00,General,2011-03-08 16:39:44.521000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource07,2011-01-31 00:00:00.010000+00:00,task-11057,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-04 16:58:02.803000+00:00 +Internet,RIGHT_case-5686,2011-03-29 00:00:00+00:00,General,2011-02-28 12:21:03.615000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11861,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-11 09:30:21.274000+00:00 +Internet,RIGHT_case-5686,2011-03-29 00:00:00+00:00,General,2011-02-28 12:21:03.615000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11864,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-11 09:32:10.489000+00:00 +Internet,RIGHT_case-5686,2011-03-29 00:00:00+00:00,General,2011-02-28 12:21:03.615000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11865,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-11 09:33:53.772000+00:00 +Desk,RIGHT_case-5704,2011-03-22 00:00:00+00:00,General,2011-03-15 15:43:05.532000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-02-25 00:00:00.010000+00:00,task-12189,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-02-14 12:59:47.552000+00:00 +Desk,RIGHT_case-5704,2011-03-22 00:00:00+00:00,General,2011-03-15 15:43:05.532000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-02-25 00:00:00.010000+00:00,task-12192,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-02-14 13:00:54.912000+00:00 +Desk,RIGHT_case-5704,2011-03-22 00:00:00+00:00,General,2011-03-15 15:43:05.532000+00:00,2011-03-22 00:00:00.010000+00:00,,Resource05,2011-02-25 00:00:00.010000+00:00,task-12406,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-02-16 07:48:50.218000+00:00 +Desk,RIGHT_case-5706,2011-03-23 00:00:00+00:00,General,2011-02-17 16:46:23.611000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource07,2011-01-26 00:00:00.010000+00:00,task-11028,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-04 15:20:43.442000+00:00 +Desk,RIGHT_case-5706,2011-03-23 00:00:00+00:00,General,2011-02-17 16:46:23.611000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource07,2011-01-26 00:00:00.010000+00:00,task-11032,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-04 15:21:12.911000+00:00 +Desk,RIGHT_case-5706,2011-03-23 00:00:00+00:00,General,2011-02-17 16:46:23.611000+00:00,2011-03-23 00:00:00.010000+00:00,,Resource07,2011-01-26 00:00:00.010000+00:00,task-11033,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-04 15:22:01.647000+00:00 +Internet,RIGHT_case-5707,2011-03-29 00:00:00+00:00,General,2011-03-03 11:36:28.283000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource11,2011-02-01 00:00:00.010000+00:00,task-12889,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 15:30:29.064000+00:00 +Internet,RIGHT_case-5707,2011-03-29 00:00:00+00:00,General,2011-03-03 11:36:28.283000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource11,2011-02-01 00:00:00.010000+00:00,task-12892,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 15:30:50.348000+00:00 +Internet,RIGHT_case-5707,2011-03-29 00:00:00+00:00,General,2011-03-03 11:36:28.283000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource11,2011-02-01 00:00:00.010000+00:00,task-12893,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 15:31:21.875000+00:00 +Internet,RIGHT_case-5710,2011-03-29 00:00:00+00:00,General,2011-02-22 09:37:38.363000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11493,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-09 12:07:46.209000+00:00 +Internet,RIGHT_case-5710,2011-03-29 00:00:00+00:00,General,2011-02-22 09:37:38.363000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11503,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-09 13:18:06.103000+00:00 +Internet,RIGHT_case-5710,2011-03-29 00:00:00+00:00,General,2011-02-22 09:37:38.363000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11624,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-10 09:58:47.927000+00:00 +Internet,RIGHT_case-5712,2011-03-29 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11572,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-10 09:31:05.872000+00:00 +Internet,RIGHT_case-5712,2011-03-29 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11579,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-10 09:32:24.434000+00:00 +Internet,RIGHT_case-5712,2011-03-29 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource01,2011-02-01 00:00:00.010000+00:00,task-11580,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-10 09:33:03.566000+00:00 +Internet,RIGHT_case-5714,2011-03-29 00:00:00+00:00,General,2011-04-12 13:55:18.788000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource07,2011-02-01 00:00:00.010000+00:00,task-12619,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-16 15:22:23.873000+00:00 +Internet,RIGHT_case-5714,2011-03-29 00:00:00+00:00,General,2011-04-12 13:55:18.788000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource07,2011-02-01 00:00:00.010000+00:00,task-12622,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-16 15:22:48.748000+00:00 +Internet,RIGHT_case-5714,2011-03-29 00:00:00+00:00,General,2011-04-12 13:55:18.788000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource07,2011-02-01 00:00:00.010000+00:00,task-14668,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-03-01 10:16:31.090000+00:00 +e-mail,RIGHT_case-5721,2011-03-30 00:00:00+00:00,General,2011-05-16 09:48:44.730000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource09,2011-02-02 00:00:00.010000+00:00,task-15693,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-10 09:43:13.264000+00:00 +e-mail,RIGHT_case-5721,2011-03-30 00:00:00+00:00,General,2011-05-16 09:48:44.730000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource09,2011-02-02 00:00:00.010000+00:00,task-15696,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-10 09:43:46.648000+00:00 +e-mail,RIGHT_case-5721,2011-03-30 00:00:00+00:00,General,2011-05-16 09:48:44.730000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource09,2011-02-02 00:00:00.010000+00:00,task-15698,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-03-10 09:44:30.725000+00:00 +e-mail,RIGHT_case-5721,2011-03-30 00:00:00+00:00,General,2011-05-16 09:48:44.730000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource09,2011-02-02 00:00:00.010000+00:00,task-15699,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-03-10 09:45:27.170000+00:00 +Internet,RIGHT_case-5737,2011-03-30 00:00:00+00:00,General,2011-03-17 10:36:27.613000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource06,2011-02-02 00:00:00.010000+00:00,task-15874,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-10 18:53:06.918000+00:00 +Internet,RIGHT_case-5737,2011-03-30 00:00:00+00:00,General,2011-03-17 10:36:27.613000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource06,2011-02-02 00:00:00.010000+00:00,task-15870,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-03-11 10:06:25.650000+00:00 +Internet,RIGHT_case-5737,2011-03-30 00:00:00+00:00,General,2011-03-17 10:36:27.613000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource06,2011-02-02 00:00:00.010000+00:00,task-15902,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-11 11:02:53.089000+00:00 +Internet,RIGHT_case-5743,2011-03-30 00:00:00+00:00,General,2011-03-08 16:52:32.517000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource11,2011-02-03 00:00:00.010000+00:00,task-12758,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 12:00:44.323000+00:00 +Internet,RIGHT_case-5743,2011-03-30 00:00:00+00:00,General,2011-03-08 16:52:32.517000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource11,2011-02-03 00:00:00.010000+00:00,task-12762,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 12:01:12.016000+00:00 +Internet,RIGHT_case-5743,2011-03-30 00:00:00+00:00,General,2011-03-08 16:52:32.517000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource11,2011-02-03 00:00:00.010000+00:00,task-12763,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 12:02:04.663000+00:00 +Desk,RIGHT_case-5748,2011-04-28 00:00:00+00:00,General,2011-04-21 12:15:07.155000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource05,2011-01-31 00:00:00.010000+00:00,task-13800,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-02-23 10:34:09.992000+00:00 +Desk,RIGHT_case-5748,2011-04-28 00:00:00+00:00,General,2011-04-21 12:15:07.155000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource05,2011-01-31 00:00:00.010000+00:00,task-13811,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-02-23 10:37:58.680000+00:00 +Desk,RIGHT_case-5748,2011-04-28 00:00:00+00:00,General,2011-04-21 12:15:07.155000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource05,2011-01-31 00:00:00.010000+00:00,task-13815,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-02-23 10:39:05.733000+00:00 +Desk,RIGHT_case-5748,2011-04-28 00:00:00+00:00,General,2011-04-21 12:15:07.155000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource05,2011-01-31 00:00:00.010000+00:00,task-13817,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-02-23 10:39:41.643000+00:00 +Desk,RIGHT_case-5748,2011-04-28 00:00:00+00:00,General,2011-04-21 12:15:07.155000+00:00,2011-03-28 00:00:00.020000+00:00,,Resource05,2011-01-31 00:00:00.010000+00:00,task-13805,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-24 12:05:59.893000+00:00 +Internet,RIGHT_case-5749,2011-06-09 01:06:40+00:00,General,2011-06-16 10:00:31.852000+00:00,2011-06-09 01:06:40.020000+00:00,,Resource23,2011-02-03 01:06:40.010000+00:00,task-12322,T02 Check confirmation of receipt,complete,EMPTY,Resource23,2011-02-16 13:38:55.940000+00:00 +Internet,RIGHT_case-5749,2011-06-09 01:06:40+00:00,General,2011-06-16 10:00:31.852000+00:00,2011-06-09 01:06:40.020000+00:00,,Resource23,2011-02-03 01:06:40.010000+00:00,task-12557,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-02-16 15:26:24.365000+00:00 +Internet,RIGHT_case-5749,2011-06-09 01:06:40+00:00,General,2011-06-16 10:00:31.852000+00:00,2011-06-09 01:06:40.020000+00:00,,Resource23,2011-02-03 01:06:40.010000+00:00,task-12602,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-17 15:10:30.022000+00:00 +Internet,RIGHT_case-5750,2011-03-25 01:06:40+00:00,General,2011-04-20 09:52:55.437000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource14,2011-01-28 01:06:40.010000+00:00,task-13957,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-02-24 10:38:30.115000+00:00 +Internet,RIGHT_case-5750,2011-03-25 01:06:40+00:00,General,2011-04-20 09:52:55.437000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource14,2011-01-28 01:06:40.010000+00:00,task-13952,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-02-24 10:43:13.869000+00:00 +Internet,RIGHT_case-5750,2011-03-25 01:06:40+00:00,General,2011-04-20 09:52:55.437000+00:00,2011-03-25 01:06:40.010000+00:00,,Resource14,2011-01-28 01:06:40.010000+00:00,task-13963,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-24 13:47:34.219000+00:00 +Desk,RIGHT_case-5761,2011-03-29 00:00:00+00:00,General,2011-02-23 16:30:01.646000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource18,2011-02-01 00:00:00.010000+00:00,task-12016,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-02-11 14:45:33.317000+00:00 +Desk,RIGHT_case-5761,2011-03-29 00:00:00+00:00,General,2011-02-23 16:30:01.646000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource18,2011-02-01 00:00:00.010000+00:00,task-12014,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-02-11 15:13:30.857000+00:00 +Desk,RIGHT_case-5761,2011-03-29 00:00:00+00:00,General,2011-02-23 16:30:01.646000+00:00,2011-03-29 00:00:00.020000+00:00,,Resource18,2011-02-01 00:00:00.010000+00:00,task-12051,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-02-11 15:16:34.253000+00:00 +Desk,RIGHT_case-5766,2011-04-01 00:00:00+00:00,General,2011-04-01 09:42:43.367000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-12791,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 12:43:57.835000+00:00 +Desk,RIGHT_case-5766,2011-04-01 00:00:00+00:00,General,2011-04-01 09:42:43.367000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-12794,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 12:44:20.053000+00:00 +Desk,RIGHT_case-5766,2011-04-01 00:00:00+00:00,General,2011-04-01 09:42:43.367000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-12795,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 12:44:44.909000+00:00 +Desk,RIGHT_case-5767,2011-04-01 00:00:00+00:00,General,2011-03-11 12:31:00.801000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-11705,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-10 12:06:49.852000+00:00 +Desk,RIGHT_case-5767,2011-04-01 00:00:00+00:00,General,2011-03-11 12:31:00.801000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-11708,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-10 12:07:13.399000+00:00 +Desk,RIGHT_case-5767,2011-04-01 00:00:00+00:00,General,2011-03-11 12:31:00.801000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource07,2011-02-04 00:00:00.010000+00:00,task-14490,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-28 13:21:42.130000+00:00 +Internet,RIGHT_case-5769,2011-04-01 00:00:00+00:00,General,2011-03-31 07:48:34.557000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource11,2011-02-04 00:00:00.010000+00:00,task-12954,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-18 09:13:20.723000+00:00 +Internet,RIGHT_case-5769,2011-04-01 00:00:00+00:00,General,2011-03-31 07:48:34.557000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource11,2011-02-04 00:00:00.010000+00:00,task-12957,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-18 09:13:49.279000+00:00 +Internet,RIGHT_case-5769,2011-04-01 00:00:00+00:00,General,2011-03-31 07:48:34.557000+00:00,2011-04-01 00:00:00.020000+00:00,,Resource11,2011-02-04 00:00:00.010000+00:00,task-14507,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-28 13:54:20.212000+00:00 +Internet,RIGHT_case-5865,2011-04-01 01:06:40+00:00,General,2011-04-01 09:42:16.979000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource11,2011-02-04 01:06:40.010000+00:00,task-12885,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 15:23:32.337000+00:00 +Internet,RIGHT_case-5865,2011-04-01 01:06:40+00:00,General,2011-04-01 09:42:16.979000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource11,2011-02-04 01:06:40.010000+00:00,task-12888,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 15:23:53.838000+00:00 +Internet,RIGHT_case-5865,2011-04-01 01:06:40+00:00,General,2011-04-01 09:42:16.979000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource11,2011-02-04 01:06:40.010000+00:00,task-14718,T10 Determine necessity to stop indication,complete,EMPTY,Resource01,2011-03-30 14:53:13.440000+00:00 +Internet,RIGHT_case-5865,2011-04-01 01:06:40+00:00,General,2011-04-01 09:42:16.979000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource11,2011-02-04 01:06:40.010000+00:00,task-18540,T12 Check document X request unlicensed,complete,EMPTY,Resource07,2011-03-31 11:18:27.121000+00:00 +Internet,RIGHT_case-5865,2011-04-01 01:06:40+00:00,General,2011-04-01 09:42:16.979000+00:00,2011-04-01 01:06:40.020000+00:00,,Resource11,2011-02-04 01:06:40.010000+00:00,task-18687,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-04-01 09:42:16.646000+00:00 +Internet,RIGHT_case-5870,2011-04-02 00:00:00+00:00,General,2011-03-08 17:04:44.582000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource07,2011-02-05 00:00:00.010000+00:00,task-12853,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 15:09:11.716000+00:00 +Internet,RIGHT_case-5870,2011-04-02 00:00:00+00:00,General,2011-03-08 17:04:44.582000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource07,2011-02-05 00:00:00.010000+00:00,task-12856,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 15:09:41.700000+00:00 +Internet,RIGHT_case-5870,2011-04-02 00:00:00+00:00,General,2011-03-08 17:04:44.582000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource07,2011-02-05 00:00:00.010000+00:00,task-12857,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 15:10:06.205000+00:00 +Internet,RIGHT_case-5874,2011-04-02 00:00:00+00:00,General,2011-03-19 00:00:00.010000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource08,2011-02-05 00:00:00.010000+00:00,task-12035,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-11 15:17:23.406000+00:00 +Internet,RIGHT_case-5874,2011-04-02 00:00:00+00:00,General,2011-03-19 00:00:00.010000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource08,2011-02-05 00:00:00.010000+00:00,task-12157,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-15 11:21:32.907000+00:00 +Internet,RIGHT_case-5874,2011-04-02 00:00:00+00:00,General,2011-03-19 00:00:00.010000+00:00,2011-04-02 00:00:00.020000+00:00,,Resource08,2011-02-05 00:00:00.010000+00:00,task-12813,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-17 13:29:46.472000+00:00 +Internet,RIGHT_case-5875,2011-04-04 00:00:00+00:00,General,2011-03-08 17:12:31.223000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource07,2011-02-07 00:00:00.010000+00:00,task-12833,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 14:56:09.900000+00:00 +Internet,RIGHT_case-5875,2011-04-04 00:00:00+00:00,General,2011-03-08 17:12:31.223000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource07,2011-02-07 00:00:00.010000+00:00,task-12836,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 14:56:37.296000+00:00 +Internet,RIGHT_case-5875,2011-04-04 00:00:00+00:00,General,2011-03-08 17:12:31.223000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource07,2011-02-07 00:00:00.010000+00:00,task-12837,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 14:57:15.654000+00:00 +Internet,RIGHT_case-5877,2011-03-30 00:00:00+00:00,General,2011-03-30 00:00:00.020000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource37,2011-02-02 00:00:00.010000+00:00,task-15979,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-14 08:15:26.593000+00:00 +Internet,RIGHT_case-5877,2011-03-30 00:00:00+00:00,General,2011-03-30 00:00:00.020000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource37,2011-02-02 00:00:00.010000+00:00,task-15982,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-03-14 08:16:02.726000+00:00 +Internet,RIGHT_case-5877,2011-03-30 00:00:00+00:00,General,2011-03-30 00:00:00.020000+00:00,2011-03-30 00:00:00.020000+00:00,,Resource37,2011-02-02 00:00:00.010000+00:00,task-15983,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-03-14 08:17:59.434000+00:00 +Internet,RIGHT_case-5878,2011-04-03 00:00:00+00:00,General,2011-03-31 15:40:23.559000+00:00,2011-04-03 00:00:00.020000+00:00,,Resource17,2011-02-06 00:00:00.010000+00:00,task-12131,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-02-14 09:50:54.090000+00:00 +Internet,RIGHT_case-5878,2011-04-03 00:00:00+00:00,General,2011-03-31 15:40:23.559000+00:00,2011-04-03 00:00:00.020000+00:00,,Resource17,2011-02-06 00:00:00.010000+00:00,task-12133,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-14 09:51:10.694000+00:00 +Internet,RIGHT_case-5878,2011-04-03 00:00:00+00:00,General,2011-03-31 15:40:23.559000+00:00,2011-04-03 00:00:00.020000+00:00,,Resource17,2011-02-06 00:00:00.010000+00:00,task-12173,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-15 11:22:12.128000+00:00 +Desk,RIGHT_case-5879,2011-05-16 01:06:40+00:00,General,2011-04-20 14:23:27.429000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource02,2011-02-07 01:06:40.010000+00:00,task-13886,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-23 15:15:32.188000+00:00 +Desk,RIGHT_case-5879,2011-05-16 01:06:40+00:00,General,2011-04-20 14:23:27.429000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource02,2011-02-07 01:06:40.010000+00:00,task-13897,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-23 16:43:54.838000+00:00 +Desk,RIGHT_case-5879,2011-05-16 01:06:40+00:00,General,2011-04-20 14:23:27.429000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource02,2011-02-07 01:06:40.010000+00:00,task-14333,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 09:45:27.703000+00:00 +Internet,RIGHT_case-5895,2011-04-04 01:06:40+00:00,General,2011-04-04 16:08:08.213000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource04,2011-02-07 01:06:40.010000+00:00,task-14699,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-01 11:41:06.681000+00:00 +Internet,RIGHT_case-5895,2011-04-04 01:06:40+00:00,General,2011-04-04 16:08:08.213000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource04,2011-02-07 01:06:40.010000+00:00,task-14702,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 15:11:11.656000+00:00 +Internet,RIGHT_case-5895,2011-04-04 01:06:40+00:00,General,2011-04-04 16:08:08.213000+00:00,2011-04-04 01:06:40.020000+00:00,,Resource04,2011-02-07 01:06:40.010000+00:00,task-15002,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-02 16:06:32.002000+00:00 +Internet,RIGHT_case-5897,2011-05-03 01:06:40+00:00,General,,2011-04-18 01:06:40.020000+00:00,Group 10,Resource52,2011-02-08 01:06:40.010000+00:00,task-16409,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-16 11:32:51.310000+00:00 +Internet,RIGHT_case-5897,2011-05-03 01:06:40+00:00,General,,2011-04-18 01:06:40.020000+00:00,Group 10,Resource52,2011-02-08 01:06:40.010000+00:00,task-16414,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-16 11:35:21.411000+00:00 +Internet,RIGHT_case-5897,2011-05-03 01:06:40+00:00,General,,2011-04-18 01:06:40.020000+00:00,Group 10,Resource52,2011-02-08 01:06:40.010000+00:00,task-16413,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-16 13:38:34.942000+00:00 +Internet,RIGHT_case-5919,2011-04-06 00:00:00+00:00,General,2011-03-31 07:47:54.447000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-12989,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-18 10:56:50.315000+00:00 +Internet,RIGHT_case-5919,2011-04-06 00:00:00+00:00,General,2011-03-31 07:47:54.447000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-12992,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-18 10:58:44.159000+00:00 +Internet,RIGHT_case-5919,2011-04-06 00:00:00+00:00,General,2011-03-31 07:47:54.447000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-12993,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-18 10:59:51.121000+00:00 +Internet,RIGHT_case-5921,2011-04-06 00:00:00+00:00,General,2011-04-04 08:13:48.018000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-12736,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 11:26:27.011000+00:00 +Internet,RIGHT_case-5921,2011-04-06 00:00:00+00:00,General,2011-04-04 08:13:48.018000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-12739,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 11:27:05.458000+00:00 +Internet,RIGHT_case-5921,2011-04-06 00:00:00+00:00,General,2011-04-04 08:13:48.018000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource11,2011-02-09 00:00:00.010000+00:00,task-12740,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 11:28:23.847000+00:00 +Internet,RIGHT_case-5922,2011-04-06 00:00:00+00:00,General,2011-04-05 14:29:29.177000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource17,2011-02-09 00:00:00.010000+00:00,task-12973,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-18 10:27:14.014000+00:00 +Internet,RIGHT_case-5922,2011-04-06 00:00:00+00:00,General,2011-04-05 14:29:29.177000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource17,2011-02-09 00:00:00.010000+00:00,task-12971,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-18 12:41:43.409000+00:00 +Internet,RIGHT_case-5922,2011-04-06 00:00:00+00:00,General,2011-04-05 14:29:29.177000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource17,2011-02-09 00:00:00.010000+00:00,task-13057,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-22 14:55:29.516000+00:00 +Desk,RIGHT_case-5923,2011-02-28 00:00:00+00:00,General,2011-02-17 16:36:58.066000+00:00,2011-02-28 00:00:00.010000+00:00,,Resource07,2011-01-03 00:00:00.010000+00:00,task-12092,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-14 08:29:48.971000+00:00 +Desk,RIGHT_case-5923,2011-02-28 00:00:00+00:00,General,2011-02-17 16:36:58.066000+00:00,2011-02-28 00:00:00.010000+00:00,,Resource07,2011-01-03 00:00:00.010000+00:00,task-12095,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-14 08:30:14.253000+00:00 +Desk,RIGHT_case-5923,2011-02-28 00:00:00+00:00,General,2011-02-17 16:36:58.066000+00:00,2011-02-28 00:00:00.010000+00:00,,Resource07,2011-01-03 00:00:00.010000+00:00,task-12096,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-14 08:30:47.931000+00:00 +Desk,RIGHT_case-5928,2011-07-05 01:06:40+00:00,General,2011-07-06 15:12:01.192000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource17,2011-01-19 01:06:40.010000+00:00,task-16232,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-15 16:25:57.685000+00:00 +Desk,RIGHT_case-5928,2011-07-05 01:06:40+00:00,General,2011-07-06 15:12:01.192000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource17,2011-01-19 01:06:40.010000+00:00,task-16239,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-15 16:26:20.939000+00:00 +Desk,RIGHT_case-5928,2011-07-05 01:06:40+00:00,General,2011-07-06 15:12:01.192000+00:00,2011-07-05 01:06:40.020000+00:00,,Resource17,2011-01-19 01:06:40.010000+00:00,task-16243,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-03-15 16:27:28.532000+00:00 +Desk,RIGHT_case-5932,2011-03-14 00:00:00+00:00,General,2011-02-25 16:28:20.090000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource05,2011-01-24 00:00:00.010000+00:00,task-13735,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-02-23 08:59:47.945000+00:00 +Desk,RIGHT_case-5932,2011-03-14 00:00:00+00:00,General,2011-02-25 16:28:20.090000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource05,2011-01-24 00:00:00.010000+00:00,task-13739,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-02-23 09:03:05.639000+00:00 +Desk,RIGHT_case-5932,2011-03-14 00:00:00+00:00,General,2011-02-25 16:28:20.090000+00:00,2011-03-14 00:00:00.010000+00:00,,Resource05,2011-01-24 00:00:00.010000+00:00,task-13738,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 11:41:29.984000+00:00 +Internet,RIGHT_case-5941,2011-05-04 01:06:40+00:00,General,2011-05-02 11:33:28.439000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource02,2011-02-09 01:06:40.010000+00:00,task-13712,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-22 16:47:45.719000+00:00 +Internet,RIGHT_case-5941,2011-05-04 01:06:40+00:00,General,2011-05-02 11:33:28.439000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource02,2011-02-09 01:06:40.010000+00:00,task-13715,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-22 16:51:35.046000+00:00 +Internet,RIGHT_case-5941,2011-05-04 01:06:40+00:00,General,2011-05-02 11:33:28.439000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource02,2011-02-09 01:06:40.010000+00:00,task-13827,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 12:03:35.307000+00:00 +Internet,RIGHT_case-5942,2011-04-07 01:06:40+00:00,General,2011-04-13 11:53:23.561000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-12260,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-02-14 16:21:36.335000+00:00 +Internet,RIGHT_case-5942,2011-04-07 01:06:40+00:00,General,2011-04-13 11:53:23.561000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-12258,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-02-21 11:44:26.314000+00:00 +Internet,RIGHT_case-5942,2011-04-07 01:06:40+00:00,General,2011-04-13 11:53:23.561000+00:00,2011-04-07 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-13425,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 11:06:33.728000+00:00 +Internet,RIGHT_case-5943,2011-04-06 00:00:00+00:00,General,2011-02-22 10:33:42.168000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource02,2011-02-09 00:00:00.010000+00:00,task-12241,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-14 15:46:36.377000+00:00 +Internet,RIGHT_case-5943,2011-04-06 00:00:00+00:00,General,2011-02-22 10:33:42.168000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource02,2011-02-09 00:00:00.010000+00:00,task-12244,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-14 15:47:44.760000+00:00 +Internet,RIGHT_case-5943,2011-04-06 00:00:00+00:00,General,2011-02-22 10:33:42.168000+00:00,2011-04-06 00:00:00.020000+00:00,,Resource02,2011-02-09 00:00:00.010000+00:00,task-12417,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-16 14:23:01.644000+00:00 +Internet,RIGHT_case-5946,2011-04-06 01:06:40+00:00,General,2011-04-06 11:26:14.402000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource04,2011-02-09 01:06:40.010000+00:00,task-14704,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-01 11:58:46.817000+00:00 +Internet,RIGHT_case-5946,2011-04-06 01:06:40+00:00,General,2011-04-06 11:26:14.402000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource04,2011-02-09 01:06:40.010000+00:00,task-14707,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 15:09:46.516000+00:00 +Internet,RIGHT_case-5946,2011-04-06 01:06:40+00:00,General,2011-04-06 11:26:14.402000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource04,2011-02-09 01:06:40.010000+00:00,task-15073,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-03 11:52:52.889000+00:00 +Internet,RIGHT_case-5952,2011-04-07 00:00:00+00:00,General,2011-03-07 08:46:58.682000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource18,2011-02-10 00:00:00.010000+00:00,task-12269,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-02-14 16:30:44.688000+00:00 +Internet,RIGHT_case-5952,2011-04-07 00:00:00+00:00,General,2011-03-07 08:46:58.682000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource18,2011-02-10 00:00:00.010000+00:00,task-12267,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-02-21 11:45:07.795000+00:00 +Internet,RIGHT_case-5952,2011-04-07 00:00:00+00:00,General,2011-03-07 08:46:58.682000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource18,2011-02-10 00:00:00.010000+00:00,task-13428,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 11:34:04.762000+00:00 +Desk,RIGHT_case-5956,2011-05-02 01:06:40+00:00,General,2011-05-13 08:18:57.460000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-12513,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-16 12:35:30.683000+00:00 +Desk,RIGHT_case-5956,2011-05-02 01:06:40+00:00,General,2011-05-13 08:18:57.460000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-12545,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-16 14:37:51.629000+00:00 +Desk,RIGHT_case-5956,2011-05-02 01:06:40+00:00,General,2011-05-13 08:18:57.460000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-14542,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-28 14:45:03.626000+00:00 +Desk,RIGHT_case-5957,2011-04-07 00:00:00+00:00,General,2011-04-07 14:57:18.547000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource11,2011-02-10 00:00:00.010000+00:00,task-12704,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 10:22:02.411000+00:00 +Desk,RIGHT_case-5957,2011-04-07 00:00:00+00:00,General,2011-04-07 14:57:18.547000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource11,2011-02-10 00:00:00.010000+00:00,task-12707,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 10:22:29.825000+00:00 +Desk,RIGHT_case-5957,2011-04-07 00:00:00+00:00,General,2011-04-07 14:57:18.547000+00:00,2011-04-07 00:00:00.020000+00:00,,Resource11,2011-02-10 00:00:00.010000+00:00,task-12708,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 10:24:24.944000+00:00 +Internet,RIGHT_case-5959,2011-04-04 00:00:00+00:00,General,2011-07-14 10:25:49.485000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource26,2011-02-07 00:00:00.010000+00:00,task-14052,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-03-07 13:34:50.191000+00:00 +Internet,RIGHT_case-5959,2011-04-04 00:00:00+00:00,General,2011-07-14 10:25:49.485000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource26,2011-02-07 00:00:00.010000+00:00,task-28706,T10 Determine necessity to stop indication,complete,Group 1,Resource26,2011-06-15 12:48:44.620000+00:00 +Internet,RIGHT_case-5959,2011-04-04 00:00:00+00:00,General,2011-07-14 10:25:49.485000+00:00,2011-04-04 00:00:00.020000+00:00,,Resource26,2011-02-07 00:00:00.010000+00:00,task-28709,T05 Print and send confirmation of receipt,complete,EMPTY,Resource26,2011-06-16 20:20:37.533000+00:00 +Desk,RIGHT_case-5961,2011-04-26 01:06:40+00:00,General,2011-04-20 16:04:55.300000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-02-04 01:06:40.010000+00:00,task-14280,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-25 15:33:16.323000+00:00 +Desk,RIGHT_case-5961,2011-04-26 01:06:40+00:00,General,2011-04-20 16:04:55.300000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-02-04 01:06:40.010000+00:00,task-14406,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-28 11:37:42.003000+00:00 +Desk,RIGHT_case-5961,2011-04-26 01:06:40+00:00,General,2011-04-20 16:04:55.300000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-02-04 01:06:40.010000+00:00,task-14464,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 10:16:51.166000+00:00 +Internet,RIGHT_case-5983,2011-04-10 00:00:00+00:00,General,2011-03-29 14:10:17.464000+00:00,2011-04-10 00:00:00.020000+00:00,,Resource15,2011-02-13 00:00:00.010000+00:00,task-12523,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-16 12:37:06.649000+00:00 +Internet,RIGHT_case-5983,2011-04-10 00:00:00+00:00,General,2011-03-29 14:10:17.464000+00:00,2011-04-10 00:00:00.020000+00:00,,Resource15,2011-02-13 00:00:00.010000+00:00,task-12548,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-16 14:24:36.004000+00:00 +Internet,RIGHT_case-5983,2011-04-10 00:00:00+00:00,General,2011-03-29 14:10:17.464000+00:00,2011-04-10 00:00:00.020000+00:00,,Resource15,2011-02-13 00:00:00.010000+00:00,task-12983,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-18 10:36:19.540000+00:00 +Internet,RIGHT_case-5986,2011-05-08 01:06:40+00:00,General,2011-06-28 09:35:48.698000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-02-13 01:06:40.010000+00:00,task-14575,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-02-28 16:12:20.436000+00:00 +Internet,RIGHT_case-5986,2011-05-08 01:06:40+00:00,General,2011-06-28 09:35:48.698000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-02-13 01:06:40.010000+00:00,task-14628,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-01 08:29:51.010000+00:00 +Internet,RIGHT_case-5986,2011-05-08 01:06:40+00:00,General,2011-06-28 09:35:48.698000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-02-13 01:06:40.010000+00:00,task-14633,T17 Check report Y to stop indication,complete,Group 4,Resource08,2011-03-01 08:35:32.670000+00:00 +Internet,RIGHT_case-5986,2011-05-08 01:06:40+00:00,General,2011-06-28 09:35:48.698000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-02-13 01:06:40.010000+00:00,task-14641,T20 Print report Y to stop indication,complete,Group 2,Resource08,2011-03-01 08:36:13.441000+00:00 +Internet,RIGHT_case-5986,2011-05-08 01:06:40+00:00,General,2011-06-28 09:35:48.698000+00:00,2011-05-08 01:06:40.020000+00:00,,Resource08,2011-02-13 01:06:40.010000+00:00,task-14584,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 10:21:24.622000+00:00 +Internet,RIGHT_case-5994,2011-04-11 00:00:00+00:00,General,2011-04-04 08:26:16.417000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-13460,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 09:43:51.042000+00:00 +Internet,RIGHT_case-5994,2011-04-11 00:00:00+00:00,General,2011-04-04 08:26:16.417000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-13463,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 09:44:27.624000+00:00 +Internet,RIGHT_case-5994,2011-04-11 00:00:00+00:00,General,2011-04-04 08:26:16.417000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-13464,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 10:01:01.459000+00:00 +Internet,RIGHT_case-5997,2011-04-11 00:00:00+00:00,General,2011-04-11 08:18:12.264000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-13601,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 13:37:46.799000+00:00 +Internet,RIGHT_case-5997,2011-04-11 00:00:00+00:00,General,2011-04-11 08:18:12.264000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-13604,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 13:38:09.067000+00:00 +Internet,RIGHT_case-5997,2011-04-11 00:00:00+00:00,General,2011-04-11 08:18:12.264000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource11,2011-02-14 00:00:00.010000+00:00,task-13605,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 13:38:36.667000+00:00 +Internet,RIGHT_case-5998,2011-04-11 00:00:00+00:00,General,2011-04-07 09:09:05.884000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource02,2011-02-14 00:00:00.010000+00:00,task-13559,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-22 12:33:54.700000+00:00 +Internet,RIGHT_case-5998,2011-04-11 00:00:00+00:00,General,2011-04-07 09:09:05.884000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource02,2011-02-14 00:00:00.010000+00:00,task-13562,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-02-22 12:40:09.009000+00:00 +Internet,RIGHT_case-5998,2011-04-11 00:00:00+00:00,General,2011-04-07 09:09:05.884000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource02,2011-02-14 00:00:00.010000+00:00,task-13564,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource02,2011-02-22 12:40:32.708000+00:00 +Internet,RIGHT_case-5998,2011-04-11 00:00:00+00:00,General,2011-04-07 09:09:05.884000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource02,2011-02-14 00:00:00.010000+00:00,task-13566,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-22 12:45:06.258000+00:00 +Internet,RIGHT_case-5998,2011-04-11 00:00:00+00:00,General,2011-04-07 09:09:05.884000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource02,2011-02-14 00:00:00.010000+00:00,task-13798,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 11:57:55.759000+00:00 +Internet,RIGHT_case-6009,2011-07-08 01:06:40+00:00,General,2011-07-12 14:59:47.005000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource18,2010-12-22 01:06:40.010000+00:00,task-12345,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-02-15 15:02:52.613000+00:00 +Internet,RIGHT_case-6009,2011-07-08 01:06:40+00:00,General,2011-07-12 14:59:47.005000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource18,2010-12-22 01:06:40.010000+00:00,task-12348,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-02-15 15:03:25.931000+00:00 +Internet,RIGHT_case-6009,2011-07-08 01:06:40+00:00,General,2011-07-12 14:59:47.005000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource18,2010-12-22 01:06:40.010000+00:00,task-12353,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-02-15 15:16:08.086000+00:00 +Internet,RIGHT_case-6010,2011-03-24 00:00:00+00:00,General,2011-04-28 09:24:48.587000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource09,2011-01-27 00:00:00.010000+00:00,task-17211,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource09,2011-03-22 14:17:17.713000+00:00 +Internet,RIGHT_case-6010,2011-03-24 00:00:00+00:00,General,2011-04-28 09:24:48.587000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource09,2011-01-27 00:00:00.010000+00:00,task-17213,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-03-22 14:18:27.266000+00:00 +Internet,RIGHT_case-6010,2011-03-24 00:00:00+00:00,General,2011-04-28 09:24:48.587000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource09,2011-01-27 00:00:00.010000+00:00,task-17203,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-22 14:23:56.997000+00:00 +Internet,RIGHT_case-6010,2011-03-24 00:00:00+00:00,General,2011-04-28 09:24:48.587000+00:00,2011-03-24 00:00:00.010000+00:00,,Resource09,2011-01-27 00:00:00.010000+00:00,task-17236,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-22 14:59:14.284000+00:00 +Internet,RIGHT_case-6012,2011-05-04 14:56:16.838000+00:00,General,2011-03-16 12:10:18.381000+00:00,2011-05-04 14:56:16.838000+00:00,,Resource06,2011-02-15 14:56:16.838000+00:00,task-12394,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-02-15 16:21:27.674000+00:00 +Internet,RIGHT_case-6012,2011-05-04 14:56:16.838000+00:00,General,2011-03-16 12:10:18.381000+00:00,2011-05-04 14:56:16.838000+00:00,,Resource06,2011-02-15 14:56:16.838000+00:00,task-12397,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-02-15 16:21:46.222000+00:00 +Internet,RIGHT_case-6012,2011-05-04 14:56:16.838000+00:00,General,2011-03-16 12:10:18.381000+00:00,2011-05-04 14:56:16.838000+00:00,,Resource06,2011-02-15 14:56:16.838000+00:00,task-12398,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-02-15 16:22:14.939000+00:00 +Internet,RIGHT_case-6015,2011-05-04 15:00:43.554000+00:00,General,2011-03-11 15:50:56.266000+00:00,2011-05-04 15:00:43.554000+00:00,,Resource06,2011-02-15 15:00:43.554000+00:00,task-12368,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-02-15 15:45:56.421000+00:00 +Internet,RIGHT_case-6015,2011-05-04 15:00:43.554000+00:00,General,2011-03-11 15:50:56.266000+00:00,2011-05-04 15:00:43.554000+00:00,,Resource06,2011-02-15 15:00:43.554000+00:00,task-12373,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource06,2011-02-15 15:47:20.899000+00:00 +Internet,RIGHT_case-6015,2011-05-04 15:00:43.554000+00:00,General,2011-03-11 15:50:56.266000+00:00,2011-05-04 15:00:43.554000+00:00,,Resource06,2011-02-15 15:00:43.554000+00:00,task-12375,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-02-15 15:48:36.617000+00:00 +Internet,RIGHT_case-6015,2011-05-04 15:00:43.554000+00:00,General,2011-03-11 15:50:56.266000+00:00,2011-05-04 15:00:43.554000+00:00,,Resource06,2011-02-15 15:00:43.554000+00:00,task-12372,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-16 14:03:48.596000+00:00 +Internet,RIGHT_case-6028,2011-04-06 01:06:40+00:00,General,2011-08-29 11:59:25.489000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource23,2011-02-09 01:06:40.010000+00:00,task-13072,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource23,2011-02-18 13:52:54.812000+00:00 +Internet,RIGHT_case-6028,2011-04-06 01:06:40+00:00,General,2011-08-29 11:59:25.489000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource23,2011-02-09 01:06:40.010000+00:00,task-13075,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-02-18 13:54:00.377000+00:00 +Internet,RIGHT_case-6028,2011-04-06 01:06:40+00:00,General,2011-08-29 11:59:25.489000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource23,2011-02-09 01:06:40.010000+00:00,task-13062,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-21 08:30:46.099000+00:00 +Internet,RIGHT_case-6028,2011-04-06 01:06:40+00:00,General,2011-08-29 11:59:25.489000+00:00,2011-04-06 01:06:40.020000+00:00,,Resource23,2011-02-09 01:06:40.010000+00:00,task-13219,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-22 15:42:12.080000+00:00 +Internet,RIGHT_case-6032,2011-04-13 00:00:00+00:00,General,2011-04-12 07:30:39.271000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-13627,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 13:54:22.951000+00:00 +Internet,RIGHT_case-6032,2011-04-13 00:00:00+00:00,General,2011-04-12 07:30:39.271000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-13630,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 13:54:49.009000+00:00 +Internet,RIGHT_case-6032,2011-04-13 00:00:00+00:00,General,2011-04-12 07:30:39.271000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-13631,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 13:55:31.584000+00:00 +Internet,RIGHT_case-6034,2011-04-13 00:00:00+00:00,General,2011-04-04 08:38:31.554000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource11,2011-02-16 00:00:00.010000+00:00,task-13672,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 14:39:59.146000+00:00 +Internet,RIGHT_case-6034,2011-04-13 00:00:00+00:00,General,2011-04-04 08:38:31.554000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource11,2011-02-16 00:00:00.010000+00:00,task-13675,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 14:40:24.815000+00:00 +Internet,RIGHT_case-6034,2011-04-13 00:00:00+00:00,General,2011-04-04 08:38:31.554000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource11,2011-02-16 00:00:00.010000+00:00,task-13676,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 14:40:49.472000+00:00 +Internet,RIGHT_case-6036,2011-04-12 00:00:00+00:00,General,2011-04-04 08:46:19.676000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-13648,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 14:10:02.010000+00:00 +Internet,RIGHT_case-6036,2011-04-12 00:00:00+00:00,General,2011-04-04 08:46:19.676000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-13651,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 14:10:28.732000+00:00 +Internet,RIGHT_case-6036,2011-04-12 00:00:00+00:00,General,2011-04-04 08:46:19.676000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-13652,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 14:10:55.059000+00:00 +Internet,RIGHT_case-6055,2011-04-14 01:06:40+00:00,General,2011-04-04 13:11:59.089000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource11,2011-02-16 01:06:40.010000+00:00,task-13498,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 11:08:48.079000+00:00 +Internet,RIGHT_case-6055,2011-04-14 01:06:40+00:00,General,2011-04-04 13:11:59.089000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource11,2011-02-16 01:06:40.010000+00:00,task-13501,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 11:09:15.119000+00:00 +Internet,RIGHT_case-6055,2011-04-14 01:06:40+00:00,General,2011-04-04 13:11:59.089000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource11,2011-02-16 01:06:40.010000+00:00,task-13502,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 11:09:42.816000+00:00 +Internet,RIGHT_case-6056,2011-04-13 01:06:40+00:00,General,2011-05-31 14:41:22.033000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource14,2011-02-16 01:06:40.010000+00:00,task-16479,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-03-16 14:28:46.788000+00:00 +Internet,RIGHT_case-6056,2011-04-13 01:06:40+00:00,General,2011-05-31 14:41:22.033000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource14,2011-02-16 01:06:40.010000+00:00,task-16468,T02 Check confirmation of receipt,complete,EMPTY,Resource14,2011-03-21 11:40:46.087000+00:00 +Internet,RIGHT_case-6056,2011-04-13 01:06:40+00:00,General,2011-05-31 14:41:22.033000+00:00,2011-04-13 01:06:40.020000+00:00,,Resource14,2011-02-16 01:06:40.010000+00:00,task-16940,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-22 14:29:14.386000+00:00 +Internet,RIGHT_case-6068,2011-04-13 00:00:00+00:00,General,2011-02-25 11:11:42.522000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-14166,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-25 08:36:14.984000+00:00 +Internet,RIGHT_case-6068,2011-04-13 00:00:00+00:00,General,2011-02-25 11:11:42.522000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-14169,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-25 08:36:50.332000+00:00 +Internet,RIGHT_case-6068,2011-04-13 00:00:00+00:00,General,2011-02-25 11:11:42.522000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-14170,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-25 08:37:27.287000+00:00 +Internet,RIGHT_case-6069,2011-04-13 00:00:00+00:00,General,2011-03-04 00:00:00.010000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-14161,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-25 08:30:32.837000+00:00 +Internet,RIGHT_case-6069,2011-04-13 00:00:00+00:00,General,2011-03-04 00:00:00.010000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-14164,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-25 08:30:57.246000+00:00 +Internet,RIGHT_case-6069,2011-04-13 00:00:00+00:00,General,2011-03-04 00:00:00.010000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource07,2011-02-16 00:00:00.010000+00:00,task-14165,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-25 09:06:13.365000+00:00 +Internet,RIGHT_case-6070,2011-04-14 00:00:00+00:00,General,2011-03-09 14:40:03.533000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource02,2011-02-17 00:00:00.010000+00:00,task-13853,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-23 12:22:41.433000+00:00 +Internet,RIGHT_case-6070,2011-04-14 00:00:00+00:00,General,2011-03-09 14:40:03.533000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource02,2011-02-17 00:00:00.010000+00:00,task-14332,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 09:41:41.624000+00:00 +Internet,RIGHT_case-6070,2011-04-14 00:00:00+00:00,General,2011-03-09 14:40:03.533000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource02,2011-02-17 00:00:00.010000+00:00,task-13856,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-09 14:13:26.588000+00:00 +Internet,RIGHT_case-6070,2011-04-14 00:00:00+00:00,General,2011-03-09 14:40:03.533000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource02,2011-02-17 00:00:00.010000+00:00,task-15639,T12 Check document X request unlicensed,complete,Group 4,Resource02,2011-03-09 14:39:31.110000+00:00 +Internet,RIGHT_case-6070,2011-04-14 00:00:00+00:00,General,2011-03-09 14:40:03.533000+00:00,2011-04-14 00:00:00.020000+00:00,,Resource02,2011-02-17 00:00:00.010000+00:00,task-15642,T15 Print document X request unlicensed,complete,Group 2,Resource02,2011-03-09 14:40:03.379000+00:00 +Desk,RIGHT_case-6078,2011-04-11 00:00:00+00:00,General,2011-04-11 15:03:39.275000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource08,2011-02-14 00:00:00.010000+00:00,task-14694,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-01 10:51:48.724000+00:00 +Desk,RIGHT_case-6078,2011-04-11 00:00:00+00:00,General,2011-04-11 15:03:39.275000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource08,2011-02-14 00:00:00.010000+00:00,task-14856,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-02 14:23:33.253000+00:00 +Desk,RIGHT_case-6078,2011-04-11 00:00:00+00:00,General,2011-04-11 15:03:39.275000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource08,2011-02-14 00:00:00.010000+00:00,task-16216,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-15 15:35:24.673000+00:00 +Desk,RIGHT_case-6080,2011-04-12 01:06:40+00:00,General,2011-08-30 15:42:21.722000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource14,2011-02-15 01:06:40.010000+00:00,task-37017,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-24 10:34:33.983000+00:00 +Desk,RIGHT_case-6080,2011-04-12 01:06:40+00:00,General,2011-08-30 15:42:21.722000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource14,2011-02-15 01:06:40.010000+00:00,task-37021,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-24 10:35:17.321000+00:00 +Desk,RIGHT_case-6080,2011-04-12 01:06:40+00:00,General,2011-08-30 15:42:21.722000+00:00,2011-04-12 01:06:40.020000+00:00,,Resource14,2011-02-15 01:06:40.010000+00:00,task-37023,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-24 10:49:15.317000+00:00 +Desk,RIGHT_case-6084,2011-04-08 00:00:00+00:00,General,2011-04-04 12:59:01.454000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource11,2011-02-11 00:00:00.010000+00:00,task-13572,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 12:50:25.949000+00:00 +Desk,RIGHT_case-6084,2011-04-08 00:00:00+00:00,General,2011-04-04 12:59:01.454000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource11,2011-02-11 00:00:00.010000+00:00,task-13575,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 12:50:47.627000+00:00 +Desk,RIGHT_case-6084,2011-04-08 00:00:00+00:00,General,2011-04-04 12:59:01.454000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource11,2011-02-11 00:00:00.010000+00:00,task-13576,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 12:51:22.240000+00:00 +Internet,RIGHT_case-6108,2011-04-15 00:00:00+00:00,General,2011-04-19 15:00:56.690000+00:00,2011-04-15 00:00:00.020000+00:00,,Resource09,2011-02-21 00:00:00.010000+00:00,task-19835,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-04-11 11:36:06.319000+00:00 +Internet,RIGHT_case-6108,2011-04-15 00:00:00+00:00,General,2011-04-19 15:00:56.690000+00:00,2011-04-15 00:00:00.020000+00:00,,Resource09,2011-02-21 00:00:00.010000+00:00,task-19833,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-04-11 11:37:15.543000+00:00 +Internet,RIGHT_case-6108,2011-04-15 00:00:00+00:00,General,2011-04-19 15:00:56.690000+00:00,2011-04-15 00:00:00.020000+00:00,,Resource09,2011-02-21 00:00:00.010000+00:00,task-19841,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-04-11 12:08:45.470000+00:00 +Internet,RIGHT_case-6113,2011-04-17 00:00:00+00:00,General,2011-07-26 08:06:13.303000+00:00,2011-04-17 00:00:00.020000+00:00,,Resource12,2011-02-20 00:00:00.010000+00:00,task-15040,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-03-07 08:18:34.373000+00:00 +Internet,RIGHT_case-6113,2011-04-17 00:00:00+00:00,General,2011-07-26 08:06:13.303000+00:00,2011-04-17 00:00:00.020000+00:00,,Resource12,2011-02-20 00:00:00.010000+00:00,task-15397,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-08 10:28:34.433000+00:00 +Internet,RIGHT_case-6113,2011-04-17 00:00:00+00:00,General,2011-07-26 08:06:13.303000+00:00,2011-04-17 00:00:00.020000+00:00,,Resource12,2011-02-20 00:00:00.010000+00:00,task-16027,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-03-14 09:48:28.694000+00:00 +Internet,RIGHT_case-6116,2011-04-18 00:00:00+00:00,General,2011-03-11 09:34:22.368000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource18,2011-02-21 00:00:00.010000+00:00,task-14122,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-02-24 15:48:34.863000+00:00 +Internet,RIGHT_case-6116,2011-04-18 00:00:00+00:00,General,2011-03-11 09:34:22.368000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource18,2011-02-21 00:00:00.010000+00:00,task-14126,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-02-24 15:49:36.398000+00:00 +Internet,RIGHT_case-6116,2011-04-18 00:00:00+00:00,General,2011-03-11 09:34:22.368000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource18,2011-02-21 00:00:00.010000+00:00,task-14129,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-02-24 15:58:49.340000+00:00 +Internet,RIGHT_case-6128,2011-06-13 01:06:40+00:00,General,2011-06-08 00:00:00.020000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource08,2011-02-21 01:06:40.010000+00:00,task-14711,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-01 12:20:43.673000+00:00 +Internet,RIGHT_case-6128,2011-06-13 01:06:40+00:00,General,2011-06-08 00:00:00.020000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource08,2011-02-21 01:06:40.010000+00:00,task-14708,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-01 12:21:07.289000+00:00 +Internet,RIGHT_case-6128,2011-06-13 01:06:40+00:00,General,2011-06-08 00:00:00.020000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource08,2011-02-21 01:06:40.010000+00:00,task-14862,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-02 14:30:12.818000+00:00 +Internet,RIGHT_case-6130,2011-04-05 01:06:40+00:00,General,2011-03-31 09:55:25.855000+00:00,2011-04-05 01:06:40.020000+00:00,,Resource11,2011-02-08 01:06:40.010000+00:00,task-15769,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-10 12:09:20.153000+00:00 +Internet,RIGHT_case-6130,2011-04-05 01:06:40+00:00,General,2011-03-31 09:55:25.855000+00:00,2011-04-05 01:06:40.020000+00:00,,Resource11,2011-02-08 01:06:40.010000+00:00,task-15774,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-10 12:09:44.583000+00:00 +Internet,RIGHT_case-6130,2011-04-05 01:06:40+00:00,General,2011-03-31 09:55:25.855000+00:00,2011-04-05 01:06:40.020000+00:00,,Resource11,2011-02-08 01:06:40.010000+00:00,task-15775,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-10 12:10:14.946000+00:00 +Internet,RIGHT_case-6140,2011-04-18 01:06:40+00:00,General,2011-04-18 09:35:17.988000+00:00,2011-04-18 01:06:40.020000+00:00,,Resource17,2011-02-21 01:06:40.010000+00:00,task-14019,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-02-24 12:35:49.090000+00:00 +Internet,RIGHT_case-6140,2011-04-18 01:06:40+00:00,General,2011-04-18 09:35:17.988000+00:00,2011-04-18 01:06:40.020000+00:00,,Resource17,2011-02-21 01:06:40.010000+00:00,task-14022,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-24 12:39:34.497000+00:00 +Internet,RIGHT_case-6140,2011-04-18 01:06:40+00:00,General,2011-04-18 09:35:17.988000+00:00,2011-04-18 01:06:40.020000+00:00,,Resource17,2011-02-21 01:06:40.010000+00:00,task-14450,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 09:56:49.573000+00:00 +Internet,RIGHT_case-6141,2011-03-25 00:00:00+00:00,General,2011-04-12 08:14:31.155000+00:00,2011-03-25 00:00:00.010000+00:00,,Resource01,2011-01-28 00:00:00.010000+00:00,task-14823,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-02 08:26:07.265000+00:00 +Internet,RIGHT_case-6141,2011-03-25 00:00:00+00:00,General,2011-04-12 08:14:31.155000+00:00,2011-03-25 00:00:00.010000+00:00,,Resource01,2011-01-28 00:00:00.010000+00:00,task-14821,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-02 08:26:50.794000+00:00 +Internet,RIGHT_case-6141,2011-03-25 00:00:00+00:00,General,2011-04-12 08:14:31.155000+00:00,2011-03-25 00:00:00.010000+00:00,,Resource01,2011-01-28 00:00:00.010000+00:00,task-14829,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-02 08:27:25.565000+00:00 +Internet,RIGHT_case-6145,2011-05-03 01:06:40+00:00,General,2011-04-26 11:53:49.140000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource15,2011-02-22 01:06:40.010000+00:00,task-13860,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-28 10:47:24.851000+00:00 +Internet,RIGHT_case-6145,2011-05-03 01:06:40+00:00,General,2011-04-26 11:53:49.140000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource15,2011-02-22 01:06:40.010000+00:00,task-13858,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-28 11:53:00.608000+00:00 +Internet,RIGHT_case-6145,2011-05-03 01:06:40+00:00,General,2011-04-26 11:53:49.140000+00:00,2011-05-03 01:06:40.020000+00:00,,Resource15,2011-02-22 01:06:40.010000+00:00,task-14427,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 10:13:07.907000+00:00 +Internet,RIGHT_case-6146,2011-04-19 01:06:40+00:00,General,2011-03-30 13:37:17.561000+00:00,2011-04-19 01:06:40.020000+00:00,,Resource22,2011-02-22 01:06:40.010000+00:00,task-14743,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-03-01 15:15:30.500000+00:00 +Internet,RIGHT_case-6146,2011-04-19 01:06:40+00:00,General,2011-03-30 13:37:17.561000+00:00,2011-04-19 01:06:40.020000+00:00,,Resource22,2011-02-22 01:06:40.010000+00:00,task-14746,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-03-01 15:17:22.287000+00:00 +Internet,RIGHT_case-6146,2011-04-19 01:06:40+00:00,General,2011-03-30 13:37:17.561000+00:00,2011-04-19 01:06:40.020000+00:00,,Resource22,2011-02-22 01:06:40.010000+00:00,task-14857,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-02 14:27:46.341000+00:00 +Internet,RIGHT_case-6148,2011-04-20 00:00:00+00:00,General,2011-03-23 14:39:43.350000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource02,2011-02-23 00:00:00.010000+00:00,task-14347,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-28 09:23:30.739000+00:00 +Internet,RIGHT_case-6148,2011-04-20 00:00:00+00:00,General,2011-03-23 14:39:43.350000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource02,2011-02-23 00:00:00.010000+00:00,task-14349,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-28 09:40:08.697000+00:00 +Internet,RIGHT_case-6148,2011-04-20 00:00:00+00:00,General,2011-03-23 14:39:43.350000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource02,2011-02-23 00:00:00.010000+00:00,task-14388,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-28 14:43:50.132000+00:00 +Internet,RIGHT_case-6149,2011-04-20 00:00:00+00:00,General,2011-03-28 00:00:00.020000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-14722,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-03-01 13:23:18.048000+00:00 +Internet,RIGHT_case-6149,2011-04-20 00:00:00+00:00,General,2011-03-28 00:00:00.020000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-14725,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-03-01 13:23:46.681000+00:00 +Internet,RIGHT_case-6149,2011-04-20 00:00:00+00:00,General,2011-03-28 00:00:00.020000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-14726,T10 Determine necessity to stop indication,complete,Group 1,admin2,2011-03-29 15:16:30.329000+00:00 +Internet,RIGHT_case-6152,2011-04-18 00:00:00+00:00,General,2011-03-09 11:14:12.705000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-21 00:00:00.010000+00:00,task-14431,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-28 11:55:56.790000+00:00 +Internet,RIGHT_case-6152,2011-04-18 00:00:00+00:00,General,2011-03-09 11:14:12.705000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-21 00:00:00.010000+00:00,task-14434,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-28 11:57:05.776000+00:00 +Internet,RIGHT_case-6152,2011-04-18 00:00:00+00:00,General,2011-03-09 11:14:12.705000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-21 00:00:00.010000+00:00,task-14483,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-02-28 17:09:53.696000+00:00 +Internet,RIGHT_case-6153,2011-04-11 00:00:00+00:00,General,2011-04-29 09:04:28.140000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource05,2011-02-14 00:00:00.010000+00:00,task-16063,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-03-14 12:12:30.042000+00:00 +Internet,RIGHT_case-6153,2011-04-11 00:00:00+00:00,General,2011-04-29 09:04:28.140000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource05,2011-02-14 00:00:00.010000+00:00,task-16066,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-03-14 12:14:16.037000+00:00 +Internet,RIGHT_case-6153,2011-04-11 00:00:00+00:00,General,2011-04-29 09:04:28.140000+00:00,2011-04-11 00:00:00.020000+00:00,,Resource05,2011-02-14 00:00:00.010000+00:00,task-16283,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-03-16 07:37:04.696000+00:00 +Desk,RIGHT_case-6156,2011-04-13 00:00:00+00:00,General,2011-04-08 14:25:31.842000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource17,2011-02-16 00:00:00.010000+00:00,task-15830,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-10 14:31:27.232000+00:00 +Desk,RIGHT_case-6156,2011-04-13 00:00:00+00:00,General,2011-04-08 14:25:31.842000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource17,2011-02-16 00:00:00.010000+00:00,task-15834,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-10 14:32:25.152000+00:00 +Desk,RIGHT_case-6156,2011-04-13 00:00:00+00:00,General,2011-04-08 14:25:31.842000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource17,2011-02-16 00:00:00.010000+00:00,task-15833,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-11 10:58:36.100000+00:00 +Internet,RIGHT_case-6166,2011-04-20 00:00:00+00:00,General,2011-04-11 07:36:38.039000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-15804,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-10 13:29:17.151000+00:00 +Internet,RIGHT_case-6166,2011-04-20 00:00:00+00:00,General,2011-04-11 07:36:38.039000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-15807,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-10 13:29:49.252000+00:00 +Internet,RIGHT_case-6166,2011-04-20 00:00:00+00:00,General,2011-04-11 07:36:38.039000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource11,2011-02-23 00:00:00.010000+00:00,task-15808,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-10 13:30:16.611000+00:00 +Internet,RIGHT_case-6167,2011-04-20 00:00:00+00:00,General,2011-04-12 10:45:01.060000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource07,2011-02-23 00:00:00.010000+00:00,task-17480,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:32:00.063000+00:00 +Internet,RIGHT_case-6167,2011-04-20 00:00:00+00:00,General,2011-04-12 10:45:01.060000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource07,2011-02-23 00:00:00.010000+00:00,task-18556,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:20:29.103000+00:00 +Internet,RIGHT_case-6167,2011-04-20 00:00:00+00:00,General,2011-04-12 10:45:01.060000+00:00,2011-04-20 00:00:00.020000+00:00,,Resource07,2011-02-23 00:00:00.010000+00:00,task-19153,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 15:07:45.213000+00:00 +Internet,RIGHT_case-6168,2011-04-21 00:00:00+00:00,General,2011-04-06 12:09:43.071000+00:00,2011-04-21 00:00:00.020000+00:00,,Resource11,2011-02-24 00:00:00.010000+00:00,task-14791,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-03-01 16:49:53.640000+00:00 +Internet,RIGHT_case-6168,2011-04-21 00:00:00+00:00,General,2011-04-06 12:09:43.071000+00:00,2011-04-21 00:00:00.020000+00:00,,Resource11,2011-02-24 00:00:00.010000+00:00,task-14794,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-03-01 16:50:35.882000+00:00 +Internet,RIGHT_case-6168,2011-04-21 00:00:00+00:00,General,2011-04-06 12:09:43.071000+00:00,2011-04-21 00:00:00.020000+00:00,,Resource11,2011-02-24 00:00:00.010000+00:00,task-14795,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-03-01 16:57:28.647000+00:00 +Internet,RIGHT_case-6169,2011-05-14 01:06:40+00:00,General,2011-05-09 16:30:11.401000+00:00,2011-05-14 01:06:40.020000+00:00,,Resource15,2011-02-24 01:06:40.010000+00:00,task-14435,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-28 11:57:18.990000+00:00 +Internet,RIGHT_case-6169,2011-05-14 01:06:40+00:00,General,2011-05-09 16:30:11.401000+00:00,2011-05-14 01:06:40.020000+00:00,,Resource15,2011-02-24 01:06:40.010000+00:00,task-14255,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-03-04 13:41:42.757000+00:00 +Internet,RIGHT_case-6169,2011-05-14 01:06:40+00:00,General,2011-05-09 16:30:11.401000+00:00,2011-05-14 01:06:40.020000+00:00,,Resource15,2011-02-24 01:06:40.010000+00:00,task-15395,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-08 10:22:35.626000+00:00 +Internet,RIGHT_case-6171,2011-04-18 00:00:00+00:00,General,2011-04-12 00:00:00.020000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-22 00:00:00.010000+00:00,task-14523,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-28 14:13:31.252000+00:00 +Internet,RIGHT_case-6171,2011-04-18 00:00:00+00:00,General,2011-04-12 00:00:00.020000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-22 00:00:00.010000+00:00,task-14527,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-28 14:55:53.687000+00:00 +Internet,RIGHT_case-6171,2011-04-18 00:00:00+00:00,General,2011-04-12 00:00:00.020000+00:00,2011-04-18 00:00:00.020000+00:00,,Resource02,2011-02-22 00:00:00.010000+00:00,task-14589,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 10:19:44.015000+00:00 +Internet,RIGHT_case-6177,2011-04-08 00:00:00+00:00,General,2011-04-06 13:57:14.410000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource08,2010-12-06 00:00:00.010000+00:00,task-16685,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-18 08:46:35.318000+00:00 +Internet,RIGHT_case-6177,2011-04-08 00:00:00+00:00,General,2011-04-06 13:57:14.410000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource08,2010-12-06 00:00:00.010000+00:00,task-16688,T05 Print and send confirmation of receipt,complete,Group 2,Resource08,2011-03-18 08:49:00.786000+00:00 +Internet,RIGHT_case-6177,2011-04-08 00:00:00+00:00,General,2011-04-06 13:57:14.410000+00:00,2011-04-08 00:00:00.020000+00:00,,Resource08,2010-12-06 00:00:00.010000+00:00,task-16689,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-18 08:49:32.686000+00:00 +Internet,RIGHT_case-6209,2011-04-22 01:06:40+00:00,General,2011-04-12 11:40:18.410000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-17486,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:00:46.423000+00:00 +Internet,RIGHT_case-6209,2011-04-22 01:06:40+00:00,General,2011-04-12 11:40:18.410000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-17489,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:01:18.133000+00:00 +Internet,RIGHT_case-6209,2011-04-22 01:06:40+00:00,General,2011-04-12 11:40:18.410000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-17662,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-24 14:38:52.058000+00:00 +Internet,RIGHT_case-6212,2011-04-22 00:00:00+00:00,General,2011-04-12 11:12:37.664000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-17492,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:05:59.222000+00:00 +Internet,RIGHT_case-6212,2011-04-22 00:00:00+00:00,General,2011-04-12 11:12:37.664000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-17495,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:06:25.612000+00:00 +Internet,RIGHT_case-6212,2011-04-22 00:00:00+00:00,General,2011-04-12 11:12:37.664000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-17701,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-24 15:11:36.223000+00:00 +Internet,RIGHT_case-6215,2011-04-22 00:00:00+00:00,General,2011-03-30 12:25:31.869000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource02,2011-02-25 00:00:00.010000+00:00,task-15043,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-03 11:12:41.283000+00:00 +Internet,RIGHT_case-6215,2011-04-22 00:00:00+00:00,General,2011-03-30 12:25:31.869000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource02,2011-02-25 00:00:00.010000+00:00,task-15065,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-03 11:38:16.399000+00:00 +Internet,RIGHT_case-6215,2011-04-22 00:00:00+00:00,General,2011-03-30 12:25:31.869000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource02,2011-02-25 00:00:00.010000+00:00,task-15143,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-03 15:37:11.339000+00:00 +Internet,RIGHT_case-6216,2011-06-10 01:06:40+00:00,General,2011-05-17 15:14:34.635000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-15305,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-03-07 10:49:30.883000+00:00 +Internet,RIGHT_case-6216,2011-06-10 01:06:40+00:00,General,2011-05-17 15:14:34.635000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-15308,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-03-07 10:49:53.771000+00:00 +Internet,RIGHT_case-6216,2011-06-10 01:06:40+00:00,General,2011-05-17 15:14:34.635000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource18,2011-02-10 01:06:40.010000+00:00,task-15309,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-03-07 10:50:20.585000+00:00 +Internet,RIGHT_case-6217,2011-04-22 00:00:00+00:00,General,2011-04-07 15:22:44.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource18,2011-02-25 00:00:00.010000+00:00,task-14952,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-03-02 11:42:33.735000+00:00 +Internet,RIGHT_case-6217,2011-04-22 00:00:00+00:00,General,2011-04-07 15:22:44.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource18,2011-02-25 00:00:00.010000+00:00,task-14956,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-03-02 11:43:29.430000+00:00 +Internet,RIGHT_case-6217,2011-04-22 00:00:00+00:00,General,2011-04-07 15:22:44.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource18,2011-02-25 00:00:00.010000+00:00,task-14955,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-02 14:34:26.793000+00:00 +Internet,RIGHT_case-6223,2011-04-22 00:00:00+00:00,General,2011-05-12 08:16:32.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-16449,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 14:03:23.387000+00:00 +Internet,RIGHT_case-6223,2011-04-22 00:00:00+00:00,General,2011-05-12 08:16:32.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-16452,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 14:03:46.748000+00:00 +Internet,RIGHT_case-6223,2011-04-22 00:00:00+00:00,General,2011-05-12 08:16:32.849000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource11,2011-02-25 00:00:00.010000+00:00,task-17724,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-24 15:25:52.932000+00:00 +Internet,RIGHT_case-6225,2011-04-22 01:06:40+00:00,General,2011-03-23 14:46:49.016000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource02,2011-02-25 01:06:40.010000+00:00,task-15170,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-04 09:26:57.519000+00:00 +Internet,RIGHT_case-6225,2011-04-22 01:06:40+00:00,General,2011-03-23 14:46:49.016000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource02,2011-02-25 01:06:40.010000+00:00,task-15175,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-04 10:23:59.137000+00:00 +Internet,RIGHT_case-6225,2011-04-22 01:06:40+00:00,General,2011-03-23 14:46:49.016000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource02,2011-02-25 01:06:40.010000+00:00,task-15189,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-04 10:47:18.269000+00:00 +Internet,RIGHT_case-6226,2011-04-23 00:00:00+00:00,General,2011-03-21 10:21:24.593000+00:00,2011-04-23 00:00:00.020000+00:00,,Resource15,2011-02-26 00:00:00.010000+00:00,task-14971,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-03-02 14:01:35.333000+00:00 +Internet,RIGHT_case-6226,2011-04-23 00:00:00+00:00,General,2011-03-21 10:21:24.593000+00:00,2011-04-23 00:00:00.020000+00:00,,Resource15,2011-02-26 00:00:00.010000+00:00,task-14969,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-03-04 13:41:19.887000+00:00 +Internet,RIGHT_case-6226,2011-04-23 00:00:00+00:00,General,2011-03-21 10:21:24.593000+00:00,2011-04-23 00:00:00.020000+00:00,,Resource15,2011-02-26 00:00:00.010000+00:00,task-15356,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-08 10:18:51.751000+00:00 +Internet,RIGHT_case-6234,2011-05-07 01:06:40+00:00,General,2011-05-02 12:54:01.947000+00:00,2011-05-07 01:06:40.020000+00:00,,Resource11,2011-02-27 01:06:40.010000+00:00,task-16457,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 14:16:13.777000+00:00 +Internet,RIGHT_case-6234,2011-05-07 01:06:40+00:00,General,2011-05-02 12:54:01.947000+00:00,2011-05-07 01:06:40.020000+00:00,,Resource11,2011-02-27 01:06:40.010000+00:00,task-16460,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 14:16:38.990000+00:00 +Internet,RIGHT_case-6234,2011-05-07 01:06:40+00:00,General,2011-05-02 12:54:01.947000+00:00,2011-05-07 01:06:40.020000+00:00,,Resource11,2011-02-27 01:06:40.010000+00:00,task-17739,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-24 15:50:41.199000+00:00 +Internet,RIGHT_case-6235,2011-04-21 01:06:40+00:00,General,2011-04-06 12:16:19.764000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource11,2011-02-24 01:06:40.010000+00:00,task-16443,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 13:56:59.438000+00:00 +Internet,RIGHT_case-6235,2011-04-21 01:06:40+00:00,General,2011-04-06 12:16:19.764000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource11,2011-02-24 01:06:40.010000+00:00,task-16447,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 13:57:29.338000+00:00 +Internet,RIGHT_case-6235,2011-04-21 01:06:40+00:00,General,2011-04-06 12:16:19.764000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource11,2011-02-24 01:06:40.010000+00:00,task-17641,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-24 14:28:33.868000+00:00 +Internet,RIGHT_case-6241,2011-04-20 01:06:40+00:00,General,2011-04-06 15:36:52.448000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-15036,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-03 10:58:34.565000+00:00 +Internet,RIGHT_case-6241,2011-04-20 01:06:40+00:00,General,2011-04-06 15:36:52.448000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-15039,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-03 10:59:00.964000+00:00 +Internet,RIGHT_case-6241,2011-04-20 01:06:40+00:00,General,2011-04-06 15:36:52.448000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-15117,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-03 13:53:00.532000+00:00 +Internet,RIGHT_case-6246,2011-06-07 01:06:40+00:00,General,2011-05-30 12:08:55.438000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-16514,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 09:26:54.360000+00:00 +Internet,RIGHT_case-6246,2011-06-07 01:06:40+00:00,General,2011-05-30 12:08:55.438000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-16517,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-17 09:41:25.875000+00:00 +Internet,RIGHT_case-6246,2011-06-07 01:06:40+00:00,General,2011-05-30 12:08:55.438000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-16524,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:33:15.523000+00:00 +Internet,RIGHT_case-6251,2011-04-20 01:06:40+00:00,General,2011-05-12 07:13:17.541000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-16433,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 13:36:22.182000+00:00 +Internet,RIGHT_case-6251,2011-04-20 01:06:40+00:00,General,2011-05-12 07:13:17.541000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-16436,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 13:36:45.288000+00:00 +Internet,RIGHT_case-6251,2011-04-20 01:06:40+00:00,General,2011-05-12 07:13:17.541000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource11,2011-02-23 01:06:40.010000+00:00,task-19036,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 12:44:35.544000+00:00 +Internet,RIGHT_case-6258,2011-04-27 01:06:40+00:00,General,2011-04-13 08:29:20.365000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource34,2011-03-02 01:06:40.010000+00:00,task-17496,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:10:46.206000+00:00 +Internet,RIGHT_case-6258,2011-04-27 01:06:40+00:00,General,2011-04-13 08:29:20.365000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource34,2011-03-02 01:06:40.010000+00:00,task-17499,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:11:13.928000+00:00 +Internet,RIGHT_case-6258,2011-04-27 01:06:40+00:00,General,2011-04-13 08:29:20.365000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource34,2011-03-02 01:06:40.010000+00:00,task-19058,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 13:44:02.489000+00:00 +Internet,RIGHT_case-6259,2011-04-27 01:06:40+00:00,General,2011-04-12 11:06:44.831000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-17506,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:30:34.747000+00:00 +Internet,RIGHT_case-6259,2011-04-27 01:06:40+00:00,General,2011-04-12 11:06:44.831000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-17509,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:31:01.829000+00:00 +Internet,RIGHT_case-6259,2011-04-27 01:06:40+00:00,General,2011-04-12 11:06:44.831000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-19077,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 13:54:59.656000+00:00 +Internet,RIGHT_case-6262,2011-04-27 01:06:40+00:00,General,2011-04-12 11:02:08.639000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-17510,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:40:05.412000+00:00 +Internet,RIGHT_case-6262,2011-04-27 01:06:40+00:00,General,2011-04-12 11:02:08.639000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-17513,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:40:43.992000+00:00 +Internet,RIGHT_case-6262,2011-04-27 01:06:40+00:00,General,2011-04-12 11:02:08.639000+00:00,2011-04-27 01:06:40.020000+00:00,,Resource11,2011-03-02 01:06:40.010000+00:00,task-19094,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 14:06:53.046000+00:00 +Internet,RIGHT_case-6279,2011-04-28 00:00:00+00:00,General,2011-08-18 08:44:13.497000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource21,2011-03-03 00:00:00.010000+00:00,task-15113,T02 Check confirmation of receipt,complete,EMPTY,Resource21,2011-03-09 12:12:41.369000+00:00 +Internet,RIGHT_case-6279,2011-04-28 00:00:00+00:00,General,2011-08-18 08:44:13.497000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource21,2011-03-03 00:00:00.010000+00:00,task-15632,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-10 10:28:48.972000+00:00 +Internet,RIGHT_case-6292,2011-04-12 00:00:00+00:00,General,2011-04-13 08:13:28.262000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-15792,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-10 13:09:02.368000+00:00 +Internet,RIGHT_case-6292,2011-04-12 00:00:00+00:00,General,2011-04-13 08:13:28.262000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-15795,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-10 13:09:47.074000+00:00 +Internet,RIGHT_case-6292,2011-04-12 00:00:00+00:00,General,2011-04-13 08:13:28.262000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource11,2011-02-15 00:00:00.010000+00:00,task-15796,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-10 13:10:16.539000+00:00 +Desk,RIGHT_case-6297,2011-05-25 01:06:40+00:00,General,2011-10-18 10:30:07.730000+00:00,2011-05-25 01:06:40.020000+00:00,Group 5,Resource02,2011-02-16 01:06:40.010000+00:00,task-15688,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-03-10 08:58:06.448000+00:00 +Desk,RIGHT_case-6297,2011-05-25 01:06:40+00:00,General,2011-10-18 10:30:07.730000+00:00,2011-05-25 01:06:40.020000+00:00,Group 5,Resource02,2011-02-16 01:06:40.010000+00:00,task-15686,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-03-14 12:39:41.602000+00:00 +Desk,RIGHT_case-6297,2011-05-25 01:06:40+00:00,General,2011-10-18 10:30:07.730000+00:00,2011-05-25 01:06:40.020000+00:00,Group 5,Resource02,2011-02-16 01:06:40.010000+00:00,task-16075,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-15 12:19:36.277000+00:00 +Internet,RIGHT_case-6315,2011-04-27 00:00:00+00:00,General,2011-04-26 08:42:34.517000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-16475,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 14:24:29.603000+00:00 +Internet,RIGHT_case-6315,2011-04-27 00:00:00+00:00,General,2011-04-26 08:42:34.517000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-16478,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 14:24:53.113000+00:00 +Internet,RIGHT_case-6315,2011-04-27 00:00:00+00:00,General,2011-04-26 08:42:34.517000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-19151,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 12:31:59.396000+00:00 +Internet,RIGHT_case-6315,2011-04-27 00:00:00+00:00,General,2011-04-26 08:42:34.517000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-21865,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-04-21 12:49:47.252000+00:00 +Internet,RIGHT_case-6315,2011-04-27 00:00:00+00:00,General,2011-04-26 08:42:34.517000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-21889,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-04-26 08:42:34.323000+00:00 +Internet,RIGHT_case-6317,2011-04-28 00:00:00+00:00,General,2011-04-12 10:52:22.399000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17515,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:45:47.165000+00:00 +Internet,RIGHT_case-6317,2011-04-28 00:00:00+00:00,General,2011-04-12 10:52:22.399000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17519,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:47:29.910000+00:00 +Internet,RIGHT_case-6317,2011-04-28 00:00:00+00:00,General,2011-04-12 10:52:22.399000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-19116,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 14:26:50.015000+00:00 +Internet,RIGHT_case-6319,2011-04-27 00:00:00+00:00,General,2011-03-09 11:40:43.035000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource04,2011-03-02 00:00:00.010000+00:00,task-15325,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-07 13:48:25.453000+00:00 +Internet,RIGHT_case-6319,2011-04-27 00:00:00+00:00,General,2011-03-09 11:40:43.035000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource04,2011-03-02 00:00:00.010000+00:00,task-15334,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-07 13:48:57.793000+00:00 +Internet,RIGHT_case-6319,2011-04-27 00:00:00+00:00,General,2011-03-09 11:40:43.035000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource04,2011-03-02 00:00:00.010000+00:00,task-15339,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-03-07 13:52:16.702000+00:00 +Internet,RIGHT_case-6319,2011-04-27 00:00:00+00:00,General,2011-03-09 11:40:43.035000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource04,2011-03-02 00:00:00.010000+00:00,task-15341,T12 Check document X request unlicensed,complete,Group 4,Resource04,2011-03-07 13:52:50.533000+00:00 +Internet,RIGHT_case-6319,2011-04-27 00:00:00+00:00,General,2011-03-09 11:40:43.035000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource04,2011-03-02 00:00:00.010000+00:00,task-15399,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-03-09 11:40:42.914000+00:00 +Internet,RIGHT_case-6320,2011-04-28 00:00:00+00:00,General,2011-04-26 08:43:45.444000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17523,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 10:20:41.494000+00:00 +Internet,RIGHT_case-6320,2011-04-28 00:00:00+00:00,General,2011-04-26 08:43:45.444000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17526,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 10:21:26.389000+00:00 +Internet,RIGHT_case-6320,2011-04-28 00:00:00+00:00,General,2011-04-26 08:43:45.444000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-19152,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 12:51:29.322000+00:00 +Internet,RIGHT_case-6320,2011-04-28 00:00:00+00:00,General,2011-04-26 08:43:45.444000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-21869,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-04-21 12:57:11.972000+00:00 +Internet,RIGHT_case-6320,2011-04-28 00:00:00+00:00,General,2011-04-26 08:43:45.444000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-21891,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-04-26 08:43:45.258000+00:00 +Internet,RIGHT_case-6322,2011-04-28 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17530,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 10:32:54.843000+00:00 +Internet,RIGHT_case-6322,2011-04-28 00:00:00+00:00,General,2011-03-24 00:00:00.010000+00:00,2011-04-28 00:00:00.020000+00:00,,Resource11,2011-03-03 00:00:00.010000+00:00,task-17535,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 10:33:35.802000+00:00 +Internet,RIGHT_case-6324,2011-04-29 00:00:00+00:00,General,2011-04-20 12:01:12.029000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource11,2011-03-04 00:00:00.010000+00:00,task-17536,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 10:38:58.057000+00:00 +Internet,RIGHT_case-6324,2011-04-29 00:00:00+00:00,General,2011-04-20 12:01:12.029000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource11,2011-03-04 00:00:00.010000+00:00,task-17539,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 10:39:28.422000+00:00 +Internet,RIGHT_case-6324,2011-04-29 00:00:00+00:00,General,2011-04-20 12:01:12.029000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource11,2011-03-04 00:00:00.010000+00:00,task-19207,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-06 09:32:44.172000+00:00 +Internet,RIGHT_case-6326,2011-06-23 01:06:40+00:00,General,2011-06-29 16:30:05.642000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-03-04 01:06:40.010000+00:00,task-15506,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-08 11:46:13.768000+00:00 +Internet,RIGHT_case-6326,2011-06-23 01:06:40+00:00,General,2011-06-29 16:30:05.642000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-03-04 01:06:40.010000+00:00,task-15509,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-03-08 11:46:43.116000+00:00 +Internet,RIGHT_case-6326,2011-06-23 01:06:40+00:00,General,2011-06-29 16:30:05.642000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-03-04 01:06:40.010000+00:00,task-15510,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-08 11:47:06.166000+00:00 +Internet,RIGHT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-17540,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 10:46:01.784000+00:00 +Internet,RIGHT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-17543,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 10:46:24.024000+00:00 +Internet,RIGHT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19232,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-06 10:07:15.367000+00:00 +Internet,RIGHT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19323,T17 Check report Y to stop indication,complete,Group 4,Resource11,2011-04-06 14:15:18.808000+00:00 +Internet,RIGHT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19325,T17 Check report Y to stop indication,complete,EMPTY,Resource11,2011-04-06 14:16:10.658000+00:00 +Internet,RIGHT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19327,T17 Check report Y to stop indication,complete,EMPTY,Resource11,2011-04-06 14:17:22.246000+00:00 +Internet,RIGHT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19329,T17 Check report Y to stop indication,complete,EMPTY,Resource11,2011-04-06 14:19:08.597000+00:00 +Internet,RIGHT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19331,T17 Check report Y to stop indication,complete,Group 4,Resource11,2011-04-06 14:19:39.722000+00:00 +Internet,RIGHT_case-6335,2011-04-03 00:00:00+00:00,General,2011-04-20 11:49:26.141000+00:00,2011-04-30 00:00:00.020000+00:00,,Resource11,2011-03-05 00:00:00.010000+00:00,task-19333,T20 Print report Y to stop indication,complete,Group 2,Resource11,2011-04-06 14:20:03.916000+00:00 +Internet,RIGHT_case-6339,2011-06-01 01:06:40+00:00,General,2011-06-20 15:22:26.262000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource15,2011-03-06 01:06:40.010000+00:00,task-15827,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-03-17 12:14:32.422000+00:00 +Internet,RIGHT_case-6339,2011-06-01 01:06:40+00:00,General,2011-06-20 15:22:26.262000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource15,2011-03-06 01:06:40.010000+00:00,task-16599,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:37:24.642000+00:00 +Internet,RIGHT_case-6339,2011-06-01 01:06:40+00:00,General,2011-06-20 15:22:26.262000+00:00,2011-06-01 01:06:40.020000+00:00,,Resource15,2011-03-06 01:06:40.010000+00:00,task-15829,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-03-25 11:58:30.646000+00:00 +Internet,RIGHT_case-6343,2011-05-01 00:00:00+00:00,General,2011-03-10 16:06:00.711000+00:00,2011-05-01 00:00:00.020000+00:00,,Resource02,2011-03-06 00:00:00.010000+00:00,task-15842,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-10 14:49:14.192000+00:00 +Internet,RIGHT_case-6343,2011-05-01 00:00:00+00:00,General,2011-03-10 16:06:00.711000+00:00,2011-05-01 00:00:00.020000+00:00,,Resource02,2011-03-06 00:00:00.010000+00:00,task-15846,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-10 14:49:38.955000+00:00 +Internet,RIGHT_case-6343,2011-05-01 00:00:00+00:00,General,2011-03-10 16:06:00.711000+00:00,2011-05-01 00:00:00.020000+00:00,,Resource02,2011-03-06 00:00:00.010000+00:00,task-15847,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-10 15:43:23.265000+00:00 +Internet,RIGHT_case-6343,2011-05-01 00:00:00+00:00,General,2011-03-10 16:06:00.711000+00:00,2011-05-01 00:00:00.020000+00:00,,Resource02,2011-03-06 00:00:00.010000+00:00,task-15857,T12 Check document X request unlicensed,complete,Group 4,Resource02,2011-03-10 16:05:17.629000+00:00 +Internet,RIGHT_case-6343,2011-05-01 00:00:00+00:00,General,2011-03-10 16:06:00.711000+00:00,2011-05-01 00:00:00.020000+00:00,,Resource02,2011-03-06 00:00:00.010000+00:00,task-15859,T15 Print document X request unlicensed,complete,Group 2,Resource02,2011-03-10 16:06:00.570000+00:00 +Internet,RIGHT_case-6345,2011-04-20 01:06:40+00:00,General,2011-03-29 10:21:56.682000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource05,2011-02-23 01:06:40.010000+00:00,task-16308,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-03-16 09:08:35.347000+00:00 +Internet,RIGHT_case-6345,2011-04-20 01:06:40+00:00,General,2011-03-29 10:21:56.682000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource05,2011-02-23 01:06:40.010000+00:00,task-16313,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-03-16 09:16:40.457000+00:00 +Internet,RIGHT_case-6345,2011-04-20 01:06:40+00:00,General,2011-03-29 10:21:56.682000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource05,2011-02-23 01:06:40.010000+00:00,task-16311,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-03-16 09:16:54.236000+00:00 +Internet,RIGHT_case-6347,2011-04-13 00:00:00+00:00,General,2011-04-12 11:45:11.374000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource04,2011-02-16 00:00:00.010000+00:00,task-15637,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-09 14:39:25.948000+00:00 +Internet,RIGHT_case-6347,2011-04-13 00:00:00+00:00,General,2011-04-12 11:45:11.374000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource04,2011-02-16 00:00:00.010000+00:00,task-15643,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-09 14:40:12.079000+00:00 +Internet,RIGHT_case-6347,2011-04-13 00:00:00+00:00,General,2011-04-12 11:45:11.374000+00:00,2011-04-13 00:00:00.020000+00:00,,Resource04,2011-02-16 00:00:00.010000+00:00,task-15652,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-10 10:32:54.331000+00:00 +Internet,RIGHT_case-6357,2011-04-28 01:06:40+00:00,General,2011-03-21 09:43:11.638000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource05,2011-03-03 01:06:40.010000+00:00,task-16386,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-03-16 10:31:54.708000+00:00 +Internet,RIGHT_case-6357,2011-04-28 01:06:40+00:00,General,2011-03-21 09:43:11.638000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource05,2011-03-03 01:06:40.010000+00:00,task-16389,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-03-16 10:32:21.537000+00:00 +Internet,RIGHT_case-6357,2011-04-28 01:06:40+00:00,General,2011-03-21 09:43:11.638000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource05,2011-03-03 01:06:40.010000+00:00,task-16391,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-03-16 10:32:56.078000+00:00 +Internet,RIGHT_case-6357,2011-04-28 01:06:40+00:00,General,2011-03-21 09:43:11.638000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource05,2011-03-03 01:06:40.010000+00:00,task-16558,T12 Check document X request unlicensed,complete,Group 4,Resource05,2011-03-17 10:42:36.840000+00:00 +Internet,RIGHT_case-6357,2011-04-28 01:06:40+00:00,General,2011-03-21 09:43:11.638000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource05,2011-03-03 01:06:40.010000+00:00,task-16560,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-03-21 09:43:11.402000+00:00 +Internet,RIGHT_case-6363,2011-04-15 01:06:40+00:00,General,2011-04-12 12:06:58.622000+00:00,2011-04-15 01:06:40.020000+00:00,,Resource11,2011-02-18 01:06:40.010000+00:00,task-16361,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 10:22:57.399000+00:00 +Internet,RIGHT_case-6363,2011-04-15 01:06:40+00:00,General,2011-04-12 12:06:58.622000+00:00,2011-04-15 01:06:40.020000+00:00,,Resource11,2011-02-18 01:06:40.010000+00:00,task-16365,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 10:23:21.717000+00:00 +Internet,RIGHT_case-6363,2011-04-15 01:06:40+00:00,General,2011-04-12 12:06:58.622000+00:00,2011-04-15 01:06:40.020000+00:00,,Resource11,2011-02-18 01:06:40.010000+00:00,task-16384,T10 Determine necessity to stop indication,complete,EMPTY,Resource11,2011-03-21 12:29:43.708000+00:00 +Internet,RIGHT_case-6366,2011-06-13 01:06:40+00:00,General,2011-05-31 11:21:14.607000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource04,2011-02-22 01:06:40.010000+00:00,task-16251,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-15 16:56:37.928000+00:00 +Internet,RIGHT_case-6366,2011-06-13 01:06:40+00:00,General,2011-05-31 11:21:14.607000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource04,2011-02-22 01:06:40.010000+00:00,task-16254,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-03-15 16:56:58.501000+00:00 +Internet,RIGHT_case-6366,2011-06-13 01:06:40+00:00,General,2011-05-31 11:21:14.607000+00:00,2011-06-13 01:06:40.020000+00:00,,Resource04,2011-02-22 01:06:40.010000+00:00,task-16255,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-15 16:57:19.351000+00:00 +Internet,RIGHT_case-6374,2011-05-03 00:00:00+00:00,General,2011-08-19 09:01:30.370000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource12,2011-03-08 00:00:00.010000+00:00,task-16099,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-03-17 12:03:49.811000+00:00 +Internet,RIGHT_case-6374,2011-05-03 00:00:00+00:00,General,2011-08-19 09:01:30.370000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource12,2011-03-08 00:00:00.010000+00:00,task-16608,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:35:59.306000+00:00 +Internet,RIGHT_case-6374,2011-05-03 00:00:00+00:00,General,2011-08-19 09:01:30.370000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource12,2011-03-08 00:00:00.010000+00:00,task-25691,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource12,2011-05-19 11:58:49.377000+00:00 +Internet,RIGHT_case-6374,2011-05-03 00:00:00+00:00,General,2011-08-19 09:01:30.370000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource12,2011-03-08 00:00:00.010000+00:00,task-25706,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-19 12:02:39.725000+00:00 +Internet,RIGHT_case-6375,2011-05-03 00:00:00+00:00,General,2011-04-27 11:17:53.563000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource14,2011-03-08 00:00:00.010000+00:00,task-17029,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-03-21 13:40:34.104000+00:00 +Internet,RIGHT_case-6375,2011-05-03 00:00:00+00:00,General,2011-04-27 11:17:53.563000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource14,2011-03-08 00:00:00.010000+00:00,task-17026,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-03-21 20:44:42.411000+00:00 +Internet,RIGHT_case-6375,2011-05-03 00:00:00+00:00,General,2011-04-27 11:17:53.563000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource14,2011-03-08 00:00:00.010000+00:00,task-17098,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-22 14:38:15.659000+00:00 +Internet,RIGHT_case-6378,2011-07-01 01:06:40+00:00,General,2011-06-16 13:55:21.953000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource02,2011-03-09 01:06:40.010000+00:00,task-15946,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-11 14:58:54.590000+00:00 +Internet,RIGHT_case-6378,2011-07-01 01:06:40+00:00,General,2011-06-16 13:55:21.953000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource02,2011-03-09 01:06:40.010000+00:00,task-15951,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-11 16:08:00.730000+00:00 +Internet,RIGHT_case-6378,2011-07-01 01:06:40+00:00,General,2011-06-16 13:55:21.953000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource02,2011-03-09 01:06:40.010000+00:00,task-15949,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-14 11:55:06.135000+00:00 +Internet,RIGHT_case-6379,2011-05-11 01:06:40+00:00,General,2011-05-09 16:26:24.721000+00:00,2011-05-11 01:06:40.020000+00:00,,Resource04,2011-03-09 01:06:40.010000+00:00,task-17656,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-24 14:37:15.241000+00:00 +Internet,RIGHT_case-6379,2011-05-11 01:06:40+00:00,General,2011-05-09 16:26:24.721000+00:00,2011-05-11 01:06:40.020000+00:00,,Resource04,2011-03-09 01:06:40.010000+00:00,task-17661,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-24 14:38:13.163000+00:00 +Internet,RIGHT_case-6379,2011-05-11 01:06:40+00:00,General,2011-05-09 16:26:24.721000+00:00,2011-05-11 01:06:40.020000+00:00,,Resource04,2011-03-09 01:06:40.010000+00:00,task-21725,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-04-21 10:46:03.309000+00:00 +Internet,RIGHT_case-6380,2011-05-04 00:00:00+00:00,General,2011-04-20 11:24:44.730000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-17547,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 10:59:29.369000+00:00 +Internet,RIGHT_case-6380,2011-05-04 00:00:00+00:00,General,2011-04-20 11:24:44.730000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-17550,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 10:59:56.259000+00:00 +Internet,RIGHT_case-6380,2011-05-04 00:00:00+00:00,General,2011-04-20 11:24:44.730000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-19251,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-06 10:51:31.112000+00:00 +Internet,RIGHT_case-6381,2011-05-04 00:00:00+00:00,General,2011-04-18 08:15:41.589000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-17552,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:05:08.650000+00:00 +Internet,RIGHT_case-6381,2011-05-04 00:00:00+00:00,General,2011-04-18 08:15:41.589000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-17555,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:05:36.595000+00:00 +Internet,RIGHT_case-6381,2011-05-04 00:00:00+00:00,General,2011-04-18 08:15:41.589000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-19263,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-06 11:07:30.730000+00:00 +Internet,RIGHT_case-6382,2011-05-04 00:00:00+00:00,General,2011-04-20 11:15:03.092000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-18090,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:45:08.624000+00:00 +Internet,RIGHT_case-6382,2011-05-04 00:00:00+00:00,General,2011-04-20 11:15:03.092000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-18700,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 14:04:42.968000+00:00 +Internet,RIGHT_case-6382,2011-05-04 00:00:00+00:00,General,2011-04-20 11:15:03.092000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource11,2011-03-09 00:00:00.010000+00:00,task-20196,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-13 10:09:16.841000+00:00 +Internet,RIGHT_case-6383,2011-05-04 00:00:00+00:00,General,2011-05-03 11:47:54.952000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource05,2011-03-09 00:00:00.010000+00:00,task-17344,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-03-23 10:31:34.644000+00:00 +Internet,RIGHT_case-6383,2011-05-04 00:00:00+00:00,General,2011-05-03 11:47:54.952000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource05,2011-03-09 00:00:00.010000+00:00,task-17347,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-03-23 10:33:11.659000+00:00 +Internet,RIGHT_case-6383,2011-05-04 00:00:00+00:00,General,2011-05-03 11:47:54.952000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource05,2011-03-09 00:00:00.010000+00:00,task-17348,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-03-23 10:34:26.734000+00:00 +Internet,RIGHT_case-6385,2011-05-04 00:00:00+00:00,General,2011-04-21 08:58:31.264000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource08,2011-03-09 00:00:00.010000+00:00,task-16562,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 10:58:39.813000+00:00 +Internet,RIGHT_case-6385,2011-05-04 00:00:00+00:00,General,2011-04-21 08:58:31.264000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource08,2011-03-09 00:00:00.010000+00:00,task-16570,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-17 11:07:13.804000+00:00 +Internet,RIGHT_case-6385,2011-05-04 00:00:00+00:00,General,2011-04-21 08:58:31.264000+00:00,2011-05-04 00:00:00.020000+00:00,,Resource08,2011-03-09 00:00:00.010000+00:00,task-16571,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:34:15.740000+00:00 +Internet,RIGHT_case-6386,2011-05-17 01:06:40+00:00,General,2011-04-21 13:54:07.106000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource02,2011-02-22 01:06:40.010000+00:00,task-16674,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-18 08:08:53.922000+00:00 +Internet,RIGHT_case-6386,2011-05-17 01:06:40+00:00,General,2011-04-21 13:54:07.106000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource02,2011-02-22 01:06:40.010000+00:00,task-16677,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-18 08:09:28.300000+00:00 +Internet,RIGHT_case-6386,2011-05-17 01:06:40+00:00,General,2011-04-21 13:54:07.106000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource02,2011-02-22 01:06:40.010000+00:00,task-16678,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-18 08:24:46.877000+00:00 +Internet,RIGHT_case-6387,2011-05-05 00:00:00+00:00,General,2011-04-01 14:54:09.591000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource17,2011-03-10 00:00:00.010000+00:00,task-17044,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-21 14:06:17.497000+00:00 +Internet,RIGHT_case-6387,2011-05-05 00:00:00+00:00,General,2011-04-01 14:54:09.591000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource17,2011-03-10 00:00:00.010000+00:00,task-17042,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-21 14:08:33.727000+00:00 +Internet,RIGHT_case-6387,2011-05-05 00:00:00+00:00,General,2011-04-01 14:54:09.591000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource17,2011-03-10 00:00:00.010000+00:00,task-17095,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-22 14:32:30.460000+00:00 +Internet,RIGHT_case-6388,2011-04-22 01:06:40+00:00,General,2011-04-20 10:57:13.852000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-16453,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 14:06:37.599000+00:00 +Internet,RIGHT_case-6388,2011-04-22 01:06:40+00:00,General,2011-04-20 10:57:13.852000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-16456,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 14:06:58.922000+00:00 +Internet,RIGHT_case-6388,2011-04-22 01:06:40+00:00,General,2011-04-20 10:57:13.852000+00:00,2011-04-22 01:06:40.020000+00:00,,Resource11,2011-02-25 01:06:40.010000+00:00,task-19188,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-06 08:05:54.931000+00:00 +Internet,RIGHT_case-6389,2011-05-05 00:00:00+00:00,General,2011-05-02 08:36:22.633000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17556,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:20:40.323000+00:00 +Internet,RIGHT_case-6389,2011-05-05 00:00:00+00:00,General,2011-05-02 08:36:22.633000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17559,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:21:24.209000+00:00 +Internet,RIGHT_case-6389,2011-05-05 00:00:00+00:00,General,2011-05-02 08:36:22.633000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-19410,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-07 08:13:00.841000+00:00 +Internet,RIGHT_case-6390,2011-05-05 00:00:00+00:00,General,2011-04-18 08:08:51.714000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17560,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:27:49.645000+00:00 +Internet,RIGHT_case-6390,2011-05-05 00:00:00+00:00,General,2011-04-18 08:08:51.714000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17563,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:28:28.565000+00:00 +Internet,RIGHT_case-6390,2011-05-05 00:00:00+00:00,General,2011-04-18 08:08:51.714000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-19428,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-07 09:07:24.415000+00:00 +Internet,RIGHT_case-6391,2011-06-06 01:06:40+00:00,General,2011-04-21 17:10:22.871000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-17053,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-21 14:25:41.095000+00:00 +Internet,RIGHT_case-6391,2011-06-06 01:06:40+00:00,General,2011-04-21 17:10:22.871000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-17056,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-21 14:26:20.207000+00:00 +Internet,RIGHT_case-6391,2011-06-06 01:06:40+00:00,General,2011-04-21 17:10:22.871000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-17096,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-22 14:31:31.051000+00:00 +Internet,RIGHT_case-6407,2011-05-05 00:00:00+00:00,General,2011-04-26 09:22:50.149000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17564,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:35:31.024000+00:00 +Internet,RIGHT_case-6407,2011-05-05 00:00:00+00:00,General,2011-04-26 09:22:50.149000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-17567,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:36:02.403000+00:00 +Internet,RIGHT_case-6407,2011-05-05 00:00:00+00:00,General,2011-04-26 09:22:50.149000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-19441,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-07 09:30:29.975000+00:00 +Internet,RIGHT_case-6411,2011-06-30 01:06:40+00:00,General,2011-06-30 12:17:32.708000+00:00,2011-06-30 01:06:40.020000+00:00,,Resource18,2011-03-11 01:06:40.010000+00:00,task-16103,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-03-14 16:08:01.736000+00:00 +Internet,RIGHT_case-6411,2011-06-30 01:06:40+00:00,General,2011-06-30 12:17:32.708000+00:00,2011-06-30 01:06:40.020000+00:00,,Resource18,2011-03-11 01:06:40.010000+00:00,task-16113,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-15 12:28:48.641000+00:00 +Internet,RIGHT_case-6411,2011-06-30 01:06:40+00:00,General,2011-06-30 12:17:32.708000+00:00,2011-06-30 01:06:40.020000+00:00,,Resource18,2011-03-11 01:06:40.010000+00:00,task-17285,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-03-22 15:55:06.747000+00:00 +Internet,RIGHT_case-6413,2011-05-06 01:06:40+00:00,General,2011-05-04 16:12:17.687000+00:00,2011-05-06 01:06:40.020000+00:00,,Resource08,2011-03-11 01:06:40.010000+00:00,task-16653,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-17 15:46:05.292000+00:00 +Internet,RIGHT_case-6413,2011-05-06 01:06:40+00:00,General,2011-05-04 16:12:17.687000+00:00,2011-05-06 01:06:40.020000+00:00,,Resource08,2011-03-11 01:06:40.010000+00:00,task-16658,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:40:02.917000+00:00 +Internet,RIGHT_case-6413,2011-05-06 01:06:40+00:00,General,2011-05-04 16:12:17.687000+00:00,2011-05-06 01:06:40.020000+00:00,,Resource08,2011-03-11 01:06:40.010000+00:00,task-17208,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-22 14:16:43.502000+00:00 +Internet,RIGHT_case-6413,2011-05-06 01:06:40+00:00,General,2011-05-04 16:12:17.687000+00:00,2011-05-06 01:06:40.020000+00:00,,Resource08,2011-03-11 01:06:40.010000+00:00,task-17214,T17 Check report Y to stop indication,complete,Group 4,Resource08,2011-03-22 14:18:20.530000+00:00 +Internet,RIGHT_case-6413,2011-05-06 01:06:40+00:00,General,2011-05-04 16:12:17.687000+00:00,2011-05-06 01:06:40.020000+00:00,,Resource08,2011-03-11 01:06:40.010000+00:00,task-17219,T20 Print report Y to stop indication,complete,Group 2,Resource08,2011-03-22 14:19:25.420000+00:00 +Desk,RIGHT_case-6415,2011-04-26 01:06:40+00:00,General,2011-04-21 15:00:04.459000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-16584,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-17 11:26:43.687000+00:00 +Desk,RIGHT_case-6415,2011-04-26 01:06:40+00:00,General,2011-04-21 15:00:04.459000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-16590,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-17 11:39:32.291000+00:00 +Desk,RIGHT_case-6415,2011-04-26 01:06:40+00:00,General,2011-04-21 15:00:04.459000+00:00,2011-04-26 01:06:40.020000+00:00,,Resource08,2011-03-01 01:06:40.010000+00:00,task-16602,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:38:42.068000+00:00 +Desk,RIGHT_case-6417,2011-04-26 00:00:00+00:00,General,2011-04-26 10:55:15.989000+00:00,2011-04-26 00:00:00.020000+00:00,,Resource17,2011-03-01 00:00:00.010000+00:00,task-16461,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-16 14:17:18.680000+00:00 +Desk,RIGHT_case-6417,2011-04-26 00:00:00+00:00,General,2011-04-26 10:55:15.989000+00:00,2011-04-26 00:00:00.020000+00:00,,Resource17,2011-03-01 00:00:00.010000+00:00,task-16464,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-16 14:18:17.781000+00:00 +Desk,RIGHT_case-6417,2011-04-26 00:00:00+00:00,General,2011-04-26 10:55:15.989000+00:00,2011-04-26 00:00:00.020000+00:00,,Resource17,2011-03-01 00:00:00.010000+00:00,task-16502,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-17 09:02:02.106000+00:00 +Internet,RIGHT_case-6437,2011-05-09 00:00:00+00:00,General,2011-08-18 08:45:49.181000+00:00,2011-05-09 00:00:00.020000+00:00,,Resource21,2011-03-14 00:00:00.010000+00:00,task-16037,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-08-18 08:45:50.819000+00:00 +Internet,RIGHT_case-6438,2011-05-08 00:00:00+00:00,General,2011-05-04 16:15:12.118000+00:00,2011-05-08 00:00:00.020000+00:00,,Resource13,2011-03-13 00:00:00.010000+00:00,task-16160,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-03-15 12:31:00.695000+00:00 +Internet,RIGHT_case-6438,2011-05-08 00:00:00+00:00,General,2011-05-04 16:15:12.118000+00:00,2011-05-08 00:00:00.020000+00:00,,Resource13,2011-03-13 00:00:00.010000+00:00,task-16171,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-03-15 12:46:08.529000+00:00 +Internet,RIGHT_case-6438,2011-05-08 00:00:00+00:00,General,2011-05-04 16:15:12.118000+00:00,2011-05-08 00:00:00.020000+00:00,,Resource13,2011-03-13 00:00:00.010000+00:00,task-16181,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-15 14:35:28.026000+00:00 +Internet,RIGHT_case-6459,2011-04-24 00:00:00+00:00,General,2011-04-21 14:24:59.920000+00:00,2011-04-24 00:00:00.020000+00:00,,Resource17,2011-02-27 00:00:00.010000+00:00,task-17189,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-22 12:20:01.063000+00:00 +Internet,RIGHT_case-6459,2011-04-24 00:00:00+00:00,General,2011-04-21 14:24:59.920000+00:00,2011-04-24 00:00:00.020000+00:00,,Resource17,2011-02-27 00:00:00.010000+00:00,task-17192,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-22 12:21:29.741000+00:00 +Internet,RIGHT_case-6459,2011-04-24 00:00:00+00:00,General,2011-04-21 14:24:59.920000+00:00,2011-04-24 00:00:00.020000+00:00,,Resource17,2011-02-27 00:00:00.010000+00:00,task-17334,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-23 16:17:52.460000+00:00 +Internet,RIGHT_case-6471,2011-05-10 01:06:40+00:00,General,2011-05-11 13:43:32.245000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource11,2011-03-15 01:06:40.010000+00:00,task-17569,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:47:36.063000+00:00 +Internet,RIGHT_case-6471,2011-05-10 01:06:40+00:00,General,2011-05-11 13:43:32.245000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource11,2011-03-15 01:06:40.010000+00:00,task-17572,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:48:40.414000+00:00 +Internet,RIGHT_case-6471,2011-05-10 01:06:40+00:00,General,2011-05-11 13:43:32.245000+00:00,2011-05-10 01:06:40.020000+00:00,,Resource11,2011-03-15 01:06:40.010000+00:00,task-19461,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-07 09:55:39.064000+00:00 +Internet,RIGHT_case-6475,2011-05-10 00:00:00+00:00,General,2011-04-18 08:00:57.296000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-17573,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:53:42.669000+00:00 +Internet,RIGHT_case-6475,2011-05-10 00:00:00+00:00,General,2011-04-18 08:00:57.296000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-17576,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:54:13.421000+00:00 +Internet,RIGHT_case-6475,2011-05-10 00:00:00+00:00,General,2011-04-18 08:00:57.296000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-19522,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-07 13:03:02.315000+00:00 +Internet,RIGHT_case-6480,2011-05-10 00:00:00+00:00,General,2011-05-02 11:28:13.405000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-17588,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 13:10:40.834000+00:00 +Internet,RIGHT_case-6480,2011-05-10 00:00:00+00:00,General,2011-05-02 11:28:13.405000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-17594,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 13:11:11.821000+00:00 +Internet,RIGHT_case-6480,2011-05-10 00:00:00+00:00,General,2011-05-02 11:28:13.405000+00:00,2011-05-10 00:00:00.020000+00:00,,Resource11,2011-03-15 00:00:00.010000+00:00,task-20154,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-13 14:13:33.642000+00:00 +Internet,RIGHT_case-6495,2011-05-11 00:00:00+00:00,General,2011-03-31 15:24:59.444000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource02,2011-03-16 00:00:00.010000+00:00,task-16821,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-18 12:03:02.647000+00:00 +Internet,RIGHT_case-6495,2011-05-11 00:00:00+00:00,General,2011-03-31 15:24:59.444000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource02,2011-03-16 00:00:00.010000+00:00,task-16826,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-18 12:04:56.795000+00:00 +Internet,RIGHT_case-6495,2011-05-11 00:00:00+00:00,General,2011-03-31 15:24:59.444000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource02,2011-03-16 00:00:00.010000+00:00,task-16824,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-18 12:05:13.734000+00:00 +Internet,RIGHT_case-6496,2011-05-11 00:00:00+00:00,General,2011-04-07 10:39:01.540000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource05,2011-03-16 00:00:00.010000+00:00,task-17638,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-03-24 14:20:48.034000+00:00 +Internet,RIGHT_case-6496,2011-05-11 00:00:00+00:00,General,2011-04-07 10:39:01.540000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource05,2011-03-16 00:00:00.010000+00:00,task-17999,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-03-28 10:44:07.141000+00:00 +Internet,RIGHT_case-6496,2011-05-11 00:00:00+00:00,General,2011-04-07 10:39:01.540000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource05,2011-03-16 00:00:00.010000+00:00,task-17998,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-03-28 10:44:25.200000+00:00 +Internet,RIGHT_case-6498,2011-06-22 01:06:40+00:00,General,2011-06-27 08:56:56.974000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource08,2011-03-16 01:06:40.010000+00:00,task-17612,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-24 13:43:13.769000+00:00 +Internet,RIGHT_case-6498,2011-06-22 01:06:40+00:00,General,2011-06-27 08:56:56.974000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource08,2011-03-16 01:06:40.010000+00:00,task-17624,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-24 14:13:34.978000+00:00 +Internet,RIGHT_case-6498,2011-06-22 01:06:40+00:00,General,2011-06-27 08:56:56.974000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource08,2011-03-16 01:06:40.010000+00:00,task-17621,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-24 14:44:46.861000+00:00 +Desk,RIGHT_case-6504,2011-05-04 01:06:40+00:00,General,2011-04-29 09:44:59.052000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource06,2011-03-09 01:06:40.010000+00:00,task-17322,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-23 09:53:12.969000+00:00 +Desk,RIGHT_case-6504,2011-05-04 01:06:40+00:00,General,2011-04-29 09:44:59.052000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource06,2011-03-09 01:06:40.010000+00:00,task-17325,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-23 09:54:16.067000+00:00 +Desk,RIGHT_case-6504,2011-05-04 01:06:40+00:00,General,2011-04-29 09:44:59.052000+00:00,2011-05-04 01:06:40.020000+00:00,,Resource06,2011-03-09 01:06:40.010000+00:00,task-17332,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-23 16:14:39.678000+00:00 +Internet,RIGHT_case-6512,2011-05-11 00:00:00+00:00,General,2011-03-24 14:33:41.874000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource06,2011-03-16 00:00:00.010000+00:00,task-17399,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-23 14:34:16.761000+00:00 +Internet,RIGHT_case-6512,2011-05-11 00:00:00+00:00,General,2011-03-24 14:33:41.874000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource06,2011-03-16 00:00:00.010000+00:00,task-17402,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-03-23 14:34:39.081000+00:00 +Internet,RIGHT_case-6512,2011-05-11 00:00:00+00:00,General,2011-03-24 14:33:41.874000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource06,2011-03-16 00:00:00.010000+00:00,task-17403,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-23 14:35:31.122000+00:00 +Internet,RIGHT_case-6512,2011-05-11 00:00:00+00:00,General,2011-03-24 14:33:41.874000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource06,2011-03-16 00:00:00.010000+00:00,task-17408,T12 Check document X request unlicensed,complete,Group 4,Resource06,2011-03-23 14:44:27.756000+00:00 +Internet,RIGHT_case-6512,2011-05-11 00:00:00+00:00,General,2011-03-24 14:33:41.874000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource06,2011-03-16 00:00:00.010000+00:00,task-17455,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-03-24 14:33:41.749000+00:00 +Internet,RIGHT_case-6515,2011-04-22 00:00:00+00:00,General,2011-03-18 15:06:58.511000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16713,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-18 09:41:01.981000+00:00 +Internet,RIGHT_case-6515,2011-04-22 00:00:00+00:00,General,2011-03-18 15:06:58.511000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16716,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-03-18 09:41:21.216000+00:00 +Internet,RIGHT_case-6515,2011-04-22 00:00:00+00:00,General,2011-03-18 15:06:58.511000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16717,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-18 09:41:51.715000+00:00 +Internet,RIGHT_case-6516,2011-06-21 01:06:40+00:00,General,2011-06-01 11:48:48.133000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource18,2011-03-16 01:06:40.010000+00:00,task-17282,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-03-22 15:36:47.603000+00:00 +Internet,RIGHT_case-6516,2011-06-21 01:06:40+00:00,General,2011-06-01 11:48:48.133000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource18,2011-03-16 01:06:40.010000+00:00,task-17290,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-23 16:13:18.819000+00:00 +Internet,RIGHT_case-6516,2011-06-21 01:06:40+00:00,General,2011-06-01 11:48:48.133000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource18,2011-03-16 01:06:40.010000+00:00,task-19415,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-04-07 08:20:15.160000+00:00 +Internet,RIGHT_case-6517,2011-04-22 00:00:00+00:00,General,2011-03-18 15:44:27.843000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16769,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-18 11:02:32.330000+00:00 +Internet,RIGHT_case-6517,2011-04-22 00:00:00+00:00,General,2011-03-18 15:44:27.843000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16772,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-03-18 11:02:56.961000+00:00 +Internet,RIGHT_case-6517,2011-04-22 00:00:00+00:00,General,2011-03-18 15:44:27.843000+00:00,2011-04-22 00:00:00.020000+00:00,,Resource04,2011-02-25 00:00:00.010000+00:00,task-16773,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-18 11:03:25.333000+00:00 +Internet,RIGHT_case-6537,2011-05-09 00:00:00+00:00,General,2011-05-10 12:24:24.005000+00:00,2011-05-09 00:00:00.020000+00:00,,admin1,2011-03-14 00:00:00.010000+00:00,task-16807,T02 Check confirmation of receipt,complete,EMPTY,Resource25,2011-03-18 11:47:58.309000+00:00 +Internet,RIGHT_case-6537,2011-05-09 00:00:00+00:00,General,2011-05-10 12:24:24.005000+00:00,2011-05-09 00:00:00.020000+00:00,,admin1,2011-03-14 00:00:00.010000+00:00,task-16812,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2011-03-18 11:53:41.940000+00:00 +Internet,RIGHT_case-6537,2011-05-09 00:00:00+00:00,General,2011-05-10 12:24:24.005000+00:00,2011-05-09 00:00:00.020000+00:00,,admin1,2011-03-14 00:00:00.010000+00:00,task-16836,T05 Print and send confirmation of receipt,complete,EMPTY,Resource25,2011-03-18 14:45:58.581000+00:00 +Internet,RIGHT_case-6540,2011-05-02 01:06:40+00:00,General,2011-04-19 11:59:28.010000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource02,2011-03-07 01:06:40.010000+00:00,task-17794,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-25 09:51:20.204000+00:00 +Internet,RIGHT_case-6540,2011-05-02 01:06:40+00:00,General,2011-04-19 11:59:28.010000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource02,2011-03-07 01:06:40.010000+00:00,task-17797,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-25 09:53:04.506000+00:00 +Internet,RIGHT_case-6540,2011-05-02 01:06:40+00:00,General,2011-04-19 11:59:28.010000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource02,2011-03-07 01:06:40.010000+00:00,task-17798,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-25 09:56:13.884000+00:00 +Desk,RIGHT_case-6541,2011-04-20 01:06:40+00:00,General,2011-05-09 16:33:35.631000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource14,2011-02-23 01:06:40.010000+00:00,task-18274,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-03-29 14:23:17.916000+00:00 +Desk,RIGHT_case-6541,2011-04-20 01:06:40+00:00,General,2011-05-09 16:33:35.631000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource14,2011-02-23 01:06:40.010000+00:00,task-18293,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-03-29 14:41:33.113000+00:00 +Desk,RIGHT_case-6541,2011-04-20 01:06:40+00:00,General,2011-05-09 16:33:35.631000+00:00,2011-04-20 01:06:40.020000+00:00,,Resource14,2011-02-23 01:06:40.010000+00:00,task-23299,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-03 08:38:30.728000+00:00 +Desk,RIGHT_case-6542,2011-05-11 00:00:00+00:00,General,2011-05-03 07:05:55.556000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-17595,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 13:17:27.079000+00:00 +Desk,RIGHT_case-6542,2011-05-11 00:00:00+00:00,General,2011-05-03 07:05:55.556000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-17598,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 13:18:15.340000+00:00 +Desk,RIGHT_case-6542,2011-05-11 00:00:00+00:00,General,2011-05-03 07:05:55.556000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-20307,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-13 14:31:45.074000+00:00 +Post,RIGHT_case-6544,2011-05-12 00:00:00+00:00,General,2011-05-03 07:17:38.353000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-17599,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 13:30:47.152000+00:00 +Post,RIGHT_case-6544,2011-05-12 00:00:00+00:00,General,2011-05-03 07:17:38.353000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-17602,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 13:34:04.563000+00:00 +Post,RIGHT_case-6544,2011-05-12 00:00:00+00:00,General,2011-05-03 07:17:38.353000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-20456,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 11:23:15.448000+00:00 +Desk,RIGHT_case-6545,2011-05-12 00:00:00+00:00,General,2011-03-30 12:29:45.678000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource06,2011-03-17 00:00:00.010000+00:00,task-17421,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-23 15:34:44.560000+00:00 +Desk,RIGHT_case-6545,2011-05-12 00:00:00+00:00,General,2011-03-30 12:29:45.678000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource06,2011-03-17 00:00:00.010000+00:00,task-17424,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-03-23 15:35:06.274000+00:00 +Desk,RIGHT_case-6545,2011-05-12 00:00:00+00:00,General,2011-03-30 12:29:45.678000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource06,2011-03-17 00:00:00.010000+00:00,task-17425,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-23 15:35:31.546000+00:00 +Internet,RIGHT_case-6585,2011-05-12 00:00:00+00:00,General,2011-05-02 15:08:33.826000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-17603,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 13:37:38.231000+00:00 +Internet,RIGHT_case-6585,2011-05-12 00:00:00+00:00,General,2011-05-02 15:08:33.826000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-17606,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 13:38:07.839000+00:00 +Internet,RIGHT_case-6585,2011-05-12 00:00:00+00:00,General,2011-05-02 15:08:33.826000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource11,2011-03-17 00:00:00.010000+00:00,task-20472,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 11:32:18.890000+00:00 +Internet,RIGHT_case-6606,2011-05-16 01:06:40+00:00,General,2011-04-28 10:45:13.017000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource08,2011-03-21 01:06:40.010000+00:00,task-17396,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-23 14:40:38.067000+00:00 +Internet,RIGHT_case-6606,2011-05-16 01:06:40+00:00,General,2011-04-28 10:45:13.017000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource08,2011-03-21 01:06:40.010000+00:00,task-17407,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-23 14:49:38.630000+00:00 +Internet,RIGHT_case-6606,2011-05-16 01:06:40+00:00,General,2011-04-28 10:45:13.017000+00:00,2011-05-16 01:06:40.020000+00:00,,Resource08,2011-03-21 01:06:40.010000+00:00,task-17470,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-24 14:37:52.725000+00:00 +Internet,RIGHT_case-6607,2011-05-21 01:06:40+00:00,General,2011-05-23 15:03:05.403000+00:00,2011-05-21 01:06:40.020000+00:00,,Resource06,2011-03-20 01:06:40.010000+00:00,task-18420,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-30 10:53:12.829000+00:00 +Internet,RIGHT_case-6607,2011-05-21 01:06:40+00:00,General,2011-05-23 15:03:05.403000+00:00,2011-05-21 01:06:40.020000+00:00,,Resource06,2011-03-20 01:06:40.010000+00:00,task-18423,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-30 10:53:41.794000+00:00 +Internet,RIGHT_case-6607,2011-05-21 01:06:40+00:00,General,2011-05-23 15:03:05.403000+00:00,2011-05-21 01:06:40.020000+00:00,,Resource06,2011-03-20 01:06:40.010000+00:00,task-18462,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:06:40.828000+00:00 +Internet,RIGHT_case-6610,2011-05-15 00:00:00+00:00,General,2011-05-03 07:20:58.757000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource11,2011-03-20 00:00:00.010000+00:00,task-17608,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 13:42:27.947000+00:00 +Internet,RIGHT_case-6610,2011-05-15 00:00:00+00:00,General,2011-05-03 07:20:58.757000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource11,2011-03-20 00:00:00.010000+00:00,task-17611,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 13:42:54.223000+00:00 +Internet,RIGHT_case-6610,2011-05-15 00:00:00+00:00,General,2011-05-03 07:20:58.757000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource11,2011-03-20 00:00:00.010000+00:00,task-20490,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 11:42:48.954000+00:00 +Internet,RIGHT_case-6612,2011-05-17 01:06:40+00:00,General,2011-05-12 14:00:01.208000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource08,2011-03-22 01:06:40.010000+00:00,task-17364,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-23 11:26:24.171000+00:00 +Internet,RIGHT_case-6612,2011-05-17 01:06:40+00:00,General,2011-05-12 14:00:01.208000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource08,2011-03-22 01:06:40.010000+00:00,task-17370,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-23 11:42:49.961000+00:00 +Internet,RIGHT_case-6612,2011-05-17 01:06:40+00:00,General,2011-05-12 14:00:01.208000+00:00,2011-05-17 01:06:40.020000+00:00,,Resource08,2011-03-22 01:06:40.010000+00:00,task-17466,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-24 14:35:40.225000+00:00 +Internet,RIGHT_case-6617,2011-04-28 01:06:40+00:00,General,2011-04-28 15:44:56.661000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource17,2011-03-03 01:06:40.010000+00:00,task-22517,T02 Check confirmation of receipt,complete,Group 4,Resource17,2011-04-28 10:39:57.087000+00:00 +Internet,RIGHT_case-6617,2011-04-28 01:06:40+00:00,General,2011-04-28 15:44:56.661000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource17,2011-03-03 01:06:40.010000+00:00,task-22522,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-04-28 10:40:18.582000+00:00 +Internet,RIGHT_case-6617,2011-04-28 01:06:40+00:00,General,2011-04-28 15:44:56.661000+00:00,2011-04-28 01:06:40.020000+00:00,,Resource17,2011-03-03 01:06:40.010000+00:00,task-22523,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-28 10:40:46.481000+00:00 +Internet,RIGHT_case-6622,2011-05-17 00:00:00+00:00,General,2011-04-13 14:48:57.628000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource18,2011-03-22 00:00:00.010000+00:00,task-17478,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-03-24 08:54:04.077000+00:00 +Internet,RIGHT_case-6622,2011-05-17 00:00:00+00:00,General,2011-04-13 14:48:57.628000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource18,2011-03-22 00:00:00.010000+00:00,task-17483,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-03-24 08:58:31.073000+00:00 +Internet,RIGHT_case-6622,2011-05-17 00:00:00+00:00,General,2011-04-13 14:48:57.628000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource18,2011-03-22 00:00:00.010000+00:00,task-17484,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-03-24 08:59:14.590000+00:00 +Post,RIGHT_case-6631,2011-05-18 01:06:40+00:00,General,2011-05-16 14:11:42.356000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-03-02 01:06:40.010000+00:00,task-18092,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-28 15:11:24.133000+00:00 +Post,RIGHT_case-6631,2011-05-18 01:06:40+00:00,General,2011-05-16 14:11:42.356000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-03-02 01:06:40.010000+00:00,task-18133,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-28 15:40:53.816000+00:00 +Post,RIGHT_case-6631,2011-05-18 01:06:40+00:00,General,2011-05-16 14:11:42.356000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-03-02 01:06:40.010000+00:00,task-18399,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:18:05.229000+00:00 +Post,RIGHT_case-6644,2011-04-27 00:00:00+00:00,General,2011-04-04 00:00:00.020000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource17,2011-03-02 00:00:00.010000+00:00,task-18787,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-04-01 09:59:34.059000+00:00 +Post,RIGHT_case-6644,2011-04-27 00:00:00+00:00,General,2011-04-04 00:00:00.020000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource17,2011-03-02 00:00:00.010000+00:00,task-18964,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-04 14:19:19.931000+00:00 +Post,RIGHT_case-6644,2011-04-27 00:00:00+00:00,General,2011-04-04 00:00:00.020000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource17,2011-03-02 00:00:00.010000+00:00,task-18794,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 15:13:41.894000+00:00 +Post,RIGHT_case-6645,2011-04-27 00:00:00+00:00,General,2011-04-26 15:11:59.286000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-18072,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-03-28 14:15:05.202000+00:00 +Post,RIGHT_case-6645,2011-04-27 00:00:00+00:00,General,2011-04-26 15:11:59.286000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-18070,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:37:26.575000+00:00 +Post,RIGHT_case-6645,2011-04-27 00:00:00+00:00,General,2011-04-26 15:11:59.286000+00:00,2011-04-27 00:00:00.020000+00:00,,Resource11,2011-03-02 00:00:00.010000+00:00,task-18716,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 14:06:51.934000+00:00 +Post,RIGHT_case-6646,2011-05-02 00:00:00+00:00,General,2011-05-02 14:11:47.699000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-18206,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-29 10:48:39.665000+00:00 +Post,RIGHT_case-6646,2011-05-02 00:00:00+00:00,General,2011-05-02 14:11:47.699000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-18209,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-29 10:49:09.034000+00:00 +Post,RIGHT_case-6646,2011-05-02 00:00:00+00:00,General,2011-05-02 14:11:47.699000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-18254,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-29 12:23:43.362000+00:00 +Post,RIGHT_case-6648,2011-05-02 00:00:00+00:00,General,2011-05-02 14:19:56.484000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-18214,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-29 11:45:37.188000+00:00 +Post,RIGHT_case-6648,2011-05-02 00:00:00+00:00,General,2011-05-02 14:19:56.484000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-18235,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-29 11:46:00.654000+00:00 +Post,RIGHT_case-6648,2011-05-02 00:00:00+00:00,General,2011-05-02 14:19:56.484000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource02,2011-03-07 00:00:00.010000+00:00,task-18236,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-29 11:46:40.975000+00:00 +Post,RIGHT_case-6649,2011-05-03 00:00:00+00:00,General,2011-05-19 15:31:20.458000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource11,2011-03-08 00:00:00.010000+00:00,task-18087,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2011-03-31 15:02:37.843000+00:00 +Post,RIGHT_case-6649,2011-05-03 00:00:00+00:00,General,2011-05-19 15:31:20.458000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource11,2011-03-08 00:00:00.010000+00:00,task-18728,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 14:30:46.310000+00:00 +Post,RIGHT_case-6649,2011-05-03 00:00:00+00:00,General,2011-05-19 15:31:20.458000+00:00,2011-05-03 00:00:00.020000+00:00,,Resource11,2011-03-08 00:00:00.010000+00:00,task-24761,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-05-12 15:00:55.063000+00:00 +Post,RIGHT_case-6650,2011-05-05 00:00:00+00:00,General,2011-05-03 11:50:19.323000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource06,2011-03-10 00:00:00.010000+00:00,task-19964,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-12 10:21:19.864000+00:00 +Post,RIGHT_case-6650,2011-05-05 00:00:00+00:00,General,2011-05-03 11:50:19.323000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource06,2011-03-10 00:00:00.010000+00:00,task-19967,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-04-12 10:21:44.216000+00:00 +Post,RIGHT_case-6650,2011-05-05 00:00:00+00:00,General,2011-05-03 11:50:19.323000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource06,2011-03-10 00:00:00.010000+00:00,task-19968,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-12 10:22:29.313000+00:00 +Post,RIGHT_case-6653,2011-05-06 00:00:00+00:00,General,2011-04-29 11:29:43.730000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource06,2011-03-11 00:00:00.010000+00:00,task-18181,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-29 10:11:56.752000+00:00 +Post,RIGHT_case-6653,2011-05-06 00:00:00+00:00,General,2011-04-29 11:29:43.730000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource06,2011-03-11 00:00:00.010000+00:00,task-18185,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-29 10:12:29.919000+00:00 +Post,RIGHT_case-6653,2011-05-06 00:00:00+00:00,General,2011-04-29 11:29:43.730000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource06,2011-03-11 00:00:00.010000+00:00,task-18402,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 08:47:54.232000+00:00 +Post,RIGHT_case-6654,2011-05-06 00:00:00+00:00,General,2011-05-02 09:54:01.913000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource11,2011-03-11 00:00:00.010000+00:00,task-18158,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:51:03.267000+00:00 +Post,RIGHT_case-6654,2011-05-06 00:00:00+00:00,General,2011-05-02 09:54:01.913000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource11,2011-03-11 00:00:00.010000+00:00,task-18573,T05 Print and send confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 09:30:44.475000+00:00 +Post,RIGHT_case-6654,2011-05-06 00:00:00+00:00,General,2011-05-02 09:54:01.913000+00:00,2011-05-06 00:00:00.020000+00:00,,Resource11,2011-03-11 00:00:00.010000+00:00,task-20367,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 09:34:36.926000+00:00 +Internet,RIGHT_case-6655,2011-05-01 01:06:40+00:00,Experts,2011-04-28 00:00:00.020000+00:00,2011-04-24 01:06:40.020000+00:00,,Resource06,2011-02-27 01:06:40.010000+00:00,task-17802,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-25 10:09:10.583000+00:00 +Internet,RIGHT_case-6655,2011-05-01 01:06:40+00:00,Experts,2011-04-28 00:00:00.020000+00:00,2011-04-24 01:06:40.020000+00:00,,Resource06,2011-02-27 01:06:40.010000+00:00,task-17806,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-25 10:14:25.646000+00:00 +Internet,RIGHT_case-6655,2011-05-01 01:06:40+00:00,Experts,2011-04-28 00:00:00.020000+00:00,2011-04-24 01:06:40.020000+00:00,,Resource06,2011-02-27 01:06:40.010000+00:00,task-17855,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-29 16:09:09.097000+00:00 +Post,RIGHT_case-6662,2011-05-30 01:06:40+00:00,General,2011-05-27 13:03:53.522000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource15,2011-03-25 01:06:40.010000+00:00,task-18187,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-03-29 10:13:22.020000+00:00 +Post,RIGHT_case-6662,2011-05-30 01:06:40+00:00,General,2011-05-27 13:03:53.522000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource15,2011-03-25 01:06:40.010000+00:00,task-18198,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-03-29 10:29:44.221000+00:00 +Post,RIGHT_case-6662,2011-05-30 01:06:40+00:00,General,2011-05-27 13:03:53.522000+00:00,2011-05-30 01:06:40.020000+00:00,,Resource15,2011-03-25 01:06:40.010000+00:00,task-18192,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-29 15:56:57.431000+00:00 +Post,RIGHT_case-6665,2011-05-05 00:00:00+00:00,General,2011-05-02 09:35:12.891000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-18156,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:49:06.478000+00:00 +Post,RIGHT_case-6665,2011-05-05 00:00:00+00:00,General,2011-05-02 09:35:12.891000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-18570,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:21:45.393000+00:00 +Post,RIGHT_case-6665,2011-05-05 00:00:00+00:00,General,2011-05-02 09:35:12.891000+00:00,2011-05-05 00:00:00.020000+00:00,,Resource11,2011-03-10 00:00:00.010000+00:00,task-20383,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 09:47:40.478000+00:00 +Post,RIGHT_case-6667,2011-05-11 00:00:00+00:00,General,2011-05-02 15:30:05.555000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-18162,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:53:26.864000+00:00 +Post,RIGHT_case-6667,2011-05-11 00:00:00+00:00,General,2011-05-02 15:30:05.555000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-18576,T05 Print and send confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 10:58:15.963000+00:00 +Post,RIGHT_case-6667,2011-05-11 00:00:00+00:00,General,2011-05-02 15:30:05.555000+00:00,2011-05-11 00:00:00.020000+00:00,,Resource11,2011-03-16 00:00:00.010000+00:00,task-20437,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 11:11:56.344000+00:00 +Post,RIGHT_case-6668,2011-06-22 01:06:40+00:00,General,2011-06-01 10:43:32.531000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource04,2011-03-16 01:06:40.010000+00:00,task-18763,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-04-01 09:19:41.913000+00:00 +Post,RIGHT_case-6668,2011-06-22 01:06:40+00:00,General,2011-06-01 10:43:32.531000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource04,2011-03-16 01:06:40.010000+00:00,task-18766,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-04-01 09:20:27.801000+00:00 +Post,RIGHT_case-6668,2011-06-22 01:06:40+00:00,General,2011-06-01 10:43:32.531000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource04,2011-03-16 01:06:40.010000+00:00,task-18779,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 15:11:49.127000+00:00 +Post,RIGHT_case-6671,2011-05-17 00:00:00+00:00,General,2011-07-26 14:14:27.386000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource09,2011-03-22 00:00:00.010000+00:00,task-31579,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-11 12:24:42.991000+00:00 +Post,RIGHT_case-6671,2011-05-17 00:00:00+00:00,General,2011-07-26 14:14:27.386000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource09,2011-03-22 00:00:00.010000+00:00,task-31582,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-11 12:25:31.803000+00:00 +Post,RIGHT_case-6671,2011-05-17 00:00:00+00:00,General,2011-07-26 14:14:27.386000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource09,2011-03-22 00:00:00.010000+00:00,task-31583,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-11 12:26:30.092000+00:00 +Post,RIGHT_case-6672,2011-05-02 00:00:00+00:00,General,2011-05-11 15:19:21.594000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource22,2011-03-07 00:00:00.010000+00:00,task-18726,T02 Check confirmation of receipt,complete,EMPTY,Resource22,2011-03-31 15:47:53.750000+00:00 +Post,RIGHT_case-6672,2011-05-02 00:00:00+00:00,General,2011-05-11 15:19:21.594000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource22,2011-03-07 00:00:00.010000+00:00,task-18731,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-03-31 15:50:06.604000+00:00 +Post,RIGHT_case-6672,2011-05-02 00:00:00+00:00,General,2011-05-11 15:19:21.594000+00:00,2011-05-02 00:00:00.020000+00:00,,Resource22,2011-03-07 00:00:00.010000+00:00,task-19347,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 14:48:34.988000+00:00 +Internet,RIGHT_case-6678,2011-05-17 01:06:40+00:00,General,2011-07-08 11:55:22.139000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource04,2011-03-22 01:06:40.010000+00:00,task-18577,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-31 08:56:47.445000+00:00 +Internet,RIGHT_case-6678,2011-05-17 01:06:40+00:00,General,2011-07-08 11:55:22.139000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource04,2011-03-22 01:06:40.010000+00:00,task-18672,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-31 13:44:05.203000+00:00 +Internet,RIGHT_case-6678,2011-05-17 01:06:40+00:00,General,2011-07-08 11:55:22.139000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource04,2011-03-22 01:06:40.010000+00:00,task-18703,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 14:28:47.705000+00:00 +Internet,RIGHT_case-6679,2011-05-17 00:00:00+00:00,General,2011-05-17 09:51:38.926000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource17,2011-03-22 00:00:00.010000+00:00,task-18844,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-04-01 16:24:04.003000+00:00 +Internet,RIGHT_case-6679,2011-05-17 00:00:00+00:00,General,2011-05-17 09:51:38.926000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource17,2011-03-22 00:00:00.010000+00:00,task-18925,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-04 14:21:09.052000+00:00 +Internet,RIGHT_case-6679,2011-05-17 00:00:00+00:00,General,2011-05-17 09:51:38.926000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource17,2011-03-22 00:00:00.010000+00:00,task-18870,T05 Print and send confirmation of receipt,complete,EMPTY,admin1,2011-04-06 15:21:15.495000+00:00 +Internet,RIGHT_case-6680,2011-07-11 01:06:40+00:00,General,2011-07-12 15:13:17.702000+00:00,2011-07-11 01:06:40.020000+00:00,,Resource13,2011-03-23 01:06:40.010000+00:00,task-19671,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-04-08 11:39:29.184000+00:00 +Internet,RIGHT_case-6680,2011-07-11 01:06:40+00:00,General,2011-07-12 15:13:17.702000+00:00,2011-07-11 01:06:40.020000+00:00,,Resource13,2011-03-23 01:06:40.010000+00:00,task-19674,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-04-08 11:40:09.484000+00:00 +Internet,RIGHT_case-6680,2011-07-11 01:06:40+00:00,General,2011-07-12 15:13:17.702000+00:00,2011-07-11 01:06:40.020000+00:00,,Resource13,2011-03-23 01:06:40.010000+00:00,task-19779,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-04-11 09:35:39.496000+00:00 +Internet,RIGHT_case-6681,2011-05-17 00:00:00+00:00,General,2011-05-12 12:05:59.735000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource15,2011-03-22 00:00:00.010000+00:00,task-18216,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-03-29 11:22:20.284000+00:00 +Internet,RIGHT_case-6681,2011-05-17 00:00:00+00:00,General,2011-05-12 12:05:59.735000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource15,2011-03-22 00:00:00.010000+00:00,task-18220,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-03-29 11:23:10.398000+00:00 +Internet,RIGHT_case-6681,2011-05-17 00:00:00+00:00,General,2011-05-12 12:05:59.735000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource15,2011-03-22 00:00:00.010000+00:00,task-18219,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-29 15:55:05.218000+00:00 +Internet,RIGHT_case-6682,2011-08-05 01:06:40+00:00,General,2011-08-03 14:52:24.942000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource18,2011-03-23 01:06:40.010000+00:00,task-19497,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-04-07 11:14:52.276000+00:00 +Internet,RIGHT_case-6682,2011-08-05 01:06:40+00:00,General,2011-08-03 14:52:24.942000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource18,2011-03-23 01:06:40.010000+00:00,task-19502,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-04-07 11:15:50.994000+00:00 +Internet,RIGHT_case-6682,2011-08-05 01:06:40+00:00,General,2011-08-03 14:52:24.942000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource18,2011-03-23 01:06:40.010000+00:00,task-19500,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-04-07 12:06:15.715000+00:00 +Internet,RIGHT_case-6683,2011-05-19 00:00:00+00:00,General,2011-06-16 07:50:11.848000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-18525,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-30 14:34:27.389000+00:00 +Internet,RIGHT_case-6683,2011-05-19 00:00:00+00:00,General,2011-06-16 07:50:11.848000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-18522,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-30 14:34:49.662000+00:00 +Internet,RIGHT_case-6683,2011-05-19 00:00:00+00:00,General,2011-06-16 07:50:11.848000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-18528,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:14:19.064000+00:00 +Internet,RIGHT_case-6684,2011-05-19 01:06:40+00:00,General,2011-06-20 16:40:14.763000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource14,2011-03-24 01:06:40.010000+00:00,task-21503,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-04-20 14:58:06.780000+00:00 +Internet,RIGHT_case-6684,2011-05-19 01:06:40+00:00,General,2011-06-20 16:40:14.763000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource14,2011-03-24 01:06:40.010000+00:00,task-21508,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-04-20 14:58:36.393000+00:00 +Internet,RIGHT_case-6684,2011-05-19 01:06:40+00:00,General,2011-06-20 16:40:14.763000+00:00,2011-05-19 01:06:40.020000+00:00,,Resource14,2011-03-24 01:06:40.010000+00:00,task-21509,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-04-20 14:59:07.808000+00:00 +Internet,RIGHT_case-6709,2011-05-19 00:00:00+00:00,General,2011-05-30 07:48:47.369000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-20512,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-14 12:11:34.410000+00:00 +Internet,RIGHT_case-6709,2011-05-19 00:00:00+00:00,General,2011-05-30 07:48:47.369000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-20515,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-14 12:12:06.496000+00:00 +Internet,RIGHT_case-6709,2011-05-19 00:00:00+00:00,General,2011-05-30 07:48:47.369000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-22657,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-28 14:25:18.373000+00:00 +Internet,RIGHT_case-6710,2011-05-19 00:00:00+00:00,General,2011-05-03 07:44:05.415000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-18166,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:56:47.720000+00:00 +Internet,RIGHT_case-6710,2011-05-19 00:00:00+00:00,General,2011-05-03 07:44:05.415000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-18581,T05 Print and send confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 12:37:18.618000+00:00 +Internet,RIGHT_case-6710,2011-05-19 00:00:00+00:00,General,2011-05-03 07:44:05.415000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource11,2011-03-24 00:00:00.010000+00:00,task-20519,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 12:44:58.572000+00:00 +Internet,RIGHT_case-6711,2011-05-19 00:00:00+00:00,General,2011-05-19 10:14:27.216000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-18516,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-30 14:20:27.637000+00:00 +Internet,RIGHT_case-6711,2011-05-19 00:00:00+00:00,General,2011-05-19 10:14:27.216000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-18520,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-30 14:28:00.217000+00:00 +Internet,RIGHT_case-6711,2011-05-19 00:00:00+00:00,General,2011-05-19 10:14:27.216000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource08,2011-03-24 00:00:00.010000+00:00,task-18519,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-13 09:30:55.619000+00:00 +Internet,RIGHT_case-6712,2011-05-20 00:00:00+00:00,General,2011-05-04 08:15:10.967000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource11,2011-03-25 00:00:00.010000+00:00,task-18168,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:59:26.244000+00:00 +Internet,RIGHT_case-6712,2011-05-20 00:00:00+00:00,General,2011-05-04 08:15:10.967000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource11,2011-03-25 00:00:00.010000+00:00,task-18583,T05 Print and send confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 12:56:02.984000+00:00 +Internet,RIGHT_case-6712,2011-05-20 00:00:00+00:00,General,2011-05-04 08:15:10.967000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource11,2011-03-25 00:00:00.010000+00:00,task-20536,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 12:59:54.934000+00:00 +Internet,RIGHT_case-6713,2011-05-20 00:00:00+00:00,General,2011-06-21 09:39:12.616000+00:00,2011-05-20 00:00:00.020000+00:00,,admin1,2011-03-25 00:00:00.010000+00:00,task-24256,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-10 13:42:30.297000+00:00 +Internet,RIGHT_case-6713,2011-05-20 00:00:00+00:00,General,2011-06-21 09:39:12.616000+00:00,2011-05-20 00:00:00.020000+00:00,,admin1,2011-03-25 00:00:00.010000+00:00,task-24259,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-05-10 13:43:12.453000+00:00 +Internet,RIGHT_case-6713,2011-05-20 00:00:00+00:00,General,2011-06-21 09:39:12.616000+00:00,2011-05-20 00:00:00.020000+00:00,,admin1,2011-03-25 00:00:00.010000+00:00,task-24260,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-10 13:43:55.753000+00:00 +Internet,RIGHT_case-6714,2011-06-24 01:06:40+00:00,General,2011-06-21 15:18:27.406000+00:00,2011-06-24 01:06:40.020000+00:00,Group 5,Resource04,2011-03-25 01:06:40.010000+00:00,task-23212,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-02 15:15:01.329000+00:00 +Internet,RIGHT_case-6714,2011-06-24 01:06:40+00:00,General,2011-06-21 15:18:27.406000+00:00,2011-06-24 01:06:40.020000+00:00,Group 5,Resource04,2011-03-25 01:06:40.010000+00:00,task-23217,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-02 15:15:24.092000+00:00 +Internet,RIGHT_case-6714,2011-06-24 01:06:40+00:00,General,2011-06-21 15:18:27.406000+00:00,2011-06-24 01:06:40.020000+00:00,Group 5,Resource04,2011-03-25 01:06:40.010000+00:00,task-23218,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-02 15:15:59.350000+00:00 +Internet,RIGHT_case-6715,2011-05-20 01:06:40+00:00,General,2011-05-18 16:16:04.715000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource04,2011-03-25 01:06:40.010000+00:00,task-23402,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-03 11:12:37.537000+00:00 +Internet,RIGHT_case-6715,2011-05-20 01:06:40+00:00,General,2011-05-18 16:16:04.715000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource04,2011-03-25 01:06:40.010000+00:00,task-23405,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-03 11:12:57.825000+00:00 +Internet,RIGHT_case-6715,2011-05-20 01:06:40+00:00,General,2011-05-18 16:16:04.715000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource04,2011-03-25 01:06:40.010000+00:00,task-23406,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-03 11:13:21.589000+00:00 +Internet,RIGHT_case-6719,2011-06-17 01:06:40+00:00,General,2011-06-16 12:09:17.112000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource06,2011-03-25 01:06:40.010000+00:00,task-19788,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-11 10:16:38.759000+00:00 +Internet,RIGHT_case-6719,2011-06-17 01:06:40+00:00,General,2011-06-16 12:09:17.112000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource06,2011-03-25 01:06:40.010000+00:00,task-19786,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-04-13 08:55:44.464000+00:00 +Internet,RIGHT_case-6719,2011-06-17 01:06:40+00:00,General,2011-06-16 12:09:17.112000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource06,2011-03-25 01:06:40.010000+00:00,task-24317,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-10 15:57:16.410000+00:00 +Internet,RIGHT_case-6719,2011-06-17 01:06:40+00:00,General,2011-06-16 12:09:17.112000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource06,2011-03-25 01:06:40.010000+00:00,task-24320,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-10 15:57:42.891000+00:00 +Internet,RIGHT_case-6737,2011-05-20 01:06:40+00:00,General,2011-05-11 10:03:04.278000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource11,2011-03-25 01:06:40.010000+00:00,task-20555,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-14 13:52:11.220000+00:00 +Internet,RIGHT_case-6737,2011-05-20 01:06:40+00:00,General,2011-05-11 10:03:04.278000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource11,2011-03-25 01:06:40.010000+00:00,task-20558,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-14 13:52:38.618000+00:00 +Internet,RIGHT_case-6737,2011-05-20 01:06:40+00:00,General,2011-05-11 10:03:04.278000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource11,2011-03-25 01:06:40.010000+00:00,task-20559,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 13:55:42.626000+00:00 +Internet,RIGHT_case-6738,2011-05-21 00:00:00+00:00,General,2011-05-03 07:26:00.355000+00:00,2011-05-21 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21580,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 08:23:10.608000+00:00 +Internet,RIGHT_case-6738,2011-05-21 00:00:00+00:00,General,2011-05-03 07:26:00.355000+00:00,2011-05-21 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21583,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 08:23:40.312000+00:00 +Internet,RIGHT_case-6738,2011-05-21 00:00:00+00:00,General,2011-05-03 07:26:00.355000+00:00,2011-05-21 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21584,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 08:24:24.951000+00:00 +Internet,RIGHT_case-6738,2011-05-21 00:00:00+00:00,General,2011-05-03 07:26:00.355000+00:00,2011-05-21 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21616,T12 Check document X request unlicensed,complete,EMPTY,Resource01,2011-04-21 13:35:52.006000+00:00 +Internet,RIGHT_case-6738,2011-05-21 00:00:00+00:00,General,2011-05-03 07:26:00.355000+00:00,2011-05-21 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21882,T15 Print document X request unlicensed,complete,Group 2,Resource11,2011-05-03 07:26:00.141000+00:00 +Internet,RIGHT_case-6739,2011-05-22 00:00:00+00:00,General,2011-05-04 08:33:12.367000+00:00,2011-05-22 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21133,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-19 13:57:44.716000+00:00 +Internet,RIGHT_case-6739,2011-05-22 00:00:00+00:00,General,2011-05-04 08:33:12.367000+00:00,2011-05-22 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21136,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-19 13:58:09.259000+00:00 +Internet,RIGHT_case-6739,2011-05-22 00:00:00+00:00,General,2011-05-04 08:33:12.367000+00:00,2011-05-22 00:00:00.020000+00:00,,Resource11,2011-03-26 00:00:00.010000+00:00,task-21137,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-19 14:02:57.204000+00:00 +Internet,RIGHT_case-6747,2011-05-23 00:00:00+00:00,General,2011-06-09 12:02:47.145000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource11,2011-03-28 00:00:00.020000+00:00,task-21623,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 09:41:43.129000+00:00 +Internet,RIGHT_case-6747,2011-05-23 00:00:00+00:00,General,2011-06-09 12:02:47.145000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource11,2011-03-28 00:00:00.020000+00:00,task-21626,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 09:42:05.396000+00:00 +Internet,RIGHT_case-6747,2011-05-23 00:00:00+00:00,General,2011-06-09 12:02:47.145000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource11,2011-03-28 00:00:00.020000+00:00,task-21627,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 09:42:30.026000+00:00 +Internet,RIGHT_case-6748,2011-05-23 00:00:00+00:00,General,2011-05-20 10:16:51.355000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource13,2011-03-28 00:00:00.020000+00:00,task-19817,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-04-11 11:22:01.725000+00:00 +Internet,RIGHT_case-6748,2011-05-23 00:00:00+00:00,General,2011-05-20 10:16:51.355000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource13,2011-03-28 00:00:00.020000+00:00,task-19848,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-04-11 12:04:02.394000+00:00 +Internet,RIGHT_case-6748,2011-05-23 00:00:00+00:00,General,2011-05-20 10:16:51.355000+00:00,2011-05-23 00:00:00.020000+00:00,,Resource13,2011-03-28 00:00:00.020000+00:00,task-19947,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-12 15:47:08.548000+00:00 +Internet,RIGHT_case-6749,2011-05-23 01:06:40+00:00,General,2011-05-18 14:05:02.912000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource08,2011-03-28 01:06:40.020000+00:00,task-19564,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 14:48:44.495000+00:00 +Internet,RIGHT_case-6749,2011-05-23 01:06:40+00:00,General,2011-05-18 14:05:02.912000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource08,2011-03-28 01:06:40.020000+00:00,task-19573,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-07 14:52:07.738000+00:00 +Internet,RIGHT_case-6749,2011-05-23 01:06:40+00:00,General,2011-05-18 14:05:02.912000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource08,2011-03-28 01:06:40.020000+00:00,task-19572,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-08 11:43:56.122000+00:00 +Internet,RIGHT_case-6751,2011-05-12 00:00:00+00:00,General,2011-05-11 15:38:18.938000+00:00,2011-05-12 00:00:00.020000+00:00,,Resource05,2011-03-17 00:00:00.010000+00:00,task-22221,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-04-27 08:27:35.719000+00:00 +e-mail,RIGHT_case-6757,2011-04-29 00:00:00+00:00,General,2011-08-31 11:20:42.561000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource14,2011-03-04 00:00:00.010000+00:00,task-19612,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-04-08 09:01:23.881000+00:00 +e-mail,RIGHT_case-6757,2011-04-29 00:00:00+00:00,General,2011-08-31 11:20:42.561000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource14,2011-03-04 00:00:00.010000+00:00,task-19615,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-04-08 09:02:09.291000+00:00 +e-mail,RIGHT_case-6757,2011-04-29 00:00:00+00:00,General,2011-08-31 11:20:42.561000+00:00,2011-04-29 00:00:00.020000+00:00,,Resource14,2011-03-04 00:00:00.010000+00:00,task-19617,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-04-08 09:03:25.913000+00:00 +Internet,RIGHT_case-6765,2011-05-13 00:00:00+00:00,General,2011-05-13 09:54:20.801000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-19176,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-06 13:36:06.093000+00:00 +Internet,RIGHT_case-6765,2011-05-13 00:00:00+00:00,General,2011-05-13 09:54:20.801000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-19312,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-06 13:45:08.747000+00:00 +Internet,RIGHT_case-6765,2011-05-13 00:00:00+00:00,General,2011-05-13 09:54:20.801000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-19311,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 15:27:53.015000+00:00 +Internet,RIGHT_case-6767,2011-05-24 00:00:00+00:00,General,2011-05-19 15:45:39.897000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource05,2011-03-29 00:00:00.020000+00:00,task-20062,T02 Check confirmation of receipt,complete,Group 4,admin1,2011-04-12 16:03:57.181000+00:00 +Internet,RIGHT_case-6767,2011-05-24 00:00:00+00:00,General,2011-05-19 15:45:39.897000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource05,2011-03-29 00:00:00.020000+00:00,task-20067,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-12 16:04:22.947000+00:00 +Internet,RIGHT_case-6767,2011-05-24 00:00:00+00:00,General,2011-05-19 15:45:39.897000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource05,2011-03-29 00:00:00.020000+00:00,task-23870,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-09 09:28:06.879000+00:00 +Internet,RIGHT_case-6778,2011-05-13 00:00:00+00:00,General,2011-05-13 10:13:27.812000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-19534,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-04-07 13:20:57.619000+00:00 +Internet,RIGHT_case-6778,2011-05-13 00:00:00+00:00,General,2011-05-13 10:13:27.812000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-19545,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-07 13:31:59.419000+00:00 +Internet,RIGHT_case-6778,2011-05-13 00:00:00+00:00,General,2011-05-13 10:13:27.812000+00:00,2011-05-13 00:00:00.020000+00:00,,Resource08,2011-03-18 00:00:00.010000+00:00,task-19544,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-08 11:38:41.982000+00:00 +Internet,RIGHT_case-6782,2011-07-27 01:06:40+00:00,General,2011-08-31 11:48:48.898000+00:00,2011-07-27 01:06:40.020000+00:00,,admin1,2011-03-28 01:06:40.020000+00:00,task-20347,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-14 08:57:29.690000+00:00 +Internet,RIGHT_case-6782,2011-07-27 01:06:40+00:00,General,2011-08-31 11:48:48.898000+00:00,2011-07-27 01:06:40.020000+00:00,,admin1,2011-03-28 01:06:40.020000+00:00,task-19246,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-04-14 09:08:03.181000+00:00 +Internet,RIGHT_case-6782,2011-07-27 01:06:40+00:00,General,2011-08-31 11:48:48.898000+00:00,2011-07-27 01:06:40.020000+00:00,,admin1,2011-03-28 01:06:40.020000+00:00,task-20352,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-18 15:18:57.470000+00:00 +Internet,RIGHT_case-6785,2011-05-24 00:00:00+00:00,General,2011-05-17 13:24:16.426000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource08,2011-03-29 00:00:00.020000+00:00,task-19592,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 15:50:56.198000+00:00 +Internet,RIGHT_case-6785,2011-05-24 00:00:00+00:00,General,2011-05-17 13:24:16.426000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource08,2011-03-29 00:00:00.020000+00:00,task-19597,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-07 15:54:52.695000+00:00 +Internet,RIGHT_case-6785,2011-05-24 00:00:00+00:00,General,2011-05-17 13:24:16.426000+00:00,2011-05-24 00:00:00.020000+00:00,,Resource08,2011-03-29 00:00:00.020000+00:00,task-19596,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-08 11:40:43.717000+00:00 +Internet,RIGHT_case-6786,2011-05-25 00:00:00+00:00,General,2011-04-21 12:15:57.402000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource06,2011-03-30 00:00:00.020000+00:00,task-19352,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-06 14:59:02.983000+00:00 +Internet,RIGHT_case-6786,2011-05-25 00:00:00+00:00,General,2011-04-21 12:15:57.402000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource06,2011-03-30 00:00:00.020000+00:00,task-19355,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-06 15:09:40.166000+00:00 +Internet,RIGHT_case-6786,2011-05-25 00:00:00+00:00,General,2011-04-21 12:15:57.402000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource06,2011-03-30 00:00:00.020000+00:00,task-21835,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-21 12:15:57.226000+00:00 +Internet,RIGHT_case-6787,2011-05-25 01:06:40+00:00,General,2011-05-04 11:08:57.615000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource11,2011-03-30 01:06:40.020000+00:00,task-21669,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 10:21:37.302000+00:00 +Internet,RIGHT_case-6787,2011-05-25 01:06:40+00:00,General,2011-05-04 11:08:57.615000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource11,2011-03-30 01:06:40.020000+00:00,task-21673,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 10:23:30.322000+00:00 +Internet,RIGHT_case-6787,2011-05-25 01:06:40+00:00,General,2011-05-04 11:08:57.615000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource11,2011-03-30 01:06:40.020000+00:00,task-21675,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 10:24:22.974000+00:00 +Internet,RIGHT_case-6790,2011-05-25 00:00:00+00:00,General,2011-05-12 08:59:34.294000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource11,2011-03-30 00:00:00.020000+00:00,task-21653,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 10:01:40.719000+00:00 +Internet,RIGHT_case-6790,2011-05-25 00:00:00+00:00,General,2011-05-12 08:59:34.294000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource11,2011-03-30 00:00:00.020000+00:00,task-21656,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 10:02:05.178000+00:00 +Internet,RIGHT_case-6790,2011-05-25 00:00:00+00:00,General,2011-05-12 08:59:34.294000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource11,2011-03-30 00:00:00.020000+00:00,task-21657,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-10 13:51:58.116000+00:00 +Internet,RIGHT_case-6790,2011-05-25 00:00:00+00:00,General,2011-05-12 08:59:34.294000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource11,2011-03-30 00:00:00.020000+00:00,task-24293,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-05-10 14:54:07.289000+00:00 +Internet,RIGHT_case-6790,2011-05-25 00:00:00+00:00,General,2011-05-12 08:59:34.294000+00:00,2011-05-25 00:00:00.020000+00:00,,Resource11,2011-03-30 00:00:00.020000+00:00,task-24555,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-05-12 08:59:34.067000+00:00 +Internet,RIGHT_case-6800,2011-05-25 01:06:40+00:00,General,2011-09-07 15:24:18.355000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource14,2011-03-30 01:06:40.020000+00:00,task-28862,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-06-17 08:32:49.591000+00:00 +Internet,RIGHT_case-6800,2011-05-25 01:06:40+00:00,General,2011-09-07 15:24:18.355000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource14,2011-03-30 01:06:40.020000+00:00,task-28865,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-06-17 08:33:30.683000+00:00 +Internet,RIGHT_case-6800,2011-05-25 01:06:40+00:00,General,2011-09-07 15:24:18.355000+00:00,2011-05-25 01:06:40.020000+00:00,,Resource14,2011-03-30 01:06:40.020000+00:00,task-28866,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-06-17 08:45:34.336000+00:00 +Internet,RIGHT_case-6802,2011-05-26 00:00:00+00:00,General,2011-05-04 08:47:50.171000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21733,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 10:55:10.094000+00:00 +Internet,RIGHT_case-6802,2011-05-26 00:00:00+00:00,General,2011-05-04 08:47:50.171000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21736,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 10:55:34.934000+00:00 +Internet,RIGHT_case-6802,2011-05-26 00:00:00+00:00,General,2011-05-04 08:47:50.171000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21738,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 10:56:05.747000+00:00 +Internet,RIGHT_case-6804,2011-05-26 00:00:00+00:00,General,2011-05-11 10:08:17.075000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21749,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 11:03:08.225000+00:00 +Internet,RIGHT_case-6804,2011-05-26 00:00:00+00:00,General,2011-05-11 10:08:17.075000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21752,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 11:03:38.747000+00:00 +Internet,RIGHT_case-6804,2011-05-26 00:00:00+00:00,General,2011-05-11 10:08:17.075000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-21753,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 11:04:10.698000+00:00 +Internet,RIGHT_case-6805,2011-05-26 00:00:00+00:00,General,2011-06-30 09:38:10.645000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource09,2011-03-31 00:00:00.020000+00:00,task-25250,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-05-17 12:19:48.363000+00:00 +Internet,RIGHT_case-6805,2011-05-26 00:00:00+00:00,General,2011-06-30 09:38:10.645000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource09,2011-03-31 00:00:00.020000+00:00,task-25248,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-05-17 12:20:27.164000+00:00 +Internet,RIGHT_case-6805,2011-05-26 00:00:00+00:00,General,2011-06-30 09:38:10.645000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource09,2011-03-31 00:00:00.020000+00:00,task-25257,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-05-17 12:21:31.095000+00:00 +Internet,RIGHT_case-6807,2011-05-27 00:00:00+00:00,General,2011-05-11 10:38:56.426000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource11,2011-04-01 00:00:00.020000+00:00,task-21770,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 11:22:27.624000+00:00 +Internet,RIGHT_case-6807,2011-05-27 00:00:00+00:00,General,2011-05-11 10:38:56.426000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource11,2011-04-01 00:00:00.020000+00:00,task-21773,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 11:22:53.290000+00:00 +Internet,RIGHT_case-6807,2011-05-27 00:00:00+00:00,General,2011-05-11 10:38:56.426000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource11,2011-04-01 00:00:00.020000+00:00,task-21774,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 11:23:34.670000+00:00 +Internet,RIGHT_case-6838,2011-05-27 00:00:00+00:00,General,2011-05-31 11:22:53.024000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource14,2011-04-01 00:00:00.020000+00:00,task-20150,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-04-13 09:05:43.537000+00:00 +Internet,RIGHT_case-6838,2011-05-27 00:00:00+00:00,General,2011-05-31 11:22:53.024000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource14,2011-04-01 00:00:00.020000+00:00,task-20153,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-04-13 09:06:11.703000+00:00 +Internet,RIGHT_case-6838,2011-05-27 00:00:00+00:00,General,2011-05-31 11:22:53.024000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource14,2011-04-01 00:00:00.020000+00:00,task-20189,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-04-13 09:48:08.209000+00:00 +Post,RIGHT_case-6848,2011-05-09 00:00:00+00:00,General,2011-05-20 14:23:58.983000+00:00,2011-05-09 00:00:00.020000+00:00,,Resource11,2011-03-14 00:00:00.010000+00:00,task-20407,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-14 10:24:12.580000+00:00 +Post,RIGHT_case-6848,2011-05-09 00:00:00+00:00,General,2011-05-20 14:23:58.983000+00:00,2011-05-09 00:00:00.020000+00:00,,Resource11,2011-03-14 00:00:00.010000+00:00,task-20410,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-14 10:24:36.556000+00:00 +Post,RIGHT_case-6848,2011-05-09 00:00:00+00:00,General,2011-05-20 14:23:58.983000+00:00,2011-05-09 00:00:00.020000+00:00,,Resource11,2011-03-14 00:00:00.010000+00:00,task-20411,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 10:25:03.190000+00:00 +Internet,RIGHT_case-6862,2011-05-15 00:00:00+00:00,General,2011-06-01 08:27:49.750000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource23,2011-03-20 00:00:00.010000+00:00,task-19252,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource23,2011-04-07 09:52:24.217000+00:00 +Internet,RIGHT_case-6862,2011-05-15 00:00:00+00:00,General,2011-06-01 08:27:49.750000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource23,2011-03-20 00:00:00.010000+00:00,task-19456,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-04-07 09:53:33.733000+00:00 +Internet,RIGHT_case-6862,2011-05-15 00:00:00+00:00,General,2011-06-01 08:27:49.750000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource23,2011-03-20 00:00:00.010000+00:00,task-19248,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-04-07 10:11:10.065000+00:00 +Internet,RIGHT_case-6862,2011-05-15 00:00:00+00:00,General,2011-06-01 08:27:49.750000+00:00,2011-05-15 00:00:00.020000+00:00,,Resource23,2011-03-20 00:00:00.010000+00:00,task-19475,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-08 11:25:12.126000+00:00 +Internet,RIGHT_case-6864,2011-05-31 00:00:00+00:00,General,2011-05-11 10:12:43.232000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource11,2011-04-05 00:00:00.020000+00:00,task-21791,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 11:38:18.109000+00:00 +Internet,RIGHT_case-6864,2011-05-31 00:00:00+00:00,General,2011-05-11 10:12:43.232000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource11,2011-04-05 00:00:00.020000+00:00,task-21794,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 11:38:46.125000+00:00 +Internet,RIGHT_case-6864,2011-05-31 00:00:00+00:00,General,2011-05-11 10:12:43.232000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource11,2011-04-05 00:00:00.020000+00:00,task-21795,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 11:39:15.774000+00:00 +Internet,RIGHT_case-6865,2011-05-31 01:06:40+00:00,General,2011-05-11 10:24:18.810000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource11,2011-04-05 01:06:40.020000+00:00,task-21812,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 11:58:13.844000+00:00 +Internet,RIGHT_case-6865,2011-05-31 01:06:40+00:00,General,2011-05-11 10:24:18.810000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource11,2011-04-05 01:06:40.020000+00:00,task-21815,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 11:58:47.987000+00:00 +Internet,RIGHT_case-6865,2011-05-31 01:06:40+00:00,General,2011-05-11 10:24:18.810000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource11,2011-04-05 01:06:40.020000+00:00,task-21816,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 11:59:17.349000+00:00 +Internet,RIGHT_case-6872,2011-05-31 00:00:00+00:00,General,2011-05-26 14:44:18.896000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource06,2011-04-06 00:00:00.020000+00:00,task-22171,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-26 12:58:24.035000+00:00 +Internet,RIGHT_case-6872,2011-05-31 00:00:00+00:00,General,2011-05-26 14:44:18.896000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource06,2011-04-06 00:00:00.020000+00:00,task-22178,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-04-26 12:58:58.633000+00:00 +Internet,RIGHT_case-6872,2011-05-31 00:00:00+00:00,General,2011-05-26 14:44:18.896000+00:00,2011-05-31 00:00:00.020000+00:00,,Resource06,2011-04-06 00:00:00.020000+00:00,task-22227,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-27 08:33:03.573000+00:00 +Internet,RIGHT_case-6900,2011-06-01 00:00:00+00:00,General,2011-05-19 10:38:35.015000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-21871,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 13:19:08.501000+00:00 +Internet,RIGHT_case-6900,2011-06-01 00:00:00+00:00,General,2011-05-19 10:38:35.015000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-21874,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 13:19:35.228000+00:00 +Internet,RIGHT_case-6900,2011-06-01 00:00:00+00:00,General,2011-05-19 10:38:35.015000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-21875,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 08:47:05.541000+00:00 +Internet,RIGHT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22925,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-02 09:53:55.304000+00:00 +Internet,RIGHT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22929,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-05-02 09:55:21.659000+00:00 +Internet,RIGHT_case-6902,2011-02-24 00:00:00+00:00,General,2011-05-27 15:23:14.842000+00:00,2011-02-24 00:00:00.010000+00:00,,admin1,2010-12-31 00:00:00.010000+00:00,task-22964,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-02 10:21:24.652000+00:00 +Internet,RIGHT_case-6904,2011-06-01 00:00:00+00:00,General,2011-05-11 10:44:38.184000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-22550,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 11:09:14.618000+00:00 +Internet,RIGHT_case-6904,2011-06-01 00:00:00+00:00,General,2011-05-11 10:44:38.184000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-22553,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 11:09:39.441000+00:00 +Internet,RIGHT_case-6904,2011-06-01 00:00:00+00:00,General,2011-05-11 10:44:38.184000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource11,2011-04-06 00:00:00.020000+00:00,task-22554,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-28 11:16:52.970000+00:00 +Internet,RIGHT_case-6944,2011-06-01 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource01,2011-04-06 00:00:00.020000+00:00,task-22637,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 13:31:19.663000+00:00 +Internet,RIGHT_case-6944,2011-06-01 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource01,2011-04-06 00:00:00.020000+00:00,task-22640,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 13:33:43.345000+00:00 +Internet,RIGHT_case-6944,2011-06-01 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-01 00:00:00.020000+00:00,,Resource01,2011-04-06 00:00:00.020000+00:00,task-22643,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-28 14:01:27.029000+00:00 +Internet,RIGHT_case-6947,2011-06-02 01:06:40+00:00,General,2011-05-23 09:49:37.059000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource11,2011-04-07 01:06:40.020000+00:00,task-22676,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 14:53:45.942000+00:00 +Internet,RIGHT_case-6947,2011-06-02 01:06:40+00:00,General,2011-05-23 09:49:37.059000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource11,2011-04-07 01:06:40.020000+00:00,task-22679,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:01:11.710000+00:00 +Internet,RIGHT_case-6947,2011-06-02 01:06:40+00:00,General,2011-05-23 09:49:37.059000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource11,2011-04-07 01:06:40.020000+00:00,task-24587,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 09:34:36.210000+00:00 +Internet,RIGHT_case-6948,2011-06-02 00:00:00+00:00,General,2011-05-19 11:46:19.473000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-22689,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 15:16:18.990000+00:00 +Internet,RIGHT_case-6948,2011-06-02 00:00:00+00:00,General,2011-05-19 11:46:19.473000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-22692,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:18:01.832000+00:00 +Internet,RIGHT_case-6948,2011-06-02 00:00:00+00:00,General,2011-05-19 11:46:19.473000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-23446,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 13:31:32.063000+00:00 +Internet,RIGHT_case-6948,2011-06-02 00:00:00+00:00,General,2011-05-19 11:46:19.473000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-24706,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-05-12 13:46:57.388000+00:00 +Internet,RIGHT_case-6948,2011-06-02 00:00:00+00:00,General,2011-05-19 11:46:19.473000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-25634,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-05-19 11:46:19.283000+00:00 +Internet,RIGHT_case-6950,2011-06-05 00:00:00+00:00,General,2011-05-19 12:06:02.771000+00:00,2011-06-05 00:00:00.020000+00:00,,Resource11,2011-04-10 00:00:00.020000+00:00,task-22681,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 15:06:06.817000+00:00 +Internet,RIGHT_case-6950,2011-06-05 00:00:00+00:00,General,2011-05-19 12:06:02.771000+00:00,2011-06-05 00:00:00.020000+00:00,,Resource11,2011-04-10 00:00:00.020000+00:00,task-22684,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:06:31.683000+00:00 +Internet,RIGHT_case-6950,2011-06-05 00:00:00+00:00,General,2011-05-19 12:06:02.771000+00:00,2011-06-05 00:00:00.020000+00:00,,Resource11,2011-04-10 00:00:00.020000+00:00,task-24603,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 09:47:59.271000+00:00 +Internet,RIGHT_case-6953,2011-06-01 01:06:40+00:00,General,2011-06-17 08:32:56.223000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-04-06 01:06:40.020000+00:00,task-21031,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-19 10:10:45.567000+00:00 +Internet,RIGHT_case-6953,2011-06-01 01:06:40+00:00,General,2011-06-17 08:32:56.223000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-04-06 01:06:40.020000+00:00,task-21034,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-04-19 10:11:11.537000+00:00 +Internet,RIGHT_case-6953,2011-06-01 01:06:40+00:00,General,2011-06-17 08:32:56.223000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource06,2011-04-06 01:06:40.020000+00:00,task-21035,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-19 10:11:45.505000+00:00 +Internet,RIGHT_case-6955,2011-06-02 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-22671,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 14:50:03.219000+00:00 +Internet,RIGHT_case-6955,2011-06-02 00:00:00+00:00,General,2011-05-25 00:00:00.020000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource01,2011-04-07 00:00:00.020000+00:00,task-22674,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 14:50:26.587000+00:00 +Internet,RIGHT_case-6957,2011-06-03 00:00:00+00:00,General,2011-05-26 11:37:57.372000+00:00,2011-06-03 00:00:00.020000+00:00,,Resource13,2011-04-08 00:00:00.020000+00:00,task-20220,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-04-13 10:53:52.557000+00:00 +Internet,RIGHT_case-6957,2011-06-03 00:00:00+00:00,General,2011-05-26 11:37:57.372000+00:00,2011-06-03 00:00:00.020000+00:00,,Resource13,2011-04-08 00:00:00.020000+00:00,task-20223,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-04-13 10:54:33.659000+00:00 +Internet,RIGHT_case-6957,2011-06-03 00:00:00+00:00,General,2011-05-26 11:37:57.372000+00:00,2011-06-03 00:00:00.020000+00:00,,Resource13,2011-04-08 00:00:00.020000+00:00,task-20659,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-18 15:17:21.141000+00:00 +Desk,RIGHT_case-6969,2011-05-20 00:00:00+00:00,General,2011-05-23 16:14:21.628000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource06,2011-03-25 00:00:00.010000+00:00,task-20246,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-13 11:59:22.070000+00:00 +Desk,RIGHT_case-6969,2011-05-20 00:00:00+00:00,General,2011-05-23 16:14:21.628000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource06,2011-03-25 00:00:00.010000+00:00,task-20249,T05 Print and send confirmation of receipt,complete,EMPTY,Resource06,2011-04-13 12:08:53.826000+00:00 +Desk,RIGHT_case-6969,2011-05-20 00:00:00+00:00,General,2011-05-23 16:14:21.628000+00:00,2011-05-20 00:00:00.020000+00:00,,Resource06,2011-03-25 00:00:00.010000+00:00,task-22396,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-27 13:41:44.590000+00:00 +Internet,RIGHT_case-6979,2011-06-02 00:00:00+00:00,General,2011-05-25 15:38:06.845000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource02,2011-04-07 00:00:00.020000+00:00,task-20588,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-04-15 07:48:23.665000+00:00 +Internet,RIGHT_case-6979,2011-06-02 00:00:00+00:00,General,2011-05-25 15:38:06.845000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource02,2011-04-07 00:00:00.020000+00:00,task-20591,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-15 07:48:48.846000+00:00 +Internet,RIGHT_case-6979,2011-06-02 00:00:00+00:00,General,2011-05-25 15:38:06.845000+00:00,2011-06-02 00:00:00.020000+00:00,,Resource02,2011-04-07 00:00:00.020000+00:00,task-20592,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-15 08:40:58.471000+00:00 +Internet,RIGHT_case-6982,2011-06-06 01:06:40+00:00,General,2011-06-24 09:37:47.317000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource06,2011-04-09 01:06:40.020000+00:00,task-22073,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-26 09:46:15.216000+00:00 +Internet,RIGHT_case-6982,2011-06-06 01:06:40+00:00,General,2011-06-24 09:37:47.317000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource06,2011-04-09 01:06:40.020000+00:00,task-22077,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-04-26 09:46:38.900000+00:00 +Internet,RIGHT_case-6982,2011-06-06 01:06:40+00:00,General,2011-06-24 09:37:47.317000+00:00,2011-06-06 01:06:40.020000+00:00,,Resource06,2011-04-09 01:06:40.020000+00:00,task-22079,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-26 09:47:09.922000+00:00 +Internet,RIGHT_case-6987,2011-06-02 01:06:40+00:00,General,2011-04-21 09:38:51.239000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource15,2011-04-07 01:06:40.020000+00:00,task-20734,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-04-18 09:52:59.077000+00:00 +Internet,RIGHT_case-6987,2011-06-02 01:06:40+00:00,General,2011-04-21 09:38:51.239000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource15,2011-04-07 01:06:40.020000+00:00,task-20738,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-18 09:53:40.989000+00:00 +Internet,RIGHT_case-6987,2011-06-02 01:06:40+00:00,General,2011-04-21 09:38:51.239000+00:00,2011-06-02 01:06:40.020000+00:00,,Resource15,2011-04-07 01:06:40.020000+00:00,task-20737,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-18 15:25:20.592000+00:00 +Internet,RIGHT_case-6988,2011-07-01 01:06:40+00:00,General,2011-07-07 15:01:56.078000+00:00,2011-07-01 01:06:40.020000+00:00,Group 5,Resource02,2011-04-09 01:06:40.020000+00:00,task-21937,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:09:53.753000+00:00 +Internet,RIGHT_case-6988,2011-07-01 01:06:40+00:00,General,2011-07-07 15:01:56.078000+00:00,2011-07-01 01:06:40.020000+00:00,Group 5,Resource02,2011-04-09 01:06:40.020000+00:00,task-21939,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-21 15:10:09.040000+00:00 +Internet,RIGHT_case-6988,2011-07-01 01:06:40+00:00,General,2011-07-07 15:01:56.078000+00:00,2011-07-01 01:06:40.020000+00:00,Group 5,Resource02,2011-04-09 01:06:40.020000+00:00,task-21942,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-04-21 15:10:55.780000+00:00 +Internet,RIGHT_case-6989,2011-06-06 00:00:00+00:00,General,2011-05-19 10:53:50.047000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-22685,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 15:12:10.772000+00:00 +Internet,RIGHT_case-6989,2011-06-06 00:00:00+00:00,General,2011-05-19 10:53:50.047000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-22688,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:12:41.628000+00:00 +Internet,RIGHT_case-6989,2011-06-06 00:00:00+00:00,General,2011-05-19 10:53:50.047000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-24881,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-13 08:38:32.509000+00:00 +Internet,RIGHT_case-6989,2011-06-06 00:00:00+00:00,General,2011-05-19 10:53:50.047000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-24884,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-05-13 09:04:13.966000+00:00 +Internet,RIGHT_case-6989,2011-06-06 00:00:00+00:00,General,2011-05-19 10:53:50.047000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-25630,T15 Print document X request unlicensed,complete,Group 2,Resource11,2011-05-19 10:53:49.765000+00:00 +Internet,RIGHT_case-6990,2011-06-06 00:00:00+00:00,General,2011-05-31 08:25:25.998000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-22695,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 15:27:04.252000+00:00 +Internet,RIGHT_case-6990,2011-06-06 00:00:00+00:00,General,2011-05-31 08:25:25.998000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-22698,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:27:38.268000+00:00 +Internet,RIGHT_case-6990,2011-06-06 00:00:00+00:00,General,2011-05-31 08:25:25.998000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-24629,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 11:13:26.274000+00:00 +Internet,RIGHT_case-6993,2011-06-06 00:00:00+00:00,General,2011-06-06 00:00:00.020000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-22708,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 15:43:50.409000+00:00 +Internet,RIGHT_case-6993,2011-06-06 00:00:00+00:00,General,2011-06-06 00:00:00.020000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-22711,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:44:20.419000+00:00 +Internet,RIGHT_case-6993,2011-06-06 00:00:00+00:00,General,2011-06-06 00:00:00.020000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource11,2011-04-11 00:00:00.020000+00:00,task-24650,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 11:46:39.323000+00:00 +Internet,RIGHT_case-6995,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21279,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-04-20 09:30:47.189000+00:00 +Internet,RIGHT_case-6995,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21282,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 09:32:09.423000+00:00 +Internet,RIGHT_case-6995,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21284,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-20 09:33:51.880000+00:00 +Desk,RIGHT_case-6996,2011-05-17 00:00:00+00:00,General,2011-05-23 09:22:52.709000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource11,2011-03-22 00:00:00.010000+00:00,task-20980,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-19 09:11:16.019000+00:00 +Desk,RIGHT_case-6996,2011-05-17 00:00:00+00:00,General,2011-05-23 09:22:52.709000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource11,2011-03-22 00:00:00.010000+00:00,task-20985,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-19 09:11:42.866000+00:00 +Desk,RIGHT_case-6996,2011-05-17 00:00:00+00:00,General,2011-05-23 09:22:52.709000+00:00,2011-05-17 00:00:00.020000+00:00,,Resource11,2011-03-22 00:00:00.010000+00:00,task-20988,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-19 09:13:51.229000+00:00 +Internet,RIGHT_case-6997,2011-06-06 00:00:00+00:00,General,2011-05-31 07:51:26.263000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-22874,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 08:59:19.149000+00:00 +Internet,RIGHT_case-6997,2011-06-06 00:00:00+00:00,General,2011-05-31 07:51:26.263000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-22878,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 09:00:03.075000+00:00 +Internet,RIGHT_case-6997,2011-06-06 00:00:00+00:00,General,2011-05-31 07:51:26.263000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource01,2011-04-11 00:00:00.020000+00:00,task-22877,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 12:02:54.091000+00:00 +Desk,RIGHT_case-6998,2011-07-01 01:06:40+00:00,General,2011-06-20 15:22:29.132000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource13,2011-03-22 01:06:40.010000+00:00,task-21245,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-04-20 07:57:32.308000+00:00 +Desk,RIGHT_case-6998,2011-07-01 01:06:40+00:00,General,2011-06-20 15:22:29.132000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource13,2011-03-22 01:06:40.010000+00:00,task-21247,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-04-20 07:58:18.620000+00:00 +Desk,RIGHT_case-6998,2011-07-01 01:06:40+00:00,General,2011-06-20 15:22:29.132000+00:00,2011-07-01 01:06:40.020000+00:00,,Resource13,2011-03-22 01:06:40.010000+00:00,task-22276,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-28 15:16:53.667000+00:00 +Internet,RIGHT_case-6999,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21302,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 10:07:43.048000+00:00 +Internet,RIGHT_case-6999,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21314,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 10:09:30.245000+00:00 +Internet,RIGHT_case-6999,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21323,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-20 10:15:01.207000+00:00 +Desk,RIGHT_case-7000,2011-05-18 01:06:40+00:00,General,2011-05-17 10:41:23.512000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource17,2011-03-23 01:06:40.010000+00:00,task-21964,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 18:31:56.107000+00:00 +Desk,RIGHT_case-7000,2011-05-18 01:06:40+00:00,General,2011-05-17 10:41:23.512000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource17,2011-03-23 01:06:40.010000+00:00,task-21976,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-04-21 18:32:39.008000+00:00 +Desk,RIGHT_case-7000,2011-05-18 01:06:40+00:00,General,2011-05-17 10:41:23.512000+00:00,2011-05-18 01:06:40.020000+00:00,,Resource17,2011-03-23 01:06:40.010000+00:00,task-21977,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-21 18:33:01.430000+00:00 +Internet,RIGHT_case-7002,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-21112,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-04-19 13:38:47.911000+00:00 +Internet,RIGHT_case-7002,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-21115,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 13:42:07.116000+00:00 +Internet,RIGHT_case-7002,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-21128,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-19 13:55:35.725000+00:00 +Internet,RIGHT_case-7004,2011-05-15 01:06:40+00:00,General,2011-05-04 08:00:41.113000+00:00,2011-05-15 01:06:40.020000+00:00,,Resource11,2011-03-24 01:06:40.010000+00:00,task-21045,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-19 10:23:35.062000+00:00 +Internet,RIGHT_case-7004,2011-05-15 01:06:40+00:00,General,2011-05-04 08:00:41.113000+00:00,2011-05-15 01:06:40.020000+00:00,,Resource11,2011-03-24 01:06:40.010000+00:00,task-21050,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-19 10:24:22.020000+00:00 +Internet,RIGHT_case-7004,2011-05-15 01:06:40+00:00,General,2011-05-04 08:00:41.113000+00:00,2011-05-15 01:06:40.020000+00:00,,Resource11,2011-03-24 01:06:40.010000+00:00,task-21052,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-19 10:25:37.221000+00:00 +Internet,RIGHT_case-7005,2011-06-12 01:06:40+00:00,General,2011-06-06 14:43:46.515000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource11,2011-04-12 01:06:40.020000+00:00,task-22869,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 08:57:19.793000+00:00 +Internet,RIGHT_case-7005,2011-06-12 01:06:40+00:00,General,2011-06-06 14:43:46.515000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource11,2011-04-12 01:06:40.020000+00:00,task-22872,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 08:57:52.463000+00:00 +Internet,RIGHT_case-7005,2011-06-12 01:06:40+00:00,General,2011-06-06 14:43:46.515000+00:00,2011-06-07 01:06:40.020000+00:00,,Resource11,2011-04-12 01:06:40.020000+00:00,task-22873,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 13:56:52.782000+00:00 +Internet,RIGHT_case-7008,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-21177,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-19 15:30:15.666000+00:00 +Internet,RIGHT_case-7008,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-21169,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:31:22.222000+00:00 +Internet,RIGHT_case-7008,2011-05-27 00:00:00+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource08,2011-04-01 00:00:00.020000+00:00,task-21182,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:33:31.443000+00:00 +Desk,RIGHT_case-7012,2011-05-19 00:00:00+00:00,General,2011-05-18 13:24:47.744000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource02,2011-03-24 00:00:00.010000+00:00,task-21296,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-04-20 09:56:25.776000+00:00 +Desk,RIGHT_case-7012,2011-05-19 00:00:00+00:00,General,2011-05-18 13:24:47.744000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource02,2011-03-24 00:00:00.010000+00:00,task-21300,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-20 09:58:50.381000+00:00 +Desk,RIGHT_case-7012,2011-05-19 00:00:00+00:00,General,2011-05-18 13:24:47.744000+00:00,2011-05-19 00:00:00.020000+00:00,,Resource02,2011-03-24 00:00:00.010000+00:00,task-21304,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-20 10:03:38.168000+00:00 +Internet,RIGHT_case-7014,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21204,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:59:41.587000+00:00 +Internet,RIGHT_case-7014,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21212,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 16:01:30.609000+00:00 +Internet,RIGHT_case-7014,2011-05-27 01:06:40+00:00,General,2011-05-17 00:00:00.020000+00:00,2011-05-27 01:06:40.020000+00:00,,Resource08,2011-04-01 01:06:40.020000+00:00,task-21215,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-19 16:04:01.405000+00:00 +Internet,RIGHT_case-7016,2011-05-20 01:06:40+00:00,General,2011-06-21 14:20:05.524000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource12,2011-03-25 01:06:40.010000+00:00,task-23112,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-02 13:34:32.918000+00:00 +Internet,RIGHT_case-7016,2011-05-20 01:06:40+00:00,General,2011-06-21 14:20:05.524000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource12,2011-03-25 01:06:40.010000+00:00,task-23146,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-05-02 13:37:26.441000+00:00 +Internet,RIGHT_case-7016,2011-05-20 01:06:40+00:00,General,2011-06-21 14:20:05.524000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource12,2011-03-25 01:06:40.010000+00:00,task-23159,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource12,2011-05-02 13:46:25.341000+00:00 +Internet,RIGHT_case-7016,2011-05-20 01:06:40+00:00,General,2011-06-21 14:20:05.524000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource12,2011-03-25 01:06:40.010000+00:00,task-23160,T09-4 Process or receive external advice from party 4,complete,Group 1,Resource12,2011-05-02 13:47:38.397000+00:00 +Internet,RIGHT_case-7016,2011-05-20 01:06:40+00:00,General,2011-06-21 14:20:05.524000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource12,2011-03-25 01:06:40.010000+00:00,task-23162,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-02 13:48:51.151000+00:00 +Internet,RIGHT_case-7037,2011-07-18 01:06:40+00:00,General,2011-07-19 13:15:08.506000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource15,2011-04-11 01:06:40.020000+00:00,task-20817,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-04-18 13:37:38.054000+00:00 +Internet,RIGHT_case-7037,2011-07-18 01:06:40+00:00,General,2011-07-19 13:15:08.506000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource15,2011-04-11 01:06:40.020000+00:00,task-20820,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-18 15:13:03.793000+00:00 +Internet,RIGHT_case-7037,2011-07-18 01:06:40+00:00,General,2011-07-19 13:15:08.506000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource15,2011-04-11 01:06:40.020000+00:00,task-22580,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-28 11:59:37.948000+00:00 +Internet,RIGHT_case-7043,2011-06-07 00:00:00+00:00,General,2011-05-30 12:56:19.706000+00:00,2011-06-07 00:00:00.020000+00:00,,Resource02,2011-04-12 00:00:00.020000+00:00,task-21517,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-04-20 15:07:09.279000+00:00 +Internet,RIGHT_case-7043,2011-06-07 00:00:00+00:00,General,2011-05-30 12:56:19.706000+00:00,2011-06-07 00:00:00.020000+00:00,,Resource02,2011-04-12 00:00:00.020000+00:00,task-21520,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-20 15:07:35.257000+00:00 +Internet,RIGHT_case-7043,2011-06-07 00:00:00+00:00,General,2011-05-30 12:56:19.706000+00:00,2011-06-07 00:00:00.020000+00:00,,Resource02,2011-04-12 00:00:00.020000+00:00,task-21613,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-21 09:11:02.282000+00:00 +Internet,RIGHT_case-7045,2011-06-23 01:06:40+00:00,General,2011-06-22 16:04:10.860000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-04-12 01:06:40.020000+00:00,task-21956,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:39:55.285000+00:00 +Internet,RIGHT_case-7045,2011-06-23 01:06:40+00:00,General,2011-06-22 16:04:10.860000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-04-12 01:06:40.020000+00:00,task-21958,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-21 15:40:11.961000+00:00 +Internet,RIGHT_case-7045,2011-06-23 01:06:40+00:00,General,2011-06-22 16:04:10.860000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource04,2011-04-12 01:06:40.020000+00:00,task-21961,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-04-21 15:41:20.605000+00:00 +Internet,RIGHT_case-7047,2011-06-08 00:00:00+00:00,General,2011-05-19 12:28:29.205000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22864,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 08:55:15.908000+00:00 +Internet,RIGHT_case-7047,2011-06-08 00:00:00+00:00,General,2011-05-19 12:28:29.205000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22867,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 08:55:47.953000+00:00 +Internet,RIGHT_case-7047,2011-06-08 00:00:00+00:00,General,2011-05-19 12:28:29.205000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22868,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 14:20:59.566000+00:00 +Internet,RIGHT_case-7048,2011-06-08 00:00:00+00:00,General,2011-05-19 14:07:15.448000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22880,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 09:06:11.004000+00:00 +Internet,RIGHT_case-7048,2011-06-08 00:00:00+00:00,General,2011-05-19 14:07:15.448000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22883,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 09:06:39.589000+00:00 +Internet,RIGHT_case-7048,2011-06-08 00:00:00+00:00,General,2011-05-19 14:07:15.448000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22884,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 14:30:23.939000+00:00 +Internet,RIGHT_case-7051,2011-06-08 01:06:40+00:00,General,2011-05-19 13:54:09.449000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-22966,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 10:22:25.428000+00:00 +Internet,RIGHT_case-7051,2011-06-08 01:06:40+00:00,General,2011-05-19 13:54:09.449000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-22970,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 10:22:53.654000+00:00 +Internet,RIGHT_case-7051,2011-06-08 01:06:40+00:00,General,2011-05-19 13:54:09.449000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-22971,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 15:39:41.777000+00:00 +Internet,RIGHT_case-7052,2011-06-08 00:00:00+00:00,General,2011-05-23 14:09:24.011000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22888,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 09:14:50.121000+00:00 +Internet,RIGHT_case-7052,2011-06-08 00:00:00+00:00,General,2011-05-23 14:09:24.011000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22892,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 09:15:21.277000+00:00 +Internet,RIGHT_case-7052,2011-06-08 00:00:00+00:00,General,2011-05-23 14:09:24.011000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource11,2011-04-13 00:00:00.020000+00:00,task-22890,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-05-12 15:28:54.187000+00:00 +Internet,RIGHT_case-7053,2011-06-08 00:00:00+00:00,General,2011-06-06 15:24:53.815000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource17,2011-04-13 00:00:00.020000+00:00,task-27123,T02 Check confirmation of receipt,complete,Group 4,Resource17,2011-05-30 13:39:50.681000+00:00 +Internet,RIGHT_case-7053,2011-06-08 00:00:00+00:00,General,2011-06-06 15:24:53.815000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource17,2011-04-13 00:00:00.020000+00:00,task-27126,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-05-30 13:40:15.683000+00:00 +Internet,RIGHT_case-7053,2011-06-08 00:00:00+00:00,General,2011-06-06 15:24:53.815000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource17,2011-04-13 00:00:00.020000+00:00,task-27131,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-05-30 13:41:15.724000+00:00 +Internet,RIGHT_case-7058,2011-06-08 00:00:00+00:00,General,2011-05-31 14:07:43.182000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource15,2011-04-13 00:00:00.020000+00:00,task-21597,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-04-21 08:57:36.097000+00:00 +Internet,RIGHT_case-7058,2011-06-08 00:00:00+00:00,General,2011-05-31 14:07:43.182000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource15,2011-04-13 00:00:00.020000+00:00,task-21602,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-21 09:01:27.523000+00:00 +Internet,RIGHT_case-7058,2011-06-08 00:00:00+00:00,General,2011-05-31 14:07:43.182000+00:00,2011-06-08 00:00:00.020000+00:00,,Resource15,2011-04-13 00:00:00.020000+00:00,task-21601,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-27 09:02:14.797000+00:00 +Internet,RIGHT_case-7060,2011-06-09 01:06:40+00:00,General,2011-09-14 16:00:50.214000+00:00,2011-06-09 01:06:40.020000+00:00,Group 5,Resource12,2011-04-14 01:06:40.020000+00:00,task-23060,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-05-02 12:17:47.776000+00:00 +Internet,RIGHT_case-7060,2011-06-09 01:06:40+00:00,General,2011-09-14 16:00:50.214000+00:00,2011-06-09 01:06:40.020000+00:00,Group 5,Resource12,2011-04-14 01:06:40.020000+00:00,task-23063,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-05-02 12:18:45.695000+00:00 +Internet,RIGHT_case-7060,2011-06-09 01:06:40+00:00,General,2011-09-14 16:00:50.214000+00:00,2011-06-09 01:06:40.020000+00:00,Group 5,Resource12,2011-04-14 01:06:40.020000+00:00,task-26636,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-27 09:38:19.768000+00:00 +Internet,RIGHT_case-7079,2011-06-09 00:00:00+00:00,General,2011-05-30 14:47:00.868000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource02,2011-04-14 00:00:00.020000+00:00,task-21969,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-04-21 16:37:55.193000+00:00 +Internet,RIGHT_case-7079,2011-06-09 00:00:00+00:00,General,2011-05-30 14:47:00.868000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource02,2011-04-14 00:00:00.020000+00:00,task-21972,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-21 16:47:43.266000+00:00 +Internet,RIGHT_case-7079,2011-06-09 00:00:00+00:00,General,2011-05-30 14:47:00.868000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource02,2011-04-14 00:00:00.020000+00:00,task-21973,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-26 08:25:19.554000+00:00 +Internet,RIGHT_case-7080,2011-06-08 01:06:40+00:00,General,2011-05-19 14:11:26.431000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-22908,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 09:23:01.252000+00:00 +Internet,RIGHT_case-7080,2011-06-08 01:06:40+00:00,General,2011-05-19 14:11:26.431000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-22911,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 09:23:39.517000+00:00 +Internet,RIGHT_case-7080,2011-06-08 01:06:40+00:00,General,2011-05-19 14:11:26.431000+00:00,2011-06-08 01:06:40.020000+00:00,,Resource11,2011-04-13 01:06:40.020000+00:00,task-22912,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 15:26:56.600000+00:00 +Internet,RIGHT_case-7083,2011-06-10 01:06:40+00:00,General,2011-06-09 16:14:51.712000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource14,2011-04-15 01:06:40.020000+00:00,task-23906,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-09 10:13:48.243000+00:00 +Internet,RIGHT_case-7083,2011-06-10 01:06:40+00:00,General,2011-06-09 16:14:51.712000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource14,2011-04-15 01:06:40.020000+00:00,task-23909,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-09 10:14:35.986000+00:00 +Internet,RIGHT_case-7083,2011-06-10 01:06:40+00:00,General,2011-06-09 16:14:51.712000+00:00,2011-06-10 01:06:40.020000+00:00,,Resource14,2011-04-15 01:06:40.020000+00:00,task-23981,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-09 12:17:54.990000+00:00 +Internet,RIGHT_case-7084,2011-06-13 00:00:00+00:00,General,2011-06-09 17:50:00.750000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-22985,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 10:47:12.107000+00:00 +Internet,RIGHT_case-7084,2011-06-13 00:00:00+00:00,General,2011-06-09 17:50:00.750000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-22988,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 10:47:37.350000+00:00 +Internet,RIGHT_case-7084,2011-06-13 00:00:00+00:00,General,2011-06-09 17:50:00.750000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-22989,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-13 09:13:14.833000+00:00 +Internet,RIGHT_case-7085,2011-06-14 00:00:00+00:00,General,2011-08-18 08:47:26.880000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource21,2011-04-19 00:00:00.020000+00:00,task-21055,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-04-19 10:33:29.895000+00:00 +Internet,RIGHT_case-7085,2011-06-14 00:00:00+00:00,General,2011-08-18 08:47:26.880000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource21,2011-04-19 00:00:00.020000+00:00,task-21059,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-04-19 10:35:43.253000+00:00 +Internet,RIGHT_case-7085,2011-06-14 00:00:00+00:00,General,2011-08-18 08:47:26.880000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource21,2011-04-19 00:00:00.020000+00:00,task-25345,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-05-18 09:25:37.587000+00:00 +Internet,RIGHT_case-7087,2011-05-31 01:06:40+00:00,General,,2011-05-31 01:06:40.020000+00:00,Group 5,Resource14,2011-04-05 01:06:40.020000+00:00,task-21396,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-04-20 11:21:57.216000+00:00 +Internet,RIGHT_case-7087,2011-05-31 01:06:40+00:00,General,,2011-05-31 01:06:40.020000+00:00,Group 5,Resource14,2011-04-05 01:06:40.020000+00:00,task-21400,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-20 11:27:11.309000+00:00 +Internet,RIGHT_case-7087,2011-05-31 01:06:40+00:00,General,,2011-05-31 01:06:40.020000+00:00,Group 5,Resource14,2011-04-05 01:06:40.020000+00:00,task-21399,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-27 08:59:32.688000+00:00 +Internet,RIGHT_case-7089,2011-04-22 01:06:40+00:00,General,2011-04-21 15:28:13.241000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource18,2011-04-14 01:06:40.020000+00:00,task-21126,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-04-19 15:54:11.251000+00:00 +Internet,RIGHT_case-7089,2011-04-22 01:06:40+00:00,General,2011-04-21 15:28:13.241000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource18,2011-04-14 01:06:40.020000+00:00,task-21191,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-04-19 15:54:49.139000+00:00 +Internet,RIGHT_case-7089,2011-04-22 01:06:40+00:00,General,2011-04-21 15:28:13.241000+00:00,2011-04-21 01:06:40.020000+00:00,,Resource18,2011-04-14 01:06:40.020000+00:00,task-21190,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-04-19 15:56:06.460000+00:00 +Internet,RIGHT_case-709,2010-11-26 00:00:00+00:00,General,2011-08-18 08:41:39.734000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource21,2010-10-01 00:00:00.020000+00:00,task-803,T02 Check confirmation of receipt,complete,Group 4,Resource21,2010-11-03 10:59:58.965000+00:00 +Internet,RIGHT_case-709,2010-11-26 00:00:00+00:00,General,2011-08-18 08:41:39.734000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource21,2010-10-01 00:00:00.020000+00:00,task-809,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2010-11-03 11:00:57.724000+00:00 +Internet,RIGHT_case-709,2010-11-26 00:00:00+00:00,General,2011-08-18 08:41:39.734000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource21,2010-10-01 00:00:00.020000+00:00,task-1283,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2010-11-09 14:34:55.347000+00:00 +Internet,RIGHT_case-7091,2011-05-24 01:06:40+00:00,General,2011-05-20 16:28:57.947000+00:00,2011-05-24 01:06:40.020000+00:00,,Resource04,2011-03-29 01:06:40.020000+00:00,task-23717,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-04 12:51:51.822000+00:00 +Internet,RIGHT_case-7091,2011-05-24 01:06:40+00:00,General,2011-05-20 16:28:57.947000+00:00,2011-05-24 01:06:40.020000+00:00,,Resource04,2011-03-29 01:06:40.020000+00:00,task-23737,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-04 12:52:15.390000+00:00 +Internet,RIGHT_case-7091,2011-05-24 01:06:40+00:00,General,2011-05-20 16:28:57.947000+00:00,2011-05-24 01:06:40.020000+00:00,,Resource04,2011-03-29 01:06:40.020000+00:00,task-23739,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-04 12:52:49.053000+00:00 +Internet,RIGHT_case-7092,2011-05-26 00:00:00+00:00,General,2011-05-11 10:29:02.178000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-22345,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-27 11:06:36.211000+00:00 +Internet,RIGHT_case-7092,2011-05-26 00:00:00+00:00,General,2011-05-11 10:29:02.178000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-22351,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-27 11:16:21.105000+00:00 +Internet,RIGHT_case-7092,2011-05-26 00:00:00+00:00,General,2011-05-11 10:29:02.178000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-22389,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-27 13:07:08.178000+00:00 +Internet,RIGHT_case-7093,2011-05-26 00:00:00+00:00,General,2011-05-11 10:20:22.501000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-22485,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 09:26:17.585000+00:00 +Internet,RIGHT_case-7093,2011-05-26 00:00:00+00:00,General,2011-05-11 10:20:22.501000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-22488,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 09:26:44.462000+00:00 +Internet,RIGHT_case-7093,2011-05-26 00:00:00+00:00,General,2011-05-11 10:20:22.501000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource11,2011-03-31 00:00:00.020000+00:00,task-22491,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-28 09:44:45.480000+00:00 +Internet,RIGHT_case-7094,2011-05-26 00:00:00+00:00,General,2011-06-16 14:45:04.264000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource05,2011-03-31 00:00:00.020000+00:00,task-22919,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-02 09:51:15.270000+00:00 +Internet,RIGHT_case-7094,2011-05-26 00:00:00+00:00,General,2011-06-16 14:45:04.264000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource05,2011-03-31 00:00:00.020000+00:00,task-22922,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-05-02 09:51:58.263000+00:00 +Internet,RIGHT_case-7094,2011-05-26 00:00:00+00:00,General,2011-06-16 14:45:04.264000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource05,2011-03-31 00:00:00.020000+00:00,task-22924,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-02 09:53:19.482000+00:00 +Internet,RIGHT_case-7094,2011-05-26 00:00:00+00:00,General,2011-06-16 14:45:04.264000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource05,2011-03-31 00:00:00.020000+00:00,task-22931,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-05-02 09:57:37.605000+00:00 +Internet,RIGHT_case-7094,2011-05-26 00:00:00+00:00,General,2011-06-16 14:45:04.264000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource05,2011-03-31 00:00:00.020000+00:00,task-22940,T20 Print report Y to stop indication,complete,Group 2,Resource05,2011-05-02 09:59:23.761000+00:00 +Internet,RIGHT_case-7108,2011-06-12 00:00:00+00:00,General,2011-06-09 16:52:12.437000+00:00,2011-06-12 00:00:00.020000+00:00,,Resource14,2011-04-17 00:00:00.020000+00:00,task-23912,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-09 10:19:15.536000+00:00 +Internet,RIGHT_case-7108,2011-06-12 00:00:00+00:00,General,2011-06-09 16:52:12.437000+00:00,2011-06-12 00:00:00.020000+00:00,,Resource14,2011-04-17 00:00:00.020000+00:00,task-23915,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-09 10:19:53.297000+00:00 +Internet,RIGHT_case-7108,2011-06-12 00:00:00+00:00,General,2011-06-09 16:52:12.437000+00:00,2011-06-12 00:00:00.020000+00:00,,Resource14,2011-04-17 00:00:00.020000+00:00,task-23969,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-09 12:11:22.902000+00:00 +Internet,RIGHT_case-7110,2011-04-12 00:00:00+00:00,General,2011-04-20 12:40:53.709000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource06,2011-02-15 00:00:00.010000+00:00,task-21336,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-20 10:22:06.093000+00:00 +Internet,RIGHT_case-7110,2011-04-12 00:00:00+00:00,General,2011-04-20 12:40:53.709000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource06,2011-02-15 00:00:00.010000+00:00,task-21343,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-04-20 10:22:55.418000+00:00 +Internet,RIGHT_case-7110,2011-04-12 00:00:00+00:00,General,2011-04-20 12:40:53.709000+00:00,2011-04-12 00:00:00.020000+00:00,,Resource06,2011-02-15 00:00:00.010000+00:00,task-21345,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-20 10:23:41.874000+00:00 +e-mail,RIGHT_case-7112,2011-05-20 01:06:40+00:00,General,2011-05-24 15:00:51.630000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource25,2011-03-25 01:06:40.010000+00:00,task-25550,T02 Check confirmation of receipt,complete,EMPTY,Resource25,2011-05-18 15:11:47.024000+00:00 +e-mail,RIGHT_case-7112,2011-05-20 01:06:40+00:00,General,2011-05-24 15:00:51.630000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource25,2011-03-25 01:06:40.010000+00:00,task-25554,T05 Print and send confirmation of receipt,complete,Group 2,Resource25,2011-05-18 15:13:20.248000+00:00 +e-mail,RIGHT_case-7112,2011-05-20 01:06:40+00:00,General,2011-05-24 15:00:51.630000+00:00,2011-05-20 01:06:40.020000+00:00,,Resource25,2011-03-25 01:06:40.010000+00:00,task-25555,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2011-05-18 15:20:43.126000+00:00 +Desk,RIGHT_case-7114,2011-05-27 00:00:00+00:00,General,2011-08-30 10:59:41.122000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-23534,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-03 15:18:51.126000+00:00 +Desk,RIGHT_case-7114,2011-05-27 00:00:00+00:00,General,2011-08-30 10:59:41.122000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-23538,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-05-03 15:19:36.390000+00:00 +Desk,RIGHT_case-7114,2011-05-27 00:00:00+00:00,General,2011-08-30 10:59:41.122000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-23539,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-03 15:20:53.315000+00:00 +Desk,RIGHT_case-7117,2011-05-27 00:00:00+00:00,General,2011-08-30 09:21:52.980000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-27866,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-06-06 14:33:35.093000+00:00 +Desk,RIGHT_case-7117,2011-05-27 00:00:00+00:00,General,2011-08-30 09:21:52.980000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-27873,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-06-06 14:36:36.050000+00:00 +Desk,RIGHT_case-7117,2011-05-27 00:00:00+00:00,General,2011-08-30 09:21:52.980000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource12,2011-04-01 00:00:00.020000+00:00,task-27872,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-24 14:29:16.806000+00:00 +Internet,RIGHT_case-7119,2011-05-26 00:00:00+00:00,General,2011-05-25 11:56:19.436000+00:00,2011-05-26 00:00:00.020000+00:00,,admin1,2011-03-31 00:00:00.020000+00:00,task-23025,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-02 11:54:21.679000+00:00 +Internet,RIGHT_case-7119,2011-05-26 00:00:00+00:00,General,2011-05-25 11:56:19.436000+00:00,2011-05-26 00:00:00.020000+00:00,,admin1,2011-03-31 00:00:00.020000+00:00,task-23028,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-05-02 11:54:48.496000+00:00 +Internet,RIGHT_case-7119,2011-05-26 00:00:00+00:00,General,2011-05-25 11:56:19.436000+00:00,2011-05-26 00:00:00.020000+00:00,,admin1,2011-03-31 00:00:00.020000+00:00,task-23029,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-02 11:56:48.823000+00:00 +Internet,RIGHT_case-7120,2011-05-18 00:00:00+00:00,General,2011-05-13 14:57:38.805000+00:00,2011-05-18 00:00:00.020000+00:00,,Resource14,2011-03-22 00:00:00.010000+00:00,task-23072,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-02 12:30:37.400000+00:00 +Internet,RIGHT_case-7120,2011-05-18 00:00:00+00:00,General,2011-05-13 14:57:38.805000+00:00,2011-05-18 00:00:00.020000+00:00,,Resource14,2011-03-22 00:00:00.010000+00:00,task-23078,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-02 12:31:39.966000+00:00 +Internet,RIGHT_case-7120,2011-05-18 00:00:00+00:00,General,2011-05-13 14:57:38.805000+00:00,2011-05-18 00:00:00.020000+00:00,,Resource14,2011-03-22 00:00:00.010000+00:00,task-23080,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-02 12:32:08.106000+00:00 +Internet,RIGHT_case-7129,2011-06-14 01:06:40+00:00,General,2011-06-17 08:57:46.186000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource13,2011-04-19 01:06:40.020000+00:00,task-22216,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-04-27 08:15:44.066000+00:00 +Internet,RIGHT_case-7129,2011-06-14 01:06:40+00:00,General,2011-06-17 08:57:46.186000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource13,2011-04-19 01:06:40.020000+00:00,task-22219,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-04-27 08:16:41.954000+00:00 +Internet,RIGHT_case-7129,2011-06-14 01:06:40+00:00,General,2011-06-17 08:57:46.186000+00:00,2011-06-14 01:06:40.020000+00:00,,Resource13,2011-04-19 01:06:40.020000+00:00,task-22290,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-28 15:23:59.707000+00:00 +Internet,RIGHT_case-7131,2011-06-14 00:00:00+00:00,General,2011-05-25 08:15:25.760000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource11,2011-04-19 00:00:00.020000+00:00,task-22993,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 10:58:33.361000+00:00 +Internet,RIGHT_case-7131,2011-06-14 00:00:00+00:00,General,2011-05-25 08:15:25.760000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource11,2011-04-19 00:00:00.020000+00:00,task-22996,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 10:59:03.746000+00:00 +Internet,RIGHT_case-7131,2011-06-14 00:00:00+00:00,General,2011-05-25 08:15:25.760000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource11,2011-04-19 00:00:00.020000+00:00,task-22997,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-13 09:51:07.145000+00:00 +Internet,RIGHT_case-7132,2011-05-23 01:06:40+00:00,General,2011-05-23 12:40:03.643000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource17,2011-03-28 01:06:40.020000+00:00,task-22793,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-05-02 13:40:47.217000+00:00 +Internet,RIGHT_case-7132,2011-05-23 01:06:40+00:00,General,2011-05-23 12:40:03.643000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource17,2011-03-28 01:06:40.020000+00:00,task-23152,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-05-02 13:41:29.804000+00:00 +Internet,RIGHT_case-7132,2011-05-23 01:06:40+00:00,General,2011-05-23 12:40:03.643000+00:00,2011-05-23 01:06:40.020000+00:00,,Resource17,2011-03-28 01:06:40.020000+00:00,task-23154,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-05-02 13:42:03.077000+00:00 +Internet,RIGHT_case-7134,2011-05-27 00:00:00+00:00,General,2011-05-31 11:41:15.066000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource18,2011-04-01 00:00:00.020000+00:00,task-22618,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-04-28 12:37:09.169000+00:00 +Internet,RIGHT_case-7134,2011-05-27 00:00:00+00:00,General,2011-05-31 11:41:15.066000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource18,2011-04-01 00:00:00.020000+00:00,task-22621,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-04-28 12:37:45.662000+00:00 +Internet,RIGHT_case-7134,2011-05-27 00:00:00+00:00,General,2011-05-31 11:41:15.066000+00:00,2011-05-27 00:00:00.020000+00:00,,Resource18,2011-04-01 00:00:00.020000+00:00,task-26834,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-05-30 08:11:15.470000+00:00 +Internet,RIGHT_case-7175,2011-06-14 00:00:00+00:00,General,2011-05-31 15:05:31.360000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource05,2011-04-19 00:00:00.020000+00:00,task-24014,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-09 15:10:40.645000+00:00 +Internet,RIGHT_case-7175,2011-06-14 00:00:00+00:00,General,2011-05-31 15:05:31.360000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource05,2011-04-19 00:00:00.020000+00:00,task-24012,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-09 15:10:53.830000+00:00 +Internet,RIGHT_case-7175,2011-06-14 00:00:00+00:00,General,2011-05-31 15:05:31.360000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource05,2011-04-19 00:00:00.020000+00:00,task-24017,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-05-09 15:11:21.712000+00:00 +Internet,RIGHT_case-7178,2011-06-15 00:00:00+00:00,General,2011-05-25 08:18:19.702000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource11,2011-04-20 00:00:00.020000+00:00,task-23091,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 12:34:34.526000+00:00 +Internet,RIGHT_case-7178,2011-06-15 00:00:00+00:00,General,2011-05-25 08:18:19.702000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource11,2011-04-20 00:00:00.020000+00:00,task-23094,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 12:35:03.656000+00:00 +Internet,RIGHT_case-7178,2011-06-15 00:00:00+00:00,General,2011-05-25 08:18:19.702000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource11,2011-04-20 00:00:00.020000+00:00,task-23096,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-13 12:03:08.817000+00:00 +Internet,RIGHT_case-7182,2011-08-13 01:06:40+00:00,General,2011-08-12 15:44:31.411000+00:00,2011-08-13 01:06:40.020000+00:00,Group 5,Resource13,2011-04-20 01:06:40.020000+00:00,task-22623,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-04-28 13:13:04.868000+00:00 +Internet,RIGHT_case-7182,2011-08-13 01:06:40+00:00,General,2011-08-12 15:44:31.411000+00:00,2011-08-13 01:06:40.020000+00:00,Group 5,Resource13,2011-04-20 01:06:40.020000+00:00,task-22627,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-28 13:14:20.642000+00:00 +Internet,RIGHT_case-7182,2011-08-13 01:06:40+00:00,General,2011-08-12 15:44:31.411000+00:00,2011-08-13 01:06:40.020000+00:00,Group 5,Resource13,2011-04-20 01:06:40.020000+00:00,task-22629,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-28 13:17:13.974000+00:00 +Internet,RIGHT_case-7187,2011-06-15 01:06:40+00:00,General,2011-06-16 09:47:30.599000+00:00,2011-06-15 01:06:40.020000+00:00,,Resource04,2011-04-20 01:06:40.020000+00:00,task-23643,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-04 09:36:27.778000+00:00 +Internet,RIGHT_case-7187,2011-06-15 01:06:40+00:00,General,2011-06-16 09:47:30.599000+00:00,2011-06-15 01:06:40.020000+00:00,,Resource04,2011-04-20 01:06:40.020000+00:00,task-23646,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-04 09:36:47.795000+00:00 +Internet,RIGHT_case-7187,2011-06-15 01:06:40+00:00,General,2011-06-16 09:47:30.599000+00:00,2011-06-15 01:06:40.020000+00:00,,Resource04,2011-04-20 01:06:40.020000+00:00,task-23647,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-04 09:38:40.205000+00:00 +e-mail,RIGHT_case-7189,2011-06-15 00:00:00+00:00,General,2011-06-01 09:36:32.823000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource02,2011-04-20 00:00:00.020000+00:00,task-22264,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-04-27 09:04:31.227000+00:00 +e-mail,RIGHT_case-7189,2011-06-15 00:00:00+00:00,General,2011-06-01 09:36:32.823000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource02,2011-04-20 00:00:00.020000+00:00,task-22267,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-27 09:05:05.703000+00:00 +e-mail,RIGHT_case-7189,2011-06-15 00:00:00+00:00,General,2011-06-01 09:36:32.823000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource02,2011-04-20 00:00:00.020000+00:00,task-22270,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-27 09:05:43.709000+00:00 +Internet,RIGHT_case-7192,2011-07-14 01:06:40+00:00,General,2011-07-11 11:28:34.813000+00:00,2011-07-14 01:06:40.020000+00:00,Group 8,Resource32,2011-04-21 01:06:40.020000+00:00,task-23103,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 12:40:51.173000+00:00 +Internet,RIGHT_case-7192,2011-07-14 01:06:40+00:00,General,2011-07-11 11:28:34.813000+00:00,2011-07-14 01:06:40.020000+00:00,Group 8,Resource32,2011-04-21 01:06:40.020000+00:00,task-23118,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 12:53:26.198000+00:00 +Internet,RIGHT_case-7192,2011-07-14 01:06:40+00:00,General,2011-07-11 11:28:34.813000+00:00,2011-07-14 01:06:40.020000+00:00,Group 8,Resource32,2011-04-21 01:06:40.020000+00:00,task-23120,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-13 15:15:39.662000+00:00 +Internet,RIGHT_case-7194,2011-06-17 01:06:40+00:00,General,2011-06-16 13:33:48.845000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource02,2011-04-22 01:06:40.020000+00:00,task-22572,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-04-28 11:47:38.784000+00:00 +Internet,RIGHT_case-7194,2011-06-17 01:06:40+00:00,General,2011-06-16 13:33:48.845000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource02,2011-04-22 01:06:40.020000+00:00,task-22575,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-28 11:48:08.802000+00:00 +Internet,RIGHT_case-7194,2011-06-17 01:06:40+00:00,General,2011-06-16 13:33:48.845000+00:00,2011-06-17 01:06:40.020000+00:00,,Resource02,2011-04-22 01:06:40.020000+00:00,task-22576,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-28 11:58:15.231000+00:00 +Internet,RIGHT_case-7197,2011-06-19 00:00:00+00:00,General,2011-07-15 08:56:51.052000+00:00,2011-06-19 00:00:00.020000+00:00,,Resource01,2011-04-24 00:00:00.020000+00:00,task-23128,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 12:59:31.403000+00:00 +Internet,RIGHT_case-7197,2011-06-19 00:00:00+00:00,General,2011-07-15 08:56:51.052000+00:00,2011-06-19 00:00:00.020000+00:00,,Resource01,2011-04-24 00:00:00.020000+00:00,task-23133,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 13:00:11.220000+00:00 +Internet,RIGHT_case-7197,2011-06-19 00:00:00+00:00,General,2011-07-15 08:56:51.052000+00:00,2011-06-19 00:00:00.020000+00:00,,Resource01,2011-04-24 00:00:00.020000+00:00,task-23140,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-18 12:11:22.479000+00:00 +Desk,RIGHT_case-7233,2011-07-08 01:06:40+00:00,General,2011-07-08 16:02:33.750000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource02,2011-04-01 01:06:40.020000+00:00,task-23134,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-02 13:00:15.762000+00:00 +Desk,RIGHT_case-7233,2011-07-08 01:06:40+00:00,General,2011-07-08 16:02:33.750000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource02,2011-04-01 01:06:40.020000+00:00,task-23139,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-02 13:01:08.708000+00:00 +Desk,RIGHT_case-7233,2011-07-08 01:06:40+00:00,General,2011-07-08 16:02:33.750000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource02,2011-04-01 01:06:40.020000+00:00,task-23167,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-02 14:40:02.740000+00:00 +Internet,RIGHT_case-7256,2011-06-20 01:06:40+00:00,General,2011-06-22 16:49:24.689000+00:00,2011-06-20 01:06:40.020000+00:00,Group 5,Resource05,2011-04-25 01:06:40.020000+00:00,task-24300,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-10 15:39:48.916000+00:00 +Internet,RIGHT_case-7256,2011-06-20 01:06:40+00:00,General,2011-06-22 16:49:24.689000+00:00,2011-06-20 01:06:40.020000+00:00,Group 5,Resource05,2011-04-25 01:06:40.020000+00:00,task-24304,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-10 15:41:00.734000+00:00 +Internet,RIGHT_case-7256,2011-06-20 01:06:40+00:00,General,2011-06-22 16:49:24.689000+00:00,2011-06-20 01:06:40.020000+00:00,Group 5,Resource05,2011-04-25 01:06:40.020000+00:00,task-24303,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:36:52.461000+00:00 +Internet,RIGHT_case-7264,2011-08-30 01:06:40+00:00,General,2011-08-29 09:49:09.129000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-04-26 01:06:40.020000+00:00,task-23709,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-04 11:12:34.732000+00:00 +Internet,RIGHT_case-7264,2011-08-30 01:06:40+00:00,General,2011-08-29 09:49:09.129000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-04-26 01:06:40.020000+00:00,task-24372,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-11 08:37:04.066000+00:00 +Internet,RIGHT_case-7264,2011-08-30 01:06:40+00:00,General,2011-08-29 09:49:09.129000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-04-26 01:06:40.020000+00:00,task-23712,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:08:59.203000+00:00 +Internet,RIGHT_case-7265,2011-06-20 01:06:40+00:00,General,2011-07-15 11:43:59.244000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource08,2011-04-25 01:06:40.020000+00:00,task-23611,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-04 08:43:30.014000+00:00 +Internet,RIGHT_case-7265,2011-06-20 01:06:40+00:00,General,2011-07-15 11:43:59.244000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource08,2011-04-25 01:06:40.020000+00:00,task-23614,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-05-04 08:45:29.534000+00:00 +Internet,RIGHT_case-7265,2011-06-20 01:06:40+00:00,General,2011-07-15 11:43:59.244000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource08,2011-04-25 01:06:40.020000+00:00,task-23615,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-05-04 10:13:34.508000+00:00 +Internet,RIGHT_case-7266,2011-08-01 01:06:40+00:00,General,2011-07-29 10:07:52.691000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource13,2011-04-25 01:06:40.020000+00:00,task-23463,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-05-03 12:59:36.876000+00:00 +Internet,RIGHT_case-7266,2011-08-01 01:06:40+00:00,General,2011-07-29 10:07:52.691000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource13,2011-04-25 01:06:40.020000+00:00,task-23574,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-05-04 07:13:31.070000+00:00 +Internet,RIGHT_case-7266,2011-08-01 01:06:40+00:00,General,2011-07-29 10:07:52.691000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource13,2011-04-25 01:06:40.020000+00:00,task-23850,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:10:41.963000+00:00 +Internet,RIGHT_case-7267,2011-06-21 00:00:00+00:00,General,2011-05-30 08:37:38.745000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-23238,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 15:40:28.954000+00:00 +Internet,RIGHT_case-7267,2011-06-21 00:00:00+00:00,General,2011-05-30 08:37:38.745000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-23242,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 15:46:40.240000+00:00 +Internet,RIGHT_case-7267,2011-06-21 00:00:00+00:00,General,2011-05-30 08:37:38.745000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-23241,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-18 13:15:00.039000+00:00 +Internet,RIGHT_case-7268,2011-06-21 00:00:00+00:00,General,2011-05-12 14:18:55.154000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource01,2011-04-26 00:00:00.020000+00:00,task-24227,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-10 13:31:12.842000+00:00 +Internet,RIGHT_case-7268,2011-06-21 00:00:00+00:00,General,2011-05-12 14:18:55.154000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource01,2011-04-26 00:00:00.020000+00:00,task-24230,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-10 13:31:44.332000+00:00 +Internet,RIGHT_case-7268,2011-06-21 00:00:00+00:00,General,2011-05-12 14:18:55.154000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource01,2011-04-26 00:00:00.020000+00:00,task-24231,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-10 13:32:55.781000+00:00 +Internet,RIGHT_case-7269,2011-06-21 00:00:00+00:00,General,2011-05-30 08:51:10.622000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-23243,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 15:59:57.843000+00:00 +Internet,RIGHT_case-7269,2011-06-21 00:00:00+00:00,General,2011-05-30 08:51:10.622000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-23247,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 16:00:33.777000+00:00 +Internet,RIGHT_case-7269,2011-06-21 00:00:00+00:00,General,2011-05-30 08:51:10.622000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-23248,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-18 13:57:10.042000+00:00 +Desk,RIGHT_case-7270,2011-05-30 00:00:00+00:00,General,2011-06-28 16:02:27.895000+00:00,2011-05-30 00:00:00.020000+00:00,,Resource18,2011-04-04 00:00:00.020000+00:00,task-23475,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-05-03 13:21:36.349000+00:00 +Desk,RIGHT_case-7270,2011-05-30 00:00:00+00:00,General,2011-06-28 16:02:27.895000+00:00,2011-05-30 00:00:00.020000+00:00,,Resource18,2011-04-04 00:00:00.020000+00:00,task-23478,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-05-03 13:22:02.673000+00:00 +Desk,RIGHT_case-7270,2011-05-30 00:00:00+00:00,General,2011-06-28 16:02:27.895000+00:00,2011-05-30 00:00:00.020000+00:00,,Resource18,2011-04-04 00:00:00.020000+00:00,task-27859,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-06-06 14:25:50.932000+00:00 +Internet,RIGHT_case-7272,2011-06-21 01:06:40+00:00,General,,2011-06-21 01:06:40.020000+00:00,Group 5,Resource14,2011-04-26 01:06:40.020000+00:00,task-27646,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-06-06 08:51:25.556000+00:00 +Internet,RIGHT_case-7272,2011-06-21 01:06:40+00:00,General,,2011-06-21 01:06:40.020000+00:00,Group 5,Resource14,2011-04-26 01:06:40.020000+00:00,task-27650,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-06-06 08:52:30.316000+00:00 +Internet,RIGHT_case-7272,2011-06-21 01:06:40+00:00,General,,2011-06-21 01:06:40.020000+00:00,Group 5,Resource14,2011-04-26 01:06:40.020000+00:00,task-27649,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-16 14:49:37.432000+00:00 +Internet,RIGHT_case-7273,2011-08-03 01:06:40+00:00,General,2011-08-03 10:53:58.465000+00:00,2011-08-03 01:06:40.020000+00:00,,Resource02,2011-04-27 01:06:40.020000+00:00,task-23550,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-03 15:36:06.221000+00:00 +Internet,RIGHT_case-7273,2011-08-03 01:06:40+00:00,General,2011-08-03 10:53:58.465000+00:00,2011-08-03 01:06:40.020000+00:00,,Resource02,2011-04-27 01:06:40.020000+00:00,task-23554,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-03 15:45:00.805000+00:00 +Internet,RIGHT_case-7273,2011-08-03 01:06:40+00:00,General,2011-08-03 10:53:58.465000+00:00,2011-08-03 01:06:40.020000+00:00,,Resource02,2011-04-27 01:06:40.020000+00:00,task-23553,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-04 08:33:53.315000+00:00 +Internet,RIGHT_case-7274,2011-04-25 01:06:40+00:00,General,2011-05-03 13:36:04.846000+00:00,2011-04-25 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-22893,T02 Check confirmation of receipt,complete,Group 4,Resource17,2011-05-02 09:19:31.927000+00:00 +Internet,RIGHT_case-7274,2011-04-25 01:06:40+00:00,General,2011-05-03 13:36:04.846000+00:00,2011-04-25 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-22896,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-05-02 09:19:58.328000+00:00 +Internet,RIGHT_case-7274,2011-04-25 01:06:40+00:00,General,2011-05-03 13:36:04.846000+00:00,2011-04-25 01:06:40.020000+00:00,,Resource17,2011-02-28 01:06:40.010000+00:00,task-22898,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-05-02 09:20:22.483000+00:00 +Internet,RIGHT_case-7297,2011-06-21 00:00:00+00:00,General,2011-05-31 08:44:23.922000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-24512,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-11 13:47:21.641000+00:00 +Internet,RIGHT_case-7297,2011-06-21 00:00:00+00:00,General,2011-05-31 08:44:23.922000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-24515,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-11 13:47:58.951000+00:00 +Internet,RIGHT_case-7297,2011-06-21 00:00:00+00:00,General,2011-05-31 08:44:23.922000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource11,2011-04-26 00:00:00.020000+00:00,task-25512,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-18 14:42:17.441000+00:00 +Internet,RIGHT_case-7300,2011-06-23 00:00:00+00:00,General,2011-07-06 11:55:18.834000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-23677,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-04 10:24:34.134000+00:00 +Internet,RIGHT_case-7300,2011-06-23 00:00:00+00:00,General,2011-07-06 11:55:18.834000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-23680,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-04 10:24:55.096000+00:00 +Internet,RIGHT_case-7300,2011-06-23 00:00:00+00:00,General,2011-07-06 11:55:18.834000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-23681,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-04 10:25:18.629000+00:00 +Desk,RIGHT_case-7301,2011-06-03 01:06:40+00:00,General,2011-08-30 10:29:38.597000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource06,2011-04-08 01:06:40.020000+00:00,task-25417,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-18 12:11:28.794000+00:00 +Desk,RIGHT_case-7301,2011-06-03 01:06:40+00:00,General,2011-08-30 10:29:38.597000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource06,2011-04-08 01:06:40.020000+00:00,task-25423,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-18 12:12:00.237000+00:00 +Desk,RIGHT_case-7301,2011-06-03 01:06:40+00:00,General,2011-08-30 10:29:38.597000+00:00,2011-06-23 01:06:40.020000+00:00,,Resource06,2011-04-08 01:06:40.020000+00:00,task-25425,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-18 12:12:42.982000+00:00 +Internet,RIGHT_case-7305,2011-05-02 01:06:40+00:00,General,2011-06-09 16:49:33.859000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-26700,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-27 11:47:20.156000+00:00 +Internet,RIGHT_case-7305,2011-05-02 01:06:40+00:00,General,2011-06-09 16:49:33.859000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-26706,T05 Print and send confirmation of receipt,complete,Group 2,Resource15,2011-05-27 11:47:47.149000+00:00 +Internet,RIGHT_case-7305,2011-05-02 01:06:40+00:00,General,2011-06-09 16:49:33.859000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-26704,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-27 11:48:12.185000+00:00 +Internet,RIGHT_case-7305,2011-05-02 01:06:40+00:00,General,2011-06-09 16:49:33.859000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-26719,T12 Check document X request unlicensed,complete,Group 4,Resource15,2011-05-27 12:06:59.586000+00:00 +Internet,RIGHT_case-7305,2011-05-02 01:06:40+00:00,General,2011-06-09 16:49:33.859000+00:00,2011-05-02 01:06:40.020000+00:00,,Resource15,2011-02-07 01:06:40.010000+00:00,task-26721,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-06-09 16:49:33.600000+00:00 +Desk,RIGHT_case-7310,2011-06-28 01:06:40+00:00,General,2011-07-26 08:47:26.864000+00:00,2011-06-28 01:06:40.020000+00:00,Group 5,Resource22,2011-03-22 01:06:40.010000+00:00,task-23431,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-03 11:43:53.270000+00:00 +Desk,RIGHT_case-7310,2011-06-28 01:06:40+00:00,General,2011-07-26 08:47:26.864000+00:00,2011-06-28 01:06:40.020000+00:00,Group 5,Resource22,2011-03-22 01:06:40.010000+00:00,task-23438,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-03 12:13:17.755000+00:00 +Desk,RIGHT_case-7310,2011-06-28 01:06:40+00:00,General,2011-07-26 08:47:26.864000+00:00,2011-06-28 01:06:40.020000+00:00,Group 5,Resource22,2011-03-22 01:06:40.010000+00:00,task-23434,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 11:36:43.848000+00:00 +Internet,RIGHT_case-7311,2011-06-24 00:00:00+00:00,General,2011-06-24 14:16:14.675000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource02,2011-04-29 00:00:00.020000+00:00,task-23897,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-09 09:47:44.415000+00:00 +Internet,RIGHT_case-7311,2011-06-24 00:00:00+00:00,General,2011-06-24 14:16:14.675000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource02,2011-04-29 00:00:00.020000+00:00,task-23900,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-09 09:48:21.129000+00:00 +Internet,RIGHT_case-7311,2011-06-24 00:00:00+00:00,General,2011-06-24 14:16:14.675000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource02,2011-04-29 00:00:00.020000+00:00,task-23960,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-09 12:06:19.898000+00:00 +Internet,RIGHT_case-7314,2011-06-24 00:00:00+00:00,General,2011-05-30 09:02:48.360000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource11,2011-04-29 00:00:00.020000+00:00,task-24517,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-11 14:00:36.809000+00:00 +Internet,RIGHT_case-7314,2011-06-24 00:00:00+00:00,General,2011-05-30 09:02:48.360000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource11,2011-04-29 00:00:00.020000+00:00,task-24520,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-11 14:01:04.897000+00:00 +Internet,RIGHT_case-7314,2011-06-24 00:00:00+00:00,General,2011-05-30 09:02:48.360000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource11,2011-04-29 00:00:00.020000+00:00,task-25530,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-18 15:01:28.924000+00:00 +Desk,RIGHT_case-7317,2011-06-09 00:00:00+00:00,General,2011-05-31 11:22:16.958000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource14,2011-04-14 00:00:00.020000+00:00,task-25843,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-20 12:09:02.506000+00:00 +Desk,RIGHT_case-7317,2011-06-09 00:00:00+00:00,General,2011-05-31 11:22:16.958000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource14,2011-04-14 00:00:00.020000+00:00,task-25846,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-20 12:09:38.541000+00:00 +Desk,RIGHT_case-7317,2011-06-09 00:00:00+00:00,General,2011-05-31 11:22:16.958000+00:00,2011-06-09 00:00:00.020000+00:00,,Resource14,2011-04-14 00:00:00.020000+00:00,task-25847,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-20 12:10:11.009000+00:00 +Internet,RIGHT_case-7320,2011-06-26 00:00:00+00:00,General,2011-06-28 09:29:37.394000+00:00,2011-06-26 00:00:00.020000+00:00,,Resource02,2011-05-01 00:00:00.020000+00:00,task-24285,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-10 14:21:57.096000+00:00 +Internet,RIGHT_case-7320,2011-06-26 00:00:00+00:00,General,2011-06-28 09:29:37.394000+00:00,2011-06-26 00:00:00.020000+00:00,,Resource02,2011-05-01 00:00:00.020000+00:00,task-24292,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-10 14:54:55.471000+00:00 +Internet,RIGHT_case-7320,2011-06-26 00:00:00+00:00,General,2011-06-28 09:29:37.394000+00:00,2011-06-26 00:00:00.020000+00:00,,Resource02,2011-05-01 00:00:00.020000+00:00,task-24295,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-10 15:52:07.240000+00:00 +Internet,RIGHT_case-7322,2011-05-31 01:06:40+00:00,General,2011-10-07 16:30:37.337000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource14,2011-04-05 01:06:40.020000+00:00,task-25674,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-19 11:46:51.028000+00:00 +Internet,RIGHT_case-7322,2011-05-31 01:06:40+00:00,General,2011-10-07 16:30:37.337000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource14,2011-04-05 01:06:40.020000+00:00,task-25678,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-19 11:47:26.113000+00:00 +Internet,RIGHT_case-7322,2011-05-31 01:06:40+00:00,General,2011-10-07 16:30:37.337000+00:00,2011-05-31 01:06:40.020000+00:00,,Resource14,2011-04-05 01:06:40.020000+00:00,task-28149,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-06-07 13:59:07.546000+00:00 +e-mail,RIGHT_case-7341,2011-06-24 01:06:40+00:00,General,2011-05-20 11:59:47.595000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource02,2011-04-29 01:06:40.020000+00:00,task-24131,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-10 10:23:38.909000+00:00 +e-mail,RIGHT_case-7341,2011-06-24 01:06:40+00:00,General,2011-05-20 11:59:47.595000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource02,2011-04-29 01:06:40.020000+00:00,task-24134,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-10 10:24:07.661000+00:00 +e-mail,RIGHT_case-7341,2011-06-24 01:06:40+00:00,General,2011-05-20 11:59:47.595000+00:00,2011-06-24 01:06:40.020000+00:00,,Resource02,2011-04-29 01:06:40.020000+00:00,task-24136,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-10 10:33:12.883000+00:00 +Internet,RIGHT_case-7349,2011-06-06 00:00:00+00:00,General,2011-06-01 15:45:41.973000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource15,2011-05-03 00:00:00.020000+00:00,task-24146,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-10 10:42:29.658000+00:00 +Internet,RIGHT_case-7349,2011-06-06 00:00:00+00:00,General,2011-06-01 15:45:41.973000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource15,2011-05-03 00:00:00.020000+00:00,task-24152,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-10 10:43:16.934000+00:00 +Internet,RIGHT_case-7349,2011-06-06 00:00:00+00:00,General,2011-06-01 15:45:41.973000+00:00,2011-06-06 00:00:00.020000+00:00,,Resource15,2011-05-03 00:00:00.020000+00:00,task-24150,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:20:10.993000+00:00 +Internet,RIGHT_case-7358,2011-06-29 01:06:40+00:00,General,2011-09-02 10:03:10.286000+00:00,2011-06-29 01:06:40.020000+00:00,Group 5,Resource09,2011-05-04 01:06:40.020000+00:00,task-24194,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-10 12:11:56.155000+00:00 +Internet,RIGHT_case-7358,2011-06-29 01:06:40+00:00,General,2011-09-02 10:03:10.286000+00:00,2011-06-29 01:06:40.020000+00:00,Group 5,Resource09,2011-05-04 01:06:40.020000+00:00,task-24200,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:22:53.530000+00:00 +Internet,RIGHT_case-7358,2011-06-29 01:06:40+00:00,General,2011-09-02 10:03:10.286000+00:00,2011-06-29 01:06:40.020000+00:00,Group 5,Resource09,2011-05-04 01:06:40.020000+00:00,task-27147,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-30 13:59:04.568000+00:00 +Post,RIGHT_case-7362,2011-06-14 00:00:00+00:00,General,2011-08-03 10:41:37.121000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource09,2011-04-19 00:00:00.020000+00:00,task-28342,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-06-08 14:09:29.570000+00:00 +Post,RIGHT_case-7362,2011-06-14 00:00:00+00:00,General,2011-08-03 10:41:37.121000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource09,2011-04-19 00:00:00.020000+00:00,task-28346,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-06-08 14:10:06.215000+00:00 +Post,RIGHT_case-7362,2011-06-14 00:00:00+00:00,General,2011-08-03 10:41:37.121000+00:00,2011-06-14 00:00:00.020000+00:00,,Resource09,2011-04-19 00:00:00.020000+00:00,task-28344,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-06-08 14:10:29.567000+00:00 +Post,RIGHT_case-7363,2011-06-15 00:00:00+00:00,General,2011-05-31 08:36:31.861000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource12,2011-04-20 00:00:00.020000+00:00,task-25272,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-17 12:40:16.987000+00:00 +Post,RIGHT_case-7363,2011-06-15 00:00:00+00:00,General,2011-05-31 08:36:31.861000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource12,2011-04-20 00:00:00.020000+00:00,task-25275,T05 Print and send confirmation of receipt,complete,EMPTY,Resource12,2011-05-26 14:10:03.991000+00:00 +Post,RIGHT_case-7363,2011-06-15 00:00:00+00:00,General,2011-05-31 08:36:31.861000+00:00,2011-06-15 00:00:00.020000+00:00,,Resource12,2011-04-20 00:00:00.020000+00:00,task-26506,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-26 14:15:27.393000+00:00 +Internet,RIGHT_case-7364,2011-06-29 01:06:40+00:00,General,2011-05-11 11:59:11.016000+00:00,2011-06-29 01:06:40.020000+00:00,,Resource02,2011-05-04 01:06:40.020000+00:00,task-24471,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-11 11:46:51.298000+00:00 +Internet,RIGHT_case-7364,2011-06-29 01:06:40+00:00,General,2011-05-11 11:59:11.016000+00:00,2011-06-29 01:06:40.020000+00:00,,Resource02,2011-05-04 01:06:40.020000+00:00,task-24474,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-11 11:47:16.821000+00:00 +Internet,RIGHT_case-7364,2011-06-29 01:06:40+00:00,General,2011-05-11 11:59:11.016000+00:00,2011-06-29 01:06:40.020000+00:00,,Resource02,2011-05-04 01:06:40.020000+00:00,task-24475,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-11 11:49:14.353000+00:00 +Internet,RIGHT_case-7364,2011-06-29 01:06:40+00:00,General,2011-05-11 11:59:11.016000+00:00,2011-06-29 01:06:40.020000+00:00,,Resource02,2011-05-04 01:06:40.020000+00:00,task-24478,T12 Check document X request unlicensed,complete,Group 4,Resource02,2011-05-11 11:58:31.858000+00:00 +Internet,RIGHT_case-7364,2011-06-29 01:06:40+00:00,General,2011-05-11 11:59:11.016000+00:00,2011-06-29 01:06:40.020000+00:00,,Resource02,2011-05-04 01:06:40.020000+00:00,task-24481,T15 Print document X request unlicensed,complete,Group 2,Resource02,2011-05-11 11:59:10.860000+00:00 +Internet,RIGHT_case-7416,2011-06-28 00:00:00+00:00,General,2011-11-18 11:17:34.048000+00:00,2011-06-28 00:00:00.020000+00:00,,admin1,2011-05-03 00:00:00.020000+00:00,task-28087,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-06-07 11:31:43.390000+00:00 +Internet,RIGHT_case-7416,2011-06-28 00:00:00+00:00,General,2011-11-18 11:17:34.048000+00:00,2011-06-28 00:00:00.020000+00:00,,admin1,2011-05-03 00:00:00.020000+00:00,task-28090,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-06-07 11:32:13.508000+00:00 +Internet,RIGHT_case-7416,2011-06-28 00:00:00+00:00,General,2011-11-18 11:17:34.048000+00:00,2011-06-28 00:00:00.020000+00:00,,admin1,2011-05-03 00:00:00.020000+00:00,task-28091,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-06-07 11:33:00.325000+00:00 +Internet,RIGHT_case-7418,2011-06-24 00:00:00+00:00,General,2011-10-26 11:29:00.694000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource12,2011-04-29 00:00:00.020000+00:00,task-25119,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-16 11:45:39.109000+00:00 +Internet,RIGHT_case-7418,2011-06-24 00:00:00+00:00,General,2011-10-26 11:29:00.694000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource12,2011-04-29 00:00:00.020000+00:00,task-25124,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-18 14:15:11.109000+00:00 +Internet,RIGHT_case-7418,2011-06-24 00:00:00+00:00,General,2011-10-26 11:29:00.694000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource12,2011-04-29 00:00:00.020000+00:00,task-27729,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-06-06 10:53:34.816000+00:00 +Desk,RIGHT_case-7421,2011-05-26 00:00:00+00:00,General,2011-05-25 10:32:35.580000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource06,2011-03-31 00:00:00.020000+00:00,task-24770,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-12 15:10:46.281000+00:00 +Desk,RIGHT_case-7421,2011-05-26 00:00:00+00:00,General,2011-05-25 10:32:35.580000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource06,2011-03-31 00:00:00.020000+00:00,task-24782,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-12 15:11:16.129000+00:00 +Desk,RIGHT_case-7421,2011-05-26 00:00:00+00:00,General,2011-05-25 10:32:35.580000+00:00,2011-05-26 00:00:00.020000+00:00,,Resource06,2011-03-31 00:00:00.020000+00:00,task-24779,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-12 15:11:33.621000+00:00 +Internet,RIGHT_case-7423,2011-07-14 01:06:40+00:00,General,2011-10-14 16:31:58.382000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-04 01:06:40.020000+00:00,task-24143,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-10 10:40:55.744000+00:00 +Internet,RIGHT_case-7423,2011-07-14 01:06:40+00:00,General,2011-10-14 16:31:58.382000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-04 01:06:40.020000+00:00,task-24151,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-05-10 10:43:09.945000+00:00 +Internet,RIGHT_case-7423,2011-07-14 01:06:40+00:00,General,2011-10-14 16:31:58.382000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-04 01:06:40.020000+00:00,task-24148,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:18:36.425000+00:00 +Post,RIGHT_case-7425,2011-06-20 01:06:40+00:00,General,2011-07-15 11:12:45.695000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource18,2011-04-25 01:06:40.020000+00:00,task-28995,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-06-17 14:31:43.842000+00:00 +Post,RIGHT_case-7425,2011-06-20 01:06:40+00:00,General,2011-07-15 11:12:45.695000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource18,2011-04-25 01:06:40.020000+00:00,task-29000,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-06-17 14:32:31.221000+00:00 +Post,RIGHT_case-7425,2011-06-20 01:06:40+00:00,General,2011-07-15 11:12:45.695000+00:00,2011-06-20 01:06:40.020000+00:00,,Resource18,2011-04-25 01:06:40.020000+00:00,task-29002,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-06-17 14:33:05.734000+00:00 +Post,RIGHT_case-7426,2011-06-20 00:00:00+00:00,General,2011-07-20 10:35:05.430000+00:00,2011-06-20 00:00:00.020000+00:00,,Resource18,2011-04-25 00:00:00.020000+00:00,task-29320,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-06-21 13:53:58.826000+00:00 +Post,RIGHT_case-7426,2011-06-20 00:00:00+00:00,General,2011-07-20 10:35:05.430000+00:00,2011-06-20 00:00:00.020000+00:00,,Resource18,2011-04-25 00:00:00.020000+00:00,task-29323,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-06-21 13:55:16.225000+00:00 +Post,RIGHT_case-7426,2011-06-20 00:00:00+00:00,General,2011-07-20 10:35:05.430000+00:00,2011-06-20 00:00:00.020000+00:00,,Resource18,2011-04-25 00:00:00.020000+00:00,task-29324,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-06-21 13:55:38.695000+00:00 +Internet,RIGHT_case-7442,2011-06-30 00:00:00+00:00,General,2011-05-23 14:00:45.003000+00:00,2011-06-30 00:00:00.020000+00:00,,Resource11,2011-05-05 00:00:00.020000+00:00,task-25009,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-13 15:04:14.452000+00:00 +Internet,RIGHT_case-7442,2011-06-30 00:00:00+00:00,General,2011-05-23 14:00:45.003000+00:00,2011-06-30 00:00:00.020000+00:00,,Resource11,2011-05-05 00:00:00.020000+00:00,task-25012,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-13 15:04:47.925000+00:00 +Internet,RIGHT_case-7442,2011-06-30 00:00:00+00:00,General,2011-05-23 14:00:45.003000+00:00,2011-06-30 00:00:00.020000+00:00,,Resource11,2011-05-05 00:00:00.020000+00:00,task-25014,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-05-13 15:05:14.064000+00:00 +Internet,RIGHT_case-7443,2011-07-03 01:06:40+00:00,General,2011-05-11 15:00:12.108000+00:00,2011-07-03 01:06:40.020000+00:00,,Resource02,2011-05-08 01:06:40.020000+00:00,task-24521,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-11 14:36:02.557000+00:00 +Internet,RIGHT_case-7443,2011-07-03 01:06:40+00:00,General,2011-05-11 15:00:12.108000+00:00,2011-07-03 01:06:40.020000+00:00,,Resource02,2011-05-08 01:06:40.020000+00:00,task-24524,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-11 14:36:36.997000+00:00 +Internet,RIGHT_case-7443,2011-07-03 01:06:40+00:00,General,2011-05-11 15:00:12.108000+00:00,2011-07-03 01:06:40.020000+00:00,,Resource02,2011-05-08 01:06:40.020000+00:00,task-24526,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-11 14:37:10.431000+00:00 +Internet,RIGHT_case-7443,2011-07-03 01:06:40+00:00,General,2011-05-11 15:00:12.108000+00:00,2011-07-03 01:06:40.020000+00:00,,Resource02,2011-05-08 01:06:40.020000+00:00,task-24536,T12 Check document X request unlicensed,complete,Group 4,Resource02,2011-05-11 14:59:39.929000+00:00 +Internet,RIGHT_case-7443,2011-07-03 01:06:40+00:00,General,2011-05-11 15:00:12.108000+00:00,2011-07-03 01:06:40.020000+00:00,,Resource02,2011-05-08 01:06:40.020000+00:00,task-24538,T15 Print document X request unlicensed,complete,Group 2,Resource02,2011-05-11 15:00:11.935000+00:00 +Desk,RIGHT_case-7469,2011-07-03 01:06:40+00:00,General,2011-06-09 11:56:05.923000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource11,2011-04-27 01:06:40.020000+00:00,task-24940,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-13 13:02:51.992000+00:00 +Desk,RIGHT_case-7469,2011-07-03 01:06:40+00:00,General,2011-06-09 11:56:05.923000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource11,2011-04-27 01:06:40.020000+00:00,task-24963,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-13 13:03:23.711000+00:00 +Desk,RIGHT_case-7469,2011-07-03 01:06:40+00:00,General,2011-06-09 11:56:05.923000+00:00,2011-06-22 01:06:40.020000+00:00,,Resource11,2011-04-27 01:06:40.020000+00:00,task-24966,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-05-13 13:04:15.024000+00:00 +Desk,RIGHT_case-7472,2011-06-16 01:06:40+00:00,General,2011-06-16 10:45:12.296000+00:00,2011-06-16 01:06:40.020000+00:00,,Resource08,2011-04-21 01:06:40.020000+00:00,task-24772,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-12 15:09:53.175000+00:00 +Desk,RIGHT_case-7472,2011-06-16 01:06:40+00:00,General,2011-06-16 10:45:12.296000+00:00,2011-06-16 01:06:40.020000+00:00,,Resource08,2011-04-21 01:06:40.020000+00:00,task-24783,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-05-12 15:43:48.350000+00:00 +Desk,RIGHT_case-7472,2011-06-16 01:06:40+00:00,General,2011-06-16 10:45:12.296000+00:00,2011-06-16 01:06:40.020000+00:00,,Resource08,2011-04-21 01:06:40.020000+00:00,task-24781,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-13 13:54:06.020000+00:00 +Desk,RIGHT_case-7477,2011-06-13 00:00:00+00:00,General,2011-06-06 07:30:41.375000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-24774,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-12 15:10:02.025000+00:00 +Desk,RIGHT_case-7477,2011-06-13 00:00:00+00:00,General,2011-06-06 07:30:41.375000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-24778,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-12 15:10:42.004000+00:00 +Desk,RIGHT_case-7477,2011-06-13 00:00:00+00:00,General,2011-06-06 07:30:41.375000+00:00,2011-06-13 00:00:00.020000+00:00,,Resource11,2011-04-18 00:00:00.020000+00:00,task-24990,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-05-13 14:45:00.938000+00:00 +Desk,RIGHT_case-7497,2011-07-21 01:06:40+00:00,General,2011-07-20 09:23:56.285000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource13,2011-04-21 01:06:40.020000+00:00,task-25828,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-05-20 11:20:28.356000+00:00 +Desk,RIGHT_case-7497,2011-07-21 01:06:40+00:00,General,2011-07-20 09:23:56.285000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource13,2011-04-21 01:06:40.020000+00:00,task-25831,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-05-20 11:49:46.080000+00:00 +Desk,RIGHT_case-7497,2011-07-21 01:06:40+00:00,General,2011-07-20 09:23:56.285000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource13,2011-04-21 01:06:40.020000+00:00,task-26360,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-27 16:42:41.664000+00:00 +Desk,RIGHT_case-7503,2011-09-15 01:06:40+00:00,General,2011-09-15 12:22:10.181000+00:00,2011-09-15 01:06:40.020000+00:00,,Resource06,2011-04-28 01:06:40.020000+00:00,task-26592,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-26 16:52:36.320000+00:00 +Desk,RIGHT_case-7503,2011-09-15 01:06:40+00:00,General,2011-09-15 12:22:10.181000+00:00,2011-09-15 01:06:40.020000+00:00,,Resource06,2011-04-28 01:06:40.020000+00:00,task-26595,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-26 16:53:01.304000+00:00 +Desk,RIGHT_case-7503,2011-09-15 01:06:40+00:00,General,2011-09-15 12:22:10.181000+00:00,2011-09-15 01:06:40.020000+00:00,,Resource06,2011-04-28 01:06:40.020000+00:00,task-26596,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-26 16:53:27.922000+00:00 +Internet,RIGHT_case-7523,2011-09-20 01:06:40+00:00,General,2011-09-01 12:40:46.536000+00:00,2011-09-20 01:06:40.020000+00:00,,Resource02,2011-05-10 01:06:40.020000+00:00,task-26165,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-24 09:51:50.622000+00:00 +Internet,RIGHT_case-7523,2011-09-20 01:06:40+00:00,General,2011-09-01 12:40:46.536000+00:00,2011-09-20 01:06:40.020000+00:00,,Resource02,2011-05-10 01:06:40.020000+00:00,task-26168,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-24 09:52:32.606000+00:00 +Internet,RIGHT_case-7523,2011-09-20 01:06:40+00:00,General,2011-09-01 12:40:46.536000+00:00,2011-09-20 01:06:40.020000+00:00,,Resource02,2011-05-10 01:06:40.020000+00:00,task-26181,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-24 10:27:12.156000+00:00 +Internet,RIGHT_case-7525,2011-08-01 01:06:40+00:00,General,2011-08-02 11:10:20.030000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource02,2011-05-11 01:06:40.020000+00:00,task-26111,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-06-01 07:54:17.642000+00:00 +Internet,RIGHT_case-7525,2011-08-01 01:06:40+00:00,General,2011-08-02 11:10:20.030000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource02,2011-05-11 01:06:40.020000+00:00,task-27393,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-06-01 07:54:42.362000+00:00 +Internet,RIGHT_case-7525,2011-08-01 01:06:40+00:00,General,2011-08-02 11:10:20.030000+00:00,2011-08-01 01:06:40.020000+00:00,,Resource02,2011-05-11 01:06:40.020000+00:00,task-27450,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-06-01 12:52:48.457000+00:00 +Desk,RIGHT_case-7535,2011-06-21 00:00:00+00:00,General,2011-05-27 09:10:17.111000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource08,2011-04-26 00:00:00.020000+00:00,task-25761,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-05-19 14:19:34.284000+00:00 +Desk,RIGHT_case-7535,2011-06-21 00:00:00+00:00,General,2011-05-27 09:10:17.111000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource08,2011-04-26 00:00:00.020000+00:00,task-25758,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-19 14:20:39.344000+00:00 +Desk,RIGHT_case-7535,2011-06-21 00:00:00+00:00,General,2011-05-27 09:10:17.111000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource08,2011-04-26 00:00:00.020000+00:00,task-25764,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-05-19 14:21:55.516000+00:00 +Desk,RIGHT_case-7535,2011-06-21 00:00:00+00:00,General,2011-05-27 09:10:17.111000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource08,2011-04-26 00:00:00.020000+00:00,task-25813,T12 Check document X request unlicensed,complete,EMPTY,Resource04,2011-05-20 10:44:33.248000+00:00 +Desk,RIGHT_case-7535,2011-06-21 00:00:00+00:00,General,2011-05-27 09:10:17.111000+00:00,2011-06-21 00:00:00.020000+00:00,,Resource08,2011-04-26 00:00:00.020000+00:00,task-25825,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-05-27 09:10:16.853000+00:00 +Desk,RIGHT_case-7541,2011-06-23 00:00:00+00:00,General,2011-06-01 11:08:31.534000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-25682,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-19 11:55:51.485000+00:00 +Desk,RIGHT_case-7541,2011-06-23 00:00:00+00:00,General,2011-06-01 11:08:31.534000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-25686,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-19 11:56:13.624000+00:00 +Desk,RIGHT_case-7541,2011-06-23 00:00:00+00:00,General,2011-06-01 11:08:31.534000+00:00,2011-06-23 00:00:00.020000+00:00,,Resource04,2011-04-28 00:00:00.020000+00:00,task-25684,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-19 11:56:26.335000+00:00 +Internet,RIGHT_case-7556,2011-07-06 00:00:00+00:00,General,2011-07-11 11:35:18.493000+00:00,2011-07-06 00:00:00.020000+00:00,Group 5,Resource02,2011-05-11 00:00:00.020000+00:00,task-26618,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-27 09:16:25.219000+00:00 +Internet,RIGHT_case-7556,2011-07-06 00:00:00+00:00,General,2011-07-11 11:35:18.493000+00:00,2011-07-06 00:00:00.020000+00:00,Group 5,Resource02,2011-05-11 00:00:00.020000+00:00,task-26621,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-06-01 13:43:51.381000+00:00 +Internet,RIGHT_case-7556,2011-07-06 00:00:00+00:00,General,2011-07-11 11:35:18.493000+00:00,2011-07-06 00:00:00.020000+00:00,Group 5,Resource02,2011-05-11 00:00:00.020000+00:00,task-27528,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-06-01 13:48:31.441000+00:00 +Internet,RIGHT_case-7558,2011-07-06 00:00:00+00:00,General,2011-05-31 00:00:00.020000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource12,2011-05-11 00:00:00.020000+00:00,task-26385,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-26 09:32:42.394000+00:00 +Internet,RIGHT_case-7558,2011-07-06 00:00:00+00:00,General,2011-05-31 00:00:00.020000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource12,2011-05-11 00:00:00.020000+00:00,task-26388,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-05-26 09:33:32.502000+00:00 +Internet,RIGHT_case-7558,2011-07-06 00:00:00+00:00,General,2011-05-31 00:00:00.020000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource12,2011-05-11 00:00:00.020000+00:00,task-26389,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-26 09:34:55.274000+00:00 +Internet,RIGHT_case-7563,2011-07-07 00:00:00+00:00,General,2011-06-06 14:57:38.616000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-25503,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-18 14:26:58.692000+00:00 +Internet,RIGHT_case-7563,2011-07-07 00:00:00+00:00,General,2011-06-06 14:57:38.616000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-25507,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-18 14:29:03.693000+00:00 +Internet,RIGHT_case-7563,2011-07-07 00:00:00+00:00,General,2011-06-06 14:57:38.616000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-26405,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-26 13:15:05.892000+00:00 +Internet,RIGHT_case-7565,2011-08-18 01:06:40+00:00,General,2011-08-15 11:57:56.227000+00:00,2011-08-18 01:06:40.020000+00:00,,Resource13,2011-05-12 01:06:40.020000+00:00,task-26134,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-05-24 07:15:21.853000+00:00 +Internet,RIGHT_case-7565,2011-08-18 01:06:40+00:00,General,2011-08-15 11:57:56.227000+00:00,2011-08-18 01:06:40.020000+00:00,,Resource13,2011-05-12 01:06:40.020000+00:00,task-26137,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-05-24 07:15:54.256000+00:00 +Internet,RIGHT_case-7565,2011-08-18 01:06:40+00:00,General,2011-08-15 11:57:56.227000+00:00,2011-08-18 01:06:40.020000+00:00,,Resource13,2011-05-12 01:06:40.020000+00:00,task-26362,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-27 16:36:58.131000+00:00 +Internet,RIGHT_case-7566,2011-07-07 00:00:00+00:00,General,2011-08-22 12:42:33.383000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource05,2011-05-12 00:00:00.020000+00:00,task-26023,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-23 12:19:03.199000+00:00 +Internet,RIGHT_case-7566,2011-07-07 00:00:00+00:00,General,2011-08-22 12:42:33.383000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource05,2011-05-12 00:00:00.020000+00:00,task-26031,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-05-23 12:23:44.401000+00:00 +Internet,RIGHT_case-7566,2011-07-07 00:00:00+00:00,General,2011-08-22 12:42:33.383000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource05,2011-05-12 00:00:00.020000+00:00,task-26035,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-23 12:24:26.728000+00:00 +Internet,RIGHT_case-7567,2011-07-07 00:00:00+00:00,General,2011-06-09 11:33:30.970000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-25508,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-18 14:35:12.999000+00:00 +Internet,RIGHT_case-7567,2011-07-07 00:00:00+00:00,General,2011-06-09 11:33:30.970000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-25511,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-18 14:35:33.678000+00:00 +Internet,RIGHT_case-7567,2011-07-07 00:00:00+00:00,General,2011-06-09 11:33:30.970000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource11,2011-05-12 00:00:00.020000+00:00,task-26050,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-05-23 12:30:48.690000+00:00 +Internet,RIGHT_case-7568,2011-07-07 00:00:00+00:00,General,2011-08-30 12:09:03.786000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource18,2011-05-12 00:00:00.020000+00:00,task-29187,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-06-20 14:29:31.825000+00:00 +Internet,RIGHT_case-7568,2011-07-07 00:00:00+00:00,General,2011-08-30 12:09:03.786000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource18,2011-05-12 00:00:00.020000+00:00,task-29190,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-06-20 14:30:36.903000+00:00 +Internet,RIGHT_case-7568,2011-07-07 00:00:00+00:00,General,2011-08-30 12:09:03.786000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource18,2011-05-12 00:00:00.020000+00:00,task-29191,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-06-20 14:36:47.178000+00:00 +Internet,RIGHT_case-7569,2011-07-07 00:00:00+00:00,General,2011-08-30 13:50:32.613000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource12,2011-05-12 00:00:00.020000+00:00,task-27657,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-06-06 09:49:11.050000+00:00 +Internet,RIGHT_case-7569,2011-07-07 00:00:00+00:00,General,2011-08-30 13:50:32.613000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource12,2011-05-12 00:00:00.020000+00:00,task-27653,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-06-06 10:28:13.678000+00:00 +Internet,RIGHT_case-7569,2011-07-07 00:00:00+00:00,General,2011-08-30 13:50:32.613000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource12,2011-05-12 00:00:00.020000+00:00,task-27712,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-06-06 10:29:20.577000+00:00 +Internet,RIGHT_case-7570,2011-07-10 00:00:00+00:00,General,2011-07-11 12:17:31.615000+00:00,2011-07-10 00:00:00.020000+00:00,,Resource01,2011-05-15 00:00:00.020000+00:00,task-25887,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-20 15:09:03.161000+00:00 +Internet,RIGHT_case-7570,2011-07-10 00:00:00+00:00,General,2011-07-11 12:17:31.615000+00:00,2011-07-10 00:00:00.020000+00:00,,Resource01,2011-05-15 00:00:00.020000+00:00,task-25890,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-20 15:09:32.818000+00:00 +Internet,RIGHT_case-7570,2011-07-10 00:00:00+00:00,General,2011-07-11 12:17:31.615000+00:00,2011-07-10 00:00:00.020000+00:00,,Resource01,2011-05-15 00:00:00.020000+00:00,task-26455,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-26 13:28:10.860000+00:00 +Desk,RIGHT_case-7579,2011-07-04 00:00:00+00:00,General,2011-07-01 15:17:49.913000+00:00,2011-07-04 00:00:00.020000+00:00,,Resource15,2011-05-09 00:00:00.020000+00:00,task-26010,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-23 11:01:33.395000+00:00 +Desk,RIGHT_case-7579,2011-07-04 00:00:00+00:00,General,2011-07-01 15:17:49.913000+00:00,2011-07-04 00:00:00.020000+00:00,,Resource15,2011-05-09 00:00:00.020000+00:00,task-26014,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-23 11:09:42.193000+00:00 +Desk,RIGHT_case-7579,2011-07-04 00:00:00+00:00,General,2011-07-01 15:17:49.913000+00:00,2011-07-04 00:00:00.020000+00:00,,Resource15,2011-05-09 00:00:00.020000+00:00,task-26013,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-25 14:42:15.186000+00:00 +Internet,RIGHT_case-7584,2011-07-13 00:00:00+00:00,General,2011-08-18 08:47:56.972000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource21,2011-05-18 00:00:00.020000+00:00,task-25385,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-05-18 10:51:50.824000+00:00 +Internet,RIGHT_case-7584,2011-07-13 00:00:00+00:00,General,2011-08-18 08:47:56.972000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource21,2011-05-18 00:00:00.020000+00:00,task-25389,T05 Print and send confirmation of receipt,complete,EMPTY,Resource21,2011-05-18 11:11:45.588000+00:00 +Internet,RIGHT_case-7584,2011-07-13 00:00:00+00:00,General,2011-08-18 08:47:56.972000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource21,2011-05-18 00:00:00.020000+00:00,task-25396,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-05-18 11:13:46.642000+00:00 +Desk,RIGHT_case-7590,2011-06-24 00:00:00+00:00,General,2011-06-24 14:21:57.533000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource05,2011-04-29 00:00:00.020000+00:00,task-26906,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-30 09:39:32.529000+00:00 +Desk,RIGHT_case-7590,2011-06-24 00:00:00+00:00,General,2011-06-24 14:21:57.533000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource05,2011-04-29 00:00:00.020000+00:00,task-26909,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-30 09:40:02.614000+00:00 +Desk,RIGHT_case-7590,2011-06-24 00:00:00+00:00,General,2011-06-24 14:21:57.533000+00:00,2011-06-24 00:00:00.020000+00:00,,Resource05,2011-04-29 00:00:00.020000+00:00,task-26911,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-05-30 09:40:29.230000+00:00 +Internet,RIGHT_case-7612,2011-07-11 00:00:00+00:00,General,2011-10-31 10:00:36.314000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource09,2011-05-16 00:00:00.020000+00:00,task-28171,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-06-07 14:25:16.883000+00:00 +Internet,RIGHT_case-7612,2011-07-11 00:00:00+00:00,General,2011-10-31 10:00:36.314000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource09,2011-05-16 00:00:00.020000+00:00,task-28169,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-06-07 14:33:36.977000+00:00 +Internet,RIGHT_case-7612,2011-07-11 00:00:00+00:00,General,2011-10-31 10:00:36.314000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource09,2011-05-16 00:00:00.020000+00:00,task-28189,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-06-07 14:34:11.512000+00:00 +Internet,RIGHT_case-7612,2011-07-11 00:00:00+00:00,General,2011-10-31 10:00:36.314000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource09,2011-05-16 00:00:00.020000+00:00,task-28191,T17 Check report Y to stop indication,complete,Group 4,Resource09,2011-06-07 14:35:57.851000+00:00 +Internet,RIGHT_case-7612,2011-07-11 00:00:00+00:00,General,2011-10-31 10:00:36.314000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource09,2011-05-16 00:00:00.020000+00:00,task-28195,T20 Print report Y to stop indication,complete,Group 2,Resource09,2011-06-07 14:36:33.149000+00:00 +Internet,RIGHT_case-7628,2011-08-22 01:06:40+00:00,General,2011-08-22 16:26:36.759000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-27785,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-06-06 12:13:52.282000+00:00 +Internet,RIGHT_case-7628,2011-08-22 01:06:40+00:00,General,2011-08-22 16:26:36.759000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-27789,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-06-06 14:34:53.869000+00:00 +Internet,RIGHT_case-7628,2011-08-22 01:06:40+00:00,General,2011-08-22 16:26:36.759000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-27788,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-16 14:55:30.762000+00:00 +Desk,RIGHT_case-7630,2011-07-20 01:06:40+00:00,General,2011-07-20 08:55:48.402000+00:00,2011-07-20 01:06:40.020000+00:00,,admin1,2011-04-27 01:06:40.020000+00:00,task-27013,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-05-30 12:03:00.090000+00:00 +Desk,RIGHT_case-7630,2011-07-20 01:06:40+00:00,General,2011-07-20 08:55:48.402000+00:00,2011-07-20 01:06:40.020000+00:00,,admin1,2011-04-27 01:06:40.020000+00:00,task-27032,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-05-30 12:17:50.321000+00:00 +Desk,RIGHT_case-7630,2011-07-20 01:06:40+00:00,General,2011-07-20 08:55:48.402000+00:00,2011-07-20 01:06:40.020000+00:00,,admin1,2011-04-27 01:06:40.020000+00:00,task-27033,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-05-30 12:18:43.648000+00:00 +Internet,RIGHT_case-7631,2011-07-12 01:06:40+00:00,General,2011-07-13 15:54:41.180000+00:00,2011-07-12 01:06:40.020000+00:00,,Resource17,2011-05-17 01:06:40.020000+00:00,task-26513,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-05-26 14:24:59.277000+00:00 +Internet,RIGHT_case-7631,2011-07-12 01:06:40+00:00,General,2011-07-13 15:54:41.180000+00:00,2011-07-12 01:06:40.020000+00:00,,Resource17,2011-05-17 01:06:40.020000+00:00,task-26516,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-05-26 14:25:29.587000+00:00 +Internet,RIGHT_case-7631,2011-07-12 01:06:40+00:00,General,2011-07-13 15:54:41.180000+00:00,2011-07-12 01:06:40.020000+00:00,,Resource17,2011-05-17 01:06:40.020000+00:00,task-26615,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-27 16:38:33.295000+00:00 +Internet,RIGHT_case-7632,2011-07-13 01:06:40+00:00,General,2011-07-12 11:04:49.692000+00:00,2011-07-13 01:06:40.020000+00:00,,Resource02,2011-05-18 01:06:40.020000+00:00,task-27260,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-31 09:36:32.347000+00:00 +Internet,RIGHT_case-7632,2011-07-13 01:06:40+00:00,General,2011-07-12 11:04:49.692000+00:00,2011-07-13 01:06:40.020000+00:00,,Resource02,2011-05-18 01:06:40.020000+00:00,task-27263,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-31 09:37:11.068000+00:00 +Internet,RIGHT_case-7632,2011-07-13 01:06:40+00:00,General,2011-07-12 11:04:49.692000+00:00,2011-07-13 01:06:40.020000+00:00,,Resource02,2011-05-18 01:06:40.020000+00:00,task-27265,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-31 09:37:49.357000+00:00 +Internet,RIGHT_case-7665,2011-07-14 01:06:40+00:00,General,2011-06-21 14:23:14.147000+00:00,2011-07-14 01:06:40.020000+00:00,,Resource11,2011-05-19 01:06:40.020000+00:00,task-26518,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-26 14:28:46.240000+00:00 +Internet,RIGHT_case-7665,2011-07-14 01:06:40+00:00,General,2011-06-21 14:23:14.147000+00:00,2011-07-14 01:06:40.020000+00:00,,Resource11,2011-05-19 01:06:40.020000+00:00,task-26522,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-26 14:29:48.159000+00:00 +Internet,RIGHT_case-7665,2011-07-14 01:06:40+00:00,General,2011-06-21 14:23:14.147000+00:00,2011-07-14 01:06:40.020000+00:00,,Resource11,2011-05-19 01:06:40.020000+00:00,task-26521,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-26 14:30:06.571000+00:00 +Internet,RIGHT_case-7666,2011-07-14 00:00:00+00:00,General,2011-06-22 09:03:31.262000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26540,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-26 14:41:26.162000+00:00 +Internet,RIGHT_case-7666,2011-07-14 00:00:00+00:00,General,2011-06-22 09:03:31.262000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26543,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-26 14:41:53.389000+00:00 +Internet,RIGHT_case-7666,2011-07-14 00:00:00+00:00,General,2011-06-22 09:03:31.262000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26544,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-26 14:42:19.997000+00:00 +Internet,RIGHT_case-7667,2011-07-14 00:00:00+00:00,General,2011-06-22 08:58:43.213000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26561,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-26 14:54:07.601000+00:00 +Internet,RIGHT_case-7667,2011-07-14 00:00:00+00:00,General,2011-06-22 08:58:43.213000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26564,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-26 14:54:32.257000+00:00 +Internet,RIGHT_case-7667,2011-07-14 00:00:00+00:00,General,2011-06-22 08:58:43.213000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource11,2011-05-19 00:00:00.020000+00:00,task-26565,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-26 14:55:25.840000+00:00 +Internet,RIGHT_case-7683,2011-07-14 00:00:00+00:00,General,2011-07-13 16:40:02.484000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource02,2011-05-19 00:00:00.020000+00:00,task-26311,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-25 14:46:34.153000+00:00 +Internet,RIGHT_case-7683,2011-07-14 00:00:00+00:00,General,2011-07-13 16:40:02.484000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource02,2011-05-19 00:00:00.020000+00:00,task-26314,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-25 14:47:12.893000+00:00 +Internet,RIGHT_case-7683,2011-07-14 00:00:00+00:00,General,2011-07-13 16:40:02.484000+00:00,2011-07-14 00:00:00.020000+00:00,,Resource02,2011-05-19 00:00:00.020000+00:00,task-26315,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-25 14:57:15.886000+00:00 +Internet,RIGHT_case-7685,2011-07-14 00:00:00+00:00,General,2011-07-14 16:10:39.025000+00:00,2011-07-14 00:00:00.020000+00:00,Group 5,Resource02,2011-05-19 00:00:00.020000+00:00,task-30773,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-04 12:09:48.535000+00:00 +Internet,RIGHT_case-7685,2011-07-14 00:00:00+00:00,General,2011-07-14 16:10:39.025000+00:00,2011-07-14 00:00:00.020000+00:00,Group 5,Resource02,2011-05-19 00:00:00.020000+00:00,task-30776,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-04 12:11:08.184000+00:00 +Internet,RIGHT_case-7685,2011-07-14 00:00:00+00:00,General,2011-07-14 16:10:39.025000+00:00,2011-07-14 00:00:00.020000+00:00,Group 5,Resource02,2011-05-19 00:00:00.020000+00:00,task-30791,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-04 14:01:46.913000+00:00 +Internet,RIGHT_case-7686,2011-07-15 00:00:00+00:00,General,2011-07-13 07:51:18.158000+00:00,2011-07-15 00:00:00.020000+00:00,Group 8,Resource11,2011-05-20 00:00:00.020000+00:00,task-26581,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-26 15:19:11.066000+00:00 +Internet,RIGHT_case-7686,2011-07-15 00:00:00+00:00,General,2011-07-13 07:51:18.158000+00:00,2011-07-15 00:00:00.020000+00:00,Group 8,Resource11,2011-05-20 00:00:00.020000+00:00,task-26584,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-26 15:19:43.983000+00:00 +Internet,RIGHT_case-7686,2011-07-15 00:00:00+00:00,General,2011-07-13 07:51:18.158000+00:00,2011-07-15 00:00:00.020000+00:00,Group 8,Resource11,2011-05-20 00:00:00.020000+00:00,task-30158,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 13:19:29.376000+00:00 +Internet,RIGHT_case-7690,2011-08-19 01:06:40+00:00,General,2011-08-17 14:51:31.130000+00:00,2011-08-19 01:06:40.020000+00:00,,Resource06,2011-05-13 01:06:40.020000+00:00,task-26653,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-27 10:38:57.682000+00:00 +Internet,RIGHT_case-7690,2011-08-19 01:06:40+00:00,General,2011-08-17 14:51:31.130000+00:00,2011-08-19 01:06:40.020000+00:00,,Resource06,2011-05-13 01:06:40.020000+00:00,task-26656,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-27 10:39:20.359000+00:00 +Internet,RIGHT_case-7690,2011-08-19 01:06:40+00:00,General,2011-08-17 14:51:31.130000+00:00,2011-08-19 01:06:40.020000+00:00,,Resource06,2011-05-13 01:06:40.020000+00:00,task-26657,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-27 10:39:51.120000+00:00 +Internet,RIGHT_case-7693,2011-07-12 00:00:00+00:00,General,2011-06-16 10:08:59.610000+00:00,2011-07-12 00:00:00.020000+00:00,,Resource08,2011-05-17 00:00:00.020000+00:00,task-27290,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-31 10:39:25.176000+00:00 +Internet,RIGHT_case-7693,2011-07-12 00:00:00+00:00,General,2011-06-16 10:08:59.610000+00:00,2011-07-12 00:00:00.020000+00:00,,Resource08,2011-05-17 00:00:00.020000+00:00,task-27294,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-05-31 10:40:54.577000+00:00 +Internet,RIGHT_case-7693,2011-07-12 00:00:00+00:00,General,2011-06-16 10:08:59.610000+00:00,2011-07-12 00:00:00.020000+00:00,,Resource08,2011-05-17 00:00:00.020000+00:00,task-27297,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-05-31 10:56:07.322000+00:00 +Internet,RIGHT_case-7693,2011-07-12 00:00:00+00:00,General,2011-06-16 10:08:59.610000+00:00,2011-07-12 00:00:00.020000+00:00,,Resource08,2011-05-17 00:00:00.020000+00:00,task-27304,T12 Check document X request unlicensed,complete,EMPTY,Resource17,2011-05-31 11:51:19.884000+00:00 +Internet,RIGHT_case-7693,2011-07-12 00:00:00+00:00,General,2011-06-16 10:08:59.610000+00:00,2011-07-12 00:00:00.020000+00:00,,Resource08,2011-05-17 00:00:00.020000+00:00,task-27308,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-06-16 10:08:59.411000+00:00 +Internet,RIGHT_case-7694,2011-07-07 00:00:00+00:00,General,2011-08-16 09:07:19.279000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource14,2011-05-12 00:00:00.020000+00:00,task-27247,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-31 09:08:15.230000+00:00 +Internet,RIGHT_case-7694,2011-07-07 00:00:00+00:00,General,2011-08-16 09:07:19.279000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource14,2011-05-12 00:00:00.020000+00:00,task-27250,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-31 09:08:45.500000+00:00 +Internet,RIGHT_case-7694,2011-07-07 00:00:00+00:00,General,2011-08-16 09:07:19.279000+00:00,2011-07-07 00:00:00.020000+00:00,,Resource14,2011-05-12 00:00:00.020000+00:00,task-27251,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-31 09:09:21.803000+00:00 +Internet,RIGHT_case-7697,2011-07-15 01:06:40+00:00,General,2011-06-09 17:07:38.304000+00:00,2011-07-15 01:06:40.020000+00:00,,Resource06,2011-05-20 01:06:40.020000+00:00,task-27109,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-30 13:50:00.795000+00:00 +Internet,RIGHT_case-7697,2011-07-15 01:06:40+00:00,General,2011-06-09 17:07:38.304000+00:00,2011-07-15 01:06:40.020000+00:00,,Resource06,2011-05-20 01:06:40.020000+00:00,task-27139,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-30 13:50:22.133000+00:00 +Internet,RIGHT_case-7697,2011-07-15 01:06:40+00:00,General,2011-06-09 17:07:38.304000+00:00,2011-07-15 01:06:40.020000+00:00,,Resource06,2011-05-20 01:06:40.020000+00:00,task-27140,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-30 14:16:08.305000+00:00 +Internet,RIGHT_case-7697,2011-07-15 01:06:40+00:00,General,2011-06-09 17:07:38.304000+00:00,2011-07-15 01:06:40.020000+00:00,,Resource06,2011-05-20 01:06:40.020000+00:00,task-27188,T12 Check document X request unlicensed,complete,Group 4,Resource06,2011-05-30 14:52:07.158000+00:00 +Internet,RIGHT_case-7697,2011-07-15 01:06:40+00:00,General,2011-06-09 17:07:38.304000+00:00,2011-07-15 01:06:40.020000+00:00,,Resource06,2011-05-20 01:06:40.020000+00:00,task-27190,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-06-09 17:07:38.111000+00:00 +Internet,RIGHT_case-7699,2011-08-10 01:06:40+00:00,General,2011-08-12 12:13:02.602000+00:00,2011-08-10 01:06:40.020000+00:00,,Resource04,2011-05-11 01:06:40.020000+00:00,task-27114,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-30 13:37:39.770000+00:00 +Internet,RIGHT_case-7699,2011-08-10 01:06:40+00:00,General,2011-08-12 12:13:02.602000+00:00,2011-08-10 01:06:40.020000+00:00,,Resource04,2011-05-11 01:06:40.020000+00:00,task-27118,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-30 13:38:10.980000+00:00 +Internet,RIGHT_case-7699,2011-08-10 01:06:40+00:00,General,2011-08-12 12:13:02.602000+00:00,2011-08-10 01:06:40.020000+00:00,,Resource04,2011-05-11 01:06:40.020000+00:00,task-27117,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-30 13:38:23.665000+00:00 +Internet,RIGHT_case-7700,2011-09-05 01:06:40+00:00,General,2011-09-22 09:29:32.860000+00:00,2011-09-05 01:06:40.020000+00:00,,Resource06,2011-05-16 01:06:40.020000+00:00,task-26711,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-27 11:59:07.899000+00:00 +Internet,RIGHT_case-7700,2011-09-05 01:06:40+00:00,General,2011-09-22 09:29:32.860000+00:00,2011-09-05 01:06:40.020000+00:00,,Resource06,2011-05-16 01:06:40.020000+00:00,task-26714,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-27 11:59:52.144000+00:00 +Internet,RIGHT_case-7700,2011-09-05 01:06:40+00:00,General,2011-09-22 09:29:32.860000+00:00,2011-09-05 01:06:40.020000+00:00,,Resource06,2011-05-16 01:06:40.020000+00:00,task-26715,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-27 12:00:48.541000+00:00 +Internet,RIGHT_case-7750,2011-07-22 01:06:40+00:00,General,2011-07-20 10:00:20.946000+00:00,2011-07-22 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-27798,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-06 12:46:34.174000+00:00 +Internet,RIGHT_case-7750,2011-07-22 01:06:40+00:00,General,2011-07-20 10:00:20.946000+00:00,2011-07-22 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-27801,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-06 12:47:45.214000+00:00 +Internet,RIGHT_case-7750,2011-07-22 01:06:40+00:00,General,2011-07-20 10:00:20.946000+00:00,2011-07-22 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-27803,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-06-06 12:51:45.164000+00:00 +Internet,RIGHT_case-7751,2011-02-06 00:00:00+00:00,General,2011-05-30 16:47:33.837000+00:00,2011-02-06 00:00:00.010000+00:00,,Resource22,2010-12-12 00:00:00.010000+00:00,task-26729,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-05-27 12:51:30.375000+00:00 +Internet,RIGHT_case-7751,2011-02-06 00:00:00+00:00,General,2011-05-30 16:47:33.837000+00:00,2011-02-06 00:00:00.010000+00:00,,Resource22,2010-12-12 00:00:00.010000+00:00,task-26732,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-05-27 12:52:15.751000+00:00 +Internet,RIGHT_case-7751,2011-02-06 00:00:00+00:00,General,2011-05-30 16:47:33.837000+00:00,2011-02-06 00:00:00.010000+00:00,,Resource22,2010-12-12 00:00:00.010000+00:00,task-26733,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-05-27 12:54:42.057000+00:00 +e-mail,RIGHT_case-7753,2011-07-11 00:00:00+00:00,General,2011-07-12 15:26:10.291000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource04,2011-05-16 00:00:00.020000+00:00,task-27325,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-31 13:20:20.388000+00:00 +e-mail,RIGHT_case-7753,2011-07-11 00:00:00+00:00,General,2011-07-12 15:26:10.291000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource04,2011-05-16 00:00:00.020000+00:00,task-27328,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-31 13:20:41.292000+00:00 +e-mail,RIGHT_case-7753,2011-07-11 00:00:00+00:00,General,2011-07-12 15:26:10.291000+00:00,2011-07-11 00:00:00.020000+00:00,,Resource04,2011-05-16 00:00:00.020000+00:00,task-27329,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-31 13:21:02.764000+00:00 +Internet,RIGHT_case-7755,2011-07-20 01:06:40+00:00,General,2011-06-21 15:00:53.806000+00:00,2011-07-20 01:06:40.020000+00:00,,Resource01,2011-05-25 01:06:40.020000+00:00,task-27394,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-06-01 08:21:04.711000+00:00 +Internet,RIGHT_case-7755,2011-07-20 01:06:40+00:00,General,2011-06-21 15:00:53.806000+00:00,2011-07-20 01:06:40.020000+00:00,,Resource01,2011-05-25 01:06:40.020000+00:00,task-27397,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-06-01 08:21:52.409000+00:00 +Internet,RIGHT_case-7755,2011-07-20 01:06:40+00:00,General,2011-06-21 15:00:53.806000+00:00,2011-07-20 01:06:40.020000+00:00,,Resource01,2011-05-25 01:06:40.020000+00:00,task-27398,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-06-01 08:22:48.684000+00:00 +Internet,RIGHT_case-7757,2011-07-19 00:00:00+00:00,General,2011-07-12 07:47:56.905000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-27421,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-06-01 08:58:42.133000+00:00 +Internet,RIGHT_case-7757,2011-07-19 00:00:00+00:00,General,2011-07-12 07:47:56.905000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-27424,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-06-01 08:59:33.950000+00:00 +Internet,RIGHT_case-7757,2011-07-19 00:00:00+00:00,General,2011-07-12 07:47:56.905000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-27427,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-06-01 09:06:03.185000+00:00 +Internet,RIGHT_case-7758,2011-07-18 00:00:00+00:00,General,2011-08-15 07:52:55.041000+00:00,2011-07-18 00:00:00.020000+00:00,Group 8,Resource11,2011-05-23 00:00:00.020000+00:00,task-30017,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 11:19:25.533000+00:00 +Internet,RIGHT_case-7758,2011-07-18 00:00:00+00:00,General,2011-08-15 07:52:55.041000+00:00,2011-07-18 00:00:00.020000+00:00,Group 8,Resource11,2011-05-23 00:00:00.020000+00:00,task-30020,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 11:20:08.421000+00:00 +Internet,RIGHT_case-7758,2011-07-18 00:00:00+00:00,General,2011-08-15 07:52:55.041000+00:00,2011-07-18 00:00:00.020000+00:00,Group 8,Resource11,2011-05-23 00:00:00.020000+00:00,task-30021,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 11:20:54.129000+00:00 +Internet,RIGHT_case-7759,2011-07-18 01:06:40+00:00,General,2011-07-19 09:57:29.392000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-27492,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-01 11:45:27.247000+00:00 +Internet,RIGHT_case-7759,2011-07-18 01:06:40+00:00,General,2011-07-19 09:57:29.392000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-27498,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-01 11:48:26.905000+00:00 +Internet,RIGHT_case-7759,2011-07-18 01:06:40+00:00,General,2011-07-19 09:57:29.392000+00:00,2011-07-18 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-27495,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-01 11:48:40.863000+00:00 +Internet,RIGHT_case-7760,2011-07-19 00:00:00+00:00,General,2011-06-06 15:09:33.450000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource01,2011-05-24 00:00:00.020000+00:00,task-27020,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-05-30 12:09:50.404000+00:00 +Internet,RIGHT_case-7760,2011-07-19 00:00:00+00:00,General,2011-06-06 15:09:33.450000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource01,2011-05-24 00:00:00.020000+00:00,task-27016,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2011-06-01 11:01:39.703000+00:00 +Internet,RIGHT_case-7760,2011-07-19 00:00:00+00:00,General,2011-06-06 15:09:33.450000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource01,2011-05-24 00:00:00.020000+00:00,task-27474,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-06-01 11:02:03.590000+00:00 +Internet,RIGHT_case-7761,2011-08-19 01:06:40+00:00,General,2011-08-17 16:30:51.464000+00:00,2011-08-19 01:06:40.020000+00:00,Group 5,Resource04,2011-05-27 01:06:40.020000+00:00,task-28026,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-06-07 09:07:21.786000+00:00 +Internet,RIGHT_case-7761,2011-08-19 01:06:40+00:00,General,2011-08-17 16:30:51.464000+00:00,2011-08-19 01:06:40.020000+00:00,Group 5,Resource04,2011-05-27 01:06:40.020000+00:00,task-28029,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-06-07 09:07:51.976000+00:00 +Internet,RIGHT_case-7761,2011-08-19 01:06:40+00:00,General,2011-08-17 16:30:51.464000+00:00,2011-08-19 01:06:40.020000+00:00,Group 5,Resource04,2011-05-27 01:06:40.020000+00:00,task-28204,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-06-07 14:47:27.247000+00:00 +Internet,RIGHT_case-7762,2011-08-29 01:06:40+00:00,General,2011-09-21 15:19:39.030000+00:00,2011-08-29 01:06:40.020000+00:00,,Resource02,2011-05-23 01:06:40.020000+00:00,task-32116,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-07-14 15:50:06.221000+00:00 +Internet,RIGHT_case-7762,2011-08-29 01:06:40+00:00,General,2011-09-21 15:19:39.030000+00:00,2011-08-29 01:06:40.020000+00:00,,Resource02,2011-05-23 01:06:40.020000+00:00,task-32119,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-07-14 15:50:41.662000+00:00 +Internet,RIGHT_case-7762,2011-08-29 01:06:40+00:00,General,2011-09-21 15:19:39.030000+00:00,2011-08-29 01:06:40.020000+00:00,,Resource02,2011-05-23 01:06:40.020000+00:00,task-32120,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-07-14 15:51:57.281000+00:00 +Internet,RIGHT_case-7763,2011-07-22 00:00:00+00:00,General,2011-06-01 09:02:45.723000+00:00,2011-07-22 00:00:00.020000+00:00,,Resource02,2011-05-27 00:00:00.020000+00:00,task-26976,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-30 11:18:05.974000+00:00 +Internet,RIGHT_case-7763,2011-07-22 00:00:00+00:00,General,2011-06-01 09:02:45.723000+00:00,2011-07-22 00:00:00.020000+00:00,,Resource02,2011-05-27 00:00:00.020000+00:00,task-26979,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-30 11:18:43.001000+00:00 +Internet,RIGHT_case-7763,2011-07-22 00:00:00+00:00,General,2011-06-01 09:02:45.723000+00:00,2011-07-22 00:00:00.020000+00:00,,Resource02,2011-05-27 00:00:00.020000+00:00,task-26980,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-30 11:21:00.125000+00:00 +Internet,RIGHT_case-7805,2011-07-21 01:06:40+00:00,General,,2011-07-21 01:06:40.020000+00:00,,Resource14,2011-05-26 01:06:40.020000+00:00,task-29080,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-06-20 08:48:11.620000+00:00 +Internet,RIGHT_case-7805,2011-07-21 01:06:40+00:00,General,,2011-07-21 01:06:40.020000+00:00,,Resource14,2011-05-26 01:06:40.020000+00:00,task-29083,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-06-20 08:48:50.221000+00:00 +Internet,RIGHT_case-7805,2011-07-21 01:06:40+00:00,General,,2011-07-21 01:06:40.020000+00:00,,Resource14,2011-05-26 01:06:40.020000+00:00,task-29087,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-06-20 09:07:26.235000+00:00 +Internet,RIGHT_case-7810,2011-07-21 00:00:00+00:00,General,2011-07-20 08:27:32.767000+00:00,2011-07-21 00:00:00.020000+00:00,,Resource13,2011-05-26 00:00:00.020000+00:00,task-28005,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-07 08:46:25.281000+00:00 +Internet,RIGHT_case-7810,2011-07-21 00:00:00+00:00,General,2011-07-20 08:27:32.767000+00:00,2011-07-21 00:00:00.020000+00:00,,Resource13,2011-05-26 00:00:00.020000+00:00,task-28009,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-06-07 08:49:30.439000+00:00 +Internet,RIGHT_case-7810,2011-07-21 00:00:00+00:00,General,2011-07-20 08:27:32.767000+00:00,2011-07-21 00:00:00.020000+00:00,,Resource13,2011-05-26 00:00:00.020000+00:00,task-28016,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-07 08:53:19.894000+00:00 +Internet,RIGHT_case-7814,2011-06-27 00:00:00+00:00,General,2011-06-28 12:08:16.358000+00:00,2011-06-27 00:00:00.020000+00:00,,Resource02,2011-05-02 00:00:00.020000+00:00,task-27899,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-06-06 15:00:31.901000+00:00 +Internet,RIGHT_case-7814,2011-06-27 00:00:00+00:00,General,2011-06-28 12:08:16.358000+00:00,2011-06-27 00:00:00.020000+00:00,,Resource02,2011-05-02 00:00:00.020000+00:00,task-27902,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-06-06 15:01:06.469000+00:00 +Internet,RIGHT_case-7814,2011-06-27 00:00:00+00:00,General,2011-06-28 12:08:16.358000+00:00,2011-06-27 00:00:00.020000+00:00,,Resource02,2011-05-02 00:00:00.020000+00:00,task-28478,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-06-09 11:36:47.398000+00:00 +Internet,RIGHT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27677,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-06-06 09:47:46.563000+00:00 +Internet,RIGHT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27680,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-06-06 09:48:19.723000+00:00 +Internet,RIGHT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27681,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-06-06 09:49:41.978000+00:00 +Internet,RIGHT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27686,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-06-06 09:56:39.135000+00:00 +Internet,RIGHT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27688,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-06-06 09:57:15.624000+00:00 +Internet,RIGHT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27690,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-06-06 09:58:04.754000+00:00 +Internet,RIGHT_case-7815,2011-07-08 01:06:40+00:00,General,2011-07-12 15:40:36.201000+00:00,2011-07-08 01:06:40.020000+00:00,,Resource05,2011-05-13 01:06:40.020000+00:00,task-27692,T20 Print report Y to stop indication,complete,Group 2,Resource05,2011-06-06 09:59:06.434000+00:00 +Internet,RIGHT_case-7817,2011-07-13 00:00:00+00:00,General,2011-07-07 09:39:24.114000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource01,2011-05-18 00:00:00.020000+00:00,task-28737,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-06-21 09:24:39.143000+00:00 +Internet,RIGHT_case-7817,2011-07-13 00:00:00+00:00,General,2011-07-07 09:39:24.114000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource01,2011-05-18 00:00:00.020000+00:00,task-29260,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-21 09:25:46.086000+00:00 +Internet,RIGHT_case-7817,2011-07-13 00:00:00+00:00,General,2011-07-07 09:39:24.114000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource01,2011-05-18 00:00:00.020000+00:00,task-29261,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-22 10:17:22.904000+00:00 +Internet,RIGHT_case-7817,2011-07-13 00:00:00+00:00,General,2011-07-07 09:39:24.114000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource01,2011-05-18 00:00:00.020000+00:00,task-29920,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-06-28 09:23:46.983000+00:00 +Internet,RIGHT_case-7817,2011-07-13 00:00:00+00:00,General,2011-07-07 09:39:24.114000+00:00,2011-07-13 00:00:00.020000+00:00,,Resource01,2011-05-18 00:00:00.020000+00:00,task-30638,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-07-07 09:39:23.936000+00:00 +Internet,RIGHT_case-7818,2011-07-08 00:00:00+00:00,General,2011-08-03 00:00:00.020000+00:00,2011-07-08 00:00:00.020000+00:00,Group 5,Resource06,2011-05-13 00:00:00.020000+00:00,task-27484,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-06-01 11:20:40.339000+00:00 +Internet,RIGHT_case-7818,2011-07-08 00:00:00+00:00,General,2011-08-03 00:00:00.020000+00:00,2011-07-08 00:00:00.020000+00:00,Group 5,Resource06,2011-05-13 00:00:00.020000+00:00,task-28295,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-06-08 10:10:32.002000+00:00 +Internet,RIGHT_case-7818,2011-07-08 00:00:00+00:00,General,2011-08-03 00:00:00.020000+00:00,2011-07-08 00:00:00.020000+00:00,Group 5,Resource06,2011-05-13 00:00:00.020000+00:00,task-27490,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-16 10:09:59.519000+00:00 +Internet,RIGHT_case-7832,2011-09-08 01:06:40+00:00,General,2011-08-02 10:53:16.729000+00:00,2011-09-08 01:06:40.020000+00:00,,Resource02,2011-05-29 01:06:40.020000+00:00,task-29355,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-06-21 14:56:05.053000+00:00 +Internet,RIGHT_case-7832,2011-09-08 01:06:40+00:00,General,2011-08-02 10:53:16.729000+00:00,2011-09-08 01:06:40.020000+00:00,,Resource02,2011-05-29 01:06:40.020000+00:00,task-29367,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-06-21 15:17:58.102000+00:00 +Internet,RIGHT_case-7832,2011-09-08 01:06:40+00:00,General,2011-08-02 10:53:16.729000+00:00,2011-09-08 01:06:40.020000+00:00,,Resource02,2011-05-29 01:06:40.020000+00:00,task-29358,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-24 14:35:38.308000+00:00 +Internet,RIGHT_case-7847,2011-10-26 01:06:40+00:00,General,2011-10-20 11:05:33.020000+00:00,2011-10-26 01:06:40.020000+00:00,,Resource02,2011-05-30 01:06:40.020000+00:00,task-29377,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-06-21 15:38:25.923000+00:00 +Internet,RIGHT_case-7847,2011-10-26 01:06:40+00:00,General,2011-10-20 11:05:33.020000+00:00,2011-10-26 01:06:40.020000+00:00,,Resource02,2011-05-30 01:06:40.020000+00:00,task-29381,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-06-21 15:41:46.533000+00:00 +Internet,RIGHT_case-7847,2011-10-26 01:06:40+00:00,General,2011-10-20 11:05:33.020000+00:00,2011-10-26 01:06:40.020000+00:00,,Resource02,2011-05-30 01:06:40.020000+00:00,task-29380,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-24 14:33:14.885000+00:00 +Internet,RIGHT_case-7851,2011-07-25 00:00:00+00:00,General,2011-07-20 11:28:19.607000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource06,2011-05-30 00:00:00.020000+00:00,task-28126,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-06-07 12:13:55.759000+00:00 +Internet,RIGHT_case-7851,2011-07-25 00:00:00+00:00,General,2011-07-20 11:28:19.607000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource06,2011-05-30 00:00:00.020000+00:00,task-28124,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-06-07 12:14:10.630000+00:00 +Internet,RIGHT_case-7851,2011-07-25 00:00:00+00:00,General,2011-07-20 11:28:19.607000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource06,2011-05-30 00:00:00.020000+00:00,task-28130,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-06-07 12:14:37.489000+00:00 +Internet,RIGHT_case-7856,2011-07-25 00:00:00+00:00,General,2011-08-15 11:22:26.220000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource05,2011-05-30 00:00:00.020000+00:00,task-28116,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-06-07 12:05:46.308000+00:00 +Internet,RIGHT_case-7856,2011-07-25 00:00:00+00:00,General,2011-08-15 11:22:26.220000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource05,2011-05-30 00:00:00.020000+00:00,task-28119,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-06-07 12:06:50.641000+00:00 +Internet,RIGHT_case-7856,2011-07-25 00:00:00+00:00,General,2011-08-15 11:22:26.220000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource05,2011-05-30 00:00:00.020000+00:00,task-28122,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-06-07 12:24:25.981000+00:00 +Internet,RIGHT_case-7905,2011-07-26 00:00:00+00:00,General,2011-07-25 09:57:39.681000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29951,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 10:31:28.300000+00:00 +Internet,RIGHT_case-7905,2011-07-26 00:00:00+00:00,General,2011-07-25 09:57:39.681000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29954,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 10:32:07.454000+00:00 +Internet,RIGHT_case-7905,2011-07-26 00:00:00+00:00,General,2011-07-25 09:57:39.681000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29955,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 10:32:36.027000+00:00 +Internet,RIGHT_case-7907,2011-07-26 01:06:40+00:00,General,2011-07-18 14:17:16.031000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-30065,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 11:51:27.201000+00:00 +Internet,RIGHT_case-7907,2011-07-26 01:06:40+00:00,General,2011-07-18 14:17:16.031000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-30069,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 11:52:04.754000+00:00 +Internet,RIGHT_case-7907,2011-07-26 01:06:40+00:00,General,2011-07-18 14:17:16.031000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-30070,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 11:53:47.477000+00:00 +Internet,RIGHT_case-7908,2011-07-26 00:00:00+00:00,General,2011-07-13 07:56:32.983000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29971,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 10:46:40.527000+00:00 +Internet,RIGHT_case-7908,2011-07-26 00:00:00+00:00,General,2011-07-13 07:56:32.983000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29975,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 10:47:26.561000+00:00 +Internet,RIGHT_case-7908,2011-07-26 00:00:00+00:00,General,2011-07-13 07:56:32.983000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29976,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 10:48:45.299000+00:00 +Internet,RIGHT_case-7911,2011-07-26 00:00:00+00:00,General,2011-07-13 08:05:04.176000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29993,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 11:03:30.227000+00:00 +Internet,RIGHT_case-7911,2011-07-26 00:00:00+00:00,General,2011-07-13 08:05:04.176000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29996,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 11:04:02.032000+00:00 +Internet,RIGHT_case-7911,2011-07-26 00:00:00+00:00,General,2011-07-13 08:05:04.176000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-29997,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 11:04:57.941000+00:00 +Internet,RIGHT_case-7912,2011-07-26 00:00:00+00:00,General,2011-07-13 08:17:38.614000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-30037,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 11:35:17.756000+00:00 +Internet,RIGHT_case-7912,2011-07-26 00:00:00+00:00,General,2011-07-13 08:17:38.614000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-30040,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 11:35:51.665000+00:00 +Internet,RIGHT_case-7912,2011-07-26 00:00:00+00:00,General,2011-07-13 08:17:38.614000+00:00,2011-07-26 00:00:00.020000+00:00,Group 8,Resource11,2011-05-31 00:00:00.020000+00:00,task-30041,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 11:36:25.368000+00:00 +Internet,RIGHT_case-7915,2011-07-26 01:06:40+00:00,General,2011-07-25 07:33:19.467000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-30126,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 13:02:22.877000+00:00 +Internet,RIGHT_case-7915,2011-07-26 01:06:40+00:00,General,2011-07-25 07:33:19.467000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-30131,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 13:04:22.285000+00:00 +Internet,RIGHT_case-7915,2011-07-26 01:06:40+00:00,General,2011-07-25 07:33:19.467000+00:00,2011-07-26 01:06:40.020000+00:00,Group 8,Resource11,2011-05-31 01:06:40.020000+00:00,task-30136,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 13:06:29.647000+00:00 +Internet,RIGHT_case-7917,2011-07-27 00:00:00+00:00,General,2011-07-18 14:32:07.502000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30350,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 11:08:17.914000+00:00 +Internet,RIGHT_case-7917,2011-07-27 00:00:00+00:00,General,2011-07-18 14:32:07.502000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30353,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 11:13:21.705000+00:00 +Internet,RIGHT_case-7917,2011-07-27 00:00:00+00:00,General,2011-07-18 14:32:07.502000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30354,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 11:14:09.223000+00:00 +Internet,RIGHT_case-7918,2011-07-27 00:00:00+00:00,General,2011-07-18 14:40:29.864000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30371,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 11:24:45.246000+00:00 +Internet,RIGHT_case-7918,2011-07-27 00:00:00+00:00,General,2011-07-18 14:40:29.864000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30374,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 11:25:16.596000+00:00 +Internet,RIGHT_case-7918,2011-07-27 00:00:00+00:00,General,2011-07-18 14:40:29.864000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30375,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 11:25:53.154000+00:00 +Internet,RIGHT_case-7922,2011-07-27 00:00:00+00:00,General,2011-07-20 10:04:31.199000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30399,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 11:53:01.727000+00:00 +Internet,RIGHT_case-7922,2011-07-27 00:00:00+00:00,General,2011-07-20 10:04:31.199000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30403,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 11:53:32.008000+00:00 +Internet,RIGHT_case-7922,2011-07-27 00:00:00+00:00,General,2011-07-20 10:04:31.199000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30404,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 11:54:06.594000+00:00 +Internet,RIGHT_case-7923,2011-07-27 00:00:00+00:00,General,2011-07-20 10:12:12.378000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30435,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 12:33:30.374000+00:00 +Internet,RIGHT_case-7923,2011-07-27 00:00:00+00:00,General,2011-07-20 10:12:12.378000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30440,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 12:34:07.294000+00:00 +Internet,RIGHT_case-7923,2011-07-27 00:00:00+00:00,General,2011-07-20 10:12:12.378000+00:00,2011-07-27 00:00:00.020000+00:00,Group 8,Resource11,2011-06-01 00:00:00.020000+00:00,task-30441,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 12:34:42.228000+00:00 +Internet,RIGHT_case-7926,2011-10-25 01:06:40+00:00,General,2011-10-05 12:35:48.463000+00:00,2011-10-25 01:06:40.020000+00:00,,Resource04,2011-06-01 01:06:40.020000+00:00,task-28518,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-06-09 13:10:01.025000+00:00 +Internet,RIGHT_case-7926,2011-10-25 01:06:40+00:00,General,2011-10-05 12:35:48.463000+00:00,2011-10-25 01:06:40.020000+00:00,,Resource04,2011-06-01 01:06:40.020000+00:00,task-28521,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-06-09 13:10:35.908000+00:00 +Internet,RIGHT_case-7926,2011-10-25 01:06:40+00:00,General,2011-10-05 12:35:48.463000+00:00,2011-10-25 01:06:40.020000+00:00,,Resource04,2011-06-01 01:06:40.020000+00:00,task-28522,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-06-09 13:11:47.046000+00:00 +Internet,RIGHT_case-7929,2011-07-29 00:00:00+00:00,General,2012-01-06 08:33:38.909000+00:00,2011-07-29 00:00:00.020000+00:00,,Resource14,2011-06-03 00:00:00.020000+00:00,task-31759,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-07-12 13:58:56.955000+00:00 +Internet,RIGHT_case-7929,2011-07-29 00:00:00+00:00,General,2012-01-06 08:33:38.909000+00:00,2011-07-29 00:00:00.020000+00:00,,Resource14,2011-06-03 00:00:00.020000+00:00,task-31767,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-07-12 14:07:07.978000+00:00 +Internet,RIGHT_case-7929,2011-07-29 00:00:00+00:00,General,2012-01-06 08:33:38.909000+00:00,2011-07-29 00:00:00.020000+00:00,,Resource14,2011-06-03 00:00:00.020000+00:00,task-31768,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-07-12 14:07:58.027000+00:00 +Internet,RIGHT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28748,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-16 10:31:00.907000+00:00 +Internet,RIGHT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28751,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-16 10:33:38.794000+00:00 +Internet,RIGHT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28754,T02 Check confirmation of receipt,complete,Group 4,Resource13,2011-06-16 10:38:26.918000+00:00 +Internet,RIGHT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28756,T02 Check confirmation of receipt,complete,Group 4,Resource13,2011-06-16 10:40:44.627000+00:00 +Internet,RIGHT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28763,T02 Check confirmation of receipt,complete,Group 4,Resource13,2011-06-16 10:49:26.714000+00:00 +Internet,RIGHT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-28765,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:49:01.590000+00:00 +Internet,RIGHT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-29867,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:49:50.828000+00:00 +Internet,RIGHT_case-7953,2011-09-06 01:06:40+00:00,General,2011-07-28 15:02:44.383000+00:00,2011-09-06 01:06:40.020000+00:00,,Resource13,2011-05-23 01:06:40.020000+00:00,task-29865,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-27 13:50:06.272000+00:00 +Internet,RIGHT_case-7956,2011-07-19 00:00:00+00:00,General,2011-07-19 13:43:38.735000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource12,2011-05-24 00:00:00.020000+00:00,task-31682,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-07-12 09:53:01.309000+00:00 +Internet,RIGHT_case-7956,2011-07-19 00:00:00+00:00,General,2011-07-19 13:43:38.735000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource12,2011-05-24 00:00:00.020000+00:00,task-31685,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-07-12 09:54:02.424000+00:00 +Internet,RIGHT_case-7956,2011-07-19 00:00:00+00:00,General,2011-07-19 13:43:38.735000+00:00,2011-07-19 00:00:00.020000+00:00,,Resource12,2011-05-24 00:00:00.020000+00:00,task-31686,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-07-12 09:55:46.407000+00:00 +Internet,RIGHT_case-7957,2011-07-19 00:00:00+00:00,General,2011-08-18 15:56:42.667000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-29931,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 09:53:40.558000+00:00 +Internet,RIGHT_case-7957,2011-07-19 00:00:00+00:00,General,2011-08-18 15:56:42.667000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-29934,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 09:54:10.385000+00:00 +Internet,RIGHT_case-7957,2011-07-19 00:00:00+00:00,General,2011-08-18 15:56:42.667000+00:00,2011-07-19 00:00:00.020000+00:00,Group 8,Resource11,2011-05-24 00:00:00.020000+00:00,task-29935,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 09:54:44.108000+00:00 +Internet,RIGHT_case-7958,2011-07-21 01:06:40+00:00,General,2011-07-20 07:59:15.627000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource05,2011-05-26 01:06:40.020000+00:00,task-28508,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-06-09 12:29:10.337000+00:00 +Internet,RIGHT_case-7958,2011-07-21 01:06:40+00:00,General,2011-07-20 07:59:15.627000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource05,2011-05-26 01:06:40.020000+00:00,task-28511,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-06-09 12:36:18.648000+00:00 +Internet,RIGHT_case-7958,2011-07-21 01:06:40+00:00,General,2011-07-20 07:59:15.627000+00:00,2011-07-21 01:06:40.020000+00:00,,Resource05,2011-05-26 01:06:40.020000+00:00,task-28516,T05 Print and send confirmation of receipt,complete,EMPTY,Resource05,2011-06-09 13:44:54.995000+00:00 +Internet,RIGHT_case-7960,2011-08-01 00:00:00+00:00,General,,2011-08-01 00:00:00.020000+00:00,,Resource12,2011-06-06 00:00:00.020000+00:00,task-33441,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-07-26 10:00:11.810000+00:00 +Internet,RIGHT_case-7960,2011-08-01 00:00:00+00:00,General,,2011-08-01 00:00:00.020000+00:00,,Resource12,2011-06-06 00:00:00.020000+00:00,task-33447,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-07-26 10:01:31.891000+00:00 +Internet,RIGHT_case-7960,2011-08-01 00:00:00+00:00,General,,2011-08-01 00:00:00.020000+00:00,,Resource12,2011-06-06 00:00:00.020000+00:00,task-33451,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-07-26 10:02:43.861000+00:00 +Internet,RIGHT_case-7961,2011-08-09 01:06:40+00:00,General,2011-08-12 15:10:50.100000+00:00,2011-08-09 01:06:40.020000+00:00,,Resource13,2011-05-30 01:06:40.020000+00:00,task-28767,T02 Check confirmation of receipt,complete,Group 4,Resource13,2011-06-16 10:54:53.605000+00:00 +Internet,RIGHT_case-7961,2011-08-09 01:06:40+00:00,General,2011-08-12 15:10:50.100000+00:00,2011-08-09 01:06:40.020000+00:00,,Resource13,2011-05-30 01:06:40.020000+00:00,task-28770,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 11:42:52.227000+00:00 +Internet,RIGHT_case-7961,2011-08-09 01:06:40+00:00,General,2011-08-12 15:10:50.100000+00:00,2011-08-09 01:06:40.020000+00:00,,Resource13,2011-05-30 01:06:40.020000+00:00,task-30059,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 11:43:46.033000+00:00 +Internet,RIGHT_case-7961,2011-08-09 01:06:40+00:00,General,2011-08-12 15:10:50.100000+00:00,2011-08-09 01:06:40.020000+00:00,,Resource13,2011-05-30 01:06:40.020000+00:00,task-30060,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-28 11:44:51.464000+00:00 +Internet,RIGHT_case-7976,2011-08-01 00:00:00+00:00,General,2011-07-20 10:20:56.199000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-30460,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 12:46:49.105000+00:00 +Internet,RIGHT_case-7976,2011-08-01 00:00:00+00:00,General,2011-07-20 10:20:56.199000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-30464,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 12:47:19.251000+00:00 +Internet,RIGHT_case-7976,2011-08-01 00:00:00+00:00,General,2011-07-20 10:20:56.199000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-30462,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 12:47:52.932000+00:00 +Internet,RIGHT_case-7978,2011-07-25 00:00:00+00:00,General,2011-06-24 14:40:16.300000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource15,2011-05-30 00:00:00.020000+00:00,task-28908,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-06-17 10:52:31.530000+00:00 +Internet,RIGHT_case-7978,2011-07-25 00:00:00+00:00,General,2011-06-24 14:40:16.300000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource15,2011-05-30 00:00:00.020000+00:00,task-28912,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-06-17 10:54:00.741000+00:00 +Internet,RIGHT_case-7978,2011-07-25 00:00:00+00:00,General,2011-06-24 14:40:16.300000+00:00,2011-07-25 00:00:00.020000+00:00,,Resource15,2011-05-30 00:00:00.020000+00:00,task-28911,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-24 14:39:55.719000+00:00 +Internet,RIGHT_case-7980,2011-07-13 01:06:40+00:00,General,,2011-07-13 01:06:40.020000+00:00,Group 10,Resource53,2011-05-18 01:06:40.020000+00:00,task-28821,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-06-16 17:43:29.021000+00:00 +Internet,RIGHT_case-7980,2011-07-13 01:06:40+00:00,General,,2011-07-13 01:06:40.020000+00:00,Group 10,Resource53,2011-05-18 01:06:40.020000+00:00,task-29255,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-06-21 09:45:18.435000+00:00 +Internet,RIGHT_case-7980,2011-07-13 01:06:40+00:00,General,,2011-07-13 01:06:40.020000+00:00,Group 10,Resource53,2011-05-18 01:06:40.020000+00:00,task-29298,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-06-21 11:41:32.123000+00:00 +Internet,RIGHT_case-7980,2011-07-13 01:06:40+00:00,General,,2011-07-13 01:06:40.020000+00:00,Group 10,Resource53,2011-05-18 01:06:40.020000+00:00,task-29302,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-06-21 11:42:10.031000+00:00 +Internet,RIGHT_case-7981,2011-07-06 00:00:00+00:00,General,2011-07-08 15:19:47.775000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource15,2011-05-11 00:00:00.020000+00:00,task-29460,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-06-22 11:05:52.983000+00:00 +Internet,RIGHT_case-7981,2011-07-06 00:00:00+00:00,General,2011-07-08 15:19:47.775000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource15,2011-05-11 00:00:00.020000+00:00,task-29466,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-06-22 11:08:28.812000+00:00 +Internet,RIGHT_case-7981,2011-07-06 00:00:00+00:00,General,2011-07-08 15:19:47.775000+00:00,2011-07-06 00:00:00.020000+00:00,,Resource15,2011-05-11 00:00:00.020000+00:00,task-29465,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-24 14:32:02.001000+00:00 +Internet,RIGHT_case-7988,2011-07-26 00:00:00+00:00,General,2011-07-15 11:38:31.886000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource13,2011-05-31 00:00:00.020000+00:00,task-30100,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:23:50.267000+00:00 +Internet,RIGHT_case-7988,2011-07-26 00:00:00+00:00,General,2011-07-15 11:38:31.886000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource13,2011-05-31 00:00:00.020000+00:00,task-30103,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-06-28 12:24:43.740000+00:00 +Internet,RIGHT_case-7988,2011-07-26 00:00:00+00:00,General,2011-07-15 11:38:31.886000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource13,2011-05-31 00:00:00.020000+00:00,task-30104,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-28 12:25:23.478000+00:00 +Internet,RIGHT_case-7988,2011-07-26 00:00:00+00:00,General,2011-07-15 11:38:31.886000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource13,2011-05-31 00:00:00.020000+00:00,task-30106,T12 Check document X request unlicensed,complete,Group 4,Resource13,2011-06-28 12:34:11.175000+00:00 +Internet,RIGHT_case-7988,2011-07-26 00:00:00+00:00,General,2011-07-15 11:38:31.886000+00:00,2011-07-26 00:00:00.020000+00:00,,Resource13,2011-05-31 00:00:00.020000+00:00,task-30547,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-07-15 11:38:31.702000+00:00 +Internet,RIGHT_case-7990,2011-08-01 00:00:00+00:00,General,2011-07-20 10:34:03.921000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-31321,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-07 13:55:25.760000+00:00 +Internet,RIGHT_case-7990,2011-08-01 00:00:00+00:00,General,2011-07-20 10:34:03.921000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-31325,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-07 13:56:05.638000+00:00 +Internet,RIGHT_case-7990,2011-08-01 00:00:00+00:00,General,2011-07-20 10:34:03.921000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-31326,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-07 13:57:51.625000+00:00 +Internet,RIGHT_case-7991,2011-08-02 00:00:00+00:00,General,2011-07-28 11:36:29.366000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource01,2011-06-07 00:00:00.020000+00:00,task-30526,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 15:03:28.599000+00:00 +Internet,RIGHT_case-7991,2011-08-02 00:00:00+00:00,General,2011-07-28 11:36:29.366000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource01,2011-06-07 00:00:00.020000+00:00,task-30529,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 15:04:12.766000+00:00 +Internet,RIGHT_case-7991,2011-08-02 00:00:00+00:00,General,2011-07-28 11:36:29.366000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource01,2011-06-07 00:00:00.020000+00:00,task-30530,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 15:05:11.046000+00:00 +Internet,RIGHT_case-8011,2011-08-01 00:00:00+00:00,General,2011-07-20 10:47:01.655000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-30506,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 14:42:49.289000+00:00 +Internet,RIGHT_case-8011,2011-08-01 00:00:00+00:00,General,2011-07-20 10:47:01.655000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-30509,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 14:43:21.785000+00:00 +Internet,RIGHT_case-8011,2011-08-01 00:00:00+00:00,General,2011-07-20 10:47:01.655000+00:00,2011-08-01 00:00:00.020000+00:00,Group 8,Resource11,2011-06-06 00:00:00.020000+00:00,task-30510,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 14:44:05.382000+00:00 +Internet,RIGHT_case-8012,2011-08-03 00:00:00+00:00,General,2011-07-20 11:29:19.470000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30685,T02 Check confirmation of receipt,complete,Group 4,Resource31,2011-07-04 10:14:51.421000+00:00 +Internet,RIGHT_case-8012,2011-08-03 00:00:00+00:00,General,2011-07-20 11:29:19.470000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30689,T05 Print and send confirmation of receipt,complete,Group 2,Resource31,2011-07-04 10:16:30.345000+00:00 +Internet,RIGHT_case-8012,2011-08-03 00:00:00+00:00,General,2011-07-20 11:29:19.470000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30691,T10 Determine necessity to stop indication,complete,Group 1,Resource31,2011-07-04 10:18:17.096000+00:00 +Internet,RIGHT_case-8014,2011-08-03 00:00:00+00:00,General,2011-07-20 11:36:05.108000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30733,T02 Check confirmation of receipt,complete,Group 4,Resource31,2011-07-04 11:32:08.699000+00:00 +Internet,RIGHT_case-8014,2011-08-03 00:00:00+00:00,General,2011-07-20 11:36:05.108000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30738,T05 Print and send confirmation of receipt,complete,Group 2,Resource31,2011-07-04 11:34:29.418000+00:00 +Internet,RIGHT_case-8014,2011-08-03 00:00:00+00:00,General,2011-07-20 11:36:05.108000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30740,T10 Determine necessity to stop indication,complete,Group 1,Resource31,2011-07-04 11:35:19.324000+00:00 +Internet,RIGHT_case-8015,2011-08-03 00:00:00+00:00,General,2011-07-25 10:11:47.884000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30894,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-07-05 08:57:29.772000+00:00 +Internet,RIGHT_case-8015,2011-08-03 00:00:00+00:00,General,2011-07-25 10:11:47.884000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30897,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-07-05 08:58:26.947000+00:00 +Internet,RIGHT_case-8015,2011-08-03 00:00:00+00:00,General,2011-07-25 10:11:47.884000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30898,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-07-05 09:00:22.750000+00:00 +Internet,RIGHT_case-8016,2011-08-03 00:00:00+00:00,General,2011-07-27 08:35:00.199000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-31992,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-14 11:57:40.065000+00:00 +Internet,RIGHT_case-8016,2011-08-03 00:00:00+00:00,General,2011-07-27 08:35:00.199000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-31995,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-14 11:58:35.065000+00:00 +Internet,RIGHT_case-8016,2011-08-03 00:00:00+00:00,General,2011-07-27 08:35:00.199000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-31996,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-14 11:59:33.707000+00:00 +Internet,RIGHT_case-8017,2011-08-03 00:00:00+00:00,General,2011-07-21 09:46:33.313000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30837,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-04 15:33:13.474000+00:00 +Internet,RIGHT_case-8017,2011-08-03 00:00:00+00:00,General,2011-07-21 09:46:33.313000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30843,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-04 15:34:34.278000+00:00 +Internet,RIGHT_case-8017,2011-08-03 00:00:00+00:00,General,2011-07-21 09:46:33.313000+00:00,2011-08-03 00:00:00.020000+00:00,Group 8,Resource11,2011-06-08 00:00:00.020000+00:00,task-30846,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-04 15:36:05.754000+00:00 +Internet,RIGHT_case-8018,2011-08-02 00:00:00+00:00,General,2011-07-20 11:00:36.494000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource11,2011-06-07 00:00:00.020000+00:00,task-30549,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 15:34:41.856000+00:00 +Internet,RIGHT_case-8018,2011-08-02 00:00:00+00:00,General,2011-07-20 11:00:36.494000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource11,2011-06-07 00:00:00.020000+00:00,task-30552,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 15:35:15.166000+00:00 +Internet,RIGHT_case-8018,2011-08-02 00:00:00+00:00,General,2011-07-20 11:00:36.494000+00:00,2011-08-02 00:00:00.020000+00:00,Group 8,Resource11,2011-06-07 00:00:00.020000+00:00,task-30553,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 15:35:56.264000+00:00 +Internet,RIGHT_case-8020,2011-08-04 00:00:00+00:00,General,2011-07-25 08:11:56.678000+00:00,2011-08-04 00:00:00.020000+00:00,Group 8,Resource11,2011-06-09 00:00:00.020000+00:00,task-31242,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-07 09:31:34.336000+00:00 +Internet,RIGHT_case-8020,2011-08-04 00:00:00+00:00,General,2011-07-25 08:11:56.678000+00:00,2011-08-04 00:00:00.020000+00:00,Group 8,Resource11,2011-06-09 00:00:00.020000+00:00,task-31245,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-07 09:32:10.716000+00:00 +Internet,RIGHT_case-8020,2011-08-04 00:00:00+00:00,General,2011-07-25 08:11:56.678000+00:00,2011-08-04 00:00:00.020000+00:00,Group 8,Resource11,2011-06-09 00:00:00.020000+00:00,task-31246,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-07 09:33:05.852000+00:00 +Internet,RIGHT_case-8021,2011-08-04 00:00:00+00:00,General,2011-08-02 11:20:35.789000+00:00,2011-08-04 00:00:00.020000+00:00,Group 5,Resource13,2011-06-09 00:00:00.020000+00:00,task-30114,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:53:42.995000+00:00 +Internet,RIGHT_case-8021,2011-08-04 00:00:00+00:00,General,2011-08-02 11:20:35.789000+00:00,2011-08-04 00:00:00.020000+00:00,Group 5,Resource13,2011-06-09 00:00:00.020000+00:00,task-30118,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-06-28 12:55:45.290000+00:00 +Internet,RIGHT_case-8021,2011-08-04 00:00:00+00:00,General,2011-08-02 11:20:35.789000+00:00,2011-08-04 00:00:00.020000+00:00,Group 5,Resource13,2011-06-09 00:00:00.020000+00:00,task-30117,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-28 12:56:02.083000+00:00 +Internet,RIGHT_case-8047,2011-08-05 17:00:10.794000+00:00,General,,2011-08-05 17:00:10.794000+00:00,,Resource26,2011-06-10 17:00:10.794000+00:00,task-28677,T02 Check confirmation of receipt,complete,Group 4,TEST,2011-06-15 10:54:47.774000+00:00 +Internet,RIGHT_case-8047,2011-08-05 17:00:10.794000+00:00,General,,2011-08-05 17:00:10.794000+00:00,,Resource26,2011-06-10 17:00:10.794000+00:00,task-28704,T10 Determine necessity to stop indication,complete,Group 1,Resource26,2011-06-15 11:55:26.279000+00:00 +Internet,RIGHT_case-8047,2011-08-05 17:00:10.794000+00:00,General,,2011-08-05 17:00:10.794000+00:00,,Resource26,2011-06-10 17:00:10.794000+00:00,task-28726,T02 Check confirmation of receipt,complete,Group 4,Resource26,2011-06-15 20:59:51.176000+00:00 +Internet,RIGHT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28670,T02 Check confirmation of receipt,complete,Group 4,admin2,2011-06-14 15:52:59.095000+00:00 +Internet,RIGHT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28687,T05 Print and send confirmation of receipt,complete,Group 2,TEST,2011-06-15 10:44:01.474000+00:00 +Internet,RIGHT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28703,T09-1 Process or receive external advice from party 1,complete,Group 1,test,2011-06-15 11:26:16.806000+00:00 +Internet,RIGHT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28702,T09-4 Process or receive external advice from party 4,complete,Group 1,Resource26,2011-06-15 12:41:42.494000+00:00 +Internet,RIGHT_case-8061,2011-08-08 15:37:34.380000+00:00,General,,2011-08-08 15:37:34.380000+00:00,,Resource26,2011-06-13 15:37:34.380000+00:00,task-28695,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource26,2011-06-16 15:48:40.842000+00:00 +Internet,RIGHT_case-8068,2011-08-09 10:08:29.011000+00:00,General,2011-10-24 12:38:10.339000+00:00,2011-08-09 10:08:29.011000+00:00,Group 5,Resource14,2011-06-14 10:08:29.011000+00:00,task-30886,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-07-05 08:48:01.826000+00:00 +Internet,RIGHT_case-8068,2011-08-09 10:08:29.011000+00:00,General,2011-10-24 12:38:10.339000+00:00,2011-08-09 10:08:29.011000+00:00,Group 5,Resource14,2011-06-14 10:08:29.011000+00:00,task-30891,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-07-05 08:48:54.412000+00:00 +Internet,RIGHT_case-8068,2011-08-09 10:08:29.011000+00:00,General,2011-10-24 12:38:10.339000+00:00,2011-08-09 10:08:29.011000+00:00,Group 5,Resource14,2011-06-14 10:08:29.011000+00:00,task-31957,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-07-15 14:03:46.734000+00:00 +Internet,RIGHT_case-8077,2011-08-09 01:06:40+00:00,General,2011-08-08 00:00:00.020000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource04,2011-06-14 01:06:40.020000+00:00,task-29414,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-06-22 08:45:24.919000+00:00 +Internet,RIGHT_case-8077,2011-08-09 01:06:40+00:00,General,2011-08-08 00:00:00.020000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource04,2011-06-14 01:06:40.020000+00:00,task-29417,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-06-22 08:46:09.708000+00:00 +Internet,RIGHT_case-8077,2011-08-09 01:06:40+00:00,General,2011-08-08 00:00:00.020000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource04,2011-06-14 01:06:40.020000+00:00,task-29418,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-06-22 08:53:14.021000+00:00 +Internet,RIGHT_case-8079,2011-08-31 14:45:00.957000+00:00,General,,2011-08-31 14:45:00.957000+00:00,,Resource26,2011-06-14 14:45:00.957000+00:00,task-28711,T02 Check confirmation of receipt,complete,Group 4,Resource26,2011-06-15 21:01:15.678000+00:00 +Internet,RIGHT_case-8079,2011-08-31 14:45:00.957000+00:00,General,,2011-08-31 14:45:00.957000+00:00,,Resource26,2011-06-14 14:45:00.957000+00:00,task-28732,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-06-16 13:01:54.592000+00:00 +Internet,RIGHT_case-8081,2011-08-09 01:06:40+00:00,General,2011-07-25 09:12:43.992000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31062,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-05 13:29:38.507000+00:00 +Internet,RIGHT_case-8081,2011-08-09 01:06:40+00:00,General,2011-07-25 09:12:43.992000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31065,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-05 13:30:40.050000+00:00 +Internet,RIGHT_case-8081,2011-08-09 01:06:40+00:00,General,2011-07-25 09:12:43.992000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31066,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-05 13:31:29.451000+00:00 +Internet,RIGHT_case-8082,2011-08-09 01:06:40+00:00,General,2011-07-25 08:20:52.864000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31865,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-13 09:53:50.512000+00:00 +Internet,RIGHT_case-8082,2011-08-09 01:06:40+00:00,General,2011-07-25 08:20:52.864000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31868,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-13 09:54:31.016000+00:00 +Internet,RIGHT_case-8082,2011-08-09 01:06:40+00:00,General,2011-07-25 08:20:52.864000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31869,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-13 09:55:22.938000+00:00 +Internet,RIGHT_case-8083,2011-08-09 01:06:40+00:00,General,2011-07-25 08:38:59.632000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31084,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-05 14:13:24.016000+00:00 +Internet,RIGHT_case-8083,2011-08-09 01:06:40+00:00,General,2011-07-25 08:38:59.632000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31087,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-05 14:14:18.480000+00:00 +Internet,RIGHT_case-8083,2011-08-09 01:06:40+00:00,General,2011-07-25 08:38:59.632000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31088,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-05 14:15:03.558000+00:00 +Internet,RIGHT_case-8084,2011-08-09 01:06:40+00:00,General,2011-07-25 08:51:37.539000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31389,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-08 09:26:56.265000+00:00 +Internet,RIGHT_case-8084,2011-08-09 01:06:40+00:00,General,2011-07-25 08:51:37.539000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31392,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-08 09:27:45.467000+00:00 +Internet,RIGHT_case-8084,2011-08-09 01:06:40+00:00,General,2011-07-25 08:51:37.539000+00:00,2011-08-09 01:06:40.020000+00:00,Group 8,Resource11,2011-06-14 01:06:40.020000+00:00,task-31393,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-08 09:28:51.978000+00:00 +Internet,RIGHT_case-8092,2011-08-05 01:06:40+00:00,General,2011-07-13 15:30:24.198000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource13,2011-06-10 01:06:40.020000+00:00,task-29522,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-22 13:52:31.680000+00:00 +Internet,RIGHT_case-8092,2011-08-05 01:06:40+00:00,General,2011-07-13 15:30:24.198000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource13,2011-06-10 01:06:40.020000+00:00,task-29524,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-22 13:52:50.457000+00:00 +Internet,RIGHT_case-8092,2011-08-05 01:06:40+00:00,General,2011-07-13 15:30:24.198000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource13,2011-06-10 01:06:40.020000+00:00,task-29528,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-06-22 13:54:35.854000+00:00 +Internet,RIGHT_case-8093,2011-09-21 01:06:40+00:00,General,2011-09-05 11:45:11.852000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-29446,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-06-22 10:32:09.283000+00:00 +Internet,RIGHT_case-8093,2011-09-21 01:06:40+00:00,General,2011-09-05 11:45:11.852000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-29449,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-06-22 10:33:14.640000+00:00 +Internet,RIGHT_case-8093,2011-09-21 01:06:40+00:00,General,2011-09-05 11:45:11.852000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-29571,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-06-22 15:11:24.768000+00:00 +Desk,RIGHT_case-8098,2011-07-21 01:06:40+00:00,General,2011-08-23 10:00:13.100000+00:00,2011-07-21 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-30731,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-07-04 11:31:29.068000+00:00 +Desk,RIGHT_case-8098,2011-07-21 01:06:40+00:00,General,2011-08-23 10:00:13.100000+00:00,2011-07-21 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-30736,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-07-04 11:32:47.755000+00:00 +Desk,RIGHT_case-8098,2011-07-21 01:06:40+00:00,General,2011-08-23 10:00:13.100000+00:00,2011-07-21 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-30739,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-07-04 11:33:23.885000+00:00 +Internet,RIGHT_case-8100,2011-05-27 01:06:40+00:00,General,2011-06-24 10:10:32.020000+00:00,2011-05-27 01:06:40.020000+00:00,Group 5,Resource06,2011-04-01 01:06:40.020000+00:00,task-29085,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-06-20 09:19:35.449000+00:00 +Internet,RIGHT_case-8100,2011-05-27 01:06:40+00:00,General,2011-06-24 10:10:32.020000+00:00,2011-05-27 01:06:40.020000+00:00,Group 5,Resource06,2011-04-01 01:06:40.020000+00:00,task-29095,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-06-20 09:20:10.860000+00:00 +Internet,RIGHT_case-8100,2011-05-27 01:06:40+00:00,General,2011-06-24 10:10:32.020000+00:00,2011-05-27 01:06:40.020000+00:00,Group 5,Resource06,2011-04-01 01:06:40.020000+00:00,task-29096,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-06-20 11:00:29.389000+00:00 +Internet,RIGHT_case-8102,2011-09-01 01:06:40+00:00,General,2011-08-26 14:51:04.144000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-29835,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:31:56.502000+00:00 +Internet,RIGHT_case-8102,2011-09-01 01:06:40+00:00,General,2011-08-26 14:51:04.144000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-29838,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:33:22.251000+00:00 +Internet,RIGHT_case-8102,2011-09-01 01:06:40+00:00,General,2011-08-26 14:51:04.144000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-05-26 01:06:40.020000+00:00,task-29839,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-27 13:33:45.679000+00:00 +Internet,RIGHT_case-8105,2011-08-10 16:27:56.852000+00:00,General,2011-08-12 11:34:09.085000+00:00,2011-08-10 16:27:56.852000+00:00,Group 5,Resource12,2011-06-15 16:31:28.724000+00:00,task-32983,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-07-21 11:19:35.542000+00:00 +Internet,RIGHT_case-8105,2011-08-10 16:27:56.852000+00:00,General,2011-08-12 11:34:09.085000+00:00,2011-08-10 16:27:56.852000+00:00,Group 5,Resource12,2011-06-15 16:31:28.724000+00:00,task-32990,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-07-21 11:21:55.470000+00:00 +Internet,RIGHT_case-8105,2011-08-10 16:27:56.852000+00:00,General,2011-08-12 11:34:09.085000+00:00,2011-08-10 16:27:56.852000+00:00,Group 5,Resource12,2011-06-15 16:31:28.724000+00:00,task-32992,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-07-21 11:34:35.458000+00:00 +Internet,RIGHT_case-8131,2011-08-12 01:06:40+00:00,General,2011-07-25 09:18:52.518000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-31413,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-08 10:00:33.447000+00:00 +Internet,RIGHT_case-8131,2011-08-12 01:06:40+00:00,General,2011-07-25 09:18:52.518000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-31416,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-08 10:01:52.152000+00:00 +Internet,RIGHT_case-8131,2011-08-12 01:06:40+00:00,General,2011-07-25 09:18:52.518000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-31417,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-08 10:02:58.985000+00:00 +Internet,RIGHT_case-8132,2011-08-12 01:06:40+00:00,General,2011-07-27 08:41:31.032000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-31032,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-05 12:10:56.395000+00:00 +Internet,RIGHT_case-8132,2011-08-12 01:06:40+00:00,General,2011-07-27 08:41:31.032000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-31035,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-05 12:11:47.148000+00:00 +Internet,RIGHT_case-8132,2011-08-12 01:06:40+00:00,General,2011-07-27 08:41:31.032000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-31036,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-05 12:12:42.051000+00:00 +Internet,RIGHT_case-8133,2011-08-12 01:06:40+00:00,General,2011-07-27 08:57:47.557000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-30963,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-05 11:17:38.823000+00:00 +Internet,RIGHT_case-8133,2011-08-12 01:06:40+00:00,General,2011-07-27 08:57:47.557000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-30966,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-05 11:18:26.621000+00:00 +Internet,RIGHT_case-8133,2011-08-12 01:06:40+00:00,General,2011-07-27 08:57:47.557000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-30967,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-05 11:19:35.897000+00:00 +Internet,RIGHT_case-8135,2011-08-12 01:06:40+00:00,General,2011-07-27 09:01:43.489000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-30933,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-07-05 10:24:28.855000+00:00 +Internet,RIGHT_case-8135,2011-08-12 01:06:40+00:00,General,2011-07-27 09:01:43.489000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-30938,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-07-05 10:26:27.567000+00:00 +Internet,RIGHT_case-8135,2011-08-12 01:06:40+00:00,General,2011-07-27 09:01:43.489000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-30939,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-07-05 10:27:41.264000+00:00 +Desk,RIGHT_case-8136,2011-08-12 01:06:40+00:00,General,2011-08-01 15:11:23.676000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource09,2011-06-17 01:06:40.020000+00:00,task-30580,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-01 10:39:37.906000+00:00 +Desk,RIGHT_case-8136,2011-08-12 01:06:40+00:00,General,2011-08-01 15:11:23.676000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource09,2011-06-17 01:06:40.020000+00:00,task-30584,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-01 10:41:38.595000+00:00 +Desk,RIGHT_case-8136,2011-08-12 01:06:40+00:00,General,2011-08-01 15:11:23.676000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource09,2011-06-17 01:06:40.020000+00:00,task-30583,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-01 10:49:44.722000+00:00 +Internet,RIGHT_case-8137,2011-08-10 01:06:40+00:00,General,2011-08-10 16:23:05.862000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource13,2011-06-15 01:06:40.020000+00:00,task-29810,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 12:56:08.686000+00:00 +Internet,RIGHT_case-8137,2011-08-10 01:06:40+00:00,General,2011-08-10 16:23:05.862000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource13,2011-06-15 01:06:40.020000+00:00,task-29813,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 12:57:22.148000+00:00 +Internet,RIGHT_case-8137,2011-08-10 01:06:40+00:00,General,2011-08-10 16:23:05.862000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource13,2011-06-15 01:06:40.020000+00:00,task-29814,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-27 12:58:09.048000+00:00 +Internet,RIGHT_case-8138,2011-08-12 01:06:40+00:00,General,2011-07-27 09:55:01.014000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-32009,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-14 12:33:27.308000+00:00 +Internet,RIGHT_case-8138,2011-08-12 01:06:40+00:00,General,2011-07-27 09:55:01.014000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-32012,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-14 12:34:08.562000+00:00 +Internet,RIGHT_case-8138,2011-08-12 01:06:40+00:00,General,2011-07-27 09:55:01.014000+00:00,2011-08-12 01:06:40.020000+00:00,Group 8,Resource11,2011-06-17 01:06:40.020000+00:00,task-32013,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-14 12:35:04.338000+00:00 +Desk,RIGHT_case-8141,2011-08-12 01:06:40+00:00,General,2011-12-09 15:08:00.018000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-31798,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-11-09 08:53:08.186000+00:00 +Desk,RIGHT_case-8141,2011-08-12 01:06:40+00:00,General,2011-12-09 15:08:00.018000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-45878,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-09 08:57:49.951000+00:00 +Desk,RIGHT_case-8141,2011-08-12 01:06:40+00:00,General,2011-12-09 15:08:00.018000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-32960,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-12-06 16:07:31.109000+00:00 +Desk,RIGHT_case-8142,2011-08-12 15:53:34.450000+00:00,General,2011-07-29 15:08:16.210000+00:00,2011-08-12 15:53:34.450000+00:00,Group 5,Resource09,2011-06-17 15:53:34.450000+00:00,task-31199,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-06 15:06:31.645000+00:00 +Desk,RIGHT_case-8142,2011-08-12 15:53:34.450000+00:00,General,2011-07-29 15:08:16.210000+00:00,2011-08-12 15:53:34.450000+00:00,Group 5,Resource09,2011-06-17 15:53:34.450000+00:00,task-31203,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-06 15:07:47.950000+00:00 +Desk,RIGHT_case-8142,2011-08-12 15:53:34.450000+00:00,General,2011-07-29 15:08:16.210000+00:00,2011-08-12 15:53:34.450000+00:00,Group 5,Resource09,2011-06-17 15:53:34.450000+00:00,task-31201,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-06 15:08:38.772000+00:00 +Internet,RIGHT_case-8179,2011-08-12 01:06:40+00:00,General,2011-08-12 14:08:34.496000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource13,2011-06-17 01:06:40.020000+00:00,task-30204,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-29 10:10:54.648000+00:00 +Internet,RIGHT_case-8179,2011-08-12 01:06:40+00:00,General,2011-08-12 14:08:34.496000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource13,2011-06-17 01:06:40.020000+00:00,task-30208,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-29 10:11:47.742000+00:00 +Internet,RIGHT_case-8179,2011-08-12 01:06:40+00:00,General,2011-08-12 14:08:34.496000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource13,2011-06-17 01:06:40.020000+00:00,task-30206,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-29 10:19:31.809000+00:00 +Internet,RIGHT_case-8180,2011-08-14 01:06:40+00:00,General,2011-07-27 09:16:35.299000+00:00,2011-08-14 01:06:40.020000+00:00,Group 8,Resource11,2011-06-19 01:06:40.020000+00:00,task-31277,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-07 11:21:18.590000+00:00 +Internet,RIGHT_case-8180,2011-08-14 01:06:40+00:00,General,2011-07-27 09:16:35.299000+00:00,2011-08-14 01:06:40.020000+00:00,Group 8,Resource11,2011-06-19 01:06:40.020000+00:00,task-31282,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-07 11:22:15.060000+00:00 +Internet,RIGHT_case-8180,2011-08-14 01:06:40+00:00,General,2011-07-27 09:16:35.299000+00:00,2011-08-14 01:06:40.020000+00:00,Group 8,Resource11,2011-06-19 01:06:40.020000+00:00,task-31285,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-07 11:23:02.697000+00:00 +Desk,RIGHT_case-8183,2011-09-06 01:06:40+00:00,General,2011-08-30 09:42:28.600000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource06,2011-05-31 01:06:40.020000+00:00,task-29758,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-06-27 10:47:24.200000+00:00 +Desk,RIGHT_case-8183,2011-09-06 01:06:40+00:00,General,2011-08-30 09:42:28.600000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource06,2011-05-31 01:06:40.020000+00:00,task-29827,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-06-27 13:03:43.471000+00:00 +Desk,RIGHT_case-8183,2011-09-06 01:06:40+00:00,General,2011-08-30 09:42:28.600000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource06,2011-05-31 01:06:40.020000+00:00,task-29830,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-06-27 13:07:56.300000+00:00 +Desk,RIGHT_case-8184,2011-09-27 01:06:40+00:00,General,2011-09-20 16:08:58.791000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource23,2011-05-31 01:06:40.020000+00:00,task-30108,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-06-28 12:50:02.553000+00:00 +Desk,RIGHT_case-8184,2011-09-27 01:06:40+00:00,General,2011-09-20 16:08:58.791000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource23,2011-05-31 01:06:40.020000+00:00,task-30111,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-06-28 12:54:12.278000+00:00 +Desk,RIGHT_case-8184,2011-09-27 01:06:40+00:00,General,2011-09-20 16:08:58.791000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource23,2011-05-31 01:06:40.020000+00:00,task-30600,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-07-01 11:21:49.271000+00:00 +Internet,RIGHT_case-8198,2011-08-16 01:06:40+00:00,General,2011-07-28 07:24:34.315000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-31922,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-13 13:13:21.658000+00:00 +Internet,RIGHT_case-8198,2011-08-16 01:06:40+00:00,General,2011-07-28 07:24:34.315000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-31925,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-13 13:14:01.090000+00:00 +Internet,RIGHT_case-8198,2011-08-16 01:06:40+00:00,General,2011-07-28 07:24:34.315000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-31926,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-13 13:14:53.068000+00:00 +Internet,RIGHT_case-8199,2011-08-16 01:06:40+00:00,General,2011-08-10 14:38:57.142000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-29541,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-06-22 14:01:50.701000+00:00 +Internet,RIGHT_case-8199,2011-08-16 01:06:40+00:00,General,2011-08-10 14:38:57.142000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-29544,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-06-22 14:02:28.179000+00:00 +Internet,RIGHT_case-8199,2011-08-16 01:06:40+00:00,General,2011-08-10 14:38:57.142000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-29643,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-06-24 08:52:39.470000+00:00 +Internet,RIGHT_case-8232,2011-08-19 10:33:04.860000+00:00,General,2011-08-17 10:06:11.016000+00:00,2011-08-19 10:33:04.860000+00:00,Group 5,Resource05,2011-06-24 10:33:04.860000+00:00,task-30801,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-07-04 14:11:22.323000+00:00 +Internet,RIGHT_case-8232,2011-08-19 10:33:04.860000+00:00,General,2011-08-17 10:06:11.016000+00:00,2011-08-19 10:33:04.860000+00:00,Group 5,Resource05,2011-06-24 10:33:04.860000+00:00,task-30788,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-04 14:12:14.652000+00:00 +Internet,RIGHT_case-8232,2011-08-19 10:33:04.860000+00:00,General,2011-08-17 10:06:11.016000+00:00,2011-08-19 10:33:04.860000+00:00,Group 5,Resource05,2011-06-24 10:33:04.860000+00:00,task-30808,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-07-04 14:13:46.110000+00:00 +Internet,RIGHT_case-8234,2011-08-19 11:23:22.882000+00:00,General,2011-11-16 10:16:19.364000+00:00,2011-08-19 11:23:22.882000+00:00,Group 5,Resource14,2011-06-24 11:23:22.882000+00:00,task-37187,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-26 10:39:24.737000+00:00 +Internet,RIGHT_case-8234,2011-08-19 11:23:22.882000+00:00,General,2011-11-16 10:16:19.364000+00:00,2011-08-19 11:23:22.882000+00:00,Group 5,Resource14,2011-06-24 11:23:22.882000+00:00,task-37190,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-26 10:40:16.633000+00:00 +Internet,RIGHT_case-8234,2011-08-19 11:23:22.882000+00:00,General,2011-11-16 10:16:19.364000+00:00,2011-08-19 11:23:22.882000+00:00,Group 5,Resource14,2011-06-24 11:23:22.882000+00:00,task-37191,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-26 10:41:12.151000+00:00 +Internet,RIGHT_case-8259,2011-08-17 01:06:40+00:00,General,2011-08-15 12:57:08.915000+00:00,2011-08-17 01:06:40.020000+00:00,Group 5,Resource12,2011-06-22 01:06:40.020000+00:00,task-35685,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-08-08 14:44:45.625000+00:00 +Internet,RIGHT_case-8259,2011-08-17 01:06:40+00:00,General,2011-08-15 12:57:08.915000+00:00,2011-08-17 01:06:40.020000+00:00,Group 5,Resource12,2011-06-22 01:06:40.020000+00:00,task-35688,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-08-08 14:46:21.601000+00:00 +Internet,RIGHT_case-8259,2011-08-17 01:06:40+00:00,General,2011-08-15 12:57:08.915000+00:00,2011-08-17 01:06:40.020000+00:00,Group 5,Resource12,2011-06-22 01:06:40.020000+00:00,task-35689,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-08-08 14:47:10.742000+00:00 +Internet,RIGHT_case-8261,2011-08-17 01:06:40+00:00,General,2011-07-28 07:29:13.253000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-29786,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-14 13:58:34.106000+00:00 +Internet,RIGHT_case-8261,2011-08-17 01:06:40+00:00,General,2011-07-28 07:29:13.253000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32051,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-14 14:00:29.442000+00:00 +Internet,RIGHT_case-8261,2011-08-17 01:06:40+00:00,General,2011-07-28 07:29:13.253000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32049,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-14 14:02:43.390000+00:00 +Internet,RIGHT_case-8263,2011-08-17 01:06:40+00:00,General,2011-08-01 07:58:15.718000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32551,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 09:07:39.818000+00:00 +Internet,RIGHT_case-8263,2011-08-17 01:06:40+00:00,General,2011-08-01 07:58:15.718000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32554,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 09:08:24.214000+00:00 +Internet,RIGHT_case-8263,2011-08-17 01:06:40+00:00,General,2011-08-01 07:58:15.718000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32555,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 09:09:23.789000+00:00 +Internet,RIGHT_case-8264,2011-08-17 01:06:40+00:00,General,2011-07-28 07:33:28.173000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-29793,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-14 14:32:01.996000+00:00 +Internet,RIGHT_case-8264,2011-08-17 01:06:40+00:00,General,2011-07-28 07:33:28.173000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32073,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-14 14:33:00.223000+00:00 +Internet,RIGHT_case-8264,2011-08-17 01:06:40+00:00,General,2011-07-28 07:33:28.173000+00:00,2011-08-17 01:06:40.020000+00:00,Group 8,Resource11,2011-06-22 01:06:40.020000+00:00,task-32074,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-14 14:33:36.618000+00:00 +Internet,RIGHT_case-8265,2011-08-18 01:06:40+00:00,General,2011-08-01 08:08:24.381000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-32575,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 09:20:00.751000+00:00 +Internet,RIGHT_case-8265,2011-08-18 01:06:40+00:00,General,2011-08-01 08:08:24.381000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-32579,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 09:20:35.697000+00:00 +Internet,RIGHT_case-8265,2011-08-18 01:06:40+00:00,General,2011-08-01 08:08:24.381000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-32581,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 09:21:12.800000+00:00 +Internet,RIGHT_case-8266,2011-08-18 01:06:40+00:00,General,2011-08-01 08:16:20.110000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-29804,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 10:02:27.775000+00:00 +Internet,RIGHT_case-8266,2011-08-18 01:06:40+00:00,General,2011-08-01 08:16:20.110000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-32612,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 10:03:17.624000+00:00 +Internet,RIGHT_case-8266,2011-08-18 01:06:40+00:00,General,2011-08-01 08:16:20.110000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource11,2011-06-23 01:06:40.020000+00:00,task-32613,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 10:04:36.459000+00:00 +Internet,RIGHT_case-8267,2011-08-18 01:06:40+00:00,Customer contact,2011-06-24 00:00:00.020000+00:00,2011-08-18 01:06:40.020000+00:00,,admin3,2011-06-24 01:06:40.020000+00:00,task-29807,T02 Check confirmation of receipt,complete,Group 4,admin2,2011-06-27 12:14:43.992000+00:00 +Internet,RIGHT_case-8295,2011-08-19 01:06:40+00:00,General,,2011-08-19 01:06:40.020000+00:00,Group 5,Resource14,2011-06-24 01:06:40.020000+00:00,task-30015,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-07-11 16:04:14.501000+00:00 +Internet,RIGHT_case-8295,2011-08-19 01:06:40+00:00,General,,2011-08-19 01:06:40.020000+00:00,Group 5,Resource14,2011-06-24 01:06:40.020000+00:00,task-31656,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-07-11 16:04:53.646000+00:00 +Internet,RIGHT_case-8295,2011-08-19 01:06:40+00:00,General,,2011-08-19 01:06:40.020000+00:00,Group 5,Resource14,2011-06-24 01:06:40.020000+00:00,task-31657,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-07-11 16:05:31.583000+00:00 +Internet,RIGHT_case-8297,2011-10-04 01:06:40+00:00,General,2011-09-26 14:55:43.297000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource04,2011-06-28 01:06:40.020000+00:00,task-30500,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-06-30 14:12:58.302000+00:00 +Internet,RIGHT_case-8297,2011-10-04 01:06:40+00:00,General,2011-09-26 14:55:43.297000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource04,2011-06-28 01:06:40.020000+00:00,task-30503,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-06-30 14:13:59.316000+00:00 +Internet,RIGHT_case-8297,2011-10-04 01:06:40+00:00,General,2011-09-26 14:55:43.297000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource04,2011-06-28 01:06:40.020000+00:00,task-31473,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-07-08 11:12:16.341000+00:00 +Internet,RIGHT_case-8318,2011-08-04 01:06:40+00:00,General,2011-08-15 15:58:15.067000+00:00,2011-08-04 01:06:40.020000+00:00,Group 5,Resource05,2011-06-09 01:06:40.020000+00:00,task-30665,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-04 09:53:30.669000+00:00 +Internet,RIGHT_case-8318,2011-08-04 01:06:40+00:00,General,2011-08-15 15:58:15.067000+00:00,2011-08-04 01:06:40.020000+00:00,Group 5,Resource05,2011-06-09 01:06:40.020000+00:00,task-30670,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-04 09:58:05.869000+00:00 +Internet,RIGHT_case-8318,2011-08-04 01:06:40+00:00,General,2011-08-15 15:58:15.067000+00:00,2011-08-04 01:06:40.020000+00:00,Group 5,Resource05,2011-06-09 01:06:40.020000+00:00,task-30668,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-07-04 09:58:36.803000+00:00 +Internet,RIGHT_case-8318,2011-08-04 01:06:40+00:00,General,2011-08-15 15:58:15.067000+00:00,2011-08-04 01:06:40.020000+00:00,Group 5,Resource05,2011-06-09 01:06:40.020000+00:00,task-30676,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-07-04 10:06:06.290000+00:00 +Internet,RIGHT_case-8320,2011-08-05 01:06:40+00:00,General,2011-09-19 08:51:33.367000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource09,2011-06-10 01:06:40.020000+00:00,task-33439,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-26 14:12:42.401000+00:00 +Internet,RIGHT_case-8320,2011-08-05 01:06:40+00:00,General,2011-09-19 08:51:33.367000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource09,2011-06-10 01:06:40.020000+00:00,task-33500,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-26 14:13:49.912000+00:00 +Internet,RIGHT_case-8320,2011-08-05 01:06:40+00:00,General,2011-09-19 08:51:33.367000+00:00,2011-08-05 01:06:40.020000+00:00,Group 5,Resource09,2011-06-10 01:06:40.020000+00:00,task-33498,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-26 14:14:22.592000+00:00 +Desk,RIGHT_case-8321,2011-08-16 01:06:40+00:00,General,2011-07-27 09:20:19.791000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-32093,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-14 14:52:23.427000+00:00 +Desk,RIGHT_case-8321,2011-08-16 01:06:40+00:00,General,2011-07-27 09:20:19.791000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-32097,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-14 15:01:31.093000+00:00 +Desk,RIGHT_case-8321,2011-08-16 01:06:40+00:00,General,2011-07-27 09:20:19.791000+00:00,2011-08-16 01:06:40.020000+00:00,Group 8,Resource11,2011-06-21 01:06:40.020000+00:00,task-32098,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-14 15:03:52.159000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-30781,T02 Check confirmation of receipt,complete,EMPTY,Resource05,2011-08-01 09:46:51.434000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34600,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-08-01 09:47:15.128000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34606,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-01 09:48:11.577000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34607,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-08-01 09:48:50.433000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34609,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource05,2011-08-01 09:50:21.355000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34612,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource05,2011-08-01 09:51:32.157000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34615,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource05,2011-08-01 09:53:44.758000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34617,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-08-01 09:54:38.139000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34619,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-08-01 09:55:34.741000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34621,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource05,2011-08-01 09:56:59.387000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34625,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource05,2011-08-01 09:58:16.614000+00:00 +Internet,RIGHT_case-8323,2011-08-09 01:06:40+00:00,General,2011-08-01 12:51:30.801000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource05,2011-06-14 01:06:40.020000+00:00,task-34627,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-01 10:03:44.585000+00:00 +Internet,RIGHT_case-8342,2011-08-24 01:06:40+00:00,General,2011-07-13 09:48:49.381000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource14,2011-06-29 01:06:40.020000+00:00,task-30392,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-07-07 10:57:28.399000+00:00 +Internet,RIGHT_case-8342,2011-08-24 01:06:40+00:00,General,2011-07-13 09:48:49.381000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource14,2011-06-29 01:06:40.020000+00:00,task-31268,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-07-07 10:58:03.942000+00:00 +Internet,RIGHT_case-8342,2011-08-24 01:06:40+00:00,General,2011-07-13 09:48:49.381000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource14,2011-06-29 01:06:40.020000+00:00,task-31269,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-07-07 10:59:11.436000+00:00 +Internet,RIGHT_case-8344,2011-08-22 01:06:40+00:00,General,2011-08-22 15:03:08.467000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-30455,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-05 08:42:24.520000+00:00 +Internet,RIGHT_case-8344,2011-08-22 01:06:40+00:00,General,2011-08-22 15:03:08.467000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-30881,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-07-05 08:43:02.634000+00:00 +Internet,RIGHT_case-8344,2011-08-22 01:06:40+00:00,General,2011-08-22 15:03:08.467000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-30883,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-07-05 08:43:41.404000+00:00 +Internet,RIGHT_case-8363,2011-08-22 01:06:40+00:00,General,2011-09-06 10:31:34.113000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-31059,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-05 13:13:47.994000+00:00 +Internet,RIGHT_case-8363,2011-08-22 01:06:40+00:00,General,2011-09-06 10:31:34.113000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-31104,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-07-05 14:23:48.103000+00:00 +Internet,RIGHT_case-8363,2011-08-22 01:06:40+00:00,General,2011-09-06 10:31:34.113000+00:00,2011-08-22 01:06:40.020000+00:00,Group 5,Resource05,2011-06-27 01:06:40.020000+00:00,task-31083,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-07-05 14:24:41.540000+00:00 +Internet,RIGHT_case-8365,2011-08-23 01:06:40+00:00,General,2011-08-22 15:30:39.953000+00:00,2011-08-23 01:06:40.020000+00:00,Group 5,Resource05,2011-06-28 01:06:40.020000+00:00,task-31009,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-05 12:02:01.664000+00:00 +Internet,RIGHT_case-8365,2011-08-23 01:06:40+00:00,General,2011-08-22 15:30:39.953000+00:00,2011-08-23 01:06:40.020000+00:00,Group 5,Resource05,2011-06-28 01:06:40.020000+00:00,task-31012,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-07-05 12:02:40.491000+00:00 +Internet,RIGHT_case-8365,2011-08-23 01:06:40+00:00,General,2011-08-22 15:30:39.953000+00:00,2011-08-23 01:06:40.020000+00:00,Group 5,Resource05,2011-06-28 01:06:40.020000+00:00,task-31014,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-07-05 12:03:57.199000+00:00 +Internet,RIGHT_case-8367,2011-08-26 01:06:40+00:00,General,2011-09-05 10:52:02.922000+00:00,2011-08-26 01:06:40.020000+00:00,Group 6,Resource29,2011-06-27 01:06:40.020000+00:00,task-31115,T10 Determine necessity to stop indication,complete,Group 1,Resource29,2011-07-05 15:42:13.576000+00:00 +Internet,RIGHT_case-8367,2011-08-26 01:06:40+00:00,General,2011-09-05 10:52:02.922000+00:00,2011-08-26 01:06:40.020000+00:00,Group 6,Resource29,2011-06-27 01:06:40.020000+00:00,task-31113,T02 Check confirmation of receipt,complete,EMPTY,Resource29,2011-07-05 16:01:22.893000+00:00 +Internet,RIGHT_case-8367,2011-08-26 01:06:40+00:00,General,2011-09-05 10:52:02.922000+00:00,2011-08-26 01:06:40.020000+00:00,Group 6,Resource29,2011-06-27 01:06:40.020000+00:00,task-31127,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-07-15 16:12:52.047000+00:00 +Internet,RIGHT_case-8381,2011-10-06 01:06:40+00:00,General,2011-09-30 14:05:01.438000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33651,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 09:47:52.724000+00:00 +Internet,RIGHT_case-8381,2011-10-06 01:06:40+00:00,General,2011-09-30 14:05:01.438000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33654,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 09:48:52.032000+00:00 +Internet,RIGHT_case-8381,2011-10-06 01:06:40+00:00,General,2011-09-30 14:05:01.438000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33655,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 09:49:28.938000+00:00 +Internet,RIGHT_case-8385,2011-10-06 01:06:40+00:00,General,2011-09-21 16:08:47.117000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33663,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 09:56:06.569000+00:00 +Internet,RIGHT_case-8385,2011-10-06 01:06:40+00:00,General,2011-09-21 16:08:47.117000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33666,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 09:56:49.184000+00:00 +Internet,RIGHT_case-8385,2011-10-06 01:06:40+00:00,General,2011-09-21 16:08:47.117000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33668,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 09:57:19.932000+00:00 +Internet,RIGHT_case-8388,2011-10-06 01:06:40+00:00,General,2011-09-30 10:33:31.866000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33673,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:00:18.861000+00:00 +Internet,RIGHT_case-8388,2011-10-06 01:06:40+00:00,General,2011-09-30 10:33:31.866000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33678,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:00:59.259000+00:00 +Internet,RIGHT_case-8388,2011-10-06 01:06:40+00:00,General,2011-09-30 10:33:31.866000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33680,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:01:36.257000+00:00 +Internet,RIGHT_case-8390,2011-08-24 01:06:40+00:00,General,2011-08-23 16:10:49.238000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource02,2011-05-18 01:06:40.020000+00:00,task-31677,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-07-12 09:23:48.664000+00:00 +Internet,RIGHT_case-8390,2011-08-24 01:06:40+00:00,General,2011-08-23 16:10:49.238000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource02,2011-05-18 01:06:40.020000+00:00,task-31680,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-07-12 09:24:55.215000+00:00 +Internet,RIGHT_case-8390,2011-08-24 01:06:40+00:00,General,2011-08-23 16:10:49.238000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource02,2011-05-18 01:06:40.020000+00:00,task-34100,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-07-28 14:12:41.655000+00:00 +Internet,RIGHT_case-8398,2011-08-24 01:06:40+00:00,General,2011-08-01 08:22:05.095000+00:00,2011-08-24 01:06:40.020000+00:00,Group 8,Resource11,2011-06-29 01:06:40.020000+00:00,task-32660,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 10:55:22.959000+00:00 +Internet,RIGHT_case-8398,2011-08-24 01:06:40+00:00,General,2011-08-01 08:22:05.095000+00:00,2011-08-24 01:06:40.020000+00:00,Group 8,Resource11,2011-06-29 01:06:40.020000+00:00,task-32663,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 10:55:56.999000+00:00 +Internet,RIGHT_case-8398,2011-08-24 01:06:40+00:00,General,2011-08-01 08:22:05.095000+00:00,2011-08-24 01:06:40.020000+00:00,Group 8,Resource11,2011-06-29 01:06:40.020000+00:00,task-32664,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 10:56:40.362000+00:00 +Internet,RIGHT_case-8399,2011-08-25 01:06:40+00:00,General,2011-08-02 07:44:03.231000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-32680,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 11:08:53.730000+00:00 +Internet,RIGHT_case-8399,2011-08-25 01:06:40+00:00,General,2011-08-02 07:44:03.231000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-32683,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 11:09:44.644000+00:00 +Internet,RIGHT_case-8399,2011-08-25 01:06:40+00:00,General,2011-08-02 07:44:03.231000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-32684,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 11:10:24.840000+00:00 +Internet,RIGHT_case-8401,2011-08-25 01:06:40+00:00,General,2011-08-02 07:38:55.391000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-32697,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 11:19:50.327000+00:00 +Internet,RIGHT_case-8401,2011-08-25 01:06:40+00:00,General,2011-08-02 07:38:55.391000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-32700,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 11:20:54.274000+00:00 +Internet,RIGHT_case-8401,2011-08-25 01:06:40+00:00,General,2011-08-02 07:38:55.391000+00:00,2011-08-25 01:06:40.020000+00:00,Group 8,Resource11,2011-06-30 01:06:40.020000+00:00,task-32701,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 11:21:51.284000+00:00 +Internet,RIGHT_case-8403,2011-08-26 01:06:40+00:00,General,2011-08-02 07:33:56.390000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32720,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 11:37:11.202000+00:00 +Internet,RIGHT_case-8403,2011-08-26 01:06:40+00:00,General,2011-08-02 07:33:56.390000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32725,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 11:37:44.777000+00:00 +Internet,RIGHT_case-8403,2011-08-26 01:06:40+00:00,General,2011-08-02 07:33:56.390000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32726,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 11:38:27.554000+00:00 +Internet,RIGHT_case-8406,2011-08-26 01:06:40+00:00,General,2011-08-03 07:23:49.587000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32771,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 12:35:39.699000+00:00 +Internet,RIGHT_case-8406,2011-08-26 01:06:40+00:00,General,2011-08-03 07:23:49.587000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32775,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 12:36:46.849000+00:00 +Internet,RIGHT_case-8406,2011-08-26 01:06:40+00:00,General,2011-08-03 07:23:49.587000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32776,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 12:37:26.679000+00:00 +Internet,RIGHT_case-8408,2011-08-30 11:08:46.379000+00:00,General,2011-08-26 15:40:55.950000+00:00,2011-08-30 11:08:46.379000+00:00,Group 5,Resource06,2011-07-05 11:08:46.379000+00:00,task-30984,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-05 11:26:36.256000+00:00 +Internet,RIGHT_case-8408,2011-08-30 11:08:46.379000+00:00,General,2011-08-26 15:40:55.950000+00:00,2011-08-30 11:08:46.379000+00:00,Group 5,Resource06,2011-07-05 11:08:46.379000+00:00,task-30987,T05 Print and send confirmation of receipt,complete,EMPTY,Resource06,2011-07-05 11:27:33.846000+00:00 +Internet,RIGHT_case-8408,2011-08-30 11:08:46.379000+00:00,General,2011-08-26 15:40:55.950000+00:00,2011-08-30 11:08:46.379000+00:00,Group 5,Resource06,2011-07-05 11:08:46.379000+00:00,task-30988,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-05 11:28:34.129000+00:00 +Internet,RIGHT_case-8409,2011-08-24 01:06:40+00:00,General,2011-08-24 15:51:35.662000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource13,2011-06-29 01:06:40.020000+00:00,task-34175,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 15:07:26.427000+00:00 +Internet,RIGHT_case-8409,2011-08-24 01:06:40+00:00,General,2011-08-24 15:51:35.662000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource13,2011-06-29 01:06:40.020000+00:00,task-34180,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 15:08:29.348000+00:00 +Internet,RIGHT_case-8409,2011-08-24 01:06:40+00:00,General,2011-08-24 15:51:35.662000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource13,2011-06-29 01:06:40.020000+00:00,task-34182,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-07-28 15:09:01.302000+00:00 +Internet,RIGHT_case-8410,2011-10-06 01:06:40+00:00,General,2011-09-30 11:21:21.336000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource05,2011-06-30 01:06:40.020000+00:00,task-34694,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-08-01 13:48:34.755000+00:00 +Internet,RIGHT_case-8410,2011-10-06 01:06:40+00:00,General,2011-09-30 11:21:21.336000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource05,2011-06-30 01:06:40.020000+00:00,task-34697,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-01 13:49:41.929000+00:00 +Internet,RIGHT_case-8410,2011-10-06 01:06:40+00:00,General,2011-09-30 11:21:21.336000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource05,2011-06-30 01:06:40.020000+00:00,task-34699,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-01 14:07:07.106000+00:00 +Internet,RIGHT_case-8411,2011-10-20 01:06:40+00:00,General,2011-11-16 10:25:18.295000+00:00,2011-08-25 01:06:40.020000+00:00,,admin1,2011-06-30 01:06:40.020000+00:00,task-35429,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-08-04 13:54:28.029000+00:00 +Internet,RIGHT_case-8411,2011-10-20 01:06:40+00:00,General,2011-11-16 10:25:18.295000+00:00,2011-08-25 01:06:40.020000+00:00,,admin1,2011-06-30 01:06:40.020000+00:00,task-35435,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-08-04 13:55:26.474000+00:00 +Internet,RIGHT_case-8411,2011-10-20 01:06:40+00:00,General,2011-11-16 10:25:18.295000+00:00,2011-08-25 01:06:40.020000+00:00,,admin1,2011-06-30 01:06:40.020000+00:00,task-35432,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-08-04 13:56:07.454000+00:00 +Internet,RIGHT_case-8419,2011-11-22 01:06:40+00:00,General,2011-10-31 15:25:21.985000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource06,2011-06-30 01:06:40.020000+00:00,task-31153,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-07-20 13:06:33.579000+00:00 +Internet,RIGHT_case-8419,2011-11-22 01:06:40+00:00,General,2011-10-31 15:25:21.985000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource06,2011-06-30 01:06:40.020000+00:00,task-32828,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-20 13:07:10.411000+00:00 +Internet,RIGHT_case-8419,2011-11-22 01:06:40+00:00,General,2011-10-31 15:25:21.985000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource06,2011-06-30 01:06:40.020000+00:00,task-32824,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-20 13:33:46.681000+00:00 +Internet,RIGHT_case-8420,2011-10-14 01:06:40+00:00,General,2011-10-12 09:57:54.797000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource02,2011-06-28 01:06:40.020000+00:00,task-35540,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-05 12:11:25.952000+00:00 +Internet,RIGHT_case-8420,2011-10-14 01:06:40+00:00,General,2011-10-12 09:57:54.797000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource02,2011-06-28 01:06:40.020000+00:00,task-35543,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-05 12:12:13.690000+00:00 +Internet,RIGHT_case-8420,2011-10-14 01:06:40+00:00,General,2011-10-12 09:57:54.797000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource02,2011-06-28 01:06:40.020000+00:00,task-35544,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-05 12:30:58.130000+00:00 +Internet,RIGHT_case-8421,2011-08-26 01:06:40+00:00,General,2011-08-03 07:28:53.760000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-31156,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 12:47:25.863000+00:00 +Internet,RIGHT_case-8421,2011-08-26 01:06:40+00:00,General,2011-08-03 07:28:53.760000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32792,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 12:48:17.097000+00:00 +Internet,RIGHT_case-8421,2011-08-26 01:06:40+00:00,General,2011-08-03 07:28:53.760000+00:00,2011-08-26 01:06:40.020000+00:00,Group 8,Resource11,2011-07-01 01:06:40.020000+00:00,task-32793,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 12:49:04.654000+00:00 +Internet,RIGHT_case-8423,2011-10-22 01:06:40+00:00,General,2011-09-21 10:39:04.742000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource23,2011-06-30 01:06:40.020000+00:00,task-31748,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-07-12 12:21:01.765000+00:00 +Internet,RIGHT_case-8423,2011-10-22 01:06:40+00:00,General,2011-09-21 10:39:04.742000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource23,2011-06-30 01:06:40.020000+00:00,task-31751,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-07-12 12:21:45.939000+00:00 +Internet,RIGHT_case-8423,2011-10-22 01:06:40+00:00,General,2011-09-21 10:39:04.742000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource23,2011-06-30 01:06:40.020000+00:00,task-32232,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-07-15 15:49:54.225000+00:00 +Internet,RIGHT_case-8424,2011-08-27 01:06:40+00:00,General,2011-09-26 16:47:18.815000+00:00,2011-08-27 01:06:40.020000+00:00,Group 5,Resource12,2011-07-02 01:06:40.020000+00:00,task-31161,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-09-13 10:50:07.301000+00:00 +Internet,RIGHT_case-8424,2011-08-27 01:06:40+00:00,General,2011-09-26 16:47:18.815000+00:00,2011-08-27 01:06:40.020000+00:00,Group 5,Resource12,2011-07-02 01:06:40.020000+00:00,task-38824,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-13 10:53:49.601000+00:00 +Internet,RIGHT_case-8424,2011-08-27 01:06:40+00:00,General,2011-09-26 16:47:18.815000+00:00,2011-08-27 01:06:40.020000+00:00,Group 5,Resource12,2011-07-02 01:06:40.020000+00:00,task-38825,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-13 10:55:28.635000+00:00 +Internet,RIGHT_case-8425,2011-08-25 01:06:40+00:00,General,2011-09-05 10:03:36.724000+00:00,2011-08-25 01:06:40.020000+00:00,Group 5,Resource12,2011-06-30 01:06:40.020000+00:00,task-37287,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-08-29 09:07:19.010000+00:00 +Internet,RIGHT_case-8425,2011-08-25 01:06:40+00:00,General,2011-09-05 10:03:36.724000+00:00,2011-08-25 01:06:40.020000+00:00,Group 5,Resource12,2011-06-30 01:06:40.020000+00:00,task-37290,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-08-29 09:23:20.345000+00:00 +Internet,RIGHT_case-8425,2011-08-25 01:06:40+00:00,General,2011-09-05 10:03:36.724000+00:00,2011-08-25 01:06:40.020000+00:00,Group 5,Resource12,2011-06-30 01:06:40.020000+00:00,task-37291,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-08-29 09:24:56.983000+00:00 +Desk,RIGHT_case-8427,2011-08-12 01:06:40+00:00,General,2011-07-19 14:05:33.768000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-31774,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-12 14:09:00.205000+00:00 +Desk,RIGHT_case-8427,2011-08-12 01:06:40+00:00,General,2011-07-19 14:05:33.768000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-31777,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-12 14:10:04.894000+00:00 +Desk,RIGHT_case-8427,2011-08-12 01:06:40+00:00,General,2011-07-19 14:05:33.768000+00:00,2011-08-12 01:06:40.020000+00:00,Group 5,Resource06,2011-06-17 01:06:40.020000+00:00,task-31778,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-12 14:10:22.196000+00:00 +Internet,RIGHT_case-8441,2011-08-30 01:06:40+00:00,General,2011-07-13 00:00:00.020000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource01,2011-07-05 01:06:40.020000+00:00,task-31315,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-07-15 13:45:50.767000+00:00 +Internet,RIGHT_case-8442,2011-08-30 01:06:40+00:00,General,2011-08-03 07:35:35.509000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-31319,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 13:04:47.791000+00:00 +Internet,RIGHT_case-8442,2011-08-30 01:06:40+00:00,General,2011-08-03 07:35:35.509000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-32826,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 13:06:51.894000+00:00 +Internet,RIGHT_case-8442,2011-08-30 01:06:40+00:00,General,2011-08-03 07:35:35.509000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-32825,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 13:08:02.148000+00:00 +Internet,RIGHT_case-8444,2011-09-01 13:59:04.071000+00:00,General,2011-08-04 07:54:02.568000+00:00,2011-09-01 13:59:04.071000+00:00,Group 8,Resource11,2011-07-07 13:59:04.071000+00:00,task-32884,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 15:00:20.302000+00:00 +Internet,RIGHT_case-8444,2011-09-01 13:59:04.071000+00:00,General,2011-08-04 07:54:02.568000+00:00,2011-09-01 13:59:04.071000+00:00,Group 8,Resource11,2011-07-07 13:59:04.071000+00:00,task-32887,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 15:02:10.078000+00:00 +Internet,RIGHT_case-8444,2011-09-01 13:59:04.071000+00:00,General,2011-08-04 07:54:02.568000+00:00,2011-09-01 13:59:04.071000+00:00,Group 8,Resource11,2011-07-07 13:59:04.071000+00:00,task-32888,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 15:02:45.871000+00:00 +Internet,RIGHT_case-8445,2011-09-01 14:19:53.925000+00:00,General,2011-08-04 08:00:49.806000+00:00,2011-09-01 14:19:53.925000+00:00,Group 8,Resource11,2011-07-07 14:19:53.925000+00:00,task-31341,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 13:07:05.491000+00:00 +Internet,RIGHT_case-8445,2011-09-01 14:19:53.925000+00:00,General,2011-08-04 08:00:49.806000+00:00,2011-09-01 14:19:53.925000+00:00,Group 8,Resource11,2011-07-07 14:19:53.925000+00:00,task-33050,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 13:08:46.825000+00:00 +Internet,RIGHT_case-8445,2011-09-01 14:19:53.925000+00:00,General,2011-08-04 08:00:49.806000+00:00,2011-09-01 14:19:53.925000+00:00,Group 8,Resource11,2011-07-07 14:19:53.925000+00:00,task-33051,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 13:09:39.648000+00:00 +Internet,RIGHT_case-8446,2011-09-01 14:45:13.369000+00:00,General,2011-09-02 15:09:31.995000+00:00,2011-09-01 14:45:13.369000+00:00,Group 5,Resource12,2011-07-07 14:45:13.369000+00:00,task-37835,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-01 12:14:52.504000+00:00 +Internet,RIGHT_case-8446,2011-09-01 14:45:13.369000+00:00,General,2011-09-02 15:09:31.995000+00:00,2011-09-01 14:45:13.369000+00:00,Group 5,Resource12,2011-07-07 14:45:13.369000+00:00,task-37838,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-01 12:16:06.942000+00:00 +Internet,RIGHT_case-8446,2011-09-01 14:45:13.369000+00:00,General,2011-09-02 15:09:31.995000+00:00,2011-09-01 14:45:13.369000+00:00,Group 5,Resource12,2011-07-07 14:45:13.369000+00:00,task-37839,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-01 12:19:10.677000+00:00 +Internet,RIGHT_case-8448,2011-08-30 01:06:40+00:00,General,2011-08-29 12:32:13.621000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-07-05 01:06:40.020000+00:00,task-31349,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 16:11:42.469000+00:00 +Internet,RIGHT_case-8448,2011-08-30 01:06:40+00:00,General,2011-08-29 12:32:13.621000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-07-05 01:06:40.020000+00:00,task-34258,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 16:12:51.763000+00:00 +Internet,RIGHT_case-8448,2011-08-30 01:06:40+00:00,General,2011-08-29 12:32:13.621000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource13,2011-07-05 01:06:40.020000+00:00,task-34259,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-07-28 16:13:45.542000+00:00 +Internet,RIGHT_case-8449,2011-09-01 15:05:36.177000+00:00,General,2011-08-04 08:06:12.876000+00:00,2011-09-01 15:05:36.177000+00:00,Group 8,Resource11,2011-07-07 15:05:36.177000+00:00,task-31355,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 11:04:30.426000+00:00 +Internet,RIGHT_case-8449,2011-09-01 15:05:36.177000+00:00,General,2011-08-04 08:06:12.876000+00:00,2011-09-01 15:05:36.177000+00:00,Group 8,Resource11,2011-07-07 15:05:36.177000+00:00,task-32981,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 11:07:30.070000+00:00 +Internet,RIGHT_case-8449,2011-09-01 15:05:36.177000+00:00,General,2011-08-04 08:06:12.876000+00:00,2011-09-01 15:05:36.177000+00:00,Group 8,Resource11,2011-07-07 15:05:36.177000+00:00,task-32989,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 12:38:15.452000+00:00 +Internet,RIGHT_case-8456,2011-10-06 01:06:40+00:00,General,2011-09-30 09:29:26.396000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33687,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:04:00.870000+00:00 +Internet,RIGHT_case-8456,2011-10-06 01:06:40+00:00,General,2011-09-30 09:29:26.396000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33690,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:04:36.274000+00:00 +Internet,RIGHT_case-8456,2011-10-06 01:06:40+00:00,General,2011-09-30 09:29:26.396000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33691,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:05:04.985000+00:00 +Internet,RIGHT_case-8457,2011-10-06 01:06:40+00:00,General,2011-09-21 09:32:53.661000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33699,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:09:55.086000+00:00 +Internet,RIGHT_case-8457,2011-10-06 01:06:40+00:00,General,2011-09-21 09:32:53.661000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33702,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:10:28.680000+00:00 +Internet,RIGHT_case-8457,2011-10-06 01:06:40+00:00,General,2011-09-21 09:32:53.661000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33703,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:11:00.192000+00:00 +Internet,RIGHT_case-8458,2011-10-06 01:06:40+00:00,General,2011-09-20 11:36:08.106000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33707,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:14:03.807000+00:00 +Internet,RIGHT_case-8458,2011-10-06 01:06:40+00:00,General,2011-09-20 11:36:08.106000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33710,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:14:34.764000+00:00 +Internet,RIGHT_case-8458,2011-10-06 01:06:40+00:00,General,2011-09-20 11:36:08.106000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33715,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:15:08.678000+00:00 +Internet,RIGHT_case-8459,2011-10-06 01:06:40+00:00,General,2011-09-30 16:45:08.267000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33727,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:25:15.529000+00:00 +Internet,RIGHT_case-8459,2011-10-06 01:06:40+00:00,General,2011-09-30 16:45:08.267000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33730,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:25:47.583000+00:00 +Internet,RIGHT_case-8459,2011-10-06 01:06:40+00:00,General,2011-09-30 16:45:08.267000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33731,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:26:31.395000+00:00 +Internet,RIGHT_case-8460,2011-10-06 01:06:40+00:00,General,2011-09-30 16:25:55.393000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33734,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:30:59.974000+00:00 +Internet,RIGHT_case-8460,2011-10-06 01:06:40+00:00,General,2011-09-30 16:25:55.393000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33737,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:31:51.392000+00:00 +Internet,RIGHT_case-8460,2011-10-06 01:06:40+00:00,General,2011-09-30 16:25:55.393000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33738,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:32:21.238000+00:00 +Internet,RIGHT_case-8461,2011-09-27 01:06:40+00:00,General,2011-09-05 12:50:10.453000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-34353,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-29 10:10:09.063000+00:00 +Internet,RIGHT_case-8461,2011-09-27 01:06:40+00:00,General,2011-09-05 12:50:10.453000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-34356,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-29 10:10:46.086000+00:00 +Internet,RIGHT_case-8461,2011-09-27 01:06:40+00:00,General,2011-09-05 12:50:10.453000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-34361,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-29 10:44:04.925000+00:00 +Internet,RIGHT_case-8462,2011-10-06 01:06:40+00:00,General,2011-09-30 16:41:10.569000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33742,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:35:04.614000+00:00 +Internet,RIGHT_case-8462,2011-10-06 01:06:40+00:00,General,2011-09-30 16:41:10.569000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33745,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:35:44.918000+00:00 +Internet,RIGHT_case-8462,2011-10-06 01:06:40+00:00,General,2011-09-30 16:41:10.569000+00:00,2011-10-06 01:06:40.020000+00:00,Group 5,Resource04,2011-06-21 01:06:40.020000+00:00,task-33746,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:36:19.046000+00:00 +Internet,RIGHT_case-8465,2011-09-01 01:06:40+00:00,General,2011-08-03 07:44:33.808000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-31475,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 10:46:40.846000+00:00 +Internet,RIGHT_case-8465,2011-09-01 01:06:40+00:00,General,2011-08-03 07:44:33.808000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-32963,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 10:47:29.816000+00:00 +Internet,RIGHT_case-8465,2011-09-01 01:06:40+00:00,General,2011-08-03 07:44:33.808000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-32964,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 10:50:14.484000+00:00 +Internet,RIGHT_case-8467,2011-09-01 01:06:40+00:00,General,2011-09-26 16:08:33.468000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-31487,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-07-26 20:00:45.469000+00:00 +Internet,RIGHT_case-8467,2011-09-01 01:06:40+00:00,General,2011-09-26 16:08:33.468000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-33594,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-07-26 20:01:37.713000+00:00 +Internet,RIGHT_case-8467,2011-09-01 01:06:40+00:00,General,2011-09-26 16:08:33.468000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-33595,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-07-26 20:02:28.364000+00:00 +Internet,RIGHT_case-8469,2011-09-02 01:06:40+00:00,General,2011-08-04 08:13:39.644000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31494,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 13:24:41.990000+00:00 +Internet,RIGHT_case-8469,2011-09-02 01:06:40+00:00,General,2011-08-04 08:13:39.644000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33065,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 13:25:43.159000+00:00 +Internet,RIGHT_case-8469,2011-09-02 01:06:40+00:00,General,2011-08-04 08:13:39.644000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33066,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 13:26:19.755000+00:00 +Internet,RIGHT_case-8500,2011-09-02 01:06:40+00:00,General,2011-08-04 08:42:11.097000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31568,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 13:38:10.924000+00:00 +Internet,RIGHT_case-8500,2011-09-02 01:06:40+00:00,General,2011-08-04 08:42:11.097000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33082,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 13:38:50.370000+00:00 +Internet,RIGHT_case-8500,2011-09-02 01:06:40+00:00,General,2011-08-04 08:42:11.097000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33083,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 13:50:42.534000+00:00 +Internet,RIGHT_case-8501,2011-09-02 01:06:40+00:00,General,2011-08-04 08:49:44.997000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31573,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 14:07:02.283000+00:00 +Internet,RIGHT_case-8501,2011-09-02 01:06:40+00:00,General,2011-08-04 08:49:44.997000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33096,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 14:07:46.858000+00:00 +Internet,RIGHT_case-8501,2011-09-02 01:06:40+00:00,General,2011-08-04 08:49:44.997000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33097,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 14:10:54.479000+00:00 +Internet,RIGHT_case-8502,2011-09-02 01:06:40+00:00,General,2011-08-04 08:54:16.463000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-31576,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 14:47:42.233000+00:00 +Internet,RIGHT_case-8502,2011-09-02 01:06:40+00:00,General,2011-08-04 08:54:16.463000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33116,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 14:49:02.269000+00:00 +Internet,RIGHT_case-8502,2011-09-02 01:06:40+00:00,General,2011-08-04 08:54:16.463000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource11,2011-07-08 01:06:40.020000+00:00,task-33117,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 14:51:46.365000+00:00 +Internet,RIGHT_case-8503,2011-09-01 01:06:40+00:00,General,2011-08-10 16:05:07.760000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource02,2011-07-07 01:06:40.020000+00:00,task-35621,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-08 11:15:26.784000+00:00 +Internet,RIGHT_case-8503,2011-09-01 01:06:40+00:00,General,2011-08-10 16:05:07.760000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource02,2011-07-07 01:06:40.020000+00:00,task-35624,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-08 11:16:40.016000+00:00 +Internet,RIGHT_case-8503,2011-09-01 01:06:40+00:00,General,2011-08-10 16:05:07.760000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource02,2011-07-07 01:06:40.020000+00:00,task-35625,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-08 11:17:17.463000+00:00 +Internet,RIGHT_case-8504,2011-09-01 01:06:40+00:00,General,2011-10-04 10:35:33.466000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-40418,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-26 12:39:15.033000+00:00 +Internet,RIGHT_case-8504,2011-09-01 01:06:40+00:00,General,2011-10-04 10:35:33.466000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-40421,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-26 12:40:08.451000+00:00 +Internet,RIGHT_case-8504,2011-09-01 01:06:40+00:00,General,2011-10-04 10:35:33.466000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-40422,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-26 12:41:40.851000+00:00 +Internet,RIGHT_case-8505,2011-09-01 01:06:40+00:00,General,2011-10-04 10:54:58.673000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-40464,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-26 14:20:01.321000+00:00 +Internet,RIGHT_case-8505,2011-09-01 01:06:40+00:00,General,2011-10-04 10:54:58.673000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-40467,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-26 14:21:01.246000+00:00 +Internet,RIGHT_case-8505,2011-09-01 01:06:40+00:00,General,2011-10-04 10:54:58.673000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource12,2011-07-07 01:06:40.020000+00:00,task-40468,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-26 14:24:52.081000+00:00 +Internet,RIGHT_case-8507,2011-09-05 13:50:18.729000+00:00,General,2011-08-29 13:41:34.539000+00:00,2011-09-05 13:50:18.729000+00:00,Group 5,Resource12,2011-07-11 13:53:24.202000+00:00,task-35372,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-08-04 12:06:26.685000+00:00 +Internet,RIGHT_case-8507,2011-09-05 13:50:18.729000+00:00,General,2011-08-29 13:41:34.539000+00:00,2011-09-05 13:50:18.729000+00:00,Group 5,Resource12,2011-07-11 13:53:24.202000+00:00,task-35375,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-08-04 12:07:35.588000+00:00 +Internet,RIGHT_case-8507,2011-09-05 13:50:18.729000+00:00,General,2011-08-29 13:41:34.539000+00:00,2011-09-05 13:50:18.729000+00:00,Group 5,Resource12,2011-07-11 13:53:24.202000+00:00,task-35380,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-08-04 12:17:15.011000+00:00 +Internet,RIGHT_case-8511,2011-10-14 01:06:40+00:00,General,2011-10-11 13:55:52.280000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource22,2011-07-08 01:06:40.020000+00:00,task-32722,T02 Check confirmation of receipt,complete,EMPTY,Resource22,2011-07-20 11:38:05.999000+00:00 +Internet,RIGHT_case-8511,2011-10-14 01:06:40+00:00,General,2011-10-11 13:55:52.280000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource22,2011-07-08 01:06:40.020000+00:00,task-32729,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-07-20 11:39:18.104000+00:00 +Internet,RIGHT_case-8511,2011-10-14 01:06:40+00:00,General,2011-10-11 13:55:52.280000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource22,2011-07-08 01:06:40.020000+00:00,task-32736,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-07-20 11:42:01.398000+00:00 +Internet,RIGHT_case-8522,2011-09-02 01:06:40+00:00,General,2011-10-14 11:57:22.270000+00:00,2011-09-02 01:06:40.020000+00:00,Group 5,Resource09,2011-07-08 01:06:40.020000+00:00,task-33657,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-27 09:53:50.931000+00:00 +Internet,RIGHT_case-8522,2011-09-02 01:06:40+00:00,General,2011-10-14 11:57:22.270000+00:00,2011-09-02 01:06:40.020000+00:00,Group 5,Resource09,2011-07-08 01:06:40.020000+00:00,task-33662,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-27 09:55:57.805000+00:00 +Internet,RIGHT_case-8522,2011-09-02 01:06:40+00:00,General,2011-10-14 11:57:22.270000+00:00,2011-09-02 01:06:40.020000+00:00,Group 5,Resource09,2011-07-08 01:06:40.020000+00:00,task-33661,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-27 09:56:43.519000+00:00 +Internet,RIGHT_case-8550,2011-09-06 01:06:40+00:00,General,2011-09-30 09:05:15.234000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource22,2011-07-12 01:06:40.020000+00:00,task-31898,T02 Check confirmation of receipt,complete,EMPTY,Resource22,2011-09-23 11:27:41.537000+00:00 +Internet,RIGHT_case-8550,2011-09-06 01:06:40+00:00,General,2011-09-30 09:05:15.234000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource22,2011-07-12 01:06:40.020000+00:00,task-40062,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-09-23 11:30:00.495000+00:00 +Internet,RIGHT_case-8550,2011-09-06 01:06:40+00:00,General,2011-09-30 09:05:15.234000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource22,2011-07-12 01:06:40.020000+00:00,task-40063,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-09-23 11:31:25.937000+00:00 +Internet,RIGHT_case-8551,2011-09-06 01:06:40+00:00,General,2011-08-30 11:57:35.095000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-31910,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-08-09 11:29:27.408000+00:00 +Internet,RIGHT_case-8551,2011-09-06 01:06:40+00:00,General,2011-08-30 11:57:35.095000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-35907,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-09 11:30:08.340000+00:00 +Internet,RIGHT_case-8551,2011-09-06 01:06:40+00:00,General,2011-08-30 11:57:35.095000+00:00,2011-09-06 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-35908,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-09 11:33:49.690000+00:00 +e-mail,RIGHT_case-8560,2011-08-31 01:06:40+00:00,General,2011-10-12 16:40:30.274000+00:00,2011-08-31 01:06:40.020000+00:00,Group 11,Resource25,2011-07-06 01:06:40.020000+00:00,task-43002,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-10-12 11:18:25.528000+00:00 +e-mail,RIGHT_case-8560,2011-08-31 01:06:40+00:00,General,2011-10-12 16:40:30.274000+00:00,2011-08-31 01:06:40.020000+00:00,Group 11,Resource25,2011-07-06 01:06:40.020000+00:00,task-43019,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-10-12 11:20:24.196000+00:00 +e-mail,RIGHT_case-8560,2011-08-31 01:06:40+00:00,General,2011-10-12 16:40:30.274000+00:00,2011-08-31 01:06:40.020000+00:00,Group 11,Resource25,2011-07-06 01:06:40.020000+00:00,task-43015,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-12 11:23:06.342000+00:00 +Internet,RIGHT_case-8639,2011-09-07 01:06:40+00:00,General,2011-08-04 08:59:29.552000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-32297,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-21 15:19:42.665000+00:00 +Internet,RIGHT_case-8639,2011-09-07 01:06:40+00:00,General,2011-08-04 08:59:29.552000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-33139,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 15:21:06.664000+00:00 +Internet,RIGHT_case-8639,2011-09-07 01:06:40+00:00,General,2011-08-04 08:59:29.552000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-33140,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 15:21:47.196000+00:00 +Internet,RIGHT_case-8642,2011-09-07 01:06:40+00:00,General,2011-09-30 14:31:28.812000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-32311,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-22 14:06:51.143000+00:00 +Internet,RIGHT_case-8642,2011-09-07 01:06:40+00:00,General,2011-09-30 14:31:28.812000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-33234,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-22 14:09:16.354000+00:00 +Internet,RIGHT_case-8642,2011-09-07 01:06:40+00:00,General,2011-09-30 14:31:28.812000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-33236,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-22 14:19:13.582000+00:00 +Internet,RIGHT_case-8642,2011-09-07 01:06:40+00:00,General,2011-09-30 14:31:28.812000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-34019,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 13:34:08.093000+00:00 +Internet,RIGHT_case-8645,2011-09-07 01:06:40+00:00,General,2011-08-09 08:29:57.963000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-32315,T02 Check confirmation of receipt,complete,EMPTY,Resource16,2011-07-28 09:00:53.461000+00:00 +Internet,RIGHT_case-8645,2011-09-07 01:06:40+00:00,General,2011-08-09 08:29:57.963000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-33889,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-28 09:02:02.882000+00:00 +Internet,RIGHT_case-8645,2011-09-07 01:06:40+00:00,General,2011-08-09 08:29:57.963000+00:00,2011-09-07 01:06:40.020000+00:00,Group 8,Resource11,2011-07-13 01:06:40.020000+00:00,task-33893,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-28 09:03:19.430000+00:00 +Internet,RIGHT_case-8646,2011-10-19 01:06:40+00:00,General,2011-10-04 15:20:59.123000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource06,2011-07-13 01:06:40.020000+00:00,task-32319,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-08-31 10:12:16.817000+00:00 +Internet,RIGHT_case-8646,2011-10-19 01:06:40+00:00,General,2011-10-04 15:20:59.123000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource06,2011-07-13 01:06:40.020000+00:00,task-37596,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-31 10:12:49.244000+00:00 +Internet,RIGHT_case-8646,2011-10-19 01:06:40+00:00,General,2011-10-04 15:20:59.123000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource06,2011-07-13 01:06:40.020000+00:00,task-37597,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-31 10:14:25.146000+00:00 +Internet,RIGHT_case-8652,2011-09-09 01:06:40+00:00,General,2011-08-09 08:39:45.323000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-32339,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 08:41:00.151000+00:00 +Internet,RIGHT_case-8652,2011-09-09 01:06:40+00:00,General,2011-08-09 08:39:45.323000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-33865,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 08:41:34.948000+00:00 +Internet,RIGHT_case-8652,2011-09-09 01:06:40+00:00,General,2011-08-09 08:39:45.323000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-33866,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 08:42:23.055000+00:00 +Internet,RIGHT_case-8653,2011-10-21 01:06:40+00:00,General,2011-10-24 14:09:10.905000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-07-15 01:06:40.020000+00:00,task-32346,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-08-31 12:46:08.372000+00:00 +Internet,RIGHT_case-8653,2011-10-21 01:06:40+00:00,General,2011-10-24 14:09:10.905000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-07-15 01:06:40.020000+00:00,task-37662,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-31 12:46:40.190000+00:00 +Internet,RIGHT_case-8653,2011-10-21 01:06:40+00:00,General,2011-10-24 14:09:10.905000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-07-15 01:06:40.020000+00:00,task-37663,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-31 12:47:15.537000+00:00 +Internet,RIGHT_case-8654,2011-09-09 01:06:40+00:00,General,2011-08-09 08:53:03.538000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-32353,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 14:33:02.368000+00:00 +Internet,RIGHT_case-8654,2011-09-09 01:06:40+00:00,General,2011-08-09 08:53:03.538000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-34133,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 14:35:00.444000+00:00 +Internet,RIGHT_case-8654,2011-09-09 01:06:40+00:00,General,2011-08-09 08:53:03.538000+00:00,2011-09-09 01:06:40.020000+00:00,Group 8,Resource11,2011-07-15 01:06:40.020000+00:00,task-34134,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 14:37:46.041000+00:00 +Internet,RIGHT_case-8656,2011-09-11 01:06:40+00:00,General,2011-09-09 00:00:00.020000+00:00,2011-09-11 01:06:40.020000+00:00,Group 5,Resource12,2011-07-17 01:06:40.020000+00:00,task-32361,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-09-23 15:21:07.212000+00:00 +Internet,RIGHT_case-8663,2011-10-21 01:06:40+00:00,General,2011-10-04 15:53:09.142000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource13,2011-07-15 01:06:40.020000+00:00,task-32402,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-07-22 12:21:59.107000+00:00 +Internet,RIGHT_case-8663,2011-10-21 01:06:40+00:00,General,2011-10-04 15:53:09.142000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource13,2011-07-15 01:06:40.020000+00:00,task-33213,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-07-22 12:22:55.811000+00:00 +Internet,RIGHT_case-8663,2011-10-21 01:06:40+00:00,General,2011-10-04 15:53:09.142000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource13,2011-07-15 01:06:40.020000+00:00,task-33214,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-07-22 12:23:49.745000+00:00 +Internet,RIGHT_case-8710,2011-08-09 01:06:40+00:00,General,2011-09-13 12:17:12.615000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource14,2011-06-14 01:06:40.020000+00:00,task-34201,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-28 15:23:08.179000+00:00 +Internet,RIGHT_case-8710,2011-08-09 01:06:40+00:00,General,2011-09-13 12:17:12.615000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource14,2011-06-14 01:06:40.020000+00:00,task-34199,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-28 15:23:42.998000+00:00 +Internet,RIGHT_case-8710,2011-08-09 01:06:40+00:00,General,2011-09-13 12:17:12.615000+00:00,2011-08-09 01:06:40.020000+00:00,Group 5,Resource14,2011-06-14 01:06:40.020000+00:00,task-34210,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-28 15:25:38.412000+00:00 +Internet,RIGHT_case-8728,2011-07-28 01:06:40+00:00,General,2011-07-29 10:25:34.265000+00:00,2011-07-28 01:06:40.020000+00:00,Group 5,Resource06,2011-05-11 01:06:40.020000+00:00,task-34021,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-28 11:59:17.324000+00:00 +Internet,RIGHT_case-8728,2011-07-28 01:06:40+00:00,General,2011-07-29 10:25:34.265000+00:00,2011-07-28 01:06:40.020000+00:00,Group 5,Resource06,2011-05-11 01:06:40.020000+00:00,task-34028,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-28 12:01:25.616000+00:00 +Internet,RIGHT_case-8728,2011-07-28 01:06:40+00:00,General,2011-07-29 10:25:34.265000+00:00,2011-07-28 01:06:40.020000+00:00,Group 5,Resource06,2011-05-11 01:06:40.020000+00:00,task-34029,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-28 12:03:05.144000+00:00 +Internet,RIGHT_case-8733,2011-08-10 01:06:40+00:00,General,2011-09-02 11:43:53.132000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource06,2011-06-15 01:06:40.020000+00:00,task-37126,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-25 12:50:35.211000+00:00 +Internet,RIGHT_case-8733,2011-08-10 01:06:40+00:00,General,2011-09-02 11:43:53.132000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource06,2011-06-15 01:06:40.020000+00:00,task-37130,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-25 12:51:08.015000+00:00 +Internet,RIGHT_case-8733,2011-08-10 01:06:40+00:00,General,2011-09-02 11:43:53.132000+00:00,2011-08-10 01:06:40.020000+00:00,Group 5,Resource06,2011-06-15 01:06:40.020000+00:00,task-37128,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-25 12:51:30.158000+00:00 +Internet,RIGHT_case-8734,2011-10-05 01:06:40+00:00,General,2011-09-08 10:31:27.899000+00:00,2011-10-05 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-33522,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-26 14:51:32.693000+00:00 +Internet,RIGHT_case-8734,2011-10-05 01:06:40+00:00,General,2011-09-08 10:31:27.899000+00:00,2011-10-05 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-33525,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-26 14:52:09.681000+00:00 +Internet,RIGHT_case-8734,2011-10-05 01:06:40+00:00,General,2011-09-08 10:31:27.899000+00:00,2011-10-05 01:06:40.020000+00:00,Group 5,Resource04,2011-06-15 01:06:40.020000+00:00,task-33526,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-26 14:52:45.806000+00:00 +Internet,RIGHT_case-8742,2011-10-24 01:06:40+00:00,General,2011-10-03 15:53:03.902000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource02,2011-07-18 01:06:40.020000+00:00,task-33174,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-08-10 11:07:05.646000+00:00 +Internet,RIGHT_case-8742,2011-10-24 01:06:40+00:00,General,2011-10-03 15:53:03.902000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource02,2011-07-18 01:06:40.020000+00:00,task-36038,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-10 11:08:02.606000+00:00 +Internet,RIGHT_case-8742,2011-10-24 01:06:40+00:00,General,2011-10-03 15:53:03.902000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource02,2011-07-18 01:06:40.020000+00:00,task-36039,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-10 11:11:02.328000+00:00 +Internet,RIGHT_case-8743,2011-09-12 00:00:00+00:00,General,,2011-09-12 00:00:00.020000+00:00,Group 5,Resource14,2011-07-18 01:06:40.020000+00:00,task-33177,T02 Check confirmation of receipt,complete,EMPTY,Resource14,2011-08-17 13:48:11.103000+00:00 +Internet,RIGHT_case-8743,2011-09-12 00:00:00+00:00,General,,2011-09-12 00:00:00.020000+00:00,Group 5,Resource14,2011-07-18 01:06:40.020000+00:00,task-38002,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-09-05 10:56:06.769000+00:00 +Internet,RIGHT_case-8743,2011-09-12 00:00:00+00:00,General,,2011-09-12 00:00:00.020000+00:00,Group 5,Resource14,2011-07-18 01:06:40.020000+00:00,task-38003,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-09-05 10:56:48.811000+00:00 +Internet,RIGHT_case-8744,2011-09-12 01:06:40+00:00,General,2011-08-17 13:39:47.957000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource13,2011-07-18 01:06:40.020000+00:00,task-33183,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-08-01 20:50:37.967000+00:00 +Internet,RIGHT_case-8744,2011-09-12 01:06:40+00:00,General,2011-08-17 13:39:47.957000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource13,2011-07-18 01:06:40.020000+00:00,task-34791,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-08-01 20:51:59.169000+00:00 +Internet,RIGHT_case-8744,2011-09-12 01:06:40+00:00,General,2011-08-17 13:39:47.957000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource13,2011-07-18 01:06:40.020000+00:00,task-34792,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-08-01 20:52:51.809000+00:00 +Internet,RIGHT_case-8745,2011-08-16 01:06:40+00:00,General,2011-08-25 12:17:08.219000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource06,2011-06-21 01:06:40.020000+00:00,task-36910,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-22 12:23:58.319000+00:00 +Internet,RIGHT_case-8745,2011-08-16 01:06:40+00:00,General,2011-08-25 12:17:08.219000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource06,2011-06-21 01:06:40.020000+00:00,task-36914,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-22 12:24:44.996000+00:00 +Internet,RIGHT_case-8745,2011-08-16 01:06:40+00:00,General,2011-08-25 12:17:08.219000+00:00,2011-08-16 01:06:40.020000+00:00,Group 5,Resource06,2011-06-21 01:06:40.020000+00:00,task-36912,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-22 12:25:01.725000+00:00 +Internet,RIGHT_case-8746,2011-09-13 01:06:40+00:00,General,2011-08-23 12:25:02.669000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource06,2011-07-19 01:06:40.020000+00:00,task-33198,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-08-03 13:20:28.954000+00:00 +Internet,RIGHT_case-8746,2011-09-13 01:06:40+00:00,General,2011-08-23 12:25:02.669000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource06,2011-07-19 01:06:40.020000+00:00,task-35066,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-03 13:21:35.152000+00:00 +Internet,RIGHT_case-8746,2011-09-13 01:06:40+00:00,General,2011-08-23 12:25:02.669000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource06,2011-07-19 01:06:40.020000+00:00,task-35067,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-22 12:40:05.437000+00:00 +Internet,RIGHT_case-8749,2011-10-10 01:06:40+00:00,General,2011-08-31 14:45:05.672000+00:00,2011-10-10 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-34103,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 14:15:30.018000+00:00 +Internet,RIGHT_case-8749,2011-10-10 01:06:40+00:00,General,2011-08-31 14:45:05.672000+00:00,2011-10-10 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-34106,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 14:16:30.610000+00:00 +Internet,RIGHT_case-8749,2011-10-10 01:06:40+00:00,General,2011-08-31 14:45:05.672000+00:00,2011-10-10 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-34107,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 14:17:29.758000+00:00 +Internet,RIGHT_case-8750,2011-08-18 01:06:40+00:00,General,2011-09-29 09:43:32.752000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-35329,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 10:47:05.590000+00:00 +Internet,RIGHT_case-8750,2011-08-18 01:06:40+00:00,General,2011-09-29 09:43:32.752000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-35332,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 10:48:09.930000+00:00 +Internet,RIGHT_case-8750,2011-08-18 01:06:40+00:00,General,2011-09-29 09:43:32.752000+00:00,2011-08-18 01:06:40.020000+00:00,Group 8,Resource01,2011-06-22 01:06:40.020000+00:00,task-35333,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 10:50:23.515000+00:00 +Internet,RIGHT_case-8754,2011-09-16 14:46:57.572000+00:00,General,2011-10-13 14:29:53.414000+00:00,2011-09-16 14:46:57.572000+00:00,Group 5,Resource22,2011-07-22 14:46:57.572000+00:00,task-42705,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-10-11 08:56:39.384000+00:00 +Internet,RIGHT_case-8754,2011-09-16 14:46:57.572000+00:00,General,2011-10-13 14:29:53.414000+00:00,2011-09-16 14:46:57.572000+00:00,Group 5,Resource22,2011-07-22 14:46:57.572000+00:00,task-42708,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-10-11 08:57:52.094000+00:00 +Internet,RIGHT_case-8754,2011-09-16 14:46:57.572000+00:00,General,2011-10-13 14:29:53.414000+00:00,2011-09-16 14:46:57.572000+00:00,Group 5,Resource22,2011-07-22 14:46:57.572000+00:00,task-42711,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-10-11 09:01:50.310000+00:00 +Internet,RIGHT_case-8755,2011-08-24 01:06:40+00:00,General,2011-09-14 09:58:37.835000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-06-29 01:06:40.020000+00:00,task-34293,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-29 09:39:53.035000+00:00 +Internet,RIGHT_case-8755,2011-08-24 01:06:40+00:00,General,2011-09-14 09:58:37.835000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-06-29 01:06:40.020000+00:00,task-34324,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-29 09:40:36.549000+00:00 +Internet,RIGHT_case-8755,2011-08-24 01:06:40+00:00,General,2011-09-14 09:58:37.835000+00:00,2011-08-24 01:06:40.020000+00:00,Group 5,Resource06,2011-06-29 01:06:40.020000+00:00,task-34326,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-29 09:42:33.038000+00:00 +Internet,RIGHT_case-8770,2012-02-28 00:00:00+00:00,General,,2012-02-28 00:00:00.010000+00:00,Group 5,Resource04,2011-07-20 01:06:40.020000+00:00,task-33760,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 11:18:15.869000+00:00 +Internet,RIGHT_case-8770,2012-02-28 00:00:00+00:00,General,,2012-02-28 00:00:00.010000+00:00,Group 5,Resource04,2011-07-20 01:06:40.020000+00:00,task-33763,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 11:18:59.417000+00:00 +Internet,RIGHT_case-8770,2012-02-28 00:00:00+00:00,General,,2012-02-28 00:00:00.010000+00:00,Group 5,Resource04,2011-07-20 01:06:40.020000+00:00,task-33764,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 11:19:37.618000+00:00 +Internet,RIGHT_case-8771,2011-10-26 01:06:40+00:00,General,2011-10-05 10:31:29.082000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-34932,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-02 14:14:05.540000+00:00 +Internet,RIGHT_case-8771,2011-10-26 01:06:40+00:00,General,2011-10-05 10:31:29.082000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-34936,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-02 14:14:48.326000+00:00 +Internet,RIGHT_case-8771,2011-10-26 01:06:40+00:00,General,2011-10-05 10:31:29.082000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-34937,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-02 14:15:23.192000+00:00 +Internet,RIGHT_case-8775,2011-09-16 01:06:40+00:00,General,2011-08-09 09:26:18.340000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34234,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 15:37:25.361000+00:00 +Internet,RIGHT_case-8775,2011-09-16 01:06:40+00:00,General,2011-08-09 09:26:18.340000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34237,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 15:39:54.922000+00:00 +Internet,RIGHT_case-8775,2011-09-16 01:06:40+00:00,General,2011-08-09 09:26:18.340000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34238,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 15:40:35.478000+00:00 +Internet,RIGHT_case-8776,2011-10-26 01:06:40+00:00,General,2011-10-05 10:27:54.449000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-33832,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 15:11:37.483000+00:00 +Internet,RIGHT_case-8776,2011-10-26 01:06:40+00:00,General,2011-10-05 10:27:54.449000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-33835,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 15:17:28.204000+00:00 +Internet,RIGHT_case-8776,2011-10-26 01:06:40+00:00,General,2011-10-05 10:27:54.449000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-34898,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-02 11:55:18.533000+00:00 +Internet,RIGHT_case-8777,2011-09-16 01:06:40+00:00,General,2011-08-09 11:34:14.669000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34452,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-29 13:56:31.243000+00:00 +Internet,RIGHT_case-8777,2011-09-16 01:06:40+00:00,General,2011-08-09 11:34:14.669000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34456,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-29 13:57:42.363000+00:00 +Internet,RIGHT_case-8777,2011-09-16 01:06:40+00:00,General,2011-08-09 11:34:14.669000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34455,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-29 13:58:00.612000+00:00 +Internet,RIGHT_case-8778,2011-10-26 01:06:40+00:00,General,2011-10-05 12:40:23.654000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-33830,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 15:18:06.322000+00:00 +Internet,RIGHT_case-8778,2011-10-26 01:06:40+00:00,General,2011-10-05 12:40:23.654000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-33837,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 15:18:52.960000+00:00 +Internet,RIGHT_case-8778,2011-10-26 01:06:40+00:00,General,2011-10-05 12:40:23.654000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-22 01:06:40.020000+00:00,task-34913,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-02 12:42:03.331000+00:00 +Internet,RIGHT_case-8779,2011-09-16 01:06:40+00:00,General,2011-08-09 09:05:57.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34470,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-29 14:12:31.341000+00:00 +Internet,RIGHT_case-8779,2011-09-16 01:06:40+00:00,General,2011-08-09 09:05:57.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34474,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-29 14:14:54.928000+00:00 +Internet,RIGHT_case-8779,2011-09-16 01:06:40+00:00,General,2011-08-09 09:05:57.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-34475,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-29 14:15:45.650000+00:00 +Internet,RIGHT_case-8780,2011-09-16 01:06:40+00:00,General,2011-11-14 16:02:47.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource12,2011-07-22 01:06:40.020000+00:00,task-38677,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-12 12:25:30.077000+00:00 +Internet,RIGHT_case-8780,2011-09-16 01:06:40+00:00,General,2011-11-14 16:02:47.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource12,2011-07-22 01:06:40.020000+00:00,task-38680,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-12 12:26:31.382000+00:00 +Internet,RIGHT_case-8780,2011-09-16 01:06:40+00:00,General,2011-11-14 16:02:47.247000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource12,2011-07-22 01:06:40.020000+00:00,task-38681,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-12 12:27:44.271000+00:00 +Internet,RIGHT_case-8782,2011-09-16 01:06:40+00:00,General,2011-09-26 12:37:11.822000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource05,2011-07-22 01:06:40.020000+00:00,task-35809,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-08-09 08:32:39.262000+00:00 +Internet,RIGHT_case-8782,2011-09-16 01:06:40+00:00,General,2011-09-26 12:37:11.822000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource05,2011-07-22 01:06:40.020000+00:00,task-35812,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-09 08:33:24.853000+00:00 +Internet,RIGHT_case-8782,2011-09-16 01:06:40+00:00,General,2011-09-26 12:37:11.822000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource05,2011-07-22 01:06:40.020000+00:00,task-35813,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-09 08:34:29.696000+00:00 +Internet,RIGHT_case-8784,2011-09-15 01:06:40+00:00,General,2011-08-30 11:49:28.929000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-33970,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 10:53:26.191000+00:00 +Internet,RIGHT_case-8784,2011-09-15 01:06:40+00:00,General,2011-08-30 11:49:28.929000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-33973,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 11:10:43.241000+00:00 +Internet,RIGHT_case-8784,2011-09-15 01:06:40+00:00,General,2011-08-30 11:49:28.929000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-33981,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 11:11:32.143000+00:00 +Internet,RIGHT_case-8785,2011-09-15 01:06:40+00:00,General,2011-08-09 10:29:59.542000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-34154,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 14:56:03.975000+00:00 +Internet,RIGHT_case-8785,2011-09-15 01:06:40+00:00,General,2011-08-09 10:29:59.542000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-34157,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 14:56:45.976000+00:00 +Internet,RIGHT_case-8785,2011-09-15 01:06:40+00:00,General,2011-08-09 10:29:59.542000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-34158,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 14:59:05.613000+00:00 +Internet,RIGHT_case-8786,2011-09-15 01:06:40+00:00,General,2011-08-09 11:58:54.199000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-34203,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 15:24:13.105000+00:00 +Internet,RIGHT_case-8786,2011-09-15 01:06:40+00:00,General,2011-08-09 11:58:54.199000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-34207,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 15:24:53.477000+00:00 +Internet,RIGHT_case-8786,2011-09-15 01:06:40+00:00,General,2011-08-09 11:58:54.199000+00:00,2011-09-15 01:06:40.020000+00:00,Group 8,Resource11,2011-07-21 01:06:40.020000+00:00,task-34211,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 15:25:51.662000+00:00 +Internet,RIGHT_case-8796,2011-10-31 01:06:40+00:00,General,2011-10-27 11:41:12.036000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-07-25 01:06:40.020000+00:00,task-34437,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-29 12:26:37.903000+00:00 +Internet,RIGHT_case-8796,2011-10-31 01:06:40+00:00,General,2011-10-27 11:41:12.036000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-07-25 01:06:40.020000+00:00,task-34441,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-29 12:27:17.511000+00:00 +Internet,RIGHT_case-8796,2011-10-31 01:06:40+00:00,General,2011-10-27 11:41:12.036000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-07-25 01:06:40.020000+00:00,task-34439,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-29 12:27:37.459000+00:00 +Internet,RIGHT_case-8798,2011-09-19 01:06:40+00:00,General,2011-08-19 14:11:48.617000+00:00,2011-09-19 01:06:40.020000+00:00,Group 8,Resource01,2011-07-25 01:06:40.020000+00:00,task-36266,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-11 10:38:04.212000+00:00 +Internet,RIGHT_case-8798,2011-09-19 01:06:40+00:00,General,2011-08-19 14:11:48.617000+00:00,2011-09-19 01:06:40.020000+00:00,Group 8,Resource01,2011-07-25 01:06:40.020000+00:00,task-36853,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-19 14:11:12.381000+00:00 +Internet,RIGHT_case-8802,2011-08-30 01:06:40+00:00,General,2011-08-08 08:47:37.770000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-35234,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 09:37:35.130000+00:00 +Internet,RIGHT_case-8802,2011-08-30 01:06:40+00:00,General,2011-08-08 08:47:37.770000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-35237,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 09:38:07.555000+00:00 +Internet,RIGHT_case-8802,2011-08-30 01:06:40+00:00,General,2011-08-08 08:47:37.770000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-35238,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 09:38:41.419000+00:00 +Internet,RIGHT_case-8812,2011-09-20 01:06:40+00:00,General,2011-08-02 07:51:55.717000+00:00,2011-09-20 01:06:40.020000+00:00,Group 8,Resource11,2011-07-26 01:06:40.020000+00:00,task-33890,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 09:02:16.195000+00:00 +Internet,RIGHT_case-8812,2011-09-20 01:06:40+00:00,General,2011-08-02 07:51:55.717000+00:00,2011-09-20 01:06:40.020000+00:00,Group 8,Resource11,2011-07-26 01:06:40.020000+00:00,task-33894,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 09:02:53.167000+00:00 +Internet,RIGHT_case-8812,2011-09-20 01:06:40+00:00,General,2011-08-02 07:51:55.717000+00:00,2011-09-20 01:06:40.020000+00:00,Group 8,Resource11,2011-07-26 01:06:40.020000+00:00,task-33895,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 09:03:39.686000+00:00 +Internet,RIGHT_case-8815,2011-08-18 01:06:40+00:00,General,2011-08-15 14:46:00.636000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource05,2011-06-23 01:06:40.020000+00:00,task-34999,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-08-03 09:16:50.773000+00:00 +Internet,RIGHT_case-8815,2011-08-18 01:06:40+00:00,General,2011-08-15 14:46:00.636000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource05,2011-06-23 01:06:40.020000+00:00,task-35003,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-03 09:17:38.771000+00:00 +Internet,RIGHT_case-8815,2011-08-18 01:06:40+00:00,General,2011-08-15 14:46:00.636000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource05,2011-06-23 01:06:40.020000+00:00,task-35004,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-03 09:18:37.509000+00:00 +Internet,RIGHT_case-8822,2011-08-26 01:06:40+00:00,General,2011-08-26 11:42:50.171000+00:00,2011-08-26 01:06:40.020000+00:00,Group 5,Resource06,2011-07-01 01:06:40.020000+00:00,task-35122,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-03 15:53:50.496000+00:00 +Internet,RIGHT_case-8822,2011-08-26 01:06:40+00:00,General,2011-08-26 11:42:50.171000+00:00,2011-08-26 01:06:40.020000+00:00,Group 5,Resource06,2011-07-01 01:06:40.020000+00:00,task-35125,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-03 15:54:22.016000+00:00 +Internet,RIGHT_case-8822,2011-08-26 01:06:40+00:00,General,2011-08-26 11:42:50.171000+00:00,2011-08-26 01:06:40.020000+00:00,Group 5,Resource06,2011-07-01 01:06:40.020000+00:00,task-35126,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-03 15:55:01.260000+00:00 +Internet,RIGHT_case-8823,2011-11-22 01:06:40+00:00,General,2011-10-10 09:55:02.628000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource02,2011-06-23 01:06:40.020000+00:00,task-35487,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-04 15:26:19.133000+00:00 +Internet,RIGHT_case-8823,2011-11-22 01:06:40+00:00,General,2011-10-10 09:55:02.628000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource02,2011-06-23 01:06:40.020000+00:00,task-35490,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-04 15:27:08.932000+00:00 +Internet,RIGHT_case-8823,2011-11-22 01:06:40+00:00,General,2011-10-10 09:55:02.628000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource02,2011-06-23 01:06:40.020000+00:00,task-35491,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-04 15:29:22.245000+00:00 +Internet,RIGHT_case-8833,2011-09-19 01:06:40+00:00,General,2011-08-30 15:15:19.487000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource12,2011-07-25 01:06:40.020000+00:00,task-35203,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-08-04 08:47:53.498000+00:00 +Internet,RIGHT_case-8833,2011-09-19 01:06:40+00:00,General,2011-08-30 15:15:19.487000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource12,2011-07-25 01:06:40.020000+00:00,task-35207,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-08-04 08:48:57.489000+00:00 +Internet,RIGHT_case-8833,2011-09-19 01:06:40+00:00,General,2011-08-30 15:15:19.487000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource12,2011-07-25 01:06:40.020000+00:00,task-35210,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-08-04 09:02:32.279000+00:00 +Internet,RIGHT_case-8837,2011-08-30 01:06:40+00:00,General,2011-08-08 09:03:47.077000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-35267,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 09:48:57.447000+00:00 +Internet,RIGHT_case-8837,2011-08-30 01:06:40+00:00,General,2011-08-08 09:03:47.077000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-35270,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 09:49:31.871000+00:00 +Internet,RIGHT_case-8837,2011-08-30 01:06:40+00:00,General,2011-08-08 09:03:47.077000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-04 01:06:40.020000+00:00,task-35271,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 09:50:04.632000+00:00 +Internet,RIGHT_case-8839,2011-08-30 00:00:00+00:00,General,2012-01-18 09:56:50.954000+00:00,2011-08-30 00:00:00.020000+00:00,Group 5,Resource14,2011-07-04 01:06:40.020000+00:00,task-35919,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-09 12:17:42.423000+00:00 +Internet,RIGHT_case-8839,2011-08-30 00:00:00+00:00,General,2012-01-18 09:56:50.954000+00:00,2011-08-30 00:00:00.020000+00:00,Group 5,Resource14,2011-07-04 01:06:40.020000+00:00,task-35922,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-09 12:18:35.706000+00:00 +Internet,RIGHT_case-8839,2011-08-30 00:00:00+00:00,General,2012-01-18 09:56:50.954000+00:00,2011-08-30 00:00:00.020000+00:00,Group 5,Resource14,2011-07-04 01:06:40.020000+00:00,task-35923,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-09 12:21:07.616000+00:00 +Internet,RIGHT_case-8840,2011-09-20 01:06:40+00:00,General,2011-08-30 12:28:15.307000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource06,2011-07-26 01:06:40.020000+00:00,task-35186,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-04 08:40:04.627000+00:00 +Internet,RIGHT_case-8840,2011-09-20 01:06:40+00:00,General,2011-08-30 12:28:15.307000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource06,2011-07-26 01:06:40.020000+00:00,task-35189,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-04 08:40:37.420000+00:00 +Internet,RIGHT_case-8840,2011-09-20 01:06:40+00:00,General,2011-08-30 12:28:15.307000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource06,2011-07-26 01:06:40.020000+00:00,task-35191,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-04 08:43:07.086000+00:00 +Internet,RIGHT_case-8841,2011-09-21 01:06:40+00:00,General,2011-08-18 08:10:00.879000+00:00,2011-09-21 01:06:40.020000+00:00,Group 8,Resource11,2011-07-27 01:06:40.020000+00:00,task-36175,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-11 08:53:24.186000+00:00 +Internet,RIGHT_case-8841,2011-09-21 01:06:40+00:00,General,2011-08-18 08:10:00.879000+00:00,2011-09-21 01:06:40.020000+00:00,Group 8,Resource11,2011-07-27 01:06:40.020000+00:00,task-36178,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-11 08:53:58.920000+00:00 +Internet,RIGHT_case-8841,2011-09-21 01:06:40+00:00,General,2011-08-18 08:10:00.879000+00:00,2011-09-21 01:06:40.020000+00:00,Group 8,Resource11,2011-07-27 01:06:40.020000+00:00,task-36179,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-11 08:55:03.003000+00:00 +Internet,RIGHT_case-8842,2011-08-30 01:06:40+00:00,General,2011-08-08 08:41:27.017000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-35305,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 10:20:56.365000+00:00 +Internet,RIGHT_case-8842,2011-08-30 01:06:40+00:00,General,2011-08-08 08:41:27.017000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-35308,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 10:21:37.453000+00:00 +Internet,RIGHT_case-8842,2011-08-30 01:06:40+00:00,General,2011-08-08 08:41:27.017000+00:00,2011-08-30 01:06:40.020000+00:00,Group 8,Resource11,2011-07-05 01:06:40.020000+00:00,task-35309,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 10:22:31.296000+00:00 +Internet,RIGHT_case-8844,2011-09-21 01:06:40+00:00,General,2011-11-22 09:38:17.689000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource02,2011-07-27 01:06:40.020000+00:00,task-36811,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-19 11:17:17.445000+00:00 +Internet,RIGHT_case-8844,2011-09-21 01:06:40+00:00,General,2011-11-22 09:38:17.689000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource02,2011-07-27 01:06:40.020000+00:00,task-36814,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-19 11:18:20.997000+00:00 +Internet,RIGHT_case-8844,2011-09-21 01:06:40+00:00,General,2011-11-22 09:38:17.689000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource02,2011-07-27 01:06:40.020000+00:00,task-36815,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-19 11:22:01.653000+00:00 +Internet,RIGHT_case-8847,2011-09-21 01:06:40+00:00,General,2011-08-30 14:37:31.919000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource05,2011-07-27 01:06:40.020000+00:00,task-35029,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-08-03 10:01:28.231000+00:00 +Internet,RIGHT_case-8847,2011-09-21 01:06:40+00:00,General,2011-08-30 14:37:31.919000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource05,2011-07-27 01:06:40.020000+00:00,task-35032,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-03 10:02:35.898000+00:00 +Internet,RIGHT_case-8847,2011-09-21 01:06:40+00:00,General,2011-08-30 14:37:31.919000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource05,2011-07-27 01:06:40.020000+00:00,task-35033,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-03 10:07:21.748000+00:00 +Internet,RIGHT_case-8848,2011-09-22 11:42:57.229000+00:00,General,2011-08-09 09:33:16.510000+00:00,2011-09-22 11:42:57.229000+00:00,Group 8,Resource11,2011-07-28 11:42:57.229000+00:00,task-35287,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 09:59:27.085000+00:00 +Internet,RIGHT_case-8848,2011-09-22 11:42:57.229000+00:00,General,2011-08-09 09:33:16.510000+00:00,2011-09-22 11:42:57.229000+00:00,Group 8,Resource11,2011-07-28 11:42:57.229000+00:00,task-35290,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 10:00:01.088000+00:00 +Internet,RIGHT_case-8848,2011-09-22 11:42:57.229000+00:00,General,2011-08-09 09:33:16.510000+00:00,2011-09-22 11:42:57.229000+00:00,Group 8,Resource11,2011-07-28 11:42:57.229000+00:00,task-35291,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 10:00:37.127000+00:00 +Internet,RIGHT_case-8849,2011-08-31 01:06:40+00:00,General,2011-08-04 11:29:19.019000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource04,2011-07-05 01:06:40.020000+00:00,task-35131,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-03 15:55:49.201000+00:00 +Internet,RIGHT_case-8849,2011-08-31 01:06:40+00:00,General,2011-08-04 11:29:19.019000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource04,2011-07-05 01:06:40.020000+00:00,task-35136,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-03 15:56:49.992000+00:00 +Internet,RIGHT_case-8849,2011-08-31 01:06:40+00:00,General,2011-08-04 11:29:19.019000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource04,2011-07-05 01:06:40.020000+00:00,task-35139,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-03 15:57:39.056000+00:00 +Internet,RIGHT_case-8851,2011-09-01 01:06:40+00:00,General,,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-36078,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-10 12:24:35.513000+00:00 +Internet,RIGHT_case-8851,2011-09-01 01:06:40+00:00,General,,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-36081,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-10 12:25:46.856000+00:00 +Internet,RIGHT_case-8851,2011-09-01 01:06:40+00:00,General,,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-36082,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-10 12:26:35.180000+00:00 +Internet,RIGHT_case-8852,2011-09-01 01:06:40+00:00,General,2011-08-29 12:24:36.662000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-35106,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-08-03 15:42:45.748000+00:00 +Internet,RIGHT_case-8852,2011-09-01 01:06:40+00:00,General,2011-08-29 12:24:36.662000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-35104,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:43:25.988000+00:00 +Internet,RIGHT_case-8852,2011-09-01 01:06:40+00:00,General,2011-08-29 12:24:36.662000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource13,2011-07-07 01:06:40.020000+00:00,task-35109,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:44:19.909000+00:00 +Internet,RIGHT_case-8853,2011-08-31 01:06:40+00:00,General,2011-08-29 12:52:51.806000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource13,2011-07-06 01:06:40.020000+00:00,task-35081,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:07:43.270000+00:00 +Internet,RIGHT_case-8853,2011-08-31 01:06:40+00:00,General,2011-08-29 12:52:51.806000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource13,2011-07-06 01:06:40.020000+00:00,task-35084,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:08:43.505000+00:00 +Internet,RIGHT_case-8853,2011-08-31 01:06:40+00:00,General,2011-08-29 12:52:51.806000+00:00,2011-08-31 01:06:40.020000+00:00,Group 5,Resource13,2011-07-06 01:06:40.020000+00:00,task-35085,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-08-03 15:09:14.162000+00:00 +Internet,RIGHT_case-8854,2011-08-04 01:06:40+00:00,General,2011-10-05 09:14:52.564000+00:00,2011-08-04 01:06:40.020000+00:00,Group 11,Resource24,2011-06-09 01:06:40.020000+00:00,task-34949,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-08-02 15:38:12.025000+00:00 +Internet,RIGHT_case-8854,2011-08-04 01:06:40+00:00,General,2011-10-05 09:14:52.564000+00:00,2011-08-04 01:06:40.020000+00:00,Group 11,Resource24,2011-06-09 01:06:40.020000+00:00,task-34952,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-08-02 15:39:04.276000+00:00 +Internet,RIGHT_case-8854,2011-08-04 01:06:40+00:00,General,2011-10-05 09:14:52.564000+00:00,2011-08-04 01:06:40.020000+00:00,Group 11,Resource24,2011-06-09 01:06:40.020000+00:00,task-34953,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-08-02 15:40:08.563000+00:00 +Internet,RIGHT_case-8855,2011-09-01 01:06:40+00:00,General,2011-08-18 07:55:06.759000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-35402,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 13:12:02.623000+00:00 +Internet,RIGHT_case-8855,2011-09-01 01:06:40+00:00,General,2011-08-18 07:55:06.759000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-35405,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 13:13:20.800000+00:00 +Internet,RIGHT_case-8855,2011-09-01 01:06:40+00:00,General,2011-08-18 07:55:06.759000+00:00,2011-09-01 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-35407,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 13:14:15.811000+00:00 +Internet,RIGHT_case-8856,2011-09-02 01:06:40+00:00,General,2011-10-04 08:42:50.217000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource01,2011-07-08 01:06:40.020000+00:00,task-35366,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 12:46:28.880000+00:00 +Internet,RIGHT_case-8856,2011-09-02 01:06:40+00:00,General,2011-10-04 08:42:50.217000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource01,2011-07-08 01:06:40.020000+00:00,task-35385,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 12:48:05.459000+00:00 +Internet,RIGHT_case-8856,2011-09-02 01:06:40+00:00,General,2011-10-04 08:42:50.217000+00:00,2011-09-02 01:06:40.020000+00:00,Group 8,Resource01,2011-07-08 01:06:40.020000+00:00,task-35387,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 12:49:44.542000+00:00 +Internet,RIGHT_case-8858,2011-09-01 01:06:40+00:00,General,2011-11-09 16:11:48.715000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-36543,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-16 14:26:06.687000+00:00 +Internet,RIGHT_case-8858,2011-09-01 01:06:40+00:00,General,2011-11-09 16:11:48.715000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-36553,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-16 14:28:47.911000+00:00 +Internet,RIGHT_case-8858,2011-09-01 01:06:40+00:00,General,2011-11-09 16:11:48.715000+00:00,2011-09-01 01:06:40.020000+00:00,Group 5,Resource14,2011-07-07 01:06:40.020000+00:00,task-36560,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-16 14:31:53.449000+00:00 +Internet,RIGHT_case-8863,2011-10-19 01:06:40+00:00,General,2011-10-04 15:36:34.804000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource02,2011-07-11 01:06:40.020000+00:00,task-35677,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-08 14:39:00.312000+00:00 +Internet,RIGHT_case-8863,2011-10-19 01:06:40+00:00,General,2011-10-04 15:36:34.804000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource02,2011-07-11 01:06:40.020000+00:00,task-35680,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-08 14:39:55.089000+00:00 +Internet,RIGHT_case-8863,2011-10-19 01:06:40+00:00,General,2011-10-04 15:36:34.804000+00:00,2011-10-19 01:06:40.020000+00:00,Group 5,Resource02,2011-07-11 01:06:40.020000+00:00,task-35681,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-08 14:42:56.289000+00:00 +Internet,RIGHT_case-8864,2011-09-06 01:06:40+00:00,General,2011-08-18 08:01:10.666000+00:00,2011-09-06 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-35493,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 15:32:00.946000+00:00 +Internet,RIGHT_case-8864,2011-09-06 01:06:40+00:00,General,2011-08-18 08:01:10.666000+00:00,2011-09-06 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-35496,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 15:32:35.742000+00:00 +Internet,RIGHT_case-8864,2011-09-06 01:06:40+00:00,General,2011-08-18 08:01:10.666000+00:00,2011-09-06 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-35497,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 15:33:10.015000+00:00 +Internet,RIGHT_case-8905,2011-09-26 01:06:40+00:00,General,2011-08-02 10:41:40.140000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource02,2011-08-01 01:06:40.020000+00:00,task-34760,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-01 15:21:05.210000+00:00 +Internet,RIGHT_case-8905,2011-09-26 01:06:40+00:00,General,2011-08-02 10:41:40.140000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource02,2011-08-01 01:06:40.020000+00:00,task-34764,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-01 15:21:42.340000+00:00 +Internet,RIGHT_case-8905,2011-09-26 01:06:40+00:00,General,2011-08-02 10:41:40.140000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource02,2011-08-01 01:06:40.020000+00:00,task-34769,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-01 15:24:23.013000+00:00 +Internet,RIGHT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-5,T02 Check confirmation of receipt,complete,Group 4,Resource26,2010-10-02 09:21:26.588000+00:00 +Internet,RIGHT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-8,T02 Check confirmation of receipt,complete,Group 4,Resource26,2010-10-02 09:31:40.160000+00:00 +Internet,RIGHT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-10,T02 Check confirmation of receipt,complete,Group 4,Resource21,2010-11-09 14:13:52.563000+00:00 +Internet,RIGHT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1276,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2010-11-09 14:14:22.628000+00:00 +Internet,RIGHT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1277,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource21,2010-11-09 14:17:36.097000+00:00 +Internet,RIGHT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1335,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource26,2010-11-10 07:52:51.041000+00:00 +Internet,RIGHT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1337,T10 Determine necessity to stop indication,complete,Group 1,admin1,2010-11-10 09:38:45.959000+00:00 +Internet,RIGHT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1339,T12 Check document X request unlicensed,complete,Group 4,admin1,2010-11-10 09:39:07.674000+00:00 +Internet,RIGHT_case-891,2010-11-26 00:00:00+00:00,General,2010-11-12 13:40:44.661000+00:00,2010-11-26 00:00:00.010000+00:00,,Resource26,2010-10-01 00:00:00.020000+00:00,task-1341,T15 Print document X request unlicensed,complete,Group 2,Resource26,2010-11-12 13:40:44.291000+00:00 +Internet,RIGHT_case-8919,2011-09-29 01:06:40+00:00,General,2011-09-12 10:44:33.854000+00:00,2011-09-29 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-36024,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-10 10:35:09.945000+00:00 +Internet,RIGHT_case-8919,2011-09-29 01:06:40+00:00,General,2011-09-12 10:44:33.854000+00:00,2011-09-29 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-36027,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-10 10:36:35.526000+00:00 +Internet,RIGHT_case-8919,2011-09-29 01:06:40+00:00,General,2011-09-12 10:44:33.854000+00:00,2011-09-29 01:06:40.020000+00:00,Group 8,Resource11,2011-07-12 01:06:40.020000+00:00,task-36028,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-10 10:44:06.780000+00:00 +Internet,RIGHT_case-8921,2011-08-18 01:06:40+00:00,General,2011-08-09 14:32:23.632000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource04,2011-06-22 01:06:40.020000+00:00,task-35933,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-09 12:38:53.023000+00:00 +Internet,RIGHT_case-8921,2011-08-18 01:06:40+00:00,General,2011-08-09 14:32:23.632000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource04,2011-06-22 01:06:40.020000+00:00,task-35937,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-09 12:39:35.544000+00:00 +Internet,RIGHT_case-8921,2011-08-18 01:06:40+00:00,General,2011-08-09 14:32:23.632000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource04,2011-06-22 01:06:40.020000+00:00,task-35939,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-09 12:40:09.569000+00:00 +Internet,RIGHT_case-8921,2011-08-18 01:06:40+00:00,General,2011-08-09 14:32:23.632000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource04,2011-06-22 01:06:40.020000+00:00,task-35959,T12 Check document X request unlicensed,complete,Group 4,Resource04,2011-08-09 14:31:33.293000+00:00 +Internet,RIGHT_case-8921,2011-08-18 01:06:40+00:00,General,2011-08-09 14:32:23.632000+00:00,2011-08-18 01:06:40.020000+00:00,Group 5,Resource04,2011-06-22 01:06:40.020000+00:00,task-35961,T15 Print document X request unlicensed,complete,Group 2,Resource04,2011-08-09 14:32:23.487000+00:00 +Internet,RIGHT_case-8922,2011-09-20 01:06:40+00:00,General,2011-09-14 11:50:53.694000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource04,2011-07-14 01:06:40.020000+00:00,task-35703,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-08 14:57:18.359000+00:00 +Internet,RIGHT_case-8922,2011-09-20 01:06:40+00:00,General,2011-09-14 11:50:53.694000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource04,2011-07-14 01:06:40.020000+00:00,task-35706,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-08 14:57:57.968000+00:00 +Internet,RIGHT_case-8922,2011-09-20 01:06:40+00:00,General,2011-09-14 11:50:53.694000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource04,2011-07-14 01:06:40.020000+00:00,task-35717,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-08 15:16:10.956000+00:00 +Internet,RIGHT_case-8923,2011-11-08 01:06:40+00:00,General,2011-10-04 11:51:03.131000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource13,2011-07-25 01:06:40.020000+00:00,task-36414,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-08-15 09:37:46.677000+00:00 +Internet,RIGHT_case-8923,2011-11-08 01:06:40+00:00,General,2011-10-04 11:51:03.131000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource13,2011-07-25 01:06:40.020000+00:00,task-36412,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-08-15 09:38:23.127000+00:00 +Internet,RIGHT_case-8923,2011-11-08 01:06:40+00:00,General,2011-10-04 11:51:03.131000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource13,2011-07-25 01:06:40.020000+00:00,task-36417,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-08-15 09:39:11.485000+00:00 +Internet,RIGHT_case-8934,2011-09-19 01:06:40+00:00,General,2011-09-12 14:12:18.624000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource05,2011-07-25 01:06:40.020000+00:00,task-36218,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-08-11 09:26:42.058000+00:00 +Internet,RIGHT_case-8934,2011-09-19 01:06:40+00:00,General,2011-09-12 14:12:18.624000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource05,2011-07-25 01:06:40.020000+00:00,task-36222,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-11 09:27:41.372000+00:00 +Internet,RIGHT_case-8934,2011-09-19 01:06:40+00:00,General,2011-09-12 14:12:18.624000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource05,2011-07-25 01:06:40.020000+00:00,task-36220,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-11 09:28:37.415000+00:00 +Internet,RIGHT_case-8936,2011-11-01 01:06:40+00:00,General,2011-11-07 15:47:19.133000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-36116,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-10 15:03:43.965000+00:00 +Internet,RIGHT_case-8936,2011-11-01 01:06:40+00:00,General,2011-11-07 15:47:19.133000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-36119,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-10 15:04:22.437000+00:00 +Internet,RIGHT_case-8936,2011-11-01 01:06:40+00:00,General,2011-11-07 15:47:19.133000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-36120,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-10 15:23:58.423000+00:00 +Internet,RIGHT_case-8954,2011-11-18 01:06:40+00:00,General,2011-11-16 10:10:47.056000+00:00,2011-11-18 01:06:40.010000+00:00,Group 5,Resource23,2011-07-22 01:06:40.020000+00:00,task-35355,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-04 11:33:47.076000+00:00 +Internet,RIGHT_case-8954,2011-11-18 01:06:40+00:00,General,2011-11-16 10:10:47.056000+00:00,2011-11-18 01:06:40.010000+00:00,Group 5,Resource23,2011-07-22 01:06:40.020000+00:00,task-35358,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-04 11:34:24.912000+00:00 +Internet,RIGHT_case-8954,2011-11-18 01:06:40+00:00,General,2011-11-16 10:10:47.056000+00:00,2011-11-18 01:06:40.010000+00:00,Group 5,Resource23,2011-07-22 01:06:40.020000+00:00,task-35359,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-04 11:35:01.839000+00:00 +Internet,RIGHT_case-8958,2011-09-16 01:06:40+00:00,General,2011-10-31 16:46:01.941000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource14,2011-07-22 01:06:40.020000+00:00,task-35870,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-09 10:12:36.770000+00:00 +Internet,RIGHT_case-8958,2011-09-16 01:06:40+00:00,General,2011-10-31 16:46:01.941000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource14,2011-07-22 01:06:40.020000+00:00,task-35873,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-09 10:13:22.672000+00:00 +Internet,RIGHT_case-8958,2011-09-16 01:06:40+00:00,General,2011-10-31 16:46:01.941000+00:00,2011-09-16 01:06:40.020000+00:00,Group 5,Resource14,2011-07-22 01:06:40.020000+00:00,task-35878,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-09 10:43:50.060000+00:00 +Internet,RIGHT_case-8959,2011-09-23 01:06:40+00:00,General,2011-09-12 13:55:36.171000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36092,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-10 14:17:22.152000+00:00 +Internet,RIGHT_case-8959,2011-09-23 01:06:40+00:00,General,2011-09-12 13:55:36.171000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36095,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-10 14:18:35.008000+00:00 +Internet,RIGHT_case-8959,2011-09-23 01:06:40+00:00,General,2011-09-12 13:55:36.171000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36096,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-10 14:19:57.555000+00:00 +Internet,RIGHT_case-8962,2011-09-23 01:06:40+00:00,General,2011-08-18 08:15:43.236000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36133,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-10 15:33:35.557000+00:00 +Internet,RIGHT_case-8962,2011-09-23 01:06:40+00:00,General,2011-08-18 08:15:43.236000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36139,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-10 15:35:20.702000+00:00 +Internet,RIGHT_case-8962,2011-09-23 01:06:40+00:00,General,2011-08-18 08:15:43.236000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36140,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-10 15:36:05.724000+00:00 +Internet,RIGHT_case-8964,2011-09-23 01:06:40+00:00,General,2011-08-18 08:30:02.345000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36197,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-11 09:17:57.894000+00:00 +Internet,RIGHT_case-8964,2011-09-23 01:06:40+00:00,General,2011-08-18 08:30:02.345000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36200,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-11 09:18:44.028000+00:00 +Internet,RIGHT_case-8964,2011-09-23 01:06:40+00:00,General,2011-08-18 08:30:02.345000+00:00,2011-09-23 01:06:40.020000+00:00,Group 8,Resource11,2011-07-29 01:06:40.020000+00:00,task-36201,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-11 09:19:23.985000+00:00 +Internet,RIGHT_case-8967,2011-10-31 01:06:40+00:00,General,2011-10-28 15:56:53.545000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource04,2011-07-29 01:06:40.020000+00:00,task-36463,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-15 14:48:15.319000+00:00 +Internet,RIGHT_case-8967,2011-10-31 01:06:40+00:00,General,2011-10-28 15:56:53.545000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource04,2011-07-29 01:06:40.020000+00:00,task-36466,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-15 14:49:07.100000+00:00 +Internet,RIGHT_case-8967,2011-10-31 01:06:40+00:00,General,2011-10-28 15:56:53.545000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource04,2011-07-29 01:06:40.020000+00:00,task-36472,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-15 15:00:39.031000+00:00 +Internet,RIGHT_case-8969,2011-09-26 01:06:40+00:00,General,2011-09-08 00:00:00.020000+00:00,2011-09-26 01:06:40.020000+00:00,Group 8,Resource01,2011-08-01 01:06:40.020000+00:00,task-38254,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 09:00:54.687000+00:00 +Internet,RIGHT_case-8969,2011-09-26 01:06:40+00:00,General,2011-09-08 00:00:00.020000+00:00,2011-09-26 01:06:40.020000+00:00,Group 8,Resource01,2011-08-01 01:06:40.020000+00:00,task-38562,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-09-09 09:26:11.076000+00:00 +Internet,RIGHT_case-8982,2011-09-24 01:06:40+00:00,General,2011-08-30 10:01:11.614000+00:00,2011-09-24 01:06:40.020000+00:00,Group 5,Resource13,2011-07-30 01:06:40.020000+00:00,task-36341,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-08-12 11:49:37.019000+00:00 +Internet,RIGHT_case-8982,2011-09-24 01:06:40+00:00,General,2011-08-30 10:01:11.614000+00:00,2011-09-24 01:06:40.020000+00:00,Group 5,Resource13,2011-07-30 01:06:40.020000+00:00,task-36344,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-08-12 11:52:49.567000+00:00 +Internet,RIGHT_case-8982,2011-09-24 01:06:40+00:00,General,2011-08-30 10:01:11.614000+00:00,2011-09-24 01:06:40.020000+00:00,Group 5,Resource13,2011-07-30 01:06:40.020000+00:00,task-36345,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-08-12 11:54:03.012000+00:00 +Internet,RIGHT_case-8983,2011-11-05 01:06:40+00:00,General,2011-10-31 11:27:42.585000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource02,2011-07-30 01:06:40.020000+00:00,task-36885,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-22 08:47:11.778000+00:00 +Internet,RIGHT_case-8983,2011-11-05 01:06:40+00:00,General,2011-10-31 11:27:42.585000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource02,2011-07-30 01:06:40.020000+00:00,task-36888,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-22 09:22:41.469000+00:00 +Internet,RIGHT_case-8983,2011-11-05 01:06:40+00:00,General,2011-10-31 11:27:42.585000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource02,2011-07-30 01:06:40.020000+00:00,task-40229,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-09-25 18:18:16.498000+00:00 +Internet,RIGHT_case-8986,2011-09-26 01:06:40+00:00,General,2011-11-18 09:55:27.554000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource14,2011-08-01 01:06:40.020000+00:00,task-37226,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-26 12:50:37.469000+00:00 +Internet,RIGHT_case-8986,2011-09-26 01:06:40+00:00,General,2011-11-18 09:55:27.554000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource14,2011-08-01 01:06:40.020000+00:00,task-37229,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-26 12:51:21.604000+00:00 +Internet,RIGHT_case-8986,2011-09-26 01:06:40+00:00,General,2011-11-18 09:55:27.554000+00:00,2011-09-26 01:06:40.020000+00:00,Group 5,Resource14,2011-08-01 01:06:40.020000+00:00,task-37315,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-29 10:40:44.349000+00:00 +Internet,RIGHT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36294,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-08-11 14:26:04.791000+00:00 +Internet,RIGHT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36297,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-08-11 14:27:52.790000+00:00 +Internet,RIGHT_case-8989,2011-09-27 01:06:40+00:00,General,2011-09-19 16:54:45.917000+00:00,2011-09-27 01:06:40.020000+00:00,Group 5,Resource12,2011-08-02 01:06:40.020000+00:00,task-36305,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-08-11 14:48:34.970000+00:00 +Internet,RIGHT_case-8993,2011-11-05 01:06:40+00:00,General,2011-10-31 11:31:25.901000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource06,2011-08-03 01:06:40.020000+00:00,task-35994,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-10 08:46:40.893000+00:00 +Internet,RIGHT_case-8993,2011-11-05 01:06:40+00:00,General,2011-10-31 11:31:25.901000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource06,2011-08-03 01:06:40.020000+00:00,task-35997,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-10 08:47:21.444000+00:00 +Internet,RIGHT_case-8993,2011-11-05 01:06:40+00:00,General,2011-10-31 11:31:25.901000+00:00,2011-11-05 01:06:40.010000+00:00,Group 5,Resource06,2011-08-03 01:06:40.020000+00:00,task-35998,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-10 09:03:28.778000+00:00 +Internet,RIGHT_case-8998,2011-09-19 01:06:40+00:00,General,2011-11-25 10:13:25.412000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource14,2011-07-25 01:06:40.020000+00:00,task-36202,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-11 09:19:37.957000+00:00 +Internet,RIGHT_case-8998,2011-09-19 01:06:40+00:00,General,2011-11-25 10:13:25.412000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource14,2011-07-25 01:06:40.020000+00:00,task-36209,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-11 09:20:42.982000+00:00 +Internet,RIGHT_case-8998,2011-09-19 01:06:40+00:00,General,2011-11-25 10:13:25.412000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource14,2011-07-25 01:06:40.020000+00:00,task-36239,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-11 10:20:33.780000+00:00 +Internet,RIGHT_case-9004,2011-09-21 01:06:40+00:00,General,2011-10-17 16:51:57.398000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource14,2011-07-27 01:06:40.020000+00:00,task-36511,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-16 11:15:20.107000+00:00 +Internet,RIGHT_case-9004,2011-09-21 01:06:40+00:00,General,2011-10-17 16:51:57.398000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource14,2011-07-27 01:06:40.020000+00:00,task-36514,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-16 11:16:48.761000+00:00 +Internet,RIGHT_case-9004,2011-09-21 01:06:40+00:00,General,2011-10-17 16:51:57.398000+00:00,2011-09-21 01:06:40.020000+00:00,Group 5,Resource14,2011-07-27 01:06:40.020000+00:00,task-36517,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-16 11:55:04.023000+00:00 +Internet,RIGHT_case-9011,2011-09-20 01:06:40+00:00,General,2011-08-29 11:39:41.422000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-36709,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-18 09:04:10.566000+00:00 +Internet,RIGHT_case-9011,2011-09-20 01:06:40+00:00,General,2011-08-29 11:39:41.422000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-36712,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-18 09:05:12.176000+00:00 +Internet,RIGHT_case-9011,2011-09-20 01:06:40+00:00,General,2011-08-29 11:39:41.422000+00:00,2011-09-20 01:06:40.020000+00:00,Group 5,Resource02,2011-07-26 01:06:40.020000+00:00,task-36713,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-18 13:46:17.085000+00:00 +Internet,RIGHT_case-9012,2011-09-29 01:06:40+00:00,General,2011-10-18 08:40:01.225000+00:00,2011-09-29 01:06:40.020000+00:00,Group 5,Resource12,2011-08-04 01:06:40.020000+00:00,task-40150,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-23 14:36:25.450000+00:00 +Internet,RIGHT_case-9012,2011-09-29 01:06:40+00:00,General,2011-10-18 08:40:01.225000+00:00,2011-09-29 01:06:40.020000+00:00,Group 5,Resource12,2011-08-04 01:06:40.020000+00:00,task-40153,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-23 14:37:28.436000+00:00 +Internet,RIGHT_case-9012,2011-09-29 01:06:40+00:00,General,2011-10-18 08:40:01.225000+00:00,2011-09-29 01:06:40.020000+00:00,Group 5,Resource12,2011-08-04 01:06:40.020000+00:00,task-40156,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-23 14:38:26.005000+00:00 +Internet,RIGHT_case-9013,2011-09-30 01:06:40+00:00,General,2011-09-29 15:21:29.582000+00:00,2011-09-30 01:06:40.020000+00:00,,admin1,2011-08-05 01:06:40.020000+00:00,task-40127,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-09-23 14:15:58.446000+00:00 +Internet,RIGHT_case-9013,2011-09-30 01:06:40+00:00,General,2011-09-29 15:21:29.582000+00:00,2011-09-30 01:06:40.020000+00:00,,admin1,2011-08-05 01:06:40.020000+00:00,task-40131,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-09-23 14:17:04.456000+00:00 +Internet,RIGHT_case-9013,2011-09-30 01:06:40+00:00,General,2011-09-29 15:21:29.582000+00:00,2011-09-30 01:06:40.020000+00:00,,admin1,2011-08-05 01:06:40.020000+00:00,task-40130,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-09-23 14:17:42.272000+00:00 +Internet,RIGHT_case-9014,2011-09-30 01:06:40+00:00,General,2011-08-26 13:49:10.193000+00:00,2011-09-30 01:06:40.020000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-36854,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-19 14:26:29.407000+00:00 +Internet,RIGHT_case-9014,2011-09-30 01:06:40+00:00,General,2011-08-26 13:49:10.193000+00:00,2011-09-30 01:06:40.020000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-36857,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-19 14:27:12.652000+00:00 +Internet,RIGHT_case-9014,2011-09-30 01:06:40+00:00,General,2011-08-26 13:49:10.193000+00:00,2011-09-30 01:06:40.020000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-37049,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-24 12:36:04.081000+00:00 +Internet,RIGHT_case-9016,2011-11-14 01:06:40+00:00,General,2011-09-22 14:17:37.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-08-08 01:06:40.020000+00:00,task-36840,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-19 12:18:38.854000+00:00 +Internet,RIGHT_case-9016,2011-11-14 01:06:40+00:00,General,2011-09-22 14:17:37.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-08-08 01:06:40.020000+00:00,task-36843,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-19 12:20:14.379000+00:00 +Internet,RIGHT_case-9016,2011-11-14 01:06:40+00:00,General,2011-09-22 14:17:37.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-08-08 01:06:40.020000+00:00,task-36844,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-19 12:27:00.508000+00:00 +Internet,RIGHT_case-9026,2011-11-25 01:06:40+00:00,General,2011-11-07 11:21:25.159000+00:00,2011-11-25 01:06:40.010000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-36667,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-17 16:18:44.870000+00:00 +Internet,RIGHT_case-9026,2011-11-25 01:06:40+00:00,General,2011-11-07 11:21:25.159000+00:00,2011-11-25 01:06:40.010000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-36670,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-17 16:19:26.677000+00:00 +Internet,RIGHT_case-9026,2011-11-25 01:06:40+00:00,General,2011-11-07 11:21:25.159000+00:00,2011-11-25 01:06:40.010000+00:00,Group 5,Resource04,2011-08-05 01:06:40.020000+00:00,task-36671,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-17 16:20:03.740000+00:00 +Internet,RIGHT_case-9032,2011-10-03 00:00:00+00:00,General,2012-01-17 13:52:44.800000+00:00,2011-10-03 00:00:00.020000+00:00,Group 5,Resource14,2011-08-08 01:06:40.020000+00:00,task-43819,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-10-19 08:59:39.434000+00:00 +Internet,RIGHT_case-9032,2011-10-03 00:00:00+00:00,General,2012-01-17 13:52:44.800000+00:00,2011-10-03 00:00:00.020000+00:00,Group 5,Resource14,2011-08-08 01:06:40.020000+00:00,task-43822,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-10-19 09:00:43.284000+00:00 +Internet,RIGHT_case-9032,2011-10-03 00:00:00+00:00,General,2012-01-17 13:52:44.800000+00:00,2011-10-03 00:00:00.020000+00:00,Group 5,Resource14,2011-08-08 01:06:40.020000+00:00,task-43823,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-10-19 09:01:30.636000+00:00 +Internet,RIGHT_case-9033,2011-11-24 01:06:40+00:00,General,2011-11-18 10:34:52.323000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource02,2011-08-10 01:06:40.020000+00:00,task-36645,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-17 14:18:20.560000+00:00 +Internet,RIGHT_case-9033,2011-11-24 01:06:40+00:00,General,2011-11-18 10:34:52.323000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource02,2011-08-10 01:06:40.020000+00:00,task-36648,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-17 14:19:01.768000+00:00 +Internet,RIGHT_case-9033,2011-11-24 01:06:40+00:00,General,2011-11-18 10:34:52.323000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource02,2011-08-10 01:06:40.020000+00:00,task-36649,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-17 14:20:11.341000+00:00 +Internet,RIGHT_case-9040,2011-10-06 01:06:40+00:00,General,2011-09-12 14:11:45.124000+00:00,2011-10-06 01:06:40.020000+00:00,Group 8,Resource11,2011-08-11 01:06:40.020000+00:00,task-36718,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-18 10:44:54.597000+00:00 +Internet,RIGHT_case-9040,2011-10-06 01:06:40+00:00,General,2011-09-12 14:11:45.124000+00:00,2011-10-06 01:06:40.020000+00:00,Group 8,Resource11,2011-08-11 01:06:40.020000+00:00,task-36721,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-18 10:45:26.949000+00:00 +Internet,RIGHT_case-9040,2011-10-06 01:06:40+00:00,General,2011-09-12 14:11:45.124000+00:00,2011-10-06 01:06:40.020000+00:00,Group 8,Resource11,2011-08-11 01:06:40.020000+00:00,task-36722,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-18 10:46:03.198000+00:00 +Internet,RIGHT_case-9067,2011-11-09 01:06:40+00:00,General,2011-11-09 14:40:07.417000+00:00,2011-11-09 01:06:40.010000+00:00,Group 5,Resource02,2011-08-03 01:06:40.020000+00:00,task-36545,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-16 14:24:10.993000+00:00 +Internet,RIGHT_case-9067,2011-11-09 01:06:40+00:00,General,2011-11-09 14:40:07.417000+00:00,2011-11-09 01:06:40.010000+00:00,Group 5,Resource02,2011-08-03 01:06:40.020000+00:00,task-36549,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-16 14:24:56.869000+00:00 +Internet,RIGHT_case-9067,2011-11-09 01:06:40+00:00,General,2011-11-09 14:40:07.417000+00:00,2011-11-09 01:06:40.010000+00:00,Group 5,Resource02,2011-08-03 01:06:40.020000+00:00,task-36547,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-16 14:25:49.705000+00:00 +Internet,RIGHT_case-9072,2012-02-10 00:00:00+00:00,General,,2012-02-10 00:00:00.010000+00:00,Group 5,Resource04,2011-08-10 01:06:40.020000+00:00,task-36760,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-18 15:41:33.072000+00:00 +Internet,RIGHT_case-9072,2012-02-10 00:00:00+00:00,General,,2012-02-10 00:00:00.010000+00:00,Group 5,Resource04,2011-08-10 01:06:40.020000+00:00,task-36763,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-19 11:16:56.979000+00:00 +Internet,RIGHT_case-9072,2012-02-10 00:00:00+00:00,General,,2012-02-10 00:00:00.010000+00:00,Group 5,Resource04,2011-08-10 01:06:40.020000+00:00,task-36827,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-19 11:36:44.756000+00:00 +Internet,RIGHT_case-9075,2011-10-21 01:06:40+00:00,General,2011-10-29 00:00:00.020000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-08-14 01:06:40.020000+00:00,task-36599,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-08-17 10:24:55.081000+00:00 +Internet,RIGHT_case-9075,2011-10-21 01:06:40+00:00,General,2011-10-29 00:00:00.020000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-08-14 01:06:40.020000+00:00,task-36602,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-08-17 10:27:44.542000+00:00 +Internet,RIGHT_case-9075,2011-10-21 01:06:40+00:00,General,2011-10-29 00:00:00.020000+00:00,2011-10-21 01:06:40.020000+00:00,Group 5,Resource06,2011-08-14 01:06:40.020000+00:00,task-36603,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-08-17 10:31:14.091000+00:00 +Internet,RIGHT_case-9076,2011-09-22 01:06:40+00:00,General,2011-10-05 11:01:50.118000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource25,2011-07-28 01:06:40.020000+00:00,task-36467,T02 Check confirmation of receipt,complete,EMPTY,Resource33,2011-08-15 17:08:35.629000+00:00 +Internet,RIGHT_case-9076,2011-09-22 01:06:40+00:00,General,2011-10-05 11:01:50.118000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource25,2011-07-28 01:06:40.020000+00:00,task-36498,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-08-24 09:30:21.294000+00:00 +Internet,RIGHT_case-9076,2011-09-22 01:06:40+00:00,General,2011-10-05 11:01:50.118000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource25,2011-07-28 01:06:40.020000+00:00,task-41559,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2011-10-04 14:16:54.150000+00:00 +Internet,RIGHT_case-9078,2011-10-04 01:06:40+00:00,General,2011-09-22 10:06:40.242000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource12,2011-08-09 01:06:40.020000+00:00,task-39068,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-15 12:22:18.211000+00:00 +Internet,RIGHT_case-9078,2011-10-04 01:06:40+00:00,General,2011-09-22 10:06:40.242000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource12,2011-08-09 01:06:40.020000+00:00,task-39073,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-15 12:27:04.985000+00:00 +Internet,RIGHT_case-9078,2011-10-04 01:06:40+00:00,General,2011-09-22 10:06:40.242000+00:00,2011-10-04 01:06:40.020000+00:00,Group 5,Resource12,2011-08-09 01:06:40.020000+00:00,task-39081,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-15 12:59:09.483000+00:00 +Internet,RIGHT_case-9088,2011-10-10 01:06:40+00:00,General,2011-09-05 10:52:52.445000+00:00,2011-10-10 01:06:40.020000+00:00,Group 7,Resource35,2011-08-15 01:06:40.020000+00:00,task-37966,T02 Check confirmation of receipt,complete,Group 4,admin2,2011-09-05 10:52:54.095000+00:00 +Internet,RIGHT_case-9133,2011-09-13 01:06:40+00:00,General,2011-11-18 09:31:40.645000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource09,2011-07-19 01:06:40.020000+00:00,task-38770,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-09-12 15:21:19.979000+00:00 +Internet,RIGHT_case-9133,2011-09-13 01:06:40+00:00,General,2011-11-18 09:31:40.645000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource09,2011-07-19 01:06:40.020000+00:00,task-38774,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-09-13 12:23:09.132000+00:00 +Internet,RIGHT_case-9133,2011-09-13 01:06:40+00:00,General,2011-11-18 09:31:40.645000+00:00,2011-09-13 01:06:40.020000+00:00,Group 5,Resource09,2011-07-19 01:06:40.020000+00:00,task-41585,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-04 15:01:44.111000+00:00 +Internet,RIGHT_case-9143,2011-09-12 01:06:40+00:00,General,2011-09-20 12:16:27.702000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource05,2011-07-18 01:06:40.020000+00:00,task-38176,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-07 10:26:10.034000+00:00 +Internet,RIGHT_case-9143,2011-09-12 01:06:40+00:00,General,2011-09-20 12:16:27.702000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource05,2011-07-18 01:06:40.020000+00:00,task-38183,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-07 11:01:16.610000+00:00 +Internet,RIGHT_case-9143,2011-09-12 01:06:40+00:00,General,2011-09-20 12:16:27.702000+00:00,2011-09-12 01:06:40.020000+00:00,Group 5,Resource05,2011-07-18 01:06:40.020000+00:00,task-38184,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-07 11:03:13.586000+00:00 +Internet,RIGHT_case-9163,2011-10-13 01:06:40+00:00,General,2011-10-04 13:14:49.460000+00:00,2011-10-13 01:06:40.020000+00:00,Group 5,Resource05,2011-08-18 01:06:40.020000+00:00,task-38739,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-12 14:38:16.949000+00:00 +Internet,RIGHT_case-9163,2011-10-13 01:06:40+00:00,General,2011-10-04 13:14:49.460000+00:00,2011-10-13 01:06:40.020000+00:00,Group 5,Resource05,2011-08-18 01:06:40.020000+00:00,task-38742,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-12 14:40:16.909000+00:00 +Internet,RIGHT_case-9163,2011-10-13 01:06:40+00:00,General,2011-10-04 13:14:49.460000+00:00,2011-10-13 01:06:40.020000+00:00,Group 5,Resource05,2011-08-18 01:06:40.020000+00:00,task-38743,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-12 14:42:56.828000+00:00 +Internet,RIGHT_case-9165,2011-10-14 01:06:40+00:00,General,2011-10-05 08:55:57.593000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource06,2011-08-19 01:06:40.020000+00:00,task-41512,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-04 11:45:08.832000+00:00 +Internet,RIGHT_case-9165,2011-10-14 01:06:40+00:00,General,2011-10-05 08:55:57.593000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource06,2011-08-19 01:06:40.020000+00:00,task-41515,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-04 11:46:03.315000+00:00 +Internet,RIGHT_case-9165,2011-10-14 01:06:40+00:00,General,2011-10-05 08:55:57.593000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource06,2011-08-19 01:06:40.020000+00:00,task-41516,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-04 11:46:48.196000+00:00 +Internet,RIGHT_case-9172,2011-10-17 01:06:40+00:00,General,2011-09-22 09:53:49.581000+00:00,2011-10-17 01:06:40.020000+00:00,Group 5,Resource23,2011-08-22 01:06:40.020000+00:00,task-38577,T02 Check confirmation of receipt,complete,EMPTY,Resource23,2011-09-09 11:22:25.332000+00:00 +Internet,RIGHT_case-9172,2011-10-17 01:06:40+00:00,General,2011-09-22 09:53:49.581000+00:00,2011-10-17 01:06:40.020000+00:00,Group 5,Resource23,2011-08-22 01:06:40.020000+00:00,task-38580,T05 Print and send confirmation of receipt,complete,EMPTY,Resource23,2011-09-09 11:25:29.256000+00:00 +Internet,RIGHT_case-9172,2011-10-17 01:06:40+00:00,General,2011-09-22 09:53:49.581000+00:00,2011-10-17 01:06:40.020000+00:00,Group 5,Resource23,2011-08-22 01:06:40.020000+00:00,task-39216,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-09-16 11:08:47.403000+00:00 +Internet,RIGHT_case-9176,2011-10-17 15:58:34.116000+00:00,General,2011-10-04 14:08:14.324000+00:00,2011-10-17 15:58:34.116000+00:00,Group 5,Resource12,2011-08-22 16:00:29.157000+00:00,task-40250,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-26 08:54:48.783000+00:00 +Internet,RIGHT_case-9176,2011-10-17 15:58:34.116000+00:00,General,2011-10-04 14:08:14.324000+00:00,2011-10-17 15:58:34.116000+00:00,Group 5,Resource12,2011-08-22 16:00:29.157000+00:00,task-40253,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-26 08:55:53.936000+00:00 +Internet,RIGHT_case-9176,2011-10-17 15:58:34.116000+00:00,General,2011-10-04 14:08:14.324000+00:00,2011-10-17 15:58:34.116000+00:00,Group 5,Resource12,2011-08-22 16:00:29.157000+00:00,task-40254,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-26 08:56:46.026000+00:00 +Internet,RIGHT_case-9199,2011-09-13 01:06:40+00:00,General,2011-09-14 16:46:58.318000+00:00,2011-09-13 01:06:40.020000+00:00,Group 6,Resource29,2011-07-19 01:06:40.020000+00:00,task-38486,T02 Check confirmation of receipt,complete,EMPTY,Resource29,2011-09-08 12:39:34.966000+00:00 +Internet,RIGHT_case-9199,2011-09-13 01:06:40+00:00,General,2011-09-14 16:46:58.318000+00:00,2011-09-13 01:06:40.020000+00:00,Group 6,Resource29,2011-07-19 01:06:40.020000+00:00,task-38490,T05 Print and send confirmation of receipt,complete,EMPTY,Resource29,2011-09-08 12:41:58.362000+00:00 +Internet,RIGHT_case-9199,2011-09-13 01:06:40+00:00,General,2011-09-14 16:46:58.318000+00:00,2011-09-13 01:06:40.020000+00:00,Group 6,Resource29,2011-07-19 01:06:40.020000+00:00,task-38491,T10 Determine necessity to stop indication,complete,Group 1,Resource29,2011-09-08 12:43:41.881000+00:00 +Internet,RIGHT_case-9201,2011-09-19 01:06:40+00:00,General,2011-09-14 10:37:35.447000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource04,2011-07-25 01:06:40.020000+00:00,task-37353,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-29 11:34:55.747000+00:00 +Internet,RIGHT_case-9201,2011-09-19 01:06:40+00:00,General,2011-09-14 10:37:35.447000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource04,2011-07-25 01:06:40.020000+00:00,task-37356,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-29 11:35:37.780000+00:00 +Internet,RIGHT_case-9201,2011-09-19 01:06:40+00:00,General,2011-09-14 10:37:35.447000+00:00,2011-09-19 01:06:40.020000+00:00,Group 5,Resource04,2011-07-25 01:06:40.020000+00:00,task-37357,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-29 11:36:17.632000+00:00 +Internet,RIGHT_case-9203,2011-06-22 01:06:40+00:00,General,2011-09-01 07:23:15.377000+00:00,2011-06-22 01:06:40.020000+00:00,Group 8,Resource01,2011-04-27 01:06:40.020000+00:00,task-37679,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-08-31 13:23:32.332000+00:00 +Internet,RIGHT_case-9203,2011-06-22 01:06:40+00:00,General,2011-09-01 07:23:15.377000+00:00,2011-06-22 01:06:40.020000+00:00,Group 8,Resource01,2011-04-27 01:06:40.020000+00:00,task-37682,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-08-31 13:24:26.662000+00:00 +Internet,RIGHT_case-9203,2011-06-22 01:06:40+00:00,General,2011-09-01 07:23:15.377000+00:00,2011-06-22 01:06:40.020000+00:00,Group 8,Resource01,2011-04-27 01:06:40.020000+00:00,task-37685,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-08-31 13:26:57.195000+00:00 +Internet,RIGHT_case-9203,2011-06-22 01:06:40+00:00,General,2011-09-01 07:23:15.377000+00:00,2011-06-22 01:06:40.020000+00:00,Group 8,Resource01,2011-04-27 01:06:40.020000+00:00,task-37687,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-08-31 13:27:38.655000+00:00 +Internet,RIGHT_case-9203,2011-06-22 01:06:40+00:00,General,2011-09-01 07:23:15.377000+00:00,2011-06-22 01:06:40.020000+00:00,Group 8,Resource01,2011-04-27 01:06:40.020000+00:00,task-37688,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-08-31 13:29:58.415000+00:00 +Internet,RIGHT_case-9206,2011-07-11 01:06:40+00:00,General,,2011-07-11 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-42998,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-12 10:36:22.305000+00:00 +Internet,RIGHT_case-9206,2011-07-11 01:06:40+00:00,General,,2011-07-11 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-43001,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-12 10:36:56.930000+00:00 +Internet,RIGHT_case-9206,2011-07-11 01:06:40+00:00,General,,2011-07-11 01:06:40.020000+00:00,Group 5,Resource02,2011-05-16 01:06:40.020000+00:00,task-43016,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-12 11:18:52.128000+00:00 +Internet,RIGHT_case-9207,2011-07-14 01:06:40+00:00,General,2011-10-04 10:01:07.865000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-19 01:06:40.020000+00:00,task-40248,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-09-26 10:37:45.672000+00:00 +Internet,RIGHT_case-9207,2011-07-14 01:06:40+00:00,General,2011-10-04 10:01:07.865000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-19 01:06:40.020000+00:00,task-40326,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-26 10:54:42.925000+00:00 +Internet,RIGHT_case-9207,2011-07-14 01:06:40+00:00,General,2011-10-04 10:01:07.865000+00:00,2011-07-14 01:06:40.020000+00:00,Group 5,Resource12,2011-05-19 01:06:40.020000+00:00,task-40323,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-26 10:55:10.832000+00:00 +Internet,RIGHT_case-9209,2011-08-03 00:00:00+00:00,General,2012-01-17 13:28:28.475000+00:00,2011-08-03 00:00:00.020000+00:00,Group 5,Resource02,2011-06-08 01:06:40.020000+00:00,task-42948,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-12 08:02:01.980000+00:00 +Internet,RIGHT_case-9209,2011-08-03 00:00:00+00:00,General,2012-01-17 13:28:28.475000+00:00,2011-08-03 00:00:00.020000+00:00,Group 5,Resource02,2011-06-08 01:06:40.020000+00:00,task-42952,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-12 08:02:42.277000+00:00 +Internet,RIGHT_case-9209,2011-08-03 00:00:00+00:00,General,2012-01-17 13:28:28.475000+00:00,2011-08-03 00:00:00.020000+00:00,Group 5,Resource02,2011-06-08 01:06:40.020000+00:00,task-42953,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-12 08:06:07.907000+00:00 +Internet,RIGHT_case-9212,2011-08-19 01:06:40+00:00,General,2011-09-01 08:29:34.390000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37745,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-09-01 07:26:02.339000+00:00 +Internet,RIGHT_case-9212,2011-08-19 01:06:40+00:00,General,2011-09-01 08:29:34.390000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37749,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-09-01 07:26:54.380000+00:00 +Internet,RIGHT_case-9212,2011-08-19 01:06:40+00:00,General,2011-09-01 08:29:34.390000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37747,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-09-01 07:30:34.586000+00:00 +Internet,RIGHT_case-9213,2011-08-19 01:06:40+00:00,General,2011-09-01 09:17:15.452000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37780,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-09-01 08:41:50.295000+00:00 +Internet,RIGHT_case-9213,2011-08-19 01:06:40+00:00,General,2011-09-01 09:17:15.452000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37778,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-09-01 08:42:44.916000+00:00 +Internet,RIGHT_case-9213,2011-08-19 01:06:40+00:00,General,2011-09-01 09:17:15.452000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource01,2011-06-24 01:06:40.020000+00:00,task-37785,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-09-01 08:43:57.984000+00:00 +Internet,RIGHT_case-9218,2011-10-13 01:06:40+00:00,General,2011-09-12 14:20:29.359000+00:00,2011-10-13 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-38273,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 09:25:30.231000+00:00 +Internet,RIGHT_case-9218,2011-10-13 01:06:40+00:00,General,2011-09-12 14:20:29.359000+00:00,2011-10-13 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-38276,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 09:26:05.953000+00:00 +Internet,RIGHT_case-9218,2011-10-13 01:06:40+00:00,General,2011-09-12 14:20:29.359000+00:00,2011-10-13 01:06:40.020000+00:00,Group 8,Resource11,2011-07-07 01:06:40.020000+00:00,task-38277,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 09:26:40.271000+00:00 +Desk,RIGHT_case-9226,2011-08-30 01:06:40+00:00,General,2011-08-31 10:01:57.853000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-37442,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-30 09:39:30.164000+00:00 +Desk,RIGHT_case-9226,2011-08-30 01:06:40+00:00,General,2011-08-31 10:01:57.853000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-37447,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-30 09:40:13.564000+00:00 +Desk,RIGHT_case-9226,2011-08-30 01:06:40+00:00,General,2011-08-31 10:01:57.853000+00:00,2011-08-30 01:06:40.020000+00:00,Group 5,Resource06,2011-07-05 01:06:40.020000+00:00,task-37448,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-30 09:41:15.423000+00:00 +Internet,RIGHT_case-9228,2011-10-26 01:06:40+00:00,General,2011-10-05 13:01:08.242000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-37300,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-29 10:10:42.442000+00:00 +Internet,RIGHT_case-9228,2011-10-26 01:06:40+00:00,General,2011-10-05 13:01:08.242000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-37303,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-29 10:11:24.853000+00:00 +Internet,RIGHT_case-9228,2011-10-26 01:06:40+00:00,General,2011-10-05 13:01:08.242000+00:00,2011-10-26 01:06:40.020000+00:00,Group 5,Resource04,2011-07-21 01:06:40.020000+00:00,task-37304,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-29 10:12:03.155000+00:00 +Internet,RIGHT_case-9232,2011-09-16 01:06:40+00:00,General,2011-10-31 14:40:10.648000+00:00,2011-09-16 01:06:40.020000+00:00,,admin1,2011-07-22 01:06:40.020000+00:00,task-40699,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-09-28 10:33:13.324000+00:00 +Internet,RIGHT_case-9232,2011-09-16 01:06:40+00:00,General,2011-10-31 14:40:10.648000+00:00,2011-09-16 01:06:40.020000+00:00,,admin1,2011-07-22 01:06:40.020000+00:00,task-40702,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-09-28 10:34:08.740000+00:00 +Internet,RIGHT_case-9232,2011-09-16 01:06:40+00:00,General,2011-10-31 14:40:10.648000+00:00,2011-09-16 01:06:40.020000+00:00,,admin1,2011-07-22 01:06:40.020000+00:00,task-40703,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-09-28 10:35:22.341000+00:00 +Internet,RIGHT_case-9270,2011-10-18 01:06:40+00:00,General,2011-11-18 10:06:45.299000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource14,2011-08-23 01:06:40.020000+00:00,task-46444,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-11-14 10:17:17.530000+00:00 +Internet,RIGHT_case-9270,2011-10-18 01:06:40+00:00,General,2011-11-18 10:06:45.299000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource14,2011-08-23 01:06:40.020000+00:00,task-46447,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-11-14 10:18:18.595000+00:00 +Internet,RIGHT_case-9270,2011-10-18 01:06:40+00:00,General,2011-11-18 10:06:45.299000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource14,2011-08-23 01:06:40.020000+00:00,task-46449,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-11-14 10:19:06.315000+00:00 +Internet,RIGHT_case-9271,2011-10-24 00:00:00+00:00,General,2011-12-23 15:11:46.687000+00:00,2011-10-24 00:00:00.020000+00:00,,admin1,2011-08-29 10:05:57.665000+00:00,task-43484,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-10-17 15:08:56.575000+00:00 +Internet,RIGHT_case-9271,2011-10-24 00:00:00+00:00,General,2011-12-23 15:11:46.687000+00:00,2011-10-24 00:00:00.020000+00:00,,admin1,2011-08-29 10:05:57.665000+00:00,task-43487,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-17 15:11:09.434000+00:00 +Internet,RIGHT_case-9271,2011-10-24 00:00:00+00:00,General,2011-12-23 15:11:46.687000+00:00,2011-10-24 00:00:00.020000+00:00,,admin1,2011-08-29 10:05:57.665000+00:00,task-43488,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-10-17 15:19:10.864000+00:00 +Internet,RIGHT_case-9274,2011-10-20 01:06:40+00:00,General,2011-10-19 13:46:28.582000+00:00,2011-10-20 01:06:40.020000+00:00,Group 8,Resource01,2011-08-25 01:06:40.020000+00:00,task-38291,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 09:55:24.165000+00:00 +Internet,RIGHT_case-9274,2011-10-20 01:06:40+00:00,General,2011-10-19 13:46:28.582000+00:00,2011-10-20 01:06:40.020000+00:00,Group 8,Resource01,2011-08-25 01:06:40.020000+00:00,task-38294,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 09:56:13.804000+00:00 +Internet,RIGHT_case-9274,2011-10-20 01:06:40+00:00,General,2011-10-19 13:46:28.582000+00:00,2011-10-20 01:06:40.020000+00:00,Group 8,Resource01,2011-08-25 01:06:40.020000+00:00,task-38296,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 09:57:22.546000+00:00 +Internet,RIGHT_case-9277,2011-09-09 01:06:40+00:00,General,2011-10-06 15:04:16.609000+00:00,2011-09-09 01:06:40.020000+00:00,Group 5,Resource05,2011-07-15 01:06:40.020000+00:00,task-38089,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-06 14:55:02.214000+00:00 +Internet,RIGHT_case-9277,2011-09-09 01:06:40+00:00,General,2011-10-06 15:04:16.609000+00:00,2011-09-09 01:06:40.020000+00:00,Group 5,Resource05,2011-07-15 01:06:40.020000+00:00,task-38092,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-06 14:58:35.323000+00:00 +Internet,RIGHT_case-9277,2011-09-09 01:06:40+00:00,General,2011-10-06 15:04:16.609000+00:00,2011-09-09 01:06:40.020000+00:00,Group 5,Resource05,2011-07-15 01:06:40.020000+00:00,task-38093,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-06 14:59:18.711000+00:00 +Internet,RIGHT_case-9281,2011-10-24 13:56:40.490000+00:00,General,2011-09-09 00:00:00.020000+00:00,2011-10-24 13:56:40.490000+00:00,Group 8,Resource01,2011-08-29 13:56:40.490000+00:00,task-38514,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 13:11:14.746000+00:00 +Internet,RIGHT_case-9281,2011-10-24 13:56:40.490000+00:00,General,2011-09-09 00:00:00.020000+00:00,2011-10-24 13:56:40.490000+00:00,Group 8,Resource01,2011-08-29 13:56:40.490000+00:00,task-38565,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-09-09 14:20:45.907000+00:00 +Internet,RIGHT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37713,T02 Check confirmation of receipt,complete,Group 4,Resource28,2011-08-31 14:18:49.848000+00:00 +Internet,RIGHT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37815,T02 Check confirmation of receipt,complete,Group 4,Resource28,2011-09-01 09:18:30.530000+00:00 +Internet,RIGHT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-37819,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-09-05 12:47:38.003000+00:00 +Internet,RIGHT_case-9289,2011-09-22 01:06:40+00:00,General,2011-11-28 13:54:14.388000+00:00,2011-09-22 01:06:40.020000+00:00,Group 11,Resource28,2011-07-28 01:06:40.020000+00:00,task-38122,T10 Determine necessity to stop indication,complete,Group 1,Resource28,2011-09-06 15:41:24.377000+00:00 +Internet,RIGHT_case-9290,2011-10-12 01:06:40+00:00,General,,2011-10-12 01:06:40.020000+00:00,Group 5,Resource14,2011-08-17 01:06:40.020000+00:00,task-46940,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-11-17 09:05:55.615000+00:00 +Internet,RIGHT_case-9290,2011-10-12 01:06:40+00:00,General,,2011-10-12 01:06:40.020000+00:00,Group 5,Resource14,2011-08-17 01:06:40.020000+00:00,task-46943,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-11-17 09:06:34.207000+00:00 +Internet,RIGHT_case-9290,2011-10-12 01:06:40+00:00,General,,2011-10-12 01:06:40.020000+00:00,Group 5,Resource14,2011-08-17 01:06:40.020000+00:00,task-46944,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-11-17 09:07:20.758000+00:00 +Internet,RIGHT_case-9292,2011-11-24 01:06:40+00:00,General,2011-12-01 00:00:00.010000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource01,2011-08-18 01:06:40.020000+00:00,task-41027,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-30 13:41:56.250000+00:00 +Internet,RIGHT_case-9292,2011-11-24 01:06:40+00:00,General,2011-12-01 00:00:00.010000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource01,2011-08-18 01:06:40.020000+00:00,task-41030,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-30 13:44:46.846000+00:00 +Internet,RIGHT_case-9292,2011-11-24 01:06:40+00:00,General,2011-12-01 00:00:00.010000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource01,2011-08-18 01:06:40.020000+00:00,task-41031,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-30 13:46:09.118000+00:00 +Internet,RIGHT_case-9294,2011-11-24 01:06:40+00:00,General,2011-11-25 09:40:46.473000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource13,2011-08-18 01:06:40.020000+00:00,task-39220,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-09-16 11:23:27.590000+00:00 +Internet,RIGHT_case-9294,2011-11-24 01:06:40+00:00,General,2011-11-25 09:40:46.473000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource13,2011-08-18 01:06:40.020000+00:00,task-39234,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-09-16 11:33:57.383000+00:00 +Internet,RIGHT_case-9294,2011-11-24 01:06:40+00:00,General,2011-11-25 09:40:46.473000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource13,2011-08-18 01:06:40.020000+00:00,task-39236,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-09-16 11:35:59.052000+00:00 +Internet,RIGHT_case-9295,2011-10-24 01:06:40+00:00,General,2011-10-05 10:52:33.979000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource05,2011-08-29 01:06:40.020000+00:00,task-39028,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-15 11:25:06.002000+00:00 +Internet,RIGHT_case-9295,2011-10-24 01:06:40+00:00,General,2011-10-05 10:52:33.979000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource05,2011-08-29 01:06:40.020000+00:00,task-39031,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-15 11:29:28.871000+00:00 +Internet,RIGHT_case-9295,2011-10-24 01:06:40+00:00,General,2011-10-05 10:52:33.979000+00:00,2011-10-24 01:06:40.020000+00:00,Group 5,Resource05,2011-08-29 01:06:40.020000+00:00,task-39033,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-15 11:31:45.538000+00:00 +Internet,RIGHT_case-9331,2011-10-14 01:06:40+00:00,General,2011-10-03 12:01:25.051000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-37878,T02 Check confirmation of receipt,complete,EMPTY,Resource23,2011-09-01 13:57:02.601000+00:00 +Internet,RIGHT_case-9331,2011-10-14 01:06:40+00:00,General,2011-10-03 12:01:25.051000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-37881,T05 Print and send confirmation of receipt,complete,EMPTY,Resource23,2011-09-01 13:58:33.616000+00:00 +Internet,RIGHT_case-9331,2011-10-14 01:06:40+00:00,General,2011-10-03 12:01:25.051000+00:00,2011-10-14 01:06:40.020000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-37882,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-09-01 13:59:38.075000+00:00 +Internet,RIGHT_case-9336,2011-10-27 15:40:26.738000+00:00,General,2011-10-27 11:16:39.329000+00:00,2011-10-27 15:40:26.738000+00:00,Group 8,Resource11,2011-09-01 15:40:26.738000+00:00,task-38358,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 11:03:32.193000+00:00 +Internet,RIGHT_case-9336,2011-10-27 15:40:26.738000+00:00,General,2011-10-27 11:16:39.329000+00:00,2011-10-27 15:40:26.738000+00:00,Group 8,Resource11,2011-09-01 15:40:26.738000+00:00,task-38361,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 11:04:04.545000+00:00 +Internet,RIGHT_case-9336,2011-10-27 15:40:26.738000+00:00,General,2011-10-27 11:16:39.329000+00:00,2011-10-27 15:40:26.738000+00:00,Group 8,Resource11,2011-09-01 15:40:26.738000+00:00,task-38362,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 11:04:48.877000+00:00 +Internet,RIGHT_case-9337,2011-10-27 16:09:49.687000+00:00,General,2011-10-05 00:00:00.020000+00:00,2011-10-27 16:09:49.687000+00:00,Group 8,Resource11,2011-09-01 16:09:49.687000+00:00,task-38378,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 11:13:24.946000+00:00 +Internet,RIGHT_case-9337,2011-10-27 16:09:49.687000+00:00,General,2011-10-05 00:00:00.020000+00:00,2011-10-27 16:09:49.687000+00:00,Group 8,Resource11,2011-09-01 16:09:49.687000+00:00,task-38381,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 11:14:00.562000+00:00 +Internet,RIGHT_case-9337,2011-10-27 16:09:49.687000+00:00,General,2011-10-05 00:00:00.020000+00:00,2011-10-27 16:09:49.687000+00:00,Group 8,Resource11,2011-09-01 16:09:49.687000+00:00,task-38382,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 11:14:40.451000+00:00 +Internet,RIGHT_case-9366,2011-10-27 01:06:40+00:00,General,2011-10-05 13:14:11.328000+00:00,2011-10-27 01:06:40.020000+00:00,Group 5,Resource05,2011-09-01 01:06:40.020000+00:00,task-39162,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-15 18:47:58.746000+00:00 +Internet,RIGHT_case-9366,2011-10-27 01:06:40+00:00,General,2011-10-05 13:14:11.328000+00:00,2011-10-27 01:06:40.020000+00:00,Group 5,Resource05,2011-09-01 01:06:40.020000+00:00,task-39165,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-15 18:51:24.071000+00:00 +Internet,RIGHT_case-9366,2011-10-27 01:06:40+00:00,General,2011-10-05 13:14:11.328000+00:00,2011-10-27 01:06:40.020000+00:00,Group 5,Resource05,2011-09-01 01:06:40.020000+00:00,task-39166,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-15 18:52:11.727000+00:00 +Internet,RIGHT_case-9368,2011-10-27 01:06:40+00:00,General,2011-09-21 13:55:53.053000+00:00,2011-10-27 01:06:40.020000+00:00,Group 8,Resource11,2011-09-01 01:06:40.020000+00:00,task-38328,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 10:46:09.971000+00:00 +Internet,RIGHT_case-9368,2011-10-27 01:06:40+00:00,General,2011-09-21 13:55:53.053000+00:00,2011-10-27 01:06:40.020000+00:00,Group 8,Resource11,2011-09-01 01:06:40.020000+00:00,task-38331,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 10:47:04.683000+00:00 +Internet,RIGHT_case-9368,2011-10-27 01:06:40+00:00,General,2011-09-21 13:55:53.053000+00:00,2011-10-27 01:06:40.020000+00:00,Group 8,Resource11,2011-09-01 01:06:40.020000+00:00,task-38332,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 10:47:43.503000+00:00 +Internet,RIGHT_case-9370,2011-10-28 01:06:40+00:00,General,2011-09-20 12:13:30.037000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38401,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 11:22:18.607000+00:00 +Internet,RIGHT_case-9370,2011-10-28 01:06:40+00:00,General,2011-09-20 12:13:30.037000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38404,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 11:22:56.185000+00:00 +Internet,RIGHT_case-9370,2011-10-28 01:06:40+00:00,General,2011-09-20 12:13:30.037000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38406,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 11:23:41.594000+00:00 +Internet,RIGHT_case-9373,2011-10-28 01:06:40+00:00,General,2011-09-20 12:18:28.793000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38420,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 11:32:07.761000+00:00 +Internet,RIGHT_case-9373,2011-10-28 01:06:40+00:00,General,2011-09-20 12:18:28.793000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38423,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 11:32:46.834000+00:00 +Internet,RIGHT_case-9373,2011-10-28 01:06:40+00:00,General,2011-09-20 12:18:28.793000+00:00,2011-10-28 01:06:40.020000+00:00,Group 8,Resource11,2011-09-02 01:06:40.020000+00:00,task-38424,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 11:33:26.127000+00:00 +Internet,RIGHT_case-9376,2011-11-24 01:06:40+00:00,General,2011-11-25 09:21:24.447000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource04,2011-09-02 01:06:40.020000+00:00,task-38778,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-09-12 15:53:21.512000+00:00 +Internet,RIGHT_case-9376,2011-11-24 01:06:40+00:00,General,2011-11-25 09:21:24.447000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource04,2011-09-02 01:06:40.020000+00:00,task-38781,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-09-12 15:54:11.305000+00:00 +Internet,RIGHT_case-9376,2011-11-24 01:06:40+00:00,General,2011-11-25 09:21:24.447000+00:00,2011-11-24 01:06:40.010000+00:00,Group 5,Resource04,2011-09-02 01:06:40.020000+00:00,task-38782,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-09-12 15:54:52.193000+00:00 +Internet,RIGHT_case-9385,2011-10-31 01:06:40+00:00,General,2011-10-28 14:46:41.985000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-09-05 01:06:40.020000+00:00,task-43143,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-12 14:40:07.202000+00:00 +Internet,RIGHT_case-9385,2011-10-31 01:06:40+00:00,General,2011-10-28 14:46:41.985000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-09-05 01:06:40.020000+00:00,task-43146,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-12 14:40:59.913000+00:00 +Internet,RIGHT_case-9385,2011-10-31 01:06:40+00:00,General,2011-10-28 14:46:41.985000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource06,2011-09-05 01:06:40.020000+00:00,task-43147,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-12 14:44:40.449000+00:00 +Internet,RIGHT_case-9389,2011-10-31 01:06:40+00:00,General,2011-10-05 15:16:45.222000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource05,2011-09-05 01:06:40.020000+00:00,task-39400,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-19 10:17:32.195000+00:00 +Internet,RIGHT_case-9389,2011-10-31 01:06:40+00:00,General,2011-10-05 15:16:45.222000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource05,2011-09-05 01:06:40.020000+00:00,task-39404,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-19 10:19:07.754000+00:00 +Internet,RIGHT_case-9389,2011-10-31 01:06:40+00:00,General,2011-10-05 15:16:45.222000+00:00,2011-10-31 01:06:40.010000+00:00,Group 5,Resource05,2011-09-05 01:06:40.020000+00:00,task-39403,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-19 11:12:23.513000+00:00 +Internet,RIGHT_case-9394,2011-11-01 15:15:44.205000+00:00,General,2011-10-21 11:39:20.626000+00:00,2011-11-01 15:15:44.205000+00:00,Group 5,Resource02,2011-09-06 15:21:18.331000+00:00,task-40519,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-09-26 15:08:19.476000+00:00 +Internet,RIGHT_case-9394,2011-11-01 15:15:44.205000+00:00,General,2011-10-21 11:39:20.626000+00:00,2011-11-01 15:15:44.205000+00:00,Group 5,Resource02,2011-09-06 15:21:18.331000+00:00,task-40522,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-09-26 15:09:20.457000+00:00 +Internet,RIGHT_case-9394,2011-11-01 15:15:44.205000+00:00,General,2011-10-21 11:39:20.626000+00:00,2011-11-01 15:15:44.205000+00:00,Group 5,Resource02,2011-09-06 15:21:18.331000+00:00,task-40538,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-09-26 15:47:24.357000+00:00 +Internet,RIGHT_case-9395,2011-11-01 01:06:40+00:00,General,2011-09-23 10:18:23.947000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39481,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-19 14:52:23.816000+00:00 +Internet,RIGHT_case-9395,2011-11-01 01:06:40+00:00,General,2011-09-23 10:18:23.947000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39485,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-19 14:59:12.713000+00:00 +Internet,RIGHT_case-9395,2011-11-01 01:06:40+00:00,General,2011-09-23 10:18:23.947000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39772,T05 Print and send confirmation of receipt,complete,EMPTY,Resource10,2011-09-22 14:09:53.320000+00:00 +Internet,RIGHT_case-9395,2011-11-01 01:06:40+00:00,General,2011-09-23 10:18:23.947000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39771,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-09-23 10:12:10.134000+00:00 +Internet,RIGHT_case-9395,2011-11-01 01:06:40+00:00,General,2011-09-23 10:18:23.947000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-40039,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-09-23 10:18:23.789000+00:00 +Internet,RIGHT_case-9407,2011-11-01 01:06:40+00:00,General,2011-09-26 09:12:19.969000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39495,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-19 16:41:01.252000+00:00 +Internet,RIGHT_case-9407,2011-11-01 01:06:40+00:00,General,2011-09-26 09:12:19.969000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-39498,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-19 16:42:42.075000+00:00 +Internet,RIGHT_case-9407,2011-11-01 01:06:40+00:00,General,2011-09-26 09:12:19.969000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-40236,T05 Print and send confirmation of receipt,complete,EMPTY,Resource03,2011-09-26 08:58:37.903000+00:00 +Internet,RIGHT_case-9407,2011-11-01 01:06:40+00:00,General,2011-09-26 09:12:19.969000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-40258,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-09-26 09:11:43.179000+00:00 +Internet,RIGHT_case-9407,2011-11-01 01:06:40+00:00,General,2011-09-26 09:12:19.969000+00:00,2011-11-01 01:06:40.010000+00:00,Group 8,Resource01,2011-09-06 01:06:40.020000+00:00,task-40260,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-09-26 09:12:19.803000+00:00 +Internet,RIGHT_case-9408,2011-11-01 01:06:40+00:00,General,2011-11-18 10:13:52.690000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource14,2011-09-06 01:06:40.020000+00:00,task-42669,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-10-11 08:26:31.599000+00:00 +Internet,RIGHT_case-9408,2011-11-01 01:06:40+00:00,General,2011-11-18 10:13:52.690000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource14,2011-09-06 01:06:40.020000+00:00,task-42672,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-10-11 08:27:18.566000+00:00 +Internet,RIGHT_case-9408,2011-11-01 01:06:40+00:00,General,2011-11-18 10:13:52.690000+00:00,2011-11-01 01:06:40.010000+00:00,Group 5,Resource14,2011-09-06 01:06:40.020000+00:00,task-42673,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-10-11 08:28:08.662000+00:00 +Internet,RIGHT_case-9410,2011-10-28 01:06:40+00:00,General,2011-10-17 13:02:05.819000+00:00,2011-10-28 01:06:40.020000+00:00,Group 5,Resource02,2011-09-02 01:06:40.020000+00:00,task-41905,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-06 08:04:49.716000+00:00 +Internet,RIGHT_case-9410,2011-10-28 01:06:40+00:00,General,2011-10-17 13:02:05.819000+00:00,2011-10-28 01:06:40.020000+00:00,Group 5,Resource02,2011-09-02 01:06:40.020000+00:00,task-41908,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-06 08:05:26.560000+00:00 +Internet,RIGHT_case-9410,2011-10-28 01:06:40+00:00,General,2011-10-17 13:02:05.819000+00:00,2011-10-28 01:06:40.020000+00:00,Group 5,Resource02,2011-09-02 01:06:40.020000+00:00,task-41909,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-06 08:06:28.334000+00:00 +Internet,RIGHT_case-9411,2011-11-02 11:21:02.567000+00:00,General,2011-10-05 15:34:43.763000+00:00,2011-11-02 11:21:02.567000+00:00,Group 5,Resource02,2011-09-07 11:21:02.567000+00:00,task-40339,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-09-26 11:09:55.369000+00:00 +Internet,RIGHT_case-9411,2011-11-02 11:21:02.567000+00:00,General,2011-10-05 15:34:43.763000+00:00,2011-11-02 11:21:02.567000+00:00,Group 5,Resource02,2011-09-07 11:21:02.567000+00:00,task-40343,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-09-26 11:10:45.973000+00:00 +Internet,RIGHT_case-9411,2011-11-02 11:21:02.567000+00:00,General,2011-10-05 15:34:43.763000+00:00,2011-11-02 11:21:02.567000+00:00,Group 5,Resource02,2011-09-07 11:21:02.567000+00:00,task-40344,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-09-26 11:11:24.472000+00:00 +Internet,RIGHT_case-9413,2011-11-02 13:02:36.975000+00:00,General,2011-09-21 14:00:25.191000+00:00,2011-11-02 13:02:36.975000+00:00,Group 8,Resource11,2011-09-07 13:02:36.975000+00:00,task-39145,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-15 16:00:53.237000+00:00 +Internet,RIGHT_case-9413,2011-11-02 13:02:36.975000+00:00,General,2011-09-21 14:00:25.191000+00:00,2011-11-02 13:02:36.975000+00:00,Group 8,Resource11,2011-09-07 13:02:36.975000+00:00,task-39148,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-15 16:01:29.147000+00:00 +Internet,RIGHT_case-9413,2011-11-02 13:02:36.975000+00:00,General,2011-09-21 14:00:25.191000+00:00,2011-11-02 13:02:36.975000+00:00,Group 8,Resource11,2011-09-07 13:02:36.975000+00:00,task-39149,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-15 16:02:25.238000+00:00 +Internet,RIGHT_case-9414,2011-11-02 13:34:52.554000+00:00,General,2011-09-26 14:31:54.627000+00:00,2011-11-02 13:34:52.554000+00:00,Group 8,Resource11,2011-09-07 13:34:52.554000+00:00,task-39610,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-20 15:37:56.509000+00:00 +Internet,RIGHT_case-9414,2011-11-02 13:34:52.554000+00:00,General,2011-09-26 14:31:54.627000+00:00,2011-11-02 13:34:52.554000+00:00,Group 8,Resource11,2011-09-07 13:34:52.554000+00:00,task-39616,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-20 15:41:22.576000+00:00 +Internet,RIGHT_case-9414,2011-11-02 13:34:52.554000+00:00,General,2011-09-26 14:31:54.627000+00:00,2011-11-02 13:34:52.554000+00:00,Group 8,Resource11,2011-09-07 13:34:52.554000+00:00,task-39796,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 14:05:39.819000+00:00 +Internet,RIGHT_case-9415,2011-11-02 14:23:25.265000+00:00,General,2011-09-21 14:06:20.661000+00:00,2011-11-02 14:23:25.265000+00:00,Group 8,Resource11,2011-09-07 14:23:25.265000+00:00,task-39186,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-09-16 09:49:28.526000+00:00 +Internet,RIGHT_case-9415,2011-11-02 14:23:25.265000+00:00,General,2011-09-21 14:06:20.661000+00:00,2011-11-02 14:23:25.265000+00:00,Group 8,Resource11,2011-09-07 14:23:25.265000+00:00,task-39189,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-09-16 09:50:32.429000+00:00 +Internet,RIGHT_case-9415,2011-11-02 14:23:25.265000+00:00,General,2011-09-21 14:06:20.661000+00:00,2011-11-02 14:23:25.265000+00:00,Group 8,Resource11,2011-09-07 14:23:25.265000+00:00,task-39190,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-09-16 09:51:48.227000+00:00 +Internet,RIGHT_case-9417,2011-11-02 01:06:40+00:00,General,2011-09-29 11:50:24.416000+00:00,2011-11-02 01:06:40.010000+00:00,Group 8,Resource11,2011-09-07 01:06:40.020000+00:00,task-39096,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-15 13:20:33.100000+00:00 +Internet,RIGHT_case-9417,2011-11-02 01:06:40+00:00,General,2011-09-29 11:50:24.416000+00:00,2011-11-02 01:06:40.010000+00:00,Group 8,Resource11,2011-09-07 01:06:40.020000+00:00,task-39099,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-15 13:21:21.468000+00:00 +Internet,RIGHT_case-9417,2011-11-02 01:06:40+00:00,General,2011-09-29 11:50:24.416000+00:00,2011-11-02 01:06:40.010000+00:00,Group 8,Resource11,2011-09-07 01:06:40.020000+00:00,task-39100,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-15 13:22:40.144000+00:00 +Internet,RIGHT_case-9424,2011-12-14 00:00:00+00:00,General,2012-01-17 14:10:50.857000+00:00,2011-12-14 00:00:00.010000+00:00,Group 5,Resource04,2011-09-07 01:06:40.020000+00:00,task-38784,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-09-12 16:05:31.356000+00:00 +Internet,RIGHT_case-9424,2011-12-14 00:00:00+00:00,General,2012-01-17 14:10:50.857000+00:00,2011-12-14 00:00:00.010000+00:00,Group 5,Resource04,2011-09-07 01:06:40.020000+00:00,task-38787,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-09-12 16:06:12.194000+00:00 +Internet,RIGHT_case-9424,2011-12-14 00:00:00+00:00,General,2012-01-17 14:10:50.857000+00:00,2011-12-14 00:00:00.010000+00:00,Group 5,Resource04,2011-09-07 01:06:40.020000+00:00,task-38788,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-09-12 16:09:56.491000+00:00 +Internet,RIGHT_case-9430,2011-11-03 10:26:54.251000+00:00,General,2011-10-10 14:55:18.420000+00:00,2011-11-03 10:26:54.251000+00:00,Group 8,Resource11,2011-09-08 10:26:54.251000+00:00,task-39720,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-21 10:39:24.631000+00:00 +Internet,RIGHT_case-9430,2011-11-03 10:26:54.251000+00:00,General,2011-10-10 14:55:18.420000+00:00,2011-11-03 10:26:54.251000+00:00,Group 8,Resource11,2011-09-08 10:26:54.251000+00:00,task-39723,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 10:40:09.526000+00:00 +Internet,RIGHT_case-9430,2011-11-03 10:26:54.251000+00:00,General,2011-10-10 14:55:18.420000+00:00,2011-11-03 10:26:54.251000+00:00,Group 8,Resource11,2011-09-08 10:26:54.251000+00:00,task-39725,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-21 10:43:04.793000+00:00 +Internet,RIGHT_case-9438,2011-11-03 00:00:00+00:00,General,,2011-11-03 00:00:00.010000+00:00,Group 5,Resource14,2011-09-08 01:06:40.020000+00:00,task-43965,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-10-20 11:45:29.869000+00:00 +Internet,RIGHT_case-9438,2011-11-03 00:00:00+00:00,General,,2011-11-03 00:00:00.010000+00:00,Group 5,Resource14,2011-09-08 01:06:40.020000+00:00,task-43968,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-10-20 11:46:11.361000+00:00 +Internet,RIGHT_case-9438,2011-11-03 00:00:00+00:00,General,,2011-11-03 00:00:00.010000+00:00,Group 5,Resource14,2011-09-08 01:06:40.020000+00:00,task-43970,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-10-20 11:46:59.658000+00:00 +Internet,RIGHT_case-9442,2011-11-03 01:06:40+00:00,General,2011-09-29 13:28:52.704000+00:00,2011-11-03 01:06:40.010000+00:00,Group 8,Resource11,2011-09-08 01:06:40.020000+00:00,task-39644,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-20 16:21:19.538000+00:00 +Internet,RIGHT_case-9442,2011-11-03 01:06:40+00:00,General,2011-09-29 13:28:52.704000+00:00,2011-11-03 01:06:40.010000+00:00,Group 8,Resource11,2011-09-08 01:06:40.020000+00:00,task-39685,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-21 09:53:36.673000+00:00 +Internet,RIGHT_case-9442,2011-11-03 01:06:40+00:00,General,2011-09-29 13:28:52.704000+00:00,2011-11-03 01:06:40.010000+00:00,Group 8,Resource11,2011-09-08 01:06:40.020000+00:00,task-39712,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 10:32:06.937000+00:00 +Internet,RIGHT_case-9443,2011-11-03 15:51:10.593000+00:00,General,2011-09-26 14:43:51.468000+00:00,2011-11-03 15:51:10.593000+00:00,Group 8,Resource11,2011-09-08 15:51:10.592000+00:00,task-39748,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-21 11:28:20.134000+00:00 +Internet,RIGHT_case-9443,2011-11-03 15:51:10.593000+00:00,General,2011-09-26 14:43:51.468000+00:00,2011-11-03 15:51:10.593000+00:00,Group 8,Resource11,2011-09-08 15:51:10.592000+00:00,task-39751,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 11:28:59.194000+00:00 +Internet,RIGHT_case-9443,2011-11-03 15:51:10.593000+00:00,General,2011-09-26 14:43:51.468000+00:00,2011-11-03 15:51:10.593000+00:00,Group 8,Resource11,2011-09-08 15:51:10.592000+00:00,task-39752,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-21 11:29:44.657000+00:00 +Desk,RIGHT_case-9487,2011-11-04 01:06:40+00:00,General,2011-10-24 14:28:59.828000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource13,2011-09-09 01:06:40.020000+00:00,task-39671,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-09-21 09:42:57.765000+00:00 +Desk,RIGHT_case-9487,2011-11-04 01:06:40+00:00,General,2011-10-24 14:28:59.828000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource13,2011-09-09 01:06:40.020000+00:00,task-39674,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-09-21 09:43:56.281000+00:00 +Desk,RIGHT_case-9487,2011-11-04 01:06:40+00:00,General,2011-10-24 14:28:59.828000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource13,2011-09-09 01:06:40.020000+00:00,task-39675,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-09-21 09:44:37.402000+00:00 +Internet,RIGHT_case-9494,2011-11-06 01:06:40+00:00,General,2011-09-29 13:34:49.834000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-39836,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-21 15:28:08.253000+00:00 +Internet,RIGHT_case-9494,2011-11-06 01:06:40+00:00,General,2011-09-29 13:34:49.834000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-39839,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 15:28:40.152000+00:00 +Internet,RIGHT_case-9494,2011-11-06 01:06:40+00:00,General,2011-09-29 13:34:49.834000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-39840,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-21 15:29:16.344000+00:00 +Internet,RIGHT_case-9495,2011-11-06 01:06:40+00:00,General,2011-11-07 11:24:35.404000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-39892,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-22 08:58:03.254000+00:00 +Internet,RIGHT_case-9495,2011-11-06 01:06:40+00:00,General,2011-11-07 11:24:35.404000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-39895,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-22 08:58:37.223000+00:00 +Internet,RIGHT_case-9495,2011-11-06 01:06:40+00:00,General,2011-11-07 11:24:35.404000+00:00,2011-11-06 01:06:40.010000+00:00,Group 8,Resource11,2011-09-11 01:06:40.020000+00:00,task-39896,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-22 08:59:46.578000+00:00 +Internet,RIGHT_case-9528,2011-11-07 01:06:40+00:00,General,2011-10-06 14:30:49.004000+00:00,2011-11-07 01:06:40.010000+00:00,Group 5,Resource05,2011-09-12 01:06:40.020000+00:00,task-39427,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-19 12:25:08.244000+00:00 +Internet,RIGHT_case-9528,2011-11-07 01:06:40+00:00,General,2011-10-06 14:30:49.004000+00:00,2011-11-07 01:06:40.010000+00:00,Group 5,Resource05,2011-09-12 01:06:40.020000+00:00,task-39432,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-19 12:36:03.258000+00:00 +Internet,RIGHT_case-9528,2011-11-07 01:06:40+00:00,General,2011-10-06 14:30:49.004000+00:00,2011-11-07 01:06:40.010000+00:00,Group 5,Resource05,2011-09-12 01:06:40.020000+00:00,task-39450,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-19 12:54:11.407000+00:00 +Internet,RIGHT_case-9532,2011-11-08 01:06:40+00:00,General,2011-10-25 14:14:37.632000+00:00,2011-11-08 01:06:40.010000+00:00,Group 6,Resource37,2011-09-13 01:06:40.020000+00:00,task-44353,T02 Check confirmation of receipt,complete,Group 4,Resource25,2011-10-25 09:12:58.682000+00:00 +Internet,RIGHT_case-9532,2011-11-08 01:06:40+00:00,General,2011-10-25 14:14:37.632000+00:00,2011-11-08 01:06:40.010000+00:00,Group 6,Resource37,2011-09-13 01:06:40.020000+00:00,task-44356,T05 Print and send confirmation of receipt,complete,Group 2,Resource25,2011-10-25 09:13:40.512000+00:00 +Internet,RIGHT_case-9532,2011-11-08 01:06:40+00:00,General,2011-10-25 14:14:37.632000+00:00,2011-11-08 01:06:40.010000+00:00,Group 6,Resource37,2011-09-13 01:06:40.020000+00:00,task-44360,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2011-10-25 09:16:20.683000+00:00 +Internet,RIGHT_case-9542,2011-11-08 00:00:00+00:00,General,,2011-11-08 00:00:00.010000+00:00,Group 5,Resource09,2011-09-13 13:53:46.937000+00:00,task-52064,T02 Check confirmation of receipt,complete,Group 4,Resource09,2012-01-12 11:31:14.791000+00:00 +Internet,RIGHT_case-9542,2011-11-08 00:00:00+00:00,General,,2011-11-08 00:00:00.010000+00:00,Group 5,Resource09,2011-09-13 13:53:46.937000+00:00,task-52067,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2012-01-12 11:32:43.621000+00:00 +Internet,RIGHT_case-9542,2011-11-08 00:00:00+00:00,General,,2011-11-08 00:00:00.010000+00:00,Group 5,Resource09,2011-09-13 13:53:46.937000+00:00,task-52068,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2012-01-12 11:34:28.299000+00:00 +Internet,RIGHT_case-9543,2011-11-04 01:06:40+00:00,General,2011-09-29 11:58:55.050000+00:00,2011-11-04 01:06:40.010000+00:00,Group 8,Resource11,2011-09-09 01:06:40.020000+00:00,task-39812,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-21 14:45:33.595000+00:00 +Internet,RIGHT_case-9543,2011-11-04 01:06:40+00:00,General,2011-09-29 11:58:55.050000+00:00,2011-11-04 01:06:40.010000+00:00,Group 8,Resource11,2011-09-09 01:06:40.020000+00:00,task-39815,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 14:46:07.270000+00:00 +Internet,RIGHT_case-9543,2011-11-04 01:06:40+00:00,General,2011-09-29 11:58:55.050000+00:00,2011-11-04 01:06:40.010000+00:00,Group 8,Resource11,2011-09-09 01:06:40.020000+00:00,task-39816,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-21 14:46:47.481000+00:00 +Internet,RIGHT_case-9544,2011-11-08 14:29:44.135000+00:00,General,2011-09-29 13:44:39.420000+00:00,2011-11-08 14:29:44.135000+00:00,Group 8,Resource11,2011-09-13 14:29:44.135000+00:00,task-39857,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-21 15:58:56.316000+00:00 +Internet,RIGHT_case-9544,2011-11-08 14:29:44.135000+00:00,General,2011-09-29 13:44:39.420000+00:00,2011-11-08 14:29:44.135000+00:00,Group 8,Resource11,2011-09-13 14:29:44.135000+00:00,task-39860,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 15:59:47.332000+00:00 +Internet,RIGHT_case-9544,2011-11-08 14:29:44.135000+00:00,General,2011-09-29 13:44:39.420000+00:00,2011-11-08 14:29:44.135000+00:00,Group 8,Resource11,2011-09-13 14:29:44.135000+00:00,task-39861,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-21 16:00:22.573000+00:00 +Internet,RIGHT_case-9545,2011-11-08 01:06:40+00:00,General,2011-10-10 11:38:23.529000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-39613,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-20 15:39:40.796000+00:00 +Internet,RIGHT_case-9545,2011-11-08 01:06:40+00:00,General,2011-10-10 11:38:23.529000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-39617,T05 Print and send confirmation of receipt,complete,EMPTY,Resource05,2011-09-20 15:41:14.444000+00:00 +Internet,RIGHT_case-9545,2011-11-08 01:06:40+00:00,General,2011-10-10 11:38:23.529000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-39620,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-20 15:43:21.369000+00:00 +Internet,RIGHT_case-9554,2011-11-08 01:06:40+00:00,General,2011-11-01 09:46:40.220000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-40584,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-27 10:19:52.003000+00:00 +Internet,RIGHT_case-9554,2011-11-08 01:06:40+00:00,General,2011-11-01 09:46:40.220000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-40587,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-27 10:20:43.516000+00:00 +Internet,RIGHT_case-9554,2011-11-08 01:06:40+00:00,General,2011-11-01 09:46:40.220000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-40589,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-27 10:21:39.019000+00:00 +Internet,RIGHT_case-9554,2011-11-08 01:06:40+00:00,General,2011-11-01 09:46:40.220000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-40591,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-09-27 10:32:41.531000+00:00 +Internet,RIGHT_case-9554,2011-11-08 01:06:40+00:00,General,2011-11-01 09:46:40.220000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource05,2011-09-13 01:06:40.020000+00:00,task-40600,T20 Print report Y to stop indication,complete,Group 2,Resource05,2011-09-27 10:34:36.894000+00:00 +Internet,RIGHT_case-9557,2011-12-21 01:06:40+00:00,General,2011-12-12 15:51:22.111000+00:00,2011-12-21 01:06:40.010000+00:00,Group 5,Resource02,2011-09-14 01:06:40.020000+00:00,task-40308,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-09-26 10:26:09.166000+00:00 +Internet,RIGHT_case-9557,2011-12-21 01:06:40+00:00,General,2011-12-12 15:51:22.111000+00:00,2011-12-21 01:06:40.010000+00:00,Group 5,Resource02,2011-09-14 01:06:40.020000+00:00,task-40311,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-09-26 10:26:46.089000+00:00 +Internet,RIGHT_case-9557,2011-12-21 01:06:40+00:00,General,2011-12-12 15:51:22.111000+00:00,2011-12-21 01:06:40.010000+00:00,Group 5,Resource02,2011-09-14 01:06:40.020000+00:00,task-43478,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-17 14:57:32.825000+00:00 +Internet,RIGHT_case-9562,2011-11-08 01:06:40+00:00,General,2011-10-06 09:07:47.705000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource12,2011-09-13 01:06:40.020000+00:00,task-39975,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-22 14:41:10.376000+00:00 +Internet,RIGHT_case-9562,2011-11-08 01:06:40+00:00,General,2011-10-06 09:07:47.705000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource12,2011-09-13 01:06:40.020000+00:00,task-39979,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-22 14:44:35.466000+00:00 +Internet,RIGHT_case-9562,2011-11-08 01:06:40+00:00,General,2011-10-06 09:07:47.705000+00:00,2011-11-08 01:06:40.010000+00:00,Group 5,Resource12,2011-09-13 01:06:40.020000+00:00,task-39980,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-22 14:53:20.110000+00:00 +Internet,RIGHT_case-9563,2011-10-28 01:06:40+00:00,General,2011-09-20 12:06:47.797000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-38974,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-15 08:50:42.484000+00:00 +Internet,RIGHT_case-9563,2011-10-28 01:06:40+00:00,General,2011-09-20 12:06:47.797000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-38977,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-15 08:51:16.804000+00:00 +Internet,RIGHT_case-9563,2011-10-28 01:06:40+00:00,General,2011-09-20 12:06:47.797000+00:00,2011-09-16 01:06:40.020000+00:00,Group 8,Resource11,2011-07-22 01:06:40.020000+00:00,task-38978,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-15 08:51:52.305000+00:00 +Internet,RIGHT_case-9574,2011-11-09 01:06:40+00:00,General,2011-09-27 14:48:52.484000+00:00,2011-11-09 01:06:40.010000+00:00,Group 8,Resource01,2011-09-14 01:06:40.020000+00:00,task-40491,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-26 14:40:59.042000+00:00 +Internet,RIGHT_case-9574,2011-11-09 01:06:40+00:00,General,2011-09-27 14:48:52.484000+00:00,2011-11-09 01:06:40.010000+00:00,Group 8,Resource01,2011-09-14 01:06:40.020000+00:00,task-40507,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-26 14:46:34.333000+00:00 +Internet,RIGHT_case-9574,2011-11-09 01:06:40+00:00,General,2011-09-27 14:48:52.484000+00:00,2011-11-09 01:06:40.010000+00:00,Group 8,Resource01,2011-09-14 01:06:40.020000+00:00,task-40652,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-27 14:44:05.636000+00:00 +Internet,RIGHT_case-9574,2011-11-09 01:06:40+00:00,General,2011-09-27 14:48:52.484000+00:00,2011-11-09 01:06:40.010000+00:00,Group 8,Resource01,2011-09-14 01:06:40.020000+00:00,task-40673,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-09-27 14:48:13.801000+00:00 +Internet,RIGHT_case-9574,2011-11-09 01:06:40+00:00,General,2011-09-27 14:48:52.484000+00:00,2011-11-09 01:06:40.010000+00:00,Group 8,Resource01,2011-09-14 01:06:40.020000+00:00,task-40675,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-09-27 14:48:52.322000+00:00 +Internet,RIGHT_case-9623,2011-11-10 01:06:40+00:00,General,2011-11-01 12:19:15.572000+00:00,2011-11-10 01:06:40.010000+00:00,Group 8,Resource11,2011-09-15 01:06:40.020000+00:00,task-41042,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-30 14:05:48.982000+00:00 +Internet,RIGHT_case-9623,2011-11-10 01:06:40+00:00,General,2011-11-01 12:19:15.572000+00:00,2011-11-10 01:06:40.010000+00:00,Group 8,Resource11,2011-09-15 01:06:40.020000+00:00,task-41045,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-30 14:06:21.892000+00:00 +Internet,RIGHT_case-9623,2011-11-10 01:06:40+00:00,General,2011-11-01 12:19:15.572000+00:00,2011-11-10 01:06:40.010000+00:00,Group 8,Resource11,2011-09-15 01:06:40.020000+00:00,task-41046,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-30 14:07:15.921000+00:00 +e-mail,RIGHT_case-9624,2011-11-14 08:53:11.527000+00:00,General,2011-10-06 10:00:38.440000+00:00,2011-11-14 08:53:11.527000+00:00,,admin1,2011-09-19 08:53:11.527000+00:00,task-39436,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-09-19 12:37:47.508000+00:00 +e-mail,RIGHT_case-9624,2011-11-14 08:53:11.527000+00:00,General,2011-10-06 10:00:38.440000+00:00,2011-11-14 08:53:11.527000+00:00,,admin1,2011-09-19 08:53:11.527000+00:00,task-39434,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-09-19 12:45:54.885000+00:00 +e-mail,RIGHT_case-9624,2011-11-14 08:53:11.527000+00:00,General,2011-10-06 10:00:38.440000+00:00,2011-11-14 08:53:11.527000+00:00,,admin1,2011-09-19 08:53:11.527000+00:00,task-39447,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-09-19 12:55:12.077000+00:00 +Internet,RIGHT_case-9626,2011-12-23 01:06:40+00:00,General,2011-12-19 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource23,2011-09-16 01:06:40.020000+00:00,task-40446,T02 Check confirmation of receipt,complete,EMPTY,Resource23,2011-09-26 13:25:36.704000+00:00 +Internet,RIGHT_case-9626,2011-12-23 01:06:40+00:00,General,2011-12-19 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource23,2011-09-16 01:06:40.020000+00:00,task-40449,T05 Print and send confirmation of receipt,complete,EMPTY,Resource23,2011-09-26 13:26:53.086000+00:00 +Internet,RIGHT_case-9626,2011-12-23 01:06:40+00:00,General,2011-12-19 00:00:00.010000+00:00,2011-12-23 01:06:40.010000+00:00,Group 5,Resource23,2011-09-16 01:06:40.020000+00:00,task-40450,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-09-26 13:27:41.106000+00:00 +Internet,RIGHT_case-9628,2011-11-14 11:28:43.636000+00:00,General,2011-11-16 10:04:26.017000+00:00,2011-11-14 11:28:43.636000+00:00,Group 5,Resource04,2011-09-19 11:28:43.636000+00:00,task-40576,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-09-27 09:47:16.447000+00:00 +Internet,RIGHT_case-9628,2011-11-14 11:28:43.636000+00:00,General,2011-11-16 10:04:26.017000+00:00,2011-11-14 11:28:43.636000+00:00,Group 5,Resource04,2011-09-19 11:28:43.636000+00:00,task-40583,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-09-27 10:23:36.635000+00:00 +Internet,RIGHT_case-9628,2011-11-14 11:28:43.636000+00:00,General,2011-11-16 10:04:26.017000+00:00,2011-11-14 11:28:43.636000+00:00,Group 5,Resource04,2011-09-19 11:28:43.636000+00:00,task-40593,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-09-27 10:24:14.974000+00:00 +Internet,RIGHT_case-9631,2011-11-13 01:06:40+00:00,General,2011-10-10 15:07:48.586000+00:00,2011-11-13 01:06:40.010000+00:00,Group 8,Resource11,2011-09-18 01:06:40.020000+00:00,task-40513,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-26 14:58:01.365000+00:00 +Internet,RIGHT_case-9631,2011-11-13 01:06:40+00:00,General,2011-10-10 15:07:48.586000+00:00,2011-11-13 01:06:40.010000+00:00,Group 8,Resource11,2011-09-18 01:06:40.020000+00:00,task-40516,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-26 15:02:01.058000+00:00 +Internet,RIGHT_case-9631,2011-11-13 01:06:40+00:00,General,2011-10-10 15:07:48.586000+00:00,2011-11-13 01:06:40.010000+00:00,Group 8,Resource11,2011-09-18 01:06:40.020000+00:00,task-40517,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-26 15:02:58.002000+00:00 +Internet,RIGHT_case-9631,2011-11-13 01:06:40+00:00,General,2011-10-10 15:07:48.586000+00:00,2011-11-13 01:06:40.010000+00:00,Group 8,Resource11,2011-09-18 01:06:40.020000+00:00,task-40839,T17 Check report Y to stop indication,complete,Group 4,Resource01,2011-09-29 13:52:16.377000+00:00 +Internet,RIGHT_case-9631,2011-11-13 01:06:40+00:00,General,2011-10-10 15:07:48.586000+00:00,2011-11-13 01:06:40.010000+00:00,Group 8,Resource11,2011-09-18 01:06:40.020000+00:00,task-40841,T20 Print report Y to stop indication,complete,Group 2,Resource01,2011-09-29 13:52:52.419000+00:00 +Internet,RIGHT_case-9633,2011-11-14 01:06:40+00:00,General,2011-11-16 09:56:19.555000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41110,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 15:50:07.853000+00:00 +Internet,RIGHT_case-9633,2011-11-14 01:06:40+00:00,General,2011-11-16 09:56:19.555000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41119,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 15:51:27.023000+00:00 +Internet,RIGHT_case-9633,2011-11-14 01:06:40+00:00,General,2011-11-16 09:56:19.555000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41879,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-10-05 21:39:15.432000+00:00 +Internet,RIGHT_case-9635,2011-11-09 01:06:40+00:00,General,,2011-11-09 01:06:40.010000+00:00,Group 6,Resource33,2011-09-14 01:06:40.020000+00:00,task-41267,T10 Determine necessity to stop indication,complete,Group 1,Resource33,2011-10-03 14:55:18.139000+00:00 +Internet,RIGHT_case-9635,2011-11-09 01:06:40+00:00,General,,2011-11-09 01:06:40.010000+00:00,Group 6,Resource33,2011-09-14 01:06:40.020000+00:00,task-41264,T02 Check confirmation of receipt,complete,EMPTY,Resource38,2011-10-03 16:28:10.185000+00:00 +Internet,RIGHT_case-9635,2011-11-09 01:06:40+00:00,General,,2011-11-09 01:06:40.010000+00:00,Group 6,Resource33,2011-09-14 01:06:40.020000+00:00,task-41313,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-10-05 10:36:24.653000+00:00 +Internet,RIGHT_case-9639,2011-11-14 01:06:40+00:00,General,2011-10-20 13:47:55.996000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-09-19 01:06:40.020000+00:00,task-43326,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-14 10:11:21.875000+00:00 +Internet,RIGHT_case-9639,2011-11-14 01:06:40+00:00,General,2011-10-20 13:47:55.996000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-09-19 01:06:40.020000+00:00,task-43329,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-14 10:12:01.701000+00:00 +Internet,RIGHT_case-9639,2011-11-14 01:06:40+00:00,General,2011-10-20 13:47:55.996000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource06,2011-09-19 01:06:40.020000+00:00,task-43330,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-14 10:12:38.431000+00:00 +Internet,RIGHT_case-9652,2011-11-14 01:06:40+00:00,General,2011-10-11 07:57:35.374000+00:00,2011-11-14 01:06:40.010000+00:00,Group 8,Resource11,2011-09-19 01:06:40.020000+00:00,task-40304,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-26 10:16:45.151000+00:00 +Internet,RIGHT_case-9652,2011-11-14 01:06:40+00:00,General,2011-10-11 07:57:35.374000+00:00,2011-11-14 01:06:40.010000+00:00,Group 8,Resource11,2011-09-19 01:06:40.020000+00:00,task-40307,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-26 10:17:18.252000+00:00 +Internet,RIGHT_case-9652,2011-11-14 01:06:40+00:00,General,2011-10-11 07:57:35.374000+00:00,2011-11-14 01:06:40.010000+00:00,Group 8,Resource11,2011-09-19 01:06:40.020000+00:00,task-40313,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-26 10:37:32.645000+00:00 +Internet,RIGHT_case-9653,2011-11-15 01:06:40+00:00,General,2011-11-07 07:57:09.029000+00:00,2011-11-15 01:06:40.010000+00:00,Group 8,Resource11,2011-09-20 01:06:40.020000+00:00,task-42843,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 11:08:46.300000+00:00 +Internet,RIGHT_case-9653,2011-11-15 01:06:40+00:00,General,2011-11-07 07:57:09.029000+00:00,2011-11-15 01:06:40.010000+00:00,Group 8,Resource11,2011-09-20 01:06:40.020000+00:00,task-42846,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 11:09:33.266000+00:00 +Internet,RIGHT_case-9653,2011-11-15 01:06:40+00:00,General,2011-11-07 07:57:09.029000+00:00,2011-11-15 01:06:40.010000+00:00,Group 8,Resource11,2011-09-20 01:06:40.020000+00:00,task-42847,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-11 11:10:15.529000+00:00 +Internet,RIGHT_case-9670,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,,Resource50,2011-09-15 01:06:40.020000+00:00,task-40242,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-09-26 08:41:46.980000+00:00 +Internet,RIGHT_case-9670,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,,Resource50,2011-09-15 01:06:40.020000+00:00,task-40245,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-09-26 08:42:20.954000+00:00 +Internet,RIGHT_case-9670,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,,Resource50,2011-09-15 01:06:40.020000+00:00,task-41152,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-09-30 16:33:02.196000+00:00 +Internet,RIGHT_case-9697,2011-11-14 01:06:40+00:00,General,2011-10-24 13:18:28.237000+00:00,2011-11-14 01:06:40.010000+00:00,,admin1,2011-09-19 01:06:40.020000+00:00,task-43340,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-10-14 10:21:25.662000+00:00 +Internet,RIGHT_case-9697,2011-11-14 01:06:40+00:00,General,2011-10-24 13:18:28.237000+00:00,2011-11-14 01:06:40.010000+00:00,,admin1,2011-09-19 01:06:40.020000+00:00,task-43343,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-14 10:23:15.205000+00:00 +Internet,RIGHT_case-9697,2011-11-14 01:06:40+00:00,General,2011-10-24 13:18:28.237000+00:00,2011-11-14 01:06:40.010000+00:00,,admin1,2011-09-19 01:06:40.020000+00:00,task-43357,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-10-14 10:59:40.337000+00:00 +Internet,RIGHT_case-9700,2011-11-03 01:06:40+00:00,General,2011-10-24 14:29:49.295000+00:00,2011-11-03 01:06:40.010000+00:00,Group 5,Resource04,2011-07-28 01:06:40.020000+00:00,task-40025,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-09-23 10:02:37.118000+00:00 +Internet,RIGHT_case-9700,2011-11-03 01:06:40+00:00,General,2011-10-24 14:29:49.295000+00:00,2011-11-03 01:06:40.010000+00:00,Group 5,Resource04,2011-07-28 01:06:40.020000+00:00,task-40030,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-09-23 10:03:18.256000+00:00 +Internet,RIGHT_case-9700,2011-11-03 01:06:40+00:00,General,2011-10-24 14:29:49.295000+00:00,2011-11-03 01:06:40.010000+00:00,Group 5,Resource04,2011-07-28 01:06:40.020000+00:00,task-40031,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-09-23 10:03:55.500000+00:00 +Internet,RIGHT_case-9701,2011-11-16 01:06:40+00:00,General,2011-09-29 13:56:04.146000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40272,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-26 09:21:25.598000+00:00 +Internet,RIGHT_case-9701,2011-11-16 01:06:40+00:00,General,2011-09-29 13:56:04.146000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40278,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-26 09:22:43.633000+00:00 +Internet,RIGHT_case-9701,2011-11-16 01:06:40+00:00,General,2011-09-29 13:56:04.146000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40275,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-26 09:29:39.585000+00:00 +Internet,RIGHT_case-9710,2011-11-17 01:06:40+00:00,General,2011-10-11 08:30:07.381000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40172,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-23 15:02:11.230000+00:00 +Internet,RIGHT_case-9710,2011-11-17 01:06:40+00:00,General,2011-10-11 08:30:07.381000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40175,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-23 15:02:48.496000+00:00 +Internet,RIGHT_case-9710,2011-11-17 01:06:40+00:00,General,2011-10-11 08:30:07.381000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40176,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-23 15:03:28.537000+00:00 +Internet,RIGHT_case-9711,2011-11-16 01:06:40+00:00,General,2011-10-11 08:03:06.258000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40965,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-30 10:43:55.482000+00:00 +Internet,RIGHT_case-9711,2011-11-16 01:06:40+00:00,General,2011-10-11 08:03:06.258000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40968,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-30 10:44:27.948000+00:00 +Internet,RIGHT_case-9711,2011-11-16 01:06:40+00:00,General,2011-10-11 08:03:06.258000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40969,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-30 10:45:09.772000+00:00 +Internet,RIGHT_case-9721,2011-11-16 01:06:40+00:00,General,2011-10-04 09:10:22.547000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource01,2011-09-21 01:06:40.020000+00:00,task-40985,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-30 11:04:01.293000+00:00 +Internet,RIGHT_case-9721,2011-11-16 01:06:40+00:00,General,2011-10-04 09:10:22.547000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource01,2011-09-21 01:06:40.020000+00:00,task-41293,T05 Print and send confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 09:07:12.540000+00:00 +Internet,RIGHT_case-9721,2011-11-16 01:06:40+00:00,General,2011-10-04 09:10:22.547000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource01,2011-09-21 01:06:40.020000+00:00,task-41351,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-04 09:09:16.085000+00:00 +Internet,RIGHT_case-9721,2011-11-16 01:06:40+00:00,General,2011-10-04 09:10:22.547000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource01,2011-09-21 01:06:40.020000+00:00,task-41354,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-10-04 09:09:50.197000+00:00 +Internet,RIGHT_case-9721,2011-11-16 01:06:40+00:00,General,2011-10-04 09:10:22.547000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource01,2011-09-21 01:06:40.020000+00:00,task-41356,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-10-04 09:10:22.384000+00:00 +Internet,RIGHT_case-9722,2011-11-16 01:06:40+00:00,General,2011-10-21 11:58:15.716000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40993,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-09-30 11:22:24.654000+00:00 +Internet,RIGHT_case-9722,2011-11-16 01:06:40+00:00,General,2011-10-21 11:58:15.716000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40991,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-09-30 11:23:08.115000+00:00 +Internet,RIGHT_case-9722,2011-11-16 01:06:40+00:00,General,2011-10-21 11:58:15.716000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40996,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-09-30 11:24:09.654000+00:00 +Internet,RIGHT_case-9725,2011-11-16 01:06:40+00:00,General,2011-10-11 08:08:42.352000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40897,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-09-30 08:32:56.218000+00:00 +Internet,RIGHT_case-9725,2011-11-16 01:06:40+00:00,General,2011-10-11 08:08:42.352000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40901,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-09-30 08:35:14.378000+00:00 +Internet,RIGHT_case-9725,2011-11-16 01:06:40+00:00,General,2011-10-11 08:08:42.352000+00:00,2011-11-16 01:06:40.010000+00:00,Group 8,Resource11,2011-09-21 01:06:40.020000+00:00,task-40900,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-09-30 08:36:11.726000+00:00 +Internet,RIGHT_case-9727,2011-11-17 01:06:40+00:00,General,2011-10-11 08:37:46.803000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40939,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-09-30 09:59:09.961000+00:00 +Internet,RIGHT_case-9727,2011-11-17 01:06:40+00:00,General,2011-10-11 08:37:46.803000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40942,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-09-30 10:00:00.618000+00:00 +Internet,RIGHT_case-9727,2011-11-17 01:06:40+00:00,General,2011-10-11 08:37:46.803000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-40943,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-09-30 10:00:59.534000+00:00 +Internet,RIGHT_case-9746,2011-11-17 01:06:40+00:00,General,2011-10-04 09:15:07.546000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource01,2011-09-22 01:06:40.020000+00:00,task-41195,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-03 10:18:57.330000+00:00 +Internet,RIGHT_case-9746,2011-11-17 01:06:40+00:00,General,2011-10-04 09:15:07.546000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource01,2011-09-22 01:06:40.020000+00:00,task-41357,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-04 09:13:14.094000+00:00 +Internet,RIGHT_case-9746,2011-11-17 01:06:40+00:00,General,2011-10-04 09:15:07.546000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource01,2011-09-22 01:06:40.020000+00:00,task-41358,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-04 09:13:59.373000+00:00 +Internet,RIGHT_case-9746,2011-11-17 01:06:40+00:00,General,2011-10-04 09:15:07.546000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource01,2011-09-22 01:06:40.020000+00:00,task-41360,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-10-04 09:14:33.525000+00:00 +Internet,RIGHT_case-9746,2011-11-17 01:06:40+00:00,General,2011-10-04 09:15:07.546000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource01,2011-09-22 01:06:40.020000+00:00,task-41363,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-10-04 09:15:07.376000+00:00 +Internet,RIGHT_case-9747,2013-01-03 00:00:00+00:00,General,,2013-01-03 00:00:00.010000+00:00,Group 5,Resource22,2011-09-22 01:06:40.020000+00:00,task-42438,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-10-10 12:51:21.259000+00:00 +Internet,RIGHT_case-9747,2013-01-03 00:00:00+00:00,General,,2013-01-03 00:00:00.010000+00:00,Group 5,Resource22,2011-09-22 01:06:40.020000+00:00,task-42441,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-10-10 12:52:26.007000+00:00 +Internet,RIGHT_case-9747,2013-01-03 00:00:00+00:00,General,,2013-01-03 00:00:00.010000+00:00,Group 5,Resource22,2011-09-22 01:06:40.020000+00:00,task-42442,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-10-10 13:00:47.078000+00:00 +Internet,RIGHT_case-9748,2011-11-17 01:06:40+00:00,General,2011-10-26 11:02:42.995000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41097,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-30 15:42:40.812000+00:00 +Internet,RIGHT_case-9748,2011-11-17 01:06:40+00:00,General,2011-10-26 11:02:42.995000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41100,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-30 15:46:24.649000+00:00 +Internet,RIGHT_case-9748,2011-11-17 01:06:40+00:00,General,2011-10-26 11:02:42.995000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41101,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-30 15:47:03.157000+00:00 +Internet,RIGHT_case-9749,2011-11-17 01:06:40+00:00,General,2011-10-11 10:08:25.252000+00:00,2011-11-17 01:06:40.010000+00:00,Group 5,Resource05,2011-09-22 01:06:40.020000+00:00,task-42025,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-10-06 17:42:39.522000+00:00 +Internet,RIGHT_case-9749,2011-11-17 01:06:40+00:00,General,2011-10-11 10:08:25.252000+00:00,2011-11-17 01:06:40.010000+00:00,Group 5,Resource05,2011-09-22 01:06:40.020000+00:00,task-42029,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-10-06 17:43:39.268000+00:00 +Internet,RIGHT_case-9749,2011-11-17 01:06:40+00:00,General,2011-10-11 10:08:25.252000+00:00,2011-11-17 01:06:40.010000+00:00,Group 5,Resource05,2011-09-22 01:06:40.020000+00:00,task-42028,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-10-06 17:44:15.120000+00:00 +Internet,RIGHT_case-9751,2011-11-17 01:06:40+00:00,General,2011-10-26 09:52:00.253000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41130,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-30 16:08:02.816000+00:00 +Internet,RIGHT_case-9751,2011-11-17 01:06:40+00:00,General,2011-10-26 09:52:00.253000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41133,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-30 16:08:35.867000+00:00 +Internet,RIGHT_case-9751,2011-11-17 01:06:40+00:00,General,2011-10-26 09:52:00.253000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41134,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-30 16:09:27.763000+00:00 +Internet,RIGHT_case-9752,2011-10-18 01:06:40+00:00,General,2011-10-17 13:52:49.040000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-40797,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-09-29 11:58:42.158000+00:00 +Internet,RIGHT_case-9752,2011-10-18 01:06:40+00:00,General,2011-10-17 13:52:49.040000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-40801,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-09-29 11:59:45.692000+00:00 +Internet,RIGHT_case-9752,2011-10-18 01:06:40+00:00,General,2011-10-17 13:52:49.040000+00:00,2011-10-18 01:06:40.020000+00:00,Group 5,Resource02,2011-07-12 01:06:40.020000+00:00,task-40802,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-09-29 12:01:49.251000+00:00 +Internet,RIGHT_case-9753,2011-11-17 01:06:40+00:00,General,2011-10-11 09:01:04.653000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41172,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-03 09:09:49.069000+00:00 +Internet,RIGHT_case-9753,2011-11-17 01:06:40+00:00,General,2011-10-11 09:01:04.653000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41175,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-03 09:10:42.990000+00:00 +Internet,RIGHT_case-9753,2011-11-17 01:06:40+00:00,General,2011-10-11 09:01:04.653000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41176,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-03 09:12:25.979000+00:00 +Internet,RIGHT_case-9754,2011-11-17 01:06:40+00:00,General,2011-10-21 12:45:22.019000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41331,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-04 08:44:28.376000+00:00 +Internet,RIGHT_case-9754,2011-11-17 01:06:40+00:00,General,2011-10-21 12:45:22.019000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41334,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-04 08:45:19.542000+00:00 +Internet,RIGHT_case-9754,2011-11-17 01:06:40+00:00,General,2011-10-21 12:45:22.019000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41335,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-04 08:46:56.941000+00:00 +Internet,RIGHT_case-9756,2011-11-17 01:06:40+00:00,General,2011-10-21 12:53:05.599000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41374,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-04 09:38:19.264000+00:00 +Internet,RIGHT_case-9756,2011-11-17 01:06:40+00:00,General,2011-10-21 12:53:05.599000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41378,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-04 09:38:54.020000+00:00 +Internet,RIGHT_case-9756,2011-11-17 01:06:40+00:00,General,2011-10-21 12:53:05.599000+00:00,2011-11-17 01:06:40.010000+00:00,Group 8,Resource11,2011-09-22 01:06:40.020000+00:00,task-41382,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-04 09:39:33.883000+00:00 +Internet,RIGHT_case-9758,2011-11-18 01:06:40+00:00,General,2011-10-21 13:05:18.728000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-41417,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-04 10:12:17.422000+00:00 +Internet,RIGHT_case-9758,2011-11-18 01:06:40+00:00,General,2011-10-21 13:05:18.728000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-41422,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-04 10:12:48.483000+00:00 +Internet,RIGHT_case-9758,2011-11-18 01:06:40+00:00,General,2011-10-21 13:05:18.728000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-41423,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-04 10:13:19.239000+00:00 +Internet,RIGHT_case-9759,2011-11-18 01:06:40+00:00,General,,2011-11-18 01:06:40.010000+00:00,Group 5,Resource04,2011-09-23 01:06:40.020000+00:00,task-42395,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-10-10 11:41:52.387000+00:00 +Internet,RIGHT_case-9759,2011-11-18 01:06:40+00:00,General,,2011-11-18 01:06:40.010000+00:00,Group 5,Resource04,2011-09-23 01:06:40.020000+00:00,task-42398,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-10-10 11:42:26.515000+00:00 +Internet,RIGHT_case-9759,2011-11-18 01:06:40+00:00,General,,2011-11-18 01:06:40.010000+00:00,Group 5,Resource04,2011-09-23 01:06:40.020000+00:00,task-42486,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-10-10 14:34:52.577000+00:00 +Internet,RIGHT_case-9762,2011-11-18 01:06:40+00:00,General,2011-10-21 13:14:40.192000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-41453,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-04 10:29:58.416000+00:00 +Internet,RIGHT_case-9762,2011-11-18 01:06:40+00:00,General,2011-10-21 13:14:40.192000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-41450,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-04 10:30:18.249000+00:00 +Internet,RIGHT_case-9762,2011-11-18 01:06:40+00:00,General,2011-10-21 13:14:40.192000+00:00,2011-11-18 01:06:40.010000+00:00,Group 8,Resource11,2011-09-23 01:06:40.020000+00:00,task-41458,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-04 10:35:00.969000+00:00 +Internet,RIGHT_case-9765,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,Group 5,Resource09,2011-09-15 01:06:40.020000+00:00,task-45993,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-11-09 12:31:58.143000+00:00 +Internet,RIGHT_case-9765,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,Group 5,Resource09,2011-09-15 01:06:40.020000+00:00,task-45991,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-11-09 12:32:52.795000+00:00 +Internet,RIGHT_case-9765,2011-11-10 01:06:40+00:00,General,,2011-11-10 01:06:40.010000+00:00,Group 5,Resource09,2011-09-15 01:06:40.020000+00:00,task-45996,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-11-09 12:33:36.705000+00:00 +Internet,RIGHT_case-9767,2011-11-14 01:06:40+00:00,General,2011-10-06 10:26:46.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41062,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 14:30:50.395000+00:00 +Internet,RIGHT_case-9767,2011-11-14 01:06:40+00:00,General,2011-10-06 10:26:46.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41065,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 14:31:52.484000+00:00 +Internet,RIGHT_case-9767,2011-11-14 01:06:40+00:00,General,2011-10-06 10:26:46.035000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41066,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-09-30 14:32:38.695000+00:00 +Internet,RIGHT_case-9776,2011-11-14 01:06:40+00:00,General,2011-10-05 10:53:29.744000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource05,2011-09-19 01:06:40.020000+00:00,task-41548,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-10-04 13:57:31.604000+00:00 +Internet,RIGHT_case-9776,2011-11-14 01:06:40+00:00,General,2011-10-05 10:53:29.744000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource05,2011-09-19 01:06:40.020000+00:00,task-41550,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-10-04 13:58:24.283000+00:00 +Internet,RIGHT_case-9776,2011-11-14 01:06:40+00:00,General,2011-10-05 10:53:29.744000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource05,2011-09-19 01:06:40.020000+00:00,task-41552,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-10-04 13:58:46.503000+00:00 +Internet,RIGHT_case-9776,2011-11-14 01:06:40+00:00,General,2011-10-05 10:53:29.744000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource05,2011-09-19 01:06:40.020000+00:00,task-41598,T12 Check document X request unlicensed,complete,Group 4,Resource05,2011-10-04 15:31:44.797000+00:00 +Internet,RIGHT_case-9776,2011-11-14 01:06:40+00:00,General,2011-10-05 10:53:29.744000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource05,2011-09-19 01:06:40.020000+00:00,task-41600,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-10-05 10:53:29.581000+00:00 +Internet,RIGHT_case-9777,2011-11-14 01:06:40+00:00,General,,2011-11-14 01:06:40.010000+00:00,Group 5,Resource04,2011-09-19 01:06:40.020000+00:00,task-41961,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-10-06 13:40:43.718000+00:00 +Internet,RIGHT_case-9777,2011-11-14 01:06:40+00:00,General,,2011-11-14 01:06:40.010000+00:00,Group 5,Resource04,2011-09-19 01:06:40.020000+00:00,task-41964,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-10-06 13:41:19.987000+00:00 +Internet,RIGHT_case-9777,2011-11-14 01:06:40+00:00,General,,2011-11-14 01:06:40.010000+00:00,Group 5,Resource04,2011-09-19 01:06:40.020000+00:00,task-41965,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-10-06 13:41:55.830000+00:00 +Internet,RIGHT_case-9778,2011-11-14 01:06:40+00:00,General,2011-10-10 12:20:07.940000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41844,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-10-05 20:26:54.931000+00:00 +Internet,RIGHT_case-9778,2011-11-14 01:06:40+00:00,General,2011-10-10 12:20:07.940000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41847,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-10-05 20:28:22.796000+00:00 +Internet,RIGHT_case-9778,2011-11-14 01:06:40+00:00,General,2011-10-10 12:20:07.940000+00:00,2011-11-14 01:06:40.010000+00:00,Group 5,Resource13,2011-09-19 01:06:40.020000+00:00,task-41848,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-10-05 20:29:15.740000+00:00 +Internet,RIGHT_case-9782,2011-11-15 01:06:40+00:00,General,2011-10-10 12:36:44.702000+00:00,2011-11-15 01:06:40.010000+00:00,Group 5,Resource05,2011-09-20 01:06:40.020000+00:00,task-41988,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-10-06 15:04:15.140000+00:00 +Internet,RIGHT_case-9782,2011-11-15 01:06:40+00:00,General,2011-10-10 12:36:44.702000+00:00,2011-11-15 01:06:40.010000+00:00,Group 5,Resource05,2011-09-20 01:06:40.020000+00:00,task-41991,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-10-06 15:45:07.072000+00:00 +Internet,RIGHT_case-9782,2011-11-15 01:06:40+00:00,General,2011-10-10 12:36:44.702000+00:00,2011-11-15 01:06:40.010000+00:00,Group 5,Resource05,2011-09-20 01:06:40.020000+00:00,task-41992,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-10-06 15:45:42.237000+00:00 +Internet,RIGHT_case-9786,2011-11-22 15:41:20.390000+00:00,General,2011-10-26 11:31:48.362000+00:00,2011-11-22 15:41:20.390000+00:00,Group 8,Resource11,2011-09-27 15:41:20.390000+00:00,task-41370,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-04 09:37:08.661000+00:00 +Internet,RIGHT_case-9786,2011-11-22 15:41:20.390000+00:00,General,2011-10-26 11:31:48.362000+00:00,2011-11-22 15:41:20.390000+00:00,Group 8,Resource11,2011-09-27 15:41:20.390000+00:00,task-41373,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-04 09:37:56.947000+00:00 +Internet,RIGHT_case-9786,2011-11-22 15:41:20.390000+00:00,General,2011-10-26 11:31:48.362000+00:00,2011-11-22 15:41:20.390000+00:00,Group 8,Resource11,2011-09-27 15:41:20.390000+00:00,task-41377,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-04 09:38:49.394000+00:00 +Internet,RIGHT_case-9791,2011-11-22 01:06:40+00:00,General,2011-10-05 15:08:13.591000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41494,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-04 10:57:19.621000+00:00 +Internet,RIGHT_case-9791,2011-11-22 01:06:40+00:00,General,2011-10-05 15:08:13.591000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41750,T05 Print and send confirmation of receipt,complete,EMPTY,Resource03,2011-10-05 15:06:38.330000+00:00 +Internet,RIGHT_case-9791,2011-11-22 01:06:40+00:00,General,2011-10-05 15:08:13.591000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41787,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-05 15:07:14.153000+00:00 +Internet,RIGHT_case-9791,2011-11-22 01:06:40+00:00,General,2011-10-05 15:08:13.591000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41789,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-10-05 15:07:44.418000+00:00 +Internet,RIGHT_case-9791,2011-11-22 01:06:40+00:00,General,2011-10-05 15:08:13.591000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41792,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-10-05 15:08:13.420000+00:00 +Internet,RIGHT_case-9793,2011-11-22 01:06:40+00:00,General,2011-10-05 15:10:19.252000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41505,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-04 11:27:01.407000+00:00 +Internet,RIGHT_case-9793,2011-11-22 01:06:40+00:00,General,2011-10-05 15:10:19.252000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41751,T05 Print and send confirmation of receipt,complete,EMPTY,Resource03,2011-10-05 15:08:39.793000+00:00 +Internet,RIGHT_case-9793,2011-11-22 01:06:40+00:00,General,2011-10-05 15:10:19.252000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41793,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-05 15:09:17.340000+00:00 +Internet,RIGHT_case-9793,2011-11-22 01:06:40+00:00,General,2011-10-05 15:10:19.252000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41796,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-10-05 15:09:47.347000+00:00 +Internet,RIGHT_case-9793,2011-11-22 01:06:40+00:00,General,2011-10-05 15:10:19.252000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource01,2011-09-27 01:06:40.020000+00:00,task-41798,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-10-05 15:10:19.089000+00:00 +Internet,RIGHT_case-9794,2011-11-22 01:06:40+00:00,General,2011-10-11 14:38:37.510000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource05,2011-09-27 01:06:40.020000+00:00,task-42314,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-10-10 09:52:44.561000+00:00 +Internet,RIGHT_case-9794,2011-11-22 01:06:40+00:00,General,2011-10-11 14:38:37.510000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource05,2011-09-27 01:06:40.020000+00:00,task-42317,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-10-10 09:53:54.198000+00:00 +Internet,RIGHT_case-9794,2011-11-22 01:06:40+00:00,General,2011-10-11 14:38:37.510000+00:00,2011-11-22 01:06:40.010000+00:00,Group 5,Resource05,2011-09-27 01:06:40.020000+00:00,task-42318,T05 Print and send confirmation of receipt,complete,EMPTY,Resource05,2011-10-10 09:54:32.900000+00:00 +Internet,RIGHT_case-9796,2011-11-22 01:06:40+00:00,General,2011-10-26 11:19:51.767000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource11,2011-09-27 01:06:40.020000+00:00,task-41419,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-04 10:49:03.666000+00:00 +Internet,RIGHT_case-9796,2011-11-22 01:06:40+00:00,General,2011-10-26 11:19:51.767000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource11,2011-09-27 01:06:40.020000+00:00,task-41474,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-04 10:49:48.580000+00:00 +Internet,RIGHT_case-9796,2011-11-22 01:06:40+00:00,General,2011-10-26 11:19:51.767000+00:00,2011-11-22 01:06:40.010000+00:00,Group 8,Resource11,2011-09-27 01:06:40.020000+00:00,task-41475,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-04 10:50:44.667000+00:00 +Internet,RIGHT_case-9804,2011-08-19 01:06:40+00:00,General,2011-10-10 14:48:03.366000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource11,2011-06-24 01:06:40.020000+00:00,task-41329,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2011-10-05 07:49:01.184000+00:00 +Internet,RIGHT_case-9804,2011-08-19 01:06:40+00:00,General,2011-10-10 14:48:03.366000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource11,2011-06-24 01:06:40.020000+00:00,task-41621,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2011-10-05 07:52:16.526000+00:00 +Internet,RIGHT_case-9804,2011-08-19 01:06:40+00:00,General,2011-10-10 14:48:03.366000+00:00,2011-08-19 01:06:40.020000+00:00,Group 8,Resource11,2011-06-24 01:06:40.020000+00:00,task-41619,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-10-05 07:52:52.344000+00:00 +Internet,RIGHT_case-9823,2011-10-26 01:06:40+00:00,General,2011-10-26 09:46:21.997000+00:00,2011-10-26 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-43295,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-10-13 17:57:26.894000+00:00 +Internet,RIGHT_case-9823,2011-10-26 01:06:40+00:00,General,2011-10-26 09:46:21.997000+00:00,2011-10-26 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-43297,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-10-13 17:57:46.535000+00:00 +Internet,RIGHT_case-9823,2011-10-26 01:06:40+00:00,General,2011-10-26 09:46:21.997000+00:00,2011-10-26 01:06:40.020000+00:00,Group 8,Resource01,2011-07-13 01:06:40.020000+00:00,task-43300,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-10-13 17:58:34.636000+00:00 +Internet,RIGHT_case-9839,2011-11-25 01:06:40+00:00,General,2011-10-27 12:08:55.838000+00:00,2011-11-25 01:06:40.010000+00:00,Group 8,Resource11,2011-09-30 01:06:40.020000+00:00,task-41671,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-05 10:47:53.279000+00:00 +Internet,RIGHT_case-9839,2011-11-25 01:06:40+00:00,General,2011-10-27 12:08:55.838000+00:00,2011-11-25 01:06:40.010000+00:00,Group 8,Resource11,2011-09-30 01:06:40.020000+00:00,task-41676,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-05 10:48:46.355000+00:00 +Internet,RIGHT_case-9839,2011-11-25 01:06:40+00:00,General,2011-10-27 12:08:55.838000+00:00,2011-11-25 01:06:40.010000+00:00,Group 8,Resource11,2011-09-30 01:06:40.020000+00:00,task-41679,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-05 10:49:51.324000+00:00 +Internet,RIGHT_case-9860,2011-11-22 00:00:00+00:00,General,2012-01-18 10:43:56.634000+00:00,2011-11-22 00:00:00.010000+00:00,Group 5,Resource14,2011-09-27 01:06:40.020000+00:00,task-43262,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-10-13 15:16:20.578000+00:00 +Internet,RIGHT_case-9860,2011-11-22 00:00:00+00:00,General,2012-01-18 10:43:56.634000+00:00,2011-11-22 00:00:00.010000+00:00,Group 5,Resource14,2011-09-27 01:06:40.020000+00:00,task-43267,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-10-13 15:17:02.372000+00:00 +Internet,RIGHT_case-9860,2011-11-22 00:00:00+00:00,General,2012-01-18 10:43:56.634000+00:00,2011-11-22 00:00:00.010000+00:00,Group 5,Resource14,2011-09-27 01:06:40.020000+00:00,task-43275,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-11-24 11:41:40.227000+00:00 +Internet,RIGHT_case-9870,2011-11-04 01:06:40+00:00,General,2011-10-31 15:58:24.653000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-41226,T02 Check confirmation of receipt,complete,EMPTY,Resource23,2011-10-03 12:27:55.320000+00:00 +Internet,RIGHT_case-9870,2011-11-04 01:06:40+00:00,General,2011-10-31 15:58:24.653000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-41229,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-10-03 12:29:44.815000+00:00 +Internet,RIGHT_case-9870,2011-11-04 01:06:40+00:00,General,2011-10-31 15:58:24.653000+00:00,2011-11-04 01:06:40.010000+00:00,Group 5,Resource23,2011-07-08 01:06:40.020000+00:00,task-41230,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-10-03 12:32:36.095000+00:00 +Internet,RIGHT_case-9883,2012-01-10 00:00:00+00:00,General,2012-01-09 16:47:20.282000+00:00,2011-11-29 00:00:00.010000+00:00,Group 5,Resource09,2011-10-04 01:06:40.020000+00:00,task-47857,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-11-24 14:05:55.077000+00:00 +Internet,RIGHT_case-9883,2012-01-10 00:00:00+00:00,General,2012-01-09 16:47:20.282000+00:00,2011-11-29 00:00:00.010000+00:00,Group 5,Resource09,2011-10-04 01:06:40.020000+00:00,task-47861,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-11-24 14:07:33.305000+00:00 +Internet,RIGHT_case-9883,2012-01-10 00:00:00+00:00,General,2012-01-09 16:47:20.282000+00:00,2011-11-29 00:00:00.010000+00:00,Group 5,Resource09,2011-10-04 01:06:40.020000+00:00,task-47862,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-11-24 14:08:57.511000+00:00 +Internet,RIGHT_case-9884,2011-11-29 09:06:52.777000+00:00,General,2011-10-27 12:18:43.686000+00:00,2011-11-29 09:06:52.777000+00:00,Group 8,Resource11,2011-10-04 09:06:52.777000+00:00,task-42336,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 10:21:44.804000+00:00 +Internet,RIGHT_case-9884,2011-11-29 09:06:52.777000+00:00,General,2011-10-27 12:18:43.686000+00:00,2011-11-29 09:06:52.777000+00:00,Group 8,Resource11,2011-10-04 09:06:52.777000+00:00,task-42340,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 10:22:18.846000+00:00 +Internet,RIGHT_case-9884,2011-11-29 09:06:52.777000+00:00,General,2011-10-27 12:18:43.686000+00:00,2011-11-29 09:06:52.777000+00:00,Group 8,Resource11,2011-10-04 09:06:52.777000+00:00,task-42343,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 10:23:04.339000+00:00 +Internet,RIGHT_case-9885,2011-12-08 01:06:40+00:00,General,2011-11-25 09:48:38.851000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-04 01:06:40.020000+00:00,task-42186,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-10-07 12:36:19.161000+00:00 +Internet,RIGHT_case-9885,2011-12-08 01:06:40+00:00,General,2011-11-25 09:48:38.851000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-04 01:06:40.020000+00:00,task-42190,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-10-07 12:37:42.893000+00:00 +Internet,RIGHT_case-9885,2011-12-08 01:06:40+00:00,General,2011-11-25 09:48:38.851000+00:00,2011-12-08 01:06:40.010000+00:00,Group 5,Resource13,2011-10-04 01:06:40.020000+00:00,task-42188,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-10-07 12:37:59.264000+00:00 +Internet,RIGHT_case-9886,2011-11-29 09:19:19.745000+00:00,General,2011-10-18 14:40:05.269000+00:00,2011-11-29 09:19:19.745000+00:00,Group 2,Resource03,2011-10-04 09:19:19.745000+00:00,task-42401,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 11:56:54.629000+00:00 +Internet,RIGHT_case-9886,2011-11-29 09:19:19.745000+00:00,General,2011-10-18 14:40:05.269000+00:00,2011-11-29 09:19:19.745000+00:00,Group 2,Resource03,2011-10-04 09:19:19.745000+00:00,task-42404,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 11:57:24.160000+00:00 +Internet,RIGHT_case-9886,2011-11-29 09:19:19.745000+00:00,General,2011-10-18 14:40:05.269000+00:00,2011-11-29 09:19:19.745000+00:00,Group 2,Resource03,2011-10-04 09:19:19.745000+00:00,task-42411,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 12:24:29.467000+00:00 +Internet,RIGHT_case-9887,2011-11-29 09:24:23.041000+00:00,General,2011-10-12 00:00:00.020000+00:00,2011-11-29 09:24:23.041000+00:00,Group 5,Resource23,2011-10-04 09:24:23.041000+00:00,task-42982,T10 Determine necessity to stop indication,complete,Group 1,Resource30,2011-10-12 09:13:22.808000+00:00 +Internet,RIGHT_case-9887,2011-11-29 09:24:23.041000+00:00,General,2011-10-12 00:00:00.020000+00:00,2011-11-29 09:24:23.041000+00:00,Group 5,Resource23,2011-10-04 09:24:23.041000+00:00,task-42980,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-10-13 07:45:02.665000+00:00 +Internet,RIGHT_case-9890,2011-11-29 09:31:36.900000+00:00,General,2011-10-27 11:35:45.803000+00:00,2011-11-29 09:31:36.900000+00:00,Group 8,Resource11,2011-10-04 09:31:36.900000+00:00,task-42363,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 10:51:53.044000+00:00 +Internet,RIGHT_case-9890,2011-11-29 09:31:36.900000+00:00,General,2011-10-27 11:35:45.803000+00:00,2011-11-29 09:31:36.900000+00:00,Group 8,Resource11,2011-10-04 09:31:36.900000+00:00,task-42366,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 10:52:27.424000+00:00 +Internet,RIGHT_case-9890,2011-11-29 09:31:36.900000+00:00,General,2011-10-27 11:35:45.803000+00:00,2011-11-29 09:31:36.900000+00:00,Group 8,Resource11,2011-10-04 09:31:36.900000+00:00,task-42367,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 10:53:04.545000+00:00 +Internet,RIGHT_case-9892,2011-11-24 01:06:40+00:00,General,2011-10-26 11:44:41.624000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource11,2011-09-29 01:06:40.020000+00:00,task-42245,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-07 16:13:52.394000+00:00 +Internet,RIGHT_case-9892,2011-11-24 01:06:40+00:00,General,2011-10-26 11:44:41.624000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource11,2011-09-29 01:06:40.020000+00:00,task-42248,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-07 16:14:20.841000+00:00 +Internet,RIGHT_case-9892,2011-11-24 01:06:40+00:00,General,2011-10-26 11:44:41.624000+00:00,2011-11-24 01:06:40.010000+00:00,Group 8,Resource11,2011-09-29 01:06:40.020000+00:00,task-42254,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-07 16:56:16.241000+00:00 +Internet,RIGHT_case-9894,2011-12-21 01:06:40+00:00,General,2011-10-05 16:54:17.281000+00:00,2011-12-21 01:06:40.010000+00:00,Group 2,Resource21,2011-10-04 01:06:40.020000+00:00,task-41596,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-10-05 16:54:19.195000+00:00 +Internet,RIGHT_case-9895,2011-11-21 01:06:40+00:00,General,2011-11-07 08:02:00.900000+00:00,2011-11-21 01:06:40.010000+00:00,Group 8,Resource11,2011-09-26 01:06:40.020000+00:00,task-42885,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-11 12:50:21.919000+00:00 +Internet,RIGHT_case-9895,2011-11-21 01:06:40+00:00,General,2011-11-07 08:02:00.900000+00:00,2011-11-21 01:06:40.010000+00:00,Group 8,Resource11,2011-09-26 01:06:40.020000+00:00,task-42881,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 12:50:36.614000+00:00 +Internet,RIGHT_case-9895,2011-11-21 01:06:40+00:00,General,2011-11-07 08:02:00.900000+00:00,2011-11-21 01:06:40.010000+00:00,Group 8,Resource11,2011-09-26 01:06:40.020000+00:00,task-42888,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 12:51:05.484000+00:00 +Internet,RIGHT_case-9897,2012-01-02 00:00:00+00:00,General,2012-01-17 14:23:20.043000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-09-26 01:06:40.020000+00:00,task-41726,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-05 12:37:52.586000+00:00 +Internet,RIGHT_case-9897,2012-01-02 00:00:00+00:00,General,2012-01-17 14:23:20.043000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-09-26 01:06:40.020000+00:00,task-41734,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-05 12:48:53.171000+00:00 +Internet,RIGHT_case-9897,2012-01-02 00:00:00+00:00,General,2012-01-17 14:23:20.043000+00:00,2012-01-02 00:00:00.010000+00:00,Group 5,Resource02,2011-09-26 01:06:40.020000+00:00,task-41731,T05 Print and send confirmation of receipt,complete,EMPTY,Resource02,2011-10-06 07:37:28.500000+00:00 +Internet,RIGHT_case-9904,2011-12-21 01:06:40+00:00,General,2011-11-07 10:00:24.618000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-42288,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 09:11:20.142000+00:00 +Internet,RIGHT_case-9904,2011-12-21 01:06:40+00:00,General,2011-11-07 10:00:24.618000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-42291,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 09:12:01.759000+00:00 +Internet,RIGHT_case-9904,2011-12-21 01:06:40+00:00,General,2011-11-07 10:00:24.618000+00:00,2011-12-21 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-42293,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 09:23:32.479000+00:00 +Internet,RIGHT_case-9916,2011-11-29 01:06:40+00:00,General,2011-11-30 08:10:59.139000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-42864,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 11:38:07.852000+00:00 +Internet,RIGHT_case-9916,2011-11-29 01:06:40+00:00,General,2011-11-30 08:10:59.139000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-42867,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 11:38:48.265000+00:00 +Internet,RIGHT_case-9916,2011-11-29 01:06:40+00:00,General,2011-11-30 08:10:59.139000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-43596,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-18 10:00:35.042000+00:00 +Internet,RIGHT_case-9919,2011-12-22 01:06:40+00:00,General,2011-11-30 07:40:07.644000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42097,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-07 09:07:23.379000+00:00 +Internet,RIGHT_case-9919,2011-12-22 01:06:40+00:00,General,2011-11-30 07:40:07.644000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42100,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-07 09:08:07.023000+00:00 +Internet,RIGHT_case-9919,2011-12-22 01:06:40+00:00,General,2011-11-30 07:40:07.644000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42101,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-07 09:08:53.701000+00:00 +Internet,RIGHT_case-9920,2011-12-22 01:06:40+00:00,General,2011-11-21 14:23:38.004000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42060,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-07 08:40:03.223000+00:00 +Internet,RIGHT_case-9920,2011-12-22 01:06:40+00:00,General,2011-11-21 14:23:38.004000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42063,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-07 08:40:39.521000+00:00 +Internet,RIGHT_case-9920,2011-12-22 01:06:40+00:00,General,2011-11-21 14:23:38.004000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42064,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-07 08:41:28.276000+00:00 +Internet,RIGHT_case-9921,2011-11-28 01:06:40+00:00,General,2011-11-07 12:32:52.389000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource04,2011-10-03 01:06:40.020000+00:00,task-45243,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-10-31 15:23:40.966000+00:00 +Internet,RIGHT_case-9921,2011-11-28 01:06:40+00:00,General,2011-11-07 12:32:52.389000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource04,2011-10-03 01:06:40.020000+00:00,task-45249,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-10-31 15:26:18.131000+00:00 +Internet,RIGHT_case-9921,2011-11-28 01:06:40+00:00,General,2011-11-07 12:32:52.389000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource04,2011-10-03 01:06:40.020000+00:00,task-45250,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-31 15:30:16.685000+00:00 +Internet,RIGHT_case-9921,2011-11-28 01:06:40+00:00,General,2011-11-07 12:32:52.389000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource04,2011-10-03 01:06:40.020000+00:00,task-45261,T12 Check document X request unlicensed,complete,EMPTY,Resource04,2011-10-31 16:16:03.351000+00:00 +Internet,RIGHT_case-9921,2011-11-28 01:06:40+00:00,General,2011-11-07 12:32:52.389000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource04,2011-10-03 01:06:40.020000+00:00,task-45270,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-11-07 12:32:52.208000+00:00 +Internet,RIGHT_case-9923,2011-11-28 01:06:40+00:00,General,2011-10-31 16:55:13.160000+00:00,2011-11-28 01:06:40.010000+00:00,Group 2,Resource20,2011-10-03 01:06:40.020000+00:00,task-44685,T02 Check confirmation of receipt,complete,EMPTY,Resource20,2011-10-27 10:47:14.553000+00:00 +Internet,RIGHT_case-9923,2011-11-28 01:06:40+00:00,General,2011-10-31 16:55:13.160000+00:00,2011-11-28 01:06:40.010000+00:00,Group 2,Resource20,2011-10-03 01:06:40.020000+00:00,task-44846,T05 Print and send confirmation of receipt,complete,EMPTY,Resource20,2011-10-27 10:48:27.302000+00:00 +Internet,RIGHT_case-9923,2011-11-28 01:06:40+00:00,General,2011-10-31 16:55:13.160000+00:00,2011-11-28 01:06:40.010000+00:00,Group 2,Resource20,2011-10-03 01:06:40.020000+00:00,task-44848,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-10-27 10:49:48.187000+00:00 +Internet,RIGHT_case-9924,2011-12-22 01:06:40+00:00,General,2011-11-21 09:37:01.435000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42122,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-07 10:01:12.702000+00:00 +Internet,RIGHT_case-9924,2011-12-22 01:06:40+00:00,General,2011-11-21 09:37:01.435000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42125,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-07 10:01:59.336000+00:00 +Internet,RIGHT_case-9924,2011-12-22 01:06:40+00:00,General,2011-11-21 09:37:01.435000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42126,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-07 10:03:13.921000+00:00 +Internet,RIGHT_case-9925,2011-12-22 01:06:40+00:00,General,2011-11-21 09:44:12.722000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42494,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 14:39:49.247000+00:00 +Internet,RIGHT_case-9925,2011-12-22 01:06:40+00:00,General,2011-11-21 09:44:12.722000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42498,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 14:40:26.413000+00:00 +Internet,RIGHT_case-9925,2011-12-22 01:06:40+00:00,General,2011-11-21 09:44:12.722000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42500,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 14:40:59.473000+00:00 +Internet,RIGHT_case-9926,2011-12-22 01:06:40+00:00,General,2011-10-26 08:05:04.376000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource02,2011-10-05 01:06:40.020000+00:00,task-43584,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-10-18 09:42:17.499000+00:00 +Internet,RIGHT_case-9926,2011-12-22 01:06:40+00:00,General,2011-10-26 08:05:04.376000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource02,2011-10-05 01:06:40.020000+00:00,task-43587,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-10-18 09:46:56.818000+00:00 +Internet,RIGHT_case-9926,2011-12-22 01:06:40+00:00,General,2011-10-26 08:05:04.376000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource02,2011-10-05 01:06:40.020000+00:00,task-43621,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-10-18 10:41:56.733000+00:00 +Internet,RIGHT_case-9927,2011-12-22 01:06:40+00:00,General,2011-11-15 10:37:58.468000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource05,2011-10-05 01:06:40.020000+00:00,task-45772,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-11-08 11:41:32.606000+00:00 +Internet,RIGHT_case-9927,2011-12-22 01:06:40+00:00,General,2011-11-15 10:37:58.468000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource05,2011-10-05 01:06:40.020000+00:00,task-45775,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-11-08 11:42:18.067000+00:00 +Internet,RIGHT_case-9927,2011-12-22 01:06:40+00:00,General,2011-11-15 10:37:58.468000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource05,2011-10-05 01:06:40.020000+00:00,task-45776,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-11-08 11:43:11.154000+00:00 +Internet,RIGHT_case-9927,2011-12-22 01:06:40+00:00,General,2011-11-15 10:37:58.468000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource05,2011-10-05 01:06:40.020000+00:00,task-45778,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-11-08 11:44:51.187000+00:00 +Internet,RIGHT_case-9927,2011-12-22 01:06:40+00:00,General,2011-11-15 10:37:58.468000+00:00,2011-12-22 01:06:40.010000+00:00,Group 5,Resource05,2011-10-05 01:06:40.020000+00:00,task-45780,T20 Print report Y to stop indication,complete,Group 2,Resource05,2011-11-08 11:47:32.708000+00:00 +Internet,RIGHT_case-9928,2011-11-28 01:06:40+00:00,General,2011-12-07 12:55:18.299000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource22,2011-10-03 01:06:40.020000+00:00,task-44216,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-10-24 10:00:06.125000+00:00 +Internet,RIGHT_case-9928,2011-11-28 01:06:40+00:00,General,2011-12-07 12:55:18.299000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource22,2011-10-03 01:06:40.020000+00:00,task-44219,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-10-24 10:01:40.451000+00:00 +Internet,RIGHT_case-9928,2011-11-28 01:06:40+00:00,General,2011-12-07 12:55:18.299000+00:00,2011-11-28 01:06:40.010000+00:00,Group 5,Resource22,2011-10-03 01:06:40.020000+00:00,task-44220,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-10-24 10:04:05.240000+00:00 +Internet,RIGHT_case-9929,2011-12-22 01:06:40+00:00,General,2011-11-17 08:26:24.943000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42161,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-07 10:54:36.601000+00:00 +Internet,RIGHT_case-9929,2011-12-22 01:06:40+00:00,General,2011-11-17 08:26:24.943000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42164,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-07 11:08:54.831000+00:00 +Internet,RIGHT_case-9929,2011-12-22 01:06:40+00:00,General,2011-11-17 08:26:24.943000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42165,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-07 11:09:56.242000+00:00 +Internet,RIGHT_case-9931,2011-12-22 01:06:40+00:00,General,2011-11-21 09:55:44.983000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42141,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-07 10:22:44.484000+00:00 +Internet,RIGHT_case-9931,2011-12-22 01:06:40+00:00,General,2011-11-21 09:55:44.983000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42144,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-07 10:23:29.729000+00:00 +Internet,RIGHT_case-9931,2011-12-22 01:06:40+00:00,General,2011-11-21 09:55:44.983000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42145,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-07 10:24:18.898000+00:00 +Internet,RIGHT_case-9932,2011-12-22 01:06:40+00:00,General,2011-11-17 08:54:03.790000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42607,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 16:30:22.617000+00:00 +Internet,RIGHT_case-9932,2011-12-22 01:06:40+00:00,General,2011-11-17 08:54:03.790000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42611,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 16:32:54.943000+00:00 +Internet,RIGHT_case-9932,2011-12-22 01:06:40+00:00,General,2011-11-17 08:54:03.790000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42610,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 16:33:24.899000+00:00 +Internet,RIGHT_case-9934,2011-12-22 01:06:40+00:00,General,2011-11-21 10:13:59.758000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42540,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 15:11:02.971000+00:00 +Internet,RIGHT_case-9934,2011-12-22 01:06:40+00:00,General,2011-11-21 10:13:59.758000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42543,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 15:11:38.132000+00:00 +Internet,RIGHT_case-9934,2011-12-22 01:06:40+00:00,General,2011-11-21 10:13:59.758000+00:00,2011-12-22 01:06:40.010000+00:00,Group 8,Resource11,2011-10-05 01:06:40.020000+00:00,task-42547,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 15:12:34.753000+00:00 +Internet,RIGHT_case-9936,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-10-05 01:06:40.020000+00:00,task-44025,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-10-20 14:29:00.055000+00:00 +Internet,RIGHT_case-9936,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-10-05 01:06:40.020000+00:00,task-44028,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-10-20 14:31:43.030000+00:00 +Internet,RIGHT_case-9936,2012-02-15 00:00:00+00:00,General,,2012-02-15 00:00:00.010000+00:00,Group 5,Resource04,2011-10-05 01:06:40.020000+00:00,task-44029,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-10-20 14:32:26.561000+00:00 +Internet,RIGHT_case-9941,2011-12-22 00:00:00+00:00,General,2012-01-05 15:39:06.431000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource13,2011-10-06 01:06:40.020000+00:00,task-43919,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-10-19 19:42:03.079000+00:00 +Internet,RIGHT_case-9941,2011-12-22 00:00:00+00:00,General,2012-01-05 15:39:06.431000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource13,2011-10-06 01:06:40.020000+00:00,task-43922,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-10-19 19:42:56.431000+00:00 +Internet,RIGHT_case-9941,2011-12-22 00:00:00+00:00,General,2012-01-05 15:39:06.431000+00:00,2011-12-22 00:00:00.010000+00:00,Group 5,Resource13,2011-10-06 01:06:40.020000+00:00,task-43923,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-10-19 19:44:02.650000+00:00 +Internet,RIGHT_case-9942,2011-12-23 01:06:40+00:00,General,2011-11-21 10:39:21.672000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42960,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-12 08:55:29.367000+00:00 +Internet,RIGHT_case-9942,2011-12-23 01:06:40+00:00,General,2011-11-21 10:39:21.672000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42963,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-12 08:56:22.704000+00:00 +Internet,RIGHT_case-9942,2011-12-23 01:06:40+00:00,General,2011-11-21 10:39:21.672000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42964,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-12 08:57:12.640000+00:00 +Internet,RIGHT_case-9943,2011-11-29 01:06:40+00:00,General,2011-11-07 09:28:24.079000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-43095,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-12 12:46:25.348000+00:00 +Internet,RIGHT_case-9943,2011-11-29 01:06:40+00:00,General,2011-11-07 09:28:24.079000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-43099,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-12 12:47:04.899000+00:00 +Internet,RIGHT_case-9943,2011-11-29 01:06:40+00:00,General,2011-11-07 09:28:24.079000+00:00,2011-11-29 01:06:40.010000+00:00,Group 8,Resource11,2011-10-04 01:06:40.020000+00:00,task-43100,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-12 12:47:45.840000+00:00 +Internet,RIGHT_case-9944,2011-12-23 01:06:40+00:00,General,2011-11-17 08:47:54.571000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43054,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-12 11:50:19.220000+00:00 +Internet,RIGHT_case-9944,2011-12-23 01:06:40+00:00,General,2011-11-17 08:47:54.571000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43062,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-12 11:50:56.920000+00:00 +Internet,RIGHT_case-9944,2011-12-23 01:06:40+00:00,General,2011-11-17 08:47:54.571000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-43064,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-12 11:51:47.101000+00:00 +Internet,RIGHT_case-9946,2011-11-23 01:06:40+00:00,General,2011-11-14 08:31:14.790000+00:00,2011-11-23 01:06:40.010000+00:00,Group 8,Resource11,2011-09-28 01:06:40.020000+00:00,task-43161,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-12 15:17:26.259000+00:00 +Internet,RIGHT_case-9946,2011-11-23 01:06:40+00:00,General,2011-11-14 08:31:14.790000+00:00,2011-11-23 01:06:40.010000+00:00,Group 8,Resource11,2011-09-28 01:06:40.020000+00:00,task-43166,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-12 15:18:01.377000+00:00 +Internet,RIGHT_case-9946,2011-11-23 01:06:40+00:00,General,2011-11-14 08:31:14.790000+00:00,2011-11-23 01:06:40.010000+00:00,Group 8,Resource11,2011-09-28 01:06:40.020000+00:00,task-43168,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-12 15:18:43.878000+00:00 +Internet,RIGHT_case-9947,2012-01-15 00:00:00+00:00,General,2012-01-16 15:45:57.982000+00:00,2012-01-15 00:00:00.010000+00:00,Group 5,Resource02,2011-10-03 01:06:40.020000+00:00,task-43658,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-18 13:23:01.421000+00:00 +Internet,RIGHT_case-9947,2012-01-15 00:00:00+00:00,General,2012-01-16 15:45:57.982000+00:00,2012-01-15 00:00:00.010000+00:00,Group 5,Resource02,2011-10-03 01:06:40.020000+00:00,task-43661,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-18 13:24:05.444000+00:00 +Internet,RIGHT_case-9947,2012-01-15 00:00:00+00:00,General,2012-01-16 15:45:57.982000+00:00,2012-01-15 00:00:00.010000+00:00,Group 5,Resource02,2011-10-03 01:06:40.020000+00:00,task-43705,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-18 14:06:42.492000+00:00 +Internet,RIGHT_case-9948,2011-12-23 01:06:40+00:00,General,2011-10-14 13:03:38.170000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42564,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 15:40:56.999000+00:00 +Internet,RIGHT_case-9948,2011-12-23 01:06:40+00:00,General,2011-10-14 13:03:38.170000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42568,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 15:41:52.458000+00:00 +Internet,RIGHT_case-9948,2011-12-23 01:06:40+00:00,General,2011-10-14 13:03:38.170000+00:00,2011-12-23 01:06:40.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42567,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 15:42:12.496000+00:00 +Internet,RIGHT_case-9955,2011-12-23 00:00:00+00:00,General,2011-12-23 15:35:09.572000+00:00,2011-12-23 00:00:00.010000+00:00,Group 5,Resource02,2011-10-06 01:06:40.020000+00:00,task-45227,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-31 14:52:54.101000+00:00 +Internet,RIGHT_case-9955,2011-12-23 00:00:00+00:00,General,2011-12-23 15:35:09.572000+00:00,2011-12-23 00:00:00.010000+00:00,Group 5,Resource02,2011-10-06 01:06:40.020000+00:00,task-45231,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-31 14:53:51.460000+00:00 +Internet,RIGHT_case-9955,2011-12-23 00:00:00+00:00,General,2011-12-23 15:35:09.572000+00:00,2011-12-23 00:00:00.010000+00:00,Group 5,Resource02,2011-10-06 01:06:40.020000+00:00,task-47695,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-11-23 13:57:38.127000+00:00 +Internet,RIGHT_case-9957,2011-12-01 00:00:00+00:00,General,2012-01-05 14:13:21.439000+00:00,2011-12-01 00:00:00.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42913,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 13:17:16.597000+00:00 +Internet,RIGHT_case-9957,2011-12-01 00:00:00+00:00,General,2012-01-05 14:13:21.439000+00:00,2011-12-01 00:00:00.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42916,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 13:17:49.206000+00:00 +Internet,RIGHT_case-9957,2011-12-01 00:00:00+00:00,General,2012-01-05 14:13:21.439000+00:00,2011-12-01 00:00:00.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42917,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-11 13:19:30.958000+00:00 +Internet,RIGHT_case-9957,2011-12-01 00:00:00+00:00,General,2012-01-05 14:13:21.439000+00:00,2011-12-01 00:00:00.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42920,T17 Check report Y to stop indication,complete,Group 4,Resource03,2011-10-11 13:21:50.216000+00:00 +Internet,RIGHT_case-9957,2011-12-01 00:00:00+00:00,General,2012-01-05 14:13:21.439000+00:00,2011-12-01 00:00:00.010000+00:00,Group 8,Resource11,2011-10-06 01:06:40.020000+00:00,task-42922,T20 Print report Y to stop indication,complete,Group 2,Resource03,2011-10-11 13:22:24.226000+00:00 +Internet,RIGHT_case-9961,2011-12-26 01:06:40+00:00,General,2011-11-23 08:56:59.365000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42725,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-11 09:13:17.033000+00:00 +Internet,RIGHT_case-9961,2011-12-26 01:06:40+00:00,General,2011-11-23 08:56:59.365000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42728,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-11 09:13:54.840000+00:00 +Internet,RIGHT_case-9961,2011-12-26 01:06:40+00:00,General,2011-11-23 08:56:59.365000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42729,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-11 09:14:45.071000+00:00 +Internet,RIGHT_case-9963,2011-12-02 01:06:40+00:00,General,2011-11-14 08:40:38.838000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42774,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-11 09:54:41.512000+00:00 +Internet,RIGHT_case-9963,2011-12-02 01:06:40+00:00,General,2011-11-14 08:40:38.838000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42780,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-11 09:59:12.263000+00:00 +Internet,RIGHT_case-9963,2011-12-02 01:06:40+00:00,General,2011-11-14 08:40:38.838000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42782,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-11 10:00:04.529000+00:00 +Internet,RIGHT_case-9966,2011-12-02 01:06:40+00:00,General,2011-12-02 14:48:58.581000+00:00,2011-12-02 01:06:40.010000+00:00,Group 5,Resource09,2011-10-07 01:06:40.020000+00:00,task-44419,T02 Check confirmation of receipt,complete,EMPTY,Resource09,2011-10-25 12:13:00.339000+00:00 +Internet,RIGHT_case-9966,2011-12-02 01:06:40+00:00,General,2011-12-02 14:48:58.581000+00:00,2011-12-02 01:06:40.010000+00:00,Group 5,Resource09,2011-10-07 01:06:40.020000+00:00,task-44428,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-25 12:15:31.971000+00:00 +Internet,RIGHT_case-9966,2011-12-02 01:06:40+00:00,General,2011-12-02 14:48:58.581000+00:00,2011-12-02 01:06:40.010000+00:00,Group 5,Resource09,2011-10-07 01:06:40.020000+00:00,task-45340,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-11-01 08:56:44.375000+00:00 +Internet,RIGHT_case-9966,2011-12-02 01:06:40+00:00,General,2011-12-02 14:48:58.581000+00:00,2011-12-02 01:06:40.010000+00:00,Group 5,Resource09,2011-10-07 01:06:40.020000+00:00,task-45342,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-11-07 12:34:29.078000+00:00 +Internet,RIGHT_case-9967,2011-12-02 01:06:40+00:00,General,2011-11-07 10:54:05.508000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42681,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-11 08:35:37.693000+00:00 +Internet,RIGHT_case-9967,2011-12-02 01:06:40+00:00,General,2011-11-07 10:54:05.508000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42685,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-11 08:36:15.505000+00:00 +Internet,RIGHT_case-9967,2011-12-02 01:06:40+00:00,General,2011-11-07 10:54:05.508000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42683,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-11 08:36:42.866000+00:00 +Internet,RIGHT_case-9969,2011-12-02 01:06:40+00:00,General,2011-11-14 08:50:36.749000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42587,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 16:01:33.711000+00:00 +Internet,RIGHT_case-9969,2011-12-02 01:06:40+00:00,General,2011-11-14 08:50:36.749000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42590,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 16:02:05.310000+00:00 +Internet,RIGHT_case-9969,2011-12-02 01:06:40+00:00,General,2011-11-14 08:50:36.749000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42591,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 16:05:52.955000+00:00 +Internet,RIGHT_case-9970,2011-12-26 01:06:40+00:00,General,2011-11-23 09:03:22.743000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42630,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 16:48:58.021000+00:00 +Internet,RIGHT_case-9970,2011-12-26 01:06:40+00:00,General,2011-11-23 09:03:22.743000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42633,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 16:49:42.935000+00:00 +Internet,RIGHT_case-9970,2011-12-26 01:06:40+00:00,General,2011-11-23 09:03:22.743000+00:00,2011-12-26 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42634,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 16:50:28.926000+00:00 +Internet,RIGHT_case-9972,2011-12-02 01:06:40+00:00,General,2011-11-07 08:11:54.768000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42748,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 09:34:02.700000+00:00 +Internet,RIGHT_case-9972,2011-12-02 01:06:40+00:00,General,2011-11-07 08:11:54.768000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42751,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 09:36:02.310000+00:00 +Internet,RIGHT_case-9972,2011-12-02 01:06:40+00:00,General,2011-11-07 08:11:54.768000+00:00,2011-12-02 01:06:40.010000+00:00,Group 8,Resource11,2011-10-07 01:06:40.020000+00:00,task-42752,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-11 09:36:49.905000+00:00 +Internet,RIGHT_case-9981,2011-12-03 01:06:40+00:00,General,2011-10-11 10:36:32.140000+00:00,2011-12-03 01:06:40.010000+00:00,Group 2,Resource03,2011-10-08 01:06:40.020000+00:00,task-42800,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 10:22:32.153000+00:00 +Internet,RIGHT_case-9981,2011-12-03 01:06:40+00:00,General,2011-10-11 10:36:32.140000+00:00,2011-12-03 01:06:40.010000+00:00,Group 2,Resource03,2011-10-08 01:06:40.020000+00:00,task-42803,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 10:23:00.604000+00:00 +Internet,RIGHT_case-9981,2011-12-03 01:06:40+00:00,General,2011-10-11 10:36:32.140000+00:00,2011-12-03 01:06:40.010000+00:00,Group 2,Resource03,2011-10-08 01:06:40.020000+00:00,task-42804,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-11 10:28:16.630000+00:00 +Internet,RIGHT_case-9986,2011-12-04 01:06:40+00:00,General,2011-10-27 13:21:44.814000+00:00,2011-12-04 01:06:40.010000+00:00,Group 2,Resource20,2011-10-09 01:06:40.020000+00:00,task-44627,T02 Check confirmation of receipt,complete,EMPTY,Resource20,2011-10-26 10:06:37.311000+00:00 +Internet,RIGHT_case-9986,2011-12-04 01:06:40+00:00,General,2011-10-27 13:21:44.814000+00:00,2011-12-04 01:06:40.010000+00:00,Group 2,Resource20,2011-10-09 01:06:40.020000+00:00,task-44630,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-10-26 10:07:27.130000+00:00 +Internet,RIGHT_case-9986,2011-12-04 01:06:40+00:00,General,2011-10-27 13:21:44.814000+00:00,2011-12-04 01:06:40.010000+00:00,Group 2,Resource20,2011-10-09 01:06:40.020000+00:00,task-44631,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-10-26 10:08:14.773000+00:00 +Internet,RIGHT_case-9997,2011-12-01 01:06:40+00:00,General,2011-10-20 14:19:44.448000+00:00,2011-12-01 01:06:40.010000+00:00,Group 5,Resource06,2011-10-06 01:06:40.020000+00:00,task-43560,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-18 09:04:48.732000+00:00 +Internet,RIGHT_case-9997,2011-12-01 01:06:40+00:00,General,2011-10-20 14:19:44.448000+00:00,2011-12-01 01:06:40.010000+00:00,Group 5,Resource06,2011-10-06 01:06:40.020000+00:00,task-43563,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-18 09:05:30.196000+00:00 +Internet,RIGHT_case-9997,2011-12-01 01:06:40+00:00,General,2011-10-20 14:19:44.448000+00:00,2011-12-01 01:06:40.010000+00:00,Group 5,Resource06,2011-10-06 01:06:40.020000+00:00,task-43564,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-18 09:06:20.547000+00:00 diff --git a/pm4py/tests/input_data/interval_event_log.csv b/pm4py/tests/input_data/interval_event_log.csv new file mode 100644 index 0000000000000000000000000000000000000000..3230dd4a19b0fc985e9cdad7300dfddc8e2f23e4 --- /dev/null +++ b/pm4py/tests/input_data/interval_event_log.csv @@ -0,0 +1,8110 @@ +case:concept:name,concept:name,time:timestamp,start_timestamp +C1,place order,2015-01-05 09:02:50+00:00,2015-01-05 09:00:07+00:00 +C2,place order,2015-01-05 10:54:11+00:00,2015-01-05 10:18:21+00:00 +C3,place order,2015-01-05 12:06:56+00:00,2015-01-05 11:54:49+00:00 +C4,place order,2015-01-05 14:16:11+00:00,2015-01-05 14:07:45+00:00 +C5,place order,2015-01-05 15:44:36+00:00,2015-01-05 15:33:38+00:00 +C6,place order,2015-01-05 22:08:57+00:00,2015-01-05 17:25:23+00:00 +C7,place order,2015-01-05 20:00:07+00:00,2015-01-05 19:08:53+00:00 +C8,place order,2015-01-05 22:05:05+00:00,2015-01-05 21:54:00+00:00 +C9,place order,2015-01-06 07:42:59+00:00,2015-01-06 07:25:13+00:00 +C10,place order,2015-01-06 10:16:52+00:00,2015-01-06 10:09:51+00:00 +C11,place order,2015-01-06 11:50:02+00:00,2015-01-06 11:37:49+00:00 +C12,place order,2015-01-06 13:46:45+00:00,2015-01-06 13:33:45+00:00 +C9,send invoice,2015-01-06 15:26:00+00:00,2015-01-06 15:20:14+00:00 +C13,place order,2015-01-06 15:44:50+00:00,2015-01-06 15:25:38+00:00 +C5,send invoice,2015-01-06 16:01:06+00:00,2015-01-06 15:54:13+00:00 +C14,place order,2015-01-06 17:16:47+00:00,2015-01-06 17:09:23+00:00 +C11,send invoice,2015-01-06 17:44:13+00:00,2015-01-06 17:36:04+00:00 +C15,place order,2015-01-06 18:40:41+00:00,2015-01-06 18:36:53+00:00 +C8,send invoice,2015-01-06 19:49:11+00:00,2015-01-06 19:45:44+00:00 +C16,place order,2015-01-06 21:38:39+00:00,2015-01-06 21:26:54+00:00 +C17,place order,2015-01-07 05:28:42+00:00,2015-01-07 04:42:36+00:00 +C1,send invoice,2015-01-07 09:28:55+00:00,2015-01-07 09:21:32+00:00 +C18,place order,2015-01-07 10:23:18+00:00,2015-01-07 10:10:58+00:00 +C19,place order,2015-01-07 12:16:09+00:00,2015-01-07 11:40:04+00:00 +C7,send invoice,2015-01-07 12:03:55+00:00,2015-01-07 11:59:50+00:00 +C2,send invoice,2015-01-07 13:16:07+00:00,2015-01-07 12:51:54+00:00 +C20,place order,2015-01-07 13:43:28+00:00,2015-01-07 13:38:15+00:00 +C3,send invoice,2015-01-07 14:18:04+00:00,2015-01-07 14:09:32+00:00 +C21,place order,2015-01-07 19:02:58+00:00,2015-01-07 15:34:37+00:00 +C12,send invoice,2015-01-07 16:37:38+00:00,2015-01-07 16:31:52+00:00 +C22,place order,2015-01-07 21:06:22+00:00,2015-01-07 17:27:21+00:00 +C6,send invoice,2015-01-07 19:12:08+00:00,2015-01-07 19:07:02+00:00 +C23,place order,2015-01-07 19:16:19+00:00,2015-01-07 19:12:50+00:00 +C24,place order,2015-01-07 22:10:38+00:00,2015-01-07 22:01:54+00:00 +C25,place order,2015-01-08 07:18:57+00:00,2015-01-08 07:12:36+00:00 +C26,place order,2015-01-08 10:02:09+00:00,2015-01-08 09:55:59+00:00 +C14,send invoice,2015-01-08 10:48:13+00:00,2015-01-08 10:41:54+00:00 +C13,send invoice,2015-01-08 10:49:28+00:00,2015-01-08 10:47:26+00:00 +C27,place order,2015-01-08 12:14:59+00:00,2015-01-08 12:10:05+00:00 +C28,place order,2015-01-08 13:41:42+00:00,2015-01-08 13:38:17+00:00 +C16,send invoice,2015-01-08 14:16:34+00:00,2015-01-08 14:12:34+00:00 +C20,send invoice,2015-01-08 15:04:15+00:00,2015-01-08 14:39:28+00:00 +C4,send invoice,2015-01-08 15:20:51+00:00,2015-01-08 15:16:14+00:00 +C29,place order,2015-01-08 15:41:25+00:00,2015-01-08 15:34:42+00:00 +C28,send invoice,2015-01-08 16:38:34+00:00,2015-01-08 16:34:16+00:00 +C30,place order,2015-01-08 17:40:42+00:00,2015-01-08 17:27:31+00:00 +C31,place order,2015-01-08 23:06:43+00:00,2015-01-08 19:13:09+00:00 +C32,place order,2015-01-08 22:10:31+00:00,2015-01-08 22:02:32+00:00 +C33,place order,2015-01-09 07:24:05+00:00,2015-01-09 07:16:25+00:00 +C34,place order,2015-01-09 10:14:51+00:00,2015-01-09 10:00:10+00:00 +C26,send invoice,2015-01-09 10:38:30+00:00,2015-01-09 10:31:41+00:00 +C35,place order,2015-01-09 12:02:40+00:00,2015-01-09 11:18:27+00:00 +C25,send invoice,2015-01-09 11:46:36+00:00,2015-01-09 11:19:13+00:00 +C36,place order,2015-01-09 17:42:42+00:00,2015-01-09 12:55:02+00:00 +C15,send invoice,2015-01-09 14:50:01+00:00,2015-01-09 14:41:57+00:00 +C37,place order,2015-01-09 15:16:40+00:00,2015-01-09 15:08:11+00:00 +C10,send invoice,2015-01-09 15:49:45+00:00,2015-01-09 15:43:21+00:00 +C23,send invoice,2015-01-09 15:58:38+00:00,2015-01-09 15:52:57+00:00 +C38,place order,2015-01-09 16:39:15+00:00,2015-01-09 16:34:29+00:00 +C19,send invoice,2015-01-09 17:06:54+00:00,2015-01-09 16:59:22+00:00 +C39,place order,2015-01-09 18:34:17+00:00,2015-01-09 18:27:05+00:00 +C40,place order,2015-01-09 21:03:09+00:00,2015-01-09 20:57:30+00:00 +C37,send invoice,2015-01-09 22:00:51+00:00,2015-01-09 21:53:25+00:00 +C41,place order,2015-01-10 10:31:07+00:00,2015-01-10 10:28:12+00:00 +C42,place order,2015-01-11 10:45:39+00:00,2015-01-11 10:33:36+00:00 +C43,place order,2015-01-12 03:11:18+00:00,2015-01-12 03:02:24+00:00 +C18,send invoice,2015-01-12 08:49:30+00:00,2015-01-12 08:40:07+00:00 +C30,send invoice,2015-01-12 09:23:05+00:00,2015-01-12 09:15:02+00:00 +C44,place order,2015-01-12 09:24:55+00:00,2015-01-12 09:20:46+00:00 +C45,place order,2015-01-12 11:05:53+00:00,2015-01-12 10:59:39+00:00 +C29,send invoice,2015-01-12 11:49:53+00:00,2015-01-12 11:43:56+00:00 +C46,place order,2015-01-12 13:28:52+00:00,2015-01-12 13:17:25+00:00 +C47,place order,2015-01-12 15:07:30+00:00,2015-01-12 14:52:57+00:00 +C24,send invoice,2015-01-12 16:39:12+00:00,2015-01-12 16:23:07+00:00 +C48,place order,2015-01-12 17:09:41+00:00,2015-01-12 17:04:02+00:00 +C49,place order,2015-01-12 18:30:42+00:00,2015-01-12 18:26:11+00:00 +C34,send invoice,2015-01-12 20:33:57+00:00,2015-01-12 20:26:57+00:00 +C50,place order,2015-01-12 21:16:42+00:00,2015-01-12 20:54:47+00:00 +C51,place order,2015-01-13 02:36:18+00:00,2015-01-13 02:29:54+00:00 +C52,place order,2015-01-13 09:55:44+00:00,2015-01-13 09:45:01+00:00 +C53,place order,2015-01-13 11:59:26+00:00,2015-01-13 11:48:09+00:00 +C17,send invoice,2015-01-13 12:44:39+00:00,2015-01-13 12:42:14+00:00 +C54,place order,2015-01-13 13:57:41+00:00,2015-01-13 13:54:25+00:00 +C35,send invoice,2015-01-13 14:38:07+00:00,2015-01-13 14:30:43+00:00 +C32,send invoice,2015-01-13 15:07:36+00:00,2015-01-13 14:58:26+00:00 +C55,place order,2015-01-13 16:45:10+00:00,2015-01-13 16:06:58+00:00 +C46,send invoice,2015-01-13 17:09:43+00:00,2015-01-13 17:03:57+00:00 +C45,send invoice,2015-01-13 17:25:34+00:00,2015-01-13 17:18:58+00:00 +C56,place order,2015-01-13 17:46:42+00:00,2015-01-13 17:32:03+00:00 +C9,send reminder,2015-01-13 18:14:33+00:00,2015-01-13 18:05:48+00:00 +C36,send invoice,2015-01-13 18:17:05+00:00,2015-01-13 18:08:39+00:00 +C57,place order,2015-01-13 19:35:34+00:00,2015-01-13 19:22:13+00:00 +C22,send invoice,2015-01-13 20:05:15+00:00,2015-01-13 19:57:28+00:00 +C58,place order,2015-01-14 00:29:33+00:00,2015-01-13 22:20:40+00:00 +C59,place order,2015-01-14 08:59:39+00:00,2015-01-14 08:29:35+00:00 +C31,send invoice,2015-01-14 10:01:17+00:00,2015-01-14 09:58:20+00:00 +C60,place order,2015-01-14 11:15:34+00:00,2015-01-14 10:32:30+00:00 +C42,send invoice,2015-01-14 10:41:13+00:00,2015-01-14 10:37:44+00:00 +C27,send invoice,2015-01-14 11:48:18+00:00,2015-01-14 11:43:47+00:00 +C47,send invoice,2015-01-14 11:59:26+00:00,2015-01-14 11:53:48+00:00 +C61,place order,2015-01-14 15:53:15+00:00,2015-01-14 12:23:07+00:00 +C62,place order,2015-01-14 14:14:43+00:00,2015-01-14 14:04:21+00:00 +C33,send invoice,2015-01-14 14:34:09+00:00,2015-01-14 14:22:52+00:00 +C38,send invoice,2015-01-14 14:53:10+00:00,2015-01-14 14:47:33+00:00 +C12,send reminder,2015-01-14 15:25:14+00:00,2015-01-14 15:03:57+00:00 +C63,place order,2015-01-14 15:30:39+00:00,2015-01-14 15:26:49+00:00 +C7,send reminder,2015-01-14 16:01:33+00:00,2015-01-14 15:47:10+00:00 +C44,send invoice,2015-01-14 16:23:26+00:00,2015-01-14 16:19:10+00:00 +C64,place order,2015-01-14 17:14:58+00:00,2015-01-14 17:11:45+00:00 +C50,send invoice,2015-01-14 17:25:29+00:00,2015-01-14 17:17:35+00:00 +C52,send invoice,2015-01-14 17:31:49+00:00,2015-01-14 17:27:07+00:00 +C58,send invoice,2015-01-14 18:02:39+00:00,2015-01-14 17:58:30+00:00 +C49,send invoice,2015-01-14 18:17:12+00:00,2015-01-14 18:13:21+00:00 +C65,place order,2015-01-14 18:58:27+00:00,2015-01-14 18:41:38+00:00 +C66,place order,2015-01-14 22:08:10+00:00,2015-01-14 21:41:08+00:00 +C67,place order,2015-01-15 06:11:17+00:00,2015-01-15 06:08:00+00:00 +C41,send invoice,2015-01-15 08:40:08+00:00,2015-01-15 08:34:14+00:00 +C56,send invoice,2015-01-15 09:04:27+00:00,2015-01-15 08:58:49+00:00 +C68,place order,2015-01-15 10:04:18+00:00,2015-01-15 09:44:55+00:00 +C14,send reminder,2015-01-15 10:42:05+00:00,2015-01-15 10:35:11+00:00 +C13,send reminder,2015-01-15 12:02:49+00:00,2015-01-15 11:43:54+00:00 +C69,place order,2015-01-15 15:30:01+00:00,2015-01-15 11:47:58+00:00 +C70,place order,2015-01-15 14:07:21+00:00,2015-01-15 13:54:03+00:00 +C20,send reminder,2015-01-15 16:10:15+00:00,2015-01-15 15:52:40+00:00 +C71,place order,2015-01-15 16:10:17+00:00,2015-01-15 16:06:13+00:00 +C21,send invoice,2015-01-15 16:42:26+00:00,2015-01-15 16:35:50+00:00 +C1,pay,2015-01-15 16:59:55+00:00,2015-01-15 16:54:59+00:00 +C72,place order,2015-01-15 17:35:13+00:00,2015-01-15 17:30:33+00:00 +C73,place order,2015-01-15 19:26:03+00:00,2015-01-15 19:19:13+00:00 +C48,send invoice,2015-01-15 19:24:09+00:00,2015-01-15 19:20:23+00:00 +C39,send invoice,2015-01-15 19:51:21+00:00,2015-01-15 19:43:01+00:00 +C74,place order,2015-01-15 22:18:34+00:00,2015-01-15 22:14:41+00:00 +C75,place order,2015-01-16 08:47:26+00:00,2015-01-16 08:17:36+00:00 +C51,send invoice,2015-01-16 09:10:39+00:00,2015-01-16 09:03:01+00:00 +C76,place order,2015-01-16 10:19:12+00:00,2015-01-16 10:14:32+00:00 +C61,send invoice,2015-01-16 11:53:14+00:00,2015-01-16 11:46:02+00:00 +C77,place order,2015-01-16 12:10:09+00:00,2015-01-16 11:47:11+00:00 +C25,send reminder,2015-01-16 13:27:43+00:00,2015-01-16 12:43:45+00:00 +C65,send invoice,2015-01-16 13:49:11+00:00,2015-01-16 13:47:11+00:00 +C78,place order,2015-01-16 14:32:52+00:00,2015-01-16 13:52:29+00:00 +C64,send invoice,2015-01-16 15:05:02+00:00,2015-01-16 14:54:43+00:00 +C59,send invoice,2015-01-16 15:04:28+00:00,2015-01-16 14:58:25+00:00 +C69,send invoice,2015-01-16 15:23:28+00:00,2015-01-16 15:09:39+00:00 +C72,send invoice,2015-01-16 15:38:08+00:00,2015-01-16 15:32:33+00:00 +C79,place order,2015-01-16 16:14:21+00:00,2015-01-16 16:03:05+00:00 +C4,pay,2015-01-16 16:18:59+00:00,2015-01-16 16:15:02+00:00 +C23,send reminder,2015-01-16 16:50:56+00:00,2015-01-16 16:31:56+00:00 +C12,pay,2015-01-16 17:02:17+00:00,2015-01-16 16:52:44+00:00 +C18,send reminder,2015-01-16 17:24:40+00:00,2015-01-16 17:04:07+00:00 +C10,send reminder,2015-01-16 17:53:41+00:00,2015-01-16 17:21:54+00:00 +C80,place order,2015-01-16 20:58:52+00:00,2015-01-16 17:24:17+00:00 +C78,send invoice,2015-01-16 17:42:42+00:00,2015-01-16 17:35:01+00:00 +C75,send invoice,2015-01-16 22:27:59+00:00,2015-01-16 18:04:40+00:00 +C57,send invoice,2015-01-16 18:31:40+00:00,2015-01-16 18:23:40+00:00 +C81,place order,2015-01-16 19:13:31+00:00,2015-01-16 19:06:42+00:00 +C82,place order,2015-01-16 22:04:04+00:00,2015-01-16 21:49:38+00:00 +C40,send invoice,2015-01-16 22:59:34+00:00,2015-01-16 22:54:06+00:00 +C83,place order,2015-01-17 14:48:02+00:00,2015-01-17 14:41:00+00:00 +C84,place order,2015-01-18 15:04:20+00:00,2015-01-18 14:59:12+00:00 +C15,pay,2015-01-19 06:36:13+00:00,2015-01-19 06:31:58+00:00 +C85,place order,2015-01-19 08:00:55+00:00,2015-01-19 07:53:36+00:00 +C43,send invoice,2015-01-19 09:02:51+00:00,2015-01-19 08:58:59+00:00 +C2,pay,2015-01-19 10:08:51+00:00,2015-01-19 10:01:39+00:00 +C86,place order,2015-01-19 10:46:32+00:00,2015-01-19 10:41:05+00:00 +C53,send invoice,2015-01-19 11:08:45+00:00,2015-01-19 11:03:35+00:00 +C60,send invoice,2015-01-19 11:07:06+00:00,2015-01-19 11:05:02+00:00 +C37,send reminder,2015-01-19 11:40:10+00:00,2015-01-19 11:17:18+00:00 +C30,send reminder,2015-01-19 11:39:32+00:00,2015-01-19 11:22:52+00:00 +C19,pay,2015-01-19 11:39:02+00:00,2015-01-19 11:33:09+00:00 +C73,send invoice,2015-01-19 11:53:17+00:00,2015-01-19 11:45:39+00:00 +C87,place order,2015-01-19 12:46:26+00:00,2015-01-19 12:40:17+00:00 +C3,pay,2015-01-19 13:15:41+00:00,2015-01-19 13:09:13+00:00 +C55,send invoice,2015-01-19 14:22:16+00:00,2015-01-19 14:12:47+00:00 +C88,place order,2015-01-19 14:51:50+00:00,2015-01-19 14:38:42+00:00 +C54,send invoice,2015-01-19 15:00:56+00:00,2015-01-19 14:53:37+00:00 +C34,send reminder,2015-01-19 16:50:36+00:00,2015-01-19 16:28:50+00:00 +C89,place order,2015-01-19 16:47:13+00:00,2015-01-19 16:35:31+00:00 +C11,pay,2015-01-19 16:47:24+00:00,2015-01-19 16:43:19+00:00 +C24,send reminder,2015-01-19 18:08:47+00:00,2015-01-19 17:41:30+00:00 +C23,pay,2015-01-19 18:19:16+00:00,2015-01-19 18:14:51+00:00 +C90,place order,2015-01-19 18:34:38+00:00,2015-01-19 18:29:09+00:00 +C91,place order,2015-01-19 21:12:15+00:00,2015-01-19 21:03:41+00:00 +C92,place order,2015-01-20 06:28:20+00:00,2015-01-20 02:23:19+00:00 +C70,send invoice,2015-01-20 09:19:43+00:00,2015-01-20 09:13:06+00:00 +C93,place order,2015-01-20 09:43:12+00:00,2015-01-20 09:37:46+00:00 +C5,pay,2015-01-20 10:27:04+00:00,2015-01-20 10:20:47+00:00 +C67,send invoice,2015-01-20 10:27:09+00:00,2015-01-20 10:22:00+00:00 +C63,send invoice,2015-01-20 11:16:41+00:00,2015-01-20 11:10:38+00:00 +C94,place order,2015-01-20 11:46:05+00:00,2015-01-20 11:33:39+00:00 +C83,send invoice,2015-01-20 12:27:47+00:00,2015-01-20 12:21:39+00:00 +C95,place order,2015-01-20 13:32:51+00:00,2015-01-20 13:25:25+00:00 +C86,send invoice,2015-01-20 15:02:19+00:00,2015-01-20 14:54:36+00:00 +C96,place order,2015-01-20 15:35:08+00:00,2015-01-20 15:08:57+00:00 +C84,send invoice,2015-01-20 15:32:40+00:00,2015-01-20 15:26:12+00:00 +C35,send reminder,2015-01-20 15:52:06+00:00,2015-01-20 15:34:41+00:00 +C77,send invoice,2015-01-20 15:57:12+00:00,2015-01-20 15:47:55+00:00 +C12,prepare delivery,2015-01-20 16:20:56+00:00,2015-01-20 16:13:11+00:00 +C2,prepare delivery,2015-01-20 16:31:43+00:00,2015-01-20 16:28:07+00:00 +C97,place order,2015-01-20 21:18:16+00:00,2015-01-20 16:36:02+00:00 +C9,send reminder,2015-01-20 17:20:40+00:00,2015-01-20 17:04:44+00:00 +C16,pay,2015-01-20 17:32:10+00:00,2015-01-20 17:19:52+00:00 +C22,send reminder,2015-01-20 18:50:55+00:00,2015-01-20 18:09:49+00:00 +C46,send reminder,2015-01-20 18:59:32+00:00,2015-01-20 18:17:29+00:00 +C98,place order,2015-01-20 18:39:10+00:00,2015-01-20 18:30:11+00:00 +C62,send invoice,2015-01-20 19:03:18+00:00,2015-01-20 18:55:20+00:00 +C89,send invoice,2015-01-20 19:09:18+00:00,2015-01-20 19:04:01+00:00 +C74,send invoice,2015-01-20 19:49:43+00:00,2015-01-20 19:44:16+00:00 +C99,place order,2015-01-20 21:38:47+00:00,2015-01-20 21:06:47+00:00 +C82,send invoice,2015-01-20 21:51:15+00:00,2015-01-20 21:45:18+00:00 +C29,pay,2015-01-20 23:29:17+00:00,2015-01-20 23:22:08+00:00 +C100,place order,2015-01-21 02:48:39+00:00,2015-01-21 02:41:54+00:00 +C91,send invoice,2015-01-21 09:01:39+00:00,2015-01-21 08:57:04+00:00 +C18,pay,2015-01-21 09:28:34+00:00,2015-01-21 09:21:51+00:00 +C6,pay,2015-01-21 09:58:00+00:00,2015-01-21 09:53:10+00:00 +C101,place order,2015-01-21 14:54:45+00:00,2015-01-21 09:58:13+00:00 +C88,send invoice,2015-01-21 10:09:07+00:00,2015-01-21 10:00:19+00:00 +C1,prepare delivery,2015-01-21 11:07:49+00:00,2015-01-21 11:04:09+00:00 +C66,send invoice,2015-01-21 11:40:51+00:00,2015-01-21 11:24:07+00:00 +C31,send reminder,2015-01-21 11:54:15+00:00,2015-01-21 11:41:52+00:00 +C25,pay,2015-01-21 12:01:25+00:00,2015-01-21 11:52:42+00:00 +C102,place order,2015-01-21 12:19:26+00:00,2015-01-21 12:14:33+00:00 +C68,send invoice,2015-01-21 12:56:22+00:00,2015-01-21 12:49:50+00:00 +C28,pay,2015-01-21 13:51:49+00:00,2015-01-21 13:46:46+00:00 +C103,place order,2015-01-21 13:51:22+00:00,2015-01-21 13:47:13+00:00 +C27,send reminder,2015-01-21 14:23:37+00:00,2015-01-21 13:59:42+00:00 +C12,make delivery,2015-01-21 14:56:10+00:00,2015-01-21 14:41:10+00:00 +C19,prepare delivery,2015-01-21 15:46:21+00:00,2015-01-21 15:38:44+00:00 +C33,send reminder,2015-01-21 15:56:05+00:00,2015-01-21 15:45:49+00:00 +C38,send reminder,2015-01-21 16:11:42+00:00,2015-01-21 15:51:54+00:00 +C104,place order,2015-01-21 15:57:42+00:00,2015-01-21 15:52:34+00:00 +C2,make delivery,2015-01-21 17:16:07+00:00,2015-01-21 16:21:00+00:00 +C80,send invoice,2015-01-21 16:32:16+00:00,2015-01-21 16:22:30+00:00 +C37,pay,2015-01-21 19:13:29+00:00,2015-01-21 16:34:02+00:00 +C58,send reminder,2015-01-21 17:10:54+00:00,2015-01-21 16:47:02+00:00 +C85,send invoice,2015-01-21 16:57:06+00:00,2015-01-21 16:52:36+00:00 +C95,send invoice,2015-01-21 17:28:50+00:00,2015-01-21 17:24:12+00:00 +C76,send invoice,2015-01-21 18:06:45+00:00,2015-01-21 18:00:46+00:00 +C105,place order,2015-01-21 18:09:12+00:00,2015-01-21 18:03:15+00:00 +C17,pay,2015-01-21 18:16:35+00:00,2015-01-21 18:12:03+00:00 +C100,send invoice,2015-01-21 18:25:37+00:00,2015-01-21 18:21:10+00:00 +C52,send reminder,2015-01-21 18:33:38+00:00,2015-01-21 18:23:47+00:00 +C15,prepare delivery,2015-01-21 19:10:23+00:00,2015-01-21 19:03:17+00:00 +C106,place order,2015-01-21 19:58:59+00:00,2015-01-21 19:45:59+00:00 +C7,send reminder,2015-01-21 21:41:07+00:00,2015-01-21 21:28:47+00:00 +C107,place order,2015-01-21 23:19:19+00:00,2015-01-21 23:08:13+00:00 +C32,pay,2015-01-22 09:09:29+00:00,2015-01-22 08:50:56+00:00 +C108,place order,2015-01-22 09:02:17+00:00,2015-01-22 08:58:06+00:00 +C14,send reminder,2015-01-22 09:22:56+00:00,2015-01-22 08:59:23+00:00 +C18,prepare delivery,2015-01-22 09:25:40+00:00,2015-01-22 09:18:36+00:00 +C43,pay,2015-01-22 09:39:41+00:00,2015-01-22 09:34:10+00:00 +C5,prepare delivery,2015-01-22 09:54:44+00:00,2015-01-22 09:47:38+00:00 +C1,make delivery,2015-01-22 11:09:40+00:00,2015-01-22 09:51:47+00:00 +C41,send reminder,2015-01-22 11:03:19+00:00,2015-01-22 10:44:30+00:00 +C109,place order,2015-01-22 13:12:43+00:00,2015-01-22 11:15:16+00:00 +C8,pay,2015-01-22 11:36:30+00:00,2015-01-22 11:30:09+00:00 +C99,send invoice,2015-01-22 12:12:27+00:00,2015-01-22 12:08:11+00:00 +C13,send reminder,2015-01-22 12:38:14+00:00,2015-01-22 12:11:20+00:00 +C90,send invoice,2015-01-22 12:33:08+00:00,2015-01-22 12:22:08+00:00 +C1,confirm payment,2015-01-22 12:35:56+00:00,2015-01-22 12:31:22+00:00 +C110,place order,2015-01-22 17:31:28+00:00,2015-01-22 12:48:39+00:00 +C19,make delivery,2015-01-22 13:26:25+00:00,2015-01-22 12:50:28+00:00 +C26,pay,2015-01-22 13:36:12+00:00,2015-01-22 13:20:21+00:00 +C7,cancel order,2015-01-22 14:18:35+00:00,2015-01-22 13:51:24+00:00 +C12,confirm payment,2015-01-22 14:04:25+00:00,2015-01-22 13:59:17+00:00 +C101,send invoice,2015-01-22 14:07:28+00:00,2015-01-22 14:02:50+00:00 +C111,place order,2015-01-22 15:02:48+00:00,2015-01-22 14:55:25+00:00 +C2,confirm payment,2015-01-22 15:23:33+00:00,2015-01-22 15:15:20+00:00 +C15,confirm payment,2015-01-22 15:48:46+00:00,2015-01-22 15:39:55+00:00 +C46,pay,2015-01-22 16:29:31+00:00,2015-01-22 16:22:23+00:00 +C20,send reminder,2015-01-22 16:48:08+00:00,2015-01-22 16:26:04+00:00 +C112,place order,2015-01-22 17:14:26+00:00,2015-01-22 17:08:57+00:00 +C21,send reminder,2015-01-22 17:31:10+00:00,2015-01-22 17:09:50+00:00 +C49,pay,2015-01-22 21:20:25+00:00,2015-01-22 17:33:07+00:00 +C19,confirm payment,2015-01-22 17:42:21+00:00,2015-01-22 17:37:00+00:00 +C113,place order,2015-01-22 21:13:49+00:00,2015-01-22 18:36:02+00:00 +C51,send reminder,2015-01-22 19:19:35+00:00,2015-01-22 19:07:58+00:00 +C18,make delivery,2015-01-22 19:29:18+00:00,2015-01-22 19:12:57+00:00 +C15,make delivery,2015-01-22 21:32:41+00:00,2015-01-22 20:42:44+00:00 +C39,send reminder,2015-01-22 21:30:36+00:00,2015-01-22 21:07:49+00:00 +C114,place order,2015-01-22 21:27:50+00:00,2015-01-22 21:24:20+00:00 +C115,place order,2015-01-23 04:37:48+00:00,2015-01-23 04:27:12+00:00 +C61,send reminder,2015-01-23 10:19:07+00:00,2015-01-23 09:45:05+00:00 +C116,place order,2015-01-23 10:08:22+00:00,2015-01-23 09:54:03+00:00 +C48,send reminder,2015-01-23 10:43:31+00:00,2015-01-23 10:04:22+00:00 +C36,pay,2015-01-23 10:15:52+00:00,2015-01-23 10:10:56+00:00 +C81,send invoice,2015-01-23 11:30:28+00:00,2015-01-23 11:26:43+00:00 +C5,make delivery,2015-01-23 11:51:43+00:00,2015-01-23 11:39:48+00:00 +C33,pay,2015-01-23 11:52:04+00:00,2015-01-23 11:46:05+00:00 +C97,send invoice,2015-01-23 12:00:18+00:00,2015-01-23 11:50:42+00:00 +C96,send invoice,2015-01-23 12:08:19+00:00,2015-01-23 12:02:13+00:00 +C117,place order,2015-01-23 12:11:19+00:00,2015-01-23 12:06:13+00:00 +C59,send reminder,2015-01-23 12:29:03+00:00,2015-01-23 12:19:01+00:00 +C29,prepare delivery,2015-01-23 14:45:49+00:00,2015-01-23 12:21:07+00:00 +C13,pay,2015-01-23 12:28:12+00:00,2015-01-23 12:22:24+00:00 +C79,send invoice,2015-01-23 12:33:48+00:00,2015-01-23 12:26:49+00:00 +C118,place order,2015-01-23 13:36:41+00:00,2015-01-23 13:30:33+00:00 +C105,send invoice,2015-01-23 14:29:28+00:00,2015-01-23 14:26:10+00:00 +C9,cancel order,2015-01-23 15:02:54+00:00,2015-01-23 14:47:05+00:00 +C71,send invoice,2015-01-23 15:10:20+00:00,2015-01-23 15:03:39+00:00 +C119,place order,2015-01-23 15:28:05+00:00,2015-01-23 15:19:13+00:00 +C5,confirm payment,2015-01-23 15:29:12+00:00,2015-01-23 15:21:06+00:00 +C10,send reminder,2015-01-23 15:50:06+00:00,2015-01-23 15:37:19+00:00 +C3,prepare delivery,2015-01-23 16:15:34+00:00,2015-01-23 16:12:03+00:00 +C94,send invoice,2015-01-23 16:22:11+00:00,2015-01-23 16:16:53+00:00 +C42,pay,2015-01-23 16:35:44+00:00,2015-01-23 16:23:06+00:00 +C93,send invoice,2015-01-23 16:48:00+00:00,2015-01-23 16:40:39+00:00 +C120,place order,2015-01-23 17:02:40+00:00,2015-01-23 16:56:34+00:00 +C65,send reminder,2015-01-23 17:32:25+00:00,2015-01-23 17:17:39+00:00 +C16,prepare delivery,2015-01-23 17:57:07+00:00,2015-01-23 17:31:02+00:00 +C44,pay,2015-01-23 17:51:02+00:00,2015-01-23 17:42:30+00:00 +C25,prepare delivery,2015-01-23 18:31:03+00:00,2015-01-23 18:23:43+00:00 +C110,send invoice,2015-01-23 18:54:13+00:00,2015-01-23 18:47:28+00:00 +C40,send reminder,2015-01-23 19:26:43+00:00,2015-01-23 19:10:19+00:00 +C121,place order,2015-01-23 19:17:41+00:00,2015-01-23 19:11:15+00:00 +C27,pay,2015-01-23 19:37:45+00:00,2015-01-23 19:31:42+00:00 +C64,send reminder,2015-01-23 20:45:47+00:00,2015-01-23 20:28:06+00:00 +C122,place order,2015-01-23 22:11:49+00:00,2015-01-23 21:58:44+00:00 +C57,pay,2015-01-24 10:20:09+00:00,2015-01-24 10:16:29+00:00 +C123,place order,2015-01-24 15:43:10+00:00,2015-01-24 15:35:36+00:00 +C124,place order,2015-01-25 15:53:25+00:00,2015-01-25 15:48:24+00:00 +C53,send reminder,2015-01-26 08:35:24+00:00,2015-01-26 08:15:40+00:00 +C125,place order,2015-01-26 10:16:08+00:00,2015-01-26 08:32:01+00:00 +C18,confirm payment,2015-01-26 09:10:49+00:00,2015-01-26 09:03:31+00:00 +C98,send invoice,2015-01-26 09:44:09+00:00,2015-01-26 09:37:02+00:00 +C109,send invoice,2015-01-26 09:57:05+00:00,2015-01-26 09:49:03+00:00 +C78,send reminder,2015-01-26 10:48:53+00:00,2015-01-26 10:08:50+00:00 +C38,pay,2015-01-26 10:39:31+00:00,2015-01-26 10:34:56+00:00 +C126,place order,2015-01-26 10:49:15+00:00,2015-01-26 10:36:08+00:00 +C4,prepare delivery,2015-01-26 10:53:16+00:00,2015-01-26 10:45:21+00:00 +C29,make delivery,2015-01-26 11:36:13+00:00,2015-01-26 10:58:08+00:00 +C122,send invoice,2015-01-26 11:29:31+00:00,2015-01-26 11:23:44+00:00 +C14,pay,2015-01-26 11:49:58+00:00,2015-01-26 11:43:43+00:00 +C115,send invoice,2015-01-26 11:57:43+00:00,2015-01-26 11:49:26+00:00 +C127,place order,2015-01-26 12:36:09+00:00,2015-01-26 12:30:23+00:00 +C102,send invoice,2015-01-26 12:49:09+00:00,2015-01-26 12:32:56+00:00 +C51,pay,2015-01-26 12:43:30+00:00,2015-01-26 12:35:35+00:00 +C3,confirm payment,2015-01-26 14:06:26+00:00,2015-01-26 13:59:21+00:00 +C128,place order,2015-01-26 14:32:31+00:00,2015-01-26 14:18:54+00:00 +C92,send invoice,2015-01-26 14:43:08+00:00,2015-01-26 14:38:07+00:00 +C29,confirm payment,2015-01-26 15:17:33+00:00,2015-01-26 15:09:05+00:00 +C30,send reminder,2015-01-26 15:39:14+00:00,2015-01-26 15:16:40+00:00 +C87,send invoice,2015-01-26 15:37:46+00:00,2015-01-26 15:29:46+00:00 +C25,confirm payment,2015-01-26 15:37:54+00:00,2015-01-26 15:34:06+00:00 +C129,place order,2015-01-26 16:13:54+00:00,2015-01-26 15:55:55+00:00 +C34,send reminder,2015-01-26 16:19:28+00:00,2015-01-26 16:03:30+00:00 +C3,make delivery,2015-01-26 16:46:11+00:00,2015-01-26 16:08:31+00:00 +C103,send invoice,2015-01-26 16:17:47+00:00,2015-01-26 16:10:12+00:00 +C70,send reminder,2015-01-26 16:37:02+00:00,2015-01-26 16:19:02+00:00 +C111,send invoice,2015-01-26 16:24:13+00:00,2015-01-26 16:21:45+00:00 +C25,make delivery,2015-01-26 18:16:26+00:00,2015-01-26 16:51:17+00:00 +C106,send invoice,2015-01-26 17:44:16+00:00,2015-01-26 17:19:00+00:00 +C130,place order,2015-01-26 18:14:51+00:00,2015-01-26 18:09:57+00:00 +C43,prepare delivery,2015-01-26 18:53:21+00:00,2015-01-26 18:50:15+00:00 +C47,pay,2015-01-26 20:11:36+00:00,2015-01-26 20:05:16+00:00 +C131,place order,2015-01-26 20:16:23+00:00,2015-01-26 20:06:06+00:00 +C20,cancel order,2015-01-26 22:37:26+00:00,2015-01-26 22:13:16+00:00 +C24,send reminder,2015-01-26 22:48:18+00:00,2015-01-26 22:38:03+00:00 +C132,place order,2015-01-26 23:12:35+00:00,2015-01-26 22:48:26+00:00 +C56,pay,2015-01-27 07:47:43+00:00,2015-01-27 07:40:47+00:00 +C16,make delivery,2015-01-27 09:11:18+00:00,2015-01-27 08:58:20+00:00 +C41,pay,2015-01-27 09:29:50+00:00,2015-01-27 09:17:04+00:00 +C52,pay,2015-01-27 09:29:08+00:00,2015-01-27 09:23:47+00:00 +C133,place order,2015-01-27 09:31:19+00:00,2015-01-27 09:25:06+00:00 +C23,prepare delivery,2015-01-27 09:37:53+00:00,2015-01-27 09:34:20+00:00 +C39,pay,2015-01-27 10:07:32+00:00,2015-01-27 09:58:52+00:00 +C4,make delivery,2015-01-27 10:20:03+00:00,2015-01-27 10:10:02+00:00 +C26,prepare delivery,2015-01-27 10:52:23+00:00,2015-01-27 10:25:58+00:00 +C17,prepare delivery,2015-01-27 10:43:41+00:00,2015-01-27 10:36:27+00:00 +C134,place order,2015-01-27 11:13:13+00:00,2015-01-27 11:08:20+00:00 +C117,send invoice,2015-01-27 11:33:17+00:00,2015-01-27 11:28:40+00:00 +C107,send invoice,2015-01-27 11:32:46+00:00,2015-01-27 11:29:54+00:00 +C27,prepare delivery,2015-01-27 11:39:18+00:00,2015-01-27 11:32:15+00:00 +C108,send invoice,2015-01-27 11:39:00+00:00,2015-01-27 11:34:44+00:00 +C4,confirm payment,2015-01-27 15:06:02+00:00,2015-01-27 11:47:49+00:00 +C114,send invoice,2015-01-27 12:01:24+00:00,2015-01-27 11:53:40+00:00 +C104,send invoice,2015-01-27 12:24:32+00:00,2015-01-27 12:17:26+00:00 +C44,prepare delivery,2015-01-27 12:26:09+00:00,2015-01-27 12:19:41+00:00 +C135,place order,2015-01-27 12:44:15+00:00,2015-01-27 12:34:47+00:00 +C64,pay,2015-01-27 12:42:59+00:00,2015-01-27 12:37:18+00:00 +C6,prepare delivery,2015-01-27 12:57:09+00:00,2015-01-27 12:49:11+00:00 +C63,send reminder,2015-01-27 13:52:35+00:00,2015-01-27 13:31:56+00:00 +C67,send reminder,2015-01-27 13:53:44+00:00,2015-01-27 13:34:21+00:00 +C84,send reminder,2015-01-27 13:51:39+00:00,2015-01-27 13:38:14+00:00 +C28,prepare delivery,2015-01-27 14:32:30+00:00,2015-01-27 14:25:13+00:00 +C136,place order,2015-01-27 14:35:57+00:00,2015-01-27 14:27:41+00:00 +C116,send invoice,2015-01-27 14:53:07+00:00,2015-01-27 14:50:42+00:00 +C51,prepare delivery,2015-01-27 15:05:09+00:00,2015-01-27 14:57:30+00:00 +C21,pay,2015-01-27 15:18:09+00:00,2015-01-27 15:13:40+00:00 +C40,pay,2015-01-27 15:40:32+00:00,2015-01-27 15:31:47+00:00 +C16,confirm payment,2015-01-27 15:45:26+00:00,2015-01-27 15:37:02+00:00 +C57,prepare delivery,2015-01-27 15:41:11+00:00,2015-01-27 15:38:16+00:00 +C33,prepare delivery,2015-01-27 15:42:33+00:00,2015-01-27 15:38:55+00:00 +C126,send invoice,2015-01-27 16:04:34+00:00,2015-01-27 15:57:33+00:00 +C137,place order,2015-01-27 16:20:24+00:00,2015-01-27 16:13:29+00:00 +C30,cancel order,2015-01-27 16:27:02+00:00,2015-01-27 16:16:10+00:00 +C11,prepare delivery,2015-01-27 16:38:56+00:00,2015-01-27 16:35:14+00:00 +C86,send reminder,2015-01-27 16:57:57+00:00,2015-01-27 16:38:11+00:00 +C43,make delivery,2015-01-27 16:50:28+00:00,2015-01-27 16:39:39+00:00 +C121,send invoice,2015-01-27 17:03:09+00:00,2015-01-27 16:54:13+00:00 +C89,send reminder,2015-01-27 17:31:43+00:00,2015-01-27 17:10:54+00:00 +C35,send reminder,2015-01-27 17:32:13+00:00,2015-01-27 17:17:48+00:00 +C77,send reminder,2015-01-27 18:00:19+00:00,2015-01-27 17:38:50+00:00 +C138,place order,2015-01-27 17:55:10+00:00,2015-01-27 17:45:05+00:00 +C132,send invoice,2015-01-27 18:25:47+00:00,2015-01-27 18:19:58+00:00 +C43,confirm payment,2015-01-27 18:52:05+00:00,2015-01-27 18:43:23+00:00 +C8,prepare delivery,2015-01-27 18:47:37+00:00,2015-01-27 18:43:59+00:00 +C36,prepare delivery,2015-01-27 19:35:27+00:00,2015-01-27 19:28:46+00:00 +C139,place order,2015-01-27 20:04:47+00:00,2015-01-27 19:51:30+00:00 +C17,make delivery,2015-01-27 23:34:32+00:00,2015-01-27 22:12:05+00:00 +C140,place order,2015-01-27 23:28:19+00:00,2015-01-27 23:19:14+00:00 +C141,place order,2015-01-28 09:18:12+00:00,2015-01-28 09:11:20+00:00 +C26,confirm payment,2015-01-28 09:40:40+00:00,2015-01-28 09:33:12+00:00 +C66,send reminder,2015-01-28 10:05:08+00:00,2015-01-28 09:39:01+00:00 +C38,prepare delivery,2015-01-28 09:53:29+00:00,2015-01-28 09:39:10+00:00 +C44,make delivery,2015-01-28 10:34:32+00:00,2015-01-28 09:40:49+00:00 +C17,confirm payment,2015-01-28 09:58:54+00:00,2015-01-28 09:53:39+00:00 +C34,pay,2015-01-28 10:17:47+00:00,2015-01-28 10:04:45+00:00 +C23,make delivery,2015-01-28 11:29:31+00:00,2015-01-28 10:36:45+00:00 +C142,place order,2015-01-28 10:45:21+00:00,2015-01-28 10:40:47+00:00 +C26,make delivery,2015-01-28 11:00:24+00:00,2015-01-28 10:45:55+00:00 +C22,send reminder,2015-01-28 11:31:38+00:00,2015-01-28 10:50:00+00:00 +C27,make delivery,2015-01-28 11:25:58+00:00,2015-01-28 10:59:32+00:00 +C91,send reminder,2015-01-28 11:11:01+00:00,2015-01-28 11:02:33+00:00 +C68,send reminder,2015-01-28 11:23:26+00:00,2015-01-28 11:02:55+00:00 +C49,prepare delivery,2015-01-28 11:50:51+00:00,2015-01-28 11:25:28+00:00 +C6,make delivery,2015-01-28 11:45:54+00:00,2015-01-28 11:28:52+00:00 +C124,send invoice,2015-01-28 14:18:59+00:00,2015-01-28 11:34:14+00:00 +C61,pay,2015-01-28 11:55:13+00:00,2015-01-28 11:49:25+00:00 +C78,pay,2015-01-28 11:56:34+00:00,2015-01-28 11:52:58+00:00 +C119,send invoice,2015-01-28 12:07:29+00:00,2015-01-28 12:00:05+00:00 +C143,place order,2015-01-28 12:46:19+00:00,2015-01-28 12:39:41+00:00 +C50,pay,2015-01-28 12:48:30+00:00,2015-01-28 12:43:43+00:00 +C131,send invoice,2015-01-28 12:59:35+00:00,2015-01-28 12:53:07+00:00 +C57,confirm payment,2015-01-28 13:26:29+00:00,2015-01-28 13:17:41+00:00 +C31,send reminder,2015-01-28 13:45:04+00:00,2015-01-28 13:23:57+00:00 +C28,make delivery,2015-01-28 14:15:06+00:00,2015-01-28 13:47:02+00:00 +C55,pay,2015-01-28 14:21:26+00:00,2015-01-28 14:17:37+00:00 +C57,make delivery,2015-01-28 14:54:58+00:00,2015-01-28 14:24:22+00:00 +C144,place order,2015-01-28 14:42:16+00:00,2015-01-28 14:37:29+00:00 +C80,send reminder,2015-01-28 15:17:11+00:00,2015-01-28 14:37:47+00:00 +C54,pay,2015-01-28 14:52:27+00:00,2015-01-28 14:46:01+00:00 +C23,confirm payment,2015-01-28 14:59:18+00:00,2015-01-28 14:54:24+00:00 +C11,confirm payment,2015-01-28 15:05:55+00:00,2015-01-28 14:57:17+00:00 +C95,send reminder,2015-01-28 15:14:08+00:00,2015-01-28 15:06:22+00:00 +C62,pay,2015-01-28 15:24:22+00:00,2015-01-28 15:16:07+00:00 +C24,cancel order,2015-01-28 15:33:59+00:00,2015-01-28 15:17:01+00:00 +C6,confirm payment,2015-01-28 15:31:48+00:00,2015-01-28 15:25:17+00:00 +C11,make delivery,2015-01-28 15:55:21+00:00,2015-01-28 15:38:54+00:00 +C33,make delivery,2015-01-28 15:59:36+00:00,2015-01-28 15:46:15+00:00 +C76,send reminder,2015-01-28 16:10:14+00:00,2015-01-28 15:47:28+00:00 +C10,pay,2015-01-28 16:11:42+00:00,2015-01-28 16:03:06+00:00 +C8,make delivery,2015-01-28 17:49:11+00:00,2015-01-28 16:18:16+00:00 +C37,prepare delivery,2015-01-28 16:31:36+00:00,2015-01-28 16:27:40+00:00 +C36,make delivery,2015-01-28 17:58:14+00:00,2015-01-28 16:27:42+00:00 +C51,make delivery,2015-01-28 16:58:24+00:00,2015-01-28 16:28:47+00:00 +C145,place order,2015-01-28 16:43:58+00:00,2015-01-28 16:33:05+00:00 +C27,confirm payment,2015-01-28 16:50:16+00:00,2015-01-28 16:40:27+00:00 +C85,send reminder,2015-01-28 17:10:46+00:00,2015-01-28 16:53:31+00:00 +C77,pay,2015-01-28 17:06:35+00:00,2015-01-28 16:59:45+00:00 +C144,send invoice,2015-01-28 17:30:56+00:00,2015-01-28 17:21:45+00:00 +C51,confirm payment,2015-01-28 17:45:21+00:00,2015-01-28 17:37:11+00:00 +C71,pay,2015-01-28 18:21:06+00:00,2015-01-28 18:17:11+00:00 +C146,place order,2015-01-28 20:10:46+00:00,2015-01-28 18:24:18+00:00 +C56,prepare delivery,2015-01-28 20:58:25+00:00,2015-01-28 18:35:24+00:00 +C28,confirm payment,2015-01-28 19:17:12+00:00,2015-01-28 19:07:29+00:00 +C147,place order,2015-01-28 20:55:12+00:00,2015-01-28 20:49:08+00:00 +C38,make delivery,2015-01-28 21:50:16+00:00,2015-01-28 21:36:27+00:00 +C148,place order,2015-01-29 02:01:21+00:00,2015-01-29 01:56:00+00:00 +C127,send invoice,2015-01-29 08:44:45+00:00,2015-01-29 08:32:08+00:00 +C46,prepare delivery,2015-01-29 08:40:05+00:00,2015-01-29 08:32:14+00:00 +C58,send reminder,2015-01-29 09:18:43+00:00,2015-01-29 09:04:33+00:00 +C59,pay,2015-01-29 09:29:26+00:00,2015-01-29 09:22:52+00:00 +C33,confirm payment,2015-01-29 09:49:15+00:00,2015-01-29 09:37:47+00:00 +C42,prepare delivery,2015-01-29 09:44:43+00:00,2015-01-29 09:40:51+00:00 +C49,make delivery,2015-01-29 10:05:49+00:00,2015-01-29 09:50:19+00:00 +C149,place order,2015-01-29 13:21:18+00:00,2015-01-29 10:07:43+00:00 +C118,send invoice,2015-01-29 10:26:14+00:00,2015-01-29 10:19:04+00:00 +C40,prepare delivery,2015-01-29 10:40:38+00:00,2015-01-29 10:32:59+00:00 +C44,confirm payment,2015-01-29 10:57:24+00:00,2015-01-29 10:50:22+00:00 +C134,send invoice,2015-01-29 14:13:15+00:00,2015-01-29 11:01:49+00:00 +C79,pay,2015-01-29 11:12:03+00:00,2015-01-29 11:05:35+00:00 +C8,confirm payment,2015-01-29 11:14:22+00:00,2015-01-29 11:06:16+00:00 +C112,send invoice,2015-01-29 11:21:11+00:00,2015-01-29 11:13:47+00:00 +C150,place order,2015-01-29 11:43:00+00:00,2015-01-29 11:33:34+00:00 +C113,send invoice,2015-01-29 11:42:22+00:00,2015-01-29 11:37:12+00:00 +C120,send invoice,2015-01-29 11:44:41+00:00,2015-01-29 11:40:12+00:00 +C45,pay,2015-01-29 12:28:29+00:00,2015-01-29 12:20:17+00:00 +C36,confirm payment,2015-01-29 12:37:54+00:00,2015-01-29 12:30:39+00:00 +C151,place order,2015-01-29 14:05:20+00:00,2015-01-29 13:25:15+00:00 +C55,prepare delivery,2015-01-29 17:04:41+00:00,2015-01-29 14:28:23+00:00 +C75,pay,2015-01-29 14:40:29+00:00,2015-01-29 14:36:01+00:00 +C149,send invoice,2015-01-29 15:09:43+00:00,2015-01-29 15:02:04+00:00 +C90,send reminder,2015-01-29 15:26:38+00:00,2015-01-29 15:07:28+00:00 +C152,place order,2015-01-29 15:23:27+00:00,2015-01-29 15:08:37+00:00 +C13,prepare delivery,2015-01-29 18:02:07+00:00,2015-01-29 15:22:59+00:00 +C135,send invoice,2015-01-29 15:34:11+00:00,2015-01-29 15:29:56+00:00 +C56,make delivery,2015-01-29 17:08:09+00:00,2015-01-29 16:14:15+00:00 +C74,pay,2015-01-29 16:37:19+00:00,2015-01-29 16:32:09+00:00 +C153,place order,2015-01-29 16:40:08+00:00,2015-01-29 16:35:21+00:00 +C14,prepare delivery,2015-01-29 17:21:56+00:00,2015-01-29 17:14:19+00:00 +C46,make delivery,2015-01-29 18:00:48+00:00,2015-01-29 17:46:43+00:00 +C37,make delivery,2015-01-29 19:00:33+00:00,2015-01-29 18:26:55+00:00 +C80,pay,2015-01-29 18:36:28+00:00,2015-01-29 18:28:18+00:00 +C154,place order,2015-01-29 21:03:25+00:00,2015-01-29 18:28:49+00:00 +C39,prepare delivery,2015-01-29 21:08:57+00:00,2015-01-29 18:48:52+00:00 +C38,confirm payment,2015-01-29 19:16:56+00:00,2015-01-29 19:10:20+00:00 +C60,pay,2015-01-29 19:16:58+00:00,2015-01-29 19:14:55+00:00 +C155,place order,2015-01-29 21:08:48+00:00,2015-01-29 21:02:42+00:00 +C156,place order,2015-01-30 02:30:16+00:00,2015-01-30 02:17:24+00:00 +C95,pay,2015-01-30 08:29:26+00:00,2015-01-30 08:24:19+00:00 +C137,send invoice,2015-01-30 08:38:16+00:00,2015-01-30 08:30:22+00:00 +C48,send reminder,2015-01-30 09:01:25+00:00,2015-01-30 08:46:21+00:00 +C123,send invoice,2015-01-30 09:18:47+00:00,2015-01-30 09:09:39+00:00 +C64,prepare delivery,2015-01-30 09:18:56+00:00,2015-01-30 09:11:50+00:00 +C157,place order,2015-01-30 09:34:59+00:00,2015-01-30 09:31:16+00:00 +C49,confirm payment,2015-01-30 10:00:36+00:00,2015-01-30 09:51:56+00:00 +C42,make delivery,2015-01-30 10:22:42+00:00,2015-01-30 10:08:10+00:00 +C129,send invoice,2015-01-30 10:27:19+00:00,2015-01-30 10:14:21+00:00 +C47,prepare delivery,2015-01-30 10:24:15+00:00,2015-01-30 10:18:00+00:00 +C32,prepare delivery,2015-01-30 11:04:14+00:00,2015-01-30 10:42:17+00:00 +C10,prepare delivery,2015-01-30 11:11:33+00:00,2015-01-30 11:08:01+00:00 +C139,send invoice,2015-01-30 11:26:48+00:00,2015-01-30 11:20:04+00:00 +C158,place order,2015-01-30 16:11:08+00:00,2015-01-30 11:20:39+00:00 +C50,prepare delivery,2015-01-30 11:25:49+00:00,2015-01-30 11:22:08+00:00 +C130,send invoice,2015-01-30 11:35:57+00:00,2015-01-30 11:31:17+00:00 +C40,make delivery,2015-01-30 11:52:39+00:00,2015-01-30 11:36:50+00:00 +C69,pay,2015-01-30 11:39:11+00:00,2015-01-30 11:37:05+00:00 +C89,pay,2015-01-30 11:53:15+00:00,2015-01-30 11:41:52+00:00 +C142,send invoice,2015-01-30 12:38:32+00:00,2015-01-30 12:34:02+00:00 +C159,place order,2015-01-30 13:06:39+00:00,2015-01-30 12:59:25+00:00 +C37,confirm payment,2015-01-30 18:11:04+00:00,2015-01-30 13:52:37+00:00 +C140,send invoice,2015-01-30 14:09:04+00:00,2015-01-30 14:05:43+00:00 +C96,send reminder,2015-01-30 14:19:11+00:00,2015-01-30 14:07:12+00:00 +C55,make delivery,2015-01-30 14:52:43+00:00,2015-01-30 14:25:03+00:00 +C58,pay,2015-01-30 14:30:17+00:00,2015-01-30 14:25:38+00:00 +C34,prepare delivery,2015-01-30 14:34:26+00:00,2015-01-30 14:30:39+00:00 +C97,pay,2015-01-30 14:58:02+00:00,2015-01-30 14:54:39+00:00 +C72,pay,2015-01-30 15:16:42+00:00,2015-01-30 15:09:59+00:00 +C160,place order,2015-01-30 15:26:29+00:00,2015-01-30 15:16:57+00:00 +C56,confirm payment,2015-01-30 15:57:40+00:00,2015-01-30 15:51:43+00:00 +C81,send reminder,2015-01-30 16:11:10+00:00,2015-01-30 15:53:48+00:00 +C13,make delivery,2015-01-30 17:15:25+00:00,2015-01-30 15:54:48+00:00 +C14,make delivery,2015-01-30 16:27:24+00:00,2015-01-30 16:11:37+00:00 +C151,send invoice,2015-01-30 19:49:27+00:00,2015-01-30 16:20:21+00:00 +C105,send reminder,2015-01-30 16:49:03+00:00,2015-01-30 16:37:28+00:00 +C64,confirm payment,2015-01-30 16:47:34+00:00,2015-01-30 16:43:07+00:00 +C161,place order,2015-01-30 16:58:11+00:00,2015-01-30 16:52:01+00:00 +C86,pay,2015-01-30 17:08:48+00:00,2015-01-30 17:02:00+00:00 +C46,confirm payment,2015-01-30 17:14:12+00:00,2015-01-30 17:05:26+00:00 +C143,send invoice,2015-01-30 17:23:52+00:00,2015-01-30 17:15:23+00:00 +C22,pay,2015-01-30 17:33:16+00:00,2015-01-30 17:26:34+00:00 +C77,prepare delivery,2015-01-30 18:04:33+00:00,2015-01-30 18:01:38+00:00 +C53,send reminder,2015-01-30 18:24:26+00:00,2015-01-30 18:12:41+00:00 +C31,cancel order,2015-01-30 18:20:14+00:00,2015-01-30 18:12:48+00:00 +C21,prepare delivery,2015-01-30 18:46:20+00:00,2015-01-30 18:38:54+00:00 +C162,place order,2015-01-30 19:04:43+00:00,2015-01-30 19:02:10+00:00 +C150,send invoice,2015-01-30 20:39:51+00:00,2015-01-30 20:31:14+00:00 +C39,make delivery,2015-01-30 21:09:29+00:00,2015-01-30 21:00:08+00:00 +C163,place order,2015-01-30 21:48:10+00:00,2015-01-30 21:40:34+00:00 +C164,place order,2015-01-31 13:50:07+00:00,2015-01-31 13:46:36+00:00 +C165,place order,2015-02-01 16:22:28+00:00,2015-02-01 14:10:24+00:00 +C166,place order,2015-02-02 06:30:46+00:00,2015-02-02 06:16:00+00:00 +C73,pay,2015-02-02 08:44:40+00:00,2015-02-02 08:40:29+00:00 +C47,make delivery,2015-02-02 09:51:12+00:00,2015-02-02 09:24:35+00:00 +C40,confirm payment,2015-02-02 09:29:12+00:00,2015-02-02 09:26:42+00:00 +C13,confirm payment,2015-02-02 09:43:23+00:00,2015-02-02 09:36:03+00:00 +C65,send reminder,2015-02-02 10:03:49+00:00,2015-02-02 09:38:57+00:00 +C52,prepare delivery,2015-02-02 09:48:20+00:00,2015-02-02 09:40:32+00:00 +C93,send reminder,2015-02-02 10:01:38+00:00,2015-02-02 09:52:46+00:00 +C167,place order,2015-02-02 09:58:26+00:00,2015-02-02 09:53:44+00:00 +C32,confirm payment,2015-02-02 10:07:06+00:00,2015-02-02 10:01:17+00:00 +C42,confirm payment,2015-02-02 10:28:04+00:00,2015-02-02 10:20:21+00:00 +C32,make delivery,2015-02-02 10:37:55+00:00,2015-02-02 10:27:47+00:00 +C10,make delivery,2015-02-02 11:23:34+00:00,2015-02-02 10:56:19+00:00 +C64,make delivery,2015-02-02 11:12:13+00:00,2015-02-02 10:56:21+00:00 +C125,send invoice,2015-02-02 11:02:27+00:00,2015-02-02 10:58:20+00:00 +C82,pay,2015-02-02 11:49:21+00:00,2015-02-02 11:41:07+00:00 +C50,make delivery,2015-02-02 12:08:15+00:00,2015-02-02 11:52:44+00:00 +C71,prepare delivery,2015-02-02 12:02:25+00:00,2015-02-02 11:55:15+00:00 +C78,prepare delivery,2015-02-02 12:08:40+00:00,2015-02-02 12:04:44+00:00 +C168,place order,2015-02-02 12:34:55+00:00,2015-02-02 12:05:35+00:00 +C115,send reminder,2015-02-02 12:31:04+00:00,2015-02-02 12:24:31+00:00 +C34,confirm payment,2015-02-02 12:58:17+00:00,2015-02-02 12:51:51+00:00 +C83,pay,2015-02-02 13:05:12+00:00,2015-02-02 12:56:58+00:00 +C75,prepare delivery,2015-02-02 13:22:33+00:00,2015-02-02 13:15:17+00:00 +C128,send invoice,2015-02-02 13:25:52+00:00,2015-02-02 13:17:39+00:00 +C169,place order,2015-02-02 13:34:30+00:00,2015-02-02 13:29:17+00:00 +C152,send invoice,2015-02-02 15:05:07+00:00,2015-02-02 15:01:11+00:00 +C39,confirm payment,2015-02-02 15:19:32+00:00,2015-02-02 15:12:19+00:00 +C34,make delivery,2015-02-02 15:26:35+00:00,2015-02-02 15:12:28+00:00 +C170,place order,2015-02-02 19:02:35+00:00,2015-02-02 15:16:41+00:00 +C110,pay,2015-02-02 15:40:30+00:00,2015-02-02 15:25:23+00:00 +C55,confirm payment,2015-02-02 15:33:27+00:00,2015-02-02 15:29:05+00:00 +C50,confirm payment,2015-02-02 19:44:21+00:00,2015-02-02 15:32:03+00:00 +C122,send reminder,2015-02-02 15:51:39+00:00,2015-02-02 15:33:45+00:00 +C61,prepare delivery,2015-02-02 15:52:37+00:00,2015-02-02 15:46:26+00:00 +C21,confirm payment,2015-02-02 16:07:09+00:00,2015-02-02 16:00:03+00:00 +C87,send reminder,2015-02-02 16:26:06+00:00,2015-02-02 16:04:44+00:00 +C21,make delivery,2015-02-02 16:27:09+00:00,2015-02-02 16:12:03+00:00 +C92,send reminder,2015-02-02 16:33:44+00:00,2015-02-02 16:16:21+00:00 +C171,place order,2015-02-02 17:02:49+00:00,2015-02-02 16:51:29+00:00 +C77,make delivery,2015-02-02 17:14:37+00:00,2015-02-02 16:59:36+00:00 +C98,pay,2015-02-02 17:09:40+00:00,2015-02-02 17:01:30+00:00 +C96,pay,2015-02-02 17:30:54+00:00,2015-02-02 17:28:01+00:00 +C14,confirm payment,2015-02-02 18:49:16+00:00,2015-02-02 18:38:35+00:00 +C103,send reminder,2015-02-02 18:56:15+00:00,2015-02-02 18:38:39+00:00 +C111,send reminder,2015-02-02 19:24:02+00:00,2015-02-02 18:50:14+00:00 +C172,place order,2015-02-02 19:04:42+00:00,2015-02-02 19:01:06+00:00 +C97,prepare delivery,2015-02-02 19:22:31+00:00,2015-02-02 19:15:06+00:00 +C136,send invoice,2015-02-02 20:19:43+00:00,2015-02-02 20:14:28+00:00 +C145,send invoice,2015-02-02 21:14:29+00:00,2015-02-02 21:12:18+00:00 +C173,place order,2015-02-02 21:44:37+00:00,2015-02-02 21:38:26+00:00 +C174,place order,2015-02-03 08:51:39+00:00,2015-02-03 05:51:48+00:00 +C106,pay,2015-02-03 06:12:21+00:00,2015-02-03 06:07:14+00:00 +C95,prepare delivery,2015-02-03 08:46:15+00:00,2015-02-03 08:43:07+00:00 +C62,prepare delivery,2015-02-03 09:24:34+00:00,2015-02-03 09:18:52+00:00 +C10,confirm payment,2015-02-03 10:09:05+00:00,2015-02-03 09:48:23+00:00 +C146,send invoice,2015-02-03 10:19:51+00:00,2015-02-03 09:54:24+00:00 +C72,prepare delivery,2015-02-03 10:05:50+00:00,2015-02-03 09:59:09+00:00 +C60,prepare delivery,2015-02-03 10:09:27+00:00,2015-02-03 10:05:28+00:00 +C70,send reminder,2015-02-03 10:20:51+00:00,2015-02-03 10:09:50+00:00 +C175,place order,2015-02-03 10:39:59+00:00,2015-02-03 10:27:06+00:00 +C35,pay,2015-02-03 10:34:03+00:00,2015-02-03 10:27:13+00:00 +C78,make delivery,2015-02-03 10:57:41+00:00,2015-02-03 10:40:07+00:00 +C47,confirm payment,2015-02-03 10:56:20+00:00,2015-02-03 10:49:43+00:00 +C52,make delivery,2015-02-03 11:21:00+00:00,2015-02-03 11:05:50+00:00 +C71,confirm payment,2015-02-03 11:25:23+00:00,2015-02-03 11:19:17+00:00 +C45,prepare delivery,2015-02-03 11:26:39+00:00,2015-02-03 11:22:48+00:00 +C162,send invoice,2015-02-03 14:23:12+00:00,2015-02-03 11:31:50+00:00 +C73,prepare delivery,2015-02-03 11:42:24+00:00,2015-02-03 11:35:23+00:00 +C67,send reminder,2015-02-03 11:58:19+00:00,2015-02-03 11:41:50+00:00 +C78,confirm payment,2015-02-03 11:53:57+00:00,2015-02-03 11:48:50+00:00 +C176,place order,2015-02-03 12:24:48+00:00,2015-02-03 12:12:19+00:00 +C84,send reminder,2015-02-03 12:25:29+00:00,2015-02-03 12:13:53+00:00 +C48,cancel order,2015-02-03 12:29:16+00:00,2015-02-03 12:15:38+00:00 +C41,prepare delivery,2015-02-03 12:21:11+00:00,2015-02-03 12:18:04+00:00 +C63,send reminder,2015-02-03 12:33:55+00:00,2015-02-03 12:19:39+00:00 +C53,pay,2015-02-03 12:32:22+00:00,2015-02-03 12:24:45+00:00 +C154,send invoice,2015-02-03 12:47:11+00:00,2015-02-03 12:41:19+00:00 +C114,send reminder,2015-02-03 12:59:44+00:00,2015-02-03 12:42:16+00:00 +C71,make delivery,2015-02-03 14:24:07+00:00,2015-02-03 12:56:44+00:00 +C133,send invoice,2015-02-03 13:29:56+00:00,2015-02-03 13:27:26+00:00 +C177,place order,2015-02-03 13:48:36+00:00,2015-02-03 13:42:46+00:00 +C75,make delivery,2015-02-03 14:02:59+00:00,2015-02-03 13:53:48+00:00 +C141,send invoice,2015-02-03 14:56:45+00:00,2015-02-03 14:48:40+00:00 +C168,send invoice,2015-02-03 15:11:32+00:00,2015-02-03 15:03:55+00:00 +C108,send reminder,2015-02-03 15:24:54+00:00,2015-02-03 15:07:16+00:00 +C178,place order,2015-02-03 15:49:06+00:00,2015-02-03 15:43:39+00:00 +C155,send invoice,2015-02-03 16:07:19+00:00,2015-02-03 16:00:16+00:00 +C80,prepare delivery,2015-02-03 16:35:00+00:00,2015-02-03 16:09:13+00:00 +C100,pay,2015-02-03 16:19:43+00:00,2015-02-03 16:15:15+00:00 +C86,prepare delivery,2015-02-03 16:30:56+00:00,2015-02-03 16:23:18+00:00 +C69,prepare delivery,2015-02-03 16:51:26+00:00,2015-02-03 16:43:59+00:00 +C158,send invoice,2015-02-03 16:48:35+00:00,2015-02-03 16:46:12+00:00 +C77,confirm payment,2015-02-03 16:54:40+00:00,2015-02-03 16:47:59+00:00 +C60,make delivery,2015-02-03 17:21:53+00:00,2015-02-03 17:04:44+00:00 +C61,make delivery,2015-02-03 18:39:30+00:00,2015-02-03 17:11:09+00:00 +C95,make delivery,2015-02-03 17:38:15+00:00,2015-02-03 17:13:44+00:00 +C59,prepare delivery,2015-02-03 17:21:28+00:00,2015-02-03 17:14:28+00:00 +C105,pay,2015-02-03 17:31:23+00:00,2015-02-03 17:22:50+00:00 +C148,send invoice,2015-02-03 17:37:38+00:00,2015-02-03 17:34:00+00:00 +C62,confirm payment,2015-02-03 17:47:33+00:00,2015-02-03 17:37:04+00:00 +C66,send reminder,2015-02-03 18:00:24+00:00,2015-02-03 17:40:59+00:00 +C179,place order,2015-02-03 17:50:57+00:00,2015-02-03 17:45:25+00:00 +C116,send reminder,2015-02-03 18:56:34+00:00,2015-02-03 18:23:52+00:00 +C72,make delivery,2015-02-03 19:46:57+00:00,2015-02-03 18:30:00+00:00 +C61,confirm payment,2015-02-03 18:42:11+00:00,2015-02-03 18:34:04+00:00 +C103,pay,2015-02-03 18:51:10+00:00,2015-02-03 18:43:32+00:00 +C62,make delivery,2015-02-03 19:23:51+00:00,2015-02-03 18:52:30+00:00 +C138,send invoice,2015-02-03 19:01:34+00:00,2015-02-03 18:55:50+00:00 +C180,place order,2015-02-03 19:55:35+00:00,2015-02-03 19:52:30+00:00 +C147,send invoice,2015-02-03 21:43:56+00:00,2015-02-03 21:16:32+00:00 +C54,prepare delivery,2015-02-03 21:58:34+00:00,2015-02-03 21:50:41+00:00 +C68,send reminder,2015-02-03 22:39:07+00:00,2015-02-03 21:56:47+00:00 +C126,send reminder,2015-02-03 22:36:12+00:00,2015-02-03 22:22:42+00:00 +C181,place order,2015-02-03 23:28:21+00:00,2015-02-03 23:21:14+00:00 +C160,send invoice,2015-02-04 08:25:20+00:00,2015-02-04 08:18:15+00:00 +C97,make delivery,2015-02-04 09:05:44+00:00,2015-02-04 08:38:02+00:00 +C73,confirm payment,2015-02-04 09:14:46+00:00,2015-02-04 09:06:07+00:00 +C182,place order,2015-02-04 11:51:18+00:00,2015-02-04 09:13:43+00:00 +C73,make delivery,2015-02-04 10:54:07+00:00,2015-02-04 09:36:06+00:00 +C52,confirm payment,2015-02-04 09:48:48+00:00,2015-02-04 09:41:41+00:00 +C170,send invoice,2015-02-04 12:20:44+00:00,2015-02-04 09:57:17+00:00 +C109,pay,2015-02-04 10:12:12+00:00,2015-02-04 10:02:52+00:00 +C183,place order,2015-02-04 11:00:17+00:00,2015-02-04 10:45:33+00:00 +C174,send invoice,2015-02-04 11:00:51+00:00,2015-02-04 10:51:40+00:00 +C97,confirm payment,2015-02-04 11:07:38+00:00,2015-02-04 11:00:31+00:00 +C156,send invoice,2015-02-04 11:16:36+00:00,2015-02-04 11:11:35+00:00 +C81,pay,2015-02-04 11:19:33+00:00,2015-02-04 11:13:40+00:00 +C75,confirm payment,2015-02-04 11:41:37+00:00,2015-02-04 11:34:07+00:00 +C45,make delivery,2015-02-04 11:50:39+00:00,2015-02-04 11:37:59+00:00 +C45,confirm payment,2015-02-04 16:02:05+00:00,2015-02-04 12:23:25+00:00 +C131,send reminder,2015-02-04 12:47:19+00:00,2015-02-04 12:31:35+00:00 +C159,send invoice,2015-02-04 12:56:35+00:00,2015-02-04 12:47:06+00:00 +C184,place order,2015-02-04 12:54:13+00:00,2015-02-04 12:49:14+00:00 +C117,pay,2015-02-04 12:55:53+00:00,2015-02-04 12:52:14+00:00 +C60,confirm payment,2015-02-04 13:02:40+00:00,2015-02-04 12:56:25+00:00 +C79,prepare delivery,2015-02-04 13:09:47+00:00,2015-02-04 13:06:39+00:00 +C119,send reminder,2015-02-04 13:35:57+00:00,2015-02-04 13:24:27+00:00 +C124,pay,2015-02-04 14:20:35+00:00,2015-02-04 14:14:22+00:00 +C91,send reminder,2015-02-04 14:41:45+00:00,2015-02-04 14:27:56+00:00 +C70,pay,2015-02-04 14:49:19+00:00,2015-02-04 14:42:16+00:00 +C86,make delivery,2015-02-04 15:04:43+00:00,2015-02-04 14:50:46+00:00 +C185,place order,2015-02-04 15:01:58+00:00,2015-02-04 14:56:35+00:00 +C41,make delivery,2015-02-04 15:25:47+00:00,2015-02-04 14:57:58+00:00 +C41,confirm payment,2015-02-04 15:15:00+00:00,2015-02-04 15:09:11+00:00 +C69,confirm payment,2015-02-04 15:45:11+00:00,2015-02-04 15:38:13+00:00 +C85,send reminder,2015-02-04 15:59:41+00:00,2015-02-04 15:42:38+00:00 +C80,make delivery,2015-02-04 15:56:57+00:00,2015-02-04 15:42:41+00:00 +C80,confirm payment,2015-02-04 16:10:18+00:00,2015-02-04 15:51:16+00:00 +C118,pay,2015-02-04 16:15:08+00:00,2015-02-04 16:08:41+00:00 +C69,make delivery,2015-02-04 16:25:55+00:00,2015-02-04 16:09:18+00:00 +C173,send invoice,2015-02-04 16:15:23+00:00,2015-02-04 16:11:41+00:00 +C84,cancel order,2015-02-04 16:38:26+00:00,2015-02-04 16:22:08+00:00 +C178,send invoice,2015-02-04 16:41:18+00:00,2015-02-04 16:35:05+00:00 +C58,prepare delivery,2015-02-04 16:44:59+00:00,2015-02-04 16:41:57+00:00 +C76,send reminder,2015-02-04 17:20:30+00:00,2015-02-04 16:57:42+00:00 +C66,cancel order,2015-02-04 17:09:56+00:00,2015-02-04 16:59:33+00:00 +C67,pay,2015-02-04 17:12:09+00:00,2015-02-04 17:09:25+00:00 +C186,place order,2015-02-04 20:59:30+00:00,2015-02-04 17:11:17+00:00 +C54,make delivery,2015-02-04 18:08:11+00:00,2015-02-04 17:12:29+00:00 +C95,confirm payment,2015-02-04 17:38:14+00:00,2015-02-04 17:28:59+00:00 +C59,confirm payment,2015-02-04 17:41:23+00:00,2015-02-04 17:34:09+00:00 +C93,pay,2015-02-04 17:49:10+00:00,2015-02-04 17:45:58+00:00 +C96,prepare delivery,2015-02-04 17:56:54+00:00,2015-02-04 17:49:46+00:00 +C187,place order,2015-02-04 22:21:34+00:00,2015-02-04 18:40:41+00:00 +C127,pay,2015-02-04 19:22:13+00:00,2015-02-04 19:19:48+00:00 +C175,send invoice,2015-02-04 19:57:44+00:00,2015-02-04 19:52:54+00:00 +C121,pay,2015-02-04 21:15:27+00:00,2015-02-04 21:08:21+00:00 +C188,place order,2015-02-04 21:42:11+00:00,2015-02-04 21:38:18+00:00 +C88,pay,2015-02-04 23:51:16+00:00,2015-02-04 23:48:40+00:00 +C99,pay,2015-02-05 03:29:36+00:00,2015-02-05 03:26:56+00:00 +C189,place order,2015-02-05 05:54:57+00:00,2015-02-05 05:51:00+00:00 +C59,make delivery,2015-02-05 10:12:44+00:00,2015-02-05 09:15:18+00:00 +C134,send reminder,2015-02-05 09:41:48+00:00,2015-02-05 09:32:52+00:00 +C86,confirm payment,2015-02-05 09:39:04+00:00,2015-02-05 09:34:36+00:00 +C79,make delivery,2015-02-05 10:21:54+00:00,2015-02-05 09:55:18+00:00 +C89,prepare delivery,2015-02-05 10:09:13+00:00,2015-02-05 10:06:18+00:00 +C72,confirm payment,2015-02-05 10:21:03+00:00,2015-02-05 10:13:49+00:00 +C181,send invoice,2015-02-05 10:23:18+00:00,2015-02-05 10:20:38+00:00 +C190,place order,2015-02-05 10:55:52+00:00,2015-02-05 10:26:13+00:00 +C22,prepare delivery,2015-02-05 10:42:11+00:00,2015-02-05 10:34:23+00:00 +C164,send invoice,2015-02-05 11:15:32+00:00,2015-02-05 11:02:09+00:00 +C74,prepare delivery,2015-02-05 13:33:46+00:00,2015-02-05 11:06:01+00:00 +C82,prepare delivery,2015-02-05 11:20:49+00:00,2015-02-05 11:11:57+00:00 +C110,prepare delivery,2015-02-05 11:19:39+00:00,2015-02-05 11:12:36+00:00 +C113,send reminder,2015-02-05 11:46:54+00:00,2015-02-05 11:15:35+00:00 +C180,send invoice,2015-02-05 11:26:56+00:00,2015-02-05 11:21:16+00:00 +C177,send invoice,2015-02-05 11:37:10+00:00,2015-02-05 11:30:40+00:00 +C153,send invoice,2015-02-05 11:48:04+00:00,2015-02-05 11:38:46+00:00 +C90,send reminder,2015-02-05 12:11:40+00:00,2015-02-05 11:55:58+00:00 +C165,send invoice,2015-02-05 12:07:57+00:00,2015-02-05 12:00:13+00:00 +C79,confirm payment,2015-02-05 12:07:32+00:00,2015-02-05 12:00:41+00:00 +C122,pay,2015-02-05 12:08:40+00:00,2015-02-05 12:01:52+00:00 +C104,pay,2015-02-05 12:10:41+00:00,2015-02-05 12:04:24+00:00 +C191,place order,2015-02-05 12:22:21+00:00,2015-02-05 12:10:33+00:00 +C161,send invoice,2015-02-05 12:38:37+00:00,2015-02-05 12:31:47+00:00 +C120,send reminder,2015-02-05 13:01:18+00:00,2015-02-05 12:43:44+00:00 +C68,pay,2015-02-05 13:27:43+00:00,2015-02-05 13:23:06+00:00 +C192,place order,2015-02-05 18:25:18+00:00,2015-02-05 13:39:13+00:00 +C112,send reminder,2015-02-05 14:53:13+00:00,2015-02-05 14:29:50+00:00 +C128,pay,2015-02-05 14:36:49+00:00,2015-02-05 14:31:19+00:00 +C91,pay,2015-02-05 15:09:57+00:00,2015-02-05 15:03:13+00:00 +C65,pay,2015-02-05 15:08:35+00:00,2015-02-05 15:04:35+00:00 +C58,confirm payment,2015-02-05 15:26:40+00:00,2015-02-05 15:23:22+00:00 +C193,place order,2015-02-05 15:45:02+00:00,2015-02-05 15:36:34+00:00 +C163,send invoice,2015-02-05 20:10:24+00:00,2015-02-05 15:47:55+00:00 +C63,pay,2015-02-05 16:02:02+00:00,2015-02-05 15:55:39+00:00 +C58,make delivery,2015-02-05 17:31:02+00:00,2015-02-05 17:16:24+00:00 +C94,pay,2015-02-05 17:25:17+00:00,2015-02-05 17:19:42+00:00 +C194,place order,2015-02-05 18:13:23+00:00,2015-02-05 17:31:15+00:00 +C54,confirm payment,2015-02-05 18:22:17+00:00,2015-02-05 18:14:31+00:00 +C87,pay,2015-02-05 19:00:56+00:00,2015-02-05 18:56:41+00:00 +C106,prepare delivery,2015-02-05 19:10:34+00:00,2015-02-05 19:06:56+00:00 +C70,prepare delivery,2015-02-05 19:19:23+00:00,2015-02-05 19:12:16+00:00 +C195,place order,2015-02-05 19:29:29+00:00,2015-02-05 19:20:37+00:00 +C96,make delivery,2015-02-05 22:02:28+00:00,2015-02-05 21:36:09+00:00 +C196,place order,2015-02-05 22:21:07+00:00,2015-02-05 22:17:28+00:00 +C197,place order,2015-02-06 08:33:32+00:00,2015-02-06 08:23:11+00:00 +C35,prepare delivery,2015-02-06 08:51:56+00:00,2015-02-06 08:48:51+00:00 +C92,pay,2015-02-06 13:10:33+00:00,2015-02-06 09:20:36+00:00 +C129,send reminder,2015-02-06 09:54:57+00:00,2015-02-06 09:31:51+00:00 +C89,make delivery,2015-02-06 10:28:04+00:00,2015-02-06 09:32:45+00:00 +C82,confirm payment,2015-02-06 09:41:52+00:00,2015-02-06 09:36:12+00:00 +C110,confirm payment,2015-02-06 09:43:43+00:00,2015-02-06 09:36:49+00:00 +C110,make delivery,2015-02-06 11:08:17+00:00,2015-02-06 09:41:19+00:00 +C137,send reminder,2015-02-06 09:55:28+00:00,2015-02-06 09:48:21+00:00 +C191,send invoice,2015-02-06 09:56:09+00:00,2015-02-06 09:49:51+00:00 +C74,make delivery,2015-02-06 10:02:37+00:00,2015-02-06 09:53:03+00:00 +C157,send invoice,2015-02-06 10:09:25+00:00,2015-02-06 10:01:01+00:00 +C167,send invoice,2015-02-06 10:11:28+00:00,2015-02-06 10:03:24+00:00 +C22,make delivery,2015-02-06 11:32:31+00:00,2015-02-06 10:15:00+00:00 +C198,place order,2015-02-06 10:25:06+00:00,2015-02-06 10:22:54+00:00 +C192,send invoice,2015-02-06 11:07:51+00:00,2015-02-06 11:01:53+00:00 +C123,send reminder,2015-02-06 11:43:08+00:00,2015-02-06 11:36:24+00:00 +C199,place order,2015-02-06 16:22:22+00:00,2015-02-06 12:03:55+00:00 +C179,send invoice,2015-02-06 12:34:37+00:00,2015-02-06 12:29:14+00:00 +C82,make delivery,2015-02-06 13:48:31+00:00,2015-02-06 12:52:14+00:00 +C134,pay,2015-02-06 13:28:02+00:00,2015-02-06 13:20:15+00:00 +C200,place order,2015-02-06 13:31:24+00:00,2015-02-06 13:25:57+00:00 +C194,send invoice,2015-02-06 13:32:02+00:00,2015-02-06 13:27:35+00:00 +C100,prepare delivery,2015-02-06 14:07:22+00:00,2015-02-06 13:59:33+00:00 +C118,prepare delivery,2015-02-06 15:10:03+00:00,2015-02-06 14:43:53+00:00 +C201,place order,2015-02-06 15:14:37+00:00,2015-02-06 15:10:01+00:00 +C102,pay,2015-02-06 15:52:59+00:00,2015-02-06 15:48:27+00:00 +C96,confirm payment,2015-02-06 15:58:41+00:00,2015-02-06 15:51:24+00:00 +C142,send reminder,2015-02-06 16:29:19+00:00,2015-02-06 16:08:24+00:00 +C143,send reminder,2015-02-06 16:56:58+00:00,2015-02-06 16:33:22+00:00 +C202,place order,2015-02-06 16:46:02+00:00,2015-02-06 16:38:09+00:00 +C70,make delivery,2015-02-06 18:34:10+00:00,2015-02-06 17:07:49+00:00 +C76,pay,2015-02-06 17:56:30+00:00,2015-02-06 17:50:46+00:00 +C35,confirm payment,2015-02-06 18:25:52+00:00,2015-02-06 18:23:19+00:00 +C88,prepare delivery,2015-02-06 18:38:05+00:00,2015-02-06 18:30:05+00:00 +C203,place order,2015-02-06 18:48:22+00:00,2015-02-06 18:34:26+00:00 +C189,send invoice,2015-02-06 19:33:21+00:00,2015-02-06 19:26:59+00:00 +C171,send invoice,2015-02-06 20:41:55+00:00,2015-02-06 20:09:19+00:00 +C204,place order,2015-02-06 21:33:58+00:00,2015-02-06 21:19:32+00:00 +C205,place order,2015-02-07 16:20:26+00:00,2015-02-07 11:40:24+00:00 +C139,pay,2015-02-08 11:41:48+00:00,2015-02-08 11:38:09+00:00 +C206,place order,2015-02-08 12:04:16+00:00,2015-02-08 11:58:00+00:00 +C207,place order,2015-02-09 05:00:36+00:00,2015-02-09 04:51:12+00:00 +C106,make delivery,2015-02-09 08:29:39+00:00,2015-02-09 08:12:44+00:00 +C89,confirm payment,2015-02-09 08:31:25+00:00,2015-02-09 08:22:21+00:00 +C67,prepare delivery,2015-02-09 11:02:16+00:00,2015-02-09 08:38:09+00:00 +C182,send invoice,2015-02-09 08:58:24+00:00,2015-02-09 08:41:26+00:00 +C92,prepare delivery,2015-02-09 09:32:53+00:00,2015-02-09 09:25:39+00:00 +C22,confirm payment,2015-02-09 09:31:04+00:00,2015-02-09 09:28:29+00:00 +C83,prepare delivery,2015-02-09 10:11:14+00:00,2015-02-09 09:46:07+00:00 +C185,send invoice,2015-02-09 09:58:21+00:00,2015-02-09 09:50:35+00:00 +C200,send invoice,2015-02-09 10:06:54+00:00,2015-02-09 09:59:27+00:00 +C103,prepare delivery,2015-02-09 10:07:51+00:00,2015-02-09 10:04:20+00:00 +C112,pay,2015-02-09 10:23:43+00:00,2015-02-09 10:11:58+00:00 +C105,prepare delivery,2015-02-09 10:20:41+00:00,2015-02-09 10:17:09+00:00 +C208,place order,2015-02-09 10:43:52+00:00,2015-02-09 10:20:27+00:00 +C190,send invoice,2015-02-09 10:35:09+00:00,2015-02-09 10:27:38+00:00 +C150,send reminder,2015-02-09 11:19:51+00:00,2015-02-09 10:36:06+00:00 +C53,prepare delivery,2015-02-09 10:43:13+00:00,2015-02-09 10:39:34+00:00 +C74,confirm payment,2015-02-09 10:59:48+00:00,2015-02-09 10:55:16+00:00 +C184,send invoice,2015-02-09 11:10:30+00:00,2015-02-09 11:05:13+00:00 +C81,prepare delivery,2015-02-09 11:15:21+00:00,2015-02-09 11:07:26+00:00 +C101,pay,2015-02-09 11:28:43+00:00,2015-02-09 11:21:53+00:00 +C166,send invoice,2015-02-09 11:37:32+00:00,2015-02-09 11:27:47+00:00 +C193,send invoice,2015-02-09 11:41:06+00:00,2015-02-09 11:37:08+00:00 +C35,make delivery,2015-02-09 13:14:09+00:00,2015-02-09 11:41:08+00:00 +C100,confirm payment,2015-02-09 11:58:54+00:00,2015-02-09 11:48:39+00:00 +C209,place order,2015-02-09 12:06:56+00:00,2015-02-09 11:59:01+00:00 +C113,pay,2015-02-09 12:11:47+00:00,2015-02-09 12:05:49+00:00 +C115,send reminder,2015-02-09 12:35:11+00:00,2015-02-09 12:11:39+00:00 +C98,prepare delivery,2015-02-09 12:35:14+00:00,2015-02-09 12:26:45+00:00 +C85,pay,2015-02-09 12:40:14+00:00,2015-02-09 12:34:41+00:00 +C94,prepare delivery,2015-02-09 12:38:05+00:00,2015-02-09 12:35:10+00:00 +C100,make delivery,2015-02-09 13:29:30+00:00,2015-02-09 13:11:35+00:00 +C125,send reminder,2015-02-09 13:49:49+00:00,2015-02-09 13:20:50+00:00 +C195,send invoice,2015-02-09 14:08:52+00:00,2015-02-09 14:02:13+00:00 +C210,place order,2015-02-09 18:47:06+00:00,2015-02-09 14:16:09+00:00 +C176,send invoice,2015-02-09 14:48:31+00:00,2015-02-09 14:44:44+00:00 +C118,make delivery,2015-02-09 15:05:31+00:00,2015-02-09 14:50:35+00:00 +C106,confirm payment,2015-02-09 15:38:49+00:00,2015-02-09 15:30:38+00:00 +C136,send reminder,2015-02-09 15:57:55+00:00,2015-02-09 15:48:06+00:00 +C211,place order,2015-02-09 15:53:14+00:00,2015-02-09 15:50:26+00:00 +C70,confirm payment,2015-02-09 16:14:18+00:00,2015-02-09 16:04:51+00:00 +C199,send invoice,2015-02-09 16:22:15+00:00,2015-02-09 16:18:29+00:00 +C90,pay,2015-02-09 16:51:08+00:00,2015-02-09 16:43:09+00:00 +C88,make delivery,2015-02-09 17:56:30+00:00,2015-02-09 17:27:34+00:00 +C205,send invoice,2015-02-09 18:05:24+00:00,2015-02-09 17:30:10+00:00 +C172,send invoice,2015-02-09 18:00:44+00:00,2015-02-09 17:55:55+00:00 +C212,place order,2015-02-09 18:28:26+00:00,2015-02-09 17:58:59+00:00 +C68,prepare delivery,2015-02-09 18:37:30+00:00,2015-02-09 18:30:24+00:00 +C207,send invoice,2015-02-09 18:59:39+00:00,2015-02-09 18:53:36+00:00 +C130,pay,2015-02-09 23:24:18+00:00,2015-02-09 20:09:34+00:00 +C213,place order,2015-02-09 20:45:27+00:00,2015-02-09 20:33:11+00:00 +C214,place order,2015-02-10 00:25:03+00:00,2015-02-10 00:20:18+00:00 +C99,prepare delivery,2015-02-10 08:52:52+00:00,2015-02-10 08:45:05+00:00 +C83,make delivery,2015-02-10 09:35:08+00:00,2015-02-10 09:03:16+00:00 +C92,make delivery,2015-02-10 09:26:33+00:00,2015-02-10 09:15:21+00:00 +C215,place order,2015-02-10 11:56:31+00:00,2015-02-10 09:22:27+00:00 +C162,send reminder,2015-02-10 10:06:18+00:00,2015-02-10 09:35:39+00:00 +C134,prepare delivery,2015-02-10 09:51:49+00:00,2015-02-10 09:43:53+00:00 +C103,confirm payment,2015-02-10 09:52:06+00:00,2015-02-10 09:44:39+00:00 +C104,prepare delivery,2015-02-10 10:00:41+00:00,2015-02-10 09:56:45+00:00 +C81,confirm payment,2015-02-10 10:23:53+00:00,2015-02-10 10:08:44+00:00 +C67,make delivery,2015-02-10 10:49:54+00:00,2015-02-10 10:13:22+00:00 +C81,make delivery,2015-02-10 11:09:09+00:00,2015-02-10 10:33:37+00:00 +C169,send invoice,2015-02-10 10:59:23+00:00,2015-02-10 10:54:56+00:00 +C98,confirm payment,2015-02-10 11:01:07+00:00,2015-02-10 10:55:36+00:00 +C216,place order,2015-02-10 11:10:21+00:00,2015-02-10 11:03:02+00:00 +C103,make delivery,2015-02-10 11:21:32+00:00,2015-02-10 11:10:26+00:00 +C92,confirm payment,2015-02-10 11:28:21+00:00,2015-02-10 11:19:26+00:00 +C111,send reminder,2015-02-10 11:40:02+00:00,2015-02-10 11:22:45+00:00 +C119,pay,2015-02-10 11:32:32+00:00,2015-02-10 11:24:21+00:00 +C145,send reminder,2015-02-10 11:49:23+00:00,2015-02-10 11:34:47+00:00 +C143,pay,2015-02-10 11:43:18+00:00,2015-02-10 11:37:35+00:00 +C114,send reminder,2015-02-10 11:57:36+00:00,2015-02-10 11:38:32+00:00 +C121,prepare delivery,2015-02-10 11:56:55+00:00,2015-02-10 11:49:41+00:00 +C105,confirm payment,2015-02-10 12:24:14+00:00,2015-02-10 12:13:26+00:00 +C105,make delivery,2015-02-10 13:54:45+00:00,2015-02-10 12:15:17+00:00 +C217,place order,2015-02-10 12:38:06+00:00,2015-02-10 12:24:11+00:00 +C187,send invoice,2015-02-10 12:33:52+00:00,2015-02-10 12:30:55+00:00 +C53,make delivery,2015-02-10 13:53:05+00:00,2015-02-10 12:31:00+00:00 +C144,pay,2015-02-10 13:04:17+00:00,2015-02-10 12:58:18+00:00 +C118,confirm payment,2015-02-10 13:02:42+00:00,2015-02-10 12:58:32+00:00 +C120,pay,2015-02-10 13:21:37+00:00,2015-02-10 13:16:55+00:00 +C218,place order,2015-02-10 14:11:51+00:00,2015-02-10 14:06:29+00:00 +C94,confirm payment,2015-02-10 14:26:03+00:00,2015-02-10 14:13:01+00:00 +C83,confirm payment,2015-02-10 14:35:07+00:00,2015-02-10 14:21:38+00:00 +C94,make delivery,2015-02-10 14:58:34+00:00,2015-02-10 14:30:41+00:00 +C98,make delivery,2015-02-10 15:06:10+00:00,2015-02-10 14:42:16+00:00 +C147,pay,2015-02-10 15:09:10+00:00,2015-02-10 14:59:02+00:00 +C168,send reminder,2015-02-10 15:32:54+00:00,2015-02-10 15:19:51+00:00 +C65,prepare delivery,2015-02-10 15:39:41+00:00,2015-02-10 15:23:52+00:00 +C127,prepare delivery,2015-02-10 15:32:26+00:00,2015-02-10 15:24:28+00:00 +C219,place order,2015-02-10 20:30:32+00:00,2015-02-10 15:31:05+00:00 +C87,prepare delivery,2015-02-10 16:18:02+00:00,2015-02-10 15:56:44+00:00 +C154,pay,2015-02-10 16:05:38+00:00,2015-02-10 16:01:49+00:00 +C196,send invoice,2015-02-10 16:16:51+00:00,2015-02-10 16:08:39+00:00 +C68,make delivery,2015-02-10 16:37:53+00:00,2015-02-10 16:20:40+00:00 +C133,send reminder,2015-02-10 16:56:41+00:00,2015-02-10 16:35:40+00:00 +C68,confirm payment,2015-02-10 16:45:47+00:00,2015-02-10 16:38:28+00:00 +C107,pay,2015-02-10 16:45:31+00:00,2015-02-10 16:39:16+00:00 +C160,send reminder,2015-02-10 17:19:29+00:00,2015-02-10 17:04:06+00:00 +C102,prepare delivery,2015-02-10 17:32:00+00:00,2015-02-10 17:05:23+00:00 +C220,place order,2015-02-10 17:28:29+00:00,2015-02-10 17:20:17+00:00 +C88,confirm payment,2015-02-10 17:26:26+00:00,2015-02-10 17:20:36+00:00 +C134,make delivery,2015-02-10 17:49:53+00:00,2015-02-10 17:36:15+00:00 +C198,send invoice,2015-02-10 17:52:20+00:00,2015-02-10 17:48:54+00:00 +C108,send reminder,2015-02-10 18:36:05+00:00,2015-02-10 18:18:01+00:00 +C141,send reminder,2015-02-10 18:44:13+00:00,2015-02-10 18:36:40+00:00 +C63,prepare delivery,2015-02-10 18:50:26+00:00,2015-02-10 18:47:16+00:00 +C104,make delivery,2015-02-10 19:05:42+00:00,2015-02-10 18:51:03+00:00 +C170,send reminder,2015-02-10 19:17:18+00:00,2015-02-10 18:54:48+00:00 +C221,place order,2015-02-10 19:02:32+00:00,2015-02-10 18:58:42+00:00 +C67,confirm payment,2015-02-10 20:16:43+00:00,2015-02-10 20:09:15+00:00 +C124,prepare delivery,2015-02-10 21:04:57+00:00,2015-02-10 20:57:28+00:00 +C139,prepare delivery,2015-02-10 22:02:35+00:00,2015-02-10 21:58:49+00:00 +C222,place order,2015-02-11 02:15:04+00:00,2015-02-10 22:32:20+00:00 +C161,pay,2015-02-11 08:03:54+00:00,2015-02-11 08:01:53+00:00 +C149,pay,2015-02-11 08:25:01+00:00,2015-02-11 08:20:59+00:00 +C91,prepare delivery,2015-02-11 11:03:11+00:00,2015-02-11 08:26:39+00:00 +C109,prepare delivery,2015-02-11 08:35:11+00:00,2015-02-11 08:31:38+00:00 +C223,place order,2015-02-11 08:59:28+00:00,2015-02-11 08:52:54+00:00 +C214,send invoice,2015-02-11 09:04:49+00:00,2015-02-11 09:00:28+00:00 +C152,pay,2015-02-11 09:10:48+00:00,2015-02-11 09:02:02+00:00 +C202,send invoice,2015-02-11 10:06:02+00:00,2015-02-11 09:48:36+00:00 +C116,send reminder,2015-02-11 10:17:18+00:00,2015-02-11 09:48:59+00:00 +C99,make delivery,2015-02-11 10:13:12+00:00,2015-02-11 10:02:09+00:00 +C156,send reminder,2015-02-11 10:58:07+00:00,2015-02-11 10:26:31+00:00 +C174,send reminder,2015-02-11 11:06:01+00:00,2015-02-11 10:31:20+00:00 +C117,prepare delivery,2015-02-11 10:48:57+00:00,2015-02-11 10:45:13+00:00 +C188,send invoice,2015-02-11 11:22:05+00:00,2015-02-11 10:47:28+00:00 +C150,pay,2015-02-11 10:58:47+00:00,2015-02-11 10:52:46+00:00 +C140,pay,2015-02-11 11:05:21+00:00,2015-02-11 10:58:27+00:00 +C138,send reminder,2015-02-11 11:14:41+00:00,2015-02-11 11:02:22+00:00 +C224,place order,2015-02-11 11:13:08+00:00,2015-02-11 11:07:29+00:00 +C53,confirm payment,2015-02-11 11:31:25+00:00,2015-02-11 11:11:47+00:00 +C101,prepare delivery,2015-02-11 11:47:11+00:00,2015-02-11 11:39:42+00:00 +C204,send invoice,2015-02-11 11:46:03+00:00,2015-02-11 11:41:05+00:00 +C183,send invoice,2015-02-11 11:53:17+00:00,2015-02-11 11:47:02+00:00 +C126,send reminder,2015-02-11 12:03:55+00:00,2015-02-11 11:49:22+00:00 +C225,place order,2015-02-11 12:42:13+00:00,2015-02-11 12:33:05+00:00 +C121,make delivery,2015-02-11 13:18:56+00:00,2015-02-11 12:49:29+00:00 +C127,make delivery,2015-02-11 14:28:53+00:00,2015-02-11 13:07:45+00:00 +C131,send reminder,2015-02-11 13:37:15+00:00,2015-02-11 13:17:32+00:00 +C115,cancel order,2015-02-11 13:56:32+00:00,2015-02-11 13:49:09+00:00 +C226,place order,2015-02-11 14:29:38+00:00,2015-02-11 14:24:17+00:00 +C102,make delivery,2015-02-11 16:25:36+00:00,2015-02-11 14:56:42+00:00 +C127,confirm payment,2015-02-11 15:07:42+00:00,2015-02-11 15:02:40+00:00 +C219,send invoice,2015-02-11 15:10:57+00:00,2015-02-11 15:03:11+00:00 +C123,pay,2015-02-11 15:42:01+00:00,2015-02-11 15:33:59+00:00 +C87,make delivery,2015-02-11 15:57:13+00:00,2015-02-11 15:39:34+00:00 +C65,make delivery,2015-02-11 16:22:45+00:00,2015-02-11 15:58:50+00:00 +C227,place order,2015-02-11 18:01:42+00:00,2015-02-11 16:06:41+00:00 +C186,send invoice,2015-02-11 16:17:28+00:00,2015-02-11 16:14:37+00:00 +C65,confirm payment,2015-02-11 16:25:04+00:00,2015-02-11 16:18:02+00:00 +C134,confirm payment,2015-02-11 16:31:36+00:00,2015-02-11 16:21:51+00:00 +C93,prepare delivery,2015-02-11 16:34:48+00:00,2015-02-11 16:27:17+00:00 +C206,send invoice,2015-02-11 16:42:06+00:00,2015-02-11 16:33:59+00:00 +C104,confirm payment,2015-02-11 16:46:14+00:00,2015-02-11 16:43:40+00:00 +C91,make delivery,2015-02-11 17:32:20+00:00,2015-02-11 16:44:24+00:00 +C137,pay,2015-02-11 19:43:29+00:00,2015-02-11 16:54:01+00:00 +C139,make delivery,2015-02-11 17:33:02+00:00,2015-02-11 17:16:21+00:00 +C63,make delivery,2015-02-11 17:31:56+00:00,2015-02-11 17:20:13+00:00 +C148,pay,2015-02-11 17:28:43+00:00,2015-02-11 17:23:49+00:00 +C228,place order,2015-02-11 17:38:12+00:00,2015-02-11 17:31:30+00:00 +C113,prepare delivery,2015-02-11 20:18:27+00:00,2015-02-11 17:46:33+00:00 +C91,confirm payment,2015-02-11 18:43:07+00:00,2015-02-11 18:38:27+00:00 +C117,make delivery,2015-02-11 19:09:00+00:00,2015-02-11 18:58:04+00:00 +C124,make delivery,2015-02-11 20:06:15+00:00,2015-02-11 19:09:50+00:00 +C99,confirm payment,2015-02-11 19:20:58+00:00,2015-02-11 19:13:20+00:00 +C229,place order,2015-02-11 22:42:08+00:00,2015-02-11 19:21:07+00:00 +C146,pay,2015-02-12 01:02:03+00:00,2015-02-11 21:49:37+00:00 +C121,confirm payment,2015-02-11 22:29:02+00:00,2015-02-11 21:58:42+00:00 +C230,place order,2015-02-11 22:38:43+00:00,2015-02-11 22:18:28+00:00 +C231,place order,2015-02-12 08:30:43+00:00,2015-02-12 08:25:11+00:00 +C216,send invoice,2015-02-12 09:09:20+00:00,2015-02-12 08:57:27+00:00 +C122,prepare delivery,2015-02-12 09:11:20+00:00,2015-02-12 09:07:27+00:00 +C173,send reminder,2015-02-12 09:53:13+00:00,2015-02-12 09:32:52+00:00 +C109,make delivery,2015-02-12 11:08:37+00:00,2015-02-12 09:40:45+00:00 +C76,prepare delivery,2015-02-12 10:36:30+00:00,2015-02-12 10:11:39+00:00 +C101,confirm payment,2015-02-12 10:14:42+00:00,2015-02-12 10:11:53+00:00 +C135,pay,2015-02-12 10:24:23+00:00,2015-02-12 10:19:39+00:00 +C85,prepare delivery,2015-02-12 10:27:18+00:00,2015-02-12 10:24:25+00:00 +C232,place order,2015-02-12 10:30:40+00:00,2015-02-12 10:25:53+00:00 +C180,send reminder,2015-02-12 10:47:21+00:00,2015-02-12 10:28:42+00:00 +C63,confirm payment,2015-02-12 10:47:04+00:00,2015-02-12 10:41:21+00:00 +C181,send reminder,2015-02-12 11:30:36+00:00,2015-02-12 10:52:40+00:00 +C177,send reminder,2015-02-12 11:19:05+00:00,2015-02-12 11:08:07+00:00 +C128,prepare delivery,2015-02-12 11:11:42+00:00,2015-02-12 11:08:08+00:00 +C143,prepare delivery,2015-02-12 11:23:34+00:00,2015-02-12 11:16:07+00:00 +C209,send invoice,2015-02-12 11:43:33+00:00,2015-02-12 11:40:34+00:00 +C175,send reminder,2015-02-12 12:02:25+00:00,2015-02-12 11:49:34+00:00 +C114,cancel order,2015-02-12 12:51:43+00:00,2015-02-12 11:52:04+00:00 +C233,place order,2015-02-12 15:23:25+00:00,2015-02-12 12:09:53+00:00 +C213,send invoice,2015-02-12 12:23:15+00:00,2015-02-12 12:19:34+00:00 +C101,make delivery,2015-02-12 13:01:06+00:00,2015-02-12 12:29:50+00:00 +C125,pay,2015-02-12 12:55:13+00:00,2015-02-12 12:49:48+00:00 +C102,confirm payment,2015-02-12 13:36:05+00:00,2015-02-12 13:28:29+00:00 +C234,place order,2015-02-12 13:41:23+00:00,2015-02-12 13:37:54+00:00 +C109,confirm payment,2015-02-12 14:29:47+00:00,2015-02-12 14:25:10+00:00 +C203,send invoice,2015-02-12 14:41:35+00:00,2015-02-12 14:35:07+00:00 +C145,pay,2015-02-12 15:17:01+00:00,2015-02-12 14:51:45+00:00 +C93,make delivery,2015-02-12 15:06:56+00:00,2015-02-12 14:55:12+00:00 +C87,confirm payment,2015-02-12 15:13:04+00:00,2015-02-12 15:08:32+00:00 +C117,confirm payment,2015-02-12 15:25:45+00:00,2015-02-12 15:20:15+00:00 +C139,confirm payment,2015-02-12 15:37:31+00:00,2015-02-12 15:26:31+00:00 +C235,place order,2015-02-12 15:37:05+00:00,2015-02-12 15:33:55+00:00 +C165,pay,2015-02-12 15:39:40+00:00,2015-02-12 15:34:26+00:00 +C116,pay,2015-02-12 15:56:43+00:00,2015-02-12 15:38:39+00:00 +C212,send invoice,2015-02-12 16:58:49+00:00,2015-02-12 16:51:17+00:00 +C76,confirm payment,2015-02-12 17:19:53+00:00,2015-02-12 17:13:14+00:00 +C113,make delivery,2015-02-12 17:35:45+00:00,2015-02-12 17:18:53+00:00 +C236,place order,2015-02-12 19:45:39+00:00,2015-02-12 17:25:57+00:00 +C122,make delivery,2015-02-12 18:15:42+00:00,2015-02-12 17:52:36+00:00 +C124,confirm payment,2015-02-12 18:09:33+00:00,2015-02-12 18:02:45+00:00 +C157,pay,2015-02-12 18:19:14+00:00,2015-02-12 18:13:09+00:00 +C113,confirm payment,2015-02-12 18:43:46+00:00,2015-02-12 18:29:51+00:00 +C76,make delivery,2015-02-12 19:22:05+00:00,2015-02-12 18:42:43+00:00 +C85,make delivery,2015-02-12 20:03:06+00:00,2015-02-12 18:48:01+00:00 +C108,pay,2015-02-12 19:00:47+00:00,2015-02-12 18:55:48+00:00 +C237,place order,2015-02-12 19:15:10+00:00,2015-02-12 19:10:01+00:00 +C93,confirm payment,2015-02-12 20:00:13+00:00,2015-02-12 19:51:51+00:00 +C160,pay,2015-02-12 20:01:50+00:00,2015-02-12 19:57:59+00:00 +C238,place order,2015-02-12 22:02:48+00:00,2015-02-12 21:56:17+00:00 +C239,place order,2015-02-13 07:53:49+00:00,2015-02-13 07:38:54+00:00 +C215,send invoice,2015-02-13 08:27:57+00:00,2015-02-13 08:22:57+00:00 +C128,make delivery,2015-02-13 09:30:25+00:00,2015-02-13 09:19:23+00:00 +C231,send invoice,2015-02-13 09:42:13+00:00,2015-02-13 09:38:28+00:00 +C208,send invoice,2015-02-13 09:52:54+00:00,2015-02-13 09:46:44+00:00 +C129,send reminder,2015-02-13 10:27:27+00:00,2015-02-13 09:47:45+00:00 +C197,send invoice,2015-02-13 10:07:44+00:00,2015-02-13 10:02:39+00:00 +C128,confirm payment,2015-02-13 10:22:19+00:00,2015-02-13 10:07:16+00:00 +C240,place order,2015-02-13 10:31:37+00:00,2015-02-13 10:24:55+00:00 +C135,prepare delivery,2015-02-13 10:30:55+00:00,2015-02-13 10:27:23+00:00 +C130,prepare delivery,2015-02-13 10:44:58+00:00,2015-02-13 10:37:29+00:00 +C167,pay,2015-02-13 11:08:20+00:00,2015-02-13 11:03:37+00:00 +C147,prepare delivery,2015-02-13 11:19:09+00:00,2015-02-13 11:15:30+00:00 +C143,make delivery,2015-02-13 11:50:33+00:00,2015-02-13 11:37:18+00:00 +C144,prepare delivery,2015-02-13 11:44:33+00:00,2015-02-13 11:41:41+00:00 +C224,send invoice,2015-02-13 11:53:10+00:00,2015-02-13 11:48:25+00:00 +C241,place order,2015-02-13 12:33:38+00:00,2015-02-13 12:07:57+00:00 +C164,pay,2015-02-13 15:37:24+00:00,2015-02-13 12:49:40+00:00 +C131,pay,2015-02-13 13:01:20+00:00,2015-02-13 12:58:26+00:00 +C179,send reminder,2015-02-13 13:24:21+00:00,2015-02-13 13:15:19+00:00 +C142,send reminder,2015-02-13 13:49:26+00:00,2015-02-13 13:19:53+00:00 +C143,confirm payment,2015-02-13 16:46:56+00:00,2015-02-13 13:27:28+00:00 +C133,pay,2015-02-13 13:39:36+00:00,2015-02-13 13:31:28+00:00 +C242,place order,2015-02-13 13:36:20+00:00,2015-02-13 13:34:01+00:00 +C154,prepare delivery,2015-02-13 17:03:46+00:00,2015-02-13 14:36:42+00:00 +C234,send invoice,2015-02-13 14:47:05+00:00,2015-02-13 14:42:16+00:00 +C122,confirm payment,2015-02-13 15:18:12+00:00,2015-02-13 15:11:50+00:00 +C243,place order,2015-02-13 15:32:12+00:00,2015-02-13 15:26:09+00:00 +C194,send reminder,2015-02-13 16:33:42+00:00,2015-02-13 16:07:34+00:00 +C222,send invoice,2015-02-13 16:53:56+00:00,2015-02-13 16:49:27+00:00 +C111,pay,2015-02-13 16:58:49+00:00,2015-02-13 16:54:07+00:00 +C170,pay,2015-02-13 17:02:56+00:00,2015-02-13 16:57:00+00:00 +C244,place order,2015-02-13 17:16:20+00:00,2015-02-13 17:10:25+00:00 +C221,send invoice,2015-02-13 19:44:08+00:00,2015-02-13 17:19:30+00:00 +C107,prepare delivery,2015-02-13 17:24:05+00:00,2015-02-13 17:20:12+00:00 +C235,send invoice,2015-02-13 17:30:04+00:00,2015-02-13 17:25:07+00:00 +C180,pay,2015-02-13 17:43:47+00:00,2015-02-13 17:36:35+00:00 +C126,cancel order,2015-02-13 17:56:44+00:00,2015-02-13 17:47:34+00:00 +C142,cancel order,2015-02-13 18:05:00+00:00,2015-02-13 17:49:39+00:00 +C148,prepare delivery,2015-02-13 18:25:34+00:00,2015-02-13 18:22:38+00:00 +C245,place order,2015-02-13 18:43:58+00:00,2015-02-13 18:38:58+00:00 +C175,pay,2015-02-13 19:25:54+00:00,2015-02-13 18:54:06+00:00 +C159,pay,2015-02-13 20:07:46+00:00,2015-02-13 20:03:25+00:00 +C246,place order,2015-02-13 21:39:33+00:00,2015-02-13 21:33:08+00:00 +C85,confirm payment,2015-02-13 22:11:44+00:00,2015-02-13 22:05:32+00:00 +C247,place order,2015-02-14 15:34:50+00:00,2015-02-14 13:02:00+00:00 +C248,place order,2015-02-15 13:13:03+00:00,2015-02-15 12:41:12+00:00 +C249,place order,2015-02-16 05:22:38+00:00,2015-02-16 05:17:36+00:00 +C135,make delivery,2015-02-16 09:03:06+00:00,2015-02-16 08:52:20+00:00 +C185,send reminder,2015-02-16 09:26:43+00:00,2015-02-16 09:07:17+00:00 +C178,pay,2015-02-16 09:11:49+00:00,2015-02-16 09:09:43+00:00 +C229,send invoice,2015-02-16 09:16:05+00:00,2015-02-16 09:13:01+00:00 +C129,cancel order,2015-02-16 09:40:03+00:00,2015-02-16 09:27:49+00:00 +C250,place order,2015-02-16 09:55:02+00:00,2015-02-16 09:49:29+00:00 +C210,send invoice,2015-02-16 10:17:01+00:00,2015-02-16 10:12:17+00:00 +C195,send reminder,2015-02-16 10:29:39+00:00,2015-02-16 10:16:48+00:00 +C158,pay,2015-02-16 10:53:19+00:00,2015-02-16 10:46:37+00:00 +C144,confirm payment,2015-02-16 11:02:35+00:00,2015-02-16 10:57:20+00:00 +C144,make delivery,2015-02-16 12:43:32+00:00,2015-02-16 11:05:02+00:00 +C141,pay,2015-02-16 11:10:09+00:00,2015-02-16 11:05:17+00:00 +C171,pay,2015-02-16 11:11:54+00:00,2015-02-16 11:08:11+00:00 +C90,prepare delivery,2015-02-16 11:40:20+00:00,2015-02-16 11:14:49+00:00 +C238,send invoice,2015-02-16 11:19:36+00:00,2015-02-16 11:15:12+00:00 +C135,confirm payment,2015-02-16 11:33:49+00:00,2015-02-16 11:23:37+00:00 +C130,make delivery,2015-02-16 13:03:50+00:00,2015-02-16 11:24:03+00:00 +C241,send invoice,2015-02-16 11:38:14+00:00,2015-02-16 11:26:33+00:00 +C217,send invoice,2015-02-16 11:33:33+00:00,2015-02-16 11:26:35+00:00 +C147,make delivery,2015-02-16 11:47:36+00:00,2015-02-16 11:32:23+00:00 +C211,send invoice,2015-02-16 11:40:01+00:00,2015-02-16 11:34:54+00:00 +C112,prepare delivery,2015-02-16 13:58:59+00:00,2015-02-16 11:37:48+00:00 +C137,prepare delivery,2015-02-16 11:51:43+00:00,2015-02-16 11:44:21+00:00 +C251,place order,2015-02-16 13:51:45+00:00,2015-02-16 11:57:05+00:00 +C154,confirm payment,2015-02-16 12:05:36+00:00,2015-02-16 11:57:21+00:00 +C154,make delivery,2015-02-16 12:20:40+00:00,2015-02-16 12:08:57+00:00 +C149,prepare delivery,2015-02-16 12:14:17+00:00,2015-02-16 12:10:17+00:00 +C228,send invoice,2015-02-16 12:19:33+00:00,2015-02-16 12:15:33+00:00 +C125,prepare delivery,2015-02-16 14:43:42+00:00,2015-02-16 12:21:14+00:00 +C130,confirm payment,2015-02-16 12:31:20+00:00,2015-02-16 12:23:54+00:00 +C190,send reminder,2015-02-16 12:50:15+00:00,2015-02-16 12:35:54+00:00 +C136,send reminder,2015-02-16 13:43:56+00:00,2015-02-16 13:19:31+00:00 +C132,pay,2015-02-16 13:36:41+00:00,2015-02-16 13:30:52+00:00 +C252,place order,2015-02-16 17:57:43+00:00,2015-02-16 14:12:18+00:00 +C200,send reminder,2015-02-16 14:36:29+00:00,2015-02-16 14:29:14+00:00 +C152,prepare delivery,2015-02-16 17:18:16+00:00,2015-02-16 14:44:49+00:00 +C156,pay,2015-02-16 14:56:31+00:00,2015-02-16 14:47:52+00:00 +C155,pay,2015-02-16 14:56:26+00:00,2015-02-16 14:53:04+00:00 +C232,send invoice,2015-02-16 15:16:24+00:00,2015-02-16 15:10:28+00:00 +C193,send reminder,2015-02-16 16:18:09+00:00,2015-02-16 15:35:33+00:00 +C148,make delivery,2015-02-16 16:08:07+00:00,2015-02-16 15:41:33+00:00 +C253,place order,2015-02-16 17:53:57+00:00,2015-02-16 15:42:43+00:00 +C201,send invoice,2015-02-16 16:02:01+00:00,2015-02-16 15:56:29+00:00 +C119,prepare delivery,2015-02-16 16:25:24+00:00,2015-02-16 16:21:25+00:00 +C150,prepare delivery,2015-02-16 17:12:00+00:00,2015-02-16 16:49:05+00:00 +C161,prepare delivery,2015-02-16 17:32:27+00:00,2015-02-16 17:25:18+00:00 +C254,place order,2015-02-16 17:48:31+00:00,2015-02-16 17:43:33+00:00 +C146,prepare delivery,2015-02-16 18:10:19+00:00,2015-02-16 17:43:37+00:00 +C205,send reminder,2015-02-16 19:04:42+00:00,2015-02-16 18:43:15+00:00 +C255,place order,2015-02-16 19:52:43+00:00,2015-02-16 19:46:53+00:00 +C256,place order,2015-02-16 23:18:12+00:00,2015-02-16 23:10:01+00:00 +C153,pay,2015-02-17 03:58:56+00:00,2015-02-17 03:53:14+00:00 +C233,send invoice,2015-02-17 09:01:51+00:00,2015-02-17 08:57:56+00:00 +C148,confirm payment,2015-02-17 09:05:53+00:00,2015-02-17 08:58:23+00:00 +C257,place order,2015-02-17 09:09:26+00:00,2015-02-17 09:00:16+00:00 +C147,confirm payment,2015-02-17 09:18:19+00:00,2015-02-17 09:08:30+00:00 +C107,make delivery,2015-02-17 09:44:12+00:00,2015-02-17 09:27:36+00:00 +C157,prepare delivery,2015-02-17 12:25:41+00:00,2015-02-17 09:50:46+00:00 +C244,send invoice,2015-02-17 10:08:25+00:00,2015-02-17 10:03:38+00:00 +C112,make delivery,2015-02-17 10:20:44+00:00,2015-02-17 10:08:16+00:00 +C149,make delivery,2015-02-17 11:48:07+00:00,2015-02-17 10:12:05+00:00 +C258,place order,2015-02-17 12:07:02+00:00,2015-02-17 10:18:39+00:00 +C145,prepare delivery,2015-02-17 10:34:58+00:00,2015-02-17 10:27:28+00:00 +C90,make delivery,2015-02-17 11:03:42+00:00,2015-02-17 10:32:36+00:00 +C125,confirm payment,2015-02-17 10:55:52+00:00,2015-02-17 10:48:12+00:00 +C249,send invoice,2015-02-17 10:57:51+00:00,2015-02-17 10:53:33+00:00 +C220,send invoice,2015-02-17 11:49:16+00:00,2015-02-17 11:45:42+00:00 +C259,place order,2015-02-17 12:03:56+00:00,2015-02-17 11:55:25+00:00 +C90,confirm payment,2015-02-17 12:01:43+00:00,2015-02-17 11:56:52+00:00 +C169,send reminder,2015-02-17 12:28:53+00:00,2015-02-17 12:06:17+00:00 +C226,send invoice,2015-02-17 12:12:58+00:00,2015-02-17 12:09:13+00:00 +C162,send reminder,2015-02-17 12:35:09+00:00,2015-02-17 12:14:16+00:00 +C125,make delivery,2015-02-17 12:33:10+00:00,2015-02-17 12:19:10+00:00 +C240,send invoice,2015-02-17 12:24:33+00:00,2015-02-17 12:20:40+00:00 +C246,send invoice,2015-02-17 12:52:04+00:00,2015-02-17 12:29:53+00:00 +C187,send reminder,2015-02-17 13:05:40+00:00,2015-02-17 12:47:33+00:00 +C168,send reminder,2015-02-17 13:40:40+00:00,2015-02-17 13:07:06+00:00 +C112,confirm payment,2015-02-17 13:27:52+00:00,2015-02-17 13:18:57+00:00 +C227,send invoice,2015-02-17 13:48:10+00:00,2015-02-17 13:41:47+00:00 +C119,make delivery,2015-02-17 13:59:46+00:00,2015-02-17 13:50:37+00:00 +C149,confirm payment,2015-02-17 14:36:41+00:00,2015-02-17 14:03:37+00:00 +C260,place order,2015-02-17 17:09:20+00:00,2015-02-17 14:08:57+00:00 +C120,prepare delivery,2015-02-17 14:42:47+00:00,2015-02-17 14:18:15+00:00 +C223,send invoice,2015-02-17 14:46:20+00:00,2015-02-17 14:41:34+00:00 +C188,pay,2015-02-17 14:53:20+00:00,2015-02-17 14:47:08+00:00 +C137,confirm payment,2015-02-17 14:54:36+00:00,2015-02-17 14:48:46+00:00 +C137,make delivery,2015-02-17 15:05:04+00:00,2015-02-17 14:56:03+00:00 +C107,confirm payment,2015-02-17 15:17:21+00:00,2015-02-17 15:08:30+00:00 +C161,confirm payment,2015-02-17 15:31:46+00:00,2015-02-17 15:26:16+00:00 +C261,place order,2015-02-17 15:40:13+00:00,2015-02-17 15:36:01+00:00 +C179,pay,2015-02-17 15:58:20+00:00,2015-02-17 15:50:07+00:00 +C152,make delivery,2015-02-17 16:36:53+00:00,2015-02-17 16:11:55+00:00 +C218,send invoice,2015-02-17 16:26:06+00:00,2015-02-17 16:20:00+00:00 +C161,make delivery,2015-02-17 16:57:52+00:00,2015-02-17 16:28:57+00:00 +C136,cancel order,2015-02-17 16:49:22+00:00,2015-02-17 16:34:24+00:00 +C178,prepare delivery,2015-02-17 19:07:13+00:00,2015-02-17 16:36:59+00:00 +C150,make delivery,2015-02-17 17:25:45+00:00,2015-02-17 16:59:40+00:00 +C152,confirm payment,2015-02-17 17:07:18+00:00,2015-02-17 17:00:08+00:00 +C195,pay,2015-02-17 17:20:38+00:00,2015-02-17 17:16:14+00:00 +C262,place order,2015-02-17 17:35:06+00:00,2015-02-17 17:30:10+00:00 +C146,confirm payment,2015-02-17 17:51:10+00:00,2015-02-17 17:42:30+00:00 +C256,send invoice,2015-02-17 17:50:54+00:00,2015-02-17 17:46:57+00:00 +C123,prepare delivery,2015-02-17 18:17:14+00:00,2015-02-17 18:10:13+00:00 +C197,pay,2015-02-17 18:20:28+00:00,2015-02-17 18:13:31+00:00 +C230,send invoice,2015-02-17 18:29:14+00:00,2015-02-17 18:23:34+00:00 +C167,prepare delivery,2015-02-17 18:32:26+00:00,2015-02-17 18:28:38+00:00 +C192,pay,2015-02-17 19:02:00+00:00,2015-02-17 18:53:31+00:00 +C146,make delivery,2015-02-17 19:42:44+00:00,2015-02-17 19:17:55+00:00 +C263,place order,2015-02-17 19:25:11+00:00,2015-02-17 19:18:27+00:00 +C264,place order,2015-02-17 22:28:00+00:00,2015-02-17 22:13:08+00:00 +C265,place order,2015-02-18 08:21:45+00:00,2015-02-18 08:14:31+00:00 +C145,make delivery,2015-02-18 10:25:08+00:00,2015-02-18 08:48:56+00:00 +C236,send invoice,2015-02-18 08:59:51+00:00,2015-02-18 08:53:36+00:00 +C150,confirm payment,2015-02-18 09:23:55+00:00,2015-02-18 09:16:12+00:00 +C157,make delivery,2015-02-18 10:58:49+00:00,2015-02-18 09:40:54+00:00 +C138,send reminder,2015-02-18 10:02:12+00:00,2015-02-18 09:54:45+00:00 +C151,pay,2015-02-18 10:14:19+00:00,2015-02-18 10:07:22+00:00 +C266,place order,2015-02-18 10:13:33+00:00,2015-02-18 10:09:53+00:00 +C198,send reminder,2015-02-18 10:29:13+00:00,2015-02-18 10:16:02+00:00 +C157,confirm payment,2015-02-18 10:35:09+00:00,2015-02-18 10:27:50+00:00 +C120,confirm payment,2015-02-18 11:06:13+00:00,2015-02-18 10:59:21+00:00 +C243,send invoice,2015-02-18 11:26:25+00:00,2015-02-18 11:00:26+00:00 +C158,prepare delivery,2015-02-18 11:11:19+00:00,2015-02-18 11:03:44+00:00 +C140,prepare delivery,2015-02-18 13:39:11+00:00,2015-02-18 11:13:59+00:00 +C252,send invoice,2015-02-18 11:22:17+00:00,2015-02-18 11:15:23+00:00 +C190,pay,2015-02-18 11:21:46+00:00,2015-02-18 11:16:24+00:00 +C202,send reminder,2015-02-18 11:46:35+00:00,2015-02-18 11:18:02+00:00 +C172,pay,2015-02-18 11:42:01+00:00,2015-02-18 11:37:15+00:00 +C267,place order,2015-02-18 11:47:23+00:00,2015-02-18 11:37:54+00:00 +C119,confirm payment,2015-02-18 11:54:11+00:00,2015-02-18 11:50:21+00:00 +C174,send reminder,2015-02-18 12:00:29+00:00,2015-02-18 11:50:54+00:00 +C239,send invoice,2015-02-18 12:09:20+00:00,2015-02-18 12:03:28+00:00 +C164,prepare delivery,2015-02-18 12:30:36+00:00,2015-02-18 12:22:45+00:00 +C165,prepare delivery,2015-02-18 12:37:07+00:00,2015-02-18 12:33:14+00:00 +C163,pay,2015-02-18 13:19:40+00:00,2015-02-18 12:48:24+00:00 +C185,pay,2015-02-18 13:12:08+00:00,2015-02-18 13:09:43+00:00 +C111,prepare delivery,2015-02-18 13:20:29+00:00,2015-02-18 13:17:28+00:00 +C199,pay,2015-02-18 13:30:15+00:00,2015-02-18 13:21:38+00:00 +C268,place order,2015-02-18 13:39:45+00:00,2015-02-18 13:33:55+00:00 +C178,confirm payment,2015-02-18 14:18:32+00:00,2015-02-18 14:15:56+00:00 +C156,prepare delivery,2015-02-18 15:14:03+00:00,2015-02-18 14:48:49+00:00 +C160,prepare delivery,2015-02-18 17:13:51+00:00,2015-02-18 14:51:51+00:00 +C120,make delivery,2015-02-18 16:48:11+00:00,2015-02-18 15:18:08+00:00 +C269,place order,2015-02-18 15:35:29+00:00,2015-02-18 15:25:57+00:00 +C254,send invoice,2015-02-18 15:37:28+00:00,2015-02-18 15:32:19+00:00 +C176,pay,2015-02-18 15:55:33+00:00,2015-02-18 15:33:05+00:00 +C255,send invoice,2015-02-18 15:54:42+00:00,2015-02-18 15:47:05+00:00 +C168,cancel order,2015-02-18 15:59:48+00:00,2015-02-18 15:52:57+00:00 +C167,make delivery,2015-02-18 16:08:50+00:00,2015-02-18 15:58:54+00:00 +C263,send invoice,2015-02-18 18:45:55+00:00,2015-02-18 16:20:54+00:00 +C178,make delivery,2015-02-18 16:52:35+00:00,2015-02-18 16:43:19+00:00 +C123,make delivery,2015-02-18 17:15:46+00:00,2015-02-18 16:50:51+00:00 +C250,send invoice,2015-02-18 17:08:06+00:00,2015-02-18 17:03:39+00:00 +C270,place order,2015-02-18 20:25:59+00:00,2015-02-18 17:10:01+00:00 +C116,prepare delivery,2015-02-18 17:39:30+00:00,2015-02-18 17:16:16+00:00 +C182,pay,2015-02-18 17:27:35+00:00,2015-02-18 17:20:54+00:00 +C159,prepare delivery,2015-02-18 20:06:28+00:00,2015-02-18 17:41:02+00:00 +C216,send reminder,2015-02-18 18:15:45+00:00,2015-02-18 17:57:09+00:00 +C271,place order,2015-02-18 18:43:27+00:00,2015-02-18 18:38:09+00:00 +C145,confirm payment,2015-02-18 18:51:35+00:00,2015-02-18 18:40:41+00:00 +C162,pay,2015-02-18 19:09:14+00:00,2015-02-18 19:03:35+00:00 +C173,send reminder,2015-02-18 19:57:52+00:00,2015-02-18 19:25:13+00:00 +C272,place order,2015-02-18 21:46:42+00:00,2015-02-18 21:30:42+00:00 +C273,place order,2015-02-19 05:10:51+00:00,2015-02-19 05:05:24+00:00 +C166,pay,2015-02-19 08:02:32+00:00,2015-02-19 07:56:53+00:00 +C189,pay,2015-02-19 09:28:35+00:00,2015-02-19 09:23:22+00:00 +C180,prepare delivery,2015-02-19 11:55:40+00:00,2015-02-19 09:23:23+00:00 +C158,make delivery,2015-02-19 10:00:25+00:00,2015-02-19 09:34:01+00:00 +C274,place order,2015-02-19 09:48:23+00:00,2015-02-19 09:36:04+00:00 +C251,send invoice,2015-02-19 09:52:46+00:00,2015-02-19 09:47:30+00:00 +C111,make delivery,2015-02-19 10:35:43+00:00,2015-02-19 09:55:45+00:00 +C242,send invoice,2015-02-19 10:07:09+00:00,2015-02-19 10:04:51+00:00 +C123,confirm payment,2015-02-19 10:10:50+00:00,2015-02-19 10:06:06+00:00 +C165,make delivery,2015-02-19 10:48:19+00:00,2015-02-19 10:16:10+00:00 +C206,send reminder,2015-02-19 10:45:34+00:00,2015-02-19 10:23:38+00:00 +C164,make delivery,2015-02-19 11:32:22+00:00,2015-02-19 10:53:00+00:00 +C209,send reminder,2015-02-19 11:12:37+00:00,2015-02-19 10:59:21+00:00 +C257,send invoice,2015-02-19 11:03:35+00:00,2015-02-19 10:59:49+00:00 +C140,make delivery,2015-02-19 12:41:18+00:00,2015-02-19 11:05:56+00:00 +C275,place order,2015-02-19 11:39:29+00:00,2015-02-19 11:30:15+00:00 +C140,confirm payment,2015-02-19 11:44:17+00:00,2015-02-19 11:38:44+00:00 +C158,confirm payment,2015-02-19 11:49:06+00:00,2015-02-19 11:44:15+00:00 +C111,confirm payment,2015-02-19 11:59:32+00:00,2015-02-19 11:53:27+00:00 +C181,send reminder,2015-02-19 13:05:12+00:00,2015-02-19 12:46:32+00:00 +C177,send reminder,2015-02-19 13:12:16+00:00,2015-02-19 12:50:55+00:00 +C193,pay,2015-02-19 13:09:28+00:00,2015-02-19 13:00:48+00:00 +C276,place order,2015-02-19 13:25:42+00:00,2015-02-19 13:18:37+00:00 +C167,confirm payment,2015-02-19 14:08:26+00:00,2015-02-19 13:51:55+00:00 +C151,prepare delivery,2015-02-19 16:56:33+00:00,2015-02-19 14:20:55+00:00 +C164,confirm payment,2015-02-19 14:34:58+00:00,2015-02-19 14:26:37+00:00 +C277,place order,2015-02-19 15:00:17+00:00,2015-02-19 14:55:21+00:00 +C212,send reminder,2015-02-19 15:58:31+00:00,2015-02-19 15:34:39+00:00 +C186,pay,2015-02-19 15:42:18+00:00,2015-02-19 15:37:29+00:00 +C272,send invoice,2015-02-19 15:41:25+00:00,2015-02-19 15:38:21+00:00 +C175,prepare delivery,2015-02-19 18:21:29+00:00,2015-02-19 15:42:44+00:00 +C160,make delivery,2015-02-19 16:06:45+00:00,2015-02-19 15:42:51+00:00 +C156,make delivery,2015-02-19 15:59:46+00:00,2015-02-19 15:44:25+00:00 +C165,confirm payment,2015-02-19 16:08:24+00:00,2015-02-19 16:02:31+00:00 +C108,prepare delivery,2015-02-19 16:32:37+00:00,2015-02-19 16:16:58+00:00 +C156,confirm payment,2015-02-19 16:40:37+00:00,2015-02-19 16:32:42+00:00 +C153,prepare delivery,2015-02-19 17:01:08+00:00,2015-02-19 16:35:39+00:00 +C133,prepare delivery,2015-02-19 16:52:11+00:00,2015-02-19 16:48:17+00:00 +C197,prepare delivery,2015-02-19 17:09:11+00:00,2015-02-19 17:05:24+00:00 +C278,place order,2015-02-19 19:10:08+00:00,2015-02-19 17:08:49+00:00 +C159,make delivery,2015-02-19 17:27:30+00:00,2015-02-19 17:12:11+00:00 +C131,prepare delivery,2015-02-19 17:32:16+00:00,2015-02-19 17:28:37+00:00 +C116,make delivery,2015-02-19 18:54:37+00:00,2015-02-19 17:32:28+00:00 +C215,send reminder,2015-02-19 18:29:05+00:00,2015-02-19 18:17:31+00:00 +C225,send invoice,2015-02-19 18:32:14+00:00,2015-02-19 18:24:28+00:00 +C279,place order,2015-02-19 18:39:14+00:00,2015-02-19 18:35:46+00:00 +C192,prepare delivery,2015-02-19 18:45:59+00:00,2015-02-19 18:38:43+00:00 +C191,pay,2015-02-19 18:48:37+00:00,2015-02-19 18:43:13+00:00 +C275,send invoice,2015-02-19 18:54:15+00:00,2015-02-19 18:46:44+00:00 +C264,send invoice,2015-02-19 19:04:48+00:00,2015-02-19 19:02:35+00:00 +C183,pay,2015-02-19 19:36:18+00:00,2015-02-19 19:33:03+00:00 +C163,prepare delivery,2015-02-19 20:33:52+00:00,2015-02-19 20:31:00+00:00 +C280,place order,2015-02-19 21:26:32+00:00,2015-02-19 21:23:32+00:00 +C170,prepare delivery,2015-02-19 22:11:59+00:00,2015-02-19 21:56:44+00:00 +C203,pay,2015-02-20 00:03:52+00:00,2015-02-19 22:00:40+00:00 +C160,confirm payment,2015-02-19 22:47:22+00:00,2015-02-19 22:38:16+00:00 +C281,place order,2015-02-20 04:30:10+00:00,2015-02-20 04:22:24+00:00 +C247,send invoice,2015-02-20 08:47:24+00:00,2015-02-20 08:43:18+00:00 +C190,prepare delivery,2015-02-20 09:14:50+00:00,2015-02-20 08:52:15+00:00 +C159,confirm payment,2015-02-20 09:14:19+00:00,2015-02-20 09:09:47+00:00 +C184,pay,2015-02-20 09:28:51+00:00,2015-02-20 09:23:09+00:00 +C166,prepare delivery,2015-02-20 09:43:59+00:00,2015-02-20 09:37:10+00:00 +C282,place order,2015-02-20 10:02:56+00:00,2015-02-20 09:48:46+00:00 +C180,make delivery,2015-02-20 10:32:39+00:00,2015-02-20 10:18:22+00:00 +C116,confirm payment,2015-02-20 11:24:32+00:00,2015-02-20 11:02:47+00:00 +C180,confirm payment,2015-02-20 11:21:27+00:00,2015-02-20 11:08:54+00:00 +C274,send invoice,2015-02-20 11:15:53+00:00,2015-02-20 11:09:29+00:00 +C283,place order,2015-02-20 12:07:54+00:00,2015-02-20 11:55:39+00:00 +C245,send invoice,2015-02-20 12:02:16+00:00,2015-02-20 11:55:54+00:00 +C172,prepare delivery,2015-02-20 11:59:35+00:00,2015-02-20 11:56:31+00:00 +C253,send invoice,2015-02-20 12:06:20+00:00,2015-02-20 11:58:39+00:00 +C208,send reminder,2015-02-20 12:25:44+00:00,2015-02-20 12:15:07+00:00 +C177,cancel order,2015-02-20 12:40:13+00:00,2015-02-20 12:24:36+00:00 +C224,send reminder,2015-02-20 13:06:25+00:00,2015-02-20 12:44:52+00:00 +C174,pay,2015-02-20 13:03:45+00:00,2015-02-20 12:56:12+00:00 +C175,confirm payment,2015-02-20 13:17:21+00:00,2015-02-20 13:08:12+00:00 +C213,pay,2015-02-20 13:18:21+00:00,2015-02-20 13:10:25+00:00 +C182,prepare delivery,2015-02-20 13:16:06+00:00,2015-02-20 13:13:10+00:00 +C151,confirm payment,2015-02-20 13:49:55+00:00,2015-02-20 13:42:48+00:00 +C284,place order,2015-02-20 14:16:04+00:00,2015-02-20 14:09:25+00:00 +C282,send invoice,2015-02-20 14:49:20+00:00,2015-02-20 14:23:31+00:00 +C248,send invoice,2015-02-20 14:33:50+00:00,2015-02-20 14:28:25+00:00 +C214,pay,2015-02-20 14:41:44+00:00,2015-02-20 14:35:56+00:00 +C210,pay,2015-02-20 14:56:43+00:00,2015-02-20 14:49:37+00:00 +C237,send invoice,2015-02-20 15:31:24+00:00,2015-02-20 15:21:36+00:00 +C285,place order,2015-02-20 15:42:07+00:00,2015-02-20 15:36:57+00:00 +C131,make delivery,2015-02-20 15:52:32+00:00,2015-02-20 15:40:54+00:00 +C138,pay,2015-02-20 15:49:06+00:00,2015-02-20 15:42:24+00:00 +C202,pay,2015-02-20 15:55:04+00:00,2015-02-20 15:43:37+00:00 +C197,make delivery,2015-02-20 16:23:58+00:00,2015-02-20 15:46:42+00:00 +C151,make delivery,2015-02-20 16:06:09+00:00,2015-02-20 15:48:20+00:00 +C235,send reminder,2015-02-20 16:12:52+00:00,2015-02-20 15:58:51+00:00 +C221,send reminder,2015-02-20 16:55:08+00:00,2015-02-20 16:15:13+00:00 +C108,make delivery,2015-02-20 16:26:54+00:00,2015-02-20 16:15:32+00:00 +C175,make delivery,2015-02-20 16:29:40+00:00,2015-02-20 16:20:03+00:00 +C222,send reminder,2015-02-20 16:41:50+00:00,2015-02-20 16:28:52+00:00 +C133,make delivery,2015-02-20 17:01:35+00:00,2015-02-20 16:36:54+00:00 +C192,make delivery,2015-02-20 18:38:39+00:00,2015-02-20 17:07:45+00:00 +C194,send reminder,2015-02-20 17:30:19+00:00,2015-02-20 17:12:56+00:00 +C133,confirm payment,2015-02-20 17:20:30+00:00,2015-02-20 17:13:28+00:00 +C155,prepare delivery,2015-02-20 17:30:32+00:00,2015-02-20 17:22:46+00:00 +C196,pay,2015-02-20 17:44:28+00:00,2015-02-20 17:30:51+00:00 +C286,place order,2015-02-20 17:38:39+00:00,2015-02-20 17:32:02+00:00 +C170,make delivery,2015-02-20 18:22:23+00:00,2015-02-20 17:56:03+00:00 +C197,confirm payment,2015-02-20 18:23:24+00:00,2015-02-20 18:14:41+00:00 +C163,make delivery,2015-02-20 18:58:56+00:00,2015-02-20 18:45:37+00:00 +C191,prepare delivery,2015-02-20 19:27:30+00:00,2015-02-20 19:12:15+00:00 +C171,prepare delivery,2015-02-20 19:41:17+00:00,2015-02-20 19:14:21+00:00 +C287,place order,2015-02-20 19:31:05+00:00,2015-02-20 19:22:11+00:00 +C173,pay,2015-02-21 00:10:47+00:00,2015-02-20 21:43:01+00:00 +C288,place order,2015-02-21 01:11:28+00:00,2015-02-20 22:20:36+00:00 +C289,place order,2015-02-21 16:54:04+00:00,2015-02-21 16:46:48+00:00 +C290,place order,2015-02-22 17:15:49+00:00,2015-02-22 17:10:49+00:00 +C291,place order,2015-02-23 08:26:35+00:00,2015-02-23 08:24:01+00:00 +C273,send invoice,2015-02-23 08:45:11+00:00,2015-02-23 08:40:39+00:00 +C261,send invoice,2015-02-23 09:27:31+00:00,2015-02-23 09:13:07+00:00 +C153,make delivery,2015-02-23 10:07:19+00:00,2015-02-23 09:30:00+00:00 +C141,prepare delivery,2015-02-23 09:47:14+00:00,2015-02-23 09:43:29+00:00 +C217,send reminder,2015-02-23 10:32:17+00:00,2015-02-23 09:48:40+00:00 +C267,send invoice,2015-02-23 10:08:50+00:00,2015-02-23 10:00:57+00:00 +C166,make delivery,2015-02-23 10:33:03+00:00,2015-02-23 10:06:11+00:00 +C190,confirm payment,2015-02-23 10:21:02+00:00,2015-02-23 10:14:00+00:00 +C292,place order,2015-02-23 10:35:40+00:00,2015-02-23 10:24:08+00:00 +C131,confirm payment,2015-02-23 10:36:11+00:00,2015-02-23 10:30:01+00:00 +C260,send invoice,2015-02-23 10:36:49+00:00,2015-02-23 10:30:58+00:00 +C108,confirm payment,2015-02-23 10:59:37+00:00,2015-02-23 10:45:16+00:00 +C183,prepare delivery,2015-02-23 13:28:21+00:00,2015-02-23 10:55:15+00:00 +C190,make delivery,2015-02-23 11:19:03+00:00,2015-02-23 11:09:33+00:00 +C163,confirm payment,2015-02-23 11:21:01+00:00,2015-02-23 11:15:30+00:00 +C238,send reminder,2015-02-23 12:29:43+00:00,2015-02-23 11:44:46+00:00 +C259,send invoice,2015-02-23 11:51:35+00:00,2015-02-23 11:47:34+00:00 +C166,confirm payment,2015-02-23 11:57:09+00:00,2015-02-23 11:50:29+00:00 +C293,place order,2015-02-23 12:10:19+00:00,2015-02-23 12:06:24+00:00 +C294,place order,2015-02-23 15:48:04+00:00,2015-02-23 13:30:55+00:00 +C170,confirm payment,2015-02-23 13:53:04+00:00,2015-02-23 13:45:17+00:00 +C200,send reminder,2015-02-23 14:12:04+00:00,2015-02-23 13:50:51+00:00 +C181,pay,2015-02-23 14:13:24+00:00,2015-02-23 14:10:11+00:00 +C285,send invoice,2015-02-23 14:29:17+00:00,2015-02-23 14:19:25+00:00 +C182,make delivery,2015-02-23 15:17:47+00:00,2015-02-23 14:40:24+00:00 +C229,pay,2015-02-23 14:52:28+00:00,2015-02-23 14:46:23+00:00 +C265,send invoice,2015-02-23 14:53:40+00:00,2015-02-23 14:48:57+00:00 +C207,pay,2015-02-23 15:11:35+00:00,2015-02-23 15:06:35+00:00 +C211,send reminder,2015-02-23 15:19:46+00:00,2015-02-23 15:08:37+00:00 +C193,prepare delivery,2015-02-23 15:16:32+00:00,2015-02-23 15:13:32+00:00 +C295,place order,2015-02-23 15:23:51+00:00,2015-02-23 15:19:57+00:00 +C153,confirm payment,2015-02-23 15:44:14+00:00,2015-02-23 15:40:56+00:00 +C172,make delivery,2015-02-23 17:29:31+00:00,2015-02-23 15:49:45+00:00 +C276,send invoice,2015-02-23 16:05:19+00:00,2015-02-23 15:51:12+00:00 +C171,make delivery,2015-02-23 16:22:39+00:00,2015-02-23 16:06:41+00:00 +C201,send reminder,2015-02-23 16:58:16+00:00,2015-02-23 16:18:08+00:00 +C262,send invoice,2015-02-23 16:27:50+00:00,2015-02-23 16:21:42+00:00 +C192,confirm payment,2015-02-23 16:48:48+00:00,2015-02-23 16:41:45+00:00 +C296,place order,2015-02-23 17:05:22+00:00,2015-02-23 16:58:01+00:00 +C228,pay,2015-02-23 17:01:56+00:00,2015-02-23 16:58:03+00:00 +C233,send reminder,2015-02-23 17:32:14+00:00,2015-02-23 17:11:43+00:00 +C155,make delivery,2015-02-23 17:32:16+00:00,2015-02-23 17:17:16+00:00 +C182,confirm payment,2015-02-23 17:24:09+00:00,2015-02-23 17:19:51+00:00 +C132,prepare delivery,2015-02-23 17:31:31+00:00,2015-02-23 17:24:03+00:00 +C172,confirm payment,2015-02-23 17:49:20+00:00,2015-02-23 17:45:02+00:00 +C191,make delivery,2015-02-23 19:39:06+00:00,2015-02-23 19:01:10+00:00 +C297,place order,2015-02-23 19:24:50+00:00,2015-02-23 19:14:10+00:00 +C226,pay,2015-02-23 20:47:51+00:00,2015-02-23 20:40:48+00:00 +C219,pay,2015-02-23 20:50:20+00:00,2015-02-23 20:47:51+00:00 +C205,send reminder,2015-02-23 22:02:48+00:00,2015-02-23 21:29:05+00:00 +C298,place order,2015-02-23 22:14:10+00:00,2015-02-23 22:04:34+00:00 +C299,place order,2015-02-24 07:35:47+00:00,2015-02-24 07:28:36+00:00 +C268,send invoice,2015-02-24 09:05:16+00:00,2015-02-24 08:58:59+00:00 +C270,send invoice,2015-02-24 09:46:53+00:00,2015-02-24 09:41:15+00:00 +C300,place order,2015-02-24 10:32:26+00:00,2015-02-24 10:13:35+00:00 +C169,send reminder,2015-02-24 10:22:23+00:00,2015-02-24 10:15:23+00:00 +C281,send invoice,2015-02-24 10:23:26+00:00,2015-02-24 10:20:30+00:00 +C210,prepare delivery,2015-02-24 10:38:16+00:00,2015-02-24 10:30:31+00:00 +C162,prepare delivery,2015-02-24 10:51:54+00:00,2015-02-24 10:45:12+00:00 +C284,send invoice,2015-02-24 10:56:42+00:00,2015-02-24 10:54:11+00:00 +C246,send reminder,2015-02-24 11:24:24+00:00,2015-02-24 11:14:53+00:00 +C258,send invoice,2015-02-24 11:55:05+00:00,2015-02-24 11:22:44+00:00 +C231,pay,2015-02-24 11:33:45+00:00,2015-02-24 11:26:18+00:00 +C141,make delivery,2015-02-24 11:37:08+00:00,2015-02-24 11:26:55+00:00 +C221,pay,2015-02-24 11:32:17+00:00,2015-02-24 11:27:26+00:00 +C296,send invoice,2015-02-24 11:36:01+00:00,2015-02-24 11:31:22+00:00 +C301,place order,2015-02-24 11:51:46+00:00,2015-02-24 11:45:17+00:00 +C183,make delivery,2015-02-24 12:33:13+00:00,2015-02-24 12:15:47+00:00 +C191,confirm payment,2015-02-24 12:35:41+00:00,2015-02-24 12:25:19+00:00 +C249,send reminder,2015-02-24 12:49:23+00:00,2015-02-24 12:29:00+00:00 +C187,send reminder,2015-02-24 13:29:52+00:00,2015-02-24 13:11:50+00:00 +C302,place order,2015-02-24 14:00:53+00:00,2015-02-24 13:48:41+00:00 +C171,confirm payment,2015-02-24 14:14:32+00:00,2015-02-24 14:06:47+00:00 +C292,send invoice,2015-02-24 14:13:05+00:00,2015-02-24 14:09:35+00:00 +C200,cancel order,2015-02-24 14:22:50+00:00,2015-02-24 14:15:12+00:00 +C271,send invoice,2015-02-24 15:00:24+00:00,2015-02-24 14:52:57+00:00 +C218,send reminder,2015-02-24 15:16:29+00:00,2015-02-24 14:55:47+00:00 +C227,send reminder,2015-02-24 15:28:46+00:00,2015-02-24 15:07:17+00:00 +C185,prepare delivery,2015-02-24 15:15:12+00:00,2015-02-24 15:11:35+00:00 +C277,send invoice,2015-02-24 15:21:34+00:00,2015-02-24 15:16:20+00:00 +C201,pay,2015-02-24 15:25:44+00:00,2015-02-24 15:21:12+00:00 +C155,confirm payment,2015-02-24 15:41:41+00:00,2015-02-24 15:34:14+00:00 +C174,prepare delivery,2015-02-24 16:10:53+00:00,2015-02-24 15:43:00+00:00 +C195,prepare delivery,2015-02-24 18:11:26+00:00,2015-02-24 15:43:02+00:00 +C289,send invoice,2015-02-24 15:56:51+00:00,2015-02-24 15:49:18+00:00 +C303,place order,2015-02-24 18:40:49+00:00,2015-02-24 15:55:30+00:00 +C132,make delivery,2015-02-24 16:13:33+00:00,2015-02-24 15:57:41+00:00 +C283,send invoice,2015-02-24 16:20:00+00:00,2015-02-24 16:15:04+00:00 +C179,prepare delivery,2015-02-24 16:25:14+00:00,2015-02-24 16:17:38+00:00 +C216,pay,2015-02-24 16:34:07+00:00,2015-02-24 16:32:05+00:00 +C294,send invoice,2015-02-24 16:41:07+00:00,2015-02-24 16:37:06+00:00 +C230,send reminder,2015-02-24 17:06:19+00:00,2015-02-24 16:46:08+00:00 +C193,make delivery,2015-02-24 17:35:28+00:00,2015-02-24 17:03:56+00:00 +C183,confirm payment,2015-02-24 17:29:08+00:00,2015-02-24 17:12:09+00:00 +C291,send invoice,2015-02-24 17:24:25+00:00,2015-02-24 17:17:48+00:00 +C223,send reminder,2015-02-24 17:52:34+00:00,2015-02-24 17:32:11+00:00 +C204,pay,2015-02-24 17:51:13+00:00,2015-02-24 17:45:51+00:00 +C304,place order,2015-02-24 20:20:15+00:00,2015-02-24 18:09:07+00:00 +C266,send invoice,2015-02-24 18:58:38+00:00,2015-02-24 18:49:56+00:00 +C244,pay,2015-02-24 19:56:25+00:00,2015-02-24 19:49:54+00:00 +C279,send invoice,2015-02-24 19:58:43+00:00,2015-02-24 19:50:59+00:00 +C305,place order,2015-02-24 20:06:41+00:00,2015-02-24 20:03:35+00:00 +C306,place order,2015-02-24 22:46:28+00:00,2015-02-24 22:43:25+00:00 +C240,pay,2015-02-25 03:20:08+00:00,2015-02-25 03:17:28+00:00 +C198,send reminder,2015-02-25 08:29:07+00:00,2015-02-25 08:19:34+00:00 +C193,confirm payment,2015-02-25 08:37:11+00:00,2015-02-25 08:32:17+00:00 +C141,confirm payment,2015-02-25 09:11:15+00:00,2015-02-25 08:44:05+00:00 +C243,send reminder,2015-02-25 09:25:13+00:00,2015-02-25 08:46:30+00:00 +C307,place order,2015-02-25 09:20:14+00:00,2015-02-25 09:15:04+00:00 +C162,confirm payment,2015-02-25 13:50:50+00:00,2015-02-25 09:24:51+00:00 +C236,send reminder,2015-02-25 09:46:11+00:00,2015-02-25 09:32:43+00:00 +C228,prepare delivery,2015-02-25 09:50:36+00:00,2015-02-25 09:43:34+00:00 +C188,prepare delivery,2015-02-25 09:58:06+00:00,2015-02-25 09:50:10+00:00 +C169,pay,2015-02-25 09:57:26+00:00,2015-02-25 09:50:29+00:00 +C299,send invoice,2015-02-25 10:18:26+00:00,2015-02-25 10:12:54+00:00 +C252,send reminder,2015-02-25 10:27:59+00:00,2015-02-25 10:17:39+00:00 +C203,prepare delivery,2015-02-25 10:24:58+00:00,2015-02-25 10:21:56+00:00 +C184,prepare delivery,2015-02-25 10:38:12+00:00,2015-02-25 10:34:40+00:00 +C210,make delivery,2015-02-25 11:38:40+00:00,2015-02-25 10:39:16+00:00 +C239,send reminder,2015-02-25 11:09:03+00:00,2015-02-25 10:46:04+00:00 +C186,prepare delivery,2015-02-25 13:21:16+00:00,2015-02-25 10:46:16+00:00 +C308,place order,2015-02-25 15:00:01+00:00,2015-02-25 10:48:15+00:00 +C234,pay,2015-02-25 12:01:05+00:00,2015-02-25 11:54:38+00:00 +C189,prepare delivery,2015-02-25 12:00:34+00:00,2015-02-25 11:54:55+00:00 +C162,make delivery,2015-02-25 12:39:56+00:00,2015-02-25 12:25:15+00:00 +C210,confirm payment,2015-02-25 12:46:57+00:00,2015-02-25 12:38:42+00:00 +C309,place order,2015-02-25 12:58:22+00:00,2015-02-25 12:54:37+00:00 +C233,pay,2015-02-25 13:26:04+00:00,2015-02-25 13:03:34+00:00 +C132,confirm payment,2015-02-25 13:18:23+00:00,2015-02-25 13:11:26+00:00 +C280,send invoice,2015-02-25 13:17:08+00:00,2015-02-25 13:12:09+00:00 +C179,confirm payment,2015-02-25 13:32:12+00:00,2015-02-25 13:27:29+00:00 +C225,pay,2015-02-25 15:59:40+00:00,2015-02-25 13:59:01+00:00 +C174,make delivery,2015-02-25 14:32:49+00:00,2015-02-25 14:08:59+00:00 +C179,make delivery,2015-02-25 15:57:59+00:00,2015-02-25 14:35:29+00:00 +C173,prepare delivery,2015-02-25 17:05:17+00:00,2015-02-25 14:38:40+00:00 +C286,send invoice,2015-02-25 15:24:42+00:00,2015-02-25 15:00:16+00:00 +C199,prepare delivery,2015-02-25 17:34:45+00:00,2015-02-25 15:06:07+00:00 +C310,place order,2015-02-25 15:13:25+00:00,2015-02-25 15:07:22+00:00 +C185,make delivery,2015-02-25 15:42:08+00:00,2015-02-25 15:13:51+00:00 +C238,pay,2015-02-25 15:27:07+00:00,2015-02-25 15:15:55+00:00 +C185,confirm payment,2015-02-25 15:22:35+00:00,2015-02-25 15:17:36+00:00 +C255,send reminder,2015-02-25 15:56:02+00:00,2015-02-25 15:32:40+00:00 +C194,pay,2015-02-25 15:37:50+00:00,2015-02-25 15:34:34+00:00 +C176,prepare delivery,2015-02-25 15:50:06+00:00,2015-02-25 15:46:16+00:00 +C208,pay,2015-02-25 17:56:06+00:00,2015-02-25 15:48:37+00:00 +C263,send reminder,2015-02-25 16:14:50+00:00,2015-02-25 15:56:55+00:00 +C288,send invoice,2015-02-25 16:19:12+00:00,2015-02-25 16:15:16+00:00 +C195,make delivery,2015-02-25 16:42:47+00:00,2015-02-25 16:15:24+00:00 +C311,place order,2015-02-25 16:44:29+00:00,2015-02-25 16:32:51+00:00 +C184,make delivery,2015-02-25 18:31:58+00:00,2015-02-25 18:07:22+00:00 +C312,place order,2015-02-25 18:27:58+00:00,2015-02-25 18:23:49+00:00 +C306,send invoice,2015-02-25 18:38:56+00:00,2015-02-25 18:31:12+00:00 +C228,make delivery,2015-02-25 20:47:34+00:00,2015-02-25 19:15:18+00:00 +C214,prepare delivery,2015-02-25 20:46:33+00:00,2015-02-25 20:43:29+00:00 +C313,place order,2015-02-25 21:02:39+00:00,2015-02-25 20:47:42+00:00 +C174,confirm payment,2015-02-25 21:10:52+00:00,2015-02-25 21:05:16+00:00 +C188,make delivery,2015-02-25 21:50:56+00:00,2015-02-25 21:26:41+00:00 +C314,place order,2015-02-26 01:55:47+00:00,2015-02-26 01:47:24+00:00 +C304,send invoice,2015-02-26 08:38:51+00:00,2015-02-26 08:32:46+00:00 +C251,send reminder,2015-02-26 09:21:39+00:00,2015-02-26 09:05:56+00:00 +C186,make delivery,2015-02-26 09:36:49+00:00,2015-02-26 09:21:18+00:00 +C308,send invoice,2015-02-26 09:55:55+00:00,2015-02-26 09:51:10+00:00 +C315,place order,2015-02-26 10:12:24+00:00,2015-02-26 09:58:15+00:00 +C203,make delivery,2015-02-26 11:49:05+00:00,2015-02-26 10:10:08+00:00 +C206,send reminder,2015-02-26 10:34:33+00:00,2015-02-26 10:23:55+00:00 +C240,prepare delivery,2015-02-26 10:36:35+00:00,2015-02-26 10:29:23+00:00 +C209,send reminder,2015-02-26 10:43:02+00:00,2015-02-26 10:35:10+00:00 +C216,prepare delivery,2015-02-26 11:03:38+00:00,2015-02-26 10:38:45+00:00 +C293,send invoice,2015-02-26 10:53:38+00:00,2015-02-26 10:46:44+00:00 +C230,pay,2015-02-26 11:01:31+00:00,2015-02-26 10:57:03+00:00 +C269,send invoice,2015-02-26 13:30:08+00:00,2015-02-26 10:59:09+00:00 +C228,confirm payment,2015-02-26 11:16:39+00:00,2015-02-26 11:11:19+00:00 +C257,send reminder,2015-02-26 11:49:47+00:00,2015-02-26 11:26:37+00:00 +C242,send reminder,2015-02-26 11:46:08+00:00,2015-02-26 11:30:20+00:00 +C278,send invoice,2015-02-26 11:42:22+00:00,2015-02-26 11:33:46+00:00 +C138,prepare delivery,2015-02-26 14:11:52+00:00,2015-02-26 11:42:34+00:00 +C184,confirm payment,2015-02-26 11:48:27+00:00,2015-02-26 11:44:39+00:00 +C235,pay,2015-02-26 11:57:44+00:00,2015-02-26 11:50:36+00:00 +C300,send invoice,2015-02-26 11:56:36+00:00,2015-02-26 11:54:11+00:00 +C305,send invoice,2015-02-26 12:14:33+00:00,2015-02-26 12:05:54+00:00 +C205,cancel order,2015-02-26 12:21:33+00:00,2015-02-26 12:10:06+00:00 +C316,place order,2015-02-26 12:17:54+00:00,2015-02-26 12:14:37+00:00 +C186,confirm payment,2015-02-26 12:32:22+00:00,2015-02-26 12:20:25+00:00 +C218,pay,2015-02-26 12:33:53+00:00,2015-02-26 12:29:49+00:00 +C189,make delivery,2015-02-26 12:46:35+00:00,2015-02-26 12:35:21+00:00 +C287,send invoice,2015-02-26 13:06:06+00:00,2015-02-26 13:02:42+00:00 +C244,prepare delivery,2015-02-26 13:13:27+00:00,2015-02-26 13:05:35+00:00 +C195,confirm payment,2015-02-26 13:47:27+00:00,2015-02-26 13:39:40+00:00 +C173,make delivery,2015-02-26 14:11:18+00:00,2015-02-26 13:41:24+00:00 +C317,place order,2015-02-26 13:50:25+00:00,2015-02-26 13:47:22+00:00 +C246,pay,2015-02-26 14:30:05+00:00,2015-02-26 14:24:25+00:00 +C211,pay,2015-02-26 14:32:17+00:00,2015-02-26 14:29:24+00:00 +C199,confirm payment,2015-02-26 15:25:54+00:00,2015-02-26 15:16:16+00:00 +C176,make delivery,2015-02-26 16:42:45+00:00,2015-02-26 15:45:31+00:00 +C231,prepare delivery,2015-02-26 15:53:06+00:00,2015-02-26 15:49:34+00:00 +C318,place order,2015-02-26 15:55:32+00:00,2015-02-26 15:52:51+00:00 +C199,make delivery,2015-02-26 16:51:14+00:00,2015-02-26 16:28:12+00:00 +C252,pay,2015-02-26 17:04:40+00:00,2015-02-26 16:59:32+00:00 +C272,send reminder,2015-02-26 17:16:43+00:00,2015-02-26 16:59:32+00:00 +C214,make delivery,2015-02-26 17:28:48+00:00,2015-02-26 17:15:13+00:00 +C188,confirm payment,2015-02-26 17:45:14+00:00,2015-02-26 17:36:52+00:00 +C176,confirm payment,2015-02-26 18:11:19+00:00,2015-02-26 18:02:54+00:00 +C319,place order,2015-02-26 18:17:57+00:00,2015-02-26 18:03:49+00:00 +C214,confirm payment,2015-02-26 19:00:40+00:00,2015-02-26 18:52:19+00:00 +C223,pay,2015-02-26 19:22:21+00:00,2015-02-26 19:17:48+00:00 +C202,prepare delivery,2015-02-26 19:44:47+00:00,2015-02-26 19:41:41+00:00 +C320,place order,2015-02-26 23:50:41+00:00,2015-02-26 19:47:42+00:00 +C321,place order,2015-02-26 23:22:19+00:00,2015-02-26 23:11:38+00:00 +C264,send reminder,2015-02-27 08:49:40+00:00,2015-02-27 08:37:12+00:00 +C212,send reminder,2015-02-27 08:51:05+00:00,2015-02-27 08:40:00+00:00 +C198,cancel order,2015-02-27 09:03:01+00:00,2015-02-27 08:54:23+00:00 +C322,place order,2015-02-27 09:14:32+00:00,2015-02-27 09:02:12+00:00 +C189,confirm payment,2015-02-27 09:18:51+00:00,2015-02-27 09:14:58+00:00 +C240,confirm payment,2015-02-27 09:39:58+00:00,2015-02-27 09:31:33+00:00 +C229,prepare delivery,2015-02-27 09:46:29+00:00,2015-02-27 09:42:44+00:00 +C203,confirm payment,2015-02-27 09:51:05+00:00,2015-02-27 09:44:07+00:00 +C209,cancel order,2015-02-27 10:25:30+00:00,2015-02-27 10:10:37+00:00 +C187,pay,2015-02-27 10:19:17+00:00,2015-02-27 10:12:25+00:00 +C323,place order,2015-02-27 12:59:27+00:00,2015-02-27 10:22:31+00:00 +C181,prepare delivery,2015-02-27 10:34:14+00:00,2015-02-27 10:31:25+00:00 +C233,prepare delivery,2015-02-27 10:46:39+00:00,2015-02-27 10:42:46+00:00 +C221,prepare delivery,2015-02-27 11:15:30+00:00,2015-02-27 11:11:33+00:00 +C244,make delivery,2015-02-27 11:22:21+00:00,2015-02-27 11:13:10+00:00 +C240,make delivery,2015-02-27 11:49:38+00:00,2015-02-27 11:21:10+00:00 +C215,send reminder,2015-02-27 11:51:24+00:00,2015-02-27 11:30:51+00:00 +C295,send invoice,2015-02-27 11:46:43+00:00,2015-02-27 11:39:25+00:00 +C324,place order,2015-02-27 12:13:08+00:00,2015-02-27 12:03:09+00:00 +C169,prepare delivery,2015-02-27 14:27:06+00:00,2015-02-27 12:06:14+00:00 +C248,send reminder,2015-02-27 12:30:20+00:00,2015-02-27 12:08:01+00:00 +C138,make delivery,2015-02-27 12:38:37+00:00,2015-02-27 12:26:23+00:00 +C206,cancel order,2015-02-27 13:04:04+00:00,2015-02-27 12:57:42+00:00 +C274,send reminder,2015-02-27 13:13:14+00:00,2015-02-27 13:00:51+00:00 +C325,place order,2015-02-27 18:09:51+00:00,2015-02-27 13:24:26+00:00 +C216,make delivery,2015-02-27 14:14:49+00:00,2015-02-27 14:03:49+00:00 +C241,pay,2015-02-27 14:36:26+00:00,2015-02-27 14:25:16+00:00 +C173,confirm payment,2015-02-27 14:55:43+00:00,2015-02-27 14:43:55+00:00 +C204,prepare delivery,2015-02-27 17:25:00+00:00,2015-02-27 14:47:53+00:00 +C326,place order,2015-02-27 15:12:07+00:00,2015-02-27 15:06:59+00:00 +C244,confirm payment,2015-02-27 18:57:21+00:00,2015-02-27 15:32:41+00:00 +C201,prepare delivery,2015-02-27 15:52:16+00:00,2015-02-27 15:48:30+00:00 +C327,place order,2015-02-27 16:54:04+00:00,2015-02-27 16:32:05+00:00 +C245,send reminder,2015-02-27 16:44:41+00:00,2015-02-27 16:37:29+00:00 +C312,send invoice,2015-02-27 17:13:19+00:00,2015-02-27 17:04:41+00:00 +C224,send reminder,2015-02-27 17:26:20+00:00,2015-02-27 17:11:49+00:00 +C316,send invoice,2015-02-27 17:27:31+00:00,2015-02-27 17:17:55+00:00 +C208,prepare delivery,2015-02-27 19:56:48+00:00,2015-02-27 17:21:04+00:00 +C219,prepare delivery,2015-02-27 17:34:13+00:00,2015-02-27 17:26:32+00:00 +C231,make delivery,2015-02-27 19:15:46+00:00,2015-02-27 17:46:24+00:00 +C328,place order,2015-02-27 18:29:02+00:00,2015-02-27 18:22:17+00:00 +C223,prepare delivery,2015-02-27 18:48:24+00:00,2015-02-27 18:45:26+00:00 +C256,pay,2015-02-27 18:54:43+00:00,2015-02-27 18:50:35+00:00 +C216,confirm payment,2015-02-27 18:59:22+00:00,2015-02-27 18:53:55+00:00 +C329,place order,2015-02-27 20:55:59+00:00,2015-02-27 20:43:06+00:00 +C138,confirm payment,2015-02-27 22:25:46+00:00,2015-02-27 22:16:30+00:00 +C330,place order,2015-02-28 07:02:20+00:00,2015-02-28 06:50:07+00:00 +C220,pay,2015-02-28 20:43:39+00:00,2015-02-28 20:38:02+00:00 +C331,place order,2015-03-01 03:57:38+00:00,2015-03-01 03:52:15+00:00 +C332,place order,2015-03-02 01:04:43+00:00,2015-03-02 00:52:41+00:00 +C222,send reminder,2015-03-02 09:15:50+00:00,2015-03-02 08:59:47+00:00 +C238,prepare delivery,2015-03-02 09:18:22+00:00,2015-03-02 09:10:26+00:00 +C326,send invoice,2015-03-02 10:03:09+00:00,2015-03-02 09:55:41+00:00 +C333,place order,2015-03-02 10:10:27+00:00,2015-03-02 09:58:04+00:00 +C226,prepare delivery,2015-03-02 10:05:35+00:00,2015-03-02 09:58:18+00:00 +C318,send invoice,2015-03-02 10:13:11+00:00,2015-03-02 10:09:15+00:00 +C232,pay,2015-03-02 10:17:01+00:00,2015-03-02 10:11:13+00:00 +C298,send invoice,2015-03-02 10:16:26+00:00,2015-03-02 10:12:16+00:00 +C221,make delivery,2015-03-02 10:26:57+00:00,2015-03-02 10:12:19+00:00 +C229,make delivery,2015-03-02 10:49:58+00:00,2015-03-02 10:12:33+00:00 +C267,send reminder,2015-03-02 10:33:57+00:00,2015-03-02 10:14:52+00:00 +C255,pay,2015-03-02 10:21:57+00:00,2015-03-02 10:17:23+00:00 +C202,make delivery,2015-03-02 11:58:29+00:00,2015-03-02 10:30:51+00:00 +C261,send reminder,2015-03-02 10:53:54+00:00,2015-03-02 10:37:03+00:00 +C259,pay,2015-03-02 10:46:30+00:00,2015-03-02 10:39:19+00:00 +C314,send invoice,2015-03-02 11:12:01+00:00,2015-03-02 11:04:33+00:00 +C236,pay,2015-03-02 11:25:17+00:00,2015-03-02 11:15:56+00:00 +C218,prepare delivery,2015-03-02 11:31:18+00:00,2015-03-02 11:23:28+00:00 +C324,send invoice,2015-03-02 11:54:46+00:00,2015-03-02 11:36:16+00:00 +C315,send invoice,2015-03-02 12:04:52+00:00,2015-03-02 11:56:54+00:00 +C303,send invoice,2015-03-02 14:13:55+00:00,2015-03-02 12:10:42+00:00 +C334,place order,2015-03-02 12:24:29+00:00,2015-03-02 12:14:15+00:00 +C217,send reminder,2015-03-02 12:48:30+00:00,2015-03-02 12:35:04+00:00 +C265,send reminder,2015-03-02 12:59:29+00:00,2015-03-02 12:35:53+00:00 +C290,send invoice,2015-03-02 13:11:02+00:00,2015-03-02 13:03:27+00:00 +C233,make delivery,2015-03-02 14:47:39+00:00,2015-03-02 13:24:45+00:00 +C169,make delivery,2015-03-02 14:02:48+00:00,2015-03-02 13:29:29+00:00 +C196,prepare delivery,2015-03-02 13:45:42+00:00,2015-03-02 13:42:03+00:00 +C335,place order,2015-03-02 13:54:24+00:00,2015-03-02 13:46:38+00:00 +C181,make delivery,2015-03-02 13:58:54+00:00,2015-03-02 13:46:46+00:00 +C310,send invoice,2015-03-02 14:53:40+00:00,2015-03-02 14:49:00+00:00 +C213,prepare delivery,2015-03-02 17:12:10+00:00,2015-03-02 14:51:53+00:00 +C275,pay,2015-03-02 15:17:58+00:00,2015-03-02 15:14:11+00:00 +C231,confirm payment,2015-03-02 15:46:26+00:00,2015-03-02 15:37:34+00:00 +C328,send invoice,2015-03-02 15:57:21+00:00,2015-03-02 15:49:31+00:00 +C336,place order,2015-03-02 15:57:17+00:00,2015-03-02 15:51:23+00:00 +C219,make delivery,2015-03-02 16:25:21+00:00,2015-03-02 15:54:37+00:00 +C201,make delivery,2015-03-02 16:07:52+00:00,2015-03-02 15:56:47+00:00 +C202,confirm payment,2015-03-02 16:14:08+00:00,2015-03-02 16:05:34+00:00 +C204,make delivery,2015-03-02 16:32:23+00:00,2015-03-02 16:18:05+00:00 +C221,confirm payment,2015-03-02 16:55:09+00:00,2015-03-02 16:39:29+00:00 +C238,make delivery,2015-03-02 18:05:29+00:00,2015-03-02 17:48:58+00:00 +C337,place order,2015-03-02 21:24:23+00:00,2015-03-02 18:00:53+00:00 +C229,confirm payment,2015-03-02 18:55:31+00:00,2015-03-02 18:50:18+00:00 +C311,send invoice,2015-03-02 19:18:14+00:00,2015-03-02 19:09:13+00:00 +C302,send invoice,2015-03-02 19:52:46+00:00,2015-03-02 19:38:38+00:00 +C338,place order,2015-03-02 20:25:21+00:00,2015-03-02 19:38:53+00:00 +C233,confirm payment,2015-03-02 20:28:42+00:00,2015-03-02 19:52:08+00:00 +C262,send reminder,2015-03-02 20:31:23+00:00,2015-03-02 20:17:23+00:00 +C253,pay,2015-03-02 20:47:48+00:00,2015-03-02 20:41:50+00:00 +C339,place order,2015-03-03 01:53:14+00:00,2015-03-02 22:54:01+00:00 +C207,prepare delivery,2015-03-03 08:23:41+00:00,2015-03-03 08:20:45+00:00 +C208,make delivery,2015-03-03 08:40:26+00:00,2015-03-03 08:28:02+00:00 +C219,confirm payment,2015-03-03 08:42:50+00:00,2015-03-03 08:36:11+00:00 +C223,make delivery,2015-03-03 09:05:28+00:00,2015-03-03 08:52:03+00:00 +C322,send invoice,2015-03-03 09:39:05+00:00,2015-03-03 09:23:00+00:00 +C281,send reminder,2015-03-03 09:47:12+00:00,2015-03-03 09:35:07+00:00 +C340,place order,2015-03-03 09:38:36+00:00,2015-03-03 09:36:16+00:00 +C201,confirm payment,2015-03-03 09:57:15+00:00,2015-03-03 09:48:46+00:00 +C169,confirm payment,2015-03-03 10:19:54+00:00,2015-03-03 09:51:33+00:00 +C237,pay,2015-03-03 10:01:00+00:00,2015-03-03 09:54:00+00:00 +C263,pay,2015-03-03 10:18:20+00:00,2015-03-03 10:11:16+00:00 +C249,send reminder,2015-03-03 10:40:31+00:00,2015-03-03 10:17:33+00:00 +C218,make delivery,2015-03-03 10:33:37+00:00,2015-03-03 10:19:55+00:00 +C258,send reminder,2015-03-03 10:58:37+00:00,2015-03-03 10:32:38+00:00 +C272,pay,2015-03-03 10:51:20+00:00,2015-03-03 10:47:31+00:00 +C329,send invoice,2015-03-03 11:20:52+00:00,2015-03-03 11:11:06+00:00 +C257,pay,2015-03-03 11:29:51+00:00,2015-03-03 11:18:48+00:00 +C307,send invoice,2015-03-03 11:29:50+00:00,2015-03-03 11:25:16+00:00 +C297,send invoice,2015-03-03 11:32:06+00:00,2015-03-03 11:26:23+00:00 +C341,place order,2015-03-03 11:35:55+00:00,2015-03-03 11:30:39+00:00 +C181,confirm payment,2015-03-03 11:38:42+00:00,2015-03-03 11:33:09+00:00 +C226,make delivery,2015-03-03 12:06:45+00:00,2015-03-03 11:38:40+00:00 +C196,confirm payment,2015-03-03 11:54:48+00:00,2015-03-03 11:46:53+00:00 +C204,confirm payment,2015-03-03 12:38:27+00:00,2015-03-03 12:34:22+00:00 +C213,make delivery,2015-03-03 13:14:19+00:00,2015-03-03 13:00:19+00:00 +C342,place order,2015-03-03 13:23:31+00:00,2015-03-03 13:19:26+00:00 +C301,send invoice,2015-03-03 13:36:06+00:00,2015-03-03 13:29:24+00:00 +C223,confirm payment,2015-03-03 13:42:11+00:00,2015-03-03 13:31:52+00:00 +C270,pay,2015-03-03 13:53:35+00:00,2015-03-03 13:50:50+00:00 +C217,cancel order,2015-03-03 14:09:49+00:00,2015-03-03 13:54:40+00:00 +C196,make delivery,2015-03-03 14:29:49+00:00,2015-03-03 14:02:52+00:00 +C284,send reminder,2015-03-03 15:04:24+00:00,2015-03-03 14:44:11+00:00 +C313,send invoice,2015-03-03 14:53:35+00:00,2015-03-03 14:47:46+00:00 +C187,prepare delivery,2015-03-03 17:21:45+00:00,2015-03-03 14:56:00+00:00 +C343,place order,2015-03-03 15:03:40+00:00,2015-03-03 14:56:59+00:00 +C208,confirm payment,2015-03-03 15:16:46+00:00,2015-03-03 15:08:17+00:00 +C271,send reminder,2015-03-03 15:31:28+00:00,2015-03-03 15:20:15+00:00 +C317,send invoice,2015-03-03 15:42:30+00:00,2015-03-03 15:38:46+00:00 +C289,send reminder,2015-03-03 16:02:20+00:00,2015-03-03 15:38:48+00:00 +C236,prepare delivery,2015-03-03 15:55:42+00:00,2015-03-03 15:49:20+00:00 +C218,confirm payment,2015-03-03 16:16:09+00:00,2015-03-03 15:56:16+00:00 +C319,send invoice,2015-03-03 16:29:36+00:00,2015-03-03 16:17:19+00:00 +C215,pay,2015-03-03 16:33:06+00:00,2015-03-03 16:17:27+00:00 +C309,send invoice,2015-03-03 16:39:58+00:00,2015-03-03 16:24:36+00:00 +C291,send reminder,2015-03-03 16:52:36+00:00,2015-03-03 16:28:57+00:00 +C336,send invoice,2015-03-03 16:39:04+00:00,2015-03-03 16:35:14+00:00 +C212,pay,2015-03-03 16:39:05+00:00,2015-03-03 16:35:21+00:00 +C283,send reminder,2015-03-03 17:15:18+00:00,2015-03-03 16:51:35+00:00 +C344,place order,2015-03-03 17:14:57+00:00,2015-03-03 17:12:05+00:00 +C227,send reminder,2015-03-03 18:06:56+00:00,2015-03-03 17:44:09+00:00 +C230,prepare delivery,2015-03-03 18:03:45+00:00,2015-03-03 18:00:08+00:00 +C234,prepare delivery,2015-03-03 18:19:38+00:00,2015-03-03 18:12:10+00:00 +C345,place order,2015-03-03 18:45:34+00:00,2015-03-03 18:42:17+00:00 +C279,send reminder,2015-03-03 19:09:37+00:00,2015-03-03 18:46:47+00:00 +C285,pay,2015-03-03 19:03:06+00:00,2015-03-03 18:58:57+00:00 +C282,pay,2015-03-03 19:20:26+00:00,2015-03-03 19:12:33+00:00 +C277,send reminder,2015-03-03 21:27:04+00:00,2015-03-03 21:08:56+00:00 +C346,place order,2015-03-03 21:46:03+00:00,2015-03-03 21:43:06+00:00 +C347,place order,2015-03-04 10:51:24+00:00,2015-03-04 06:19:48+00:00 +C207,make delivery,2015-03-04 08:58:20+00:00,2015-03-04 08:44:45+00:00 +C238,confirm payment,2015-03-04 09:01:19+00:00,2015-03-04 08:56:24+00:00 +C259,prepare delivery,2015-03-04 09:04:28+00:00,2015-03-04 08:56:51+00:00 +C266,send reminder,2015-03-04 09:49:42+00:00,2015-03-04 09:34:15+00:00 +C232,prepare delivery,2015-03-04 09:57:56+00:00,2015-03-04 09:54:47+00:00 +C348,place order,2015-03-04 10:41:48+00:00,2015-03-04 09:57:54+00:00 +C321,send invoice,2015-03-04 10:19:40+00:00,2015-03-04 10:11:39+00:00 +C226,confirm payment,2015-03-04 13:01:29+00:00,2015-03-04 10:19:27+00:00 +C211,prepare delivery,2015-03-04 10:49:52+00:00,2015-03-04 10:41:54+00:00 +C320,send invoice,2015-03-04 10:51:03+00:00,2015-03-04 10:47:46+00:00 +C343,send invoice,2015-03-04 11:01:48+00:00,2015-03-04 10:54:47+00:00 +C222,pay,2015-03-04 10:59:59+00:00,2015-03-04 10:55:27+00:00 +C258,pay,2015-03-04 11:05:02+00:00,2015-03-04 10:58:31+00:00 +C213,confirm payment,2015-03-04 11:06:26+00:00,2015-03-04 11:03:10+00:00 +C274,pay,2015-03-04 11:20:09+00:00,2015-03-04 11:15:25+00:00 +C255,prepare delivery,2015-03-04 11:31:40+00:00,2015-03-04 11:24:32+00:00 +C243,send reminder,2015-03-04 11:40:57+00:00,2015-03-04 11:32:08+00:00 +C252,prepare delivery,2015-03-04 12:16:17+00:00,2015-03-04 11:54:38+00:00 +C349,place order,2015-03-04 12:20:05+00:00,2015-03-04 12:13:55+00:00 +C225,prepare delivery,2015-03-04 15:47:32+00:00,2015-03-04 13:08:42+00:00 +C207,confirm payment,2015-03-04 13:38:49+00:00,2015-03-04 13:29:00+00:00 +C350,place order,2015-03-04 14:13:05+00:00,2015-03-04 13:45:57+00:00 +C237,prepare delivery,2015-03-04 14:33:55+00:00,2015-03-04 14:09:25+00:00 +C325,send invoice,2015-03-04 14:30:50+00:00,2015-03-04 14:23:54+00:00 +C187,make delivery,2015-03-04 16:00:09+00:00,2015-03-04 14:44:52+00:00 +C239,send reminder,2015-03-04 15:19:07+00:00,2015-03-04 14:57:48+00:00 +C256,prepare delivery,2015-03-04 15:28:04+00:00,2015-03-04 15:02:02+00:00 +C267,pay,2015-03-04 15:13:44+00:00,2015-03-04 15:07:18+00:00 +C230,confirm payment,2015-03-04 15:50:09+00:00,2015-03-04 15:43:47+00:00 +C351,place order,2015-03-04 19:26:43+00:00,2015-03-04 15:50:01+00:00 +C230,make delivery,2015-03-04 16:35:41+00:00,2015-03-04 15:56:06+00:00 +C246,prepare delivery,2015-03-04 16:29:58+00:00,2015-03-04 16:03:53+00:00 +C251,send reminder,2015-03-04 16:40:40+00:00,2015-03-04 16:16:06+00:00 +C341,send invoice,2015-03-04 16:57:49+00:00,2015-03-04 16:51:02+00:00 +C220,prepare delivery,2015-03-04 17:00:02+00:00,2015-03-04 16:52:05+00:00 +C259,make delivery,2015-03-04 17:32:33+00:00,2015-03-04 17:04:04+00:00 +C304,send reminder,2015-03-04 17:26:23+00:00,2015-03-04 17:09:09+00:00 +C327,send invoice,2015-03-04 17:23:02+00:00,2015-03-04 17:20:08+00:00 +C236,confirm payment,2015-03-04 18:08:49+00:00,2015-03-04 17:35:21+00:00 +C232,confirm payment,2015-03-04 17:51:19+00:00,2015-03-04 17:42:32+00:00 +C352,place order,2015-03-04 18:10:30+00:00,2015-03-04 17:58:10+00:00 +C236,make delivery,2015-03-04 18:35:39+00:00,2015-03-04 18:08:14+00:00 +C260,pay,2015-03-04 18:40:12+00:00,2015-03-04 18:34:09+00:00 +C275,prepare delivery,2015-03-04 18:46:19+00:00,2015-03-04 18:43:19+00:00 +C286,send reminder,2015-03-04 19:04:54+00:00,2015-03-04 18:48:25+00:00 +C187,confirm payment,2015-03-04 19:44:16+00:00,2015-03-04 19:09:56+00:00 +C234,make delivery,2015-03-04 20:29:38+00:00,2015-03-04 20:16:00+00:00 +C247,pay,2015-03-04 20:25:22+00:00,2015-03-04 20:19:06+00:00 +C353,place order,2015-03-04 20:33:21+00:00,2015-03-04 20:30:44+00:00 +C354,place order,2015-03-05 00:09:43+00:00,2015-03-05 00:05:36+00:00 +C194,prepare delivery,2015-03-05 09:11:49+00:00,2015-03-05 08:44:59+00:00 +C340,send invoice,2015-03-05 08:56:39+00:00,2015-03-05 08:52:50+00:00 +C211,make delivery,2015-03-05 09:17:28+00:00,2015-03-05 08:59:39+00:00 +C355,place order,2015-03-05 09:14:24+00:00,2015-03-05 09:06:17+00:00 +C224,pay,2015-03-05 09:33:57+00:00,2015-03-05 09:30:25+00:00 +C235,prepare delivery,2015-03-05 10:15:52+00:00,2015-03-05 10:12:07+00:00 +C356,place order,2015-03-05 10:40:34+00:00,2015-03-05 10:30:41+00:00 +C225,make delivery,2015-03-05 11:02:05+00:00,2015-03-05 10:44:44+00:00 +C252,make delivery,2015-03-05 11:26:04+00:00,2015-03-05 11:03:10+00:00 +C263,prepare delivery,2015-03-05 11:21:55+00:00,2015-03-05 11:14:11+00:00 +C306,send reminder,2015-03-05 11:51:12+00:00,2015-03-05 11:20:26+00:00 +C232,make delivery,2015-03-05 12:11:53+00:00,2015-03-05 11:32:10+00:00 +C237,make delivery,2015-03-05 13:07:48+00:00,2015-03-05 11:47:21+00:00 +C330,send invoice,2015-03-05 11:59:48+00:00,2015-03-05 11:51:02+00:00 +C255,make delivery,2015-03-05 12:39:11+00:00,2015-03-05 11:59:23+00:00 +C211,confirm payment,2015-03-05 12:13:45+00:00,2015-03-05 11:59:50+00:00 +C300,send reminder,2015-03-05 12:27:11+00:00,2015-03-05 12:01:00+00:00 +C357,place order,2015-03-05 12:25:17+00:00,2015-03-05 12:19:29+00:00 +C280,pay,2015-03-05 12:26:59+00:00,2015-03-05 12:23:24+00:00 +C284,pay,2015-03-05 12:40:50+00:00,2015-03-05 12:34:53+00:00 +C352,send invoice,2015-03-05 12:46:36+00:00,2015-03-05 12:39:58+00:00 +C239,cancel order,2015-03-05 12:50:29+00:00,2015-03-05 12:43:46+00:00 +C348,send invoice,2015-03-05 13:00:25+00:00,2015-03-05 12:56:20+00:00 +C276,pay,2015-03-05 13:20:39+00:00,2015-03-05 12:59:42+00:00 +C250,pay,2015-03-05 13:26:59+00:00,2015-03-05 13:16:05+00:00 +C259,confirm payment,2015-03-05 13:56:38+00:00,2015-03-05 13:41:40+00:00 +C358,place order,2015-03-05 17:48:08+00:00,2015-03-05 13:57:06+00:00 +C237,confirm payment,2015-03-05 14:09:24+00:00,2015-03-05 14:03:33+00:00 +C246,make delivery,2015-03-05 14:55:40+00:00,2015-03-05 14:46:29+00:00 +C225,confirm payment,2015-03-05 15:02:45+00:00,2015-03-05 14:53:58+00:00 +C331,send invoice,2015-03-05 15:12:39+00:00,2015-03-05 15:06:20+00:00 +C256,make delivery,2015-03-05 15:48:13+00:00,2015-03-05 15:17:22+00:00 +C349,send invoice,2015-03-05 15:34:20+00:00,2015-03-05 15:29:49+00:00 +C242,send reminder,2015-03-05 15:43:05+00:00,2015-03-05 15:29:52+00:00 +C234,confirm payment,2015-03-05 16:01:02+00:00,2015-03-05 15:52:10+00:00 +C287,send reminder,2015-03-05 16:10:54+00:00,2015-03-05 15:53:04+00:00 +C353,send invoice,2015-03-05 16:10:52+00:00,2015-03-05 16:03:08+00:00 +C252,confirm payment,2015-03-05 16:39:02+00:00,2015-03-05 16:07:39+00:00 +C359,place order,2015-03-05 16:20:36+00:00,2015-03-05 16:12:19+00:00 +C332,send invoice,2015-03-05 16:18:16+00:00,2015-03-05 16:14:44+00:00 +C262,pay,2015-03-05 16:26:01+00:00,2015-03-05 16:22:22+00:00 +C294,pay,2015-03-05 16:29:06+00:00,2015-03-05 16:26:42+00:00 +C277,pay,2015-03-05 16:33:09+00:00,2015-03-05 16:29:28+00:00 +C212,prepare delivery,2015-03-05 16:51:29+00:00,2015-03-05 16:47:46+00:00 +C337,send invoice,2015-03-05 16:57:58+00:00,2015-03-05 16:54:29+00:00 +C220,make delivery,2015-03-05 17:23:52+00:00,2015-03-05 16:56:11+00:00 +C269,pay,2015-03-05 17:11:48+00:00,2015-03-05 17:03:01+00:00 +C275,make delivery,2015-03-05 17:58:02+00:00,2015-03-05 17:33:43+00:00 +C333,send invoice,2015-03-05 17:40:30+00:00,2015-03-05 17:38:28+00:00 +C360,place order,2015-03-05 17:53:03+00:00,2015-03-05 17:42:45+00:00 +C251,pay,2015-03-05 17:57:40+00:00,2015-03-05 17:50:56+00:00 +C274,prepare delivery,2015-03-05 19:03:03+00:00,2015-03-05 18:55:07+00:00 +C194,confirm payment,2015-03-05 19:14:44+00:00,2015-03-05 19:10:44+00:00 +C361,place order,2015-03-05 19:49:01+00:00,2015-03-05 19:44:30+00:00 +C275,confirm payment,2015-03-05 21:07:38+00:00,2015-03-05 21:01:05+00:00 +C254,pay,2015-03-05 21:15:15+00:00,2015-03-05 21:09:50+00:00 +C264,send reminder,2015-03-05 22:08:16+00:00,2015-03-05 21:59:15+00:00 +C362,place order,2015-03-05 23:11:05+00:00,2015-03-05 23:05:14+00:00 +C268,pay,2015-03-05 23:17:47+00:00,2015-03-05 23:15:19+00:00 +C363,place order,2015-03-06 09:07:03+00:00,2015-03-06 08:54:31+00:00 +C357,send invoice,2015-03-06 11:43:38+00:00,2015-03-06 09:14:14+00:00 +C243,pay,2015-03-06 09:46:51+00:00,2015-03-06 09:35:50+00:00 +C246,confirm payment,2015-03-06 09:45:16+00:00,2015-03-06 09:38:01+00:00 +C253,prepare delivery,2015-03-06 09:52:06+00:00,2015-03-06 09:44:37+00:00 +C249,pay,2015-03-06 09:56:02+00:00,2015-03-06 09:47:29+00:00 +C338,send invoice,2015-03-06 10:04:51+00:00,2015-03-06 09:57:51+00:00 +C284,prepare delivery,2015-03-06 10:28:48+00:00,2015-03-06 10:25:09+00:00 +C255,confirm payment,2015-03-06 10:39:42+00:00,2015-03-06 10:32:58+00:00 +C220,confirm payment,2015-03-06 10:44:53+00:00,2015-03-06 10:41:21+00:00 +C263,make delivery,2015-03-06 12:23:50+00:00,2015-03-06 10:46:53+00:00 +C293,pay,2015-03-06 10:57:05+00:00,2015-03-06 10:51:03+00:00 +C235,make delivery,2015-03-06 11:41:33+00:00,2015-03-06 11:03:28+00:00 +C364,place order,2015-03-06 14:12:29+00:00,2015-03-06 11:09:54+00:00 +C194,make delivery,2015-03-06 11:32:49+00:00,2015-03-06 11:23:35+00:00 +C356,send invoice,2015-03-06 12:12:19+00:00,2015-03-06 12:04:18+00:00 +C295,send reminder,2015-03-06 12:34:56+00:00,2015-03-06 12:11:45+00:00 +C264,cancel order,2015-03-06 12:38:07+00:00,2015-03-06 12:18:14+00:00 +C365,place order,2015-03-06 12:43:34+00:00,2015-03-06 12:37:55+00:00 +C272,prepare delivery,2015-03-06 13:52:34+00:00,2015-03-06 13:44:38+00:00 +C347,send invoice,2015-03-06 14:19:57+00:00,2015-03-06 14:13:11+00:00 +C366,place order,2015-03-06 14:46:28+00:00,2015-03-06 14:33:57+00:00 +C256,confirm payment,2015-03-06 14:47:28+00:00,2015-03-06 14:39:28+00:00 +C245,send reminder,2015-03-06 15:08:30+00:00,2015-03-06 14:58:38+00:00 +C257,prepare delivery,2015-03-06 15:06:14+00:00,2015-03-06 15:02:25+00:00 +C355,send invoice,2015-03-06 15:30:05+00:00,2015-03-06 15:13:25+00:00 +C334,send invoice,2015-03-06 15:30:35+00:00,2015-03-06 15:25:39+00:00 +C260,prepare delivery,2015-03-06 15:51:26+00:00,2015-03-06 15:26:23+00:00 +C291,pay,2015-03-06 16:03:33+00:00,2015-03-06 15:58:41+00:00 +C248,send reminder,2015-03-06 16:41:39+00:00,2015-03-06 16:19:41+00:00 +C316,send reminder,2015-03-06 16:31:25+00:00,2015-03-06 16:23:02+00:00 +C367,place order,2015-03-06 16:30:20+00:00,2015-03-06 16:26:02+00:00 +C285,prepare delivery,2015-03-06 17:38:31+00:00,2015-03-06 17:34:44+00:00 +C258,prepare delivery,2015-03-06 17:41:03+00:00,2015-03-06 17:38:14+00:00 +C323,send invoice,2015-03-06 18:11:43+00:00,2015-03-06 17:56:55+00:00 +C212,confirm payment,2015-03-06 18:15:32+00:00,2015-03-06 18:07:20+00:00 +C368,place order,2015-03-06 18:16:03+00:00,2015-03-06 18:10:11+00:00 +C342,send invoice,2015-03-06 18:47:55+00:00,2015-03-06 18:12:31+00:00 +C253,confirm payment,2015-03-06 18:21:07+00:00,2015-03-06 18:14:31+00:00 +C369,place order,2015-03-06 23:18:44+00:00,2015-03-06 20:06:47+00:00 +C212,make delivery,2015-03-06 21:28:22+00:00,2015-03-06 21:13:05+00:00 +C292,pay,2015-03-06 21:57:36+00:00,2015-03-06 21:50:15+00:00 +C299,pay,2015-03-06 22:16:16+00:00,2015-03-06 22:09:37+00:00 +C274,confirm payment,2015-03-06 22:29:55+00:00,2015-03-06 22:23:49+00:00 +C370,place order,2015-03-06 22:52:16+00:00,2015-03-06 22:49:49+00:00 +C371,place order,2015-03-07 22:49:51+00:00,2015-03-07 19:42:06+00:00 +C372,place order,2015-03-08 19:51:24+00:00,2015-03-08 19:40:21+00:00 +C271,pay,2015-03-09 08:50:50+00:00,2015-03-09 08:44:26+00:00 +C296,pay,2015-03-09 09:10:10+00:00,2015-03-09 09:01:37+00:00 +C344,send invoice,2015-03-09 09:32:50+00:00,2015-03-09 09:15:05+00:00 +C324,send reminder,2015-03-09 09:27:26+00:00,2015-03-09 09:19:00+00:00 +C373,place order,2015-03-09 13:50:42+00:00,2015-03-09 09:19:25+00:00 +C345,send invoice,2015-03-09 09:40:09+00:00,2015-03-09 09:35:10+00:00 +C235,confirm payment,2015-03-09 09:55:18+00:00,2015-03-09 09:49:06+00:00 +C247,prepare delivery,2015-03-09 10:15:57+00:00,2015-03-09 10:08:14+00:00 +C274,make delivery,2015-03-09 11:16:50+00:00,2015-03-09 10:19:44+00:00 +C284,make delivery,2015-03-09 10:57:35+00:00,2015-03-09 10:28:14+00:00 +C241,prepare delivery,2015-03-09 10:32:01+00:00,2015-03-09 10:28:28+00:00 +C374,place order,2015-03-09 11:00:16+00:00,2015-03-09 10:56:58+00:00 +C263,confirm payment,2015-03-09 11:21:51+00:00,2015-03-09 11:10:26+00:00 +C265,send reminder,2015-03-09 11:36:14+00:00,2015-03-09 11:23:47+00:00 +C242,pay,2015-03-09 11:28:38+00:00,2015-03-09 11:23:56+00:00 +C350,send invoice,2015-03-09 11:42:25+00:00,2015-03-09 11:39:24+00:00 +C261,send reminder,2015-03-09 12:22:03+00:00,2015-03-09 11:50:54+00:00 +C253,make delivery,2015-03-09 12:50:32+00:00,2015-03-09 11:57:28+00:00 +C300,pay,2015-03-09 12:18:21+00:00,2015-03-09 12:10:21+00:00 +C318,send reminder,2015-03-09 12:42:51+00:00,2015-03-09 12:19:09+00:00 +C335,send invoice,2015-03-09 12:26:19+00:00,2015-03-09 12:22:30+00:00 +C227,pay,2015-03-09 12:35:51+00:00,2015-03-09 12:27:56+00:00 +C314,send reminder,2015-03-09 13:22:53+00:00,2015-03-09 13:05:10+00:00 +C375,place order,2015-03-09 15:30:18+00:00,2015-03-09 13:12:03+00:00 +C272,confirm payment,2015-03-09 13:45:18+00:00,2015-03-09 13:38:31+00:00 +C224,prepare delivery,2015-03-09 14:01:37+00:00,2015-03-09 13:54:04+00:00 +C267,prepare delivery,2015-03-09 14:11:32+00:00,2015-03-09 14:08:00+00:00 +C260,confirm payment,2015-03-09 14:51:05+00:00,2015-03-09 14:41:53+00:00 +C376,place order,2015-03-09 14:53:12+00:00,2015-03-09 14:42:13+00:00 +C248,cancel order,2015-03-09 15:06:29+00:00,2015-03-09 14:54:55+00:00 +C298,pay,2015-03-09 15:43:14+00:00,2015-03-09 15:40:20+00:00 +C260,make delivery,2015-03-09 15:51:27+00:00,2015-03-09 15:42:00+00:00 +C273,pay,2015-03-09 15:57:34+00:00,2015-03-09 15:52:04+00:00 +C272,make delivery,2015-03-09 16:15:30+00:00,2015-03-09 15:58:28+00:00 +C222,prepare delivery,2015-03-09 16:11:23+00:00,2015-03-09 16:03:40+00:00 +C361,send invoice,2015-03-09 16:54:00+00:00,2015-03-09 16:24:10+00:00 +C257,make delivery,2015-03-09 17:30:48+00:00,2015-03-09 16:36:03+00:00 +C362,send invoice,2015-03-09 16:46:48+00:00,2015-03-09 16:41:03+00:00 +C377,place order,2015-03-09 17:04:28+00:00,2015-03-09 16:42:33+00:00 +C285,confirm payment,2015-03-09 16:55:51+00:00,2015-03-09 16:47:52+00:00 +C285,make delivery,2015-03-09 17:29:53+00:00,2015-03-09 17:13:13+00:00 +C360,send invoice,2015-03-09 17:36:43+00:00,2015-03-09 17:28:51+00:00 +C278,pay,2015-03-09 18:40:51+00:00,2015-03-09 18:35:01+00:00 +C378,place order,2015-03-09 18:48:40+00:00,2015-03-09 18:43:13+00:00 +C280,prepare delivery,2015-03-09 21:12:44+00:00,2015-03-09 18:46:16+00:00 +C284,confirm payment,2015-03-09 19:07:37+00:00,2015-03-09 19:01:46+00:00 +C346,send invoice,2015-03-09 20:35:10+00:00,2015-03-09 20:29:45+00:00 +C254,prepare delivery,2015-03-09 20:53:39+00:00,2015-03-09 20:46:05+00:00 +C379,place order,2015-03-10 02:37:19+00:00,2015-03-09 21:45:54+00:00 +C305,pay,2015-03-10 03:53:44+00:00,2015-03-10 03:50:41+00:00 +C303,pay,2015-03-10 05:26:39+00:00,2015-03-10 05:24:36+00:00 +C380,place order,2015-03-10 07:28:16+00:00,2015-03-10 06:36:36+00:00 +C281,send reminder,2015-03-10 09:21:58+00:00,2015-03-10 09:04:50+00:00 +C247,make delivery,2015-03-10 10:11:34+00:00,2015-03-10 09:24:18+00:00 +C311,send reminder,2015-03-10 10:12:00+00:00,2015-03-10 09:33:00+00:00 +C286,pay,2015-03-10 09:39:36+00:00,2015-03-10 09:34:05+00:00 +C258,make delivery,2015-03-10 10:03:55+00:00,2015-03-10 09:52:44+00:00 +C381,place order,2015-03-10 10:26:17+00:00,2015-03-10 10:16:23+00:00 +C292,prepare delivery,2015-03-10 10:35:31+00:00,2015-03-10 10:27:34+00:00 +C249,prepare delivery,2015-03-10 10:39:45+00:00,2015-03-10 10:32:54+00:00 +C257,confirm payment,2015-03-10 10:46:15+00:00,2015-03-10 10:40:43+00:00 +C339,send invoice,2015-03-10 10:53:13+00:00,2015-03-10 10:46:43+00:00 +C245,cancel order,2015-03-10 11:01:48+00:00,2015-03-10 10:48:16+00:00 +C351,send invoice,2015-03-10 10:59:59+00:00,2015-03-10 10:57:45+00:00 +C270,prepare delivery,2015-03-10 11:05:01+00:00,2015-03-10 11:02:01+00:00 +C241,make delivery,2015-03-10 11:36:40+00:00,2015-03-10 11:23:37+00:00 +C329,send reminder,2015-03-10 11:32:18+00:00,2015-03-10 11:25:45+00:00 +C215,prepare delivery,2015-03-10 11:56:46+00:00,2015-03-10 11:49:15+00:00 +C382,place order,2015-03-10 11:54:36+00:00,2015-03-10 11:50:53+00:00 +C297,send reminder,2015-03-10 12:09:59+00:00,2015-03-10 11:59:23+00:00 +C250,prepare delivery,2015-03-10 12:19:56+00:00,2015-03-10 12:12:20+00:00 +C224,make delivery,2015-03-10 13:56:24+00:00,2015-03-10 12:30:07+00:00 +C267,make delivery,2015-03-10 14:03:12+00:00,2015-03-10 13:53:14+00:00 +C222,make delivery,2015-03-10 14:06:42+00:00,2015-03-10 13:57:17+00:00 +C383,place order,2015-03-10 14:06:36+00:00,2015-03-10 13:59:53+00:00 +C295,pay,2015-03-10 15:02:16+00:00,2015-03-10 14:55:32+00:00 +C258,confirm payment,2015-03-10 15:11:41+00:00,2015-03-10 15:06:21+00:00 +C241,confirm payment,2015-03-10 15:20:39+00:00,2015-03-10 15:11:18+00:00 +C282,prepare delivery,2015-03-10 15:45:23+00:00,2015-03-10 15:37:47+00:00 +C269,prepare delivery,2015-03-10 16:03:23+00:00,2015-03-10 15:41:23+00:00 +C301,send reminder,2015-03-10 16:10:54+00:00,2015-03-10 16:00:44+00:00 +C267,confirm payment,2015-03-10 16:12:50+00:00,2015-03-10 16:03:50+00:00 +C254,make delivery,2015-03-10 16:19:40+00:00,2015-03-10 16:05:34+00:00 +C354,send invoice,2015-03-10 16:38:16+00:00,2015-03-10 16:11:09+00:00 +C384,place order,2015-03-10 16:27:06+00:00,2015-03-10 16:17:53+00:00 +C309,send reminder,2015-03-10 17:00:36+00:00,2015-03-10 16:20:36+00:00 +C279,send reminder,2015-03-10 17:07:23+00:00,2015-03-10 16:44:58+00:00 +C222,confirm payment,2015-03-10 16:52:32+00:00,2015-03-10 16:45:51+00:00 +C289,send reminder,2015-03-10 17:00:53+00:00,2015-03-10 16:51:37+00:00 +C305,prepare delivery,2015-03-10 17:12:28+00:00,2015-03-10 17:05:29+00:00 +C254,confirm payment,2015-03-10 17:15:21+00:00,2015-03-10 17:12:34+00:00 +C363,send invoice,2015-03-10 17:37:22+00:00,2015-03-10 17:32:19+00:00 +C385,place order,2015-03-10 18:06:12+00:00,2015-03-10 17:53:54+00:00 +C249,make delivery,2015-03-10 19:17:50+00:00,2015-03-10 19:02:40+00:00 +C247,confirm payment,2015-03-10 19:24:23+00:00,2015-03-10 19:17:55+00:00 +C266,send reminder,2015-03-10 19:49:58+00:00,2015-03-10 19:28:50+00:00 +C270,make delivery,2015-03-10 19:57:54+00:00,2015-03-10 19:45:57+00:00 +C386,place order,2015-03-10 20:23:48+00:00,2015-03-10 20:17:56+00:00 +C369,send invoice,2015-03-10 20:30:26+00:00,2015-03-10 20:27:19+00:00 +C288,pay,2015-03-10 20:58:31+00:00,2015-03-10 20:52:56+00:00 +C365,send invoice,2015-03-10 21:35:20+00:00,2015-03-10 21:27:17+00:00 +C328,pay,2015-03-10 23:17:19+00:00,2015-03-10 23:10:28+00:00 +C387,place order,2015-03-10 23:20:29+00:00,2015-03-10 23:12:07+00:00 +C300,prepare delivery,2015-03-11 09:06:01+00:00,2015-03-11 08:56:28+00:00 +C388,place order,2015-03-11 09:06:36+00:00,2015-03-11 09:02:46+00:00 +C376,send invoice,2015-03-11 09:24:27+00:00,2015-03-11 09:19:21+00:00 +C283,send reminder,2015-03-11 09:57:14+00:00,2015-03-11 09:36:40+00:00 +C280,make delivery,2015-03-11 10:03:35+00:00,2015-03-11 09:48:54+00:00 +C367,send invoice,2015-03-11 10:14:01+00:00,2015-03-11 10:08:42+00:00 +C343,send reminder,2015-03-11 10:52:24+00:00,2015-03-11 10:12:45+00:00 +C389,place order,2015-03-11 10:37:08+00:00,2015-03-11 10:23:40+00:00 +C291,prepare delivery,2015-03-11 10:48:21+00:00,2015-03-11 10:39:03+00:00 +C292,make delivery,2015-03-11 11:06:09+00:00,2015-03-11 10:57:05+00:00 +C215,make delivery,2015-03-11 11:30:58+00:00,2015-03-11 11:06:39+00:00 +C322,pay,2015-03-11 11:16:24+00:00,2015-03-11 11:09:28+00:00 +C262,prepare delivery,2015-03-11 11:14:48+00:00,2015-03-11 11:11:02+00:00 +C384,send invoice,2015-03-11 11:35:50+00:00,2015-03-11 11:31:15+00:00 +C302,pay,2015-03-11 11:40:54+00:00,2015-03-11 11:34:24+00:00 +C250,make delivery,2015-03-11 11:59:23+00:00,2015-03-11 11:49:57+00:00 +C317,pay,2015-03-11 11:58:35+00:00,2015-03-11 11:54:58+00:00 +C215,confirm payment,2015-03-11 12:05:56+00:00,2015-03-11 11:59:17+00:00 +C390,place order,2015-03-11 12:16:28+00:00,2015-03-11 12:05:27+00:00 +C249,confirm payment,2015-03-11 12:12:35+00:00,2015-03-11 12:08:01+00:00 +C277,prepare delivery,2015-03-11 12:31:21+00:00,2015-03-11 12:23:34+00:00 +C224,confirm payment,2015-03-11 13:15:50+00:00,2015-03-11 13:13:18+00:00 +C391,place order,2015-03-11 13:32:01+00:00,2015-03-11 13:29:01+00:00 +C265,pay,2015-03-11 13:54:09+00:00,2015-03-11 13:51:46+00:00 +C381,send invoice,2015-03-11 14:40:33+00:00,2015-03-11 14:35:29+00:00 +C379,send invoice,2015-03-11 15:03:19+00:00,2015-03-11 14:49:59+00:00 +C388,send invoice,2015-03-11 15:03:43+00:00,2015-03-11 14:55:00+00:00 +C325,send reminder,2015-03-11 15:24:06+00:00,2015-03-11 14:58:07+00:00 +C243,prepare delivery,2015-03-11 17:28:11+00:00,2015-03-11 14:59:19+00:00 +C282,make delivery,2015-03-11 15:22:30+00:00,2015-03-11 15:06:41+00:00 +C304,send reminder,2015-03-11 15:27:22+00:00,2015-03-11 15:13:27+00:00 +C374,send invoice,2015-03-11 15:20:32+00:00,2015-03-11 15:15:43+00:00 +C392,place order,2015-03-11 17:04:11+00:00,2015-03-11 15:16:09+00:00 +C293,prepare delivery,2015-03-11 18:03:08+00:00,2015-03-11 15:25:31+00:00 +C377,send invoice,2015-03-11 15:35:49+00:00,2015-03-11 15:29:34+00:00 +C281,pay,2015-03-11 15:49:11+00:00,2015-03-11 15:34:21+00:00 +C329,pay,2015-03-11 15:53:28+00:00,2015-03-11 15:47:18+00:00 +C299,prepare delivery,2015-03-11 18:30:22+00:00,2015-03-11 15:58:55+00:00 +C269,make delivery,2015-03-11 16:11:51+00:00,2015-03-11 16:00:39+00:00 +C280,confirm payment,2015-03-11 16:08:22+00:00,2015-03-11 16:03:33+00:00 +C385,send invoice,2015-03-11 16:41:22+00:00,2015-03-11 16:38:55+00:00 +C323,pay,2015-03-11 16:43:27+00:00,2015-03-11 16:38:55+00:00 +C393,place order,2015-03-11 16:59:44+00:00,2015-03-11 16:50:25+00:00 +C305,make delivery,2015-03-11 18:27:20+00:00,2015-03-11 16:58:42+00:00 +C261,pay,2015-03-11 17:05:29+00:00,2015-03-11 17:01:10+00:00 +C290,pay,2015-03-11 17:09:49+00:00,2015-03-11 17:04:00+00:00 +C292,confirm payment,2015-03-11 17:29:37+00:00,2015-03-11 17:23:18+00:00 +C358,send invoice,2015-03-11 17:33:49+00:00,2015-03-11 17:26:25+00:00 +C268,prepare delivery,2015-03-11 17:43:47+00:00,2015-03-11 17:39:53+00:00 +C307,pay,2015-03-11 21:29:27+00:00,2015-03-11 17:56:57+00:00 +C327,send reminder,2015-03-11 18:25:48+00:00,2015-03-11 18:14:00+00:00 +C270,confirm payment,2015-03-11 18:44:15+00:00,2015-03-11 18:25:57+00:00 +C300,make delivery,2015-03-11 18:48:27+00:00,2015-03-11 18:37:55+00:00 +C298,prepare delivery,2015-03-11 18:50:05+00:00,2015-03-11 18:46:32+00:00 +C251,prepare delivery,2015-03-11 19:13:36+00:00,2015-03-11 18:47:26+00:00 +C372,send invoice,2015-03-11 19:00:32+00:00,2015-03-11 18:53:52+00:00 +C394,place order,2015-03-11 21:55:20+00:00,2015-03-11 18:58:58+00:00 +C320,pay,2015-03-11 19:15:06+00:00,2015-03-11 19:09:24+00:00 +C371,send invoice,2015-03-11 20:39:27+00:00,2015-03-11 20:31:51+00:00 +C395,place order,2015-03-11 22:41:30+00:00,2015-03-11 22:33:08+00:00 +C364,send invoice,2015-03-12 08:54:05+00:00,2015-03-12 08:46:12+00:00 +C396,place order,2015-03-12 08:57:06+00:00,2015-03-12 08:54:30+00:00 +C294,prepare delivery,2015-03-12 09:26:54+00:00,2015-03-12 09:22:58+00:00 +C250,confirm payment,2015-03-12 09:37:22+00:00,2015-03-12 09:28:11+00:00 +C291,confirm payment,2015-03-12 09:42:16+00:00,2015-03-12 09:33:43+00:00 +C368,send invoice,2015-03-12 09:46:21+00:00,2015-03-12 09:36:31+00:00 +C382,send invoice,2015-03-12 09:46:57+00:00,2015-03-12 09:39:17+00:00 +C340,send reminder,2015-03-12 10:17:16+00:00,2015-03-12 09:47:03+00:00 +C262,make delivery,2015-03-12 10:13:29+00:00,2015-03-12 09:58:46+00:00 +C277,make delivery,2015-03-12 10:28:19+00:00,2015-03-12 10:16:16+00:00 +C352,send reminder,2015-03-12 10:45:08+00:00,2015-03-12 10:36:54+00:00 +C313,pay,2015-03-12 10:46:13+00:00,2015-03-12 10:41:36+00:00 +C269,confirm payment,2015-03-12 11:03:34+00:00,2015-03-12 10:55:19+00:00 +C397,place order,2015-03-12 11:17:44+00:00,2015-03-12 11:09:53+00:00 +C295,prepare delivery,2015-03-12 11:27:01+00:00,2015-03-12 11:19:31+00:00 +C330,send reminder,2015-03-12 11:55:28+00:00,2015-03-12 11:38:41+00:00 +C359,send invoice,2015-03-12 11:45:51+00:00,2015-03-12 11:40:55+00:00 +C291,make delivery,2015-03-12 13:32:45+00:00,2015-03-12 11:54:50+00:00 +C305,confirm payment,2015-03-12 12:23:19+00:00,2015-03-12 12:16:47+00:00 +C398,place order,2015-03-12 12:43:42+00:00,2015-03-12 12:37:53+00:00 +C390,send invoice,2015-03-12 13:03:46+00:00,2015-03-12 12:57:36+00:00 +C312,pay,2015-03-12 14:03:36+00:00,2015-03-12 13:59:58+00:00 +C262,confirm payment,2015-03-12 14:29:05+00:00,2015-03-12 14:21:25+00:00 +C282,confirm payment,2015-03-12 14:28:30+00:00,2015-03-12 14:22:48+00:00 +C399,place order,2015-03-12 17:38:38+00:00,2015-03-12 14:33:53+00:00 +C306,send reminder,2015-03-12 15:11:42+00:00,2015-03-12 14:51:47+00:00 +C287,send reminder,2015-03-12 15:41:29+00:00,2015-03-12 15:08:05+00:00 +C293,make delivery,2015-03-12 16:47:08+00:00,2015-03-12 15:20:38+00:00 +C277,confirm payment,2015-03-12 16:03:06+00:00,2015-03-12 15:34:30+00:00 +C279,pay,2015-03-12 15:41:26+00:00,2015-03-12 15:35:47+00:00 +C273,prepare delivery,2015-03-12 16:03:36+00:00,2015-03-12 15:38:53+00:00 +C268,make delivery,2015-03-12 15:53:47+00:00,2015-03-12 15:40:12+00:00 +C308,pay,2015-03-12 15:46:15+00:00,2015-03-12 15:40:28+00:00 +C348,send reminder,2015-03-12 16:00:04+00:00,2015-03-12 15:45:29+00:00 +C227,prepare delivery,2015-03-12 15:49:34+00:00,2015-03-12 15:46:45+00:00 +C251,confirm payment,2015-03-12 15:58:09+00:00,2015-03-12 15:48:00+00:00 +C328,prepare delivery,2015-03-12 15:51:16+00:00,2015-03-12 15:48:18+00:00 +C353,send reminder,2015-03-12 16:11:48+00:00,2015-03-12 15:48:28+00:00 +C310,pay,2015-03-12 15:58:02+00:00,2015-03-12 15:54:13+00:00 +C243,make delivery,2015-03-12 16:27:48+00:00,2015-03-12 16:01:58+00:00 +C378,send invoice,2015-03-12 20:32:01+00:00,2015-03-12 16:25:23+00:00 +C400,place order,2015-03-12 16:31:39+00:00,2015-03-12 16:25:53+00:00 +C300,confirm payment,2015-03-12 16:34:31+00:00,2015-03-12 16:26:06+00:00 +C289,pay,2015-03-12 17:05:44+00:00,2015-03-12 17:02:37+00:00 +C322,prepare delivery,2015-03-12 20:16:31+00:00,2015-03-12 17:41:39+00:00 +C268,confirm payment,2015-03-12 18:15:40+00:00,2015-03-12 18:05:03+00:00 +C401,place order,2015-03-12 18:16:08+00:00,2015-03-12 18:09:54+00:00 +C349,send reminder,2015-03-12 19:13:33+00:00,2015-03-12 18:34:57+00:00 +C266,cancel order,2015-03-12 19:11:59+00:00,2015-03-12 18:55:53+00:00 +C380,send invoice,2015-03-12 19:15:50+00:00,2015-03-12 19:08:04+00:00 +C299,make delivery,2015-03-12 19:49:11+00:00,2015-03-12 19:31:32+00:00 +C402,place order,2015-03-12 20:13:49+00:00,2015-03-12 20:05:56+00:00 +C288,prepare delivery,2015-03-12 21:14:51+00:00,2015-03-12 21:10:56+00:00 +C333,send reminder,2015-03-12 21:28:01+00:00,2015-03-12 21:18:27+00:00 +C338,send reminder,2015-03-12 22:57:50+00:00,2015-03-12 22:47:54+00:00 +C403,place order,2015-03-13 01:18:30+00:00,2015-03-12 22:48:06+00:00 +C293,confirm payment,2015-03-13 08:42:35+00:00,2015-03-13 08:35:14+00:00 +C294,make delivery,2015-03-13 09:08:35+00:00,2015-03-13 08:52:20+00:00 +C251,make delivery,2015-03-13 09:24:28+00:00,2015-03-13 08:57:46+00:00 +C386,send invoice,2015-03-13 09:12:39+00:00,2015-03-13 09:02:15+00:00 +C298,make delivery,2015-03-13 09:28:59+00:00,2015-03-13 09:19:10+00:00 +C404,place order,2015-03-13 11:24:28+00:00,2015-03-13 09:24:27+00:00 +C295,make delivery,2015-03-13 10:16:51+00:00,2015-03-13 10:05:07+00:00 +C375,send invoice,2015-03-13 10:24:35+00:00,2015-03-13 10:16:39+00:00 +C271,prepare delivery,2015-03-13 10:35:22+00:00,2015-03-13 10:31:25+00:00 +C405,place order,2015-03-13 11:49:01+00:00,2015-03-13 11:07:01+00:00 +C391,send invoice,2015-03-13 11:21:12+00:00,2015-03-13 11:15:34+00:00 +C299,confirm payment,2015-03-13 11:53:33+00:00,2015-03-13 11:46:38+00:00 +C286,prepare delivery,2015-03-13 12:35:22+00:00,2015-03-13 12:31:31+00:00 +C406,place order,2015-03-13 12:44:47+00:00,2015-03-13 12:32:09+00:00 +C295,confirm payment,2015-03-13 12:56:21+00:00,2015-03-13 12:36:22+00:00 +C356,send reminder,2015-03-13 12:55:53+00:00,2015-03-13 12:37:19+00:00 +C357,send reminder,2015-03-13 12:56:00+00:00,2015-03-13 12:38:04+00:00 +C343,pay,2015-03-13 13:01:12+00:00,2015-03-13 12:51:34+00:00 +C373,send invoice,2015-03-13 13:00:20+00:00,2015-03-13 12:55:30+00:00 +C311,pay,2015-03-13 14:14:51+00:00,2015-03-13 14:10:26+00:00 +C407,place order,2015-03-13 14:32:47+00:00,2015-03-13 14:22:25+00:00 +C366,send invoice,2015-03-13 14:32:47+00:00,2015-03-13 14:23:01+00:00 +C294,confirm payment,2015-03-13 14:36:19+00:00,2015-03-13 14:27:49+00:00 +C303,prepare delivery,2015-03-13 14:37:41+00:00,2015-03-13 14:29:42+00:00 +C287,pay,2015-03-13 14:40:34+00:00,2015-03-13 14:36:52+00:00 +C355,send reminder,2015-03-13 15:13:14+00:00,2015-03-13 14:50:00+00:00 +C296,prepare delivery,2015-03-13 15:01:44+00:00,2015-03-13 14:54:25+00:00 +C347,send reminder,2015-03-13 15:38:38+00:00,2015-03-13 15:02:02+00:00 +C283,pay,2015-03-13 15:22:09+00:00,2015-03-13 15:13:53+00:00 +C316,send reminder,2015-03-13 15:33:30+00:00,2015-03-13 15:16:32+00:00 +C276,prepare delivery,2015-03-13 18:01:35+00:00,2015-03-13 15:29:44+00:00 +C243,confirm payment,2015-03-13 15:38:00+00:00,2015-03-13 15:33:20+00:00 +C309,pay,2015-03-13 16:07:12+00:00,2015-03-13 16:01:02+00:00 +C408,place order,2015-03-13 16:05:42+00:00,2015-03-13 16:02:58+00:00 +C307,prepare delivery,2015-03-13 16:12:47+00:00,2015-03-13 16:08:59+00:00 +C273,make delivery,2015-03-13 17:31:48+00:00,2015-03-13 16:35:08+00:00 +C227,make delivery,2015-03-13 17:56:22+00:00,2015-03-13 16:36:49+00:00 +C331,pay,2015-03-13 17:07:29+00:00,2015-03-13 16:56:21+00:00 +C288,make delivery,2015-03-13 17:35:11+00:00,2015-03-13 17:08:31+00:00 +C387,send invoice,2015-03-13 17:24:24+00:00,2015-03-13 17:20:30+00:00 +C409,place order,2015-03-13 17:35:19+00:00,2015-03-13 17:24:03+00:00 +C298,confirm payment,2015-03-13 17:31:33+00:00,2015-03-13 17:24:37+00:00 +C315,pay,2015-03-13 17:51:48+00:00,2015-03-13 17:36:20+00:00 +C328,make delivery,2015-03-13 18:45:42+00:00,2015-03-13 18:36:16+00:00 +C410,place order,2015-03-13 19:11:21+00:00,2015-03-13 19:06:13+00:00 +C321,pay,2015-03-13 19:29:15+00:00,2015-03-13 19:22:50+00:00 +C411,place order,2015-03-13 21:56:02+00:00,2015-03-13 21:48:41+00:00 +C322,make delivery,2015-03-13 22:42:02+00:00,2015-03-13 22:30:46+00:00 +C412,place order,2015-03-14 14:45:18+00:00,2015-03-14 14:35:18+00:00 +C337,pay,2015-03-14 16:29:51+00:00,2015-03-14 16:15:57+00:00 +C413,place order,2015-03-15 14:54:19+00:00,2015-03-15 14:47:48+00:00 +C414,place order,2015-03-16 07:36:17+00:00,2015-03-16 07:30:48+00:00 +C242,prepare delivery,2015-03-16 08:33:00+00:00,2015-03-16 08:29:20+00:00 +C301,pay,2015-03-16 08:47:05+00:00,2015-03-16 08:39:31+00:00 +C304,pay,2015-03-16 09:24:34+00:00,2015-03-16 09:17:41+00:00 +C227,confirm payment,2015-03-16 09:27:25+00:00,2015-03-16 09:20:58+00:00 +C314,send reminder,2015-03-16 10:01:42+00:00,2015-03-16 09:54:12+00:00 +C370,send invoice,2015-03-16 10:12:35+00:00,2015-03-16 10:04:29+00:00 +C325,pay,2015-03-16 10:13:15+00:00,2015-03-16 10:05:51+00:00 +C333,pay,2015-03-16 10:12:42+00:00,2015-03-16 10:07:46+00:00 +C415,place order,2015-03-16 10:24:48+00:00,2015-03-16 10:16:00+00:00 +C342,send reminder,2015-03-16 10:56:21+00:00,2015-03-16 10:24:12+00:00 +C271,confirm payment,2015-03-16 10:48:45+00:00,2015-03-16 10:40:38+00:00 +C328,confirm payment,2015-03-16 10:57:56+00:00,2015-03-16 10:52:39+00:00 +C286,make delivery,2015-03-16 12:27:07+00:00,2015-03-16 10:56:41+00:00 +C344,send reminder,2015-03-16 11:26:45+00:00,2015-03-16 11:12:45+00:00 +C324,send reminder,2015-03-16 11:58:18+00:00,2015-03-16 11:20:51+00:00 +C350,send reminder,2015-03-16 11:56:02+00:00,2015-03-16 11:20:53+00:00 +C392,send invoice,2015-03-16 15:04:21+00:00,2015-03-16 11:35:36+00:00 +C416,place order,2015-03-16 12:00:10+00:00,2015-03-16 11:50:07+00:00 +C318,send reminder,2015-03-16 12:18:38+00:00,2015-03-16 12:10:37+00:00 +C303,confirm payment,2015-03-16 12:48:53+00:00,2015-03-16 12:16:12+00:00 +C303,make delivery,2015-03-16 13:50:30+00:00,2015-03-16 12:27:24+00:00 +C345,send reminder,2015-03-16 12:57:56+00:00,2015-03-16 12:32:04+00:00 +C323,prepare delivery,2015-03-16 13:25:28+00:00,2015-03-16 13:18:15+00:00 +C271,make delivery,2015-03-16 14:06:22+00:00,2015-03-16 13:38:18+00:00 +C400,send invoice,2015-03-16 13:44:16+00:00,2015-03-16 13:39:11+00:00 +C319,pay,2015-03-16 13:44:45+00:00,2015-03-16 13:40:54+00:00 +C417,place order,2015-03-16 14:05:10+00:00,2015-03-16 13:58:21+00:00 +C288,confirm payment,2015-03-16 14:57:16+00:00,2015-03-16 14:52:12+00:00 +C383,send invoice,2015-03-16 15:02:43+00:00,2015-03-16 14:53:09+00:00 +C296,confirm payment,2015-03-16 16:13:38+00:00,2015-03-16 16:05:24+00:00 +C418,place order,2015-03-16 16:26:57+00:00,2015-03-16 16:14:50+00:00 +C276,make delivery,2015-03-16 17:37:11+00:00,2015-03-16 16:15:32+00:00 +C302,prepare delivery,2015-03-16 16:27:17+00:00,2015-03-16 16:20:11+00:00 +C307,make delivery,2015-03-16 16:46:32+00:00,2015-03-16 16:33:40+00:00 +C324,cancel order,2015-03-16 16:49:41+00:00,2015-03-16 16:34:08+00:00 +C413,send invoice,2015-03-16 16:45:42+00:00,2015-03-16 16:39:25+00:00 +C278,prepare delivery,2015-03-16 17:00:28+00:00,2015-03-16 16:56:57+00:00 +C403,send invoice,2015-03-16 17:12:01+00:00,2015-03-16 17:02:50+00:00 +C273,confirm payment,2015-03-16 17:08:36+00:00,2015-03-16 17:04:50+00:00 +C296,make delivery,2015-03-16 17:52:11+00:00,2015-03-16 17:39:44+00:00 +C419,place order,2015-03-16 18:13:23+00:00,2015-03-16 17:47:47+00:00 +C281,prepare delivery,2015-03-16 18:12:03+00:00,2015-03-16 18:04:34+00:00 +C326,pay,2015-03-16 18:37:35+00:00,2015-03-16 18:30:52+00:00 +C361,send reminder,2015-03-16 19:12:52+00:00,2015-03-16 18:44:59+00:00 +C411,send invoice,2015-03-16 19:14:10+00:00,2015-03-16 18:55:52+00:00 +C394,send invoice,2015-03-16 19:19:18+00:00,2015-03-16 19:10:06+00:00 +C308,prepare delivery,2015-03-16 19:30:08+00:00,2015-03-16 19:27:15+00:00 +C322,confirm payment,2015-03-16 19:52:39+00:00,2015-03-16 19:46:21+00:00 +C420,place order,2015-03-16 20:11:28+00:00,2015-03-16 19:59:35+00:00 +C335,pay,2015-03-16 23:12:31+00:00,2015-03-16 23:06:03+00:00 +C421,place order,2015-03-16 23:40:57+00:00,2015-03-16 23:35:25+00:00 +C289,prepare delivery,2015-03-17 08:13:57+00:00,2015-03-17 08:06:39+00:00 +C360,send reminder,2015-03-17 09:41:39+00:00,2015-03-17 09:04:32+00:00 +C320,prepare delivery,2015-03-17 11:48:52+00:00,2015-03-17 09:26:34+00:00 +C422,place order,2015-03-17 09:47:22+00:00,2015-03-17 09:30:44+00:00 +C279,prepare delivery,2015-03-17 09:41:16+00:00,2015-03-17 09:33:57+00:00 +C307,confirm payment,2015-03-17 10:18:46+00:00,2015-03-17 10:05:49+00:00 +C417,send invoice,2015-03-17 10:18:12+00:00,2015-03-17 10:10:44+00:00 +C407,send invoice,2015-03-17 10:28:39+00:00,2015-03-17 10:21:32+00:00 +C310,prepare delivery,2015-03-17 10:37:33+00:00,2015-03-17 10:23:08+00:00 +C395,send invoice,2015-03-17 10:50:33+00:00,2015-03-17 10:44:46+00:00 +C276,confirm payment,2015-03-17 11:32:10+00:00,2015-03-17 11:16:59+00:00 +C261,prepare delivery,2015-03-17 11:20:22+00:00,2015-03-17 11:17:11+00:00 +C423,place order,2015-03-17 14:45:26+00:00,2015-03-17 11:19:35+00:00 +C318,cancel order,2015-03-17 11:35:53+00:00,2015-03-17 11:25:19+00:00 +C323,make delivery,2015-03-17 12:07:58+00:00,2015-03-17 11:39:16+00:00 +C419,send invoice,2015-03-17 11:46:50+00:00,2015-03-17 11:43:12+00:00 +C346,send reminder,2015-03-17 12:02:22+00:00,2015-03-17 11:47:40+00:00 +C242,make delivery,2015-03-17 13:26:46+00:00,2015-03-17 11:51:28+00:00 +C286,confirm payment,2015-03-17 12:19:33+00:00,2015-03-17 12:13:53+00:00 +C424,place order,2015-03-17 13:09:40+00:00,2015-03-17 12:57:17+00:00 +C339,send reminder,2015-03-17 13:35:27+00:00,2015-03-17 13:14:32+00:00 +C410,send invoice,2015-03-17 13:49:47+00:00,2015-03-17 13:45:35+00:00 +C306,pay,2015-03-17 14:15:46+00:00,2015-03-17 14:12:52+00:00 +C405,send invoice,2015-03-17 14:27:27+00:00,2015-03-17 14:22:29+00:00 +C396,send invoice,2015-03-17 14:34:15+00:00,2015-03-17 14:26:25+00:00 +C309,prepare delivery,2015-03-17 14:34:12+00:00,2015-03-17 14:26:41+00:00 +C281,make delivery,2015-03-17 15:11:51+00:00,2015-03-17 15:01:13+00:00 +C409,send invoice,2015-03-17 15:17:18+00:00,2015-03-17 15:11:40+00:00 +C425,place order,2015-03-17 17:34:29+00:00,2015-03-17 15:12:42+00:00 +C302,confirm payment,2015-03-17 15:25:47+00:00,2015-03-17 15:14:50+00:00 +C297,send reminder,2015-03-17 15:26:53+00:00,2015-03-17 15:17:51+00:00 +C404,send invoice,2015-03-17 15:28:44+00:00,2015-03-17 15:23:23+00:00 +C414,send invoice,2015-03-17 15:30:32+00:00,2015-03-17 15:26:23+00:00 +C402,send invoice,2015-03-17 15:42:35+00:00,2015-03-17 15:39:41+00:00 +C289,make delivery,2015-03-17 16:10:39+00:00,2015-03-17 15:41:22+00:00 +C363,send reminder,2015-03-17 15:57:23+00:00,2015-03-17 15:47:38+00:00 +C399,send invoice,2015-03-17 15:58:21+00:00,2015-03-17 15:52:03+00:00 +C302,make delivery,2015-03-17 16:05:14+00:00,2015-03-17 15:53:37+00:00 +C308,confirm payment,2015-03-17 16:27:10+00:00,2015-03-17 16:17:01+00:00 +C242,confirm payment,2015-03-17 16:58:31+00:00,2015-03-17 16:26:11+00:00 +C426,place order,2015-03-17 16:47:51+00:00,2015-03-17 16:43:31+00:00 +C369,send reminder,2015-03-17 17:01:32+00:00,2015-03-17 16:49:58+00:00 +C265,prepare delivery,2015-03-17 16:56:46+00:00,2015-03-17 16:52:57+00:00 +C308,make delivery,2015-03-17 17:15:15+00:00,2015-03-17 16:57:33+00:00 +C427,place order,2015-03-17 19:04:54+00:00,2015-03-17 18:45:09+00:00 +C365,send reminder,2015-03-17 21:56:36+00:00,2015-03-17 21:24:45+00:00 +C428,place order,2015-03-17 21:56:12+00:00,2015-03-17 21:51:42+00:00 +C334,pay,2015-03-17 22:31:49+00:00,2015-03-17 22:25:29+00:00 +C351,pay,2015-03-17 23:15:54+00:00,2015-03-17 23:09:54+00:00 +C429,place order,2015-03-18 07:15:25+00:00,2015-03-18 07:11:24+00:00 +C397,send invoice,2015-03-18 08:55:48+00:00,2015-03-18 08:47:08+00:00 +C278,make delivery,2015-03-18 09:37:19+00:00,2015-03-18 09:00:17+00:00 +C261,make delivery,2015-03-18 09:31:37+00:00,2015-03-18 09:02:34+00:00 +C310,make delivery,2015-03-18 09:32:38+00:00,2015-03-18 09:23:13+00:00 +C323,confirm payment,2015-03-18 09:30:47+00:00,2015-03-18 09:25:55+00:00 +C312,prepare delivery,2015-03-18 09:40:33+00:00,2015-03-18 09:32:56+00:00 +C287,prepare delivery,2015-03-18 09:40:24+00:00,2015-03-18 09:37:20+00:00 +C279,make delivery,2015-03-18 10:14:00+00:00,2015-03-18 09:40:55+00:00 +C430,place order,2015-03-18 09:59:50+00:00,2015-03-18 09:54:39+00:00 +C320,make delivery,2015-03-18 12:11:35+00:00,2015-03-18 10:51:17+00:00 +C290,prepare delivery,2015-03-18 11:18:44+00:00,2015-03-18 10:51:44+00:00 +C343,prepare delivery,2015-03-18 11:14:48+00:00,2015-03-18 11:05:15+00:00 +C289,confirm payment,2015-03-18 11:39:32+00:00,2015-03-18 11:31:56+00:00 +C313,prepare delivery,2015-03-18 12:32:20+00:00,2015-03-18 12:05:36+00:00 +C431,place order,2015-03-18 12:14:31+00:00,2015-03-18 12:07:25+00:00 +C320,confirm payment,2015-03-18 12:25:52+00:00,2015-03-18 12:20:07+00:00 +C309,make delivery,2015-03-18 13:42:29+00:00,2015-03-18 12:21:10+00:00 +C398,send invoice,2015-03-18 12:28:02+00:00,2015-03-18 12:24:58+00:00 +C317,prepare delivery,2015-03-18 12:32:47+00:00,2015-03-18 12:29:56+00:00 +C338,pay,2015-03-18 14:51:29+00:00,2015-03-18 12:37:08+00:00 +C376,send reminder,2015-03-18 12:59:24+00:00,2015-03-18 12:38:56+00:00 +C355,pay,2015-03-18 12:56:08+00:00,2015-03-18 12:48:47+00:00 +C406,send invoice,2015-03-18 13:06:43+00:00,2015-03-18 12:48:48+00:00 +C329,prepare delivery,2015-03-18 13:04:49+00:00,2015-03-18 13:01:08+00:00 +C281,confirm payment,2015-03-18 13:24:52+00:00,2015-03-18 13:17:53+00:00 +C432,place order,2015-03-18 17:54:17+00:00,2015-03-18 13:32:58+00:00 +C283,prepare delivery,2015-03-18 16:32:38+00:00,2015-03-18 14:12:28+00:00 +C385,send reminder,2015-03-18 15:50:19+00:00,2015-03-18 15:20:53+00:00 +C370,pay,2015-03-18 15:46:24+00:00,2015-03-18 15:21:04+00:00 +C433,place order,2015-03-18 15:33:07+00:00,2015-03-18 15:24:03+00:00 +C310,confirm payment,2015-03-18 15:31:05+00:00,2015-03-18 15:26:00+00:00 +C265,make delivery,2015-03-18 16:20:41+00:00,2015-03-18 16:08:50+00:00 +C279,confirm payment,2015-03-18 16:20:49+00:00,2015-03-18 16:15:53+00:00 +C336,pay,2015-03-18 16:23:05+00:00,2015-03-18 16:18:04+00:00 +C261,confirm payment,2015-03-18 16:28:21+00:00,2015-03-18 16:23:25+00:00 +C278,confirm payment,2015-03-18 16:56:49+00:00,2015-03-18 16:46:24+00:00 +C304,prepare delivery,2015-03-18 16:56:48+00:00,2015-03-18 16:49:16+00:00 +C434,place order,2015-03-18 17:22:49+00:00,2015-03-18 17:06:13+00:00 +C314,cancel order,2015-03-18 17:24:16+00:00,2015-03-18 17:13:58+00:00 +C360,pay,2015-03-18 17:22:21+00:00,2015-03-18 17:15:51+00:00 +C344,pay,2015-03-18 17:55:10+00:00,2015-03-18 17:28:29+00:00 +C315,prepare delivery,2015-03-18 17:44:29+00:00,2015-03-18 17:36:55+00:00 +C327,send reminder,2015-03-18 18:28:23+00:00,2015-03-18 18:10:18+00:00 +C435,place order,2015-03-18 18:43:01+00:00,2015-03-18 18:30:33+00:00 +C379,send reminder,2015-03-18 18:52:01+00:00,2015-03-18 18:41:06+00:00 +C312,confirm payment,2015-03-18 19:39:25+00:00,2015-03-18 19:28:36+00:00 +C401,send invoice,2015-03-18 20:22:56+00:00,2015-03-18 20:17:54+00:00 +C382,send reminder,2015-03-18 21:03:03+00:00,2015-03-18 20:47:51+00:00 +C436,place order,2015-03-19 01:01:40+00:00,2015-03-18 21:07:54+00:00 +C359,pay,2015-03-18 21:55:57+00:00,2015-03-18 21:49:30+00:00 +C389,send invoice,2015-03-18 21:58:01+00:00,2015-03-18 21:51:05+00:00 +C362,pay,2015-03-19 00:32:20+00:00,2015-03-19 00:26:42+00:00 +C437,place order,2015-03-19 05:35:39+00:00,2015-03-19 02:48:36+00:00 +C343,make delivery,2015-03-19 09:30:50+00:00,2015-03-19 09:05:29+00:00 +C412,send invoice,2015-03-19 09:21:59+00:00,2015-03-19 09:16:27+00:00 +C393,send invoice,2015-03-19 09:37:00+00:00,2015-03-19 09:33:28+00:00 +C431,send invoice,2015-03-19 09:43:37+00:00,2015-03-19 09:40:56+00:00 +C423,send invoice,2015-03-19 09:54:30+00:00,2015-03-19 09:48:49+00:00 +C340,send reminder,2015-03-19 10:18:52+00:00,2015-03-19 09:58:14+00:00 +C313,confirm payment,2015-03-19 10:13:27+00:00,2015-03-19 10:04:13+00:00 +C438,place order,2015-03-19 10:10:41+00:00,2015-03-19 10:05:35+00:00 +C265,confirm payment,2015-03-19 10:16:14+00:00,2015-03-19 10:06:09+00:00 +C329,make delivery,2015-03-19 10:18:19+00:00,2015-03-19 10:06:16+00:00 +C312,make delivery,2015-03-19 10:25:02+00:00,2015-03-19 10:11:22+00:00 +C325,prepare delivery,2015-03-19 10:21:20+00:00,2015-03-19 10:14:22+00:00 +C309,confirm payment,2015-03-19 10:50:27+00:00,2015-03-19 10:19:28+00:00 +C368,pay,2015-03-19 10:36:41+00:00,2015-03-19 10:31:21+00:00 +C352,send reminder,2015-03-19 11:04:32+00:00,2015-03-19 10:40:29+00:00 +C335,prepare delivery,2015-03-19 10:53:29+00:00,2015-03-19 10:46:25+00:00 +C313,make delivery,2015-03-19 11:05:52+00:00,2015-03-19 10:50:34+00:00 +C364,send reminder,2015-03-19 11:53:14+00:00,2015-03-19 11:09:56+00:00 +C287,make delivery,2015-03-19 11:35:07+00:00,2015-03-19 11:21:30+00:00 +C290,make delivery,2015-03-19 11:45:59+00:00,2015-03-19 11:28:48+00:00 +C439,place order,2015-03-19 11:38:20+00:00,2015-03-19 11:29:17+00:00 +C332,pay,2015-03-19 11:38:16+00:00,2015-03-19 11:30:05+00:00 +C377,pay,2015-03-19 11:47:54+00:00,2015-03-19 11:38:51+00:00 +C317,make delivery,2015-03-19 11:54:27+00:00,2015-03-19 11:41:02+00:00 +C346,pay,2015-03-19 11:52:21+00:00,2015-03-19 11:48:41+00:00 +C356,pay,2015-03-19 11:58:09+00:00,2015-03-19 11:51:27+00:00 +C424,send invoice,2015-03-19 12:08:58+00:00,2015-03-19 12:04:17+00:00 +C316,pay,2015-03-19 12:13:38+00:00,2015-03-19 12:10:51+00:00 +C283,make delivery,2015-03-19 12:28:22+00:00,2015-03-19 12:11:27+00:00 +C283,confirm payment,2015-03-19 12:59:19+00:00,2015-03-19 12:25:13+00:00 +C306,prepare delivery,2015-03-19 14:55:07+00:00,2015-03-19 12:33:03+00:00 +C440,place order,2015-03-19 13:20:48+00:00,2015-03-19 13:16:41+00:00 +C353,send reminder,2015-03-19 13:55:36+00:00,2015-03-19 13:33:18+00:00 +C390,send reminder,2015-03-19 13:53:38+00:00,2015-03-19 13:33:28+00:00 +C418,send invoice,2015-03-19 14:42:58+00:00,2015-03-19 14:35:37+00:00 +C337,prepare delivery,2015-03-19 17:18:18+00:00,2015-03-19 14:44:52+00:00 +C378,send reminder,2015-03-19 15:08:18+00:00,2015-03-19 14:49:20+00:00 +C441,place order,2015-03-19 14:56:34+00:00,2015-03-19 14:51:29+00:00 +C287,confirm payment,2015-03-19 15:06:18+00:00,2015-03-19 14:57:17+00:00 +C330,send reminder,2015-03-19 15:34:20+00:00,2015-03-19 15:22:50+00:00 +C430,send invoice,2015-03-19 15:41:46+00:00,2015-03-19 15:35:50+00:00 +C315,make delivery,2015-03-19 16:59:13+00:00,2015-03-19 15:43:18+00:00 +C343,confirm payment,2015-03-19 16:36:09+00:00,2015-03-19 16:31:41+00:00 +C349,send reminder,2015-03-19 17:00:54+00:00,2015-03-19 16:36:55+00:00 +C442,place order,2015-03-19 17:46:42+00:00,2015-03-19 17:01:06+00:00 +C329,confirm payment,2015-03-19 17:19:30+00:00,2015-03-19 17:16:21+00:00 +C304,make delivery,2015-03-19 18:03:55+00:00,2015-03-19 17:34:02+00:00 +C348,send reminder,2015-03-19 18:29:51+00:00,2015-03-19 17:51:32+00:00 +C443,place order,2015-03-19 18:27:27+00:00,2015-03-19 18:20:19+00:00 +C290,confirm payment,2015-03-19 20:03:49+00:00,2015-03-19 19:58:54+00:00 +C444,place order,2015-03-19 23:09:18+00:00,2015-03-19 20:37:11+00:00 +C422,send invoice,2015-03-19 20:47:45+00:00,2015-03-19 20:44:45+00:00 +C427,send invoice,2015-03-19 21:09:08+00:00,2015-03-19 20:59:20+00:00 +C371,pay,2015-03-19 21:16:23+00:00,2015-03-19 21:12:13+00:00 +C386,pay,2015-03-19 22:52:08+00:00,2015-03-19 22:48:08+00:00 +C445,place order,2015-03-20 00:50:11+00:00,2015-03-20 00:44:18+00:00 +C380,send reminder,2015-03-20 10:03:21+00:00,2015-03-20 09:47:26+00:00 +C446,place order,2015-03-20 09:56:13+00:00,2015-03-20 09:48:51+00:00 +C335,make delivery,2015-03-20 10:20:41+00:00,2015-03-20 10:07:00+00:00 +C321,prepare delivery,2015-03-20 10:42:18+00:00,2015-03-20 10:34:46+00:00 +C428,send invoice,2015-03-20 10:54:49+00:00,2015-03-20 10:47:37+00:00 +C325,make delivery,2015-03-20 11:07:58+00:00,2015-03-20 10:55:08+00:00 +C317,confirm payment,2015-03-20 11:18:07+00:00,2015-03-20 11:11:28+00:00 +C306,make delivery,2015-03-20 11:48:01+00:00,2015-03-20 11:32:50+00:00 +C297,pay,2015-03-20 12:00:14+00:00,2015-03-20 11:53:42+00:00 +C447,place order,2015-03-20 12:01:51+00:00,2015-03-20 11:55:50+00:00 +C337,make delivery,2015-03-20 13:24:06+00:00,2015-03-20 11:57:26+00:00 +C304,confirm payment,2015-03-20 16:31:29+00:00,2015-03-20 12:01:19+00:00 +C408,send invoice,2015-03-20 13:17:14+00:00,2015-03-20 13:10:12+00:00 +C426,send invoice,2015-03-20 13:37:33+00:00,2015-03-20 13:32:59+00:00 +C420,send invoice,2015-03-20 13:44:08+00:00,2015-03-20 13:40:05+00:00 +C330,cancel order,2015-03-20 13:48:26+00:00,2015-03-20 13:43:13+00:00 +C381,pay,2015-03-20 13:57:44+00:00,2015-03-20 13:49:17+00:00 +C340,pay,2015-03-20 13:55:49+00:00,2015-03-20 13:51:18+00:00 +C448,place order,2015-03-20 14:40:03+00:00,2015-03-20 14:09:47+00:00 +C415,send invoice,2015-03-20 14:51:40+00:00,2015-03-20 14:43:00+00:00 +C347,send reminder,2015-03-20 15:04:49+00:00,2015-03-20 14:43:49+00:00 +C369,pay,2015-03-20 15:05:08+00:00,2015-03-20 14:58:56+00:00 +C434,send invoice,2015-03-20 18:58:22+00:00,2015-03-20 15:06:16+00:00 +C327,cancel order,2015-03-20 15:29:11+00:00,2015-03-20 15:10:06+00:00 +C425,send invoice,2015-03-20 15:27:41+00:00,2015-03-20 15:22:30+00:00 +C349,cancel order,2015-03-20 15:40:12+00:00,2015-03-20 15:26:50+00:00 +C449,place order,2015-03-20 15:51:47+00:00,2015-03-20 15:37:41+00:00 +C306,confirm payment,2015-03-20 15:46:59+00:00,2015-03-20 15:43:55+00:00 +C437,send invoice,2015-03-20 15:55:42+00:00,2015-03-20 15:50:11+00:00 +C416,send invoice,2015-03-20 16:11:32+00:00,2015-03-20 16:03:54+00:00 +C357,send reminder,2015-03-20 16:56:19+00:00,2015-03-20 16:39:30+00:00 +C315,confirm payment,2015-03-20 17:27:48+00:00,2015-03-20 16:57:57+00:00 +C353,pay,2015-03-20 17:07:16+00:00,2015-03-20 17:00:43+00:00 +C373,send reminder,2015-03-20 17:14:49+00:00,2015-03-20 17:02:02+00:00 +C376,pay,2015-03-20 17:22:56+00:00,2015-03-20 17:20:37+00:00 +C344,prepare delivery,2015-03-20 17:28:26+00:00,2015-03-20 17:24:43+00:00 +C450,place order,2015-03-20 19:35:51+00:00,2015-03-20 17:33:29+00:00 +C354,pay,2015-03-20 18:59:02+00:00,2015-03-20 18:51:30+00:00 +C451,place order,2015-03-20 22:53:43+00:00,2015-03-20 19:25:05+00:00 +C301,prepare delivery,2015-03-20 20:49:05+00:00,2015-03-20 20:21:28+00:00 +C341,pay,2015-03-20 21:44:32+00:00,2015-03-20 21:37:54+00:00 +C452,place order,2015-03-20 22:56:58+00:00,2015-03-20 22:26:25+00:00 +C453,place order,2015-03-21 20:25:58+00:00,2015-03-21 17:21:42+00:00 +C367,pay,2015-03-21 18:16:28+00:00,2015-03-21 18:12:01+00:00 +C374,pay,2015-03-22 17:06:34+00:00,2015-03-22 17:00:00+00:00 +C454,place order,2015-03-22 17:22:58+00:00,2015-03-22 17:20:36+00:00 +C455,place order,2015-03-23 08:51:43+00:00,2015-03-23 08:35:46+00:00 +C319,prepare delivery,2015-03-23 11:40:40+00:00,2015-03-23 09:13:24+00:00 +C335,confirm payment,2015-03-23 09:54:45+00:00,2015-03-23 09:46:56+00:00 +C311,prepare delivery,2015-03-23 10:12:46+00:00,2015-03-23 10:05:03+00:00 +C321,make delivery,2015-03-23 10:18:57+00:00,2015-03-23 10:07:39+00:00 +C456,place order,2015-03-23 10:48:52+00:00,2015-03-23 10:41:46+00:00 +C325,confirm payment,2015-03-23 10:54:09+00:00,2015-03-23 10:46:27+00:00 +C350,send reminder,2015-03-23 11:05:15+00:00,2015-03-23 10:55:45+00:00 +C358,pay,2015-03-23 11:19:36+00:00,2015-03-23 11:12:52+00:00 +C359,prepare delivery,2015-03-23 11:27:06+00:00,2015-03-23 11:21:24+00:00 +C337,confirm payment,2015-03-23 11:51:26+00:00,2015-03-23 11:27:52+00:00 +C321,confirm payment,2015-03-23 11:56:14+00:00,2015-03-23 11:51:24+00:00 +C392,send reminder,2015-03-23 12:11:22+00:00,2015-03-23 12:03:48+00:00 +C333,prepare delivery,2015-03-23 12:43:31+00:00,2015-03-23 12:18:20+00:00 +C433,send invoice,2015-03-23 12:33:10+00:00,2015-03-23 12:22:46+00:00 +C457,place order,2015-03-23 14:38:55+00:00,2015-03-23 12:41:39+00:00 +C326,prepare delivery,2015-03-23 15:58:11+00:00,2015-03-23 13:26:59+00:00 +C331,prepare delivery,2015-03-23 13:42:54+00:00,2015-03-23 13:35:43+00:00 +C403,send reminder,2015-03-23 14:32:50+00:00,2015-03-23 14:16:44+00:00 +C440,send invoice,2015-03-23 14:26:03+00:00,2015-03-23 14:22:01+00:00 +C346,prepare delivery,2015-03-23 17:10:50+00:00,2015-03-23 14:31:44+00:00 +C448,send invoice,2015-03-23 14:38:08+00:00,2015-03-23 14:33:03+00:00 +C458,place order,2015-03-23 14:45:29+00:00,2015-03-23 14:41:25+00:00 +C342,send reminder,2015-03-23 15:24:04+00:00,2015-03-23 14:42:54+00:00 +C449,send invoice,2015-03-23 16:07:16+00:00,2015-03-23 15:41:28+00:00 +C355,prepare delivery,2015-03-23 15:47:43+00:00,2015-03-23 15:44:09+00:00 +C344,make delivery,2015-03-23 17:06:31+00:00,2015-03-23 15:49:33+00:00 +C361,send reminder,2015-03-23 16:27:29+00:00,2015-03-23 16:16:34+00:00 +C352,pay,2015-03-23 16:24:48+00:00,2015-03-23 16:19:43+00:00 +C345,send reminder,2015-03-23 16:33:40+00:00,2015-03-23 16:27:11+00:00 +C459,place order,2015-03-23 16:52:08+00:00,2015-03-23 16:40:58+00:00 +C340,prepare delivery,2015-03-23 17:04:33+00:00,2015-03-23 16:58:12+00:00 +C453,send invoice,2015-03-23 17:13:44+00:00,2015-03-23 17:09:57+00:00 +C413,send reminder,2015-03-23 17:42:08+00:00,2015-03-23 17:12:33+00:00 +C342,cancel order,2015-03-23 17:50:38+00:00,2015-03-23 17:34:36+00:00 +C311,confirm payment,2015-03-23 18:02:05+00:00,2015-03-23 17:41:46+00:00 +C460,place order,2015-03-23 18:51:25+00:00,2015-03-23 18:40:03+00:00 +C417,send reminder,2015-03-23 19:52:50+00:00,2015-03-23 19:40:27+00:00 +C461,place order,2015-03-23 21:39:16+00:00,2015-03-23 21:36:23+00:00 +C394,pay,2015-03-24 01:45:10+00:00,2015-03-24 01:41:17+00:00 +C462,place order,2015-03-24 05:58:33+00:00,2015-03-24 05:39:30+00:00 +C400,pay,2015-03-24 07:57:50+00:00,2015-03-24 07:51:15+00:00 +C301,make delivery,2015-03-24 08:52:09+00:00,2015-03-24 08:37:42+00:00 +C444,send invoice,2015-03-24 08:55:52+00:00,2015-03-24 08:51:03+00:00 +C454,send invoice,2015-03-24 09:05:50+00:00,2015-03-24 09:02:53+00:00 +C360,prepare delivery,2015-03-24 09:20:15+00:00,2015-03-24 09:12:43+00:00 +C350,cancel order,2015-03-24 10:22:52+00:00,2015-03-24 09:18:06+00:00 +C319,make delivery,2015-03-24 09:37:35+00:00,2015-03-24 09:24:17+00:00 +C311,make delivery,2015-03-24 09:34:28+00:00,2015-03-24 09:24:36+00:00 +C371,prepare delivery,2015-03-24 09:35:34+00:00,2015-03-24 09:31:46+00:00 +C316,prepare delivery,2015-03-24 09:52:15+00:00,2015-03-24 09:44:17+00:00 +C351,prepare delivery,2015-03-24 10:10:02+00:00,2015-03-24 10:02:29+00:00 +C463,place order,2015-03-24 10:26:23+00:00,2015-03-24 10:13:34+00:00 +C341,prepare delivery,2015-03-24 10:30:25+00:00,2015-03-24 10:26:29+00:00 +C442,send invoice,2015-03-24 10:30:02+00:00,2015-03-24 10:26:54+00:00 +C411,send reminder,2015-03-24 10:45:04+00:00,2015-03-24 10:32:37+00:00 +C372,pay,2015-03-24 10:50:57+00:00,2015-03-24 10:43:34+00:00 +C332,prepare delivery,2015-03-24 11:01:54+00:00,2015-03-24 10:58:54+00:00 +C377,prepare delivery,2015-03-24 11:31:34+00:00,2015-03-24 11:28:38+00:00 +C326,make delivery,2015-03-24 12:14:00+00:00,2015-03-24 11:28:43+00:00 +C344,confirm payment,2015-03-24 11:34:47+00:00,2015-03-24 11:29:10+00:00 +C319,confirm payment,2015-03-24 11:43:10+00:00,2015-03-24 11:40:07+00:00 +C464,place order,2015-03-24 11:56:59+00:00,2015-03-24 11:45:16+00:00 +C331,confirm payment,2015-03-24 12:03:46+00:00,2015-03-24 11:47:13+00:00 +C359,make delivery,2015-03-24 12:23:54+00:00,2015-03-24 11:49:30+00:00 +C436,send invoice,2015-03-24 12:02:13+00:00,2015-03-24 11:55:09+00:00 +C407,send reminder,2015-03-24 12:12:38+00:00,2015-03-24 12:02:04+00:00 +C438,send invoice,2015-03-24 12:37:13+00:00,2015-03-24 12:05:56+00:00 +C333,make delivery,2015-03-24 12:33:43+00:00,2015-03-24 12:06:10+00:00 +C405,send reminder,2015-03-24 12:17:44+00:00,2015-03-24 12:09:59+00:00 +C387,pay,2015-03-24 12:18:49+00:00,2015-03-24 12:13:04+00:00 +C339,send reminder,2015-03-24 13:25:04+00:00,2015-03-24 13:06:56+00:00 +C364,pay,2015-03-24 13:22:58+00:00,2015-03-24 13:18:05+00:00 +C465,place order,2015-03-24 13:55:37+00:00,2015-03-24 13:48:39+00:00 +C414,send reminder,2015-03-24 14:29:42+00:00,2015-03-24 14:04:22+00:00 +C355,make delivery,2015-03-24 15:01:01+00:00,2015-03-24 14:13:22+00:00 +C336,prepare delivery,2015-03-24 16:57:14+00:00,2015-03-24 14:22:26+00:00 +C346,make delivery,2015-03-24 14:56:32+00:00,2015-03-24 14:44:14+00:00 +C447,send invoice,2015-03-24 15:10:40+00:00,2015-03-24 15:03:13+00:00 +C331,make delivery,2015-03-24 15:42:06+00:00,2015-03-24 15:12:57+00:00 +C445,send invoice,2015-03-24 15:36:43+00:00,2015-03-24 15:29:53+00:00 +C466,place order,2015-03-24 15:59:55+00:00,2015-03-24 15:55:25+00:00 +C390,pay,2015-03-24 16:03:54+00:00,2015-03-24 15:57:49+00:00 +C396,send reminder,2015-03-24 16:12:33+00:00,2015-03-24 16:01:36+00:00 +C363,send reminder,2015-03-24 16:20:39+00:00,2015-03-24 16:03:28+00:00 +C347,pay,2015-03-24 16:18:11+00:00,2015-03-24 16:13:26+00:00 +C410,send reminder,2015-03-24 16:27:23+00:00,2015-03-24 16:18:05+00:00 +C392,pay,2015-03-24 16:35:59+00:00,2015-03-24 16:31:22+00:00 +C340,make delivery,2015-03-24 16:57:20+00:00,2015-03-24 16:42:42+00:00 +C371,make delivery,2015-03-24 18:21:46+00:00,2015-03-24 16:48:07+00:00 +C429,send invoice,2015-03-24 17:04:05+00:00,2015-03-24 16:59:32+00:00 +C368,prepare delivery,2015-03-24 19:29:13+00:00,2015-03-24 17:04:28+00:00 +C360,make delivery,2015-03-24 17:25:17+00:00,2015-03-24 17:14:11+00:00 +C402,send reminder,2015-03-24 17:34:07+00:00,2015-03-24 17:19:55+00:00 +C316,confirm payment,2015-03-24 17:47:11+00:00,2015-03-24 17:39:51+00:00 +C301,confirm payment,2015-03-24 17:54:53+00:00,2015-03-24 17:46:02+00:00 +C338,prepare delivery,2015-03-24 17:56:20+00:00,2015-03-24 17:52:37+00:00 +C467,place order,2015-03-24 18:21:51+00:00,2015-03-24 18:08:57+00:00 +C366,pay,2015-03-24 18:17:26+00:00,2015-03-24 18:13:04+00:00 +C421,send invoice,2015-03-24 18:43:24+00:00,2015-03-24 18:35:57+00:00 +C353,prepare delivery,2015-03-24 19:04:14+00:00,2015-03-24 18:57:03+00:00 +C375,pay,2015-03-24 19:30:51+00:00,2015-03-24 19:24:37+00:00 +C468,place order,2015-03-24 20:06:08+00:00,2015-03-24 20:03:06+00:00 +C359,confirm payment,2015-03-24 21:00:15+00:00,2015-03-24 20:52:27+00:00 +C435,send invoice,2015-03-24 22:28:48+00:00,2015-03-24 22:24:32+00:00 +C469,place order,2015-03-24 22:46:43+00:00,2015-03-24 22:42:26+00:00 +C341,make delivery,2015-03-25 09:13:48+00:00,2015-03-25 08:40:52+00:00 +C470,place order,2015-03-25 09:16:18+00:00,2015-03-25 09:13:07+00:00 +C355,confirm payment,2015-03-25 09:20:10+00:00,2015-03-25 09:14:30+00:00 +C351,make delivery,2015-03-25 10:04:03+00:00,2015-03-25 09:38:54+00:00 +C399,pay,2015-03-25 09:57:10+00:00,2015-03-25 09:50:56+00:00 +C332,make delivery,2015-03-25 10:20:22+00:00,2015-03-25 09:55:56+00:00 +C362,prepare delivery,2015-03-25 10:07:32+00:00,2015-03-25 09:59:40+00:00 +C451,send invoice,2015-03-25 10:11:38+00:00,2015-03-25 10:02:00+00:00 +C365,send reminder,2015-03-25 10:41:14+00:00,2015-03-25 10:09:32+00:00 +C361,pay,2015-03-25 10:17:16+00:00,2015-03-25 10:10:53+00:00 +C340,confirm payment,2015-03-25 10:24:52+00:00,2015-03-25 10:16:40+00:00 +C333,confirm payment,2015-03-25 10:31:20+00:00,2015-03-25 10:24:28+00:00 +C371,confirm payment,2015-03-25 10:35:14+00:00,2015-03-25 10:30:02+00:00 +C471,place order,2015-03-25 10:47:02+00:00,2015-03-25 10:44:21+00:00 +C432,send invoice,2015-03-25 11:21:32+00:00,2015-03-25 10:57:14+00:00 +C316,make delivery,2015-03-25 12:43:59+00:00,2015-03-25 11:19:29+00:00 +C334,prepare delivery,2015-03-25 11:29:22+00:00,2015-03-25 11:22:16+00:00 +C377,make delivery,2015-03-25 13:16:21+00:00,2015-03-25 11:44:16+00:00 +C456,send invoice,2015-03-25 12:13:21+00:00,2015-03-25 11:46:05+00:00 +C345,pay,2015-03-25 12:05:18+00:00,2015-03-25 11:59:54+00:00 +C336,make delivery,2015-03-25 12:17:47+00:00,2015-03-25 12:02:36+00:00 +C348,pay,2015-03-25 12:16:18+00:00,2015-03-25 12:11:56+00:00 +C326,confirm payment,2015-03-25 12:25:36+00:00,2015-03-25 12:17:16+00:00 +C397,send reminder,2015-03-25 12:54:35+00:00,2015-03-25 12:28:02+00:00 +C356,prepare delivery,2015-03-25 12:43:32+00:00,2015-03-25 12:39:54+00:00 +C472,place order,2015-03-25 12:53:43+00:00,2015-03-25 12:46:49+00:00 +C381,prepare delivery,2015-03-25 13:11:27+00:00,2015-03-25 13:07:32+00:00 +C346,confirm payment,2015-03-25 13:26:46+00:00,2015-03-25 13:19:16+00:00 +C461,send invoice,2015-03-25 14:08:20+00:00,2015-03-25 14:03:16+00:00 +C443,send invoice,2015-03-25 14:15:28+00:00,2015-03-25 14:11:38+00:00 +C339,pay,2015-03-25 14:26:53+00:00,2015-03-25 14:18:06+00:00 +C455,send invoice,2015-03-25 14:26:11+00:00,2015-03-25 14:21:50+00:00 +C376,prepare delivery,2015-03-25 14:38:18+00:00,2015-03-25 14:30:29+00:00 +C473,place order,2015-03-25 14:59:35+00:00,2015-03-25 14:51:45+00:00 +C369,prepare delivery,2015-03-25 15:09:33+00:00,2015-03-25 15:06:36+00:00 +C341,confirm payment,2015-03-25 15:30:38+00:00,2015-03-25 15:13:11+00:00 +C368,make delivery,2015-03-25 15:50:21+00:00,2015-03-25 15:19:54+00:00 +C360,confirm payment,2015-03-25 15:49:00+00:00,2015-03-25 15:44:10+00:00 +C398,pay,2015-03-25 15:58:33+00:00,2015-03-25 15:52:41+00:00 +C385,send reminder,2015-03-25 16:11:11+00:00,2015-03-25 15:58:41+00:00 +C386,prepare delivery,2015-03-25 16:43:42+00:00,2015-03-25 16:36:03+00:00 +C474,place order,2015-03-25 17:38:58+00:00,2015-03-25 17:01:37+00:00 +C353,confirm payment,2015-03-25 17:31:48+00:00,2015-03-25 17:15:21+00:00 +C441,send invoice,2015-03-25 17:22:18+00:00,2015-03-25 17:16:53+00:00 +C297,prepare delivery,2015-03-25 18:39:37+00:00,2015-03-25 18:11:54+00:00 +C475,place order,2015-03-25 18:27:03+00:00,2015-03-25 18:21:22+00:00 +C389,pay,2015-03-25 18:49:51+00:00,2015-03-25 18:43:53+00:00 +C476,place order,2015-03-25 23:41:46+00:00,2015-03-25 20:40:20+00:00 +C338,make delivery,2015-03-25 23:44:13+00:00,2015-03-25 22:08:43+00:00 +C477,place order,2015-03-26 01:17:02+00:00,2015-03-26 01:03:12+00:00 +C377,confirm payment,2015-03-26 08:41:16+00:00,2015-03-26 08:32:24+00:00 +C370,prepare delivery,2015-03-26 08:40:47+00:00,2015-03-26 08:37:58+00:00 +C367,prepare delivery,2015-03-26 09:14:39+00:00,2015-03-26 09:05:47+00:00 +C353,make delivery,2015-03-26 09:20:48+00:00,2015-03-26 09:05:51+00:00 +C478,place order,2015-03-26 09:15:39+00:00,2015-03-26 09:09:39+00:00 +C392,prepare delivery,2015-03-26 09:24:55+00:00,2015-03-26 09:22:06+00:00 +C351,confirm payment,2015-03-26 09:27:37+00:00,2015-03-26 09:22:36+00:00 +C375,prepare delivery,2015-03-26 09:41:11+00:00,2015-03-26 09:33:55+00:00 +C362,make delivery,2015-03-26 11:00:05+00:00,2015-03-26 09:42:09+00:00 +C381,make delivery,2015-03-26 10:10:59+00:00,2015-03-26 09:43:03+00:00 +C352,prepare delivery,2015-03-26 10:08:56+00:00,2015-03-26 10:01:19+00:00 +C356,confirm payment,2015-03-26 10:12:53+00:00,2015-03-26 10:04:54+00:00 +C458,send invoice,2015-03-26 10:22:40+00:00,2015-03-26 10:15:48+00:00 +C334,confirm payment,2015-03-26 10:38:33+00:00,2015-03-26 10:32:59+00:00 +C479,place order,2015-03-26 10:47:43+00:00,2015-03-26 10:37:25+00:00 +C390,prepare delivery,2015-03-26 10:53:48+00:00,2015-03-26 10:38:33+00:00 +C439,send invoice,2015-03-26 10:43:13+00:00,2015-03-26 10:41:08+00:00 +C470,send invoice,2015-03-26 10:46:55+00:00,2015-03-26 10:43:18+00:00 +C382,send reminder,2015-03-26 11:13:53+00:00,2015-03-26 10:53:43+00:00 +C379,send reminder,2015-03-26 11:17:44+00:00,2015-03-26 10:59:19+00:00 +C332,confirm payment,2015-03-26 11:20:06+00:00,2015-03-26 11:10:34+00:00 +C452,send invoice,2015-03-26 11:20:44+00:00,2015-03-26 11:15:00+00:00 +C336,confirm payment,2015-03-26 11:27:29+00:00,2015-03-26 11:19:40+00:00 +C446,send invoice,2015-03-26 11:44:12+00:00,2015-03-26 11:40:00+00:00 +C334,make delivery,2015-03-26 12:37:17+00:00,2015-03-26 11:59:21+00:00 +C356,make delivery,2015-03-26 12:43:48+00:00,2015-03-26 12:16:48+00:00 +C376,make delivery,2015-03-26 13:59:57+00:00,2015-03-26 12:21:44+00:00 +C480,place order,2015-03-26 12:47:02+00:00,2015-03-26 12:32:57+00:00 +C369,confirm payment,2015-03-26 12:54:45+00:00,2015-03-26 12:50:37+00:00 +C374,prepare delivery,2015-03-26 13:49:55+00:00,2015-03-26 13:42:41+00:00 +C481,place order,2015-03-26 14:51:26+00:00,2015-03-26 14:24:01+00:00 +C387,prepare delivery,2015-03-26 14:38:35+00:00,2015-03-26 14:34:42+00:00 +C466,send invoice,2015-03-26 14:40:59+00:00,2015-03-26 14:36:55+00:00 +C363,pay,2015-03-26 15:04:10+00:00,2015-03-26 14:57:08+00:00 +C459,send invoice,2015-03-26 17:46:24+00:00,2015-03-26 15:03:52+00:00 +C368,confirm payment,2015-03-26 15:15:49+00:00,2015-03-26 15:07:48+00:00 +C430,send reminder,2015-03-26 15:43:06+00:00,2015-03-26 15:20:30+00:00 +C376,confirm payment,2015-03-26 15:47:21+00:00,2015-03-26 15:39:58+00:00 +C469,send invoice,2015-03-26 15:48:14+00:00,2015-03-26 15:40:43+00:00 +C369,make delivery,2015-03-26 16:28:02+00:00,2015-03-26 15:56:29+00:00 +C297,make delivery,2015-03-26 16:26:50+00:00,2015-03-26 16:00:39+00:00 +C385,pay,2015-03-26 16:07:08+00:00,2015-03-26 16:03:29+00:00 +C482,place order,2015-03-26 16:13:06+00:00,2015-03-26 16:06:09+00:00 +C365,cancel order,2015-03-26 16:38:17+00:00,2015-03-26 16:17:36+00:00 +C354,prepare delivery,2015-03-26 19:05:07+00:00,2015-03-26 16:34:44+00:00 +C378,send reminder,2015-03-26 16:59:05+00:00,2015-03-26 16:38:15+00:00 +C414,pay,2015-03-26 16:51:34+00:00,2015-03-26 16:44:27+00:00 +C411,pay,2015-03-26 16:57:21+00:00,2015-03-26 16:50:51+00:00 +C357,pay,2015-03-26 16:59:28+00:00,2015-03-26 16:54:09+00:00 +C386,make delivery,2015-03-26 17:28:44+00:00,2015-03-26 17:04:44+00:00 +C457,send invoice,2015-03-26 17:16:04+00:00,2015-03-26 17:10:31+00:00 +C338,confirm payment,2015-03-26 17:24:17+00:00,2015-03-26 17:19:53+00:00 +C380,send reminder,2015-03-26 18:03:35+00:00,2015-03-26 17:30:00+00:00 +C483,place order,2015-03-26 17:38:05+00:00,2015-03-26 17:30:26+00:00 +C386,confirm payment,2015-03-26 17:38:20+00:00,2015-03-26 17:32:40+00:00 +C297,confirm payment,2015-03-26 18:13:26+00:00,2015-03-26 18:08:46+00:00 +C370,confirm payment,2015-03-26 18:33:17+00:00,2015-03-26 18:26:51+00:00 +C401,pay,2015-03-26 22:02:55+00:00,2015-03-26 18:27:44+00:00 +C372,prepare delivery,2015-03-26 19:30:21+00:00,2015-03-26 19:14:32+00:00 +C484,place order,2015-03-26 19:22:44+00:00,2015-03-26 19:18:59+00:00 +C404,pay,2015-03-26 19:48:30+00:00,2015-03-26 19:36:39+00:00 +C339,prepare delivery,2015-03-26 20:14:47+00:00,2015-03-26 19:47:35+00:00 +C393,pay,2015-03-26 20:37:16+00:00,2015-03-26 20:34:58+00:00 +C375,make delivery,2015-03-26 21:27:11+00:00,2015-03-26 21:10:12+00:00 +C391,pay,2015-03-26 21:45:14+00:00,2015-03-26 21:35:10+00:00 +C485,place order,2015-03-26 22:36:05+00:00,2015-03-26 22:14:12+00:00 +C486,place order,2015-03-27 12:26:55+00:00,2015-03-27 08:16:39+00:00 +C392,make delivery,2015-03-27 09:33:36+00:00,2015-03-27 09:18:02+00:00 +C362,confirm payment,2015-03-27 09:32:49+00:00,2015-03-27 09:25:34+00:00 +C419,pay,2015-03-27 10:19:34+00:00,2015-03-27 09:58:05+00:00 +C352,make delivery,2015-03-27 10:23:24+00:00,2015-03-27 09:59:41+00:00 +C487,place order,2015-03-27 10:19:19+00:00,2015-03-27 10:13:05+00:00 +C352,confirm payment,2015-03-27 10:30:50+00:00,2015-03-27 10:22:00+00:00 +C367,make delivery,2015-03-27 10:46:50+00:00,2015-03-27 10:31:51+00:00 +C370,make delivery,2015-03-27 10:48:39+00:00,2015-03-27 10:34:09+00:00 +C422,send reminder,2015-03-27 10:58:59+00:00,2015-03-27 10:49:02+00:00 +C358,prepare delivery,2015-03-27 11:28:08+00:00,2015-03-27 11:24:23+00:00 +C427,send reminder,2015-03-27 11:52:06+00:00,2015-03-27 11:38:47+00:00 +C488,place order,2015-03-27 11:49:43+00:00,2015-03-27 11:44:18+00:00 +C390,make delivery,2015-03-27 12:11:35+00:00,2015-03-27 11:55:25+00:00 +C434,send reminder,2015-03-27 12:10:10+00:00,2015-03-27 11:56:46+00:00 +C381,confirm payment,2015-03-27 12:07:31+00:00,2015-03-27 11:57:39+00:00 +C375,confirm payment,2015-03-27 12:09:08+00:00,2015-03-27 11:59:28+00:00 +C428,send reminder,2015-03-27 12:14:49+00:00,2015-03-27 12:08:22+00:00 +C410,pay,2015-03-27 12:36:03+00:00,2015-03-27 12:28:55+00:00 +C472,send invoice,2015-03-27 12:47:24+00:00,2015-03-27 12:31:29+00:00 +C345,prepare delivery,2015-03-27 12:47:57+00:00,2015-03-27 12:41:46+00:00 +C374,make delivery,2015-03-27 13:09:29+00:00,2015-03-27 12:59:08+00:00 +C388,pay,2015-03-27 13:29:17+00:00,2015-03-27 13:14:43+00:00 +C383,pay,2015-03-27 13:19:18+00:00,2015-03-27 13:15:27+00:00 +C416,send reminder,2015-03-27 13:40:49+00:00,2015-03-27 13:22:35+00:00 +C384,pay,2015-03-27 13:40:57+00:00,2015-03-27 13:34:23+00:00 +C489,place order,2015-03-27 14:03:04+00:00,2015-03-27 13:46:43+00:00 +C437,send reminder,2015-03-27 14:32:53+00:00,2015-03-27 14:11:47+00:00 +C482,send invoice,2015-03-27 14:28:53+00:00,2015-03-27 14:23:36+00:00 +C464,send invoice,2015-03-27 14:35:05+00:00,2015-03-27 14:28:31+00:00 +C367,confirm payment,2015-03-27 14:33:42+00:00,2015-03-27 14:28:39+00:00 +C402,pay,2015-03-27 15:13:38+00:00,2015-03-27 15:09:22+00:00 +C387,make delivery,2015-03-27 15:32:00+00:00,2015-03-27 15:22:04+00:00 +C366,prepare delivery,2015-03-27 16:15:10+00:00,2015-03-27 15:48:20+00:00 +C490,place order,2015-03-27 16:00:39+00:00,2015-03-27 15:51:33+00:00 +C408,pay,2015-03-27 19:40:54+00:00,2015-03-27 15:53:36+00:00 +C354,make delivery,2015-03-27 17:39:14+00:00,2015-03-27 16:00:32+00:00 +C392,confirm payment,2015-03-27 16:49:45+00:00,2015-03-27 16:40:55+00:00 +C373,send reminder,2015-03-27 16:54:05+00:00,2015-03-27 16:45:28+00:00 +C420,send reminder,2015-03-27 17:12:26+00:00,2015-03-27 16:58:52+00:00 +C389,prepare delivery,2015-03-27 17:08:50+00:00,2015-03-27 17:01:21+00:00 +C400,prepare delivery,2015-03-27 17:32:59+00:00,2015-03-27 17:26:08+00:00 +C390,confirm payment,2015-03-27 17:34:05+00:00,2015-03-27 17:27:40+00:00 +C354,confirm payment,2015-03-27 17:51:49+00:00,2015-03-27 17:43:59+00:00 +C491,place order,2015-03-27 18:03:34+00:00,2015-03-27 18:01:13+00:00 +C364,prepare delivery,2015-03-27 18:25:03+00:00,2015-03-27 18:17:42+00:00 +C339,make delivery,2015-03-27 19:14:13+00:00,2015-03-27 18:59:32+00:00 +C450,send invoice,2015-03-27 19:19:21+00:00,2015-03-27 19:14:25+00:00 +C492,place order,2015-03-27 19:49:18+00:00,2015-03-27 19:39:54+00:00 +C493,place order,2015-03-27 23:10:41+00:00,2015-03-27 22:56:02+00:00 +C418,pay,2015-03-28 14:48:37+00:00,2015-03-28 14:44:21+00:00 +C494,place order,2015-03-28 20:51:17+00:00,2015-03-28 20:42:46+00:00 +C495,place order,2015-03-29 20:56:02+00:00,2015-03-29 20:51:57+00:00 +C415,pay,2015-03-30 06:23:37+00:00,2015-03-30 06:20:30+00:00 +C468,send invoice,2015-03-30 09:04:37+00:00,2015-03-30 08:58:13+00:00 +C372,make delivery,2015-03-30 09:33:08+00:00,2015-03-30 09:18:46+00:00 +C496,place order,2015-03-30 09:52:43+00:00,2015-03-30 09:38:11+00:00 +C374,confirm payment,2015-03-30 09:49:04+00:00,2015-03-30 09:42:55+00:00 +C476,send invoice,2015-03-30 09:51:45+00:00,2015-03-30 09:47:21+00:00 +C409,pay,2015-03-30 10:15:26+00:00,2015-03-30 09:51:30+00:00 +C358,make delivery,2015-03-30 11:57:40+00:00,2015-03-30 10:38:53+00:00 +C465,send invoice,2015-03-30 11:24:22+00:00,2015-03-30 11:16:04+00:00 +C497,place order,2015-03-30 11:38:39+00:00,2015-03-30 11:34:29+00:00 +C463,send invoice,2015-03-30 15:20:28+00:00,2015-03-30 11:39:53+00:00 +C378,pay,2015-03-30 12:06:14+00:00,2015-03-30 12:03:35+00:00 +C405,pay,2015-03-30 12:08:40+00:00,2015-03-30 12:04:54+00:00 +C339,confirm payment,2015-03-30 12:23:33+00:00,2015-03-30 12:18:52+00:00 +C379,pay,2015-03-30 12:37:41+00:00,2015-03-30 12:20:19+00:00 +C397,pay,2015-03-30 12:46:06+00:00,2015-03-30 12:41:12+00:00 +C395,pay,2015-03-30 13:09:03+00:00,2015-03-30 13:04:07+00:00 +C433,send reminder,2015-03-30 13:24:41+00:00,2015-03-30 13:05:24+00:00 +C387,confirm payment,2015-03-30 13:21:38+00:00,2015-03-30 13:14:51+00:00 +C498,place order,2015-03-30 17:20:15+00:00,2015-03-30 13:27:05+00:00 +C481,send invoice,2015-03-30 13:48:56+00:00,2015-03-30 13:44:21+00:00 +C473,send invoice,2015-03-30 14:31:41+00:00,2015-03-30 14:25:16+00:00 +C403,send reminder,2015-03-30 15:07:11+00:00,2015-03-30 14:46:42+00:00 +C480,send invoice,2015-03-30 14:56:30+00:00,2015-03-30 14:51:52+00:00 +C361,prepare delivery,2015-03-30 15:05:44+00:00,2015-03-30 14:57:46+00:00 +C389,confirm payment,2015-03-30 15:11:59+00:00,2015-03-30 15:06:01+00:00 +C499,place order,2015-03-30 15:18:00+00:00,2015-03-30 15:12:17+00:00 +C348,prepare delivery,2015-03-30 15:22:51+00:00,2015-03-30 15:15:45+00:00 +C382,pay,2015-03-30 15:29:00+00:00,2015-03-30 15:18:48+00:00 +C414,prepare delivery,2015-03-30 15:29:56+00:00,2015-03-30 15:26:17+00:00 +C366,make delivery,2015-03-30 15:52:19+00:00,2015-03-30 15:37:23+00:00 +C425,pay,2015-03-30 15:51:04+00:00,2015-03-30 15:44:04+00:00 +C366,confirm payment,2015-03-30 16:08:22+00:00,2015-03-30 16:03:35+00:00 +C400,make delivery,2015-03-30 16:20:44+00:00,2015-03-30 16:08:13+00:00 +C389,make delivery,2015-03-30 16:50:21+00:00,2015-03-30 16:20:47+00:00 +C380,cancel order,2015-03-30 16:37:05+00:00,2015-03-30 16:25:04+00:00 +C345,make delivery,2015-03-30 16:54:35+00:00,2015-03-30 16:39:11+00:00 +C500,place order,2015-03-30 16:47:48+00:00,2015-03-30 16:42:42+00:00 +C471,send invoice,2015-03-30 17:20:39+00:00,2015-03-30 17:14:43+00:00 +C364,make delivery,2015-03-30 17:57:20+00:00,2015-03-30 17:43:35+00:00 +C391,prepare delivery,2015-03-30 18:00:49+00:00,2015-03-30 17:53:39+00:00 +C345,confirm payment,2015-03-30 18:29:56+00:00,2015-03-30 18:22:10+00:00 +C412,pay,2015-03-30 18:45:34+00:00,2015-03-30 18:38:36+00:00 +C501,place order,2015-03-30 18:54:40+00:00,2015-03-30 18:43:31+00:00 +C373,cancel order,2015-03-30 18:58:59+00:00,2015-03-30 18:46:45+00:00 +C443,pay,2015-03-30 18:59:49+00:00,2015-03-30 18:55:50+00:00 +C454,send reminder,2015-03-30 19:30:12+00:00,2015-03-30 18:59:26+00:00 +C398,prepare delivery,2015-03-30 20:05:15+00:00,2015-03-30 20:01:36+00:00 +C502,place order,2015-03-30 21:52:02+00:00,2015-03-30 21:46:47+00:00 +C417,send reminder,2015-03-30 22:51:38+00:00,2015-03-30 22:37:08+00:00 +C503,place order,2015-03-31 06:51:27+00:00,2015-03-31 06:41:54+00:00 +C428,pay,2015-03-31 08:18:53+00:00,2015-03-31 08:14:38+00:00 +C413,send reminder,2015-03-31 08:29:09+00:00,2015-03-31 08:16:14+00:00 +C372,confirm payment,2015-03-31 09:02:33+00:00,2015-03-31 08:56:39+00:00 +C358,confirm payment,2015-03-31 10:16:26+00:00,2015-03-31 10:08:38+00:00 +C490,send invoice,2015-03-31 10:17:34+00:00,2015-03-31 10:08:47+00:00 +C504,place order,2015-03-31 10:32:15+00:00,2015-03-31 10:22:13+00:00 +C399,prepare delivery,2015-03-31 10:31:43+00:00,2015-03-31 10:27:50+00:00 +C400,confirm payment,2015-03-31 11:02:52+00:00,2015-03-31 10:40:52+00:00 +C407,send reminder,2015-03-31 10:58:46+00:00,2015-03-31 10:49:55+00:00 +C477,send invoice,2015-03-31 11:49:58+00:00,2015-03-31 11:14:57+00:00 +C442,send reminder,2015-03-31 11:42:50+00:00,2015-03-31 11:28:44+00:00 +C444,send reminder,2015-03-31 11:46:03+00:00,2015-03-31 11:31:00+00:00 +C505,place order,2015-03-31 12:08:29+00:00,2015-03-31 12:02:33+00:00 +C483,send invoice,2015-03-31 15:43:10+00:00,2015-03-31 12:13:02+00:00 +C493,send invoice,2015-03-31 12:27:56+00:00,2015-03-31 12:15:00+00:00 +C486,send invoice,2015-03-31 12:21:45+00:00,2015-03-31 12:15:29+00:00 +C416,pay,2015-03-31 12:21:24+00:00,2015-03-31 12:18:34+00:00 +C462,send invoice,2015-03-31 12:25:42+00:00,2015-03-31 12:21:23+00:00 +C411,prepare delivery,2015-03-31 12:39:45+00:00,2015-03-31 12:32:19+00:00 +C364,confirm payment,2015-03-31 12:41:16+00:00,2015-03-31 12:36:18+00:00 +C348,make delivery,2015-03-31 13:10:56+00:00,2015-03-31 12:45:41+00:00 +C426,pay,2015-03-31 13:02:02+00:00,2015-03-31 12:55:14+00:00 +C467,send invoice,2015-03-31 13:00:47+00:00,2015-03-31 12:56:08+00:00 +C475,send invoice,2015-03-31 13:12:24+00:00,2015-03-31 13:04:52+00:00 +C491,send invoice,2015-03-31 13:11:15+00:00,2015-03-31 13:05:26+00:00 +C506,place order,2015-03-31 13:36:12+00:00,2015-03-31 13:23:13+00:00 +C436,pay,2015-03-31 14:23:52+00:00,2015-03-31 14:00:08+00:00 +C474,send invoice,2015-03-31 14:13:51+00:00,2015-03-31 14:09:25+00:00 +C414,make delivery,2015-03-31 15:42:34+00:00,2015-03-31 14:10:50+00:00 +C460,send invoice,2015-03-31 14:52:02+00:00,2015-03-31 14:46:14+00:00 +C361,make delivery,2015-03-31 14:57:27+00:00,2015-03-31 14:47:13+00:00 +C496,send invoice,2015-03-31 14:53:29+00:00,2015-03-31 14:47:59+00:00 +C507,place order,2015-03-31 15:11:10+00:00,2015-03-31 15:04:34+00:00 +C403,pay,2015-03-31 15:19:55+00:00,2015-03-31 15:11:30+00:00 +C393,prepare delivery,2015-03-31 17:39:29+00:00,2015-03-31 15:13:01+00:00 +C417,cancel order,2015-03-31 15:43:34+00:00,2015-03-31 15:27:24+00:00 +C445,send reminder,2015-03-31 16:57:46+00:00,2015-03-31 16:21:37+00:00 +C508,place order,2015-03-31 16:48:15+00:00,2015-03-31 16:27:15+00:00 +C414,confirm payment,2015-03-31 16:54:26+00:00,2015-03-31 16:41:33+00:00 +C391,make delivery,2015-03-31 18:12:34+00:00,2015-03-31 16:44:29+00:00 +C429,send reminder,2015-03-31 17:07:28+00:00,2015-03-31 16:52:06+00:00 +C435,pay,2015-03-31 17:02:46+00:00,2015-03-31 16:58:41+00:00 +C488,send invoice,2015-03-31 17:09:06+00:00,2015-03-31 17:04:11+00:00 +C398,make delivery,2015-03-31 18:47:58+00:00,2015-03-31 17:08:07+00:00 +C404,prepare delivery,2015-03-31 19:37:09+00:00,2015-03-31 17:10:21+00:00 +C415,prepare delivery,2015-03-31 17:14:45+00:00,2015-03-31 17:10:56+00:00 +C391,confirm payment,2015-03-31 17:16:43+00:00,2015-03-31 17:11:43+00:00 +C396,send reminder,2015-03-31 17:49:04+00:00,2015-03-31 17:24:17+00:00 +C484,send invoice,2015-03-31 17:37:13+00:00,2015-03-31 17:30:07+00:00 +C509,place order,2015-03-31 18:24:31+00:00,2015-03-31 18:12:37+00:00 +C394,prepare delivery,2015-03-31 18:22:59+00:00,2015-03-31 18:19:14+00:00 +C421,send reminder,2015-03-31 18:59:08+00:00,2015-03-31 18:49:51+00:00 +C510,place order,2015-03-31 20:20:33+00:00,2015-03-31 20:14:06+00:00 +C503,send invoice,2015-03-31 21:32:04+00:00,2015-03-31 21:27:32+00:00 +C452,pay,2015-03-31 22:23:42+00:00,2015-03-31 21:54:17+00:00 +C399,confirm payment,2015-03-31 22:21:48+00:00,2015-03-31 22:16:42+00:00 +C511,place order,2015-03-31 23:07:19+00:00,2015-03-31 23:04:26+00:00 +C401,prepare delivery,2015-04-01 09:06:56+00:00,2015-04-01 08:59:25+00:00 +C502,send invoice,2015-04-01 09:26:57+00:00,2015-04-01 09:21:35+00:00 +C347,prepare delivery,2015-04-01 12:57:05+00:00,2015-04-01 10:26:24+00:00 +C413,cancel order,2015-04-01 10:38:34+00:00,2015-04-01 10:29:30+00:00 +C497,send invoice,2015-04-01 10:44:13+00:00,2015-04-01 10:36:35+00:00 +C383,prepare delivery,2015-04-01 13:14:37+00:00,2015-04-01 10:39:01+00:00 +C348,confirm payment,2015-04-01 10:54:50+00:00,2015-04-01 10:46:45+00:00 +C505,send invoice,2015-04-01 11:00:38+00:00,2015-04-01 10:52:17+00:00 +C399,make delivery,2015-04-01 11:07:08+00:00,2015-04-01 10:54:40+00:00 +C456,send reminder,2015-04-01 12:08:33+00:00,2015-04-01 11:25:49+00:00 +C512,place order,2015-04-01 11:52:26+00:00,2015-04-01 11:48:19+00:00 +C451,send reminder,2015-04-01 12:11:29+00:00,2015-04-01 11:58:06+00:00 +C422,pay,2015-04-01 12:06:24+00:00,2015-04-01 12:03:21+00:00 +C402,prepare delivery,2015-04-01 12:12:42+00:00,2015-04-01 12:06:44+00:00 +C384,prepare delivery,2015-04-01 14:29:42+00:00,2015-04-01 12:07:56+00:00 +C411,make delivery,2015-04-01 12:31:31+00:00,2015-04-01 12:20:32+00:00 +C361,confirm payment,2015-04-01 12:51:39+00:00,2015-04-01 12:36:30+00:00 +C393,make delivery,2015-04-01 13:21:47+00:00,2015-04-01 13:07:42+00:00 +C478,send invoice,2015-04-01 13:17:27+00:00,2015-04-01 13:11:01+00:00 +C510,send invoice,2015-04-01 13:36:23+00:00,2015-04-01 13:27:07+00:00 +C403,prepare delivery,2015-04-01 14:41:57+00:00,2015-04-01 14:34:55+00:00 +C492,send invoice,2015-04-01 14:57:23+00:00,2015-04-01 14:49:36+00:00 +C504,send invoice,2015-04-01 15:12:57+00:00,2015-04-01 15:02:42+00:00 +C432,send reminder,2015-04-01 15:28:03+00:00,2015-04-01 15:13:23+00:00 +C404,make delivery,2015-04-01 15:41:53+00:00,2015-04-01 15:17:36+00:00 +C415,confirm payment,2015-04-01 15:23:06+00:00,2015-04-01 15:18:09+00:00 +C394,make delivery,2015-04-01 16:21:03+00:00,2015-04-01 15:21:46+00:00 +C398,confirm payment,2015-04-01 15:33:01+00:00,2015-04-01 15:25:25+00:00 +C394,confirm payment,2015-04-01 16:14:35+00:00,2015-04-01 16:08:02+00:00 +C506,send invoice,2015-04-01 20:24:24+00:00,2015-04-01 16:23:23+00:00 +C357,prepare delivery,2015-04-01 18:58:20+00:00,2015-04-01 16:25:13+00:00 +C415,make delivery,2015-04-01 16:47:07+00:00,2015-04-01 16:37:42+00:00 +C461,send reminder,2015-04-01 17:11:35+00:00,2015-04-01 16:50:15+00:00 +C385,prepare delivery,2015-04-01 16:56:05+00:00,2015-04-01 16:52:23+00:00 +C513,place order,2015-04-01 17:08:04+00:00,2015-04-01 16:57:02+00:00 +C494,send invoice,2015-04-01 17:28:42+00:00,2015-04-01 17:25:01+00:00 +C500,send invoice,2015-04-01 17:37:42+00:00,2015-04-01 17:28:52+00:00 +C401,make delivery,2015-04-01 18:05:19+00:00,2015-04-01 17:29:17+00:00 +C411,confirm payment,2015-04-01 18:06:51+00:00,2015-04-01 17:58:20+00:00 +C393,confirm payment,2015-04-01 18:20:28+00:00,2015-04-01 18:08:12+00:00 +C434,pay,2015-04-01 18:19:12+00:00,2015-04-01 18:11:11+00:00 +C498,send invoice,2015-04-01 21:05:28+00:00,2015-04-01 21:01:29+00:00 +C514,place order,2015-04-02 02:53:54+00:00,2015-04-02 02:51:22+00:00 +C439,pay,2015-04-02 03:09:41+00:00,2015-04-02 03:03:21+00:00 +C347,make delivery,2015-04-02 09:43:16+00:00,2015-04-02 09:15:39+00:00 +C378,prepare delivery,2015-04-02 09:26:59+00:00,2015-04-02 09:20:02+00:00 +C402,make delivery,2015-04-02 10:06:11+00:00,2015-04-02 09:55:00+00:00 +C383,make delivery,2015-04-02 10:46:04+00:00,2015-04-02 10:07:32+00:00 +C401,confirm payment,2015-04-02 10:30:57+00:00,2015-04-02 10:20:35+00:00 +C395,prepare delivery,2015-04-02 13:02:31+00:00,2015-04-02 10:28:41+00:00 +C487,send invoice,2015-04-02 11:13:26+00:00,2015-04-02 11:04:17+00:00 +C479,send invoice,2015-04-02 11:29:42+00:00,2015-04-02 11:23:22+00:00 +C446,send reminder,2015-04-02 11:54:04+00:00,2015-04-02 11:26:01+00:00 +C430,send reminder,2015-04-02 12:29:05+00:00,2015-04-02 12:15:50+00:00 +C435,prepare delivery,2015-04-02 12:44:15+00:00,2015-04-02 12:35:25+00:00 +C515,place order,2015-04-02 13:13:00+00:00,2015-04-02 13:10:54+00:00 +C403,confirm payment,2015-04-02 13:31:11+00:00,2015-04-02 13:16:26+00:00 +C412,prepare delivery,2015-04-02 13:27:11+00:00,2015-04-02 13:21:34+00:00 +C438,pay,2015-04-02 13:41:53+00:00,2015-04-02 13:26:42+00:00 +C436,prepare delivery,2015-04-02 13:48:57+00:00,2015-04-02 13:41:59+00:00 +C357,make delivery,2015-04-02 14:15:37+00:00,2015-04-02 14:05:00+00:00 +C404,confirm payment,2015-04-02 14:16:58+00:00,2015-04-02 14:11:21+00:00 +C499,send invoice,2015-04-02 14:27:46+00:00,2015-04-02 14:12:40+00:00 +C403,make delivery,2015-04-02 15:09:30+00:00,2015-04-02 14:19:49+00:00 +C469,send reminder,2015-04-02 14:41:16+00:00,2015-04-02 14:24:45+00:00 +C422,prepare delivery,2015-04-02 14:47:00+00:00,2015-04-02 14:24:59+00:00 +C384,make delivery,2015-04-02 15:19:37+00:00,2015-04-02 14:50:20+00:00 +C384,confirm payment,2015-04-02 14:58:17+00:00,2015-04-02 14:55:07+00:00 +C347,confirm payment,2015-04-02 15:39:39+00:00,2015-04-02 15:24:11+00:00 +C511,send invoice,2015-04-02 15:29:54+00:00,2015-04-02 15:25:27+00:00 +C385,confirm payment,2015-04-02 15:38:22+00:00,2015-04-02 15:30:38+00:00 +C439,prepare delivery,2015-04-02 16:15:17+00:00,2015-04-02 16:07:54+00:00 +C445,pay,2015-04-02 16:31:47+00:00,2015-04-02 16:12:44+00:00 +C378,make delivery,2015-04-02 17:45:57+00:00,2015-04-02 16:22:31+00:00 +C409,prepare delivery,2015-04-02 16:56:55+00:00,2015-04-02 16:49:53+00:00 +C509,send invoice,2015-04-02 17:04:19+00:00,2015-04-02 16:59:49+00:00 +C402,confirm payment,2015-04-02 17:34:53+00:00,2015-04-02 17:31:57+00:00 +C489,send invoice,2015-04-02 17:38:55+00:00,2015-04-02 17:34:47+00:00 +C516,place order,2015-04-02 17:55:30+00:00,2015-04-02 17:42:12+00:00 +C507,send invoice,2015-04-02 18:05:53+00:00,2015-04-02 17:57:29+00:00 +C416,prepare delivery,2015-04-02 21:11:07+00:00,2015-04-02 18:44:13+00:00 +C385,make delivery,2015-04-02 19:30:32+00:00,2015-04-02 19:20:40+00:00 +C419,prepare delivery,2015-04-02 20:46:15+00:00,2015-04-02 20:38:48+00:00 +C441,pay,2015-04-02 22:35:57+00:00,2015-04-02 22:30:12+00:00 +C405,prepare delivery,2015-04-03 08:22:27+00:00,2015-04-03 08:15:19+00:00 +C517,place order,2015-04-03 09:08:08+00:00,2015-04-03 08:59:24+00:00 +C363,prepare delivery,2015-04-03 11:35:23+00:00,2015-04-03 09:05:56+00:00 +C454,pay,2015-04-03 09:17:49+00:00,2015-04-03 09:12:54+00:00 +C425,prepare delivery,2015-04-03 09:43:02+00:00,2015-04-03 09:17:28+00:00 +C485,send invoice,2015-04-03 09:41:21+00:00,2015-04-03 09:24:12+00:00 +C383,confirm payment,2015-04-03 10:01:24+00:00,2015-04-03 09:51:12+00:00 +C428,prepare delivery,2015-04-03 10:08:21+00:00,2015-04-03 10:05:29+00:00 +C410,prepare delivery,2015-04-03 10:30:35+00:00,2015-04-03 10:23:05+00:00 +C388,prepare delivery,2015-04-03 10:31:37+00:00,2015-04-03 10:27:58+00:00 +C395,make delivery,2015-04-03 12:51:25+00:00,2015-04-03 11:28:37+00:00 +C412,make delivery,2015-04-03 11:56:20+00:00,2015-04-03 11:29:08+00:00 +C444,pay,2015-04-03 11:45:58+00:00,2015-04-03 11:38:54+00:00 +C426,prepare delivery,2015-04-03 12:22:12+00:00,2015-04-03 11:56:01+00:00 +C495,send invoice,2015-04-03 12:16:08+00:00,2015-04-03 12:06:29+00:00 +C435,make delivery,2015-04-03 12:46:07+00:00,2015-04-03 12:22:21+00:00 +C512,send invoice,2015-04-03 12:42:20+00:00,2015-04-03 12:24:57+00:00 +C436,make delivery,2015-04-03 12:53:38+00:00,2015-04-03 12:39:52+00:00 +C396,pay,2015-04-03 12:54:09+00:00,2015-04-03 12:51:53+00:00 +C508,send invoice,2015-04-03 12:59:39+00:00,2015-04-03 12:52:32+00:00 +C427,send reminder,2015-04-03 13:06:21+00:00,2015-04-03 12:54:13+00:00 +C437,send reminder,2015-04-03 13:04:42+00:00,2015-04-03 12:54:15+00:00 +C514,send invoice,2015-04-03 13:10:24+00:00,2015-04-03 13:06:14+00:00 +C422,make delivery,2015-04-03 13:42:26+00:00,2015-04-03 13:29:27+00:00 +C357,confirm payment,2015-04-03 13:47:23+00:00,2015-04-03 13:39:27+00:00 +C412,confirm payment,2015-04-03 13:52:58+00:00,2015-04-03 13:43:23+00:00 +C518,place order,2015-04-03 17:55:51+00:00,2015-04-03 14:19:31+00:00 +C482,send reminder,2015-04-03 14:40:04+00:00,2015-04-03 14:29:23+00:00 +C382,prepare delivery,2015-04-03 14:40:10+00:00,2015-04-03 14:37:17+00:00 +C379,prepare delivery,2015-04-03 17:07:13+00:00,2015-04-03 14:39:03+00:00 +C406,pay,2015-04-03 15:11:51+00:00,2015-04-03 15:05:30+00:00 +C408,prepare delivery,2015-04-03 15:15:31+00:00,2015-04-03 15:11:33+00:00 +C436,confirm payment,2015-04-03 15:45:39+00:00,2015-04-03 15:41:09+00:00 +C438,prepare delivery,2015-04-03 16:15:28+00:00,2015-04-03 15:49:25+00:00 +C472,send reminder,2015-04-03 16:47:44+00:00,2015-04-03 16:34:31+00:00 +C378,confirm payment,2015-04-03 16:46:41+00:00,2015-04-03 16:40:09+00:00 +C407,pay,2015-04-03 17:13:01+00:00,2015-04-03 17:05:56+00:00 +C409,make delivery,2015-04-03 17:22:57+00:00,2015-04-03 17:12:45+00:00 +C425,make delivery,2015-04-03 17:34:58+00:00,2015-04-03 17:25:42+00:00 +C416,make delivery,2015-04-03 17:54:42+00:00,2015-04-03 17:43:58+00:00 +C422,confirm payment,2015-04-03 17:54:34+00:00,2015-04-03 17:47:06+00:00 +C439,make delivery,2015-04-03 19:11:01+00:00,2015-04-03 18:16:44+00:00 +C427,cancel order,2015-04-03 18:45:42+00:00,2015-04-03 18:35:27+00:00 +C450,send reminder,2015-04-03 18:48:34+00:00,2015-04-03 18:38:43+00:00 +C397,prepare delivery,2015-04-03 18:52:56+00:00,2015-04-03 18:45:30+00:00 +C395,confirm payment,2015-04-03 19:04:58+00:00,2015-04-03 18:56:57+00:00 +C519,place order,2015-04-03 21:18:08+00:00,2015-04-03 18:59:26+00:00 +C476,send reminder,2015-04-03 19:39:08+00:00,2015-04-03 19:15:16+00:00 +C423,pay,2015-04-03 20:24:09+00:00,2015-04-03 20:21:46+00:00 +C520,place order,2015-04-05 21:39:42+00:00,2015-04-05 17:35:46+00:00 +C410,confirm payment,2015-04-06 08:53:16+00:00,2015-04-06 08:50:18+00:00 +C405,make delivery,2015-04-06 09:11:08+00:00,2015-04-06 08:54:19+00:00 +C465,send reminder,2015-04-06 09:44:17+00:00,2015-04-06 09:25:58+00:00 +C363,make delivery,2015-04-06 10:08:09+00:00,2015-04-06 09:38:46+00:00 +C435,confirm payment,2015-04-06 10:06:47+00:00,2015-04-06 09:56:27+00:00 +C420,send reminder,2015-04-06 10:08:33+00:00,2015-04-06 09:58:50+00:00 +C443,prepare delivery,2015-04-06 10:17:10+00:00,2015-04-06 10:10:53+00:00 +C454,prepare delivery,2015-04-06 10:31:44+00:00,2015-04-06 10:24:03+00:00 +C419,make delivery,2015-04-06 10:43:15+00:00,2015-04-06 10:30:02+00:00 +C416,confirm payment,2015-04-06 10:38:13+00:00,2015-04-06 10:30:17+00:00 +C428,make delivery,2015-04-06 11:12:42+00:00,2015-04-06 10:46:26+00:00 +C388,confirm payment,2015-04-06 11:10:25+00:00,2015-04-06 11:07:28+00:00 +C388,make delivery,2015-04-06 12:05:06+00:00,2015-04-06 11:42:09+00:00 +C515,send invoice,2015-04-06 11:52:53+00:00,2015-04-06 11:47:20+00:00 +C410,make delivery,2015-04-06 11:59:41+00:00,2015-04-06 11:48:53+00:00 +C501,send invoice,2015-04-06 12:05:44+00:00,2015-04-06 11:54:11+00:00 +C521,place order,2015-04-06 12:24:03+00:00,2015-04-06 12:17:09+00:00 +C448,pay,2015-04-06 12:53:29+00:00,2015-04-06 12:45:23+00:00 +C379,confirm payment,2015-04-06 13:02:55+00:00,2015-04-06 12:59:47+00:00 +C419,confirm payment,2015-04-06 13:34:54+00:00,2015-04-06 13:27:09+00:00 +C382,make delivery,2015-04-06 14:26:28+00:00,2015-04-06 14:13:14+00:00 +C408,confirm payment,2015-04-06 14:45:42+00:00,2015-04-06 14:38:16+00:00 +C408,make delivery,2015-04-06 15:07:27+00:00,2015-04-06 14:52:24+00:00 +C439,confirm payment,2015-04-06 15:14:50+00:00,2015-04-06 14:56:42+00:00 +C426,make delivery,2015-04-06 16:10:45+00:00,2015-04-06 15:17:47+00:00 +C434,prepare delivery,2015-04-06 15:35:11+00:00,2015-04-06 15:27:12+00:00 +C382,confirm payment,2015-04-06 15:53:29+00:00,2015-04-06 15:46:15+00:00 +C379,make delivery,2015-04-06 17:02:17+00:00,2015-04-06 15:46:25+00:00 +C363,confirm payment,2015-04-06 16:01:12+00:00,2015-04-06 15:55:31+00:00 +C409,confirm payment,2015-04-06 16:16:42+00:00,2015-04-06 15:59:43+00:00 +C451,pay,2015-04-06 16:07:28+00:00,2015-04-06 16:00:33+00:00 +C425,confirm payment,2015-04-06 16:07:05+00:00,2015-04-06 16:02:13+00:00 +C405,confirm payment,2015-04-06 16:19:53+00:00,2015-04-06 16:11:52+00:00 +C433,send reminder,2015-04-06 17:01:09+00:00,2015-04-06 16:21:51+00:00 +C522,place order,2015-04-06 19:14:38+00:00,2015-04-06 16:54:42+00:00 +C519,send invoice,2015-04-06 17:32:56+00:00,2015-04-06 16:58:45+00:00 +C430,pay,2015-04-06 17:15:10+00:00,2015-04-06 17:06:04+00:00 +C513,send invoice,2015-04-06 17:22:54+00:00,2015-04-06 17:09:58+00:00 +C418,prepare delivery,2015-04-06 17:55:58+00:00,2015-04-06 17:48:10+00:00 +C438,make delivery,2015-04-06 19:45:10+00:00,2015-04-06 18:05:14+00:00 +C443,confirm payment,2015-04-06 19:38:26+00:00,2015-04-06 19:01:47+00:00 +C520,send invoice,2015-04-06 19:19:27+00:00,2015-04-06 19:15:26+00:00 +C455,pay,2015-04-06 20:50:35+00:00,2015-04-06 20:44:02+00:00 +C397,confirm payment,2015-04-06 22:44:00+00:00,2015-04-06 22:33:32+00:00 +C523,place order,2015-04-07 02:28:28+00:00,2015-04-07 02:25:42+00:00 +C518,send invoice,2015-04-07 08:50:32+00:00,2015-04-07 08:44:15+00:00 +C443,make delivery,2015-04-07 10:16:35+00:00,2015-04-07 09:21:14+00:00 +C454,confirm payment,2015-04-07 09:38:03+00:00,2015-04-07 09:32:11+00:00 +C442,send reminder,2015-04-07 09:51:45+00:00,2015-04-07 09:33:21+00:00 +C397,make delivery,2015-04-07 10:40:29+00:00,2015-04-07 10:05:26+00:00 +C428,confirm payment,2015-04-07 10:21:28+00:00,2015-04-07 10:15:47+00:00 +C454,make delivery,2015-04-07 10:33:02+00:00,2015-04-07 10:16:47+00:00 +C483,send reminder,2015-04-07 10:38:03+00:00,2015-04-07 10:31:14+00:00 +C490,send reminder,2015-04-07 11:30:59+00:00,2015-04-07 11:08:24+00:00 +C445,prepare delivery,2015-04-07 11:12:52+00:00,2015-04-07 11:09:47+00:00 +C426,confirm payment,2015-04-07 11:38:26+00:00,2015-04-07 11:30:11+00:00 +C472,pay,2015-04-07 11:58:43+00:00,2015-04-07 11:53:11+00:00 +C452,prepare delivery,2015-04-07 14:40:41+00:00,2015-04-07 12:13:17+00:00 +C438,confirm payment,2015-04-07 12:43:03+00:00,2015-04-07 12:38:04+00:00 +C524,place order,2015-04-07 16:44:47+00:00,2015-04-07 12:42:40+00:00 +C522,send invoice,2015-04-07 13:01:41+00:00,2015-04-07 12:56:30+00:00 +C477,send reminder,2015-04-07 13:37:17+00:00,2015-04-07 13:14:39+00:00 +C434,make delivery,2015-04-07 13:51:32+00:00,2015-04-07 13:38:12+00:00 +C469,pay,2015-04-07 13:44:34+00:00,2015-04-07 13:39:11+00:00 +C491,send reminder,2015-04-07 14:22:31+00:00,2015-04-07 14:01:58+00:00 +C486,send reminder,2015-04-07 14:51:53+00:00,2015-04-07 14:19:22+00:00 +C474,send reminder,2015-04-07 14:43:49+00:00,2015-04-07 14:20:54+00:00 +C496,send reminder,2015-04-07 15:32:09+00:00,2015-04-07 15:15:09+00:00 +C475,send reminder,2015-04-07 15:43:10+00:00,2015-04-07 15:35:34+00:00 +C517,send invoice,2015-04-07 16:03:33+00:00,2015-04-07 15:59:34+00:00 +C488,send reminder,2015-04-07 16:28:33+00:00,2015-04-07 16:08:28+00:00 +C434,confirm payment,2015-04-07 16:38:38+00:00,2015-04-07 16:31:12+00:00 +C516,send invoice,2015-04-07 16:39:17+00:00,2015-04-07 16:36:41+00:00 +C460,send reminder,2015-04-07 16:57:36+00:00,2015-04-07 16:46:20+00:00 +C418,make delivery,2015-04-07 18:40:41+00:00,2015-04-07 17:12:39+00:00 +C525,place order,2015-04-07 17:51:03+00:00,2015-04-07 17:45:44+00:00 +C421,send reminder,2015-04-07 18:59:03+00:00,2015-04-07 18:21:01+00:00 +C423,prepare delivery,2015-04-07 19:04:17+00:00,2015-04-07 18:56:58+00:00 +C503,send reminder,2015-04-07 22:09:38+00:00,2015-04-07 22:01:16+00:00 +C526,place order,2015-04-08 11:25:45+00:00,2015-04-08 09:10:00+00:00 +C521,send invoice,2015-04-08 09:40:03+00:00,2015-04-08 09:32:00+00:00 +C429,send reminder,2015-04-08 10:15:55+00:00,2015-04-08 09:40:57+00:00 +C445,make delivery,2015-04-08 11:19:43+00:00,2015-04-08 09:49:46+00:00 +C456,send reminder,2015-04-08 10:26:37+00:00,2015-04-08 10:07:27+00:00 +C484,send reminder,2015-04-08 11:05:16+00:00,2015-04-08 10:43:11+00:00 +C420,cancel order,2015-04-08 11:37:02+00:00,2015-04-08 11:19:58+00:00 +C437,pay,2015-04-08 11:25:26+00:00,2015-04-08 11:20:01+00:00 +C523,send invoice,2015-04-08 11:39:31+00:00,2015-04-08 11:33:15+00:00 +C524,send invoice,2015-04-08 11:46:32+00:00,2015-04-08 11:37:37+00:00 +C502,send reminder,2015-04-08 11:57:57+00:00,2015-04-08 11:42:21+00:00 +C510,send reminder,2015-04-08 12:05:43+00:00,2015-04-08 11:43:20+00:00 +C452,make delivery,2015-04-08 13:30:55+00:00,2015-04-08 11:57:03+00:00 +C527,place order,2015-04-08 13:45:10+00:00,2015-04-08 13:40:24+00:00 +C433,pay,2015-04-08 17:28:27+00:00,2015-04-08 13:53:25+00:00 +C448,prepare delivery,2015-04-08 14:02:28+00:00,2015-04-08 13:58:55+00:00 +C492,send reminder,2015-04-08 14:19:03+00:00,2015-04-08 14:02:45+00:00 +C432,send reminder,2015-04-08 15:03:19+00:00,2015-04-08 14:40:10+00:00 +C452,confirm payment,2015-04-08 15:38:16+00:00,2015-04-08 15:27:42+00:00 +C423,make delivery,2015-04-08 17:02:23+00:00,2015-04-08 16:50:10+00:00 +C418,confirm payment,2015-04-08 17:47:33+00:00,2015-04-08 17:38:58+00:00 +C528,place order,2015-04-08 18:47:40+00:00,2015-04-08 18:41:13+00:00 +C472,prepare delivery,2015-04-08 19:24:42+00:00,2015-04-08 19:17:36+00:00 +C498,send reminder,2015-04-09 09:51:52+00:00,2015-04-09 09:10:38+00:00 +C445,confirm payment,2015-04-09 10:25:03+00:00,2015-04-09 10:08:10+00:00 +C529,place order,2015-04-09 10:30:34+00:00,2015-04-09 10:18:50+00:00 +C461,send reminder,2015-04-09 10:32:20+00:00,2015-04-09 10:18:50+00:00 +C479,send reminder,2015-04-09 10:40:25+00:00,2015-04-09 10:20:50+00:00 +C396,prepare delivery,2015-04-09 11:05:31+00:00,2015-04-09 10:37:38+00:00 +C421,pay,2015-04-09 11:38:28+00:00,2015-04-09 11:23:44+00:00 +C448,make delivery,2015-04-09 12:35:13+00:00,2015-04-09 12:06:37+00:00 +C446,send reminder,2015-04-09 13:05:31+00:00,2015-04-09 12:45:35+00:00 +C441,prepare delivery,2015-04-09 13:31:45+00:00,2015-04-09 13:28:44+00:00 +C502,pay,2015-04-09 16:05:56+00:00,2015-04-09 13:39:08+00:00 +C511,send reminder,2015-04-09 14:01:46+00:00,2015-04-09 13:41:03+00:00 +C423,confirm payment,2015-04-09 13:48:53+00:00,2015-04-09 13:41:05+00:00 +C510,pay,2015-04-09 14:21:26+00:00,2015-04-09 14:16:49+00:00 +C530,place order,2015-04-09 15:04:41+00:00,2015-04-09 14:58:04+00:00 +C456,cancel order,2015-04-09 15:03:18+00:00,2015-04-09 14:58:27+00:00 +C475,pay,2015-04-09 16:22:16+00:00,2015-04-09 16:10:33+00:00 +C444,prepare delivery,2015-04-09 16:49:59+00:00,2015-04-09 16:22:49+00:00 +C483,pay,2015-04-09 16:44:59+00:00,2015-04-09 16:38:41+00:00 +C442,pay,2015-04-09 17:13:38+00:00,2015-04-09 17:09:09+00:00 +C424,pay,2015-04-09 17:36:42+00:00,2015-04-09 17:20:25+00:00 +C407,prepare delivery,2015-04-09 20:31:08+00:00,2015-04-09 18:03:02+00:00 +C472,make delivery,2015-04-09 18:48:30+00:00,2015-04-09 18:38:06+00:00 +C432,cancel order,2015-04-09 18:58:14+00:00,2015-04-09 18:42:12+00:00 +C503,pay,2015-04-09 19:07:47+00:00,2015-04-09 19:00:25+00:00 +C531,place order,2015-04-09 20:39:18+00:00,2015-04-09 20:35:00+00:00 +C440,pay,2015-04-10 01:46:56+00:00,2015-04-10 01:40:01+00:00 +C492,pay,2015-04-10 08:10:18+00:00,2015-04-10 08:03:14+00:00 +C474,pay,2015-04-10 09:12:53+00:00,2015-04-10 09:04:07+00:00 +C448,confirm payment,2015-04-10 10:55:46+00:00,2015-04-10 10:33:37+00:00 +C429,pay,2015-04-10 10:52:44+00:00,2015-04-10 10:38:13+00:00 +C512,send reminder,2015-04-10 11:14:00+00:00,2015-04-10 10:50:34+00:00 +C451,prepare delivery,2015-04-10 13:42:37+00:00,2015-04-10 11:15:49+00:00 +C514,send reminder,2015-04-10 11:25:40+00:00,2015-04-10 11:16:39+00:00 +C532,place order,2015-04-10 13:57:14+00:00,2015-04-10 11:18:54+00:00 +C461,cancel order,2015-04-10 11:44:24+00:00,2015-04-10 11:27:20+00:00 +C485,send reminder,2015-04-10 11:43:33+00:00,2015-04-10 11:30:13+00:00 +C441,make delivery,2015-04-10 13:06:16+00:00,2015-04-10 12:09:42+00:00 +C396,make delivery,2015-04-10 13:39:04+00:00,2015-04-10 12:21:36+00:00 +C477,pay,2015-04-10 14:26:38+00:00,2015-04-10 14:22:42+00:00 +C495,send reminder,2015-04-10 14:38:13+00:00,2015-04-10 14:29:21+00:00 +C441,confirm payment,2015-04-10 14:40:06+00:00,2015-04-10 14:32:53+00:00 +C529,send invoice,2015-04-10 14:53:57+00:00,2015-04-10 14:50:54+00:00 +C407,make delivery,2015-04-10 15:50:43+00:00,2015-04-10 15:33:07+00:00 +C530,send invoice,2015-04-10 16:01:48+00:00,2015-04-10 15:54:27+00:00 +C533,place order,2015-04-10 16:03:36+00:00,2015-04-10 15:58:12+00:00 +C444,make delivery,2015-04-10 17:33:41+00:00,2015-04-10 16:03:20+00:00 +C476,send reminder,2015-04-10 17:05:11+00:00,2015-04-10 16:49:36+00:00 +C482,send reminder,2015-04-10 17:14:15+00:00,2015-04-10 17:01:24+00:00 +C484,pay,2015-04-10 17:10:51+00:00,2015-04-10 17:05:24+00:00 +C508,send reminder,2015-04-10 17:35:46+00:00,2015-04-10 17:05:33+00:00 +C450,send reminder,2015-04-10 17:47:56+00:00,2015-04-10 17:34:05+00:00 +C472,confirm payment,2015-04-10 17:52:41+00:00,2015-04-10 17:48:05+00:00 +C527,send invoice,2015-04-10 18:38:03+00:00,2015-04-10 18:31:12+00:00 +C525,send invoice,2015-04-10 21:33:26+00:00,2015-04-10 21:22:48+00:00 +C534,place order,2015-04-11 01:16:14+00:00,2015-04-10 22:35:24+00:00 +C444,confirm payment,2015-04-13 08:34:31+00:00,2015-04-13 08:28:05+00:00 +C535,place order,2015-04-13 14:35:58+00:00,2015-04-13 09:38:42+00:00 +C406,prepare delivery,2015-04-13 09:52:21+00:00,2015-04-13 09:44:39+00:00 +C515,send reminder,2015-04-13 10:24:58+00:00,2015-04-13 10:06:48+00:00 +C451,make delivery,2015-04-13 10:46:00+00:00,2015-04-13 10:30:59+00:00 +C396,confirm payment,2015-04-13 10:42:00+00:00,2015-04-13 10:36:49+00:00 +C501,send reminder,2015-04-13 11:11:56+00:00,2015-04-13 10:46:10+00:00 +C455,prepare delivery,2015-04-13 10:55:37+00:00,2015-04-13 10:47:49+00:00 +C465,send reminder,2015-04-13 11:47:56+00:00,2015-04-13 11:29:00+00:00 +C469,prepare delivery,2015-04-13 11:48:09+00:00,2015-04-13 11:44:20+00:00 +C430,prepare delivery,2015-04-13 12:33:16+00:00,2015-04-13 12:26:50+00:00 +C536,place order,2015-04-13 15:00:44+00:00,2015-04-13 14:37:48+00:00 +C433,prepare delivery,2015-04-13 15:02:16+00:00,2015-04-13 14:54:56+00:00 +C446,cancel order,2015-04-13 15:45:04+00:00,2015-04-13 15:40:12+00:00 +C451,confirm payment,2015-04-13 15:53:22+00:00,2015-04-13 15:45:31+00:00 +C479,pay,2015-04-13 17:53:04+00:00,2015-04-13 17:46:04+00:00 +C407,confirm payment,2015-04-13 18:15:16+00:00,2015-04-13 18:09:25+00:00 +C537,place order,2015-04-14 00:19:10+00:00,2015-04-13 19:36:00+00:00 +C526,send invoice,2015-04-14 09:46:48+00:00,2015-04-14 09:33:55+00:00 +C483,prepare delivery,2015-04-14 09:54:13+00:00,2015-04-14 09:46:27+00:00 +C406,make delivery,2015-04-14 11:38:47+00:00,2015-04-14 10:03:21+00:00 +C440,prepare delivery,2015-04-14 10:32:37+00:00,2015-04-14 10:06:57+00:00 +C498,pay,2015-04-14 10:46:14+00:00,2015-04-14 10:40:54+00:00 +C538,place order,2015-04-14 11:37:17+00:00,2015-04-14 10:50:24+00:00 +C455,make delivery,2015-04-14 12:34:01+00:00,2015-04-14 10:57:13+00:00 +C528,send invoice,2015-04-14 11:04:28+00:00,2015-04-14 11:00:15+00:00 +C469,make delivery,2015-04-14 12:35:47+00:00,2015-04-14 11:07:48+00:00 +C467,pay,2015-04-14 11:56:11+00:00,2015-04-14 11:31:05+00:00 +C518,send reminder,2015-04-14 11:45:15+00:00,2015-04-14 11:32:05+00:00 +C486,send reminder,2015-04-14 12:01:58+00:00,2015-04-14 11:41:00+00:00 +C430,make delivery,2015-04-14 12:39:10+00:00,2015-04-14 11:42:59+00:00 +C482,cancel order,2015-04-14 12:09:17+00:00,2015-04-14 11:52:57+00:00 +C490,send reminder,2015-04-14 12:09:33+00:00,2015-04-14 11:53:20+00:00 +C450,pay,2015-04-14 12:39:53+00:00,2015-04-14 12:09:28+00:00 +C495,pay,2015-04-14 12:41:32+00:00,2015-04-14 12:38:47+00:00 +C514,pay,2015-04-14 14:01:05+00:00,2015-04-14 13:46:09+00:00 +C475,prepare delivery,2015-04-14 14:29:47+00:00,2015-04-14 14:26:53+00:00 +C534,send invoice,2015-04-14 14:46:02+00:00,2015-04-14 14:41:11+00:00 +C430,confirm payment,2015-04-14 15:05:45+00:00,2015-04-14 14:57:39+00:00 +C442,prepare delivery,2015-04-14 15:51:21+00:00,2015-04-14 15:24:02+00:00 +C433,make delivery,2015-04-14 15:45:28+00:00,2015-04-14 15:30:54+00:00 +C539,place order,2015-04-14 18:27:26+00:00,2015-04-14 16:01:12+00:00 +C484,prepare delivery,2015-04-14 18:32:40+00:00,2015-04-14 16:10:59+00:00 +C491,send reminder,2015-04-14 16:29:29+00:00,2015-04-14 16:21:44+00:00 +C488,send reminder,2015-04-14 16:49:40+00:00,2015-04-14 16:29:12+00:00 +C533,send invoice,2015-04-14 16:36:44+00:00,2015-04-14 16:29:48+00:00 +C496,send reminder,2015-04-14 16:57:20+00:00,2015-04-14 16:34:40+00:00 +C517,send reminder,2015-04-14 17:02:59+00:00,2015-04-14 16:35:41+00:00 +C502,prepare delivery,2015-04-14 17:05:12+00:00,2015-04-14 16:57:55+00:00 +C492,prepare delivery,2015-04-14 17:09:06+00:00,2015-04-14 17:01:11+00:00 +C466,pay,2015-04-14 17:14:16+00:00,2015-04-14 17:06:36+00:00 +C455,confirm payment,2015-04-14 17:35:55+00:00,2015-04-14 17:31:21+00:00 +C433,confirm payment,2015-04-14 17:48:04+00:00,2015-04-14 17:40:23+00:00 +C460,send reminder,2015-04-14 18:18:55+00:00,2015-04-14 18:03:04+00:00 +C512,pay,2015-04-14 18:34:00+00:00,2015-04-14 18:29:21+00:00 +C540,place order,2015-04-14 21:58:27+00:00,2015-04-14 21:44:24+00:00 +C523,send reminder,2015-04-15 09:47:54+00:00,2015-04-15 09:35:13+00:00 +C406,confirm payment,2015-04-15 09:56:34+00:00,2015-04-15 09:50:55+00:00 +C440,make delivery,2015-04-15 10:53:35+00:00,2015-04-15 10:15:21+00:00 +C516,send reminder,2015-04-15 10:57:03+00:00,2015-04-15 10:28:04+00:00 +C503,prepare delivery,2015-04-15 10:42:59+00:00,2015-04-15 10:35:21+00:00 +C483,make delivery,2015-04-15 11:02:04+00:00,2015-04-15 10:46:40+00:00 +C486,cancel order,2015-04-15 11:24:06+00:00,2015-04-15 11:01:56+00:00 +C475,make delivery,2015-04-15 11:58:56+00:00,2015-04-15 11:28:21+00:00 +C469,confirm payment,2015-04-15 11:44:30+00:00,2015-04-15 11:35:48+00:00 +C475,confirm payment,2015-04-15 12:08:07+00:00,2015-04-15 12:00:38+00:00 +C541,place order,2015-04-15 12:10:01+00:00,2015-04-15 12:03:00+00:00 +C524,send reminder,2015-04-15 12:23:47+00:00,2015-04-15 12:07:40+00:00 +C483,confirm payment,2015-04-15 12:25:35+00:00,2015-04-15 12:20:07+00:00 +C465,pay,2015-04-15 12:27:55+00:00,2015-04-15 12:24:06+00:00 +C442,make delivery,2015-04-15 12:45:11+00:00,2015-04-15 12:34:49+00:00 +C474,prepare delivery,2015-04-15 13:43:41+00:00,2015-04-15 13:36:36+00:00 +C531,send invoice,2015-04-15 13:46:43+00:00,2015-04-15 13:41:41+00:00 +C510,prepare delivery,2015-04-15 17:26:49+00:00,2015-04-15 15:01:29+00:00 +C492,make delivery,2015-04-15 16:34:01+00:00,2015-04-15 15:36:26+00:00 +C488,pay,2015-04-15 16:14:31+00:00,2015-04-15 15:46:24+00:00 +C424,prepare delivery,2015-04-15 16:08:01+00:00,2015-04-15 16:00:15+00:00 +C484,make delivery,2015-04-15 16:37:30+00:00,2015-04-15 16:14:39+00:00 +C542,place order,2015-04-15 16:33:51+00:00,2015-04-15 16:26:24+00:00 +C502,make delivery,2015-04-15 17:15:21+00:00,2015-04-15 16:59:23+00:00 +C442,confirm payment,2015-04-15 17:08:46+00:00,2015-04-15 17:04:31+00:00 +C431,pay,2015-04-15 17:15:47+00:00,2015-04-15 17:11:21+00:00 +C421,prepare delivery,2015-04-15 17:19:41+00:00,2015-04-15 17:12:06+00:00 +C437,prepare delivery,2015-04-15 19:50:59+00:00,2015-04-15 17:14:01+00:00 +C458,pay,2015-04-15 18:03:18+00:00,2015-04-15 17:55:41+00:00 +C484,confirm payment,2015-04-15 18:22:11+00:00,2015-04-15 18:14:07+00:00 +C532,send invoice,2015-04-15 22:15:28+00:00,2015-04-15 22:09:51+00:00 +C543,place order,2015-04-15 23:07:33+00:00,2015-04-15 23:00:00+00:00 +C440,confirm payment,2015-04-16 08:55:48+00:00,2015-04-16 08:51:33+00:00 +C503,make delivery,2015-04-16 10:07:29+00:00,2015-04-16 09:41:08+00:00 +C501,pay,2015-04-16 09:53:24+00:00,2015-04-16 09:48:53+00:00 +C537,send invoice,2015-04-16 11:14:59+00:00,2015-04-16 11:08:43+00:00 +C502,confirm payment,2015-04-16 11:19:17+00:00,2015-04-16 11:11:41+00:00 +C510,make delivery,2015-04-16 12:52:14+00:00,2015-04-16 11:23:18+00:00 +C477,prepare delivery,2015-04-16 11:27:34+00:00,2015-04-16 11:23:43+00:00 +C510,confirm payment,2015-04-16 11:41:11+00:00,2015-04-16 11:31:26+00:00 +C511,send reminder,2015-04-16 11:55:59+00:00,2015-04-16 11:44:00+00:00 +C544,place order,2015-04-16 12:01:03+00:00,2015-04-16 11:56:24+00:00 +C474,make delivery,2015-04-16 13:41:55+00:00,2015-04-16 12:47:04+00:00 +C474,confirm payment,2015-04-16 13:01:48+00:00,2015-04-16 12:54:28+00:00 +C492,confirm payment,2015-04-16 14:09:09+00:00,2015-04-16 14:05:01+00:00 +C517,pay,2015-04-16 14:09:09+00:00,2015-04-16 14:05:03+00:00 +C462,pay,2015-04-16 14:12:21+00:00,2015-04-16 14:06:55+00:00 +C466,prepare delivery,2015-04-16 15:40:06+00:00,2015-04-16 15:36:26+00:00 +C437,make delivery,2015-04-16 17:06:39+00:00,2015-04-16 15:38:06+00:00 +C503,confirm payment,2015-04-16 16:52:53+00:00,2015-04-16 16:45:54+00:00 +C536,send invoice,2015-04-16 16:58:34+00:00,2015-04-16 16:52:07+00:00 +C424,make delivery,2015-04-16 17:22:44+00:00,2015-04-16 17:07:32+00:00 +C545,place order,2015-04-16 17:16:23+00:00,2015-04-16 17:13:12+00:00 +C421,make delivery,2015-04-16 18:34:01+00:00,2015-04-16 17:47:53+00:00 +C518,pay,2015-04-16 18:43:03+00:00,2015-04-16 18:35:47+00:00 +C514,prepare delivery,2015-04-16 21:48:41+00:00,2015-04-16 19:25:34+00:00 +C457,pay,2015-04-17 02:33:09+00:00,2015-04-17 02:25:05+00:00 +C546,place order,2015-04-17 05:01:29+00:00,2015-04-17 04:49:13+00:00 +C496,pay,2015-04-17 09:08:18+00:00,2015-04-17 08:45:12+00:00 +C477,make delivery,2015-04-17 09:55:59+00:00,2015-04-17 09:44:29+00:00 +C523,pay,2015-04-17 10:04:17+00:00,2015-04-17 09:59:22+00:00 +C476,pay,2015-04-17 10:09:44+00:00,2015-04-17 10:03:00+00:00 +C477,confirm payment,2015-04-17 11:08:29+00:00,2015-04-17 10:58:01+00:00 +C490,cancel order,2015-04-17 12:09:59+00:00,2015-04-17 11:53:04+00:00 +C485,send reminder,2015-04-17 12:19:13+00:00,2015-04-17 12:05:38+00:00 +C467,prepare delivery,2015-04-17 15:00:43+00:00,2015-04-17 12:24:54+00:00 +C421,confirm payment,2015-04-17 12:39:29+00:00,2015-04-17 12:31:00+00:00 +C547,place order,2015-04-17 14:05:03+00:00,2015-04-17 13:20:32+00:00 +C424,confirm payment,2015-04-17 13:44:15+00:00,2015-04-17 13:41:20+00:00 +C539,send invoice,2015-04-17 16:35:57+00:00,2015-04-17 13:46:04+00:00 +C543,send invoice,2015-04-17 14:27:15+00:00,2015-04-17 14:22:35+00:00 +C535,send invoice,2015-04-17 15:03:56+00:00,2015-04-17 15:00:07+00:00 +C437,confirm payment,2015-04-17 15:13:36+00:00,2015-04-17 15:08:49+00:00 +C527,send reminder,2015-04-17 15:56:29+00:00,2015-04-17 15:27:12+00:00 +C508,send reminder,2015-04-17 16:10:28+00:00,2015-04-17 15:32:29+00:00 +C501,prepare delivery,2015-04-17 15:55:17+00:00,2015-04-17 15:51:21+00:00 +C466,make delivery,2015-04-17 17:57:19+00:00,2015-04-17 16:18:08+00:00 +C491,pay,2015-04-17 16:28:54+00:00,2015-04-17 16:18:39+00:00 +C524,pay,2015-04-17 20:11:59+00:00,2015-04-17 16:26:35+00:00 +C525,send reminder,2015-04-17 16:45:43+00:00,2015-04-17 16:28:12+00:00 +C429,prepare delivery,2015-04-17 17:20:38+00:00,2015-04-17 16:53:16+00:00 +C465,prepare delivery,2015-04-17 17:41:31+00:00,2015-04-17 17:34:28+00:00 +C530,send reminder,2015-04-17 18:03:55+00:00,2015-04-17 17:40:21+00:00 +C548,place order,2015-04-17 18:09:43+00:00,2015-04-17 18:01:28+00:00 +C540,send invoice,2015-04-17 18:49:57+00:00,2015-04-17 18:41:56+00:00 +C514,make delivery,2015-04-17 21:50:27+00:00,2015-04-17 21:27:18+00:00 +C549,place order,2015-04-18 21:50:08+00:00,2015-04-18 21:42:49+00:00 +C516,pay,2015-04-20 10:42:52+00:00,2015-04-20 10:35:44+00:00 +C467,make delivery,2015-04-20 11:00:37+00:00,2015-04-20 10:45:10+00:00 +C550,place order,2015-04-20 11:30:40+00:00,2015-04-20 11:20:22+00:00 +C485,cancel order,2015-04-20 11:33:27+00:00,2015-04-20 11:24:30+00:00 +C515,send reminder,2015-04-20 11:47:53+00:00,2015-04-20 11:33:41+00:00 +C514,confirm payment,2015-04-20 12:00:22+00:00,2015-04-20 11:53:11+00:00 +C512,prepare delivery,2015-04-20 12:55:38+00:00,2015-04-20 12:48:03+00:00 +C466,confirm payment,2015-04-20 13:13:00+00:00,2015-04-20 13:04:47+00:00 +C467,confirm payment,2015-04-20 13:54:27+00:00,2015-04-20 13:51:09+00:00 +C495,prepare delivery,2015-04-20 15:03:48+00:00,2015-04-20 15:00:46+00:00 +C541,send invoice,2015-04-20 15:22:31+00:00,2015-04-20 15:14:21+00:00 +C548,send invoice,2015-04-20 15:23:40+00:00,2015-04-20 15:16:12+00:00 +C501,make delivery,2015-04-20 16:47:41+00:00,2015-04-20 15:32:04+00:00 +C457,prepare delivery,2015-04-20 16:00:54+00:00,2015-04-20 15:57:50+00:00 +C551,place order,2015-04-20 19:58:11+00:00,2015-04-20 16:01:08+00:00 +C460,pay,2015-04-20 16:35:52+00:00,2015-04-20 16:30:34+00:00 +C549,send invoice,2015-04-20 16:46:24+00:00,2015-04-20 16:44:19+00:00 +C429,make delivery,2015-04-20 17:06:31+00:00,2015-04-20 16:55:50+00:00 +C429,confirm payment,2015-04-20 17:04:04+00:00,2015-04-20 16:55:56+00:00 +C538,send invoice,2015-04-20 17:15:34+00:00,2015-04-20 17:13:02+00:00 +C465,confirm payment,2015-04-20 17:39:08+00:00,2015-04-20 17:34:18+00:00 +C458,prepare delivery,2015-04-20 17:57:45+00:00,2015-04-20 17:50:29+00:00 +C450,prepare delivery,2015-04-20 22:03:50+00:00,2015-04-20 19:35:42+00:00 +C552,place order,2015-04-20 21:54:41+00:00,2015-04-20 21:44:12+00:00 +C447,pay,2015-04-20 22:31:46+00:00,2015-04-20 22:17:23+00:00 +C528,send reminder,2015-04-21 09:29:00+00:00,2015-04-21 09:08:53+00:00 +C465,make delivery,2015-04-21 10:29:02+00:00,2015-04-21 09:54:56+00:00 +C526,send reminder,2015-04-21 10:49:47+00:00,2015-04-21 10:36:19+00:00 +C479,prepare delivery,2015-04-21 14:01:34+00:00,2015-04-21 11:24:38+00:00 +C517,prepare delivery,2015-04-21 14:31:59+00:00,2015-04-21 12:00:41+00:00 +C553,place order,2015-04-21 12:06:48+00:00,2015-04-21 12:02:42+00:00 +C498,prepare delivery,2015-04-21 12:31:01+00:00,2015-04-21 12:24:11+00:00 +C515,cancel order,2015-04-21 13:00:27+00:00,2015-04-21 12:54:45+00:00 +C511,pay,2015-04-21 13:15:21+00:00,2015-04-21 13:06:45+00:00 +C545,send invoice,2015-04-21 14:29:41+00:00,2015-04-21 14:20:07+00:00 +C501,confirm payment,2015-04-21 15:09:35+00:00,2015-04-21 15:01:26+00:00 +C495,confirm payment,2015-04-21 15:35:05+00:00,2015-04-21 15:29:56+00:00 +C458,make delivery,2015-04-21 16:29:32+00:00,2015-04-21 15:43:11+00:00 +C525,pay,2015-04-21 15:58:49+00:00,2015-04-21 15:54:41+00:00 +C431,prepare delivery,2015-04-21 16:01:23+00:00,2015-04-21 15:55:26+00:00 +C534,send reminder,2015-04-21 16:40:46+00:00,2015-04-21 15:59:15+00:00 +C512,make delivery,2015-04-21 17:00:37+00:00,2015-04-21 16:03:34+00:00 +C554,place order,2015-04-21 18:44:07+00:00,2015-04-21 16:25:48+00:00 +C450,make delivery,2015-04-21 17:46:03+00:00,2015-04-21 16:26:21+00:00 +C495,make delivery,2015-04-21 17:18:50+00:00,2015-04-21 16:51:23+00:00 +C512,confirm payment,2015-04-21 17:22:14+00:00,2015-04-21 17:03:58+00:00 +C480,pay,2015-04-21 17:15:12+00:00,2015-04-21 17:09:47+00:00 +C544,send invoice,2015-04-21 17:24:54+00:00,2015-04-21 17:17:42+00:00 +C523,prepare delivery,2015-04-21 17:35:31+00:00,2015-04-21 17:20:12+00:00 +C508,cancel order,2015-04-21 18:11:55+00:00,2015-04-21 18:01:42+00:00 +C457,make delivery,2015-04-21 19:11:25+00:00,2015-04-21 18:41:55+00:00 +C555,place order,2015-04-21 23:01:01+00:00,2015-04-21 22:58:12+00:00 +C533,send reminder,2015-04-22 08:43:27+00:00,2015-04-22 08:32:19+00:00 +C550,send invoice,2015-04-22 09:38:55+00:00,2015-04-22 09:34:02+00:00 +C517,make delivery,2015-04-22 10:15:48+00:00,2015-04-22 09:41:38+00:00 +C479,make delivery,2015-04-22 10:10:16+00:00,2015-04-22 09:43:54+00:00 +C450,confirm payment,2015-04-22 09:50:52+00:00,2015-04-22 09:44:40+00:00 +C462,prepare delivery,2015-04-22 12:56:41+00:00,2015-04-22 10:27:24+00:00 +C498,make delivery,2015-04-22 11:52:54+00:00,2015-04-22 11:36:46+00:00 +C470,pay,2015-04-22 11:52:15+00:00,2015-04-22 11:46:10+00:00 +C531,send reminder,2015-04-22 12:03:34+00:00,2015-04-22 11:46:29+00:00 +C458,confirm payment,2015-04-22 12:00:12+00:00,2015-04-22 11:54:17+00:00 +C553,send invoice,2015-04-22 12:51:51+00:00,2015-04-22 12:47:11+00:00 +C556,place order,2015-04-22 12:58:12+00:00,2015-04-22 12:53:42+00:00 +C518,prepare delivery,2015-04-22 13:25:17+00:00,2015-04-22 13:02:49+00:00 +C460,prepare delivery,2015-04-22 14:13:25+00:00,2015-04-22 14:05:27+00:00 +C551,send invoice,2015-04-22 14:13:57+00:00,2015-04-22 14:06:48+00:00 +C457,confirm payment,2015-04-22 15:11:25+00:00,2015-04-22 15:03:40+00:00 +C523,make delivery,2015-04-22 16:07:15+00:00,2015-04-22 15:55:48+00:00 +C431,make delivery,2015-04-22 16:29:09+00:00,2015-04-22 16:17:35+00:00 +C447,prepare delivery,2015-04-22 16:42:31+00:00,2015-04-22 16:35:58+00:00 +C491,prepare delivery,2015-04-22 16:59:30+00:00,2015-04-22 16:51:47+00:00 +C479,confirm payment,2015-04-22 17:41:10+00:00,2015-04-22 17:33:18+00:00 +C557,place order,2015-04-22 18:17:04+00:00,2015-04-22 18:07:48+00:00 +C526,pay,2015-04-22 19:22:24+00:00,2015-04-22 19:16:33+00:00 +C532,send reminder,2015-04-23 08:58:08+00:00,2015-04-23 08:36:46+00:00 +C523,confirm payment,2015-04-23 09:03:30+00:00,2015-04-23 08:52:20+00:00 +C558,place order,2015-04-23 09:18:51+00:00,2015-04-23 09:12:00+00:00 +C517,confirm payment,2015-04-23 09:24:37+00:00,2015-04-23 09:15:58+00:00 +C537,send reminder,2015-04-23 10:05:54+00:00,2015-04-23 09:42:47+00:00 +C462,confirm payment,2015-04-23 09:57:03+00:00,2015-04-23 09:51:46+00:00 +C524,prepare delivery,2015-04-23 10:13:02+00:00,2015-04-23 10:10:13+00:00 +C498,confirm payment,2015-04-23 10:38:06+00:00,2015-04-23 10:28:03+00:00 +C431,confirm payment,2015-04-23 10:50:09+00:00,2015-04-23 10:40:59+00:00 +C518,make delivery,2015-04-23 12:14:42+00:00,2015-04-23 10:47:24+00:00 +C462,make delivery,2015-04-23 11:41:19+00:00,2015-04-23 11:02:44+00:00 +C488,prepare delivery,2015-04-23 11:11:31+00:00,2015-04-23 11:04:16+00:00 +C518,confirm payment,2015-04-23 11:16:02+00:00,2015-04-23 11:12:02+00:00 +C542,send invoice,2015-04-23 11:37:33+00:00,2015-04-23 11:30:08+00:00 +C496,prepare delivery,2015-04-23 14:20:39+00:00,2015-04-23 11:41:23+00:00 +C552,send invoice,2015-04-23 12:07:28+00:00,2015-04-23 12:03:55+00:00 +C460,make delivery,2015-04-23 13:19:36+00:00,2015-04-23 13:10:02+00:00 +C554,send invoice,2015-04-23 13:40:34+00:00,2015-04-23 13:34:13+00:00 +C559,place order,2015-04-23 13:54:13+00:00,2015-04-23 13:44:24+00:00 +C476,prepare delivery,2015-04-23 14:27:33+00:00,2015-04-23 14:20:17+00:00 +C547,send invoice,2015-04-23 15:11:48+00:00,2015-04-23 15:06:47+00:00 +C460,confirm payment,2015-04-23 15:21:06+00:00,2015-04-23 15:18:02+00:00 +C491,make delivery,2015-04-23 16:58:06+00:00,2015-04-23 15:25:19+00:00 +C463,pay,2015-04-23 15:36:34+00:00,2015-04-23 15:33:19+00:00 +C447,confirm payment,2015-04-23 15:57:40+00:00,2015-04-23 15:48:56+00:00 +C533,pay,2015-04-23 15:56:43+00:00,2015-04-23 15:51:12+00:00 +C480,prepare delivery,2015-04-23 16:40:54+00:00,2015-04-23 16:36:55+00:00 +C468,pay,2015-04-23 17:10:12+00:00,2015-04-23 17:06:30+00:00 +C447,make delivery,2015-04-23 18:23:46+00:00,2015-04-23 17:44:35+00:00 +C488,make delivery,2015-04-23 19:33:21+00:00,2015-04-23 18:47:10+00:00 +C560,place order,2015-04-23 18:59:59+00:00,2015-04-23 18:49:12+00:00 +C449,pay,2015-04-23 21:28:45+00:00,2015-04-23 21:26:05+00:00 +C496,make delivery,2015-04-24 10:00:52+00:00,2015-04-24 09:51:39+00:00 +C561,place order,2015-04-24 10:39:58+00:00,2015-04-24 10:34:48+00:00 +C557,send invoice,2015-04-24 13:23:14+00:00,2015-04-24 10:55:10+00:00 +C524,make delivery,2015-04-24 11:29:53+00:00,2015-04-24 11:12:22+00:00 +C491,confirm payment,2015-04-24 11:46:03+00:00,2015-04-24 11:39:02+00:00 +C476,make delivery,2015-04-24 12:12:32+00:00,2015-04-24 12:00:19+00:00 +C526,prepare delivery,2015-04-24 15:53:35+00:00,2015-04-24 13:30:30+00:00 +C511,prepare delivery,2015-04-24 13:45:04+00:00,2015-04-24 13:38:12+00:00 +C543,send reminder,2015-04-24 14:23:28+00:00,2015-04-24 14:11:10+00:00 +C546,send invoice,2015-04-24 15:06:33+00:00,2015-04-24 14:59:12+00:00 +C516,prepare delivery,2015-04-24 15:12:44+00:00,2015-04-24 15:08:56+00:00 +C562,place order,2015-04-24 17:32:29+00:00,2015-04-24 15:30:00+00:00 +C476,confirm payment,2015-04-24 15:59:49+00:00,2015-04-24 15:53:27+00:00 +C540,send reminder,2015-04-24 16:11:22+00:00,2015-04-24 15:58:21+00:00 +C530,send reminder,2015-04-24 16:30:13+00:00,2015-04-24 16:11:26+00:00 +C480,make delivery,2015-04-24 16:57:58+00:00,2015-04-24 16:42:34+00:00 +C525,prepare delivery,2015-04-24 18:14:48+00:00,2015-04-24 18:07:06+00:00 +C473,pay,2015-04-24 18:23:19+00:00,2015-04-24 18:17:47+00:00 +C488,confirm payment,2015-04-24 19:06:01+00:00,2015-04-24 18:58:53+00:00 +C527,send reminder,2015-04-24 19:32:14+00:00,2015-04-24 19:04:20+00:00 +C563,place order,2015-04-24 21:17:40+00:00,2015-04-24 21:10:48+00:00 +C497,pay,2015-04-27 02:13:20+00:00,2015-04-27 02:11:11+00:00 +C564,place order,2015-04-27 10:18:00+00:00,2015-04-27 06:40:49+00:00 +C496,confirm payment,2015-04-27 09:03:39+00:00,2015-04-27 08:59:02+00:00 +C524,confirm payment,2015-04-27 10:31:54+00:00,2015-04-27 10:25:15+00:00 +C470,prepare delivery,2015-04-27 15:31:07+00:00,2015-04-27 12:55:28+00:00 +C526,make delivery,2015-04-27 13:22:41+00:00,2015-04-27 13:04:54+00:00 +C565,place order,2015-04-27 17:44:31+00:00,2015-04-27 13:23:18+00:00 +C511,make delivery,2015-04-27 15:15:11+00:00,2015-04-27 13:45:07+00:00 +C561,send invoice,2015-04-27 15:11:52+00:00,2015-04-27 15:07:48+00:00 +C516,make delivery,2015-04-27 16:14:51+00:00,2015-04-27 16:02:35+00:00 +C549,send reminder,2015-04-27 18:09:10+00:00,2015-04-27 17:59:24+00:00 +C566,place order,2015-04-27 18:17:41+00:00,2015-04-27 18:07:00+00:00 +C480,confirm payment,2015-04-27 18:58:21+00:00,2015-04-27 18:52:29+00:00 +C559,send invoice,2015-04-27 19:51:50+00:00,2015-04-27 19:48:34+00:00 +C548,send reminder,2015-04-27 21:10:41+00:00,2015-04-27 20:45:09+00:00 +C525,confirm payment,2015-04-27 21:53:11+00:00,2015-04-27 21:45:57+00:00 +C525,make delivery,2015-04-28 09:54:20+00:00,2015-04-28 08:19:18+00:00 +C511,confirm payment,2015-04-28 08:57:39+00:00,2015-04-28 08:51:55+00:00 +C516,confirm payment,2015-04-28 09:07:22+00:00,2015-04-28 09:00:13+00:00 +C528,send reminder,2015-04-28 09:21:21+00:00,2015-04-28 09:10:00+00:00 +C567,place order,2015-04-28 09:16:18+00:00,2015-04-28 09:10:24+00:00 +C449,prepare delivery,2015-04-28 10:43:10+00:00,2015-04-28 10:36:07+00:00 +C526,confirm payment,2015-04-28 11:04:57+00:00,2015-04-28 10:56:54+00:00 +C556,send invoice,2015-04-28 11:59:13+00:00,2015-04-28 11:52:06+00:00 +C568,place order,2015-04-28 13:44:24+00:00,2015-04-28 13:41:12+00:00 +C470,make delivery,2015-04-28 14:27:55+00:00,2015-04-28 14:04:19+00:00 +C459,pay,2015-04-28 14:24:55+00:00,2015-04-28 14:19:09+00:00 +C555,send invoice,2015-04-28 14:42:07+00:00,2015-04-28 14:34:21+00:00 +C527,pay,2015-04-28 15:09:06+00:00,2015-04-28 15:03:45+00:00 +C543,pay,2015-04-28 15:26:04+00:00,2015-04-28 15:20:55+00:00 +C534,send reminder,2015-04-28 15:57:33+00:00,2015-04-28 15:36:59+00:00 +C528,cancel order,2015-04-28 18:09:36+00:00,2015-04-28 17:52:38+00:00 +C569,place order,2015-04-28 18:54:20+00:00,2015-04-28 18:42:48+00:00 +C533,prepare delivery,2015-04-29 10:21:54+00:00,2015-04-29 10:14:25+00:00 +C570,place order,2015-04-29 13:03:11+00:00,2015-04-29 10:22:00+00:00 +C558,send invoice,2015-04-29 11:36:02+00:00,2015-04-29 11:29:58+00:00 +C449,make delivery,2015-04-29 11:54:16+00:00,2015-04-29 11:30:25+00:00 +C540,pay,2015-04-29 11:40:13+00:00,2015-04-29 11:34:17+00:00 +C470,confirm payment,2015-04-29 12:02:30+00:00,2015-04-29 11:47:34+00:00 +C562,send invoice,2015-04-29 12:09:58+00:00,2015-04-29 12:04:31+00:00 +C567,send invoice,2015-04-29 12:34:27+00:00,2015-04-29 12:29:48+00:00 +C449,confirm payment,2015-04-29 12:39:00+00:00,2015-04-29 12:31:49+00:00 +C550,send reminder,2015-04-29 13:25:00+00:00,2015-04-29 13:05:31+00:00 +C531,send reminder,2015-04-29 13:40:13+00:00,2015-04-29 13:17:38+00:00 +C560,send invoice,2015-04-29 13:38:40+00:00,2015-04-29 13:29:21+00:00 +C530,pay,2015-04-29 15:04:41+00:00,2015-04-29 14:59:14+00:00 +C571,place order,2015-04-29 15:08:35+00:00,2015-04-29 15:04:24+00:00 +C564,send invoice,2015-04-29 16:05:25+00:00,2015-04-29 16:01:05+00:00 +C532,send reminder,2015-04-29 17:11:04+00:00,2015-04-29 16:32:56+00:00 +C533,confirm payment,2015-04-29 17:47:20+00:00,2015-04-29 17:34:30+00:00 +C572,place order,2015-04-29 20:00:27+00:00,2015-04-29 19:54:00+00:00 +C563,send invoice,2015-04-30 00:25:20+00:00,2015-04-29 20:29:20+00:00 +C533,make delivery,2015-04-30 10:12:04+00:00,2015-04-30 09:46:43+00:00 +C568,send invoice,2015-04-30 14:00:11+00:00,2015-04-30 09:59:20+00:00 +C566,send invoice,2015-04-30 11:02:34+00:00,2015-04-30 10:56:02+00:00 +C497,prepare delivery,2015-04-30 11:22:54+00:00,2015-04-30 11:15:12+00:00 +C573,place order,2015-04-30 11:24:05+00:00,2015-04-30 11:17:24+00:00 +C463,prepare delivery,2015-04-30 11:42:40+00:00,2015-04-30 11:35:38+00:00 +C552,send reminder,2015-04-30 12:29:41+00:00,2015-04-30 12:17:22+00:00 +C537,send reminder,2015-04-30 12:47:56+00:00,2015-04-30 12:39:34+00:00 +C534,cancel order,2015-04-30 15:36:26+00:00,2015-04-30 15:24:23+00:00 +C530,prepare delivery,2015-04-30 15:33:33+00:00,2015-04-30 15:29:59+00:00 +C473,prepare delivery,2015-04-30 15:56:41+00:00,2015-04-30 15:49:06+00:00 +C574,place order,2015-04-30 16:02:13+00:00,2015-04-30 15:55:12+00:00 +C554,send reminder,2015-04-30 16:57:43+00:00,2015-04-30 16:46:46+00:00 +C548,pay,2015-04-30 16:56:33+00:00,2015-04-30 16:50:15+00:00 +C540,prepare delivery,2015-04-30 17:32:24+00:00,2015-04-30 17:28:25+00:00 +C537,cancel order,2015-04-30 18:50:18+00:00,2015-04-30 18:37:11+00:00 +C575,place order,2015-04-30 22:30:41+00:00,2015-04-30 22:26:24+00:00 +C478,pay,2015-05-01 08:32:30+00:00,2015-05-01 08:27:26+00:00 +C453,pay,2015-05-01 08:49:12+00:00,2015-05-01 08:42:28+00:00 +C505,pay,2015-05-01 09:09:55+00:00,2015-05-01 09:03:19+00:00 +C576,place order,2015-05-01 12:19:34+00:00,2015-05-01 09:12:58+00:00 +C571,send invoice,2015-05-01 09:37:09+00:00,2015-05-01 09:32:57+00:00 +C497,make delivery,2015-05-01 11:41:34+00:00,2015-05-01 10:19:29+00:00 +C531,cancel order,2015-05-01 10:32:42+00:00,2015-05-01 10:22:09+00:00 +C463,confirm payment,2015-05-01 10:49:04+00:00,2015-05-01 10:41:51+00:00 +C577,place order,2015-05-01 10:46:39+00:00,2015-05-01 10:44:03+00:00 +C569,send invoice,2015-05-01 11:20:30+00:00,2015-05-01 11:15:54+00:00 +C463,make delivery,2015-05-01 13:38:40+00:00,2015-05-01 12:01:54+00:00 +C543,prepare delivery,2015-05-01 12:31:52+00:00,2015-05-01 12:25:59+00:00 +C578,place order,2015-05-01 14:59:22+00:00,2015-05-01 12:46:13+00:00 +C530,make delivery,2015-05-01 14:28:35+00:00,2015-05-01 14:12:55+00:00 +C532,cancel order,2015-05-01 14:45:15+00:00,2015-05-01 14:34:50+00:00 +C579,place order,2015-05-01 15:24:18+00:00,2015-05-01 14:50:33+00:00 +C565,send invoice,2015-05-01 15:51:47+00:00,2015-05-01 15:48:27+00:00 +C540,make delivery,2015-05-01 16:39:48+00:00,2015-05-01 16:27:32+00:00 +C530,confirm payment,2015-05-01 17:00:50+00:00,2015-05-01 16:54:20+00:00 +C580,place order,2015-05-01 17:05:47+00:00,2015-05-01 16:59:14+00:00 +C473,make delivery,2015-05-01 17:23:42+00:00,2015-05-01 17:07:44+00:00 +C468,prepare delivery,2015-05-01 17:22:43+00:00,2015-05-01 17:19:43+00:00 +C581,place order,2015-05-01 23:45:36+00:00,2015-05-01 19:16:35+00:00 +C572,send invoice,2015-05-01 20:26:04+00:00,2015-05-01 20:19:52+00:00 +C582,place order,2015-05-01 22:14:39+00:00,2015-05-01 22:09:24+00:00 +C583,place order,2015-05-02 15:43:44+00:00,2015-05-02 15:39:36+00:00 +C584,place order,2015-05-03 16:09:34+00:00,2015-05-03 15:56:24+00:00 +C493,pay,2015-05-04 02:39:49+00:00,2015-05-04 02:34:38+00:00 +C585,place order,2015-05-04 11:40:10+00:00,2015-05-04 08:48:01+00:00 +C527,prepare delivery,2015-05-04 09:20:19+00:00,2015-05-04 09:17:26+00:00 +C473,confirm payment,2015-05-04 10:17:54+00:00,2015-05-04 10:13:23+00:00 +C464,pay,2015-05-04 10:25:32+00:00,2015-05-04 10:20:37+00:00 +C581,send invoice,2015-05-04 10:29:23+00:00,2015-05-04 10:21:43+00:00 +C586,place order,2015-05-04 11:15:08+00:00,2015-05-04 11:00:08+00:00 +C497,confirm payment,2015-05-04 11:45:52+00:00,2015-05-04 11:38:29+00:00 +C587,place order,2015-05-04 12:37:03+00:00,2015-05-04 12:18:23+00:00 +C540,confirm payment,2015-05-04 13:32:12+00:00,2015-05-04 13:25:04+00:00 +C588,place order,2015-05-04 14:44:16+00:00,2015-05-04 13:54:54+00:00 +C500,pay,2015-05-04 15:17:29+00:00,2015-05-04 15:13:30+00:00 +C543,make delivery,2015-05-04 15:48:06+00:00,2015-05-04 15:16:42+00:00 +C586,send invoice,2015-05-04 15:30:27+00:00,2015-05-04 15:23:50+00:00 +C468,confirm payment,2015-05-04 15:51:31+00:00,2015-05-04 15:44:49+00:00 +C559,send reminder,2015-05-04 16:47:26+00:00,2015-05-04 16:03:45+00:00 +C589,place order,2015-05-04 16:13:14+00:00,2015-05-04 16:07:55+00:00 +C554,pay,2015-05-04 16:29:11+00:00,2015-05-04 16:24:10+00:00 +C459,prepare delivery,2015-05-04 17:07:16+00:00,2015-05-04 17:03:30+00:00 +C521,pay,2015-05-04 17:14:46+00:00,2015-05-04 17:07:50+00:00 +C583,send invoice,2015-05-04 17:25:19+00:00,2015-05-04 17:21:11+00:00 +C590,place order,2015-05-04 17:40:53+00:00,2015-05-04 17:33:57+00:00 +C543,confirm payment,2015-05-04 17:42:05+00:00,2015-05-04 17:36:08+00:00 +C570,send invoice,2015-05-04 18:47:48+00:00,2015-05-04 18:41:15+00:00 +C591,place order,2015-05-04 19:30:30+00:00,2015-05-04 19:26:01+00:00 +C506,pay,2015-05-04 21:27:38+00:00,2015-05-04 21:24:10+00:00 +C592,place order,2015-05-04 22:30:27+00:00,2015-05-04 22:28:17+00:00 +C593,place order,2015-05-05 10:33:54+00:00,2015-05-05 08:44:48+00:00 +C507,pay,2015-05-05 09:26:31+00:00,2015-05-05 09:21:37+00:00 +C468,make delivery,2015-05-05 10:00:49+00:00,2015-05-05 09:46:15+00:00 +C527,make delivery,2015-05-05 10:03:36+00:00,2015-05-05 09:53:15+00:00 +C594,place order,2015-05-05 11:06:58+00:00,2015-05-05 10:55:19+00:00 +C471,pay,2015-05-05 11:06:52+00:00,2015-05-05 11:03:22+00:00 +C549,send reminder,2015-05-05 11:50:23+00:00,2015-05-05 11:37:18+00:00 +C464,prepare delivery,2015-05-05 12:23:59+00:00,2015-05-05 12:16:15+00:00 +C513,pay,2015-05-05 12:52:40+00:00,2015-05-05 12:47:41+00:00 +C481,pay,2015-05-05 13:05:21+00:00,2015-05-05 12:58:33+00:00 +C577,send invoice,2015-05-05 13:38:41+00:00,2015-05-05 13:05:30+00:00 +C595,place order,2015-05-05 13:12:04+00:00,2015-05-05 13:08:46+00:00 +C596,place order,2015-05-05 14:45:31+00:00,2015-05-05 14:35:39+00:00 +C527,confirm payment,2015-05-05 14:46:49+00:00,2015-05-05 14:41:19+00:00 +C556,send reminder,2015-05-05 14:58:13+00:00,2015-05-05 14:42:33+00:00 +C493,prepare delivery,2015-05-05 15:02:59+00:00,2015-05-05 14:55:05+00:00 +C574,send invoice,2015-05-05 15:26:46+00:00,2015-05-05 15:21:43+00:00 +C453,prepare delivery,2015-05-05 15:26:19+00:00,2015-05-05 15:22:32+00:00 +C459,confirm payment,2015-05-05 19:18:11+00:00,2015-05-05 16:28:40+00:00 +C597,place order,2015-05-05 16:46:05+00:00,2015-05-05 16:29:25+00:00 +C587,send invoice,2015-05-05 16:35:33+00:00,2015-05-05 16:33:10+00:00 +C598,place order,2015-05-05 18:22:16+00:00,2015-05-05 18:16:57+00:00 +C549,cancel order,2015-05-05 19:02:55+00:00,2015-05-05 18:54:52+00:00 +C522,pay,2015-05-05 19:57:42+00:00,2015-05-05 19:51:47+00:00 +C509,pay,2015-05-05 20:03:44+00:00,2015-05-05 20:00:40+00:00 +C599,place order,2015-05-05 20:30:49+00:00,2015-05-05 20:27:06+00:00 +C489,pay,2015-05-05 21:09:34+00:00,2015-05-05 21:05:20+00:00 +C459,make delivery,2015-05-05 21:48:39+00:00,2015-05-05 21:12:19+00:00 +C600,place order,2015-05-05 23:50:24+00:00,2015-05-05 23:43:48+00:00 +C579,send invoice,2015-05-06 09:38:56+00:00,2015-05-06 09:31:13+00:00 +C601,place order,2015-05-06 12:55:49+00:00,2015-05-06 09:40:48+00:00 +C464,make delivery,2015-05-06 11:28:02+00:00,2015-05-06 11:15:52+00:00 +C494,pay,2015-05-06 11:29:00+00:00,2015-05-06 11:19:05+00:00 +C602,place order,2015-05-06 11:42:31+00:00,2015-05-06 11:39:43+00:00 +C453,make delivery,2015-05-06 14:23:50+00:00,2015-05-06 13:34:53+00:00 +C603,place order,2015-05-06 13:42:57+00:00,2015-05-06 13:37:33+00:00 +C585,send invoice,2015-05-06 17:04:27+00:00,2015-05-06 13:43:36+00:00 +C602,send invoice,2015-05-06 14:24:26+00:00,2015-05-06 14:17:32+00:00 +C550,send reminder,2015-05-06 14:40:32+00:00,2015-05-06 14:22:02+00:00 +C562,send reminder,2015-05-06 15:06:19+00:00,2015-05-06 14:25:20+00:00 +C548,prepare delivery,2015-05-06 15:07:39+00:00,2015-05-06 15:04:41+00:00 +C558,send reminder,2015-05-06 15:29:56+00:00,2015-05-06 15:15:15+00:00 +C604,place order,2015-05-06 15:39:31+00:00,2015-05-06 15:33:13+00:00 +C556,pay,2015-05-06 15:53:31+00:00,2015-05-06 15:48:15+00:00 +C493,make delivery,2015-05-06 16:35:59+00:00,2015-05-06 16:11:38+00:00 +C453,confirm payment,2015-05-06 16:56:07+00:00,2015-05-06 16:50:43+00:00 +C605,place order,2015-05-06 17:39:03+00:00,2015-05-06 17:24:34+00:00 +C563,send reminder,2015-05-06 17:59:48+00:00,2015-05-06 17:28:20+00:00 +C471,prepare delivery,2015-05-06 18:27:16+00:00,2015-05-06 18:20:07+00:00 +C500,prepare delivery,2015-05-06 19:06:14+00:00,2015-05-06 19:02:32+00:00 +C606,place order,2015-05-06 19:20:58+00:00,2015-05-06 19:07:15+00:00 +C573,send invoice,2015-05-06 20:27:30+00:00,2015-05-06 20:12:46+00:00 +C506,prepare delivery,2015-05-06 21:26:11+00:00,2015-05-06 21:19:07+00:00 +C607,place order,2015-05-06 21:52:54+00:00,2015-05-06 21:50:44+00:00 +C608,place order,2015-05-07 07:09:46+00:00,2015-05-07 07:05:36+00:00 +C568,send reminder,2015-05-07 10:04:11+00:00,2015-05-07 09:19:52+00:00 +C609,place order,2015-05-07 09:55:36+00:00,2015-05-07 09:48:17+00:00 +C509,prepare delivery,2015-05-07 09:57:06+00:00,2015-05-07 09:50:07+00:00 +C464,confirm payment,2015-05-07 09:58:15+00:00,2015-05-07 09:53:50+00:00 +C566,send reminder,2015-05-07 10:15:23+00:00,2015-05-07 10:01:59+00:00 +C552,send reminder,2015-05-07 10:34:30+00:00,2015-05-07 10:05:31+00:00 +C513,prepare delivery,2015-05-07 10:51:42+00:00,2015-05-07 10:44:18+00:00 +C493,confirm payment,2015-05-07 10:48:59+00:00,2015-05-07 10:45:33+00:00 +C551,pay,2015-05-07 10:58:10+00:00,2015-05-07 10:52:17+00:00 +C522,prepare delivery,2015-05-07 11:04:40+00:00,2015-05-07 11:00:49+00:00 +C489,prepare delivery,2015-05-07 13:44:04+00:00,2015-05-07 11:06:39+00:00 +C507,prepare delivery,2015-05-07 11:50:58+00:00,2015-05-07 11:47:23+00:00 +C610,place order,2015-05-07 12:06:07+00:00,2015-05-07 11:54:41+00:00 +C520,pay,2015-05-07 12:20:35+00:00,2015-05-07 12:03:15+00:00 +C594,send invoice,2015-05-07 12:54:49+00:00,2015-05-07 12:48:08+00:00 +C478,prepare delivery,2015-05-07 15:13:34+00:00,2015-05-07 12:50:51+00:00 +C499,pay,2015-05-07 13:32:10+00:00,2015-05-07 13:29:52+00:00 +C575,send invoice,2015-05-07 13:43:38+00:00,2015-05-07 13:37:38+00:00 +C576,send invoice,2015-05-07 13:58:09+00:00,2015-05-07 13:51:26+00:00 +C611,place order,2015-05-07 14:14:55+00:00,2015-05-07 14:07:30+00:00 +C548,make delivery,2015-05-07 15:44:14+00:00,2015-05-07 14:20:55+00:00 +C541,pay,2015-05-07 14:32:10+00:00,2015-05-07 14:26:48+00:00 +C578,send invoice,2015-05-07 14:50:15+00:00,2015-05-07 14:41:00+00:00 +C598,send invoice,2015-05-07 15:22:24+00:00,2015-05-07 15:16:53+00:00 +C612,place order,2015-05-07 17:42:12+00:00,2015-05-07 15:33:07+00:00 +C487,pay,2015-05-07 16:07:17+00:00,2015-05-07 16:01:03+00:00 +C506,make delivery,2015-05-07 16:47:23+00:00,2015-05-07 16:14:34+00:00 +C504,pay,2015-05-07 16:28:00+00:00,2015-05-07 16:22:49+00:00 +C505,prepare delivery,2015-05-07 16:42:19+00:00,2015-05-07 16:39:10+00:00 +C590,send invoice,2015-05-07 16:57:02+00:00,2015-05-07 16:51:08+00:00 +C471,make delivery,2015-05-07 17:38:06+00:00,2015-05-07 17:02:21+00:00 +C613,place order,2015-05-07 17:30:04+00:00,2015-05-07 17:24:21+00:00 +C614,place order,2015-05-07 19:11:25+00:00,2015-05-07 19:06:49+00:00 +C500,make delivery,2015-05-07 21:00:55+00:00,2015-05-07 20:45:16+00:00 +C615,place order,2015-05-07 21:54:09+00:00,2015-05-07 21:49:53+00:00 +C509,make delivery,2015-05-07 22:22:49+00:00,2015-05-07 21:59:11+00:00 +C596,send invoice,2015-05-07 22:20:27+00:00,2015-05-07 22:13:44+00:00 +C616,place order,2015-05-08 07:05:08+00:00,2015-05-08 07:00:30+00:00 +C595,send invoice,2015-05-08 09:36:53+00:00,2015-05-08 09:00:56+00:00 +C529,pay,2015-05-08 09:31:42+00:00,2015-05-08 09:26:53+00:00 +C617,place order,2015-05-08 09:50:11+00:00,2015-05-08 09:42:40+00:00 +C548,confirm payment,2015-05-08 10:02:09+00:00,2015-05-08 09:51:16+00:00 +C558,pay,2015-05-08 10:05:55+00:00,2015-05-08 09:59:13+00:00 +C522,make delivery,2015-05-08 10:35:23+00:00,2015-05-08 10:20:29+00:00 +C500,confirm payment,2015-05-08 10:53:04+00:00,2015-05-08 10:38:02+00:00 +C513,make delivery,2015-05-08 12:04:06+00:00,2015-05-08 10:42:53+00:00 +C550,pay,2015-05-08 10:56:38+00:00,2015-05-08 10:48:01+00:00 +C607,send invoice,2015-05-08 11:10:44+00:00,2015-05-08 11:02:49+00:00 +C489,make delivery,2015-05-08 11:41:04+00:00,2015-05-08 11:14:30+00:00 +C507,make delivery,2015-05-08 11:52:20+00:00,2015-05-08 11:37:18+00:00 +C618,place order,2015-05-08 11:47:03+00:00,2015-05-08 11:43:27+00:00 +C584,send invoice,2015-05-08 11:55:21+00:00,2015-05-08 11:47:55+00:00 +C536,pay,2015-05-08 12:37:08+00:00,2015-05-08 12:33:11+00:00 +C513,confirm payment,2015-05-08 12:36:08+00:00,2015-05-08 12:33:37+00:00 +C619,place order,2015-05-08 13:50:11+00:00,2015-05-08 13:45:01+00:00 +C569,send reminder,2015-05-08 14:43:15+00:00,2015-05-08 14:20:09+00:00 +C604,send invoice,2015-05-08 14:47:52+00:00,2015-05-08 14:43:32+00:00 +C478,make delivery,2015-05-08 15:07:32+00:00,2015-05-08 14:51:27+00:00 +C471,confirm payment,2015-05-08 15:12:18+00:00,2015-05-08 15:06:32+00:00 +C572,send reminder,2015-05-08 16:11:33+00:00,2015-05-08 15:26:53+00:00 +C593,send invoice,2015-05-08 15:34:02+00:00,2015-05-08 15:27:15+00:00 +C539,pay,2015-05-08 15:36:15+00:00,2015-05-08 15:31:10+00:00 +C620,place order,2015-05-08 15:51:02+00:00,2015-05-08 15:48:10+00:00 +C580,send invoice,2015-05-08 16:13:09+00:00,2015-05-08 16:06:51+00:00 +C592,send invoice,2015-05-08 16:26:51+00:00,2015-05-08 16:18:54+00:00 +C505,confirm payment,2015-05-08 16:24:42+00:00,2015-05-08 16:19:06+00:00 +C565,send reminder,2015-05-08 16:41:25+00:00,2015-05-08 16:32:23+00:00 +C522,confirm payment,2015-05-08 16:57:50+00:00,2015-05-08 16:50:25+00:00 +C506,confirm payment,2015-05-08 17:07:09+00:00,2015-05-08 16:59:52+00:00 +C617,send invoice,2015-05-08 17:53:39+00:00,2015-05-08 17:48:51+00:00 +C489,confirm payment,2015-05-08 17:58:12+00:00,2015-05-08 17:49:50+00:00 +C621,place order,2015-05-08 17:58:55+00:00,2015-05-08 17:54:27+00:00 +C600,send invoice,2015-05-08 18:45:50+00:00,2015-05-08 18:43:00+00:00 +C557,pay,2015-05-08 20:19:06+00:00,2015-05-08 20:16:28+00:00 +C509,confirm payment,2015-05-09 00:31:07+00:00,2015-05-08 20:18:54+00:00 +C622,place order,2015-05-08 20:23:18+00:00,2015-05-08 20:19:35+00:00 +C589,send invoice,2015-05-08 20:55:02+00:00,2015-05-08 20:33:37+00:00 +C545,pay,2015-05-08 21:31:22+00:00,2015-05-08 21:24:13+00:00 +C546,pay,2015-05-08 23:24:01+00:00,2015-05-08 23:14:14+00:00 +C623,place order,2015-05-08 23:26:34+00:00,2015-05-08 23:15:25+00:00 +C519,pay,2015-05-09 13:58:17+00:00,2015-05-09 13:51:31+00:00 +C624,place order,2015-05-09 21:23:50+00:00,2015-05-09 21:12:39+00:00 +C625,place order,2015-05-10 20:42:56+00:00,2015-05-10 20:39:42+00:00 +C478,confirm payment,2015-05-11 09:10:24+00:00,2015-05-11 09:00:18+00:00 +C626,place order,2015-05-11 09:32:30+00:00,2015-05-11 09:24:43+00:00 +C505,make delivery,2015-05-11 10:05:04+00:00,2015-05-11 09:33:51+00:00 +C581,send reminder,2015-05-11 09:54:45+00:00,2015-05-11 09:36:23+00:00 +C582,send invoice,2015-05-11 10:57:05+00:00,2015-05-11 10:33:15+00:00 +C552,pay,2015-05-11 10:58:00+00:00,2015-05-11 10:53:04+00:00 +C627,place order,2015-05-11 11:19:47+00:00,2015-05-11 11:07:33+00:00 +C568,pay,2015-05-11 11:10:58+00:00,2015-05-11 11:07:39+00:00 +C507,confirm payment,2015-05-11 11:37:14+00:00,2015-05-11 11:26:17+00:00 +C605,send invoice,2015-05-11 12:30:20+00:00,2015-05-11 12:25:38+00:00 +C628,place order,2015-05-11 13:18:20+00:00,2015-05-11 12:33:13+00:00 +C597,send invoice,2015-05-11 12:56:46+00:00,2015-05-11 12:39:19+00:00 +C591,send invoice,2015-05-11 12:58:55+00:00,2015-05-11 12:49:54+00:00 +C520,prepare delivery,2015-05-11 13:49:32+00:00,2015-05-11 13:45:37+00:00 +C535,pay,2015-05-11 14:03:50+00:00,2015-05-11 13:56:49+00:00 +C629,place order,2015-05-11 17:50:53+00:00,2015-05-11 14:24:33+00:00 +C547,pay,2015-05-11 14:35:37+00:00,2015-05-11 14:29:06+00:00 +C601,send invoice,2015-05-11 14:43:39+00:00,2015-05-11 14:39:37+00:00 +C521,prepare delivery,2015-05-11 15:04:10+00:00,2015-05-11 15:01:04+00:00 +C588,send invoice,2015-05-11 15:15:11+00:00,2015-05-11 15:09:50+00:00 +C583,send reminder,2015-05-11 16:05:24+00:00,2015-05-11 15:41:54+00:00 +C630,place order,2015-05-11 16:18:58+00:00,2015-05-11 16:07:14+00:00 +C559,send reminder,2015-05-11 17:13:32+00:00,2015-05-11 17:01:15+00:00 +C631,place order,2015-05-11 17:39:20+00:00,2015-05-11 17:32:35+00:00 +C599,send invoice,2015-05-11 18:39:06+00:00,2015-05-11 18:25:38+00:00 +C570,send reminder,2015-05-11 19:16:04+00:00,2015-05-11 19:09:13+00:00 +C603,send invoice,2015-05-11 19:24:34+00:00,2015-05-11 19:17:07+00:00 +C632,place order,2015-05-11 22:21:18+00:00,2015-05-11 19:23:17+00:00 +C541,prepare delivery,2015-05-11 21:09:50+00:00,2015-05-11 21:02:00+00:00 +C633,place order,2015-05-11 22:27:16+00:00,2015-05-11 22:22:49+00:00 +C555,pay,2015-05-11 23:25:15+00:00,2015-05-11 23:11:25+00:00 +C634,place order,2015-05-12 08:40:29+00:00,2015-05-12 08:33:52+00:00 +C635,place order,2015-05-12 10:50:09+00:00,2015-05-12 10:38:55+00:00 +C551,prepare delivery,2015-05-12 11:12:33+00:00,2015-05-12 10:45:37+00:00 +C521,confirm payment,2015-05-12 11:26:22+00:00,2015-05-12 11:21:18+00:00 +C546,prepare delivery,2015-05-12 11:40:45+00:00,2015-05-12 11:32:05+00:00 +C624,send invoice,2015-05-12 11:42:18+00:00,2015-05-12 11:37:29+00:00 +C547,prepare delivery,2015-05-12 12:08:01+00:00,2015-05-12 11:53:15+00:00 +C494,prepare delivery,2015-05-12 12:23:31+00:00,2015-05-12 12:16:20+00:00 +C520,make delivery,2015-05-12 13:13:30+00:00,2015-05-12 12:18:49+00:00 +C636,place order,2015-05-12 12:41:14+00:00,2015-05-12 12:35:57+00:00 +C499,prepare delivery,2015-05-12 15:06:09+00:00,2015-05-12 12:43:19+00:00 +C629,send invoice,2015-05-12 12:54:20+00:00,2015-05-12 12:46:09+00:00 +C481,prepare delivery,2015-05-12 14:05:42+00:00,2015-05-12 14:02:41+00:00 +C521,make delivery,2015-05-12 14:39:26+00:00,2015-05-12 14:05:07+00:00 +C614,send invoice,2015-05-12 14:12:30+00:00,2015-05-12 14:07:08+00:00 +C544,pay,2015-05-12 14:33:17+00:00,2015-05-12 14:27:42+00:00 +C637,place order,2015-05-12 14:37:12+00:00,2015-05-12 14:30:02+00:00 +C616,send invoice,2015-05-12 14:59:56+00:00,2015-05-12 14:52:22+00:00 +C606,send invoice,2015-05-12 15:04:37+00:00,2015-05-12 14:56:18+00:00 +C626,send invoice,2015-05-12 15:11:41+00:00,2015-05-12 15:05:25+00:00 +C613,send invoice,2015-05-12 15:37:08+00:00,2015-05-12 15:30:15+00:00 +C564,pay,2015-05-12 15:48:56+00:00,2015-05-12 15:38:57+00:00 +C520,confirm payment,2015-05-12 15:46:10+00:00,2015-05-12 15:41:56+00:00 +C550,prepare delivery,2015-05-12 18:19:34+00:00,2015-05-12 15:54:41+00:00 +C587,send reminder,2015-05-12 16:40:54+00:00,2015-05-12 16:05:29+00:00 +C638,place order,2015-05-12 16:48:05+00:00,2015-05-12 16:18:11+00:00 +C612,send invoice,2015-05-12 16:25:41+00:00,2015-05-12 16:19:37+00:00 +C554,prepare delivery,2015-05-12 16:49:18+00:00,2015-05-12 16:21:25+00:00 +C608,send invoice,2015-05-12 16:58:45+00:00,2015-05-12 16:51:12+00:00 +C541,make delivery,2015-05-12 18:38:46+00:00,2015-05-12 17:11:18+00:00 +C536,prepare delivery,2015-05-12 19:46:04+00:00,2015-05-12 17:19:13+00:00 +C639,place order,2015-05-12 17:59:03+00:00,2015-05-12 17:54:29+00:00 +C538,pay,2015-05-12 19:13:49+00:00,2015-05-12 19:07:20+00:00 +C621,send invoice,2015-05-12 19:30:37+00:00,2015-05-12 19:21:05+00:00 +C640,place order,2015-05-12 20:28:21+00:00,2015-05-12 20:19:41+00:00 +C625,send invoice,2015-05-12 21:16:48+00:00,2015-05-12 21:07:51+00:00 +C641,place order,2015-05-12 23:18:52+00:00,2015-05-12 23:15:37+00:00 +C571,pay,2015-05-13 06:04:46+00:00,2015-05-13 05:58:51+00:00 +C642,place order,2015-05-13 09:09:58+00:00,2015-05-13 09:06:59+00:00 +C559,pay,2015-05-13 09:52:11+00:00,2015-05-13 09:45:23+00:00 +C541,confirm payment,2015-05-13 13:54:22+00:00,2015-05-13 09:53:39+00:00 +C542,pay,2015-05-13 10:06:36+00:00,2015-05-13 09:58:16+00:00 +C494,make delivery,2015-05-13 10:37:37+00:00,2015-05-13 10:25:50+00:00 +C632,send invoice,2015-05-13 10:33:11+00:00,2015-05-13 10:28:24+00:00 +C547,confirm payment,2015-05-13 10:35:28+00:00,2015-05-13 10:31:30+00:00 +C643,place order,2015-05-13 10:51:25+00:00,2015-05-13 10:32:05+00:00 +C627,send invoice,2015-05-13 10:52:11+00:00,2015-05-13 10:45:47+00:00 +C481,make delivery,2015-05-13 12:42:04+00:00,2015-05-13 11:04:54+00:00 +C551,make delivery,2015-05-13 11:19:39+00:00,2015-05-13 11:06:57+00:00 +C580,pay,2015-05-13 11:11:31+00:00,2015-05-13 11:07:43+00:00 +C635,send invoice,2015-05-13 12:28:25+00:00,2015-05-13 12:11:06+00:00 +C546,make delivery,2015-05-13 13:54:10+00:00,2015-05-13 12:19:01+00:00 +C644,place order,2015-05-13 16:03:16+00:00,2015-05-13 12:22:17+00:00 +C504,prepare delivery,2015-05-13 12:33:54+00:00,2015-05-13 12:27:02+00:00 +C557,prepare delivery,2015-05-13 15:11:32+00:00,2015-05-13 12:31:58+00:00 +C619,send invoice,2015-05-13 13:09:02+00:00,2015-05-13 13:05:22+00:00 +C609,send invoice,2015-05-13 13:40:34+00:00,2015-05-13 13:08:48+00:00 +C560,pay,2015-05-13 13:20:07+00:00,2015-05-13 13:14:09+00:00 +C547,make delivery,2015-05-13 13:37:44+00:00,2015-05-13 13:22:26+00:00 +C644,send invoice,2015-05-13 13:43:08+00:00,2015-05-13 13:39:08+00:00 +C645,place order,2015-05-13 14:07:32+00:00,2015-05-13 14:02:41+00:00 +C610,send invoice,2015-05-13 14:20:09+00:00,2015-05-13 14:16:33+00:00 +C499,make delivery,2015-05-13 15:29:53+00:00,2015-05-13 14:37:06+00:00 +C637,send invoice,2015-05-13 14:49:48+00:00,2015-05-13 14:43:34+00:00 +C550,make delivery,2015-05-13 15:12:41+00:00,2015-05-13 14:48:01+00:00 +C570,pay,2015-05-13 15:01:51+00:00,2015-05-13 14:56:37+00:00 +C618,send invoice,2015-05-13 15:08:58+00:00,2015-05-13 15:02:50+00:00 +C556,prepare delivery,2015-05-13 15:24:59+00:00,2015-05-13 15:21:17+00:00 +C646,place order,2015-05-13 15:30:55+00:00,2015-05-13 15:23:30+00:00 +C611,send invoice,2015-05-13 15:30:59+00:00,2015-05-13 15:24:13+00:00 +C563,send reminder,2015-05-13 15:54:18+00:00,2015-05-13 15:40:44+00:00 +C550,confirm payment,2015-05-13 15:50:33+00:00,2015-05-13 15:42:48+00:00 +C536,make delivery,2015-05-13 16:01:19+00:00,2015-05-13 15:47:03+00:00 +C585,send reminder,2015-05-13 16:26:17+00:00,2015-05-13 16:16:37+00:00 +C615,send invoice,2015-05-13 16:40:19+00:00,2015-05-13 16:25:30+00:00 +C546,confirm payment,2015-05-13 16:58:21+00:00,2015-05-13 16:45:48+00:00 +C554,make delivery,2015-05-13 18:13:47+00:00,2015-05-13 16:56:46+00:00 +C647,place order,2015-05-13 17:09:37+00:00,2015-05-13 17:05:07+00:00 +C562,send reminder,2015-05-13 17:41:57+00:00,2015-05-13 17:24:27+00:00 +C551,confirm payment,2015-05-13 17:35:22+00:00,2015-05-13 17:30:06+00:00 +C578,pay,2015-05-13 21:01:37+00:00,2015-05-13 17:56:28+00:00 +C648,place order,2015-05-13 18:31:45+00:00,2015-05-13 18:28:21+00:00 +C539,prepare delivery,2015-05-13 18:48:48+00:00,2015-05-13 18:41:06+00:00 +C481,confirm payment,2015-05-13 19:23:33+00:00,2015-05-13 19:14:12+00:00 +C623,send invoice,2015-05-13 20:07:00+00:00,2015-05-13 19:54:34+00:00 +C649,place order,2015-05-13 21:07:18+00:00,2015-05-13 21:01:17+00:00 +C631,send invoice,2015-05-13 21:29:19+00:00,2015-05-13 21:23:09+00:00 +C650,place order,2015-05-14 04:11:17+00:00,2015-05-14 02:08:55+00:00 +C487,prepare delivery,2015-05-14 08:25:31+00:00,2015-05-14 08:10:32+00:00 +C651,place order,2015-05-14 09:25:24+00:00,2015-05-14 09:21:55+00:00 +C566,send reminder,2015-05-14 10:03:08+00:00,2015-05-14 09:48:05+00:00 +C529,prepare delivery,2015-05-14 10:05:29+00:00,2015-05-14 09:58:24+00:00 +C494,confirm payment,2015-05-14 10:06:28+00:00,2015-05-14 09:58:38+00:00 +C622,send invoice,2015-05-14 10:18:25+00:00,2015-05-14 10:15:53+00:00 +C552,prepare delivery,2015-05-14 11:24:21+00:00,2015-05-14 10:57:32+00:00 +C573,send reminder,2015-05-14 11:15:44+00:00,2015-05-14 11:01:00+00:00 +C652,place order,2015-05-14 11:11:59+00:00,2015-05-14 11:01:57+00:00 +C499,confirm payment,2015-05-14 11:37:20+00:00,2015-05-14 11:31:15+00:00 +C504,make delivery,2015-05-14 12:01:10+00:00,2015-05-14 11:47:19+00:00 +C557,make delivery,2015-05-14 12:13:39+00:00,2015-05-14 11:56:33+00:00 +C556,make delivery,2015-05-14 12:32:37+00:00,2015-05-14 12:19:55+00:00 +C628,send invoice,2015-05-14 12:28:33+00:00,2015-05-14 12:20:25+00:00 +C653,place order,2015-05-14 12:28:51+00:00,2015-05-14 12:22:02+00:00 +C504,confirm payment,2015-05-14 12:53:21+00:00,2015-05-14 12:45:46+00:00 +C575,send reminder,2015-05-14 13:01:31+00:00,2015-05-14 12:53:33+00:00 +C554,confirm payment,2015-05-14 13:04:24+00:00,2015-05-14 12:58:43+00:00 +C634,send invoice,2015-05-14 13:35:15+00:00,2015-05-14 13:22:57+00:00 +C594,send reminder,2015-05-14 14:19:59+00:00,2015-05-14 13:59:23+00:00 +C654,place order,2015-05-14 14:13:22+00:00,2015-05-14 14:02:11+00:00 +C630,send invoice,2015-05-14 14:23:18+00:00,2015-05-14 14:16:44+00:00 +C561,pay,2015-05-14 14:26:15+00:00,2015-05-14 14:17:39+00:00 +C519,prepare delivery,2015-05-14 17:41:44+00:00,2015-05-14 15:19:48+00:00 +C655,place order,2015-05-14 15:29:11+00:00,2015-05-14 15:22:29+00:00 +C620,send invoice,2015-05-14 15:37:23+00:00,2015-05-14 15:30:47+00:00 +C487,make delivery,2015-05-14 17:08:42+00:00,2015-05-14 15:41:47+00:00 +C557,confirm payment,2015-05-14 15:55:00+00:00,2015-05-14 15:46:11+00:00 +C638,send invoice,2015-05-14 16:26:27+00:00,2015-05-14 16:20:28+00:00 +C536,confirm payment,2015-05-14 16:32:57+00:00,2015-05-14 16:26:36+00:00 +C656,place order,2015-05-14 19:15:35+00:00,2015-05-14 17:03:05+00:00 +C636,send invoice,2015-05-14 17:17:45+00:00,2015-05-14 17:14:03+00:00 +C564,prepare delivery,2015-05-14 17:34:37+00:00,2015-05-14 17:26:26+00:00 +C558,prepare delivery,2015-05-14 17:30:10+00:00,2015-05-14 17:27:04+00:00 +C633,send invoice,2015-05-14 17:58:02+00:00,2015-05-14 17:50:12+00:00 +C595,send reminder,2015-05-14 18:01:50+00:00,2015-05-14 17:53:33+00:00 +C657,place order,2015-05-14 18:27:54+00:00,2015-05-14 18:24:18+00:00 +C648,send invoice,2015-05-14 19:09:42+00:00,2015-05-14 19:03:00+00:00 +C658,place order,2015-05-14 21:18:14+00:00,2015-05-14 20:49:08+00:00 +C579,pay,2015-05-14 23:52:00+00:00,2015-05-14 23:48:29+00:00 +C659,place order,2015-05-15 02:00:12+00:00,2015-05-15 01:56:00+00:00 +C576,pay,2015-05-15 08:34:51+00:00,2015-05-15 08:24:02+00:00 +C487,confirm payment,2015-05-15 09:05:18+00:00,2015-05-15 09:01:06+00:00 +C607,send reminder,2015-05-15 09:12:33+00:00,2015-05-15 09:03:31+00:00 +C568,prepare delivery,2015-05-15 09:37:58+00:00,2015-05-15 09:30:08+00:00 +C566,cancel order,2015-05-15 10:04:11+00:00,2015-05-15 09:44:41+00:00 +C539,make delivery,2015-05-15 10:14:43+00:00,2015-05-15 09:52:13+00:00 +C556,confirm payment,2015-05-15 10:09:44+00:00,2015-05-15 10:04:06+00:00 +C660,place order,2015-05-15 10:31:28+00:00,2015-05-15 10:07:43+00:00 +C567,pay,2015-05-15 11:08:40+00:00,2015-05-15 10:58:33+00:00 +C640,send invoice,2015-05-15 11:29:26+00:00,2015-05-15 11:23:38+00:00 +C552,make delivery,2015-05-15 12:55:11+00:00,2015-05-15 11:27:20+00:00 +C661,place order,2015-05-15 13:34:38+00:00,2015-05-15 11:33:34+00:00 +C588,pay,2015-05-15 11:57:02+00:00,2015-05-15 11:48:21+00:00 +C529,make delivery,2015-05-15 12:07:13+00:00,2015-05-15 11:52:46+00:00 +C538,prepare delivery,2015-05-15 12:32:46+00:00,2015-05-15 12:26:47+00:00 +C586,pay,2015-05-15 13:01:57+00:00,2015-05-15 12:58:08+00:00 +C645,send invoice,2015-05-15 13:08:42+00:00,2015-05-15 13:01:58+00:00 +C662,place order,2015-05-15 13:28:13+00:00,2015-05-15 13:25:15+00:00 +C519,make delivery,2015-05-15 14:36:25+00:00,2015-05-15 14:09:38+00:00 +C592,send reminder,2015-05-15 14:18:54+00:00,2015-05-15 14:11:27+00:00 +C590,pay,2015-05-15 14:29:54+00:00,2015-05-15 14:27:52+00:00 +C641,send invoice,2015-05-15 14:48:23+00:00,2015-05-15 14:44:26+00:00 +C663,place order,2015-05-15 17:20:32+00:00,2015-05-15 15:08:37+00:00 +C565,send reminder,2015-05-15 16:14:21+00:00,2015-05-15 15:41:10+00:00 +C553,pay,2015-05-15 15:53:41+00:00,2015-05-15 15:50:26+00:00 +C564,make delivery,2015-05-15 16:16:31+00:00,2015-05-15 16:05:46+00:00 +C664,place order,2015-05-15 16:54:39+00:00,2015-05-15 16:35:21+00:00 +C651,send invoice,2015-05-15 16:47:25+00:00,2015-05-15 16:38:07+00:00 +C560,prepare delivery,2015-05-15 19:28:20+00:00,2015-05-15 16:49:04+00:00 +C569,send reminder,2015-05-15 17:19:08+00:00,2015-05-15 16:59:39+00:00 +C646,send invoice,2015-05-15 17:10:06+00:00,2015-05-15 17:03:24+00:00 +C570,prepare delivery,2015-05-15 17:34:13+00:00,2015-05-15 17:09:32+00:00 +C555,prepare delivery,2015-05-15 17:32:33+00:00,2015-05-15 17:25:25+00:00 +C539,confirm payment,2015-05-15 17:30:50+00:00,2015-05-15 17:28:20+00:00 +C600,send reminder,2015-05-15 17:59:31+00:00,2015-05-15 17:37:30+00:00 +C529,confirm payment,2015-05-15 17:47:06+00:00,2015-05-15 17:40:13+00:00 +C558,make delivery,2015-05-15 17:59:59+00:00,2015-05-15 17:46:16+00:00 +C568,confirm payment,2015-05-15 18:04:16+00:00,2015-05-15 17:57:29+00:00 +C545,prepare delivery,2015-05-15 18:15:03+00:00,2015-05-15 18:07:46+00:00 +C665,place order,2015-05-15 22:24:17+00:00,2015-05-15 18:28:49+00:00 +C572,send reminder,2015-05-15 20:14:40+00:00,2015-05-15 20:03:17+00:00 +C558,confirm payment,2015-05-15 20:25:44+00:00,2015-05-15 20:08:38+00:00 +C666,place order,2015-05-16 00:47:00+00:00,2015-05-15 21:02:42+00:00 +C667,place order,2015-05-16 12:46:50+00:00,2015-05-16 09:59:24+00:00 +C668,place order,2015-05-17 10:44:02+00:00,2015-05-17 10:36:00+00:00 +C669,place order,2015-05-18 03:12:43+00:00,2015-05-18 03:07:12+00:00 +C663,send invoice,2015-05-18 09:13:56+00:00,2015-05-18 09:06:49+00:00 +C593,send reminder,2015-05-18 09:31:04+00:00,2015-05-18 09:16:33+00:00 +C670,place order,2015-05-18 10:17:16+00:00,2015-05-18 09:26:03+00:00 +C573,pay,2015-05-18 10:25:18+00:00,2015-05-18 10:18:23+00:00 +C568,make delivery,2015-05-18 11:06:39+00:00,2015-05-18 10:40:06+00:00 +C564,confirm payment,2015-05-18 10:54:45+00:00,2015-05-18 10:50:05+00:00 +C655,send invoice,2015-05-18 11:00:44+00:00,2015-05-18 10:56:23+00:00 +C552,confirm payment,2015-05-18 11:08:32+00:00,2015-05-18 10:57:46+00:00 +C658,send invoice,2015-05-18 11:15:09+00:00,2015-05-18 11:09:17+00:00 +C671,place order,2015-05-18 11:20:33+00:00,2015-05-18 11:10:13+00:00 +C538,make delivery,2015-05-18 11:26:53+00:00,2015-05-18 11:15:17+00:00 +C519,confirm payment,2015-05-18 11:30:37+00:00,2015-05-18 11:23:51+00:00 +C581,send reminder,2015-05-18 11:41:03+00:00,2015-05-18 11:28:51+00:00 +C535,prepare delivery,2015-05-18 11:54:17+00:00,2015-05-18 11:50:40+00:00 +C561,prepare delivery,2015-05-18 11:56:39+00:00,2015-05-18 11:53:00+00:00 +C650,send invoice,2015-05-18 12:35:20+00:00,2015-05-18 12:30:18+00:00 +C659,send invoice,2015-05-18 12:40:47+00:00,2015-05-18 12:34:22+00:00 +C672,place order,2015-05-18 12:49:26+00:00,2015-05-18 12:38:33+00:00 +C582,send reminder,2015-05-18 13:36:27+00:00,2015-05-18 13:19:41+00:00 +C597,send reminder,2015-05-18 13:45:38+00:00,2015-05-18 13:29:14+00:00 +C673,place order,2015-05-18 14:40:38+00:00,2015-05-18 14:35:13+00:00 +C601,send reminder,2015-05-18 15:27:40+00:00,2015-05-18 15:16:13+00:00 +C649,send invoice,2015-05-18 15:35:18+00:00,2015-05-18 15:28:28+00:00 +C555,make delivery,2015-05-18 15:49:58+00:00,2015-05-18 15:36:51+00:00 +C538,confirm payment,2015-05-18 15:43:33+00:00,2015-05-18 15:38:10+00:00 +C605,send reminder,2015-05-18 16:06:43+00:00,2015-05-18 15:48:09+00:00 +C583,send reminder,2015-05-18 16:20:22+00:00,2015-05-18 16:01:59+00:00 +C562,pay,2015-05-18 16:54:56+00:00,2015-05-18 16:25:41+00:00 +C674,place order,2015-05-18 16:39:42+00:00,2015-05-18 16:28:33+00:00 +C560,confirm payment,2015-05-18 16:37:24+00:00,2015-05-18 16:30:04+00:00 +C667,send invoice,2015-05-18 16:36:30+00:00,2015-05-18 16:31:36+00:00 +C570,confirm payment,2015-05-18 16:47:30+00:00,2015-05-18 16:34:35+00:00 +C591,send reminder,2015-05-18 17:07:29+00:00,2015-05-18 16:39:53+00:00 +C545,make delivery,2015-05-18 16:56:54+00:00,2015-05-18 16:45:42+00:00 +C553,prepare delivery,2015-05-18 17:44:09+00:00,2015-05-18 17:36:52+00:00 +C544,prepare delivery,2015-05-18 17:50:03+00:00,2015-05-18 17:40:35+00:00 +C560,make delivery,2015-05-18 18:00:04+00:00,2015-05-18 17:49:22+00:00 +C675,place order,2015-05-18 18:22:02+00:00,2015-05-18 18:15:14+00:00 +C574,pay,2015-05-18 18:42:54+00:00,2015-05-18 18:37:55+00:00 +C580,prepare delivery,2015-05-18 18:47:02+00:00,2015-05-18 18:39:58+00:00 +C660,send invoice,2015-05-18 19:57:29+00:00,2015-05-18 19:45:45+00:00 +C676,place order,2015-05-18 20:28:30+00:00,2015-05-18 20:21:56+00:00 +C614,pay,2015-05-18 21:18:16+00:00,2015-05-18 21:12:08+00:00 +C677,place order,2015-05-18 23:22:43+00:00,2015-05-18 23:20:06+00:00 +C570,make delivery,2015-05-19 08:42:07+00:00,2015-05-19 08:31:30+00:00 +C678,place order,2015-05-19 09:26:41+00:00,2015-05-19 09:12:22+00:00 +C647,send invoice,2015-05-19 12:26:35+00:00,2015-05-19 09:14:15+00:00 +C652,send invoice,2015-05-19 09:24:17+00:00,2015-05-19 09:18:05+00:00 +C545,confirm payment,2015-05-19 09:31:01+00:00,2015-05-19 09:22:48+00:00 +C639,send invoice,2015-05-19 09:33:11+00:00,2015-05-19 09:30:12+00:00 +C586,prepare delivery,2015-05-19 09:41:11+00:00,2015-05-19 09:33:40+00:00 +C555,confirm payment,2015-05-19 10:02:44+00:00,2015-05-19 09:57:04+00:00 +C567,prepare delivery,2015-05-19 12:51:50+00:00,2015-05-19 10:30:18+00:00 +C643,send invoice,2015-05-19 10:47:22+00:00,2015-05-19 10:42:01+00:00 +C679,place order,2015-05-19 13:20:54+00:00,2015-05-19 10:42:51+00:00 +C583,cancel order,2015-05-19 10:55:03+00:00,2015-05-19 10:48:42+00:00 +C661,send invoice,2015-05-19 10:57:51+00:00,2015-05-19 10:51:18+00:00 +C535,confirm payment,2015-05-19 11:15:09+00:00,2015-05-19 11:08:20+00:00 +C669,send invoice,2015-05-19 11:18:34+00:00,2015-05-19 11:12:50+00:00 +C535,make delivery,2015-05-19 11:45:41+00:00,2015-05-19 11:21:05+00:00 +C653,send invoice,2015-05-19 11:40:42+00:00,2015-05-19 11:36:45+00:00 +C563,pay,2015-05-19 11:45:13+00:00,2015-05-19 11:40:07+00:00 +C642,send invoice,2015-05-19 12:34:05+00:00,2015-05-19 12:26:36+00:00 +C680,place order,2015-05-19 12:48:40+00:00,2015-05-19 12:43:50+00:00 +C561,confirm payment,2015-05-19 13:42:00+00:00,2015-05-19 13:19:00+00:00 +C561,make delivery,2015-05-19 13:42:00+00:00,2015-05-19 13:27:42+00:00 +C542,prepare delivery,2015-05-19 14:15:11+00:00,2015-05-19 14:00:32+00:00 +C613,send reminder,2015-05-19 14:50:03+00:00,2015-05-19 14:21:20+00:00 +C681,place order,2015-05-19 15:06:41+00:00,2015-05-19 14:45:47+00:00 +C594,pay,2015-05-19 15:13:22+00:00,2015-05-19 15:04:52+00:00 +C579,prepare delivery,2015-05-19 17:48:20+00:00,2015-05-19 15:24:44+00:00 +C657,send invoice,2015-05-19 16:19:08+00:00,2015-05-19 16:12:25+00:00 +C597,pay,2015-05-19 17:11:52+00:00,2015-05-19 16:44:23+00:00 +C682,place order,2015-05-19 17:05:48+00:00,2015-05-19 16:49:41+00:00 +C625,send reminder,2015-05-19 17:10:51+00:00,2015-05-19 16:57:44+00:00 +C559,prepare delivery,2015-05-19 17:05:18+00:00,2015-05-19 16:58:38+00:00 +C544,make delivery,2015-05-19 17:43:34+00:00,2015-05-19 17:10:27+00:00 +C580,make delivery,2015-05-19 18:27:34+00:00,2015-05-19 17:56:42+00:00 +C553,make delivery,2015-05-19 18:37:04+00:00,2015-05-19 18:21:20+00:00 +C575,pay,2015-05-19 18:54:44+00:00,2015-05-19 18:50:29+00:00 +C683,place order,2015-05-19 19:09:35+00:00,2015-05-19 18:57:29+00:00 +C577,pay,2015-05-19 21:03:38+00:00,2015-05-19 20:57:55+00:00 +C589,pay,2015-05-19 21:36:02+00:00,2015-05-19 21:29:43+00:00 +C684,place order,2015-05-19 22:42:26+00:00,2015-05-19 22:28:42+00:00 +C599,pay,2015-05-20 00:02:14+00:00,2015-05-19 23:56:51+00:00 +C612,send reminder,2015-05-20 09:06:09+00:00,2015-05-20 08:23:24+00:00 +C685,place order,2015-05-20 08:52:23+00:00,2015-05-20 08:45:38+00:00 +C587,send reminder,2015-05-20 09:42:59+00:00,2015-05-20 09:19:05+00:00 +C593,pay,2015-05-20 09:33:38+00:00,2015-05-20 09:29:41+00:00 +C632,send reminder,2015-05-20 10:15:11+00:00,2015-05-20 09:53:24+00:00 +C654,send invoice,2015-05-20 10:08:41+00:00,2015-05-20 09:58:01+00:00 +C565,pay,2015-05-20 10:10:22+00:00,2015-05-20 10:03:11+00:00 +C586,make delivery,2015-05-20 10:42:18+00:00,2015-05-20 10:04:43+00:00 +C671,send invoice,2015-05-20 10:21:35+00:00,2015-05-20 10:13:37+00:00 +C567,make delivery,2015-05-20 11:57:31+00:00,2015-05-20 10:22:43+00:00 +C578,prepare delivery,2015-05-20 10:29:40+00:00,2015-05-20 10:26:46+00:00 +C674,send invoice,2015-05-20 10:40:42+00:00,2015-05-20 10:32:54+00:00 +C553,confirm payment,2015-05-20 10:56:37+00:00,2015-05-20 10:44:37+00:00 +C542,confirm payment,2015-05-20 10:57:16+00:00,2015-05-20 10:46:17+00:00 +C608,send reminder,2015-05-20 11:34:39+00:00,2015-05-20 10:51:17+00:00 +C686,place order,2015-05-20 11:09:41+00:00,2015-05-20 10:56:34+00:00 +C590,prepare delivery,2015-05-20 11:14:03+00:00,2015-05-20 11:10:59+00:00 +C610,send reminder,2015-05-20 11:22:05+00:00,2015-05-20 11:14:25+00:00 +C581,cancel order,2015-05-20 11:50:07+00:00,2015-05-20 11:17:40+00:00 +C584,pay,2015-05-20 11:30:53+00:00,2015-05-20 11:26:18+00:00 +C662,send invoice,2015-05-20 11:50:24+00:00,2015-05-20 11:45:19+00:00 +C576,prepare delivery,2015-05-20 12:01:45+00:00,2015-05-20 11:58:45+00:00 +C606,pay,2015-05-20 12:17:21+00:00,2015-05-20 12:11:04+00:00 +C573,prepare delivery,2015-05-20 12:41:23+00:00,2015-05-20 12:33:30+00:00 +C666,send invoice,2015-05-20 12:51:26+00:00,2015-05-20 12:46:10+00:00 +C687,place order,2015-05-20 15:39:48+00:00,2015-05-20 13:11:15+00:00 +C596,pay,2015-05-20 14:10:56+00:00,2015-05-20 14:04:14+00:00 +C542,make delivery,2015-05-20 14:32:54+00:00,2015-05-20 14:16:44+00:00 +C613,pay,2015-05-20 14:21:35+00:00,2015-05-20 14:18:18+00:00 +C571,prepare delivery,2015-05-20 14:42:34+00:00,2015-05-20 14:35:10+00:00 +C688,place order,2015-05-20 15:02:15+00:00,2015-05-20 14:40:38+00:00 +C579,make delivery,2015-05-20 15:27:58+00:00,2015-05-20 14:56:38+00:00 +C586,confirm payment,2015-05-20 15:46:17+00:00,2015-05-20 15:38:56+00:00 +C544,confirm payment,2015-05-20 15:52:30+00:00,2015-05-20 15:44:57+00:00 +C679,send invoice,2015-05-20 16:10:26+00:00,2015-05-20 16:07:04+00:00 +C609,send reminder,2015-05-20 16:24:23+00:00,2015-05-20 16:12:51+00:00 +C559,make delivery,2015-05-20 16:38:36+00:00,2015-05-20 16:24:11+00:00 +C689,place order,2015-05-20 16:45:58+00:00,2015-05-20 16:39:23+00:00 +C569,pay,2015-05-20 16:59:33+00:00,2015-05-20 16:53:46+00:00 +C567,confirm payment,2015-05-20 17:14:23+00:00,2015-05-20 17:06:48+00:00 +C682,send invoice,2015-05-20 17:15:30+00:00,2015-05-20 17:07:34+00:00 +C664,send invoice,2015-05-20 17:14:15+00:00,2015-05-20 17:10:51+00:00 +C602,pay,2015-05-20 17:26:39+00:00,2015-05-20 17:18:45+00:00 +C572,pay,2015-05-20 17:31:41+00:00,2015-05-20 17:28:42+00:00 +C612,pay,2015-05-20 17:49:43+00:00,2015-05-20 17:37:18+00:00 +C580,confirm payment,2015-05-20 17:46:36+00:00,2015-05-20 17:38:32+00:00 +C690,place order,2015-05-20 18:49:55+00:00,2015-05-20 18:36:53+00:00 +C656,send invoice,2015-05-20 19:01:17+00:00,2015-05-20 18:58:01+00:00 +C563,prepare delivery,2015-05-20 19:06:59+00:00,2015-05-20 19:03:16+00:00 +C611,pay,2015-05-20 20:09:39+00:00,2015-05-20 20:00:32+00:00 +C562,prepare delivery,2015-05-20 20:36:35+00:00,2015-05-20 20:33:34+00:00 +C598,pay,2015-05-20 21:07:34+00:00,2015-05-20 20:39:42+00:00 +C691,place order,2015-05-20 21:41:13+00:00,2015-05-20 21:26:54+00:00 +C585,send reminder,2015-05-20 22:22:41+00:00,2015-05-20 22:02:42+00:00 +C692,place order,2015-05-21 04:51:25+00:00,2015-05-21 04:42:36+00:00 +C590,confirm payment,2015-05-21 08:31:28+00:00,2015-05-21 08:25:30+00:00 +C597,prepare delivery,2015-05-21 08:54:56+00:00,2015-05-21 08:47:00+00:00 +C607,pay,2015-05-21 09:37:02+00:00,2015-05-21 09:32:07+00:00 +C678,send invoice,2015-05-21 09:46:49+00:00,2015-05-21 09:32:57+00:00 +C693,place order,2015-05-21 10:25:11+00:00,2015-05-21 10:10:58+00:00 +C578,make delivery,2015-05-21 10:38:54+00:00,2015-05-21 10:27:14+00:00 +C578,confirm payment,2015-05-21 10:32:53+00:00,2015-05-21 10:27:54+00:00 +C694,place order,2015-05-21 12:12:24+00:00,2015-05-21 11:40:04+00:00 +C576,make delivery,2015-05-21 12:30:24+00:00,2015-05-21 11:56:15+00:00 +C689,send invoice,2015-05-21 12:19:04+00:00,2015-05-21 12:14:59+00:00 +C615,pay,2015-05-21 13:09:23+00:00,2015-05-21 12:56:30+00:00 +C675,send invoice,2015-05-21 13:11:26+00:00,2015-05-21 13:08:39+00:00 +C676,send invoice,2015-05-21 13:18:19+00:00,2015-05-21 13:12:44+00:00 +C695,place order,2015-05-21 13:48:14+00:00,2015-05-21 13:38:15+00:00 +C634,send reminder,2015-05-21 14:12:41+00:00,2015-05-21 13:41:06+00:00 +C590,make delivery,2015-05-21 14:36:33+00:00,2015-05-21 13:46:03+00:00 +C681,send invoice,2015-05-21 13:53:15+00:00,2015-05-21 13:49:00+00:00 +C619,pay,2015-05-21 14:01:17+00:00,2015-05-21 13:56:22+00:00 +C573,make delivery,2015-05-21 14:34:45+00:00,2015-05-21 14:23:07+00:00 +C677,send invoice,2015-05-21 14:32:08+00:00,2015-05-21 14:27:23+00:00 +C579,confirm payment,2015-05-21 14:51:36+00:00,2015-05-21 14:43:44+00:00 +C571,confirm payment,2015-05-21 15:02:49+00:00,2015-05-21 14:52:46+00:00 +C573,confirm payment,2015-05-21 15:03:05+00:00,2015-05-21 14:58:25+00:00 +C628,send reminder,2015-05-21 15:40:37+00:00,2015-05-21 15:10:57+00:00 +C614,prepare delivery,2015-05-21 17:32:27+00:00,2015-05-21 15:12:02+00:00 +C637,pay,2015-05-21 15:22:07+00:00,2015-05-21 15:15:30+00:00 +C696,place order,2015-05-21 15:38:40+00:00,2015-05-21 15:34:37+00:00 +C582,pay,2015-05-21 17:03:08+00:00,2015-05-21 16:52:31+00:00 +C571,make delivery,2015-05-21 17:05:57+00:00,2015-05-21 16:54:48+00:00 +C576,confirm payment,2015-05-21 17:01:14+00:00,2015-05-21 16:56:35+00:00 +C559,confirm payment,2015-05-21 17:26:03+00:00,2015-05-21 17:13:02+00:00 +C697,place order,2015-05-21 17:32:34+00:00,2015-05-21 17:27:21+00:00 +C638,send reminder,2015-05-21 17:47:58+00:00,2015-05-21 17:27:40+00:00 +C563,make delivery,2015-05-21 18:04:42+00:00,2015-05-21 17:47:05+00:00 +C562,make delivery,2015-05-21 18:46:02+00:00,2015-05-21 18:06:54+00:00 +C620,send reminder,2015-05-21 18:26:31+00:00,2015-05-21 18:13:00+00:00 +C591,pay,2015-05-21 18:26:20+00:00,2015-05-21 18:22:07+00:00 +C616,pay,2015-05-21 18:41:40+00:00,2015-05-21 18:28:26+00:00 +C597,confirm payment,2015-05-21 18:34:08+00:00,2015-05-21 18:29:54+00:00 +C629,pay,2015-05-21 18:33:30+00:00,2015-05-21 18:31:25+00:00 +C685,send invoice,2015-05-21 18:36:50+00:00,2015-05-21 18:33:05+00:00 +C588,prepare delivery,2015-05-21 19:38:49+00:00,2015-05-21 19:11:31+00:00 +C698,place order,2015-05-21 19:20:06+00:00,2015-05-21 19:12:50+00:00 +C604,pay,2015-05-21 20:27:46+00:00,2015-05-21 20:05:34+00:00 +C699,place order,2015-05-21 22:06:06+00:00,2015-05-21 22:01:54+00:00 +C630,pay,2015-05-21 22:46:16+00:00,2015-05-21 22:39:20+00:00 +C700,place order,2015-05-22 10:19:35+00:00,2015-05-22 07:12:36+00:00 +C595,send reminder,2015-05-22 09:30:28+00:00,2015-05-22 09:10:08+00:00 +C672,send invoice,2015-05-22 09:27:34+00:00,2015-05-22 09:20:44+00:00 +C690,send invoice,2015-05-22 09:50:07+00:00,2015-05-22 09:44:01+00:00 +C701,place order,2015-05-22 10:03:17+00:00,2015-05-22 09:55:59+00:00 +C699,send invoice,2015-05-22 10:15:16+00:00,2015-05-22 10:08:39+00:00 +C636,send reminder,2015-05-22 10:31:34+00:00,2015-05-22 10:16:18+00:00 +C686,send invoice,2015-05-22 10:33:14+00:00,2015-05-22 10:21:03+00:00 +C562,confirm payment,2015-05-22 10:27:13+00:00,2015-05-22 10:23:46+00:00 +C665,send invoice,2015-05-22 10:33:46+00:00,2015-05-22 10:27:01+00:00 +C626,pay,2015-05-22 10:49:42+00:00,2015-05-22 10:44:56+00:00 +C594,prepare delivery,2015-05-22 11:13:57+00:00,2015-05-22 10:46:38+00:00 +C597,make delivery,2015-05-22 11:17:04+00:00,2015-05-22 10:52:00+00:00 +C668,send invoice,2015-05-22 11:10:53+00:00,2015-05-22 11:04:48+00:00 +C563,confirm payment,2015-05-22 11:39:22+00:00,2015-05-22 11:06:59+00:00 +C592,send reminder,2015-05-22 11:47:33+00:00,2015-05-22 11:17:41+00:00 +C574,prepare delivery,2015-05-22 11:35:08+00:00,2015-05-22 11:27:11+00:00 +C623,pay,2015-05-22 11:48:49+00:00,2015-05-22 11:44:57+00:00 +C673,send invoice,2015-05-22 11:51:58+00:00,2015-05-22 11:46:02+00:00 +C670,send invoice,2015-05-22 12:05:03+00:00,2015-05-22 12:00:45+00:00 +C702,place order,2015-05-22 12:27:35+00:00,2015-05-22 12:10:05+00:00 +C610,pay,2015-05-22 12:20:37+00:00,2015-05-22 12:12:36+00:00 +C640,send reminder,2015-05-22 13:20:35+00:00,2015-05-22 12:47:52+00:00 +C614,make delivery,2015-05-22 14:09:12+00:00,2015-05-22 13:22:15+00:00 +C703,place order,2015-05-22 15:52:15+00:00,2015-05-22 13:38:17+00:00 +C692,send invoice,2015-05-22 14:04:42+00:00,2015-05-22 13:56:50+00:00 +C704,place order,2015-05-22 15:38:58+00:00,2015-05-22 15:34:42+00:00 +C624,pay,2015-05-22 16:14:19+00:00,2015-05-22 16:10:13+00:00 +C588,make delivery,2015-05-22 17:26:59+00:00,2015-05-22 16:58:35+00:00 +C651,send reminder,2015-05-22 17:13:38+00:00,2015-05-22 17:05:02+00:00 +C705,place order,2015-05-22 17:34:15+00:00,2015-05-22 17:27:31+00:00 +C683,send invoice,2015-05-22 18:30:04+00:00,2015-05-22 18:27:25+00:00 +C706,place order,2015-05-22 19:33:44+00:00,2015-05-22 19:13:09+00:00 +C617,pay,2015-05-22 21:05:26+00:00,2015-05-22 21:00:14+00:00 +C621,pay,2015-05-22 21:14:59+00:00,2015-05-22 21:06:43+00:00 +C587,pay,2015-05-22 21:37:58+00:00,2015-05-22 21:34:59+00:00 +C707,place order,2015-05-22 22:17:31+00:00,2015-05-22 22:02:32+00:00 +C708,place order,2015-05-23 15:11:33+00:00,2015-05-23 14:58:24+00:00 +C709,place order,2015-05-24 19:42:06+00:00,2015-05-24 15:34:01+00:00 +C641,pay,2015-05-24 18:58:29+00:00,2015-05-24 18:55:22+00:00 +C603,pay,2015-05-25 04:13:01+00:00,2015-05-25 04:07:21+00:00 +C710,place order,2015-05-25 11:06:22+00:00,2015-05-25 08:03:14+00:00 +C608,pay,2015-05-25 09:05:52+00:00,2015-05-25 09:01:35+00:00 +C693,send invoice,2015-05-25 09:16:04+00:00,2015-05-25 09:11:37+00:00 +C628,pay,2015-05-25 09:30:22+00:00,2015-05-25 09:24:01+00:00 +C600,send reminder,2015-05-25 10:15:13+00:00,2015-05-25 09:48:42+00:00 +C711,place order,2015-05-25 10:06:40+00:00,2015-05-25 09:52:58+00:00 +C596,prepare delivery,2015-05-25 10:37:33+00:00,2015-05-25 10:29:42+00:00 +C618,pay,2015-05-25 11:03:41+00:00,2015-05-25 10:45:52+00:00 +C650,send reminder,2015-05-25 11:04:33+00:00,2015-05-25 10:53:43+00:00 +C663,send reminder,2015-05-25 11:23:18+00:00,2015-05-25 10:59:25+00:00 +C584,prepare delivery,2015-05-25 13:23:21+00:00,2015-05-25 10:59:26+00:00 +C594,confirm payment,2015-05-25 11:35:17+00:00,2015-05-25 11:26:31+00:00 +C611,prepare delivery,2015-05-25 11:46:56+00:00,2015-05-25 11:43:18+00:00 +C594,make delivery,2015-05-25 12:13:32+00:00,2015-05-25 11:47:18+00:00 +C712,place order,2015-05-25 12:08:07+00:00,2015-05-25 12:04:03+00:00 +C574,make delivery,2015-05-25 12:17:26+00:00,2015-05-25 12:08:18+00:00 +C627,pay,2015-05-25 15:49:37+00:00,2015-05-25 13:21:44+00:00 +C713,place order,2015-05-25 13:34:46+00:00,2015-05-25 13:26:13+00:00 +C702,send invoice,2015-05-25 13:44:03+00:00,2015-05-25 13:37:54+00:00 +C565,prepare delivery,2015-05-25 14:23:39+00:00,2015-05-25 14:15:59+00:00 +C635,pay,2015-05-25 18:22:58+00:00,2015-05-25 14:26:15+00:00 +C684,send invoice,2015-05-25 14:46:01+00:00,2015-05-25 14:39:45+00:00 +C633,pay,2015-05-25 14:49:11+00:00,2015-05-25 14:41:28+00:00 +C599,prepare delivery,2015-05-25 14:51:48+00:00,2015-05-25 14:44:09+00:00 +C601,send reminder,2015-05-25 15:04:35+00:00,2015-05-25 14:50:48+00:00 +C614,confirm payment,2015-05-25 15:22:42+00:00,2015-05-25 15:09:28+00:00 +C714,place order,2015-05-25 15:23:25+00:00,2015-05-25 15:10:34+00:00 +C574,confirm payment,2015-05-25 15:28:49+00:00,2015-05-25 15:11:10+00:00 +C595,cancel order,2015-05-25 15:25:32+00:00,2015-05-25 15:13:56+00:00 +C588,confirm payment,2015-05-25 15:22:13+00:00,2015-05-25 15:14:37+00:00 +C604,prepare delivery,2015-05-25 15:47:00+00:00,2015-05-25 15:43:01+00:00 +C655,send reminder,2015-05-25 16:04:09+00:00,2015-05-25 15:51:05+00:00 +C593,prepare delivery,2015-05-25 16:11:02+00:00,2015-05-25 16:03:17+00:00 +C696,send invoice,2015-05-25 16:08:15+00:00,2015-05-25 16:04:18+00:00 +C715,place order,2015-05-25 16:46:47+00:00,2015-05-25 16:39:15+00:00 +C647,send reminder,2015-05-25 17:51:41+00:00,2015-05-25 17:15:38+00:00 +C622,pay,2015-05-25 17:45:41+00:00,2015-05-25 17:30:25+00:00 +C667,send reminder,2015-05-25 17:54:26+00:00,2015-05-25 17:47:46+00:00 +C716,place order,2015-05-25 18:40:49+00:00,2015-05-25 18:36:37+00:00 +C605,send reminder,2015-05-25 19:29:27+00:00,2015-05-25 18:44:34+00:00 +C585,pay,2015-05-25 20:29:41+00:00,2015-05-25 20:25:54+00:00 +C695,send invoice,2015-05-25 20:46:59+00:00,2015-05-25 20:38:17+00:00 +C717,place order,2015-05-25 21:36:53+00:00,2015-05-25 21:26:05+00:00 +C718,place order,2015-05-26 05:00:11+00:00,2015-05-26 04:37:43+00:00 +C596,make delivery,2015-05-26 10:17:00+00:00,2015-05-26 08:40:52+00:00 +C669,send reminder,2015-05-26 09:02:21+00:00,2015-05-26 08:47:29+00:00 +C687,send invoice,2015-05-26 09:20:46+00:00,2015-05-26 09:16:19+00:00 +C616,prepare delivery,2015-05-26 09:50:46+00:00,2015-05-26 09:41:38+00:00 +C660,send reminder,2015-05-26 10:24:46+00:00,2015-05-26 09:48:13+00:00 +C661,send reminder,2015-05-26 10:12:30+00:00,2015-05-26 10:03:12+00:00 +C598,prepare delivery,2015-05-26 12:39:05+00:00,2015-05-26 10:05:09+00:00 +C719,place order,2015-05-26 10:19:34+00:00,2015-05-26 10:05:36+00:00 +C653,send reminder,2015-05-26 10:40:02+00:00,2015-05-26 10:24:27+00:00 +C643,send reminder,2015-05-26 11:19:22+00:00,2015-05-26 10:38:54+00:00 +C608,prepare delivery,2015-05-26 13:24:15+00:00,2015-05-26 10:44:30+00:00 +C613,prepare delivery,2015-05-26 11:28:58+00:00,2015-05-26 11:21:06+00:00 +C565,make delivery,2015-05-26 11:36:12+00:00,2015-05-26 11:22:07+00:00 +C714,send invoice,2015-05-26 14:19:31+00:00,2015-05-26 11:25:02+00:00 +C720,place order,2015-05-26 11:40:33+00:00,2015-05-26 11:29:19+00:00 +C584,make delivery,2015-05-26 12:08:37+00:00,2015-05-26 11:44:49+00:00 +C584,confirm payment,2015-05-26 11:57:22+00:00,2015-05-26 11:54:36+00:00 +C639,pay,2015-05-26 11:58:50+00:00,2015-05-26 11:54:47+00:00 +C615,prepare delivery,2015-05-26 12:13:16+00:00,2015-05-26 12:10:09+00:00 +C611,make delivery,2015-05-26 13:31:05+00:00,2015-05-26 12:58:56+00:00 +C721,place order,2015-05-26 13:28:12+00:00,2015-05-26 13:16:45+00:00 +C596,confirm payment,2015-05-26 13:41:28+00:00,2015-05-26 13:33:50+00:00 +C701,send invoice,2015-05-26 14:26:26+00:00,2015-05-26 14:12:01+00:00 +C592,cancel order,2015-05-26 14:31:47+00:00,2015-05-26 14:13:23+00:00 +C599,confirm payment,2015-05-26 14:58:36+00:00,2015-05-26 14:50:25+00:00 +C722,place order,2015-05-26 14:54:48+00:00,2015-05-26 14:51:38+00:00 +C593,make delivery,2015-05-26 15:13:33+00:00,2015-05-26 14:57:15+00:00 +C635,prepare delivery,2015-05-26 15:53:03+00:00,2015-05-26 15:29:33+00:00 +C569,prepare delivery,2015-05-26 15:57:51+00:00,2015-05-26 15:32:13+00:00 +C572,prepare delivery,2015-05-26 18:13:15+00:00,2015-05-26 15:48:35+00:00 +C640,pay,2015-05-26 15:52:53+00:00,2015-05-26 15:50:20+00:00 +C599,make delivery,2015-05-26 16:06:29+00:00,2015-05-26 15:51:17+00:00 +C591,prepare delivery,2015-05-26 16:06:11+00:00,2015-05-26 16:03:13+00:00 +C587,prepare delivery,2015-05-26 16:11:37+00:00,2015-05-26 16:08:06+00:00 +C694,send invoice,2015-05-26 16:18:03+00:00,2015-05-26 16:11:43+00:00 +C652,pay,2015-05-26 16:35:59+00:00,2015-05-26 16:21:02+00:00 +C637,prepare delivery,2015-05-26 16:26:15+00:00,2015-05-26 16:22:36+00:00 +C698,send invoice,2015-05-26 16:33:27+00:00,2015-05-26 16:26:41+00:00 +C688,send invoice,2015-05-26 16:36:21+00:00,2015-05-26 16:30:02+00:00 +C604,make delivery,2015-05-26 16:49:58+00:00,2015-05-26 16:32:21+00:00 +C711,send invoice,2015-05-26 16:57:10+00:00,2015-05-26 16:45:26+00:00 +C629,prepare delivery,2015-05-26 17:12:27+00:00,2015-05-26 16:45:37+00:00 +C691,send invoice,2015-05-26 16:55:58+00:00,2015-05-26 16:51:45+00:00 +C723,place order,2015-05-26 17:07:40+00:00,2015-05-26 17:01:23+00:00 +C618,prepare delivery,2015-05-26 19:37:53+00:00,2015-05-26 17:04:23+00:00 +C604,confirm payment,2015-05-26 17:08:47+00:00,2015-05-26 17:05:28+00:00 +C651,pay,2015-05-26 18:12:26+00:00,2015-05-26 18:05:48+00:00 +C680,send invoice,2015-05-26 18:33:00+00:00,2015-05-26 18:17:07+00:00 +C724,place order,2015-05-26 20:31:20+00:00,2015-05-26 18:20:53+00:00 +C631,pay,2015-05-26 18:34:44+00:00,2015-05-26 18:29:32+00:00 +C636,pay,2015-05-26 20:11:04+00:00,2015-05-26 20:06:21+00:00 +C725,place order,2015-05-26 20:46:11+00:00,2015-05-26 20:38:54+00:00 +C589,prepare delivery,2015-05-26 20:51:30+00:00,2015-05-26 20:43:35+00:00 +C649,pay,2015-05-26 20:52:03+00:00,2015-05-26 20:48:41+00:00 +C616,make delivery,2015-05-26 21:33:42+00:00,2015-05-26 21:15:46+00:00 +C726,place order,2015-05-27 00:57:57+00:00,2015-05-27 00:54:36+00:00 +C598,make delivery,2015-05-27 08:58:18+00:00,2015-05-27 08:20:45+00:00 +C613,make delivery,2015-05-27 10:13:30+00:00,2015-05-27 08:46:13+00:00 +C626,prepare delivery,2015-05-27 11:25:59+00:00,2015-05-27 08:59:46+00:00 +C611,confirm payment,2015-05-27 09:13:52+00:00,2015-05-27 09:00:42+00:00 +C565,confirm payment,2015-05-27 09:14:33+00:00,2015-05-27 09:09:49+00:00 +C654,pay,2015-05-27 09:25:45+00:00,2015-05-27 09:21:22+00:00 +C615,make delivery,2015-05-27 10:07:38+00:00,2015-05-27 09:34:23+00:00 +C727,place order,2015-05-27 10:05:59+00:00,2015-05-27 10:00:10+00:00 +C625,send reminder,2015-05-27 10:34:00+00:00,2015-05-27 10:15:54+00:00 +C642,pay,2015-05-27 10:23:32+00:00,2015-05-27 10:16:20+00:00 +C577,prepare delivery,2015-05-27 10:30:56+00:00,2015-05-27 10:23:10+00:00 +C632,send reminder,2015-05-27 10:43:48+00:00,2015-05-27 10:24:59+00:00 +C619,prepare delivery,2015-05-27 10:42:10+00:00,2015-05-27 10:35:06+00:00 +C602,prepare delivery,2015-05-27 11:17:49+00:00,2015-05-27 10:53:05+00:00 +C605,cancel order,2015-05-27 11:13:32+00:00,2015-05-27 10:57:09+00:00 +C616,confirm payment,2015-05-27 11:05:48+00:00,2015-05-27 10:59:01+00:00 +C644,pay,2015-05-27 11:06:58+00:00,2015-05-27 11:02:25+00:00 +C608,make delivery,2015-05-27 11:28:13+00:00,2015-05-27 11:15:01+00:00 +C728,place order,2015-05-27 11:24:58+00:00,2015-05-27 11:18:28+00:00 +C628,prepare delivery,2015-05-27 11:21:53+00:00,2015-05-27 11:18:57+00:00 +C606,prepare delivery,2015-05-27 11:45:14+00:00,2015-05-27 11:38:37+00:00 +C704,send invoice,2015-05-27 12:27:55+00:00,2015-05-27 12:09:44+00:00 +C671,send reminder,2015-05-27 13:11:48+00:00,2015-05-27 12:48:00+00:00 +C613,confirm payment,2015-05-27 12:55:18+00:00,2015-05-27 12:50:02+00:00 +C607,prepare delivery,2015-05-27 12:59:41+00:00,2015-05-27 12:51:47+00:00 +C729,place order,2015-05-27 13:00:17+00:00,2015-05-27 12:55:03+00:00 +C575,prepare delivery,2015-05-27 13:09:10+00:00,2015-05-27 13:02:07+00:00 +C646,pay,2015-05-27 13:41:37+00:00,2015-05-27 13:20:45+00:00 +C598,confirm payment,2015-05-27 13:32:07+00:00,2015-05-27 13:26:32+00:00 +C635,make delivery,2015-05-27 14:01:28+00:00,2015-05-27 13:31:50+00:00 +C569,make delivery,2015-05-27 13:56:52+00:00,2015-05-27 13:33:35+00:00 +C700,send invoice,2015-05-27 13:42:35+00:00,2015-05-27 13:35:12+00:00 +C641,prepare delivery,2015-05-27 13:59:13+00:00,2015-05-27 13:52:01+00:00 +C591,make delivery,2015-05-27 14:15:15+00:00,2015-05-27 14:01:38+00:00 +C635,confirm payment,2015-05-27 14:26:47+00:00,2015-05-27 14:11:09+00:00 +C697,send invoice,2015-05-27 14:18:20+00:00,2015-05-27 14:14:25+00:00 +C618,confirm payment,2015-05-27 14:38:42+00:00,2015-05-27 14:31:17+00:00 +C612,prepare delivery,2015-05-27 14:54:24+00:00,2015-05-27 14:46:35+00:00 +C730,place order,2015-05-27 19:37:01+00:00,2015-05-27 15:08:13+00:00 +C593,confirm payment,2015-05-27 15:22:14+00:00,2015-05-27 15:13:24+00:00 +C637,make delivery,2015-05-27 15:42:29+00:00,2015-05-27 15:28:41+00:00 +C608,confirm payment,2015-05-27 15:57:34+00:00,2015-05-27 15:46:34+00:00 +C587,make delivery,2015-05-27 16:10:58+00:00,2015-05-27 16:00:45+00:00 +C731,place order,2015-05-27 16:38:11+00:00,2015-05-27 16:34:33+00:00 +C609,send reminder,2015-05-27 17:20:37+00:00,2015-05-27 16:41:59+00:00 +C572,make delivery,2015-05-27 18:21:42+00:00,2015-05-27 16:56:15+00:00 +C589,make delivery,2015-05-27 18:36:28+00:00,2015-05-27 17:20:25+00:00 +C569,confirm payment,2015-05-27 17:27:16+00:00,2015-05-27 17:20:30+00:00 +C618,make delivery,2015-05-27 18:08:33+00:00,2015-05-27 17:33:35+00:00 +C626,make delivery,2015-05-27 17:52:36+00:00,2015-05-27 17:35:32+00:00 +C615,confirm payment,2015-05-27 18:01:05+00:00,2015-05-27 17:53:03+00:00 +C637,confirm payment,2015-05-27 18:29:29+00:00,2015-05-27 18:11:48+00:00 +C732,place order,2015-05-27 18:30:44+00:00,2015-05-27 18:27:14+00:00 +C717,send invoice,2015-05-27 21:53:02+00:00,2015-05-27 19:12:54+00:00 +C629,make delivery,2015-05-27 19:51:24+00:00,2015-05-27 19:25:36+00:00 +C645,pay,2015-05-27 19:33:06+00:00,2015-05-27 19:29:21+00:00 +C733,place order,2015-05-27 21:02:28+00:00,2015-05-27 20:57:56+00:00 +C572,confirm payment,2015-05-27 22:15:05+00:00,2015-05-27 22:08:34+00:00 +C734,place order,2015-05-28 03:03:35+00:00,2015-05-28 02:48:48+00:00 +C657,pay,2015-05-28 08:07:59+00:00,2015-05-28 08:04:05+00:00 +C652,prepare delivery,2015-05-28 08:40:23+00:00,2015-05-28 08:37:23+00:00 +C582,prepare delivery,2015-05-28 09:04:54+00:00,2015-05-28 08:57:56+00:00 +C619,confirm payment,2015-05-28 09:04:37+00:00,2015-05-28 09:00:02+00:00 +C591,confirm payment,2015-05-28 09:37:02+00:00,2015-05-28 09:31:08+00:00 +C718,send invoice,2015-05-28 09:45:30+00:00,2015-05-28 09:41:00+00:00 +C720,send invoice,2015-05-28 09:54:29+00:00,2015-05-28 09:51:05+00:00 +C664,send reminder,2015-05-28 10:08:52+00:00,2015-05-28 09:52:11+00:00 +C575,confirm payment,2015-05-28 10:08:18+00:00,2015-05-28 10:01:02+00:00 +C712,send invoice,2015-05-28 10:07:26+00:00,2015-05-28 10:02:42+00:00 +C735,place order,2015-05-28 10:18:28+00:00,2015-05-28 10:05:48+00:00 +C606,confirm payment,2015-05-28 10:14:22+00:00,2015-05-28 10:06:20+00:00 +C703,send invoice,2015-05-28 12:38:15+00:00,2015-05-28 10:12:14+00:00 +C575,make delivery,2015-05-28 10:33:25+00:00,2015-05-28 10:23:27+00:00 +C650,pay,2015-05-28 10:43:27+00:00,2015-05-28 10:35:12+00:00 +C709,send invoice,2015-05-28 10:44:01+00:00,2015-05-28 10:37:53+00:00 +C629,confirm payment,2015-05-28 10:51:35+00:00,2015-05-28 10:43:45+00:00 +C628,make delivery,2015-05-28 10:57:31+00:00,2015-05-28 10:47:10+00:00 +C603,prepare delivery,2015-05-28 11:01:30+00:00,2015-05-28 10:54:11+00:00 +C729,send invoice,2015-05-28 11:07:35+00:00,2015-05-28 11:00:07+00:00 +C601,pay,2015-05-28 11:23:40+00:00,2015-05-28 11:18:56+00:00 +C654,prepare delivery,2015-05-28 11:23:50+00:00,2015-05-28 11:20:04+00:00 +C641,make delivery,2015-05-28 12:50:19+00:00,2015-05-28 11:24:50+00:00 +C736,place order,2015-05-28 15:34:16+00:00,2015-05-28 11:29:43+00:00 +C577,make delivery,2015-05-28 11:47:12+00:00,2015-05-28 11:33:23+00:00 +C602,make delivery,2015-05-28 13:15:00+00:00,2015-05-28 11:55:34+00:00 +C719,send invoice,2015-05-28 12:11:30+00:00,2015-05-28 11:57:27+00:00 +C619,make delivery,2015-05-28 12:27:31+00:00,2015-05-28 11:59:33+00:00 +C634,send reminder,2015-05-28 12:23:18+00:00,2015-05-28 12:16:05+00:00 +C610,prepare delivery,2015-05-28 12:47:07+00:00,2015-05-28 12:39:48+00:00 +C678,send reminder,2015-05-28 12:56:46+00:00,2015-05-28 12:42:01+00:00 +C708,send invoice,2015-05-28 12:56:24+00:00,2015-05-28 12:53:57+00:00 +C737,place order,2015-05-28 13:32:03+00:00,2015-05-28 13:17:34+00:00 +C607,make delivery,2015-05-28 13:29:19+00:00,2015-05-28 13:18:41+00:00 +C648,pay,2015-05-28 13:39:44+00:00,2015-05-28 13:31:32+00:00 +C587,confirm payment,2015-05-28 14:12:52+00:00,2015-05-28 14:05:31+00:00 +C707,send invoice,2015-05-28 14:15:52+00:00,2015-05-28 14:11:24+00:00 +C667,pay,2015-05-28 14:39:23+00:00,2015-05-28 14:37:02+00:00 +C606,make delivery,2015-05-28 15:06:12+00:00,2015-05-28 14:50:07+00:00 +C738,place order,2015-05-28 15:15:26+00:00,2015-05-28 14:53:15+00:00 +C623,prepare delivery,2015-05-28 17:30:58+00:00,2015-05-28 14:58:09+00:00 +C675,send reminder,2015-05-28 15:06:13+00:00,2015-05-28 14:58:32+00:00 +C647,pay,2015-05-28 15:06:32+00:00,2015-05-28 15:02:48+00:00 +C724,send invoice,2015-05-28 15:11:39+00:00,2015-05-28 15:07:33+00:00 +C705,send invoice,2015-05-28 15:20:07+00:00,2015-05-28 15:14:48+00:00 +C725,send invoice,2015-05-28 15:43:19+00:00,2015-05-28 15:40:41+00:00 +C689,send reminder,2015-05-28 16:17:58+00:00,2015-05-28 15:48:24+00:00 +C612,make delivery,2015-05-28 16:01:21+00:00,2015-05-28 15:50:14+00:00 +C715,send invoice,2015-05-28 15:54:06+00:00,2015-05-28 15:50:38+00:00 +C609,cancel order,2015-05-28 15:59:54+00:00,2015-05-28 15:50:55+00:00 +C602,confirm payment,2015-05-28 16:06:56+00:00,2015-05-28 16:02:22+00:00 +C600,pay,2015-05-28 16:14:46+00:00,2015-05-28 16:09:50+00:00 +C626,confirm payment,2015-05-28 16:28:18+00:00,2015-05-28 16:21:40+00:00 +C607,confirm payment,2015-05-28 16:26:15+00:00,2015-05-28 16:22:25+00:00 +C676,send reminder,2015-05-28 17:03:57+00:00,2015-05-28 16:45:04+00:00 +C716,send invoice,2015-05-28 16:56:22+00:00,2015-05-28 16:49:17+00:00 +C739,place order,2015-05-28 20:30:08+00:00,2015-05-28 17:04:37+00:00 +C641,confirm payment,2015-05-28 17:13:02+00:00,2015-05-28 17:05:20+00:00 +C722,send invoice,2015-05-28 17:20:35+00:00,2015-05-28 17:14:39+00:00 +C589,confirm payment,2015-05-28 17:31:57+00:00,2015-05-28 17:26:34+00:00 +C628,confirm payment,2015-05-28 18:04:10+00:00,2015-05-28 17:59:24+00:00 +C740,place order,2015-05-28 18:33:51+00:00,2015-05-28 18:27:21+00:00 +C638,send reminder,2015-05-28 19:09:04+00:00,2015-05-28 18:35:09+00:00 +C643,pay,2015-05-28 18:44:51+00:00,2015-05-28 18:37:14+00:00 +C585,prepare delivery,2015-05-28 19:05:15+00:00,2015-05-28 18:40:13+00:00 +C624,prepare delivery,2015-05-28 19:09:57+00:00,2015-05-28 19:05:58+00:00 +C652,make delivery,2015-05-28 19:52:10+00:00,2015-05-28 19:23:00+00:00 +C655,pay,2015-05-28 19:40:45+00:00,2015-05-28 19:34:55+00:00 +C741,place order,2015-05-28 21:05:54+00:00,2015-05-28 20:58:18+00:00 +C659,pay,2015-05-28 22:34:47+00:00,2015-05-28 22:30:04+00:00 +C742,place order,2015-05-29 02:55:16+00:00,2015-05-29 02:51:00+00:00 +C668,pay,2015-05-29 08:31:59+00:00,2015-05-29 08:24:59+00:00 +C662,pay,2015-05-29 08:37:39+00:00,2015-05-29 08:29:11+00:00 +C630,prepare delivery,2015-05-29 11:12:34+00:00,2015-05-29 08:48:44+00:00 +C727,send invoice,2015-05-29 09:01:51+00:00,2015-05-29 08:54:46+00:00 +C669,pay,2015-05-29 09:08:25+00:00,2015-05-29 09:01:15+00:00 +C582,make delivery,2015-05-29 09:49:40+00:00,2015-05-29 09:14:01+00:00 +C612,confirm payment,2015-05-29 09:34:08+00:00,2015-05-29 09:23:20+00:00 +C617,prepare delivery,2015-05-29 12:23:41+00:00,2015-05-29 09:56:29+00:00 +C743,place order,2015-05-29 10:22:57+00:00,2015-05-29 10:08:13+00:00 +C577,confirm payment,2015-05-29 10:18:31+00:00,2015-05-29 10:08:48+00:00 +C671,pay,2015-05-29 10:45:26+00:00,2015-05-29 10:36:51+00:00 +C651,prepare delivery,2015-05-29 10:46:00+00:00,2015-05-29 10:42:48+00:00 +C633,prepare delivery,2015-05-29 10:48:54+00:00,2015-05-29 10:45:23+00:00 +C620,send reminder,2015-05-29 11:24:30+00:00,2015-05-29 11:01:16+00:00 +C603,confirm payment,2015-05-29 11:16:48+00:00,2015-05-29 11:07:44+00:00 +C665,send reminder,2015-05-29 11:26:15+00:00,2015-05-29 11:16:11+00:00 +C603,make delivery,2015-05-29 11:38:59+00:00,2015-05-29 11:28:17+00:00 +C744,place order,2015-05-29 11:38:32+00:00,2015-05-29 11:34:33+00:00 +C674,pay,2015-05-29 11:46:47+00:00,2015-05-29 11:38:12+00:00 +C582,confirm payment,2015-05-29 12:08:07+00:00,2015-05-29 12:00:30+00:00 +C610,make delivery,2015-05-29 13:08:36+00:00,2015-05-29 12:59:09+00:00 +C632,cancel order,2015-05-29 13:15:57+00:00,2015-05-29 13:04:00+00:00 +C745,place order,2015-05-29 13:35:46+00:00,2015-05-29 13:27:13+00:00 +C652,confirm payment,2015-05-29 13:41:59+00:00,2015-05-29 13:38:28+00:00 +C623,confirm payment,2015-05-29 14:00:54+00:00,2015-05-29 13:50:38+00:00 +C654,make delivery,2015-05-29 14:34:14+00:00,2015-05-29 14:20:43+00:00 +C636,prepare delivery,2015-05-29 14:48:16+00:00,2015-05-29 14:41:42+00:00 +C642,prepare delivery,2015-05-29 14:54:14+00:00,2015-05-29 14:47:02+00:00 +C640,prepare delivery,2015-05-29 15:20:57+00:00,2015-05-29 14:56:16+00:00 +C746,place order,2015-05-29 15:18:04+00:00,2015-05-29 15:12:34+00:00 +C644,prepare delivery,2015-05-29 15:40:13+00:00,2015-05-29 15:36:40+00:00 +C670,send reminder,2015-05-29 15:55:47+00:00,2015-05-29 15:42:34+00:00 +C610,confirm payment,2015-05-29 16:11:22+00:00,2015-05-29 16:04:34+00:00 +C621,prepare delivery,2015-05-29 16:40:22+00:00,2015-05-29 16:37:12+00:00 +C639,prepare delivery,2015-05-29 16:44:47+00:00,2015-05-29 16:37:53+00:00 +C747,place order,2015-05-29 16:56:56+00:00,2015-05-29 16:43:15+00:00 +C646,prepare delivery,2015-05-29 19:22:00+00:00,2015-05-29 16:44:47+00:00 +C654,confirm payment,2015-05-29 16:59:39+00:00,2015-05-29 16:48:49+00:00 +C661,pay,2015-05-29 17:04:38+00:00,2015-05-29 16:58:47+00:00 +C713,send invoice,2015-05-29 17:27:51+00:00,2015-05-29 17:19:49+00:00 +C726,send invoice,2015-05-29 17:37:29+00:00,2015-05-29 17:34:34+00:00 +C630,make delivery,2015-05-29 18:28:30+00:00,2015-05-29 18:03:10+00:00 +C585,make delivery,2015-05-29 18:50:12+00:00,2015-05-29 18:37:50+00:00 +C748,place order,2015-05-29 18:55:33+00:00,2015-05-29 18:44:37+00:00 +C623,make delivery,2015-05-29 19:09:56+00:00,2015-05-29 18:57:26+00:00 +C732,send invoice,2015-05-29 21:19:25+00:00,2015-05-29 21:13:58+00:00 +C749,place order,2015-05-29 21:59:04+00:00,2015-05-29 21:50:05+00:00 +C750,place order,2015-05-30 18:50:32+00:00,2015-05-30 14:43:43+00:00 +C751,place order,2015-05-31 15:09:52+00:00,2015-05-31 15:04:38+00:00 +C682,pay,2015-06-01 05:32:28+00:00,2015-06-01 05:27:27+00:00 +C752,place order,2015-06-01 08:56:37+00:00,2015-06-01 07:04:28+00:00 +C624,make delivery,2015-06-01 09:55:58+00:00,2015-06-01 08:21:54+00:00 +C585,confirm payment,2015-06-01 09:10:05+00:00,2015-06-01 09:02:06+00:00 +C753,place order,2015-06-01 09:51:22+00:00,2015-06-01 09:47:02+00:00 +C655,prepare delivery,2015-06-01 10:10:14+00:00,2015-06-01 10:02:55+00:00 +C693,send reminder,2015-06-01 10:31:41+00:00,2015-06-01 10:09:17+00:00 +C651,make delivery,2015-06-01 10:31:48+00:00,2015-06-01 10:09:17+00:00 +C710,send invoice,2015-06-01 10:18:57+00:00,2015-06-01 10:14:52+00:00 +C633,make delivery,2015-06-01 10:55:16+00:00,2015-06-01 10:16:14+00:00 +C689,pay,2015-06-01 10:35:19+00:00,2015-06-01 10:32:11+00:00 +C706,send invoice,2015-06-01 10:40:41+00:00,2015-06-01 10:36:37+00:00 +C723,send invoice,2015-06-01 11:03:37+00:00,2015-06-01 10:59:03+00:00 +C630,confirm payment,2015-06-01 11:19:50+00:00,2015-06-01 11:11:03+00:00 +C647,prepare delivery,2015-06-01 11:43:41+00:00,2015-06-01 11:36:38+00:00 +C617,make delivery,2015-06-01 11:53:04+00:00,2015-06-01 11:41:46+00:00 +C730,send invoice,2015-06-01 12:00:08+00:00,2015-06-01 11:51:01+00:00 +C754,place order,2015-06-01 14:04:20+00:00,2015-06-01 11:52:11+00:00 +C663,send reminder,2015-06-01 12:08:32+00:00,2015-06-01 11:57:25+00:00 +C627,prepare delivery,2015-06-01 12:18:58+00:00,2015-06-01 12:16:04+00:00 +C737,send invoice,2015-06-01 12:32:18+00:00,2015-06-01 12:27:33+00:00 +C636,make delivery,2015-06-01 13:49:00+00:00,2015-06-01 13:10:45+00:00 +C755,place order,2015-06-01 14:12:28+00:00,2015-06-01 14:02:29+00:00 +C642,confirm payment,2015-06-01 14:19:28+00:00,2015-06-01 14:12:33+00:00 +C651,confirm payment,2015-06-01 14:38:11+00:00,2015-06-01 14:34:46+00:00 +C734,send invoice,2015-06-01 15:04:20+00:00,2015-06-01 14:57:36+00:00 +C600,prepare delivery,2015-06-01 15:06:35+00:00,2015-06-01 15:03:02+00:00 +C658,pay,2015-06-01 15:37:53+00:00,2015-06-01 15:07:32+00:00 +C690,pay,2015-06-01 15:23:23+00:00,2015-06-01 15:18:24+00:00 +C642,make delivery,2015-06-01 16:17:15+00:00,2015-06-01 15:21:52+00:00 +C748,send invoice,2015-06-01 15:29:59+00:00,2015-06-01 15:21:54+00:00 +C756,place order,2015-06-01 15:25:45+00:00,2015-06-01 15:23:05+00:00 +C738,send invoice,2015-06-01 15:33:17+00:00,2015-06-01 15:29:37+00:00 +C634,cancel order,2015-06-01 15:44:45+00:00,2015-06-01 15:30:35+00:00 +C702,send reminder,2015-06-01 15:54:53+00:00,2015-06-01 15:43:05+00:00 +C640,make delivery,2015-06-01 16:04:25+00:00,2015-06-01 15:48:47+00:00 +C633,confirm payment,2015-06-01 16:06:14+00:00,2015-06-01 15:58:34+00:00 +C639,make delivery,2015-06-01 16:36:46+00:00,2015-06-01 16:24:27+00:00 +C736,send invoice,2015-06-01 16:58:08+00:00,2015-06-01 16:38:11+00:00 +C646,make delivery,2015-06-01 17:23:36+00:00,2015-06-01 16:44:15+00:00 +C745,send invoice,2015-06-01 17:12:02+00:00,2015-06-01 17:02:11+00:00 +C757,place order,2015-06-01 17:16:40+00:00,2015-06-01 17:04:18+00:00 +C644,make delivery,2015-06-01 17:46:09+00:00,2015-06-01 17:35:25+00:00 +C640,confirm payment,2015-06-01 18:14:56+00:00,2015-06-01 17:35:27+00:00 +C671,prepare delivery,2015-06-01 18:14:48+00:00,2015-06-01 18:07:03+00:00 +C645,prepare delivery,2015-06-01 18:17:21+00:00,2015-06-01 18:13:41+00:00 +C758,place order,2015-06-01 18:45:06+00:00,2015-06-01 18:26:43+00:00 +C621,make delivery,2015-06-01 18:42:35+00:00,2015-06-01 18:28:42+00:00 +C660,send reminder,2015-06-01 19:13:50+00:00,2015-06-01 18:31:37+00:00 +C656,pay,2015-06-01 18:38:10+00:00,2015-06-01 18:31:44+00:00 +C655,make delivery,2015-06-01 19:01:29+00:00,2015-06-01 18:34:51+00:00 +C686,pay,2015-06-01 20:23:05+00:00,2015-06-01 20:19:32+00:00 +C759,place order,2015-06-01 21:07:40+00:00,2015-06-01 20:56:23+00:00 +C760,place order,2015-06-02 02:48:58+00:00,2015-06-02 02:39:30+00:00 +C624,confirm payment,2015-06-02 08:12:19+00:00,2015-06-02 08:06:31+00:00 +C631,prepare delivery,2015-06-02 08:38:35+00:00,2015-06-02 08:34:49+00:00 +C636,confirm payment,2015-06-02 09:42:02+00:00,2015-06-02 09:37:36+00:00 +C752,send invoice,2015-06-02 09:53:08+00:00,2015-06-02 09:45:06+00:00 +C689,prepare delivery,2015-06-02 09:56:46+00:00,2015-06-02 09:50:00+00:00 +C684,pay,2015-06-02 09:54:24+00:00,2015-06-02 09:51:59+00:00 +C622,prepare delivery,2015-06-02 10:00:57+00:00,2015-06-02 09:53:00+00:00 +C761,place order,2015-06-02 10:10:07+00:00,2015-06-02 09:55:35+00:00 +C728,send invoice,2015-06-02 10:35:02+00:00,2015-06-02 10:07:21+00:00 +C731,send invoice,2015-06-02 10:48:22+00:00,2015-06-02 10:20:09+00:00 +C687,send reminder,2015-06-02 11:01:42+00:00,2015-06-02 10:32:39+00:00 +C750,send invoice,2015-06-02 10:40:53+00:00,2015-06-02 10:36:29+00:00 +C661,prepare delivery,2015-06-02 10:51:12+00:00,2015-06-02 10:43:18+00:00 +C663,cancel order,2015-06-02 11:07:00+00:00,2015-06-02 10:58:50+00:00 +C653,send reminder,2015-06-02 11:36:09+00:00,2015-06-02 11:01:00+00:00 +C647,make delivery,2015-06-02 11:41:03+00:00,2015-06-02 11:28:36+00:00 +C678,pay,2015-06-02 11:45:05+00:00,2015-06-02 11:38:52+00:00 +C650,prepare delivery,2015-06-02 12:05:58+00:00,2015-06-02 11:39:31+00:00 +C617,confirm payment,2015-06-02 11:50:25+00:00,2015-06-02 11:47:55+00:00 +C644,confirm payment,2015-06-02 12:00:44+00:00,2015-06-02 11:56:21+00:00 +C627,make delivery,2015-06-02 12:37:47+00:00,2015-06-02 12:04:47+00:00 +C762,place order,2015-06-02 15:45:16+00:00,2015-06-02 12:09:17+00:00 +C655,confirm payment,2015-06-02 12:35:40+00:00,2015-06-02 12:17:41+00:00 +C659,prepare delivery,2015-06-02 12:29:08+00:00,2015-06-02 12:21:56+00:00 +C746,send invoice,2015-06-02 12:41:51+00:00,2015-06-02 12:33:20+00:00 +C638,cancel order,2015-06-02 12:59:29+00:00,2015-06-02 12:35:33+00:00 +C649,prepare delivery,2015-06-02 12:47:17+00:00,2015-06-02 12:40:53+00:00 +C627,confirm payment,2015-06-02 13:35:20+00:00,2015-06-02 13:28:26+00:00 +C763,place order,2015-06-02 13:39:58+00:00,2015-06-02 13:36:41+00:00 +C600,make delivery,2015-06-02 14:20:50+00:00,2015-06-02 13:53:39+00:00 +C744,send invoice,2015-06-02 13:57:12+00:00,2015-06-02 13:54:24+00:00 +C694,send reminder,2015-06-02 14:35:58+00:00,2015-06-02 14:12:22+00:00 +C679,pay,2015-06-02 14:36:53+00:00,2015-06-02 14:34:44+00:00 +C646,confirm payment,2015-06-02 14:44:05+00:00,2015-06-02 14:36:10+00:00 +C667,prepare delivery,2015-06-02 14:50:03+00:00,2015-06-02 14:42:10+00:00 +C620,pay,2015-06-02 14:55:11+00:00,2015-06-02 14:49:57+00:00 +C671,confirm payment,2015-06-02 14:59:19+00:00,2015-06-02 14:54:40+00:00 +C625,pay,2015-06-02 15:10:49+00:00,2015-06-02 14:55:44+00:00 +C682,prepare delivery,2015-06-02 15:30:49+00:00,2015-06-02 15:05:15+00:00 +C701,send reminder,2015-06-02 15:32:45+00:00,2015-06-02 15:10:35+00:00 +C714,send reminder,2015-06-02 15:40:27+00:00,2015-06-02 15:19:41+00:00 +C647,confirm payment,2015-06-02 15:34:59+00:00,2015-06-02 15:24:03+00:00 +C764,place order,2015-06-02 15:37:19+00:00,2015-06-02 15:31:29+00:00 +C621,confirm payment,2015-06-02 15:51:29+00:00,2015-06-02 15:46:27+00:00 +C733,send invoice,2015-06-02 16:31:06+00:00,2015-06-02 16:20:14+00:00 +C639,confirm payment,2015-06-02 16:59:38+00:00,2015-06-02 16:52:28+00:00 +C645,confirm payment,2015-06-02 17:10:00+00:00,2015-06-02 17:01:44+00:00 +C671,make delivery,2015-06-02 17:23:15+00:00,2015-06-02 17:07:15+00:00 +C645,make delivery,2015-06-02 18:04:06+00:00,2015-06-02 17:12:22+00:00 +C765,place order,2015-06-02 17:55:33+00:00,2015-06-02 17:21:05+00:00 +C721,send invoice,2015-06-02 17:31:41+00:00,2015-06-02 17:24:16+00:00 +C601,prepare delivery,2015-06-02 20:18:25+00:00,2015-06-02 17:40:24+00:00 +C670,pay,2015-06-02 18:27:59+00:00,2015-06-02 18:22:18+00:00 +C688,send reminder,2015-06-02 19:07:50+00:00,2015-06-02 18:44:37+00:00 +C766,place order,2015-06-02 19:06:34+00:00,2015-06-02 19:00:18+00:00 +C666,pay,2015-06-02 20:07:24+00:00,2015-06-02 20:02:33+00:00 +C661,make delivery,2015-06-02 21:23:18+00:00,2015-06-02 21:09:02+00:00 +C767,place order,2015-06-02 21:48:03+00:00,2015-06-02 21:36:50+00:00 +C653,cancel order,2015-06-02 22:08:38+00:00,2015-06-02 21:54:45+00:00 +C768,place order,2015-06-03 05:49:23+00:00,2015-06-03 05:42:12+00:00 +C735,send invoice,2015-06-03 08:11:01+00:00,2015-06-03 08:08:01+00:00 +C680,send reminder,2015-06-03 09:14:25+00:00,2015-06-03 09:05:31+00:00 +C747,send invoice,2015-06-03 09:15:11+00:00,2015-06-03 09:06:20+00:00 +C631,make delivery,2015-06-03 09:39:22+00:00,2015-06-03 09:24:47+00:00 +C622,make delivery,2015-06-03 10:00:38+00:00,2015-06-03 09:34:36+00:00 +C689,make delivery,2015-06-03 11:09:40+00:00,2015-06-03 09:36:55+00:00 +C689,confirm payment,2015-06-03 09:54:20+00:00,2015-06-03 09:47:03+00:00 +C740,send invoice,2015-06-03 09:54:18+00:00,2015-06-03 09:51:04+00:00 +C691,send reminder,2015-06-03 10:17:11+00:00,2015-06-03 10:07:08+00:00 +C658,prepare delivery,2015-06-03 10:37:48+00:00,2015-06-03 10:13:11+00:00 +C769,place order,2015-06-03 10:56:54+00:00,2015-06-03 10:16:33+00:00 +C693,pay,2015-06-03 10:23:55+00:00,2015-06-03 10:19:48+00:00 +C660,pay,2015-06-03 10:32:23+00:00,2015-06-03 10:29:17+00:00 +C650,make delivery,2015-06-03 10:57:31+00:00,2015-06-03 10:39:55+00:00 +C739,send invoice,2015-06-03 11:08:20+00:00,2015-06-03 11:00:36+00:00 +C661,confirm payment,2015-06-03 11:30:38+00:00,2015-06-03 11:19:40+00:00 +C648,prepare delivery,2015-06-03 11:39:07+00:00,2015-06-03 11:35:55+00:00 +C682,confirm payment,2015-06-03 11:54:16+00:00,2015-06-03 11:49:15+00:00 +C770,place order,2015-06-03 13:39:03+00:00,2015-06-03 11:51:13+00:00 +C700,send reminder,2015-06-03 12:31:25+00:00,2015-06-03 12:13:34+00:00 +C649,make delivery,2015-06-03 13:03:10+00:00,2015-06-03 12:49:31+00:00 +C697,send reminder,2015-06-03 13:10:46+00:00,2015-06-03 12:49:43+00:00 +C667,make delivery,2015-06-03 13:35:34+00:00,2015-06-03 13:00:14+00:00 +C659,make delivery,2015-06-03 13:37:27+00:00,2015-06-03 13:22:24+00:00 +C682,make delivery,2015-06-03 14:31:56+00:00,2015-06-03 13:37:55+00:00 +C703,pay,2015-06-03 13:49:15+00:00,2015-06-03 13:46:50+00:00 +C771,place order,2015-06-03 14:11:27+00:00,2015-06-03 14:00:33+00:00 +C600,confirm payment,2015-06-03 14:15:04+00:00,2015-06-03 14:04:46+00:00 +C672,pay,2015-06-03 14:28:43+00:00,2015-06-03 14:22:45+00:00 +C694,pay,2015-06-03 14:42:08+00:00,2015-06-03 14:39:22+00:00 +C753,send invoice,2015-06-03 15:04:12+00:00,2015-06-03 14:58:58+00:00 +C667,confirm payment,2015-06-03 15:16:12+00:00,2015-06-03 15:07:31+00:00 +C772,place order,2015-06-03 15:41:29+00:00,2015-06-03 15:19:13+00:00 +C665,pay,2015-06-03 15:52:37+00:00,2015-06-03 15:46:55+00:00 +C677,pay,2015-06-03 16:05:46+00:00,2015-06-03 15:59:07+00:00 +C759,send invoice,2015-06-03 16:05:36+00:00,2015-06-03 16:02:05+00:00 +C601,make delivery,2015-06-03 16:51:30+00:00,2015-06-03 16:03:44+00:00 +C620,prepare delivery,2015-06-03 16:23:09+00:00,2015-06-03 16:20:00+00:00 +C631,confirm payment,2015-06-03 16:32:31+00:00,2015-06-03 16:24:59+00:00 +C657,prepare delivery,2015-06-03 16:35:28+00:00,2015-06-03 16:29:46+00:00 +C743,send invoice,2015-06-03 16:37:20+00:00,2015-06-03 16:35:12+00:00 +C770,send invoice,2015-06-03 16:57:39+00:00,2015-06-03 16:51:17+00:00 +C773,place order,2015-06-03 17:00:40+00:00,2015-06-03 16:56:34+00:00 +C649,confirm payment,2015-06-03 17:09:00+00:00,2015-06-03 17:01:08+00:00 +C692,pay,2015-06-03 17:18:14+00:00,2015-06-03 17:13:55+00:00 +C714,pay,2015-06-03 17:43:24+00:00,2015-06-03 17:40:15+00:00 +C622,confirm payment,2015-06-03 17:57:38+00:00,2015-06-03 17:52:04+00:00 +C774,place order,2015-06-03 19:16:34+00:00,2015-06-03 19:11:15+00:00 +C690,prepare delivery,2015-06-03 20:35:43+00:00,2015-06-03 20:32:52+00:00 +C775,place order,2015-06-03 22:33:51+00:00,2015-06-03 21:58:44+00:00 +C776,place order,2015-06-04 07:59:17+00:00,2015-06-04 07:53:36+00:00 +C751,send invoice,2015-06-04 09:33:10+00:00,2015-06-04 09:06:36+00:00 +C681,pay,2015-06-04 09:29:58+00:00,2015-06-04 09:24:45+00:00 +C729,send reminder,2015-06-04 09:41:14+00:00,2015-06-04 09:33:52+00:00 +C648,make delivery,2015-06-04 10:09:12+00:00,2015-06-04 09:41:39+00:00 +C658,make delivery,2015-06-04 10:37:40+00:00,2015-06-04 10:00:19+00:00 +C706,pay,2015-06-04 10:14:56+00:00,2015-06-04 10:12:09+00:00 +C686,prepare delivery,2015-06-04 10:20:24+00:00,2015-06-04 10:16:40+00:00 +C777,place order,2015-06-04 10:54:14+00:00,2015-06-04 10:41:05+00:00 +C666,prepare delivery,2015-06-04 11:03:01+00:00,2015-06-04 10:55:50+00:00 +C658,confirm payment,2015-06-04 11:05:42+00:00,2015-06-04 11:00:20+00:00 +C650,confirm payment,2015-06-04 11:16:35+00:00,2015-06-04 11:08:38+00:00 +C659,confirm payment,2015-06-04 11:26:56+00:00,2015-06-04 11:20:06+00:00 +C741,send invoice,2015-06-04 11:47:30+00:00,2015-06-04 11:40:30+00:00 +C601,confirm payment,2015-06-04 11:53:39+00:00,2015-06-04 11:45:16+00:00 +C769,send invoice,2015-06-04 11:52:39+00:00,2015-06-04 11:48:58+00:00 +C643,prepare delivery,2015-06-04 12:02:59+00:00,2015-06-04 11:56:16+00:00 +C699,pay,2015-06-04 11:59:43+00:00,2015-06-04 11:57:06+00:00 +C768,send invoice,2015-06-04 12:23:22+00:00,2015-06-04 12:16:11+00:00 +C778,place order,2015-06-04 12:45:44+00:00,2015-06-04 12:40:17+00:00 +C664,send reminder,2015-06-04 12:58:20+00:00,2015-06-04 12:48:04+00:00 +C657,confirm payment,2015-06-04 14:06:18+00:00,2015-06-04 13:58:23+00:00 +C675,send reminder,2015-06-04 14:31:05+00:00,2015-06-04 14:10:12+00:00 +C720,send reminder,2015-06-04 14:58:46+00:00,2015-06-04 14:14:45+00:00 +C779,place order,2015-06-04 15:31:00+00:00,2015-06-04 14:38:42+00:00 +C763,send invoice,2015-06-04 14:52:06+00:00,2015-06-04 14:48:05+00:00 +C648,confirm payment,2015-06-04 18:31:08+00:00,2015-06-04 15:05:31+00:00 +C620,confirm payment,2015-06-04 15:39:37+00:00,2015-06-04 15:32:02+00:00 +C708,send reminder,2015-06-04 15:56:49+00:00,2015-06-04 15:34:29+00:00 +C657,make delivery,2015-06-04 17:03:32+00:00,2015-06-04 15:43:46+00:00 +C676,send reminder,2015-06-04 16:27:04+00:00,2015-06-04 16:18:04+00:00 +C620,make delivery,2015-06-04 16:33:06+00:00,2015-06-04 16:23:35+00:00 +C674,prepare delivery,2015-06-04 16:26:35+00:00,2015-06-04 16:23:38+00:00 +C780,place order,2015-06-04 16:40:51+00:00,2015-06-04 16:35:31+00:00 +C773,send invoice,2015-06-04 17:11:10+00:00,2015-06-04 17:06:24+00:00 +C742,send invoice,2015-06-04 17:16:08+00:00,2015-06-04 17:08:42+00:00 +C695,pay,2015-06-04 17:25:01+00:00,2015-06-04 17:20:31+00:00 +C757,send invoice,2015-06-04 18:05:29+00:00,2015-06-04 17:59:22+00:00 +C700,pay,2015-06-04 18:18:45+00:00,2015-06-04 18:11:40+00:00 +C690,make delivery,2015-06-04 18:57:26+00:00,2015-06-04 18:27:29+00:00 +C781,place order,2015-06-04 18:34:29+00:00,2015-06-04 18:29:09+00:00 +C686,make delivery,2015-06-04 19:12:13+00:00,2015-06-04 18:42:52+00:00 +C665,prepare delivery,2015-06-04 20:46:29+00:00,2015-06-04 20:39:09+00:00 +C782,place order,2015-06-04 21:42:06+00:00,2015-06-04 21:03:41+00:00 +C673,pay,2015-06-04 23:12:59+00:00,2015-06-04 23:09:06+00:00 +C783,place order,2015-06-05 02:28:27+00:00,2015-06-05 02:23:18+00:00 +C722,send reminder,2015-06-05 09:07:30+00:00,2015-06-05 08:53:44+00:00 +C760,send invoice,2015-06-05 09:17:06+00:00,2015-06-05 09:11:36+00:00 +C688,pay,2015-06-05 09:35:31+00:00,2015-06-05 09:28:29+00:00 +C625,prepare delivery,2015-06-05 09:37:20+00:00,2015-06-05 09:33:41+00:00 +C784,place order,2015-06-05 09:47:52+00:00,2015-06-05 09:37:46+00:00 +C716,send reminder,2015-06-05 09:59:23+00:00,2015-06-05 09:45:07+00:00 +C766,send invoice,2015-06-05 10:27:14+00:00,2015-06-05 10:21:25+00:00 +C755,send invoice,2015-06-05 10:44:34+00:00,2015-06-05 10:40:25+00:00 +C767,send invoice,2015-06-05 11:06:43+00:00,2015-06-05 10:59:40+00:00 +C669,prepare delivery,2015-06-05 13:47:05+00:00,2015-06-05 11:07:45+00:00 +C785,place order,2015-06-05 11:47:48+00:00,2015-06-05 11:33:39+00:00 +C643,make delivery,2015-06-05 11:47:12+00:00,2015-06-05 11:37:48+00:00 +C660,prepare delivery,2015-06-05 11:47:10+00:00,2015-06-05 11:44:02+00:00 +C676,cancel order,2015-06-05 12:06:22+00:00,2015-06-05 11:50:08+00:00 +C666,make delivery,2015-06-05 12:14:15+00:00,2015-06-05 11:59:48+00:00 +C668,prepare delivery,2015-06-05 12:27:22+00:00,2015-06-05 12:24:34+00:00 +C707,pay,2015-06-05 12:56:53+00:00,2015-06-05 12:48:35+00:00 +C643,confirm payment,2015-06-05 12:54:50+00:00,2015-06-05 12:52:04+00:00 +C786,place order,2015-06-05 13:32:42+00:00,2015-06-05 13:25:25+00:00 +C756,send invoice,2015-06-05 13:32:25+00:00,2015-06-05 13:25:32+00:00 +C690,confirm payment,2015-06-05 13:56:18+00:00,2015-06-05 13:49:15+00:00 +C662,prepare delivery,2015-06-05 13:52:07+00:00,2015-06-05 13:49:16+00:00 +C762,send invoice,2015-06-05 14:01:40+00:00,2015-06-05 13:56:01+00:00 +C684,prepare delivery,2015-06-05 14:03:24+00:00,2015-06-05 13:56:17+00:00 +C675,pay,2015-06-05 14:22:01+00:00,2015-06-05 14:14:03+00:00 +C709,pay,2015-06-05 14:43:25+00:00,2015-06-05 14:36:32+00:00 +C683,pay,2015-06-05 15:09:43+00:00,2015-06-05 15:02:54+00:00 +C787,place order,2015-06-05 15:18:25+00:00,2015-06-05 15:08:57+00:00 +C656,prepare delivery,2015-06-05 15:13:40+00:00,2015-06-05 15:10:05+00:00 +C666,confirm payment,2015-06-05 15:21:27+00:00,2015-06-05 15:12:20+00:00 +C681,prepare delivery,2015-06-05 15:23:16+00:00,2015-06-05 15:15:46+00:00 +C749,send invoice,2015-06-05 15:32:48+00:00,2015-06-05 15:28:18+00:00 +C678,prepare delivery,2015-06-05 15:36:35+00:00,2015-06-05 15:29:29+00:00 +C710,pay,2015-06-05 15:37:18+00:00,2015-06-05 15:31:37+00:00 +C703,prepare delivery,2015-06-05 15:38:28+00:00,2015-06-05 15:34:29+00:00 +C764,send invoice,2015-06-05 16:03:30+00:00,2015-06-05 15:56:57+00:00 +C778,send invoice,2015-06-05 16:18:52+00:00,2015-06-05 16:13:55+00:00 +C761,send invoice,2015-06-05 16:20:21+00:00,2015-06-05 16:16:25+00:00 +C674,make delivery,2015-06-05 16:32:48+00:00,2015-06-05 16:22:30+00:00 +C665,confirm payment,2015-06-05 16:36:34+00:00,2015-06-05 16:28:35+00:00 +C788,place order,2015-06-05 16:40:04+00:00,2015-06-05 16:36:01+00:00 +C789,place order,2015-06-05 18:32:47+00:00,2015-06-05 18:30:10+00:00 +C704,pay,2015-06-05 20:18:25+00:00,2015-06-05 20:11:45+00:00 +C790,place order,2015-06-05 21:19:19+00:00,2015-06-05 21:06:44+00:00 +C665,make delivery,2015-06-05 23:53:50+00:00,2015-06-05 22:14:30+00:00 +C791,place order,2015-06-06 10:28:44+00:00,2015-06-06 10:23:36+00:00 +C792,place order,2015-06-07 14:55:47+00:00,2015-06-07 10:24:24+00:00 +C685,pay,2015-06-07 18:08:05+00:00,2015-06-07 18:03:25+00:00 +C793,place order,2015-06-08 02:51:13+00:00,2015-06-08 02:44:00+00:00 +C727,pay,2015-06-08 09:00:35+00:00,2015-06-08 08:53:27+00:00 +C699,prepare delivery,2015-06-08 09:53:19+00:00,2015-06-08 09:39:10+00:00 +C696,pay,2015-06-08 09:44:49+00:00,2015-06-08 09:39:19+00:00 +C686,confirm payment,2015-06-08 09:51:55+00:00,2015-06-08 09:45:23+00:00 +C784,send invoice,2015-06-08 09:52:02+00:00,2015-06-08 09:46:42+00:00 +C732,send reminder,2015-06-08 10:33:31+00:00,2015-06-08 09:56:39+00:00 +C794,place order,2015-06-08 10:20:51+00:00,2015-06-08 10:00:32+00:00 +C713,send reminder,2015-06-08 10:13:04+00:00,2015-06-08 10:05:15+00:00 +C669,make delivery,2015-06-08 11:43:36+00:00,2015-06-08 10:11:14+00:00 +C625,make delivery,2015-06-08 11:55:03+00:00,2015-06-08 10:23:07+00:00 +C695,prepare delivery,2015-06-08 10:46:00+00:00,2015-06-08 10:40:00+00:00 +C795,place order,2015-06-08 14:53:28+00:00,2015-06-08 11:19:11+00:00 +C660,make delivery,2015-06-08 12:40:26+00:00,2015-06-08 12:13:55+00:00 +C668,make delivery,2015-06-08 13:59:55+00:00,2015-06-08 12:24:55+00:00 +C796,place order,2015-06-08 12:59:32+00:00,2015-06-08 12:56:29+00:00 +C684,make delivery,2015-06-08 13:12:43+00:00,2015-06-08 12:58:44+00:00 +C748,send reminder,2015-06-08 13:30:10+00:00,2015-06-08 13:06:47+00:00 +C701,pay,2015-06-08 13:17:32+00:00,2015-06-08 13:11:19+00:00 +C709,prepare delivery,2015-06-08 13:43:47+00:00,2015-06-08 13:29:18+00:00 +C775,send invoice,2015-06-08 13:59:18+00:00,2015-06-08 13:49:39+00:00 +C694,prepare delivery,2015-06-08 14:19:01+00:00,2015-06-08 14:15:08+00:00 +C677,prepare delivery,2015-06-08 14:25:53+00:00,2015-06-08 14:18:42+00:00 +C673,prepare delivery,2015-06-08 14:39:13+00:00,2015-06-08 14:35:19+00:00 +C660,confirm payment,2015-06-08 14:56:12+00:00,2015-06-08 14:50:34+00:00 +C698,pay,2015-06-08 14:54:36+00:00,2015-06-08 14:51:17+00:00 +C656,make delivery,2015-06-08 15:23:34+00:00,2015-06-08 15:09:05+00:00 +C797,place order,2015-06-08 15:17:52+00:00,2015-06-08 15:11:05+00:00 +C678,make delivery,2015-06-08 16:41:18+00:00,2015-06-08 15:16:35+00:00 +C737,send reminder,2015-06-08 15:37:14+00:00,2015-06-08 15:22:56+00:00 +C712,pay,2015-06-08 15:30:23+00:00,2015-06-08 15:24:05+00:00 +C670,prepare delivery,2015-06-08 15:34:02+00:00,2015-06-08 15:26:16+00:00 +C681,make delivery,2015-06-08 15:40:51+00:00,2015-06-08 15:28:23+00:00 +C625,confirm payment,2015-06-08 16:25:43+00:00,2015-06-08 16:13:35+00:00 +C715,pay,2015-06-08 16:23:01+00:00,2015-06-08 16:17:10+00:00 +C702,send reminder,2015-06-08 16:38:04+00:00,2015-06-08 16:22:22+00:00 +C734,send reminder,2015-06-08 16:46:44+00:00,2015-06-08 16:27:13+00:00 +C669,confirm payment,2015-06-08 16:39:07+00:00,2015-06-08 16:28:13+00:00 +C664,pay,2015-06-08 16:40:02+00:00,2015-06-08 16:31:30+00:00 +C798,place order,2015-06-08 16:46:13+00:00,2015-06-08 16:40:17+00:00 +C662,make delivery,2015-06-08 17:07:17+00:00,2015-06-08 16:54:12+00:00 +C674,confirm payment,2015-06-08 20:48:16+00:00,2015-06-08 17:00:50+00:00 +C735,pay,2015-06-08 17:12:13+00:00,2015-06-08 17:09:21+00:00 +C703,make delivery,2015-06-08 18:27:27+00:00,2015-06-08 17:09:46+00:00 +C796,send invoice,2015-06-08 17:40:42+00:00,2015-06-08 17:15:36+00:00 +C678,confirm payment,2015-06-08 17:27:48+00:00,2015-06-08 17:21:44+00:00 +C799,place order,2015-06-08 18:43:24+00:00,2015-06-08 18:38:42+00:00 +C800,place order,2015-06-08 21:50:05+00:00,2015-06-08 21:32:20+00:00 +C684,confirm payment,2015-06-08 21:44:33+00:00,2015-06-08 21:37:08+00:00 +C801,place order,2015-06-09 05:22:22+00:00,2015-06-09 05:15:12+00:00 +C758,send invoice,2015-06-09 12:56:46+00:00,2015-06-09 08:31:26+00:00 +C745,send reminder,2015-06-09 09:44:21+00:00,2015-06-09 09:21:13+00:00 +C683,prepare delivery,2015-06-09 09:40:36+00:00,2015-06-09 09:33:06+00:00 +C656,confirm payment,2015-06-09 09:54:38+00:00,2015-06-09 09:46:42+00:00 +C802,place order,2015-06-09 09:59:46+00:00,2015-06-09 09:46:51+00:00 +C699,make delivery,2015-06-09 11:20:55+00:00,2015-06-09 10:01:11+00:00 +C681,confirm payment,2015-06-09 10:28:45+00:00,2015-06-09 10:15:20+00:00 +C793,send invoice,2015-06-09 10:35:49+00:00,2015-06-09 10:32:48+00:00 +C780,send invoice,2015-06-09 10:55:23+00:00,2015-06-09 10:48:31+00:00 +C754,send invoice,2015-06-09 10:55:06+00:00,2015-06-09 10:49:10+00:00 +C739,pay,2015-06-09 11:01:42+00:00,2015-06-09 10:55:29+00:00 +C714,prepare delivery,2015-06-09 11:17:45+00:00,2015-06-09 11:14:51+00:00 +C746,send reminder,2015-06-09 12:03:09+00:00,2015-06-09 11:18:51+00:00 +C692,prepare delivery,2015-06-09 13:50:17+00:00,2015-06-09 11:27:03+00:00 +C707,prepare delivery,2015-06-09 11:34:11+00:00,2015-06-09 11:30:15+00:00 +C695,make delivery,2015-06-09 11:50:58+00:00,2015-06-09 11:36:42+00:00 +C786,send invoice,2015-06-09 11:52:30+00:00,2015-06-09 11:45:46+00:00 +C731,send reminder,2015-06-09 12:12:53+00:00,2015-06-09 11:51:38+00:00 +C803,place order,2015-06-09 12:02:15+00:00,2015-06-09 11:51:49+00:00 +C709,make delivery,2015-06-09 12:27:39+00:00,2015-06-09 12:10:57+00:00 +C668,confirm payment,2015-06-09 12:18:37+00:00,2015-06-09 12:11:39+00:00 +C694,make delivery,2015-06-09 12:39:21+00:00,2015-06-09 12:22:14+00:00 +C673,make delivery,2015-06-09 12:49:36+00:00,2015-06-09 12:33:54+00:00 +C783,send invoice,2015-06-09 13:40:01+00:00,2015-06-09 13:35:39+00:00 +C750,send reminder,2015-06-09 14:06:46+00:00,2015-06-09 13:36:58+00:00 +C744,send reminder,2015-06-09 14:08:42+00:00,2015-06-09 13:44:07+00:00 +C804,place order,2015-06-09 14:04:59+00:00,2015-06-09 14:01:45+00:00 +C670,make delivery,2015-06-09 14:19:12+00:00,2015-06-09 14:04:04+00:00 +C765,send invoice,2015-06-09 14:42:05+00:00,2015-06-09 14:37:37+00:00 +C677,make delivery,2015-06-09 14:48:42+00:00,2015-06-09 14:38:17+00:00 +C687,send reminder,2015-06-09 14:48:27+00:00,2015-06-09 14:40:49+00:00 +C673,confirm payment,2015-06-09 14:52:51+00:00,2015-06-09 14:44:13+00:00 +C662,confirm payment,2015-06-09 15:02:18+00:00,2015-06-09 14:56:32+00:00 +C776,send invoice,2015-06-09 15:19:38+00:00,2015-06-09 15:04:42+00:00 +C805,place order,2015-06-09 19:00:20+00:00,2015-06-09 15:21:37+00:00 +C727,prepare delivery,2015-06-09 16:04:58+00:00,2015-06-09 15:37:04+00:00 +C670,confirm payment,2015-06-09 15:47:27+00:00,2015-06-09 15:40:46+00:00 +C737,pay,2015-06-09 15:50:25+00:00,2015-06-09 15:43:07+00:00 +C703,confirm payment,2015-06-09 16:14:27+00:00,2015-06-09 16:08:59+00:00 +C798,send invoice,2015-06-09 16:44:48+00:00,2015-06-09 16:36:58+00:00 +C777,send invoice,2015-06-09 16:43:13+00:00,2015-06-09 16:37:31+00:00 +C693,prepare delivery,2015-06-09 17:03:50+00:00,2015-06-09 16:48:59+00:00 +C806,place order,2015-06-09 17:06:09+00:00,2015-06-09 17:01:21+00:00 +C695,confirm payment,2015-06-09 17:22:02+00:00,2015-06-09 17:14:55+00:00 +C781,send invoice,2015-06-09 17:23:26+00:00,2015-06-09 17:16:06+00:00 +C677,confirm payment,2015-06-09 17:29:13+00:00,2015-06-09 17:18:36+00:00 +C732,pay,2015-06-09 17:52:18+00:00,2015-06-09 17:48:22+00:00 +C680,send reminder,2015-06-09 18:17:45+00:00,2015-06-09 18:04:21+00:00 +C807,place order,2015-06-09 18:29:51+00:00,2015-06-09 18:20:50+00:00 +C691,send reminder,2015-06-09 18:35:43+00:00,2015-06-09 18:24:51+00:00 +C699,confirm payment,2015-06-09 18:49:09+00:00,2015-06-09 18:38:15+00:00 +C740,pay,2015-06-09 18:49:37+00:00,2015-06-09 18:46:10+00:00 +C683,make delivery,2015-06-09 19:36:07+00:00,2015-06-09 19:20:56+00:00 +C721,send reminder,2015-06-09 19:39:13+00:00,2015-06-09 19:23:56+00:00 +C718,pay,2015-06-09 19:27:18+00:00,2015-06-09 19:24:07+00:00 +C808,place order,2015-06-09 20:41:16+00:00,2015-06-09 20:38:44+00:00 +C711,pay,2015-06-09 22:46:59+00:00,2015-06-09 22:43:15+00:00 +C809,place order,2015-06-10 01:07:11+00:00,2015-06-10 00:53:36+00:00 +C790,send invoice,2015-06-10 09:17:24+00:00,2015-06-10 09:09:51+00:00 +C782,send invoice,2015-06-10 09:29:15+00:00,2015-06-10 09:21:35+00:00 +C797,send invoice,2015-06-10 09:35:08+00:00,2015-06-10 09:27:40+00:00 +C810,place order,2015-06-10 10:27:37+00:00,2015-06-10 09:59:05+00:00 +C692,make delivery,2015-06-10 10:37:39+00:00,2015-06-10 10:24:07+00:00 +C712,prepare delivery,2015-06-10 10:28:07+00:00,2015-06-10 10:25:17+00:00 +C688,prepare delivery,2015-06-10 10:48:00+00:00,2015-06-10 10:41:01+00:00 +C694,confirm payment,2015-06-10 11:20:50+00:00,2015-06-10 10:48:33+00:00 +C714,make delivery,2015-06-10 11:35:12+00:00,2015-06-10 11:25:23+00:00 +C779,send invoice,2015-06-10 11:32:34+00:00,2015-06-10 11:28:56+00:00 +C679,prepare delivery,2015-06-10 14:22:11+00:00,2015-06-10 11:54:12+00:00 +C707,make delivery,2015-06-10 12:28:28+00:00,2015-06-10 12:10:54+00:00 +C683,confirm payment,2015-06-10 12:19:01+00:00,2015-06-10 12:11:36+00:00 +C738,pay,2015-06-10 12:22:20+00:00,2015-06-10 12:13:32+00:00 +C811,place order,2015-06-10 12:20:33+00:00,2015-06-10 12:16:17+00:00 +C709,confirm payment,2015-06-10 12:20:41+00:00,2015-06-10 12:16:21+00:00 +C719,pay,2015-06-10 12:37:52+00:00,2015-06-10 12:18:50+00:00 +C750,pay,2015-06-10 12:29:18+00:00,2015-06-10 12:26:29+00:00 +C734,pay,2015-06-10 12:36:30+00:00,2015-06-10 12:31:11+00:00 +C771,send invoice,2015-06-10 12:38:59+00:00,2015-06-10 12:32:45+00:00 +C672,prepare delivery,2015-06-10 13:05:54+00:00,2015-06-10 13:00:11+00:00 +C733,pay,2015-06-10 13:33:23+00:00,2015-06-10 13:29:34+00:00 +C812,place order,2015-06-10 14:32:10+00:00,2015-06-10 13:50:41+00:00 +C727,make delivery,2015-06-10 14:36:24+00:00,2015-06-10 13:59:20+00:00 +C774,send invoice,2015-06-10 14:09:01+00:00,2015-06-10 14:03:42+00:00 +C805,send invoice,2015-06-10 14:13:57+00:00,2015-06-10 14:07:22+00:00 +C714,confirm payment,2015-06-10 14:19:59+00:00,2015-06-10 14:12:38+00:00 +C727,confirm payment,2015-06-10 14:57:14+00:00,2015-06-10 14:47:21+00:00 +C692,confirm payment,2015-06-10 15:11:27+00:00,2015-06-10 15:06:17+00:00 +C685,prepare delivery,2015-06-10 15:22:35+00:00,2015-06-10 15:15:22+00:00 +C813,place order,2015-06-10 16:01:50+00:00,2015-06-10 15:59:30+00:00 +C730,pay,2015-06-10 16:08:05+00:00,2015-06-10 16:03:12+00:00 +C791,send invoice,2015-06-10 16:20:20+00:00,2015-06-10 16:13:17+00:00 +C770,send reminder,2015-06-10 16:55:34+00:00,2015-06-10 16:40:01+00:00 +C705,pay,2015-06-10 16:48:05+00:00,2015-06-10 16:43:11+00:00 +C697,send reminder,2015-06-10 16:59:04+00:00,2015-06-10 16:43:45+00:00 +C693,make delivery,2015-06-10 18:43:07+00:00,2015-06-10 17:21:13+00:00 +C785,send invoice,2015-06-10 17:31:39+00:00,2015-06-10 17:27:11+00:00 +C814,place order,2015-06-10 18:28:13+00:00,2015-06-10 18:17:07+00:00 +C815,place order,2015-06-10 20:30:22+00:00,2015-06-10 20:27:35+00:00 +C816,place order,2015-06-10 23:51:40+00:00,2015-06-10 23:46:42+00:00 +C725,pay,2015-06-11 01:26:46+00:00,2015-06-11 01:21:49+00:00 +C680,pay,2015-06-11 09:20:24+00:00,2015-06-11 09:13:54+00:00 +C696,prepare delivery,2015-06-11 09:29:00+00:00,2015-06-11 09:21:19+00:00 +C817,place order,2015-06-11 13:44:28+00:00,2015-06-11 09:44:17+00:00 +C712,make delivery,2015-06-11 10:18:34+00:00,2015-06-11 10:03:01+00:00 +C679,make delivery,2015-06-11 12:06:31+00:00,2015-06-11 10:33:35+00:00 +C707,confirm payment,2015-06-11 10:55:47+00:00,2015-06-11 10:51:28+00:00 +C751,send reminder,2015-06-11 11:15:25+00:00,2015-06-11 10:59:51+00:00 +C772,send invoice,2015-06-11 11:12:17+00:00,2015-06-11 11:05:03+00:00 +C748,pay,2015-06-11 11:21:37+00:00,2015-06-11 11:17:38+00:00 +C728,pay,2015-06-11 11:30:20+00:00,2015-06-11 11:23:28+00:00 +C729,send reminder,2015-06-11 11:33:22+00:00,2015-06-11 11:26:19+00:00 +C795,send invoice,2015-06-11 11:42:43+00:00,2015-06-11 11:36:08+00:00 +C818,place order,2015-06-11 11:49:52+00:00,2015-06-11 11:46:41+00:00 +C792,send invoice,2015-06-11 12:03:15+00:00,2015-06-11 11:57:42+00:00 +C724,pay,2015-06-11 12:05:02+00:00,2015-06-11 11:58:07+00:00 +C672,make delivery,2015-06-11 12:22:40+00:00,2015-06-11 11:59:34+00:00 +C787,send invoice,2015-06-11 12:16:49+00:00,2015-06-11 12:08:54+00:00 +C735,prepare delivery,2015-06-11 12:32:44+00:00,2015-06-11 12:17:29+00:00 +C688,make delivery,2015-06-11 14:03:14+00:00,2015-06-11 12:34:02+00:00 +C720,send reminder,2015-06-11 13:28:40+00:00,2015-06-11 12:51:14+00:00 +C810,send invoice,2015-06-11 13:29:25+00:00,2015-06-11 13:23:32+00:00 +C715,prepare delivery,2015-06-11 13:28:48+00:00,2015-06-11 13:25:12+00:00 +C711,prepare delivery,2015-06-11 13:33:44+00:00,2015-06-11 13:28:04+00:00 +C819,place order,2015-06-11 14:20:46+00:00,2015-06-11 13:51:30+00:00 +C701,prepare delivery,2015-06-11 14:43:52+00:00,2015-06-11 14:29:36+00:00 +C685,make delivery,2015-06-11 15:06:12+00:00,2015-06-11 14:51:10+00:00 +C806,send invoice,2015-06-11 15:05:10+00:00,2015-06-11 14:57:30+00:00 +C763,send reminder,2015-06-11 15:50:27+00:00,2015-06-11 15:24:40+00:00 +C800,send invoice,2015-06-11 15:32:08+00:00,2015-06-11 15:26:39+00:00 +C693,confirm payment,2015-06-11 15:36:18+00:00,2015-06-11 15:32:54+00:00 +C809,send invoice,2015-06-11 16:01:03+00:00,2015-06-11 15:57:58+00:00 +C706,prepare delivery,2015-06-11 16:08:24+00:00,2015-06-11 16:00:36+00:00 +C820,place order,2015-06-11 19:47:42+00:00,2015-06-11 16:01:07+00:00 +C769,send reminder,2015-06-11 16:35:17+00:00,2015-06-11 16:05:14+00:00 +C789,send invoice,2015-06-11 16:30:28+00:00,2015-06-11 16:14:43+00:00 +C708,send reminder,2015-06-11 16:26:07+00:00,2015-06-11 16:16:27+00:00 +C801,send invoice,2015-06-11 16:34:24+00:00,2015-06-11 16:26:13+00:00 +C760,send reminder,2015-06-11 16:55:23+00:00,2015-06-11 16:32:01+00:00 +C696,confirm payment,2015-06-11 17:12:16+00:00,2015-06-11 17:01:36+00:00 +C757,send reminder,2015-06-11 17:25:05+00:00,2015-06-11 17:01:59+00:00 +C705,prepare delivery,2015-06-11 17:10:06+00:00,2015-06-11 17:02:46+00:00 +C752,pay,2015-06-11 17:12:47+00:00,2015-06-11 17:07:20+00:00 +C773,send reminder,2015-06-11 17:19:42+00:00,2015-06-11 17:08:34+00:00 +C702,pay,2015-06-11 17:20:51+00:00,2015-06-11 17:16:54+00:00 +C821,place order,2015-06-11 20:28:34+00:00,2015-06-11 17:20:21+00:00 +C672,confirm payment,2015-06-11 17:35:08+00:00,2015-06-11 17:24:49+00:00 +C739,prepare delivery,2015-06-11 17:43:14+00:00,2015-06-11 17:40:05+00:00 +C688,confirm payment,2015-06-11 17:49:29+00:00,2015-06-11 17:42:59+00:00 +C722,send reminder,2015-06-11 18:23:18+00:00,2015-06-11 17:46:45+00:00 +C753,pay,2015-06-11 18:18:38+00:00,2015-06-11 18:14:06+00:00 +C822,place order,2015-06-11 19:11:47+00:00,2015-06-11 18:58:49+00:00 +C743,pay,2015-06-11 20:36:07+00:00,2015-06-11 20:30:19+00:00 +C717,pay,2015-06-11 21:22:43+00:00,2015-06-11 21:16:45+00:00 +C766,send reminder,2015-06-11 22:22:09+00:00,2015-06-11 22:02:04+00:00 +C823,place order,2015-06-11 22:45:47+00:00,2015-06-11 22:32:42+00:00 +C824,place order,2015-06-12 09:00:59+00:00,2015-06-12 08:53:38+00:00 +C723,pay,2015-06-12 09:24:03+00:00,2015-06-12 09:15:51+00:00 +C738,prepare delivery,2015-06-12 11:56:17+00:00,2015-06-12 09:17:25+00:00 +C680,prepare delivery,2015-06-12 09:41:59+00:00,2015-06-12 09:27:50+00:00 +C685,confirm payment,2015-06-12 09:37:53+00:00,2015-06-12 09:30:22+00:00 +C788,send invoice,2015-06-12 09:39:19+00:00,2015-06-12 09:33:18+00:00 +C736,pay,2015-06-12 10:05:07+00:00,2015-06-12 09:58:30+00:00 +C712,confirm payment,2015-06-12 10:19:53+00:00,2015-06-12 10:13:46+00:00 +C687,pay,2015-06-12 10:23:30+00:00,2015-06-12 10:19:44+00:00 +C735,make delivery,2015-06-12 10:42:03+00:00,2015-06-12 10:27:49+00:00 +C696,make delivery,2015-06-12 11:18:20+00:00,2015-06-12 10:45:20+00:00 +C715,make delivery,2015-06-12 11:13:25+00:00,2015-06-12 10:48:38+00:00 +C825,place order,2015-06-12 11:19:32+00:00,2015-06-12 11:08:34+00:00 +C711,make delivery,2015-06-12 12:04:33+00:00,2015-06-12 11:35:29+00:00 +C715,confirm payment,2015-06-12 11:53:05+00:00,2015-06-12 11:44:23+00:00 +C821,send invoice,2015-06-12 12:05:50+00:00,2015-06-12 11:58:44+00:00 +C716,send reminder,2015-06-12 12:27:21+00:00,2015-06-12 12:20:07+00:00 +C755,send reminder,2015-06-12 12:30:48+00:00,2015-06-12 12:20:57+00:00 +C679,confirm payment,2015-06-12 12:26:21+00:00,2015-06-12 12:23:12+00:00 +C826,place order,2015-06-12 13:20:15+00:00,2015-06-12 12:35:16+00:00 +C767,send reminder,2015-06-12 13:19:17+00:00,2015-06-12 12:57:39+00:00 +C701,confirm payment,2015-06-12 13:38:18+00:00,2015-06-12 13:30:00+00:00 +C827,place order,2015-06-12 17:08:38+00:00,2015-06-12 14:28:39+00:00 +C720,cancel order,2015-06-12 14:41:01+00:00,2015-06-12 14:31:07+00:00 +C706,make delivery,2015-06-12 15:33:23+00:00,2015-06-12 15:07:52+00:00 +C794,send invoice,2015-06-12 15:14:47+00:00,2015-06-12 15:08:32+00:00 +C711,confirm payment,2015-06-12 15:28:14+00:00,2015-06-12 15:24:21+00:00 +C691,pay,2015-06-12 15:36:56+00:00,2015-06-12 15:30:17+00:00 +C799,send invoice,2015-06-12 15:59:35+00:00,2015-06-12 15:39:55+00:00 +C739,make delivery,2015-06-12 16:00:11+00:00,2015-06-12 15:48:46+00:00 +C675,prepare delivery,2015-06-12 16:07:05+00:00,2015-06-12 15:59:23+00:00 +C828,place order,2015-06-12 16:26:30+00:00,2015-06-12 16:15:25+00:00 +C802,send invoice,2015-06-12 16:39:34+00:00,2015-06-12 16:19:44+00:00 +C698,prepare delivery,2015-06-12 16:54:14+00:00,2015-06-12 16:46:41+00:00 +C705,make delivery,2015-06-12 18:20:33+00:00,2015-06-12 16:57:56+00:00 +C701,make delivery,2015-06-12 17:30:10+00:00,2015-06-12 17:18:15+00:00 +C735,confirm payment,2015-06-12 17:24:18+00:00,2015-06-12 17:19:21+00:00 +C749,send reminder,2015-06-12 17:45:19+00:00,2015-06-12 17:34:10+00:00 +C829,place order,2015-06-12 17:57:38+00:00,2015-06-12 17:48:57+00:00 +C726,pay,2015-06-12 17:59:40+00:00,2015-06-12 17:52:27+00:00 +C680,make delivery,2015-06-12 19:10:37+00:00,2015-06-12 18:56:33+00:00 +C772,pay,2015-06-12 19:32:23+00:00,2015-06-12 19:24:29+00:00 +C830,place order,2015-06-12 20:07:32+00:00,2015-06-12 20:03:06+00:00 +C762,pay,2015-06-12 21:30:07+00:00,2015-06-12 21:25:52+00:00 +C761,pay,2015-06-12 21:50:19+00:00,2015-06-12 21:43:24+00:00 +C831,place order,2015-06-12 22:57:06+00:00,2015-06-12 22:42:26+00:00 +C832,place order,2015-06-13 19:05:51+00:00,2015-06-13 18:57:48+00:00 +C833,place order,2015-06-14 19:35:25+00:00,2015-06-14 19:32:48+00:00 +C742,pay,2015-06-15 06:37:21+00:00,2015-06-15 06:31:03+00:00 +C759,pay,2015-06-15 06:40:19+00:00,2015-06-15 06:37:22+00:00 +C834,place order,2015-06-15 10:53:47+00:00,2015-06-15 09:11:08+00:00 +C713,send reminder,2015-06-15 09:27:05+00:00,2015-06-15 09:14:36+00:00 +C705,confirm payment,2015-06-15 09:42:05+00:00,2015-06-15 09:33:26+00:00 +C756,pay,2015-06-15 09:47:40+00:00,2015-06-15 09:44:46+00:00 +C812,send invoice,2015-06-15 09:48:07+00:00,2015-06-15 09:45:52+00:00 +C697,pay,2015-06-15 09:56:47+00:00,2015-06-15 09:51:27+00:00 +C729,pay,2015-06-15 09:58:40+00:00,2015-06-15 09:51:49+00:00 +C818,send invoice,2015-06-15 10:11:35+00:00,2015-06-15 10:06:52+00:00 +C700,prepare delivery,2015-06-15 10:37:09+00:00,2015-06-15 10:34:06+00:00 +C835,place order,2015-06-15 10:49:07+00:00,2015-06-15 10:40:23+00:00 +C732,prepare delivery,2015-06-15 13:04:22+00:00,2015-06-15 10:42:26+00:00 +C750,prepare delivery,2015-06-15 10:57:16+00:00,2015-06-15 10:53:25+00:00 +C680,confirm payment,2015-06-15 11:55:48+00:00,2015-06-15 11:45:19+00:00 +C738,make delivery,2015-06-15 12:15:52+00:00,2015-06-15 11:46:51+00:00 +C811,send invoice,2015-06-15 12:18:17+00:00,2015-06-15 12:07:06+00:00 +C766,pay,2015-06-15 12:17:48+00:00,2015-06-15 12:12:26+00:00 +C706,confirm payment,2015-06-15 12:18:52+00:00,2015-06-15 12:13:10+00:00 +C710,prepare delivery,2015-06-15 12:39:36+00:00,2015-06-15 12:32:22+00:00 +C737,prepare delivery,2015-06-15 12:35:49+00:00,2015-06-15 12:32:39+00:00 +C739,confirm payment,2015-06-15 12:43:23+00:00,2015-06-15 12:32:42+00:00 +C836,place order,2015-06-15 16:27:52+00:00,2015-06-15 12:38:53+00:00 +C740,prepare delivery,2015-06-15 13:47:17+00:00,2015-06-15 13:22:05+00:00 +C713,cancel order,2015-06-15 14:39:03+00:00,2015-06-15 14:22:51+00:00 +C733,prepare delivery,2015-06-15 14:32:41+00:00,2015-06-15 14:29:35+00:00 +C837,place order,2015-06-15 14:53:18+00:00,2015-06-15 14:35:53+00:00 +C784,send reminder,2015-06-15 15:29:02+00:00,2015-06-15 14:44:07+00:00 +C825,send invoice,2015-06-15 14:51:55+00:00,2015-06-15 14:46:57+00:00 +C768,pay,2015-06-15 15:09:29+00:00,2015-06-15 14:54:55+00:00 +C754,pay,2015-06-15 15:15:53+00:00,2015-06-15 15:12:59+00:00 +C698,confirm payment,2015-06-15 18:57:19+00:00,2015-06-15 15:34:58+00:00 +C796,send reminder,2015-06-15 15:57:15+00:00,2015-06-15 15:43:04+00:00 +C723,prepare delivery,2015-06-15 16:18:38+00:00,2015-06-15 16:15:01+00:00 +C815,send invoice,2015-06-15 16:32:33+00:00,2015-06-15 16:24:33+00:00 +C816,send invoice,2015-06-15 17:01:33+00:00,2015-06-15 16:27:42+00:00 +C808,send invoice,2015-06-15 16:40:53+00:00,2015-06-15 16:29:50+00:00 +C838,place order,2015-06-15 17:03:05+00:00,2015-06-15 16:29:53+00:00 +C675,make delivery,2015-06-15 18:58:13+00:00,2015-06-15 17:24:04+00:00 +C718,prepare delivery,2015-06-15 17:42:52+00:00,2015-06-15 17:39:43+00:00 +C698,make delivery,2015-06-15 19:10:50+00:00,2015-06-15 17:45:51+00:00 +C822,send invoice,2015-06-15 18:00:30+00:00,2015-06-15 17:51:47+00:00 +C753,prepare delivery,2015-06-15 17:57:47+00:00,2015-06-15 17:54:57+00:00 +C814,send invoice,2015-06-15 18:22:37+00:00,2015-06-15 18:16:13+00:00 +C839,place order,2015-06-15 18:38:44+00:00,2015-06-15 18:17:54+00:00 +C704,prepare delivery,2015-06-15 18:29:19+00:00,2015-06-15 18:21:56+00:00 +C840,place order,2015-06-15 20:36:34+00:00,2015-06-15 20:29:56+00:00 +C841,place order,2015-06-16 00:21:48+00:00,2015-06-16 00:00:48+00:00 +C716,pay,2015-06-16 08:34:36+00:00,2015-06-16 08:29:30+00:00 +C719,prepare delivery,2015-06-16 11:10:08+00:00,2015-06-16 08:39:33+00:00 +C708,pay,2015-06-16 08:47:14+00:00,2015-06-16 08:41:10+00:00 +C772,prepare delivery,2015-06-16 09:00:09+00:00,2015-06-16 08:53:57+00:00 +C842,place order,2015-06-16 09:09:12+00:00,2015-06-16 09:01:00+00:00 +C758,send reminder,2015-06-16 09:19:36+00:00,2015-06-16 09:11:19+00:00 +C738,confirm payment,2015-06-16 09:19:41+00:00,2015-06-16 09:12:50+00:00 +C793,send reminder,2015-06-16 10:32:57+00:00,2015-06-16 09:49:05+00:00 +C742,prepare delivery,2015-06-16 10:19:17+00:00,2015-06-16 09:54:02+00:00 +C675,confirm payment,2015-06-16 10:03:51+00:00,2015-06-16 09:54:58+00:00 +C770,pay,2015-06-16 10:02:12+00:00,2015-06-16 09:57:03+00:00 +C807,send invoice,2015-06-16 10:03:06+00:00,2015-06-16 09:57:10+00:00 +C760,pay,2015-06-16 10:29:52+00:00,2015-06-16 10:01:54+00:00 +C843,place order,2015-06-16 10:24:07+00:00,2015-06-16 10:20:07+00:00 +C834,send invoice,2015-06-16 10:25:43+00:00,2015-06-16 10:20:22+00:00 +C757,pay,2015-06-16 10:30:44+00:00,2015-06-16 10:26:03+00:00 +C750,make delivery,2015-06-16 12:01:09+00:00,2015-06-16 10:31:12+00:00 +C745,send reminder,2015-06-16 11:20:23+00:00,2015-06-16 10:38:31+00:00 +C746,send reminder,2015-06-16 11:15:17+00:00,2015-06-16 10:52:59+00:00 +C823,send invoice,2015-06-16 11:09:52+00:00,2015-06-16 11:05:11+00:00 +C829,send invoice,2015-06-16 11:17:39+00:00,2015-06-16 11:06:40+00:00 +C710,make delivery,2015-06-16 11:36:04+00:00,2015-06-16 11:09:33+00:00 +C732,make delivery,2015-06-16 12:45:43+00:00,2015-06-16 11:11:32+00:00 +C803,send invoice,2015-06-16 11:25:18+00:00,2015-06-16 11:19:15+00:00 +C687,prepare delivery,2015-06-16 11:30:44+00:00,2015-06-16 11:24:25+00:00 +C737,make delivery,2015-06-16 11:58:23+00:00,2015-06-16 11:44:17+00:00 +C838,send invoice,2015-06-16 11:55:08+00:00,2015-06-16 11:48:24+00:00 +C730,prepare delivery,2015-06-16 12:19:14+00:00,2015-06-16 11:54:09+00:00 +C844,place order,2015-06-16 12:01:00+00:00,2015-06-16 11:58:22+00:00 +C664,prepare delivery,2015-06-16 12:25:54+00:00,2015-06-16 12:18:07+00:00 +C744,send reminder,2015-06-16 12:44:38+00:00,2015-06-16 12:22:17+00:00 +C740,confirm payment,2015-06-16 12:35:13+00:00,2015-06-16 12:26:40+00:00 +C780,send reminder,2015-06-16 12:44:42+00:00,2015-06-16 12:34:36+00:00 +C741,pay,2015-06-16 13:32:43+00:00,2015-06-16 13:26:52+00:00 +C700,make delivery,2015-06-16 13:56:49+00:00,2015-06-16 13:29:50+00:00 +C733,confirm payment,2015-06-16 14:05:58+00:00,2015-06-16 13:55:14+00:00 +C710,confirm payment,2015-06-16 14:15:14+00:00,2015-06-16 14:08:32+00:00 +C845,place order,2015-06-16 14:21:47+00:00,2015-06-16 14:14:51+00:00 +C733,make delivery,2015-06-16 14:35:24+00:00,2015-06-16 14:20:46+00:00 +C723,make delivery,2015-06-16 16:53:13+00:00,2015-06-16 15:30:52+00:00 +C820,send invoice,2015-06-16 15:43:32+00:00,2015-06-16 15:37:38+00:00 +C846,place order,2015-06-16 16:09:45+00:00,2015-06-16 15:47:49+00:00 +C750,confirm payment,2015-06-16 16:13:13+00:00,2015-06-16 16:07:00+00:00 +C731,send reminder,2015-06-16 16:28:38+00:00,2015-06-16 16:12:55+00:00 +C740,make delivery,2015-06-16 16:30:06+00:00,2015-06-16 16:15:44+00:00 +C719,confirm payment,2015-06-16 16:30:19+00:00,2015-06-16 16:24:30+00:00 +C777,pay,2015-06-16 16:33:37+00:00,2015-06-16 16:26:50+00:00 +C753,confirm payment,2015-06-16 16:34:35+00:00,2015-06-16 16:29:41+00:00 +C732,confirm payment,2015-06-16 16:37:54+00:00,2015-06-16 16:30:35+00:00 +C765,send reminder,2015-06-16 17:15:01+00:00,2015-06-16 16:35:00+00:00 +C717,prepare delivery,2015-06-16 19:19:21+00:00,2015-06-16 16:44:36+00:00 +C700,confirm payment,2015-06-16 16:58:45+00:00,2015-06-16 16:50:30+00:00 +C704,make delivery,2015-06-16 17:19:05+00:00,2015-06-16 16:50:59+00:00 +C782,send reminder,2015-06-16 17:11:28+00:00,2015-06-16 16:55:02+00:00 +C691,prepare delivery,2015-06-16 17:09:52+00:00,2015-06-16 17:06:13+00:00 +C824,send invoice,2015-06-16 17:26:29+00:00,2015-06-16 17:19:28+00:00 +C744,cancel order,2015-06-16 17:43:22+00:00,2015-06-16 17:27:40+00:00 +C718,make delivery,2015-06-16 17:40:23+00:00,2015-06-16 17:29:25+00:00 +C721,send reminder,2015-06-16 17:49:38+00:00,2015-06-16 17:34:02+00:00 +C753,make delivery,2015-06-16 19:15:08+00:00,2015-06-16 17:40:21+00:00 +C763,pay,2015-06-16 17:47:08+00:00,2015-06-16 17:44:49+00:00 +C742,make delivery,2015-06-16 18:01:16+00:00,2015-06-16 17:50:29+00:00 +C847,place order,2015-06-16 18:01:12+00:00,2015-06-16 17:53:45+00:00 +C748,prepare delivery,2015-06-16 18:07:03+00:00,2015-06-16 18:00:33+00:00 +C742,confirm payment,2015-06-16 18:30:33+00:00,2015-06-16 18:25:14+00:00 +C772,make delivery,2015-06-16 20:04:33+00:00,2015-06-16 18:39:10+00:00 +C813,send invoice,2015-06-16 19:08:06+00:00,2015-06-16 19:03:49+00:00 +C848,place order,2015-06-16 20:27:29+00:00,2015-06-16 20:17:30+00:00 +C775,pay,2015-06-16 23:04:55+00:00,2015-06-16 23:02:19+00:00 +C849,place order,2015-06-16 23:20:05+00:00,2015-06-16 23:11:14+00:00 +C773,pay,2015-06-17 08:15:39+00:00,2015-06-17 08:10:40+00:00 +C837,send invoice,2015-06-17 08:49:51+00:00,2015-06-17 08:42:48+00:00 +C797,send reminder,2015-06-17 09:09:35+00:00,2015-06-17 08:55:36+00:00 +C781,send reminder,2015-06-17 09:26:30+00:00,2015-06-17 08:59:18+00:00 +C850,place order,2015-06-17 09:04:54+00:00,2015-06-17 09:01:43+00:00 +C841,send invoice,2015-06-17 09:35:27+00:00,2015-06-17 09:26:24+00:00 +C719,make delivery,2015-06-17 10:53:18+00:00,2015-06-17 09:34:41+00:00 +C804,send invoice,2015-06-17 10:12:09+00:00,2015-06-17 10:01:15+00:00 +C737,confirm payment,2015-06-17 10:10:27+00:00,2015-06-17 10:05:02+00:00 +C819,send invoice,2015-06-17 10:13:02+00:00,2015-06-17 10:09:49+00:00 +C664,make delivery,2015-06-17 10:28:37+00:00,2015-06-17 10:13:16+00:00 +C758,pay,2015-06-17 10:23:12+00:00,2015-06-17 10:16:47+00:00 +C704,confirm payment,2015-06-17 10:25:11+00:00,2015-06-17 10:19:33+00:00 +C851,place order,2015-06-17 14:01:27+00:00,2015-06-17 10:21:34+00:00 +C722,pay,2015-06-17 11:06:22+00:00,2015-06-17 11:01:48+00:00 +C729,prepare delivery,2015-06-17 11:14:33+00:00,2015-06-17 11:06:44+00:00 +C718,confirm payment,2015-06-17 11:14:01+00:00,2015-06-17 11:06:59+00:00 +C772,confirm payment,2015-06-17 11:17:13+00:00,2015-06-17 11:09:16+00:00 +C743,prepare delivery,2015-06-17 11:38:45+00:00,2015-06-17 11:31:33+00:00 +C687,make delivery,2015-06-17 13:12:36+00:00,2015-06-17 11:36:38+00:00 +C725,prepare delivery,2015-06-17 11:41:38+00:00,2015-06-17 11:38:40+00:00 +C817,send invoice,2015-06-17 11:49:22+00:00,2015-06-17 11:45:15+00:00 +C852,place order,2015-06-17 12:53:08+00:00,2015-06-17 12:01:15+00:00 +C833,send invoice,2015-06-17 13:19:40+00:00,2015-06-17 13:13:31+00:00 +C853,place order,2015-06-17 17:02:32+00:00,2015-06-17 13:20:37+00:00 +C830,send invoice,2015-06-17 13:26:54+00:00,2015-06-17 13:22:35+00:00 +C771,pay,2015-06-17 13:44:03+00:00,2015-06-17 13:35:37+00:00 +C724,prepare delivery,2015-06-17 14:06:12+00:00,2015-06-17 13:40:32+00:00 +C691,make delivery,2015-06-17 14:36:50+00:00,2015-06-17 14:19:10+00:00 +C723,confirm payment,2015-06-17 14:43:44+00:00,2015-06-17 14:38:30+00:00 +C664,confirm payment,2015-06-17 14:46:15+00:00,2015-06-17 14:40:53+00:00 +C854,place order,2015-06-17 15:05:42+00:00,2015-06-17 14:59:21+00:00 +C832,send invoice,2015-06-17 15:11:22+00:00,2015-06-17 15:02:08+00:00 +C717,make delivery,2015-06-17 15:22:49+00:00,2015-06-17 15:05:57+00:00 +C730,make delivery,2015-06-17 15:53:22+00:00,2015-06-17 15:19:28+00:00 +C757,prepare delivery,2015-06-17 15:51:52+00:00,2015-06-17 15:47:58+00:00 +C748,make delivery,2015-06-17 16:18:30+00:00,2015-06-17 15:49:19+00:00 +C754,prepare delivery,2015-06-17 16:04:40+00:00,2015-06-17 16:00:58+00:00 +C774,send reminder,2015-06-17 16:26:59+00:00,2015-06-17 16:19:40+00:00 +C734,prepare delivery,2015-06-17 16:27:11+00:00,2015-06-17 16:21:17+00:00 +C752,prepare delivery,2015-06-17 16:43:33+00:00,2015-06-17 16:36:03+00:00 +C791,send reminder,2015-06-17 17:26:05+00:00,2015-06-17 17:03:29+00:00 +C687,confirm payment,2015-06-17 17:14:04+00:00,2015-06-17 17:05:48+00:00 +C782,pay,2015-06-17 17:22:15+00:00,2015-06-17 17:16:24+00:00 +C855,place order,2015-06-17 17:57:19+00:00,2015-06-17 17:16:49+00:00 +C746,pay,2015-06-17 17:32:36+00:00,2015-06-17 17:29:40+00:00 +C850,send invoice,2015-06-17 17:37:32+00:00,2015-06-17 17:30:58+00:00 +C770,prepare delivery,2015-06-17 20:09:18+00:00,2015-06-17 17:34:42+00:00 +C745,cancel order,2015-06-17 18:46:40+00:00,2015-06-17 18:34:46+00:00 +C856,place order,2015-06-17 19:19:30+00:00,2015-06-17 18:51:46+00:00 +C776,pay,2015-06-17 19:02:48+00:00,2015-06-17 19:00:34+00:00 +C730,confirm payment,2015-06-17 20:33:50+00:00,2015-06-17 20:22:54+00:00 +C780,pay,2015-06-17 20:45:33+00:00,2015-06-17 20:40:57+00:00 +C702,prepare delivery,2015-06-17 21:42:27+00:00,2015-06-17 21:15:57+00:00 +C857,place order,2015-06-17 22:59:30+00:00,2015-06-17 22:11:32+00:00 +C845,send invoice,2015-06-17 22:19:07+00:00,2015-06-17 22:11:59+00:00 +C858,place order,2015-06-18 11:40:21+00:00,2015-06-18 08:10:24+00:00 +C729,confirm payment,2015-06-18 08:16:27+00:00,2015-06-18 08:11:17+00:00 +C743,confirm payment,2015-06-18 10:03:17+00:00,2015-06-18 09:55:13+00:00 +C728,prepare delivery,2015-06-18 09:59:21+00:00,2015-06-18 09:55:24+00:00 +C859,place order,2015-06-18 10:22:49+00:00,2015-06-18 10:03:43+00:00 +C729,make delivery,2015-06-18 11:43:53+00:00,2015-06-18 10:19:19+00:00 +C857,send invoice,2015-06-18 10:50:59+00:00,2015-06-18 10:43:37+00:00 +C725,confirm payment,2015-06-18 10:54:20+00:00,2015-06-18 10:45:56+00:00 +C828,send invoice,2015-06-18 10:55:16+00:00,2015-06-18 10:51:03+00:00 +C860,place order,2015-06-18 15:58:13+00:00,2015-06-18 11:25:34+00:00 +C761,prepare delivery,2015-06-18 13:50:04+00:00,2015-06-18 11:26:03+00:00 +C725,make delivery,2015-06-18 12:31:55+00:00,2015-06-18 11:34:11+00:00 +C721,pay,2015-06-18 11:55:02+00:00,2015-06-18 11:50:30+00:00 +C810,send reminder,2015-06-18 12:24:32+00:00,2015-06-18 11:55:15+00:00 +C724,make delivery,2015-06-18 12:20:00+00:00,2015-06-18 12:04:35+00:00 +C743,make delivery,2015-06-18 12:31:52+00:00,2015-06-18 12:15:32+00:00 +C767,pay,2015-06-18 12:26:25+00:00,2015-06-18 12:24:17+00:00 +C861,place order,2015-06-18 13:13:25+00:00,2015-06-18 13:09:15+00:00 +C751,send reminder,2015-06-18 13:48:11+00:00,2015-06-18 13:11:27+00:00 +C787,send reminder,2015-06-18 13:32:40+00:00,2015-06-18 13:12:02+00:00 +C842,send invoice,2015-06-18 13:18:22+00:00,2015-06-18 13:12:17+00:00 +C757,make delivery,2015-06-18 13:27:52+00:00,2015-06-18 13:12:34+00:00 +C708,prepare delivery,2015-06-18 13:50:30+00:00,2015-06-18 13:46:48+00:00 +C754,confirm payment,2015-06-18 14:08:12+00:00,2015-06-18 13:57:30+00:00 +C800,send reminder,2015-06-18 14:41:05+00:00,2015-06-18 14:05:46+00:00 +C716,prepare delivery,2015-06-18 14:18:24+00:00,2015-06-18 14:10:06+00:00 +C747,pay,2015-06-18 14:30:45+00:00,2015-06-18 14:15:23+00:00 +C862,place order,2015-06-18 14:41:59+00:00,2015-06-18 14:36:37+00:00 +C717,confirm payment,2015-06-18 14:51:54+00:00,2015-06-18 14:46:54+00:00 +C734,make delivery,2015-06-18 15:20:18+00:00,2015-06-18 14:53:53+00:00 +C831,send invoice,2015-06-18 15:02:06+00:00,2015-06-18 14:55:42+00:00 +C840,send invoice,2015-06-18 15:05:03+00:00,2015-06-18 14:56:12+00:00 +C839,send invoice,2015-06-18 15:10:19+00:00,2015-06-18 15:04:45+00:00 +C748,confirm payment,2015-06-18 15:48:37+00:00,2015-06-18 15:39:39+00:00 +C762,prepare delivery,2015-06-18 15:50:19+00:00,2015-06-18 15:41:39+00:00 +C726,prepare delivery,2015-06-18 15:52:23+00:00,2015-06-18 15:44:52+00:00 +C752,make delivery,2015-06-18 15:58:30+00:00,2015-06-18 15:44:58+00:00 +C754,make delivery,2015-06-18 16:02:48+00:00,2015-06-18 15:51:27+00:00 +C836,send invoice,2015-06-18 16:04:40+00:00,2015-06-18 15:58:39+00:00 +C779,pay,2015-06-18 16:17:48+00:00,2015-06-18 16:07:04+00:00 +C770,make delivery,2015-06-18 16:47:07+00:00,2015-06-18 16:12:30+00:00 +C702,make delivery,2015-06-18 16:47:01+00:00,2015-06-18 16:16:34+00:00 +C789,pay,2015-06-18 16:24:29+00:00,2015-06-18 16:22:11+00:00 +C691,confirm payment,2015-06-18 16:37:05+00:00,2015-06-18 16:29:54+00:00 +C863,place order,2015-06-18 18:42:26+00:00,2015-06-18 16:31:21+00:00 +C849,send invoice,2015-06-18 16:48:52+00:00,2015-06-18 16:41:05+00:00 +C778,pay,2015-06-18 16:54:34+00:00,2015-06-18 16:47:40+00:00 +C774,pay,2015-06-18 16:52:20+00:00,2015-06-18 16:49:49+00:00 +C826,send invoice,2015-06-18 17:05:50+00:00,2015-06-18 16:57:31+00:00 +C770,confirm payment,2015-06-18 17:13:08+00:00,2015-06-18 17:02:20+00:00 +C736,prepare delivery,2015-06-18 17:10:32+00:00,2015-06-18 17:03:23+00:00 +C855,send invoice,2015-06-18 17:27:48+00:00,2015-06-18 17:20:34+00:00 +C773,prepare delivery,2015-06-18 17:36:07+00:00,2015-06-18 17:28:27+00:00 +C806,send reminder,2015-06-18 17:45:37+00:00,2015-06-18 17:32:47+00:00 +C775,prepare delivery,2015-06-18 20:20:14+00:00,2015-06-18 17:45:55+00:00 +C769,send reminder,2015-06-18 18:16:52+00:00,2015-06-18 18:05:29+00:00 +C864,place order,2015-06-18 18:28:44+00:00,2015-06-18 18:20:49+00:00 +C728,make delivery,2015-06-18 18:42:14+00:00,2015-06-18 18:24:33+00:00 +C827,send invoice,2015-06-18 20:35:24+00:00,2015-06-18 18:29:48+00:00 +C724,confirm payment,2015-06-18 19:21:05+00:00,2015-06-18 19:14:48+00:00 +C785,pay,2015-06-18 20:40:12+00:00,2015-06-18 20:37:29+00:00 +C865,place order,2015-06-18 20:43:50+00:00,2015-06-18 20:38:42+00:00 +C792,pay,2015-06-18 23:21:01+00:00,2015-06-18 23:15:41+00:00 +C866,place order,2015-06-19 00:57:12+00:00,2015-06-19 00:53:24+00:00 +C788,send reminder,2015-06-19 08:55:48+00:00,2015-06-19 08:44:55+00:00 +C728,confirm payment,2015-06-19 09:30:33+00:00,2015-06-19 09:20:14+00:00 +C846,send invoice,2015-06-19 09:38:53+00:00,2015-06-19 09:26:40+00:00 +C731,cancel order,2015-06-19 09:53:36+00:00,2015-06-19 09:38:42+00:00 +C749,pay,2015-06-19 09:44:48+00:00,2015-06-19 09:39:06+00:00 +C867,place order,2015-06-19 10:23:41+00:00,2015-06-19 09:58:52+00:00 +C780,prepare delivery,2015-06-19 12:27:38+00:00,2015-06-19 10:02:37+00:00 +C702,confirm payment,2015-06-19 10:15:11+00:00,2015-06-19 10:09:05+00:00 +C755,send reminder,2015-06-19 10:51:02+00:00,2015-06-19 10:21:12+00:00 +C801,pay,2015-06-19 10:56:53+00:00,2015-06-19 10:25:05+00:00 +C761,make delivery,2015-06-19 10:52:46+00:00,2015-06-19 10:42:00+00:00 +C716,confirm payment,2015-06-19 11:05:49+00:00,2015-06-19 10:53:54+00:00 +C741,prepare delivery,2015-06-19 10:59:18+00:00,2015-06-19 10:55:32+00:00 +C821,send reminder,2015-06-19 11:28:20+00:00,2015-06-19 10:57:04+00:00 +C794,pay,2015-06-19 11:23:12+00:00,2015-06-19 11:18:50+00:00 +C766,prepare delivery,2015-06-19 11:48:40+00:00,2015-06-19 11:43:02+00:00 +C858,send invoice,2015-06-19 12:04:38+00:00,2015-06-19 12:00:10+00:00 +C854,send invoice,2015-06-19 12:08:35+00:00,2015-06-19 12:03:33+00:00 +C868,place order,2015-06-19 12:25:07+00:00,2015-06-19 12:15:51+00:00 +C847,send invoice,2015-06-19 12:35:49+00:00,2015-06-19 12:31:45+00:00 +C843,send invoice,2015-06-19 16:26:06+00:00,2015-06-19 12:45:34+00:00 +C869,place order,2015-06-19 13:59:06+00:00,2015-06-19 13:49:49+00:00 +C734,confirm payment,2015-06-19 13:58:35+00:00,2015-06-19 13:52:48+00:00 +C848,send invoice,2015-06-19 14:31:47+00:00,2015-06-19 14:24:29+00:00 +C708,make delivery,2015-06-19 15:03:16+00:00,2015-06-19 14:47:07+00:00 +C861,send invoice,2015-06-19 14:52:37+00:00,2015-06-19 14:48:13+00:00 +C851,send invoice,2015-06-19 14:56:05+00:00,2015-06-19 14:50:08+00:00 +C726,confirm payment,2015-06-19 15:09:21+00:00,2015-06-19 15:01:18+00:00 +C726,make delivery,2015-06-19 15:18:04+00:00,2015-06-19 15:04:28+00:00 +C752,confirm payment,2015-06-19 15:58:03+00:00,2015-06-19 15:49:29+00:00 +C757,confirm payment,2015-06-19 15:55:38+00:00,2015-06-19 15:49:46+00:00 +C762,make delivery,2015-06-19 16:08:38+00:00,2015-06-19 15:54:57+00:00 +C760,prepare delivery,2015-06-19 18:24:45+00:00,2015-06-19 15:56:27+00:00 +C870,place order,2015-06-19 16:09:38+00:00,2015-06-19 15:57:45+00:00 +C775,make delivery,2015-06-19 16:50:04+00:00,2015-06-19 16:32:24+00:00 +C697,prepare delivery,2015-06-19 16:41:42+00:00,2015-06-19 16:35:17+00:00 +C773,make delivery,2015-06-19 16:52:34+00:00,2015-06-19 16:41:01+00:00 +C793,pay,2015-06-19 16:45:29+00:00,2015-06-19 16:41:24+00:00 +C716,make delivery,2015-06-19 16:58:12+00:00,2015-06-19 16:46:00+00:00 +C751,cancel order,2015-06-19 17:05:05+00:00,2015-06-19 16:58:50+00:00 +C736,confirm payment,2015-06-19 17:10:38+00:00,2015-06-19 17:04:07+00:00 +C769,pay,2015-06-19 17:31:40+00:00,2015-06-19 17:26:38+00:00 +C799,send reminder,2015-06-19 17:44:04+00:00,2015-06-19 17:31:15+00:00 +C736,make delivery,2015-06-19 19:15:54+00:00,2015-06-19 17:45:23+00:00 +C871,place order,2015-06-19 18:17:28+00:00,2015-06-19 18:13:37+00:00 +C803,pay,2015-06-19 18:40:08+00:00,2015-06-19 18:33:54+00:00 +C818,send reminder,2015-06-19 19:17:08+00:00,2015-06-19 19:03:02+00:00 +C806,pay,2015-06-19 19:46:44+00:00,2015-06-19 19:37:35+00:00 +C872,place order,2015-06-19 20:22:31+00:00,2015-06-19 20:17:06+00:00 +C873,place order,2015-06-19 23:18:35+00:00,2015-06-19 23:10:26+00:00 +C874,place order,2015-06-20 21:07:17+00:00,2015-06-20 20:57:43+00:00 +C795,pay,2015-06-21 14:13:55+00:00,2015-06-21 14:07:29+00:00 +C875,place order,2015-06-21 21:12:04+00:00,2015-06-21 21:09:50+00:00 +C876,place order,2015-06-22 09:01:52+00:00,2015-06-22 08:57:51+00:00 +C761,confirm payment,2015-06-22 10:08:58+00:00,2015-06-22 10:00:07+00:00 +C804,pay,2015-06-22 10:12:47+00:00,2015-06-22 10:07:12+00:00 +C835,send invoice,2015-06-22 10:27:06+00:00,2015-06-22 10:21:30+00:00 +C780,make delivery,2015-06-22 12:19:50+00:00,2015-06-22 10:48:33+00:00 +C741,make delivery,2015-06-22 11:51:37+00:00,2015-06-22 11:00:45+00:00 +C765,pay,2015-06-22 11:11:06+00:00,2015-06-22 11:07:27+00:00 +C708,confirm payment,2015-06-22 11:12:14+00:00,2015-06-22 11:08:44+00:00 +C877,place order,2015-06-22 11:21:34+00:00,2015-06-22 11:14:54+00:00 +C788,pay,2015-06-22 11:31:22+00:00,2015-06-22 11:22:03+00:00 +C746,prepare delivery,2015-06-22 11:31:57+00:00,2015-06-22 11:28:08+00:00 +C722,prepare delivery,2015-06-22 12:13:12+00:00,2015-06-22 11:47:28+00:00 +C811,send reminder,2015-06-22 12:00:58+00:00,2015-06-22 11:52:09+00:00 +C759,prepare delivery,2015-06-22 12:25:14+00:00,2015-06-22 12:19:22+00:00 +C756,prepare delivery,2015-06-22 12:23:54+00:00,2015-06-22 12:21:02+00:00 +C766,make delivery,2015-06-22 13:52:23+00:00,2015-06-22 12:23:20+00:00 +C878,place order,2015-06-22 12:50:32+00:00,2015-06-22 12:47:55+00:00 +C773,confirm payment,2015-06-22 13:19:39+00:00,2015-06-22 13:12:07+00:00 +C867,send invoice,2015-06-22 13:23:40+00:00,2015-06-22 13:18:25+00:00 +C812,send reminder,2015-06-22 14:17:10+00:00,2015-06-22 14:05:16+00:00 +C762,confirm payment,2015-06-22 14:39:45+00:00,2015-06-22 14:34:42+00:00 +C758,prepare delivery,2015-06-22 17:01:17+00:00,2015-06-22 14:35:54+00:00 +C879,place order,2015-06-22 16:52:42+00:00,2015-06-22 14:53:57+00:00 +C796,send reminder,2015-06-22 16:20:28+00:00,2015-06-22 16:02:10+00:00 +C760,make delivery,2015-06-22 16:51:22+00:00,2015-06-22 16:17:18+00:00 +C866,send invoice,2015-06-22 16:29:57+00:00,2015-06-22 16:25:06+00:00 +C844,send invoice,2015-06-22 16:40:14+00:00,2015-06-22 16:30:24+00:00 +C771,prepare delivery,2015-06-22 19:34:25+00:00,2015-06-22 16:54:25+00:00 +C780,confirm payment,2015-06-22 17:04:33+00:00,2015-06-22 16:57:06+00:00 +C852,send invoice,2015-06-22 17:07:29+00:00,2015-06-22 17:00:12+00:00 +C880,place order,2015-06-22 17:12:05+00:00,2015-06-22 17:06:02+00:00 +C764,pay,2015-06-22 17:45:34+00:00,2015-06-22 17:39:02+00:00 +C782,prepare delivery,2015-06-22 18:02:46+00:00,2015-06-22 17:58:51+00:00 +C760,confirm payment,2015-06-22 18:23:23+00:00,2015-06-22 18:17:50+00:00 +C881,place order,2015-06-22 18:33:35+00:00,2015-06-22 18:30:11+00:00 +C856,send invoice,2015-06-22 19:01:47+00:00,2015-06-22 18:47:43+00:00 +C777,prepare delivery,2015-06-22 19:39:49+00:00,2015-06-22 19:36:52+00:00 +C784,send reminder,2015-06-22 20:01:02+00:00,2015-06-22 19:42:22+00:00 +C790,pay,2015-06-22 21:02:49+00:00,2015-06-22 20:58:31+00:00 +C882,place order,2015-06-22 21:24:35+00:00,2015-06-22 21:06:47+00:00 +C883,place order,2015-06-23 02:44:25+00:00,2015-06-23 02:41:54+00:00 +C697,make delivery,2015-06-23 08:58:35+00:00,2015-06-23 08:48:59+00:00 +C807,send reminder,2015-06-23 09:05:23+00:00,2015-06-23 08:58:13+00:00 +C775,confirm payment,2015-06-23 09:13:56+00:00,2015-06-23 09:08:51+00:00 +C834,send reminder,2015-06-23 09:29:26+00:00,2015-06-23 09:10:46+00:00 +C868,send invoice,2015-06-23 09:38:15+00:00,2015-06-23 09:32:51+00:00 +C789,prepare delivery,2015-06-23 10:08:02+00:00,2015-06-23 09:40:54+00:00 +C823,send reminder,2015-06-23 10:03:26+00:00,2015-06-23 09:43:22+00:00 +C815,send reminder,2015-06-23 10:24:09+00:00,2015-06-23 09:54:55+00:00 +C884,place order,2015-06-23 10:03:51+00:00,2015-06-23 09:58:13+00:00 +C741,confirm payment,2015-06-23 10:29:30+00:00,2015-06-23 10:22:18+00:00 +C755,pay,2015-06-23 10:51:17+00:00,2015-06-23 10:43:04+00:00 +C759,make delivery,2015-06-23 11:15:27+00:00,2015-06-23 10:52:26+00:00 +C785,prepare delivery,2015-06-23 10:59:31+00:00,2015-06-23 10:56:26+00:00 +C766,confirm payment,2015-06-23 11:44:36+00:00,2015-06-23 11:41:17+00:00 +C722,make delivery,2015-06-23 12:21:13+00:00,2015-06-23 11:56:56+00:00 +C870,send invoice,2015-06-23 12:06:57+00:00,2015-06-23 11:59:41+00:00 +C722,confirm payment,2015-06-23 12:11:43+00:00,2015-06-23 12:03:39+00:00 +C697,confirm payment,2015-06-23 12:13:26+00:00,2015-06-23 12:07:19+00:00 +C885,place order,2015-06-23 12:23:45+00:00,2015-06-23 12:14:33+00:00 +C756,make delivery,2015-06-23 12:30:21+00:00,2015-06-23 12:15:01+00:00 +C768,prepare delivery,2015-06-23 12:25:26+00:00,2015-06-23 12:17:26+00:00 +C800,pay,2015-06-23 12:31:52+00:00,2015-06-23 12:25:05+00:00 +C875,send invoice,2015-06-23 12:45:13+00:00,2015-06-23 12:29:22+00:00 +C783,pay,2015-06-23 12:56:33+00:00,2015-06-23 12:49:17+00:00 +C869,send invoice,2015-06-23 13:41:14+00:00,2015-06-23 13:39:11+00:00 +C756,confirm payment,2015-06-23 13:51:34+00:00,2015-06-23 13:44:10+00:00 +C886,place order,2015-06-23 13:52:14+00:00,2015-06-23 13:47:13+00:00 +C859,send invoice,2015-06-23 13:58:07+00:00,2015-06-23 13:52:28+00:00 +C746,make delivery,2015-06-23 14:45:46+00:00,2015-06-23 13:54:04+00:00 +C758,make delivery,2015-06-23 15:33:52+00:00,2015-06-23 14:17:05+00:00 +C759,confirm payment,2015-06-23 14:53:40+00:00,2015-06-23 14:47:14+00:00 +C813,send reminder,2015-06-23 15:55:09+00:00,2015-06-23 15:29:01+00:00 +C769,prepare delivery,2015-06-23 15:35:33+00:00,2015-06-23 15:31:51+00:00 +C824,send reminder,2015-06-23 16:01:34+00:00,2015-06-23 15:47:37+00:00 +C887,place order,2015-06-23 15:56:48+00:00,2015-06-23 15:52:34+00:00 +C774,prepare delivery,2015-06-23 16:27:20+00:00,2015-06-23 16:20:31+00:00 +C749,prepare delivery,2015-06-23 16:48:12+00:00,2015-06-23 16:44:14+00:00 +C777,make delivery,2015-06-23 18:24:01+00:00,2015-06-23 16:53:22+00:00 +C805,pay,2015-06-23 17:06:28+00:00,2015-06-23 16:57:06+00:00 +C826,pay,2015-06-23 17:28:17+00:00,2015-06-23 16:57:31+00:00 +C811,pay,2015-06-23 17:59:14+00:00,2015-06-23 17:33:36+00:00 +C771,make delivery,2015-06-23 17:43:45+00:00,2015-06-23 17:34:02+00:00 +C798,pay,2015-06-23 17:49:21+00:00,2015-06-23 17:44:14+00:00 +C777,confirm payment,2015-06-23 17:58:42+00:00,2015-06-23 17:49:30+00:00 +C789,make delivery,2015-06-23 18:12:11+00:00,2015-06-23 18:01:19+00:00 +C888,place order,2015-06-23 18:45:17+00:00,2015-06-23 18:03:15+00:00 +C802,pay,2015-06-23 21:59:06+00:00,2015-06-23 18:37:19+00:00 +C889,place order,2015-06-23 19:49:54+00:00,2015-06-23 19:45:59+00:00 +C782,make delivery,2015-06-23 20:50:49+00:00,2015-06-23 19:52:38+00:00 +C821,pay,2015-06-23 19:56:26+00:00,2015-06-23 19:54:02+00:00 +C890,place order,2015-06-23 23:14:52+00:00,2015-06-23 23:08:13+00:00 +C776,prepare delivery,2015-06-24 08:54:38+00:00,2015-06-24 08:27:49+00:00 +C841,send reminder,2015-06-24 09:03:38+00:00,2015-06-24 08:39:49+00:00 +C891,place order,2015-06-24 13:11:17+00:00,2015-06-24 08:58:06+00:00 +C834,pay,2015-06-24 09:20:08+00:00,2015-06-24 09:17:13+00:00 +C814,pay,2015-06-24 09:37:49+00:00,2015-06-24 09:29:52+00:00 +C797,send reminder,2015-06-24 09:55:59+00:00,2015-06-24 09:41:05+00:00 +C778,prepare delivery,2015-06-24 10:07:53+00:00,2015-06-24 09:52:04+00:00 +C758,confirm payment,2015-06-24 10:27:30+00:00,2015-06-24 10:18:32+00:00 +C785,make delivery,2015-06-24 12:14:14+00:00,2015-06-24 10:38:25+00:00 +C768,make delivery,2015-06-24 11:21:12+00:00,2015-06-24 11:03:15+00:00 +C746,confirm payment,2015-06-24 11:20:37+00:00,2015-06-24 11:12:18+00:00 +C892,place order,2015-06-24 12:04:06+00:00,2015-06-24 11:15:16+00:00 +C793,prepare delivery,2015-06-24 11:38:13+00:00,2015-06-24 11:30:31+00:00 +C781,send reminder,2015-06-24 12:20:14+00:00,2015-06-24 11:42:52+00:00 +C833,send reminder,2015-06-24 12:22:06+00:00,2015-06-24 11:46:59+00:00 +C853,send invoice,2015-06-24 12:08:50+00:00,2015-06-24 12:03:23+00:00 +C763,prepare delivery,2015-06-24 12:27:49+00:00,2015-06-24 12:24:12+00:00 +C862,send invoice,2015-06-24 12:42:38+00:00,2015-06-24 12:26:43+00:00 +C794,prepare delivery,2015-06-24 12:39:15+00:00,2015-06-24 12:31:21+00:00 +C865,send invoice,2015-06-24 12:57:41+00:00,2015-06-24 12:37:58+00:00 +C893,place order,2015-06-24 12:55:58+00:00,2015-06-24 12:48:39+00:00 +C786,pay,2015-06-24 13:46:42+00:00,2015-06-24 13:42:32+00:00 +C784,pay,2015-06-24 14:22:29+00:00,2015-06-24 14:09:10+00:00 +C779,prepare delivery,2015-06-24 16:54:01+00:00,2015-06-24 14:17:19+00:00 +C864,send invoice,2015-06-24 14:48:20+00:00,2015-06-24 14:40:23+00:00 +C803,prepare delivery,2015-06-24 17:08:24+00:00,2015-06-24 14:43:14+00:00 +C817,send reminder,2015-06-24 15:28:59+00:00,2015-06-24 14:48:38+00:00 +C894,place order,2015-06-24 15:02:32+00:00,2015-06-24 14:55:25+00:00 +C874,send invoice,2015-06-24 15:48:32+00:00,2015-06-24 15:31:14+00:00 +C747,prepare delivery,2015-06-24 15:39:20+00:00,2015-06-24 15:35:37+00:00 +C832,send reminder,2015-06-24 15:49:30+00:00,2015-06-24 15:36:12+00:00 +C749,make delivery,2015-06-24 16:18:29+00:00,2015-06-24 15:50:38+00:00 +C769,make delivery,2015-06-24 16:25:05+00:00,2015-06-24 15:55:41+00:00 +C789,confirm payment,2015-06-24 16:02:53+00:00,2015-06-24 15:56:51+00:00 +C877,send invoice,2015-06-24 16:09:18+00:00,2015-06-24 16:03:06+00:00 +C782,confirm payment,2015-06-24 16:06:52+00:00,2015-06-24 16:04:09+00:00 +C771,confirm payment,2015-06-24 16:13:02+00:00,2015-06-24 16:09:14+00:00 +C797,cancel order,2015-06-24 16:20:05+00:00,2015-06-24 16:13:20+00:00 +C774,make delivery,2015-06-24 16:44:27+00:00,2015-06-24 16:15:50+00:00 +C830,send reminder,2015-06-24 16:39:15+00:00,2015-06-24 16:26:58+00:00 +C769,confirm payment,2015-06-24 16:44:15+00:00,2015-06-24 16:37:04+00:00 +C776,make delivery,2015-06-24 18:14:52+00:00,2015-06-24 16:48:47+00:00 +C749,confirm payment,2015-06-24 17:29:40+00:00,2015-06-24 16:50:14+00:00 +C882,send invoice,2015-06-24 16:57:18+00:00,2015-06-24 16:54:37+00:00 +C895,place order,2015-06-24 17:16:51+00:00,2015-06-24 17:08:58+00:00 +C765,prepare delivery,2015-06-24 17:28:13+00:00,2015-06-24 17:24:34+00:00 +C809,pay,2015-06-24 17:59:03+00:00,2015-06-24 17:55:02+00:00 +C796,pay,2015-06-24 18:02:05+00:00,2015-06-24 17:55:34+00:00 +C889,send invoice,2015-06-24 18:30:24+00:00,2015-06-24 18:23:03+00:00 +C778,confirm payment,2015-06-24 18:26:23+00:00,2015-06-24 18:23:34+00:00 +C896,place order,2015-06-24 18:41:06+00:00,2015-06-24 18:36:03+00:00 +C818,pay,2015-06-24 19:18:01+00:00,2015-06-24 19:13:24+00:00 +C808,pay,2015-06-24 19:29:21+00:00,2015-06-24 19:22:45+00:00 +C897,place order,2015-06-24 23:16:24+00:00,2015-06-24 21:24:23+00:00 +C898,place order,2015-06-25 04:41:53+00:00,2015-06-25 04:27:30+00:00 +C778,make delivery,2015-06-25 09:35:32+00:00,2015-06-25 09:02:14+00:00 +C872,send invoice,2015-06-25 09:20:03+00:00,2015-06-25 09:02:29+00:00 +C788,prepare delivery,2015-06-25 09:23:10+00:00,2015-06-25 09:15:14+00:00 +C793,make delivery,2015-06-25 11:22:28+00:00,2015-06-25 09:43:38+00:00 +C899,place order,2015-06-25 09:58:32+00:00,2015-06-25 09:54:22+00:00 +C791,send reminder,2015-06-25 10:15:22+00:00,2015-06-25 09:59:49+00:00 +C768,confirm payment,2015-06-25 10:15:46+00:00,2015-06-25 10:06:47+00:00 +C871,send invoice,2015-06-25 10:20:13+00:00,2015-06-25 10:08:41+00:00 +C824,pay,2015-06-25 10:20:42+00:00,2015-06-25 10:09:02+00:00 +C845,send reminder,2015-06-25 11:09:05+00:00,2015-06-25 10:39:44+00:00 +C793,confirm payment,2015-06-25 11:03:04+00:00,2015-06-25 10:50:10+00:00 +C801,prepare delivery,2015-06-25 10:54:27+00:00,2015-06-25 10:50:34+00:00 +C794,make delivery,2015-06-25 12:25:22+00:00,2015-06-25 11:02:36+00:00 +C785,confirm payment,2015-06-25 11:13:38+00:00,2015-06-25 11:03:13+00:00 +C776,confirm payment,2015-06-25 11:19:39+00:00,2015-06-25 11:15:06+00:00 +C900,place order,2015-06-25 12:13:58+00:00,2015-06-25 12:06:52+00:00 +C764,prepare delivery,2015-06-25 12:24:28+00:00,2015-06-25 12:17:19+00:00 +C803,make delivery,2015-06-25 12:38:22+00:00,2015-06-25 12:21:35+00:00 +C755,prepare delivery,2015-06-25 12:51:03+00:00,2015-06-25 12:47:32+00:00 +C787,send reminder,2015-06-25 13:16:51+00:00,2015-06-25 13:04:29+00:00 +C901,place order,2015-06-25 13:38:06+00:00,2015-06-25 13:31:51+00:00 +C763,make delivery,2015-06-25 14:40:42+00:00,2015-06-25 14:13:04+00:00 +C774,confirm payment,2015-06-25 14:35:07+00:00,2015-06-25 14:28:57+00:00 +C897,send invoice,2015-06-25 14:34:54+00:00,2015-06-25 14:31:03+00:00 +C794,confirm payment,2015-06-25 14:42:55+00:00,2015-06-25 14:33:59+00:00 +C890,send invoice,2015-06-25 17:24:48+00:00,2015-06-25 14:35:21+00:00 +C792,prepare delivery,2015-06-25 14:59:25+00:00,2015-06-25 14:45:19+00:00 +C747,make delivery,2015-06-25 15:09:31+00:00,2015-06-25 14:51:42+00:00 +C820,pay,2015-06-25 15:01:39+00:00,2015-06-25 14:57:19+00:00 +C832,pay,2015-06-25 15:04:02+00:00,2015-06-25 14:58:23+00:00 +C857,send reminder,2015-06-25 15:22:06+00:00,2015-06-25 14:58:50+00:00 +C819,pay,2015-06-25 15:18:26+00:00,2015-06-25 15:11:23+00:00 +C902,place order,2015-06-25 15:32:58+00:00,2015-06-25 15:21:49+00:00 +C806,prepare delivery,2015-06-25 15:26:19+00:00,2015-06-25 15:22:46+00:00 +C791,cancel order,2015-06-25 15:42:03+00:00,2015-06-25 15:26:55+00:00 +C765,make delivery,2015-06-25 17:18:02+00:00,2015-06-25 15:47:38+00:00 +C721,prepare delivery,2015-06-25 15:57:45+00:00,2015-06-25 15:50:05+00:00 +C810,send reminder,2015-06-25 16:22:55+00:00,2015-06-25 16:05:40+00:00 +C765,confirm payment,2015-06-25 16:12:28+00:00,2015-06-25 16:06:32+00:00 +C779,make delivery,2015-06-25 16:34:10+00:00,2015-06-25 16:18:16+00:00 +C860,send invoice,2015-06-25 16:25:18+00:00,2015-06-25 16:18:46+00:00 +C863,send invoice,2015-06-25 16:41:21+00:00,2015-06-25 16:32:36+00:00 +C800,prepare delivery,2015-06-25 16:36:26+00:00,2015-06-25 16:32:46+00:00 +C763,confirm payment,2015-06-25 16:43:32+00:00,2015-06-25 16:35:57+00:00 +C833,pay,2015-06-25 16:52:12+00:00,2015-06-25 16:45:29+00:00 +C903,place order,2015-06-25 17:06:33+00:00,2015-06-25 17:01:45+00:00 +C836,send reminder,2015-06-25 17:42:57+00:00,2015-06-25 17:29:37+00:00 +C839,send reminder,2015-06-25 18:10:58+00:00,2015-06-25 17:47:18+00:00 +C891,send invoice,2015-06-25 18:04:56+00:00,2015-06-25 17:58:07+00:00 +C840,send reminder,2015-06-25 18:20:18+00:00,2015-06-25 18:02:07+00:00 +C904,place order,2015-06-25 21:18:41+00:00,2015-06-25 18:21:38+00:00 +C831,send reminder,2015-06-25 19:21:02+00:00,2015-06-25 18:49:23+00:00 +C905,place order,2015-06-25 20:48:30+00:00,2015-06-25 20:41:08+00:00 +C790,prepare delivery,2015-06-25 21:26:21+00:00,2015-06-25 21:18:25+00:00 +C906,place order,2015-06-26 01:17:18+00:00,2015-06-26 01:08:00+00:00 +C834,prepare delivery,2015-06-26 08:43:32+00:00,2015-06-26 08:35:36+00:00 +C779,confirm payment,2015-06-26 08:47:43+00:00,2015-06-26 08:41:01+00:00 +C907,place order,2015-06-26 09:21:09+00:00,2015-06-26 09:14:55+00:00 +C788,make delivery,2015-06-26 10:01:44+00:00,2015-06-26 09:35:55+00:00 +C803,confirm payment,2015-06-26 09:59:19+00:00,2015-06-26 09:53:25+00:00 +C844,pay,2015-06-26 10:04:29+00:00,2015-06-26 10:02:20+00:00 +C801,make delivery,2015-06-26 11:42:18+00:00,2015-06-26 10:20:56+00:00 +C908,place order,2015-06-26 10:59:36+00:00,2015-06-26 10:47:58+00:00 +C878,send invoice,2015-06-26 10:59:55+00:00,2015-06-26 10:50:35+00:00 +C747,confirm payment,2015-06-26 11:19:06+00:00,2015-06-26 11:08:55+00:00 +C873,send invoice,2015-06-26 11:30:56+00:00,2015-06-26 11:25:09+00:00 +C827,send reminder,2015-06-26 11:42:25+00:00,2015-06-26 11:30:58+00:00 +C846,send reminder,2015-06-26 11:50:15+00:00,2015-06-26 11:41:12+00:00 +C783,prepare delivery,2015-06-26 12:32:28+00:00,2015-06-26 12:06:14+00:00 +C811,prepare delivery,2015-06-26 12:27:44+00:00,2015-06-26 12:11:57+00:00 +C851,send reminder,2015-06-26 12:29:36+00:00,2015-06-26 12:20:52+00:00 +C816,pay,2015-06-26 12:29:39+00:00,2015-06-26 12:26:56+00:00 +C792,make delivery,2015-06-26 12:47:12+00:00,2015-06-26 12:33:08+00:00 +C801,confirm payment,2015-06-26 12:42:26+00:00,2015-06-26 12:34:59+00:00 +C755,make delivery,2015-06-26 12:51:10+00:00,2015-06-26 12:36:46+00:00 +C909,place order,2015-06-26 12:56:15+00:00,2015-06-26 12:54:03+00:00 +C883,send invoice,2015-06-26 14:24:06+00:00,2015-06-26 14:19:43+00:00 +C764,make delivery,2015-06-26 14:32:43+00:00,2015-06-26 14:22:30+00:00 +C795,prepare delivery,2015-06-26 14:26:32+00:00,2015-06-26 14:23:40+00:00 +C910,place order,2015-06-26 15:18:07+00:00,2015-06-26 15:06:13+00:00 +C806,make delivery,2015-06-26 17:06:24+00:00,2015-06-26 15:49:03+00:00 +C788,confirm payment,2015-06-26 16:03:32+00:00,2015-06-26 15:58:34+00:00 +C804,prepare delivery,2015-06-26 18:37:51+00:00,2015-06-26 16:00:18+00:00 +C841,pay,2015-06-26 16:05:23+00:00,2015-06-26 16:00:58+00:00 +C848,send reminder,2015-06-26 16:27:12+00:00,2015-06-26 16:12:42+00:00 +C806,confirm payment,2015-06-26 16:25:06+00:00,2015-06-26 16:19:56+00:00 +C879,send invoice,2015-06-26 16:25:49+00:00,2015-06-26 16:23:09+00:00 +C911,place order,2015-06-26 16:41:35+00:00,2015-06-26 16:30:33+00:00 +C767,prepare delivery,2015-06-26 17:00:25+00:00,2015-06-26 16:56:43+00:00 +C834,make delivery,2015-06-26 17:29:49+00:00,2015-06-26 17:17:19+00:00 +C721,confirm payment,2015-06-26 17:27:18+00:00,2015-06-26 17:24:45+00:00 +C764,confirm payment,2015-06-26 17:39:51+00:00,2015-06-26 17:30:12+00:00 +C755,confirm payment,2015-06-26 17:53:41+00:00,2015-06-26 17:42:42+00:00 +C826,prepare delivery,2015-06-26 17:50:37+00:00,2015-06-26 17:43:59+00:00 +C721,make delivery,2015-06-26 19:00:14+00:00,2015-06-26 17:44:48+00:00 +C814,prepare delivery,2015-06-26 18:39:15+00:00,2015-06-26 18:12:44+00:00 +C904,send invoice,2015-06-26 18:22:10+00:00,2015-06-26 18:14:22+00:00 +C912,place order,2015-06-26 18:24:17+00:00,2015-06-26 18:19:13+00:00 +C798,prepare delivery,2015-06-26 18:47:42+00:00,2015-06-26 18:40:39+00:00 +C790,make delivery,2015-06-26 21:12:40+00:00,2015-06-26 20:17:47+00:00 +C913,place order,2015-06-26 20:37:55+00:00,2015-06-26 20:33:54+00:00 +C899,send invoice,2015-06-26 21:45:47+00:00,2015-06-26 21:43:31+00:00 +C914,place order,2015-06-27 04:08:05+00:00,2015-06-27 00:24:36+00:00 +C822,pay,2015-06-27 14:01:19+00:00,2015-06-27 13:54:58+00:00 +C915,place order,2015-06-28 01:28:15+00:00,2015-06-27 22:55:55+00:00 +C829,pay,2015-06-28 13:30:39+00:00,2015-06-28 13:23:22+00:00 +C916,place order,2015-06-28 23:15:17+00:00,2015-06-28 23:06:15+00:00 +C825,pay,2015-06-29 06:53:49+00:00,2015-06-29 06:48:45+00:00 +C907,send invoice,2015-06-29 08:54:16+00:00,2015-06-29 08:50:31+00:00 +C913,send invoice,2015-06-29 09:10:59+00:00,2015-06-29 09:03:26+00:00 +C917,place order,2015-06-29 09:11:21+00:00,2015-06-29 09:05:25+00:00 +C850,pay,2015-06-29 09:48:46+00:00,2015-06-29 09:45:09+00:00 +C876,send invoice,2015-06-29 09:54:07+00:00,2015-06-29 09:49:31+00:00 +C781,pay,2015-06-29 09:57:38+00:00,2015-06-29 09:51:22+00:00 +C830,pay,2015-06-29 09:57:33+00:00,2015-06-29 09:52:04+00:00 +C802,prepare delivery,2015-06-29 12:25:26+00:00,2015-06-29 10:02:58+00:00 +C918,place order,2015-06-29 10:54:33+00:00,2015-06-29 10:28:57+00:00 +C800,make delivery,2015-06-29 11:13:56+00:00,2015-06-29 10:45:00+00:00 +C805,prepare delivery,2015-06-29 10:55:29+00:00,2015-06-29 10:48:14+00:00 +C799,send reminder,2015-06-29 11:56:06+00:00,2015-06-29 11:16:48+00:00 +C787,pay,2015-06-29 11:30:40+00:00,2015-06-29 11:27:24+00:00 +C811,make delivery,2015-06-29 12:02:37+00:00,2015-06-29 11:36:26+00:00 +C783,make delivery,2015-06-29 12:12:59+00:00,2015-06-29 11:49:17+00:00 +C919,place order,2015-06-29 12:27:51+00:00,2015-06-29 12:16:01+00:00 +C821,prepare delivery,2015-06-29 12:22:46+00:00,2015-06-29 12:19:15+00:00 +C792,confirm payment,2015-06-29 12:39:56+00:00,2015-06-29 12:31:21+00:00 +C819,prepare delivery,2015-06-29 13:05:01+00:00,2015-06-29 13:01:28+00:00 +C915,send invoice,2015-06-29 13:15:25+00:00,2015-06-29 13:09:50+00:00 +C783,confirm payment,2015-06-29 13:35:04+00:00,2015-06-29 13:26:10+00:00 +C898,send invoice,2015-06-29 13:31:10+00:00,2015-06-29 13:26:20+00:00 +C812,send reminder,2015-06-29 13:51:26+00:00,2015-06-29 13:38:47+00:00 +C800,confirm payment,2015-06-29 13:54:37+00:00,2015-06-29 13:47:10+00:00 +C920,place order,2015-06-29 14:03:22+00:00,2015-06-29 13:50:09+00:00 +C852,send reminder,2015-06-29 14:31:55+00:00,2015-06-29 14:10:45+00:00 +C828,pay,2015-06-29 14:27:11+00:00,2015-06-29 14:22:29+00:00 +C795,make delivery,2015-06-29 16:12:56+00:00,2015-06-29 14:53:57+00:00 +C814,confirm payment,2015-06-29 16:02:52+00:00,2015-06-29 15:23:13+00:00 +C881,send invoice,2015-06-29 15:40:56+00:00,2015-06-29 15:32:05+00:00 +C804,make delivery,2015-06-29 16:11:51+00:00,2015-06-29 15:42:46+00:00 +C888,send invoice,2015-06-29 16:09:01+00:00,2015-06-29 15:57:05+00:00 +C921,place order,2015-06-29 16:05:24+00:00,2015-06-29 15:58:25+00:00 +C895,send invoice,2015-06-29 16:12:53+00:00,2015-06-29 16:04:51+00:00 +C826,make delivery,2015-06-29 17:50:03+00:00,2015-06-29 16:23:19+00:00 +C790,confirm payment,2015-06-29 16:44:56+00:00,2015-06-29 16:27:42+00:00 +C796,prepare delivery,2015-06-29 16:33:46+00:00,2015-06-29 16:29:50+00:00 +C811,confirm payment,2015-06-29 17:16:21+00:00,2015-06-29 17:01:31+00:00 +C784,prepare delivery,2015-06-29 17:30:53+00:00,2015-06-29 17:23:25+00:00 +C814,make delivery,2015-06-29 17:54:25+00:00,2015-06-29 17:45:07+00:00 +C767,make delivery,2015-06-29 18:01:51+00:00,2015-06-29 17:48:17+00:00 +C922,place order,2015-06-29 22:34:37+00:00,2015-06-29 18:14:58+00:00 +C833,prepare delivery,2015-06-29 18:53:22+00:00,2015-06-29 18:45:52+00:00 +C860,pay,2015-06-29 19:22:50+00:00,2015-06-29 19:12:51+00:00 +C834,confirm payment,2015-06-29 19:33:17+00:00,2015-06-29 19:22:26+00:00 +C923,place order,2015-06-29 20:51:36+00:00,2015-06-29 20:21:08+00:00 +C861,pay,2015-06-29 21:10:09+00:00,2015-06-29 21:04:12+00:00 +C802,make delivery,2015-06-29 21:20:50+00:00,2015-06-29 21:04:53+00:00 +C924,place order,2015-06-29 23:42:22+00:00,2015-06-29 23:18:30+00:00 +C795,confirm payment,2015-06-30 08:51:10+00:00,2015-06-30 08:47:40+00:00 +C826,confirm payment,2015-06-30 08:59:22+00:00,2015-06-30 08:49:17+00:00 +C802,confirm payment,2015-06-30 09:05:07+00:00,2015-06-30 08:56:34+00:00 +C902,send invoice,2015-06-30 11:49:06+00:00,2015-06-30 09:04:14+00:00 +C925,place order,2015-06-30 09:17:53+00:00,2015-06-30 09:10:27+00:00 +C798,make delivery,2015-06-30 09:47:52+00:00,2015-06-30 09:30:00+00:00 +C812,cancel order,2015-06-30 09:48:47+00:00,2015-06-30 09:41:10+00:00 +C805,confirm payment,2015-06-30 09:55:58+00:00,2015-06-30 09:49:31+00:00 +C810,pay,2015-06-30 10:12:43+00:00,2015-06-30 10:07:00+00:00 +C807,send reminder,2015-06-30 10:49:36+00:00,2015-06-30 10:12:13+00:00 +C896,send invoice,2015-06-30 10:18:58+00:00,2015-06-30 10:15:03+00:00 +C805,make delivery,2015-06-30 10:54:55+00:00,2015-06-30 10:37:46+00:00 +C926,place order,2015-06-30 13:40:25+00:00,2015-06-30 10:39:01+00:00 +C875,send reminder,2015-06-30 11:07:25+00:00,2015-06-30 10:43:36+00:00 +C823,send reminder,2015-06-30 11:09:55+00:00,2015-06-30 10:46:53+00:00 +C804,confirm payment,2015-06-30 11:25:25+00:00,2015-06-30 11:09:48+00:00 +C894,send invoice,2015-06-30 11:29:43+00:00,2015-06-30 11:12:00+00:00 +C798,confirm payment,2015-06-30 11:30:58+00:00,2015-06-30 11:26:25+00:00 +C910,send invoice,2015-06-30 11:48:47+00:00,2015-06-30 11:35:10+00:00 +C886,send invoice,2015-06-30 12:18:19+00:00,2015-06-30 12:09:12+00:00 +C927,place order,2015-06-30 12:42:16+00:00,2015-06-30 12:36:09+00:00 +C815,send reminder,2015-06-30 12:46:13+00:00,2015-06-30 12:37:41+00:00 +C807,cancel order,2015-06-30 13:13:08+00:00,2015-06-30 13:00:14+00:00 +C908,send invoice,2015-06-30 13:24:05+00:00,2015-06-30 13:20:21+00:00 +C884,send invoice,2015-06-30 13:35:28+00:00,2015-06-30 13:28:59+00:00 +C819,make delivery,2015-06-30 13:48:39+00:00,2015-06-30 13:38:07+00:00 +C928,place order,2015-06-30 17:04:48+00:00,2015-06-30 14:30:26+00:00 +C821,make delivery,2015-06-30 16:38:29+00:00,2015-06-30 15:08:08+00:00 +C927,send invoice,2015-06-30 15:22:24+00:00,2015-06-30 15:10:29+00:00 +C911,send invoice,2015-06-30 15:20:23+00:00,2015-06-30 15:16:08+00:00 +C819,confirm payment,2015-06-30 15:26:19+00:00,2015-06-30 15:20:04+00:00 +C903,send invoice,2015-06-30 15:26:37+00:00,2015-06-30 15:23:30+00:00 +C859,send reminder,2015-06-30 15:56:20+00:00,2015-06-30 15:26:06+00:00 +C796,confirm payment,2015-06-30 15:55:45+00:00,2015-06-30 15:46:45+00:00 +C784,confirm payment,2015-06-30 16:27:32+00:00,2015-06-30 16:06:32+00:00 +C880,send invoice,2015-06-30 16:16:15+00:00,2015-06-30 16:08:33+00:00 +C929,place order,2015-06-30 16:36:36+00:00,2015-06-30 16:18:59+00:00 +C843,pay,2015-06-30 16:27:22+00:00,2015-06-30 16:24:21+00:00 +C893,send invoice,2015-06-30 16:46:15+00:00,2015-06-30 16:29:25+00:00 +C796,make delivery,2015-06-30 16:45:24+00:00,2015-06-30 16:29:27+00:00 +C832,prepare delivery,2015-06-30 16:48:41+00:00,2015-06-30 16:41:01+00:00 +C836,pay,2015-06-30 16:53:21+00:00,2015-06-30 16:48:18+00:00 +C833,confirm payment,2015-06-30 17:16:57+00:00,2015-06-30 17:07:43+00:00 +C909,send invoice,2015-06-30 17:21:05+00:00,2015-06-30 17:16:43+00:00 +C821,confirm payment,2015-06-30 17:26:00+00:00,2015-06-30 17:19:15+00:00 +C914,send invoice,2015-06-30 17:33:03+00:00,2015-06-30 17:27:20+00:00 +C813,send reminder,2015-06-30 18:12:25+00:00,2015-06-30 17:50:41+00:00 +C767,confirm payment,2015-06-30 17:58:09+00:00,2015-06-30 17:53:27+00:00 +C930,place order,2015-06-30 18:09:42+00:00,2015-06-30 17:56:05+00:00 +C856,pay,2015-06-30 19:38:23+00:00,2015-06-30 19:31:14+00:00 +C829,prepare delivery,2015-06-30 19:46:59+00:00,2015-06-30 19:40:35+00:00 +C833,make delivery,2015-06-30 19:55:59+00:00,2015-06-30 19:41:57+00:00 +C931,place order,2015-06-30 20:55:19+00:00,2015-06-30 20:24:29+00:00 +C885,send invoice,2015-06-30 21:51:01+00:00,2015-06-30 21:44:29+00:00 +C854,pay,2015-06-30 23:03:12+00:00,2015-06-30 22:57:48+00:00 +C932,place order,2015-06-30 23:36:39+00:00,2015-06-30 23:28:06+00:00 +C864,pay,2015-07-01 07:41:27+00:00,2015-07-01 07:35:35+00:00 +C820,prepare delivery,2015-07-01 09:17:38+00:00,2015-07-01 09:10:32+00:00 +C933,place order,2015-07-01 09:31:13+00:00,2015-07-01 09:21:58+00:00 +C784,make delivery,2015-07-01 09:44:28+00:00,2015-07-01 09:29:07+00:00 +C900,send invoice,2015-07-01 09:41:29+00:00,2015-07-01 09:37:49+00:00 +C809,prepare delivery,2015-07-01 09:54:08+00:00,2015-07-01 09:50:12+00:00 +C839,pay,2015-07-01 10:41:40+00:00,2015-07-01 10:38:40+00:00 +C934,place order,2015-07-01 11:08:03+00:00,2015-07-01 11:02:03+00:00 +C838,pay,2015-07-01 11:49:21+00:00,2015-07-01 11:39:21+00:00 +C862,pay,2015-07-01 11:57:23+00:00,2015-07-01 11:52:17+00:00 +C799,pay,2015-07-01 12:05:15+00:00,2015-07-01 11:59:27+00:00 +C853,send reminder,2015-07-01 12:21:59+00:00,2015-07-01 12:06:36+00:00 +C935,place order,2015-07-01 12:31:31+00:00,2015-07-01 12:22:14+00:00 +C905,send invoice,2015-07-01 12:36:08+00:00,2015-07-01 12:29:07+00:00 +C858,pay,2015-07-01 13:27:44+00:00,2015-07-01 13:19:45+00:00 +C936,place order,2015-07-01 14:06:19+00:00,2015-07-01 14:02:35+00:00 +C923,send invoice,2015-07-01 14:47:04+00:00,2015-07-01 14:40:14+00:00 +C901,send invoice,2015-07-01 14:49:08+00:00,2015-07-01 14:41:34+00:00 +C845,pay,2015-07-01 14:52:43+00:00,2015-07-01 14:47:07+00:00 +C835,pay,2015-07-01 14:57:12+00:00,2015-07-01 14:52:34+00:00 +C912,send invoice,2015-07-01 15:29:03+00:00,2015-07-01 15:19:21+00:00 +C937,place order,2015-07-01 15:29:25+00:00,2015-07-01 15:23:17+00:00 +C852,pay,2015-07-01 15:39:16+00:00,2015-07-01 15:32:05+00:00 +C786,prepare delivery,2015-07-01 16:02:25+00:00,2015-07-01 15:54:31+00:00 +C887,send invoice,2015-07-01 16:17:11+00:00,2015-07-01 16:11:45+00:00 +C918,send invoice,2015-07-01 16:41:32+00:00,2015-07-01 16:34:37+00:00 +C832,make delivery,2015-07-01 17:26:55+00:00,2015-07-01 17:00:26+00:00 +C938,place order,2015-07-01 21:27:15+00:00,2015-07-01 17:04:41+00:00 +C869,pay,2015-07-01 17:34:52+00:00,2015-07-01 17:28:39+00:00 +C825,prepare delivery,2015-07-01 18:04:23+00:00,2015-07-01 18:00:51+00:00 +C939,place order,2015-07-01 21:03:36+00:00,2015-07-01 18:27:29+00:00 +C940,place order,2015-07-01 21:06:38+00:00,2015-07-01 20:58:42+00:00 +C843,prepare delivery,2015-07-01 21:39:19+00:00,2015-07-01 21:35:39+00:00 +C837,pay,2015-07-01 23:34:37+00:00,2015-07-01 23:16:29+00:00 +C941,place order,2015-07-02 02:57:34+00:00,2015-07-02 02:53:24+00:00 +C808,prepare delivery,2015-07-02 08:38:15+00:00,2015-07-02 08:35:25+00:00 +C942,place order,2015-07-02 10:22:17+00:00,2015-07-02 10:10:52+00:00 +C829,make delivery,2015-07-02 11:35:04+00:00,2015-07-02 10:38:00+00:00 +C820,make delivery,2015-07-02 10:49:02+00:00,2015-07-02 10:39:52+00:00 +C817,send reminder,2015-07-02 11:17:25+00:00,2015-07-02 10:41:15+00:00 +C824,prepare delivery,2015-07-02 10:51:25+00:00,2015-07-02 10:44:03+00:00 +C877,send reminder,2015-07-02 12:00:13+00:00,2015-07-02 11:26:49+00:00 +C881,pay,2015-07-02 11:31:02+00:00,2015-07-02 11:27:21+00:00 +C809,make delivery,2015-07-02 13:09:11+00:00,2015-07-02 11:34:41+00:00 +C943,place order,2015-07-02 11:51:23+00:00,2015-07-02 11:39:51+00:00 +C830,prepare delivery,2015-07-02 12:05:52+00:00,2015-07-02 12:02:03+00:00 +C836,prepare delivery,2015-07-02 12:14:40+00:00,2015-07-02 12:06:45+00:00 +C829,confirm payment,2015-07-02 12:12:56+00:00,2015-07-02 12:08:43+00:00 +C874,send reminder,2015-07-02 12:58:23+00:00,2015-07-02 12:15:35+00:00 +C926,send invoice,2015-07-02 12:39:10+00:00,2015-07-02 12:31:13+00:00 +C882,send reminder,2015-07-02 13:03:30+00:00,2015-07-02 12:48:27+00:00 +C917,send invoice,2015-07-02 13:33:55+00:00,2015-07-02 13:24:12+00:00 +C832,confirm payment,2015-07-02 13:42:28+00:00,2015-07-02 13:37:17+00:00 +C944,place order,2015-07-02 13:50:04+00:00,2015-07-02 13:37:49+00:00 +C849,pay,2015-07-02 14:34:17+00:00,2015-07-02 14:28:14+00:00 +C930,send invoice,2015-07-02 15:02:48+00:00,2015-07-02 14:30:50+00:00 +C820,confirm payment,2015-07-02 15:09:11+00:00,2015-07-02 14:58:40+00:00 +C813,cancel order,2015-07-02 22:32:48+00:00,2015-07-02 15:00:06+00:00 +C933,send invoice,2015-07-02 15:50:14+00:00,2015-07-02 15:22:24+00:00 +C842,pay,2015-07-02 18:15:22+00:00,2015-07-02 15:27:26+00:00 +C856,prepare delivery,2015-07-02 15:36:22+00:00,2015-07-02 15:32:24+00:00 +C945,place order,2015-07-02 15:40:01+00:00,2015-07-02 15:33:45+00:00 +C878,pay,2015-07-02 16:36:01+00:00,2015-07-02 16:31:35+00:00 +C924,send invoice,2015-07-02 16:46:34+00:00,2015-07-02 16:42:25+00:00 +C892,send invoice,2015-07-02 16:58:18+00:00,2015-07-02 16:53:19+00:00 +C872,send reminder,2015-07-02 17:16:06+00:00,2015-07-02 17:09:39+00:00 +C920,send invoice,2015-07-02 17:24:45+00:00,2015-07-02 17:13:17+00:00 +C946,place order,2015-07-02 17:33:38+00:00,2015-07-02 17:25:37+00:00 +C786,make delivery,2015-07-02 19:12:10+00:00,2015-07-02 17:51:40+00:00 +C870,pay,2015-07-02 18:05:09+00:00,2015-07-02 17:59:55+00:00 +C941,send invoice,2015-07-02 19:02:06+00:00,2015-07-02 18:45:40+00:00 +C844,prepare delivery,2015-07-02 19:08:28+00:00,2015-07-02 19:05:35+00:00 +C947,place order,2015-07-02 19:14:16+00:00,2015-07-02 19:09:22+00:00 +C865,pay,2015-07-02 21:44:32+00:00,2015-07-02 21:17:19+00:00 +C948,place order,2015-07-02 22:19:24+00:00,2015-07-02 21:54:58+00:00 +C949,place order,2015-07-03 07:43:52+00:00,2015-07-03 07:31:00+00:00 +C843,confirm payment,2015-07-03 09:28:22+00:00,2015-07-03 09:21:29+00:00 +C890,send reminder,2015-07-03 09:57:36+00:00,2015-07-03 09:31:33+00:00 +C843,make delivery,2015-07-03 10:25:15+00:00,2015-07-03 10:14:45+00:00 +C950,place order,2015-07-03 10:21:27+00:00,2015-07-03 10:16:13+00:00 +C825,make delivery,2015-07-03 10:32:31+00:00,2015-07-03 10:20:47+00:00 +C897,send reminder,2015-07-03 10:59:41+00:00,2015-07-03 10:39:31+00:00 +C925,send invoice,2015-07-03 11:01:31+00:00,2015-07-03 10:54:20+00:00 +C828,prepare delivery,2015-07-03 11:55:32+00:00,2015-07-03 11:27:37+00:00 +C824,make delivery,2015-07-03 13:01:21+00:00,2015-07-03 11:30:41+00:00 +C857,send reminder,2015-07-03 11:55:49+00:00,2015-07-03 11:46:04+00:00 +C951,place order,2015-07-03 11:54:51+00:00,2015-07-03 11:50:34+00:00 +C875,pay,2015-07-03 11:59:45+00:00,2015-07-03 11:52:04+00:00 +C864,prepare delivery,2015-07-03 12:01:03+00:00,2015-07-03 11:58:10+00:00 +C922,send invoice,2015-07-03 12:50:10+00:00,2015-07-03 12:45:47+00:00 +C840,send reminder,2015-07-03 13:32:23+00:00,2015-07-03 13:21:46+00:00 +C919,send invoice,2015-07-03 16:49:16+00:00,2015-07-03 13:40:58+00:00 +C824,confirm payment,2015-07-03 14:21:42+00:00,2015-07-03 13:50:12+00:00 +C952,place order,2015-07-03 14:02:37+00:00,2015-07-03 13:59:15+00:00 +C809,confirm payment,2015-07-03 14:47:10+00:00,2015-07-03 14:39:04+00:00 +C808,make delivery,2015-07-03 16:18:34+00:00,2015-07-03 14:40:32+00:00 +C916,send invoice,2015-07-03 15:08:45+00:00,2015-07-03 15:04:28+00:00 +C863,send reminder,2015-07-03 15:14:07+00:00,2015-07-03 15:06:31+00:00 +C836,make delivery,2015-07-03 15:44:35+00:00,2015-07-03 15:15:45+00:00 +C822,prepare delivery,2015-07-03 15:23:35+00:00,2015-07-03 15:20:46+00:00 +C928,send invoice,2015-07-03 19:18:01+00:00,2015-07-03 15:29:59+00:00 +C866,pay,2015-07-03 15:42:49+00:00,2015-07-03 15:32:45+00:00 +C891,send reminder,2015-07-03 16:11:18+00:00,2015-07-03 15:35:00+00:00 +C953,place order,2015-07-03 16:19:07+00:00,2015-07-03 16:16:37+00:00 +C830,confirm payment,2015-07-03 16:45:42+00:00,2015-07-03 16:27:38+00:00 +C781,prepare delivery,2015-07-03 18:57:37+00:00,2015-07-03 16:29:30+00:00 +C935,send invoice,2015-07-03 16:41:05+00:00,2015-07-03 16:35:59+00:00 +C841,prepare delivery,2015-07-03 16:48:30+00:00,2015-07-03 16:41:26+00:00 +C857,cancel order,2015-07-03 17:37:08+00:00,2015-07-03 17:22:13+00:00 +C852,prepare delivery,2015-07-03 17:37:49+00:00,2015-07-03 17:22:34+00:00 +C837,prepare delivery,2015-07-03 17:53:56+00:00,2015-07-03 17:46:39+00:00 +C954,place order,2015-07-03 18:00:36+00:00,2015-07-03 17:51:21+00:00 +C856,make delivery,2015-07-03 18:31:26+00:00,2015-07-03 17:59:02+00:00 +C815,cancel order,2015-07-03 18:37:32+00:00,2015-07-03 18:16:20+00:00 +C808,confirm payment,2015-07-03 18:41:52+00:00,2015-07-03 18:32:59+00:00 +C831,send reminder,2015-07-03 19:11:47+00:00,2015-07-03 18:59:03+00:00 +C955,place order,2015-07-03 20:20:30+00:00,2015-07-03 20:10:18+00:00 +C873,pay,2015-07-03 20:50:43+00:00,2015-07-03 20:45:54+00:00 +C867,pay,2015-07-03 21:33:35+00:00,2015-07-03 21:26:00+00:00 +C929,send invoice,2015-07-03 22:06:37+00:00,2015-07-03 22:00:32+00:00 +C850,prepare delivery,2015-07-04 01:05:28+00:00,2015-07-03 22:32:50+00:00 +C956,place order,2015-07-03 23:03:12+00:00,2015-07-03 22:56:50+00:00 +C895,pay,2015-07-03 23:34:04+00:00,2015-07-03 23:28:19+00:00 +C957,place order,2015-07-05 01:18:15+00:00,2015-07-04 20:51:34+00:00 +C958,place order,2015-07-05 21:04:05+00:00,2015-07-05 20:57:33+00:00 +C830,make delivery,2015-07-06 09:16:06+00:00,2015-07-06 09:01:33+00:00 +C818,prepare delivery,2015-07-06 09:06:47+00:00,2015-07-06 09:03:55+00:00 +C844,confirm payment,2015-07-06 09:19:22+00:00,2015-07-06 09:11:26+00:00 +C839,prepare delivery,2015-07-06 09:36:01+00:00,2015-07-06 09:29:07+00:00 +C921,send invoice,2015-07-06 09:31:22+00:00,2015-07-06 09:29:09+00:00 +C959,place order,2015-07-06 09:49:39+00:00,2015-07-06 09:44:20+00:00 +C885,pay,2015-07-06 09:57:55+00:00,2015-07-06 09:50:17+00:00 +C847,pay,2015-07-06 10:24:23+00:00,2015-07-06 10:16:18+00:00 +C844,make delivery,2015-07-06 10:53:31+00:00,2015-07-06 10:26:26+00:00 +C846,send reminder,2015-07-06 10:50:52+00:00,2015-07-06 10:32:51+00:00 +C825,confirm payment,2015-07-06 11:31:10+00:00,2015-07-06 11:21:58+00:00 +C879,pay,2015-07-06 11:37:38+00:00,2015-07-06 11:31:47+00:00 +C960,place order,2015-07-06 11:56:06+00:00,2015-07-06 11:46:48+00:00 +C786,confirm payment,2015-07-06 12:57:33+00:00,2015-07-06 12:51:24+00:00 +C855,pay,2015-07-06 13:16:56+00:00,2015-07-06 13:04:23+00:00 +C868,pay,2015-07-06 13:44:01+00:00,2015-07-06 13:38:09+00:00 +C961,place order,2015-07-06 13:57:58+00:00,2015-07-06 13:51:43+00:00 +C937,send invoice,2015-07-06 14:04:04+00:00,2015-07-06 13:56:11+00:00 +C883,pay,2015-07-06 14:04:32+00:00,2015-07-06 13:57:07+00:00 +C932,send invoice,2015-07-06 14:58:47+00:00,2015-07-06 14:51:22+00:00 +C799,prepare delivery,2015-07-06 15:06:29+00:00,2015-07-06 15:02:55+00:00 +C931,send invoice,2015-07-06 15:17:55+00:00,2015-07-06 15:11:34+00:00 +C827,send reminder,2015-07-06 16:11:38+00:00,2015-07-06 15:31:59+00:00 +C816,prepare delivery,2015-07-06 15:50:40+00:00,2015-07-06 15:42:48+00:00 +C864,confirm payment,2015-07-06 16:00:24+00:00,2015-07-06 15:57:45+00:00 +C962,place order,2015-07-06 16:10:43+00:00,2015-07-06 16:01:33+00:00 +C828,make delivery,2015-07-06 16:30:04+00:00,2015-07-06 16:19:15+00:00 +C817,cancel order,2015-07-06 16:39:57+00:00,2015-07-06 16:29:32+00:00 +C856,confirm payment,2015-07-06 16:42:31+00:00,2015-07-06 16:33:55+00:00 +C851,send reminder,2015-07-06 16:58:33+00:00,2015-07-06 16:47:55+00:00 +C963,place order,2015-07-06 17:24:06+00:00,2015-07-06 17:21:13+00:00 +C854,prepare delivery,2015-07-06 17:44:17+00:00,2015-07-06 17:41:23+00:00 +C884,pay,2015-07-06 17:44:59+00:00,2015-07-06 17:42:48+00:00 +C864,make delivery,2015-07-06 18:11:47+00:00,2015-07-06 17:44:35+00:00 +C822,make delivery,2015-07-06 19:52:14+00:00,2015-07-06 18:18:21+00:00 +C939,send invoice,2015-07-06 18:42:53+00:00,2015-07-06 18:40:30+00:00 +C964,place order,2015-07-06 23:33:17+00:00,2015-07-06 19:00:33+00:00 +C848,send reminder,2015-07-06 20:25:18+00:00,2015-07-06 20:18:09+00:00 +C965,place order,2015-07-06 21:42:26+00:00,2015-07-06 21:37:21+00:00 +C871,pay,2015-07-06 22:19:16+00:00,2015-07-06 22:12:29+00:00 +C966,place order,2015-07-07 05:57:36+00:00,2015-07-07 05:45:18+00:00 +C845,prepare delivery,2015-07-07 12:14:01+00:00,2015-07-07 09:49:36+00:00 +C913,send reminder,2015-07-07 10:21:28+00:00,2015-07-07 09:57:49+00:00 +C837,make delivery,2015-07-07 10:14:23+00:00,2015-07-07 09:59:33+00:00 +C898,pay,2015-07-07 10:15:29+00:00,2015-07-07 10:06:48+00:00 +C781,make delivery,2015-07-07 10:26:07+00:00,2015-07-07 10:10:34+00:00 +C850,make delivery,2015-07-07 10:26:44+00:00,2015-07-07 10:11:00+00:00 +C967,place order,2015-07-07 10:27:13+00:00,2015-07-07 10:19:57+00:00 +C841,make delivery,2015-07-07 10:31:18+00:00,2015-07-07 10:22:06+00:00 +C936,send invoice,2015-07-07 10:34:46+00:00,2015-07-07 10:26:20+00:00 +C955,send invoice,2015-07-07 11:09:53+00:00,2015-07-07 11:02:43+00:00 +C823,pay,2015-07-07 11:10:22+00:00,2015-07-07 11:07:18+00:00 +C950,send invoice,2015-07-07 11:14:12+00:00,2015-07-07 11:07:37+00:00 +C787,prepare delivery,2015-07-07 14:08:47+00:00,2015-07-07 11:31:09+00:00 +C836,confirm payment,2015-07-07 11:59:59+00:00,2015-07-07 11:41:01+00:00 +C874,pay,2015-07-07 11:49:50+00:00,2015-07-07 11:46:22+00:00 +C818,make delivery,2015-07-07 12:48:39+00:00,2015-07-07 11:48:46+00:00 +C837,confirm payment,2015-07-07 11:54:05+00:00,2015-07-07 11:50:46+00:00 +C968,place order,2015-07-07 12:10:21+00:00,2015-07-07 11:58:01+00:00 +C906,send invoice,2015-07-07 12:09:38+00:00,2015-07-07 12:02:42+00:00 +C907,send reminder,2015-07-07 12:33:12+00:00,2015-07-07 12:10:59+00:00 +C866,prepare delivery,2015-07-07 16:06:13+00:00,2015-07-07 13:37:38+00:00 +C942,send invoice,2015-07-07 14:00:18+00:00,2015-07-07 13:53:32+00:00 +C969,place order,2015-07-07 14:28:15+00:00,2015-07-07 14:14:09+00:00 +C828,confirm payment,2015-07-07 14:45:32+00:00,2015-07-07 14:35:01+00:00 +C852,make delivery,2015-07-07 14:57:56+00:00,2015-07-07 14:45:05+00:00 +C838,prepare delivery,2015-07-07 17:46:54+00:00,2015-07-07 15:22:39+00:00 +C970,place order,2015-07-07 16:15:23+00:00,2015-07-07 15:46:26+00:00 +C904,send reminder,2015-07-07 16:32:53+00:00,2015-07-07 15:58:08+00:00 +C799,confirm payment,2015-07-07 16:39:54+00:00,2015-07-07 16:29:59+00:00 +C847,prepare delivery,2015-07-07 17:04:03+00:00,2015-07-07 16:54:33+00:00 +C781,confirm payment,2015-07-07 17:03:04+00:00,2015-07-07 17:00:08+00:00 +C899,send reminder,2015-07-07 17:33:25+00:00,2015-07-07 17:09:22+00:00 +C816,make delivery,2015-07-07 17:41:49+00:00,2015-07-07 17:25:51+00:00 +C971,place order,2015-07-07 18:01:12+00:00,2015-07-07 17:50:59+00:00 +C892,pay,2015-07-07 17:59:28+00:00,2015-07-07 17:51:12+00:00 +C893,pay,2015-07-07 17:59:51+00:00,2015-07-07 17:55:21+00:00 +C818,confirm payment,2015-07-07 18:15:41+00:00,2015-07-07 18:10:01+00:00 +C852,confirm payment,2015-07-07 18:36:09+00:00,2015-07-07 18:23:23+00:00 +C897,pay,2015-07-07 19:04:38+00:00,2015-07-07 18:49:50+00:00 +C839,make delivery,2015-07-07 19:11:12+00:00,2015-07-07 19:00:14+00:00 +C902,pay,2015-07-07 19:09:50+00:00,2015-07-07 19:06:21+00:00 +C972,place order,2015-07-07 20:24:08+00:00,2015-07-07 20:09:11+00:00 +C887,pay,2015-07-07 21:31:22+00:00,2015-07-07 21:27:37+00:00 +C854,confirm payment,2015-07-07 21:42:14+00:00,2015-07-07 21:39:39+00:00 +C973,place order,2015-07-07 23:05:23+00:00,2015-07-07 22:54:37+00:00 +C876,send reminder,2015-07-08 09:24:20+00:00,2015-07-08 09:01:31+00:00 +C938,send invoice,2015-07-08 09:10:02+00:00,2015-07-08 09:05:56+00:00 +C799,make delivery,2015-07-08 09:34:44+00:00,2015-07-08 09:24:46+00:00 +C822,confirm payment,2015-07-08 09:34:09+00:00,2015-07-08 09:26:06+00:00 +C974,place order,2015-07-08 09:48:08+00:00,2015-07-08 09:37:28+00:00 +C816,confirm payment,2015-07-08 09:53:49+00:00,2015-07-08 09:49:04+00:00 +C934,send invoice,2015-07-08 10:07:40+00:00,2015-07-08 09:56:15+00:00 +C863,pay,2015-07-08 10:51:11+00:00,2015-07-08 10:46:36+00:00 +C961,send invoice,2015-07-08 11:04:51+00:00,2015-07-08 10:59:39+00:00 +C896,pay,2015-07-08 11:19:57+00:00,2015-07-08 11:15:58+00:00 +C975,place order,2015-07-08 11:41:14+00:00,2015-07-08 11:33:03+00:00 +C831,pay,2015-07-08 11:46:34+00:00,2015-07-08 11:44:12+00:00 +C840,pay,2015-07-08 12:23:55+00:00,2015-07-08 12:20:01+00:00 +C851,cancel order,2015-07-08 12:33:30+00:00,2015-07-08 12:27:30+00:00 +C881,prepare delivery,2015-07-08 12:34:00+00:00,2015-07-08 12:31:11+00:00 +C845,make delivery,2015-07-08 14:09:18+00:00,2015-07-08 12:50:45+00:00 +C976,place order,2015-07-08 13:38:11+00:00,2015-07-08 13:24:13+00:00 +C839,confirm payment,2015-07-08 14:07:22+00:00,2015-07-08 14:02:11+00:00 +C854,make delivery,2015-07-08 15:37:06+00:00,2015-07-08 14:02:48+00:00 +C855,prepare delivery,2015-07-08 14:10:52+00:00,2015-07-08 14:07:07+00:00 +C861,prepare delivery,2015-07-08 14:53:54+00:00,2015-07-08 14:50:58+00:00 +C787,confirm payment,2015-07-08 15:02:30+00:00,2015-07-08 14:51:59+00:00 +C866,make delivery,2015-07-08 15:10:51+00:00,2015-07-08 15:01:49+00:00 +C977,place order,2015-07-08 15:15:55+00:00,2015-07-08 15:06:34+00:00 +C884,prepare delivery,2015-07-08 15:24:03+00:00,2015-07-08 15:20:13+00:00 +C963,send invoice,2015-07-08 15:38:35+00:00,2015-07-08 15:21:31+00:00 +C787,make delivery,2015-07-08 17:00:47+00:00,2015-07-08 15:21:54+00:00 +C841,confirm payment,2015-07-08 15:45:10+00:00,2015-07-08 15:39:35+00:00 +C962,send invoice,2015-07-08 15:59:17+00:00,2015-07-08 15:54:58+00:00 +C823,prepare delivery,2015-07-08 18:33:14+00:00,2015-07-08 16:08:07+00:00 +C978,place order,2015-07-08 16:35:21+00:00,2015-07-08 16:31:15+00:00 +C850,confirm payment,2015-07-08 17:06:25+00:00,2015-07-08 17:02:10+00:00 +C894,send reminder,2015-07-08 17:21:05+00:00,2015-07-08 17:08:56+00:00 +C908,send reminder,2015-07-08 18:10:08+00:00,2015-07-08 18:02:26+00:00 +C979,place order,2015-07-08 18:34:41+00:00,2015-07-08 18:20:37+00:00 +C980,place order,2015-07-08 20:52:20+00:00,2015-07-08 20:38:06+00:00 +C846,cancel order,2015-07-08 21:47:09+00:00,2015-07-08 21:40:15+00:00 +C981,place order,2015-07-09 01:22:52+00:00,2015-07-09 00:49:48+00:00 +C898,prepare delivery,2015-07-09 09:04:02+00:00,2015-07-09 09:01:02+00:00 +C860,prepare delivery,2015-07-09 09:11:08+00:00,2015-07-09 09:07:37+00:00 +C883,prepare delivery,2015-07-09 09:22:33+00:00,2015-07-09 09:15:23+00:00 +C838,make delivery,2015-07-09 09:40:26+00:00,2015-07-09 09:17:37+00:00 +C953,send invoice,2015-07-09 09:27:04+00:00,2015-07-09 09:20:15+00:00 +C847,make delivery,2015-07-09 11:00:16+00:00,2015-07-09 09:21:36+00:00 +C886,send reminder,2015-07-09 09:52:33+00:00,2015-07-09 09:24:31+00:00 +C982,place order,2015-07-09 10:08:52+00:00,2015-07-09 09:54:54+00:00 +C952,send invoice,2015-07-09 09:58:33+00:00,2015-07-09 09:56:05+00:00 +C847,confirm payment,2015-07-09 10:26:50+00:00,2015-07-09 10:23:13+00:00 +C957,send invoice,2015-07-09 11:07:06+00:00,2015-07-09 11:03:28+00:00 +C880,pay,2015-07-09 11:57:25+00:00,2015-07-09 11:50:17+00:00 +C983,place order,2015-07-09 12:10:33+00:00,2015-07-09 12:07:55+00:00 +C969,send invoice,2015-07-09 12:13:16+00:00,2015-07-09 12:08:48+00:00 +C827,cancel order,2015-07-09 12:20:15+00:00,2015-07-09 12:13:14+00:00 +C943,send invoice,2015-07-09 12:27:58+00:00,2015-07-09 12:20:16+00:00 +C902,prepare delivery,2015-07-09 12:43:51+00:00,2015-07-09 12:40:59+00:00 +C984,place order,2015-07-09 13:43:12+00:00,2015-07-09 13:33:57+00:00 +C845,confirm payment,2015-07-09 13:44:41+00:00,2015-07-09 13:38:41+00:00 +C964,send invoice,2015-07-09 13:46:55+00:00,2015-07-09 13:42:01+00:00 +C870,prepare delivery,2015-07-09 14:16:08+00:00,2015-07-09 14:09:05+00:00 +C859,send reminder,2015-07-09 14:39:06+00:00,2015-07-09 14:15:40+00:00 +C849,prepare delivery,2015-07-09 14:44:43+00:00,2015-07-09 14:19:09+00:00 +C878,prepare delivery,2015-07-09 14:43:16+00:00,2015-07-09 14:36:07+00:00 +C951,send invoice,2015-07-09 14:41:02+00:00,2015-07-09 14:37:14+00:00 +C866,confirm payment,2015-07-09 14:49:18+00:00,2015-07-09 14:45:24+00:00 +C881,make delivery,2015-07-09 15:10:10+00:00,2015-07-09 14:55:36+00:00 +C971,send invoice,2015-07-09 15:27:18+00:00,2015-07-09 15:17:37+00:00 +C985,place order,2015-07-09 15:53:52+00:00,2015-07-09 15:26:01+00:00 +C974,send invoice,2015-07-09 15:45:37+00:00,2015-07-09 15:40:01+00:00 +C855,confirm payment,2015-07-09 15:45:48+00:00,2015-07-09 15:40:59+00:00 +C884,make delivery,2015-07-09 15:53:22+00:00,2015-07-09 15:42:33+00:00 +C855,make delivery,2015-07-09 16:27:46+00:00,2015-07-09 15:48:01+00:00 +C909,pay,2015-07-09 16:53:27+00:00,2015-07-09 16:23:34+00:00 +C842,prepare delivery,2015-07-09 16:33:41+00:00,2015-07-09 16:30:51+00:00 +C861,make delivery,2015-07-09 16:57:48+00:00,2015-07-09 16:40:06+00:00 +C823,make delivery,2015-07-09 17:16:34+00:00,2015-07-09 17:05:08+00:00 +C986,place order,2015-07-09 17:20:32+00:00,2015-07-09 17:10:10+00:00 +C868,prepare delivery,2015-07-09 17:18:27+00:00,2015-07-09 17:11:57+00:00 +C982,send invoice,2015-07-09 17:29:07+00:00,2015-07-09 17:21:20+00:00 +C956,send invoice,2015-07-09 18:15:38+00:00,2015-07-09 17:58:08+00:00 +C973,send invoice,2015-07-09 18:23:39+00:00,2015-07-09 18:17:11+00:00 +C987,place order,2015-07-09 21:29:30+00:00,2015-07-09 18:38:27+00:00 +C876,pay,2015-07-09 18:44:23+00:00,2015-07-09 18:38:50+00:00 +C930,pay,2015-07-09 18:44:21+00:00,2015-07-09 18:39:24+00:00 +C884,confirm payment,2015-07-09 19:27:20+00:00,2015-07-09 18:48:47+00:00 +C920,pay,2015-07-09 19:14:41+00:00,2015-07-09 19:04:56+00:00 +C946,send invoice,2015-07-09 19:31:14+00:00,2015-07-09 19:23:22+00:00 +C903,send reminder,2015-07-09 21:03:50+00:00,2015-07-09 20:21:24+00:00 +C988,place order,2015-07-09 21:36:15+00:00,2015-07-09 21:31:35+00:00 +C885,prepare delivery,2015-07-09 22:37:17+00:00,2015-07-09 22:30:15+00:00 +C919,pay,2015-07-09 22:49:56+00:00,2015-07-09 22:41:18+00:00 +C989,place order,2015-07-10 05:25:25+00:00,2015-07-10 05:10:42+00:00 +C984,send invoice,2015-07-10 08:57:18+00:00,2015-07-10 08:47:30+00:00 +C810,prepare delivery,2015-07-10 08:53:40+00:00,2015-07-10 08:50:36+00:00 +C898,confirm payment,2015-07-10 09:02:00+00:00,2015-07-10 08:56:49+00:00 +C858,prepare delivery,2015-07-10 09:04:20+00:00,2015-07-10 09:01:23+00:00 +C990,place order,2015-07-10 09:51:22+00:00,2015-07-10 09:41:54+00:00 +C838,confirm payment,2015-07-10 10:03:31+00:00,2015-07-10 09:56:03+00:00 +C869,prepare delivery,2015-07-10 10:42:25+00:00,2015-07-10 10:39:22+00:00 +C875,prepare delivery,2015-07-10 10:46:27+00:00,2015-07-10 10:42:37+00:00 +C898,make delivery,2015-07-10 11:06:53+00:00,2015-07-10 10:44:22+00:00 +C914,send reminder,2015-07-10 11:58:16+00:00,2015-07-10 11:38:47+00:00 +C991,place order,2015-07-10 15:32:30+00:00,2015-07-10 11:41:55+00:00 +C888,pay,2015-07-10 11:54:25+00:00,2015-07-10 11:49:19+00:00 +C977,send invoice,2015-07-10 12:01:52+00:00,2015-07-10 11:56:10+00:00 +C889,pay,2015-07-10 12:09:38+00:00,2015-07-10 12:03:56+00:00 +C883,make delivery,2015-07-10 12:37:18+00:00,2015-07-10 12:09:43+00:00 +C912,send reminder,2015-07-10 12:46:56+00:00,2015-07-10 12:34:09+00:00 +C823,confirm payment,2015-07-10 13:04:44+00:00,2015-07-10 12:56:42+00:00 +C863,prepare delivery,2015-07-10 15:21:47+00:00,2015-07-10 12:59:35+00:00 +C860,make delivery,2015-07-10 13:32:53+00:00,2015-07-10 13:04:19+00:00 +C992,place order,2015-07-10 13:51:36+00:00,2015-07-10 13:41:57+00:00 +C900,send reminder,2015-07-10 13:59:48+00:00,2015-07-10 13:45:27+00:00 +C905,send reminder,2015-07-10 14:08:25+00:00,2015-07-10 13:52:08+00:00 +C867,prepare delivery,2015-07-10 14:43:43+00:00,2015-07-10 14:36:07+00:00 +C958,send invoice,2015-07-10 15:20:32+00:00,2015-07-10 14:47:07+00:00 +C849,make delivery,2015-07-10 17:04:02+00:00,2015-07-10 15:31:30+00:00 +C993,place order,2015-07-10 15:45:47+00:00,2015-07-10 15:42:01+00:00 +C895,prepare delivery,2015-07-10 15:46:01+00:00,2015-07-10 15:43:00+00:00 +C897,prepare delivery,2015-07-10 16:11:14+00:00,2015-07-10 15:43:23+00:00 +C893,prepare delivery,2015-07-10 15:52:18+00:00,2015-07-10 15:44:43+00:00 +C940,send invoice,2015-07-10 15:51:03+00:00,2015-07-10 15:47:19+00:00 +C849,confirm payment,2015-07-10 15:58:32+00:00,2015-07-10 15:55:52+00:00 +C860,confirm payment,2015-07-10 16:22:01+00:00,2015-07-10 16:18:24+00:00 +C947,send invoice,2015-07-10 16:30:52+00:00,2015-07-10 16:23:31+00:00 +C902,make delivery,2015-07-10 16:59:33+00:00,2015-07-10 16:32:06+00:00 +C848,pay,2015-07-10 16:46:14+00:00,2015-07-10 16:40:53+00:00 +C910,pay,2015-07-10 16:55:52+00:00,2015-07-10 16:50:28+00:00 +C960,send invoice,2015-07-10 17:21:51+00:00,2015-07-10 17:18:53+00:00 +C994,place order,2015-07-10 17:56:18+00:00,2015-07-10 17:42:10+00:00 +C861,confirm payment,2015-07-10 18:32:34+00:00,2015-07-10 18:24:17+00:00 +C878,make delivery,2015-07-10 18:59:37+00:00,2015-07-10 18:35:50+00:00 +C926,pay,2015-07-10 19:14:03+00:00,2015-07-10 19:11:30+00:00 +C995,place order,2015-07-10 19:51:05+00:00,2015-07-10 19:42:44+00:00 +C980,send invoice,2015-07-10 20:30:49+00:00,2015-07-10 20:25:17+00:00 +C868,make delivery,2015-07-10 21:53:01+00:00,2015-07-10 21:40:20+00:00 +C968,send invoice,2015-07-10 22:11:28+00:00,2015-07-10 22:07:59+00:00 +C996,place order,2015-07-10 23:06:01+00:00,2015-07-10 23:01:42+00:00 +C915,pay,2015-07-10 23:44:21+00:00,2015-07-10 23:35:53+00:00 +C916,pay,2015-07-11 17:31:17+00:00,2015-07-11 17:26:17+00:00 +C997,place order,2015-07-11 20:38:24+00:00,2015-07-11 20:31:31+00:00 +C998,place order,2015-07-12 20:27:05+00:00,2015-07-12 20:17:26+00:00 +C853,send reminder,2015-07-13 09:10:50+00:00,2015-07-13 08:56:18+00:00 +C999,place order,2015-07-13 12:39:41+00:00,2015-07-13 09:00:13+00:00 +C870,make delivery,2015-07-13 09:42:07+00:00,2015-07-13 09:32:38+00:00 +C881,confirm payment,2015-07-13 10:10:48+00:00,2015-07-13 09:53:59+00:00 +C879,prepare delivery,2015-07-13 10:08:50+00:00,2015-07-13 10:04:52+00:00 +C1000,place order,2015-07-13 10:23:35+00:00,2015-07-13 10:18:33+00:00 +C877,send reminder,2015-07-13 11:06:33+00:00,2015-07-13 10:23:11+00:00 +C901,send reminder,2015-07-13 10:38:18+00:00,2015-07-13 10:25:44+00:00 +C917,pay,2015-07-13 10:49:44+00:00,2015-07-13 10:45:00+00:00 +C882,send reminder,2015-07-13 11:23:32+00:00,2015-07-13 11:06:51+00:00 +C873,prepare delivery,2015-07-13 11:27:26+00:00,2015-07-13 11:18:10+00:00 +C983,send invoice,2015-07-13 11:26:04+00:00,2015-07-13 11:19:53+00:00 +C902,confirm payment,2015-07-13 11:43:18+00:00,2015-07-13 11:24:13+00:00 +C1001,place order,2015-07-13 11:58:24+00:00,2015-07-13 11:55:13+00:00 +C949,send invoice,2015-07-13 12:21:31+00:00,2015-07-13 12:13:37+00:00 +C885,make delivery,2015-07-13 12:56:12+00:00,2015-07-13 12:43:57+00:00 +C871,prepare delivery,2015-07-13 13:10:29+00:00,2015-07-13 13:03:04+00:00 +C862,prepare delivery,2015-07-13 13:30:26+00:00,2015-07-13 13:26:54+00:00 +C885,confirm payment,2015-07-13 13:58:04+00:00,2015-07-13 13:51:50+00:00 +C1002,place order,2015-07-13 17:49:48+00:00,2015-07-13 14:08:34+00:00 +C810,make delivery,2015-07-13 15:55:08+00:00,2015-07-13 14:17:01+00:00 +C986,send invoice,2015-07-13 14:47:00+00:00,2015-07-13 14:44:56+00:00 +C883,confirm payment,2015-07-13 14:55:42+00:00,2015-07-13 14:52:15+00:00 +C945,send invoice,2015-07-13 14:59:37+00:00,2015-07-13 14:54:38+00:00 +C875,confirm payment,2015-07-13 15:01:29+00:00,2015-07-13 14:57:27+00:00 +C858,make delivery,2015-07-13 15:50:59+00:00,2015-07-13 14:57:45+00:00 +C842,make delivery,2015-07-13 15:23:33+00:00,2015-07-13 15:13:10+00:00 +C863,make delivery,2015-07-13 15:54:52+00:00,2015-07-13 15:28:27+00:00 +C1003,place order,2015-07-13 16:18:05+00:00,2015-07-13 15:35:15+00:00 +C954,send invoice,2015-07-13 15:38:26+00:00,2015-07-13 15:35:20+00:00 +C831,prepare delivery,2015-07-13 16:00:43+00:00,2015-07-13 15:53:08+00:00 +C874,prepare delivery,2015-07-13 18:31:54+00:00,2015-07-13 15:58:13+00:00 +C929,pay,2015-07-13 16:18:59+00:00,2015-07-13 16:14:59+00:00 +C870,confirm payment,2015-07-13 16:27:22+00:00,2015-07-13 16:18:32+00:00 +C810,confirm payment,2015-07-13 16:26:40+00:00,2015-07-13 16:22:04+00:00 +C878,confirm payment,2015-07-13 16:36:45+00:00,2015-07-13 16:28:19+00:00 +C919,prepare delivery,2015-07-13 16:47:58+00:00,2015-07-13 16:40:41+00:00 +C941,send reminder,2015-07-13 17:25:16+00:00,2015-07-13 16:58:21+00:00 +C970,send invoice,2015-07-13 17:13:47+00:00,2015-07-13 17:06:45+00:00 +C932,pay,2015-07-13 17:29:52+00:00,2015-07-13 17:25:15+00:00 +C869,make delivery,2015-07-13 19:01:19+00:00,2015-07-13 17:26:07+00:00 +C842,confirm payment,2015-07-13 17:33:34+00:00,2015-07-13 17:28:03+00:00 +C1004,place order,2015-07-13 17:33:08+00:00,2015-07-13 17:28:37+00:00 +C875,make delivery,2015-07-13 18:55:05+00:00,2015-07-13 17:38:06+00:00 +C1005,place order,2015-07-13 19:29:26+00:00,2015-07-13 19:15:21+00:00 +C911,pay,2015-07-13 20:14:13+00:00,2015-07-13 20:08:40+00:00 +C895,confirm payment,2015-07-13 20:26:24+00:00,2015-07-13 20:18:41+00:00 +C1006,place order,2015-07-13 22:20:23+00:00,2015-07-13 22:06:57+00:00 +C1007,place order,2015-07-14 07:56:49+00:00,2015-07-14 07:42:54+00:00 +C868,confirm payment,2015-07-14 08:29:53+00:00,2015-07-14 08:26:19+00:00 +C897,make delivery,2015-07-14 10:04:44+00:00,2015-07-14 08:43:57+00:00 +C859,cancel order,2015-07-14 09:22:16+00:00,2015-07-14 09:07:29+00:00 +C893,make delivery,2015-07-14 09:28:21+00:00,2015-07-14 09:19:15+00:00 +C959,send invoice,2015-07-14 09:33:32+00:00,2015-07-14 09:29:42+00:00 +C912,pay,2015-07-14 10:15:15+00:00,2015-07-14 10:05:22+00:00 +C869,confirm payment,2015-07-14 10:13:55+00:00,2015-07-14 10:05:28+00:00 +C858,confirm payment,2015-07-14 10:30:03+00:00,2015-07-14 10:14:26+00:00 +C1002,send invoice,2015-07-14 10:28:50+00:00,2015-07-14 10:22:28+00:00 +C1008,place order,2015-07-14 10:34:59+00:00,2015-07-14 10:29:18+00:00 +C867,make delivery,2015-07-14 12:16:49+00:00,2015-07-14 10:44:09+00:00 +C991,send invoice,2015-07-14 10:53:22+00:00,2015-07-14 10:45:55+00:00 +C890,send reminder,2015-07-14 11:48:48+00:00,2015-07-14 11:08:32+00:00 +C895,make delivery,2015-07-14 11:25:37+00:00,2015-07-14 11:11:51+00:00 +C944,send invoice,2015-07-14 12:08:20+00:00,2015-07-14 12:00:29+00:00 +C897,confirm payment,2015-07-14 12:07:45+00:00,2015-07-14 12:00:43+00:00 +C1009,place order,2015-07-14 12:29:33+00:00,2015-07-14 12:16:44+00:00 +C979,send invoice,2015-07-14 12:28:58+00:00,2015-07-14 12:19:55+00:00 +C872,send reminder,2015-07-14 12:40:52+00:00,2015-07-14 12:27:50+00:00 +C1010,place order,2015-07-14 13:57:56+00:00,2015-07-14 13:51:35+00:00 +C928,send reminder,2015-07-14 14:11:12+00:00,2015-07-14 13:51:45+00:00 +C892,prepare delivery,2015-07-14 14:00:29+00:00,2015-07-14 13:57:40+00:00 +C965,send invoice,2015-07-14 14:10:08+00:00,2015-07-14 14:04:41+00:00 +C879,make delivery,2015-07-14 16:01:22+00:00,2015-07-14 14:25:23+00:00 +C975,send invoice,2015-07-14 14:48:59+00:00,2015-07-14 14:31:30+00:00 +C893,confirm payment,2015-07-14 14:57:59+00:00,2015-07-14 14:48:59+00:00 +C862,make delivery,2015-07-14 15:36:19+00:00,2015-07-14 14:49:13+00:00 +C835,prepare delivery,2015-07-14 14:56:25+00:00,2015-07-14 14:49:44+00:00 +C863,confirm payment,2015-07-14 15:13:13+00:00,2015-07-14 15:06:00+00:00 +C922,send reminder,2015-07-14 16:14:38+00:00,2015-07-14 15:36:00+00:00 +C873,make delivery,2015-07-14 17:18:12+00:00,2015-07-14 15:50:30+00:00 +C1011,place order,2015-07-14 19:38:24+00:00,2015-07-14 16:01:17+00:00 +C891,send reminder,2015-07-14 16:26:57+00:00,2015-07-14 16:13:42+00:00 +C966,send invoice,2015-07-14 16:30:38+00:00,2015-07-14 16:21:44+00:00 +C990,send invoice,2015-07-14 16:44:52+00:00,2015-07-14 16:37:39+00:00 +C992,send invoice,2015-07-14 16:54:12+00:00,2015-07-14 16:47:15+00:00 +C865,prepare delivery,2015-07-14 19:32:59+00:00,2015-07-14 17:08:40+00:00 +C927,pay,2015-07-14 17:14:27+00:00,2015-07-14 17:10:22+00:00 +C874,make delivery,2015-07-14 18:47:43+00:00,2015-07-14 17:14:22+00:00 +C1012,place order,2015-07-14 17:28:05+00:00,2015-07-14 17:20:41+00:00 +C867,confirm payment,2015-07-14 18:22:34+00:00,2015-07-14 18:16:21+00:00 +C1013,place order,2015-07-14 23:16:07+00:00,2015-07-14 18:59:29+00:00 +C933,pay,2015-07-14 20:01:20+00:00,2015-07-14 19:52:05+00:00 +C905,pay,2015-07-14 21:49:52+00:00,2015-07-14 21:41:07+00:00 +C831,make delivery,2015-07-14 22:56:38+00:00,2015-07-14 22:34:04+00:00 +C1014,place order,2015-07-14 22:40:31+00:00,2015-07-14 22:34:42+00:00 +C940,pay,2015-07-14 23:51:34+00:00,2015-07-14 23:47:45+00:00 +C946,pay,2015-07-15 08:51:59+00:00,2015-07-15 08:44:52+00:00 +C871,make delivery,2015-07-15 10:21:57+00:00,2015-07-15 08:52:01+00:00 +C1015,place order,2015-07-15 09:10:44+00:00,2015-07-15 08:57:38+00:00 +C967,send invoice,2015-07-15 09:45:06+00:00,2015-07-15 09:39:46+00:00 +C985,send invoice,2015-07-15 09:46:14+00:00,2015-07-15 09:42:05+00:00 +C1008,send invoice,2015-07-15 10:25:42+00:00,2015-07-15 10:20:05+00:00 +C937,pay,2015-07-15 10:39:28+00:00,2015-07-15 10:33:30+00:00 +C919,make delivery,2015-07-15 10:49:29+00:00,2015-07-15 10:35:28+00:00 +C908,pay,2015-07-15 10:46:35+00:00,2015-07-15 10:42:37+00:00 +C1016,place order,2015-07-15 14:20:24+00:00,2015-07-15 11:14:34+00:00 +C873,confirm payment,2015-07-15 11:19:33+00:00,2015-07-15 11:17:02+00:00 +C1006,send invoice,2015-07-15 12:02:36+00:00,2015-07-15 11:48:00+00:00 +C862,confirm payment,2015-07-15 12:03:51+00:00,2015-07-15 11:57:22+00:00 +C988,send invoice,2015-07-15 12:21:44+00:00,2015-07-15 12:01:01+00:00 +C904,pay,2015-07-15 12:32:46+00:00,2015-07-15 12:25:42+00:00 +C921,send reminder,2015-07-15 13:16:37+00:00,2015-07-15 12:39:18+00:00 +C879,confirm payment,2015-07-15 12:49:29+00:00,2015-07-15 12:40:30+00:00 +C831,confirm payment,2015-07-15 17:42:44+00:00,2015-07-15 12:47:00+00:00 +C1017,place order,2015-07-15 12:54:40+00:00,2015-07-15 12:47:16+00:00 +C882,pay,2015-07-15 14:31:26+00:00,2015-07-15 14:24:34+00:00 +C1018,place order,2015-07-15 19:13:17+00:00,2015-07-15 14:52:39+00:00 +C931,send reminder,2015-07-15 15:20:28+00:00,2015-07-15 15:11:18+00:00 +C996,send invoice,2015-07-15 16:15:34+00:00,2015-07-15 15:39:45+00:00 +C920,prepare delivery,2015-07-15 18:25:09+00:00,2015-07-15 16:04:06+00:00 +C915,prepare delivery,2015-07-15 16:18:06+00:00,2015-07-15 16:11:39+00:00 +C892,make delivery,2015-07-15 16:32:22+00:00,2015-07-15 16:19:10+00:00 +C972,send invoice,2015-07-15 16:33:05+00:00,2015-07-15 16:29:02+00:00 +C871,confirm payment,2015-07-15 16:45:46+00:00,2015-07-15 16:37:57+00:00 +C1019,place order,2015-07-15 17:10:03+00:00,2015-07-15 17:03:25+00:00 +C935,pay,2015-07-15 17:18:27+00:00,2015-07-15 17:11:17+00:00 +C877,cancel order,2015-07-15 17:33:42+00:00,2015-07-15 17:27:04+00:00 +C948,send invoice,2015-07-15 17:43:44+00:00,2015-07-15 17:39:04+00:00 +C887,prepare delivery,2015-07-15 17:48:28+00:00,2015-07-15 17:44:33+00:00 +C835,make delivery,2015-07-15 19:17:01+00:00,2015-07-15 17:46:20+00:00 +C865,confirm payment,2015-07-15 18:25:10+00:00,2015-07-15 18:12:45+00:00 +C1020,place order,2015-07-15 18:41:55+00:00,2015-07-15 18:24:57+00:00 +C923,pay,2015-07-15 18:52:15+00:00,2015-07-15 18:48:34+00:00 +C853,cancel order,2015-07-15 19:19:34+00:00,2015-07-15 19:05:39+00:00 +C1000,send invoice,2015-07-15 19:59:03+00:00,2015-07-15 19:52:53+00:00 +C1021,place order,2015-07-16 01:28:25+00:00,2015-07-15 20:51:06+00:00 +C1022,place order,2015-07-16 02:10:43+00:00,2015-07-16 02:07:48+00:00 +C995,send invoice,2015-07-16 09:22:32+00:00,2015-07-16 09:17:50+00:00 +C1023,place order,2015-07-16 09:25:42+00:00,2015-07-16 09:20:42+00:00 +C896,prepare delivery,2015-07-16 09:36:12+00:00,2015-07-16 09:28:20+00:00 +C998,send invoice,2015-07-16 09:35:38+00:00,2015-07-16 09:31:12+00:00 +C955,send reminder,2015-07-16 09:53:15+00:00,2015-07-16 09:39:40+00:00 +C976,send invoice,2015-07-16 10:59:13+00:00,2015-07-16 10:23:40+00:00 +C952,pay,2015-07-16 11:02:05+00:00,2015-07-16 10:54:59+00:00 +C933,prepare delivery,2015-07-16 11:03:13+00:00,2015-07-16 10:59:23+00:00 +C1024,place order,2015-07-16 11:06:49+00:00,2015-07-16 10:59:31+00:00 +C874,confirm payment,2015-07-16 11:23:52+00:00,2015-07-16 11:15:27+00:00 +C865,make delivery,2015-07-16 11:34:12+00:00,2015-07-16 11:18:17+00:00 +C1003,send invoice,2015-07-16 12:01:54+00:00,2015-07-16 11:57:52+00:00 +C989,send invoice,2015-07-16 12:18:52+00:00,2015-07-16 12:04:32+00:00 +C959,pay,2015-07-16 12:22:27+00:00,2015-07-16 12:12:29+00:00 +C919,confirm payment,2015-07-16 12:46:36+00:00,2015-07-16 12:40:25+00:00 +C907,send reminder,2015-07-16 13:30:54+00:00,2015-07-16 12:48:12+00:00 +C925,pay,2015-07-16 16:24:25+00:00,2015-07-16 13:03:50+00:00 +C872,cancel order,2015-07-16 13:22:05+00:00,2015-07-16 13:09:42+00:00 +C1025,place order,2015-07-16 13:20:03+00:00,2015-07-16 13:17:09+00:00 +C835,confirm payment,2015-07-16 14:00:33+00:00,2015-07-16 13:50:36+00:00 +C914,pay,2015-07-16 14:17:23+00:00,2015-07-16 14:12:54+00:00 +C913,send reminder,2015-07-16 14:58:34+00:00,2015-07-16 14:28:20+00:00 +C1026,place order,2015-07-16 19:18:33+00:00,2015-07-16 14:52:26+00:00 +C1017,send invoice,2015-07-16 15:11:02+00:00,2015-07-16 15:03:38+00:00 +C906,send reminder,2015-07-16 15:41:38+00:00,2015-07-16 15:21:02+00:00 +C968,pay,2015-07-16 15:26:53+00:00,2015-07-16 15:23:49+00:00 +C1010,send invoice,2015-07-16 15:35:32+00:00,2015-07-16 15:28:35+00:00 +C978,send invoice,2015-07-16 15:37:04+00:00,2015-07-16 15:35:00+00:00 +C981,send invoice,2015-07-16 16:06:14+00:00,2015-07-16 16:00:04+00:00 +C840,prepare delivery,2015-07-16 16:49:17+00:00,2015-07-16 16:41:45+00:00 +C915,confirm payment,2015-07-16 16:49:53+00:00,2015-07-16 16:43:18+00:00 +C929,prepare delivery,2015-07-16 17:01:56+00:00,2015-07-16 16:54:18+00:00 +C1027,place order,2015-07-16 17:10:18+00:00,2015-07-16 17:02:59+00:00 +C938,send reminder,2015-07-16 17:39:05+00:00,2015-07-16 17:04:59+00:00 +C892,confirm payment,2015-07-16 17:53:24+00:00,2015-07-16 17:48:33+00:00 +C1028,place order,2015-07-16 18:28:29+00:00,2015-07-16 18:24:05+00:00 +C909,prepare delivery,2015-07-16 21:50:54+00:00,2015-07-16 19:23:43+00:00 +C915,make delivery,2015-07-16 19:42:10+00:00,2015-07-16 19:28:43+00:00 +C930,prepare delivery,2015-07-16 20:40:12+00:00,2015-07-16 20:33:06+00:00 +C1029,place order,2015-07-16 20:54:35+00:00,2015-07-16 20:48:29+00:00 +C999,send invoice,2015-07-16 21:59:38+00:00,2015-07-16 21:54:39+00:00 +C887,make delivery,2015-07-16 22:12:48+00:00,2015-07-16 21:58:49+00:00 +C1030,place order,2015-07-17 01:56:56+00:00,2015-07-17 01:52:07+00:00 +C956,pay,2015-07-17 04:14:57+00:00,2015-07-17 04:11:28+00:00 +C1012,send invoice,2015-07-17 09:40:42+00:00,2015-07-17 09:34:05+00:00 +C1005,send invoice,2015-07-17 09:56:52+00:00,2015-07-17 09:54:22+00:00 +C1031,place order,2015-07-17 10:06:18+00:00,2015-07-17 10:03:26+00:00 +C920,make delivery,2015-07-17 11:55:28+00:00,2015-07-17 10:19:08+00:00 +C997,send invoice,2015-07-17 10:35:14+00:00,2015-07-17 10:28:11+00:00 +C896,make delivery,2015-07-17 12:19:12+00:00,2015-07-17 10:56:52+00:00 +C848,prepare delivery,2015-07-17 11:24:24+00:00,2015-07-17 10:59:23+00:00 +C926,prepare delivery,2015-07-17 13:40:18+00:00,2015-07-17 11:00:54+00:00 +C899,send reminder,2015-07-17 11:54:59+00:00,2015-07-17 11:19:53+00:00 +C1032,place order,2015-07-17 11:31:57+00:00,2015-07-17 11:25:00+00:00 +C962,pay,2015-07-17 11:36:49+00:00,2015-07-17 11:29:33+00:00 +C931,pay,2015-07-17 11:49:28+00:00,2015-07-17 11:46:21+00:00 +C939,pay,2015-07-17 12:24:59+00:00,2015-07-17 12:21:35+00:00 +C972,pay,2015-07-17 13:30:59+00:00,2015-07-17 13:00:52+00:00 +C1033,place order,2015-07-17 17:06:24+00:00,2015-07-17 13:08:07+00:00 +C924,pay,2015-07-17 16:52:52+00:00,2015-07-17 13:12:50+00:00 +C1034,place order,2015-07-17 14:41:25+00:00,2015-07-17 14:34:21+00:00 +C920,confirm payment,2015-07-17 15:00:55+00:00,2015-07-17 14:51:21+00:00 +C882,prepare delivery,2015-07-17 15:46:27+00:00,2015-07-17 15:39:00+00:00 +C933,make delivery,2015-07-17 16:41:05+00:00,2015-07-17 15:45:50+00:00 +C994,send invoice,2015-07-17 15:51:05+00:00,2015-07-17 15:47:09+00:00 +C916,prepare delivery,2015-07-17 16:23:48+00:00,2015-07-17 16:16:37+00:00 +C918,pay,2015-07-17 16:23:25+00:00,2015-07-17 16:16:43+00:00 +C927,prepare delivery,2015-07-17 16:30:21+00:00,2015-07-17 16:26:43+00:00 +C1035,place order,2015-07-17 16:41:02+00:00,2015-07-17 16:26:49+00:00 +C913,pay,2015-07-17 16:40:18+00:00,2015-07-17 16:28:53+00:00 +C912,prepare delivery,2015-07-17 16:38:11+00:00,2015-07-17 16:35:06+00:00 +C934,send reminder,2015-07-17 17:26:26+00:00,2015-07-17 17:03:15+00:00 +C963,send reminder,2015-07-17 17:22:08+00:00,2015-07-17 17:03:21+00:00 +C1036,place order,2015-07-17 18:25:15+00:00,2015-07-17 18:11:45+00:00 +C887,confirm payment,2015-07-17 18:40:48+00:00,2015-07-17 18:30:57+00:00 +C933,confirm payment,2015-07-17 18:53:39+00:00,2015-07-17 18:48:48+00:00 +C929,make delivery,2015-07-17 20:10:27+00:00,2015-07-17 20:01:25+00:00 +C1037,place order,2015-07-17 20:18:06+00:00,2015-07-17 20:11:30+00:00 +C967,pay,2015-07-17 22:17:54+00:00,2015-07-17 22:14:16+00:00 +C1038,place order,2015-07-17 23:01:57+00:00,2015-07-17 22:59:14+00:00 +C1039,place order,2015-07-18 23:50:22+00:00,2015-07-18 21:17:59+00:00 +C1040,place order,2015-07-19 20:53:32+00:00,2015-07-19 20:50:22+00:00 +C942,pay,2015-07-20 05:55:50+00:00,2015-07-20 05:52:12+00:00 +C1015,send invoice,2015-07-20 09:19:06+00:00,2015-07-20 09:11:27+00:00 +C1041,place order,2015-07-20 09:39:16+00:00,2015-07-20 09:36:26+00:00 +C1011,send invoice,2015-07-20 09:55:23+00:00,2015-07-20 09:51:44+00:00 +C1019,send invoice,2015-07-20 09:59:23+00:00,2015-07-20 09:52:19+00:00 +C888,prepare delivery,2015-07-20 10:15:04+00:00,2015-07-20 10:11:55+00:00 +C886,send reminder,2015-07-20 10:42:10+00:00,2015-07-20 10:27:48+00:00 +C946,prepare delivery,2015-07-20 10:55:45+00:00,2015-07-20 10:48:33+00:00 +C914,prepare delivery,2015-07-20 10:56:04+00:00,2015-07-20 10:48:46+00:00 +C960,pay,2015-07-20 11:03:46+00:00,2015-07-20 10:58:02+00:00 +C894,send reminder,2015-07-20 12:03:28+00:00,2015-07-20 11:22:11+00:00 +C1042,place order,2015-07-20 11:41:49+00:00,2015-07-20 11:31:00+00:00 +C987,send invoice,2015-07-20 11:38:22+00:00,2015-07-20 11:32:36+00:00 +C950,pay,2015-07-20 11:55:05+00:00,2015-07-20 11:46:48+00:00 +C930,make delivery,2015-07-20 12:00:52+00:00,2015-07-20 11:51:36+00:00 +C840,make delivery,2015-07-20 12:33:39+00:00,2015-07-20 12:18:49+00:00 +C953,send reminder,2015-07-20 12:44:43+00:00,2015-07-20 12:24:43+00:00 +C909,make delivery,2015-07-20 12:37:15+00:00,2015-07-20 12:27:47+00:00 +C1023,send invoice,2015-07-20 12:42:07+00:00,2015-07-20 12:35:15+00:00 +C936,pay,2015-07-20 13:07:07+00:00,2015-07-20 12:52:43+00:00 +C957,send reminder,2015-07-20 13:08:45+00:00,2015-07-20 12:58:40+00:00 +C876,prepare delivery,2015-07-20 13:10:56+00:00,2015-07-20 13:07:08+00:00 +C1043,place order,2015-07-20 13:26:37+00:00,2015-07-20 13:20:07+00:00 +C907,pay,2015-07-20 15:03:52+00:00,2015-07-20 14:55:07+00:00 +C1044,place order,2015-07-20 15:22:17+00:00,2015-07-20 14:58:21+00:00 +C930,confirm payment,2015-07-20 15:31:56+00:00,2015-07-20 15:25:01+00:00 +C935,prepare delivery,2015-07-20 17:58:17+00:00,2015-07-20 15:25:39+00:00 +C848,make delivery,2015-07-20 16:47:45+00:00,2015-07-20 15:26:51+00:00 +C974,send reminder,2015-07-20 16:09:15+00:00,2015-07-20 15:55:47+00:00 +C968,prepare delivery,2015-07-20 18:19:10+00:00,2015-07-20 15:58:33+00:00 +C926,make delivery,2015-07-20 16:24:18+00:00,2015-07-20 15:59:01+00:00 +C896,confirm payment,2015-07-20 16:55:16+00:00,2015-07-20 16:51:31+00:00 +C916,make delivery,2015-07-20 17:11:39+00:00,2015-07-20 17:00:44+00:00 +C1004,send invoice,2015-07-20 17:20:49+00:00,2015-07-20 17:14:24+00:00 +C1045,place order,2015-07-20 17:21:46+00:00,2015-07-20 17:14:49+00:00 +C909,confirm payment,2015-07-20 17:22:07+00:00,2015-07-20 17:15:41+00:00 +C910,prepare delivery,2015-07-20 17:37:00+00:00,2015-07-20 17:30:00+00:00 +C1018,send invoice,2015-07-20 18:48:58+00:00,2015-07-20 18:41:45+00:00 +C1046,place order,2015-07-20 23:10:48+00:00,2015-07-20 18:47:46+00:00 +C970,pay,2015-07-20 19:03:33+00:00,2015-07-20 18:57:52+00:00 +C964,send reminder,2015-07-20 19:14:24+00:00,2015-07-20 18:59:17+00:00 +C976,pay,2015-07-20 19:07:41+00:00,2015-07-20 19:02:02+00:00 +C903,send reminder,2015-07-20 19:48:59+00:00,2015-07-20 19:20:32+00:00 +C958,pay,2015-07-20 20:28:50+00:00,2015-07-20 20:20:57+00:00 +C1047,place order,2015-07-21 01:16:42+00:00,2015-07-20 21:59:32+00:00 +C1048,place order,2015-07-21 08:11:31+00:00,2015-07-21 07:58:24+00:00 +C927,make delivery,2015-07-21 08:50:16+00:00,2015-07-21 08:33:02+00:00 +C1001,send invoice,2015-07-21 09:10:21+00:00,2015-07-21 08:57:44+00:00 +C890,pay,2015-07-21 09:38:52+00:00,2015-07-21 09:35:33+00:00 +C951,send reminder,2015-07-21 10:10:26+00:00,2015-07-21 09:40:07+00:00 +C943,send reminder,2015-07-21 10:15:21+00:00,2015-07-21 09:53:55+00:00 +C993,send invoice,2015-07-21 09:58:44+00:00,2015-07-21 09:54:30+00:00 +C973,send reminder,2015-07-21 10:17:46+00:00,2015-07-21 10:09:43+00:00 +C916,confirm payment,2015-07-21 10:42:20+00:00,2015-07-21 10:32:47+00:00 +C982,pay,2015-07-21 10:46:33+00:00,2015-07-21 10:43:31+00:00 +C1049,place order,2015-07-21 10:50:39+00:00,2015-07-21 10:46:22+00:00 +C1020,send invoice,2015-07-21 11:02:29+00:00,2015-07-21 10:58:02+00:00 +C891,pay,2015-07-21 11:09:16+00:00,2015-07-21 11:04:24+00:00 +C888,make delivery,2015-07-21 11:52:30+00:00,2015-07-21 11:21:51+00:00 +C889,prepare delivery,2015-07-21 11:30:34+00:00,2015-07-21 11:22:35+00:00 +C912,make delivery,2015-07-21 12:06:17+00:00,2015-07-21 11:37:39+00:00 +C1014,send invoice,2015-07-21 11:46:17+00:00,2015-07-21 11:41:43+00:00 +C882,make delivery,2015-07-21 11:58:45+00:00,2015-07-21 11:42:59+00:00 +C929,confirm payment,2015-07-21 11:52:06+00:00,2015-07-21 11:46:36+00:00 +C984,send reminder,2015-07-21 12:16:22+00:00,2015-07-21 12:00:58+00:00 +C969,pay,2015-07-21 12:08:38+00:00,2015-07-21 12:03:04+00:00 +C1038,send invoice,2015-07-21 12:19:27+00:00,2015-07-21 12:03:06+00:00 +C912,confirm payment,2015-07-21 12:45:53+00:00,2015-07-21 12:34:18+00:00 +C1050,place order,2015-07-21 13:03:00+00:00,2015-07-21 12:50:51+00:00 +C980,pay,2015-07-21 13:38:49+00:00,2015-07-21 13:14:35+00:00 +C927,confirm payment,2015-07-21 13:23:28+00:00,2015-07-21 13:18:38+00:00 +C880,prepare delivery,2015-07-21 14:06:42+00:00,2015-07-21 14:02:47+00:00 +C1032,send invoice,2015-07-21 14:25:35+00:00,2015-07-21 14:18:06+00:00 +C1051,place order,2015-07-21 19:09:17+00:00,2015-07-21 14:59:49+00:00 +C914,make delivery,2015-07-21 16:55:05+00:00,2015-07-21 15:25:06+00:00 +C937,prepare delivery,2015-07-21 15:32:55+00:00,2015-07-21 15:25:36+00:00 +C946,make delivery,2015-07-21 15:48:26+00:00,2015-07-21 15:37:54+00:00 +C840,confirm payment,2015-07-21 16:03:56+00:00,2015-07-21 15:39:17+00:00 +C935,make delivery,2015-07-21 16:18:08+00:00,2015-07-21 15:52:10+00:00 +C917,prepare delivery,2015-07-21 16:15:53+00:00,2015-07-21 16:12:17+00:00 +C900,send reminder,2015-07-21 16:30:09+00:00,2015-07-21 16:12:39+00:00 +C876,make delivery,2015-07-21 16:51:58+00:00,2015-07-21 16:36:23+00:00 +C921,pay,2015-07-21 16:57:39+00:00,2015-07-21 16:50:20+00:00 +C928,pay,2015-07-21 17:21:42+00:00,2015-07-21 17:16:48+00:00 +C1052,place order,2015-07-21 17:21:45+00:00,2015-07-21 17:17:45+00:00 +C910,confirm payment,2015-07-21 17:29:39+00:00,2015-07-21 17:20:07+00:00 +C932,prepare delivery,2015-07-21 17:33:33+00:00,2015-07-21 17:27:42+00:00 +C1009,send invoice,2015-07-21 17:58:11+00:00,2015-07-21 17:54:12+00:00 +C876,confirm payment,2015-07-21 18:20:25+00:00,2015-07-21 18:16:25+00:00 +C882,confirm payment,2015-07-21 18:44:20+00:00,2015-07-21 18:35:20+00:00 +C947,send reminder,2015-07-21 18:48:43+00:00,2015-07-21 18:39:35+00:00 +C968,make delivery,2015-07-21 20:03:49+00:00,2015-07-21 18:48:18+00:00 +C1053,place order,2015-07-21 18:58:10+00:00,2015-07-21 18:53:38+00:00 +C975,pay,2015-07-21 19:28:10+00:00,2015-07-21 19:23:17+00:00 +C848,confirm payment,2015-07-21 19:45:17+00:00,2015-07-21 19:37:55+00:00 +C1025,send invoice,2015-07-21 21:44:45+00:00,2015-07-21 21:35:55+00:00 +C1054,place order,2015-07-21 22:35:16+00:00,2015-07-21 22:17:08+00:00 +C977,send reminder,2015-07-21 22:47:17+00:00,2015-07-21 22:32:33+00:00 +C1027,send invoice,2015-07-22 08:14:02+00:00,2015-07-22 08:07:27+00:00 +C1055,place order,2015-07-22 08:27:45+00:00,2015-07-22 08:22:30+00:00 +C1030,send invoice,2015-07-22 09:55:09+00:00,2015-07-22 09:49:16+00:00 +C955,pay,2015-07-22 10:17:29+00:00,2015-07-22 10:10:51+00:00 +C926,confirm payment,2015-07-22 10:18:59+00:00,2015-07-22 10:15:57+00:00 +C1056,place order,2015-07-22 10:27:05+00:00,2015-07-22 10:21:53+00:00 +C1024,send invoice,2015-07-22 10:45:20+00:00,2015-07-22 10:37:25+00:00 +C988,pay,2015-07-22 11:10:29+00:00,2015-07-22 11:00:22+00:00 +C923,prepare delivery,2015-07-22 11:08:29+00:00,2015-07-22 11:04:55+00:00 +C1028,send invoice,2015-07-22 11:24:43+00:00,2015-07-22 11:13:33+00:00 +C914,confirm payment,2015-07-22 11:28:20+00:00,2015-07-22 11:23:53+00:00 +C910,make delivery,2015-07-22 13:19:55+00:00,2015-07-22 11:59:53+00:00 +C1057,place order,2015-07-22 12:07:09+00:00,2015-07-22 12:01:53+00:00 +C889,make delivery,2015-07-22 13:14:30+00:00,2015-07-22 13:00:43+00:00 +C1021,send invoice,2015-07-22 13:26:06+00:00,2015-07-22 13:18:15+00:00 +C1058,place order,2015-07-22 13:33:27+00:00,2015-07-22 13:21:53+00:00 +C953,pay,2015-07-22 16:39:35+00:00,2015-07-22 13:55:47+00:00 +C888,confirm payment,2015-07-22 14:25:24+00:00,2015-07-22 14:17:00+00:00 +C934,pay,2015-07-22 14:42:45+00:00,2015-07-22 14:38:45+00:00 +C1026,send invoice,2015-07-22 15:03:27+00:00,2015-07-22 14:58:19+00:00 +C946,confirm payment,2015-07-22 15:08:48+00:00,2015-07-22 15:00:44+00:00 +C1059,place order,2015-07-22 15:25:27+00:00,2015-07-22 15:01:53+00:00 +C956,prepare delivery,2015-07-22 15:12:31+00:00,2015-07-22 15:04:43+00:00 +C937,confirm payment,2015-07-22 15:32:05+00:00,2015-07-22 15:24:06+00:00 +C1033,send invoice,2015-07-22 15:31:07+00:00,2015-07-22 15:24:38+00:00 +C1016,send invoice,2015-07-22 15:37:06+00:00,2015-07-22 15:30:11+00:00 +C880,make delivery,2015-07-22 16:10:51+00:00,2015-07-22 15:48:12+00:00 +C901,send reminder,2015-07-22 16:20:10+00:00,2015-07-22 16:01:55+00:00 +C1013,send invoice,2015-07-22 16:19:35+00:00,2015-07-22 16:15:23+00:00 +C894,pay,2015-07-22 16:21:28+00:00,2015-07-22 16:15:36+00:00 +C1060,place order,2015-07-22 20:57:20+00:00,2015-07-22 16:21:53+00:00 +C917,make delivery,2015-07-22 16:52:40+00:00,2015-07-22 16:28:58+00:00 +C961,pay,2015-07-22 16:54:40+00:00,2015-07-22 16:47:02+00:00 +C954,send reminder,2015-07-22 17:14:56+00:00,2015-07-22 17:08:23+00:00 +C941,send reminder,2015-07-22 17:48:47+00:00,2015-07-22 17:16:24+00:00 +C986,pay,2015-07-22 17:23:16+00:00,2015-07-22 17:21:03+00:00 +C972,prepare delivery,2015-07-22 17:54:39+00:00,2015-07-22 17:50:56+00:00 +C1061,place order,2015-07-22 18:09:55+00:00,2015-07-22 18:01:54+00:00 +C1049,send invoice,2015-07-22 18:12:26+00:00,2015-07-22 18:03:23+00:00 +C971,pay,2015-07-22 18:13:54+00:00,2015-07-22 18:09:42+00:00 +C952,prepare delivery,2015-07-22 18:25:34+00:00,2015-07-22 18:19:22+00:00 +C968,confirm payment,2015-07-22 19:13:47+00:00,2015-07-22 18:53:59+00:00 +C911,prepare delivery,2015-07-22 19:11:07+00:00,2015-07-22 19:03:28+00:00 +C1043,send invoice,2015-07-22 19:12:20+00:00,2015-07-22 19:04:51+00:00 +C945,send reminder,2015-07-22 20:04:02+00:00,2015-07-22 19:25:27+00:00 +C1062,place order,2015-07-22 20:12:22+00:00,2015-07-22 19:41:56+00:00 +C996,pay,2015-07-22 22:36:35+00:00,2015-07-22 22:27:08+00:00 +C1063,place order,2015-07-22 23:04:01+00:00,2015-07-22 23:00:07+00:00 +C938,pay,2015-07-23 08:32:16+00:00,2015-07-23 08:27:28+00:00 +C937,make delivery,2015-07-23 10:20:12+00:00,2015-07-23 08:40:26+00:00 +C949,send reminder,2015-07-23 08:49:27+00:00,2015-07-23 08:41:03+00:00 +C904,prepare delivery,2015-07-23 08:53:58+00:00,2015-07-23 08:46:06+00:00 +C1064,place order,2015-07-23 08:55:58+00:00,2015-07-23 08:48:22+00:00 +C983,pay,2015-07-23 09:15:35+00:00,2015-07-23 09:11:02+00:00 +C944,send reminder,2015-07-23 09:34:28+00:00,2015-07-23 09:20:47+00:00 +C959,prepare delivery,2015-07-23 09:25:59+00:00,2015-07-23 09:22:25+00:00 +C924,prepare delivery,2015-07-23 09:56:53+00:00,2015-07-23 09:41:57+00:00 +C992,pay,2015-07-23 10:21:03+00:00,2015-07-23 09:55:22+00:00 +C932,make delivery,2015-07-23 10:11:30+00:00,2015-07-23 09:57:13+00:00 +C1034,send invoice,2015-07-23 10:06:03+00:00,2015-07-23 09:58:53+00:00 +C899,cancel order,2015-07-23 10:59:33+00:00,2015-07-23 10:22:06+00:00 +C886,cancel order,2015-07-23 10:39:31+00:00,2015-07-23 10:28:52+00:00 +C995,pay,2015-07-23 10:45:16+00:00,2015-07-23 10:40:56+00:00 +C917,confirm payment,2015-07-23 11:18:00+00:00,2015-07-23 10:48:01+00:00 +C889,confirm payment,2015-07-23 11:00:21+00:00,2015-07-23 10:53:17+00:00 +C907,prepare delivery,2015-07-23 11:04:22+00:00,2015-07-23 10:58:31+00:00 +C1065,place order,2015-07-23 12:52:35+00:00,2015-07-23 11:00:41+00:00 +C935,confirm payment,2015-07-23 11:24:57+00:00,2015-07-23 11:20:20+00:00 +C921,prepare delivery,2015-07-23 11:39:18+00:00,2015-07-23 11:31:58+00:00 +C932,confirm payment,2015-07-23 12:02:35+00:00,2015-07-23 11:58:54+00:00 +C1044,send invoice,2015-07-23 12:17:56+00:00,2015-07-23 12:12:21+00:00 +C998,pay,2015-07-23 12:16:37+00:00,2015-07-23 12:14:00+00:00 +C1066,place order,2015-07-23 12:22:31+00:00,2015-07-23 12:19:29+00:00 +C939,prepare delivery,2015-07-23 14:47:20+00:00,2015-07-23 12:20:17+00:00 +C1004,pay,2015-07-23 12:49:31+00:00,2015-07-23 12:41:42+00:00 +C923,confirm payment,2015-07-23 13:04:36+00:00,2015-07-23 12:57:34+00:00 +C950,prepare delivery,2015-07-23 13:52:50+00:00,2015-07-23 13:45:30+00:00 +C965,send reminder,2015-07-23 14:25:04+00:00,2015-07-23 13:52:58+00:00 +C1067,place order,2015-07-23 14:01:30+00:00,2015-07-23 13:57:05+00:00 +C966,send reminder,2015-07-23 15:16:52+00:00,2015-07-23 14:36:43+00:00 +C925,prepare delivery,2015-07-23 14:49:17+00:00,2015-07-23 14:46:10+00:00 +C1007,send invoice,2015-07-23 14:55:01+00:00,2015-07-23 14:47:13+00:00 +C1037,send invoice,2015-07-23 15:01:58+00:00,2015-07-23 14:57:01+00:00 +C908,prepare delivery,2015-07-23 15:41:01+00:00,2015-07-23 15:32:31+00:00 +C991,send reminder,2015-07-23 16:06:10+00:00,2015-07-23 15:34:08+00:00 +C923,make delivery,2015-07-23 15:51:40+00:00,2015-07-23 15:35:24+00:00 +C976,prepare delivery,2015-07-23 15:45:22+00:00,2015-07-23 15:42:18+00:00 +C1048,send invoice,2015-07-23 16:00:35+00:00,2015-07-23 15:53:34+00:00 +C990,send reminder,2015-07-23 16:27:41+00:00,2015-07-23 15:57:13+00:00 +C1053,send invoice,2015-07-23 16:12:40+00:00,2015-07-23 16:07:11+00:00 +C1068,place order,2015-07-23 16:14:40+00:00,2015-07-23 16:12:17+00:00 +C1022,send invoice,2015-07-23 16:39:17+00:00,2015-07-23 16:35:45+00:00 +C978,pay,2015-07-23 17:13:21+00:00,2015-07-23 16:46:53+00:00 +C880,confirm payment,2015-07-23 16:57:08+00:00,2015-07-23 16:52:14+00:00 +C1040,send invoice,2015-07-23 17:21:42+00:00,2015-07-23 17:17:50+00:00 +C974,pay,2015-07-23 17:39:44+00:00,2015-07-23 17:36:52+00:00 +C1069,place order,2015-07-23 17:53:36+00:00,2015-07-23 17:42:41+00:00 +C972,confirm payment,2015-07-23 17:57:10+00:00,2015-07-23 17:51:35+00:00 +C943,pay,2015-07-23 18:10:28+00:00,2015-07-23 18:06:34+00:00 +C918,prepare delivery,2015-07-23 21:06:09+00:00,2015-07-23 18:39:26+00:00 +C1070,place order,2015-07-23 19:55:15+00:00,2015-07-23 19:44:18+00:00 +C956,make delivery,2015-07-23 20:24:39+00:00,2015-07-23 20:06:43+00:00 +C1071,place order,2015-07-23 23:16:32+00:00,2015-07-23 23:04:50+00:00 +C1072,place order,2015-07-24 09:05:46+00:00,2015-07-24 08:54:03+00:00 +C1029,send invoice,2015-07-24 11:46:24+00:00,2015-07-24 09:46:07+00:00 +C985,send reminder,2015-07-24 10:47:10+00:00,2015-07-24 10:14:29+00:00 +C911,make delivery,2015-07-24 10:35:36+00:00,2015-07-24 10:21:06+00:00 +C940,prepare delivery,2015-07-24 10:52:19+00:00,2015-07-24 10:45:08+00:00 +C903,pay,2015-07-24 10:57:35+00:00,2015-07-24 10:55:14+00:00 +C905,prepare delivery,2015-07-24 11:03:11+00:00,2015-07-24 10:57:03+00:00 +C1073,place order,2015-07-24 15:26:13+00:00,2015-07-24 11:09:11+00:00 +C952,make delivery,2015-07-24 11:46:55+00:00,2015-07-24 11:13:34+00:00 +C956,confirm payment,2015-07-24 11:19:46+00:00,2015-07-24 11:13:47+00:00 +C922,send reminder,2015-07-24 11:44:17+00:00,2015-07-24 11:19:43+00:00 +C959,make delivery,2015-07-24 11:56:27+00:00,2015-07-24 11:47:00+00:00 +C972,make delivery,2015-07-24 12:44:50+00:00,2015-07-24 12:35:20+00:00 +C1074,place order,2015-07-24 12:47:41+00:00,2015-07-24 12:36:30+00:00 +C924,make delivery,2015-07-24 14:45:42+00:00,2015-07-24 13:13:37+00:00 +C980,prepare delivery,2015-07-24 13:53:38+00:00,2015-07-24 13:26:19+00:00 +C1075,place order,2015-07-24 14:37:02+00:00,2015-07-24 14:31:07+00:00 +C921,confirm payment,2015-07-24 15:08:26+00:00,2015-07-24 15:01:04+00:00 +C904,confirm payment,2015-07-24 15:28:38+00:00,2015-07-24 15:21:43+00:00 +C921,make delivery,2015-07-24 15:39:04+00:00,2015-07-24 15:28:20+00:00 +C1060,send invoice,2015-07-24 15:40:50+00:00,2015-07-24 15:36:23+00:00 +C1056,send invoice,2015-07-24 15:47:58+00:00,2015-07-24 15:41:46+00:00 +C1050,send invoice,2015-07-24 15:55:55+00:00,2015-07-24 15:49:43+00:00 +C1066,send invoice,2015-07-24 16:10:26+00:00,2015-07-24 16:00:32+00:00 +C904,make delivery,2015-07-24 16:40:30+00:00,2015-07-24 16:01:22+00:00 +C907,make delivery,2015-07-24 16:41:08+00:00,2015-07-24 16:16:27+00:00 +C1076,place order,2015-07-24 21:16:38+00:00,2015-07-24 16:20:21+00:00 +C939,make delivery,2015-07-24 17:01:51+00:00,2015-07-24 16:24:04+00:00 +C997,pay,2015-07-24 16:40:47+00:00,2015-07-24 16:32:19+00:00 +C948,send reminder,2015-07-24 17:05:46+00:00,2015-07-24 16:36:05+00:00 +C925,confirm payment,2015-07-24 16:47:42+00:00,2015-07-24 16:42:14+00:00 +C950,make delivery,2015-07-24 16:57:18+00:00,2015-07-24 16:48:12+00:00 +C924,confirm payment,2015-07-24 17:05:20+00:00,2015-07-24 16:50:49+00:00 +C1008,send reminder,2015-07-24 17:15:17+00:00,2015-07-24 17:04:53+00:00 +C925,make delivery,2015-07-24 19:20:10+00:00,2015-07-24 17:45:23+00:00 +C907,confirm payment,2015-07-24 18:00:55+00:00,2015-07-24 17:53:28+00:00 +C908,make delivery,2015-07-24 18:14:09+00:00,2015-07-24 17:56:48+00:00 +C1077,place order,2015-07-24 19:45:43+00:00,2015-07-24 17:58:49+00:00 +C1011,pay,2015-07-24 20:28:53+00:00,2015-07-24 20:22:18+00:00 +C1078,place order,2015-07-24 20:38:59+00:00,2015-07-24 20:32:42+00:00 +C981,pay,2015-07-24 21:45:26+00:00,2015-07-24 21:37:22+00:00 +C1079,place order,2015-07-25 02:59:46+00:00,2015-07-25 00:17:24+00:00 +C1080,place order,2015-07-25 22:52:28+00:00,2015-07-25 22:47:17+00:00 +C1020,pay,2015-07-26 19:49:25+00:00,2015-07-26 19:45:19+00:00 +C1081,place order,2015-07-26 22:59:32+00:00,2015-07-26 22:48:58+00:00 +C952,confirm payment,2015-07-27 09:27:49+00:00,2015-07-27 09:19:50+00:00 +C1082,place order,2015-07-27 09:57:32+00:00,2015-07-27 09:46:54+00:00 +C1006,pay,2015-07-27 10:04:42+00:00,2015-07-27 09:59:03+00:00 +C1039,send invoice,2015-07-27 10:07:13+00:00,2015-07-27 10:03:01+00:00 +C959,confirm payment,2015-07-27 10:14:07+00:00,2015-07-27 10:08:36+00:00 +C1005,pay,2015-07-27 10:21:33+00:00,2015-07-27 10:14:30+00:00 +C950,confirm payment,2015-07-27 11:11:34+00:00,2015-07-27 11:05:10+00:00 +C969,prepare delivery,2015-07-27 13:38:23+00:00,2015-07-27 11:17:11+00:00 +C1058,send invoice,2015-07-27 12:05:02+00:00,2015-07-27 11:46:23+00:00 +C1083,place order,2015-07-27 12:03:42+00:00,2015-07-27 11:51:56+00:00 +C976,make delivery,2015-07-27 12:23:13+00:00,2015-07-27 12:11:23+00:00 +C913,prepare delivery,2015-07-27 12:42:36+00:00,2015-07-27 12:15:48+00:00 +C911,confirm payment,2015-07-27 12:28:08+00:00,2015-07-27 12:19:31+00:00 +C1003,pay,2015-07-27 12:34:02+00:00,2015-07-27 12:27:02+00:00 +C918,make delivery,2015-07-27 13:08:46+00:00,2015-07-27 12:39:04+00:00 +C1000,send reminder,2015-07-27 13:24:33+00:00,2015-07-27 12:39:40+00:00 +C1063,send invoice,2015-07-27 13:38:34+00:00,2015-07-27 13:30:33+00:00 +C1084,place order,2015-07-27 14:38:27+00:00,2015-07-27 14:01:59+00:00 +C905,make delivery,2015-07-27 14:35:12+00:00,2015-07-27 14:10:30+00:00 +C1059,send invoice,2015-07-27 14:15:22+00:00,2015-07-27 14:10:33+00:00 +C901,pay,2015-07-27 14:57:03+00:00,2015-07-27 14:51:36+00:00 +C1085,place order,2015-07-27 15:33:17+00:00,2015-07-27 15:22:05+00:00 +C1041,send invoice,2015-07-27 15:52:45+00:00,2015-07-27 15:45:26+00:00 +C989,send reminder,2015-07-27 16:35:03+00:00,2015-07-27 15:56:27+00:00 +C940,make delivery,2015-07-27 16:55:08+00:00,2015-07-27 16:26:05+00:00 +C970,prepare delivery,2015-07-27 16:44:22+00:00,2015-07-27 16:36:31+00:00 +C940,confirm payment,2015-07-27 16:48:37+00:00,2015-07-27 16:41:51+00:00 +C900,cancel order,2015-07-27 17:04:57+00:00,2015-07-27 16:54:04+00:00 +C1086,place order,2015-07-27 19:08:16+00:00,2015-07-27 17:02:17+00:00 +C942,prepare delivery,2015-07-27 17:09:56+00:00,2015-07-27 17:02:27+00:00 +C936,prepare delivery,2015-07-27 19:33:55+00:00,2015-07-27 17:05:45+00:00 +C939,confirm payment,2015-07-27 17:52:12+00:00,2015-07-27 17:44:46+00:00 +C978,prepare delivery,2015-07-27 18:03:12+00:00,2015-07-27 17:56:04+00:00 +C979,pay,2015-07-27 18:32:39+00:00,2015-07-27 18:04:31+00:00 +C1087,place order,2015-07-27 18:28:23+00:00,2015-07-27 18:22:41+00:00 +C960,prepare delivery,2015-07-27 20:58:01+00:00,2015-07-27 18:28:19+00:00 +C1045,send invoice,2015-07-27 19:32:05+00:00,2015-07-27 19:24:46+00:00 +C1010,pay,2015-07-27 19:49:39+00:00,2015-07-27 19:42:46+00:00 +C938,prepare delivery,2015-07-27 20:41:18+00:00,2015-07-27 20:32:23+00:00 +C1088,place order,2015-07-27 22:47:51+00:00,2015-07-27 20:44:18+00:00 +C967,prepare delivery,2015-07-27 21:47:32+00:00,2015-07-27 21:23:33+00:00 +C1089,place order,2015-07-28 01:32:23+00:00,2015-07-28 01:27:00+00:00 +C1014,pay,2015-07-28 03:20:34+00:00,2015-07-28 03:13:59+00:00 +C988,prepare delivery,2015-07-28 08:25:38+00:00,2015-07-28 08:11:04+00:00 +C980,make delivery,2015-07-28 08:56:21+00:00,2015-07-28 08:43:28+00:00 +C908,confirm payment,2015-07-28 09:55:36+00:00,2015-07-28 09:27:58+00:00 +C1012,send reminder,2015-07-28 09:40:31+00:00,2015-07-28 09:28:00+00:00 +C1090,place order,2015-07-28 09:38:48+00:00,2015-07-28 09:35:49+00:00 +C954,pay,2015-07-28 10:01:00+00:00,2015-07-28 09:56:57+00:00 +C1042,send invoice,2015-07-28 10:43:40+00:00,2015-07-28 10:13:26+00:00 +C906,send reminder,2015-07-28 11:27:25+00:00,2015-07-28 11:13:17+00:00 +C980,confirm payment,2015-07-28 11:25:14+00:00,2015-07-28 11:22:01+00:00 +C976,confirm payment,2015-07-28 11:36:46+00:00,2015-07-28 11:28:01+00:00 +C1091,place order,2015-07-28 11:36:48+00:00,2015-07-28 11:29:45+00:00 +C944,pay,2015-07-28 11:35:12+00:00,2015-07-28 11:32:12+00:00 +C934,prepare delivery,2015-07-28 11:45:33+00:00,2015-07-28 11:36:43+00:00 +C891,prepare delivery,2015-07-28 11:49:32+00:00,2015-07-28 11:45:40+00:00 +C918,confirm payment,2015-07-28 12:17:48+00:00,2015-07-28 12:09:13+00:00 +C961,prepare delivery,2015-07-28 12:18:45+00:00,2015-07-28 12:10:57+00:00 +C913,make delivery,2015-07-28 13:18:04+00:00,2015-07-28 12:40:13+00:00 +C1092,place order,2015-07-28 13:23:40+00:00,2015-07-28 13:17:38+00:00 +C969,make delivery,2015-07-28 14:43:46+00:00,2015-07-28 14:30:05+00:00 +C985,pay,2015-07-28 14:48:38+00:00,2015-07-28 14:43:02+00:00 +C1093,place order,2015-07-28 15:00:43+00:00,2015-07-28 14:53:23+00:00 +C1064,send invoice,2015-07-28 15:04:42+00:00,2015-07-28 14:57:48+00:00 +C913,confirm payment,2015-07-28 15:30:53+00:00,2015-07-28 15:05:21+00:00 +C931,prepare delivery,2015-07-28 15:15:53+00:00,2015-07-28 15:08:46+00:00 +C1036,send invoice,2015-07-28 15:26:29+00:00,2015-07-28 15:22:31+00:00 +C1077,send invoice,2015-07-28 15:29:32+00:00,2015-07-28 15:24:05+00:00 +C941,pay,2015-07-28 15:55:12+00:00,2015-07-28 15:51:38+00:00 +C983,prepare delivery,2015-07-28 16:08:56+00:00,2015-07-28 16:00:57+00:00 +C1005,prepare delivery,2015-07-28 16:18:35+00:00,2015-07-28 16:14:36+00:00 +C905,confirm payment,2015-07-28 16:49:42+00:00,2015-07-28 16:42:21+00:00 +C1094,place order,2015-07-28 17:15:05+00:00,2015-07-28 17:04:53+00:00 +C1001,pay,2015-07-28 17:57:51+00:00,2015-07-28 17:51:49+00:00 +C1095,place order,2015-07-28 18:39:04+00:00,2015-07-28 18:27:53+00:00 +C970,make delivery,2015-07-28 20:51:56+00:00,2015-07-28 20:25:08+00:00 +C1011,prepare delivery,2015-07-28 20:57:43+00:00,2015-07-28 20:30:00+00:00 +C999,pay,2015-07-28 20:53:34+00:00,2015-07-28 20:47:22+00:00 +C1096,place order,2015-07-28 21:07:10+00:00,2015-07-28 20:59:54+00:00 +C953,prepare delivery,2015-07-28 22:26:38+00:00,2015-07-28 22:22:43+00:00 +C1097,place order,2015-07-29 03:04:53+00:00,2015-07-29 03:00:36+00:00 +C1022,pay,2015-07-29 04:17:26+00:00,2015-07-29 04:13:43+00:00 +C936,make delivery,2015-07-29 10:00:29+00:00,2015-07-29 08:33:54+00:00 +C1047,send invoice,2015-07-29 09:19:04+00:00,2015-07-29 09:11:38+00:00 +C1098,place order,2015-07-29 09:24:15+00:00,2015-07-29 09:18:47+00:00 +C975,prepare delivery,2015-07-29 09:27:28+00:00,2015-07-29 09:19:57+00:00 +C942,make delivery,2015-07-29 09:36:17+00:00,2015-07-29 09:22:14+00:00 +C982,prepare delivery,2015-07-29 09:41:00+00:00,2015-07-29 09:25:36+00:00 +C987,send reminder,2015-07-29 10:13:45+00:00,2015-07-29 10:04:53+00:00 +C960,make delivery,2015-07-29 10:21:37+00:00,2015-07-29 10:10:27+00:00 +C938,confirm payment,2015-07-29 10:27:13+00:00,2015-07-29 10:22:11+00:00 +C1051,send invoice,2015-07-29 10:37:33+00:00,2015-07-29 10:29:28+00:00 +C978,confirm payment,2015-07-29 10:44:15+00:00,2015-07-29 10:37:14+00:00 +C922,pay,2015-07-29 10:43:54+00:00,2015-07-29 10:38:36+00:00 +C1015,send reminder,2015-07-29 10:59:01+00:00,2015-07-29 10:49:51+00:00 +C1073,send invoice,2015-07-29 10:59:56+00:00,2015-07-29 10:50:45+00:00 +C1099,place order,2015-07-29 11:03:47+00:00,2015-07-29 10:55:41+00:00 +C963,send reminder,2015-07-29 11:43:07+00:00,2015-07-29 10:58:26+00:00 +C1054,send invoice,2015-07-29 11:07:06+00:00,2015-07-29 11:01:09+00:00 +C938,make delivery,2015-07-29 11:54:44+00:00,2015-07-29 11:16:56+00:00 +C962,prepare delivery,2015-07-29 11:22:29+00:00,2015-07-29 11:19:26+00:00 +C942,confirm payment,2015-07-29 11:49:39+00:00,2015-07-29 11:32:04+00:00 +C988,make delivery,2015-07-29 11:48:22+00:00,2015-07-29 11:33:00+00:00 +C967,make delivery,2015-07-29 12:09:32+00:00,2015-07-29 11:39:23+00:00 +C1024,pay,2015-07-29 11:47:33+00:00,2015-07-29 11:42:44+00:00 +C1072,send invoice,2015-07-29 11:49:49+00:00,2015-07-29 11:42:52+00:00 +C1067,send invoice,2015-07-29 12:08:33+00:00,2015-07-29 11:59:06+00:00 +C1031,send invoice,2015-07-29 12:21:01+00:00,2015-07-29 12:07:13+00:00 +C994,pay,2015-07-29 12:14:47+00:00,2015-07-29 12:10:10+00:00 +C934,confirm payment,2015-07-29 12:37:07+00:00,2015-07-29 12:20:15+00:00 +C934,make delivery,2015-07-29 12:37:32+00:00,2015-07-29 12:27:16+00:00 +C1088,send invoice,2015-07-29 12:41:43+00:00,2015-07-29 12:39:06+00:00 +C978,make delivery,2015-07-29 13:10:45+00:00,2015-07-29 12:59:34+00:00 +C1100,place order,2015-07-29 13:13:28+00:00,2015-07-29 13:09:29+00:00 +C957,send reminder,2015-07-29 13:32:57+00:00,2015-07-29 13:19:02+00:00 +C947,pay,2015-07-29 13:31:16+00:00,2015-07-29 13:22:36+00:00 +C970,confirm payment,2015-07-29 13:42:17+00:00,2015-07-29 13:36:54+00:00 +C955,prepare delivery,2015-07-29 13:46:35+00:00,2015-07-29 13:39:30+00:00 +C1035,send invoice,2015-07-29 14:12:42+00:00,2015-07-29 14:06:44+00:00 +C1052,send invoice,2015-07-29 14:25:35+00:00,2015-07-29 14:20:14+00:00 +C1101,place order,2015-07-29 14:39:42+00:00,2015-07-29 14:37:05+00:00 +C936,confirm payment,2015-07-29 14:50:34+00:00,2015-07-29 14:43:05+00:00 +C969,confirm payment,2015-07-29 15:10:44+00:00,2015-07-29 15:02:30+00:00 +C891,confirm payment,2015-07-29 15:18:33+00:00,2015-07-29 15:10:29+00:00 +C1012,pay,2015-07-29 17:41:57+00:00,2015-07-29 15:10:42+00:00 +C943,prepare delivery,2015-07-29 15:39:54+00:00,2015-07-29 15:13:19+00:00 +C1082,send invoice,2015-07-29 15:24:16+00:00,2015-07-29 15:16:59+00:00 +C1065,send invoice,2015-07-29 15:27:13+00:00,2015-07-29 15:21:35+00:00 +C928,prepare delivery,2015-07-29 16:29:23+00:00,2015-07-29 16:26:31+00:00 +C964,send reminder,2015-07-29 16:59:43+00:00,2015-07-29 16:27:33+00:00 +C1102,place order,2015-07-29 19:31:11+00:00,2015-07-29 16:32:17+00:00 +C906,cancel order,2015-07-29 17:02:36+00:00,2015-07-29 16:54:20+00:00 +C1046,send invoice,2015-07-29 17:09:26+00:00,2015-07-29 17:01:35+00:00 +C951,send reminder,2015-07-29 17:56:47+00:00,2015-07-29 17:13:36+00:00 +C891,make delivery,2015-07-29 18:57:23+00:00,2015-07-29 17:22:37+00:00 +C1080,send invoice,2015-07-29 17:51:14+00:00,2015-07-29 17:29:57+00:00 +C890,prepare delivery,2015-07-29 20:02:27+00:00,2015-07-29 17:34:11+00:00 +C967,confirm payment,2015-07-29 17:48:18+00:00,2015-07-29 17:42:30+00:00 +C1005,confirm payment,2015-07-29 18:21:16+00:00,2015-07-29 18:17:42+00:00 +C1103,place order,2015-07-29 18:35:08+00:00,2015-07-29 18:22:42+00:00 +C1023,send reminder,2015-07-29 19:25:15+00:00,2015-07-29 19:10:56+00:00 +C981,prepare delivery,2015-07-29 19:27:13+00:00,2015-07-29 19:20:03+00:00 +C1021,pay,2015-07-29 20:09:29+00:00,2015-07-29 20:02:52+00:00 +C1104,place order,2015-07-29 22:51:05+00:00,2015-07-29 20:44:20+00:00 +C1105,place order,2015-07-30 01:45:52+00:00,2015-07-30 01:27:12+00:00 +C1025,pay,2015-07-30 03:28:39+00:00,2015-07-30 03:23:11+00:00 +C988,confirm payment,2015-07-30 11:34:38+00:00,2015-07-30 08:48:41+00:00 +C960,confirm payment,2015-07-30 08:59:54+00:00,2015-07-30 08:50:22+00:00 +C931,confirm payment,2015-07-30 09:14:43+00:00,2015-07-30 09:07:18+00:00 +C931,make delivery,2015-07-30 09:29:45+00:00,2015-07-30 09:13:54+00:00 +C961,make delivery,2015-07-30 09:35:21+00:00,2015-07-30 09:18:52+00:00 +C1075,send invoice,2015-07-30 10:01:26+00:00,2015-07-30 09:32:23+00:00 +C1106,place order,2015-07-30 09:41:10+00:00,2015-07-30 09:36:03+00:00 +C1005,make delivery,2015-07-30 10:08:33+00:00,2015-07-30 09:38:56+00:00 +C961,confirm payment,2015-07-30 10:13:20+00:00,2015-07-30 10:04:39+00:00 +C974,prepare delivery,2015-07-30 10:13:34+00:00,2015-07-30 10:06:09+00:00 +C1004,prepare delivery,2015-07-30 12:37:08+00:00,2015-07-30 10:13:43+00:00 +C953,make delivery,2015-07-30 11:55:18+00:00,2015-07-30 10:27:37+00:00 +C963,cancel order,2015-07-30 11:12:42+00:00,2015-07-30 10:40:44+00:00 +C1057,send invoice,2015-07-30 10:58:35+00:00,2015-07-30 10:53:22+00:00 +C1011,make delivery,2015-07-30 11:35:15+00:00,2015-07-30 11:08:27+00:00 +C1091,send invoice,2015-07-30 11:26:46+00:00,2015-07-30 11:21:47+00:00 +C1032,send reminder,2015-07-30 11:36:15+00:00,2015-07-30 11:25:29+00:00 +C901,prepare delivery,2015-07-30 11:33:48+00:00,2015-07-30 11:29:51+00:00 +C1107,place order,2015-07-30 11:55:05+00:00,2015-07-30 11:30:13+00:00 +C984,send reminder,2015-07-30 11:49:45+00:00,2015-07-30 11:41:00+00:00 +C1018,send reminder,2015-07-30 11:55:03+00:00,2015-07-30 11:44:18+00:00 +C983,make delivery,2015-07-30 13:51:42+00:00,2015-07-30 12:13:55+00:00 +C1019,pay,2015-07-30 13:15:31+00:00,2015-07-30 13:10:59+00:00 +C1108,place order,2015-07-30 14:05:04+00:00,2015-07-30 13:18:33+00:00 +C995,prepare delivery,2015-07-30 13:51:23+00:00,2015-07-30 13:26:02+00:00 +C982,make delivery,2015-07-30 15:03:52+00:00,2015-07-30 13:26:37+00:00 +C962,confirm payment,2015-07-30 14:38:04+00:00,2015-07-30 14:31:30+00:00 +C975,confirm payment,2015-07-30 14:55:55+00:00,2015-07-30 14:48:11+00:00 +C982,confirm payment,2015-07-30 14:56:54+00:00,2015-07-30 14:50:13+00:00 +C1109,place order,2015-07-30 18:01:14+00:00,2015-07-30 14:55:13+00:00 +C962,make delivery,2015-07-30 15:16:44+00:00,2015-07-30 15:00:28+00:00 +C1031,pay,2015-07-30 15:10:35+00:00,2015-07-30 15:05:01+00:00 +C973,send reminder,2015-07-30 15:48:05+00:00,2015-07-30 15:25:54+00:00 +C894,prepare delivery,2015-07-30 16:07:07+00:00,2015-07-30 15:58:26+00:00 +C1033,pay,2015-07-30 16:12:06+00:00,2015-07-30 16:00:47+00:00 +C953,confirm payment,2015-07-30 16:33:19+00:00,2015-07-30 16:24:33+00:00 +C955,make delivery,2015-07-30 17:54:59+00:00,2015-07-30 16:26:21+00:00 +C975,make delivery,2015-07-30 16:49:14+00:00,2015-07-30 16:31:59+00:00 +C1038,send reminder,2015-07-30 16:44:42+00:00,2015-07-30 16:38:01+00:00 +C957,pay,2015-07-30 16:49:29+00:00,2015-07-30 16:44:08+00:00 +C1110,place order,2015-07-30 17:22:14+00:00,2015-07-30 17:08:33+00:00 +C1096,send invoice,2015-07-30 17:31:31+00:00,2015-07-30 17:21:53+00:00 +C996,prepare delivery,2015-07-30 17:33:46+00:00,2015-07-30 17:26:38+00:00 +C1030,send reminder,2015-07-30 17:52:21+00:00,2015-07-30 17:31:37+00:00 +C985,prepare delivery,2015-07-30 18:11:27+00:00,2015-07-30 18:03:35+00:00 +C943,make delivery,2015-07-30 18:24:02+00:00,2015-07-30 18:08:13+00:00 +C1085,send invoice,2015-07-30 18:32:16+00:00,2015-07-30 18:28:00+00:00 +C1111,place order,2015-07-30 18:40:25+00:00,2015-07-30 18:35:14+00:00 +C1061,send invoice,2015-07-30 19:01:46+00:00,2015-07-30 18:56:09+00:00 +C1017,pay,2015-07-30 19:58:27+00:00,2015-07-30 19:53:02+00:00 +C890,make delivery,2015-07-30 21:17:30+00:00,2015-07-30 21:07:15+00:00 +C1112,place order,2015-07-30 21:25:16+00:00,2015-07-30 21:21:56+00:00 +C992,prepare delivery,2015-07-30 21:56:36+00:00,2015-07-30 21:53:38+00:00 +C993,pay,2015-07-30 22:50:06+00:00,2015-07-30 22:20:56+00:00 +C1046,pay,2015-07-31 02:09:18+00:00,2015-07-31 02:06:47+00:00 +C1113,place order,2015-07-31 04:24:19+00:00,2015-07-31 04:12:48+00:00 +C1097,send invoice,2015-07-31 08:39:00+00:00,2015-07-31 08:21:41+00:00 +C981,confirm payment,2015-07-31 08:34:28+00:00,2015-07-31 08:29:20+00:00 +C977,send reminder,2015-07-31 09:55:53+00:00,2015-07-31 09:12:04+00:00 +C983,confirm payment,2015-07-31 09:28:58+00:00,2015-07-31 09:23:11+00:00 +C994,prepare delivery,2015-07-31 09:37:57+00:00,2015-07-31 09:30:37+00:00 +C1114,place order,2015-07-31 14:07:26+00:00,2015-07-31 09:38:12+00:00 +C974,confirm payment,2015-07-31 09:47:10+00:00,2015-07-31 09:38:20+00:00 +C955,confirm payment,2015-07-31 10:01:54+00:00,2015-07-31 09:52:57+00:00 +C981,make delivery,2015-07-31 10:15:14+00:00,2015-07-31 10:00:33+00:00 +C958,prepare delivery,2015-07-31 10:11:19+00:00,2015-07-31 10:04:14+00:00 +C1024,prepare delivery,2015-07-31 10:12:14+00:00,2015-07-31 10:08:35+00:00 +C1079,send invoice,2015-07-31 10:25:27+00:00,2015-07-31 10:18:25+00:00 +C1083,send invoice,2015-07-31 10:26:32+00:00,2015-07-31 10:21:51+00:00 +C1003,prepare delivery,2015-07-31 11:06:56+00:00,2015-07-31 10:59:32+00:00 +C1070,send invoice,2015-07-31 11:33:03+00:00,2015-07-31 11:27:19+00:00 +C928,make delivery,2015-07-31 13:08:16+00:00,2015-07-31 11:30:06+00:00 +C1004,make delivery,2015-07-31 11:47:31+00:00,2015-07-31 11:33:06+00:00 +C1115,place order,2015-07-31 16:22:58+00:00,2015-07-31 11:34:31+00:00 +C971,prepare delivery,2015-07-31 11:59:08+00:00,2015-07-31 11:56:07+00:00 +C1055,send invoice,2015-07-31 12:18:41+00:00,2015-07-31 12:12:24+00:00 +C1009,send reminder,2015-07-31 12:40:48+00:00,2015-07-31 12:15:20+00:00 +C901,make delivery,2015-07-31 12:46:35+00:00,2015-07-31 12:23:55+00:00 +C1086,send invoice,2015-07-31 12:42:43+00:00,2015-07-31 12:31:08+00:00 +C1116,place order,2015-07-31 14:05:24+00:00,2015-07-31 13:27:10+00:00 +C1010,prepare delivery,2015-07-31 13:41:16+00:00,2015-07-31 13:34:06+00:00 +C1004,confirm payment,2015-07-31 14:55:11+00:00,2015-07-31 14:46:19+00:00 +C995,confirm payment,2015-07-31 15:01:18+00:00,2015-07-31 14:54:27+00:00 +C1013,send reminder,2015-07-31 15:13:04+00:00,2015-07-31 15:03:49+00:00 +C1117,place order,2015-07-31 15:26:12+00:00,2015-07-31 15:12:27+00:00 +C1016,send reminder,2015-07-31 16:05:28+00:00,2015-07-31 15:53:34+00:00 +C995,make delivery,2015-07-31 16:47:07+00:00,2015-07-31 15:54:23+00:00 +C1114,send invoice,2015-07-31 16:08:31+00:00,2015-07-31 16:01:14+00:00 +C901,confirm payment,2015-07-31 16:11:27+00:00,2015-07-31 16:04:47+00:00 +C1074,send invoice,2015-07-31 16:15:39+00:00,2015-07-31 16:07:52+00:00 +C1011,confirm payment,2015-07-31 16:42:01+00:00,2015-07-31 16:09:38+00:00 +C1020,prepare delivery,2015-07-31 16:25:29+00:00,2015-07-31 16:18:03+00:00 +C1055,pay,2015-07-31 16:29:53+00:00,2015-07-31 16:26:00+00:00 +C974,make delivery,2015-07-31 16:54:01+00:00,2015-07-31 16:37:50+00:00 +C1118,place order,2015-07-31 16:48:21+00:00,2015-07-31 16:43:01+00:00 +C890,confirm payment,2015-07-31 17:08:20+00:00,2015-07-31 16:53:56+00:00 +C1006,prepare delivery,2015-07-31 17:32:32+00:00,2015-07-31 17:07:16+00:00 +C1095,send invoice,2015-07-31 17:47:37+00:00,2015-07-31 17:41:44+00:00 +C1071,send invoice,2015-07-31 18:26:39+00:00,2015-07-31 18:20:44+00:00 +C996,confirm payment,2015-07-31 18:28:08+00:00,2015-07-31 18:23:09+00:00 +C1093,send invoice,2015-07-31 18:50:12+00:00,2015-07-31 18:41:35+00:00 +C1119,place order,2015-07-31 18:56:05+00:00,2015-07-31 18:44:09+00:00 +C1059,pay,2015-07-31 19:30:07+00:00,2015-07-31 19:27:29+00:00 +C1120,place order,2015-07-31 21:55:32+00:00,2015-07-31 21:48:42+00:00 +C1045,pay,2015-07-31 22:06:53+00:00,2015-07-31 22:00:18+00:00 +C1002,pay,2015-08-01 11:42:17+00:00,2015-08-01 11:37:01+00:00 +C1121,place order,2015-08-01 14:44:37+00:00,2015-08-01 14:35:24+00:00 +C1122,place order,2015-08-02 14:53:13+00:00,2015-08-02 14:48:00+00:00 +C1123,place order,2015-08-03 07:45:23+00:00,2015-08-03 07:31:12+00:00 +C949,send reminder,2015-08-03 09:50:32+00:00,2015-08-03 09:22:13+00:00 +C928,confirm payment,2015-08-03 09:45:23+00:00,2015-08-03 09:41:42+00:00 +C1057,pay,2015-08-03 10:03:47+00:00,2015-08-03 10:00:03+00:00 +C1062,send invoice,2015-08-03 10:11:02+00:00,2015-08-03 10:05:22+00:00 +C954,prepare delivery,2015-08-03 10:20:44+00:00,2015-08-03 10:12:50+00:00 +C1124,place order,2015-08-03 10:20:48+00:00,2015-08-03 10:16:27+00:00 +C992,make delivery,2015-08-03 10:49:36+00:00,2015-08-03 10:31:54+00:00 +C1034,pay,2015-08-03 10:59:31+00:00,2015-08-03 10:33:25+00:00 +C1026,send reminder,2015-08-03 10:54:22+00:00,2015-08-03 10:40:16+00:00 +C1087,send invoice,2015-08-03 10:57:16+00:00,2015-08-03 10:52:05+00:00 +C985,make delivery,2015-08-03 11:06:44+00:00,2015-08-03 10:54:45+00:00 +C994,confirm payment,2015-08-03 11:06:10+00:00,2015-08-03 10:57:23+00:00 +C1090,send invoice,2015-08-03 11:24:53+00:00,2015-08-03 11:08:08+00:00 +C1125,place order,2015-08-03 11:54:23+00:00,2015-08-03 11:51:01+00:00 +C943,confirm payment,2015-08-03 12:31:43+00:00,2015-08-03 12:06:59+00:00 +C1101,send invoice,2015-08-03 12:39:50+00:00,2015-08-03 12:36:07+00:00 +C996,make delivery,2015-08-03 13:38:37+00:00,2015-08-03 12:47:12+00:00 +C1027,pay,2015-08-03 13:02:10+00:00,2015-08-03 12:49:16+00:00 +C1126,place order,2015-08-03 14:09:41+00:00,2015-08-03 14:00:09+00:00 +C1024,confirm payment,2015-08-03 14:09:30+00:00,2015-08-03 14:04:15+00:00 +C984,cancel order,2015-08-03 14:46:06+00:00,2015-08-03 14:09:19+00:00 +C958,make delivery,2015-08-03 14:36:53+00:00,2015-08-03 14:21:11+00:00 +C1107,send invoice,2015-08-03 14:40:48+00:00,2015-08-03 14:34:19+00:00 +C986,prepare delivery,2015-08-03 14:44:34+00:00,2015-08-03 14:37:21+00:00 +C1127,place order,2015-08-03 15:31:34+00:00,2015-08-03 15:18:25+00:00 +C1000,pay,2015-08-03 15:33:15+00:00,2015-08-03 15:25:26+00:00 +C945,send reminder,2015-08-03 16:03:11+00:00,2015-08-03 15:34:33+00:00 +C1069,send invoice,2015-08-03 15:41:32+00:00,2015-08-03 15:35:17+00:00 +C894,make delivery,2015-08-03 15:53:29+00:00,2015-08-03 15:43:34+00:00 +C1044,send reminder,2015-08-03 16:20:15+00:00,2015-08-03 16:11:38+00:00 +C992,confirm payment,2015-08-03 16:25:32+00:00,2015-08-03 16:21:39+00:00 +C1038,pay,2015-08-03 16:33:57+00:00,2015-08-03 16:27:46+00:00 +C991,send reminder,2015-08-03 16:41:05+00:00,2015-08-03 16:30:24+00:00 +C1094,send invoice,2015-08-03 17:14:12+00:00,2015-08-03 16:41:10+00:00 +C994,make delivery,2015-08-03 17:07:48+00:00,2015-08-03 16:42:35+00:00 +C1058,pay,2015-08-03 16:48:29+00:00,2015-08-03 16:42:57+00:00 +C1128,place order,2015-08-03 17:03:30+00:00,2015-08-03 16:54:57+00:00 +C990,send reminder,2015-08-03 17:32:56+00:00,2015-08-03 17:12:35+00:00 +C903,prepare delivery,2015-08-03 17:16:24+00:00,2015-08-03 17:12:46+00:00 +C1014,prepare delivery,2015-08-03 17:21:32+00:00,2015-08-03 17:13:42+00:00 +C971,confirm payment,2015-08-03 17:37:07+00:00,2015-08-03 17:28:58+00:00 +C1010,make delivery,2015-08-03 18:13:38+00:00,2015-08-03 17:33:54+00:00 +C1049,pay,2015-08-03 17:44:20+00:00,2015-08-03 17:38:30+00:00 +C973,cancel order,2015-08-03 18:01:55+00:00,2015-08-03 17:49:48+00:00 +C1007,send reminder,2015-08-03 18:09:59+00:00,2015-08-03 17:57:06+00:00 +C1043,pay,2015-08-03 18:15:21+00:00,2015-08-03 18:03:34+00:00 +C1054,pay,2015-08-03 18:46:53+00:00,2015-08-03 18:40:45+00:00 +C1028,pay,2015-08-03 19:06:30+00:00,2015-08-03 18:59:53+00:00 +C1022,prepare delivery,2015-08-03 19:08:52+00:00,2015-08-03 19:05:09+00:00 +C1129,place order,2015-08-03 21:36:51+00:00,2015-08-03 19:08:02+00:00 +C1130,place order,2015-08-03 21:56:23+00:00,2015-08-03 21:52:18+00:00 +C1131,place order,2015-08-04 07:29:14+00:00,2015-08-04 07:15:00+00:00 +C1076,send invoice,2015-08-04 08:44:35+00:00,2015-08-04 08:39:35+00:00 +C1024,make delivery,2015-08-04 09:39:54+00:00,2015-08-04 09:22:44+00:00 +C941,prepare delivery,2015-08-04 09:52:38+00:00,2015-08-04 09:48:59+00:00 +C1015,pay,2015-08-04 10:26:00+00:00,2015-08-04 09:54:38+00:00 +C966,send reminder,2015-08-04 10:16:33+00:00,2015-08-04 09:55:05+00:00 +C997,prepare delivery,2015-08-04 10:01:41+00:00,2015-08-04 09:56:02+00:00 +C1099,send invoice,2015-08-04 10:05:20+00:00,2015-08-04 09:57:39+00:00 +C1132,place order,2015-08-04 10:29:10+00:00,2015-08-04 09:58:37+00:00 +C971,make delivery,2015-08-04 10:48:07+00:00,2015-08-04 09:59:19+00:00 +C1053,send reminder,2015-08-04 10:24:26+00:00,2015-08-04 10:08:26+00:00 +C947,prepare delivery,2015-08-04 10:33:27+00:00,2015-08-04 10:29:50+00:00 +C1003,make delivery,2015-08-04 11:28:18+00:00,2015-08-04 10:36:40+00:00 +C1006,confirm payment,2015-08-04 11:12:53+00:00,2015-08-04 11:05:55+00:00 +C1048,send reminder,2015-08-04 12:35:32+00:00,2015-08-04 11:52:21+00:00 +C1092,send invoice,2015-08-04 12:05:12+00:00,2015-08-04 11:58:16+00:00 +C1133,place order,2015-08-04 13:00:16+00:00,2015-08-04 12:15:22+00:00 +C894,confirm payment,2015-08-04 12:29:46+00:00,2015-08-04 12:20:03+00:00 +C1023,pay,2015-08-04 12:38:06+00:00,2015-08-04 12:35:49+00:00 +C999,prepare delivery,2015-08-04 12:41:26+00:00,2015-08-04 12:37:53+00:00 +C965,send reminder,2015-08-04 13:09:39+00:00,2015-08-04 13:02:01+00:00 +C1068,send invoice,2015-08-04 13:14:29+00:00,2015-08-04 13:10:22+00:00 +C1134,place order,2015-08-04 13:59:24+00:00,2015-08-04 13:48:51+00:00 +C1006,make delivery,2015-08-04 14:42:09+00:00,2015-08-04 14:12:55+00:00 +C985,confirm payment,2015-08-04 14:30:29+00:00,2015-08-04 14:24:26+00:00 +C951,pay,2015-08-04 14:54:04+00:00,2015-08-04 14:49:23+00:00 +C1019,prepare delivery,2015-08-04 14:54:53+00:00,2015-08-04 14:51:22+00:00 +C1020,make delivery,2015-08-04 15:25:45+00:00,2015-08-04 15:12:43+00:00 +C1029,send reminder,2015-08-04 15:54:49+00:00,2015-08-04 15:16:43+00:00 +C1037,send reminder,2015-08-04 15:49:50+00:00,2015-08-04 15:36:13+00:00 +C1135,place order,2015-08-04 16:03:56+00:00,2015-08-04 15:55:49+00:00 +C993,prepare delivery,2015-08-04 16:14:01+00:00,2015-08-04 16:06:30+00:00 +C966,cancel order,2015-08-04 17:41:25+00:00,2015-08-04 17:30:00+00:00 +C954,make delivery,2015-08-04 17:59:26+00:00,2015-08-04 17:31:27+00:00 +C1136,place order,2015-08-04 18:17:03+00:00,2015-08-04 18:09:45+00:00 +C1137,place order,2015-08-04 20:12:14+00:00,2015-08-04 20:05:30+00:00 +C1138,place order,2015-08-04 22:51:08+00:00,2015-08-04 22:47:14+00:00 +C1039,pay,2015-08-05 09:24:11+00:00,2015-08-05 09:19:14+00:00 +C1139,place order,2015-08-05 09:55:03+00:00,2015-08-05 09:22:42+00:00 +C1040,send reminder,2015-08-05 09:46:43+00:00,2015-08-05 09:37:10+00:00 +C986,make delivery,2015-08-05 09:57:21+00:00,2015-08-05 09:41:53+00:00 +C1084,send invoice,2015-08-05 10:04:24+00:00,2015-08-05 09:59:41+00:00 +C1042,pay,2015-08-05 10:18:08+00:00,2015-08-05 10:12:58+00:00 +C1068,pay,2015-08-05 10:37:10+00:00,2015-08-05 10:29:51+00:00 +C1140,place order,2015-08-05 11:25:21+00:00,2015-08-05 11:03:32+00:00 +C990,cancel order,2015-08-05 11:27:54+00:00,2015-08-05 11:19:39+00:00 +C1133,send invoice,2015-08-05 11:30:05+00:00,2015-08-05 11:25:38+00:00 +C957,prepare delivery,2015-08-05 14:10:06+00:00,2015-08-05 11:39:46+00:00 +C1141,place order,2015-08-05 13:02:12+00:00,2015-08-05 12:25:11+00:00 +C1100,send invoice,2015-08-05 12:39:03+00:00,2015-08-05 12:33:27+00:00 +C1008,send reminder,2015-08-05 14:11:24+00:00,2015-08-05 13:30:52+00:00 +C1105,send invoice,2015-08-05 14:08:48+00:00,2015-08-05 14:01:35+00:00 +C1002,prepare delivery,2015-08-05 14:08:36+00:00,2015-08-05 14:04:41+00:00 +C1142,place order,2015-08-05 17:03:23+00:00,2015-08-05 14:08:29+00:00 +C1098,send invoice,2015-08-05 14:23:15+00:00,2015-08-05 14:19:21+00:00 +C903,make delivery,2015-08-05 14:49:38+00:00,2015-08-05 14:35:13+00:00 +C1010,confirm payment,2015-08-05 14:46:40+00:00,2015-08-05 14:37:33+00:00 +C958,confirm payment,2015-08-05 15:10:24+00:00,2015-08-05 15:07:20+00:00 +C1014,make delivery,2015-08-05 15:21:39+00:00,2015-08-05 15:11:25+00:00 +C941,confirm payment,2015-08-05 19:17:24+00:00,2015-08-05 15:21:00+00:00 +C1050,send reminder,2015-08-05 15:36:22+00:00,2015-08-05 15:25:25+00:00 +C1081,send invoice,2015-08-05 15:33:45+00:00,2015-08-05 15:30:00+00:00 +C1143,place order,2015-08-05 20:26:53+00:00,2015-08-05 15:35:05+00:00 +C1125,send invoice,2015-08-05 15:49:26+00:00,2015-08-05 15:40:20+00:00 +C1003,confirm payment,2015-08-05 15:51:05+00:00,2015-08-05 15:42:15+00:00 +C1001,prepare delivery,2015-08-05 16:13:18+00:00,2015-08-05 16:09:47+00:00 +C1066,send reminder,2015-08-05 16:42:48+00:00,2015-08-05 16:25:48+00:00 +C1022,make delivery,2015-08-05 17:57:24+00:00,2015-08-05 16:32:48+00:00 +C1033,prepare delivery,2015-08-05 16:42:44+00:00,2015-08-05 16:39:37+00:00 +C948,send reminder,2015-08-05 17:12:33+00:00,2015-08-05 16:56:00+00:00 +C1062,pay,2015-08-05 20:44:18+00:00,2015-08-05 17:12:02+00:00 +C1031,prepare delivery,2015-08-05 17:42:29+00:00,2015-08-05 17:17:55+00:00 +C1119,send invoice,2015-08-05 17:28:09+00:00,2015-08-05 17:22:48+00:00 +C1144,place order,2015-08-05 17:43:56+00:00,2015-08-05 17:28:18+00:00 +C1078,send invoice,2015-08-05 18:06:34+00:00,2015-08-05 17:57:58+00:00 +C986,confirm payment,2015-08-05 19:40:26+00:00,2015-08-05 19:06:09+00:00 +C1145,place order,2015-08-05 19:24:48+00:00,2015-08-05 19:14:43+00:00 +C1103,send invoice,2015-08-05 19:41:51+00:00,2015-08-05 19:36:41+00:00 +C1060,send reminder,2015-08-05 19:54:16+00:00,2015-08-05 19:37:18+00:00 +C1008,cancel order,2015-08-05 21:54:13+00:00,2015-08-05 21:37:21+00:00 +C1146,place order,2015-08-05 22:19:00+00:00,2015-08-05 22:05:40+00:00 +C1070,pay,2015-08-05 23:09:24+00:00,2015-08-05 23:03:53+00:00 +C1147,place order,2015-08-06 07:47:49+00:00,2015-08-06 07:35:12+00:00 +C947,make delivery,2015-08-06 09:05:53+00:00,2015-08-06 08:50:47+00:00 +C997,make delivery,2015-08-06 09:30:50+00:00,2015-08-06 09:02:38+00:00 +C1030,pay,2015-08-06 09:51:31+00:00,2015-08-06 09:44:46+00:00 +C954,confirm payment,2015-08-06 10:16:52+00:00,2015-08-06 10:11:16+00:00 +C998,prepare delivery,2015-08-06 10:16:40+00:00,2015-08-06 10:12:57+00:00 +C999,make delivery,2015-08-06 10:54:36+00:00,2015-08-06 10:14:51+00:00 +C1148,place order,2015-08-06 10:27:32+00:00,2015-08-06 10:20:51+00:00 +C1025,prepare delivery,2015-08-06 10:34:37+00:00,2015-08-06 10:27:14+00:00 +C1089,pay,2015-08-06 10:49:19+00:00,2015-08-06 10:43:57+00:00 +C947,confirm payment,2015-08-06 10:59:14+00:00,2015-08-06 10:48:47+00:00 +C1131,send invoice,2015-08-06 11:18:36+00:00,2015-08-06 11:12:22+00:00 +C941,make delivery,2015-08-06 11:24:11+00:00,2015-08-06 11:13:39+00:00 +C1022,confirm payment,2015-08-06 11:20:47+00:00,2015-08-06 11:14:35+00:00 +C979,prepare delivery,2015-08-06 11:19:02+00:00,2015-08-06 11:15:27+00:00 +C1020,confirm payment,2015-08-06 11:44:10+00:00,2015-08-06 11:39:08+00:00 +C1149,place order,2015-08-06 12:26:37+00:00,2015-08-06 11:59:49+00:00 +C1104,send invoice,2015-08-06 12:11:21+00:00,2015-08-06 12:03:47+00:00 +C1041,send reminder,2015-08-06 13:02:35+00:00,2015-08-06 12:44:31+00:00 +C1019,make delivery,2015-08-06 13:29:40+00:00,2015-08-06 13:03:57+00:00 +C993,make delivery,2015-08-06 13:54:19+00:00,2015-08-06 13:43:28+00:00 +C964,pay,2015-08-06 14:19:44+00:00,2015-08-06 14:14:03+00:00 +C1150,place order,2015-08-06 15:04:27+00:00,2015-08-06 14:17:45+00:00 +C1063,pay,2015-08-06 14:50:58+00:00,2015-08-06 14:47:25+00:00 +C1007,pay,2015-08-06 15:32:42+00:00,2015-08-06 15:27:27+00:00 +C1038,prepare delivery,2015-08-06 18:04:53+00:00,2015-08-06 15:28:01+00:00 +C1016,pay,2015-08-06 15:38:47+00:00,2015-08-06 15:30:21+00:00 +C944,prepare delivery,2015-08-06 15:57:03+00:00,2015-08-06 15:42:36+00:00 +C993,confirm payment,2015-08-06 15:57:06+00:00,2015-08-06 15:49:25+00:00 +C1151,place order,2015-08-06 16:17:07+00:00,2015-08-06 15:53:37+00:00 +C999,confirm payment,2015-08-06 19:53:17+00:00,2015-08-06 15:58:43+00:00 +C1021,prepare delivery,2015-08-06 16:49:06+00:00,2015-08-06 16:40:22+00:00 +C1037,pay,2015-08-06 16:50:58+00:00,2015-08-06 16:46:38+00:00 +C989,send reminder,2015-08-06 17:27:36+00:00,2015-08-06 17:03:38+00:00 +C1149,send invoice,2015-08-06 17:14:41+00:00,2015-08-06 17:12:31+00:00 +C957,make delivery,2015-08-06 18:16:41+00:00,2015-08-06 18:01:25+00:00 +C1152,place order,2015-08-06 18:18:56+00:00,2015-08-06 18:05:22+00:00 +C1109,send invoice,2015-08-06 18:11:50+00:00,2015-08-06 18:05:52+00:00 +C1102,send invoice,2015-08-06 18:26:07+00:00,2015-08-06 18:23:58+00:00 +C1089,send invoice,2015-08-06 18:55:25+00:00,2015-08-06 18:51:17+00:00 +C949,pay,2015-08-06 18:59:18+00:00,2015-08-06 18:55:18+00:00 +C1153,place order,2015-08-06 19:57:25+00:00,2015-08-06 19:52:20+00:00 +C1154,place order,2015-08-07 04:12:46+00:00,2015-08-06 23:20:54+00:00 +C1052,pay,2015-08-07 07:11:34+00:00,2015-08-07 07:05:58+00:00 +C1155,place order,2015-08-07 09:27:30+00:00,2015-08-07 09:13:20+00:00 +C1033,confirm payment,2015-08-07 10:46:32+00:00,2015-08-07 10:38:50+00:00 +C957,confirm payment,2015-08-07 10:48:03+00:00,2015-08-07 10:42:26+00:00 +C1156,place order,2015-08-07 10:54:23+00:00,2015-08-07 10:44:47+00:00 +C1129,send invoice,2015-08-07 11:24:03+00:00,2015-08-07 10:54:03+00:00 +C1061,pay,2015-08-07 11:19:56+00:00,2015-08-07 11:15:30+00:00 +C1079,pay,2015-08-07 11:33:21+00:00,2015-08-07 11:28:48+00:00 +C1058,prepare delivery,2015-08-07 11:34:02+00:00,2015-08-07 11:30:26+00:00 +C1012,prepare delivery,2015-08-07 11:34:01+00:00,2015-08-07 11:31:05+00:00 +C1127,send invoice,2015-08-07 11:37:43+00:00,2015-08-07 11:31:28+00:00 +C1065,pay,2015-08-07 11:42:04+00:00,2015-08-07 11:35:02+00:00 +C1106,send invoice,2015-08-07 11:58:36+00:00,2015-08-07 11:52:18+00:00 +C1112,send invoice,2015-08-07 12:11:55+00:00,2015-08-07 12:08:17+00:00 +C1002,make delivery,2015-08-07 12:39:45+00:00,2015-08-07 12:23:16+00:00 +C1157,place order,2015-08-07 12:53:49+00:00,2015-08-07 12:47:41+00:00 +C1138,send invoice,2015-08-07 13:21:39+00:00,2015-08-07 13:15:44+00:00 +C1033,make delivery,2015-08-07 14:17:51+00:00,2015-08-07 14:03:36+00:00 +C1014,confirm payment,2015-08-07 14:39:46+00:00,2015-08-07 14:34:13+00:00 +C1031,make delivery,2015-08-07 14:52:26+00:00,2015-08-07 14:35:38+00:00 +C1158,place order,2015-08-07 15:05:22+00:00,2015-08-07 14:53:29+00:00 +C1001,make delivery,2015-08-07 15:41:55+00:00,2015-08-07 15:12:56+00:00 +C903,confirm payment,2015-08-07 15:31:17+00:00,2015-08-07 15:26:03+00:00 +C1143,send invoice,2015-08-07 15:33:50+00:00,2015-08-07 15:29:33+00:00 +C1056,pay,2015-08-07 15:50:35+00:00,2015-08-07 15:43:56+00:00 +C997,confirm payment,2015-08-07 16:11:10+00:00,2015-08-07 16:08:40+00:00 +C1045,prepare delivery,2015-08-07 16:43:55+00:00,2015-08-07 16:36:25+00:00 +C1159,place order,2015-08-07 17:24:12+00:00,2015-08-07 17:05:05+00:00 +C1102,pay,2015-08-07 17:17:05+00:00,2015-08-07 17:12:33+00:00 +C1132,send invoice,2015-08-07 18:27:48+00:00,2015-08-07 18:25:30+00:00 +C1160,place order,2015-08-07 21:42:23+00:00,2015-08-07 18:28:18+00:00 +C965,pay,2015-08-07 18:50:08+00:00,2015-08-07 18:44:00+00:00 +C1161,place order,2015-08-07 21:06:40+00:00,2015-08-07 21:01:08+00:00 +C1025,make delivery,2015-08-07 22:15:43+00:00,2015-08-07 21:50:20+00:00 +C979,make delivery,2015-08-07 22:12:04+00:00,2015-08-07 22:00:44+00:00 +C998,make delivery,2015-08-07 22:14:14+00:00,2015-08-07 22:01:57+00:00 +C922,prepare delivery,2015-08-07 22:35:51+00:00,2015-08-07 22:32:04+00:00 +C1162,place order,2015-08-08 09:55:33+00:00,2015-08-08 09:50:00+00:00 +C1163,place order,2015-08-09 10:27:21+00:00,2015-08-09 10:17:12+00:00 +C1164,place order,2015-08-10 02:39:41+00:00,2015-08-10 02:29:36+00:00 +C1075,pay,2015-08-10 03:50:16+00:00,2015-08-10 03:43:12+00:00 +C1139,send invoice,2015-08-10 08:35:53+00:00,2015-08-10 08:32:50+00:00 +C979,confirm payment,2015-08-10 08:42:24+00:00,2015-08-10 08:33:56+00:00 +C1026,pay,2015-08-10 09:36:06+00:00,2015-08-10 09:30:50+00:00 +C1165,place order,2015-08-10 10:04:07+00:00,2015-08-10 09:44:41+00:00 +C1086,pay,2015-08-10 10:06:48+00:00,2015-08-10 10:03:05+00:00 +C1036,send reminder,2015-08-10 10:54:55+00:00,2015-08-10 10:34:51+00:00 +C1120,send invoice,2015-08-10 10:42:55+00:00,2015-08-10 10:37:16+00:00 +C1137,send invoice,2015-08-10 10:44:26+00:00,2015-08-10 10:38:39+00:00 +C944,confirm payment,2015-08-10 11:13:28+00:00,2015-08-10 10:38:43+00:00 +C1042,prepare delivery,2015-08-10 10:46:29+00:00,2015-08-10 10:39:30+00:00 +C991,cancel order,2015-08-10 10:57:48+00:00,2015-08-10 10:50:11+00:00 +C977,pay,2015-08-10 11:03:59+00:00,2015-08-10 11:01:41+00:00 +C948,cancel order,2015-08-10 11:42:41+00:00,2015-08-10 11:35:25+00:00 +C1116,send invoice,2015-08-10 11:42:29+00:00,2015-08-10 11:36:55+00:00 +C1025,confirm payment,2015-08-10 11:47:45+00:00,2015-08-10 11:41:30+00:00 +C1166,place order,2015-08-10 14:20:00+00:00,2015-08-10 11:47:30+00:00 +C1160,send invoice,2015-08-10 11:55:43+00:00,2015-08-10 11:49:43+00:00 +C1066,pay,2015-08-10 12:10:52+00:00,2015-08-10 12:07:03+00:00 +C1018,pay,2015-08-10 12:11:57+00:00,2015-08-10 12:08:55+00:00 +C1090,pay,2015-08-10 13:36:01+00:00,2015-08-10 13:22:18+00:00 +C1083,pay,2015-08-10 13:33:04+00:00,2015-08-10 13:28:42+00:00 +C1167,place order,2015-08-10 14:14:49+00:00,2015-08-10 13:53:07+00:00 +C944,make delivery,2015-08-10 14:39:50+00:00,2015-08-10 14:30:36+00:00 +C1115,send invoice,2015-08-10 14:49:27+00:00,2015-08-10 14:40:16+00:00 +C1077,pay,2015-08-10 15:27:37+00:00,2015-08-10 14:58:38+00:00 +C1044,pay,2015-08-10 15:25:32+00:00,2015-08-10 15:18:23+00:00 +C1038,make delivery,2015-08-10 15:39:22+00:00,2015-08-10 15:24:49+00:00 +C1019,confirm payment,2015-08-10 15:43:47+00:00,2015-08-10 15:37:05+00:00 +C1002,confirm payment,2015-08-10 16:00:07+00:00,2015-08-10 15:51:22+00:00 +C1168,place order,2015-08-10 16:26:35+00:00,2015-08-10 16:04:21+00:00 +C1111,send invoice,2015-08-10 16:58:22+00:00,2015-08-10 16:42:36+00:00 +C1104,pay,2015-08-10 17:04:32+00:00,2015-08-10 16:58:37+00:00 +C1017,prepare delivery,2015-08-10 17:06:28+00:00,2015-08-10 16:58:56+00:00 +C1169,place order,2015-08-10 17:48:30+00:00,2015-08-10 17:26:49+00:00 +C1059,prepare delivery,2015-08-10 17:37:30+00:00,2015-08-10 17:29:30+00:00 +C1012,confirm payment,2015-08-10 17:45:39+00:00,2015-08-10 17:39:05+00:00 +C1170,place order,2015-08-10 19:19:46+00:00,2015-08-10 19:11:45+00:00 +C1113,send invoice,2015-08-10 19:44:43+00:00,2015-08-10 19:26:31+00:00 +C1058,make delivery,2015-08-10 20:22:45+00:00,2015-08-10 20:11:49+00:00 +C1110,send invoice,2015-08-10 20:20:59+00:00,2015-08-10 20:17:04+00:00 +C1064,send reminder,2015-08-10 21:45:15+00:00,2015-08-10 21:31:06+00:00 +C1171,place order,2015-08-10 22:14:04+00:00,2015-08-10 21:59:45+00:00 +C1172,place order,2015-08-11 08:05:32+00:00,2015-08-11 07:59:42+00:00 +C1072,send reminder,2015-08-11 09:30:03+00:00,2015-08-11 09:12:12+00:00 +C1031,confirm payment,2015-08-11 09:26:35+00:00,2015-08-11 09:19:23+00:00 +C1035,send reminder,2015-08-11 09:57:36+00:00,2015-08-11 09:38:05+00:00 +C1021,make delivery,2015-08-11 10:29:41+00:00,2015-08-11 10:00:34+00:00 +C1084,pay,2015-08-11 10:46:34+00:00,2015-08-11 10:43:48+00:00 +C1173,place order,2015-08-11 10:54:37+00:00,2015-08-11 10:47:47+00:00 +C1047,send reminder,2015-08-11 11:28:44+00:00,2015-08-11 10:47:50+00:00 +C1027,prepare delivery,2015-08-11 10:54:23+00:00,2015-08-11 10:50:30+00:00 +C1001,confirm payment,2015-08-11 11:28:25+00:00,2015-08-11 10:56:51+00:00 +C987,send reminder,2015-08-11 11:16:26+00:00,2015-08-11 11:04:02+00:00 +C1054,prepare delivery,2015-08-11 11:21:15+00:00,2015-08-11 11:13:43+00:00 +C1073,send reminder,2015-08-11 11:34:52+00:00,2015-08-11 11:16:29+00:00 +C1140,send invoice,2015-08-11 12:36:12+00:00,2015-08-11 12:08:27+00:00 +C1174,place order,2015-08-11 12:58:49+00:00,2015-08-11 12:53:42+00:00 +C1136,send invoice,2015-08-11 14:10:26+00:00,2015-08-11 14:05:19+00:00 +C1046,prepare delivery,2015-08-11 14:33:53+00:00,2015-08-11 14:27:56+00:00 +C1088,pay,2015-08-11 15:05:24+00:00,2015-08-11 14:52:19+00:00 +C1175,place order,2015-08-11 19:08:05+00:00,2015-08-11 15:05:31+00:00 +C1012,make delivery,2015-08-11 16:47:24+00:00,2015-08-11 15:09:44+00:00 +C1058,confirm payment,2015-08-11 15:22:37+00:00,2015-08-11 15:11:47+00:00 +C998,confirm payment,2015-08-11 15:37:35+00:00,2015-08-11 15:31:58+00:00 +C1118,send invoice,2015-08-11 15:43:43+00:00,2015-08-11 15:37:24+00:00 +C1045,make delivery,2015-08-11 16:07:06+00:00,2015-08-11 15:42:52+00:00 +C1082,send reminder,2015-08-11 16:34:49+00:00,2015-08-11 15:52:36+00:00 +C1128,send invoice,2015-08-11 16:20:42+00:00,2015-08-11 16:15:57+00:00 +C1176,place order,2015-08-11 16:39:38+00:00,2015-08-11 16:29:09+00:00 +C1051,send reminder,2015-08-11 16:56:17+00:00,2015-08-11 16:37:19+00:00 +C1080,send reminder,2015-08-11 16:58:07+00:00,2015-08-11 16:50:26+00:00 +C945,pay,2015-08-11 16:57:40+00:00,2015-08-11 16:51:19+00:00 +C1042,confirm payment,2015-08-11 17:03:35+00:00,2015-08-11 16:59:36+00:00 +C1067,send reminder,2015-08-11 17:14:51+00:00,2015-08-11 17:03:01+00:00 +C922,make delivery,2015-08-11 17:48:15+00:00,2015-08-11 17:18:29+00:00 +C964,prepare delivery,2015-08-11 17:46:48+00:00,2015-08-11 17:43:52+00:00 +C1177,place order,2015-08-11 18:23:29+00:00,2015-08-11 18:16:25+00:00 +C1178,place order,2015-08-11 20:32:35+00:00,2015-08-11 20:25:30+00:00 +C1179,place order,2015-08-11 23:37:21+00:00,2015-08-11 23:34:12+00:00 +C1180,place order,2015-08-12 09:41:24+00:00,2015-08-12 09:29:17+00:00 +C1076,pay,2015-08-12 09:45:33+00:00,2015-08-12 09:38:58+00:00 +C1108,send invoice,2015-08-12 10:00:05+00:00,2015-08-12 09:43:48+00:00 +C1081,pay,2015-08-12 10:22:40+00:00,2015-08-12 10:16:46+00:00 +C1042,make delivery,2015-08-12 10:45:31+00:00,2015-08-12 10:22:25+00:00 +C989,cancel order,2015-08-12 11:00:33+00:00,2015-08-12 10:44:53+00:00 +C1089,prepare delivery,2015-08-12 11:02:53+00:00,2015-08-12 10:53:43+00:00 +C1091,send reminder,2015-08-12 11:38:06+00:00,2015-08-12 11:04:54+00:00 +C1021,confirm payment,2015-08-12 11:14:38+00:00,2015-08-12 11:05:24+00:00 +C1038,confirm payment,2015-08-12 11:15:18+00:00,2015-08-12 11:08:29+00:00 +C1181,place order,2015-08-12 11:24:03+00:00,2015-08-12 11:16:41+00:00 +C1000,prepare delivery,2015-08-12 11:43:27+00:00,2015-08-12 11:39:54+00:00 +C1102,prepare delivery,2015-08-12 11:49:11+00:00,2015-08-12 11:45:27+00:00 +C1016,prepare delivery,2015-08-12 11:55:40+00:00,2015-08-12 11:52:04+00:00 +C1134,send invoice,2015-08-12 12:11:36+00:00,2015-08-12 12:08:53+00:00 +C1052,prepare delivery,2015-08-12 12:22:58+00:00,2015-08-12 12:15:08+00:00 +C1121,send invoice,2015-08-12 12:20:53+00:00,2015-08-12 12:17:03+00:00 +C1164,send invoice,2015-08-12 12:25:00+00:00,2015-08-12 12:17:56+00:00 +C1182,place order,2015-08-12 12:57:07+00:00,2015-08-12 12:51:29+00:00 +C1169,send invoice,2015-08-12 14:10:19+00:00,2015-08-12 14:06:56+00:00 +C1183,place order,2015-08-12 15:03:56+00:00,2015-08-12 15:01:05+00:00 +C987,cancel order,2015-08-12 15:41:41+00:00,2015-08-12 15:33:23+00:00 +C1032,send reminder,2015-08-12 16:19:58+00:00,2015-08-12 15:53:57+00:00 +C1142,send invoice,2015-08-12 16:14:12+00:00,2015-08-12 15:56:43+00:00 +C1017,make delivery,2015-08-12 16:18:43+00:00,2015-08-12 16:04:19+00:00 +C1184,place order,2015-08-12 16:26:36+00:00,2015-08-12 16:20:17+00:00 +C1144,send invoice,2015-08-12 16:30:56+00:00,2015-08-12 16:24:58+00:00 +C1059,make delivery,2015-08-12 18:41:22+00:00,2015-08-12 17:06:08+00:00 +C1109,pay,2015-08-12 17:21:02+00:00,2015-08-12 17:07:38+00:00 +C951,prepare delivery,2015-08-12 17:58:36+00:00,2015-08-12 17:31:47+00:00 +C1185,place order,2015-08-12 18:03:56+00:00,2015-08-12 17:58:42+00:00 +C1027,make delivery,2015-08-12 19:08:34+00:00,2015-08-12 18:39:05+00:00 +C922,confirm payment,2015-08-12 20:22:32+00:00,2015-08-12 20:08:26+00:00 +C1186,place order,2015-08-12 20:42:55+00:00,2015-08-12 20:32:20+00:00 +C1187,place order,2015-08-13 00:43:56+00:00,2015-08-13 00:15:12+00:00 +C1124,send invoice,2015-08-13 09:03:12+00:00,2015-08-13 08:56:41+00:00 +C1163,send invoice,2015-08-13 09:04:54+00:00,2015-08-13 08:56:58+00:00 +C1188,place order,2015-08-13 09:22:55+00:00,2015-08-13 09:16:51+00:00 +C1037,prepare delivery,2015-08-13 09:25:23+00:00,2015-08-13 09:18:22+00:00 +C1030,prepare delivery,2015-08-13 10:06:57+00:00,2015-08-13 09:59:14+00:00 +C1122,send invoice,2015-08-13 10:07:55+00:00,2015-08-13 10:00:19+00:00 +C1147,send invoice,2015-08-13 10:23:21+00:00,2015-08-13 10:07:23+00:00 +C1054,confirm payment,2015-08-13 10:11:44+00:00,2015-08-13 10:08:05+00:00 +C1145,send invoice,2015-08-13 10:39:08+00:00,2015-08-13 10:35:19+00:00 +C1189,place order,2015-08-13 11:06:00+00:00,2015-08-13 10:51:49+00:00 +C1055,prepare delivery,2015-08-13 11:13:36+00:00,2015-08-13 11:06:05+00:00 +C1108,pay,2015-08-13 12:37:14+00:00,2015-08-13 12:05:49+00:00 +C1062,prepare delivery,2015-08-13 12:26:43+00:00,2015-08-13 12:17:24+00:00 +C1023,prepare delivery,2015-08-13 12:35:49+00:00,2015-08-13 12:31:56+00:00 +C1190,place order,2015-08-13 13:39:19+00:00,2015-08-13 13:01:45+00:00 +C1045,confirm payment,2015-08-13 13:18:34+00:00,2015-08-13 13:11:49+00:00 +C964,confirm payment,2015-08-13 13:34:33+00:00,2015-08-13 13:29:48+00:00 +C1151,send invoice,2015-08-13 13:49:12+00:00,2015-08-13 13:44:28+00:00 +C1100,pay,2015-08-13 13:59:31+00:00,2015-08-13 13:54:23+00:00 +C1096,send reminder,2015-08-13 14:24:51+00:00,2015-08-13 14:03:13+00:00 +C1161,send invoice,2015-08-13 14:18:55+00:00,2015-08-13 14:11:49+00:00 +C1191,place order,2015-08-13 14:29:39+00:00,2015-08-13 14:21:37+00:00 +C1097,send reminder,2015-08-13 14:43:04+00:00,2015-08-13 14:32:48+00:00 +C1046,make delivery,2015-08-13 16:01:13+00:00,2015-08-13 14:33:12+00:00 +C1054,make delivery,2015-08-13 14:46:06+00:00,2015-08-13 14:36:52+00:00 +C1152,send invoice,2015-08-13 15:03:17+00:00,2015-08-13 14:58:51+00:00 +C1123,send invoice,2015-08-13 15:34:54+00:00,2015-08-13 15:26:09+00:00 +C1085,send reminder,2015-08-13 15:43:06+00:00,2015-08-13 15:36:11+00:00 +C1049,prepare delivery,2015-08-13 15:41:56+00:00,2015-08-13 15:37:57+00:00 +C1192,place order,2015-08-13 16:03:33+00:00,2015-08-13 16:01:21+00:00 +C1039,prepare delivery,2015-08-13 16:17:03+00:00,2015-08-13 16:13:17+00:00 +C1092,pay,2015-08-13 16:33:34+00:00,2015-08-13 16:27:00+00:00 +C1170,send invoice,2015-08-13 16:51:26+00:00,2015-08-13 16:45:56+00:00 +C1089,make delivery,2015-08-13 17:25:47+00:00,2015-08-13 17:15:17+00:00 +C1193,place order,2015-08-13 22:16:49+00:00,2015-08-13 17:20:50+00:00 +C964,make delivery,2015-08-13 17:51:38+00:00,2015-08-13 17:36:21+00:00 +C1028,prepare delivery,2015-08-13 17:58:10+00:00,2015-08-13 17:49:42+00:00 +C1009,send reminder,2015-08-13 18:13:21+00:00,2015-08-13 17:54:50+00:00 +C1000,confirm payment,2015-08-13 18:06:52+00:00,2015-08-13 17:59:27+00:00 +C1046,confirm payment,2015-08-13 18:07:40+00:00,2015-08-13 18:00:14+00:00 +C1194,place order,2015-08-13 19:17:19+00:00,2015-08-13 18:59:47+00:00 +C1195,place order,2015-08-13 22:52:36+00:00,2015-08-13 22:35:35+00:00 +C1196,place order,2015-08-14 09:46:43+00:00,2015-08-14 08:59:25+00:00 +C1056,prepare delivery,2015-08-14 09:45:17+00:00,2015-08-14 09:39:14+00:00 +C1000,make delivery,2015-08-14 09:52:53+00:00,2015-08-14 09:43:18+00:00 +C1052,make delivery,2015-08-14 10:19:37+00:00,2015-08-14 10:05:51+00:00 +C1017,confirm payment,2015-08-14 11:43:07+00:00,2015-08-14 11:04:54+00:00 +C1059,confirm payment,2015-08-14 11:20:27+00:00,2015-08-14 11:14:47+00:00 +C1197,place order,2015-08-14 15:49:28+00:00,2015-08-14 11:17:14+00:00 +C1082,pay,2015-08-14 11:24:37+00:00,2015-08-14 11:20:24+00:00 +C1035,pay,2015-08-14 11:29:34+00:00,2015-08-14 11:27:00+00:00 +C1015,prepare delivery,2015-08-14 11:36:44+00:00,2015-08-14 11:29:16+00:00 +C1075,prepare delivery,2015-08-14 12:13:45+00:00,2015-08-14 12:07:04+00:00 +C1102,make delivery,2015-08-14 12:59:26+00:00,2015-08-14 12:33:51+00:00 +C1103,pay,2015-08-14 12:51:56+00:00,2015-08-14 12:47:03+00:00 +C1073,pay,2015-08-14 13:03:16+00:00,2015-08-14 12:48:52+00:00 +C1198,place order,2015-08-14 12:58:59+00:00,2015-08-14 12:52:36+00:00 +C1135,pay,2015-08-14 13:14:57+00:00,2015-08-14 13:11:06+00:00 +C1016,make delivery,2015-08-14 14:27:05+00:00,2015-08-14 13:52:29+00:00 +C1043,prepare delivery,2015-08-14 13:56:42+00:00,2015-08-14 13:52:49+00:00 +C1117,send invoice,2015-08-14 14:13:28+00:00,2015-08-14 14:10:03+00:00 +C1181,send invoice,2015-08-14 14:41:00+00:00,2015-08-14 14:36:38+00:00 +C1199,place order,2015-08-14 15:07:09+00:00,2015-08-14 15:03:19+00:00 +C1089,confirm payment,2015-08-14 15:21:00+00:00,2015-08-14 15:17:02+00:00 +C1065,prepare delivery,2015-08-14 15:31:43+00:00,2015-08-14 15:25:24+00:00 +C1126,send invoice,2015-08-14 15:55:36+00:00,2015-08-14 15:48:49+00:00 +C1095,send reminder,2015-08-14 16:37:54+00:00,2015-08-14 16:13:21+00:00 +C1200,place order,2015-08-14 16:59:58+00:00,2015-08-14 16:24:45+00:00 +C1013,send reminder,2015-08-14 17:10:12+00:00,2015-08-14 16:52:29+00:00 +C1093,send reminder,2015-08-14 17:14:15+00:00,2015-08-14 16:54:49+00:00 +C1071,send reminder,2015-08-14 17:27:41+00:00,2015-08-14 17:13:13+00:00 +C1007,prepare delivery,2015-08-14 17:17:08+00:00,2015-08-14 17:13:57+00:00 +C1074,send reminder,2015-08-14 17:23:31+00:00,2015-08-14 17:16:21+00:00 +C1101,send reminder,2015-08-14 17:30:55+00:00,2015-08-14 17:16:25+00:00 +C1125,pay,2015-08-14 17:26:15+00:00,2015-08-14 17:21:13+00:00 +C1201,place order,2015-08-14 21:43:41+00:00,2015-08-14 18:07:37+00:00 +C1068,prepare delivery,2015-08-14 20:58:57+00:00,2015-08-14 18:24:35+00:00 +C1157,send invoice,2015-08-14 19:27:05+00:00,2015-08-14 19:18:28+00:00 +C1027,confirm payment,2015-08-14 19:46:55+00:00,2015-08-14 19:41:32+00:00 +C1202,place order,2015-08-14 20:09:52+00:00,2015-08-14 19:59:06+00:00 +C1062,make delivery,2015-08-14 22:11:17+00:00,2015-08-14 21:44:10+00:00 +C1203,place order,2015-08-15 03:52:54+00:00,2015-08-14 23:34:26+00:00 +C1131,pay,2015-08-14 23:50:08+00:00,2015-08-14 23:44:08+00:00 +C1204,place order,2015-08-15 22:48:37+00:00,2015-08-15 22:09:42+00:00 +C1205,place order,2015-08-16 21:48:19+00:00,2015-08-16 21:33:49+00:00 +C951,make delivery,2015-08-17 10:04:59+00:00,2015-08-17 08:43:11+00:00 +C1206,place order,2015-08-17 09:35:03+00:00,2015-08-17 09:24:14+00:00 +C1016,confirm payment,2015-08-17 09:46:59+00:00,2015-08-17 09:43:33+00:00 +C1055,make delivery,2015-08-17 11:03:06+00:00,2015-08-17 10:39:13+00:00 +C1150,send invoice,2015-08-17 10:55:41+00:00,2015-08-17 10:50:28+00:00 +C1207,place order,2015-08-17 11:14:44+00:00,2015-08-17 11:06:35+00:00 +C1087,send reminder,2015-08-17 11:34:10+00:00,2015-08-17 11:24:52+00:00 +C1155,send invoice,2015-08-17 11:42:55+00:00,2015-08-17 11:36:57+00:00 +C1037,make delivery,2015-08-17 13:08:56+00:00,2015-08-17 11:49:53+00:00 +C1023,make delivery,2015-08-17 12:39:22+00:00,2015-08-17 12:11:30+00:00 +C1037,confirm payment,2015-08-17 12:40:36+00:00,2015-08-17 12:15:27+00:00 +C1208,place order,2015-08-17 12:38:11+00:00,2015-08-17 12:31:17+00:00 +C1039,make delivery,2015-08-17 13:51:53+00:00,2015-08-17 13:42:04+00:00 +C1209,place order,2015-08-17 14:33:26+00:00,2015-08-17 14:20:42+00:00 +C1030,make delivery,2015-08-17 15:00:15+00:00,2015-08-17 14:34:03+00:00 +C1091,pay,2015-08-17 14:48:51+00:00,2015-08-17 14:37:28+00:00 +C1100,prepare delivery,2015-08-17 15:10:46+00:00,2015-08-17 15:01:27+00:00 +C1069,send reminder,2015-08-17 16:09:16+00:00,2015-08-17 15:32:40+00:00 +C1049,make delivery,2015-08-17 17:10:26+00:00,2015-08-17 15:46:07+00:00 +C1013,cancel order,2015-08-17 16:18:40+00:00,2015-08-17 15:57:13+00:00 +C1210,place order,2015-08-17 18:07:30+00:00,2015-08-17 15:59:31+00:00 +C1032,pay,2015-08-17 16:18:57+00:00,2015-08-17 16:12:54+00:00 +C1118,pay,2015-08-17 16:51:30+00:00,2015-08-17 16:42:22+00:00 +C1086,prepare delivery,2015-08-17 16:55:43+00:00,2015-08-17 16:51:44+00:00 +C1149,pay,2015-08-17 17:01:50+00:00,2015-08-17 16:59:31+00:00 +C1159,send invoice,2015-08-17 19:22:10+00:00,2015-08-17 17:04:58+00:00 +C1183,send invoice,2015-08-17 17:21:41+00:00,2015-08-17 17:12:20+00:00 +C1049,confirm payment,2015-08-17 17:21:32+00:00,2015-08-17 17:17:57+00:00 +C1056,make delivery,2015-08-17 19:02:00+00:00,2015-08-17 17:36:35+00:00 +C1102,confirm payment,2015-08-17 17:56:14+00:00,2015-08-17 17:48:16+00:00 +C1034,prepare delivery,2015-08-17 18:20:12+00:00,2015-08-17 18:16:25+00:00 +C1211,place order,2015-08-17 18:22:43+00:00,2015-08-17 18:17:09+00:00 +C1030,confirm payment,2015-08-17 18:42:09+00:00,2015-08-17 18:35:48+00:00 +C1180,send invoice,2015-08-17 19:46:41+00:00,2015-08-17 19:24:48+00:00 +C1107,pay,2015-08-17 19:33:01+00:00,2015-08-17 19:26:40+00:00 +C1212,place order,2015-08-17 20:32:47+00:00,2015-08-17 20:27:41+00:00 +C1015,make delivery,2015-08-17 20:44:44+00:00,2015-08-17 20:33:59+00:00 +C1213,place order,2015-08-17 23:52:12+00:00,2015-08-17 23:47:19+00:00 +C1141,send invoice,2015-08-18 08:41:24+00:00,2015-08-18 08:35:43+00:00 +C1043,confirm payment,2015-08-18 09:58:58+00:00,2015-08-18 09:43:23+00:00 +C1214,place order,2015-08-18 14:38:56+00:00,2015-08-18 09:45:01+00:00 +C1043,make delivery,2015-08-18 10:21:59+00:00,2015-08-18 09:54:59+00:00 +C1065,confirm payment,2015-08-18 10:39:00+00:00,2015-08-18 10:28:37+00:00 +C1130,send invoice,2015-08-18 10:43:00+00:00,2015-08-18 10:36:29+00:00 +C1129,pay,2015-08-18 10:48:06+00:00,2015-08-18 10:43:44+00:00 +C1083,prepare delivery,2015-08-18 10:48:09+00:00,2015-08-18 10:44:20+00:00 +C1153,send invoice,2015-08-18 10:53:42+00:00,2015-08-18 10:49:50+00:00 +C1065,make delivery,2015-08-18 12:14:19+00:00,2015-08-18 10:53:39+00:00 +C1094,send reminder,2015-08-18 11:17:48+00:00,2015-08-18 11:01:16+00:00 +C1099,send reminder,2015-08-18 11:24:09+00:00,2015-08-18 11:02:07+00:00 +C1147,pay,2015-08-18 11:25:20+00:00,2015-08-18 11:22:55+00:00 +C1194,send invoice,2015-08-18 11:31:29+00:00,2015-08-18 11:26:18+00:00 +C1028,make delivery,2015-08-18 11:42:37+00:00,2015-08-18 11:26:49+00:00 +C1177,send invoice,2015-08-18 11:32:57+00:00,2015-08-18 11:27:27+00:00 +C1215,place order,2015-08-18 14:04:20+00:00,2015-08-18 11:48:09+00:00 +C1189,send invoice,2015-08-18 12:02:53+00:00,2015-08-18 11:59:10+00:00 +C1188,send invoice,2015-08-18 12:56:39+00:00,2015-08-18 12:51:45+00:00 +C1029,send reminder,2015-08-18 13:11:27+00:00,2015-08-18 12:59:35+00:00 +C1048,send reminder,2015-08-18 13:21:06+00:00,2015-08-18 13:14:20+00:00 +C1052,confirm payment,2015-08-18 13:36:20+00:00,2015-08-18 13:28:46+00:00 +C1053,send reminder,2015-08-18 14:18:51+00:00,2015-08-18 13:34:53+00:00 +C1206,send invoice,2015-08-18 13:47:39+00:00,2015-08-18 13:39:56+00:00 +C1057,prepare delivery,2015-08-18 16:18:13+00:00,2015-08-18 13:46:51+00:00 +C1216,place order,2015-08-18 14:02:54+00:00,2015-08-18 13:54:25+00:00 +C1090,prepare delivery,2015-08-18 14:01:02+00:00,2015-08-18 13:58:08+00:00 +C951,confirm payment,2015-08-18 14:31:34+00:00,2015-08-18 14:26:55+00:00 +C1208,send invoice,2015-08-18 17:34:07+00:00,2015-08-18 14:46:23+00:00 +C1075,make delivery,2015-08-18 15:06:23+00:00,2015-08-18 14:55:05+00:00 +C1182,send invoice,2015-08-18 15:15:05+00:00,2015-08-18 15:09:20+00:00 +C1070,prepare delivery,2015-08-18 15:27:00+00:00,2015-08-18 15:19:43+00:00 +C1154,send invoice,2015-08-18 15:30:57+00:00,2015-08-18 15:26:46+00:00 +C1097,pay,2015-08-18 15:35:44+00:00,2015-08-18 15:27:43+00:00 +C1191,send invoice,2015-08-18 15:38:24+00:00,2015-08-18 15:31:06+00:00 +C1116,pay,2015-08-18 15:50:19+00:00,2015-08-18 15:44:47+00:00 +C1217,place order,2015-08-18 16:13:58+00:00,2015-08-18 16:06:57+00:00 +C1079,prepare delivery,2015-08-18 16:21:13+00:00,2015-08-18 16:17:21+00:00 +C1068,make delivery,2015-08-18 16:46:55+00:00,2015-08-18 16:30:03+00:00 +C1140,pay,2015-08-18 16:35:27+00:00,2015-08-18 16:32:03+00:00 +C1026,prepare delivery,2015-08-18 16:51:59+00:00,2015-08-18 16:44:15+00:00 +C1168,send invoice,2015-08-18 16:51:23+00:00,2015-08-18 16:44:50+00:00 +C1148,send invoice,2015-08-18 16:54:02+00:00,2015-08-18 16:48:19+00:00 +C1063,prepare delivery,2015-08-18 16:56:11+00:00,2015-08-18 16:49:49+00:00 +C1084,prepare delivery,2015-08-18 17:10:41+00:00,2015-08-18 17:02:52+00:00 +C1218,place order,2015-08-18 17:37:05+00:00,2015-08-18 17:32:02+00:00 +C1104,prepare delivery,2015-08-18 17:37:40+00:00,2015-08-18 17:34:44+00:00 +C1023,confirm payment,2015-08-18 18:02:51+00:00,2015-08-18 17:59:52+00:00 +C1151,pay,2015-08-18 18:51:02+00:00,2015-08-18 18:44:51+00:00 +C1055,confirm payment,2015-08-18 22:56:25+00:00,2015-08-18 19:00:44+00:00 +C1075,confirm payment,2015-08-18 19:34:59+00:00,2015-08-18 19:04:59+00:00 +C1076,prepare delivery,2015-08-18 19:24:34+00:00,2015-08-18 19:16:45+00:00 +C1219,place order,2015-08-18 19:28:02+00:00,2015-08-18 19:22:11+00:00 +C1146,pay,2015-08-19 00:55:52+00:00,2015-08-18 21:06:03+00:00 +C1209,send invoice,2015-08-18 21:43:31+00:00,2015-08-18 21:38:53+00:00 +C1220,place order,2015-08-18 22:30:45+00:00,2015-08-18 22:20:36+00:00 +C1007,make delivery,2015-08-19 09:58:30+00:00,2015-08-19 08:27:43+00:00 +C1221,place order,2015-08-19 08:40:53+00:00,2015-08-19 08:29:27+00:00 +C1175,send invoice,2015-08-19 09:28:47+00:00,2015-08-19 09:25:08+00:00 +C1125,prepare delivery,2015-08-19 09:33:43+00:00,2015-08-19 09:30:09+00:00 +C1098,send reminder,2015-08-19 10:42:24+00:00,2015-08-19 10:27:52+00:00 +C1222,place order,2015-08-19 10:45:31+00:00,2015-08-19 10:32:17+00:00 +C1100,confirm payment,2015-08-19 10:42:03+00:00,2015-08-19 10:33:24+00:00 +C1040,send reminder,2015-08-19 10:50:05+00:00,2015-08-19 10:34:02+00:00 +C1122,pay,2015-08-19 10:42:14+00:00,2015-08-19 10:37:25+00:00 +C1062,confirm payment,2015-08-19 11:02:24+00:00,2015-08-19 10:46:02+00:00 +C1176,send invoice,2015-08-19 12:00:05+00:00,2015-08-19 11:54:02+00:00 +C1119,send reminder,2015-08-19 12:26:51+00:00,2015-08-19 12:01:49+00:00 +C1086,make delivery,2015-08-19 13:22:40+00:00,2015-08-19 12:04:01+00:00 +C1223,place order,2015-08-19 12:36:31+00:00,2015-08-19 12:22:42+00:00 +C1111,pay,2015-08-19 12:29:22+00:00,2015-08-19 12:23:53+00:00 +C1146,send invoice,2015-08-19 12:53:42+00:00,2015-08-19 12:45:30+00:00 +C1204,send invoice,2015-08-19 13:21:49+00:00,2015-08-19 13:17:45+00:00 +C1028,confirm payment,2015-08-19 13:47:33+00:00,2015-08-19 13:42:08+00:00 +C1034,make delivery,2015-08-19 15:11:32+00:00,2015-08-19 13:47:06+00:00 +C1034,confirm payment,2015-08-19 13:59:05+00:00,2015-08-19 13:50:35+00:00 +C1100,make delivery,2015-08-19 15:20:15+00:00,2015-08-19 13:57:41+00:00 +C1224,place order,2015-08-19 14:10:19+00:00,2015-08-19 14:03:31+00:00 +C1018,prepare delivery,2015-08-19 14:35:48+00:00,2015-08-19 14:28:06+00:00 +C1039,confirm payment,2015-08-19 14:39:20+00:00,2015-08-19 14:32:12+00:00 +C1186,send invoice,2015-08-19 14:50:53+00:00,2015-08-19 14:43:46+00:00 +C1044,prepare delivery,2015-08-19 17:29:11+00:00,2015-08-19 15:07:56+00:00 +C1050,send reminder,2015-08-19 16:02:45+00:00,2015-08-19 15:23:00+00:00 +C977,prepare delivery,2015-08-19 15:31:19+00:00,2015-08-19 15:23:39+00:00 +C1225,place order,2015-08-19 15:35:18+00:00,2015-08-19 15:25:09+00:00 +C1007,confirm payment,2015-08-19 15:53:05+00:00,2015-08-19 15:45:25+00:00 +C949,prepare delivery,2015-08-19 16:28:06+00:00,2015-08-19 16:24:14+00:00 +C1195,send invoice,2015-08-19 16:37:05+00:00,2015-08-19 16:32:48+00:00 +C1161,pay,2015-08-19 16:40:47+00:00,2015-08-19 16:33:42+00:00 +C1167,send invoice,2015-08-19 16:40:48+00:00,2015-08-19 16:35:04+00:00 +C1083,make delivery,2015-08-19 16:53:17+00:00,2015-08-19 16:37:35+00:00 +C1133,send reminder,2015-08-19 16:54:06+00:00,2015-08-19 16:44:15+00:00 +C1060,send reminder,2015-08-19 16:59:42+00:00,2015-08-19 16:46:44+00:00 +C1083,confirm payment,2015-08-19 17:09:18+00:00,2015-08-19 16:55:00+00:00 +C1226,place order,2015-08-19 17:12:52+00:00,2015-08-19 17:08:25+00:00 +C1114,pay,2015-08-19 17:37:41+00:00,2015-08-19 17:33:00+00:00 +C1205,send invoice,2015-08-19 18:08:24+00:00,2015-08-19 18:01:24+00:00 +C1086,confirm payment,2015-08-19 18:13:49+00:00,2015-08-19 18:06:34+00:00 +C1173,send invoice,2015-08-19 18:12:51+00:00,2015-08-19 18:07:39+00:00 +C1227,place order,2015-08-19 22:53:39+00:00,2015-08-19 18:34:57+00:00 +C1056,confirm payment,2015-08-19 19:51:49+00:00,2015-08-19 19:44:07+00:00 +C1090,confirm payment,2015-08-19 19:54:47+00:00,2015-08-19 19:47:43+00:00 +C1228,place order,2015-08-19 21:30:21+00:00,2015-08-19 21:21:06+00:00 +C1229,place order,2015-08-20 04:15:26+00:00,2015-08-20 04:07:48+00:00 +C1135,send invoice,2015-08-20 09:02:59+00:00,2015-08-20 08:58:21+00:00 +C1105,send reminder,2015-08-20 09:18:27+00:00,2015-08-20 09:11:37+00:00 +C1071,pay,2015-08-20 09:30:48+00:00,2015-08-20 09:22:43+00:00 +C1202,send invoice,2015-08-20 09:35:15+00:00,2015-08-20 09:28:50+00:00 +C1230,place order,2015-08-20 12:14:14+00:00,2015-08-20 09:32:42+00:00 +C1201,send invoice,2015-08-20 09:38:23+00:00,2015-08-20 09:34:09+00:00 +C1165,send invoice,2015-08-20 09:52:53+00:00,2015-08-20 09:50:33+00:00 +C1090,make delivery,2015-08-20 10:27:31+00:00,2015-08-20 10:13:31+00:00 +C1057,confirm payment,2015-08-20 10:24:45+00:00,2015-08-20 10:18:35+00:00 +C1168,pay,2015-08-20 10:24:11+00:00,2015-08-20 10:20:34+00:00 +C1079,confirm payment,2015-08-20 10:34:00+00:00,2015-08-20 10:28:46+00:00 +C1103,prepare delivery,2015-08-20 10:39:07+00:00,2015-08-20 10:35:25+00:00 +C1082,prepare delivery,2015-08-20 13:23:24+00:00,2015-08-20 10:54:50+00:00 +C1050,cancel order,2015-08-20 11:11:41+00:00,2015-08-20 10:59:49+00:00 +C1066,prepare delivery,2015-08-20 11:08:36+00:00,2015-08-20 11:01:36+00:00 +C1063,make delivery,2015-08-20 11:49:58+00:00,2015-08-20 11:21:45+00:00 +C1231,place order,2015-08-20 11:27:49+00:00,2015-08-20 11:23:31+00:00 +C1015,confirm payment,2015-08-20 11:37:29+00:00,2015-08-20 11:28:45+00:00 +C1084,make delivery,2015-08-20 12:00:45+00:00,2015-08-20 11:37:14+00:00 +C1073,prepare delivery,2015-08-20 11:56:43+00:00,2015-08-20 11:53:42+00:00 +C1158,send invoice,2015-08-20 12:51:34+00:00,2015-08-20 12:47:44+00:00 +C1232,place order,2015-08-20 13:18:49+00:00,2015-08-20 13:05:09+00:00 +C1057,make delivery,2015-08-20 13:21:43+00:00,2015-08-20 13:09:44+00:00 +C1125,confirm payment,2015-08-20 13:49:40+00:00,2015-08-20 13:38:54+00:00 +C1153,pay,2015-08-20 13:47:24+00:00,2015-08-20 13:41:51+00:00 +C1068,confirm payment,2015-08-20 14:26:43+00:00,2015-08-20 14:20:22+00:00 +C1233,place order,2015-08-20 14:37:17+00:00,2015-08-20 14:28:26+00:00 +C1078,send reminder,2015-08-20 15:00:51+00:00,2015-08-20 14:34:25+00:00 +C1070,confirm payment,2015-08-20 15:19:54+00:00,2015-08-20 14:54:57+00:00 +C1166,send invoice,2015-08-20 15:15:00+00:00,2015-08-20 15:07:46+00:00 +C965,prepare delivery,2015-08-20 15:20:50+00:00,2015-08-20 15:17:00+00:00 +C1196,send invoice,2015-08-20 18:41:27+00:00,2015-08-20 15:20:51+00:00 +C1026,confirm payment,2015-08-20 16:12:26+00:00,2015-08-20 15:54:24+00:00 +C1104,make delivery,2015-08-20 16:29:15+00:00,2015-08-20 16:02:28+00:00 +C1234,place order,2015-08-20 17:56:13+00:00,2015-08-20 16:14:59+00:00 +C1070,make delivery,2015-08-20 16:35:26+00:00,2015-08-20 16:17:48+00:00 +C1235,place order,2015-08-20 21:59:09+00:00,2015-08-20 17:48:05+00:00 +C1226,send invoice,2015-08-20 18:01:08+00:00,2015-08-20 17:55:10+00:00 +C1041,send reminder,2015-08-20 18:21:55+00:00,2015-08-20 17:59:19+00:00 +C1198,send invoice,2015-08-20 18:34:37+00:00,2015-08-20 18:29:22+00:00 +C1184,send invoice,2015-08-20 18:36:56+00:00,2015-08-20 18:29:26+00:00 +C1076,make delivery,2015-08-20 18:47:54+00:00,2015-08-20 18:32:28+00:00 +C1211,send invoice,2015-08-20 19:02:28+00:00,2015-08-20 18:56:32+00:00 +C1125,make delivery,2015-08-20 19:45:33+00:00,2015-08-20 19:15:59+00:00 +C1079,make delivery,2015-08-20 20:16:38+00:00,2015-08-20 19:46:41+00:00 +C1026,make delivery,2015-08-20 21:14:48+00:00,2015-08-20 19:50:17+00:00 +C1236,place order,2015-08-20 20:05:16+00:00,2015-08-20 20:00:30+00:00 +C1237,place order,2015-08-20 22:39:39+00:00,2015-08-20 22:37:14+00:00 +C1172,pay,2015-08-20 23:00:04+00:00,2015-08-20 22:54:16+00:00 +C1144,pay,2015-08-21 03:51:51+00:00,2015-08-21 03:47:24+00:00 +C1238,place order,2015-08-21 09:15:14+00:00,2015-08-21 09:02:42+00:00 +C1227,send invoice,2015-08-21 09:13:27+00:00,2015-08-21 09:07:05+00:00 +C1084,confirm payment,2015-08-21 09:14:16+00:00,2015-08-21 09:08:17+00:00 +C1239,place order,2015-08-21 11:01:22+00:00,2015-08-21 10:23:32+00:00 +C1192,send invoice,2015-08-21 10:44:01+00:00,2015-08-21 10:26:59+00:00 +C1088,prepare delivery,2015-08-21 12:57:28+00:00,2015-08-21 10:35:06+00:00 +C1178,send invoice,2015-08-21 10:46:35+00:00,2015-08-21 10:37:43+00:00 +C1076,confirm payment,2015-08-21 10:47:16+00:00,2015-08-21 10:38:23+00:00 +C1104,confirm payment,2015-08-21 11:04:36+00:00,2015-08-21 10:57:49+00:00 +C977,confirm payment,2015-08-21 11:12:24+00:00,2015-08-21 11:04:40+00:00 +C1044,make delivery,2015-08-21 12:27:17+00:00,2015-08-21 11:11:56+00:00 +C1077,prepare delivery,2015-08-21 11:22:23+00:00,2015-08-21 11:14:49+00:00 +C1172,send invoice,2015-08-21 11:24:45+00:00,2015-08-21 11:15:28+00:00 +C1106,send reminder,2015-08-21 11:29:16+00:00,2015-08-21 11:18:52+00:00 +C1135,prepare delivery,2015-08-21 13:50:39+00:00,2015-08-21 11:20:49+00:00 +C1009,pay,2015-08-21 11:41:51+00:00,2015-08-21 11:37:05+00:00 +C1162,send invoice,2015-08-21 11:48:36+00:00,2015-08-21 11:42:01+00:00 +C977,make delivery,2015-08-21 12:30:40+00:00,2015-08-21 11:57:30+00:00 +C1185,send invoice,2015-08-21 15:49:43+00:00,2015-08-21 11:58:44+00:00 +C1240,place order,2015-08-21 15:50:40+00:00,2015-08-21 12:05:11+00:00 +C1199,send invoice,2015-08-21 12:23:42+00:00,2015-08-21 12:11:02+00:00 +C1018,make delivery,2015-08-21 12:37:09+00:00,2015-08-21 12:27:07+00:00 +C1146,prepare delivery,2015-08-21 16:05:21+00:00,2015-08-21 13:27:42+00:00 +C1241,place order,2015-08-21 13:49:04+00:00,2015-08-21 13:28:29+00:00 +C1139,send reminder,2015-08-21 14:25:10+00:00,2015-08-21 13:52:30+00:00 +C945,prepare delivery,2015-08-21 13:56:06+00:00,2015-08-21 13:53:10+00:00 +C1225,send invoice,2015-08-21 14:36:09+00:00,2015-08-21 14:30:30+00:00 +C1187,send invoice,2015-08-21 14:47:38+00:00,2015-08-21 14:36:50+00:00 +C949,confirm payment,2015-08-21 14:52:05+00:00,2015-08-21 14:45:03+00:00 +C1178,pay,2015-08-21 15:09:37+00:00,2015-08-21 15:03:15+00:00 +C1242,place order,2015-08-21 15:23:01+00:00,2015-08-21 15:15:05+00:00 +C1165,pay,2015-08-21 15:24:39+00:00,2015-08-21 15:20:26+00:00 +C1127,send reminder,2015-08-21 15:29:06+00:00,2015-08-21 15:20:56+00:00 +C1137,send reminder,2015-08-21 16:30:57+00:00,2015-08-21 15:59:36+00:00 +C949,make delivery,2015-08-21 16:47:02+00:00,2015-08-21 16:00:26+00:00 +C1112,send reminder,2015-08-21 16:29:08+00:00,2015-08-21 16:04:01+00:00 +C1132,send reminder,2015-08-21 16:33:58+00:00,2015-08-21 16:13:14+00:00 +C1228,send invoice,2015-08-21 16:26:24+00:00,2015-08-21 16:22:28+00:00 +C1060,cancel order,2015-08-21 16:47:15+00:00,2015-08-21 16:27:46+00:00 +C1243,place order,2015-08-21 21:45:53+00:00,2015-08-21 16:48:17+00:00 +C1103,confirm payment,2015-08-21 17:14:02+00:00,2015-08-21 17:10:25+00:00 +C1212,send invoice,2015-08-21 17:13:46+00:00,2015-08-21 17:11:17+00:00 +C1216,send invoice,2015-08-21 17:44:46+00:00,2015-08-21 17:41:15+00:00 +C1244,place order,2015-08-21 19:03:50+00:00,2015-08-21 18:54:42+00:00 +C1245,place order,2015-08-21 22:23:28+00:00,2015-08-21 22:20:20+00:00 +C1103,make delivery,2015-08-21 22:41:26+00:00,2015-08-21 22:31:48+00:00 +C1143,pay,2015-08-21 23:07:03+00:00,2015-08-21 23:03:23+00:00 +C1246,place order,2015-08-22 16:56:22+00:00,2015-08-22 16:45:12+00:00 +C1247,place order,2015-08-23 17:15:00+00:00,2015-08-23 17:07:36+00:00 +C1248,place order,2015-08-24 08:32:21+00:00,2015-08-24 08:20:10+00:00 +C1190,send invoice,2015-08-24 09:29:36+00:00,2015-08-24 09:23:56+00:00 +C1066,make delivery,2015-08-24 10:01:36+00:00,2015-08-24 09:31:47+00:00 +C1081,prepare delivery,2015-08-24 09:37:21+00:00,2015-08-24 09:34:21+00:00 +C1179,send invoice,2015-08-24 10:00:56+00:00,2015-08-24 09:53:06+00:00 +C1099,pay,2015-08-24 10:06:59+00:00,2015-08-24 10:00:13+00:00 +C1193,send invoice,2015-08-24 10:18:20+00:00,2015-08-24 10:15:39+00:00 +C1138,send reminder,2015-08-24 10:35:01+00:00,2015-08-24 10:18:08+00:00 +C1249,place order,2015-08-24 10:22:16+00:00,2015-08-24 10:18:22+00:00 +C1048,cancel order,2015-08-24 10:36:14+00:00,2015-08-24 10:27:49+00:00 +C1115,send reminder,2015-08-24 10:51:31+00:00,2015-08-24 10:36:09+00:00 +C1097,prepare delivery,2015-08-24 10:57:51+00:00,2015-08-24 10:50:13+00:00 +C1063,confirm payment,2015-08-24 11:03:15+00:00,2015-08-24 10:57:48+00:00 +C1160,send reminder,2015-08-24 11:48:19+00:00,2015-08-24 11:15:53+00:00 +C1091,prepare delivery,2015-08-24 14:04:49+00:00,2015-08-24 11:40:08+00:00 +C1163,pay,2015-08-24 12:00:37+00:00,2015-08-24 11:52:34+00:00 +C1250,place order,2015-08-24 12:05:58+00:00,2015-08-24 11:54:51+00:00 +C1110,send reminder,2015-08-24 12:32:13+00:00,2015-08-24 12:20:59+00:00 +C1018,confirm payment,2015-08-24 12:39:49+00:00,2015-08-24 12:31:28+00:00 +C1082,make delivery,2015-08-24 13:36:07+00:00,2015-08-24 12:41:43+00:00 +C1251,place order,2015-08-24 17:44:28+00:00,2015-08-24 14:07:50+00:00 +C1069,pay,2015-08-24 14:21:45+00:00,2015-08-24 14:13:36+00:00 +C1120,send reminder,2015-08-24 14:25:10+00:00,2015-08-24 14:15:05+00:00 +C1029,pay,2015-08-24 14:41:13+00:00,2015-08-24 14:37:37+00:00 +C1173,pay,2015-08-24 14:56:43+00:00,2015-08-24 14:53:58+00:00 +C1133,pay,2015-08-24 15:14:47+00:00,2015-08-24 15:03:00+00:00 +C1073,make delivery,2015-08-24 16:44:47+00:00,2015-08-24 15:23:41+00:00 +C1222,send invoice,2015-08-24 15:34:55+00:00,2015-08-24 15:28:23+00:00 +C1087,pay,2015-08-24 15:40:05+00:00,2015-08-24 15:33:26+00:00 +C1252,place order,2015-08-24 15:38:29+00:00,2015-08-24 15:33:47+00:00 +C1203,send invoice,2015-08-24 15:46:41+00:00,2015-08-24 15:37:23+00:00 +C1197,send invoice,2015-08-24 15:45:11+00:00,2015-08-24 15:37:34+00:00 +C1072,send reminder,2015-08-24 16:13:29+00:00,2015-08-24 15:49:56+00:00 +C1243,send invoice,2015-08-24 16:55:04+00:00,2015-08-24 16:49:26+00:00 +C1064,send reminder,2015-08-24 17:21:47+00:00,2015-08-24 17:00:35+00:00 +C1185,pay,2015-08-24 17:05:44+00:00,2015-08-24 17:02:09+00:00 +C1248,send invoice,2015-08-24 17:18:27+00:00,2015-08-24 17:13:03+00:00 +C1253,place order,2015-08-24 17:30:41+00:00,2015-08-24 17:25:41+00:00 +C1036,send reminder,2015-08-24 17:56:32+00:00,2015-08-24 17:40:25+00:00 +C1156,send invoice,2015-08-24 18:16:02+00:00,2015-08-24 18:09:12+00:00 +C1135,make delivery,2015-08-24 18:25:55+00:00,2015-08-24 18:11:43+00:00 +C1146,confirm payment,2015-08-24 18:58:58+00:00,2015-08-24 18:42:24+00:00 +C965,confirm payment,2015-08-24 18:51:15+00:00,2015-08-24 18:46:44+00:00 +C1073,confirm payment,2015-08-24 18:51:20+00:00,2015-08-24 18:47:15+00:00 +C1207,send invoice,2015-08-24 18:59:39+00:00,2015-08-24 18:52:54+00:00 +C1214,send invoice,2015-08-24 19:08:57+00:00,2015-08-24 19:02:21+00:00 +C1108,prepare delivery,2015-08-24 19:18:56+00:00,2015-08-24 19:03:09+00:00 +C1254,place order,2015-08-24 23:00:35+00:00,2015-08-24 19:09:29+00:00 +C1077,confirm payment,2015-08-24 19:36:44+00:00,2015-08-24 19:30:49+00:00 +C1169,pay,2015-08-24 20:13:46+00:00,2015-08-24 20:11:15+00:00 +C1044,confirm payment,2015-08-24 21:21:46+00:00,2015-08-24 21:13:33+00:00 +C1181,pay,2015-08-24 21:22:33+00:00,2015-08-24 21:16:54+00:00 +C1255,place order,2015-08-25 00:13:17+00:00,2015-08-24 21:55:13+00:00 +C1256,place order,2015-08-25 11:37:33+00:00,2015-08-25 07:32:30+00:00 +C1119,pay,2015-08-25 08:19:33+00:00,2015-08-25 08:14:53+00:00 +C1131,prepare delivery,2015-08-25 11:16:17+00:00,2015-08-25 08:50:18+00:00 +C1136,send reminder,2015-08-25 10:12:13+00:00,2015-08-25 10:00:45+00:00 +C965,make delivery,2015-08-25 10:17:27+00:00,2015-08-25 10:06:04+00:00 +C1257,place order,2015-08-25 10:20:41+00:00,2015-08-25 10:17:52+00:00 +C1047,send reminder,2015-08-25 10:54:25+00:00,2015-08-25 10:34:16+00:00 +C1035,prepare delivery,2015-08-25 10:58:49+00:00,2015-08-25 10:55:59+00:00 +C945,confirm payment,2015-08-25 11:17:48+00:00,2015-08-25 11:09:51+00:00 +C1113,send reminder,2015-08-25 11:42:17+00:00,2015-08-25 11:21:42+00:00 +C1066,confirm payment,2015-08-25 11:35:59+00:00,2015-08-25 11:27:37+00:00 +C1146,make delivery,2015-08-25 11:38:30+00:00,2015-08-25 11:29:24+00:00 +C945,make delivery,2015-08-25 11:47:30+00:00,2015-08-25 11:29:36+00:00 +C1051,send reminder,2015-08-25 11:41:48+00:00,2015-08-25 11:32:18+00:00 +C1077,make delivery,2015-08-25 12:54:00+00:00,2015-08-25 11:36:58+00:00 +C1109,prepare delivery,2015-08-25 11:50:58+00:00,2015-08-25 11:47:23+00:00 +C1258,place order,2015-08-25 12:06:09+00:00,2015-08-25 11:53:51+00:00 +C1223,send invoice,2015-08-25 12:08:28+00:00,2015-08-25 12:01:05+00:00 +C1171,send invoice,2015-08-25 12:45:40+00:00,2015-08-25 12:40:23+00:00 +C1129,prepare delivery,2015-08-25 13:37:50+00:00,2015-08-25 13:11:14+00:00 +C1088,make delivery,2015-08-25 13:25:51+00:00,2015-08-25 13:12:19+00:00 +C1116,prepare delivery,2015-08-25 13:23:35+00:00,2015-08-25 13:20:04+00:00 +C1067,send reminder,2015-08-25 13:45:17+00:00,2015-08-25 13:26:23+00:00 +C1259,place order,2015-08-25 14:36:16+00:00,2015-08-25 14:05:49+00:00 +C1149,prepare delivery,2015-08-25 14:50:21+00:00,2015-08-25 14:47:24+00:00 +C1229,send invoice,2015-08-25 15:19:22+00:00,2015-08-25 15:13:48+00:00 +C1053,pay,2015-08-25 15:22:25+00:00,2015-08-25 15:15:54+00:00 +C1061,prepare delivery,2015-08-25 17:53:32+00:00,2015-08-25 15:25:08+00:00 +C1260,place order,2015-08-25 15:54:40+00:00,2015-08-25 15:29:46+00:00 +C1097,confirm payment,2015-08-25 16:52:24+00:00,2015-08-25 16:45:27+00:00 +C1218,send invoice,2015-08-25 16:59:56+00:00,2015-08-25 16:56:18+00:00 +C1097,make delivery,2015-08-25 18:28:57+00:00,2015-08-25 17:11:33+00:00 +C1261,place order,2015-08-25 17:30:28+00:00,2015-08-25 17:17:39+00:00 +C1128,send reminder,2015-08-25 17:59:17+00:00,2015-08-25 17:37:57+00:00 +C1094,pay,2015-08-25 17:49:29+00:00,2015-08-25 17:43:57+00:00 +C1051,cancel order,2015-08-25 18:44:47+00:00,2015-08-25 18:10:17+00:00 +C1174,pay,2015-08-25 18:40:18+00:00,2015-08-25 18:33:39+00:00 +C1091,make delivery,2015-08-25 19:51:05+00:00,2015-08-25 18:35:53+00:00 +C1262,place order,2015-08-25 19:03:59+00:00,2015-08-25 18:53:25+00:00 +C1263,place order,2015-08-25 22:25:49+00:00,2015-08-25 22:16:29+00:00 +C1264,place order,2015-08-26 10:19:53+00:00,2015-08-26 08:21:13+00:00 +C1121,send reminder,2015-08-26 08:44:51+00:00,2015-08-26 08:35:06+00:00 +C1219,send invoice,2015-08-26 09:23:27+00:00,2015-08-26 09:19:11+00:00 +C1147,prepare delivery,2015-08-26 12:01:02+00:00,2015-08-26 09:26:37+00:00 +C1098,pay,2015-08-26 09:47:54+00:00,2015-08-26 09:44:02+00:00 +C1177,pay,2015-08-26 10:08:16+00:00,2015-08-26 09:46:22+00:00 +C1134,send reminder,2015-08-26 10:27:59+00:00,2015-08-26 10:08:34+00:00 +C1080,send reminder,2015-08-26 10:22:53+00:00,2015-08-26 10:11:23+00:00 +C1265,place order,2015-08-26 10:59:27+00:00,2015-08-26 10:19:57+00:00 +C1071,prepare delivery,2015-08-26 10:42:55+00:00,2015-08-26 10:39:20+00:00 +C1081,make delivery,2015-08-26 10:57:50+00:00,2015-08-26 10:48:07+00:00 +C1213,send invoice,2015-08-26 11:40:18+00:00,2015-08-26 11:29:36+00:00 +C1185,prepare delivery,2015-08-26 11:34:22+00:00,2015-08-26 11:30:23+00:00 +C1082,confirm payment,2015-08-26 12:04:28+00:00,2015-08-26 11:56:25+00:00 +C1266,place order,2015-08-26 14:04:01+00:00,2015-08-26 11:58:01+00:00 +C1151,prepare delivery,2015-08-26 12:05:43+00:00,2015-08-26 12:02:04+00:00 +C1081,confirm payment,2015-08-26 12:13:12+00:00,2015-08-26 12:09:55+00:00 +C1197,pay,2015-08-26 12:17:02+00:00,2015-08-26 12:12:09+00:00 +C1244,send invoice,2015-08-26 12:36:01+00:00,2015-08-26 12:30:45+00:00 +C1108,make delivery,2015-08-26 15:08:34+00:00,2015-08-26 13:35:12+00:00 +C1200,pay,2015-08-26 14:08:03+00:00,2015-08-26 14:04:24+00:00 +C1174,send invoice,2015-08-26 15:06:51+00:00,2015-08-26 15:01:05+00:00 +C1092,prepare delivery,2015-08-26 17:33:57+00:00,2015-08-26 15:10:00+00:00 +C1131,make delivery,2015-08-26 16:51:38+00:00,2015-08-26 15:32:51+00:00 +C1124,send reminder,2015-08-26 16:02:26+00:00,2015-08-26 15:39:40+00:00 +C1091,confirm payment,2015-08-26 15:54:33+00:00,2015-08-26 15:49:46+00:00 +C1145,send reminder,2015-08-26 16:37:14+00:00,2015-08-26 16:15:30+00:00 +C1187,pay,2015-08-26 16:26:30+00:00,2015-08-26 16:20:37+00:00 +C1142,send reminder,2015-08-26 17:03:59+00:00,2015-08-26 16:30:09+00:00 +C1195,pay,2015-08-26 17:14:41+00:00,2015-08-26 16:59:05+00:00 +C1138,pay,2015-08-26 17:22:41+00:00,2015-08-26 17:16:24+00:00 +C1230,send invoice,2015-08-26 17:46:10+00:00,2015-08-26 17:39:50+00:00 +C1088,confirm payment,2015-08-26 18:13:01+00:00,2015-08-26 18:07:58+00:00 +C1186,pay,2015-08-27 08:16:37+00:00,2015-08-27 08:10:03+00:00 +C1116,make delivery,2015-08-27 08:50:24+00:00,2015-08-27 08:36:55+00:00 +C1200,send invoice,2015-08-27 09:12:38+00:00,2015-08-27 09:06:24+00:00 +C1164,send reminder,2015-08-27 09:28:35+00:00,2015-08-27 09:18:33+00:00 +C1135,confirm payment,2015-08-27 09:31:03+00:00,2015-08-27 09:24:01+00:00 +C1047,cancel order,2015-08-27 10:05:46+00:00,2015-08-27 09:53:14+00:00 +C1111,prepare delivery,2015-08-27 10:20:46+00:00,2015-08-27 10:16:50+00:00 +C1249,send invoice,2015-08-27 10:41:18+00:00,2015-08-27 10:37:41+00:00 +C1221,send invoice,2015-08-27 10:48:22+00:00,2015-08-27 10:40:02+00:00 +C1246,send invoice,2015-08-27 10:49:16+00:00,2015-08-27 10:40:10+00:00 +C1036,cancel order,2015-08-27 11:59:43+00:00,2015-08-27 10:44:02+00:00 +C1072,cancel order,2015-08-27 11:18:50+00:00,2015-08-27 10:48:59+00:00 +C1127,pay,2015-08-27 11:03:58+00:00,2015-08-27 10:58:45+00:00 +C1149,make delivery,2015-08-27 12:33:04+00:00,2015-08-27 11:07:01+00:00 +C1035,make delivery,2015-08-27 11:54:17+00:00,2015-08-27 11:39:11+00:00 +C1163,prepare delivery,2015-08-27 11:56:20+00:00,2015-08-27 11:53:29+00:00 +C1140,prepare delivery,2015-08-27 12:22:20+00:00,2015-08-27 12:19:11+00:00 +C1192,pay,2015-08-27 12:30:54+00:00,2015-08-27 12:24:18+00:00 +C1129,make delivery,2015-08-27 13:18:35+00:00,2015-08-27 12:30:06+00:00 +C1035,confirm payment,2015-08-27 12:45:24+00:00,2015-08-27 12:34:59+00:00 +C1109,confirm payment,2015-08-27 13:25:01+00:00,2015-08-27 13:19:05+00:00 +C1061,make delivery,2015-08-27 13:37:29+00:00,2015-08-27 13:25:03+00:00 +C1085,send reminder,2015-08-27 13:52:40+00:00,2015-08-27 13:30:52+00:00 +C1239,send invoice,2015-08-27 14:32:42+00:00,2015-08-27 14:25:52+00:00 +C1220,send invoice,2015-08-27 15:13:10+00:00,2015-08-27 15:09:30+00:00 +C1198,pay,2015-08-27 16:01:25+00:00,2015-08-27 15:55:55+00:00 +C1029,prepare delivery,2015-08-27 16:01:48+00:00,2015-08-27 15:58:03+00:00 +C1109,make delivery,2015-08-27 16:20:19+00:00,2015-08-27 16:09:26+00:00 +C1252,send invoice,2015-08-27 19:44:42+00:00,2015-08-27 16:10:29+00:00 +C1149,confirm payment,2015-08-27 16:29:09+00:00,2015-08-27 16:15:50+00:00 +C1040,pay,2015-08-27 17:17:57+00:00,2015-08-27 16:48:40+00:00 +C1176,pay,2015-08-27 17:00:50+00:00,2015-08-27 16:52:44+00:00 +C1152,send reminder,2015-08-27 17:13:01+00:00,2015-08-27 16:55:23+00:00 +C1185,make delivery,2015-08-27 17:44:01+00:00,2015-08-27 17:20:30+00:00 +C1118,prepare delivery,2015-08-27 17:46:02+00:00,2015-08-27 17:38:33+00:00 +C1207,pay,2015-08-27 21:00:40+00:00,2015-08-27 18:05:36+00:00 +C1241,send invoice,2015-08-27 18:28:38+00:00,2015-08-27 18:16:23+00:00 +C1114,prepare delivery,2015-08-27 21:29:24+00:00,2015-08-27 21:13:39+00:00 +C1105,pay,2015-08-28 09:20:33+00:00,2015-08-28 09:14:00+00:00 +C1096,send reminder,2015-08-28 09:56:11+00:00,2015-08-28 09:16:35+00:00 +C1071,make delivery,2015-08-28 09:56:41+00:00,2015-08-28 09:39:20+00:00 +C1108,confirm payment,2015-08-28 09:55:55+00:00,2015-08-28 09:48:11+00:00 +C1151,confirm payment,2015-08-28 10:10:51+00:00,2015-08-28 10:01:57+00:00 +C1234,send invoice,2015-08-28 10:10:43+00:00,2015-08-28 10:03:04+00:00 +C1092,make delivery,2015-08-28 10:20:21+00:00,2015-08-28 10:04:28+00:00 +C1123,send reminder,2015-08-28 10:48:08+00:00,2015-08-28 10:21:54+00:00 +C1147,make delivery,2015-08-28 10:47:31+00:00,2015-08-28 10:35:53+00:00 +C1095,send reminder,2015-08-28 10:58:18+00:00,2015-08-28 10:47:58+00:00 +C1041,pay,2015-08-28 11:08:39+00:00,2015-08-28 11:01:42+00:00 +C1116,confirm payment,2015-08-28 11:21:51+00:00,2015-08-28 11:12:05+00:00 +C1237,send invoice,2015-08-28 11:43:28+00:00,2015-08-28 11:38:02+00:00 +C1151,make delivery,2015-08-28 12:04:28+00:00,2015-08-28 11:51:28+00:00 +C1061,confirm payment,2015-08-28 16:15:22+00:00,2015-08-28 12:31:52+00:00 +C1117,send reminder,2015-08-28 12:40:33+00:00,2015-08-28 12:33:38+00:00 +C1131,confirm payment,2015-08-28 12:57:26+00:00,2015-08-28 12:51:02+00:00 +C1170,send reminder,2015-08-28 14:34:11+00:00,2015-08-28 14:12:09+00:00 +C1161,prepare delivery,2015-08-28 14:44:33+00:00,2015-08-28 14:19:23+00:00 +C1134,pay,2015-08-28 14:40:47+00:00,2015-08-28 14:35:03+00:00 +C1067,pay,2015-08-28 14:55:13+00:00,2015-08-28 14:51:23+00:00 +C1093,send reminder,2015-08-28 16:08:35+00:00,2015-08-28 15:35:57+00:00 +C1119,prepare delivery,2015-08-28 16:15:48+00:00,2015-08-28 16:11:59+00:00 +C1136,pay,2015-08-28 16:54:20+00:00,2015-08-28 16:47:46+00:00 +C1155,send reminder,2015-08-28 17:08:15+00:00,2015-08-28 16:56:18+00:00 +C1157,send reminder,2015-08-28 17:18:28+00:00,2015-08-28 16:58:56+00:00 +C1259,send invoice,2015-08-28 17:14:42+00:00,2015-08-28 17:05:03+00:00 +C1254,send invoice,2015-08-28 17:12:33+00:00,2015-08-28 17:06:13+00:00 +C1266,send invoice,2015-08-28 17:42:01+00:00,2015-08-28 17:16:12+00:00 +C1183,pay,2015-08-28 17:30:21+00:00,2015-08-28 17:19:50+00:00 +C1078,pay,2015-08-28 17:34:02+00:00,2015-08-28 17:30:20+00:00 +C1143,prepare delivery,2015-08-28 17:35:10+00:00,2015-08-28 17:31:22+00:00 +C1217,pay,2015-08-28 17:55:00+00:00,2015-08-28 17:47:08+00:00 +C1201,pay,2015-08-28 18:25:53+00:00,2015-08-28 18:20:46+00:00 +C1099,prepare delivery,2015-08-28 18:32:15+00:00,2015-08-28 18:23:22+00:00 +C1126,send reminder,2015-08-28 19:10:50+00:00,2015-08-28 18:41:07+00:00 +C1257,send invoice,2015-08-28 19:42:38+00:00,2015-08-28 19:34:59+00:00 +C1211,pay,2015-08-28 21:48:21+00:00,2015-08-28 21:42:33+00:00 +C1111,make delivery,2015-08-31 09:33:02+00:00,2015-08-31 09:19:06+00:00 +C1224,send invoice,2015-08-31 09:41:24+00:00,2015-08-31 09:35:22+00:00 +C1247,send invoice,2015-08-31 09:54:04+00:00,2015-08-31 09:50:52+00:00 +C1222,pay,2015-08-31 10:08:53+00:00,2015-08-31 10:06:08+00:00 +C1150,send reminder,2015-08-31 10:23:03+00:00,2015-08-31 10:08:30+00:00 +C1122,prepare delivery,2015-08-31 13:07:41+00:00,2015-08-31 10:30:38+00:00 +C1094,prepare delivery,2015-08-31 11:04:11+00:00,2015-08-31 10:56:12+00:00 +C1129,confirm payment,2015-08-31 11:15:11+00:00,2015-08-31 11:07:39+00:00 +C1255,send invoice,2015-08-31 11:52:26+00:00,2015-08-31 11:49:12+00:00 +C1185,confirm payment,2015-08-31 11:57:45+00:00,2015-08-31 11:54:01+00:00 +C1074,send reminder,2015-08-31 12:15:13+00:00,2015-08-31 11:59:04+00:00 +C1101,send reminder,2015-08-31 12:12:11+00:00,2015-08-31 11:59:26+00:00 +C1140,make delivery,2015-08-31 12:29:09+00:00,2015-08-31 12:02:51+00:00 +C1153,prepare delivery,2015-08-31 12:49:13+00:00,2015-08-31 12:24:17+00:00 +C1163,make delivery,2015-08-31 12:59:39+00:00,2015-08-31 12:36:10+00:00 +C1071,confirm payment,2015-08-31 13:22:55+00:00,2015-08-31 13:20:19+00:00 +C1147,confirm payment,2015-08-31 14:22:07+00:00,2015-08-31 14:12:59+00:00 +C1029,confirm payment,2015-08-31 17:16:35+00:00,2015-08-31 14:30:53+00:00 +C1242,send invoice,2015-08-31 14:48:21+00:00,2015-08-31 14:43:17+00:00 +C1256,send invoice,2015-08-31 14:57:17+00:00,2015-08-31 14:51:08+00:00 +C1245,send invoice,2015-08-31 15:16:32+00:00,2015-08-31 15:10:29+00:00 +C1195,prepare delivery,2015-08-31 15:25:08+00:00,2015-08-31 15:21:10+00:00 +C1032,prepare delivery,2015-08-31 15:39:47+00:00,2015-08-31 15:32:55+00:00 +C1168,prepare delivery,2015-08-31 15:47:45+00:00,2015-08-31 15:40:34+00:00 +C1215,pay,2015-08-31 15:50:03+00:00,2015-08-31 15:44:39+00:00 +C1085,pay,2015-08-31 15:59:05+00:00,2015-08-31 15:50:25+00:00 +C1169,prepare delivery,2015-08-31 16:16:55+00:00,2015-08-31 15:51:26+00:00 +C1193,pay,2015-08-31 16:04:45+00:00,2015-08-31 15:59:46+00:00 +C1235,send invoice,2015-08-31 16:34:12+00:00,2015-08-31 16:31:08+00:00 +C1210,send invoice,2015-08-31 17:01:55+00:00,2015-08-31 16:38:34+00:00 +C1114,make delivery,2015-08-31 17:12:10+00:00,2015-08-31 16:48:09+00:00 +C1194,send reminder,2015-08-31 17:05:07+00:00,2015-08-31 16:50:36+00:00 +C1120,pay,2015-08-31 17:22:16+00:00,2015-08-31 17:16:19+00:00 +C1199,pay,2015-08-31 17:24:57+00:00,2015-08-31 17:21:28+00:00 +C1092,confirm payment,2015-08-31 17:57:56+00:00,2015-08-31 17:54:32+00:00 +C1140,confirm payment,2015-08-31 18:08:56+00:00,2015-08-31 18:00:13+00:00 +C1261,send invoice,2015-08-31 18:12:21+00:00,2015-08-31 18:06:06+00:00 +C1228,pay,2015-08-31 18:30:36+00:00,2015-08-31 18:25:48+00:00 +C1130,send reminder,2015-08-31 18:59:12+00:00,2015-08-31 18:37:05+00:00 +C1180,send reminder,2015-08-31 19:05:04+00:00,2015-08-31 18:48:48+00:00 +C1118,make delivery,2015-08-31 19:49:03+00:00,2015-08-31 19:24:54+00:00 +C1114,confirm payment,2015-08-31 19:39:04+00:00,2015-08-31 19:28:44+00:00 +C1230,pay,2015-08-31 20:34:06+00:00,2015-08-31 20:27:39+00:00 +C1163,confirm payment,2015-08-31 20:52:26+00:00,2015-08-31 20:48:33+00:00 +C1191,pay,2015-08-31 23:01:18+00:00,2015-08-31 22:57:34+00:00 +C1220,pay,2015-09-01 07:52:44+00:00,2015-09-01 07:44:06+00:00 +C1159,send reminder,2015-09-01 09:01:24+00:00,2015-09-01 08:31:16+00:00 +C1107,prepare delivery,2015-09-01 09:12:26+00:00,2015-09-01 09:04:30+00:00 +C1182,send reminder,2015-09-01 09:54:25+00:00,2015-09-01 09:16:53+00:00 +C1111,confirm payment,2015-09-01 09:46:49+00:00,2015-09-01 09:29:57+00:00 +C1189,send reminder,2015-09-01 10:08:06+00:00,2015-09-01 09:32:52+00:00 +C1154,send reminder,2015-09-01 10:22:35+00:00,2015-09-01 09:47:30+00:00 +C1192,prepare delivery,2015-09-01 10:07:48+00:00,2015-09-01 10:04:02+00:00 +C1187,prepare delivery,2015-09-01 10:10:40+00:00,2015-09-01 10:07:28+00:00 +C1029,make delivery,2015-09-01 11:55:02+00:00,2015-09-01 10:16:16+00:00 +C1141,send reminder,2015-09-01 11:13:48+00:00,2015-09-01 10:51:12+00:00 +C1178,prepare delivery,2015-09-01 10:56:10+00:00,2015-09-01 10:53:04+00:00 +C1251,send invoice,2015-09-01 11:36:28+00:00,2015-09-01 11:00:42+00:00 +C1148,send reminder,2015-09-01 11:09:35+00:00,2015-09-01 11:00:44+00:00 +C1143,make delivery,2015-09-01 11:41:03+00:00,2015-09-01 11:01:42+00:00 +C1161,make delivery,2015-09-01 11:22:51+00:00,2015-09-01 11:08:04+00:00 +C1231,send invoice,2015-09-01 11:24:00+00:00,2015-09-01 11:19:01+00:00 +C1265,send invoice,2015-09-01 11:30:05+00:00,2015-09-01 11:23:01+00:00 +C1188,send reminder,2015-09-01 12:15:45+00:00,2015-09-01 11:35:03+00:00 +C1119,make delivery,2015-09-01 12:19:53+00:00,2015-09-01 11:41:40+00:00 +C1119,confirm payment,2015-09-01 12:12:26+00:00,2015-09-01 12:04:47+00:00 +C1176,prepare delivery,2015-09-01 14:37:17+00:00,2015-09-01 12:05:23+00:00 +C1240,send invoice,2015-09-01 12:36:56+00:00,2015-09-01 12:34:44+00:00 +C1096,cancel order,2015-09-01 13:01:40+00:00,2015-09-01 12:42:53+00:00 +C1122,make delivery,2015-09-01 13:01:50+00:00,2015-09-01 12:46:59+00:00 +C1099,make delivery,2015-09-01 13:30:50+00:00,2015-09-01 13:14:01+00:00 +C1161,confirm payment,2015-09-01 14:04:36+00:00,2015-09-01 13:47:38+00:00 +C1181,prepare delivery,2015-09-01 14:16:50+00:00,2015-09-01 14:08:57+00:00 +C1094,make delivery,2015-09-01 15:40:17+00:00,2015-09-01 14:20:04+00:00 +C1195,make delivery,2015-09-01 15:09:43+00:00,2015-09-01 14:38:17+00:00 +C1215,send invoice,2015-09-01 14:52:12+00:00,2015-09-01 14:48:51+00:00 +C1206,send reminder,2015-09-01 15:08:13+00:00,2015-09-01 14:50:09+00:00 +C1225,pay,2015-09-01 15:17:09+00:00,2015-09-01 14:55:57+00:00 +C1080,pay,2015-09-01 15:09:53+00:00,2015-09-01 15:04:11+00:00 +C1175,send reminder,2015-09-01 15:24:32+00:00,2015-09-01 15:06:00+00:00 +C1208,send reminder,2015-09-01 15:27:20+00:00,2015-09-01 15:08:03+00:00 +C1118,confirm payment,2015-09-01 15:40:51+00:00,2015-09-01 15:32:47+00:00 +C1233,send invoice,2015-09-01 15:56:00+00:00,2015-09-01 15:44:28+00:00 +C1232,send invoice,2015-09-01 15:50:31+00:00,2015-09-01 15:44:39+00:00 +C1064,pay,2015-09-01 15:50:11+00:00,2015-09-01 15:46:53+00:00 +C1167,send reminder,2015-09-01 16:15:16+00:00,2015-09-01 15:56:11+00:00 +C1032,make delivery,2015-09-01 16:17:04+00:00,2015-09-01 16:04:44+00:00 +C1153,make delivery,2015-09-01 16:49:49+00:00,2015-09-01 16:22:19+00:00 +C1098,prepare delivery,2015-09-01 16:28:22+00:00,2015-09-01 16:24:29+00:00 +C1205,send reminder,2015-09-01 16:42:32+00:00,2015-09-01 16:27:39+00:00 +C1099,confirm payment,2015-09-01 16:32:18+00:00,2015-09-01 16:29:31+00:00 +C1180,pay,2015-09-01 16:45:21+00:00,2015-09-01 16:39:08+00:00 +C1153,confirm payment,2015-09-01 17:13:42+00:00,2015-09-01 17:04:38+00:00 +C1195,confirm payment,2015-09-01 17:20:03+00:00,2015-09-01 17:16:56+00:00 +C1168,make delivery,2015-09-01 17:44:53+00:00,2015-09-01 17:21:10+00:00 +C1192,confirm payment,2015-09-01 17:37:53+00:00,2015-09-01 17:21:13+00:00 +C1093,cancel order,2015-09-01 17:36:34+00:00,2015-09-01 17:30:21+00:00 +C1262,send invoice,2015-09-01 17:56:27+00:00,2015-09-01 17:48:39+00:00 +C1250,send invoice,2015-09-01 18:09:16+00:00,2015-09-01 18:01:32+00:00 +C1217,send invoice,2015-09-01 18:17:34+00:00,2015-09-01 18:12:31+00:00 +C1169,make delivery,2015-09-01 18:54:54+00:00,2015-09-01 18:40:03+00:00 +C1231,pay,2015-09-01 18:53:44+00:00,2015-09-01 18:46:21+00:00 +C1178,confirm payment,2015-09-01 19:32:25+00:00,2015-09-01 19:24:39+00:00 +C1158,send reminder,2015-09-01 20:55:25+00:00,2015-09-01 20:32:22+00:00 +C1074,pay,2015-09-01 22:02:58+00:00,2015-09-01 21:50:17+00:00 +C1216,pay,2015-09-01 22:00:19+00:00,2015-09-01 21:54:48+00:00 +C1143,confirm payment,2015-09-01 22:17:33+00:00,2015-09-01 22:09:19+00:00 +C1187,confirm payment,2015-09-02 13:24:49+00:00,2015-09-02 08:42:03+00:00 +C1204,send reminder,2015-09-02 09:03:09+00:00,2015-09-02 08:45:03+00:00 +C1078,prepare delivery,2015-09-02 08:51:48+00:00,2015-09-02 08:47:53+00:00 +C1202,send reminder,2015-09-02 09:27:16+00:00,2015-09-02 09:04:05+00:00 +C1107,make delivery,2015-09-02 09:47:46+00:00,2015-09-02 09:11:40+00:00 +C1107,confirm payment,2015-09-02 09:25:27+00:00,2015-09-02 09:19:53+00:00 +C1187,make delivery,2015-09-02 09:51:38+00:00,2015-09-02 09:21:17+00:00 +C1263,send invoice,2015-09-02 09:42:56+00:00,2015-09-02 09:35:55+00:00 +C1243,pay,2015-09-02 09:43:53+00:00,2015-09-02 09:38:07+00:00 +C1168,confirm payment,2015-09-02 09:57:25+00:00,2015-09-02 09:48:58+00:00 +C1177,prepare delivery,2015-09-02 09:54:51+00:00,2015-09-02 09:51:15+00:00 +C1176,make delivery,2015-09-02 10:49:59+00:00,2015-09-02 09:57:13+00:00 +C1176,confirm payment,2015-09-02 10:12:43+00:00,2015-09-02 10:09:41+00:00 +C1196,send reminder,2015-09-02 10:29:34+00:00,2015-09-02 10:10:24+00:00 +C1124,pay,2015-09-02 10:24:17+00:00,2015-09-02 10:18:53+00:00 +C1101,cancel order,2015-09-02 10:47:27+00:00,2015-09-02 10:37:50+00:00 +C1211,prepare delivery,2015-09-02 13:05:55+00:00,2015-09-02 10:39:27+00:00 +C1253,send invoice,2015-09-02 10:44:52+00:00,2015-09-02 10:41:14+00:00 +C1192,make delivery,2015-09-02 11:13:36+00:00,2015-09-02 10:44:15+00:00 +C1222,prepare delivery,2015-09-02 13:24:57+00:00,2015-09-02 10:45:23+00:00 +C1173,prepare delivery,2015-09-02 11:08:11+00:00,2015-09-02 11:04:34+00:00 +C1133,prepare delivery,2015-09-02 11:12:20+00:00,2015-09-02 11:06:29+00:00 +C1174,prepare delivery,2015-09-02 11:25:28+00:00,2015-09-02 11:21:37+00:00 +C1181,make delivery,2015-09-02 12:46:06+00:00,2015-09-02 11:26:01+00:00 +C1178,make delivery,2015-09-02 11:45:08+00:00,2015-09-02 11:35:17+00:00 +C1094,confirm payment,2015-09-02 11:40:57+00:00,2015-09-02 11:36:00+00:00 +C1041,prepare delivery,2015-09-02 11:49:49+00:00,2015-09-02 11:42:22+00:00 +C1087,prepare delivery,2015-09-02 11:51:30+00:00,2015-09-02 11:45:41+00:00 +C1169,confirm payment,2015-09-02 11:55:11+00:00,2015-09-02 11:46:51+00:00 +C1227,send reminder,2015-09-02 12:12:26+00:00,2015-09-02 11:53:46+00:00 +C1238,send invoice,2015-09-02 12:06:49+00:00,2015-09-02 12:00:07+00:00 +C1009,prepare delivery,2015-09-02 12:28:55+00:00,2015-09-02 12:25:03+00:00 +C1264,send invoice,2015-09-02 12:35:15+00:00,2015-09-02 12:31:46+00:00 +C1172,prepare delivery,2015-09-02 12:38:12+00:00,2015-09-02 12:35:21+00:00 +C1142,pay,2015-09-02 12:55:21+00:00,2015-09-02 12:51:23+00:00 +C1207,prepare delivery,2015-09-02 12:58:08+00:00,2015-09-02 12:55:11+00:00 +C1181,confirm payment,2015-09-02 13:06:57+00:00,2015-09-02 12:56:52+00:00 +C1260,send invoice,2015-09-02 13:01:40+00:00,2015-09-02 12:57:48+00:00 +C1236,send invoice,2015-09-02 13:21:25+00:00,2015-09-02 13:13:28+00:00 +C1134,prepare delivery,2015-09-02 13:49:45+00:00,2015-09-02 13:42:02+00:00 +C1184,send reminder,2015-09-02 14:35:20+00:00,2015-09-02 14:20:52+00:00 +C1098,make delivery,2015-09-02 16:07:05+00:00,2015-09-02 14:41:50+00:00 +C1226,send reminder,2015-09-02 15:06:41+00:00,2015-09-02 14:43:22+00:00 +C1122,confirm payment,2015-09-02 14:55:30+00:00,2015-09-02 14:49:23+00:00 +C1162,send reminder,2015-09-02 15:13:32+00:00,2015-09-02 14:51:07+00:00 +C1166,send reminder,2015-09-02 14:57:38+00:00,2015-09-02 14:51:11+00:00 +C1144,prepare delivery,2015-09-02 15:15:52+00:00,2015-09-02 15:08:32+00:00 +C1186,prepare delivery,2015-09-02 15:15:56+00:00,2015-09-02 15:08:52+00:00 +C1217,prepare delivery,2015-09-02 15:18:18+00:00,2015-09-02 15:10:25+00:00 +C1183,prepare delivery,2015-09-02 15:40:23+00:00,2015-09-02 15:13:16+00:00 +C1137,send reminder,2015-09-02 15:41:14+00:00,2015-09-02 15:25:27+00:00 +C1138,prepare delivery,2015-09-02 15:32:13+00:00,2015-09-02 15:28:17+00:00 +C1040,prepare delivery,2015-09-02 15:36:03+00:00,2015-09-02 15:29:44+00:00 +C1032,confirm payment,2015-09-02 15:45:18+00:00,2015-09-02 15:37:53+00:00 +C1106,send reminder,2015-09-02 16:12:27+00:00,2015-09-02 16:00:06+00:00 +C1182,pay,2015-09-02 16:05:13+00:00,2015-09-02 16:00:18+00:00 +C1258,send invoice,2015-09-02 16:13:02+00:00,2015-09-02 16:09:33+00:00 +C1191,prepare delivery,2015-09-02 16:39:05+00:00,2015-09-02 16:13:29+00:00 +C1053,prepare delivery,2015-09-02 19:43:14+00:00,2015-09-02 17:03:17+00:00 +C1157,pay,2015-09-02 17:15:29+00:00,2015-09-02 17:10:56+00:00 +C1095,cancel order,2015-09-02 17:27:45+00:00,2015-09-02 17:13:11+00:00 +C1098,confirm payment,2015-09-02 17:24:38+00:00,2015-09-02 17:17:31+00:00 +C1078,make delivery,2015-09-02 17:52:56+00:00,2015-09-02 17:24:15+00:00 +C1139,send reminder,2015-09-02 17:57:47+00:00,2015-09-02 17:40:06+00:00 +C1240,pay,2015-09-02 18:33:16+00:00,2015-09-02 18:20:12+00:00 +C1120,prepare delivery,2015-09-02 18:45:32+00:00,2015-09-02 18:41:40+00:00 +C1177,make delivery,2015-09-02 19:36:17+00:00,2015-09-02 18:43:31+00:00 +C1212,send reminder,2015-09-02 21:24:05+00:00,2015-09-02 21:00:43+00:00 +C1174,confirm payment,2015-09-03 08:29:03+00:00,2015-09-03 08:21:39+00:00 +C1132,send reminder,2015-09-03 09:28:17+00:00,2015-09-03 08:48:48+00:00 +C1133,make delivery,2015-09-03 09:46:14+00:00,2015-09-03 09:20:20+00:00 +C1165,prepare delivery,2015-09-03 09:33:36+00:00,2015-09-03 09:26:03+00:00 +C1130,pay,2015-09-03 09:35:45+00:00,2015-09-03 09:27:11+00:00 +C1203,pay,2015-09-03 09:39:12+00:00,2015-09-03 09:27:24+00:00 +C1112,send reminder,2015-09-03 10:11:56+00:00,2015-09-03 09:55:42+00:00 +C1222,make delivery,2015-09-03 10:46:14+00:00,2015-09-03 10:23:01+00:00 +C1172,make delivery,2015-09-03 10:42:31+00:00,2015-09-03 10:27:11+00:00 +C1174,make delivery,2015-09-03 11:10:26+00:00,2015-09-03 10:37:58+00:00 +C1190,send reminder,2015-09-03 11:04:14+00:00,2015-09-03 10:49:39+00:00 +C1179,send reminder,2015-09-03 11:42:11+00:00,2015-09-03 10:58:18+00:00 +C1248,send reminder,2015-09-03 11:08:50+00:00,2015-09-03 11:00:09+00:00 +C1209,pay,2015-09-03 11:11:37+00:00,2015-09-03 11:02:47+00:00 +C1214,send reminder,2015-09-03 11:29:03+00:00,2015-09-03 11:05:05+00:00 +C1115,send reminder,2015-09-03 11:54:48+00:00,2015-09-03 11:10:37+00:00 +C1117,pay,2015-09-03 11:20:22+00:00,2015-09-03 11:12:02+00:00 +C1110,send reminder,2015-09-03 11:34:27+00:00,2015-09-03 11:12:34+00:00 +C1144,confirm payment,2015-09-03 11:33:51+00:00,2015-09-03 11:14:25+00:00 +C1069,prepare delivery,2015-09-03 11:47:32+00:00,2015-09-03 11:20:43+00:00 +C1041,make delivery,2015-09-03 12:57:17+00:00,2015-09-03 11:25:15+00:00 +C1078,confirm payment,2015-09-03 11:41:23+00:00,2015-09-03 11:28:56+00:00 +C1207,make delivery,2015-09-03 12:00:01+00:00,2015-09-03 11:36:37+00:00 +C1211,make delivery,2015-09-03 12:09:45+00:00,2015-09-03 11:43:30+00:00 +C1009,confirm payment,2015-09-03 11:53:37+00:00,2015-09-03 11:45:50+00:00 +C1172,confirm payment,2015-09-03 11:58:29+00:00,2015-09-03 11:47:48+00:00 +C1087,make delivery,2015-09-03 13:28:34+00:00,2015-09-03 11:49:49+00:00 +C1197,prepare delivery,2015-09-03 11:54:27+00:00,2015-09-03 11:51:33+00:00 +C1160,send reminder,2015-09-03 12:02:14+00:00,2015-09-03 11:55:05+00:00 +C1173,make delivery,2015-09-03 13:31:53+00:00,2015-09-03 11:58:51+00:00 +C1201,prepare delivery,2015-09-03 14:29:03+00:00,2015-09-03 12:07:42+00:00 +C1134,make delivery,2015-09-03 12:50:14+00:00,2015-09-03 12:17:47+00:00 +C1193,prepare delivery,2015-09-03 12:29:17+00:00,2015-09-03 12:21:34+00:00 +C1215,prepare delivery,2015-09-03 12:30:58+00:00,2015-09-03 12:27:07+00:00 +C1186,confirm payment,2015-09-03 12:44:01+00:00,2015-09-03 12:36:46+00:00 +C1217,make delivery,2015-09-03 13:09:09+00:00,2015-09-03 12:39:33+00:00 +C1074,prepare delivery,2015-09-03 12:47:52+00:00,2015-09-03 12:40:51+00:00 +C1183,confirm payment,2015-09-03 12:49:57+00:00,2015-09-03 12:41:21+00:00 +C1144,make delivery,2015-09-03 13:24:04+00:00,2015-09-03 12:46:42+00:00 +C1194,pay,2015-09-03 12:56:05+00:00,2015-09-03 12:50:02+00:00 +C1138,confirm payment,2015-09-03 13:30:35+00:00,2015-09-03 13:03:23+00:00 +C1040,confirm payment,2015-09-03 13:28:13+00:00,2015-09-03 13:10:21+00:00 +C1211,confirm payment,2015-09-03 13:39:56+00:00,2015-09-03 13:35:51+00:00 +C1202,pay,2015-09-03 13:42:02+00:00,2015-09-03 13:36:41+00:00 +C1223,send reminder,2015-09-03 14:10:04+00:00,2015-09-03 13:52:47+00:00 +C1138,make delivery,2015-09-03 14:25:15+00:00,2015-09-03 13:58:36+00:00 +C1009,make delivery,2015-09-03 14:13:30+00:00,2015-09-03 14:02:06+00:00 +C1133,confirm payment,2015-09-03 14:32:21+00:00,2015-09-03 14:25:13+00:00 +C1156,send reminder,2015-09-03 15:20:34+00:00,2015-09-03 14:58:51+00:00 +C1186,make delivery,2015-09-03 16:19:17+00:00,2015-09-03 15:00:30+00:00 +C1113,send reminder,2015-09-03 15:26:47+00:00,2015-09-03 15:06:56+00:00 +C1040,make delivery,2015-09-03 15:23:12+00:00,2015-09-03 15:09:07+00:00 +C1183,make delivery,2015-09-03 15:47:03+00:00,2015-09-03 15:21:39+00:00 +C1218,send reminder,2015-09-03 15:41:11+00:00,2015-09-03 15:23:37+00:00 +C1171,send reminder,2015-09-03 15:48:29+00:00,2015-09-03 15:30:04+00:00 +C1121,send reminder,2015-09-03 15:57:49+00:00,2015-09-03 15:44:04+00:00 +C1177,confirm payment,2015-09-03 15:59:09+00:00,2015-09-03 15:51:11+00:00 +C1112,cancel order,2015-09-03 16:10:07+00:00,2015-09-03 15:54:31+00:00 +C1120,make delivery,2015-09-03 17:31:44+00:00,2015-09-03 15:56:12+00:00 +C1158,pay,2015-09-03 16:05:35+00:00,2015-09-03 15:59:51+00:00 +C1053,confirm payment,2015-09-03 16:15:28+00:00,2015-09-03 16:07:12+00:00 +C1148,pay,2015-09-03 16:26:13+00:00,2015-09-03 16:13:43+00:00 +C1137,cancel order,2015-09-03 16:32:50+00:00,2015-09-03 16:21:21+00:00 +C1191,make delivery,2015-09-03 16:59:03+00:00,2015-09-03 16:27:31+00:00 +C1155,pay,2015-09-03 16:44:29+00:00,2015-09-03 16:38:05+00:00 +C1041,confirm payment,2015-09-03 16:50:18+00:00,2015-09-03 16:44:14+00:00 +C1191,confirm payment,2015-09-03 21:29:42+00:00,2015-09-03 16:54:23+00:00 +C1173,confirm payment,2015-09-03 17:07:52+00:00,2015-09-03 16:57:03+00:00 +C1165,confirm payment,2015-09-03 17:10:50+00:00,2015-09-03 17:01:55+00:00 +C1087,confirm payment,2015-09-03 17:14:12+00:00,2015-09-03 17:05:36+00:00 +C1110,cancel order,2015-09-03 17:18:01+00:00,2015-09-03 17:06:47+00:00 +C1132,cancel order,2015-09-03 17:42:14+00:00,2015-09-03 17:27:26+00:00 +C1053,make delivery,2015-09-03 18:00:25+00:00,2015-09-03 17:46:17+00:00 +C1222,confirm payment,2015-09-03 18:07:30+00:00,2015-09-03 18:02:26+00:00 +C1213,send reminder,2015-09-03 19:27:21+00:00,2015-09-03 19:12:11+00:00 +C1134,confirm payment,2015-09-03 19:33:45+00:00,2015-09-03 19:24:57+00:00 +C1217,confirm payment,2015-09-03 20:04:15+00:00,2015-09-03 19:54:05+00:00 +C1230,prepare delivery,2015-09-03 22:19:38+00:00,2015-09-03 19:55:39+00:00 +C1229,send reminder,2015-09-03 20:45:23+00:00,2015-09-03 20:34:22+00:00 +C1128,send reminder,2015-09-03 22:22:55+00:00,2015-09-03 21:50:00+00:00 +C1219,send reminder,2015-09-04 10:22:06+00:00,2015-09-04 09:42:19+00:00 +C1145,send reminder,2015-09-04 10:18:34+00:00,2015-09-04 10:06:17+00:00 +C1200,prepare delivery,2015-09-04 10:16:40+00:00,2015-09-04 10:09:49+00:00 +C1165,make delivery,2015-09-04 10:23:43+00:00,2015-09-04 10:11:59+00:00 +C1115,cancel order,2015-09-04 10:34:43+00:00,2015-09-04 10:15:40+00:00 +C1124,prepare delivery,2015-09-04 10:26:59+00:00,2015-09-04 10:19:08+00:00 +C1244,send reminder,2015-09-04 10:33:41+00:00,2015-09-04 10:19:44+00:00 +C1220,prepare delivery,2015-09-04 13:19:49+00:00,2015-09-04 10:52:50+00:00 +C1198,prepare delivery,2015-09-04 11:02:28+00:00,2015-09-04 10:55:19+00:00 +C1085,prepare delivery,2015-09-04 11:13:08+00:00,2015-09-04 11:09:18+00:00 +C1127,prepare delivery,2015-09-04 11:19:27+00:00,2015-09-04 11:10:04+00:00 +C1237,pay,2015-09-04 11:25:07+00:00,2015-09-04 11:18:47+00:00 +C1069,make delivery,2015-09-04 11:35:02+00:00,2015-09-04 11:22:38+00:00 +C1197,confirm payment,2015-09-04 11:35:15+00:00,2015-09-04 11:27:24+00:00 +C1201,make delivery,2015-09-04 11:52:05+00:00,2015-09-04 11:37:43+00:00 +C1193,make delivery,2015-09-04 12:06:11+00:00,2015-09-04 11:38:23+00:00 +C1067,prepare delivery,2015-09-04 11:48:24+00:00,2015-09-04 11:40:42+00:00 +C1074,confirm payment,2015-09-04 12:11:54+00:00,2015-09-04 11:52:55+00:00 +C1164,send reminder,2015-09-04 12:36:12+00:00,2015-09-04 12:22:50+00:00 +C1207,confirm payment,2015-09-04 12:36:21+00:00,2015-09-04 12:27:15+00:00 +C1225,prepare delivery,2015-09-04 12:58:47+00:00,2015-09-04 12:50:55+00:00 +C1074,make delivery,2015-09-04 13:30:35+00:00,2015-09-04 13:03:45+00:00 +C1216,prepare delivery,2015-09-04 13:11:23+00:00,2015-09-04 13:04:04+00:00 +C1105,prepare delivery,2015-09-04 13:13:23+00:00,2015-09-04 13:10:29+00:00 +C1232,pay,2015-09-04 13:17:42+00:00,2015-09-04 13:11:26+00:00 +C1236,pay,2015-09-04 13:17:16+00:00,2015-09-04 13:12:27+00:00 +C1233,pay,2015-09-04 13:53:54+00:00,2015-09-04 13:51:26+00:00 +C1221,send reminder,2015-09-04 14:29:01+00:00,2015-09-04 13:52:54+00:00 +C1196,pay,2015-09-04 14:48:54+00:00,2015-09-04 14:44:55+00:00 +C1113,cancel order,2015-09-04 14:55:27+00:00,2015-09-04 14:47:57+00:00 +C1064,prepare delivery,2015-09-04 14:59:01+00:00,2015-09-04 14:56:00+00:00 +C1157,prepare delivery,2015-09-04 15:12:01+00:00,2015-09-04 15:05:41+00:00 +C1215,make delivery,2015-09-04 16:41:36+00:00,2015-09-04 15:07:47+00:00 +C1199,prepare delivery,2015-09-04 15:13:29+00:00,2015-09-04 15:09:29+00:00 +C1197,make delivery,2015-09-04 15:59:26+00:00,2015-09-04 15:30:57+00:00 +C1228,prepare delivery,2015-09-04 18:07:42+00:00,2015-09-04 15:40:31+00:00 +C1215,confirm payment,2015-09-04 16:24:59+00:00,2015-09-04 16:17:53+00:00 +C1136,prepare delivery,2015-09-04 19:12:03+00:00,2015-09-04 16:33:20+00:00 +C1120,confirm payment,2015-09-04 16:39:25+00:00,2015-09-04 16:35:00+00:00 +C1201,confirm payment,2015-09-04 17:07:30+00:00,2015-09-04 17:03:23+00:00 +C1130,prepare delivery,2015-09-04 17:15:48+00:00,2015-09-04 17:08:41+00:00 +C1152,send reminder,2015-09-04 17:28:49+00:00,2015-09-04 17:11:50+00:00 +C1123,send reminder,2015-09-04 17:35:27+00:00,2015-09-04 17:12:42+00:00 +C1231,prepare delivery,2015-09-04 17:49:31+00:00,2015-09-04 17:42:02+00:00 +C1226,pay,2015-09-04 18:59:19+00:00,2015-09-04 18:54:37+00:00 +C1246,send reminder,2015-09-04 19:27:38+00:00,2015-09-04 19:04:00+00:00 +C1249,pay,2015-09-05 17:48:01+00:00,2015-09-05 17:44:25+00:00 +C1200,make delivery,2015-09-07 09:27:04+00:00,2015-09-07 08:33:54+00:00 +C1241,send reminder,2015-09-07 09:50:49+00:00,2015-09-07 09:23:14+00:00 +C1085,make delivery,2015-09-07 09:43:16+00:00,2015-09-07 09:33:51+00:00 +C1106,pay,2015-09-07 10:00:34+00:00,2015-09-07 09:45:55+00:00 +C1234,send reminder,2015-09-07 09:59:18+00:00,2015-09-07 09:52:24+00:00 +C1124,make delivery,2015-09-07 10:24:07+00:00,2015-09-07 10:00:56+00:00 +C1124,confirm payment,2015-09-07 10:19:05+00:00,2015-09-07 10:11:11+00:00 +C1203,prepare delivery,2015-09-07 10:17:40+00:00,2015-09-07 10:11:41+00:00 +C1220,make delivery,2015-09-07 11:17:25+00:00,2015-09-07 10:19:12+00:00 +C1067,confirm payment,2015-09-07 10:46:35+00:00,2015-09-07 10:33:50+00:00 +C1216,make delivery,2015-09-07 10:46:29+00:00,2015-09-07 10:34:30+00:00 +C1170,send reminder,2015-09-07 11:04:21+00:00,2015-09-07 10:51:04+00:00 +C1069,confirm payment,2015-09-07 11:20:28+00:00,2015-09-07 11:11:31+00:00 +C1198,make delivery,2015-09-07 11:22:07+00:00,2015-09-07 11:11:49+00:00 +C1224,send reminder,2015-09-07 11:37:41+00:00,2015-09-07 11:19:57+00:00 +C1142,prepare delivery,2015-09-07 11:31:06+00:00,2015-09-07 11:24:31+00:00 +C1193,confirm payment,2015-09-07 11:41:37+00:00,2015-09-07 11:34:24+00:00 +C1220,confirm payment,2015-09-07 16:18:22+00:00,2015-09-07 11:35:13+00:00 +C1225,make delivery,2015-09-07 12:54:41+00:00,2015-09-07 11:36:14+00:00 +C1218,pay,2015-09-07 11:47:53+00:00,2015-09-07 11:39:27+00:00 +C1225,confirm payment,2015-09-07 12:04:33+00:00,2015-09-07 11:58:58+00:00 +C1180,prepare delivery,2015-09-07 12:11:17+00:00,2015-09-07 12:03:36+00:00 +C1247,send reminder,2015-09-07 12:27:33+00:00,2015-09-07 12:05:50+00:00 +C1230,make delivery,2015-09-07 13:48:36+00:00,2015-09-07 12:21:47+00:00 +C1250,pay,2015-09-07 12:35:47+00:00,2015-09-07 12:29:22+00:00 +C1162,pay,2015-09-07 13:23:21+00:00,2015-09-07 13:15:50+00:00 +C1150,send reminder,2015-09-07 13:50:35+00:00,2015-09-07 13:30:35+00:00 +C1254,send reminder,2015-09-07 13:55:10+00:00,2015-09-07 13:47:41+00:00 +C1105,make delivery,2015-09-07 14:36:17+00:00,2015-09-07 14:19:32+00:00 +C1266,pay,2015-09-07 17:23:56+00:00,2015-09-07 14:20:06+00:00 +C1067,make delivery,2015-09-07 15:32:02+00:00,2015-09-07 14:35:07+00:00 +C1127,make delivery,2015-09-07 16:31:31+00:00,2015-09-07 14:55:33+00:00 +C1127,confirm payment,2015-09-07 15:03:13+00:00,2015-09-07 14:55:40+00:00 +C1139,pay,2015-09-07 15:07:55+00:00,2015-09-07 15:02:30+00:00 +C1126,send reminder,2015-09-07 15:33:15+00:00,2015-09-07 15:11:37+00:00 +C1136,make delivery,2015-09-07 15:48:02+00:00,2015-09-07 15:11:45+00:00 +C1242,send reminder,2015-09-07 15:25:27+00:00,2015-09-07 15:12:57+00:00 +C1171,pay,2015-09-07 15:20:10+00:00,2015-09-07 15:17:55+00:00 +C1064,make delivery,2015-09-07 15:39:04+00:00,2015-09-07 15:24:08+00:00 +C1216,confirm payment,2015-09-07 16:05:35+00:00,2015-09-07 15:42:59+00:00 +C1231,make delivery,2015-09-07 15:59:27+00:00,2015-09-07 15:49:48+00:00 +C1085,confirm payment,2015-09-07 16:00:51+00:00,2015-09-07 15:52:42+00:00 +C1257,send reminder,2015-09-07 16:34:07+00:00,2015-09-07 16:16:42+00:00 +C1164,cancel order,2015-09-07 16:47:01+00:00,2015-09-07 16:30:06+00:00 +C1157,make delivery,2015-09-07 16:57:03+00:00,2015-09-07 16:30:15+00:00 +C1243,prepare delivery,2015-09-07 16:54:18+00:00,2015-09-07 16:47:31+00:00 +C1228,make delivery,2015-09-07 17:43:15+00:00,2015-09-07 17:29:00+00:00 +C1263,pay,2015-09-07 18:29:15+00:00,2015-09-07 18:24:14+00:00 +C1199,make delivery,2015-09-07 19:04:50+00:00,2015-09-07 18:37:14+00:00 +C1251,pay,2015-09-07 19:19:21+00:00,2015-09-07 19:05:46+00:00 +C1159,send reminder,2015-09-07 21:14:35+00:00,2015-09-07 20:47:09+00:00 +C1245,send reminder,2015-09-08 10:05:32+00:00,2015-09-08 09:43:11+00:00 +C1142,make delivery,2015-09-08 10:15:37+00:00,2015-09-08 10:01:42+00:00 +C1198,confirm payment,2015-09-08 13:32:36+00:00,2015-09-08 10:07:28+00:00 +C1210,send reminder,2015-09-08 10:44:27+00:00,2015-09-08 10:15:44+00:00 +C1130,make delivery,2015-09-08 11:41:04+00:00,2015-09-08 10:17:46+00:00 +C1230,confirm payment,2015-09-08 10:23:19+00:00,2015-09-08 10:17:55+00:00 +C1136,confirm payment,2015-09-08 10:55:00+00:00,2015-09-08 10:32:43+00:00 +C1200,confirm payment,2015-09-08 10:46:43+00:00,2015-09-08 10:39:42+00:00 +C1235,send reminder,2015-09-08 11:28:48+00:00,2015-09-08 11:05:25+00:00 +C1157,confirm payment,2015-09-08 11:49:05+00:00,2015-09-08 11:32:23+00:00 +C1247,pay,2015-09-08 11:39:22+00:00,2015-09-08 11:33:19+00:00 +C1154,send reminder,2015-09-08 12:00:03+00:00,2015-09-08 11:37:13+00:00 +C1188,send reminder,2015-09-08 11:52:22+00:00,2015-09-08 11:43:06+00:00 +C1199,confirm payment,2015-09-08 11:51:53+00:00,2015-09-08 11:44:00+00:00 +C1208,send reminder,2015-09-08 12:05:08+00:00,2015-09-08 11:47:50+00:00 +C1105,confirm payment,2015-09-08 11:58:22+00:00,2015-09-08 11:51:28+00:00 +C1227,pay,2015-09-08 12:04:13+00:00,2015-09-08 11:57:23+00:00 +C1231,confirm payment,2015-09-08 12:04:13+00:00,2015-09-08 12:01:26+00:00 +C1189,send reminder,2015-09-08 12:43:20+00:00,2015-09-08 12:17:25+00:00 +C1080,prepare delivery,2015-09-08 12:27:20+00:00,2015-09-08 12:23:31+00:00 +C1170,cancel order,2015-09-08 13:15:35+00:00,2015-09-08 12:39:39+00:00 +C1206,send reminder,2015-09-08 13:06:35+00:00,2015-09-08 12:45:39+00:00 +C1141,send reminder,2015-09-08 13:41:42+00:00,2015-09-08 13:09:35+00:00 +C1203,make delivery,2015-09-08 13:41:34+00:00,2015-09-08 13:18:47+00:00 +C1180,make delivery,2015-09-08 13:29:03+00:00,2015-09-08 13:19:18+00:00 +C1205,send reminder,2015-09-08 14:57:45+00:00,2015-09-08 14:32:53+00:00 +C1238,pay,2015-09-08 15:14:18+00:00,2015-09-08 14:52:59+00:00 +C1224,pay,2015-09-08 15:07:13+00:00,2015-09-08 15:03:35+00:00 +C1248,pay,2015-09-08 15:13:45+00:00,2015-09-08 15:07:53+00:00 +C1130,confirm payment,2015-09-08 15:30:24+00:00,2015-09-08 15:25:39+00:00 +C1141,cancel order,2015-09-08 15:49:42+00:00,2015-09-08 15:33:07+00:00 +C1228,confirm payment,2015-09-08 16:09:13+00:00,2015-09-08 15:55:58+00:00 +C1064,confirm payment,2015-09-08 16:28:17+00:00,2015-09-08 16:19:07+00:00 +C1240,prepare delivery,2015-09-08 16:39:05+00:00,2015-09-08 16:31:33+00:00 +C1203,confirm payment,2015-09-08 16:38:47+00:00,2015-09-08 16:31:39+00:00 +C1180,confirm payment,2015-09-08 16:39:58+00:00,2015-09-08 16:34:10+00:00 +C1219,pay,2015-09-08 17:03:18+00:00,2015-09-08 16:58:58+00:00 +C1179,pay,2015-09-08 19:09:00+00:00,2015-09-08 17:07:37+00:00 +C1243,make delivery,2015-09-08 18:35:26+00:00,2015-09-08 17:12:07+00:00 +C1252,pay,2015-09-08 17:25:18+00:00,2015-09-08 17:18:54+00:00 +C1160,pay,2015-09-08 17:33:14+00:00,2015-09-08 17:28:07+00:00 +C1234,pay,2015-09-08 17:50:18+00:00,2015-09-08 17:43:54+00:00 +C1167,send reminder,2015-09-08 18:04:48+00:00,2015-09-08 17:45:16+00:00 +C1175,send reminder,2015-09-08 18:04:30+00:00,2015-09-08 17:45:41+00:00 +C1117,prepare delivery,2015-09-08 18:09:02+00:00,2015-09-08 18:05:30+00:00 +C1145,pay,2015-09-08 20:14:19+00:00,2015-09-08 20:08:05+00:00 +C1255,pay,2015-09-08 20:30:08+00:00,2015-09-08 20:26:53+00:00 +C1123,pay,2015-09-09 09:05:40+00:00,2015-09-09 09:00:28+00:00 +C1142,confirm payment,2015-09-09 09:31:28+00:00,2015-09-09 09:23:41+00:00 +C1257,pay,2015-09-09 09:48:00+00:00,2015-09-09 09:40:15+00:00 +C1204,send reminder,2015-09-09 10:27:08+00:00,2015-09-09 10:19:49+00:00 +C1080,make delivery,2015-09-09 10:40:50+00:00,2015-09-09 10:28:55+00:00 +C1241,pay,2015-09-09 11:08:13+00:00,2015-09-09 11:04:53+00:00 +C1182,prepare delivery,2015-09-09 11:11:02+00:00,2015-09-09 11:07:16+00:00 +C1260,send reminder,2015-09-09 11:44:12+00:00,2015-09-09 11:24:53+00:00 +C1218,prepare delivery,2015-09-09 11:32:30+00:00,2015-09-09 11:25:21+00:00 +C1262,send reminder,2015-09-09 12:03:19+00:00,2015-09-09 11:26:02+00:00 +C1250,prepare delivery,2015-09-09 13:53:45+00:00,2015-09-09 11:31:51+00:00 +C1243,confirm payment,2015-09-09 11:56:42+00:00,2015-09-09 11:53:12+00:00 +C1209,prepare delivery,2015-09-09 12:19:51+00:00,2015-09-09 12:15:54+00:00 +C1265,pay,2015-09-09 12:33:22+00:00,2015-09-09 12:27:02+00:00 +C1264,send reminder,2015-09-09 13:20:08+00:00,2015-09-09 12:45:17+00:00 +C1226,prepare delivery,2015-09-09 12:56:19+00:00,2015-09-09 12:53:10+00:00 +C1128,pay,2015-09-09 13:41:08+00:00,2015-09-09 13:37:53+00:00 +C1184,send reminder,2015-09-09 14:37:37+00:00,2015-09-09 14:14:50+00:00 +C1258,send reminder,2015-09-09 14:38:32+00:00,2015-09-09 14:18:48+00:00 +C1240,make delivery,2015-09-09 15:23:41+00:00,2015-09-09 14:44:04+00:00 +C1121,pay,2015-09-09 14:49:21+00:00,2015-09-09 14:47:08+00:00 +C1213,pay,2015-09-09 15:12:21+00:00,2015-09-09 15:04:45+00:00 +C1117,confirm payment,2015-09-09 15:13:52+00:00,2015-09-09 15:06:27+00:00 +C1154,pay,2015-09-09 15:16:54+00:00,2015-09-09 15:13:13+00:00 +C1150,cancel order,2015-09-09 15:44:07+00:00,2015-09-09 15:23:21+00:00 +C1251,prepare delivery,2015-09-09 18:07:16+00:00,2015-09-09 15:45:34+00:00 +C1237,prepare delivery,2015-09-09 15:54:05+00:00,2015-09-09 15:46:49+00:00 +C1117,make delivery,2015-09-09 16:09:24+00:00,2015-09-09 15:58:46+00:00 +C1166,send reminder,2015-09-09 16:44:32+00:00,2015-09-09 16:30:50+00:00 +C1253,pay,2015-09-09 16:41:59+00:00,2015-09-09 16:35:05+00:00 +C1208,pay,2015-09-09 19:32:53+00:00,2015-09-09 17:01:36+00:00 +C1175,cancel order,2015-09-09 17:32:25+00:00,2015-09-09 17:19:18+00:00 +C1158,prepare delivery,2015-09-09 19:43:20+00:00,2015-09-09 17:20:16+00:00 +C1167,pay,2015-09-09 17:28:24+00:00,2015-09-09 17:22:28+00:00 +C1205,cancel order,2015-09-09 17:36:22+00:00,2015-09-09 17:26:12+00:00 +C1159,cancel order,2015-09-09 17:36:11+00:00,2015-09-09 17:30:10+00:00 +C1244,pay,2015-09-09 17:41:53+00:00,2015-09-09 17:38:07+00:00 +C1194,prepare delivery,2015-09-09 17:42:19+00:00,2015-09-09 17:38:33+00:00 +C1189,pay,2015-09-09 17:56:42+00:00,2015-09-09 17:51:12+00:00 +C1171,prepare delivery,2015-09-09 18:17:45+00:00,2015-09-09 18:10:25+00:00 +C1196,prepare delivery,2015-09-09 18:32:43+00:00,2015-09-09 18:25:10+00:00 +C1239,pay,2015-09-09 18:48:59+00:00,2015-09-09 18:42:40+00:00 +C1256,pay,2015-09-09 18:53:02+00:00,2015-09-09 18:45:56+00:00 +C1236,prepare delivery,2015-09-09 20:21:33+00:00,2015-09-09 20:14:33+00:00 +C1259,pay,2015-09-09 22:20:37+00:00,2015-09-09 22:12:02+00:00 +C1248,prepare delivery,2015-09-10 11:40:54+00:00,2015-09-10 09:14:14+00:00 +C1218,confirm payment,2015-09-10 09:24:25+00:00,2015-09-10 09:16:16+00:00 +C1227,prepare delivery,2015-09-10 09:40:59+00:00,2015-09-10 09:33:42+00:00 +C1182,make delivery,2015-09-10 10:11:51+00:00,2015-09-10 09:43:36+00:00 +C1214,send reminder,2015-09-10 09:52:19+00:00,2015-09-10 09:44:15+00:00 +C1266,prepare delivery,2015-09-10 10:00:19+00:00,2015-09-10 09:52:23+00:00 +C1218,make delivery,2015-09-10 10:06:44+00:00,2015-09-10 09:52:44+00:00 +C1190,send reminder,2015-09-10 10:32:38+00:00,2015-09-10 10:18:29+00:00 +C1206,cancel order,2015-09-10 10:40:48+00:00,2015-09-10 10:22:49+00:00 +C1212,send reminder,2015-09-10 11:22:20+00:00,2015-09-10 10:58:56+00:00 +C1250,make delivery,2015-09-10 11:15:44+00:00,2015-09-10 11:00:12+00:00 +C1126,pay,2015-09-10 11:24:08+00:00,2015-09-10 11:17:25+00:00 +C1080,confirm payment,2015-09-10 11:35:02+00:00,2015-09-10 11:28:12+00:00 +C1209,confirm payment,2015-09-10 12:03:42+00:00,2015-09-10 11:54:11+00:00 +C1226,confirm payment,2015-09-10 12:24:13+00:00,2015-09-10 12:18:31+00:00 +C1212,cancel order,2015-09-10 12:32:54+00:00,2015-09-10 12:21:27+00:00 +C1209,make delivery,2015-09-10 12:54:33+00:00,2015-09-10 12:29:55+00:00 +C1226,make delivery,2015-09-10 12:45:45+00:00,2015-09-10 12:31:12+00:00 +C1240,confirm payment,2015-09-10 12:44:33+00:00,2015-09-10 12:35:39+00:00 +C1148,prepare delivery,2015-09-10 15:01:25+00:00,2015-09-10 12:37:49+00:00 +C1263,prepare delivery,2015-09-10 12:45:26+00:00,2015-09-10 12:41:36+00:00 +C1223,send reminder,2015-09-10 13:49:53+00:00,2015-09-10 13:41:00+00:00 +C1234,prepare delivery,2015-09-10 14:45:47+00:00,2015-09-10 14:38:33+00:00 +C1252,prepare delivery,2015-09-10 14:56:13+00:00,2015-09-10 14:52:25+00:00 +C1156,send reminder,2015-09-10 15:39:16+00:00,2015-09-10 15:16:38+00:00 +C1202,prepare delivery,2015-09-10 15:28:37+00:00,2015-09-10 15:25:29+00:00 +C1152,pay,2015-09-10 15:42:15+00:00,2015-09-10 15:39:09+00:00 +C1249,prepare delivery,2015-09-10 16:15:18+00:00,2015-09-10 16:05:45+00:00 +C1194,make delivery,2015-09-10 16:30:15+00:00,2015-09-10 16:13:55+00:00 +C1248,confirm payment,2015-09-10 16:24:15+00:00,2015-09-10 16:19:57+00:00 +C1251,confirm payment,2015-09-10 16:47:34+00:00,2015-09-10 16:35:46+00:00 +C1251,make delivery,2015-09-10 16:55:58+00:00,2015-09-10 16:40:01+00:00 +C1237,make delivery,2015-09-10 16:59:42+00:00,2015-09-10 16:45:41+00:00 +C1194,confirm payment,2015-09-10 16:52:55+00:00,2015-09-10 16:45:54+00:00 +C1171,confirm payment,2015-09-10 16:59:33+00:00,2015-09-10 16:51:44+00:00 +C1236,confirm payment,2015-09-10 16:59:41+00:00,2015-09-10 16:52:58+00:00 +C1158,make delivery,2015-09-10 17:06:14+00:00,2015-09-10 16:57:05+00:00 +C1236,make delivery,2015-09-10 17:09:36+00:00,2015-09-10 17:00:21+00:00 +C1196,make delivery,2015-09-10 17:29:45+00:00,2015-09-10 17:00:49+00:00 +C1229,send reminder,2015-09-10 17:18:26+00:00,2015-09-10 17:01:03+00:00 +C1190,cancel order,2015-09-10 17:08:51+00:00,2015-09-10 17:03:19+00:00 +C1237,confirm payment,2015-09-10 18:03:24+00:00,2015-09-10 17:44:12+00:00 +C1171,make delivery,2015-09-10 18:52:28+00:00,2015-09-10 18:23:55+00:00 +C1184,cancel order,2015-09-10 18:45:23+00:00,2015-09-10 18:30:59+00:00 +C1248,make delivery,2015-09-10 18:57:59+00:00,2015-09-10 18:34:09+00:00 +C1188,cancel order,2015-09-10 18:43:14+00:00,2015-09-10 18:35:35+00:00 +C1155,prepare delivery,2015-09-10 19:25:30+00:00,2015-09-10 18:59:48+00:00 +C1238,prepare delivery,2015-09-10 19:06:24+00:00,2015-09-10 19:02:24+00:00 +C1227,make delivery,2015-09-10 21:28:16+00:00,2015-09-10 20:09:10+00:00 +C1182,confirm payment,2015-09-10 21:13:44+00:00,2015-09-10 20:58:10+00:00 +C1266,make delivery,2015-09-11 10:50:02+00:00,2015-09-11 10:34:55+00:00 +C1232,prepare delivery,2015-09-11 10:40:15+00:00,2015-09-11 10:37:09+00:00 +C1158,confirm payment,2015-09-11 10:44:58+00:00,2015-09-11 10:40:23+00:00 +C1233,prepare delivery,2015-09-11 11:24:04+00:00,2015-09-11 10:59:04+00:00 +C1250,confirm payment,2015-09-11 11:07:37+00:00,2015-09-11 10:59:23+00:00 +C1247,prepare delivery,2015-09-11 11:43:16+00:00,2015-09-11 11:39:21+00:00 +C1263,make delivery,2015-09-11 11:58:38+00:00,2015-09-11 11:46:12+00:00 +C1154,prepare delivery,2015-09-11 12:00:27+00:00,2015-09-11 11:53:12+00:00 +C1257,prepare delivery,2015-09-11 14:39:31+00:00,2015-09-11 12:09:08+00:00 +C1196,confirm payment,2015-09-11 12:25:16+00:00,2015-09-11 12:17:55+00:00 +C1256,prepare delivery,2015-09-11 12:27:16+00:00,2015-09-11 12:23:19+00:00 +C1160,prepare delivery,2015-09-11 12:30:03+00:00,2015-09-11 12:26:12+00:00 +C1219,prepare delivery,2015-09-11 13:17:00+00:00,2015-09-11 13:09:58+00:00 +C1234,make delivery,2015-09-11 13:44:55+00:00,2015-09-11 13:29:23+00:00 +C1202,make delivery,2015-09-11 14:23:44+00:00,2015-09-11 14:07:02+00:00 +C1252,make delivery,2015-09-11 15:58:14+00:00,2015-09-11 14:18:21+00:00 +C1148,make delivery,2015-09-11 16:28:10+00:00,2015-09-11 15:10:09+00:00 +C1167,prepare delivery,2015-09-11 15:33:23+00:00,2015-09-11 15:26:09+00:00 +C1249,make delivery,2015-09-11 16:26:44+00:00,2015-09-11 16:03:48+00:00 +C1252,confirm payment,2015-09-11 16:24:13+00:00,2015-09-11 16:13:31+00:00 +C1249,confirm payment,2015-09-11 16:26:50+00:00,2015-09-11 16:20:45+00:00 +C1260,pay,2015-09-11 16:41:51+00:00,2015-09-11 16:35:27+00:00 +C1139,prepare delivery,2015-09-11 19:09:06+00:00,2015-09-11 16:43:45+00:00 +C1126,prepare delivery,2015-09-11 17:18:00+00:00,2015-09-11 17:15:01+00:00 +C1221,send reminder,2015-09-11 17:49:20+00:00,2015-09-11 17:37:09+00:00 +C1202,confirm payment,2015-09-11 18:40:00+00:00,2015-09-11 18:32:47+00:00 +C1155,confirm payment,2015-09-11 18:51:11+00:00,2015-09-11 18:40:06+00:00 +C1255,prepare delivery,2015-09-11 21:46:23+00:00,2015-09-11 21:39:18+00:00 +C1224,prepare delivery,2015-09-14 09:31:25+00:00,2015-09-14 09:24:09+00:00 +C1238,confirm payment,2015-09-14 09:36:33+00:00,2015-09-14 09:31:47+00:00 +C1246,send reminder,2015-09-14 10:19:17+00:00,2015-09-14 09:37:17+00:00 +C1238,make delivery,2015-09-14 09:50:52+00:00,2015-09-14 09:40:32+00:00 +C1155,make delivery,2015-09-14 10:31:36+00:00,2015-09-14 09:42:34+00:00 +C1227,confirm payment,2015-09-14 10:13:05+00:00,2015-09-14 10:02:37+00:00 +C1265,prepare delivery,2015-09-14 10:10:49+00:00,2015-09-14 10:07:41+00:00 +C1106,prepare delivery,2015-09-14 10:28:46+00:00,2015-09-14 10:20:58+00:00 +C1123,prepare delivery,2015-09-14 10:43:42+00:00,2015-09-14 10:40:01+00:00 +C1263,confirm payment,2015-09-14 10:49:43+00:00,2015-09-14 10:46:23+00:00 +C1266,confirm payment,2015-09-14 10:59:10+00:00,2015-09-14 10:56:17+00:00 +C1219,make delivery,2015-09-14 12:21:21+00:00,2015-09-14 11:05:58+00:00 +C1261,pay,2015-09-14 11:26:49+00:00,2015-09-14 11:23:23+00:00 +C1242,send reminder,2015-09-14 11:48:45+00:00,2015-09-14 11:39:49+00:00 +C1204,pay,2015-09-14 12:20:13+00:00,2015-09-14 12:14:22+00:00 +C1160,make delivery,2015-09-14 13:40:47+00:00,2015-09-14 12:21:57+00:00 +C1213,prepare delivery,2015-09-14 12:27:20+00:00,2015-09-14 12:23:38+00:00 +C1148,confirm payment,2015-09-14 13:04:20+00:00,2015-09-14 12:57:58+00:00 +C1233,make delivery,2015-09-14 13:50:48+00:00,2015-09-14 13:11:49+00:00 +C1232,make delivery,2015-09-14 13:40:10+00:00,2015-09-14 13:13:10+00:00 +C1166,pay,2015-09-14 13:20:56+00:00,2015-09-14 13:17:13+00:00 +C1256,make delivery,2015-09-14 13:54:23+00:00,2015-09-14 13:25:05+00:00 +C1257,make delivery,2015-09-14 15:08:05+00:00,2015-09-14 14:30:24+00:00 +C1234,confirm payment,2015-09-14 14:42:21+00:00,2015-09-14 14:36:14+00:00 +C1223,pay,2015-09-14 14:45:53+00:00,2015-09-14 14:36:38+00:00 +C1247,make delivery,2015-09-14 16:01:31+00:00,2015-09-14 14:40:13+00:00 +C1219,confirm payment,2015-09-14 15:12:24+00:00,2015-09-14 15:09:31+00:00 +C1154,make delivery,2015-09-14 15:40:21+00:00,2015-09-14 15:25:10+00:00 +C1156,pay,2015-09-14 15:29:15+00:00,2015-09-14 15:25:17+00:00 +C1126,make delivery,2015-09-14 15:54:26+00:00,2015-09-14 15:36:48+00:00 +C1241,prepare delivery,2015-09-14 16:14:51+00:00,2015-09-14 16:11:47+00:00 +C1139,make delivery,2015-09-14 16:30:26+00:00,2015-09-14 16:19:28+00:00 +C1254,send reminder,2015-09-14 16:55:59+00:00,2015-09-14 16:42:46+00:00 +C1232,confirm payment,2015-09-14 16:58:53+00:00,2015-09-14 16:53:27+00:00 +C1162,prepare delivery,2015-09-14 20:20:41+00:00,2015-09-14 17:46:23+00:00 +C1167,make delivery,2015-09-14 19:36:03+00:00,2015-09-14 18:20:06+00:00 +C1233,confirm payment,2015-09-14 20:07:26+00:00,2015-09-14 19:52:22+00:00 +C1257,confirm payment,2015-09-15 08:52:35+00:00,2015-09-15 08:46:55+00:00 +C1224,make delivery,2015-09-15 09:55:39+00:00,2015-09-15 09:39:54+00:00 +C1214,pay,2015-09-15 09:50:12+00:00,2015-09-15 09:42:48+00:00 +C1224,confirm payment,2015-09-15 09:50:43+00:00,2015-09-15 09:45:10+00:00 +C1255,make delivery,2015-09-15 10:26:55+00:00,2015-09-15 10:12:17+00:00 +C1106,make delivery,2015-09-15 12:08:49+00:00,2015-09-15 10:34:35+00:00 +C1167,confirm payment,2015-09-15 11:10:32+00:00,2015-09-15 10:49:13+00:00 +C1245,send reminder,2015-09-15 11:11:47+00:00,2015-09-15 11:02:45+00:00 +C1126,confirm payment,2015-09-15 11:15:33+00:00,2015-09-15 11:03:39+00:00 +C1179,prepare delivery,2015-09-15 11:13:40+00:00,2015-09-15 11:05:48+00:00 +C1210,send reminder,2015-09-15 11:34:40+00:00,2015-09-15 11:19:24+00:00 +C1106,confirm payment,2015-09-15 11:57:29+00:00,2015-09-15 11:19:38+00:00 +C1259,prepare delivery,2015-09-15 11:52:03+00:00,2015-09-15 11:26:58+00:00 +C1255,confirm payment,2015-09-15 11:32:34+00:00,2015-09-15 11:27:56+00:00 +C1123,make delivery,2015-09-15 12:33:59+00:00,2015-09-15 11:37:00+00:00 +C1160,confirm payment,2015-09-15 11:58:49+00:00,2015-09-15 11:52:10+00:00 +C1121,prepare delivery,2015-09-15 11:56:27+00:00,2015-09-15 11:52:33+00:00 +C1244,prepare delivery,2015-09-15 12:19:52+00:00,2015-09-15 12:16:48+00:00 +C1265,make delivery,2015-09-15 12:50:48+00:00,2015-09-15 12:25:41+00:00 +C1123,confirm payment,2015-09-15 12:37:13+00:00,2015-09-15 12:33:34+00:00 +C1247,confirm payment,2015-09-15 13:05:03+00:00,2015-09-15 13:00:47+00:00 +C1229,cancel order,2015-09-15 14:06:31+00:00,2015-09-15 13:08:51+00:00 +C1154,confirm payment,2015-09-15 13:56:40+00:00,2015-09-15 13:26:25+00:00 +C1256,confirm payment,2015-09-15 13:49:31+00:00,2015-09-15 13:34:10+00:00 +C1235,send reminder,2015-09-15 15:30:54+00:00,2015-09-15 14:59:11+00:00 +C1139,confirm payment,2015-09-15 15:11:41+00:00,2015-09-15 15:01:21+00:00 +C1241,make delivery,2015-09-15 16:58:03+00:00,2015-09-15 15:28:55+00:00 +C1213,make delivery,2015-09-15 15:48:32+00:00,2015-09-15 15:36:37+00:00 +C1162,make delivery,2015-09-15 16:01:12+00:00,2015-09-15 15:47:21+00:00 +C1145,prepare delivery,2015-09-15 16:50:26+00:00,2015-09-15 16:42:26+00:00 +C1152,prepare delivery,2015-09-15 17:17:22+00:00,2015-09-15 17:09:59+00:00 +C1239,prepare delivery,2015-09-15 18:05:00+00:00,2015-09-15 17:57:37+00:00 +C1246,pay,2015-09-15 18:36:47+00:00,2015-09-15 18:32:14+00:00 +C1260,prepare delivery,2015-09-15 19:03:29+00:00,2015-09-15 18:56:16+00:00 +C1189,prepare delivery,2015-09-16 11:35:10+00:00,2015-09-16 09:11:17+00:00 +C1179,make delivery,2015-09-16 09:54:35+00:00,2015-09-16 09:39:24+00:00 +C1265,confirm payment,2015-09-16 09:59:36+00:00,2015-09-16 09:52:02+00:00 +C1259,confirm payment,2015-09-16 10:04:01+00:00,2015-09-16 09:56:12+00:00 +C1259,make delivery,2015-09-16 10:49:35+00:00,2015-09-16 10:38:53+00:00 +C1241,confirm payment,2015-09-16 10:51:27+00:00,2015-09-16 10:42:51+00:00 +C1213,confirm payment,2015-09-16 11:36:10+00:00,2015-09-16 11:29:06+00:00 +C1162,confirm payment,2015-09-16 11:56:44+00:00,2015-09-16 11:48:51+00:00 +C1254,cancel order,2015-09-16 12:14:53+00:00,2015-09-16 11:58:30+00:00 +C1253,prepare delivery,2015-09-16 12:07:49+00:00,2015-09-16 12:00:14+00:00 +C1179,confirm payment,2015-09-16 12:18:24+00:00,2015-09-16 12:12:36+00:00 +C1128,prepare delivery,2015-09-16 13:17:24+00:00,2015-09-16 13:13:53+00:00 +C1244,make delivery,2015-09-16 15:30:28+00:00,2015-09-16 13:59:48+00:00 +C1121,make delivery,2015-09-16 15:07:21+00:00,2015-09-16 14:44:20+00:00 +C1145,make delivery,2015-09-16 15:03:11+00:00,2015-09-16 14:47:32+00:00 +C1156,prepare delivery,2015-09-16 15:05:36+00:00,2015-09-16 14:58:25+00:00 +C1262,send reminder,2015-09-16 15:20:30+00:00,2015-09-16 15:06:48+00:00 +C1244,confirm payment,2015-09-16 15:28:20+00:00,2015-09-16 15:09:57+00:00 +C1242,pay,2015-09-16 15:17:23+00:00,2015-09-16 15:12:50+00:00 +C1221,cancel order,2015-09-16 16:11:34+00:00,2015-09-16 16:02:54+00:00 +C1152,make delivery,2015-09-16 17:04:27+00:00,2015-09-16 16:14:17+00:00 +C1264,send reminder,2015-09-16 17:01:37+00:00,2015-09-16 16:21:40+00:00 +C1258,send reminder,2015-09-16 17:28:25+00:00,2015-09-16 16:56:51+00:00 +C1189,make delivery,2015-09-16 17:51:39+00:00,2015-09-16 17:37:58+00:00 +C1145,confirm payment,2015-09-16 17:55:56+00:00,2015-09-16 17:41:25+00:00 +C1223,prepare delivery,2015-09-16 19:44:26+00:00,2015-09-16 19:16:38+00:00 +C1239,make delivery,2015-09-16 19:29:12+00:00,2015-09-16 19:16:44+00:00 +C1260,make delivery,2015-09-16 23:02:19+00:00,2015-09-16 22:46:57+00:00 +C1189,confirm payment,2015-09-17 15:51:52+00:00,2015-09-17 11:32:12+00:00 +C1210,pay,2015-09-17 11:39:21+00:00,2015-09-17 11:32:59+00:00 +C1121,confirm payment,2015-09-17 11:41:33+00:00,2015-09-17 11:38:37+00:00 +C1152,confirm payment,2015-09-17 11:49:57+00:00,2015-09-17 11:42:05+00:00 +C1253,make delivery,2015-09-17 12:36:50+00:00,2015-09-17 11:44:10+00:00 +C1156,make delivery,2015-09-17 14:46:12+00:00,2015-09-17 14:14:44+00:00 +C1235,pay,2015-09-17 14:28:40+00:00,2015-09-17 14:23:25+00:00 +C1208,prepare delivery,2015-09-17 15:20:08+00:00,2015-09-17 15:12:45+00:00 +C1128,make delivery,2015-09-17 15:32:05+00:00,2015-09-17 15:20:26+00:00 +C1246,prepare delivery,2015-09-17 15:26:45+00:00,2015-09-17 15:20:36+00:00 +C1260,confirm payment,2015-09-17 15:31:20+00:00,2015-09-17 15:26:56+00:00 +C1245,pay,2015-09-17 15:33:47+00:00,2015-09-17 15:29:41+00:00 +C1204,prepare delivery,2015-09-17 16:04:47+00:00,2015-09-17 16:01:38+00:00 +C1253,confirm payment,2015-09-17 16:18:46+00:00,2015-09-17 16:11:58+00:00 +C1239,confirm payment,2015-09-17 16:57:04+00:00,2015-09-17 16:50:43+00:00 +C1223,make delivery,2015-09-17 18:07:04+00:00,2015-09-17 16:51:51+00:00 +C1262,cancel order,2015-09-18 09:46:57+00:00,2015-09-18 09:33:46+00:00 +C1128,confirm payment,2015-09-18 11:19:33+00:00,2015-09-18 11:04:02+00:00 +C1223,confirm payment,2015-09-18 11:31:19+00:00,2015-09-18 11:25:19+00:00 +C1258,pay,2015-09-18 11:41:25+00:00,2015-09-18 11:34:19+00:00 +C1246,make delivery,2015-09-18 12:28:51+00:00,2015-09-18 11:58:11+00:00 +C1214,prepare delivery,2015-09-18 12:08:01+00:00,2015-09-18 12:00:06+00:00 +C1204,make delivery,2015-09-18 14:30:27+00:00,2015-09-18 14:04:23+00:00 +C1204,confirm payment,2015-09-18 15:22:52+00:00,2015-09-18 15:12:31+00:00 +C1156,confirm payment,2015-09-18 15:22:45+00:00,2015-09-18 15:14:19+00:00 +C1208,make delivery,2015-09-18 15:35:15+00:00,2015-09-18 15:18:06+00:00 +C1261,prepare delivery,2015-09-18 15:30:12+00:00,2015-09-18 15:21:41+00:00 +C1208,confirm payment,2015-09-18 15:54:51+00:00,2015-09-18 15:49:11+00:00 +C1210,prepare delivery,2015-09-18 16:28:38+00:00,2015-09-18 16:21:18+00:00 +C1246,confirm payment,2015-09-18 16:39:32+00:00,2015-09-18 16:30:42+00:00 +C1235,prepare delivery,2015-09-18 18:02:26+00:00,2015-09-18 17:55:23+00:00 +C1166,prepare delivery,2015-09-18 21:48:13+00:00,2015-09-18 21:24:48+00:00 +C1214,make delivery,2015-09-21 10:39:53+00:00,2015-09-21 10:29:32+00:00 +C1261,make delivery,2015-09-21 16:39:56+00:00,2015-09-21 16:24:17+00:00 +C1235,make delivery,2015-09-21 17:15:27+00:00,2015-09-21 17:00:53+00:00 +C1210,make delivery,2015-09-21 17:32:08+00:00,2015-09-21 17:15:12+00:00 +C1166,make delivery,2015-09-21 19:49:45+00:00,2015-09-21 19:32:11+00:00 +C1214,confirm payment,2015-09-22 11:04:54+00:00,2015-09-22 10:53:59+00:00 +C1264,pay,2015-09-22 14:57:54+00:00,2015-09-22 14:49:55+00:00 +C1261,confirm payment,2015-09-22 16:21:23+00:00,2015-09-22 15:41:45+00:00 +C1258,prepare delivery,2015-09-22 15:55:53+00:00,2015-09-22 15:49:28+00:00 +C1210,confirm payment,2015-09-22 16:32:46+00:00,2015-09-22 16:24:50+00:00 +C1166,confirm payment,2015-09-22 19:21:03+00:00,2015-09-22 16:35:03+00:00 +C1235,confirm payment,2015-09-22 17:29:23+00:00,2015-09-22 17:22:22+00:00 +C1245,prepare delivery,2015-09-23 11:24:11+00:00,2015-09-23 11:16:33+00:00 +C1258,confirm payment,2015-09-23 14:28:23+00:00,2015-09-23 14:18:56+00:00 +C1258,make delivery,2015-09-23 16:43:16+00:00,2015-09-23 16:08:31+00:00 +C1245,make delivery,2015-09-24 10:59:02+00:00,2015-09-24 10:30:37+00:00 +C1242,prepare delivery,2015-09-24 12:31:02+00:00,2015-09-24 12:23:26+00:00 +C1245,confirm payment,2015-09-24 16:09:54+00:00,2015-09-24 16:03:34+00:00 +C1242,make delivery,2015-09-25 13:38:54+00:00,2015-09-25 13:24:47+00:00 +C1242,confirm payment,2015-09-28 12:15:20+00:00,2015-09-28 12:09:38+00:00 +C1264,prepare delivery,2015-09-28 14:31:00+00:00,2015-09-28 12:10:26+00:00 +C1264,make delivery,2015-09-29 13:57:02+00:00,2015-09-29 13:31:07+00:00 +C1264,confirm payment,2015-09-30 11:11:05+00:00,2015-09-30 11:04:16+00:00 diff --git a/pm4py/tests/input_data/interval_event_log.xes b/pm4py/tests/input_data/interval_event_log.xes new file mode 100644 index 0000000000000000000000000000000000000000..baf7bf870c0622744dd7270d809123d8b31c661a --- /dev/null +++ b/pm4py/tests/input_data/interval_event_log.xes @@ -0,0 +1,44347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/more_models/SampleNet.pnml b/pm4py/tests/input_data/more_models/SampleNet.pnml new file mode 100644 index 0000000000000000000000000000000000000000..cce01544bc4f07f381ac32661842a2e96838038a --- /dev/null +++ b/pm4py/tests/input_data/more_models/SampleNet.pnml @@ -0,0 +1,2 @@ + +my petri netp3p11p4p2CDAB1normal1normal1normal1normal1normal1normal1normal1normal1normal1000 \ No newline at end of file diff --git a/pm4py/tests/input_data/more_models/SimpleParallel.bpmn b/pm4py/tests/input_data/more_models/SimpleParallel.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..a840264812cdb4d9e6edee30a943d8d44f6f0c8f --- /dev/null +++ b/pm4py/tests/input_data/more_models/SimpleParallel.bpmn @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + sid-80DD74D4-6206-4E25-8B3B-72B24404992E + + + + + + + + + + + + sid-48E4E779-BCC2-4E46-B2C9-83156BDF97C2 + sid-32092D59-5D5F-46CD-8D4A-2939BAD84E3A + + + + + + + + + + + + sid-BE62AD05-D926-4653-A40A-1CC7CED6A6BD + sid-AF631568-14A8-4DF9-9985-D702924CA6A2 + + + + + + + sid-80DD74D4-6206-4E25-8B3B-72B24404992E + sid-48E4E779-BCC2-4E46-B2C9-83156BDF97C2 + sid-BE62AD05-D926-4653-A40A-1CC7CED6A6BD + sid-79308AF7-DD27-408C-8BC6-EB4A15C9698E + + + + + + + sid-AF631568-14A8-4DF9-9985-D702924CA6A2 + sid-32092D59-5D5F-46CD-8D4A-2939BAD84E3A + sid-65DCD431-FE91-42E6-889D-743F31AD74A0 + sid-1D15F333-0CAD-4303-819A-5D18BB7CBA25 + + + + + /glossary/711fc87bd920446d86bb17aa240163f7 + + + + + + + + + + sid-79308AF7-DD27-408C-8BC6-EB4A15C9698E + sid-65DCD431-FE91-42E6-889D-743F31AD74A0 + + + + + + + + + + + + sid-1D15F333-0CAD-4303-819A-5D18BB7CBA25 + sid-C229D7C8-90C2-45CF-8611-3FDF0D90E19A + + + + + + + sid-C229D7C8-90C2-45CF-8611-3FDF0D90E19A + sid-26652840-3DD2-4A6E-A834-38AA6902DC3C + sid-CBB209E9-F491-4A20-B3FB-1516BD9564BA + + + + + + + + + + + + sid-26652840-3DD2-4A6E-A834-38AA6902DC3C + sid-3EF36F42-2CC0-457B-9512-B6B9470AC5A2 + + + + + + + + + + + + sid-CBB209E9-F491-4A20-B3FB-1516BD9564BA + sid-AA74CA39-A358-4B42-A3B6-7F6E5F468E9B + + + + + + + sid-3EF36F42-2CC0-457B-9512-B6B9470AC5A2 + sid-AA74CA39-A358-4B42-A3B6-7F6E5F468E9B + sid-40EB3CDD-8748-43B7-86D1-8193C747DEC1 + + + + + + + + sid-40EB3CDD-8748-43B7-86D1-8193C747DEC1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/more_models/Subprocess1.bpmn b/pm4py/tests/input_data/more_models/Subprocess1.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..24ec40a7cca39614611f13c6605bf21c3fcc2856 --- /dev/null +++ b/pm4py/tests/input_data/more_models/Subprocess1.bpmn @@ -0,0 +1,324 @@ + + + + + + + + + + + + + + + + sid-277271AA-32BC-4B20-8850-D3A93FDF95C7 + + + + + + + + + + + + sid-277271AA-32BC-4B20-8850-D3A93FDF95C7 + sid-6BA15E88-94B2-4933-938D-8408A6D1B867 + + + + + + + sid-6BA15E88-94B2-4933-938D-8408A6D1B867 + sid-F368FC92-5B1F-4403-AA0D-30EA05E46F6A + + + + + + + sid-49DB2C5C-4431-438D-962A-CA3F4BB34052 + + + + + + + + + + + + sid-49DB2C5C-4431-438D-962A-CA3F4BB34052 + sid-2247B383-A8B4-4FFA-9083-969BEA23DDF2 + + + + + + + sid-2247B383-A8B4-4FFA-9083-969BEA23DDF2 + sid-052B705E-70D3-436F-A0DC-3F4D89614438 + sid-121898AB-A08C-42B8-A8AB-6E4A70012510 + + + + + + + + sid-052B705E-70D3-436F-A0DC-3F4D89614438 + + + + + + + + + + + + + sid-121898AB-A08C-42B8-A8AB-6E4A70012510 + sid-FCF10C19-8F04-4BCC-BD03-C721ECCF11F1 + + + + + + + + sid-FCF10C19-8F04-4BCC-BD03-C721ECCF11F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sid-01234988-0EF8-4732-BEBF-012B3D96C9A4 + + + + + + + + + + + + + sid-01234988-0EF8-4732-BEBF-012B3D96C9A4 + sid-6F72EB56-FD32-401A-89D6-9A8621AB6D3B + + + + + + + + sid-6F72EB56-FD32-401A-89D6-9A8621AB6D3B + + + + + + + + + + + + + sid-F368FC92-5B1F-4403-AA0D-30EA05E46F6A + sid-B2990830-D2A6-410A-A794-363E214B201E + + + + + + + + sid-B2990830-D2A6-410A-A794-363E214B201E + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/more_models/Subprocess3.bpmn b/pm4py/tests/input_data/more_models/Subprocess3.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..93ee3e631711e93b40b0ec6ab4aadc4c0cebe48c --- /dev/null +++ b/pm4py/tests/input_data/more_models/Subprocess3.bpmn @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + sid-F67A893F-DF55-4AC8-A8EF-EF252898F8E2 + + + + + + + sid-F67A893F-DF55-4AC8-A8EF-EF252898F8E2 + sid-F368FC92-5B1F-4403-AA0D-30EA05E46F6A + + + + + + + sid-49DB2C5C-4431-438D-962A-CA3F4BB34052 + + + + + + + + + + + + sid-49DB2C5C-4431-438D-962A-CA3F4BB34052 + sid-2247B383-A8B4-4FFA-9083-969BEA23DDF2 + + + + + + + sid-2247B383-A8B4-4FFA-9083-969BEA23DDF2 + sid-339E0AE8-87BB-4C93-9CB4-47AF2C66642D + sid-71EBA132-A71C-48EA-8EF1-1FACB150484E + + + + + + + + sid-911BEA63-1781-449E-9549-36A08E811888 + + + + + + + + + + + + sid-339E0AE8-87BB-4C93-9CB4-47AF2C66642D + sid-4AC0F04E-FA48-4442-B28B-D28526E85AC9 + + + + + + + sid-4AC0F04E-FA48-4442-B28B-D28526E85AC9 + sid-911BEA63-1781-449E-9549-36A08E811888 + sid-D60D9175-A511-46B0-B7E3-85DBB37DF5FB + + + + + + + + sid-71EBA132-A71C-48EA-8EF1-1FACB150484E + + + + + + + + + sid-D60D9175-A511-46B0-B7E3-85DBB37DF5FB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sid-F368FC92-5B1F-4403-AA0D-30EA05E46F6A + sid-B2990830-D2A6-410A-A794-363E214B201E + + + + + + + + sid-B2990830-D2A6-410A-A794-363E214B201E + + + + + + + + sid-6F965C56-CD90-4298-9946-378ABBDF0627 + + + + + + + + + + + + + sid-E5673EEB-0FF0-427F-8403-391E3F0872A8 + sid-6F965C56-CD90-4298-9946-378ABBDF0627 + + + sid-E5673EEB-0FF0-427F-8403-391E3F0872A8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/more_models/ch7_CreditAppSimulation.bpmn b/pm4py/tests/input_data/more_models/ch7_CreditAppSimulation.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..4ee4f0c449b3c938c0aad11e644d3db103e51f6a --- /dev/null +++ b/pm4py/tests/input_data/more_models/ch7_CreditAppSimulation.bpmn @@ -0,0 +1,291 @@ + + + + + + + + sid-E469684F-C09F-4A8B-A916-E9927BA15372 + {"arrivalRateDistribution":{"type":"exponential","mean":1800,"value":0,"stdev":0,"min":0,"max":0,"timeUnit":"minutes"},"instances":"5000","resources":{"Clerk":{"name":"Clerk","costPerHour":"25","amount":"3"},"CreditOfficer":{"name":"Credit Officer","costPerHour":"50","amount":"3"},"System":{"name":"System","costPerHour":"0","amount":"1"}},"startAt":"2012-08-03 17:27:09","timetable":{"Clerk":{"Mon-Fri":"09:00:00-17:00:00"},"CreditOfficer":{"Mon-Fri":"09:00:00-17:00:00"}},"currency":"EUR"} + + + + + sid-E469684F-C09F-4A8B-A916-E9927BA15372 + sid-6FD4FFD3-5784-4D33-9509-234EAB886930 + sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC + + + + + + + + sid-6FD4FFD3-5784-4D33-9509-234EAB886930 + sid-10E6C62E-2CBD-476A-976B-B862156F5DEC + {"durationDistribution":{"type":"normal","mean":600,"value":3600,"stdev":120,"min":0,"max":0,"timeUnit":"minutes"},"resource":"Clerk","fixedCost":"0","name":"Check credit history"} + + + + + sid-FF95F9DA-C10F-455B-B2FC-FBC1C270C0B4 + sid-10E6C62E-2CBD-476A-976B-B862156F5DEC + sid-281400BA-53E3-47C9-8437-B699CA182453 + + + + + + + + sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC + sid-FF95F9DA-C10F-455B-B2FC-FBC1C270C0B4 + {"durationDistribution":{"type":"normal","mean":"20","value":"0","stdev":"4","min":"0","max":"0","timeUnit":"seconds"},"resource":"Clerk","fixedCost":"0","name":"Check income sources"} + + + + + sid-281400BA-53E3-47C9-8437-B699CA182453 + sid-AFEC7074-8C12-43E2-A1FE-87D5CEF395C8 + sid-0617E6F8-139D-4F02-B850-6604A21D603D + + + + + + sid-0B638436-AEB9-459C-AC18-9B64381CB7F9 + sid-AFEC7074-8C12-43E2-A1FE-87D5CEF395C8 + sid-AE313010-5715-438C-AD61-1C02F03DCF77 + + + + + + + + sid-58A4F70B-5279-4DBC-AEE2-8D7D2596DE63 + sid-0B638436-AEB9-459C-AC18-9B64381CB7F9 + {"durationDistribution":{"type":"fixed","mean":"0","value":"0","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"resource":"System","fixedCost":"0","name":"Receive customer feedback"} + + + + + + + sid-8AE82A7B-75EE-401B-8ABE-279FB05A3946 + sid-58A4F70B-5279-4DBC-AEE2-8D7D2596DE63 + {"durationDistribution":{"type":"normal","mean":"10","value":"0","stdev":"2","min":"0","max":"0","timeUnit":"seconds"},"resource":"CreditOfficer","fixedCost":"0","name":"Notify rejection"} + + + + + sid-FA2D48D3-A316-4C2F-90DB-C2390990D727 + sid-8AE82A7B-75EE-401B-8ABE-279FB05A3946 + sid-789335C6-205C-4A03-9AD6-9655893C1FFB + + + + + + + + sid-0617E6F8-139D-4F02-B850-6604A21D603D + sid-FA2D48D3-A316-4C2F-90DB-C2390990D727 + {"durationDistribution":{"type":"exponential","mean":1200,"value":0,"stdev":0,"min":0,"max":0,"timeUnit":"minutes"},"resource":"CreditOfficer","fixedCost":"0","name":"Assess application"} + + + + + + + sid-789335C6-205C-4A03-9AD6-9655893C1FFB + sid-E27B9A7A-4414-4BFC-83F5-4BC438B77E37 + {"durationDistribution":{"type":"normal","mean":"10","value":"30","stdev":"2","min":"0","max":"0","timeUnit":"seconds"},"resource":"CreditOfficer","fixedCost":"0","name":"Make credit offer"} + + + + + sid-E27B9A7A-4414-4BFC-83F5-4BC438B77E37 + sid-AE313010-5715-438C-AD61-1C02F03DCF77 + sid-287B8ED1-E9CD-44BD-92E8-C9AD7E940100 + + + + + + sid-287B8ED1-E9CD-44BD-92E8-C9AD7E940100 + + + + + + + + + + 0.2 + + + + + + + + 0.2 + 0.8 + + 0.8 + + + + + exit point + + + entry point + + + exit point + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +minutesminutesqbp_1711728e-f6f9-cfb2-552e-392c94b10102minutesqbp_1711728e-f6f9-cfb2-552e-392c94b10102secondsqbp_facbd3b9-3463-9a43-502d-10db26dd780dminutesqbp_4a419afd-b012-3bd5-213f-75b43b0a6dc5minutesqbp_4a419afd-b012-3bd5-213f-75b43b0a6dc5minutesqbp_4a419afd-b012-3bd5-213f-75b43b0a6dc5 \ No newline at end of file diff --git a/pm4py/tests/input_data/more_models/ch7_InsuranceClaimsSimulationNormalSeason.bpmn b/pm4py/tests/input_data/more_models/ch7_InsuranceClaimsSimulationNormalSeason.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..1129ef6fb17519a099611b3a7b2279987c7f96c7 --- /dev/null +++ b/pm4py/tests/input_data/more_models/ch7_InsuranceClaimsSimulationNormalSeason.bpmn @@ -0,0 +1,501 @@ + + + + + + + + + + sid-C7F5302F-5E9E-4FBC-8000-F0CBDFC05745 + sid-B6EA836B-5EFD-4F50-97A0-FC63FF31104E + {"durationDistribution":{"type":"exponential","mean":"60","value":"0","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"resource":"CallCenterOperator1","fixedCost":"0","name":"Check if customer has all required information"} + + + + + sid-9BF39986-68C1-4FB4-B661-17F653855D2F + sid-795F9EA0-EF4C-4730-95F8-673B271B4B63 + sid-C7F5302F-5E9E-4FBC-8000-F0CBDFC05745 + + + + + + + sid-9BF39986-68C1-4FB4-B661-17F653855D2F + {"arrivalRateDistribution":{"type":"exponential","mean":"16","value":"0","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"instances":"45000","resources":{"CallCenterOperator1":{"name":"Call Center Operator 1","costPerHour":"30","amount":"40"},"CallCenterOperator2":{"name":"Call Center Operator 2","costPerHour":"30","amount":"40"},"ClaimsHandler":{"name":"Claims Handler","costPerHour":"50","amount":"150"}},"startAt":"2012-08-04 13:47:57","timetable":{},"currency":"EUR"} + + + + + + + sid-795F9EA0-EF4C-4730-95F8-673B271B4B63 + sid-879F566E-7782-40CE-BBBE-CEA40AD0A7C9 + {"durationDistribution":{"type":"exponential","mean":"60","value":"0","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"resource":"CallCenterOperator2","fixedCost":"0","name":"Check if customer has all required information"} + + + + + sid-879F566E-7782-40CE-BBBE-CEA40AD0A7C9 + sid-1E60A6D5-BCA6-494D-BC1F-0DD40813F536 + sid-0B31805A-6CCB-4689-A49A-397ADD0D50D0 + + + + + + + + sid-1E60A6D5-BCA6-494D-BC1F-0DD40813F536 + sid-25A6E342-1EF1-4223-8D8C-306C888A2BC6 + {"durationDistribution":{"type":"exponential","mean":"540","value":"520","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"resource":"CallCenterOperator1","fixedCost":"0","name":"Register Claim"} + + + + + sid-A4AB57F8-9B93-4164-BC02-AA6BF01CD14A + sid-25A6E342-1EF1-4223-8D8C-306C888A2BC6 + sid-3EA930CF-9BE6-4C66-ADAF-2F4DDD99F85B + + + + + + + + sid-175B8DB8-58B3-4F80-8487-EB5D2446A45A + sid-A4AB57F8-9B93-4164-BC02-AA6BF01CD14A + {"durationDistribution":{"type":"exponential","mean":"540","value":"520","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"resource":"CallCenterOperator2","fixedCost":"0","name":"Register Claim"} + + + + + sid-B6EA836B-5EFD-4F50-97A0-FC63FF31104E + sid-175B8DB8-58B3-4F80-8487-EB5D2446A45A + sid-FC31469F-40B2-4EBB-9A9B-55AE9FF3E6D6 + + + + + + sid-FC31469F-40B2-4EBB-9A9B-55AE9FF3E6D6 + + + + + + + + sid-3EA930CF-9BE6-4C66-ADAF-2F4DDD99F85B + sid-1E5C397B-0DF2-42F8-9A17-193CDF67A1E7 + {"durationDistribution":{"type":"exponential","mean":"120","value":"520","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"resource":"ClaimsHandler","fixedCost":"0","name":"Determine likelihood of the claim"} + + + + + sid-1E5C397B-0DF2-42F8-9A17-193CDF67A1E7 + sid-E92FA44C-ADC9-495D-88F8-0E32E8B0912A + sid-C6FE7351-EA19-4BA3-8102-AF6F6BEEA9BC + + + + + + sid-E92FA44C-ADC9-495D-88F8-0E32E8B0912A + + + + + + + + sid-C6FE7351-EA19-4BA3-8102-AF6F6BEEA9BC + sid-50DBD794-8CB6-4510-80BA-8A0C1FB42B26 + {"durationDistribution":{"type":"exponential","mean":"1200","value":"0","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"resource":"ClaimsHandler","fixedCost":"0","name":"Assess Claim"} + + + + + sid-50DBD794-8CB6-4510-80BA-8A0C1FB42B26 + sid-D0D686B5-0846-4FBB-AD18-2B28092AAE62 + sid-01EC887B-304E-404B-A5EF-B0FBE67FC316 + + + + + + sid-D0D686B5-0846-4FBB-AD18-2B28092AAE62 + + + + + + sid-01EC887B-304E-404B-A5EF-B0FBE67FC316 + sid-8EFE09DA-E281-49F0-9045-C4C868DFCAD7 + sid-D1124EE2-5A5C-4E68-81B2-68561962F7FD + + + + + + + + sid-8EFE09DA-E281-49F0-9045-C4C868DFCAD7 + sid-C7B47A98-1647-4D3B-8917-615496C90B65 + {"durationDistribution":{"type":"exponential","mean":"120","value":"0","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"resource":"ClaimsHandler","fixedCost":"0","name":"Initiate Payment"} + + + + + sid-297FC920-DCB1-45B9-9652-C16BA45C93C9 + sid-C7B47A98-1647-4D3B-8917-615496C90B65 + sid-7E1D8322-2C3E-416A-94CA-A4143536D948 + + + + + + + + sid-D1124EE2-5A5C-4E68-81B2-68561962F7FD + sid-297FC920-DCB1-45B9-9652-C16BA45C93C9 + {"durationDistribution":{"type":"exponential","mean":"240","value":"0","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"resource":"ClaimsHandler","fixedCost":"0","name":"Advise Claimant on Reimbursement"} + + + + + + + sid-7E1D8322-2C3E-416A-94CA-A4143536D948 + sid-5EAA3B5C-1E4D-409D-8992-EAA69908278F + {"durationDistribution":{"type":"exponential","mean":"60","value":"0","stdev":"0","min":"0","max":"0","timeUnit":"seconds"},"resource":"ClaimsHandler","fixedCost":"0","name":"Close Claim"} + + + + + sid-5EAA3B5C-1E4D-409D-8992-EAA69908278F + + + + + + sid-0B31805A-6CCB-4689-A49A-397ADD0D50D0 + + + + + + + + + 0.5 + + + + + 0.5 + 0.9 + 0.9 + + + + + + + + 0.15 + 0.1 + + 0.85 + 0.1 + + 0.2 + 0.8 + + + + + + + + + + + + + + + + + +30 seconds + + + 120 seconds + + + 520 seconds + + + 30 seconds + + + 80 seconds + + + 520 seconds + + + 600 seconds + + + +30 seconds + + + 180 seconds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +secondssecondsQBP_DEFAULT_RESOURCEsecondsqbp_23407788-ed31-6bd3-2c8c-4c9ba25825fcsecondsQBP_DEFAULT_RESOURCEsecondsqbp_23407788-ed31-6bd3-2c8c-4c9ba25825fcsecondsqbp_069a088b-3f58-e628-8f3a-cc74322b8ec9secondsqbp_069a088b-3f58-e628-8f3a-cc74322b8ec9secondsqbp_069a088b-3f58-e628-8f3a-cc74322b8ec9secondsqbp_069a088b-3f58-e628-8f3a-cc74322b8ec9secondsqbp_069a088b-3f58-e628-8f3a-cc74322b8ec9 \ No newline at end of file diff --git a/pm4py/tests/input_data/more_models/simple_model.bpmn b/pm4py/tests/input_data/more_models/simple_model.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..689437d6ac667668b50f92d020c094c592b1f4db --- /dev/null +++ b/pm4py/tests/input_data/more_models/simple_model.bpmn @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + sid-80DD74D4-6206-4E25-8B3B-72B24404992E + + + + + + + + sid-436A4357-413C-4AA7-B8CF-4A9247F4ADF1 + + + + + + + + + + + + sid-48E4E779-BCC2-4E46-B2C9-83156BDF97C2 + sid-32092D59-5D5F-46CD-8D4A-2939BAD84E3A + + + + + + + + + + + + sid-BE62AD05-D926-4653-A40A-1CC7CED6A6BD + sid-AF631568-14A8-4DF9-9985-D702924CA6A2 + + + + + + + sid-80DD74D4-6206-4E25-8B3B-72B24404992E + sid-48E4E779-BCC2-4E46-B2C9-83156BDF97C2 + sid-BE62AD05-D926-4653-A40A-1CC7CED6A6BD + sid-79308AF7-DD27-408C-8BC6-EB4A15C9698E + + + + + + + sid-AF631568-14A8-4DF9-9985-D702924CA6A2 + sid-32092D59-5D5F-46CD-8D4A-2939BAD84E3A + sid-65DCD431-FE91-42E6-889D-743F31AD74A0 + sid-436A4357-413C-4AA7-B8CF-4A9247F4ADF1 + + + + + /glossary/711fc87bd920446d86bb17aa240163f7 + + + + + + sid-79308AF7-DD27-408C-8BC6-EB4A15C9698E + sid-65DCD431-FE91-42E6-889D-743F31AD74A0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/ocel/example_log.csv b/pm4py/tests/input_data/ocel/example_log.csv new file mode 100644 index 0000000000000000000000000000000000000000..6b2a948d618a3f71a9c8f333b2963a542820cb22 --- /dev/null +++ b/pm4py/tests/input_data/ocel/example_log.csv @@ -0,0 +1,24 @@ +ocel:eid,ocel:timestamp,ocel:activity,ocel:type:element,ocel:type:order,ocel:type:delivery +e1,1980-01-01 00:00:00,Create Order,"['i4', 'i1', 'i3', 'i2']",['o1'], +e2,1980-01-02 00:00:00,Confirm Order,,['o1'], +e3,1980-01-03 00:00:00,Item out of Stock,['i3'],, +e4,1980-01-04 00:00:00,Create Delivery,"['i2', 'i1']",,['d1'] +e5,1980-01-05 00:00:00,Item back in Stock,['i3'],, +e6,1980-01-08 00:00:00,Delivery Failed,,,['d1'] +e7,1980-01-09 00:00:00,Retry Delivery,,,['d1'] +e8,1980-01-10 00:00:00,Delivery Successful,,,['d1'] +e9,1980-01-11 00:00:00,Invoice Sent,,['o1'], +e10,1980-01-12 00:00:00,Pay Order,,['o1'], +e11,1981-01-01 00:00:00,Create Order,"['i6', 'i5']",['o2'], +e12,1981-01-02 00:00:00,Remove Item,['i5'],, +e13,1981-01-03 00:00:00,Cancel Order,,['o2'], +e14,1981-01-04 00:00:00,Create Order,"['i8', 'i7']",['o3'], +e15,1981-01-05 00:00:00,Add Item to Order,['i9'],['o3'], +e16,1981-01-06 00:00:00,Create Delivery,"['i3', 'i4', 'i7']",,['d2'] +e17,1981-01-07 00:00:00,Delivery Successful,,,['d2'] +e18,1981-01-08 00:00:00,Create Delivery,"['i8', 'i9']",,['d3'] +e19,1981-01-09 00:00:00,Delivery Successful,,,['d3'] +e20,1981-01-10 00:00:00,Invoice Sent,,['o3'], +e21,1981-01-11 00:00:00,Payment Reminder,,['o3'], +e22,1981-01-11 00:00:00,Payment Reminder,,['o3'], +e23,1981-01-12 00:00:00,Send for Credit Collection,,['o3'], diff --git a/pm4py/tests/input_data/ocel/example_log.jsonocel b/pm4py/tests/input_data/ocel/example_log.jsonocel new file mode 100644 index 0000000000000000000000000000000000000000..231acb2f2d66782586761378f753e04fc0537208 --- /dev/null +++ b/pm4py/tests/input_data/ocel/example_log.jsonocel @@ -0,0 +1,299 @@ +{ + "ocel:global-event": { + "ocel:activity": "__INVALID__" + }, + "ocel:global-object": { + "ocel:type": "__INVALID__" + }, + "ocel:global-log": { + "ocel:attribute-names": [], + "ocel:object-types": [ + "delivery", + "element", + "order" + ], + "ocel:version": "1.0", + "ocel:ordering": "timestamp" + }, + "ocel:events": { + "e1": { + "ocel:activity": "Create Order", + "ocel:timestamp": "1980-01-01T00:00:00", + "ocel:omap": [ + "i4", + "i1", + "o1", + "i3", + "i2" + ], + "ocel:vmap": { + "prova": "ciao", + "prova2": 456 + } + }, + "e2": { + "ocel:activity": "Confirm Order", + "ocel:timestamp": "1980-01-02T00:00:00", + "ocel:omap": [ + "o1" + ], + "ocel:vmap": { + "prova": "ciao2" + } + }, + "e3": { + "ocel:activity": "Item out of Stock", + "ocel:timestamp": "1980-01-03T00:00:00", + "ocel:omap": [ + "i3" + ], + "ocel:vmap": {} + }, + "e4": { + "ocel:activity": "Create Delivery", + "ocel:timestamp": "1980-01-04T00:00:00", + "ocel:omap": [ + "d1", + "i2", + "i1" + ], + "ocel:vmap": {} + }, + "e5": { + "ocel:activity": "Item back in Stock", + "ocel:timestamp": "1980-01-05T00:00:00", + "ocel:omap": [ + "i3" + ], + "ocel:vmap": {} + }, + "e6": { + "ocel:activity": "Delivery Failed", + "ocel:timestamp": "1980-01-08T00:00:00", + "ocel:omap": [ + "d1" + ], + "ocel:vmap": {} + }, + "e7": { + "ocel:activity": "Retry Delivery", + "ocel:timestamp": "1980-01-09T00:00:00", + "ocel:omap": [ + "d1" + ], + "ocel:vmap": {} + }, + "e8": { + "ocel:activity": "Delivery Successful", + "ocel:timestamp": "1980-01-10T00:00:00", + "ocel:omap": [ + "d1" + ], + "ocel:vmap": {} + }, + "e9": { + "ocel:activity": "Invoice Sent", + "ocel:timestamp": "1980-01-11T00:00:00", + "ocel:omap": [ + "o1" + ], + "ocel:vmap": {} + }, + "e10": { + "ocel:activity": "Pay Order", + "ocel:timestamp": "1980-01-12T00:00:00", + "ocel:omap": [ + "o1" + ], + "ocel:vmap": {} + }, + "e11": { + "ocel:activity": "Create Order", + "ocel:timestamp": "1981-01-01T00:00:00", + "ocel:omap": [ + "i6", + "o2", + "i5" + ], + "ocel:vmap": {} + }, + "e12": { + "ocel:activity": "Remove Item", + "ocel:timestamp": "1981-01-02T00:00:00", + "ocel:omap": [ + "i5" + ], + "ocel:vmap": {} + }, + "e13": { + "ocel:activity": "Cancel Order", + "ocel:timestamp": "1981-01-03T00:00:00", + "ocel:omap": [ + "o2" + ], + "ocel:vmap": {} + }, + "e14": { + "ocel:activity": "Create Order", + "ocel:timestamp": "1981-01-04T00:00:00", + "ocel:omap": [ + "i8", + "o3", + "i7" + ], + "ocel:vmap": {} + }, + "e15": { + "ocel:activity": "Add Item to Order", + "ocel:timestamp": "1981-01-05T00:00:00", + "ocel:omap": [ + "i9", + "o3" + ], + "ocel:vmap": {} + }, + "e16": { + "ocel:activity": "Create Delivery", + "ocel:timestamp": "1981-01-06T00:00:00", + "ocel:omap": [ + "i3", + "d2", + "i4", + "i7" + ], + "ocel:vmap": {} + }, + "e17": { + "ocel:activity": "Delivery Successful", + "ocel:timestamp": "1981-01-07T00:00:00", + "ocel:omap": [ + "d2" + ], + "ocel:vmap": {} + }, + "e18": { + "ocel:activity": "Create Delivery", + "ocel:timestamp": "1981-01-08T00:00:00", + "ocel:omap": [ + "d3", + "i8", + "i9" + ], + "ocel:vmap": {} + }, + "e19": { + "ocel:activity": "Delivery Successful", + "ocel:timestamp": "1981-01-09T00:00:00", + "ocel:omap": [ + "d3" + ], + "ocel:vmap": {} + }, + "e20": { + "ocel:activity": "Invoice Sent", + "ocel:timestamp": "1981-01-10T00:00:00", + "ocel:omap": [ + "o3" + ], + "ocel:vmap": {} + }, + "e21": { + "ocel:activity": "Payment Reminder", + "ocel:timestamp": "1981-01-11T00:00:00", + "ocel:omap": [ + "o3" + ], + "ocel:vmap": {} + }, + "e22": { + "ocel:activity": "Payment Reminder", + "ocel:timestamp": "1981-01-11T00:00:00", + "ocel:omap": [ + "o3" + ], + "ocel:vmap": {} + }, + "e23": { + "ocel:activity": "Send for Credit Collection", + "ocel:timestamp": "1981-01-12T00:00:00", + "ocel:omap": [ + "o3" + ], + "ocel:vmap": {} + } + }, + "ocel:objects": { + "o1": { + "ocel:type": "order", + "ocel:ovmap": { + "oattr1": "uno", + "oattr2": 1.0 + } + }, + "i1": { + "ocel:type": "element", + "ocel:ovmap": { + "oattr1": "due", + "oattr2": 2.0 + } + }, + "i2": { + "ocel:type": "element", + "ocel:ovmap": { + "oattr1": "tre", + "oattr2": 3.0 + } + }, + "i3": { + "ocel:type": "element", + "ocel:ovmap": { + "oattr1": "quattro", + "oattr2": 4.0 + } + }, + "i4": { + "ocel:type": "element", + "ocel:ovmap": {} + }, + "d1": { + "ocel:type": "delivery", + "ocel:ovmap": {} + }, + "o2": { + "ocel:type": "order", + "ocel:ovmap": {} + }, + "i5": { + "ocel:type": "element", + "ocel:ovmap": {} + }, + "i6": { + "ocel:type": "element", + "ocel:ovmap": {} + }, + "o3": { + "ocel:type": "order", + "ocel:ovmap": {} + }, + "i7": { + "ocel:type": "element", + "ocel:ovmap": {} + }, + "i8": { + "ocel:type": "element", + "ocel:ovmap": {} + }, + "i9": { + "ocel:type": "element", + "ocel:ovmap": {} + }, + "d2": { + "ocel:type": "delivery", + "ocel:ovmap": {} + }, + "d3": { + "ocel:type": "delivery", + "ocel:ovmap": {} + } + } +} \ No newline at end of file diff --git a/pm4py/tests/input_data/ocel/example_log.sqlite b/pm4py/tests/input_data/ocel/example_log.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..b6cf0820c9f757613bdb653e88ed0339cceb4ee9 --- /dev/null +++ b/pm4py/tests/input_data/ocel/example_log.sqlite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddb604d6e74c0016bd2ac919a360b9a1fed219fec34a0d35018678922b6a964f +size 16384 diff --git a/pm4py/tests/input_data/ocel/example_log.xmlocel b/pm4py/tests/input_data/ocel/example_log.xmlocel new file mode 100644 index 0000000000000000000000000000000000000000..da3cead48c49b16bce16ee2820b00dabdbc620a1 --- /dev/null +++ b/pm4py/tests/input_data/ocel/example_log.xmlocel @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/ocel/example_log_2.csv b/pm4py/tests/input_data/ocel/example_log_2.csv new file mode 100644 index 0000000000000000000000000000000000000000..627e4bde50f0f77a79405ee590735b4ad7ec442b --- /dev/null +++ b/pm4py/tests/input_data/ocel/example_log_2.csv @@ -0,0 +1,30 @@ +ocel:eid,ocel:activity,ocel:timestamp,ocel:type:pr,ocel:type:po,ocel:type:gi,ocel:type:inv,ocel:type:pay +e1,Create Purchase Requisition,2021-03-20 10:30,['PR1'],,,,, +e2,Close Purchase Requisition,2021-03-20 14:00,['PR1'],,,,, +e3,Create Purchase Requisition,2021-03-21 09:30,['PR2'],,,,, +e4,Create Purchase Order,2021-03-22 14:59,['PR2'],['PO1'],,, +e5,Invoice Receipt,2021-03-25 11:00,,['PO1'],,['R1'], +e6,Perform Payment,2021-03-30 11:58,,,,['R1'],['P1'] +e7,Create Purchase Requisition,2021-04-01 09:15,['PR3'],,,,, +e8,PR Formal Approval,2021-04-01 10:15,['PR3'],,,,, +e9,Create Purchase Order,2021-04-02 17:00,['PR3'],['PO2'],,,, +e10,Change Purchase Requisition,2021-04-03 10:00,['PR3'],,,,, +e11,Invoice Receipt,2021-04-05 15:00,,['PO2'],,['R2'], +e12,Perform Payment,2021-04-15 09:27,,,,['R2'],['P2'] +e13,Create Purchase Order,2021-04-17 14:29,,['PO3'],,,, +e14,Invoice Receipt,2021-04-28 10:00,,['PO3'],,['R3'], +e15,Perform Payment,2021-04-30 15:00,,,,['R3'],['P3'] +e16,Invoice Receipt,2021-05-28 10:01,,['PO3'],,['R4'], +e17,Perform Payment,2021-05-30 15:17,,,,['R4'],['P4'] +e18,Invoice Receipt,2021-06-28 10:01,,['PO3'],,['R5'], +e19,Perform Payment,2021-06-30 15:29,,,,['R5'],['P5'] +e20,Create Purchase Requisition,2021-07-01 11:15,['PR4'],,,,, +e21,Create Purchase Order,2021-07-02 09:38,['PR4'],['PO4'],,,, +e22,Invoice Receipt,2021-07-09 16:00,,['PO4'],,['R6'], +e23,Goods Issue,2021-07-11 10:30,,['PO4'],['GI1'],, +e24,Perform Payment,2022-05-15 09:00,,,,['R6'],['P6'] +e25,Invoice Receipt,2022-05-20 12:00,,,,['R7'], +e26,Create Purchase Order,2022-05-20 15:00,,['PO5'],,['R7'], +e27,Create Purchase Order,2022-06-01 09:17,,['PO6'],,, +e28,Create Purchase Order,2022-06-02 11:48,,['PO7'],,, +e29,Create Invoice,2022-06-05 09:00,,"['PO6','PO7']",,['R8'], diff --git a/pm4py/tests/input_data/ocel/newocel.csv b/pm4py/tests/input_data/ocel/newocel.csv new file mode 100644 index 0000000000000000000000000000000000000000..d509a229209063fb3c8efdbf1cf8ab3db763de34 --- /dev/null +++ b/pm4py/tests/input_data/ocel/newocel.csv @@ -0,0 +1,21 @@ +ocel:eid,ocel:activity,ocel:timestamp,ocel:type:order,ocel:type:item,ocel:type:line,ocel:type:goodsissue,ocel:type:delivery,ocel:type:invoice,ocel:type:payment +e1,Create Purchase Order,1970-01-01 01:00:00,"['o1']","['i1','i2','i3']","[]","[]","[]","[]","[]" +e2,Produce Item,1970-01-01 02:00:00,"['o1']","['i1']","['L1']","[]","[]","[]","[]" +e3,Item Issue,1970-01-01 03:00:00,"['o1']","['i1']","['L1']","['gi1']","[]","[]","[]" +e4,Replace Item,1970-01-01 04:00:00,"['o1']","['i1']","['L1']","['gi1']","[]","[]","[]" +e5,Produce Item,1970-01-01 05:00:00,"['o1']","['i2']","['L1']","[]","[]","[]","[]" +e6,Produce Item,1970-01-01 06:00:00,"['o1']","['i3']","[]","[]","[]","[]","[]" +e7,Collect Items,1970-01-01 07:00:00,"['o1']","['i1','i2','i3']","[]","[]","[]","[]","[]" +e8,Start Delivery,1970-01-01 08:00:00,"['o1']","[]","[]","[]","['d1']","[]","[]" +e9,Send Invoice,1970-01-01 09:00:00,"['o1']","[]","[]","[]","[]","['r1']","[]" +e10,Delivery Successful,1970-01-01 10:00:00,"[]","[]","[]","[]","['d1']","[]","[]" +e11,Revert Invoice,1970-01-01 11:00:00,"[]","[]","[]","[]","[]","['r1','r2']","[]" +e12,Send Invoice,1970-01-01 11:00:00,"[]","[]","[]","[]","[]","['r2']","[]" +e13,Create Purchase Order,1970-01-01 12:00:00,"['o2']","['i4','i5']","[]","[]","[]","[]","[]" +e14,Produce Item,1970-01-01 13:00:00,"['o2']","['i4']","['L1']","[]","[]","[]","[]" +e15,Produce Item,1970-01-01 14:00:00,"['o2']","['i5']","['L1']","[]","[]","[]","[]" +e16,Collect Items,1970-01-01 15:00:00,"['o2']","['i4','i5']","[]","[]","[]","[]","[]" +e17,Start Delivery,1970-01-01 16:00:00,"['o2']","[]","[]","[]","['d2']","[]","[]" +e18,Delivery Successful,1970-01-01 17:00:00,"[]","[]","[]","[]","['d2']","[]","[]" +e19,Send Invoice,1970-01-01 18:00:00,"['o2']","[]","[]","[]","[]","['r3']","[]" +e20,Payment,1970-01-01 19:00:00,"[]","[]","[]","[]","[]","['r3']","['pay1']" diff --git a/pm4py/tests/input_data/ocel/newocel.jsonocel b/pm4py/tests/input_data/ocel/newocel.jsonocel new file mode 100644 index 0000000000000000000000000000000000000000..b7c9a70c7fca164085238bb4cb2b1991d9613476 --- /dev/null +++ b/pm4py/tests/input_data/ocel/newocel.jsonocel @@ -0,0 +1 @@ +{"ocel:events":{"e1":{"ocel:omap":["o1","i1","i2","i3"],"ocel:vmap":{},"ocel:activity":"Create Purchase Order","ocel:timestamp":"1970-01-01T00:00:00.000Z"},"e2":{"ocel:omap":["o1","i1","L1"],"ocel:vmap":{},"ocel:activity":"Produce Item","ocel:timestamp":"1970-01-01T01:00:00.000Z"},"e3":{"ocel:omap":["o1","i1","L1","gi1"],"ocel:vmap":{},"ocel:activity":"Item Issue","ocel:timestamp":"1970-01-01T02:00:00.000Z"},"e4":{"ocel:omap":["o1","i1","L1","gi1"],"ocel:vmap":{},"ocel:activity":"Replace Item","ocel:timestamp":"1970-01-01T03:00:00.000Z"},"e5":{"ocel:omap":["o1","i2","L1"],"ocel:vmap":{},"ocel:activity":"Produce Item","ocel:timestamp":"1970-01-01T04:00:00.000Z"},"e6":{"ocel:omap":["o1","i3"],"ocel:vmap":{},"ocel:activity":"Produce Item","ocel:timestamp":"1970-01-01T05:00:00.000Z"},"e7":{"ocel:omap":["o1","i1","i2","i3"],"ocel:vmap":{},"ocel:activity":"Collect Items","ocel:timestamp":"1970-01-01T06:00:00.000Z"},"e8":{"ocel:omap":["o1","d1"],"ocel:vmap":{},"ocel:activity":"Start Delivery","ocel:timestamp":"1970-01-01T07:00:00.000Z"},"e9":{"ocel:omap":["o1","r1"],"ocel:vmap":{},"ocel:activity":"Send Invoice","ocel:timestamp":"1970-01-01T08:00:00.000Z"},"e10":{"ocel:omap":["d1"],"ocel:vmap":{},"ocel:activity":"Delivery Successful","ocel:timestamp":"1970-01-01T09:00:00.000Z"},"e11":{"ocel:omap":["r1","r2"],"ocel:vmap":{},"ocel:activity":"Revert Invoice","ocel:timestamp":"1970-01-01T10:00:00.000Z"},"e12":{"ocel:omap":["r2"],"ocel:vmap":{},"ocel:activity":"Send Invoice","ocel:timestamp":"1970-01-01T10:00:00.000Z"},"e13":{"ocel:omap":["o2","i4","i5"],"ocel:vmap":{},"ocel:activity":"Create Purchase Order","ocel:timestamp":"1970-01-01T11:00:00.000Z"},"e14":{"ocel:omap":["o2","i4","L1"],"ocel:vmap":{},"ocel:activity":"Produce Item","ocel:timestamp":"1970-01-01T12:00:00.000Z"},"e15":{"ocel:omap":["o2","i5","L1"],"ocel:vmap":{},"ocel:activity":"Produce Item","ocel:timestamp":"1970-01-01T13:00:00.000Z"},"e16":{"ocel:omap":["o2","i4","i5"],"ocel:vmap":{},"ocel:activity":"Collect Items","ocel:timestamp":"1970-01-01T14:00:00.000Z"},"e17":{"ocel:omap":["o2","d2"],"ocel:vmap":{},"ocel:activity":"Start Delivery","ocel:timestamp":"1970-01-01T15:00:00.000Z"},"e18":{"ocel:omap":["d2"],"ocel:vmap":{},"ocel:activity":"Delivery Successful","ocel:timestamp":"1970-01-01T16:00:00.000Z"},"e19":{"ocel:omap":["o2","r3"],"ocel:vmap":{},"ocel:activity":"Send Invoice","ocel:timestamp":"1970-01-01T17:00:00.000Z"},"e20":{"ocel:omap":["r3","pay1"],"ocel:vmap":{},"ocel:activity":"Payment","ocel:timestamp":"1970-01-01T18:00:00.000Z"}},"ocel:objects":{"o1":{"ocel:type":"order","ocel:ovmap":{}},"i1":{"ocel:type":"item","ocel:ovmap":{}},"i2":{"ocel:type":"item","ocel:ovmap":{}},"i3":{"ocel:type":"item","ocel:ovmap":{}},"L1":{"ocel:type":"line","ocel:ovmap":{}},"gi1":{"ocel:type":"goodsissue","ocel:ovmap":{}},"d1":{"ocel:type":"delivery","ocel:ovmap":{}},"r1":{"ocel:type":"invoice","ocel:ovmap":{}},"r2":{"ocel:type":"invoice","ocel:ovmap":{}},"o2":{"ocel:type":"order","ocel:ovmap":{}},"i4":{"ocel:type":"item","ocel:ovmap":{}},"i5":{"ocel:type":"item","ocel:ovmap":{}},"d2":{"ocel:type":"delivery","ocel:ovmap":{}},"r3":{"ocel:type":"invoice","ocel:ovmap":{}},"pay1":{"ocel:type":"payment","ocel:ovmap":{}}},"ocel:global-event":{"ocel:activity":"__INVALID__"},"ocel:global-object":{"ocel:activity":"__INVALID__"},"ocel:global-log":{"ocel:version":"1.0","ocel:ordering":"timestamp","ocel:attribute-names":[],"ocel:object-types":["order","item","line","goodsissue","delivery","invoice","payment"]}} \ No newline at end of file diff --git a/pm4py/tests/input_data/ocel/newocel.sqlite b/pm4py/tests/input_data/ocel/newocel.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..7e96e4255edd52fba0d1cd5ba5e7d06d6a9ddb3e --- /dev/null +++ b/pm4py/tests/input_data/ocel/newocel.sqlite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1de14f056e842a39ef79dd7bb12918280f67fbe00a692b600c8cc4ab60c3fac2 +size 16384 diff --git a/pm4py/tests/input_data/ocel/ocel2-validation.xsd b/pm4py/tests/input_data/ocel/ocel2-validation.xsd new file mode 100644 index 0000000000000000000000000000000000000000..70974fc9a80a023b7d9e593eeac992630c8fbe77 --- /dev/null +++ b/pm4py/tests/input_data/ocel/ocel2-validation.xsd @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/ocel/ocel20_example.jsonocel b/pm4py/tests/input_data/ocel/ocel20_example.jsonocel new file mode 100644 index 0000000000000000000000000000000000000000..355c29ebd6160e85a943e7795f82fa009a30f9e8 --- /dev/null +++ b/pm4py/tests/input_data/ocel/ocel20_example.jsonocel @@ -0,0 +1,518 @@ +{ + "objectTypes": [ + { + "name": "Invoice", + "attributes": [ + { + "name": "is_blocked", + "type": "string" + } + ] + }, + { + "name": "Payment", + "attributes": [] + }, + { + "name": "Purchase Order", + "attributes": [ + { + "name": "po_product", + "type": "string" + }, + { + "name": "po_quantity", + "type": "string" + } + ] + }, + { + "name": "Purchase Requisition", + "attributes": [ + { + "name": "pr_product", + "type": "string" + }, + { + "name": "pr_quantity", + "type": "string" + } + ] + } + ], + "eventTypes": [ + { + "name": "Approve Purchase Requisition", + "attributes": [ + { + "name": "pr_approver", + "type": "string" + } + ] + }, + { + "name": "Change PO Quantity", + "attributes": [ + { + "name": "po_editor", + "type": "string" + } + ] + }, + { + "name": "Create Purchase Order", + "attributes": [ + { + "name": "po_creator", + "type": "string" + } + ] + }, + { + "name": "Create Purchase Requisition", + "attributes": [ + { + "name": "pr_creator", + "type": "string" + } + ] + }, + { + "name": "Insert Invoice", + "attributes": [ + { + "name": "invoice_inserter", + "type": "string" + } + ] + }, + { + "name": "Insert Payment", + "attributes": [ + { + "name": "payment_inserter", + "type": "string" + } + ] + }, + { + "name": "Remove Payment Block", + "attributes": [ + { + "name": "invoice_block_rem", + "type": "string" + } + ] + }, + { + "name": "Set Payment Block", + "attributes": [ + { + "name": "invoice_blocker", + "type": "string" + } + ] + } + ], + "objects": [ + { + "id": "R1", + "type": "Invoice", + "attributes": [ + { + "name": "is_blocked", + "time": "1970-01-01T00:00:00Z", + "value": "No" + } + ], + "relationships": [ + { + "objectId": "P1", + "qualifier": "Payment from invoice" + } + ] + }, + { + "id": "R2", + "type": "Invoice", + "attributes": [ + { + "name": "is_blocked", + "time": "1970-01-01T00:00:00Z", + "value": "No" + } + ], + "relationships": [ + { + "objectId": "P2", + "qualifier": "Payment from invoice" + } + ] + }, + { + "id": "R3", + "type": "Invoice", + "attributes": [ + { + "name": "is_blocked", + "time": "1970-01-01T00:00:00Z", + "value": "No" + }, + { + "name": "is_blocked", + "time": "2022-02-03T06:30:00+00:00", + "value": "Yes" + }, + { + "name": "is_blocked", + "time": "2022-02-03T22:30:00+00:00", + "value": "No" + } + ], + "relationships": [ + { + "objectId": "P3", + "qualifier": "Payment from invoice" + } + ] + }, + { + "id": "P1", + "type": "Payment" + }, + { + "id": "P2", + "type": "Payment" + }, + { + "id": "P3", + "type": "Payment" + }, + { + "id": "PO1", + "type": "Purchase Order", + "attributes": [ + { + "name": "po_product", + "time": "1970-01-01T00:00:00Z", + "value": "Cows" + }, + { + "name": "po_quantity", + "time": "1970-01-01T00:00:00Z", + "value": "500" + }, + { + "name": "po_quantity", + "time": "2022-01-13T11:00:00+00:00", + "value": "600" + } + ], + "relationships": [ + { + "objectId": "R1", + "qualifier": "Invoice from PO" + }, + { + "objectId": "R2", + "qualifier": "Invoice from PO" + } + ] + }, + { + "id": "PO2", + "type": "Purchase Order", + "attributes": [ + { + "name": "po_product", + "time": "1970-01-01T00:00:00Z", + "value": "Notebooks" + }, + { + "name": "po_quantity", + "time": "1970-01-01T00:00:00Z", + "value": "1" + } + ], + "relationships": [ + { + "objectId": "R3", + "qualifier": "Maverick buying" + } + ] + }, + { + "id": "PR1", + "type": "Purchase Requisition", + "attributes": [ + { + "name": "pr_product", + "time": "1970-01-01T00:00:00Z", + "value": "Cows" + }, + { + "name": "pr_quantity", + "time": "1970-01-01T00:00:00Z", + "value": "500" + } + ], + "relationships": [ + { + "objectId": "PO1", + "qualifier": "PO from PR" + } + ] + } + ], + "events": [ + { + "id": "e1", + "type": "Create Purchase Requisition", + "time": "2022-01-09T14:00:00+00:00", + "attributes": [ + { + "name": "pr_creator", + "value": "Mike" + } + ], + "relationships": [ + { + "objectId": "PR1", + "qualifier": "Regular placement of PR" + } + ] + }, + { + "id": "e2", + "type": "Approve Purchase Requisition", + "time": "2022-01-09T15:30:00+00:00", + "attributes": [ + { + "name": "pr_approver", + "value": "Tania" + } + ], + "relationships": [ + { + "objectId": "PR1", + "qualifier": "Regular approval of PR" + } + ] + }, + { + "id": "e3", + "type": "Create Purchase Order", + "time": "2022-01-10T08:15:00+00:00", + "attributes": [ + { + "name": "po_creator", + "value": "Mike" + } + ], + "relationships": [ + { + "objectId": "PR1", + "qualifier": "Created order from PR" + }, + { + "objectId": "PO1", + "qualifier": "Created order with identifier" + } + ] + }, + { + "id": "e4", + "type": "Change PO Quantity", + "time": "2022-01-13T11:00:00+00:00", + "attributes": [ + { + "name": "po_editor", + "value": "Mike" + } + ], + "relationships": [ + { + "objectId": "PO1", + "qualifier": "Change of quantity" + } + ] + }, + { + "id": "e5", + "type": "Insert Invoice", + "time": "2022-01-14T11:00:00+00:00", + "attributes": [ + { + "name": "invoice_inserter", + "value": "Luke" + } + ], + "relationships": [ + { + "objectId": "PO1", + "qualifier": "Invoice created starting from the PO" + }, + { + "objectId": "R1", + "qualifier": "Invoice created with identifier" + } + ] + }, + { + "id": "e6", + "type": "Insert Invoice", + "time": "2022-01-16T10:00:00+00:00", + "attributes": [ + { + "name": "invoice_inserter", + "value": "Luke" + } + ], + "relationships": [ + { + "objectId": "PO1", + "qualifier": "Invoice created starting from the PO" + }, + { + "objectId": "R2", + "qualifier": "Invoice created with identifier" + } + ] + }, + { + "id": "e7", + "type": "Insert Payment", + "time": "2022-01-30T22:00:00+00:00", + "attributes": [ + { + "name": "payment_inserter", + "value": "Robot" + } + ], + "relationships": [ + { + "objectId": "R1", + "qualifier": "Payment for the invoice" + }, + { + "objectId": "P1", + "qualifier": "Payment inserted with identifier" + } + ] + }, + { + "id": "e8", + "type": "Insert Payment", + "time": "2022-01-31T21:00:00+00:00", + "attributes": [ + { + "name": "payment_inserter", + "value": "Robot" + } + ], + "relationships": [ + { + "objectId": "R2", + "qualifier": "Payment for the invoice" + }, + { + "objectId": "P2", + "qualifier": "Payment created with identifier" + } + ] + }, + { + "id": "e9", + "type": "Insert Invoice", + "time": "2022-02-02T08:00:00+00:00", + "attributes": [ + { + "name": "invoice_inserter", + "value": "Mario" + } + ], + "relationships": [ + { + "objectId": "R3", + "qualifier": "Invoice created with identifier" + } + ] + }, + { + "id": "e10", + "type": "Create Purchase Order", + "time": "2022-02-02T16:00:00+00:00", + "attributes": [ + { + "name": "po_creator", + "value": "Mario" + } + ], + "relationships": [ + { + "objectId": "R3", + "qualifier": "Purchase order created with maverick buying from" + }, + { + "objectId": "PO2", + "qualifier": "Purhcase order created with identifier" + } + ] + }, + { + "id": "e11", + "type": "Set Payment Block", + "time": "2022-02-03T06:30:00+00:00", + "attributes": [ + { + "name": "invoice_blocker", + "value": "Mario" + } + ], + "relationships": [ + { + "objectId": "R3", + "qualifier": "Payment block due to unethical maverick buying" + } + ] + }, + { + "id": "e12", + "type": "Remove Payment Block", + "time": "2022-02-03T22:30:00+00:00", + "attributes": [ + { + "name": "invoice_block_rem", + "value": "Mario" + } + ], + "relationships": [ + { + "objectId": "R3", + "qualifier": "Payment block removed ..." + } + ] + }, + { + "id": "e13", + "type": "Insert Payment", + "time": "2022-02-28T22:00:00+00:00", + "attributes": [ + { + "name": "payment_inserter", + "value": "Robot" + } + ], + "relationships": [ + { + "objectId": "R3", + "qualifier": "Payment for the invoice" + }, + { + "objectId": "P3", + "qualifier": "Payment inserted with identifier" + } + ] + } + ] +} \ No newline at end of file diff --git a/pm4py/tests/input_data/ocel/ocel20_example.sqlite b/pm4py/tests/input_data/ocel/ocel20_example.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..f0da501d9ecea54525698798b3278769c252c3a5 --- /dev/null +++ b/pm4py/tests/input_data/ocel/ocel20_example.sqlite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a5d50ec30b0f223e9d85357717a5038eb740ede1024b20eba063fb3da881a8f +size 151552 diff --git a/pm4py/tests/input_data/ocel/ocel20_example.xmlocel b/pm4py/tests/input_data/ocel/ocel20_example.xmlocel new file mode 100644 index 0000000000000000000000000000000000000000..f39d0065f21f57f1858161a6ea0a1221b765b6a1 --- /dev/null +++ b/pm4py/tests/input_data/ocel/ocel20_example.xmlocel @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No + + + + + + + + No + + + + + + + + No + Yes + No + + + + + + + + + + + + + + + + + Cows + 500 + 600 + + + + + + + + + Notebooks + 1 + + + + + + + + Cows + 500 + + + + + + + + + + Mike + + + + + + + + Tania + + + + + + + + Mike + + + + + + + + + Mike + + + + + + + + Luke + + + + + + + + + Luke + + + + + + + + + Robot + + + + + + + + + Robot + + + + + + + + + Mario + + + + + + + + Mario + + + + + + + + + Mario + + + + + + + + Mario + + + + + + + + Robot + + + + + + + + diff --git a/pm4py/tests/input_data/ocel/ocel_order_simulated.csv b/pm4py/tests/input_data/ocel/ocel_order_simulated.csv new file mode 100644 index 0000000000000000000000000000000000000000..b962154eed39288d838d3eec8bc62de3dded610a --- /dev/null +++ b/pm4py/tests/input_data/ocel/ocel_order_simulated.csv @@ -0,0 +1,22368 @@ +ocel:eid,ocel:activity,ocel:timestamp,ocel:type:customers,ocel:type:items,ocel:type:orders,ocel:type:packages,ocel:type:products,weight,price +1.0,place order,2019-05-20 07:07:47.000Z, ,"['880001','880004','880003','880002']","['990001']", , ,3.52,524.96 +2.0,place order,2019-05-20 08:35:21.000Z, ,"['880008','880005','880006','880007']","['990002']", , ,2.656,3255.99 +3.0,pick item,2019-05-20 08:38:17.000Z, ,"['880006']", , , ,0.483,79.99 +4.0,confirm order,2019-05-20 09:13:54.000Z, , ,"['990001']", , ,3.52,524.96 +5.0,pick item,2019-05-20 09:20:13.000Z, ,"['880002']", , , ,0.28,89.99 +6.0,place order,2019-05-20 10:30:30.000Z, ,"['880009','880010','880011','880012']","['990003']", , ,0.994,2468.99 +7.0,confirm order,2019-05-20 10:34:16.000Z, , ,"['990003']", , ,0.994,2468.99 +8.0,item out of stock,2019-05-20 11:54:37.000Z, ,"['880004']", , , ,1.48,199.99 +9.0,place order,2019-05-20 12:20:47.000Z, ,"['880014','880013']","['990004']", , ,2.46,334.98 +10.0,item out of stock,2019-05-20 13:19:49.000Z, ,"['880009']", , , ,0.44,476.0 +11.0,place order,2019-05-20 14:01:22.000Z, ,"['880015','880016']","['990005']", , ,0.923,1580.0 +12.0,pick item,2019-05-20 14:56:02.000Z, ,"['880014']", , , ,0.98,129.99 +13.0,pick item,2019-05-20 15:08:25.000Z, ,"['880008']", , , ,1.25,2200.0 +14.0,place order,2019-05-20 15:22:31.000Z, ,"['880018','880019','880017']","['990006']", , ,1.432,923.98 +15.0,pick item,2019-05-20 15:51:15.000Z, ,"['880011']", , , ,0.2,39.99 +16.0,pick item,2019-05-20 16:15:00.000Z, ,"['880007']", , , ,0.44,476.0 +17.0,confirm order,2019-05-20 16:36:37.000Z, , ,"['990004']", , ,2.46,334.98 +18.0,place order,2019-05-20 17:04:49.000Z, ,"['880021','880022','880020']","['990007']", , ,1.855,293.98 +19.0,place order,2019-05-20 19:49:13.000Z, ,"['880026','880027','880024','880023','880028','880025']","['990008']", , ,3.755,1428.97 +20.0,place order,2019-05-21 05:13:12.000Z, ,"['880032','880033','880031','880034','880030','880029']","['990009']", , ,3.013,1370.98 +21.0,pick item,2019-05-21 06:23:42.000Z, ,"['880030']", , , ,0.483,79.99 +22.0,pick item,2019-05-21 06:55:41.000Z, ,"['880019']", , , ,0.172,699.0 +23.0,item out of stock,2019-05-21 07:14:32.000Z, ,"['880029']", , , ,0.495,129.0 +24.0,pick item,2019-05-21 07:43:01.000Z, ,"['880010']", , , ,0.166,799.0 +25.0,place order,2019-05-21 07:58:19.000Z, ,"['880035','880036']","['990010']", , ,0.978,213.99 +26.0,reorder item,2019-05-21 08:03:49.000Z, ,"['880004']", , , ,1.48,199.99 +27.0,confirm order,2019-05-21 08:34:23.000Z, , ,"['990005']", , ,0.923,1580.0 +28.0,pay order,2019-05-21 08:41:07.000Z, , ,"['990003']", , ,0.994,2468.99 +29.0,pick item,2019-05-21 08:49:44.000Z, ,"['880022']", , , ,0.495,129.0 +30.0,pick item,2019-05-21 10:15:15.000Z, ,"['880017']", , , ,0.98,129.99 +31.0,place order,2019-05-21 10:16:25.000Z, ,"['880038','880039','880037','880040']","['990011']", , ,1.942,1472.98 +32.0,confirm order,2019-05-21 10:19:16.000Z, , ,"['990002']", , ,2.656,3255.99 +33.0,pick item,2019-05-21 10:35:03.000Z, ,"['880005']", , , ,0.483,495.0 +34.0,pick item,2019-05-21 10:39:01.000Z, ,"['880013']", , , ,1.48,199.99 +35.0,pick item,2019-05-21 10:47:10.000Z, ,"['880036']", , , ,0.483,79.99 +36.0,confirm order,2019-05-21 10:55:17.000Z, , ,"['990011']", , ,1.942,1472.98 +37.0,item out of stock,2019-05-21 10:57:36.000Z, ,"['880035']", , , ,0.495,129.0 +38.0,confirm order,2019-05-21 11:40:12.000Z, , ,"['990009']", , ,3.013,1370.98 +39.0,pick item,2019-05-21 11:42:40.000Z, ,"['880024']", , , ,0.495,129.0 +40.0,place order,2019-05-21 11:52:38.000Z, ,"['880046','880047','880045','880044','880043','880042','880041']","['990012']", , ,3.237,2761.99 +41.0,pick item,2019-05-21 12:14:14.000Z, ,"['880031']", , , ,0.28,449.0 +42.0,confirm order,2019-05-21 12:33:48.000Z, , ,"['990007']", , ,1.855,293.98 +43.0,confirm order,2019-05-21 12:55:05.000Z, , ,"['990006']", , ,1.432,923.98 +44.0,pick item,2019-05-21 12:56:24.000Z, ,"['880025']", , , ,1.28,149.99 +45.0,pick item,2019-05-21 12:58:29.000Z, ,"['880012']", , , ,0.188,1149.0 +46.0,pick item,2019-05-21 13:02:54.000Z, ,"['880026']", , , ,0.98,129.99 +47.0,pick item,2019-05-21 13:26:17.000Z, ,"['880028']", , , ,0.28,449.0 +48.0,pick item,2019-05-21 13:32:29.000Z, ,"['880032']", , , ,0.28,449.0 +49.0,item out of stock,2019-05-21 13:51:03.000Z, ,"['880027']", , , ,0.28,89.99 +50.0,place order,2019-05-21 14:05:03.000Z, ,"['880049','880053','880048','880050','880051','880052']","['990013']", , ,3.194,3127.97 +51.0,confirm order,2019-05-21 14:44:36.000Z, , ,"['990012']", , ,3.237,2761.99 +52.0,reorder item,2019-05-21 14:51:49.000Z, ,"['880027']", , , ,0.28,89.99 +53.0,pick item,2019-05-21 15:02:33.000Z, ,"['880020']", , , ,0.98,129.99 +54.0,pick item,2019-05-21 15:15:32.000Z, ,"['880049']", , , ,0.483,1099.0 +55.0,place order,2019-05-21 15:29:53.000Z, ,"['880055','880056','880057','880058','880054']","['990014']", , ,3.696,3239.97 +56.0,item out of stock,2019-05-21 17:19:13.000Z, ,"['880046']", , , ,0.495,129.0 +57.0,place order,2019-05-21 17:19:34.000Z, ,"['880062','880060','880064','880061','880059','880063']","['990015']", , ,4.095,5989.98 +58.0,pick item,2019-05-21 18:34:29.000Z, ,"['880059']", , , ,0.172,699.0 +59.0,confirm order,2019-05-21 19:10:10.000Z, , ,"['990010']", , ,0.978,213.99 +60.0,confirm order,2019-05-21 19:40:22.000Z, , ,"['990013']", , ,3.194,3127.97 +61.0,place order,2019-05-21 20:18:43.000Z, ,"['880065','880066','880068','880067']","['990016']", , ,1.081,2217.99 +62.0,place order,2019-05-22 06:29:00.000Z, ,"['880072','880070','880069','880073','880071']","['990017']", , ,1.919,1646.99 +63.0,item out of stock,2019-05-22 07:29:44.000Z, ,"['880050']", , , ,0.188,1149.0 +64.0,item out of stock,2019-05-22 07:31:49.000Z, ,"['880053']", , , ,1.48,199.99 +65.0,pick item,2019-05-22 07:37:12.000Z, ,"['880048']", , , ,0.28,89.99 +66.0,pick item,2019-05-22 07:49:11.000Z, ,"['880033']", , , ,0.495,129.0 +67.0,pick item,2019-05-22 08:17:48.000Z, ,"['880018']", , , ,0.28,89.99 +68.0,confirm order,2019-05-22 08:21:25.000Z, , ,"['990017']", , ,1.919,1646.99 +69.0,item out of stock,2019-05-22 08:22:31.000Z, ,"['880055']", , , ,0.38,29.99 +70.0,place order,2019-05-22 08:33:18.000Z, ,"['880074','880076','880075']","['990018']", , ,1.97,823.98 +71.0,confirm order,2019-05-22 08:34:00.000Z, , ,"['990008']", , ,3.755,1428.97 +72.0,pick item,2019-05-22 08:52:34.000Z, ,"['880058']", , , ,0.483,495.0 +73.0,pick item,2019-05-22 09:00:23.000Z, ,"['880043']", , , ,0.44,476.0 +74.0,pick item,2019-05-22 09:06:36.000Z, ,"['880070']", , , ,0.483,495.0 +75.0,pick item,2019-05-22 09:13:31.000Z, ,"['880054']", , , ,0.98,129.99 +76.0,item out of stock,2019-05-22 09:14:47.000Z, ,"['880065']", , , ,0.483,495.0 +77.0,pick item,2019-05-22 09:18:26.000Z, ,"['880015']", , , ,0.483,1099.0 +78.0,pick item,2019-05-22 09:34:42.000Z, ,"['880069']", , , ,0.495,129.0 +79.0,pick item,2019-05-22 09:36:46.000Z, ,"['880047']", , , ,0.172,699.0 +80.0,item out of stock,2019-05-22 09:39:24.000Z, ,"['880074']", , , ,0.21,529.0 +81.0,pick item,2019-05-22 09:45:06.000Z, ,"['880068']", , , ,0.2,39.99 +82.0,pick item,2019-05-22 09:47:12.000Z, ,"['880041']", , , ,0.98,129.99 +83.0,place order,2019-05-22 10:26:23.000Z, ,"['880078','880077']","['990019']", , ,0.446,893.99 +84.0,confirm order,2019-05-22 10:40:14.000Z, , ,"['990015']", , ,4.095,5989.98 +85.0,pay order,2019-05-22 11:31:24.000Z, , ,"['990008']", , ,3.755,1428.97 +86.0,pick item,2019-05-22 11:53:26.000Z, ,"['880076']", , , ,0.28,89.99 +87.0,place order,2019-05-22 12:12:34.000Z, ,"['880081','880080','880079']","['990020']", , ,3.48,4534.99 +88.0,pick item,2019-05-22 12:18:39.000Z, ,"['880038']", , , ,0.172,699.0 +89.0,reorder item,2019-05-22 12:29:53.000Z, ,"['880055']", , , ,0.38,29.99 +90.0,confirm order,2019-05-22 12:44:07.000Z, , ,"['990018']", , ,1.97,823.98 +91.0,pay order,2019-05-22 12:47:40.000Z, , ,"['990002']", , ,2.656,3255.99 +92.0,pick item,2019-05-22 13:24:59.000Z, ,"['880016']", , , ,0.44,476.0 +93.0,confirm order,2019-05-22 13:42:38.000Z, , ,"['990019']", , ,0.446,893.99 +94.0,reorder item,2019-05-22 13:44:52.000Z, ,"['880065']", , , ,0.483,495.0 +95.0,place order,2019-05-22 13:44:55.000Z, ,"['880082','880087','880086','880084','880085','880083']","['990021']", , ,2.651,2535.99 +96.0,pick item,2019-05-22 14:07:56.000Z, ,"['880051']", , , ,0.28,89.99 +97.0,pick item,2019-05-22 14:14:21.000Z, ,"['880071']", , , ,0.495,129.0 +98.0,reorder item,2019-05-22 14:52:23.000Z, ,"['880009']", , , ,0.44,476.0 +99.0,pick item,2019-05-22 14:54:39.000Z, ,"['880064']", , , ,1.25,2200.0 +100.0,pick item,2019-05-22 15:13:56.000Z, ,"['880023']", , , ,0.44,476.0 +101.0,pick item,2019-05-22 15:19:25.000Z, ,"['880067']", , , ,0.21,529.0 +102.0,reorder item,2019-05-22 15:33:36.000Z, ,"['880035']", , , ,0.495,129.0 +103.0,pick item,2019-05-22 15:38:56.000Z, ,"['880057']", , , ,1.37,2500.0 +104.0,place order,2019-05-22 15:49:37.000Z, ,"['880090','880089','880091','880088']","['990022']", , ,3.102,3802.99 +105.0,place order,2019-05-22 18:08:26.000Z, ,"['880092','880093']","['990023']", , ,2.76,354.98 +106.0,place order,2019-05-22 20:56:27.000Z, ,"['880096','880094','880095']","['990024']", , ,2.432,983.98 +107.0,pick item,2019-05-23 06:42:25.000Z, ,"['880077']", , , ,0.166,799.0 +108.0,pick item,2019-05-23 06:44:21.000Z, ,"['880072']", , , ,0.166,799.0 +109.0,confirm order,2019-05-23 07:09:23.000Z, , ,"['990014']", , ,3.696,3239.97 +110.0,item out of stock,2019-05-23 07:26:37.000Z, ,"['880066']", , , ,0.188,1149.0 +111.0,place order,2019-05-23 07:44:29.000Z, ,"['880101','880097','880098','880102','880100','880099']","['990025']", , ,5.172999999999999,3773.96 +112.0,pick item,2019-05-23 08:03:08.000Z, ,"['880090']", , , ,0.172,699.0 +113.0,item out of stock,2019-05-23 08:19:26.000Z, ,"['880045']", , , ,0.495,129.0 +114.0,reorder item,2019-05-23 08:27:00.000Z, ,"['880046']", , , ,0.495,129.0 +115.0,item out of stock,2019-05-23 08:29:24.000Z, ,"['880093']", , , ,1.28,149.99 +116.0,item out of stock,2019-05-23 08:40:50.000Z, ,"['880001']", , , ,0.98,129.99 +117.0,pick item,2019-05-23 08:45:43.000Z, ,"['880040']", , , ,0.21,529.0 +118.0,pick item,2019-05-23 08:52:26.000Z, ,"['880098']", , , ,0.483,1099.0 +119.0,pick item,2019-05-23 08:53:08.000Z, ,"['880063']", , , ,0.483,79.99 +120.0,pick item,2019-05-23 09:00:25.000Z, ,"['880003']", , , ,0.78,99.99 +121.0,create package,2019-05-23 09:00:25.000Z, ,"['880032','880038','880006','880051','880040','880008','880033','880043','880048','880007','880030','880047','880031','880049','880005','880041']", ,"['660001']", ,7.211,8169.95 +122.0,item out of stock,2019-05-23 09:07:19.000Z, ,"['880091']", , , ,0.28,449.0 +123.0,item out of stock,2019-05-23 09:08:24.000Z, ,"['880062']", , , ,0.44,476.0 +124.0,confirm order,2019-05-23 09:23:05.000Z, , ,"['990022']", , ,3.102,3802.99 +125.0,pay order,2019-05-23 09:27:55.000Z, , ,"['990001']", , ,3.52,524.96 +126.0,place order,2019-05-23 09:48:45.000Z, ,"['880106','880107','880105','880103','880104','880108','880109']","['990026']", , ,2.583,2729.98 +127.0,pick item,2019-05-23 09:55:58.000Z, ,"['880106']", , , ,0.88,89.99 +128.0,pick item,2019-05-23 09:57:31.000Z, ,"['880094']", , , ,0.98,129.99 +129.0,confirm order,2019-05-23 09:58:56.000Z, , ,"['990016']", , ,1.081,2217.99 +130.0,reorder item,2019-05-23 10:09:19.000Z, ,"['880050']", , , ,0.188,1149.0 +131.0,reorder item,2019-05-23 10:13:24.000Z, ,"['880091']", , , ,0.28,449.0 +132.0,pick item,2019-05-23 10:15:16.000Z, ,"['880099']", , , ,1.48,199.99 +133.0,reorder item,2019-05-23 10:33:06.000Z, ,"['880062']", , , ,0.44,476.0 +134.0,pick item,2019-05-23 10:53:00.000Z, ,"['880056']", , , ,0.483,79.99 +135.0,confirm order,2019-05-23 10:55:00.000Z, , ,"['990024']", , ,2.432,983.98 +136.0,confirm order,2019-05-23 11:04:43.000Z, , ,"['990020']", , ,3.48,4534.99 +137.0,pick item,2019-05-23 11:32:53.000Z, ,"['880080']", , , ,0.98,129.99 +138.0,pick item,2019-05-23 11:39:57.000Z, ,"['880039']", , , ,0.28,89.99 +139.0,place order,2019-05-23 11:57:18.000Z, ,"['880110','880111']","['990027']", , ,1.263,184.98 +140.0,send package,2019-05-23 12:22:59.000Z, , , ,"['660001']", ,7.211,8169.95 +141.0,pay order,2019-05-23 12:24:31.000Z, , ,"['990011']", , ,1.942,1472.98 +142.0,failed delivery,2019-05-23 12:48:41.000Z, , , ,"['660001']", ,7.211,8169.95 +143.0,pick item,2019-05-23 12:49:52.000Z, ,"['880103']", , , ,0.495,129.0 +144.0,pick item,2019-05-23 12:58:15.000Z, ,"['880110']", , , ,0.483,79.99 +145.0,pick item,2019-05-23 13:00:45.000Z, ,"['880101']", , , ,1.25,2200.0 +146.0,pay order,2019-05-23 13:19:51.000Z, , ,"['990018']", , ,1.97,823.98 +147.0,reorder item,2019-05-23 13:28:01.000Z, ,"['880074']", , , ,0.21,529.0 +148.0,pick item,2019-05-23 13:34:32.000Z, ,"['880065']", , , ,0.483,495.0 +149.0,item out of stock,2019-05-23 13:38:19.000Z, ,"['880096']", , , ,1.28,149.99 +150.0,pick item,2019-05-23 14:07:14.000Z, ,"['880034']", , , ,0.98,129.99 +151.0,item out of stock,2019-05-23 14:07:36.000Z, ,"['880079']", , , ,1.25,2200.0 +152.0,place order,2019-05-23 14:14:23.000Z, ,"['880114','880112','880113']","['990028']", , ,0.973,1062.99 +153.0,pick item,2019-05-23 14:16:20.000Z, ,"['880078']", , , ,0.28,89.99 +154.0,confirm order,2019-05-23 14:27:55.000Z, , ,"['990027']", , ,1.263,184.98 +155.0,pick item,2019-05-23 14:36:27.000Z, ,"['880109']", , , ,0.172,699.0 +156.0,pick item,2019-05-23 14:46:01.000Z, ,"['880075']", , , ,1.48,199.99 +157.0,reorder item,2019-05-23 14:56:29.000Z, ,"['880096']", , , ,1.28,149.99 +158.0,pick item,2019-05-23 15:01:33.000Z, ,"['880087']", , , ,0.188,1149.0 +159.0,pick item,2019-05-23 15:26:26.000Z, ,"['880042']", , , ,0.483,495.0 +160.0,create package,2019-05-23 15:26:26.000Z, ,"['880101','880098','880003','880002','880099']", ,"['660002']", ,4.273,3688.97 +161.0,send package,2019-05-23 15:43:12.000Z, , , ,"['660002']", ,4.273,3688.97 +162.0,place order,2019-05-23 15:48:34.000Z, ,"['880115','880116','880117']","['990029']", , ,0.634,2042.99 +163.0,reorder item,2019-05-23 16:54:48.000Z, ,"['880029']", , , ,0.495,129.0 +164.0,package delivered,2019-05-23 17:14:00.000Z, , , ,"['660001']", ,7.211,8169.95 +165.0,pick item,2019-05-23 17:15:44.000Z, ,"['880100']", , , ,0.78,99.99 +166.0,place order,2019-05-23 18:05:16.000Z, ,"['880121','880118','880119','880122','880120']","['990030']", , ,3.86,940.96 +167.0,confirm order,2019-05-23 20:00:00.000Z, , ,"['990021']", , ,2.651,2535.99 +168.0,place order,2019-05-23 20:50:07.000Z, ,"['880123']","['990031']", , ,0.38,34.99 +169.0,confirm order,2019-05-24 06:27:33.000Z, , ,"['990028']", , ,0.973,1062.99 +170.0,reorder item,2019-05-24 07:21:25.000Z, ,"['880079']", , , ,1.25,2200.0 +171.0,place order,2019-05-24 07:31:49.000Z, ,"['880124','880125','880127','880126']","['990032']", , ,2.329,1768.98 +172.0,pick item,2019-05-24 07:32:57.000Z, ,"['880120']", , , ,0.44,476.0 +173.0,confirm order,2019-05-24 07:35:41.000Z, , ,"['990030']", , ,3.86,940.96 +174.0,pay order,2019-05-24 07:37:42.000Z, , ,"['990014']", , ,3.696,3239.97 +175.0,pick item,2019-05-24 07:41:01.000Z, ,"['880084']", , , ,0.21,529.0 +176.0,pick item,2019-05-24 08:09:07.000Z, ,"['880095']", , , ,0.172,699.0 +177.0,pick item,2019-05-24 08:49:32.000Z, ,"['880073']", , , ,0.28,89.99 +178.0,create package,2019-05-24 08:49:32.000Z, ,"['880106','880070','880103','880069','880073','880022','880020','880109','880014','880071','880072','880013']", ,"['660003']", ,7.401,3148.95 +179.0,item out of stock,2019-05-24 08:55:36.000Z, ,"['880108']", , , ,0.28,449.0 +180.0,pick item,2019-05-24 09:05:13.000Z, ,"['880092']", , , ,1.48,199.99 +181.0,place order,2019-05-24 09:23:25.000Z, ,"['880129','880128']","['990033']", , ,1.422,2904.0 +182.0,pick item,2019-05-24 09:38:57.000Z, ,"['880129']", , , ,0.172,699.0 +183.0,confirm order,2019-05-24 09:59:26.000Z, , ,"['990033']", , ,1.422,2904.0 +184.0,reorder item,2019-05-24 10:01:37.000Z, ,"['880053']", , , ,1.48,199.99 +185.0,item out of stock,2019-05-24 10:12:36.000Z, ,"['880116']", , , ,0.188,1149.0 +186.0,item out of stock,2019-05-24 10:33:21.000Z, ,"['880102']", , , ,0.2,39.99 +187.0,confirm order,2019-05-24 10:33:34.000Z, , ,"['990031']", , ,0.38,34.99 +188.0,pick item,2019-05-24 10:41:02.000Z, ,"['880128']", , , ,1.25,2200.0 +189.0,pick item,2019-05-24 11:02:38.000Z, ,"['880107']", , , ,0.166,799.0 +190.0,place order,2019-05-24 11:06:38.000Z, ,"['880134','880133','880130','880131','880132']","['990034']", , ,3.011,4052.98 +191.0,pick item,2019-05-24 11:23:15.000Z, ,"['880088']", , , ,1.28,149.99 +192.0,confirm order,2019-05-24 11:40:11.000Z, , ,"['990032']", , ,2.329,1768.98 +193.0,pick item,2019-05-24 11:58:11.000Z, ,"['880125']", , , ,0.88,89.99 +194.0,pick item,2019-05-24 11:58:15.000Z, ,"['880113']", , , ,0.28,449.0 +195.0,pick item,2019-05-24 12:07:48.000Z, ,"['880074']", , , ,0.21,529.0 +196.0,pick item,2019-05-24 12:22:07.000Z, ,"['880081']", , , ,1.25,2200.0 +197.0,place order,2019-05-24 12:33:03.000Z, ,"['880137','880136','880138','880135']","['990035']", , ,3.523,1902.98 +198.0,item out of stock,2019-05-24 12:39:58.000Z, ,"['880082']", , , ,0.483,495.0 +199.0,pick item,2019-05-24 12:54:46.000Z, ,"['880122']", , , ,1.28,149.99 +200.0,confirm order,2019-05-24 12:55:25.000Z, , ,"['990023']", , ,2.76,354.98 +201.0,item out of stock,2019-05-24 13:17:53.000Z, ,"['880119']", , , ,0.98,129.99 +202.0,pick item,2019-05-24 13:37:55.000Z, ,"['880134']", , , ,0.21,529.0 +203.0,pick item,2019-05-24 13:49:44.000Z, ,"['880062']", , , ,0.44,476.0 +204.0,create package,2019-05-24 13:49:44.000Z, ,"['880026','880078','880024','880028','880010','880113','880012','880011','880023','880025','880077']", ,"['660004']", ,4.755,4659.96 +205.0,item out of stock,2019-05-24 13:52:26.000Z, ,"['880130']", , , ,1.25,2200.0 +206.0,package delivered,2019-05-24 13:54:44.000Z, , , ,"['660002']", ,4.273,3688.97 +207.0,reorder item,2019-05-24 13:56:27.000Z, ,"['880102']", , , ,0.2,39.99 +208.0,reorder item,2019-05-24 13:56:31.000Z, ,"['880108']", , , ,0.28,449.0 +209.0,place order,2019-05-24 14:25:54.000Z, ,"['880140','880142','880143','880144','880141','880139']","['990036']", , ,2.969,1639.96 +210.0,confirm order,2019-05-24 14:32:09.000Z, , ,"['990026']", , ,2.583,2729.98 +211.0,item out of stock,2019-05-24 14:43:54.000Z, ,"['880126']", , , ,0.483,79.99 +212.0,confirm order,2019-05-24 15:01:23.000Z, , ,"['990025']", , ,5.172999999999999,3773.96 +213.0,pay order,2019-05-24 15:07:14.000Z, , ,"['990033']", , ,1.422,2904.0 +214.0,confirm order,2019-05-24 15:21:57.000Z, , ,"['990034']", , ,3.011,4052.98 +215.0,pick item,2019-05-24 15:25:09.000Z, ,"['880105']", , , ,0.38,29.99 +216.0,pick item,2019-05-24 15:26:40.000Z, ,"['880009']", , , ,0.44,476.0 +217.0,pick item,2019-05-24 15:39:53.000Z, ,"['880104']", , , ,0.21,529.0 +218.0,reorder item,2019-05-24 15:48:27.000Z, ,"['880082']", , , ,0.483,495.0 +219.0,place order,2019-05-24 16:11:35.000Z, ,"['880145']","['990037']", , ,1.37,2505.0 +220.0,pick item,2019-05-24 16:15:43.000Z, ,"['880112']", , , ,0.483,79.99 +221.0,pick item,2019-05-24 16:41:54.000Z, ,"['880140']", , , ,0.44,476.0 +222.0,confirm order,2019-05-24 18:04:02.000Z, , ,"['990037']", , ,1.37,2505.0 +223.0,place order,2019-05-24 18:14:20.000Z, ,"['880146']","['990038']", , ,0.2,44.99 +224.0,confirm order,2019-05-24 18:19:52.000Z, , ,"['990036']", , ,2.969,1639.96 +225.0,item out of stock,2019-05-24 20:21:22.000Z, ,"['880136']", , , ,0.28,449.0 +226.0,place order,2019-05-24 21:08:15.000Z, ,"['880147']","['990039']", , ,1.28,154.99 +227.0,create package,2019-05-24 23:00:00.000Z, ,"['880065','880018','880068','880067','880019','880017']", ,"['660005']", ,2.325,1982.97 +228.0,place order,2019-05-25 19:24:33.000Z, ,"['880148','880149']","['990040']", , ,0.6829999999999999,539.99 +229.0,place order,2019-05-26 19:36:54.000Z, ,"['880155','880156','880151','880153','880154','880152','880150']","['990041']", , ,2.724,2836.97 +230.0,confirm order,2019-05-27 06:38:54.000Z, , ,"['990039']", , ,1.28,154.99 +231.0,pick item,2019-05-27 06:50:47.000Z, ,"['880139']", , , ,0.166,799.0 +232.0,reorder item,2019-05-27 06:56:35.000Z, ,"['880136']", , , ,0.28,449.0 +233.0,pay order,2019-05-27 07:22:27.000Z, , ,"['990023']", , ,2.76,354.98 +234.0,place order,2019-05-27 07:30:58.000Z, ,"['880158','880159','880163','880157','880161','880162','880160']","['990042']", , ,5.922999999999999,6397.98 +235.0,reorder item,2019-05-27 07:35:00.000Z, ,"['880045']", , , ,0.495,129.0 +236.0,pick item,2019-05-27 07:35:18.000Z, ,"['880146']", , , ,0.2,39.99 +237.0,pick item,2019-05-27 07:46:50.000Z, ,"['880161']", , , ,0.483,495.0 +238.0,send package,2019-05-27 07:50:01.000Z, , , ,"['660004']", ,4.755,4659.96 +239.0,pick item,2019-05-27 07:53:59.000Z, ,"['880021']", , , ,0.38,29.99 +240.0,pick item,2019-05-27 07:58:28.000Z, ,"['880158']", , , ,1.25,2200.0 +241.0,item out of stock,2019-05-27 08:09:08.000Z, ,"['880124']", , , ,0.483,1099.0 +242.0,reorder item,2019-05-27 08:17:35.000Z, ,"['880119']", , , ,0.98,129.99 +243.0,pick item,2019-05-27 08:25:30.000Z, ,"['880083']", , , ,0.495,129.0 +244.0,pick item,2019-05-27 08:29:17.000Z, ,"['880121']", , , ,0.28,89.99 +245.0,pick item,2019-05-27 08:33:28.000Z, ,"['880027']", , , ,0.28,89.99 +246.0,send package,2019-05-27 08:40:13.000Z, , , ,"['660003']", ,7.401,3148.95 +247.0,pick item,2019-05-27 08:52:57.000Z, ,"['880115']", , , ,0.166,799.0 +248.0,item out of stock,2019-05-27 09:03:53.000Z, ,"['880157']", , , ,0.78,99.99 +249.0,pick item,2019-05-27 09:16:53.000Z, ,"['880131']", , , ,0.483,79.99 +250.0,pick item,2019-05-27 09:20:54.000Z, ,"['880162']", , , ,1.37,2500.0 +251.0,place order,2019-05-27 09:21:43.000Z, ,"['880164','880167','880165','880166']","['990043']", , ,3.235,443.97 +252.0,reorder item,2019-05-27 09:36:36.000Z, ,"['880066']", , , ,0.188,1149.0 +253.0,pick item,2019-05-27 09:49:13.000Z, ,"['880118']", , , ,0.88,89.99 +254.0,create package,2019-05-27 09:49:13.000Z, ,"['880118','880121','880129','880036','880120','880122','880128']", ,"['660006']", ,4.785,3784.96 +255.0,confirm order,2019-05-27 10:03:03.000Z, , ,"['990041']", , ,2.724,2836.97 +256.0,pay order,2019-05-27 10:19:36.000Z, , ,"['990021']", , ,2.651,2535.99 +257.0,pick item,2019-05-27 10:21:13.000Z, ,"['880085']", , , ,0.495,129.0 +258.0,pick item,2019-05-27 10:21:51.000Z, ,"['880137']", , , ,1.28,149.99 +259.0,package delivered,2019-05-27 10:39:25.000Z, , , ,"['660004']", ,4.755,4659.96 +260.0,place order,2019-05-27 11:03:14.000Z, ,"['880171','880169','880168','880170','880172','880174','880173']","['990044']", , ,5.5360000000000005,5738.97 +261.0,pick item,2019-05-27 11:12:53.000Z, ,"['880133']", , , ,0.88,89.99 +262.0,reorder item,2019-05-27 11:34:25.000Z, ,"['880157']", , , ,0.78,99.99 +263.0,pick item,2019-05-27 11:40:28.000Z, ,"['880150']", , , ,0.21,529.0 +264.0,pick item,2019-05-27 12:01:57.000Z, ,"['880052']", , , ,0.483,495.0 +265.0,pick item,2019-05-27 12:14:58.000Z, ,"['880123']", , , ,0.38,29.99 +266.0,confirm order,2019-05-27 12:16:09.000Z, , ,"['990040']", , ,0.6829999999999999,539.99 +267.0,place order,2019-05-27 12:26:15.000Z, ,"['880176','880175','880177']","['990045']", , ,2.932,1053.98 +268.0,item out of stock,2019-05-27 12:35:23.000Z, ,"['880114']", , , ,0.21,529.0 +269.0,failed delivery,2019-05-27 12:56:21.000Z, , , ,"['660003']", ,7.401,3148.95 +270.0,item out of stock,2019-05-27 13:09:10.000Z, ,"['880147']", , , ,1.28,149.99 +271.0,pick item,2019-05-27 13:11:01.000Z, ,"['880066']", , , ,0.188,1149.0 +272.0,create package,2019-05-27 13:11:01.000Z, ,"['880062','880064','880059','880063']", ,"['660007']", ,2.345,3454.99 +273.0,pick item,2019-05-27 13:19:06.000Z, ,"['880154']", , , ,0.483,495.0 +274.0,pick item,2019-05-27 13:25:40.000Z, ,"['880170']", , , ,1.25,2200.0 +275.0,pick item,2019-05-27 13:29:21.000Z, ,"['880091']", , , ,0.28,449.0 +276.0,place order,2019-05-27 14:12:18.000Z, ,"['880179','880180','880178']","['990046']", , ,1.743,1223.98 +277.0,reorder item,2019-05-27 14:13:44.000Z, ,"['880114']", , , ,0.21,529.0 +278.0,pick item,2019-05-27 14:26:44.000Z, ,"['880117']", , , ,0.28,89.99 +279.0,create package,2019-05-27 14:26:44.000Z, ,"['880146','880075','880110','880056','880058','880074','880076','880057','880054']", ,"['660008']", ,5.968999999999999,4143.94 +280.0,pick item,2019-05-27 14:28:55.000Z, ,"['880165']", , , ,0.98,129.99 +281.0,confirm order,2019-05-27 14:50:41.000Z, , ,"['990045']", , ,2.932,1053.98 +282.0,pick item,2019-05-27 15:00:36.000Z, ,"['880082']", , , ,0.483,495.0 +283.0,pick item,2019-05-27 15:03:48.000Z, ,"['880138']", , , ,0.483,1099.0 +284.0,item out of stock,2019-05-27 15:35:34.000Z, ,"['880155']", , , ,0.188,1149.0 +285.0,place order,2019-05-27 15:44:23.000Z, ,"['880181','880184','880182','880183']","['990047']", , ,3.423,4960.99 +286.0,confirm order,2019-05-27 15:54:51.000Z, , ,"['990042']", , ,5.922999999999999,6397.98 +287.0,reorder item,2019-05-27 15:54:52.000Z, ,"['880001']", , , ,0.98,129.99 +288.0,item out of stock,2019-05-27 15:59:56.000Z, ,"['880180']", , , ,0.88,89.99 +289.0,send package,2019-05-27 16:57:39.000Z, , , ,"['660008']", ,5.968999999999999,4143.94 +290.0,place order,2019-05-27 17:52:44.000Z, ,"['880189','880190','880188','880186','880187','880185']","['990048']", , ,2.815,1927.97 +291.0,send package,2019-05-27 18:29:32.000Z, , , ,"['660005']", ,2.325,1982.97 +292.0,place order,2019-05-27 21:25:03.000Z, ,"['880193','880194','880192','880191']","['990049']", , ,3.028,1513.97 +293.0,pick item,2019-05-28 06:15:17.000Z, ,"['880172']", , , ,0.483,495.0 +294.0,pick item,2019-05-28 06:29:06.000Z, ,"['880114']", , , ,0.21,529.0 +295.0,pay order,2019-05-28 07:13:13.000Z, , ,"['990016']", , ,1.081,2217.99 +296.0,pick item,2019-05-28 07:17:12.000Z, ,"['880148']", , , ,0.483,495.0 +297.0,place order,2019-05-28 07:21:38.000Z, ,"['880198','880197','880196','880195']","['990050']", , ,2.04,2092.98 +298.0,pick item,2019-05-28 07:26:56.000Z, ,"['880143']", , , ,0.2,39.99 +299.0,reorder item,2019-05-28 07:35:37.000Z, ,"['880180']", , , ,0.88,89.99 +300.0,pick item,2019-05-28 07:38:13.000Z, ,"['880183']", , , ,0.44,476.0 +301.0,pick item,2019-05-28 07:49:33.000Z, ,"['880061']", , , ,1.37,2500.0 +302.0,create package,2019-05-28 07:49:33.000Z, ,"['880015','880158','880161','880162','880016']", ,"['660009']", ,4.026,6770.0 +303.0,pick item,2019-05-28 08:05:00.000Z, ,"['880156']", , , ,0.28,449.0 +304.0,pick item,2019-05-28 08:19:03.000Z, ,"['880192']", , , ,0.98,129.99 +305.0,pick item,2019-05-28 08:19:23.000Z, ,"['880179']", , , ,0.483,1099.0 +306.0,confirm order,2019-05-28 08:25:46.000Z, , ,"['990035']", , ,3.523,1902.98 +307.0,reorder item,2019-05-28 08:47:51.000Z, ,"['880093']", , , ,1.28,149.99 +308.0,pick item,2019-05-28 08:54:25.000Z, ,"['880163']", , , ,1.48,199.99 +309.0,place order,2019-05-28 09:03:03.000Z, ,"['880199','880200']","['990051']", , ,1.66,194.98 +310.0,send package,2019-05-28 09:03:28.000Z, , , ,"['660007']", ,2.345,3454.99 +311.0,pick item,2019-05-28 09:12:33.000Z, ,"['880089']", , , ,1.37,2500.0 +312.0,create package,2019-05-28 09:12:33.000Z, ,"['880090','880091','880148','880123','880092','880089','880088']", ,"['660010']", ,5.445,4522.97 +313.0,item out of stock,2019-05-28 09:26:38.000Z, ,"['880178']", , , ,0.38,29.99 +314.0,pay order,2019-05-28 09:34:27.000Z, , ,"['990035']", , ,3.523,1902.98 +315.0,item out of stock,2019-05-28 09:40:33.000Z, ,"['880171']", , , ,1.25,2200.0 +316.0,item out of stock,2019-05-28 09:41:41.000Z, ,"['880168']", , , ,0.21,529.0 +317.0,item out of stock,2019-05-28 09:49:20.000Z, ,"['880189']", , , ,0.2,39.99 +318.0,confirm order,2019-05-28 09:50:36.000Z, , ,"['990043']", , ,3.235,443.97 +319.0,pick item,2019-05-28 10:04:14.000Z, ,"['880193']", , , ,0.38,29.99 +320.0,pick item,2019-05-28 10:05:52.000Z, ,"['880180']", , , ,0.88,89.99 +321.0,pick item,2019-05-28 10:19:52.000Z, ,"['880044']", , , ,0.172,699.0 +322.0,place order,2019-05-28 10:25:54.000Z, ,"['880203','880202','880204','880201']","['990052']", , ,1.628,1732.98 +323.0,send package,2019-05-28 10:29:53.000Z, , , ,"['660006']", ,4.785,3784.96 +324.0,package delivered,2019-05-28 10:42:06.000Z, , , ,"['660003']", ,7.401,3148.95 +325.0,pick item,2019-05-28 11:31:07.000Z, ,"['880096']", , , ,1.28,149.99 +326.0,item out of stock,2019-05-28 11:54:25.000Z, ,"['880201']", , , ,0.188,1149.0 +327.0,reorder item,2019-05-28 11:58:57.000Z, ,"['880124']", , , ,0.483,1099.0 +328.0,place order,2019-05-28 12:11:35.000Z, ,"['880205','880206']","['990053']", , ,0.649,883.99 +329.0,pick item,2019-05-28 12:12:05.000Z, ,"['880206']", , , ,0.483,79.99 +330.0,pick item,2019-05-28 12:20:52.000Z, ,"['880097']", , , ,0.98,129.99 +331.0,pick item,2019-05-28 12:22:11.000Z, ,"['880160']", , , ,0.28,449.0 +332.0,create package,2019-05-28 12:22:11.000Z, ,"['880096','880154','880094','880156','880095','880150']", ,"['660011']", ,3.405,2451.98 +333.0,pick item,2019-05-28 12:51:35.000Z, ,"['880079']", , , ,1.25,2200.0 +334.0,pick item,2019-05-28 12:59:32.000Z, ,"['880188']", , , ,0.2,39.99 +335.0,pick item,2019-05-28 12:59:35.000Z, ,"['880153']", , , ,0.88,89.99 +336.0,pick item,2019-05-28 13:00:45.000Z, ,"['880202']", , , ,0.38,29.99 +337.0,item out of stock,2019-05-28 13:08:49.000Z, ,"['880167']", , , ,0.88,89.99 +338.0,item out of stock,2019-05-28 13:22:53.000Z, ,"['880142']", , , ,0.2,39.99 +339.0,confirm order,2019-05-28 13:30:21.000Z, , ,"['990047']", , ,3.423,4960.99 +340.0,pay order,2019-05-28 13:42:42.000Z, , ,"['990031']", , ,0.38,34.99 +341.0,place order,2019-05-28 13:42:58.000Z, ,"['880208','880207','880210','880209']","['990054']", , ,3.69,2893.98 +342.0,package delivered,2019-05-28 13:50:34.000Z, , , ,"['660006']", ,4.785,3784.96 +343.0,send package,2019-05-28 13:57:57.000Z, , , ,"['660010']", ,5.445,4522.97 +344.0,item out of stock,2019-05-28 13:59:05.000Z, ,"['880149']", , , ,0.2,39.99 +345.0,send package,2019-05-28 14:01:33.000Z, , , ,"['660011']", ,3.405,2451.98 +346.0,pick item,2019-05-28 14:05:02.000Z, ,"['880173']", , , ,1.48,199.99 +347.0,pick item,2019-05-28 14:07:01.000Z, ,"['880166']", , , ,0.88,89.99 +348.0,create package,2019-05-28 14:07:01.000Z, ,"['880081','880202','880125','880080','880079']", ,"['660012']", ,4.74,4649.97 +349.0,send package,2019-05-28 14:20:29.000Z, , , ,"['660009']", ,4.026,6770.0 +350.0,confirm order,2019-05-28 14:30:03.000Z, , ,"['990044']", , ,5.5360000000000005,5738.97 +351.0,pick item,2019-05-28 14:41:43.000Z, ,"['880037']", , , ,1.28,149.99 +352.0,pick item,2019-05-28 14:42:56.000Z, ,"['880060']", , , ,0.38,29.99 +353.0,pick item,2019-05-28 14:47:30.000Z, ,"['880207']", , , ,0.28,449.0 +354.0,confirm order,2019-05-28 14:48:38.000Z, , ,"['990049']", , ,3.028,1513.97 +355.0,reorder item,2019-05-28 15:01:29.000Z, ,"['880201']", , , ,0.188,1149.0 +356.0,pick item,2019-05-28 15:02:48.000Z, ,"['880175']", , , ,0.172,699.0 +357.0,item out of stock,2019-05-28 15:15:46.000Z, ,"['880176']", , , ,1.48,199.99 +358.0,reorder item,2019-05-28 15:20:33.000Z, ,"['880126']", , , ,0.483,79.99 +359.0,pick item,2019-05-28 15:21:54.000Z, ,"['880046']", , , ,0.495,129.0 +360.0,create package,2019-05-28 15:21:54.000Z, ,"['880180','880044','880042','880139','880143','880039','880034','880052','880179','880140','880037','880046']", ,"['660013']", ,6.3420000000000005,4691.95 +361.0,pick item,2019-05-28 15:22:26.000Z, ,"['880209']", , , ,0.88,89.99 +362.0,item out of stock,2019-05-28 15:25:06.000Z, ,"['880159']", , , ,0.28,449.0 +363.0,reorder item,2019-05-28 15:39:06.000Z, ,"['880142']", , , ,0.2,39.99 +364.0,place order,2019-05-28 15:45:43.000Z, ,"['880212','880214','880215','880213','880211']","['990055']", , ,2.619,1702.97 +365.0,package delivered,2019-05-28 15:52:39.000Z, , , ,"['660008']", ,5.968999999999999,4143.94 +366.0,confirm order,2019-05-28 16:21:13.000Z, , ,"['990048']", , ,2.815,1927.97 +367.0,place order,2019-05-28 17:56:44.000Z, ,"['880217','880219','880220','880216','880218']","['990056']", , ,2.596,2276.99 +368.0,package delivered,2019-05-28 18:08:20.000Z, , , ,"['660007']", ,2.345,3454.99 +369.0,pick item,2019-05-28 19:11:54.000Z, ,"['880187']", , , ,0.483,495.0 +370.0,place order,2019-05-28 21:33:03.000Z, ,"['880222','880221']","['990057']", , ,1.75,2534.99 +371.0,confirm order,2019-05-29 06:30:54.000Z, , ,"['990046']", , ,1.743,1223.98 +372.0,pick item,2019-05-29 06:41:50.000Z, ,"['880174']", , , ,0.483,79.99 +373.0,package delivered,2019-05-29 07:08:16.000Z, , , ,"['660010']", ,5.445,4522.97 +374.0,pick item,2019-05-29 07:14:08.000Z, ,"['880218']", , , ,0.483,495.0 +375.0,reorder item,2019-05-29 07:26:30.000Z, ,"['880167']", , , ,0.88,89.99 +376.0,pick item,2019-05-29 07:29:48.000Z, ,"['880126']", , , ,0.483,79.99 +377.0,place order,2019-05-29 07:31:14.000Z, ,"['880223','880224']","['990058']", , ,1.463,214.98 +378.0,package delivered,2019-05-29 07:50:36.000Z, , , ,"['660005']", ,2.325,1982.97 +379.0,pick item,2019-05-29 07:55:35.000Z, ,"['880222']", , , ,1.37,2500.0 +380.0,package delivered,2019-05-29 07:58:19.000Z, , , ,"['660011']", ,3.405,2451.98 +381.0,confirm order,2019-05-29 08:08:32.000Z, , ,"['990054']", , ,3.69,2893.98 +382.0,pay order,2019-05-29 08:23:08.000Z, , ,"['990048']", , ,2.815,1927.97 +383.0,confirm order,2019-05-29 08:27:42.000Z, , ,"['990055']", , ,2.619,1702.97 +384.0,pick item,2019-05-29 08:34:41.000Z, ,"['880186']", , , ,0.28,449.0 +385.0,pay order,2019-05-29 08:35:55.000Z, , ,"['990017']", , ,1.919,1646.99 +386.0,pay order,2019-05-29 09:06:49.000Z, , ,"['990013']", , ,3.194,3127.97 +387.0,pick item,2019-05-29 09:08:36.000Z, ,"['880212']", , , ,0.483,79.99 +388.0,reorder item,2019-05-29 09:09:08.000Z, ,"['880147']", , , ,1.28,149.99 +389.0,pick item,2019-05-29 09:09:24.000Z, ,"['880201']", , , ,0.188,1149.0 +390.0,pick item,2019-05-29 09:09:29.000Z, ,"['880223']", , , ,0.483,79.99 +391.0,confirm order,2019-05-29 09:09:46.000Z, , ,"['990057']", , ,1.75,2534.99 +392.0,pick item,2019-05-29 09:09:54.000Z, ,"['880152']", , , ,0.483,79.99 +393.0,pick item,2019-05-29 09:18:17.000Z, ,"['880197']", , , ,0.2,39.99 +394.0,create package,2019-05-29 09:18:17.000Z, ,"['880175','880082','880133','880134','880083','880131','880084','880085','880087']", ,"['660014']", ,3.616,3828.98 +395.0,place order,2019-05-29 09:22:16.000Z, ,"['880226','880225']","['990059']", , ,2.76,354.98 +396.0,pick item,2019-05-29 09:47:12.000Z, ,"['880221']", , , ,0.38,29.99 +397.0,item out of stock,2019-05-29 09:48:21.000Z, ,"['880194']", , , ,0.188,1149.0 +398.0,confirm order,2019-05-29 09:49:55.000Z, , ,"['990058']", , ,1.463,214.98 +399.0,pick item,2019-05-29 09:58:49.000Z, ,"['880205']", , , ,0.166,799.0 +400.0,package delivered,2019-05-29 10:01:39.000Z, , , ,"['660009']", ,4.026,6770.0 +401.0,pick item,2019-05-29 10:11:16.000Z, ,"['880136']", , , ,0.28,449.0 +402.0,pick item,2019-05-29 10:13:25.000Z, ,"['880142']", , , ,0.2,39.99 +403.0,item out of stock,2019-05-29 10:26:33.000Z, ,"['880182']", , , ,0.483,79.99 +404.0,pick item,2019-05-29 10:28:53.000Z, ,"['880219']", , , ,0.495,129.0 +405.0,place order,2019-05-29 11:04:19.000Z, ,"['880229','880228','880227']","['990060']", , ,1.818,1702.99 +406.0,pick item,2019-05-29 11:09:28.000Z, ,"['880184']", , , ,1.25,2200.0 +407.0,pick item,2019-05-29 11:27:05.000Z, ,"['880220']", , , ,0.166,799.0 +408.0,pick item,2019-05-29 11:34:57.000Z, ,"['880229']", , , ,0.166,799.0 +409.0,pick item,2019-05-29 11:59:21.000Z, ,"['880204']", , , ,0.78,99.99 +410.0,create package,2019-05-29 11:59:21.000Z, ,"['880097','880100']", ,"['660015']", ,1.76,229.98 +411.0,reorder item,2019-05-29 11:59:41.000Z, ,"['880116']", , , ,0.188,1149.0 +412.0,confirm order,2019-05-29 12:04:13.000Z, , ,"['990038']", , ,0.2,44.99 +413.0,item out of stock,2019-05-29 12:06:25.000Z, ,"['880181']", , , ,1.25,2200.0 +414.0,item out of stock,2019-05-29 12:23:06.000Z, ,"['880086']", , , ,0.78,99.99 +415.0,place order,2019-05-29 12:28:25.000Z, ,"['880232','880230','880233','880231']","['990061']", , ,1.673,753.97 +416.0,send package,2019-05-29 12:30:00.000Z, , , ,"['660013']", ,6.3420000000000005,4691.95 +417.0,item out of stock,2019-05-29 13:09:10.000Z, ,"['880215']", , , ,0.21,529.0 +418.0,pick item,2019-05-29 13:17:24.000Z, ,"['880203']", , , ,0.28,449.0 +419.0,confirm order,2019-05-29 13:23:52.000Z, , ,"['990056']", , ,2.596,2276.99 +420.0,confirm order,2019-05-29 13:28:13.000Z, , ,"['990052']", , ,1.628,1732.98 +421.0,pick item,2019-05-29 13:38:06.000Z, ,"['880210']", , , ,1.28,149.99 +422.0,create package,2019-05-29 13:38:06.000Z, ,"['880021','880107','880105','880104']", ,"['660016']", ,1.136,1387.98 +423.0,pick item,2019-05-29 13:42:37.000Z, ,"['880195']", , , ,0.172,699.0 +424.0,item out of stock,2019-05-29 13:44:58.000Z, ,"['880211']", , , ,0.166,799.0 +425.0,item out of stock,2019-05-29 13:52:18.000Z, ,"['880169']", , , ,0.38,29.99 +426.0,confirm order,2019-05-29 13:52:29.000Z, , ,"['990051']", , ,1.66,194.98 +427.0,reorder item,2019-05-29 13:52:50.000Z, ,"['880211']", , , ,0.166,799.0 +428.0,pay order,2019-05-29 14:05:52.000Z, , ,"['990047']", , ,3.423,4960.99 +429.0,pick item,2019-05-29 14:11:56.000Z, ,"['880232']", , , ,0.2,39.99 +430.0,package delivered,2019-05-29 14:14:22.000Z, , , ,"['660013']", ,6.3420000000000005,4691.95 +431.0,pick item,2019-05-29 14:14:28.000Z, ,"['880199']", , , ,0.88,89.99 +432.0,confirm order,2019-05-29 14:14:33.000Z, , ,"['990050']", , ,2.04,2092.98 +433.0,pick item,2019-05-29 14:14:37.000Z, ,"['880141']", , , ,1.48,199.99 +434.0,create package,2019-05-29 14:14:37.000Z, ,"['880027','880114','880009','880112']", ,"['660017']", ,1.413,1174.98 +435.0,send package,2019-05-29 14:16:17.000Z, , , ,"['660012']", ,4.74,4649.97 +436.0,place order,2019-05-29 14:16:38.000Z, ,"['880235','880234','880236']","['990062']", , ,1.96,274.97 +437.0,confirm order,2019-05-29 14:29:38.000Z, , ,"['990053']", , ,0.649,883.99 +438.0,item out of stock,2019-05-29 14:38:05.000Z, ,"['880198']", , , ,1.48,199.99 +439.0,pick item,2019-05-29 14:40:58.000Z, ,"['880213']", , , ,0.28,89.99 +440.0,pick item,2019-05-29 15:03:10.000Z, ,"['880233']", , , ,0.78,99.99 +441.0,pick item,2019-05-29 15:22:08.000Z, ,"['880208']", , , ,1.25,2200.0 +442.0,reorder item,2019-05-29 15:29:15.000Z, ,"['880149']", , , ,0.2,39.99 +443.0,pick item,2019-05-29 15:38:50.000Z, ,"['880200']", , , ,0.78,99.99 +444.0,create package,2019-05-29 15:38:50.000Z, ,"['880115','880117']", ,"['660018']", ,0.446,888.99 +445.0,pick item,2019-05-29 15:48:04.000Z, ,"['880190']", , , ,0.172,699.0 +446.0,pay order,2019-05-29 15:50:05.000Z, , ,"['990044']", , ,5.5360000000000005,5738.97 +447.0,place order,2019-05-29 15:53:03.000Z, ,"['880237','880238']","['990063']", , ,0.649,1299.0 +448.0,pick item,2019-05-29 16:01:12.000Z, ,"['880116']", , , ,0.188,1149.0 +449.0,create package,2019-05-29 16:01:12.000Z, ,"['880136','880138','880137','880205','880206','880197','880195']", ,"['660019']", ,3.064,3315.97 +450.0,pick item,2019-05-29 17:03:54.000Z, ,"['880235']", , , ,0.78,99.99 +451.0,send package,2019-05-29 17:08:32.000Z, , , ,"['660015']", ,1.76,229.98 +452.0,item out of stock,2019-05-29 17:08:54.000Z, ,"['880231']", , , ,0.21,529.0 +453.0,send package,2019-05-29 17:29:05.000Z, , , ,"['660014']", ,3.616,3828.98 +454.0,send package,2019-05-29 17:32:41.000Z, , , ,"['660019']", ,3.064,3315.97 +455.0,pay order,2019-05-29 17:51:41.000Z, , ,"['990024']", , ,2.432,983.98 +456.0,package delivered,2019-05-29 18:01:33.000Z, , , ,"['660012']", ,4.74,4649.97 +457.0,place order,2019-05-29 18:18:44.000Z, ,"['880243','880239','880242','880240','880241','880244']","['990064']", , ,3.6010000000000004,503.95 +458.0,reorder item,2019-05-29 19:12:50.000Z, ,"['880189']", , , ,0.2,39.99 +459.0,confirm order,2019-05-29 19:19:02.000Z, , ,"['990062']", , ,1.96,274.97 +460.0,pick item,2019-05-29 20:06:14.000Z, ,"['880240']", , , ,0.495,129.0 +461.0,place order,2019-05-29 21:17:03.000Z, ,"['880245','880246']","['990065']", , ,2.36,294.98 +462.0,create package,2019-05-29 23:00:00.000Z, ,"['880186','880187','880066','880233','880188','880229','880219','880220','880218','880232','880190']", ,"['660020']", ,3.613,5193.97 +463.0,pay order,2019-05-30 07:05:10.000Z, , ,"['990015']", , ,4.095,5989.98 +464.0,place order,2019-05-30 07:12:02.000Z, ,"['880250','880248','880249','880247','880251']","['990066']", , ,2.003,3490.99 +465.0,confirm order,2019-05-30 07:16:40.000Z, , ,"['990060']", , ,1.818,1702.99 +466.0,reorder item,2019-05-30 07:31:21.000Z, ,"['880231']", , , ,0.21,529.0 +467.0,pay order,2019-05-30 07:32:50.000Z, , ,"['990049']", , ,3.028,1513.97 +468.0,reorder item,2019-05-30 07:37:04.000Z, ,"['880168']", , , ,0.21,529.0 +469.0,confirm order,2019-05-30 07:38:47.000Z, , ,"['990059']", , ,2.76,354.98 +470.0,pick item,2019-05-30 07:43:40.000Z, ,"['880132']", , , ,0.188,1149.0 +471.0,pick item,2019-05-30 07:45:08.000Z, ,"['880227']", , , ,0.172,699.0 +472.0,pick item,2019-05-30 07:49:01.000Z, ,"['880250']", , , ,0.188,1149.0 +473.0,send package,2019-05-30 08:10:22.000Z, , , ,"['660016']", ,1.136,1387.98 +474.0,pay order,2019-05-30 08:13:37.000Z, , ,"['990058']", , ,1.463,214.98 +475.0,pay order,2019-05-30 08:15:05.000Z, , ,"['990054']", , ,3.69,2893.98 +476.0,send package,2019-05-30 08:19:45.000Z, , , ,"['660017']", ,1.413,1174.98 +477.0,package delivered,2019-05-30 08:34:44.000Z, , , ,"['660014']", ,3.616,3828.98 +478.0,item out of stock,2019-05-30 08:38:31.000Z, ,"['880247']", , , ,0.483,1099.0 +479.0,place order,2019-05-30 08:43:52.000Z, ,"['880258','880255','880260','880259','880254','880253','880257','880252','880256']","['990067']", , ,2.364,6236.99 +480.0,pick item,2019-05-30 08:45:36.000Z, ,"['880168']", , , ,0.21,529.0 +481.0,reorder item,2019-05-30 08:55:02.000Z, ,"['880169']", , , ,0.38,29.99 +482.0,reorder item,2019-05-30 09:09:54.000Z, ,"['880182']", , , ,0.483,79.99 +483.0,pick item,2019-05-30 09:19:57.000Z, ,"['880236']", , , ,0.2,39.99 +484.0,reorder item,2019-05-30 09:38:50.000Z, ,"['880155']", , , ,0.188,1149.0 +485.0,pick item,2019-05-30 09:57:08.000Z, ,"['880249']", , , ,0.28,449.0 +486.0,package delivered,2019-05-30 10:02:46.000Z, , , ,"['660016']", ,1.136,1387.98 +487.0,pick item,2019-05-30 10:07:51.000Z, ,"['880255']", , , ,0.483,79.99 +488.0,item out of stock,2019-05-30 10:17:23.000Z, ,"['880242']", , , ,0.483,79.99 +489.0,reorder item,2019-05-30 10:21:28.000Z, ,"['880159']", , , ,0.28,449.0 +490.0,pick item,2019-05-30 10:41:03.000Z, ,"['880035']", , , ,0.495,129.0 +491.0,place order,2019-05-30 10:47:31.000Z, ,"['880262','880263','880261','880264']","['990068']", , ,1.43,2021.99 +492.0,confirm order,2019-05-30 10:51:13.000Z, , ,"['990063']", , ,0.649,1299.0 +493.0,pick item,2019-05-30 10:51:51.000Z, ,"['880135']", , , ,1.48,199.99 +494.0,pick item,2019-05-30 10:51:52.000Z, ,"['880144']", , , ,0.483,79.99 +495.0,pick item,2019-05-30 10:51:54.000Z, ,"['880164']", , , ,0.495,129.0 +496.0,item out of stock,2019-05-30 10:55:12.000Z, ,"['880238']", , , ,0.166,799.0 +497.0,item out of stock,2019-05-30 10:57:07.000Z, ,"['880234']", , , ,0.98,129.99 +498.0,item out of stock,2019-05-30 11:08:25.000Z, ,"['880225']", , , ,1.48,199.99 +499.0,failed delivery,2019-05-30 11:16:22.000Z, , , ,"['660019']", ,3.064,3315.97 +500.0,send package,2019-05-30 11:17:32.000Z, , , ,"['660018']", ,0.446,888.99 +501.0,reorder item,2019-05-30 11:20:26.000Z, ,"['880130']", , , ,1.25,2200.0 +502.0,pick item,2019-05-30 11:25:59.000Z, ,"['880257']", , , ,0.28,449.0 +503.0,pick item,2019-05-30 11:56:47.000Z, ,"['880258']", , , ,0.495,129.0 +504.0,confirm order,2019-05-30 12:01:50.000Z, , ,"['990068']", , ,1.43,2021.99 +505.0,item out of stock,2019-05-30 12:11:54.000Z, ,"['880145']", , , ,1.37,2500.0 +506.0,pick item,2019-05-30 12:21:46.000Z, ,"['880196']", , , ,0.188,1149.0 +507.0,confirm order,2019-05-30 12:31:12.000Z, , ,"['990029']", , ,0.634,2042.99 +508.0,send package,2019-05-30 12:38:24.000Z, , , ,"['660020']", ,3.613,5193.97 +509.0,confirm order,2019-05-30 12:38:58.000Z, , ,"['990065']", , ,2.36,294.98 +510.0,package delivered,2019-05-30 12:50:42.000Z, , , ,"['660015']", ,1.76,229.98 +511.0,place order,2019-05-30 12:54:49.000Z, ,"['880268','880270','880265','880266','880269','880267','880271']","['990069']", , ,2.27,1973.97 +512.0,reorder item,2019-05-30 13:00:58.000Z, ,"['880181']", , , ,1.25,2200.0 +513.0,item out of stock,2019-05-30 13:10:23.000Z, ,"['880262']", , , ,0.495,129.0 +514.0,pick item,2019-05-30 13:19:44.000Z, ,"['880246']", , , ,1.48,199.99 +515.0,package delivered,2019-05-30 13:42:57.000Z, , , ,"['660018']", ,0.446,888.99 +516.0,pay order,2019-05-30 13:51:02.000Z, , ,"['990055']", , ,2.619,1702.97 +517.0,pick item,2019-05-30 13:56:05.000Z, ,"['880111']", , , ,0.78,99.99 +518.0,create package,2019-05-30 13:56:05.000Z, ,"['880060','880168','880172','880170','880174','880061','880173']", ,"['660021']", ,5.6560000000000015,6033.97 +519.0,reorder item,2019-05-30 13:56:27.000Z, ,"['880171']", , , ,1.25,2200.0 +520.0,pick item,2019-05-30 14:10:39.000Z, ,"['880253']", , , ,0.166,799.0 +521.0,pay order,2019-05-30 14:16:54.000Z, , ,"['990057']", , ,1.75,2534.99 +522.0,package delivered,2019-05-30 14:23:46.000Z, , , ,"['660019']", ,3.064,3315.97 +523.0,reorder item,2019-05-30 14:27:53.000Z, ,"['880194']", , , ,0.188,1149.0 +524.0,pick item,2019-05-30 14:31:52.000Z, ,"['880252']", , , ,0.166,799.0 +525.0,failed delivery,2019-05-30 14:34:12.000Z, , , ,"['660020']", ,3.613,5193.97 +526.0,reorder item,2019-05-30 14:47:55.000Z, ,"['880086']", , , ,0.78,99.99 +527.0,pick item,2019-05-30 14:47:58.000Z, ,"['880224']", , , ,0.98,129.99 +528.0,pick item,2019-05-30 14:49:57.000Z, ,"['880270']", , , ,0.44,476.0 +529.0,confirm order,2019-05-30 14:54:53.000Z, , ,"['990064']", , ,3.6010000000000004,503.95 +530.0,reorder item,2019-05-30 15:07:45.000Z, ,"['880198']", , , ,1.48,199.99 +531.0,place order,2019-05-30 15:09:26.000Z, ,"['880273','880272']","['990070']", , ,1.733,2700.0 +532.0,pick item,2019-05-30 15:22:02.000Z, ,"['880254']", , , ,0.188,1149.0 +533.0,pick item,2019-05-30 15:24:24.000Z, ,"['880226']", , , ,1.28,149.99 +534.0,reorder item,2019-05-30 15:34:42.000Z, ,"['880238']", , , ,0.166,799.0 +535.0,pick item,2019-05-30 15:36:37.000Z, ,"['880185']", , , ,1.48,199.99 +536.0,create package,2019-05-30 15:36:37.000Z, ,"['880164','880165','880035','880166','880183','880184']", ,"['660022']", ,4.54,3153.98 +537.0,pick item,2019-05-30 15:45:42.000Z, ,"['880217']", , , ,1.28,149.99 +538.0,pick item,2019-05-30 16:06:33.000Z, ,"['880191']", , , ,1.48,199.99 +539.0,pick item,2019-05-30 16:17:00.000Z, ,"['880269']", , , ,0.2,39.99 +540.0,place order,2019-05-30 16:38:39.000Z, ,"['880274','880276','880275']","['990071']", , ,1.7180000000000002,3803.0 +541.0,pick item,2019-05-30 16:55:46.000Z, ,"['880261']", , , ,0.28,89.99 +542.0,pick item,2019-05-30 17:28:01.000Z, ,"['880029']", , , ,0.495,129.0 +543.0,pick item,2019-05-30 18:10:16.000Z, ,"['880276']", , , ,0.188,1149.0 +544.0,create package,2019-05-30 18:10:16.000Z, ,"['880193','880192','880223','880224','880191']", ,"['660023']", ,4.303,569.95 +545.0,confirm order,2019-05-30 18:52:38.000Z, , ,"['990067']", , ,2.364,6236.99 +546.0,pay order,2019-05-30 18:54:23.000Z, , ,"['990029']", , ,0.634,2042.99 +547.0,place order,2019-05-30 19:35:32.000Z, ,"['880278','880279','880277']","['990072']", , ,2.648,1483.98 +548.0,place order,2019-05-31 03:51:06.000Z, ,"['880282','880283','880281','880280']","['990073']", , ,3.499,3998.99 +549.0,pick item,2019-05-31 06:19:07.000Z, ,"['880244']", , , ,0.483,79.99 +550.0,pick item,2019-05-31 06:51:28.000Z, ,"['880280']", , , ,1.48,199.99 +551.0,pick item,2019-05-31 06:52:10.000Z, ,"['880283']", , , ,1.37,2500.0 +552.0,pick item,2019-05-31 07:09:49.000Z, ,"['880151']", , , ,0.2,39.99 +553.0,pick item,2019-05-31 07:59:47.000Z, ,"['880267']", , , ,0.495,129.0 +554.0,create package,2019-05-31 07:59:47.000Z, ,"['880246','880163','880160']", ,"['660024']", ,3.24,848.98 +555.0,confirm order,2019-05-31 08:22:31.000Z, , ,"['990066']", , ,2.003,3490.99 +556.0,place order,2019-05-31 08:28:00.000Z, ,"['880284']","['990074']", , ,0.2,44.99 +557.0,failed delivery,2019-05-31 08:30:10.000Z, , , ,"['660020']", ,3.613,5193.97 +558.0,confirm order,2019-05-31 08:51:25.000Z, , ,"['990074']", , ,0.2,44.99 +559.0,pick item,2019-05-31 08:51:31.000Z, ,"['880237']", , , ,0.483,495.0 +560.0,reorder item,2019-05-31 08:54:36.000Z, ,"['880215']", , , ,0.21,529.0 +561.0,pick item,2019-05-31 08:56:50.000Z, ,"['880102']", , , ,0.2,39.99 +562.0,package delivered,2019-05-31 09:00:07.000Z, , , ,"['660017']", ,1.413,1174.98 +563.0,pick item,2019-05-31 09:02:37.000Z, ,"['880248']", , , ,0.172,699.0 +564.0,create package,2019-05-31 09:02:37.000Z, ,"['880152','880151','880153']", ,"['660025']", ,1.5630000000000002,209.97 +565.0,item out of stock,2019-05-31 09:18:27.000Z, ,"['880216']", , , ,0.172,699.0 +566.0,reorder item,2019-05-31 09:22:02.000Z, ,"['880178']", , , ,0.38,29.99 +567.0,pick item,2019-05-31 09:44:29.000Z, ,"['880239']", , , ,0.88,89.99 +568.0,send package,2019-05-31 10:07:26.000Z, , , ,"['660021']", ,5.6560000000000015,6033.97 +569.0,place order,2019-05-31 10:15:47.000Z, ,"['880288','880285','880287','880286','880289']","['990075']", , ,2.3280000000000003,4362.98 +570.0,pick item,2019-05-31 10:26:27.000Z, ,"['880268']", , , ,0.2,39.99 +571.0,pick item,2019-05-31 10:36:18.000Z, ,"['880287']", , , ,0.28,89.99 +572.0,create package,2019-05-31 10:36:18.000Z, ,"['880204','880203','880207','880209','880126','880208','880276','880210','880201']", ,"['660026']", ,5.609,5815.96 +573.0,send package,2019-05-31 10:37:28.000Z, , , ,"['660023']", ,4.303,569.95 +574.0,pick item,2019-05-31 10:39:07.000Z, ,"['880214']", , , ,1.48,199.99 +575.0,package delivered,2019-05-31 10:59:10.000Z, , , ,"['660021']", ,5.6560000000000015,6033.97 +576.0,send package,2019-05-31 11:02:49.000Z, , , ,"['660024']", ,3.24,848.98 +577.0,item out of stock,2019-05-31 11:22:56.000Z, ,"['880260']", , , ,0.21,529.0 +578.0,item out of stock,2019-05-31 11:24:44.000Z, ,"['880273']", , , ,1.25,2200.0 +579.0,send package,2019-05-31 11:32:02.000Z, , , ,"['660025']", ,1.5630000000000002,209.97 +580.0,confirm order,2019-05-31 11:38:24.000Z, , ,"['990061']", , ,1.673,753.97 +581.0,place order,2019-05-31 11:51:22.000Z, ,"['880292','880291','880294','880293','880290']","['990076']", , ,5.8,8233.99 +582.0,confirm order,2019-05-31 11:54:42.000Z, , ,"['990070']", , ,1.733,2700.0 +583.0,pick item,2019-05-31 12:53:22.000Z, ,"['880272']", , , ,0.483,495.0 +584.0,pay order,2019-05-31 12:55:51.000Z, , ,"['990020']", , ,3.48,4534.99 +585.0,failed delivery,2019-05-31 12:58:13.000Z, , , ,"['660020']", ,3.613,5193.97 +586.0,package delivered,2019-05-31 13:13:21.000Z, , , ,"['660025']", ,1.5630000000000002,209.97 +587.0,pay order,2019-05-31 13:34:57.000Z, , ,"['990056']", , ,2.596,2276.99 +588.0,pay order,2019-05-31 13:35:49.000Z, , ,"['990025']", , ,5.172999999999999,3773.96 +589.0,pick item,2019-05-31 13:48:28.000Z, ,"['880119']", , , ,0.98,129.99 +590.0,reorder item,2019-05-31 13:56:59.000Z, ,"['880176']", , , ,1.48,199.99 +591.0,place order,2019-05-31 14:02:31.000Z, ,"['880300','880296','880297','880298','880295','880299']","['990077']", , ,3.603,949.95 +592.0,reorder item,2019-05-31 14:04:52.000Z, ,"['880260']", , , ,0.21,529.0 +593.0,pick item,2019-05-31 14:09:02.000Z, ,"['880296']", , , ,0.98,129.99 +594.0,package delivered,2019-05-31 14:18:19.000Z, , , ,"['660020']", ,3.613,5193.97 +595.0,confirm order,2019-05-31 14:28:32.000Z, , ,"['990077']", , ,3.603,949.95 +596.0,pick item,2019-05-31 14:36:00.000Z, ,"['880251']", , , ,0.88,89.99 +597.0,pick item,2019-05-31 14:47:57.000Z, ,"['880281']", , , ,0.483,495.0 +598.0,item out of stock,2019-05-31 14:53:38.000Z, ,"['880278']", , , ,0.188,1149.0 +599.0,item out of stock,2019-05-31 15:13:03.000Z, ,"['880259']", , , ,0.188,1149.0 +600.0,place order,2019-05-31 15:24:50.000Z, ,"['880304','880302','880303','880301']","['990078']", , ,0.942,1771.99 +601.0,pick item,2019-05-31 15:25:32.000Z, ,"['880282']", , , ,0.166,799.0 +602.0,confirm order,2019-05-31 15:26:51.000Z, , ,"['990072']", , ,2.648,1483.98 +603.0,reorder item,2019-05-31 15:36:35.000Z, ,"['880259']", , , ,0.188,1149.0 +604.0,pick item,2019-05-31 15:59:58.000Z, ,"['880130']", , , ,1.25,2200.0 +605.0,confirm order,2019-05-31 16:35:12.000Z, , ,"['990071']", , ,1.7180000000000002,3803.0 +606.0,confirm order,2019-05-31 16:38:01.000Z, , ,"['990076']", , ,5.8,8233.99 +607.0,pick item,2019-05-31 17:05:24.000Z, ,"['880293']", , , ,1.37,2500.0 +608.0,create package,2019-05-31 17:05:24.000Z, ,"['880144','880272','880221','880141','880029','880222','880142']", ,"['660027']", ,4.891,3473.96 +609.0,place order,2019-05-31 17:09:27.000Z, ,"['880306','880310','880308','880307','880305','880309']","['990079']", , ,2.903,4084.98 +610.0,confirm order,2019-05-31 17:40:05.000Z, , ,"['990069']", , ,2.27,1973.97 +611.0,pick item,2019-05-31 18:38:22.000Z, ,"['880306']", , , ,0.483,495.0 +612.0,package delivered,2019-05-31 18:47:49.000Z, , , ,"['660024']", ,3.24,848.98 +613.0,pay order,2019-05-31 19:00:56.000Z, , ,"['990070']", , ,1.733,2700.0 +614.0,pay order,2019-05-31 19:05:52.000Z, , ,"['990006']", , ,1.432,923.98 +615.0,item out of stock,2019-05-31 19:21:19.000Z, ,"['880228']", , , ,1.48,199.99 +616.0,item out of stock,2019-05-31 19:50:08.000Z, ,"['880294']", , , ,1.37,2500.0 +617.0,place order,2019-05-31 19:58:29.000Z, ,"['880311','880312','880313']","['990080']", , ,2.336,3683.99 +618.0,place order,2019-06-01 13:50:48.000Z, ,"['880315','880317','880316','880314']","['990081']", , ,1.98,1302.98 +619.0,place order,2019-06-02 14:35:30.000Z, ,"['880320','880321','880318','880319','880322']","['990082']", , ,2.423,1333.96 +620.0,place order,2019-06-03 06:44:59.000Z, ,"['880323','880324','880325']","['990083']", , ,2.84,753.98 +621.0,pay order,2019-06-03 06:49:00.000Z, , ,"['990062']", , ,1.96,274.97 +622.0,pick item,2019-06-03 06:54:27.000Z, ,"['880284']", , , ,0.2,39.99 +623.0,pick item,2019-06-03 07:07:21.000Z, ,"['880299']", , , ,0.483,495.0 +624.0,item out of stock,2019-06-03 07:12:28.000Z, ,"['880309']", , , ,1.37,2500.0 +625.0,package delivered,2019-06-03 07:14:37.000Z, , , ,"['660023']", ,4.303,569.95 +626.0,pick item,2019-06-03 07:15:51.000Z, ,"['880313']", , , ,0.483,79.99 +627.0,pick item,2019-06-03 07:31:09.000Z, ,"['880300']", , , ,0.2,39.99 +628.0,pick item,2019-06-03 08:02:34.000Z, ,"['880319']", , , ,0.38,29.99 +629.0,pay order,2019-06-03 08:34:21.000Z, , ,"['990052']", , ,1.628,1732.98 +630.0,pick item,2019-06-03 08:42:52.000Z, ,"['880157']", , , ,0.78,99.99 +631.0,create package,2019-06-03 08:42:52.000Z, ,"['880212','880235','880214','880199','880236','880213','880200']", ,"['660028']", ,4.883,699.93 +632.0,confirm order,2019-06-03 08:43:21.000Z, , ,"['990083']", , ,2.84,753.98 +633.0,pick item,2019-06-03 08:48:17.000Z, ,"['880274']", , , ,0.28,449.0 +634.0,pick item,2019-06-03 08:51:44.000Z, ,"['880304']", , , ,0.21,529.0 +635.0,place order,2019-06-03 08:57:16.000Z, ,"['880331','880335','880330','880328','880329','880327','880334','880326','880332','880333']","['990084']", , ,4.609,4029.95 +636.0,pay order,2019-06-03 08:59:11.000Z, , ,"['990076']", , ,5.8,8233.99 +637.0,pay order,2019-06-03 09:04:21.000Z, , ,"['990022']", , ,3.102,3802.99 +638.0,confirm order,2019-06-03 09:08:16.000Z, , ,"['990080']", , ,2.336,3683.99 +639.0,pick item,2019-06-03 09:11:17.000Z, ,"['880307']", , , ,0.2,39.99 +640.0,pick item,2019-06-03 09:13:03.000Z, ,"['880321']", , , ,0.98,129.99 +641.0,send package,2019-06-03 09:23:31.000Z, , , ,"['660022']", ,4.54,3153.98 +642.0,pick item,2019-06-03 09:43:58.000Z, ,"['880295']", , , ,0.88,89.99 +643.0,reorder item,2019-06-03 10:04:11.000Z, ,"['880309']", , , ,1.37,2500.0 +644.0,confirm order,2019-06-03 10:13:48.000Z, , ,"['990081']", , ,1.98,1302.98 +645.0,pay order,2019-06-03 10:26:24.000Z, , ,"['990045']", , ,2.932,1053.98 +646.0,place order,2019-06-03 11:14:19.000Z, ,"['880337','880336']","['990085']", , ,2.16,244.98 +647.0,pick item,2019-06-03 11:19:07.000Z, ,"['880147']", , , ,1.28,149.99 +648.0,pick item,2019-06-03 11:21:46.000Z, ,"['880127']", , , ,0.483,495.0 +649.0,create package,2019-06-03 11:21:46.000Z, ,"['880258','880255','880116','880254','880253','880257','880252']", ,"['660029']", ,1.966,4553.99 +650.0,confirm order,2019-06-03 11:34:02.000Z, , ,"['990073']", , ,3.499,3998.99 +651.0,confirm order,2019-06-03 11:55:54.000Z, , ,"['990084']", , ,4.609,4029.95 +652.0,send package,2019-06-03 12:07:59.000Z, , , ,"['660027']", ,4.891,3473.96 +653.0,pick item,2019-06-03 12:20:04.000Z, ,"['880265']", , , ,0.483,495.0 +654.0,pick item,2019-06-03 12:39:58.000Z, ,"['880311']", , , ,0.483,1099.0 +655.0,send package,2019-06-03 12:44:40.000Z, , , ,"['660026']", ,5.609,5815.96 +656.0,item out of stock,2019-06-03 12:45:08.000Z, ,"['880336']", , , ,1.28,149.99 +657.0,place order,2019-06-03 12:48:26.000Z, ,"['880341','880338','880340','880342','880339']","['990086']", , ,2.398,2102.97 +658.0,pay order,2019-06-03 13:00:23.000Z, , ,"['990068']", , ,1.43,2021.99 +659.0,reorder item,2019-06-03 13:14:27.000Z, ,"['880228']", , , ,1.48,199.99 +660.0,send package,2019-06-03 13:15:53.000Z, , , ,"['660029']", ,1.966,4553.99 +661.0,item out of stock,2019-06-03 13:27:21.000Z, ,"['880291']", , , ,1.48,199.99 +662.0,pay order,2019-06-03 13:35:15.000Z, , ,"['990071']", , ,1.7180000000000002,3803.0 +663.0,reorder item,2019-06-03 13:49:59.000Z, ,"['880262']", , , ,0.495,129.0 +664.0,pick item,2019-06-03 13:56:11.000Z, ,"['880329']", , , ,1.48,199.99 +665.0,pick item,2019-06-03 14:01:31.000Z, ,"['880335']", , , ,0.2,39.99 +666.0,pick item,2019-06-03 14:03:09.000Z, ,"['880331']", , , ,0.38,29.99 +667.0,confirm order,2019-06-03 14:08:44.000Z, , ,"['990079']", , ,2.903,4084.98 +668.0,pay order,2019-06-03 14:17:22.000Z, , ,"['990081']", , ,1.98,1302.98 +669.0,item out of stock,2019-06-03 14:20:25.000Z, ,"['880290']", , , ,1.37,2500.0 +670.0,pick item,2019-06-03 14:21:01.000Z, ,"['880302']", , , ,0.172,699.0 +671.0,pick item,2019-06-03 14:22:21.000Z, ,"['880260']", , , ,0.21,529.0 +672.0,create package,2019-06-03 14:22:21.000Z, ,"['880239','880240','880244','880111']", ,"['660030']", ,2.638,398.97 +673.0,reorder item,2019-06-03 14:28:04.000Z, ,"['880247']", , , ,0.483,1099.0 +674.0,reorder item,2019-06-03 14:29:40.000Z, ,"['880336']", , , ,1.28,149.99 +675.0,reorder item,2019-06-03 14:32:50.000Z, ,"['880242']", , , ,0.483,79.99 +676.0,reorder item,2019-06-03 14:35:35.000Z, ,"['880290']", , , ,1.37,2500.0 +677.0,package delivered,2019-06-03 14:37:21.000Z, , , ,"['660022']", ,4.54,3153.98 +678.0,reorder item,2019-06-03 14:44:51.000Z, ,"['880294']", , , ,1.37,2500.0 +679.0,place order,2019-06-03 14:56:39.000Z, ,"['880350','880348','880352','880349','880345','880351','880343','880344','880346','880347']","['990087']", , ,5.017,3940.94 +680.0,item out of stock,2019-06-03 15:13:35.000Z, ,"['880279']", , , ,0.98,129.99 +681.0,pick item,2019-06-03 15:21:25.000Z, ,"['880298']", , , ,0.28,89.99 +682.0,pick item,2019-06-03 15:43:44.000Z, ,"['880243']", , , ,0.88,89.99 +683.0,item out of stock,2019-06-03 15:50:55.000Z, ,"['880292']", , , ,0.21,529.0 +684.0,pick item,2019-06-03 16:08:28.000Z, ,"['880325']", , , ,1.28,149.99 +685.0,pick item,2019-06-03 16:10:26.000Z, ,"['880317']", , , ,0.28,89.99 +686.0,create package,2019-06-03 16:10:26.000Z, ,"['880321','880130','880319','880132']", ,"['660031']", ,2.798,3508.98 +687.0,pick item,2019-06-03 16:28:42.000Z, ,"['880256']", , , ,0.188,1149.0 +688.0,pick item,2019-06-03 16:56:31.000Z, ,"['880312']", , , ,1.37,2500.0 +689.0,pick item,2019-06-03 16:58:49.000Z, ,"['880333']", , , ,0.166,799.0 +690.0,place order,2019-06-03 17:13:05.000Z, ,"['880353']","['990088']", , ,0.483,500.0 +691.0,pick item,2019-06-03 17:30:05.000Z, ,"['880045']", , , ,0.495,129.0 +692.0,create package,2019-06-03 17:30:05.000Z, ,"['880217','880237','880306','880307','880227','880185']", ,"['660032']", ,4.098,2078.97 +693.0,pick item,2019-06-03 17:38:59.000Z, ,"['880349']", , , ,0.88,89.99 +694.0,pick item,2019-06-03 17:59:08.000Z, ,"['880294']", , , ,1.37,2500.0 +695.0,pick item,2019-06-03 18:41:29.000Z, ,"['880245']", , , ,0.88,89.99 +696.0,pick item,2019-06-03 19:19:52.000Z, ,"['880093']", , , ,1.28,149.99 +697.0,send package,2019-06-03 19:34:51.000Z, , , ,"['660028']", ,4.883,699.93 +698.0,place order,2019-06-03 20:05:45.000Z, ,"['880356','880355','880354']","['990089']", , ,2.458,1432.99 +699.0,confirm order,2019-06-03 20:22:53.000Z, , ,"['990087']", , ,5.017,3940.94 +700.0,create package,2019-06-03 23:00:00.000Z, ,"['880250','880248','880249','880093','880251']", ,"['660033']", ,2.8,2536.98 +701.0,place order,2019-06-04 05:52:24.000Z, ,"['880359','880358','880360','880357']","['990090']", , ,3.14,1256.98 +702.0,pick item,2019-06-04 06:21:37.000Z, ,"['880189']", , , ,0.2,39.99 +703.0,item out of stock,2019-06-04 07:06:28.000Z, ,"['880308']", , , ,0.2,39.99 +704.0,pick item,2019-06-04 07:17:15.000Z, ,"['880301']", , , ,0.28,89.99 +705.0,item out of stock,2019-06-04 07:19:02.000Z, ,"['880352']", , , ,0.2,39.99 +706.0,item out of stock,2019-06-04 07:31:10.000Z, ,"['880341']", , , ,0.483,79.99 +707.0,pick item,2019-06-04 07:33:27.000Z, ,"['880124']", , , ,0.483,1099.0 +708.0,reorder item,2019-06-04 07:43:15.000Z, ,"['880225']", , , ,1.48,199.99 +709.0,package delivered,2019-06-04 07:55:18.000Z, , , ,"['660029']", ,1.966,4553.99 +710.0,pick item,2019-06-04 08:01:17.000Z, ,"['880346']", , , ,0.38,29.99 +711.0,reorder item,2019-06-04 08:09:42.000Z, ,"['880279']", , , ,0.98,129.99 +712.0,confirm order,2019-06-04 08:12:11.000Z, , ,"['990086']", , ,2.398,2102.97 +713.0,pick item,2019-06-04 08:18:03.000Z, ,"['880086']", , , ,0.78,99.99 +714.0,pick item,2019-06-04 08:21:31.000Z, ,"['880310']", , , ,0.44,476.0 +715.0,pick item,2019-06-04 08:21:54.000Z, ,"['880215']", , , ,0.21,529.0 +716.0,create package,2019-06-04 08:21:54.000Z, ,"['880300','880294','880295','880135','880296','880298','880299','880196','880293']", ,"['660034']", ,7.231,7193.95 +717.0,package delivered,2019-06-04 08:32:16.000Z, , , ,"['660027']", ,4.891,3473.96 +718.0,reorder item,2019-06-04 08:34:38.000Z, ,"['880273']", , , ,1.25,2200.0 +719.0,item out of stock,2019-06-04 08:37:22.000Z, ,"['880275']", , , ,1.25,2200.0 +720.0,place order,2019-06-04 08:41:26.000Z, ,"['880363','880362','880361','880364']","['990091']", , ,3.08,860.97 +721.0,pick item,2019-06-04 08:53:16.000Z, ,"['880279']", , , ,0.98,129.99 +722.0,pick item,2019-06-04 08:56:03.000Z, ,"['880241']", , , ,0.38,29.99 +723.0,pick item,2019-06-04 09:08:08.000Z, ,"['880340']", , , ,0.172,699.0 +724.0,pick item,2019-06-04 09:09:08.000Z, ,"['880348']", , , ,0.483,1099.0 +725.0,send package,2019-06-04 09:15:46.000Z, , , ,"['660033']", ,2.8,2536.98 +726.0,send package,2019-06-04 09:24:58.000Z, , , ,"['660034']", ,7.231,7193.95 +727.0,send package,2019-06-04 09:28:14.000Z, , , ,"['660030']", ,2.638,398.97 +728.0,send package,2019-06-04 09:31:54.000Z, , , ,"['660032']", ,4.098,2078.97 +729.0,pick item,2019-06-04 09:34:55.000Z, ,"['880330']", , , ,0.98,129.99 +730.0,pick item,2019-06-04 09:51:39.000Z, ,"['880364']", , , ,0.28,89.99 +731.0,pick item,2019-06-04 09:55:19.000Z, ,"['880322']", , , ,0.38,29.99 +732.0,pick item,2019-06-04 09:56:47.000Z, ,"['880324']", , , ,0.28,449.0 +733.0,pick item,2019-06-04 10:25:02.000Z, ,"['880351']", , , ,0.188,1149.0 +734.0,create package,2019-06-04 10:25:02.000Z, ,"['880268','880226','880270','880265','880269','880267']", ,"['660035']", ,3.0980000000000003,1329.97 +735.0,item out of stock,2019-06-04 10:27:48.000Z, ,"['880357']", , , ,0.44,476.0 +736.0,place order,2019-06-04 10:42:39.000Z, ,"['880365','880366','880367']","['990092']", , ,1.256,2392.99 +737.0,package delivered,2019-06-04 10:49:08.000Z, , , ,"['660026']", ,5.609,5815.96 +738.0,confirm order,2019-06-04 10:50:40.000Z, , ,"['990092']", , ,1.256,2392.99 +739.0,pick item,2019-06-04 11:35:11.000Z, ,"['880288']", , , ,0.21,529.0 +740.0,pick item,2019-06-04 11:48:30.000Z, ,"['880342']", , , ,0.98,129.99 +741.0,confirm order,2019-06-04 11:49:03.000Z, , ,"['990089']", , ,2.458,1432.99 +742.0,pick item,2019-06-04 11:59:31.000Z, ,"['880356']", , , ,0.483,1099.0 +743.0,confirm order,2019-06-04 11:59:35.000Z, , ,"['990085']", , ,2.16,244.98 +744.0,pick item,2019-06-04 12:19:39.000Z, ,"['880345']", , , ,0.28,449.0 +745.0,pay order,2019-06-04 12:36:40.000Z, , ,"['990073']", , ,3.499,3998.99 +746.0,pick item,2019-06-04 12:43:40.000Z, ,"['880318']", , , ,0.483,1099.0 +747.0,place order,2019-06-04 12:45:06.000Z, ,"['880369','880371','880370','880368']","['990093']", , ,1.195,2731.99 +748.0,pick item,2019-06-04 13:15:34.000Z, ,"['880177']", , , ,1.28,149.99 +749.0,create package,2019-06-04 13:15:34.000Z, ,"['880288','880102','880287','880261']", ,"['660036']", ,0.97,748.97 +750.0,send package,2019-06-04 13:18:56.000Z, , , ,"['660035']", ,3.0980000000000003,1329.97 +751.0,pick item,2019-06-04 13:20:53.000Z, ,"['880001']", , , ,0.98,129.99 +752.0,pick item,2019-06-04 13:21:41.000Z, ,"['880271']", , , ,0.172,699.0 +753.0,pick item,2019-06-04 13:26:39.000Z, ,"['880178']", , , ,0.38,29.99 +754.0,item out of stock,2019-06-04 13:27:20.000Z, ,"['880297']", , , ,0.78,99.99 +755.0,confirm order,2019-06-04 13:34:40.000Z, , ,"['990082']", , ,2.423,1333.96 +756.0,package delivered,2019-06-04 13:39:23.000Z, , , ,"['660032']", ,4.098,2078.97 +757.0,package delivered,2019-06-04 13:56:37.000Z, , , ,"['660034']", ,7.231,7193.95 +758.0,reorder item,2019-06-04 13:59:04.000Z, ,"['880292']", , , ,0.21,529.0 +759.0,pick item,2019-06-04 14:01:06.000Z, ,"['880369']", , , ,0.166,799.0 +760.0,create package,2019-06-04 14:01:06.000Z, ,"['880304','880325','880301','880281','880280','880282','880302','880283','880324']", ,"['660037']", ,5.721,5910.97 +761.0,pick item,2019-06-04 14:03:34.000Z, ,"['880353']", , , ,0.483,495.0 +762.0,item out of stock,2019-06-04 14:14:18.000Z, ,"['880339']", , , ,0.483,1099.0 +763.0,reorder item,2019-06-04 14:24:00.000Z, ,"['880339']", , , ,0.483,1099.0 +764.0,pay order,2019-06-04 14:28:40.000Z, , ,"['990089']", , ,2.458,1432.99 +765.0,pick item,2019-06-04 14:39:34.000Z, ,"['880263']", , , ,0.172,699.0 +766.0,pick item,2019-06-04 14:44:14.000Z, ,"['880365']", , , ,0.188,1149.0 +767.0,place order,2019-06-04 14:49:59.000Z, ,"['880372','880375','880373','880374']","['990094']", , ,1.546,1013.97 +768.0,send package,2019-06-04 14:54:41.000Z, , , ,"['660037']", ,5.721,5910.97 +769.0,item out of stock,2019-06-04 14:57:45.000Z, ,"['880285']", , , ,0.188,1149.0 +770.0,pick item,2019-06-04 15:01:59.000Z, ,"['880315']", , , ,0.21,529.0 +771.0,pick item,2019-06-04 15:27:59.000Z, ,"['880303']", , , ,0.28,449.0 +772.0,pick item,2019-06-04 15:29:46.000Z, ,"['880367']", , , ,0.88,89.99 +773.0,reorder item,2019-06-04 15:56:15.000Z, ,"['880145']", , , ,1.37,2500.0 +774.0,send package,2019-06-04 16:00:57.000Z, , , ,"['660036']", ,0.97,748.97 +775.0,confirm order,2019-06-04 16:09:25.000Z, , ,"['990093']", , ,1.195,2731.99 +776.0,confirm order,2019-06-04 16:16:27.000Z, , ,"['990091']", , ,3.08,860.97 +777.0,pick item,2019-06-04 16:22:49.000Z, ,"['880181']", , , ,1.25,2200.0 +778.0,pick item,2019-06-04 16:27:39.000Z, ,"['880316']", , , ,1.28,149.99 +779.0,item out of stock,2019-06-04 16:42:52.000Z, ,"['880371']", , , ,0.166,799.0 +780.0,reorder item,2019-06-04 16:45:54.000Z, ,"['880216']", , , ,0.172,699.0 +781.0,confirm order,2019-06-04 16:56:33.000Z, , ,"['990088']", , ,0.483,500.0 +782.0,place order,2019-06-04 16:59:46.000Z, ,"['880379','880376','880378','880377','880380','880381']","['990095']", , ,5.483,4262.97 +783.0,pick item,2019-06-04 17:51:21.000Z, ,"['880266']", , , ,0.28,89.99 +784.0,create package,2019-06-04 17:51:21.000Z, ,"['880315','880181','880317','880119','880316']", ,"['660038']", ,4.0,3098.97 +785.0,reorder item,2019-06-04 18:50:25.000Z, ,"['880341']", , , ,0.483,79.99 +786.0,pick item,2019-06-04 19:03:10.000Z, ,"['880286']", , , ,1.37,2500.0 +787.0,pick item,2019-06-04 19:52:25.000Z, ,"['880370']", , , ,0.38,29.99 +788.0,place order,2019-06-04 20:38:52.000Z, ,"['880383','880382']","['990096']", , ,1.09,623.99 +789.0,place order,2019-06-05 07:09:19.000Z, ,"['880388','880385','880386','880384','880389','880387']","['990097']", , ,6.92,5980.97 +790.0,item out of stock,2019-06-05 07:09:58.000Z, ,"['880327']", , , ,0.28,449.0 +791.0,send package,2019-06-05 07:11:11.000Z, , , ,"['660031']", ,2.798,3508.98 +792.0,pick item,2019-06-05 07:12:01.000Z, ,"['880350']", , , ,0.38,29.99 +793.0,pick item,2019-06-05 07:17:23.000Z, ,"['880055']", , , ,0.38,29.99 +794.0,reorder item,2019-06-05 07:23:32.000Z, ,"['880308']", , , ,0.2,39.99 +795.0,confirm order,2019-06-05 07:29:25.000Z, , ,"['990075']", , ,2.3280000000000003,4362.98 +796.0,pay order,2019-06-05 07:31:56.000Z, , ,"['990028']", , ,0.973,1062.99 +797.0,reorder item,2019-06-05 07:40:01.000Z, ,"['880234']", , , ,0.98,129.99 +798.0,package delivered,2019-06-05 07:41:01.000Z, , , ,"['660033']", ,2.8,2536.98 +799.0,pick item,2019-06-05 07:43:33.000Z, ,"['880379']", , , ,1.28,149.99 +800.0,create package,2019-06-05 07:43:33.000Z, ,"['880045','880178','880340','880342','880284']", ,"['660039']", ,2.227,1027.97 +801.0,pick item,2019-06-05 07:56:56.000Z, ,"['880238']", , , ,0.166,799.0 +802.0,package delivered,2019-06-05 07:57:32.000Z, , , ,"['660028']", ,4.883,699.93 +803.0,confirm order,2019-06-05 08:19:21.000Z, , ,"['990095']", , ,5.483,4262.97 +804.0,pick item,2019-06-05 08:29:54.000Z, ,"['880366']", , , ,0.188,1149.0 +805.0,confirm order,2019-06-05 08:35:51.000Z, , ,"['990097']", , ,6.92,5980.97 +806.0,pick item,2019-06-05 08:37:58.000Z, ,"['880273']", , , ,1.25,2200.0 +807.0,place order,2019-06-05 08:38:26.000Z, ,"['880390','880394','880396','880393','880395','880392','880391']","['990098']", , ,4.813,6753.99 +808.0,pick item,2019-06-05 08:39:25.000Z, ,"['880386']", , , ,1.48,199.99 +809.0,pick item,2019-06-05 08:43:20.000Z, ,"['880382']", , , ,0.21,529.0 +810.0,create package,2019-06-05 08:43:20.000Z, ,"['880279','880311','880312','880313']", ,"['660040']", ,3.3160000000000003,3808.98 +811.0,pay order,2019-06-05 08:48:11.000Z, , ,"['990079']", , ,2.903,4084.98 +812.0,item out of stock,2019-06-05 08:52:20.000Z, ,"['880332']", , , ,0.483,79.99 +813.0,pick item,2019-06-05 08:53:34.000Z, ,"['880388']", , , ,1.37,2500.0 +814.0,pick item,2019-06-05 08:58:42.000Z, ,"['880155']", , , ,0.188,1149.0 +815.0,item out of stock,2019-06-05 08:58:55.000Z, ,"['880389']", , , ,1.48,199.99 +816.0,pick item,2019-06-05 09:05:38.000Z, ,"['880108']", , , ,0.28,449.0 +817.0,send package,2019-06-05 09:11:34.000Z, , , ,"['660038']", ,4.0,3098.97 +818.0,pick item,2019-06-05 09:11:42.000Z, ,"['880358']", , , ,0.78,99.99 +819.0,create package,2019-06-05 09:11:42.000Z, ,"['880350','880348','880245','880349','880345','880351','880157','880353','880346']", ,"['660041']", ,4.734,3531.95 +820.0,pick item,2019-06-05 09:21:17.000Z, ,"['880361']", , , ,0.44,476.0 +821.0,pick item,2019-06-05 09:22:54.000Z, ,"['880320']", , , ,0.2,39.99 +822.0,pay order,2019-06-05 09:38:24.000Z, , ,"['990050']", , ,2.04,2092.98 +823.0,pick item,2019-06-05 09:40:23.000Z, ,"['880377']", , , ,0.21,529.0 +824.0,pick item,2019-06-05 09:45:16.000Z, ,"['880314']", , , ,0.21,529.0 +825.0,confirm order,2019-06-05 09:54:06.000Z, , ,"['990096']", , ,1.09,623.99 +826.0,reorder item,2019-06-05 10:10:48.000Z, ,"['880357']", , , ,0.44,476.0 +827.0,package delivered,2019-06-05 10:18:00.000Z, , , ,"['660035']", ,3.0980000000000003,1329.97 +828.0,reorder item,2019-06-05 10:18:20.000Z, ,"['880352']", , , ,0.2,39.99 +829.0,reorder item,2019-06-05 10:24:04.000Z, ,"['880275']", , , ,1.25,2200.0 +830.0,pick item,2019-06-05 10:30:56.000Z, ,"['880368']", , , ,0.483,1099.0 +831.0,pick item,2019-06-05 10:35:22.000Z, ,"['880375']", , , ,0.166,799.0 +832.0,pick item,2019-06-05 10:35:27.000Z, ,"['880372']", , , ,0.2,39.99 +833.0,place order,2019-06-05 10:36:39.000Z, ,"['880399','880397','880400','880398']","['990099']", , ,2.345,2531.99 +834.0,pick item,2019-06-05 10:44:12.000Z, ,"['880391']", , , ,0.28,449.0 +835.0,pay order,2019-06-05 10:51:54.000Z, , ,"['990009']", , ,3.013,1370.98 +836.0,item out of stock,2019-06-05 11:12:50.000Z, ,"['880360']", , , ,0.44,476.0 +837.0,package delivered,2019-06-05 11:23:11.000Z, , , ,"['660038']", ,4.0,3098.97 +838.0,pay order,2019-06-05 11:26:51.000Z, , ,"['990083']", , ,2.84,753.98 +839.0,pay order,2019-06-05 11:48:36.000Z, , ,"['990084']", , ,4.609,4029.95 +840.0,pay order,2019-06-05 11:50:33.000Z, , ,"['990053']", , ,0.649,883.99 +841.0,confirm order,2019-06-05 11:52:22.000Z, , ,"['990094']", , ,1.546,1013.97 +842.0,failed delivery,2019-06-05 11:53:34.000Z, , , ,"['660031']", ,2.798,3508.98 +843.0,pick item,2019-06-05 11:57:20.000Z, ,"['880347']", , , ,0.78,99.99 +844.0,create package,2019-06-05 11:57:20.000Z, ,"['880147','880124','880274','880127']", ,"['660042']", ,2.526,2192.99 +845.0,package delivered,2019-06-05 12:32:48.000Z, , , ,"['660030']", ,2.638,398.97 +846.0,place order,2019-06-05 12:33:05.000Z, ,"['880401','880404','880403','880402']","['990100']", , ,1.32,3547.0 +847.0,reorder item,2019-06-05 12:40:49.000Z, ,"['880278']", , , ,0.188,1149.0 +848.0,pick item,2019-06-05 12:41:29.000Z, ,"['880394']", , , ,0.483,495.0 +849.0,pick item,2019-06-05 12:49:08.000Z, ,"['880387']", , , ,0.44,476.0 +850.0,send package,2019-06-05 13:08:57.000Z, , , ,"['660039']", ,2.227,1027.97 +851.0,pay order,2019-06-05 13:09:08.000Z, , ,"['990096']", , ,1.09,623.99 +852.0,pick item,2019-06-05 13:18:48.000Z, ,"['880328']", , , ,0.188,1149.0 +853.0,pick item,2019-06-05 13:22:57.000Z, ,"['880343']", , , ,1.28,149.99 +854.0,create package,2019-06-05 13:22:57.000Z, ,"['880260','880331','880335','880330','880328','880256','880329','880333']", ,"['660043']", ,3.792,4025.96 +855.0,pick item,2019-06-05 13:29:38.000Z, ,"['880231']", , , ,0.21,529.0 +856.0,pick item,2019-06-05 13:35:34.000Z, ,"['880264']", , , ,0.483,1099.0 +857.0,pick item,2019-06-05 13:35:45.000Z, ,"['880326']", , , ,0.28,449.0 +858.0,item out of stock,2019-06-05 13:36:45.000Z, ,"['880395']", , , ,0.78,99.99 +859.0,pick item,2019-06-05 13:37:32.000Z, ,"['880352']", , , ,0.2,39.99 +860.0,pick item,2019-06-05 13:43:40.000Z, ,"['880393']", , , ,0.21,529.0 +861.0,pick item,2019-06-05 13:49:23.000Z, ,"['880404']", , , ,0.483,495.0 +862.0,package delivered,2019-06-05 13:51:44.000Z, , , ,"['660036']", ,0.97,748.97 +863.0,confirm order,2019-06-05 13:56:57.000Z, , ,"['990099']", , ,2.345,2531.99 +864.0,package delivered,2019-06-05 13:58:13.000Z, , , ,"['660031']", ,2.798,3508.98 +865.0,confirm order,2019-06-05 14:10:22.000Z, , ,"['990098']", , ,4.813,6753.99 +866.0,pick item,2019-06-05 14:13:41.000Z, ,"['880383']", , , ,0.88,89.99 +867.0,confirm order,2019-06-05 14:25:06.000Z, , ,"['990078']", , ,0.942,1771.99 +868.0,failed delivery,2019-06-05 14:25:21.000Z, , , ,"['660039']", ,2.227,1027.97 +869.0,place order,2019-06-05 14:25:58.000Z, ,"['880409','880405','880407','880406','880408']","['990101']", , ,1.815,2517.98 +870.0,reorder item,2019-06-05 14:27:19.000Z, ,"['880327']", , , ,0.28,449.0 +871.0,pick item,2019-06-05 14:31:53.000Z, ,"['880373']", , , ,0.98,129.99 +872.0,create package,2019-06-05 14:31:53.000Z, ,"['880243','880358','880055','880241']", ,"['660044']", ,2.42,249.96 +873.0,send package,2019-06-05 14:32:10.000Z, , , ,"['660042']", ,2.526,2192.99 +874.0,pick item,2019-06-05 14:36:30.000Z, ,"['880400']", , , ,0.172,699.0 +875.0,send package,2019-06-05 14:40:17.000Z, , , ,"['660040']", ,3.3160000000000003,3808.98 +876.0,package delivered,2019-06-05 14:43:25.000Z, , , ,"['660042']", ,2.526,2192.99 +877.0,pay order,2019-06-05 14:50:18.000Z, , ,"['990046']", , ,1.743,1223.98 +878.0,pick item,2019-06-05 14:52:31.000Z, ,"['880384']", , , ,1.37,2500.0 +879.0,pay order,2019-06-05 14:55:47.000Z, , ,"['990074']", , ,0.2,44.99 +880.0,pay order,2019-06-05 15:28:24.000Z, , ,"['990069']", , ,2.27,1973.97 +881.0,place order,2019-06-05 16:11:43.000Z, ,"['880414','880412','880413','880415','880416','880410','880411']","['990102']", , ,4.535,2947.97 +882.0,package delivered,2019-06-05 16:15:29.000Z, , , ,"['660037']", ,5.721,5910.97 +883.0,item out of stock,2019-06-05 16:53:49.000Z, ,"['880380']", , , ,1.25,2200.0 +884.0,send package,2019-06-05 17:31:37.000Z, , , ,"['660041']", ,4.734,3531.95 +885.0,send package,2019-06-05 17:41:18.000Z, , , ,"['660043']", ,3.792,4025.96 +886.0,place order,2019-06-05 18:14:44.000Z, ,"['880417','880418']","['990103']", , ,1.86,234.98 +887.0,reorder item,2019-06-05 19:23:55.000Z, ,"['880371']", , , ,0.166,799.0 +888.0,package delivered,2019-06-05 19:36:36.000Z, , , ,"['660039']", ,2.227,1027.97 +889.0,pick item,2019-06-05 20:40:48.000Z, ,"['880378']", , , ,1.28,149.99 +890.0,place order,2019-06-05 21:09:03.000Z, ,"['880423','880421','880422','880420','880419']","['990104']", , ,3.218,3457.99 +891.0,confirm order,2019-06-06 06:22:07.000Z, , ,"['990102']", , ,4.535,2947.97 +892.0,pick item,2019-06-06 06:37:01.000Z, ,"['880371']", , , ,0.166,799.0 +893.0,create package,2019-06-06 06:37:01.000Z, ,"['880189','880310','880238','880231']", ,"['660045']", ,1.016,1843.99 +894.0,pick item,2019-06-06 06:54:03.000Z, ,"['880411']", , , ,0.44,476.0 +895.0,item out of stock,2019-06-06 06:56:10.000Z, ,"['880323']", , , ,1.28,149.99 +896.0,place order,2019-06-06 07:02:26.000Z, ,"['880427','880425','880424','880426']","['990105']", , ,2.438,3962.0 +897.0,reorder item,2019-06-06 07:03:02.000Z, ,"['880389']", , , ,1.48,199.99 +898.0,item out of stock,2019-06-06 07:09:06.000Z, ,"['880412']", , , ,1.48,199.99 +899.0,reorder item,2019-06-06 07:11:29.000Z, ,"['880360']", , , ,0.44,476.0 +900.0,item out of stock,2019-06-06 07:19:14.000Z, ,"['880305']", , , ,0.21,529.0 +901.0,reorder item,2019-06-06 07:29:00.000Z, ,"['880297']", , , ,0.78,99.99 +902.0,pick item,2019-06-06 07:33:21.000Z, ,"['880334']", , , ,0.172,699.0 +903.0,pick item,2019-06-06 07:39:14.000Z, ,"['880230']", , , ,0.483,79.99 +904.0,pay order,2019-06-06 07:46:36.000Z, , ,"['990102']", , ,4.535,2947.97 +905.0,send package,2019-06-06 08:19:20.000Z, , , ,"['660045']", ,1.016,1843.99 +906.0,pick item,2019-06-06 08:21:38.000Z, ,"['880407']", , , ,0.483,495.0 +907.0,create package,2019-06-06 08:21:38.000Z, ,"['880369','880177','880368','880371','880318','880370','880320','880086','880322']", ,"['660046']", ,4.3180000000000005,4145.95 +908.0,pay order,2019-06-06 08:22:29.000Z, , ,"['990097']", , ,6.92,5980.97 +909.0,place order,2019-06-06 08:24:40.000Z, ,"['880429','880428','880431','880432','880430']","['990106']", , ,3.479,7132.0 +910.0,pay order,2019-06-06 08:24:40.000Z, , ,"['990072']", , ,2.648,1483.98 +911.0,pick item,2019-06-06 08:29:27.000Z, ,"['880428']", , , ,0.166,799.0 +912.0,pick item,2019-06-06 08:32:04.000Z, ,"['880399']", , , ,0.21,529.0 +913.0,pay order,2019-06-06 08:43:00.000Z, , ,"['990064']", , ,3.6010000000000004,503.95 +914.0,package delivered,2019-06-06 08:51:45.000Z, , , ,"['660043']", ,3.792,4025.96 +915.0,send package,2019-06-06 08:56:40.000Z, , , ,"['660046']", ,4.3180000000000005,4145.95 +916.0,pick item,2019-06-06 09:18:53.000Z, ,"['880390']", , , ,1.37,2500.0 +917.0,reorder item,2019-06-06 09:36:56.000Z, ,"['880380']", , , ,1.25,2200.0 +918.0,pick item,2019-06-06 09:41:11.000Z, ,"['880409']", , , ,0.483,79.99 +919.0,item out of stock,2019-06-06 09:52:55.000Z, ,"['880338']", , , ,0.28,89.99 +920.0,reorder item,2019-06-06 10:07:54.000Z, ,"['880285']", , , ,0.188,1149.0 +921.0,place order,2019-06-06 10:09:07.000Z, ,"['880434','880436','880435','880433','880437']","['990107']", , ,2.141,2563.99 +922.0,confirm order,2019-06-06 10:14:56.000Z, , ,"['990106']", , ,3.479,7132.0 +923.0,pick item,2019-06-06 10:24:24.000Z, ,"['880397']", , , ,0.483,1099.0 +924.0,pick item,2019-06-06 10:32:54.000Z, ,"['880354']", , , ,0.495,129.0 +925.0,pay order,2019-06-06 10:39:59.000Z, , ,"['990078']", , ,0.942,1771.99 +926.0,send package,2019-06-06 10:40:22.000Z, , , ,"['660044']", ,2.42,249.96 +927.0,pick item,2019-06-06 10:52:19.000Z, ,"['880419']", , , ,0.483,495.0 +928.0,item out of stock,2019-06-06 11:00:53.000Z, ,"['880423']", , , ,0.495,129.0 +929.0,pay order,2019-06-06 11:29:09.000Z, , ,"['990061']", , ,1.673,753.97 +930.0,place order,2019-06-06 11:38:01.000Z, ,"['880442','880441','880439','880440','880443','880438']","['990108']", , ,3.756,4108.97 +931.0,reorder item,2019-06-06 11:45:09.000Z, ,"['880423']", , , ,0.495,129.0 +932.0,pick item,2019-06-06 11:51:51.000Z, ,"['880262']", , , ,0.495,129.0 +933.0,pick item,2019-06-06 12:08:08.000Z, ,"['880355']", , , ,1.48,199.99 +934.0,create package,2019-06-06 12:08:08.000Z, ,"['880356','880355','880215','880354']", ,"['660047']", ,2.668,1956.99 +935.0,reorder item,2019-06-06 12:16:57.000Z, ,"['880305']", , , ,0.21,529.0 +936.0,failed delivery,2019-06-06 12:24:19.000Z, , , ,"['660045']", ,1.016,1843.99 +937.0,pick item,2019-06-06 12:24:24.000Z, ,"['880359']", , , ,1.48,199.99 +938.0,pick item,2019-06-06 12:27:35.000Z, ,"['880416']", , , ,1.48,199.99 +939.0,pick item,2019-06-06 12:29:03.000Z, ,"['880434']", , , ,0.172,699.0 +940.0,pick item,2019-06-06 12:37:28.000Z, ,"['880344']", , , ,0.166,799.0 +941.0,create package,2019-06-06 12:37:28.000Z, ,"['880388','880386','880361','880384','880416','880364','880387','880411']", ,"['660048']", ,7.3,6917.97 +942.0,confirm order,2019-06-06 12:39:13.000Z, , ,"['990100']", , ,1.32,3547.0 +943.0,pay order,2019-06-06 12:44:36.000Z, , ,"['990060']", , ,1.818,1702.99 +944.0,pick item,2019-06-06 12:48:46.000Z, ,"['880392']", , , ,1.25,2200.0 +945.0,send package,2019-06-06 12:51:30.000Z, , , ,"['660047']", ,2.668,1956.99 +946.0,pick item,2019-06-06 13:09:40.000Z, ,"['880436']", , , ,0.44,476.0 +947.0,pick item,2019-06-06 13:20:19.000Z, ,"['880406']", , , ,0.2,39.99 +948.0,place order,2019-06-06 13:35:50.000Z, ,"['880444']","['990109']", , ,0.38,34.99 +949.0,pick item,2019-06-06 13:37:55.000Z, ,"['880396']", , , ,0.44,476.0 +950.0,confirm order,2019-06-06 13:38:25.000Z, , ,"['990107']", , ,2.141,2563.99 +951.0,package delivered,2019-06-06 13:45:51.000Z, , , ,"['660046']", ,4.3180000000000005,4145.95 +952.0,pick item,2019-06-06 13:58:53.000Z, ,"['880376']", , , ,0.98,129.99 +953.0,item out of stock,2019-06-06 14:00:28.000Z, ,"['880442']", , , ,0.28,89.99 +954.0,pick item,2019-06-06 14:07:43.000Z, ,"['880292']", , , ,0.21,529.0 +955.0,pick item,2019-06-06 14:11:27.000Z, ,"['880337']", , , ,0.88,89.99 +956.0,pick item,2019-06-06 14:20:03.000Z, ,"['880433']", , , ,0.166,799.0 +957.0,create package,2019-06-06 14:20:03.000Z, ,"['880286','880394','880263','880392','880379','880378','880393','880376','880377','880396','880001','880390','880262','880391','880264']", ,"['660049']", ,11.283,12164.96 +958.0,package delivered,2019-06-06 14:31:50.000Z, , , ,"['660047']", ,2.668,1956.99 +959.0,pick item,2019-06-06 14:34:19.000Z, ,"['880277']", , , ,1.48,199.99 +960.0,confirm order,2019-06-06 14:53:04.000Z, , ,"['990108']", , ,3.756,4108.97 +961.0,pick item,2019-06-06 14:53:08.000Z, ,"['880363']", , , ,1.48,199.99 +962.0,pick item,2019-06-06 14:55:21.000Z, ,"['880234']", , , ,0.98,129.99 +963.0,pay order,2019-06-06 15:01:11.000Z, , ,"['990012']", , ,3.237,2761.99 +964.0,pick item,2019-06-06 15:05:40.000Z, ,"['880437']", , , ,0.88,89.99 +965.0,package delivered,2019-06-06 15:28:01.000Z, , , ,"['660040']", ,3.3160000000000003,3808.98 +966.0,place order,2019-06-06 15:31:27.000Z, ,"['880445','880446']","['990110']", , ,0.946,903.99 +967.0,pick item,2019-06-06 15:40:54.000Z, ,"['880381']", , , ,0.483,1099.0 +968.0,pick item,2019-06-06 17:09:09.000Z, ,"['880289']", , , ,0.28,89.99 +969.0,place order,2019-06-06 17:22:42.000Z, ,"['880452','880451','880454','880447','880453','880455','880456','880449','880450','880448']","['990111']", , ,4.907,6155.96 +970.0,pick item,2019-06-06 17:27:12.000Z, ,"['880438']", , , ,1.25,2200.0 +971.0,package delivered,2019-06-06 18:46:27.000Z, , , ,"['660041']", ,4.734,3531.95 +972.0,pick item,2019-06-06 19:37:27.000Z, ,"['880398']", , , ,1.48,199.99 +973.0,confirm order,2019-06-06 20:05:48.000Z, , ,"['990110']", , ,0.946,903.99 +974.0,place order,2019-06-06 20:24:59.000Z, ,"['880457']","['990112']", , ,0.2,44.99 +975.0,place order,2019-06-07 06:41:32.000Z, ,"['880463','880462','880458','880461','880464','880459','880460']","['990113']", , ,3.372,2097.96 +976.0,reorder item,2019-06-07 07:16:00.000Z, ,"['880395']", , , ,0.78,99.99 +977.0,pick item,2019-06-07 07:19:56.000Z, ,"['880418']", , , ,0.38,29.99 +978.0,send package,2019-06-07 07:23:31.000Z, , , ,"['660048']", ,7.3,6917.97 +979.0,item out of stock,2019-06-07 07:28:45.000Z, ,"['880446']", , , ,0.78,99.99 +980.0,pay order,2019-06-07 07:37:05.000Z, , ,"['990086']", , ,2.398,2102.97 +981.0,item out of stock,2019-06-07 07:43:36.000Z, ,"['880427']", , , ,1.25,2200.0 +982.0,reorder item,2019-06-07 07:49:37.000Z, ,"['880291']", , , ,1.48,199.99 +983.0,confirm order,2019-06-07 07:51:07.000Z, , ,"['990111']", , ,4.907,6155.96 +984.0,pick item,2019-06-07 07:53:43.000Z, ,"['880415']", , , ,0.495,129.0 +985.0,pick item,2019-06-07 07:54:11.000Z, ,"['880421']", , , ,0.78,99.99 +986.0,confirm order,2019-06-07 07:56:11.000Z, , ,"['990113']", , ,3.372,2097.96 +987.0,confirm order,2019-06-07 07:59:13.000Z, , ,"['990101']", , ,1.815,2517.98 +988.0,send package,2019-06-07 08:00:10.000Z, , , ,"['660049']", ,11.283,12164.96 +989.0,confirm order,2019-06-07 08:00:10.000Z, , ,"['990104']", , ,3.218,3457.99 +990.0,confirm order,2019-06-07 08:06:56.000Z, , ,"['990090']", , ,3.14,1256.98 +991.0,item out of stock,2019-06-07 08:07:51.000Z, ,"['880443']", , , ,0.483,495.0 +992.0,pay order,2019-06-07 08:09:00.000Z, , ,"['990043']", , ,3.235,443.97 +993.0,pick item,2019-06-07 08:27:43.000Z, ,"['880405']", , , ,0.483,1099.0 +994.0,pick item,2019-06-07 08:43:06.000Z, ,"['880458']", , , ,0.483,495.0 +995.0,package delivered,2019-06-07 08:46:15.000Z, , , ,"['660044']", ,2.42,249.96 +996.0,place order,2019-06-07 08:52:06.000Z, ,"['880467','880465','880466']","['990114']", , ,2.143,264.97 +997.0,pick item,2019-06-07 08:52:55.000Z, ,"['880464']", , , ,0.2,39.99 +998.0,pick item,2019-06-07 08:54:38.000Z, ,"['880425']", , , ,0.21,529.0 +999.0,create package,2019-06-07 08:54:38.000Z, ,"['880428','880266','880271']", ,"['660050']", ,0.618,1587.99 +1000.0,pick item,2019-06-07 09:07:36.000Z, ,"['880450']", , , ,0.483,495.0 +1001.0,pay order,2019-06-07 09:16:22.000Z, , ,"['990088']", , ,0.483,500.0 +1002.0,pay order,2019-06-07 09:25:11.000Z, , ,"['990039']", , ,1.28,154.99 +1003.0,pick item,2019-06-07 09:27:18.000Z, ,"['880461']", , , ,0.166,799.0 +1004.0,pick item,2019-06-07 09:36:06.000Z, ,"['880403']", , , ,0.166,799.0 +1005.0,create package,2019-06-07 09:36:06.000Z, ,"['880365','880425','880383','880382','880366','880367']", ,"['660051']", ,2.556,3535.98 +1006.0,pick item,2019-06-07 09:38:11.000Z, ,"['880463']", , , ,0.78,99.99 +1007.0,pick item,2019-06-07 09:45:32.000Z, ,"['880374']", , , ,0.2,39.99 +1008.0,pick item,2019-06-07 09:52:09.000Z, ,"['880426']", , , ,0.495,129.0 +1009.0,item out of stock,2019-06-07 09:54:47.000Z, ,"['880402']", , , ,0.188,1149.0 +1010.0,pay order,2019-06-07 10:28:31.000Z, , ,"['990091']", , ,3.08,860.97 +1011.0,confirm order,2019-06-07 10:28:45.000Z, , ,"['990109']", , ,0.38,34.99 +1012.0,pay order,2019-06-07 10:33:45.000Z, , ,"['990094']", , ,1.546,1013.97 +1013.0,failed delivery,2019-06-07 10:36:38.000Z, , , ,"['660048']", ,7.3,6917.97 +1014.0,item out of stock,2019-06-07 11:00:44.000Z, ,"['880441']", , , ,0.483,1099.0 +1015.0,pick item,2019-06-07 11:03:51.000Z, ,"['880414']", , , ,0.188,1149.0 +1016.0,place order,2019-06-07 11:03:59.000Z, ,"['880470','880469','880468']","['990115']", , ,1.958,758.99 +1017.0,pick item,2019-06-07 11:11:44.000Z, ,"['880445']", , , ,0.166,799.0 +1018.0,pick item,2019-06-07 11:43:45.000Z, ,"['880469']", , , ,0.483,495.0 +1019.0,create package,2019-06-07 11:43:45.000Z, ,"['880372','880375','880303','880373','880374','880108']", ,"['660052']", ,2.106,1906.97 +1020.0,pick item,2019-06-07 11:46:29.000Z, ,"['880455']", , , ,0.28,449.0 +1021.0,pick item,2019-06-07 11:51:48.000Z, ,"['880169']", , , ,0.38,29.99 +1022.0,package delivered,2019-06-07 12:04:28.000Z, , , ,"['660049']", ,11.283,12164.96 +1023.0,place order,2019-06-07 12:27:46.000Z, ,"['880475','880472','880473','880474','880471']","['990116']", , ,3.678,969.97 +1024.0,confirm order,2019-06-07 12:30:30.000Z, , ,"['990116']", , ,3.678,969.97 +1025.0,pick item,2019-06-07 12:55:08.000Z, ,"['880417']", , , ,1.48,199.99 +1026.0,pick item,2019-06-07 13:03:38.000Z, ,"['880462']", , , ,0.483,79.99 +1027.0,reorder item,2019-06-07 13:15:16.000Z, ,"['880338']", , , ,0.28,89.99 +1028.0,pick item,2019-06-07 13:21:03.000Z, ,"['880432']", , , ,0.21,529.0 +1029.0,reorder item,2019-06-07 13:39:11.000Z, ,"['880402']", , , ,0.188,1149.0 +1030.0,pay order,2019-06-07 13:39:40.000Z, , ,"['990109']", , ,0.38,34.99 +1031.0,reorder item,2019-06-07 14:04:49.000Z, ,"['880332']", , , ,0.483,79.99 +1032.0,package delivered,2019-06-07 14:10:36.000Z, , , ,"['660045']", ,1.016,1843.99 +1033.0,confirm order,2019-06-07 14:12:52.000Z, , ,"['990114']", , ,2.143,264.97 +1034.0,place order,2019-06-07 14:15:19.000Z, ,"['880477','880476']","['990117']", , ,1.76,294.98 +1035.0,reorder item,2019-06-07 14:19:08.000Z, ,"['880412']", , , ,1.48,199.99 +1036.0,pick item,2019-06-07 14:35:21.000Z, ,"['880449']", , , ,0.2,39.99 +1037.0,create package,2019-06-07 14:35:21.000Z, ,"['880469','880273']", ,"['660053']", ,1.733,2695.0 +1038.0,reorder item,2019-06-07 14:41:01.000Z, ,"['880443']", , , ,0.483,495.0 +1039.0,pick item,2019-06-07 14:44:39.000Z, ,"['880413']", , , ,0.28,89.99 +1040.0,item out of stock,2019-06-07 14:48:58.000Z, ,"['880444']", , , ,0.38,29.99 +1041.0,pick item,2019-06-07 14:49:07.000Z, ,"['880385']", , , ,0.78,99.99 +1042.0,create package,2019-06-07 14:49:07.000Z, ,"['880155','880434','880433','880419','880445','880436','880421','880437']", ,"['660054']", ,3.275,4606.98 +1043.0,pick item,2019-06-07 14:56:31.000Z, ,"['880327']", , , ,0.28,449.0 +1044.0,send package,2019-06-07 14:59:06.000Z, , , ,"['660050']", ,0.618,1587.99 +1045.0,pick item,2019-06-07 15:31:54.000Z, ,"['880291']", , , ,1.48,199.99 +1046.0,pick item,2019-06-07 15:41:50.000Z, ,"['880459']", , , ,0.28,449.0 +1047.0,confirm order,2019-06-07 15:41:56.000Z, , ,"['990115']", , ,1.958,758.99 +1048.0,reorder item,2019-06-07 15:43:23.000Z, ,"['880427']", , , ,1.25,2200.0 +1049.0,place order,2019-06-07 15:50:25.000Z, ,"['880482','880483','880478','880480','880481','880479']","['990118']", , ,3.951,7072.98 +1050.0,pick item,2019-06-07 16:22:32.000Z, ,"['880470']", , , ,0.98,129.99 +1051.0,pick item,2019-06-07 16:57:42.000Z, ,"['880454']", , , ,0.28,449.0 +1052.0,pick item,2019-06-07 17:14:46.000Z, ,"['880480']", , , ,0.28,89.99 +1053.0,send package,2019-06-07 17:16:45.000Z, , , ,"['660054']", ,3.275,4606.98 +1054.0,confirm order,2019-06-07 17:20:33.000Z, , ,"['990105']", , ,2.438,3962.0 +1055.0,place order,2019-06-07 18:10:50.000Z, ,"['880486','880485','880484']","['990119']", , ,1.84,693.98 +1056.0,confirm order,2019-06-07 18:31:36.000Z, , ,"['990112']", , ,0.2,44.99 +1057.0,confirm order,2019-06-07 19:25:41.000Z, , ,"['990118']", , ,3.951,7072.98 +1058.0,pick item,2019-06-07 19:54:26.000Z, ,"['880466']", , , ,0.483,79.99 +1059.0,pick item,2019-06-07 19:54:37.000Z, ,"['880485']", , , ,0.28,89.99 +1060.0,create package,2019-06-07 19:54:37.000Z, ,"['880314']", ,"['660055']", ,0.21,529.0 +1061.0,place order,2019-06-07 21:01:15.000Z, ,"['880487']","['990120']", , ,1.48,204.99 +1062.0,place order,2019-06-08 19:03:33.000Z, ,"['880489','880490','880491','880488']","['990121']", , ,3.123,1423.97 +1063.0,create package,2019-06-08 23:00:00.000Z, ,"['880343','880449','880347','880450','880454','880455','880352','880344']", ,"['660056']", ,3.669,2521.96 +1064.0,payment reminder,2019-06-09 16:36:37.000Z, , ,"['990004']", , ,2.46,334.98 +1065.0,place order,2019-06-09 18:54:54.000Z, ,"['880493','880494','880492']","['990122']", , ,0.768,1223.98 +1066.0,pick item,2019-06-10 06:37:05.000Z, ,"['880410']", , , ,0.172,699.0 +1067.0,item out of stock,2019-06-10 06:46:25.000Z, ,"['880491']", , , ,0.88,89.99 +1068.0,reorder item,2019-06-10 06:50:05.000Z, ,"['880441']", , , ,0.483,1099.0 +1069.0,pick item,2019-06-10 07:10:11.000Z, ,"['880440']", , , ,0.28,89.99 +1070.0,confirm order,2019-06-10 07:27:49.000Z, , ,"['990117']", , ,1.76,294.98 +1071.0,pick item,2019-06-10 07:33:08.000Z, ,"['880420']", , , ,1.25,2200.0 +1072.0,pick item,2019-06-10 07:33:26.000Z, ,"['880285']", , , ,0.188,1149.0 +1073.0,pick item,2019-06-10 07:34:24.000Z, ,"['880474']", , , ,0.483,79.99 +1074.0,confirm order,2019-06-10 07:41:59.000Z, , ,"['990120']", , ,1.48,204.99 +1075.0,place order,2019-06-10 07:44:46.000Z, ,"['880496','880495','880497','880498']","['990123']", , ,3.01,2654.97 +1076.0,package delivered,2019-06-10 07:47:58.000Z, , , ,"['660048']", ,7.3,6917.97 +1077.0,send package,2019-06-10 07:52:30.000Z, , , ,"['660056']", ,3.669,2521.96 +1078.0,pick item,2019-06-10 08:01:59.000Z, ,"['880198']", , , ,1.48,199.99 +1079.0,pick item,2019-06-10 08:08:32.000Z, ,"['880487']", , , ,1.48,199.99 +1080.0,send package,2019-06-10 08:12:01.000Z, , , ,"['660051']", ,2.556,3535.98 +1081.0,pick item,2019-06-10 08:23:43.000Z, ,"['880423']", , , ,0.495,129.0 +1082.0,pick item,2019-06-10 08:26:27.000Z, ,"['880422']", , , ,0.21,529.0 +1083.0,create package,2019-06-10 08:26:27.000Z, ,"['880409','880406','880327','880334','880405','880326','880407','880404','880403','880466']", ,"['660057']", ,3.513,4684.97 +1084.0,pick item,2019-06-10 08:28:51.000Z, ,"['880452']", , , ,0.28,89.99 +1085.0,payment reminder,2019-06-10 08:34:23.000Z, , ,"['990005']", , ,0.923,1580.0 +1086.0,package delivered,2019-06-10 08:36:42.000Z, , , ,"['660051']", ,2.556,3535.98 +1087.0,send package,2019-06-10 08:48:29.000Z, , , ,"['660053']", ,1.733,2695.0 +1088.0,pick item,2019-06-10 09:02:58.000Z, ,"['880492']", , , ,0.38,29.99 +1089.0,pay order,2019-06-10 09:21:13.000Z, , ,"['990116']", , ,3.678,969.97 +1090.0,pick item,2019-06-10 09:25:54.000Z, ,"['880430']", , , ,0.483,1099.0 +1091.0,confirm order,2019-06-10 09:45:29.000Z, , ,"['990119']", , ,1.84,693.98 +1092.0,place order,2019-06-10 09:49:20.000Z, ,"['880499','880501','880502','880500']","['990124']", , ,3.57,3210.98 +1093.0,confirm order,2019-06-10 09:54:38.000Z, , ,"['990122']", , ,0.768,1223.98 +1094.0,pick item,2019-06-10 09:59:22.000Z, ,"['880176']", , , ,1.48,199.99 +1095.0,send package,2019-06-10 10:23:57.000Z, , , ,"['660055']", ,0.21,529.0 +1096.0,pick item,2019-06-10 10:29:56.000Z, ,"['880441']", , , ,0.483,1099.0 +1097.0,pick item,2019-06-10 10:32:31.000Z, ,"['880465']", , , ,1.28,149.99 +1098.0,confirm order,2019-06-10 10:36:48.000Z, , ,"['990121']", , ,3.123,1423.97 +1099.0,pick item,2019-06-10 11:03:07.000Z, ,"['880489']", , , ,0.78,99.99 +1100.0,pick item,2019-06-10 11:14:04.000Z, ,"['880453']", , , ,0.166,799.0 +1101.0,item out of stock,2019-06-10 11:20:07.000Z, ,"['880479']", , , ,0.188,1149.0 +1102.0,reorder item,2019-06-10 11:25:56.000Z, ,"['880479']", , , ,0.188,1149.0 +1103.0,pick item,2019-06-10 11:27:59.000Z, ,"['880473']", , , ,1.28,149.99 +1104.0,pick item,2019-06-10 11:38:05.000Z, ,"['880494']", , , ,0.188,1149.0 +1105.0,create package,2019-06-10 11:38:05.000Z, ,"['880487','880399','880359','880398','880400','880397']", ,"['660058']", ,5.305,2926.97 +1106.0,place order,2019-06-10 11:58:27.000Z, ,"['880505','880504','880503']","['990125']", , ,2.063,3113.99 +1107.0,confirm order,2019-06-10 12:05:01.000Z, , ,"['990123']", , ,3.01,2654.97 +1108.0,payment reminder,2019-06-10 12:33:48.000Z, , ,"['990007']", , ,1.855,293.98 +1109.0,pick item,2019-06-10 12:34:27.000Z, ,"['880478']", , , ,0.38,29.99 +1110.0,pick item,2019-06-10 12:46:39.000Z, ,"['880435']", , , ,0.483,495.0 +1111.0,pick item,2019-06-10 12:57:10.000Z, ,"['880475']", , , ,0.495,129.0 +1112.0,pick item,2019-06-10 13:05:48.000Z, ,"['880457']", , , ,0.2,39.99 +1113.0,reorder item,2019-06-10 13:12:30.000Z, ,"['880323']", , , ,1.28,149.99 +1114.0,pay order,2019-06-10 13:26:45.000Z, , ,"['990107']", , ,2.141,2563.99 +1115.0,pick item,2019-06-10 13:30:01.000Z, ,"['880472']", , , ,0.98,129.99 +1116.0,pick item,2019-06-10 13:31:20.000Z, ,"['880439']", , , ,0.98,129.99 +1117.0,create package,2019-06-10 13:31:20.000Z, ,"['880230','880337']", ,"['660059']", ,1.3630000000000002,169.98 +1118.0,pick item,2019-06-10 13:32:07.000Z, ,"['880448']", , , ,1.37,2500.0 +1119.0,send package,2019-06-10 13:45:52.000Z, , , ,"['660058']", ,5.305,2926.97 +1120.0,pick item,2019-06-10 14:01:39.000Z, ,"['880484']", , , ,1.28,149.99 +1121.0,create package,2019-06-10 14:01:39.000Z, ,"['880463','880292','880291','880438','880478','880441','880458','880480','880439','880462','880461','880198','880464','880459','880440']", ,"['660060']", ,9.215,6530.91 +1122.0,place order,2019-06-10 14:16:42.000Z, ,"['880506','880507']","['990126']", , ,1.3630000000000002,589.99 +1123.0,pick item,2019-06-10 14:36:49.000Z, ,"['880431']", , , ,1.25,2200.0 +1124.0,pick item,2019-06-10 14:43:23.000Z, ,"['880460']", , , ,0.98,129.99 +1125.0,send package,2019-06-10 14:57:21.000Z, , , ,"['660052']", ,2.106,1906.97 +1126.0,send package,2019-06-10 15:11:29.000Z, , , ,"['660057']", ,3.513,4684.97 +1127.0,pick item,2019-06-10 15:16:53.000Z, ,"['880362']", , , ,0.88,89.99 +1128.0,pick item,2019-06-10 15:19:27.000Z, ,"['880500']", , , ,1.37,2500.0 +1129.0,confirm order,2019-06-10 15:47:58.000Z, , ,"['990126']", , ,1.3630000000000002,589.99 +1130.0,confirm order,2019-06-10 15:51:37.000Z, , ,"['990124']", , ,3.57,3210.98 +1131.0,place order,2019-06-10 15:53:11.000Z, ,"['880508','880510','880509','880511']","['990127']", , ,2.176,3063.98 +1132.0,pick item,2019-06-10 16:06:13.000Z, ,"['880505']", , , ,0.21,529.0 +1133.0,package delivered,2019-06-10 16:23:07.000Z, , , ,"['660058']", ,5.305,2926.97 +1134.0,pick item,2019-06-10 16:35:38.000Z, ,"['880496']", , , ,0.38,29.99 +1135.0,package delivered,2019-06-10 16:45:14.000Z, , , ,"['660056']", ,3.669,2521.96 +1136.0,pick item,2019-06-10 18:01:34.000Z, ,"['880503']", , , ,1.37,2500.0 +1137.0,place order,2019-06-10 18:19:08.000Z, ,"['880512','880513','880514']","['990128']", , ,1.548,1313.98 +1138.0,payment reminder,2019-06-10 19:10:10.000Z, , ,"['990010']", , ,0.978,213.99 +1139.0,place order,2019-06-10 21:17:51.000Z, ,"['880516','880515','880517']","['990129']", , ,1.6,610.98 +1140.0,place order,2019-06-11 07:13:00.000Z, ,"['880518','880519']","['990130']", , ,0.923,976.0 +1141.0,item out of stock,2019-06-11 07:23:21.000Z, ,"['880429']", , , ,1.37,2500.0 +1142.0,item out of stock,2019-06-11 07:24:09.000Z, ,"['880509']", , , ,0.38,29.99 +1143.0,pick item,2019-06-11 07:25:58.000Z, ,"['880508']", , , ,0.38,29.99 +1144.0,pick item,2019-06-11 07:47:58.000Z, ,"['880507']", , , ,0.88,89.99 +1145.0,package delivered,2019-06-11 07:48:47.000Z, , , ,"['660054']", ,3.275,4606.98 +1146.0,confirm order,2019-06-11 08:08:56.000Z, , ,"['990129']", , ,1.6,610.98 +1147.0,pick item,2019-06-11 08:16:10.000Z, ,"['880501']", , , ,0.98,129.99 +1148.0,confirm order,2019-06-11 08:20:46.000Z, , ,"['990128']", , ,1.548,1313.98 +1149.0,pay order,2019-06-11 08:32:37.000Z, , ,"['990115']", , ,1.958,758.99 +1150.0,pick item,2019-06-11 08:42:43.000Z, ,"['880504']", , , ,0.483,79.99 +1151.0,pick item,2019-06-11 08:44:47.000Z, ,"['880479']", , , ,0.188,1149.0 +1152.0,pick item,2019-06-11 08:44:53.000Z, ,"['880488']", , , ,0.98,129.99 +1153.0,place order,2019-06-11 08:45:47.000Z, ,"['880523','880521','880522','880520']","['990131']", , ,4.86,4694.98 +1154.0,package delivered,2019-06-11 08:57:37.000Z, , , ,"['660052']", ,2.106,1906.97 +1155.0,package delivered,2019-06-11 08:59:30.000Z, , , ,"['660055']", ,0.21,529.0 +1156.0,pick item,2019-06-11 09:00:44.000Z, ,"['880513']", , , ,0.38,29.99 +1157.0,package delivered,2019-06-11 09:11:03.000Z, , , ,"['660053']", ,1.733,2695.0 +1158.0,item out of stock,2019-06-11 09:13:09.000Z, ,"['880486']", , , ,0.28,449.0 +1159.0,pick item,2019-06-11 09:14:02.000Z, ,"['880512']", , , ,0.188,1149.0 +1160.0,create package,2019-06-11 09:14:02.000Z, ,"['880494','880277','880492']", ,"['660061']", ,2.048,1378.98 +1161.0,pick item,2019-06-11 09:18:40.000Z, ,"['880297']", , , ,0.78,99.99 +1162.0,confirm order,2019-06-11 09:21:48.000Z, , ,"['990130']", , ,0.923,976.0 +1163.0,pay order,2019-06-11 09:34:39.000Z, , ,"['990108']", , ,3.756,4108.97 +1164.0,package delivered,2019-06-11 09:37:05.000Z, , , ,"['660050']", ,0.618,1587.99 +1165.0,item out of stock,2019-06-11 09:48:51.000Z, ,"['880477']", , , ,1.48,199.99 +1166.0,pick item,2019-06-11 09:50:49.000Z, ,"['880490']", , , ,0.483,1099.0 +1167.0,item out of stock,2019-06-11 09:57:08.000Z, ,"['880514']", , , ,0.98,129.99 +1168.0,pick item,2019-06-11 09:57:25.000Z, ,"['880247']", , , ,0.483,1099.0 +1169.0,create package,2019-06-11 09:57:25.000Z, ,"['880385','880363','880362','880418','880247','880417','880414','880415','880410','880413']", ,"['660062']", ,6.617999999999999,3785.94 +1170.0,pick item,2019-06-11 10:29:14.000Z, ,"['880481']", , , ,0.483,1099.0 +1171.0,pick item,2019-06-11 10:44:34.000Z, ,"['880522']", , , ,1.25,2200.0 +1172.0,place order,2019-06-11 10:51:21.000Z, ,"['880525','880524']","['990132']", , ,0.606,1280.0 +1173.0,package delivered,2019-06-11 12:08:47.000Z, , , ,"['660057']", ,3.513,4684.97 +1174.0,pick item,2019-06-11 12:11:49.000Z, ,"['880520']", , , ,1.25,2200.0 +1175.0,pay order,2019-06-11 12:24:40.000Z, , ,"['990095']", , ,5.483,4262.97 +1176.0,pick item,2019-06-11 12:26:06.000Z, ,"['880516']", , , ,0.78,99.99 +1177.0,pay order,2019-06-11 12:32:34.000Z, , ,"['990113']", , ,3.372,2097.96 +1178.0,pick item,2019-06-11 12:40:24.000Z, ,"['880518']", , , ,0.44,476.0 +1179.0,pick item,2019-06-11 12:45:22.000Z, ,"['880451']", , , ,0.188,1149.0 +1180.0,pick item,2019-06-11 12:52:11.000Z, ,"['880515']", , , ,0.44,476.0 +1181.0,reorder item,2019-06-11 12:57:54.000Z, ,"['880444']", , , ,0.38,29.99 +1182.0,place order,2019-06-11 13:02:30.000Z, ,"['880527','880526']","['990133']", , ,0.552,733.99 +1183.0,pick item,2019-06-11 13:31:43.000Z, ,"['880523']", , , ,1.48,199.99 +1184.0,payment reminder,2019-06-11 13:42:38.000Z, , ,"['990019']", , ,0.446,893.99 +1185.0,pick item,2019-06-11 13:47:25.000Z, ,"['880159']", , , ,0.28,449.0 +1186.0,pick item,2019-06-11 13:49:49.000Z, ,"['880525']", , , ,0.44,476.0 +1187.0,create package,2019-06-11 13:49:49.000Z, ,"['880508','880234']", ,"['660063']", ,1.36,159.98 +1188.0,confirm order,2019-06-11 13:55:16.000Z, , ,"['990132']", , ,0.606,1280.0 +1189.0,pick item,2019-06-11 14:02:04.000Z, ,"['880242']", , , ,0.483,79.99 +1190.0,pick item,2019-06-11 14:17:39.000Z, ,"['880527']", , , ,0.172,699.0 +1191.0,create package,2019-06-11 14:17:39.000Z, ,"['880285','880289','880381','880485','880484']", ,"['660064']", ,2.511,2577.97 +1192.0,pick item,2019-06-11 14:20:01.000Z, ,"['880498']", , , ,0.88,89.99 +1193.0,confirm order,2019-06-11 14:24:39.000Z, , ,"['990125']", , ,2.063,3113.99 +1194.0,place order,2019-06-11 14:24:47.000Z, ,"['880528','880530','880529']","['990134']", , ,0.5660000000000001,883.98 +1195.0,send package,2019-06-11 14:47:06.000Z, , , ,"['660062']", ,6.617999999999999,3785.94 +1196.0,reorder item,2019-06-11 14:47:47.000Z, ,"['880514']", , , ,0.98,129.99 +1197.0,confirm order,2019-06-11 14:57:51.000Z, , ,"['990133']", , ,0.552,733.99 +1198.0,pick item,2019-06-11 15:12:35.000Z, ,"['880524']", , , ,0.166,799.0 +1199.0,confirm order,2019-06-11 15:34:37.000Z, , ,"['990131']", , ,4.86,4694.98 +1200.0,pay order,2019-06-11 15:41:06.000Z, , ,"['990111']", , ,4.907,6155.96 +1201.0,item out of stock,2019-06-11 16:01:12.000Z, ,"['880521']", , , ,0.88,89.99 +1202.0,place order,2019-06-11 16:09:22.000Z, ,"['880531','880532']","['990135']", , ,1.375,223.99 +1203.0,pick item,2019-06-11 16:18:35.000Z, ,"['880357']", , , ,0.44,476.0 +1204.0,item out of stock,2019-06-11 16:48:18.000Z, ,"['880511']", , , ,0.166,799.0 +1205.0,send package,2019-06-11 17:30:29.000Z, , , ,"['660059']", ,1.3630000000000002,169.98 +1206.0,send package,2019-06-11 18:06:02.000Z, , , ,"['660060']", ,9.215,6530.91 +1207.0,place order,2019-06-11 18:07:40.000Z, ,"['880536','880533','880535','880534']","['990136']", , ,1.927,1052.98 +1208.0,pick item,2019-06-11 18:53:59.000Z, ,"['880471']", , , ,0.44,476.0 +1209.0,pay order,2019-06-11 19:06:26.000Z, , ,"['990112']", , ,0.2,44.99 +1210.0,place order,2019-06-11 20:54:55.000Z, ,"['880541','880538','880539','880540','880537','880542','880543']","['990137']", , ,3.124,2082.95 +1211.0,pick item,2019-06-12 06:11:47.000Z, ,"['880468']", , , ,0.495,129.0 +1212.0,create package,2019-06-12 06:11:47.000Z, ,"['880512','880513','880426']", ,"['660065']", ,1.063,1307.99 +1213.0,send package,2019-06-12 06:24:07.000Z, , , ,"['660065']", ,1.063,1307.99 +1214.0,package delivered,2019-06-12 06:32:06.000Z, , , ,"['660059']", ,1.3630000000000002,169.98 +1215.0,pick item,2019-06-12 07:16:19.000Z, ,"['880543']", , , ,0.483,79.99 +1216.0,pick item,2019-06-12 07:18:57.000Z, ,"['880482']", , , ,1.37,2500.0 +1217.0,package delivered,2019-06-12 07:24:21.000Z, , , ,"['660060']", ,9.215,6530.91 +1218.0,send package,2019-06-12 07:32:06.000Z, , , ,"['660064']", ,2.511,2577.97 +1219.0,reorder item,2019-06-12 07:39:51.000Z, ,"['880486']", , , ,0.28,449.0 +1220.0,place order,2019-06-12 07:41:25.000Z, ,"['880546','880545','880547','880544']","['990138']", , ,3.153,3909.99 +1221.0,pick item,2019-06-12 07:46:21.000Z, ,"['880408']", , , ,0.166,799.0 +1222.0,create package,2019-06-12 07:46:21.000Z, ,"['880472','880432','880471','880430','880475','880473','880431','880457','880169','880474']", ,"['660066']", ,6.2010000000000005,4862.95 +1223.0,send package,2019-06-12 08:08:01.000Z, , , ,"['660061']", ,2.048,1378.98 +1224.0,pay order,2019-06-12 08:21:55.000Z, , ,"['990099']", , ,2.345,2531.99 +1225.0,item out of stock,2019-06-12 08:33:33.000Z, ,"['880536']", , , ,0.172,699.0 +1226.0,confirm order,2019-06-12 08:39:44.000Z, , ,"['990103']", , ,1.86,234.98 +1227.0,pick item,2019-06-12 08:46:22.000Z, ,"['880528']", , , ,0.2,39.99 +1228.0,item out of stock,2019-06-12 08:54:01.000Z, ,"['880529']", , , ,0.2,39.99 +1229.0,send package,2019-06-12 08:54:41.000Z, , , ,"['660063']", ,1.36,159.98 +1230.0,confirm order,2019-06-12 09:07:43.000Z, , ,"['990134']", , ,0.5660000000000001,883.98 +1231.0,reorder item,2019-06-12 09:15:18.000Z, ,"['880477']", , , ,1.48,199.99 +1232.0,pick item,2019-06-12 09:28:49.000Z, ,"['880510']", , , ,1.25,2200.0 +1233.0,pick item,2019-06-12 09:34:33.000Z, ,"['880447']", , , ,0.38,29.99 +1234.0,pick item,2019-06-12 09:40:17.000Z, ,"['880539']", , , ,0.2,39.99 +1235.0,pick item,2019-06-12 09:40:17.000Z, ,"['880502']", , , ,0.78,99.99 +1236.0,place order,2019-06-12 09:42:37.000Z, ,"['880548','880549','880550','880551','880553','880552']","['990139']", , ,3.654,4531.98 +1237.0,package delivered,2019-06-12 09:45:23.000Z, , , ,"['660065']", ,1.063,1307.99 +1238.0,package delivered,2019-06-12 09:50:09.000Z, , , ,"['660064']", ,2.511,2577.97 +1239.0,pick item,2019-06-12 10:04:52.000Z, ,"['880534']", , , ,0.28,89.99 +1240.0,pick item,2019-06-12 10:05:25.000Z, ,"['880427']", , , ,1.25,2200.0 +1241.0,pick item,2019-06-12 10:06:07.000Z, ,"['880519']", , , ,0.483,495.0 +1242.0,pick item,2019-06-12 10:16:00.000Z, ,"['880541']", , , ,0.78,99.99 +1243.0,pick item,2019-06-12 10:23:12.000Z, ,"['880495']", , , ,0.38,29.99 +1244.0,create package,2019-06-12 10:23:12.000Z, ,"['880470','880468']", ,"['660067']", ,1.475,258.99 +1245.0,pick item,2019-06-12 10:31:00.000Z, ,"['880486']", , , ,0.28,449.0 +1246.0,pick item,2019-06-12 10:33:07.000Z, ,"['880537']", , , ,0.188,1149.0 +1247.0,create package,2019-06-12 10:33:07.000Z, ,"['880435','880495','880504','880503','880423','880422','880496','880420','880505','880498']", ,"['660068']", ,6.141,6611.96 +1248.0,send package,2019-06-12 10:33:15.000Z, , , ,"['660066']", ,6.2010000000000005,4862.95 +1249.0,pay order,2019-06-12 10:38:15.000Z, , ,"['990103']", , ,1.86,234.98 +1250.0,pick item,2019-06-12 10:47:15.000Z, ,"['880309']", , , ,1.37,2500.0 +1251.0,item out of stock,2019-06-12 11:03:36.000Z, ,"['880540']", , , ,0.21,529.0 +1252.0,item out of stock,2019-06-12 11:09:32.000Z, ,"['880546']", , , ,0.44,476.0 +1253.0,package delivered,2019-06-12 11:17:51.000Z, , , ,"['660061']", ,2.048,1378.98 +1254.0,reorder item,2019-06-12 11:25:54.000Z, ,"['880540']", , , ,0.21,529.0 +1255.0,confirm order,2019-06-12 11:45:01.000Z, , ,"['990136']", , ,1.927,1052.98 +1256.0,place order,2019-06-12 11:45:02.000Z, ,"['880554','880556','880555']","['990140']", , ,1.743,619.98 +1257.0,pay order,2019-06-12 11:46:38.000Z, , ,"['990075']", , ,2.3280000000000003,4362.98 +1258.0,confirm order,2019-06-12 12:18:12.000Z, , ,"['990127']", , ,2.176,3063.98 +1259.0,pick item,2019-06-12 12:22:55.000Z, ,"['880477']", , , ,1.48,199.99 +1260.0,pay order,2019-06-12 12:47:00.000Z, , ,"['990128']", , ,1.548,1313.98 +1261.0,pick item,2019-06-12 12:59:59.000Z, ,"['880290']", , , ,1.37,2500.0 +1262.0,reorder item,2019-06-12 13:10:35.000Z, ,"['880446']", , , ,0.78,99.99 +1263.0,reorder item,2019-06-12 13:15:50.000Z, ,"['880491']", , , ,0.88,89.99 +1264.0,reorder item,2019-06-12 13:17:08.000Z, ,"['880529']", , , ,0.2,39.99 +1265.0,pay order,2019-06-12 13:22:16.000Z, , ,"['990132']", , ,0.606,1280.0 +1266.0,pick item,2019-06-12 13:23:10.000Z, ,"['880542']", , , ,0.483,79.99 +1267.0,place order,2019-06-12 13:49:51.000Z, ,"['880557','880561','880560','880558','880559']","['990141']", , ,4.633,1143.96 +1268.0,pick item,2019-06-12 13:56:31.000Z, ,"['880547']", , , ,1.25,2200.0 +1269.0,pick item,2019-06-12 14:04:05.000Z, ,"['880483']", , , ,1.25,2200.0 +1270.0,pick item,2019-06-12 14:17:48.000Z, ,"['880544']", , , ,0.483,1099.0 +1271.0,package delivered,2019-06-12 14:19:07.000Z, , , ,"['660062']", ,6.617999999999999,3785.94 +1272.0,confirm order,2019-06-12 14:20:00.000Z, , ,"['990135']", , ,1.375,223.99 +1273.0,payment reminder,2019-06-12 14:27:55.000Z, , ,"['990027']", , ,1.263,184.98 +1274.0,send package,2019-06-12 14:28:05.000Z, , , ,"['660067']", ,1.475,258.99 +1275.0,reorder item,2019-06-12 14:51:35.000Z, ,"['880536']", , , ,0.172,699.0 +1276.0,confirm order,2019-06-12 15:23:29.000Z, , ,"['990141']", , ,4.633,1143.96 +1277.0,package delivered,2019-06-12 15:28:23.000Z, , , ,"['660067']", ,1.475,258.99 +1278.0,send package,2019-06-12 15:58:50.000Z, , , ,"['660068']", ,6.141,6611.96 +1279.0,place order,2019-06-12 15:59:30.000Z, ,"['880565','880563','880566','880562','880564']","['990142']", , ,2.928,1563.96 +1280.0,confirm order,2019-06-12 16:07:48.000Z, , ,"['990140']", , ,1.743,619.98 +1281.0,reorder item,2019-06-12 16:08:30.000Z, ,"['880546']", , , ,0.44,476.0 +1282.0,pick item,2019-06-12 16:23:51.000Z, ,"['880558']", , , ,1.48,199.99 +1283.0,pay order,2019-06-12 16:35:10.000Z, , ,"['990133']", , ,0.552,733.99 +1284.0,pick item,2019-06-12 17:15:46.000Z, ,"['880517']", , , ,0.38,29.99 +1285.0,pay order,2019-06-12 17:43:56.000Z, , ,"['990117']", , ,1.76,294.98 +1286.0,place order,2019-06-12 18:38:05.000Z, ,"['880567']","['990143']", , ,0.483,84.99 +1287.0,package delivered,2019-06-12 19:23:49.000Z, , , ,"['660068']", ,6.141,6611.96 +1288.0,place order,2019-06-12 23:06:24.000Z, ,"['880568','880569','880570']","['990144']", , ,0.865,1728.0 +1289.0,item out of stock,2019-06-13 06:21:35.000Z, ,"['880526']", , , ,0.38,29.99 +1290.0,place order,2019-06-13 07:14:49.000Z, ,"['880573','880575','880574','880571','880572']","['990145']", , ,3.893,3813.97 +1291.0,pay order,2019-06-13 07:23:05.000Z, , ,"['990135']", , ,1.375,223.99 +1292.0,payment reminder,2019-06-13 07:35:41.000Z, , ,"['990030']", , ,3.86,940.96 +1293.0,pick item,2019-06-13 07:37:37.000Z, ,"['880548']", , , ,1.37,2500.0 +1294.0,create package,2019-06-13 07:37:37.000Z, ,"['880452','880451','880519','880447','880517','880518','880516','880159','880453','880515','880448']", ,"['660069']", ,5.187,6593.96 +1295.0,pick item,2019-06-13 07:41:47.000Z, ,"['880569']", , , ,0.483,495.0 +1296.0,pick item,2019-06-13 07:44:15.000Z, ,"['880530']", , , ,0.166,799.0 +1297.0,pay order,2019-06-13 07:50:20.000Z, , ,"['990120']", , ,1.48,204.99 +1298.0,pay order,2019-06-13 07:51:23.000Z, , ,"['990110']", , ,0.946,903.99 +1299.0,pay order,2019-06-13 08:13:05.000Z, , ,"['990125']", , ,2.063,3113.99 +1300.0,pay order,2019-06-13 08:15:04.000Z, , ,"['990019']", , ,0.446,893.99 +1301.0,pick item,2019-06-13 08:29:07.000Z, ,"['880571']", , , ,1.28,149.99 +1302.0,pay order,2019-06-13 08:37:49.000Z, , ,"['990063']", , ,0.649,1299.0 +1303.0,package delivered,2019-06-13 08:39:25.000Z, , , ,"['660063']", ,1.36,159.98 +1304.0,place order,2019-06-13 08:49:26.000Z, ,"['880576','880577']","['990146']", , ,1.052,793.99 +1305.0,pay order,2019-06-13 08:57:55.000Z, , ,"['990004']", , ,2.46,334.98 +1306.0,confirm order,2019-06-13 09:08:10.000Z, , ,"['990138']", , ,3.153,3909.99 +1307.0,pick item,2019-06-13 09:36:50.000Z, ,"['880574']", , , ,0.483,1099.0 +1308.0,confirm order,2019-06-13 09:50:23.000Z, , ,"['990146']", , ,1.052,793.99 +1309.0,confirm order,2019-06-13 09:52:59.000Z, , ,"['990142']", , ,2.928,1563.96 +1310.0,package delivered,2019-06-13 09:59:50.000Z, , , ,"['660066']", ,6.2010000000000005,4862.95 +1311.0,confirm order,2019-06-13 10:08:09.000Z, , ,"['990137']", , ,3.124,2082.95 +1312.0,pick item,2019-06-13 10:16:24.000Z, ,"['880145']", , , ,1.37,2500.0 +1313.0,send package,2019-06-13 10:24:23.000Z, , , ,"['660069']", ,5.187,6593.96 +1314.0,pick item,2019-06-13 10:26:53.000Z, ,"['880577']", , , ,0.172,699.0 +1315.0,pick item,2019-06-13 10:34:52.000Z, ,"['880554']", , , ,0.38,29.99 +1316.0,place order,2019-06-13 10:58:39.000Z, ,"['880580','880581','880578','880582','880579','880584','880583']","['990147']", , ,3.967,6190.98 +1317.0,confirm order,2019-06-13 11:00:39.000Z, , ,"['990143']", , ,0.483,84.99 +1318.0,pay order,2019-06-13 11:06:29.000Z, , ,"['990131']", , ,4.86,4694.98 +1319.0,item out of stock,2019-06-13 11:12:34.000Z, ,"['880549']", , , ,0.38,29.99 +1320.0,payment reminder,2019-06-13 11:40:11.000Z, , ,"['990032']", , ,2.329,1768.98 +1321.0,pick item,2019-06-13 11:42:33.000Z, ,"['880341']", , , ,0.483,79.99 +1322.0,pick item,2019-06-13 12:08:58.000Z, ,"['880332']", , , ,0.483,79.99 +1323.0,package delivered,2019-06-13 12:33:30.000Z, , , ,"['660069']", ,5.187,6593.96 +1324.0,pick item,2019-06-13 12:58:05.000Z, ,"['880545']", , , ,0.98,129.99 +1325.0,pick item,2019-06-13 13:10:08.000Z, ,"['880559']", , , ,1.48,199.99 +1326.0,create package,2019-06-13 13:10:08.000Z, ,"['880176','880525','880524']", ,"['660070']", ,2.086,1474.99 +1327.0,pick item,2019-06-13 13:11:07.000Z, ,"['880444']", , , ,0.38,29.99 +1328.0,pick item,2019-06-13 13:15:11.000Z, ,"['880553']", , , ,0.28,449.0 +1329.0,place order,2019-06-13 13:17:06.000Z, ,"['880585']","['990148']", , ,0.44,481.0 +1330.0,pick item,2019-06-13 13:18:03.000Z, ,"['880567']", , , ,0.483,79.99 +1331.0,create package,2019-06-13 13:18:03.000Z, ,"['880465','880569','880408','880332']", ,"['660071']", ,2.412,1523.98 +1332.0,pick item,2019-06-13 13:24:27.000Z, ,"['880578']", , , ,0.483,1099.0 +1333.0,pick item,2019-06-13 13:37:35.000Z, ,"['880575']", , , ,1.37,2500.0 +1334.0,item out of stock,2019-06-13 13:49:25.000Z, ,"['880401']", , , ,0.483,1099.0 +1335.0,item out of stock,2019-06-13 14:08:56.000Z, ,"['880573']", , , ,0.38,29.99 +1336.0,confirm order,2019-06-13 14:28:24.000Z, , ,"['990139']", , ,3.654,4531.98 +1337.0,payment reminder,2019-06-13 14:32:09.000Z, , ,"['990026']", , ,2.583,2729.98 +1338.0,pick item,2019-06-13 14:32:46.000Z, ,"['880531']", , , ,0.495,129.0 +1339.0,confirm order,2019-06-13 14:35:40.000Z, , ,"['990145']", , ,3.893,3813.97 +1340.0,pick item,2019-06-13 14:42:29.000Z, ,"['880194']", , , ,0.188,1149.0 +1341.0,create package,2019-06-13 14:42:29.000Z, ,"['880542','880543','880567','880489','880490','880488','880507','880541','880539','880527','880554','880537']", ,"['660072']", ,6.292000000000002,3676.91 +1342.0,send package,2019-06-13 14:47:17.000Z, , , ,"['660070']", ,2.086,1474.99 +1343.0,place order,2019-06-13 14:53:59.000Z, ,"['880589','880591','880590','880592','880588','880587','880586']","['990149']", , ,4.152,1722.95 +1344.0,pick item,2019-06-13 14:55:01.000Z, ,"['880278']", , , ,0.188,1149.0 +1345.0,confirm order,2019-06-13 15:02:15.000Z, , ,"['990147']", , ,3.967,6190.98 +1346.0,payment reminder,2019-06-13 15:21:57.000Z, , ,"['990034']", , ,3.011,4052.98 +1347.0,item out of stock,2019-06-13 15:26:36.000Z, ,"['880538']", , , ,0.78,99.99 +1348.0,pick item,2019-06-13 15:31:53.000Z, ,"['880552']", , , ,0.172,699.0 +1349.0,pick item,2019-06-13 15:41:05.000Z, ,"['880532']", , , ,0.88,89.99 +1350.0,pick item,2019-06-13 16:40:33.000Z, ,"['880533']", , , ,0.98,129.99 +1351.0,item out of stock,2019-06-13 16:42:14.000Z, ,"['880570']", , , ,0.21,529.0 +1352.0,place order,2019-06-13 17:07:45.000Z, ,"['880593','880594']","['990150']", , ,1.92,680.99 +1353.0,pick item,2019-06-13 17:41:38.000Z, ,"['880579']", , , ,0.188,1149.0 +1354.0,payment reminder,2019-06-13 18:04:02.000Z, , ,"['990037']", , ,1.37,2505.0 +1355.0,payment reminder,2019-06-13 18:19:52.000Z, , ,"['990036']", , ,2.969,1639.96 +1356.0,reorder item,2019-06-13 18:26:06.000Z, ,"['880442']", , , ,0.28,89.99 +1357.0,place order,2019-06-13 19:55:05.000Z, ,"['880596','880595']","['990151']", , ,1.42,610.99 +1358.0,create package,2019-06-13 23:00:00.000Z, ,"['880482','880481','880483','880290','880460','880297','880479']", ,"['660073']", ,6.421,9677.98 +1359.0,place order,2019-06-14 05:48:24.000Z, ,"['880600','880597','880599','880598']","['990152']", , ,1.809,1422.98 +1360.0,pay order,2019-06-14 06:19:36.000Z, , ,"['990134']", , ,0.5660000000000001,883.98 +1361.0,pick item,2019-06-14 06:21:20.000Z, ,"['880228']", , , ,1.48,199.99 +1362.0,pay order,2019-06-14 06:33:46.000Z, , ,"['990010']", , ,0.978,213.99 +1363.0,pick item,2019-06-14 06:49:27.000Z, ,"['880593']", , , ,1.48,199.99 +1364.0,package delivered,2019-06-14 07:06:37.000Z, , , ,"['660070']", ,2.086,1474.99 +1365.0,pick item,2019-06-14 07:18:18.000Z, ,"['880582']", , , ,0.28,449.0 +1366.0,pick item,2019-06-14 07:22:11.000Z, ,"['880564']", , , ,0.98,129.99 +1367.0,pick item,2019-06-14 07:28:01.000Z, ,"['880339']", , , ,0.483,1099.0 +1368.0,confirm order,2019-06-14 07:30:06.000Z, , ,"['990149']", , ,4.152,1722.95 +1369.0,pick item,2019-06-14 07:36:25.000Z, ,"['880583']", , , ,0.2,39.99 +1370.0,send package,2019-06-14 07:49:34.000Z, , , ,"['660071']", ,2.412,1523.98 +1371.0,pay order,2019-06-14 07:57:38.000Z, , ,"['990007']", , ,1.855,293.98 +1372.0,confirm order,2019-06-14 07:59:39.000Z, , ,"['990148']", , ,0.44,481.0 +1373.0,pick item,2019-06-14 08:12:47.000Z, ,"['880491']", , , ,0.88,89.99 +1374.0,pick item,2019-06-14 08:23:31.000Z, ,"['880566']", , , ,0.2,39.99 +1375.0,item out of stock,2019-06-14 08:27:30.000Z, ,"['880557']", , , ,0.483,79.99 +1376.0,place order,2019-06-14 08:37:02.000Z, ,"['880604','880610','880609','880607','880601','880608','880603','880602','880605','880606']","['990153']", , ,3.593,5702.98 +1377.0,pay order,2019-06-14 08:49:08.000Z, , ,"['990122']", , ,0.768,1223.98 +1378.0,reorder item,2019-06-14 09:17:39.000Z, ,"['880511']", , , ,0.166,799.0 +1379.0,pick item,2019-06-14 09:32:32.000Z, ,"['880467']", , , ,0.38,29.99 +1380.0,confirm order,2019-06-14 09:47:05.000Z, , ,"['990150']", , ,1.92,680.99 +1381.0,pick item,2019-06-14 09:47:30.000Z, ,"['880590']", , , ,1.48,199.99 +1382.0,reorder item,2019-06-14 09:49:21.000Z, ,"['880509']", , , ,0.38,29.99 +1383.0,confirm order,2019-06-14 10:12:51.000Z, , ,"['990153']", , ,3.593,5702.98 +1384.0,item out of stock,2019-06-14 10:19:48.000Z, ,"['880560']", , , ,0.21,529.0 +1385.0,pick item,2019-06-14 10:27:21.000Z, ,"['880171']", , , ,1.25,2200.0 +1386.0,confirm order,2019-06-14 10:30:39.000Z, , ,"['990152']", , ,1.809,1422.98 +1387.0,place order,2019-06-14 10:33:51.000Z, ,"['880613','880611','880612']","['990154']", , ,1.703,1679.99 +1388.0,pick item,2019-06-14 10:50:16.000Z, ,"['880565']", , , ,1.28,149.99 +1389.0,pick item,2019-06-14 10:52:15.000Z, ,"['880604']", , , ,0.2,39.99 +1390.0,pick item,2019-06-14 10:59:06.000Z, ,"['880587']", , , ,0.28,89.99 +1391.0,create package,2019-06-14 10:59:06.000Z, ,"['880528','880501','880579','880522','880502','880500','880523','880520','880583','880582','880578','880530']", ,"['660074']", ,8.627,10905.95 +1392.0,confirm order,2019-06-14 11:05:52.000Z, , ,"['990151']", , ,1.42,610.99 +1393.0,package delivered,2019-06-14 11:10:53.000Z, , , ,"['660071']", ,2.412,1523.98 +1394.0,item out of stock,2019-06-14 11:11:54.000Z, ,"['880493']", , , ,0.2,39.99 +1395.0,pick item,2019-06-14 11:22:56.000Z, ,"['880584']", , , ,1.28,149.99 +1396.0,pick item,2019-06-14 11:24:04.000Z, ,"['880597']", , , ,0.88,89.99 +1397.0,pick item,2019-06-14 11:45:18.000Z, ,"['880612']", , , ,0.78,99.99 +1398.0,pay order,2019-06-14 12:00:53.000Z, , ,"['990146']", , ,1.052,793.99 +1399.0,pay order,2019-06-14 12:02:37.000Z, , ,"['990126']", , ,1.3630000000000002,589.99 +1400.0,pick item,2019-06-14 12:27:29.000Z, ,"['880562']", , , ,0.188,1149.0 +1401.0,place order,2019-06-14 12:27:30.000Z, ,"['880614','880619','880618','880620','880615','880616','880617']","['990155']", , ,2.966,4300.97 +1402.0,pick item,2019-06-14 12:45:15.000Z, ,"['880563']", , , ,0.28,89.99 +1403.0,pick item,2019-06-14 13:04:42.000Z, ,"['880476']", , , ,0.28,89.99 +1404.0,pick item,2019-06-14 13:07:56.000Z, ,"['880424']", , , ,0.483,1099.0 +1405.0,pick item,2019-06-14 13:08:02.000Z, ,"['880550']", , , ,1.28,149.99 +1406.0,pick item,2019-06-14 13:17:12.000Z, ,"['880305']", , , ,0.21,529.0 +1407.0,pick item,2019-06-14 13:24:51.000Z, ,"['880555']", , , ,0.483,495.0 +1408.0,pick item,2019-06-14 13:32:14.000Z, ,"['880613']", , , ,0.44,476.0 +1409.0,pay order,2019-06-14 13:35:32.000Z, , ,"['990059']", , ,2.76,354.98 +1410.0,pay order,2019-06-14 13:36:13.000Z, , ,"['990149']", , ,4.152,1722.95 +1411.0,pay order,2019-06-14 13:41:14.000Z, , ,"['990106']", , ,3.479,7132.0 +1412.0,confirm order,2019-06-14 13:54:12.000Z, , ,"['990155']", , ,2.966,4300.97 +1413.0,pick item,2019-06-14 14:07:04.000Z, ,"['880576']", , , ,0.88,89.99 +1414.0,create package,2019-06-14 14:07:04.000Z, ,"['880613','880597','880242','880575','880593','880571','880357','880574','880612']", ,"['660075']", ,7.636,5170.95 +1415.0,pick item,2019-06-14 14:12:56.000Z, ,"['880617']", , , ,0.483,1099.0 +1416.0,place order,2019-06-14 14:14:47.000Z, ,"['880622','880621']","['990156']", , ,0.6829999999999999,1143.99 +1417.0,pick item,2019-06-14 14:15:00.000Z, ,"['880167']", , , ,0.88,89.99 +1418.0,send package,2019-06-14 14:24:58.000Z, , , ,"['660074']", ,8.627,10905.95 +1419.0,pick item,2019-06-14 14:29:23.000Z, ,"['880601']", , , ,0.483,495.0 +1420.0,pick item,2019-06-14 14:38:35.000Z, ,"['880499']", , , ,0.44,476.0 +1421.0,pick item,2019-06-14 14:50:42.000Z, ,"['880536']", , , ,0.172,699.0 +1422.0,confirm order,2019-06-14 15:07:10.000Z, , ,"['990154']", , ,1.703,1679.99 +1423.0,pick item,2019-06-14 15:22:26.000Z, ,"['880551']", , , ,0.172,699.0 +1424.0,pay order,2019-06-14 15:47:32.000Z, , ,"['990114']", , ,2.143,264.97 +1425.0,place order,2019-06-14 15:49:22.000Z, ,"['880624','880625','880623']","['990157']", , ,0.6679999999999999,1642.99 +1426.0,pick item,2019-06-14 15:58:37.000Z, ,"['880609']", , , ,0.188,1149.0 +1427.0,reorder item,2019-06-14 15:59:36.000Z, ,"['880429']", , , ,1.37,2500.0 +1428.0,pick item,2019-06-14 16:06:33.000Z, ,"['880211']", , , ,0.166,799.0 +1429.0,pick item,2019-06-14 16:52:04.000Z, ,"['880608']", , , ,0.495,129.0 +1430.0,create package,2019-06-14 16:52:04.000Z, ,"['880510','880590','880587','880211']", ,"['660076']", ,3.176,3288.98 +1431.0,pay order,2019-06-14 16:59:46.000Z, , ,"['990030']", , ,3.86,940.96 +1432.0,send package,2019-06-14 17:07:23.000Z, , , ,"['660072']", ,6.292000000000002,3676.91 +1433.0,pay order,2019-06-14 17:09:31.000Z, , ,"['990147']", , ,3.967,6190.98 +1434.0,pick item,2019-06-14 17:43:53.000Z, ,"['880497']", , , ,1.37,2500.0 +1435.0,place order,2019-06-14 18:07:40.000Z, ,"['880628','880626','880627','880629','880630']","['990158']", , ,3.409,1938.97 +1436.0,reorder item,2019-06-14 18:18:38.000Z, ,"['880573']", , , ,0.38,29.99 +1437.0,place order,2019-06-14 20:54:55.000Z, ,"['880632','880633','880634','880631']","['990159']", , ,3.35,923.97 +1438.0,place order,2019-06-15 19:03:53.000Z, ,"['880635','880636']","['990160']", , ,0.376,2303.0 +1439.0,payment reminder,2019-06-16 10:03:03.000Z, , ,"['990041']", , ,2.724,2836.97 +1440.0,payment reminder,2019-06-16 12:16:09.000Z, , ,"['990040']", , ,0.6829999999999999,539.99 +1441.0,payment reminder,2019-06-16 15:54:51.000Z, , ,"['990042']", , ,5.922999999999999,6397.98 +1442.0,place order,2019-06-16 18:55:34.000Z, ,"['880639','880641','880642','880638','880637','880640']","['990161']", , ,5.459,3209.96 +1443.0,pay order,2019-06-17 06:45:02.000Z, , ,"['990140']", , ,1.743,619.98 +1444.0,confirm order,2019-06-17 06:47:59.000Z, , ,"['990158']", , ,3.409,1938.97 +1445.0,pick item,2019-06-17 07:00:57.000Z, ,"['880586']", , , ,0.172,699.0 +1446.0,pick item,2019-06-17 07:15:19.000Z, ,"['880638']", , , ,1.48,199.99 +1447.0,pay order,2019-06-17 07:20:29.000Z, , ,"['990129']", , ,1.6,610.98 +1448.0,confirm order,2019-06-17 07:26:40.000Z, , ,"['990161']", , ,5.459,3209.96 +1449.0,pick item,2019-06-17 07:26:52.000Z, ,"['880595']", , , ,0.44,476.0 +1450.0,create package,2019-06-17 07:26:52.000Z, ,"['880533','880145','880536','880427','880424','880194','880558','880534','880559']", ,"['660077']", ,7.683,8266.96 +1451.0,package delivered,2019-06-17 07:31:48.000Z, , , ,"['660072']", ,6.292000000000002,3676.91 +1452.0,place order,2019-06-17 07:45:31.000Z, ,"['880644','880645','880646','880643']","['990162']", , ,2.2430000000000003,723.97 +1453.0,item out of stock,2019-06-17 07:55:21.000Z, ,"['880637']", , , ,1.25,2200.0 +1454.0,pick item,2019-06-17 07:57:45.000Z, ,"['880216']", , , ,0.172,699.0 +1455.0,item out of stock,2019-06-17 08:00:27.000Z, ,"['880616']", , , ,0.28,89.99 +1456.0,pay order,2019-06-17 08:13:20.000Z, , ,"['990038']", , ,0.2,44.99 +1457.0,pick item,2019-06-17 08:28:00.000Z, ,"['880620']", , , ,0.188,1149.0 +1458.0,pick item,2019-06-17 08:31:50.000Z, ,"['880624']", , , ,0.2,39.99 +1459.0,item out of stock,2019-06-17 08:34:06.000Z, ,"['880610']", , , ,0.495,129.0 +1460.0,pick item,2019-06-17 08:36:34.000Z, ,"['880600']", , , ,0.28,449.0 +1461.0,pay order,2019-06-17 08:49:14.000Z, , ,"['990090']", , ,3.14,1256.98 +1462.0,pick item,2019-06-17 08:52:41.000Z, ,"['880599']", , , ,0.483,79.99 +1463.0,pick item,2019-06-17 08:54:01.000Z, ,"['880594']", , , ,0.44,476.0 +1464.0,pick item,2019-06-17 08:54:23.000Z, ,"['880625']", , , ,0.188,1149.0 +1465.0,pick item,2019-06-17 09:09:16.000Z, ,"['880639']", , , ,0.483,79.99 +1466.0,pick item,2019-06-17 09:10:38.000Z, ,"['880630']", , , ,0.483,79.99 +1467.0,create package,2019-06-17 09:10:38.000Z, ,"['880486']", ,"['660078']", ,0.28,449.0 +1468.0,pick item,2019-06-17 09:10:55.000Z, ,"['880598']", , , ,0.166,799.0 +1469.0,create package,2019-06-17 09:10:55.000Z, ,"['880551','880216','880550','880228','880553','880309','880552','880548','880305']", ,"['660079']", ,6.506,8424.98 +1470.0,send package,2019-06-17 09:10:57.000Z, , , ,"['660078']", ,0.28,449.0 +1471.0,pick item,2019-06-17 09:14:41.000Z, ,"['880308']", , , ,0.2,39.99 +1472.0,send package,2019-06-17 09:40:05.000Z, , , ,"['660073']", ,6.421,9677.98 +1473.0,pay order,2019-06-17 09:48:14.000Z, , ,"['990036']", , ,2.969,1639.96 +1474.0,place order,2019-06-17 09:50:49.000Z, ,"['880648','880650','880651','880647','880649']","['990163']", , ,3.031,2385.98 +1475.0,package delivered,2019-06-17 09:57:41.000Z, , , ,"['660074']", ,8.627,10905.95 +1476.0,reorder item,2019-06-17 09:58:30.000Z, ,"['880526']", , , ,0.38,29.99 +1477.0,pick item,2019-06-17 10:00:03.000Z, ,"['880626']", , , ,0.98,129.99 +1478.0,item out of stock,2019-06-17 10:06:59.000Z, ,"['880611']", , , ,0.483,1099.0 +1479.0,pay order,2019-06-17 10:21:04.000Z, , ,"['990098']", , ,4.813,6753.99 +1480.0,item out of stock,2019-06-17 10:21:17.000Z, ,"['880568']", , , ,0.172,699.0 +1481.0,pick item,2019-06-17 10:28:47.000Z, ,"['880456']", , , ,1.28,149.99 +1482.0,reorder item,2019-06-17 10:48:15.000Z, ,"['880493']", , , ,0.2,39.99 +1483.0,pay order,2019-06-17 10:49:41.000Z, , ,"['990119']", , ,1.84,693.98 +1484.0,confirm order,2019-06-17 11:08:50.000Z, , ,"['990162']", , ,2.2430000000000003,723.97 +1485.0,reorder item,2019-06-17 11:32:02.000Z, ,"['880570']", , , ,0.21,529.0 +1486.0,place order,2019-06-17 12:01:26.000Z, ,"['880657','880655','880654','880653','880652','880656','880658']","['990164']", , ,4.299,4194.97 +1487.0,confirm order,2019-06-17 12:15:33.000Z, , ,"['990163']", , ,3.031,2385.98 +1488.0,failed delivery,2019-06-17 12:18:32.000Z, , , ,"['660078']", ,0.28,449.0 +1489.0,pick item,2019-06-17 12:24:54.000Z, ,"['880050']", , , ,0.188,1149.0 +1490.0,pick item,2019-06-17 12:41:52.000Z, ,"['880149']", , , ,0.2,39.99 +1491.0,pick item,2019-06-17 12:43:47.000Z, ,"['880585']", , , ,0.44,476.0 +1492.0,send package,2019-06-17 13:04:50.000Z, , , ,"['660075']", ,7.636,5170.95 +1493.0,pay order,2019-06-17 13:09:22.000Z, , ,"['990151']", , ,1.42,610.99 +1494.0,pick item,2019-06-17 13:10:22.000Z, ,"['880648']", , , ,0.44,476.0 +1495.0,reorder item,2019-06-17 13:15:44.000Z, ,"['880549']", , , ,0.38,29.99 +1496.0,send package,2019-06-17 13:19:21.000Z, , , ,"['660077']", ,7.683,8266.96 +1497.0,place order,2019-06-17 13:22:39.000Z, ,"['880660','880661','880659']","['990165']", , ,1.047,862.99 +1498.0,pick item,2019-06-17 13:40:49.000Z, ,"['880656']", , , ,0.88,89.99 +1499.0,pay order,2019-06-17 13:45:54.000Z, , ,"['990121']", , ,3.123,1423.97 +1500.0,package delivered,2019-06-17 13:47:30.000Z, , , ,"['660075']", ,7.636,5170.95 +1501.0,pay order,2019-06-17 13:48:27.000Z, , ,"['990087']", , ,5.017,3940.94 +1502.0,pick item,2019-06-17 13:48:31.000Z, ,"['880561']", , , ,0.98,129.99 +1503.0,create package,2019-06-17 13:48:31.000Z, ,"['880339','880341','880477','880050','880656','880476']", ,"['660080']", ,3.794,2707.96 +1504.0,pay order,2019-06-17 13:59:19.000Z, , ,"['990093']", , ,1.195,2731.99 +1505.0,confirm order,2019-06-17 14:01:07.000Z, , ,"['990157']", , ,0.6679999999999999,1642.99 +1506.0,pick item,2019-06-17 14:17:10.000Z, ,"['880654']", , , ,0.166,799.0 +1507.0,pick item,2019-06-17 14:25:06.000Z, ,"['880641']", , , ,1.28,149.99 +1508.0,package delivered,2019-06-17 14:39:14.000Z, , , ,"['660077']", ,7.683,8266.96 +1509.0,pick item,2019-06-17 14:43:13.000Z, ,"['880580']", , , ,1.37,2500.0 +1510.0,pick item,2019-06-17 14:51:36.000Z, ,"['880225']", , , ,1.48,199.99 +1511.0,reorder item,2019-06-17 14:55:41.000Z, ,"['880560']", , , ,0.21,529.0 +1512.0,confirm order,2019-06-17 14:56:42.000Z, , ,"['990164']", , ,4.299,4194.97 +1513.0,pick item,2019-06-17 15:02:26.000Z, ,"['880653']", , , ,0.88,89.99 +1514.0,place order,2019-06-17 15:05:05.000Z, ,"['880663','880662','880664']","['990166']", , ,1.14,1952.99 +1515.0,item out of stock,2019-06-17 15:08:14.000Z, ,"['880643']", , , ,0.2,39.99 +1516.0,reorder item,2019-06-17 15:10:33.000Z, ,"['880568']", , , ,0.172,699.0 +1517.0,pick item,2019-06-17 15:25:59.000Z, ,"['880323']", , , ,1.28,149.99 +1518.0,create package,2019-06-17 15:25:59.000Z, ,"['880149','880576','880604','880609','880601','880547','880608','880577','880545','880544']", ,"['660081']", ,5.331,6070.96 +1519.0,reorder item,2019-06-17 15:42:53.000Z, ,"['880401']", , , ,0.483,1099.0 +1520.0,reorder item,2019-06-17 15:59:15.000Z, ,"['880616']", , , ,0.28,89.99 +1521.0,pick item,2019-06-17 16:02:37.000Z, ,"['880588']", , , ,0.28,89.99 +1522.0,pick item,2019-06-17 16:03:57.000Z, ,"['880603']", , , ,0.166,799.0 +1523.0,reorder item,2019-06-17 16:19:15.000Z, ,"['880521']", , , ,0.88,89.99 +1524.0,confirm order,2019-06-17 16:21:05.000Z, , ,"['990144']", , ,0.865,1728.0 +1525.0,place order,2019-06-17 16:29:58.000Z, ,"['880676','880667','880677','880674','880675','880669','880666','880673','880678','880670','880668','880672','880665','880671']","['990167']", , ,8.257,7155.95 +1526.0,pay order,2019-06-17 16:45:01.000Z, , ,"['990152']", , ,1.809,1422.98 +1527.0,pick item,2019-06-17 17:17:04.000Z, ,"['880619']", , , ,0.172,699.0 +1528.0,pay order,2019-06-17 18:43:38.000Z, , ,"['990164']", , ,4.299,4194.97 +1529.0,place order,2019-06-17 19:09:29.000Z, ,"['880679','880681','880683','880682','880680','880684']","['990168']", , ,2.763,1416.98 +1530.0,pick item,2019-06-17 19:37:15.000Z, ,"['880681']", , , ,0.495,129.0 +1531.0,pick item,2019-06-17 20:18:39.000Z, ,"['880665']", , , ,0.483,495.0 +1532.0,place order,2019-06-18 01:14:48.000Z, ,"['880686','880687','880685']","['990169']", , ,1.838,3743.99 +1533.0,confirm order,2019-06-18 06:33:57.000Z, , ,"['990165']", , ,1.047,862.99 +1534.0,pick item,2019-06-18 07:06:48.000Z, ,"['880685']", , , ,0.28,89.99 +1535.0,pick item,2019-06-18 07:07:37.000Z, ,"['880636']", , , ,0.188,1149.0 +1536.0,pick item,2019-06-18 07:27:43.000Z, ,"['880592']", , , ,0.88,89.99 +1537.0,send package,2019-06-18 07:29:23.000Z, , , ,"['660076']", ,3.176,3288.98 +1538.0,place order,2019-06-18 07:36:04.000Z, ,"['880689','880688','880690']","['990170']", , ,1.803,650.98 +1539.0,package delivered,2019-06-18 07:38:55.000Z, , , ,"['660073']", ,6.421,9677.98 +1540.0,send package,2019-06-18 07:43:25.000Z, , , ,"['660079']", ,6.506,8424.98 +1541.0,pick item,2019-06-18 07:54:06.000Z, ,"['880632']", , , ,1.48,199.99 +1542.0,pick item,2019-06-18 07:59:48.000Z, ,"['880690']", , , ,0.483,79.99 +1543.0,create package,2019-06-18 07:59:48.000Z, ,"['880632','880444']", ,"['660082']", ,1.86,229.98 +1544.0,pay order,2019-06-18 08:04:32.000Z, , ,"['990139']", , ,3.654,4531.98 +1545.0,confirm order,2019-06-18 08:06:18.000Z, , ,"['990159']", , ,3.35,923.97 +1546.0,confirm order,2019-06-18 08:09:41.000Z, , ,"['990168']", , ,2.763,1416.98 +1547.0,pick item,2019-06-18 08:12:30.000Z, ,"['880664']", , , ,0.188,1149.0 +1548.0,reorder item,2019-06-18 08:17:47.000Z, ,"['880557']", , , ,0.483,79.99 +1549.0,pay order,2019-06-18 08:17:57.000Z, , ,"['990157']", , ,0.6679999999999999,1642.99 +1550.0,pick item,2019-06-18 08:54:21.000Z, ,"['880671']", , , ,0.483,1099.0 +1551.0,create package,2019-06-18 08:54:21.000Z, ,"['880648','880531','880532','880467','880585']", ,"['660083']", ,2.635,1200.98 +1552.0,item out of stock,2019-06-18 08:55:18.000Z, ,"['880663']", , , ,0.78,99.99 +1553.0,pick item,2019-06-18 08:56:44.000Z, ,"['880606']", , , ,0.21,529.0 +1554.0,pick item,2019-06-18 09:01:29.000Z, ,"['880631']", , , ,0.78,99.99 +1555.0,pick item,2019-06-18 09:09:36.000Z, ,"['880660']", , , ,0.172,699.0 +1556.0,confirm order,2019-06-18 09:10:07.000Z, , ,"['990166']", , ,1.14,1952.99 +1557.0,failed delivery,2019-06-18 09:27:21.000Z, , , ,"['660078']", ,0.28,449.0 +1558.0,place order,2019-06-18 09:31:55.000Z, ,"['880692','880693','880691','880694','880695']","['990171']", , ,1.7080000000000002,2161.98 +1559.0,pick item,2019-06-18 09:35:44.000Z, ,"['880694']", , , ,0.21,529.0 +1560.0,pick item,2019-06-18 09:41:30.000Z, ,"['880633']", , , ,0.88,89.99 +1561.0,create package,2019-06-18 09:41:30.000Z, ,"['880278','880626','880630']", ,"['660084']", ,1.651,1358.98 +1562.0,pick item,2019-06-18 09:42:28.000Z, ,"['880650']", , , ,1.48,199.99 +1563.0,item out of stock,2019-06-18 09:47:17.000Z, ,"['880693']", , , ,0.166,799.0 +1564.0,pick item,2019-06-18 10:00:11.000Z, ,"['880669']", , , ,0.88,89.99 +1565.0,send package,2019-06-18 10:06:04.000Z, , , ,"['660081']", ,5.331,6070.96 +1566.0,pay order,2019-06-18 10:09:40.000Z, , ,"['990143']", , ,0.483,84.99 +1567.0,pick item,2019-06-18 10:18:14.000Z, ,"['880646']", , , ,0.28,449.0 +1568.0,create package,2019-06-18 10:18:14.000Z, ,"['880565','880563','880566','880562','880456','880564']", ,"['660085']", ,4.208,1708.95 +1569.0,pick item,2019-06-18 10:37:30.000Z, ,"['880402']", , , ,0.188,1149.0 +1570.0,failed delivery,2019-06-18 10:41:35.000Z, , , ,"['660081']", ,5.331,6070.96 +1571.0,pick item,2019-06-18 10:44:10.000Z, ,"['880667']", , , ,0.483,495.0 +1572.0,pick item,2019-06-18 10:44:30.000Z, ,"['880657']", , , ,0.2,39.99 +1573.0,send package,2019-06-18 11:04:09.000Z, , , ,"['660084']", ,1.651,1358.98 +1574.0,reorder item,2019-06-18 11:08:11.000Z, ,"['880610']", , , ,0.495,129.0 +1575.0,pick item,2019-06-18 11:08:48.000Z, ,"['880661']", , , ,0.495,129.0 +1576.0,reorder item,2019-06-18 11:12:34.000Z, ,"['880663']", , , ,0.78,99.99 +1577.0,place order,2019-06-18 11:23:38.000Z, ,"['880697','880700','880701','880699','880696','880698']","['990172']", , ,4.216,2567.97 +1578.0,send package,2019-06-18 11:27:19.000Z, , , ,"['660082']", ,1.86,229.98 +1579.0,send package,2019-06-18 11:41:56.000Z, , , ,"['660080']", ,3.794,2707.96 +1580.0,package delivered,2019-06-18 11:46:02.000Z, , , ,"['660079']", ,6.506,8424.98 +1581.0,confirm order,2019-06-18 12:07:45.000Z, , ,"['990167']", , ,8.257,7155.95 +1582.0,pay order,2019-06-18 12:09:17.000Z, , ,"['990144']", , ,0.865,1728.0 +1583.0,pick item,2019-06-18 12:19:39.000Z, ,"['880658']", , , ,0.483,495.0 +1584.0,failed delivery,2019-06-18 12:32:44.000Z, , , ,"['660084']", ,1.651,1358.98 +1585.0,pay order,2019-06-18 12:39:50.000Z, , ,"['990161']", , ,5.459,3209.96 +1586.0,pick item,2019-06-18 12:40:31.000Z, ,"['880621']", , , ,0.483,1099.0 +1587.0,create package,2019-06-18 12:40:31.000Z, ,"['880323','880555','880491']", ,"['660086']", ,2.643,734.98 +1588.0,pick item,2019-06-18 12:40:51.000Z, ,"['880675']", , , ,0.483,79.99 +1589.0,item out of stock,2019-06-18 12:48:21.000Z, ,"['880673']", , , ,1.28,149.99 +1590.0,package delivered,2019-06-18 12:55:46.000Z, , , ,"['660080']", ,3.794,2707.96 +1591.0,send package,2019-06-18 12:59:15.000Z, , , ,"['660083']", ,2.635,1200.98 +1592.0,item out of stock,2019-06-18 13:04:35.000Z, ,"['880642']", , , ,0.483,79.99 +1593.0,pick item,2019-06-18 13:05:25.000Z, ,"['880581']", , , ,0.166,799.0 +1594.0,place order,2019-06-18 13:07:03.000Z, ,"['880704','880702','880703']","['990173']", , ,1.93,3403.0 +1595.0,confirm order,2019-06-18 13:08:34.000Z, , ,"['990156']", , ,0.6829999999999999,1143.99 +1596.0,pick item,2019-06-18 13:09:54.000Z, ,"['880698']", , , ,0.483,1099.0 +1597.0,create package,2019-06-18 13:09:54.000Z, ,"['880681','880171','880225','880685']", ,"['660087']", ,3.505,2618.98 +1598.0,item out of stock,2019-06-18 13:20:18.000Z, ,"['880655']", , , ,0.44,476.0 +1599.0,pick item,2019-06-18 13:31:47.000Z, ,"['880677']", , , ,0.38,29.99 +1600.0,package delivered,2019-06-18 13:32:24.000Z, , , ,"['660076']", ,3.176,3288.98 +1601.0,pick item,2019-06-18 13:37:37.000Z, ,"['880644']", , , ,1.28,149.99 +1602.0,pick item,2019-06-18 13:39:53.000Z, ,"['880679']", , , ,0.88,89.99 +1603.0,pick item,2019-06-18 13:43:34.000Z, ,"['880622']", , , ,0.2,39.99 +1604.0,create package,2019-06-18 13:43:34.000Z, ,"['880167','880619','880620','880617','880595','880584','880580','880499','880581']", ,"['660088']", ,5.419,7437.98 +1605.0,pick item,2019-06-18 13:46:54.000Z, ,"['880695']", , , ,0.78,99.99 +1606.0,item out of stock,2019-06-18 13:48:13.000Z, ,"['880535']", , , ,0.495,129.0 +1607.0,send package,2019-06-18 13:50:34.000Z, , , ,"['660088']", ,5.419,7437.98 +1608.0,pick item,2019-06-18 13:51:03.000Z, ,"['880645']", , , ,0.483,79.99 +1609.0,payment reminder,2019-06-18 13:52:29.000Z, , ,"['990051']", , ,1.66,194.98 +1610.0,confirm order,2019-06-18 13:52:59.000Z, , ,"['990172']", , ,4.216,2567.97 +1611.0,confirm order,2019-06-18 13:53:00.000Z, , ,"['990160']", , ,0.376,2303.0 +1612.0,failed delivery,2019-06-18 13:56:11.000Z, , , ,"['660078']", ,0.28,449.0 +1613.0,pay order,2019-06-18 13:56:14.000Z, , ,"['990166']", , ,1.14,1952.99 +1614.0,item out of stock,2019-06-18 13:57:59.000Z, ,"['880704']", , , ,0.28,449.0 +1615.0,pick item,2019-06-18 14:07:02.000Z, ,"['880680']", , , ,0.21,529.0 +1616.0,package delivered,2019-06-18 14:17:30.000Z, , , ,"['660081']", ,5.331,6070.96 +1617.0,send package,2019-06-18 14:18:43.000Z, , , ,"['660085']", ,4.208,1708.95 +1618.0,pay order,2019-06-18 14:20:13.000Z, , ,"['990092']", , ,1.256,2392.99 +1619.0,failed delivery,2019-06-18 14:22:44.000Z, , , ,"['660085']", ,4.208,1708.95 +1620.0,pick item,2019-06-18 14:27:07.000Z, ,"['880686']", , , ,0.188,1149.0 +1621.0,place order,2019-06-18 14:33:53.000Z, ,"['880705','880707','880706']","['990174']", , ,1.334,2082.99 +1622.0,reorder item,2019-06-18 14:41:52.000Z, ,"['880637']", , , ,1.25,2200.0 +1623.0,pick item,2019-06-18 14:44:09.000Z, ,"['880647']", , , ,0.188,1149.0 +1624.0,reorder item,2019-06-18 14:50:27.000Z, ,"['880693']", , , ,0.166,799.0 +1625.0,pick item,2019-06-18 15:20:14.000Z, ,"['880589']", , , ,0.28,449.0 +1626.0,pick item,2019-06-18 15:21:35.000Z, ,"['880614']", , , ,0.98,129.99 +1627.0,confirm order,2019-06-18 15:26:53.000Z, , ,"['990170']", , ,1.803,650.98 +1628.0,pay order,2019-06-18 15:29:28.000Z, , ,"['990145']", , ,3.893,3813.97 +1629.0,package delivered,2019-06-18 16:17:14.000Z, , , ,"['660083']", ,2.635,1200.98 +1630.0,confirm order,2019-06-18 16:17:45.000Z, , ,"['990174']", , ,1.334,2082.99 +1631.0,place order,2019-06-18 16:27:34.000Z, ,"['880709','880708','880710','880711']","['990175']", , ,2.506,1502.98 +1632.0,confirm order,2019-06-18 16:28:42.000Z, , ,"['990175']", , ,2.506,1502.98 +1633.0,reorder item,2019-06-18 16:51:16.000Z, ,"['880704']", , , ,0.28,449.0 +1634.0,pick item,2019-06-18 17:50:41.000Z, ,"['880573']", , , ,0.38,29.99 +1635.0,pick item,2019-06-18 18:16:21.000Z, ,"['880692']", , , ,0.38,29.99 +1636.0,create package,2019-06-18 18:16:21.000Z, ,"['880497']", ,"['660089']", ,1.37,2500.0 +1637.0,place order,2019-06-18 19:02:17.000Z, ,"['880712','880713','880716','880715','880714']","['990176']", , ,2.009,1053.96 +1638.0,item out of stock,2019-06-18 19:52:57.000Z, ,"['880687']", , , ,1.37,2500.0 +1639.0,pick item,2019-06-18 19:58:36.000Z, ,"['880627']", , , ,0.98,129.99 +1640.0,create package,2019-06-18 19:58:36.000Z, ,"['880639','880641','880624','880625','880586','880589','880592','880588','880638']", ,"['660090']", ,5.242999999999999,2946.94 +1641.0,create package,2019-06-18 23:00:00.000Z, ,"['880573','880667','880677','880598','880675','880669','880594','880645','880600','880665','880644','880646','880671','880599']", ,"['660091']", ,6.984,4801.93 +1642.0,place order,2019-06-19 00:31:36.000Z, ,"['880721','880720','880722','880723','880719','880717','880718']","['990177']", , ,5.915,5803.96 +1643.0,pick item,2019-06-19 06:34:11.000Z, ,"['880696']", , , ,0.21,529.0 +1644.0,item out of stock,2019-06-19 06:40:40.000Z, ,"['880607']", , , ,0.188,1149.0 +1645.0,pay order,2019-06-19 07:26:32.000Z, , ,"['990172']", , ,4.216,2567.97 +1646.0,pay order,2019-06-19 07:33:25.000Z, , ,"['990124']", , ,3.57,3210.98 +1647.0,pick item,2019-06-19 07:41:07.000Z, ,"['880634']", , , ,0.21,529.0 +1648.0,item out of stock,2019-06-19 07:48:02.000Z, ,"['880572']", , , ,0.38,29.99 +1649.0,confirm order,2019-06-19 07:48:14.000Z, , ,"['990177']", , ,5.915,5803.96 +1650.0,place order,2019-06-19 07:48:33.000Z, ,"['880725','880727','880726','880724']","['990178']", , ,2.82,2182.98 +1651.0,pick item,2019-06-19 07:49:21.000Z, ,"['880540']", , , ,0.21,529.0 +1652.0,pick item,2019-06-19 07:52:21.000Z, ,"['880670']", , , ,0.44,476.0 +1653.0,pick item,2019-06-19 07:54:33.000Z, ,"['880506']", , , ,0.483,495.0 +1654.0,pay order,2019-06-19 08:00:32.000Z, , ,"['990026']", , ,2.583,2729.98 +1655.0,pick item,2019-06-19 08:05:20.000Z, ,"['880652']", , , ,1.25,2200.0 +1656.0,failed delivery,2019-06-19 08:07:05.000Z, , , ,"['660078']", ,0.28,449.0 +1657.0,item out of stock,2019-06-19 08:14:02.000Z, ,"['880666']", , , ,0.21,529.0 +1658.0,package delivered,2019-06-19 08:18:09.000Z, , , ,"['660085']", ,4.208,1708.95 +1659.0,pick item,2019-06-19 08:21:53.000Z, ,"['880710']", , , ,1.28,149.99 +1660.0,pick item,2019-06-19 08:26:28.000Z, ,"['880618']", , , ,0.38,29.99 +1661.0,package delivered,2019-06-19 08:27:27.000Z, , , ,"['660084']", ,1.651,1358.98 +1662.0,pick item,2019-06-19 08:31:40.000Z, ,"['880511']", , , ,0.166,799.0 +1663.0,send package,2019-06-19 08:36:15.000Z, , , ,"['660089']", ,1.37,2500.0 +1664.0,package delivered,2019-06-19 08:37:32.000Z, , , ,"['660088']", ,5.419,7437.98 +1665.0,pick item,2019-06-19 08:59:58.000Z, ,"['880676']", , , ,0.495,129.0 +1666.0,package delivered,2019-06-19 09:07:41.000Z, , , ,"['660082']", ,1.86,229.98 +1667.0,send package,2019-06-19 09:08:32.000Z, , , ,"['660086']", ,2.643,734.98 +1668.0,item out of stock,2019-06-19 09:12:57.000Z, ,"['880651']", , , ,0.483,79.99 +1669.0,pick item,2019-06-19 09:13:50.000Z, ,"['880514']", , , ,0.98,129.99 +1670.0,pay order,2019-06-19 09:21:54.000Z, , ,"['990174']", , ,1.334,2082.99 +1671.0,pick item,2019-06-19 09:24:03.000Z, ,"['880703']", , , ,0.28,449.0 +1672.0,item out of stock,2019-06-19 09:29:08.000Z, ,"['880672']", , , ,0.28,449.0 +1673.0,item out of stock,2019-06-19 09:30:39.000Z, ,"['880674']", , , ,0.21,529.0 +1674.0,package delivered,2019-06-19 09:31:56.000Z, , , ,"['660086']", ,2.643,734.98 +1675.0,confirm order,2019-06-19 09:42:15.000Z, , ,"['990173']", , ,1.93,3403.0 +1676.0,send package,2019-06-19 09:47:32.000Z, , , ,"['660087']", ,3.505,2618.98 +1677.0,place order,2019-06-19 09:56:53.000Z, ,"['880729','880730','880728']","['990179']", , ,1.332,833.98 +1678.0,send package,2019-06-19 09:58:34.000Z, , , ,"['660090']", ,5.242999999999999,2946.94 +1679.0,reorder item,2019-06-19 10:01:11.000Z, ,"['880572']", , , ,0.38,29.99 +1680.0,pick item,2019-06-19 10:02:01.000Z, ,"['880716']", , , ,0.2,39.99 +1681.0,reorder item,2019-06-19 10:08:47.000Z, ,"['880655']", , , ,0.44,476.0 +1682.0,pay order,2019-06-19 10:09:04.000Z, , ,"['990118']", , ,3.951,7072.98 +1683.0,pay order,2019-06-19 10:24:21.000Z, , ,"['990175']", , ,2.506,1502.98 +1684.0,confirm order,2019-06-19 10:26:42.000Z, , ,"['990171']", , ,1.7080000000000002,2161.98 +1685.0,pick item,2019-06-19 10:27:52.000Z, ,"['880719']", , , ,1.25,2200.0 +1686.0,reorder item,2019-06-19 10:29:56.000Z, ,"['880672']", , , ,0.28,449.0 +1687.0,failed delivery,2019-06-19 10:35:50.000Z, , , ,"['660089']", ,1.37,2500.0 +1688.0,pay order,2019-06-19 11:05:09.000Z, , ,"['990173']", , ,1.93,3403.0 +1689.0,pick item,2019-06-19 11:49:49.000Z, ,"['880697']", , , ,1.48,199.99 +1690.0,place order,2019-06-19 12:13:33.000Z, ,"['880733','880732','880731']","['990180']", , ,1.234,2042.99 +1691.0,pick item,2019-06-19 12:30:09.000Z, ,"['880709']", , , ,0.28,449.0 +1692.0,pay order,2019-06-19 12:37:00.000Z, , ,"['990156']", , ,0.6829999999999999,1143.99 +1693.0,payment reminder,2019-06-19 12:38:58.000Z, , ,"['990065']", , ,2.36,294.98 +1694.0,pick item,2019-06-19 12:44:34.000Z, ,"['880338']", , , ,0.28,89.99 +1695.0,pick item,2019-06-19 12:45:13.000Z, ,"['880596']", , , ,0.98,129.99 +1696.0,pick item,2019-06-19 12:48:38.000Z, ,"['880682']", , , ,0.2,39.99 +1697.0,package delivered,2019-06-19 12:49:32.000Z, , , ,"['660090']", ,5.242999999999999,2946.94 +1698.0,confirm order,2019-06-19 12:54:01.000Z, , ,"['990180']", , ,1.234,2042.99 +1699.0,pick item,2019-06-19 12:54:07.000Z, ,"['880732']", , , ,0.88,89.99 +1700.0,reorder item,2019-06-19 13:22:00.000Z, ,"['880642']", , , ,0.483,79.99 +1701.0,pick item,2019-06-19 13:29:55.000Z, ,"['880659']", , , ,0.38,29.99 +1702.0,pick item,2019-06-19 13:31:09.000Z, ,"['880557']", , , ,0.483,79.99 +1703.0,pick item,2019-06-19 13:46:00.000Z, ,"['880706']", , , ,0.98,129.99 +1704.0,create package,2019-06-19 13:46:00.000Z, ,"['880308','880636','880690']", ,"['660092']", ,0.871,1268.98 +1705.0,place order,2019-06-19 13:46:54.000Z, ,"['880735','880736','880734']","['990181']", , ,2.09,3070.99 +1706.0,pick item,2019-06-19 13:53:55.000Z, ,"['880683']", , , ,0.495,129.0 +1707.0,package delivered,2019-06-19 13:54:48.000Z, , , ,"['660078']", ,0.28,449.0 +1708.0,pick item,2019-06-19 13:57:37.000Z, ,"['880714']", , , ,0.166,799.0 +1709.0,pick item,2019-06-19 14:04:39.000Z, ,"['880717']", , , ,0.98,129.99 +1710.0,create package,2019-06-19 14:04:39.000Z, ,"['880660','880622','880621','880561','880557','880661','880659','880514']", ,"['660093']", ,4.173,2336.95 +1711.0,confirm order,2019-06-19 14:08:05.000Z, , ,"['990169']", , ,1.838,3743.99 +1712.0,pick item,2019-06-19 14:11:30.000Z, ,"['880712']", , , ,0.78,99.99 +1713.0,pick item,2019-06-19 14:18:52.000Z, ,"['880731']", , , ,0.188,1149.0 +1714.0,pick item,2019-06-19 14:22:03.000Z, ,"['880715']", , , ,0.38,29.99 +1715.0,reorder item,2019-06-19 14:29:30.000Z, ,"['880611']", , , ,0.483,1099.0 +1716.0,pay order,2019-06-19 14:39:39.000Z, , ,"['990160']", , ,0.376,2303.0 +1717.0,confirm order,2019-06-19 14:51:39.000Z, , ,"['990178']", , ,2.82,2182.98 +1718.0,pick item,2019-06-19 15:05:12.000Z, ,"['880708']", , , ,0.78,99.99 +1719.0,pick item,2019-06-19 15:20:40.000Z, ,"['880689']", , , ,0.44,476.0 +1720.0,reorder item,2019-06-19 15:21:27.000Z, ,"['880651']", , , ,0.483,79.99 +1721.0,confirm order,2019-06-19 15:43:05.000Z, , ,"['990179']", , ,1.332,833.98 +1722.0,send package,2019-06-19 15:46:39.000Z, , , ,"['660091']", ,6.984,4801.93 +1723.0,place order,2019-06-19 15:53:35.000Z, ,"['880738','880737']","['990182']", , ,0.546,833.99 +1724.0,item out of stock,2019-06-19 15:54:27.000Z, ,"['880591']", , , ,0.78,99.99 +1725.0,pick item,2019-06-19 15:55:37.000Z, ,"['880729']", , , ,0.78,99.99 +1726.0,package delivered,2019-06-19 16:34:35.000Z, , , ,"['660089']", ,1.37,2500.0 +1727.0,item out of stock,2019-06-19 16:36:38.000Z, ,"['880691']", , , ,0.172,699.0 +1728.0,reorder item,2019-06-19 17:45:44.000Z, ,"['880674']", , , ,0.21,529.0 +1729.0,reorder item,2019-06-19 18:15:48.000Z, ,"['880591']", , , ,0.78,99.99 +1730.0,place order,2019-06-19 18:20:20.000Z, ,"['880742','880743','880740','880741','880739']","['990183']", , ,3.4730000000000003,2474.96 +1731.0,payment reminder,2019-06-19 18:52:38.000Z, , ,"['990067']", , ,2.364,6236.99 +1732.0,pick item,2019-06-19 20:05:41.000Z, ,"['880724']", , , ,1.48,199.99 +1733.0,place order,2019-06-19 21:20:15.000Z, ,"['880749','880745','880744','880746','880747','880748']","['990184']", , ,3.6,1685.97 +1734.0,place order,2019-06-20 07:15:53.000Z, ,"['880752','880750','880751']","['990185']", , ,3.13,3153.99 +1735.0,pick item,2019-06-20 07:23:12.000Z, ,"['880747']", , , ,0.38,29.99 +1736.0,create package,2019-06-20 07:23:12.000Z, ,"['880657','880338','880653','880652','880703','880654','880658']", ,"['660094']", ,3.539,4162.97 +1737.0,pay order,2019-06-20 07:40:09.000Z, , ,"['990042']", , ,5.922999999999999,6397.98 +1738.0,pick item,2019-06-20 07:46:57.000Z, ,"['880678']", , , ,0.78,99.99 +1739.0,pick item,2019-06-20 08:21:05.000Z, ,"['880707']", , , ,0.166,799.0 +1740.0,pick item,2019-06-20 08:21:46.000Z, ,"['880668']", , , ,1.37,2500.0 +1741.0,payment reminder,2019-06-20 08:22:31.000Z, , ,"['990066']", , ,2.003,3490.99 +1742.0,reorder item,2019-06-20 08:27:16.000Z, ,"['880691']", , , ,0.172,699.0 +1743.0,item out of stock,2019-06-20 08:30:12.000Z, ,"['880728']", , , ,0.38,29.99 +1744.0,pick item,2019-06-20 08:35:49.000Z, ,"['880721']", , , ,1.37,2500.0 +1745.0,pick item,2019-06-20 08:36:34.000Z, ,"['880616']", , , ,0.28,89.99 +1746.0,pick item,2019-06-20 08:40:57.000Z, ,"['880702']", , , ,1.37,2500.0 +1747.0,pay order,2019-06-20 08:46:39.000Z, , ,"['990155']", , ,2.966,4300.97 +1748.0,place order,2019-06-20 08:51:33.000Z, ,"['880755','880754','880753','880756']","['990186']", , ,1.151,2137.99 +1749.0,pick item,2019-06-20 09:00:07.000Z, ,"['880642']", , , ,0.483,79.99 +1750.0,create package,2019-06-20 09:00:07.000Z, ,"['880603','880707','880706','880606']", ,"['660095']", ,1.5219999999999998,2256.99 +1751.0,pick item,2019-06-20 09:06:19.000Z, ,"['880741']", , , ,0.38,29.99 +1752.0,pay order,2019-06-20 09:19:33.000Z, , ,"['990051']", , ,1.66,194.98 +1753.0,item out of stock,2019-06-20 09:25:45.000Z, ,"['880602']", , , ,0.98,129.99 +1754.0,pick item,2019-06-20 09:28:51.000Z, ,"['880635']", , , ,0.188,1149.0 +1755.0,package delivered,2019-06-20 09:30:48.000Z, , , ,"['660087']", ,3.505,2618.98 +1756.0,confirm order,2019-06-20 09:51:08.000Z, , ,"['990181']", , ,2.09,3070.99 +1757.0,pick item,2019-06-20 10:07:06.000Z, ,"['880746']", , , ,0.44,476.0 +1758.0,pick item,2019-06-20 10:17:58.000Z, ,"['880711']", , , ,0.166,799.0 +1759.0,create package,2019-06-20 10:17:58.000Z, ,"['880732','880731','880664']", ,"['660096']", ,1.256,2387.99 +1760.0,send package,2019-06-20 10:55:23.000Z, , , ,"['660092']", ,0.871,1268.98 +1761.0,place order,2019-06-20 11:02:54.000Z, ,"['880757','880758']","['990187']", , ,0.41,573.99 +1762.0,confirm order,2019-06-20 11:37:00.000Z, , ,"['990182']", , ,0.546,833.99 +1763.0,pick item,2019-06-20 11:37:41.000Z, ,"['880605']", , , ,0.188,1149.0 +1764.0,reorder item,2019-06-20 11:47:48.000Z, ,"['880538']", , , ,0.78,99.99 +1765.0,pick item,2019-06-20 12:23:23.000Z, ,"['880700']", , , ,1.28,149.99 +1766.0,pay order,2019-06-20 12:25:02.000Z, , ,"['990168']", , ,2.763,1416.98 +1767.0,place order,2019-06-20 12:25:35.000Z, ,"['880760','880759','880761']","['990188']", , ,3.9,4854.99 +1768.0,item out of stock,2019-06-20 12:26:54.000Z, ,"['880730']", , , ,0.172,699.0 +1769.0,send package,2019-06-20 12:33:53.000Z, , , ,"['660096']", ,1.256,2387.99 +1770.0,item out of stock,2019-06-20 12:39:20.000Z, ,"['880662']", , , ,0.172,699.0 +1771.0,pick item,2019-06-20 12:52:49.000Z, ,"['880395']", , , ,0.78,99.99 +1772.0,create package,2019-06-20 12:52:49.000Z, ,"['880633','880634','880631']", ,"['660097']", ,1.87,718.98 +1773.0,item out of stock,2019-06-20 12:58:06.000Z, ,"['880688']", , , ,0.88,89.99 +1774.0,pick item,2019-06-20 12:58:13.000Z, ,"['880004']", , , ,1.48,199.99 +1775.0,pick item,2019-06-20 12:58:47.000Z, ,"['880752']", , , ,0.28,449.0 +1776.0,reorder item,2019-06-20 13:01:54.000Z, ,"['880687']", , , ,1.37,2500.0 +1777.0,package delivered,2019-06-20 13:07:47.000Z, , , ,"['660091']", ,6.984,4801.93 +1778.0,pick item,2019-06-20 13:12:28.000Z, ,"['880739']", , , ,0.98,129.99 +1779.0,create package,2019-06-20 13:12:28.000Z, ,"['880721','880717','880697','880700','880647','880719','880694','880402','880650','880692','880695','880696','880698']", ,"['660098']", ,10.279000000000002,9964.94 +1780.0,pay order,2019-06-20 13:33:16.000Z, , ,"['990041']", , ,2.724,2836.97 +1781.0,pick item,2019-06-20 13:38:22.000Z, ,"['880610']", , , ,0.495,129.0 +1782.0,send package,2019-06-20 13:49:59.000Z, , , ,"['660093']", ,4.173,2336.95 +1783.0,pick item,2019-06-20 13:56:38.000Z, ,"['880556']", , , ,0.88,89.99 +1784.0,pick item,2019-06-20 14:08:07.000Z, ,"['880757']", , , ,0.21,529.0 +1785.0,pick item,2019-06-20 14:09:01.000Z, ,"['880748']", , , ,0.44,476.0 +1786.0,place order,2019-06-20 14:10:57.000Z, ,"['880763','880762','880765','880764']","['990189']", , ,2.301,2197.99 +1787.0,pick item,2019-06-20 14:14:45.000Z, ,"['880615']", , , ,0.483,1099.0 +1788.0,reorder item,2019-06-20 14:21:16.000Z, ,"['880662']", , , ,0.172,699.0 +1789.0,payment reminder,2019-06-20 14:28:32.000Z, , ,"['990077']", , ,3.603,949.95 +1790.0,pick item,2019-06-20 14:30:18.000Z, ,"['880521']", , , ,0.88,89.99 +1791.0,pay order,2019-06-20 14:35:03.000Z, , ,"['990179']", , ,1.332,833.98 +1792.0,confirm order,2019-06-20 14:45:53.000Z, , ,"['990188']", , ,3.9,4854.99 +1793.0,reorder item,2019-06-20 14:59:35.000Z, ,"['880666']", , , ,0.21,529.0 +1794.0,reorder item,2019-06-20 15:26:34.000Z, ,"['880730']", , , ,0.172,699.0 +1795.0,pick item,2019-06-20 15:36:27.000Z, ,"['880737']", , , ,0.166,799.0 +1796.0,pick item,2019-06-20 15:39:58.000Z, ,"['880705']", , , ,0.188,1149.0 +1797.0,place order,2019-06-20 15:41:42.000Z, ,"['880769','880768','880767','880766','880771','880770']","['990190']", , ,4.1560000000000015,6571.99 +1798.0,pick item,2019-06-20 16:09:18.000Z, ,"['880743']", , , ,0.38,29.99 +1799.0,confirm order,2019-06-20 16:10:25.000Z, , ,"['990183']", , ,3.4730000000000003,2474.96 +1800.0,send package,2019-06-20 16:49:19.000Z, , , ,"['660094']", ,3.539,4162.97 +1801.0,item out of stock,2019-06-20 16:56:31.000Z, ,"['880734']", , , ,1.37,2500.0 +1802.0,reorder item,2019-06-20 17:02:41.000Z, ,"['880535']", , , ,0.495,129.0 +1803.0,pick item,2019-06-20 17:09:55.000Z, ,"['880701']", , , ,0.483,495.0 +1804.0,place order,2019-06-20 17:44:41.000Z, ,"['880772']","['990191']", , ,0.188,1154.0 +1805.0,item out of stock,2019-06-20 19:18:41.000Z, ,"['880772']", , , ,0.188,1149.0 +1806.0,place order,2019-06-20 21:08:56.000Z, ,"['880775','880773','880774']","['990192']", , ,0.5539999999999999,1932.0 +1807.0,pick item,2019-06-21 06:34:23.000Z, ,"['880740']", , , ,1.25,2200.0 +1808.0,confirm order,2019-06-21 06:57:36.000Z, , ,"['990187']", , ,0.41,573.99 +1809.0,place order,2019-06-21 07:02:18.000Z, ,"['880776','880779','880778','880777']","['990193']", , ,3.102,3143.98 +1810.0,confirm order,2019-06-21 07:04:43.000Z, , ,"['990185']", , ,3.13,3153.99 +1811.0,pay order,2019-06-21 07:05:53.000Z, , ,"['990127']", , ,2.176,3063.98 +1812.0,pay order,2019-06-21 07:14:00.000Z, , ,"['990178']", , ,2.82,2182.98 +1813.0,pay order,2019-06-21 07:28:04.000Z, , ,"['990037']", , ,1.37,2505.0 +1814.0,pick item,2019-06-21 07:35:36.000Z, ,"['880649']", , , ,0.44,476.0 +1815.0,confirm order,2019-06-21 07:35:51.000Z, , ,"['990184']", , ,3.6,1685.97 +1816.0,pick item,2019-06-21 07:36:47.000Z, ,"['880771']", , , ,1.37,2500.0 +1817.0,create package,2019-06-21 07:36:47.000Z, ,"['880679','880686','880683','880682','880680','880771']", ,"['660099']", ,3.343,4436.98 +1818.0,reorder item,2019-06-21 07:37:03.000Z, ,"['880643']", , , ,0.2,39.99 +1819.0,pick item,2019-06-21 07:40:15.000Z, ,"['880628']", , , ,0.483,495.0 +1820.0,pick item,2019-06-21 07:49:45.000Z, ,"['880538']", , , ,0.78,99.99 +1821.0,pick item,2019-06-21 07:50:12.000Z, ,"['880756']", , , ,0.28,449.0 +1822.0,pick item,2019-06-21 07:51:54.000Z, ,"['880779']", , , ,0.172,699.0 +1823.0,send package,2019-06-21 07:55:32.000Z, , , ,"['660095']", ,1.5219999999999998,2256.99 +1824.0,item out of stock,2019-06-21 08:04:46.000Z, ,"['880776']", , , ,1.25,2200.0 +1825.0,place order,2019-06-21 08:24:24.000Z, ,"['880785','880781','880782','880780','880784','880783']","['990194']", , ,5.242999999999999,5463.97 +1826.0,pick item,2019-06-21 08:48:22.000Z, ,"['880736']", , , ,0.28,89.99 +1827.0,pick item,2019-06-21 08:51:13.000Z, ,"['880778']", , , ,0.2,39.99 +1828.0,create package,2019-06-21 08:51:13.000Z, ,"['880614','880729','880616','880521','880596','880618','880615']", ,"['660100']", ,4.763,1668.94 +1829.0,confirm order,2019-06-21 08:53:37.000Z, , ,"['990194']", , ,5.242999999999999,5463.97 +1830.0,reorder item,2019-06-21 09:03:31.000Z, ,"['880602']", , , ,0.98,129.99 +1831.0,item out of stock,2019-06-21 09:32:31.000Z, ,"['880751']", , , ,1.48,199.99 +1832.0,pick item,2019-06-21 09:47:45.000Z, ,"['880629']", , , ,0.483,1099.0 +1833.0,pick item,2019-06-21 10:03:01.000Z, ,"['880761']", , , ,1.28,149.99 +1834.0,place order,2019-06-21 10:08:35.000Z, ,"['880789','880790','880787','880786','880788','880791']","['990195']", , ,1.766,2041.97 +1835.0,pick item,2019-06-21 10:09:41.000Z, ,"['880783']", , , ,1.37,2500.0 +1836.0,confirm order,2019-06-21 10:41:10.000Z, , ,"['990189']", , ,2.301,2197.99 +1837.0,send package,2019-06-21 11:09:52.000Z, , , ,"['660097']", ,1.87,718.98 +1838.0,confirm order,2019-06-21 11:13:45.000Z, , ,"['990195']", , ,1.766,2041.97 +1839.0,confirm order,2019-06-21 11:15:09.000Z, , ,"['990190']", , ,4.1560000000000015,6571.99 +1840.0,pick item,2019-06-21 11:19:28.000Z, ,"['880722']", , , ,0.172,699.0 +1841.0,pick item,2019-06-21 11:27:43.000Z, ,"['880777']", , , ,1.48,199.99 +1842.0,package delivered,2019-06-21 11:29:02.000Z, , , ,"['660096']", ,1.256,2387.99 +1843.0,send package,2019-06-21 11:31:07.000Z, , , ,"['660100']", ,4.763,1668.94 +1844.0,pick item,2019-06-21 11:31:51.000Z, ,"['880727']", , , ,0.188,1149.0 +1845.0,place order,2019-06-21 11:36:58.000Z, ,"['880792','880793']","['990196']", , ,0.332,1603.0 +1846.0,package delivered,2019-06-21 11:43:38.000Z, , , ,"['660093']", ,4.173,2336.95 +1847.0,pick item,2019-06-21 11:52:19.000Z, ,"['880275']", , , ,1.25,2200.0 +1848.0,create package,2019-06-21 11:52:19.000Z, ,"['880628','880712','880627','880716','880715','880714','880629']", ,"['660101']", ,3.472,2692.96 +1849.0,pick item,2019-06-21 11:56:22.000Z, ,"['880744']", , , ,0.28,449.0 +1850.0,package delivered,2019-06-21 12:12:29.000Z, , , ,"['660094']", ,3.539,4162.97 +1851.0,pick item,2019-06-21 12:16:08.000Z, ,"['880781']", , , ,0.38,29.99 +1852.0,confirm order,2019-06-21 12:32:28.000Z, , ,"['990186']", , ,1.151,2137.99 +1853.0,pay order,2019-06-21 12:34:08.000Z, , ,"['990190']", , ,4.1560000000000015,6571.99 +1854.0,pick item,2019-06-21 12:36:26.000Z, ,"['880758']", , , ,0.2,39.99 +1855.0,send package,2019-06-21 12:36:41.000Z, , , ,"['660098']", ,10.279000000000002,9964.94 +1856.0,item out of stock,2019-06-21 12:52:28.000Z, ,"['880623']", , , ,0.28,449.0 +1857.0,confirm order,2019-06-21 13:00:42.000Z, , ,"['990196']", , ,0.332,1603.0 +1858.0,pick item,2019-06-21 13:05:37.000Z, ,"['880651']", , , ,0.483,79.99 +1859.0,package delivered,2019-06-21 13:16:45.000Z, , , ,"['660100']", ,4.763,1668.94 +1860.0,pick item,2019-06-21 13:16:51.000Z, ,"['880782']", , , ,1.48,199.99 +1861.0,place order,2019-06-21 13:33:43.000Z, ,"['880797','880796','880795','880794']","['990197']", , ,2.372,1828.99 +1862.0,pick item,2019-06-21 13:42:41.000Z, ,"['880693']", , , ,0.166,799.0 +1863.0,pick item,2019-06-21 13:44:04.000Z, ,"['880762']", , , ,1.48,199.99 +1864.0,create package,2019-06-21 13:44:04.000Z, ,"['880748','880744','880756','880747','880757','880758','880556','880540','880538','880746','880506']", ,"['660102']", ,4.583,3662.96 +1865.0,pick item,2019-06-21 13:59:19.000Z, ,"['880570']", , , ,0.21,529.0 +1866.0,pick item,2019-06-21 14:06:18.000Z, ,"['880640']", , , ,0.483,495.0 +1867.0,send package,2019-06-21 14:15:39.000Z, , , ,"['660099']", ,3.343,4436.98 +1868.0,package delivered,2019-06-21 14:20:51.000Z, , , ,"['660092']", ,0.871,1268.98 +1869.0,failed delivery,2019-06-21 14:23:16.000Z, , , ,"['660097']", ,1.87,718.98 +1870.0,pick item,2019-06-21 14:43:08.000Z, ,"['880753']", , , ,0.2,39.99 +1871.0,pay order,2019-06-21 14:45:55.000Z, , ,"['990171']", , ,1.7080000000000002,2161.98 +1872.0,pick item,2019-06-21 15:18:56.000Z, ,"['880766']", , , ,0.166,799.0 +1873.0,pick item,2019-06-21 15:22:55.000Z, ,"['880259']", , , ,0.188,1149.0 +1874.0,place order,2019-06-21 15:27:13.000Z, ,"['880798','880799']","['990198']", , ,2.03,2304.99 +1875.0,pay order,2019-06-21 15:51:07.000Z, , ,"['990137']", , ,3.124,2082.95 +1876.0,reorder item,2019-06-21 15:58:27.000Z, ,"['880688']", , , ,0.88,89.99 +1877.0,pick item,2019-06-21 16:10:05.000Z, ,"['880770']", , , ,0.21,529.0 +1878.0,pay order,2019-06-21 16:11:20.000Z, , ,"['990130']", , ,0.923,976.0 +1879.0,place order,2019-06-21 17:14:14.000Z, ,"['880801','880802','880800','880804','880803']","['990199']", , ,3.389,1718.97 +1880.0,send package,2019-06-21 17:24:34.000Z, , , ,"['660102']", ,4.583,3662.96 +1881.0,package delivered,2019-06-21 18:30:40.000Z, , , ,"['660097']", ,1.87,718.98 +1882.0,place order,2019-06-21 20:08:03.000Z, ,"['880806','880808','880805','880809','880807']","['990200']", , ,3.201,1681.98 +1883.0,place order,2019-06-22 13:48:12.000Z, ,"['880811','880810','880814','880815','880813','880816','880812']","['990201']", , ,5.337999999999999,2112.95 +1884.0,payment reminder,2019-06-23 09:08:16.000Z, , ,"['990080']", , ,2.336,3683.99 +1885.0,place order,2019-06-23 14:30:18.000Z, ,"['880818','880817']","['990202']", , ,1.76,294.98 +1886.0,create package,2019-06-23 23:00:00.000Z, ,"['880676','880668','880678','880670']", ,"['660103']", ,3.085,3204.99 +1887.0,place order,2019-06-24 06:38:44.000Z, ,"['880821','880819','880820']","['990203']", , ,1.508,1719.99 +1888.0,send package,2019-06-24 07:08:14.000Z, , , ,"['660103']", ,3.085,3204.99 +1889.0,confirm order,2019-06-24 07:25:18.000Z, , ,"['990199']", , ,3.389,1718.97 +1890.0,pick item,2019-06-24 07:35:00.000Z, ,"['880742']", , , ,0.483,79.99 +1891.0,pick item,2019-06-24 07:40:41.000Z, ,"['880765']", , , ,0.172,699.0 +1892.0,reorder item,2019-06-24 07:48:31.000Z, ,"['880607']", , , ,0.188,1149.0 +1893.0,item out of stock,2019-06-24 07:52:31.000Z, ,"['880794']", , , ,1.48,199.99 +1894.0,confirm order,2019-06-24 07:57:29.000Z, , ,"['990192']", , ,0.5539999999999999,1932.0 +1895.0,pick item,2019-06-24 08:03:29.000Z, ,"['880446']", , , ,0.78,99.99 +1896.0,pick item,2019-06-24 08:09:02.000Z, ,"['880509']", , , ,0.38,29.99 +1897.0,pick item,2019-06-24 08:18:14.000Z, ,"['880560']", , , ,0.21,529.0 +1898.0,confirm order,2019-06-24 08:26:25.000Z, , ,"['990202']", , ,1.76,294.98 +1899.0,item out of stock,2019-06-24 08:27:19.000Z, ,"['880755']", , , ,0.483,495.0 +1900.0,pick item,2019-06-24 08:32:52.000Z, ,"['880791']", , , ,0.78,99.99 +1901.0,item out of stock,2019-06-24 08:33:13.000Z, ,"['880749']", , , ,1.28,149.99 +1902.0,pick item,2019-06-24 08:35:47.000Z, ,"['880745']", , , ,0.78,99.99 +1903.0,pick item,2019-06-24 08:43:05.000Z, ,"['880820']", , , ,0.88,89.99 +1904.0,item out of stock,2019-06-24 08:44:00.000Z, ,"['880796']", , , ,0.28,449.0 +1905.0,place order,2019-06-24 08:47:54.000Z, ,"['880824','880822','880826','880825','880827','880823']","['990204']", , ,4.74,1519.96 +1906.0,pick item,2019-06-24 08:48:40.000Z, ,"['880733']", , , ,0.166,799.0 +1907.0,create package,2019-06-24 08:48:40.000Z, ,"['880752','880709','880708','880710','880711']", ,"['660104']", ,2.786,1946.98 +1908.0,pick item,2019-06-24 08:52:43.000Z, ,"['880786']", , , ,0.21,529.0 +1909.0,item out of stock,2019-06-24 08:54:01.000Z, ,"['880789']", , , ,0.21,529.0 +1910.0,pick item,2019-06-24 09:04:05.000Z, ,"['880764']", , , ,0.483,495.0 +1911.0,confirm order,2019-06-24 09:09:28.000Z, , ,"['990197']", , ,2.372,1828.99 +1912.0,confirm order,2019-06-24 09:15:22.000Z, , ,"['990203']", , ,1.508,1719.99 +1913.0,pick item,2019-06-24 09:15:55.000Z, ,"['880810']", , , ,0.172,699.0 +1914.0,pay order,2019-06-24 09:16:03.000Z, , ,"['990197']", , ,2.372,1828.99 +1915.0,pick item,2019-06-24 09:17:52.000Z, ,"['880767']", , , ,0.28,449.0 +1916.0,pay order,2019-06-24 09:21:49.000Z, , ,"['990195']", , ,1.766,2041.97 +1917.0,package delivered,2019-06-24 09:24:24.000Z, , , ,"['660095']", ,1.5219999999999998,2256.99 +1918.0,pay order,2019-06-24 09:26:35.000Z, , ,"['990040']", , ,0.6829999999999999,539.99 +1919.0,pick item,2019-06-24 09:39:16.000Z, ,"['880389']", , , ,1.48,199.99 +1920.0,create package,2019-06-24 09:39:16.000Z, ,"['880786','880791','880642','880509','880640','880511']", ,"['660105']", ,2.502,2032.97 +1921.0,pay order,2019-06-24 09:50:34.000Z, , ,"['990192']", , ,0.5539999999999999,1932.0 +1922.0,item out of stock,2019-06-24 10:20:17.000Z, ,"['880750']", , , ,1.37,2500.0 +1923.0,reorder item,2019-06-24 10:29:06.000Z, ,"['880796']", , , ,0.28,449.0 +1924.0,reorder item,2019-06-24 10:40:58.000Z, ,"['880673']", , , ,1.28,149.99 +1925.0,item out of stock,2019-06-24 10:45:06.000Z, ,"['880815']", , , ,0.88,89.99 +1926.0,place order,2019-06-24 10:55:35.000Z, ,"['880828','880829']","['990205']", , ,1.5419999999999998,3204.0 +1927.0,pick item,2019-06-24 11:03:47.000Z, ,"['880713']", , , ,0.483,79.99 +1928.0,pick item,2019-06-24 11:19:09.000Z, ,"['880798']", , , ,1.25,2200.0 +1929.0,package delivered,2019-06-24 11:39:01.000Z, , , ,"['660103']", ,3.085,3204.99 +1930.0,confirm order,2019-06-24 11:57:18.000Z, , ,"['990204']", , ,4.74,1519.96 +1931.0,payment reminder,2019-06-24 11:59:35.000Z, , ,"['990085']", , ,2.16,244.98 +1932.0,pick item,2019-06-24 11:59:43.000Z, ,"['880760']", , , ,1.25,2200.0 +1933.0,pay order,2019-06-24 12:18:03.000Z, , ,"['990159']", , ,3.35,923.97 +1934.0,confirm order,2019-06-24 12:25:56.000Z, , ,"['990201']", , ,5.337999999999999,2112.95 +1935.0,pick item,2019-06-24 12:37:12.000Z, ,"['880780']", , , ,0.483,79.99 +1936.0,failed delivery,2019-06-24 12:39:50.000Z, , , ,"['660098']", ,10.279000000000002,9964.94 +1937.0,confirm order,2019-06-24 12:54:16.000Z, , ,"['990191']", , ,0.188,1154.0 +1938.0,send package,2019-06-24 12:55:39.000Z, , , ,"['660104']", ,2.786,1946.98 +1939.0,pick item,2019-06-24 12:59:11.000Z, ,"['880797']", , , ,0.172,699.0 +1940.0,pay order,2019-06-24 13:08:15.000Z, , ,"['990180']", , ,1.234,2042.99 +1941.0,place order,2019-06-24 13:10:57.000Z, ,"['880831','880832','880830']","['990206']", , ,1.803,650.98 +1942.0,pick item,2019-06-24 13:18:33.000Z, ,"['880801']", , , ,0.28,89.99 +1943.0,create package,2019-06-24 13:18:33.000Z, ,"['880727','880689','880635','880724']", ,"['660106']", ,2.296,2973.99 +1944.0,pick item,2019-06-24 13:23:33.000Z, ,"['880809']", , , ,0.28,449.0 +1945.0,pick item,2019-06-24 13:33:26.000Z, ,"['880637']", , , ,1.25,2200.0 +1946.0,payment reminder,2019-06-24 13:34:40.000Z, , ,"['990082']", , ,2.423,1333.96 +1947.0,confirm order,2019-06-24 13:46:56.000Z, , ,"['990206']", , ,1.803,650.98 +1948.0,package delivered,2019-06-24 13:50:23.000Z, , , ,"['660102']", ,4.583,3662.96 +1949.0,reorder item,2019-06-24 13:51:15.000Z, ,"['880776']", , , ,1.25,2200.0 +1950.0,reorder item,2019-06-24 13:54:22.000Z, ,"['880749']", , , ,1.28,149.99 +1951.0,pick item,2019-06-24 13:54:31.000Z, ,"['880832']", , , ,0.44,476.0 +1952.0,pick item,2019-06-24 14:27:26.000Z, ,"['880735']", , , ,0.44,476.0 +1953.0,create package,2019-06-24 14:27:26.000Z, ,"['880801','880737','880702','880820']", ,"['660107']", ,2.696,3478.98 +1954.0,confirm order,2019-06-24 14:30:56.000Z, , ,"['990198']", , ,2.03,2304.99 +1955.0,place order,2019-06-24 14:41:42.000Z, ,"['880835','880837','880836','880833','880834']","['990207']", , ,2.511,2696.99 +1956.0,pick item,2019-06-24 14:42:23.000Z, ,"['880830']", , , ,0.88,89.99 +1957.0,pick item,2019-06-24 14:48:47.000Z, ,"['880823']", , , ,1.48,199.99 +1958.0,package delivered,2019-06-24 14:49:16.000Z, , , ,"['660099']", ,3.343,4436.98 +1959.0,reorder item,2019-06-24 14:49:18.000Z, ,"['880751']", , , ,1.48,199.99 +1960.0,pick item,2019-06-24 14:50:05.000Z, ,"['880768']", , , ,1.25,2200.0 +1961.0,item out of stock,2019-06-24 14:50:13.000Z, ,"['880811']", , , ,0.166,799.0 +1962.0,send package,2019-06-24 15:05:33.000Z, , , ,"['660101']", ,3.472,2692.96 +1963.0,pick item,2019-06-24 15:08:54.000Z, ,"['880812']", , , ,1.48,199.99 +1964.0,create package,2019-06-24 15:08:54.000Z, ,"['880742','880762','880765','880741','880739','880610','880832','880830','880389','880779','880705','880777','880605','880778','880743','880740','880764']", ,"['660108']", ,11.130999999999998,7995.91 +1965.0,pick item,2019-06-24 15:18:57.000Z, ,"['880720']", , , ,0.88,89.99 +1966.0,pick item,2019-06-24 15:22:53.000Z, ,"['880759']", , , ,1.37,2500.0 +1967.0,reorder item,2019-06-24 15:28:52.000Z, ,"['880734']", , , ,1.37,2500.0 +1968.0,pick item,2019-06-24 15:34:36.000Z, ,"['880818']", , , ,0.28,89.99 +1969.0,pick item,2019-06-24 15:38:52.000Z, ,"['880723']", , , ,0.78,99.99 +1970.0,pay order,2019-06-24 15:42:42.000Z, , ,"['990182']", , ,0.546,833.99 +1971.0,reorder item,2019-06-24 15:51:39.000Z, ,"['880794']", , , ,1.48,199.99 +1972.0,pick item,2019-06-24 15:59:27.000Z, ,"['880429']", , , ,1.37,2500.0 +1973.0,pick item,2019-06-24 16:03:21.000Z, ,"['880834']", , , ,0.483,495.0 +1974.0,pick item,2019-06-24 16:06:05.000Z, ,"['880837']", , , ,0.28,449.0 +1975.0,package delivered,2019-06-24 16:07:05.000Z, , , ,"['660098']", ,10.279000000000002,9964.94 +1976.0,confirm order,2019-06-24 16:12:04.000Z, , ,"['990207']", , ,2.511,2696.99 +1977.0,place order,2019-06-24 16:43:11.000Z, ,"['880839','880838']","['990208']", , ,1.422,2904.0 +1978.0,pick item,2019-06-24 17:04:37.000Z, ,"['880821']", , , ,0.44,476.0 +1979.0,reorder item,2019-06-24 18:22:27.000Z, ,"['880772']", , , ,0.188,1149.0 +1980.0,confirm order,2019-06-24 18:59:38.000Z, , ,"['990193']", , ,3.102,3143.98 +1981.0,pick item,2019-06-24 19:00:59.000Z, ,"['880718']", , , ,0.483,79.99 +1982.0,pick item,2019-06-24 19:42:39.000Z, ,"['880535']", , , ,0.495,129.0 +1983.0,place order,2019-06-24 19:49:08.000Z, ,"['880840','880842','880841']","['990209']", , ,2.2430000000000003,733.98 +1984.0,place order,2019-06-25 05:12:42.000Z, ,"['880848','880847','880846','880844','880845','880843']","['990210']", , ,4.952,6382.98 +1985.0,send package,2019-06-25 07:04:59.000Z, , , ,"['660107']", ,2.696,3478.98 +1986.0,pick item,2019-06-25 07:21:43.000Z, ,"['880803']", , , ,1.48,199.99 +1987.0,pick item,2019-06-25 07:46:21.000Z, ,"['880827']", , , ,0.44,476.0 +1988.0,place order,2019-06-25 07:57:46.000Z, ,"['880853','880851','880854','880849','880850','880852']","['990211']", , ,3.511,2811.97 +1989.0,pick item,2019-06-25 08:06:55.000Z, ,"['880754']", , , ,0.188,1149.0 +1990.0,package delivered,2019-06-25 08:11:42.000Z, , , ,"['660101']", ,3.472,2692.96 +1991.0,confirm order,2019-06-25 08:19:14.000Z, , ,"['990176']", , ,2.009,1053.96 +1992.0,pay order,2019-06-25 08:19:21.000Z, , ,"['990032']", , ,2.329,1768.98 +1993.0,pay order,2019-06-25 08:20:41.000Z, , ,"['990194']", , ,5.242999999999999,5463.97 +1994.0,pick item,2019-06-25 08:25:15.000Z, ,"['880805']", , , ,0.495,129.0 +1995.0,confirm order,2019-06-25 08:28:35.000Z, , ,"['990209']", , ,2.2430000000000003,733.98 +1996.0,pick item,2019-06-25 08:38:37.000Z, ,"['880790']", , , ,0.2,39.99 +1997.0,pay order,2019-06-25 08:44:56.000Z, , ,"['990193']", , ,3.102,3143.98 +1998.0,confirm order,2019-06-25 08:46:25.000Z, , ,"['990210']", , ,4.952,6382.98 +1999.0,item out of stock,2019-06-25 08:48:57.000Z, ,"['880806']", , , ,1.48,199.99 +2000.0,reorder item,2019-06-25 08:50:07.000Z, ,"['880811']", , , ,0.166,799.0 +2001.0,pick item,2019-06-25 09:02:09.000Z, ,"['880572']", , , ,0.38,29.99 +2002.0,reorder item,2019-06-25 09:08:56.000Z, ,"['880623']", , , ,0.28,449.0 +2003.0,reorder item,2019-06-25 09:15:18.000Z, ,"['880755']", , , ,0.483,495.0 +2004.0,package delivered,2019-06-25 09:20:02.000Z, , , ,"['660107']", ,2.696,3478.98 +2005.0,pick item,2019-06-25 09:30:01.000Z, ,"['880674']", , , ,0.21,529.0 +2006.0,create package,2019-06-25 09:30:01.000Z, ,"['880004','880395']", ,"['660109']", ,2.26,299.98 +2007.0,pick item,2019-06-25 09:55:42.000Z, ,"['880772']", , , ,0.188,1149.0 +2008.0,send package,2019-06-25 09:55:45.000Z, , , ,"['660109']", ,2.26,299.98 +2009.0,pick item,2019-06-25 09:57:29.000Z, ,"['880853']", , , ,0.188,1149.0 +2010.0,create package,2019-06-25 09:57:29.000Z, ,"['880720','880693','880723','880701','880570','880259','880651','880722','880649','880718']", ,"['660110']", ,4.285,4496.96 +2011.0,pick item,2019-06-25 09:59:08.000Z, ,"['880802']", , , ,0.166,799.0 +2012.0,pick item,2019-06-25 10:01:02.000Z, ,"['880829']", , , ,0.172,699.0 +2013.0,place order,2019-06-25 10:15:19.000Z, ,"['880858','880855','880860','880857','880856','880859']","['990212']", , ,2.935,3043.98 +2014.0,confirm order,2019-06-25 10:21:01.000Z, , ,"['990211']", , ,3.511,2811.97 +2015.0,reorder item,2019-06-25 10:29:18.000Z, ,"['880750']", , , ,1.37,2500.0 +2016.0,send package,2019-06-25 10:35:15.000Z, , , ,"['660105']", ,2.502,2032.97 +2017.0,pick item,2019-06-25 10:36:07.000Z, ,"['880738']", , , ,0.38,29.99 +2018.0,item out of stock,2019-06-25 10:36:36.000Z, ,"['880769']", , , ,0.88,89.99 +2019.0,pick item,2019-06-25 10:49:39.000Z, ,"['880793']", , , ,0.166,799.0 +2020.0,confirm order,2019-06-25 10:49:49.000Z, , ,"['990208']", , ,1.422,2904.0 +2021.0,item out of stock,2019-06-25 11:21:17.000Z, ,"['880860']", , , ,0.483,1099.0 +2022.0,pick item,2019-06-25 11:25:21.000Z, ,"['880847']", , , ,0.78,99.99 +2023.0,pick item,2019-06-25 11:38:53.000Z, ,"['880804']", , , ,0.483,495.0 +2024.0,send package,2019-06-25 11:40:56.000Z, , , ,"['660108']", ,11.130999999999998,7995.91 +2025.0,item out of stock,2019-06-25 11:49:40.000Z, ,"['880774']", , , ,0.21,529.0 +2026.0,place order,2019-06-25 11:50:25.000Z, ,"['880862','880861','880863','880864','880866','880865']","['990213']", , ,3.676,3774.97 +2027.0,failed delivery,2019-06-25 12:17:33.000Z, , , ,"['660105']", ,2.502,2032.97 +2028.0,pick item,2019-06-25 12:29:49.000Z, ,"['880792']", , , ,0.166,799.0 +2029.0,pick item,2019-06-25 12:43:38.000Z, ,"['880787']", , , ,0.2,39.99 +2030.0,send package,2019-06-25 12:45:34.000Z, , , ,"['660110']", ,4.285,4496.96 +2031.0,package delivered,2019-06-25 12:53:24.000Z, , , ,"['660110']", ,4.285,4496.96 +2032.0,pick item,2019-06-25 13:06:07.000Z, ,"['880813']", , , ,0.88,89.99 +2033.0,reorder item,2019-06-25 13:13:01.000Z, ,"['880806']", , , ,1.48,199.99 +2034.0,item out of stock,2019-06-25 13:13:33.000Z, ,"['880840']", , , ,0.28,449.0 +2035.0,pick item,2019-06-25 13:14:06.000Z, ,"['880773']", , , ,0.172,699.0 +2036.0,create package,2019-06-25 13:14:06.000Z, ,"['880535','880735','880798','880736','880560']", ,"['660111']", ,2.675,3423.99 +2037.0,pay order,2019-06-25 13:21:58.000Z, , ,"['990183']", , ,3.4730000000000003,2474.96 +2038.0,pick item,2019-06-25 13:23:50.000Z, ,"['880842']", , , ,1.48,199.99 +2039.0,confirm order,2019-06-25 13:34:40.000Z, , ,"['990212']", , ,2.935,3043.98 +2040.0,pick item,2019-06-25 13:36:23.000Z, ,"['880846']", , , ,0.28,449.0 +2041.0,pick item,2019-06-25 13:38:36.000Z, ,"['880845']", , , ,1.37,2500.0 +2042.0,pick item,2019-06-25 13:40:00.000Z, ,"['880865']", , , ,0.483,495.0 +2043.0,pick item,2019-06-25 13:43:21.000Z, ,"['880849']", , , ,0.188,1149.0 +2044.0,create package,2019-06-25 13:43:21.000Z, ,"['880760','880759','880837','880761','880275','880834']", ,"['660112']", ,5.912999999999999,7993.99 +2045.0,pick item,2019-06-25 13:54:03.000Z, ,"['880699']", , , ,0.28,89.99 +2046.0,place order,2019-06-25 14:00:38.000Z, ,"['880867']","['990214']", , ,1.25,2205.0 +2047.0,pick item,2019-06-25 14:14:22.000Z, ,"['880856']", , , ,0.44,476.0 +2048.0,pick item,2019-06-25 14:23:19.000Z, ,"['880602']", , , ,0.98,129.99 +2049.0,item out of stock,2019-06-25 14:28:16.000Z, ,"['880807']", , , ,0.78,99.99 +2050.0,send package,2019-06-25 14:30:08.000Z, , , ,"['660106']", ,2.296,2973.99 +2051.0,reorder item,2019-06-25 14:48:33.000Z, ,"['880769']", , , ,0.88,89.99 +2052.0,pick item,2019-06-25 14:52:33.000Z, ,"['880839']", , , ,1.25,2200.0 +2053.0,pick item,2019-06-25 14:54:08.000Z, ,"['880775']", , , ,0.172,699.0 +2054.0,confirm order,2019-06-25 14:56:44.000Z, , ,"['990213']", , ,3.676,3774.97 +2055.0,package delivered,2019-06-25 14:58:18.000Z, , , ,"['660106']", ,2.296,2973.99 +2056.0,pay order,2019-06-25 15:11:24.000Z, , ,"['990189']", , ,2.301,2197.99 +2057.0,send package,2019-06-25 15:12:09.000Z, , , ,"['660112']", ,5.912999999999999,7993.99 +2058.0,package delivered,2019-06-25 15:17:11.000Z, , , ,"['660112']", ,5.912999999999999,7993.99 +2059.0,pick item,2019-06-25 15:18:56.000Z, ,"['880852']", , , ,0.28,89.99 +2060.0,create package,2019-06-25 15:18:56.000Z, ,"['880781','880782','880780','880783','880446']", ,"['660113']", ,4.493,2909.96 +2061.0,place order,2019-06-25 15:21:03.000Z, ,"['880868']","['990215']", , ,0.78,104.99 +2062.0,confirm order,2019-06-25 15:30:29.000Z, , ,"['990215']", , ,0.78,104.99 +2063.0,pick item,2019-06-25 15:30:50.000Z, ,"['880784']", , , ,0.28,449.0 +2064.0,package delivered,2019-06-25 15:36:14.000Z, , , ,"['660104']", ,2.786,1946.98 +2065.0,pick item,2019-06-25 15:46:12.000Z, ,"['880704']", , , ,0.28,449.0 +2066.0,pick item,2019-06-25 16:20:44.000Z, ,"['880838']", , , ,0.172,699.0 +2067.0,pick item,2019-06-25 16:26:46.000Z, ,"['880835']", , , ,0.28,449.0 +2068.0,item out of stock,2019-06-25 16:38:52.000Z, ,"['880824']", , , ,0.28,89.99 +2069.0,pay order,2019-06-25 16:48:07.000Z, , ,"['990080']", , ,2.336,3683.99 +2070.0,failed delivery,2019-06-25 16:57:21.000Z, , , ,"['660108']", ,11.130999999999998,7995.91 +2071.0,place order,2019-06-25 17:01:54.000Z, ,"['880871','880869','880870']","['990216']", , ,2.74,2883.99 +2072.0,pick item,2019-06-25 17:34:15.000Z, ,"['880862']", , , ,0.28,89.99 +2073.0,create package,2019-06-25 17:34:15.000Z, ,"['880754','880775','880753','880745','880773']", ,"['660114']", ,1.5119999999999998,2686.98 +2074.0,item out of stock,2019-06-25 18:25:48.000Z, ,"['880831']", , , ,0.483,79.99 +2075.0,pick item,2019-06-25 18:33:10.000Z, ,"['880866']", , , ,1.37,2500.0 +2076.0,place order,2019-06-25 19:43:22.000Z, ,"['880875','880876','880877','880874','880872','880873']","['990217']", , ,2.914,3159.99 +2077.0,pick item,2019-06-25 20:20:30.000Z, ,"['880750']", , , ,1.37,2500.0 +2078.0,place order,2019-06-26 04:38:06.000Z, ,"['880880','880879','880878']","['990218']", , ,1.673,1762.99 +2079.0,pick item,2019-06-26 06:18:27.000Z, ,"['880848']", , , ,0.172,699.0 +2080.0,failed delivery,2019-06-26 06:30:25.000Z, , , ,"['660105']", ,2.502,2032.97 +2081.0,pick item,2019-06-26 06:53:29.000Z, ,"['880684']", , , ,0.483,495.0 +2082.0,pick item,2019-06-26 07:05:44.000Z, ,"['880529']", , , ,0.2,39.99 +2083.0,create package,2019-06-26 07:05:44.000Z, ,"['880766','880813','880849','880852','880770','880805','880812','880684','880810','880768','880429','880853','880767','880809']", ,"['660115']", ,7.722,10926.97 +2084.0,package delivered,2019-06-26 07:18:52.000Z, , , ,"['660109']", ,2.26,299.98 +2085.0,pick item,2019-06-26 07:23:55.000Z, ,"['880763']", , , ,0.166,799.0 +2086.0,item out of stock,2019-06-26 07:28:27.000Z, ,"['880788']", , , ,0.166,799.0 +2087.0,send package,2019-06-26 07:40:31.000Z, , , ,"['660115']", ,7.722,10926.97 +2088.0,item out of stock,2019-06-26 07:44:07.000Z, ,"['880851']", , , ,0.495,129.0 +2089.0,pick item,2019-06-26 07:47:30.000Z, ,"['880857']", , , ,0.166,799.0 +2090.0,pick item,2019-06-26 07:49:14.000Z, ,"['880870']", , , ,0.21,529.0 +2091.0,failed delivery,2019-06-26 07:58:55.000Z, , , ,"['660115']", ,7.722,10926.97 +2092.0,pick item,2019-06-26 08:03:12.000Z, ,"['880828']", , , ,1.37,2500.0 +2093.0,send package,2019-06-26 08:04:43.000Z, , , ,"['660111']", ,2.675,3423.99 +2094.0,place order,2019-06-26 08:19:43.000Z, ,"['880881','880882']","['990219']", , ,1.92,680.99 +2095.0,pay order,2019-06-26 08:30:57.000Z, , ,"['990210']", , ,4.952,6382.98 +2096.0,failed delivery,2019-06-26 08:35:57.000Z, , , ,"['660105']", ,2.502,2032.97 +2097.0,pay order,2019-06-26 08:37:15.000Z, , ,"['990201']", , ,5.337999999999999,2112.95 +2098.0,item out of stock,2019-06-26 08:45:35.000Z, ,"['880871']", , , ,1.28,149.99 +2099.0,pay order,2019-06-26 08:54:53.000Z, , ,"['990067']", , ,2.364,6236.99 +2100.0,reorder item,2019-06-26 09:19:22.000Z, ,"['880788']", , , ,0.166,799.0 +2101.0,pick item,2019-06-26 09:31:11.000Z, ,"['880796']", , , ,0.28,449.0 +2102.0,confirm order,2019-06-26 09:32:43.000Z, , ,"['990218']", , ,1.673,1762.99 +2103.0,pick item,2019-06-26 09:41:46.000Z, ,"['880825']", , , ,1.48,199.99 +2104.0,pick item,2019-06-26 09:46:28.000Z, ,"['880443']", , , ,0.483,495.0 +2105.0,pick item,2019-06-26 09:50:05.000Z, ,"['880841']", , , ,0.483,79.99 +2106.0,place order,2019-06-26 09:59:13.000Z, ,"['880886','880883','880888','880887','880889','880885','880884']","['990220']", , ,4.476,1910.97 +2107.0,pick item,2019-06-26 10:06:28.000Z, ,"['880826']", , , ,0.28,449.0 +2108.0,pick item,2019-06-26 10:11:08.000Z, ,"['880666']", , , ,0.21,529.0 +2109.0,package delivered,2019-06-26 10:22:38.000Z, , , ,"['660108']", ,11.130999999999998,7995.91 +2110.0,pick item,2019-06-26 10:45:40.000Z, ,"['880875']", , , ,1.28,149.99 +2111.0,pick item,2019-06-26 10:46:52.000Z, ,"['880822']", , , ,0.78,99.99 +2112.0,pick item,2019-06-26 10:57:25.000Z, ,"['880863']", , , ,0.483,495.0 +2113.0,reorder item,2019-06-26 10:59:02.000Z, ,"['880840']", , , ,0.28,449.0 +2114.0,reorder item,2019-06-26 11:07:35.000Z, ,"['880831']", , , ,0.483,79.99 +2115.0,reorder item,2019-06-26 11:21:32.000Z, ,"['880871']", , , ,1.28,149.99 +2116.0,pick item,2019-06-26 11:32:39.000Z, ,"['880886']", , , ,0.166,799.0 +2117.0,create package,2019-06-26 11:32:39.000Z, ,"['880443','880733']", ,"['660116']", ,0.649,1294.0 +2118.0,pick item,2019-06-26 11:35:50.000Z, ,"['880808']", , , ,0.166,799.0 +2119.0,pick item,2019-06-26 11:39:58.000Z, ,"['880881']", , , ,1.48,199.99 +2120.0,create package,2019-06-26 11:39:58.000Z, ,"['880713','880828','880829']", ,"['660117']", ,2.025,3278.99 +2121.0,pick item,2019-06-26 11:41:51.000Z, ,"['880493']", , , ,0.2,39.99 +2122.0,pick item,2019-06-26 12:00:53.000Z, ,"['880861']", , , ,0.78,99.99 +2123.0,confirm order,2019-06-26 12:05:38.000Z, , ,"['990219']", , ,1.92,680.99 +2124.0,place order,2019-06-26 12:18:13.000Z, ,"['880894','880891','880890','880892','880893']","['990221']", , ,2.057,2608.98 +2125.0,pick item,2019-06-26 12:26:31.000Z, ,"['880844']", , , ,1.37,2500.0 +2126.0,create package,2019-06-26 12:26:31.000Z, ,"['880822','880826','880818','880870','880797','880796','880827','880823','880750','880825']", ,"['660118']", ,6.772,5691.96 +2127.0,send package,2019-06-26 12:27:18.000Z, , , ,"['660118']", ,6.772,5691.96 +2128.0,package delivered,2019-06-26 12:31:38.000Z, , , ,"['660118']", ,6.772,5691.96 +2129.0,pick item,2019-06-26 12:35:37.000Z, ,"['880816']", , , ,0.78,99.99 +2130.0,payment reminder,2019-06-26 12:39:13.000Z, , ,"['990100']", , ,1.32,3547.0 +2131.0,confirm order,2019-06-26 12:39:15.000Z, , ,"['990200']", , ,3.201,1681.98 +2132.0,pay order,2019-06-26 12:52:44.000Z, , ,"['990211']", , ,3.511,2811.97 +2133.0,pick item,2019-06-26 12:56:26.000Z, ,"['880663']", , , ,0.78,99.99 +2134.0,pick item,2019-06-26 13:20:12.000Z, ,"['880855']", , , ,0.483,495.0 +2135.0,reorder item,2019-06-26 13:28:53.000Z, ,"['880851']", , , ,0.495,129.0 +2136.0,pick item,2019-06-26 13:39:24.000Z, ,"['880795']", , , ,0.44,476.0 +2137.0,item out of stock,2019-06-26 13:42:17.000Z, ,"['880836']", , , ,1.28,149.99 +2138.0,pick item,2019-06-26 13:52:22.000Z, ,"['880873']", , , ,0.21,529.0 +2139.0,place order,2019-06-26 13:56:14.000Z, ,"['880896','880897','880898','880895']","['990222']", , ,1.715,2351.99 +2140.0,pick item,2019-06-26 14:03:57.000Z, ,"['880814']", , , ,0.98,129.99 +2141.0,item out of stock,2019-06-26 14:14:27.000Z, ,"['880884']", , , ,0.495,129.0 +2142.0,pick item,2019-06-26 14:21:33.000Z, ,"['880817']", , , ,1.48,199.99 +2143.0,confirm order,2019-06-26 14:28:59.000Z, , ,"['990214']", , ,1.25,2205.0 +2144.0,confirm order,2019-06-26 14:30:56.000Z, , ,"['990221']", , ,2.057,2608.98 +2145.0,reorder item,2019-06-26 14:31:09.000Z, ,"['880789']", , , ,0.21,529.0 +2146.0,pick item,2019-06-26 14:36:55.000Z, ,"['880833']", , , ,0.188,1149.0 +2147.0,send package,2019-06-26 14:40:01.000Z, , , ,"['660113']", ,4.493,2909.96 +2148.0,failed delivery,2019-06-26 14:42:46.000Z, , , ,"['660105']", ,2.502,2032.97 +2149.0,send package,2019-06-26 14:51:09.000Z, , , ,"['660116']", ,0.649,1294.0 +2150.0,pick item,2019-06-26 15:02:20.000Z, ,"['880794']", , , ,1.48,199.99 +2151.0,pay order,2019-06-26 15:10:16.000Z, , ,"['990215']", , ,0.78,104.99 +2152.0,pick item,2019-06-26 15:17:51.000Z, ,"['880897']", , , ,0.483,1099.0 +2153.0,create package,2019-06-26 15:17:51.000Z, ,"['880790','880787','880637','880839','880838']", ,"['660119']", ,3.072,5178.98 +2154.0,pay order,2019-06-26 15:20:06.000Z, , ,"['990209']", , ,2.2430000000000003,733.98 +2155.0,pick item,2019-06-26 15:35:56.000Z, ,"['880854']", , , ,0.88,89.99 +2156.0,pick item,2019-06-26 15:37:11.000Z, ,"['880725']", , , ,0.172,699.0 +2157.0,failed delivery,2019-06-26 15:37:52.000Z, , , ,"['660115']", ,7.722,10926.97 +2158.0,pick item,2019-06-26 15:45:12.000Z, ,"['880895']", , , ,0.172,699.0 +2159.0,place order,2019-06-26 16:12:15.000Z, ,"['880899','880901','880902','880903','880900']","['990223']", , ,3.006,899.96 +2160.0,pick item,2019-06-26 16:24:09.000Z, ,"['880730']", , , ,0.172,699.0 +2161.0,pay order,2019-06-26 16:36:37.000Z, , ,"['990206']", , ,1.803,650.98 +2162.0,confirm order,2019-06-26 16:42:12.000Z, , ,"['990216']", , ,2.74,2883.99 +2163.0,send package,2019-06-26 16:42:36.000Z, , , ,"['660114']", ,1.5119999999999998,2686.98 +2164.0,reorder item,2019-06-26 16:44:12.000Z, ,"['880824']", , , ,0.28,89.99 +2165.0,package delivered,2019-06-26 16:49:28.000Z, , , ,"['660113']", ,4.493,2909.96 +2166.0,confirm order,2019-06-26 17:04:54.000Z, , ,"['990222']", , ,1.715,2351.99 +2167.0,pay order,2019-06-26 17:07:51.000Z, , ,"['990105']", , ,2.438,3962.0 +2168.0,pick item,2019-06-26 17:49:46.000Z, ,"['880889']", , , ,0.28,449.0 +2169.0,create package,2019-06-26 17:49:46.000Z, ,"['880704','880802','880772','880738','880821','880804','880803']", ,"['660120']", ,3.417,3597.98 +2170.0,place order,2019-06-26 18:16:20.000Z, ,"['880907','880906','880905','880904']","['990224']", , ,3.035,862.98 +2171.0,pick item,2019-06-26 18:32:35.000Z, ,"['880891']", , , ,0.166,799.0 +2172.0,place order,2019-06-26 21:12:15.000Z, ,"['880910','880909','880908','880911','880912']","['990225']", , ,1.203,3286.99 +2173.0,item out of stock,2019-06-27 06:37:57.000Z, ,"['880902']", , , ,0.483,79.99 +2174.0,send package,2019-06-27 06:47:03.000Z, , , ,"['660119']", ,3.072,5178.98 +2175.0,item out of stock,2019-06-27 07:04:34.000Z, ,"['880880']", , , ,0.98,129.99 +2176.0,item out of stock,2019-06-27 07:05:54.000Z, ,"['880877']", , , ,0.483,1099.0 +2177.0,place order,2019-06-27 07:06:17.000Z, ,"['880915','880913','880914']","['990226']", , ,2.151,1848.99 +2178.0,pick item,2019-06-27 07:06:56.000Z, ,"['880882']", , , ,0.44,476.0 +2179.0,pay order,2019-06-27 07:15:08.000Z, , ,"['990198']", , ,2.03,2304.99 +2180.0,failed delivery,2019-06-27 07:16:34.000Z, , , ,"['660111']", ,2.675,3423.99 +2181.0,reorder item,2019-06-27 07:18:26.000Z, ,"['880728']", , , ,0.38,29.99 +2182.0,pick item,2019-06-27 07:25:02.000Z, ,"['880878']", , , ,0.21,529.0 +2183.0,send package,2019-06-27 07:37:13.000Z, , , ,"['660120']", ,3.417,3597.98 +2184.0,pick item,2019-06-27 07:43:37.000Z, ,"['880892']", , , ,0.44,476.0 +2185.0,payment reminder,2019-06-27 07:59:13.000Z, , ,"['990101']", , ,1.815,2517.98 +2186.0,payment reminder,2019-06-27 08:00:10.000Z, , ,"['990104']", , ,3.218,3457.99 +2187.0,confirm order,2019-06-27 08:00:17.000Z, , ,"['990224']", , ,3.035,862.98 +2188.0,pick item,2019-06-27 08:09:56.000Z, ,"['880867']", , , ,1.25,2200.0 +2189.0,reorder item,2019-06-27 08:28:39.000Z, ,"['880815']", , , ,0.88,89.99 +2190.0,pick item,2019-06-27 08:31:02.000Z, ,"['880726']", , , ,0.98,129.99 +2191.0,place order,2019-06-27 08:32:21.000Z, ,"['880919','880923','880921','880920','880918','880916','880922','880917']","['990227']", , ,4.242,3030.96 +2192.0,pick item,2019-06-27 08:38:45.000Z, ,"['880887']", , , ,0.495,129.0 +2193.0,create package,2019-06-27 08:38:45.000Z, ,"['880881','880666','880882','880572','880674']", ,"['660121']", ,2.72,1763.98 +2194.0,pick item,2019-06-27 08:51:00.000Z, ,"['880655']", , , ,0.44,476.0 +2195.0,pay order,2019-06-27 08:52:22.000Z, , ,"['990203']", , ,1.508,1719.99 +2196.0,pay order,2019-06-27 09:00:51.000Z, , ,"['990199']", , ,3.389,1718.97 +2197.0,confirm order,2019-06-27 09:03:29.000Z, , ,"['990205']", , ,1.5419999999999998,3204.0 +2198.0,confirm order,2019-06-27 09:14:27.000Z, , ,"['990225']", , ,1.203,3286.99 +2199.0,failed delivery,2019-06-27 09:27:13.000Z, , , ,"['660114']", ,1.5119999999999998,2686.98 +2200.0,pay order,2019-06-27 09:28:06.000Z, , ,"['990188']", , ,3.9,4854.99 +2201.0,package delivered,2019-06-27 09:32:24.000Z, , , ,"['660111']", ,2.675,3423.99 +2202.0,item out of stock,2019-06-27 09:34:01.000Z, ,"['880899']", , , ,0.483,495.0 +2203.0,package delivered,2019-06-27 09:48:43.000Z, , , ,"['660120']", ,3.417,3597.98 +2204.0,reorder item,2019-06-27 09:51:52.000Z, ,"['880860']", , , ,0.483,1099.0 +2205.0,confirm order,2019-06-27 09:52:15.000Z, , ,"['990220']", , ,4.476,1910.97 +2206.0,reorder item,2019-06-27 09:52:48.000Z, ,"['880877']", , , ,0.483,1099.0 +2207.0,item out of stock,2019-06-27 10:01:14.000Z, ,"['880799']", , , ,0.78,99.99 +2208.0,pick item,2019-06-27 10:02:35.000Z, ,"['880607']", , , ,0.188,1149.0 +2209.0,pick item,2019-06-27 10:05:30.000Z, ,"['880916']", , , ,0.172,699.0 +2210.0,pick item,2019-06-27 10:10:15.000Z, ,"['880922']", , , ,0.172,699.0 +2211.0,pick item,2019-06-27 10:16:17.000Z, ,"['880907']", , , ,0.28,449.0 +2212.0,create package,2019-06-27 10:16:17.000Z, ,"['880886','880792','880793','880529','880887','880889','880730']", ,"['660122']", ,1.645,3713.99 +2213.0,pay order,2019-06-27 10:17:52.000Z, , ,"['990077']", , ,3.603,949.95 +2214.0,place order,2019-06-27 10:24:29.000Z, ,"['880924','880925','880926']","['990228']", , ,2.013,2733.99 +2215.0,pick item,2019-06-27 10:30:34.000Z, ,"['880919']", , , ,0.495,129.0 +2216.0,reorder item,2019-06-27 10:35:00.000Z, ,"['880774']", , , ,0.21,529.0 +2217.0,package delivered,2019-06-27 10:48:05.000Z, , , ,"['660116']", ,0.649,1294.0 +2218.0,confirm order,2019-06-27 11:05:01.000Z, , ,"['990226']", , ,2.151,1848.99 +2219.0,pick item,2019-06-27 11:06:41.000Z, ,"['880908']", , , ,0.166,799.0 +2220.0,pick item,2019-06-27 11:29:52.000Z, ,"['880904']", , , ,1.28,149.99 +2221.0,pick item,2019-06-27 12:04:35.000Z, ,"['880883']", , , ,1.48,199.99 +2222.0,place order,2019-06-27 12:08:46.000Z, ,"['880927','880928']","['990229']", , ,0.76,64.98 +2223.0,pick item,2019-06-27 12:13:47.000Z, ,"['880900']", , , ,0.28,89.99 +2224.0,pick item,2019-06-27 12:45:13.000Z, ,"['880906']", , , ,0.495,129.0 +2225.0,pick item,2019-06-27 12:46:31.000Z, ,"['880905']", , , ,0.98,129.99 +2226.0,create package,2019-06-27 12:46:31.000Z, ,"['880848','880847','880846','880844','880845','880699']", ,"['660123']", ,4.252,6337.98 +2227.0,pick item,2019-06-27 13:03:08.000Z, ,"['880549']", , , ,0.38,29.99 +2228.0,send package,2019-06-27 13:12:54.000Z, , , ,"['660117']", ,2.025,3278.99 +2229.0,package delivered,2019-06-27 13:16:12.000Z, , , ,"['660119']", ,3.072,5178.98 +2230.0,package delivered,2019-06-27 13:17:02.000Z, , , ,"['660115']", ,7.722,10926.97 +2231.0,send package,2019-06-27 13:21:25.000Z, , , ,"['660121']", ,2.72,1763.98 +2232.0,pick item,2019-06-27 13:24:29.000Z, ,"['880843']", , , ,0.98,129.99 +2233.0,place order,2019-06-27 13:37:19.000Z, ,"['880933','880932','880929','880931','880934','880930']","['990230']", , ,3.3480000000000003,1999.96 +2234.0,pick item,2019-06-27 13:43:01.000Z, ,"['880819']", , , ,0.188,1149.0 +2235.0,item out of stock,2019-06-27 13:44:39.000Z, ,"['880896']", , , ,0.78,99.99 +2236.0,pick item,2019-06-27 13:44:59.000Z, ,"['880824']", , , ,0.28,89.99 +2237.0,item out of stock,2019-06-27 13:57:49.000Z, ,"['880918']", , , ,0.483,1099.0 +2238.0,pay order,2019-06-27 14:03:31.000Z, , ,"['990101']", , ,1.815,2517.98 +2239.0,pick item,2019-06-27 14:07:12.000Z, ,"['880917']", , , ,0.28,89.99 +2240.0,package delivered,2019-06-27 14:12:57.000Z, , , ,"['660114']", ,1.5119999999999998,2686.98 +2241.0,failed delivery,2019-06-27 14:14:27.000Z, , , ,"['660117']", ,2.025,3278.99 +2242.0,confirm order,2019-06-27 14:30:38.000Z, , ,"['990217']", , ,2.914,3159.99 +2243.0,reorder item,2019-06-27 14:44:44.000Z, ,"['880884']", , , ,0.495,129.0 +2244.0,reorder item,2019-06-27 14:45:49.000Z, ,"['880880']", , , ,0.98,129.99 +2245.0,confirm order,2019-06-27 15:05:27.000Z, , ,"['990227']", , ,4.242,3030.96 +2246.0,pick item,2019-06-27 15:05:36.000Z, ,"['880931']", , , ,0.38,29.99 +2247.0,create package,2019-06-27 15:05:36.000Z, ,"['880725','880841','880857','880908','880855','880842','880726','880549','880856']", ,"['660124']", ,4.75,3707.96 +2248.0,place order,2019-06-27 15:34:26.000Z, ,"['880938','880935','880939','880937','880936','880940']","['990231']", , ,3.696,4281.98 +2249.0,pick item,2019-06-27 15:46:52.000Z, ,"['880789']", , , ,0.21,529.0 +2250.0,pay order,2019-06-27 15:56:04.000Z, , ,"['990184']", , ,3.6,1685.97 +2251.0,pick item,2019-06-27 16:03:14.000Z, ,"['880930']", , , ,1.28,149.99 +2252.0,send package,2019-06-27 16:09:24.000Z, , , ,"['660123']", ,4.252,6337.98 +2253.0,pick item,2019-06-27 16:13:57.000Z, ,"['880811']", , , ,0.166,799.0 +2254.0,reorder item,2019-06-27 16:20:49.000Z, ,"['880902']", , , ,0.483,79.99 +2255.0,package delivered,2019-06-27 16:21:14.000Z, , , ,"['660105']", ,2.502,2032.97 +2256.0,pick item,2019-06-27 16:43:54.000Z, ,"['880915']", , , ,1.48,199.99 +2257.0,pay order,2019-06-27 16:47:01.000Z, , ,"['990158']", , ,3.409,1938.97 +2258.0,item out of stock,2019-06-27 16:59:20.000Z, ,"['880868']", , , ,0.78,99.99 +2259.0,pay order,2019-06-27 17:14:25.000Z, , ,"['990141']", , ,4.633,1143.96 +2260.0,place order,2019-06-27 17:28:39.000Z, ,"['880942','880943','880941']","['990232']", , ,0.935,873.98 +2261.0,send package,2019-06-27 18:15:26.000Z, , , ,"['660124']", ,4.75,3707.96 +2262.0,confirm order,2019-06-27 18:50:02.000Z, , ,"['990228']", , ,2.013,2733.99 +2263.0,pick item,2019-06-27 19:05:25.000Z, ,"['880933']", , , ,0.28,89.99 +2264.0,item out of stock,2019-06-27 19:07:19.000Z, ,"['880942']", , , ,0.483,79.99 +2265.0,pay order,2019-06-27 19:52:21.000Z, , ,"['990163']", , ,3.031,2385.98 +2266.0,place order,2019-06-27 20:36:53.000Z, ,"['880944','880945']","['990233']", , ,0.667,833.0 +2267.0,place order,2019-06-28 07:05:21.000Z, ,"['880949','880948','880950','880946','880947']","['990234']", , ,2.8110000000000004,1553.96 +2268.0,confirm order,2019-06-28 07:21:34.000Z, , ,"['990223']", , ,3.006,899.96 +2269.0,pick item,2019-06-28 07:28:15.000Z, ,"['880913']", , , ,0.483,495.0 +2270.0,pick item,2019-06-28 07:30:51.000Z, ,"['880869']", , , ,1.25,2200.0 +2271.0,pay order,2019-06-28 07:34:47.000Z, , ,"['990027']", , ,1.263,184.98 +2272.0,pick item,2019-06-28 07:42:33.000Z, ,"['880360']", , , ,0.44,476.0 +2273.0,reorder item,2019-06-28 07:46:04.000Z, ,"['880807']", , , ,0.78,99.99 +2274.0,package delivered,2019-06-28 07:50:56.000Z, , , ,"['660117']", ,2.025,3278.99 +2275.0,package delivered,2019-06-28 07:54:57.000Z, , , ,"['660121']", ,2.72,1763.98 +2276.0,pay order,2019-06-28 08:06:49.000Z, , ,"['990227']", , ,4.242,3030.96 +2277.0,pick item,2019-06-28 08:26:46.000Z, ,"['880946']", , , ,1.48,199.99 +2278.0,create package,2019-06-28 08:26:46.000Z, ,"['880917','880866','880865','880862','880861','880919','880922','880863','880916']", ,"['660125']", ,4.515,5296.97 +2279.0,place order,2019-06-28 08:30:29.000Z, ,"['880952','880951']","['990235']", , ,0.99,633.99 +2280.0,reorder item,2019-06-28 09:03:59.000Z, ,"['880836']", , , ,1.28,149.99 +2281.0,pick item,2019-06-28 09:10:13.000Z, ,"['880929']", , , ,0.44,476.0 +2282.0,confirm order,2019-06-28 09:13:20.000Z, , ,"['990233']", , ,0.667,833.0 +2283.0,pick item,2019-06-28 09:32:41.000Z, ,"['880885']", , , ,0.78,99.99 +2284.0,item out of stock,2019-06-28 09:34:14.000Z, ,"['880940']", , , ,1.25,2200.0 +2285.0,pick item,2019-06-28 09:42:30.000Z, ,"['880623']", , , ,0.28,449.0 +2286.0,send package,2019-06-28 09:45:14.000Z, , , ,"['660125']", ,4.515,5296.97 +2287.0,pick item,2019-06-28 09:49:14.000Z, ,"['880815']", , , ,0.88,89.99 +2288.0,confirm order,2019-06-28 09:56:39.000Z, , ,"['990229']", , ,0.76,64.98 +2289.0,pick item,2019-06-28 10:03:11.000Z, ,"['880909']", , , ,0.483,495.0 +2290.0,place order,2019-06-28 10:20:45.000Z, ,"['880957','880958','880953','880955','880954','880956']","['990236']", , ,3.463,4710.99 +2291.0,pick item,2019-06-28 10:26:28.000Z, ,"['880890']", , , ,0.483,79.99 +2292.0,item out of stock,2019-06-28 10:34:59.000Z, ,"['880859']", , , ,0.483,79.99 +2293.0,pick item,2019-06-28 10:36:23.000Z, ,"['880755']", , , ,0.483,495.0 +2294.0,send package,2019-06-28 10:44:33.000Z, , , ,"['660122']", ,1.645,3713.99 +2295.0,pay order,2019-06-28 10:56:13.000Z, , ,"['990181']", , ,2.09,3070.99 +2296.0,pick item,2019-06-28 10:56:44.000Z, ,"['880949']", , , ,0.483,79.99 +2297.0,pick item,2019-06-28 11:04:08.000Z, ,"['880687']", , , ,1.37,2500.0 +2298.0,create package,2019-06-28 11:04:08.000Z, ,"['880763','880607','880875','880890','880891','880892','880873','880602']", ,"['660126']", ,3.913,4111.97 +2299.0,package delivered,2019-06-28 11:10:44.000Z, , , ,"['660124']", ,4.75,3707.96 +2300.0,reorder item,2019-06-28 11:12:34.000Z, ,"['880896']", , , ,0.78,99.99 +2301.0,reorder item,2019-06-28 11:53:10.000Z, ,"['880918']", , , ,0.483,1099.0 +2302.0,place order,2019-06-28 12:01:18.000Z, ,"['880960','880961','880959']","['990237']", , ,1.803,650.98 +2303.0,pick item,2019-06-28 12:01:20.000Z, ,"['880874']", , , ,0.166,799.0 +2304.0,confirm order,2019-06-28 12:03:38.000Z, , ,"['990231']", , ,3.696,4281.98 +2305.0,send package,2019-06-28 12:14:59.000Z, , , ,"['660126']", ,3.913,4111.97 +2306.0,package delivered,2019-06-28 12:22:29.000Z, , , ,"['660123']", ,4.252,6337.98 +2307.0,pick item,2019-06-28 12:42:36.000Z, ,"['880380']", , , ,1.25,2200.0 +2308.0,pick item,2019-06-28 12:49:00.000Z, ,"['880888']", , , ,0.78,99.99 +2309.0,pick item,2019-06-28 12:49:56.000Z, ,"['880800']", , , ,0.98,129.99 +2310.0,pick item,2019-06-28 12:50:08.000Z, ,"['880893']", , , ,0.188,1149.0 +2311.0,pick item,2019-06-28 12:52:20.000Z, ,"['880912']", , , ,0.188,1149.0 +2312.0,confirm order,2019-06-28 13:00:08.000Z, , ,"['990230']", , ,3.3480000000000003,1999.96 +2313.0,pick item,2019-06-28 13:00:57.000Z, ,"['880956']", , , ,0.28,449.0 +2314.0,confirm order,2019-06-28 13:01:56.000Z, , ,"['990232']", , ,0.935,873.98 +2315.0,item out of stock,2019-06-28 13:22:04.000Z, ,"['880898']", , , ,0.28,449.0 +2316.0,place order,2019-06-28 13:22:23.000Z, ,"['880964','880963','880966','880965','880962']","['990238']", , ,3.228,1543.96 +2317.0,pick item,2019-06-28 13:25:04.000Z, ,"['880948']", , , ,0.28,89.99 +2318.0,create package,2019-06-28 13:25:04.000Z, ,"['880784']", ,"['660127']", ,0.28,449.0 +2319.0,pick item,2019-06-28 13:28:40.000Z, ,"['880944']", , , ,0.172,699.0 +2320.0,create package,2019-06-28 13:28:40.000Z, ,"['880835','880833']", ,"['660128']", ,0.468,1598.0 +2321.0,item out of stock,2019-06-28 13:36:51.000Z, ,"['880879']", , , ,0.483,1099.0 +2322.0,pick item,2019-06-28 13:47:05.000Z, ,"['880864']", , , ,0.28,89.99 +2323.0,send package,2019-06-28 13:52:02.000Z, , , ,"['660128']", ,0.468,1598.0 +2324.0,pick item,2019-06-28 13:55:45.000Z, ,"['880937']", , , ,0.21,529.0 +2325.0,create package,2019-06-28 13:55:45.000Z, ,"['880808','880811','880897','880854','880816','880687','880895','880815','880814']", ,"['660129']", ,5.877000000000002,6305.96 +2326.0,confirm order,2019-06-28 14:19:04.000Z, , ,"['990237']", , ,1.803,650.98 +2327.0,reorder item,2019-06-28 14:25:36.000Z, ,"['880899']", , , ,0.483,495.0 +2328.0,item out of stock,2019-06-28 14:25:49.000Z, ,"['880920']", , , ,0.98,129.99 +2329.0,pay order,2019-06-28 14:27:09.000Z, , ,"['990219']", , ,1.92,680.99 +2330.0,send package,2019-06-28 14:38:31.000Z, , , ,"['660127']", ,0.28,449.0 +2331.0,package delivered,2019-06-28 14:49:30.000Z, , , ,"['660126']", ,3.913,4111.97 +2332.0,reorder item,2019-06-28 14:49:45.000Z, ,"['880799']", , , ,0.78,99.99 +2333.0,pick item,2019-06-28 14:52:23.000Z, ,"['880951']", , , ,0.21,529.0 +2334.0,pick item,2019-06-28 15:03:08.000Z, ,"['880965']", , , ,0.98,129.99 +2335.0,pick item,2019-06-28 15:03:55.000Z, ,"['880850']", , , ,1.48,199.99 +2336.0,place order,2019-06-28 15:04:34.000Z, ,"['880968','880967','880969']","['990239']", , ,0.848,1632.99 +2337.0,pick item,2019-06-28 15:06:55.000Z, ,"['880957']", , , ,0.98,129.99 +2338.0,pick item,2019-06-28 15:27:37.000Z, ,"['880953']", , , ,0.172,699.0 +2339.0,pay order,2019-06-28 15:27:49.000Z, , ,"['990232']", , ,0.935,873.98 +2340.0,item out of stock,2019-06-28 15:37:22.000Z, ,"['880876']", , , ,0.28,449.0 +2341.0,reorder item,2019-06-28 15:45:11.000Z, ,"['880879']", , , ,0.483,1099.0 +2342.0,pick item,2019-06-28 15:45:57.000Z, ,"['880053']", , , ,1.48,199.99 +2343.0,failed delivery,2019-06-28 15:46:45.000Z, , , ,"['660128']", ,0.468,1598.0 +2344.0,pick item,2019-06-28 15:52:38.000Z, ,"['880955']", , , ,0.166,799.0 +2345.0,pick item,2019-06-28 15:54:12.000Z, ,"['880960']", , , ,0.88,89.99 +2346.0,place order,2019-06-28 16:28:55.000Z, ,"['880972','880971','880970']","['990240']", , ,0.762,1262.99 +2347.0,pick item,2019-06-28 16:29:08.000Z, ,"['880923']", , , ,1.28,149.99 +2348.0,create package,2019-06-28 16:29:08.000Z, ,"['880493','880900']", ,"['660130']", ,0.48,129.98 +2349.0,item out of stock,2019-06-28 16:50:31.000Z, ,"['880959']", , , ,0.483,79.99 +2350.0,package delivered,2019-06-28 17:52:31.000Z, , , ,"['660122']", ,1.645,3713.99 +2351.0,package delivered,2019-06-28 18:03:38.000Z, , , ,"['660125']", ,4.515,5296.97 +2352.0,pick item,2019-06-28 18:32:17.000Z, ,"['880901']", , , ,0.78,99.99 +2353.0,reorder item,2019-06-28 18:47:52.000Z, ,"['880859']", , , ,0.483,79.99 +2354.0,place order,2019-06-28 19:06:20.000Z, ,"['880973','880974']","['990241']", , ,1.56,244.98 +2355.0,item out of stock,2019-06-28 20:00:07.000Z, ,"['880972']", , , ,0.21,529.0 +2356.0,create package,2019-06-28 23:00:00.000Z, ,"['880663']", ,"['660131']", ,0.78,99.99 +2357.0,place order,2019-06-29 08:37:54.000Z, ,"['880976','880977','880975']","['990242']", , ,2.543,749.98 +2358.0,payment reminder,2019-06-30 08:34:23.000Z, , ,"['990005']", , ,0.923,1580.0 +2359.0,place order,2019-06-30 09:09:42.000Z, ,"['880980','880982','880979','880981','880978']","['990243']", , ,1.5759999999999998,2950.99 +2360.0,payment reminder,2019-06-30 12:05:01.000Z, , ,"['990123']", , ,3.01,2654.97 +2361.0,place order,2019-07-01 01:31:18.000Z, ,"['880987','880988','880985','880986','880983','880984']","['990244']", , ,4.256,3423.96 +2362.0,pick item,2019-07-01 06:27:08.000Z, ,"['880928']", , , ,0.38,29.99 +2363.0,pick item,2019-07-01 06:42:37.000Z, ,"['880936']", , , ,0.21,529.0 +2364.0,create package,2019-07-01 06:42:37.000Z, ,"['880949','880795','880794','880869','880824','880817','880948','880946']", ,"['660132']", ,7.172999999999999,3535.94 +2365.0,confirm order,2019-07-01 07:37:00.000Z, , ,"['990244']", , ,4.256,3423.96 +2366.0,pick item,2019-07-01 07:53:39.000Z, ,"['880938']", , , ,0.166,799.0 +2367.0,place order,2019-07-01 07:54:13.000Z, ,"['880989']","['990245']", , ,0.483,500.0 +2368.0,pay order,2019-07-01 07:54:35.000Z, , ,"['990205']", , ,1.5419999999999998,3204.0 +2369.0,confirm order,2019-07-01 08:09:34.000Z, , ,"['990243']", , ,1.5759999999999998,2950.99 +2370.0,pick item,2019-07-01 08:21:14.000Z, ,"['880896']", , , ,0.78,99.99 +2371.0,pick item,2019-07-01 08:39:41.000Z, ,"['880939']", , , ,0.98,129.99 +2372.0,failed delivery,2019-07-01 08:41:03.000Z, , , ,"['660127']", ,0.28,449.0 +2373.0,send package,2019-07-01 08:47:02.000Z, , , ,"['660129']", ,5.877000000000002,6305.96 +2374.0,pick item,2019-07-01 09:01:43.000Z, ,"['880914']", , , ,0.188,1149.0 +2375.0,pick item,2019-07-01 09:04:47.000Z, ,"['880935']", , , ,0.88,89.99 +2376.0,pick item,2019-07-01 09:10:15.000Z, ,"['880836']", , , ,1.28,149.99 +2377.0,pick item,2019-07-01 09:16:06.000Z, ,"['880934']", , , ,0.188,1149.0 +2378.0,reorder item,2019-07-01 09:28:37.000Z, ,"['880972']", , , ,0.21,529.0 +2379.0,pick item,2019-07-01 09:35:10.000Z, ,"['880971']", , , ,0.38,29.99 +2380.0,create package,2019-07-01 09:35:10.000Z, ,"['880907','880906','880905','880878','880904','880867']", ,"['660133']", ,4.495,3586.98 +2381.0,pay order,2019-07-01 09:46:17.000Z, , ,"['990150']", , ,1.92,680.99 +2382.0,confirm order,2019-07-01 09:49:19.000Z, , ,"['990236']", , ,3.463,4710.99 +2383.0,place order,2019-07-01 10:08:14.000Z, ,"['880990','880991','880994','880995','880992','880993']","['990246']", , ,1.803,1789.96 +2384.0,reorder item,2019-07-01 10:40:10.000Z, ,"['880920']", , , ,0.98,129.99 +2385.0,confirm order,2019-07-01 11:20:15.000Z, , ,"['990246']", , ,1.803,1789.96 +2386.0,place order,2019-07-01 11:36:15.000Z, ,"['880996','880997']","['990247']", , ,0.72,930.0 +2387.0,confirm order,2019-07-01 11:41:29.000Z, , ,"['990235']", , ,0.99,633.99 +2388.0,pick item,2019-07-01 12:19:08.000Z, ,"['880981']", , , ,0.483,1099.0 +2389.0,confirm order,2019-07-01 12:27:21.000Z, , ,"['990239']", , ,0.848,1632.99 +2390.0,pick item,2019-07-01 12:41:47.000Z, ,"['880894']", , , ,0.78,99.99 +2391.0,pick item,2019-07-01 12:42:35.000Z, ,"['880785']", , , ,1.25,2200.0 +2392.0,pick item,2019-07-01 12:51:23.000Z, ,"['880877']", , , ,0.483,1099.0 +2393.0,pick item,2019-07-01 12:54:30.000Z, ,"['880986']", , , ,1.48,199.99 +2394.0,confirm order,2019-07-01 12:55:56.000Z, , ,"['990247']", , ,0.72,930.0 +2395.0,send package,2019-07-01 12:57:27.000Z, , , ,"['660130']", ,0.48,129.98 +2396.0,pick item,2019-07-01 12:59:43.000Z, ,"['880788']", , , ,0.166,799.0 +2397.0,create package,2019-07-01 12:59:43.000Z, ,"['880655','880053','880800','880971','880819']", ,"['660134']", ,3.468,1984.97 +2398.0,pick item,2019-07-01 13:13:06.000Z, ,"['880734']", , , ,1.37,2500.0 +2399.0,reorder item,2019-07-01 13:18:46.000Z, ,"['880942']", , , ,0.483,79.99 +2400.0,pick item,2019-07-01 13:21:59.000Z, ,"['880872']", , , ,0.495,129.0 +2401.0,place order,2019-07-01 13:32:17.000Z, ,"['880998','881001','881000','880999']","['990248']", , ,3.523,899.97 +2402.0,item out of stock,2019-07-01 13:57:02.000Z, ,"['880968']", , , ,0.188,1149.0 +2403.0,pick item,2019-07-01 14:13:36.000Z, ,"['880943']", , , ,0.172,699.0 +2404.0,failed delivery,2019-07-01 14:14:41.000Z, , , ,"['660127']", ,0.28,449.0 +2405.0,send package,2019-07-01 14:17:24.000Z, , , ,"['660132']", ,7.172999999999999,3535.94 +2406.0,confirm order,2019-07-01 14:27:24.000Z, , ,"['990241']", , ,1.56,244.98 +2407.0,confirm order,2019-07-01 15:24:01.000Z, , ,"['990238']", , ,3.228,1543.96 +2408.0,place order,2019-07-01 15:24:22.000Z, ,"['881005','881004','881009','881008','881002','881006','881003','881010','881007']","['990249']", , ,5.674,4711.97 +2409.0,pick item,2019-07-01 16:06:17.000Z, ,"['880987']", , , ,0.166,799.0 +2410.0,pay order,2019-07-01 16:35:19.000Z, , ,"['990221']", , ,2.057,2608.98 +2411.0,pick item,2019-07-01 16:56:11.000Z, ,"['880910']", , , ,0.166,799.0 +2412.0,create package,2019-07-01 16:56:11.000Z, ,"['880883','880888','880885']", ,"['660135']", ,3.04,399.97 +2413.0,reorder item,2019-07-01 16:59:52.000Z, ,"['880876']", , , ,0.28,449.0 +2414.0,place order,2019-07-01 17:08:31.000Z, ,"['881012','881011','881013']","['990250']", , ,2.01,3020.99 +2415.0,item out of stock,2019-07-01 18:17:50.000Z, ,"['880983']", , , ,0.88,89.99 +2416.0,pick item,2019-07-01 18:24:57.000Z, ,"['880941']", , , ,0.28,89.99 +2417.0,place order,2019-07-01 19:56:37.000Z, ,"['881016','881015','881014']","['990251']", , ,1.123,600.98 +2418.0,pick item,2019-07-01 20:28:22.000Z, ,"['880945']", , , ,0.495,129.0 +2419.0,place order,2019-07-02 05:57:36.000Z, ,"['881017','881019','881020','881018','881021']","['990252']", , ,4.79,2674.96 +2420.0,item out of stock,2019-07-02 06:36:00.000Z, ,"['880985']", , , ,1.25,2200.0 +2421.0,send package,2019-07-02 07:08:00.000Z, , , ,"['660131']", ,0.78,99.99 +2422.0,pick item,2019-07-02 07:14:29.000Z, ,"['880568']", , , ,0.172,699.0 +2423.0,create package,2019-07-02 07:14:29.000Z, ,"['880944','880568','880843','880945']", ,"['660136']", ,1.819,1656.99 +2424.0,send package,2019-07-02 07:22:35.000Z, , , ,"['660134']", ,3.468,1984.97 +2425.0,pick item,2019-07-02 07:34:24.000Z, ,"['880954']", , , ,0.495,129.0 +2426.0,pick item,2019-07-02 07:53:12.000Z, ,"['880976']", , , ,0.483,495.0 +2427.0,pick item,2019-07-02 08:02:03.000Z, ,"['880982']", , , ,0.495,129.0 +2428.0,item out of stock,2019-07-02 08:04:23.000Z, ,"['880950']", , , ,0.188,1149.0 +2429.0,pay order,2019-07-02 08:07:15.000Z, , ,"['990167']", , ,8.257,7155.95 +2430.0,pick item,2019-07-02 08:10:10.000Z, ,"['880932']", , , ,0.78,99.99 +2431.0,create package,2019-07-02 08:10:10.000Z, ,"['880934','880929','880965','880930','880360','880933','880960','880932','880931']", ,"['660137']", ,5.648,2690.94 +2432.0,pick item,2019-07-02 08:14:17.000Z, ,"['881001']", , , ,0.78,99.99 +2433.0,pick item,2019-07-02 08:23:06.000Z, ,"['880961']", , , ,0.44,476.0 +2434.0,failed delivery,2019-07-02 08:23:44.000Z, , , ,"['660128']", ,0.468,1598.0 +2435.0,place order,2019-07-02 08:47:09.000Z, ,"['881023','881022']","['990253']", , ,0.344,1403.0 +2436.0,send package,2019-07-02 08:53:23.000Z, , , ,"['660136']", ,1.819,1656.99 +2437.0,pick item,2019-07-02 08:53:39.000Z, ,"['880990']", , , ,0.2,39.99 +2438.0,pick item,2019-07-02 08:55:43.000Z, ,"['880851']", , , ,0.495,129.0 +2439.0,pick item,2019-07-02 09:01:22.000Z, ,"['880984']", , , ,0.28,89.99 +2440.0,package delivered,2019-07-02 09:02:34.000Z, , , ,"['660130']", ,0.48,129.98 +2441.0,pick item,2019-07-02 09:03:19.000Z, ,"['880975']", , , ,0.78,99.99 +2442.0,send package,2019-07-02 09:08:22.000Z, , , ,"['660133']", ,4.495,3586.98 +2443.0,confirm order,2019-07-02 09:18:01.000Z, , ,"['990249']", , ,5.674,4711.97 +2444.0,item out of stock,2019-07-02 09:18:22.000Z, ,"['880977']", , , ,1.28,149.99 +2445.0,confirm order,2019-07-02 09:32:45.000Z, , ,"['990252']", , ,4.79,2674.96 +2446.0,pick item,2019-07-02 09:46:49.000Z, ,"['880926']", , , ,0.483,79.99 +2447.0,pay order,2019-07-02 09:51:47.000Z, , ,"['990230']", , ,3.3480000000000003,1999.96 +2448.0,item out of stock,2019-07-02 09:52:27.000Z, ,"['881015']", , , ,0.2,39.99 +2449.0,pick item,2019-07-02 10:28:16.000Z, ,"['880858']", , , ,0.88,89.99 +2450.0,place order,2019-07-02 10:54:05.000Z, ,"['881025','881024']","['990254']", , ,1.475,263.99 +2451.0,confirm order,2019-07-02 11:02:08.000Z, , ,"['990253']", , ,0.344,1403.0 +2452.0,pick item,2019-07-02 11:32:08.000Z, ,"['881006']", , , ,1.25,2200.0 +2453.0,create package,2019-07-02 11:32:08.000Z, ,"['880789','880976','880788','880623','880975']", ,"['660138']", ,1.919,2371.99 +2454.0,payment reminder,2019-07-02 11:45:01.000Z, , ,"['990136']", , ,1.927,1052.98 +2455.0,pay order,2019-07-02 11:47:07.000Z, , ,"['990239']", , ,0.848,1632.99 +2456.0,failed delivery,2019-07-02 11:51:24.000Z, , , ,"['660127']", ,0.28,449.0 +2457.0,pick item,2019-07-02 11:53:13.000Z, ,"['880972']", , , ,0.21,529.0 +2458.0,item out of stock,2019-07-02 12:01:39.000Z, ,"['881003']", , , ,0.483,495.0 +2459.0,pay order,2019-07-02 12:11:16.000Z, , ,"['990185']", , ,3.13,3153.99 +2460.0,confirm order,2019-07-02 12:19:59.000Z, , ,"['990242']", , ,2.543,749.98 +2461.0,pick item,2019-07-02 12:42:45.000Z, ,"['881009']", , , ,0.483,79.99 +2462.0,package delivered,2019-07-02 12:52:22.000Z, , , ,"['660129']", ,5.877000000000002,6305.96 +2463.0,item out of stock,2019-07-02 12:53:08.000Z, ,"['880958']", , , ,1.37,2500.0 +2464.0,confirm order,2019-07-02 13:07:55.000Z, , ,"['990250']", , ,2.01,3020.99 +2465.0,place order,2019-07-02 13:07:58.000Z, ,"['881028','881026','881029','881027']","['990255']", , ,3.09,2893.98 +2466.0,pick item,2019-07-02 13:16:23.000Z, ,"['880899']", , , ,0.483,495.0 +2467.0,pick item,2019-07-02 13:23:54.000Z, ,"['881019']", , , ,0.2,39.99 +2468.0,pick item,2019-07-02 13:36:01.000Z, ,"['881020']", , , ,1.48,199.99 +2469.0,create package,2019-07-02 13:36:01.000Z, ,"['880913','880935','880936','880954','880915','881020','880955','880939','880956','880755','880953','880914','880938','880957','881019','880937']", ,"['660139']", ,8.853,6861.94 +2470.0,pay order,2019-07-02 13:40:36.000Z, , ,"['990242']", , ,2.543,749.98 +2471.0,package delivered,2019-07-02 13:53:08.000Z, , , ,"['660136']", ,1.819,1656.99 +2472.0,pick item,2019-07-02 13:53:40.000Z, ,"['881011']", , , ,0.44,476.0 +2473.0,item out of stock,2019-07-02 14:00:46.000Z, ,"['880979']", , , ,0.21,529.0 +2474.0,confirm order,2019-07-02 14:05:28.000Z, , ,"['990240']", , ,0.762,1262.99 +2475.0,pick item,2019-07-02 14:08:40.000Z, ,"['880925']", , , ,1.25,2200.0 +2476.0,pick item,2019-07-02 14:09:29.000Z, ,"['880776']", , , ,1.25,2200.0 +2477.0,pick item,2019-07-02 14:17:36.000Z, ,"['880751']", , , ,1.48,199.99 +2478.0,package delivered,2019-07-02 14:26:07.000Z, , , ,"['660132']", ,7.172999999999999,3535.94 +2479.0,pick item,2019-07-02 14:28:46.000Z, ,"['880920']", , , ,0.98,129.99 +2480.0,place order,2019-07-02 14:35:43.000Z, ,"['881031','881030','881032']","['990256']", , ,1.929,1448.99 +2481.0,pay order,2019-07-02 14:51:54.000Z, , ,"['990244']", , ,4.256,3423.96 +2482.0,reorder item,2019-07-02 14:53:54.000Z, ,"['880958']", , , ,1.37,2500.0 +2483.0,item out of stock,2019-07-02 15:07:30.000Z, ,"['881026']", , , ,1.28,149.99 +2484.0,reorder item,2019-07-02 15:15:27.000Z, ,"['880985']", , , ,1.25,2200.0 +2485.0,confirm order,2019-07-02 15:30:27.000Z, , ,"['990248']", , ,3.523,899.97 +2486.0,send package,2019-07-02 15:46:55.000Z, , , ,"['660137']", ,5.648,2690.94 +2487.0,pick item,2019-07-02 15:54:56.000Z, ,"['880992']", , , ,0.44,476.0 +2488.0,reorder item,2019-07-02 15:55:33.000Z, ,"['880983']", , , ,0.88,89.99 +2489.0,pay order,2019-07-02 15:56:18.000Z, , ,"['990154']", , ,1.703,1679.99 +2490.0,place order,2019-07-02 16:31:14.000Z, ,"['881035','881034','881033']","['990257']", , ,1.86,3123.99 +2491.0,reorder item,2019-07-02 16:40:42.000Z, ,"['880968']", , , ,0.188,1149.0 +2492.0,reorder item,2019-07-02 16:42:12.000Z, ,"['880898']", , , ,0.28,449.0 +2493.0,pick item,2019-07-02 16:56:05.000Z, ,"['880526']", , , ,0.38,29.99 +2494.0,confirm order,2019-07-02 17:05:51.000Z, , ,"['990245']", , ,0.483,500.0 +2495.0,send package,2019-07-02 17:16:56.000Z, , , ,"['660139']", ,8.853,6861.94 +2496.0,pick item,2019-07-02 17:53:24.000Z, ,"['881022']", , , ,0.172,699.0 +2497.0,failed delivery,2019-07-02 17:57:22.000Z, , , ,"['660133']", ,4.495,3586.98 +2498.0,pick item,2019-07-02 18:10:21.000Z, ,"['880980']", , , ,0.188,1149.0 +2499.0,place order,2019-07-02 19:13:17.000Z, ,"['881042','881039','881040','881041','881038','881037','881036']","['990258']", , ,5.2360000000000015,4667.97 +2500.0,place order,2019-07-03 01:37:36.000Z, ,"['881043','881044']","['990259']", , ,0.775,223.99 +2501.0,item out of stock,2019-07-03 06:19:56.000Z, ,"['880927']", , , ,0.38,29.99 +2502.0,pick item,2019-07-03 06:41:03.000Z, ,"['881043']", , , ,0.495,129.0 +2503.0,pick item,2019-07-03 06:41:18.000Z, ,"['881031']", , , ,0.483,495.0 +2504.0,send package,2019-07-03 06:58:26.000Z, , , ,"['660135']", ,3.04,399.97 +2505.0,pick item,2019-07-03 07:22:06.000Z, ,"['881013']", , , ,1.37,2500.0 +2506.0,pick item,2019-07-03 07:29:12.000Z, ,"['881004']", , , ,0.78,99.99 +2507.0,item out of stock,2019-07-03 07:40:30.000Z, ,"['880970']", , , ,0.172,699.0 +2508.0,reorder item,2019-07-03 07:52:04.000Z, ,"['881003']", , , ,0.483,495.0 +2509.0,pick item,2019-07-03 07:56:57.000Z, ,"['880997']", , , ,0.44,476.0 +2510.0,place order,2019-07-03 08:01:09.000Z, ,"['881045','881049','881047','881048','881046','881050']","['990260']", , ,4.621,4209.97 +2511.0,failed delivery,2019-07-03 08:08:47.000Z, , , ,"['660128']", ,0.468,1598.0 +2512.0,pick item,2019-07-03 08:33:24.000Z, ,"['880903']", , , ,0.98,129.99 +2513.0,pick item,2019-07-03 08:35:57.000Z, ,"['881032']", , , ,1.28,149.99 +2514.0,create package,2019-07-03 08:35:57.000Z, ,"['880910','880858','880909','880912']", ,"['660140']", ,1.717,2532.99 +2515.0,reorder item,2019-07-03 08:39:34.000Z, ,"['880940']", , , ,1.25,2200.0 +2516.0,pick item,2019-07-03 08:43:59.000Z, ,"['880952']", , , ,0.78,99.99 +2517.0,item out of stock,2019-07-03 08:51:23.000Z, ,"['880924']", , , ,0.28,449.0 +2518.0,package delivered,2019-07-03 08:58:48.000Z, , , ,"['660135']", ,3.04,399.97 +2519.0,payment reminder,2019-07-03 09:08:10.000Z, , ,"['990138']", , ,3.153,3909.99 +2520.0,pick item,2019-07-03 09:10:53.000Z, ,"['881024']", , , ,0.495,129.0 +2521.0,place order,2019-07-03 09:22:05.000Z, ,"['881059','881057','881061','881053','881058','881055','881054','881052','881051','881060','881056']","['990261']", , ,10.042,8963.93 +2522.0,pick item,2019-07-03 09:50:03.000Z, ,"['881041']", , , ,0.483,1099.0 +2523.0,payment reminder,2019-07-03 09:52:59.000Z, , ,"['990142']", , ,2.928,1563.96 +2524.0,package delivered,2019-07-03 09:59:21.000Z, , , ,"['660127']", ,0.28,449.0 +2525.0,item out of stock,2019-07-03 10:01:47.000Z, ,"['881045']", , , ,0.78,99.99 +2526.0,item out of stock,2019-07-03 10:04:29.000Z, ,"['880974']", , , ,1.28,149.99 +2527.0,pick item,2019-07-03 10:11:30.000Z, ,"['881048']", , , ,0.44,476.0 +2528.0,create package,2019-07-03 10:11:30.000Z, ,"['880984','881004','880986','880893','881009','881006','880874','880872','880928','880894','880877','880987','880943','880776','880941']", ,"['660141']", ,8.633,9763.93 +2529.0,confirm order,2019-07-03 10:12:44.000Z, , ,"['990234']", , ,2.8110000000000004,1553.96 +2530.0,package delivered,2019-07-03 10:18:38.000Z, , , ,"['660133']", ,4.495,3586.98 +2531.0,confirm order,2019-07-03 10:25:58.000Z, , ,"['990260']", , ,4.621,4209.97 +2532.0,item out of stock,2019-07-03 10:27:01.000Z, ,"['880962']", , , ,0.98,129.99 +2533.0,confirm order,2019-07-03 10:55:14.000Z, , ,"['990251']", , ,1.123,600.98 +2534.0,place order,2019-07-03 11:03:57.000Z, ,"['881064','881062','881063']","['990262']", , ,3.04,334.97 +2535.0,confirm order,2019-07-03 11:14:01.000Z, , ,"['990255']", , ,3.09,2893.98 +2536.0,pick item,2019-07-03 11:17:36.000Z, ,"['881008']", , , ,0.483,495.0 +2537.0,pick item,2019-07-03 11:17:48.000Z, ,"['880963']", , , ,0.88,89.99 +2538.0,pick item,2019-07-03 11:17:58.000Z, ,"['881058']", , , ,1.37,2500.0 +2539.0,confirm order,2019-07-03 11:24:30.000Z, , ,"['990257']", , ,1.86,3123.99 +2540.0,reorder item,2019-07-03 11:29:26.000Z, ,"['880962']", , , ,0.98,129.99 +2541.0,failed delivery,2019-07-03 11:29:55.000Z, , , ,"['660137']", ,5.648,2690.94 +2542.0,pay order,2019-07-03 11:42:08.000Z, , ,"['990246']", , ,1.803,1789.96 +2543.0,send package,2019-07-03 12:23:46.000Z, , , ,"['660141']", ,8.633,9763.93 +2544.0,place order,2019-07-03 12:27:42.000Z, ,"['881065','881067','881066']","['990263']", , ,1.929,1448.99 +2545.0,pick item,2019-07-03 12:34:05.000Z, ,"['881052']", , , ,0.98,129.99 +2546.0,failed delivery,2019-07-03 12:43:21.000Z, , , ,"['660137']", ,5.648,2690.94 +2547.0,send package,2019-07-03 12:52:45.000Z, , , ,"['660140']", ,1.717,2532.99 +2548.0,package delivered,2019-07-03 12:57:36.000Z, , , ,"['660128']", ,0.468,1598.0 +2549.0,pick item,2019-07-03 13:02:40.000Z, ,"['881037']", , , ,0.483,495.0 +2550.0,pick item,2019-07-03 13:05:57.000Z, ,"['880879']", , , ,0.483,1099.0 +2551.0,failed delivery,2019-07-03 13:12:00.000Z, , , ,"['660131']", ,0.78,99.99 +2552.0,pick item,2019-07-03 13:20:32.000Z, ,"['880749']", , , ,1.28,149.99 +2553.0,pick item,2019-07-03 13:26:34.000Z, ,"['881005']", , , ,0.21,529.0 +2554.0,pick item,2019-07-03 13:32:08.000Z, ,"['881053']", , , ,1.37,2500.0 +2555.0,package delivered,2019-07-03 13:46:09.000Z, , , ,"['660141']", ,8.633,9763.93 +2556.0,confirm order,2019-07-03 14:13:29.000Z, , ,"['990263']", , ,1.929,1448.99 +2557.0,place order,2019-07-03 14:15:11.000Z, ,"['881070','881068','881069']","['990264']", , ,2.34,294.97 +2558.0,package delivered,2019-07-03 14:17:00.000Z, , , ,"['660137']", ,5.648,2690.94 +2559.0,item out of stock,2019-07-03 14:19:02.000Z, ,"['881025']", , , ,0.98,129.99 +2560.0,pick item,2019-07-03 14:22:49.000Z, ,"['881035']", , , ,0.21,529.0 +2561.0,pay order,2019-07-03 14:34:48.000Z, , ,"['990248']", , ,3.523,899.97 +2562.0,pick item,2019-07-03 14:36:30.000Z, ,"['881062']", , , ,1.28,149.99 +2563.0,package delivered,2019-07-03 14:37:19.000Z, , , ,"['660134']", ,3.468,1984.97 +2564.0,pick item,2019-07-03 14:41:11.000Z, ,"['880911']", , , ,0.2,39.99 +2565.0,pick item,2019-07-03 14:44:42.000Z, ,"['880940']", , , ,1.25,2200.0 +2566.0,pay order,2019-07-03 14:46:00.000Z, , ,"['990207']", , ,2.511,2696.99 +2567.0,pick item,2019-07-03 14:56:12.000Z, ,"['881033']", , , ,1.37,2500.0 +2568.0,pick item,2019-07-03 14:58:15.000Z, ,"['880673']", , , ,1.28,149.99 +2569.0,create package,2019-07-03 14:58:15.000Z, ,"['881041','881037','880380']", ,"['660142']", ,2.216,3794.0 +2570.0,pay order,2019-07-03 15:02:41.000Z, , ,"['990234']", , ,2.8110000000000004,1553.96 +2571.0,pay order,2019-07-03 15:07:23.000Z, , ,"['990005']", , ,0.923,1580.0 +2572.0,package delivered,2019-07-03 15:10:09.000Z, , , ,"['660140']", ,1.717,2532.99 +2573.0,payment reminder,2019-07-03 15:21:57.000Z, , ,"['990034']", , ,3.011,4052.98 +2574.0,pick item,2019-07-03 15:28:16.000Z, ,"['880989']", , , ,0.483,495.0 +2575.0,pick item,2019-07-03 15:32:35.000Z, ,"['880973']", , , ,0.28,89.99 +2576.0,pick item,2019-07-03 15:43:29.000Z, ,"['881057']", , , ,1.28,149.99 +2577.0,create package,2019-07-03 15:43:29.000Z, ,"['881031','880923','880920','880864','881032']", ,"['660143']", ,4.303,1014.96 +2578.0,item out of stock,2019-07-03 15:49:01.000Z, ,"['881028']", , , ,0.28,89.99 +2579.0,place order,2019-07-03 15:50:10.000Z, ,"['881071']","['990265']", , ,0.28,94.99 +2580.0,pick item,2019-07-03 15:57:51.000Z, ,"['880996']", , , ,0.28,449.0 +2581.0,pick item,2019-07-03 16:02:06.000Z, ,"['880966']", , , ,0.188,1149.0 +2582.0,item out of stock,2019-07-03 16:24:54.000Z, ,"['881070']", , , ,0.98,129.99 +2583.0,send package,2019-07-03 16:25:24.000Z, , , ,"['660138']", ,1.919,2371.99 +2584.0,pick item,2019-07-03 16:39:25.000Z, ,"['881049']", , , ,0.483,79.99 +2585.0,place order,2019-07-03 18:10:04.000Z, ,"['881074','881073','881072']","['990266']", , ,2.245,2663.99 +2586.0,pick item,2019-07-03 18:57:28.000Z, ,"['880978']", , , ,0.2,39.99 +2587.0,place order,2019-07-03 20:59:43.000Z, ,"['881077','881078','881075','881076']","['990267']", , ,1.29,1525.99 +2588.0,create package,2019-07-03 23:00:00.000Z, ,"['880952','881057','880982','881058','881053','880836','880981','881052','880980','880951','880978']", ,"['660144']", ,8.636000000000001,8475.95 +2589.0,pick item,2019-07-04 06:16:32.000Z, ,"['880947']", , , ,0.38,29.99 +2590.0,item out of stock,2019-07-04 06:17:31.000Z, ,"['881036']", , , ,0.28,449.0 +2591.0,package delivered,2019-07-04 06:30:58.000Z, , , ,"['660138']", ,1.919,2371.99 +2592.0,pick item,2019-07-04 07:14:10.000Z, ,"['881076']", , , ,0.2,39.99 +2593.0,place order,2019-07-04 07:51:01.000Z, ,"['881083','881079','881081','881082','881080','881085','881084']","['990268']", , ,6.394,6802.97 +2594.0,pick item,2019-07-04 07:51:05.000Z, ,"['880991']", , , ,0.2,39.99 +2595.0,payment reminder,2019-07-04 07:59:39.000Z, , ,"['990148']", , ,0.44,481.0 +2596.0,pick item,2019-07-04 08:01:32.000Z, ,"['881027']", , , ,1.25,2200.0 +2597.0,send package,2019-07-04 08:10:48.000Z, , , ,"['660142']", ,2.216,3794.0 +2598.0,confirm order,2019-07-04 08:19:17.000Z, , ,"['990256']", , ,1.929,1448.99 +2599.0,confirm order,2019-07-04 08:32:40.000Z, , ,"['990258']", , ,5.2360000000000015,4667.97 +2600.0,reorder item,2019-07-04 08:45:20.000Z, ,"['881028']", , , ,0.28,89.99 +2601.0,pick item,2019-07-04 08:49:07.000Z, ,"['881060']", , , ,0.78,99.99 +2602.0,pick item,2019-07-04 08:50:37.000Z, ,"['881038']", , , ,1.25,2200.0 +2603.0,pick item,2019-07-04 08:51:27.000Z, ,"['881085']", , , ,1.25,2200.0 +2604.0,pay order,2019-07-04 08:56:28.000Z, , ,"['990228']", , ,2.013,2733.99 +2605.0,reorder item,2019-07-04 09:04:37.000Z, ,"['881015']", , , ,0.2,39.99 +2606.0,pick item,2019-07-04 09:13:23.000Z, ,"['881016']", , , ,0.483,79.99 +2607.0,package delivered,2019-07-04 09:17:41.000Z, , , ,"['660131']", ,0.78,99.99 +2608.0,package delivered,2019-07-04 09:19:39.000Z, , , ,"['660139']", ,8.853,6861.94 +2609.0,send package,2019-07-04 09:20:57.000Z, , , ,"['660144']", ,8.636000000000001,8475.95 +2610.0,pick item,2019-07-04 09:22:20.000Z, ,"['881064']", , , ,0.88,89.99 +2611.0,pick item,2019-07-04 09:47:25.000Z, ,"['881065']", , , ,0.483,495.0 +2612.0,confirm order,2019-07-04 09:51:27.000Z, , ,"['990267']", , ,1.29,1525.99 +2613.0,pick item,2019-07-04 09:54:08.000Z, ,"['881030']", , , ,0.166,799.0 +2614.0,item out of stock,2019-07-04 09:56:36.000Z, ,"['881071']", , , ,0.28,89.99 +2615.0,pick item,2019-07-04 09:59:05.000Z, ,"['880988']", , , ,0.2,39.99 +2616.0,create package,2019-07-04 09:59:05.000Z, ,"['880896','881022','880851','880925','880850','880926']", ,"['660145']", ,4.66,3407.97 +2617.0,place order,2019-07-04 10:01:49.000Z, ,"['881089','881087','881086','881090','881091','881092','881088']","['990269']", , ,5.348,3453.95 +2618.0,pay order,2019-07-04 10:01:54.000Z, , ,"['990187']", , ,0.41,573.99 +2619.0,reorder item,2019-07-04 10:06:06.000Z, ,"['881036']", , , ,0.28,449.0 +2620.0,pick item,2019-07-04 10:08:46.000Z, ,"['881080']", , , ,1.25,2200.0 +2621.0,pick item,2019-07-04 10:10:56.000Z, ,"['881072']", , , ,0.495,129.0 +2622.0,payment reminder,2019-07-04 10:12:51.000Z, , ,"['990153']", , ,3.593,5702.98 +2623.0,pay order,2019-07-04 10:27:39.000Z, , ,"['990204']", , ,4.74,1519.96 +2624.0,reorder item,2019-07-04 10:36:51.000Z, ,"['880868']", , , ,0.78,99.99 +2625.0,pay order,2019-07-04 10:46:21.000Z, , ,"['990136']", , ,1.927,1052.98 +2626.0,confirm order,2019-07-04 10:47:34.000Z, , ,"['990264']", , ,2.34,294.97 +2627.0,place order,2019-07-04 11:23:26.000Z, ,"['881094','881095','881093']","['990270']", , ,0.7559999999999999,2332.99 +2628.0,pick item,2019-07-04 11:40:27.000Z, ,"['881051']", , , ,0.172,699.0 +2629.0,pick item,2019-07-04 11:49:55.000Z, ,"['881017']", , , ,0.38,29.99 +2630.0,reorder item,2019-07-04 11:54:30.000Z, ,"['880927']", , , ,0.38,29.99 +2631.0,pick item,2019-07-04 12:16:06.000Z, ,"['881034']", , , ,0.28,89.99 +2632.0,reorder item,2019-07-04 12:20:33.000Z, ,"['880977']", , , ,1.28,149.99 +2633.0,send package,2019-07-04 12:33:06.000Z, , , ,"['660143']", ,4.303,1014.96 +2634.0,pick item,2019-07-04 12:38:46.000Z, ,"['881086']", , , ,1.48,199.99 +2635.0,create package,2019-07-04 12:38:46.000Z, ,"['880899','881035','880901','881034','881033','880903']", ,"['660146']", ,4.103,3843.97 +2636.0,pick item,2019-07-04 12:39:12.000Z, ,"['881010']", , , ,0.21,529.0 +2637.0,pick item,2019-07-04 12:39:30.000Z, ,"['881093']", , , ,0.188,1149.0 +2638.0,confirm order,2019-07-04 12:47:13.000Z, , ,"['990262']", , ,3.04,334.97 +2639.0,pick item,2019-07-04 12:51:44.000Z, ,"['881055']", , , ,0.88,89.99 +2640.0,item out of stock,2019-07-04 12:54:42.000Z, ,"['881023']", , , ,0.172,699.0 +2641.0,pick item,2019-07-04 13:05:04.000Z, ,"['881066']", , , ,0.166,799.0 +2642.0,place order,2019-07-04 13:06:39.000Z, ,"['881103','881096','881098','881101','881102','881097','881099','881100']","['990271']", , ,4.9830000000000005,1927.95 +2643.0,pick item,2019-07-04 13:15:02.000Z, ,"['881092']", , , ,0.172,699.0 +2644.0,pick item,2019-07-04 13:16:13.000Z, ,"['881098']", , , ,0.483,495.0 +2645.0,create package,2019-07-04 13:16:13.000Z, ,"['880785','881072']", ,"['660147']", ,1.745,2329.0 +2646.0,pick item,2019-07-04 13:26:02.000Z, ,"['881069']", , , ,0.38,29.99 +2647.0,pay order,2019-07-04 13:34:31.000Z, , ,"['990208']", , ,1.422,2904.0 +2648.0,pick item,2019-07-04 13:43:49.000Z, ,"['881059']", , , ,0.78,99.99 +2649.0,create package,2019-07-04 13:43:49.000Z, ,"['881016','880879','880734']", ,"['660148']", ,2.336,3678.99 +2650.0,reorder item,2019-07-04 13:51:31.000Z, ,"['881070']", , , ,0.98,129.99 +2651.0,pick item,2019-07-04 13:53:01.000Z, ,"['881014']", , , ,0.44,476.0 +2652.0,pick item,2019-07-04 13:57:31.000Z, ,"['881018']", , , ,1.25,2200.0 +2653.0,reorder item,2019-07-04 13:57:39.000Z, ,"['880970']", , , ,0.172,699.0 +2654.0,pick item,2019-07-04 13:59:16.000Z, ,"['881007']", , , ,1.28,149.99 +2655.0,create package,2019-07-04 13:59:16.000Z, ,"['881064','881001','881062','881011','881013']", ,"['660149']", ,4.75,3315.97 +2656.0,pay order,2019-07-04 14:02:50.000Z, , ,"['990066']", , ,2.003,3490.99 +2657.0,confirm order,2019-07-04 14:04:41.000Z, , ,"['990266']", , ,2.245,2663.99 +2658.0,pick item,2019-07-04 14:08:16.000Z, ,"['881096']", , , ,0.28,449.0 +2659.0,item out of stock,2019-07-04 14:27:11.000Z, ,"['881021']", , , ,1.48,199.99 +2660.0,place order,2019-07-04 14:33:06.000Z, ,"['881104','881105']","['990272']", , ,1.46,2734.0 +2661.0,pick item,2019-07-04 14:33:19.000Z, ,"['881100']", , , ,0.28,449.0 +2662.0,send package,2019-07-04 14:38:50.000Z, , , ,"['660145']", ,4.66,3407.97 +2663.0,reorder item,2019-07-04 14:44:09.000Z, ,"['880950']", , , ,0.188,1149.0 +2664.0,pick item,2019-07-04 14:53:51.000Z, ,"['880799']", , , ,0.78,99.99 +2665.0,send package,2019-07-04 14:54:21.000Z, , , ,"['660146']", ,4.103,3843.97 +2666.0,pick item,2019-07-04 15:07:09.000Z, ,"['881068']", , , ,0.98,129.99 +2667.0,send package,2019-07-04 15:14:57.000Z, , , ,"['660147']", ,1.745,2329.0 +2668.0,confirm order,2019-07-04 15:15:55.000Z, , ,"['990259']", , ,0.775,223.99 +2669.0,pick item,2019-07-04 16:21:24.000Z, ,"['881082']", , , ,0.188,1149.0 +2670.0,create package,2019-07-04 16:21:24.000Z, ,"['880973','881049','880963','880966','881066','881048','880961','880673','881065']", ,"['660150']", ,4.64,3804.96 +2671.0,place order,2019-07-04 16:25:59.000Z, ,"['881108','881106','881110','881107','881109']","['990273']", , ,1.646,1851.98 +2672.0,pick item,2019-07-04 16:32:51.000Z, ,"['881083']", , , ,0.78,99.99 +2673.0,confirm order,2019-07-04 16:52:05.000Z, , ,"['990261']", , ,10.042,8963.93 +2674.0,pick item,2019-07-04 16:53:25.000Z, ,"['881029']", , , ,0.28,449.0 +2675.0,pick item,2019-07-04 17:01:53.000Z, ,"['881079']", , , ,0.166,799.0 +2676.0,pay order,2019-07-04 17:55:30.000Z, , ,"['990218']", , ,1.673,1762.99 +2677.0,pick item,2019-07-04 18:02:38.000Z, ,"['881090']", , , ,1.28,149.99 +2678.0,place order,2019-07-04 18:57:32.000Z, ,"['881114','881112','881111','881113']","['990274']", , ,1.804,4132.0 +2679.0,place order,2019-07-05 01:03:06.000Z, ,"['881116','881115','881117']","['990275']", , ,2.402,3033.99 +2680.0,pick item,2019-07-05 06:43:05.000Z, ,"['881012']", , , ,0.2,39.99 +2681.0,pay order,2019-07-05 07:19:48.000Z, , ,"['990138']", , ,3.153,3909.99 +2682.0,place order,2019-07-05 07:23:12.000Z, ,"['881119','881118']","['990276']", , ,1.463,1233.99 +2683.0,package delivered,2019-07-05 07:33:53.000Z, , , ,"['660144']", ,8.636000000000001,8475.95 +2684.0,pick item,2019-07-05 07:40:55.000Z, ,"['881119']", , , ,0.483,1099.0 +2685.0,pick item,2019-07-05 07:52:00.000Z, ,"['880993']", , , ,0.28,89.99 +2686.0,item out of stock,2019-07-05 08:10:28.000Z, ,"['880999']", , , ,0.483,495.0 +2687.0,pay order,2019-07-05 08:11:03.000Z, , ,"['990153']", , ,3.593,5702.98 +2688.0,failed delivery,2019-07-05 08:12:14.000Z, , , ,"['660143']", ,4.303,1014.96 +2689.0,reorder item,2019-07-05 08:41:10.000Z, ,"['881071']", , , ,0.28,89.99 +2690.0,pick item,2019-07-05 08:53:40.000Z, ,"['881002']", , , ,0.495,129.0 +2691.0,package delivered,2019-07-05 08:54:32.000Z, , , ,"['660146']", ,4.103,3843.97 +2692.0,pick item,2019-07-05 09:05:55.000Z, ,"['880688']", , , ,0.88,89.99 +2693.0,create package,2019-07-05 09:05:55.000Z, ,"['880990','880991','880992','880993','881024']", ,"['660151']", ,1.615,774.97 +2694.0,item out of stock,2019-07-05 09:05:59.000Z, ,"['881110']", , , ,0.2,39.99 +2695.0,place order,2019-07-05 09:06:11.000Z, ,"['881122','881123','881120','881121']","['990277']", , ,3.78,4834.98 +2696.0,pick item,2019-07-05 09:06:56.000Z, ,"['881054']", , , ,1.37,2500.0 +2697.0,pick item,2019-07-05 09:10:46.000Z, ,"['881120']", , , ,0.38,29.99 +2698.0,confirm order,2019-07-05 09:19:30.000Z, , ,"['990265']", , ,0.28,94.99 +2699.0,package delivered,2019-07-05 09:22:24.000Z, , , ,"['660142']", ,2.216,3794.0 +2700.0,item out of stock,2019-07-05 09:28:40.000Z, ,"['881075']", , , ,0.44,476.0 +2701.0,pick item,2019-07-05 09:35:04.000Z, ,"['880995']", , , ,0.483,1099.0 +2702.0,pick item,2019-07-05 09:42:02.000Z, ,"['880958']", , , ,1.37,2500.0 +2703.0,pick item,2019-07-05 09:56:34.000Z, ,"['881040']", , , ,0.98,129.99 +2704.0,create package,2019-07-05 09:56:34.000Z, ,"['881076','880972']", ,"['660152']", ,0.41,568.99 +2705.0,pick item,2019-07-05 09:57:37.000Z, ,"['881000']", , , ,0.78,99.99 +2706.0,pick item,2019-07-05 10:00:47.000Z, ,"['881117']", , , ,0.172,699.0 +2707.0,create package,2019-07-05 10:00:47.000Z, ,"['881029','880751','881027','880947']", ,"['660153']", ,3.39,2878.98 +2708.0,pick item,2019-07-05 10:09:08.000Z, ,"['880968']", , , ,0.188,1149.0 +2709.0,pick item,2019-07-05 10:12:37.000Z, ,"['881107']", , , ,0.483,79.99 +2710.0,pick item,2019-07-05 10:19:32.000Z, ,"['881078']", , , ,0.44,476.0 +2711.0,confirm order,2019-07-05 10:22:58.000Z, , ,"['990271']", , ,4.9830000000000005,1927.95 +2712.0,pick item,2019-07-05 10:27:48.000Z, ,"['881105']", , , ,1.25,2200.0 +2713.0,create package,2019-07-05 10:27:48.000Z, ,"['881017','880958','880526','881018','880940','880749']", ,"['660154']", ,5.91,7109.97 +2714.0,place order,2019-07-05 10:32:10.000Z, ,"['881124']","['990278']", , ,0.38,34.99 +2715.0,pick item,2019-07-05 11:03:16.000Z, ,"['881077']", , , ,0.21,529.0 +2716.0,send package,2019-07-05 11:06:40.000Z, , , ,"['660150']", ,4.64,3804.96 +2717.0,send package,2019-07-05 11:12:06.000Z, , , ,"['660151']", ,1.615,774.97 +2718.0,send package,2019-07-05 11:18:50.000Z, , , ,"['660153']", ,3.39,2878.98 +2719.0,pick item,2019-07-05 11:40:49.000Z, ,"['881015']", , , ,0.2,39.99 +2720.0,place order,2019-07-05 12:24:07.000Z, ,"['881125','881127','881126','881128']","['990279']", , ,2.1790000000000003,3173.98 +2721.0,confirm order,2019-07-05 12:25:19.000Z, , ,"['990277']", , ,3.78,4834.98 +2722.0,pick item,2019-07-05 12:44:16.000Z, ,"['881109']", , , ,0.495,129.0 +2723.0,pick item,2019-07-05 12:49:38.000Z, ,"['881121']", , , ,1.37,2500.0 +2724.0,reorder item,2019-07-05 12:57:26.000Z, ,"['880999']", , , ,0.483,495.0 +2725.0,failed delivery,2019-07-05 13:10:40.000Z, , , ,"['660151']", ,1.615,774.97 +2726.0,pick item,2019-07-05 13:20:35.000Z, ,"['880921']", , , ,0.38,29.99 +2727.0,failed delivery,2019-07-05 13:22:11.000Z, , , ,"['660145']", ,4.66,3407.97 +2728.0,pick item,2019-07-05 13:40:02.000Z, ,"['881112']", , , ,1.25,2200.0 +2729.0,create package,2019-07-05 13:40:02.000Z, ,"['881043','880996','881068','880997','881069']", ,"['660155']", ,2.575,1213.98 +2730.0,send package,2019-07-05 13:46:25.000Z, , , ,"['660148']", ,2.336,3678.99 +2731.0,send package,2019-07-05 13:48:57.000Z, , , ,"['660149']", ,4.75,3315.97 +2732.0,send package,2019-07-05 13:51:33.000Z, , , ,"['660155']", ,2.575,1213.98 +2733.0,reorder item,2019-07-05 14:01:18.000Z, ,"['880974']", , , ,1.28,149.99 +2734.0,place order,2019-07-05 14:08:02.000Z, ,"['881129','881130']","['990280']", , ,0.48,493.99 +2735.0,confirm order,2019-07-05 14:11:36.000Z, , ,"['990274']", , ,1.804,4132.0 +2736.0,pick item,2019-07-05 14:11:58.000Z, ,"['881094']", , , ,0.38,29.99 +2737.0,confirm order,2019-07-05 14:22:17.000Z, , ,"['990269']", , ,5.348,3453.95 +2738.0,item out of stock,2019-07-05 14:29:52.000Z, ,"['881125']", , , ,1.25,2200.0 +2739.0,reorder item,2019-07-05 14:39:11.000Z, ,"['880924']", , , ,0.28,449.0 +2740.0,package delivered,2019-07-05 14:39:45.000Z, , , ,"['660145']", ,4.66,3407.97 +2741.0,item out of stock,2019-07-05 14:42:29.000Z, ,"['881101']", , , ,1.28,149.99 +2742.0,confirm order,2019-07-05 14:49:36.000Z, , ,"['990254']", , ,1.475,263.99 +2743.0,failed delivery,2019-07-05 14:56:46.000Z, , , ,"['660143']", ,4.303,1014.96 +2744.0,item out of stock,2019-07-05 15:08:43.000Z, ,"['881047']", , , ,1.48,199.99 +2745.0,item out of stock,2019-07-05 15:28:13.000Z, ,"['881128']", , , ,0.28,89.99 +2746.0,pick item,2019-07-05 15:33:26.000Z, ,"['881003']", , , ,0.483,495.0 +2747.0,place order,2019-07-05 15:35:51.000Z, ,"['881134','881135','881131','881133','881132']","['990281']", , ,2.178,1832.97 +2748.0,failed delivery,2019-07-05 15:45:51.000Z, , , ,"['660155']", ,2.575,1213.98 +2749.0,pick item,2019-07-05 16:03:06.000Z, ,"['881087']", , , ,0.483,79.99 +2750.0,pick item,2019-07-05 16:17:08.000Z, ,"['881073']", , , ,1.37,2500.0 +2751.0,send package,2019-07-05 16:32:17.000Z, , , ,"['660152']", ,0.41,568.99 +2752.0,confirm order,2019-07-05 16:35:57.000Z, , ,"['990268']", , ,6.394,6802.97 +2753.0,confirm order,2019-07-05 16:56:58.000Z, , ,"['990281']", , ,2.178,1832.97 +2754.0,place order,2019-07-05 17:31:29.000Z, ,"['881137','881136']","['990282']", , ,0.366,843.99 +2755.0,place order,2019-07-05 20:42:33.000Z, ,"['881139','881138','881140']","['990283']", , ,2.322,3303.99 +2756.0,place order,2019-07-06 17:15:12.000Z, ,"['881145','881148','881141','881143','881147','881146','881144','881149','881142']","['990284']", , ,5.537999999999999,5045.97 +2757.0,payment reminder,2019-07-07 11:08:50.000Z, , ,"['990162']", , ,2.2430000000000003,723.97 +2758.0,place order,2019-07-07 17:18:12.000Z, ,"['881150','881153','881152','881154','881151']","['990285']", , ,3.711,2028.97 +2759.0,reorder item,2019-07-08 06:28:29.000Z, ,"['881045']", , , ,0.78,99.99 +2760.0,pay order,2019-07-08 06:33:45.000Z, , ,"['990034']", , ,3.011,4052.98 +2761.0,payment reminder,2019-07-08 06:33:57.000Z, , ,"['990165']", , ,1.047,862.99 +2762.0,reorder item,2019-07-08 06:51:24.000Z, ,"['881047']", , , ,1.48,199.99 +2763.0,confirm order,2019-07-08 06:53:04.000Z, , ,"['990270']", , ,0.7559999999999999,2332.99 +2764.0,place order,2019-07-08 06:58:24.000Z, ,"['881156','881155']","['990286']", , ,0.655,783.99 +2765.0,reorder item,2019-07-08 07:07:50.000Z, ,"['881026']", , , ,1.28,149.99 +2766.0,pick item,2019-07-08 07:10:14.000Z, ,"['881074']", , , ,0.38,29.99 +2767.0,create package,2019-07-08 07:10:14.000Z, ,"['881005','880988','881008','881002','881003','881010','880989','881007']", ,"['660156']", ,3.844,2861.98 +2768.0,confirm order,2019-07-08 07:21:11.000Z, , ,"['990272']", , ,1.46,2734.0 +2769.0,package delivered,2019-07-08 07:25:35.000Z, , , ,"['660153']", ,3.39,2878.98 +2770.0,send package,2019-07-08 07:40:22.000Z, , , ,"['660154']", ,5.91,7109.97 +2771.0,package delivered,2019-07-08 07:49:39.000Z, , , ,"['660147']", ,1.745,2329.0 +2772.0,item out of stock,2019-07-08 07:50:35.000Z, ,"['881148']", , , ,1.48,199.99 +2773.0,pick item,2019-07-08 08:17:38.000Z, ,"['881106']", , , ,0.188,1149.0 +2774.0,pick item,2019-07-08 08:24:23.000Z, ,"['881149']", , , ,1.37,2500.0 +2775.0,item out of stock,2019-07-08 08:41:38.000Z, ,"['881056']", , , ,0.78,99.99 +2776.0,pay order,2019-07-08 08:43:48.000Z, , ,"['990241']", , ,1.56,244.98 +2777.0,confirm order,2019-07-08 08:48:52.000Z, , ,"['990282']", , ,0.366,843.99 +2778.0,pay order,2019-07-08 08:50:57.000Z, , ,"['990282']", , ,0.366,843.99 +2779.0,confirm order,2019-07-08 08:55:09.000Z, , ,"['990285']", , ,3.711,2028.97 +2780.0,confirm order,2019-07-08 09:06:25.000Z, , ,"['990283']", , ,2.322,3303.99 +2781.0,item out of stock,2019-07-08 09:14:54.000Z, ,"['881115']", , , ,1.25,2200.0 +2782.0,place order,2019-07-08 09:17:24.000Z, ,"['881158','881160','881161','881157','881159']","['990287']", , ,3.195,1173.96 +2783.0,pick item,2019-07-08 09:22:45.000Z, ,"['880182']", , , ,0.483,79.99 +2784.0,confirm order,2019-07-08 09:36:33.000Z, , ,"['990279']", , ,2.1790000000000003,3173.98 +2785.0,item out of stock,2019-07-08 09:50:26.000Z, ,"['881130']", , , ,0.28,449.0 +2786.0,confirm order,2019-07-08 09:55:52.000Z, , ,"['990275']", , ,2.402,3033.99 +2787.0,pick item,2019-07-08 09:58:31.000Z, ,"['881144']", , , ,0.21,529.0 +2788.0,pick item,2019-07-08 09:59:03.000Z, ,"['881111']", , , ,0.172,699.0 +2789.0,pick item,2019-07-08 10:14:48.000Z, ,"['881124']", , , ,0.38,29.99 +2790.0,package delivered,2019-07-08 10:22:47.000Z, , , ,"['660154']", ,5.91,7109.97 +2791.0,pick item,2019-07-08 10:28:49.000Z, ,"['881145']", , , ,0.483,495.0 +2792.0,confirm order,2019-07-08 10:37:54.000Z, , ,"['990278']", , ,0.38,34.99 +2793.0,pick item,2019-07-08 10:47:38.000Z, ,"['880806']", , , ,1.48,199.99 +2794.0,create package,2019-07-08 10:47:38.000Z, ,"['881096','881098','880688','880911','881100']", ,"['660157']", ,2.123,1522.98 +2795.0,place order,2019-07-08 10:54:35.000Z, ,"['881163','881162','881164']","['990288']", , ,1.86,234.97 +2796.0,pick item,2019-07-08 11:14:20.000Z, ,"['881127']", , , ,0.166,799.0 +2797.0,confirm order,2019-07-08 11:40:42.000Z, , ,"['990273']", , ,1.646,1851.98 +2798.0,pick item,2019-07-08 11:43:54.000Z, ,"['881137']", , , ,0.2,39.99 +2799.0,pick item,2019-07-08 11:45:22.000Z, ,"['881155']", , , ,0.483,79.99 +2800.0,package delivered,2019-07-08 12:13:06.000Z, , , ,"['660151']", ,1.615,774.97 +2801.0,pick item,2019-07-08 12:32:19.000Z, ,"['880964']", , , ,0.2,39.99 +2802.0,pay order,2019-07-08 12:32:32.000Z, , ,"['990170']", , ,1.803,650.98 +2803.0,pay order,2019-07-08 12:49:51.000Z, , ,"['990265']", , ,0.28,94.99 +2804.0,confirm order,2019-07-08 12:51:02.000Z, , ,"['990287']", , ,3.195,1173.96 +2805.0,pick item,2019-07-08 13:06:47.000Z, ,"['881097']", , , ,0.2,39.99 +2806.0,create package,2019-07-08 13:06:47.000Z, ,"['881145','881119','881059','881149','881085','881144','881079','881120','881090','881082','881121','881055','881083','881092','881080','881054','881087','881086','881051','881060']", ,"['660158']", ,15.327,18218.92 +2807.0,pick item,2019-07-08 13:06:49.000Z, ,"['880902']", , , ,0.483,79.99 +2808.0,place order,2019-07-08 13:08:58.000Z, ,"['881168','881167','881166','881165']","['990289']", , ,2.978,4259.99 +2809.0,confirm order,2019-07-08 13:14:29.000Z, , ,"['990284']", , ,5.537999999999999,5045.97 +2810.0,pick item,2019-07-08 13:20:12.000Z, ,"['881134']", , , ,0.28,89.99 +2811.0,pick item,2019-07-08 13:44:51.000Z, ,"['881129']", , , ,0.2,39.99 +2812.0,package delivered,2019-07-08 13:52:08.000Z, , , ,"['660152']", ,0.41,568.99 +2813.0,failed delivery,2019-07-08 13:53:19.000Z, , , ,"['660148']", ,2.336,3678.99 +2814.0,confirm order,2019-07-08 13:57:03.000Z, , ,"['990286']", , ,0.655,783.99 +2815.0,pick item,2019-07-08 13:58:35.000Z, ,"['881162']", , , ,0.2,39.99 +2816.0,item out of stock,2019-07-08 14:00:53.000Z, ,"['881153']", , , ,0.78,99.99 +2817.0,item out of stock,2019-07-08 14:04:46.000Z, ,"['881126']", , , ,0.483,79.99 +2818.0,pick item,2019-07-08 14:12:21.000Z, ,"['881039']", , , ,1.48,199.99 +2819.0,pick item,2019-07-08 14:17:12.000Z, ,"['881067']", , , ,1.28,149.99 +2820.0,pick item,2019-07-08 14:21:34.000Z, ,"['880672']", , , ,0.28,449.0 +2821.0,failed delivery,2019-07-08 14:30:34.000Z, , , ,"['660143']", ,4.303,1014.96 +2822.0,package delivered,2019-07-08 14:33:38.000Z, , , ,"['660150']", ,4.64,3804.96 +2823.0,place order,2019-07-08 14:37:43.000Z, ,"['881169']","['990290']", , ,0.188,1154.0 +2824.0,pick item,2019-07-08 14:43:54.000Z, ,"['881084']", , , ,1.48,199.99 +2825.0,pick item,2019-07-08 14:55:31.000Z, ,"['881042']", , , ,0.28,89.99 +2826.0,item out of stock,2019-07-08 15:18:34.000Z, ,"['881141']", , , ,0.21,529.0 +2827.0,pick item,2019-07-08 15:29:49.000Z, ,"['881047']", , , ,1.48,199.99 +2828.0,pick item,2019-07-08 15:31:07.000Z, ,"['881157']", , , ,0.78,99.99 +2829.0,pay order,2019-07-08 15:48:08.000Z, , ,"['990253']", , ,0.344,1403.0 +2830.0,confirm order,2019-07-08 16:02:55.000Z, , ,"['990290']", , ,0.188,1154.0 +2831.0,place order,2019-07-08 16:35:13.000Z, ,"['881171','881170','881174','881175','881176','881172','881173']","['990291']", , ,6.256,9407.99 +2832.0,pick item,2019-07-08 16:39:58.000Z, ,"['881136']", , , ,0.166,799.0 +2833.0,reorder item,2019-07-08 17:04:10.000Z, ,"['881126']", , , ,0.483,79.99 +2834.0,pick item,2019-07-08 17:07:08.000Z, ,"['880969']", , , ,0.38,29.99 +2835.0,place order,2019-07-08 19:25:14.000Z, ,"['881177','881178']","['990292']", , ,0.6829999999999999,539.99 +2836.0,create package,2019-07-08 23:00:00.000Z, ,"['881042','881127','881039','881040','881038']", ,"['660159']", ,4.1560000000000015,3418.97 +2837.0,place order,2019-07-09 02:49:18.000Z, ,"['881180','881179','881182','881181']","['990293']", , ,2.78,770.97 +2838.0,pick item,2019-07-09 06:44:26.000Z, ,"['881108']", , , ,0.28,449.0 +2839.0,pick item,2019-07-09 06:48:50.000Z, ,"['881026']", , , ,1.28,149.99 +2840.0,confirm order,2019-07-09 06:53:13.000Z, , ,"['990276']", , ,1.463,1233.99 +2841.0,pick item,2019-07-09 07:25:35.000Z, ,"['880985']", , , ,1.25,2200.0 +2842.0,package delivered,2019-07-09 07:36:25.000Z, , , ,"['660149']", ,4.75,3315.97 +2843.0,pick item,2019-07-09 07:37:04.000Z, ,"['881113']", , , ,0.172,699.0 +2844.0,reorder item,2019-07-09 07:38:00.000Z, ,"['881075']", , , ,0.44,476.0 +2845.0,item out of stock,2019-07-09 07:38:58.000Z, ,"['880967']", , , ,0.28,449.0 +2846.0,payment reminder,2019-07-09 07:48:14.000Z, , ,"['990177']", , ,5.915,5803.96 +2847.0,confirm order,2019-07-09 07:54:38.000Z, , ,"['990289']", , ,2.978,4259.99 +2848.0,reorder item,2019-07-09 07:59:36.000Z, ,"['881023']", , , ,0.172,699.0 +2849.0,confirm order,2019-07-09 08:13:09.000Z, , ,"['990291']", , ,6.256,9407.99 +2850.0,place order,2019-07-09 08:20:01.000Z, ,"['881183','881184']","['990294']", , ,1.69,733.99 +2851.0,item out of stock,2019-07-09 08:23:49.000Z, ,"['881154']", , , ,0.98,129.99 +2852.0,pick item,2019-07-09 08:25:07.000Z, ,"['880691']", , , ,0.172,699.0 +2853.0,pick item,2019-07-09 08:25:54.000Z, ,"['881152']", , , ,0.483,495.0 +2854.0,confirm order,2019-07-09 08:32:28.000Z, , ,"['990293']", , ,2.78,770.97 +2855.0,pick item,2019-07-09 08:35:16.000Z, ,"['880860']", , , ,0.483,1099.0 +2856.0,reorder item,2019-07-09 08:38:50.000Z, ,"['881056']", , , ,0.78,99.99 +2857.0,confirm order,2019-07-09 08:43:24.000Z, , ,"['990288']", , ,1.86,234.97 +2858.0,reorder item,2019-07-09 09:05:12.000Z, ,"['881125']", , , ,1.25,2200.0 +2859.0,pick item,2019-07-09 09:11:29.000Z, ,"['881091']", , , ,1.25,2200.0 +2860.0,pick item,2019-07-09 09:14:28.000Z, ,"['881116']", , , ,0.98,129.99 +2861.0,pay order,2019-07-09 09:19:52.000Z, , ,"['990277']", , ,3.78,4834.98 +2862.0,failed delivery,2019-07-09 09:23:57.000Z, , , ,"['660143']", ,4.303,1014.96 +2863.0,pick item,2019-07-09 09:28:23.000Z, ,"['880998']", , , ,1.48,199.99 +2864.0,pay order,2019-07-09 09:46:38.000Z, , ,"['990213']", , ,3.676,3774.97 +2865.0,pick item,2019-07-09 09:50:36.000Z, ,"['881174']", , , ,1.37,2500.0 +2866.0,pick item,2019-07-09 09:54:09.000Z, ,"['880401']", , , ,0.483,1099.0 +2867.0,create package,2019-07-09 09:54:09.000Z, ,"['881030','881174','881162','880921']", ,"['660160']", ,2.116,3368.98 +2868.0,pick item,2019-07-09 09:56:15.000Z, ,"['881164']", , , ,0.78,99.99 +2869.0,reorder item,2019-07-09 09:57:44.000Z, ,"['881141']", , , ,0.21,529.0 +2870.0,place order,2019-07-09 09:59:50.000Z, ,"['881185','881186','881188','881187']","['990295']", , ,1.809,1063.97 +2871.0,reorder item,2019-07-09 10:05:31.000Z, ,"['881128']", , , ,0.28,89.99 +2872.0,pick item,2019-07-09 10:10:56.000Z, ,"['881159']", , , ,0.28,89.99 +2873.0,failed delivery,2019-07-09 10:14:32.000Z, , , ,"['660148']", ,2.336,3678.99 +2874.0,pick item,2019-07-09 10:25:38.000Z, ,"['881175']", , , ,0.98,129.99 +2875.0,reorder item,2019-07-09 10:25:52.000Z, ,"['881025']", , , ,0.98,129.99 +2876.0,pay order,2019-07-09 10:26:00.000Z, , ,"['990273']", , ,1.646,1851.98 +2877.0,pick item,2019-07-09 11:26:39.000Z, ,"['880611']", , , ,0.483,1099.0 +2878.0,create package,2019-07-09 11:26:39.000Z, ,"['880806','881094','881124','881152','881093']", ,"['660161']", ,2.911,1903.97 +2879.0,pick item,2019-07-09 11:49:36.000Z, ,"['881172']", , , ,1.37,2500.0 +2880.0,pick item,2019-07-09 11:53:23.000Z, ,"['881126']", , , ,0.483,79.99 +2881.0,reorder item,2019-07-09 11:57:40.000Z, ,"['881130']", , , ,0.28,449.0 +2882.0,send package,2019-07-09 12:16:15.000Z, , , ,"['660158']", ,15.327,18218.92 +2883.0,place order,2019-07-09 12:19:27.000Z, ,"['881189','881190','881191','881192']","['990296']", , ,3.68,4894.98 +2884.0,payment reminder,2019-07-09 12:38:58.000Z, , ,"['990065']", , ,2.36,294.98 +2885.0,pick item,2019-07-09 12:42:33.000Z, ,"['881133']", , , ,0.166,799.0 +2886.0,pick item,2019-07-09 12:43:43.000Z, ,"['881168']", , , ,0.44,476.0 +2887.0,send package,2019-07-09 12:48:30.000Z, , , ,"['660157']", ,2.123,1522.98 +2888.0,send package,2019-07-09 12:56:21.000Z, , , ,"['660156']", ,3.844,2861.98 +2889.0,item out of stock,2019-07-09 13:28:55.000Z, ,"['881122']", , , ,1.25,2200.0 +2890.0,pay order,2019-07-09 13:32:08.000Z, , ,"['990293']", , ,2.78,770.97 +2891.0,pick item,2019-07-09 13:53:11.000Z, ,"['881103']", , , ,0.2,39.99 +2892.0,create package,2019-07-09 13:53:11.000Z, ,"['881014','881015','880799']", ,"['660162']", ,1.42,615.98 +2893.0,pick item,2019-07-09 13:56:45.000Z, ,"['881147']", , , ,0.2,39.99 +2894.0,place order,2019-07-09 13:58:42.000Z, ,"['881194','881193','881195']","['990297']", , ,1.726,1402.99 +2895.0,payment reminder,2019-07-09 14:08:05.000Z, , ,"['990169']", , ,1.838,3743.99 +2896.0,confirm order,2019-07-09 14:12:50.000Z, , ,"['990294']", , ,1.69,733.99 +2897.0,package delivered,2019-07-09 14:14:06.000Z, , , ,"['660158']", ,15.327,18218.92 +2898.0,failed delivery,2019-07-09 14:18:14.000Z, , , ,"['660143']", ,4.303,1014.96 +2899.0,confirm order,2019-07-09 14:24:31.000Z, , ,"['990280']", , ,0.48,493.99 +2900.0,pay order,2019-07-09 14:37:22.000Z, , ,"['990275']", , ,2.402,3033.99 +2901.0,pick item,2019-07-09 14:37:38.000Z, ,"['881161']", , , ,1.48,199.99 +2902.0,package delivered,2019-07-09 14:45:59.000Z, , , ,"['660155']", ,2.575,1213.98 +2903.0,pick item,2019-07-09 14:49:19.000Z, ,"['881185']", , , ,0.166,799.0 +2904.0,create package,2019-07-09 14:49:19.000Z, ,"['880401','880998','881000','880691','881012']", ,"['660163']", ,3.115,2137.97 +2905.0,pay order,2019-07-09 14:59:01.000Z, , ,"['990065']", , ,2.36,294.98 +2906.0,package delivered,2019-07-09 15:05:22.000Z, , , ,"['660156']", ,3.844,2861.98 +2907.0,send package,2019-07-09 15:07:53.000Z, , , ,"['660162']", ,1.42,615.98 +2908.0,pick item,2019-07-09 15:15:37.000Z, ,"['881046']", , , ,0.188,1149.0 +2909.0,pick item,2019-07-09 15:17:08.000Z, ,"['881181']", , , ,0.98,129.99 +2910.0,reorder item,2019-07-09 15:24:44.000Z, ,"['880967']", , , ,0.28,449.0 +2911.0,pick item,2019-07-09 15:44:45.000Z, ,"['881118']", , , ,0.98,129.99 +2912.0,reorder item,2019-07-09 16:05:40.000Z, ,"['881021']", , , ,1.48,199.99 +2913.0,confirm order,2019-07-09 16:16:10.000Z, , ,"['990296']", , ,3.68,4894.98 +2914.0,place order,2019-07-09 16:17:11.000Z, ,"['881197','881198','881196','881199']","['990298']", , ,1.32,2943.0 +2915.0,pick item,2019-07-09 16:25:31.000Z, ,"['881173']", , , ,0.188,1149.0 +2916.0,pick item,2019-07-09 16:29:07.000Z, ,"['881169']", , , ,0.188,1149.0 +2917.0,create package,2019-07-09 16:29:07.000Z, ,"['880995','880182','881181']", ,"['660164']", ,1.946,1308.98 +2918.0,pick item,2019-07-09 16:31:50.000Z, ,"['881188']", , , ,0.28,89.99 +2919.0,pick item,2019-07-09 16:32:25.000Z, ,"['881177']", , , ,0.2,39.99 +2920.0,confirm order,2019-07-09 16:37:31.000Z, , ,"['990297']", , ,1.726,1402.99 +2921.0,pay order,2019-07-09 16:44:47.000Z, , ,"['990176']", , ,2.009,1053.96 +2922.0,pick item,2019-07-09 17:55:24.000Z, ,"['881186']", , , ,0.483,79.99 +2923.0,create package,2019-07-09 17:55:24.000Z, ,"['881137','881116','881136','881117','880902']", ,"['660165']", ,2.001,1747.97 +2924.0,place order,2019-07-09 18:31:08.000Z, ,"['881202','881201','881204','881200','881203']","['990299']", , ,1.867,3490.99 +2925.0,place order,2019-07-09 22:24:42.000Z, ,"['881208','881207','881206','881205']","['990300']", , ,3.113,2704.97 +2926.0,pick item,2019-07-10 06:40:21.000Z, ,"['881204']", , , ,0.166,799.0 +2927.0,pick item,2019-07-10 06:57:45.000Z, ,"['881201']", , , ,0.172,699.0 +2928.0,reorder item,2019-07-10 07:01:41.000Z, ,"['881101']", , , ,1.28,149.99 +2929.0,pay order,2019-07-10 07:18:43.000Z, , ,"['990274']", , ,1.804,4132.0 +2930.0,pick item,2019-07-10 07:18:52.000Z, ,"['881139']", , , ,1.37,2500.0 +2931.0,item out of stock,2019-07-10 07:23:50.000Z, ,"['881192']", , , ,0.28,89.99 +2932.0,place order,2019-07-10 07:28:57.000Z, ,"['881210','881211','881209','881212']","['990301']", , ,1.113,2081.0 +2933.0,confirm order,2019-07-10 07:55:49.000Z, , ,"['990298']", , ,1.32,2943.0 +2934.0,pay order,2019-07-10 08:20:29.000Z, , ,"['990229']", , ,0.76,64.98 +2935.0,item out of stock,2019-07-10 08:20:54.000Z, ,"['881095']", , , ,0.188,1149.0 +2936.0,pick item,2019-07-10 08:22:32.000Z, ,"['881203']", , , ,0.88,89.99 +2937.0,item out of stock,2019-07-10 08:22:42.000Z, ,"['881190']", , , ,0.78,99.99 +2938.0,confirm order,2019-07-10 08:31:58.000Z, , ,"['990301']", , ,1.113,2081.0 +2939.0,pick item,2019-07-10 08:32:21.000Z, ,"['881156']", , , ,0.172,699.0 +2940.0,create package,2019-07-10 08:32:21.000Z, ,"['880968','881074','881073','880969']", ,"['660166']", ,2.318,3708.98 +2941.0,confirm order,2019-07-10 08:33:15.000Z, , ,"['990300']", , ,3.113,2704.97 +2942.0,pick item,2019-07-10 08:55:24.000Z, ,"['881205']", , , ,0.38,29.99 +2943.0,failed delivery,2019-07-10 08:57:43.000Z, , , ,"['660148']", ,2.336,3678.99 +2944.0,send package,2019-07-10 08:59:51.000Z, , , ,"['660164']", ,1.946,1308.98 +2945.0,item out of stock,2019-07-10 09:00:28.000Z, ,"['881210']", , , ,0.495,129.0 +2946.0,pick item,2019-07-10 09:05:56.000Z, ,"['881050']", , , ,1.25,2200.0 +2947.0,send package,2019-07-10 09:07:11.000Z, , , ,"['660163']", ,3.115,2137.97 +2948.0,pick item,2019-07-10 09:10:03.000Z, ,"['881140']", , , ,0.172,699.0 +2949.0,pick item,2019-07-10 09:12:02.000Z, ,"['880898']", , , ,0.28,449.0 +2950.0,create package,2019-07-10 09:12:02.000Z, ,"['881185','881026','881112','881186','881188','881108','881169','881105','881133','881113','881106','881134','881107','881109','881111']", ,"['660167']", ,7.132999999999999,10761.95 +2951.0,place order,2019-07-10 09:17:42.000Z, ,"['881214','881218','881221','881215','881216','881220','881217','881219','881213']","['990302']", , ,6.635,6019.95 +2952.0,pick item,2019-07-10 09:19:10.000Z, ,"['881194']", , , ,1.28,149.99 +2953.0,pay order,2019-07-10 09:35:57.000Z, , ,"['990290']", , ,0.188,1154.0 +2954.0,pick item,2019-07-10 09:41:32.000Z, ,"['881081']", , , ,1.28,149.99 +2955.0,pick item,2019-07-10 09:46:05.000Z, ,"['881216']", , , ,1.37,2500.0 +2956.0,send package,2019-07-10 09:57:31.000Z, , , ,"['660159']", ,4.1560000000000015,3418.97 +2957.0,pick item,2019-07-10 09:59:42.000Z, ,"['880774']", , , ,0.21,529.0 +2958.0,pick item,2019-07-10 10:01:36.000Z, ,"['880999']", , , ,0.483,495.0 +2959.0,pick item,2019-07-10 10:16:34.000Z, ,"['880942']", , , ,0.483,79.99 +2960.0,reorder item,2019-07-10 10:50:35.000Z, ,"['881148']", , , ,1.48,199.99 +2961.0,place order,2019-07-10 10:55:11.000Z, ,"['881227','881226','881224','881225','881223','881222']","['990303']", , ,2.824,2507.98 +2962.0,send package,2019-07-10 11:07:18.000Z, , , ,"['660167']", ,7.132999999999999,10761.95 +2963.0,pick item,2019-07-10 11:08:27.000Z, ,"['881218']", , , ,0.2,39.99 +2964.0,pay order,2019-07-10 11:14:43.000Z, , ,"['990288']", , ,1.86,234.97 +2965.0,package delivered,2019-07-10 11:19:07.000Z, , , ,"['660162']", ,1.42,615.98 +2966.0,package delivered,2019-07-10 11:22:52.000Z, , , ,"['660143']", ,4.303,1014.96 +2967.0,pay order,2019-07-10 11:28:50.000Z, , ,"['990251']", , ,1.123,600.98 +2968.0,item out of stock,2019-07-10 11:42:01.000Z, ,"['881150']", , , ,0.188,1149.0 +2969.0,pay order,2019-07-10 11:46:28.000Z, , ,"['990217']", , ,2.914,3159.99 +2970.0,item out of stock,2019-07-10 11:47:10.000Z, ,"['881099']", , , ,0.78,99.99 +2971.0,pay order,2019-07-10 12:11:31.000Z, , ,"['990233']", , ,0.667,833.0 +2972.0,pick item,2019-07-10 12:12:23.000Z, ,"['881142']", , , ,0.21,529.0 +2973.0,send package,2019-07-10 12:21:25.000Z, , , ,"['660165']", ,2.001,1747.97 +2974.0,package delivered,2019-07-10 12:26:56.000Z, , , ,"['660163']", ,3.115,2137.97 +2975.0,send package,2019-07-10 12:33:16.000Z, , , ,"['660166']", ,2.318,3708.98 +2976.0,pick item,2019-07-10 12:47:29.000Z, ,"['880442']", , , ,0.28,89.99 +2977.0,place order,2019-07-10 13:10:10.000Z, ,"['881228','881229']","['990304']", , ,1.975,333.99 +2978.0,item out of stock,2019-07-10 13:17:05.000Z, ,"['881202']", , , ,0.483,1099.0 +2979.0,confirm order,2019-07-10 13:19:23.000Z, , ,"['990292']", , ,0.6829999999999999,539.99 +2980.0,pick item,2019-07-10 13:21:57.000Z, ,"['881215']", , , ,0.88,89.99 +2981.0,item out of stock,2019-07-10 13:31:15.000Z, ,"['881165']", , , ,0.98,129.99 +2982.0,pick item,2019-07-10 13:34:59.000Z, ,"['881221']", , , ,0.2,39.99 +2983.0,send package,2019-07-10 13:36:14.000Z, , , ,"['660161']", ,2.911,1903.97 +2984.0,pick item,2019-07-10 13:37:39.000Z, ,"['881135']", , , ,0.28,89.99 +2985.0,confirm order,2019-07-10 13:38:56.000Z, , ,"['990299']", , ,1.867,3490.99 +2986.0,pick item,2019-07-10 13:39:31.000Z, ,"['881195']", , , ,0.28,449.0 +2987.0,pay order,2019-07-10 13:43:43.000Z, , ,"['990287']", , ,3.195,1173.96 +2988.0,pick item,2019-07-10 13:48:54.000Z, ,"['881184']", , , ,0.21,529.0 +2989.0,pick item,2019-07-10 13:51:22.000Z, ,"['880977']", , , ,1.28,149.99 +2990.0,create package,2019-07-10 13:51:22.000Z, ,"['881077','881078','881156','881155']", ,"['660168']", ,1.305,1783.99 +2991.0,reorder item,2019-07-10 13:55:37.000Z, ,"['881210']", , , ,0.495,129.0 +2992.0,item out of stock,2019-07-10 14:11:44.000Z, ,"['881189']", , , ,1.37,2500.0 +2993.0,pick item,2019-07-10 14:16:17.000Z, ,"['881209']", , , ,0.172,699.0 +2994.0,pick item,2019-07-10 14:24:21.000Z, ,"['881227']", , , ,0.172,699.0 +2995.0,reorder item,2019-07-10 14:30:08.000Z, ,"['881153']", , , ,0.78,99.99 +2996.0,pick item,2019-07-10 14:33:55.000Z, ,"['881225']", , , ,0.88,89.99 +2997.0,package delivered,2019-07-10 14:37:36.000Z, , , ,"['660161']", ,2.911,1903.97 +2998.0,place order,2019-07-10 14:40:07.000Z, ,"['881232','881231','881234','881235','881236','881230','881233']","['990305']", , ,2.911,2543.98 +2999.0,pick item,2019-07-10 14:56:52.000Z, ,"['881235']", , , ,0.495,129.0 +3000.0,create package,2019-07-10 14:56:52.000Z, ,"['881067','880672','881047','881050','880964','881046','880611']", ,"['660169']", ,5.1610000000000005,5286.97 +3001.0,item out of stock,2019-07-10 15:01:03.000Z, ,"['881187']", , , ,0.88,89.99 +3002.0,pick item,2019-07-10 15:01:04.000Z, ,"['881151']", , , ,1.28,149.99 +3003.0,package delivered,2019-07-10 15:08:59.000Z, , , ,"['660157']", ,2.123,1522.98 +3004.0,pick item,2019-07-10 15:11:11.000Z, ,"['880962']", , , ,0.98,129.99 +3005.0,reorder item,2019-07-10 15:28:05.000Z, ,"['881122']", , , ,1.25,2200.0 +3006.0,pay order,2019-07-10 15:33:55.000Z, , ,"['990276']", , ,1.463,1233.99 +3007.0,pick item,2019-07-10 15:36:28.000Z, ,"['880884']", , , ,0.495,129.0 +3008.0,pay order,2019-07-10 15:44:06.000Z, , ,"['990280']", , ,0.48,493.99 +3009.0,confirm order,2019-07-10 15:48:32.000Z, , ,"['990295']", , ,1.809,1063.97 +3010.0,item out of stock,2019-07-10 16:12:35.000Z, ,"['881226']", , , ,0.172,699.0 +3011.0,confirm order,2019-07-10 16:27:18.000Z, , ,"['990303']", , ,2.824,2507.98 +3012.0,place order,2019-07-10 16:40:02.000Z, ,"['881239','881237','881238','881240']","['990306']", , ,1.354,1768.98 +3013.0,pick item,2019-07-10 17:36:56.000Z, ,"['881180']", , , ,0.38,29.99 +3014.0,confirm order,2019-07-10 17:50:00.000Z, , ,"['990304']", , ,1.975,333.99 +3015.0,pay order,2019-07-10 17:51:19.000Z, , ,"['990235']", , ,0.99,633.99 +3016.0,place order,2019-07-10 19:39:40.000Z, ,"['881241','881242','881243']","['990307']", , ,2.54,274.97 +3017.0,item out of stock,2019-07-10 20:04:45.000Z, ,"['881229']", , , ,0.495,129.0 +3018.0,place order,2019-07-11 04:15:54.000Z, ,"['881244','881246','881245']","['990308']", , ,1.461,1312.99 +3019.0,pick item,2019-07-11 06:31:10.000Z, ,"['881143']", , , ,0.495,129.0 +3020.0,pick item,2019-07-11 06:49:10.000Z, ,"['881132']", , , ,1.28,149.99 +3021.0,pick item,2019-07-11 06:53:20.000Z, ,"['881213']", , , ,0.2,39.99 +3022.0,create package,2019-07-11 06:53:20.000Z, ,"['881103','881097','880860']", ,"['660170']", ,0.883,1178.98 +3023.0,confirm order,2019-07-11 07:07:40.000Z, , ,"['990306']", , ,1.354,1768.98 +3024.0,package delivered,2019-07-11 07:17:20.000Z, , , ,"['660167']", ,7.132999999999999,10761.95 +3025.0,item out of stock,2019-07-11 07:50:14.000Z, ,"['881217']", , , ,1.37,2500.0 +3026.0,place order,2019-07-11 07:55:17.000Z, ,"['881248','881247','881249']","['990309']", , ,1.933,2739.99 +3027.0,send package,2019-07-11 07:58:16.000Z, , , ,"['660160']", ,2.116,3368.98 +3028.0,pick item,2019-07-11 08:00:25.000Z, ,"['881222']", , , ,0.88,89.99 +3029.0,pick item,2019-07-11 08:04:47.000Z, ,"['881104']", , , ,0.21,529.0 +3030.0,reorder item,2019-07-11 08:06:53.000Z, ,"['881190']", , , ,0.78,99.99 +3031.0,pick item,2019-07-11 08:07:48.000Z, ,"['881045']", , , ,0.78,99.99 +3032.0,create package,2019-07-11 08:07:48.000Z, ,"['881129','880977']", ,"['660171']", ,1.48,189.98 +3033.0,pick item,2019-07-11 08:22:23.000Z, ,"['881183']", , , ,1.48,199.99 +3034.0,pick item,2019-07-11 08:48:44.000Z, ,"['881178']", , , ,0.483,495.0 +3035.0,create package,2019-07-11 08:48:44.000Z, ,"['881143','881091','881081','881118','881142','881147','881084']", ,"['660172']", ,5.895,3377.96 +3036.0,pay order,2019-07-11 08:51:30.000Z, , ,"['990296']", , ,3.68,4894.98 +3037.0,pick item,2019-07-11 08:56:10.000Z, ,"['881123']", , , ,0.78,99.99 +3038.0,pick item,2019-07-11 08:59:36.000Z, ,"['881193']", , , ,0.166,799.0 +3039.0,pick item,2019-07-11 09:03:58.000Z, ,"['881061']", , , ,0.28,89.99 +3040.0,package delivered,2019-07-11 09:16:44.000Z, , , ,"['660164']", ,1.946,1308.98 +3041.0,pick item,2019-07-11 09:20:22.000Z, ,"['881198']", , , ,0.483,495.0 +3042.0,pick item,2019-07-11 09:22:27.000Z, ,"['881148']", , , ,1.48,199.99 +3043.0,pay order,2019-07-11 09:24:48.000Z, , ,"['990267']", , ,1.29,1525.99 +3044.0,reorder item,2019-07-11 09:40:10.000Z, ,"['880959']", , , ,0.483,79.99 +3045.0,pick item,2019-07-11 09:41:13.000Z, ,"['881171']", , , ,0.495,129.0 +3046.0,pick item,2019-07-11 09:42:59.000Z, ,"['881247']", , , ,0.483,495.0 +3047.0,create package,2019-07-11 09:42:59.000Z, ,"['881201','881161','881203','881204','881140','881159','881139','881157','880774']", ,"['660173']", ,5.51,5705.96 +3048.0,pick item,2019-07-11 09:43:44.000Z, ,"['881191']", , , ,1.25,2200.0 +3049.0,pick item,2019-07-11 09:58:06.000Z, ,"['880336']", , , ,1.28,149.99 +3050.0,item out of stock,2019-07-11 09:58:54.000Z, ,"['881224']", , , ,0.44,476.0 +3051.0,item out of stock,2019-07-11 10:05:18.000Z, ,"['881207']", , , ,1.37,2500.0 +3052.0,place order,2019-07-11 10:10:22.000Z, ,"['881251','881250']","['990310']", , ,1.853,3604.0 +3053.0,reorder item,2019-07-11 10:45:24.000Z, ,"['881095']", , , ,0.188,1149.0 +3054.0,pick item,2019-07-11 10:56:54.000Z, ,"['881250']", , , ,1.37,2500.0 +3055.0,reorder item,2019-07-11 11:27:57.000Z, ,"['881110']", , , ,0.2,39.99 +3056.0,item out of stock,2019-07-11 11:28:36.000Z, ,"['881199']", , , ,0.188,1149.0 +3057.0,place order,2019-07-11 11:40:31.000Z, ,"['881254','881252','881253']","['990311']", , ,1.42,620.98 +3058.0,pick item,2019-07-11 12:01:44.000Z, ,"['881088']", , , ,0.483,79.99 +3059.0,send package,2019-07-11 12:17:20.000Z, , , ,"['660172']", ,5.895,3377.96 +3060.0,pay order,2019-07-11 12:27:03.000Z, , ,"['990142']", , ,2.928,1563.96 +3061.0,payment reminder,2019-07-11 12:32:28.000Z, , ,"['990186']", , ,1.151,2137.99 +3062.0,pick item,2019-07-11 12:32:43.000Z, ,"['881166']", , , ,0.188,1149.0 +3063.0,pay order,2019-07-11 12:38:11.000Z, , ,"['990255']", , ,3.09,2893.98 +3064.0,pick item,2019-07-11 12:51:30.000Z, ,"['881231']", , , ,0.38,29.99 +3065.0,payment reminder,2019-07-11 13:00:42.000Z, , ,"['990196']", , ,0.332,1603.0 +3066.0,pick item,2019-07-11 13:05:39.000Z, ,"['881138']", , , ,0.78,99.99 +3067.0,reorder item,2019-07-11 13:29:34.000Z, ,"['881165']", , , ,0.98,129.99 +3068.0,send package,2019-07-11 13:33:45.000Z, , , ,"['660170']", ,0.883,1178.98 +3069.0,package delivered,2019-07-11 13:39:06.000Z, , , ,"['660166']", ,2.318,3708.98 +3070.0,pay order,2019-07-11 13:40:29.000Z, , ,"['990200']", , ,3.201,1681.98 +3071.0,place order,2019-07-11 13:40:49.000Z, ,"['881256','881255']","['990312']", , ,0.48,134.98 +3072.0,confirm order,2019-07-11 13:56:14.000Z, , ,"['990308']", , ,1.461,1312.99 +3073.0,package delivered,2019-07-11 14:05:10.000Z, , , ,"['660172']", ,5.895,3377.96 +3074.0,pick item,2019-07-11 14:07:58.000Z, ,"['881212']", , , ,0.28,449.0 +3075.0,failed delivery,2019-07-11 14:12:54.000Z, , , ,"['660160']", ,2.116,3368.98 +3076.0,send package,2019-07-11 14:34:01.000Z, , , ,"['660171']", ,1.48,189.98 +3077.0,pick item,2019-07-11 14:42:03.000Z, ,"['881028']", , , ,0.28,89.99 +3078.0,create package,2019-07-11 14:42:03.000Z, ,"['880942','880985']", ,"['660174']", ,1.733,2279.99 +3079.0,item out of stock,2019-07-11 14:43:46.000Z, ,"['881158']", , , ,0.172,699.0 +3080.0,pay order,2019-07-11 14:48:44.000Z, , ,"['990162']", , ,2.2430000000000003,723.97 +3081.0,failed delivery,2019-07-11 14:48:53.000Z, , , ,"['660171']", ,1.48,189.98 +3082.0,pick item,2019-07-11 14:49:19.000Z, ,"['880994']", , , ,0.2,39.99 +3083.0,item out of stock,2019-07-11 14:51:01.000Z, ,"['881241']", , , ,0.88,89.99 +3084.0,pick item,2019-07-11 14:59:43.000Z, ,"['881170']", , , ,1.37,2500.0 +3085.0,create package,2019-07-11 14:59:43.000Z, ,"['881175','881166','881171','881172','881164','881173','881168','881170']", ,"['660175']", ,5.811,8132.98 +3086.0,send package,2019-07-11 15:00:49.000Z, , , ,"['660168']", ,1.305,1783.99 +3087.0,item out of stock,2019-07-11 15:05:40.000Z, ,"['881254']", , , ,0.44,476.0 +3088.0,item out of stock,2019-07-11 15:11:40.000Z, ,"['881245']", , , ,0.495,129.0 +3089.0,reorder item,2019-07-11 15:15:19.000Z, ,"['881187']", , , ,0.88,89.99 +3090.0,failed delivery,2019-07-11 15:19:32.000Z, , , ,"['660159']", ,4.1560000000000015,3418.97 +3091.0,pick item,2019-07-11 15:28:33.000Z, ,"['881182']", , , ,0.44,476.0 +3092.0,place order,2019-07-11 15:41:26.000Z, ,"['881257','881260','881259','881258']","['990313']", , ,1.209,2082.98 +3093.0,pick item,2019-07-11 15:55:38.000Z, ,"['881208']", , , ,0.483,79.99 +3094.0,failed delivery,2019-07-11 16:02:10.000Z, , , ,"['660148']", ,2.336,3678.99 +3095.0,confirm order,2019-07-11 16:12:04.000Z, , ,"['990311']", , ,1.42,620.98 +3096.0,pick item,2019-07-11 16:44:29.000Z, ,"['881130']", , , ,0.28,449.0 +3097.0,item out of stock,2019-07-11 17:06:38.000Z, ,"['881220']", , , ,1.48,199.99 +3098.0,reorder item,2019-07-11 17:17:14.000Z, ,"['881192']", , , ,0.28,89.99 +3099.0,pick item,2019-07-11 17:21:43.000Z, ,"['881023']", , , ,0.172,699.0 +3100.0,pick item,2019-07-11 17:33:42.000Z, ,"['881253']", , , ,0.78,99.99 +3101.0,place order,2019-07-11 17:43:53.000Z, ,"['881264','881261','881265','881263','881262']","['990314']", , ,2.5980000000000003,3803.97 +3102.0,reorder item,2019-07-11 17:49:53.000Z, ,"['881158']", , , ,0.172,699.0 +3103.0,confirm order,2019-07-11 17:55:37.000Z, , ,"['990309']", , ,1.933,2739.99 +3104.0,item out of stock,2019-07-11 18:34:12.000Z, ,"['881179']", , , ,0.98,129.99 +3105.0,reorder item,2019-07-11 19:02:57.000Z, ,"['881115']", , , ,1.25,2200.0 +3106.0,package delivered,2019-07-11 19:54:36.000Z, , , ,"['660170']", ,0.883,1178.98 +3107.0,place order,2019-07-11 21:07:20.000Z, ,"['881271','881267','881266','881269','881268','881270']","['990315']", , ,5.043,5014.96 +3108.0,pay order,2019-07-12 06:28:30.000Z, , ,"['990266']", , ,2.245,2663.99 +3109.0,pay order,2019-07-12 06:46:04.000Z, , ,"['990283']", , ,2.322,3303.99 +3110.0,pick item,2019-07-12 06:59:19.000Z, ,"['881122']", , , ,1.25,2200.0 +3111.0,place order,2019-07-12 07:00:23.000Z, ,"['881272','881273','881274']","['990316']", , ,2.216,3383.99 +3112.0,send package,2019-07-12 07:12:18.000Z, , , ,"['660175']", ,5.811,8132.98 +3113.0,confirm order,2019-07-12 07:17:56.000Z, , ,"['990310']", , ,1.853,3604.0 +3114.0,confirm order,2019-07-12 07:19:26.000Z, , ,"['990305']", , ,2.911,2543.98 +3115.0,pay order,2019-07-12 07:23:38.000Z, , ,"['990309']", , ,1.933,2739.99 +3116.0,item out of stock,2019-07-12 07:30:20.000Z, ,"['881243']", , , ,0.38,29.99 +3117.0,pick item,2019-07-12 07:39:22.000Z, ,"['881089']", , , ,0.2,39.99 +3118.0,pick item,2019-07-12 07:42:37.000Z, ,"['880769']", , , ,0.88,89.99 +3119.0,create package,2019-07-12 07:42:37.000Z, ,"['881208','881183','881126','881205','881184']", ,"['660176']", ,3.036,918.96 +3120.0,reorder item,2019-07-12 07:44:59.000Z, ,"['881220']", , , ,1.48,199.99 +3121.0,place order,2019-07-12 08:20:34.000Z, ,"['881275','881277','881279','881278','881276']","['990317']", , ,2.714,3552.98 +3122.0,pick item,2019-07-12 08:21:06.000Z, ,"['881262']", , , ,0.188,1149.0 +3123.0,confirm order,2019-07-12 08:40:12.000Z, , ,"['990312']", , ,0.48,134.98 +3124.0,pay order,2019-07-12 08:50:28.000Z, , ,"['990285']", , ,3.711,2028.97 +3125.0,pick item,2019-07-12 09:12:33.000Z, ,"['881025']", , , ,0.98,129.99 +3126.0,pick item,2019-07-12 09:18:29.000Z, ,"['881271']", , , ,0.38,29.99 +3127.0,pick item,2019-07-12 09:29:17.000Z, ,"['880840']", , , ,0.28,449.0 +3128.0,confirm order,2019-07-12 09:35:00.000Z, , ,"['990316']", , ,2.216,3383.99 +3129.0,pick item,2019-07-12 09:47:30.000Z, ,"['881233']", , , ,0.21,529.0 +3130.0,create package,2019-07-12 09:47:30.000Z, ,"['881198','880994','881177','881178','881180','881182','880884','881025','881262']", ,"['660177']", ,3.849,2983.96 +3131.0,confirm order,2019-07-12 09:49:33.000Z, , ,"['990314']", , ,2.5980000000000003,3803.97 +3132.0,place order,2019-07-12 10:00:55.000Z, ,"['881281','881282','881284','881283','881285','881280']","['990318']", , ,1.541,3435.99 +3133.0,pick item,2019-07-12 10:11:57.000Z, ,"['881283']", , , ,0.28,89.99 +3134.0,package delivered,2019-07-12 10:23:18.000Z, , , ,"['660165']", ,2.001,1747.97 +3135.0,pick item,2019-07-12 10:52:25.000Z, ,"['881063']", , , ,0.88,89.99 +3136.0,pick item,2019-07-12 10:54:01.000Z, ,"['881146']", , , ,0.88,89.99 +3137.0,send package,2019-07-12 10:57:25.000Z, , , ,"['660169']", ,5.1610000000000005,5286.97 +3138.0,place order,2019-07-12 11:21:37.000Z, ,"['881287','881286','881288']","['990319']", , ,2.129,1498.99 +3139.0,reorder item,2019-07-12 11:56:45.000Z, ,"['881150']", , , ,0.188,1149.0 +3140.0,pick item,2019-07-12 12:13:26.000Z, ,"['881238']", , , ,0.188,1149.0 +3141.0,pick item,2019-07-12 12:20:17.000Z, ,"['881230']", , , ,0.166,799.0 +3142.0,confirm order,2019-07-12 12:48:11.000Z, , ,"['990307']", , ,2.54,274.97 +3143.0,pick item,2019-07-12 12:56:30.000Z, ,"['881163']", , , ,0.88,89.99 +3144.0,package delivered,2019-07-12 13:01:10.000Z, , , ,"['660169']", ,5.1610000000000005,5286.97 +3145.0,place order,2019-07-12 13:03:02.000Z, ,"['881289','881293','881292','881291','881290']","['990320']", , ,4.207,1282.97 +3146.0,pick item,2019-07-12 13:04:20.000Z, ,"['881232']", , , ,0.44,476.0 +3147.0,pick item,2019-07-12 13:06:07.000Z, ,"['881272']", , , ,1.25,2200.0 +3148.0,pick item,2019-07-12 13:06:08.000Z, ,"['881114']", , , ,0.21,529.0 +3149.0,create package,2019-07-12 13:06:08.000Z, ,"['881023','881271','880769','880898','881151']", ,"['660178']", ,2.992,1417.97 +3150.0,pick item,2019-07-12 13:10:12.000Z, ,"['881044']", , , ,0.28,89.99 +3151.0,pick item,2019-07-12 13:16:15.000Z, ,"['881267']", , , ,0.483,79.99 +3152.0,reorder item,2019-07-12 13:21:47.000Z, ,"['881241']", , , ,0.88,89.99 +3153.0,pick item,2019-07-12 13:23:15.000Z, ,"['881274']", , , ,0.483,1099.0 +3154.0,package delivered,2019-07-12 13:26:35.000Z, , , ,"['660175']", ,5.811,8132.98 +3155.0,pick item,2019-07-12 13:34:37.000Z, ,"['881249']", , , ,0.2,39.99 +3156.0,item out of stock,2019-07-12 13:39:11.000Z, ,"['881291']", , , ,1.48,199.99 +3157.0,pick item,2019-07-12 13:45:08.000Z, ,"['881276']", , , ,0.166,799.0 +3158.0,create package,2019-07-12 13:45:08.000Z, ,"['881194','881193','881063','881195','880999']", ,"['660179']", ,3.089,1982.98 +3159.0,confirm order,2019-07-12 13:48:26.000Z, , ,"['990318']", , ,1.541,3435.99 +3160.0,reorder item,2019-07-12 13:57:19.000Z, ,"['881189']", , , ,1.37,2500.0 +3161.0,pick item,2019-07-12 14:10:00.000Z, ,"['881263']", , , ,0.38,29.99 +3162.0,pick item,2019-07-12 14:20:51.000Z, ,"['881289']", , , ,0.172,699.0 +3163.0,pick item,2019-07-12 14:21:26.000Z, ,"['881260']", , , ,0.166,799.0 +3164.0,place order,2019-07-12 14:25:51.000Z, ,"['881295','881294','881297','881301','881302','881300','881299','881298','881296']","['990321']", , ,3.567,2983.95 +3165.0,package delivered,2019-07-12 14:25:53.000Z, , , ,"['660160']", ,2.116,3368.98 +3166.0,confirm order,2019-07-12 14:32:57.000Z, , ,"['990320']", , ,4.207,1282.97 +3167.0,confirm order,2019-07-12 14:37:06.000Z, , ,"['990317']", , ,2.714,3552.98 +3168.0,confirm order,2019-07-12 14:42:45.000Z, , ,"['990321']", , ,3.567,2983.95 +3169.0,pay order,2019-07-12 14:48:46.000Z, , ,"['990305']", , ,2.911,2543.98 +3170.0,item out of stock,2019-07-12 15:05:29.000Z, ,"['881252']", , , ,0.2,39.99 +3171.0,pick item,2019-07-12 15:08:45.000Z, ,"['881200']", , , ,0.166,799.0 +3172.0,reorder item,2019-07-12 15:12:05.000Z, ,"['881226']", , , ,0.172,699.0 +3173.0,pick item,2019-07-12 15:23:47.000Z, ,"['881197']", , , ,0.483,495.0 +3174.0,create package,2019-07-12 15:23:47.000Z, ,"['881218','881221','881215','881216','881213']", ,"['660180']", ,2.85,2709.96 +3175.0,reorder item,2019-07-12 15:27:04.000Z, ,"['880979']", , , ,0.21,529.0 +3176.0,pick item,2019-07-12 15:39:50.000Z, ,"['881266']", , , ,0.78,99.99 +3177.0,send package,2019-07-12 16:05:01.000Z, , , ,"['660173']", ,5.51,5705.96 +3178.0,place order,2019-07-12 16:11:30.000Z, ,"['881303','881304']","['990322']", , ,1.733,2700.0 +3179.0,send package,2019-07-12 16:23:23.000Z, , , ,"['660177']", ,3.849,2983.96 +3180.0,place order,2019-07-12 18:14:04.000Z, ,"['881305']","['990323']", , ,0.28,94.99 +3181.0,reorder item,2019-07-12 18:23:37.000Z, ,"['881179']", , , ,0.98,129.99 +3182.0,pick item,2019-07-12 18:51:39.000Z, ,"['881158']", , , ,0.172,699.0 +3183.0,item out of stock,2019-07-12 20:15:56.000Z, ,"['881275']", , , ,1.37,2500.0 +3184.0,place order,2019-07-12 21:07:43.000Z, ,"['881307','881306','881308']","['990324']", , ,1.429,2002.99 +3185.0,place order,2019-07-13 19:22:57.000Z, ,"['881311','881309','881310']","['990325']", , ,2.97,2830.99 +3186.0,create package,2019-07-13 23:00:00.000Z, ,"['880442','881283','881044']", ,"['660181']", ,0.84,269.97 +3187.0,payment reminder,2019-07-14 08:26:25.000Z, , ,"['990202']", , ,1.76,294.98 +3188.0,payment reminder,2019-07-14 11:59:35.000Z, , ,"['990085']", , ,2.16,244.98 +3189.0,payment reminder,2019-07-14 13:34:40.000Z, , ,"['990082']", , ,2.423,1333.96 +3190.0,place order,2019-07-14 19:33:42.000Z, ,"['881312','881313']","['990326']", , ,0.649,1903.0 +3191.0,send package,2019-07-15 07:03:20.000Z, , , ,"['660181']", ,0.84,269.97 +3192.0,item out of stock,2019-07-15 07:27:03.000Z, ,"['881206']", , , ,0.88,89.99 +3193.0,place order,2019-07-15 07:27:27.000Z, ,"['881315','881314','881317','881316']","['990327']", , ,1.904,2001.99 +3194.0,reorder item,2019-07-15 07:30:09.000Z, ,"['881206']", , , ,0.88,89.99 +3195.0,reorder item,2019-07-15 07:32:14.000Z, ,"['881252']", , , ,0.2,39.99 +3196.0,package delivered,2019-07-15 07:43:48.000Z, , , ,"['660159']", ,4.1560000000000015,3418.97 +3197.0,package delivered,2019-07-15 07:44:19.000Z, , , ,"['660177']", ,3.849,2983.96 +3198.0,pick item,2019-07-15 07:44:26.000Z, ,"['881211']", , , ,0.166,799.0 +3199.0,pick item,2019-07-15 07:46:09.000Z, ,"['881284']", , , ,0.28,449.0 +3200.0,pay order,2019-07-15 08:12:48.000Z, , ,"['990259']", , ,0.775,223.99 +3201.0,confirm order,2019-07-15 08:20:12.000Z, , ,"['990302']", , ,6.635,6019.95 +3202.0,pick item,2019-07-15 08:23:18.000Z, ,"['881264']", , , ,0.38,29.99 +3203.0,send package,2019-07-15 08:29:04.000Z, , , ,"['660178']", ,2.992,1417.97 +3204.0,reorder item,2019-07-15 08:30:33.000Z, ,"['881245']", , , ,0.495,129.0 +3205.0,pick item,2019-07-15 08:33:21.000Z, ,"['881176']", , , ,0.483,495.0 +3206.0,pick item,2019-07-15 08:34:02.000Z, ,"['880662']", , , ,0.172,699.0 +3207.0,send package,2019-07-15 08:44:36.000Z, , , ,"['660176']", ,3.036,918.96 +3208.0,pick item,2019-07-15 09:00:48.000Z, ,"['880871']", , , ,1.28,149.99 +3209.0,create package,2019-07-15 09:00:48.000Z, ,"['881104','881114','880871','881250','881247','881028','881249','881132','881135']", ,"['660182']", ,5.593,4572.95 +3210.0,send package,2019-07-15 09:09:46.000Z, , , ,"['660174']", ,1.733,2279.99 +3211.0,place order,2019-07-15 09:14:42.000Z, ,"['881320','881321','881319','881322','881318']","['990328']", , ,2.428,4568.99 +3212.0,pick item,2019-07-15 09:23:07.000Z, ,"['881288']", , , ,0.166,799.0 +3213.0,package delivered,2019-07-15 09:27:02.000Z, , , ,"['660148']", ,2.336,3678.99 +3214.0,pick item,2019-07-15 09:28:45.000Z, ,"['881251']", , , ,0.483,1099.0 +3215.0,pick item,2019-07-15 09:32:28.000Z, ,"['881301']", , , ,0.21,529.0 +3216.0,pay order,2019-07-15 09:32:49.000Z, , ,"['990148']", , ,0.44,481.0 +3217.0,package delivered,2019-07-15 09:33:07.000Z, , , ,"['660171']", ,1.48,189.98 +3218.0,item out of stock,2019-07-15 09:38:18.000Z, ,"['881287']", , , ,1.48,199.99 +3219.0,reorder item,2019-07-15 09:42:24.000Z, ,"['881291']", , , ,1.48,199.99 +3220.0,pick item,2019-07-15 10:06:43.000Z, ,"['881303']", , , ,1.25,2200.0 +3221.0,confirm order,2019-07-15 10:23:26.000Z, , ,"['990323']", , ,0.28,94.99 +3222.0,pay order,2019-07-15 10:38:56.000Z, , ,"['990243']", , ,1.5759999999999998,2950.99 +3223.0,confirm order,2019-07-15 10:39:13.000Z, , ,"['990315']", , ,5.043,5014.96 +3224.0,place order,2019-07-15 10:49:11.000Z, ,"['881323','881328','881326','881325','881327','881324']","['990329']", , ,4.001,1702.96 +3225.0,send package,2019-07-15 11:04:00.000Z, , , ,"['660179']", ,3.089,1982.98 +3226.0,pick item,2019-07-15 11:17:36.000Z, ,"['881317']", , , ,0.172,699.0 +3227.0,pick item,2019-07-15 11:20:05.000Z, ,"['881307']", , , ,0.78,99.99 +3228.0,send package,2019-07-15 11:27:25.000Z, , , ,"['660182']", ,5.593,4572.95 +3229.0,pick item,2019-07-15 11:31:31.000Z, ,"['881214']", , , ,0.495,129.0 +3230.0,pay order,2019-07-15 11:52:20.000Z, , ,"['990100']", , ,1.32,3547.0 +3231.0,pick item,2019-07-15 11:56:47.000Z, ,"['881309']", , , ,1.28,149.99 +3232.0,pick item,2019-07-15 12:09:10.000Z, ,"['881306']", , , ,0.483,1099.0 +3233.0,create package,2019-07-15 12:09:10.000Z, ,"['881232','881211','881317','881233','881235','881209','881212','881253','881231','881230']", ,"['660183']", ,3.261,4708.98 +3234.0,pick item,2019-07-15 12:16:19.000Z, ,"['881319']", , , ,0.44,476.0 +3235.0,reorder item,2019-07-15 12:18:08.000Z, ,"['881243']", , , ,0.38,29.99 +3236.0,confirm order,2019-07-15 12:19:30.000Z, , ,"['990327']", , ,1.904,2001.99 +3237.0,pay order,2019-07-15 12:19:30.000Z, , ,"['990278']", , ,0.38,34.99 +3238.0,pay order,2019-07-15 12:38:05.000Z, , ,"['990104']", , ,3.218,3457.99 +3239.0,item out of stock,2019-07-15 12:43:25.000Z, ,"['881315']", , , ,0.172,699.0 +3240.0,pick item,2019-07-15 12:45:25.000Z, ,"['881322']", , , ,0.172,699.0 +3241.0,place order,2019-07-15 12:58:10.000Z, ,"['881330','881329']","['990330']", , ,0.42,1063.0 +3242.0,pick item,2019-07-15 12:59:40.000Z, ,"['880967']", , , ,0.28,449.0 +3243.0,pay order,2019-07-15 13:05:10.000Z, , ,"['990304']", , ,1.975,333.99 +3244.0,pick item,2019-07-15 13:08:53.000Z, ,"['881323']", , , ,0.78,99.99 +3245.0,pay order,2019-07-15 13:11:14.000Z, , ,"['990323']", , ,0.28,94.99 +3246.0,reorder item,2019-07-15 13:28:33.000Z, ,"['881224']", , , ,0.44,476.0 +3247.0,payment reminder,2019-07-15 13:34:40.000Z, , ,"['990212']", , ,2.935,3043.98 +3248.0,package delivered,2019-07-15 13:47:18.000Z, , , ,"['660174']", ,1.733,2279.99 +3249.0,package delivered,2019-07-15 13:48:35.000Z, , , ,"['660168']", ,1.305,1783.99 +3250.0,pick item,2019-07-15 14:02:57.000Z, ,"['881286']", , , ,0.483,495.0 +3251.0,package delivered,2019-07-15 14:05:06.000Z, , , ,"['660179']", ,3.089,1982.98 +3252.0,pick item,2019-07-15 14:12:21.000Z, ,"['881318']", , , ,0.166,799.0 +3253.0,pick item,2019-07-15 14:32:51.000Z, ,"['881310']", , , ,0.44,476.0 +3254.0,item out of stock,2019-07-15 14:41:22.000Z, ,"['881273']", , , ,0.483,79.99 +3255.0,package delivered,2019-07-15 14:42:32.000Z, , , ,"['660176']", ,3.036,918.96 +3256.0,package delivered,2019-07-15 14:45:36.000Z, , , ,"['660173']", ,5.51,5705.96 +3257.0,pick item,2019-07-15 15:00:21.000Z, ,"['881237']", , , ,0.483,495.0 +3258.0,confirm order,2019-07-15 15:15:35.000Z, , ,"['990326']", , ,0.649,1903.0 +3259.0,place order,2019-07-15 15:16:07.000Z, ,"['881334','881337','881332','881335','881336','881333','881331']","['990331']", , ,5.183,4810.98 +3260.0,confirm order,2019-07-15 15:18:51.000Z, , ,"['990331']", , ,5.183,4810.98 +3261.0,pay order,2019-07-15 15:29:31.000Z, , ,"['990316']", , ,2.216,3383.99 +3262.0,pick item,2019-07-15 15:33:57.000Z, ,"['881337']", , , ,0.188,1149.0 +3263.0,package delivered,2019-07-15 15:52:54.000Z, , , ,"['660182']", ,5.593,4572.95 +3264.0,pay order,2019-07-15 16:03:17.000Z, , ,"['990191']", , ,0.188,1154.0 +3265.0,pick item,2019-07-15 16:42:40.000Z, ,"['880880']", , , ,0.98,129.99 +3266.0,create package,2019-07-15 16:42:40.000Z, ,"['881227','881272','881225','881274','881222']", ,"['660184']", ,3.665,4177.98 +3267.0,place order,2019-07-15 16:52:02.000Z, ,"['881344','881342','881338','881340','881343','881345','881339','881341']","['990332']", , ,5.138,6703.98 +3268.0,pay order,2019-07-15 17:21:43.000Z, , ,"['990303']", , ,2.824,2507.98 +3269.0,pick item,2019-07-15 18:25:10.000Z, ,"['881320']", , , ,1.37,2500.0 +3270.0,pick item,2019-07-15 20:08:03.000Z, ,"['881321']", , , ,0.28,89.99 +3271.0,place order,2019-07-15 20:15:40.000Z, ,"['881348','881347','881346','881349']","['990333']", , ,2.343,314.96 +3272.0,confirm order,2019-07-15 20:51:09.000Z, , ,"['990330']", , ,0.42,1063.0 +3273.0,place order,2019-07-16 06:22:55.000Z, ,"['881350','881352','881351']","['990334']", , ,2.8960000000000004,3203.99 +3274.0,pick item,2019-07-16 06:46:08.000Z, ,"['881239']", , , ,0.2,39.99 +3275.0,pay order,2019-07-16 06:46:11.000Z, , ,"['990302']", , ,6.635,6019.95 +3276.0,pick item,2019-07-16 06:47:12.000Z, ,"['881277']", , , ,0.483,79.99 +3277.0,pick item,2019-07-16 06:52:32.000Z, ,"['881335']", , , ,1.28,149.99 +3278.0,create package,2019-07-16 06:52:32.000Z, ,"['881045','880962']", ,"['660185']", ,1.76,229.98 +3279.0,pick item,2019-07-16 07:13:50.000Z, ,"['881324']", , , ,0.495,129.0 +3280.0,confirm order,2019-07-16 07:14:35.000Z, , ,"['990328']", , ,2.428,4568.99 +3281.0,pay order,2019-07-16 07:17:17.000Z, , ,"['990308']", , ,1.461,1312.99 +3282.0,send package,2019-07-16 07:22:05.000Z, , , ,"['660184']", ,3.665,4177.98 +3283.0,pick item,2019-07-16 07:29:51.000Z, ,"['881190']", , , ,0.78,99.99 +3284.0,create package,2019-07-16 07:29:51.000Z, ,"['881122','881148','881061','881310','881146','881089','881123','881309','881088']", ,"['660186']", ,7.073,3425.93 +3285.0,pick item,2019-07-16 07:36:14.000Z, ,"['881350']", , , ,1.48,199.99 +3286.0,failed delivery,2019-07-16 07:52:58.000Z, , , ,"['660181']", ,0.84,269.97 +3287.0,pick item,2019-07-16 07:56:17.000Z, ,"['881332']", , , ,0.495,129.0 +3288.0,pick item,2019-07-16 07:58:13.000Z, ,"['881240']", , , ,0.483,79.99 +3289.0,pick item,2019-07-16 08:07:01.000Z, ,"['881330']", , , ,0.21,529.0 +3290.0,send package,2019-07-16 08:21:14.000Z, , , ,"['660185']", ,1.76,229.98 +3291.0,pick item,2019-07-16 08:22:46.000Z, ,"['881339']", , , ,1.25,2200.0 +3292.0,place order,2019-07-16 08:24:10.000Z, ,"['881355','881353','881354']","['990335']", , ,1.226,993.98 +3293.0,pick item,2019-07-16 08:32:57.000Z, ,"['881296']", , , ,0.88,89.99 +3294.0,pick item,2019-07-16 08:40:10.000Z, ,"['881314']", , , ,0.28,449.0 +3295.0,pick item,2019-07-16 08:45:33.000Z, ,"['881244']", , , ,0.483,1099.0 +3296.0,pick item,2019-07-16 08:48:24.000Z, ,"['881325']", , , ,0.28,89.99 +3297.0,create package,2019-07-16 08:48:24.000Z, ,"['881158','881190','881138','881330','881191','881200']", ,"['660187']", ,3.358,4426.98 +3298.0,pick item,2019-07-16 08:56:22.000Z, ,"['881246']", , , ,0.483,79.99 +3299.0,reorder item,2019-07-16 09:13:50.000Z, ,"['881273']", , , ,0.483,79.99 +3300.0,pick item,2019-07-16 09:14:05.000Z, ,"['881282']", , , ,0.166,799.0 +3301.0,pick item,2019-07-16 09:22:56.000Z, ,"['881305']", , , ,0.28,89.99 +3302.0,confirm order,2019-07-16 09:28:06.000Z, , ,"['990319']", , ,2.129,1498.99 +3303.0,package delivered,2019-07-16 09:32:41.000Z, , , ,"['660181']", ,0.84,269.97 +3304.0,reorder item,2019-07-16 09:57:38.000Z, ,"['881202']", , , ,0.483,1099.0 +3305.0,reorder item,2019-07-16 10:05:21.000Z, ,"['881217']", , , ,1.37,2500.0 +3306.0,pick item,2019-07-16 10:07:56.000Z, ,"['880591']", , , ,0.78,99.99 +3307.0,place order,2019-07-16 10:08:07.000Z, ,"['881356','881357']","['990336']", , ,1.3630000000000002,589.99 +3308.0,pick item,2019-07-16 10:08:59.000Z, ,"['881281']", , , ,0.166,799.0 +3309.0,pick item,2019-07-16 10:10:51.000Z, ,"['880924']", , , ,0.28,449.0 +3310.0,create package,2019-07-16 10:10:51.000Z, ,"['880840','880336','881303']", ,"['660188']", ,2.81,2798.99 +3311.0,item out of stock,2019-07-16 10:13:16.000Z, ,"['881228']", , , ,1.48,199.99 +3312.0,confirm order,2019-07-16 10:32:47.000Z, , ,"['990329']", , ,4.001,1702.96 +3313.0,confirm order,2019-07-16 10:32:55.000Z, , ,"['990336']", , ,1.3630000000000002,589.99 +3314.0,pay order,2019-07-16 10:39:31.000Z, , ,"['990214']", , ,1.25,2205.0 +3315.0,reorder item,2019-07-16 10:45:07.000Z, ,"['881099']", , , ,0.78,99.99 +3316.0,pick item,2019-07-16 10:46:53.000Z, ,"['881295']", , , ,0.2,39.99 +3317.0,pick item,2019-07-16 11:02:30.000Z, ,"['881071']", , , ,0.28,89.99 +3318.0,pick item,2019-07-16 11:19:24.000Z, ,"['881352']", , , ,0.166,799.0 +3319.0,create package,2019-07-16 11:19:24.000Z, ,"['881289','880591','881239','881237','881238','881130','881240']", ,"['660189']", ,2.5860000000000003,3011.97 +3320.0,place order,2019-07-16 11:36:02.000Z, ,"['881362','881358','881360','881361','881364','881359','881363']","['990337']", , ,5.1560000000000015,4172.96 +3321.0,package delivered,2019-07-16 11:40:21.000Z, , , ,"['660185']", ,1.76,229.98 +3322.0,pick item,2019-07-16 12:23:24.000Z, ,"['881338']", , , ,1.25,2200.0 +3323.0,reorder item,2019-07-16 12:24:36.000Z, ,"['881254']", , , ,0.44,476.0 +3324.0,pick item,2019-07-16 12:26:59.000Z, ,"['881125']", , , ,1.25,2200.0 +3325.0,pick item,2019-07-16 12:29:07.000Z, ,"['881356']", , , ,0.88,89.99 +3326.0,pick item,2019-07-16 12:35:51.000Z, ,"['881313']", , , ,0.166,799.0 +3327.0,item out of stock,2019-07-16 12:40:11.000Z, ,"['881359']", , , ,0.28,449.0 +3328.0,package delivered,2019-07-16 12:44:28.000Z, , , ,"['660178']", ,2.992,1417.97 +3329.0,item out of stock,2019-07-16 12:47:19.000Z, ,"['881297']", , , ,0.483,79.99 +3330.0,pick item,2019-07-16 12:51:19.000Z, ,"['881268']", , , ,1.37,2500.0 +3331.0,confirm order,2019-07-16 12:55:19.000Z, , ,"['990313']", , ,1.209,2082.98 +3332.0,pay order,2019-07-16 13:15:24.000Z, , ,"['990294']", , ,1.69,733.99 +3333.0,pick item,2019-07-16 13:20:24.000Z, ,"['881261']", , , ,1.37,2500.0 +3334.0,send package,2019-07-16 13:25:09.000Z, , , ,"['660180']", ,2.85,2709.96 +3335.0,send package,2019-07-16 13:26:00.000Z, , , ,"['660188']", ,2.81,2798.99 +3336.0,package delivered,2019-07-16 13:26:06.000Z, , , ,"['660184']", ,3.665,4177.98 +3337.0,send package,2019-07-16 13:28:59.000Z, , , ,"['660189']", ,2.5860000000000003,3011.97 +3338.0,place order,2019-07-16 13:31:51.000Z, ,"['881365','881367','881366']","['990338']", , ,0.662,1322.99 +3339.0,send package,2019-07-16 13:35:10.000Z, , , ,"['660187']", ,3.358,4426.98 +3340.0,item out of stock,2019-07-16 13:44:07.000Z, ,"['881269']", , , ,1.25,2200.0 +3341.0,pick item,2019-07-16 13:45:05.000Z, ,"['881342']", , , ,0.483,79.99 +3342.0,create package,2019-07-16 13:45:05.000Z, ,"['881356','881163','881176']", ,"['660190']", ,2.2430000000000003,674.98 +3343.0,confirm order,2019-07-16 13:48:09.000Z, , ,"['990335']", , ,1.226,993.98 +3344.0,pay order,2019-07-16 13:49:08.000Z, , ,"['990249']", , ,5.674,4711.97 +3345.0,pick item,2019-07-16 13:49:44.000Z, ,"['881351']", , , ,1.25,2200.0 +3346.0,pick item,2019-07-16 13:51:52.000Z, ,"['881285']", , , ,0.483,495.0 +3347.0,confirm order,2019-07-16 13:56:34.000Z, , ,"['990338']", , ,0.662,1322.99 +3348.0,confirm order,2019-07-16 14:00:37.000Z, , ,"['990334']", , ,2.8960000000000004,3203.99 +3349.0,pick item,2019-07-16 14:11:03.000Z, ,"['881254']", , , ,0.44,476.0 +3350.0,create package,2019-07-16 14:11:03.000Z, ,"['881244','881246','880924','881267','881266','881268']", ,"['660191']", ,3.879,4307.97 +3351.0,pick item,2019-07-16 14:15:08.000Z, ,"['881187']", , , ,0.88,89.99 +3352.0,pay order,2019-07-16 14:15:59.000Z, , ,"['990327']", , ,1.904,2001.99 +3353.0,send package,2019-07-16 14:35:50.000Z, , , ,"['660183']", ,3.261,4708.98 +3354.0,pick item,2019-07-16 14:42:00.000Z, ,"['880983']", , , ,0.88,89.99 +3355.0,pick item,2019-07-16 14:43:14.000Z, ,"['881353']", , , ,0.28,89.99 +3356.0,pick item,2019-07-16 14:53:09.000Z, ,"['881362']", , , ,0.38,29.99 +3357.0,pay order,2019-07-16 14:55:58.000Z, , ,"['990314']", , ,2.5980000000000003,3803.97 +3358.0,pick item,2019-07-16 15:05:19.000Z, ,"['881302']", , , ,0.188,1149.0 +3359.0,item out of stock,2019-07-16 15:13:24.000Z, ,"['881354']", , , ,0.78,99.99 +3360.0,pick item,2019-07-16 15:15:07.000Z, ,"['881349']", , , ,0.2,39.99 +3361.0,create package,2019-07-16 15:15:07.000Z, ,"['881277','881337','880967','881332','881335','881276']", ,"['660192']", ,2.892,2755.98 +3362.0,pick item,2019-07-16 15:21:50.000Z, ,"['881326']", , , ,0.483,1099.0 +3363.0,place order,2019-07-16 15:23:30.000Z, ,"['881369','881368']","['990339']", , ,0.49,623.99 +3364.0,pick item,2019-07-16 15:31:35.000Z, ,"['881217']", , , ,1.37,2500.0 +3365.0,pick item,2019-07-16 15:34:41.000Z, ,"['880546']", , , ,0.44,476.0 +3366.0,reorder item,2019-07-16 15:34:46.000Z, ,"['881287']", , , ,1.48,199.99 +3367.0,pay order,2019-07-16 15:57:41.000Z, , ,"['990264']", , ,2.34,294.97 +3368.0,pick item,2019-07-16 16:01:10.000Z, ,"['881258']", , , ,0.28,89.99 +3369.0,item out of stock,2019-07-16 16:24:08.000Z, ,"['881365']", , , ,0.28,89.99 +3370.0,item out of stock,2019-07-16 16:26:51.000Z, ,"['881355']", , , ,0.166,799.0 +3371.0,payment reminder,2019-07-16 16:42:12.000Z, , ,"['990216']", , ,2.74,2883.99 +3372.0,pick item,2019-07-16 16:54:17.000Z, ,"['881367']", , , ,0.21,529.0 +3373.0,pick item,2019-07-16 16:55:09.000Z, ,"['881348']", , , ,0.88,89.99 +3374.0,create package,2019-07-16 16:55:09.000Z, ,"['881307','881286','881306','881305','881197','881261','881263','881264','881320','881321','881319','881322','881288','881318']", ,"['660193']", ,7.233,10201.95 +3375.0,confirm order,2019-07-16 17:01:33.000Z, , ,"['990333']", , ,2.343,314.96 +3376.0,payment reminder,2019-07-16 17:04:54.000Z, , ,"['990222']", , ,1.715,2351.99 +3377.0,place order,2019-07-16 17:06:47.000Z, ,"['881371','881370','881372']","['990340']", , ,3.06,3233.99 +3378.0,pay order,2019-07-16 17:16:14.000Z, , ,"['990301']", , ,1.113,2081.0 +3379.0,confirm order,2019-07-16 17:31:01.000Z, , ,"['990325']", , ,2.97,2830.99 +3380.0,place order,2019-07-16 19:53:09.000Z, ,"['881376','881375','881373','881374']","['990341']", , ,2.148,1423.97 +3381.0,place order,2019-07-17 05:36:48.000Z, ,"['881378','881377']","['990342']", , ,0.966,1183.99 +3382.0,pick item,2019-07-17 06:37:09.000Z, ,"['881358']", , , ,1.28,149.99 +3383.0,pick item,2019-07-17 06:50:19.000Z, ,"['881316']", , , ,1.28,149.99 +3384.0,confirm order,2019-07-17 06:50:44.000Z, , ,"['990322']", , ,1.733,2700.0 +3385.0,send package,2019-07-17 06:54:05.000Z, , , ,"['660186']", ,7.073,3425.93 +3386.0,pick item,2019-07-17 06:56:13.000Z, ,"['881328']", , , ,1.48,199.99 +3387.0,confirm order,2019-07-17 07:00:00.000Z, , ,"['990339']", , ,0.49,623.99 +3388.0,reorder item,2019-07-17 07:00:25.000Z, ,"['881359']", , , ,0.28,449.0 +3389.0,send package,2019-07-17 07:05:02.000Z, , , ,"['660191']", ,3.879,4307.97 +3390.0,pick item,2019-07-17 07:24:56.000Z, ,"['881375']", , , ,0.98,129.99 +3391.0,package delivered,2019-07-17 07:27:03.000Z, , , ,"['660180']", ,2.85,2709.96 +3392.0,pick item,2019-07-17 07:37:48.000Z, ,"['881273']", , , ,0.483,79.99 +3393.0,package delivered,2019-07-17 07:40:31.000Z, , , ,"['660191']", ,3.879,4307.97 +3394.0,pick item,2019-07-17 07:47:10.000Z, ,"['881160']", , , ,0.483,79.99 +3395.0,payment reminder,2019-07-17 08:00:17.000Z, , ,"['990224']", , ,3.035,862.98 +3396.0,pick item,2019-07-17 08:03:45.000Z, ,"['881234']", , , ,0.44,476.0 +3397.0,pick item,2019-07-17 08:04:37.000Z, ,"['881299']", , , ,0.483,495.0 +3398.0,pick item,2019-07-17 08:08:57.000Z, ,"['880950']", , , ,0.188,1149.0 +3399.0,item out of stock,2019-07-17 08:13:58.000Z, ,"['881357']", , , ,0.483,495.0 +3400.0,send package,2019-07-17 08:21:04.000Z, , , ,"['660193']", ,7.233,10201.95 +3401.0,place order,2019-07-17 08:24:16.000Z, ,"['881379','881380']","['990343']", , ,0.49,623.99 +3402.0,reorder item,2019-07-17 08:29:09.000Z, ,"['881228']", , , ,1.48,199.99 +3403.0,item out of stock,2019-07-17 08:54:39.000Z, ,"['881298']", , , ,0.44,476.0 +3404.0,pick item,2019-07-17 08:59:49.000Z, ,"['881179']", , , ,0.98,129.99 +3405.0,pick item,2019-07-17 09:00:12.000Z, ,"['881278']", , , ,0.2,39.99 +3406.0,send package,2019-07-17 09:08:19.000Z, , , ,"['660190']", ,2.2430000000000003,674.98 +3407.0,payment reminder,2019-07-17 09:14:27.000Z, , ,"['990225']", , ,1.203,3286.99 +3408.0,item out of stock,2019-07-17 09:14:35.000Z, ,"['881336']", , , ,1.48,199.99 +3409.0,confirm order,2019-07-17 09:18:38.000Z, , ,"['990341']", , ,2.148,1423.97 +3410.0,pay order,2019-07-17 09:26:18.000Z, , ,"['990237']", , ,1.803,650.98 +3411.0,pick item,2019-07-17 09:32:05.000Z, ,"['881167']", , , ,1.37,2500.0 +3412.0,pick item,2019-07-17 09:45:22.000Z, ,"['881331']", , , ,0.21,529.0 +3413.0,pick item,2019-07-17 09:45:53.000Z, ,"['880412']", , , ,1.48,199.99 +3414.0,create package,2019-07-17 09:45:53.000Z, ,"['881260','881342','881338','881258','881339']", ,"['660194']", ,3.429,5368.98 +3415.0,pick item,2019-07-17 09:46:51.000Z, ,"['881224']", , , ,0.44,476.0 +3416.0,item out of stock,2019-07-17 09:49:23.000Z, ,"['881370']", , , ,0.21,529.0 +3417.0,payment reminder,2019-07-17 09:52:15.000Z, , ,"['990220']", , ,4.476,1910.97 +3418.0,package delivered,2019-07-17 10:05:11.000Z, , , ,"['660187']", ,3.358,4426.98 +3419.0,pay order,2019-07-17 10:08:04.000Z, , ,"['990085']", , ,2.16,244.98 +3420.0,place order,2019-07-17 10:08:20.000Z, ,"['881388','881389','881383','881387','881382','881386','881381','881384','881385']","['990344']", , ,5.597,3410.95 +3421.0,item out of stock,2019-07-17 10:15:56.000Z, ,"['881345']", , , ,0.172,699.0 +3422.0,pick item,2019-07-17 10:31:44.000Z, ,"['880643']", , , ,0.2,39.99 +3423.0,item out of stock,2019-07-17 10:39:31.000Z, ,"['881248']", , , ,1.25,2200.0 +3424.0,payment reminder,2019-07-17 11:05:01.000Z, , ,"['990226']", , ,2.151,1848.99 +3425.0,reorder item,2019-07-17 11:35:51.000Z, ,"['881357']", , , ,0.483,495.0 +3426.0,place order,2019-07-17 11:36:27.000Z, ,"['881391','881390']","['990345']", , ,0.978,629.0 +3427.0,pick item,2019-07-17 11:47:41.000Z, ,"['881343']", , , ,0.483,495.0 +3428.0,pick item,2019-07-17 11:52:28.000Z, ,"['880970']", , , ,0.172,699.0 +3429.0,reorder item,2019-07-17 11:56:17.000Z, ,"['881297']", , , ,0.483,79.99 +3430.0,pick item,2019-07-17 12:04:56.000Z, ,"['881099']", , , ,0.78,99.99 +3431.0,create package,2019-07-17 12:04:56.000Z, ,"['881281','881282','881284','881285','880662']", ,"['660195']", ,1.267,3241.0 +3432.0,pick item,2019-07-17 12:06:23.000Z, ,"['881292']", , , ,0.495,129.0 +3433.0,item out of stock,2019-07-17 12:10:34.000Z, ,"['881300']", , , ,0.2,39.99 +3434.0,pick item,2019-07-17 12:25:13.000Z, ,"['881102']", , , ,1.48,199.99 +3435.0,pick item,2019-07-17 12:29:12.000Z, ,"['881280']", , , ,0.166,799.0 +3436.0,send package,2019-07-17 12:36:51.000Z, , , ,"['660195']", ,1.267,3241.0 +3437.0,reorder item,2019-07-17 12:37:19.000Z, ,"['881300']", , , ,0.2,39.99 +3438.0,package delivered,2019-07-17 12:42:56.000Z, , , ,"['660186']", ,7.073,3425.93 +3439.0,reorder item,2019-07-17 12:59:13.000Z, ,"['881336']", , , ,1.48,199.99 +3440.0,reorder item,2019-07-17 13:01:17.000Z, ,"['881229']", , , ,0.495,129.0 +3441.0,item out of stock,2019-07-17 13:01:21.000Z, ,"['881368']", , , ,0.21,529.0 +3442.0,pick item,2019-07-17 13:14:42.000Z, ,"['881386']", , , ,0.495,129.0 +3443.0,pick item,2019-07-17 13:25:48.000Z, ,"['881311']", , , ,1.25,2200.0 +3444.0,create package,2019-07-17 13:25:48.000Z, ,"['881251','880950','881328','881326','881323','881187','881386','881324','881325','881367']", ,"['660196']", ,5.774,4613.96 +3445.0,confirm order,2019-07-17 13:31:34.000Z, , ,"['990342']", , ,0.966,1183.99 +3446.0,place order,2019-07-17 13:32:41.000Z, ,"['881392']","['990346']", , ,0.483,500.0 +3447.0,pick item,2019-07-17 13:35:26.000Z, ,"['881371']", , , ,1.48,199.99 +3448.0,reorder item,2019-07-17 13:39:17.000Z, ,"['881370']", , , ,0.21,529.0 +3449.0,pick item,2019-07-17 13:45:31.000Z, ,"['881304']", , , ,0.483,495.0 +3450.0,failed delivery,2019-07-17 13:46:50.000Z, , , ,"['660183']", ,3.261,4708.98 +3451.0,reorder item,2019-07-17 13:53:16.000Z, ,"['881315']", , , ,0.172,699.0 +3452.0,confirm order,2019-07-17 13:54:16.000Z, , ,"['990340']", , ,3.06,3233.99 +3453.0,item out of stock,2019-07-17 13:56:28.000Z, ,"['881379']", , , ,0.21,529.0 +3454.0,reorder item,2019-07-17 13:56:34.000Z, ,"['881354']", , , ,0.78,99.99 +3455.0,reorder item,2019-07-17 14:04:21.000Z, ,"['881207']", , , ,1.37,2500.0 +3456.0,reorder item,2019-07-17 14:05:29.000Z, ,"['881365']", , , ,0.28,89.99 +3457.0,pick item,2019-07-17 14:05:45.000Z, ,"['881369']", , , ,0.28,89.99 +3458.0,reorder item,2019-07-17 14:37:56.000Z, ,"['881199']", , , ,0.188,1149.0 +3459.0,package delivered,2019-07-17 14:38:22.000Z, , , ,"['660189']", ,2.5860000000000003,3011.97 +3460.0,confirm order,2019-07-17 14:38:29.000Z, , ,"['990345']", , ,0.978,629.0 +3461.0,pick item,2019-07-17 14:38:33.000Z, ,"['881223']", , , ,0.28,449.0 +3462.0,pick item,2019-07-17 14:39:10.000Z, ,"['881387']", , , ,1.28,149.99 +3463.0,pick item,2019-07-17 14:44:06.000Z, ,"['881388']", , , ,0.21,529.0 +3464.0,package delivered,2019-07-17 14:48:35.000Z, , , ,"['660183']", ,3.261,4708.98 +3465.0,item out of stock,2019-07-17 15:01:09.000Z, ,"['881346']", , , ,0.78,99.99 +3466.0,pick item,2019-07-17 15:17:00.000Z, ,"['881219']", , , ,0.44,476.0 +3467.0,pick item,2019-07-17 15:18:24.000Z, ,"['881374']", , , ,0.188,1149.0 +3468.0,place order,2019-07-17 15:25:10.000Z, ,"['881395','881393','881397','881394','881396']","['990347']", , ,2.269,1580.98 +3469.0,pick item,2019-07-17 15:28:15.000Z, ,"['881365']", , , ,0.28,89.99 +3470.0,reorder item,2019-07-17 15:47:59.000Z, ,"['881275']", , , ,1.37,2500.0 +3471.0,confirm order,2019-07-17 15:48:10.000Z, , ,"['990344']", , ,5.597,3410.95 +3472.0,pick item,2019-07-17 15:57:58.000Z, ,"['881256']", , , ,0.2,39.99 +3473.0,create package,2019-07-17 15:57:58.000Z, ,"['881125','881302','881301','881296','881071','881299','881295','881313']", ,"['660197']", ,3.657,5391.97 +3474.0,confirm order,2019-07-17 15:58:09.000Z, , ,"['990337']", , ,5.1560000000000015,4172.96 +3475.0,pick item,2019-07-17 16:10:30.000Z, ,"['881391']", , , ,0.483,495.0 +3476.0,pick item,2019-07-17 16:18:19.000Z, ,"['881236']", , , ,0.78,99.99 +3477.0,place order,2019-07-17 17:10:07.000Z, ,"['881399','881401','881400','881398']","['990348']", , ,2.465,3259.0 +3478.0,confirm order,2019-07-17 17:13:28.000Z, , ,"['990332']", , ,5.138,6703.98 +3479.0,reorder item,2019-07-17 18:21:11.000Z, ,"['881346']", , , ,0.78,99.99 +3480.0,failed delivery,2019-07-17 18:45:34.000Z, , , ,"['660190']", ,2.2430000000000003,674.98 +3481.0,confirm order,2019-07-17 18:56:58.000Z, , ,"['990343']", , ,0.49,623.99 +3482.0,place order,2019-07-17 19:59:49.000Z, ,"['881402','881403','881404']","['990349']", , ,3.13,2734.98 +3483.0,place order,2019-07-18 06:16:48.000Z, ,"['881407','881408','881405','881406']","['990350']", , ,1.366,1402.98 +3484.0,item out of stock,2019-07-18 06:43:01.000Z, ,"['881385']", , , ,0.483,79.99 +3485.0,failed delivery,2019-07-18 07:05:57.000Z, , , ,"['660188']", ,2.81,2798.99 +3486.0,item out of stock,2019-07-18 07:09:22.000Z, ,"['881341']", , , ,0.44,476.0 +3487.0,pay order,2019-07-18 07:18:55.000Z, , ,"['990321']", , ,3.567,2983.95 +3488.0,confirm order,2019-07-18 07:21:54.000Z, , ,"['990346']", , ,0.483,500.0 +3489.0,pick item,2019-07-18 07:28:21.000Z, ,"['881242']", , , ,1.28,149.99 +3490.0,item out of stock,2019-07-18 07:46:51.000Z, ,"['881406']", , , ,0.188,1149.0 +3491.0,item out of stock,2019-07-18 07:48:11.000Z, ,"['881380']", , , ,0.28,89.99 +3492.0,send package,2019-07-18 07:54:43.000Z, , , ,"['660196']", ,5.774,4613.96 +3493.0,pick item,2019-07-18 07:54:50.000Z, ,"['881270']", , , ,0.78,99.99 +3494.0,place order,2019-07-18 08:14:59.000Z, ,"['881409','881410','881412','881411','881413']","['990351']", , ,5.78,5144.97 +3495.0,pick item,2019-07-18 08:15:47.000Z, ,"['881366']", , , ,0.172,699.0 +3496.0,item out of stock,2019-07-18 08:18:16.000Z, ,"['881407']", , , ,0.495,129.0 +3497.0,send package,2019-07-18 08:24:22.000Z, , , ,"['660192']", ,2.892,2755.98 +3498.0,pick item,2019-07-18 08:27:55.000Z, ,"['881245']", , , ,0.495,129.0 +3499.0,pick item,2019-07-18 08:31:07.000Z, ,"['881347']", , , ,0.483,79.99 +3500.0,pay order,2019-07-18 08:31:22.000Z, , ,"['990333']", , ,2.343,314.96 +3501.0,pick item,2019-07-18 08:39:17.000Z, ,"['881196']", , , ,0.166,799.0 +3502.0,create package,2019-07-18 08:39:17.000Z, ,"['881214','881217','881219']", ,"['660198']", ,2.305,3105.0 +3503.0,item out of stock,2019-07-18 08:48:00.000Z, ,"['881400']", , , ,0.44,476.0 +3504.0,confirm order,2019-07-18 08:49:32.000Z, , ,"['990349']", , ,3.13,2734.98 +3505.0,item out of stock,2019-07-18 09:03:47.000Z, ,"['881372']", , , ,1.37,2500.0 +3506.0,pay order,2019-07-18 09:12:07.000Z, , ,"['990300']", , ,3.113,2704.97 +3507.0,pick item,2019-07-18 09:24:40.000Z, ,"['881394']", , , ,0.44,476.0 +3508.0,item out of stock,2019-07-18 09:26:42.000Z, ,"['881392']", , , ,0.483,495.0 +3509.0,item out of stock,2019-07-18 09:37:03.000Z, ,"['881377']", , , ,0.483,79.99 +3510.0,package delivered,2019-07-18 09:41:10.000Z, , , ,"['660195']", ,1.267,3241.0 +3511.0,pick item,2019-07-18 09:49:32.000Z, ,"['881381']", , , ,0.483,1099.0 +3512.0,package delivered,2019-07-18 09:49:40.000Z, , , ,"['660190']", ,2.2430000000000003,674.98 +3513.0,place order,2019-07-18 09:49:46.000Z, ,"['881415','881417','881418','881416','881414']","['990352']", , ,2.511,1938.97 +3514.0,reorder item,2019-07-18 09:52:19.000Z, ,"['881154']", , , ,0.98,129.99 +3515.0,pick item,2019-07-18 09:53:25.000Z, ,"['880918']", , , ,0.483,1099.0 +3516.0,create package,2019-07-18 09:53:25.000Z, ,"['881254','881234','881242','881394','880880','881314','881236','881316']", ,"['660199']", ,5.92,2406.96 +3517.0,pick item,2019-07-18 09:55:27.000Z, ,"['881308']", , , ,0.166,799.0 +3518.0,pick item,2019-07-18 09:59:55.000Z, ,"['881361']", , , ,0.2,39.99 +3519.0,confirm order,2019-07-18 10:07:23.000Z, , ,"['990347']", , ,2.269,1580.98 +3520.0,pick item,2019-07-18 10:13:20.000Z, ,"['880728']", , , ,0.38,29.99 +3521.0,pay order,2019-07-18 10:15:16.000Z, , ,"['990332']", , ,5.138,6703.98 +3522.0,item out of stock,2019-07-18 10:19:57.000Z, ,"['881376']", , , ,0.78,99.99 +3523.0,pick item,2019-07-18 10:43:30.000Z, ,"['881150']", , , ,0.188,1149.0 +3524.0,pick item,2019-07-18 10:47:40.000Z, ,"['881373']", , , ,0.2,39.99 +3525.0,send package,2019-07-18 10:50:35.000Z, , , ,"['660197']", ,3.657,5391.97 +3526.0,confirm order,2019-07-18 11:06:22.000Z, , ,"['990352']", , ,2.511,1938.97 +3527.0,send package,2019-07-18 11:08:53.000Z, , , ,"['660199']", ,5.92,2406.96 +3528.0,pick item,2019-07-18 11:09:13.000Z, ,"['881383']", , , ,0.483,1099.0 +3529.0,pick item,2019-07-18 11:22:58.000Z, ,"['881294']", , , ,0.483,79.99 +3530.0,pick item,2019-07-18 11:27:09.000Z, ,"['881344']", , , ,0.28,449.0 +3531.0,create package,2019-07-18 11:27:09.000Z, ,"['880412','880983','881391','881351','880546','881350','881352']", ,"['660200']", ,6.178999999999999,4459.97 +3532.0,place order,2019-07-18 11:59:19.000Z, ,"['881421','881426','881422','881420','881423','881425','881419','881424']","['990353']", , ,5.933,4589.95 +3533.0,reorder item,2019-07-18 12:03:27.000Z, ,"['881345']", , , ,0.172,699.0 +3534.0,payment reminder,2019-07-18 12:03:38.000Z, , ,"['990231']", , ,3.696,4281.98 +3535.0,pick item,2019-07-18 12:07:47.000Z, ,"['881408']", , , ,0.2,39.99 +3536.0,package delivered,2019-07-18 12:15:28.000Z, , , ,"['660192']", ,2.892,2755.98 +3537.0,send package,2019-07-18 12:28:00.000Z, , , ,"['660200']", ,6.178999999999999,4459.97 +3538.0,pick item,2019-07-18 12:33:43.000Z, ,"['881131']", , , ,0.172,699.0 +3539.0,pick item,2019-07-18 12:40:09.000Z, ,"['881382']", , , ,0.2,39.99 +3540.0,send package,2019-07-18 13:09:28.000Z, , , ,"['660194']", ,3.429,5368.98 +3541.0,pay order,2019-07-18 13:25:08.000Z, , ,"['990342']", , ,0.966,1183.99 +3542.0,pick item,2019-07-18 13:25:25.000Z, ,"['881243']", , , ,0.38,29.99 +3543.0,pay order,2019-07-18 13:45:04.000Z, , ,"['990292']", , ,0.6829999999999999,539.99 +3544.0,pay order,2019-07-18 14:03:14.000Z, , ,"['990334']", , ,2.8960000000000004,3203.99 +3545.0,pick item,2019-07-18 14:06:04.000Z, ,"['881390']", , , ,0.495,129.0 +3546.0,pick item,2019-07-18 14:07:21.000Z, ,"['880974']", , , ,1.28,149.99 +3547.0,pick item,2019-07-18 14:12:43.000Z, ,"['881403']", , , ,0.98,129.99 +3548.0,create package,2019-07-18 14:12:43.000Z, ,"['881256','881167','881353','880918']", ,"['660201']", ,2.333,3728.98 +3549.0,place order,2019-07-18 14:18:26.000Z, ,"['881427','881428']","['990354']", , ,0.76,64.98 +3550.0,pick item,2019-07-18 14:29:02.000Z, ,"['881409']", , , ,0.2,39.99 +3551.0,package delivered,2019-07-18 14:29:05.000Z, , , ,"['660199']", ,5.92,2406.96 +3552.0,pick item,2019-07-18 14:39:15.000Z, ,"['881398']", , , ,0.495,129.0 +3553.0,pick item,2019-07-18 14:44:19.000Z, ,"['881364']", , , ,0.166,799.0 +3554.0,pay order,2019-07-18 14:48:23.000Z, , ,"['990317']", , ,2.714,3552.98 +3555.0,pick item,2019-07-18 15:03:37.000Z, ,"['880979']", , , ,0.21,529.0 +3556.0,create package,2019-07-18 15:03:37.000Z, ,"['881362','881160','881358','881361','881364']", ,"['660202']", ,2.509,1098.96 +3557.0,pay order,2019-07-18 15:10:09.000Z, , ,"['990186']", , ,1.151,2137.99 +3558.0,pick item,2019-07-18 15:12:11.000Z, ,"['881423']", , , ,0.2,39.99 +3559.0,confirm order,2019-07-18 15:18:14.000Z, , ,"['990351']", , ,5.78,5144.97 +3560.0,place order,2019-07-18 15:56:39.000Z, ,"['881429','881430']","['990355']", , ,1.08,134.98 +3561.0,package delivered,2019-07-18 16:16:09.000Z, , , ,"['660193']", ,7.233,10201.95 +3562.0,reorder item,2019-07-18 16:31:18.000Z, ,"['881385']", , , ,0.483,79.99 +3563.0,package delivered,2019-07-18 17:33:14.000Z, , , ,"['660197']", ,3.657,5391.97 +3564.0,item out of stock,2019-07-18 17:36:49.000Z, ,"['881402']", , , ,1.37,2500.0 +3565.0,pay order,2019-07-18 18:26:26.000Z, , ,"['990238']", , ,3.228,1543.96 +3566.0,place order,2019-07-18 18:29:32.000Z, ,"['881432','881434','881435','881431','881433']","['990356']", , ,3.55,2910.97 +3567.0,reorder item,2019-07-18 18:38:17.000Z, ,"['881355']", , , ,0.166,799.0 +3568.0,place order,2019-07-18 22:15:06.000Z, ,"['881441','881439','881438','881437','881436','881440']","['990357']", , ,2.8560000000000003,6700.0 +3569.0,create package,2019-07-18 23:00:00.000Z, ,"['881150','881349','881348','881403','881245','881270','881347']", ,"['660203']", ,4.006,1717.95 +3570.0,pick item,2019-07-19 06:38:07.000Z, ,"['881438']", , , ,0.483,1099.0 +3571.0,send package,2019-07-19 06:51:03.000Z, , , ,"['660198']", ,2.305,3105.0 +3572.0,pick item,2019-07-19 06:54:28.000Z, ,"['881436']", , , ,0.172,699.0 +3573.0,confirm order,2019-07-19 06:56:27.000Z, , ,"['990354']", , ,0.76,64.98 +3574.0,place order,2019-07-19 07:18:24.000Z, ,"['881442','881443']","['990358']", , ,1.65,2954.0 +3575.0,pick item,2019-07-19 07:24:20.000Z, ,"['881412']", , , ,1.48,199.99 +3576.0,send package,2019-07-19 07:37:18.000Z, , , ,"['660202']", ,2.509,1098.96 +3577.0,pick item,2019-07-19 08:09:06.000Z, ,"['881414']", , , ,0.188,1149.0 +3578.0,package delivered,2019-07-19 08:22:34.000Z, , , ,"['660188']", ,2.81,2798.99 +3579.0,pick item,2019-07-19 08:23:52.000Z, ,"['881425']", , , ,0.44,476.0 +3580.0,send package,2019-07-19 08:27:57.000Z, , , ,"['660203']", ,4.006,1717.95 +3581.0,pay order,2019-07-19 08:31:03.000Z, , ,"['990245']", , ,0.483,500.0 +3582.0,reorder item,2019-07-19 08:31:24.000Z, ,"['881380']", , , ,0.28,89.99 +3583.0,item out of stock,2019-07-19 08:33:42.000Z, ,"['881384']", , , ,0.483,79.99 +3584.0,failed delivery,2019-07-19 08:38:17.000Z, , , ,"['660198']", ,2.305,3105.0 +3585.0,confirm order,2019-07-19 08:52:45.000Z, , ,"['990358']", , ,1.65,2954.0 +3586.0,pay order,2019-07-19 08:52:47.000Z, , ,"['990307']", , ,2.54,274.97 +3587.0,confirm order,2019-07-19 08:55:34.000Z, , ,"['990324']", , ,1.429,2002.99 +3588.0,place order,2019-07-19 08:56:35.000Z, ,"['881446','881444','881445']","['990359']", , ,1.258,1682.0 +3589.0,pick item,2019-07-19 09:12:30.000Z, ,"['881427']", , , ,0.38,29.99 +3590.0,pick item,2019-07-19 09:14:48.000Z, ,"['881393']", , , ,0.483,495.0 +3591.0,pick item,2019-07-19 09:22:11.000Z, ,"['880927']", , , ,0.38,29.99 +3592.0,pick item,2019-07-19 09:28:35.000Z, ,"['881416']", , , ,0.78,99.99 +3593.0,pay order,2019-07-19 09:32:44.000Z, , ,"['990320']", , ,4.207,1282.97 +3594.0,package delivered,2019-07-19 09:55:20.000Z, , , ,"['660194']", ,3.429,5368.98 +3595.0,package delivered,2019-07-19 09:57:18.000Z, , , ,"['660196']", ,5.774,4613.96 +3596.0,package delivered,2019-07-19 09:58:02.000Z, , , ,"['660200']", ,6.178999999999999,4459.97 +3597.0,confirm order,2019-07-19 09:59:29.000Z, , ,"['990357']", , ,2.8560000000000003,6700.0 +3598.0,pick item,2019-07-19 10:07:34.000Z, ,"['881252']", , , ,0.2,39.99 +3599.0,send package,2019-07-19 10:17:10.000Z, , , ,"['660201']", ,2.333,3728.98 +3600.0,pick item,2019-07-19 10:20:08.000Z, ,"['881418']", , , ,0.483,495.0 +3601.0,create package,2019-07-19 10:20:08.000Z, ,"['881375','881304','881398','881373','881102','881099','881374']", ,"['660204']", ,4.606,2242.96 +3602.0,pick item,2019-07-19 10:27:27.000Z, ,"['881153']", , , ,0.78,99.99 +3603.0,item out of stock,2019-07-19 10:41:45.000Z, ,"['881340']", , , ,0.78,99.99 +3604.0,item out of stock,2019-07-19 10:43:47.000Z, ,"['881440']", , , ,0.188,1149.0 +3605.0,confirm order,2019-07-19 10:44:36.000Z, , ,"['990355']", , ,1.08,134.98 +3606.0,pick item,2019-07-19 11:10:30.000Z, ,"['881435']", , , ,1.25,2200.0 +3607.0,place order,2019-07-19 11:12:58.000Z, ,"['881449','881448','881447','881450','881451']","['990360']", , ,2.422,1452.97 +3608.0,pick item,2019-07-19 11:37:42.000Z, ,"['881444']", , , ,0.495,129.0 +3609.0,package delivered,2019-07-19 11:57:59.000Z, , , ,"['660202']", ,2.509,1098.96 +3610.0,pick item,2019-07-19 12:18:18.000Z, ,"['881360']", , , ,1.48,199.99 +3611.0,pick item,2019-07-19 12:20:14.000Z, ,"['881192']", , , ,0.28,89.99 +3612.0,pick item,2019-07-19 12:28:22.000Z, ,"['881437']", , , ,1.25,2200.0 +3613.0,pick item,2019-07-19 12:36:20.000Z, ,"['881345']", , , ,0.172,699.0 +3614.0,create package,2019-07-19 12:36:20.000Z, ,"['881273','881223','880970','881369','881224','881444']", ,"['660205']", ,2.15,1922.98 +3615.0,pick item,2019-07-19 12:44:01.000Z, ,"['881399']", , , ,0.28,449.0 +3616.0,place order,2019-07-19 12:45:43.000Z, ,"['881453','881452']","['990361']", , ,1.853,3000.0 +3617.0,confirm order,2019-07-19 12:49:16.000Z, , ,"['990348']", , ,2.465,3259.0 +3618.0,pick item,2019-07-19 13:00:56.000Z, ,"['881441']", , , ,0.28,449.0 +3619.0,package delivered,2019-07-19 13:03:16.000Z, , , ,"['660198']", ,2.305,3105.0 +3620.0,pick item,2019-07-19 13:15:30.000Z, ,"['881443']", , , ,1.37,2500.0 +3621.0,package delivered,2019-07-19 13:25:52.000Z, , , ,"['660203']", ,4.006,1717.95 +3622.0,pick item,2019-07-19 14:06:31.000Z, ,"['881432']", , , ,0.88,89.99 +3623.0,item out of stock,2019-07-19 14:06:57.000Z, ,"['881421']", , , ,0.78,99.99 +3624.0,reorder item,2019-07-19 14:16:40.000Z, ,"['881400']", , , ,0.44,476.0 +3625.0,item out of stock,2019-07-19 14:17:30.000Z, ,"['881447']", , , ,0.172,699.0 +3626.0,pay order,2019-07-19 14:22:56.000Z, , ,"['990224']", , ,3.035,862.98 +3627.0,pick item,2019-07-19 14:28:30.000Z, ,"['881410']", , , ,1.25,2200.0 +3628.0,pay order,2019-07-19 14:35:42.000Z, , ,"['990325']", , ,2.97,2830.99 +3629.0,pay order,2019-07-19 14:39:09.000Z, , ,"['990295']", , ,1.809,1063.97 +3630.0,pick item,2019-07-19 14:39:30.000Z, ,"['881401']", , , ,1.25,2200.0 +3631.0,create package,2019-07-19 14:39:30.000Z, ,"['881409','881196','881423','881410','881425','881308','880728','881412','881179']", ,"['660206']", ,5.2620000000000005,4713.95 +3632.0,reorder item,2019-07-19 14:45:52.000Z, ,"['881298']", , , ,0.44,476.0 +3633.0,place order,2019-07-19 14:51:14.000Z, ,"['881455','881454','881456','881457']","['990362']", , ,1.6230000000000002,2447.99 +3634.0,pick item,2019-07-19 15:11:02.000Z, ,"['881312']", , , ,0.483,1099.0 +3635.0,send package,2019-07-19 15:22:44.000Z, , , ,"['660205']", ,2.15,1922.98 +3636.0,pick item,2019-07-19 15:33:10.000Z, ,"['881265']", , , ,0.28,89.99 +3637.0,reorder item,2019-07-19 15:49:45.000Z, ,"['881421']", , , ,0.78,99.99 +3638.0,item out of stock,2019-07-19 16:18:45.000Z, ,"['881454']", , , ,0.172,699.0 +3639.0,item out of stock,2019-07-19 16:20:02.000Z, ,"['881293']", , , ,0.78,99.99 +3640.0,pick item,2019-07-19 16:53:18.000Z, ,"['881385']", , , ,0.483,79.99 +3641.0,pay order,2019-07-19 16:58:59.000Z, , ,"['990291']", , ,6.256,9407.99 +3642.0,place order,2019-07-19 17:02:15.000Z, ,"['881458','881459']","['990363']", , ,0.452,1153.0 +3643.0,reorder item,2019-07-19 17:15:35.000Z, ,"['881379']", , , ,0.21,529.0 +3644.0,pick item,2019-07-19 19:10:10.000Z, ,"['881456']", , , ,0.483,495.0 +3645.0,pick item,2019-07-19 19:20:21.000Z, ,"['881422']", , , ,1.37,2500.0 +3646.0,place order,2019-07-19 19:44:05.000Z, ,"['881460','881462','881464','881463','881461']","['990364']", , ,2.175,1842.97 +3647.0,pick item,2019-07-19 19:44:42.000Z, ,"['881379']", , , ,0.21,529.0 +3648.0,payment reminder,2019-07-20 12:05:01.000Z, , ,"['990123']", , ,3.01,2654.97 +3649.0,place order,2019-07-20 12:24:24.000Z, ,"['881466','881465']","['990365']", , ,1.263,1203.99 +3650.0,payment reminder,2019-07-21 09:49:19.000Z, , ,"['990236']", , ,3.463,4710.99 +3651.0,place order,2019-07-21 12:42:42.000Z, ,"['881469','881468','881467','881470','881471','881472']","['990366']", , ,1.32,4106.0 +3652.0,payment reminder,2019-07-21 12:55:56.000Z, , ,"['990247']", , ,0.72,930.0 +3653.0,place order,2019-07-22 05:37:18.000Z, ,"['881478','881477','881476','881473','881474','881479','881475']","['990367']", , ,3.084,3456.98 +3654.0,pick item,2019-07-22 07:21:19.000Z, ,"['881279']", , , ,0.495,129.0 +3655.0,item out of stock,2019-07-22 07:22:36.000Z, ,"['881442']", , , ,0.28,449.0 +3656.0,pick item,2019-07-22 07:25:09.000Z, ,"['881259']", , , ,0.483,1099.0 +3657.0,pick item,2019-07-22 07:35:39.000Z, ,"['881433']", , , ,0.78,99.99 +3658.0,create package,2019-07-22 07:35:39.000Z, ,"['881279','881278','881408','881331']", ,"['660207']", ,1.105,737.98 +3659.0,pick item,2019-07-22 07:39:23.000Z, ,"['881475']", , , ,0.166,799.0 +3660.0,pick item,2019-07-22 07:44:41.000Z, ,"['881465']", , , ,0.483,1099.0 +3661.0,item out of stock,2019-07-22 07:49:36.000Z, ,"['881452']", , , ,1.37,2500.0 +3662.0,pick item,2019-07-22 07:55:30.000Z, ,"['881333']", , , ,1.25,2200.0 +3663.0,pay order,2019-07-22 07:56:47.000Z, , ,"['990297']", , ,1.726,1402.99 +3664.0,item out of stock,2019-07-22 08:00:21.000Z, ,"['881457']", , , ,0.188,1149.0 +3665.0,send package,2019-07-22 08:15:41.000Z, , , ,"['660206']", ,5.2620000000000005,4713.95 +3666.0,send package,2019-07-22 08:24:21.000Z, , , ,"['660204']", ,4.606,2242.96 +3667.0,place order,2019-07-22 08:24:49.000Z, ,"['881485','881482','881480','881484','881483','881481']","['990368']", , ,4.833,4359.97 +3668.0,pay order,2019-07-22 08:59:40.000Z, , ,"['990269']", , ,5.348,3453.95 +3669.0,pick item,2019-07-22 09:00:30.000Z, ,"['881395']", , , ,0.483,79.99 +3670.0,create package,2019-07-22 09:00:30.000Z, ,"['881465','880643','880974']", ,"['660208']", ,1.963,1288.98 +3671.0,reorder item,2019-07-22 09:13:18.000Z, ,"['881457']", , , ,0.188,1149.0 +3672.0,pick item,2019-07-22 09:17:27.000Z, ,"['881474']", , , ,0.38,29.99 +3673.0,pick item,2019-07-22 09:21:18.000Z, ,"['881449']", , , ,0.78,99.99 +3674.0,pay order,2019-07-22 09:22:09.000Z, , ,"['990223']", , ,3.006,899.96 +3675.0,pick item,2019-07-22 09:25:21.000Z, ,"['881429']", , , ,0.88,89.99 +3676.0,create package,2019-07-22 09:25:21.000Z, ,"['881344','881371','881379','881343','881345','881259']", ,"['660209']", ,3.108,3470.99 +3677.0,pay order,2019-07-22 09:31:26.000Z, , ,"['990311']", , ,1.42,620.98 +3678.0,payment reminder,2019-07-22 09:32:45.000Z, , ,"['990252']", , ,4.79,2674.96 +3679.0,pick item,2019-07-22 09:33:09.000Z, ,"['881462']", , , ,0.483,79.99 +3680.0,pick item,2019-07-22 09:34:50.000Z, ,"['881363']", , , ,1.37,2500.0 +3681.0,pay order,2019-07-22 09:35:15.000Z, , ,"['990341']", , ,2.148,1423.97 +3682.0,confirm order,2019-07-22 09:49:46.000Z, , ,"['990356']", , ,3.55,2910.97 +3683.0,item out of stock,2019-07-22 09:52:51.000Z, ,"['881467']", , , ,0.166,799.0 +3684.0,pick item,2019-07-22 10:01:00.000Z, ,"['881468']", , , ,0.166,799.0 +3685.0,item out of stock,2019-07-22 10:04:22.000Z, ,"['881461']", , , ,0.98,129.99 +3686.0,place order,2019-07-22 10:09:25.000Z, ,"['881487','881488','881489','881490','881486']","['990369']", , ,2.678,1842.97 +3687.0,item out of stock,2019-07-22 10:23:09.000Z, ,"['881487']", , , ,0.166,799.0 +3688.0,confirm order,2019-07-22 10:27:11.000Z, , ,"['990359']", , ,1.258,1682.0 +3689.0,confirm order,2019-07-22 11:06:28.000Z, , ,"['990361']", , ,1.853,3000.0 +3690.0,failed delivery,2019-07-22 11:21:29.000Z, , , ,"['660205']", ,2.15,1922.98 +3691.0,pick item,2019-07-22 11:34:17.000Z, ,"['881486']", , , ,0.172,699.0 +3692.0,reorder item,2019-07-22 11:35:23.000Z, ,"['881402']", , , ,1.37,2500.0 +3693.0,item out of stock,2019-07-22 11:38:02.000Z, ,"['881420']", , , ,0.483,1099.0 +3694.0,place order,2019-07-22 11:38:38.000Z, ,"['881492','881493','881495','881494','881491']","['990370']", , ,3.705,3022.98 +3695.0,pick item,2019-07-22 11:56:29.000Z, ,"['881488']", , , ,0.28,89.99 +3696.0,pay order,2019-07-22 12:00:35.000Z, , ,"['990351']", , ,5.78,5144.97 +3697.0,pick item,2019-07-22 12:13:21.000Z, ,"['881448']", , , ,0.21,529.0 +3698.0,create package,2019-07-22 12:13:21.000Z, ,"['881438','881475','881292','881462','881474','881441','881437','881436']", ,"['660210']", ,3.709,5484.98 +3699.0,reorder item,2019-07-22 12:22:33.000Z, ,"['881372']", , , ,1.37,2500.0 +3700.0,confirm order,2019-07-22 12:40:01.000Z, , ,"['990362']", , ,1.6230000000000002,2447.99 +3701.0,reorder item,2019-07-22 12:41:23.000Z, ,"['881384']", , , ,0.483,79.99 +3702.0,pay order,2019-07-22 12:44:23.000Z, , ,"['990352']", , ,2.511,1938.97 +3703.0,send package,2019-07-22 12:46:18.000Z, , , ,"['660210']", ,3.709,5484.98 +3704.0,confirm order,2019-07-22 12:52:04.000Z, , ,"['990350']", , ,1.366,1402.98 +3705.0,pay order,2019-07-22 13:06:14.000Z, , ,"['990358']", , ,1.65,2954.0 +3706.0,payment reminder,2019-07-22 13:07:55.000Z, , ,"['990250']", , ,2.01,3020.99 +3707.0,pick item,2019-07-22 13:19:03.000Z, ,"['881290']", , , ,1.28,149.99 +3708.0,reorder item,2019-07-22 13:30:15.000Z, ,"['881377']", , , ,0.483,79.99 +3709.0,reorder item,2019-07-22 13:35:02.000Z, ,"['881340']", , , ,0.78,99.99 +3710.0,place order,2019-07-22 13:37:03.000Z, ,"['881497','881498','881496','881499']","['990371']", , ,2.0380000000000003,3783.98 +3711.0,pick item,2019-07-22 13:43:44.000Z, ,"['881141']", , , ,0.21,529.0 +3712.0,send package,2019-07-22 13:43:57.000Z, , , ,"['660207']", ,1.105,737.98 +3713.0,package delivered,2019-07-22 13:44:05.000Z, , , ,"['660201']", ,2.333,3728.98 +3714.0,pick item,2019-07-22 13:48:42.000Z, ,"['881255']", , , ,0.28,89.99 +3715.0,pick item,2019-07-22 13:55:57.000Z, ,"['881297']", , , ,0.483,79.99 +3716.0,item out of stock,2019-07-22 13:55:59.000Z, ,"['881490']", , , ,1.28,149.99 +3717.0,payment reminder,2019-07-22 14:05:28.000Z, , ,"['990240']", , ,0.762,1262.99 +3718.0,pick item,2019-07-22 14:09:43.000Z, ,"['881154']", , , ,0.98,129.99 +3719.0,confirm order,2019-07-22 14:23:46.000Z, , ,"['990365']", , ,1.263,1203.99 +3720.0,item out of stock,2019-07-22 14:24:54.000Z, ,"['881257']", , , ,0.28,89.99 +3721.0,reorder item,2019-07-22 14:25:17.000Z, ,"['881406']", , , ,0.188,1149.0 +3722.0,reorder item,2019-07-22 14:31:01.000Z, ,"['881293']", , , ,0.78,99.99 +3723.0,reorder item,2019-07-22 14:45:59.000Z, ,"['881447']", , , ,0.172,699.0 +3724.0,pick item,2019-07-22 14:48:11.000Z, ,"['881406']", , , ,0.188,1149.0 +3725.0,reorder item,2019-07-22 15:01:22.000Z, ,"['881269']", , , ,1.25,2200.0 +3726.0,pick item,2019-07-22 15:03:53.000Z, ,"['881378']", , , ,0.483,1099.0 +3727.0,pick item,2019-07-22 15:04:03.000Z, ,"['881389']", , , ,1.48,199.99 +3728.0,create package,2019-07-22 15:04:03.000Z, ,"['881280']", ,"['660211']", ,0.166,799.0 +3729.0,pick item,2019-07-22 15:05:46.000Z, ,"['881275']", , , ,1.37,2500.0 +3730.0,create package,2019-07-22 15:05:46.000Z, ,"['880979','881378','881141','881311','881443']", ,"['660212']", ,3.523,6857.0 +3731.0,pick item,2019-07-22 15:32:04.000Z, ,"['881417']", , , ,0.28,89.99 +3732.0,place order,2019-07-22 15:33:54.000Z, ,"['881500','881503','881504','881502','881501','881505']","['990372']", , ,5.523,4814.96 +3733.0,confirm order,2019-07-22 15:35:44.000Z, , ,"['990353']", , ,5.933,4589.95 +3734.0,pick item,2019-07-22 15:39:57.000Z, ,"['881357']", , , ,0.483,495.0 +3735.0,pick item,2019-07-22 16:00:58.000Z, ,"['881396']", , , ,0.483,495.0 +3736.0,pick item,2019-07-22 16:35:20.000Z, ,"['881336']", , , ,1.48,199.99 +3737.0,confirm order,2019-07-22 17:05:55.000Z, , ,"['990360']", , ,2.422,1452.97 +3738.0,pick item,2019-07-22 17:12:11.000Z, ,"['881453']", , , ,0.483,495.0 +3739.0,create package,2019-07-22 17:12:11.000Z, ,"['881388','881418','881382','881416','881486','881131','881449','881365','881383','881414','881385','881389','881381','881366','881488','881417','881448','881387']", ,"['660213']", ,8.416,7936.91 +3740.0,place order,2019-07-22 17:27:35.000Z, ,"['881507','881506','881510','881508','881509']","['990373']", , ,1.6840000000000002,3730.99 +3741.0,pick item,2019-07-22 18:01:08.000Z, ,"['881397']", , , ,0.38,29.99 +3742.0,pick item,2019-07-22 18:48:33.000Z, ,"['881479']", , , ,0.44,476.0 +3743.0,place order,2019-07-22 20:34:45.000Z, ,"['881511','881515','881512','881514','881513','881516']","['990374']", , ,2.552,2321.97 +3744.0,confirm order,2019-07-22 20:38:08.000Z, , ,"['990366']", , ,1.32,4106.0 +3745.0,pick item,2019-07-23 06:40:05.000Z, ,"['881501']", , , ,0.78,99.99 +3746.0,place order,2019-07-23 07:01:05.000Z, ,"['881518','881517','881520','881521','881523','881519','881522']","['990375']", , ,2.932,3700.97 +3747.0,pick item,2019-07-23 07:02:47.000Z, ,"['881472']", , , ,0.172,699.0 +3748.0,confirm order,2019-07-23 07:20:32.000Z, , ,"['990368']", , ,4.833,4359.97 +3749.0,item out of stock,2019-07-23 07:22:14.000Z, ,"['881522']", , , ,0.166,799.0 +3750.0,pick item,2019-07-23 07:26:32.000Z, ,"['881411']", , , ,1.48,199.99 +3751.0,pick item,2019-07-23 07:56:54.000Z, ,"['881293']", , , ,0.78,99.99 +3752.0,pick item,2019-07-23 07:57:43.000Z, ,"['881459']", , , ,0.172,699.0 +3753.0,reorder item,2019-07-23 08:05:14.000Z, ,"['881440']", , , ,0.188,1149.0 +3754.0,pick item,2019-07-23 08:09:57.000Z, ,"['881115']", , , ,1.25,2200.0 +3755.0,package delivered,2019-07-23 08:10:53.000Z, , , ,"['660206']", ,5.2620000000000005,4713.95 +3756.0,place order,2019-07-23 08:21:57.000Z, ,"['881525','881524']","['990376']", , ,1.48,194.98 +3757.0,item out of stock,2019-07-23 08:25:26.000Z, ,"['881471']", , , ,0.166,799.0 +3758.0,package delivered,2019-07-23 08:25:36.000Z, , , ,"['660210']", ,3.709,5484.98 +3759.0,pick item,2019-07-23 08:26:48.000Z, ,"['881506']", , , ,0.483,1099.0 +3760.0,pick item,2019-07-23 08:34:47.000Z, ,"['881405']", , , ,0.483,79.99 +3761.0,send package,2019-07-23 08:46:10.000Z, , , ,"['660208']", ,1.963,1288.98 +3762.0,pick item,2019-07-23 08:48:16.000Z, ,"['881329']", , , ,0.21,529.0 +3763.0,pick item,2019-07-23 08:48:34.000Z, ,"['881463']", , , ,0.166,799.0 +3764.0,confirm order,2019-07-23 08:52:16.000Z, , ,"['990364']", , ,2.175,1842.97 +3765.0,pick item,2019-07-23 09:01:10.000Z, ,"['881439']", , , ,0.483,1099.0 +3766.0,reorder item,2019-07-23 09:15:57.000Z, ,"['881454']", , , ,0.172,699.0 +3767.0,pick item,2019-07-23 09:17:19.000Z, ,"['881517']", , , ,0.98,129.99 +3768.0,confirm order,2019-07-23 09:19:55.000Z, , ,"['990369']", , ,2.678,1842.97 +3769.0,pick item,2019-07-23 09:21:35.000Z, ,"['881415']", , , ,0.78,99.99 +3770.0,pick item,2019-07-23 09:27:40.000Z, ,"['881476']", , , ,1.48,199.99 +3771.0,item out of stock,2019-07-23 09:51:04.000Z, ,"['881434']", , , ,0.2,39.99 +3772.0,pick item,2019-07-23 09:53:20.000Z, ,"['881509']", , , ,0.483,1099.0 +3773.0,place order,2019-07-23 10:03:42.000Z, ,"['881528','881527','881526']","['990377']", , ,0.821,2602.0 +3774.0,pick item,2019-07-23 10:11:47.000Z, ,"['881075']", , , ,0.44,476.0 +3775.0,create package,2019-07-23 10:11:47.000Z, ,"['881312','881294','881297','881459']", ,"['660214']", ,1.621,1957.98 +3776.0,pick item,2019-07-23 10:13:32.000Z, ,"['881424']", , , ,0.2,39.99 +3777.0,reorder item,2019-07-23 10:14:35.000Z, ,"['881487']", , , ,0.166,799.0 +3778.0,item out of stock,2019-07-23 10:20:42.000Z, ,"['881484']", , , ,0.88,89.99 +3779.0,payment reminder,2019-07-23 10:25:58.000Z, , ,"['990260']", , ,4.621,4209.97 +3780.0,pick item,2019-07-23 10:34:11.000Z, ,"['881359']", , , ,0.28,449.0 +3781.0,item out of stock,2019-07-23 10:37:44.000Z, ,"['881499']", , , ,1.37,2500.0 +3782.0,pick item,2019-07-23 10:52:01.000Z, ,"['881334']", , , ,0.28,449.0 +3783.0,package delivered,2019-07-23 11:05:06.000Z, , , ,"['660208']", ,1.963,1288.98 +3784.0,send package,2019-07-23 11:11:11.000Z, , , ,"['660213']", ,8.416,7936.91 +3785.0,reorder item,2019-07-23 11:23:06.000Z, ,"['881376']", , , ,0.78,99.99 +3786.0,payment reminder,2019-07-23 11:24:30.000Z, , ,"['990257']", , ,1.86,3123.99 +3787.0,pay order,2019-07-23 11:25:33.000Z, , ,"['990339']", , ,0.49,623.99 +3788.0,place order,2019-07-23 11:27:11.000Z, ,"['881533','881532','881531','881530','881529','881534']","['990378']", , ,2.7,494.94 +3789.0,pick item,2019-07-23 11:39:03.000Z, ,"['881446']", , , ,0.28,449.0 +3790.0,create package,2019-07-23 11:39:03.000Z, ,"['881395','881427','881393','881252','881397','881243','881396']", ,"['660215']", ,2.789,1199.95 +3791.0,reorder item,2019-07-23 12:04:09.000Z, ,"['881248']", , , ,1.25,2200.0 +3792.0,pick item,2019-07-23 12:09:57.000Z, ,"['881483']", , , ,1.37,2500.0 +3793.0,pay order,2019-07-23 12:10:25.000Z, , ,"['990310']", , ,1.853,3604.0 +3794.0,reorder item,2019-07-23 12:13:12.000Z, ,"['881341']", , , ,0.44,476.0 +3795.0,pick item,2019-07-23 12:15:06.000Z, ,"['881428']", , , ,0.38,29.99 +3796.0,reorder item,2019-07-23 12:22:38.000Z, ,"['881407']", , , ,0.495,129.0 +3797.0,confirm order,2019-07-23 12:29:44.000Z, , ,"['990372']", , ,5.523,4814.96 +3798.0,confirm order,2019-07-23 12:34:36.000Z, , ,"['990367']", , ,3.084,3456.98 +3799.0,pick item,2019-07-23 12:36:31.000Z, ,"['881510']", , , ,0.38,29.99 +3800.0,confirm order,2019-07-23 12:42:20.000Z, , ,"['990376']", , ,1.48,194.98 +3801.0,failed delivery,2019-07-23 12:45:16.000Z, , , ,"['660207']", ,1.105,737.98 +3802.0,send package,2019-07-23 12:57:00.000Z, , , ,"['660214']", ,1.621,1957.98 +3803.0,confirm order,2019-07-23 12:57:08.000Z, , ,"['990373']", , ,1.6840000000000002,3730.99 +3804.0,pick item,2019-07-23 12:58:38.000Z, ,"['881202']", , , ,0.483,1099.0 +3805.0,failed delivery,2019-07-23 13:04:26.000Z, , , ,"['660204']", ,4.606,2242.96 +3806.0,pick item,2019-07-23 13:06:24.000Z, ,"['881480']", , , ,0.78,99.99 +3807.0,place order,2019-07-23 13:14:09.000Z, ,"['881535','881536']","['990379']", , ,1.446,953.99 +3808.0,send package,2019-07-23 13:17:31.000Z, , , ,"['660209']", ,3.108,3470.99 +3809.0,pick item,2019-07-23 13:22:19.000Z, ,"['881518']", , , ,0.166,799.0 +3810.0,pick item,2019-07-23 13:23:10.000Z, ,"['881431']", , , ,0.44,476.0 +3811.0,create package,2019-07-23 13:23:10.000Z, ,"['881432','881435','881390','881431','880927','881433']", ,"['660216']", ,4.225,3024.97 +3812.0,pay order,2019-07-23 13:26:26.000Z, , ,"['990369']", , ,2.678,1842.97 +3813.0,send package,2019-07-23 13:28:39.000Z, , , ,"['660216']", ,4.225,3024.97 +3814.0,pay order,2019-07-23 13:44:45.000Z, , ,"['990082']", , ,2.423,1333.96 +3815.0,pick item,2019-07-23 14:02:29.000Z, ,"['881327']", , , ,0.483,79.99 +3816.0,pick item,2019-07-23 14:03:34.000Z, ,"['881500']", , , ,0.78,99.99 +3817.0,pick item,2019-07-23 14:12:48.000Z, ,"['881493']", , , ,0.495,129.0 +3818.0,payment reminder,2019-07-23 14:13:29.000Z, , ,"['990263']", , ,1.929,1448.99 +3819.0,pay order,2019-07-23 14:18:17.000Z, , ,"['990362']", , ,1.6230000000000002,2447.99 +3820.0,item out of stock,2019-07-23 14:43:50.000Z, ,"['881520']", , , ,0.172,699.0 +3821.0,place order,2019-07-23 14:48:06.000Z, ,"['881540','881541','881538','881537','881539']","['990380']", , ,1.222,1861.98 +3822.0,confirm order,2019-07-23 14:49:52.000Z, , ,"['990378']", , ,2.7,494.94 +3823.0,pick item,2019-07-23 14:53:03.000Z, ,"['881504']", , , ,0.483,79.99 +3824.0,pick item,2019-07-23 14:53:51.000Z, ,"['880859']", , , ,0.483,79.99 +3825.0,pick item,2019-07-23 14:55:24.000Z, ,"['881458']", , , ,0.28,449.0 +3826.0,create package,2019-07-23 14:55:24.000Z, ,"['881153','881154']", ,"['660217']", ,1.76,229.98 +3827.0,pick item,2019-07-23 15:07:40.000Z, ,"['881487']", , , ,0.166,799.0 +3828.0,failed delivery,2019-07-23 15:15:08.000Z, , , ,"['660205']", ,2.15,1922.98 +3829.0,package delivered,2019-07-23 15:22:29.000Z, , , ,"['660216']", ,4.225,3024.97 +3830.0,confirm order,2019-07-23 15:23:34.000Z, , ,"['990374']", , ,2.552,2321.97 +3831.0,send package,2019-07-23 15:29:55.000Z, , , ,"['660215']", ,2.789,1199.95 +3832.0,pick item,2019-07-23 15:47:46.000Z, ,"['881464']", , , ,0.166,799.0 +3833.0,create package,2019-07-23 15:47:46.000Z, ,"['881202','881359','881429','881363','881468','881329','881360','881192','881472']", ,"['660218']", ,5.3210000000000015,6454.97 +3834.0,pay order,2019-07-23 16:01:06.000Z, , ,"['990346']", , ,0.483,500.0 +3835.0,send package,2019-07-23 16:02:19.000Z, , , ,"['660211']", ,0.166,799.0 +3836.0,pick item,2019-07-23 16:14:32.000Z, ,"['881525']", , , ,1.28,149.99 +3837.0,package delivered,2019-07-23 16:27:29.000Z, , , ,"['660207']", ,1.105,737.98 +3838.0,place order,2019-07-23 16:55:59.000Z, ,"['881543','881544','881547','881548','881542','881545','881546']","['990381']", , ,4.615,2174.96 +3839.0,pick item,2019-07-23 17:07:58.000Z, ,"['881466']", , , ,0.78,99.99 +3840.0,pay order,2019-07-23 18:12:21.000Z, , ,"['990357']", , ,2.8560000000000003,6700.0 +3841.0,reorder item,2019-07-23 19:40:32.000Z, ,"['881522']", , , ,0.166,799.0 +3842.0,place order,2019-07-23 20:27:32.000Z, ,"['881550','881549']","['990382']", , ,1.65,2954.0 +3843.0,create package,2019-07-23 23:00:00.000Z, ,"['881500','881399','881401','881504','881456','881501','880859']", ,"['660219']", ,4.539,3503.96 +3844.0,item out of stock,2019-07-24 06:43:27.000Z, ,"['881498']", , , ,0.28,89.99 +3845.0,place order,2019-07-24 06:46:39.000Z, ,"['881551','881553','881552']","['990383']", , ,1.426,1382.99 +3846.0,confirm order,2019-07-24 06:49:35.000Z, , ,"['990379']", , ,1.446,953.99 +3847.0,send package,2019-07-24 07:05:56.000Z, , , ,"['660219']", ,4.539,3503.96 +3848.0,confirm order,2019-07-24 07:09:59.000Z, , ,"['990371']", , ,2.0380000000000003,3783.98 +3849.0,confirm order,2019-07-24 07:17:03.000Z, , ,"['990375']", , ,2.932,3700.97 +3850.0,reorder item,2019-07-24 07:52:41.000Z, ,"['881499']", , , ,1.37,2500.0 +3851.0,package delivered,2019-07-24 07:59:55.000Z, , , ,"['660214']", ,1.621,1957.98 +3852.0,pick item,2019-07-24 08:15:17.000Z, ,"['881070']", , , ,0.98,129.99 +3853.0,payment reminder,2019-07-24 08:19:17.000Z, , ,"['990256']", , ,1.929,1448.99 +3854.0,pick item,2019-07-24 08:28:00.000Z, ,"['881548']", , , ,0.172,699.0 +3855.0,pick item,2019-07-24 08:32:04.000Z, ,"['881519']", , , ,0.188,1149.0 +3856.0,payment reminder,2019-07-24 08:32:40.000Z, , ,"['990258']", , ,5.2360000000000015,4667.97 +3857.0,pick item,2019-07-24 08:34:04.000Z, ,"['881300']", , , ,0.2,39.99 +3858.0,confirm order,2019-07-24 08:38:20.000Z, , ,"['990383']", , ,1.426,1382.99 +3859.0,pick item,2019-07-24 08:39:03.000Z, ,"['881496']", , , ,0.2,39.99 +3860.0,pick item,2019-07-24 08:39:49.000Z, ,"['881110']", , , ,0.2,39.99 +3861.0,place order,2019-07-24 08:59:46.000Z, ,"['881555','881554','881557','881556','881558']","['990384']", , ,4.1930000000000005,3283.97 +3862.0,pick item,2019-07-24 09:02:06.000Z, ,"['881269']", , , ,1.25,2200.0 +3863.0,pick item,2019-07-24 09:18:28.000Z, ,"['881413']", , , ,1.37,2500.0 +3864.0,pick item,2019-07-24 09:23:53.000Z, ,"['881445']", , , ,0.483,1099.0 +3865.0,item out of stock,2019-07-24 09:27:18.000Z, ,"['881505']", , , ,1.25,2200.0 +3866.0,send package,2019-07-24 09:33:05.000Z, , , ,"['660217']", ,1.76,229.98 +3867.0,pay order,2019-07-24 09:39:53.000Z, , ,"['990337']", , ,5.1560000000000015,4172.96 +3868.0,failed delivery,2019-07-24 09:50:21.000Z, , , ,"['660205']", ,2.15,1922.98 +3869.0,item out of stock,2019-07-24 10:05:13.000Z, ,"['881550']", , , ,0.28,449.0 +3870.0,pay order,2019-07-24 10:25:11.000Z, , ,"['990379']", , ,1.446,953.99 +3871.0,pick item,2019-07-24 10:25:16.000Z, ,"['881491']", , , ,1.25,2200.0 +3872.0,package delivered,2019-07-24 10:26:27.000Z, , , ,"['660211']", ,0.166,799.0 +3873.0,pick item,2019-07-24 10:42:17.000Z, ,"['881539']", , , ,0.28,89.99 +3874.0,place order,2019-07-24 11:19:19.000Z, ,"['881559','881561','881562','881560']","['990385']", , ,2.305,3732.99 +3875.0,confirm order,2019-07-24 11:30:01.000Z, , ,"['990370']", , ,3.705,3022.98 +3876.0,package delivered,2019-07-24 11:37:18.000Z, , , ,"['660219']", ,4.539,3503.96 +3877.0,confirm order,2019-07-24 11:37:20.000Z, , ,"['990377']", , ,0.821,2602.0 +3878.0,pick item,2019-07-24 11:58:32.000Z, ,"['881021']", , , ,1.48,199.99 +3879.0,pick item,2019-07-24 12:09:04.000Z, ,"['881526']", , , ,0.172,699.0 +3880.0,item out of stock,2019-07-24 12:26:16.000Z, ,"['881495']", , , ,1.48,199.99 +3881.0,pick item,2019-07-24 12:26:21.000Z, ,"['881529']", , , ,0.28,89.99 +3882.0,create package,2019-07-24 12:26:21.000Z, ,"['881539','881413','881422','881265','881411','881453','881529','881424']", ,"['660220']", ,5.742999999999999,6004.95 +3883.0,confirm order,2019-07-24 12:29:10.000Z, , ,"['990363']", , ,0.452,1153.0 +3884.0,pick item,2019-07-24 12:37:50.000Z, ,"['881549']", , , ,1.37,2500.0 +3885.0,payment reminder,2019-07-24 12:47:13.000Z, , ,"['990262']", , ,3.04,334.97 +3886.0,package delivered,2019-07-24 12:54:13.000Z, , , ,"['660215']", ,2.789,1199.95 +3887.0,place order,2019-07-24 12:58:25.000Z, ,"['881565','881564','881563']","['990386']", , ,1.618,1652.99 +3888.0,item out of stock,2019-07-24 13:03:04.000Z, ,"['881544']", , , ,0.483,495.0 +3889.0,pick item,2019-07-24 13:04:21.000Z, ,"['881556']", , , ,0.78,99.99 +3890.0,send package,2019-07-24 13:05:18.000Z, , , ,"['660212']", ,3.523,6857.0 +3891.0,confirm order,2019-07-24 13:08:22.000Z, , ,"['990380']", , ,1.222,1861.98 +3892.0,pick item,2019-07-24 13:39:33.000Z, ,"['881400']", , , ,0.44,476.0 +3893.0,failed delivery,2019-07-24 13:43:23.000Z, , , ,"['660213']", ,8.416,7936.91 +3894.0,pick item,2019-07-24 13:53:25.000Z, ,"['881450']", , , ,0.38,29.99 +3895.0,package delivered,2019-07-24 14:18:29.000Z, , , ,"['660217']", ,1.76,229.98 +3896.0,pay order,2019-07-24 14:19:29.000Z, , ,"['990356']", , ,3.55,2910.97 +3897.0,pick item,2019-07-24 14:33:39.000Z, ,"['881551']", , , ,0.28,449.0 +3898.0,pick item,2019-07-24 14:41:38.000Z, ,"['881516']", , , ,0.38,29.99 +3899.0,send package,2019-07-24 14:44:26.000Z, , , ,"['660218']", ,5.3210000000000015,6454.97 +3900.0,pay order,2019-07-24 14:46:00.000Z, , ,"['990279']", , ,2.1790000000000003,3173.98 +3901.0,pick item,2019-07-24 14:49:43.000Z, ,"['881291']", , , ,1.48,199.99 +3902.0,pick item,2019-07-24 14:56:43.000Z, ,"['881511']", , , ,0.166,799.0 +3903.0,create package,2019-07-24 14:56:43.000Z, ,"['881334','881406','881275','881336','881333','881526','881405']", ,"['660221']", ,5.223,7276.98 +3904.0,confirm order,2019-07-24 14:57:59.000Z, , ,"['990386']", , ,1.618,1652.99 +3905.0,reorder item,2019-07-24 15:04:43.000Z, ,"['881257']", , , ,0.28,89.99 +3906.0,item out of stock,2019-07-24 15:10:30.000Z, ,"['881485']", , , ,0.88,89.99 +3907.0,place order,2019-07-24 15:16:38.000Z, ,"['881566','881569','881567','881568']","['990387']", , ,1.884,4602.0 +3908.0,send package,2019-07-24 15:39:55.000Z, , , ,"['660220']", ,5.742999999999999,6004.95 +3909.0,pick item,2019-07-24 15:43:27.000Z, ,"['881564']", , , ,1.28,149.99 +3910.0,pay order,2019-07-24 15:51:35.000Z, , ,"['990240']", , ,0.762,1262.99 +3911.0,pick item,2019-07-24 15:54:54.000Z, ,"['881555']", , , ,1.28,149.99 +3912.0,item out of stock,2019-07-24 16:13:58.000Z, ,"['881533']", , , ,1.28,149.99 +3913.0,payment reminder,2019-07-24 16:52:05.000Z, , ,"['990261']", , ,10.042,8963.93 +3914.0,place order,2019-07-24 16:53:03.000Z, ,"['881574','881576','881575','881572','881571','881573','881570']","['990388']", , ,5.544,2032.95 +3915.0,pick item,2019-07-24 16:57:09.000Z, ,"['881557']", , , ,0.483,79.99 +3916.0,pick item,2019-07-24 17:06:34.000Z, ,"['881521']", , , ,0.38,29.99 +3917.0,failed delivery,2019-07-24 18:50:32.000Z, , , ,"['660220']", ,5.742999999999999,6004.95 +3918.0,place order,2019-07-24 20:18:44.000Z, ,"['881578','881577']","['990389']", , ,0.98,144.98 +3919.0,place order,2019-07-25 06:29:03.000Z, ,"['881582','881579','881580','881581']","['990390']", , ,3.42,484.96 +3920.0,pick item,2019-07-25 06:41:41.000Z, ,"['881582']", , , ,0.88,89.99 +3921.0,reorder item,2019-07-25 06:55:13.000Z, ,"['881452']", , , ,1.37,2500.0 +3922.0,confirm order,2019-07-25 06:57:45.000Z, , ,"['990389']", , ,0.98,144.98 +3923.0,pick item,2019-07-25 06:57:56.000Z, ,"['881580']", , , ,1.48,199.99 +3924.0,confirm order,2019-07-25 06:59:25.000Z, , ,"['990381']", , ,4.615,2174.96 +3925.0,pick item,2019-07-25 07:04:02.000Z, ,"['881559']", , , ,0.28,449.0 +3926.0,create package,2019-07-25 07:04:02.000Z, ,"['881291','881290','881476','881464','881479','881439','881463','881293']", ,"['660222']", ,6.275,3822.96 +3927.0,pick item,2019-07-25 07:04:29.000Z, ,"['881478']", , , ,0.166,799.0 +3928.0,reorder item,2019-07-25 07:05:56.000Z, ,"['881550']", , , ,0.28,449.0 +3929.0,item out of stock,2019-07-25 07:16:57.000Z, ,"['881573']", , , ,1.28,149.99 +3930.0,pick item,2019-07-25 07:22:59.000Z, ,"['881370']", , , ,0.21,529.0 +3931.0,pick item,2019-07-25 07:25:13.000Z, ,"['881561']", , , ,0.483,79.99 +3932.0,package delivered,2019-07-25 07:32:09.000Z, , , ,"['660212']", ,3.523,6857.0 +3933.0,reorder item,2019-07-25 07:36:16.000Z, ,"['881461']", , , ,0.98,129.99 +3934.0,reorder item,2019-07-25 07:39:37.000Z, ,"['881392']", , , ,0.483,495.0 +3935.0,package delivered,2019-07-25 07:50:42.000Z, , , ,"['660205']", ,2.15,1922.98 +3936.0,package delivered,2019-07-25 08:01:05.000Z, , , ,"['660209']", ,3.108,3470.99 +3937.0,pick item,2019-07-25 08:04:21.000Z, ,"['881563']", , , ,0.172,699.0 +3938.0,reorder item,2019-07-25 08:05:44.000Z, ,"['881544']", , , ,0.483,495.0 +3939.0,confirm order,2019-07-25 08:06:27.000Z, , ,"['990390']", , ,3.42,484.96 +3940.0,pick item,2019-07-25 08:25:29.000Z, ,"['881570']", , , ,1.28,149.99 +3941.0,pick item,2019-07-25 08:30:02.000Z, ,"['881530']", , , ,0.28,89.99 +3942.0,place order,2019-07-25 08:33:22.000Z, ,"['881588','881585','881584','881583','881587','881586']","['990391']", , ,3.381,4712.97 +3943.0,pay order,2019-07-25 08:34:18.000Z, , ,"['990363']", , ,0.452,1153.0 +3944.0,reorder item,2019-07-25 08:38:06.000Z, ,"['881434']", , , ,0.2,39.99 +3945.0,reorder item,2019-07-25 09:00:54.000Z, ,"['881442']", , , ,0.28,449.0 +3946.0,pick item,2019-07-25 09:08:08.000Z, ,"['881543']", , , ,1.28,149.99 +3947.0,pay order,2019-07-25 09:09:10.000Z, , ,"['990381']", , ,4.615,2174.96 +3948.0,reorder item,2019-07-25 09:11:21.000Z, ,"['881495']", , , ,1.48,199.99 +3949.0,pick item,2019-07-25 09:13:38.000Z, ,"['881562']", , , ,1.37,2500.0 +3950.0,create package,2019-07-25 09:13:38.000Z, ,"['881357','881510','881506','881509','881255']", ,"['660223']", ,2.109,2812.98 +3951.0,pick item,2019-07-25 09:26:24.000Z, ,"['881536']", , , ,0.166,799.0 +3952.0,pick item,2019-07-25 09:34:01.000Z, ,"['881535']", , , ,1.28,149.99 +3953.0,pick item,2019-07-25 09:35:11.000Z, ,"['881426']", , , ,1.48,199.99 +3954.0,package delivered,2019-07-25 09:39:25.000Z, , , ,"['660204']", ,4.606,2242.96 +3955.0,pick item,2019-07-25 09:45:05.000Z, ,"['881528']", , , ,0.483,1099.0 +3956.0,pick item,2019-07-25 09:57:14.000Z, ,"['881542']", , , ,0.98,129.99 +3957.0,create package,2019-07-25 09:57:14.000Z, ,"['881115','881525','881570']", ,"['660224']", ,3.81,2499.98 +3958.0,reorder item,2019-07-25 10:08:55.000Z, ,"['881520']", , , ,0.172,699.0 +3959.0,pick item,2019-07-25 10:09:46.000Z, ,"['881541']", , , ,0.28,449.0 +3960.0,payment reminder,2019-07-25 10:22:58.000Z, , ,"['990271']", , ,4.9830000000000005,1927.95 +3961.0,place order,2019-07-25 10:26:31.000Z, ,"['881593','881597','881589','881595','881596','881590','881591','881592','881594']","['990392']", , ,5.8610000000000015,5145.95 +3962.0,item out of stock,2019-07-25 10:31:37.000Z, ,"['881592']", , , ,0.188,1149.0 +3963.0,pick item,2019-07-25 10:38:43.000Z, ,"['881384']", , , ,0.483,79.99 +3964.0,reorder item,2019-07-25 10:42:34.000Z, ,"['881471']", , , ,0.166,799.0 +3965.0,reorder item,2019-07-25 11:26:08.000Z, ,"['881505']", , , ,1.25,2200.0 +3966.0,pick item,2019-07-25 11:37:49.000Z, ,"['881575']", , , ,0.38,29.99 +3967.0,create package,2019-07-25 11:37:49.000Z, ,"['881555','881518','881557','881517','881556','881521','881519']", ,"['660225']", ,4.257,2437.95 +3968.0,pick item,2019-07-25 11:52:54.000Z, ,"['881597']", , , ,1.37,2500.0 +3969.0,send package,2019-07-25 12:10:51.000Z, , , ,"['660221']", ,5.223,7276.98 +3970.0,place order,2019-07-25 12:12:50.000Z, ,"['881598','881600','881599']","['990393']", , ,2.06,264.97 +3971.0,pick item,2019-07-25 12:31:00.000Z, ,"['881569']", , , ,1.25,2200.0 +3972.0,pick item,2019-07-25 12:39:21.000Z, ,"['881502']", , , ,0.98,129.99 +3973.0,pick item,2019-07-25 12:42:27.000Z, ,"['881515']", , , ,1.28,149.99 +3974.0,pick item,2019-07-25 13:02:54.000Z, ,"['881579']", , , ,0.78,99.99 +3975.0,item out of stock,2019-07-25 13:03:59.000Z, ,"['881404']", , , ,0.78,99.99 +3976.0,item out of stock,2019-07-25 13:04:06.000Z, ,"['881574']", , , ,0.172,699.0 +3977.0,pick item,2019-07-25 13:04:25.000Z, ,"['881567']", , , ,0.166,799.0 +3978.0,pick item,2019-07-25 13:21:23.000Z, ,"['881489']", , , ,0.78,99.99 +3979.0,create package,2019-07-25 13:21:23.000Z, ,"['881487','881542','881480','881450','881543','881327','881384','881483','881415','881110','881548','881489']", ,"['660226']", ,7.854,4807.91 +3980.0,reorder item,2019-07-25 13:21:33.000Z, ,"['881420']", , , ,0.483,1099.0 +3981.0,pay order,2019-07-25 13:22:05.000Z, , ,"['990212']", , ,2.935,3043.98 +3982.0,pick item,2019-07-25 13:27:42.000Z, ,"['881354']", , , ,0.78,99.99 +3983.0,pay order,2019-07-25 13:28:36.000Z, , ,"['990372']", , ,5.523,4814.96 +3984.0,pick item,2019-07-25 13:30:03.000Z, ,"['881547']", , , ,0.98,129.99 +3985.0,failed delivery,2019-07-25 13:32:47.000Z, , , ,"['660213']", ,8.416,7936.91 +3986.0,item out of stock,2019-07-25 13:33:38.000Z, ,"['881572']", , , ,0.78,99.99 +3987.0,pay order,2019-07-25 13:35:43.000Z, , ,"['990331']", , ,5.183,4810.98 +3988.0,package delivered,2019-07-25 13:38:04.000Z, , , ,"['660218']", ,5.3210000000000015,6454.97 +3989.0,reorder item,2019-07-25 13:40:21.000Z, ,"['881485']", , , ,0.88,89.99 +3990.0,pick item,2019-07-25 13:41:23.000Z, ,"['881560']", , , ,0.172,699.0 +3991.0,place order,2019-07-25 13:45:27.000Z, ,"['881601']","['990394']", , ,0.166,804.0 +3992.0,pay order,2019-07-25 13:46:23.000Z, , ,"['990165']", , ,1.047,862.99 +3993.0,confirm order,2019-07-25 13:52:28.000Z, , ,"['990391']", , ,3.381,4712.97 +3994.0,pick item,2019-07-25 14:05:18.000Z, ,"['881470']", , , ,0.21,529.0 +3995.0,pick item,2019-07-25 14:06:40.000Z, ,"['881540']", , , ,0.28,89.99 +3996.0,send package,2019-07-25 14:09:02.000Z, , , ,"['660222']", ,6.275,3822.96 +3997.0,pick item,2019-07-25 14:22:38.000Z, ,"['881595']", , , ,0.2,39.99 +3998.0,send package,2019-07-25 14:23:32.000Z, , , ,"['660223']", ,2.109,2812.98 +3999.0,package delivered,2019-07-25 14:32:31.000Z, , , ,"['660222']", ,6.275,3822.96 +4000.0,pick item,2019-07-25 14:39:57.000Z, ,"['881508']", , , ,0.166,799.0 +4001.0,pick item,2019-07-25 14:42:51.000Z, ,"['881594']", , , ,0.28,89.99 +4002.0,pay order,2019-07-25 14:48:25.000Z, , ,"['990260']", , ,4.621,4209.97 +4003.0,send package,2019-07-25 15:02:43.000Z, , , ,"['660226']", ,7.854,4807.91 +4004.0,pick item,2019-07-25 15:02:43.000Z, ,"['881589']", , , ,0.44,476.0 +4005.0,pay order,2019-07-25 15:03:21.000Z, , ,"['990231']", , ,3.696,4281.98 +4006.0,item out of stock,2019-07-25 15:08:03.000Z, ,"['881601']", , , ,0.166,799.0 +4007.0,reorder item,2019-07-25 15:16:10.000Z, ,"['881601']", , , ,0.166,799.0 +4008.0,reorder item,2019-07-25 15:17:06.000Z, ,"['881572']", , , ,0.78,99.99 +4009.0,place order,2019-07-25 15:50:41.000Z, ,"['881603','881602','881604']","['990395']", , ,2.733,3693.99 +4010.0,failed delivery,2019-07-25 15:58:02.000Z, , , ,"['660213']", ,8.416,7936.91 +4011.0,pick item,2019-07-25 16:14:04.000Z, ,"['881591']", , , ,1.48,199.99 +4012.0,pick item,2019-07-25 16:20:49.000Z, ,"['881514']", , , ,0.28,89.99 +4013.0,pick item,2019-07-25 16:34:32.000Z, ,"['881469']", , , ,0.44,476.0 +4014.0,create package,2019-07-25 16:34:32.000Z, ,"['881535','881075','881514','881516','881511','881536','881446','881515','881445']", ,"['660227']", ,4.755,4041.96 +4015.0,payment reminder,2019-07-25 16:35:57.000Z, , ,"['990268']", , ,6.394,6802.97 +4016.0,pay order,2019-07-25 16:53:33.000Z, , ,"['990286']", , ,0.655,783.99 +4017.0,payment reminder,2019-07-25 16:56:58.000Z, , ,"['990281']", , ,2.178,1832.97 +4018.0,pay order,2019-07-25 17:28:27.000Z, , ,"['990289']", , ,2.978,4259.99 +4019.0,pay order,2019-07-25 17:29:00.000Z, , ,"['990330']", , ,0.42,1063.0 +4020.0,place order,2019-07-25 18:11:38.000Z, ,"['881606','881607','881605']","['990396']", , ,1.123,1015.99 +4021.0,package delivered,2019-07-25 18:29:18.000Z, , , ,"['660213']", ,8.416,7936.91 +4022.0,confirm order,2019-07-25 18:39:28.000Z, , ,"['990395']", , ,2.733,3693.99 +4023.0,pick item,2019-07-25 19:18:12.000Z, ,"['881604']", , , ,0.88,89.99 +4024.0,package delivered,2019-07-25 19:37:49.000Z, , , ,"['660220']", ,5.742999999999999,6004.95 +4025.0,pick item,2019-07-25 20:03:46.000Z, ,"['881471']", , , ,0.166,799.0 +4026.0,confirm order,2019-07-25 20:04:09.000Z, , ,"['990388']", , ,5.544,2032.95 +4027.0,place order,2019-07-25 21:02:51.000Z, ,"['881608','881609','881615','881610','881614','881612','881611','881613']","['990397']", , ,3.873,3749.97 +4028.0,confirm order,2019-07-26 06:14:21.000Z, , ,"['990393']", , ,2.06,264.97 +4029.0,pay order,2019-07-26 06:31:45.000Z, , ,"['990328']", , ,2.428,4568.99 +4030.0,pick item,2019-07-26 06:51:46.000Z, ,"['881523']", , , ,0.88,89.99 +4031.0,place order,2019-07-26 06:55:00.000Z, ,"['881617','881621','881616','881619','881618','881622','881620']","['990398']", , ,2.431,2175.98 +4032.0,pick item,2019-07-26 07:01:13.000Z, ,"['881473']", , , ,0.172,699.0 +4033.0,failed delivery,2019-07-26 07:04:39.000Z, , , ,"['660226']", ,7.854,4807.91 +4034.0,pay order,2019-07-26 07:22:25.000Z, , ,"['990361']", , ,1.853,3000.0 +4035.0,pick item,2019-07-26 07:30:59.000Z, ,"['881481']", , , ,0.44,476.0 +4036.0,confirm order,2019-07-26 07:51:58.000Z, , ,"['990397']", , ,3.873,3749.97 +4037.0,pick item,2019-07-26 07:58:45.000Z, ,"['881452']", , , ,1.37,2500.0 +4038.0,reorder item,2019-07-26 08:13:32.000Z, ,"['881467']", , , ,0.166,799.0 +4039.0,item out of stock,2019-07-26 08:21:41.000Z, ,"['881581']", , , ,0.28,89.99 +4040.0,pick item,2019-07-26 08:24:59.000Z, ,"['881615']", , , ,0.2,39.99 +4041.0,pick item,2019-07-26 08:29:40.000Z, ,"['881554']", , , ,0.28,449.0 +4042.0,pick item,2019-07-26 08:30:13.000Z, ,"['881602']", , , ,0.483,1099.0 +4043.0,create package,2019-07-26 08:30:13.000Z, ,"['881428']", ,"['660228']", ,0.38,29.99 +4044.0,pick item,2019-07-26 08:32:58.000Z, ,"['881598']", , , ,0.98,129.99 +4045.0,create package,2019-07-26 08:32:58.000Z, ,"['881466','881615','881493','881491']", ,"['660229']", ,2.725,2468.98 +4046.0,package delivered,2019-07-26 08:33:49.000Z, , , ,"['660226']", ,7.854,4807.91 +4047.0,pick item,2019-07-26 08:35:00.000Z, ,"['881599']", , , ,0.2,39.99 +4048.0,pick item,2019-07-26 08:42:31.000Z, ,"['881621']", , , ,0.495,129.0 +4049.0,pick item,2019-07-26 08:42:46.000Z, ,"['881586']", , , ,0.2,39.99 +4050.0,pick item,2019-07-26 08:48:39.000Z, ,"['881538']", , , ,0.172,699.0 +4051.0,create package,2019-07-26 08:48:39.000Z, ,"['881458','881300']", ,"['660230']", ,0.48,488.99 +4052.0,pick item,2019-07-26 08:50:14.000Z, ,"['881576']", , , ,0.172,699.0 +4053.0,confirm order,2019-07-26 08:54:22.000Z, , ,"['990387']", , ,1.884,4602.0 +4054.0,pick item,2019-07-26 09:10:13.000Z, ,"['881610']", , , ,0.78,99.99 +4055.0,create package,2019-07-26 09:10:13.000Z, ,"['881070','881621']", ,"['660231']", ,1.475,258.99 +4056.0,place order,2019-07-26 09:12:17.000Z, ,"['881624','881627','881625','881626','881623']","['990399']", , ,1.929,2306.99 +4057.0,pick item,2019-07-26 09:13:28.000Z, ,"['881451']", , , ,0.88,89.99 +4058.0,reorder item,2019-07-26 09:26:08.000Z, ,"['881498']", , , ,0.28,89.99 +4059.0,confirm order,2019-07-26 09:31:26.000Z, , ,"['990385']", , ,2.305,3732.99 +4060.0,pick item,2019-07-26 09:35:00.000Z, ,"['881578']", , , ,0.2,39.99 +4061.0,create package,2019-07-26 09:35:00.000Z, ,"['881564','881563','881496']", ,"['660232']", ,1.652,888.98 +4062.0,pay order,2019-07-26 09:36:46.000Z, , ,"['990284']", , ,5.537999999999999,5045.97 +4063.0,pay order,2019-07-26 09:36:53.000Z, , ,"['990202']", , ,1.76,294.98 +4064.0,confirm order,2019-07-26 09:43:44.000Z, , ,"['990382']", , ,1.65,2954.0 +4065.0,pick item,2019-07-26 09:44:25.000Z, ,"['881460']", , , ,0.38,29.99 +4066.0,pick item,2019-07-26 09:53:35.000Z, ,"['881477']", , , ,0.28,449.0 +4067.0,pick item,2019-07-26 10:02:50.000Z, ,"['881617']", , , ,0.21,529.0 +4068.0,create package,2019-07-26 10:02:50.000Z, ,"['881579','881269','881551','881582','881602','881580','881604']", ,"['660233']", ,6.033,4227.96 +4069.0,pick item,2019-07-26 10:03:37.000Z, ,"['881537']", , , ,0.21,529.0 +4070.0,pick item,2019-07-26 10:08:38.000Z, ,"['881585']", , , ,0.188,1149.0 +4071.0,pick item,2019-07-26 10:24:33.000Z, ,"['881241']", , , ,0.88,89.99 +4072.0,pick item,2019-07-26 10:26:44.000Z, ,"['881619']", , , ,0.28,449.0 +4073.0,item out of stock,2019-07-26 10:39:59.000Z, ,"['881603']", , , ,1.37,2500.0 +4074.0,place order,2019-07-26 10:44:22.000Z, ,"['881630','881629','881628']","['990400']", , ,1.755,253.98 +4075.0,confirm order,2019-07-26 10:57:42.000Z, , ,"['990384']", , ,4.1930000000000005,3283.97 +4076.0,pick item,2019-07-26 11:09:43.000Z, ,"['881614']", , , ,0.483,1099.0 +4077.0,pick item,2019-07-26 11:48:54.000Z, ,"['881507']", , , ,0.172,699.0 +4078.0,pick item,2019-07-26 12:15:30.000Z, ,"['881494']", , , ,0.2,39.99 +4079.0,create package,2019-07-26 12:15:30.000Z, ,"['881469','881549','881470','881471','881021']", ,"['660234']", ,3.666,4503.99 +4080.0,reorder item,2019-07-26 12:22:49.000Z, ,"['881592']", , , ,0.188,1149.0 +4081.0,pick item,2019-07-26 12:25:22.000Z, ,"['881623']", , , ,0.188,1149.0 +4082.0,send package,2019-07-26 12:35:40.000Z, , , ,"['660231']", ,1.475,258.99 +4083.0,item out of stock,2019-07-26 12:40:43.000Z, ,"['881583']", , , ,0.28,89.99 +4084.0,pick item,2019-07-26 12:45:22.000Z, ,"['881461']", , , ,0.98,129.99 +4085.0,place order,2019-07-26 12:48:31.000Z, ,"['881632','881637','881636','881634','881631','881633','881635']","['990401']", , ,4.399,4933.98 +4086.0,pick item,2019-07-26 12:52:55.000Z, ,"['881376']", , , ,0.78,99.99 +4087.0,confirm order,2019-07-26 12:54:51.000Z, , ,"['990398']", , ,2.431,2175.98 +4088.0,pick item,2019-07-26 13:09:20.000Z, ,"['881620']", , , ,0.483,79.99 +4089.0,confirm order,2019-07-26 13:20:20.000Z, , ,"['990396']", , ,1.123,1015.99 +4090.0,send package,2019-07-26 13:27:15.000Z, , , ,"['660227']", ,4.755,4041.96 +4091.0,item out of stock,2019-07-26 13:40:22.000Z, ,"['881628']", , , ,0.88,89.99 +4092.0,pick item,2019-07-26 13:48:35.000Z, ,"['881618']", , , ,0.28,449.0 +4093.0,create package,2019-07-26 13:48:35.000Z, ,"['881376','881400','881502']", ,"['660235']", ,2.2,705.98 +4094.0,package delivered,2019-07-26 13:48:58.000Z, , , ,"['660231']", ,1.475,258.99 +4095.0,pick item,2019-07-26 14:06:13.000Z, ,"['881522']", , , ,0.166,799.0 +4096.0,pick item,2019-07-26 14:19:30.000Z, ,"['881315']", , , ,0.172,699.0 +4097.0,pick item,2019-07-26 14:25:07.000Z, ,"['881629']", , , ,0.38,29.99 +4098.0,create package,2019-07-26 14:25:07.000Z, ,"['881559','881561','881567','881569','881562','881370','881560']", ,"['660236']", ,3.931,7255.99 +4099.0,send package,2019-07-26 14:38:28.000Z, , , ,"['660228']", ,0.38,29.99 +4100.0,pick item,2019-07-26 14:47:18.000Z, ,"['881571']", , , ,1.48,199.99 +4101.0,place order,2019-07-26 14:56:50.000Z, ,"['881638','881643','881642','881641','881639','881640']","['990402']", , ,2.889,4032.97 +4102.0,pick item,2019-07-26 14:57:43.000Z, ,"['881430']", , , ,0.2,39.99 +4103.0,pick item,2019-07-26 14:58:46.000Z, ,"['881626']", , , ,0.483,495.0 +4104.0,pick item,2019-07-26 15:28:45.000Z, ,"['881588']", , , ,0.98,129.99 +4105.0,item out of stock,2019-07-26 15:31:14.000Z, ,"['881622']", , , ,0.2,39.99 +4106.0,confirm order,2019-07-26 15:35:48.000Z, , ,"['990400']", , ,1.755,253.98 +4107.0,send package,2019-07-26 15:40:52.000Z, , , ,"['660230']", ,0.48,488.99 +4108.0,pay order,2019-07-26 15:40:57.000Z, , ,"['990256']", , ,1.929,1448.99 +4109.0,send package,2019-07-26 15:43:24.000Z, , , ,"['660224']", ,3.81,2499.98 +4110.0,send package,2019-07-26 15:47:26.000Z, , , ,"['660225']", ,4.257,2437.95 +4111.0,item out of stock,2019-07-26 16:02:30.000Z, ,"['881638']", , , ,0.28,89.99 +4112.0,pay order,2019-07-26 16:15:56.000Z, , ,"['990226']", , ,2.151,1848.99 +4113.0,package delivered,2019-07-26 16:17:52.000Z, , , ,"['660228']", ,0.38,29.99 +4114.0,confirm order,2019-07-26 16:24:16.000Z, , ,"['990402']", , ,2.889,4032.97 +4115.0,place order,2019-07-26 17:13:27.000Z, ,"['881646','881647','881648','881644','881645']","['990403']", , ,4.079,4652.98 +4116.0,package delivered,2019-07-26 17:14:36.000Z, , , ,"['660224']", ,3.81,2499.98 +4117.0,pick item,2019-07-26 17:31:31.000Z, ,"['881434']", , , ,0.2,39.99 +4118.0,send package,2019-07-26 18:53:21.000Z, , , ,"['660229']", ,2.725,2468.98 +4119.0,pick item,2019-07-26 19:46:37.000Z, ,"['881407']", , , ,0.495,129.0 +4120.0,place order,2019-07-26 20:06:29.000Z, ,"['881650','881649']","['990404']", , ,1.32,570.99 +4121.0,place order,2019-07-27 13:38:48.000Z, ,"['881655','881653','881652','881651','881654']","['990405']", , ,3.273,3312.98 +4122.0,payment reminder,2019-07-28 06:53:04.000Z, , ,"['990270']", , ,0.7559999999999999,2332.99 +4123.0,place order,2019-07-28 14:11:30.000Z, ,"['881656','881659','881660','881657','881658']","['990406']", , ,3.908,4331.99 +4124.0,create package,2019-07-28 23:00:00.000Z, ,"['881478','881460','881477','881473','881461']", ,"['660237']", ,1.978,2106.98 +4125.0,place order,2019-07-29 06:16:11.000Z, ,"['881661','881663','881662','881664']","['990407']", , ,1.492,1732.98 +4126.0,pick item,2019-07-29 06:17:04.000Z, ,"['881645']", , , ,1.37,2500.0 +4127.0,reorder item,2019-07-29 06:30:02.000Z, ,"['881404']", , , ,0.78,99.99 +4128.0,send package,2019-07-29 07:02:43.000Z, , , ,"['660235']", ,2.2,705.98 +4129.0,item out of stock,2019-07-29 07:29:01.000Z, ,"['881636']", , , ,1.25,2200.0 +4130.0,item out of stock,2019-07-29 07:30:07.000Z, ,"['881635']", , , ,0.483,495.0 +4131.0,item out of stock,2019-07-29 07:41:00.000Z, ,"['881531']", , , ,0.2,39.99 +4132.0,reorder item,2019-07-29 07:46:22.000Z, ,"['881638']", , , ,0.28,89.99 +4133.0,payment reminder,2019-07-29 07:48:14.000Z, , ,"['990177']", , ,5.915,5803.96 +4134.0,pick item,2019-07-29 07:49:57.000Z, ,"['881637']", , , ,0.483,79.99 +4135.0,send package,2019-07-29 08:08:16.000Z, , , ,"['660233']", ,6.033,4227.96 +4136.0,pay order,2019-07-29 08:12:14.000Z, , ,"['990389']", , ,0.98,144.98 +4137.0,place order,2019-07-29 08:14:04.000Z, ,"['881667','881668','881666','881665']","['990408']", , ,2.604,4542.99 +4138.0,reorder item,2019-07-29 08:23:48.000Z, ,"['881368']", , , ,0.21,529.0 +4139.0,confirm order,2019-07-29 08:28:26.000Z, , ,"['990403']", , ,4.079,4652.98 +4140.0,pick item,2019-07-29 08:31:05.000Z, ,"['881532']", , , ,0.38,29.99 +4141.0,send package,2019-07-29 08:31:46.000Z, , , ,"['660234']", ,3.666,4503.99 +4142.0,pay order,2019-07-29 08:33:08.000Z, , ,"['990397']", , ,3.873,3749.97 +4143.0,package delivered,2019-07-29 08:39:12.000Z, , , ,"['660221']", ,5.223,7276.98 +4144.0,confirm order,2019-07-29 08:43:29.000Z, , ,"['990399']", , ,1.929,2306.99 +4145.0,confirm order,2019-07-29 08:47:01.000Z, , ,"['990401']", , ,4.399,4933.98 +4146.0,failed delivery,2019-07-29 09:02:24.000Z, , , ,"['660235']", ,2.2,705.98 +4147.0,pick item,2019-07-29 09:09:16.000Z, ,"['881497']", , , ,0.188,1149.0 +4148.0,pick item,2019-07-29 09:11:26.000Z, ,"['881546']", , , ,0.28,89.99 +4149.0,reorder item,2019-07-29 09:19:01.000Z, ,"['881484']", , , ,0.88,89.99 +4150.0,reorder item,2019-07-29 09:22:43.000Z, ,"['881573']", , , ,1.28,149.99 +4151.0,send package,2019-07-29 09:23:20.000Z, , , ,"['660236']", ,3.931,7255.99 +4152.0,item out of stock,2019-07-29 09:29:35.000Z, ,"['881568']", , , ,0.28,449.0 +4153.0,pick item,2019-07-29 09:38:00.000Z, ,"['881513']", , , ,0.28,449.0 +4154.0,create package,2019-07-29 09:38:00.000Z, ,"['881541','881452','881426','881538','881540','881530','881537','881532']", ,"['660238']", ,4.452,4586.96 +4155.0,item out of stock,2019-07-29 09:43:49.000Z, ,"['881654']", , , ,0.483,79.99 +4156.0,place order,2019-07-29 09:47:55.000Z, ,"['881669','881670']","['990409']", , ,1.56,244.98 +4157.0,pay order,2019-07-29 09:51:15.000Z, , ,"['990376']", , ,1.48,194.98 +4158.0,package delivered,2019-07-29 09:52:41.000Z, , , ,"['660223']", ,2.109,2812.98 +4159.0,package delivered,2019-07-29 09:57:23.000Z, , , ,"['660229']", ,2.725,2468.98 +4160.0,pick item,2019-07-29 10:09:12.000Z, ,"['881656']", , , ,1.28,149.99 +4161.0,pick item,2019-07-29 10:35:12.000Z, ,"['881553']", , , ,0.98,129.99 +4162.0,pay order,2019-07-29 10:38:51.000Z, , ,"['990384']", , ,4.1930000000000005,3283.97 +4163.0,pick item,2019-07-29 11:15:57.000Z, ,"['881527']", , , ,0.166,799.0 +4164.0,pick item,2019-07-29 11:36:41.000Z, ,"['881640']", , , ,0.38,29.99 +4165.0,pick item,2019-07-29 11:53:05.000Z, ,"['881608']", , , ,0.172,699.0 +4166.0,place order,2019-07-29 11:55:38.000Z, ,"['881671','881673','881672']","['990410']", , ,1.166,2382.0 +4167.0,package delivered,2019-07-29 11:56:28.000Z, , , ,"['660233']", ,6.033,4227.96 +4168.0,pick item,2019-07-29 11:59:53.000Z, ,"['881420']", , , ,0.483,1099.0 +4169.0,pick item,2019-07-29 12:09:39.000Z, ,"['881368']", , , ,0.21,529.0 +4170.0,confirm order,2019-07-29 12:16:27.000Z, , ,"['990406']", , ,3.908,4331.99 +4171.0,pick item,2019-07-29 12:17:57.000Z, ,"['881607']", , , ,0.483,495.0 +4172.0,create package,2019-07-29 12:17:57.000Z, ,"['881528','881637','881527','881407']", ,"['660239']", ,1.6269999999999998,2106.99 +4173.0,item out of stock,2019-07-29 12:31:02.000Z, ,"['881670']", , , ,1.28,149.99 +4174.0,pick item,2019-07-29 12:45:43.000Z, ,"['881584']", , , ,1.25,2200.0 +4175.0,pick item,2019-07-29 12:51:00.000Z, ,"['881616']", , , ,0.483,495.0 +4176.0,failed delivery,2019-07-29 13:02:46.000Z, , , ,"['660236']", ,3.931,7255.99 +4177.0,pay order,2019-07-29 13:04:14.000Z, , ,"['990373']", , ,1.6840000000000002,3730.99 +4178.0,pick item,2019-07-29 13:12:08.000Z, ,"['881666']", , , ,1.37,2500.0 +4179.0,confirm order,2019-07-29 13:15:53.000Z, , ,"['990392']", , ,5.8610000000000015,5145.95 +4180.0,failed delivery,2019-07-29 13:22:55.000Z, , , ,"['660236']", ,3.931,7255.99 +4181.0,reorder item,2019-07-29 13:28:33.000Z, ,"['881583']", , , ,0.28,89.99 +4182.0,pick item,2019-07-29 13:36:21.000Z, ,"['881639']", , , ,0.483,79.99 +4183.0,create package,2019-07-29 13:36:21.000Z, ,"['881576','881575','881571']", ,"['660240']", ,2.032,928.98 +4184.0,pick item,2019-07-29 13:36:50.000Z, ,"['881669']", , , ,0.28,89.99 +4185.0,pick item,2019-07-29 13:42:01.000Z, ,"['881655']", , , ,0.28,449.0 +4186.0,pick item,2019-07-29 13:58:50.000Z, ,"['881634']", , , ,0.483,1099.0 +4187.0,create package,2019-07-29 13:58:50.000Z, ,"['881508','881597','881589','881595','881507','881354','881591','881594']", ,"['660241']", ,4.888,4903.96 +4188.0,reorder item,2019-07-29 13:58:54.000Z, ,"['881568']", , , ,0.28,449.0 +4189.0,pick item,2019-07-29 13:59:28.000Z, ,"['881660']", , , ,0.495,129.0 +4190.0,pick item,2019-07-29 14:00:54.000Z, ,"['881663']", , , ,0.78,99.99 +4191.0,pick item,2019-07-29 14:01:04.000Z, ,"['881644']", , , ,0.166,799.0 +4192.0,package delivered,2019-07-29 14:07:10.000Z, , , ,"['660234']", ,3.666,4503.99 +4193.0,pick item,2019-07-29 14:07:57.000Z, ,"['881534']", , , ,0.28,89.99 +4194.0,payment reminder,2019-07-29 14:08:05.000Z, , ,"['990169']", , ,1.838,3743.99 +4195.0,place order,2019-07-29 14:11:03.000Z, ,"['881677','881674','881676','881675']","['990411']", , ,1.356,1101.99 +4196.0,failed delivery,2019-07-29 14:19:53.000Z, , , ,"['660227']", ,4.755,4041.96 +4197.0,pick item,2019-07-29 14:24:31.000Z, ,"['881658']", , , ,1.37,2500.0 +4198.0,pick item,2019-07-29 14:26:43.000Z, ,"['881648']", , , ,0.483,1099.0 +4199.0,confirm order,2019-07-29 14:28:08.000Z, , ,"['990407']", , ,1.492,1732.98 +4200.0,send package,2019-07-29 14:35:40.000Z, , , ,"['660237']", ,1.978,2106.98 +4201.0,pay order,2019-07-29 14:47:47.000Z, , ,"['990272']", , ,1.46,2734.0 +4202.0,pick item,2019-07-29 14:50:47.000Z, ,"['881503']", , , ,1.25,2200.0 +4203.0,pick item,2019-07-29 14:56:28.000Z, ,"['881651']", , , ,0.28,449.0 +4204.0,create package,2019-07-29 14:56:28.000Z, ,"['881655','881547','881481','881651','881451','881546']", ,"['660242']", ,3.14,1683.97 +4205.0,send package,2019-07-29 15:12:18.000Z, , , ,"['660241']", ,4.888,4903.96 +4206.0,pick item,2019-07-29 15:41:36.000Z, ,"['881552']", , , ,0.166,799.0 +4207.0,place order,2019-07-29 15:41:53.000Z, ,"['881679','881678']","['990412']", , ,1.3630000000000002,174.98 +4208.0,pick item,2019-07-29 16:20:15.000Z, ,"['881677']", , , ,0.166,799.0 +4209.0,item out of stock,2019-07-29 16:51:01.000Z, ,"['881606']", , , ,0.2,39.99 +4210.0,pick item,2019-07-29 16:52:10.000Z, ,"['881649']", , , ,0.44,476.0 +4211.0,pick item,2019-07-29 17:10:49.000Z, ,"['881667']", , , ,0.88,89.99 +4212.0,send package,2019-07-29 17:12:18.000Z, , , ,"['660232']", ,1.652,888.98 +4213.0,confirm order,2019-07-29 17:34:50.000Z, , ,"['990409']", , ,1.56,244.98 +4214.0,pay order,2019-07-29 17:44:46.000Z, , ,"['990396']", , ,1.123,1015.99 +4215.0,place order,2019-07-29 17:45:14.000Z, ,"['881680','881681','881682']","['990413']", , ,1.368,1323.98 +4216.0,place order,2019-07-29 21:10:03.000Z, ,"['881683','881687','881686','881684','881685']","['990414']", , ,3.874,7052.99 +4217.0,pick item,2019-07-30 06:43:12.000Z, ,"['881676']", , , ,0.495,129.0 +4218.0,place order,2019-07-30 07:03:38.000Z, ,"['881688','881689']","['990415']", , ,1.06,553.99 +4219.0,pick item,2019-07-30 07:09:05.000Z, ,"['881647']", , , ,1.28,149.99 +4220.0,create package,2019-07-30 07:09:05.000Z, ,"['881647','881644','881623','881645','881522','881523','881667','881554','881648','881626','881666']", ,"['660243']", ,7.546,10119.97 +4221.0,item out of stock,2019-07-30 07:30:48.000Z, ,"['881668']", , , ,0.188,1149.0 +4222.0,package delivered,2019-07-30 07:34:11.000Z, , , ,"['660235']", ,2.2,705.98 +4223.0,item out of stock,2019-07-30 07:35:25.000Z, ,"['881653']", , , ,0.98,129.99 +4224.0,pick item,2019-07-30 07:35:58.000Z, ,"['881613']", , , ,0.495,129.0 +4225.0,pick item,2019-07-30 07:37:58.000Z, ,"['881492']", , , ,0.28,449.0 +4226.0,pay order,2019-07-30 07:39:30.000Z, , ,"['990401']", , ,4.399,4933.98 +4227.0,reorder item,2019-07-30 07:41:55.000Z, ,"['881670']", , , ,1.28,149.99 +4228.0,payment reminder,2019-07-30 07:55:49.000Z, , ,"['990298']", , ,1.32,2943.0 +4229.0,pick item,2019-07-30 07:58:45.000Z, ,"['881646']", , , ,0.78,99.99 +4230.0,pick item,2019-07-30 08:02:33.000Z, ,"['881612']", , , ,0.483,1099.0 +4231.0,confirm order,2019-07-30 08:11:32.000Z, , ,"['990394']", , ,0.166,804.0 +4232.0,place order,2019-07-30 08:27:04.000Z, ,"['881690']","['990416']", , ,0.172,704.0 +4233.0,pay order,2019-07-30 08:31:13.000Z, , ,"['990254']", , ,1.475,263.99 +4234.0,pick item,2019-07-30 08:35:42.000Z, ,"['881638']", , , ,0.28,89.99 +4235.0,package delivered,2019-07-30 08:46:47.000Z, , , ,"['660232']", ,1.652,888.98 +4236.0,package delivered,2019-07-30 08:47:33.000Z, , , ,"['660236']", ,3.931,7255.99 +4237.0,item out of stock,2019-07-30 08:51:46.000Z, ,"['881672']", , , ,0.495,129.0 +4238.0,send package,2019-07-30 08:53:29.000Z, , , ,"['660239']", ,1.6269999999999998,2106.99 +4239.0,reorder item,2019-07-30 08:59:40.000Z, ,"['881636']", , , ,1.25,2200.0 +4240.0,reorder item,2019-07-30 08:59:51.000Z, ,"['881603']", , , ,1.37,2500.0 +4241.0,confirm order,2019-07-30 09:07:32.000Z, , ,"['990408']", , ,2.604,4542.99 +4242.0,reorder item,2019-07-30 09:08:50.000Z, ,"['881622']", , , ,0.2,39.99 +4243.0,send package,2019-07-30 09:16:02.000Z, , , ,"['660238']", ,4.452,4586.96 +4244.0,confirm order,2019-07-30 09:17:03.000Z, , ,"['990414']", , ,3.874,7052.99 +4245.0,pay order,2019-07-30 09:23:28.000Z, , ,"['990394']", , ,0.166,804.0 +4246.0,confirm order,2019-07-30 09:25:18.000Z, , ,"['990413']", , ,1.368,1323.98 +4247.0,confirm order,2019-07-30 09:25:51.000Z, , ,"['990404']", , ,1.32,570.99 +4248.0,send package,2019-07-30 09:26:20.000Z, , , ,"['660242']", ,3.14,1683.97 +4249.0,pick item,2019-07-30 09:37:28.000Z, ,"['881659']", , , ,0.483,1099.0 +4250.0,pick item,2019-07-30 09:43:14.000Z, ,"['881550']", , , ,0.28,449.0 +4251.0,send package,2019-07-30 09:47:33.000Z, , , ,"['660240']", ,2.032,928.98 +4252.0,package delivered,2019-07-30 09:56:12.000Z, , , ,"['660225']", ,4.257,2437.95 +4253.0,reorder item,2019-07-30 10:00:15.000Z, ,"['881653']", , , ,0.98,129.99 +4254.0,place order,2019-07-30 10:13:55.000Z, ,"['881694','881693','881692','881697','881696','881691','881695']","['990417']", , ,5.103,6604.98 +4255.0,item out of stock,2019-07-30 10:16:05.000Z, ,"['881630']", , , ,0.495,129.0 +4256.0,confirm order,2019-07-30 10:18:51.000Z, , ,"['990417']", , ,5.103,6604.98 +4257.0,pick item,2019-07-30 10:29:35.000Z, ,"['881633']", , , ,0.28,449.0 +4258.0,confirm order,2019-07-30 10:32:29.000Z, , ,"['990405']", , ,3.273,3312.98 +4259.0,package delivered,2019-07-30 10:48:58.000Z, , , ,"['660237']", ,1.978,2106.98 +4260.0,pick item,2019-07-30 11:08:49.000Z, ,"['881622']", , , ,0.2,39.99 +4261.0,confirm order,2019-07-30 11:11:37.000Z, , ,"['990410']", , ,1.166,2382.0 +4262.0,pay order,2019-07-30 11:16:53.000Z, , ,"['990298']", , ,1.32,2943.0 +4263.0,pay order,2019-07-30 11:31:53.000Z, , ,"['990382']", , ,1.65,2954.0 +4264.0,pick item,2019-07-30 11:34:52.000Z, ,"['881694']", , , ,0.483,495.0 +4265.0,confirm order,2019-07-30 11:37:40.000Z, , ,"['990416']", , ,0.172,704.0 +4266.0,pay order,2019-07-30 11:45:38.000Z, , ,"['990393']", , ,2.06,264.97 +4267.0,place order,2019-07-30 11:47:38.000Z, ,"['881698','881702','881701','881700','881699']","['990418']", , ,1.4980000000000002,2278.98 +4268.0,pick item,2019-07-30 11:51:16.000Z, ,"['881627']", , , ,0.483,79.99 +4269.0,create package,2019-07-30 11:51:16.000Z, ,"['881669','881368','881598','881599','881513']", ,"['660244']", ,1.95,1237.97 +4270.0,reorder item,2019-07-30 11:58:05.000Z, ,"['881533']", , , ,1.28,149.99 +4271.0,pick item,2019-07-30 12:10:40.000Z, ,"['881596']", , , ,0.44,476.0 +4272.0,package delivered,2019-07-30 12:19:21.000Z, , , ,"['660230']", ,0.48,488.99 +4273.0,item out of stock,2019-07-30 12:26:27.000Z, ,"['881631']", , , ,0.98,129.99 +4274.0,pay order,2019-07-30 12:29:44.000Z, , ,"['990123']", , ,3.01,2654.97 +4275.0,item out of stock,2019-07-30 12:34:32.000Z, ,"['881566']", , , ,0.188,1149.0 +4276.0,pick item,2019-07-30 12:58:09.000Z, ,"['881699']", , , ,0.44,476.0 +4277.0,failed delivery,2019-07-30 13:22:46.000Z, , , ,"['660242']", ,3.14,1683.97 +4278.0,pick item,2019-07-30 13:23:28.000Z, ,"['881512']", , , ,0.166,799.0 +4279.0,pay order,2019-07-30 13:27:20.000Z, , ,"['990315']", , ,5.043,5014.96 +4280.0,payment reminder,2019-07-30 13:38:56.000Z, , ,"['990299']", , ,1.867,3490.99 +4281.0,place order,2019-07-30 13:55:03.000Z, ,"['881708','881705','881707','881703','881704','881706']","['990419']", , ,1.649,2426.98 +4282.0,pick item,2019-07-30 14:04:32.000Z, ,"['881643']", , , ,0.21,529.0 +4283.0,confirm order,2019-07-30 14:19:17.000Z, , ,"['990418']", , ,1.4980000000000002,2278.98 +4284.0,send package,2019-07-30 14:22:09.000Z, , , ,"['660244']", ,1.95,1237.97 +4285.0,reorder item,2019-07-30 14:28:28.000Z, ,"['881566']", , , ,0.188,1149.0 +4286.0,pick item,2019-07-30 14:33:12.000Z, ,"['881226']", , , ,0.172,699.0 +4287.0,create package,2019-07-30 14:33:12.000Z, ,"['881588','881614','881584','881492','881608','881694','881610','881613','881586','881585','881663','881612','881578','881494']", ,"['660245']", ,6.974,7768.94 +4288.0,pay order,2019-07-30 14:38:51.000Z, , ,"['990398']", , ,2.431,2175.98 +4289.0,item out of stock,2019-07-30 15:13:27.000Z, ,"['881624']", , , ,0.495,129.0 +4290.0,pick item,2019-07-30 15:14:44.000Z, ,"['881572']", , , ,0.78,99.99 +4291.0,reorder item,2019-07-30 15:27:45.000Z, ,"['881672']", , , ,0.495,129.0 +4292.0,pick item,2019-07-30 15:49:04.000Z, ,"['881684']", , , ,0.166,799.0 +4293.0,pay order,2019-07-30 15:50:55.000Z, , ,"['990413']", , ,1.368,1323.98 +4294.0,pick item,2019-07-30 15:59:25.000Z, ,"['881671']", , , ,0.188,1149.0 +4295.0,place order,2019-07-30 16:09:53.000Z, ,"['881714','881709','881713','881712','881715','881710','881711']","['990420']", , ,3.009,1612.95 +4296.0,pick item,2019-07-30 16:10:21.000Z, ,"['881600']", , , ,0.88,89.99 +4297.0,confirm order,2019-07-30 16:47:38.000Z, , ,"['990419']", , ,1.649,2426.98 +4298.0,pay order,2019-07-30 17:30:23.000Z, , ,"['990387']", , ,1.884,4602.0 +4299.0,place order,2019-07-30 18:09:14.000Z, ,"['881717','881716']","['990421']", , ,0.452,1153.0 +4300.0,pick item,2019-07-30 19:23:00.000Z, ,"['881705']", , , ,0.166,799.0 +4301.0,place order,2019-07-30 20:58:03.000Z, ,"['881723','881718','881719','881721','881722','881720']","['990422']", , ,4.885,2703.96 +4302.0,failed delivery,2019-07-31 06:54:00.000Z, , , ,"['660242']", ,3.14,1683.97 +4303.0,payment reminder,2019-07-31 07:07:40.000Z, , ,"['990306']", , ,1.354,1768.98 +4304.0,item out of stock,2019-07-31 07:17:03.000Z, ,"['881717']", , , ,0.28,449.0 +4305.0,package delivered,2019-07-31 07:24:29.000Z, , , ,"['660241']", ,4.888,4903.96 +4306.0,package delivered,2019-07-31 07:24:40.000Z, , , ,"['660239']", ,1.6269999999999998,2106.99 +4307.0,pick item,2019-07-31 07:32:03.000Z, ,"['881703']", , , ,0.21,529.0 +4308.0,confirm order,2019-07-31 07:36:44.000Z, , ,"['990420']", , ,3.009,1612.95 +4309.0,place order,2019-07-31 07:47:41.000Z, ,"['881725','881724','881726','881727']","['990423']", , ,1.955,393.97 +4310.0,reorder item,2019-07-31 07:58:12.000Z, ,"['881717']", , , ,0.28,449.0 +4311.0,pick item,2019-07-31 08:01:10.000Z, ,"['881609']", , , ,0.28,449.0 +4312.0,pick item,2019-07-31 08:01:48.000Z, ,"['881701']", , , ,0.21,529.0 +4313.0,confirm order,2019-07-31 08:03:55.000Z, , ,"['990422']", , ,4.885,2703.96 +4314.0,pick item,2019-07-31 08:14:28.000Z, ,"['881690']", , , ,0.172,699.0 +4315.0,confirm order,2019-07-31 08:15:33.000Z, , ,"['990421']", , ,0.452,1153.0 +4316.0,pick item,2019-07-31 08:17:24.000Z, ,"['881611']", , , ,0.98,129.99 +4317.0,pick item,2019-07-31 08:29:26.000Z, ,"['881447']", , , ,0.172,699.0 +4318.0,item out of stock,2019-07-31 08:35:23.000Z, ,"['881704']", , , ,0.483,495.0 +4319.0,pick item,2019-07-31 08:38:37.000Z, ,"['881678']", , , ,0.88,89.99 +4320.0,pick item,2019-07-31 08:38:59.000Z, ,"['881632']", , , ,0.44,476.0 +4321.0,package delivered,2019-07-31 08:41:00.000Z, , , ,"['660227']", ,4.755,4041.96 +4322.0,pick item,2019-07-31 08:50:44.000Z, ,"['881665']", , , ,0.166,799.0 +4323.0,create package,2019-07-31 08:50:44.000Z, ,"['881617','881616','881619','881618','881622','881690','881620']", ,"['660246']", ,2.108,2740.98 +4324.0,reorder item,2019-07-31 08:52:19.000Z, ,"['881704']", , , ,0.483,495.0 +4325.0,pay order,2019-07-31 08:55:53.000Z, , ,"['990268']", , ,6.394,6802.97 +4326.0,pick item,2019-07-31 09:02:37.000Z, ,"['881533']", , , ,1.28,149.99 +4327.0,item out of stock,2019-07-31 09:04:35.000Z, ,"['881688']", , , ,0.78,99.99 +4328.0,pick item,2019-07-31 09:08:35.000Z, ,"['881698']", , , ,0.188,1149.0 +4329.0,pick item,2019-07-31 09:17:23.000Z, ,"['881711']", , , ,0.78,99.99 +4330.0,pick item,2019-07-31 09:29:39.000Z, ,"['881673']", , , ,0.483,1099.0 +4331.0,package delivered,2019-07-31 09:33:38.000Z, , , ,"['660244']", ,1.95,1237.97 +4332.0,pick item,2019-07-31 09:37:20.000Z, ,"['881681']", , , ,0.2,39.99 +4333.0,pick item,2019-07-31 09:40:31.000Z, ,"['881712']", , , ,0.495,129.0 +4334.0,pick item,2019-07-31 09:40:35.000Z, ,"['880807']", , , ,0.78,99.99 +4335.0,create package,2019-07-31 09:40:35.000Z, ,"['881705','881315','881241','881703','881649']", ,"['660247']", ,1.868,2592.99 +4336.0,pick item,2019-07-31 09:42:52.000Z, ,"['881679']", , , ,0.483,79.99 +4337.0,pick item,2019-07-31 09:46:22.000Z, ,"['881700']", , , ,0.38,29.99 +4338.0,place order,2019-07-31 09:55:09.000Z, ,"['881733','881730','881728','881729','881732','881731']","['990424']", , ,5.938,5962.98 +4339.0,pick item,2019-07-31 09:55:37.000Z, ,"['881696']", , , ,1.37,2500.0 +4340.0,pick item,2019-07-31 10:05:52.000Z, ,"['881721']", , , ,1.28,149.99 +4341.0,pick item,2019-07-31 10:08:20.000Z, ,"['881713']", , , ,0.483,79.99 +4342.0,create package,2019-07-31 10:08:20.000Z, ,"['881656','881677','881676','881721','881678','881503','881629','881658','881659','881660','881679']", ,"['660248']", ,8.562000000000001,7355.95 +4343.0,reorder item,2019-07-31 10:14:23.000Z, ,"['881574']", , , ,0.172,699.0 +4344.0,pick item,2019-07-31 10:19:46.000Z, ,"['881709']", , , ,0.483,79.99 +4345.0,pick item,2019-07-31 10:22:29.000Z, ,"['881664']", , , ,0.38,29.99 +4346.0,reorder item,2019-07-31 10:23:39.000Z, ,"['881635']", , , ,0.483,495.0 +4347.0,pay order,2019-07-31 10:30:49.000Z, , ,"['990281']", , ,2.178,1832.97 +4348.0,pick item,2019-07-31 10:47:22.000Z, ,"['881723']", , , ,0.38,29.99 +4349.0,pick item,2019-07-31 10:51:34.000Z, ,"['881455']", , , ,0.78,99.99 +4350.0,pick item,2019-07-31 10:59:18.000Z, ,"['881544']", , , ,0.483,495.0 +4351.0,failed delivery,2019-07-31 11:04:15.000Z, , , ,"['660240']", ,2.032,928.98 +4352.0,reorder item,2019-07-31 11:13:44.000Z, ,"['881606']", , , ,0.2,39.99 +4353.0,pay order,2019-07-31 11:59:46.000Z, , ,"['990416']", , ,0.172,704.0 +4354.0,pick item,2019-07-31 12:08:56.000Z, ,"['881661']", , , ,0.166,799.0 +4355.0,place order,2019-07-31 12:10:06.000Z, ,"['881737','881736','881734','881738','881735']","['990425']", , ,4.635,3462.98 +4356.0,confirm order,2019-07-31 12:15:14.000Z, , ,"['990424']", , ,5.938,5962.98 +4357.0,send package,2019-07-31 12:16:14.000Z, , , ,"['660248']", ,8.562000000000001,7355.95 +4358.0,pick item,2019-07-31 12:18:20.000Z, ,"['881419']", , , ,0.98,129.99 +4359.0,pick item,2019-07-31 12:30:24.000Z, ,"['881692']", , , ,1.37,2500.0 +4360.0,item out of stock,2019-07-31 12:36:12.000Z, ,"['881728']", , , ,1.25,2200.0 +4361.0,payment reminder,2019-07-31 13:00:42.000Z, , ,"['990196']", , ,0.332,1603.0 +4362.0,pick item,2019-07-31 13:16:53.000Z, ,"['881687']", , , ,1.37,2500.0 +4363.0,package delivered,2019-07-31 13:17:06.000Z, , , ,"['660242']", ,3.14,1683.97 +4364.0,send package,2019-07-31 13:17:45.000Z, , , ,"['660243']", ,7.546,10119.97 +4365.0,pick item,2019-07-31 13:23:24.000Z, ,"['881689']", , , ,0.28,449.0 +4366.0,item out of stock,2019-07-31 13:35:17.000Z, ,"['881706']", , , ,0.38,29.99 +4367.0,pay order,2019-07-31 13:36:36.000Z, , ,"['990407']", , ,1.492,1732.98 +4368.0,place order,2019-07-31 13:39:59.000Z, ,"['881739','881742','881746','881744','881741','881743','881740','881745']","['990426']", , ,4.673,4343.97 +4369.0,send package,2019-07-31 13:53:41.000Z, , , ,"['660246']", ,2.108,2740.98 +4370.0,failed delivery,2019-07-31 14:02:29.000Z, , , ,"['660240']", ,2.032,928.98 +4371.0,confirm order,2019-07-31 14:03:33.000Z, , ,"['990415']", , ,1.06,553.99 +4372.0,pick item,2019-07-31 14:13:54.000Z, ,"['881228']", , , ,1.48,199.99 +4373.0,create package,2019-07-31 14:13:54.000Z, ,"['881550','881709','881430','881713','881712','881711']", ,"['660249']", ,2.721,877.96 +4374.0,pick item,2019-07-31 14:16:45.000Z, ,"['881725']", , , ,0.98,129.99 +4375.0,pick item,2019-07-31 14:31:46.000Z, ,"['881686']", , , ,0.188,1149.0 +4376.0,send package,2019-07-31 14:48:42.000Z, , , ,"['660245']", ,6.974,7768.94 +4377.0,pick item,2019-07-31 14:54:49.000Z, ,"['881746']", , , ,0.483,495.0 +4378.0,pick item,2019-07-31 15:21:04.000Z, ,"['881734']", , , ,1.37,2500.0 +4379.0,pick item,2019-07-31 15:24:07.000Z, ,"['881739']", , , ,0.28,89.99 +4380.0,pay order,2019-07-31 15:25:56.000Z, , ,"['990324']", , ,1.429,2002.99 +4381.0,pay order,2019-07-31 15:37:25.000Z, , ,"['990216']", , ,2.74,2883.99 +4382.0,place order,2019-07-31 15:39:45.000Z, ,"['881748','881747']","['990427']", , ,0.354,1953.0 +4383.0,pick item,2019-07-31 15:44:55.000Z, ,"['881652']", , , ,1.25,2200.0 +4384.0,create package,2019-07-31 15:44:55.000Z, ,"['881497','881434','881607']", ,"['660250']", ,0.871,1683.99 +4385.0,pay order,2019-07-31 15:54:30.000Z, , ,"['990377']", , ,0.821,2602.0 +4386.0,pick item,2019-07-31 15:56:34.000Z, ,"['881737']", , , ,1.28,149.99 +4387.0,pick item,2019-07-31 16:08:56.000Z, ,"['881695']", , , ,0.44,476.0 +4388.0,pick item,2019-07-31 16:09:18.000Z, ,"['881577']", , , ,0.78,99.99 +4389.0,create package,2019-07-31 16:09:18.000Z, ,"['881553','881552','880807']", ,"['660251']", ,1.926,1028.98 +4390.0,failed delivery,2019-07-31 17:07:43.000Z, , , ,"['660248']", ,8.562000000000001,7355.95 +4391.0,item out of stock,2019-07-31 17:21:25.000Z, ,"['881545']", , , ,0.44,476.0 +4392.0,place order,2019-07-31 17:39:18.000Z, ,"['881750','881749']","['990428']", , ,1.09,623.99 +4393.0,pick item,2019-07-31 19:45:50.000Z, ,"['881733']", , , ,1.25,2200.0 +4394.0,pick item,2019-07-31 19:57:55.000Z, ,"['881742']", , , ,1.25,2200.0 +4395.0,pick item,2019-07-31 20:00:09.000Z, ,"['881726']", , , ,0.495,129.0 +4396.0,create package,2019-07-31 20:00:09.000Z, ,"['881638','881643','881639','881640']", ,"['660252']", ,1.3530000000000002,728.97 +4397.0,place order,2019-07-31 20:58:11.000Z, ,"['881751']","['990429']", , ,0.44,481.0 +4398.0,package delivered,2019-08-01 06:20:57.000Z, , , ,"['660238']", ,4.452,4586.96 +4399.0,pick item,2019-08-01 07:00:22.000Z, ,"['881707']", , , ,0.2,39.99 +4400.0,send package,2019-08-01 07:13:04.000Z, , , ,"['660251']", ,1.926,1028.98 +4401.0,item out of stock,2019-08-01 07:15:53.000Z, ,"['881605']", , , ,0.44,476.0 +4402.0,confirm order,2019-08-01 07:28:06.000Z, , ,"['990411']", , ,1.356,1101.99 +4403.0,place order,2019-08-01 07:47:56.000Z, ,"['881752','881753']","['990430']", , ,1.42,610.99 +4404.0,pay order,2019-08-01 07:54:10.000Z, , ,"['990390']", , ,3.42,484.96 +4405.0,item out of stock,2019-08-01 08:09:08.000Z, ,"['881691']", , , ,0.28,89.99 +4406.0,package delivered,2019-08-01 08:26:56.000Z, , , ,"['660243']", ,7.546,10119.97 +4407.0,pick item,2019-08-01 08:32:17.000Z, ,"['881682']", , , ,0.188,1149.0 +4408.0,payment reminder,2019-08-01 08:40:12.000Z, , ,"['990312']", , ,0.48,134.98 +4409.0,item out of stock,2019-08-01 08:41:06.000Z, ,"['881641']", , , ,1.37,2500.0 +4410.0,pick item,2019-08-01 08:43:31.000Z, ,"['881642']", , , ,0.166,799.0 +4411.0,pick item,2019-08-01 08:49:27.000Z, ,"['881724']", , , ,0.2,39.99 +4412.0,create package,2019-08-01 08:49:27.000Z, ,"['881533','881420','881534','881419']", ,"['660253']", ,3.023,1468.97 +4413.0,pick item,2019-08-01 09:02:42.000Z, ,"['881199']", , , ,0.188,1149.0 +4414.0,item out of stock,2019-08-01 09:05:35.000Z, ,"['881715']", , , ,0.38,29.99 +4415.0,pick item,2019-08-01 09:12:48.000Z, ,"['881662']", , , ,0.166,799.0 +4416.0,pick item,2019-08-01 09:12:55.000Z, ,"['881675']", , , ,0.495,129.0 +4417.0,pick item,2019-08-01 09:26:49.000Z, ,"['881248']", , , ,1.25,2200.0 +4418.0,create package,2019-08-01 09:26:49.000Z, ,"['881632','881634','881633']", ,"['660254']", ,1.203,2024.0 +4419.0,reorder item,2019-08-01 09:28:42.000Z, ,"['881688']", , , ,0.78,99.99 +4420.0,pick item,2019-08-01 09:31:33.000Z, ,"['881745']", , , ,0.28,449.0 +4421.0,pick item,2019-08-01 09:55:06.000Z, ,"['881670']", , , ,1.28,149.99 +4422.0,place order,2019-08-01 09:55:40.000Z, ,"['881757','881758','881760','881755','881756','881754','881759']","['990431']", , ,2.383,4138.99 +4423.0,package delivered,2019-08-01 10:05:21.000Z, , , ,"['660245']", ,6.974,7768.94 +4424.0,reorder item,2019-08-01 10:24:15.000Z, ,"['881728']", , , ,1.25,2200.0 +4425.0,pick item,2019-08-01 10:36:42.000Z, ,"['881680']", , , ,0.98,129.99 +4426.0,create package,2019-08-01 10:36:42.000Z, ,"['881739','881742','881746','881646','881745','881627','881665','881228']", ,"['660255']", ,5.202000000000001,4412.96 +4427.0,send package,2019-08-01 10:39:54.000Z, , , ,"['660249']", ,2.721,877.96 +4428.0,reorder item,2019-08-01 10:46:55.000Z, ,"['881624']", , , ,0.495,129.0 +4429.0,pick item,2019-08-01 11:27:13.000Z, ,"['881287']", , , ,1.48,199.99 +4430.0,pick item,2019-08-01 11:34:57.000Z, ,"['881736']", , , ,1.28,149.99 +4431.0,place order,2019-08-01 12:11:07.000Z, ,"['881763','881764','881762','881761']","['990432']", , ,2.3,3599.99 +4432.0,confirm order,2019-08-01 12:13:22.000Z, , ,"['990425']", , ,4.635,3462.98 +4433.0,reorder item,2019-08-01 12:24:05.000Z, ,"['881706']", , , ,0.38,29.99 +4434.0,pay order,2019-08-01 12:29:24.000Z, , ,"['990349']", , ,3.13,2734.98 +4435.0,reorder item,2019-08-01 12:29:33.000Z, ,"['881668']", , , ,0.188,1149.0 +4436.0,send package,2019-08-01 13:09:27.000Z, , , ,"['660255']", ,5.202000000000001,4412.96 +4437.0,pick item,2019-08-01 13:16:50.000Z, ,"['881722']", , , ,1.25,2200.0 +4438.0,pick item,2019-08-01 13:34:40.000Z, ,"['881714']", , , ,0.2,39.99 +4439.0,place order,2019-08-01 13:42:02.000Z, ,"['881766','881767','881768','881765']","['990433']", , ,2.28,770.97 +4440.0,payment reminder,2019-08-01 13:48:26.000Z, , ,"['990318']", , ,1.541,3435.99 +4441.0,reorder item,2019-08-01 13:54:59.000Z, ,"['881715']", , , ,0.38,29.99 +4442.0,item out of stock,2019-08-01 13:57:17.000Z, ,"['881748']", , , ,0.166,799.0 +4443.0,pay order,2019-08-01 14:02:19.000Z, , ,"['990408']", , ,2.604,4542.99 +4444.0,pay order,2019-08-01 14:06:54.000Z, , ,"['990367']", , ,3.084,3456.98 +4445.0,reorder item,2019-08-01 14:07:39.000Z, ,"['881641']", , , ,1.37,2500.0 +4446.0,pick item,2019-08-01 14:20:06.000Z, ,"['881716']", , , ,0.172,699.0 +4447.0,pick item,2019-08-01 14:25:34.000Z, ,"['881685']", , , ,0.78,99.99 +4448.0,pick item,2019-08-01 14:26:48.000Z, ,"['881759']", , , ,0.21,529.0 +4449.0,pick item,2019-08-01 14:31:57.000Z, ,"['881693']", , , ,0.88,89.99 +4450.0,create package,2019-08-01 14:31:57.000Z, ,"['881725','881724','881596','881726']", ,"['660256']", ,2.115,774.98 +4451.0,confirm order,2019-08-01 14:54:16.000Z, , ,"['990426']", , ,4.673,4343.97 +4452.0,failed delivery,2019-08-01 15:02:11.000Z, , , ,"['660248']", ,8.562000000000001,7355.95 +4453.0,confirm order,2019-08-01 15:23:22.000Z, , ,"['990427']", , ,0.354,1953.0 +4454.0,place order,2019-08-01 15:43:51.000Z, ,"['881769','881771','881772','881770']","['990434']", , ,2.698,1254.99 +4455.0,pick item,2019-08-01 15:46:56.000Z, ,"['881752']", , , ,0.98,129.99 +4456.0,place order,2019-08-01 17:51:08.000Z, ,"['881777','881775','881779','881776','881774','881778','881773']","['990435']", , ,2.944,2227.96 +4457.0,pick item,2019-08-01 20:54:06.000Z, ,"['881760']", , , ,0.172,699.0 +4458.0,place order,2019-08-01 21:21:51.000Z, ,"['881780','881782','881781']","['990436']", , ,1.963,689.98 +4459.0,pick item,2019-08-02 06:52:28.000Z, ,"['881762']", , , ,0.28,89.99 +4460.0,place order,2019-08-02 07:17:48.000Z, ,"['881783']","['990437']", , ,0.38,34.99 +4461.0,pick item,2019-08-02 07:19:01.000Z, ,"['881773']", , , ,0.166,799.0 +4462.0,create package,2019-08-02 07:19:01.000Z, ,"['881670','881699','881226','881700','881698','881600','881512','881701']", ,"['660257']", ,3.716,3921.97 +4463.0,pick item,2019-08-02 07:42:18.000Z, ,"['881776']", , , ,0.38,29.99 +4464.0,pay order,2019-08-02 08:09:38.000Z, , ,"['990418']", , ,1.4980000000000002,2278.98 +4465.0,pick item,2019-08-02 08:28:18.000Z, ,"['881719']", , , ,0.495,129.0 +4466.0,pick item,2019-08-02 08:32:41.000Z, ,"['881558']", , , ,1.37,2500.0 +4467.0,confirm order,2019-08-02 08:33:38.000Z, , ,"['990428']", , ,1.09,623.99 +4468.0,pick item,2019-08-02 08:47:42.000Z, ,"['881482']", , , ,0.483,1099.0 +4469.0,pay order,2019-08-02 08:50:41.000Z, , ,"['990312']", , ,0.48,134.98 +4470.0,reorder item,2019-08-02 08:52:01.000Z, ,"['881490']", , , ,1.28,149.99 +4471.0,place order,2019-08-02 08:55:23.000Z, ,"['881784','881789','881788','881785','881787','881786']","['990438']", , ,4.289,5181.98 +4472.0,reorder item,2019-08-02 08:56:03.000Z, ,"['881628']", , , ,0.88,89.99 +4473.0,pick item,2019-08-02 09:00:02.000Z, ,"['881206']", , , ,0.88,89.99 +4474.0,pick item,2019-08-02 09:53:14.000Z, ,"['881766']", , , ,0.44,476.0 +4475.0,item out of stock,2019-08-02 10:08:04.000Z, ,"['881741']", , , ,0.38,29.99 +4476.0,reorder item,2019-08-02 10:16:15.000Z, ,"['881631']", , , ,0.98,129.99 +4477.0,reorder item,2019-08-02 10:24:35.000Z, ,"['881748']", , , ,0.166,799.0 +4478.0,send package,2019-08-02 10:58:08.000Z, , , ,"['660253']", ,3.023,1468.97 +4479.0,pick item,2019-08-02 11:00:55.000Z, ,"['881731']", , , ,0.495,129.0 +4480.0,place order,2019-08-02 11:10:34.000Z, ,"['881790','881793','881792','881791']","['990439']", , ,1.831,2187.99 +4481.0,item out of stock,2019-08-02 11:15:48.000Z, ,"['881751']", , , ,0.44,476.0 +4482.0,pick item,2019-08-02 11:29:01.000Z, ,"['881740']", , , ,0.28,449.0 +4483.0,create package,2019-08-02 11:29:01.000Z, ,"['881572','881766','881760','881671','881686','881685','881759','881687','881684','881673']", ,"['660258']", ,4.777,8599.98 +4484.0,confirm order,2019-08-02 11:38:29.000Z, , ,"['990434']", , ,2.698,1254.99 +4485.0,pay order,2019-08-02 11:40:55.000Z, , ,"['990395']", , ,2.733,3693.99 +4486.0,pay order,2019-08-02 11:47:58.000Z, , ,"['990420']", , ,3.009,1612.95 +4487.0,send package,2019-08-02 11:53:24.000Z, , , ,"['660247']", ,1.868,2592.99 +4488.0,package delivered,2019-08-02 12:12:37.000Z, , , ,"['660251']", ,1.926,1028.98 +4489.0,confirm order,2019-08-02 12:23:55.000Z, , ,"['990437']", , ,0.38,34.99 +4490.0,confirm order,2019-08-02 12:27:24.000Z, , ,"['990423']", , ,1.955,393.97 +4491.0,place order,2019-08-02 12:40:55.000Z, ,"['881794']","['990440']", , ,0.98,134.99 +4492.0,item out of stock,2019-08-02 12:41:12.000Z, ,"['881761']", , , ,1.37,2500.0 +4493.0,package delivered,2019-08-02 12:50:39.000Z, , , ,"['660240']", ,2.032,928.98 +4494.0,pick item,2019-08-02 12:54:01.000Z, ,"['881727']", , , ,0.28,89.99 +4495.0,pick item,2019-08-02 13:08:43.000Z, ,"['881768']", , , ,0.78,99.99 +4496.0,pick item,2019-08-02 13:56:30.000Z, ,"['881784']", , , ,0.483,1099.0 +4497.0,reorder item,2019-08-02 14:10:04.000Z, ,"['881545']", , , ,0.44,476.0 +4498.0,item out of stock,2019-08-02 14:14:19.000Z, ,"['881590']", , , ,0.98,129.99 +4499.0,pick item,2019-08-02 14:27:44.000Z, ,"['881785']", , , ,1.37,2500.0 +4500.0,confirm order,2019-08-02 14:32:13.000Z, , ,"['990435']", , ,2.944,2227.96 +4501.0,place order,2019-08-02 14:41:37.000Z, ,"['881798','881795','881797','881796']","['990441']", , ,1.332,2022.98 +4502.0,reorder item,2019-08-02 14:42:57.000Z, ,"['881691']", , , ,0.28,89.99 +4503.0,pick item,2019-08-02 14:45:55.000Z, ,"['881795']", , , ,0.166,799.0 +4504.0,item out of stock,2019-08-02 14:51:23.000Z, ,"['881720']", , , ,1.28,149.99 +4505.0,reorder item,2019-08-02 15:19:11.000Z, ,"['881531']", , , ,0.2,39.99 +4506.0,package delivered,2019-08-02 15:33:51.000Z, , , ,"['660248']", ,8.562000000000001,7355.95 +4507.0,pick item,2019-08-02 15:37:05.000Z, ,"['881767']", , , ,0.28,89.99 +4508.0,item out of stock,2019-08-02 16:06:35.000Z, ,"['881749']", , , ,0.21,529.0 +4509.0,place order,2019-08-02 16:43:02.000Z, ,"['881801','881800','881799']","['990442']", , ,1.746,3833.0 +4510.0,item out of stock,2019-08-02 17:05:55.000Z, ,"['881710']", , , ,0.188,1149.0 +4511.0,confirm order,2019-08-02 17:31:44.000Z, , ,"['990438']", , ,4.289,5181.98 +4512.0,pick item,2019-08-02 19:46:14.000Z, ,"['881593']", , , ,0.483,79.99 +4513.0,place order,2019-08-02 19:48:41.000Z, ,"['881802']","['990443']", , ,0.28,454.0 +4514.0,create package,2019-08-02 23:00:00.000Z, ,"['881609','881662','881696','881693','881695','881577','881661','881692','881664','881611']", ,"['660259']", ,6.812,7872.96 +4515.0,place order,2019-08-03 12:52:00.000Z, ,"['881808','881805','881803','881804','881806','881807']","['990444']", , ,4.4110000000000005,2742.96 +4516.0,place order,2019-08-04 13:37:54.000Z, ,"['881812','881809','881813','881815','881811','881810','881814']","['990445']", , ,4.263999999999999,2381.96 +4517.0,payment reminder,2019-08-04 15:15:35.000Z, , ,"['990326']", , ,0.649,1903.0 +4518.0,pick item,2019-08-05 06:12:25.000Z, ,"['881128']", , , ,0.28,89.99 +4519.0,place order,2019-08-05 06:27:42.000Z, ,"['881816']","['990446']", , ,0.44,481.0 +4520.0,pick item,2019-08-05 06:43:06.000Z, ,"['881036']", , , ,0.28,449.0 +4521.0,package delivered,2019-08-05 07:42:47.000Z, , , ,"['660246']", ,2.108,2740.98 +4522.0,pick item,2019-08-05 07:46:40.000Z, ,"['881587']", , , ,0.483,1099.0 +4523.0,pick item,2019-08-05 07:47:15.000Z, ,"['881816']", , , ,0.44,476.0 +4524.0,confirm order,2019-08-05 07:59:15.000Z, , ,"['990442']", , ,1.746,3833.0 +4525.0,pick item,2019-08-05 08:00:16.000Z, ,"['881801']", , , ,0.21,529.0 +4526.0,send package,2019-08-05 08:11:51.000Z, , , ,"['660257']", ,3.716,3921.97 +4527.0,package delivered,2019-08-05 08:16:53.000Z, , , ,"['660253']", ,3.023,1468.97 +4528.0,pick item,2019-08-05 08:22:57.000Z, ,"['881815']", , , ,1.48,199.99 +4529.0,place order,2019-08-05 08:31:20.000Z, ,"['881817','881818']","['990447']", , ,0.966,995.0 +4530.0,reorder item,2019-08-05 08:37:42.000Z, ,"['881741']", , , ,0.38,29.99 +4531.0,send package,2019-08-05 08:41:49.000Z, , , ,"['660252']", ,1.3530000000000002,728.97 +4532.0,pick item,2019-08-05 08:42:07.000Z, ,"['881702']", , , ,0.28,89.99 +4533.0,pick item,2019-08-05 08:48:03.000Z, ,"['881770']", , , ,0.495,129.0 +4534.0,reorder item,2019-08-05 08:56:09.000Z, ,"['881581']", , , ,0.28,89.99 +4535.0,send package,2019-08-05 08:58:52.000Z, , , ,"['660259']", ,6.812,7872.96 +4536.0,pick item,2019-08-05 09:05:13.000Z, ,"['881440']", , , ,0.188,1149.0 +4537.0,confirm order,2019-08-05 09:11:46.000Z, , ,"['990445']", , ,4.263999999999999,2381.96 +4538.0,pay order,2019-08-05 09:20:44.000Z, , ,"['990442']", , ,1.746,3833.0 +4539.0,payment reminder,2019-08-05 09:28:06.000Z, , ,"['990319']", , ,2.129,1498.99 +4540.0,package delivered,2019-08-05 09:31:48.000Z, , , ,"['660249']", ,2.721,877.96 +4541.0,send package,2019-08-05 09:36:54.000Z, , , ,"['660256']", ,2.115,774.98 +4542.0,confirm order,2019-08-05 09:55:10.000Z, , ,"['990439']", , ,1.831,2187.99 +4543.0,place order,2019-08-05 10:22:28.000Z, ,"['881819','881821','881820']","['990448']", , ,2.053,3783.0 +4544.0,pick item,2019-08-05 10:24:47.000Z, ,"['881708']", , , ,0.21,529.0 +4545.0,payment reminder,2019-08-05 10:32:47.000Z, , ,"['990329']", , ,4.001,1702.96 +4546.0,payment reminder,2019-08-05 10:32:55.000Z, , ,"['990336']", , ,1.3630000000000002,589.99 +4547.0,reorder item,2019-08-05 10:33:35.000Z, ,"['881749']", , , ,0.21,529.0 +4548.0,send package,2019-08-05 10:33:57.000Z, , , ,"['660254']", ,1.203,2024.0 +4549.0,send package,2019-08-05 10:50:51.000Z, , , ,"['660250']", ,0.871,1683.99 +4550.0,pick item,2019-08-05 11:10:37.000Z, ,"['881565']", , , ,0.166,799.0 +4551.0,pay order,2019-08-05 11:15:57.000Z, , ,"['990263']", , ,1.929,1448.99 +4552.0,confirm order,2019-08-05 11:45:49.000Z, , ,"['990443']", , ,0.28,454.0 +4553.0,pick item,2019-08-05 11:58:56.000Z, ,"['881210']", , , ,0.495,129.0 +4554.0,pick item,2019-08-05 12:01:20.000Z, ,"['881730']", , , ,1.48,199.99 +4555.0,create package,2019-08-05 12:01:20.000Z, ,"['881248','881652','881544','881447','881482']", ,"['660260']", ,3.638,6693.0 +4556.0,place order,2019-08-05 12:04:43.000Z, ,"['881822','881823']","['990449']", , ,1.068,1243.99 +4557.0,confirm order,2019-08-05 12:27:03.000Z, , ,"['990432']", , ,2.3,3599.99 +4558.0,item out of stock,2019-08-05 12:42:52.000Z, ,"['881753']", , , ,0.44,476.0 +4559.0,confirm order,2019-08-05 12:45:20.000Z, , ,"['990430']", , ,1.42,610.99 +4560.0,pick item,2019-08-05 13:06:46.000Z, ,"['881603']", , , ,1.37,2500.0 +4561.0,package delivered,2019-08-05 13:12:41.000Z, , , ,"['660257']", ,3.716,3921.97 +4562.0,confirm order,2019-08-05 13:15:18.000Z, , ,"['990446']", , ,0.44,481.0 +4563.0,failed delivery,2019-08-05 13:18:21.000Z, , , ,"['660252']", ,1.3530000000000002,728.97 +4564.0,place order,2019-08-05 13:29:13.000Z, ,"['881824','881825','881826','881827']","['990450']", , ,1.823,779.97 +4565.0,pick item,2019-08-05 13:51:40.000Z, ,"['881718']", , , ,0.2,39.99 +4566.0,failed delivery,2019-08-05 13:54:05.000Z, , , ,"['660254']", ,1.203,2024.0 +4567.0,payment reminder,2019-08-05 13:56:34.000Z, , ,"['990338']", , ,0.662,1322.99 +4568.0,package delivered,2019-08-05 14:16:26.000Z, , , ,"['660250']", ,0.871,1683.99 +4569.0,item out of stock,2019-08-05 14:17:30.000Z, ,"['881804']", , , ,0.483,1099.0 +4570.0,item out of stock,2019-08-05 14:21:05.000Z, ,"['881806']", , , ,0.78,99.99 +4571.0,pick item,2019-08-05 14:29:01.000Z, ,"['881683']", , , ,1.37,2500.0 +4572.0,confirm order,2019-08-05 14:59:31.000Z, , ,"['990449']", , ,1.068,1243.99 +4573.0,pay order,2019-08-05 15:00:27.000Z, , ,"['990405']", , ,3.273,3312.98 +4574.0,pick item,2019-08-05 15:00:34.000Z, ,"['881782']", , , ,1.28,149.99 +4575.0,confirm order,2019-08-05 15:03:12.000Z, , ,"['990436']", , ,1.963,689.98 +4576.0,place order,2019-08-05 15:18:14.000Z, ,"['881830','881833','881835','881832','881836','881837','881831','881834','881829','881828']","['990451']", , ,7.49,5872.94 +4577.0,item out of stock,2019-08-05 15:20:33.000Z, ,"['881803']", , , ,1.48,199.99 +4578.0,pay order,2019-08-05 15:34:19.000Z, , ,"['990415']", , ,1.06,553.99 +4579.0,pick item,2019-08-05 15:40:02.000Z, ,"['881799']", , , ,1.37,2500.0 +4580.0,create package,2019-08-05 15:40:02.000Z, ,"['881736','881737','881680','881734','881681','881682']", ,"['660261']", ,5.297999999999999,4118.96 +4581.0,confirm order,2019-08-05 15:40:14.000Z, , ,"['990412']", , ,1.3630000000000002,174.98 +4582.0,pick item,2019-08-05 15:41:05.000Z, ,"['881789']", , , ,0.166,799.0 +4583.0,reorder item,2019-08-05 15:41:54.000Z, ,"['881654']", , , ,0.483,79.99 +4584.0,pick item,2019-08-05 15:50:10.000Z, ,"['881754']", , , ,0.166,799.0 +4585.0,reorder item,2019-08-05 16:40:09.000Z, ,"['881605']", , , ,0.44,476.0 +4586.0,place order,2019-08-05 16:56:15.000Z, ,"['881839','881840','881838']","['990452']", , ,2.043,683.98 +4587.0,payment reminder,2019-08-05 17:04:54.000Z, , ,"['990222']", , ,1.715,2351.99 +4588.0,package delivered,2019-08-05 17:10:15.000Z, , , ,"['660259']", ,6.812,7872.96 +4589.0,confirm order,2019-08-05 17:29:53.000Z, , ,"['990440']", , ,0.98,134.99 +4590.0,confirm order,2019-08-05 19:45:21.000Z, , ,"['990448']", , ,2.053,3783.0 +4591.0,item out of stock,2019-08-05 20:01:49.000Z, ,"['881811']", , , ,0.166,799.0 +4592.0,place order,2019-08-05 20:28:20.000Z, ,"['881844','881843','881842','881841']","['990453']", , ,1.983,2128.99 +4593.0,place order,2019-08-06 06:48:15.000Z, ,"['881845','881847','881846','881848']","['990454']", , ,2.531,2482.98 +4594.0,payment reminder,2019-08-06 06:50:44.000Z, , ,"['990322']", , ,1.733,2700.0 +4595.0,pick item,2019-08-06 06:54:09.000Z, ,"['881831']", , , ,0.28,449.0 +4596.0,package delivered,2019-08-06 07:11:42.000Z, , , ,"['660255']", ,5.202000000000001,4412.96 +4597.0,item out of stock,2019-08-06 07:38:51.000Z, ,"['881524']", , , ,0.2,39.99 +4598.0,item out of stock,2019-08-06 07:46:20.000Z, ,"['881830']", , , ,0.88,89.99 +4599.0,pick item,2019-08-06 08:01:51.000Z, ,"['881834']", , , ,1.25,2200.0 +4600.0,pick item,2019-08-06 08:02:10.000Z, ,"['881774']", , , ,0.172,699.0 +4601.0,pick item,2019-08-06 08:07:40.000Z, ,"['881818']", , , ,0.483,495.0 +4602.0,create package,2019-08-06 08:07:40.000Z, ,"['881718','881455','881723','881719','881782','881675','881722']", ,"['660262']", ,4.88,2777.96 +4603.0,confirm order,2019-08-06 08:13:07.000Z, , ,"['990450']", , ,1.823,779.97 +4604.0,package delivered,2019-08-06 08:21:33.000Z, , , ,"['660247']", ,1.868,2592.99 +4605.0,pick item,2019-08-06 08:22:55.000Z, ,"['881566']", , , ,0.188,1149.0 +4606.0,confirm order,2019-08-06 08:26:06.000Z, , ,"['990452']", , ,2.043,683.98 +4607.0,pick item,2019-08-06 08:32:31.000Z, ,"['881780']", , , ,0.2,39.99 +4608.0,pick item,2019-08-06 08:44:18.000Z, ,"['881790']", , , ,0.28,449.0 +4609.0,pick item,2019-08-06 08:47:23.000Z, ,"['881729']", , , ,0.98,129.99 +4610.0,pick item,2019-08-06 09:00:35.000Z, ,"['881765']", , , ,0.78,99.99 +4611.0,place order,2019-08-06 09:02:10.000Z, ,"['881850','881851','881849','881852']","['990455']", , ,3.338,1522.98 +4612.0,pick item,2019-08-06 09:05:57.000Z, ,"['881802']", , , ,0.28,449.0 +4613.0,confirm order,2019-08-06 09:08:27.000Z, , ,"['990433']", , ,2.28,770.97 +4614.0,pick item,2019-08-06 09:09:56.000Z, ,"['881781']", , , ,0.483,495.0 +4615.0,create package,2019-08-06 09:09:56.000Z, ,"['881689']", ,"['660263']", ,0.28,449.0 +4616.0,payment reminder,2019-08-06 09:14:27.000Z, , ,"['990225']", , ,1.203,3286.99 +4617.0,item out of stock,2019-08-06 09:40:00.000Z, ,"['881763']", , , ,0.44,476.0 +4618.0,pay order,2019-08-06 09:42:51.000Z, , ,"['990313']", , ,1.209,2082.98 +4619.0,confirm order,2019-08-06 09:43:49.000Z, , ,"['990447']", , ,0.966,995.0 +4620.0,payment reminder,2019-08-06 09:52:15.000Z, , ,"['990220']", , ,4.476,1910.97 +4621.0,failed delivery,2019-08-06 09:52:31.000Z, , , ,"['660252']", ,1.3530000000000002,728.97 +4622.0,pick item,2019-08-06 10:09:22.000Z, ,"['881779']", , , ,0.483,79.99 +4623.0,create package,2019-08-06 10:09:22.000Z, ,"['881708','881733','881210','881707','881730','881729','881731']", ,"['660264']", ,5.11,3356.97 +4624.0,pick item,2019-08-06 10:16:07.000Z, ,"['881852']", , , ,0.483,1099.0 +4625.0,confirm order,2019-08-06 10:23:19.000Z, , ,"['990453']", , ,1.983,2128.99 +4626.0,place order,2019-08-06 10:24:07.000Z, ,"['881856','881854','881855','881853']","['990456']", , ,3.135,453.97 +4627.0,confirm order,2019-08-06 10:28:52.000Z, , ,"['990451']", , ,7.49,5872.94 +4628.0,pick item,2019-08-06 10:30:28.000Z, ,"['881772']", , , ,1.28,149.99 +4629.0,pick item,2019-08-06 10:42:59.000Z, ,"['881704']", , , ,0.483,495.0 +4630.0,pick item,2019-08-06 10:43:51.000Z, ,"['881777']", , , ,0.483,495.0 +4631.0,pick item,2019-08-06 11:02:18.000Z, ,"['880868']", , , ,0.78,99.99 +4632.0,confirm order,2019-08-06 11:02:30.000Z, , ,"['990431']", , ,2.383,4138.99 +4633.0,pick item,2019-08-06 11:23:04.000Z, ,"['881757']", , , ,0.98,129.99 +4634.0,pick item,2019-08-06 11:44:27.000Z, ,"['881775']", , , ,0.88,89.99 +4635.0,create package,2019-08-06 11:44:27.000Z, ,"['881036','881128','881716','881762','881815','881206','881642']", ,"['660265']", ,3.5380000000000003,2416.96 +4636.0,pick item,2019-08-06 11:49:58.000Z, ,"['881822']", , , ,0.188,1149.0 +4637.0,place order,2019-08-06 12:08:01.000Z, ,"['881859','881857','881858']","['990457']", , ,1.6,1019.99 +4638.0,pick item,2019-08-06 12:38:41.000Z, ,"['881859']", , , ,0.88,89.99 +4639.0,confirm order,2019-08-06 12:40:27.000Z, , ,"['990457']", , ,1.6,1019.99 +4640.0,send package,2019-08-06 12:42:47.000Z, , , ,"['660262']", ,4.88,2777.96 +4641.0,confirm order,2019-08-06 12:45:54.000Z, , ,"['990441']", , ,1.332,2022.98 +4642.0,pick item,2019-08-06 13:02:12.000Z, ,"['881797']", , , ,0.2,39.99 +4643.0,pick item,2019-08-06 13:04:23.000Z, ,"['881794']", , , ,0.98,129.99 +4644.0,item out of stock,2019-08-06 13:07:11.000Z, ,"['881854']", , , ,0.98,129.99 +4645.0,reorder item,2019-08-06 13:09:04.000Z, ,"['881524']", , , ,0.2,39.99 +4646.0,reorder item,2019-08-06 13:21:29.000Z, ,"['881761']", , , ,1.37,2500.0 +4647.0,place order,2019-08-06 13:35:50.000Z, ,"['881860','881862','881864','881863','881865','881861']","['990458']", , ,4.6560000000000015,4682.97 +4648.0,pay order,2019-08-06 13:38:29.000Z, , ,"['990412']", , ,1.3630000000000002,174.98 +4649.0,pick item,2019-08-06 13:38:49.000Z, ,"['881857']", , , ,0.44,476.0 +4650.0,payment reminder,2019-08-06 13:54:16.000Z, , ,"['990340']", , ,3.06,3233.99 +4651.0,pick item,2019-08-06 14:07:58.000Z, ,"['881520']", , , ,0.172,699.0 +4652.0,reorder item,2019-08-06 14:20:51.000Z, ,"['881854']", , , ,0.98,129.99 +4653.0,confirm order,2019-08-06 14:30:23.000Z, , ,"['990454']", , ,2.531,2482.98 +4654.0,payment reminder,2019-08-06 14:38:29.000Z, , ,"['990345']", , ,0.978,629.0 +4655.0,pick item,2019-08-06 14:41:43.000Z, ,"['881738']", , , ,0.495,129.0 +4656.0,create package,2019-08-06 14:41:43.000Z, ,"['881287','881199']", ,"['660266']", ,1.668,1348.99 +4657.0,package delivered,2019-08-06 15:02:11.000Z, , , ,"['660262']", ,4.88,2777.96 +4658.0,send package,2019-08-06 15:05:00.000Z, , , ,"['660265']", ,3.5380000000000003,2416.96 +4659.0,pick item,2019-08-06 15:05:21.000Z, ,"['881783']", , , ,0.38,29.99 +4660.0,pick item,2019-08-06 15:08:44.000Z, ,"['881796']", , , ,0.483,79.99 +4661.0,create package,2019-08-06 15:08:44.000Z, ,"['881714','881752','881801','881799']", ,"['660267']", ,2.76,3198.98 +4662.0,send package,2019-08-06 15:09:13.000Z, , , ,"['660258']", ,4.777,8599.98 +4663.0,pick item,2019-08-06 15:10:10.000Z, ,"['881835']", , , ,1.25,2200.0 +4664.0,send package,2019-08-06 15:14:48.000Z, , , ,"['660261']", ,5.297999999999999,4118.96 +4665.0,item out of stock,2019-08-06 15:26:26.000Z, ,"['881732']", , , ,0.483,1099.0 +4666.0,place order,2019-08-06 15:31:27.000Z, ,"['881868','881869','881866','881867']","['990459']", , ,1.115,1231.99 +4667.0,payment reminder,2019-08-06 15:48:10.000Z, , ,"['990344']", , ,5.597,3410.95 +4668.0,pick item,2019-08-06 15:48:36.000Z, ,"['881820']", , , ,1.37,2500.0 +4669.0,pick item,2019-08-06 15:48:46.000Z, ,"['881650']", , , ,0.88,89.99 +4670.0,pick item,2019-08-06 15:52:45.000Z, ,"['881827']", , , ,0.28,89.99 +4671.0,create package,2019-08-06 15:52:45.000Z, ,"['881777','881593','881775','881727','881779','881774','881773','881776']", ,"['660268']", ,3.327,2362.95 +4672.0,pay order,2019-08-06 15:58:42.000Z, , ,"['990457']", , ,1.6,1019.99 +4673.0,pay order,2019-08-06 16:02:32.000Z, , ,"['990417']", , ,5.103,6604.98 +4674.0,pick item,2019-08-06 16:57:18.000Z, ,"['881861']", , , ,0.483,1099.0 +4675.0,place order,2019-08-06 17:22:42.000Z, ,"['881870','881873','881872','881871']","['990460']", , ,3.13,2784.97 +4676.0,pick item,2019-08-06 17:33:03.000Z, ,"['881866']", , , ,0.2,39.99 +4677.0,payment reminder,2019-08-06 18:56:58.000Z, , ,"['990343']", , ,0.49,623.99 +4678.0,place order,2019-08-06 20:24:58.000Z, ,"['881876','881877','881874','881875']","['990461']", , ,1.776,4852.0 +4679.0,pick item,2019-08-07 06:11:20.000Z, ,"['881851']", , , ,1.48,199.99 +4680.0,reorder item,2019-08-07 06:26:34.000Z, ,"['881806']", , , ,0.78,99.99 +4681.0,place order,2019-08-07 06:41:31.000Z, ,"['881882','881878','881879','881880','881883','881881']","['990462']", , ,4.176,4811.98 +4682.0,package delivered,2019-08-07 06:47:33.000Z, , , ,"['660258']", ,4.777,8599.98 +4683.0,pay order,2019-08-07 06:47:49.000Z, , ,"['990440']", , ,0.98,134.99 +4684.0,item out of stock,2019-08-07 06:48:48.000Z, ,"['881856']", , , ,0.495,129.0 +4685.0,pick item,2019-08-07 06:59:47.000Z, ,"['881792']", , , ,0.188,1149.0 +4686.0,reorder item,2019-08-07 07:00:47.000Z, ,"['881590']", , , ,0.98,129.99 +4687.0,package delivered,2019-08-07 07:13:07.000Z, , , ,"['660261']", ,5.297999999999999,4118.96 +4688.0,pick item,2019-08-07 07:18:15.000Z, ,"['881793']", , , ,0.88,89.99 +4689.0,pick item,2019-08-07 07:28:52.000Z, ,"['881842']", , , ,0.483,1099.0 +4690.0,pick item,2019-08-07 07:39:54.000Z, ,"['881812']", , , ,0.483,1099.0 +4691.0,send package,2019-08-07 07:54:31.000Z, , , ,"['660268']", ,3.327,2362.95 +4692.0,reorder item,2019-08-07 07:56:15.000Z, ,"['881753']", , , ,0.44,476.0 +4693.0,pick item,2019-08-07 07:56:28.000Z, ,"['881624']", , , ,0.495,129.0 +4694.0,create package,2019-08-07 07:56:28.000Z, ,"['881802','881624','881740','881520','881558','880868']", ,"['660269']", ,3.377,4325.99 +4695.0,pick item,2019-08-07 07:58:59.000Z, ,"['881870']", , , ,0.2,39.99 +4696.0,pick item,2019-08-07 07:59:04.000Z, ,"['881836']", , , ,0.38,29.99 +4697.0,pay order,2019-08-07 07:59:12.000Z, , ,"['990433']", , ,2.28,770.97 +4698.0,pick item,2019-08-07 08:01:02.000Z, ,"['881829']", , , ,0.21,529.0 +4699.0,pick item,2019-08-07 08:15:22.000Z, ,"['881758']", , , ,0.495,129.0 +4700.0,pick item,2019-08-07 08:25:06.000Z, ,"['881735']", , , ,0.21,529.0 +4701.0,pick item,2019-08-07 08:25:38.000Z, ,"['881764']", , , ,0.21,529.0 +4702.0,create package,2019-08-07 08:25:38.000Z, ,"['881835','881768','881765','881836','881767','881831','881754','881834','881683','881757','881758','881829']", ,"['660270']", ,8.221,9255.95 +4703.0,pick item,2019-08-07 08:30:20.000Z, ,"['881635']", , , ,0.483,495.0 +4704.0,place order,2019-08-07 08:52:04.000Z, ,"['881884','881885','881887','881886','881888']","['990463']", , ,2.509,1113.96 +4705.0,reorder item,2019-08-07 08:59:29.000Z, ,"['881804']", , , ,0.483,1099.0 +4706.0,pay order,2019-08-07 09:03:33.000Z, , ,"['990435']", , ,2.944,2227.96 +4707.0,pick item,2019-08-07 09:05:14.000Z, ,"['881814']", , , ,0.38,29.99 +4708.0,pick item,2019-08-07 09:10:44.000Z, ,"['881377']", , , ,0.483,79.99 +4709.0,package delivered,2019-08-07 09:10:52.000Z, , , ,"['660252']", ,1.3530000000000002,728.97 +4710.0,item out of stock,2019-08-07 09:15:15.000Z, ,"['881841']", , , ,0.78,99.99 +4711.0,package delivered,2019-08-07 09:15:21.000Z, , , ,"['660265']", ,3.5380000000000003,2416.96 +4712.0,item out of stock,2019-08-07 09:21:19.000Z, ,"['881860']", , , ,1.28,149.99 +4713.0,send package,2019-08-07 09:38:16.000Z, , , ,"['660270']", ,8.221,9255.95 +4714.0,item out of stock,2019-08-07 09:38:27.000Z, ,"['881875']", , , ,0.172,699.0 +4715.0,item out of stock,2019-08-07 09:39:51.000Z, ,"['881828']", , , ,1.28,149.99 +4716.0,pick item,2019-08-07 09:42:45.000Z, ,"['881877']", , , ,0.166,799.0 +4717.0,pay order,2019-08-07 09:56:23.000Z, , ,"['990196']", , ,0.332,1603.0 +4718.0,reorder item,2019-08-07 09:59:58.000Z, ,"['881830']", , , ,0.88,89.99 +4719.0,send package,2019-08-07 10:07:18.000Z, , , ,"['660260']", ,3.638,6693.0 +4720.0,payment reminder,2019-08-07 10:07:23.000Z, , ,"['990347']", , ,2.269,1580.98 +4721.0,pay order,2019-08-07 10:07:30.000Z, , ,"['990392']", , ,5.8610000000000015,5145.95 +4722.0,confirm order,2019-08-07 10:35:50.000Z, , ,"['990463']", , ,2.509,1113.96 +4723.0,confirm order,2019-08-07 10:55:46.000Z, , ,"['990462']", , ,4.176,4811.98 +4724.0,place order,2019-08-07 11:03:56.000Z, ,"['881891','881889','881890']","['990464']", , ,1.258,303.98 +4725.0,pick item,2019-08-07 11:11:15.000Z, ,"['881442']", , , ,0.28,449.0 +4726.0,pay order,2019-08-07 11:19:04.000Z, , ,"['990425']", , ,4.635,3462.98 +4727.0,item out of stock,2019-08-07 11:27:48.000Z, ,"['881825']", , , ,0.78,99.99 +4728.0,pay order,2019-08-07 11:49:05.000Z, , ,"['990359']", , ,1.258,1682.0 +4729.0,item out of stock,2019-08-07 12:10:45.000Z, ,"['881832']", , , ,0.88,89.99 +4730.0,place order,2019-08-07 12:27:39.000Z, ,"['881892','881893']","['990465']", , ,1.668,1353.99 +4731.0,confirm order,2019-08-07 12:35:32.000Z, , ,"['990460']", , ,3.13,2784.97 +4732.0,confirm order,2019-08-07 12:38:15.000Z, , ,"['990456']", , ,3.135,453.97 +4733.0,confirm order,2019-08-07 12:55:00.000Z, , ,"['990464']", , ,1.258,303.98 +4734.0,pick item,2019-08-07 13:18:22.000Z, ,"['881750']", , , ,0.88,89.99 +4735.0,package delivered,2019-08-07 13:28:47.000Z, , , ,"['660260']", ,3.638,6693.0 +4736.0,package delivered,2019-08-07 13:30:15.000Z, , , ,"['660254']", ,1.203,2024.0 +4737.0,reorder item,2019-08-07 13:37:27.000Z, ,"['881732']", , , ,0.483,1099.0 +4738.0,pick item,2019-08-07 13:38:56.000Z, ,"['881862']", , , ,0.483,1099.0 +4739.0,pick item,2019-08-07 13:44:47.000Z, ,"['881786']", , , ,1.28,149.99 +4740.0,package delivered,2019-08-07 13:46:49.000Z, , , ,"['660256']", ,2.115,774.98 +4741.0,item out of stock,2019-08-07 14:02:51.000Z, ,"['881884']", , , ,0.483,79.99 +4742.0,package delivered,2019-08-07 14:09:41.000Z, , , ,"['660268']", ,3.327,2362.95 +4743.0,pick item,2019-08-07 14:11:31.000Z, ,"['881874']", , , ,1.25,2200.0 +4744.0,place order,2019-08-07 14:15:05.000Z, ,"['881894']","['990466']", , ,0.172,704.0 +4745.0,send package,2019-08-07 14:19:30.000Z, , , ,"['660264']", ,5.11,3356.97 +4746.0,pick item,2019-08-07 14:45:47.000Z, ,"['881771']", , , ,0.44,476.0 +4747.0,send package,2019-08-07 14:56:00.000Z, , , ,"['660267']", ,2.76,3198.98 +4748.0,reorder item,2019-08-07 15:04:10.000Z, ,"['881630']", , , ,0.495,129.0 +4749.0,pay order,2019-08-07 15:14:02.000Z, , ,"['990326']", , ,0.649,1903.0 +4750.0,pick item,2019-08-07 15:21:26.000Z, ,"['881868']", , , ,0.21,529.0 +4751.0,pick item,2019-08-07 15:26:39.000Z, ,"['881864']", , , ,0.78,99.99 +4752.0,create package,2019-08-07 15:26:39.000Z, ,"['881784','881857','881785','881859','881772','881771','881603','881770','881786','881789']", ,"['660271']", ,8.204,8368.97 +4753.0,item out of stock,2019-08-07 15:35:56.000Z, ,"['881839']", , , ,0.28,449.0 +4754.0,place order,2019-08-07 15:49:58.000Z, ,"['881898','881896','881897','881895','881899']","['990467']", , ,2.898,2172.97 +4755.0,pick item,2019-08-07 15:50:20.000Z, ,"['881854']", , , ,0.98,129.99 +4756.0,pay order,2019-08-07 15:59:50.000Z, , ,"['990436']", , ,1.963,689.98 +4757.0,pick item,2019-08-07 16:40:57.000Z, ,"['881867']", , , ,0.495,129.0 +4758.0,pick item,2019-08-07 16:42:20.000Z, ,"['881878']", , , ,0.483,1099.0 +4759.0,pick item,2019-08-07 17:04:11.000Z, ,"['881800']", , , ,0.166,799.0 +4760.0,place order,2019-08-07 18:09:29.000Z, ,"['881900','881902','881903','881901']","['990468']", , ,2.48,1159.98 +4761.0,send package,2019-08-07 18:12:52.000Z, , , ,"['660266']", ,1.668,1348.99 +4762.0,pick item,2019-08-07 18:13:12.000Z, ,"['881668']", , , ,0.188,1149.0 +4763.0,reorder item,2019-08-07 20:17:34.000Z, ,"['881828']", , , ,1.28,149.99 +4764.0,place order,2019-08-07 20:58:32.000Z, ,"['881906','881904','881905']","['990469']", , ,1.029,913.98 +4765.0,create package,2019-08-07 23:00:00.000Z, ,"['881790','881702','881793','881797','881792','881795','881796']", ,"['660272']", ,2.477,2696.96 +4766.0,item out of stock,2019-08-08 06:55:45.000Z, ,"['881798']", , , ,0.483,1099.0 +4767.0,payment reminder,2019-08-08 06:56:27.000Z, , ,"['990354']", , ,0.76,64.98 +4768.0,confirm order,2019-08-08 07:02:05.000Z, , ,"['990468']", , ,2.48,1159.98 +4769.0,pick item,2019-08-08 07:23:51.000Z, ,"['881890']", , , ,0.483,79.99 +4770.0,send package,2019-08-08 07:34:18.000Z, , , ,"['660263']", ,0.28,449.0 +4771.0,pay order,2019-08-08 07:40:55.000Z, , ,"['990456']", , ,3.135,453.97 +4772.0,place order,2019-08-08 07:48:39.000Z, ,"['881907','881910','881909','881908']","['990470']", , ,4.225,2923.98 +4773.0,failed delivery,2019-08-08 07:52:50.000Z, , , ,"['660266']", ,1.668,1348.99 +4774.0,pick item,2019-08-08 08:00:04.000Z, ,"['881845']", , , ,0.188,1149.0 +4775.0,failed delivery,2019-08-08 08:04:14.000Z, , , ,"['660264']", ,5.11,3356.97 +4776.0,send package,2019-08-08 08:12:18.000Z, , , ,"['660269']", ,3.377,4325.99 +4777.0,pick item,2019-08-08 08:23:06.000Z, ,"['881402']", , , ,1.37,2500.0 +4778.0,pick item,2019-08-08 08:40:20.000Z, ,"['881871']", , , ,0.28,89.99 +4779.0,pick item,2019-08-08 09:02:32.000Z, ,"['881821']", , , ,0.495,129.0 +4780.0,reorder item,2019-08-08 09:05:06.000Z, ,"['881884']", , , ,0.483,79.99 +4781.0,pick item,2019-08-08 09:06:02.000Z, ,"['881817']", , , ,0.483,495.0 +4782.0,package delivered,2019-08-08 09:14:24.000Z, , , ,"['660266']", ,1.668,1348.99 +4783.0,pick item,2019-08-08 09:22:59.000Z, ,"['881165']", , , ,0.98,129.99 +4784.0,package delivered,2019-08-08 09:30:29.000Z, , , ,"['660270']", ,8.221,9255.95 +4785.0,pick item,2019-08-08 09:31:14.000Z, ,"['881901']", , , ,0.78,99.99 +4786.0,item out of stock,2019-08-08 09:34:20.000Z, ,"['881697']", , , ,0.28,449.0 +4787.0,pick item,2019-08-08 09:41:13.000Z, ,"['881813']", , , ,0.88,89.99 +4788.0,failed delivery,2019-08-08 09:47:36.000Z, , , ,"['660264']", ,5.11,3356.97 +4789.0,reorder item,2019-08-08 09:56:12.000Z, ,"['881697']", , , ,0.28,449.0 +4790.0,place order,2019-08-08 09:57:06.000Z, ,"['881920','881919','881915','881922','881912','881911','881918','881913','881917','881923','881914','881921','881916']","['990471']", , ,5.896,3437.91 +4791.0,pick item,2019-08-08 09:59:20.000Z, ,"['881920']", , , ,0.2,39.99 +4792.0,item out of stock,2019-08-08 10:18:55.000Z, ,"['881819']", , , ,0.188,1149.0 +4793.0,pick item,2019-08-08 10:24:22.000Z, ,"['881881']", , , ,0.98,129.99 +4794.0,payment reminder,2019-08-08 10:44:36.000Z, , ,"['990355']", , ,1.08,134.98 +4795.0,pay order,2019-08-08 10:54:51.000Z, , ,"['990355']", , ,1.08,134.98 +4796.0,pick item,2019-08-08 11:15:30.000Z, ,"['881743']", , , ,0.44,476.0 +4797.0,create package,2019-08-08 11:15:30.000Z, ,"['881817','881818','881870','881587','881871','881816']", ,"['660273']", ,2.369,2694.98 +4798.0,confirm order,2019-08-08 11:33:27.000Z, , ,"['990458']", , ,4.6560000000000015,4682.97 +4799.0,send package,2019-08-08 11:33:56.000Z, , , ,"['660271']", ,8.204,8368.97 +4800.0,pay order,2019-08-08 11:35:41.000Z, , ,"['990443']", , ,0.28,454.0 +4801.0,pick item,2019-08-08 11:51:28.000Z, ,"['881918']", , , ,0.172,699.0 +4802.0,package delivered,2019-08-08 11:51:48.000Z, , , ,"['660267']", ,2.76,3198.98 +4803.0,reorder item,2019-08-08 12:05:02.000Z, ,"['881798']", , , ,0.483,1099.0 +4804.0,place order,2019-08-08 12:13:59.000Z, ,"['881924']","['990472']", , ,1.37,2505.0 +4805.0,confirm order,2019-08-08 12:21:44.000Z, , ,"['990465']", , ,1.668,1353.99 +4806.0,pick item,2019-08-08 12:23:02.000Z, ,"['881755']", , , ,0.172,699.0 +4807.0,pick item,2019-08-08 12:32:08.000Z, ,"['881674']", , , ,0.2,39.99 +4808.0,pay order,2019-08-08 12:43:01.000Z, , ,"['990177']", , ,5.915,5803.96 +4809.0,pick item,2019-08-08 12:49:02.000Z, ,"['881625']", , , ,0.28,449.0 +4810.0,payment reminder,2019-08-08 12:49:16.000Z, , ,"['990348']", , ,2.465,3259.0 +4811.0,item out of stock,2019-08-08 12:52:29.000Z, ,"['881787']", , , ,0.21,529.0 +4812.0,pick item,2019-08-08 12:58:36.000Z, ,"['881837']", , , ,0.88,89.99 +4813.0,pick item,2019-08-08 12:59:26.000Z, ,"['881907']", , , ,0.495,129.0 +4814.0,create package,2019-08-08 12:59:26.000Z, ,"['881862','881864','881842','881861','881440','881822']", ,"['660274']", ,2.605,5694.99 +4815.0,confirm order,2019-08-08 13:02:58.000Z, , ,"['990466']", , ,0.172,704.0 +4816.0,pick item,2019-08-08 13:30:13.000Z, ,"['881791']", , , ,0.483,495.0 +4817.0,pick item,2019-08-08 13:45:54.000Z, ,"['881900']", , , ,0.28,449.0 +4818.0,place order,2019-08-08 13:47:45.000Z, ,"['881926','881928','881929','881925','881927']","['990473']", , ,2.376,3018.98 +4819.0,pick item,2019-08-08 13:50:29.000Z, ,"['881925']", , , ,0.44,476.0 +4820.0,pick item,2019-08-08 14:00:54.000Z, ,"['881885']", , , ,0.166,799.0 +4821.0,failed delivery,2019-08-08 14:04:06.000Z, , , ,"['660264']", ,5.11,3356.97 +4822.0,pick item,2019-08-08 14:05:05.000Z, ,"['881891']", , , ,0.28,89.99 +4823.0,pick item,2019-08-08 14:16:45.000Z, ,"['881749']", , , ,0.21,529.0 +4824.0,create package,2019-08-08 14:16:45.000Z, ,"['881565']", ,"['660275']", ,0.166,799.0 +4825.0,pick item,2019-08-08 14:23:07.000Z, ,"['881894']", , , ,0.172,699.0 +4826.0,create package,2019-08-08 14:23:07.000Z, ,"['881894','881918','881920','881566','881738','881735']", ,"['660276']", ,1.4369999999999998,3244.99 +4827.0,package delivered,2019-08-08 14:40:52.000Z, , , ,"['660263']", ,0.28,449.0 +4828.0,reorder item,2019-08-08 14:46:24.000Z, ,"['881751']", , , ,0.44,476.0 +4829.0,pick item,2019-08-08 14:52:02.000Z, ,"['881917']", , , ,0.483,79.99 +4830.0,item out of stock,2019-08-08 14:54:05.000Z, ,"['881919']", , , ,0.38,29.99 +4831.0,pick item,2019-08-08 14:56:34.000Z, ,"['881840']", , , ,0.483,79.99 +4832.0,reorder item,2019-08-08 14:59:42.000Z, ,"['881839']", , , ,0.28,449.0 +4833.0,pick item,2019-08-08 15:15:16.000Z, ,"['881778']", , , ,0.38,29.99 +4834.0,pick item,2019-08-08 15:18:52.000Z, ,"['881531']", , , ,0.2,39.99 +4835.0,pick item,2019-08-08 15:19:33.000Z, ,"['881913']", , , ,0.166,799.0 +4836.0,pick item,2019-08-08 15:28:52.000Z, ,"['881807']", , , ,0.2,39.99 +4837.0,create package,2019-08-08 15:28:52.000Z, ,"['881907','881674','881780','881781']", ,"['660277']", ,1.378,703.98 +4838.0,place order,2019-08-08 15:55:18.000Z, ,"['881930','881931','881933','881932','881934']","['990474']", , ,2.175,2861.98 +4839.0,package delivered,2019-08-08 15:55:32.000Z, , , ,"['660271']", ,8.204,8368.97 +4840.0,reorder item,2019-08-08 15:57:43.000Z, ,"['881763']", , , ,0.44,476.0 +4841.0,item out of stock,2019-08-08 16:01:48.000Z, ,"['881928']", , , ,0.188,1149.0 +4842.0,pick item,2019-08-08 16:24:20.000Z, ,"['881895']", , , ,0.172,699.0 +4843.0,reorder item,2019-08-08 16:25:40.000Z, ,"['881710']", , , ,0.188,1149.0 +4844.0,reorder item,2019-08-08 17:08:00.000Z, ,"['881875']", , , ,0.172,699.0 +4845.0,send package,2019-08-08 17:13:02.000Z, , , ,"['660275']", ,0.166,799.0 +4846.0,place order,2019-08-08 18:25:29.000Z, ,"['881935','881936']","['990475']", , ,2.85,2704.99 +4847.0,place order,2019-08-08 21:50:48.000Z, ,"['881939','881937','881938']","['990476']", , ,0.93,1459.0 +4848.0,pay order,2019-08-09 06:16:26.000Z, , ,"['990169']", , ,1.838,3743.99 +4849.0,pick item,2019-08-09 06:41:00.000Z, ,"['881672']", , , ,0.495,129.0 +4850.0,pick item,2019-08-09 07:17:33.000Z, ,"['881911']", , , ,0.483,79.99 +4851.0,place order,2019-08-09 07:51:40.000Z, ,"['881941','881944','881940','881942','881943']","['990477']", , ,2.403,2946.99 +4852.0,pick item,2019-08-09 07:55:46.000Z, ,"['881715']", , , ,0.38,29.99 +4853.0,create package,2019-08-09 07:55:46.000Z, ,"['881845','881851','881852']", ,"['660278']", ,2.151,2447.99 +4854.0,pick item,2019-08-09 07:57:35.000Z, ,"['881916']", , , ,0.88,89.99 +4855.0,confirm order,2019-08-09 08:03:21.000Z, , ,"['990459']", , ,1.115,1231.99 +4856.0,confirm order,2019-08-09 08:32:10.000Z, , ,"['990472']", , ,1.37,2505.0 +4857.0,pick item,2019-08-09 08:37:31.000Z, ,"['881505']", , , ,1.25,2200.0 +4858.0,pick item,2019-08-09 08:49:01.000Z, ,"['881882']", , , ,0.495,129.0 +4859.0,create package,2019-08-09 08:49:01.000Z, ,"['881878','881891','881704','881650','881881','881882','881807','881890']", ,"['660279']", ,4.284,2152.95 +4860.0,confirm order,2019-08-09 08:49:16.000Z, , ,"['990473']", , ,2.376,3018.98 +4861.0,item out of stock,2019-08-09 09:01:24.000Z, ,"['881942']", , , ,0.188,1149.0 +4862.0,pay order,2019-08-09 09:15:45.000Z, , ,"['990386']", , ,1.618,1652.99 +4863.0,pay order,2019-08-09 09:24:18.000Z, , ,"['990252']", , ,4.79,2674.96 +4864.0,pick item,2019-08-09 09:29:43.000Z, ,"['881341']", , , ,0.44,476.0 +4865.0,reorder item,2019-08-09 09:30:10.000Z, ,"['881841']", , , ,0.78,99.99 +4866.0,pick item,2019-08-09 09:40:52.000Z, ,"['881628']", , , ,0.88,89.99 +4867.0,reorder item,2019-08-09 09:44:08.000Z, ,"['881928']", , , ,0.188,1149.0 +4868.0,confirm order,2019-08-09 09:44:43.000Z, , ,"['990474']", , ,2.175,2861.98 +4869.0,pick item,2019-08-09 09:59:00.000Z, ,"['881843']", , , ,0.28,449.0 +4870.0,package delivered,2019-08-09 10:00:35.000Z, , , ,"['660269']", ,3.377,4325.99 +4871.0,place order,2019-08-09 10:03:07.000Z, ,"['881947','881945','881946','881948']","['990478']", , ,1.601,2701.99 +4872.0,pick item,2019-08-09 10:07:53.000Z, ,"['881838']", , , ,1.28,149.99 +4873.0,pick item,2019-08-09 10:19:14.000Z, ,"['881915']", , , ,0.98,129.99 +4874.0,pay order,2019-08-09 10:42:20.000Z, , ,"['990344']", , ,5.597,3410.95 +4875.0,send package,2019-08-09 10:53:06.000Z, , , ,"['660278']", ,2.151,2447.99 +4876.0,pick item,2019-08-09 11:08:14.000Z, ,"['881833']", , , ,0.2,39.99 +4877.0,item out of stock,2019-08-09 11:24:06.000Z, ,"['881744']", , , ,1.28,149.99 +4878.0,place order,2019-08-09 11:26:02.000Z, ,"['881953','881949','881950','881951','881952']","['990479']", , ,4.61,3343.97 +4879.0,pick item,2019-08-09 11:34:26.000Z, ,"['881941']", , , ,0.172,699.0 +4880.0,item out of stock,2019-08-09 11:56:26.000Z, ,"['881809']", , , ,0.495,129.0 +4881.0,pick item,2019-08-09 12:12:25.000Z, ,"['881889']", , , ,0.495,129.0 +4882.0,create package,2019-08-09 12:12:25.000Z, ,"['881794','881941']", ,"['660280']", ,1.152,828.99 +4883.0,reorder item,2019-08-09 12:15:00.000Z, ,"['881825']", , , ,0.78,99.99 +4884.0,confirm order,2019-08-09 12:34:17.000Z, , ,"['990477']", , ,2.403,2946.99 +4885.0,pick item,2019-08-09 12:59:03.000Z, ,"['881808']", , , ,0.188,1149.0 +4886.0,place order,2019-08-09 13:11:51.000Z, ,"['881955','881954']","['990480']", , ,1.263,184.98 +4887.0,pay order,2019-08-09 13:25:23.000Z, , ,"['990423']", , ,1.955,393.97 +4888.0,pick item,2019-08-09 13:26:21.000Z, ,"['881657']", , , ,0.28,449.0 +4889.0,create package,2019-08-09 13:26:21.000Z, ,"['881783','881827','881635']", ,"['660281']", ,1.143,614.98 +4890.0,pick item,2019-08-09 13:38:31.000Z, ,"['881756']", , , ,0.188,1149.0 +4891.0,pick item,2019-08-09 13:46:58.000Z, ,"['881805']", , , ,1.28,149.99 +4892.0,pay order,2019-08-09 13:54:19.000Z, , ,"['990335']", , ,1.226,993.98 +4893.0,pay order,2019-08-09 14:04:14.000Z, , ,"['990353']", , ,5.933,4589.95 +4894.0,package delivered,2019-08-09 14:04:21.000Z, , , ,"['660278']", ,2.151,2447.99 +4895.0,pick item,2019-08-09 14:19:56.000Z, ,"['881888']", , , ,0.78,99.99 +4896.0,create package,2019-08-09 14:19:56.000Z, ,"['881868','881885','881820','881749','881866','881867','881821','881750','881531','881888']", ,"['660282']", ,5.006,4884.96 +4897.0,send package,2019-08-09 14:22:42.000Z, , , ,"['660272']", ,2.477,2696.96 +4898.0,pay order,2019-08-09 14:32:14.000Z, , ,"['990338']", , ,0.662,1322.99 +4899.0,pick item,2019-08-09 14:37:58.000Z, ,"['881879']", , , ,0.188,1149.0 +4900.0,pick item,2019-08-09 14:40:32.000Z, ,"['881902']", , , ,0.98,129.99 +4901.0,place order,2019-08-09 14:43:30.000Z, ,"['881956']","['990481']", , ,0.78,104.99 +4902.0,pick item,2019-08-09 14:44:00.000Z, ,"['881747']", , , ,0.188,1149.0 +4903.0,item out of stock,2019-08-09 14:53:02.000Z, ,"['881908']", , , ,1.37,2500.0 +4904.0,reorder item,2019-08-09 14:56:55.000Z, ,"['881919']", , , ,0.38,29.99 +4905.0,confirm order,2019-08-09 15:11:46.000Z, , ,"['990469']", , ,1.029,913.98 +4906.0,pick item,2019-08-09 15:43:02.000Z, ,"['881932']", , , ,0.166,799.0 +4907.0,pick item,2019-08-09 15:43:04.000Z, ,"['881899']", , , ,0.483,1099.0 +4908.0,confirm order,2019-08-09 15:49:23.000Z, , ,"['990467']", , ,2.898,2172.97 +4909.0,place order,2019-08-09 16:46:47.000Z, ,"['881957','881959','881958']","['990482']", , ,1.96,334.97 +4910.0,pick item,2019-08-09 17:12:17.000Z, ,"['881934']", , , ,0.166,799.0 +4911.0,send package,2019-08-09 18:24:07.000Z, , , ,"['660277']", ,1.378,703.98 +4912.0,pay order,2019-08-09 18:36:25.000Z, , ,"['990447']", , ,0.966,995.0 +4913.0,place order,2019-08-09 19:59:56.000Z, ,"['881962','881960','881961']","['990483']", , ,1.348,1692.99 +4914.0,pick item,2019-08-09 20:56:54.000Z, ,"['881717']", , , ,0.28,449.0 +4915.0,payment reminder,2019-08-10 09:49:19.000Z, , ,"['990236']", , ,3.463,4710.99 +4916.0,payment reminder,2019-08-10 12:55:56.000Z, , ,"['990247']", , ,0.72,930.0 +4917.0,place order,2019-08-10 13:59:30.000Z, ,"['881964','881963','881965','881966']","['990484']", , ,0.988,3478.0 +4918.0,payment reminder,2019-08-11 12:52:04.000Z, , ,"['990350']", , ,1.366,1402.98 +4919.0,payment reminder,2019-08-11 13:07:55.000Z, , ,"['990250']", , ,2.01,3020.99 +4920.0,place order,2019-08-11 14:52:54.000Z, ,"['881971','881969','881972','881968','881970','881967']","['990485']", , ,5.409,5998.98 +4921.0,payment reminder,2019-08-11 17:05:55.000Z, , ,"['990360']", , ,2.422,1452.97 +4922.0,payment reminder,2019-08-11 20:38:08.000Z, , ,"['990366']", , ,1.32,4106.0 +4923.0,pay order,2019-08-12 06:15:13.000Z, , ,"['990459']", , ,1.115,1231.99 +4924.0,send package,2019-08-12 06:32:13.000Z, , , ,"['660276']", ,1.4369999999999998,3244.99 +4925.0,pick item,2019-08-12 06:50:38.000Z, ,"['881848']", , , ,1.48,199.99 +4926.0,send package,2019-08-12 07:01:09.000Z, , , ,"['660280']", ,1.152,828.99 +4927.0,pick item,2019-08-12 07:05:26.000Z, ,"['881927']", , , ,0.28,89.99 +4928.0,place order,2019-08-12 07:05:51.000Z, ,"['881975','881974','881973','881976']","['990486']", , ,3.34,3213.98 +4929.0,payment reminder,2019-08-12 07:20:32.000Z, , ,"['990368']", , ,4.833,4359.97 +4930.0,item out of stock,2019-08-12 07:23:20.000Z, ,"['881946']", , , ,0.166,799.0 +4931.0,package delivered,2019-08-12 07:34:36.000Z, , , ,"['660275']", ,0.166,799.0 +4932.0,item out of stock,2019-08-12 07:48:33.000Z, ,"['881943']", , , ,1.28,149.99 +4933.0,confirm order,2019-08-12 08:24:04.000Z, , ,"['990475']", , ,2.85,2704.99 +4934.0,pick item,2019-08-12 08:25:55.000Z, ,"['881922']", , , ,0.98,129.99 +4935.0,create package,2019-08-12 08:25:55.000Z, ,"['881874','881717','881764','881877','881813','881814','881812']", ,"['660283']", ,3.649,5195.98 +4936.0,confirm order,2019-08-12 08:30:54.000Z, , ,"['990479']", , ,4.61,3343.97 +4937.0,place order,2019-08-12 08:31:30.000Z, ,"['881984','881985','881982','881978','881977','881981','881980','881983','881979']","['990487']", , ,6.046,5284.96 +4938.0,pay order,2019-08-12 08:34:28.000Z, , ,"['990474']", , ,2.175,2861.98 +4939.0,pick item,2019-08-12 08:45:05.000Z, ,"['881964']", , , ,0.44,476.0 +4940.0,confirm order,2019-08-12 08:45:51.000Z, , ,"['990470']", , ,4.225,2923.98 +4941.0,pick item,2019-08-12 09:02:05.000Z, ,"['881924']", , , ,1.37,2500.0 +4942.0,confirm order,2019-08-12 09:08:56.000Z, , ,"['990483']", , ,1.348,1692.99 +4943.0,pick item,2019-08-12 09:22:25.000Z, ,"['881956']", , , ,0.78,99.99 +4944.0,confirm order,2019-08-12 09:28:01.000Z, , ,"['990482']", , ,1.96,334.97 +4945.0,pick item,2019-08-12 09:29:21.000Z, ,"['881769']", , , ,0.483,495.0 +4946.0,pick item,2019-08-12 09:39:56.000Z, ,"['881971']", , , ,0.166,799.0 +4947.0,send package,2019-08-12 09:41:25.000Z, , , ,"['660281']", ,1.143,614.98 +4948.0,package delivered,2019-08-12 09:57:49.000Z, , , ,"['660264']", ,5.11,3356.97 +4949.0,pick item,2019-08-12 10:15:37.000Z, ,"['881495']", , , ,1.48,199.99 +4950.0,place order,2019-08-12 10:22:47.000Z, ,"['881986','881988','881987']","['990488']", , ,0.732,1242.99 +4951.0,confirm order,2019-08-12 10:55:41.000Z, , ,"['990484']", , ,0.988,3478.0 +4952.0,pick item,2019-08-12 11:01:46.000Z, ,"['881581']", , , ,0.28,89.99 +4953.0,create package,2019-08-12 11:01:46.000Z, ,"['881956','881668','881442','881927','881743','881925','881854','881625','881377']", ,"['660284']", ,4.151,3398.96 +4954.0,pick item,2019-08-12 11:08:14.000Z, ,"['881830']", , , ,0.88,89.99 +4955.0,reorder item,2019-08-12 11:12:55.000Z, ,"['881943']", , , ,1.28,149.99 +4956.0,payment reminder,2019-08-12 11:24:30.000Z, , ,"['990257']", , ,1.86,3123.99 +4957.0,package delivered,2019-08-12 11:25:53.000Z, , , ,"['660281']", ,1.143,614.98 +4958.0,pay order,2019-08-12 11:27:54.000Z, , ,"['990450']", , ,1.823,779.97 +4959.0,send package,2019-08-12 11:53:34.000Z, , , ,"['660274']", ,2.605,5694.99 +4960.0,pick item,2019-08-12 11:59:25.000Z, ,"['881975']", , , ,1.37,2500.0 +4961.0,place order,2019-08-12 12:05:22.000Z, ,"['881989','881991','881990']","['990489']", , ,2.2,770.98 +4962.0,confirm order,2019-08-12 12:08:59.000Z, , ,"['990476']", , ,0.93,1459.0 +4963.0,item out of stock,2019-08-12 12:20:50.000Z, ,"['881930']", , , ,0.38,29.99 +4964.0,confirm order,2019-08-12 12:23:03.000Z, , ,"['990481']", , ,0.78,104.99 +4965.0,reorder item,2019-08-12 12:35:31.000Z, ,"['881946']", , , ,0.166,799.0 +4966.0,confirm order,2019-08-12 12:38:02.000Z, , ,"['990444']", , ,4.4110000000000005,2742.96 +4967.0,pick item,2019-08-12 13:03:29.000Z, ,"['881968']", , , ,0.483,495.0 +4968.0,place order,2019-08-12 13:30:31.000Z, ,"['881992','881994','881995','881993']","['990490']", , ,2.612,1578.98 +4969.0,pay order,2019-08-12 13:44:57.000Z, , ,"['990360']", , ,2.422,1452.97 +4970.0,confirm order,2019-08-12 13:50:26.000Z, , ,"['990485']", , ,5.409,5998.98 +4971.0,pick item,2019-08-12 14:00:42.000Z, ,"['881947']", , , ,0.483,1099.0 +4972.0,send package,2019-08-12 14:06:22.000Z, , , ,"['660279']", ,4.284,2152.95 +4973.0,confirm order,2019-08-12 14:07:18.000Z, , ,"['990429']", , ,0.44,481.0 +4974.0,pick item,2019-08-12 14:08:20.000Z, ,"['881887']", , , ,0.88,89.99 +4975.0,package delivered,2019-08-12 14:15:28.000Z, , , ,"['660277']", ,1.378,703.98 +4976.0,pick item,2019-08-12 14:24:16.000Z, ,"['881988']", , , ,0.28,89.99 +4977.0,reorder item,2019-08-12 14:28:26.000Z, ,"['881720']", , , ,1.28,149.99 +4978.0,pick item,2019-08-12 14:31:57.000Z, ,"['881905']", , , ,0.483,79.99 +4979.0,pay order,2019-08-12 14:33:07.000Z, , ,"['990348']", , ,2.465,3259.0 +4980.0,pick item,2019-08-12 14:33:18.000Z, ,"['881958']", , , ,0.28,89.99 +4981.0,pick item,2019-08-12 14:44:14.000Z, ,"['881893']", , , ,0.188,1149.0 +4982.0,create package,2019-08-12 14:44:14.000Z, ,"['881900','881838','881902','881715','881800','881901','881840']", ,"['660285']", ,4.349,1737.95 +4983.0,reorder item,2019-08-12 14:44:19.000Z, ,"['881809']", , , ,0.495,129.0 +4984.0,payment reminder,2019-08-12 14:49:52.000Z, , ,"['990378']", , ,2.7,494.94 +4985.0,item out of stock,2019-08-12 14:53:39.000Z, ,"['881788']", , , ,0.78,99.99 +4986.0,item out of stock,2019-08-12 15:16:07.000Z, ,"['881903']", , , ,0.44,476.0 +4987.0,place order,2019-08-12 15:20:49.000Z, ,"['881998','881996','881999','881997']","['990491']", , ,2.113,1219.98 +4988.0,pick item,2019-08-12 15:23:33.000Z, ,"['881904']", , , ,0.38,29.99 +4989.0,payment reminder,2019-08-12 15:23:34.000Z, , ,"['990374']", , ,2.552,2321.97 +4990.0,send package,2019-08-12 15:35:21.000Z, , , ,"['660273']", ,2.369,2694.98 +4991.0,pick item,2019-08-12 16:01:05.000Z, ,"['881951']", , , ,1.28,149.99 +4992.0,place order,2019-08-12 17:01:26.000Z, ,"['882002','882000','882001','882003']","['990492']", , ,2.596,2809.98 +4993.0,pay order,2019-08-12 17:07:47.000Z, , ,"['990371']", , ,2.0380000000000003,3783.98 +4994.0,pick item,2019-08-12 17:35:01.000Z, ,"['881912']", , , ,0.28,89.99 +4995.0,place order,2019-08-12 19:42:27.000Z, ,"['882004','882005']","['990493']", , ,2.23,2334.99 +4996.0,create package,2019-08-12 23:00:00.000Z, ,"['881769','881402','881904','881905','881581']", ,"['660286']", ,2.9960000000000004,3194.97 +4997.0,place order,2019-08-13 04:32:36.000Z, ,"['882006']","['990494']", , ,1.28,154.99 +4998.0,confirm order,2019-08-13 06:11:39.000Z, , ,"['990455']", , ,3.338,1522.98 +4999.0,item out of stock,2019-08-13 07:08:43.000Z, ,"['881869']", , , ,0.21,529.0 +5000.0,confirm order,2019-08-13 07:13:50.000Z, , ,"['990493']", , ,2.23,2334.99 +5001.0,payment reminder,2019-08-13 07:17:03.000Z, , ,"['990375']", , ,2.932,3700.97 +5002.0,pick item,2019-08-13 07:26:58.000Z, ,"['881826']", , , ,0.483,495.0 +5003.0,pay order,2019-08-13 07:50:49.000Z, , ,"['990463']", , ,2.509,1113.96 +5004.0,pay order,2019-08-13 07:53:31.000Z, , ,"['990485']", , ,5.409,5998.98 +5005.0,pick item,2019-08-13 08:02:10.000Z, ,"['881961']", , , ,0.28,449.0 +5006.0,place order,2019-08-13 08:13:39.000Z, ,"['882007','882008']","['990495']", , ,0.49,983.0 +5007.0,pick item,2019-08-13 08:29:26.000Z, ,"['881959']", , , ,1.48,199.99 +5008.0,pay order,2019-08-13 08:30:07.000Z, , ,"['990343']", , ,0.49,623.99 +5009.0,pick item,2019-08-13 08:32:48.000Z, ,"['881989']", , , ,0.28,89.99 +5010.0,item out of stock,2019-08-13 08:33:12.000Z, ,"['881921']", , , ,0.28,89.99 +5011.0,item out of stock,2019-08-13 08:35:25.000Z, ,"['881846']", , , ,0.38,29.99 +5012.0,payment reminder,2019-08-13 08:38:20.000Z, , ,"['990383']", , ,1.426,1382.99 +5013.0,pick item,2019-08-13 08:43:53.000Z, ,"['882003']", , , ,1.25,2200.0 +5014.0,item out of stock,2019-08-13 08:53:26.000Z, ,"['881933']", , , ,0.98,129.99 +5015.0,pay order,2019-08-13 08:54:58.000Z, , ,"['990452']", , ,2.043,683.98 +5016.0,pay order,2019-08-13 08:58:06.000Z, , ,"['990299']", , ,1.867,3490.99 +5017.0,pick item,2019-08-13 08:59:14.000Z, ,"['882007']", , , ,0.28,449.0 +5018.0,pick item,2019-08-13 09:16:44.000Z, ,"['881909']", , , ,0.88,89.99 +5019.0,pick item,2019-08-13 09:20:24.000Z, ,"['881995']", , , ,0.483,495.0 +5020.0,pick item,2019-08-13 09:25:21.000Z, ,"['881886']", , , ,0.2,39.99 +5021.0,create package,2019-08-13 09:25:21.000Z, ,"['881932','881951','881934','881778','881895','881964','881899','881165']", ,"['660287']", ,4.067,4181.97 +5022.0,confirm order,2019-08-13 09:26:56.000Z, , ,"['990471']", , ,5.896,3437.91 +5023.0,pick item,2019-08-13 09:28:04.000Z, ,"['881972']", , , ,1.48,199.99 +5024.0,pay order,2019-08-13 09:33:10.000Z, , ,"['990402']", , ,2.889,4032.97 +5025.0,place order,2019-08-13 09:47:05.000Z, ,"['882013','882010','882009','882012','882011']","['990496']", , ,1.805,2106.99 +5026.0,pick item,2019-08-13 09:47:23.000Z, ,"['881965']", , , ,0.188,1149.0 +5027.0,item out of stock,2019-08-13 09:49:53.000Z, ,"['881844']", , , ,0.44,476.0 +5028.0,confirm order,2019-08-13 10:00:13.000Z, , ,"['990486']", , ,3.34,3213.98 +5029.0,pick item,2019-08-13 10:08:06.000Z, ,"['882006']", , , ,1.28,149.99 +5030.0,package delivered,2019-08-13 10:13:05.000Z, , , ,"['660280']", ,1.152,828.99 +5031.0,confirm order,2019-08-13 10:22:51.000Z, , ,"['990495']", , ,0.49,983.0 +5032.0,confirm order,2019-08-13 10:28:40.000Z, , ,"['990491']", , ,2.113,1219.98 +5033.0,package delivered,2019-08-13 10:38:24.000Z, , , ,"['660273']", ,2.369,2694.98 +5034.0,pick item,2019-08-13 10:47:43.000Z, ,"['881944']", , , ,0.28,449.0 +5035.0,pick item,2019-08-13 11:11:59.000Z, ,"['881982']", , , ,0.21,529.0 +5036.0,item out of stock,2019-08-13 11:17:21.000Z, ,"['881865']", , , ,0.38,29.99 +5037.0,pay order,2019-08-13 11:17:43.000Z, , ,"['990257']", , ,1.86,3123.99 +5038.0,reorder item,2019-08-13 11:23:29.000Z, ,"['881903']", , , ,0.44,476.0 +5039.0,payment reminder,2019-08-13 11:30:01.000Z, , ,"['990370']", , ,3.705,3022.98 +5040.0,pay order,2019-08-13 11:51:13.000Z, , ,"['990375']", , ,2.932,3700.97 +5041.0,pick item,2019-08-13 11:52:02.000Z, ,"['881985']", , , ,0.44,476.0 +5042.0,place order,2019-08-13 11:53:58.000Z, ,"['882014','882015']","['990497']", , ,0.966,2203.0 +5043.0,confirm order,2019-08-13 11:55:50.000Z, , ,"['990496']", , ,1.805,2106.99 +5044.0,reorder item,2019-08-13 12:21:07.000Z, ,"['881819']", , , ,0.188,1149.0 +5045.0,pick item,2019-08-13 12:21:09.000Z, ,"['880876']", , , ,0.28,449.0 +5046.0,pay order,2019-08-13 12:35:25.000Z, , ,"['990431']", , ,2.383,4138.99 +5047.0,payment reminder,2019-08-13 12:47:13.000Z, , ,"['990262']", , ,3.04,334.97 +5048.0,pick item,2019-08-13 13:02:05.000Z, ,"['881940']", , , ,0.483,495.0 +5049.0,create package,2019-08-13 13:02:05.000Z, ,"['881830','881833','881756','881837','881672','881755','881924']", ,"['660288']", ,4.185,4696.97 +5050.0,pick item,2019-08-13 13:11:27.000Z, ,"['881898']", , , ,0.483,79.99 +5051.0,pick item,2019-08-13 13:19:48.000Z, ,"['881967']", , , ,1.25,2200.0 +5052.0,reorder item,2019-08-13 13:20:03.000Z, ,"['881788']", , , ,0.78,99.99 +5053.0,pick item,2019-08-13 13:29:50.000Z, ,"['881806']", , , ,0.78,99.99 +5054.0,pick item,2019-08-13 13:30:01.000Z, ,"['881873']", , , ,1.37,2500.0 +5055.0,pick item,2019-08-13 13:55:01.000Z, ,"['882004']", , , ,1.25,2200.0 +5056.0,pick item,2019-08-13 13:58:10.000Z, ,"['882012']", , , ,0.495,129.0 +5057.0,send package,2019-08-13 14:03:35.000Z, , , ,"['660282']", ,5.006,4884.96 +5058.0,place order,2019-08-13 14:07:43.000Z, ,"['882018','882017','882016','882019']","['990498']", , ,3.2230000000000003,809.97 +5059.0,pick item,2019-08-13 14:09:42.000Z, ,"['881380']", , , ,0.28,89.99 +5060.0,create package,2019-08-13 14:09:42.000Z, ,"['881791']", ,"['660289']", ,0.483,495.0 +5061.0,confirm order,2019-08-13 14:44:31.000Z, , ,"['990492']", , ,2.596,2809.98 +5062.0,reorder item,2019-08-13 14:51:37.000Z, ,"['881921']", , , ,0.28,89.99 +5063.0,pick item,2019-08-13 15:13:37.000Z, ,"['881732']", , , ,0.483,1099.0 +5064.0,create package,2019-08-13 15:13:37.000Z, ,"['881915','881922','881912','881911','881913','881917','881341','881380','881916']", ,"['660290']", ,4.972,1964.93 +5065.0,pick item,2019-08-13 15:15:47.000Z, ,"['881592']", , , ,0.188,1149.0 +5066.0,pick item,2019-08-13 15:28:00.000Z, ,"['881914']", , , ,0.44,476.0 +5067.0,confirm order,2019-08-13 15:28:48.000Z, , ,"['990488']", , ,0.732,1242.99 +5068.0,reorder item,2019-08-13 15:33:16.000Z, ,"['881744']", , , ,1.28,149.99 +5069.0,reorder item,2019-08-13 15:34:45.000Z, ,"['881856']", , , ,0.495,129.0 +5070.0,place order,2019-08-13 15:35:13.000Z, ,"['882020','882021','882023','882022']","['990499']", , ,3.4130000000000003,3598.99 +5071.0,pick item,2019-08-13 15:41:23.000Z, ,"['882011']", , , ,0.483,495.0 +5072.0,pick item,2019-08-13 16:06:04.000Z, ,"['881945']", , , ,0.78,99.99 +5073.0,pay order,2019-08-13 16:21:25.000Z, , ,"['990481']", , ,0.78,104.99 +5074.0,send package,2019-08-13 16:30:46.000Z, , , ,"['660284']", ,4.151,3398.96 +5075.0,pick item,2019-08-13 17:00:08.000Z, ,"['881853']", , , ,0.88,89.99 +5076.0,pick item,2019-08-13 17:06:15.000Z, ,"['881763']", , , ,0.44,476.0 +5077.0,place order,2019-08-13 17:30:14.000Z, ,"['882028','882026','882027','882024','882029','882025']","['990500']", , ,3.787,1222.96 +5078.0,pick item,2019-08-13 17:44:52.000Z, ,"['881966']", , , ,0.188,1149.0 +5079.0,item out of stock,2019-08-13 19:15:09.000Z, ,"['881992']", , , ,1.48,199.99 +5080.0,pick item,2019-08-13 19:56:01.000Z, ,"['881748']", , , ,0.166,799.0 +5081.0,place order,2019-08-13 20:40:03.000Z, ,"['882030','882034','882032','882031','882033']","['990501']", , ,4.235,3402.98 +5082.0,pick item,2019-08-14 06:28:07.000Z, ,"['881484']", , , ,0.88,89.99 +5083.0,create package,2019-08-14 06:28:07.000Z, ,"['881657','881988','881628','881909','881505']", ,"['660291']", ,3.57,2918.97 +5084.0,pick item,2019-08-14 06:34:53.000Z, ,"['881849']", , , ,0.88,89.99 +5085.0,confirm order,2019-08-14 06:35:36.000Z, , ,"['990489']", , ,2.2,770.98 +5086.0,pick item,2019-08-14 06:37:06.000Z, ,"['881950']", , , ,0.28,449.0 +5087.0,pick item,2019-08-14 06:38:17.000Z, ,"['881979']", , , ,1.48,199.99 +5088.0,confirm order,2019-08-14 07:01:35.000Z, , ,"['990461']", , ,1.776,4852.0 +5089.0,place order,2019-08-14 07:11:40.000Z, ,"['882035','882037','882036']","['990502']", , ,2.2430000000000003,264.97 +5090.0,confirm order,2019-08-14 07:21:42.000Z, , ,"['990497']", , ,0.966,2203.0 +5091.0,confirm order,2019-08-14 07:28:51.000Z, , ,"['990480']", , ,1.263,184.98 +5092.0,pick item,2019-08-14 07:58:28.000Z, ,"['881970']", , , ,1.25,2200.0 +5093.0,send package,2019-08-14 07:59:57.000Z, , , ,"['660289']", ,0.483,495.0 +5094.0,item out of stock,2019-08-14 08:00:22.000Z, ,"['881980']", , , ,0.44,476.0 +5095.0,pay order,2019-08-14 08:06:00.000Z, , ,"['990467']", , ,2.898,2172.97 +5096.0,confirm order,2019-08-14 08:08:39.000Z, , ,"['990499']", , ,3.4130000000000003,3598.99 +5097.0,pick item,2019-08-14 08:27:14.000Z, ,"['881981']", , , ,1.25,2200.0 +5098.0,create package,2019-08-14 08:27:14.000Z, ,"['881843']", ,"['660292']", ,0.28,449.0 +5099.0,pick item,2019-08-14 08:33:12.000Z, ,"['881993']", , , ,0.166,799.0 +5100.0,create package,2019-08-14 08:33:12.000Z, ,"['881808','881732','881893','881958','881806','881889','881959','881805','882007','881879']", ,"['660293']", ,5.642,5663.96 +5101.0,pick item,2019-08-14 08:34:33.000Z, ,"['881936']", , , ,1.37,2500.0 +5102.0,pick item,2019-08-14 08:40:30.000Z, ,"['882008']", , , ,0.21,529.0 +5103.0,place order,2019-08-14 08:43:08.000Z, ,"['882039','882045','882038','882043','882040','882044','882041','882042']","['990503']", , ,3.179,2634.96 +5104.0,package delivered,2019-08-14 08:51:22.000Z, , , ,"['660272']", ,2.477,2696.96 +5105.0,send package,2019-08-14 08:52:57.000Z, , , ,"['660288']", ,4.185,4696.97 +5106.0,pay order,2019-08-14 08:54:27.000Z, , ,"['990421']", , ,0.452,1153.0 +5107.0,pick item,2019-08-14 08:59:37.000Z, ,"['881996']", , , ,0.44,476.0 +5108.0,package delivered,2019-08-14 09:09:01.000Z, , , ,"['660289']", ,0.483,495.0 +5109.0,pick item,2019-08-14 09:13:13.000Z, ,"['882010']", , , ,0.483,79.99 +5110.0,reorder item,2019-08-14 09:17:22.000Z, ,"['881811']", , , ,0.166,799.0 +5111.0,confirm order,2019-08-14 09:18:50.000Z, , ,"['990487']", , ,6.046,5284.96 +5112.0,confirm order,2019-08-14 09:19:15.000Z, , ,"['990502']", , ,2.2430000000000003,264.97 +5113.0,pick item,2019-08-14 09:27:29.000Z, ,"['882023']", , , ,0.28,449.0 +5114.0,reorder item,2019-08-14 09:33:13.000Z, ,"['881832']", , , ,0.88,89.99 +5115.0,pick item,2019-08-14 09:34:02.000Z, ,"['882027']", , , ,0.78,99.99 +5116.0,pick item,2019-08-14 09:35:13.000Z, ,"['881883']", , , ,1.25,2200.0 +5117.0,pick item,2019-08-14 09:35:42.000Z, ,"['881987']", , , ,0.28,449.0 +5118.0,confirm order,2019-08-14 09:42:03.000Z, , ,"['990490']", , ,2.612,1578.98 +5119.0,pick item,2019-08-14 09:42:33.000Z, ,"['881939']", , , ,0.28,449.0 +5120.0,pick item,2019-08-14 09:55:58.000Z, ,"['880831']", , , ,0.483,79.99 +5121.0,create package,2019-08-14 09:55:58.000Z, ,"['882006','881968','881826','881971','881748','881972','881970','881967','881747']", ,"['660294']", ,6.746,8486.98 +5122.0,pick item,2019-08-14 10:03:39.000Z, ,"['881872']", , , ,1.28,149.99 +5123.0,pick item,2019-08-14 10:14:04.000Z, ,"['881983']", , , ,0.98,129.99 +5124.0,pick item,2019-08-14 10:20:09.000Z, ,"['881220']", , , ,1.48,199.99 +5125.0,pick item,2019-08-14 10:21:58.000Z, ,"['881974']", , , ,0.88,89.99 +5126.0,pay order,2019-08-14 10:22:27.000Z, , ,"['990322']", , ,1.733,2700.0 +5127.0,pick item,2019-08-14 10:22:48.000Z, ,"['882014']", , , ,0.483,1099.0 +5128.0,payment reminder,2019-08-14 10:22:58.000Z, , ,"['990271']", , ,4.9830000000000005,1927.95 +5129.0,pick item,2019-08-14 10:23:19.000Z, ,"['881991']", , , ,0.44,476.0 +5130.0,item out of stock,2019-08-14 10:35:33.000Z, ,"['882017']", , , ,0.98,129.99 +5131.0,send package,2019-08-14 10:38:55.000Z, , , ,"['660291']", ,3.57,2918.97 +5132.0,place order,2019-08-14 10:46:03.000Z, ,"['882046','882048','882047']","['990504']", , ,2.013,3393.99 +5133.0,pick item,2019-08-14 10:47:21.000Z, ,"['881298']", , , ,0.44,476.0 +5134.0,pick item,2019-08-14 10:48:16.000Z, ,"['881962']", , , ,0.88,89.99 +5135.0,pay order,2019-08-14 10:49:27.000Z, , ,"['990220']", , ,4.476,1910.97 +5136.0,pick item,2019-08-14 10:50:02.000Z, ,"['881832']", , , ,0.88,89.99 +5137.0,create package,2019-08-14 10:50:02.000Z, ,"['881974','881975','881484','881849','881848']", ,"['660295']", ,5.49,2969.96 +5138.0,pick item,2019-08-14 10:51:48.000Z, ,"['881999']", , , ,0.483,79.99 +5139.0,item out of stock,2019-08-14 10:55:27.000Z, ,"['882040']", , , ,0.44,476.0 +5140.0,pick item,2019-08-14 11:01:09.000Z, ,"['882026']", , , ,0.495,129.0 +5141.0,item out of stock,2019-08-14 11:02:29.000Z, ,"['882025']", , , ,0.98,129.99 +5142.0,pick item,2019-08-14 11:02:58.000Z, ,"['882033']", , , ,1.37,2500.0 +5143.0,pay order,2019-08-14 11:04:14.000Z, , ,"['990318']", , ,1.541,3435.99 +5144.0,send package,2019-08-14 11:49:29.000Z, , , ,"['660294']", ,6.746,8486.98 +5145.0,confirm order,2019-08-14 12:05:58.000Z, , ,"['990503']", , ,3.179,2634.96 +5146.0,confirm order,2019-08-14 12:17:14.000Z, , ,"['990494']", , ,1.28,154.99 +5147.0,package delivered,2019-08-14 12:20:50.000Z, , , ,"['660276']", ,1.4369999999999998,3244.99 +5148.0,confirm order,2019-08-14 12:36:10.000Z, , ,"['990478']", , ,1.601,2701.99 +5149.0,confirm order,2019-08-14 12:47:24.000Z, , ,"['990500']", , ,3.787,1222.96 +5150.0,place order,2019-08-14 12:51:54.000Z, ,"['882049','882052','882050','882051']","['990505']", , ,2.8,760.97 +5151.0,pick item,2019-08-14 13:00:19.000Z, ,"['881955']", , , ,0.483,79.99 +5152.0,pay order,2019-08-14 13:02:40.000Z, , ,"['990453']", , ,1.983,2128.99 +5153.0,pick item,2019-08-14 13:04:37.000Z, ,"['881688']", , , ,0.78,99.99 +5154.0,create package,2019-08-14 13:04:37.000Z, ,"['881955','881873','881872','881495']", ,"['660296']", ,4.613,2929.97 +5155.0,send package,2019-08-14 13:11:36.000Z, , , ,"['660285']", ,4.349,1737.95 +5156.0,pick item,2019-08-14 13:12:40.000Z, ,"['882013']", , , ,0.172,699.0 +5157.0,pick item,2019-08-14 13:13:15.000Z, ,"['881977']", , , ,0.28,89.99 +5158.0,reorder item,2019-08-14 13:18:14.000Z, ,"['881930']", , , ,0.38,29.99 +5159.0,send package,2019-08-14 13:20:56.000Z, , , ,"['660283']", ,3.649,5195.98 +5160.0,item out of stock,2019-08-14 13:24:45.000Z, ,"['881892']", , , ,1.48,199.99 +5161.0,item out of stock,2019-08-14 13:29:36.000Z, ,"['881997']", , , ,0.21,529.0 +5162.0,package delivered,2019-08-14 13:34:29.000Z, , , ,"['660294']", ,6.746,8486.98 +5163.0,reorder item,2019-08-14 13:51:31.000Z, ,"['881892']", , , ,1.48,199.99 +5164.0,pick item,2019-08-14 14:01:41.000Z, ,"['882051']", , , ,0.44,476.0 +5165.0,pay order,2019-08-14 14:08:40.000Z, , ,"['990489']", , ,2.2,770.98 +5166.0,pick item,2019-08-14 14:15:40.000Z, ,"['882024']", , , ,0.172,699.0 +5167.0,create package,2019-08-14 14:15:40.000Z, ,"['881947','881853','881962','881945','881996','881999','881961']", ,"['660297']", ,4.226,2383.96 +5168.0,pay order,2019-08-14 14:21:19.000Z, , ,"['990262']", , ,3.04,334.97 +5169.0,send package,2019-08-14 14:22:07.000Z, , , ,"['660286']", ,2.9960000000000004,3194.97 +5170.0,send package,2019-08-14 14:25:59.000Z, , , ,"['660297']", ,4.226,2383.96 +5171.0,pay order,2019-08-14 14:27:41.000Z, , ,"['990261']", , ,10.042,8963.93 +5172.0,pick item,2019-08-14 14:28:14.000Z, ,"['882052']", , , ,0.2,39.99 +5173.0,reorder item,2019-08-14 14:28:50.000Z, ,"['882025']", , , ,0.98,129.99 +5174.0,reorder item,2019-08-14 14:33:03.000Z, ,"['881860']", , , ,1.28,149.99 +5175.0,pick item,2019-08-14 14:37:54.000Z, ,"['882019']", , , ,0.88,89.99 +5176.0,package delivered,2019-08-14 14:54:46.000Z, , , ,"['660283']", ,3.649,5195.98 +5177.0,pick item,2019-08-14 14:57:59.000Z, ,"['881931']", , , ,0.483,1099.0 +5178.0,place order,2019-08-14 15:03:35.000Z, ,"['882056','882053','882057','882055','882054']","['990506']", , ,3.9,973.96 +5179.0,package delivered,2019-08-14 15:03:56.000Z, , , ,"['660285']", ,4.349,1737.95 +5180.0,package delivered,2019-08-14 15:05:12.000Z, , , ,"['660274']", ,2.605,5694.99 +5181.0,send package,2019-08-14 15:17:33.000Z, , , ,"['660296']", ,4.613,2929.97 +5182.0,pay order,2019-08-14 15:22:58.000Z, , ,"['990365']", , ,1.263,1203.99 +5183.0,pick item,2019-08-14 15:31:47.000Z, ,"['881876']", , , ,0.188,1149.0 +5184.0,pick item,2019-08-14 15:39:54.000Z, ,"['881485']", , , ,0.88,89.99 +5185.0,pick item,2019-08-14 15:48:01.000Z, ,"['881810']", , , ,0.38,29.99 +5186.0,pick item,2019-08-14 15:52:35.000Z, ,"['881372']", , , ,1.37,2500.0 +5187.0,create package,2019-08-14 15:52:35.000Z, ,"['882004','882026','882027','881887','882024','881886']", ,"['660298']", ,3.777,3257.97 +5188.0,reorder item,2019-08-14 16:16:02.000Z, ,"['881908']", , , ,1.37,2500.0 +5189.0,place order,2019-08-14 16:26:57.000Z, ,"['882060','882058','882059','882061']","['990507']", , ,2.6060000000000003,3662.99 +5190.0,pay order,2019-08-14 16:42:40.000Z, , ,"['990364']", , ,2.175,1842.97 +5191.0,package delivered,2019-08-14 16:48:06.000Z, , , ,"['660297']", ,4.226,2383.96 +5192.0,package delivered,2019-08-14 17:05:15.000Z, , , ,"['660288']", ,4.185,4696.97 +5193.0,pick item,2019-08-14 17:29:45.000Z, ,"['881926']", , , ,1.28,149.99 +5194.0,place order,2019-08-14 19:00:26.000Z, ,"['882062','882065','882067','882066','882064','882063']","['990508']", , ,3.676,1463.98 +5195.0,payment reminder,2019-08-14 20:04:09.000Z, , ,"['990388']", , ,5.544,2032.95 +5196.0,place order,2019-08-15 00:20:30.000Z, ,"['882074','882070','882073','882068','882069','882072','882071','882075']","['990509']", , ,4.993,3641.96 +5197.0,pick item,2019-08-15 06:34:37.000Z, ,"['881855']", , , ,0.78,99.99 +5198.0,pick item,2019-08-15 06:50:29.000Z, ,"['881896']", , , ,1.48,199.99 +5199.0,pay order,2019-08-15 07:26:44.000Z, , ,"['990430']", , ,1.42,610.99 +5200.0,pick item,2019-08-15 07:30:50.000Z, ,"['882058']", , , ,1.25,2200.0 +5201.0,place order,2019-08-15 07:36:21.000Z, ,"['882080','882076','882079','882078','882077']","['990510']", , ,3.695,1582.97 +5202.0,pay order,2019-08-15 07:43:24.000Z, , ,"['990484']", , ,0.988,3478.0 +5203.0,pick item,2019-08-15 07:51:20.000Z, ,"['882050']", , , ,0.88,89.99 +5204.0,pick item,2019-08-15 07:53:42.000Z, ,"['881929']", , , ,0.188,1149.0 +5205.0,create package,2019-08-15 07:53:42.000Z, ,"['881989','881939','881991','881298','881810','882014','881876','881763']", ,"['660299']", ,2.931,4244.98 +5206.0,pay order,2019-08-15 07:56:08.000Z, , ,"['990345']", , ,0.978,629.0 +5207.0,pay order,2019-08-15 08:03:58.000Z, , ,"['990503']", , ,3.179,2634.96 +5208.0,pick item,2019-08-15 08:04:52.000Z, ,"['881963']", , , ,0.172,699.0 +5209.0,pick item,2019-08-15 08:09:38.000Z, ,"['882061']", , , ,0.21,529.0 +5210.0,pick item,2019-08-15 08:11:07.000Z, ,"['881545']", , , ,0.44,476.0 +5211.0,pick item,2019-08-15 08:17:30.000Z, ,"['882009']", , , ,0.172,699.0 +5212.0,pick item,2019-08-15 08:31:38.000Z, ,"['882032']", , , ,0.88,89.99 +5213.0,send package,2019-08-15 08:34:25.000Z, , , ,"['660292']", ,0.28,449.0 +5214.0,pick item,2019-08-15 08:37:02.000Z, ,"['881978']", , , ,0.483,1099.0 +5215.0,pay order,2019-08-15 08:54:42.000Z, , ,"['990499']", , ,3.4130000000000003,3598.99 +5216.0,package delivered,2019-08-15 08:58:01.000Z, , , ,"['660279']", ,4.284,2152.95 +5217.0,pick item,2019-08-15 08:59:44.000Z, ,"['882075']", , , ,0.495,129.0 +5218.0,pay order,2019-08-15 09:09:05.000Z, , ,"['990464']", , ,1.258,303.98 +5219.0,pick item,2019-08-15 09:17:55.000Z, ,"['881897']", , , ,0.28,89.99 +5220.0,create package,2019-08-15 09:17:55.000Z, ,"['881944','882019','881940','882003','881688']", ,"['660300']", ,3.673,3333.98 +5221.0,send package,2019-08-15 09:19:13.000Z, , , ,"['660287']", ,4.067,4181.97 +5222.0,pay order,2019-08-15 09:30:00.000Z, , ,"['990488']", , ,0.732,1242.99 +5223.0,payment reminder,2019-08-15 09:31:26.000Z, , ,"['990385']", , ,2.305,3732.99 +5224.0,place order,2019-08-15 09:32:29.000Z, ,"['882081','882083','882082']","['990511']", , ,2.67,2810.99 +5225.0,pick item,2019-08-15 09:54:48.000Z, ,"['881923']", , , ,0.172,699.0 +5226.0,pick item,2019-08-15 10:00:31.000Z, ,"['881340']", , , ,0.78,99.99 +5227.0,pick item,2019-08-15 10:06:45.000Z, ,"['881728']", , , ,1.25,2200.0 +5228.0,pay order,2019-08-15 10:07:10.000Z, , ,"['990378']", , ,2.7,494.94 +5229.0,pick item,2019-08-15 10:11:33.000Z, ,"['882036']", , , ,0.88,89.99 +5230.0,pick item,2019-08-15 10:18:04.000Z, ,"['881910']", , , ,1.48,199.99 +5231.0,create package,2019-08-15 10:18:04.000Z, ,"['881985','881982','881978','881977','881993','881981','881995','881983','881979']", ,"['660301']", ,5.772,6017.97 +5232.0,pick item,2019-08-15 10:22:14.000Z, ,"['881921']", , , ,0.28,89.99 +5233.0,pick item,2019-08-15 10:24:46.000Z, ,"['882068']", , , ,0.28,89.99 +5234.0,reorder item,2019-08-15 10:53:21.000Z, ,"['881844']", , , ,0.44,476.0 +5235.0,send package,2019-08-15 11:04:41.000Z, , , ,"['660298']", ,3.777,3257.97 +5236.0,place order,2019-08-15 11:24:46.000Z, ,"['882086','882085','882089','882088','882084','882087']","['990512']", , ,4.2780000000000005,6111.99 +5237.0,confirm order,2019-08-15 11:29:15.000Z, , ,"['990498']", , ,3.2230000000000003,809.97 +5238.0,confirm order,2019-08-15 11:35:13.000Z, , ,"['990505']", , ,2.8,760.97 +5239.0,pick item,2019-08-15 11:52:30.000Z, ,"['881454']", , , ,0.172,699.0 +5240.0,pick item,2019-08-15 12:04:18.000Z, ,"['882063']", , , ,0.44,476.0 +5241.0,pick item,2019-08-15 12:12:08.000Z, ,"['881948']", , , ,0.172,699.0 +5242.0,pay order,2019-08-15 12:36:15.000Z, , ,"['990455']", , ,3.338,1522.98 +5243.0,pick item,2019-08-15 12:37:32.000Z, ,"['882030']", , , ,0.495,129.0 +5244.0,pick item,2019-08-15 12:49:47.000Z, ,"['882085']", , , ,0.28,449.0 +5245.0,item out of stock,2019-08-15 13:01:18.000Z, ,"['882067']", , , ,0.495,129.0 +5246.0,place order,2019-08-15 13:09:19.000Z, ,"['882092','882091','882090']","['990513']", , ,0.662,1322.99 +5247.0,pick item,2019-08-15 13:16:25.000Z, ,"['881938']", , , ,0.44,476.0 +5248.0,pick item,2019-08-15 13:46:43.000Z, ,"['881229']", , , ,0.495,129.0 +5249.0,create package,2019-08-15 13:46:43.000Z, ,"['881898','882010','881963','881966','881897','882013','882009','882012','882011','881896','881965','881950','881931','881592']", ,"['660302']", ,5.5470000000000015,8165.96 +5250.0,pay order,2019-08-15 13:49:30.000Z, , ,"['990476']", , ,0.93,1459.0 +5251.0,pick item,2019-08-15 13:50:14.000Z, ,"['881960']", , , ,0.188,1149.0 +5252.0,pay order,2019-08-15 13:50:41.000Z, , ,"['990271']", , ,4.9830000000000005,1927.95 +5253.0,pick item,2019-08-15 13:55:41.000Z, ,"['881986']", , , ,0.172,699.0 +5254.0,pick item,2019-08-15 14:00:58.000Z, ,"['882082']", , , ,0.44,476.0 +5255.0,confirm order,2019-08-15 14:05:33.000Z, , ,"['990508']", , ,3.676,1463.98 +5256.0,pick item,2019-08-15 14:07:24.000Z, ,"['882042']", , , ,0.166,799.0 +5257.0,pick item,2019-08-15 14:08:57.000Z, ,"['882069']", , , ,0.483,79.99 +5258.0,item out of stock,2019-08-15 14:27:03.000Z, ,"['882028']", , , ,0.98,129.99 +5259.0,pick item,2019-08-15 14:36:31.000Z, ,"['882037']", , , ,0.88,89.99 +5260.0,reorder item,2019-08-15 14:38:05.000Z, ,"['881803']", , , ,1.48,199.99 +5261.0,place order,2019-08-15 14:38:25.000Z, ,"['882093','882094','882095']","['990514']", , ,1.758,3693.99 +5262.0,pay order,2019-08-15 14:39:08.000Z, , ,"['990490']", , ,2.612,1578.98 +5263.0,pay order,2019-08-15 14:42:54.000Z, , ,"['990399']", , ,1.929,2306.99 +5264.0,pick item,2019-08-15 14:43:01.000Z, ,"['881903']", , , ,0.44,476.0 +5265.0,confirm order,2019-08-15 14:48:49.000Z, , ,"['990506']", , ,3.9,973.96 +5266.0,pick item,2019-08-15 14:52:25.000Z, ,"['882090']", , , ,0.28,89.99 +5267.0,pick item,2019-08-15 14:55:05.000Z, ,"['881953']", , , ,1.37,2500.0 +5268.0,pick item,2019-08-15 15:01:41.000Z, ,"['881823']", , , ,0.88,89.99 +5269.0,send package,2019-08-15 15:09:05.000Z, , , ,"['660302']", ,5.5470000000000015,8165.96 +5270.0,pick item,2019-08-15 15:11:45.000Z, ,"['882073']", , , ,0.21,529.0 +5271.0,pick item,2019-08-15 15:20:18.000Z, ,"['882087']", , , ,1.37,2500.0 +5272.0,payment reminder,2019-08-15 15:35:48.000Z, , ,"['990400']", , ,1.755,253.98 +5273.0,pick item,2019-08-15 15:38:22.000Z, ,"['882031']", , , ,1.28,149.99 +5274.0,pick item,2019-08-15 15:49:34.000Z, ,"['882064']", , , ,0.483,79.99 +5275.0,create package,2019-08-15 15:49:34.000Z, ,"['880876','880831']", ,"['660303']", ,0.763,528.99 +5276.0,pick item,2019-08-15 16:14:45.000Z, ,"['882072']", , , ,0.38,29.99 +5277.0,pick item,2019-08-15 16:22:51.000Z, ,"['882092']", , , ,0.21,529.0 +5278.0,create package,2019-08-15 16:22:51.000Z, ,"['882085','881340','882087','882030','882032','882031','882033','881372','881923','881914','881921']", ,"['660304']", ,8.717,9682.96 +5279.0,send package,2019-08-15 16:34:37.000Z, , , ,"['660304']", ,8.717,9682.96 +5280.0,place order,2019-08-15 16:36:38.000Z, ,"['882099','882098','882096','882097']","['990515']", , ,3.115,2132.98 +5281.0,pick item,2019-08-15 16:44:18.000Z, ,"['881697']", , , ,0.28,449.0 +5282.0,send package,2019-08-15 17:01:19.000Z, , , ,"['660295']", ,5.49,2969.96 +5283.0,item out of stock,2019-08-15 17:12:06.000Z, ,"['882049']", , , ,1.28,149.99 +5284.0,pay order,2019-08-15 17:58:19.000Z, , ,"['990462']", , ,4.176,4811.98 +5285.0,pick item,2019-08-15 18:38:37.000Z, ,"['881969']", , , ,0.78,99.99 +5286.0,package delivered,2019-08-15 19:05:09.000Z, , , ,"['660282']", ,5.006,4884.96 +5287.0,place order,2019-08-15 19:29:29.000Z, ,"['882104','882102','882100','882103','882101']","['990516']", , ,0.986,2911.98 +5288.0,package delivered,2019-08-15 19:49:34.000Z, , , ,"['660302']", ,5.5470000000000015,8165.96 +5289.0,place order,2019-08-16 03:14:48.000Z, ,"['882105','882107','882110','882106','882108','882109']","['990517']", , ,3.777,8031.0 +5290.0,pay order,2019-08-16 06:39:22.000Z, , ,"['990451']", , ,7.49,5872.94 +5291.0,reorder item,2019-08-16 07:16:02.000Z, ,"['882040']", , , ,0.44,476.0 +5292.0,pick item,2019-08-16 07:20:56.000Z, ,"['882108']", , , ,1.37,2500.0 +5293.0,pay order,2019-08-16 07:30:42.000Z, , ,"['990270']", , ,0.7559999999999999,2332.99 +5294.0,confirm order,2019-08-16 07:31:24.000Z, , ,"['990501']", , ,4.235,3402.98 +5295.0,pick item,2019-08-16 07:33:04.000Z, ,"['881984']", , , ,0.483,79.99 +5296.0,place order,2019-08-16 07:48:04.000Z, ,"['882111']","['990518']", , ,0.44,481.0 +5297.0,confirm order,2019-08-16 07:52:34.000Z, , ,"['990504']", , ,2.013,3393.99 +5298.0,pick item,2019-08-16 08:08:23.000Z, ,"['882077']", , , ,1.28,149.99 +5299.0,reorder item,2019-08-16 08:38:32.000Z, ,"['881992']", , , ,1.48,199.99 +5300.0,pay order,2019-08-16 09:04:26.000Z, , ,"['990258']", , ,5.2360000000000015,4667.97 +5301.0,package delivered,2019-08-16 09:16:10.000Z, , , ,"['660284']", ,4.151,3398.96 +5302.0,package delivered,2019-08-16 09:20:54.000Z, , , ,"['660295']", ,5.49,2969.96 +5303.0,pay order,2019-08-16 09:22:53.000Z, , ,"['990491']", , ,2.113,1219.98 +5304.0,pay order,2019-08-16 09:28:36.000Z, , ,"['990374']", , ,2.552,2321.97 +5305.0,item out of stock,2019-08-16 09:32:25.000Z, ,"['882099']", , , ,0.98,129.99 +5306.0,pick item,2019-08-16 09:46:00.000Z, ,"['882035']", , , ,0.483,79.99 +5307.0,place order,2019-08-16 09:55:55.000Z, ,"['882112','882113']","['990519']", , ,1.56,244.98 +5308.0,send package,2019-08-16 09:59:57.000Z, , , ,"['660290']", ,4.972,1964.93 +5309.0,reorder item,2019-08-16 10:00:15.000Z, ,"['882067']", , , ,0.495,129.0 +5310.0,package delivered,2019-08-16 10:06:46.000Z, , , ,"['660291']", ,3.57,2918.97 +5311.0,pick item,2019-08-16 10:11:41.000Z, ,"['882071']", , , ,1.37,2500.0 +5312.0,send package,2019-08-16 10:17:33.000Z, , , ,"['660300']", ,3.673,3333.98 +5313.0,send package,2019-08-16 10:54:28.000Z, , , ,"['660293']", ,5.642,5663.96 +5314.0,reorder item,2019-08-16 10:54:34.000Z, ,"['882099']", , , ,0.98,129.99 +5315.0,pick item,2019-08-16 11:04:22.000Z, ,"['882038']", , , ,0.88,89.99 +5316.0,pick item,2019-08-16 11:37:25.000Z, ,"['882047']", , , ,1.25,2200.0 +5317.0,pick item,2019-08-16 11:43:05.000Z, ,"['881056']", , , ,0.78,99.99 +5318.0,package delivered,2019-08-16 12:02:31.000Z, , , ,"['660298']", ,3.777,3257.97 +5319.0,place order,2019-08-16 12:11:38.000Z, ,"['882114','882115']","['990520']", , ,0.3720000000000001,743.99 +5320.0,pick item,2019-08-16 12:12:02.000Z, ,"['882016']", , , ,0.88,89.99 +5321.0,create package,2019-08-16 12:12:02.000Z, ,"['882035','882037','881823','882036','881936']", ,"['660305']", ,4.493,2849.96 +5322.0,pick item,2019-08-16 12:12:53.000Z, ,"['881847']", , , ,0.483,1099.0 +5323.0,confirm order,2019-08-16 12:49:50.000Z, , ,"['990516']", , ,0.986,2911.98 +5324.0,confirm order,2019-08-16 12:51:43.000Z, , ,"['990507']", , ,2.6060000000000003,3662.99 +5325.0,item out of stock,2019-08-16 12:56:12.000Z, ,"['882107']", , , ,1.37,2500.0 +5326.0,pick item,2019-08-16 12:57:44.000Z, ,"['882040']", , , ,0.44,476.0 +5327.0,pick item,2019-08-16 13:12:57.000Z, ,"['881804']", , , ,0.483,1099.0 +5328.0,item out of stock,2019-08-16 13:22:08.000Z, ,"['881937']", , , ,0.21,529.0 +5329.0,send package,2019-08-16 13:23:18.000Z, , , ,"['660299']", ,2.931,4244.98 +5330.0,pick item,2019-08-16 13:32:35.000Z, ,"['882114']", , , ,0.172,699.0 +5331.0,package delivered,2019-08-16 13:39:31.000Z, , , ,"['660293']", ,5.642,5663.96 +5332.0,place order,2019-08-16 13:43:03.000Z, ,"['882118','882121','882117','882119','882120','882123','882122','882116']","['990521']", , ,2.756,2198.95 +5333.0,send package,2019-08-16 13:48:47.000Z, , , ,"['660303']", ,0.763,528.99 +5334.0,pick item,2019-08-16 14:01:37.000Z, ,"['882046']", , , ,0.483,1099.0 +5335.0,create package,2019-08-16 14:01:37.000Z, ,"['881804','882008','882023','881883','882052','881728','882108','882051','882050']", ,"['660306']", ,6.363,9582.98 +5336.0,package delivered,2019-08-16 14:06:05.000Z, , , ,"['660287']", ,4.067,4181.97 +5337.0,pick item,2019-08-16 14:09:01.000Z, ,"['881880']", , , ,0.78,99.99 +5338.0,pick item,2019-08-16 14:16:33.000Z, ,"['882111']", , , ,0.44,476.0 +5339.0,pay order,2019-08-16 14:17:46.000Z, , ,"['990422']", , ,4.885,2703.96 +5340.0,pick item,2019-08-16 14:19:09.000Z, ,"['881828']", , , ,1.28,149.99 +5341.0,failed delivery,2019-08-16 14:25:28.000Z, , , ,"['660299']", ,2.931,4244.98 +5342.0,pick item,2019-08-16 14:32:57.000Z, ,"['882043']", , , ,0.28,89.99 +5343.0,confirm order,2019-08-16 14:38:31.000Z, , ,"['990510']", , ,3.695,1582.97 +5344.0,pay order,2019-08-16 14:39:55.000Z, , ,"['990466']", , ,0.172,704.0 +5345.0,pick item,2019-08-16 14:40:29.000Z, ,"['882091']", , , ,0.172,699.0 +5346.0,package delivered,2019-08-16 14:51:29.000Z, , , ,"['660286']", ,2.9960000000000004,3194.97 +5347.0,reorder item,2019-08-16 15:04:43.000Z, ,"['881933']", , , ,0.98,129.99 +5348.0,item out of stock,2019-08-16 15:06:03.000Z, ,"['882119']", , , ,0.28,89.99 +5349.0,package delivered,2019-08-16 15:08:04.000Z, , , ,"['660290']", ,4.972,1964.93 +5350.0,package delivered,2019-08-16 15:08:36.000Z, , , ,"['660296']", ,4.613,2929.97 +5351.0,pay order,2019-08-16 15:37:55.000Z, , ,"['990478']", , ,1.601,2701.99 +5352.0,place order,2019-08-16 15:45:53.000Z, ,"['882124','882125','882126']","['990522']", , ,2.043,324.97 +5353.0,pick item,2019-08-16 16:07:36.000Z, ,"['882118']", , , ,0.2,39.99 +5354.0,pick item,2019-08-16 16:27:14.000Z, ,"['882112']", , , ,0.28,89.99 +5355.0,item out of stock,2019-08-16 16:27:56.000Z, ,"['882109']", , , ,0.483,1099.0 +5356.0,pay order,2019-08-16 16:33:48.000Z, , ,"['990510']", , ,3.695,1582.97 +5357.0,pick item,2019-08-16 16:46:23.000Z, ,"['882113']", , , ,1.28,149.99 +5358.0,confirm order,2019-08-16 16:49:39.000Z, , ,"['990520']", , ,0.3720000000000001,743.99 +5359.0,pick item,2019-08-16 16:52:15.000Z, ,"['881919']", , , ,0.38,29.99 +5360.0,create package,2019-08-16 16:52:15.000Z, ,"['881910','882061','882058','881987','882077','881986','881454']", ,"['660307']", ,4.843999999999999,4925.98 +5361.0,send package,2019-08-16 16:54:03.000Z, , , ,"['660301']", ,5.772,6017.97 +5362.0,pay order,2019-08-16 17:27:51.000Z, , ,"['990236']", , ,3.463,4710.99 +5363.0,pick item,2019-08-16 17:42:07.000Z, ,"['882094']", , , ,0.2,39.99 +5364.0,place order,2019-08-16 17:57:14.000Z, ,"['882132','882128','882130','882131','882127','882129']","['990523']", , ,2.91,1551.97 +5365.0,pay order,2019-08-16 18:40:07.000Z, , ,"['990446']", , ,0.44,481.0 +5366.0,confirm order,2019-08-16 18:53:04.000Z, , ,"['990522']", , ,2.043,324.97 +5367.0,send package,2019-08-16 19:24:52.000Z, , , ,"['660306']", ,6.363,9582.98 +5368.0,pick item,2019-08-16 19:40:11.000Z, ,"['881990']", , , ,1.48,199.99 +5369.0,place order,2019-08-16 21:34:03.000Z, ,"['882134','882133']","['990524']", , ,0.649,1903.0 +5370.0,place order,2019-08-17 20:41:57.000Z, ,"['882136','882135']","['990525']", , ,1.963,699.99 +5371.0,create package,2019-08-17 23:00:00.000Z, ,"['882073','882114','882068','882072','882043','882071','881832','881828','882042','882069','882038','882075','881220','882040']", ,"['660308']", ,8.796,5951.92 +5372.0,payment reminder,2019-08-18 12:16:27.000Z, , ,"['990406']", , ,3.908,4331.99 +5373.0,payment reminder,2019-08-18 17:34:50.000Z, , ,"['990409']", , ,1.56,244.98 +5374.0,place order,2019-08-18 21:11:42.000Z, ,"['882141','882142','882137','882138','882140','882139']","['990526']", , ,4.556,3383.96 +5375.0,pick item,2019-08-19 06:20:56.000Z, ,"['881954']", , , ,0.78,99.99 +5376.0,package delivered,2019-08-19 06:25:50.000Z, , , ,"['660306']", ,6.363,9582.98 +5377.0,confirm order,2019-08-19 06:28:37.000Z, , ,"['990509']", , ,4.993,3641.96 +5378.0,pick item,2019-08-19 06:40:00.000Z, ,"['881973']", , , ,0.21,529.0 +5379.0,pick item,2019-08-19 06:53:40.000Z, ,"['881798']", , , ,0.483,1099.0 +5380.0,pick item,2019-08-19 06:56:22.000Z, ,"['882097']", , , ,1.48,199.99 +5381.0,pick item,2019-08-19 07:02:39.000Z, ,"['882045']", , , ,0.28,89.99 +5382.0,place order,2019-08-19 07:13:01.000Z, ,"['882143','882144']","['990527']", , ,0.398,1683.0 +5383.0,pay order,2019-08-19 07:18:56.000Z, , ,"['990400']", , ,1.755,253.98 +5384.0,item out of stock,2019-08-19 07:21:52.000Z, ,"['882002']", , , ,0.38,29.99 +5385.0,pick item,2019-08-19 07:43:33.000Z, ,"['882039']", , , ,0.44,476.0 +5386.0,pick item,2019-08-19 07:54:11.000Z, ,"['882065']", , , ,0.483,495.0 +5387.0,pay order,2019-08-19 07:54:42.000Z, , ,"['990354']", , ,0.76,64.98 +5388.0,pick item,2019-08-19 08:00:56.000Z, ,"['881819']", , , ,0.188,1149.0 +5389.0,send package,2019-08-19 08:14:31.000Z, , , ,"['660308']", ,8.796,5951.92 +5390.0,pick item,2019-08-19 08:16:56.000Z, ,"['882066']", , , ,0.495,129.0 +5391.0,pick item,2019-08-19 08:22:41.000Z, ,"['882124']", , , ,1.28,149.99 +5392.0,pick item,2019-08-19 08:30:44.000Z, ,"['882060']", , , ,0.166,799.0 +5393.0,package delivered,2019-08-19 08:32:57.000Z, , , ,"['660292']", ,0.28,449.0 +5394.0,pick item,2019-08-19 08:35:30.000Z, ,"['882139']", , , ,0.166,799.0 +5395.0,place order,2019-08-19 08:45:49.000Z, ,"['882147','882145','882146','882148']","['990528']", , ,4.425,2933.98 +5396.0,pick item,2019-08-19 08:49:02.000Z, ,"['881720']", , , ,1.28,149.99 +5397.0,pick item,2019-08-19 08:50:59.000Z, ,"['882089']", , , ,0.483,79.99 +5398.0,pick item,2019-08-19 08:52:12.000Z, ,"['881753']", , , ,0.44,476.0 +5399.0,item out of stock,2019-08-19 09:07:44.000Z, ,"['881824']", , , ,0.28,89.99 +5400.0,payment reminder,2019-08-19 09:17:03.000Z, , ,"['990414']", , ,3.874,7052.99 +5401.0,confirm order,2019-08-19 09:17:13.000Z, , ,"['990526']", , ,4.556,3383.96 +5402.0,pick item,2019-08-19 09:17:44.000Z, ,"['881957']", , , ,0.2,39.99 +5403.0,payment reminder,2019-08-19 09:25:51.000Z, , ,"['990404']", , ,1.32,570.99 +5404.0,item out of stock,2019-08-19 09:29:34.000Z, ,"['881994']", , , ,0.483,79.99 +5405.0,pick item,2019-08-19 09:32:58.000Z, ,"['882029']", , , ,0.38,29.99 +5406.0,pick item,2019-08-19 10:00:29.000Z, ,"['882018']", , , ,0.483,495.0 +5407.0,pick item,2019-08-19 10:15:13.000Z, ,"['881858']", , , ,0.28,449.0 +5408.0,create package,2019-08-19 10:15:13.000Z, ,"['881847','881485','881973','881545']", ,"['660309']", ,2.013,2193.99 +5409.0,item out of stock,2019-08-19 10:30:18.000Z, ,"['882125']", , , ,0.28,89.99 +5410.0,confirm order,2019-08-19 10:31:42.000Z, , ,"['990511']", , ,2.67,2810.99 +5411.0,place order,2019-08-19 10:51:25.000Z, ,"['882149']","['990529']", , ,0.495,134.0 +5412.0,pay order,2019-08-19 10:57:24.000Z, , ,"['990247']", , ,0.72,930.0 +5413.0,payment reminder,2019-08-19 11:11:37.000Z, , ,"['990410']", , ,1.166,2382.0 +5414.0,item out of stock,2019-08-19 11:12:03.000Z, ,"['882104']", , , ,0.2,39.99 +5415.0,pay order,2019-08-19 11:38:13.000Z, , ,"['990445']", , ,4.263999999999999,2381.96 +5416.0,failed delivery,2019-08-19 11:54:27.000Z, , , ,"['660303']", ,0.763,528.99 +5417.0,reorder item,2019-08-19 12:16:22.000Z, ,"['881980']", , , ,0.44,476.0 +5418.0,pay order,2019-08-19 12:36:21.000Z, , ,"['990391']", , ,3.381,4712.97 +5419.0,pick item,2019-08-19 12:45:43.000Z, ,"['881949']", , , ,0.2,39.99 +5420.0,package delivered,2019-08-19 12:46:17.000Z, , , ,"['660308']", ,8.796,5951.92 +5421.0,confirm order,2019-08-19 13:00:30.000Z, , ,"['990518']", , ,0.44,481.0 +5422.0,pick item,2019-08-19 13:00:42.000Z, ,"['881860']", , , ,1.28,149.99 +5423.0,place order,2019-08-19 13:02:38.000Z, ,"['882150']","['990530']", , ,0.188,1154.0 +5424.0,pick item,2019-08-19 13:04:51.000Z, ,"['881976']", , , ,0.88,89.99 +5425.0,pick item,2019-08-19 13:13:44.000Z, ,"['881641']", , , ,1.37,2500.0 +5426.0,create package,2019-08-19 13:13:44.000Z, ,"['881926','881960','881948','881855','881929','881229','881056']", ,"['660310']", ,3.883,3475.97 +5427.0,item out of stock,2019-08-19 13:36:18.000Z, ,"['882120']", , , ,0.21,529.0 +5428.0,item out of stock,2019-08-19 13:43:08.000Z, ,"['882149']", , , ,0.495,129.0 +5429.0,pick item,2019-08-19 13:48:50.000Z, ,"['882056']", , , ,0.28,89.99 +5430.0,failed delivery,2019-08-19 13:49:06.000Z, , , ,"['660299']", ,2.931,4244.98 +5431.0,package delivered,2019-08-19 13:57:01.000Z, , , ,"['660300']", ,3.673,3333.98 +5432.0,pick item,2019-08-19 14:04:35.000Z, ,"['882128']", , , ,0.28,449.0 +5433.0,pick item,2019-08-19 14:06:13.000Z, ,"['882144']", , , ,0.188,1149.0 +5434.0,pay order,2019-08-19 14:13:20.000Z, , ,"['990409']", , ,1.56,244.98 +5435.0,place order,2019-08-19 14:25:03.000Z, ,"['882153','882152','882151','882154']","['990531']", , ,3.3960000000000004,3533.98 +5436.0,pick item,2019-08-19 14:26:22.000Z, ,"['882093']", , , ,0.188,1149.0 +5437.0,confirm order,2019-08-19 14:42:34.000Z, , ,"['990531']", , ,3.3960000000000004,3533.98 +5438.0,confirm order,2019-08-19 14:46:43.000Z, , ,"['990519']", , ,1.56,244.98 +5439.0,send package,2019-08-19 14:51:28.000Z, , , ,"['660307']", ,4.843999999999999,4925.98 +5440.0,confirm order,2019-08-19 15:31:21.000Z, , ,"['990528']", , ,4.425,2933.98 +5441.0,item out of stock,2019-08-19 15:31:47.000Z, ,"['882134']", , , ,0.483,1099.0 +5442.0,pick item,2019-08-19 15:35:58.000Z, ,"['881850']", , , ,0.495,129.0 +5443.0,item out of stock,2019-08-19 15:44:05.000Z, ,"['882126']", , , ,0.483,79.99 +5444.0,pay order,2019-08-19 16:01:00.000Z, , ,"['990498']", , ,3.2230000000000003,809.97 +5445.0,pay order,2019-08-19 16:06:01.000Z, , ,"['990441']", , ,1.332,2022.98 +5446.0,place order,2019-08-19 16:09:54.000Z, ,"['882155','882156','882158','882157']","['990532']", , ,3.4530000000000003,3325.99 +5447.0,package delivered,2019-08-19 16:11:42.000Z, , , ,"['660299']", ,2.931,4244.98 +5448.0,package delivered,2019-08-19 16:50:16.000Z, , , ,"['660307']", ,4.843999999999999,4925.98 +5449.0,place order,2019-08-19 18:09:16.000Z, ,"['882161','882160','882159','882162']","['990533']", , ,3.823,514.96 +5450.0,confirm order,2019-08-19 19:31:51.000Z, , ,"['990515']", , ,3.115,2132.98 +5451.0,reorder item,2019-08-19 19:58:49.000Z, ,"['882028']", , , ,0.98,129.99 +5452.0,pay order,2019-08-19 20:37:46.000Z, , ,"['990500']", , ,3.787,1222.96 +5453.0,place order,2019-08-19 20:58:07.000Z, ,"['882164','882163']","['990534']", , ,1.963,1303.99 +5454.0,pick item,2019-08-20 06:22:53.000Z, ,"['882110']", , , ,0.21,529.0 +5455.0,pick item,2019-08-20 06:43:14.000Z, ,"['881935']", , , ,1.48,199.99 +5456.0,create package,2019-08-20 06:43:14.000Z, ,"['881903','882065','881984','882066','881753','882064','882063']", ,"['660311']", ,3.264,2211.98 +5457.0,payment reminder,2019-08-20 07:07:40.000Z, , ,"['990306']", , ,1.354,1768.98 +5458.0,pick item,2019-08-20 07:14:22.000Z, ,"['882148']", , , ,1.28,149.99 +5459.0,confirm order,2019-08-20 07:40:18.000Z, , ,"['990527']", , ,0.398,1683.0 +5460.0,place order,2019-08-20 07:47:49.000Z, ,"['882166','882168','882167','882165']","['990535']", , ,2.523,719.97 +5461.0,package delivered,2019-08-20 07:51:16.000Z, , , ,"['660304']", ,8.717,9682.96 +5462.0,reorder item,2019-08-20 07:52:06.000Z, ,"['881997']", , , ,0.21,529.0 +5463.0,pick item,2019-08-20 07:57:38.000Z, ,"['882151']", , , ,1.37,2500.0 +5464.0,confirm order,2019-08-20 08:19:03.000Z, , ,"['990529']", , ,0.495,134.0 +5465.0,pay order,2019-08-20 08:26:56.000Z, , ,"['990479']", , ,4.61,3343.97 +5466.0,send package,2019-08-20 08:30:57.000Z, , , ,"['660305']", ,4.493,2849.96 +5467.0,pay order,2019-08-20 08:34:12.000Z, , ,"['990403']", , ,4.079,4652.98 +5468.0,pick item,2019-08-20 08:37:44.000Z, ,"['882140']", , , ,1.28,149.99 +5469.0,pick item,2019-08-20 08:47:47.000Z, ,"['882083']", , , ,1.25,2200.0 +5470.0,pick item,2019-08-20 09:02:26.000Z, ,"['881906']", , , ,0.166,799.0 +5471.0,item out of stock,2019-08-20 09:05:50.000Z, ,"['882021']", , , ,1.37,2500.0 +5472.0,pay order,2019-08-20 09:13:37.000Z, , ,"['990507']", , ,2.6060000000000003,3662.99 +5473.0,pick item,2019-08-20 09:19:37.000Z, ,"['882055']", , , ,1.48,199.99 +5474.0,confirm order,2019-08-20 09:22:18.000Z, , ,"['990532']", , ,3.4530000000000003,3325.99 +5475.0,send package,2019-08-20 09:34:50.000Z, , , ,"['660310']", ,3.883,3475.97 +5476.0,pay order,2019-08-20 09:42:20.000Z, , ,"['990368']", , ,4.833,4359.97 +5477.0,pick item,2019-08-20 09:42:57.000Z, ,"['882079']", , , ,0.172,699.0 +5478.0,create package,2019-08-20 09:42:57.000Z, ,"['881641','881938','881990']", ,"['660312']", ,3.29,3175.99 +5479.0,pick item,2019-08-20 09:49:39.000Z, ,"['882103']", , , ,0.21,529.0 +5480.0,reorder item,2019-08-20 09:51:28.000Z, ,"['881942']", , , ,0.188,1149.0 +5481.0,pay order,2019-08-20 09:52:35.000Z, , ,"['990465']", , ,1.668,1353.99 +5482.0,place order,2019-08-20 09:55:26.000Z, ,"['882169','882170','882171']","['990536']", , ,2.04,224.97 +5483.0,reorder item,2019-08-20 10:30:33.000Z, ,"['881787']", , , ,0.21,529.0 +5484.0,pick item,2019-08-20 10:49:49.000Z, ,"['882165']", , , ,0.78,99.99 +5485.0,pick item,2019-08-20 10:59:11.000Z, ,"['882150']", , , ,0.188,1149.0 +5486.0,create package,2019-08-20 10:59:11.000Z, ,"['881953','881949','882083','882082']", ,"['660313']", ,3.26,5215.99 +5487.0,pick item,2019-08-20 11:01:17.000Z, ,"['881980']", , , ,0.44,476.0 +5488.0,pick item,2019-08-20 11:37:17.000Z, ,"['882171']", , , ,0.38,29.99 +5489.0,item out of stock,2019-08-20 11:45:01.000Z, ,"['882053']", , , ,1.48,199.99 +5490.0,reorder item,2019-08-20 11:48:31.000Z, ,"['882002']", , , ,0.38,29.99 +5491.0,pick item,2019-08-20 11:49:46.000Z, ,"['881863']", , , ,1.25,2200.0 +5492.0,place order,2019-08-20 12:10:39.000Z, ,"['882172','882174','882173','882176','882177','882175']","['990537']", , ,4.973,3922.97 +5493.0,payment reminder,2019-08-20 12:15:14.000Z, , ,"['990424']", , ,5.938,5962.98 +5494.0,pick item,2019-08-20 12:43:05.000Z, ,"['882105']", , , ,0.172,699.0 +5495.0,create package,2019-08-20 12:43:05.000Z, ,"['882092','882091','882090','881954','881697','882165','882111']", ,"['660314']", ,2.942,2442.97 +5496.0,pick item,2019-08-20 12:47:41.000Z, ,"['882034']", , , ,0.21,529.0 +5497.0,pick item,2019-08-20 12:50:20.000Z, ,"['882121']", , , ,0.2,39.99 +5498.0,failed delivery,2019-08-20 13:20:21.000Z, , , ,"['660303']", ,0.763,528.99 +5499.0,pay order,2019-08-20 13:28:48.000Z, , ,"['990486']", , ,3.34,3213.98 +5500.0,item out of stock,2019-08-20 13:33:27.000Z, ,"['882057']", , , ,0.28,449.0 +5501.0,place order,2019-08-20 13:41:05.000Z, ,"['882178']","['990538']", , ,0.2,44.99 +5502.0,pay order,2019-08-20 13:41:33.000Z, , ,"['990495']", , ,0.49,983.0 +5503.0,send package,2019-08-20 13:49:24.000Z, , , ,"['660312']", ,3.29,3175.99 +5504.0,confirm order,2019-08-20 13:49:53.000Z, , ,"['990525']", , ,1.963,699.99 +5505.0,pick item,2019-08-20 13:50:51.000Z, ,"['882156']", , , ,0.483,495.0 +5506.0,confirm order,2019-08-20 14:22:55.000Z, , ,"['990523']", , ,2.91,1551.97 +5507.0,pick item,2019-08-20 14:32:11.000Z, ,"['882100']", , , ,0.188,1149.0 +5508.0,pick item,2019-08-20 14:33:06.000Z, ,"['882059']", , , ,0.98,129.99 +5509.0,confirm order,2019-08-20 14:45:45.000Z, , ,"['990535']", , ,2.523,719.97 +5510.0,confirm order,2019-08-20 14:49:07.000Z, , ,"['990534']", , ,1.963,1303.99 +5511.0,pay order,2019-08-20 14:53:20.000Z, , ,"['990419']", , ,1.649,2426.98 +5512.0,send package,2019-08-20 15:00:05.000Z, , , ,"['660311']", ,3.264,2211.98 +5513.0,pick item,2019-08-20 15:07:22.000Z, ,"['882133']", , , ,0.166,799.0 +5514.0,pay order,2019-08-20 15:09:54.000Z, , ,"['990439']", , ,1.831,2187.99 +5515.0,reorder item,2019-08-20 15:23:50.000Z, ,"['882057']", , , ,0.28,449.0 +5516.0,pick item,2019-08-20 15:32:22.000Z, ,"['882020']", , , ,1.28,149.99 +5517.0,create package,2019-08-20 15:32:22.000Z, ,"['881969','882140','882139']", ,"['660315']", ,2.226,1048.98 +5518.0,place order,2019-08-20 15:41:58.000Z, ,"['882179','882181','882180']","['990539']", , ,2.233,3633.99 +5519.0,pick item,2019-08-20 15:55:59.000Z, ,"['882170']", , , ,0.88,89.99 +5520.0,pick item,2019-08-20 16:17:55.000Z, ,"['882138']", , , ,0.2,39.99 +5521.0,reorder item,2019-08-20 16:32:44.000Z, ,"['881846']", , , ,0.38,29.99 +5522.0,pick item,2019-08-20 16:45:32.000Z, ,"['881636']", , , ,1.25,2200.0 +5523.0,create package,2019-08-20 16:45:32.000Z, ,"['882034','881919','882046','882089','882047']", ,"['660316']", ,2.806,3937.98 +5524.0,pick item,2019-08-20 17:15:39.000Z, ,"['882048']", , , ,0.28,89.99 +5525.0,package delivered,2019-08-20 17:31:38.000Z, , , ,"['660310']", ,3.883,3475.97 +5526.0,pay order,2019-08-20 17:36:48.000Z, , ,"['990518']", , ,0.44,481.0 +5527.0,place order,2019-08-20 17:45:29.000Z, ,"['882185','882182','882183','882184']","['990540']", , ,2.043,699.97 +5528.0,pick item,2019-08-20 17:52:33.000Z, ,"['882130']", , , ,1.28,149.99 +5529.0,pick item,2019-08-20 18:14:07.000Z, ,"['882155']", , , ,0.44,476.0 +5530.0,pick item,2019-08-20 18:20:31.000Z, ,"['882163']", , , ,0.483,1099.0 +5531.0,pick item,2019-08-20 19:03:53.000Z, ,"['882143']", , , ,0.21,529.0 +5532.0,create package,2019-08-20 19:03:53.000Z, ,"['882018','882016','882148']", ,"['660317']", ,2.643,734.98 +5533.0,send package,2019-08-20 20:15:53.000Z, , , ,"['660315']", ,2.226,1048.98 +5534.0,place order,2019-08-20 21:10:32.000Z, ,"['882190','882188','882189','882187','882186']","['990541']", , ,1.981,2731.98 +5535.0,pay order,2019-08-21 06:02:43.000Z, , ,"['990468']", , ,2.48,1159.98 +5536.0,confirm order,2019-08-21 06:57:00.000Z, , ,"['990513']", , ,0.662,1322.99 +5537.0,place order,2019-08-21 07:04:14.000Z, ,"['882191']","['990542']", , ,0.172,704.0 +5538.0,package delivered,2019-08-21 07:40:47.000Z, , , ,"['660303']", ,0.763,528.99 +5539.0,pick item,2019-08-21 08:09:22.000Z, ,"['882173']", , , ,0.495,129.0 +5540.0,reorder item,2019-08-21 08:14:45.000Z, ,"['881869']", , , ,0.21,529.0 +5541.0,place order,2019-08-21 08:28:15.000Z, ,"['882194','882192','882193','882195']","['990543']", , ,3.18,900.97 +5542.0,send package,2019-08-21 08:43:37.000Z, , , ,"['660317']", ,2.643,734.98 +5543.0,pick item,2019-08-21 08:53:20.000Z, ,"['882157']", , , ,1.25,2200.0 +5544.0,pick item,2019-08-21 08:59:06.000Z, ,"['882168']", , , ,0.88,89.99 +5545.0,create package,2019-08-21 08:59:06.000Z, ,"['882150','882110','882105','882020','881957','882112','881880','882113']", ,"['660318']", ,4.39,2906.95 +5546.0,pick item,2019-08-21 08:59:54.000Z, ,"['882185']", , , ,0.98,129.99 +5547.0,reorder item,2019-08-21 09:08:02.000Z, ,"['881937']", , , ,0.21,529.0 +5548.0,pick item,2019-08-21 09:09:15.000Z, ,"['882153']", , , ,0.166,799.0 +5549.0,send package,2019-08-21 09:10:09.000Z, , , ,"['660314']", ,2.942,2442.97 +5550.0,confirm order,2019-08-21 09:10:30.000Z, , ,"['990542']", , ,0.172,704.0 +5551.0,pick item,2019-08-21 09:17:31.000Z, ,"['882122']", , , ,0.166,799.0 +5552.0,item out of stock,2019-08-21 09:18:20.000Z, ,"['882081']", , , ,0.98,129.99 +5553.0,pick item,2019-08-21 09:20:37.000Z, ,"['882186']", , , ,0.38,29.99 +5554.0,confirm order,2019-08-21 09:25:38.000Z, , ,"['990530']", , ,0.188,1154.0 +5555.0,confirm order,2019-08-21 09:31:15.000Z, , ,"['990524']", , ,0.649,1903.0 +5556.0,reorder item,2019-08-21 09:33:53.000Z, ,"['882149']", , , ,0.495,129.0 +5557.0,pick item,2019-08-21 09:42:11.000Z, ,"['881930']", , , ,0.38,29.99 +5558.0,item out of stock,2019-08-21 09:49:51.000Z, ,"['882127']", , , ,0.495,129.0 +5559.0,confirm order,2019-08-21 10:03:02.000Z, , ,"['990543']", , ,3.18,900.97 +5560.0,pay order,2019-08-21 10:04:49.000Z, , ,"['990525']", , ,1.963,699.99 +5561.0,place order,2019-08-21 10:16:17.000Z, ,"['882196','882197','882198','882200','882199']","['990544']", , ,3.059,4232.98 +5562.0,pick item,2019-08-21 10:33:33.000Z, ,"['882193']", , , ,0.28,89.99 +5563.0,item out of stock,2019-08-21 10:45:43.000Z, ,"['882172']", , , ,0.28,89.99 +5564.0,package delivered,2019-08-21 10:46:53.000Z, , , ,"['660312']", ,3.29,3175.99 +5565.0,package delivered,2019-08-21 10:49:23.000Z, , , ,"['660301']", ,5.772,6017.97 +5566.0,pick item,2019-08-21 10:52:10.000Z, ,"['882084']", , , ,1.37,2500.0 +5567.0,pay order,2019-08-21 11:12:44.000Z, , ,"['990469']", , ,1.029,913.98 +5568.0,pick item,2019-08-21 11:24:35.000Z, ,"['881101']", , , ,1.28,149.99 +5569.0,create package,2019-08-21 11:24:35.000Z, ,"['882103','882100','882122','882121','882163','882173','882118']", ,"['660319']", ,1.942,3784.98 +5570.0,pick item,2019-08-21 11:25:18.000Z, ,"['882191']", , , ,0.172,699.0 +5571.0,pay order,2019-08-21 11:33:50.000Z, , ,"['990529']", , ,0.495,134.0 +5572.0,pay order,2019-08-21 11:35:38.000Z, , ,"['990222']", , ,1.715,2351.99 +5573.0,place order,2019-08-21 11:52:22.000Z, ,"['882201']","['990545']", , ,0.483,84.99 +5574.0,send package,2019-08-21 12:17:14.000Z, , , ,"['660309']", ,2.013,2193.99 +5575.0,item out of stock,2019-08-21 12:24:16.000Z, ,"['882181']", , , ,0.483,1099.0 +5576.0,reorder item,2019-08-21 12:40:43.000Z, ,"['881824']", , , ,0.28,89.99 +5577.0,pay order,2019-08-21 12:42:52.000Z, , ,"['990406']", , ,3.908,4331.99 +5578.0,confirm order,2019-08-21 12:59:49.000Z, , ,"['990533']", , ,3.823,514.96 +5579.0,pick item,2019-08-21 13:07:59.000Z, ,"['882116']", , , ,0.98,129.99 +5580.0,pick item,2019-08-21 13:22:51.000Z, ,"['881892']", , , ,1.48,199.99 +5581.0,confirm order,2019-08-21 13:31:33.000Z, , ,"['990540']", , ,2.043,699.97 +5582.0,confirm order,2019-08-21 13:33:06.000Z, , ,"['990541']", , ,1.981,2731.98 +5583.0,pick item,2019-08-21 13:50:43.000Z, ,"['881095']", , , ,0.188,1149.0 +5584.0,confirm order,2019-08-21 13:51:09.000Z, , ,"['990514']", , ,1.758,3693.99 +5585.0,item out of stock,2019-08-21 13:52:37.000Z, ,"['882076']", , , ,1.48,199.99 +5586.0,pay order,2019-08-21 13:53:17.000Z, , ,"['990225']", , ,1.203,3286.99 +5587.0,pick item,2019-08-21 13:59:11.000Z, ,"['882086']", , , ,0.495,129.0 +5588.0,place order,2019-08-21 14:04:31.000Z, ,"['882206','882202','882203','882204','882207','882205']","['990546']", , ,1.511,3260.98 +5589.0,pick item,2019-08-21 14:19:13.000Z, ,"['880959']", , , ,0.483,79.99 +5590.0,reorder item,2019-08-21 14:20:03.000Z, ,"['882127']", , , ,0.495,129.0 +5591.0,send package,2019-08-21 14:26:15.000Z, , , ,"['660319']", ,1.942,3784.98 +5592.0,payment reminder,2019-08-21 14:54:16.000Z, , ,"['990426']", , ,4.673,4343.97 +5593.0,item out of stock,2019-08-21 14:57:46.000Z, ,"['882194']", , , ,1.48,199.99 +5594.0,pay order,2019-08-21 14:59:03.000Z, , ,"['990366']", , ,1.32,4106.0 +5595.0,pick item,2019-08-21 15:01:57.000Z, ,"['882184']", , , ,0.38,29.99 +5596.0,create package,2019-08-21 15:01:57.000Z, ,"['882185','881935','881863','882093','881860','882094','882124','882184','882097']", ,"['660320']", ,8.517999999999999,4248.93 +5597.0,pick item,2019-08-21 15:02:03.000Z, ,"['882200']", , , ,0.38,29.99 +5598.0,pay order,2019-08-21 15:08:49.000Z, , ,"['990432']", , ,2.3,3599.99 +5599.0,send package,2019-08-21 15:11:36.000Z, , , ,"['660320']", ,8.517999999999999,4248.93 +5600.0,reorder item,2019-08-21 15:18:19.000Z, ,"['882125']", , , ,0.28,89.99 +5601.0,pick item,2019-08-21 15:22:52.000Z, ,"['882125']", , , ,0.28,89.99 +5602.0,pick item,2019-08-21 15:23:56.000Z, ,"['882202']", , , ,0.28,89.99 +5603.0,place order,2019-08-21 15:28:50.000Z, ,"['882209','882208','882210']","['990547']", , ,2.2030000000000003,710.98 +5604.0,pick item,2019-08-21 15:32:23.000Z, ,"['882201']", , , ,0.483,79.99 +5605.0,confirm order,2019-08-21 15:34:24.000Z, , ,"['990521']", , ,2.756,2198.95 +5606.0,pick item,2019-08-21 15:47:55.000Z, ,"['882142']", , , ,0.88,89.99 +5607.0,pick item,2019-08-21 16:09:52.000Z, ,"['882197']", , , ,0.166,799.0 +5608.0,pick item,2019-08-21 16:15:21.000Z, ,"['882145']", , , ,0.495,129.0 +5609.0,pick item,2019-08-21 16:21:48.000Z, ,"['882175']", , , ,1.48,199.99 +5610.0,confirm order,2019-08-21 16:22:46.000Z, , ,"['990536']", , ,2.04,224.97 +5611.0,pick item,2019-08-21 17:03:26.000Z, ,"['882080']", , , ,0.28,449.0 +5612.0,create package,2019-08-21 17:03:26.000Z, ,"['881798','882056','882055']", ,"['660321']", ,2.2430000000000003,1388.98 +5613.0,place order,2019-08-21 17:17:27.000Z, ,"['882212','882214','882213','882215','882211']","['990548']", , ,3.926,2127.98 +5614.0,pick item,2019-08-21 18:13:20.000Z, ,"['881825']", , , ,0.78,99.99 +5615.0,pick item,2019-08-21 19:36:59.000Z, ,"['881844']", , , ,0.44,476.0 +5616.0,place order,2019-08-21 20:14:29.000Z, ,"['882216','882217']","['990549']", , ,1.865,2634.0 +5617.0,package delivered,2019-08-22 06:06:17.000Z, , , ,"['660311']", ,3.264,2211.98 +5618.0,place order,2019-08-22 06:20:33.000Z, ,"['882220','882222','882219','882221','882218']","['990550']", , ,3.378,3992.98 +5619.0,confirm order,2019-08-22 06:52:50.000Z, , ,"['990549']", , ,1.865,2634.0 +5620.0,package delivered,2019-08-22 06:53:06.000Z, , , ,"['660305']", ,4.493,2849.96 +5621.0,pick item,2019-08-22 06:54:41.000Z, ,"['882195']", , , ,0.44,476.0 +5622.0,create package,2019-08-22 06:54:41.000Z, ,"['882039','882045']", ,"['660322']", ,0.72,565.99 +5623.0,reorder item,2019-08-22 07:04:53.000Z, ,"['882107']", , , ,1.37,2500.0 +5624.0,item out of stock,2019-08-22 07:05:58.000Z, ,"['882044']", , , ,0.483,79.99 +5625.0,confirm order,2019-08-22 07:09:01.000Z, , ,"['990547']", , ,2.2030000000000003,710.98 +5626.0,pick item,2019-08-22 07:12:11.000Z, ,"['881710']", , , ,0.188,1149.0 +5627.0,pay order,2019-08-22 07:48:06.000Z, , ,"['990427']", , ,0.354,1953.0 +5628.0,pick item,2019-08-22 07:52:32.000Z, ,"['882215']", , , ,1.28,149.99 +5629.0,create package,2019-08-22 07:52:32.000Z, ,"['881819','882215','882144','882143','882029']", ,"['660323']", ,2.246,3006.98 +5630.0,item out of stock,2019-08-22 07:53:55.000Z, ,"['882220']", , , ,0.88,89.99 +5631.0,pick item,2019-08-22 08:14:58.000Z, ,"['882208']", , , ,1.28,149.99 +5632.0,place order,2019-08-22 08:20:37.000Z, ,"['882223']","['990551']", , ,0.483,1104.0 +5633.0,pick item,2019-08-22 08:25:14.000Z, ,"['882221']", , , ,0.78,99.99 +5634.0,confirm order,2019-08-22 08:25:15.000Z, , ,"['990548']", , ,3.926,2127.98 +5635.0,pick item,2019-08-22 08:26:43.000Z, ,"['882166']", , , ,0.38,29.99 +5636.0,item out of stock,2019-08-22 08:45:35.000Z, ,"['882207']", , , ,0.166,799.0 +5637.0,pick item,2019-08-22 08:49:03.000Z, ,"['882146']", , , ,1.28,149.99 +5638.0,pick item,2019-08-22 08:56:35.000Z, ,"['882074']", , , ,0.495,129.0 +5639.0,create package,2019-08-22 08:56:35.000Z, ,"['882080','882079','882060','882059','881101','881720']", ,"['660324']", ,4.158,2376.97 +5640.0,pay order,2019-08-22 09:05:05.000Z, , ,"['990520']", , ,0.3720000000000001,743.99 +5641.0,confirm order,2019-08-22 09:06:27.000Z, , ,"['990546']", , ,1.511,3260.98 +5642.0,pick item,2019-08-22 09:10:28.000Z, ,"['882206']", , , ,0.2,39.99 +5643.0,pick item,2019-08-22 09:16:38.000Z, ,"['882101']", , , ,0.188,1149.0 +5644.0,pay order,2019-08-22 09:26:28.000Z, , ,"['990470']", , ,4.225,2923.98 +5645.0,pick item,2019-08-22 09:30:53.000Z, ,"['882167']", , , ,0.483,495.0 +5646.0,pick item,2019-08-22 09:35:49.000Z, ,"['882213']", , , ,1.48,199.99 +5647.0,send package,2019-08-22 09:39:22.000Z, , , ,"['660316']", ,2.806,3937.98 +5648.0,confirm order,2019-08-22 09:54:24.000Z, , ,"['990539']", , ,2.233,3633.99 +5649.0,item out of stock,2019-08-22 09:56:04.000Z, ,"['882189']", , , ,0.78,99.99 +5650.0,confirm order,2019-08-22 10:00:52.000Z, , ,"['990551']", , ,0.483,1104.0 +5651.0,place order,2019-08-22 10:01:01.000Z, ,"['882224','882225','882226']","['990552']", , ,2.643,1343.98 +5652.0,pick item,2019-08-22 10:03:50.000Z, ,"['882223']", , , ,0.483,1099.0 +5653.0,pick item,2019-08-22 10:22:57.000Z, ,"['882164']", , , ,1.48,199.99 +5654.0,create package,2019-08-22 10:22:57.000Z, ,"['881906','882128','881858','882130','881095']", ,"['660325']", ,2.194,2995.99 +5655.0,pick item,2019-08-22 10:37:45.000Z, ,"['882178']", , , ,0.2,39.99 +5656.0,pick item,2019-08-22 11:11:17.000Z, ,"['882219']", , , ,1.25,2200.0 +5657.0,confirm order,2019-08-22 11:20:22.000Z, , ,"['990550']", , ,3.378,3992.98 +5658.0,place order,2019-08-22 11:21:49.000Z, ,"['882227','882228']","['990553']", , ,0.468,1603.0 +5659.0,reorder item,2019-08-22 11:37:42.000Z, ,"['881994']", , , ,0.483,79.99 +5660.0,payment reminder,2019-08-22 11:38:29.000Z, , ,"['990434']", , ,2.698,1254.99 +5661.0,reorder item,2019-08-22 11:45:37.000Z, ,"['882189']", , , ,0.78,99.99 +5662.0,pick item,2019-08-22 12:00:12.000Z, ,"['882102']", , , ,0.2,39.99 +5663.0,pick item,2019-08-22 12:06:34.000Z, ,"['882098']", , , ,0.483,1099.0 +5664.0,pick item,2019-08-22 12:23:33.000Z, ,"['882041']", , , ,0.21,529.0 +5665.0,create package,2019-08-22 12:23:33.000Z, ,"['881850','882208','881976','882219','882221']", ,"['660326']", ,4.685,2668.97 +5666.0,payment reminder,2019-08-22 12:23:55.000Z, , ,"['990437']", , ,0.38,34.99 +5667.0,pick item,2019-08-22 12:28:17.000Z, ,"['881998']", , , ,0.98,129.99 +5668.0,pick item,2019-08-22 12:44:41.000Z, ,"['882228']", , , ,0.188,1149.0 +5669.0,pay order,2019-08-22 12:56:49.000Z, , ,"['990527']", , ,0.398,1683.0 +5670.0,send package,2019-08-22 13:02:28.000Z, , , ,"['660325']", ,2.194,2995.99 +5671.0,place order,2019-08-22 13:03:26.000Z, ,"['882231','882235','882229','882234','882236','882232','882230','882233']","['990554']", , ,6.42,2072.95 +5672.0,item out of stock,2019-08-22 13:07:01.000Z, ,"['882176']", , , ,1.28,149.99 +5673.0,package delivered,2019-08-22 13:12:31.000Z, , , ,"['660317']", ,2.643,734.98 +5674.0,pick item,2019-08-22 13:36:35.000Z, ,"['882123']", , , ,0.28,89.99 +5675.0,pay order,2019-08-22 13:46:31.000Z, , ,"['990550']", , ,3.378,3992.98 +5676.0,confirm order,2019-08-22 13:49:18.000Z, , ,"['990512']", , ,4.2780000000000005,6111.99 +5677.0,pick item,2019-08-22 13:56:15.000Z, ,"['882183']", , , ,0.483,495.0 +5678.0,reorder item,2019-08-22 14:04:23.000Z, ,"['882194']", , , ,1.48,199.99 +5679.0,send package,2019-08-22 14:04:47.000Z, , , ,"['660321']", ,2.2430000000000003,1388.98 +5680.0,failed delivery,2019-08-22 14:16:24.000Z, , , ,"['660315']", ,2.226,1048.98 +5681.0,failed delivery,2019-08-22 14:18:40.000Z, , , ,"['660320']", ,8.517999999999999,4248.93 +5682.0,reorder item,2019-08-22 14:19:40.000Z, ,"['882109']", , , ,0.483,1099.0 +5683.0,place order,2019-08-22 14:26:39.000Z, ,"['882242','882241','882240','882238','882237','882239','882243']","['990555']", , ,4.263999999999999,3921.97 +5684.0,reorder item,2019-08-22 14:33:39.000Z, ,"['882017']", , , ,0.98,129.99 +5685.0,item out of stock,2019-08-22 14:38:44.000Z, ,"['882078']", , , ,0.483,79.99 +5686.0,pick item,2019-08-22 14:42:12.000Z, ,"['882242']", , , ,0.495,129.0 +5687.0,create package,2019-08-22 14:42:12.000Z, ,"['882242','882153','881998','882151']", ,"['660327']", ,3.011,3557.99 +5688.0,pay order,2019-08-22 14:42:40.000Z, , ,"['990347']", , ,2.269,1580.98 +5689.0,item out of stock,2019-08-22 14:43:47.000Z, ,"['882154']", , , ,1.48,199.99 +5690.0,pick item,2019-08-22 14:52:42.000Z, ,"['882088']", , , ,0.28,449.0 +5691.0,pick item,2019-08-22 14:57:58.000Z, ,"['882137']", , , ,0.78,99.99 +5692.0,package delivered,2019-08-22 14:59:14.000Z, , , ,"['660319']", ,1.942,3784.98 +5693.0,pick item,2019-08-22 15:04:16.000Z, ,"['882158']", , , ,1.28,149.99 +5694.0,item out of stock,2019-08-22 15:06:48.000Z, ,"['882152']", , , ,0.38,29.99 +5695.0,send package,2019-08-22 15:14:24.000Z, , , ,"['660322']", ,0.72,565.99 +5696.0,pay order,2019-08-22 15:15:41.000Z, , ,"['990480']", , ,1.263,184.98 +5697.0,pay order,2019-08-22 15:31:53.000Z, , ,"['990541']", , ,1.981,2731.98 +5698.0,pick item,2019-08-22 15:36:21.000Z, ,"['882182']", , , ,0.2,39.99 +5699.0,create package,2019-08-22 15:36:21.000Z, ,"['881980','882228','881710','882193','882195']", ,"['660328']", ,1.536,3339.99 +5700.0,confirm order,2019-08-22 15:36:59.000Z, , ,"['990537']", , ,4.973,3922.97 +5701.0,pay order,2019-08-22 15:37:46.000Z, , ,"['990383']", , ,1.426,1382.99 +5702.0,item out of stock,2019-08-22 15:40:55.000Z, ,"['882132']", , , ,0.172,699.0 +5703.0,reorder item,2019-08-22 15:51:28.000Z, ,"['882126']", , , ,0.483,79.99 +5704.0,package delivered,2019-08-22 15:51:55.000Z, , , ,"['660309']", ,2.013,2193.99 +5705.0,pick item,2019-08-22 16:05:46.000Z, ,"['882169']", , , ,0.78,99.99 +5706.0,place order,2019-08-22 16:13:06.000Z, ,"['882248','882246','882247','882245','882244','882249']","['990556']", , ,2.127,2012.96 +5707.0,pick item,2019-08-22 16:22:03.000Z, ,"['882147']", , , ,1.37,2500.0 +5708.0,package delivered,2019-08-22 16:24:50.000Z, , , ,"['660322']", ,0.72,565.99 +5709.0,reorder item,2019-08-22 17:09:12.000Z, ,"['882076']", , , ,1.48,199.99 +5710.0,confirm order,2019-08-22 17:13:27.000Z, , ,"['990553']", , ,0.468,1603.0 +5711.0,send package,2019-08-22 17:30:00.000Z, , , ,"['660313']", ,3.26,5215.99 +5712.0,place order,2019-08-22 18:18:52.000Z, ,"['882250','882251']","['990557']", , ,0.966,1183.99 +5713.0,reorder item,2019-08-22 19:22:29.000Z, ,"['882172']", , , ,0.28,89.99 +5714.0,item out of stock,2019-08-22 19:43:16.000Z, ,"['882235']", , , ,0.44,476.0 +5715.0,send package,2019-08-22 20:13:35.000Z, , , ,"['660318']", ,4.39,2906.95 +5716.0,place order,2019-08-22 21:17:19.000Z, ,"['882253','882254','882252','882255','882257','882256']","['990558']", , ,3.3110000000000004,2150.98 +5717.0,create package,2019-08-22 23:00:00.000Z, ,"['881930','882169','882133','882170','882223','882171']", ,"['660329']", ,3.069,2147.96 +5718.0,reorder item,2019-08-23 06:24:31.000Z, ,"['881865']", , , ,0.38,29.99 +5719.0,failed delivery,2019-08-23 06:46:22.000Z, , , ,"['660325']", ,2.194,2995.99 +5720.0,pick item,2019-08-23 06:48:24.000Z, ,"['882257']", , , ,0.495,129.0 +5721.0,pick item,2019-08-23 06:49:01.000Z, ,"['882025']", , , ,0.98,129.99 +5722.0,package delivered,2019-08-23 06:53:27.000Z, , , ,"['660315']", ,2.226,1048.98 +5723.0,place order,2019-08-23 07:12:22.000Z, ,"['882258','882259']","['990559']", , ,0.763,533.99 +5724.0,pick item,2019-08-23 07:12:51.000Z, ,"['882203']", , , ,0.483,1099.0 +5725.0,pick item,2019-08-23 07:19:51.000Z, ,"['882254']", , , ,0.166,799.0 +5726.0,pick item,2019-08-23 07:25:54.000Z, ,"['882225']", , , ,0.483,1099.0 +5727.0,pick item,2019-08-23 07:31:28.000Z, ,"['882233']", , , ,0.44,476.0 +5728.0,pick item,2019-08-23 07:52:26.000Z, ,"['881884']", , , ,0.483,79.99 +5729.0,pick item,2019-08-23 07:56:43.000Z, ,"['882161']", , , ,0.483,79.99 +5730.0,pick item,2019-08-23 08:04:18.000Z, ,"['882001']", , , ,0.483,79.99 +5731.0,create package,2019-08-23 08:04:18.000Z, ,"['882158','882155','882156','882178','882157']", ,"['660330']", ,3.653,3360.98 +5732.0,failed delivery,2019-08-23 08:09:55.000Z, , , ,"['660318']", ,4.39,2906.95 +5733.0,pick item,2019-08-23 08:11:11.000Z, ,"['882005']", , , ,0.98,129.99 +5734.0,pay order,2019-08-23 08:16:33.000Z, , ,"['990438']", , ,4.289,5181.98 +5735.0,reorder item,2019-08-23 08:18:48.000Z, ,"['882207']", , , ,0.166,799.0 +5736.0,pick item,2019-08-23 08:29:58.000Z, ,"['882214']", , , ,0.188,1149.0 +5737.0,package delivered,2019-08-23 08:39:39.000Z, , , ,"['660318']", ,4.39,2906.95 +5738.0,place order,2019-08-23 08:44:31.000Z, ,"['882261','882260']","['990560']", , ,0.763,1553.0 +5739.0,send package,2019-08-23 08:53:39.000Z, , , ,"['660324']", ,4.158,2376.97 +5740.0,pick item,2019-08-23 08:56:16.000Z, ,"['882106']", , , ,0.172,699.0 +5741.0,pick item,2019-08-23 09:00:22.000Z, ,"['881630']", , , ,0.495,129.0 +5742.0,confirm order,2019-08-23 09:03:04.000Z, , ,"['990555']", , ,4.263999999999999,3921.97 +5743.0,reorder item,2019-08-23 09:05:45.000Z, ,"['882154']", , , ,1.48,199.99 +5744.0,failed delivery,2019-08-23 09:17:19.000Z, , , ,"['660314']", ,2.942,2442.97 +5745.0,confirm order,2019-08-23 09:21:02.000Z, , ,"['990554']", , ,6.42,2072.95 +5746.0,confirm order,2019-08-23 09:22:29.000Z, , ,"['990538']", , ,0.2,44.99 +5747.0,pick item,2019-08-23 09:23:14.000Z, ,"['882192']", , , ,0.98,129.99 +5748.0,create package,2019-08-23 09:23:14.000Z, ,"['882142','882137','882138','881825','881636']", ,"['660331']", ,3.89,2529.96 +5749.0,pay order,2019-08-23 09:51:09.000Z, , ,"['990475']", , ,2.85,2704.99 +5750.0,pick item,2019-08-23 10:13:55.000Z, ,"['882216']", , , ,1.37,2500.0 +5751.0,confirm order,2019-08-23 10:21:38.000Z, , ,"['990560']", , ,0.763,1553.0 +5752.0,pick item,2019-08-23 10:45:48.000Z, ,"['882227']", , , ,0.28,449.0 +5753.0,place order,2019-08-23 10:48:50.000Z, ,"['882263','882266','882262','882267','882265','882264','882268']","['990561']", , ,3.87,5551.99 +5754.0,reorder item,2019-08-23 10:57:29.000Z, ,"['882181']", , , ,0.483,1099.0 +5755.0,reorder item,2019-08-23 11:45:43.000Z, ,"['882044']", , , ,0.483,79.99 +5756.0,pick item,2019-08-23 11:49:13.000Z, ,"['882264']", , , ,0.21,529.0 +5757.0,item out of stock,2019-08-23 11:54:08.000Z, ,"['882136']", , , ,1.48,199.99 +5758.0,pick item,2019-08-23 11:57:05.000Z, ,"['882261']", , , ,0.28,449.0 +5759.0,pick item,2019-08-23 12:03:47.000Z, ,"['882126']", , , ,0.483,79.99 +5760.0,create package,2019-08-23 12:03:47.000Z, ,"['882086','882088','882048','882084']", ,"['660332']", ,2.425,3167.99 +5761.0,pick item,2019-08-23 12:20:13.000Z, ,"['882162']", , , ,0.38,29.99 +5762.0,pick item,2019-08-23 12:27:53.000Z, ,"['882000']", , , ,0.483,495.0 +5763.0,item out of stock,2019-08-23 12:33:29.000Z, ,"['882263']", , , ,0.483,495.0 +5764.0,place order,2019-08-23 12:57:27.000Z, ,"['882269']","['990562']", , ,0.483,500.0 +5765.0,item out of stock,2019-08-23 13:03:23.000Z, ,"['882246']", , , ,0.28,89.99 +5766.0,failed delivery,2019-08-23 13:05:55.000Z, , , ,"['660314']", ,2.942,2442.97 +5767.0,reorder item,2019-08-23 13:12:46.000Z, ,"['882134']", , , ,0.483,1099.0 +5768.0,reorder item,2019-08-23 13:19:28.000Z, ,"['882053']", , , ,1.48,199.99 +5769.0,reorder item,2019-08-23 13:28:28.000Z, ,"['882152']", , , ,0.38,29.99 +5770.0,pick item,2019-08-23 13:37:02.000Z, ,"['882204']", , , ,0.21,529.0 +5771.0,pick item,2019-08-23 13:44:18.000Z, ,"['881994']", , , ,0.483,79.99 +5772.0,create package,2019-08-23 13:44:18.000Z, ,"['882166','882254','882168','882167','882257','880959']", ,"['660333']", ,2.887,1622.97 +5773.0,pick item,2019-08-23 13:46:40.000Z, ,"['882266']", , , ,1.37,2500.0 +5774.0,pick item,2019-08-23 13:57:41.000Z, ,"['881869']", , , ,0.21,529.0 +5775.0,pick item,2019-08-23 14:01:15.000Z, ,"['882240']", , , ,0.483,79.99 +5776.0,pick item,2019-08-23 14:05:29.000Z, ,"['881744']", , , ,1.28,149.99 +5777.0,pick item,2019-08-23 14:13:43.000Z, ,"['881421']", , , ,0.78,99.99 +5778.0,pick item,2019-08-23 14:23:33.000Z, ,"['882230']", , , ,0.44,476.0 +5779.0,create package,2019-08-23 14:23:33.000Z, ,"['882147','882000','882001','882145','882146','882186']", ,"['660334']", ,4.4910000000000005,3383.97 +5780.0,confirm order,2019-08-23 14:28:31.000Z, , ,"['990552']", , ,2.643,1343.98 +5781.0,pick item,2019-08-23 14:31:38.000Z, ,"['882054']", , , ,0.38,29.99 +5782.0,send package,2019-08-23 15:08:08.000Z, , , ,"['660332']", ,2.425,3167.99 +5783.0,place order,2019-08-23 15:14:41.000Z, ,"['882271','882270','882272']","['990563']", , ,0.86,1539.0 +5784.0,pick item,2019-08-23 15:17:05.000Z, ,"['882135']", , , ,0.483,495.0 +5785.0,pick item,2019-08-23 15:19:19.000Z, ,"['882067']", , , ,0.495,129.0 +5786.0,pay order,2019-08-23 15:21:46.000Z, , ,"['990539']", , ,2.233,3633.99 +5787.0,package delivered,2019-08-23 15:27:57.000Z, , , ,"['660321']", ,2.2430000000000003,1388.98 +5788.0,pick item,2019-08-23 15:40:26.000Z, ,"['882174']", , , ,0.188,1149.0 +5789.0,failed delivery,2019-08-23 15:48:03.000Z, , , ,"['660324']", ,4.158,2376.97 +5790.0,pay order,2019-08-23 15:50:54.000Z, , ,"['990524']", , ,0.649,1903.0 +5791.0,pick item,2019-08-23 15:51:54.000Z, ,"['882260']", , , ,0.483,1099.0 +5792.0,pick item,2019-08-23 16:00:34.000Z, ,"['881943']", , , ,1.28,149.99 +5793.0,create package,2019-08-23 16:00:34.000Z, ,"['882191','882106','881892']", ,"['660335']", ,1.824,1597.99 +5794.0,pick item,2019-08-23 16:17:33.000Z, ,"['882070']", , , ,1.28,149.99 +5795.0,place order,2019-08-23 16:49:10.000Z, ,"['882273','882276','882278','882277','882274','882275']","['990564']", , ,3.573,4967.99 +5796.0,pay order,2019-08-23 16:57:22.000Z, , ,"['990429']", , ,0.44,481.0 +5797.0,pick item,2019-08-23 17:28:39.000Z, ,"['882259']", , , ,0.483,79.99 +5798.0,send package,2019-08-23 17:37:26.000Z, , , ,"['660328']", ,1.536,3339.99 +5799.0,package delivered,2019-08-23 18:15:35.000Z, , , ,"['660325']", ,2.194,2995.99 +5800.0,pick item,2019-08-23 19:03:39.000Z, ,"['881856']", , , ,0.495,129.0 +5801.0,create package,2019-08-23 19:03:39.000Z, ,"['882123','882161','882164','882101','882202','882204','882200','882203','882102','882197','882206','882201','882174','882162','882116','882175']", ,"['660336']", ,7.8610000000000015,5734.89 +5802.0,send package,2019-08-23 19:31:51.000Z, , , ,"['660334']", ,4.4910000000000005,3383.97 +5803.0,place order,2019-08-23 20:07:05.000Z, ,"['882281','882279','882283','882280','882282']","['990565']", , ,3.09,3173.97 +5804.0,place order,2019-08-24 13:42:24.000Z, ,"['882287','882284','882288','882285','882286']","['990566']", , ,3.299,1861.98 +5805.0,payment reminder,2019-08-25 09:28:06.000Z, , ,"['990319']", , ,2.129,1498.99 +5806.0,payment reminder,2019-08-25 10:32:55.000Z, , ,"['990336']", , ,1.3630000000000002,589.99 +5807.0,place order,2019-08-25 14:18:42.000Z, ,"['882294','882290','882291','882293','882289','882292']","['990567']", , ,3.114,2417.97 +5808.0,payment reminder,2019-08-25 14:59:31.000Z, , ,"['990449']", , ,1.068,1243.99 +5809.0,payment reminder,2019-08-25 19:45:21.000Z, , ,"['990448']", , ,2.053,3783.0 +5810.0,package delivered,2019-08-26 06:10:10.000Z, , , ,"['660314']", ,2.942,2442.97 +5811.0,item out of stock,2019-08-26 06:18:12.000Z, ,"['882245']", , , ,0.483,79.99 +5812.0,place order,2019-08-26 06:24:49.000Z, ,"['882295','882297','882298','882296']","['990568']", , ,4.182,3253.98 +5813.0,item out of stock,2019-08-26 06:36:42.000Z, ,"['882222']", , , ,0.188,1149.0 +5814.0,pick item,2019-08-26 06:53:35.000Z, ,"['882250']", , , ,0.483,1099.0 +5815.0,pick item,2019-08-26 07:12:47.000Z, ,"['882286']", , , ,0.172,699.0 +5816.0,reorder item,2019-08-26 07:30:11.000Z, ,"['882021']", , , ,1.37,2500.0 +5817.0,pick item,2019-08-26 07:31:17.000Z, ,"['882294']", , , ,0.2,39.99 +5818.0,confirm order,2019-08-26 07:37:55.000Z, , ,"['990565']", , ,3.09,3173.97 +5819.0,confirm order,2019-08-26 07:39:02.000Z, , ,"['990563']", , ,0.86,1539.0 +5820.0,reorder item,2019-08-26 07:48:48.000Z, ,"['882049']", , , ,1.28,149.99 +5821.0,send package,2019-08-26 07:55:44.000Z, , , ,"['660330']", ,3.653,3360.98 +5822.0,confirm order,2019-08-26 08:00:01.000Z, , ,"['990567']", , ,3.114,2417.97 +5823.0,failed delivery,2019-08-26 08:00:48.000Z, , , ,"['660324']", ,4.158,2376.97 +5824.0,pick item,2019-08-26 08:11:14.000Z, ,"['882131']", , , ,0.483,79.99 +5825.0,pick item,2019-08-26 08:14:16.000Z, ,"['882236']", , , ,0.98,129.99 +5826.0,item out of stock,2019-08-26 08:18:55.000Z, ,"['882288']", , , ,0.98,129.99 +5827.0,place order,2019-08-26 08:27:01.000Z, ,"['882299','882300','882301']","['990569']", , ,3.333,2784.98 +5828.0,pick item,2019-08-26 08:33:27.000Z, ,"['882289']", , , ,0.28,449.0 +5829.0,pick item,2019-08-26 08:46:08.000Z, ,"['882141']", , , ,1.25,2200.0 +5830.0,pick item,2019-08-26 09:29:05.000Z, ,"['882199']", , , ,0.78,99.99 +5831.0,reorder item,2019-08-26 09:36:25.000Z, ,"['882245']", , , ,0.483,79.99 +5832.0,pick item,2019-08-26 09:39:56.000Z, ,"['882255']", , , ,0.88,89.99 +5833.0,pick item,2019-08-26 09:40:24.000Z, ,"['882117']", , , ,0.44,476.0 +5834.0,pick item,2019-08-26 09:57:37.000Z, ,"['882205']", , , ,0.172,699.0 +5835.0,package delivered,2019-08-26 10:00:17.000Z, , , ,"['660313']", ,3.26,5215.99 +5836.0,pick item,2019-08-26 10:05:59.000Z, ,"['882187']", , , ,0.172,699.0 +5837.0,place order,2019-08-26 10:13:49.000Z, ,"['882303','882302']","['990570']", , ,0.446,1253.0 +5838.0,pick item,2019-08-26 10:14:35.000Z, ,"['882237']", , , ,0.166,799.0 +5839.0,send package,2019-08-26 10:15:25.000Z, , , ,"['660323']", ,2.246,3006.98 +5840.0,pick item,2019-08-26 10:19:32.000Z, ,"['882256']", , , ,1.28,149.99 +5841.0,pick item,2019-08-26 10:31:50.000Z, ,"['882226']", , , ,0.88,89.99 +5842.0,pick item,2019-08-26 10:37:51.000Z, ,"['882285']", , , ,1.48,199.99 +5843.0,create package,2019-08-26 10:37:51.000Z, ,"['882182','881844','882125','882183','882098','882126']", ,"['660337']", ,2.369,2279.97 +5844.0,pick item,2019-08-26 10:55:28.000Z, ,"['882272']", , , ,0.21,529.0 +5845.0,pick item,2019-08-26 11:06:24.000Z, ,"['882127']", , , ,0.495,129.0 +5846.0,confirm order,2019-08-26 11:08:48.000Z, , ,"['990564']", , ,3.573,4967.99 +5847.0,pick item,2019-08-26 11:14:29.000Z, ,"['882262']", , , ,0.483,495.0 +5848.0,place order,2019-08-26 11:47:26.000Z, ,"['882305','882308','882304','882307','882306']","['990571']", , ,2.009,1972.99 +5849.0,package delivered,2019-08-26 11:59:18.000Z, , , ,"['660328']", ,1.536,3339.99 +5850.0,pay order,2019-08-26 12:00:44.000Z, , ,"['990477']", , ,2.403,2946.99 +5851.0,send package,2019-08-26 12:15:00.000Z, , , ,"['660336']", ,7.8610000000000015,5734.89 +5852.0,pick item,2019-08-26 12:20:07.000Z, ,"['882271']", , , ,0.44,476.0 +5853.0,failed delivery,2019-08-26 12:29:48.000Z, , , ,"['660316']", ,2.806,3937.98 +5854.0,pick item,2019-08-26 12:57:40.000Z, ,"['882211']", , , ,0.495,129.0 +5855.0,pick item,2019-08-26 13:00:09.000Z, ,"['881574']", , , ,0.172,699.0 +5856.0,create package,2019-08-26 13:00:09.000Z, ,"['881574','882041','882070','882294','882135','882074','882289']", ,"['660338']", ,3.12,2490.98 +5857.0,pick item,2019-08-26 13:11:15.000Z, ,"['882244']", , , ,0.483,79.99 +5858.0,pick item,2019-08-26 13:22:05.000Z, ,"['882278']", , , ,0.44,476.0 +5859.0,send package,2019-08-26 13:28:24.000Z, , , ,"['660327']", ,3.011,3557.99 +5860.0,send package,2019-08-26 13:44:55.000Z, , , ,"['660335']", ,1.824,1597.99 +5861.0,package delivered,2019-08-26 13:52:00.000Z, , , ,"['660324']", ,4.158,2376.97 +5862.0,payment reminder,2019-08-26 13:54:16.000Z, , ,"['990340']", , ,3.06,3233.99 +5863.0,place order,2019-08-26 13:54:39.000Z, ,"['882312','882315','882314','882310','882311','882313','882309']","['990572']", , ,4.13,2651.96 +5864.0,item out of stock,2019-08-26 13:54:48.000Z, ,"['882212']", , , ,0.483,495.0 +5865.0,pick item,2019-08-26 14:11:11.000Z, ,"['882265']", , , ,0.172,699.0 +5866.0,pick item,2019-08-26 14:11:17.000Z, ,"['882096']", , , ,0.172,699.0 +5867.0,pick item,2019-08-26 14:13:57.000Z, ,"['881654']", , , ,0.483,79.99 +5868.0,item out of stock,2019-08-26 14:19:10.000Z, ,"['882258']", , , ,0.28,449.0 +5869.0,payment reminder,2019-08-26 14:30:23.000Z, , ,"['990454']", , ,2.531,2482.98 +5870.0,confirm order,2019-08-26 14:39:33.000Z, , ,"['990556']", , ,2.127,2012.96 +5871.0,pay order,2019-08-26 14:49:55.000Z, , ,"['990536']", , ,2.04,224.97 +5872.0,pick item,2019-08-26 14:51:46.000Z, ,"['882062']", , , ,1.28,149.99 +5873.0,package delivered,2019-08-26 14:55:49.000Z, , , ,"['660334']", ,4.4910000000000005,3383.97 +5874.0,pay order,2019-08-26 14:58:14.000Z, , ,"['990448']", , ,2.053,3783.0 +5875.0,pick item,2019-08-26 14:58:52.000Z, ,"['882282']", , , ,0.28,89.99 +5876.0,create package,2019-08-26 14:58:52.000Z, ,"['881421','881869','882213','882005','882211','882214','881884','882025']", ,"['660339']", ,5.596,2446.95 +5877.0,package delivered,2019-08-26 15:07:54.000Z, , , ,"['660320']", ,8.517999999999999,4248.93 +5878.0,send package,2019-08-26 15:14:13.000Z, , , ,"['660331']", ,3.89,2529.96 +5879.0,send package,2019-08-26 15:15:19.000Z, , , ,"['660337']", ,2.369,2279.97 +5880.0,confirm order,2019-08-26 15:40:24.000Z, , ,"['990545']", , ,0.483,84.99 +5881.0,place order,2019-08-26 16:09:05.000Z, ,"['882321','882318','882319','882320','882317','882316']","['990573']", , ,4.359,4581.98 +5882.0,pick item,2019-08-26 16:12:47.000Z, ,"['881846']", , , ,0.38,29.99 +5883.0,confirm order,2019-08-26 17:49:04.000Z, , ,"['990572']", , ,4.13,2651.96 +5884.0,place order,2019-08-26 18:06:50.000Z, ,"['882322','882324','882323']","['990574']", , ,2.95,5534.0 +5885.0,pick item,2019-08-26 19:23:28.000Z, ,"['882234']", , , ,0.98,129.99 +5886.0,confirm order,2019-08-26 19:33:11.000Z, , ,"['990544']", , ,3.059,4232.98 +5887.0,pick item,2019-08-26 20:03:57.000Z, ,"['882190']", , , ,0.166,799.0 +5888.0,pick item,2019-08-26 20:28:27.000Z, ,"['882129']", , , ,0.2,39.99 +5889.0,place order,2019-08-26 20:53:15.000Z, ,"['882325','882329','882328','882327','882326']","['990575']", , ,3.781,3653.97 +5890.0,pick item,2019-08-27 06:28:34.000Z, ,"['881467']", , , ,0.166,799.0 +5891.0,pick item,2019-08-27 06:55:28.000Z, ,"['882326']", , , ,0.98,129.99 +5892.0,item out of stock,2019-08-27 06:57:38.000Z, ,"['882302']", , , ,0.28,449.0 +5893.0,pay order,2019-08-27 07:10:01.000Z, , ,"['990551']", , ,0.483,1104.0 +5894.0,send package,2019-08-27 07:12:50.000Z, , , ,"['660326']", ,4.685,2668.97 +5895.0,package delivered,2019-08-27 07:15:58.000Z, , , ,"['660326']", ,4.685,2668.97 +5896.0,pick item,2019-08-27 07:26:54.000Z, ,"['882149']", , , ,0.495,129.0 +5897.0,pick item,2019-08-27 07:27:23.000Z, ,"['882299']", , , ,0.483,79.99 +5898.0,create package,2019-08-27 07:27:23.000Z, ,"['882127','882225','882129','882271','882131','882226','882272']", ,"['660340']", ,3.1910000000000003,2442.97 +5899.0,send package,2019-08-27 07:28:05.000Z, , , ,"['660329']", ,3.069,2147.96 +5900.0,pick item,2019-08-27 07:33:00.000Z, ,"['882198']", , , ,0.483,1099.0 +5901.0,place order,2019-08-27 07:38:05.000Z, ,"['882330','882331']","['990576']", , ,0.655,1803.0 +5902.0,reorder item,2019-08-27 07:42:56.000Z, ,"['882263']", , , ,0.483,495.0 +5903.0,package delivered,2019-08-27 08:00:11.000Z, , , ,"['660336']", ,7.8610000000000015,5734.89 +5904.0,pick item,2019-08-27 08:03:45.000Z, ,"['882218']", , , ,0.28,449.0 +5905.0,pick item,2019-08-27 08:08:48.000Z, ,"['882179']", , , ,0.38,29.99 +5906.0,pick item,2019-08-27 08:17:47.000Z, ,"['881346']", , , ,0.78,99.99 +5907.0,pick item,2019-08-27 08:28:34.000Z, ,"['882229']", , , ,0.38,29.99 +5908.0,pay order,2019-08-27 08:31:36.000Z, , ,"['990567']", , ,3.114,2417.97 +5909.0,pick item,2019-08-27 08:32:29.000Z, ,"['882316']", , , ,0.78,99.99 +5910.0,pick item,2019-08-27 08:38:32.000Z, ,"['882305']", , , ,0.28,449.0 +5911.0,create package,2019-08-27 08:38:32.000Z, ,"['882227','882234','881994','882067','882192','881467','882236','882233','882062','882299','882229','882230']", ,"['660341']", ,7.387,3058.93 +5912.0,confirm order,2019-08-27 08:41:54.000Z, , ,"['990573']", , ,4.359,4581.98 +5913.0,confirm order,2019-08-27 08:42:25.000Z, , ,"['990570']", , ,0.446,1253.0 +5914.0,confirm order,2019-08-27 08:45:09.000Z, , ,"['990575']", , ,3.781,3653.97 +5915.0,pick item,2019-08-27 08:56:10.000Z, ,"['882210']", , , ,0.483,79.99 +5916.0,package delivered,2019-08-27 09:01:51.000Z, , , ,"['660329']", ,3.069,2147.96 +5917.0,reorder item,2019-08-27 09:05:14.000Z, ,"['882288']", , , ,0.98,129.99 +5918.0,package delivered,2019-08-27 09:06:06.000Z, , , ,"['660332']", ,2.425,3167.99 +5919.0,pick item,2019-08-27 09:11:15.000Z, ,"['882304']", , , ,0.483,79.99 +5920.0,send package,2019-08-27 09:11:21.000Z, , , ,"['660339']", ,5.596,2446.95 +5921.0,pick item,2019-08-27 09:23:42.000Z, ,"['882319']", , , ,0.166,799.0 +5922.0,place order,2019-08-27 09:35:57.000Z, ,"['882333','882332']","['990577']", , ,0.966,995.0 +5923.0,reorder item,2019-08-27 09:50:38.000Z, ,"['882235']", , , ,0.44,476.0 +5924.0,send package,2019-08-27 09:54:11.000Z, , , ,"['660338']", ,3.12,2490.98 +5925.0,pick item,2019-08-27 09:57:43.000Z, ,"['882293']", , , ,0.188,1149.0 +5926.0,pick item,2019-08-27 10:00:35.000Z, ,"['882329']", , , ,0.88,89.99 +5927.0,send package,2019-08-27 10:03:39.000Z, , , ,"['660341']", ,7.387,3058.93 +5928.0,package delivered,2019-08-27 10:06:18.000Z, , , ,"['660337']", ,2.369,2279.97 +5929.0,item out of stock,2019-08-27 10:07:30.000Z, ,"['882269']", , , ,0.483,495.0 +5930.0,pick item,2019-08-27 10:12:04.000Z, ,"['882028']", , , ,0.98,129.99 +5931.0,pick item,2019-08-27 10:19:17.000Z, ,"['882321']", , , ,0.188,1149.0 +5932.0,pick item,2019-08-27 10:27:51.000Z, ,"['882232']", , , ,1.48,199.99 +5933.0,pick item,2019-08-27 10:31:29.000Z, ,"['881992']", , , ,1.48,199.99 +5934.0,reorder item,2019-08-27 10:32:36.000Z, ,"['882132']", , , ,0.172,699.0 +5935.0,pick item,2019-08-27 10:34:46.000Z, ,"['882134']", , , ,0.483,1099.0 +5936.0,pick item,2019-08-27 11:08:22.000Z, ,"['882279']", , , ,1.37,2500.0 +5937.0,pay order,2019-08-27 11:16:22.000Z, , ,"['990535']", , ,2.523,719.97 +5938.0,confirm order,2019-08-27 11:21:53.000Z, , ,"['990576']", , ,0.655,1803.0 +5939.0,place order,2019-08-27 11:31:42.000Z, ,"['882337','882336','882334','882335','882338']","['990578']", , ,4.256,5378.99 +5940.0,pick item,2019-08-27 12:09:43.000Z, ,"['882307']", , , ,0.28,449.0 +5941.0,create package,2019-08-27 12:09:43.000Z, ,"['881630','882250','882259']", ,"['660342']", ,1.461,1307.99 +5942.0,pay order,2019-08-27 12:18:49.000Z, , ,"['990533']", , ,3.823,514.96 +5943.0,item out of stock,2019-08-27 12:19:05.000Z, ,"['882296']", , , ,0.172,699.0 +5944.0,pay order,2019-08-27 12:19:39.000Z, , ,"['990380']", , ,1.222,1861.98 +5945.0,confirm order,2019-08-27 12:20:57.000Z, , ,"['990574']", , ,2.95,5534.0 +5946.0,package delivered,2019-08-27 12:21:17.000Z, , , ,"['660341']", ,7.387,3058.93 +5947.0,payment reminder,2019-08-27 12:35:32.000Z, , ,"['990460']", , ,3.13,2784.97 +5948.0,package delivered,2019-08-27 12:46:33.000Z, , , ,"['660323']", ,2.246,3006.98 +5949.0,send package,2019-08-27 12:59:54.000Z, , , ,"['660333']", ,2.887,1622.97 +5950.0,pick item,2019-08-27 13:01:00.000Z, ,"['882336']", , , ,1.37,2500.0 +5951.0,pick item,2019-08-27 13:05:19.000Z, ,"['882333']", , , ,0.483,495.0 +5952.0,confirm order,2019-08-27 13:16:01.000Z, , ,"['990578']", , ,4.256,5378.99 +5953.0,pick item,2019-08-27 13:16:19.000Z, ,"['881952']", , , ,1.48,199.99 +5954.0,create package,2019-08-27 13:16:19.000Z, ,"['881856','882216','882333','882240','882237','881744']", ,"['660343']", ,4.277,4152.98 +5955.0,send package,2019-08-27 13:18:13.000Z, , , ,"['660340']", ,3.1910000000000003,2442.97 +5956.0,pick item,2019-08-27 13:21:03.000Z, ,"['882224']", , , ,1.28,149.99 +5957.0,place order,2019-08-27 13:23:11.000Z, ,"['882339','882343','882342','882340','882344','882341']","['990579']", , ,3.265,3831.98 +5958.0,pay order,2019-08-27 13:30:04.000Z, , ,"['990556']", , ,2.127,2012.96 +5959.0,reorder item,2019-08-27 13:38:36.000Z, ,"['882220']", , , ,0.88,89.99 +5960.0,pick item,2019-08-27 13:39:06.000Z, ,"['882160']", , , ,1.48,199.99 +5961.0,pay order,2019-08-27 13:43:48.000Z, , ,"['990460']", , ,3.13,2784.97 +5962.0,confirm order,2019-08-27 13:47:29.000Z, , ,"['990517']", , ,3.777,8031.0 +5963.0,reorder item,2019-08-27 13:49:23.000Z, ,"['882119']", , , ,0.28,89.99 +5964.0,pick item,2019-08-27 13:51:36.000Z, ,"['882177']", , , ,1.25,2200.0 +5965.0,reorder item,2019-08-27 13:52:29.000Z, ,"['882120']", , , ,0.21,529.0 +5966.0,pick item,2019-08-27 14:02:27.000Z, ,"['882317']", , , ,0.495,129.0 +5967.0,pick item,2019-08-27 14:05:30.000Z, ,"['882301']", , , ,1.48,199.99 +5968.0,pick item,2019-08-27 14:10:37.000Z, ,"['882239']", , , ,1.28,149.99 +5969.0,create package,2019-08-27 14:10:37.000Z, ,"['882266','882265','882262','882134','882264','881952','882244']", ,"['660344']", ,4.681,5601.98 +5970.0,pick item,2019-08-27 14:12:04.000Z, ,"['882273']", , , ,0.21,529.0 +5971.0,item out of stock,2019-08-27 14:12:43.000Z, ,"['882015']", , , ,0.483,1099.0 +5972.0,pay order,2019-08-27 14:20:08.000Z, , ,"['990461']", , ,1.776,4852.0 +5973.0,pick item,2019-08-27 14:22:30.000Z, ,"['882238']", , , ,0.21,529.0 +5974.0,pick item,2019-08-27 14:35:12.000Z, ,"['882344']", , , ,1.37,2500.0 +5975.0,reorder item,2019-08-27 14:49:01.000Z, ,"['882104']", , , ,0.2,39.99 +5976.0,package delivered,2019-08-27 14:53:13.000Z, , , ,"['660340']", ,3.1910000000000003,2442.97 +5977.0,pick item,2019-08-27 14:55:31.000Z, ,"['882095']", , , ,1.37,2500.0 +5978.0,place order,2019-08-27 15:06:09.000Z, ,"['882347','882348','882346','882350','882345','882349']","['990580']", , ,2.506,2015.97 +5979.0,package delivered,2019-08-27 15:07:16.000Z, , , ,"['660330']", ,3.653,3360.98 +5980.0,confirm order,2019-08-27 15:09:35.000Z, , ,"['990566']", , ,3.299,1861.98 +5981.0,reorder item,2019-08-27 15:25:35.000Z, ,"['882136']", , , ,1.48,199.99 +5982.0,pay order,2019-08-27 15:32:29.000Z, , ,"['990512']", , ,4.2780000000000005,6111.99 +5983.0,item out of stock,2019-08-27 15:37:00.000Z, ,"['882335']", , , ,1.48,199.99 +5984.0,pick item,2019-08-27 15:43:29.000Z, ,"['882274']", , , ,0.483,1099.0 +5985.0,package delivered,2019-08-27 15:57:43.000Z, , , ,"['660331']", ,3.89,2529.96 +5986.0,place order,2019-08-27 16:32:06.000Z, ,"['882351','882352']","['990581']", , ,0.923,976.0 +5987.0,pick item,2019-08-27 17:46:53.000Z, ,"['882313']", , , ,0.172,699.0 +5988.0,item out of stock,2019-08-27 17:51:21.000Z, ,"['882267']", , , ,0.98,129.99 +5989.0,item out of stock,2019-08-27 18:19:31.000Z, ,"['882334']", , , ,0.44,476.0 +5990.0,place order,2019-08-27 19:15:53.000Z, ,"['882353','882357','882354','882355','882356','882358']","['990582']", , ,1.567,2379.99 +5991.0,pay order,2019-08-27 19:41:22.000Z, , ,"['990565']", , ,3.09,3173.97 +5992.0,create package,2019-08-27 23:00:00.000Z, ,"['881846','882261','882260','882218','881654','882210']", ,"['660345']", ,2.389,2186.97 +5993.0,place order,2019-08-28 01:53:12.000Z, ,"['882362','882360','882363','882365','882359','882364','882361']","['990583']", , ,3.117,2140.97 +5994.0,pick item,2019-08-28 07:30:01.000Z, ,"['882339']", , , ,0.21,529.0 +5995.0,confirm order,2019-08-28 07:42:50.000Z, , ,"['990577']", , ,0.966,995.0 +5996.0,reorder item,2019-08-28 07:49:28.000Z, ,"['882015']", , , ,0.483,1099.0 +5997.0,send package,2019-08-28 07:50:28.000Z, , , ,"['660344']", ,4.681,5601.98 +5998.0,pick item,2019-08-28 07:54:02.000Z, ,"['882277']", , , ,1.25,2200.0 +5999.0,reorder item,2019-08-28 08:01:46.000Z, ,"['882078']", , , ,0.483,79.99 +6000.0,pay order,2019-08-28 08:04:27.000Z, , ,"['990444']", , ,4.4110000000000005,2742.96 +6001.0,place order,2019-08-28 08:18:18.000Z, ,"['882370','882367','882369','882368','882366']","['990584']", , ,2.684,5037.99 +6002.0,pick item,2019-08-28 08:22:28.000Z, ,"['882284']", , , ,0.172,699.0 +6003.0,item out of stock,2019-08-28 08:30:22.000Z, ,"['882320']", , , ,1.25,2200.0 +6004.0,confirm order,2019-08-28 08:35:39.000Z, , ,"['990584']", , ,2.684,5037.99 +6005.0,reorder item,2019-08-28 08:42:44.000Z, ,"['882296']", , , ,0.172,699.0 +6006.0,pick item,2019-08-28 09:02:03.000Z, ,"['881908']", , , ,1.37,2500.0 +6007.0,pick item,2019-08-28 09:09:42.000Z, ,"['882359']", , , ,0.28,449.0 +6008.0,send package,2019-08-28 09:27:34.000Z, , , ,"['660345']", ,2.389,2186.97 +6009.0,pick item,2019-08-28 09:31:10.000Z, ,"['882337']", , , ,0.483,1099.0 +6010.0,package delivered,2019-08-28 09:39:36.000Z, , , ,"['660316']", ,2.806,3937.98 +6011.0,place order,2019-08-28 09:56:24.000Z, ,"['882373','882371','882372']","['990585']", , ,1.046,1756.0 +6012.0,pick item,2019-08-28 09:59:22.000Z, ,"['882367']", , , ,1.25,2200.0 +6013.0,create package,2019-08-28 09:59:22.000Z, ,"['882054']", ,"['660346']", ,0.38,29.99 +6014.0,confirm order,2019-08-28 10:07:44.000Z, , ,"['990558']", , ,3.3110000000000004,2150.98 +6015.0,item out of stock,2019-08-28 10:48:50.000Z, ,"['882362']", , , ,0.2,39.99 +6016.0,pay order,2019-08-28 10:52:28.000Z, , ,"['990563']", , ,0.86,1539.0 +6017.0,payment reminder,2019-08-28 11:33:27.000Z, , ,"['990458']", , ,4.6560000000000015,4682.97 +6018.0,send package,2019-08-28 11:49:13.000Z, , , ,"['660346']", ,0.38,29.99 +6019.0,reorder item,2019-08-28 11:59:12.000Z, ,"['882334']", , , ,0.44,476.0 +6020.0,pay order,2019-08-28 12:03:40.000Z, , ,"['990454']", , ,2.531,2482.98 +6021.0,confirm order,2019-08-28 12:04:32.000Z, , ,"['990580']", , ,2.506,2015.97 +6022.0,place order,2019-08-28 12:12:35.000Z, ,"['882376','882378','882374','882377','882375','882379']","['990586']", , ,3.84,1472.96 +6023.0,item out of stock,2019-08-28 12:35:31.000Z, ,"['882324']", , , ,0.21,529.0 +6024.0,pick item,2019-08-28 12:49:27.000Z, ,"['881946']", , , ,0.166,799.0 +6025.0,create package,2019-08-28 12:49:27.000Z, ,"['882190','882187','881943']", ,"['660347']", ,1.618,1647.99 +6026.0,pay order,2019-08-28 12:52:41.000Z, , ,"['990306']", , ,1.354,1768.98 +6027.0,package delivered,2019-08-28 13:01:20.000Z, , , ,"['660345']", ,2.389,2186.97 +6028.0,pick item,2019-08-28 13:17:18.000Z, ,"['882270']", , , ,0.21,529.0 +6029.0,pick item,2019-08-28 13:28:54.000Z, ,"['882044']", , , ,0.483,79.99 +6030.0,pick item,2019-08-28 13:30:47.000Z, ,"['882330']", , , ,0.483,1099.0 +6031.0,create package,2019-08-28 13:30:47.000Z, ,"['882284','882285','882286']", ,"['660348']", ,1.824,1597.99 +6032.0,pick item,2019-08-28 13:34:02.000Z, ,"['882209']", , , ,0.44,476.0 +6033.0,pay order,2019-08-28 13:35:37.000Z, , ,"['990580']", , ,2.506,2015.97 +6034.0,confirm order,2019-08-28 13:37:03.000Z, , ,"['990585']", , ,1.046,1756.0 +6035.0,send package,2019-08-28 13:39:27.000Z, , , ,"['660348']", ,1.824,1597.99 +6036.0,pick item,2019-08-28 13:40:20.000Z, ,"['882115']", , , ,0.2,39.99 +6037.0,pick item,2019-08-28 13:41:53.000Z, ,"['882355']", , , ,0.21,529.0 +6038.0,create package,2019-08-28 13:41:53.000Z, ,"['882329','882141','882326','882149']", ,"['660349']", ,3.605,2548.98 +6039.0,place order,2019-08-28 13:44:58.000Z, ,"['882383','882382','882380','882381']","['990587']", , ,2.716,3524.99 +6040.0,pick item,2019-08-28 13:51:06.000Z, ,"['882314']", , , ,1.28,149.99 +6041.0,pick item,2019-08-28 13:54:44.000Z, ,"['882231']", , , ,1.28,149.99 +6042.0,reorder item,2019-08-28 14:07:04.000Z, ,"['882362']", , , ,0.2,39.99 +6043.0,pick item,2019-08-28 14:09:06.000Z, ,"['882374']", , , ,0.21,529.0 +6044.0,pick item,2019-08-28 14:18:55.000Z, ,"['882292']", , , ,0.483,79.99 +6045.0,create package,2019-08-28 14:18:55.000Z, ,"['882160','882117','882317','882316','882321','882199','882205','882179','882319','882177','882198']", ,"['660350']", ,6.614,6980.96 +6046.0,item out of stock,2019-08-28 14:24:51.000Z, ,"['882290']", , , ,1.48,199.99 +6047.0,pay order,2019-08-28 14:34:02.000Z, , ,"['990575']", , ,3.781,3653.97 +6048.0,item out of stock,2019-08-28 14:38:38.000Z, ,"['882375']", , , ,0.38,29.99 +6049.0,confirm order,2019-08-28 14:54:48.000Z, , ,"['990571']", , ,2.009,1972.99 +6050.0,pick item,2019-08-28 14:58:05.000Z, ,"['881761']", , , ,1.37,2500.0 +6051.0,item out of stock,2019-08-28 15:01:05.000Z, ,"['882346']", , , ,0.28,89.99 +6052.0,pay order,2019-08-28 15:15:21.000Z, , ,"['990528']", , ,4.425,2933.98 +6053.0,package delivered,2019-08-28 15:17:01.000Z, , , ,"['660327']", ,3.011,3557.99 +6054.0,pick item,2019-08-28 15:32:13.000Z, ,"['882348']", , , ,0.44,476.0 +6055.0,pick item,2019-08-28 15:47:19.000Z, ,"['882377']", , , ,0.98,129.99 +6056.0,place order,2019-08-28 15:49:43.000Z, ,"['882384','882385','882388','882386','882387']","['990588']", , ,4.4030000000000005,614.95 +6057.0,item out of stock,2019-08-28 15:57:29.000Z, ,"['882341']", , , ,0.78,99.99 +6058.0,item out of stock,2019-08-28 16:02:22.000Z, ,"['882380']", , , ,0.38,29.99 +6059.0,package delivered,2019-08-28 17:22:53.000Z, , , ,"['660346']", ,0.38,29.99 +6060.0,package delivered,2019-08-28 17:50:57.000Z, , , ,"['660338']", ,3.12,2490.98 +6061.0,place order,2019-08-28 18:08:44.000Z, ,"['882391','882392','882394','882393','882395','882389','882390']","['990589']", , ,4.135,6417.98 +6062.0,send package,2019-08-28 20:04:21.000Z, , , ,"['660343']", ,4.277,4152.98 +6063.0,place order,2019-08-28 20:57:03.000Z, ,"['882396','882397']","['990590']", , ,0.546,833.99 +6064.0,failed delivery,2019-08-29 06:10:36.000Z, , , ,"['660343']", ,4.277,4152.98 +6065.0,package delivered,2019-08-29 06:10:36.000Z, , , ,"['660343']", ,4.277,4152.98 +6066.0,item out of stock,2019-08-29 06:46:35.000Z, ,"['882383']", , , ,0.483,495.0 +6067.0,pay order,2019-08-29 07:07:05.000Z, , ,"['990424']", , ,5.938,5962.98 +6068.0,pay order,2019-08-29 07:21:54.000Z, , ,"['990513']", , ,0.662,1322.99 +6069.0,pick item,2019-08-29 07:33:43.000Z, ,"['882276']", , , ,0.98,129.99 +6070.0,pay order,2019-08-29 07:40:45.000Z, , ,"['990458']", , ,4.6560000000000015,4682.97 +6071.0,pick item,2019-08-29 07:42:28.000Z, ,"['882154']", , , ,1.48,199.99 +6072.0,place order,2019-08-29 07:45:40.000Z, ,"['882399','882402','882401','882400','882398']","['990591']", , ,1.766,2271.98 +6073.0,package delivered,2019-08-29 07:51:46.000Z, , , ,"['660335']", ,1.824,1597.99 +6074.0,pick item,2019-08-29 07:51:48.000Z, ,"['882312']", , , ,0.166,799.0 +6075.0,pick item,2019-08-29 07:56:15.000Z, ,"['882368']", , , ,0.28,89.99 +6076.0,send package,2019-08-29 07:57:32.000Z, , , ,"['660347']", ,1.618,1647.99 +6077.0,send package,2019-08-29 08:01:29.000Z, , , ,"['660342']", ,1.461,1307.99 +6078.0,pick item,2019-08-29 08:02:18.000Z, ,"['882194']", , , ,1.48,199.99 +6079.0,send package,2019-08-29 08:07:54.000Z, , , ,"['660349']", ,3.605,2548.98 +6080.0,confirm order,2019-08-29 08:30:24.000Z, , ,"['990559']", , ,0.763,533.99 +6081.0,pick item,2019-08-29 08:39:46.000Z, ,"['882287']", , , ,0.495,129.0 +6082.0,pick item,2019-08-29 08:44:42.000Z, ,"['882357']", , , ,0.28,449.0 +6083.0,reorder item,2019-08-29 08:50:26.000Z, ,"['882380']", , , ,0.38,29.99 +6084.0,pick item,2019-08-29 08:57:09.000Z, ,"['882353']", , , ,0.495,129.0 +6085.0,create package,2019-08-29 08:57:09.000Z, ,"['882353','882278','882355','882274','882273','882255','882277','882276','882256','882357']", ,"['660351']", ,6.507999999999999,5780.97 +6086.0,reorder item,2019-08-29 09:04:14.000Z, ,"['882290']", , , ,1.48,199.99 +6087.0,item out of stock,2019-08-29 09:24:12.000Z, ,"['882370']", , , ,0.483,495.0 +6088.0,pick item,2019-08-29 09:24:14.000Z, ,"['882107']", , , ,1.37,2500.0 +6089.0,place order,2019-08-29 09:51:08.000Z, ,"['882404','882403']","['990592']", , ,1.16,134.98 +6090.0,pay order,2019-08-29 09:57:42.000Z, , ,"['990336']", , ,1.3630000000000002,589.99 +6091.0,pick item,2019-08-29 09:58:34.000Z, ,"['882303']", , , ,0.166,799.0 +6092.0,pick item,2019-08-29 10:09:25.000Z, ,"['882247']", , , ,0.483,79.99 +6093.0,item out of stock,2019-08-29 10:16:27.000Z, ,"['882253']", , , ,0.21,529.0 +6094.0,item out of stock,2019-08-29 10:17:08.000Z, ,"['882300']", , , ,1.37,2500.0 +6095.0,item out of stock,2019-08-29 10:29:02.000Z, ,"['882387']", , , ,0.483,79.99 +6096.0,pay order,2019-08-29 10:29:05.000Z, , ,"['990544']", , ,3.059,4232.98 +6097.0,confirm order,2019-08-29 10:39:12.000Z, , ,"['990583']", , ,3.117,2140.97 +6098.0,pick item,2019-08-29 10:41:20.000Z, ,"['882392']", , , ,0.2,39.99 +6099.0,pick item,2019-08-29 10:48:57.000Z, ,"['882297']", , , ,1.25,2200.0 +6100.0,pay order,2019-08-29 10:56:36.000Z, , ,"['990329']", , ,4.001,1702.96 +6101.0,confirm order,2019-08-29 11:05:01.000Z, , ,"['990587']", , ,2.716,3524.99 +6102.0,pick item,2019-08-29 11:06:39.000Z, ,"['882318']", , , ,1.48,199.99 +6103.0,pick item,2019-08-29 11:11:52.000Z, ,"['881928']", , , ,0.188,1149.0 +6104.0,pick item,2019-08-29 11:20:12.000Z, ,"['882394']", , , ,0.28,449.0 +6105.0,pick item,2019-08-29 11:27:26.000Z, ,"['882252']", , , ,0.28,449.0 +6106.0,reorder item,2019-08-29 11:52:18.000Z, ,"['882269']", , , ,0.483,495.0 +6107.0,pay order,2019-08-29 11:57:36.000Z, , ,"['990370']", , ,3.705,3022.98 +6108.0,place order,2019-08-29 12:02:03.000Z, ,"['882406','882405']","['990593']", , ,1.375,223.99 +6109.0,pick item,2019-08-29 12:18:01.000Z, ,"['882327']", , , ,1.25,2200.0 +6110.0,create package,2019-08-29 12:18:01.000Z, ,"['882096','882282','882367','882279','882368','882313','882314','882312','882095']", ,"['660352']", ,6.34,9726.97 +6111.0,pick item,2019-08-29 12:28:05.000Z, ,"['881942']", , , ,0.188,1149.0 +6112.0,pick item,2019-08-29 12:51:56.000Z, ,"['882188']", , , ,0.483,1099.0 +6113.0,reorder item,2019-08-29 13:00:18.000Z, ,"['882370']", , , ,0.483,495.0 +6114.0,pick item,2019-08-29 13:02:09.000Z, ,"['882099']", , , ,0.98,129.99 +6115.0,pick item,2019-08-29 13:05:11.000Z, ,"['882104']", , , ,0.2,39.99 +6116.0,confirm order,2019-08-29 13:08:53.000Z, , ,"['990592']", , ,1.16,134.98 +6117.0,pick item,2019-08-29 13:09:58.000Z, ,"['881606']", , , ,0.2,39.99 +6118.0,package delivered,2019-08-29 13:12:22.000Z, , , ,"['660339']", ,5.596,2446.95 +6119.0,confirm order,2019-08-29 13:14:30.000Z, , ,"['990591']", , ,1.766,2271.98 +6120.0,pick item,2019-08-29 13:21:10.000Z, ,"['882119']", , , ,0.28,89.99 +6121.0,place order,2019-08-29 13:23:54.000Z, ,"['882408','882407','882409']","['990594']", , ,2.173,2760.99 +6122.0,pay order,2019-08-29 13:25:30.000Z, , ,"['990414']", , ,3.874,7052.99 +6123.0,pay order,2019-08-29 13:28:54.000Z, , ,"['990497']", , ,0.966,2203.0 +6124.0,reorder item,2019-08-29 13:32:00.000Z, ,"['882258']", , , ,0.28,449.0 +6125.0,confirm order,2019-08-29 13:37:50.000Z, , ,"['990568']", , ,4.182,3253.98 +6126.0,package delivered,2019-08-29 13:38:24.000Z, , , ,"['660349']", ,3.605,2548.98 +6127.0,pick item,2019-08-29 13:42:03.000Z, ,"['882360']", , , ,0.172,699.0 +6128.0,pick item,2019-08-29 13:43:05.000Z, ,"['882378']", , , ,1.28,149.99 +6129.0,failed delivery,2019-08-29 13:45:54.000Z, , , ,"['660333']", ,2.887,1622.97 +6130.0,pay order,2019-08-29 13:46:21.000Z, , ,"['990554']", , ,6.42,2072.95 +6131.0,pick item,2019-08-29 14:00:07.000Z, ,"['881865']", , , ,0.38,29.99 +6132.0,create package,2019-08-29 14:00:07.000Z, ,"['882224','882270','881346']", ,"['660353']", ,2.27,778.98 +6133.0,pay order,2019-08-29 14:06:49.000Z, , ,"['990532']", , ,3.4530000000000003,3325.99 +6134.0,confirm order,2019-08-29 14:15:04.000Z, , ,"['990589']", , ,4.135,6417.98 +6135.0,reorder item,2019-08-29 14:27:01.000Z, ,"['882081']", , , ,0.98,129.99 +6136.0,item out of stock,2019-08-29 14:29:55.000Z, ,"['882022']", , , ,0.483,495.0 +6137.0,confirm order,2019-08-29 14:44:01.000Z, , ,"['990586']", , ,3.84,1472.96 +6138.0,pick item,2019-08-29 14:49:26.000Z, ,"['882398']", , , ,0.21,529.0 +6139.0,package delivered,2019-08-29 15:01:12.000Z, , , ,"['660347']", ,1.618,1647.99 +6140.0,pick item,2019-08-29 15:05:24.000Z, ,"['882196']", , , ,1.25,2200.0 +6141.0,place order,2019-08-29 15:07:35.000Z, ,"['882411','882412','882410','882414','882415','882413']","['990595']", , ,3.737,7181.99 +6142.0,pick item,2019-08-29 15:19:19.000Z, ,"['882180']", , , ,1.37,2500.0 +6143.0,create package,2019-08-29 15:19:19.000Z, ,"['882305','882297','882028','882344','882304','882307','882339']", ,"['660354']", ,4.853,6336.98 +6144.0,pick item,2019-08-29 15:33:10.000Z, ,"['882291']", , , ,0.483,495.0 +6145.0,confirm order,2019-08-29 15:49:36.000Z, , ,"['990579']", , ,3.265,3831.98 +6146.0,pick item,2019-08-29 15:49:50.000Z, ,"['882334']", , , ,0.44,476.0 +6147.0,send package,2019-08-29 15:51:52.000Z, , , ,"['660350']", ,6.614,6980.96 +6148.0,pick item,2019-08-29 15:54:29.000Z, ,"['882159']", , , ,1.48,199.99 +6149.0,confirm order,2019-08-29 15:55:08.000Z, , ,"['990569']", , ,3.333,2784.98 +6150.0,package delivered,2019-08-29 16:16:26.000Z, , , ,"['660344']", ,4.681,5601.98 +6151.0,reorder item,2019-08-29 16:19:44.000Z, ,"['882383']", , , ,0.483,495.0 +6152.0,pay order,2019-08-29 16:23:37.000Z, , ,"['990496']", , ,1.805,2106.99 +6153.0,place order,2019-08-29 16:34:57.000Z, ,"['882417','882418','882416','882419']","['990596']", , ,2.321,4238.99 +6154.0,pick item,2019-08-29 16:38:13.000Z, ,"['882408']", , , ,1.25,2200.0 +6155.0,send package,2019-08-29 17:40:40.000Z, , , ,"['660353']", ,2.27,778.98 +6156.0,confirm order,2019-08-29 18:24:51.000Z, , ,"['990596']", , ,2.321,4238.99 +6157.0,package delivered,2019-08-29 18:47:33.000Z, , , ,"['660348']", ,1.824,1597.99 +6158.0,place order,2019-08-29 19:24:26.000Z, ,"['882421','882420']","['990597']", , ,0.82,510.99 +6159.0,pick item,2019-08-29 19:29:24.000Z, ,"['882388']", , , ,0.88,89.99 +6160.0,pay order,2019-08-29 19:29:59.000Z, , ,"['990530']", , ,0.188,1154.0 +6161.0,place order,2019-08-30 02:44:30.000Z, ,"['882425','882424','882422','882423']","['990598']", , ,3.623,1473.97 +6162.0,pick item,2019-08-30 06:26:46.000Z, ,"['882405']", , , ,0.495,129.0 +6163.0,item out of stock,2019-08-30 07:00:42.000Z, ,"['882352']", , , ,0.44,476.0 +6164.0,pick item,2019-08-30 07:15:47.000Z, ,"['881189']", , , ,1.37,2500.0 +6165.0,create package,2019-08-30 07:15:47.000Z, ,"['882115','882291','882293','882044','882292']", ,"['660355']", ,1.837,1843.97 +6166.0,pick item,2019-08-30 07:18:26.000Z, ,"['882281']", , , ,0.38,29.99 +6167.0,reorder item,2019-08-30 07:19:56.000Z, ,"['882222']", , , ,0.188,1149.0 +6168.0,pick item,2019-08-30 07:24:26.000Z, ,"['882412']", , , ,0.483,79.99 +6169.0,reorder item,2019-08-30 07:42:41.000Z, ,"['882335']", , , ,1.48,199.99 +6170.0,pick item,2019-08-30 07:42:47.000Z, ,"['882365']", , , ,1.48,199.99 +6171.0,pick item,2019-08-30 08:01:53.000Z, ,"['882391']", , , ,0.483,495.0 +6172.0,confirm order,2019-08-30 08:04:45.000Z, , ,"['990594']", , ,2.173,2760.99 +6173.0,pick item,2019-08-30 08:06:28.000Z, ,"['882376']", , , ,0.78,99.99 +6174.0,create package,2019-08-30 08:06:28.000Z, ,"['881992','882194','882334','882337','882232','881189','882336','882231','882301']", ,"['660356']", ,10.863,7524.95 +6175.0,place order,2019-08-30 08:14:45.000Z, ,"['882426','882427']","['990599']", , ,1.42,610.99 +6176.0,pick item,2019-08-30 08:19:17.000Z, ,"['882409']", , , ,0.44,476.0 +6177.0,pick item,2019-08-30 08:37:35.000Z, ,"['881257']", , , ,0.28,89.99 +6178.0,item out of stock,2019-08-30 08:38:50.000Z, ,"['882390']", , , ,0.38,29.99 +6179.0,pick item,2019-08-30 08:43:27.000Z, ,"['882419']", , , ,0.188,1149.0 +6180.0,reorder item,2019-08-30 08:49:49.000Z, ,"['882324']", , , ,0.21,529.0 +6181.0,package delivered,2019-08-30 08:58:40.000Z, , , ,"['660333']", ,2.887,1622.97 +6182.0,pick item,2019-08-30 09:07:20.000Z, ,"['882363']", , , ,0.21,529.0 +6183.0,pick item,2019-08-30 09:13:01.000Z, ,"['882425']", , , ,0.98,129.99 +6184.0,pick item,2019-08-30 09:13:26.000Z, ,"['882417']", , , ,0.483,495.0 +6185.0,send package,2019-08-30 09:16:55.000Z, , , ,"['660352']", ,6.34,9726.97 +6186.0,package delivered,2019-08-30 09:24:21.000Z, , , ,"['660353']", ,2.27,778.98 +6187.0,pick item,2019-08-30 09:32:41.000Z, ,"['882420']", , , ,0.38,29.99 +6188.0,confirm order,2019-08-30 09:36:14.000Z, , ,"['990597']", , ,0.82,510.99 +6189.0,send package,2019-08-30 09:38:05.000Z, , , ,"['660354']", ,4.853,6336.98 +6190.0,place order,2019-08-30 09:49:17.000Z, ,"['882429','882432','882431','882430','882428']","['990600']", , ,2.623,3293.97 +6191.0,item out of stock,2019-08-30 09:50:50.000Z, ,"['882413']", , , ,0.28,449.0 +6192.0,confirm order,2019-08-30 09:53:22.000Z, , ,"['990595']", , ,3.737,7181.99 +6193.0,pick item,2019-08-30 10:21:24.000Z, ,"['882243']", , , ,1.25,2200.0 +6194.0,item out of stock,2019-08-30 10:43:53.000Z, ,"['882345']", , , ,0.2,39.99 +6195.0,pay order,2019-08-30 11:11:59.000Z, , ,"['990494']", , ,1.28,154.99 +6196.0,reorder item,2019-08-30 11:43:36.000Z, ,"['882375']", , , ,0.38,29.99 +6197.0,place order,2019-08-30 11:58:21.000Z, ,"['882436','882435','882433','882434']","['990601']", , ,2.998,3952.99 +6198.0,send package,2019-08-30 12:15:46.000Z, , , ,"['660355']", ,1.837,1843.97 +6199.0,pick item,2019-08-30 12:26:23.000Z, ,"['882268']", , , ,0.172,699.0 +6200.0,create package,2019-08-30 12:26:23.000Z, ,"['881928','882392','882394','881946','882243','882391','882360','882365','882363','882154','882238','882359','882239']", ,"['660357']", ,7.6789999999999985,7887.96 +6201.0,item out of stock,2019-08-30 12:57:19.000Z, ,"['882400']", , , ,0.38,29.99 +6202.0,pick item,2019-08-30 13:03:43.000Z, ,"['882350']", , , ,0.44,476.0 +6203.0,confirm order,2019-08-30 13:04:53.000Z, , ,"['990598']", , ,3.623,1473.97 +6204.0,reorder item,2019-08-30 13:05:29.000Z, ,"['882320']", , , ,1.25,2200.0 +6205.0,pay order,2019-08-30 13:31:44.000Z, , ,"['990592']", , ,1.16,134.98 +6206.0,confirm order,2019-08-30 13:34:51.000Z, , ,"['990590']", , ,0.546,833.99 +6207.0,pick item,2019-08-30 13:44:24.000Z, ,"['882298']", , , ,1.28,149.99 +6208.0,failed delivery,2019-08-30 13:45:17.000Z, , , ,"['660355']", ,1.837,1843.97 +6209.0,pick item,2019-08-30 13:57:51.000Z, ,"['882263']", , , ,0.483,495.0 +6210.0,pay order,2019-08-30 14:07:45.000Z, , ,"['990505']", , ,2.8,760.97 +6211.0,place order,2019-08-30 14:16:30.000Z, ,"['882440','882438','882437','882439']","['990602']", , ,1.009,3751.0 +6212.0,pay order,2019-08-30 14:19:21.000Z, , ,"['990558']", , ,3.3110000000000004,2150.98 +6213.0,confirm order,2019-08-30 14:22:55.000Z, , ,"['990599']", , ,1.42,610.99 +6214.0,item out of stock,2019-08-30 14:38:17.000Z, ,"['882434']", , , ,0.28,449.0 +6215.0,confirm order,2019-08-30 14:40:13.000Z, , ,"['990581']", , ,0.923,976.0 +6216.0,pick item,2019-08-30 14:52:37.000Z, ,"['882342']", , , ,0.2,39.99 +6217.0,item out of stock,2019-08-30 14:56:24.000Z, ,"['882393']", , , ,1.37,2500.0 +6218.0,pick item,2019-08-30 15:08:26.000Z, ,"['882280']", , , ,0.28,449.0 +6219.0,pick item,2019-08-30 15:13:24.000Z, ,"['882354']", , , ,0.2,39.99 +6220.0,confirm order,2019-08-30 15:14:36.000Z, , ,"['990588']", , ,4.4030000000000005,614.95 +6221.0,reorder item,2019-08-30 15:38:31.000Z, ,"['882345']", , , ,0.2,39.99 +6222.0,place order,2019-08-30 15:52:47.000Z, ,"['882442','882444','882445','882441','882443']","['990603']", , ,2.146,1489.97 +6223.0,confirm order,2019-08-30 16:48:56.000Z, , ,"['990561']", , ,3.87,5551.99 +6224.0,pick item,2019-08-30 17:03:02.000Z, ,"['882395']", , , ,0.172,699.0 +6225.0,pick item,2019-08-30 17:37:14.000Z, ,"['882385']", , , ,0.28,89.99 +6226.0,place order,2019-08-30 18:17:56.000Z, ,"['882447','882446','882450','882448','882449']","['990604']", , ,2.5660000000000003,1839.97 +6227.0,place order,2019-08-30 21:15:27.000Z, ,"['882452','882451','882457','882455','882454','882453','882456']","['990605']", , ,5.14,4451.97 +6228.0,place order,2019-08-31 19:46:09.000Z, ,"['882459','882458']","['990606']", , ,0.64,520.99 +6229.0,payment reminder,2019-09-01 09:08:56.000Z, , ,"['990483']", , ,1.348,1692.99 +6230.0,place order,2019-09-01 20:20:06.000Z, ,"['882461','882460','882462']","['990607']", , ,1.858,1322.99 +6231.0,create package,2019-09-01 23:00:00.000Z, ,"['882405','881908']", ,"['660358']", ,1.865,2629.0 +6232.0,confirm order,2019-09-02 06:22:35.000Z, , ,"['990557']", , ,0.966,1183.99 +6233.0,package delivered,2019-09-02 06:35:46.000Z, , , ,"['660342']", ,1.461,1307.99 +6234.0,reorder item,2019-09-02 07:02:51.000Z, ,"['882390']", , , ,0.38,29.99 +6235.0,pick item,2019-09-02 07:04:45.000Z, ,"['882435']", , , ,1.25,2200.0 +6236.0,pick item,2019-09-02 07:07:13.000Z, ,"['882401']", , , ,0.483,1099.0 +6237.0,reorder item,2019-09-02 07:17:53.000Z, ,"['882302']", , , ,0.28,449.0 +6238.0,place order,2019-09-02 07:18:30.000Z, ,"['882466','882463','882464','882465']","['990608']", , ,2.01,4442.99 +6239.0,pay order,2019-09-02 07:20:48.000Z, , ,"['990559']", , ,0.763,533.99 +6240.0,pick item,2019-09-02 07:27:03.000Z, ,"['882460']", , , ,0.88,89.99 +6241.0,pick item,2019-09-02 07:32:18.000Z, ,"['882465']", , , ,0.28,89.99 +6242.0,pay order,2019-09-02 07:32:38.000Z, , ,"['990482']", , ,1.96,334.97 +6243.0,pay order,2019-09-02 07:44:14.000Z, , ,"['990388']", , ,5.544,2032.95 +6244.0,pick item,2019-09-02 07:48:42.000Z, ,"['882323']", , , ,1.37,2500.0 +6245.0,pay order,2019-09-02 07:54:50.000Z, , ,"['990483']", , ,1.348,1692.99 +6246.0,pick item,2019-09-02 07:55:14.000Z, ,"['882456']", , , ,1.25,2200.0 +6247.0,pick item,2019-09-02 07:59:45.000Z, ,"['882411']", , , ,0.188,1149.0 +6248.0,create package,2019-09-02 07:59:45.000Z, ,"['882330','881257','882348','882350','882401','882398']", ,"['660359']", ,2.336,3768.99 +6249.0,pick item,2019-09-02 08:00:06.000Z, ,"['882381']", , , ,1.37,2500.0 +6250.0,reorder item,2019-09-02 08:00:17.000Z, ,"['882176']", , , ,1.28,149.99 +6251.0,pick item,2019-09-02 08:18:30.000Z, ,"['882436']", , , ,0.188,1149.0 +6252.0,pick item,2019-09-02 08:21:07.000Z, ,"['882269']", , , ,0.483,495.0 +6253.0,item out of stock,2019-09-02 08:21:49.000Z, ,"['882410']", , , ,1.25,2200.0 +6254.0,pick item,2019-09-02 08:23:47.000Z, ,"['882172']", , , ,0.28,89.99 +6255.0,pick item,2019-09-02 08:34:04.000Z, ,"['882418']", , , ,1.37,2500.0 +6256.0,package delivered,2019-09-02 08:34:24.000Z, , , ,"['660352']", ,6.34,9726.97 +6257.0,send package,2019-09-02 08:36:24.000Z, , , ,"['660351']", ,6.507999999999999,5780.97 +6258.0,pick item,2019-09-02 08:37:59.000Z, ,"['882383']", , , ,0.483,495.0 +6259.0,create package,2019-09-02 08:37:59.000Z, ,"['882408','882409','882209']", ,"['660360']", ,2.13,3152.0 +6260.0,confirm order,2019-09-02 08:39:09.000Z, , ,"['990562']", , ,0.483,500.0 +6261.0,pick item,2019-09-02 08:43:00.000Z, ,"['882427']", , , ,0.44,476.0 +6262.0,pick item,2019-09-02 08:44:11.000Z, ,"['882442']", , , ,0.38,29.99 +6263.0,pay order,2019-09-02 08:46:02.000Z, , ,"['990506']", , ,3.9,973.96 +6264.0,pay order,2019-09-02 08:51:39.000Z, , ,"['990594']", , ,2.173,2760.99 +6265.0,pay order,2019-09-02 08:52:42.000Z, , ,"['990508']", , ,3.676,1463.98 +6266.0,place order,2019-09-02 08:56:47.000Z, ,"['882469','882468','882467']","['990609']", , ,2.7430000000000003,1403.98 +6267.0,pay order,2019-09-02 09:06:26.000Z, , ,"['990493']", , ,2.23,2334.99 +6268.0,pick item,2019-09-02 09:07:05.000Z, ,"['881404']", , , ,0.78,99.99 +6269.0,create package,2019-09-02 09:07:05.000Z, ,"['882376','882247','882263','882378','882374','882268','882377']", ,"['660361']", ,4.388,2182.96 +6270.0,pick item,2019-09-02 09:12:15.000Z, ,"['882364']", , , ,0.495,129.0 +6271.0,pick item,2019-09-02 09:15:09.000Z, ,"['882429']", , , ,0.28,89.99 +6272.0,pick item,2019-09-02 09:16:58.000Z, ,"['882423']", , , ,0.483,1099.0 +6273.0,pick item,2019-09-02 09:17:37.000Z, ,"['882441']", , , ,0.88,89.99 +6274.0,item out of stock,2019-09-02 09:18:31.000Z, ,"['882452']", , , ,0.88,89.99 +6275.0,item out of stock,2019-09-02 09:20:40.000Z, ,"['882251']", , , ,0.483,79.99 +6276.0,pick item,2019-09-02 09:26:45.000Z, ,"['882331']", , , ,0.172,699.0 +6277.0,payment reminder,2019-09-02 09:26:56.000Z, , ,"['990471']", , ,5.896,3437.91 +6278.0,confirm order,2019-09-02 09:35:27.000Z, , ,"['990605']", , ,5.14,4451.97 +6279.0,send package,2019-09-02 09:36:27.000Z, , , ,"['660356']", ,10.863,7524.95 +6280.0,reorder item,2019-09-02 09:37:55.000Z, ,"['882387']", , , ,0.483,79.99 +6281.0,reorder item,2019-09-02 09:38:27.000Z, ,"['882452']", , , ,0.88,89.99 +6282.0,pay order,2019-09-02 09:41:44.000Z, , ,"['990583']", , ,3.117,2140.97 +6283.0,pick item,2019-09-02 09:47:47.000Z, ,"['882407']", , , ,0.483,79.99 +6284.0,item out of stock,2019-09-02 09:48:16.000Z, ,"['882448']", , , ,0.28,89.99 +6285.0,reorder item,2019-09-02 10:12:38.000Z, ,"['882400']", , , ,0.38,29.99 +6286.0,pick item,2019-09-02 10:14:36.000Z, ,"['882241']", , , ,0.38,29.99 +6287.0,create package,2019-09-02 10:14:36.000Z, ,"['882429','881761']", ,"['660362']", ,1.65,2589.99 +6288.0,pay order,2019-09-02 10:15:11.000Z, , ,"['990472']", , ,1.37,2505.0 +6289.0,pick item,2019-09-02 10:16:44.000Z, ,"['882399']", , , ,0.21,529.0 +6290.0,item out of stock,2019-09-02 10:21:49.000Z, ,"['882328']", , , ,0.188,1149.0 +6291.0,pick item,2019-09-02 10:33:22.000Z, ,"['882445']", , , ,0.28,89.99 +6292.0,create package,2019-09-02 10:33:22.000Z, ,"['882287','882456','882107']", ,"['660363']", ,3.115,4829.0 +6293.0,confirm order,2019-09-02 10:35:01.000Z, , ,"['990608']", , ,2.01,4442.99 +6294.0,pick item,2019-09-02 10:48:05.000Z, ,"['882453']", , , ,0.483,1099.0 +6295.0,item out of stock,2019-09-02 10:56:24.000Z, ,"['882361']", , , ,0.28,89.99 +6296.0,pick item,2019-09-02 10:57:06.000Z, ,"['882358']", , , ,0.172,699.0 +6297.0,confirm order,2019-09-02 10:57:15.000Z, , ,"['990606']", , ,0.64,520.99 +6298.0,package delivered,2019-09-02 10:59:42.000Z, , , ,"['660350']", ,6.614,6980.96 +6299.0,pick item,2019-09-02 11:00:37.000Z, ,"['881841']", , , ,0.78,99.99 +6300.0,create package,2019-09-02 11:00:37.000Z, ,"['882252','882354','882303','882358']", ,"['660364']", ,0.818,1986.99 +6301.0,reorder item,2019-09-02 11:07:42.000Z, ,"['882300']", , , ,1.37,2500.0 +6302.0,place order,2019-09-02 11:13:21.000Z, ,"['882470','882474','882472','882473','882471']","['990610']", , ,2.822,4096.99 +6303.0,confirm order,2019-09-02 11:13:52.000Z, , ,"['990609']", , ,2.7430000000000003,1403.98 +6304.0,pick item,2019-09-02 11:23:19.000Z, ,"['882463']", , , ,0.188,1149.0 +6305.0,item out of stock,2019-09-02 11:41:22.000Z, ,"['882338']", , , ,0.483,1099.0 +6306.0,pay order,2019-09-02 11:44:48.000Z, , ,"['990578']", , ,4.256,5378.99 +6307.0,pick item,2019-09-02 11:46:58.000Z, ,"['882415']", , , ,0.166,799.0 +6308.0,send package,2019-09-02 11:51:47.000Z, , , ,"['660359']", ,2.336,3768.99 +6309.0,item out of stock,2019-09-02 12:09:19.000Z, ,"['882275']", , , ,0.21,529.0 +6310.0,pick item,2019-09-02 12:11:53.000Z, ,"['882426']", , , ,0.98,129.99 +6311.0,pick item,2019-09-02 12:15:10.000Z, ,"['882458']", , , ,0.44,476.0 +6312.0,create package,2019-09-02 12:15:10.000Z, ,"['882180','882318','882119','882104','881606','882196','882172','882159']", ,"['660365']", ,6.54,5359.94 +6313.0,send package,2019-09-02 12:34:20.000Z, , , ,"['660364']", ,0.818,1986.99 +6314.0,item out of stock,2019-09-02 12:34:54.000Z, ,"['882450']", , , ,0.44,476.0 +6315.0,pick item,2019-09-02 12:40:34.000Z, ,"['882248']", , , ,0.21,529.0 +6316.0,place order,2019-09-02 12:46:30.000Z, ,"['882476','882475']","['990611']", , ,1.09,623.99 +6317.0,send package,2019-09-02 12:49:12.000Z, , , ,"['660363']", ,3.115,4829.0 +6318.0,item out of stock,2019-09-02 12:51:32.000Z, ,"['882379']", , , ,0.21,529.0 +6319.0,item out of stock,2019-09-02 12:51:48.000Z, ,"['882295']", , , ,1.48,199.99 +6320.0,send package,2019-09-02 12:59:17.000Z, , , ,"['660361']", ,4.388,2182.96 +6321.0,item out of stock,2019-09-02 13:07:12.000Z, ,"['882422']", , , ,1.28,149.99 +6322.0,reorder item,2019-09-02 13:08:02.000Z, ,"['882341']", , , ,0.78,99.99 +6323.0,item out of stock,2019-09-02 13:09:01.000Z, ,"['882455']", , , ,0.495,129.0 +6324.0,reorder item,2019-09-02 13:12:45.000Z, ,"['882434']", , , ,0.28,449.0 +6325.0,send package,2019-09-02 13:13:48.000Z, , , ,"['660357']", ,7.6789999999999985,7887.96 +6326.0,pick item,2019-09-02 13:18:47.000Z, ,"['882440']", , , ,0.172,699.0 +6327.0,package delivered,2019-09-02 13:18:48.000Z, , , ,"['660351']", ,6.507999999999999,5780.97 +6328.0,pick item,2019-09-02 13:21:15.000Z, ,"['881631']", , , ,0.98,129.99 +6329.0,pay order,2019-09-02 13:22:23.000Z, , ,"['990581']", , ,0.923,976.0 +6330.0,item out of stock,2019-09-02 13:23:11.000Z, ,"['882349']", , , ,0.98,129.99 +6331.0,pick item,2019-09-02 13:26:01.000Z, ,"['882315']", , , ,0.78,99.99 +6332.0,pay order,2019-09-02 13:35:20.000Z, , ,"['990561']", , ,3.87,5551.99 +6333.0,package delivered,2019-09-02 13:36:58.000Z, , , ,"['660357']", ,7.6789999999999985,7887.96 +6334.0,pick item,2019-09-02 13:37:57.000Z, ,"['882371']", , , ,0.44,476.0 +6335.0,pick item,2019-09-02 13:54:14.000Z, ,"['882470']", , , ,1.48,199.99 +6336.0,reorder item,2019-09-02 14:13:36.000Z, ,"['882346']", , , ,0.28,89.99 +6337.0,failed delivery,2019-09-02 14:16:39.000Z, , , ,"['660364']", ,0.818,1986.99 +6338.0,pick item,2019-09-02 14:29:26.000Z, ,"['882430']", , , ,0.483,79.99 +6339.0,failed delivery,2019-09-02 14:34:42.000Z, , , ,"['660354']", ,4.853,6336.98 +6340.0,item out of stock,2019-09-02 14:35:03.000Z, ,"['882310']", , , ,0.172,699.0 +6341.0,send package,2019-09-02 14:41:33.000Z, , , ,"['660360']", ,2.13,3152.0 +6342.0,send package,2019-09-02 14:47:28.000Z, , , ,"['660358']", ,1.865,2629.0 +6343.0,confirm order,2019-09-02 14:47:48.000Z, , ,"['990582']", , ,1.567,2379.99 +6344.0,item out of stock,2019-09-02 14:49:54.000Z, ,"['882416']", , , ,0.28,89.99 +6345.0,place order,2019-09-02 14:52:47.000Z, ,"['882479','882478','882477']","['990612']", , ,3.103,5804.0 +6346.0,confirm order,2019-09-02 14:53:27.000Z, , ,"['990612']", , ,3.103,5804.0 +6347.0,reorder item,2019-09-02 14:56:20.000Z, ,"['882246']", , , ,0.28,89.99 +6348.0,reorder item,2019-09-02 15:10:10.000Z, ,"['882251']", , , ,0.483,79.99 +6349.0,pick item,2019-09-02 15:19:32.000Z, ,"['882373']", , , ,0.44,476.0 +6350.0,create package,2019-09-02 15:19:32.000Z, ,"['882417','882418','882327','881631','882419']", ,"['660366']", ,4.271,6473.99 +6351.0,package delivered,2019-09-02 15:20:08.000Z, , , ,"['660356']", ,10.863,7524.95 +6352.0,pay order,2019-09-02 15:24:51.000Z, , ,"['990557']", , ,0.966,1183.99 +6353.0,pick item,2019-09-02 15:32:58.000Z, ,"['882386']", , , ,1.28,149.99 +6354.0,pick item,2019-09-02 15:35:46.000Z, ,"['882467']", , , ,0.78,99.99 +6355.0,pick item,2019-09-02 15:36:41.000Z, ,"['882466']", , , ,0.172,699.0 +6356.0,reorder item,2019-09-02 15:39:09.000Z, ,"['882212']", , , ,0.483,495.0 +6357.0,pick item,2019-09-02 15:47:14.000Z, ,"['882403']", , , ,0.38,29.99 +6358.0,pick item,2019-09-02 15:55:51.000Z, ,"['882397']", , , ,0.38,29.99 +6359.0,create package,2019-09-02 15:55:51.000Z, ,"['882411','881942','882188','882412','882463','882466','882470','882415','882465']", ,"['660367']", ,3.628,6413.97 +6360.0,failed delivery,2019-09-02 16:02:59.000Z, , , ,"['660355']", ,1.837,1843.97 +6361.0,pick item,2019-09-02 16:05:07.000Z, ,"['882217']", , , ,0.495,129.0 +6362.0,pick item,2019-09-02 16:06:45.000Z, ,"['881788']", , , ,0.78,99.99 +6363.0,pay order,2019-09-02 16:07:16.000Z, , ,"['990574']", , ,2.95,5534.0 +6364.0,pay order,2019-09-02 16:10:50.000Z, , ,"['990411']", , ,1.356,1101.99 +6365.0,reorder item,2019-09-02 16:26:48.000Z, ,"['882310']", , , ,0.172,699.0 +6366.0,reorder item,2019-09-02 16:32:34.000Z, ,"['882379']", , , ,0.21,529.0 +6367.0,package delivered,2019-09-02 16:40:17.000Z, , , ,"['660363']", ,3.115,4829.0 +6368.0,pick item,2019-09-02 16:45:04.000Z, ,"['882308']", , , ,0.483,495.0 +6369.0,pick item,2019-09-02 16:46:50.000Z, ,"['882384']", , , ,1.48,199.99 +6370.0,failed delivery,2019-09-02 16:47:21.000Z, , , ,"['660359']", ,2.336,3768.99 +6371.0,reorder item,2019-09-02 16:55:49.000Z, ,"['882361']", , , ,0.28,89.99 +6372.0,pick item,2019-09-02 16:56:29.000Z, ,"['881653']", , , ,0.98,129.99 +6373.0,place order,2019-09-02 17:05:22.000Z, ,"['882483','882480','882482','882481','882484','882485']","['990613']", , ,3.422,1632.96 +6374.0,pick item,2019-09-02 17:10:02.000Z, ,"['882309']", , , ,0.78,99.99 +6375.0,pick item,2019-09-02 17:10:30.000Z, ,"['882120']", , , ,0.21,529.0 +6376.0,pick item,2019-09-02 17:59:49.000Z, ,"['882311']", , , ,0.78,99.99 +6377.0,pick item,2019-09-02 18:16:16.000Z, ,"['882446']", , , ,0.483,1099.0 +6378.0,create package,2019-09-02 18:16:16.000Z, ,"['882099','881865','882280','881841','882281','882309','882315','882311']", ,"['660368']", ,5.14,1038.93 +6379.0,package delivered,2019-09-02 18:18:18.000Z, , , ,"['660361']", ,4.388,2182.96 +6380.0,pick item,2019-09-02 18:49:36.000Z, ,"['881875']", , , ,0.172,699.0 +6381.0,reorder item,2019-09-02 19:16:31.000Z, ,"['882275']", , , ,0.21,529.0 +6382.0,place order,2019-09-02 19:50:18.000Z, ,"['882488','882487','882486']","['990614']", , ,1.463,1382.99 +6383.0,package delivered,2019-09-02 19:54:33.000Z, , , ,"['660358']", ,1.865,2629.0 +6384.0,place order,2019-09-03 05:19:42.000Z, ,"['882489','882490','882491','882492']","['990615']", , ,1.853,1152.98 +6385.0,pick item,2019-09-03 06:38:17.000Z, ,"['882472']", , , ,0.188,1149.0 +6386.0,pick item,2019-09-03 07:17:22.000Z, ,"['882356']", , , ,0.21,529.0 +6387.0,confirm order,2019-09-03 07:20:43.000Z, , ,"['990610']", , ,2.822,4096.99 +6388.0,item out of stock,2019-09-03 07:28:32.000Z, ,"['882414']", , , ,1.37,2500.0 +6389.0,item out of stock,2019-09-03 07:38:39.000Z, ,"['882404']", , , ,0.78,99.99 +6390.0,reorder item,2019-09-03 07:44:42.000Z, ,"['882422']", , , ,1.28,149.99 +6391.0,confirm order,2019-09-03 07:48:48.000Z, , ,"['990613']", , ,3.422,1632.96 +6392.0,pick item,2019-09-03 07:50:00.000Z, ,"['882366']", , , ,0.483,1099.0 +6393.0,confirm order,2019-09-03 07:50:17.000Z, , ,"['990615']", , ,1.853,1152.98 +6394.0,pick item,2019-09-03 07:54:16.000Z, ,"['881490']", , , ,1.28,149.99 +6395.0,pay order,2019-09-03 07:56:16.000Z, , ,"['990589']", , ,4.135,6417.98 +6396.0,pick item,2019-09-03 08:01:12.000Z, ,"['881741']", , , ,0.38,29.99 +6397.0,place order,2019-09-03 08:05:28.000Z, ,"['882496','882493','882498','882494','882497','882495']","['990616']", , ,4.6960000000000015,2892.96 +6398.0,confirm order,2019-09-03 08:07:47.000Z, , ,"['990614']", , ,1.463,1382.99 +6399.0,reorder item,2019-09-03 08:14:02.000Z, ,"['882352']", , , ,0.44,476.0 +6400.0,pick item,2019-09-03 08:16:27.000Z, ,"['882494']", , , ,0.28,89.99 +6401.0,package delivered,2019-09-03 08:21:19.000Z, , , ,"['660354']", ,4.853,6336.98 +6402.0,pick item,2019-09-03 08:30:52.000Z, ,"['882468']", , , ,0.483,1099.0 +6403.0,create package,2019-09-03 08:30:52.000Z, ,"['882384','882342','882441','882442','882298','882445','882308','882458','882435','882386','882385','882436','882388']", ,"['660369']", ,9.301,5249.91 +6404.0,pick item,2019-09-03 08:32:18.000Z, ,"['882212']", , , ,0.483,495.0 +6405.0,send package,2019-09-03 08:42:11.000Z, , , ,"['660366']", ,4.271,6473.99 +6406.0,send package,2019-09-03 08:45:58.000Z, , , ,"['660365']", ,6.54,5359.94 +6407.0,package delivered,2019-09-03 08:53:31.000Z, , , ,"['660359']", ,2.336,3768.99 +6408.0,pick item,2019-09-03 09:00:12.000Z, ,"['882486']", , , ,0.78,99.99 +6409.0,pick item,2019-09-03 09:02:49.000Z, ,"['881706']", , , ,0.38,29.99 +6410.0,confirm order,2019-09-03 09:06:15.000Z, , ,"['990616']", , ,4.6960000000000015,2892.96 +6411.0,pay order,2019-09-03 09:10:50.000Z, , ,"['990519']", , ,1.56,244.98 +6412.0,payment reminder,2019-09-03 09:18:50.000Z, , ,"['990487']", , ,6.046,5284.96 +6413.0,reorder item,2019-09-03 09:20:32.000Z, ,"['882253']", , , ,0.21,529.0 +6414.0,pick item,2019-09-03 09:21:49.000Z, ,"['882322']", , , ,1.37,2500.0 +6415.0,pick item,2019-09-03 09:25:09.000Z, ,"['882464']", , , ,1.37,2500.0 +6416.0,pay order,2019-09-03 09:29:31.000Z, , ,"['990560']", , ,0.763,1553.0 +6417.0,place order,2019-09-03 09:30:43.000Z, ,"['882500','882501','882499','882502']","['990617']", , ,0.92,2391.99 +6418.0,pick item,2019-09-03 09:34:13.000Z, ,"['882375']", , , ,0.38,29.99 +6419.0,pick item,2019-09-03 09:39:36.000Z, ,"['882481']", , , ,0.21,529.0 +6420.0,reorder item,2019-09-03 09:44:16.000Z, ,"['882448']", , , ,0.28,89.99 +6421.0,pick item,2019-09-03 09:46:51.000Z, ,"['882488']", , , ,0.188,1149.0 +6422.0,confirm order,2019-09-03 09:47:33.000Z, , ,"['990600']", , ,2.623,3293.97 +6423.0,pay order,2019-09-03 09:51:52.000Z, , ,"['990526']", , ,4.556,3383.96 +6424.0,reorder item,2019-09-03 10:10:25.000Z, ,"['882404']", , , ,0.78,99.99 +6425.0,package delivered,2019-09-03 10:12:59.000Z, , , ,"['660366']", ,4.271,6473.99 +6426.0,pick item,2019-09-03 10:13:48.000Z, ,"['882021']", , , ,1.37,2500.0 +6427.0,pick item,2019-09-03 10:18:47.000Z, ,"['882498']", , , ,0.188,1149.0 +6428.0,pick item,2019-09-03 10:28:09.000Z, ,"['882459']", , , ,0.2,39.99 +6429.0,pick item,2019-09-03 10:28:22.000Z, ,"['882432']", , , ,1.37,2500.0 +6430.0,pick item,2019-09-03 10:32:46.000Z, ,"['882434']", , , ,0.28,449.0 +6431.0,create package,2019-09-03 10:32:46.000Z, ,"['882420','882440','882323','882423','882371','882381','882383','882322','882425','882373','882403']", ,"['660370']", ,7.8679999999999986,10934.97 +6432.0,reorder item,2019-09-03 10:49:45.000Z, ,"['882295']", , , ,1.48,199.99 +6433.0,reorder item,2019-09-03 10:52:34.000Z, ,"['882338']", , , ,0.483,1099.0 +6434.0,pick item,2019-09-03 10:52:46.000Z, ,"['882454']", , , ,1.48,199.99 +6435.0,place order,2019-09-03 11:21:14.000Z, ,"['882508','882503','882509','882504','882505','882506','882507']","['990618']", , ,3.517,1731.96 +6436.0,package delivered,2019-09-03 11:26:27.000Z, , , ,"['660355']", ,1.837,1843.97 +6437.0,pick item,2019-09-03 11:39:39.000Z, ,"['882402']", , , ,0.483,79.99 +6438.0,pick item,2019-09-03 11:41:26.000Z, ,"['882437']", , , ,0.166,799.0 +6439.0,pick item,2019-09-03 11:43:47.000Z, ,"['882497']", , , ,1.48,199.99 +6440.0,confirm order,2019-09-03 11:46:09.000Z, , ,"['990617']", , ,0.92,2391.99 +6441.0,pick item,2019-09-03 11:48:46.000Z, ,"['882457']", , , ,0.172,699.0 +6442.0,package delivered,2019-09-03 11:54:16.000Z, , , ,"['660364']", ,0.818,1986.99 +6443.0,pick item,2019-09-03 12:22:32.000Z, ,"['882502']", , , ,0.172,699.0 +6444.0,confirm order,2019-09-03 12:24:24.000Z, , ,"['990602']", , ,1.009,3751.0 +6445.0,item out of stock,2019-09-03 12:29:30.000Z, ,"['882490']", , , ,0.483,79.99 +6446.0,confirm order,2019-09-03 12:51:11.000Z, , ,"['990618']", , ,3.517,1731.96 +6447.0,pick item,2019-09-03 12:55:02.000Z, ,"['882251']", , , ,0.483,79.99 +6448.0,pick item,2019-09-03 13:01:33.000Z, ,"['882443']", , , ,0.166,799.0 +6449.0,place order,2019-09-03 13:02:15.000Z, ,"['882510','882511']","['990619']", , ,0.56,903.0 +6450.0,pay order,2019-09-03 13:03:09.000Z, , ,"['990591']", , ,1.766,2271.98 +6451.0,pick item,2019-09-03 13:03:11.000Z, ,"['882283']", , , ,0.78,99.99 +6452.0,send package,2019-09-03 13:10:12.000Z, , , ,"['660370']", ,7.8679999999999986,10934.97 +6453.0,pick item,2019-09-03 13:17:00.000Z, ,"['882505']", , , ,0.495,129.0 +6454.0,send package,2019-09-03 13:17:56.000Z, , , ,"['660362']", ,1.65,2589.99 +6455.0,pick item,2019-09-03 13:27:24.000Z, ,"['882471']", , , ,0.483,1099.0 +6456.0,create package,2019-09-03 13:27:24.000Z, ,"['881741','882241','882217','882364','882395']", ,"['660371']", ,1.922,1016.98 +6457.0,item out of stock,2019-09-03 13:36:46.000Z, ,"['882351']", , , ,0.483,495.0 +6458.0,send package,2019-09-03 13:37:39.000Z, , , ,"['660367']", ,3.628,6413.97 +6459.0,package delivered,2019-09-03 13:43:02.000Z, , , ,"['660360']", ,2.13,3152.0 +6460.0,confirm order,2019-09-03 13:46:59.000Z, , ,"['990611']", , ,1.09,623.99 +6461.0,item out of stock,2019-09-03 13:51:51.000Z, ,"['882501']", , , ,0.28,89.99 +6462.0,confirm order,2019-09-03 13:54:20.000Z, , ,"['990607']", , ,1.858,1322.99 +6463.0,pick item,2019-09-03 13:55:00.000Z, ,"['882306']", , , ,0.483,495.0 +6464.0,pick item,2019-09-03 13:56:31.000Z, ,"['882439']", , , ,0.483,1099.0 +6465.0,pick item,2019-09-03 13:57:45.000Z, ,"['882335']", , , ,1.48,199.99 +6466.0,pick item,2019-09-03 14:00:43.000Z, ,"['882483']", , , ,1.48,199.99 +6467.0,pay order,2019-09-03 14:02:55.000Z, , ,"['990618']", , ,3.517,1731.96 +6468.0,reorder item,2019-09-03 14:06:10.000Z, ,"['882410']", , , ,1.25,2200.0 +6469.0,package delivered,2019-09-03 14:19:49.000Z, , , ,"['660370']", ,7.8679999999999986,10934.97 +6470.0,place order,2019-09-03 14:24:18.000Z, ,"['882512']","['990620']", , ,0.483,1104.0 +6471.0,pay order,2019-09-03 14:26:30.000Z, , ,"['990410']", , ,1.166,2382.0 +6472.0,item out of stock,2019-09-03 14:28:23.000Z, ,"['882479']", , , ,1.37,2500.0 +6473.0,send package,2019-09-03 14:29:36.000Z, , , ,"['660369']", ,9.301,5249.91 +6474.0,pick item,2019-09-03 14:42:39.000Z, ,"['882478']", , , ,1.25,2200.0 +6475.0,create package,2019-09-03 14:42:39.000Z, ,"['882460','882502','882483','882269','881788','882481','881404']", ,"['660372']", ,4.785,2212.96 +6476.0,confirm order,2019-09-03 14:47:53.000Z, , ,"['990603']", , ,2.146,1489.97 +6477.0,item out of stock,2019-09-03 14:53:44.000Z, ,"['882469']", , , ,1.48,199.99 +6478.0,reorder item,2019-09-03 14:58:59.000Z, ,"['882351']", , , ,0.483,495.0 +6479.0,reorder item,2019-09-03 14:59:03.000Z, ,"['882490']", , , ,0.483,79.99 +6480.0,pick item,2019-09-03 15:00:52.000Z, ,"['882451']", , , ,0.38,29.99 +6481.0,package delivered,2019-09-03 15:03:37.000Z, , , ,"['660362']", ,1.65,2589.99 +6482.0,pay order,2019-09-03 15:05:03.000Z, , ,"['990616']", , ,4.6960000000000015,2892.96 +6483.0,pay order,2019-09-03 15:09:16.000Z, , ,"['990523']", , ,2.91,1551.97 +6484.0,pick item,2019-09-03 15:14:54.000Z, ,"['882389']", , , ,1.25,2200.0 +6485.0,pick item,2019-09-03 15:20:02.000Z, ,"['882508']", , , ,0.172,699.0 +6486.0,pick item,2019-09-03 15:23:36.000Z, ,"['882431']", , , ,0.28,89.99 +6487.0,send package,2019-09-03 15:27:46.000Z, , , ,"['660368']", ,5.14,1038.93 +6488.0,pay order,2019-09-03 15:39:08.000Z, , ,"['990534']", , ,1.963,1303.99 +6489.0,reorder item,2019-09-03 15:45:49.000Z, ,"['882413']", , , ,0.28,449.0 +6490.0,pick item,2019-09-03 15:53:05.000Z, ,"['882340']", , , ,0.21,529.0 +6491.0,pick item,2019-09-03 15:59:10.000Z, ,"['882320']", , , ,1.25,2200.0 +6492.0,pick item,2019-09-03 15:59:37.000Z, ,"['882332']", , , ,0.483,495.0 +6493.0,create package,2019-09-03 15:59:37.000Z, ,"['882407','882426','881653','882427','881490']", ,"['660373']", ,4.163,965.96 +6494.0,place order,2019-09-03 16:08:23.000Z, ,"['882516','882518','882513','882515','882517','882514']","['990621']", , ,3.851,3412.97 +6495.0,pick item,2019-09-03 16:08:31.000Z, ,"['882249']", , , ,0.188,1149.0 +6496.0,reorder item,2019-09-03 16:09:41.000Z, ,"['882022']", , , ,0.483,495.0 +6497.0,reorder item,2019-09-03 16:22:58.000Z, ,"['882416']", , , ,0.28,89.99 +6498.0,pay order,2019-09-03 17:12:50.000Z, , ,"['990350']", , ,1.366,1402.98 +6499.0,pick item,2019-09-03 17:33:22.000Z, ,"['882406']", , , ,0.88,89.99 +6500.0,pick item,2019-09-03 17:33:59.000Z, ,"['881355']", , , ,0.166,799.0 +6501.0,place order,2019-09-03 18:04:44.000Z, ,"['882520','882521','882519']","['990622']", , ,1.248,1343.98 +6502.0,pay order,2019-09-03 18:07:45.000Z, , ,"['990531']", , ,3.3960000000000004,3533.98 +6503.0,place order,2019-09-03 20:49:03.000Z, ,"['882524','882523','882522','882525']","['990623']", , ,2.24,1116.98 +6504.0,item out of stock,2019-09-04 06:10:30.000Z, ,"['882493']", , , ,1.28,149.99 +6505.0,pick item,2019-09-04 06:25:30.000Z, ,"['882510']", , , ,0.28,449.0 +6506.0,pick item,2019-09-04 06:58:49.000Z, ,"['882507']", , , ,0.88,89.99 +6507.0,create package,2019-09-04 06:58:49.000Z, ,"['882468','882399','882467','882402','882331']", ,"['660374']", ,2.128,2506.98 +6508.0,pick item,2019-09-04 07:14:59.000Z, ,"['882288']", , , ,0.98,129.99 +6509.0,pick item,2019-09-04 07:16:15.000Z, ,"['882484']", , , ,0.2,39.99 +6510.0,pay order,2019-09-04 07:17:52.000Z, , ,"['990564']", , ,3.573,4967.99 +6511.0,item out of stock,2019-09-04 07:26:39.000Z, ,"['882515']", , , ,0.28,89.99 +6512.0,place order,2019-09-04 07:29:40.000Z, ,"['882526']","['990624']", , ,0.483,84.99 +6513.0,confirm order,2019-09-04 07:29:46.000Z, , ,"['990604']", , ,2.5660000000000003,1839.97 +6514.0,pick item,2019-09-04 07:34:24.000Z, ,"['882477']", , , ,0.483,1099.0 +6515.0,pick item,2019-09-04 07:53:10.000Z, ,"['882338']", , , ,0.483,1099.0 +6516.0,confirm order,2019-09-04 08:01:21.000Z, , ,"['990622']", , ,1.248,1343.98 +6517.0,pay order,2019-09-04 08:03:02.000Z, , ,"['990473']", , ,2.376,3018.98 +6518.0,pick item,2019-09-04 08:11:31.000Z, ,"['882449']", , , ,0.483,79.99 +6519.0,create package,2019-09-04 08:11:31.000Z, ,"['882451','882457','882021','882288','882454','882453','881706']", ,"['660375']", ,5.245,4687.96 +6520.0,pick item,2019-09-04 08:13:11.000Z, ,"['882461']", , , ,0.495,129.0 +6521.0,reorder item,2019-09-04 08:27:34.000Z, ,"['882515']", , , ,0.28,89.99 +6522.0,pick item,2019-09-04 08:31:57.000Z, ,"['882474']", , , ,0.188,1149.0 +6523.0,confirm order,2019-09-04 08:36:52.000Z, , ,"['990623']", , ,2.24,1116.98 +6524.0,pick item,2019-09-04 08:43:58.000Z, ,"['882379']", , , ,0.21,529.0 +6525.0,pick item,2019-09-04 08:47:53.000Z, ,"['881691']", , , ,0.28,89.99 +6526.0,pick item,2019-09-04 08:57:22.000Z, ,"['882487']", , , ,0.495,129.0 +6527.0,pick item,2019-09-04 09:01:04.000Z, ,"['882372']", , , ,0.166,799.0 +6528.0,reorder item,2019-09-04 09:03:36.000Z, ,"['882450']", , , ,0.44,476.0 +6529.0,item out of stock,2019-09-04 09:06:14.000Z, ,"['882518']", , , ,0.88,89.99 +6530.0,confirm order,2019-09-04 09:08:31.000Z, , ,"['990619']", , ,0.56,903.0 +6531.0,pick item,2019-09-04 09:10:19.000Z, ,"['882513']", , , ,1.25,2200.0 +6532.0,create package,2019-09-04 09:10:19.000Z, ,"['881355','882248','882375','882249','882379']", ,"['660376']", ,1.154,3035.99 +6533.0,place order,2019-09-04 09:19:08.000Z, ,"['882527','882528']","['990625']", , ,1.65,2954.0 +6534.0,reorder item,2019-09-04 09:20:09.000Z, ,"['882493']", , , ,1.28,149.99 +6535.0,package delivered,2019-09-04 09:21:12.000Z, , , ,"['660365']", ,6.54,5359.94 +6536.0,pick item,2019-09-04 09:23:54.000Z, ,"['881937']", , , ,0.21,529.0 +6537.0,failed delivery,2019-09-04 09:33:30.000Z, , , ,"['660368']", ,5.14,1038.93 +6538.0,pick item,2019-09-04 09:43:11.000Z, ,"['882136']", , , ,1.48,199.99 +6539.0,confirm order,2019-09-04 09:43:53.000Z, , ,"['990621']", , ,3.851,3412.97 +6540.0,send package,2019-09-04 09:54:38.000Z, , , ,"['660374']", ,2.128,2506.98 +6541.0,pick item,2019-09-04 10:05:08.000Z, ,"['882325']", , , ,0.483,79.99 +6542.0,pick item,2019-09-04 10:09:29.000Z, ,"['882351']", , , ,0.483,495.0 +6543.0,pick item,2019-09-04 10:15:58.000Z, ,"['882499']", , , ,0.188,1149.0 +6544.0,create package,2019-09-04 10:15:58.000Z, ,"['882432','882430','882431','881937','881875']", ,"['660377']", ,2.515,3897.98 +6545.0,pick item,2019-09-04 10:31:43.000Z, ,"['882482']", , , ,0.172,699.0 +6546.0,reorder item,2019-09-04 10:46:58.000Z, ,"['882501']", , , ,0.28,89.99 +6547.0,package delivered,2019-09-04 10:56:12.000Z, , , ,"['660367']", ,3.628,6413.97 +6548.0,place order,2019-09-04 10:58:03.000Z, ,"['882531','882529','882532','882534','882533','882530']","['990626']", , ,3.389,1533.95 +6549.0,reorder item,2019-09-04 11:01:54.000Z, ,"['882328']", , , ,0.188,1149.0 +6550.0,pick item,2019-09-04 11:15:01.000Z, ,"['882526']", , , ,0.483,79.99 +6551.0,reorder item,2019-09-04 11:42:58.000Z, ,"['882349']", , , ,0.98,129.99 +6552.0,package delivered,2019-09-04 11:58:07.000Z, , , ,"['660368']", ,5.14,1038.93 +6553.0,pick item,2019-09-04 11:58:49.000Z, ,"['882524']", , , ,0.38,29.99 +6554.0,reorder item,2019-09-04 12:09:29.000Z, ,"['882455']", , , ,0.495,129.0 +6555.0,pick item,2019-09-04 12:13:15.000Z, ,"['881590']", , , ,0.98,129.99 +6556.0,confirm order,2019-09-04 12:21:53.000Z, , ,"['990593']", , ,1.375,223.99 +6557.0,confirm order,2019-09-04 12:39:04.000Z, , ,"['990620']", , ,0.483,1104.0 +6558.0,pick item,2019-09-04 12:39:54.000Z, ,"['881524']", , , ,0.2,39.99 +6559.0,create package,2019-09-04 12:39:54.000Z, ,"['882351','882136','881524','882397']", ,"['660378']", ,2.543,764.97 +6560.0,item out of stock,2019-09-04 12:55:53.000Z, ,"['882491']", , , ,0.88,89.99 +6561.0,pick item,2019-09-04 13:02:21.000Z, ,"['882369']", , , ,0.188,1149.0 +6562.0,item out of stock,2019-09-04 13:04:33.000Z, ,"['882506']", , , ,0.28,89.99 +6563.0,pick item,2019-09-04 13:07:32.000Z, ,"['882189']", , , ,0.78,99.99 +6564.0,pay order,2019-09-04 13:12:07.000Z, , ,"['990568']", , ,4.182,3253.98 +6565.0,place order,2019-09-04 13:15:54.000Z, ,"['882535','882536','882537']","['990627']", , ,2.343,719.98 +6566.0,pick item,2019-09-04 13:17:42.000Z, ,"['882536']", , , ,0.483,495.0 +6567.0,pick item,2019-09-04 13:20:48.000Z, ,"['882475']", , , ,0.88,89.99 +6568.0,create package,2019-09-04 13:20:48.000Z, ,"['882320','882120']", ,"['660379']", ,1.46,2729.0 +6569.0,send package,2019-09-04 13:24:21.000Z, , , ,"['660376']", ,1.154,3035.99 +6570.0,send package,2019-09-04 13:29:52.000Z, , , ,"['660377']", ,2.515,3897.98 +6571.0,pay order,2019-09-04 13:30:32.000Z, , ,"['990584']", , ,2.684,5037.99 +6572.0,pay order,2019-09-04 13:45:05.000Z, , ,"['990428']", , ,1.09,623.99 +6573.0,pick item,2019-09-04 13:57:08.000Z, ,"['882495']", , , ,0.188,1149.0 +6574.0,confirm order,2019-09-04 14:02:24.000Z, , ,"['990625']", , ,1.65,2954.0 +6575.0,pick item,2019-09-04 14:06:00.000Z, ,"['881811']", , , ,0.166,799.0 +6576.0,create package,2019-09-04 14:06:00.000Z, ,"['882474','882464','882472','882446','882189','882471','882449']", ,"['660380']", ,3.975,7175.98 +6577.0,pick item,2019-09-04 14:06:40.000Z, ,"['882516']", , , ,0.495,129.0 +6578.0,send package,2019-09-04 14:08:05.000Z, , , ,"['660375']", ,5.245,4687.96 +6579.0,confirm order,2019-09-04 14:08:20.000Z, , ,"['990601']", , ,2.998,3952.99 +6580.0,pick item,2019-09-04 14:10:03.000Z, ,"['881803']", , , ,1.48,199.99 +6581.0,pay order,2019-09-04 14:14:43.000Z, , ,"['990572']", , ,4.13,2651.96 +6582.0,send package,2019-09-04 14:25:29.000Z, , , ,"['660372']", ,4.785,2212.96 +6583.0,send package,2019-09-04 14:28:49.000Z, , , ,"['660373']", ,4.163,965.96 +6584.0,package delivered,2019-09-04 14:36:09.000Z, , , ,"['660374']", ,2.128,2506.98 +6585.0,pick item,2019-09-04 14:39:57.000Z, ,"['882387']", , , ,0.483,79.99 +6586.0,pick item,2019-09-04 14:42:39.000Z, ,"['882476']", , , ,0.21,529.0 +6587.0,pick item,2019-09-04 14:49:42.000Z, ,"['882514']", , , ,0.78,99.99 +6588.0,place order,2019-09-04 14:51:35.000Z, ,"['882541','882538','882540','882539','882542']","['990628']", , ,4.052,5523.98 +6589.0,pick item,2019-09-04 14:56:37.000Z, ,"['882521']", , , ,0.188,1149.0 +6590.0,send package,2019-09-04 15:14:48.000Z, , , ,"['660371']", ,1.922,1016.98 +6591.0,pick item,2019-09-04 15:20:34.000Z, ,"['882447']", , , ,0.88,89.99 +6592.0,create package,2019-09-04 15:20:34.000Z, ,"['882497','882498','882356','882494','881691','882495']", ,"['660381']", ,2.6260000000000003,3206.97 +6593.0,package delivered,2019-09-04 15:26:14.000Z, , , ,"['660371']", ,1.922,1016.98 +6594.0,pick item,2019-09-04 15:33:39.000Z, ,"['882531']", , , ,0.483,1099.0 +6595.0,pay order,2019-09-04 15:47:57.000Z, , ,"['990608']", , ,2.01,4442.99 +6596.0,pick item,2019-09-04 16:17:31.000Z, ,"['882492']", , , ,0.21,529.0 +6597.0,send package,2019-09-04 16:19:48.000Z, , , ,"['660380']", ,3.975,7175.98 +6598.0,package delivered,2019-09-04 16:20:00.000Z, , , ,"['660369']", ,9.301,5249.91 +6599.0,pick item,2019-09-04 16:23:19.000Z, ,"['882541']", , , ,0.88,89.99 +6600.0,pick item,2019-09-04 16:23:59.000Z, ,"['882444']", , , ,0.44,476.0 +6601.0,reorder item,2019-09-04 16:25:19.000Z, ,"['882469']", , , ,1.48,199.99 +6602.0,pick item,2019-09-04 16:43:27.000Z, ,"['882245']", , , ,0.483,79.99 +6603.0,send package,2019-09-04 17:00:28.000Z, , , ,"['660381']", ,2.6260000000000003,3206.97 +6604.0,place order,2019-09-04 17:02:58.000Z, ,"['882545','882543','882544']","['990629']", , ,1.318,1632.99 +6605.0,pick item,2019-09-04 17:14:28.000Z, ,"['882438']", , , ,0.188,1149.0 +6606.0,create package,2019-09-04 17:14:28.000Z, ,"['882531','882488','882487','882486','882492','882369','882283','882366']", ,"['660382']", ,3.607,5353.98 +6607.0,pick item,2019-09-04 17:17:14.000Z, ,"['882543']", , , ,0.98,129.99 +6608.0,reorder item,2019-09-04 17:20:23.000Z, ,"['882267']", , , ,0.98,129.99 +6609.0,pick item,2019-09-04 19:10:19.000Z, ,"['881933']", , , ,0.98,129.99 +6610.0,place order,2019-09-04 19:45:30.000Z, ,"['882548','882549','882551','882546','882550','882547']","['990630']", , ,3.758,1972.96 +6611.0,place order,2019-09-05 04:50:54.000Z, ,"['882553','882552']","['990631']", , ,1.49,683.99 +6612.0,confirm order,2019-09-05 06:46:22.000Z, , ,"['990629']", , ,1.318,1632.99 +6613.0,pay order,2019-09-05 07:01:48.000Z, , ,"['990617']", , ,0.92,2391.99 +6614.0,pick item,2019-09-05 07:13:40.000Z, ,"['882347']", , , ,0.166,799.0 +6615.0,pick item,2019-09-05 07:15:43.000Z, ,"['882346']", , , ,0.28,89.99 +6616.0,pick item,2019-09-05 07:21:32.000Z, ,"['881751']", , , ,0.44,476.0 +6617.0,package delivered,2019-09-05 07:25:10.000Z, , , ,"['660376']", ,1.154,3035.99 +6618.0,payment reminder,2019-09-05 07:31:24.000Z, , ,"['990501']", , ,4.235,3402.98 +6619.0,pick item,2019-09-05 07:32:36.000Z, ,"['882480']", , , ,0.98,129.99 +6620.0,confirm order,2019-09-05 07:37:48.000Z, , ,"['990627']", , ,2.343,719.98 +6621.0,pay order,2019-09-05 07:42:32.000Z, , ,"['990487']", , ,6.046,5284.96 +6622.0,pay order,2019-09-05 07:43:18.000Z, , ,"['990614']", , ,1.463,1382.99 +6623.0,payment reminder,2019-09-05 07:52:34.000Z, , ,"['990504']", , ,2.013,3393.99 +6624.0,package delivered,2019-09-05 08:05:58.000Z, , , ,"['660372']", ,4.785,2212.96 +6625.0,place order,2019-09-05 08:33:47.000Z, ,"['882554','882555']","['990632']", , ,0.354,1953.0 +6626.0,pick item,2019-09-05 08:57:24.000Z, ,"['882057']", , , ,0.28,449.0 +6627.0,send package,2019-09-05 09:13:06.000Z, , , ,"['660378']", ,2.543,764.97 +6628.0,send package,2019-09-05 09:14:35.000Z, , , ,"['660382']", ,3.607,5353.98 +6629.0,reorder item,2019-09-05 09:16:35.000Z, ,"['882479']", , , ,1.37,2500.0 +6630.0,failed delivery,2019-09-05 09:19:12.000Z, , , ,"['660381']", ,2.6260000000000003,3206.97 +6631.0,confirm order,2019-09-05 09:19:43.000Z, , ,"['990628']", , ,4.052,5523.98 +6632.0,reorder item,2019-09-05 09:20:06.000Z, ,"['882414']", , , ,1.37,2500.0 +6633.0,confirm order,2019-09-05 09:31:40.000Z, , ,"['990630']", , ,3.758,1972.96 +6634.0,pick item,2019-09-05 09:36:13.000Z, ,"['882538']", , , ,0.38,29.99 +6635.0,create package,2019-09-05 09:36:13.000Z, ,"['882212','882340','882443','882459','882387','882434','882306','881751','882444']", ,"['660383']", ,3.185,3838.98 +6636.0,pick item,2019-09-05 09:38:35.000Z, ,"['882295']", , , ,1.48,199.99 +6637.0,pick item,2019-09-05 09:59:30.000Z, ,"['882207']", , , ,0.166,799.0 +6638.0,failed delivery,2019-09-05 10:14:13.000Z, , , ,"['660373']", ,4.163,965.96 +6639.0,pick item,2019-09-05 10:16:17.000Z, ,"['882542']", , , ,1.25,2200.0 +6640.0,package delivered,2019-09-05 10:17:03.000Z, , , ,"['660377']", ,2.515,3897.98 +6641.0,pick item,2019-09-05 10:25:08.000Z, ,"['881499']", , , ,1.37,2500.0 +6642.0,place order,2019-09-05 10:27:22.000Z, ,"['882559','882556','882558','882560','882557']","['990633']", , ,3.945,4978.99 +6643.0,pick item,2019-09-05 10:29:21.000Z, ,"['882512']", , , ,0.483,1099.0 +6644.0,pick item,2019-09-05 10:48:12.000Z, ,"['882509']", , , ,1.28,149.99 +6645.0,package delivered,2019-09-05 11:03:12.000Z, , , ,"['660378']", ,2.543,764.97 +6646.0,reorder item,2019-09-05 11:38:49.000Z, ,"['882518']", , , ,0.88,89.99 +6647.0,pick item,2019-09-05 11:52:16.000Z, ,"['882530']", , , ,0.28,89.99 +6648.0,pick item,2019-09-05 11:55:45.000Z, ,"['882556']", , , ,0.44,476.0 +6649.0,pick item,2019-09-05 12:10:13.000Z, ,"['882404']", , , ,0.78,99.99 +6650.0,create package,2019-09-05 12:10:13.000Z, ,"['882438','882478','882437','882404','882475','882439','882476','882057','882372','882477']", ,"['660384']", ,4.886,8312.98 +6651.0,place order,2019-09-05 12:14:31.000Z, ,"['882565','882563','882561','882564','882562']","['990634']", , ,1.194,2508.98 +6652.0,pick item,2019-09-05 12:14:41.000Z, ,"['882551']", , , ,0.172,699.0 +6653.0,pick item,2019-09-05 12:32:23.000Z, ,"['882523']", , , ,0.44,476.0 +6654.0,pay order,2019-09-05 12:42:49.000Z, , ,"['990623']", , ,2.24,1116.98 +6655.0,payment reminder,2019-09-05 12:49:50.000Z, , ,"['990516']", , ,0.986,2911.98 +6656.0,pick item,2019-09-05 12:59:16.000Z, ,"['882485']", , , ,0.38,29.99 +6657.0,send package,2019-09-05 12:59:33.000Z, , , ,"['660379']", ,1.46,2729.0 +6658.0,reorder item,2019-09-05 13:09:05.000Z, ,"['882506']", , , ,0.28,89.99 +6659.0,item out of stock,2019-09-05 13:09:56.000Z, ,"['882560']", , , ,1.48,199.99 +6660.0,pick item,2019-09-05 13:13:52.000Z, ,"['882553']", , , ,0.21,529.0 +6661.0,pick item,2019-09-05 13:14:16.000Z, ,"['882522']", , , ,0.98,129.99 +6662.0,pick item,2019-09-05 13:21:17.000Z, ,"['882324']", , , ,0.21,529.0 +6663.0,pay order,2019-09-05 13:23:03.000Z, , ,"['990600']", , ,2.623,3293.97 +6664.0,pick item,2019-09-05 13:27:43.000Z, ,"['882455']", , , ,0.495,129.0 +6665.0,pick item,2019-09-05 13:30:15.000Z, ,"['882528']", , , ,1.37,2500.0 +6666.0,pay order,2019-09-05 13:44:39.000Z, , ,"['990579']", , ,3.265,3831.98 +6667.0,place order,2019-09-05 13:48:49.000Z, ,"['882567','882569','882566','882571','882568','882570']","['990635']", , ,3.934,6633.99 +6668.0,pick item,2019-09-05 13:51:23.000Z, ,"['882519']", , , ,0.28,89.99 +6669.0,item out of stock,2019-09-05 13:51:38.000Z, ,"['882504']", , , ,0.2,39.99 +6670.0,pay order,2019-09-05 14:09:55.000Z, , ,"['990404']", , ,1.32,570.99 +6671.0,pick item,2019-09-05 14:09:55.000Z, ,"['882548']", , , ,1.28,149.99 +6672.0,create package,2019-09-05 14:09:55.000Z, ,"['882406','882251']", ,"['660385']", ,1.3630000000000002,169.98 +6673.0,pay order,2019-09-05 14:11:22.000Z, , ,"['990449']", , ,1.068,1243.99 +6674.0,pay order,2019-09-05 14:11:55.000Z, , ,"['990501']", , ,4.235,3402.98 +6675.0,pick item,2019-09-05 14:21:01.000Z, ,"['882433']", , , ,1.28,149.99 +6676.0,send package,2019-09-05 14:22:09.000Z, , , ,"['660385']", ,1.3630000000000002,169.98 +6677.0,item out of stock,2019-09-05 14:35:07.000Z, ,"['882557']", , , ,1.37,2500.0 +6678.0,pick item,2019-09-05 14:35:16.000Z, ,"['882555']", , , ,0.166,799.0 +6679.0,create package,2019-09-05 14:35:16.000Z, ,"['882508','882507','882325','882509','882512','882536','882505']", ,"['660386']", ,4.276,2741.97 +6680.0,pick item,2019-09-05 14:46:27.000Z, ,"['882547']", , , ,0.166,799.0 +6681.0,pick item,2019-09-05 14:59:44.000Z, ,"['882518']", , , ,0.88,89.99 +6682.0,send package,2019-09-05 15:01:01.000Z, , , ,"['660383']", ,3.185,3838.98 +6683.0,pick item,2019-09-05 15:06:36.000Z, ,"['882343']", , , ,0.495,129.0 +6684.0,package delivered,2019-09-05 15:08:52.000Z, , , ,"['660380']", ,3.975,7175.98 +6685.0,pick item,2019-09-05 15:16:03.000Z, ,"['882552']", , , ,1.28,149.99 +6686.0,pick item,2019-09-05 15:38:17.000Z, ,"['882539']", , , ,1.37,2500.0 +6687.0,package delivered,2019-09-05 15:39:57.000Z, , , ,"['660379']", ,1.46,2729.0 +6688.0,pick item,2019-09-05 15:43:58.000Z, ,"['882220']", , , ,0.88,89.99 +6689.0,package delivered,2019-09-05 15:53:49.000Z, , , ,"['660385']", ,1.3630000000000002,169.98 +6690.0,place order,2019-09-05 15:57:26.000Z, ,"['882574','882575','882573','882572']","['990636']", , ,2.076,3482.99 +6691.0,package delivered,2019-09-05 16:11:11.000Z, , , ,"['660375']", ,5.245,4687.96 +6692.0,confirm order,2019-09-05 17:02:43.000Z, , ,"['990636']", , ,2.076,3482.99 +6693.0,pick item,2019-09-05 17:44:46.000Z, ,"['882400']", , , ,0.38,29.99 +6694.0,create package,2019-09-05 17:44:46.000Z, ,"['882510','882335','882338']", ,"['660387']", ,2.2430000000000003,1747.99 +6695.0,confirm order,2019-09-05 18:19:42.000Z, , ,"['990632']", , ,0.354,1953.0 +6696.0,pay order,2019-09-05 18:29:08.000Z, , ,"['990250']", , ,2.01,3020.99 +6697.0,place order,2019-09-05 18:31:53.000Z, ,"['882577','882576']","['990637']", , ,1.733,3304.0 +6698.0,confirm order,2019-09-05 18:33:05.000Z, , ,"['990631']", , ,1.49,683.99 +6699.0,pick item,2019-09-05 19:29:37.000Z, ,"['882550']", , , ,0.38,29.99 +6700.0,place order,2019-09-05 22:29:12.000Z, ,"['882581','882582','882578','882580','882579']","['990638']", , ,2.6180000000000003,2487.98 +6701.0,item out of stock,2019-09-06 06:31:18.000Z, ,"['882579']", , , ,0.2,39.99 +6702.0,pick item,2019-09-06 06:34:49.000Z, ,"['882578']", , , ,0.483,495.0 +6703.0,failed delivery,2019-09-06 06:35:16.000Z, , , ,"['660373']", ,4.163,965.96 +6704.0,package delivered,2019-09-06 06:41:38.000Z, , , ,"['660381']", ,2.6260000000000003,3206.97 +6705.0,pick item,2019-09-06 07:09:51.000Z, ,"['882132']", , , ,0.172,699.0 +6706.0,create package,2019-09-06 07:09:51.000Z, ,"['882332','882389']", ,"['660388']", ,1.733,2695.0 +6707.0,send package,2019-09-06 07:20:21.000Z, , , ,"['660387']", ,2.2430000000000003,1747.99 +6708.0,send package,2019-09-06 07:24:15.000Z, , , ,"['660388']", ,1.733,2695.0 +6709.0,pick item,2019-09-06 07:31:16.000Z, ,"['882462']", , , ,0.483,1099.0 +6710.0,place order,2019-09-06 07:33:54.000Z, ,"['882583','882584']","['990639']", , ,1.3630000000000002,1193.99 +6711.0,pick item,2019-09-06 07:37:40.000Z, ,"['882559']", , , ,0.483,1099.0 +6712.0,create package,2019-09-06 07:37:40.000Z, ,"['882499','882132','882518','882482','882514','882484','882485','882513','882480','882462','882461','882516']", ,"['660389']", ,6.475,6493.95 +6713.0,pick item,2019-09-06 07:45:06.000Z, ,"['881568']", , , ,0.28,449.0 +6714.0,pay order,2019-09-06 07:45:54.000Z, , ,"['990587']", , ,2.716,3524.99 +6715.0,item out of stock,2019-09-06 07:52:55.000Z, ,"['882563']", , , ,0.2,39.99 +6716.0,confirm order,2019-09-06 08:07:23.000Z, , ,"['990637']", , ,1.733,3304.0 +6717.0,pay order,2019-09-06 08:16:16.000Z, , ,"['990631']", , ,1.49,683.99 +6718.0,package delivered,2019-09-06 08:19:07.000Z, , , ,"['660383']", ,3.185,3838.98 +6719.0,pick item,2019-09-06 08:26:54.000Z, ,"['882565']", , , ,0.166,799.0 +6720.0,pay order,2019-09-06 08:28:08.000Z, , ,"['990502']", , ,2.2430000000000003,264.97 +6721.0,package delivered,2019-09-06 08:30:50.000Z, , , ,"['660382']", ,3.607,5353.98 +6722.0,item out of stock,2019-09-06 08:31:50.000Z, ,"['882581']", , , ,0.483,1099.0 +6723.0,pick item,2019-09-06 08:32:57.000Z, ,"['882511']", , , ,0.28,449.0 +6724.0,reorder item,2019-09-06 08:32:58.000Z, ,"['882504']", , , ,0.2,39.99 +6725.0,pick item,2019-09-06 08:42:00.000Z, ,"['882537']", , , ,0.98,129.99 +6726.0,pick item,2019-09-06 08:42:37.000Z, ,"['882580']", , , ,0.172,699.0 +6727.0,pick item,2019-09-06 08:47:33.000Z, ,"['882540']", , , ,0.172,699.0 +6728.0,pick item,2019-09-06 08:52:33.000Z, ,"['882300']", , , ,1.37,2500.0 +6729.0,pick item,2019-09-06 09:01:27.000Z, ,"['882583']", , , ,0.88,89.99 +6730.0,pick item,2019-09-06 09:02:56.000Z, ,"['882570']", , , ,0.188,1149.0 +6731.0,pick item,2019-09-06 09:06:34.000Z, ,"['882382']", , , ,0.483,495.0 +6732.0,pick item,2019-09-06 09:07:09.000Z, ,"['882544']", , , ,0.166,799.0 +6733.0,pick item,2019-09-06 09:27:33.000Z, ,"['882352']", , , ,0.44,476.0 +6734.0,create package,2019-09-06 09:27:33.000Z, ,"['882347','882526','882346','882400','881568']", ,"['660390']", ,1.589,1447.97 +6735.0,place order,2019-09-06 09:27:36.000Z, ,"['882586','882590','882585','882587','882589','882588']","['990640']", , ,3.845,4282.97 +6736.0,confirm order,2019-09-06 09:28:33.000Z, , ,"['990626']", , ,3.389,1533.95 +6737.0,confirm order,2019-09-06 09:38:03.000Z, , ,"['990624']", , ,0.483,84.99 +6738.0,pick item,2019-09-06 09:38:26.000Z, ,"['882506']", , , ,0.28,89.99 +6739.0,confirm order,2019-09-06 09:39:18.000Z, , ,"['990634']", , ,1.194,2508.98 +6740.0,send package,2019-09-06 09:50:22.000Z, , , ,"['660384']", ,4.886,8312.98 +6741.0,pick item,2019-09-06 09:57:15.000Z, ,"['882577']", , , ,0.483,1099.0 +6742.0,item out of stock,2019-09-06 10:02:09.000Z, ,"['882568']", , , ,0.28,89.99 +6743.0,confirm order,2019-09-06 10:20:57.000Z, , ,"['990639']", , ,1.3630000000000002,1193.99 +6744.0,reorder item,2019-09-06 10:27:46.000Z, ,"['882393']", , , ,1.37,2500.0 +6745.0,pick item,2019-09-06 10:37:02.000Z, ,"['881207']", , , ,1.37,2500.0 +6746.0,pick item,2019-09-06 10:42:43.000Z, ,"['882416']", , , ,0.28,89.99 +6747.0,confirm order,2019-09-06 11:13:41.000Z, , ,"['990640']", , ,3.845,4282.97 +6748.0,pick item,2019-09-06 11:13:42.000Z, ,"['882078']", , , ,0.483,79.99 +6749.0,create package,2019-09-06 11:13:42.000Z, ,"['882524','882523','882522','881933','882245','881590']", ,"['660391']", ,4.243,975.95 +6750.0,place order,2019-09-06 11:14:59.000Z, ,"['882591','882593','882592']","['990641']", , ,2.013,3753.0 +6751.0,pay order,2019-09-06 11:22:09.000Z, , ,"['990628']", , ,4.052,5523.98 +6752.0,item out of stock,2019-09-06 11:26:40.000Z, ,"['882535']", , , ,0.88,89.99 +6753.0,package delivered,2019-09-06 11:28:25.000Z, , , ,"['660384']", ,4.886,8312.98 +6754.0,item out of stock,2019-09-06 11:58:36.000Z, ,"['882586']", , , ,1.25,2200.0 +6755.0,pick item,2019-09-06 12:22:43.000Z, ,"['882566']", , , ,1.25,2200.0 +6756.0,pay order,2019-09-06 12:25:58.000Z, , ,"['990595']", , ,3.737,7181.99 +6757.0,pick item,2019-09-06 12:38:50.000Z, ,"['882396']", , , ,0.166,799.0 +6758.0,pick item,2019-09-06 12:38:59.000Z, ,"['882328']", , , ,0.188,1149.0 +6759.0,place order,2019-09-06 12:49:45.000Z, ,"['882594']","['990642']", , ,0.44,481.0 +6760.0,send package,2019-09-06 12:50:29.000Z, , , ,"['660391']", ,4.243,975.95 +6761.0,pick item,2019-09-06 12:51:10.000Z, ,"['882571']", , , ,1.25,2200.0 +6762.0,pick item,2019-09-06 12:51:21.000Z, ,"['882562']", , , ,0.44,476.0 +6763.0,pay order,2019-09-06 12:51:39.000Z, , ,"['990625']", , ,1.65,2954.0 +6764.0,pick item,2019-09-06 12:52:23.000Z, ,"['882428']", , , ,0.21,529.0 +6765.0,create package,2019-09-06 12:52:23.000Z, ,"['882552','882543','882428','882553','881207','881811','882544']", ,"['660392']", ,4.382,5435.98 +6766.0,pick item,2019-09-06 12:57:05.000Z, ,"['882076']", , , ,1.48,199.99 +6767.0,confirm order,2019-09-06 12:57:17.000Z, , ,"['990638']", , ,2.6180000000000003,2487.98 +6768.0,send package,2019-09-06 13:16:38.000Z, , , ,"['660390']", ,1.589,1447.97 +6769.0,pick item,2019-09-06 13:21:29.000Z, ,"['882582']", , , ,1.28,149.99 +6770.0,item out of stock,2019-09-06 13:25:41.000Z, ,"['882564']", , , ,0.2,39.99 +6771.0,package delivered,2019-09-06 13:29:54.000Z, , , ,"['660390']", ,1.589,1447.97 +6772.0,failed delivery,2019-09-06 13:29:56.000Z, , , ,"['660373']", ,4.163,965.96 +6773.0,pick item,2019-09-06 13:31:57.000Z, ,"['882414']", , , ,1.37,2500.0 +6774.0,pay order,2019-09-06 13:46:48.000Z, , ,"['990509']", , ,4.993,3641.96 +6775.0,pick item,2019-09-06 14:05:28.000Z, ,"['882584']", , , ,0.483,1099.0 +6776.0,pick item,2019-09-06 14:11:41.000Z, ,"['882592']", , , ,0.483,1099.0 +6777.0,pick item,2019-09-06 14:11:44.000Z, ,"['882532']", , , ,0.483,79.99 +6778.0,pick item,2019-09-06 14:13:24.000Z, ,"['882534']", , , ,1.28,149.99 +6779.0,create package,2019-09-06 14:13:24.000Z, ,"['882566','882539','882542','882541','882584','881803','882570','882583','882550','882571','882547','882538','882540','882548','882455','882551']", ,"['660393']", ,12.076,14263.94 +6780.0,pay order,2019-09-06 14:14:12.000Z, , ,"['990606']", , ,0.64,520.99 +6781.0,confirm order,2019-09-06 14:18:11.000Z, , ,"['990642']", , ,0.44,481.0 +6782.0,pay order,2019-09-06 14:21:05.000Z, , ,"['990630']", , ,3.758,1972.96 +6783.0,failed delivery,2019-09-06 14:36:18.000Z, , , ,"['660387']", ,2.2430000000000003,1747.99 +6784.0,pay order,2019-09-06 14:40:33.000Z, , ,"['990588']", , ,4.4030000000000005,614.95 +6785.0,reorder item,2019-09-06 14:45:05.000Z, ,"['882563']", , , ,0.2,39.99 +6786.0,pay order,2019-09-06 14:46:50.000Z, , ,"['990585']", , ,1.046,1756.0 +6787.0,pick item,2019-09-06 14:49:34.000Z, ,"['882587']", , , ,0.483,1099.0 +6788.0,pick item,2019-09-06 14:51:40.000Z, ,"['882469']", , , ,1.48,199.99 +6789.0,pick item,2019-09-06 14:54:51.000Z, ,"['882533']", , , ,0.483,79.99 +6790.0,pay order,2019-09-06 14:55:59.000Z, , ,"['990640']", , ,3.845,4282.97 +6791.0,place order,2019-09-06 14:59:18.000Z, ,"['882596','882597','882595']","['990643']", , ,1.93,1159.99 +6792.0,package delivered,2019-09-06 15:19:21.000Z, , , ,"['660391']", ,4.243,975.95 +6793.0,reorder item,2019-09-06 15:27:41.000Z, ,"['882535']", , , ,0.88,89.99 +6794.0,confirm order,2019-09-06 15:59:38.000Z, , ,"['990635']", , ,3.934,6633.99 +6795.0,send package,2019-09-06 16:16:11.000Z, , , ,"['660389']", ,6.475,6493.95 +6796.0,pay order,2019-09-06 16:39:23.000Z, , ,"['990604']", , ,2.5660000000000003,1839.97 +6797.0,send package,2019-09-06 17:06:04.000Z, , , ,"['660386']", ,4.276,2741.97 +6798.0,place order,2019-09-06 17:18:23.000Z, ,"['882599','882600','882598']","['990644']", , ,0.6779999999999999,1772.99 +6799.0,item out of stock,2019-09-06 17:21:16.000Z, ,"['882594']", , , ,0.44,476.0 +6800.0,place order,2019-09-06 20:16:21.000Z, ,"['882601','882602','882603']","['990645']", , ,1.73,4353.0 +6801.0,create package,2019-09-06 23:00:00.000Z, ,"['882519','882521','882396','882352']", ,"['660394']", ,1.074,2513.99 +6802.0,place order,2019-09-07 14:38:00.000Z, ,"['882604']","['990646']", , ,0.188,1154.0 +6803.0,place order,2019-09-08 15:09:54.000Z, ,"['882606','882608','882611','882607','882609','882605','882610']","['990647']", , ,4.01,8180.0 +6804.0,payment reminder,2019-09-08 19:31:51.000Z, , ,"['990515']", , ,3.115,2132.98 +6805.0,confirm order,2019-09-09 06:16:12.000Z, , ,"['990641']", , ,2.013,3753.0 +6806.0,place order,2019-09-09 06:26:16.000Z, ,"['882614','882612','882616','882613','882617','882615']","['990648']", , ,5.069,5031.98 +6807.0,pay order,2019-09-09 07:07:41.000Z, , ,"['990597']", , ,0.82,510.99 +6808.0,pick item,2019-09-09 07:08:27.000Z, ,"['882599']", , , ,0.188,1149.0 +6809.0,reorder item,2019-09-09 07:10:42.000Z, ,"['882564']", , , ,0.2,39.99 +6810.0,pick item,2019-09-09 07:39:13.000Z, ,"['882554']", , , ,0.188,1149.0 +6811.0,pick item,2019-09-09 07:39:54.000Z, ,"['882549']", , , ,1.48,199.99 +6812.0,reorder item,2019-09-09 07:42:20.000Z, ,"['882560']", , , ,1.48,199.99 +6813.0,item out of stock,2019-09-09 07:55:42.000Z, ,"['882590']", , , ,0.28,89.99 +6814.0,pick item,2019-09-09 07:57:08.000Z, ,"['882517']", , , ,0.166,799.0 +6815.0,pick item,2019-09-09 08:01:47.000Z, ,"['882421']", , , ,0.44,476.0 +6816.0,confirm order,2019-09-09 08:05:46.000Z, , ,"['990647']", , ,4.01,8180.0 +6817.0,pay order,2019-09-09 08:08:08.000Z, , ,"['990517']", , ,3.777,8031.0 +6818.0,pick item,2019-09-09 08:21:36.000Z, ,"['882605']", , , ,1.25,2200.0 +6819.0,package delivered,2019-09-09 08:27:07.000Z, , , ,"['660386']", ,4.276,2741.97 +6820.0,place order,2019-09-09 08:29:11.000Z, ,"['882618','882622','882621','882620','882619']","['990649']", , ,4.48,3839.98 +6821.0,confirm order,2019-09-09 08:30:09.000Z, , ,"['990643']", , ,1.93,1159.99 +6822.0,send package,2019-09-09 08:30:54.000Z, , , ,"['660393']", ,12.076,14263.94 +6823.0,pick item,2019-09-09 08:32:45.000Z, ,"['882591']", , , ,1.25,2200.0 +6824.0,pick item,2019-09-09 08:39:32.000Z, ,"['882529']", , , ,0.38,29.99 +6825.0,pick item,2019-09-09 08:40:39.000Z, ,"['882596']", , , ,1.28,149.99 +6826.0,pick item,2019-09-09 08:41:10.000Z, ,"['882614']", , , ,1.25,2200.0 +6827.0,pick item,2019-09-09 08:48:45.000Z, ,"['882567']", , , ,0.483,495.0 +6828.0,pick item,2019-09-09 08:51:45.000Z, ,"['882496']", , , ,1.28,149.99 +6829.0,pick item,2019-09-09 08:54:29.000Z, ,"['882600']", , , ,0.21,529.0 +6830.0,item out of stock,2019-09-09 09:03:39.000Z, ,"['882595']", , , ,0.21,529.0 +6831.0,package delivered,2019-09-09 09:14:15.000Z, , , ,"['660388']", ,1.733,2695.0 +6832.0,pick item,2019-09-09 09:22:16.000Z, ,"['882546']", , , ,0.28,89.99 +6833.0,item out of stock,2019-09-09 09:27:45.000Z, ,"['882561']", , , ,0.188,1149.0 +6834.0,pick item,2019-09-09 09:28:48.000Z, ,"['882593']", , , ,0.28,449.0 +6835.0,pick item,2019-09-09 09:34:24.000Z, ,"['882380']", , , ,0.38,29.99 +6836.0,confirm order,2019-09-09 09:39:36.000Z, , ,"['990649']", , ,4.48,3839.98 +6837.0,reorder item,2019-09-09 09:48:34.000Z, ,"['882561']", , , ,0.188,1149.0 +6838.0,item out of stock,2019-09-09 09:51:32.000Z, ,"['882569']", , , ,0.483,495.0 +6839.0,item out of stock,2019-09-09 10:03:26.000Z, ,"['882607']", , , ,0.483,1099.0 +6840.0,pay order,2019-09-09 10:12:21.000Z, , ,"['990553']", , ,0.468,1603.0 +6841.0,place order,2019-09-09 10:18:10.000Z, ,"['882625','882623','882624']","['990650']", , ,3.213,3503.99 +6842.0,failed delivery,2019-09-09 10:20:10.000Z, , , ,"['660387']", ,2.2430000000000003,1747.99 +6843.0,confirm order,2019-09-09 10:39:27.000Z, , ,"['990645']", , ,1.73,4353.0 +6844.0,send package,2019-09-09 10:58:47.000Z, , , ,"['660392']", ,4.382,5435.98 +6845.0,package delivered,2019-09-09 11:00:13.000Z, , , ,"['660389']", ,6.475,6493.95 +6846.0,package delivered,2019-09-09 11:05:42.000Z, , , ,"['660393']", ,12.076,14263.94 +6847.0,item out of stock,2019-09-09 11:08:22.000Z, ,"['882612']", , , ,1.48,199.99 +6848.0,pay order,2019-09-09 11:38:46.000Z, , ,"['990385']", , ,2.305,3732.99 +6849.0,place order,2019-09-09 11:56:07.000Z, ,"['882630','882629','882628','882627','882626']","['990651']", , ,1.467,1920.99 +6850.0,pick item,2019-09-09 12:04:05.000Z, ,"['882017']", , , ,0.98,129.99 +6851.0,create package,2019-09-09 12:04:05.000Z, ,"['882447','882017','882414']", ,"['660395']", ,3.23,2719.98 +6852.0,pick item,2019-09-09 12:17:33.000Z, ,"['882608']", , , ,1.25,2200.0 +6853.0,reorder item,2019-09-09 12:27:38.000Z, ,"['882581']", , , ,0.483,1099.0 +6854.0,pick item,2019-09-09 12:27:52.000Z, ,"['882015']", , , ,0.483,1099.0 +6855.0,pick item,2019-09-09 12:42:13.000Z, ,"['882604']", , , ,0.188,1149.0 +6856.0,create package,2019-09-09 12:42:13.000Z, ,"['882577','882565','882562','882295','882343','882433']", ,"['660396']", ,4.343999999999999,2852.98 +6857.0,failed delivery,2019-09-09 12:48:18.000Z, , , ,"['660387']", ,2.2430000000000003,1747.99 +6858.0,reorder item,2019-09-09 13:06:22.000Z, ,"['882607']", , , ,0.483,1099.0 +6859.0,pick item,2019-09-09 13:22:06.000Z, ,"['882500']", , , ,0.28,449.0 +6860.0,confirm order,2019-09-09 13:28:51.000Z, , ,"['990651']", , ,1.467,1920.99 +6861.0,item out of stock,2019-09-09 13:29:13.000Z, ,"['882611']", , , ,0.188,1149.0 +6862.0,pick item,2019-09-09 13:45:27.000Z, ,"['882602']", , , ,0.172,699.0 +6863.0,pick item,2019-09-09 13:58:51.000Z, ,"['882081']", , , ,0.98,129.99 +6864.0,place order,2019-09-09 14:12:01.000Z, ,"['882633','882631','882632']","['990652']", , ,1.24,1942.99 +6865.0,pick item,2019-09-09 14:16:14.000Z, ,"['882624']", , , ,1.48,199.99 +6866.0,item out of stock,2019-09-09 14:29:25.000Z, ,"['882626']", , , ,0.38,29.99 +6867.0,confirm order,2019-09-09 14:35:43.000Z, , ,"['990633']", , ,3.945,4978.99 +6868.0,pick item,2019-09-09 14:39:14.000Z, ,"['882424']", , , ,0.88,89.99 +6869.0,confirm order,2019-09-09 14:54:21.000Z, , ,"['990646']", , ,0.188,1154.0 +6870.0,pick item,2019-09-09 15:00:49.000Z, ,"['882623']", , , ,0.483,1099.0 +6871.0,create package,2019-09-09 15:00:49.000Z, ,"['882207','881499']", ,"['660397']", ,1.536,3299.0 +6872.0,failed delivery,2019-09-09 15:00:58.000Z, , , ,"['660373']", ,4.163,965.96 +6873.0,item out of stock,2019-09-09 15:19:33.000Z, ,"['882576']", , , ,1.25,2200.0 +6874.0,pay order,2019-09-09 15:19:37.000Z, , ,"['990582']", , ,1.567,2379.99 +6875.0,confirm order,2019-09-09 15:25:29.000Z, , ,"['990644']", , ,0.6779999999999999,1772.99 +6876.0,place order,2019-09-09 15:43:50.000Z, ,"['882636','882634','882635']","['990653']", , ,1.921,3849.0 +6877.0,pay order,2019-09-09 15:53:55.000Z, , ,"['990515']", , ,3.115,2132.98 +6878.0,pick item,2019-09-09 16:00:06.000Z, ,"['882610']", , , ,0.172,699.0 +6879.0,confirm order,2019-09-09 17:07:54.000Z, , ,"['990650']", , ,3.213,3503.99 +6880.0,pick item,2019-09-09 17:09:07.000Z, ,"['882561']", , , ,0.188,1149.0 +6881.0,create package,2019-09-09 17:09:07.000Z, ,"['882529','882532','882534','882533','882530']", ,"['660398']", ,2.906,429.95 +6882.0,place order,2019-09-09 17:51:05.000Z, ,"['882639','882638','882637']","['990654']", , ,2.838,3803.99 +6883.0,reorder item,2019-09-09 19:49:45.000Z, ,"['882557']", , , ,1.37,2500.0 +6884.0,pick item,2019-09-09 20:06:03.000Z, ,"['882588']", , , ,0.88,89.99 +6885.0,place order,2019-09-09 21:21:44.000Z, ,"['882642','882640','882644','882641','882643']","['990655']", , ,4.81,2974.96 +6886.0,item out of stock,2019-09-10 06:32:41.000Z, ,"['882527']", , , ,0.28,449.0 +6887.0,reorder item,2019-09-10 07:00:07.000Z, ,"['882612']", , , ,1.48,199.99 +6888.0,pick item,2019-09-10 07:00:42.000Z, ,"['882361']", , , ,0.28,89.99 +6889.0,reorder item,2019-09-10 07:11:30.000Z, ,"['882569']", , , ,0.483,495.0 +6890.0,package delivered,2019-09-10 07:15:06.000Z, , , ,"['660387']", ,2.2430000000000003,1747.99 +6891.0,pick item,2019-09-10 07:16:43.000Z, ,"['882393']", , , ,1.37,2500.0 +6892.0,pick item,2019-09-10 07:16:47.000Z, ,"['882641']", , , ,0.98,129.99 +6893.0,place order,2019-09-10 07:17:40.000Z, ,"['882646','882645','882648','882647']","['990656']", , ,1.514,2132.98 +6894.0,pick item,2019-09-10 07:21:07.000Z, ,"['882296']", , , ,0.172,699.0 +6895.0,create package,2019-09-10 07:21:07.000Z, ,"['882596','882220','882559','882556','882528']", ,"['660399']", ,4.453,4314.98 +6896.0,package delivered,2019-09-10 07:39:47.000Z, , , ,"['660373']", ,4.163,965.96 +6897.0,send package,2019-09-10 07:49:09.000Z, , , ,"['660394']", ,1.074,2513.99 +6898.0,pay order,2019-09-10 07:59:42.000Z, , ,"['990627']", , ,2.343,719.98 +6899.0,pick item,2019-09-10 08:04:03.000Z, ,"['882053']", , , ,1.48,199.99 +6900.0,pay order,2019-09-10 08:04:21.000Z, , ,"['990599']", , ,1.42,610.99 +6901.0,pick item,2019-09-10 08:15:52.000Z, ,"['882622']", , , ,0.98,129.99 +6902.0,pick item,2019-09-10 08:18:13.000Z, ,"['882642']", , , ,0.78,99.99 +6903.0,send package,2019-09-10 08:23:19.000Z, , , ,"['660399']", ,4.453,4314.98 +6904.0,send package,2019-09-10 08:26:04.000Z, , , ,"['660396']", ,4.343999999999999,2852.98 +6905.0,send package,2019-09-10 08:31:00.000Z, , , ,"['660395']", ,3.23,2719.98 +6906.0,send package,2019-09-10 08:36:18.000Z, , , ,"['660398']", ,2.906,429.95 +6907.0,pick item,2019-09-10 08:39:18.000Z, ,"['882503']", , , ,0.21,529.0 +6908.0,pick item,2019-09-10 08:39:23.000Z, ,"['882585']", , , ,0.172,699.0 +6909.0,create package,2019-09-10 08:39:23.000Z, ,"['882554','882424','882324','882592','882382','882555','882380','882591','882593','882053','882421']", ,"['660400']", ,6.24,7515.97 +6910.0,pay order,2019-09-10 08:46:02.000Z, , ,"['990622']", , ,1.248,1343.98 +6911.0,reorder item,2019-09-10 08:49:05.000Z, ,"['882611']", , , ,0.188,1149.0 +6912.0,place order,2019-09-10 08:55:07.000Z, ,"['882649']","['990657']", , ,0.483,1104.0 +6913.0,pay order,2019-09-10 08:55:31.000Z, , ,"['990633']", , ,3.945,4978.99 +6914.0,package delivered,2019-09-10 08:57:10.000Z, , , ,"['660398']", ,2.906,429.95 +6915.0,pick item,2019-09-10 08:59:49.000Z, ,"['882627']", , , ,0.495,129.0 +6916.0,package delivered,2019-09-10 09:00:02.000Z, , , ,"['660392']", ,4.382,5435.98 +6917.0,confirm order,2019-09-10 09:00:39.000Z, , ,"['990648']", , ,5.069,5031.98 +6918.0,pick item,2019-09-10 09:04:40.000Z, ,"['881824']", , , ,0.28,89.99 +6919.0,pick item,2019-09-10 09:05:10.000Z, ,"['882606']", , , ,0.172,699.0 +6920.0,pick item,2019-09-10 09:12:05.000Z, ,"['882644']", , , ,0.2,39.99 +6921.0,package delivered,2019-09-10 09:15:05.000Z, , , ,"['660394']", ,1.074,2513.99 +6922.0,pick item,2019-09-10 09:25:15.000Z, ,"['882643']", , , ,1.48,199.99 +6923.0,pick item,2019-09-10 09:25:29.000Z, ,"['882648']", , , ,0.166,799.0 +6924.0,pick item,2019-09-10 09:46:57.000Z, ,"['882640']", , , ,1.37,2500.0 +6925.0,item out of stock,2019-09-10 09:48:28.000Z, ,"['882573']", , , ,0.166,799.0 +6926.0,payment reminder,2019-09-10 10:03:02.000Z, , ,"['990543']", , ,3.18,900.97 +6927.0,pick item,2019-09-10 10:11:20.000Z, ,"['882631']", , , ,0.188,1149.0 +6928.0,pick item,2019-09-10 10:17:49.000Z, ,"['882647']", , , ,0.28,89.99 +6929.0,pay order,2019-09-10 10:23:47.000Z, , ,"['990492']", , ,2.596,2809.98 +6930.0,item out of stock,2019-09-10 10:28:27.000Z, ,"['882525']", , , ,0.44,476.0 +6931.0,pay order,2019-09-10 10:43:15.000Z, , ,"['990611']", , ,1.09,623.99 +6932.0,pick item,2019-09-10 10:48:10.000Z, ,"['882625']", , , ,1.25,2200.0 +6933.0,pick item,2019-09-10 10:50:31.000Z, ,"['882619']", , , ,1.37,2500.0 +6934.0,create package,2019-09-10 10:50:31.000Z, ,"['881824','882416','882582','882578','882580','882537','882506','882604','882328','882503']", ,"['660401']", ,4.341,4570.95 +6935.0,pick item,2019-09-10 10:57:47.000Z, ,"['882489']", , , ,0.28,449.0 +6936.0,pick item,2019-09-10 11:03:36.000Z, ,"['882176']", , , ,1.28,149.99 +6937.0,send package,2019-09-10 11:08:06.000Z, , , ,"['660400']", ,6.24,7515.97 +6938.0,package delivered,2019-09-10 11:09:22.000Z, , , ,"['660395']", ,3.23,2719.98 +6939.0,place order,2019-09-10 11:10:02.000Z, ,"['882652','882650','882653','882651']","['990658']", , ,2.431,2482.98 +6940.0,pay order,2019-09-10 11:12:43.000Z, , ,"['990642']", , ,0.44,481.0 +6941.0,pick item,2019-09-10 11:21:11.000Z, ,"['882649']", , , ,0.483,1099.0 +6942.0,pick item,2019-09-10 11:32:17.000Z, ,"['882650']", , , ,0.188,1149.0 +6943.0,pick item,2019-09-10 11:45:45.000Z, ,"['882246']", , , ,0.28,89.99 +6944.0,confirm order,2019-09-10 12:02:45.000Z, , ,"['990652']", , ,1.24,1942.99 +6945.0,pick item,2019-09-10 12:05:36.000Z, ,"['882603']", , , ,1.37,2500.0 +6946.0,pick item,2019-09-10 12:11:09.000Z, ,"['882613']", , , ,0.483,1099.0 +6947.0,item out of stock,2019-09-10 12:16:51.000Z, ,"['882620']", , , ,0.44,476.0 +6948.0,pick item,2019-09-10 12:29:14.000Z, ,"['882628']", , , ,0.21,529.0 +6949.0,pick item,2019-09-10 12:37:13.000Z, ,"['882235']", , , ,0.44,476.0 +6950.0,place order,2019-09-10 12:39:51.000Z, ,"['882658','882657','882655','882654','882656']","['990659']", , ,2.8680000000000003,2511.98 +6951.0,send package,2019-09-10 12:44:48.000Z, , , ,"['660397']", ,1.536,3299.0 +6952.0,pick item,2019-09-10 12:46:57.000Z, ,"['882653']", , , ,0.98,129.99 +6953.0,create package,2019-09-10 12:46:57.000Z, ,"['882511','882614','882649','882235','882613','882300']", ,"['660402']", ,4.306,7823.0 +6954.0,pick item,2019-09-10 12:48:46.000Z, ,"['882654']", , , ,0.188,1149.0 +6955.0,pick item,2019-09-10 12:55:33.000Z, ,"['882634']", , , ,1.25,2200.0 +6956.0,pay order,2019-09-10 12:56:54.000Z, , ,"['990570']", , ,0.446,1253.0 +6957.0,pick item,2019-09-10 13:00:45.000Z, ,"['882563']", , , ,0.2,39.99 +6958.0,confirm order,2019-09-10 13:05:48.000Z, , ,"['990653']", , ,1.921,3849.0 +6959.0,pick item,2019-09-10 13:06:44.000Z, ,"['882569']", , , ,0.483,495.0 +6960.0,reorder item,2019-09-10 13:22:29.000Z, ,"['882626']", , , ,0.38,29.99 +6961.0,reorder item,2019-09-10 13:24:25.000Z, ,"['882491']", , , ,0.88,89.99 +6962.0,pick item,2019-09-10 13:24:50.000Z, ,"['882615']", , , ,0.166,799.0 +6963.0,pay order,2019-09-10 13:32:44.000Z, , ,"['990562']", , ,0.483,500.0 +6964.0,pick item,2019-09-10 13:38:29.000Z, ,"['882646']", , , ,0.88,89.99 +6965.0,create package,2019-09-10 13:38:29.000Z, ,"['882625','882076','882623','882622','882078','882624','882619']", ,"['660403']", ,7.526,6408.96 +6966.0,payment reminder,2019-09-10 13:51:09.000Z, , ,"['990514']", , ,1.758,3693.99 +6967.0,confirm order,2019-09-10 13:54:10.000Z, , ,"['990655']", , ,4.81,2974.96 +6968.0,package delivered,2019-09-10 13:54:33.000Z, , , ,"['660396']", ,4.343999999999999,2852.98 +6969.0,confirm order,2019-09-10 14:12:30.000Z, , ,"['990658']", , ,2.431,2482.98 +6970.0,pick item,2019-09-10 14:24:41.000Z, ,"['882493']", , , ,1.28,149.99 +6971.0,place order,2019-09-10 14:39:30.000Z, ,"['882659','882660','882662','882661']","['990660']", , ,3.823,919.97 +6972.0,pick item,2019-09-10 14:39:43.000Z, ,"['882638']", , , ,0.188,1149.0 +6973.0,payment reminder,2019-09-10 14:54:16.000Z, , ,"['990426']", , ,4.673,4343.97 +6974.0,pick item,2019-09-10 15:00:52.000Z, ,"['882629']", , , ,0.172,699.0 +6975.0,package delivered,2019-09-10 15:14:26.000Z, , , ,"['660397']", ,1.536,3299.0 +6976.0,pick item,2019-09-10 15:15:22.000Z, ,"['882657']", , , ,1.48,199.99 +6977.0,pick item,2019-09-10 15:15:27.000Z, ,"['882655']", , , ,0.21,529.0 +6978.0,pick item,2019-09-10 15:19:40.000Z, ,"['882597']", , , ,0.44,476.0 +6979.0,reorder item,2019-09-10 15:29:04.000Z, ,"['882586']", , , ,1.25,2200.0 +6980.0,pick item,2019-09-10 15:33:33.000Z, ,"['882639']", , , ,1.37,2500.0 +6981.0,create package,2019-09-10 15:33:33.000Z, ,"['882246','882081','882585','882587','882588']", ,"['660404']", ,2.795,2107.97 +6982.0,payment reminder,2019-09-10 15:34:24.000Z, , ,"['990521']", , ,2.756,2198.95 +6983.0,package delivered,2019-09-10 15:45:27.000Z, , , ,"['660399']", ,4.453,4314.98 +6984.0,confirm order,2019-09-10 16:09:45.000Z, , ,"['990654']", , ,2.838,3803.99 +6985.0,reorder item,2019-09-10 16:12:43.000Z, ,"['882579']", , , ,0.2,39.99 +6986.0,pay order,2019-09-10 16:13:28.000Z, , ,"['990610']", , ,2.822,4096.99 +6987.0,send package,2019-09-10 16:14:02.000Z, , , ,"['660403']", ,7.526,6408.96 +6988.0,pick item,2019-09-10 16:35:25.000Z, ,"['882473']", , , ,0.483,495.0 +6989.0,place order,2019-09-10 16:38:47.000Z, ,"['882663']","['990661']", , ,0.98,134.99 +6990.0,send package,2019-09-10 16:42:40.000Z, , , ,"['660402']", ,4.306,7823.0 +6991.0,send package,2019-09-10 17:09:54.000Z, , , ,"['660401']", ,4.341,4570.95 +6992.0,pick item,2019-09-10 17:38:14.000Z, ,"['882637']", , , ,1.28,149.99 +6993.0,pick item,2019-09-10 18:09:54.000Z, ,"['882558']", , , ,0.172,699.0 +6994.0,confirm order,2019-09-10 18:35:25.000Z, , ,"['990661']", , ,0.98,134.99 +6995.0,place order,2019-09-10 19:35:56.000Z, ,"['882666','882671','882667','882668','882672','882673','882669','882670','882664','882665']","['990662']", , ,5.837999999999999,5764.97 +6996.0,place order,2019-09-11 03:53:30.000Z, ,"['882675','882674','882676']","['990663']", , ,1.346,1213.98 +6997.0,pick item,2019-09-11 06:14:04.000Z, ,"['881457']", , , ,0.188,1149.0 +6998.0,pick item,2019-09-11 06:49:18.000Z, ,"['882659']", , , ,0.88,89.99 +6999.0,create package,2019-09-11 06:49:18.000Z, ,"['882469','882657','882599','882600','882655','882654']", ,"['660405']", ,3.756,3755.98 +7000.0,pay order,2019-09-11 06:50:50.000Z, , ,"['990576']", , ,0.655,1803.0 +7001.0,payment reminder,2019-09-11 06:52:50.000Z, , ,"['990549']", , ,1.865,2634.0 +7002.0,reorder item,2019-09-11 06:52:54.000Z, ,"['882595']", , , ,0.21,529.0 +7003.0,reorder item,2019-09-11 07:02:45.000Z, ,"['882525']", , , ,0.44,476.0 +7004.0,payment reminder,2019-09-11 07:09:01.000Z, , ,"['990547']", , ,2.2030000000000003,710.98 +7005.0,reorder item,2019-09-11 07:10:27.000Z, ,"['882527']", , , ,0.28,449.0 +7006.0,package delivered,2019-09-11 07:38:19.000Z, , , ,"['660401']", ,4.341,4570.95 +7007.0,reorder item,2019-09-11 07:56:42.000Z, ,"['882620']", , , ,0.44,476.0 +7008.0,confirm order,2019-09-11 07:57:03.000Z, , ,"['990663']", , ,1.346,1213.98 +7009.0,pick item,2019-09-11 07:58:04.000Z, ,"['882601']", , , ,0.188,1149.0 +7010.0,pay order,2019-09-11 08:29:42.000Z, , ,"['990522']", , ,2.043,324.97 +7011.0,place order,2019-09-11 08:30:38.000Z, ,"['882680','882678','882677','882679']","['990664']", , ,2.925,2503.98 +7012.0,pick item,2019-09-11 08:33:29.000Z, ,"['882636']", , , ,0.188,1149.0 +7013.0,confirm order,2019-09-11 08:36:17.000Z, , ,"['990660']", , ,3.823,919.97 +7014.0,pick item,2019-09-11 08:38:05.000Z, ,"['882545']", , , ,0.172,699.0 +7015.0,payment reminder,2019-09-11 09:06:27.000Z, , ,"['990546']", , ,1.511,3260.98 +7016.0,pick item,2019-09-11 09:14:14.000Z, ,"['882617']", , , ,0.21,529.0 +7017.0,pick item,2019-09-11 09:15:56.000Z, ,"['882479']", , , ,1.37,2500.0 +7018.0,pick item,2019-09-11 09:21:48.000Z, ,"['882665']", , , ,0.2,39.99 +7019.0,create package,2019-09-11 09:21:48.000Z, ,"['882601','882549','882636','882647','882567','882646','882602','882546','882603','882648','882569','882634']", ,"['660406']", ,7.22,9955.96 +7020.0,item out of stock,2019-09-11 09:25:05.000Z, ,"['882652']", , , ,0.483,1099.0 +7021.0,item out of stock,2019-09-11 09:25:59.000Z, ,"['882598']", , , ,0.28,89.99 +7022.0,pick item,2019-09-11 09:28:01.000Z, ,"['881605']", , , ,0.44,476.0 +7023.0,pick item,2019-09-11 09:29:22.000Z, ,"['882660']", , , ,0.98,129.99 +7024.0,confirm order,2019-09-11 09:46:23.000Z, , ,"['990662']", , ,5.837999999999999,5764.97 +7025.0,pick item,2019-09-11 09:47:30.000Z, ,"['882663']", , , ,0.98,129.99 +7026.0,reorder item,2019-09-11 09:53:41.000Z, ,"['882590']", , , ,0.28,89.99 +7027.0,pay order,2019-09-11 10:01:14.000Z, , ,"['990566']", , ,3.299,1861.98 +7028.0,item out of stock,2019-09-11 10:06:32.000Z, ,"['882609']", , , ,0.495,129.0 +7029.0,pick item,2019-09-11 10:09:02.000Z, ,"['881392']", , , ,0.483,495.0 +7030.0,pick item,2019-09-11 10:11:34.000Z, ,"['882575']", , , ,1.25,2200.0 +7031.0,place order,2019-09-11 10:21:04.000Z, ,"['882682','882683','882681','882684','882685','882686']","['990665']", , ,2.957,5061.98 +7032.0,pay order,2019-09-11 10:27:04.000Z, , ,"['990639']", , ,1.3630000000000002,1193.99 +7033.0,pick item,2019-09-11 10:33:26.000Z, ,"['882686']", , , ,0.172,699.0 +7034.0,item out of stock,2019-09-11 10:36:54.000Z, ,"['882675']", , , ,0.483,79.99 +7035.0,item out of stock,2019-09-11 10:41:13.000Z, ,"['882682']", , , ,1.37,2500.0 +7036.0,reorder item,2019-09-11 11:29:20.000Z, ,"['882598']", , , ,0.28,89.99 +7037.0,send package,2019-09-11 11:30:17.000Z, , , ,"['660404']", ,2.795,2107.97 +7038.0,payment reminder,2019-09-11 11:38:29.000Z, , ,"['990434']", , ,2.698,1254.99 +7039.0,pick item,2019-09-11 11:59:42.000Z, ,"['882621']", , , ,0.21,529.0 +7040.0,place order,2019-09-11 12:01:55.000Z, ,"['882690','882688','882687','882691','882689','882692']","['990666']", , ,3.669,6682.98 +7041.0,pay order,2019-09-11 12:16:47.000Z, , ,"['990658']", , ,2.431,2482.98 +7042.0,pick item,2019-09-11 12:41:26.000Z, ,"['882656']", , , ,0.78,99.99 +7043.0,pick item,2019-09-11 12:45:54.000Z, ,"['882632']", , , ,0.88,89.99 +7044.0,pick item,2019-09-11 12:55:37.000Z, ,"['882574']", , , ,0.28,449.0 +7045.0,pick item,2019-09-11 12:59:28.000Z, ,"['882687']", , , ,0.2,39.99 +7046.0,item out of stock,2019-09-11 12:59:35.000Z, ,"['882673']", , , ,0.172,699.0 +7047.0,confirm order,2019-09-11 13:06:42.000Z, , ,"['990657']", , ,0.483,1104.0 +7048.0,confirm order,2019-09-11 13:15:19.000Z, , ,"['990666']", , ,3.669,6682.98 +7049.0,place order,2019-09-11 13:23:38.000Z, ,"['882696','882693','882695','882694']","['990667']", , ,1.215,1378.98 +7050.0,reorder item,2019-09-11 13:25:49.000Z, ,"['882568']", , , ,0.28,89.99 +7051.0,pick item,2019-09-11 13:33:44.000Z, ,"['881601']", , , ,0.166,799.0 +7052.0,create package,2019-09-11 13:33:44.000Z, ,"['881601','882644','882605','882640','882610','882606','882608','882642','882517','882641','882643','882500']", ,"['660407']", ,8.266,10814.96 +7053.0,pick item,2019-09-11 13:39:12.000Z, ,"['882662']", , , ,0.483,495.0 +7054.0,failed delivery,2019-09-11 13:48:59.000Z, , , ,"['660400']", ,6.24,7515.97 +7055.0,pick item,2019-09-11 13:54:55.000Z, ,"['882672']", , , ,0.28,449.0 +7056.0,pay order,2019-09-11 13:55:33.000Z, , ,"['990632']", , ,0.354,1953.0 +7057.0,pay order,2019-09-11 14:26:29.000Z, , ,"['990655']", , ,4.81,2974.96 +7058.0,pay order,2019-09-11 14:32:40.000Z, , ,"['990662']", , ,5.837999999999999,5764.97 +7059.0,pay order,2019-09-11 14:37:23.000Z, , ,"['990626']", , ,3.389,1533.95 +7060.0,pay order,2019-09-11 14:38:22.000Z, , ,"['990654']", , ,2.838,3803.99 +7061.0,pay order,2019-09-11 14:43:33.000Z, , ,"['990511']", , ,2.67,2810.99 +7062.0,pay order,2019-09-11 14:49:16.000Z, , ,"['990636']", , ,2.076,3482.99 +7063.0,package delivered,2019-09-11 14:50:46.000Z, , , ,"['660400']", ,6.24,7515.97 +7064.0,confirm order,2019-09-11 15:03:29.000Z, , ,"['990659']", , ,2.8680000000000003,2511.98 +7065.0,pick item,2019-09-11 15:04:14.000Z, ,"['882645']", , , ,0.188,1149.0 +7066.0,place order,2019-09-11 15:07:03.000Z, ,"['882697','882700','882698','882699']","['990668']", , ,0.8220000000000001,2221.99 +7067.0,pick item,2019-09-11 15:10:27.000Z, ,"['882666']", , , ,0.98,129.99 +7068.0,reorder item,2019-09-11 15:14:49.000Z, ,"['882594']", , , ,0.44,476.0 +7069.0,pick item,2019-09-11 15:19:43.000Z, ,"['882611']", , , ,0.188,1149.0 +7070.0,pay order,2019-09-11 15:20:36.000Z, , ,"['990629']", , ,1.318,1632.99 +7071.0,package delivered,2019-09-11 15:26:27.000Z, , , ,"['660402']", ,4.306,7823.0 +7072.0,item out of stock,2019-09-11 15:29:13.000Z, ,"['882520']", , , ,0.78,99.99 +7073.0,package delivered,2019-09-11 15:33:13.000Z, , , ,"['660403']", ,7.526,6408.96 +7074.0,pay order,2019-09-11 15:45:58.000Z, , ,"['990547']", , ,2.2030000000000003,710.98 +7075.0,pick item,2019-09-11 15:50:17.000Z, ,"['882620']", , , ,0.44,476.0 +7076.0,confirm order,2019-09-11 16:04:25.000Z, , ,"['990664']", , ,2.925,2503.98 +7077.0,pay order,2019-09-11 16:09:33.000Z, , ,"['990612']", , ,3.103,5804.0 +7078.0,pay order,2019-09-11 16:28:50.000Z, , ,"['990635']", , ,3.934,6633.99 +7079.0,place order,2019-09-11 16:33:53.000Z, ,"['882702','882703','882701','882704']","['990669']", , ,2.0380000000000003,4142.99 +7080.0,item out of stock,2019-09-11 17:46:55.000Z, ,"['882683']", , , ,0.172,699.0 +7081.0,pay order,2019-09-11 18:04:34.000Z, , ,"['990619']", , ,0.56,903.0 +7082.0,place order,2019-09-11 19:21:14.000Z, ,"['882705','882706','882707']","['990670']", , ,1.051,2282.99 +7083.0,create package,2019-09-11 23:00:00.000Z, ,"['882496','882493']", ,"['660408']", ,2.56,299.98 +7084.0,place order,2019-09-12 02:25:18.000Z, ,"['882709','882713','882710','882708','882711','882712']","['990671']", , ,3.477,2827.97 +7085.0,pick item,2019-09-12 06:16:58.000Z, ,"['882691']", , , ,0.2,39.99 +7086.0,pick item,2019-09-12 06:34:09.000Z, ,"['882680']", , , ,0.495,129.0 +7087.0,pick item,2019-09-12 06:35:50.000Z, ,"['882702']", , , ,1.37,2500.0 +7088.0,pick item,2019-09-12 06:47:09.000Z, ,"['881583']", , , ,0.28,89.99 +7089.0,pay order,2019-09-12 07:12:45.000Z, , ,"['990657']", , ,0.483,1104.0 +7090.0,pick item,2019-09-12 07:18:22.000Z, ,"['882390']", , , ,0.38,29.99 +7091.0,pick item,2019-09-12 07:39:20.000Z, ,"['882681']", , , ,0.38,29.99 +7092.0,pick item,2019-09-12 07:42:17.000Z, ,"['882152']", , , ,0.38,29.99 +7093.0,reorder item,2019-09-12 07:45:59.000Z, ,"['882576']", , , ,1.25,2200.0 +7094.0,send package,2019-09-12 07:49:43.000Z, , , ,"['660405']", ,3.756,3755.98 +7095.0,place order,2019-09-12 07:53:37.000Z, ,"['882715','882714','882716']","['990672']", , ,1.903,1105.99 +7096.0,pick item,2019-09-12 08:00:53.000Z, ,"['882676']", , , ,0.483,1099.0 +7097.0,create package,2019-09-12 08:00:53.000Z, ,"['882015','882545']", ,"['660409']", ,0.655,1798.0 +7098.0,send package,2019-09-12 08:10:12.000Z, , , ,"['660408']", ,2.56,299.98 +7099.0,confirm order,2019-09-12 08:17:03.000Z, , ,"['990668']", , ,0.8220000000000001,2221.99 +7100.0,pay order,2019-09-12 08:26:53.000Z, , ,"['990573']", , ,4.359,4581.98 +7101.0,pick item,2019-09-12 08:34:33.000Z, ,"['882002']", , , ,0.38,29.99 +7102.0,pick item,2019-09-12 08:35:47.000Z, ,"['882667']", , , ,0.483,1099.0 +7103.0,create package,2019-09-12 08:35:47.000Z, ,"['882561','882563','882296']", ,"['660410']", ,0.56,1887.99 +7104.0,confirm order,2019-09-12 08:40:50.000Z, , ,"['990665']", , ,2.957,5061.98 +7105.0,pick item,2019-09-12 08:41:24.000Z, ,"['881498']", , , ,0.28,89.99 +7106.0,pay order,2019-09-12 08:48:30.000Z, , ,"['990615']", , ,1.853,1152.98 +7107.0,confirm order,2019-09-12 08:51:03.000Z, , ,"['990670']", , ,1.051,2282.99 +7108.0,pick item,2019-09-12 08:58:53.000Z, ,"['882685']", , , ,0.38,29.99 +7109.0,package delivered,2019-09-12 09:01:52.000Z, , , ,"['660405']", ,3.756,3755.98 +7110.0,payment reminder,2019-09-12 09:03:04.000Z, , ,"['990555']", , ,4.263999999999999,3921.97 +7111.0,send package,2019-09-12 09:08:45.000Z, , , ,"['660406']", ,7.22,9955.96 +7112.0,pay order,2019-09-12 09:10:32.000Z, , ,"['990609']", , ,2.7430000000000003,1403.98 +7113.0,item out of stock,2019-09-12 09:15:57.000Z, ,"['882688']", , , ,0.483,1099.0 +7114.0,item out of stock,2019-09-12 09:16:10.000Z, ,"['882658']", , , ,0.21,529.0 +7115.0,pick item,2019-09-12 09:17:31.000Z, ,"['882679']", , , ,0.2,39.99 +7116.0,create package,2019-09-12 09:17:31.000Z, ,"['882361','882152','882393','882639','882638','882390','882637']", ,"['660411']", ,5.247999999999998,6448.96 +7117.0,payment reminder,2019-09-12 09:22:29.000Z, , ,"['990538']", , ,0.2,44.99 +7118.0,reorder item,2019-09-12 09:28:53.000Z, ,"['882609']", , , ,0.495,129.0 +7119.0,pick item,2019-09-12 09:30:36.000Z, ,"['882669']", , , ,0.495,129.0 +7120.0,item out of stock,2019-09-12 09:30:38.000Z, ,"['882716']", , , ,0.98,129.99 +7121.0,pick item,2019-09-12 10:02:31.000Z, ,"['882700']", , , ,0.166,799.0 +7122.0,place order,2019-09-12 10:07:02.000Z, ,"['882719','882725','882720','882722','882717','882724','882721','882723','882718']","['990673']", , ,5.848,1983.92 +7123.0,pick item,2019-09-12 10:11:19.000Z, ,"['882670']", , , ,0.88,89.99 +7124.0,pay order,2019-09-12 10:14:57.000Z, , ,"['990437']", , ,0.38,34.99 +7125.0,send package,2019-09-12 10:27:45.000Z, , , ,"['660409']", ,0.655,1798.0 +7126.0,reorder item,2019-09-12 10:32:03.000Z, ,"['882573']", , , ,0.166,799.0 +7127.0,pick item,2019-09-12 10:44:45.000Z, ,"['882711']", , , ,0.28,89.99 +7128.0,pick item,2019-09-12 10:50:24.000Z, ,"['881573']", , , ,1.28,149.99 +7129.0,item out of stock,2019-09-12 10:56:15.000Z, ,"['882704']", , , ,0.28,449.0 +7130.0,package delivered,2019-09-12 11:01:59.000Z, , , ,"['660404']", ,2.795,2107.97 +7131.0,pick item,2019-09-12 11:18:51.000Z, ,"['882701']", , , ,0.188,1149.0 +7132.0,place order,2019-09-12 11:33:51.000Z, ,"['882728','882727','882726','882730','882729']","['990674']", , ,3.773,2909.97 +7133.0,package delivered,2019-09-12 11:34:27.000Z, , , ,"['660406']", ,7.22,9955.96 +7134.0,pick item,2019-09-12 11:56:25.000Z, ,"['882729']", , , ,0.483,495.0 +7135.0,create package,2019-09-12 11:56:25.000Z, ,"['882479','882680','882629','882729','882627','882628','882679']", ,"['660412']", ,3.425,4520.99 +7136.0,confirm order,2019-09-12 12:00:48.000Z, , ,"['990673']", , ,5.848,1983.92 +7137.0,confirm order,2019-09-12 12:03:58.000Z, , ,"['990669']", , ,2.0380000000000003,4142.99 +7138.0,pick item,2019-09-12 12:20:14.000Z, ,"['882720']", , , ,0.188,1149.0 +7139.0,reorder item,2019-09-12 12:27:04.000Z, ,"['882675']", , , ,0.483,79.99 +7140.0,pick item,2019-09-12 12:33:49.000Z, ,"['882723']", , , ,1.28,149.99 +7141.0,package delivered,2019-09-12 12:35:14.000Z, , , ,"['660409']", ,0.655,1798.0 +7142.0,pick item,2019-09-12 12:50:17.000Z, ,"['882674']", , , ,0.38,29.99 +7143.0,pick item,2019-09-12 13:21:57.000Z, ,"['882698']", , , ,0.21,529.0 +7144.0,pick item,2019-09-12 13:23:51.000Z, ,"['882635']", , , ,0.483,495.0 +7145.0,place order,2019-09-12 13:27:30.000Z, ,"['882735','882733','882732','882734','882731']","['990675']", , ,4.7,684.95 +7146.0,item out of stock,2019-09-12 13:29:20.000Z, ,"['882689']", , , ,1.37,2500.0 +7147.0,pick item,2019-09-12 13:36:14.000Z, ,"['882731']", , , ,0.98,129.99 +7148.0,reorder item,2019-09-12 13:42:49.000Z, ,"['882658']", , , ,0.21,529.0 +7149.0,send package,2019-09-12 13:50:15.000Z, , , ,"['660407']", ,8.266,10814.96 +7150.0,pay order,2019-09-12 13:50:28.000Z, , ,"['990434']", , ,2.698,1254.99 +7151.0,pay order,2019-09-12 14:12:04.000Z, , ,"['990521']", , ,2.756,2198.95 +7152.0,pick item,2019-09-12 14:21:45.000Z, ,"['882678']", , , ,1.25,2200.0 +7153.0,create package,2019-09-12 14:21:45.000Z, ,"['882597','882574','882558','882575','882631','882632']", ,"['660413']", ,3.21,5062.99 +7154.0,pick item,2019-09-12 14:27:37.000Z, ,"['882690']", , , ,1.25,2200.0 +7155.0,payment reminder,2019-09-12 14:28:31.000Z, , ,"['990552']", , ,2.643,1343.98 +7156.0,send package,2019-09-12 14:30:54.000Z, , , ,"['660411']", ,5.247999999999998,6448.96 +7157.0,pick item,2019-09-12 14:33:40.000Z, ,"['882718']", , , ,0.78,99.99 +7158.0,item out of stock,2019-09-12 14:38:34.000Z, ,"['882719']", , , ,1.48,199.99 +7159.0,confirm order,2019-09-12 14:41:52.000Z, , ,"['990672']", , ,1.903,1105.99 +7160.0,pick item,2019-09-12 14:43:11.000Z, ,"['882633']", , , ,0.172,699.0 +7161.0,pay order,2019-09-12 14:57:37.000Z, , ,"['990613']", , ,3.422,1632.96 +7162.0,place order,2019-09-12 15:14:47.000Z, ,"['882737','882736']","['990676']", , ,0.446,1253.0 +7163.0,pick item,2019-09-12 15:28:01.000Z, ,"['882715']", , , ,0.44,476.0 +7164.0,failed delivery,2019-09-12 15:34:01.000Z, , , ,"['660411']", ,5.247999999999998,6448.96 +7165.0,pick item,2019-09-12 15:52:38.000Z, ,"['882696']", , , ,0.483,495.0 +7166.0,item out of stock,2019-09-12 15:56:50.000Z, ,"['882714']", , , ,0.483,495.0 +7167.0,confirm order,2019-09-12 16:08:19.000Z, , ,"['990667']", , ,1.215,1378.98 +7168.0,pick item,2019-09-12 16:11:56.000Z, ,"['882677']", , , ,0.98,129.99 +7169.0,create package,2019-09-12 16:11:56.000Z, ,"['882489']", ,"['660414']", ,0.28,449.0 +7170.0,pick item,2019-09-12 16:14:35.000Z, ,"['882727']", , , ,1.28,149.99 +7171.0,create package,2019-09-12 16:14:35.000Z, ,"['881498','881605','882176','882650','882653','882731']", ,"['660415']", ,4.148,2124.96 +7172.0,pay order,2019-09-12 16:18:59.000Z, , ,"['990540']", , ,2.043,699.97 +7173.0,pick item,2019-09-12 16:19:40.000Z, ,"['882576']", , , ,1.25,2200.0 +7174.0,send package,2019-09-12 16:31:05.000Z, , , ,"['660413']", ,3.21,5062.99 +7175.0,reorder item,2019-09-12 16:40:28.000Z, ,"['882689']", , , ,1.37,2500.0 +7176.0,pay order,2019-09-12 16:41:00.000Z, , ,"['990537']", , ,4.973,3922.97 +7177.0,place order,2019-09-12 16:49:21.000Z, ,"['882741','882740','882738','882739']","['990677']", , ,1.486,2232.0 +7178.0,item out of stock,2019-09-12 16:57:46.000Z, ,"['882730']", , , ,1.25,2200.0 +7179.0,reorder item,2019-09-12 17:06:34.000Z, ,"['882704']", , , ,0.28,449.0 +7180.0,pick item,2019-09-12 17:30:56.000Z, ,"['882448']", , , ,0.28,89.99 +7181.0,package delivered,2019-09-12 17:55:08.000Z, , , ,"['660408']", ,2.56,299.98 +7182.0,send package,2019-09-12 17:55:42.000Z, , , ,"['660410']", ,0.56,1887.99 +7183.0,pick item,2019-09-12 18:47:28.000Z, ,"['882695']", , , ,0.28,89.99 +7184.0,pay order,2019-09-12 19:24:29.000Z, , ,"['990664']", , ,2.925,2503.98 +7185.0,place order,2019-09-12 20:07:38.000Z, ,"['882743','882742']","['990678']", , ,0.952,803.99 +7186.0,place order,2019-09-13 06:03:42.000Z, ,"['882748','882744','882745','882746','882747']","['990679']", , ,3.349,2678.98 +7187.0,pick item,2019-09-13 06:29:10.000Z, ,"['882694']", , , ,0.28,89.99 +7188.0,pick item,2019-09-13 06:47:37.000Z, ,"['882703']", , , ,0.2,39.99 +7189.0,send package,2019-09-13 07:06:21.000Z, , , ,"['660415']", ,4.148,2124.96 +7190.0,pick item,2019-09-13 07:09:12.000Z, ,"['882684']", , , ,0.483,1099.0 +7191.0,create package,2019-09-13 07:09:12.000Z, ,"['882617','882615']", ,"['660416']", ,0.376,1328.0 +7192.0,pick item,2019-09-13 07:12:24.000Z, ,"['882747']", , , ,0.78,99.99 +7193.0,pick item,2019-09-13 07:25:49.000Z, ,"['882370']", , , ,0.483,495.0 +7194.0,create package,2019-09-13 07:25:49.000Z, ,"['882002','882473','882448']", ,"['660417']", ,1.143,614.98 +7195.0,send package,2019-09-13 07:35:38.000Z, , , ,"['660416']", ,0.376,1328.0 +7196.0,package delivered,2019-09-13 07:41:25.000Z, , , ,"['660411']", ,5.247999999999998,6448.96 +7197.0,send package,2019-09-13 07:55:02.000Z, , , ,"['660414']", ,0.28,449.0 +7198.0,place order,2019-09-13 07:55:21.000Z, ,"['882749']","['990680']", , ,0.28,94.99 +7199.0,package delivered,2019-09-13 08:00:15.000Z, , , ,"['660410']", ,0.56,1887.99 +7200.0,pick item,2019-09-13 08:04:54.000Z, ,"['882671']", , , ,0.495,129.0 +7201.0,item out of stock,2019-09-13 08:06:35.000Z, ,"['882712']", , , ,0.188,1149.0 +7202.0,reorder item,2019-09-13 08:26:42.000Z, ,"['882714']", , , ,0.483,495.0 +7203.0,package delivered,2019-09-13 08:28:18.000Z, , , ,"['660415']", ,4.148,2124.96 +7204.0,pick item,2019-09-13 08:29:13.000Z, ,"['882616']", , , ,1.48,199.99 +7205.0,package delivered,2019-09-13 08:41:07.000Z, , , ,"['660413']", ,3.21,5062.99 +7206.0,pay order,2019-09-13 08:42:36.000Z, , ,"['990542']", , ,0.172,704.0 +7207.0,pick item,2019-09-13 08:52:31.000Z, ,"['882740']", , , ,0.44,476.0 +7208.0,create package,2019-09-13 08:52:31.000Z, ,"['882666','882671','882667','882672','882669','882670','881457','882663','882621','882665','882620']", ,"['660418']", ,5.631,4349.96 +7209.0,reorder item,2019-09-13 08:58:05.000Z, ,"['882716']", , , ,0.98,129.99 +7210.0,pick item,2019-09-13 09:01:09.000Z, ,"['882675']", , , ,0.483,79.99 +7211.0,pick item,2019-09-13 09:06:41.000Z, ,"['882049']", , , ,1.28,149.99 +7212.0,confirm order,2019-09-13 09:08:53.000Z, , ,"['990675']", , ,4.7,684.95 +7213.0,pick item,2019-09-13 09:13:48.000Z, ,"['882734']", , , ,0.98,129.99 +7214.0,pick item,2019-09-13 09:28:33.000Z, ,"['882572']", , , ,0.38,29.99 +7215.0,confirm order,2019-09-13 09:38:27.000Z, , ,"['990656']", , ,1.514,2132.98 +7216.0,pay order,2019-09-13 09:43:46.000Z, , ,"['990593']", , ,1.375,223.99 +7217.0,pick item,2019-09-13 09:45:26.000Z, ,"['882743']", , , ,0.172,699.0 +7218.0,pick item,2019-09-13 10:05:06.000Z, ,"['882693']", , , ,0.172,699.0 +7219.0,place order,2019-09-13 10:10:29.000Z, ,"['882750','882751','882753','882752']","['990681']", , ,3.505,2563.98 +7220.0,send package,2019-09-13 10:42:22.000Z, , , ,"['660412']", ,3.425,4520.99 +7221.0,send package,2019-09-13 10:46:31.000Z, , , ,"['660418']", ,5.631,4349.96 +7222.0,pay order,2019-09-13 10:52:21.000Z, , ,"['990646']", , ,0.188,1154.0 +7223.0,confirm order,2019-09-13 11:06:05.000Z, , ,"['990674']", , ,3.773,2909.97 +7224.0,reorder item,2019-09-13 11:11:29.000Z, ,"['882730']", , , ,1.25,2200.0 +7225.0,pick item,2019-09-13 11:15:43.000Z, ,"['882744']", , , ,1.48,199.99 +7226.0,send package,2019-09-13 11:22:34.000Z, , , ,"['660417']", ,1.143,614.98 +7227.0,pick item,2019-09-13 11:32:45.000Z, ,"['882736']", , , ,0.28,449.0 +7228.0,pay order,2019-09-13 11:36:02.000Z, , ,"['990548']", , ,3.926,2127.98 +7229.0,place order,2019-09-13 11:40:46.000Z, ,"['882754','882756','882755']","['990682']", , ,2.04,384.97 +7230.0,package delivered,2019-09-13 11:46:25.000Z, , , ,"['660416']", ,0.376,1328.0 +7231.0,item out of stock,2019-09-13 12:00:57.000Z, ,"['882668']", , , ,1.37,2500.0 +7232.0,pick item,2019-09-13 12:13:48.000Z, ,"['882742']", , , ,0.78,99.99 +7233.0,pay order,2019-09-13 12:16:41.000Z, , ,"['990674']", , ,3.773,2909.97 +7234.0,pick item,2019-09-13 12:18:43.000Z, ,"['882181']", , , ,0.483,1099.0 +7235.0,pick item,2019-09-13 12:44:07.000Z, ,"['882737']", , , ,0.166,799.0 +7236.0,create package,2019-09-13 12:44:07.000Z, ,"['882659','882700','882698','881573','882660','882662']", ,"['660419']", ,3.999,2192.97 +7237.0,item out of stock,2019-09-13 12:45:57.000Z, ,"['882713']", , , ,0.166,799.0 +7238.0,pay order,2019-09-13 12:48:50.000Z, , ,"['990645']", , ,1.73,4353.0 +7239.0,confirm order,2019-09-13 12:49:02.000Z, , ,"['990681']", , ,3.505,2563.98 +7240.0,package delivered,2019-09-13 12:51:43.000Z, , , ,"['660417']", ,1.143,614.98 +7241.0,pick item,2019-09-13 12:57:29.000Z, ,"['882267']", , , ,0.98,129.99 +7242.0,reorder item,2019-09-13 13:03:02.000Z, ,"['882682']", , , ,1.37,2500.0 +7243.0,pick item,2019-09-13 13:05:17.000Z, ,"['882724']", , , ,0.28,89.99 +7244.0,package delivered,2019-09-13 13:08:21.000Z, , , ,"['660414']", ,0.28,449.0 +7245.0,pick item,2019-09-13 13:12:09.000Z, ,"['882709']", , , ,0.88,89.99 +7246.0,place order,2019-09-13 13:41:19.000Z, ,"['882757','882759','882758']","['990683']", , ,0.929,1748.0 +7247.0,pick item,2019-09-13 13:42:37.000Z, ,"['882751']", , , ,0.98,129.99 +7248.0,pay order,2019-09-13 13:53:09.000Z, , ,"['990514']", , ,1.758,3693.99 +7249.0,pick item,2019-09-13 14:06:42.000Z, ,"['882714']", , , ,0.483,495.0 +7250.0,reorder item,2019-09-13 14:13:40.000Z, ,"['882673']", , , ,0.172,699.0 +7251.0,pick item,2019-09-13 14:14:24.000Z, ,"['882717']", , , ,0.28,89.99 +7252.0,create package,2019-09-13 14:14:24.000Z, ,"['882267','882743','882742','882703','882702','881392','882701']", ,"['660420']", ,4.173,5112.97 +7253.0,confirm order,2019-09-13 14:15:46.000Z, , ,"['990676']", , ,0.446,1253.0 +7254.0,confirm order,2019-09-13 14:22:05.000Z, , ,"['990680']", , ,0.28,94.99 +7255.0,pick item,2019-09-13 14:58:37.000Z, ,"['882759']", , , ,0.166,799.0 +7256.0,pay order,2019-09-13 15:07:41.000Z, , ,"['990426']", , ,4.673,4343.97 +7257.0,pick item,2019-09-13 15:10:06.000Z, ,"['882735']", , , ,1.48,199.99 +7258.0,item out of stock,2019-09-13 15:30:25.000Z, ,"['882664']", , , ,0.483,495.0 +7259.0,place order,2019-09-13 15:42:25.000Z, ,"['882761','882764','882763','882760','882762']","['990684']", , ,2.818,1317.98 +7260.0,failed delivery,2019-09-13 15:45:48.000Z, , , ,"['660407']", ,8.266,10814.96 +7261.0,reorder item,2019-09-13 15:56:25.000Z, ,"['882520']", , , ,0.78,99.99 +7262.0,pick item,2019-09-13 16:11:14.000Z, ,"['882612']", , , ,1.48,199.99 +7263.0,package delivered,2019-09-13 16:18:04.000Z, , , ,"['660412']", ,3.425,4520.99 +7264.0,confirm order,2019-09-13 16:57:16.000Z, , ,"['990684']", , ,2.818,1317.98 +7265.0,pick item,2019-09-13 17:25:21.000Z, ,"['882699']", , , ,0.28,89.99 +7266.0,place order,2019-09-13 17:46:50.000Z, ,"['882765']","['990685']", , ,0.166,804.0 +7267.0,pick item,2019-09-13 18:12:06.000Z, ,"['882738']", , , ,0.166,799.0 +7268.0,package delivered,2019-09-13 18:21:08.000Z, , , ,"['660418']", ,5.631,4349.96 +7269.0,pick item,2019-09-13 20:04:36.000Z, ,"['882581']", , , ,0.483,1099.0 +7270.0,place order,2019-09-13 21:13:15.000Z, ,"['882768','882766','882767']","['990686']", , ,1.188,1158.0 +7271.0,payment reminder,2019-09-14 09:28:06.000Z, , ,"['990319']", , ,2.129,1498.99 +7272.0,place order,2019-09-14 19:39:33.000Z, ,"['882772','882773','882770','882769','882771']","['990687']", , ,3.959,4352.98 +7273.0,payment reminder,2019-09-15 13:54:16.000Z, , ,"['990340']", , ,3.06,3233.99 +7274.0,payment reminder,2019-09-15 15:40:24.000Z, , ,"['990545']", , ,0.483,84.99 +7275.0,place order,2019-09-15 20:06:54.000Z, ,"['882776','882774','882775']","['990688']", , ,1.856,2502.99 +7276.0,pick item,2019-09-16 06:08:06.000Z, ,"['882748']", , , ,0.44,476.0 +7277.0,create package,2019-09-16 06:08:06.000Z, ,"['882635','882049','882645','882686','882681','882684','882685']", ,"['660421']", ,3.366,3651.97 +7278.0,pick item,2019-09-16 06:12:32.000Z, ,"['882775']", , , ,1.48,199.99 +7279.0,pick item,2019-09-16 06:15:16.000Z, ,"['882750']", , , ,0.495,129.0 +7280.0,pick item,2019-09-16 06:29:56.000Z, ,"['882766']", , , ,0.483,495.0 +7281.0,pay order,2019-09-16 07:02:46.000Z, , ,"['990652']", , ,1.24,1942.99 +7282.0,reorder item,2019-09-16 07:03:58.000Z, ,"['882719']", , , ,1.48,199.99 +7283.0,place order,2019-09-16 07:03:58.000Z, ,"['882778','882779','882777']","['990689']", , ,0.975,622.99 +7284.0,item out of stock,2019-09-16 07:10:53.000Z, ,"['882706']", , , ,0.188,1149.0 +7285.0,send package,2019-09-16 07:21:33.000Z, , , ,"['660421']", ,3.366,3651.97 +7286.0,confirm order,2019-09-16 07:31:41.000Z, , ,"['990679']", , ,3.349,2678.98 +7287.0,item out of stock,2019-09-16 07:47:24.000Z, ,"['882722']", , , ,0.98,129.99 +7288.0,pick item,2019-09-16 07:49:28.000Z, ,"['882594']", , , ,0.44,476.0 +7289.0,confirm order,2019-09-16 07:49:36.000Z, , ,"['990682']", , ,2.04,384.97 +7290.0,pay order,2019-09-16 07:53:08.000Z, , ,"['990605']", , ,5.14,4451.97 +7291.0,item out of stock,2019-09-16 07:55:31.000Z, ,"['882692']", , , ,0.166,799.0 +7292.0,pick item,2019-09-16 07:57:33.000Z, ,"['882697']", , , ,0.166,799.0 +7293.0,pick item,2019-09-16 08:11:08.000Z, ,"['882754']", , , ,1.48,199.99 +7294.0,pay order,2019-09-16 08:15:58.000Z, , ,"['990665']", , ,2.957,5061.98 +7295.0,pick item,2019-09-16 08:22:02.000Z, ,"['882772']", , , ,0.78,99.99 +7296.0,create package,2019-09-16 08:22:02.000Z, ,"['882696','882740','882674','882676','882693','882675','882656','882694','882695','882738']", ,"['660422']", ,3.947,3957.95 +7297.0,confirm order,2019-09-16 08:27:32.000Z, , ,"['990678']", , ,0.952,803.99 +7298.0,place order,2019-09-16 08:27:44.000Z, ,"['882780','882781','882783','882782']","['990690']", , ,2.523,1178.98 +7299.0,pick item,2019-09-16 08:30:42.000Z, ,"['882728']", , , ,0.38,29.99 +7300.0,reorder item,2019-09-16 08:48:04.000Z, ,"['882713']", , , ,0.166,799.0 +7301.0,pick item,2019-09-16 08:54:33.000Z, ,"['882630']", , , ,0.21,529.0 +7302.0,pick item,2019-09-16 08:55:25.000Z, ,"['882760']", , , ,0.495,129.0 +7303.0,confirm order,2019-09-16 09:07:42.000Z, , ,"['990685']", , ,0.166,804.0 +7304.0,pick item,2019-09-16 09:10:21.000Z, ,"['882770']", , , ,0.166,799.0 +7305.0,pick item,2019-09-16 09:12:39.000Z, ,"['882753']", , , ,1.25,2200.0 +7306.0,pick item,2019-09-16 09:23:08.000Z, ,"['882422']", , , ,1.28,149.99 +7307.0,confirm order,2019-09-16 09:25:00.000Z, , ,"['990689']", , ,0.975,622.99 +7308.0,pick item,2019-09-16 09:48:50.000Z, ,"['882733']", , , ,0.98,129.99 +7309.0,pick item,2019-09-16 10:04:45.000Z, ,"['882732']", , , ,0.28,89.99 +7310.0,confirm order,2019-09-16 10:06:09.000Z, , ,"['990677']", , ,1.486,2232.0 +7311.0,pick item,2019-09-16 10:12:33.000Z, ,"['882568']", , , ,0.28,89.99 +7312.0,place order,2019-09-16 10:15:15.000Z, ,"['882786','882788','882784','882785','882787']","['990691']", , ,5.89,3104.96 +7313.0,pick item,2019-09-16 10:15:49.000Z, ,"['882757']", , , ,0.483,495.0 +7314.0,create package,2019-09-16 10:15:49.000Z, ,"['882772','882690','882687','882715','882714','882691','882770','882581']", ,"['660423']", ,4.002,5248.97 +7315.0,pick item,2019-09-16 10:24:58.000Z, ,"['882589']", , , ,0.78,99.99 +7316.0,confirm order,2019-09-16 10:29:54.000Z, , ,"['990687']", , ,3.959,4352.98 +7317.0,failed delivery,2019-09-16 10:46:57.000Z, , , ,"['660407']", ,8.266,10814.96 +7318.0,pick item,2019-09-16 10:49:24.000Z, ,"['882739']", , , ,0.44,476.0 +7319.0,reorder item,2019-09-16 11:07:29.000Z, ,"['882712']", , , ,0.188,1149.0 +7320.0,pick item,2019-09-16 11:08:02.000Z, ,"['882712']", , , ,0.188,1149.0 +7321.0,confirm order,2019-09-16 11:32:03.000Z, , ,"['990683']", , ,0.929,1748.0 +7322.0,pick item,2019-09-16 11:32:13.000Z, ,"['882491']", , , ,0.88,89.99 +7323.0,place order,2019-09-16 11:50:18.000Z, ,"['882791','882790','882789']","['990692']", , ,2.613,3393.99 +7324.0,item out of stock,2019-09-16 11:51:25.000Z, ,"['882705']", , , ,0.38,29.99 +7325.0,pick item,2019-09-16 11:53:41.000Z, ,"['882767']", , , ,0.21,529.0 +7326.0,pay order,2019-09-16 12:19:27.000Z, , ,"['990545']", , ,0.483,84.99 +7327.0,pay order,2019-09-16 12:24:47.000Z, , ,"['990644']", , ,0.6779999999999999,1772.99 +7328.0,pick item,2019-09-16 12:25:12.000Z, ,"['882719']", , , ,1.48,199.99 +7329.0,pick item,2019-09-16 12:27:04.000Z, ,"['882788']", , , ,1.48,199.99 +7330.0,pay order,2019-09-16 12:31:48.000Z, , ,"['990670']", , ,1.051,2282.99 +7331.0,pay order,2019-09-16 13:13:38.000Z, , ,"['990552']", , ,2.643,1343.98 +7332.0,item out of stock,2019-09-16 13:17:48.000Z, ,"['882618']", , , ,1.48,199.99 +7333.0,pick item,2019-09-16 13:21:19.000Z, ,"['882774']", , , ,0.188,1149.0 +7334.0,create package,2019-09-16 13:21:19.000Z, ,"['882750','882611','882751','882753']", ,"['660424']", ,2.9130000000000003,3607.99 +7335.0,reorder item,2019-09-16 13:23:46.000Z, ,"['882664']", , , ,0.483,495.0 +7336.0,pick item,2019-09-16 13:26:43.000Z, ,"['882661']", , , ,1.48,199.99 +7337.0,pay order,2019-09-16 13:36:28.000Z, , ,"['990340']", , ,3.06,3233.99 +7338.0,pick item,2019-09-16 13:39:26.000Z, ,"['882768']", , , ,0.495,129.0 +7339.0,pick item,2019-09-16 13:42:33.000Z, ,"['882275']", , , ,0.21,529.0 +7340.0,confirm order,2019-09-16 13:49:22.000Z, , ,"['990686']", , ,1.188,1158.0 +7341.0,pick item,2019-09-16 13:58:48.000Z, ,"['882781']", , , ,0.98,129.99 +7342.0,create package,2019-09-16 13:58:48.000Z, ,"['882719','882737','882736','882720','881583','882717','882724','882723','882718','882275']", ,"['660425']", ,5.224,3645.94 +7343.0,place order,2019-09-16 14:00:23.000Z, ,"['882794','882792','882793']","['990693']", , ,1.133,2109.0 +7344.0,pick item,2019-09-16 14:01:52.000Z, ,"['882721']", , , ,0.2,39.99 +7345.0,item out of stock,2019-09-16 14:09:59.000Z, ,"['882782']", , , ,0.78,99.99 +7346.0,package delivered,2019-09-16 14:15:34.000Z, , , ,"['660421']", ,3.366,3651.97 +7347.0,confirm order,2019-09-16 14:24:27.000Z, , ,"['990688']", , ,1.856,2502.99 +7348.0,pick item,2019-09-16 14:28:26.000Z, ,"['882771']", , , ,1.25,2200.0 +7349.0,item out of stock,2019-09-16 14:33:53.000Z, ,"['882745']", , , ,0.166,799.0 +7350.0,reorder item,2019-09-16 14:35:22.000Z, ,"['882683']", , , ,0.172,699.0 +7351.0,confirm order,2019-09-16 14:37:38.000Z, , ,"['990692']", , ,2.613,3393.99 +7352.0,pay order,2019-09-16 14:41:53.000Z, , ,"['990675']", , ,4.7,684.95 +7353.0,reorder item,2019-09-16 14:52:50.000Z, ,"['882652']", , , ,0.483,1099.0 +7354.0,pay order,2019-09-16 15:06:01.000Z, , ,"['990661']", , ,0.98,134.99 +7355.0,pick item,2019-09-16 15:15:30.000Z, ,"['882773']", , , ,1.28,149.99 +7356.0,pick item,2019-09-16 15:20:26.000Z, ,"['882504']", , , ,0.2,39.99 +7357.0,place order,2019-09-16 15:20:33.000Z, ,"['882796','882795']","['990694']", , ,1.763,649.99 +7358.0,pick item,2019-09-16 15:22:55.000Z, ,"['882793']", , , ,0.21,529.0 +7359.0,confirm order,2019-09-16 15:28:40.000Z, , ,"['990694']", , ,1.763,649.99 +7360.0,pick item,2019-09-16 15:39:48.000Z, ,"['882725']", , , ,0.38,29.99 +7361.0,confirm order,2019-09-16 15:45:21.000Z, , ,"['990671']", , ,3.477,2827.97 +7362.0,send package,2019-09-16 15:47:24.000Z, , , ,"['660419']", ,3.999,2192.97 +7363.0,send package,2019-09-16 16:41:50.000Z, , , ,"['660423']", ,4.002,5248.97 +7364.0,place order,2019-09-16 17:00:54.000Z, ,"['882800','882798','882801','882797','882799']","['990695']", , ,3.555,7702.0 +7365.0,pay order,2019-09-16 18:36:09.000Z, , ,"['990669']", , ,2.0380000000000003,4142.99 +7366.0,pick item,2019-09-16 18:41:17.000Z, ,"['882797']", , , ,1.37,2500.0 +7367.0,reorder item,2019-09-16 19:19:23.000Z, ,"['882745']", , , ,0.166,799.0 +7368.0,place order,2019-09-16 19:41:23.000Z, ,"['882806','882802','882803','882805','882804']","['990696']", , ,4.473,3663.97 +7369.0,package delivered,2019-09-16 20:00:25.000Z, , , ,"['660423']", ,4.002,5248.97 +7370.0,pay order,2019-09-16 20:11:16.000Z, , ,"['990663']", , ,1.346,1213.98 +7371.0,create package,2019-09-16 23:00:00.000Z, ,"['882709','882576','882711','882712']", ,"['660426']", ,2.5980000000000003,3528.98 +7372.0,place order,2019-09-17 04:26:12.000Z, ,"['882809','882808','882807','882810']","['990697']", , ,1.378,1312.98 +7373.0,reorder item,2019-09-17 06:20:53.000Z, ,"['882782']", , , ,0.78,99.99 +7374.0,pick item,2019-09-17 06:50:28.000Z, ,"['881787']", , , ,0.21,529.0 +7375.0,pay order,2019-09-17 06:55:43.000Z, , ,"['990694']", , ,1.763,649.99 +7376.0,pick item,2019-09-17 06:58:15.000Z, ,"['882746']", , , ,0.483,1099.0 +7377.0,send package,2019-09-17 07:08:32.000Z, , , ,"['660425']", ,5.224,3645.94 +7378.0,pick item,2019-09-17 07:19:59.000Z, ,"['882763']", , , ,1.28,149.99 +7379.0,send package,2019-09-17 07:38:31.000Z, , , ,"['660420']", ,4.173,5112.97 +7380.0,payment reminder,2019-09-17 07:42:50.000Z, , ,"['990577']", , ,0.966,995.0 +7381.0,package delivered,2019-09-17 07:47:33.000Z, , , ,"['660425']", ,5.224,3645.94 +7382.0,package delivered,2019-09-17 07:53:03.000Z, , , ,"['660407']", ,8.266,10814.96 +7383.0,pick item,2019-09-17 08:00:00.000Z, ,"['882755']", , , ,0.28,89.99 +7384.0,place order,2019-09-17 08:06:36.000Z, ,"['882813','882811','882812','882814']","['990698']", , ,1.912,2082.98 +7385.0,pick item,2019-09-17 08:09:31.000Z, ,"['882109']", , , ,0.483,1099.0 +7386.0,send package,2019-09-17 08:09:47.000Z, , , ,"['660426']", ,2.5980000000000003,3528.98 +7387.0,item out of stock,2019-09-17 08:20:05.000Z, ,"['882804']", , , ,0.78,99.99 +7388.0,pick item,2019-09-17 08:21:57.000Z, ,"['882785']", , , ,1.37,2500.0 +7389.0,item out of stock,2019-09-17 08:24:32.000Z, ,"['882800']", , , ,0.483,1099.0 +7390.0,pick item,2019-09-17 08:26:58.000Z, ,"['882535']", , , ,0.88,89.99 +7391.0,create package,2019-09-17 08:26:58.000Z, ,"['882727','882728','882594','882630','882422','882678','882677']", ,"['660427']", ,5.82,3664.96 +7392.0,confirm order,2019-09-17 08:34:27.000Z, , ,"['990691']", , ,5.89,3104.96 +7393.0,reorder item,2019-09-17 08:41:42.000Z, ,"['882692']", , , ,0.166,799.0 +7394.0,pick item,2019-09-17 08:49:22.000Z, ,"['882780']", , , ,0.483,495.0 +7395.0,pay order,2019-09-17 08:49:40.000Z, , ,"['990691']", , ,5.89,3104.96 +7396.0,pick item,2019-09-17 08:50:26.000Z, ,"['882799']", , , ,1.37,2500.0 +7397.0,pick item,2019-09-17 09:04:29.000Z, ,"['882794']", , , ,0.44,476.0 +7398.0,pick item,2019-09-17 09:07:13.000Z, ,"['882814']", , , ,0.166,799.0 +7399.0,item out of stock,2019-09-17 09:19:30.000Z, ,"['882805']", , , ,0.483,1099.0 +7400.0,item out of stock,2019-09-17 09:30:29.000Z, ,"['882790']", , , ,0.483,1099.0 +7401.0,place order,2019-09-17 09:33:00.000Z, ,"['882816','882817','882818','882815']","['990699']", , ,2.523,1178.98 +7402.0,item out of stock,2019-09-17 09:33:33.000Z, ,"['882796']", , , ,0.483,495.0 +7403.0,pick item,2019-09-17 09:49:36.000Z, ,"['882664']", , , ,0.483,495.0 +7404.0,reorder item,2019-09-17 10:01:54.000Z, ,"['882706']", , , ,0.188,1149.0 +7405.0,reorder item,2019-09-17 10:31:29.000Z, ,"['882800']", , , ,0.483,1099.0 +7406.0,package delivered,2019-09-17 10:35:03.000Z, , , ,"['660426']", ,2.5980000000000003,3528.98 +7407.0,pay order,2019-09-17 10:38:34.000Z, , ,"['990319']", , ,2.129,1498.99 +7408.0,reorder item,2019-09-17 10:40:52.000Z, ,"['882705']", , , ,0.38,29.99 +7409.0,pick item,2019-09-17 10:46:47.000Z, ,"['882450']", , , ,0.44,476.0 +7410.0,pick item,2019-09-17 11:08:59.000Z, ,"['882708']", , , ,1.48,199.99 +7411.0,create package,2019-09-17 11:08:59.000Z, ,"['882633','882757','882759','882572']", ,"['660428']", ,1.2009999999999998,2022.99 +7412.0,send package,2019-09-17 11:09:05.000Z, , , ,"['660422']", ,3.947,3957.95 +7413.0,place order,2019-09-17 11:25:47.000Z, ,"['882820','882821','882822','882823','882819']","['990700']", , ,2.563,1169.97 +7414.0,item out of stock,2019-09-17 11:50:06.000Z, ,"['882809']", , , ,0.2,39.99 +7415.0,pick item,2019-09-17 12:22:08.000Z, ,"['882779']", , , ,0.28,449.0 +7416.0,pick item,2019-09-17 12:25:39.000Z, ,"['882801']", , , ,0.166,799.0 +7417.0,pick item,2019-09-17 12:34:23.000Z, ,"['882812']", , , ,0.483,79.99 +7418.0,item out of stock,2019-09-17 12:42:05.000Z, ,"['882778']", , , ,0.495,129.0 +7419.0,item out of stock,2019-09-17 12:46:28.000Z, ,"['882784']", , , ,0.78,99.99 +7420.0,pick item,2019-09-17 12:46:53.000Z, ,"['882707']", , , ,0.483,1099.0 +7421.0,create package,2019-09-17 12:46:53.000Z, ,"['882780','882812','882794','882744','882793','882785','882788','882747','882748','882781','882746','882814']", ,"['660429']", ,8.795,7083.95 +7422.0,pick item,2019-09-17 12:53:55.000Z, ,"['882786']", , , ,1.48,199.99 +7423.0,item out of stock,2019-09-17 13:06:39.000Z, ,"['882803']", , , ,0.98,129.99 +7424.0,reorder item,2019-09-17 13:07:29.000Z, ,"['882796']", , , ,0.483,495.0 +7425.0,confirm order,2019-09-17 13:08:21.000Z, , ,"['990700']", , ,2.563,1169.97 +7426.0,reorder item,2019-09-17 13:09:51.000Z, ,"['882804']", , , ,0.78,99.99 +7427.0,place order,2019-09-17 13:11:21.000Z, ,"['882826','882824','882827','882830','882828','882825','882829']","['990701']", , ,1.791,4434.99 +7428.0,pick item,2019-09-17 13:14:42.000Z, ,"['882824']", , , ,0.483,495.0 +7429.0,item out of stock,2019-09-17 13:19:04.000Z, ,"['882818']", , , ,0.98,129.99 +7430.0,pick item,2019-09-17 13:30:29.000Z, ,"['882765']", , , ,0.166,799.0 +7431.0,pick item,2019-09-17 13:36:29.000Z, ,"['882762']", , , ,0.483,495.0 +7432.0,reorder item,2019-09-17 13:42:42.000Z, ,"['882688']", , , ,0.483,1099.0 +7433.0,package delivered,2019-09-17 13:53:52.000Z, , , ,"['660419']", ,3.999,2192.97 +7434.0,item out of stock,2019-09-17 13:54:50.000Z, ,"['882826']", , , ,0.188,1149.0 +7435.0,reorder item,2019-09-17 14:01:29.000Z, ,"['882668']", , , ,1.37,2500.0 +7436.0,pick item,2019-09-17 14:10:21.000Z, ,"['882823']", , , ,0.98,129.99 +7437.0,pick item,2019-09-17 14:17:27.000Z, ,"['882791']", , , ,1.25,2200.0 +7438.0,item out of stock,2019-09-17 14:22:04.000Z, ,"['882741']", , , ,0.44,476.0 +7439.0,item out of stock,2019-09-17 14:27:22.000Z, ,"['882792']", , , ,0.483,1099.0 +7440.0,item out of stock,2019-09-17 14:28:11.000Z, ,"['882789']", , , ,0.88,89.99 +7441.0,pick item,2019-09-17 14:29:26.000Z, ,"['882769']", , , ,0.483,1099.0 +7442.0,pick item,2019-09-17 14:30:46.000Z, ,"['882798']", , , ,0.166,799.0 +7443.0,reorder item,2019-09-17 14:35:03.000Z, ,"['882784']", , , ,0.78,99.99 +7444.0,place order,2019-09-17 14:42:30.000Z, ,"['882834','882832','882833','882831','882835']","['990702']", , ,4.203,6079.99 +7445.0,confirm order,2019-09-17 14:48:07.000Z, , ,"['990695']", , ,3.555,7702.0 +7446.0,item out of stock,2019-09-17 14:50:01.000Z, ,"['882819']", , , ,0.44,476.0 +7447.0,item out of stock,2019-09-17 14:51:07.000Z, ,"['882822']", , , ,0.483,79.99 +7448.0,confirm order,2019-09-17 14:51:11.000Z, , ,"['990697']", , ,1.378,1312.98 +7449.0,payment reminder,2019-09-17 14:54:48.000Z, , ,"['990571']", , ,2.009,1972.99 +7450.0,pay order,2019-09-17 15:24:49.000Z, , ,"['990641']", , ,2.013,3753.0 +7451.0,pay order,2019-09-17 15:31:12.000Z, , ,"['990683']", , ,0.929,1748.0 +7452.0,confirm order,2019-09-17 15:35:42.000Z, , ,"['990699']", , ,2.523,1178.98 +7453.0,pick item,2019-09-17 15:57:08.000Z, ,"['882490']", , , ,0.483,79.99 +7454.0,send package,2019-09-17 16:08:47.000Z, , , ,"['660429']", ,8.795,7083.95 +7455.0,pay order,2019-09-17 16:14:32.000Z, , ,"['990656']", , ,1.514,2132.98 +7456.0,send package,2019-09-17 16:34:26.000Z, , , ,"['660424']", ,2.9130000000000003,3607.99 +7457.0,place order,2019-09-17 16:44:47.000Z, ,"['882839','882840','882838','882836','882841','882837']","['990703']", , ,6.115,5998.98 +7458.0,pick item,2019-09-17 17:24:03.000Z, ,"['882825']", , , ,0.2,39.99 +7459.0,reorder item,2019-09-17 18:02:27.000Z, ,"['882822']", , , ,0.483,79.99 +7460.0,reorder item,2019-09-17 18:21:53.000Z, ,"['882741']", , , ,0.44,476.0 +7461.0,pick item,2019-09-17 18:28:32.000Z, ,"['882776']", , , ,0.188,1149.0 +7462.0,pick item,2019-09-17 18:39:37.000Z, ,"['882833']", , , ,0.44,476.0 +7463.0,create package,2019-09-17 18:39:37.000Z, ,"['882370','882776','882490','882774','882775','882491']", ,"['660430']", ,3.702,3162.97 +7464.0,place order,2019-09-17 19:53:56.000Z, ,"['882845','882843','882846','882847','882842','882844']","['990704']", , ,2.345,3192.99 +7465.0,place order,2019-09-18 05:41:30.000Z, ,"['882849','882848','882850']","['990705']", , ,1.188,1158.0 +7466.0,pick item,2019-09-18 06:33:14.000Z, ,"['882820']", , , ,0.38,29.99 +7467.0,pick item,2019-09-18 06:41:21.000Z, ,"['882598']", , , ,0.28,89.99 +7468.0,package delivered,2019-09-18 06:45:06.000Z, , , ,"['660424']", ,2.9130000000000003,3607.99 +7469.0,item out of stock,2019-09-18 07:03:35.000Z, ,"['882850']", , , ,0.495,129.0 +7470.0,confirm order,2019-09-18 07:09:51.000Z, , ,"['990690']", , ,2.523,1178.98 +7471.0,pay order,2019-09-18 07:17:42.000Z, , ,"['990549']", , ,1.865,2634.0 +7472.0,item out of stock,2019-09-18 07:25:05.000Z, ,"['882830']", , , ,0.28,449.0 +7473.0,pick item,2019-09-18 07:27:51.000Z, ,"['882808']", , , ,0.495,129.0 +7474.0,send package,2019-09-18 07:31:33.000Z, , , ,"['660428']", ,1.2009999999999998,2022.99 +7475.0,pick item,2019-09-18 07:39:38.000Z, ,"['882836']", , , ,1.25,2200.0 +7476.0,pick item,2019-09-18 07:41:27.000Z, ,"['882609']", , , ,0.495,129.0 +7477.0,item out of stock,2019-09-18 07:59:10.000Z, ,"['882787']", , , ,0.78,99.99 +7478.0,pick item,2019-09-18 08:05:55.000Z, ,"['882795']", , , ,1.28,149.99 +7479.0,create package,2019-09-18 08:05:55.000Z, ,"['882612','882798','882801','882616','882797','882799']", ,"['660431']", ,6.032,6997.98 +7480.0,package delivered,2019-09-18 08:13:39.000Z, , , ,"['660429']", ,8.795,7083.95 +7481.0,pick item,2019-09-18 08:27:47.000Z, ,"['882802']", , , ,0.98,129.99 +7482.0,place order,2019-09-18 08:29:27.000Z, ,"['882854','882853','882851','882852']","['990706']", , ,2.158,1912.98 +7483.0,item out of stock,2019-09-18 08:34:22.000Z, ,"['882815']", , , ,0.78,99.99 +7484.0,pick item,2019-09-18 08:42:55.000Z, ,"['882840']", , , ,1.48,199.99 +7485.0,pick item,2019-09-18 08:48:03.000Z, ,"['882853']", , , ,0.98,129.99 +7486.0,item out of stock,2019-09-18 09:01:18.000Z, ,"['882841']", , , ,0.483,495.0 +7487.0,failed delivery,2019-09-18 09:05:00.000Z, , , ,"['660428']", ,1.2009999999999998,2022.99 +7488.0,package delivered,2019-09-18 09:08:52.000Z, , , ,"['660420']", ,4.173,5112.97 +7489.0,pick item,2019-09-18 09:10:40.000Z, ,"['882829']", , , ,0.172,699.0 +7490.0,pick item,2019-09-18 09:16:25.000Z, ,"['882806']", , , ,1.25,2200.0 +7491.0,pick item,2019-09-18 09:16:55.000Z, ,"['882847']", , , ,0.166,799.0 +7492.0,create package,2019-09-18 09:16:55.000Z, ,"['882735','882733','882734','882732','882765','882181']", ,"['660432']", ,4.369,2447.96 +7493.0,reorder item,2019-09-18 09:24:39.000Z, ,"['882826']", , , ,0.188,1149.0 +7494.0,send package,2019-09-18 09:35:23.000Z, , , ,"['660427']", ,5.82,3664.96 +7495.0,failed delivery,2019-09-18 09:36:34.000Z, , , ,"['660428']", ,1.2009999999999998,2022.99 +7496.0,reorder item,2019-09-18 09:52:53.000Z, ,"['882787']", , , ,0.78,99.99 +7497.0,pick item,2019-09-18 10:03:19.000Z, ,"['881997']", , , ,0.21,529.0 +7498.0,reorder item,2019-09-18 10:04:30.000Z, ,"['882818']", , , ,0.98,129.99 +7499.0,pick item,2019-09-18 10:06:35.000Z, ,"['882651']", , , ,0.78,99.99 +7500.0,pick item,2019-09-18 10:16:31.000Z, ,"['882682']", , , ,1.37,2500.0 +7501.0,place order,2019-09-18 10:18:41.000Z, ,"['882855']","['990707']", , ,0.88,94.99 +7502.0,pick item,2019-09-18 10:32:04.000Z, ,"['882842']", , , ,0.88,89.99 +7503.0,reorder item,2019-09-18 10:37:10.000Z, ,"['882722']", , , ,0.98,129.99 +7504.0,pick item,2019-09-18 10:40:25.000Z, ,"['882835']", , , ,1.25,2200.0 +7505.0,pick item,2019-09-18 10:41:43.000Z, ,"['882595']", , , ,0.21,529.0 +7506.0,create package,2019-09-18 10:41:43.000Z, ,"['882699','882763','882755','882768','882766','882754','882795','882767','882661','882697','882760','882762']", ,"['660433']", ,8.412,3455.94 +7507.0,confirm order,2019-09-18 11:02:06.000Z, , ,"['990696']", , ,4.473,3663.97 +7508.0,send package,2019-09-18 11:02:37.000Z, , , ,"['660431']", ,6.032,6997.98 +7509.0,pick item,2019-09-18 11:20:52.000Z, ,"['882452']", , , ,0.88,89.99 +7510.0,confirm order,2019-09-18 11:42:50.000Z, , ,"['990701']", , ,1.791,4434.99 +7511.0,place order,2019-09-18 11:57:09.000Z, ,"['882858','882859','882857','882863','882856','882864','882862','882860','882861']","['990708']", , ,4.362,2415.96 +7512.0,confirm order,2019-09-18 12:29:02.000Z, , ,"['990705']", , ,1.188,1158.0 +7513.0,pick item,2019-09-18 12:29:21.000Z, ,"['882827']", , , ,0.188,1149.0 +7514.0,reorder item,2019-09-18 12:37:57.000Z, ,"['882850']", , , ,0.495,129.0 +7515.0,reorder item,2019-09-18 12:45:44.000Z, ,"['882830']", , , ,0.28,449.0 +7516.0,package delivered,2019-09-18 12:54:05.000Z, , , ,"['660428']", ,1.2009999999999998,2022.99 +7517.0,pay order,2019-09-18 13:04:08.000Z, , ,"['990692']", , ,2.613,3393.99 +7518.0,send package,2019-09-18 13:14:05.000Z, , , ,"['660430']", ,3.702,3162.97 +7519.0,pick item,2019-09-18 13:19:22.000Z, ,"['882860']", , , ,0.483,79.99 +7520.0,confirm order,2019-09-18 13:20:41.000Z, , ,"['990693']", , ,1.133,2109.0 +7521.0,pay order,2019-09-18 13:27:02.000Z, , ,"['990693']", , ,1.133,2109.0 +7522.0,pick item,2019-09-18 13:28:43.000Z, ,"['882722']", , , ,0.98,129.99 +7523.0,pick item,2019-09-18 13:45:05.000Z, ,"['882253']", , , ,0.21,529.0 +7524.0,failed delivery,2019-09-18 13:49:17.000Z, , , ,"['660427']", ,5.82,3664.96 +7525.0,failed delivery,2019-09-18 13:50:20.000Z, , , ,"['660422']", ,3.947,3957.95 +7526.0,confirm order,2019-09-18 13:55:18.000Z, , ,"['990698']", , ,1.912,2082.98 +7527.0,pick item,2019-09-18 14:08:10.000Z, ,"['882817']", , , ,0.28,449.0 +7528.0,reorder item,2019-09-18 14:09:40.000Z, ,"['882809']", , , ,0.2,39.99 +7529.0,place order,2019-09-18 14:14:06.000Z, ,"['882868','882865','882866','882867']","['990709']", , ,1.283,2408.99 +7530.0,pick item,2019-09-18 14:28:30.000Z, ,"['882852']", , , ,0.78,99.99 +7531.0,send package,2019-09-18 14:30:03.000Z, , , ,"['660432']", ,4.369,2447.96 +7532.0,pick item,2019-09-18 14:30:06.000Z, ,"['882846']", , , ,0.483,495.0 +7533.0,pay order,2019-09-18 14:34:37.000Z, , ,"['990696']", , ,4.473,3663.97 +7534.0,pick item,2019-09-18 14:35:03.000Z, ,"['882844']", , , ,0.166,799.0 +7535.0,item out of stock,2019-09-18 14:37:39.000Z, ,"['882867']", , , ,0.44,476.0 +7536.0,pay order,2019-09-18 14:39:51.000Z, , ,"['990666']", , ,3.669,6682.98 +7537.0,payment reminder,2019-09-18 14:44:01.000Z, , ,"['990586']", , ,3.84,1472.96 +7538.0,pick item,2019-09-18 14:56:15.000Z, ,"['882683']", , , ,0.172,699.0 +7539.0,reorder item,2019-09-18 15:06:27.000Z, ,"['882618']", , , ,1.48,199.99 +7540.0,pick item,2019-09-18 15:13:02.000Z, ,"['882726']", , , ,0.38,29.99 +7541.0,package delivered,2019-09-18 15:16:30.000Z, , , ,"['660431']", ,6.032,6997.98 +7542.0,pick item,2019-09-18 15:33:16.000Z, ,"['882341']", , , ,0.78,99.99 +7543.0,create package,2019-09-18 15:33:16.000Z, ,"['882452','882853','882109','882852','882568','882682','882683']", ,"['660434']", ,4.945,4707.96 +7544.0,pick item,2019-09-18 15:39:45.000Z, ,"['882710']", , , ,0.483,495.0 +7545.0,place order,2019-09-18 15:47:59.000Z, ,"['882871','882874','882872','882869','882873','882870']","['990710']", , ,3.176,3972.97 +7546.0,payment reminder,2019-09-18 15:55:08.000Z, , ,"['990569']", , ,3.333,2784.98 +7547.0,confirm order,2019-09-18 16:00:15.000Z, , ,"['990706']", , ,2.158,1912.98 +7548.0,reorder item,2019-09-18 16:23:39.000Z, ,"['882778']", , , ,0.495,129.0 +7549.0,pick item,2019-09-18 16:25:51.000Z, ,"['882832']", , , ,1.25,2200.0 +7550.0,reorder item,2019-09-18 16:25:59.000Z, ,"['882805']", , , ,0.483,1099.0 +7551.0,pick item,2019-09-18 16:44:44.000Z, ,"['882758']", , , ,0.28,449.0 +7552.0,pick item,2019-09-18 16:50:37.000Z, ,"['882822']", , , ,0.483,79.99 +7553.0,confirm order,2019-09-18 17:51:38.000Z, , ,"['990704']", , ,2.345,3192.99 +7554.0,place order,2019-09-18 18:03:32.000Z, ,"['882876','882878','882877','882875']","['990711']", , ,3.828,3932.99 +7555.0,payment reminder,2019-09-18 18:24:51.000Z, , ,"['990596']", , ,2.321,4238.99 +7556.0,pick item,2019-09-18 18:46:15.000Z, ,"['882811']", , , ,0.483,1099.0 +7557.0,pay order,2019-09-18 19:32:39.000Z, , ,"['990697']", , ,1.378,1312.98 +7558.0,place order,2019-09-18 20:46:39.000Z, ,"['882880','882879','882881','882882']","['990712']", , ,2.29,2713.98 +7559.0,confirm order,2019-09-19 06:35:31.000Z, , ,"['990707']", , ,0.88,94.99 +7560.0,package delivered,2019-09-19 07:24:06.000Z, , , ,"['660430']", ,3.702,3162.97 +7561.0,place order,2019-09-19 07:24:53.000Z, ,"['882884','882885','882883','882886']","['990713']", , ,4.135,573.97 +7562.0,pick item,2019-09-19 07:27:01.000Z, ,"['882878']", , , ,0.483,1099.0 +7563.0,pick item,2019-09-19 07:29:46.000Z, ,"['882809']", , , ,0.2,39.99 +7564.0,create package,2019-09-19 07:29:46.000Z, ,"['882824','882822','882589','882820','882823','882829','882825','882827']", ,"['660435']", ,3.666,2722.95 +7565.0,confirm order,2019-09-19 07:37:31.000Z, , ,"['990702']", , ,4.203,6079.99 +7566.0,pick item,2019-09-19 07:37:34.000Z, ,"['882410']", , , ,1.25,2200.0 +7567.0,pick item,2019-09-19 07:39:35.000Z, ,"['882866']", , , ,0.188,1149.0 +7568.0,failed delivery,2019-09-19 07:41:03.000Z, , , ,"['660432']", ,4.369,2447.96 +7569.0,pay order,2019-09-19 07:41:35.000Z, , ,"['990678']", , ,0.952,803.99 +7570.0,reorder item,2019-09-19 07:48:04.000Z, ,"['882789']", , , ,0.88,89.99 +7571.0,send package,2019-09-19 07:59:14.000Z, , , ,"['660433']", ,8.412,3455.94 +7572.0,pick item,2019-09-19 08:04:21.000Z, ,"['882863']", , , ,0.28,449.0 +7573.0,pick item,2019-09-19 08:17:50.000Z, ,"['882525']", , , ,0.44,476.0 +7574.0,confirm order,2019-09-19 08:31:55.000Z, , ,"['990710']", , ,3.176,3972.97 +7575.0,pay order,2019-09-19 08:32:25.000Z, , ,"['990688']", , ,1.856,2502.99 +7576.0,pick item,2019-09-19 08:36:02.000Z, ,"['882579']", , , ,0.2,39.99 +7577.0,pick item,2019-09-19 08:41:04.000Z, ,"['882861']", , , ,0.483,495.0 +7578.0,reorder item,2019-09-19 08:52:57.000Z, ,"['882867']", , , ,0.44,476.0 +7579.0,pick item,2019-09-19 08:58:58.000Z, ,"['882851']", , , ,0.21,529.0 +7580.0,pick item,2019-09-19 09:03:31.000Z, ,"['882884']", , , ,0.88,89.99 +7581.0,create package,2019-09-19 09:03:31.000Z, ,"['882806','882809','882808','882802','882598','882739']", ,"['660436']", ,3.645,3064.97 +7582.0,pick item,2019-09-19 09:08:26.000Z, ,"['882258']", , , ,0.28,449.0 +7583.0,place order,2019-09-19 09:09:33.000Z, ,"['882887','882888','882891','882892','882890','882889']","['990714']", , ,2.1180000000000003,2252.99 +7584.0,pick item,2019-09-19 09:10:39.000Z, ,"['882892']", , , ,0.483,495.0 +7585.0,confirm order,2019-09-19 09:15:43.000Z, , ,"['990708']", , ,4.362,2415.96 +7586.0,pick item,2019-09-19 09:16:25.000Z, ,"['882879']", , , ,1.25,2200.0 +7587.0,pick item,2019-09-19 09:25:51.000Z, ,"['882881']", , , ,0.38,29.99 +7588.0,send package,2019-09-19 09:30:59.000Z, , , ,"['660435']", ,3.666,2722.95 +7589.0,package delivered,2019-09-19 09:42:18.000Z, , , ,"['660427']", ,5.82,3664.96 +7590.0,confirm order,2019-09-19 09:53:20.000Z, , ,"['990709']", , ,1.283,2408.99 +7591.0,pay order,2019-09-19 09:58:04.000Z, , ,"['990648']", , ,5.069,5031.98 +7592.0,confirm order,2019-09-19 10:01:34.000Z, , ,"['990712']", , ,2.29,2713.98 +7593.0,pick item,2019-09-19 10:17:12.000Z, ,"['882764']", , , ,0.28,449.0 +7594.0,package delivered,2019-09-19 10:20:23.000Z, , , ,"['660422']", ,3.947,3957.95 +7595.0,pick item,2019-09-19 10:23:18.000Z, ,"['882886']", , , ,1.28,149.99 +7596.0,create package,2019-09-19 10:23:18.000Z, ,"['882253','882721','882866','882722','882725','882892']", ,"['660437']", ,2.441,2372.97 +7597.0,pick item,2019-09-19 10:31:59.000Z, ,"['882816']", , , ,0.483,495.0 +7598.0,pick item,2019-09-19 10:35:47.000Z, ,"['882875']", , , ,1.48,199.99 +7599.0,pay order,2019-09-19 10:37:57.000Z, , ,"['990602']", , ,1.009,3751.0 +7600.0,place order,2019-09-19 10:38:53.000Z, ,"['882896','882894','882897','882895','882893']","['990715']", , ,3.2030000000000003,3241.98 +7601.0,pick item,2019-09-19 10:54:36.000Z, ,"['882778']", , , ,0.495,129.0 +7602.0,failed delivery,2019-09-19 10:56:30.000Z, , , ,"['660435']", ,3.666,2722.95 +7603.0,confirm order,2019-09-19 11:00:23.000Z, , ,"['990714']", , ,2.1180000000000003,2252.99 +7604.0,item out of stock,2019-09-19 11:24:10.000Z, ,"['882821']", , , ,0.28,449.0 +7605.0,reorder item,2019-09-19 12:07:31.000Z, ,"['882790']", , , ,0.483,1099.0 +7606.0,pick item,2019-09-19 12:33:33.000Z, ,"['882883']", , , ,1.48,199.99 +7607.0,place order,2019-09-19 12:37:34.000Z, ,"['882901','882899','882900','882898']","['990716']", , ,2.955,473.97 +7608.0,package delivered,2019-09-19 12:47:33.000Z, , , ,"['660432']", ,4.369,2447.96 +7609.0,confirm order,2019-09-19 12:47:35.000Z, , ,"['990715']", , ,3.2030000000000003,3241.98 +7610.0,confirm order,2019-09-19 12:53:25.000Z, , ,"['990716']", , ,2.955,473.97 +7611.0,payment reminder,2019-09-19 13:04:53.000Z, , ,"['990598']", , ,3.623,1473.97 +7612.0,reorder item,2019-09-19 13:08:43.000Z, ,"['882792']", , , ,0.483,1099.0 +7613.0,pay order,2019-09-19 13:09:02.000Z, , ,"['990714']", , ,2.1180000000000003,2252.99 +7614.0,pick item,2019-09-19 13:15:34.000Z, ,"['882590']", , , ,0.28,89.99 +7615.0,item out of stock,2019-09-19 13:17:31.000Z, ,"['882810']", , , ,0.2,39.99 +7616.0,pick item,2019-09-19 13:19:07.000Z, ,"['882872']", , , ,0.2,39.99 +7617.0,create package,2019-09-19 13:19:07.000Z, ,"['882883','882579','882504','882773','882884','882535','882886','882769','882771']", ,"['660438']", ,7.933,4058.93 +7618.0,pick item,2019-09-19 13:21:46.000Z, ,"['882880']", , , ,0.38,29.99 +7619.0,payment reminder,2019-09-19 13:34:51.000Z, , ,"['990590']", , ,0.546,833.99 +7620.0,confirm order,2019-09-19 13:37:26.000Z, , ,"['990713']", , ,4.135,573.97 +7621.0,reorder item,2019-09-19 13:39:22.000Z, ,"['882841']", , , ,0.483,495.0 +7622.0,pay order,2019-09-19 13:40:36.000Z, , ,"['990673']", , ,5.848,1983.92 +7623.0,item out of stock,2019-09-19 13:42:33.000Z, ,"['882777']", , , ,0.2,39.99 +7624.0,pay order,2019-09-19 13:43:59.000Z, , ,"['990676']", , ,0.446,1253.0 +7625.0,item out of stock,2019-09-19 13:46:34.000Z, ,"['882888']", , , ,0.28,89.99 +7626.0,pick item,2019-09-19 13:54:48.000Z, ,"['882848']", , , ,0.21,529.0 +7627.0,pick item,2019-09-19 13:54:52.000Z, ,"['882783']", , , ,0.28,449.0 +7628.0,failed delivery,2019-09-19 13:55:26.000Z, , , ,"['660435']", ,3.666,2722.95 +7629.0,pick item,2019-09-19 14:01:01.000Z, ,"['882560']", , , ,1.48,199.99 +7630.0,pick item,2019-09-19 14:07:01.000Z, ,"['882862']", , , ,0.495,129.0 +7631.0,send package,2019-09-19 14:11:13.000Z, , , ,"['660437']", ,2.441,2372.97 +7632.0,pick item,2019-09-19 14:11:14.000Z, ,"['882887']", , , ,0.495,129.0 +7633.0,pick item,2019-09-19 14:23:22.000Z, ,"['882882']", , , ,0.28,449.0 +7634.0,place order,2019-09-19 14:34:55.000Z, ,"['882902','882904','882903']","['990717']", , ,1.973,763.98 +7635.0,reorder item,2019-09-19 14:42:30.000Z, ,"['882819']", , , ,0.44,476.0 +7636.0,send package,2019-09-19 14:46:54.000Z, , , ,"['660438']", ,7.933,4058.93 +7637.0,reorder item,2019-09-19 14:51:02.000Z, ,"['882821']", , , ,0.28,449.0 +7638.0,pick item,2019-09-19 14:52:52.000Z, ,"['882838']", , , ,0.172,699.0 +7639.0,pick item,2019-09-19 15:16:23.000Z, ,"['882859']", , , ,0.28,89.99 +7640.0,create package,2019-09-19 15:16:23.000Z, ,"['882880','882879','882609','882881','882882','881787']", ,"['660439']", ,2.995,3366.98 +7641.0,pick item,2019-09-19 15:35:37.000Z, ,"['882688']", , , ,0.483,1099.0 +7642.0,pick item,2019-09-19 15:45:15.000Z, ,"['882858']", , , ,0.495,129.0 +7643.0,pick item,2019-09-19 15:46:28.000Z, ,"['882805']", , , ,0.483,1099.0 +7644.0,package delivered,2019-09-19 15:49:34.000Z, , , ,"['660435']", ,3.666,2722.95 +7645.0,pick item,2019-09-19 15:54:42.000Z, ,"['882897']", , , ,0.88,89.99 +7646.0,pick item,2019-09-19 16:04:27.000Z, ,"['882902']", , , ,0.21,529.0 +7647.0,pick item,2019-09-19 16:18:39.000Z, ,"['882689']", , , ,1.37,2500.0 +7648.0,create package,2019-09-19 16:18:39.000Z, ,"['882832','882833','882258','882835','882664']", ,"['660440']", ,3.703,5820.0 +7649.0,send package,2019-09-19 16:19:00.000Z, , , ,"['660434']", ,4.945,4707.96 +7650.0,pick item,2019-09-19 16:19:13.000Z, ,"['882854']", , , ,0.188,1149.0 +7651.0,place order,2019-09-19 16:29:38.000Z, ,"['882907','882905','882906']","['990718']", , ,2.343,719.98 +7652.0,item out of stock,2019-09-19 16:36:30.000Z, ,"['882828']", , , ,0.28,449.0 +7653.0,confirm order,2019-09-19 19:02:31.000Z, , ,"['990711']", , ,3.828,3932.99 +7654.0,place order,2019-09-19 19:08:28.000Z, ,"['882912','882911','882909','882916','882915','882910','882908','882914','882919','882918','882913','882917']","['990719']", , ,8.34,11584.97 +7655.0,place order,2019-09-20 01:08:42.000Z, ,"['882922','882921','882923','882920']","['990720']", , ,4.705,2733.98 +7656.0,confirm order,2019-09-20 06:50:30.000Z, , ,"['990703']", , ,6.115,5998.98 +7657.0,package delivered,2019-09-20 07:00:45.000Z, , , ,"['660437']", ,2.441,2372.97 +7658.0,pick item,2019-09-20 07:10:00.000Z, ,"['882749']", , , ,0.28,89.99 +7659.0,send package,2019-09-20 07:12:07.000Z, , , ,"['660439']", ,2.995,3366.98 +7660.0,item out of stock,2019-09-20 07:17:05.000Z, ,"['882895']", , , ,1.48,199.99 +7661.0,place order,2019-09-20 07:29:22.000Z, ,"['882926','882925','882927','882924','882928']","['990721']", , ,1.5319999999999998,2062.97 +7662.0,send package,2019-09-20 07:40:21.000Z, , , ,"['660436']", ,3.645,3064.97 +7663.0,pick item,2019-09-20 07:51:37.000Z, ,"['882834']", , , ,0.483,1099.0 +7664.0,pay order,2019-09-20 07:56:28.000Z, , ,"['990647']", , ,4.01,8180.0 +7665.0,package delivered,2019-09-20 07:58:10.000Z, , , ,"['660436']", ,3.645,3064.97 +7666.0,item out of stock,2019-09-20 08:07:12.000Z, ,"['882756']", , , ,0.28,89.99 +7667.0,confirm order,2019-09-20 08:20:08.000Z, , ,"['990720']", , ,4.705,2733.98 +7668.0,pick item,2019-09-20 08:38:30.000Z, ,"['882900']", , , ,0.78,99.99 +7669.0,pick item,2019-09-20 08:43:48.000Z, ,"['882868']", , , ,0.172,699.0 +7670.0,create package,2019-09-20 08:43:48.000Z, ,"['882858','882859','882897','882707','882863','882840','882836','882838','882862','882450','882410','882860','882861']", ,"['660441']", ,8.471,8335.96 +7671.0,pick item,2019-09-20 08:45:59.000Z, ,"['882913']", , , ,0.166,799.0 +7672.0,pick item,2019-09-20 08:51:46.000Z, ,"['882898']", , , ,1.48,199.99 +7673.0,pick item,2019-09-20 09:17:13.000Z, ,"['882921']", , , ,1.25,2200.0 +7674.0,pick item,2019-09-20 09:17:26.000Z, ,"['882894']", , , ,0.172,699.0 +7675.0,pick item,2019-09-20 09:17:52.000Z, ,"['882716']", , , ,0.98,129.99 +7676.0,place order,2019-09-20 09:18:31.000Z, ,"['882929']","['990722']", , ,0.483,1104.0 +7677.0,pick item,2019-09-20 09:20:18.000Z, ,"['882668']", , , ,1.37,2500.0 +7678.0,confirm order,2019-09-20 09:31:03.000Z, , ,"['990722']", , ,0.483,1104.0 +7679.0,confirm order,2019-09-20 09:39:15.000Z, , ,"['990718']", , ,2.343,719.98 +7680.0,package delivered,2019-09-20 09:45:20.000Z, , , ,"['660433']", ,8.412,3455.94 +7681.0,pick item,2019-09-20 09:57:29.000Z, ,"['882837']", , , ,1.48,199.99 +7682.0,reorder item,2019-09-20 10:01:05.000Z, ,"['882777']", , , ,0.2,39.99 +7683.0,reorder item,2019-09-20 10:03:52.000Z, ,"['882810']", , , ,0.2,39.99 +7684.0,pick item,2019-09-20 10:12:03.000Z, ,"['882896']", , , ,0.188,1149.0 +7685.0,send package,2019-09-20 10:36:03.000Z, , , ,"['660440']", ,3.703,5820.0 +7686.0,pick item,2019-09-20 10:41:15.000Z, ,"['882706']", , , ,0.188,1149.0 +7687.0,package delivered,2019-09-20 10:48:01.000Z, , , ,"['660438']", ,7.933,4058.93 +7688.0,place order,2019-09-20 10:56:50.000Z, ,"['882932','882930','882931']","['990723']", , ,2.2430000000000003,264.97 +7689.0,package delivered,2019-09-20 10:59:26.000Z, , , ,"['660434']", ,4.945,4707.96 +7690.0,confirm order,2019-09-20 11:05:56.000Z, , ,"['990717']", , ,1.973,763.98 +7691.0,pick item,2019-09-20 11:53:36.000Z, ,"['882924']", , , ,0.2,39.99 +7692.0,reorder item,2019-09-20 12:13:35.000Z, ,"['882803']", , , ,0.98,129.99 +7693.0,pick item,2019-09-20 12:20:00.000Z, ,"['882855']", , , ,0.88,89.99 +7694.0,pick item,2019-09-20 12:38:43.000Z, ,"['882803']", , , ,0.98,129.99 +7695.0,pick item,2019-09-20 12:53:01.000Z, ,"['882901']", , , ,0.495,129.0 +7696.0,create package,2019-09-20 12:53:01.000Z, ,"['882844','882878','882778','882842','882710','882708','882847','882779','882846','882875','882341']", ,"['660442']", ,7.176,4854.96 +7697.0,pay order,2019-09-20 13:05:27.000Z, , ,"['990690']", , ,2.523,1178.98 +7698.0,place order,2019-09-20 13:13:27.000Z, ,"['882934','882933','882935','882936']","['990724']", , ,3.55,2910.98 +7699.0,confirm order,2019-09-20 13:17:32.000Z, , ,"['990723']", , ,2.2430000000000003,264.97 +7700.0,reorder item,2019-09-20 13:17:49.000Z, ,"['882815']", , , ,0.78,99.99 +7701.0,pick item,2019-09-20 13:21:01.000Z, ,"['882345']", , , ,0.2,39.99 +7702.0,item out of stock,2019-09-20 13:26:59.000Z, ,"['882831']", , , ,0.78,99.99 +7703.0,pick item,2019-09-20 13:28:53.000Z, ,"['882865']", , , ,0.483,79.99 +7704.0,package delivered,2019-09-20 13:33:40.000Z, , , ,"['660440']", ,3.703,5820.0 +7705.0,confirm order,2019-09-20 13:35:09.000Z, , ,"['990719']", , ,8.34,11584.97 +7706.0,pick item,2019-09-20 13:41:49.000Z, ,"['882857']", , , ,0.2,39.99 +7707.0,pick item,2019-09-20 13:42:08.000Z, ,"['882903']", , , ,0.483,79.99 +7708.0,pick item,2019-09-20 13:47:32.000Z, ,"['882891']", , , ,0.21,529.0 +7709.0,item out of stock,2019-09-20 13:52:50.000Z, ,"['882926']", , , ,0.483,1099.0 +7710.0,pick item,2019-09-20 13:54:42.000Z, ,"['882856']", , , ,1.48,199.99 +7711.0,send package,2019-09-20 13:57:51.000Z, , , ,"['660442']", ,7.176,4854.96 +7712.0,package delivered,2019-09-20 14:02:43.000Z, , , ,"['660439']", ,2.995,3366.98 +7713.0,pick item,2019-09-20 14:03:28.000Z, ,"['882222']", , , ,0.188,1149.0 +7714.0,pick item,2019-09-20 14:20:23.000Z, ,"['882936']", , , ,0.38,29.99 +7715.0,pick item,2019-09-20 14:22:43.000Z, ,"['881839']", , , ,0.28,449.0 +7716.0,pick item,2019-09-20 14:26:06.000Z, ,"['882704']", , , ,0.28,449.0 +7717.0,pay order,2019-09-20 14:27:09.000Z, , ,"['990715']", , ,3.2030000000000003,3241.98 +7718.0,item out of stock,2019-09-20 14:43:28.000Z, ,"['882919']", , , ,0.188,1149.0 +7719.0,place order,2019-09-20 14:46:42.000Z, ,"['882937']","['990725']", , ,0.2,44.99 +7720.0,pick item,2019-09-20 14:53:16.000Z, ,"['882935']", , , ,1.25,2200.0 +7721.0,create package,2019-09-20 14:53:16.000Z, ,"['882786','882811','882783','881997']", ,"['660443']", ,2.4530000000000003,2276.99 +7722.0,pick item,2019-09-20 14:56:26.000Z, ,"['882890']", , , ,0.21,529.0 +7723.0,pick item,2019-09-20 15:27:17.000Z, ,"['882871']", , , ,0.28,89.99 +7724.0,pay order,2019-09-20 15:34:58.000Z, , ,"['990704']", , ,2.345,3192.99 +7725.0,pick item,2019-09-20 15:55:39.000Z, ,"['882807']", , , ,0.483,1099.0 +7726.0,item out of stock,2019-09-20 15:59:22.000Z, ,"['882933']", , , ,0.44,476.0 +7727.0,item out of stock,2019-09-20 16:17:49.000Z, ,"['882874']", , , ,1.37,2500.0 +7728.0,send package,2019-09-20 16:41:34.000Z, , , ,"['660441']", ,8.471,8335.96 +7729.0,place order,2019-09-20 16:53:11.000Z, ,"['882939','882940','882938']","['990726']", , ,1.063,569.98 +7730.0,pick item,2019-09-20 17:22:50.000Z, ,"['882813']", , , ,0.78,99.99 +7731.0,create package,2019-09-20 17:22:50.000Z, ,"['882791','882871','882872']", ,"['660444']", ,1.73,2329.98 +7732.0,confirm order,2019-09-20 17:22:56.000Z, , ,"['990721']", , ,1.5319999999999998,2062.97 +7733.0,item out of stock,2019-09-20 18:42:55.000Z, ,"['882930']", , , ,0.88,89.99 +7734.0,pick item,2019-09-20 19:45:43.000Z, ,"['882928']", , , ,0.483,79.99 +7735.0,reorder item,2019-09-20 19:56:18.000Z, ,"['882756']", , , ,0.28,89.99 +7736.0,place order,2019-09-20 20:19:08.000Z, ,"['882941','882945','882942','882944','882943']","['990727']", , ,2.539,2297.98 +7737.0,place order,2019-09-21 14:54:42.000Z, ,"['882948','882947','882946','882949']","['990728']", , ,3.2260000000000004,2502.98 +7738.0,create package,2019-09-21 23:00:00.000Z, ,"['882651']", ,"['660445']", ,0.78,99.99 +7739.0,payment reminder,2019-09-22 09:26:56.000Z, , ,"['990471']", , ,5.896,3437.91 +7740.0,place order,2019-09-22 15:43:18.000Z, ,"['882955','882951','882952','882950','882954','882953']","['990729']", , ,3.808,4562.97 +7741.0,confirm order,2019-09-23 06:48:45.000Z, , ,"['990729']", , ,3.808,4562.97 +7742.0,pick item,2019-09-23 07:03:19.000Z, ,"['882925']", , , ,0.166,799.0 +7743.0,place order,2019-09-23 07:06:20.000Z, ,"['882959','882957','882956','882958']","['990730']", , ,1.763,1412.98 +7744.0,send package,2019-09-23 07:13:02.000Z, , , ,"['660445']", ,0.78,99.99 +7745.0,pick item,2019-09-23 07:17:47.000Z, ,"['882948']", , , ,1.48,199.99 +7746.0,reorder item,2019-09-23 07:18:55.000Z, ,"['882874']", , , ,1.37,2500.0 +7747.0,pay order,2019-09-23 07:21:02.000Z, , ,"['990703']", , ,6.115,5998.98 +7748.0,confirm order,2019-09-23 07:27:54.000Z, , ,"['990727']", , ,2.539,2297.98 +7749.0,item out of stock,2019-09-23 07:28:23.000Z, ,"['882920']", , , ,0.495,129.0 +7750.0,pick item,2019-09-23 07:28:28.000Z, ,"['882922']", , , ,1.48,199.99 +7751.0,create package,2019-09-23 07:28:28.000Z, ,"['882924','882595','882925','882560','882758','882928','882222']", ,"['660446']", ,3.007,3245.97 +7752.0,item out of stock,2019-09-23 07:32:59.000Z, ,"['882752']", , , ,0.78,99.99 +7753.0,pick item,2019-09-23 07:38:27.000Z, ,"['882022']", , , ,0.483,495.0 +7754.0,pick item,2019-09-23 07:51:12.000Z, ,"['882874']", , , ,1.37,2500.0 +7755.0,item out of stock,2019-09-23 08:15:49.000Z, ,"['882914']", , , ,1.37,2500.0 +7756.0,package delivered,2019-09-23 08:23:44.000Z, , , ,"['660441']", ,8.471,8335.96 +7757.0,item out of stock,2019-09-23 08:24:01.000Z, ,"['882937']", , , ,0.2,39.99 +7758.0,send package,2019-09-23 08:28:06.000Z, , , ,"['660444']", ,1.73,2329.98 +7759.0,pick item,2019-09-23 08:29:00.000Z, ,"['882787']", , , ,0.78,99.99 +7760.0,item out of stock,2019-09-23 08:31:08.000Z, ,"['882931']", , , ,0.88,89.99 +7761.0,place order,2019-09-23 08:32:28.000Z, ,"['882960','882961']","['990731']", , ,0.468,1603.0 +7762.0,pick item,2019-09-23 08:34:46.000Z, ,"['882904']", , , ,1.28,149.99 +7763.0,pick item,2019-09-23 08:35:47.000Z, ,"['882845']", , , ,0.44,476.0 +7764.0,send package,2019-09-23 08:51:32.000Z, , , ,"['660446']", ,3.007,3245.97 +7765.0,reorder item,2019-09-23 08:52:18.000Z, ,"['882937']", , , ,0.2,39.99 +7766.0,pick item,2019-09-23 08:53:22.000Z, ,"['882941']", , , ,0.483,495.0 +7767.0,pick item,2019-09-23 08:54:35.000Z, ,"['882877']", , , ,0.495,129.0 +7768.0,create package,2019-09-23 08:54:35.000Z, ,"['882816','882817','882764']", ,"['660447']", ,1.043,1393.0 +7769.0,pick item,2019-09-23 09:08:51.000Z, ,"['882692']", , , ,0.166,799.0 +7770.0,pick item,2019-09-23 09:15:27.000Z, ,"['882869']", , , ,0.88,89.99 +7771.0,confirm order,2019-09-23 09:17:32.000Z, , ,"['990730']", , ,1.763,1412.98 +7772.0,pick item,2019-09-23 09:21:57.000Z, ,"['882947']", , , ,0.483,1099.0 +7773.0,create package,2019-09-23 09:21:57.000Z, ,"['882726']", ,"['660448']", ,0.38,29.99 +7774.0,pick item,2019-09-23 09:24:40.000Z, ,"['882889']", , , ,0.44,476.0 +7775.0,create package,2019-09-23 09:24:40.000Z, ,"['882848','882590','882704','882525']", ,"['660449']", ,1.21,1543.99 +7776.0,pick item,2019-09-23 09:38:17.000Z, ,"['882916']", , , ,0.172,699.0 +7777.0,reorder item,2019-09-23 09:39:07.000Z, ,"['882926']", , , ,0.483,1099.0 +7778.0,pick item,2019-09-23 09:42:17.000Z, ,"['882960']", , , ,0.188,1149.0 +7779.0,item out of stock,2019-09-23 09:45:05.000Z, ,"['882912']", , , ,1.37,2500.0 +7780.0,pick item,2019-09-23 09:48:21.000Z, ,"['882959']", , , ,0.495,129.0 +7781.0,pick item,2019-09-23 09:53:26.000Z, ,"['882944']", , , ,0.88,89.99 +7782.0,create package,2019-09-23 09:53:26.000Z, ,"['882900','882022','882855','882851','882898','882749','882854','882901']", ,"['660450']", ,4.796,2781.96 +7783.0,confirm order,2019-09-23 09:55:25.000Z, , ,"['990726']", , ,1.063,569.98 +7784.0,pay order,2019-09-23 10:08:05.000Z, , ,"['990702']", , ,4.203,6079.99 +7785.0,pay order,2019-09-23 10:12:11.000Z, , ,"['990596']", , ,2.321,4238.99 +7786.0,pay order,2019-09-23 10:13:22.000Z, , ,"['990672']", , ,1.903,1105.99 +7787.0,pick item,2019-09-23 10:21:50.000Z, ,"['882573']", , , ,0.166,799.0 +7788.0,item out of stock,2019-09-23 10:23:23.000Z, ,"['882843']", , , ,0.21,529.0 +7789.0,pick item,2019-09-23 10:24:07.000Z, ,"['882413']", , , ,0.28,449.0 +7790.0,pick item,2019-09-23 10:24:35.000Z, ,"['882906']", , , ,0.98,129.99 +7791.0,place order,2019-09-23 10:24:43.000Z, ,"['882962','882965','882964','882963']","['990732']", , ,2.528,3972.99 +7792.0,pick item,2019-09-23 10:36:21.000Z, ,"['882917']", , , ,0.28,449.0 +7793.0,send package,2019-09-23 10:46:52.000Z, , , ,"['660443']", ,2.4530000000000003,2276.99 +7794.0,send package,2019-09-23 10:58:31.000Z, , , ,"['660448']", ,0.38,29.99 +7795.0,package delivered,2019-09-23 11:03:30.000Z, , , ,"['660445']", ,0.78,99.99 +7796.0,pick item,2019-09-23 11:17:36.000Z, ,"['882929']", , , ,0.483,1099.0 +7797.0,reorder item,2019-09-23 11:25:07.000Z, ,"['882752']", , , ,0.78,99.99 +7798.0,confirm order,2019-09-23 12:03:57.000Z, , ,"['990732']", , ,2.528,3972.99 +7799.0,place order,2019-09-23 12:09:14.000Z, ,"['882969','882968','882967','882966']","['990733']", , ,2.351,3609.0 +7800.0,pick item,2019-09-23 12:11:51.000Z, ,"['882864']", , , ,0.166,799.0 +7801.0,pay order,2019-09-23 12:12:34.000Z, , ,"['990650']", , ,3.213,3503.99 +7802.0,reorder item,2019-09-23 12:15:32.000Z, ,"['882831']", , , ,0.78,99.99 +7803.0,pick item,2019-09-23 12:24:11.000Z, ,"['882876']", , , ,1.37,2500.0 +7804.0,pick item,2019-09-23 12:33:47.000Z, ,"['882969']", , , ,0.166,799.0 +7805.0,create package,2019-09-23 12:33:47.000Z, ,"['882868','882865','882891','882935','882904','882936','882889','882902','882887','882969','882890','882903']", ,"['660451']", ,5.779,6229.96 +7806.0,pay order,2019-09-23 12:46:06.000Z, , ,"['990701']", , ,1.791,4434.99 +7807.0,pick item,2019-09-23 12:50:34.000Z, ,"['882907']", , , ,0.483,495.0 +7808.0,reorder item,2019-09-23 13:28:54.000Z, ,"['882919']", , , ,0.188,1149.0 +7809.0,pick item,2019-09-23 13:29:08.000Z, ,"['882943']", , , ,0.483,1099.0 +7810.0,pick item,2019-09-23 13:29:57.000Z, ,"['882939']", , , ,0.2,39.99 +7811.0,pick item,2019-09-23 13:30:21.000Z, ,"['882607']", , , ,0.483,1099.0 +7812.0,pick item,2019-09-23 13:37:03.000Z, ,"['882961']", , , ,0.28,449.0 +7813.0,place order,2019-09-23 13:38:15.000Z, ,"['882970','882971']","['990734']", , ,2.96,404.98 +7814.0,send package,2019-09-23 13:38:37.000Z, , , ,"['660449']", ,1.21,1543.99 +7815.0,pick item,2019-09-23 13:48:18.000Z, ,"['882784']", , , ,0.78,99.99 +7816.0,payment reminder,2019-09-23 13:54:20.000Z, , ,"['990607']", , ,1.858,1322.99 +7817.0,pick item,2019-09-23 13:56:01.000Z, ,"['882953']", , , ,1.48,199.99 +7818.0,send package,2019-09-23 13:59:16.000Z, , , ,"['660450']", ,4.796,2781.96 +7819.0,reorder item,2019-09-23 14:01:26.000Z, ,"['882828']", , , ,0.28,449.0 +7820.0,pay order,2019-09-23 14:04:08.000Z, , ,"['990590']", , ,0.546,833.99 +7821.0,pick item,2019-09-23 14:13:32.000Z, ,"['882958']", , , ,0.2,39.99 +7822.0,send package,2019-09-23 14:23:47.000Z, , , ,"['660451']", ,5.779,6229.96 +7823.0,reorder item,2019-09-23 14:34:51.000Z, ,"['882930']", , , ,0.88,89.99 +7824.0,pick item,2019-09-23 14:44:52.000Z, ,"['882782']", , , ,0.78,99.99 +7825.0,payment reminder,2019-09-23 14:47:53.000Z, , ,"['990603']", , ,2.146,1489.97 +7826.0,pick item,2019-09-23 14:50:57.000Z, ,"['882870']", , , ,0.28,449.0 +7827.0,reorder item,2019-09-23 14:55:47.000Z, ,"['882931']", , , ,0.88,89.99 +7828.0,confirm order,2019-09-23 14:55:58.000Z, , ,"['990731']", , ,0.468,1603.0 +7829.0,pick item,2019-09-23 14:57:55.000Z, ,"['882564']", , , ,0.2,39.99 +7830.0,pick item,2019-09-23 15:03:51.000Z, ,"['882761']", , , ,0.28,89.99 +7831.0,create package,2019-09-23 15:03:51.000Z, ,"['882688','882689','882692','882716']", ,"['660452']", ,2.999,4527.99 +7832.0,pick item,2019-09-23 15:05:01.000Z, ,"['882968']", , , ,0.495,129.0 +7833.0,send package,2019-09-23 15:06:15.000Z, , , ,"['660452']", ,2.999,4527.99 +7834.0,pick item,2019-09-23 15:14:15.000Z, ,"['882949']", , , ,0.483,1099.0 +7835.0,pick item,2019-09-23 15:19:09.000Z, ,"['882756']", , , ,0.28,89.99 +7836.0,package delivered,2019-09-23 15:28:53.000Z, , , ,"['660443']", ,2.4530000000000003,2276.99 +7837.0,pick item,2019-09-23 15:31:19.000Z, ,"['882705']", , , ,0.38,29.99 +7838.0,create package,2019-09-23 15:31:19.000Z, ,"['882803','882807','882805','882345']", ,"['660453']", ,2.146,2367.98 +7839.0,package delivered,2019-09-23 15:33:10.000Z, , , ,"['660450']", ,4.796,2781.96 +7840.0,place order,2019-09-23 15:36:17.000Z, ,"['882974','882979','882978','882972','882975','882977','882976','882973']","['990735']", , ,6.952000000000001,3822.96 +7841.0,pick item,2019-09-23 15:56:46.000Z, ,"['882966']", , , ,1.25,2200.0 +7842.0,pick item,2019-09-23 16:09:00.000Z, ,"['882934']", , , ,1.48,199.99 +7843.0,confirm order,2019-09-23 16:16:47.000Z, , ,"['990725']", , ,0.2,44.99 +7844.0,pick item,2019-09-23 16:20:29.000Z, ,"['882967']", , , ,0.44,476.0 +7845.0,confirm order,2019-09-23 16:42:27.000Z, , ,"['990728']", , ,3.2260000000000004,2502.98 +7846.0,place order,2019-09-23 17:32:22.000Z, ,"['882980','882981']","['990736']", , ,1.18,174.98 +7847.0,send package,2019-09-23 17:37:13.000Z, , , ,"['660447']", ,1.043,1393.0 +7848.0,place order,2019-09-23 20:44:19.000Z, ,"['882982','882985','882987','882984','882983','882986']","['990737']", , ,2.255,2921.97 +7849.0,reorder item,2019-09-24 06:48:08.000Z, ,"['882895']", , , ,1.48,199.99 +7850.0,pick item,2019-09-24 06:51:19.000Z, ,"['882987']", , , ,0.28,89.99 +7851.0,create package,2019-09-24 06:51:19.000Z, ,"['882913','882834','882917','882668','882916']", ,"['660454']", ,2.471,5546.0 +7852.0,reorder item,2019-09-24 07:18:16.000Z, ,"['882914']", , , ,1.37,2500.0 +7853.0,package delivered,2019-09-24 07:18:27.000Z, , , ,"['660444']", ,1.73,2329.98 +7854.0,place order,2019-09-24 07:20:12.000Z, ,"['882988']","['990738']", , ,1.25,2205.0 +7855.0,pick item,2019-09-24 07:27:18.000Z, ,"['882789']", , , ,0.88,89.99 +7856.0,confirm order,2019-09-24 07:30:39.000Z, , ,"['990724']", , ,3.55,2910.98 +7857.0,pick item,2019-09-24 07:37:32.000Z, ,"['882673']", , , ,0.172,699.0 +7858.0,package delivered,2019-09-24 07:40:32.000Z, , , ,"['660446']", ,3.007,3245.97 +7859.0,pick item,2019-09-24 07:57:47.000Z, ,"['882988']", , , ,1.25,2200.0 +7860.0,reorder item,2019-09-24 08:01:17.000Z, ,"['882933']", , , ,0.44,476.0 +7861.0,package delivered,2019-09-24 08:17:20.000Z, , , ,"['660442']", ,7.176,4854.96 +7862.0,pick item,2019-09-24 08:42:09.000Z, ,"['882962']", , , ,0.188,1149.0 +7863.0,pick item,2019-09-24 08:54:28.000Z, ,"['882951']", , , ,0.21,529.0 +7864.0,create package,2019-09-24 08:54:28.000Z, ,"['882941','882922','882951','882944','882921','882953','882943']", ,"['660455']", ,6.266,4812.97 +7865.0,place order,2019-09-24 09:00:12.000Z, ,"['882990','882989']","['990739']", , ,1.65,2954.0 +7866.0,pay order,2019-09-24 09:04:29.000Z, , ,"['990726']", , ,1.063,569.98 +7867.0,pick item,2019-09-24 09:07:12.000Z, ,"['882918']", , , ,1.37,2500.0 +7868.0,pick item,2019-09-24 09:13:28.000Z, ,"['882982']", , , ,0.166,799.0 +7869.0,pay order,2019-09-24 09:17:34.000Z, , ,"['990708']", , ,4.362,2415.96 +7870.0,package delivered,2019-09-24 09:25:07.000Z, , , ,"['660448']", ,0.38,29.99 +7871.0,pick item,2019-09-24 09:30:01.000Z, ,"['882956']", , , ,0.88,89.99 +7872.0,pick item,2019-09-24 09:35:17.000Z, ,"['882950']", , , ,1.37,2500.0 +7873.0,pay order,2019-09-24 09:35:55.000Z, , ,"['990660']", , ,3.823,919.97 +7874.0,pick item,2019-09-24 09:37:32.000Z, ,"['882349']", , , ,0.98,129.99 +7875.0,pick item,2019-09-24 09:42:17.000Z, ,"['882908']", , , ,0.483,495.0 +7876.0,payment reminder,2019-09-24 09:43:53.000Z, , ,"['990621']", , ,3.851,3412.97 +7877.0,confirm order,2019-09-24 09:46:12.000Z, , ,"['990738']", , ,1.25,2205.0 +7878.0,pay order,2019-09-24 09:52:03.000Z, , ,"['990724']", , ,3.55,2910.98 +7879.0,pay order,2019-09-24 09:58:49.000Z, , ,"['990516']", , ,0.986,2911.98 +7880.0,confirm order,2019-09-24 10:07:27.000Z, , ,"['990736']", , ,1.18,174.98 +7881.0,pick item,2019-09-24 10:12:04.000Z, ,"['882964']", , , ,1.25,2200.0 +7882.0,create package,2019-09-24 10:12:04.000Z, ,"['882705','882894','882857','882706','882413','882982','882987','882856','882864','882896','882837']", ,"['660456']", ,4.98,5603.95 +7883.0,pick item,2019-09-24 10:17:47.000Z, ,"['882938']", , , ,0.483,495.0 +7884.0,place order,2019-09-24 10:20:11.000Z, ,"['882993','882994','882991','882996','882992','882995']","['990740']", , ,3.835,4204.99 +7885.0,confirm order,2019-09-24 10:23:37.000Z, , ,"['990737']", , ,2.255,2921.97 +7886.0,send package,2019-09-24 10:23:55.000Z, , , ,"['660455']", ,6.266,4812.97 +7887.0,send package,2019-09-24 10:32:00.000Z, , , ,"['660454']", ,2.471,5546.0 +7888.0,pick item,2019-09-24 11:04:18.000Z, ,"['882965']", , , ,0.21,529.0 +7889.0,reorder item,2019-09-24 11:20:42.000Z, ,"['882843']", , , ,0.21,529.0 +7890.0,pay order,2019-09-24 11:37:32.000Z, , ,"['990718']", , ,2.343,719.98 +7891.0,place order,2019-09-24 12:00:10.000Z, ,"['882997','882998']","['990741']", , ,1.22,580.99 +7892.0,pick item,2019-09-24 12:06:34.000Z, ,"['882989']", , , ,1.37,2500.0 +7893.0,pay order,2019-09-24 12:13:11.000Z, , ,"['990679']", , ,3.349,2678.98 +7894.0,send package,2019-09-24 12:14:57.000Z, , , ,"['660453']", ,2.146,2367.98 +7895.0,package delivered,2019-09-24 12:22:21.000Z, , , ,"['660447']", ,1.043,1393.0 +7896.0,confirm order,2019-09-24 12:32:44.000Z, , ,"['990740']", , ,3.835,4204.99 +7897.0,package delivered,2019-09-24 12:35:59.000Z, , , ,"['660453']", ,2.146,2367.98 +7898.0,payment reminder,2019-09-24 12:39:04.000Z, , ,"['990620']", , ,0.483,1104.0 +7899.0,failed delivery,2019-09-24 12:40:20.000Z, , , ,"['660449']", ,1.21,1543.99 +7900.0,item out of stock,2019-09-24 12:47:48.000Z, ,"['882885']", , , ,0.495,129.0 +7901.0,confirm order,2019-09-24 12:48:02.000Z, , ,"['990739']", , ,1.65,2954.0 +7902.0,pick item,2019-09-24 12:50:41.000Z, ,"['882978']", , , ,0.483,1099.0 +7903.0,item out of stock,2019-09-24 12:52:52.000Z, ,"['882972']", , , ,1.28,149.99 +7904.0,pick item,2019-09-24 12:58:39.000Z, ,"['882730']", , , ,1.25,2200.0 +7905.0,failed delivery,2019-09-24 13:01:00.000Z, , , ,"['660451']", ,5.779,6229.96 +7906.0,item out of stock,2019-09-24 13:01:26.000Z, ,"['882976']", , , ,1.48,199.99 +7907.0,confirm order,2019-09-24 13:04:31.000Z, , ,"['990741']", , ,1.22,580.99 +7908.0,item out of stock,2019-09-24 13:05:50.000Z, ,"['882984']", , , ,0.38,29.99 +7909.0,pick item,2019-09-24 13:19:56.000Z, ,"['882981']", , , ,0.98,129.99 +7910.0,place order,2019-09-24 13:20:07.000Z, ,"['883007','883006','883001','883008','883003','883004','883005','882999','883000','883002']","['990742']", , ,7.962999999999999,6238.94 +7911.0,pay order,2019-09-24 13:36:23.000Z, , ,"['990603']", , ,2.146,1489.97 +7912.0,pick item,2019-09-24 13:41:32.000Z, ,"['882946']", , , ,0.78,99.99 +7913.0,item out of stock,2019-09-24 13:45:04.000Z, ,"['882994']", , , ,0.495,129.0 +7914.0,pay order,2019-09-24 13:50:57.000Z, , ,"['990638']", , ,2.6180000000000003,2487.98 +7915.0,pick item,2019-09-24 13:55:21.000Z, ,"['882980']", , , ,0.2,39.99 +7916.0,reorder item,2019-09-24 13:56:01.000Z, ,"['882920']", , , ,0.495,129.0 +7917.0,pick item,2019-09-24 14:01:15.000Z, ,"['882963']", , , ,0.88,89.99 +7918.0,pick item,2019-09-24 14:08:04.000Z, ,"['882952']", , , ,0.28,89.99 +7919.0,payment reminder,2019-09-24 14:08:20.000Z, , ,"['990601']", , ,2.998,3952.99 +7920.0,pick item,2019-09-24 14:10:21.000Z, ,"['882995']", , , ,0.44,476.0 +7921.0,create package,2019-09-24 14:10:21.000Z, ,"['881839']", ,"['660457']", ,0.28,449.0 +7922.0,pay order,2019-09-24 14:10:34.000Z, , ,"['990620']", , ,0.483,1104.0 +7923.0,package delivered,2019-09-24 14:11:23.000Z, , , ,"['660452']", ,2.999,4527.99 +7924.0,pick item,2019-09-24 14:15:03.000Z, ,"['882977']", , , ,0.98,129.99 +7925.0,create package,2019-09-24 14:15:03.000Z, ,"['882813','882784','882787','882782']", ,"['660458']", ,3.12,399.96 +7926.0,send package,2019-09-24 14:15:11.000Z, , , ,"['660456']", ,4.98,5603.95 +7927.0,pick item,2019-09-24 14:39:14.000Z, ,"['883007']", , , ,0.98,129.99 +7928.0,confirm order,2019-09-24 14:40:50.000Z, , ,"['990734']", , ,2.96,404.98 +7929.0,item out of stock,2019-09-24 14:41:55.000Z, ,"['882986']", , , ,0.483,1099.0 +7930.0,pick item,2019-09-24 14:53:52.000Z, ,"['882942']", , , ,0.21,529.0 +7931.0,pick item,2019-09-24 14:53:59.000Z, ,"['883005']", , , ,0.28,89.99 +7932.0,pick item,2019-09-24 14:54:30.000Z, ,"['882971']", , , ,1.48,199.99 +7933.0,create package,2019-09-24 14:54:30.000Z, ,"['882845','882877','882947','882564','882949','882876','882948','882946']", ,"['660459']", ,5.731,5642.97 +7934.0,place order,2019-09-24 15:00:01.000Z, ,"['883010','883009']","['990743']", , ,0.693,1633.0 +7935.0,package delivered,2019-09-24 15:14:02.000Z, , , ,"['660451']", ,5.779,6229.96 +7936.0,item out of stock,2019-09-24 15:16:12.000Z, ,"['882849']", , , ,0.483,495.0 +7937.0,pick item,2019-09-24 15:24:07.000Z, ,"['882557']", , , ,1.37,2500.0 +7938.0,pick item,2019-09-24 15:24:34.000Z, ,"['882979']", , , ,0.483,495.0 +7939.0,pick item,2019-09-24 15:32:29.000Z, ,"['882997']", , , ,0.78,99.99 +7940.0,pick item,2019-09-24 15:34:27.000Z, ,"['882658']", , , ,0.21,529.0 +7941.0,send package,2019-09-24 15:36:33.000Z, , , ,"['660457']", ,0.28,449.0 +7942.0,package delivered,2019-09-24 15:57:30.000Z, , , ,"['660456']", ,4.98,5603.95 +7943.0,reorder item,2019-09-24 16:03:14.000Z, ,"['882984']", , , ,0.38,29.99 +7944.0,pick item,2019-09-24 16:07:06.000Z, ,"['882893']", , , ,0.483,1099.0 +7945.0,place order,2019-09-24 16:19:50.000Z, ,"['883014','883013','883011','883012']","['990744']", , ,2.416,3838.99 +7946.0,send package,2019-09-24 16:26:03.000Z, , , ,"['660459']", ,5.731,5642.97 +7947.0,confirm order,2019-09-24 16:28:22.000Z, , ,"['990733']", , ,2.351,3609.0 +7948.0,pay order,2019-09-24 16:28:24.000Z, , ,"['990720']", , ,4.705,2733.98 +7949.0,confirm order,2019-09-24 16:40:17.000Z, , ,"['990735']", , ,6.952000000000001,3822.96 +7950.0,pick item,2019-09-24 17:29:28.000Z, ,"['881809']", , , ,0.495,129.0 +7951.0,pick item,2019-09-24 18:20:00.000Z, ,"['882841']", , , ,0.483,495.0 +7952.0,place order,2019-09-24 18:39:05.000Z, ,"['883017','883015','883016']","['990745']", , ,2.216,3383.99 +7953.0,package delivered,2019-09-24 19:34:54.000Z, , , ,"['660455']", ,6.266,4812.97 +7954.0,place order,2019-09-24 23:12:24.000Z, ,"['883018','883019','883020']","['990746']", , ,3.28,4504.99 +7955.0,reorder item,2019-09-25 06:52:35.000Z, ,"['882994']", , , ,0.495,129.0 +7956.0,pick item,2019-09-25 07:00:48.000Z, ,"['882915']", , , ,1.48,199.99 +7957.0,create package,2019-09-25 07:00:48.000Z, ,"['881809','882959','882956','882874','882958','882869','882789','882870']", ,"['660460']", ,5.48,3516.96 +7958.0,reorder item,2019-09-25 07:01:58.000Z, ,"['882972']", , , ,1.28,149.99 +7959.0,pick item,2019-09-25 07:18:35.000Z, ,"['882909']", , , ,0.483,79.99 +7960.0,reorder item,2019-09-25 07:20:54.000Z, ,"['882986']", , , ,0.483,1099.0 +7961.0,place order,2019-09-25 07:21:26.000Z, ,"['883023','883024','883022','883021']","['990747']", , ,2.64,3223.98 +7962.0,package delivered,2019-09-25 07:31:51.000Z, , , ,"['660459']", ,5.731,5642.97 +7963.0,reorder item,2019-09-25 07:35:12.000Z, ,"['882849']", , , ,0.483,495.0 +7964.0,payment reminder,2019-09-25 07:52:34.000Z, , ,"['990504']", , ,2.013,3393.99 +7965.0,pick item,2019-09-25 07:53:32.000Z, ,"['882923']", , , ,1.48,199.99 +7966.0,pick item,2019-09-25 08:03:53.000Z, ,"['882975']", , , ,0.483,1099.0 +7967.0,pick item,2019-09-25 08:17:33.000Z, ,"['882905']", , , ,0.88,89.99 +7968.0,confirm order,2019-09-25 08:20:06.000Z, , ,"['990743']", , ,0.693,1633.0 +7969.0,pick item,2019-09-25 08:52:26.000Z, ,"['882873']", , , ,0.166,799.0 +7970.0,pick item,2019-09-25 09:02:04.000Z, ,"['882970']", , , ,1.48,199.99 +7971.0,place order,2019-09-25 09:02:39.000Z, ,"['883029','883028','883026','883027','883030','883025']","['990748']", , ,4.772,2101.97 +7972.0,pick item,2019-09-25 09:03:26.000Z, ,"['883022']", , , ,0.78,99.99 +7973.0,pick item,2019-09-25 09:07:13.000Z, ,"['882777']", , , ,0.2,39.99 +7974.0,create package,2019-09-25 09:07:13.000Z, ,"['882960','882989','882573','882557','882961']", ,"['660461']", ,3.374,7397.0 +7975.0,item out of stock,2019-09-25 09:16:47.000Z, ,"['882985']", , , ,0.166,799.0 +7976.0,send package,2019-09-25 09:22:51.000Z, , , ,"['660458']", ,3.12,399.96 +7977.0,pay order,2019-09-25 09:26:22.000Z, , ,"['990735']", , ,6.952000000000001,3822.96 +7978.0,package delivered,2019-09-25 09:27:18.000Z, , , ,"['660454']", ,2.471,5546.0 +7979.0,item out of stock,2019-09-25 09:29:33.000Z, ,"['882957']", , , ,0.188,1149.0 +7980.0,pick item,2019-09-25 09:31:16.000Z, ,"['882310']", , , ,0.172,699.0 +7981.0,pick item,2019-09-25 09:33:08.000Z, ,"['883013']", , , ,0.483,495.0 +7982.0,send package,2019-09-25 09:39:56.000Z, , , ,"['660461']", ,3.374,7397.0 +7983.0,pick item,2019-09-25 09:41:33.000Z, ,"['882990']", , , ,0.28,449.0 +7984.0,pick item,2019-09-25 09:43:38.000Z, ,"['883001']", , , ,1.25,2200.0 +7985.0,pick item,2019-09-25 09:51:28.000Z, ,"['883016']", , , ,0.483,79.99 +7986.0,create package,2019-09-25 09:51:28.000Z, ,"['883007','883005','882907','882929','882905','883001','882906']", ,"['660462']", ,5.336,4233.96 +7987.0,pick item,2019-09-25 09:59:46.000Z, ,"['883027']", , , ,1.28,149.99 +7988.0,item out of stock,2019-09-25 10:05:43.000Z, ,"['882910']", , , ,0.483,79.99 +7989.0,item out of stock,2019-09-25 10:14:29.000Z, ,"['883009']", , , ,0.483,1099.0 +7990.0,pay order,2019-09-25 10:21:44.000Z, , ,"['990680']", , ,0.28,94.99 +7991.0,place order,2019-09-25 10:25:05.000Z, ,"['883032','883031']","['990749']", , ,0.552,733.99 +7992.0,pick item,2019-09-25 10:29:04.000Z, ,"['882954']", , , ,0.28,89.99 +7993.0,confirm order,2019-09-25 10:33:00.000Z, , ,"['990744']", , ,2.416,3838.99 +7994.0,pick item,2019-09-25 10:34:29.000Z, ,"['883012']", , , ,0.2,39.99 +7995.0,confirm order,2019-09-25 10:37:22.000Z, , ,"['990745']", , ,2.216,3383.99 +7996.0,item out of stock,2019-09-25 10:37:50.000Z, ,"['882998']", , , ,0.44,476.0 +7997.0,send package,2019-09-25 10:54:22.000Z, , , ,"['660460']", ,5.48,3516.96 +7998.0,reorder item,2019-09-25 11:06:43.000Z, ,"['882885']", , , ,0.495,129.0 +7999.0,package delivered,2019-09-25 11:12:32.000Z, , , ,"['660458']", ,3.12,399.96 +8000.0,reorder item,2019-09-25 11:41:18.000Z, ,"['882912']", , , ,1.37,2500.0 +8001.0,reorder item,2019-09-25 11:52:31.000Z, ,"['882910']", , , ,0.483,79.99 +8002.0,pick item,2019-09-25 12:02:41.000Z, ,"['882999']", , , ,0.483,495.0 +8003.0,pick item,2019-09-25 12:05:28.000Z, ,"['882974']", , , ,0.483,495.0 +8004.0,place order,2019-09-25 12:09:58.000Z, ,"['883035','883036','883037','883034','883038','883033']","['990750']", , ,3.635,2403.98 +8005.0,pick item,2019-09-25 12:22:27.000Z, ,"['883015']", , , ,0.483,1099.0 +8006.0,pick item,2019-09-25 12:24:07.000Z, ,"['883002']", , , ,0.28,449.0 +8007.0,create package,2019-09-25 12:24:07.000Z, ,"['882939','882938']", ,"['660463']", ,0.6829999999999999,534.99 +8008.0,pick item,2019-09-25 12:28:40.000Z, ,"['883006']", , , ,0.38,29.99 +8009.0,package delivered,2019-09-25 12:28:58.000Z, , , ,"['660457']", ,0.28,449.0 +8010.0,send package,2019-09-25 12:33:11.000Z, , , ,"['660462']", ,5.336,4233.96 +8011.0,pick item,2019-09-25 12:33:50.000Z, ,"['883000']", , , ,0.88,89.99 +8012.0,create package,2019-09-25 12:33:50.000Z, ,"['882970','882607','882971']", ,"['660464']", ,3.443,1498.98 +8013.0,failed delivery,2019-09-25 12:34:43.000Z, , , ,"['660462']", ,5.336,4233.96 +8014.0,pick item,2019-09-25 12:46:04.000Z, ,"['883038']", , , ,0.28,449.0 +8015.0,item out of stock,2019-09-25 13:02:30.000Z, ,"['883010']", , , ,0.21,529.0 +8016.0,pick item,2019-09-25 13:13:13.000Z, ,"['882986']", , , ,0.483,1099.0 +8017.0,item out of stock,2019-09-25 13:16:01.000Z, ,"['882945']", , , ,0.483,79.99 +8018.0,place order,2019-09-25 13:39:43.000Z, ,"['883043','883041','883040','883039','883042']","['990751']", , ,2.419,2981.98 +8019.0,pick item,2019-09-25 13:43:28.000Z, ,"['882983']", , , ,0.78,99.99 +8020.0,create package,2019-09-25 13:43:28.000Z, ,"['882980','882761','883038','882756','882981']", ,"['660465']", ,2.02,798.96 +8021.0,confirm order,2019-09-25 13:43:56.000Z, , ,"['990751']", , ,2.419,2981.98 +8022.0,pay order,2019-09-25 13:45:04.000Z, , ,"['990729']", , ,3.808,4562.97 +8023.0,pick item,2019-09-25 14:05:15.000Z, ,"['882515']", , , ,0.28,89.99 +8024.0,pick item,2019-09-25 14:07:06.000Z, ,"['882828']", , , ,0.28,449.0 +8025.0,pick item,2019-09-25 14:09:21.000Z, ,"['883037']", , , ,0.483,495.0 +8026.0,confirm order,2019-09-25 14:26:03.000Z, , ,"['990750']", , ,3.635,2403.98 +8027.0,reorder item,2019-09-25 14:37:24.000Z, ,"['883009']", , , ,0.483,1099.0 +8028.0,reorder item,2019-09-25 14:45:25.000Z, ,"['882976']", , , ,1.48,199.99 +8029.0,package delivered,2019-09-25 14:47:53.000Z, , , ,"['660462']", ,5.336,4233.96 +8030.0,pick item,2019-09-25 14:51:13.000Z, ,"['883011']", , , ,0.483,1099.0 +8031.0,pick item,2019-09-25 14:52:03.000Z, ,"['883019']", , , ,0.78,99.99 +8032.0,create package,2019-09-25 14:52:03.000Z, ,"['882934','882968','882967','882966']", ,"['660466']", ,3.665,3004.99 +8033.0,failed delivery,2019-09-25 14:57:17.000Z, , , ,"['660449']", ,1.21,1543.99 +8034.0,pick item,2019-09-25 14:57:56.000Z, ,"['883023']", , , ,0.21,529.0 +8035.0,send package,2019-09-25 15:03:08.000Z, , , ,"['660465']", ,2.02,798.96 +8036.0,pay order,2019-09-25 15:12:28.000Z, , ,"['990684']", , ,2.818,1317.98 +8037.0,place order,2019-09-25 15:39:14.000Z, ,"['883044','883045']","['990752']", , ,2.06,254.98 +8038.0,pick item,2019-09-25 16:16:29.000Z, ,"['882839']", , , ,1.25,2200.0 +8039.0,confirm order,2019-09-25 16:43:43.000Z, , ,"['990746']", , ,3.28,4504.99 +8040.0,pay order,2019-09-25 16:44:22.000Z, , ,"['990725']", , ,0.2,44.99 +8041.0,pick item,2019-09-25 16:58:30.000Z, ,"['883017']", , , ,1.25,2200.0 +8042.0,confirm order,2019-09-25 17:22:57.000Z, , ,"['990748']", , ,4.772,2101.97 +8043.0,pick item,2019-09-25 17:30:37.000Z, ,"['882955']", , , ,0.188,1149.0 +8044.0,create package,2019-09-25 17:30:37.000Z, ,"['882974','882978','882909','882915','882975','882979','882673','882908','882918','882977']", ,"['660467']", ,6.9,7291.97 +8045.0,place order,2019-09-25 17:38:15.000Z, ,"['883048','883047','883046']","['990753']", , ,1.543,689.98 +8046.0,pay order,2019-09-25 19:13:48.000Z, , ,"['990621']", , ,3.851,3412.97 +8047.0,item out of stock,2019-09-25 20:08:19.000Z, ,"['883045']", , , ,1.28,149.99 +8048.0,place order,2019-09-25 20:56:05.000Z, ,"['883049','883051','883050','883052','883053']","['990754']", , ,3.962,4402.98 +8049.0,pick item,2019-09-26 06:45:17.000Z, ,"['883024']", , , ,0.28,89.99 +8050.0,item out of stock,2019-09-26 07:02:07.000Z, ,"['882996']", , , ,0.44,476.0 +8051.0,pick item,2019-09-26 07:07:40.000Z, ,"['883041']", , , ,0.483,79.99 +8052.0,pick item,2019-09-26 07:17:35.000Z, ,"['883026']", , , ,1.28,149.99 +8053.0,pay order,2019-09-26 07:23:23.000Z, , ,"['990586']", , ,3.84,1472.96 +8054.0,pick item,2019-09-26 07:31:12.000Z, ,"['883032']", , , ,0.172,699.0 +8055.0,pay order,2019-09-26 07:37:05.000Z, , ,"['990719']", , ,8.34,11584.97 +8056.0,pick item,2019-09-26 07:37:57.000Z, ,"['883033']", , , ,0.44,476.0 +8057.0,pick item,2019-09-26 07:42:55.000Z, ,"['882586']", , , ,1.25,2200.0 +8058.0,place order,2019-09-26 07:43:45.000Z, ,"['883054','883055']","['990755']", , ,1.168,1283.99 +8059.0,send package,2019-09-26 07:46:00.000Z, , , ,"['660466']", ,3.665,3004.99 +8060.0,reorder item,2019-09-26 07:54:25.000Z, ,"['883045']", , , ,1.28,149.99 +8061.0,send package,2019-09-26 07:58:24.000Z, , , ,"['660463']", ,0.6829999999999999,534.99 +8062.0,payment reminder,2019-09-26 08:07:23.000Z, , ,"['990637']", , ,1.733,3304.0 +8063.0,pick item,2019-09-26 08:07:31.000Z, ,"['883047']", , , ,0.28,89.99 +8064.0,pay order,2019-09-26 08:15:59.000Z, , ,"['990748']", , ,4.772,2101.97 +8065.0,reorder item,2019-09-26 08:16:49.000Z, ,"['882985']", , , ,0.166,799.0 +8066.0,item out of stock,2019-09-26 08:18:41.000Z, ,"['883004']", , , ,0.78,99.99 +8067.0,pick item,2019-09-26 08:32:01.000Z, ,"['882302']", , , ,0.28,449.0 +8068.0,pick item,2019-09-26 08:52:57.000Z, ,"['883043']", , , ,0.188,1149.0 +8069.0,package delivered,2019-09-26 09:06:26.000Z, , , ,"['660465']", ,2.02,798.96 +8070.0,failed delivery,2019-09-26 09:07:16.000Z, , , ,"['660466']", ,3.665,3004.99 +8071.0,send package,2019-09-26 09:16:51.000Z, , , ,"['660467']", ,6.9,7291.97 +8072.0,pick item,2019-09-26 09:29:55.000Z, ,"['882940']", , , ,0.38,29.99 +8073.0,create package,2019-09-26 09:29:55.000Z, ,"['882658','882988','882349']", ,"['660468']", ,2.44,2858.99 +8074.0,pay order,2019-09-26 09:32:42.000Z, , ,"['990705']", , ,1.188,1158.0 +8075.0,payment reminder,2019-09-26 09:38:03.000Z, , ,"['990624']", , ,0.483,84.99 +8076.0,payment reminder,2019-09-26 09:39:18.000Z, , ,"['990634']", , ,1.194,2508.98 +8077.0,place order,2019-09-26 09:47:17.000Z, ,"['883058','883056','883057']","['990756']", , ,2.655,373.98 +8078.0,reorder item,2019-09-26 09:48:13.000Z, ,"['882945']", , , ,0.483,79.99 +8079.0,confirm order,2019-09-26 09:50:34.000Z, , ,"['990752']", , ,2.06,254.98 +8080.0,package delivered,2019-09-26 09:51:35.000Z, , , ,"['660449']", ,1.21,1543.99 +8081.0,package delivered,2019-09-26 10:20:25.000Z, , , ,"['660461']", ,3.374,7397.0 +8082.0,pay order,2019-09-26 10:26:13.000Z, , ,"['990751']", , ,2.419,2981.98 +8083.0,pick item,2019-09-26 10:28:22.000Z, ,"['883028']", , , ,0.28,449.0 +8084.0,confirm order,2019-09-26 11:11:36.000Z, , ,"['990749']", , ,0.552,733.99 +8085.0,pick item,2019-09-26 11:19:02.000Z, ,"['882826']", , , ,0.188,1149.0 +8086.0,confirm order,2019-09-26 11:21:57.000Z, , ,"['990742']", , ,7.962999999999999,6238.94 +8087.0,pick item,2019-09-26 11:52:35.000Z, ,"['882790']", , , ,0.483,1099.0 +8088.0,create package,2019-09-26 11:52:35.000Z, ,"['882962','882965','882964','882730','882963']", ,"['660469']", ,3.778,6167.99 +8089.0,place order,2019-09-26 11:54:21.000Z, ,"['883061','883062','883059','883060']","['990757']", , ,1.672,1728.99 +8090.0,pick item,2019-09-26 12:07:24.000Z, ,"['883040']", , , ,1.28,149.99 +8091.0,reorder item,2019-09-26 12:30:29.000Z, ,"['882957']", , , ,0.188,1149.0 +8092.0,pay order,2019-09-26 13:03:40.000Z, , ,"['990744']", , ,2.416,3838.99 +8093.0,item out of stock,2019-09-26 13:11:35.000Z, ,"['883020']", , , ,1.25,2200.0 +8094.0,package delivered,2019-09-26 13:37:40.000Z, , , ,"['660463']", ,0.6829999999999999,534.99 +8095.0,pick item,2019-09-26 13:41:24.000Z, ,"['882991']", , , ,0.21,529.0 +8096.0,package delivered,2019-09-26 13:41:33.000Z, , , ,"['660460']", ,5.48,3516.96 +8097.0,pick item,2019-09-26 13:43:13.000Z, ,"['883039']", , , ,0.28,449.0 +8098.0,pick item,2019-09-26 13:50:05.000Z, ,"['883014']", , , ,1.25,2200.0 +8099.0,confirm order,2019-09-26 13:51:19.000Z, , ,"['990757']", , ,1.672,1728.99 +8100.0,package delivered,2019-09-26 13:58:42.000Z, , , ,"['660466']", ,3.665,3004.99 +8101.0,pick item,2019-09-26 13:59:17.000Z, ,"['883054']", , , ,0.98,129.99 +8102.0,create package,2019-09-26 13:59:17.000Z, ,"['882942','882954','883024','882310','882950','883023','883022','882952','882955','882991','882923','882995']", ,"['660470']", ,5.9,6980.95 +8103.0,place order,2019-09-26 14:08:30.000Z, ,"['883068','883066','883064','883065','883067','883063']","['990758']", , ,2.825,3511.98 +8104.0,pay order,2019-09-26 14:11:05.000Z, , ,"['990668']", , ,0.8220000000000001,2221.99 +8105.0,pick item,2019-09-26 14:15:43.000Z, ,"['883068']", , , ,0.38,29.99 +8106.0,pay order,2019-09-26 14:22:28.000Z, , ,"['990653']", , ,1.921,3849.0 +8107.0,pay order,2019-09-26 14:29:43.000Z, , ,"['990745']", , ,2.216,3383.99 +8108.0,pick item,2019-09-26 14:33:41.000Z, ,"['883058']", , , ,0.495,129.0 +8109.0,pay order,2019-09-26 14:34:09.000Z, , ,"['990750']", , ,3.635,2403.98 +8110.0,send package,2019-09-26 14:36:09.000Z, , , ,"['660464']", ,3.443,1498.98 +8111.0,pick item,2019-09-26 14:36:58.000Z, ,"['882362']", , , ,0.2,39.99 +8112.0,pick item,2019-09-26 14:46:06.000Z, ,"['883063']", , , ,0.21,529.0 +8113.0,send package,2019-09-26 14:46:14.000Z, , , ,"['660468']", ,2.44,2858.99 +8114.0,confirm order,2019-09-26 14:46:30.000Z, , ,"['990758']", , ,2.825,3511.98 +8115.0,item out of stock,2019-09-26 14:46:37.000Z, ,"['883062']", , , ,0.78,99.99 +8116.0,confirm order,2019-09-26 14:53:31.000Z, , ,"['990756']", , ,2.655,373.98 +8117.0,pick item,2019-09-26 15:05:41.000Z, ,"['882527']", , , ,0.28,449.0 +8118.0,pick item,2019-09-26 15:10:18.000Z, ,"['883025']", , , ,1.48,199.99 +8119.0,reorder item,2019-09-26 15:14:00.000Z, ,"['883010']", , , ,0.21,529.0 +8120.0,pick item,2019-09-26 15:23:11.000Z, ,"['882290']", , , ,1.48,199.99 +8121.0,place order,2019-09-26 15:36:47.000Z, ,"['883071','883070','883069']","['990759']", , ,1.358,658.99 +8122.0,reorder item,2019-09-26 15:41:02.000Z, ,"['883004']", , , ,0.78,99.99 +8123.0,pick item,2019-09-26 15:49:37.000Z, ,"['882993']", , , ,0.88,89.99 +8124.0,item out of stock,2019-09-26 15:58:54.000Z, ,"['883030']", , , ,0.28,449.0 +8125.0,confirm order,2019-09-26 16:17:31.000Z, , ,"['990747']", , ,2.64,3223.98 +8126.0,pick item,2019-09-26 16:34:21.000Z, ,"['882984']", , , ,0.38,29.99 +8127.0,place order,2019-09-26 17:33:22.000Z, ,"['883074','883073','883072']","['990760']", , ,3.78,4554.99 +8128.0,confirm order,2019-09-26 17:39:56.000Z, , ,"['990754']", , ,3.962,4402.98 +8129.0,pick item,2019-09-26 19:16:58.000Z, ,"['883073']", , , ,1.25,2200.0 +8130.0,pay order,2019-09-26 19:24:50.000Z, , ,"['990758']", , ,2.825,3511.98 +8131.0,failed delivery,2019-09-26 19:36:40.000Z, , , ,"['660464']", ,3.443,1498.98 +8132.0,item out of stock,2019-09-26 19:42:10.000Z, ,"['883042']", , , ,0.188,1149.0 +8133.0,pick item,2019-09-26 19:57:34.000Z, ,"['883066']", , , ,0.21,529.0 +8134.0,pay order,2019-09-26 20:17:59.000Z, , ,"['990756']", , ,2.655,373.98 +8135.0,place order,2019-09-26 20:46:18.000Z, ,"['883075']","['990761']", , ,0.483,500.0 +8136.0,create package,2019-09-26 23:00:00.000Z, ,"['882362','882997']", ,"['660471']", ,0.98,139.98 +8137.0,pick item,2019-09-27 07:05:33.000Z, ,"['882976']", , , ,1.48,199.99 +8138.0,pay order,2019-09-27 07:20:28.000Z, , ,"['990671']", , ,3.477,2827.97 +8139.0,place order,2019-09-27 07:24:11.000Z, ,"['883076','883077']","['990762']", , ,0.655,1803.0 +8140.0,pick item,2019-09-27 07:31:46.000Z, ,"['882911']", , , ,0.495,129.0 +8141.0,pick item,2019-09-27 07:46:06.000Z, ,"['883065']", , , ,0.495,129.0 +8142.0,create package,2019-09-27 07:46:06.000Z, ,"['883027','882893','882983','883032','882984','882841','882986','882839','883026','883028','883025']", ,"['660472']", ,8.351,6670.95 +8143.0,pick item,2019-09-27 07:48:12.000Z, ,"['882899']", , , ,0.2,39.99 +8144.0,pick item,2019-09-27 07:56:09.000Z, ,"['883004']", , , ,0.78,99.99 +8145.0,pick item,2019-09-27 08:15:28.000Z, ,"['882819']", , , ,0.44,476.0 +8146.0,pick item,2019-09-27 08:35:33.000Z, ,"['882937']", , , ,0.2,39.99 +8147.0,reorder item,2019-09-27 08:39:23.000Z, ,"['883062']", , , ,0.78,99.99 +8148.0,pick item,2019-09-27 08:45:55.000Z, ,"['883045']", , , ,1.28,149.99 +8149.0,pay order,2019-09-27 08:51:18.000Z, , ,"['990737']", , ,2.255,2921.97 +8150.0,pay order,2019-09-27 08:53:02.000Z, , ,"['990723']", , ,2.2430000000000003,264.97 +8151.0,reorder item,2019-09-27 08:58:57.000Z, ,"['883030']", , , ,0.28,449.0 +8152.0,place order,2019-09-27 09:08:10.000Z, ,"['883079','883080','883081','883078']","['990763']", , ,1.851,2422.98 +8153.0,pick item,2019-09-27 09:09:52.000Z, ,"['882932']", , , ,0.483,79.99 +8154.0,confirm order,2019-09-27 09:20:24.000Z, , ,"['990763']", , ,1.851,2422.98 +8155.0,pick item,2019-09-27 09:21:58.000Z, ,"['883046']", , , ,0.483,495.0 +8156.0,confirm order,2019-09-27 09:25:03.000Z, , ,"['990755']", , ,1.168,1283.99 +8157.0,pay order,2019-09-27 09:26:01.000Z, , ,"['990637']", , ,1.733,3304.0 +8158.0,send package,2019-09-27 09:29:16.000Z, , , ,"['660470']", ,5.9,6980.95 +8159.0,failed delivery,2019-09-27 09:30:53.000Z, , , ,"['660468']", ,2.44,2858.99 +8160.0,pick item,2019-09-27 09:44:38.000Z, ,"['883081']", , , ,0.188,1149.0 +8161.0,pick item,2019-09-27 09:47:44.000Z, ,"['882994']", , , ,0.495,129.0 +8162.0,send package,2019-09-27 09:49:02.000Z, , , ,"['660469']", ,3.778,6167.99 +8163.0,pick item,2019-09-27 09:59:17.000Z, ,"['882885']", , , ,0.495,129.0 +8164.0,pay order,2019-09-27 10:01:42.000Z, , ,"['990689']", , ,0.975,622.99 +8165.0,pick item,2019-09-27 10:01:50.000Z, ,"['883074']", , , ,1.28,149.99 +8166.0,create package,2019-09-27 10:01:50.000Z, ,"['882790','883054','882873']", ,"['660473']", ,1.629,2027.99 +8167.0,pick item,2019-09-27 10:22:51.000Z, ,"['882800']", , , ,0.483,1099.0 +8168.0,pick item,2019-09-27 10:35:24.000Z, ,"['883076']", , , ,0.483,1099.0 +8169.0,place order,2019-09-27 10:36:07.000Z, ,"['883082']","['990764']", , ,0.38,34.99 +8170.0,item out of stock,2019-09-27 10:45:10.000Z, ,"['883050']", , , ,0.166,799.0 +8171.0,pick item,2019-09-27 10:46:43.000Z, ,"['883010']", , , ,0.21,529.0 +8172.0,create package,2019-09-27 10:46:43.000Z, ,"['882777']", ,"['660474']", ,0.2,39.99 +8173.0,pick item,2019-09-27 10:52:21.000Z, ,"['883060']", , , ,0.28,449.0 +8174.0,create package,2019-09-27 10:52:21.000Z, ,"['883014','882800','883013','883019','883011','883012']", ,"['660475']", ,3.679,5032.98 +8175.0,pick item,2019-09-27 10:54:37.000Z, ,"['883071']", , , ,0.38,29.99 +8176.0,reorder item,2019-09-27 11:09:48.000Z, ,"['882888']", , , ,0.28,89.99 +8177.0,package delivered,2019-09-27 11:11:42.000Z, , , ,"['660468']", ,2.44,2858.99 +8178.0,pick item,2019-09-27 12:01:20.000Z, ,"['883055']", , , ,0.188,1149.0 +8179.0,reorder item,2019-09-27 12:07:01.000Z, ,"['882996']", , , ,0.44,476.0 +8180.0,pay order,2019-09-27 12:29:18.000Z, , ,"['990763']", , ,1.851,2422.98 +8181.0,place order,2019-09-27 12:32:01.000Z, ,"['883084','883083']","['990765']", , ,0.966,1183.99 +8182.0,pick item,2019-09-27 12:45:32.000Z, ,"['883067']", , , ,1.25,2200.0 +8183.0,confirm order,2019-09-27 12:49:53.000Z, , ,"['990764']", , ,0.38,34.99 +8184.0,package delivered,2019-09-27 12:51:15.000Z, , , ,"['660470']", ,5.9,6980.95 +8185.0,send package,2019-09-27 13:00:46.000Z, , , ,"['660472']", ,8.351,6670.95 +8186.0,pick item,2019-09-27 13:01:47.000Z, ,"['883036']", , , ,0.98,129.99 +8187.0,confirm order,2019-09-27 13:09:45.000Z, , ,"['990761']", , ,0.483,500.0 +8188.0,confirm order,2019-09-27 13:09:49.000Z, , ,"['990760']", , ,3.78,4554.99 +8189.0,package delivered,2019-09-27 13:18:50.000Z, , , ,"['660467']", ,6.9,7291.97 +8190.0,pick item,2019-09-27 13:27:19.000Z, ,"['883070']", , , ,0.483,495.0 +8191.0,pick item,2019-09-27 13:28:37.000Z, ,"['883035']", , , ,1.28,149.99 +8192.0,create package,2019-09-27 13:28:37.000Z, ,"['882527','883047','882990','883039','883043','883041','883046','883040']", ,"['660476']", ,3.554,3310.97 +8193.0,pick item,2019-09-27 13:30:58.000Z, ,"['883044']", , , ,0.78,99.99 +8194.0,pay order,2019-09-27 13:44:30.000Z, , ,"['990685']", , ,0.166,804.0 +8195.0,pick item,2019-09-27 13:47:28.000Z, ,"['882804']", , , ,0.78,99.99 +8196.0,pick item,2019-09-27 13:57:29.000Z, ,"['883048']", , , ,0.78,99.99 +8197.0,failed delivery,2019-09-27 13:58:26.000Z, , , ,"['660464']", ,3.443,1498.98 +8198.0,pick item,2019-09-27 14:01:46.000Z, ,"['882888']", , , ,0.28,89.99 +8199.0,item out of stock,2019-09-27 14:02:16.000Z, ,"['883053']", , , ,1.37,2500.0 +8200.0,pick item,2019-09-27 14:04:54.000Z, ,"['882973']", , , ,1.28,149.99 +8201.0,pay order,2019-09-27 14:15:02.000Z, , ,"['990728']", , ,3.2260000000000004,2502.98 +8202.0,pick item,2019-09-27 14:15:07.000Z, ,"['882741']", , , ,0.44,476.0 +8203.0,reorder item,2019-09-27 14:17:46.000Z, ,"['883020']", , , ,1.25,2200.0 +8204.0,reorder item,2019-09-27 14:19:37.000Z, ,"['882998']", , , ,0.44,476.0 +8205.0,pay order,2019-09-27 14:19:48.000Z, , ,"['990709']", , ,1.283,2408.99 +8206.0,place order,2019-09-27 14:23:50.000Z, ,"['883085','883090','883087','883088','883086','883089']","['990766']", , ,5.86,5124.96 +8207.0,confirm order,2019-09-27 14:32:46.000Z, , ,"['990766']", , ,5.86,5124.96 +8208.0,send package,2019-09-27 14:44:52.000Z, , , ,"['660471']", ,0.98,139.98 +8209.0,pick item,2019-09-27 14:45:07.000Z, ,"['882713']", , , ,0.166,799.0 +8210.0,send package,2019-09-27 14:49:42.000Z, , , ,"['660474']", ,0.2,39.99 +8211.0,package delivered,2019-09-27 14:54:26.000Z, , , ,"['660471']", ,0.98,139.98 +8212.0,pick item,2019-09-27 14:55:14.000Z, ,"['883003']", , , ,1.37,2500.0 +8213.0,create package,2019-09-27 14:55:14.000Z, ,"['883017','882932','883015','883016','883071','883070','882885']", ,"['660477']", ,4.057,4112.97 +8214.0,pick item,2019-09-27 15:02:27.000Z, ,"['883052']", , , ,0.166,799.0 +8215.0,pick item,2019-09-27 15:11:02.000Z, ,"['883034']", , , ,0.172,699.0 +8216.0,package delivered,2019-09-27 15:11:13.000Z, , , ,"['660469']", ,3.778,6167.99 +8217.0,pick item,2019-09-27 15:22:59.000Z, ,"['883057']", , , ,0.88,89.99 +8218.0,pick item,2019-09-27 15:27:01.000Z, ,"['883083']", , , ,0.483,79.99 +8219.0,pick item,2019-09-27 15:30:13.000Z, ,"['883051']", , , ,1.48,199.99 +8220.0,pick item,2019-09-27 15:40:29.000Z, ,"['883061']", , , ,0.44,476.0 +8221.0,place order,2019-09-27 16:07:27.000Z, ,"['883091']","['990767']", , ,0.188,1154.0 +8222.0,pay order,2019-09-27 16:08:04.000Z, , ,"['990700']", , ,2.563,1169.97 +8223.0,pay order,2019-09-27 16:47:29.000Z, , ,"['990721']", , ,1.5319999999999998,2062.97 +8224.0,item out of stock,2019-09-27 17:24:03.000Z, ,"['883077']", , , ,0.172,699.0 +8225.0,place order,2019-09-27 18:01:56.000Z, ,"['883092']","['990768']", , ,0.166,804.0 +8226.0,confirm order,2019-09-27 18:57:07.000Z, , ,"['990768']", , ,0.166,804.0 +8227.0,confirm order,2019-09-27 19:35:05.000Z, , ,"['990759']", , ,1.358,658.99 +8228.0,place order,2019-09-27 20:43:27.000Z, ,"['883093','883095','883098','883094','883099','883097','883096']","['990769']", , ,4.962,8568.99 +8229.0,place order,2019-09-28 17:20:36.000Z, ,"['883103','883100','883101','883102','883104']","['990770']", , ,1.939,1957.98 +8230.0,payment reminder,2019-09-29 08:30:09.000Z, , ,"['990643']", , ,1.93,1159.99 +8231.0,payment reminder,2019-09-29 09:39:36.000Z, , ,"['990649']", , ,4.48,3839.98 +8232.0,payment reminder,2019-09-29 13:28:51.000Z, , ,"['990651']", , ,1.467,1920.99 +8233.0,place order,2019-09-29 17:29:00.000Z, ,"['883108','883109','883106','883105','883110','883107']","['990771']", , ,3.492,6130.99 +8234.0,pick item,2019-09-30 06:16:41.000Z, ,"['883079']", , , ,0.2,39.99 +8235.0,create package,2019-09-30 06:16:41.000Z, ,"['883006','882826','882828','883003','882586','883004','883083','882819','882999','883000','883002']", ,"['660478']", ,6.814,8017.96 +8236.0,package delivered,2019-09-30 07:03:12.000Z, , , ,"['660472']", ,8.351,6670.95 +8237.0,place order,2019-09-30 07:10:17.000Z, ,"['883113','883112','883114','883111']","['990772']", , ,2.062,3419.99 +8238.0,pick item,2019-09-30 07:10:21.000Z, ,"['883095']", , , ,1.25,2200.0 +8239.0,pick item,2019-09-30 07:13:20.000Z, ,"['883094']", , , ,0.2,39.99 +8240.0,pick item,2019-09-30 07:24:09.000Z, ,"['882520']", , , ,0.78,99.99 +8241.0,pick item,2019-09-30 07:27:46.000Z, ,"['883029']", , , ,0.172,699.0 +8242.0,failed delivery,2019-09-30 07:37:36.000Z, , , ,"['660464']", ,3.443,1498.98 +8243.0,confirm order,2019-09-30 07:58:10.000Z, , ,"['990762']", , ,0.655,1803.0 +8244.0,pay order,2019-09-30 08:06:07.000Z, , ,"['990471']", , ,5.896,3437.91 +8245.0,pick item,2019-09-30 08:18:53.000Z, ,"['883085']", , , ,0.2,39.99 +8246.0,confirm order,2019-09-30 08:22:37.000Z, , ,"['990769']", , ,4.962,8568.99 +8247.0,confirm order,2019-09-30 08:37:24.000Z, , ,"['990771']", , ,3.492,6130.99 +8248.0,place order,2019-09-30 08:40:21.000Z, ,"['883117','883115','883116']","['990773']", , ,1.43,1109.99 +8249.0,pick item,2019-09-30 08:50:25.000Z, ,"['883021']", , , ,1.37,2500.0 +8250.0,item out of stock,2019-09-30 08:53:47.000Z, ,"['883110']", , , ,0.483,1099.0 +8251.0,pick item,2019-09-30 09:29:43.000Z, ,"['883090']", , , ,0.98,129.99 +8252.0,pay order,2019-09-30 09:32:10.000Z, , ,"['990695']", , ,3.555,7702.0 +8253.0,item out of stock,2019-09-30 09:38:10.000Z, ,"['883098']", , , ,0.28,449.0 +8254.0,pick item,2019-09-30 09:40:34.000Z, ,"['883089']", , , ,1.37,2500.0 +8255.0,payment reminder,2019-09-30 10:03:02.000Z, , ,"['990543']", , ,3.18,900.97 +8256.0,pick item,2019-09-30 10:07:14.000Z, ,"['883075']", , , ,0.483,495.0 +8257.0,item out of stock,2019-09-30 10:19:47.000Z, ,"['883078']", , , ,0.483,1099.0 +8258.0,item out of stock,2019-09-30 10:20:38.000Z, ,"['883107']", , , ,0.166,799.0 +8259.0,send package,2019-09-30 10:24:15.000Z, , , ,"['660476']", ,3.554,3310.97 +8260.0,pick item,2019-09-30 10:32:31.000Z, ,"['883080']", , , ,0.98,129.99 +8261.0,place order,2019-09-30 10:40:30.000Z, ,"['883118','883119']","['990774']", , ,0.978,1233.0 +8262.0,pay order,2019-09-30 10:50:27.000Z, , ,"['990746']", , ,3.28,4504.99 +8263.0,package delivered,2019-09-30 11:01:26.000Z, , , ,"['660464']", ,3.443,1498.98 +8264.0,send package,2019-09-30 11:19:43.000Z, , , ,"['660478']", ,6.814,8017.96 +8265.0,confirm order,2019-09-30 11:30:16.000Z, , ,"['990753']", , ,1.543,689.98 +8266.0,failed delivery,2019-09-30 11:32:50.000Z, , , ,"['660478']", ,6.814,8017.96 +8267.0,reorder item,2019-09-30 11:51:27.000Z, ,"['883078']", , , ,0.483,1099.0 +8268.0,pay order,2019-09-30 12:31:52.000Z, , ,"['990649']", , ,4.48,3839.98 +8269.0,place order,2019-09-30 12:40:47.000Z, ,"['883120']","['990775']", , ,0.166,804.0 +8270.0,pick item,2019-09-30 12:43:29.000Z, ,"['883103']", , , ,0.88,89.99 +8271.0,create package,2019-09-30 12:43:29.000Z, ,"['883058','883057','882515']", ,"['660479']", ,1.655,308.98 +8272.0,package delivered,2019-09-30 12:44:58.000Z, , , ,"['660474']", ,0.2,39.99 +8273.0,pick item,2019-09-30 12:50:05.000Z, ,"['883115']", , , ,0.78,99.99 +8274.0,pay order,2019-09-30 12:50:41.000Z, , ,"['990730']", , ,1.763,1412.98 +8275.0,item out of stock,2019-09-30 12:55:19.000Z, ,"['883113']", , , ,0.172,699.0 +8276.0,send package,2019-09-30 12:55:30.000Z, , , ,"['660475']", ,3.679,5032.98 +8277.0,package delivered,2019-09-30 13:16:19.000Z, , , ,"['660476']", ,3.554,3310.97 +8278.0,reorder item,2019-09-30 13:27:30.000Z, ,"['883077']", , , ,0.172,699.0 +8279.0,pick item,2019-09-30 13:31:22.000Z, ,"['882998']", , , ,0.44,476.0 +8280.0,pay order,2019-09-30 13:42:57.000Z, , ,"['990754']", , ,3.962,4402.98 +8281.0,send package,2019-09-30 13:48:20.000Z, , , ,"['660473']", ,1.629,2027.99 +8282.0,send package,2019-09-30 13:55:24.000Z, , , ,"['660479']", ,1.655,308.98 +8283.0,failed delivery,2019-09-30 13:56:21.000Z, , , ,"['660478']", ,6.814,8017.96 +8284.0,package delivered,2019-09-30 13:56:52.000Z, , , ,"['660479']", ,1.655,308.98 +8285.0,pick item,2019-09-30 14:09:23.000Z, ,"['883082']", , , ,0.38,29.99 +8286.0,create package,2019-09-30 14:09:23.000Z, ,"['883035','882520','883037','883036','882290','883010','883034','883075','883033']", ,"['660480']", ,6.308,3273.96 +8287.0,item out of stock,2019-09-30 14:09:28.000Z, ,"['883088']", , , ,1.28,149.99 +8288.0,pick item,2019-09-30 14:13:18.000Z, ,"['883097']", , , ,0.172,699.0 +8289.0,pick item,2019-09-30 14:19:06.000Z, ,"['882927']", , , ,0.2,39.99 +8290.0,confirm order,2019-09-30 14:23:13.000Z, , ,"['990775']", , ,0.166,804.0 +8291.0,place order,2019-09-30 14:41:21.000Z, ,"['883121','883122']","['990776']", , ,0.468,1243.99 +8292.0,pick item,2019-09-30 14:46:10.000Z, ,"['882930']", , , ,0.88,89.99 +8293.0,confirm order,2019-09-30 14:59:51.000Z, , ,"['990774']", , ,0.978,1233.0 +8294.0,confirm order,2019-09-30 15:06:04.000Z, , ,"['990772']", , ,2.062,3419.99 +8295.0,package delivered,2019-09-30 15:17:56.000Z, , , ,"['660478']", ,6.814,8017.96 +8296.0,pick item,2019-09-30 15:23:27.000Z, ,"['883099']", , , ,0.44,476.0 +8297.0,confirm order,2019-09-30 15:26:06.000Z, , ,"['990773']", , ,1.43,1109.99 +8298.0,pick item,2019-09-30 15:46:35.000Z, ,"['883105']", , , ,0.483,1099.0 +8299.0,pick item,2019-09-30 15:47:45.000Z, ,"['882818']", , , ,0.98,129.99 +8300.0,pick item,2019-09-30 15:57:59.000Z, ,"['882810']", , , ,0.2,39.99 +8301.0,send package,2019-09-30 16:23:40.000Z, , , ,"['660477']", ,4.057,4112.97 +8302.0,place order,2019-09-30 16:42:30.000Z, ,"['883124','883125','883123']","['990777']", , ,2.233,2614.98 +8303.0,pay order,2019-09-30 17:56:24.000Z, , ,"['990769']", , ,4.962,8568.99 +8304.0,place order,2019-09-30 19:47:05.000Z, ,"['883130','883129','883126','883127','883128']","['990778']", , ,3.2030000000000003,819.96 +8305.0,pick item,2019-09-30 19:48:45.000Z, ,"['883008']", , , ,1.28,149.99 +8306.0,send package,2019-09-30 19:51:39.000Z, , , ,"['660480']", ,6.308,3273.96 +8307.0,place order,2019-10-01 05:00:24.000Z, ,"['883133','883134','883132','883131']","['990779']", , ,3.04,394.96 +8308.0,pay order,2019-10-01 06:31:47.000Z, , ,"['990598']", , ,3.623,1473.97 +8309.0,pick item,2019-10-01 06:55:59.000Z, ,"['883123']", , , ,1.37,2500.0 +8310.0,create package,2019-10-01 06:55:59.000Z, ,"['882888','883044','882302','883045']", ,"['660481']", ,2.62,788.97 +8311.0,pick item,2019-10-01 06:56:43.000Z, ,"['883129']", , , ,0.38,29.99 +8312.0,pick item,2019-10-01 07:00:15.000Z, ,"['882985']", , , ,0.166,799.0 +8313.0,item out of stock,2019-10-01 07:23:17.000Z, ,"['883131']", , , ,0.2,39.99 +8314.0,confirm order,2019-10-01 07:30:20.000Z, , ,"['990778']", , ,3.2030000000000003,819.96 +8315.0,item out of stock,2019-10-01 07:37:11.000Z, ,"['883124']", , , ,0.38,29.99 +8316.0,place order,2019-10-01 07:44:14.000Z, ,"['883137','883138','883136','883135']","['990780']", , ,3.99,5083.99 +8317.0,pick item,2019-10-01 07:47:02.000Z, ,"['883092']", , , ,0.166,799.0 +8318.0,pick item,2019-10-01 07:47:49.000Z, ,"['883137']", , , ,0.21,529.0 +8319.0,create package,2019-10-01 07:47:49.000Z, ,"['882940','882937','883105']", ,"['660482']", ,1.063,1168.98 +8320.0,confirm order,2019-10-01 08:02:06.000Z, , ,"['990779']", , ,3.04,394.96 +8321.0,confirm order,2019-10-01 08:10:11.000Z, , ,"['990765']", , ,0.966,1183.99 +8322.0,pay order,2019-10-01 08:19:01.000Z, , ,"['990733']", , ,2.351,3609.0 +8323.0,pick item,2019-10-01 08:19:17.000Z, ,"['883128']", , , ,0.38,29.99 +8324.0,pick item,2019-10-01 08:29:21.000Z, ,"['882745']", , , ,0.166,799.0 +8325.0,confirm order,2019-10-01 08:29:31.000Z, , ,"['990770']", , ,1.939,1957.98 +8326.0,item out of stock,2019-10-01 08:37:33.000Z, ,"['883121']", , , ,0.28,89.99 +8327.0,package delivered,2019-10-01 08:44:10.000Z, , , ,"['660477']", ,4.057,4112.97 +8328.0,confirm order,2019-10-01 08:53:53.000Z, , ,"['990776']", , ,0.468,1243.99 +8329.0,item out of stock,2019-10-01 09:00:54.000Z, ,"['883109']", , , ,0.21,529.0 +8330.0,pick item,2019-10-01 09:03:14.000Z, ,"['883132']", , , ,1.28,149.99 +8331.0,create package,2019-10-01 09:03:14.000Z, ,"['883066','882993','883081','882994','883068','883079','883080','883021','883051','883052','883065','883067','883063']", ,"['660483']", ,8.304,8453.95 +8332.0,payment reminder,2019-10-01 09:06:27.000Z, , ,"['990546']", , ,1.511,3260.98 +8333.0,package delivered,2019-10-01 09:20:17.000Z, , , ,"['660475']", ,3.679,5032.98 +8334.0,item out of stock,2019-10-01 09:23:54.000Z, ,"['883136']", , , ,1.28,149.99 +8335.0,reorder item,2019-10-01 09:24:51.000Z, ,"['883136']", , , ,1.28,149.99 +8336.0,reorder item,2019-10-01 09:29:06.000Z, ,"['883113']", , , ,0.172,699.0 +8337.0,send package,2019-10-01 09:31:48.000Z, , , ,"['660481']", ,2.62,788.97 +8338.0,pay order,2019-10-01 09:40:02.000Z, , ,"['990774']", , ,0.978,1233.0 +8339.0,pay order,2019-10-01 09:42:48.000Z, , ,"['990752']", , ,2.06,254.98 +8340.0,place order,2019-10-01 09:48:15.000Z, ,"['883141','883139','883140']","['990781']", , ,3.14,374.97 +8341.0,pick item,2019-10-01 09:50:03.000Z, ,"['882992']", , , ,1.37,2500.0 +8342.0,send package,2019-10-01 09:53:47.000Z, , , ,"['660482']", ,1.063,1168.98 +8343.0,pay order,2019-10-01 10:05:23.000Z, , ,"['990707']", , ,0.88,94.99 +8344.0,reorder item,2019-10-01 10:12:08.000Z, ,"['883050']", , , ,0.166,799.0 +8345.0,reorder item,2019-10-01 10:13:49.000Z, ,"['883124']", , , ,0.38,29.99 +8346.0,pick item,2019-10-01 10:17:30.000Z, ,"['883049']", , , ,0.78,99.99 +8347.0,package delivered,2019-10-01 10:23:15.000Z, , , ,"['660473']", ,1.629,2027.99 +8348.0,package delivered,2019-10-01 10:43:58.000Z, , , ,"['660480']", ,6.308,3273.96 +8349.0,send package,2019-10-01 10:44:20.000Z, , , ,"['660483']", ,8.304,8453.95 +8350.0,confirm order,2019-10-01 10:45:46.000Z, , ,"['990767']", , ,0.188,1154.0 +8351.0,reorder item,2019-10-01 11:34:22.000Z, ,"['883042']", , , ,0.188,1149.0 +8352.0,pick item,2019-10-01 11:39:37.000Z, ,"['882830']", , , ,0.28,449.0 +8353.0,place order,2019-10-01 11:56:17.000Z, ,"['883143','883142','883144']","['990782']", , ,0.973,703.98 +8354.0,pay order,2019-10-01 12:13:16.000Z, , ,"['990711']", , ,3.828,3932.99 +8355.0,pick item,2019-10-01 12:18:27.000Z, ,"['883018']", , , ,1.25,2200.0 +8356.0,confirm order,2019-10-01 12:22:02.000Z, , ,"['990781']", , ,3.14,374.97 +8357.0,pick item,2019-10-01 12:27:30.000Z, ,"['883091']", , , ,0.188,1149.0 +8358.0,pick item,2019-10-01 12:28:18.000Z, ,"['883117']", , , ,0.44,476.0 +8359.0,pick item,2019-10-01 12:42:58.000Z, ,"['883069']", , , ,0.495,129.0 +8360.0,confirm order,2019-10-01 12:52:50.000Z, , ,"['990777']", , ,2.233,2614.98 +8361.0,pick item,2019-10-01 13:04:47.000Z, ,"['883118']", , , ,0.483,1099.0 +8362.0,package delivered,2019-10-01 13:14:35.000Z, , , ,"['660481']", ,2.62,788.97 +8363.0,package delivered,2019-10-01 13:19:03.000Z, , , ,"['660483']", ,8.304,8453.95 +8364.0,reorder item,2019-10-01 13:19:38.000Z, ,"['883121']", , , ,0.28,89.99 +8365.0,pick item,2019-10-01 13:22:45.000Z, ,"['883059']", , , ,0.172,699.0 +8366.0,pick item,2019-10-01 14:03:26.000Z, ,"['883144']", , , ,0.483,79.99 +8367.0,pick item,2019-10-01 14:07:10.000Z, ,"['883111']", , , ,0.2,39.99 +8368.0,place order,2019-10-01 14:12:22.000Z, ,"['883149','883150','883146','883145','883147','883148']","['990783']", , ,2.983,1245.96 +8369.0,confirm order,2019-10-01 14:17:51.000Z, , ,"['990782']", , ,0.973,703.98 +8370.0,pay order,2019-10-01 14:28:55.000Z, , ,"['990761']", , ,0.483,500.0 +8371.0,pay order,2019-10-01 14:31:18.000Z, , ,"['990767']", , ,0.188,1154.0 +8372.0,pick item,2019-10-01 14:32:52.000Z, ,"['883096']", , , ,1.37,2500.0 +8373.0,pick item,2019-10-01 14:40:06.000Z, ,"['883148']", , , ,0.44,476.0 +8374.0,create package,2019-10-01 14:40:06.000Z, ,"['883074','883073','882899','883111','883082']", ,"['660484']", ,3.31,2459.96 +8375.0,pick item,2019-10-01 14:40:42.000Z, ,"['883116']", , , ,0.21,529.0 +8376.0,pick item,2019-10-01 14:46:08.000Z, ,"['883104']", , , ,0.483,495.0 +8377.0,pay order,2019-10-01 14:49:08.000Z, , ,"['990777']", , ,2.233,2614.98 +8378.0,payment reminder,2019-10-01 15:03:29.000Z, , ,"['990659']", , ,2.8680000000000003,2511.98 +8379.0,pick item,2019-10-01 15:18:22.000Z, ,"['883121']", , , ,0.28,89.99 +8380.0,reorder item,2019-10-01 15:34:57.000Z, ,"['883053']", , , ,1.37,2500.0 +8381.0,place order,2019-10-01 15:44:31.000Z, ,"['883151','883152','883154','883153']","['990784']", , ,3.02,414.96 +8382.0,pay order,2019-10-01 15:51:09.000Z, , ,"['990768']", , ,0.166,804.0 +8383.0,place order,2019-10-01 17:53:08.000Z, ,"['883158','883157','883155','883156','883159']","['990785']", , ,2.411,4827.0 +8384.0,pick item,2019-10-01 18:12:00.000Z, ,"['883009']", , , ,0.483,1099.0 +8385.0,place order,2019-10-01 21:25:51.000Z, ,"['883160','883163','883162','883161','883164']","['990786']", , ,2.58,4048.99 +8386.0,create package,2019-10-01 23:00:00.000Z, ,"['882973','882911','882976']", ,"['660485']", ,3.255,478.98 +8387.0,pick item,2019-10-02 06:18:36.000Z, ,"['883145']", , , ,0.2,39.99 +8388.0,confirm order,2019-10-02 06:37:04.000Z, , ,"['990786']", , ,2.58,4048.99 +8389.0,place order,2019-10-02 07:22:36.000Z, ,"['883171','883167','883168','883165','883169','883166','883170']","['990787']", , ,3.778,2381.96 +8390.0,item out of stock,2019-10-02 07:32:34.000Z, ,"['883133']", , , ,0.78,99.99 +8391.0,item out of stock,2019-10-02 07:44:28.000Z, ,"['883122']", , , ,0.188,1149.0 +8392.0,confirm order,2019-10-02 07:47:41.000Z, , ,"['990783']", , ,2.983,1245.96 +8393.0,pick item,2019-10-02 08:08:02.000Z, ,"['883141']", , , ,0.98,129.99 +8394.0,pick item,2019-10-02 08:09:08.000Z, ,"['883156']", , , ,0.21,529.0 +8395.0,pay order,2019-10-02 08:19:09.000Z, , ,"['990749']", , ,0.552,733.99 +8396.0,confirm order,2019-10-02 08:21:50.000Z, , ,"['990780']", , ,3.99,5083.99 +8397.0,pick item,2019-10-02 08:28:51.000Z, ,"['883160']", , , ,0.28,449.0 +8398.0,create package,2019-10-02 08:28:51.000Z, ,"['883076','882745','882998','883144']", ,"['660486']", ,1.5719999999999998,2453.99 +8399.0,package delivered,2019-10-02 08:29:50.000Z, , , ,"['660482']", ,1.063,1168.98 +8400.0,item out of stock,2019-10-02 08:36:07.000Z, ,"['883102']", , , ,0.21,529.0 +8401.0,send package,2019-10-02 08:49:21.000Z, , , ,"['660484']", ,3.31,2459.96 +8402.0,pay order,2019-10-02 08:55:00.000Z, , ,"['990624']", , ,0.483,84.99 +8403.0,pay order,2019-10-02 09:02:42.000Z, , ,"['990659']", , ,2.8680000000000003,2511.98 +8404.0,payment reminder,2019-10-02 09:03:04.000Z, , ,"['990555']", , ,4.263999999999999,3921.97 +8405.0,place order,2019-10-02 09:04:59.000Z, ,"['883173','883172']","['990788']", , ,0.705,663.0 +8406.0,pick item,2019-10-02 09:05:24.000Z, ,"['883139']", , , ,1.28,149.99 +8407.0,confirm order,2019-10-02 09:07:26.000Z, , ,"['990784']", , ,3.02,414.96 +8408.0,item out of stock,2019-10-02 09:07:28.000Z, ,"['883100']", , , ,0.166,799.0 +8409.0,pick item,2019-10-02 09:15:02.000Z, ,"['883143']", , , ,0.28,89.99 +8410.0,pay order,2019-10-02 09:18:36.000Z, , ,"['990504']", , ,2.013,3393.99 +8411.0,pick item,2019-10-02 09:18:47.000Z, ,"['883127']", , , ,0.98,129.99 +8412.0,pick item,2019-10-02 09:21:09.000Z, ,"['883171']", , , ,0.2,39.99 +8413.0,create package,2019-10-02 09:21:09.000Z, ,"['883061','883092','883029','883059','883156','882985','883060']", ,"['660487']", ,1.606,4450.0 +8414.0,pick item,2019-10-02 09:21:42.000Z, ,"['883172']", , , ,0.495,129.0 +8415.0,item out of stock,2019-10-02 09:22:13.000Z, ,"['883173']", , , ,0.21,529.0 +8416.0,payment reminder,2019-10-02 09:22:29.000Z, , ,"['990538']", , ,0.2,44.99 +8417.0,pay order,2019-10-02 09:28:01.000Z, , ,"['990743']", , ,0.693,1633.0 +8418.0,pick item,2019-10-02 09:32:57.000Z, ,"['883163']", , , ,0.21,529.0 +8419.0,pick item,2019-10-02 09:36:18.000Z, ,"['883152']", , , ,0.38,29.99 +8420.0,send package,2019-10-02 09:41:13.000Z, , , ,"['660485']", ,3.255,478.98 +8421.0,confirm order,2019-10-02 10:14:43.000Z, , ,"['990785']", , ,2.411,4827.0 +8422.0,pay order,2019-10-02 10:14:44.000Z, , ,"['990784']", , ,3.02,414.96 +8423.0,pick item,2019-10-02 10:15:13.000Z, ,"['883108']", , , ,1.37,2500.0 +8424.0,pay order,2019-10-02 10:26:40.000Z, , ,"['990779']", , ,3.04,394.96 +8425.0,reorder item,2019-10-02 10:26:42.000Z, ,"['883133']", , , ,0.78,99.99 +8426.0,place order,2019-10-02 10:29:46.000Z, ,"['883175','883176','883177','883174']","['990789']", , ,3.114,2302.98 +8427.0,reorder item,2019-10-02 10:46:49.000Z, ,"['883131']", , , ,0.2,39.99 +8428.0,pay order,2019-10-02 10:57:33.000Z, , ,"['990677']", , ,1.486,2232.0 +8429.0,send package,2019-10-02 11:16:41.000Z, , , ,"['660487']", ,1.606,4450.0 +8430.0,pick item,2019-10-02 11:22:19.000Z, ,"['883126']", , , ,0.483,495.0 +8431.0,pick item,2019-10-02 11:24:48.000Z, ,"['883134']", , , ,0.78,99.99 +8432.0,pick item,2019-10-02 11:47:09.000Z, ,"['883161']", , , ,1.37,2500.0 +8433.0,create package,2019-10-02 11:47:09.000Z, ,"['883091','883103','883055','883104']", ,"['660488']", ,1.739,2882.99 +8434.0,pay order,2019-10-02 11:52:43.000Z, , ,"['990757']", , ,1.672,1728.99 +8435.0,pick item,2019-10-02 12:17:28.000Z, ,"['883112']", , , ,0.44,476.0 +8436.0,place order,2019-10-02 12:19:19.000Z, ,"['883180','883178','883179']","['990790']", , ,1.246,1028.99 +8437.0,confirm order,2019-10-02 12:24:38.000Z, , ,"['990788']", , ,0.705,663.0 +8438.0,item out of stock,2019-10-02 12:24:39.000Z, ,"['883087']", , , ,0.78,99.99 +8439.0,reorder item,2019-10-02 12:25:54.000Z, ,"['883100']", , , ,0.166,799.0 +8440.0,reorder item,2019-10-02 12:42:12.000Z, ,"['883122']", , , ,0.188,1149.0 +8441.0,pick item,2019-10-02 12:44:13.000Z, ,"['883050']", , , ,0.166,799.0 +8442.0,reorder item,2019-10-02 12:53:57.000Z, ,"['883088']", , , ,1.28,149.99 +8443.0,send package,2019-10-02 13:08:11.000Z, , , ,"['660486']", ,1.5719999999999998,2453.99 +8444.0,pay order,2019-10-02 13:08:16.000Z, , ,"['990736']", , ,1.18,174.98 +8445.0,failed delivery,2019-10-02 13:18:36.000Z, , , ,"['660487']", ,1.606,4450.0 +8446.0,confirm order,2019-10-02 13:20:38.000Z, , ,"['990790']", , ,1.246,1028.99 +8447.0,item out of stock,2019-10-02 13:23:43.000Z, ,"['883140']", , , ,0.88,89.99 +8448.0,send package,2019-10-02 13:28:48.000Z, , , ,"['660488']", ,1.739,2882.99 +8449.0,pick item,2019-10-02 13:39:01.000Z, ,"['883168']", , , ,0.172,699.0 +8450.0,package delivered,2019-10-02 13:44:24.000Z, , , ,"['660488']", ,1.739,2882.99 +8451.0,reorder item,2019-10-02 13:45:18.000Z, ,"['883140']", , , ,0.88,89.99 +8452.0,pick item,2019-10-02 13:54:31.000Z, ,"['883120']", , , ,0.166,799.0 +8453.0,create package,2019-10-02 13:54:31.000Z, ,"['882804','882810','883129','883126','882741','883127','883128']", ,"['660489']", ,3.643,1300.95 +8454.0,place order,2019-10-02 13:58:25.000Z, ,"['883182','883181']","['990791']", , ,1.652,903.99 +8455.0,pick item,2019-10-02 14:05:29.000Z, ,"['883114']", , , ,1.25,2200.0 +8456.0,pick item,2019-10-02 14:07:13.000Z, ,"['883031']", , , ,0.38,29.99 +8457.0,pick item,2019-10-02 14:24:21.000Z, ,"['883151']", , , ,1.48,199.99 +8458.0,pick item,2019-10-02 14:26:24.000Z, ,"['883159']", , , ,1.25,2200.0 +8459.0,item out of stock,2019-10-02 14:27:53.000Z, ,"['883167']", , , ,0.28,449.0 +8460.0,pick item,2019-10-02 14:36:26.000Z, ,"['883130']", , , ,0.98,129.99 +8461.0,package delivered,2019-10-02 14:37:51.000Z, , , ,"['660486']", ,1.5719999999999998,2453.99 +8462.0,reorder item,2019-10-02 14:39:30.000Z, ,"['883167']", , , ,0.28,449.0 +8463.0,send package,2019-10-02 15:02:46.000Z, , , ,"['660489']", ,3.643,1300.95 +8464.0,pay order,2019-10-02 15:13:09.000Z, , ,"['990759']", , ,1.358,658.99 +8465.0,pick item,2019-10-02 15:13:27.000Z, ,"['882912']", , , ,1.37,2500.0 +8466.0,item out of stock,2019-10-02 15:27:20.000Z, ,"['883153']", , , ,0.28,89.99 +8467.0,pay order,2019-10-02 15:30:11.000Z, , ,"['990786']", , ,2.58,4048.99 +8468.0,confirm order,2019-10-02 15:35:46.000Z, , ,"['990791']", , ,1.652,903.99 +8469.0,confirm order,2019-10-02 15:39:53.000Z, , ,"['990789']", , ,3.114,2302.98 +8470.0,pay order,2019-10-02 15:43:32.000Z, , ,"['990778']", , ,3.2030000000000003,819.96 +8471.0,pick item,2019-10-02 15:45:18.000Z, ,"['883174']", , , ,0.166,799.0 +8472.0,create package,2019-10-02 15:45:18.000Z, ,"['883048','882927']", ,"['660490']", ,0.98,139.98 +8473.0,confirm order,2019-10-02 15:57:42.000Z, , ,"['990787']", , ,3.778,2381.96 +8474.0,pick item,2019-10-02 15:58:25.000Z, ,"['883072']", , , ,1.25,2200.0 +8475.0,payment reminder,2019-10-02 16:08:19.000Z, , ,"['990667']", , ,1.215,1378.98 +8476.0,place order,2019-10-02 16:16:38.000Z, ,"['883185','883184','883183']","['990792']", , ,1.803,1065.99 +8477.0,reorder item,2019-10-02 17:02:05.000Z, ,"['883087']", , , ,0.78,99.99 +8478.0,pick item,2019-10-02 17:15:38.000Z, ,"['883106']", , , ,0.78,99.99 +8479.0,create package,2019-10-02 17:15:38.000Z, ,"['882713','883134','883132','883174']", ,"['660491']", ,2.392,1847.98 +8480.0,reorder item,2019-10-02 17:35:23.000Z, ,"['883098']", , , ,0.28,449.0 +8481.0,pick item,2019-10-02 17:42:53.000Z, ,"['882501']", , , ,0.28,89.99 +8482.0,place order,2019-10-02 18:29:29.000Z, ,"['883190','883187','883188','883186','883189']","['990793']", , ,2.259,5347.0 +8483.0,pick item,2019-10-02 20:11:06.000Z, ,"['882850']", , , ,0.495,129.0 +8484.0,place order,2019-10-02 22:14:48.000Z, ,"['883191']","['990794']", , ,0.483,1104.0 +8485.0,pay order,2019-10-03 06:09:24.000Z, , ,"['990546']", , ,1.511,3260.98 +8486.0,pick item,2019-10-03 06:12:44.000Z, ,"['883150']", , , ,0.2,39.99 +8487.0,confirm order,2019-10-03 06:23:44.000Z, , ,"['990792']", , ,1.803,1065.99 +8488.0,pick item,2019-10-03 06:59:37.000Z, ,"['883186']", , , ,0.172,699.0 +8489.0,create package,2019-10-03 06:59:37.000Z, ,"['883018','883094','883116','883096','883095','883117','883115','883097','883099']", ,"['660492']", ,6.112,9219.98 +8490.0,pay order,2019-10-03 07:15:29.000Z, , ,"['990651']", , ,1.467,1920.99 +8491.0,place order,2019-10-03 07:18:04.000Z, ,"['883197','883192','883195','883194','883193','883196']","['990795']", , ,3.345,4631.98 +8492.0,pick item,2019-10-03 07:28:06.000Z, ,"['883147']", , , ,0.78,99.99 +8493.0,confirm order,2019-10-03 07:33:05.000Z, , ,"['990793']", , ,2.259,5347.0 +8494.0,pay order,2019-10-03 07:34:37.000Z, , ,"['990771']", , ,3.492,6130.99 +8495.0,pick item,2019-10-03 07:41:57.000Z, ,"['883184']", , , ,0.44,476.0 +8496.0,pick item,2019-10-03 07:48:13.000Z, ,"['883088']", , , ,1.28,149.99 +8497.0,pay order,2019-10-03 07:52:45.000Z, , ,"['990722']", , ,0.483,1104.0 +8498.0,failed delivery,2019-10-03 08:02:17.000Z, , , ,"['660484']", ,3.31,2459.96 +8499.0,pay order,2019-10-03 08:38:04.000Z, , ,"['990667']", , ,1.215,1378.98 +8500.0,pick item,2019-10-03 08:40:41.000Z, ,"['883182']", , , ,1.48,199.99 +8501.0,pick item,2019-10-03 08:41:12.000Z, ,"['883190']", , , ,1.25,2200.0 +8502.0,pick item,2019-10-03 08:49:48.000Z, ,"['882752']", , , ,0.78,99.99 +8503.0,pick item,2019-10-03 08:51:50.000Z, ,"['883056']", , , ,1.28,149.99 +8504.0,place order,2019-10-03 08:55:55.000Z, ,"['883198','883199','883200']","['990796']", , ,1.203,2029.0 +8505.0,pay order,2019-10-03 08:59:51.000Z, , ,"['990776']", , ,0.468,1243.99 +8506.0,item out of stock,2019-10-03 09:02:53.000Z, ,"['883158']", , , ,0.28,449.0 +8507.0,pay order,2019-10-03 09:08:57.000Z, , ,"['990742']", , ,7.962999999999999,6238.94 +8508.0,pick item,2019-10-03 09:12:20.000Z, ,"['883185']", , , ,0.88,89.99 +8509.0,pick item,2019-10-03 09:18:59.000Z, ,"['882957']", , , ,0.188,1149.0 +8510.0,create package,2019-10-03 09:18:59.000Z, ,"['882930','883069','883123','883090','883088','883089','883085','883137']", ,"['660493']", ,6.785,6067.96 +8511.0,send package,2019-10-03 09:20:02.000Z, , , ,"['660492']", ,6.112,9219.98 +8512.0,pick item,2019-10-03 09:23:22.000Z, ,"['882933']", , , ,0.44,476.0 +8513.0,send package,2019-10-03 09:38:31.000Z, , , ,"['660491']", ,2.392,1847.98 +8514.0,reorder item,2019-10-03 09:55:54.000Z, ,"['883110']", , , ,0.483,1099.0 +8515.0,item out of stock,2019-10-03 10:07:08.000Z, ,"['883162']", , , ,0.44,476.0 +8516.0,pick item,2019-10-03 10:12:11.000Z, ,"['883169']", , , ,1.28,149.99 +8517.0,pick item,2019-10-03 10:15:24.000Z, ,"['883192']", , , ,0.28,89.99 +8518.0,item out of stock,2019-10-03 10:26:28.000Z, ,"['883154']", , , ,0.88,89.99 +8519.0,pay order,2019-10-03 10:27:55.000Z, , ,"['990571']", , ,2.009,1972.99 +8520.0,pay order,2019-10-03 10:49:15.000Z, , ,"['990764']", , ,0.38,34.99 +8521.0,pay order,2019-10-03 11:00:17.000Z, , ,"['990772']", , ,2.062,3419.99 +8522.0,place order,2019-10-03 11:11:38.000Z, ,"['883201','883202']","['990797']", , ,1.76,653.99 +8523.0,send package,2019-10-03 11:38:52.000Z, , , ,"['660493']", ,6.785,6067.96 +8524.0,reorder item,2019-10-03 12:02:06.000Z, ,"['883109']", , , ,0.21,529.0 +8525.0,reorder item,2019-10-03 12:14:04.000Z, ,"['883173']", , , ,0.21,529.0 +8526.0,package delivered,2019-10-03 12:19:35.000Z, , , ,"['660492']", ,6.112,9219.98 +8527.0,pick item,2019-10-03 12:30:50.000Z, ,"['883100']", , , ,0.166,799.0 +8528.0,pay order,2019-10-03 12:37:08.000Z, , ,"['990785']", , ,2.411,4827.0 +8529.0,place order,2019-10-03 12:43:03.000Z, ,"['883204','883206','883203','883205']","['990798']", , ,3.023,1493.97 +8530.0,package delivered,2019-10-03 12:45:00.000Z, , , ,"['660487']", ,1.606,4450.0 +8531.0,payment reminder,2019-10-03 12:49:02.000Z, , ,"['990681']", , ,3.505,2563.98 +8532.0,pick item,2019-10-03 12:58:16.000Z, ,"['882914']", , , ,1.37,2500.0 +8533.0,pick item,2019-10-03 13:04:05.000Z, ,"['883188']", , , ,0.483,495.0 +8534.0,package delivered,2019-10-03 13:10:31.000Z, , , ,"['660485']", ,3.255,478.98 +8535.0,confirm order,2019-10-03 13:12:19.000Z, , ,"['990797']", , ,1.76,653.99 +8536.0,confirm order,2019-10-03 13:18:46.000Z, , ,"['990794']", , ,0.483,1104.0 +8537.0,pick item,2019-10-03 13:23:39.000Z, ,"['883165']", , , ,0.166,799.0 +8538.0,pick item,2019-10-03 13:24:28.000Z, ,"['883086']", , , ,1.25,2200.0 +8539.0,create package,2019-10-03 13:24:28.000Z, ,"['882818','883120','883009']", ,"['660494']", ,1.629,2027.99 +8540.0,item out of stock,2019-10-03 13:28:23.000Z, ,"['883180']", , , ,0.483,495.0 +8541.0,pay order,2019-10-03 13:34:03.000Z, , ,"['990738']", , ,1.25,2205.0 +8542.0,pick item,2019-10-03 13:47:08.000Z, ,"['883109']", , , ,0.21,529.0 +8543.0,pay order,2019-10-03 14:00:53.000Z, , ,"['990681']", , ,3.505,2563.98 +8544.0,send package,2019-10-03 14:05:10.000Z, , , ,"['660490']", ,0.98,139.98 +8545.0,item out of stock,2019-10-03 14:06:51.000Z, ,"['883064']", , , ,0.28,89.99 +8546.0,confirm order,2019-10-03 14:07:02.000Z, , ,"['990795']", , ,3.345,4631.98 +8547.0,pay order,2019-10-03 14:11:01.000Z, , ,"['990788']", , ,0.705,663.0 +8548.0,item out of stock,2019-10-03 14:26:10.000Z, ,"['883155']", , , ,0.483,495.0 +8549.0,pay order,2019-10-03 14:42:18.000Z, , ,"['990789']", , ,3.114,2302.98 +8550.0,confirm order,2019-10-03 14:43:04.000Z, , ,"['990796']", , ,1.203,2029.0 +8551.0,place order,2019-10-03 14:45:54.000Z, ,"['883207','883209','883208','883210','883211']","['990799']", , ,2.487,6001.0 +8552.0,pick item,2019-10-03 14:48:36.000Z, ,"['883146']", , , ,0.483,495.0 +8553.0,pick item,2019-10-03 14:51:06.000Z, ,"['883211']", , , ,0.483,1099.0 +8554.0,create package,2019-10-03 14:51:06.000Z, ,"['883151','883168','882830','883190','883188','883008','883186','883172','883171','882850','883165','883169','883152']", ,"['660495']", ,8.133,6168.95 +8555.0,failed delivery,2019-10-03 14:58:22.000Z, , , ,"['660484']", ,3.31,2459.96 +8556.0,pay order,2019-10-03 14:59:38.000Z, , ,"['990790']", , ,1.246,1028.99 +8557.0,item out of stock,2019-10-03 15:00:04.000Z, ,"['883204']", , , ,0.483,1099.0 +8558.0,pay order,2019-10-03 15:14:49.000Z, , ,"['990780']", , ,3.99,5083.99 +8559.0,package delivered,2019-10-03 15:47:44.000Z, , , ,"['660489']", ,3.643,1300.95 +8560.0,confirm order,2019-10-03 16:00:21.000Z, , ,"['990799']", , ,2.487,6001.0 +8561.0,item out of stock,2019-10-03 16:14:54.000Z, ,"['883166']", , , ,0.2,39.99 +8562.0,pay order,2019-10-03 16:28:01.000Z, , ,"['990747']", , ,2.64,3223.98 +8563.0,pick item,2019-10-03 16:40:45.000Z, ,"['883125']", , , ,0.483,79.99 +8564.0,place order,2019-10-03 16:51:35.000Z, ,"['883213','883215','883212','883216','883214']","['990800']", , ,3.785,3928.98 +8565.0,pick item,2019-10-03 16:51:49.000Z, ,"['883215']", , , ,0.483,495.0 +8566.0,pay order,2019-10-03 16:59:58.000Z, , ,"['990765']", , ,0.966,1183.99 +8567.0,failed delivery,2019-10-03 19:46:17.000Z, , , ,"['660490']", ,0.98,139.98 +8568.0,failed delivery,2019-10-03 19:56:21.000Z, , , ,"['660491']", ,2.392,1847.98 +8569.0,pick item,2019-10-03 20:08:43.000Z, ,"['883119']", , , ,0.495,129.0 +8570.0,place order,2019-10-03 20:14:20.000Z, ,"['883220','883219','883217','883218']","['990801']", , ,4.39,2584.97 +8571.0,place order,2019-10-04 06:20:15.000Z, ,"['883222','883221']","['990802']", , ,0.42,1063.0 +8572.0,pick item,2019-10-04 06:25:19.000Z, ,"['883195']", , , ,0.172,699.0 +8573.0,package delivered,2019-10-04 07:24:19.000Z, , , ,"['660484']", ,3.31,2459.96 +8574.0,pick item,2019-10-04 07:33:27.000Z, ,"['883084']", , , ,0.483,1099.0 +8575.0,pick item,2019-10-04 07:38:34.000Z, ,"['883077']", , , ,0.172,699.0 +8576.0,item out of stock,2019-10-04 07:54:14.000Z, ,"['883220']", , , ,1.48,199.99 +8577.0,pick item,2019-10-04 07:57:14.000Z, ,"['883101']", , , ,0.2,39.99 +8578.0,pay order,2019-10-04 08:11:57.000Z, , ,"['990775']", , ,0.166,804.0 +8579.0,place order,2019-10-04 08:20:09.000Z, ,"['883224','883227','883225','883223','883226']","['990803']", , ,2.623,1552.97 +8580.0,reorder item,2019-10-04 08:31:49.000Z, ,"['883204']", , , ,0.483,1099.0 +8581.0,failed delivery,2019-10-04 08:34:24.000Z, , , ,"['660491']", ,2.392,1847.98 +8582.0,reorder item,2019-10-04 08:35:08.000Z, ,"['883154']", , , ,0.88,89.99 +8583.0,pick item,2019-10-04 08:37:50.000Z, ,"['883223']", , , ,1.28,149.99 +8584.0,pick item,2019-10-04 08:39:26.000Z, ,"['883224']", , , ,0.28,89.99 +8585.0,confirm order,2019-10-04 08:48:13.000Z, , ,"['990801']", , ,4.39,2584.97 +8586.0,reorder item,2019-10-04 09:01:54.000Z, ,"['883220']", , , ,1.48,199.99 +8587.0,item out of stock,2019-10-04 09:07:09.000Z, ,"['883212']", , , ,0.172,699.0 +8588.0,pick item,2019-10-04 09:20:27.000Z, ,"['883200']", , , ,0.483,1099.0 +8589.0,send package,2019-10-04 09:27:15.000Z, , , ,"['660494']", ,1.629,2027.99 +8590.0,pay order,2019-10-04 09:30:32.000Z, , ,"['990538']", , ,0.2,44.99 +8591.0,pick item,2019-10-04 09:35:50.000Z, ,"['883140']", , , ,0.88,89.99 +8592.0,reorder item,2019-10-04 09:44:40.000Z, ,"['883162']", , , ,0.44,476.0 +8593.0,pick item,2019-10-04 09:55:36.000Z, ,"['883202']", , , ,0.28,449.0 +8594.0,place order,2019-10-04 10:00:06.000Z, ,"['883231','883228','883230','883229']","['990804']", , ,4.33,2894.97 +8595.0,pick item,2019-10-04 10:05:13.000Z, ,"['883157']", , , ,0.188,1149.0 +8596.0,create package,2019-10-04 10:05:13.000Z, ,"['883049','883141','883050','883139','882992','883140']", ,"['660496']", ,5.456,3768.96 +8597.0,confirm order,2019-10-04 10:05:36.000Z, , ,"['990800']", , ,3.785,3928.98 +8598.0,reorder item,2019-10-04 10:22:42.000Z, ,"['883180']", , , ,0.483,495.0 +8599.0,reorder item,2019-10-04 10:24:32.000Z, ,"['883064']", , , ,0.28,89.99 +8600.0,pick item,2019-10-04 10:24:59.000Z, ,"['883206']", , , ,0.78,99.99 +8601.0,pay order,2019-10-04 10:29:23.000Z, , ,"['990643']", , ,1.93,1159.99 +8602.0,pay order,2019-10-04 10:50:43.000Z, , ,"['990783']", , ,2.983,1245.96 +8603.0,item out of stock,2019-10-04 10:53:52.000Z, ,"['883198']", , , ,0.44,476.0 +8604.0,send package,2019-10-04 11:11:02.000Z, , , ,"['660495']", ,8.133,6168.95 +8605.0,place order,2019-10-04 11:19:59.000Z, ,"['883234','883233','883232']","['990805']", , ,2.543,1353.98 +8606.0,confirm order,2019-10-04 11:26:05.000Z, , ,"['990802']", , ,0.42,1063.0 +8607.0,failed delivery,2019-10-04 11:28:59.000Z, , , ,"['660494']", ,1.629,2027.99 +8608.0,pick item,2019-10-04 11:40:54.000Z, ,"['883164']", , , ,0.28,89.99 +8609.0,pay order,2019-10-04 11:43:18.000Z, , ,"['990796']", , ,1.203,2029.0 +8610.0,pick item,2019-10-04 11:45:09.000Z, ,"['883175']", , , ,0.188,1149.0 +8611.0,pay order,2019-10-04 11:51:00.000Z, , ,"['990712']", , ,2.29,2713.98 +8612.0,pick item,2019-10-04 11:59:35.000Z, ,"['883210']", , , ,0.28,449.0 +8613.0,pick item,2019-10-04 12:07:00.000Z, ,"['883142']", , , ,0.21,529.0 +8614.0,pick item,2019-10-04 12:10:36.000Z, ,"['883226']", , , ,0.495,129.0 +8615.0,create package,2019-10-04 12:10:36.000Z, ,"['883160','883192','883195','883163','883206','883161','883119','883164','883118']", ,"['660497']", ,4.35,5684.97 +8616.0,pay order,2019-10-04 12:19:03.000Z, , ,"['990555']", , ,4.263999999999999,3921.97 +8617.0,reorder item,2019-10-04 12:27:07.000Z, ,"['883155']", , , ,0.483,495.0 +8618.0,pick item,2019-10-04 12:28:25.000Z, ,"['883217']", , , ,0.38,29.99 +8619.0,item out of stock,2019-10-04 12:37:20.000Z, ,"['883216']", , , ,1.37,2500.0 +8620.0,pick item,2019-10-04 12:45:49.000Z, ,"['883208']", , , ,0.188,1149.0 +8621.0,confirm order,2019-10-04 12:49:59.000Z, , ,"['990805']", , ,2.543,1353.98 +8622.0,package delivered,2019-10-04 12:55:30.000Z, , , ,"['660494']", ,1.629,2027.99 +8623.0,pay order,2019-10-04 12:57:53.000Z, , ,"['990755']", , ,1.168,1283.99 +8624.0,place order,2019-10-04 12:59:46.000Z, ,"['883235']","['990806']", , ,0.78,104.99 +8625.0,pick item,2019-10-04 13:09:49.000Z, ,"['883149']", , , ,0.88,89.99 +8626.0,reorder item,2019-10-04 13:25:37.000Z, ,"['883107']", , , ,0.166,799.0 +8627.0,failed delivery,2019-10-04 13:32:07.000Z, , , ,"['660493']", ,6.785,6067.96 +8628.0,pick item,2019-10-04 13:39:01.000Z, ,"['883170']", , , ,1.48,199.99 +8629.0,reorder item,2019-10-04 13:45:40.000Z, ,"['883158']", , , ,0.28,449.0 +8630.0,confirm order,2019-10-04 13:45:51.000Z, , ,"['990803']", , ,2.623,1552.97 +8631.0,pick item,2019-10-04 13:58:21.000Z, ,"['883220']", , , ,1.48,199.99 +8632.0,pick item,2019-10-04 14:22:08.000Z, ,"['883233']", , , ,1.28,149.99 +8633.0,package delivered,2019-10-04 14:46:14.000Z, , , ,"['660491']", ,2.392,1847.98 +8634.0,send package,2019-10-04 14:59:06.000Z, , , ,"['660496']", ,5.456,3768.96 +8635.0,place order,2019-10-04 15:19:19.000Z, ,"['883236','883239','883237','883238','883240']","['990807']", , ,2.846,1539.97 +8636.0,failed delivery,2019-10-04 15:34:46.000Z, , , ,"['660490']", ,0.98,139.98 +8637.0,item out of stock,2019-10-04 15:41:08.000Z, ,"['883138']", , , ,1.25,2200.0 +8638.0,pick item,2019-10-04 15:50:20.000Z, ,"['883194']", , , ,0.28,449.0 +8639.0,place order,2019-10-04 16:58:25.000Z, ,"['883243','883241','883242']","['990808']", , ,0.5479999999999999,2032.0 +8640.0,reorder item,2019-10-04 18:32:35.000Z, ,"['883153']", , , ,0.28,89.99 +8641.0,failed delivery,2019-10-04 19:17:08.000Z, , , ,"['660496']", ,5.456,3768.96 +8642.0,pick item,2019-10-04 19:40:17.000Z, ,"['882652']", , , ,0.483,1099.0 +8643.0,pick item,2019-10-04 20:11:45.000Z, ,"['883133']", , , ,0.78,99.99 +8644.0,create package,2019-10-04 20:11:45.000Z, ,"['883150','882752','883147','883056','883146','883145','883148','883149','882501']", ,"['660498']", ,5.323,1580.93 +8645.0,place order,2019-10-04 20:34:50.000Z, ,"['883244','883245','883246','883247']","['990809']", , ,2.481,5229.0 +8646.0,place order,2019-10-05 16:28:54.000Z, ,"['883249','883248']","['990810']", , ,0.655,1199.0 +8647.0,payment reminder,2019-10-06 07:49:36.000Z, , ,"['990682']", , ,2.04,384.97 +8648.0,payment reminder,2019-10-06 10:29:54.000Z, , ,"['990687']", , ,3.959,4352.98 +8649.0,payment reminder,2019-10-06 13:49:22.000Z, , ,"['990686']", , ,1.188,1158.0 +8650.0,place order,2019-10-06 16:51:42.000Z, ,"['883251','883250']","['990811']", , ,1.46,2734.0 +8651.0,create package,2019-10-06 23:00:00.000Z, ,"['883121','882933','883202']", ,"['660499']", ,1.0,1014.99 +8652.0,pick item,2019-10-07 06:30:17.000Z, ,"['883229']", , , ,1.37,2500.0 +8653.0,item out of stock,2019-10-07 06:51:22.000Z, ,"['883240']", , , ,0.44,476.0 +8654.0,pick item,2019-10-07 07:12:09.000Z, ,"['882849']", , , ,0.483,495.0 +8655.0,send package,2019-10-07 07:17:46.000Z, , , ,"['660497']", ,4.35,5684.97 +8656.0,place order,2019-10-07 07:28:26.000Z, ,"['883253','883252','883254','883255']","['990812']", , ,2.026,3922.99 +8657.0,payment reminder,2019-10-07 07:42:50.000Z, , ,"['990577']", , ,0.966,995.0 +8658.0,pick item,2019-10-07 07:46:19.000Z, ,"['883187']", , , ,0.188,1149.0 +8659.0,confirm order,2019-10-07 08:00:14.000Z, , ,"['990798']", , ,3.023,1493.97 +8660.0,confirm order,2019-10-07 08:01:15.000Z, , ,"['990804']", , ,4.33,2894.97 +8661.0,pick item,2019-10-07 08:04:31.000Z, ,"['883213']", , , ,0.98,129.99 +8662.0,confirm order,2019-10-07 08:10:56.000Z, , ,"['990807']", , ,2.846,1539.97 +8663.0,pay order,2019-10-07 08:34:45.000Z, , ,"['990792']", , ,1.803,1065.99 +8664.0,confirm order,2019-10-07 08:35:23.000Z, , ,"['990810']", , ,0.655,1199.0 +8665.0,item out of stock,2019-10-07 08:42:08.000Z, ,"['883247']", , , ,0.483,1099.0 +8666.0,pick item,2019-10-07 08:59:51.000Z, ,"['883231']", , , ,0.2,39.99 +8667.0,pick item,2019-10-07 09:14:50.000Z, ,"['883225']", , , ,0.38,29.99 +8668.0,place order,2019-10-07 09:16:39.000Z, ,"['883256','883258','883259','883257','883260']","['990813']", , ,4.23,1003.96 +8669.0,pick item,2019-10-07 09:17:27.000Z, ,"['883252']", , , ,0.28,89.99 +8670.0,pick item,2019-10-07 09:19:47.000Z, ,"['883179']", , , ,0.28,449.0 +8671.0,item out of stock,2019-10-07 09:25:59.000Z, ,"['883249']", , , ,0.172,699.0 +8672.0,item out of stock,2019-10-07 09:30:46.000Z, ,"['883199']", , , ,0.28,449.0 +8673.0,item out of stock,2019-10-07 09:31:05.000Z, ,"['883221']", , , ,0.21,529.0 +8674.0,pick item,2019-10-07 09:34:57.000Z, ,"['883093']", , , ,1.25,2200.0 +8675.0,package delivered,2019-10-07 09:41:32.000Z, , , ,"['660495']", ,8.133,6168.95 +8676.0,pick item,2019-10-07 09:42:51.000Z, ,"['883042']", , , ,0.188,1149.0 +8677.0,pick item,2019-10-07 09:43:21.000Z, ,"['882796']", , , ,0.483,495.0 +8678.0,pick item,2019-10-07 09:53:31.000Z, ,"['883177']", , , ,1.28,149.99 +8679.0,create package,2019-10-07 09:53:31.000Z, ,"['883185','883143','883077','883184','883142']", ,"['660500']", ,1.982,1883.98 +8680.0,reorder item,2019-10-07 10:00:30.000Z, ,"['883247']", , , ,0.483,1099.0 +8681.0,pick item,2019-10-07 10:09:53.000Z, ,"['882843']", , , ,0.21,529.0 +8682.0,confirm order,2019-10-07 10:52:20.000Z, , ,"['990811']", , ,1.46,2734.0 +8683.0,place order,2019-10-07 10:53:05.000Z, ,"['883263','883265','883262','883264','883261']","['990814']", , ,3.2510000000000003,4008.99 +8684.0,pick item,2019-10-07 10:56:13.000Z, ,"['883176']", , , ,1.48,199.99 +8685.0,send package,2019-10-07 11:13:23.000Z, , , ,"['660500']", ,1.982,1883.98 +8686.0,pick item,2019-10-07 11:44:40.000Z, ,"['883201']", , , ,1.48,199.99 +8687.0,pick item,2019-10-07 12:09:21.000Z, ,"['883261']", , , ,1.37,2500.0 +8688.0,pick item,2019-10-07 12:22:48.000Z, ,"['883193']", , , ,1.25,2200.0 +8689.0,create package,2019-10-07 12:22:48.000Z, ,"['883108','883109','883106','882652']", ,"['660501']", ,2.843,4227.99 +8690.0,pick item,2019-10-07 12:28:48.000Z, ,"['882626']", , , ,0.38,29.99 +8691.0,pick item,2019-10-07 12:31:34.000Z, ,"['883235']", , , ,0.78,99.99 +8692.0,package delivered,2019-10-07 12:33:22.000Z, , , ,"['660496']", ,5.456,3768.96 +8693.0,pick item,2019-10-07 12:40:45.000Z, ,"['883222']", , , ,0.21,529.0 +8694.0,confirm order,2019-10-07 12:44:06.000Z, , ,"['990812']", , ,2.026,3922.99 +8695.0,pick item,2019-10-07 12:46:12.000Z, ,"['883122']", , , ,0.188,1149.0 +8696.0,create package,2019-10-07 12:46:12.000Z, ,"['883112','883114','883182','883072']", ,"['660502']", ,4.42,5075.99 +8697.0,pick item,2019-10-07 12:55:34.000Z, ,"['883251']", , , ,1.25,2200.0 +8698.0,place order,2019-10-07 13:05:58.000Z, ,"['883268','883269','883266','883267']","['990815']", , ,2.241,4188.99 +8699.0,confirm order,2019-10-07 13:16:03.000Z, , ,"['990809']", , ,2.481,5229.0 +8700.0,package delivered,2019-10-07 13:25:34.000Z, , , ,"['660500']", ,1.982,1883.98 +8701.0,send package,2019-10-07 13:27:44.000Z, , , ,"['660501']", ,2.843,4227.99 +8702.0,pick item,2019-10-07 13:29:07.000Z, ,"['882945']", , , ,0.483,79.99 +8703.0,pay order,2019-10-07 13:30:59.000Z, , ,"['990760']", , ,3.78,4554.99 +8704.0,pick item,2019-10-07 13:42:16.000Z, ,"['883189']", , , ,0.166,799.0 +8705.0,pick item,2019-10-07 14:25:51.000Z, ,"['883205']", , , ,1.48,199.99 +8706.0,create package,2019-10-07 14:25:51.000Z, ,"['883157','883031','883159','883179']", ,"['660503']", ,2.0980000000000003,3827.99 +8707.0,send package,2019-10-07 14:26:50.000Z, , , ,"['660503']", ,2.0980000000000003,3827.99 +8708.0,place order,2019-10-07 14:31:43.000Z, ,"['883273','883272','883275','883271','883274','883270']","['990816']", , ,3.233,4289.97 +8709.0,item out of stock,2019-10-07 14:32:21.000Z, ,"['883197']", , , ,0.88,89.99 +8710.0,confirm order,2019-10-07 14:35:29.000Z, , ,"['990813']", , ,4.23,1003.96 +8711.0,pick item,2019-10-07 14:39:47.000Z, ,"['883181']", , , ,0.172,699.0 +8712.0,package delivered,2019-10-07 14:44:34.000Z, , , ,"['660501']", ,2.843,4227.99 +8713.0,pick item,2019-10-07 14:52:42.000Z, ,"['883274']", , , ,0.44,476.0 +8714.0,pick item,2019-10-07 14:56:29.000Z, ,"['883203']", , , ,0.28,89.99 +8715.0,send package,2019-10-07 15:11:23.000Z, , , ,"['660498']", ,5.323,1580.93 +8716.0,confirm order,2019-10-07 15:14:04.000Z, , ,"['990814']", , ,3.2510000000000003,4008.99 +8717.0,pick item,2019-10-07 15:16:24.000Z, ,"['883254']", , , ,1.37,2500.0 +8718.0,create package,2019-10-07 15:16:24.000Z, ,"['883130','883200']", ,"['660504']", ,1.463,1228.99 +8719.0,payment reminder,2019-10-07 15:35:42.000Z, , ,"['990699']", , ,2.523,1178.98 +8720.0,pick item,2019-10-07 16:18:13.000Z, ,"['882920']", , , ,0.495,129.0 +8721.0,place order,2019-10-07 16:23:14.000Z, ,"['883277','883279','883278','883280','883276']","['990817']", , ,3.833,1003.96 +8722.0,pick item,2019-10-07 16:37:00.000Z, ,"['883272']", , , ,0.483,1099.0 +8723.0,create package,2019-10-07 16:37:00.000Z, ,"['882912','882914']", ,"['660505']", ,2.74,5000.0 +8724.0,pick item,2019-10-07 16:41:48.000Z, ,"['883263']", , , ,0.78,99.99 +8725.0,send package,2019-10-07 17:04:19.000Z, , , ,"['660504']", ,1.463,1228.99 +8726.0,pick item,2019-10-07 17:25:54.000Z, ,"['883248']", , , ,0.483,495.0 +8727.0,create package,2019-10-07 17:25:54.000Z, ,"['883233','882957','883100','883101']", ,"['660506']", ,1.834,2137.98 +8728.0,package delivered,2019-10-07 18:39:47.000Z, , , ,"['660490']", ,0.98,139.98 +8729.0,pick item,2019-10-07 18:43:32.000Z, ,"['883209']", , , ,1.37,2500.0 +8730.0,place order,2019-10-07 18:49:16.000Z, ,"['883282','883283','883281','883284']","['990818']", , ,1.934,1828.98 +8731.0,pick item,2019-10-07 19:49:46.000Z, ,"['883196']", , , ,0.483,1099.0 +8732.0,place order,2019-10-08 00:13:30.000Z, ,"['883286','883285','883288','883287']","['990819']", , ,3.395,939.98 +8733.0,send package,2019-10-08 06:16:51.000Z, , , ,"['660499']", ,1.0,1014.99 +8734.0,confirm order,2019-10-08 06:37:27.000Z, , ,"['990819']", , ,3.395,939.98 +8735.0,pick item,2019-10-08 06:47:58.000Z, ,"['883276']", , , ,0.78,99.99 +8736.0,reorder item,2019-10-08 06:53:07.000Z, ,"['883216']", , , ,1.37,2500.0 +8737.0,failed delivery,2019-10-08 06:55:52.000Z, , , ,"['660493']", ,6.785,6067.96 +8738.0,pay order,2019-10-08 07:05:25.000Z, , ,"['990798']", , ,3.023,1493.97 +8739.0,confirm order,2019-10-08 07:08:58.000Z, , ,"['990816']", , ,3.233,4289.97 +8740.0,pick item,2019-10-08 07:19:19.000Z, ,"['883287']", , , ,0.44,476.0 +8741.0,create package,2019-10-08 07:19:19.000Z, ,"['883213','883215','883086','883125']", ,"['660507']", ,3.196,2904.98 +8742.0,pick item,2019-10-08 07:23:28.000Z, ,"['883275']", , , ,0.28,89.99 +8743.0,place order,2019-10-08 07:28:39.000Z, ,"['883290','883291','883289','883293','883292']","['990820']", , ,2.7060000000000004,4632.98 +8744.0,pick item,2019-10-08 07:30:44.000Z, ,"['883290']", , , ,0.188,1149.0 +8745.0,pick item,2019-10-08 07:35:32.000Z, ,"['883253']", , , ,0.166,799.0 +8746.0,reorder item,2019-10-08 07:53:42.000Z, ,"['883240']", , , ,0.44,476.0 +8747.0,pick item,2019-10-08 07:59:37.000Z, ,"['883218']", , , ,1.25,2200.0 +8748.0,create package,2019-10-08 07:59:37.000Z, ,"['883093','883209','883208','883231','883210','883211','883229']", ,"['660508']", ,5.141,9936.99 +8749.0,item out of stock,2019-10-08 08:13:07.000Z, ,"['883266']", , , ,0.188,1149.0 +8750.0,pick item,2019-10-08 08:15:04.000Z, ,"['882867']", , , ,0.44,476.0 +8751.0,pay order,2019-10-08 08:20:06.000Z, , ,"['990782']", , ,0.973,703.98 +8752.0,pick item,2019-10-08 08:34:36.000Z, ,"['883241']", , , ,0.172,699.0 +8753.0,package delivered,2019-10-08 08:34:57.000Z, , , ,"['660497']", ,4.35,5684.97 +8754.0,send package,2019-10-08 08:35:35.000Z, , , ,"['660505']", ,2.74,5000.0 +8755.0,confirm order,2019-10-08 08:37:30.000Z, , ,"['990818']", , ,1.934,1828.98 +8756.0,pick item,2019-10-08 08:41:43.000Z, ,"['882910']", , , ,0.483,79.99 +8757.0,failed delivery,2019-10-08 08:54:01.000Z, , , ,"['660499']", ,1.0,1014.99 +8758.0,pick item,2019-10-08 08:54:40.000Z, ,"['883293']", , , ,0.2,39.99 +8759.0,pick item,2019-10-08 09:13:01.000Z, ,"['883267']", , , ,1.37,2500.0 +8760.0,reorder item,2019-10-08 09:13:29.000Z, ,"['883249']", , , ,0.172,699.0 +8761.0,package delivered,2019-10-08 09:17:02.000Z, , , ,"['660504']", ,1.463,1228.99 +8762.0,place order,2019-10-08 09:17:05.000Z, ,"['883298','883294','883296','883297','883295']","['990821']", , ,1.808,2251.98 +8763.0,pick item,2019-10-08 09:27:54.000Z, ,"['883239']", , , ,1.48,199.99 +8764.0,item out of stock,2019-10-08 09:28:29.000Z, ,"['883178']", , , ,0.483,79.99 +8765.0,pick item,2019-10-08 09:30:01.000Z, ,"['883232']", , , ,0.78,99.99 +8766.0,create package,2019-10-08 09:30:01.000Z, ,"['883170','883187','883084','882849','883287','883248','883189']", ,"['660509']", ,3.723,4712.99 +8767.0,pay order,2019-10-08 09:35:37.000Z, , ,"['990686']", , ,1.188,1158.0 +8768.0,pick item,2019-10-08 09:36:57.000Z, ,"['883230']", , , ,1.48,199.99 +8769.0,package delivered,2019-10-08 09:42:28.000Z, , , ,"['660498']", ,5.323,1580.93 +8770.0,confirm order,2019-10-08 09:50:03.000Z, , ,"['990817']", , ,3.833,1003.96 +8771.0,pay order,2019-10-08 10:00:10.000Z, , ,"['990577']", , ,0.966,995.0 +8772.0,pick item,2019-10-08 10:07:28.000Z, ,"['882618']", , , ,1.48,199.99 +8773.0,pick item,2019-10-08 10:14:34.000Z, ,"['883234']", , , ,0.483,1099.0 +8774.0,reorder item,2019-10-08 10:15:17.000Z, ,"['883212']", , , ,0.172,699.0 +8775.0,pick item,2019-10-08 10:34:13.000Z, ,"['883236']", , , ,0.166,799.0 +8776.0,pick item,2019-10-08 10:38:01.000Z, ,"['883289']", , , ,0.188,1149.0 +8777.0,pick item,2019-10-08 10:39:59.000Z, ,"['883245']", , , ,0.188,1149.0 +8778.0,pay order,2019-10-08 10:40:34.000Z, , ,"['990814']", , ,3.2510000000000003,4008.99 +8779.0,send package,2019-10-08 10:43:22.000Z, , , ,"['660502']", ,4.42,5075.99 +8780.0,pick item,2019-10-08 10:45:52.000Z, ,"['883283']", , , ,0.78,99.99 +8781.0,create package,2019-10-08 10:45:52.000Z, ,"['883224','883217','883218','883220','883225','883263','883223','883226','882796','883276','883261']", ,"['660510']", ,8.958,6023.93 +8782.0,item out of stock,2019-10-08 10:47:33.000Z, ,"['883260']", , , ,0.21,529.0 +8783.0,send package,2019-10-08 10:47:49.000Z, , , ,"['660510']", ,8.958,6023.93 +8784.0,place order,2019-10-08 10:53:58.000Z, ,"['883300','883301','883302','883299']","['990822']", , ,1.21,1548.99 +8785.0,send package,2019-10-08 11:18:00.000Z, , , ,"['660506']", ,1.834,2137.98 +8786.0,pick item,2019-10-08 11:33:28.000Z, ,"['883242']", , , ,0.166,799.0 +8787.0,package delivered,2019-10-08 11:33:34.000Z, , , ,"['660499']", ,1.0,1014.99 +8788.0,pick item,2019-10-08 11:37:24.000Z, ,"['883292']", , , ,1.25,2200.0 +8789.0,failed delivery,2019-10-08 11:38:51.000Z, , , ,"['660505']", ,2.74,5000.0 +8790.0,pay order,2019-10-08 11:48:30.000Z, , ,"['990801']", , ,4.39,2584.97 +8791.0,pick item,2019-10-08 12:03:17.000Z, ,"['883250']", , , ,0.21,529.0 +8792.0,pick item,2019-10-08 12:06:35.000Z, ,"['883131']", , , ,0.2,39.99 +8793.0,confirm order,2019-10-08 12:11:45.000Z, , ,"['990815']", , ,2.241,4188.99 +8794.0,reorder item,2019-10-08 12:15:34.000Z, ,"['883166']", , , ,0.2,39.99 +8795.0,pay order,2019-10-08 12:19:21.000Z, , ,"['990791']", , ,1.652,903.99 +8796.0,pick item,2019-10-08 12:20:53.000Z, ,"['883294']", , , ,0.28,89.99 +8797.0,pick item,2019-10-08 12:24:55.000Z, ,"['883286']", , , ,1.48,199.99 +8798.0,failed delivery,2019-10-08 12:42:23.000Z, , , ,"['660506']", ,1.834,2137.98 +8799.0,confirm order,2019-10-08 12:54:33.000Z, , ,"['990820']", , ,2.7060000000000004,4632.98 +8800.0,pay order,2019-10-08 12:59:55.000Z, , ,"['990815']", , ,2.241,4188.99 +8801.0,pay order,2019-10-08 13:05:08.000Z, , ,"['990803']", , ,2.623,1552.97 +8802.0,place order,2019-10-08 13:07:43.000Z, ,"['883306','883303','883305','883304']","['990823']", , ,3.143,454.96 +8803.0,pick item,2019-10-08 13:17:00.000Z, ,"['883302']", , , ,0.44,476.0 +8804.0,pick item,2019-10-08 13:26:04.000Z, ,"['883303']", , , ,1.48,199.99 +8805.0,reorder item,2019-10-08 13:26:37.000Z, ,"['883178']", , , ,0.483,79.99 +8806.0,pick item,2019-10-08 13:27:22.000Z, ,"['883262']", , , ,0.166,799.0 +8807.0,confirm order,2019-10-08 13:31:08.000Z, , ,"['990822']", , ,1.21,1548.99 +8808.0,reorder item,2019-10-08 13:31:28.000Z, ,"['883199']", , , ,0.28,449.0 +8809.0,pick item,2019-10-08 13:55:11.000Z, ,"['883173']", , , ,0.21,529.0 +8810.0,payment reminder,2019-10-08 13:55:18.000Z, , ,"['990698']", , ,1.912,2082.98 +8811.0,pick item,2019-10-08 14:07:28.000Z, ,"['883279']", , , ,0.483,79.99 +8812.0,create package,2019-10-08 14:07:28.000Z, ,"['883177','883175','883176','883242','883133','883131','882843','883241','883245']", ,"['660511']", ,4.664,4814.96 +8813.0,confirm order,2019-10-08 14:08:16.000Z, , ,"['990823']", , ,3.143,454.96 +8814.0,pick item,2019-10-08 14:11:59.000Z, ,"['882831']", , , ,0.78,99.99 +8815.0,reorder item,2019-10-08 14:14:38.000Z, ,"['883198']", , , ,0.44,476.0 +8816.0,pick item,2019-10-08 14:16:08.000Z, ,"['883167']", , , ,0.28,449.0 +8817.0,pick item,2019-10-08 14:17:10.000Z, ,"['883271']", , , ,0.28,89.99 +8818.0,pick item,2019-10-08 14:28:26.000Z, ,"['883281']", , , ,0.188,1149.0 +8819.0,pick item,2019-10-08 14:33:34.000Z, ,"['883277']", , , ,0.88,89.99 +8820.0,pay order,2019-10-08 14:34:53.000Z, , ,"['990682']", , ,2.04,384.97 +8821.0,place order,2019-10-08 14:35:13.000Z, ,"['883310','883307','883309','883308']","['990824']", , ,4.49,3053.98 +8822.0,package delivered,2019-10-08 14:36:57.000Z, , , ,"['660503']", ,2.0980000000000003,3827.99 +8823.0,pick item,2019-10-08 14:40:01.000Z, ,"['883304']", , , ,0.483,79.99 +8824.0,pay order,2019-10-08 14:58:50.000Z, , ,"['990811']", , ,1.46,2734.0 +8825.0,package delivered,2019-10-08 15:05:57.000Z, , , ,"['660510']", ,8.958,6023.93 +8826.0,send package,2019-10-08 15:14:07.000Z, , , ,"['660507']", ,3.196,2904.98 +8827.0,pick item,2019-10-08 15:19:41.000Z, ,"['883243']", , , ,0.21,529.0 +8828.0,pick item,2019-10-08 15:38:40.000Z, ,"['883282']", , , ,0.483,79.99 +8829.0,send package,2019-10-08 15:46:40.000Z, , , ,"['660508']", ,5.141,9936.99 +8830.0,pick item,2019-10-08 15:51:11.000Z, ,"['883087']", , , ,0.78,99.99 +8831.0,create package,2019-10-08 15:51:11.000Z, ,"['883250','883194','883193','883251','883203','882626','883205','883196']", ,"['660512']", ,5.613,6796.97 +8832.0,payment reminder,2019-10-08 15:55:08.000Z, , ,"['990569']", , ,3.333,2784.98 +8833.0,payment reminder,2019-10-08 16:00:15.000Z, , ,"['990706']", , ,2.158,1912.98 +8834.0,package delivered,2019-10-08 16:13:34.000Z, , , ,"['660502']", ,4.42,5075.99 +8835.0,place order,2019-10-08 16:30:14.000Z, ,"['883311','883314','883313','883312']","['990825']", , ,2.34,354.96 +8836.0,item out of stock,2019-10-08 16:31:32.000Z, ,"['883135']", , , ,1.25,2200.0 +8837.0,pick item,2019-10-08 16:35:01.000Z, ,"['883269']", , , ,0.2,39.99 +8838.0,failed delivery,2019-10-08 17:11:08.000Z, , , ,"['660508']", ,5.141,9936.99 +8839.0,pick item,2019-10-08 17:12:29.000Z, ,"['883310']", , , ,1.48,199.99 +8840.0,pick item,2019-10-08 17:21:13.000Z, ,"['883291']", , , ,0.88,89.99 +8841.0,confirm order,2019-10-08 17:31:58.000Z, , ,"['990806']", , ,0.78,104.99 +8842.0,failed delivery,2019-10-08 17:40:18.000Z, , , ,"['660493']", ,6.785,6067.96 +8843.0,pay order,2019-10-08 17:44:12.000Z, , ,"['990810']", , ,0.655,1199.0 +8844.0,place order,2019-10-08 19:10:17.000Z, ,"['883319','883318','883317','883315','883316']","['990826']", , ,2.489,4481.0 +8845.0,reorder item,2019-10-08 19:40:27.000Z, ,"['883102']", , , ,0.21,529.0 +8846.0,place order,2019-10-09 01:19:36.000Z, ,"['883320','883322','883321','883323','883324']","['990827']", , ,2.395,4377.0 +8847.0,pick item,2019-10-09 06:14:02.000Z, ,"['883306']", , , ,0.98,129.99 +8848.0,pick item,2019-10-09 06:28:17.000Z, ,"['883319']", , , ,0.172,699.0 +8849.0,pick item,2019-10-09 06:42:29.000Z, ,"['883323']", , , ,0.28,449.0 +8850.0,pick item,2019-10-09 07:09:11.000Z, ,"['883228']", , , ,1.28,149.99 +8851.0,pick item,2019-10-09 07:10:26.000Z, ,"['883314']", , , ,0.98,129.99 +8852.0,create package,2019-10-09 07:10:26.000Z, ,"['883253','883252','883235','883254','883042']", ,"['660513']", ,2.784,4637.98 +8853.0,pick item,2019-10-09 07:11:29.000Z, ,"['883295']", , , ,0.172,699.0 +8854.0,confirm order,2019-10-09 07:34:52.000Z, , ,"['990826']", , ,2.489,4481.0 +8855.0,place order,2019-10-09 07:41:21.000Z, ,"['883329','883328','883325','883326','883327']","['990828']", , ,2.628,2704.99 +8856.0,pick item,2019-10-09 07:45:00.000Z, ,"['883313']", , , ,0.2,39.99 +8857.0,pick item,2019-10-09 07:46:20.000Z, ,"['883327']", , , ,0.44,476.0 +8858.0,pick item,2019-10-09 07:55:08.000Z, ,"['883280']", , , ,0.21,529.0 +8859.0,send package,2019-10-09 08:12:48.000Z, , , ,"['660511']", ,4.664,4814.96 +8860.0,package delivered,2019-10-09 08:16:48.000Z, , , ,"['660506']", ,1.834,2137.98 +8861.0,pick item,2019-10-09 08:17:38.000Z, ,"['883278']", , , ,1.48,199.99 +8862.0,create package,2019-10-09 08:17:38.000Z, ,"['883122','883201','883295','883294','883323','882867']", ,"['660514']", ,2.84,3062.98 +8863.0,pick item,2019-10-09 08:24:37.000Z, ,"['883285']", , , ,0.98,129.99 +8864.0,item out of stock,2019-10-09 08:24:43.000Z, ,"['883320']", , , ,0.172,699.0 +8865.0,pay order,2019-10-09 08:26:39.000Z, , ,"['990699']", , ,2.523,1178.98 +8866.0,reorder item,2019-10-09 08:26:44.000Z, ,"['883197']", , , ,0.88,89.99 +8867.0,pick item,2019-10-09 08:28:17.000Z, ,"['882919']", , , ,0.188,1149.0 +8868.0,payment reminder,2019-10-09 08:31:55.000Z, , ,"['990710']", , ,3.176,3972.97 +8869.0,send package,2019-10-09 08:35:34.000Z, , , ,"['660509']", ,3.723,4712.99 +8870.0,pick item,2019-10-09 08:38:58.000Z, ,"['883273']", , , ,1.37,2500.0 +8871.0,pick item,2019-10-09 08:44:14.000Z, ,"['882792']", , , ,0.483,1099.0 +8872.0,pick item,2019-10-09 08:47:00.000Z, ,"['883322']", , , ,0.21,529.0 +8873.0,pick item,2019-10-09 08:48:30.000Z, ,"['883296']", , , ,0.21,529.0 +8874.0,create package,2019-10-09 08:48:30.000Z, ,"['882945','883222','882920']", ,"['660515']", ,1.188,737.99 +8875.0,failed delivery,2019-10-09 08:53:14.000Z, , , ,"['660505']", ,2.74,5000.0 +8876.0,confirm order,2019-10-09 09:11:19.000Z, , ,"['990827']", , ,2.395,4377.0 +8877.0,pick item,2019-10-09 09:38:26.000Z, ,"['883098']", , , ,0.28,449.0 +8878.0,pick item,2019-10-09 09:41:49.000Z, ,"['883102']", , , ,0.21,529.0 +8879.0,place order,2019-10-09 09:42:29.000Z, ,"['883330','883331']","['990829']", , ,1.416,3004.0 +8880.0,package delivered,2019-10-09 09:50:26.000Z, , , ,"['660493']", ,6.785,6067.96 +8881.0,pick item,2019-10-09 09:56:19.000Z, ,"['882815']", , , ,0.78,99.99 +8882.0,create package,2019-10-09 09:56:19.000Z, ,"['883181']", ,"['660516']", ,0.172,699.0 +8883.0,send package,2019-10-09 10:12:56.000Z, , , ,"['660512']", ,5.613,6796.97 +8884.0,send package,2019-10-09 10:13:44.000Z, , , ,"['660514']", ,2.84,3062.98 +8885.0,confirm order,2019-10-09 10:27:14.000Z, , ,"['990828']", , ,2.628,2704.99 +8886.0,pick item,2019-10-09 10:34:21.000Z, ,"['883030']", , , ,0.28,449.0 +8887.0,create package,2019-10-09 10:34:21.000Z, ,"['883273','883272','883275','883271','883030','883274']", ,"['660517']", ,3.133,4703.98 +8888.0,pick item,2019-10-09 10:42:37.000Z, ,"['883110']", , , ,0.483,1099.0 +8889.0,package delivered,2019-10-09 11:03:38.000Z, , , ,"['660507']", ,3.196,2904.98 +8890.0,pick item,2019-10-09 11:04:54.000Z, ,"['883255']", , , ,0.21,529.0 +8891.0,item out of stock,2019-10-09 11:23:25.000Z, ,"['883321']", , , ,1.25,2200.0 +8892.0,place order,2019-10-09 11:44:46.000Z, ,"['883333','883332','883334','883335']","['990830']", , ,2.628,1842.98 +8893.0,item out of stock,2019-10-09 11:46:03.000Z, ,"['883330']", , , ,0.166,799.0 +8894.0,confirm order,2019-10-09 11:54:22.000Z, , ,"['990808']", , ,0.5479999999999999,2032.0 +8895.0,pick item,2019-10-09 12:15:54.000Z, ,"['883264']", , , ,0.495,129.0 +8896.0,package delivered,2019-10-09 12:18:54.000Z, , , ,"['660509']", ,3.723,4712.99 +8897.0,confirm order,2019-10-09 12:26:15.000Z, , ,"['990829']", , ,1.416,3004.0 +8898.0,pick item,2019-10-09 12:36:51.000Z, ,"['883256']", , , ,1.28,149.99 +8899.0,reorder item,2019-10-09 12:40:02.000Z, ,"['883138']", , , ,1.25,2200.0 +8900.0,pick item,2019-10-09 12:46:25.000Z, ,"['883183']", , , ,0.483,495.0 +8901.0,payment reminder,2019-10-09 12:53:25.000Z, , ,"['990716']", , ,2.955,473.97 +8902.0,pick item,2019-10-09 12:54:24.000Z, ,"['883297']", , , ,0.98,129.99 +8903.0,create package,2019-10-09 12:54:24.000Z, ,"['883303','883291','883306','883293','883290','883289','883292','883087','883304']", ,"['660518']", ,6.428999999999999,5137.94 +8904.0,send package,2019-10-09 13:04:44.000Z, , , ,"['660516']", ,0.172,699.0 +8905.0,item out of stock,2019-10-09 13:05:05.000Z, ,"['883326']", , , ,1.28,149.99 +8906.0,reorder item,2019-10-09 13:14:07.000Z, ,"['883321']", , , ,1.25,2200.0 +8907.0,package delivered,2019-10-09 13:18:22.000Z, , , ,"['660514']", ,2.84,3062.98 +8908.0,pick item,2019-10-09 13:18:36.000Z, ,"['883247']", , , ,0.483,1099.0 +8909.0,reorder item,2019-10-09 13:27:50.000Z, ,"['883135']", , , ,1.25,2200.0 +8910.0,pay order,2019-10-09 13:29:16.000Z, , ,"['990827']", , ,2.395,4377.0 +8911.0,confirm order,2019-10-09 13:29:56.000Z, , ,"['990830']", , ,2.628,1842.98 +8912.0,package delivered,2019-10-09 13:31:08.000Z, , , ,"['660505']", ,2.74,5000.0 +8913.0,package delivered,2019-10-09 13:35:18.000Z, , , ,"['660508']", ,5.141,9936.99 +8914.0,payment reminder,2019-10-09 13:37:26.000Z, , ,"['990713']", , ,4.135,573.97 +8915.0,pay order,2019-10-09 13:43:00.000Z, , ,"['990826']", , ,2.489,4481.0 +8916.0,pay order,2019-10-09 13:43:37.000Z, , ,"['990698']", , ,1.912,2082.98 +8917.0,pick item,2019-10-09 13:47:28.000Z, ,"['883246']", , , ,0.44,476.0 +8918.0,place order,2019-10-09 13:49:19.000Z, ,"['883341','883342','883336','883340','883337','883338','883339']","['990831']", , ,4.378,4835.97 +8919.0,pay order,2019-10-09 13:52:35.000Z, , ,"['990804']", , ,4.33,2894.97 +8920.0,pick item,2019-10-09 13:54:19.000Z, ,"['883301']", , , ,0.21,529.0 +8921.0,pay order,2019-10-09 14:16:44.000Z, , ,"['990687']", , ,3.959,4352.98 +8922.0,pick item,2019-10-09 14:29:22.000Z, ,"['883257']", , , ,0.38,29.99 +8923.0,send package,2019-10-09 15:01:37.000Z, , , ,"['660518']", ,6.428999999999999,5137.94 +8924.0,package delivered,2019-10-09 15:02:45.000Z, , , ,"['660511']", ,4.664,4814.96 +8925.0,pick item,2019-10-09 15:05:35.000Z, ,"['883311']", , , ,0.28,89.99 +8926.0,pick item,2019-10-09 15:07:44.000Z, ,"['883288']", , , ,0.495,129.0 +8927.0,pick item,2019-10-09 15:08:30.000Z, ,"['883332']", , , ,0.28,449.0 +8928.0,failed delivery,2019-10-09 15:19:22.000Z, , , ,"['660512']", ,5.613,6796.97 +8929.0,reorder item,2019-10-09 15:39:58.000Z, ,"['883221']", , , ,0.21,529.0 +8930.0,pick item,2019-10-09 15:45:25.000Z, ,"['883284']", , , ,0.483,495.0 +8931.0,place order,2019-10-09 15:58:25.000Z, ,"['883343','883344']","['990832']", , ,0.693,1633.0 +8932.0,pick item,2019-10-09 16:12:16.000Z, ,"['883338']", , , ,0.38,29.99 +8933.0,create package,2019-10-09 16:12:16.000Z, ,"['882618','882831','882910','882919','883327']", ,"['660519']", ,3.3710000000000004,2004.97 +8934.0,package delivered,2019-10-09 16:19:34.000Z, , , ,"['660516']", ,0.172,699.0 +8935.0,pick item,2019-10-09 16:21:40.000Z, ,"['883336']", , , ,0.78,99.99 +8936.0,confirm order,2019-10-09 17:12:26.000Z, , ,"['990825']", , ,2.34,354.96 +8937.0,pick item,2019-10-09 17:15:56.000Z, ,"['883107']", , , ,0.166,799.0 +8938.0,place order,2019-10-09 18:34:50.000Z, ,"['883348','883345','883347','883350','883349','883346']","['990833']", , ,3.0210000000000004,1927.97 +8939.0,pick item,2019-10-09 18:46:07.000Z, ,"['883343']", , , ,0.483,1099.0 +8940.0,pay order,2019-10-09 19:14:59.000Z, , ,"['990809']", , ,2.481,5229.0 +8941.0,item out of stock,2019-10-09 20:24:40.000Z, ,"['883309']", , , ,0.28,449.0 +8942.0,place order,2019-10-09 22:46:54.000Z, ,"['883354','883355','883353','883351','883352']","['990834']", , ,5.36,5124.97 +8943.0,reorder item,2019-10-10 06:35:10.000Z, ,"['883309']", , , ,0.28,449.0 +8944.0,pick item,2019-10-10 06:40:12.000Z, ,"['883298']", , , ,0.166,799.0 +8945.0,pick item,2019-10-10 06:47:58.000Z, ,"['883219']", , , ,1.28,149.99 +8946.0,create package,2019-10-10 06:47:58.000Z, ,"['883228','883267','883302','883301','883269','883230','883098']", ,"['660520']", ,5.26,4343.97 +8947.0,pick item,2019-10-10 06:51:54.000Z, ,"['883337']", , , ,0.44,476.0 +8948.0,pick item,2019-10-10 06:58:30.000Z, ,"['883268']", , , ,0.483,495.0 +8949.0,confirm order,2019-10-10 06:58:59.000Z, , ,"['990832']", , ,0.693,1633.0 +8950.0,pick item,2019-10-10 07:12:03.000Z, ,"['883154']", , , ,0.88,89.99 +8951.0,send package,2019-10-10 07:23:18.000Z, , , ,"['660513']", ,2.784,4637.98 +8952.0,pick item,2019-10-10 07:35:35.000Z, ,"['883355']", , , ,1.48,199.99 +8953.0,pick item,2019-10-10 07:39:43.000Z, ,"['883259']", , , ,0.88,89.99 +8954.0,pick item,2019-10-10 07:40:59.000Z, ,"['883339']", , , ,1.37,2500.0 +8955.0,pick item,2019-10-10 07:48:29.000Z, ,"['883335']", , , ,0.188,1149.0 +8956.0,create package,2019-10-10 07:48:29.000Z, ,"['883236','883239']", ,"['660521']", ,1.646,998.99 +8957.0,place order,2019-10-10 07:53:23.000Z, ,"['883360','883356','883358','883361','883357','883359']","['990835']", , ,3.987,1202.96 +8958.0,pick item,2019-10-10 07:59:15.000Z, ,"['883361']", , , ,1.28,149.99 +8959.0,send package,2019-10-10 08:12:11.000Z, , , ,"['660515']", ,1.188,737.99 +8960.0,pick item,2019-10-10 08:14:57.000Z, ,"['882821']", , , ,0.28,449.0 +8961.0,create package,2019-10-10 08:14:57.000Z, ,"['883282','883281','883313','883311','883283','883310','883234','883314','883102','883232','883284']", ,"['660522']", ,6.347,4011.93 +8962.0,pay order,2019-10-10 08:21:49.000Z, , ,"['990710']", , ,3.176,3972.97 +8963.0,pick item,2019-10-10 08:30:10.000Z, ,"['883265']", , , ,0.44,476.0 +8964.0,failed delivery,2019-10-10 08:56:40.000Z, , , ,"['660512']", ,5.613,6796.97 +8965.0,item out of stock,2019-10-10 09:01:22.000Z, ,"['883191']", , , ,0.483,1099.0 +8966.0,send package,2019-10-10 09:02:56.000Z, , , ,"['660517']", ,3.133,4703.98 +8967.0,pick item,2019-10-10 09:08:48.000Z, ,"['883244']", , , ,1.37,2500.0 +8968.0,failed delivery,2019-10-10 09:33:01.000Z, , , ,"['660513']", ,2.784,4637.98 +8969.0,pick item,2019-10-10 09:43:31.000Z, ,"['883346']", , , ,0.38,29.99 +8970.0,pick item,2019-10-10 09:47:47.000Z, ,"['883331']", , , ,1.25,2200.0 +8971.0,pay order,2019-10-10 09:49:15.000Z, , ,"['990832']", , ,0.693,1633.0 +8972.0,item out of stock,2019-10-10 09:49:24.000Z, ,"['883356']", , , ,0.495,129.0 +8973.0,pick item,2019-10-10 09:50:16.000Z, ,"['883325']", , , ,0.28,449.0 +8974.0,pick item,2019-10-10 09:56:28.000Z, ,"['883329']", , , ,0.44,476.0 +8975.0,item out of stock,2019-10-10 09:59:14.000Z, ,"['883299']", , , ,0.28,449.0 +8976.0,pay order,2019-10-10 10:02:18.000Z, , ,"['990818']", , ,1.934,1828.98 +8977.0,place order,2019-10-10 10:06:33.000Z, ,"['883362','883363','883364']","['990836']", , ,1.81,2384.98 +8978.0,pick item,2019-10-10 10:33:36.000Z, ,"['883316']", , , ,1.37,2500.0 +8979.0,failed delivery,2019-10-10 10:39:51.000Z, , , ,"['660517']", ,3.133,4703.98 +8980.0,pick item,2019-10-10 10:40:49.000Z, ,"['883324']", , , ,0.483,495.0 +8981.0,item out of stock,2019-10-10 10:56:21.000Z, ,"['883307']", , , ,1.25,2200.0 +8982.0,reorder item,2019-10-10 10:58:54.000Z, ,"['883326']", , , ,1.28,149.99 +8983.0,payment reminder,2019-10-10 11:05:56.000Z, , ,"['990717']", , ,1.973,763.98 +8984.0,pick item,2019-10-10 11:16:35.000Z, ,"['883359']", , , ,0.78,99.99 +8985.0,confirm order,2019-10-10 11:27:28.000Z, , ,"['990833']", , ,3.0210000000000004,1927.97 +8986.0,place order,2019-10-10 11:32:54.000Z, ,"['883365','883369','883367','883368','883366','883370']","['990837']", , ,6.27,3174.95 +8987.0,confirm order,2019-10-10 11:42:57.000Z, , ,"['990821']", , ,1.808,2251.98 +8988.0,pick item,2019-10-10 11:48:42.000Z, ,"['883333']", , , ,0.88,89.99 +8989.0,pick item,2019-10-10 11:51:03.000Z, ,"['883364']", , , ,1.25,2200.0 +8990.0,create package,2019-10-10 11:51:03.000Z, ,"['883336','882821','883173','883285','883286','883288','883339','883167','883154','883337','883338']", ,"['660523']", ,7.575,5081.95 +8991.0,pick item,2019-10-10 12:02:11.000Z, ,"['883353']", , , ,1.25,2200.0 +8992.0,pick item,2019-10-10 12:37:24.000Z, ,"['883347']", , , ,0.495,129.0 +8993.0,failed delivery,2019-10-10 13:01:29.000Z, , , ,"['660512']", ,5.613,6796.97 +8994.0,send package,2019-10-10 13:05:01.000Z, , , ,"['660520']", ,5.26,4343.97 +8995.0,pick item,2019-10-10 13:08:05.000Z, ,"['883136']", , , ,1.28,149.99 +8996.0,pick item,2019-10-10 13:08:15.000Z, ,"['883227']", , , ,0.188,1149.0 +8997.0,pick item,2019-10-10 13:21:53.000Z, ,"['883348']", , , ,0.483,1099.0 +8998.0,place order,2019-10-10 13:25:35.000Z, ,"['883376','883373','883371','883375','883372','883374']","['990838']", , ,2.4,3343.99 +8999.0,confirm order,2019-10-10 13:31:05.000Z, , ,"['990835']", , ,3.987,1202.96 +9000.0,pick item,2019-10-10 13:33:19.000Z, ,"['883318']", , , ,0.172,699.0 +9001.0,pick item,2019-10-10 13:41:45.000Z, ,"['883258']", , , ,1.48,199.99 +9002.0,pick item,2019-10-10 13:47:28.000Z, ,"['883372']", , , ,0.28,449.0 +9003.0,pick item,2019-10-10 13:51:08.000Z, ,"['883371']", , , ,0.88,89.99 +9004.0,pick item,2019-10-10 13:57:40.000Z, ,"['883238']", , , ,0.38,29.99 +9005.0,pick item,2019-10-10 13:59:44.000Z, ,"['883352']", , , ,0.98,129.99 +9006.0,create package,2019-10-10 13:59:44.000Z, ,"['883279','883227','883262','883264','883277','883219','883265','882815','883278','883280']", ,"['660524']", ,6.402,3701.95 +9007.0,pick item,2019-10-10 14:02:37.000Z, ,"['883358']", , , ,0.88,89.99 +9008.0,send package,2019-10-10 14:07:54.000Z, , , ,"['660523']", ,7.575,5081.95 +9009.0,pick item,2019-10-10 14:20:29.000Z, ,"['883305']", , , ,0.2,39.99 +9010.0,pick item,2019-10-10 14:25:07.000Z, ,"['883363']", , , ,0.28,89.99 +9011.0,pick item,2019-10-10 14:26:20.000Z, ,"['883354']", , , ,1.37,2500.0 +9012.0,pick item,2019-10-10 14:28:27.000Z, ,"['883237']", , , ,0.38,29.99 +9013.0,failed delivery,2019-10-10 14:33:07.000Z, , , ,"['660518']", ,6.428999999999999,5137.94 +9014.0,reorder item,2019-10-10 14:37:20.000Z, ,"['883266']", , , ,0.188,1149.0 +9015.0,pick item,2019-10-10 14:59:58.000Z, ,"['883308']", , , ,1.48,199.99 +9016.0,package delivered,2019-10-10 15:06:02.000Z, , , ,"['660513']", ,2.784,4637.98 +9017.0,place order,2019-10-10 15:10:58.000Z, ,"['883377','883380','883379','883382','883383','883378','883381']","['990839']", , ,6.29,1323.94 +9018.0,reorder item,2019-10-10 15:13:24.000Z, ,"['883191']", , , ,0.483,1099.0 +9019.0,package delivered,2019-10-10 15:19:42.000Z, , , ,"['660515']", ,1.188,737.99 +9020.0,confirm order,2019-10-10 15:23:09.000Z, , ,"['990838']", , ,2.4,3343.99 +9021.0,reorder item,2019-10-10 15:25:27.000Z, ,"['883307']", , , ,1.25,2200.0 +9022.0,confirm order,2019-10-10 15:27:53.000Z, , ,"['990831']", , ,4.378,4835.97 +9023.0,confirm order,2019-10-10 15:30:33.000Z, , ,"['990837']", , ,6.27,3174.95 +9024.0,confirm order,2019-10-10 15:31:12.000Z, , ,"['990836']", , ,1.81,2384.98 +9025.0,reorder item,2019-10-10 15:37:20.000Z, ,"['883330']", , , ,0.166,799.0 +9026.0,pick item,2019-10-10 15:39:05.000Z, ,"['883368']", , , ,1.28,149.99 +9027.0,send package,2019-10-10 15:51:33.000Z, , , ,"['660521']", ,1.646,998.99 +9028.0,pick item,2019-10-10 16:35:28.000Z, ,"['883382']", , , ,0.38,29.99 +9029.0,pick item,2019-10-10 16:38:59.000Z, ,"['883199']", , , ,0.28,449.0 +9030.0,place order,2019-10-10 16:41:43.000Z, ,"['883385','883388','883386','883384','883387']","['990840']", , ,1.817,3130.99 +9031.0,pick item,2019-10-10 16:50:07.000Z, ,"['883158']", , , ,0.28,449.0 +9032.0,create package,2019-10-10 16:50:07.000Z, ,"['883243','883244','883246','883247']", ,"['660525']", ,2.503,4604.0 +9033.0,item out of stock,2019-10-10 17:02:52.000Z, ,"['883345']", , , ,0.98,129.99 +9034.0,pay order,2019-10-10 18:00:25.000Z, , ,"['990794']", , ,0.483,1104.0 +9035.0,pick item,2019-10-10 18:55:52.000Z, ,"['883374']", , , ,0.44,476.0 +9036.0,place order,2019-10-10 19:44:44.000Z, ,"['883390','883391','883389','883392']","['990841']", , ,4.51,2874.97 +9037.0,pick item,2019-10-10 19:44:50.000Z, ,"['883369']", , , ,0.38,29.99 +9038.0,package delivered,2019-10-10 20:26:08.000Z, , , ,"['660521']", ,1.646,998.99 +9039.0,place order,2019-10-11 04:46:18.000Z, ,"['883394','883393']","['990842']", , ,1.853,3000.0 +9040.0,pick item,2019-10-11 06:45:19.000Z, ,"['883389']", , , ,1.37,2500.0 +9041.0,package delivered,2019-10-11 06:45:48.000Z, , , ,"['660517']", ,3.133,4703.98 +9042.0,package delivered,2019-10-11 06:57:28.000Z, , , ,"['660520']", ,5.26,4343.97 +9043.0,pay order,2019-10-11 07:18:44.000Z, , ,"['990820']", , ,2.7060000000000004,4632.98 +9044.0,pick item,2019-10-11 07:29:34.000Z, ,"['883373']", , , ,0.44,476.0 +9045.0,create package,2019-10-11 07:29:34.000Z, ,"['883371','883333','883332','883374','883319','883372','883318','883373','883316','883335']", ,"['660526']", ,5.102,7076.98 +9046.0,item out of stock,2019-10-11 07:32:23.000Z, ,"['883378']", , , ,1.48,199.99 +9047.0,item out of stock,2019-10-11 07:33:45.000Z, ,"['883386']", , , ,0.172,699.0 +9048.0,pick item,2019-10-11 07:36:05.000Z, ,"['883380']", , , ,0.21,529.0 +9049.0,reorder item,2019-10-11 07:36:10.000Z, ,"['883378']", , , ,1.48,199.99 +9050.0,package delivered,2019-10-11 07:52:02.000Z, , , ,"['660518']", ,6.428999999999999,5137.94 +9051.0,send package,2019-10-11 08:01:32.000Z, , , ,"['660519']", ,3.3710000000000004,2004.97 +9052.0,send package,2019-10-11 08:05:11.000Z, , , ,"['660522']", ,6.347,4011.93 +9053.0,package delivered,2019-10-11 08:08:54.000Z, , , ,"['660512']", ,5.613,6796.97 +9054.0,pick item,2019-10-11 08:14:44.000Z, ,"['883166']", , , ,0.2,39.99 +9055.0,place order,2019-10-11 08:28:43.000Z, ,"['883397','883396','883395']","['990843']", , ,2.3,700.98 +9056.0,pick item,2019-10-11 08:29:44.000Z, ,"['883367']", , , ,1.48,199.99 +9057.0,pick item,2019-10-11 08:31:19.000Z, ,"['883366']", , , ,1.37,2500.0 +9058.0,reorder item,2019-10-11 08:36:01.000Z, ,"['883299']", , , ,0.28,449.0 +9059.0,pick item,2019-10-11 08:45:12.000Z, ,"['883379']", , , ,0.98,129.99 +9060.0,reorder item,2019-10-11 08:48:06.000Z, ,"['883260']", , , ,0.21,529.0 +9061.0,confirm order,2019-10-11 08:59:35.000Z, , ,"['990841']", , ,4.51,2874.97 +9062.0,pick item,2019-10-11 09:01:17.000Z, ,"['883212']", , , ,0.172,699.0 +9063.0,pick item,2019-10-11 09:07:55.000Z, ,"['883342']", , , ,0.188,1149.0 +9064.0,send package,2019-10-11 09:17:47.000Z, , , ,"['660526']", ,5.102,7076.98 +9065.0,pay order,2019-10-11 09:23:06.000Z, , ,"['990739']", , ,1.65,2954.0 +9066.0,confirm order,2019-10-11 09:39:25.000Z, , ,"['990842']", , ,1.853,3000.0 +9067.0,pay order,2019-10-11 09:43:13.000Z, , ,"['990817']", , ,3.833,1003.96 +9068.0,pay order,2019-10-11 09:53:52.000Z, , ,"['990837']", , ,6.27,3174.95 +9069.0,failed delivery,2019-10-11 09:59:21.000Z, , , ,"['660523']", ,7.575,5081.95 +9070.0,confirm order,2019-10-11 09:59:31.000Z, , ,"['990824']", , ,4.49,3053.98 +9071.0,pay order,2019-10-11 10:05:18.000Z, , ,"['990828']", , ,2.628,2704.99 +9072.0,item out of stock,2019-10-11 10:11:28.000Z, ,"['883328']", , , ,0.188,1149.0 +9073.0,place order,2019-10-11 10:17:14.000Z, ,"['883398','883399','883400']","['990844']", , ,2.232,953.98 +9074.0,pay order,2019-10-11 10:23:05.000Z, , ,"['990833']", , ,3.0210000000000004,1927.97 +9075.0,send package,2019-10-11 10:47:19.000Z, , , ,"['660525']", ,2.503,4604.0 +9076.0,send package,2019-10-11 10:49:32.000Z, , , ,"['660524']", ,6.402,3701.95 +9077.0,failed delivery,2019-10-11 10:51:10.000Z, , , ,"['660524']", ,6.402,3701.95 +9078.0,pick item,2019-10-11 10:57:11.000Z, ,"['883344']", , , ,0.21,529.0 +9079.0,confirm order,2019-10-11 11:05:06.000Z, , ,"['990839']", , ,6.29,1323.94 +9080.0,confirm order,2019-10-11 11:51:27.000Z, , ,"['990834']", , ,5.36,5124.97 +9081.0,place order,2019-10-11 11:54:15.000Z, ,"['883401','883402','883403']","['990845']", , ,2.013,2733.99 +9082.0,confirm order,2019-10-11 12:01:20.000Z, , ,"['990843']", , ,2.3,700.98 +9083.0,item out of stock,2019-10-11 12:09:26.000Z, ,"['883385']", , , ,0.172,699.0 +9084.0,pay order,2019-10-11 12:19:11.000Z, , ,"['990813']", , ,4.23,1003.96 +9085.0,pick item,2019-10-11 12:28:25.000Z, ,"['883317']", , , ,0.28,449.0 +9086.0,pay order,2019-10-11 12:30:26.000Z, , ,"['990835']", , ,3.987,1202.96 +9087.0,item out of stock,2019-10-11 12:39:38.000Z, ,"['883387']", , , ,0.21,529.0 +9088.0,package delivered,2019-10-11 13:13:13.000Z, , , ,"['660523']", ,7.575,5081.95 +9089.0,pick item,2019-10-11 13:26:20.000Z, ,"['883394']", , , ,1.37,2500.0 +9090.0,create package,2019-10-11 13:26:20.000Z, ,"['882792','883183']", ,"['660527']", ,0.966,1594.0 +9091.0,confirm order,2019-10-11 13:41:09.000Z, , ,"['990844']", , ,2.232,953.98 +9092.0,pick item,2019-10-11 13:41:12.000Z, ,"['883341']", , , ,0.78,99.99 +9093.0,confirm order,2019-10-11 13:54:23.000Z, , ,"['990840']", , ,1.817,3130.99 +9094.0,pick item,2019-10-11 14:05:20.000Z, ,"['883155']", , , ,0.483,495.0 +9095.0,create package,2019-10-11 14:05:20.000Z, ,"['883298','883354','883353','883394','883296','883322','883324','883355','883352','883297']", ,"['660528']", ,8.499,10011.97 +9096.0,place order,2019-10-11 14:08:17.000Z, ,"['883405','883406','883408','883404','883407','883409']","['990846']", , ,3.846,4488.98 +9097.0,pick item,2019-10-11 14:08:18.000Z, ,"['883365']", , , ,0.28,89.99 +9098.0,package delivered,2019-10-11 14:29:26.000Z, , , ,"['660522']", ,6.347,4011.93 +9099.0,pick item,2019-10-11 14:43:59.000Z, ,"['883381']", , , ,0.98,129.99 +9100.0,pick item,2019-10-11 14:44:24.000Z, ,"['883351']", , , ,0.28,89.99 +9101.0,item out of stock,2019-10-11 15:00:31.000Z, ,"['883399']", , , ,0.78,99.99 +9102.0,place order,2019-10-11 15:36:22.000Z, ,"['883411','883410','883412','883413']","['990847']", , ,3.315,4873.99 +9103.0,pick item,2019-10-11 15:54:19.000Z, ,"['883360']", , , ,0.172,699.0 +9104.0,pick item,2019-10-11 16:14:28.000Z, ,"['883300']", , , ,0.28,89.99 +9105.0,pick item,2019-10-11 16:27:47.000Z, ,"['883397']", , , ,0.44,476.0 +9106.0,package delivered,2019-10-11 16:55:30.000Z, , , ,"['660526']", ,5.102,7076.98 +9107.0,confirm order,2019-10-11 17:15:14.000Z, , ,"['990845']", , ,2.013,2733.99 +9108.0,place order,2019-10-11 17:32:31.000Z, ,"['883414','883415','883416','883418','883417']","['990848']", , ,3.138,2102.97 +9109.0,pick item,2019-10-11 19:39:27.000Z, ,"['883307']", , , ,1.25,2200.0 +9110.0,pay order,2019-10-11 19:56:51.000Z, , ,"['990819']", , ,3.395,939.98 +9111.0,place order,2019-10-11 20:44:37.000Z, ,"['883421','883420','883419']","['990849']", , ,3.04,803.98 +9112.0,create package,2019-10-11 23:00:00.000Z, ,"['883110','883107']", ,"['660529']", ,0.649,1898.0 +9113.0,place order,2019-10-12 17:27:36.000Z, ,"['883422','883423','883424']","['990850']", , ,0.8490000000000001,1942.99 +9114.0,payment reminder,2019-10-13 07:27:54.000Z, , ,"['990727']", , ,2.539,2297.98 +9115.0,payment reminder,2019-10-13 12:03:57.000Z, , ,"['990732']", , ,2.528,3972.99 +9116.0,payment reminder,2019-10-13 13:54:20.000Z, , ,"['990607']", , ,1.858,1322.99 +9117.0,payment reminder,2019-10-13 14:55:58.000Z, , ,"['990731']", , ,0.468,1603.0 +9118.0,place order,2019-10-13 17:43:00.000Z, ,"['883427','883425','883426']","['990851']", , ,1.051,1263.98 +9119.0,item out of stock,2019-10-14 06:24:12.000Z, ,"['883408']", , , ,1.28,149.99 +9120.0,pay order,2019-10-14 06:40:02.000Z, , ,"['990836']", , ,1.81,2384.98 +9121.0,place order,2019-10-14 07:25:41.000Z, ,"['883429','883428']","['990852']", , ,1.536,3304.0 +9122.0,reorder item,2019-10-14 07:30:11.000Z, ,"['883328']", , , ,0.188,1149.0 +9123.0,failed delivery,2019-10-14 07:36:01.000Z, , , ,"['660524']", ,6.402,3701.95 +9124.0,pick item,2019-10-14 07:44:16.000Z, ,"['883340']", , , ,0.44,476.0 +9125.0,pay order,2019-10-14 07:49:39.000Z, , ,"['990634']", , ,1.194,2508.98 +9126.0,pick item,2019-10-14 07:53:17.000Z, ,"['883410']", , , ,1.25,2200.0 +9127.0,pick item,2019-10-14 08:16:26.000Z, ,"['883416']", , , ,0.28,89.99 +9128.0,send package,2019-10-14 08:50:53.000Z, , , ,"['660527']", ,0.966,1594.0 +9129.0,confirm order,2019-10-14 08:57:50.000Z, , ,"['990846']", , ,3.846,4488.98 +9130.0,reorder item,2019-10-14 09:02:38.000Z, ,"['883386']", , , ,0.172,699.0 +9131.0,failed delivery,2019-10-14 09:03:42.000Z, , , ,"['660519']", ,3.3710000000000004,2004.97 +9132.0,confirm order,2019-10-14 09:10:08.000Z, , ,"['990851']", , ,1.051,1263.98 +9133.0,place order,2019-10-14 09:11:09.000Z, ,"['883436','883434','883430','883431','883433','883432','883435']","['990853']", , ,6.83,3620.95 +9134.0,pick item,2019-10-14 09:55:19.000Z, ,"['883214']", , , ,0.78,99.99 +9135.0,pick item,2019-10-14 09:56:40.000Z, ,"['883391']", , , ,0.98,129.99 +9136.0,create package,2019-10-14 09:56:40.000Z, ,"['883256','883258','883259','883257','883255']", ,"['660530']", ,4.23,998.96 +9137.0,pick item,2019-10-14 09:57:37.000Z, ,"['883414']", , , ,0.98,129.99 +9138.0,pick item,2019-10-14 09:59:09.000Z, ,"['883124']", , , ,0.38,29.99 +9139.0,pick item,2019-10-14 10:01:52.000Z, ,"['883315']", , , ,0.495,129.0 +9140.0,confirm order,2019-10-14 10:03:56.000Z, , ,"['990850']", , ,0.8490000000000001,1942.99 +9141.0,send package,2019-10-14 10:05:10.000Z, , , ,"['660528']", ,8.499,10011.97 +9142.0,item out of stock,2019-10-14 10:14:05.000Z, ,"['883396']", , , ,0.88,89.99 +9143.0,confirm order,2019-10-14 10:15:11.000Z, , ,"['990848']", , ,3.138,2102.97 +9144.0,place order,2019-10-14 10:42:06.000Z, ,"['883438','883437']","['990854']", , ,1.86,224.98 +9145.0,pick item,2019-10-14 10:53:55.000Z, ,"['883207']", , , ,0.166,799.0 +9146.0,send package,2019-10-14 10:54:27.000Z, , , ,"['660529']", ,0.649,1898.0 +9147.0,package delivered,2019-10-14 10:54:49.000Z, , , ,"['660527']", ,0.966,1594.0 +9148.0,item out of stock,2019-10-14 10:55:50.000Z, ,"['883400']", , , ,0.172,699.0 +9149.0,pay order,2019-10-14 10:59:23.000Z, , ,"['990830']", , ,2.628,1842.98 +9150.0,pick item,2019-10-14 11:02:40.000Z, ,"['883350']", , , ,0.2,39.99 +9151.0,create package,2019-10-14 11:02:40.000Z, ,"['883344','883214','883136','883331','883212','883343','883305','883124']", ,"['660531']", ,4.755,4846.96 +9152.0,pick item,2019-10-14 11:12:36.000Z, ,"['883418']", , , ,1.48,199.99 +9153.0,failed delivery,2019-10-14 11:35:06.000Z, , , ,"['660525']", ,2.503,4604.0 +9154.0,package delivered,2019-10-14 11:49:40.000Z, , , ,"['660524']", ,6.402,3701.95 +9155.0,pick item,2019-10-14 12:22:10.000Z, ,"['883135']", , , ,1.25,2200.0 +9156.0,confirm order,2019-10-14 12:23:34.000Z, , ,"['990852']", , ,1.536,3304.0 +9157.0,pick item,2019-10-14 12:30:22.000Z, ,"['883362']", , , ,0.28,89.99 +9158.0,pick item,2019-10-14 12:31:28.000Z, ,"['883411']", , , ,0.495,129.0 +9159.0,payment reminder,2019-10-14 12:32:44.000Z, , ,"['990740']", , ,3.835,4204.99 +9160.0,place order,2019-10-14 12:43:59.000Z, ,"['883439','883441','883440']","['990855']", , ,2.41,2334.98 +9161.0,failed delivery,2019-10-14 12:53:36.000Z, , , ,"['660525']", ,2.503,4604.0 +9162.0,pick item,2019-10-14 13:01:27.000Z, ,"['883436']", , , ,1.48,199.99 +9163.0,pick item,2019-10-14 13:03:37.000Z, ,"['883064']", , , ,0.28,89.99 +9164.0,payment reminder,2019-10-14 13:04:31.000Z, , ,"['990741']", , ,1.22,580.99 +9165.0,reorder item,2019-10-14 13:05:09.000Z, ,"['883396']", , , ,0.88,89.99 +9166.0,confirm order,2019-10-14 13:10:49.000Z, , ,"['990847']", , ,3.315,4873.99 +9167.0,pay order,2019-10-14 13:26:31.000Z, , ,"['990841']", , ,4.51,2874.97 +9168.0,pick item,2019-10-14 13:31:14.000Z, ,"['883270']", , , ,0.38,29.99 +9169.0,pick item,2019-10-14 13:51:46.000Z, ,"['883426']", , , ,0.483,79.99 +9170.0,create package,2019-10-14 13:51:46.000Z, ,"['883300','883362','883268','883207','883363','883364']", ,"['660532']", ,2.739,3763.97 +9171.0,pick item,2019-10-14 14:01:08.000Z, ,"['883435']", , , ,1.28,149.99 +9172.0,payment reminder,2019-10-14 14:08:20.000Z, , ,"['990601']", , ,2.998,3952.99 +9173.0,pay order,2019-10-14 14:10:18.000Z, , ,"['990834']", , ,5.36,5124.97 +9174.0,pay order,2019-10-14 14:26:56.000Z, , ,"['990770']", , ,1.939,1957.98 +9175.0,pick item,2019-10-14 14:30:03.000Z, ,"['883334']", , , ,1.28,149.99 +9176.0,package delivered,2019-10-14 14:35:52.000Z, , , ,"['660525']", ,2.503,4604.0 +9177.0,payment reminder,2019-10-14 14:40:50.000Z, , ,"['990734']", , ,2.96,404.98 +9178.0,place order,2019-10-14 14:47:46.000Z, ,"['883443','883446','883442','883445','883444']","['990856']", , ,2.132,1023.96 +9179.0,pick item,2019-10-14 14:48:10.000Z, ,"['883370']", , , ,1.48,199.99 +9180.0,pick item,2019-10-14 14:49:27.000Z, ,"['883441']", , , ,0.38,29.99 +9181.0,pay order,2019-10-14 15:11:24.000Z, , ,"['990843']", , ,2.3,700.98 +9182.0,confirm order,2019-10-14 15:15:18.000Z, , ,"['990849']", , ,3.04,803.98 +9183.0,pick item,2019-10-14 15:20:10.000Z, ,"['883429']", , , ,0.166,799.0 +9184.0,pick item,2019-10-14 15:24:37.000Z, ,"['883384']", , , ,0.78,99.99 +9185.0,create package,2019-10-14 15:24:37.000Z, ,"['883360','883391','883064','883359','883358','883361','883389']", ,"['660533']", ,5.742000000000001,3758.95 +9186.0,item out of stock,2019-10-14 15:27:52.000Z, ,"['883395']", , , ,0.98,129.99 +9187.0,pick item,2019-10-14 15:38:21.000Z, ,"['883419']", , , ,1.48,199.99 +9188.0,pick item,2019-10-14 15:47:19.000Z, ,"['883326']", , , ,1.28,149.99 +9189.0,package delivered,2019-10-14 15:49:52.000Z, , , ,"['660528']", ,8.499,10011.97 +9190.0,pick item,2019-10-14 15:54:16.000Z, ,"['883421']", , , ,0.28,449.0 +9191.0,pick item,2019-10-14 16:06:36.000Z, ,"['883383']", , , ,0.78,99.99 +9192.0,pick item,2019-10-14 16:10:45.000Z, ,"['883197']", , , ,0.88,89.99 +9193.0,reorder item,2019-10-14 16:20:09.000Z, ,"['883356']", , , ,0.495,129.0 +9194.0,pick item,2019-10-14 16:35:38.000Z, ,"['883392']", , , ,0.88,89.99 +9195.0,place order,2019-10-14 16:55:19.000Z, ,"['883449','883447','883448']","['990857']", , ,0.865,2332.0 +9196.0,pick item,2019-10-14 17:08:49.000Z, ,"['883437']", , , ,0.98,129.99 +9197.0,create package,2019-10-14 17:08:49.000Z, ,"['883348','883158','883347','883350','883155','883270','883346']", ,"['660534']", ,2.701,2271.97 +9198.0,send package,2019-10-14 17:15:19.000Z, , , ,"['660533']", ,5.742000000000001,3758.95 +9199.0,place order,2019-10-14 20:25:32.000Z, ,"['883450','883451','883452']","['990858']", , ,1.15,912.99 +9200.0,pick item,2019-10-15 06:16:48.000Z, ,"['883434']", , , ,1.37,2500.0 +9201.0,package delivered,2019-10-15 06:35:11.000Z, , , ,"['660533']", ,5.742000000000001,3758.95 +9202.0,place order,2019-10-15 06:42:39.000Z, ,"['883453','883455','883454']","['990859']", , ,3.74,484.97 +9203.0,pick item,2019-10-15 06:49:46.000Z, ,"['883413']", , , ,0.2,39.99 +9204.0,pay order,2019-10-15 06:56:41.000Z, , ,"['990793']", , ,2.259,5347.0 +9205.0,confirm order,2019-10-15 07:09:10.000Z, , ,"['990857']", , ,0.865,2332.0 +9206.0,pick item,2019-10-15 07:17:51.000Z, ,"['883417']", , , ,0.188,1149.0 +9207.0,pick item,2019-10-15 07:32:09.000Z, ,"['883438']", , , ,0.88,89.99 +9208.0,package delivered,2019-10-15 08:01:18.000Z, , , ,"['660519']", ,3.3710000000000004,2004.97 +9209.0,pick item,2019-10-15 08:06:39.000Z, ,"['883430']", , , ,0.44,476.0 +9210.0,pick item,2019-10-15 08:27:13.000Z, ,"['883375']", , , ,0.188,1149.0 +9211.0,send package,2019-10-15 08:36:46.000Z, , , ,"['660530']", ,4.23,998.96 +9212.0,send package,2019-10-15 08:37:16.000Z, , , ,"['660531']", ,4.755,4846.96 +9213.0,place order,2019-10-15 08:53:45.000Z, ,"['883456','883460','883457','883458','883459']","['990860']", , ,3.156,5822.99 +9214.0,pay order,2019-10-15 08:55:13.000Z, , ,"['990732']", , ,2.528,3972.99 +9215.0,confirm order,2019-10-15 09:09:39.000Z, , ,"['990858']", , ,1.15,912.99 +9216.0,reorder item,2019-10-15 09:15:23.000Z, ,"['883408']", , , ,1.28,149.99 +9217.0,confirm order,2019-10-15 09:26:45.000Z, , ,"['990859']", , ,3.74,484.97 +9218.0,pick item,2019-10-15 09:28:31.000Z, ,"['883440']", , , ,1.25,2200.0 +9219.0,create package,2019-10-15 09:28:31.000Z, ,"['883429','883384','883329','883325','883326']", ,"['660535']", ,2.946,1973.98 +9220.0,confirm order,2019-10-15 09:30:36.000Z, , ,"['990856']", , ,2.132,1023.96 +9221.0,pick item,2019-10-15 09:31:01.000Z, ,"['883153']", , , ,0.28,89.99 +9222.0,pick item,2019-10-15 09:34:39.000Z, ,"['883180']", , , ,0.483,495.0 +9223.0,pick item,2019-10-15 09:36:31.000Z, ,"['883266']", , , ,0.188,1149.0 +9224.0,pick item,2019-10-15 09:53:47.000Z, ,"['883455']", , , ,1.28,149.99 +9225.0,pick item,2019-10-15 09:55:59.000Z, ,"['883376']", , , ,0.172,699.0 +9226.0,create package,2019-10-15 09:55:59.000Z, ,"['883199','883237','883238']", ,"['660536']", ,1.04,508.98 +9227.0,pay order,2019-10-15 10:03:31.000Z, , ,"['990838']", , ,2.4,3343.99 +9228.0,pick item,2019-10-15 10:03:56.000Z, ,"['883393']", , , ,0.483,495.0 +9229.0,send package,2019-10-15 10:07:19.000Z, , , ,"['660534']", ,2.701,2271.97 +9230.0,pick item,2019-10-15 10:10:56.000Z, ,"['883403']", , , ,0.483,79.99 +9231.0,pick item,2019-10-15 10:11:29.000Z, ,"['883388']", , , ,0.483,1099.0 +9232.0,create package,2019-10-15 10:11:29.000Z, ,"['883436','883434','883430','883307','883308','883435']", ,"['660537']", ,7.3,5725.97 +9233.0,confirm order,2019-10-15 10:20:51.000Z, , ,"['990853']", , ,6.83,3620.95 +9234.0,package delivered,2019-10-15 10:36:48.000Z, , , ,"['660531']", ,4.755,4846.96 +9235.0,pick item,2019-10-15 10:46:13.000Z, ,"['883456']", , , ,0.166,799.0 +9236.0,pick item,2019-10-15 11:04:23.000Z, ,"['883312']", , , ,0.88,89.99 +9237.0,place order,2019-10-15 11:07:18.000Z, ,"['883462','883463','883461']","['990861']", , ,1.802,2933.99 +9238.0,send package,2019-10-15 11:23:02.000Z, , , ,"['660537']", ,7.3,5725.97 +9239.0,pay order,2019-10-15 11:37:51.000Z, , ,"['990839']", , ,6.29,1323.94 +9240.0,pick item,2019-10-15 11:47:02.000Z, ,"['883445']", , , ,0.2,39.99 +9241.0,pick item,2019-10-15 11:47:25.000Z, ,"['883450']", , , ,0.495,129.0 +9242.0,pick item,2019-10-15 11:53:04.000Z, ,"['883423']", , , ,0.2,39.99 +9243.0,send package,2019-10-15 12:21:35.000Z, , , ,"['660532']", ,2.739,3763.97 +9244.0,pick item,2019-10-15 12:28:21.000Z, ,"['883462']", , , ,0.172,699.0 +9245.0,create package,2019-10-15 12:28:21.000Z, ,"['883342','883369','883365','883153','883367','883366','883166','883368','883437','883341','883340','883370','883438']", ,"['660538']", ,10.018,5244.9 +9246.0,package delivered,2019-10-15 12:29:22.000Z, , , ,"['660529']", ,0.649,1898.0 +9247.0,pay order,2019-10-15 12:30:00.000Z, , ,"['990731']", , ,0.468,1603.0 +9248.0,place order,2019-10-15 12:34:23.000Z, ,"['883464','883465','883467','883466']","['990862']", , ,2.506,1093.97 +9249.0,reorder item,2019-10-15 12:47:50.000Z, ,"['883345']", , , ,0.98,129.99 +9250.0,item out of stock,2019-10-15 13:02:37.000Z, ,"['883349']", , , ,0.483,495.0 +9251.0,reorder item,2019-10-15 13:03:02.000Z, ,"['883399']", , , ,0.78,99.99 +9252.0,pick item,2019-10-15 13:03:29.000Z, ,"['883390']", , , ,1.28,149.99 +9253.0,send package,2019-10-15 13:11:02.000Z, , , ,"['660536']", ,1.04,508.98 +9254.0,confirm order,2019-10-15 13:15:29.000Z, , ,"['990860']", , ,3.156,5822.99 +9255.0,pick item,2019-10-15 13:27:16.000Z, ,"['883401']", , , ,0.28,449.0 +9256.0,confirm order,2019-10-15 13:27:32.000Z, , ,"['990854']", , ,1.86,224.98 +9257.0,failed delivery,2019-10-15 13:45:29.000Z, , , ,"['660530']", ,4.23,998.96 +9258.0,pay order,2019-10-15 13:47:31.000Z, , ,"['990741']", , ,1.22,580.99 +9259.0,failed delivery,2019-10-15 13:53:27.000Z, , , ,"['660530']", ,4.23,998.96 +9260.0,item out of stock,2019-10-15 14:04:50.000Z, ,"['883467']", , , ,0.38,29.99 +9261.0,package delivered,2019-10-15 14:05:54.000Z, , , ,"['660537']", ,7.3,5725.97 +9262.0,reorder item,2019-10-15 14:10:47.000Z, ,"['883349']", , , ,0.483,495.0 +9263.0,reorder item,2019-10-15 14:12:35.000Z, ,"['883395']", , , ,0.98,129.99 +9264.0,package delivered,2019-10-15 14:14:38.000Z, , , ,"['660534']", ,2.701,2271.97 +9265.0,item out of stock,2019-10-15 14:16:55.000Z, ,"['883463']", , , ,1.25,2200.0 +9266.0,pick item,2019-10-15 14:17:54.000Z, ,"['883433']", , , ,0.78,99.99 +9267.0,pick item,2019-10-15 14:27:56.000Z, ,"['883420']", , , ,1.28,149.99 +9268.0,place order,2019-10-15 14:28:34.000Z, ,"['883468','883469']","['990863']", , ,0.65,1010.0 +9269.0,package delivered,2019-10-15 14:29:10.000Z, , , ,"['660536']", ,1.04,508.98 +9270.0,pick item,2019-10-15 14:29:54.000Z, ,"['883464']", , , ,0.98,129.99 +9271.0,pay order,2019-10-15 14:34:09.000Z, , ,"['990805']", , ,2.543,1353.98 +9272.0,pick item,2019-10-15 14:42:27.000Z, ,"['882996']", , , ,0.44,476.0 +9273.0,reorder item,2019-10-15 14:43:39.000Z, ,"['883463']", , , ,1.25,2200.0 +9274.0,pay order,2019-10-15 14:50:53.000Z, , ,"['990842']", , ,1.853,3000.0 +9275.0,package delivered,2019-10-15 15:03:19.000Z, , , ,"['660532']", ,2.739,3763.97 +9276.0,pick item,2019-10-15 15:30:13.000Z, ,"['883448']", , , ,0.483,1099.0 +9277.0,pick item,2019-10-15 15:31:28.000Z, ,"['883432']", , , ,0.2,39.99 +9278.0,pick item,2019-10-15 15:34:44.000Z, ,"['883446']", , , ,1.28,149.99 +9279.0,pick item,2019-10-15 15:38:46.000Z, ,"['883466']", , , ,0.166,799.0 +9280.0,confirm order,2019-10-15 15:53:37.000Z, , ,"['990862']", , ,2.506,1093.97 +9281.0,item out of stock,2019-10-15 16:10:00.000Z, ,"['883357']", , , ,0.38,29.99 +9282.0,pick item,2019-10-15 16:13:40.000Z, ,"['883458']", , , ,1.25,2200.0 +9283.0,place order,2019-10-15 16:16:55.000Z, ,"['883472','883470','883471']","['990864']", , ,1.386,1379.99 +9284.0,pick item,2019-10-15 16:22:54.000Z, ,"['883465']", , , ,0.98,129.99 +9285.0,pick item,2019-10-15 16:23:46.000Z, ,"['883459']", , , ,1.25,2200.0 +9286.0,create package,2019-10-15 16:23:46.000Z, ,"['883380','883381','883379','883382','883401','883383','883403']", ,"['660539']", ,4.093,1447.95 +9287.0,send package,2019-10-15 16:26:59.000Z, , , ,"['660535']", ,2.946,1973.98 +9288.0,pick item,2019-10-15 16:28:35.000Z, ,"['883404']", , , ,1.37,2500.0 +9289.0,send package,2019-10-15 16:47:16.000Z, , , ,"['660539']", ,4.093,1447.95 +9290.0,place order,2019-10-15 18:30:20.000Z, ,"['883473','883474','883475','883479','883480','883477','883476','883478']","['990865']", , ,5.524,7749.98 +9291.0,pick item,2019-10-15 20:04:31.000Z, ,"['883349']", , , ,0.483,495.0 +9292.0,pay order,2019-10-15 20:05:32.000Z, , ,"['990849']", , ,3.04,803.98 +9293.0,place order,2019-10-15 22:19:54.000Z, ,"['883481','883482','883483']","['990866']", , ,3.145,2783.99 +9294.0,pick item,2019-10-16 06:44:48.000Z, ,"['883425']", , , ,0.38,29.99 +9295.0,pick item,2019-10-16 07:21:20.000Z, ,"['883468']", , , ,0.21,529.0 +9296.0,failed delivery,2019-10-16 07:22:42.000Z, , , ,"['660535']", ,2.946,1973.98 +9297.0,place order,2019-10-16 07:23:41.000Z, ,"['883487','883485','883484','883486']","['990867']", , ,2.225,2463.98 +9298.0,pick item,2019-10-16 07:33:06.000Z, ,"['883405']", , , ,0.166,799.0 +9299.0,pick item,2019-10-16 07:42:55.000Z, ,"['883204']", , , ,0.483,1099.0 +9300.0,pick item,2019-10-16 07:47:51.000Z, ,"['883482']", , , ,1.37,2500.0 +9301.0,create package,2019-10-16 07:47:51.000Z, ,"['883376','883317','883315','883334','883375']", ,"['660540']", ,2.415,2575.99 +9302.0,package delivered,2019-10-16 07:48:19.000Z, , , ,"['660539']", ,4.093,1447.95 +9303.0,confirm order,2019-10-16 07:49:21.000Z, , ,"['990866']", , ,3.145,2783.99 +9304.0,pick item,2019-10-16 07:54:14.000Z, ,"['883428']", , , ,1.37,2500.0 +9305.0,pay order,2019-10-16 08:22:27.000Z, , ,"['990787']", , ,3.778,2381.96 +9306.0,pay order,2019-10-16 08:33:01.000Z, , ,"['990852']", , ,1.536,3304.0 +9307.0,item out of stock,2019-10-16 08:35:33.000Z, ,"['883409']", , , ,0.21,529.0 +9308.0,confirm order,2019-10-16 08:37:45.000Z, , ,"['990864']", , ,1.386,1379.99 +9309.0,pick item,2019-10-16 08:38:41.000Z, ,"['883422']", , , ,0.166,799.0 +9310.0,send package,2019-10-16 08:43:39.000Z, , , ,"['660538']", ,10.018,5244.9 +9311.0,package delivered,2019-10-16 08:49:49.000Z, , , ,"['660535']", ,2.946,1973.98 +9312.0,place order,2019-10-16 09:07:09.000Z, ,"['883489','883488','883490']","['990868']", , ,1.5730000000000002,1118.99 +9313.0,pick item,2019-10-16 09:09:37.000Z, ,"['883474']", , , ,1.25,2200.0 +9314.0,pick item,2019-10-16 09:20:43.000Z, ,"['883398']", , , ,1.28,149.99 +9315.0,pay order,2019-10-16 09:21:26.000Z, , ,"['990825']", , ,2.34,354.96 +9316.0,pick item,2019-10-16 09:54:21.000Z, ,"['883470']", , , ,0.44,476.0 +9317.0,create package,2019-10-16 09:54:21.000Z, ,"['883446','883482','883440','883393','883441','883351','883445']", ,"['660541']", ,5.242999999999999,5504.96 +9318.0,place order,2019-10-16 10:34:06.000Z, ,"['883493','883492','883494','883491','883495']","['990869']", , ,1.642,1450.99 +9319.0,pick item,2019-10-16 10:35:17.000Z, ,"['882926']", , , ,0.483,1099.0 +9320.0,item out of stock,2019-10-16 10:48:00.000Z, ,"['883481']", , , ,0.495,129.0 +9321.0,pick item,2019-10-16 10:54:05.000Z, ,"['883449']", , , ,0.172,699.0 +9322.0,send package,2019-10-16 11:02:40.000Z, , , ,"['660540']", ,2.415,2575.99 +9323.0,pick item,2019-10-16 11:30:37.000Z, ,"['883478']", , , ,0.483,1099.0 +9324.0,pick item,2019-10-16 11:35:57.000Z, ,"['883471']", , , ,0.166,799.0 +9325.0,pick item,2019-10-16 11:41:39.000Z, ,"['883427']", , , ,0.188,1149.0 +9326.0,pay order,2019-10-16 12:00:26.000Z, , ,"['990847']", , ,3.315,4873.99 +9327.0,pay order,2019-10-16 12:24:33.000Z, , ,"['990848']", , ,3.138,2102.97 +9328.0,place order,2019-10-16 12:27:59.000Z, ,"['883497','883496']","['990870']", , ,1.49,683.99 +9329.0,pick item,2019-10-16 12:32:37.000Z, ,"['883452']", , , ,0.172,699.0 +9330.0,reorder item,2019-10-16 12:43:37.000Z, ,"['883320']", , , ,0.172,699.0 +9331.0,pick item,2019-10-16 12:45:40.000Z, ,"['883477']", , , ,0.172,699.0 +9332.0,create package,2019-10-16 12:45:40.000Z, ,"['883397','883411','883410','883413']", ,"['660542']", ,2.385,2844.99 +9333.0,pick item,2019-10-16 12:47:33.000Z, ,"['883483']", , , ,1.28,149.99 +9334.0,package delivered,2019-10-16 12:56:52.000Z, , , ,"['660530']", ,4.23,998.96 +9335.0,pick item,2019-10-16 12:58:52.000Z, ,"['883496']", , , ,1.28,149.99 +9336.0,pick item,2019-10-16 12:59:17.000Z, ,"['883487']", , , ,1.25,2200.0 +9337.0,pay order,2019-10-16 13:04:17.000Z, , ,"['990851']", , ,1.051,1263.98 +9338.0,pick item,2019-10-16 13:06:47.000Z, ,"['883495']", , , ,0.172,699.0 +9339.0,create package,2019-10-16 13:06:47.000Z, ,"['883427','883421','883425','883420','883419','883414','883426','883416','883418','883417']", ,"['660543']", ,7.019,3626.93 +9340.0,pick item,2019-10-16 13:16:41.000Z, ,"['883424']", , , ,0.483,1099.0 +9341.0,send package,2019-10-16 13:19:37.000Z, , , ,"['660543']", ,7.019,3626.93 +9342.0,reorder item,2019-10-16 13:19:43.000Z, ,"['883385']", , , ,0.172,699.0 +9343.0,pick item,2019-10-16 13:34:12.000Z, ,"['883460']", , , ,0.21,529.0 +9344.0,confirm order,2019-10-16 13:48:53.000Z, , ,"['990870']", , ,1.49,683.99 +9345.0,place order,2019-10-16 14:15:45.000Z, ,"['883498','883499']","['990871']", , ,1.646,1003.99 +9346.0,reorder item,2019-10-16 14:18:38.000Z, ,"['883357']", , , ,0.38,29.99 +9347.0,confirm order,2019-10-16 14:19:43.000Z, , ,"['990863']", , ,0.65,1010.0 +9348.0,reorder item,2019-10-16 14:44:20.000Z, ,"['883387']", , , ,0.21,529.0 +9349.0,item out of stock,2019-10-16 14:45:23.000Z, ,"['883453']", , , ,0.98,129.99 +9350.0,pay order,2019-10-16 15:19:36.000Z, , ,"['990821']", , ,1.808,2251.98 +9351.0,confirm order,2019-10-16 15:22:33.000Z, , ,"['990867']", , ,2.225,2463.98 +9352.0,place order,2019-10-16 15:51:18.000Z, ,"['883500','883501']","['990872']", , ,0.655,1803.0 +9353.0,confirm order,2019-10-16 15:54:32.000Z, , ,"['990871']", , ,1.646,1003.99 +9354.0,confirm order,2019-10-16 16:10:20.000Z, , ,"['990869']", , ,1.642,1450.99 +9355.0,item out of stock,2019-10-16 16:17:50.000Z, ,"['883493']", , , ,0.495,129.0 +9356.0,pick item,2019-10-16 16:32:18.000Z, ,"['883330']", , , ,0.166,799.0 +9357.0,send package,2019-10-16 16:43:25.000Z, , , ,"['660541']", ,5.242999999999999,5504.96 +9358.0,reorder item,2019-10-16 17:23:46.000Z, ,"['883481']", , , ,0.495,129.0 +9359.0,pay order,2019-10-16 17:37:34.000Z, , ,"['990845']", , ,2.013,2733.99 +9360.0,place order,2019-10-16 18:13:29.000Z, ,"['883502']","['990873']", , ,0.28,94.99 +9361.0,item out of stock,2019-10-16 19:19:54.000Z, ,"['883412']", , , ,1.37,2500.0 +9362.0,reorder item,2019-10-16 19:43:32.000Z, ,"['883400']", , , ,0.172,699.0 +9363.0,place order,2019-10-16 21:06:32.000Z, ,"['883506','883504','883507','883505','883503']","['990874']", , ,1.826,1897.98 +9364.0,create package,2019-10-16 23:00:00.000Z, ,"['883468','883330','883135']", ,"['660544']", ,1.626,3528.0 +9365.0,reorder item,2019-10-17 06:24:31.000Z, ,"['883467']", , , ,0.38,29.99 +9366.0,package delivered,2019-10-17 06:37:19.000Z, , , ,"['660540']", ,2.415,2575.99 +9367.0,place order,2019-10-17 06:59:26.000Z, ,"['883509','883510','883508','883511']","['990875']", , ,2.363,1522.98 +9368.0,confirm order,2019-10-17 06:59:55.000Z, , ,"['990861']", , ,1.802,2933.99 +9369.0,package delivered,2019-10-17 07:27:02.000Z, , , ,"['660538']", ,10.018,5244.9 +9370.0,pick item,2019-10-17 07:36:08.000Z, ,"['883431']", , , ,1.28,149.99 +9371.0,confirm order,2019-10-17 08:02:34.000Z, , ,"['990865']", , ,5.524,7749.98 +9372.0,pick item,2019-10-17 08:06:01.000Z, ,"['883497']", , , ,0.21,529.0 +9373.0,pick item,2019-10-17 08:20:11.000Z, ,"['883485']", , , ,0.2,39.99 +9374.0,send package,2019-10-17 08:24:41.000Z, , , ,"['660544']", ,1.626,3528.0 +9375.0,pick item,2019-10-17 08:28:48.000Z, ,"['883494']", , , ,0.28,449.0 +9376.0,pick item,2019-10-17 08:42:46.000Z, ,"['883499']", , , ,0.166,799.0 +9377.0,pay order,2019-10-17 08:47:50.000Z, , ,"['990727']", , ,2.539,2297.98 +9378.0,package delivered,2019-10-17 08:50:04.000Z, , , ,"['660543']", ,7.019,3626.93 +9379.0,pick item,2019-10-17 08:54:24.000Z, ,"['882895']", , , ,1.48,199.99 +9380.0,pick item,2019-10-17 09:01:08.000Z, ,"['883444']", , , ,0.2,39.99 +9381.0,confirm order,2019-10-17 09:05:26.000Z, , ,"['990855']", , ,2.41,2334.98 +9382.0,place order,2019-10-17 09:18:56.000Z, ,"['883514','883512','883515','883513']","['990876']", , ,2.748,4312.99 +9383.0,pay order,2019-10-17 09:25:47.000Z, , ,"['990846']", , ,3.846,4488.98 +9384.0,pay order,2019-10-17 09:30:18.000Z, , ,"['990808']", , ,0.5479999999999999,2032.0 +9385.0,reorder item,2019-10-17 09:36:02.000Z, ,"['883453']", , , ,0.98,129.99 +9386.0,item out of stock,2019-10-17 10:08:26.000Z, ,"['883457']", , , ,0.28,89.99 +9387.0,pay order,2019-10-17 10:18:56.000Z, , ,"['990569']", , ,3.333,2784.98 +9388.0,pick item,2019-10-17 10:22:44.000Z, ,"['883442']", , , ,0.28,89.99 +9389.0,pick item,2019-10-17 10:23:23.000Z, ,"['883216']", , , ,1.37,2500.0 +9390.0,pay order,2019-10-17 10:23:28.000Z, , ,"['990816']", , ,3.233,4289.97 +9391.0,pick item,2019-10-17 10:38:15.000Z, ,"['883508']", , , ,0.188,1149.0 +9392.0,create package,2019-10-17 10:38:15.000Z, ,"['883204','883197','883455']", ,"['660545']", ,2.643,1338.98 +9393.0,confirm order,2019-10-17 10:41:50.000Z, , ,"['990875']", , ,2.363,1522.98 +9394.0,pick item,2019-10-17 10:55:08.000Z, ,"['883377']", , , ,1.48,199.99 +9395.0,item out of stock,2019-10-17 10:55:18.000Z, ,"['883415']", , , ,0.21,529.0 +9396.0,pick item,2019-10-17 10:56:17.000Z, ,"['883400']", , , ,0.172,699.0 +9397.0,place order,2019-10-17 10:57:39.000Z, ,"['883516']","['990877']", , ,0.88,94.99 +9398.0,pay order,2019-10-17 11:09:50.000Z, , ,"['990862']", , ,2.506,1093.97 +9399.0,reorder item,2019-10-17 11:20:37.000Z, ,"['883457']", , , ,0.28,89.99 +9400.0,confirm order,2019-10-17 11:23:30.000Z, , ,"['990876']", , ,2.748,4312.99 +9401.0,item out of stock,2019-10-17 11:31:13.000Z, ,"['883472']", , , ,0.78,99.99 +9402.0,pay order,2019-10-17 11:53:51.000Z, , ,"['990734']", , ,2.96,404.98 +9403.0,pick item,2019-10-17 11:57:56.000Z, ,"['882972']", , , ,1.28,149.99 +9404.0,create package,2019-10-17 11:57:56.000Z, ,"['883390','883462','882996','883392']", ,"['660546']", ,2.772,1414.98 +9405.0,confirm order,2019-10-17 12:19:49.000Z, , ,"['990873']", , ,0.28,94.99 +9406.0,pick item,2019-10-17 12:33:24.000Z, ,"['883501']", , , ,0.172,699.0 +9407.0,pick item,2019-10-17 12:37:08.000Z, ,"['883479']", , , ,0.483,1099.0 +9408.0,pick item,2019-10-17 12:44:40.000Z, ,"['883486']", , , ,0.495,129.0 +9409.0,reorder item,2019-10-17 12:54:27.000Z, ,"['883493']", , , ,0.495,129.0 +9410.0,reorder item,2019-10-17 13:10:36.000Z, ,"['883415']", , , ,0.21,529.0 +9411.0,place order,2019-10-17 13:15:06.000Z, ,"['883524','883522','883526','883527','883517','883523','883518','883520','883519','883521','883525']","['990878']", , ,6.772,4850.95 +9412.0,pay order,2019-10-17 13:18:23.000Z, , ,"['990863']", , ,0.65,1010.0 +9413.0,pick item,2019-10-17 13:40:38.000Z, ,"['883469']", , , ,0.44,476.0 +9414.0,create package,2019-10-17 13:40:38.000Z, ,"['883487','883486','883450','883485','883180','883452','882895','883349']", ,"['660547']", ,5.058,4386.98 +9415.0,pick item,2019-10-17 13:47:57.000Z, ,"['883515']", , , ,1.37,2500.0 +9416.0,pick item,2019-10-17 13:56:20.000Z, ,"['883509']", , , ,0.2,39.99 +9417.0,pick item,2019-10-17 14:02:54.000Z, ,"['883406']", , , ,0.44,476.0 +9418.0,send package,2019-10-17 14:06:29.000Z, , , ,"['660545']", ,2.643,1338.98 +9419.0,send package,2019-10-17 14:08:41.000Z, , , ,"['660542']", ,2.385,2844.99 +9420.0,confirm order,2019-10-17 14:23:29.000Z, , ,"['990872']", , ,0.655,1803.0 +9421.0,pick item,2019-10-17 14:28:46.000Z, ,"['883385']", , , ,0.172,699.0 +9422.0,package delivered,2019-10-17 14:31:01.000Z, , , ,"['660545']", ,2.643,1338.98 +9423.0,payment reminder,2019-10-17 14:32:46.000Z, , ,"['990766']", , ,5.86,5124.96 +9424.0,pick item,2019-10-17 14:37:35.000Z, ,"['883489']", , , ,0.88,89.99 +9425.0,pay order,2019-10-17 14:43:36.000Z, , ,"['990872']", , ,0.655,1803.0 +9426.0,pick item,2019-10-17 14:44:46.000Z, ,"['883299']", , , ,0.28,449.0 +9427.0,place order,2019-10-17 14:49:59.000Z, ,"['883533','883532','883531','883530','883528','883529']","['990879']", , ,1.998,1438.96 +9428.0,pay order,2019-10-17 14:56:51.000Z, , ,"['990867']", , ,2.225,2463.98 +9429.0,package delivered,2019-10-17 15:00:26.000Z, , , ,"['660541']", ,5.242999999999999,5504.96 +9430.0,pick item,2019-10-17 15:03:17.000Z, ,"['883518']", , , ,0.98,129.99 +9431.0,pick item,2019-10-17 15:04:17.000Z, ,"['883504']", , , ,0.38,29.99 +9432.0,create package,2019-10-17 15:04:17.000Z, ,"['883449','883266','883448','883299']", ,"['660548']", ,1.123,3396.0 +9433.0,confirm order,2019-10-17 15:06:35.000Z, , ,"['990868']", , ,1.5730000000000002,1118.99 +9434.0,send package,2019-10-17 15:26:42.000Z, , , ,"['660548']", ,1.123,3396.0 +9435.0,item out of stock,2019-10-17 15:30:37.000Z, ,"['883491']", , , ,0.495,129.0 +9436.0,pick item,2019-10-17 15:32:07.000Z, ,"['883506']", , , ,0.483,495.0 +9437.0,package delivered,2019-10-17 15:47:40.000Z, , , ,"['660542']", ,2.385,2844.99 +9438.0,send package,2019-10-17 16:31:22.000Z, , , ,"['660547']", ,5.058,4386.98 +9439.0,place order,2019-10-17 16:59:46.000Z, ,"['883535','883534','883536']","['990880']", , ,1.27,723.98 +9440.0,pay order,2019-10-17 17:10:47.000Z, , ,"['990876']", , ,2.748,4312.99 +9441.0,reorder item,2019-10-17 17:46:05.000Z, ,"['883491']", , , ,0.495,129.0 +9442.0,item out of stock,2019-10-17 18:56:00.000Z, ,"['883473']", , , ,1.48,199.99 +9443.0,pay order,2019-10-17 19:54:14.000Z, , ,"['990853']", , ,6.83,3620.95 +9444.0,package delivered,2019-10-17 19:56:09.000Z, , , ,"['660547']", ,5.058,4386.98 +9445.0,place order,2019-10-17 20:38:52.000Z, ,"['883539','883537','883538']","['990881']", , ,1.118,1602.99 +9446.0,confirm order,2019-10-17 20:55:13.000Z, , ,"['990877']", , ,0.88,94.99 +9447.0,pick item,2019-10-18 06:47:28.000Z, ,"['883457']", , , ,0.28,89.99 +9448.0,place order,2019-10-18 07:09:19.000Z, ,"['883542','883540','883541','883543']","['990882']", , ,1.901,1184.99 +9449.0,pick item,2019-10-18 07:18:15.000Z, ,"['883538']", , , ,0.78,99.99 +9450.0,pick item,2019-10-18 07:24:31.000Z, ,"['883541']", , , ,0.483,495.0 +9451.0,create package,2019-10-18 07:24:31.000Z, ,"['883470','883477','882972','883474','883494','883471','883495','883388','883479','883385','883428','883478']", ,"['660549']", ,6.751,11967.99 +9452.0,item out of stock,2019-10-18 07:24:42.000Z, ,"['883533']", , , ,0.2,39.99 +9453.0,pick item,2019-10-18 07:43:38.000Z, ,"['883507']", , , ,0.495,129.0 +9454.0,pick item,2019-10-18 07:50:05.000Z, ,"['883443']", , , ,0.172,699.0 +9455.0,pay order,2019-10-18 07:51:28.000Z, , ,"['990812']", , ,2.026,3922.99 +9456.0,pick item,2019-10-18 07:56:19.000Z, ,"['883534']", , , ,0.21,529.0 +9457.0,pick item,2019-10-18 08:13:43.000Z, ,"['883519']", , , ,0.98,129.99 +9458.0,item out of stock,2019-10-18 08:16:43.000Z, ,"['883514']", , , ,0.188,1149.0 +9459.0,pick item,2019-10-18 08:18:52.000Z, ,"['883461']", , , ,0.38,29.99 +9460.0,item out of stock,2019-10-18 08:26:32.000Z, ,"['883480']", , , ,0.188,1149.0 +9461.0,item out of stock,2019-10-18 08:32:30.000Z, ,"['883542']", , , ,0.483,79.99 +9462.0,place order,2019-10-18 08:38:26.000Z, ,"['883545','883544','883547','883546']","['990883']", , ,2.168,872.98 +9463.0,item out of stock,2019-10-18 08:42:44.000Z, ,"['883451']", , , ,0.483,79.99 +9464.0,reorder item,2019-10-18 08:49:37.000Z, ,"['883473']", , , ,1.48,199.99 +9465.0,pick item,2019-10-18 09:18:50.000Z, ,"['883521']", , , ,0.21,529.0 +9466.0,package delivered,2019-10-18 09:36:26.000Z, , , ,"['660544']", ,1.626,3528.0 +9467.0,pick item,2019-10-18 09:37:48.000Z, ,"['883539']", , , ,0.172,699.0 +9468.0,confirm order,2019-10-18 09:38:45.000Z, , ,"['990878']", , ,6.772,4850.95 +9469.0,pick item,2019-10-18 09:46:24.000Z, ,"['883454']", , , ,1.48,199.99 +9470.0,pick item,2019-10-18 10:06:06.000Z, ,"['883378']", , , ,1.48,199.99 +9471.0,confirm order,2019-10-18 10:10:57.000Z, , ,"['990883']", , ,2.168,872.98 +9472.0,item out of stock,2019-10-18 10:11:43.000Z, ,"['883517']", , , ,0.483,1099.0 +9473.0,reorder item,2019-10-18 10:24:16.000Z, ,"['883542']", , , ,0.483,79.99 +9474.0,package delivered,2019-10-18 10:28:54.000Z, , , ,"['660548']", ,1.123,3396.0 +9475.0,place order,2019-10-18 10:36:39.000Z, ,"['883552','883548','883551','883549','883553','883550']","['990884']", , ,2.864,4321.98 +9476.0,pick item,2019-10-18 10:40:45.000Z, ,"['883536']", , , ,0.78,99.99 +9477.0,send package,2019-10-18 10:55:05.000Z, , , ,"['660546']", ,2.772,1414.98 +9478.0,pick item,2019-10-18 11:14:07.000Z, ,"['883439']", , , ,0.78,99.99 +9479.0,reorder item,2019-10-18 11:39:11.000Z, ,"['883517']", , , ,0.483,1099.0 +9480.0,pick item,2019-10-18 11:53:13.000Z, ,"['883531']", , , ,0.38,29.99 +9481.0,create package,2019-10-18 11:53:13.000Z, ,"['883405','883406','883404','883456','883460','883457','883458','883459']", ,"['660550']", ,5.1320000000000014,9592.99 +9482.0,item out of stock,2019-10-18 11:56:03.000Z, ,"['883498']", , , ,1.48,199.99 +9483.0,pick item,2019-10-18 11:57:37.000Z, ,"['883453']", , , ,0.98,129.99 +9484.0,pick item,2019-10-18 12:05:18.000Z, ,"['883552']", , , ,0.172,699.0 +9485.0,pick item,2019-10-18 12:13:28.000Z, ,"['883492']", , , ,0.2,39.99 +9486.0,pick item,2019-10-18 12:18:41.000Z, ,"['883535']", , , ,0.28,89.99 +9487.0,place order,2019-10-18 12:33:05.000Z, ,"['883555','883556','883554']","['990885']", , ,1.429,983.98 +9488.0,pick item,2019-10-18 12:34:20.000Z, ,"['883395']", , , ,0.98,129.99 +9489.0,pick item,2019-10-18 12:57:42.000Z, ,"['883546']", , , ,0.495,129.0 +9490.0,reorder item,2019-10-18 12:58:27.000Z, ,"['883533']", , , ,0.2,39.99 +9491.0,pick item,2019-10-18 13:08:27.000Z, ,"['883402']", , , ,1.25,2200.0 +9492.0,pick item,2019-10-18 13:23:59.000Z, ,"['883476']", , , ,0.188,1149.0 +9493.0,create package,2019-10-18 13:23:59.000Z, ,"['883431','883433','883423','883422','883432','883424','883312']", ,"['660551']", ,3.989,2317.95 +9494.0,confirm order,2019-10-18 13:36:41.000Z, , ,"['990880']", , ,1.27,723.98 +9495.0,pick item,2019-10-18 13:37:49.000Z, ,"['883543']", , , ,0.44,476.0 +9496.0,pick item,2019-10-18 13:38:15.000Z, ,"['883524']", , , ,0.78,99.99 +9497.0,pick item,2019-10-18 13:54:44.000Z, ,"['883475']", , , ,1.28,149.99 +9498.0,pick item,2019-10-18 14:21:50.000Z, ,"['883493']", , , ,0.495,129.0 +9499.0,place order,2019-10-18 14:25:58.000Z, ,"['883560','883561','883562','883559','883557','883558','883563']","['990886']", , ,4.652,4772.98 +9500.0,pick item,2019-10-18 14:34:19.000Z, ,"['883559']", , , ,0.483,495.0 +9501.0,pick item,2019-10-18 14:45:27.000Z, ,"['883447']", , , ,0.21,529.0 +9502.0,item out of stock,2019-10-18 14:50:15.000Z, ,"['883490']", , , ,0.21,529.0 +9503.0,pick item,2019-10-18 14:56:41.000Z, ,"['883550']", , , ,0.78,99.99 +9504.0,create package,2019-10-18 14:56:41.000Z, ,"['882926','883464','883398','883465','883466','883400']", ,"['660552']", ,4.061,3006.97 +9505.0,pick item,2019-10-18 15:02:05.000Z, ,"['883530']", , , ,0.483,79.99 +9506.0,confirm order,2019-10-18 15:17:24.000Z, , ,"['990882']", , ,1.901,1184.99 +9507.0,confirm order,2019-10-18 15:24:02.000Z, , ,"['990885']", , ,1.429,983.98 +9508.0,pick item,2019-10-18 15:35:17.000Z, ,"['883540']", , , ,0.495,129.0 +9509.0,pick item,2019-10-18 15:48:30.000Z, ,"['883516']", , , ,0.88,89.99 +9510.0,pick item,2019-10-18 15:49:10.000Z, ,"['883551']", , , ,1.25,2200.0 +9511.0,place order,2019-10-18 16:11:43.000Z, ,"['883567','883568','883569','883565','883564','883566']","['990887']", , ,2.404,1662.96 +9512.0,pick item,2019-10-18 16:19:17.000Z, ,"['883565']", , , ,0.2,39.99 +9513.0,item out of stock,2019-10-18 16:30:44.000Z, ,"['883548']", , , ,0.28,89.99 +9514.0,pick item,2019-10-18 16:32:04.000Z, ,"['883513']", , , ,0.21,529.0 +9515.0,create package,2019-10-18 16:32:04.000Z, ,"['883443','883439','883442','883444','883483']", ,"['660553']", ,2.712,1078.96 +9516.0,pay order,2019-10-18 17:14:02.000Z, , ,"['990873']", , ,0.28,94.99 +9517.0,place order,2019-10-18 18:14:44.000Z, ,"['883570']","['990888']", , ,1.48,204.99 +9518.0,confirm order,2019-10-18 19:56:09.000Z, , ,"['990881']", , ,1.118,1602.99 +9519.0,pick item,2019-10-18 20:13:00.000Z, ,"['883537']", , , ,0.166,799.0 +9520.0,place order,2019-10-18 21:09:03.000Z, ,"['883577','883571','883575','883576','883572','883573','883574']","['990889']", , ,3.626,1987.96 +9521.0,place order,2019-10-19 19:26:57.000Z, ,"['883579','883580','883578']","['990890']", , ,2.74,424.97 +9522.0,payment reminder,2019-10-20 07:58:10.000Z, , ,"['990762']", , ,0.655,1803.0 +9523.0,payment reminder,2019-10-20 10:03:02.000Z, , ,"['990543']", , ,3.18,900.97 +9524.0,payment reminder,2019-10-20 11:30:16.000Z, , ,"['990753']", , ,1.543,689.98 +9525.0,payment reminder,2019-10-20 15:26:06.000Z, , ,"['990773']", , ,1.43,1109.99 +9526.0,place order,2019-10-20 19:41:42.000Z, ,"['883582','883581','883584','883586','883585','883583']","['990891']", , ,2.902,5231.0 +9527.0,item out of stock,2019-10-21 06:40:25.000Z, ,"['883544']", , , ,0.483,79.99 +9528.0,place order,2019-10-21 07:36:15.000Z, ,"['883587','883588','883589']","['990892']", , ,1.178,1782.99 +9529.0,reorder item,2019-10-21 08:01:58.000Z, ,"['883472']", , , ,0.78,99.99 +9530.0,pick item,2019-10-21 08:19:17.000Z, ,"['883555']", , , ,0.166,799.0 +9531.0,reorder item,2019-10-21 08:32:06.000Z, ,"['883548']", , , ,0.28,89.99 +9532.0,pick item,2019-10-21 08:37:35.000Z, ,"['883500']", , , ,0.483,1099.0 +9533.0,reorder item,2019-10-21 08:41:14.000Z, ,"['883490']", , , ,0.21,529.0 +9534.0,pick item,2019-10-21 08:41:20.000Z, ,"['883526']", , , ,0.483,495.0 +9535.0,confirm order,2019-10-21 08:42:59.000Z, , ,"['990874']", , ,1.826,1897.98 +9536.0,send package,2019-10-21 08:44:19.000Z, , , ,"['660550']", ,5.1320000000000014,9592.99 +9537.0,send package,2019-10-21 08:50:19.000Z, , , ,"['660549']", ,6.751,11967.99 +9538.0,item out of stock,2019-10-21 09:02:45.000Z, ,"['883502']", , , ,0.28,89.99 +9539.0,send package,2019-10-21 09:08:02.000Z, , , ,"['660551']", ,3.989,2317.95 +9540.0,reorder item,2019-10-21 09:14:13.000Z, ,"['883409']", , , ,0.21,529.0 +9541.0,confirm order,2019-10-21 09:14:29.000Z, , ,"['990879']", , ,1.998,1438.96 +9542.0,pick item,2019-10-21 09:18:11.000Z, ,"['883525']", , , ,1.48,199.99 +9543.0,create package,2019-10-21 09:18:11.000Z, ,"['883531','883536','883497','883395','883535','883530','883534','883496']", ,"['660554']", ,4.603,1637.94 +9544.0,pick item,2019-10-21 09:22:45.000Z, ,"['883510']", , , ,0.495,129.0 +9545.0,place order,2019-10-21 09:32:18.000Z, ,"['883593','883590','883592','883594','883591']","['990893']", , ,2.625,1542.97 +9546.0,pick item,2019-10-21 09:36:08.000Z, ,"['883356']", , , ,0.495,129.0 +9547.0,pick item,2019-10-21 09:38:53.000Z, ,"['883512']", , , ,0.98,129.99 +9548.0,send package,2019-10-21 09:39:12.000Z, , , ,"['660554']", ,4.603,1637.94 +9549.0,reorder item,2019-10-21 09:49:34.000Z, ,"['883480']", , , ,0.188,1149.0 +9550.0,pick item,2019-10-21 09:50:45.000Z, ,"['883522']", , , ,0.21,529.0 +9551.0,send package,2019-10-21 09:51:20.000Z, , , ,"['660553']", ,2.712,1078.96 +9552.0,pick item,2019-10-21 09:54:24.000Z, ,"['883547']", , , ,0.98,129.99 +9553.0,pick item,2019-10-21 09:54:56.000Z, ,"['883584']", , , ,0.44,476.0 +9554.0,pick item,2019-10-21 10:07:03.000Z, ,"['883553']", , , ,0.172,699.0 +9555.0,pick item,2019-10-21 10:09:51.000Z, ,"['883558']", , , ,1.28,149.99 +9556.0,create package,2019-10-21 10:09:51.000Z, ,"['883552','883500','883551','883499','883501','883553','883550']", ,"['660555']", ,3.195,6294.99 +9557.0,pick item,2019-10-21 10:15:43.000Z, ,"['883505']", , , ,0.28,89.99 +9558.0,item out of stock,2019-10-21 10:39:42.000Z, ,"['883407']", , , ,0.38,29.99 +9559.0,place order,2019-10-21 11:24:23.000Z, ,"['883595']","['990894']", , ,0.495,134.0 +9560.0,confirm order,2019-10-21 11:30:14.000Z, , ,"['990892']", , ,1.178,1782.99 +9561.0,pick item,2019-10-21 11:38:36.000Z, ,"['883467']", , , ,0.38,29.99 +9562.0,confirm order,2019-10-21 11:48:14.000Z, , ,"['990891']", , ,2.902,5231.0 +9563.0,package delivered,2019-10-21 12:16:15.000Z, , , ,"['660551']", ,3.989,2317.95 +9564.0,payment reminder,2019-10-21 12:22:02.000Z, , ,"['990781']", , ,3.14,374.97 +9565.0,pick item,2019-10-21 12:33:23.000Z, ,"['883574']", , , ,0.98,129.99 +9566.0,confirm order,2019-10-21 12:33:29.000Z, , ,"['990889']", , ,3.626,1987.96 +9567.0,confirm order,2019-10-21 12:34:02.000Z, , ,"['990887']", , ,2.404,1662.96 +9568.0,pick item,2019-10-21 12:37:13.000Z, ,"['883593']", , , ,0.483,79.99 +9569.0,reorder item,2019-10-21 12:41:53.000Z, ,"['883407']", , , ,0.38,29.99 +9570.0,place order,2019-10-21 13:08:33.000Z, ,"['883597','883600','883596','883598','883599']","['990895']", , ,3.663,2511.98 +9571.0,item out of stock,2019-10-21 13:17:51.000Z, ,"['883575']", , , ,0.483,79.99 +9572.0,reorder item,2019-10-21 13:23:11.000Z, ,"['883451']", , , ,0.483,79.99 +9573.0,confirm order,2019-10-21 13:24:11.000Z, , ,"['990884']", , ,2.864,4321.98 +9574.0,pick item,2019-10-21 13:26:22.000Z, ,"['883321']", , , ,1.25,2200.0 +9575.0,item out of stock,2019-10-21 13:28:57.000Z, ,"['883577']", , , ,0.28,89.99 +9576.0,pick item,2019-10-21 13:29:34.000Z, ,"['883549']", , , ,0.21,529.0 +9577.0,pick item,2019-10-21 13:32:12.000Z, ,"['883320']", , , ,0.172,699.0 +9578.0,create package,2019-10-21 13:32:12.000Z, ,"['883216','883469']", ,"['660556']", ,1.81,2976.0 +9579.0,package delivered,2019-10-21 13:43:33.000Z, , , ,"['660546']", ,2.772,1414.98 +9580.0,pick item,2019-10-21 13:46:15.000Z, ,"['883563']", , , ,0.78,99.99 +9581.0,reorder item,2019-10-21 13:51:37.000Z, ,"['883498']", , , ,1.48,199.99 +9582.0,package delivered,2019-10-21 13:58:01.000Z, , , ,"['660549']", ,6.751,11967.99 +9583.0,confirm order,2019-10-21 13:59:04.000Z, , ,"['990888']", , ,1.48,204.99 +9584.0,confirm order,2019-10-21 14:01:14.000Z, , ,"['990886']", , ,4.652,4772.98 +9585.0,reorder item,2019-10-21 14:13:44.000Z, ,"['883544']", , , ,0.483,79.99 +9586.0,pay order,2019-10-21 14:19:47.000Z, , ,"['990887']", , ,2.404,1662.96 +9587.0,pick item,2019-10-21 14:20:45.000Z, ,"['883528']", , , ,0.172,699.0 +9588.0,create package,2019-10-21 14:20:45.000Z, ,"['883510','883378','883546','883508','883377','883509','883547','883402','883489']", ,"['660557']", ,7.447999999999999,4266.95 +9589.0,place order,2019-10-21 14:36:54.000Z, ,"['883601','883602']","['990896']", , ,0.354,1953.0 +9590.0,item out of stock,2019-10-21 14:38:52.000Z, ,"['883527']", , , ,0.483,495.0 +9591.0,package delivered,2019-10-21 14:41:34.000Z, , , ,"['660553']", ,2.712,1078.96 +9592.0,item out of stock,2019-10-21 14:44:27.000Z, ,"['883545']", , , ,0.21,529.0 +9593.0,item out of stock,2019-10-21 14:49:38.000Z, ,"['883594']", , , ,0.172,699.0 +9594.0,reorder item,2019-10-21 14:52:27.000Z, ,"['883545']", , , ,0.21,529.0 +9595.0,item out of stock,2019-10-21 14:53:53.000Z, ,"['883572']", , , ,0.483,495.0 +9596.0,send package,2019-10-21 14:57:44.000Z, , , ,"['660556']", ,1.81,2976.0 +9597.0,pick item,2019-10-21 15:00:16.000Z, ,"['883578']", , , ,0.28,89.99 +9598.0,pick item,2019-10-21 15:04:31.000Z, ,"['883570']", , , ,1.48,199.99 +9599.0,failed delivery,2019-10-21 15:11:17.000Z, , , ,"['660550']", ,5.1320000000000014,9592.99 +9600.0,pay order,2019-10-21 15:18:48.000Z, , ,"['990773']", , ,1.43,1109.99 +9601.0,pick item,2019-10-21 15:38:04.000Z, ,"['883387']", , , ,0.21,529.0 +9602.0,item out of stock,2019-10-21 15:40:58.000Z, ,"['883589']", , , ,0.21,529.0 +9603.0,reorder item,2019-10-21 15:41:15.000Z, ,"['883527']", , , ,0.483,495.0 +9604.0,pick item,2019-10-21 15:41:45.000Z, ,"['883480']", , , ,0.188,1149.0 +9605.0,send package,2019-10-21 15:48:39.000Z, , , ,"['660552']", ,4.061,3006.97 +9606.0,pick item,2019-10-21 15:52:41.000Z, ,"['883472']", , , ,0.78,99.99 +9607.0,pick item,2019-10-21 16:02:11.000Z, ,"['883596']", , , ,0.483,1099.0 +9608.0,pick item,2019-10-21 16:02:44.000Z, ,"['883579']", , , ,0.98,129.99 +9609.0,pay order,2019-10-21 16:13:29.000Z, , ,"['990740']", , ,3.835,4204.99 +9610.0,place order,2019-10-21 16:33:35.000Z, ,"['883604','883605','883606','883603']","['990897']", , ,1.52,1982.98 +9611.0,pay order,2019-10-21 16:45:30.000Z, , ,"['990888']", , ,1.48,204.99 +9612.0,package delivered,2019-10-21 16:57:54.000Z, , , ,"['660552']", ,4.061,3006.97 +9613.0,reorder item,2019-10-21 17:05:59.000Z, ,"['883589']", , , ,0.21,529.0 +9614.0,reorder item,2019-10-21 17:08:32.000Z, ,"['883572']", , , ,0.483,495.0 +9615.0,pick item,2019-10-21 17:24:20.000Z, ,"['883595']", , , ,0.495,129.0 +9616.0,place order,2019-10-21 19:20:20.000Z, ,"['883609','883607','883608']","['990898']", , ,2.043,1702.99 +9617.0,confirm order,2019-10-21 19:32:56.000Z, , ,"['990890']", , ,2.74,424.97 +9618.0,pick item,2019-10-21 19:52:21.000Z, ,"['883191']", , , ,0.483,1099.0 +9619.0,create package,2019-10-21 19:52:21.000Z, ,"['883512','883515','883513']", ,"['660558']", ,2.56,3158.99 +9620.0,create package,2019-10-21 23:00:00.000Z, ,"['883524','883522','883526','883595','883518','883519','883521','883191','883525']", ,"['660559']", ,6.101,3340.96 +9621.0,place order,2019-10-22 02:19:54.000Z, ,"['883610','883611']","['990899']", , ,1.76,234.98 +9622.0,pay order,2019-10-22 06:35:49.000Z, , ,"['990717']", , ,1.973,763.98 +9623.0,pick item,2019-10-22 06:40:15.000Z, ,"['883567']", , , ,0.172,699.0 +9624.0,reorder item,2019-10-22 07:03:17.000Z, ,"['883502']", , , ,0.28,89.99 +9625.0,pick item,2019-10-22 07:13:37.000Z, ,"['883554']", , , ,0.78,99.99 +9626.0,pick item,2019-10-22 07:19:08.000Z, ,"['883597']", , , ,1.48,199.99 +9627.0,pick item,2019-10-22 07:32:43.000Z, ,"['883610']", , , ,0.78,99.99 +9628.0,package delivered,2019-10-22 07:34:57.000Z, , , ,"['660550']", ,5.1320000000000014,9592.99 +9629.0,place order,2019-10-22 07:47:41.000Z, ,"['883616','883615','883617','883612','883613','883614']","['990900']", , ,4.086,5142.97 +9630.0,pick item,2019-10-22 07:52:34.000Z, ,"['883529']", , , ,0.28,89.99 +9631.0,item out of stock,2019-10-22 07:59:59.000Z, ,"['883615']", , , ,0.28,89.99 +9632.0,pay order,2019-10-22 08:01:22.000Z, , ,"['990601']", , ,2.998,3952.99 +9633.0,pay order,2019-10-22 08:02:53.000Z, , ,"['990766']", , ,5.86,5124.96 +9634.0,pick item,2019-10-22 08:04:29.000Z, ,"['883571']", , , ,0.21,529.0 +9635.0,pay order,2019-10-22 08:26:30.000Z, , ,"['990889']", , ,3.626,1987.96 +9636.0,reorder item,2019-10-22 08:33:18.000Z, ,"['883412']", , , ,1.37,2500.0 +9637.0,pick item,2019-10-22 08:53:11.000Z, ,"['883613']", , , ,1.37,2500.0 +9638.0,send package,2019-10-22 08:58:45.000Z, , , ,"['660558']", ,2.56,3158.99 +9639.0,item out of stock,2019-10-22 09:01:35.000Z, ,"['883598']", , , ,0.21,529.0 +9640.0,item out of stock,2019-10-22 09:03:27.000Z, ,"['883581']", , , ,0.166,799.0 +9641.0,pick item,2019-10-22 09:07:35.000Z, ,"['883569']", , , ,0.38,29.99 +9642.0,reorder item,2019-10-22 09:09:06.000Z, ,"['883615']", , , ,0.28,89.99 +9643.0,pick item,2019-10-22 09:10:36.000Z, ,"['883611']", , , ,0.98,129.99 +9644.0,confirm order,2019-10-22 09:35:08.000Z, , ,"['990894']", , ,0.495,134.0 +9645.0,pick item,2019-10-22 09:38:37.000Z, ,"['883609']", , , ,0.483,1099.0 +9646.0,item out of stock,2019-10-22 09:42:57.000Z, ,"['883599']", , , ,1.28,149.99 +9647.0,item out of stock,2019-10-22 09:46:24.000Z, ,"['883561']", , , ,0.483,495.0 +9648.0,pick item,2019-10-22 09:49:06.000Z, ,"['883580']", , , ,1.48,199.99 +9649.0,place order,2019-10-22 09:55:09.000Z, ,"['883619','883618','883620']","['990901']", , ,1.143,1582.99 +9650.0,package delivered,2019-10-22 10:24:27.000Z, , , ,"['660556']", ,1.81,2976.0 +9651.0,pay order,2019-10-22 10:42:05.000Z, , ,"['990543']", , ,3.18,900.97 +9652.0,pay order,2019-10-22 10:44:05.000Z, , ,"['990892']", , ,1.178,1782.99 +9653.0,pick item,2019-10-22 11:03:12.000Z, ,"['883603']", , , ,0.38,29.99 +9654.0,create package,2019-10-22 11:03:12.000Z, ,"['883506','883507','883504','883540','883584','883505','883541','883543']", ,"['660560']", ,3.4960000000000004,2319.98 +9655.0,send package,2019-10-22 11:04:50.000Z, , , ,"['660557']", ,7.447999999999999,4266.95 +9656.0,pick item,2019-10-22 11:24:28.000Z, ,"['883520']", , , ,0.2,39.99 +9657.0,send package,2019-10-22 11:27:20.000Z, , , ,"['660559']", ,6.101,3340.96 +9658.0,pick item,2019-10-22 11:33:49.000Z, ,"['883503']", , , ,0.188,1149.0 +9659.0,pick item,2019-10-22 11:42:33.000Z, ,"['883490']", , , ,0.21,529.0 +9660.0,pick item,2019-10-22 11:43:00.000Z, ,"['883588']", , , ,0.188,1149.0 +9661.0,pick item,2019-10-22 11:50:05.000Z, ,"['883557']", , , ,0.21,529.0 +9662.0,place order,2019-10-22 12:10:06.000Z, ,"['883623','883621','883626','883624','883622','883625']","['990902']", , ,2.636,2692.99 +9663.0,confirm order,2019-10-22 12:14:33.000Z, , ,"['990900']", , ,4.086,5142.97 +9664.0,pay order,2019-10-22 12:15:06.000Z, , ,"['990795']", , ,3.345,4631.98 +9665.0,send package,2019-10-22 12:23:49.000Z, , , ,"['660555']", ,3.195,6294.99 +9666.0,pick item,2019-10-22 12:27:14.000Z, ,"['883566']", , , ,1.28,149.99 +9667.0,pick item,2019-10-22 12:30:10.000Z, ,"['883619']", , , ,0.38,29.99 +9668.0,pick item,2019-10-22 12:39:01.000Z, ,"['883604']", , , ,0.172,699.0 +9669.0,create package,2019-10-22 12:39:01.000Z, ,"['883539','883571','883537','883555','883538','883574','883554']", ,"['660561']", ,3.254,3155.97 +9670.0,failed delivery,2019-10-22 12:44:22.000Z, , , ,"['660554']", ,4.603,1637.94 +9671.0,confirm order,2019-10-22 12:56:34.000Z, , ,"['990893']", , ,2.625,1542.97 +9672.0,pay order,2019-10-22 12:59:08.000Z, , ,"['990893']", , ,2.625,1542.97 +9673.0,pay order,2019-10-22 13:02:53.000Z, , ,"['990884']", , ,2.864,4321.98 +9674.0,pay order,2019-10-22 13:17:50.000Z, , ,"['990844']", , ,2.232,953.98 +9675.0,reorder item,2019-10-22 13:18:55.000Z, ,"['883594']", , , ,0.172,699.0 +9676.0,reorder item,2019-10-22 13:35:11.000Z, ,"['883575']", , , ,0.483,79.99 +9677.0,pick item,2019-10-22 13:38:43.000Z, ,"['883590']", , , ,0.78,99.99 +9678.0,place order,2019-10-22 13:39:59.000Z, ,"['883629','883628','883627']","['990903']", , ,2.526,1093.98 +9679.0,item out of stock,2019-10-22 14:00:10.000Z, ,"['883601']", , , ,0.166,799.0 +9680.0,send package,2019-10-22 14:07:37.000Z, , , ,"['660560']", ,3.4960000000000004,2319.98 +9681.0,pay order,2019-10-22 14:10:38.000Z, , ,"['990706']", , ,2.158,1912.98 +9682.0,package delivered,2019-10-22 14:24:28.000Z, , , ,"['660558']", ,2.56,3158.99 +9683.0,package delivered,2019-10-22 14:33:18.000Z, , , ,"['660560']", ,3.4960000000000004,2319.98 +9684.0,pick item,2019-10-22 14:39:53.000Z, ,"['883572']", , , ,0.483,495.0 +9685.0,pick item,2019-10-22 14:47:09.000Z, ,"['883608']", , , ,0.28,449.0 +9686.0,pick item,2019-10-22 14:47:47.000Z, ,"['883399']", , , ,0.78,99.99 +9687.0,pay order,2019-10-22 14:48:09.000Z, , ,"['990886']", , ,4.652,4772.98 +9688.0,pick item,2019-10-22 15:06:25.000Z, ,"['883620']", , , ,0.483,1099.0 +9689.0,pick item,2019-10-22 15:17:51.000Z, ,"['883622']", , , ,0.495,129.0 +9690.0,item out of stock,2019-10-22 15:18:53.000Z, ,"['883605']", , , ,0.188,1149.0 +9691.0,item out of stock,2019-10-22 15:21:19.000Z, ,"['883560']", , , ,1.25,2200.0 +9692.0,pick item,2019-10-22 15:22:21.000Z, ,"['883606']", , , ,0.78,99.99 +9693.0,create package,2019-10-22 15:22:21.000Z, ,"['883593','883590','883356','883461']", ,"['660562']", ,2.138,338.97 +9694.0,confirm order,2019-10-22 15:30:08.000Z, , ,"['990895']", , ,3.663,2511.98 +9695.0,pick item,2019-10-22 15:32:11.000Z, ,"['883583']", , , ,0.166,799.0 +9696.0,package delivered,2019-10-22 15:37:21.000Z, , , ,"['660554']", ,4.603,1637.94 +9697.0,place order,2019-10-22 15:39:45.000Z, ,"['883630','883632','883631']","['990904']", , ,0.6679999999999999,1283.98 +9698.0,pick item,2019-10-22 15:41:48.000Z, ,"['883582']", , , ,0.44,476.0 +9699.0,reorder item,2019-10-22 15:46:38.000Z, ,"['883577']", , , ,0.28,89.99 +9700.0,send package,2019-10-22 15:56:36.000Z, , , ,"['660562']", ,2.138,338.97 +9701.0,pick item,2019-10-22 17:01:04.000Z, ,"['883632']", , , ,0.2,39.99 +9702.0,place order,2019-10-22 17:39:18.000Z, ,"['883633','883634','883635']","['990905']", , ,2.14,264.97 +9703.0,package delivered,2019-10-22 19:21:36.000Z, , , ,"['660557']", ,7.447999999999999,4266.95 +9704.0,pick item,2019-10-22 19:41:00.000Z, ,"['883600']", , , ,0.21,529.0 +9705.0,create package,2019-10-22 19:41:00.000Z, ,"['883453','883454']", ,"['660563']", ,2.46,329.98 +9706.0,place order,2019-10-22 20:58:11.000Z, ,"['883636','883637','883638']","['990906']", , ,1.94,643.98 +9707.0,pick item,2019-10-23 06:56:17.000Z, ,"['883614']", , , ,0.188,1149.0 +9708.0,pay order,2019-10-23 07:02:55.000Z, , ,"['990840']", , ,1.817,3130.99 +9709.0,pay order,2019-10-23 07:05:11.000Z, , ,"['990882']", , ,1.901,1184.99 +9710.0,item out of stock,2019-10-23 07:11:41.000Z, ,"['883623']", , , ,0.483,495.0 +9711.0,pick item,2019-10-23 07:15:14.000Z, ,"['883488']", , , ,0.483,495.0 +9712.0,create package,2019-10-23 07:15:14.000Z, ,"['883493','883480','883492','883472','883588','883476','883387','883475']", ,"['660564']", ,3.529,4394.97 +9713.0,pick item,2019-10-23 07:21:14.000Z, ,"['883607']", , , ,1.28,149.99 +9714.0,pick item,2019-10-23 07:23:14.000Z, ,"['883637']", , , ,0.78,99.99 +9715.0,pick item,2019-10-23 07:25:05.000Z, ,"['883630']", , , ,0.188,1149.0 +9716.0,pick item,2019-10-23 07:29:45.000Z, ,"['883484']", , , ,0.28,89.99 +9717.0,pick item,2019-10-23 07:44:47.000Z, ,"['883562']", , , ,0.166,799.0 +9718.0,place order,2019-10-23 07:47:56.000Z, ,"['883639','883643','883642','883641','883640']","['990907']", , ,3.014,1533.96 +9719.0,pick item,2019-10-23 07:54:54.000Z, ,"['883523']", , , ,0.483,1099.0 +9720.0,pick item,2019-10-23 08:04:24.000Z, ,"['883618']", , , ,0.28,449.0 +9721.0,confirm order,2019-10-23 08:10:56.000Z, , ,"['990906']", , ,1.94,643.98 +9722.0,confirm order,2019-10-23 08:13:23.000Z, , ,"['990897']", , ,1.52,1982.98 +9723.0,pay order,2019-10-23 08:17:32.000Z, , ,"['990864']", , ,1.386,1379.99 +9724.0,send package,2019-10-23 09:08:18.000Z, , , ,"['660563']", ,2.46,329.98 +9725.0,reorder item,2019-10-23 09:29:01.000Z, ,"['883598']", , , ,0.21,529.0 +9726.0,pick item,2019-10-23 09:32:59.000Z, ,"['883638']", , , ,0.88,89.99 +9727.0,create package,2019-10-23 09:32:59.000Z, ,"['883557','883559','883558','883578','883562','883579','883580','883563']", ,"['660565']", ,5.659,2492.95 +9728.0,item out of stock,2019-10-23 09:41:57.000Z, ,"['883624']", , , ,0.44,476.0 +9729.0,place order,2019-10-23 09:55:40.000Z, ,"['883645','883649','883648','883650','883646','883644','883647']","['990908']", , ,3.593,1907.96 +9730.0,pick item,2019-10-23 09:59:20.000Z, ,"['883568']", , , ,0.172,699.0 +9731.0,pick item,2019-10-23 09:59:43.000Z, ,"['883648']", , , ,0.78,99.99 +9732.0,pick item,2019-10-23 10:22:18.000Z, ,"['883628']", , , ,0.166,799.0 +9733.0,pick item,2019-10-23 10:22:39.000Z, ,"['883328']", , , ,0.188,1149.0 +9734.0,pay order,2019-10-23 10:27:55.000Z, , ,"['990802']", , ,0.42,1063.0 +9735.0,pay order,2019-10-23 10:33:09.000Z, , ,"['990829']", , ,1.416,3004.0 +9736.0,pick item,2019-10-23 10:37:13.000Z, ,"['883633']", , , ,0.78,99.99 +9737.0,item out of stock,2019-10-23 11:13:07.000Z, ,"['883641']", , , ,0.483,79.99 +9738.0,reorder item,2019-10-23 11:14:08.000Z, ,"['883601']", , , ,0.166,799.0 +9739.0,send package,2019-10-23 11:19:49.000Z, , , ,"['660561']", ,3.254,3155.97 +9740.0,confirm order,2019-10-23 11:40:35.000Z, , ,"['990908']", , ,3.593,1907.96 +9741.0,place order,2019-10-23 12:11:07.000Z, ,"['883652','883651']","['990909']", , ,1.68,244.98 +9742.0,pick item,2019-10-23 12:18:36.000Z, ,"['883556']", , , ,0.483,79.99 +9743.0,failed delivery,2019-10-23 12:20:52.000Z, , , ,"['660563']", ,2.46,329.98 +9744.0,pick item,2019-10-23 12:31:33.000Z, ,"['883573']", , , ,0.21,529.0 +9745.0,pick item,2019-10-23 12:58:57.000Z, ,"['883629']", , , ,0.88,89.99 +9746.0,create package,2019-10-23 12:58:57.000Z, ,"['883447']", ,"['660566']", ,0.21,529.0 +9747.0,pick item,2019-10-23 13:03:19.000Z, ,"['883631']", , , ,0.28,89.99 +9748.0,create package,2019-10-23 13:03:19.000Z, ,"['883622','883484','883516']", ,"['660567']", ,1.655,308.98 +9749.0,reorder item,2019-10-23 13:06:09.000Z, ,"['883641']", , , ,0.483,79.99 +9750.0,payment reminder,2019-10-23 13:12:19.000Z, , ,"['990797']", , ,1.76,653.99 +9751.0,confirm order,2019-10-23 13:20:56.000Z, , ,"['990904']", , ,0.6679999999999999,1283.98 +9752.0,confirm order,2019-10-23 13:25:28.000Z, , ,"['990907']", , ,3.014,1533.96 +9753.0,pick item,2019-10-23 13:29:18.000Z, ,"['883617']", , , ,0.78,99.99 +9754.0,reorder item,2019-10-23 13:33:42.000Z, ,"['883624']", , , ,0.44,476.0 +9755.0,pick item,2019-10-23 13:33:59.000Z, ,"['883643']", , , ,0.98,129.99 +9756.0,failed delivery,2019-10-23 13:36:09.000Z, , , ,"['660555']", ,3.195,6294.99 +9757.0,failed delivery,2019-10-23 13:41:16.000Z, , , ,"['660559']", ,6.101,3340.96 +9758.0,place order,2019-10-23 13:42:02.000Z, ,"['883653','883655','883654']","['990910']", , ,2.025,4303.0 +9759.0,package delivered,2019-10-23 13:42:36.000Z, , , ,"['660562']", ,2.138,338.97 +9760.0,pick item,2019-10-23 13:45:48.000Z, ,"['883412']", , , ,1.37,2500.0 +9761.0,create package,2019-10-23 13:45:48.000Z, ,"['883567','883569','883568','883565','883566']", ,"['660568']", ,2.204,1617.97 +9762.0,send package,2019-10-23 14:00:25.000Z, , , ,"['660565']", ,5.659,2492.95 +9763.0,confirm order,2019-10-23 14:07:59.000Z, , ,"['990903']", , ,2.526,1093.98 +9764.0,confirm order,2019-10-23 14:09:16.000Z, , ,"['990902']", , ,2.636,2692.99 +9765.0,failed delivery,2019-10-23 14:10:16.000Z, , , ,"['660565']", ,5.659,2492.95 +9766.0,pick item,2019-10-23 14:12:39.000Z, ,"['883542']", , , ,0.483,79.99 +9767.0,pay order,2019-10-23 14:18:19.000Z, , ,"['990885']", , ,1.429,983.98 +9768.0,reorder item,2019-10-23 14:21:18.000Z, ,"['883560']", , , ,1.25,2200.0 +9769.0,pick item,2019-10-23 14:24:44.000Z, ,"['883415']", , , ,0.21,529.0 +9770.0,pay order,2019-10-23 14:25:19.000Z, , ,"['990877']", , ,0.88,94.99 +9771.0,pick item,2019-10-23 14:49:54.000Z, ,"['883533']", , , ,0.2,39.99 +9772.0,pick item,2019-10-23 14:52:26.000Z, ,"['883511']", , , ,1.48,199.99 +9773.0,reorder item,2019-10-23 14:59:39.000Z, ,"['883561']", , , ,0.483,495.0 +9774.0,send package,2019-10-23 15:09:53.000Z, , , ,"['660568']", ,2.204,1617.97 +9775.0,send package,2019-10-23 15:14:51.000Z, , , ,"['660564']", ,3.529,4394.97 +9776.0,item out of stock,2019-10-23 15:16:08.000Z, ,"['883642']", , , ,0.88,89.99 +9777.0,pick item,2019-10-23 15:19:14.000Z, ,"['883627']", , , ,1.48,199.99 +9778.0,create package,2019-10-23 15:19:14.000Z, ,"['883648','883467','883399']", ,"['660569']", ,1.94,229.97 +9779.0,place order,2019-10-23 15:43:51.000Z, ,"['883659','883656','883657','883658']","['990911']", , ,1.5830000000000002,1039.98 +9780.0,confirm order,2019-10-23 15:45:16.000Z, , ,"['990905']", , ,2.14,264.97 +9781.0,pick item,2019-10-23 15:48:05.000Z, ,"['883576']", , , ,0.98,129.99 +9782.0,payment reminder,2019-10-23 16:00:21.000Z, , ,"['990799']", , ,2.487,6001.0 +9783.0,pick item,2019-10-23 16:26:06.000Z, ,"['883463']", , , ,1.25,2200.0 +9784.0,package delivered,2019-10-23 16:39:33.000Z, , , ,"['660565']", ,5.659,2492.95 +9785.0,pick item,2019-10-23 16:54:00.000Z, ,"['883645']", , , ,0.28,449.0 +9786.0,create package,2019-10-23 16:54:00.000Z, ,"['883321','883600','883320','883619','883618','883597','883596','883620']", ,"['660570']", ,4.738,6304.98 +9787.0,package delivered,2019-10-23 17:19:17.000Z, , , ,"['660563']", ,2.46,329.98 +9788.0,place order,2019-10-23 17:51:08.000Z, ,"['883666','883661','883660','883662','883664','883665','883663']","['990912']", , ,4.674,3026.97 +9789.0,confirm order,2019-10-23 18:07:05.000Z, , ,"['990910']", , ,2.025,4303.0 +9790.0,failed delivery,2019-10-23 18:54:59.000Z, , , ,"['660564']", ,3.529,4394.97 +9791.0,confirm order,2019-10-23 20:22:44.000Z, , ,"['990912']", , ,4.674,3026.97 +9792.0,place order,2019-10-23 21:21:51.000Z, ,"['883667','883670','883669','883668']","['990913']", , ,3.185,3133.98 +9793.0,pay order,2019-10-24 06:59:16.000Z, , ,"['990869']", , ,1.642,1450.99 +9794.0,pick item,2019-10-24 07:04:41.000Z, ,"['883652']", , , ,1.48,199.99 +9795.0,place order,2019-10-24 07:17:48.000Z, ,"['883671','883673','883672']","['990914']", , ,2.202,3003.99 +9796.0,reorder item,2019-10-24 07:27:40.000Z, ,"['883581']", , , ,0.166,799.0 +9797.0,item out of stock,2019-10-24 07:29:25.000Z, ,"['883602']", , , ,0.188,1149.0 +9798.0,pick item,2019-10-24 07:31:06.000Z, ,"['883408']", , , ,1.28,149.99 +9799.0,confirm order,2019-10-24 07:37:23.000Z, , ,"['990909']", , ,1.68,244.98 +9800.0,pick item,2019-10-24 07:45:13.000Z, ,"['883669']", , , ,0.483,79.99 +9801.0,pick item,2019-10-24 07:45:53.000Z, ,"['883502']", , , ,0.28,89.99 +9802.0,confirm order,2019-10-24 07:48:48.000Z, , ,"['990899']", , ,1.76,234.98 +9803.0,send package,2019-10-24 08:01:02.000Z, , , ,"['660566']", ,0.21,529.0 +9804.0,pick item,2019-10-24 08:13:15.000Z, ,"['883653']", , , ,0.483,1099.0 +9805.0,pick item,2019-10-24 08:14:11.000Z, ,"['883626']", , , ,0.166,799.0 +9806.0,item out of stock,2019-10-24 08:14:52.000Z, ,"['883564']", , , ,0.2,39.99 +9807.0,package delivered,2019-10-24 08:19:16.000Z, , , ,"['660564']", ,3.529,4394.97 +9808.0,pick item,2019-10-24 08:20:51.000Z, ,"['883345']", , , ,0.98,129.99 +9809.0,reorder item,2019-10-24 08:22:05.000Z, ,"['883605']", , , ,0.188,1149.0 +9810.0,item out of stock,2019-10-24 08:28:39.000Z, ,"['883636']", , , ,0.28,449.0 +9811.0,pay order,2019-10-24 08:46:32.000Z, , ,"['990858']", , ,1.15,912.99 +9812.0,pick item,2019-10-24 08:53:49.000Z, ,"['883659']", , , ,0.38,29.99 +9813.0,create package,2019-10-24 08:53:49.000Z, ,"['883549','883610','883611']", ,"['660571']", ,1.97,758.98 +9814.0,send package,2019-10-24 08:54:47.000Z, , , ,"['660571']", ,1.97,758.98 +9815.0,place order,2019-10-24 08:55:23.000Z, ,"['883675','883674','883676']","['990915']", , ,2.322,3303.99 +9816.0,confirm order,2019-10-24 08:56:14.000Z, , ,"['990901']", , ,1.143,1582.99 +9817.0,pick item,2019-10-24 08:57:50.000Z, ,"['883661']", , , ,1.48,199.99 +9818.0,pick item,2019-10-24 08:58:54.000Z, ,"['883649']", , , ,0.483,495.0 +9819.0,send package,2019-10-24 09:10:16.000Z, , , ,"['660569']", ,1.94,229.97 +9820.0,confirm order,2019-10-24 09:12:51.000Z, , ,"['990914']", , ,2.202,3003.99 +9821.0,confirm order,2019-10-24 09:14:07.000Z, , ,"['990911']", , ,1.5830000000000002,1039.98 +9822.0,confirm order,2019-10-24 09:18:05.000Z, , ,"['990913']", , ,3.185,3133.98 +9823.0,confirm order,2019-10-24 09:18:23.000Z, , ,"['990898']", , ,2.043,1702.99 +9824.0,reorder item,2019-10-24 09:19:13.000Z, ,"['883564']", , , ,0.2,39.99 +9825.0,pay order,2019-10-24 09:31:44.000Z, , ,"['990910']", , ,2.025,4303.0 +9826.0,package delivered,2019-10-24 09:33:01.000Z, , , ,"['660568']", ,2.204,1617.97 +9827.0,pay order,2019-10-24 09:39:27.000Z, , ,"['990859']", , ,3.74,484.97 +9828.0,reorder item,2019-10-24 09:39:38.000Z, ,"['883642']", , , ,0.88,89.99 +9829.0,item out of stock,2019-10-24 09:40:15.000Z, ,"['883586']", , , ,0.44,476.0 +9830.0,failed delivery,2019-10-24 09:50:46.000Z, , , ,"['660559']", ,6.101,3340.96 +9831.0,pick item,2019-10-24 09:56:16.000Z, ,"['883657']", , , ,0.483,79.99 +9832.0,create package,2019-10-24 09:56:16.000Z, ,"['883533','883528','883570','883412','883529']", ,"['660572']", ,3.502,3528.97 +9833.0,payment reminder,2019-10-24 10:05:36.000Z, , ,"['990800']", , ,3.785,3928.98 +9834.0,item out of stock,2019-10-24 10:41:14.000Z, ,"['883676']", , , ,0.78,99.99 +9835.0,pick item,2019-10-24 10:59:13.000Z, ,"['883671']", , , ,0.78,99.99 +9836.0,pick item,2019-10-24 11:00:08.000Z, ,"['883249']", , , ,0.172,699.0 +9837.0,pay order,2019-10-24 11:06:32.000Z, , ,"['990875']", , ,2.363,1522.98 +9838.0,pay order,2019-10-24 11:06:37.000Z, , ,"['990908']", , ,3.593,1907.96 +9839.0,place order,2019-10-24 11:10:33.000Z, ,"['883682','883679','883677','883680','883678','883681']","['990916']", , ,3.139,3001.97 +9840.0,pay order,2019-10-24 11:17:38.000Z, , ,"['990797']", , ,1.76,653.99 +9841.0,pick item,2019-10-24 11:35:26.000Z, ,"['883621']", , , ,0.88,89.99 +9842.0,item out of stock,2019-10-24 11:52:53.000Z, ,"['883682']", , , ,0.21,529.0 +9843.0,pick item,2019-10-24 12:25:46.000Z, ,"['883678']", , , ,0.483,79.99 +9844.0,reorder item,2019-10-24 12:39:23.000Z, ,"['883599']", , , ,1.28,149.99 +9845.0,place order,2019-10-24 12:40:54.000Z, ,"['883685','883684','883683']","['990917']", , ,2.555,383.98 +9846.0,package delivered,2019-10-24 12:51:56.000Z, , , ,"['660559']", ,6.101,3340.96 +9847.0,pick item,2019-10-24 12:52:25.000Z, ,"['883640']", , , ,0.483,79.99 +9848.0,create package,2019-10-24 12:52:25.000Z, ,"['883617','883613','883614']", ,"['660573']", ,2.338,3748.99 +9849.0,pick item,2019-10-24 12:57:00.000Z, ,"['883677']", , , ,0.2,39.99 +9850.0,pay order,2019-10-24 13:03:32.000Z, , ,"['990899']", , ,1.76,234.98 +9851.0,failed delivery,2019-10-24 13:04:47.000Z, , , ,"['660561']", ,3.254,3155.97 +9852.0,package delivered,2019-10-24 13:09:38.000Z, , , ,"['660566']", ,0.21,529.0 +9853.0,pay order,2019-10-24 13:10:18.000Z, , ,"['990894']", , ,0.495,134.0 +9854.0,pick item,2019-10-24 13:11:08.000Z, ,"['883592']", , , ,0.98,129.99 +9855.0,pick item,2019-10-24 13:15:45.000Z, ,"['883635']", , , ,0.98,129.99 +9856.0,create package,2019-10-24 13:15:45.000Z, ,"['883633','883609','883607','883608','883635','883520','883523']", ,"['660574']", ,4.4860000000000015,3066.96 +9857.0,send package,2019-10-24 13:18:50.000Z, , , ,"['660570']", ,4.738,6304.98 +9858.0,send package,2019-10-24 13:19:00.000Z, , , ,"['660567']", ,1.655,308.98 +9859.0,package delivered,2019-10-24 13:27:30.000Z, , , ,"['660569']", ,1.94,229.97 +9860.0,pick item,2019-10-24 13:31:54.000Z, ,"['883585']", , , ,1.25,2200.0 +9861.0,pay order,2019-10-24 13:35:12.000Z, , ,"['990897']", , ,1.52,1982.98 +9862.0,pick item,2019-10-24 13:36:47.000Z, ,"['883240']", , , ,0.44,476.0 +9863.0,pick item,2019-10-24 13:37:18.000Z, ,"['883647']", , , ,0.28,89.99 +9864.0,pick item,2019-10-24 14:10:45.000Z, ,"['883664']", , , ,0.28,449.0 +9865.0,pick item,2019-10-24 14:13:05.000Z, ,"['883680']", , , ,0.483,1099.0 +9866.0,pick item,2019-10-24 14:28:28.000Z, ,"['883665']", , , ,1.48,199.99 +9867.0,item out of stock,2019-10-24 14:33:16.000Z, ,"['883658']", , , ,0.44,476.0 +9868.0,place order,2019-10-24 14:41:35.000Z, ,"['883687','883690','883689','883691','883686','883688']","['990918']", , ,3.072,6140.99 +9869.0,pick item,2019-10-24 14:47:47.000Z, ,"['883532']", , , ,0.483,495.0 +9870.0,create package,2019-10-24 14:47:47.000Z, ,"['883606','883669','883604','883603','883511','883488','883490']", ,"['660575']", ,3.988,2132.96 +9871.0,package delivered,2019-10-24 14:52:00.000Z, , , ,"['660561']", ,3.254,3155.97 +9872.0,pick item,2019-10-24 14:54:12.000Z, ,"['883221']", , , ,0.21,529.0 +9873.0,pay order,2019-10-24 14:54:53.000Z, , ,"['990912']", , ,4.674,3026.97 +9874.0,pick item,2019-10-24 15:08:12.000Z, ,"['883656']", , , ,0.28,449.0 +9875.0,package delivered,2019-10-24 15:20:27.000Z, , , ,"['660555']", ,3.195,6294.99 +9876.0,reorder item,2019-10-24 15:24:02.000Z, ,"['883623']", , , ,0.483,495.0 +9877.0,pick item,2019-10-24 15:37:36.000Z, ,"['883667']", , , ,0.172,699.0 +9878.0,pick item,2019-10-24 15:39:06.000Z, ,"['883662']", , , ,0.28,449.0 +9879.0,pick item,2019-10-24 15:57:27.000Z, ,"['883646']", , , ,0.21,529.0 +9880.0,confirm order,2019-10-24 16:09:00.000Z, , ,"['990915']", , ,2.322,3303.99 +9881.0,pick item,2019-10-24 16:09:05.000Z, ,"['883178']", , , ,0.483,79.99 +9882.0,confirm order,2019-10-24 16:14:05.000Z, , ,"['990916']", , ,3.139,3001.97 +9883.0,send package,2019-10-24 16:21:42.000Z, , , ,"['660574']", ,4.4860000000000015,3066.96 +9884.0,pick item,2019-10-24 16:27:07.000Z, ,"['882931']", , , ,0.88,89.99 +9885.0,create package,2019-10-24 16:27:07.000Z, ,"['883629','883628','883659','883249','883503','883585','883583','883542','883656','883582','883657','883627']", ,"['660576']", ,6.367999999999999,7050.95 +9886.0,item out of stock,2019-10-24 16:35:25.000Z, ,"['883612']", , , ,0.188,1149.0 +9887.0,place order,2019-10-24 16:42:58.000Z, ,"['883692','883694','883695','883693']","['990919']", , ,2.05,4529.0 +9888.0,pick item,2019-10-24 17:57:14.000Z, ,"['883545']", , , ,0.21,529.0 +9889.0,place order,2019-10-24 19:48:29.000Z, ,"['883696','883700','883698','883699','883697']","['990920']", , ,3.1060000000000003,1258.97 +9890.0,place order,2019-10-25 05:08:48.000Z, ,"['883701','883703','883705','883702','883704']","['990921']", , ,3.491,5973.98 +9891.0,pick item,2019-10-25 07:12:26.000Z, ,"['883666']", , , ,0.483,495.0 +9892.0,pick item,2019-10-25 07:22:06.000Z, ,"['883672']", , , ,1.25,2200.0 +9893.0,pick item,2019-10-25 07:44:25.000Z, ,"['883679']", , , ,0.483,1099.0 +9894.0,place order,2019-10-25 07:53:28.000Z, ,"['883706','883707','883708']","['990922']", , ,2.86,3183.99 +9895.0,package delivered,2019-10-25 08:04:50.000Z, , , ,"['660571']", ,1.97,758.98 +9896.0,reorder item,2019-10-25 08:09:21.000Z, ,"['883602']", , , ,0.188,1149.0 +9897.0,package delivered,2019-10-25 08:14:41.000Z, , , ,"['660567']", ,1.655,308.98 +9898.0,pick item,2019-10-25 08:22:35.000Z, ,"['883685']", , , ,0.78,99.99 +9899.0,pick item,2019-10-25 08:23:21.000Z, ,"['883687']", , , ,0.188,1149.0 +9900.0,confirm order,2019-10-25 08:38:03.000Z, , ,"['990917']", , ,2.555,383.98 +9901.0,send package,2019-10-25 08:43:34.000Z, , , ,"['660575']", ,3.988,2132.96 +9902.0,package delivered,2019-10-25 08:46:48.000Z, , , ,"['660570']", ,4.738,6304.98 +9903.0,pick item,2019-10-25 08:49:22.000Z, ,"['883639']", , , ,0.188,1149.0 +9904.0,item out of stock,2019-10-25 08:54:58.000Z, ,"['883688']", , , ,0.88,89.99 +9905.0,pick item,2019-10-25 08:55:42.000Z, ,"['883386']", , , ,0.172,699.0 +9906.0,pick item,2019-10-25 08:58:32.000Z, ,"['883564']", , , ,0.2,39.99 +9907.0,package delivered,2019-10-25 09:13:41.000Z, , , ,"['660574']", ,4.4860000000000015,3066.96 +9908.0,pick item,2019-10-25 09:18:52.000Z, ,"['883357']", , , ,0.38,29.99 +9909.0,pick item,2019-10-25 09:19:00.000Z, ,"['883591']", , , ,0.21,529.0 +9910.0,pick item,2019-10-25 09:26:59.000Z, ,"['883701']", , , ,1.25,2200.0 +9911.0,create package,2019-10-25 09:26:59.000Z, ,"['883631','883630','883572','883556','883576','883632','883573']", ,"['660577']", ,2.824,2512.96 +9912.0,pick item,2019-10-25 09:38:31.000Z, ,"['883654']", , , ,0.172,699.0 +9913.0,pay order,2019-10-25 09:43:54.000Z, , ,"['990903']", , ,2.526,1093.98 +9914.0,package delivered,2019-10-25 09:50:27.000Z, , , ,"['660575']", ,3.988,2132.96 +9915.0,pick item,2019-10-25 09:59:03.000Z, ,"['883700']", , , ,0.38,29.99 +9916.0,item out of stock,2019-10-25 10:00:52.000Z, ,"['883705']", , , ,0.2,39.99 +9917.0,pay order,2019-10-25 10:03:29.000Z, , ,"['990916']", , ,3.139,3001.97 +9918.0,place order,2019-10-25 10:06:43.000Z, ,"['883709','883710','883711']","['990923']", , ,0.618,1952.0 +9919.0,pick item,2019-10-25 10:18:47.000Z, ,"['883699']", , , ,0.483,79.99 +9920.0,item out of stock,2019-10-25 10:24:35.000Z, ,"['883587']", , , ,0.78,99.99 +9921.0,pick item,2019-10-25 10:34:48.000Z, ,"['883694']", , , ,1.25,2200.0 +9922.0,send package,2019-10-25 10:38:54.000Z, , , ,"['660577']", ,2.824,2512.96 +9923.0,send package,2019-10-25 10:56:17.000Z, , , ,"['660576']", ,6.367999999999999,7050.95 +9924.0,pick item,2019-10-25 11:22:34.000Z, ,"['883260']", , , ,0.21,529.0 +9925.0,place order,2019-10-25 11:33:14.000Z, ,"['883712','883716','883713','883714','883717','883715']","['990924']", , ,4.023,1702.96 +9926.0,pick item,2019-10-25 11:57:48.000Z, ,"['883625']", , , ,0.172,699.0 +9927.0,confirm order,2019-10-25 12:31:24.000Z, , ,"['990920']", , ,3.1060000000000003,1258.97 +9928.0,pick item,2019-10-25 12:37:12.000Z, ,"['883651']", , , ,0.2,39.99 +9929.0,create package,2019-10-25 12:37:12.000Z, ,"['883637','883638']", ,"['660578']", ,1.66,189.98 +9930.0,reorder item,2019-10-25 12:42:36.000Z, ,"['883636']", , , ,0.28,449.0 +9931.0,pick item,2019-10-25 12:51:24.000Z, ,"['883589']", , , ,0.21,529.0 +9932.0,pick item,2019-10-25 13:00:12.000Z, ,"['883605']", , , ,0.188,1149.0 +9933.0,create package,2019-10-25 13:00:12.000Z, ,"['883328','883589','883680','883679','883386','883678','883677']", ,"['660579']", ,2.219,4694.98 +9934.0,send package,2019-10-25 13:09:19.000Z, , , ,"['660572']", ,3.502,3528.97 +9935.0,pay order,2019-10-25 13:14:56.000Z, , ,"['990914']", , ,2.202,3003.99 +9936.0,place order,2019-10-25 13:26:15.000Z, ,"['883718','883719','883721','883720']","['990925']", , ,2.218,3773.98 +9937.0,package delivered,2019-10-25 13:33:28.000Z, , , ,"['660572']", ,3.502,3528.97 +9938.0,pay order,2019-10-25 13:35:20.000Z, , ,"['990850']", , ,0.8490000000000001,1942.99 +9939.0,item out of stock,2019-10-25 13:36:45.000Z, ,"['883691']", , , ,0.28,449.0 +9940.0,pick item,2019-10-25 13:41:40.000Z, ,"['883527']", , , ,0.483,495.0 +9941.0,pick item,2019-10-25 13:44:36.000Z, ,"['883712']", , , ,1.48,199.99 +9942.0,pick item,2019-10-25 13:47:21.000Z, ,"['883702']", , , ,0.483,79.99 +9943.0,package delivered,2019-10-25 13:56:00.000Z, , , ,"['660577']", ,2.824,2512.96 +9944.0,pick item,2019-10-25 13:59:04.000Z, ,"['883714']", , , ,0.2,39.99 +9945.0,pick item,2019-10-25 14:02:24.000Z, ,"['883693']", , , ,0.188,1149.0 +9946.0,pick item,2019-10-25 14:03:57.000Z, ,"['883690']", , , ,0.188,1149.0 +9947.0,pick item,2019-10-25 14:07:23.000Z, ,"['883689']", , , ,1.37,2500.0 +9948.0,create package,2019-10-25 14:07:23.000Z, ,"['883652','883639','883643','883651','883415','883640']", ,"['660580']", ,3.5410000000000004,2127.96 +9949.0,confirm order,2019-10-25 14:17:49.000Z, , ,"['990919']", , ,2.05,4529.0 +9950.0,failed delivery,2019-10-25 14:21:59.000Z, , , ,"['660576']", ,6.367999999999999,7050.95 +9951.0,confirm order,2019-10-25 14:27:02.000Z, , ,"['990918']", , ,3.072,6140.99 +9952.0,pay order,2019-10-25 14:27:02.000Z, , ,"['990868']", , ,1.5730000000000002,1118.99 +9953.0,pick item,2019-10-25 14:29:41.000Z, ,"['883706']", , , ,1.28,149.99 +9954.0,pick item,2019-10-25 14:37:42.000Z, ,"['883711']", , , ,0.166,799.0 +9955.0,reorder item,2019-10-25 14:45:19.000Z, ,"['883705']", , , ,0.2,39.99 +9956.0,pick item,2019-10-25 14:53:53.000Z, ,"['883481']", , , ,0.495,129.0 +9957.0,pick item,2019-10-25 15:11:26.000Z, ,"['883660']", , , ,0.483,79.99 +9958.0,pick item,2019-10-25 15:11:44.000Z, ,"['883668']", , , ,1.28,149.99 +9959.0,place order,2019-10-25 15:12:17.000Z, ,"['883723','883722']","['990926']", , ,1.046,893.99 +9960.0,reorder item,2019-10-25 15:16:35.000Z, ,"['883514']", , , ,0.188,1149.0 +9961.0,reorder item,2019-10-25 15:19:44.000Z, ,"['883688']", , , ,0.88,89.99 +9962.0,confirm order,2019-10-25 15:55:03.000Z, , ,"['990922']", , ,2.86,3183.99 +9963.0,item out of stock,2019-10-25 16:33:01.000Z, ,"['883655']", , , ,1.37,2500.0 +9964.0,place order,2019-10-25 16:44:22.000Z, ,"['883724']","['990927']", , ,0.495,134.0 +9965.0,send package,2019-10-25 18:11:33.000Z, , , ,"['660573']", ,2.338,3748.99 +9966.0,place order,2019-10-25 19:52:41.000Z, ,"['883726','883725']","['990928']", , ,2.25,2594.99 +9967.0,confirm order,2019-10-25 20:05:38.000Z, , ,"['990923']", , ,0.618,1952.0 +9968.0,place order,2019-10-26 13:16:00.000Z, ,"['883727','883728','883729']","['990929']", , ,1.203,1009.99 +9969.0,create package,2019-10-26 23:00:00.000Z, ,"['883502','883463','883592','883591','883221','883357']", ,"['660581']", ,3.31,3507.97 +9970.0,payment reminder,2019-10-27 08:10:56.000Z, , ,"['990807']", , ,2.846,1539.97 +9971.0,place order,2019-10-27 14:19:54.000Z, ,"['883730','883734','883735','883732','883733','883731']","['990930']", , ,2.152,3547.98 +9972.0,place order,2019-10-28 06:51:42.000Z, ,"['883736','883737']","['990931']", , ,1.5419999999999998,3204.0 +9973.0,pick item,2019-10-28 07:31:17.000Z, ,"['883735']", , , ,0.44,476.0 +9974.0,reorder item,2019-10-28 07:43:58.000Z, ,"['883586']", , , ,0.44,476.0 +9975.0,confirm order,2019-10-28 08:16:22.000Z, , ,"['990925']", , ,2.218,3773.98 +9976.0,send package,2019-10-28 08:18:09.000Z, , , ,"['660579']", ,2.219,4694.98 +9977.0,confirm order,2019-10-28 08:39:04.000Z, , ,"['990929']", , ,1.203,1009.99 +9978.0,pick item,2019-10-28 08:46:49.000Z, ,"['883451']", , , ,0.483,79.99 +9979.0,pick item,2019-10-28 08:48:48.000Z, ,"['883724']", , , ,0.495,129.0 +9980.0,pick item,2019-10-28 08:50:48.000Z, ,"['883616']", , , ,1.28,149.99 +9981.0,confirm order,2019-10-28 08:54:26.000Z, , ,"['990927']", , ,0.495,134.0 +9982.0,pay order,2019-10-28 09:04:40.000Z, , ,"['990895']", , ,3.663,2511.98 +9983.0,pay order,2019-10-28 09:05:50.000Z, , ,"['990800']", , ,3.785,3928.98 +9984.0,confirm order,2019-10-28 09:12:53.000Z, , ,"['990928']", , ,2.25,2594.99 +9985.0,pick item,2019-10-28 09:17:54.000Z, ,"['883644']", , , ,1.28,149.99 +9986.0,item out of stock,2019-10-28 09:27:00.000Z, ,"['883650']", , , ,0.28,89.99 +9987.0,confirm order,2019-10-28 09:32:49.000Z, , ,"['990930']", , ,2.152,3547.98 +9988.0,place order,2019-10-28 09:40:39.000Z, ,"['883740','883738','883739']","['990932']", , ,2.108,1829.99 +9989.0,pick item,2019-10-28 09:42:17.000Z, ,"['883719']", , , ,0.188,1149.0 +9990.0,pick item,2019-10-28 09:45:33.000Z, ,"['883634']", , , ,0.38,29.99 +9991.0,create package,2019-10-28 09:45:33.000Z, ,"['883653','883719','883647','883645','883260','883646','883649','883654','883644']", ,"['660582']", ,3.5860000000000003,5188.98 +9992.0,pick item,2019-10-28 09:53:29.000Z, ,"['883710']", , , ,0.172,699.0 +9993.0,pick item,2019-10-28 10:06:51.000Z, ,"['883707']", , , ,1.37,2500.0 +9994.0,pay order,2019-10-28 10:19:41.000Z, , ,"['990904']", , ,0.6679999999999999,1283.98 +9995.0,pick item,2019-10-28 10:26:20.000Z, ,"['883737']", , , ,0.172,699.0 +9996.0,pay order,2019-10-28 10:27:29.000Z, , ,"['990902']", , ,2.636,2692.99 +9997.0,pick item,2019-10-28 10:29:18.000Z, ,"['883728']", , , ,0.483,79.99 +9998.0,pay order,2019-10-28 10:30:29.000Z, , ,"['990861']", , ,1.802,2933.99 +9999.0,pay order,2019-10-28 10:49:02.000Z, , ,"['990807']", , ,2.846,1539.97 +10000.0,pick item,2019-10-28 10:52:08.000Z, ,"['883602']", , , ,0.188,1149.0 +10001.0,pay order,2019-10-28 11:01:30.000Z, , ,"['990906']", , ,1.94,643.98 +10002.0,pick item,2019-10-28 11:08:04.000Z, ,"['883715']", , , ,1.28,149.99 +10003.0,reorder item,2019-10-28 11:16:21.000Z, ,"['883650']", , , ,0.28,89.99 +10004.0,pick item,2019-10-28 11:16:28.000Z, ,"['883675']", , , ,1.37,2500.0 +10005.0,send package,2019-10-28 11:20:20.000Z, , , ,"['660582']", ,3.5860000000000003,5188.98 +10006.0,item out of stock,2019-10-28 11:29:19.000Z, ,"['883674']", , , ,0.172,699.0 +10007.0,pay order,2019-10-28 11:29:47.000Z, , ,"['990922']", , ,2.86,3183.99 +10008.0,place order,2019-10-28 11:41:06.000Z, ,"['883744','883741','883742','883743']","['990933']", , ,3.613,3833.98 +10009.0,pick item,2019-10-28 11:41:56.000Z, ,"['883697']", , , ,0.28,449.0 +10010.0,item out of stock,2019-10-28 11:45:35.000Z, ,"['883698']", , , ,1.48,199.99 +10011.0,pick item,2019-10-28 12:00:58.000Z, ,"['883716']", , , ,0.38,29.99 +10012.0,create package,2019-10-28 12:00:58.000Z, ,"['883408','883710','883564','883711']", ,"['660583']", ,1.818,1687.98 +10013.0,pick item,2019-10-28 12:23:28.000Z, ,"['883623']", , , ,0.483,495.0 +10014.0,item out of stock,2019-10-28 12:44:27.000Z, ,"['883683']", , , ,1.28,149.99 +10015.0,item out of stock,2019-10-28 12:57:21.000Z, ,"['883670']", , , ,1.25,2200.0 +10016.0,pick item,2019-10-28 12:57:57.000Z, ,"['883688']", , , ,0.88,89.99 +10017.0,item out of stock,2019-10-28 13:18:51.000Z, ,"['883709']", , , ,0.28,449.0 +10018.0,package delivered,2019-10-28 13:23:14.000Z, , , ,"['660576']", ,6.367999999999999,7050.95 +10019.0,payment reminder,2019-10-28 13:31:08.000Z, , ,"['990822']", , ,1.21,1548.99 +10020.0,place order,2019-10-28 13:41:59.000Z, ,"['883746','883748','883747','883745']","['990934']", , ,3.806,1243.97 +10021.0,pick item,2019-10-28 13:51:49.000Z, ,"['883696']", , , ,0.483,495.0 +10022.0,pick item,2019-10-28 13:54:27.000Z, ,"['883681']", , , ,1.28,149.99 +10023.0,create package,2019-10-28 13:54:27.000Z, ,"['883626','883345','883675','883623','883621','883178','883625','883451']", ,"['660584']", ,5.017,4872.96 +10024.0,payment reminder,2019-10-28 14:08:16.000Z, , ,"['990823']", , ,3.143,454.96 +10025.0,pick item,2019-10-28 14:12:28.000Z, ,"['883732']", , , ,0.483,1099.0 +10026.0,confirm order,2019-10-28 14:43:38.000Z, , ,"['990932']", , ,2.108,1829.99 +10027.0,pick item,2019-10-28 14:47:21.000Z, ,"['883742']", , , ,0.98,129.99 +10028.0,pick item,2019-10-28 14:58:12.000Z, ,"['883641']", , , ,0.483,79.99 +10029.0,confirm order,2019-10-28 15:17:01.000Z, , ,"['990921']", , ,3.491,5973.98 +10030.0,pick item,2019-10-28 15:18:15.000Z, ,"['883722']", , , ,0.88,89.99 +10031.0,reorder item,2019-10-28 15:20:48.000Z, ,"['883683']", , , ,1.28,149.99 +10032.0,pay order,2019-10-28 15:28:04.000Z, , ,"['990871']", , ,1.646,1003.99 +10033.0,item out of stock,2019-10-28 15:28:43.000Z, ,"['883684']", , , ,0.495,129.0 +10034.0,reorder item,2019-10-28 15:32:16.000Z, ,"['883698']", , , ,1.48,199.99 +10035.0,reorder item,2019-10-28 15:41:22.000Z, ,"['883587']", , , ,0.78,99.99 +10036.0,place order,2019-10-28 15:43:46.000Z, ,"['883755','883749','883753','883752','883751','883750','883754']","['990935']", , ,4.001,4937.98 +10037.0,pick item,2019-10-28 15:47:28.000Z, ,"['883744']", , , ,0.78,99.99 +10038.0,pick item,2019-10-28 15:48:55.000Z, ,"['883747']", , , ,0.166,799.0 +10039.0,reorder item,2019-10-28 15:57:13.000Z, ,"['883684']", , , ,0.495,129.0 +10040.0,send package,2019-10-28 16:03:41.000Z, , , ,"['660578']", ,1.66,189.98 +10041.0,pick item,2019-10-28 16:10:01.000Z, ,"['883734']", , , ,0.483,1099.0 +10042.0,pick item,2019-10-28 16:28:09.000Z, ,"['883713']", , , ,0.495,129.0 +10043.0,create package,2019-10-28 16:28:09.000Z, ,"['883481','883665','883660','883662','883666','883661','883664','883602']", ,"['660585']", ,5.169,3150.97 +10044.0,pick item,2019-10-28 16:44:10.000Z, ,"['883473']", , , ,1.48,199.99 +10045.0,package delivered,2019-10-28 17:05:28.000Z, , , ,"['660579']", ,2.219,4694.98 +10046.0,send package,2019-10-28 17:08:45.000Z, , , ,"['660583']", ,1.818,1687.98 +10047.0,reorder item,2019-10-28 17:22:40.000Z, ,"['883676']", , , ,0.78,99.99 +10048.0,payment reminder,2019-10-28 17:31:58.000Z, , ,"['990806']", , ,0.78,104.99 +10049.0,place order,2019-10-28 17:47:19.000Z, ,"['883757','883758','883760','883759','883756']","['990936']", , ,4.673,3643.97 +10050.0,reorder item,2019-10-28 17:59:56.000Z, ,"['883655']", , , ,1.37,2500.0 +10051.0,pick item,2019-10-28 18:10:09.000Z, ,"['883730']", , , ,0.38,29.99 +10052.0,send package,2019-10-28 18:17:41.000Z, , , ,"['660580']", ,3.5410000000000004,2127.96 +10053.0,pick item,2019-10-28 18:19:41.000Z, ,"['883560']", , , ,1.25,2200.0 +10054.0,pick item,2019-10-28 18:43:06.000Z, ,"['883748']", , , ,1.28,149.99 +10055.0,send package,2019-10-28 19:02:08.000Z, , , ,"['660584']", ,5.017,4872.96 +10056.0,confirm order,2019-10-28 19:17:28.000Z, , ,"['990926']", , ,1.046,893.99 +10057.0,pick item,2019-10-28 19:43:50.000Z, ,"['883749']", , , ,0.166,799.0 +10058.0,pick item,2019-10-28 19:53:10.000Z, ,"['883062']", , , ,0.78,99.99 +10059.0,place order,2019-10-28 21:01:32.000Z, ,"['883761','883762']","['990937']", , ,2.06,254.98 +10060.0,pick item,2019-10-28 21:08:15.000Z, ,"['883718']", , , ,0.38,29.99 +10061.0,place order,2019-10-29 06:27:06.000Z, ,"['883765','883764','883763']","['990938']", , ,0.564,2482.0 +10062.0,failed delivery,2019-10-29 07:09:39.000Z, , , ,"['660583']", ,1.818,1687.98 +10063.0,package delivered,2019-10-29 07:18:20.000Z, , , ,"['660584']", ,5.017,4872.96 +10064.0,package delivered,2019-10-29 07:36:06.000Z, , , ,"['660578']", ,1.66,189.98 +10065.0,confirm order,2019-10-29 07:57:22.000Z, , ,"['990938']", , ,0.564,2482.0 +10066.0,confirm order,2019-10-29 08:00:38.000Z, , ,"['990936']", , ,4.673,3643.97 +10067.0,pay order,2019-10-29 08:13:49.000Z, , ,"['990855']", , ,2.41,2334.98 +10068.0,send package,2019-10-29 08:19:02.000Z, , , ,"['660581']", ,3.31,3507.97 +10069.0,pick item,2019-10-29 08:41:14.000Z, ,"['883752']", , , ,0.44,476.0 +10070.0,create package,2019-10-29 08:41:14.000Z, ,"['883560','883671','883722','883672']", ,"['660586']", ,4.16,4589.98 +10071.0,send package,2019-10-29 08:41:33.000Z, , , ,"['660586']", ,4.16,4589.98 +10072.0,confirm order,2019-10-29 08:42:16.000Z, , ,"['990896']", , ,0.354,1953.0 +10073.0,send package,2019-10-29 08:55:16.000Z, , , ,"['660585']", ,5.169,3150.97 +10074.0,pick item,2019-10-29 08:57:32.000Z, ,"['883758']", , , ,1.28,149.99 +10075.0,pick item,2019-10-29 09:02:52.000Z, ,"['883720']", , , ,0.28,89.99 +10076.0,place order,2019-10-29 09:13:36.000Z, ,"['883767','883766']","['990939']", , ,1.4680000000000002,1303.99 +10077.0,pick item,2019-10-29 09:19:20.000Z, ,"['883721']", , , ,1.37,2500.0 +10078.0,pick item,2019-10-29 09:21:23.000Z, ,"['883655']", , , ,1.37,2500.0 +10079.0,create package,2019-10-29 09:21:23.000Z, ,"['883685','883240']", ,"['660587']", ,1.22,575.99 +10080.0,failed delivery,2019-10-29 09:25:32.000Z, , , ,"['660573']", ,2.338,3748.99 +10081.0,pick item,2019-10-29 09:26:21.000Z, ,"['883740']", , , ,0.44,476.0 +10082.0,pay order,2019-10-29 09:36:45.000Z, , ,"['990923']", , ,0.618,1952.0 +10083.0,confirm order,2019-10-29 09:43:18.000Z, , ,"['990935']", , ,4.001,4937.98 +10084.0,pick item,2019-10-29 09:47:56.000Z, ,"['883587']", , , ,0.78,99.99 +10085.0,create package,2019-10-29 09:47:56.000Z, ,"['883532','883694','883737','883724','883693']", ,"['660588']", ,2.588,4672.0 +10086.0,pay order,2019-10-29 09:52:01.000Z, , ,"['990883']", , ,2.168,872.98 +10087.0,reorder item,2019-10-29 09:53:43.000Z, ,"['883612']", , , ,0.188,1149.0 +10088.0,pick item,2019-10-29 09:58:32.000Z, ,"['883754']", , , ,0.21,529.0 +10089.0,pick item,2019-10-29 10:34:55.000Z, ,"['883733']", , , ,0.2,39.99 +10090.0,pay order,2019-10-29 10:37:47.000Z, , ,"['990905']", , ,2.14,264.97 +10091.0,pick item,2019-10-29 10:41:48.000Z, ,"['883736']", , , ,1.37,2500.0 +10092.0,place order,2019-10-29 10:46:59.000Z, ,"['883771','883768','883770','883772','883769']","['990940']", , ,4.36,1010.96 +10093.0,confirm order,2019-10-29 10:51:59.000Z, , ,"['990934']", , ,3.806,1243.97 +10094.0,pick item,2019-10-29 11:09:31.000Z, ,"['883717']", , , ,0.188,1149.0 +10095.0,package delivered,2019-10-29 11:14:00.000Z, , , ,"['660583']", ,1.818,1687.98 +10096.0,pay order,2019-10-29 11:14:06.000Z, , ,"['990781']", , ,3.14,374.97 +10097.0,package delivered,2019-10-29 11:46:50.000Z, , , ,"['660580']", ,3.5410000000000004,2127.96 +10098.0,failed delivery,2019-10-29 12:20:59.000Z, , , ,"['660573']", ,2.338,3748.99 +10099.0,send package,2019-10-29 12:40:48.000Z, , , ,"['660587']", ,1.22,575.99 +10100.0,payment reminder,2019-10-29 12:53:25.000Z, , ,"['990716']", , ,2.955,473.97 +10101.0,place order,2019-10-29 12:53:46.000Z, ,"['883782','883777','883779','883780','883773','883775','883781','883774','883778','883776']","['990941']", , ,6.002000000000002,4764.96 +10102.0,confirm order,2019-10-29 13:25:29.000Z, , ,"['990937']", , ,2.06,254.98 +10103.0,payment reminder,2019-10-29 13:37:26.000Z, , ,"['990713']", , ,4.135,573.97 +10104.0,pick item,2019-10-29 13:43:21.000Z, ,"['883765']", , , ,0.21,529.0 +10105.0,create package,2019-10-29 13:43:21.000Z, ,"['883605','883545','883667','883668']", ,"['660589']", ,1.85,2526.99 +10106.0,pick item,2019-10-29 13:52:30.000Z, ,"['883753']", , , ,1.28,149.99 +10107.0,package delivered,2019-10-29 14:06:18.000Z, , , ,"['660587']", ,1.22,575.99 +10108.0,pay order,2019-10-29 14:14:50.000Z, , ,"['990921']", , ,3.491,5973.98 +10109.0,pick item,2019-10-29 14:24:32.000Z, ,"['883781']", , , ,0.78,99.99 +10110.0,package delivered,2019-10-29 14:27:25.000Z, , , ,"['660582']", ,3.5860000000000003,5188.98 +10111.0,pick item,2019-10-29 14:28:12.000Z, ,"['883731']", , , ,0.166,799.0 +10112.0,pick item,2019-10-29 14:53:55.000Z, ,"['883544']", , , ,0.483,79.99 +10113.0,create package,2019-10-29 14:53:55.000Z, ,"['883728','883702','883706','883707','883616','882931','883701']", ,"['660590']", ,7.026,5249.95 +10114.0,package delivered,2019-10-29 15:04:36.000Z, , , ,"['660581']", ,3.31,3507.97 +10115.0,pick item,2019-10-29 15:07:04.000Z, ,"['883776']", , , ,0.483,1099.0 +10116.0,place order,2019-10-29 15:07:19.000Z, ,"['883785','883784','883783']","['990942']", , ,1.97,3130.0 +10117.0,confirm order,2019-10-29 15:10:36.000Z, , ,"['990939']", , ,1.4680000000000002,1303.99 +10118.0,pick item,2019-10-29 15:14:45.000Z, ,"['883779']", , , ,0.483,495.0 +10119.0,pick item,2019-10-29 15:15:43.000Z, ,"['883760']", , , ,1.25,2200.0 +10120.0,pick item,2019-10-29 15:16:46.000Z, ,"['883053']", , , ,1.37,2500.0 +10121.0,package delivered,2019-10-29 15:16:47.000Z, , , ,"['660573']", ,2.338,3748.99 +10122.0,pick item,2019-10-29 15:29:31.000Z, ,"['883755']", , , ,0.172,699.0 +10123.0,item out of stock,2019-10-29 15:44:17.000Z, ,"['883762']", , , ,0.78,99.99 +10124.0,item out of stock,2019-10-29 15:45:40.000Z, ,"['883769']", , , ,0.88,89.99 +10125.0,reorder item,2019-10-29 15:46:34.000Z, ,"['883769']", , , ,0.88,89.99 +10126.0,confirm order,2019-10-29 15:53:56.000Z, , ,"['990931']", , ,1.5419999999999998,3204.0 +10127.0,pick item,2019-10-29 15:54:41.000Z, ,"['883673']", , , ,0.172,699.0 +10128.0,pick item,2019-10-29 15:58:10.000Z, ,"['883695']", , , ,0.172,699.0 +10129.0,create package,2019-10-29 15:58:10.000Z, ,"['883687','883690','883689','883688']", ,"['660591']", ,2.6260000000000003,4887.99 +10130.0,pick item,2019-10-29 16:06:19.000Z, ,"['883683']", , , ,1.28,149.99 +10131.0,send package,2019-10-29 16:14:58.000Z, , , ,"['660588']", ,2.588,4672.0 +10132.0,item out of stock,2019-10-29 16:22:54.000Z, ,"['883750']", , , ,0.483,79.99 +10133.0,place order,2019-10-29 16:34:25.000Z, ,"['883786','883787','883788']","['990943']", , ,3.04,444.97 +10134.0,pick item,2019-10-29 16:38:07.000Z, ,"['883771']", , , ,1.48,199.99 +10135.0,pick item,2019-10-29 16:39:33.000Z, ,"['883705']", , , ,0.2,39.99 +10136.0,reorder item,2019-10-29 16:57:11.000Z, ,"['883709']", , , ,0.28,449.0 +10137.0,package delivered,2019-10-29 16:58:17.000Z, , , ,"['660588']", ,2.588,4672.0 +10138.0,pick item,2019-10-29 16:59:56.000Z, ,"['883782']", , , ,0.495,129.0 +10139.0,create package,2019-10-29 16:59:56.000Z, ,"['883699','883697','883700','883749','883696','883755','883752','883753','883754']", ,"['660592']", ,3.894,3706.97 +10140.0,pick item,2019-10-29 17:04:30.000Z, ,"['883756']", , , ,0.78,99.99 +10141.0,pay order,2019-10-29 17:18:08.000Z, , ,"['990806']", , ,0.78,104.99 +10142.0,pick item,2019-10-29 17:22:10.000Z, ,"['883708']", , , ,0.21,529.0 +10143.0,pick item,2019-10-29 17:37:28.000Z, ,"['883775']", , , ,0.78,99.99 +10144.0,place order,2019-10-29 18:28:38.000Z, ,"['883792','883797','883795','883791','883796','883793','883789','883790','883794']","['990944']", , ,5.615,4395.96 +10145.0,pick item,2019-10-29 19:02:02.000Z, ,"['883612']", , , ,0.188,1149.0 +10146.0,pick item,2019-10-29 19:09:14.000Z, ,"['883113']", , , ,0.172,699.0 +10147.0,reorder item,2019-10-29 19:49:24.000Z, ,"['883674']", , , ,0.172,699.0 +10148.0,pay order,2019-10-29 20:42:06.000Z, , ,"['990915']", , ,2.322,3303.99 +10149.0,reorder item,2019-10-29 21:23:16.000Z, ,"['883658']", , , ,0.44,476.0 +10150.0,place order,2019-10-29 21:36:51.000Z, ,"['883798']","['990945']", , ,0.28,454.0 +10151.0,pick item,2019-10-30 07:35:25.000Z, ,"['883729']", , , ,0.44,476.0 +10152.0,pick item,2019-10-30 07:52:55.000Z, ,"['883663']", , , ,0.188,1149.0 +10153.0,pick item,2019-10-30 07:56:29.000Z, ,"['883498']", , , ,1.48,199.99 +10154.0,send package,2019-10-30 07:57:42.000Z, , , ,"['660589']", ,1.85,2526.99 +10155.0,item out of stock,2019-10-30 07:59:45.000Z, ,"['883757']", , , ,0.88,89.99 +10156.0,confirm order,2019-10-30 08:02:06.000Z, , ,"['990943']", , ,3.04,444.97 +10157.0,place order,2019-10-30 08:05:16.000Z, ,"['883799','883801','883802','883800']","['990946']", , ,3.523,883.97 +10158.0,send package,2019-10-30 08:20:48.000Z, , , ,"['660590']", ,7.026,5249.95 +10159.0,package delivered,2019-10-30 08:29:30.000Z, , , ,"['660586']", ,4.16,4589.98 +10160.0,pick item,2019-10-30 08:36:52.000Z, ,"['883769']", , , ,0.88,89.99 +10161.0,create package,2019-10-30 08:36:52.000Z, ,"['883735','883527','883733','883730','883734','883732','883731','883634']", ,"['660593']", ,3.015,4067.97 +10162.0,confirm order,2019-10-30 08:47:53.000Z, , ,"['990924']", , ,4.023,1702.96 +10163.0,pick item,2019-10-30 08:51:10.000Z, ,"['883727']", , , ,0.28,449.0 +10164.0,pick item,2019-10-30 08:54:09.000Z, ,"['883698']", , , ,1.48,199.99 +10165.0,reorder item,2019-10-30 09:06:34.000Z, ,"['883757']", , , ,0.88,89.99 +10166.0,pick item,2019-10-30 09:08:10.000Z, ,"['883761']", , , ,1.28,149.99 +10167.0,pick item,2019-10-30 09:12:08.000Z, ,"['883783']", , , ,0.28,449.0 +10168.0,item out of stock,2019-10-30 09:15:16.000Z, ,"['883725']", , , ,0.88,89.99 +10169.0,reorder item,2019-10-30 09:22:59.000Z, ,"['883750']", , , ,0.483,79.99 +10170.0,pay order,2019-10-30 09:24:09.000Z, , ,"['990943']", , ,3.04,444.97 +10171.0,pay order,2019-10-30 09:24:28.000Z, , ,"['990900']", , ,4.086,5142.97 +10172.0,place order,2019-10-30 09:30:20.000Z, ,"['883803','883804']","['990947']", , ,0.6829999999999999,539.99 +10173.0,confirm order,2019-10-30 09:40:24.000Z, , ,"['990942']", , ,1.97,3130.0 +10174.0,confirm order,2019-10-30 09:44:21.000Z, , ,"['990941']", , ,6.002000000000002,4764.96 +10175.0,pick item,2019-10-30 09:53:47.000Z, ,"['883309']", , , ,0.28,449.0 +10176.0,send package,2019-10-30 09:58:00.000Z, , , ,"['660593']", ,3.015,4067.97 +10177.0,pick item,2019-10-30 10:16:39.000Z, ,"['883778']", , , ,0.483,1099.0 +10178.0,pick item,2019-10-30 10:27:50.000Z, ,"['883692']", , , ,0.44,476.0 +10179.0,confirm order,2019-10-30 10:28:43.000Z, , ,"['990946']", , ,3.523,883.97 +10180.0,pay order,2019-10-30 10:50:20.000Z, , ,"['990926']", , ,1.046,893.99 +10181.0,pick item,2019-10-30 10:56:36.000Z, ,"['883794']", , , ,0.483,1099.0 +10182.0,create package,2019-10-30 10:56:36.000Z, ,"['883715','883716','883714','883756','883758','883712','883713','883760','883717']", ,"['660594']", ,7.332999999999998,4147.94 +10183.0,pick item,2019-10-30 10:57:33.000Z, ,"['883803']", , , ,0.2,39.99 +10184.0,reorder item,2019-10-30 10:57:55.000Z, ,"['883762']", , , ,0.78,99.99 +10185.0,pick item,2019-10-30 10:59:58.000Z, ,"['883686']", , , ,0.166,799.0 +10186.0,pick item,2019-10-30 11:00:55.000Z, ,"['883788']", , , ,1.28,149.99 +10187.0,pay order,2019-10-30 11:09:49.000Z, , ,"['990939']", , ,1.4680000000000002,1303.99 +10188.0,pick item,2019-10-30 11:15:44.000Z, ,"['883751']", , , ,1.25,2200.0 +10189.0,place order,2019-10-30 11:20:27.000Z, ,"['883806','883807','883805','883808']","['990948']", , ,2.04,1086.98 +10190.0,pick item,2019-10-30 11:28:46.000Z, ,"['883741']", , , ,1.37,2500.0 +10191.0,confirm order,2019-10-30 11:37:50.000Z, , ,"['990933']", , ,3.613,3833.98 +10192.0,package delivered,2019-10-30 11:59:44.000Z, , , ,"['660585']", ,5.169,3150.97 +10193.0,pay order,2019-10-30 12:05:21.000Z, , ,"['990865']", , ,5.524,7749.98 +10194.0,pay order,2019-10-30 12:11:58.000Z, , ,"['990762']", , ,0.655,1803.0 +10195.0,pick item,2019-10-30 12:19:31.000Z, ,"['883799']", , , ,1.48,199.99 +10196.0,confirm order,2019-10-30 12:26:57.000Z, , ,"['990944']", , ,5.615,4395.96 +10197.0,confirm order,2019-10-30 12:30:11.000Z, , ,"['990948']", , ,2.04,1086.98 +10198.0,item out of stock,2019-10-30 12:46:32.000Z, ,"['883703']", , , ,1.37,2500.0 +10199.0,pick item,2019-10-30 12:47:13.000Z, ,"['883789']", , , ,0.98,129.99 +10200.0,pick item,2019-10-30 12:47:47.000Z, ,"['883790']", , , ,0.483,495.0 +10201.0,place order,2019-10-30 13:00:42.000Z, ,"['883811','883809','883810','883812','883813']","['990949']", , ,1.338,2158.98 +10202.0,package delivered,2019-10-30 13:01:34.000Z, , , ,"['660590']", ,7.026,5249.95 +10203.0,item out of stock,2019-10-30 13:08:50.000Z, ,"['883813']", , , ,0.172,699.0 +10204.0,pick item,2019-10-30 13:23:05.000Z, ,"['883786']", , , ,0.28,89.99 +10205.0,create package,2019-10-30 13:23:05.000Z, ,"['883473','883587','883681']", ,"['660595']", ,3.54,449.97 +10206.0,pay order,2019-10-30 13:26:02.000Z, , ,"['990716']", , ,2.955,473.97 +10207.0,confirm order,2019-10-30 13:31:57.000Z, , ,"['990947']", , ,0.6829999999999999,539.99 +10208.0,pick item,2019-10-30 13:46:50.000Z, ,"['883759']", , , ,0.483,1099.0 +10209.0,package delivered,2019-10-30 13:48:38.000Z, , , ,"['660589']", ,1.85,2526.99 +10210.0,item out of stock,2019-10-30 13:48:43.000Z, ,"['883767']", , , ,0.188,1149.0 +10211.0,reorder item,2019-10-30 13:57:52.000Z, ,"['883691']", , , ,0.28,449.0 +10212.0,pay order,2019-10-30 14:03:40.000Z, , ,"['990931']", , ,1.5419999999999998,3204.0 +10213.0,pick item,2019-10-30 14:11:29.000Z, ,"['883792']", , , ,0.88,89.99 +10214.0,place order,2019-10-30 14:21:11.000Z, ,"['883816','883814','883815']","['990950']", , ,2.61,2364.98 +10215.0,pick item,2019-10-30 14:30:43.000Z, ,"['883796']", , , ,0.38,29.99 +10216.0,create package,2019-10-30 14:30:43.000Z, ,"['883744','883741','883742']", ,"['660596']", ,3.13,2729.98 +10217.0,pick item,2019-10-30 14:38:02.000Z, ,"['883764']", , , ,0.166,799.0 +10218.0,pick item,2019-10-30 14:38:55.000Z, ,"['883704']", , , ,0.188,1149.0 +10219.0,send package,2019-10-30 14:52:41.000Z, , , ,"['660596']", ,3.13,2729.98 +10220.0,pick item,2019-10-30 14:53:58.000Z, ,"['883577']", , , ,0.28,89.99 +10221.0,create package,2019-10-30 14:53:58.000Z, ,"['883771','883113','883641','883765','883769','883764']", ,"['660597']", ,3.391,2396.97 +10222.0,pick item,2019-10-30 14:56:49.000Z, ,"['883773']", , , ,1.28,149.99 +10223.0,send package,2019-10-30 14:56:51.000Z, , , ,"['660597']", ,3.391,2396.97 +10224.0,pick item,2019-10-30 15:01:23.000Z, ,"['883806']", , , ,0.38,29.99 +10225.0,send package,2019-10-30 15:01:32.000Z, , , ,"['660595']", ,3.54,449.97 +10226.0,send package,2019-10-30 15:12:47.000Z, , , ,"['660594']", ,7.332999999999998,4147.94 +10227.0,pick item,2019-10-30 15:19:07.000Z, ,"['883766']", , , ,1.28,149.99 +10228.0,pick item,2019-10-30 15:26:39.000Z, ,"['883787']", , , ,1.48,199.99 +10229.0,payment reminder,2019-10-30 15:27:53.000Z, , ,"['990831']", , ,4.378,4835.97 +10230.0,pick item,2019-10-30 15:32:34.000Z, ,"['883745']", , , ,1.48,199.99 +10231.0,send package,2019-10-30 15:35:29.000Z, , , ,"['660591']", ,2.6260000000000003,4887.99 +10232.0,reorder item,2019-10-30 15:41:33.000Z, ,"['883670']", , , ,1.25,2200.0 +10233.0,place order,2019-10-30 16:02:10.000Z, ,"['883818','883817']","['990951']", , ,1.46,2734.0 +10234.0,confirm order,2019-10-30 16:07:16.000Z, , ,"['990940']", , ,4.36,1010.96 +10235.0,pick item,2019-10-30 16:13:56.000Z, ,"['883780']", , , ,0.172,699.0 +10236.0,create package,2019-10-30 16:13:56.000Z, ,"['883748','883782','883779','883780','883773','883775','883781','883778','883747','883721','883720','883740','883718','883776','883655','883745']", ,"['660598']", ,11.722,10615.93 +10237.0,confirm order,2019-10-30 16:18:41.000Z, , ,"['990945']", , ,0.28,454.0 +10238.0,send package,2019-10-30 16:47:30.000Z, , , ,"['660592']", ,3.894,3706.97 +10239.0,pick item,2019-10-30 16:56:40.000Z, ,"['883763']", , , ,0.188,1149.0 +10240.0,place order,2019-10-30 17:24:07.000Z, ,"['883821','883823','883820','883822','883819']","['990952']", , ,3.896,4455.99 +10241.0,item out of stock,2019-10-30 17:28:40.000Z, ,"['883793']", , , ,0.28,449.0 +10242.0,pick item,2019-10-30 17:30:51.000Z, ,"['883810']", , , ,0.28,89.99 +10243.0,pick item,2019-10-30 17:35:53.000Z, ,"['883726']", , , ,1.37,2500.0 +10244.0,package delivered,2019-10-30 18:12:48.000Z, , , ,"['660592']", ,3.894,3706.97 +10245.0,reorder item,2019-10-30 19:09:58.000Z, ,"['883767']", , , ,0.188,1149.0 +10246.0,place order,2019-10-30 19:51:56.000Z, ,"['883825','883827','883824','883826','883828']","['990953']", , ,3.2430000000000003,1612.97 +10247.0,pay order,2019-10-30 20:07:36.000Z, , ,"['990942']", , ,1.97,3130.0 +10248.0,place order,2019-10-31 01:29:30.000Z, ,"['883831','883829','883830']","['990954']", , ,2.216,3383.99 +10249.0,confirm order,2019-10-31 07:44:43.000Z, , ,"['990951']", , ,1.46,2734.0 +10250.0,confirm order,2019-10-31 07:53:45.000Z, , ,"['990950']", , ,2.61,2364.98 +10251.0,pay order,2019-10-31 08:12:07.000Z, , ,"['990938']", , ,0.564,2482.0 +10252.0,pick item,2019-10-31 08:15:21.000Z, ,"['883743']", , , ,0.483,1099.0 +10253.0,pick item,2019-10-31 08:19:09.000Z, ,"['883581']", , , ,0.166,799.0 +10254.0,item out of stock,2019-10-31 08:22:53.000Z, ,"['883784']", , , ,0.44,476.0 +10255.0,package delivered,2019-10-31 08:31:30.000Z, , , ,"['660596']", ,3.13,2729.98 +10256.0,pick item,2019-10-31 08:43:16.000Z, ,"['883795']", , , ,1.48,199.99 +10257.0,reorder item,2019-10-31 08:45:29.000Z, ,"['883813']", , , ,0.172,699.0 +10258.0,pick item,2019-10-31 08:45:54.000Z, ,"['883819']", , , ,1.48,199.99 +10259.0,place order,2019-10-31 08:46:14.000Z, ,"['883833','883837','883836','883834','883835','883832']","['990955']", , ,4.5760000000000005,4962.97 +10260.0,pick item,2019-10-31 09:05:35.000Z, ,"['883738']", , , ,0.188,1149.0 +10261.0,pick item,2019-10-31 09:13:13.000Z, ,"['883723']", , , ,0.166,799.0 +10262.0,pay order,2019-10-31 09:15:33.000Z, , ,"['990907']", , ,3.014,1533.96 +10263.0,pick item,2019-10-31 09:18:32.000Z, ,"['883791']", , , ,0.166,799.0 +10264.0,package delivered,2019-10-31 09:37:58.000Z, , , ,"['660594']", ,7.332999999999998,4147.94 +10265.0,pick item,2019-10-31 09:40:57.000Z, ,"['883601']", , , ,0.166,799.0 +10266.0,reorder item,2019-10-31 09:46:23.000Z, ,"['883703']", , , ,1.37,2500.0 +10267.0,confirm order,2019-10-31 09:51:19.000Z, , ,"['990949']", , ,1.338,2158.98 +10268.0,pick item,2019-10-31 09:56:33.000Z, ,"['883815']", , , ,0.38,29.99 +10269.0,pick item,2019-10-31 09:56:39.000Z, ,"['883800']", , , ,1.28,149.99 +10270.0,payment reminder,2019-10-31 09:59:31.000Z, , ,"['990824']", , ,4.49,3053.98 +10271.0,pick item,2019-10-31 10:03:46.000Z, ,"['883831']", , , ,1.25,2200.0 +10272.0,pick item,2019-10-31 10:05:55.000Z, ,"['883575']", , , ,0.483,79.99 +10273.0,confirm order,2019-10-31 10:07:32.000Z, , ,"['990955']", , ,4.5760000000000005,4962.97 +10274.0,pay order,2019-10-31 10:25:42.000Z, , ,"['990933']", , ,3.613,3833.98 +10275.0,pick item,2019-10-31 10:28:12.000Z, ,"['883817']", , , ,0.21,529.0 +10276.0,create package,2019-10-31 10:28:12.000Z, ,"['883810','883062','883819']", ,"['660599']", ,2.54,389.97 +10277.0,pick item,2019-10-31 10:28:51.000Z, ,"['883777']", , , ,0.166,799.0 +10278.0,place order,2019-10-31 10:52:16.000Z, ,"['883839','883838']","['990956']", , ,0.649,883.99 +10279.0,item out of stock,2019-10-31 10:54:20.000Z, ,"['883808']", , , ,0.44,476.0 +10280.0,failed delivery,2019-10-31 11:09:58.000Z, , , ,"['660593']", ,3.015,4067.97 +10281.0,reorder item,2019-10-31 11:20:17.000Z, ,"['883793']", , , ,0.28,449.0 +10282.0,pick item,2019-10-31 11:22:30.000Z, ,"['883833']", , , ,1.48,199.99 +10283.0,pick item,2019-10-31 11:31:54.000Z, ,"['883517']", , , ,0.483,1099.0 +10284.0,create package,2019-10-31 11:31:54.000Z, ,"['883692','883803','883736','883695']", ,"['660600']", ,2.182,3714.99 +10285.0,confirm order,2019-10-31 11:34:27.000Z, , ,"['990953']", , ,3.2430000000000003,1612.97 +10286.0,pick item,2019-10-31 12:41:37.000Z, ,"['883823']", , , ,0.166,799.0 +10287.0,pick item,2019-10-31 12:51:27.000Z, ,"['883836']", , , ,0.38,29.99 +10288.0,place order,2019-10-31 13:04:19.000Z, ,"['883841','883842','883843','883840']","['990957']", , ,2.338,788.98 +10289.0,pick item,2019-10-31 13:22:27.000Z, ,"['883814']", , , ,0.98,129.99 +10290.0,pick item,2019-10-31 13:25:54.000Z, ,"['883658']", , , ,0.44,476.0 +10291.0,create package,2019-10-31 13:25:54.000Z, ,"['883544']", ,"['660601']", ,0.483,79.99 +10292.0,pay order,2019-10-31 13:28:46.000Z, , ,"['990831']", , ,4.378,4835.97 +10293.0,pay order,2019-10-31 13:56:59.000Z, , ,"['990946']", , ,3.523,883.97 +10294.0,package delivered,2019-10-31 14:03:12.000Z, , , ,"['660591']", ,2.6260000000000003,4887.99 +10295.0,package delivered,2019-10-31 14:08:30.000Z, , , ,"['660593']", ,3.015,4067.97 +10296.0,confirm order,2019-10-31 14:09:57.000Z, , ,"['990956']", , ,0.649,883.99 +10297.0,pick item,2019-10-31 14:16:06.000Z, ,"['883807']", , , ,0.44,476.0 +10298.0,create package,2019-10-31 14:16:06.000Z, ,"['883053']", ,"['660602']", ,1.37,2500.0 +10299.0,place order,2019-10-31 14:28:25.000Z, ,"['883845','883844','883846']","['990958']", , ,2.755,413.98 +10300.0,pick item,2019-10-31 14:29:29.000Z, ,"['883615']", , , ,0.28,89.99 +10301.0,create package,2019-10-31 14:29:29.000Z, ,"['883799','883831','883792','883673','883800','883806','883795','883723','883791','883796','883817','883789','883790','883309','883794','883807']", ,"['660603']", ,10.51,8374.93 +10302.0,send package,2019-10-31 14:32:38.000Z, , , ,"['660601']", ,0.483,79.99 +10303.0,send package,2019-10-31 14:49:10.000Z, , , ,"['660602']", ,1.37,2500.0 +10304.0,pick item,2019-10-31 14:56:10.000Z, ,"['883797']", , , ,0.483,1099.0 +10305.0,confirm order,2019-10-31 15:10:38.000Z, , ,"['990954']", , ,2.216,3383.99 +10306.0,send package,2019-10-31 15:13:14.000Z, , , ,"['660598']", ,11.722,10615.93 +10307.0,pick item,2019-10-31 15:29:31.000Z, ,"['883822']", , , ,0.44,476.0 +10308.0,pay order,2019-10-31 15:46:17.000Z, , ,"['990932']", , ,2.108,1829.99 +10309.0,pick item,2019-10-31 16:09:25.000Z, ,"['883843']", , , ,0.495,129.0 +10310.0,reorder item,2019-10-31 16:09:41.000Z, ,"['883784']", , , ,0.44,476.0 +10311.0,pick item,2019-10-31 16:11:48.000Z, ,"['883739']", , , ,1.48,199.99 +10312.0,place order,2019-10-31 16:16:38.000Z, ,"['883847','883850','883849','883848']","['990959']", , ,3.1260000000000003,2442.98 +10313.0,pick item,2019-10-31 16:18:02.000Z, ,"['883078']", , , ,0.483,1099.0 +10314.0,package delivered,2019-10-31 16:20:43.000Z, , , ,"['660597']", ,3.391,2396.97 +10315.0,pick item,2019-10-31 16:27:09.000Z, ,"['883827']", , , ,0.188,1149.0 +10316.0,package delivered,2019-10-31 17:48:07.000Z, , , ,"['660595']", ,3.54,449.97 +10317.0,place order,2019-10-31 17:53:03.000Z, ,"['883853','883851','883852']","['990960']", , ,2.032,923.98 +10318.0,send package,2019-10-31 17:56:25.000Z, , , ,"['660599']", ,2.54,389.97 +10319.0,item out of stock,2019-10-31 17:58:08.000Z, ,"['883798']", , , ,0.28,449.0 +10320.0,send package,2019-10-31 18:54:18.000Z, , , ,"['660600']", ,2.182,3714.99 +10321.0,pick item,2019-10-31 19:15:53.000Z, ,"['883839']", , , ,0.483,79.99 +10322.0,pick item,2019-10-31 20:58:19.000Z, ,"['883770']", , , ,0.44,476.0 +10323.0,place order,2019-10-31 21:18:44.000Z, ,"['883855','883854']","['990961']", , ,0.49,623.99 +10324.0,create package,2019-10-31 23:00:00.000Z, ,"['883786','883787','883498','883788','883683']", ,"['660604']", ,5.8,789.95 +10325.0,place order,2019-11-01 07:29:03.000Z, ,"['883858','883860','883859','883857','883856']","['990962']", , ,5.42,724.95 +10326.0,pick item,2019-11-01 07:48:23.000Z, ,"['883850']", , , ,0.483,1099.0 +10327.0,pick item,2019-11-01 08:02:38.000Z, ,"['883852']", , , ,0.172,699.0 +10328.0,pick item,2019-11-01 08:04:47.000Z, ,"['883828']", , , ,0.495,129.0 +10329.0,pick item,2019-11-01 08:32:11.000Z, ,"['883845']", , , ,1.28,149.99 +10330.0,failed delivery,2019-11-01 08:33:49.000Z, , , ,"['660599']", ,2.54,389.97 +10331.0,pick item,2019-11-01 08:37:10.000Z, ,"['883854']", , , ,0.21,529.0 +10332.0,confirm order,2019-11-01 08:38:43.000Z, , ,"['990958']", , ,2.755,413.98 +10333.0,pick item,2019-11-01 08:43:13.000Z, ,"['883848']", , , ,0.88,89.99 +10334.0,pay order,2019-11-01 08:53:37.000Z, , ,"['990799']", , ,2.487,6001.0 +10335.0,pick item,2019-11-01 08:54:54.000Z, ,"['883846']", , , ,0.98,129.99 +10336.0,confirm order,2019-11-01 08:57:49.000Z, , ,"['990959']", , ,3.1260000000000003,2442.98 +10337.0,send package,2019-11-01 09:10:10.000Z, , , ,"['660603']", ,10.51,8374.93 +10338.0,pay order,2019-11-01 09:22:52.000Z, , ,"['990901']", , ,1.143,1582.99 +10339.0,pay order,2019-11-01 09:29:23.000Z, , ,"['990920']", , ,3.1060000000000003,1258.97 +10340.0,place order,2019-11-01 09:33:22.000Z, ,"['883863','883864','883862','883861']","['990963']", , ,2.218,3773.98 +10341.0,item out of stock,2019-11-01 09:35:09.000Z, ,"['883801']", , , ,0.483,79.99 +10342.0,confirm order,2019-11-01 09:36:26.000Z, , ,"['990957']", , ,2.338,788.98 +10343.0,pick item,2019-11-01 09:41:53.000Z, ,"['883548']", , , ,0.28,89.99 +10344.0,reorder item,2019-11-01 09:42:05.000Z, ,"['883682']", , , ,0.21,529.0 +10345.0,pick item,2019-11-01 09:57:30.000Z, ,"['883857']", , , ,1.48,199.99 +10346.0,pick item,2019-11-01 10:05:07.000Z, ,"['883860']", , , ,0.98,129.99 +10347.0,package delivered,2019-11-01 10:10:57.000Z, , , ,"['660600']", ,2.182,3714.99 +10348.0,item out of stock,2019-11-01 10:12:30.000Z, ,"['883811']", , , ,0.166,799.0 +10349.0,pick item,2019-11-01 10:14:31.000Z, ,"['883838']", , , ,0.166,799.0 +10350.0,pick item,2019-11-01 10:41:48.000Z, ,"['883861']", , , ,0.38,29.99 +10351.0,package delivered,2019-11-01 10:45:19.000Z, , , ,"['660602']", ,1.37,2500.0 +10352.0,failed delivery,2019-11-01 10:48:23.000Z, , , ,"['660601']", ,0.483,79.99 +10353.0,pay order,2019-11-01 10:49:20.000Z, , ,"['990824']", , ,4.49,3053.98 +10354.0,place order,2019-11-01 11:26:31.000Z, ,"['883875','883865','883873','883868','883869','883871','883872','883874','883866','883867','883870']","['990964']", , ,7.832999999999998,9701.95 +10355.0,pick item,2019-11-01 11:28:45.000Z, ,"['883862']", , , ,1.37,2500.0 +10356.0,create package,2019-11-01 11:28:45.000Z, ,"['883761','883815','883704','883612','883814','883615','883705','883708','883727','883729']", ,"['660605']", ,4.426,4191.95 +10357.0,pick item,2019-11-01 11:32:28.000Z, ,"['883865']", , , ,1.25,2200.0 +10358.0,item out of stock,2019-11-01 11:36:37.000Z, ,"['883774']", , , ,0.88,89.99 +10359.0,item out of stock,2019-11-01 11:52:22.000Z, ,"['883870']", , , ,1.25,2200.0 +10360.0,confirm order,2019-11-01 12:08:56.000Z, , ,"['990960']", , ,2.032,923.98 +10361.0,pick item,2019-11-01 12:42:40.000Z, ,"['883670']", , , ,1.25,2200.0 +10362.0,place order,2019-11-01 13:12:50.000Z, ,"['883878','883881','883879','883880','883877','883882','883876']","['990965']", , ,2.655,4731.99 +10363.0,item out of stock,2019-11-01 13:13:23.000Z, ,"['883858']", , , ,1.48,199.99 +10364.0,package delivered,2019-11-01 13:21:59.000Z, , , ,"['660603']", ,10.51,8374.93 +10365.0,pick item,2019-11-01 13:22:03.000Z, ,"['883882']", , , ,0.188,1149.0 +10366.0,reorder item,2019-11-01 13:23:50.000Z, ,"['883774']", , , ,0.88,89.99 +10367.0,pick item,2019-11-01 13:30:49.000Z, ,"['883757']", , , ,0.88,89.99 +10368.0,failed delivery,2019-11-01 13:38:36.000Z, , , ,"['660599']", ,2.54,389.97 +10369.0,pick item,2019-11-01 13:40:43.000Z, ,"['883674']", , , ,0.172,699.0 +10370.0,pick item,2019-11-01 13:46:53.000Z, ,"['883866']", , , ,0.28,89.99 +10371.0,pay order,2019-11-01 13:51:51.000Z, , ,"['990913']", , ,3.185,3133.98 +10372.0,failed delivery,2019-11-01 13:59:28.000Z, , , ,"['660598']", ,11.722,10615.93 +10373.0,pay order,2019-11-01 14:13:13.000Z, , ,"['990866']", , ,3.145,2783.99 +10374.0,pick item,2019-11-01 14:13:32.000Z, ,"['883859']", , , ,0.2,39.99 +10375.0,send package,2019-11-01 14:15:49.000Z, , , ,"['660604']", ,5.8,789.95 +10376.0,reorder item,2019-11-01 14:30:52.000Z, ,"['883858']", , , ,1.48,199.99 +10377.0,pick item,2019-11-01 14:40:35.000Z, ,"['883768']", , , ,1.28,149.99 +10378.0,place order,2019-11-01 14:45:27.000Z, ,"['883890','883886','883885','883887','883883','883889','883888','883884']","['990966']", , ,4.144,4693.96 +10379.0,reorder item,2019-11-01 14:52:02.000Z, ,"['883798']", , , ,0.28,449.0 +10380.0,pay order,2019-11-01 14:54:14.000Z, , ,"['990956']", , ,0.649,883.99 +10381.0,pick item,2019-11-01 15:00:15.000Z, ,"['883802']", , , ,0.28,449.0 +10382.0,pick item,2019-11-01 15:09:15.000Z, ,"['883851']", , , ,0.88,89.99 +10383.0,create package,2019-11-01 15:09:15.000Z, ,"['883726','883601','883663']", ,"['660606']", ,1.724,4448.0 +10384.0,item out of stock,2019-11-01 15:10:29.000Z, ,"['883840']", , , ,0.38,29.99 +10385.0,pick item,2019-11-01 15:10:43.000Z, ,"['883875']", , , ,1.48,199.99 +10386.0,pick item,2019-11-01 15:19:11.000Z, ,"['883818']", , , ,1.25,2200.0 +10387.0,pick item,2019-11-01 15:28:39.000Z, ,"['883824']", , , ,0.88,89.99 +10388.0,create package,2019-11-01 15:28:39.000Z, ,"['883577','883698','883575','883751','883783','883882']", ,"['660607']", ,3.961,4167.97 +10389.0,pick item,2019-11-01 15:33:21.000Z, ,"['883877']", , , ,0.21,529.0 +10390.0,pay order,2019-11-01 15:37:00.000Z, , ,"['990957']", , ,2.338,788.98 +10391.0,pick item,2019-11-01 15:42:33.000Z, ,"['883825']", , , ,0.2,39.99 +10392.0,package delivered,2019-11-01 15:49:42.000Z, , , ,"['660604']", ,5.8,789.95 +10393.0,send package,2019-11-01 15:53:12.000Z, , , ,"['660605']", ,4.426,4191.95 +10394.0,pick item,2019-11-01 16:02:58.000Z, ,"['883873']", , , ,0.88,89.99 +10395.0,pick item,2019-11-01 16:06:37.000Z, ,"['883887']", , , ,0.483,495.0 +10396.0,place order,2019-11-01 16:50:41.000Z, ,"['883894','883891','883892','883893']","['990967']", , ,3.401,4652.99 +10397.0,pick item,2019-11-01 17:08:49.000Z, ,"['883409']", , , ,0.21,529.0 +10398.0,pick item,2019-11-01 17:16:20.000Z, ,"['883872']", , , ,0.2,39.99 +10399.0,create package,2019-11-01 17:16:20.000Z, ,"['883833','883836','883850','883686','883848']", ,"['660608']", ,3.389,2217.97 +10400.0,item out of stock,2019-11-01 17:20:01.000Z, ,"['883835']", , , ,0.38,29.99 +10401.0,pick item,2019-11-01 17:50:19.000Z, ,"['883020']", , , ,1.25,2200.0 +10402.0,failed delivery,2019-11-01 18:35:49.000Z, , , ,"['660601']", ,0.483,79.99 +10403.0,confirm order,2019-11-01 18:48:34.000Z, , ,"['990952']", , ,3.896,4455.99 +10404.0,place order,2019-11-01 19:11:38.000Z, ,"['883898','883895','883897','883896']","['990968']", , ,1.123,2437.99 +10405.0,send package,2019-11-01 20:22:00.000Z, , , ,"['660608']", ,3.389,2217.97 +10406.0,place order,2019-11-01 22:02:51.000Z, ,"['883900','883902','883901','883899']","['990969']", , ,2.58,1302.98 +10407.0,payment reminder,2019-11-02 13:54:20.000Z, , ,"['990607']", , ,1.858,1322.99 +10408.0,place order,2019-11-02 20:08:21.000Z, ,"['883906','883908','883903','883905','883907','883904']","['990970']", , ,3.037,2798.97 +10409.0,place order,2019-11-03 20:04:30.000Z, ,"['883909','883911','883910']","['990971']", , ,0.92,969.99 +10410.0,payment reminder,2019-11-04 07:09:10.000Z, , ,"['990857']", , ,0.865,2332.0 +10411.0,pick item,2019-11-04 07:24:47.000Z, ,"['883881']", , , ,0.188,1149.0 +10412.0,confirm order,2019-11-04 07:40:24.000Z, , ,"['990961']", , ,0.49,623.99 +10413.0,pick item,2019-11-04 07:41:29.000Z, ,"['883909']", , , ,0.2,39.99 +10414.0,place order,2019-11-04 07:55:20.000Z, ,"['883914','883913','883912']","['990972']", , ,2.396,3133.99 +10415.0,failed delivery,2019-11-04 08:05:11.000Z, , , ,"['660599']", ,2.54,389.97 +10416.0,package delivered,2019-11-04 08:06:54.000Z, , , ,"['660605']", ,4.426,4191.95 +10417.0,reorder item,2019-11-04 08:13:12.000Z, ,"['883801']", , , ,0.483,79.99 +10418.0,reorder item,2019-11-04 08:21:30.000Z, ,"['883811']", , , ,0.166,799.0 +10419.0,pick item,2019-11-04 08:22:48.000Z, ,"['883793']", , , ,0.28,449.0 +10420.0,item out of stock,2019-11-04 08:48:41.000Z, ,"['883879']", , , ,0.98,129.99 +10421.0,pick item,2019-11-04 08:50:55.000Z, ,"['883703']", , , ,1.37,2500.0 +10422.0,create package,2019-11-04 08:50:55.000Z, ,"['883845','883757','883846','883759']", ,"['660609']", ,3.623,1468.97 +10423.0,send package,2019-11-04 08:58:19.000Z, , , ,"['660609']", ,3.623,1468.97 +10424.0,pick item,2019-11-04 08:58:30.000Z, ,"['883878']", , , ,0.44,476.0 +10425.0,pick item,2019-11-04 09:11:47.000Z, ,"['883867']", , , ,0.28,449.0 +10426.0,pick item,2019-11-04 09:14:00.000Z, ,"['883914']", , , ,0.166,799.0 +10427.0,pick item,2019-11-04 09:27:55.000Z, ,"['883598']", , , ,0.21,529.0 +10428.0,create package,2019-11-04 09:27:55.000Z, ,"['883517','883766']", ,"['660610']", ,1.763,1248.99 +10429.0,payment reminder,2019-11-04 09:30:36.000Z, , ,"['990856']", , ,2.132,1023.96 +10430.0,send package,2019-11-04 09:40:01.000Z, , , ,"['660610']", ,1.763,1248.99 +10431.0,pick item,2019-11-04 09:43:43.000Z, ,"['883762']", , , ,0.78,99.99 +10432.0,confirm order,2019-11-04 09:44:43.000Z, , ,"['990963']", , ,2.218,3773.98 +10433.0,pay order,2019-11-04 09:47:01.000Z, , ,"['990607']", , ,1.858,1322.99 +10434.0,pick item,2019-11-04 10:10:21.000Z, ,"['883868']", , , ,1.37,2500.0 +10435.0,create package,2019-11-04 10:10:21.000Z, ,"['883825','883827','883763','883768','883860','883824','883859','883857','883770','883828']", ,"['660611']", ,6.331,3552.94 +10436.0,place order,2019-11-04 10:12:47.000Z, ,"['883918','883915','883916','883917']","['990973']", , ,2.75,3229.99 +10437.0,pick item,2019-11-04 10:41:43.000Z, ,"['883407']", , , ,0.38,29.99 +10438.0,package delivered,2019-11-04 10:43:51.000Z, , , ,"['660609']", ,3.623,1468.97 +10439.0,pick item,2019-11-04 10:51:38.000Z, ,"['883842']", , , ,0.98,129.99 +10440.0,pick item,2019-11-04 10:55:28.000Z, ,"['883746']", , , ,0.88,89.99 +10441.0,pick item,2019-11-04 11:16:02.000Z, ,"['883884']", , , ,0.2,39.99 +10442.0,pay order,2019-11-04 11:17:25.000Z, , ,"['990898']", , ,2.043,1702.99 +10443.0,item out of stock,2019-11-04 11:18:30.000Z, ,"['883890']", , , ,0.28,89.99 +10444.0,pick item,2019-11-04 11:19:55.000Z, ,"['883162']", , , ,0.44,476.0 +10445.0,pay order,2019-11-04 11:20:17.000Z, , ,"['990753']", , ,1.543,689.98 +10446.0,package delivered,2019-11-04 11:37:33.000Z, , , ,"['660610']", ,1.763,1248.99 +10447.0,confirm order,2019-11-04 11:42:08.000Z, , ,"['990967']", , ,3.401,4652.99 +10448.0,place order,2019-11-04 11:45:22.000Z, ,"['883922','883923','883920','883921','883919']","['990974']", , ,2.3080000000000003,1932.97 +10449.0,pick item,2019-11-04 12:01:18.000Z, ,"['883138']", , , ,1.25,2200.0 +10450.0,package delivered,2019-11-04 12:19:23.000Z, , , ,"['660599']", ,2.54,389.97 +10451.0,pick item,2019-11-04 12:23:08.000Z, ,"['883849']", , , ,0.483,1099.0 +10452.0,pick item,2019-11-04 12:26:33.000Z, ,"['883856']", , , ,1.28,149.99 +10453.0,pick item,2019-11-04 12:29:31.000Z, ,"['883841']", , , ,0.483,495.0 +10454.0,pick item,2019-11-04 12:35:56.000Z, ,"['883880']", , , ,0.483,495.0 +10455.0,create package,2019-11-04 12:35:56.000Z, ,"['883909','883658','883839','883838','883842','883843','883841','883581','883743']", ,"['660612']", ,3.896,4046.97 +10456.0,pick item,2019-11-04 12:44:42.000Z, ,"['883832']", , , ,1.37,2500.0 +10457.0,pay order,2019-11-04 12:57:15.000Z, , ,"['990934']", , ,3.806,1243.97 +10458.0,confirm order,2019-11-04 13:09:39.000Z, , ,"['990964']", , ,7.832999999999998,9701.95 +10459.0,payment reminder,2019-11-04 13:15:29.000Z, , ,"['990860']", , ,3.156,5822.99 +10460.0,confirm order,2019-11-04 13:17:50.000Z, , ,"['990970']", , ,3.037,2798.97 +10461.0,pick item,2019-11-04 13:25:49.000Z, ,"['883893']", , , ,0.188,1149.0 +10462.0,payment reminder,2019-11-04 13:27:32.000Z, , ,"['990854']", , ,1.86,224.98 +10463.0,pick item,2019-11-04 13:35:43.000Z, ,"['883897']", , , ,0.28,89.99 +10464.0,failed delivery,2019-11-04 13:38:22.000Z, , , ,"['660598']", ,11.722,10615.93 +10465.0,package delivered,2019-11-04 13:42:14.000Z, , , ,"['660608']", ,3.389,2217.97 +10466.0,pay order,2019-11-04 13:43:57.000Z, , ,"['990856']", , ,2.132,1023.96 +10467.0,pick item,2019-11-04 13:47:24.000Z, ,"['883876']", , , ,0.166,799.0 +10468.0,place order,2019-11-04 13:50:31.000Z, ,"['883924','883925']","['990975']", , ,0.693,1633.0 +10469.0,confirm order,2019-11-04 13:58:56.000Z, , ,"['990968']", , ,1.123,2437.99 +10470.0,pick item,2019-11-04 13:59:06.000Z, ,"['883918']", , , ,0.78,99.99 +10471.0,pick item,2019-11-04 14:05:02.000Z, ,"['883888']", , , ,0.188,1149.0 +10472.0,item out of stock,2019-11-04 14:11:14.000Z, ,"['883910']", , , ,0.28,449.0 +10473.0,confirm order,2019-11-04 14:23:37.000Z, , ,"['990974']", , ,2.3080000000000003,1932.97 +10474.0,item out of stock,2019-11-04 14:33:42.000Z, ,"['883895']", , , ,0.483,495.0 +10475.0,item out of stock,2019-11-04 14:35:52.000Z, ,"['883871']", , , ,0.483,79.99 +10476.0,pick item,2019-11-04 14:46:49.000Z, ,"['883816']", , , ,1.25,2200.0 +10477.0,package delivered,2019-11-04 14:47:45.000Z, , , ,"['660598']", ,11.722,10615.93 +10478.0,pick item,2019-11-04 14:55:53.000Z, ,"['883772']", , , ,0.28,89.99 +10479.0,item out of stock,2019-11-04 15:07:39.000Z, ,"['883785']", , , ,1.25,2200.0 +10480.0,confirm order,2019-11-04 15:16:01.000Z, , ,"['990971']", , ,0.92,969.99 +10481.0,reorder item,2019-11-04 15:16:05.000Z, ,"['883785']", , , ,1.25,2200.0 +10482.0,pick item,2019-11-04 15:18:02.000Z, ,"['883899']", , , ,0.21,529.0 +10483.0,create package,2019-11-04 15:18:02.000Z, ,"['883746','883738','883777','883854','883739']", ,"['660613']", ,2.924,2766.98 +10484.0,pick item,2019-11-04 15:19:14.000Z, ,"['883913']", , , ,1.25,2200.0 +10485.0,reorder item,2019-11-04 15:21:04.000Z, ,"['883835']", , , ,0.38,29.99 +10486.0,pick item,2019-11-04 15:28:25.000Z, ,"['883883']", , , ,1.25,2200.0 +10487.0,confirm order,2019-11-04 15:30:31.000Z, , ,"['990975']", , ,0.693,1633.0 +10488.0,pay order,2019-11-04 15:31:45.000Z, , ,"['990936']", , ,4.673,3643.97 +10489.0,pay order,2019-11-04 15:45:31.000Z, , ,"['990881']", , ,1.118,1602.99 +10490.0,item out of stock,2019-11-04 15:56:01.000Z, ,"['883908']", , , ,0.188,1149.0 +10491.0,place order,2019-11-04 16:00:50.000Z, ,"['883926','883927']","['990976']", , ,0.338,1503.0 +10492.0,send package,2019-11-04 16:05:28.000Z, , , ,"['660611']", ,6.331,3552.94 +10493.0,reorder item,2019-11-04 16:07:13.000Z, ,"['883895']", , , ,0.483,495.0 +10494.0,pick item,2019-11-04 16:07:41.000Z, ,"['883869']", , , ,0.188,1149.0 +10495.0,pay order,2019-11-04 16:10:17.000Z, , ,"['990941']", , ,6.002000000000002,4764.96 +10496.0,pay order,2019-11-04 16:10:18.000Z, , ,"['990874']", , ,1.826,1897.98 +10497.0,pick item,2019-11-04 16:14:27.000Z, ,"['883864']", , , ,0.188,1149.0 +10498.0,reorder item,2019-11-04 16:22:27.000Z, ,"['883870']", , , ,1.25,2200.0 +10499.0,pay order,2019-11-04 16:34:36.000Z, , ,"['990950']", , ,2.61,2364.98 +10500.0,pick item,2019-11-04 16:42:01.000Z, ,"['883863']", , , ,0.28,89.99 +10501.0,create package,2019-11-04 16:42:01.000Z, ,"['883823','883822','883674']", ,"['660614']", ,0.778,1974.0 +10502.0,confirm order,2019-11-04 16:43:18.000Z, , ,"['990969']", , ,2.58,1302.98 +10503.0,confirm order,2019-11-04 16:46:41.000Z, , ,"['990972']", , ,2.396,3133.99 +10504.0,pick item,2019-11-04 17:03:01.000Z, ,"['883921']", , , ,1.28,149.99 +10505.0,pick item,2019-11-04 17:13:38.000Z, ,"['883885']", , , ,0.98,129.99 +10506.0,place order,2019-11-04 17:21:27.000Z, ,"['883929','883928']","['990977']", , ,1.733,2284.99 +10507.0,pick item,2019-11-04 17:22:29.000Z, ,"['883812']", , , ,0.28,89.99 +10508.0,create package,2019-11-04 17:22:29.000Z, ,"['883818','883797','883883','883888','883885','883802','883793','883887','883884']", ,"['660615']", ,5.394,8210.98 +10509.0,send package,2019-11-04 17:34:03.000Z, , , ,"['660615']", ,5.394,8210.98 +10510.0,confirm order,2019-11-04 17:38:09.000Z, , ,"['990962']", , ,5.42,724.95 +10511.0,place order,2019-11-04 19:43:56.000Z, ,"['883932','883931','883930']","['990978']", , ,1.97,763.98 +10512.0,pick item,2019-11-04 21:41:48.000Z, ,"['883826']", , , ,1.48,199.99 +10513.0,place order,2019-11-05 00:41:30.000Z, ,"['883934','883933','883935','883936']","['990979']", , ,1.992,1792.98 +10514.0,pick item,2019-11-05 07:54:11.000Z, ,"['883906']", , , ,0.483,79.99 +10515.0,confirm order,2019-11-05 08:03:02.000Z, , ,"['990976']", , ,0.338,1503.0 +10516.0,confirm order,2019-11-05 08:08:34.000Z, , ,"['990978']", , ,1.97,763.98 +10517.0,pay order,2019-11-05 08:09:02.000Z, , ,"['990860']", , ,3.156,5822.99 +10518.0,confirm order,2019-11-05 08:29:05.000Z, , ,"['990979']", , ,1.992,1792.98 +10519.0,pick item,2019-11-05 08:31:30.000Z, ,"['883902']", , , ,0.21,529.0 +10520.0,confirm order,2019-11-05 08:32:21.000Z, , ,"['990973']", , ,2.75,3229.99 +10521.0,send package,2019-11-05 08:34:57.000Z, , , ,"['660606']", ,1.724,4448.0 +10522.0,pick item,2019-11-05 08:37:57.000Z, ,"['883624']", , , ,0.44,476.0 +10523.0,reorder item,2019-11-05 08:44:12.000Z, ,"['883890']", , , ,0.28,89.99 +10524.0,pick item,2019-11-05 08:53:20.000Z, ,"['883561']", , , ,0.483,495.0 +10525.0,place order,2019-11-05 08:53:26.000Z, ,"['883938','883937']","['990980']", , ,0.978,213.99 +10526.0,pick item,2019-11-05 09:02:40.000Z, ,"['883844']", , , ,0.495,129.0 +10527.0,pick item,2019-11-05 09:04:06.000Z, ,"['883886']", , , ,0.483,495.0 +10528.0,send package,2019-11-05 09:13:36.000Z, , , ,"['660607']", ,3.961,4167.97 +10529.0,item out of stock,2019-11-05 09:26:30.000Z, ,"['883809']", , , ,0.44,476.0 +10530.0,pick item,2019-11-05 09:34:20.000Z, ,"['883874']", , , ,0.172,699.0 +10531.0,send package,2019-11-05 09:38:07.000Z, , , ,"['660612']", ,3.896,4046.97 +10532.0,pick item,2019-11-05 09:44:44.000Z, ,"['883915']", , , ,1.25,2200.0 +10533.0,create package,2019-11-05 09:44:44.000Z, ,"['883863','883864','883862','883078','883861']", ,"['660616']", ,2.701,4867.98 +10534.0,item out of stock,2019-11-05 09:52:34.000Z, ,"['883919']", , , ,0.28,449.0 +10535.0,pay order,2019-11-05 09:53:23.000Z, , ,"['990960']", , ,2.032,923.98 +10536.0,pay order,2019-11-05 09:53:53.000Z, , ,"['990958']", , ,2.755,413.98 +10537.0,package delivered,2019-11-05 09:55:01.000Z, , , ,"['660601']", ,0.483,79.99 +10538.0,pay order,2019-11-05 09:57:21.000Z, , ,"['990929']", , ,1.203,1009.99 +10539.0,pay order,2019-11-05 10:08:11.000Z, , ,"['990854']", , ,1.86,224.98 +10540.0,pick item,2019-11-05 10:10:57.000Z, ,"['883834']", , , ,0.483,1099.0 +10541.0,pick item,2019-11-05 10:11:38.000Z, ,"['883805']", , , ,0.78,99.99 +10542.0,item out of stock,2019-11-05 10:18:07.000Z, ,"['883934']", , , ,0.166,799.0 +10543.0,pick item,2019-11-05 10:32:49.000Z, ,"['883903']", , , ,1.48,199.99 +10544.0,pick item,2019-11-05 10:40:14.000Z, ,"['883907']", , , ,0.28,89.99 +10545.0,package delivered,2019-11-05 10:45:08.000Z, , , ,"['660611']", ,6.331,3552.94 +10546.0,reorder item,2019-11-05 10:47:20.000Z, ,"['883840']", , , ,0.38,29.99 +10547.0,reorder item,2019-11-05 11:04:22.000Z, ,"['883908']", , , ,0.188,1149.0 +10548.0,place order,2019-11-05 11:06:40.000Z, ,"['883941','883939','883940']","['990981']", , ,2.928,6154.0 +10549.0,item out of stock,2019-11-05 11:08:39.000Z, ,"['883939']", , , ,1.37,2500.0 +10550.0,pick item,2019-11-05 11:21:12.000Z, ,"['883892']", , , ,0.483,1099.0 +10551.0,create package,2019-11-05 11:21:12.000Z, ,"['883670','883914','883913','883851','883852']", ,"['660617']", ,3.718,5987.99 +10552.0,reorder item,2019-11-05 11:30:32.000Z, ,"['883879']", , , ,0.98,129.99 +10553.0,pick item,2019-11-05 11:30:58.000Z, ,"['883920']", , , ,0.28,89.99 +10554.0,package delivered,2019-11-05 11:33:39.000Z, , , ,"['660612']", ,3.896,4046.97 +10555.0,send package,2019-11-05 11:34:21.000Z, , , ,"['660616']", ,2.701,4867.98 +10556.0,pick item,2019-11-05 12:00:33.000Z, ,"['883905']", , , ,0.44,476.0 +10557.0,place order,2019-11-05 12:33:07.000Z, ,"['883944','883945','883942','883943','883946','883947']","['990982']", , ,3.62,2760.98 +10558.0,confirm order,2019-11-05 13:42:24.000Z, , ,"['990977']", , ,1.733,2284.99 +10559.0,pick item,2019-11-05 13:43:37.000Z, ,"['883911']", , , ,0.44,476.0 +10560.0,payment reminder,2019-11-05 13:48:53.000Z, , ,"['990870']", , ,1.49,683.99 +10561.0,package delivered,2019-11-05 13:58:46.000Z, , , ,"['660606']", ,1.724,4448.0 +10562.0,pick item,2019-11-05 14:01:34.000Z, ,"['883829']", , , ,0.483,1099.0 +10563.0,place order,2019-11-05 14:26:01.000Z, ,"['883949','883948']","['990983']", , ,2.13,2294.99 +10564.0,pay order,2019-11-05 14:26:40.000Z, , ,"['990925']", , ,2.218,3773.98 +10565.0,confirm order,2019-11-05 14:27:57.000Z, , ,"['990965']", , ,2.655,4731.99 +10566.0,pick item,2019-11-05 14:34:45.000Z, ,"['883847']", , , ,1.28,149.99 +10567.0,create package,2019-11-05 14:34:45.000Z, ,"['883548']", ,"['660618']", ,0.28,89.99 +10568.0,pick item,2019-11-05 14:35:15.000Z, ,"['883835']", , , ,0.38,29.99 +10569.0,create package,2019-11-05 14:35:15.000Z, ,"['883875','883865','883873','883868','883869','883872','883920','883921','883874','883866','883867']", ,"['660619']", ,7.66,7656.94 +10570.0,pick item,2019-11-05 14:36:01.000Z, ,"['883930']", , , ,0.21,529.0 +10571.0,confirm order,2019-11-05 14:36:29.000Z, , ,"['990966']", , ,4.144,4693.96 +10572.0,pay order,2019-11-05 14:38:09.000Z, , ,"['990928']", , ,2.25,2594.99 +10573.0,pick item,2019-11-05 14:49:33.000Z, ,"['883936']", , , ,0.78,99.99 +10574.0,reorder item,2019-11-05 15:06:37.000Z, ,"['883871']", , , ,0.483,79.99 +10575.0,pick item,2019-11-05 15:21:36.000Z, ,"['883912']", , , ,0.98,129.99 +10576.0,send package,2019-11-05 15:23:57.000Z, , , ,"['660617']", ,3.718,5987.99 +10577.0,pay order,2019-11-05 15:31:53.000Z, , ,"['990975']", , ,0.693,1633.0 +10578.0,send package,2019-11-05 15:38:25.000Z, , , ,"['660613']", ,2.924,2766.98 +10579.0,confirm order,2019-11-05 15:38:53.000Z, , ,"['990981']", , ,2.928,6154.0 +10580.0,pick item,2019-11-05 15:50:39.000Z, ,"['883895']", , , ,0.483,495.0 +10581.0,pick item,2019-11-05 15:59:55.000Z, ,"['883923']", , , ,0.28,89.99 +10582.0,pick item,2019-11-05 16:01:27.000Z, ,"['883904']", , , ,0.166,799.0 +10583.0,pick item,2019-11-05 16:07:27.000Z, ,"['883928']", , , ,0.483,79.99 +10584.0,pick item,2019-11-05 16:07:59.000Z, ,"['883774']", , , ,0.88,89.99 +10585.0,place order,2019-11-05 16:11:50.000Z, ,"['883952','883951','883953','883950']","['990984']", , ,2.129,2092.98 +10586.0,pay order,2019-11-05 16:38:51.000Z, , ,"['990964']", , ,7.832999999999998,9701.95 +10587.0,pick item,2019-11-05 17:08:24.000Z, ,"['883898']", , , ,0.188,1149.0 +10588.0,confirm order,2019-11-05 17:23:01.000Z, , ,"['990982']", , ,3.62,2760.98 +10589.0,pay order,2019-11-05 17:30:06.000Z, , ,"['990891']", , ,2.902,5231.0 +10590.0,place order,2019-11-05 17:43:27.000Z, ,"['883956','883957','883955','883954']","['990985']", , ,3.512,1123.97 +10591.0,item out of stock,2019-11-05 18:21:50.000Z, ,"['883937']", , , ,0.495,129.0 +10592.0,pay order,2019-11-05 18:24:26.000Z, , ,"['990970']", , ,3.037,2798.97 +10593.0,item out of stock,2019-11-05 18:47:17.000Z, ,"['883932']", , , ,0.98,129.99 +10594.0,reorder item,2019-11-05 19:44:49.000Z, ,"['883934']", , , ,0.166,799.0 +10595.0,place order,2019-11-05 20:49:56.000Z, ,"['883958']","['990986']", , ,0.483,84.99 +10596.0,send package,2019-11-05 21:11:13.000Z, , , ,"['660614']", ,0.778,1974.0 +10597.0,create package,2019-11-05 23:00:00.000Z, ,"['883878','883881','883880','883877','883930','883876']", ,"['660620']", ,1.6969999999999998,3977.0 +10598.0,place order,2019-11-06 06:17:30.000Z, ,"['883961','883959','883962','883960','883965','883963','883964']","['990987']", , ,4.881,1732.95 +10599.0,pick item,2019-11-06 07:15:24.000Z, ,"['883950']", , , ,0.483,1099.0 +10600.0,pick item,2019-11-06 07:34:19.000Z, ,"['883949']", , , ,1.25,2200.0 +10601.0,pick item,2019-11-06 07:40:05.000Z, ,"['883941']", , , ,0.188,1149.0 +10602.0,confirm order,2019-11-06 07:51:27.000Z, , ,"['990986']", , ,0.483,84.99 +10603.0,package delivered,2019-11-06 07:54:49.000Z, , , ,"['660615']", ,5.394,8210.98 +10604.0,pay order,2019-11-06 08:11:20.000Z, , ,"['990857']", , ,0.865,2332.0 +10605.0,pick item,2019-11-06 08:25:05.000Z, ,"['883917']", , , ,0.44,476.0 +10606.0,package delivered,2019-11-06 08:25:55.000Z, , , ,"['660614']", ,0.778,1974.0 +10607.0,pick item,2019-11-06 08:25:56.000Z, ,"['883947']", , , ,0.495,129.0 +10608.0,item out of stock,2019-11-06 08:44:06.000Z, ,"['883945']", , , ,0.483,1099.0 +10609.0,reorder item,2019-11-06 08:51:14.000Z, ,"['883939']", , , ,1.37,2500.0 +10610.0,pick item,2019-11-06 08:52:20.000Z, ,"['883830']", , , ,0.483,79.99 +10611.0,pick item,2019-11-06 08:54:52.000Z, ,"['883804']", , , ,0.483,495.0 +10612.0,pick item,2019-11-06 08:59:06.000Z, ,"['883961']", , , ,0.495,129.0 +10613.0,create package,2019-11-06 08:59:06.000Z, ,"['883407','883409']", ,"['660621']", ,0.59,558.99 +10614.0,pay order,2019-11-06 08:59:19.000Z, , ,"['990952']", , ,3.896,4455.99 +10615.0,pick item,2019-11-06 09:00:14.000Z, ,"['883925']", , , ,0.21,529.0 +10616.0,place order,2019-11-06 09:03:03.000Z, ,"['883969','883966','883971','883967','883968','883973','883970','883972']","['990988']", , ,5.337999999999999,5931.96 +10617.0,package delivered,2019-11-06 09:15:48.000Z, , , ,"['660607']", ,3.961,4167.97 +10618.0,confirm order,2019-11-06 09:19:26.000Z, , ,"['990987']", , ,4.881,1732.95 +10619.0,pick item,2019-11-06 09:25:24.000Z, ,"['883968']", , , ,0.78,99.99 +10620.0,create package,2019-11-06 09:25:24.000Z, ,"['883906','883902','883903','883907','883898','883835','883899','883847','883897','883904','883849','883832','883905','883895','883950','883834','883020']", ,"['660622']", ,9.949,12613.94 +10621.0,pick item,2019-11-06 09:25:41.000Z, ,"['883946']", , , ,1.48,199.99 +10622.0,pick item,2019-11-06 09:33:03.000Z, ,"['883960']", , , ,0.78,99.99 +10623.0,pick item,2019-11-06 09:56:09.000Z, ,"['883951']", , , ,0.166,799.0 +10624.0,send package,2019-11-06 09:58:49.000Z, , , ,"['660619']", ,7.66,7656.94 +10625.0,confirm order,2019-11-06 10:00:17.000Z, , ,"['990983']", , ,2.13,2294.99 +10626.0,pick item,2019-11-06 10:04:06.000Z, ,"['883894']", , , ,1.25,2200.0 +10627.0,item out of stock,2019-11-06 10:05:43.000Z, ,"['883964']", , , ,0.98,129.99 +10628.0,reorder item,2019-11-06 10:18:51.000Z, ,"['883809']", , , ,0.44,476.0 +10629.0,pick item,2019-11-06 10:18:57.000Z, ,"['883871']", , , ,0.483,79.99 +10630.0,item out of stock,2019-11-06 10:24:24.000Z, ,"['883837']", , , ,0.483,1099.0 +10631.0,pick item,2019-11-06 10:24:53.000Z, ,"['883929']", , , ,1.25,2200.0 +10632.0,pick item,2019-11-06 10:25:05.000Z, ,"['883821']", , , ,0.44,476.0 +10633.0,place order,2019-11-06 10:25:53.000Z, ,"['883977','883974','883975','883976']","['990989']", , ,2.546,3608.99 +10634.0,pick item,2019-11-06 10:31:16.000Z, ,"['883969']", , , ,0.188,1149.0 +10635.0,confirm order,2019-11-06 10:42:03.000Z, , ,"['990989']", , ,2.546,3608.99 +10636.0,pick item,2019-11-06 10:42:52.000Z, ,"['883975']", , , ,1.37,2500.0 +10637.0,confirm order,2019-11-06 11:00:02.000Z, , ,"['990985']", , ,3.512,1123.97 +10638.0,pay order,2019-11-06 11:09:08.000Z, , ,"['990982']", , ,3.62,2760.98 +10639.0,pick item,2019-11-06 11:10:21.000Z, ,"['883956']", , , ,1.48,199.99 +10640.0,send package,2019-11-06 11:20:54.000Z, , , ,"['660620']", ,1.6969999999999998,3977.0 +10641.0,send package,2019-11-06 11:24:17.000Z, , , ,"['660622']", ,9.949,12613.94 +10642.0,pick item,2019-11-06 11:29:50.000Z, ,"['883767']", , , ,0.188,1149.0 +10643.0,place order,2019-11-06 12:11:33.000Z, ,"['883981','883980','883982','883979','883978','883983']","['990990']", , ,4.063,4361.98 +10644.0,pick item,2019-11-06 12:16:40.000Z, ,"['883976']", , , ,0.21,529.0 +10645.0,pick item,2019-11-06 12:22:54.000Z, ,"['883636']", , , ,0.28,449.0 +10646.0,package delivered,2019-11-06 12:24:31.000Z, , , ,"['660619']", ,7.66,7656.94 +10647.0,pick item,2019-11-06 12:56:11.000Z, ,"['883982']", , , ,0.166,799.0 +10648.0,pay order,2019-11-06 13:04:09.000Z, , ,"['990974']", , ,2.3080000000000003,1932.97 +10649.0,pick item,2019-11-06 13:13:13.000Z, ,"['883676']", , , ,0.78,99.99 +10650.0,item out of stock,2019-11-06 13:24:41.000Z, ,"['883853']", , , ,0.98,129.99 +10651.0,pick item,2019-11-06 13:36:47.000Z, ,"['883952']", , , ,0.2,39.99 +10652.0,place order,2019-11-06 13:42:54.000Z, ,"['883987','883985','883984','883986']","['990991']", , ,2.146,2511.99 +10653.0,pick item,2019-11-06 13:44:16.000Z, ,"['883978']", , , ,1.48,199.99 +10654.0,create package,2019-11-06 13:44:16.000Z, ,"['883762','883816','883928','883138','883929','883975','883703','883976']", ,"['660623']", ,7.962999999999999,12308.98 +10655.0,pick item,2019-11-06 13:45:48.000Z, ,"['883933']", , , ,0.88,89.99 +10656.0,failed delivery,2019-11-06 13:58:26.000Z, , , ,"['660616']", ,2.701,4867.98 +10657.0,send package,2019-11-06 14:04:01.000Z, , , ,"['660621']", ,0.59,558.99 +10658.0,reorder item,2019-11-06 14:06:44.000Z, ,"['883837']", , , ,0.483,1099.0 +10659.0,failed delivery,2019-11-06 14:17:23.000Z, , , ,"['660620']", ,1.6969999999999998,3977.0 +10660.0,pick item,2019-11-06 14:18:08.000Z, ,"['883586']", , , ,0.44,476.0 +10661.0,pick item,2019-11-06 14:36:41.000Z, ,"['883916']", , , ,0.28,449.0 +10662.0,reorder item,2019-11-06 14:37:36.000Z, ,"['883937']", , , ,0.495,129.0 +10663.0,pick item,2019-11-06 14:45:17.000Z, ,"['883953']", , , ,1.28,149.99 +10664.0,pick item,2019-11-06 14:51:19.000Z, ,"['883985']", , , ,0.188,1149.0 +10665.0,pick item,2019-11-06 15:07:24.000Z, ,"['883891']", , , ,1.48,199.99 +10666.0,pick item,2019-11-06 15:10:13.000Z, ,"['883820']", , , ,1.37,2500.0 +10667.0,pay order,2019-11-06 15:17:32.000Z, , ,"['990961']", , ,0.49,623.99 +10668.0,pick item,2019-11-06 15:17:44.000Z, ,"['883900']", , , ,1.28,149.99 +10669.0,create package,2019-11-06 15:17:44.000Z, ,"['883961','883918','883915','883960','883916','883598','883917']", ,"['660624']", ,4.235,3982.98 +10670.0,package delivered,2019-11-06 15:24:44.000Z, , , ,"['660622']", ,9.949,12613.94 +10671.0,send package,2019-11-06 15:38:54.000Z, , , ,"['660618']", ,0.28,89.99 +10672.0,place order,2019-11-06 15:45:35.000Z, ,"['883990','883989','883988']","['990992']", , ,0.5479999999999999,2032.0 +10673.0,confirm order,2019-11-06 15:50:01.000Z, , ,"['990984']", , ,2.129,2092.98 +10674.0,package delivered,2019-11-06 15:50:11.000Z, , , ,"['660617']", ,3.718,5987.99 +10675.0,pick item,2019-11-06 16:04:15.000Z, ,"['883924']", , , ,0.483,1099.0 +10676.0,pick item,2019-11-06 16:04:26.000Z, ,"['883870']", , , ,1.25,2200.0 +10677.0,confirm order,2019-11-06 16:07:25.000Z, , ,"['990980']", , ,0.978,213.99 +10678.0,pick item,2019-11-06 16:13:07.000Z, ,"['883931']", , , ,0.78,99.99 +10679.0,package delivered,2019-11-06 16:28:25.000Z, , , ,"['660620']", ,1.6969999999999998,3977.0 +10680.0,pay order,2019-11-06 16:41:46.000Z, , ,"['990870']", , ,1.49,683.99 +10681.0,reorder item,2019-11-06 16:47:32.000Z, ,"['883725']", , , ,0.88,89.99 +10682.0,pick item,2019-11-06 17:01:42.000Z, ,"['883965']", , , ,0.483,79.99 +10683.0,failed delivery,2019-11-06 17:25:27.000Z, , , ,"['660618']", ,0.28,89.99 +10684.0,place order,2019-11-06 17:50:58.000Z, ,"['883997','883995','883994','883993','883992','883996','883991']","['990993']", , ,3.801,2442.98 +10685.0,place order,2019-11-06 21:12:28.000Z, ,"['883998','883999','884000']","['990994']", , ,1.726,1043.98 +10686.0,place order,2019-11-07 07:16:31.000Z, ,"['884001','884002']","['990995']", , ,1.452,853.99 +10687.0,pick item,2019-11-07 07:22:46.000Z, ,"['883896']", , , ,0.172,699.0 +10688.0,confirm order,2019-11-07 07:26:13.000Z, , ,"['990990']", , ,4.063,4361.98 +10689.0,pick item,2019-11-07 08:04:31.000Z, ,"['883938']", , , ,0.483,79.99 +10690.0,send package,2019-11-07 08:07:43.000Z, , , ,"['660624']", ,4.235,3982.98 +10691.0,package delivered,2019-11-07 08:09:12.000Z, , , ,"['660613']", ,2.924,2766.98 +10692.0,item out of stock,2019-11-07 08:13:30.000Z, ,"['883998']", , , ,0.28,89.99 +10693.0,pick item,2019-11-07 08:16:37.000Z, ,"['884000']", , , ,0.166,799.0 +10694.0,create package,2019-11-07 08:16:37.000Z, ,"['883956','883636','883162','883844']", ,"['660625']", ,2.695,1253.99 +10695.0,pay order,2019-11-07 08:21:40.000Z, , ,"['990713']", , ,4.135,573.97 +10696.0,item out of stock,2019-11-07 08:25:22.000Z, ,"['883973']", , , ,0.38,29.99 +10697.0,pick item,2019-11-07 08:27:34.000Z, ,"['883963']", , , ,0.88,89.99 +10698.0,pick item,2019-11-07 08:32:03.000Z, ,"['883813']", , , ,0.172,699.0 +10699.0,package delivered,2019-11-07 08:47:25.000Z, , , ,"['660621']", ,0.59,558.99 +10700.0,confirm order,2019-11-07 08:48:02.000Z, , ,"['990995']", , ,1.452,853.99 +10701.0,item out of stock,2019-11-07 08:53:06.000Z, ,"['883955']", , , ,0.88,89.99 +10702.0,pay order,2019-11-07 09:07:17.000Z, , ,"['990951']", , ,1.46,2734.0 +10703.0,place order,2019-11-07 09:14:34.000Z, ,"['884003','884007','884008','884006','884009','884005','884004']","['990996']", , ,5.919,4572.96 +10704.0,item out of stock,2019-11-07 09:26:21.000Z, ,"['883990']", , , ,0.172,699.0 +10705.0,item out of stock,2019-11-07 09:26:54.000Z, ,"['883989']", , , ,0.166,799.0 +10706.0,pick item,2019-11-07 09:33:46.000Z, ,"['883980']", , , ,0.495,129.0 +10707.0,pick item,2019-11-07 09:34:20.000Z, ,"['883957']", , , ,0.172,699.0 +10708.0,create package,2019-11-07 09:34:20.000Z, ,"['883980','883982','883826','883772','883978','883856']", ,"['660626']", ,5.181,1567.96 +10709.0,pick item,2019-11-07 09:37:52.000Z, ,"['883966']", , , ,0.188,1149.0 +10710.0,payment reminder,2019-11-07 09:38:45.000Z, , ,"['990878']", , ,6.772,4850.95 +10711.0,pick item,2019-11-07 09:50:17.000Z, ,"['883901']", , , ,0.88,89.99 +10712.0,confirm order,2019-11-07 09:51:12.000Z, , ,"['990992']", , ,0.5479999999999999,2032.0 +10713.0,send package,2019-11-07 10:10:00.000Z, , , ,"['660623']", ,7.962999999999999,12308.98 +10714.0,reorder item,2019-11-07 10:35:18.000Z, ,"['883910']", , , ,0.28,449.0 +10715.0,reorder item,2019-11-07 10:35:53.000Z, ,"['883932']", , , ,0.98,129.99 +10716.0,pick item,2019-11-07 10:42:46.000Z, ,"['883983']", , , ,1.37,2500.0 +10717.0,place order,2019-11-07 10:48:56.000Z, ,"['884012','884013','884011','884010']","['990997']", , ,2.885,3113.98 +10718.0,pick item,2019-11-07 10:56:15.000Z, ,"['883981']", , , ,0.172,699.0 +10719.0,pick item,2019-11-07 11:02:30.000Z, ,"['883922']", , , ,0.188,1149.0 +10720.0,pick item,2019-11-07 11:05:55.000Z, ,"['884008']", , , ,0.88,89.99 +10721.0,create package,2019-11-07 11:05:55.000Z, ,"['883894','883911','883891','883586','883892','883893']", ,"['660627']", ,4.2810000000000015,5599.99 +10722.0,pick item,2019-11-07 11:12:35.000Z, ,"['883967']", , , ,1.37,2500.0 +10723.0,reorder item,2019-11-07 11:19:20.000Z, ,"['883919']", , , ,0.28,449.0 +10724.0,send package,2019-11-07 11:36:03.000Z, , , ,"['660626']", ,5.181,1567.96 +10725.0,reorder item,2019-11-07 11:57:36.000Z, ,"['883955']", , , ,0.88,89.99 +10726.0,confirm order,2019-11-07 12:33:41.000Z, , ,"['990997']", , ,2.885,3113.98 +10727.0,pay order,2019-11-07 12:43:05.000Z, , ,"['990979']", , ,1.992,1792.98 +10728.0,place order,2019-11-07 12:57:39.000Z, ,"['884014']","['990998']", , ,0.21,534.0 +10729.0,send package,2019-11-07 13:03:52.000Z, , , ,"['660625']", ,2.695,1253.99 +10730.0,pay order,2019-11-07 13:05:28.000Z, , ,"['990930']", , ,2.152,3547.98 +10731.0,pick item,2019-11-07 13:11:43.000Z, ,"['883948']", , , ,0.88,89.99 +10732.0,pick item,2019-11-07 13:13:34.000Z, ,"['883995']", , , ,1.48,199.99 +10733.0,package delivered,2019-11-07 13:13:36.000Z, , , ,"['660624']", ,4.235,3982.98 +10734.0,pay order,2019-11-07 13:33:08.000Z, , ,"['990977']", , ,1.733,2284.99 +10735.0,payment reminder,2019-11-07 13:36:41.000Z, , ,"['990880']", , ,1.27,723.98 +10736.0,pick item,2019-11-07 13:49:16.000Z, ,"['883977']", , , ,0.483,495.0 +10737.0,pick item,2019-11-07 14:01:26.000Z, ,"['884003']", , , ,0.166,799.0 +10738.0,pay order,2019-11-07 14:32:01.000Z, , ,"['990986']", , ,0.483,84.99 +10739.0,package delivered,2019-11-07 14:33:13.000Z, , , ,"['660616']", ,2.701,4867.98 +10740.0,item out of stock,2019-11-07 14:40:59.000Z, ,"['883855']", , , ,0.28,89.99 +10741.0,pick item,2019-11-07 14:50:25.000Z, ,"['883943']", , , ,0.21,529.0 +10742.0,create package,2019-11-07 14:50:25.000Z, ,"['883820','883812','883813','883821','883941','883995','883624','883676']", ,"['660628']", ,5.15,5689.97 +10743.0,pick item,2019-11-07 14:52:45.000Z, ,"['883811']", , , ,0.166,799.0 +10744.0,confirm order,2019-11-07 14:57:19.000Z, , ,"['990991']", , ,2.146,2511.99 +10745.0,item out of stock,2019-11-07 15:03:10.000Z, ,"['883999']", , , ,1.28,149.99 +10746.0,confirm order,2019-11-07 15:03:32.000Z, , ,"['990988']", , ,5.337999999999999,5931.96 +10747.0,pick item,2019-11-07 15:14:04.000Z, ,"['883972']", , , ,0.78,99.99 +10748.0,place order,2019-11-07 15:15:05.000Z, ,"['884016','884015']","['990999']", , ,1.152,833.99 +10749.0,reorder item,2019-11-07 15:39:43.000Z, ,"['883999']", , , ,1.28,149.99 +10750.0,pick item,2019-11-07 15:41:08.000Z, ,"['883889']", , , ,0.28,89.99 +10751.0,pick item,2019-11-07 15:51:03.000Z, ,"['883784']", , , ,0.44,476.0 +10752.0,pay order,2019-11-07 16:08:33.000Z, , ,"['990954']", , ,2.216,3383.99 +10753.0,pick item,2019-11-07 16:09:42.000Z, ,"['883970']", , , ,1.48,199.99 +10754.0,reorder item,2019-11-07 16:17:13.000Z, ,"['883808']", , , ,0.44,476.0 +10755.0,pick item,2019-11-07 16:46:59.000Z, ,"['883937']", , , ,0.495,129.0 +10756.0,pay order,2019-11-07 16:49:23.000Z, , ,"['990967']", , ,3.401,4652.99 +10757.0,place order,2019-11-07 16:49:58.000Z, ,"['884017','884018']","['991000']", , ,0.49,623.99 +10758.0,pick item,2019-11-07 16:54:53.000Z, ,"['884013']", , , ,0.98,129.99 +10759.0,pick item,2019-11-07 16:59:05.000Z, ,"['883642']", , , ,0.88,89.99 +10760.0,create package,2019-11-07 16:59:05.000Z, ,"['883561','883886','883829','883805','883889','883830']", ,"['660629']", ,2.992,2358.97 +10761.0,pick item,2019-11-07 17:04:24.000Z, ,"['883750']", , , ,0.483,79.99 +10762.0,item out of stock,2019-11-07 17:08:04.000Z, ,"['884011']", , , ,0.172,699.0 +10763.0,confirm order,2019-11-07 17:35:27.000Z, , ,"['990998']", , ,0.21,534.0 +10764.0,send package,2019-11-07 17:57:16.000Z, , , ,"['660627']", ,4.2810000000000015,5599.99 +10765.0,place order,2019-11-07 19:09:29.000Z, ,"['884019','884022','884023','884020','884024','884021']","['991001']", , ,3.264,2231.97 +10766.0,send package,2019-11-07 19:31:07.000Z, , , ,"['660628']", ,5.15,5689.97 +10767.0,pick item,2019-11-07 20:08:35.000Z, ,"['883993']", , , ,0.44,476.0 +10768.0,pick item,2019-11-07 20:54:22.000Z, ,"['884020']", , , ,0.28,449.0 +10769.0,place order,2019-11-07 21:58:32.000Z, ,"['884025']","['991002']", , ,0.166,804.0 +10770.0,confirm order,2019-11-08 08:00:12.000Z, , ,"['990993']", , ,3.801,2442.98 +10771.0,package delivered,2019-11-08 08:16:52.000Z, , , ,"['660623']", ,7.962999999999999,12308.98 +10772.0,pick item,2019-11-08 08:28:18.000Z, ,"['884019']", , , ,0.28,89.99 +10773.0,pick item,2019-11-08 08:31:19.000Z, ,"['883934']", , , ,0.166,799.0 +10774.0,place order,2019-11-08 08:48:39.000Z, ,"['884026','884029','884030','884028','884031','884027']","['991003']", , ,4.102,3789.97 +10775.0,pick item,2019-11-08 08:50:07.000Z, ,"['883908']", , , ,0.188,1149.0 +10776.0,create package,2019-11-08 08:50:07.000Z, ,"['883934','883774','883933','884019','883936','884020']", ,"['660630']", ,3.266,1617.96 +10777.0,confirm order,2019-11-08 08:52:04.000Z, , ,"['990994']", , ,1.726,1043.98 +10778.0,confirm order,2019-11-08 08:52:40.000Z, , ,"['990999']", , ,1.152,833.99 +10779.0,pay order,2019-11-08 08:57:43.000Z, , ,"['990980']", , ,0.978,213.99 +10780.0,send package,2019-11-08 08:58:15.000Z, , , ,"['660630']", ,3.266,1617.96 +10781.0,package delivered,2019-11-08 09:09:51.000Z, , , ,"['660618']", ,0.28,89.99 +10782.0,pick item,2019-11-08 09:17:11.000Z, ,"['884015']", , , ,0.172,699.0 +10783.0,pick item,2019-11-08 09:34:06.000Z, ,"['884012']", , , ,1.25,2200.0 +10784.0,reorder item,2019-11-08 09:38:04.000Z, ,"['883855']", , , ,0.28,89.99 +10785.0,confirm order,2019-11-08 09:47:45.000Z, , ,"['991000']", , ,0.49,623.99 +10786.0,pay order,2019-11-08 09:53:40.000Z, , ,"['990944']", , ,5.615,4395.96 +10787.0,send package,2019-11-08 10:09:34.000Z, , , ,"['660629']", ,2.992,2358.97 +10788.0,failed delivery,2019-11-08 10:17:26.000Z, , , ,"['660625']", ,2.695,1253.99 +10789.0,pick item,2019-11-08 10:18:42.000Z, ,"['884021']", , , ,1.48,199.99 +10790.0,reorder item,2019-11-08 10:23:11.000Z, ,"['883989']", , , ,0.166,799.0 +10791.0,pick item,2019-11-08 10:32:43.000Z, ,"['883682']", , , ,0.21,529.0 +10792.0,place order,2019-11-08 10:57:06.000Z, ,"['884033','884034','884035','884032']","['991004']", , ,2.6460000000000004,1838.98 +10793.0,pay order,2019-11-08 10:59:40.000Z, , ,"['990989']", , ,2.546,3608.99 +10794.0,pick item,2019-11-08 11:21:20.000Z, ,"['883991']", , , ,0.483,495.0 +10795.0,confirm order,2019-11-08 11:46:23.000Z, , ,"['991003']", , ,4.102,3789.97 +10796.0,reorder item,2019-11-08 12:05:16.000Z, ,"['884011']", , , ,0.172,699.0 +10797.0,package delivered,2019-11-08 12:45:20.000Z, , , ,"['660626']", ,5.181,1567.96 +10798.0,pick item,2019-11-08 12:48:39.000Z, ,"['884035']", , , ,0.483,495.0 +10799.0,create package,2019-11-08 12:48:39.000Z, ,"['883985','883912']", ,"['660631']", ,1.168,1278.99 +10800.0,pick item,2019-11-08 12:49:18.000Z, ,"['883954']", , , ,0.98,129.99 +10801.0,pay order,2019-11-08 13:09:28.000Z, , ,"['991003']", , ,4.102,3789.97 +10802.0,reorder item,2019-11-08 13:13:08.000Z, ,"['883973']", , , ,0.38,29.99 +10803.0,place order,2019-11-08 13:13:59.000Z, ,"['884036','884037','884040','884039','884038']","['991005']", , ,2.271,2663.99 +10804.0,pay order,2019-11-08 13:50:59.000Z, , ,"['990962']", , ,5.42,724.95 +10805.0,pick item,2019-11-08 13:54:03.000Z, ,"['883962']", , , ,0.483,1099.0 +10806.0,create package,2019-11-08 13:54:03.000Z, ,"['883804','883922','883923','883871','883870']", ,"['660632']", ,2.684,4013.98 +10807.0,confirm order,2019-11-08 13:55:55.000Z, , ,"['991005']", , ,2.271,2663.99 +10808.0,pick item,2019-11-08 13:58:15.000Z, ,"['883974']", , , ,0.483,79.99 +10809.0,pick item,2019-11-08 14:06:50.000Z, ,"['884018']", , , ,0.21,529.0 +10810.0,pick item,2019-11-08 14:08:25.000Z, ,"['883944']", , , ,0.172,699.0 +10811.0,pick item,2019-11-08 14:28:44.000Z, ,"['883801']", , , ,0.483,79.99 +10812.0,reorder item,2019-11-08 14:31:01.000Z, ,"['883964']", , , ,0.98,129.99 +10813.0,pick item,2019-11-08 14:39:41.000Z, ,"['884027']", , , ,0.483,79.99 +10814.0,create package,2019-11-08 14:39:41.000Z, ,"['883682','883944','883949','883948','883943','883946','883947']", ,"['660633']", ,4.697,4375.98 +10815.0,pick item,2019-11-08 14:44:57.000Z, ,"['884014']", , , ,0.21,529.0 +10816.0,send package,2019-11-08 14:46:15.000Z, , , ,"['660633']", ,4.697,4375.98 +10817.0,place order,2019-11-08 14:47:45.000Z, ,"['884046','884043','884047','884044','884041','884045','884042']","['991006']", , ,3.817,3313.97 +10818.0,reorder item,2019-11-08 15:00:11.000Z, ,"['883853']", , , ,0.98,129.99 +10819.0,pick item,2019-11-08 15:08:25.000Z, ,"['884024']", , , ,0.172,699.0 +10820.0,package delivered,2019-11-08 15:18:24.000Z, , , ,"['660628']", ,5.15,5689.97 +10821.0,item out of stock,2019-11-08 15:26:20.000Z, ,"['884029']", , , ,0.166,799.0 +10822.0,pick item,2019-11-08 15:37:12.000Z, ,"['883979']", , , ,0.38,29.99 +10823.0,pick item,2019-11-08 15:45:42.000Z, ,"['884016']", , , ,0.98,129.99 +10824.0,pick item,2019-11-08 15:50:30.000Z, ,"['884017']", , , ,0.28,89.99 +10825.0,pick item,2019-11-08 16:02:16.000Z, ,"['883932']", , , ,0.98,129.99 +10826.0,failed delivery,2019-11-08 16:06:40.000Z, , , ,"['660630']", ,3.266,1617.96 +10827.0,pay order,2019-11-08 16:13:56.000Z, , ,"['990955']", , ,4.5760000000000005,4962.97 +10828.0,package delivered,2019-11-08 16:16:26.000Z, , , ,"['660633']", ,4.697,4375.98 +10829.0,item out of stock,2019-11-08 16:19:32.000Z, ,"['883984']", , , ,0.495,129.0 +10830.0,pick item,2019-11-08 16:37:49.000Z, ,"['884010']", , , ,0.483,79.99 +10831.0,create package,2019-11-08 16:37:49.000Z, ,"['883924','883925','884000']", ,"['660634']", ,0.8590000000000001,2427.0 +10832.0,send package,2019-11-08 16:43:37.000Z, , , ,"['660634']", ,0.8590000000000001,2427.0 +10833.0,pick item,2019-11-08 16:50:00.000Z, ,"['884046']", , , ,1.48,199.99 +10834.0,place order,2019-11-08 16:55:18.000Z, ,"['884049','884050','884048']","['991007']", , ,1.035,1228.99 +10835.0,pick item,2019-11-08 16:57:05.000Z, ,"['884032']", , , ,0.2,39.99 +10836.0,pick item,2019-11-08 18:46:00.000Z, ,"['884033']", , , ,0.483,1099.0 +10837.0,create package,2019-11-08 18:46:00.000Z, ,"['883968','883972','883969','883966','883967','883932','883784','883931','883750','883970']", ,"['660635']", ,7.4689999999999985,5983.94 +10838.0,pay order,2019-11-08 18:53:02.000Z, , ,"['990947']", , ,0.6829999999999999,539.99 +10839.0,place order,2019-11-08 19:25:29.000Z, ,"['884052','884053','884051']","['991008']", , ,2.3480000000000003,2713.99 +10840.0,confirm order,2019-11-08 20:52:13.000Z, , ,"['991001']", , ,3.264,2231.97 +10841.0,place order,2019-11-08 22:50:48.000Z, ,"['884056','884057','884054','884055','884058']","['991009']", , ,2.613,3578.98 +10842.0,place order,2019-11-09 22:32:12.000Z, ,"['884059','884065','884064','884061','884062','884063','884060']","['991010']", , ,4.21,5148.97 +10843.0,payment reminder,2019-11-10 09:14:29.000Z, , ,"['990879']", , ,1.998,1438.96 +10844.0,payment reminder,2019-11-10 19:32:56.000Z, , ,"['990890']", , ,2.74,424.97 +10845.0,place order,2019-11-10 22:26:26.000Z, ,"['884071','884070','884069','884067','884068','884066']","['991011']", , ,2.281,1661.97 +10846.0,create package,2019-11-10 23:00:00.000Z, ,"['883901','883908','883900','883953','883896','883952','883951']", ,"['660636']", ,4.166,3076.96 +10847.0,package delivered,2019-11-11 07:31:44.000Z, , , ,"['660630']", ,3.266,1617.96 +10848.0,reorder item,2019-11-11 07:51:25.000Z, ,"['883998']", , , ,0.28,89.99 +10849.0,pick item,2019-11-11 07:55:00.000Z, ,"['883994']", , , ,0.495,129.0 +10850.0,pick item,2019-11-11 07:55:15.000Z, ,"['883198']", , , ,0.44,476.0 +10851.0,pick item,2019-11-11 07:57:35.000Z, ,"['883958']", , , ,0.483,79.99 +10852.0,pick item,2019-11-11 08:02:03.000Z, ,"['884064']", , , ,0.44,476.0 +10853.0,package delivered,2019-11-11 08:12:52.000Z, , , ,"['660629']", ,2.992,2358.97 +10854.0,place order,2019-11-11 08:27:53.000Z, ,"['884072','884073','884077','884078','884076','884074','884075']","['991012']", , ,3.535,2867.97 +10855.0,pick item,2019-11-11 08:31:55.000Z, ,"['883940']", , , ,1.37,2500.0 +10856.0,pick item,2019-11-11 08:46:20.000Z, ,"['884057']", , , ,0.2,39.99 +10857.0,pick item,2019-11-11 08:47:32.000Z, ,"['883890']", , , ,0.28,89.99 +10858.0,pick item,2019-11-11 08:51:39.000Z, ,"['883988']", , , ,0.21,529.0 +10859.0,pick item,2019-11-11 09:01:33.000Z, ,"['883986']", , , ,0.98,129.99 +10860.0,failed delivery,2019-11-11 09:01:43.000Z, , , ,"['660625']", ,2.695,1253.99 +10861.0,item out of stock,2019-11-11 09:20:59.000Z, ,"['884065']", , , ,0.172,699.0 +10862.0,confirm order,2019-11-11 09:31:10.000Z, , ,"['991004']", , ,2.6460000000000004,1838.98 +10863.0,confirm order,2019-11-11 09:45:53.000Z, , ,"['991009']", , ,2.613,3578.98 +10864.0,reorder item,2019-11-11 09:54:28.000Z, ,"['883984']", , , ,0.495,129.0 +10865.0,pick item,2019-11-11 09:58:56.000Z, ,"['884074']", , , ,0.188,1149.0 +10866.0,send package,2019-11-11 10:02:21.000Z, , , ,"['660631']", ,1.168,1278.99 +10867.0,pick item,2019-11-11 10:09:05.000Z, ,"['884058']", , , ,1.37,2500.0 +10868.0,pick item,2019-11-11 10:10:48.000Z, ,"['884055']", , , ,0.28,89.99 +10869.0,pick item,2019-11-11 10:13:45.000Z, ,"['884045']", , , ,0.166,799.0 +10870.0,place order,2019-11-11 10:15:34.000Z, ,"['884079','884081','884080','884082']","['991013']", , ,2.423,723.97 +10871.0,confirm order,2019-11-11 10:19:19.000Z, , ,"['991008']", , ,2.3480000000000003,2713.99 +10872.0,pick item,2019-11-11 10:36:48.000Z, ,"['884060']", , , ,0.188,1149.0 +10873.0,item out of stock,2019-11-11 10:38:17.000Z, ,"['884006']", , , ,0.38,29.99 +10874.0,pick item,2019-11-11 10:40:54.000Z, ,"['884077']", , , ,0.166,799.0 +10875.0,pay order,2019-11-11 10:42:56.000Z, , ,"['990976']", , ,0.338,1503.0 +10876.0,pay order,2019-11-11 10:43:50.000Z, , ,"['990959']", , ,3.1260000000000003,2442.98 +10877.0,pick item,2019-11-11 10:49:09.000Z, ,"['884039']", , , ,0.483,495.0 +10878.0,reorder item,2019-11-11 10:51:03.000Z, ,"['884029']", , , ,0.166,799.0 +10879.0,package delivered,2019-11-11 10:53:07.000Z, , , ,"['660627']", ,4.2810000000000015,5599.99 +10880.0,send package,2019-11-11 10:57:52.000Z, , , ,"['660635']", ,7.4689999999999985,5983.94 +10881.0,send package,2019-11-11 11:17:22.000Z, , , ,"['660632']", ,2.684,4013.98 +10882.0,pick item,2019-11-11 11:21:46.000Z, ,"['884053']", , , ,0.495,129.0 +10883.0,create package,2019-11-11 11:21:46.000Z, ,"['883767']", ,"['660637']", ,0.188,1149.0 +10884.0,item out of stock,2019-11-11 11:25:25.000Z, ,"['883997']", , , ,0.21,529.0 +10885.0,pick item,2019-11-11 11:30:52.000Z, ,"['884030']", , , ,1.28,149.99 +10886.0,create package,2019-11-11 11:30:52.000Z, ,"['883938','883962','883937','883965','883963','883988']", ,"['660638']", ,3.034,2006.97 +10887.0,confirm order,2019-11-11 11:33:32.000Z, , ,"['991007']", , ,1.035,1228.99 +10888.0,pick item,2019-11-11 11:34:28.000Z, ,"['884061']", , , ,1.37,2500.0 +10889.0,failed delivery,2019-11-11 11:36:25.000Z, , , ,"['660634']", ,0.8590000000000001,2427.0 +10890.0,pick item,2019-11-11 11:39:07.000Z, ,"['884056']", , , ,0.483,495.0 +10891.0,pick item,2019-11-11 11:50:27.000Z, ,"['883987']", , , ,0.483,1099.0 +10892.0,place order,2019-11-11 11:50:55.000Z, ,"['884084','884088','884087','884085','884083','884086','884089']","['991014']", , ,5.751,3872.96 +10893.0,send package,2019-11-11 11:52:31.000Z, , , ,"['660637']", ,0.188,1149.0 +10894.0,item out of stock,2019-11-11 12:08:10.000Z, ,"['884026']", , , ,1.25,2200.0 +10895.0,pick item,2019-11-11 12:17:25.000Z, ,"['884031']", , , ,0.483,79.99 +10896.0,pick item,2019-11-11 12:48:23.000Z, ,"['884051']", , , ,0.483,79.99 +10897.0,confirm order,2019-11-11 12:53:07.000Z, , ,"['991002']", , ,0.166,804.0 +10898.0,reorder item,2019-11-11 12:53:23.000Z, ,"['884065']", , , ,0.172,699.0 +10899.0,pick item,2019-11-11 13:20:03.000Z, ,"['883926']", , , ,0.172,699.0 +10900.0,create package,2019-11-11 13:20:03.000Z, ,"['884003','883954','883957','884061','884008','884064','884060']", ,"['660639']", ,4.1960000000000015,5842.98 +10901.0,pick item,2019-11-11 13:23:40.000Z, ,"['884040']", , , ,0.44,476.0 +10902.0,pick item,2019-11-11 13:24:43.000Z, ,"['884067']", , , ,0.28,449.0 +10903.0,package delivered,2019-11-11 13:32:15.000Z, , , ,"['660631']", ,1.168,1278.99 +10904.0,pay order,2019-11-11 13:33:15.000Z, , ,"['990994']", , ,1.726,1043.98 +10905.0,pick item,2019-11-11 13:48:58.000Z, ,"['883879']", , , ,0.98,129.99 +10906.0,confirm order,2019-11-11 13:51:06.000Z, , ,"['991006']", , ,3.817,3313.97 +10907.0,pick item,2019-11-11 13:52:39.000Z, ,"['884002']", , , ,1.28,149.99 +10908.0,place order,2019-11-11 14:01:38.000Z, ,"['884091','884093','884092','884090','884094']","['991015']", , ,2.249,2508.98 +10909.0,send package,2019-11-11 14:06:31.000Z, , , ,"['660636']", ,4.166,3076.96 +10910.0,item out of stock,2019-11-11 14:18:31.000Z, ,"['884078']", , , ,0.483,79.99 +10911.0,package delivered,2019-11-11 14:18:35.000Z, , , ,"['660634']", ,0.8590000000000001,2427.0 +10912.0,pick item,2019-11-11 14:29:13.000Z, ,"['884087']", , , ,0.78,99.99 +10913.0,package delivered,2019-11-11 14:33:58.000Z, , , ,"['660625']", ,2.695,1253.99 +10914.0,failed delivery,2019-11-11 14:51:23.000Z, , , ,"['660637']", ,0.188,1149.0 +10915.0,item out of stock,2019-11-11 14:53:50.000Z, ,"['884059']", , , ,0.98,129.99 +10916.0,send package,2019-11-11 15:01:39.000Z, , , ,"['660638']", ,3.034,2006.97 +10917.0,pick item,2019-11-11 15:06:27.000Z, ,"['884094']", , , ,0.483,1099.0 +10918.0,package delivered,2019-11-11 15:12:41.000Z, , , ,"['660635']", ,7.4689999999999985,5983.94 +10919.0,pay order,2019-11-11 15:17:08.000Z, , ,"['990911']", , ,1.5830000000000002,1039.98 +10920.0,place order,2019-11-11 15:23:03.000Z, ,"['884096','884095','884097']","['991016']", , ,1.629,2032.99 +10921.0,pick item,2019-11-11 15:29:42.000Z, ,"['884089']", , , ,0.166,799.0 +10922.0,create package,2019-11-11 15:29:42.000Z, ,"['883981','884053','884067','883642','884051','883979','883983']", ,"['660640']", ,4.06,3976.97 +10923.0,reorder item,2019-11-11 15:29:52.000Z, ,"['884006']", , , ,0.38,29.99 +10924.0,reorder item,2019-11-11 15:31:45.000Z, ,"['884026']", , , ,1.25,2200.0 +10925.0,item out of stock,2019-11-11 15:32:14.000Z, ,"['884073']", , , ,0.495,129.0 +10926.0,item out of stock,2019-11-11 15:33:43.000Z, ,"['884043']", , , ,0.44,476.0 +10927.0,pick item,2019-11-11 15:47:07.000Z, ,"['884029']", , , ,0.166,799.0 +10928.0,pick item,2019-11-11 15:49:28.000Z, ,"['883396']", , , ,0.88,89.99 +10929.0,item out of stock,2019-11-11 15:59:57.000Z, ,"['884088']", , , ,1.28,149.99 +10930.0,item out of stock,2019-11-11 16:25:44.000Z, ,"['884054']", , , ,0.28,449.0 +10931.0,item out of stock,2019-11-11 16:29:21.000Z, ,"['883942']", , , ,0.78,99.99 +10932.0,confirm order,2019-11-11 16:53:07.000Z, , ,"['991011']", , ,2.281,1661.97 +10933.0,place order,2019-11-11 17:05:54.000Z, ,"['884099','884098']","['991017']", , ,0.338,1503.0 +10934.0,pick item,2019-11-11 17:10:15.000Z, ,"['884037']", , , ,0.88,89.99 +10935.0,pick item,2019-11-11 17:16:16.000Z, ,"['884086']", , , ,1.37,2500.0 +10936.0,pick item,2019-11-11 17:17:10.000Z, ,"['883996']", , , ,0.21,529.0 +10937.0,reorder item,2019-11-11 17:47:09.000Z, ,"['884059']", , , ,0.98,129.99 +10938.0,confirm order,2019-11-11 17:48:51.000Z, , ,"['991017']", , ,0.338,1503.0 +10939.0,pay order,2019-11-11 17:56:11.000Z, , ,"['990965']", , ,2.655,4731.99 +10940.0,pay order,2019-11-11 18:03:47.000Z, , ,"['991005']", , ,2.271,2663.99 +10941.0,pick item,2019-11-11 18:08:54.000Z, ,"['884050']", , , ,0.38,29.99 +10942.0,pick item,2019-11-11 18:33:45.000Z, ,"['884052']", , , ,1.37,2500.0 +10943.0,create package,2019-11-11 18:33:45.000Z, ,"['883977','883974','884012','884013','884010']", ,"['660641']", ,3.679,2984.97 +10944.0,pick item,2019-11-11 18:55:28.000Z, ,"['884028']", , , ,0.44,476.0 +10945.0,place order,2019-11-11 18:57:16.000Z, ,"['884100','884103','884101','884102']","['991018']", , ,2.906,1223.97 +10946.0,pick item,2019-11-11 19:50:26.000Z, ,"['884066']", , , ,0.28,89.99 +10947.0,send package,2019-11-11 20:08:40.000Z, , , ,"['660641']", ,3.679,2984.97 +10948.0,place order,2019-11-11 22:34:07.000Z, ,"['884109','884106','884104','884105','884108','884107']","['991019']", , ,3.525,3448.98 +10949.0,pick item,2019-11-12 07:05:40.000Z, ,"['883927']", , , ,0.166,799.0 +10950.0,send package,2019-11-12 07:38:25.000Z, , , ,"['660639']", ,4.1960000000000015,5842.98 +10951.0,item out of stock,2019-11-12 08:09:43.000Z, ,"['884062']", , , ,0.28,89.99 +10952.0,pick item,2019-11-12 08:23:15.000Z, ,"['884049']", , , ,0.483,495.0 +10953.0,confirm order,2019-11-12 08:24:51.000Z, , ,"['991015']", , ,2.249,2508.98 +10954.0,pick item,2019-11-12 08:25:30.000Z, ,"['883599']", , , ,1.28,149.99 +10955.0,create package,2019-11-12 08:25:30.000Z, ,"['883993','884046','883991','883927','884045','883996','883811','883926','883994','883940']", ,"['660642']", ,5.148,7424.99 +10956.0,pick item,2019-11-12 08:25:34.000Z, ,"['884068']", , , ,0.166,799.0 +10957.0,item out of stock,2019-11-12 08:28:19.000Z, ,"['884104']", , , ,0.44,476.0 +10958.0,place order,2019-11-12 08:32:31.000Z, ,"['884111','884110']","['991020']", , ,0.763,949.0 +10959.0,confirm order,2019-11-12 08:40:51.000Z, , ,"['991014']", , ,5.751,3872.96 +10960.0,send package,2019-11-12 08:49:13.000Z, , , ,"['660640']", ,4.06,3976.97 +10961.0,reorder item,2019-11-12 08:54:24.000Z, ,"['884073']", , , ,0.495,129.0 +10962.0,item out of stock,2019-11-12 08:54:50.000Z, ,"['884085']", , , ,0.495,129.0 +10963.0,pick item,2019-11-12 09:01:28.000Z, ,"['884092']", , , ,0.44,476.0 +10964.0,pay order,2019-11-12 09:09:01.000Z, , ,"['990879']", , ,1.998,1438.96 +10965.0,package delivered,2019-11-12 09:12:18.000Z, , , ,"['660632']", ,2.684,4013.98 +10966.0,pick item,2019-11-12 09:18:57.000Z, ,"['883837']", , , ,0.483,1099.0 +10967.0,pick item,2019-11-12 09:23:14.000Z, ,"['884083']", , , ,0.88,89.99 +10968.0,pay order,2019-11-12 09:25:39.000Z, , ,"['990998']", , ,0.21,534.0 +10969.0,pick item,2019-11-12 09:37:31.000Z, ,"['884076']", , , ,1.28,149.99 +10970.0,reorder item,2019-11-12 09:43:46.000Z, ,"['884043']", , , ,0.44,476.0 +10971.0,pick item,2019-11-12 09:53:54.000Z, ,"['884100']", , , ,0.166,799.0 +10972.0,confirm order,2019-11-12 09:55:38.000Z, , ,"['990996']", , ,5.919,4572.96 +10973.0,pick item,2019-11-12 09:56:16.000Z, ,"['884044']", , , ,0.188,1149.0 +10974.0,pick item,2019-11-12 09:59:15.000Z, ,"['884108']", , , ,0.495,129.0 +10975.0,pick item,2019-11-12 10:03:50.000Z, ,"['884047']", , , ,0.483,495.0 +10976.0,send package,2019-11-12 10:13:24.000Z, , , ,"['660642']", ,5.148,7424.99 +10977.0,package delivered,2019-11-12 10:17:37.000Z, , , ,"['660640']", ,4.06,3976.97 +10978.0,place order,2019-11-12 10:24:50.000Z, ,"['884116','884114','884113','884112','884115']","['991021']", , ,4.246,5079.98 +10979.0,pick item,2019-11-12 10:24:54.000Z, ,"['884110']", , , ,0.483,495.0 +10980.0,create package,2019-11-12 10:24:54.000Z, ,"['884100','884015','884016','884014']", ,"['660643']", ,1.528,2156.99 +10981.0,item out of stock,2019-11-12 10:35:18.000Z, ,"['884102']", , , ,0.28,89.99 +10982.0,pick item,2019-11-12 10:36:48.000Z, ,"['884116']", , , ,0.483,495.0 +10983.0,send package,2019-11-12 10:36:53.000Z, , , ,"['660643']", ,1.528,2156.99 +10984.0,confirm order,2019-11-12 10:43:07.000Z, , ,"['991012']", , ,3.535,2867.97 +10985.0,pick item,2019-11-12 10:44:55.000Z, ,"['884042']", , , ,0.28,89.99 +10986.0,reorder item,2019-11-12 10:45:08.000Z, ,"['884104']", , , ,0.44,476.0 +10987.0,pick item,2019-11-12 10:54:05.000Z, ,"['884001']", , , ,0.172,699.0 +10988.0,pick item,2019-11-12 11:09:04.000Z, ,"['884075']", , , ,0.44,476.0 +10989.0,create package,2019-11-12 11:09:04.000Z, ,"['884024','884021']", ,"['660644']", ,1.652,898.99 +10990.0,failed delivery,2019-11-12 11:10:53.000Z, , , ,"['660636']", ,4.166,3076.96 +10991.0,failed delivery,2019-11-12 11:18:22.000Z, , , ,"['660642']", ,5.148,7424.99 +10992.0,package delivered,2019-11-12 11:21:28.000Z, , , ,"['660637']", ,0.188,1149.0 +10993.0,package delivered,2019-11-12 11:25:41.000Z, , , ,"['660641']", ,3.679,2984.97 +10994.0,item out of stock,2019-11-12 11:52:29.000Z, ,"['884070']", , , ,0.28,89.99 +10995.0,pay order,2019-11-12 11:59:26.000Z, , ,"['990972']", , ,2.396,3133.99 +10996.0,pick item,2019-11-12 12:02:58.000Z, ,"['884084']", , , ,0.78,99.99 +10997.0,place order,2019-11-12 12:09:27.000Z, ,"['884117','884118','884119']","['991022']", , ,1.02,550.98 +10998.0,pick item,2019-11-12 12:20:55.000Z, ,"['884041']", , , ,0.78,99.99 +10999.0,create package,2019-11-12 12:20:55.000Z, ,"['883801','884033','884035','883958','884050','884032','883890','884049']", ,"['660645']", ,3.275,2408.95 +11000.0,package delivered,2019-11-12 12:35:55.000Z, , , ,"['660643']", ,1.528,2156.99 +11001.0,reorder item,2019-11-12 12:53:44.000Z, ,"['884062']", , , ,0.28,89.99 +11002.0,pay order,2019-11-12 12:59:50.000Z, , ,"['991008']", , ,2.3480000000000003,2713.99 +11003.0,item out of stock,2019-11-12 13:03:11.000Z, ,"['884005']", , , ,1.48,199.99 +11004.0,confirm order,2019-11-12 13:11:36.000Z, , ,"['991022']", , ,1.02,550.98 +11005.0,package delivered,2019-11-12 13:28:11.000Z, , , ,"['660638']", ,3.034,2006.97 +11006.0,place order,2019-11-12 13:38:42.000Z, ,"['884121','884120']","['991023']", , ,0.863,529.99 +11007.0,confirm order,2019-11-12 13:38:50.000Z, , ,"['991016']", , ,1.629,2032.99 +11008.0,reorder item,2019-11-12 13:52:17.000Z, ,"['884102']", , , ,0.28,89.99 +11009.0,item out of stock,2019-11-12 13:58:00.000Z, ,"['884115']", , , ,0.483,79.99 +11010.0,pick item,2019-11-12 14:11:45.000Z, ,"['884091']", , , ,0.78,99.99 +11011.0,pick item,2019-11-12 14:15:56.000Z, ,"['884025']", , , ,0.166,799.0 +11012.0,confirm order,2019-11-12 14:17:52.000Z, , ,"['991021']", , ,4.246,5079.98 +11013.0,pick item,2019-11-12 14:24:19.000Z, ,"['883959']", , , ,0.78,99.99 +11014.0,confirm order,2019-11-12 14:36:47.000Z, , ,"['991013']", , ,2.423,723.97 +11015.0,package delivered,2019-11-12 14:39:33.000Z, , , ,"['660639']", ,4.1960000000000015,5842.98 +11016.0,pick item,2019-11-12 14:39:45.000Z, ,"['883971']", , , ,0.172,699.0 +11017.0,pick item,2019-11-12 14:42:07.000Z, ,"['884081']", , , ,0.483,79.99 +11018.0,pick item,2019-11-12 14:42:32.000Z, ,"['884120']", , , ,0.483,495.0 +11019.0,reorder item,2019-11-12 14:46:07.000Z, ,"['884078']", , , ,0.483,79.99 +11020.0,package delivered,2019-11-12 14:58:05.000Z, , , ,"['660636']", ,4.166,3076.96 +11021.0,pick item,2019-11-12 15:00:46.000Z, ,"['884034']", , , ,1.48,199.99 +11022.0,place order,2019-11-12 15:37:11.000Z, ,"['884124','884122','884123','884125','884127','884126']","['991024']", , ,4.3610000000000015,7121.99 +11023.0,confirm order,2019-11-12 15:38:48.000Z, , ,"['991020']", , ,0.763,949.0 +11024.0,reorder item,2019-11-12 15:42:34.000Z, ,"['884085']", , , ,0.495,129.0 +11025.0,item out of stock,2019-11-12 15:43:18.000Z, ,"['884118']", , , ,0.44,476.0 +11026.0,item out of stock,2019-11-12 15:49:18.000Z, ,"['884071']", , , ,0.495,129.0 +11027.0,pick item,2019-11-12 16:03:01.000Z, ,"['884097']", , , ,0.166,799.0 +11028.0,create package,2019-11-12 16:03:01.000Z, ,"['884031','884091','884028','884092','884110','883396','884027','884029','884030','884018','884094','884017']", ,"['660646']", ,6.408,4463.94 +11029.0,failed delivery,2019-11-12 16:35:23.000Z, , , ,"['660642']", ,5.148,7424.99 +11030.0,pick item,2019-11-12 16:42:43.000Z, ,"['884004']", , , ,1.28,149.99 +11031.0,place order,2019-11-12 17:34:09.000Z, ,"['884130','884131','884128','884132','884129','884133']","['991025']", , ,3.3510000000000004,1959.96 +11032.0,pick item,2019-11-12 18:09:07.000Z, ,"['884123']", , , ,0.28,89.99 +11033.0,reorder item,2019-11-12 18:30:49.000Z, ,"['884118']", , , ,0.44,476.0 +11034.0,place order,2019-11-12 20:22:02.000Z, ,"['884138','884136','884137','884134','884135']","['991026']", , ,2.53,931.98 +11035.0,place order,2019-11-13 03:30:06.000Z, ,"['884139','884140','884141']","['991027']", , ,1.318,1632.99 +11036.0,payment reminder,2019-11-13 07:37:23.000Z, , ,"['990909']", , ,1.68,244.98 +11037.0,confirm order,2019-11-13 07:44:31.000Z, , ,"['991010']", , ,4.21,5148.97 +11038.0,pick item,2019-11-13 07:52:35.000Z, ,"['884107']", , , ,0.28,89.99 +11039.0,reorder item,2019-11-13 07:54:02.000Z, ,"['883942']", , , ,0.78,99.99 +11040.0,pick item,2019-11-13 08:13:52.000Z, ,"['884126']", , , ,1.37,2500.0 +11041.0,pick item,2019-11-13 08:24:14.000Z, ,"['884022']", , , ,0.88,89.99 +11042.0,pick item,2019-11-13 08:31:02.000Z, ,"['884128']", , , ,0.88,89.99 +11043.0,item out of stock,2019-11-13 08:34:43.000Z, ,"['884129']", , , ,0.98,129.99 +11044.0,item out of stock,2019-11-13 08:40:41.000Z, ,"['884101']", , , ,0.98,129.99 +11045.0,reorder item,2019-11-13 08:48:37.000Z, ,"['884071']", , , ,0.495,129.0 +11046.0,pick item,2019-11-13 08:50:57.000Z, ,"['883964']", , , ,0.98,129.99 +11047.0,pick item,2019-11-13 08:53:48.000Z, ,"['884096']", , , ,0.98,129.99 +11048.0,send package,2019-11-13 08:54:00.000Z, , , ,"['660644']", ,1.652,898.99 +11049.0,place order,2019-11-13 08:58:54.000Z, ,"['884144','884145','884143','884142']","['991028']", , ,1.639,2531.99 +11050.0,pick item,2019-11-13 09:02:27.000Z, ,"['884112']", , , ,1.25,2200.0 +11051.0,pick item,2019-11-13 09:05:18.000Z, ,"['884095']", , , ,0.483,1099.0 +11052.0,send package,2019-11-13 09:07:21.000Z, , , ,"['660646']", ,6.408,4463.94 +11053.0,confirm order,2019-11-13 09:10:35.000Z, , ,"['991027']", , ,1.318,1632.99 +11054.0,pick item,2019-11-13 09:11:04.000Z, ,"['883594']", , , ,0.172,699.0 +11055.0,pick item,2019-11-13 09:13:23.000Z, ,"['883684']", , , ,0.495,129.0 +11056.0,create package,2019-11-13 09:13:23.000Z, ,"['883684','884002','884037','884040','883198','884039','884001']", ,"['660647']", ,4.19,2514.98 +11057.0,pick item,2019-11-13 09:14:27.000Z, ,"['883992']", , , ,0.483,79.99 +11058.0,confirm order,2019-11-13 09:15:33.000Z, , ,"['991024']", , ,4.3610000000000015,7121.99 +11059.0,pick item,2019-11-13 09:27:41.000Z, ,"['884038']", , , ,0.188,1149.0 +11060.0,pick item,2019-11-13 09:28:49.000Z, ,"['884106']", , , ,0.78,99.99 +11061.0,reorder item,2019-11-13 09:41:26.000Z, ,"['884005']", , , ,1.48,199.99 +11062.0,pick item,2019-11-13 09:47:18.000Z, ,"['884140']", , , ,0.166,799.0 +11063.0,pick item,2019-11-13 10:37:39.000Z, ,"['884114']", , , ,1.25,2200.0 +11064.0,confirm order,2019-11-13 10:48:19.000Z, , ,"['991018']", , ,2.906,1223.97 +11065.0,confirm order,2019-11-13 10:50:36.000Z, , ,"['991028']", , ,1.639,2531.99 +11066.0,pick item,2019-11-13 11:06:08.000Z, ,"['883935']", , , ,0.166,799.0 +11067.0,reorder item,2019-11-13 11:08:19.000Z, ,"['884088']", , , ,1.28,149.99 +11068.0,send package,2019-11-13 11:09:26.000Z, , , ,"['660647']", ,4.19,2514.98 +11069.0,confirm order,2019-11-13 11:09:35.000Z, , ,"['991019']", , ,3.525,3448.98 +11070.0,place order,2019-11-13 11:17:36.000Z, ,"['884147','884150','884149','884151','884146','884148']","['991029']", , ,5.363,6782.98 +11071.0,pick item,2019-11-13 11:26:52.000Z, ,"['884090']", , , ,0.38,29.99 +11072.0,create package,2019-11-13 11:26:52.000Z, ,"['884057','884076','884074','884075','884077','884056','883594','884055','884058']", ,"['660648']", ,4.579,6397.97 +11073.0,pick item,2019-11-13 11:35:42.000Z, ,"['884121']", , , ,0.38,29.99 +11074.0,package delivered,2019-11-13 12:28:38.000Z, , , ,"['660644']", ,1.652,898.99 +11075.0,pick item,2019-11-13 12:36:28.000Z, ,"['883910']", , , ,0.28,449.0 +11076.0,confirm order,2019-11-13 12:41:39.000Z, , ,"['991025']", , ,3.3510000000000004,1959.96 +11077.0,pick item,2019-11-13 12:44:06.000Z, ,"['884023']", , , ,0.172,699.0 +11078.0,place order,2019-11-13 12:54:59.000Z, ,"['884153','884154','884152']","['991030']", , ,0.871,1462.0 +11079.0,pick item,2019-11-13 13:00:14.000Z, ,"['884048']", , , ,0.172,699.0 +11080.0,item out of stock,2019-11-13 13:01:05.000Z, ,"['884122']", , , ,0.483,1099.0 +11081.0,pick item,2019-11-13 13:04:10.000Z, ,"['884139']", , , ,0.98,129.99 +11082.0,pick item,2019-11-13 13:36:19.000Z, ,"['884072']", , , ,0.483,79.99 +11083.0,send package,2019-11-13 13:36:31.000Z, , , ,"['660645']", ,3.275,2408.95 +11084.0,pay order,2019-11-13 13:42:16.000Z, , ,"['991027']", , ,1.318,1632.99 +11085.0,reorder item,2019-11-13 14:01:00.000Z, ,"['883990']", , , ,0.172,699.0 +11086.0,pick item,2019-11-13 14:10:00.000Z, ,"['884146']", , , ,1.37,2500.0 +11087.0,reorder item,2019-11-13 14:10:25.000Z, ,"['884122']", , , ,0.483,1099.0 +11088.0,reorder item,2019-11-13 14:32:49.000Z, ,"['884115']", , , ,0.483,79.99 +11089.0,package delivered,2019-11-13 14:43:51.000Z, , , ,"['660645']", ,3.275,2408.95 +11090.0,pick item,2019-11-13 14:50:52.000Z, ,"['884069']", , , ,0.78,99.99 +11091.0,package delivered,2019-11-13 14:58:18.000Z, , , ,"['660646']", ,6.408,4463.94 +11092.0,place order,2019-11-13 15:09:45.000Z, ,"['884155','884156']","['991031']", , ,1.046,893.99 +11093.0,pay order,2019-11-13 15:19:24.000Z, , ,"['990981']", , ,2.928,6154.0 +11094.0,confirm order,2019-11-13 15:34:58.000Z, , ,"['991030']", , ,0.871,1462.0 +11095.0,pick item,2019-11-13 15:42:36.000Z, ,"['883999']", , , ,1.28,149.99 +11096.0,create package,2019-11-13 15:42:36.000Z, ,"['883987','883986']", ,"['660649']", ,1.463,1228.99 +11097.0,item out of stock,2019-11-13 15:45:27.000Z, ,"['884145']", , , ,0.166,799.0 +11098.0,pick item,2019-11-13 15:55:17.000Z, ,"['884138']", , , ,0.28,89.99 +11099.0,package delivered,2019-11-13 15:59:36.000Z, , , ,"['660647']", ,4.19,2514.98 +11100.0,pick item,2019-11-13 16:28:39.000Z, ,"['884148']", , , ,1.37,2500.0 +11101.0,create package,2019-11-13 16:28:39.000Z, ,"['884139','884140','883971','883879']", ,"['660650']", ,2.298,1757.98 +11102.0,place order,2019-11-13 16:39:18.000Z, ,"['884158','884157','884161','884159','884162','884160']","['991032']", , ,2.989,2303.97 +11103.0,reorder item,2019-11-13 16:49:14.000Z, ,"['884054']", , , ,0.28,449.0 +11104.0,confirm order,2019-11-13 16:52:52.000Z, , ,"['991032']", , ,2.989,2303.97 +11105.0,reorder item,2019-11-13 16:54:38.000Z, ,"['884145']", , , ,0.166,799.0 +11106.0,package delivered,2019-11-13 17:02:36.000Z, , , ,"['660642']", ,5.148,7424.99 +11107.0,pay order,2019-11-13 17:04:29.000Z, , ,"['990969']", , ,2.58,1302.98 +11108.0,pick item,2019-11-13 17:14:44.000Z, ,"['884103']", , , ,1.48,199.99 +11109.0,confirm order,2019-11-13 17:27:22.000Z, , ,"['991026']", , ,2.53,931.98 +11110.0,pick item,2019-11-13 17:28:43.000Z, ,"['884080']", , , ,0.28,449.0 +11111.0,item out of stock,2019-11-13 17:32:34.000Z, ,"['884093']", , , ,0.166,799.0 +11112.0,pay order,2019-11-13 18:10:55.000Z, , ,"['991004']", , ,2.6460000000000004,1838.98 +11113.0,pick item,2019-11-13 18:26:18.000Z, ,"['884160']", , , ,0.483,495.0 +11114.0,place order,2019-11-13 18:38:23.000Z, ,"['884169','884167','884164','884168','884165','884163','884166']","['991033']", , ,2.877,6422.0 +11115.0,pick item,2019-11-13 18:54:05.000Z, ,"['884054']", , , ,0.28,449.0 +11116.0,create package,2019-11-13 18:54:05.000Z, ,"['884084','884081','884080','884087','884083','884086','884089']", ,"['660651']", ,4.739,4117.96 +11117.0,pick item,2019-11-13 20:22:39.000Z, ,"['884133']", , , ,0.188,1149.0 +11118.0,place order,2019-11-13 21:56:21.000Z, ,"['884173','884170','884174','884175','884172','884171']","['991034']", , ,3.983,4102.97 +11119.0,pick item,2019-11-14 07:41:35.000Z, ,"['884115']", , , ,0.483,79.99 +11120.0,pick item,2019-11-14 08:28:17.000Z, ,"['884155']", , , ,0.88,89.99 +11121.0,pick item,2019-11-14 08:30:41.000Z, ,"['884175']", , , ,0.88,89.99 +11122.0,confirm order,2019-11-14 08:36:56.000Z, , ,"['991033']", , ,2.877,6422.0 +11123.0,payment reminder,2019-11-14 08:38:03.000Z, , ,"['990917']", , ,2.555,383.98 +11124.0,send package,2019-11-14 08:39:30.000Z, , , ,"['660651']", ,4.739,4117.96 +11125.0,place order,2019-11-14 08:44:17.000Z, ,"['884176','884177']","['991035']", , ,0.82,510.99 +11126.0,item out of stock,2019-11-14 08:48:17.000Z, ,"['884157']", , , ,0.483,1099.0 +11127.0,send package,2019-11-14 09:02:52.000Z, , , ,"['660648']", ,4.579,6397.97 +11128.0,pick item,2019-11-14 09:13:50.000Z, ,"['884149']", , , ,0.38,29.99 +11129.0,pick item,2019-11-14 09:25:10.000Z, ,"['884143']", , , ,0.78,99.99 +11130.0,pick item,2019-11-14 09:28:10.000Z, ,"['884009']", , , ,0.483,1099.0 +11131.0,create package,2019-11-14 09:28:10.000Z, ,"['884149','884146','884052','884069','884148','884068','884066']", ,"['660652']", ,5.716,8518.97 +11132.0,pick item,2019-11-14 09:32:14.000Z, ,"['884152']", , , ,0.495,129.0 +11133.0,pick item,2019-11-14 09:33:52.000Z, ,"['884173']", , , ,1.25,2200.0 +11134.0,item out of stock,2019-11-14 09:40:23.000Z, ,"['884132']", , , ,0.38,29.99 +11135.0,send package,2019-11-14 09:48:03.000Z, , , ,"['660650']", ,2.298,1757.98 +11136.0,pick item,2019-11-14 09:56:03.000Z, ,"['884135']", , , ,0.495,129.0 +11137.0,pick item,2019-11-14 10:03:33.000Z, ,"['884142']", , , ,0.21,529.0 +11138.0,pay order,2019-11-14 10:08:42.000Z, , ,"['991033']", , ,2.877,6422.0 +11139.0,reorder item,2019-11-14 10:09:29.000Z, ,"['884157']", , , ,0.483,1099.0 +11140.0,pick item,2019-11-14 10:09:33.000Z, ,"['884169']", , , ,0.172,699.0 +11141.0,reorder item,2019-11-14 10:15:22.000Z, ,"['883945']", , , ,0.483,1099.0 +11142.0,pay order,2019-11-14 10:19:53.000Z, , ,"['991011']", , ,2.281,1661.97 +11143.0,pick item,2019-11-14 10:46:19.000Z, ,"['884063']", , , ,0.78,99.99 +11144.0,send package,2019-11-14 10:47:49.000Z, , , ,"['660649']", ,1.463,1228.99 +11145.0,place order,2019-11-14 10:48:21.000Z, ,"['884179','884181','884180','884178']","['991036']", , ,2.022,3692.99 +11146.0,pick item,2019-11-14 10:57:49.000Z, ,"['884131']", , , ,0.44,476.0 +11147.0,create package,2019-11-14 10:57:49.000Z, ,"['883959','884025','884160','883599','883964']", ,"['660653']", ,3.689,1673.97 +11148.0,confirm order,2019-11-14 10:58:41.000Z, , ,"['991035']", , ,0.82,510.99 +11149.0,confirm order,2019-11-14 10:59:10.000Z, , ,"['991031']", , ,1.046,893.99 +11150.0,pick item,2019-11-14 11:01:30.000Z, ,"['884151']", , , ,0.28,449.0 +11151.0,pay order,2019-11-14 11:16:39.000Z, , ,"['991017']", , ,0.338,1503.0 +11152.0,pick item,2019-11-14 11:24:17.000Z, ,"['884043']", , , ,0.44,476.0 +11153.0,item out of stock,2019-11-14 11:25:07.000Z, ,"['884154']", , , ,0.21,529.0 +11154.0,pick item,2019-11-14 11:33:15.000Z, ,"['884105']", , , ,0.28,449.0 +11155.0,pick item,2019-11-14 11:38:41.000Z, ,"['884079']", , , ,0.78,99.99 +11156.0,confirm order,2019-11-14 11:56:18.000Z, , ,"['991034']", , ,3.983,4102.97 +11157.0,reorder item,2019-11-14 12:15:02.000Z, ,"['884101']", , , ,0.98,129.99 +11158.0,pick item,2019-11-14 12:31:27.000Z, ,"['883990']", , , ,0.172,699.0 +11159.0,create package,2019-11-14 12:31:27.000Z, ,"['883837','884131','884128','884133']", ,"['660654']", ,1.991,2813.99 +11160.0,send package,2019-11-14 12:44:41.000Z, , , ,"['660654']", ,1.991,2813.99 +11161.0,failed delivery,2019-11-14 12:54:11.000Z, , , ,"['660651']", ,4.739,4117.96 +11162.0,pick item,2019-11-14 12:55:24.000Z, ,"['884082']", , , ,0.88,89.99 +11163.0,place order,2019-11-14 12:56:30.000Z, ,"['884184','884182','884185','884186','884183']","['991037']", , ,2.186,4071.99 +11164.0,pick item,2019-11-14 13:07:18.000Z, ,"['884136']", , , ,0.495,129.0 +11165.0,pick item,2019-11-14 13:17:37.000Z, ,"['884161']", , , ,0.28,89.99 +11166.0,confirm order,2019-11-14 13:20:08.000Z, , ,"['991029']", , ,5.363,6782.98 +11167.0,send package,2019-11-14 13:21:25.000Z, , , ,"['660653']", ,3.689,1673.97 +11168.0,pick item,2019-11-14 13:39:37.000Z, ,"['884162']", , , ,0.88,89.99 +11169.0,create package,2019-11-14 13:39:37.000Z, ,"['884043','884112','884115','884044','884114','884041','884116','883992','884042','884047']", ,"['660655']", ,6.12,7364.96 +11170.0,pick item,2019-11-14 13:47:09.000Z, ,"['884168']", , , ,0.44,476.0 +11171.0,pick item,2019-11-14 13:51:59.000Z, ,"['884098']", , , ,0.172,699.0 +11172.0,package delivered,2019-11-14 13:52:03.000Z, , , ,"['660653']", ,3.689,1673.97 +11173.0,item out of stock,2019-11-14 13:55:00.000Z, ,"['884036']", , , ,0.28,449.0 +11174.0,pay order,2019-11-14 14:11:24.000Z, , ,"['991026']", , ,2.53,931.98 +11175.0,item out of stock,2019-11-14 14:13:43.000Z, ,"['884179']", , , ,0.2,39.99 +11176.0,payment reminder,2019-11-14 14:17:49.000Z, , ,"['990919']", , ,2.05,4529.0 +11177.0,item out of stock,2019-11-14 14:20:47.000Z, ,"['884170']", , , ,0.28,89.99 +11178.0,package delivered,2019-11-14 14:24:22.000Z, , , ,"['660650']", ,2.298,1757.98 +11179.0,payment reminder,2019-11-14 14:27:02.000Z, , ,"['990918']", , ,3.072,6140.99 +11180.0,package delivered,2019-11-14 14:27:57.000Z, , , ,"['660648']", ,4.579,6397.97 +11181.0,pay order,2019-11-14 14:34:45.000Z, , ,"['991032']", , ,2.989,2303.97 +11182.0,pick item,2019-11-14 14:44:05.000Z, ,"['884150']", , , ,0.483,1099.0 +11183.0,pick item,2019-11-14 15:12:12.000Z, ,"['884119']", , , ,0.38,29.99 +11184.0,place order,2019-11-14 15:12:47.000Z, ,"['884191','884187','884188','884192','884189','884190']","['991038']", , ,1.501,2111.97 +11185.0,pick item,2019-11-14 15:17:37.000Z, ,"['884186']", , , ,0.28,449.0 +11186.0,package delivered,2019-11-14 15:31:38.000Z, , , ,"['660651']", ,4.739,4117.96 +11187.0,pay order,2019-11-14 15:35:00.000Z, , ,"['991028']", , ,1.639,2531.99 +11188.0,reorder item,2019-11-14 15:47:34.000Z, ,"['884170']", , , ,0.28,89.99 +11189.0,pay order,2019-11-14 15:49:21.000Z, , ,"['990987']", , ,4.881,1732.95 +11190.0,reorder item,2019-11-14 15:51:05.000Z, ,"['884129']", , , ,0.98,129.99 +11191.0,item out of stock,2019-11-14 15:57:18.000Z, ,"['884190']", , , ,0.166,799.0 +11192.0,item out of stock,2019-11-14 16:04:59.000Z, ,"['884117']", , , ,0.2,39.99 +11193.0,item out of stock,2019-11-14 16:12:15.000Z, ,"['884176']", , , ,0.44,476.0 +11194.0,pick item,2019-11-14 16:16:32.000Z, ,"['884191']", , , ,0.172,699.0 +11195.0,confirm order,2019-11-14 16:26:25.000Z, , ,"['991037']", , ,2.186,4071.99 +11196.0,item out of stock,2019-11-14 16:32:07.000Z, ,"['884185']", , , ,0.166,799.0 +11197.0,place order,2019-11-14 16:45:22.000Z, ,"['884199','884193','884197','884198','884196','884200','884194','884195']","['991039']", , ,4.435,1508.95 +11198.0,reorder item,2019-11-14 16:46:52.000Z, ,"['884154']", , , ,0.21,529.0 +11199.0,pick item,2019-11-14 17:23:31.000Z, ,"['884178']", , , ,0.28,449.0 +11200.0,pick item,2019-11-14 17:31:20.000Z, ,"['884170']", , , ,0.28,89.99 +11201.0,package delivered,2019-11-14 18:19:58.000Z, , , ,"['660649']", ,1.463,1228.99 +11202.0,pick item,2019-11-14 18:32:54.000Z, ,"['884193']", , , ,0.88,89.99 +11203.0,place order,2019-11-14 18:55:40.000Z, ,"['884205','884202','884203','884201','884204']","['991040']", , ,3.825,4678.99 +11204.0,failed delivery,2019-11-14 19:19:25.000Z, , , ,"['660654']", ,1.991,2813.99 +11205.0,pay order,2019-11-14 19:22:06.000Z, , ,"['991030']", , ,0.871,1462.0 +11206.0,pick item,2019-11-14 20:10:52.000Z, ,"['884007']", , , ,1.25,2200.0 +11207.0,create package,2019-11-14 20:10:52.000Z, ,"['884106','884105','883910','884108','884107']", ,"['660656']", ,2.115,1216.98 +11208.0,place order,2019-11-14 22:30:55.000Z, ,"['884207','884206','884208','884209']","['991041']", , ,2.219,3423.98 +11209.0,confirm order,2019-11-15 07:31:16.000Z, , ,"['991038']", , ,1.501,2111.97 +11210.0,pick item,2019-11-15 07:32:54.000Z, ,"['883858']", , , ,1.48,199.99 +11211.0,pick item,2019-11-15 07:42:46.000Z, ,"['883989']", , , ,0.166,799.0 +11212.0,pay order,2019-11-15 08:08:42.000Z, , ,"['990978']", , ,1.97,763.98 +11213.0,confirm order,2019-11-15 08:13:47.000Z, , ,"['991041']", , ,2.219,3423.98 +11214.0,pick item,2019-11-15 08:15:52.000Z, ,"['884164']", , , ,0.483,495.0 +11215.0,send package,2019-11-15 08:20:43.000Z, , , ,"['660652']", ,5.716,8518.97 +11216.0,reorder item,2019-11-15 08:23:22.000Z, ,"['884185']", , , ,0.166,799.0 +11217.0,pick item,2019-11-15 08:26:58.000Z, ,"['884195']", , , ,0.2,39.99 +11218.0,place order,2019-11-15 08:28:41.000Z, ,"['884214','884213','884210','884212','884211']","['991042']", , ,3.4330000000000003,3754.99 +11219.0,item out of stock,2019-11-15 08:39:53.000Z, ,"['884198']", , , ,0.44,476.0 +11220.0,pay order,2019-11-15 08:53:11.000Z, , ,"['991034']", , ,3.983,4102.97 +11221.0,pick item,2019-11-15 08:54:15.000Z, ,"['884158']", , , ,0.38,29.99 +11222.0,create package,2019-11-15 08:54:15.000Z, ,"['884121','884120']", ,"['660657']", ,0.863,524.99 +11223.0,pick item,2019-11-15 08:55:21.000Z, ,"['884199']", , , ,0.495,129.0 +11224.0,pick item,2019-11-15 09:04:02.000Z, ,"['884134']", , , ,0.98,129.99 +11225.0,create package,2019-11-15 09:04:02.000Z, ,"['884034','884048']", ,"['660658']", ,1.652,898.99 +11226.0,pick item,2019-11-15 09:05:05.000Z, ,"['884181']", , , ,0.172,699.0 +11227.0,pick item,2019-11-15 09:09:17.000Z, ,"['884184']", , , ,1.25,2200.0 +11228.0,create package,2019-11-15 09:09:17.000Z, ,"['884103','884096','884095','884097','884098']", ,"['660659']", ,3.281,2926.98 +11229.0,package delivered,2019-11-15 09:21:42.000Z, , , ,"['660652']", ,5.716,8518.97 +11230.0,pick item,2019-11-15 09:25:22.000Z, ,"['884203']", , , ,0.44,476.0 +11231.0,send package,2019-11-15 09:36:50.000Z, , , ,"['660658']", ,1.652,898.99 +11232.0,pick item,2019-11-15 09:38:38.000Z, ,"['884194']", , , ,0.38,29.99 +11233.0,pick item,2019-11-15 09:43:04.000Z, ,"['884207']", , , ,0.2,39.99 +11234.0,item out of stock,2019-11-15 09:49:55.000Z, ,"['884166']", , , ,1.25,2200.0 +11235.0,pick item,2019-11-15 09:51:26.000Z, ,"['884005']", , , ,1.48,199.99 +11236.0,package delivered,2019-11-15 09:55:11.000Z, , , ,"['660658']", ,1.652,898.99 +11237.0,confirm order,2019-11-15 10:01:37.000Z, , ,"['991039']", , ,4.435,1508.95 +11238.0,item out of stock,2019-11-15 10:05:48.000Z, ,"['884204']", , , ,0.172,699.0 +11239.0,place order,2019-11-15 10:17:09.000Z, ,"['884217','884215','884216']","['991043']", , ,1.958,758.99 +11240.0,pick item,2019-11-15 10:19:52.000Z, ,"['884196']", , , ,1.48,199.99 +11241.0,create package,2019-11-15 10:19:52.000Z, ,"['884136','884123','884126','884009','884004','884138','884005','884135','884063','884007','884134']", ,"['660660']", ,9.173,6816.94 +11242.0,pick item,2019-11-15 10:32:55.000Z, ,"['884109']", , , ,1.25,2200.0 +11243.0,reorder item,2019-11-15 10:44:02.000Z, ,"['884190']", , , ,0.166,799.0 +11244.0,confirm order,2019-11-15 10:46:54.000Z, , ,"['991043']", , ,1.958,758.99 +11245.0,reorder item,2019-11-15 10:59:51.000Z, ,"['884093']", , , ,0.166,799.0 +11246.0,confirm order,2019-11-15 10:59:51.000Z, , ,"['991040']", , ,3.825,4678.99 +11247.0,send package,2019-11-15 11:31:47.000Z, , , ,"['660655']", ,6.12,7364.96 +11248.0,confirm order,2019-11-15 11:40:55.000Z, , ,"['991036']", , ,2.022,3692.99 +11249.0,place order,2019-11-15 11:54:06.000Z, ,"['884219','884218']","['991044']", , ,0.966,1183.99 +11250.0,pick item,2019-11-15 12:20:59.000Z, ,"['884099']", , , ,0.166,799.0 +11251.0,pick item,2019-11-15 13:01:24.000Z, ,"['884130']", , , ,0.483,79.99 +11252.0,confirm order,2019-11-15 13:14:06.000Z, , ,"['991042']", , ,3.4330000000000003,3754.99 +11253.0,pick item,2019-11-15 13:24:17.000Z, ,"['884197']", , , ,0.28,449.0 +11254.0,send package,2019-11-15 13:31:16.000Z, , , ,"['660660']", ,9.173,6816.94 +11255.0,package delivered,2019-11-15 13:46:14.000Z, , , ,"['660654']", ,1.991,2813.99 +11256.0,send package,2019-11-15 13:48:10.000Z, , , ,"['660659']", ,3.281,2926.98 +11257.0,item out of stock,2019-11-15 13:56:31.000Z, ,"['884177']", , , ,0.38,29.99 +11258.0,place order,2019-11-15 14:07:59.000Z, ,"['884222','884225','884224','884223','884220','884221']","['991045']", , ,2.286,1901.97 +11259.0,pick item,2019-11-15 14:11:02.000Z, ,"['884201']", , , ,1.48,199.99 +11260.0,pay order,2019-11-15 14:16:54.000Z, , ,"['990968']", , ,1.123,2437.99 +11261.0,pick item,2019-11-15 14:18:42.000Z, ,"['884225']", , , ,0.98,129.99 +11262.0,pick item,2019-11-15 14:22:57.000Z, ,"['884183']", , , ,0.21,529.0 +11263.0,item out of stock,2019-11-15 14:35:12.000Z, ,"['884212']", , , ,0.98,129.99 +11264.0,reorder item,2019-11-15 14:37:36.000Z, ,"['884198']", , , ,0.44,476.0 +11265.0,confirm order,2019-11-15 14:37:46.000Z, , ,"['991045']", , ,2.286,1901.97 +11266.0,pick item,2019-11-15 14:38:25.000Z, ,"['884218']", , , ,0.483,79.99 +11267.0,pick item,2019-11-15 14:41:10.000Z, ,"['884182']", , , ,0.28,89.99 +11268.0,package delivered,2019-11-15 15:01:39.000Z, , , ,"['660660']", ,9.173,6816.94 +11269.0,pick item,2019-11-15 15:19:31.000Z, ,"['883650']", , , ,0.28,89.99 +11270.0,item out of stock,2019-11-15 15:35:29.000Z, ,"['884221']", , , ,0.2,39.99 +11271.0,place order,2019-11-15 15:35:46.000Z, ,"['884227','884228','884226','884229']","['991046']", , ,3.185,3548.99 +11272.0,item out of stock,2019-11-15 15:35:59.000Z, ,"['884192']", , , ,0.2,39.99 +11273.0,reorder item,2019-11-15 15:40:26.000Z, ,"['884070']", , , ,0.28,89.99 +11274.0,send package,2019-11-15 15:42:41.000Z, , , ,"['660657']", ,0.863,524.99 +11275.0,pick item,2019-11-15 15:54:20.000Z, ,"['883942']", , , ,0.78,99.99 +11276.0,create package,2019-11-15 15:54:20.000Z, ,"['883935','883650','884022','884023']", ,"['660661']", ,1.4980000000000002,1677.98 +11277.0,pick item,2019-11-15 15:54:22.000Z, ,"['884189']", , , ,0.483,79.99 +11278.0,item out of stock,2019-11-15 15:54:41.000Z, ,"['884224']", , , ,0.38,29.99 +11279.0,pick item,2019-11-15 15:58:28.000Z, ,"['884222']", , , ,0.28,449.0 +11280.0,pick item,2019-11-15 15:59:51.000Z, ,"['883945']", , , ,0.483,1099.0 +11281.0,package delivered,2019-11-15 16:00:24.000Z, , , ,"['660659']", ,3.281,2926.98 +11282.0,confirm order,2019-11-15 16:09:16.000Z, , ,"['991044']", , ,0.966,1183.99 +11283.0,pick item,2019-11-15 16:20:49.000Z, ,"['884210']", , , ,0.44,476.0 +11284.0,create package,2019-11-15 16:20:49.000Z, ,"['884191','884038','884189','884152']", ,"['660662']", ,1.338,2056.99 +11285.0,pay order,2019-11-15 16:30:47.000Z, , ,"['991012']", , ,3.535,2867.97 +11286.0,pick item,2019-11-15 16:34:34.000Z, ,"['884213']", , , ,0.28,449.0 +11287.0,pick item,2019-11-15 16:58:13.000Z, ,"['884211']", , , ,1.25,2200.0 +11288.0,confirm order,2019-11-15 17:03:03.000Z, , ,"['991023']", , ,0.863,529.99 +11289.0,reorder item,2019-11-15 17:12:04.000Z, ,"['884221']", , , ,0.2,39.99 +11290.0,place order,2019-11-15 17:31:19.000Z, ,"['884230']","['991047']", , ,0.2,44.99 +11291.0,item out of stock,2019-11-15 17:38:00.000Z, ,"['884219']", , , ,0.483,1099.0 +11292.0,pick item,2019-11-15 18:02:23.000Z, ,"['884171']", , , ,0.21,529.0 +11293.0,pick item,2019-11-15 18:34:02.000Z, ,"['884144']", , , ,0.483,1099.0 +11294.0,create package,2019-11-15 18:34:02.000Z, ,"['884218','884203','884090','884201']", ,"['660663']", ,2.783,785.97 +11295.0,confirm order,2019-11-15 18:43:35.000Z, , ,"['991046']", , ,3.185,3548.99 +11296.0,reorder item,2019-11-15 19:53:38.000Z, ,"['884132']", , , ,0.38,29.99 +11297.0,place order,2019-11-15 20:13:32.000Z, ,"['884233','884232','884231']","['991048']", , ,0.84,633.98 +11298.0,item out of stock,2019-11-15 20:30:27.000Z, ,"['884111']", , , ,0.28,449.0 +11299.0,pick item,2019-11-15 20:55:31.000Z, ,"['884229']", , , ,1.28,149.99 +11300.0,pick item,2019-11-15 21:35:33.000Z, ,"['884104']", , , ,0.44,476.0 +11301.0,create package,2019-11-15 23:00:00.000Z, ,"['884072','884184','884186','884182','883999','884054','884183']", ,"['660664']", ,4.063,3946.97 +11302.0,place order,2019-11-16 10:21:06.000Z, ,"['884236','884234','884235']","['991049']", , ,1.643,1233.98 +11303.0,payment reminder,2019-11-17 08:54:26.000Z, , ,"['990927']", , ,0.495,134.0 +11304.0,place order,2019-11-17 10:36:06.000Z, ,"['884238','884239','884237','884240']","['991050']", , ,2.886,2274.99 +11305.0,payment reminder,2019-11-17 13:31:08.000Z, , ,"['990822']", , ,1.21,1548.99 +11306.0,payment reminder,2019-11-17 14:08:16.000Z, , ,"['990823']", , ,3.143,454.96 +11307.0,place order,2019-11-18 03:24:06.000Z, ,"['884241','884242','884243']","['991051']", , ,1.743,663.98 +11308.0,pay order,2019-11-18 07:21:56.000Z, , ,"['991042']", , ,3.4330000000000003,3754.99 +11309.0,pick item,2019-11-18 07:36:55.000Z, ,"['884220']", , , ,0.166,799.0 +11310.0,pick item,2019-11-18 07:56:44.000Z, ,"['884206']", , , ,0.483,79.99 +11311.0,item out of stock,2019-11-18 08:11:16.000Z, ,"['884172']", , , ,0.483,1099.0 +11312.0,pay order,2019-11-18 08:17:21.000Z, , ,"['990927']", , ,0.495,134.0 +11313.0,package delivered,2019-11-18 08:21:57.000Z, , , ,"['660657']", ,0.863,524.99 +11314.0,payment reminder,2019-11-18 08:42:16.000Z, , ,"['990896']", , ,0.354,1953.0 +11315.0,pick item,2019-11-18 08:48:46.000Z, ,"['884242']", , , ,0.98,129.99 +11316.0,place order,2019-11-18 08:52:18.000Z, ,"['884244','884246','884245','884247']","['991052']", , ,2.35,743.97 +11317.0,pick item,2019-11-18 08:55:55.000Z, ,"['884113']", , , ,0.78,99.99 +11318.0,pick item,2019-11-18 09:03:47.000Z, ,"['884215']", , , ,0.98,129.99 +11319.0,pick item,2019-11-18 09:05:15.000Z, ,"['884216']", , , ,0.483,495.0 +11320.0,pick item,2019-11-18 09:06:05.000Z, ,"['884124']", , , ,1.25,2200.0 +11321.0,send package,2019-11-18 09:13:39.000Z, , , ,"['660661']", ,1.4980000000000002,1677.98 +11322.0,item out of stock,2019-11-18 09:32:58.000Z, ,"['884125']", , , ,0.483,1099.0 +11323.0,reorder item,2019-11-18 09:35:04.000Z, ,"['884172']", , , ,0.483,1099.0 +11324.0,item out of stock,2019-11-18 09:42:13.000Z, ,"['884230']", , , ,0.2,39.99 +11325.0,payment reminder,2019-11-18 09:43:18.000Z, , ,"['990935']", , ,4.001,4937.98 +11326.0,send package,2019-11-18 09:46:11.000Z, , , ,"['660656']", ,2.115,1216.98 +11327.0,pay order,2019-11-18 09:52:21.000Z, , ,"['990966']", , ,4.144,4693.96 +11328.0,item out of stock,2019-11-18 09:52:38.000Z, ,"['884205']", , , ,1.25,2200.0 +11329.0,pick item,2019-11-18 09:54:52.000Z, ,"['884180']", , , ,1.37,2500.0 +11330.0,send package,2019-11-18 10:03:30.000Z, , , ,"['660662']", ,1.338,2056.99 +11331.0,item out of stock,2019-11-18 10:10:52.000Z, ,"['884244']", , , ,0.21,529.0 +11332.0,pick item,2019-11-18 10:22:37.000Z, ,"['884209']", , , ,0.166,799.0 +11333.0,create package,2019-11-18 10:22:37.000Z, ,"['884193','884142','884195','884199','884144','884155','884197','884143','884180','884196','884178','884119','884181','884194']", ,"['660665']", ,8.27,6433.93 +11334.0,pick item,2019-11-18 10:26:26.000Z, ,"['884235']", , , ,0.38,29.99 +11335.0,pay order,2019-11-18 10:29:02.000Z, , ,"['990880']", , ,1.27,723.98 +11336.0,pick item,2019-11-18 10:36:24.000Z, ,"['884137']", , , ,0.28,449.0 +11337.0,item out of stock,2019-11-18 10:48:11.000Z, ,"['884236']", , , ,0.78,99.99 +11338.0,package delivered,2019-11-18 11:00:40.000Z, , , ,"['660661']", ,1.4980000000000002,1677.98 +11339.0,place order,2019-11-18 11:04:23.000Z, ,"['884249','884250','884248']","['991053']", , ,0.848,1273.98 +11340.0,confirm order,2019-11-18 11:13:27.000Z, , ,"['991050']", , ,2.886,2274.99 +11341.0,reorder item,2019-11-18 11:16:45.000Z, ,"['884111']", , , ,0.28,449.0 +11342.0,pick item,2019-11-18 11:17:09.000Z, ,"['884174']", , , ,0.88,89.99 +11343.0,pay order,2019-11-18 11:19:31.000Z, , ,"['991002']", , ,0.166,804.0 +11344.0,confirm order,2019-11-18 11:56:55.000Z, , ,"['991048']", , ,0.84,633.98 +11345.0,pick item,2019-11-18 11:58:30.000Z, ,"['884250']", , , ,0.28,89.99 +11346.0,pay order,2019-11-18 12:08:52.000Z, , ,"['990992']", , ,0.5479999999999999,2032.0 +11347.0,reorder item,2019-11-18 12:10:51.000Z, ,"['884230']", , , ,0.2,39.99 +11348.0,package delivered,2019-11-18 12:12:08.000Z, , , ,"['660662']", ,1.338,2056.99 +11349.0,package delivered,2019-11-18 12:15:39.000Z, , , ,"['660655']", ,6.12,7364.96 +11350.0,place order,2019-11-18 12:28:34.000Z, ,"['884252','884251']","['991054']", , ,0.655,1199.0 +11351.0,pick item,2019-11-18 12:32:25.000Z, ,"['884159']", , , ,0.483,495.0 +11352.0,send package,2019-11-18 12:35:11.000Z, , , ,"['660664']", ,4.063,3946.97 +11353.0,reorder item,2019-11-18 12:40:01.000Z, ,"['884036']", , , ,0.28,449.0 +11354.0,confirm order,2019-11-18 12:47:13.000Z, , ,"['991047']", , ,0.2,44.99 +11355.0,pick item,2019-11-18 13:14:22.000Z, ,"['884246']", , , ,0.88,89.99 +11356.0,reorder item,2019-11-18 13:15:29.000Z, ,"['884205']", , , ,1.25,2200.0 +11357.0,pay order,2019-11-18 13:15:29.000Z, , ,"['990993']", , ,3.801,2442.98 +11358.0,payment reminder,2019-11-18 13:25:29.000Z, , ,"['990937']", , ,2.06,254.98 +11359.0,pick item,2019-11-18 13:25:30.000Z, ,"['884217']", , , ,0.495,129.0 +11360.0,package delivered,2019-11-18 13:43:55.000Z, , , ,"['660656']", ,2.115,1216.98 +11361.0,pay order,2019-11-18 13:46:56.000Z, , ,"['990896']", , ,0.354,1953.0 +11362.0,pick item,2019-11-18 13:49:32.000Z, ,"['884239']", , , ,1.48,199.99 +11363.0,pick item,2019-11-18 14:00:27.000Z, ,"['884187']", , , ,0.28,449.0 +11364.0,send package,2019-11-18 14:10:30.000Z, , , ,"['660663']", ,2.783,785.97 +11365.0,place order,2019-11-18 14:16:55.000Z, ,"['884257','884256','884254','884253','884255']","['991055']", , ,2.718,3032.98 +11366.0,reorder item,2019-11-18 14:19:11.000Z, ,"['884244']", , , ,0.21,529.0 +11367.0,pay order,2019-11-18 14:22:22.000Z, , ,"['991043']", , ,1.958,758.99 +11368.0,pick item,2019-11-18 14:25:05.000Z, ,"['884118']", , , ,0.44,476.0 +11369.0,reorder item,2019-11-18 14:26:38.000Z, ,"['883997']", , , ,0.21,529.0 +11370.0,confirm order,2019-11-18 14:33:45.000Z, , ,"['991049']", , ,1.643,1233.98 +11371.0,failed delivery,2019-11-18 14:33:56.000Z, , , ,"['660664']", ,4.063,3946.97 +11372.0,pick item,2019-11-18 14:39:32.000Z, ,"['884202']", , , ,0.483,1099.0 +11373.0,failed delivery,2019-11-18 14:55:11.000Z, , , ,"['660664']", ,4.063,3946.97 +11374.0,pay order,2019-11-18 15:06:24.000Z, , ,"['991048']", , ,0.84,633.98 +11375.0,pick item,2019-11-18 15:14:05.000Z, ,"['884252']", , , ,0.483,495.0 +11376.0,pay order,2019-11-18 15:24:49.000Z, , ,"['990988']", , ,5.337999999999999,5931.96 +11377.0,pick item,2019-11-18 15:38:19.000Z, ,"['884156']", , , ,0.166,799.0 +11378.0,pick item,2019-11-18 15:45:11.000Z, ,"['884226']", , , ,0.172,699.0 +11379.0,create package,2019-11-18 15:45:11.000Z, ,"['884173','884170','884174','884164','884079','883945','884250','884168','884175','884082','884169','883942','884171']", ,"['660666']", ,7.797999999999999,6147.93 +11380.0,send package,2019-11-18 15:46:36.000Z, , , ,"['660666']", ,7.797999999999999,6147.93 +11381.0,place order,2019-11-18 15:53:38.000Z, ,"['884259','884262','884263','884258','884260','884261']","['991056']", , ,2.608,2887.98 +11382.0,pick item,2019-11-18 16:00:38.000Z, ,"['884248']", , , ,0.188,1149.0 +11383.0,reorder item,2019-11-18 16:05:52.000Z, ,"['884219']", , , ,0.483,1099.0 +11384.0,pick item,2019-11-18 16:14:55.000Z, ,"['884165']", , , ,0.172,699.0 +11385.0,pick item,2019-11-18 16:18:13.000Z, ,"['883725']", , , ,0.88,89.99 +11386.0,pick item,2019-11-18 16:29:59.000Z, ,"['884245']", , , ,0.88,89.99 +11387.0,pay order,2019-11-18 16:33:02.000Z, , ,"['991035']", , ,0.82,510.99 +11388.0,pay order,2019-11-18 16:44:47.000Z, , ,"['991047']", , ,0.2,44.99 +11389.0,pick item,2019-11-18 16:52:24.000Z, ,"['884232']", , , ,0.28,449.0 +11390.0,pay order,2019-11-18 17:25:56.000Z, , ,"['991013']", , ,2.423,723.97 +11391.0,confirm order,2019-11-18 17:27:10.000Z, , ,"['991055']", , ,2.718,3032.98 +11392.0,pick item,2019-11-18 17:49:33.000Z, ,"['884251']", , , ,0.172,699.0 +11393.0,place order,2019-11-18 18:07:03.000Z, ,"['884267','884266','884265','884264','884268']","['991057']", , ,4.623,3828.98 +11394.0,pay order,2019-11-18 18:08:41.000Z, , ,"['990919']", , ,2.05,4529.0 +11395.0,confirm order,2019-11-18 18:47:59.000Z, , ,"['991056']", , ,2.608,2887.98 +11396.0,reorder item,2019-11-18 19:27:27.000Z, ,"['884204']", , , ,0.172,699.0 +11397.0,pay order,2019-11-18 19:29:49.000Z, , ,"['991040']", , ,3.825,4678.99 +11398.0,place order,2019-11-18 20:53:41.000Z, ,"['884275','884270','884271','884276','884272','884273','884274','884269']","['991058']", , ,4.695,2710.96 +11399.0,place order,2019-11-19 06:40:00.000Z, ,"['884278','884277']","['991059']", , ,0.446,893.99 +11400.0,pick item,2019-11-19 07:37:46.000Z, ,"['884233']", , , ,0.28,89.99 +11401.0,pick item,2019-11-19 08:00:43.000Z, ,"['884278']", , , ,0.28,89.99 +11402.0,reorder item,2019-11-19 08:22:48.000Z, ,"['884125']", , , ,0.483,1099.0 +11403.0,confirm order,2019-11-19 08:36:56.000Z, , ,"['991058']", , ,4.695,2710.96 +11404.0,reorder item,2019-11-19 08:39:02.000Z, ,"['884212']", , , ,0.98,129.99 +11405.0,pick item,2019-11-19 08:42:41.000Z, ,"['884264']", , , ,1.37,2500.0 +11406.0,payment reminder,2019-11-19 08:47:53.000Z, , ,"['990924']", , ,4.023,1702.96 +11407.0,pick item,2019-11-19 08:56:45.000Z, ,"['884127']", , , ,0.495,129.0 +11408.0,pick item,2019-11-19 09:02:23.000Z, ,"['884111']", , , ,0.28,449.0 +11409.0,reorder item,2019-11-19 09:04:25.000Z, ,"['884166']", , , ,1.25,2200.0 +11410.0,pick item,2019-11-19 09:17:27.000Z, ,"['884259']", , , ,0.78,99.99 +11411.0,pick item,2019-11-19 09:23:38.000Z, ,"['884262']", , , ,0.78,99.99 +11412.0,create package,2019-11-19 09:23:38.000Z, ,"['884239','883858','884150','884151']", ,"['660667']", ,3.723,1947.98 +11413.0,place order,2019-11-19 09:27:47.000Z, ,"['884280','884279','884281']","['991060']", , ,1.604,4153.0 +11414.0,pick item,2019-11-19 09:30:07.000Z, ,"['883955']", , , ,0.88,89.99 +11415.0,pick item,2019-11-19 09:31:35.000Z, ,"['883973']", , , ,0.38,29.99 +11416.0,reorder item,2019-11-19 09:37:21.000Z, ,"['884179']", , , ,0.2,39.99 +11417.0,pick item,2019-11-19 09:57:50.000Z, ,"['884273']", , , ,0.98,129.99 +11418.0,pick item,2019-11-19 10:02:23.000Z, ,"['884255']", , , ,0.495,129.0 +11419.0,create package,2019-11-19 10:02:23.000Z, ,"['884215','883990','884217','884216','884162','883725','884158','884159','884161','883989']", ,"['660668']", ,5.199,3046.95 +11420.0,reorder item,2019-11-19 10:15:49.000Z, ,"['884117']", , , ,0.2,39.99 +11421.0,send package,2019-11-19 10:24:38.000Z, , , ,"['660665']", ,8.27,6433.93 +11422.0,pick item,2019-11-19 10:30:37.000Z, ,"['883798']", , , ,0.28,449.0 +11423.0,pick item,2019-11-19 10:32:54.000Z, ,"['884208']", , , ,1.37,2500.0 +11424.0,pick item,2019-11-19 10:46:51.000Z, ,"['884188']", , , ,0.2,39.99 +11425.0,item out of stock,2019-11-19 10:53:06.000Z, ,"['884272']", , , ,1.48,199.99 +11426.0,item out of stock,2019-11-19 10:55:07.000Z, ,"['884234']", , , ,0.483,1099.0 +11427.0,pick item,2019-11-19 10:56:09.000Z, ,"['884141']", , , ,0.172,699.0 +11428.0,pick item,2019-11-19 10:58:40.000Z, ,"['884026']", , , ,1.25,2200.0 +11429.0,pick item,2019-11-19 11:04:45.000Z, ,"['884258']", , , ,0.21,529.0 +11430.0,pick item,2019-11-19 11:06:56.000Z, ,"['884166']", , , ,1.25,2200.0 +11431.0,place order,2019-11-19 11:15:22.000Z, ,"['884282','884284','884283']","['991061']", , ,3.78,4554.99 +11432.0,pay order,2019-11-19 11:20:20.000Z, , ,"['991036']", , ,2.022,3692.99 +11433.0,pick item,2019-11-19 11:26:46.000Z, ,"['884276']", , , ,0.172,699.0 +11434.0,pick item,2019-11-19 12:05:42.000Z, ,"['884268']", , , ,0.21,529.0 +11435.0,item out of stock,2019-11-19 12:23:47.000Z, ,"['884227']", , , ,0.483,495.0 +11436.0,payment reminder,2019-11-19 12:30:11.000Z, , ,"['990948']", , ,2.04,1086.98 +11437.0,pick item,2019-11-19 12:30:16.000Z, ,"['884247']", , , ,0.38,29.99 +11438.0,create package,2019-11-19 12:30:16.000Z, ,"['884207','884206','884109','884208','884104','884209']", ,"['660669']", ,3.909,6094.98 +11439.0,place order,2019-11-19 12:50:31.000Z, ,"['884286','884287','884288','884285']","['991062']", , ,1.375,1764.99 +11440.0,package delivered,2019-11-19 13:12:02.000Z, , , ,"['660663']", ,2.783,785.97 +11441.0,pick item,2019-11-19 13:33:02.000Z, ,"['884230']", , , ,0.2,39.99 +11442.0,pick item,2019-11-19 13:33:11.000Z, ,"['884147']", , , ,1.48,199.99 +11443.0,item out of stock,2019-11-19 13:35:25.000Z, ,"['884167']", , , ,0.172,699.0 +11444.0,pick item,2019-11-19 13:35:28.000Z, ,"['884214']", , , ,0.483,495.0 +11445.0,pick item,2019-11-19 13:41:59.000Z, ,"['883997']", , , ,0.21,529.0 +11446.0,item out of stock,2019-11-19 13:42:07.000Z, ,"['884254']", , , ,0.21,529.0 +11447.0,pick item,2019-11-19 13:55:58.000Z, ,"['884241']", , , ,0.483,79.99 +11448.0,reorder item,2019-11-19 14:15:49.000Z, ,"['884236']", , , ,0.78,99.99 +11449.0,pick item,2019-11-19 14:24:32.000Z, ,"['884231']", , , ,0.28,89.99 +11450.0,create package,2019-11-19 14:24:32.000Z, ,"['884246','884245','884247','884099']", ,"['660670']", ,2.306,1008.97 +11451.0,item out of stock,2019-11-19 14:29:16.000Z, ,"['884274']", , , ,0.21,529.0 +11452.0,confirm order,2019-11-19 14:32:32.000Z, , ,"['991062']", , ,1.375,1764.99 +11453.0,pick item,2019-11-19 14:36:00.000Z, ,"['884163']", , , ,0.188,1149.0 +11454.0,send package,2019-11-19 14:48:01.000Z, , , ,"['660667']", ,3.723,1947.98 +11455.0,place order,2019-11-19 15:00:49.000Z, ,"['884290','884289','884291']","['991063']", , ,1.7180000000000002,3803.0 +11456.0,pick item,2019-11-19 15:02:38.000Z, ,"['884244']", , , ,0.21,529.0 +11457.0,pick item,2019-11-19 15:04:25.000Z, ,"['884200']", , , ,0.28,89.99 +11458.0,confirm order,2019-11-19 15:10:21.000Z, , ,"['991063']", , ,1.7180000000000002,3803.0 +11459.0,confirm order,2019-11-19 15:27:57.000Z, , ,"['991057']", , ,4.623,3828.98 +11460.0,pay order,2019-11-19 15:34:57.000Z, , ,"['990935']", , ,4.001,4937.98 +11461.0,pick item,2019-11-19 15:38:13.000Z, ,"['884281']", , , ,1.25,2200.0 +11462.0,create package,2019-11-19 15:38:13.000Z, ,"['884214','884213','884210','884130','884211']", ,"['660671']", ,2.9360000000000004,3699.99 +11463.0,package delivered,2019-11-19 15:43:10.000Z, , , ,"['660666']", ,7.797999999999999,6147.93 +11464.0,confirm order,2019-11-19 15:46:39.000Z, , ,"['991061']", , ,3.78,4554.99 +11465.0,confirm order,2019-11-19 15:47:24.000Z, , ,"['991051']", , ,1.743,663.98 +11466.0,reorder item,2019-11-19 15:49:32.000Z, ,"['884177']", , , ,0.38,29.99 +11467.0,pick item,2019-11-19 15:57:46.000Z, ,"['884243']", , , ,0.28,449.0 +11468.0,pay order,2019-11-19 16:00:47.000Z, , ,"['990948']", , ,2.04,1086.98 +11469.0,pick item,2019-11-19 16:02:03.000Z, ,"['884291']", , , ,1.25,2200.0 +11470.0,package delivered,2019-11-19 16:03:02.000Z, , , ,"['660664']", ,4.063,3946.97 +11471.0,pick item,2019-11-19 16:03:32.000Z, ,"['884269']", , , ,0.21,529.0 +11472.0,pay order,2019-11-19 16:06:47.000Z, , ,"['991021']", , ,4.246,5079.98 +11473.0,payment reminder,2019-11-19 16:07:16.000Z, , ,"['990940']", , ,4.36,1010.96 +11474.0,payment reminder,2019-11-19 16:18:41.000Z, , ,"['990945']", , ,0.28,454.0 +11475.0,place order,2019-11-19 16:21:26.000Z, ,"['884295','884294','884293','884292']","['991064']", , ,1.851,1591.99 +11476.0,pay order,2019-11-19 16:29:11.000Z, , ,"['991062']", , ,1.375,1764.99 +11477.0,pick item,2019-11-19 16:31:39.000Z, ,"['884270']", , , ,0.483,79.99 +11478.0,pick item,2019-11-19 16:42:42.000Z, ,"['884256']", , , ,1.25,2200.0 +11479.0,create package,2019-11-19 16:42:42.000Z, ,"['884259','884222','884225','884262','884220','884258']", ,"['660672']", ,3.196,2106.97 +11480.0,pick item,2019-11-19 16:46:54.000Z, ,"['884294']", , , ,0.21,529.0 +11481.0,send package,2019-11-19 16:52:38.000Z, , , ,"['660671']", ,2.9360000000000004,3699.99 +11482.0,package delivered,2019-11-19 17:24:51.000Z, , , ,"['660667']", ,3.723,1947.98 +11483.0,pick item,2019-11-19 17:32:56.000Z, ,"['884154']", , , ,0.21,529.0 +11484.0,place order,2019-11-19 18:02:39.000Z, ,"['884298','884301','884300','884297','884299','884296','884302']","['991065']", , ,4.615,3157.97 +11485.0,pay order,2019-11-19 18:04:11.000Z, , ,"['991029']", , ,5.363,6782.98 +11486.0,pick item,2019-11-19 18:07:37.000Z, ,"['884295']", , , ,0.98,129.99 +11487.0,place order,2019-11-19 20:44:53.000Z, ,"['884303','884306','884305','884304']","['991066']", , ,3.893,2524.97 +11488.0,pick item,2019-11-19 20:58:39.000Z, ,"['884283']", , , ,1.25,2200.0 +11489.0,pick item,2019-11-19 21:04:42.000Z, ,"['884286']", , , ,0.44,476.0 +11490.0,package delivered,2019-11-19 21:07:21.000Z, , , ,"['660665']", ,8.27,6433.93 +11491.0,place order,2019-11-20 05:47:12.000Z, ,"['884307','884308','884309']","['991067']", , ,1.378,1812.99 +11492.0,pick item,2019-11-20 07:23:55.000Z, ,"['884282']", , , ,1.28,149.99 +11493.0,create package,2019-11-20 07:23:55.000Z, ,"['884226','884235','884229']", ,"['660673']", ,1.832,878.98 +11494.0,send package,2019-11-20 07:36:42.000Z, , , ,"['660668']", ,5.199,3046.95 +11495.0,confirm order,2019-11-20 07:51:47.000Z, , ,"['991067']", , ,1.378,1812.99 +11496.0,reorder item,2019-11-20 08:02:11.000Z, ,"['884167']", , , ,0.172,699.0 +11497.0,pick item,2019-11-20 08:06:01.000Z, ,"['884279']", , , ,0.188,1149.0 +11498.0,pick item,2019-11-20 08:34:42.000Z, ,"['884293']", , , ,0.166,799.0 +11499.0,send package,2019-11-20 08:40:00.000Z, , , ,"['660669']", ,3.909,6094.98 +11500.0,pick item,2019-11-20 08:41:44.000Z, ,"['884304']", , , ,1.28,149.99 +11501.0,create package,2019-11-20 08:41:44.000Z, ,"['884241','884242','884243']", ,"['660674']", ,1.743,658.98 +11502.0,confirm order,2019-11-20 08:46:34.000Z, , ,"['991060']", , ,1.604,4153.0 +11503.0,pick item,2019-11-20 08:48:03.000Z, ,"['884267']", , , ,1.28,149.99 +11504.0,pay order,2019-11-20 08:50:55.000Z, , ,"['990909']", , ,1.68,244.98 +11505.0,send package,2019-11-20 08:54:59.000Z, , , ,"['660672']", ,3.196,2106.97 +11506.0,item out of stock,2019-11-20 08:59:08.000Z, ,"['884261']", , , ,0.21,529.0 +11507.0,pick item,2019-11-20 09:08:46.000Z, ,"['883491']", , , ,0.495,129.0 +11508.0,confirm order,2019-11-20 09:22:01.000Z, , ,"['991066']", , ,3.893,2524.97 +11509.0,confirm order,2019-11-20 09:27:41.000Z, , ,"['991059']", , ,0.446,893.99 +11510.0,place order,2019-11-20 09:29:43.000Z, ,"['884310','884315','884311','884316','884312','884314','884313']","['991068']", , ,5.448,3218.96 +11511.0,send package,2019-11-20 09:38:59.000Z, , , ,"['660673']", ,1.832,878.98 +11512.0,confirm order,2019-11-20 09:40:20.000Z, , ,"['991053']", , ,0.848,1273.98 +11513.0,pick item,2019-11-20 09:44:36.000Z, ,"['884308']", , , ,0.21,529.0 +11514.0,create package,2019-11-20 09:44:36.000Z, ,"['883997','884113']", ,"['660675']", ,0.99,628.99 +11515.0,pick item,2019-11-20 09:45:51.000Z, ,"['884249']", , , ,0.38,29.99 +11516.0,pick item,2019-11-20 09:47:17.000Z, ,"['884212']", , , ,0.98,129.99 +11517.0,create package,2019-11-20 09:47:17.000Z, ,"['884124','884278','884137','884127','883955']", ,"['660676']", ,3.185,2957.98 +11518.0,payment reminder,2019-11-20 09:51:19.000Z, , ,"['990949']", , ,1.338,2158.98 +11519.0,item out of stock,2019-11-20 10:10:00.000Z, ,"['884296']", , , ,0.483,1099.0 +11520.0,pick item,2019-11-20 10:22:50.000Z, ,"['884253']", , , ,0.483,79.99 +11521.0,pay order,2019-11-20 10:28:42.000Z, , ,"['991000']", , ,0.49,623.99 +11522.0,pay order,2019-11-20 10:38:54.000Z, , ,"['991025']", , ,3.3510000000000004,1959.96 +11523.0,pick item,2019-11-20 10:51:07.000Z, ,"['884310']", , , ,0.38,29.99 +11524.0,pick item,2019-11-20 10:54:05.000Z, ,"['884302']", , , ,0.172,699.0 +11525.0,pick item,2019-11-20 10:56:25.000Z, ,"['884271']", , , ,0.28,449.0 +11526.0,place order,2019-11-20 11:19:13.000Z, ,"['884319','884321','884322','884318','884320','884317']","['991069']", , ,3.169,4706.99 +11527.0,payment reminder,2019-11-20 11:34:27.000Z, , ,"['990953']", , ,3.2430000000000003,1612.97 +11528.0,pick item,2019-11-20 11:44:20.000Z, ,"['884298']", , , ,0.78,99.99 +11529.0,create package,2019-11-20 11:44:20.000Z, ,"['884187','884154','884267','884188','884264','884268']", ,"['660677']", ,3.55,4196.98 +11530.0,pick item,2019-11-20 11:46:34.000Z, ,"['883853']", , , ,0.98,129.99 +11531.0,pick item,2019-11-20 11:52:41.000Z, ,"['884263']", , , ,0.188,1149.0 +11532.0,pick item,2019-11-20 12:03:33.000Z, ,"['884266']", , , ,0.483,495.0 +11533.0,package delivered,2019-11-20 12:05:12.000Z, , , ,"['660672']", ,3.196,2106.97 +11534.0,item out of stock,2019-11-20 12:32:35.000Z, ,"['884300']", , , ,0.98,129.99 +11535.0,reorder item,2019-11-20 12:47:35.000Z, ,"['884274']", , , ,0.21,529.0 +11536.0,pick item,2019-11-20 12:53:04.000Z, ,"['884317']", , , ,1.37,2500.0 +11537.0,place order,2019-11-20 12:58:14.000Z, ,"['884326','884325','884323','884324','884327']","['991070']", , ,1.15,2717.99 +11538.0,confirm order,2019-11-20 13:12:07.000Z, , ,"['991068']", , ,5.448,3218.96 +11539.0,confirm order,2019-11-20 13:19:11.000Z, , ,"['991065']", , ,4.615,3157.97 +11540.0,send package,2019-11-20 13:24:24.000Z, , , ,"['660677']", ,3.55,4196.98 +11541.0,package delivered,2019-11-20 13:35:13.000Z, , , ,"['660677']", ,3.55,4196.98 +11542.0,pick item,2019-11-20 13:36:54.000Z, ,"['883939']", , , ,1.37,2500.0 +11543.0,pick item,2019-11-20 13:49:24.000Z, ,"['884265']", , , ,1.28,149.99 +11544.0,create package,2019-11-20 13:49:24.000Z, ,"['883973','884141','884310','884156','884118','884200']", ,"['660678']", ,1.818,2123.97 +11545.0,pick item,2019-11-20 13:57:08.000Z, ,"['884238']", , , ,0.483,1099.0 +11546.0,pick item,2019-11-20 14:03:32.000Z, ,"['884290']", , , ,0.28,449.0 +11547.0,pick item,2019-11-20 14:13:50.000Z, ,"['884070']", , , ,0.28,89.99 +11548.0,package delivered,2019-11-20 14:14:57.000Z, , , ,"['660668']", ,5.199,3046.95 +11549.0,package delivered,2019-11-20 14:15:28.000Z, , , ,"['660673']", ,1.832,878.98 +11550.0,reorder item,2019-11-20 14:15:45.000Z, ,"['884300']", , , ,0.98,129.99 +11551.0,pick item,2019-11-20 14:28:08.000Z, ,"['884102']", , , ,0.28,89.99 +11552.0,item out of stock,2019-11-20 14:30:18.000Z, ,"['884309']", , , ,0.188,1149.0 +11553.0,item out of stock,2019-11-20 14:32:34.000Z, ,"['884313']", , , ,0.483,495.0 +11554.0,send package,2019-11-20 14:34:34.000Z, , , ,"['660674']", ,1.743,658.98 +11555.0,confirm order,2019-11-20 15:02:33.000Z, , ,"['991070']", , ,1.15,2717.99 +11556.0,pick item,2019-11-20 15:06:17.000Z, ,"['884299']", , , ,0.28,449.0 +11557.0,pick item,2019-11-20 15:06:52.000Z, ,"['884315']", , , ,0.495,129.0 +11558.0,create package,2019-11-20 15:06:52.000Z, ,"['884026','884111','884252','884202','884251','884304']", ,"['660679']", ,3.948,5091.99 +11559.0,pick item,2019-11-20 15:08:26.000Z, ,"['884240']", , , ,0.44,476.0 +11560.0,place order,2019-11-20 15:16:15.000Z, ,"['884331','884329','884330','884328']","['991071']", , ,1.3259999999999998,2427.99 +11561.0,pick item,2019-11-20 15:19:20.000Z, ,"['884236']", , , ,0.78,99.99 +11562.0,item out of stock,2019-11-20 15:32:34.000Z, ,"['884312']", , , ,1.48,199.99 +11563.0,pick item,2019-11-20 15:33:03.000Z, ,"['884328']", , , ,0.188,1149.0 +11564.0,pick item,2019-11-20 15:36:55.000Z, ,"['884006']", , , ,0.38,29.99 +11565.0,send package,2019-11-20 15:40:24.000Z, , , ,"['660670']", ,2.306,1008.97 +11566.0,pick item,2019-11-20 15:44:14.000Z, ,"['884307']", , , ,0.98,129.99 +11567.0,pick item,2019-11-20 15:49:35.000Z, ,"['884223']", , , ,0.28,449.0 +11568.0,create package,2019-11-20 15:49:35.000Z, ,"['884248','884163','884165','884249','883491','884166','883798']", ,"['660680']", ,2.9530000000000003,5804.99 +11569.0,package delivered,2019-11-20 15:49:41.000Z, , , ,"['660671']", ,2.9360000000000004,3699.99 +11570.0,pick item,2019-11-20 16:09:06.000Z, ,"['884285']", , , ,0.172,699.0 +11571.0,pick item,2019-11-20 16:15:44.000Z, ,"['884288']", , , ,0.28,89.99 +11572.0,send package,2019-11-20 16:16:09.000Z, , , ,"['660678']", ,1.818,2123.97 +11573.0,confirm order,2019-11-20 16:38:07.000Z, , ,"['991052']", , ,2.35,743.97 +11574.0,item out of stock,2019-11-20 16:46:37.000Z, ,"['884326']", , , ,0.166,799.0 +11575.0,place order,2019-11-20 16:52:17.000Z, ,"['884334','884333','884332']","['991072']", , ,1.946,1313.98 +11576.0,failed delivery,2019-11-20 16:54:36.000Z, , , ,"['660674']", ,1.743,658.98 +11577.0,pick item,2019-11-20 17:17:39.000Z, ,"['884329']", , , ,0.172,699.0 +11578.0,pick item,2019-11-20 17:19:10.000Z, ,"['884300']", , , ,0.98,129.99 +11579.0,pick item,2019-11-20 17:42:08.000Z, ,"['883984']", , , ,0.495,129.0 +11580.0,send package,2019-11-20 17:45:43.000Z, , , ,"['660675']", ,0.99,628.99 +11581.0,pick item,2019-11-20 19:05:44.000Z, ,"['884330']", , , ,0.483,495.0 +11582.0,place order,2019-11-20 19:16:26.000Z, ,"['884335','884336','884337']","['991073']", , ,0.892,1269.99 +11583.0,send package,2019-11-20 19:33:20.000Z, , , ,"['660676']", ,3.185,2957.98 +11584.0,reorder item,2019-11-20 19:49:31.000Z, ,"['884326']", , , ,0.166,799.0 +11585.0,pick item,2019-11-20 20:27:09.000Z, ,"['884322']", , , ,0.172,699.0 +11586.0,create package,2019-11-20 20:27:09.000Z, ,"['884286','884233','884270','884290','884285','884256','884253','884291','884288','884317','884322','884231','884255','884273','884276','884232','884269','884271']", ,"['660681']", ,9.157,12037.94 +11587.0,package delivered,2019-11-20 20:40:45.000Z, , , ,"['660675']", ,0.99,628.99 +11588.0,place order,2019-11-20 22:12:27.000Z, ,"['884338','884339','884341','884340']","['991074']", , ,3.269,5999.0 +11589.0,create package,2019-11-20 23:00:00.000Z, ,"['884230']", ,"['660682']", ,0.2,39.99 +11590.0,package delivered,2019-11-21 07:39:09.000Z, , , ,"['660676']", ,3.185,2957.98 +11591.0,reorder item,2019-11-21 07:44:46.000Z, ,"['884296']", , , ,0.483,1099.0 +11592.0,pay order,2019-11-21 07:53:06.000Z, , ,"['991018']", , ,2.906,1223.97 +11593.0,place order,2019-11-21 08:06:31.000Z, ,"['884342','884343']","['991075']", , ,0.36,1853.0 +11594.0,pick item,2019-11-21 08:10:05.000Z, ,"['884257']", , , ,0.28,89.99 +11595.0,reorder item,2019-11-21 08:34:37.000Z, ,"['884176']", , , ,0.44,476.0 +11596.0,pay order,2019-11-21 08:44:12.000Z, , ,"['991046']", , ,3.185,3548.99 +11597.0,pick item,2019-11-21 08:46:26.000Z, ,"['884284']", , , ,1.25,2200.0 +11598.0,pick item,2019-11-21 08:57:22.000Z, ,"['884342']", , , ,0.172,699.0 +11599.0,reorder item,2019-11-21 09:12:25.000Z, ,"['884234']", , , ,0.483,1099.0 +11600.0,pick item,2019-11-21 09:24:46.000Z, ,"['884036']", , , ,0.28,449.0 +11601.0,pick item,2019-11-21 09:29:06.000Z, ,"['884280']", , , ,0.166,799.0 +11602.0,pick item,2019-11-21 09:29:44.000Z, ,"['884311']", , , ,0.98,129.99 +11603.0,place order,2019-11-21 09:32:50.000Z, ,"['884344','884345','884346']","['991076']", , ,3.133,3753.99 +11604.0,item out of stock,2019-11-21 09:53:12.000Z, ,"['884306']", , , ,1.25,2200.0 +11605.0,pick item,2019-11-21 09:54:11.000Z, ,"['884339']", , , ,0.483,495.0 +11606.0,pick item,2019-11-21 09:56:44.000Z, ,"['884305']", , , ,0.88,89.99 +11607.0,reorder item,2019-11-21 09:56:58.000Z, ,"['884227']", , , ,0.483,495.0 +11608.0,confirm order,2019-11-21 09:57:06.000Z, , ,"['991069']", , ,3.169,4706.99 +11609.0,pick item,2019-11-21 09:59:33.000Z, ,"['884337']", , , ,0.28,89.99 +11610.0,pay order,2019-11-21 09:59:42.000Z, , ,"['991055']", , ,2.718,3032.98 +11611.0,item out of stock,2019-11-21 10:00:29.000Z, ,"['884336']", , , ,0.44,476.0 +11612.0,reorder item,2019-11-21 10:15:28.000Z, ,"['884313']", , , ,0.483,495.0 +11613.0,pick item,2019-11-21 10:36:36.000Z, ,"['884341']", , , ,1.37,2500.0 +11614.0,failed delivery,2019-11-21 10:53:28.000Z, , , ,"['660669']", ,3.909,6094.98 +11615.0,pick item,2019-11-21 11:12:02.000Z, ,"['884145']", , , ,0.166,799.0 +11616.0,place order,2019-11-21 11:25:27.000Z, ,"['884348','884347','884349','884350']","['991077']", , ,3.1830000000000003,1859.98 +11617.0,pick item,2019-11-21 11:26:53.000Z, ,"['884059']", , , ,0.98,129.99 +11618.0,pick item,2019-11-21 11:34:59.000Z, ,"['884185']", , , ,0.166,799.0 +11619.0,pick item,2019-11-21 11:35:15.000Z, ,"['884332']", , , ,0.483,79.99 +11620.0,pick item,2019-11-21 11:47:31.000Z, ,"['884333']", , , ,0.98,129.99 +11621.0,confirm order,2019-11-21 11:50:06.000Z, , ,"['991071']", , ,1.3259999999999998,2427.99 +11622.0,confirm order,2019-11-21 11:54:05.000Z, , ,"['991054']", , ,0.655,1199.0 +11623.0,pay order,2019-11-21 11:55:31.000Z, , ,"['991070']", , ,1.15,2717.99 +11624.0,pick item,2019-11-21 12:20:40.000Z, ,"['883709']", , , ,0.28,449.0 +11625.0,pick item,2019-11-21 12:22:21.000Z, ,"['884153']", , , ,0.166,799.0 +11626.0,pay order,2019-11-21 12:44:31.000Z, , ,"['991056']", , ,2.608,2887.98 +11627.0,pay order,2019-11-21 12:52:00.000Z, , ,"['991052']", , ,2.35,743.97 +11628.0,item out of stock,2019-11-21 12:58:38.000Z, ,"['884237']", , , ,0.483,495.0 +11629.0,place order,2019-11-21 13:10:41.000Z, ,"['884351','884352','884354','884353']","['991078']", , ,2.307,2701.99 +11630.0,package delivered,2019-11-21 13:18:57.000Z, , , ,"['660670']", ,2.306,1008.97 +11631.0,pick item,2019-11-21 13:20:31.000Z, ,"['884325']", , , ,0.172,699.0 +11632.0,send package,2019-11-21 13:27:08.000Z, , , ,"['660680']", ,2.9530000000000003,5804.99 +11633.0,pay order,2019-11-21 13:43:14.000Z, , ,"['991067']", , ,1.378,1812.99 +11634.0,pick item,2019-11-21 13:45:44.000Z, ,"['884287']", , , ,0.483,495.0 +11635.0,create package,2019-11-21 13:45:44.000Z, ,"['884238','884147','884070','884240','884337']", ,"['660683']", ,2.963,1954.97 +11636.0,pick item,2019-11-21 13:46:48.000Z, ,"['884354']", , , ,0.483,1099.0 +11637.0,reorder item,2019-11-21 13:53:19.000Z, ,"['884224']", , , ,0.38,29.99 +11638.0,pick item,2019-11-21 13:59:31.000Z, ,"['884323']", , , ,0.172,699.0 +11639.0,pay order,2019-11-21 14:00:25.000Z, , ,"['990949']", , ,1.338,2158.98 +11640.0,pick item,2019-11-21 14:25:21.000Z, ,"['884318']", , , ,0.483,79.99 +11641.0,pick item,2019-11-21 14:25:46.000Z, ,"['884353']", , , ,0.172,699.0 +11642.0,package delivered,2019-11-21 14:25:51.000Z, , , ,"['660678']", ,1.818,2123.97 +11643.0,pick item,2019-11-21 14:37:04.000Z, ,"['884274']", , , ,0.21,529.0 +11644.0,create package,2019-11-21 14:37:04.000Z, ,"['884244','883709','884102']", ,"['660684']", ,0.77,1067.99 +11645.0,place order,2019-11-21 14:41:10.000Z, ,"['884357','884355','884361','884363','884356','884359','884362','884360','884358']","['991079']", , ,3.817,4816.96 +11646.0,pick item,2019-11-21 14:55:52.000Z, ,"['884358']", , , ,1.25,2200.0 +11647.0,package delivered,2019-11-21 15:08:16.000Z, , , ,"['660680']", ,2.9530000000000003,5804.99 +11648.0,package delivered,2019-11-21 15:14:10.000Z, , , ,"['660674']", ,1.743,658.98 +11649.0,pay order,2019-11-21 15:30:36.000Z, , ,"['991049']", , ,1.643,1233.98 +11650.0,pick item,2019-11-21 15:39:30.000Z, ,"['884260']", , , ,0.44,476.0 +11651.0,pay order,2019-11-21 15:39:58.000Z, , ,"['991007']", , ,1.035,1228.99 +11652.0,send package,2019-11-21 15:43:08.000Z, , , ,"['660682']", ,0.2,39.99 +11653.0,pick item,2019-11-21 15:47:34.000Z, ,"['884351']", , , ,1.48,199.99 +11654.0,create package,2019-11-21 15:47:34.000Z, ,"['884280','884298','884300','884279','884299','884281','884302']", ,"['660685']", ,3.816,5525.98 +11655.0,pay order,2019-11-21 15:51:44.000Z, , ,"['991060']", , ,1.604,4153.0 +11656.0,item out of stock,2019-11-21 15:56:26.000Z, ,"['884228']", , , ,1.25,2200.0 +11657.0,pick item,2019-11-21 16:10:49.000Z, ,"['883691']", , , ,0.28,449.0 +11658.0,pay order,2019-11-21 16:13:51.000Z, , ,"['990937']", , ,2.06,254.98 +11659.0,pay order,2019-11-21 16:20:06.000Z, , ,"['991063']", , ,1.7180000000000002,3803.0 +11660.0,pay order,2019-11-21 16:26:28.000Z, , ,"['991061']", , ,3.78,4554.99 +11661.0,send package,2019-11-21 16:34:13.000Z, , , ,"['660683']", ,2.963,1954.97 +11662.0,package delivered,2019-11-21 16:35:43.000Z, , , ,"['660669']", ,3.909,6094.98 +11663.0,send package,2019-11-21 16:36:47.000Z, , , ,"['660681']", ,9.157,12037.94 +11664.0,place order,2019-11-21 16:42:07.000Z, ,"['884365','884366','884367','884364']","['991080']", , ,2.643,1403.97 +11665.0,send package,2019-11-21 17:02:45.000Z, , , ,"['660679']", ,3.948,5091.99 +11666.0,pay order,2019-11-21 17:05:01.000Z, , ,"['991068']", , ,5.448,3218.96 +11667.0,pay order,2019-11-21 17:08:19.000Z, , ,"['991071']", , ,1.3259999999999998,2427.99 +11668.0,reorder item,2019-11-21 17:14:43.000Z, ,"['884192']", , , ,0.2,39.99 +11669.0,package delivered,2019-11-21 17:19:10.000Z, , , ,"['660679']", ,3.948,5091.99 +11670.0,place order,2019-11-21 18:45:56.000Z, ,"['884368','884370','884369']","['991081']", , ,2.1630000000000003,324.97 +11671.0,pick item,2019-11-21 19:01:18.000Z, ,"['884338']", , , ,1.25,2200.0 +11672.0,confirm order,2019-11-21 20:13:24.000Z, , ,"['991074']", , ,3.269,5999.0 +11673.0,pick item,2019-11-21 20:32:56.000Z, ,"['884313']", , , ,0.483,495.0 +11674.0,confirm order,2019-11-21 21:36:35.000Z, , ,"['991072']", , ,1.946,1313.98 +11675.0,reorder item,2019-11-21 21:42:26.000Z, ,"['884306']", , , ,1.25,2200.0 +11676.0,place order,2019-11-21 22:11:27.000Z, ,"['884373','884378','884377','884374','884375','884376','884372','884371']","['991082']", , ,5.029,4220.96 +11677.0,item out of stock,2019-11-22 08:01:56.000Z, ,"['884364']", , , ,0.98,129.99 +11678.0,pick item,2019-11-22 08:04:07.000Z, ,"['884275']", , , ,0.88,89.99 +11679.0,place order,2019-11-22 08:05:19.000Z, ,"['884380','884379','884384','884381','884383','884382']","['991083']", , ,3.759,7581.0 +11680.0,pick item,2019-11-22 08:08:52.000Z, ,"['884234']", , , ,0.483,1099.0 +11681.0,pick item,2019-11-22 08:28:18.000Z, ,"['883809']", , , ,0.44,476.0 +11682.0,confirm order,2019-11-22 08:30:51.000Z, , ,"['991073']", , ,0.892,1269.99 +11683.0,pick item,2019-11-22 08:34:14.000Z, ,"['884340']", , , ,0.166,799.0 +11684.0,create package,2019-11-22 08:34:14.000Z, ,"['884307','884223','884284','884283','884260','884295','884263','884282','884294','884308','884293']", ,"['660686']", ,7.234,8740.97 +11685.0,pick item,2019-11-22 08:56:38.000Z, ,"['884324']", , , ,0.44,476.0 +11686.0,pay order,2019-11-22 09:09:58.000Z, , ,"['991019']", , ,3.525,3448.98 +11687.0,pick item,2019-11-22 09:13:09.000Z, ,"['884349']", , , ,0.483,1099.0 +11688.0,pick item,2019-11-22 09:19:34.000Z, ,"['884359']", , , ,0.2,39.99 +11689.0,pick item,2019-11-22 09:24:42.000Z, ,"['884346']", , , ,1.37,2500.0 +11690.0,confirm order,2019-11-22 09:26:45.000Z, , ,"['991083']", , ,3.759,7581.0 +11691.0,package delivered,2019-11-22 09:28:36.000Z, , , ,"['660681']", ,9.157,12037.94 +11692.0,place order,2019-11-22 09:30:25.000Z, ,"['884386','884388','884385','884389','884390','884387']","['991084']", , ,3.91,1033.95 +11693.0,pick item,2019-11-22 09:32:25.000Z, ,"['884388']", , , ,0.28,89.99 +11694.0,confirm order,2019-11-22 09:46:25.000Z, , ,"['991084']", , ,3.91,1033.95 +11695.0,confirm order,2019-11-22 09:47:47.000Z, , ,"['991064']", , ,1.851,1591.99 +11696.0,pick item,2019-11-22 09:49:12.000Z, ,"['884361']", , , ,0.172,699.0 +11697.0,confirm order,2019-11-22 09:56:39.000Z, , ,"['991079']", , ,3.817,4816.96 +11698.0,pick item,2019-11-22 09:57:04.000Z, ,"['884380']", , , ,0.21,529.0 +11699.0,pick item,2019-11-22 09:58:00.000Z, ,"['884357']", , , ,0.28,449.0 +11700.0,pick item,2019-11-22 09:59:56.000Z, ,"['884367']", , , ,0.98,129.99 +11701.0,pick item,2019-11-22 10:01:02.000Z, ,"['884383']", , , ,0.483,1099.0 +11702.0,pick item,2019-11-22 10:09:24.000Z, ,"['884370']", , , ,0.2,39.99 +11703.0,create package,2019-11-22 10:09:24.000Z, ,"['884212','883691']", ,"['660687']", ,1.26,578.99 +11704.0,send package,2019-11-22 10:17:38.000Z, , , ,"['660684']", ,0.77,1067.99 +11705.0,pick item,2019-11-22 10:20:09.000Z, ,"['884379']", , , ,1.37,2500.0 +11706.0,send package,2019-11-22 10:20:55.000Z, , , ,"['660685']", ,3.816,5525.98 +11707.0,package delivered,2019-11-22 10:26:24.000Z, , , ,"['660685']", ,3.816,5525.98 +11708.0,pick item,2019-11-22 10:28:55.000Z, ,"['884355']", , , ,0.172,699.0 +11709.0,create package,2019-11-22 10:28:55.000Z, ,"['883853','883984']", ,"['660688']", ,1.475,258.99 +11710.0,pick item,2019-11-22 10:30:17.000Z, ,"['884378']", , , ,1.48,199.99 +11711.0,pick item,2019-11-22 10:31:52.000Z, ,"['884319']", , , ,0.483,495.0 +11712.0,create package,2019-11-22 10:31:52.000Z, ,"['884036','884153','884265','884351','884266','884354','884353']", ,"['660689']", ,4.343999999999999,3890.98 +11713.0,pick item,2019-11-22 10:34:47.000Z, ,"['884301']", , , ,0.44,476.0 +11714.0,confirm order,2019-11-22 10:58:28.000Z, , ,"['991078']", , ,2.307,2701.99 +11715.0,reorder item,2019-11-22 11:10:08.000Z, ,"['884272']", , , ,1.48,199.99 +11716.0,place order,2019-11-22 11:20:38.000Z, ,"['884395','884392','884391','884393','884394']","['991085']", , ,2.904,4561.99 +11717.0,confirm order,2019-11-22 11:23:47.000Z, , ,"['991081']", , ,2.1630000000000003,324.97 +11718.0,pick item,2019-11-22 11:44:48.000Z, ,"['884372']", , , ,0.88,89.99 +11719.0,pick item,2019-11-22 11:54:19.000Z, ,"['884356']", , , ,0.483,495.0 +11720.0,send package,2019-11-22 11:58:38.000Z, , , ,"['660689']", ,4.343999999999999,3890.98 +11721.0,package delivered,2019-11-22 12:17:44.000Z, , , ,"['660682']", ,0.2,39.99 +11722.0,confirm order,2019-11-22 12:36:23.000Z, , ,"['991082']", , ,5.029,4220.96 +11723.0,place order,2019-11-22 13:01:03.000Z, ,"['884400','884396','884404','884402','884397','884398','884401','884403','884399']","['991086']", , ,4.6110000000000015,5860.96 +11724.0,pay order,2019-11-22 13:11:30.000Z, , ,"['991054']", , ,0.655,1199.0 +11725.0,reorder item,2019-11-22 13:18:12.000Z, ,"['884237']", , , ,0.483,495.0 +11726.0,confirm order,2019-11-22 13:30:13.000Z, , ,"['991075']", , ,0.36,1853.0 +11727.0,item out of stock,2019-11-22 13:35:27.000Z, ,"['884366']", , , ,0.483,1099.0 +11728.0,pick item,2019-11-22 13:35:47.000Z, ,"['884362']", , , ,0.28,89.99 +11729.0,pick item,2019-11-22 13:47:49.000Z, ,"['884350']", , , ,0.44,476.0 +11730.0,pick item,2019-11-22 13:48:20.000Z, ,"['884402']", , , ,0.38,29.99 +11731.0,package delivered,2019-11-22 13:53:40.000Z, , , ,"['660684']", ,0.77,1067.99 +11732.0,pay order,2019-11-22 13:55:03.000Z, , ,"['991066']", , ,3.893,2524.97 +11733.0,pick item,2019-11-22 14:07:43.000Z, ,"['884303']", , , ,0.483,79.99 +11734.0,create package,2019-11-22 14:07:43.000Z, ,"['883809','884349','883939','884350']", ,"['660690']", ,2.733,4551.0 +11735.0,pick item,2019-11-22 14:17:22.000Z, ,"['884331']", , , ,0.483,79.99 +11736.0,place order,2019-11-22 14:21:54.000Z, ,"['884405','884407','884406']","['991087']", , ,2.2,1129.99 +11737.0,confirm order,2019-11-22 14:33:31.000Z, , ,"['991085']", , ,2.904,4561.99 +11738.0,pick item,2019-11-22 14:36:59.000Z, ,"['884363']", , , ,0.78,99.99 +11739.0,confirm order,2019-11-22 14:39:44.000Z, , ,"['991087']", , ,2.2,1129.99 +11740.0,pick item,2019-11-22 14:41:56.000Z, ,"['884289']", , , ,0.188,1149.0 +11741.0,pick item,2019-11-22 14:51:48.000Z, ,"['884381']", , , ,0.28,449.0 +11742.0,create package,2019-11-22 14:51:48.000Z, ,"['884315','884311','884145','884313']", ,"['660691']", ,2.124,1552.99 +11743.0,reorder item,2019-11-22 14:53:24.000Z, ,"['884261']", , , ,0.21,529.0 +11744.0,pick item,2019-11-22 15:10:20.000Z, ,"['884335']", , , ,0.172,699.0 +11745.0,confirm order,2019-11-22 15:11:01.000Z, , ,"['991077']", , ,3.1830000000000003,1859.98 +11746.0,reorder item,2019-11-22 15:11:10.000Z, ,"['884309']", , , ,0.188,1149.0 +11747.0,reorder item,2019-11-22 15:21:35.000Z, ,"['884312']", , , ,1.48,199.99 +11748.0,confirm order,2019-11-22 15:24:18.000Z, , ,"['991080']", , ,2.643,1403.97 +11749.0,pick item,2019-11-22 15:27:17.000Z, ,"['884398']", , , ,0.2,39.99 +11750.0,pay order,2019-11-22 15:39:28.000Z, , ,"['991001']", , ,3.264,2231.97 +11751.0,pick item,2019-11-22 15:41:10.000Z, ,"['884320']", , , ,0.495,129.0 +11752.0,reorder item,2019-11-22 15:43:46.000Z, ,"['884254']", , , ,0.21,529.0 +11753.0,pick item,2019-11-22 15:47:51.000Z, ,"['884085']", , , ,0.495,129.0 +11754.0,create package,2019-11-22 15:47:51.000Z, ,"['884236','884234','884333','884332']", ,"['660692']", ,2.7260000000000004,1408.97 +11755.0,send package,2019-11-22 15:52:37.000Z, , , ,"['660692']", ,2.7260000000000004,1408.97 +11756.0,pick item,2019-11-22 15:53:49.000Z, ,"['884393']", , , ,0.172,699.0 +11757.0,pick item,2019-11-22 15:54:04.000Z, ,"['884348']", , , ,0.98,129.99 +11758.0,pick item,2019-11-22 16:01:28.000Z, ,"['884316']", , , ,1.25,2200.0 +11759.0,place order,2019-11-22 16:03:35.000Z, ,"['884411','884409','884408','884410','884412']","['991088']", , ,1.898,1234.98 +11760.0,pick item,2019-11-22 16:06:14.000Z, ,"['884390']", , , ,0.38,29.99 +11761.0,create package,2019-11-22 16:06:14.000Z, ,"['884331','884329','884328','884380','884330','884383','884379','884381']", ,"['660693']", ,3.669,6999.99 +11762.0,pay order,2019-11-22 16:13:24.000Z, , ,"['991084']", , ,3.91,1033.95 +11763.0,send package,2019-11-22 16:29:24.000Z, , , ,"['660686']", ,7.234,8740.97 +11764.0,pay order,2019-11-22 17:01:16.000Z, , ,"['991045']", , ,2.286,1901.97 +11765.0,pick item,2019-11-22 17:06:31.000Z, ,"['884401']", , , ,1.28,149.99 +11766.0,pay order,2019-11-22 17:10:40.000Z, , ,"['991037']", , ,2.186,4071.99 +11767.0,package delivered,2019-11-22 17:12:41.000Z, , , ,"['660692']", ,2.7260000000000004,1408.97 +11768.0,pick item,2019-11-22 17:15:56.000Z, ,"['884297']", , , ,1.48,199.99 +11769.0,send package,2019-11-22 17:18:49.000Z, , , ,"['660688']", ,1.475,258.99 +11770.0,pick item,2019-11-22 17:18:57.000Z, ,"['884352']", , , ,0.172,699.0 +11771.0,place order,2019-11-22 17:26:57.000Z, ,"['884420','884414','884415','884416','884418','884422','884421','884419','884413','884417']","['991089']", , ,6.263,4382.93 +11772.0,send package,2019-11-22 17:50:56.000Z, , , ,"['660691']", ,2.124,1552.99 +11773.0,pick item,2019-11-22 19:06:36.000Z, ,"['884365']", , , ,0.2,39.99 +11774.0,place order,2019-11-22 20:00:26.000Z, ,"['884423','884424']","['991090']", , ,1.58,3034.0 +11775.0,send package,2019-11-22 20:47:29.000Z, , , ,"['660687']", ,1.26,578.99 +11776.0,place order,2019-11-23 09:02:30.000Z, ,"['884429','884426','884425','884427','884428']","['991091']", , ,2.426,1758.97 +11777.0,place order,2019-11-24 08:58:54.000Z, ,"['884431','884430']","['991092']", , ,0.41,573.99 +11778.0,payment reminder,2019-11-24 09:44:43.000Z, , ,"['990963']", , ,2.218,3773.98 +11779.0,payment reminder,2019-11-24 15:16:01.000Z, , ,"['990971']", , ,0.92,969.99 +11780.0,place order,2019-11-25 02:09:42.000Z, ,"['884441','884437','884432','884435','884433','884438','884439','884436','884440','884434']","['991093']", , ,6.412999999999999,7385.97 +11781.0,send package,2019-11-25 07:26:53.000Z, , , ,"['660690']", ,2.733,4551.0 +11782.0,pick item,2019-11-25 07:28:13.000Z, ,"['884374']", , , ,0.483,1099.0 +11783.0,pick item,2019-11-25 07:32:25.000Z, ,"['884397']", , , ,1.37,2500.0 +11784.0,pick item,2019-11-25 07:47:35.000Z, ,"['884377']", , , ,0.38,29.99 +11785.0,package delivered,2019-11-25 08:14:23.000Z, , , ,"['660683']", ,2.963,1954.97 +11786.0,item out of stock,2019-11-25 08:22:18.000Z, ,"['884399']", , , ,0.172,699.0 +11787.0,item out of stock,2019-11-25 08:27:10.000Z, ,"['884414']", , , ,0.2,39.99 +11788.0,pick item,2019-11-25 08:29:46.000Z, ,"['884408']", , , ,0.483,495.0 +11789.0,create package,2019-11-25 08:29:46.000Z, ,"['884059','884006']", ,"['660694']", ,1.36,159.98 +11790.0,place order,2019-11-25 08:30:28.000Z, ,"['884442','884444','884443']","['991094']", , ,3.9,4854.99 +11791.0,payment reminder,2019-11-25 08:32:21.000Z, , ,"['990973']", , ,2.75,3229.99 +11792.0,confirm order,2019-11-25 08:39:32.000Z, , ,"['991086']", , ,4.6110000000000015,5860.96 +11793.0,pick item,2019-11-25 08:51:57.000Z, ,"['884392']", , , ,0.21,529.0 +11794.0,pick item,2019-11-25 08:54:28.000Z, ,"['884384']", , , ,1.25,2200.0 +11795.0,create package,2019-11-25 08:54:28.000Z, ,"['884338','884341','884357','884319','884274','884361','884356','884185','884257','884339','884355','884289','884362','884318','884320','884340','884287','884275','884363','884359','884358']", ,"['660695']", ,10.554,14621.94 +11796.0,reorder item,2019-11-25 08:54:32.000Z, ,"['884364']", , , ,0.98,129.99 +11797.0,reorder item,2019-11-25 09:00:46.000Z, ,"['884228']", , , ,1.25,2200.0 +11798.0,pick item,2019-11-25 09:04:03.000Z, ,"['884407']", , , ,0.44,476.0 +11799.0,item out of stock,2019-11-25 09:11:18.000Z, ,"['884412']", , , ,0.28,89.99 +11800.0,pick item,2019-11-25 09:19:55.000Z, ,"['884277']", , , ,0.166,799.0 +11801.0,item out of stock,2019-11-25 09:31:07.000Z, ,"['884405']", , , ,0.28,449.0 +11802.0,pick item,2019-11-25 09:36:44.000Z, ,"['884432']", , , ,1.37,2500.0 +11803.0,confirm order,2019-11-25 09:39:38.000Z, , ,"['991076']", , ,3.133,3753.99 +11804.0,item out of stock,2019-11-25 09:41:24.000Z, ,"['884440']", , , ,1.28,149.99 +11805.0,pick item,2019-11-25 09:41:54.000Z, ,"['884443']", , , ,1.37,2500.0 +11806.0,pick item,2019-11-25 09:41:56.000Z, ,"['884343']", , , ,0.188,1149.0 +11807.0,pick item,2019-11-25 09:55:55.000Z, ,"['884444']", , , ,1.28,149.99 +11808.0,send package,2019-11-25 09:58:51.000Z, , , ,"['660695']", ,10.554,14621.94 +11809.0,confirm order,2019-11-25 10:05:40.000Z, , ,"['991090']", , ,1.58,3034.0 +11810.0,pay order,2019-11-25 10:18:35.000Z, , ,"['990953']", , ,3.2430000000000003,1612.97 +11811.0,send package,2019-11-25 10:19:53.000Z, , , ,"['660693']", ,3.669,6999.99 +11812.0,place order,2019-11-25 10:20:43.000Z, ,"['884447','884448','884449','884446','884445']","['991095']", , ,4.1610000000000005,5722.99 +11813.0,pick item,2019-11-25 10:30:05.000Z, ,"['884314']", , , ,0.38,29.99 +11814.0,pick item,2019-11-25 10:47:38.000Z, ,"['884382']", , , ,0.166,799.0 +11815.0,item out of stock,2019-11-25 10:48:55.000Z, ,"['884403']", , , ,0.166,799.0 +11816.0,confirm order,2019-11-25 10:57:44.000Z, , ,"['991094']", , ,3.9,4854.99 +11817.0,reorder item,2019-11-25 11:09:41.000Z, ,"['884336']", , , ,0.44,476.0 +11818.0,pick item,2019-11-25 11:11:22.000Z, ,"['884327']", , , ,0.2,39.99 +11819.0,pay order,2019-11-25 11:52:34.000Z, , ,"['991069']", , ,3.169,4706.99 +11820.0,place order,2019-11-25 12:01:14.000Z, ,"['884450','884451']","['991096']", , ,1.57,2544.99 +11821.0,pick item,2019-11-25 12:16:11.000Z, ,"['884441']", , , ,0.172,699.0 +11822.0,pick item,2019-11-25 12:25:07.000Z, ,"['884375']", , , ,0.166,799.0 +11823.0,item out of stock,2019-11-25 12:30:21.000Z, ,"['884442']", , , ,1.25,2200.0 +11824.0,confirm order,2019-11-25 12:52:05.000Z, , ,"['991088']", , ,1.898,1234.98 +11825.0,item out of stock,2019-11-25 13:15:12.000Z, ,"['884334']", , , ,0.483,1099.0 +11826.0,place order,2019-11-25 13:22:15.000Z, ,"['884456','884453','884455','884452','884454']","['991097']", , ,3.092,1638.97 +11827.0,pick item,2019-11-25 13:35:29.000Z, ,"['884448']", , , ,1.25,2200.0 +11828.0,pick item,2019-11-25 13:37:21.000Z, ,"['884410']", , , ,0.495,129.0 +11829.0,package delivered,2019-11-25 13:39:45.000Z, , , ,"['660693']", ,3.669,6999.99 +11830.0,confirm order,2019-11-25 13:47:17.000Z, , ,"['991097']", , ,3.092,1638.97 +11831.0,pick item,2019-11-25 13:49:29.000Z, ,"['884429']", , , ,0.2,39.99 +11832.0,pick item,2019-11-25 13:51:04.000Z, ,"['884427']", , , ,0.88,89.99 +11833.0,pay order,2019-11-25 14:06:25.000Z, , ,"['991015']", , ,2.249,2508.98 +11834.0,pick item,2019-11-25 14:23:30.000Z, ,"['884418']", , , ,0.2,39.99 +11835.0,pay order,2019-11-25 14:32:38.000Z, , ,"['991078']", , ,2.307,2701.99 +11836.0,pick item,2019-11-25 14:32:56.000Z, ,"['884204']", , , ,0.172,699.0 +11837.0,confirm order,2019-11-25 14:33:40.000Z, , ,"['991095']", , ,4.1610000000000005,5722.99 +11838.0,pay order,2019-11-25 14:36:00.000Z, , ,"['990940']", , ,4.36,1010.96 +11839.0,pick item,2019-11-25 14:42:52.000Z, ,"['884373']", , , ,0.172,699.0 +11840.0,confirm order,2019-11-25 14:45:47.000Z, , ,"['991089']", , ,6.263,4382.93 +11841.0,pick item,2019-11-25 14:51:33.000Z, ,"['884411']", , , ,0.44,476.0 +11842.0,package delivered,2019-11-25 14:55:53.000Z, , , ,"['660695']", ,10.554,14621.94 +11843.0,pick item,2019-11-25 15:00:30.000Z, ,"['884368']", , , ,0.483,79.99 +11844.0,package delivered,2019-11-25 15:01:47.000Z, , , ,"['660691']", ,2.124,1552.99 +11845.0,place order,2019-11-25 15:04:18.000Z, ,"['884457','884461','884465','884460','884463','884458','884464','884462','884459']","['991098']", , ,7.271,7581.96 +11846.0,pick item,2019-11-25 15:14:38.000Z, ,"['884460']", , , ,0.78,99.99 +11847.0,create package,2019-11-25 15:14:38.000Z, ,"['884390','884402','884397','884370','884398','884343','884368','884401','884388','884342']", ,"['660696']", ,4.933,4807.93 +11848.0,pay order,2019-11-25 15:19:47.000Z, , ,"['991086']", , ,4.6110000000000015,5860.96 +11849.0,item out of stock,2019-11-25 15:31:01.000Z, ,"['884463']", , , ,0.28,449.0 +11850.0,pick item,2019-11-25 15:33:25.000Z, ,"['884435']", , , ,0.44,476.0 +11851.0,pick item,2019-11-25 15:40:33.000Z, ,"['884192']", , , ,0.2,39.99 +11852.0,pick item,2019-11-25 15:41:14.000Z, ,"['884344']", , , ,0.483,1099.0 +11853.0,pick item,2019-11-25 15:44:54.000Z, ,"['884347']", , , ,1.28,149.99 +11854.0,pick item,2019-11-25 15:45:06.000Z, ,"['884428']", , , ,0.483,1099.0 +11855.0,pick item,2019-11-25 15:46:41.000Z, ,"['884465']", , , ,1.25,2200.0 +11856.0,pick item,2019-11-25 15:46:59.000Z, ,"['884228']", , , ,1.25,2200.0 +11857.0,pick item,2019-11-25 15:50:02.000Z, ,"['884456']", , , ,0.483,495.0 +11858.0,pick item,2019-11-25 15:58:24.000Z, ,"['884177']", , , ,0.38,29.99 +11859.0,pick item,2019-11-25 16:05:35.000Z, ,"['884417']", , , ,0.38,29.99 +11860.0,create package,2019-11-25 16:05:35.000Z, ,"['884392','884303','884305','884393','884204']", ,"['660697']", ,1.917,2096.98 +11861.0,item out of stock,2019-11-25 16:09:20.000Z, ,"['884449']", , , ,0.495,129.0 +11862.0,pick item,2019-11-25 16:14:00.000Z, ,"['884461']", , , ,0.483,1099.0 +11863.0,pay order,2019-11-25 16:14:14.000Z, , ,"['991090']", , ,1.58,3034.0 +11864.0,send package,2019-11-25 16:16:33.000Z, , , ,"['660696']", ,4.933,4807.93 +11865.0,pick item,2019-11-25 16:17:22.000Z, ,"['884272']", , , ,1.48,199.99 +11866.0,package delivered,2019-11-25 16:24:15.000Z, , , ,"['660689']", ,4.343999999999999,3890.98 +11867.0,place order,2019-11-25 16:28:23.000Z, ,"['884469','884468','884470','884467','884466']","['991099']", , ,2.766,1215.97 +11868.0,pick item,2019-11-25 16:38:32.000Z, ,"['884376']", , , ,1.28,149.99 +11869.0,reorder item,2019-11-25 16:43:51.000Z, ,"['884463']", , , ,0.28,449.0 +11870.0,pick item,2019-11-25 17:07:05.000Z, ,"['884345']", , , ,1.28,149.99 +11871.0,pick item,2019-11-25 17:08:02.000Z, ,"['884157']", , , ,0.483,1099.0 +11872.0,create package,2019-11-25 17:08:02.000Z, ,"['884325','884323','884324','884085','884327']", ,"['660698']", ,1.479,2042.99 +11873.0,package delivered,2019-11-25 17:48:58.000Z, , , ,"['660687']", ,1.26,578.99 +11874.0,reorder item,2019-11-25 17:52:19.000Z, ,"['884449']", , , ,0.495,129.0 +11875.0,place order,2019-11-25 18:16:33.000Z, ,"['884472','884471']","['991100']", , ,0.42,1063.0 +11876.0,reorder item,2019-11-25 18:51:33.000Z, ,"['884442']", , , ,1.25,2200.0 +11877.0,package delivered,2019-11-25 19:55:38.000Z, , , ,"['660688']", ,1.475,258.99 +11878.0,item out of stock,2019-11-25 20:28:54.000Z, ,"['884413']", , , ,1.28,149.99 +11879.0,place order,2019-11-25 21:12:41.000Z, ,"['884473','884474','884475']","['991101']", , ,0.877,1362.0 +11880.0,package delivered,2019-11-25 21:13:34.000Z, , , ,"['660690']", ,2.733,4551.0 +11881.0,create package,2019-11-25 23:00:00.000Z, ,"['884411','884407','884344','884408','884410','884345','884346']", ,"['660699']", ,4.9910000000000005,5324.99 +11882.0,place order,2019-11-26 07:16:57.000Z, ,"['884476']","['991102']", , ,1.28,154.99 +11883.0,pick item,2019-11-26 07:25:01.000Z, ,"['884400']", , , ,0.28,449.0 +11884.0,pick item,2019-11-26 07:30:03.000Z, ,"['883514']", , , ,0.188,1149.0 +11885.0,package delivered,2019-11-26 07:39:04.000Z, , , ,"['660696']", ,4.933,4807.93 +11886.0,pick item,2019-11-26 07:50:51.000Z, ,"['884438']", , , ,0.21,529.0 +11887.0,pick item,2019-11-26 07:52:22.000Z, ,"['884469']", , , ,0.98,129.99 +11888.0,pick item,2019-11-26 08:20:13.000Z, ,"['884387']", , , ,0.98,129.99 +11889.0,item out of stock,2019-11-26 08:22:06.000Z, ,"['884453']", , , ,0.98,129.99 +11890.0,confirm order,2019-11-26 08:22:14.000Z, , ,"['991092']", , ,0.41,573.99 +11891.0,reorder item,2019-11-26 08:22:37.000Z, ,"['884403']", , , ,0.166,799.0 +11892.0,pick item,2019-11-26 08:24:53.000Z, ,"['884391']", , , ,1.37,2500.0 +11893.0,pick item,2019-11-26 08:25:34.000Z, ,"['884078']", , , ,0.483,79.99 +11894.0,pick item,2019-11-26 08:31:50.000Z, ,"['884447']", , , ,0.88,89.99 +11895.0,pick item,2019-11-26 08:33:57.000Z, ,"['884454']", , , ,0.483,79.99 +11896.0,reorder item,2019-11-26 08:37:06.000Z, ,"['884453']", , , ,0.98,129.99 +11897.0,pay order,2019-11-26 08:46:10.000Z, , ,"['991006']", , ,3.817,3313.97 +11898.0,confirm order,2019-11-26 08:51:18.000Z, , ,"['991091']", , ,2.426,1758.97 +11899.0,item out of stock,2019-11-26 08:53:48.000Z, ,"['884476']", , , ,1.28,149.99 +11900.0,pick item,2019-11-26 08:57:59.000Z, ,"['884431']", , , ,0.21,529.0 +11901.0,item out of stock,2019-11-26 09:02:04.000Z, ,"['884472']", , , ,0.21,529.0 +11902.0,place order,2019-11-26 09:15:13.000Z, ,"['884477','884478']","['991103']", , ,0.693,613.99 +11903.0,item out of stock,2019-11-26 09:18:40.000Z, ,"['884416']", , , ,0.78,99.99 +11904.0,pay order,2019-11-26 09:27:32.000Z, , ,"['991094']", , ,3.9,4854.99 +11905.0,pick item,2019-11-26 09:28:56.000Z, ,"['884088']", , , ,1.28,149.99 +11906.0,send package,2019-11-26 09:34:19.000Z, , , ,"['660699']", ,4.9910000000000005,5324.99 +11907.0,pick item,2019-11-26 09:40:27.000Z, ,"['884369']", , , ,1.48,199.99 +11908.0,create package,2019-11-26 09:40:27.000Z, ,"['884365','884367']", ,"['660700']", ,1.18,169.98 +11909.0,package delivered,2019-11-26 09:40:47.000Z, , , ,"['660686']", ,7.234,8740.97 +11910.0,item out of stock,2019-11-26 09:45:32.000Z, ,"['884404']", , , ,0.28,89.99 +11911.0,item out of stock,2019-11-26 09:55:17.000Z, ,"['884420']", , , ,1.28,149.99 +11912.0,send package,2019-11-26 09:58:43.000Z, , , ,"['660694']", ,1.36,159.98 +11913.0,payment reminder,2019-11-26 10:00:17.000Z, , ,"['990983']", , ,2.13,2294.99 +11914.0,confirm order,2019-11-26 10:11:41.000Z, , ,"['991102']", , ,1.28,154.99 +11915.0,pick item,2019-11-26 10:13:46.000Z, ,"['884422']", , , ,0.483,1099.0 +11916.0,pay order,2019-11-26 10:20:38.000Z, , ,"['991085']", , ,2.904,4561.99 +11917.0,confirm order,2019-11-26 10:25:42.000Z, , ,"['991103']", , ,0.693,613.99 +11918.0,pick item,2019-11-26 10:27:44.000Z, ,"['884457']", , , ,0.98,129.99 +11919.0,create package,2019-11-26 10:27:44.000Z, ,"['884378','884301','884297','884376','884373','884377','884374','884375','884372']", ,"['660701']", ,6.761,3742.95 +11920.0,pick item,2019-11-26 10:28:45.000Z, ,"['884452']", , , ,0.166,799.0 +11921.0,pick item,2019-11-26 10:30:49.000Z, ,"['884475']", , , ,0.495,129.0 +11922.0,pick item,2019-11-26 10:31:54.000Z, ,"['884129']", , , ,0.98,129.99 +11923.0,pick item,2019-11-26 10:33:18.000Z, ,"['884458']", , , ,0.188,1149.0 +11924.0,reorder item,2019-11-26 10:47:11.000Z, ,"['884404']", , , ,0.28,89.99 +11925.0,place order,2019-11-26 10:50:13.000Z, ,"['884482','884481','884479','884480']","['991104']", , ,2.046,2332.98 +11926.0,payment reminder,2019-11-26 11:00:02.000Z, , ,"['990985']", , ,3.512,1123.97 +11927.0,pick item,2019-11-26 11:04:42.000Z, ,"['884467']", , , ,0.483,79.99 +11928.0,reorder item,2019-11-26 11:15:58.000Z, ,"['884476']", , , ,1.28,149.99 +11929.0,pick item,2019-11-26 11:33:22.000Z, ,"['884436']", , , ,0.78,99.99 +11930.0,pick item,2019-11-26 11:57:14.000Z, ,"['884292']", , , ,0.495,129.0 +11931.0,pick item,2019-11-26 12:10:16.000Z, ,"['884455']", , , ,0.98,129.99 +11932.0,reorder item,2019-11-26 12:19:16.000Z, ,"['884334']", , , ,0.483,1099.0 +11933.0,send package,2019-11-26 12:33:08.000Z, , , ,"['660698']", ,1.479,2042.99 +11934.0,place order,2019-11-26 13:00:14.000Z, ,"['884483','884485','884484']","['991105']", , ,2.77,833.98 +11935.0,pick item,2019-11-26 13:03:00.000Z, ,"['884459']", , , ,1.25,2200.0 +11936.0,create package,2019-11-26 13:03:00.000Z, ,"['883514','884335']", ,"['660702']", ,0.36,1848.0 +11937.0,pick item,2019-11-26 13:18:50.000Z, ,"['884321']", , , ,0.166,799.0 +11938.0,pay order,2019-11-26 13:40:29.000Z, , ,"['990971']", , ,0.92,969.99 +11939.0,confirm order,2019-11-26 13:46:44.000Z, , ,"['991100']", , ,0.42,1063.0 +11940.0,pick item,2019-11-26 13:57:12.000Z, ,"['884484']", , , ,1.28,149.99 +11941.0,create package,2019-11-26 13:57:12.000Z, ,"['884348','884441','884347','884436','884432','884435','884438']", ,"['660703']", ,5.232,4583.97 +11942.0,reorder item,2019-11-26 14:03:07.000Z, ,"['884472']", , , ,0.21,529.0 +11943.0,pick item,2019-11-26 14:16:14.000Z, ,"['884394']", , , ,0.172,699.0 +11944.0,place order,2019-11-26 14:20:15.000Z, ,"['884492','884489','884491','884487','884488','884490','884486']","['991106']", , ,3.633,1378.95 +11945.0,send package,2019-11-26 14:22:15.000Z, , , ,"['660700']", ,1.18,169.98 +11946.0,confirm order,2019-11-26 14:39:07.000Z, , ,"['991105']", , ,2.77,833.98 +11947.0,item out of stock,2019-11-26 14:43:20.000Z, ,"['884488']", , , ,0.2,39.99 +11948.0,pick item,2019-11-26 15:32:00.000Z, ,"['884481']", , , ,0.483,1099.0 +11949.0,pay order,2019-11-26 15:32:46.000Z, , ,"['991087']", , ,2.2,1129.99 +11950.0,pick item,2019-11-26 15:35:30.000Z, ,"['884396']", , , ,0.483,1099.0 +11951.0,pick item,2019-11-26 15:37:41.000Z, ,"['884479']", , , ,0.2,39.99 +11952.0,pay order,2019-11-26 15:48:28.000Z, , ,"['990973']", , ,2.75,3229.99 +11953.0,payment reminder,2019-11-26 15:50:01.000Z, , ,"['990984']", , ,2.129,2092.98 +11954.0,pick item,2019-11-26 15:57:11.000Z, ,"['884409']", , , ,0.2,39.99 +11955.0,confirm order,2019-11-26 15:57:53.000Z, , ,"['991106']", , ,3.633,1378.95 +11956.0,item out of stock,2019-11-26 15:58:29.000Z, ,"['884478']", , , ,0.21,529.0 +11957.0,place order,2019-11-26 16:00:18.000Z, ,"['884493']","['991107']", , ,0.483,1104.0 +11958.0,pick item,2019-11-26 16:01:26.000Z, ,"['884464']", , , ,1.28,149.99 +11959.0,reorder item,2019-11-26 16:04:35.000Z, ,"['884440']", , , ,1.28,149.99 +11960.0,send package,2019-11-26 16:05:01.000Z, , , ,"['660701']", ,6.761,3742.95 +11961.0,pay order,2019-11-26 16:13:03.000Z, , ,"['991080']", , ,2.643,1403.97 +11962.0,pick item,2019-11-26 16:27:09.000Z, ,"['884386']", , , ,0.78,99.99 +11963.0,create package,2019-11-26 16:27:09.000Z, ,"['884316','884314']", ,"['660704']", ,1.63,2229.99 +11964.0,item out of stock,2019-11-26 16:31:41.000Z, ,"['884489']", , , ,0.2,39.99 +11965.0,confirm order,2019-11-26 16:39:37.000Z, , ,"['991096']", , ,1.57,2544.99 +11966.0,place order,2019-11-26 17:20:23.000Z, ,"['884494','884495','884496']","['991108']", , ,0.8320000000000001,823.98 +11967.0,pick item,2019-11-26 17:36:40.000Z, ,"['883840']", , , ,0.38,29.99 +11968.0,pick item,2019-11-26 17:41:24.000Z, ,"['884404']", , , ,0.28,89.99 +11969.0,create package,2019-11-26 17:41:24.000Z, ,"['884192','884443','884444','884418','884422','884352','884417']", ,"['660705']", ,4.085,4557.96 +11970.0,pick item,2019-11-26 17:54:38.000Z, ,"['884237']", , , ,0.483,495.0 +11971.0,pay order,2019-11-26 18:05:37.000Z, , ,"['990924']", , ,4.023,1702.96 +11972.0,confirm order,2019-11-26 19:12:08.000Z, , ,"['991104']", , ,2.046,2332.98 +11973.0,place order,2019-11-26 19:40:44.000Z, ,"['884499','884497','884498']","['991109']", , ,1.84,334.97 +11974.0,send package,2019-11-26 20:18:06.000Z, , , ,"['660703']", ,5.232,4583.97 +11975.0,confirm order,2019-11-26 20:53:30.000Z, , ,"['991107']", , ,0.483,1104.0 +11976.0,place order,2019-11-27 00:22:18.000Z, ,"['884500']","['991110']", , ,0.78,104.99 +11977.0,send package,2019-11-27 07:21:39.000Z, , , ,"['660697']", ,1.917,2096.98 +11978.0,pick item,2019-11-27 07:23:58.000Z, ,"['883919']", , , ,0.28,449.0 +11979.0,item out of stock,2019-11-27 07:24:19.000Z, ,"['884445']", , , ,0.166,799.0 +11980.0,payment reminder,2019-11-27 07:26:13.000Z, , ,"['990990']", , ,4.063,4361.98 +11981.0,confirm order,2019-11-27 07:32:39.000Z, , ,"['991099']", , ,2.766,1215.97 +11982.0,pick item,2019-11-27 07:35:17.000Z, ,"['884101']", , , ,0.98,129.99 +11983.0,confirm order,2019-11-27 07:40:16.000Z, , ,"['991101']", , ,0.877,1362.0 +11984.0,item out of stock,2019-11-27 07:53:00.000Z, ,"['884423']", , , ,0.21,529.0 +11985.0,confirm order,2019-11-27 07:53:24.000Z, , ,"['991110']", , ,0.78,104.99 +11986.0,failed delivery,2019-11-27 08:14:25.000Z, , , ,"['660694']", ,1.36,159.98 +11987.0,pick item,2019-11-27 08:17:10.000Z, ,"['884426']", , , ,0.38,29.99 +11988.0,pick item,2019-11-27 08:18:33.000Z, ,"['884449']", , , ,0.495,129.0 +11989.0,pick item,2019-11-27 08:19:28.000Z, ,"['883785']", , , ,1.25,2200.0 +11990.0,place order,2019-11-27 08:32:19.000Z, ,"['884502','884501']","['991111']", , ,0.48,134.98 +11991.0,pick item,2019-11-27 08:37:44.000Z, ,"['884466']", , , ,0.483,495.0 +11992.0,create package,2019-11-27 08:37:44.000Z, ,"['884461','884464','884382','884459','884457','884465','884448','884157','884384','884458','884447','884449','884460']", ,"['660706']", ,10.735,13544.96 +11993.0,pick item,2019-11-27 08:42:42.000Z, ,"['884490']", , , ,0.38,29.99 +11994.0,payment reminder,2019-11-27 08:48:02.000Z, , ,"['990995']", , ,1.452,853.99 +11995.0,pick item,2019-11-27 08:59:39.000Z, ,"['884468']", , , ,0.44,476.0 +11996.0,confirm order,2019-11-27 09:11:47.000Z, , ,"['991108']", , ,0.8320000000000001,823.98 +11997.0,pay order,2019-11-27 09:13:15.000Z, , ,"['991073']", , ,0.892,1269.99 +11998.0,reorder item,2019-11-27 09:22:02.000Z, ,"['884423']", , , ,0.21,529.0 +11999.0,pick item,2019-11-27 09:24:59.000Z, ,"['884439']", , , ,1.28,149.99 +12000.0,pay order,2019-11-27 09:30:44.000Z, , ,"['991074']", , ,3.269,5999.0 +12001.0,pick item,2019-11-27 09:34:33.000Z, ,"['884502']", , , ,0.2,39.99 +12002.0,payment reminder,2019-11-27 09:38:45.000Z, , ,"['990878']", , ,6.772,4850.95 +12003.0,pick item,2019-11-27 09:43:10.000Z, ,"['884486']", , , ,1.28,149.99 +12004.0,failed delivery,2019-11-27 10:07:05.000Z, , , ,"['660699']", ,4.9910000000000005,5324.99 +12005.0,pick item,2019-11-27 10:09:50.000Z, ,"['884227']", , , ,0.483,495.0 +12006.0,pick item,2019-11-27 10:13:39.000Z, ,"['884482']", , , ,0.483,1099.0 +12007.0,reorder item,2019-11-27 10:17:30.000Z, ,"['884489']", , , ,0.2,39.99 +12008.0,pick item,2019-11-27 10:19:46.000Z, ,"['884395']", , , ,0.98,129.99 +12009.0,pay order,2019-11-27 10:21:39.000Z, , ,"['991097']", , ,3.092,1638.97 +12010.0,item out of stock,2019-11-27 10:24:08.000Z, ,"['884494']", , , ,0.172,699.0 +12011.0,place order,2019-11-27 10:24:25.000Z, ,"['884505','884515','884514','884507','884509','884512','884516','884510','884508','884513','884506','884504','884511','884503']","['991112']", , ,5.803,6559.95 +12012.0,pick item,2019-11-27 10:25:59.000Z, ,"['884389']", , , ,0.21,529.0 +12013.0,pick item,2019-11-27 10:26:58.000Z, ,"['884471']", , , ,0.21,529.0 +12014.0,pay order,2019-11-27 10:28:48.000Z, , ,"['991101']", , ,0.877,1362.0 +12015.0,pay order,2019-11-27 10:28:56.000Z, , ,"['990990']", , ,4.063,4361.98 +12016.0,send package,2019-11-27 10:33:47.000Z, , , ,"['660706']", ,10.735,13544.96 +12017.0,package delivered,2019-11-27 10:39:25.000Z, , , ,"['660697']", ,1.917,2096.98 +12018.0,pay order,2019-11-27 10:41:47.000Z, , ,"['991064']", , ,1.851,1591.99 +12019.0,confirm order,2019-11-27 10:48:47.000Z, , ,"['991109']", , ,1.84,334.97 +12020.0,pay order,2019-11-27 10:52:23.000Z, , ,"['991107']", , ,0.483,1104.0 +12021.0,pick item,2019-11-27 10:55:35.000Z, ,"['884419']", , , ,0.21,529.0 +12022.0,pay order,2019-11-27 11:06:37.000Z, , ,"['991072']", , ,1.946,1313.98 +12023.0,reorder item,2019-11-27 11:14:19.000Z, ,"['884445']", , , ,0.166,799.0 +12024.0,send package,2019-11-27 11:18:16.000Z, , , ,"['660702']", ,0.36,1848.0 +12025.0,send package,2019-11-27 11:23:36.000Z, , , ,"['660704']", ,1.63,2229.99 +12026.0,package delivered,2019-11-27 11:26:12.000Z, , , ,"['660702']", ,0.36,1848.0 +12027.0,reorder item,2019-11-27 11:50:38.000Z, ,"['884420']", , , ,1.28,149.99 +12028.0,pick item,2019-11-27 12:00:07.000Z, ,"['884500']", , , ,0.78,99.99 +12029.0,pick item,2019-11-27 12:03:39.000Z, ,"['884498']", , , ,0.28,89.99 +12030.0,create package,2019-11-27 12:03:39.000Z, ,"['884277']", ,"['660707']", ,0.166,799.0 +12031.0,pick item,2019-11-27 12:04:13.000Z, ,"['884485']", , , ,1.28,149.99 +12032.0,create package,2019-11-27 12:04:13.000Z, ,"['884429','884227','884428','884427','884426','884228','884456','884454','884455','884452']", ,"['660708']", ,5.787999999999999,5457.95 +12033.0,place order,2019-11-27 12:08:38.000Z, ,"['884520','884519','884517','884522','884521','884518']","['991113']", , ,5.5760000000000005,4588.97 +12034.0,pick item,2019-11-27 12:08:48.000Z, ,"['884224']", , , ,0.38,29.99 +12035.0,confirm order,2019-11-27 12:14:28.000Z, , ,"['991112']", , ,5.803,6559.95 +12036.0,confirm order,2019-11-27 12:14:40.000Z, , ,"['991113']", , ,5.5760000000000005,4588.97 +12037.0,pay order,2019-11-27 12:26:27.000Z, , ,"['991092']", , ,0.41,573.99 +12038.0,payment reminder,2019-11-27 12:33:41.000Z, , ,"['990997']", , ,2.885,3113.98 +12039.0,pick item,2019-11-27 13:17:46.000Z, ,"['884424']", , , ,1.37,2500.0 +12040.0,package delivered,2019-11-27 13:33:44.000Z, , , ,"['660694']", ,1.36,159.98 +12041.0,place order,2019-11-27 13:37:03.000Z, ,"['884524','884523']","['991114']", , ,1.463,214.98 +12042.0,failed delivery,2019-11-27 13:37:33.000Z, , , ,"['660706']", ,10.735,13544.96 +12043.0,pay order,2019-11-27 13:45:46.000Z, , ,"['991103']", , ,0.693,613.99 +12044.0,pick item,2019-11-27 13:53:24.000Z, ,"['884219']", , , ,0.483,1099.0 +12045.0,package delivered,2019-11-27 14:08:36.000Z, , , ,"['660700']", ,1.18,169.98 +12046.0,send package,2019-11-27 14:09:54.000Z, , , ,"['660707']", ,0.166,799.0 +12047.0,pay order,2019-11-27 14:10:46.000Z, , ,"['991076']", , ,3.133,3753.99 +12048.0,pay order,2019-11-27 14:18:28.000Z, , ,"['990878']", , ,6.772,4850.95 +12049.0,send package,2019-11-27 14:20:30.000Z, , , ,"['660708']", ,5.787999999999999,5457.95 +12050.0,pick item,2019-11-27 14:29:17.000Z, ,"['884503']", , , ,1.25,2200.0 +12051.0,pick item,2019-11-27 14:34:10.000Z, ,"['884504']", , , ,0.28,89.99 +12052.0,pick item,2019-11-27 14:42:02.000Z, ,"['884512']", , , ,0.495,129.0 +12053.0,package delivered,2019-11-27 14:51:15.000Z, , , ,"['660698']", ,1.479,2042.99 +12054.0,payment reminder,2019-11-27 14:57:19.000Z, , ,"['990991']", , ,2.146,2511.99 +12055.0,pick item,2019-11-27 15:04:30.000Z, ,"['884167']", , , ,0.172,699.0 +12056.0,pay order,2019-11-27 15:13:12.000Z, , ,"['991023']", , ,0.863,529.99 +12057.0,pick item,2019-11-27 15:17:16.000Z, ,"['884415']", , , ,0.2,39.99 +12058.0,item out of stock,2019-11-27 15:23:04.000Z, ,"['884522']", , , ,0.483,1099.0 +12059.0,confirm order,2019-11-27 15:25:06.000Z, , ,"['991114']", , ,1.463,214.98 +12060.0,package delivered,2019-11-27 15:31:55.000Z, , , ,"['660704']", ,1.63,2229.99 +12061.0,place order,2019-11-27 15:33:54.000Z, ,"['884527','884525','884526']","['991115']", , ,2.255,363.98 +12062.0,pick item,2019-11-27 15:34:22.000Z, ,"['884462']", , , ,0.78,99.99 +12063.0,failed delivery,2019-11-27 15:35:04.000Z, , , ,"['660699']", ,4.9910000000000005,5324.99 +12064.0,item out of stock,2019-11-27 15:41:00.000Z, ,"['884437']", , , ,0.483,1099.0 +12065.0,pick item,2019-11-27 15:49:04.000Z, ,"['884501']", , , ,0.28,89.99 +12066.0,create package,2019-11-27 15:49:04.000Z, ,"['884482','884078','884272','884481','884471','884321','884479','884177']", ,"['660709']", ,3.885,3875.96 +12067.0,reorder item,2019-11-27 15:51:36.000Z, ,"['884414']", , , ,0.2,39.99 +12068.0,reorder item,2019-11-27 15:56:54.000Z, ,"['884412']", , , ,0.28,89.99 +12069.0,reorder item,2019-11-27 15:57:36.000Z, ,"['884478']", , , ,0.21,529.0 +12070.0,item out of stock,2019-11-27 16:01:00.000Z, ,"['884491']", , , ,0.483,495.0 +12071.0,pick item,2019-11-27 16:04:04.000Z, ,"['884445']", , , ,0.166,799.0 +12072.0,pick item,2019-11-27 16:10:43.000Z, ,"['884507']", , , ,0.483,495.0 +12073.0,reorder item,2019-11-27 16:12:03.000Z, ,"['884405']", , , ,0.28,449.0 +12074.0,reorder item,2019-11-27 16:18:17.000Z, ,"['884399']", , , ,0.172,699.0 +12075.0,pick item,2019-11-27 16:22:51.000Z, ,"['884399']", , , ,0.172,699.0 +12076.0,pick item,2019-11-27 16:30:58.000Z, ,"['884497']", , , ,1.28,149.99 +12077.0,item out of stock,2019-11-27 16:32:43.000Z, ,"['884518']", , , ,1.48,199.99 +12078.0,reorder item,2019-11-27 17:12:09.000Z, ,"['884522']", , , ,0.483,1099.0 +12079.0,send package,2019-11-27 17:12:58.000Z, , , ,"['660705']", ,4.085,4557.96 +12080.0,pick item,2019-11-27 17:13:05.000Z, ,"['884430']", , , ,0.2,39.99 +12081.0,item out of stock,2019-11-27 17:15:57.000Z, ,"['884515']", , , ,0.2,39.99 +12082.0,place order,2019-11-27 17:27:35.000Z, ,"['884537','884536','884534','884530','884533','884528','884532','884531','884529','884535']","['991116']", , ,5.03,10394.99 +12083.0,pick item,2019-11-27 17:27:41.000Z, ,"['884495']", , , ,0.38,29.99 +12084.0,send package,2019-11-27 17:30:19.000Z, , , ,"['660709']", ,3.885,3875.96 +12085.0,package delivered,2019-11-27 17:31:57.000Z, , , ,"['660705']", ,4.085,4557.96 +12086.0,item out of stock,2019-11-27 17:53:42.000Z, ,"['884506']", , , ,0.21,529.0 +12087.0,pay order,2019-11-27 18:32:36.000Z, , ,"['991110']", , ,0.78,104.99 +12088.0,place order,2019-11-27 20:02:20.000Z, ,"['884538','884541','884539','884540']","['991117']", , ,2.272,1369.98 +12089.0,package delivered,2019-11-27 20:10:44.000Z, , , ,"['660708']", ,5.787999999999999,5457.95 +12090.0,item out of stock,2019-11-27 20:32:44.000Z, ,"['884421']", , , ,1.25,2200.0 +12091.0,pick item,2019-11-27 21:12:09.000Z, ,"['884530']", , , ,0.188,1149.0 +12092.0,place order,2019-11-28 01:31:54.000Z, ,"['884542','884544','884543']","['991118']", , ,2.56,334.97 +12093.0,package delivered,2019-11-28 07:21:21.000Z, , , ,"['660703']", ,5.232,4583.97 +12094.0,pick item,2019-11-28 07:30:19.000Z, ,"['884470']", , , ,0.38,29.99 +12095.0,create package,2019-11-28 07:30:19.000Z, ,"['884400','884396','884386','884404','884468','884389','884369','883840','884470','884467','884466','884469','884399','884387']", ,"['660710']", ,7.811,4536.92 +12096.0,item out of stock,2019-11-28 07:38:13.000Z, ,"['884532']", , , ,1.37,2500.0 +12097.0,pick item,2019-11-28 07:46:15.000Z, ,"['884472']", , , ,0.21,529.0 +12098.0,pick item,2019-11-28 08:02:29.000Z, ,"['884406']", , , ,1.48,199.99 +12099.0,pick item,2019-11-28 08:09:20.000Z, ,"['884176']", , , ,0.44,476.0 +12100.0,package delivered,2019-11-28 08:12:30.000Z, , , ,"['660707']", ,0.166,799.0 +12101.0,confirm order,2019-11-28 08:14:53.000Z, , ,"['991111']", , ,0.48,134.98 +12102.0,pick item,2019-11-28 08:18:57.000Z, ,"['884483']", , , ,0.21,529.0 +12103.0,pick item,2019-11-28 08:26:08.000Z, ,"['884254']", , , ,0.21,529.0 +12104.0,package delivered,2019-11-28 08:34:34.000Z, , , ,"['660701']", ,6.761,3742.95 +12105.0,pick item,2019-11-28 08:35:44.000Z, ,"['884543']", , , ,0.88,89.99 +12106.0,reorder item,2019-11-28 08:36:28.000Z, ,"['884494']", , , ,0.172,699.0 +12107.0,pick item,2019-11-28 08:38:53.000Z, ,"['884537']", , , ,0.166,799.0 +12108.0,failed delivery,2019-11-28 08:45:08.000Z, , , ,"['660709']", ,3.885,3875.96 +12109.0,place order,2019-11-28 08:48:53.000Z, ,"['884546','884547','884545']","['991119']", , ,2.24,2833.99 +12110.0,confirm order,2019-11-28 08:51:40.000Z, , ,"['991115']", , ,2.255,363.98 +12111.0,payment reminder,2019-11-28 08:52:40.000Z, , ,"['990999']", , ,1.152,833.99 +12112.0,pick item,2019-11-28 08:56:55.000Z, ,"['884516']", , , ,0.166,799.0 +12113.0,reorder item,2019-11-28 08:57:18.000Z, ,"['884515']", , , ,0.2,39.99 +12114.0,failed delivery,2019-11-28 09:03:05.000Z, , , ,"['660706']", ,10.735,13544.96 +12115.0,pick item,2019-11-28 09:10:41.000Z, ,"['884539']", , , ,0.88,89.99 +12116.0,confirm order,2019-11-28 09:16:15.000Z, , ,"['991117']", , ,2.272,1369.98 +12117.0,pick item,2019-11-28 09:29:40.000Z, ,"['884312']", , , ,1.48,199.99 +12118.0,pick item,2019-11-28 09:31:36.000Z, ,"['884473']", , , ,0.172,699.0 +12119.0,pick item,2019-11-28 09:35:03.000Z, ,"['884360']", , , ,0.2,39.99 +12120.0,package delivered,2019-11-28 09:42:55.000Z, , , ,"['660699']", ,4.9910000000000005,5324.99 +12121.0,pick item,2019-11-28 09:42:59.000Z, ,"['884540']", , , ,0.78,99.99 +12122.0,reorder item,2019-11-28 09:44:52.000Z, ,"['884491']", , , ,0.483,495.0 +12123.0,pick item,2019-11-28 09:59:55.000Z, ,"['884125']", , , ,0.483,1099.0 +12124.0,create package,2019-11-28 09:59:55.000Z, ,"['884219','884395','884391','884543','883919','884394']", ,"['660711']", ,4.165,4966.98 +12125.0,pay order,2019-11-28 10:14:48.000Z, , ,"['990983']", , ,2.13,2294.99 +12126.0,confirm order,2019-11-28 10:20:15.000Z, , ,"['991098']", , ,7.271,7581.96 +12127.0,pick item,2019-11-28 10:31:55.000Z, ,"['884546']", , , ,0.21,529.0 +12128.0,confirm order,2019-11-28 10:35:04.000Z, , ,"['991118']", , ,2.56,334.97 +12129.0,place order,2019-11-28 10:57:33.000Z, ,"['884548','884550','884549','884553','884555','884551','884554','884552']","['991120']", , ,5.25,3533.94 +12130.0,pick item,2019-11-28 11:04:37.000Z, ,"['884513']", , , ,0.495,129.0 +12131.0,pick item,2019-11-28 11:13:19.000Z, ,"['884536']", , , ,0.21,529.0 +12132.0,send package,2019-11-28 11:21:14.000Z, , , ,"['660711']", ,4.165,4966.98 +12133.0,package delivered,2019-11-28 11:23:07.000Z, , , ,"['660706']", ,10.735,13544.96 +12134.0,pay order,2019-11-28 11:28:31.000Z, , ,"['990991']", , ,2.146,2511.99 +12135.0,item out of stock,2019-11-28 11:34:37.000Z, ,"['884521']", , , ,1.37,2500.0 +12136.0,failed delivery,2019-11-28 11:58:00.000Z, , , ,"['660711']", ,4.165,4966.98 +12137.0,pay order,2019-11-28 12:17:14.000Z, , ,"['991113']", , ,5.5760000000000005,4588.97 +12138.0,item out of stock,2019-11-28 12:42:38.000Z, ,"['884499']", , , ,0.28,89.99 +12139.0,item out of stock,2019-11-28 12:56:51.000Z, ,"['884545']", , , ,0.78,99.99 +12140.0,pick item,2019-11-28 13:03:13.000Z, ,"['884509']", , , ,0.172,699.0 +12141.0,reorder item,2019-11-28 13:05:52.000Z, ,"['884532']", , , ,1.37,2500.0 +12142.0,pick item,2019-11-28 13:06:35.000Z, ,"['884425']", , , ,0.483,495.0 +12143.0,pay order,2019-11-28 13:12:03.000Z, , ,"['991114']", , ,1.463,214.98 +12144.0,place order,2019-11-28 13:14:54.000Z, ,"['884556','884558','884557','884560','884559']","['991121']", , ,4.574,7152.99 +12145.0,item out of stock,2019-11-28 13:17:21.000Z, ,"['884474']", , , ,0.21,529.0 +12146.0,pick item,2019-11-28 13:31:22.000Z, ,"['884556']", , , ,0.188,1149.0 +12147.0,create package,2019-11-28 13:31:22.000Z, ,"['884409','884430','884431','884406']", ,"['660712']", ,2.09,808.97 +12148.0,pick item,2019-11-28 14:01:33.000Z, ,"['884542']", , , ,1.48,199.99 +12149.0,pick item,2019-11-28 14:11:12.000Z, ,"['884515']", , , ,0.2,39.99 +12150.0,confirm order,2019-11-28 14:20:47.000Z, , ,"['991119']", , ,2.24,2833.99 +12151.0,pay order,2019-11-28 14:25:58.000Z, , ,"['990963']", , ,2.218,3773.98 +12152.0,pick item,2019-11-28 14:33:28.000Z, ,"['884552']", , , ,1.48,199.99 +12153.0,pay order,2019-11-28 14:35:13.000Z, , ,"['991051']", , ,1.743,663.98 +12154.0,pay order,2019-11-28 14:36:58.000Z, , ,"['991099']", , ,2.766,1215.97 +12155.0,pick item,2019-11-28 14:45:42.000Z, ,"['884477']", , , ,0.483,79.99 +12156.0,create package,2019-11-28 14:45:42.000Z, ,"['884167','884088','884473','884475']", ,"['660713']", ,2.119,1676.99 +12157.0,failed delivery,2019-11-28 14:49:10.000Z, , , ,"['660709']", ,3.885,3875.96 +12158.0,place order,2019-11-28 14:49:35.000Z, ,"['884564','884561','884562','884565','884563']","['991122']", , ,3.3,2182.97 +12159.0,pick item,2019-11-28 15:04:10.000Z, ,"['884385']", , , ,1.28,149.99 +12160.0,item out of stock,2019-11-28 15:22:16.000Z, ,"['884553']", , , ,1.37,2500.0 +12161.0,pick item,2019-11-28 15:22:21.000Z, ,"['884493']", , , ,0.483,1099.0 +12162.0,confirm order,2019-11-28 15:25:21.000Z, , ,"['991116']", , ,5.03,10394.99 +12163.0,pick item,2019-11-28 15:26:41.000Z, ,"['884541']", , , ,0.44,476.0 +12164.0,pay order,2019-11-28 15:27:48.000Z, , ,"['991115']", , ,2.255,363.98 +12165.0,pick item,2019-11-28 15:27:55.000Z, ,"['884528']", , , ,1.25,2200.0 +12166.0,create package,2019-11-28 15:27:55.000Z, ,"['884483','884500','884129','884485','884484']", ,"['660714']", ,4.53,1058.96 +12167.0,pick item,2019-11-28 15:31:50.000Z, ,"['884489']", , , ,0.2,39.99 +12168.0,reorder item,2019-11-28 15:44:40.000Z, ,"['884413']", , , ,1.28,149.99 +12169.0,pick item,2019-11-28 15:49:58.000Z, ,"['884519']", , , ,0.28,89.99 +12170.0,item out of stock,2019-11-28 15:52:18.000Z, ,"['884434']", , , ,0.21,529.0 +12171.0,pick item,2019-11-28 16:06:15.000Z, ,"['884549']", , , ,0.98,129.99 +12172.0,reorder item,2019-11-28 16:18:11.000Z, ,"['884474']", , , ,0.21,529.0 +12173.0,pick item,2019-11-28 16:18:33.000Z, ,"['884526']", , , ,0.78,99.99 +12174.0,pick item,2019-11-28 16:19:25.000Z, ,"['884071']", , , ,0.495,129.0 +12175.0,create package,2019-11-28 16:19:25.000Z, ,"['884224','884493','884292']", ,"['660715']", ,1.358,1257.99 +12176.0,send package,2019-11-28 16:25:42.000Z, , , ,"['660715']", ,1.358,1257.99 +12177.0,pick item,2019-11-28 16:33:14.000Z, ,"['884555']", , , ,0.28,89.99 +12178.0,item out of stock,2019-11-28 16:34:49.000Z, ,"['884524']", , , ,0.98,129.99 +12179.0,pick item,2019-11-28 16:37:53.000Z, ,"['884451']", , , ,1.37,2500.0 +12180.0,confirm order,2019-11-28 16:44:22.000Z, , ,"['991120']", , ,5.25,3533.94 +12181.0,reorder item,2019-11-28 16:53:04.000Z, ,"['884524']", , , ,0.98,129.99 +12182.0,pick item,2019-11-28 16:56:47.000Z, ,"['883855']", , , ,0.28,89.99 +12183.0,create package,2019-11-28 16:56:47.000Z, ,"['884237','884071']", ,"['660716']", ,0.978,624.0 +12184.0,place order,2019-11-28 16:58:57.000Z, ,"['884569','884567','884568','884570','884566']","['991123']", , ,3.15,2840.97 +12185.0,pick item,2019-11-28 17:00:53.000Z, ,"['884544']", , , ,0.2,39.99 +12186.0,item out of stock,2019-11-28 17:41:57.000Z, ,"['884548']", , , ,0.2,39.99 +12187.0,pick item,2019-11-28 17:43:29.000Z, ,"['884334']", , , ,0.483,1099.0 +12188.0,create package,2019-11-28 17:43:29.000Z, ,"['884101']", ,"['660717']", ,0.98,129.99 +12189.0,package delivered,2019-11-28 17:50:24.000Z, , , ,"['660711']", ,4.165,4966.98 +12190.0,item out of stock,2019-11-28 17:52:39.000Z, ,"['884533']", , , ,0.172,699.0 +12191.0,pick item,2019-11-28 17:58:56.000Z, ,"['884554']", , , ,0.28,449.0 +12192.0,create package,2019-11-28 17:58:56.000Z, ,"['884556','884537','883785','884530','884528','884312','884536']", ,"['660718']", ,4.732,8225.99 +12193.0,send package,2019-11-28 18:17:43.000Z, , , ,"['660713']", ,2.119,1676.99 +12194.0,place order,2019-11-28 19:36:26.000Z, ,"['884571']","['991124']", , ,0.38,34.99 +12195.0,send package,2019-11-28 20:08:33.000Z, , , ,"['660712']", ,2.09,808.97 +12196.0,send package,2019-11-28 20:52:41.000Z, , , ,"['660710']", ,7.811,4536.92 +12197.0,pick item,2019-11-28 20:54:33.000Z, ,"['884523']", , , ,0.483,79.99 +12198.0,place order,2019-11-28 23:56:30.000Z, ,"['884573','884574','884572','884575']","['991125']", , ,1.671,1841.99 +12199.0,pick item,2019-11-29 07:17:37.000Z, ,"['884560']", , , ,1.37,2500.0 +12200.0,item out of stock,2019-11-29 07:38:46.000Z, ,"['884505']", , , ,0.88,89.99 +12201.0,reorder item,2019-11-29 07:58:31.000Z, ,"['884505']", , , ,0.88,89.99 +12202.0,failed delivery,2019-11-29 08:00:48.000Z, , , ,"['660709']", ,3.885,3875.96 +12203.0,package delivered,2019-11-29 08:19:55.000Z, , , ,"['660713']", ,2.119,1676.99 +12204.0,pick item,2019-11-29 08:27:23.000Z, ,"['884510']", , , ,0.44,476.0 +12205.0,pay order,2019-11-29 08:32:20.000Z, , ,"['991105']", , ,2.77,833.98 +12206.0,item out of stock,2019-11-29 08:37:27.000Z, ,"['884450']", , , ,0.2,39.99 +12207.0,pick item,2019-11-29 08:38:03.000Z, ,"['884496']", , , ,0.28,89.99 +12208.0,pick item,2019-11-29 08:44:46.000Z, ,"['884534']", , , ,0.166,799.0 +12209.0,send package,2019-11-29 08:53:15.000Z, , , ,"['660714']", ,4.53,1058.96 +12210.0,reorder item,2019-11-29 08:54:18.000Z, ,"['884416']", , , ,0.78,99.99 +12211.0,place order,2019-11-29 09:03:57.000Z, ,"['884578','884579','884581','884576','884577','884580']","['991126']", , ,3.198,4272.97 +12212.0,pay order,2019-11-29 09:03:59.000Z, , ,"['991057']", , ,4.623,3828.98 +12213.0,reorder item,2019-11-29 09:11:35.000Z, ,"['884499']", , , ,0.28,89.99 +12214.0,reorder item,2019-11-29 09:15:39.000Z, ,"['884521']", , , ,1.37,2500.0 +12215.0,pick item,2019-11-29 09:16:17.000Z, ,"['884517']", , , ,1.48,199.99 +12216.0,reorder item,2019-11-29 09:17:15.000Z, ,"['884533']", , , ,0.172,699.0 +12217.0,pick item,2019-11-29 09:18:28.000Z, ,"['884564']", , , ,1.28,149.99 +12218.0,create package,2019-11-29 09:18:28.000Z, ,"['884555','884549','884554','884552','884564','884501','884486','884489','884502','884490']", ,"['660719']", ,6.64,1368.91 +12219.0,pick item,2019-11-29 09:21:35.000Z, ,"['884405']", , , ,0.28,449.0 +12220.0,pick item,2019-11-29 09:27:17.000Z, ,"['884581']", , , ,0.2,39.99 +12221.0,pick item,2019-11-29 09:38:57.000Z, ,"['884423']", , , ,0.21,529.0 +12222.0,pick item,2019-11-29 09:41:00.000Z, ,"['884172']", , , ,0.483,1099.0 +12223.0,pay order,2019-11-29 09:41:38.000Z, , ,"['991098']", , ,7.271,7581.96 +12224.0,failed delivery,2019-11-29 10:02:46.000Z, , , ,"['660712']", ,2.09,808.97 +12225.0,pay order,2019-11-29 10:07:03.000Z, , ,"['991079']", , ,3.817,4816.96 +12226.0,package delivered,2019-11-29 10:09:09.000Z, , , ,"['660715']", ,1.358,1257.99 +12227.0,package delivered,2019-11-29 10:18:17.000Z, , , ,"['660709']", ,3.885,3875.96 +12228.0,pick item,2019-11-29 10:23:05.000Z, ,"['884563']", , , ,1.28,149.99 +12229.0,place order,2019-11-29 10:27:41.000Z, ,"['884583','884587','884588','884584','884585','884586','884582']","['991127']", , ,3.833,3136.98 +12230.0,confirm order,2019-11-29 10:29:37.000Z, , ,"['991121']", , ,4.574,7152.99 +12231.0,reorder item,2019-11-29 10:30:54.000Z, ,"['884545']", , , ,0.78,99.99 +12232.0,package delivered,2019-11-29 10:41:08.000Z, , , ,"['660710']", ,7.811,4536.92 +12233.0,pick item,2019-11-29 10:46:28.000Z, ,"['884566']", , , ,0.44,476.0 +12234.0,pay order,2019-11-29 10:47:10.000Z, , ,"['991091']", , ,2.426,1758.97 +12235.0,send package,2019-11-29 10:48:39.000Z, , , ,"['660717']", ,0.98,129.99 +12236.0,pick item,2019-11-29 10:48:41.000Z, ,"['884569']", , , ,0.38,29.99 +12237.0,pick item,2019-11-29 10:56:27.000Z, ,"['884514']", , , ,0.28,89.99 +12238.0,send package,2019-11-29 11:03:57.000Z, , , ,"['660718']", ,4.732,8225.99 +12239.0,reorder item,2019-11-29 11:20:44.000Z, ,"['884553']", , , ,1.37,2500.0 +12240.0,item out of stock,2019-11-29 11:31:31.000Z, ,"['884573']", , , ,0.483,1099.0 +12241.0,pick item,2019-11-29 11:40:54.000Z, ,"['884073']", , , ,0.495,129.0 +12242.0,place order,2019-11-29 12:15:09.000Z, ,"['884590','884591','884589']","['991128']", , ,0.6459999999999999,1292.99 +12243.0,confirm order,2019-11-29 12:30:18.000Z, , ,"['991125']", , ,1.671,1841.99 +12244.0,pick item,2019-11-29 12:32:45.000Z, ,"['884545']", , , ,0.78,99.99 +12245.0,create package,2019-11-29 12:32:45.000Z, ,"['884439']", ,"['660720']", ,1.28,149.99 +12246.0,pick item,2019-11-29 13:09:44.000Z, ,"['884505']", , , ,0.88,89.99 +12247.0,create package,2019-11-29 13:09:44.000Z, ,"['884541','884540','884415','884539','884477','884497','884419','884498']", ,"['660721']", ,4.553,1554.94 +12248.0,pick item,2019-11-29 13:20:46.000Z, ,"['884590']", , , ,0.2,39.99 +12249.0,pick item,2019-11-29 13:24:27.000Z, ,"['884550']", , , ,0.38,29.99 +12250.0,pick item,2019-11-29 13:26:20.000Z, ,"['884558']", , , ,1.48,199.99 +12251.0,pick item,2019-11-29 13:31:17.000Z, ,"['884588']", , , ,0.44,476.0 +12252.0,pick item,2019-11-29 13:36:38.000Z, ,"['884535']", , , ,0.88,89.99 +12253.0,failed delivery,2019-11-29 13:37:09.000Z, , , ,"['660718']", ,4.732,8225.99 +12254.0,pick item,2019-11-29 13:49:43.000Z, ,"['884585']", , , ,1.48,199.99 +12255.0,place order,2019-11-29 13:50:06.000Z, ,"['884592','884593','884594']","['991129']", , ,0.8809999999999999,1762.99 +12256.0,failed delivery,2019-11-29 13:53:57.000Z, , , ,"['660718']", ,4.732,8225.99 +12257.0,pay order,2019-11-29 14:01:33.000Z, , ,"['991120']", , ,5.25,3533.94 +12258.0,pay order,2019-11-29 14:06:21.000Z, , ,"['991108']", , ,0.8320000000000001,823.98 +12259.0,item out of stock,2019-11-29 14:13:20.000Z, ,"['884446']", , , ,1.37,2500.0 +12260.0,reorder item,2019-11-29 14:35:30.000Z, ,"['884446']", , , ,1.37,2500.0 +12261.0,reorder item,2019-11-29 14:49:53.000Z, ,"['884518']", , , ,1.48,199.99 +12262.0,pay order,2019-11-29 14:52:52.000Z, , ,"['991118']", , ,2.56,334.97 +12263.0,pick item,2019-11-29 15:01:33.000Z, ,"['884580']", , , ,0.78,99.99 +12264.0,send package,2019-11-29 15:03:49.000Z, , , ,"['660720']", ,1.28,149.99 +12265.0,reorder item,2019-11-29 15:12:41.000Z, ,"['884437']", , , ,0.483,1099.0 +12266.0,package delivered,2019-11-29 15:16:01.000Z, , , ,"['660712']", ,2.09,808.97 +12267.0,item out of stock,2019-11-29 15:27:45.000Z, ,"['884487']", , , ,0.21,529.0 +12268.0,pick item,2019-11-29 15:28:24.000Z, ,"['884592']", , , ,0.483,79.99 +12269.0,create package,2019-11-29 15:28:24.000Z, ,"['884423','884495','884424','884496']", ,"['660722']", ,2.24,3148.98 +12270.0,confirm order,2019-11-29 15:32:09.000Z, , ,"['991124']", , ,0.38,34.99 +12271.0,send package,2019-11-29 15:43:27.000Z, , , ,"['660721']", ,4.553,1554.94 +12272.0,pick item,2019-11-29 15:44:00.000Z, ,"['884589']", , , ,0.28,449.0 +12273.0,pick item,2019-11-29 15:50:08.000Z, ,"['884491']", , , ,0.483,495.0 +12274.0,pick item,2019-11-29 15:59:47.000Z, ,"['884492']", , , ,0.88,89.99 +12275.0,place order,2019-11-29 15:59:59.000Z, ,"['884595','884599','884596','884600','884602','884597','884601','884598']","['991130']", , ,5.283,3912.95 +12276.0,item out of stock,2019-11-29 16:11:45.000Z, ,"['884594']", , , ,0.21,529.0 +12277.0,reorder item,2019-11-29 16:13:05.000Z, ,"['884366']", , , ,0.483,1099.0 +12278.0,pick item,2019-11-29 16:26:07.000Z, ,"['884571']", , , ,0.38,29.99 +12279.0,create package,2019-11-29 16:26:07.000Z, ,"['884515','884505','884425','884514','884507','884512','884509','884516','884510','884513','884334','884504','884526','884503']", ,"['660723']", ,6.8870000000000005,6930.95 +12280.0,pick item,2019-11-29 16:29:11.000Z, ,"['884551']", , , ,0.28,89.99 +12281.0,send package,2019-11-29 16:33:19.000Z, , , ,"['660723']", ,6.8870000000000005,6930.95 +12282.0,reorder item,2019-11-29 16:34:33.000Z, ,"['884434']", , , ,0.21,529.0 +12283.0,reorder item,2019-11-29 16:46:43.000Z, ,"['884450']", , , ,0.2,39.99 +12284.0,confirm order,2019-11-29 16:56:26.000Z, , ,"['991129']", , ,0.8809999999999999,1762.99 +12285.0,send package,2019-11-29 17:07:57.000Z, , , ,"['660722']", ,2.24,3148.98 +12286.0,pick item,2019-11-29 17:57:45.000Z, ,"['884570']", , , ,0.88,89.99 +12287.0,reorder item,2019-11-29 17:58:37.000Z, ,"['884594']", , , ,0.21,529.0 +12288.0,send package,2019-11-29 18:13:04.000Z, , , ,"['660716']", ,0.978,624.0 +12289.0,place order,2019-11-29 18:19:46.000Z, ,"['884603','884605','884604']","['991131']", , ,2.516,3433.99 +12290.0,package delivered,2019-11-29 18:36:36.000Z, , , ,"['660720']", ,1.28,149.99 +12291.0,confirm order,2019-11-29 19:40:55.000Z, , ,"['991122']", , ,3.3,2182.97 +12292.0,pick item,2019-11-29 20:45:36.000Z, ,"['884582']", , , ,0.483,1099.0 +12293.0,place order,2019-11-29 21:19:06.000Z, ,"['884607','884608','884606']","['991132']", , ,1.89,773.98 +12294.0,failed delivery,2019-11-29 21:35:05.000Z, , , ,"['660718']", ,4.732,8225.99 +12295.0,place order,2019-11-30 15:54:30.000Z, ,"['884609','884611','884610']","['991133']", , ,1.3259999999999998,933.98 +12296.0,payment reminder,2019-11-30 19:32:56.000Z, , ,"['990890']", , ,2.74,424.97 +12297.0,create package,2019-11-30 23:00:00.000Z, ,"['884445','884462']", ,"['660724']", ,0.946,898.99 +12298.0,payment reminder,2019-12-01 09:45:53.000Z, , ,"['991009']", , ,2.613,3578.98 +12299.0,place order,2019-12-01 16:42:55.000Z, ,"['884613','884615','884614','884612']","['991134']", , ,3.275,5899.0 +12300.0,confirm order,2019-12-02 07:42:46.000Z, , ,"['991093']", , ,6.412999999999999,7385.97 +12301.0,pick item,2019-12-02 07:43:25.000Z, ,"['884371']", , , ,0.188,1149.0 +12302.0,item out of stock,2019-12-02 07:50:44.000Z, ,"['884520']", , , ,0.483,495.0 +12303.0,pick item,2019-12-02 07:59:12.000Z, ,"['884511']", , , ,0.172,699.0 +12304.0,place order,2019-12-02 08:05:52.000Z, ,"['884617','884616','884618']","['991135']", , ,2.185,2810.0 +12305.0,pick item,2019-12-02 08:11:55.000Z, ,"['884604']", , , ,1.37,2500.0 +12306.0,pick item,2019-12-02 08:15:22.000Z, ,"['884433']", , , ,0.188,1149.0 +12307.0,pick item,2019-12-02 08:22:52.000Z, ,"['884606']", , , ,0.2,39.99 +12308.0,pick item,2019-12-02 08:23:12.000Z, ,"['884587']", , , ,0.495,129.0 +12309.0,pick item,2019-12-02 08:26:59.000Z, ,"['884584']", , , ,0.172,699.0 +12310.0,reorder item,2019-12-02 08:29:45.000Z, ,"['884548']", , , ,0.2,39.99 +12311.0,pay order,2019-12-02 08:38:32.000Z, , ,"['990997']", , ,2.885,3113.98 +12312.0,pick item,2019-12-02 08:40:47.000Z, ,"['884579']", , , ,0.188,1149.0 +12313.0,payment reminder,2019-12-02 08:40:51.000Z, , ,"['991014']", , ,5.751,3872.96 +12314.0,confirm order,2019-12-02 08:49:51.000Z, , ,"['991128']", , ,0.6459999999999999,1292.99 +12315.0,package delivered,2019-12-02 08:52:44.000Z, , , ,"['660722']", ,2.24,3148.98 +12316.0,reorder item,2019-12-02 09:01:52.000Z, ,"['884520']", , , ,0.483,495.0 +12317.0,pick item,2019-12-02 09:05:17.000Z, ,"['884557']", , , ,0.166,799.0 +12318.0,confirm order,2019-12-02 09:07:21.000Z, , ,"['991134']", , ,3.275,5899.0 +12319.0,pick item,2019-12-02 09:10:32.000Z, ,"['884578']", , , ,0.28,449.0 +12320.0,package delivered,2019-12-02 09:22:54.000Z, , , ,"['660718']", ,4.732,8225.99 +12321.0,confirm order,2019-12-02 09:23:33.000Z, , ,"['991135']", , ,2.185,2810.0 +12322.0,confirm order,2019-12-02 09:25:32.000Z, , ,"['991126']", , ,3.198,4272.97 +12323.0,send package,2019-12-02 09:26:50.000Z, , , ,"['660724']", ,0.946,898.99 +12324.0,confirm order,2019-12-02 09:28:31.000Z, , ,"['991127']", , ,3.833,3136.98 +12325.0,place order,2019-12-02 09:31:32.000Z, ,"['884622','884619','884621','884620']","['991136']", , ,1.273,1098.98 +12326.0,reorder item,2019-12-02 09:35:38.000Z, ,"['884506']", , , ,0.21,529.0 +12327.0,send package,2019-12-02 09:47:31.000Z, , , ,"['660719']", ,6.64,1368.91 +12328.0,failed delivery,2019-12-02 09:50:33.000Z, , , ,"['660719']", ,6.64,1368.91 +12329.0,payment reminder,2019-12-02 09:55:38.000Z, , ,"['990996']", , ,5.919,4572.96 +12330.0,confirm order,2019-12-02 09:58:48.000Z, , ,"['991131']", , ,2.516,3433.99 +12331.0,pick item,2019-12-02 10:04:25.000Z, ,"['884598']", , , ,0.88,89.99 +12332.0,pick item,2019-12-02 10:12:39.000Z, ,"['884608']", , , ,1.48,199.99 +12333.0,pick item,2019-12-02 10:12:47.000Z, ,"['884612']", , , ,0.483,495.0 +12334.0,create package,2019-12-02 10:12:47.000Z, ,"['884176','884472','884073','884254','884360']", ,"['660725']", ,1.555,1702.99 +12335.0,pick item,2019-12-02 10:34:00.000Z, ,"['884527']", , , ,0.495,129.0 +12336.0,package delivered,2019-12-02 10:43:57.000Z, , , ,"['660721']", ,4.553,1554.94 +12337.0,package delivered,2019-12-02 10:51:20.000Z, , , ,"['660719']", ,6.64,1368.91 +12338.0,reorder item,2019-12-02 11:01:50.000Z, ,"['884421']", , , ,1.25,2200.0 +12339.0,pick item,2019-12-02 11:03:27.000Z, ,"['884336']", , , ,0.44,476.0 +12340.0,package delivered,2019-12-02 11:05:32.000Z, , , ,"['660717']", ,0.98,129.99 +12341.0,pick item,2019-12-02 11:09:15.000Z, ,"['884575']", , , ,0.495,129.0 +12342.0,pay order,2019-12-02 11:12:22.000Z, , ,"['991128']", , ,0.6459999999999999,1292.99 +12343.0,pick item,2019-12-02 11:14:28.000Z, ,"['884559']", , , ,1.37,2500.0 +12344.0,pick item,2019-12-02 11:16:12.000Z, ,"['884621']", , , ,0.2,39.99 +12345.0,create package,2019-12-02 11:16:12.000Z, ,"['884590','884589','884582','884125','884585','884587','884588','884584']", ,"['660726']", ,4.033,4190.98 +12346.0,reorder item,2019-12-02 11:18:43.000Z, ,"['884488']", , , ,0.2,39.99 +12347.0,pay order,2019-12-02 11:19:41.000Z, , ,"['991014']", , ,5.751,3872.96 +12348.0,place order,2019-12-02 11:22:51.000Z, ,"['884624','884623','884628','884626','884627','884625']","['991137']", , ,5.348,6223.97 +12349.0,package delivered,2019-12-02 11:51:26.000Z, , , ,"['660724']", ,0.946,898.99 +12350.0,pick item,2019-12-02 11:51:30.000Z, ,"['884576']", , , ,1.37,2500.0 +12351.0,pay order,2019-12-02 12:04:27.000Z, , ,"['991100']", , ,0.42,1063.0 +12352.0,pay order,2019-12-02 12:28:03.000Z, , ,"['990917']", , ,2.555,383.98 +12353.0,package delivered,2019-12-02 12:48:30.000Z, , , ,"['660714']", ,4.53,1058.96 +12354.0,pick item,2019-12-02 12:56:50.000Z, ,"['884190']", , , ,0.166,799.0 +12355.0,place order,2019-12-02 13:05:30.000Z, ,"['884630','884632','884631','884637','884629','884636','884634','884633','884635']","['991138']", , ,3.177,8008.98 +12356.0,payment reminder,2019-12-02 13:11:36.000Z, , ,"['991022']", , ,1.02,550.98 +12357.0,package delivered,2019-12-02 13:19:11.000Z, , , ,"['660723']", ,6.8870000000000005,6930.95 +12358.0,pick item,2019-12-02 13:23:11.000Z, ,"['884600']", , , ,0.483,79.99 +12359.0,pick item,2019-12-02 13:25:23.000Z, ,"['884553']", , , ,1.37,2500.0 +12360.0,pick item,2019-12-02 13:34:09.000Z, ,"['884627']", , , ,1.37,2500.0 +12361.0,pick item,2019-12-02 13:34:29.000Z, ,"['884625']", , , ,1.25,2200.0 +12362.0,payment reminder,2019-12-02 13:38:50.000Z, , ,"['991016']", , ,1.629,2032.99 +12363.0,pick item,2019-12-02 13:57:39.000Z, ,"['884583']", , , ,0.483,79.99 +12364.0,pick item,2019-12-02 13:58:20.000Z, ,"['884520']", , , ,0.483,495.0 +12365.0,create package,2019-12-02 13:58:20.000Z, ,"['884542','884544','884545','884517','884546','884519','884451','884520','884612']", ,"['660727']", ,6.766,4648.95 +12366.0,pick item,2019-12-02 14:01:56.000Z, ,"['884611']", , , ,0.38,29.99 +12367.0,pick item,2019-12-02 14:02:07.000Z, ,"['884574']", , , ,0.21,529.0 +12368.0,pick item,2019-12-02 14:13:51.000Z, ,"['884635']", , , ,0.21,529.0 +12369.0,pick item,2019-12-02 14:23:31.000Z, ,"['884524']", , , ,0.98,129.99 +12370.0,confirm order,2019-12-02 14:24:47.000Z, , ,"['991136']", , ,1.273,1098.98 +12371.0,place order,2019-12-02 14:30:47.000Z, ,"['884638']","['991139']", , ,0.98,134.99 +12372.0,pick item,2019-12-02 14:36:28.000Z, ,"['884591']", , , ,0.166,799.0 +12373.0,send package,2019-12-02 14:43:35.000Z, , , ,"['660726']", ,4.033,4190.98 +12374.0,confirm order,2019-12-02 15:04:35.000Z, , ,"['991132']", , ,1.89,773.98 +12375.0,send package,2019-12-02 15:15:35.000Z, , , ,"['660725']", ,1.555,1702.99 +12376.0,pick item,2019-12-02 15:19:47.000Z, ,"['884565']", , , ,0.38,29.99 +12377.0,payment reminder,2019-12-02 15:38:48.000Z, , ,"['991020']", , ,0.763,949.0 +12378.0,item out of stock,2019-12-02 15:39:01.000Z, ,"['884508']", , , ,0.28,89.99 +12379.0,pick item,2019-12-02 15:48:58.000Z, ,"['884616']", , , ,1.25,2200.0 +12380.0,pick item,2019-12-02 15:54:10.000Z, ,"['884568']", , , ,0.2,39.99 +12381.0,send package,2019-12-02 16:03:12.000Z, , , ,"['660727']", ,6.766,4648.95 +12382.0,confirm order,2019-12-02 16:03:43.000Z, , ,"['991137']", , ,5.348,6223.97 +12383.0,pick item,2019-12-02 16:16:37.000Z, ,"['883808']", , , ,0.44,476.0 +12384.0,create package,2019-12-02 16:16:37.000Z, ,"['884568','884570','884574','884566','884575','884569','884385']", ,"['660728']", ,3.885,1443.96 +12385.0,place order,2019-12-02 16:21:21.000Z, ,"['884639','884641','884645','884643','884644','884642','884640']","['991140']", , ,4.468,4226.98 +12386.0,pick item,2019-12-02 16:30:31.000Z, ,"['884613']", , , ,1.37,2500.0 +12387.0,pick item,2019-12-02 16:51:46.000Z, ,"['884641']", , , ,0.78,99.99 +12388.0,pick item,2019-12-02 16:52:10.000Z, ,"['884412']", , , ,0.28,89.99 +12389.0,pick item,2019-12-02 16:56:11.000Z, ,"['884586']", , , ,0.28,449.0 +12390.0,pick item,2019-12-02 17:05:29.000Z, ,"['884634']", , , ,0.172,699.0 +12391.0,item out of stock,2019-12-02 17:33:32.000Z, ,"['884602']", , , ,0.2,39.99 +12392.0,confirm order,2019-12-02 17:38:37.000Z, , ,"['991123']", , ,3.15,2840.97 +12393.0,pick item,2019-12-02 17:39:12.000Z, ,"['884617']", , , ,0.44,476.0 +12394.0,pick item,2019-12-02 17:45:21.000Z, ,"['884562']", , , ,0.172,699.0 +12395.0,create package,2019-12-02 17:45:21.000Z, ,"['884405','883855','884412']", ,"['660729']", ,0.84,628.98 +12396.0,place order,2019-12-02 18:02:30.000Z, ,"['884646','884648','884647']","['991141']", , ,2.54,394.97 +12397.0,failed delivery,2019-12-02 19:16:01.000Z, , , ,"['660716']", ,0.978,624.0 +12398.0,pick item,2019-12-02 19:46:27.000Z, ,"['884622']", , , ,0.38,29.99 +12399.0,pay order,2019-12-02 20:20:15.000Z, , ,"['990984']", , ,2.129,2092.98 +12400.0,place order,2019-12-02 20:44:35.000Z, ,"['884650','884649']","['991142']", , ,2.15,2604.99 +12401.0,confirm order,2019-12-02 21:06:38.000Z, , ,"['991139']", , ,0.98,134.99 +12402.0,place order,2019-12-03 05:45:24.000Z, ,"['884653','884652','884651']","['991143']", , ,1.485,392.0 +12403.0,payment reminder,2019-12-03 07:44:31.000Z, , ,"['991010']", , ,4.21,5148.97 +12404.0,pick item,2019-12-03 07:51:11.000Z, ,"['884529']", , , ,0.44,476.0 +12405.0,pick item,2019-12-03 07:57:46.000Z, ,"['884620']", , , ,0.21,529.0 +12406.0,create package,2019-12-03 07:57:46.000Z, ,"['884557','884534','884523','884529','884559','884592','884558','884560','884535','884524']", ,"['660730']", ,7.818,7653.95 +12407.0,reorder item,2019-12-03 07:58:16.000Z, ,"['884573']", , , ,0.483,1099.0 +12408.0,failed delivery,2019-12-03 08:06:00.000Z, , , ,"['660725']", ,1.555,1702.99 +12409.0,pay order,2019-12-03 08:10:36.000Z, , ,"['991104']", , ,2.046,2332.98 +12410.0,pick item,2019-12-03 08:29:07.000Z, ,"['884647']", , , ,0.28,89.99 +12411.0,pick item,2019-12-03 08:29:46.000Z, ,"['884521']", , , ,1.37,2500.0 +12412.0,pick item,2019-12-03 08:31:39.000Z, ,"['884633']", , , ,0.188,1149.0 +12413.0,package delivered,2019-12-03 08:32:35.000Z, , , ,"['660716']", ,0.978,624.0 +12414.0,confirm order,2019-12-03 08:39:59.000Z, , ,"['991141']", , ,2.54,394.97 +12415.0,package delivered,2019-12-03 08:41:57.000Z, , , ,"['660725']", ,1.555,1702.99 +12416.0,pick item,2019-12-03 08:52:52.000Z, ,"['884652']", , , ,0.495,129.0 +12417.0,pick item,2019-12-03 08:57:46.000Z, ,"['884561']", , , ,0.188,1149.0 +12418.0,confirm order,2019-12-03 09:07:21.000Z, , ,"['991143']", , ,1.485,392.0 +12419.0,pick item,2019-12-03 09:09:08.000Z, ,"['884538']", , , ,0.172,699.0 +12420.0,payment reminder,2019-12-03 09:15:33.000Z, , ,"['991024']", , ,4.3610000000000015,7121.99 +12421.0,pick item,2019-12-03 09:22:18.000Z, ,"['884653']", , , ,0.495,129.0 +12422.0,send package,2019-12-03 09:26:45.000Z, , , ,"['660728']", ,3.885,1443.96 +12423.0,reorder item,2019-12-03 09:27:15.000Z, ,"['884602']", , , ,0.2,39.99 +12424.0,place order,2019-12-03 09:27:43.000Z, ,"['884655','884657','884656','884654']","['991144']", , ,3.69,2484.97 +12425.0,item out of stock,2019-12-03 09:36:10.000Z, ,"['884638']", , , ,0.98,129.99 +12426.0,send package,2019-12-03 10:10:02.000Z, , , ,"['660730']", ,7.818,7653.95 +12427.0,item out of stock,2019-12-03 10:16:58.000Z, ,"['884650']", , , ,0.78,99.99 +12428.0,item out of stock,2019-12-03 10:31:36.000Z, ,"['884636']", , , ,0.166,799.0 +12429.0,pick item,2019-12-03 10:40:10.000Z, ,"['884572']", , , ,0.483,79.99 +12430.0,pay order,2019-12-03 10:41:22.000Z, , ,"['991122']", , ,3.3,2182.97 +12431.0,pick item,2019-12-03 10:42:39.000Z, ,"['884577']", , , ,0.38,29.99 +12432.0,package delivered,2019-12-03 10:42:41.000Z, , , ,"['660726']", ,4.033,4190.98 +12433.0,pick item,2019-12-03 10:49:56.000Z, ,"['884656']", , , ,1.28,149.99 +12434.0,create package,2019-12-03 10:49:56.000Z, ,"['884578','884579','884581','884576','884577','884580']", ,"['660731']", ,3.198,4267.97 +12435.0,confirm order,2019-12-03 10:55:50.000Z, , ,"['991130']", , ,5.283,3912.95 +12436.0,pick item,2019-12-03 11:01:32.000Z, ,"['884607']", , , ,0.21,529.0 +12437.0,pick item,2019-12-03 11:03:31.000Z, ,"['884480']", , , ,0.88,89.99 +12438.0,place order,2019-12-03 11:15:14.000Z, ,"['884660','884659','884661','884658']","['991145']", , ,3.3360000000000003,2702.98 +12439.0,pay order,2019-12-03 11:34:24.000Z, , ,"['991088']", , ,1.898,1234.98 +12440.0,item out of stock,2019-12-03 11:40:47.000Z, ,"['884629']", , , ,1.37,2500.0 +12441.0,pick item,2019-12-03 12:00:03.000Z, ,"['884610']", , , ,0.166,799.0 +12442.0,item out of stock,2019-12-03 12:03:55.000Z, ,"['884654']", , , ,1.25,2200.0 +12443.0,reorder item,2019-12-03 12:07:27.000Z, ,"['884650']", , , ,0.78,99.99 +12444.0,pick item,2019-12-03 12:16:28.000Z, ,"['884651']", , , ,0.495,129.0 +12445.0,pick item,2019-12-03 12:30:35.000Z, ,"['884660']", , , ,1.48,199.99 +12446.0,send package,2019-12-03 12:38:11.000Z, , , ,"['660729']", ,0.84,628.98 +12447.0,pick item,2019-12-03 12:42:55.000Z, ,"['884478']", , , ,0.21,529.0 +12448.0,create package,2019-12-03 12:42:55.000Z, ,"['884571','884600','884617','884172','884616','884598']", ,"['660732']", ,3.916,3974.97 +12449.0,place order,2019-12-03 12:50:15.000Z, ,"['884666','884665','884664','884667','884662','884663']","['991146']", , ,2.708,2321.97 +12450.0,reorder item,2019-12-03 12:51:04.000Z, ,"['884487']", , , ,0.21,529.0 +12451.0,pick item,2019-12-03 13:27:42.000Z, ,"['884643']", , , ,0.495,129.0 +12452.0,pay order,2019-12-03 13:44:03.000Z, , ,"['991041']", , ,2.219,3423.98 +12453.0,item out of stock,2019-12-03 13:58:59.000Z, ,"['884661']", , , ,0.188,1149.0 +12454.0,confirm order,2019-12-03 14:06:00.000Z, , ,"['991146']", , ,2.708,2321.97 +12455.0,pick item,2019-12-03 14:11:51.000Z, ,"['884663']", , , ,0.28,449.0 +12456.0,package delivered,2019-12-03 14:15:09.000Z, , , ,"['660727']", ,6.766,4648.95 +12457.0,pick item,2019-12-03 14:25:24.000Z, ,"['884463']", , , ,0.28,449.0 +12458.0,pick item,2019-12-03 14:27:30.000Z, ,"['884122']", , , ,0.483,1099.0 +12459.0,package delivered,2019-12-03 14:32:30.000Z, , , ,"['660728']", ,3.885,1443.96 +12460.0,item out of stock,2019-12-03 14:35:51.000Z, ,"['884601']", , , ,0.88,89.99 +12461.0,pick item,2019-12-03 14:37:41.000Z, ,"['884525']", , , ,0.98,129.99 +12462.0,pick item,2019-12-03 14:39:20.000Z, ,"['884624']", , , ,0.188,1149.0 +12463.0,create package,2019-12-03 14:39:20.000Z, ,"['884622','884551','884620','884625','884492','884550','884624','884491','884553','884565','884563','884627','884561','884562','884621']", ,"['660733']", ,9.011,11680.93 +12464.0,item out of stock,2019-12-03 14:41:39.000Z, ,"['884567']", , , ,1.25,2200.0 +12465.0,package delivered,2019-12-03 14:59:22.000Z, , , ,"['660729']", ,0.84,628.98 +12466.0,pick item,2019-12-03 14:59:24.000Z, ,"['884599']", , , ,0.21,529.0 +12467.0,place order,2019-12-03 15:00:18.000Z, ,"['884668','884671','884670','884669','884672']","['991147']", , ,2.071,2421.98 +12468.0,pick item,2019-12-03 15:06:37.000Z, ,"['884413']", , , ,1.28,149.99 +12469.0,item out of stock,2019-12-03 15:10:40.000Z, ,"['884618']", , , ,0.495,129.0 +12470.0,confirm order,2019-12-03 15:12:58.000Z, , ,"['991133']", , ,1.3259999999999998,933.98 +12471.0,pay order,2019-12-03 15:13:49.000Z, , ,"['991127']", , ,3.833,3136.98 +12472.0,pay order,2019-12-03 15:16:48.000Z, , ,"['991010']", , ,4.21,5148.97 +12473.0,reorder item,2019-12-03 15:22:40.000Z, ,"['884618']", , , ,0.495,129.0 +12474.0,pick item,2019-12-03 15:23:21.000Z, ,"['884667']", , , ,0.28,449.0 +12475.0,reorder item,2019-12-03 15:24:50.000Z, ,"['884508']", , , ,0.28,89.99 +12476.0,confirm order,2019-12-03 15:28:35.000Z, , ,"['991142']", , ,2.15,2604.99 +12477.0,pick item,2019-12-03 15:31:40.000Z, ,"['884531']", , , ,0.188,1149.0 +12478.0,package delivered,2019-12-03 15:31:50.000Z, , , ,"['660730']", ,7.818,7653.95 +12479.0,confirm order,2019-12-03 15:35:11.000Z, , ,"['991140']", , ,4.468,4226.98 +12480.0,reorder item,2019-12-03 15:38:22.000Z, ,"['884654']", , , ,1.25,2200.0 +12481.0,pay order,2019-12-03 15:44:44.000Z, , ,"['991135']", , ,2.185,2810.0 +12482.0,item out of stock,2019-12-03 15:53:06.000Z, ,"['884597']", , , ,0.98,129.99 +12483.0,send package,2019-12-03 16:05:23.000Z, , , ,"['660732']", ,3.916,3974.97 +12484.0,send package,2019-12-03 16:13:10.000Z, , , ,"['660733']", ,9.011,11680.93 +12485.0,pick item,2019-12-03 16:15:41.000Z, ,"['884366']", , , ,0.483,1099.0 +12486.0,place order,2019-12-03 16:20:23.000Z, ,"['884673','884674','884678','884676','884677','884675','884679']","['991148']", , ,2.915,1760.97 +12487.0,item out of stock,2019-12-03 17:46:05.000Z, ,"['884603']", , , ,0.166,799.0 +12488.0,confirm order,2019-12-03 17:52:23.000Z, , ,"['991147']", , ,2.071,2421.98 +12489.0,place order,2019-12-03 18:00:33.000Z, ,"['884681','884682','884680','884683']","['991149']", , ,2.113,2238.99 +12490.0,pick item,2019-12-03 19:06:52.000Z, ,"['884637']", , , ,0.188,1149.0 +12491.0,place order,2019-12-03 20:40:41.000Z, ,"['884686','884685','884684','884687']","['991150']", , ,2.305,2513.98 +12492.0,reorder item,2019-12-03 20:41:40.000Z, ,"['884629']", , , ,1.37,2500.0 +12493.0,place order,2019-12-04 05:22:00.000Z, ,"['884689','884688']","['991151']", , ,1.416,3004.0 +12494.0,pay order,2019-12-04 07:14:12.000Z, , ,"['991022']", , ,1.02,550.98 +12495.0,pick item,2019-12-04 07:42:46.000Z, ,"['884644']", , , ,1.37,2500.0 +12496.0,pick item,2019-12-04 08:00:37.000Z, ,"['884679']", , , ,0.495,129.0 +12497.0,item out of stock,2019-12-04 08:13:48.000Z, ,"['884626']", , , ,0.98,129.99 +12498.0,pick item,2019-12-04 08:28:04.000Z, ,"['884685']", , , ,0.495,129.0 +12499.0,pick item,2019-12-04 08:34:22.000Z, ,"['884619']", , , ,0.483,495.0 +12500.0,pick item,2019-12-04 08:56:30.000Z, ,"['884421']", , , ,1.25,2200.0 +12501.0,place order,2019-12-04 09:02:00.000Z, ,"['884693','884690','884692','884691']","['991152']", , ,1.923,1682.98 +12502.0,reorder item,2019-12-04 09:02:13.000Z, ,"['884603']", , , ,0.166,799.0 +12503.0,pick item,2019-12-04 09:11:05.000Z, ,"['884639']", , , ,0.28,449.0 +12504.0,pay order,2019-12-04 09:26:48.000Z, , ,"['991139']", , ,0.98,134.99 +12505.0,pick item,2019-12-04 09:27:12.000Z, ,"['884689']", , , ,0.166,799.0 +12506.0,confirm order,2019-12-04 09:37:03.000Z, , ,"['991151']", , ,1.416,3004.0 +12507.0,pick item,2019-12-04 09:40:06.000Z, ,"['884642']", , , ,0.28,449.0 +12508.0,item out of stock,2019-12-04 09:40:44.000Z, ,"['884675']", , , ,0.78,99.99 +12509.0,pick item,2019-12-04 09:57:29.000Z, ,"['884682']", , , ,0.98,129.99 +12510.0,create package,2019-12-04 09:57:29.000Z, ,"['884371']", ,"['660734']", ,0.188,1149.0 +12511.0,pick item,2019-12-04 10:02:01.000Z, ,"['884692']", , , ,0.28,449.0 +12512.0,create package,2019-12-04 10:02:01.000Z, ,"['884511','884527','884525']", ,"['660735']", ,1.6469999999999998,957.99 +12513.0,pick item,2019-12-04 10:06:47.000Z, ,"['884649']", , , ,1.37,2500.0 +12514.0,item out of stock,2019-12-04 10:12:30.000Z, ,"['884671']", , , ,0.188,1149.0 +12515.0,place order,2019-12-04 10:23:47.000Z, ,"['884696','884695','884694']","['991153']", , ,1.724,4453.0 +12516.0,pay order,2019-12-04 10:28:12.000Z, , ,"['991106']", , ,3.633,1378.95 +12517.0,item out of stock,2019-12-04 10:33:06.000Z, ,"['884593']", , , ,0.188,1149.0 +12518.0,pick item,2019-12-04 10:34:04.000Z, ,"['884694']", , , ,0.166,799.0 +12519.0,pick item,2019-12-04 10:43:59.000Z, ,"['884695']", , , ,1.37,2500.0 +12520.0,create package,2019-12-04 10:43:59.000Z, ,"['884607','884606','884633','884637','884463','884635','884634','884608','884660','884604']", ,"['660736']", ,5.778,7443.97 +12521.0,confirm order,2019-12-04 10:49:56.000Z, , ,"['991148']", , ,2.915,1760.97 +12522.0,payment reminder,2019-12-04 10:59:10.000Z, , ,"['991031']", , ,1.046,893.99 +12523.0,pick item,2019-12-04 11:15:09.000Z, ,"['884609']", , , ,0.78,99.99 +12524.0,send package,2019-12-04 11:27:31.000Z, , , ,"['660731']", ,3.198,4267.97 +12525.0,pick item,2019-12-04 11:28:32.000Z, ,"['884670']", , , ,0.21,529.0 +12526.0,pay order,2019-12-04 11:43:20.000Z, , ,"['991129']", , ,0.8809999999999999,1762.99 +12527.0,pick item,2019-12-04 12:05:15.000Z, ,"['884674']", , , ,0.172,699.0 +12528.0,pick item,2019-12-04 12:06:50.000Z, ,"['884665']", , , ,0.78,99.99 +12529.0,place order,2019-12-04 12:07:22.000Z, ,"['884697','884699','884698']","['991154']", , ,0.8490000000000001,1338.99 +12530.0,pick item,2019-12-04 12:09:15.000Z, ,"['884605']", , , ,0.98,129.99 +12531.0,package delivered,2019-12-04 12:28:56.000Z, , , ,"['660731']", ,3.198,4267.97 +12532.0,pay order,2019-12-04 12:33:15.000Z, , ,"['991121']", , ,4.574,7152.99 +12533.0,pick item,2019-12-04 12:54:29.000Z, ,"['884596']", , , ,0.28,449.0 +12534.0,confirm order,2019-12-04 13:04:41.000Z, , ,"['991149']", , ,2.113,2238.99 +12535.0,send package,2019-12-04 13:12:32.000Z, , , ,"['660735']", ,1.6469999999999998,957.99 +12536.0,pick item,2019-12-04 13:14:31.000Z, ,"['884646']", , , ,1.48,199.99 +12537.0,pick item,2019-12-04 13:22:25.000Z, ,"['884595']", , , ,1.37,2500.0 +12538.0,reorder item,2019-12-04 13:28:10.000Z, ,"['884671']", , , ,0.188,1149.0 +12539.0,pick item,2019-12-04 13:29:40.000Z, ,"['884628']", , , ,1.28,149.99 +12540.0,place order,2019-12-04 13:34:31.000Z, ,"['884700','884701','884702']","['991155']", , ,3.133,3753.99 +12541.0,pick item,2019-12-04 13:40:17.000Z, ,"['884630']", , , ,0.2,39.99 +12542.0,create package,2019-12-04 13:40:17.000Z, ,"['884433']", ,"['660737']", ,0.188,1149.0 +12543.0,pick item,2019-12-04 13:47:24.000Z, ,"['884488']", , , ,0.2,39.99 +12544.0,create package,2019-12-04 13:47:24.000Z, ,"['884695','884694','884674','884336','884679']", ,"['660738']", ,2.643,4603.0 +12545.0,confirm order,2019-12-04 14:08:11.000Z, , ,"['991145']", , ,3.3360000000000003,2702.98 +12546.0,failed delivery,2019-12-04 14:13:06.000Z, , , ,"['660735']", ,1.6469999999999998,957.99 +12547.0,reorder item,2019-12-04 14:23:47.000Z, ,"['884636']", , , ,0.166,799.0 +12548.0,payment reminder,2019-12-04 14:27:02.000Z, , ,"['990918']", , ,3.072,6140.99 +12549.0,pick item,2019-12-04 14:32:58.000Z, ,"['884664']", , , ,0.2,39.99 +12550.0,confirm order,2019-12-04 14:37:15.000Z, , ,"['991152']", , ,1.923,1682.98 +12551.0,pick item,2019-12-04 14:43:14.000Z, ,"['884687']", , , ,1.25,2200.0 +12552.0,pick item,2019-12-04 14:45:13.000Z, ,"['884655']", , , ,0.38,29.99 +12553.0,confirm order,2019-12-04 14:46:50.000Z, , ,"['991138']", , ,3.177,8008.98 +12554.0,pick item,2019-12-04 14:53:01.000Z, ,"['884701']", , , ,0.483,1099.0 +12555.0,pick item,2019-12-04 14:58:12.000Z, ,"['884673']", , , ,0.495,129.0 +12556.0,create package,2019-12-04 14:58:12.000Z, ,"['884538','884190','884692','884421','884413','884478']", ,"['660739']", ,3.358,4825.99 +12557.0,pick item,2019-12-04 14:59:05.000Z, ,"['884442']", , , ,1.25,2200.0 +12558.0,item out of stock,2019-12-04 14:59:50.000Z, ,"['884676']", , , ,0.21,529.0 +12559.0,pick item,2019-12-04 15:03:16.000Z, ,"['884645']", , , ,0.78,99.99 +12560.0,failed delivery,2019-12-04 15:08:54.000Z, , , ,"['660732']", ,3.916,3974.97 +12561.0,reorder item,2019-12-04 15:20:10.000Z, ,"['884661']", , , ,0.188,1149.0 +12562.0,pick item,2019-12-04 15:24:39.000Z, ,"['884678']", , , ,0.483,79.99 +12563.0,place order,2019-12-04 15:28:49.000Z, ,"['884703','884706','884704','884705']","['991156']", , ,0.998,1981.99 +12564.0,item out of stock,2019-12-04 15:30:18.000Z, ,"['884688']", , , ,1.25,2200.0 +12565.0,pay order,2019-12-04 15:31:13.000Z, , ,"['991140']", , ,4.468,4226.98 +12566.0,pay order,2019-12-04 15:45:12.000Z, , ,"['991116']", , ,5.03,10394.99 +12567.0,pick item,2019-12-04 15:46:38.000Z, ,"['884326']", , , ,0.166,799.0 +12568.0,send package,2019-12-04 15:47:57.000Z, , , ,"['660734']", ,0.188,1149.0 +12569.0,pick item,2019-12-04 15:53:15.000Z, ,"['884547']", , , ,1.25,2200.0 +12570.0,pick item,2019-12-04 15:56:00.000Z, ,"['884662']", , , ,0.188,1149.0 +12571.0,create package,2019-12-04 15:56:00.000Z, ,"['884583','884122','884591','884586']", ,"['660740']", ,1.412,2426.99 +12572.0,pick item,2019-12-04 16:05:44.000Z, ,"['884690']", , , ,0.78,99.99 +12573.0,reorder item,2019-12-04 16:10:03.000Z, ,"['884597']", , , ,0.98,129.99 +12574.0,send package,2019-12-04 16:16:37.000Z, , , ,"['660738']", ,2.643,4603.0 +12575.0,pay order,2019-12-04 16:21:17.000Z, , ,"['991089']", , ,6.263,4382.93 +12576.0,send package,2019-12-04 16:23:51.000Z, , , ,"['660737']", ,0.188,1149.0 +12577.0,pick item,2019-12-04 16:32:28.000Z, ,"['884306']", , , ,1.25,2200.0 +12578.0,pay order,2019-12-04 16:32:41.000Z, , ,"['990918']", , ,3.072,6140.99 +12579.0,package delivered,2019-12-04 16:36:51.000Z, , , ,"['660737']", ,0.188,1149.0 +12580.0,package delivered,2019-12-04 16:49:07.000Z, , , ,"['660735']", ,1.6469999999999998,957.99 +12581.0,send package,2019-12-04 16:57:35.000Z, , , ,"['660740']", ,1.412,2426.99 +12582.0,place order,2019-12-04 17:17:26.000Z, ,"['884707','884708']","['991157']", , ,1.36,164.98 +12583.0,pick item,2019-12-04 17:21:23.000Z, ,"['884487']", , , ,0.21,529.0 +12584.0,item out of stock,2019-12-04 17:23:49.000Z, ,"['884659']", , , ,1.48,199.99 +12585.0,item out of stock,2019-12-04 17:25:01.000Z, ,"['884683']", , , ,0.483,1099.0 +12586.0,reorder item,2019-12-04 18:12:03.000Z, ,"['884688']", , , ,1.25,2200.0 +12587.0,pick item,2019-12-04 18:35:58.000Z, ,"['884416']", , , ,0.78,99.99 +12588.0,create package,2019-12-04 18:35:58.000Z, ,"['884665','884611','884689','884480','884662','884663','884609','884664','884667','884610']", ,"['660741']", ,4.1,4004.95 +12589.0,pay order,2019-12-04 18:56:01.000Z, , ,"['991146']", , ,2.708,2321.97 +12590.0,pick item,2019-12-04 19:25:49.000Z, ,"['884221']", , , ,0.2,39.99 +12591.0,place order,2019-12-04 19:31:53.000Z, ,"['884710','884709']","['991158']", , ,0.446,1253.0 +12592.0,pick item,2019-12-04 20:58:50.000Z, ,"['884696']", , , ,0.188,1149.0 +12593.0,place order,2019-12-04 23:29:12.000Z, ,"['884713','884711','884712','884714']","['991159']", , ,1.091,3311.0 +12594.0,pick item,2019-12-05 07:13:01.000Z, ,"['884681']", , , ,0.21,529.0 +12595.0,package delivered,2019-12-05 07:17:01.000Z, , , ,"['660738']", ,2.643,4603.0 +12596.0,payment reminder,2019-12-05 07:31:16.000Z, , ,"['991038']", , ,1.501,2111.97 +12597.0,pay order,2019-12-05 08:01:22.000Z, , ,"['991020']", , ,0.763,949.0 +12598.0,reorder item,2019-12-05 08:21:30.000Z, ,"['884675']", , , ,0.78,99.99 +12599.0,package delivered,2019-12-05 08:31:22.000Z, , , ,"['660733']", ,9.011,11680.93 +12600.0,place order,2019-12-05 08:33:54.000Z, ,"['884716','884715']","['991160']", , ,0.667,833.0 +12601.0,pick item,2019-12-05 08:41:37.000Z, ,"['884476']", , , ,1.28,149.99 +12602.0,confirm order,2019-12-05 08:42:39.000Z, , ,"['991159']", , ,1.091,3311.0 +12603.0,pay order,2019-12-05 08:46:00.000Z, , ,"['991159']", , ,1.091,3311.0 +12604.0,confirm order,2019-12-05 08:51:21.000Z, , ,"['991153']", , ,1.724,4453.0 +12605.0,pay order,2019-12-05 08:55:03.000Z, , ,"['991153']", , ,1.724,4453.0 +12606.0,confirm order,2019-12-05 08:58:14.000Z, , ,"['991154']", , ,0.8490000000000001,1338.99 +12607.0,pay order,2019-12-05 09:16:05.000Z, , ,"['991132']", , ,1.89,773.98 +12608.0,pick item,2019-12-05 09:31:50.000Z, ,"['884603']", , , ,0.166,799.0 +12609.0,pick item,2019-12-05 09:34:00.000Z, ,"['884671']", , , ,0.188,1149.0 +12610.0,pick item,2019-12-05 09:34:51.000Z, ,"['884640']", , , ,0.483,495.0 +12611.0,pick item,2019-12-05 09:44:29.000Z, ,"['884680']", , , ,0.44,476.0 +12612.0,confirm order,2019-12-05 09:54:21.000Z, , ,"['991157']", , ,1.36,164.98 +12613.0,reorder item,2019-12-05 09:59:20.000Z, ,"['884676']", , , ,0.21,529.0 +12614.0,payment reminder,2019-12-05 10:01:37.000Z, , ,"['991039']", , ,4.435,1508.95 +12615.0,item out of stock,2019-12-05 10:02:58.000Z, ,"['884703']", , , ,0.172,699.0 +12616.0,package delivered,2019-12-05 10:04:51.000Z, , , ,"['660740']", ,1.412,2426.99 +12617.0,pay order,2019-12-05 10:05:06.000Z, , ,"['991082']", , ,5.029,4220.96 +12618.0,confirm order,2019-12-05 10:09:45.000Z, , ,"['991155']", , ,3.133,3753.99 +12619.0,pay order,2019-12-05 10:24:01.000Z, , ,"['990890']", , ,2.74,424.97 +12620.0,place order,2019-12-05 10:27:36.000Z, ,"['884720','884717','884719','884718']","['991161']", , ,3.32,833.97 +12621.0,send package,2019-12-05 10:29:03.000Z, , , ,"['660741']", ,4.1,4004.95 +12622.0,send package,2019-12-05 10:29:08.000Z, , , ,"['660739']", ,3.358,4825.99 +12623.0,pick item,2019-12-05 10:43:19.000Z, ,"['884699']", , , ,0.483,495.0 +12624.0,pick item,2019-12-05 10:52:16.000Z, ,"['884508']", , , ,0.28,89.99 +12625.0,create package,2019-12-05 10:52:16.000Z, ,"['884646','883808','884681','884682','884221','884366','884680','884647']", ,"['660742']", ,4.513,3039.96 +12626.0,pick item,2019-12-05 11:02:22.000Z, ,"['884420']", , , ,1.28,149.99 +12627.0,pick item,2019-12-05 11:09:59.000Z, ,"['884714']", , , ,0.21,529.0 +12628.0,pay order,2019-12-05 11:12:46.000Z, , ,"['991053']", , ,0.848,1273.98 +12629.0,package delivered,2019-12-05 11:20:43.000Z, , , ,"['660734']", ,0.188,1149.0 +12630.0,pick item,2019-12-05 11:46:25.000Z, ,"['884648']", , , ,0.78,99.99 +12631.0,pick item,2019-12-05 12:06:32.000Z, ,"['884711']", , , ,0.21,529.0 +12632.0,pick item,2019-12-05 12:08:37.000Z, ,"['883998']", , , ,0.28,89.99 +12633.0,pick item,2019-12-05 12:10:32.000Z, ,"['884453']", , , ,0.98,129.99 +12634.0,place order,2019-12-05 12:14:59.000Z, ,"['884723','884721','884727','884725','884724','884726','884722']","['991162']", , ,5.997000000000001,3948.97 +12635.0,pay order,2019-12-05 12:20:38.000Z, , ,"['991093']", , ,6.412999999999999,7385.97 +12636.0,pick item,2019-12-05 12:24:50.000Z, ,"['884198']", , , ,0.44,476.0 +12637.0,pick item,2019-12-05 12:28:20.000Z, ,"['884658']", , , ,0.188,1149.0 +12638.0,create package,2019-12-05 12:28:20.000Z, ,"['884639','884306','884613','884547','884643','884644','884640','884641','884645','884521','884642']", ,"['660743']", ,9.708,13621.98 +12639.0,package delivered,2019-12-05 12:45:20.000Z, , , ,"['660741']", ,4.1,4004.95 +12640.0,send package,2019-12-05 12:50:52.000Z, , , ,"['660736']", ,5.778,7443.97 +12641.0,pick item,2019-12-05 12:59:51.000Z, ,"['884712']", , , ,0.188,1149.0 +12642.0,pick item,2019-12-05 13:19:35.000Z, ,"['884725']", , , ,1.28,149.99 +12643.0,confirm order,2019-12-05 13:24:09.000Z, , ,"['991144']", , ,3.69,2484.97 +12644.0,place order,2019-12-05 13:49:45.000Z, ,"['884731','884728','884730','884729']","['991163']", , ,3.4130000000000003,2824.97 +12645.0,pick item,2019-12-05 13:56:20.000Z, ,"['884700']", , , ,1.28,149.99 +12646.0,pick item,2019-12-05 13:56:21.000Z, ,"['884719']", , , ,0.98,129.99 +12647.0,confirm order,2019-12-05 13:58:16.000Z, , ,"['991160']", , ,0.667,833.0 +12648.0,reorder item,2019-12-05 14:21:18.000Z, ,"['884601']", , , ,0.88,89.99 +12649.0,pick item,2019-12-05 14:30:30.000Z, ,"['884011']", , , ,0.172,699.0 +12650.0,pick item,2019-12-05 14:32:29.000Z, ,"['884723']", , , ,0.88,89.99 +12651.0,reorder item,2019-12-05 14:34:02.000Z, ,"['884567']", , , ,1.25,2200.0 +12652.0,item out of stock,2019-12-05 14:38:12.000Z, ,"['884724']", , , ,0.495,129.0 +12653.0,item out of stock,2019-12-05 14:47:00.000Z, ,"['884623']", , , ,0.28,89.99 +12654.0,reorder item,2019-12-05 14:49:35.000Z, ,"['884638']", , , ,0.98,129.99 +12655.0,pay order,2019-12-05 14:57:31.000Z, , ,"['991138']", , ,3.177,8008.98 +12656.0,pick item,2019-12-05 14:59:53.000Z, ,"['884718']", , , ,1.28,149.99 +12657.0,pay order,2019-12-05 15:00:55.000Z, , ,"['991152']", , ,1.923,1682.98 +12658.0,pick item,2019-12-05 15:08:34.000Z, ,"['884065']", , , ,0.172,699.0 +12659.0,package delivered,2019-12-05 15:10:26.000Z, , , ,"['660739']", ,3.358,4825.99 +12660.0,send package,2019-12-05 15:15:46.000Z, , , ,"['660742']", ,4.513,3039.96 +12661.0,confirm order,2019-12-05 15:22:02.000Z, , ,"['991161']", , ,3.32,833.97 +12662.0,pay order,2019-12-05 15:23:39.000Z, , ,"['991155']", , ,3.133,3753.99 +12663.0,item out of stock,2019-12-05 15:24:07.000Z, ,"['884730']", , , ,0.28,89.99 +12664.0,pick item,2019-12-05 15:24:16.000Z, ,"['884726']", , , ,0.44,476.0 +12665.0,pick item,2019-12-05 15:26:24.000Z, ,"['884728']", , , ,1.37,2500.0 +12666.0,item out of stock,2019-12-05 15:42:39.000Z, ,"['884705']", , , ,0.166,799.0 +12667.0,item out of stock,2019-12-05 15:48:37.000Z, ,"['884713']", , , ,0.483,1099.0 +12668.0,pick item,2019-12-05 15:55:55.000Z, ,"['884691']", , , ,0.483,1099.0 +12669.0,create package,2019-12-05 15:55:55.000Z, ,"['884653','884652','884651']", ,"['660744']", ,1.485,387.0 +12670.0,send package,2019-12-05 15:59:04.000Z, , , ,"['660743']", ,9.708,13621.98 +12671.0,place order,2019-12-05 15:59:18.000Z, ,"['884734','884732','884733']","['991164']", , ,1.041,962.99 +12672.0,package delivered,2019-12-05 16:03:36.000Z, , , ,"['660732']", ,3.916,3974.97 +12673.0,payment reminder,2019-12-05 16:09:16.000Z, , ,"['991044']", , ,0.966,1183.99 +12674.0,reorder item,2019-12-05 16:11:40.000Z, ,"['884659']", , , ,1.48,199.99 +12675.0,pay order,2019-12-05 16:19:35.000Z, , ,"['991147']", , ,2.071,2421.98 +12676.0,reorder item,2019-12-05 16:54:07.000Z, ,"['884623']", , , ,0.28,89.99 +12677.0,item out of stock,2019-12-05 17:28:20.000Z, ,"['884631']", , , ,0.2,39.99 +12678.0,pick item,2019-12-05 17:31:46.000Z, ,"['884677']", , , ,0.28,89.99 +12679.0,confirm order,2019-12-05 17:43:59.000Z, , ,"['991156']", , ,0.998,1981.99 +12680.0,place order,2019-12-05 18:18:23.000Z, ,"['884737','884736','884735','884739','884738']","['991165']", , ,3.094,4831.99 +12681.0,pay order,2019-12-05 20:17:15.000Z, , ,"['991151']", , ,1.416,3004.0 +12682.0,place order,2019-12-05 21:16:21.000Z, ,"['884742','884741','884740','884743']","['991166']", , ,2.8,760.97 +12683.0,pick item,2019-12-05 21:16:22.000Z, ,"['884735']", , , ,0.166,799.0 +12684.0,create package,2019-12-05 23:00:00.000Z, ,"['884712','884655','884572','884714','884656','884711','884685','884687']", ,"['660745']", ,4.496,4795.97 +12685.0,place order,2019-12-06 07:24:17.000Z, ,"['884744','884745']","['991167']", , ,1.53,2654.0 +12686.0,pick item,2019-12-06 07:33:31.000Z, ,"['884740']", , , ,0.2,39.99 +12687.0,pick item,2019-12-06 08:54:16.000Z, ,"['884686']", , , ,0.28,89.99 +12688.0,confirm order,2019-12-06 09:02:59.000Z, , ,"['991158']", , ,0.446,1253.0 +12689.0,pick item,2019-12-06 09:03:54.000Z, ,"['884684']", , , ,0.28,89.99 +12690.0,pick item,2019-12-06 09:10:24.000Z, ,"['884744']", , , ,0.28,449.0 +12691.0,item out of stock,2019-12-06 09:15:38.000Z, ,"['884745']", , , ,1.25,2200.0 +12692.0,confirm order,2019-12-06 09:19:53.000Z, , ,"['991166']", , ,2.8,760.97 +12693.0,pick item,2019-12-06 09:21:02.000Z, ,"['884722']", , , ,0.172,699.0 +12694.0,pick item,2019-12-06 09:21:06.000Z, ,"['884533']", , , ,0.172,699.0 +12695.0,place order,2019-12-06 09:26:13.000Z, ,"['884746','884747','884748']","['991168']", , ,1.86,3483.0 +12696.0,item out of stock,2019-12-06 09:26:18.000Z, ,"['884709']", , , ,0.28,449.0 +12697.0,package delivered,2019-12-06 09:27:14.000Z, , , ,"['660743']", ,9.708,13621.98 +12698.0,item out of stock,2019-12-06 09:27:44.000Z, ,"['884615']", , , ,1.25,2200.0 +12699.0,reorder item,2019-12-06 09:29:09.000Z, ,"['884705']", , , ,0.166,799.0 +12700.0,send package,2019-12-06 09:30:31.000Z, , , ,"['660744']", ,1.485,387.0 +12701.0,reorder item,2019-12-06 09:45:03.000Z, ,"['884615']", , , ,1.25,2200.0 +12702.0,confirm order,2019-12-06 09:56:52.000Z, , ,"['991162']", , ,5.997000000000001,3948.97 +12703.0,item out of stock,2019-12-06 10:05:04.000Z, ,"['884702']", , , ,1.37,2500.0 +12704.0,pick item,2019-12-06 10:14:29.000Z, ,"['884629']", , , ,1.37,2500.0 +12705.0,pick item,2019-12-06 10:54:45.000Z, ,"['884669']", , , ,0.21,529.0 +12706.0,package delivered,2019-12-06 10:55:26.000Z, , , ,"['660742']", ,4.513,3039.96 +12707.0,item out of stock,2019-12-06 11:01:53.000Z, ,"['884727']", , , ,1.48,199.99 +12708.0,pick item,2019-12-06 11:07:36.000Z, ,"['884734']", , , ,0.166,799.0 +12709.0,create package,2019-12-06 11:07:36.000Z, ,"['884326','884595','884599','884596']", ,"['660746']", ,2.026,4277.0 +12710.0,reorder item,2019-12-06 11:11:12.000Z, ,"['884593']", , , ,0.188,1149.0 +12711.0,place order,2019-12-06 11:12:13.000Z, ,"['884752','884750','884753','884754','884749','884751']","['991169']", , ,4.585,3112.97 +12712.0,pick item,2019-12-06 11:30:52.000Z, ,"['884693']", , , ,0.38,29.99 +12713.0,pick item,2019-12-06 11:33:15.000Z, ,"['884704']", , , ,0.28,449.0 +12714.0,confirm order,2019-12-06 11:35:44.000Z, , ,"['991167']", , ,1.53,2654.0 +12715.0,confirm order,2019-12-06 11:49:07.000Z, , ,"['991168']", , ,1.86,3483.0 +12716.0,pick item,2019-12-06 12:29:54.000Z, ,"['884751']", , , ,0.495,129.0 +12717.0,send package,2019-12-06 12:35:02.000Z, , , ,"['660745']", ,4.496,4795.97 +12718.0,place order,2019-12-06 12:44:14.000Z, ,"['884755','884757','884756']","['991170']", , ,2.2,1129.99 +12719.0,confirm order,2019-12-06 13:04:22.000Z, , ,"['991165']", , ,3.094,4831.99 +12720.0,pick item,2019-12-06 13:07:02.000Z, ,"['884706']", , , ,0.38,29.99 +12721.0,create package,2019-12-06 13:07:02.000Z, ,"['884533','884198','884531']", ,"['660747']", ,0.8,2324.0 +12722.0,send package,2019-12-06 13:08:02.000Z, , , ,"['660746']", ,2.026,4277.0 +12723.0,pick item,2019-12-06 13:25:21.000Z, ,"['884747']", , , ,0.21,529.0 +12724.0,pick item,2019-12-06 13:34:43.000Z, ,"['884737']", , , ,1.25,2200.0 +12725.0,pay order,2019-12-06 13:43:15.000Z, , ,"['991016']", , ,1.629,2032.99 +12726.0,confirm order,2019-12-06 14:25:40.000Z, , ,"['991170']", , ,2.2,1129.99 +12727.0,pick item,2019-12-06 14:27:50.000Z, ,"['884741']", , , ,1.28,149.99 +12728.0,create package,2019-12-06 14:27:50.000Z, ,"['884619','884628','884487','884488']", ,"['660748']", ,2.173,1213.98 +12729.0,pick item,2019-12-06 14:29:00.000Z, ,"['884757']", , , ,1.48,199.99 +12730.0,pick item,2019-12-06 14:30:02.000Z, ,"['884732']", , , ,0.495,129.0 +12731.0,item out of stock,2019-12-06 14:37:49.000Z, ,"['884753']", , , ,0.2,39.99 +12732.0,pick item,2019-12-06 14:38:44.000Z, ,"['884657']", , , ,0.78,99.99 +12733.0,package delivered,2019-12-06 14:39:16.000Z, , , ,"['660736']", ,5.778,7443.97 +12734.0,send package,2019-12-06 14:43:56.000Z, , , ,"['660747']", ,0.8,2324.0 +12735.0,place order,2019-12-06 14:48:15.000Z, ,"['884759','884761','884758','884760']","['991171']", , ,2.323,733.97 +12736.0,confirm order,2019-12-06 14:56:39.000Z, , ,"['991169']", , ,4.585,3112.97 +12737.0,pick item,2019-12-06 14:58:17.000Z, ,"['884474']", , , ,0.21,529.0 +12738.0,create package,2019-12-06 14:58:17.000Z, ,"['884723','884649','884725','884726','884722']", ,"['660749']", ,4.142,3914.98 +12739.0,pick item,2019-12-06 15:02:37.000Z, ,"['884602']", , , ,0.2,39.99 +12740.0,reorder item,2019-12-06 15:08:18.000Z, ,"['884702']", , , ,1.37,2500.0 +12741.0,pick item,2019-12-06 15:31:09.000Z, ,"['884668']", , , ,0.483,79.99 +12742.0,pick item,2019-12-06 15:33:38.000Z, ,"['884659']", , , ,1.48,199.99 +12743.0,pick item,2019-12-06 15:40:38.000Z, ,"['884666']", , , ,0.98,129.99 +12744.0,reorder item,2019-12-06 15:58:58.000Z, ,"['884626']", , , ,0.98,129.99 +12745.0,confirm order,2019-12-06 16:13:28.000Z, , ,"['991171']", , ,2.323,733.97 +12746.0,reorder item,2019-12-06 16:18:05.000Z, ,"['884709']", , , ,0.28,449.0 +12747.0,pick item,2019-12-06 16:40:23.000Z, ,"['884697']", , , ,0.166,799.0 +12748.0,create package,2019-12-06 16:40:23.000Z, ,"['884668','884671','884670','884669']", ,"['660750']", ,1.091,2286.99 +12749.0,confirm order,2019-12-06 16:45:07.000Z, , ,"['991163']", , ,3.4130000000000003,2824.97 +12750.0,place order,2019-12-06 16:56:17.000Z, ,"['884764','884765','884763','884762']","['991172']", , ,2.728,1433.97 +12751.0,pick item,2019-12-06 17:07:21.000Z, ,"['884738']", , , ,0.21,529.0 +12752.0,pay order,2019-12-06 17:13:34.000Z, , ,"['991111']", , ,0.48,134.98 +12753.0,send package,2019-12-06 17:41:12.000Z, , , ,"['660750']", ,1.091,2286.99 +12754.0,pick item,2019-12-06 17:49:46.000Z, ,"['884760']", , , ,0.28,449.0 +12755.0,reorder item,2019-12-06 17:57:57.000Z, ,"['884745']", , , ,1.25,2200.0 +12756.0,pay order,2019-12-06 18:12:34.000Z, , ,"['991081']", , ,2.1630000000000003,324.97 +12757.0,confirm order,2019-12-06 18:13:36.000Z, , ,"['991164']", , ,1.041,962.99 +12758.0,pick item,2019-12-06 18:38:32.000Z, ,"['884715']", , , ,0.172,699.0 +12759.0,reorder item,2019-12-06 18:55:31.000Z, ,"['884724']", , , ,0.495,129.0 +12760.0,place order,2019-12-06 19:28:26.000Z, ,"['884767','884769','884766','884768']","['991173']", , ,3.79,2574.97 +12761.0,place order,2019-12-06 23:08:30.000Z, ,"['884770','884771','884772']","['991174']", , ,2.94,334.97 +12762.0,payment reminder,2019-12-07 13:31:08.000Z, , ,"['990822']", , ,1.21,1548.99 +12763.0,payment reminder,2019-12-07 14:08:16.000Z, , ,"['990823']", , ,3.143,454.96 +12764.0,place order,2019-12-07 22:16:01.000Z, ,"['884774','884773','884775']","['991175']", , ,1.463,224.97 +12765.0,payment reminder,2019-12-08 11:13:27.000Z, , ,"['991050']", , ,2.886,2274.99 +12766.0,place order,2019-12-08 22:07:01.000Z, ,"['884779','884778','884776','884777']","['991176']", , ,1.014,2431.99 +12767.0,pick item,2019-12-09 08:00:14.000Z, ,"['884708']", , , ,0.98,129.99 +12768.0,create package,2019-12-09 08:00:14.000Z, ,"['884605','884658','884630','884629','884476','884603','884659']", ,"['660751']", ,5.664,4967.96 +12769.0,pick item,2019-12-09 08:04:29.000Z, ,"['884672']", , , ,0.98,129.99 +12770.0,place order,2019-12-09 08:08:17.000Z, ,"['884780','884783','884782','884784','884781']","['991177']", , ,4.39,2584.96 +12771.0,package delivered,2019-12-09 08:22:42.000Z, , , ,"['660745']", ,4.496,4795.97 +12772.0,pick item,2019-12-09 08:28:23.000Z, ,"['884729']", , , ,1.28,149.99 +12773.0,payment reminder,2019-12-09 08:36:56.000Z, , ,"['991058']", , ,4.695,2710.96 +12774.0,pick item,2019-12-09 08:37:39.000Z, ,"['884731']", , , ,0.483,79.99 +12775.0,confirm order,2019-12-09 08:38:32.000Z, , ,"['991176']", , ,1.014,2431.99 +12776.0,item out of stock,2019-12-09 08:42:57.000Z, ,"['884782']", , , ,0.2,39.99 +12777.0,pay order,2019-12-09 08:44:20.000Z, , ,"['991165']", , ,3.094,4831.99 +12778.0,package delivered,2019-12-09 09:03:13.000Z, , , ,"['660744']", ,1.485,387.0 +12779.0,pick item,2019-12-09 09:05:20.000Z, ,"['884761']", , , ,0.483,79.99 +12780.0,pick item,2019-12-09 09:06:10.000Z, ,"['884261']", , , ,0.21,529.0 +12781.0,pick item,2019-12-09 09:06:30.000Z, ,"['884733']", , , ,0.38,29.99 +12782.0,pick item,2019-12-09 09:19:35.000Z, ,"['884768']", , , ,1.25,2200.0 +12783.0,create package,2019-12-09 09:19:35.000Z, ,"['884700','884677','884673','884701','884678','884696','884747']", ,"['660752']", ,3.419,3225.97 +12784.0,pay order,2019-12-09 09:20:04.000Z, , ,"['991149']", , ,2.113,2238.99 +12785.0,pick item,2019-12-09 09:26:14.000Z, ,"['884446']", , , ,1.37,2500.0 +12786.0,place order,2019-12-09 09:36:21.000Z, ,"['884788','884790','884789','884787','884785','884786']","['991178']", , ,2.8560000000000003,1942.96 +12787.0,send package,2019-12-09 09:39:00.000Z, , , ,"['660748']", ,2.173,1213.98 +12788.0,pick item,2019-12-09 09:42:53.000Z, ,"['884787']", , , ,0.2,39.99 +12789.0,send package,2019-12-09 09:51:43.000Z, , , ,"['660751']", ,5.664,4967.96 +12790.0,confirm order,2019-12-09 09:56:41.000Z, , ,"['991174']", , ,2.94,334.97 +12791.0,package delivered,2019-12-09 09:57:59.000Z, , , ,"['660748']", ,2.173,1213.98 +12792.0,item out of stock,2019-12-09 10:06:17.000Z, ,"['884743']", , , ,0.88,89.99 +12793.0,pay order,2019-12-09 10:15:43.000Z, , ,"['990822']", , ,1.21,1548.99 +12794.0,pick item,2019-12-09 10:24:33.000Z, ,"['884767']", , , ,0.98,129.99 +12795.0,confirm order,2019-12-09 10:37:45.000Z, , ,"['991175']", , ,1.463,224.97 +12796.0,pick item,2019-12-09 10:46:03.000Z, ,"['884434']", , , ,0.21,529.0 +12797.0,reorder item,2019-12-09 10:48:03.000Z, ,"['884631']", , , ,0.2,39.99 +12798.0,package delivered,2019-12-09 10:50:49.000Z, , , ,"['660750']", ,1.091,2286.99 +12799.0,package delivered,2019-12-09 10:55:43.000Z, , , ,"['660751']", ,5.664,4967.96 +12800.0,pick item,2019-12-09 11:01:33.000Z, ,"['884623']", , , ,0.28,89.99 +12801.0,pick item,2019-12-09 11:04:18.000Z, ,"['884790']", , , ,0.483,79.99 +12802.0,pick item,2019-12-09 11:08:08.000Z, ,"['884707']", , , ,0.38,29.99 +12803.0,create package,2019-12-09 11:08:08.000Z, ,"['884693','884442','884420','884416','884690','884691']", ,"['660753']", ,4.953,3678.96 +12804.0,confirm order,2019-12-09 11:08:15.000Z, , ,"['991150']", , ,2.305,2513.98 +12805.0,pay order,2019-12-09 11:10:46.000Z, , ,"['991154']", , ,0.8490000000000001,1338.99 +12806.0,reorder item,2019-12-09 11:23:19.000Z, ,"['884743']", , , ,0.88,89.99 +12807.0,confirm order,2019-12-09 11:27:49.000Z, , ,"['991173']", , ,3.79,2574.97 +12808.0,send package,2019-12-09 11:30:46.000Z, , , ,"['660749']", ,4.142,3914.98 +12809.0,package delivered,2019-12-09 11:31:39.000Z, , , ,"['660747']", ,0.8,2324.0 +12810.0,place order,2019-12-09 11:32:29.000Z, ,"['884793','884791','884792']","['991179']", , ,1.651,1363.98 +12811.0,pick item,2019-12-09 11:38:09.000Z, ,"['884770']", , , ,1.28,149.99 +12812.0,confirm order,2019-12-09 12:01:38.000Z, , ,"['991172']", , ,2.728,1433.97 +12813.0,pick item,2019-12-09 12:06:53.000Z, ,"['884755']", , , ,0.28,449.0 +12814.0,pay order,2019-12-09 12:16:42.000Z, , ,"['991174']", , ,2.94,334.97 +12815.0,pick item,2019-12-09 12:19:49.000Z, ,"['884771']", , , ,0.38,29.99 +12816.0,confirm order,2019-12-09 12:37:06.000Z, , ,"['991177']", , ,4.39,2584.96 +12817.0,confirm order,2019-12-09 12:40:38.000Z, , ,"['991179']", , ,1.651,1363.98 +12818.0,pay order,2019-12-09 12:42:49.000Z, , ,"['991024']", , ,4.3610000000000015,7121.99 +12819.0,place order,2019-12-09 13:24:46.000Z, ,"['884794']","['991180']", , ,0.38,34.99 +12820.0,pick item,2019-12-09 13:33:34.000Z, ,"['884758']", , , ,0.78,99.99 +12821.0,pick item,2019-12-09 13:43:00.000Z, ,"['884786']", , , ,0.21,529.0 +12822.0,pick item,2019-12-09 13:49:28.000Z, ,"['884759']", , , ,0.78,99.99 +12823.0,create package,2019-12-09 13:49:28.000Z, ,"['884697','884719','884699','884718']", ,"['660754']", ,2.909,1573.98 +12824.0,pick item,2019-12-09 13:52:00.000Z, ,"['884788']", , , ,0.2,39.99 +12825.0,pick item,2019-12-09 14:04:43.000Z, ,"['884720']", , , ,0.78,99.99 +12826.0,pick item,2019-12-09 14:10:46.000Z, ,"['884784']", , , ,0.88,89.99 +12827.0,pick item,2019-12-09 14:14:09.000Z, ,"['884676']", , , ,0.21,529.0 +12828.0,create package,2019-12-09 14:14:09.000Z, ,"['884011','884453','884508']", ,"['660755']", ,1.432,918.98 +12829.0,package delivered,2019-12-09 14:16:25.000Z, , , ,"['660746']", ,2.026,4277.0 +12830.0,pick item,2019-12-09 14:27:43.000Z, ,"['884739']", , , ,1.28,149.99 +12831.0,pick item,2019-12-09 14:28:22.000Z, ,"['884698']", , , ,0.2,39.99 +12832.0,pick item,2019-12-09 14:55:56.000Z, ,"['884794']", , , ,0.38,29.99 +12833.0,create package,2019-12-09 14:55:56.000Z, ,"['884786','884784','884740','884261','884788','884741','884790','884787','884648']", ,"['660756']", ,4.4430000000000005,1597.93 +12834.0,pick item,2019-12-09 15:02:05.000Z, ,"['884776']", , , ,0.166,799.0 +12835.0,place order,2019-12-09 15:09:19.000Z, ,"['884798','884795','884797','884796']","['991181']", , ,2.612,1392.98 +12836.0,pay order,2019-12-09 15:13:41.000Z, , ,"['991141']", , ,2.54,394.97 +12837.0,pick item,2019-12-09 15:22:22.000Z, ,"['884777']", , , ,0.188,1149.0 +12838.0,send package,2019-12-09 15:28:24.000Z, , , ,"['660755']", ,1.432,918.98 +12839.0,pick item,2019-12-09 15:36:31.000Z, ,"['884532']", , , ,1.37,2500.0 +12840.0,confirm order,2019-12-09 15:39:16.000Z, , ,"['991181']", , ,2.612,1392.98 +12841.0,pick item,2019-12-09 15:42:19.000Z, ,"['884309']", , , ,0.188,1149.0 +12842.0,pick item,2019-12-09 15:51:59.000Z, ,"['884789']", , , ,0.483,1099.0 +12843.0,pick item,2019-12-09 15:56:10.000Z, ,"['884205']", , , ,1.25,2200.0 +12844.0,item out of stock,2019-12-09 16:02:48.000Z, ,"['884775']", , , ,0.78,99.99 +12845.0,package delivered,2019-12-09 16:12:01.000Z, , , ,"['660749']", ,4.142,3914.98 +12846.0,payment reminder,2019-12-09 16:18:41.000Z, , ,"['990945']", , ,0.28,454.0 +12847.0,pick item,2019-12-09 16:33:52.000Z, ,"['884763']", , , ,0.88,89.99 +12848.0,place order,2019-12-09 16:38:26.000Z, ,"['884801','884800','884799']","['991182']", , ,2.93,3103.99 +12849.0,send package,2019-12-09 17:34:49.000Z, , , ,"['660754']", ,2.909,1573.98 +12850.0,confirm order,2019-12-09 18:10:38.000Z, , ,"['991178']", , ,2.8560000000000003,1942.96 +12851.0,place order,2019-12-09 18:36:39.000Z, ,"['884802','884803']","['991183']", , ,0.966,579.99 +12852.0,pay order,2019-12-09 18:44:36.000Z, , ,"['991175']", , ,1.463,224.97 +12853.0,failed delivery,2019-12-09 19:47:20.000Z, , , ,"['660755']", ,1.432,918.98 +12854.0,pick item,2019-12-09 19:54:20.000Z, ,"['884801']", , , ,1.28,149.99 +12855.0,send package,2019-12-09 21:01:57.000Z, , , ,"['660752']", ,3.419,3225.97 +12856.0,place order,2019-12-09 21:52:53.000Z, ,"['884805','884804','884806']","['991184']", , ,1.2,540.98 +12857.0,pick item,2019-12-10 07:25:53.000Z, ,"['884774']", , , ,0.2,39.99 +12858.0,create package,2019-12-10 07:25:53.000Z, ,"['884666','883998','884744','884767','884768','884715']", ,"['660757']", ,3.942,3697.97 +12859.0,pick item,2019-12-10 07:45:11.000Z, ,"['884705']", , , ,0.166,799.0 +12860.0,pick item,2019-12-10 07:51:23.000Z, ,"['884798']", , , ,0.28,449.0 +12861.0,package delivered,2019-12-10 07:55:45.000Z, , , ,"['660754']", ,2.909,1573.98 +12862.0,pick item,2019-12-10 07:58:34.000Z, ,"['884567']", , , ,1.25,2200.0 +12863.0,item out of stock,2019-12-10 08:09:57.000Z, ,"['884804']", , , ,0.44,476.0 +12864.0,pick item,2019-12-10 08:23:40.000Z, ,"['884792']", , , ,0.483,79.99 +12865.0,pick item,2019-12-10 08:36:21.000Z, ,"['884799']", , , ,1.37,2500.0 +12866.0,pay order,2019-12-10 08:37:13.000Z, , ,"['991156']", , ,0.998,1981.99 +12867.0,place order,2019-12-10 08:37:21.000Z, ,"['884811','884809','884808','884807','884812','884810']","['991185']", , ,2.999,3117.97 +12868.0,pay order,2019-12-10 09:03:27.000Z, , ,"['991172']", , ,2.728,1433.97 +12869.0,confirm order,2019-12-10 09:11:32.000Z, , ,"['991180']", , ,0.38,34.99 +12870.0,confirm order,2019-12-10 09:15:06.000Z, , ,"['991183']", , ,0.966,579.99 +12871.0,payment reminder,2019-12-10 09:27:41.000Z, , ,"['991059']", , ,0.446,893.99 +12872.0,pick item,2019-12-10 09:28:39.000Z, ,"['884765']", , , ,0.88,89.99 +12873.0,create package,2019-12-10 09:28:39.000Z, ,"['884065','884706','884704','884705']", ,"['660758']", ,0.998,1976.99 +12874.0,reorder item,2019-12-10 09:30:38.000Z, ,"['884713']", , , ,0.483,1099.0 +12875.0,pick item,2019-12-10 09:37:53.000Z, ,"['884614']", , , ,0.172,699.0 +12876.0,pick item,2019-12-10 09:44:05.000Z, ,"['884785']", , , ,1.28,149.99 +12877.0,package delivered,2019-12-10 09:46:24.000Z, , , ,"['660752']", ,3.419,3225.97 +12878.0,reorder item,2019-12-10 09:59:15.000Z, ,"['884782']", , , ,0.2,39.99 +12879.0,pick item,2019-12-10 09:59:22.000Z, ,"['884548']", , , ,0.2,39.99 +12880.0,pay order,2019-12-10 10:08:38.000Z, , ,"['991123']", , ,3.15,2840.97 +12881.0,pick item,2019-12-10 10:15:47.000Z, ,"['884364']", , , ,0.98,129.99 +12882.0,create package,2019-12-10 10:15:47.000Z, ,"['884739','884434','884728','884735','884737','884731','884738','884729']", ,"['660759']", ,6.249,6936.97 +12883.0,pick item,2019-12-10 10:19:42.000Z, ,"['884773']", , , ,0.483,79.99 +12884.0,pick item,2019-12-10 10:23:45.000Z, ,"['884805']", , , ,0.38,29.99 +12885.0,item out of stock,2019-12-10 10:31:38.000Z, ,"['884810']", , , ,1.48,199.99 +12886.0,send package,2019-12-10 10:33:39.000Z, , , ,"['660756']", ,4.4430000000000005,1597.93 +12887.0,place order,2019-12-10 10:34:29.000Z, ,"['884814','884813']","['991186']", , ,1.32,570.99 +12888.0,item out of stock,2019-12-10 10:40:52.000Z, ,"['884795']", , , ,0.172,699.0 +12889.0,pay order,2019-12-10 10:50:42.000Z, , ,"['991162']", , ,5.997000000000001,3948.97 +12890.0,pay order,2019-12-10 11:00:47.000Z, , ,"['991145']", , ,3.3360000000000003,2702.98 +12891.0,pick item,2019-12-10 11:47:53.000Z, ,"['884783']", , , ,0.78,99.99 +12892.0,confirm order,2019-12-10 11:48:53.000Z, , ,"['991185']", , ,2.999,3117.97 +12893.0,pick item,2019-12-10 11:51:01.000Z, ,"['884769']", , , ,1.28,149.99 +12894.0,package delivered,2019-12-10 12:20:45.000Z, , , ,"['660755']", ,1.432,918.98 +12895.0,place order,2019-12-10 12:28:46.000Z, ,"['884815']","['991187']", , ,1.37,2505.0 +12896.0,reorder item,2019-12-10 12:50:19.000Z, ,"['884683']", , , ,0.483,1099.0 +12897.0,pick item,2019-12-10 12:57:44.000Z, ,"['884800']", , , ,0.28,449.0 +12898.0,payment reminder,2019-12-10 13:19:11.000Z, , ,"['991065']", , ,4.615,3157.97 +12899.0,send package,2019-12-10 13:33:32.000Z, , , ,"['660753']", ,4.953,3678.96 +12900.0,pick item,2019-12-10 13:33:47.000Z, ,"['884750']", , , ,1.48,199.99 +12901.0,pick item,2019-12-10 13:33:57.000Z, ,"['884716']", , , ,0.495,129.0 +12902.0,item out of stock,2019-12-10 13:43:05.000Z, ,"['884808']", , , ,0.38,29.99 +12903.0,pay order,2019-12-10 13:46:53.000Z, , ,"['991130']", , ,5.283,3912.95 +12904.0,confirm order,2019-12-10 14:12:25.000Z, , ,"['991184']", , ,1.2,540.98 +12905.0,place order,2019-12-10 14:17:19.000Z, ,"['884816','884819','884817','884818']","['991188']", , ,1.495,789.98 +12906.0,pick item,2019-12-10 14:36:28.000Z, ,"['884793']", , , ,0.188,1149.0 +12907.0,create package,2019-12-10 14:36:28.000Z, ,"['884770','884686','884708','884567','884657','884771','884684','884707']", ,"['660760']", ,5.61,2819.93 +12908.0,pick item,2019-12-10 14:46:28.000Z, ,"['884721']", , , ,1.25,2200.0 +12909.0,reorder item,2019-12-10 14:50:14.000Z, ,"['884804']", , , ,0.44,476.0 +12910.0,pick item,2019-12-10 14:51:38.000Z, ,"['884601']", , , ,0.88,89.99 +12911.0,reorder item,2019-12-10 14:53:52.000Z, ,"['884730']", , , ,0.28,89.99 +12912.0,confirm order,2019-12-10 15:09:55.000Z, , ,"['991186']", , ,1.32,570.99 +12913.0,pay order,2019-12-10 15:19:02.000Z, , ,"['991161']", , ,3.32,833.97 +12914.0,pick item,2019-12-10 15:25:09.000Z, ,"['884819']", , , ,0.28,89.99 +12915.0,pick item,2019-12-10 15:36:54.000Z, ,"['884117']", , , ,0.2,39.99 +12916.0,item out of stock,2019-12-10 15:38:23.000Z, ,"['884797']", , , ,0.88,89.99 +12917.0,reorder item,2019-12-10 15:48:48.000Z, ,"['884775']", , , ,0.78,99.99 +12918.0,item out of stock,2019-12-10 15:50:06.000Z, ,"['884742']", , , ,0.44,476.0 +12919.0,place order,2019-12-10 15:54:25.000Z, ,"['884823','884820','884824','884822','884821']","['991189']", , ,2.652,1559.97 +12920.0,pay order,2019-12-10 15:54:53.000Z, , ,"['991160']", , ,0.667,833.0 +12921.0,pay order,2019-12-10 16:12:51.000Z, , ,"['991095']", , ,4.1610000000000005,5722.99 +12922.0,confirm order,2019-12-10 16:14:33.000Z, , ,"['991187']", , ,1.37,2505.0 +12923.0,pick item,2019-12-10 16:15:40.000Z, ,"['884802']", , , ,0.483,79.99 +12924.0,pick item,2019-12-10 16:46:11.000Z, ,"['884754']", , , ,1.25,2200.0 +12925.0,pick item,2019-12-10 16:56:00.000Z, ,"['884809']", , , ,0.188,1149.0 +12926.0,pick item,2019-12-10 17:30:28.000Z, ,"['884820']", , , ,0.28,89.99 +12927.0,create package,2019-12-10 17:30:28.000Z, ,"['884759','884798','884761','884758','884734','884733','884760','884732']", ,"['660761']", ,3.644,2135.96 +12928.0,confirm order,2019-12-10 18:03:05.000Z, , ,"['991182']", , ,2.93,3103.99 +12929.0,pay order,2019-12-10 18:05:26.000Z, , ,"['990945']", , ,0.28,454.0 +12930.0,pick item,2019-12-10 18:05:52.000Z, ,"['884814']", , , ,0.44,476.0 +12931.0,place order,2019-12-10 18:08:38.000Z, ,"['884830','884828','884827','884826','884829','884825']","['991190']", , ,4.096,2742.96 +12932.0,pick item,2019-12-10 18:25:57.000Z, ,"['884825']", , , ,0.188,1149.0 +12933.0,pick item,2019-12-10 19:08:58.000Z, ,"['884829']", , , ,1.28,149.99 +12934.0,pick item,2019-12-10 19:43:59.000Z, ,"['884632']", , , ,0.483,1099.0 +12935.0,pick item,2019-12-10 20:32:29.000Z, ,"['884762']", , , ,0.78,99.99 +12936.0,place order,2019-12-10 20:56:51.000Z, ,"['884831','884833','884835','884832','884838','884837','884834','884836']","['991191']", , ,6.27,5342.96 +12937.0,create package,2019-12-10 23:00:00.000Z, ,"['884602','884754','884800','884474','884799','884601','884750','884755','884751','884757','884801']", ,"['660762']", ,9.205,6935.95 +12938.0,place order,2019-12-11 06:59:00.000Z, ,"['884843','884842','884840','884841','884839']","['991192']", , ,2.406,1567.98 +12939.0,send package,2019-12-11 07:25:26.000Z, , , ,"['660759']", ,6.249,6936.97 +12940.0,pick item,2019-12-11 07:30:00.000Z, ,"['884815']", , , ,1.37,2500.0 +12941.0,pay order,2019-12-11 07:39:03.000Z, , ,"['991186']", , ,1.32,570.99 +12942.0,send package,2019-12-11 08:11:47.000Z, , , ,"['660757']", ,3.942,3697.97 +12943.0,pick item,2019-12-11 08:18:53.000Z, ,"['884752']", , , ,0.88,89.99 +12944.0,package delivered,2019-12-11 08:22:56.000Z, , , ,"['660757']", ,3.942,3697.97 +12945.0,reorder item,2019-12-11 08:26:18.000Z, ,"['884727']", , , ,1.48,199.99 +12946.0,send package,2019-12-11 08:37:35.000Z, , , ,"['660761']", ,3.644,2135.96 +12947.0,pick item,2019-12-11 08:38:20.000Z, ,"['884841']", , , ,0.483,495.0 +12948.0,send package,2019-12-11 08:42:29.000Z, , , ,"['660762']", ,9.205,6935.95 +12949.0,pick item,2019-12-11 08:54:42.000Z, ,"['884822']", , , ,1.48,199.99 +12950.0,failed delivery,2019-12-11 08:59:25.000Z, , , ,"['660761']", ,3.644,2135.96 +12951.0,send package,2019-12-11 09:00:45.000Z, , , ,"['660760']", ,5.61,2819.93 +12952.0,pick item,2019-12-11 09:03:46.000Z, ,"['884778']", , , ,0.38,29.99 +12953.0,confirm order,2019-12-11 09:06:59.000Z, , ,"['991188']", , ,1.495,789.98 +12954.0,reorder item,2019-12-11 09:17:32.000Z, ,"['884742']", , , ,0.44,476.0 +12955.0,pay order,2019-12-11 09:19:54.000Z, , ,"['991176']", , ,1.014,2431.99 +12956.0,pick item,2019-12-11 09:24:56.000Z, ,"['884840']", , , ,0.28,449.0 +12957.0,confirm order,2019-12-11 09:48:01.000Z, , ,"['991192']", , ,2.406,1567.98 +12958.0,place order,2019-12-11 09:48:41.000Z, ,"['884845','884847','884844','884846']","['991193']", , ,1.823,723.97 +12959.0,pick item,2019-12-11 10:19:07.000Z, ,"['884834']", , , ,1.37,2500.0 +12960.0,pay order,2019-12-11 10:31:35.000Z, , ,"['991185']", , ,2.999,3117.97 +12961.0,pick item,2019-12-11 10:32:36.000Z, ,"['884745']", , , ,1.25,2200.0 +12962.0,send package,2019-12-11 10:45:50.000Z, , , ,"['660758']", ,0.998,1976.99 +12963.0,pick item,2019-12-11 10:56:29.000Z, ,"['884833']", , , ,0.2,39.99 +12964.0,pay order,2019-12-11 10:56:48.000Z, , ,"['991177']", , ,4.39,2584.96 +12965.0,pick item,2019-12-11 11:03:05.000Z, ,"['884812']", , , ,0.28,89.99 +12966.0,pick item,2019-12-11 11:05:25.000Z, ,"['884618']", , , ,0.495,129.0 +12967.0,pick item,2019-12-11 11:05:27.000Z, ,"['884844']", , , ,0.483,79.99 +12968.0,package delivered,2019-12-11 11:09:13.000Z, , , ,"['660753']", ,4.953,3678.96 +12969.0,pick item,2019-12-11 11:11:48.000Z, ,"['884414']", , , ,0.2,39.99 +12970.0,pick item,2019-12-11 11:18:36.000Z, ,"['884828']", , , ,0.78,99.99 +12971.0,create package,2019-12-11 11:18:36.000Z, ,"['884672']", ,"['660763']", ,0.98,129.99 +12972.0,package delivered,2019-12-11 11:18:54.000Z, , , ,"['660760']", ,5.61,2819.93 +12973.0,confirm order,2019-12-11 11:30:25.000Z, , ,"['991189']", , ,2.652,1559.97 +12974.0,reorder item,2019-12-11 11:32:11.000Z, ,"['884810']", , , ,1.48,199.99 +12975.0,failed delivery,2019-12-11 11:56:01.000Z, , , ,"['660761']", ,3.644,2135.96 +12976.0,place order,2019-12-11 11:57:09.000Z, ,"['884848','884850','884849']","['991194']", , ,2.048,1373.98 +12977.0,reorder item,2019-12-11 11:57:40.000Z, ,"['884797']", , , ,0.88,89.99 +12978.0,pick item,2019-12-11 12:28:08.000Z, ,"['884835']", , , ,1.25,2200.0 +12979.0,create package,2019-12-11 12:28:08.000Z, ,"['884809','884632','884446','884812']", ,"['660764']", ,2.321,4837.99 +12980.0,pick item,2019-12-11 12:32:09.000Z, ,"['884746']", , , ,0.28,449.0 +12981.0,confirm order,2019-12-11 12:32:15.000Z, , ,"['991190']", , ,4.096,2742.96 +12982.0,confirm order,2019-12-11 12:42:57.000Z, , ,"['991191']", , ,6.27,5342.96 +12983.0,pick item,2019-12-11 12:54:45.000Z, ,"['884831']", , , ,0.495,129.0 +12984.0,reorder item,2019-12-11 12:57:53.000Z, ,"['884808']", , , ,0.38,29.99 +12985.0,package delivered,2019-12-11 13:03:22.000Z, , , ,"['660758']", ,0.998,1976.99 +12986.0,pick item,2019-12-11 13:40:19.000Z, ,"['884756']", , , ,0.44,476.0 +12987.0,pay order,2019-12-11 13:44:01.000Z, , ,"['991164']", , ,1.041,962.99 +12988.0,package delivered,2019-12-11 13:51:27.000Z, , , ,"['660762']", ,9.205,6935.95 +12989.0,pick item,2019-12-11 13:56:40.000Z, ,"['884803']", , , ,0.483,495.0 +12990.0,create package,2019-12-11 13:56:40.000Z, ,"['884548','884623']", ,"['660765']", ,0.48,129.98 +12991.0,pick item,2019-12-11 14:11:47.000Z, ,"['884839']", , , ,0.88,89.99 +12992.0,place order,2019-12-11 14:14:06.000Z, ,"['884855','884856','884851','884854','884852','884857','884853']","['991195']", , ,3.847,6945.99 +12993.0,confirm order,2019-12-11 14:17:09.000Z, , ,"['991194']", , ,2.048,1373.98 +12994.0,failed delivery,2019-12-11 14:19:50.000Z, , , ,"['660756']", ,4.4430000000000005,1597.93 +12995.0,pick item,2019-12-11 14:21:38.000Z, ,"['884791']", , , ,0.98,129.99 +12996.0,create package,2019-12-11 14:21:38.000Z, ,"['884720','884698']", ,"['660766']", ,0.98,139.98 +12997.0,confirm order,2019-12-11 14:25:04.000Z, , ,"['991195']", , ,3.847,6945.99 +12998.0,pick item,2019-12-11 14:27:44.000Z, ,"['884807']", , , ,0.188,1149.0 +12999.0,pick item,2019-12-11 14:29:04.000Z, ,"['884594']", , , ,0.21,529.0 +13000.0,create package,2019-12-11 14:29:04.000Z, ,"['884676','884746']", ,"['660767']", ,0.49,978.0 +13001.0,pick item,2019-12-11 14:29:52.000Z, ,"['884854']", , , ,1.28,149.99 +13002.0,pick item,2019-12-11 14:32:55.000Z, ,"['884811']", , , ,0.483,495.0 +13003.0,create package,2019-12-11 14:32:55.000Z, ,"['884414','884794']", ,"['660768']", ,0.58,69.98 +13004.0,send package,2019-12-11 14:33:38.000Z, , , ,"['660764']", ,2.321,4837.99 +13005.0,pick item,2019-12-11 14:34:36.000Z, ,"['884749']", , , ,0.28,449.0 +13006.0,reorder item,2019-12-11 14:39:23.000Z, ,"['884795']", , , ,0.172,699.0 +13007.0,pick item,2019-12-11 15:14:32.000Z, ,"['884818']", , , ,0.44,476.0 +13008.0,create package,2019-12-11 15:14:32.000Z, ,"['884614','884776','884777','884778','884205','884815','884854']", ,"['660769']", ,4.806,7526.98 +13009.0,pick item,2019-12-11 15:22:45.000Z, ,"['884593']", , , ,0.188,1149.0 +13010.0,send package,2019-12-11 15:23:00.000Z, , , ,"['660766']", ,0.98,139.98 +13011.0,pay order,2019-12-11 15:23:22.000Z, , ,"['991181']", , ,2.612,1392.98 +13012.0,pick item,2019-12-11 15:33:03.000Z, ,"['884813']", , , ,0.88,89.99 +13013.0,pick item,2019-12-11 15:44:42.000Z, ,"['884710']", , , ,0.166,799.0 +13014.0,place order,2019-12-11 15:47:59.000Z, ,"['884859','884858']","['991196']", , ,1.65,2954.0 +13015.0,pay order,2019-12-11 15:53:37.000Z, , ,"['991171']", , ,2.323,733.97 +13016.0,confirm order,2019-12-11 15:57:53.000Z, , ,"['991196']", , ,1.65,2954.0 +13017.0,send package,2019-12-11 16:03:29.000Z, , , ,"['660767']", ,0.49,978.0 +13018.0,pick item,2019-12-11 16:14:25.000Z, ,"['884748']", , , ,1.37,2500.0 +13019.0,pick item,2019-12-11 16:14:31.000Z, ,"['884817']", , , ,0.495,129.0 +13020.0,package delivered,2019-12-11 16:23:29.000Z, , , ,"['660759']", ,6.249,6936.97 +13021.0,pick item,2019-12-11 16:56:06.000Z, ,"['884848']", , , ,0.188,1149.0 +13022.0,item out of stock,2019-12-11 16:57:32.000Z, ,"['884851']", , , ,0.188,1149.0 +13023.0,pick item,2019-12-11 17:13:11.000Z, ,"['884856']", , , ,0.483,495.0 +13024.0,create package,2019-12-11 17:13:11.000Z, ,"['884805','884829','884818','884532','884825','884819','884117','884593','884828','884817','884594']", ,"['660770']", ,5.811,6341.95 +13025.0,send package,2019-12-11 17:14:27.000Z, , , ,"['660768']", ,0.58,69.98 +13026.0,failed delivery,2019-12-11 17:49:12.000Z, , , ,"['660766']", ,0.98,139.98 +13027.0,place order,2019-12-11 17:55:46.000Z, ,"['884860','884862','884861','884863']","['991197']", , ,1.4340000000000002,2177.99 +13028.0,pay order,2019-12-11 18:57:43.000Z, , ,"['991038']", , ,1.501,2111.97 +13029.0,pick item,2019-12-11 19:11:18.000Z, ,"['884781']", , , ,1.28,149.99 +13030.0,pick item,2019-12-11 20:34:22.000Z, ,"['884842']", , , ,0.28,449.0 +13031.0,send package,2019-12-11 20:38:49.000Z, , , ,"['660770']", ,5.811,6341.95 +13032.0,place order,2019-12-11 21:26:52.000Z, ,"['884868','884864','884866','884865','884867']","['991198']", , ,4.85,3420.97 +13033.0,send package,2019-12-12 07:34:48.000Z, , , ,"['660769']", ,4.806,7526.98 +13034.0,pick item,2019-12-12 07:39:05.000Z, ,"['884868']", , , ,0.28,89.99 +13035.0,package delivered,2019-12-12 07:40:58.000Z, , , ,"['660769']", ,4.806,7526.98 +13036.0,pick item,2019-12-12 07:44:04.000Z, ,"['884830']", , , ,0.78,99.99 +13037.0,place order,2019-12-12 07:45:19.000Z, ,"['884870','884875','884872','884873','884871','884874','884869']","['991199']", , ,4.769,4192.96 +13038.0,send package,2019-12-12 07:59:49.000Z, , , ,"['660763']", ,0.98,129.99 +13039.0,pick item,2019-12-12 08:11:59.000Z, ,"['884796']", , , ,1.28,149.99 +13040.0,pick item,2019-12-12 08:32:39.000Z, ,"['884855']", , , ,0.172,699.0 +13041.0,pick item,2019-12-12 08:44:18.000Z, ,"['884780']", , , ,1.25,2200.0 +13042.0,confirm order,2019-12-12 08:45:45.000Z, , ,"['991198']", , ,4.85,3420.97 +13043.0,confirm order,2019-12-12 09:14:57.000Z, , ,"['991199']", , ,4.769,4192.96 +13044.0,pick item,2019-12-12 09:16:30.000Z, ,"['884654']", , , ,1.25,2200.0 +13045.0,pay order,2019-12-12 09:18:30.000Z, , ,"['991180']", , ,0.38,34.99 +13046.0,payment reminder,2019-12-12 09:26:45.000Z, , ,"['991083']", , ,3.759,7581.0 +13047.0,pick item,2019-12-12 09:33:06.000Z, ,"['884865']", , , ,1.28,149.99 +13048.0,pick item,2019-12-12 09:46:53.000Z, ,"['884852']", , , ,0.166,799.0 +13049.0,pay order,2019-12-12 09:47:11.000Z, , ,"['991157']", , ,1.36,164.98 +13050.0,pick item,2019-12-12 09:57:15.000Z, ,"['884823']", , , ,0.44,476.0 +13051.0,create package,2019-12-12 09:57:15.000Z, ,"['884765','884780','884844','884783','884364','884833','884781','884834','884785','884831','884763','884835','884789','884309','884762']", ,"['660771']", ,12.579,10206.91 +13052.0,place order,2019-12-12 09:57:46.000Z, ,"['884876','884877','884878']","['991200']", , ,2.54,334.97 +13053.0,pick item,2019-12-12 10:03:04.000Z, ,"['884870']", , , ,0.483,79.99 +13054.0,package delivered,2019-12-12 10:26:49.000Z, , , ,"['660764']", ,2.321,4837.99 +13055.0,package delivered,2019-12-12 10:33:52.000Z, , , ,"['660761']", ,3.644,2135.96 +13056.0,failed delivery,2019-12-12 11:02:38.000Z, , , ,"['660763']", ,0.98,129.99 +13057.0,confirm order,2019-12-12 11:11:49.000Z, , ,"['991197']", , ,1.4340000000000002,2177.99 +13058.0,pick item,2019-12-12 11:37:28.000Z, ,"['884876']", , , ,0.98,129.99 +13059.0,item out of stock,2019-12-12 11:41:43.000Z, ,"['884861']", , , ,0.483,79.99 +13060.0,pay order,2019-12-12 11:46:04.000Z, , ,"['991195']", , ,3.847,6945.99 +13061.0,pick item,2019-12-12 11:56:39.000Z, ,"['884782']", , , ,0.2,39.99 +13062.0,pick item,2019-12-12 12:05:16.000Z, ,"['884736']", , , ,0.188,1149.0 +13063.0,place order,2019-12-12 12:15:20.000Z, ,"['884880','884879']","['991201']", , ,1.49,683.99 +13064.0,pick item,2019-12-12 12:29:25.000Z, ,"['884506']", , , ,0.21,529.0 +13065.0,package delivered,2019-12-12 12:52:45.000Z, , , ,"['660756']", ,4.4430000000000005,1597.93 +13066.0,package delivered,2019-12-12 12:54:58.000Z, , , ,"['660770']", ,5.811,6341.95 +13067.0,package delivered,2019-12-12 12:55:30.000Z, , , ,"['660768']", ,0.58,69.98 +13068.0,failed delivery,2019-12-12 13:03:53.000Z, , , ,"['660767']", ,0.49,978.0 +13069.0,payment reminder,2019-12-12 13:30:13.000Z, , ,"['991075']", , ,0.36,1853.0 +13070.0,reorder item,2019-12-12 13:47:11.000Z, ,"['884851']", , , ,0.188,1149.0 +13071.0,item out of stock,2019-12-12 13:48:02.000Z, ,"['884821']", , , ,0.172,699.0 +13072.0,place order,2019-12-12 13:50:27.000Z, ,"['884881','884883','884882']","['991202']", , ,1.643,679.98 +13073.0,pick item,2019-12-12 13:58:03.000Z, ,"['884766']", , , ,0.28,89.99 +13074.0,send package,2019-12-12 14:13:59.000Z, , , ,"['660765']", ,0.48,129.98 +13075.0,pick item,2019-12-12 14:21:54.000Z, ,"['884804']", , , ,0.44,476.0 +13076.0,pick item,2019-12-12 14:35:04.000Z, ,"['884837']", , , ,0.2,39.99 +13077.0,failed delivery,2019-12-12 14:35:59.000Z, , , ,"['660765']", ,0.48,129.98 +13078.0,pick item,2019-12-12 14:43:51.000Z, ,"['884779']", , , ,0.28,449.0 +13079.0,pick item,2019-12-12 14:59:16.000Z, ,"['884850']", , , ,0.98,129.99 +13080.0,confirm order,2019-12-12 15:01:01.000Z, , ,"['991200']", , ,2.54,334.97 +13081.0,confirm order,2019-12-12 15:02:31.000Z, , ,"['991202']", , ,1.643,679.98 +13082.0,payment reminder,2019-12-12 15:11:01.000Z, , ,"['991077']", , ,3.1830000000000003,1859.98 +13083.0,pick item,2019-12-12 15:16:32.000Z, ,"['884403']", , , ,0.166,799.0 +13084.0,failed delivery,2019-12-12 15:23:23.000Z, , , ,"['660763']", ,0.98,129.99 +13085.0,pay order,2019-12-12 15:31:59.000Z, , ,"['991163']", , ,3.4130000000000003,2824.97 +13086.0,pick item,2019-12-12 15:36:47.000Z, ,"['884860']", , , ,0.28,449.0 +13087.0,pay order,2019-12-12 15:38:22.000Z, , ,"['991143']", , ,1.485,392.0 +13088.0,pick item,2019-12-12 15:38:52.000Z, ,"['884862']", , , ,0.483,495.0 +13089.0,pick item,2019-12-12 15:41:27.000Z, ,"['884853']", , , ,0.188,1149.0 +13090.0,package delivered,2019-12-12 15:51:35.000Z, , , ,"['660767']", ,0.49,978.0 +13091.0,place order,2019-12-12 16:00:41.000Z, ,"['884888','884885','884887','884889','884886','884884']","['991203']", , ,2.387,1931.97 +13092.0,item out of stock,2019-12-12 16:03:33.000Z, ,"['884872']", , , ,0.166,799.0 +13093.0,pick item,2019-12-12 16:07:28.000Z, ,"['884638']", , , ,0.98,129.99 +13094.0,create package,2019-12-12 16:07:28.000Z, ,"['884860','884506','884774','884862','884773']", ,"['660772']", ,1.656,1592.98 +13095.0,pick item,2019-12-12 16:14:02.000Z, ,"['884661']", , , ,0.188,1149.0 +13096.0,pick item,2019-12-12 16:22:50.000Z, ,"['884871']", , , ,0.88,89.99 +13097.0,package delivered,2019-12-12 16:27:10.000Z, , , ,"['660765']", ,0.48,129.98 +13098.0,package delivered,2019-12-12 16:29:49.000Z, , , ,"['660766']", ,0.98,139.98 +13099.0,send package,2019-12-12 16:32:09.000Z, , , ,"['660771']", ,12.579,10206.91 +13100.0,pick item,2019-12-12 16:45:19.000Z, ,"['884886']", , , ,0.166,799.0 +13101.0,place order,2019-12-12 17:21:10.000Z, ,"['884898','884890','884899','884896','884892','884894','884891','884895','884900','884897','884893']","['991204']", , ,5.744,5538.96 +13102.0,pay order,2019-12-12 17:22:40.000Z, , ,"['991173']", , ,3.79,2574.97 +13103.0,reorder item,2019-12-12 18:06:13.000Z, ,"['884861']", , , ,0.483,79.99 +13104.0,pick item,2019-12-12 19:23:55.000Z, ,"['884895']", , , ,1.25,2200.0 +13105.0,place order,2019-12-12 19:43:05.000Z, ,"['884904','884901','884903','884902']","['991205']", , ,2.312,1372.98 +13106.0,place order,2019-12-13 00:36:24.000Z, ,"['884905','884906']","['991206']", , ,0.966,1599.0 +13107.0,failed delivery,2019-12-13 07:55:08.000Z, , , ,"['660771']", ,12.579,10206.91 +13108.0,confirm order,2019-12-13 08:14:15.000Z, , ,"['991206']", , ,0.966,1599.0 +13109.0,pick item,2019-12-13 08:22:10.000Z, ,"['884900']", , , ,0.38,29.99 +13110.0,create package,2019-12-13 08:22:10.000Z, ,"['884792','884745','884769','884716','884791','884793','884766']", ,"['660773']", ,4.956,3927.96 +13111.0,item out of stock,2019-12-13 08:25:08.000Z, ,"['884827']", , , ,0.188,1149.0 +13112.0,item out of stock,2019-12-13 08:27:44.000Z, ,"['884905']", , , ,0.483,1099.0 +13113.0,pick item,2019-12-13 08:28:42.000Z, ,"['884889']", , , ,0.495,129.0 +13114.0,pick item,2019-12-13 08:29:24.000Z, ,"['884826']", , , ,0.88,89.99 +13115.0,pick item,2019-12-13 08:40:11.000Z, ,"['884906']", , , ,0.483,495.0 +13116.0,place order,2019-12-13 08:47:49.000Z, ,"['884907']","['991207']", , ,0.28,454.0 +13117.0,pick item,2019-12-13 08:48:54.000Z, ,"['884742']", , , ,0.44,476.0 +13118.0,package delivered,2019-12-13 08:57:24.000Z, , , ,"['660771']", ,12.579,10206.91 +13119.0,pick item,2019-12-13 08:57:55.000Z, ,"['884897']", , , ,0.495,129.0 +13120.0,confirm order,2019-12-13 09:02:26.000Z, , ,"['991205']", , ,2.312,1372.98 +13121.0,pick item,2019-12-13 09:06:43.000Z, ,"['884717']", , , ,0.28,449.0 +13122.0,pay order,2019-12-13 09:17:17.000Z, , ,"['991059']", , ,0.446,893.99 +13123.0,send package,2019-12-13 09:40:37.000Z, , , ,"['660773']", ,4.956,3927.96 +13124.0,pick item,2019-12-13 09:43:17.000Z, ,"['884878']", , , ,0.78,99.99 +13125.0,create package,2019-12-13 09:43:17.000Z, ,"['884876','884802','884721','884906','884878','884803']", ,"['660774']", ,4.459,3499.97 +13126.0,reorder item,2019-12-13 09:43:59.000Z, ,"['884753']", , , ,0.2,39.99 +13127.0,pay order,2019-12-13 09:49:11.000Z, , ,"['991158']", , ,0.446,1253.0 +13128.0,pick item,2019-12-13 09:49:45.000Z, ,"['884893']", , , ,0.78,99.99 +13129.0,send package,2019-12-13 09:51:44.000Z, , , ,"['660772']", ,1.656,1592.98 +13130.0,item out of stock,2019-12-13 10:12:25.000Z, ,"['884891']", , , ,0.28,449.0 +13131.0,reorder item,2019-12-13 10:13:31.000Z, ,"['884872']", , , ,0.166,799.0 +13132.0,pick item,2019-12-13 10:13:51.000Z, ,"['884806']", , , ,0.38,29.99 +13133.0,pick item,2019-12-13 10:26:22.000Z, ,"['884845']", , , ,0.28,449.0 +13134.0,failed delivery,2019-12-13 10:27:04.000Z, , , ,"['660763']", ,0.98,129.99 +13135.0,pay order,2019-12-13 10:42:59.000Z, , ,"['991083']", , ,3.759,7581.0 +13136.0,place order,2019-12-13 10:55:26.000Z, ,"['884908']","['991208']", , ,0.98,134.99 +13137.0,confirm order,2019-12-13 10:56:41.000Z, , ,"['991204']", , ,5.744,5538.96 +13138.0,reorder item,2019-12-13 11:14:51.000Z, ,"['884703']", , , ,0.172,699.0 +13139.0,confirm order,2019-12-13 11:28:52.000Z, , ,"['991193']", , ,1.823,723.97 +13140.0,pick item,2019-12-13 11:31:59.000Z, ,"['884832']", , , ,1.48,199.99 +13141.0,pick item,2019-12-13 11:53:41.000Z, ,"['884838']", , , ,0.78,99.99 +13142.0,reorder item,2019-12-13 12:35:17.000Z, ,"['884891']", , , ,0.28,449.0 +13143.0,pick item,2019-12-13 12:53:17.000Z, ,"['884849']", , , ,0.88,89.99 +13144.0,create package,2019-12-13 12:53:17.000Z, ,"['884820','884822','884814','884654','884823','884403','884813']", ,"['660775']", ,4.936,4330.97 +13145.0,place order,2019-12-13 13:10:39.000Z, ,"['884916','884917','884911','884910','884913','884914','884919','884909','884912','884918','884915']","['991209']", , ,6.884,4546.94 +13146.0,pay order,2019-12-13 13:15:43.000Z, , ,"['991206']", , ,0.966,1599.0 +13147.0,pick item,2019-12-13 13:16:28.000Z, ,"['884914']", , , ,0.78,99.99 +13148.0,pick item,2019-12-13 13:23:30.000Z, ,"['884873']", , , ,1.37,2500.0 +13149.0,pick item,2019-12-13 13:29:48.000Z, ,"['884907']", , , ,0.28,449.0 +13150.0,confirm order,2019-12-13 13:34:28.000Z, , ,"['991201']", , ,1.49,683.99 +13151.0,pick item,2019-12-13 13:35:31.000Z, ,"['884877']", , , ,0.78,99.99 +13152.0,pick item,2019-12-13 13:51:15.000Z, ,"['884918']", , , ,0.98,129.99 +13153.0,pay order,2019-12-13 13:53:45.000Z, , ,"['991191']", , ,6.27,5342.96 +13154.0,reorder item,2019-12-13 14:16:28.000Z, ,"['884905']", , , ,0.483,1099.0 +13155.0,pick item,2019-12-13 14:23:06.000Z, ,"['884896']", , , ,0.172,699.0 +13156.0,pick item,2019-12-13 14:36:28.000Z, ,"['884573']", , , ,0.483,1099.0 +13157.0,create package,2019-12-13 14:36:28.000Z, ,"['884752','884749','884756','884840','884839','884841','884618','884842','884907']", ,"['660776']", ,4.298,3075.98 +13158.0,reorder item,2019-12-13 14:40:24.000Z, ,"['884827']", , , ,0.188,1149.0 +13159.0,place order,2019-12-13 14:41:06.000Z, ,"['884922','884921','884923','884920']","['991210']", , ,1.709,2092.98 +13160.0,pick item,2019-12-13 14:46:24.000Z, ,"['884883']", , , ,0.483,495.0 +13161.0,pick item,2019-12-13 14:56:37.000Z, ,"['884885']", , , ,0.166,799.0 +13162.0,confirm order,2019-12-13 15:06:33.000Z, , ,"['991203']", , ,2.387,1931.97 +13163.0,pick item,2019-12-13 15:19:26.000Z, ,"['884894']", , , ,0.166,799.0 +13164.0,pick item,2019-12-13 15:20:57.000Z, ,"['884869']", , , ,0.21,529.0 +13165.0,package delivered,2019-12-13 15:29:28.000Z, , , ,"['660772']", ,1.656,1592.98 +13166.0,failed delivery,2019-12-13 15:31:09.000Z, , , ,"['660763']", ,0.98,129.99 +13167.0,pick item,2019-12-13 15:32:42.000Z, ,"['884772']", , , ,1.28,149.99 +13168.0,pick item,2019-12-13 15:41:26.000Z, ,"['884880']", , , ,0.21,529.0 +13169.0,pick item,2019-12-13 15:46:02.000Z, ,"['884903']", , , ,0.172,699.0 +13170.0,send package,2019-12-13 15:58:35.000Z, , , ,"['660776']", ,4.298,3075.98 +13171.0,pay order,2019-12-13 15:58:49.000Z, , ,"['991144']", , ,3.69,2484.97 +13172.0,pick item,2019-12-13 16:01:54.000Z, ,"['884884']", , , ,0.38,29.99 +13173.0,pick item,2019-12-13 16:07:51.000Z, ,"['884709']", , , ,0.28,449.0 +13174.0,create package,2019-12-13 16:07:51.000Z, ,"['884811','884807','884661']", ,"['660777']", ,0.8590000000000001,2793.0 +13175.0,pick item,2019-12-13 16:17:50.000Z, ,"['884132']", , , ,0.38,29.99 +13176.0,pick item,2019-12-13 16:20:30.000Z, ,"['884843']", , , ,0.483,79.99 +13177.0,item out of stock,2019-12-13 16:22:09.000Z, ,"['884864']", , , ,1.48,199.99 +13178.0,confirm order,2019-12-13 16:40:46.000Z, , ,"['991208']", , ,0.98,134.99 +13179.0,place order,2019-12-13 16:41:59.000Z, ,"['884924','884927','884925','884926']","['991211']", , ,1.946,2342.98 +13180.0,pick item,2019-12-13 17:02:38.000Z, ,"['884824']", , , ,0.28,89.99 +13181.0,create package,2019-12-13 17:02:38.000Z, ,"['884855','884779','884856','884710','884852','884709','884853']", ,"['660778']", ,1.735,4839.0 +13182.0,package delivered,2019-12-13 17:04:31.000Z, , , ,"['660773']", ,4.956,3927.96 +13183.0,send package,2019-12-13 17:31:09.000Z, , , ,"['660775']", ,4.936,4330.97 +13184.0,pick item,2019-12-13 17:54:28.000Z, ,"['884836']", , , ,0.495,129.0 +13185.0,place order,2019-12-13 18:45:32.000Z, ,"['884929','884931','884932','884928','884930']","['991212']", , ,4.915,5373.98 +13186.0,confirm order,2019-12-13 20:12:55.000Z, , ,"['991212']", , ,4.915,5373.98 +13187.0,item out of stock,2019-12-13 20:25:55.000Z, ,"['884898']", , , ,0.166,799.0 +13188.0,package delivered,2019-12-13 21:42:58.000Z, , , ,"['660776']", ,4.298,3075.98 +13189.0,place order,2019-12-13 22:10:39.000Z, ,"['884933','884934','884935']","['991213']", , ,1.426,1382.99 +13190.0,place order,2019-12-14 20:31:45.000Z, ,"['884938','884936','884937']","['991214']", , ,2.14,314.97 +13191.0,place order,2019-12-15 20:51:18.000Z, ,"['884943','884941','884942','884940','884939']","['991215']", , ,2.215,1398.97 +13192.0,create package,2019-12-15 23:00:00.000Z, ,"['884748']", ,"['660779']", ,1.37,2500.0 +13193.0,confirm order,2019-12-16 08:02:17.000Z, , ,"['991209']", , ,6.884,4546.94 +13194.0,pick item,2019-12-16 08:02:43.000Z, ,"['884901']", , , ,0.88,89.99 +13195.0,pick item,2019-12-16 08:03:05.000Z, ,"['884902']", , , ,0.28,449.0 +13196.0,item out of stock,2019-12-16 08:19:26.000Z, ,"['884857']", , , ,1.37,2500.0 +13197.0,item out of stock,2019-12-16 08:29:36.000Z, ,"['884913']", , , ,0.28,89.99 +13198.0,place order,2019-12-16 08:46:48.000Z, ,"['884946','884945','884944','884948','884947']","['991216']", , ,2.609,783.96 +13199.0,item out of stock,2019-12-16 08:56:44.000Z, ,"['884944']", , , ,0.28,449.0 +13200.0,pick item,2019-12-16 09:09:41.000Z, ,"['884062']", , , ,0.28,89.99 +13201.0,failed delivery,2019-12-16 09:25:19.000Z, , , ,"['660775']", ,4.936,4330.97 +13202.0,pick item,2019-12-16 09:31:55.000Z, ,"['884912']", , , ,1.28,149.99 +13203.0,confirm order,2019-12-16 09:32:53.000Z, , ,"['991214']", , ,2.14,314.97 +13204.0,reorder item,2019-12-16 09:42:36.000Z, ,"['884864']", , , ,1.48,199.99 +13205.0,pick item,2019-12-16 09:42:46.000Z, ,"['884929']", , , ,0.495,129.0 +13206.0,pick item,2019-12-16 09:54:59.000Z, ,"['884920']", , , ,0.78,99.99 +13207.0,send package,2019-12-16 10:07:00.000Z, , , ,"['660779']", ,1.37,2500.0 +13208.0,payment reminder,2019-12-16 10:11:41.000Z, , ,"['991102']", , ,1.28,154.99 +13209.0,item out of stock,2019-12-16 10:14:09.000Z, ,"['884859']", , , ,1.37,2500.0 +13210.0,item out of stock,2019-12-16 10:21:33.000Z, ,"['884887']", , , ,0.98,129.99 +13211.0,package delivered,2019-12-16 10:27:32.000Z, , , ,"['660779']", ,1.37,2500.0 +13212.0,pay order,2019-12-16 10:27:44.000Z, , ,"['991190']", , ,4.096,2742.96 +13213.0,pick item,2019-12-16 10:35:26.000Z, ,"['884730']", , , ,0.28,89.99 +13214.0,create package,2019-12-16 10:35:26.000Z, ,"['884903','884796','884638','884848','884850','884902','884901','884849']", ,"['660780']", ,5.64,2886.95 +13215.0,place order,2019-12-16 10:53:24.000Z, ,"['884954','884955','884950','884949','884952','884953','884951','884956']","['991217']", , ,5.647,3096.96 +13216.0,pick item,2019-12-16 10:55:33.000Z, ,"['884910']", , , ,0.2,39.99 +13217.0,payment reminder,2019-12-16 11:00:02.000Z, , ,"['990985']", , ,3.512,1123.97 +13218.0,send package,2019-12-16 11:08:53.000Z, , , ,"['660778']", ,1.735,4839.0 +13219.0,confirm order,2019-12-16 11:16:28.000Z, , ,"['991215']", , ,2.215,1398.97 +13220.0,pick item,2019-12-16 11:28:06.000Z, ,"['884932']", , , ,1.37,2500.0 +13221.0,pay order,2019-12-16 11:28:38.000Z, , ,"['991169']", , ,4.585,3112.97 +13222.0,pick item,2019-12-16 11:35:34.000Z, ,"['884927']", , , ,0.78,99.99 +13223.0,pick item,2019-12-16 11:36:43.000Z, ,"['884939']", , , ,0.2,39.99 +13224.0,pick item,2019-12-16 11:41:49.000Z, ,"['884928']", , , ,0.2,39.99 +13225.0,pick item,2019-12-16 11:43:54.000Z, ,"['884931']", , , ,1.48,199.99 +13226.0,pick item,2019-12-16 11:54:22.000Z, ,"['884941']", , , ,0.172,699.0 +13227.0,pick item,2019-12-16 11:57:21.000Z, ,"['884952']", , , ,0.166,799.0 +13228.0,create package,2019-12-16 11:57:21.000Z, ,"['884830','884804','884871','884826','884806','884868','884870','884865','884869','884873']", ,"['660781']", ,6.983,4134.93 +13229.0,pick item,2019-12-16 12:23:03.000Z, ,"['884933']", , , ,0.166,799.0 +13230.0,pick item,2019-12-16 12:44:30.000Z, ,"['884863']", , , ,0.188,1149.0 +13231.0,confirm order,2019-12-16 12:51:54.000Z, , ,"['991207']", , ,0.28,454.0 +13232.0,place order,2019-12-16 13:06:35.000Z, ,"['884958','884957']","['991218']", , ,0.48,493.99 +13233.0,reorder item,2019-12-16 13:22:47.000Z, ,"['884887']", , , ,0.98,129.99 +13234.0,pick item,2019-12-16 13:31:03.000Z, ,"['884887']", , , ,0.98,129.99 +13235.0,pick item,2019-12-16 13:38:13.000Z, ,"['884915']", , , ,0.98,129.99 +13236.0,package delivered,2019-12-16 13:42:03.000Z, , , ,"['660775']", ,4.936,4330.97 +13237.0,item out of stock,2019-12-16 13:45:20.000Z, ,"['884938']", , , ,0.98,129.99 +13238.0,confirm order,2019-12-16 13:47:44.000Z, , ,"['991216']", , ,2.609,783.96 +13239.0,pick item,2019-12-16 14:11:50.000Z, ,"['884724']", , , ,0.495,129.0 +13240.0,send package,2019-12-16 14:15:45.000Z, , , ,"['660774']", ,4.459,3499.97 +13241.0,pick item,2019-12-16 14:18:45.000Z, ,"['884916']", , , ,0.483,1099.0 +13242.0,pick item,2019-12-16 14:22:10.000Z, ,"['884636']", , , ,0.166,799.0 +13243.0,package delivered,2019-12-16 14:22:19.000Z, , , ,"['660778']", ,1.735,4839.0 +13244.0,place order,2019-12-16 14:32:58.000Z, ,"['884960','884959']","['991219']", , ,1.56,204.98 +13245.0,pick item,2019-12-16 14:36:31.000Z, ,"['884946']", , , ,0.483,79.99 +13246.0,pick item,2019-12-16 14:38:17.000Z, ,"['884816']", , , ,0.28,89.99 +13247.0,package delivered,2019-12-16 14:51:14.000Z, , , ,"['660763']", ,0.98,129.99 +13248.0,item out of stock,2019-12-16 15:17:45.000Z, ,"['884899']", , , ,0.78,99.99 +13249.0,pay order,2019-12-16 15:17:55.000Z, , ,"['990999']", , ,1.152,833.99 +13250.0,pick item,2019-12-16 15:20:08.000Z, ,"['884874']", , , ,0.78,99.99 +13251.0,create package,2019-12-16 15:20:08.000Z, ,"['884845','884952','884832','884782','884742','884838','884837','884836']", ,"['660782']", ,4.041,2232.96 +13252.0,pick item,2019-12-16 15:26:26.000Z, ,"['884764']", , , ,0.188,1149.0 +13253.0,item out of stock,2019-12-16 15:28:37.000Z, ,"['884922']", , , ,0.28,89.99 +13254.0,confirm order,2019-12-16 15:39:33.000Z, , ,"['991213']", , ,1.426,1382.99 +13255.0,confirm order,2019-12-16 15:48:10.000Z, , ,"['991210']", , ,1.709,2092.98 +13256.0,send package,2019-12-16 16:07:06.000Z, , , ,"['660780']", ,5.64,2886.95 +13257.0,pick item,2019-12-16 16:07:25.000Z, ,"['884921']", , , ,0.166,799.0 +13258.0,pick item,2019-12-16 16:09:35.000Z, ,"['884890']", , , ,0.495,129.0 +13259.0,pick item,2019-12-16 16:10:51.000Z, ,"['884093']", , , ,0.166,799.0 +13260.0,package delivered,2019-12-16 16:13:35.000Z, , , ,"['660774']", ,4.459,3499.97 +13261.0,pick item,2019-12-16 16:15:44.000Z, ,"['884943']", , , ,0.98,129.99 +13262.0,pick item,2019-12-16 16:20:56.000Z, ,"['884926']", , , ,0.483,1099.0 +13263.0,place order,2019-12-16 16:25:43.000Z, ,"['884961','884962','884964','884963']","['991220']", , ,1.386,1637.99 +13264.0,confirm order,2019-12-16 16:26:10.000Z, , ,"['991217']", , ,5.647,3096.96 +13265.0,pay order,2019-12-16 16:33:07.000Z, , ,"['991193']", , ,1.823,723.97 +13266.0,payment reminder,2019-12-16 16:39:37.000Z, , ,"['991096']", , ,1.57,2544.99 +13267.0,pick item,2019-12-16 16:48:24.000Z, ,"['884951']", , , ,1.48,199.99 +13268.0,item out of stock,2019-12-16 16:51:05.000Z, ,"['884911']", , , ,0.495,129.0 +13269.0,pay order,2019-12-16 16:54:37.000Z, , ,"['991189']", , ,2.652,1559.97 +13270.0,pick item,2019-12-16 17:50:23.000Z, ,"['884953']", , , ,0.98,129.99 +13271.0,create package,2019-12-16 17:50:23.000Z, ,"['884736','884730']", ,"['660783']", ,0.468,1238.99 +13272.0,place order,2019-12-16 18:11:13.000Z, ,"['884965','884967','884966','884970','884969','884968']","['991221']", , ,4.3180000000000005,6498.99 +13273.0,send package,2019-12-16 18:37:17.000Z, , , ,"['660781']", ,6.983,4134.93 +13274.0,reorder item,2019-12-16 18:37:27.000Z, ,"['884938']", , , ,0.98,129.99 +13275.0,pick item,2019-12-16 19:54:14.000Z, ,"['884179']", , , ,0.2,39.99 +13276.0,pick item,2019-12-16 20:21:16.000Z, ,"['884881']", , , ,0.28,89.99 +13277.0,create package,2019-12-16 20:21:16.000Z, ,"['884890','884889','884896','884881','884062','884894','884885','884884','884900','884895','884897','884893','884887','884886','884883']", ,"['660784']", ,6.968,6647.94 +13278.0,place order,2019-12-16 21:02:01.000Z, ,"['884972','884971','884974','884973']","['991222']", , ,1.628,2141.99 +13279.0,place order,2019-12-17 06:30:00.000Z, ,"['884977','884978','884975','884976','884979','884980']","['991223']", , ,3.523,4392.97 +13280.0,package delivered,2019-12-17 07:40:59.000Z, , , ,"['660780']", ,5.64,2886.95 +13281.0,pick item,2019-12-17 07:48:05.000Z, ,"['884945']", , , ,0.88,89.99 +13282.0,pick item,2019-12-17 08:06:25.000Z, ,"['884971']", , , ,0.88,89.99 +13283.0,send package,2019-12-17 08:10:31.000Z, , , ,"['660777']", ,0.8590000000000001,2793.0 +13284.0,confirm order,2019-12-17 08:30:23.000Z, , ,"['991222']", , ,1.628,2141.99 +13285.0,pick item,2019-12-17 08:40:42.000Z, ,"['884888']", , , ,0.2,39.99 +13286.0,payment reminder,2019-12-17 08:48:02.000Z, , ,"['990995']", , ,1.452,853.99 +13287.0,pick item,2019-12-17 09:09:31.000Z, ,"['884917']", , , ,0.44,476.0 +13288.0,pay order,2019-12-17 09:10:28.000Z, , ,"['991179']", , ,1.651,1363.98 +13289.0,place order,2019-12-17 09:16:48.000Z, ,"['884982','884981']","['991224']", , ,0.935,610.0 +13290.0,item out of stock,2019-12-17 09:16:57.000Z, ,"['884974']", , , ,0.188,1149.0 +13291.0,send package,2019-12-17 09:17:53.000Z, , , ,"['660782']", ,4.041,2232.96 +13292.0,package delivered,2019-12-17 09:21:04.000Z, , , ,"['660781']", ,6.983,4134.93 +13293.0,pick item,2019-12-17 09:21:35.000Z, ,"['884437']", , , ,0.483,1099.0 +13294.0,pick item,2019-12-17 09:28:08.000Z, ,"['884909']", , , ,0.483,1099.0 +13295.0,pick item,2019-12-17 09:48:00.000Z, ,"['884959']", , , ,0.78,99.99 +13296.0,pick item,2019-12-17 10:00:45.000Z, ,"['884964']", , , ,0.21,529.0 +13297.0,pick item,2019-12-17 10:01:42.000Z, ,"['884962']", , , ,0.483,495.0 +13298.0,pick item,2019-12-17 10:09:18.000Z, ,"['884938']", , , ,0.98,129.99 +13299.0,pick item,2019-12-17 10:09:43.000Z, ,"['884940']", , , ,0.483,495.0 +13300.0,pick item,2019-12-17 10:20:16.000Z, ,"['884975']", , , ,0.21,529.0 +13301.0,pick item,2019-12-17 10:21:22.000Z, ,"['884827']", , , ,0.188,1149.0 +13302.0,pay order,2019-12-17 10:30:15.000Z, , ,"['991205']", , ,2.312,1372.98 +13303.0,pick item,2019-12-17 10:34:25.000Z, ,"['884934']", , , ,0.28,449.0 +13304.0,confirm order,2019-12-17 10:35:32.000Z, , ,"['991220']", , ,1.386,1637.99 +13305.0,pick item,2019-12-17 10:36:20.000Z, ,"['884960']", , , ,0.78,99.99 +13306.0,create package,2019-12-17 10:36:20.000Z, ,"['884916','884717','884917','884910','884914','884909','884912','884918','884915']", ,"['660785']", ,5.9060000000000015,3672.95 +13307.0,pay order,2019-12-17 10:41:17.000Z, , ,"['991178']", , ,2.8560000000000003,1942.96 +13308.0,reorder item,2019-12-17 10:47:30.000Z, ,"['884911']", , , ,0.495,129.0 +13309.0,payment reminder,2019-12-17 10:48:47.000Z, , ,"['991109']", , ,1.84,334.97 +13310.0,place order,2019-12-17 10:53:23.000Z, ,"['884985','884984','884983']","['991225']", , ,1.463,1243.98 +13311.0,reorder item,2019-12-17 10:58:24.000Z, ,"['884857']", , , ,1.37,2500.0 +13312.0,pick item,2019-12-17 11:01:51.000Z, ,"['884966']", , , ,0.495,129.0 +13313.0,pick item,2019-12-17 11:02:31.000Z, ,"['884858']", , , ,0.28,449.0 +13314.0,send package,2019-12-17 11:17:23.000Z, , , ,"['660783']", ,0.468,1238.99 +13315.0,pick item,2019-12-17 11:21:43.000Z, ,"['884846']", , , ,0.78,99.99 +13316.0,pick item,2019-12-17 11:22:56.000Z, ,"['884977']", , , ,0.28,89.99 +13317.0,pay order,2019-12-17 11:34:41.000Z, , ,"['991183']", , ,0.966,579.99 +13318.0,pick item,2019-12-17 11:37:17.000Z, ,"['884923']", , , ,0.483,1099.0 +13319.0,pay order,2019-12-17 12:04:49.000Z, , ,"['991109']", , ,1.84,334.97 +13320.0,payment reminder,2019-12-17 12:14:28.000Z, , ,"['991112']", , ,5.803,6559.95 +13321.0,pick item,2019-12-17 12:15:11.000Z, ,"['884930']", , , ,1.37,2500.0 +13322.0,pick item,2019-12-17 12:31:29.000Z, ,"['884753']", , , ,0.2,39.99 +13323.0,pick item,2019-12-17 12:37:19.000Z, ,"['884958']", , , ,0.2,39.99 +13324.0,send package,2019-12-17 13:03:31.000Z, , , ,"['660784']", ,6.968,6647.94 +13325.0,place order,2019-12-17 13:06:34.000Z, ,"['884986','884987']","['991226']", , ,1.3630000000000002,1193.99 +13326.0,pick item,2019-12-17 13:30:08.000Z, ,"['884905']", , , ,0.483,1099.0 +13327.0,create package,2019-12-17 13:30:08.000Z, ,"['884905','884877','884724','884132']", ,"['660786']", ,2.138,1357.98 +13328.0,pick item,2019-12-17 13:34:12.000Z, ,"['884702']", , , ,1.37,2500.0 +13329.0,confirm order,2019-12-17 13:44:04.000Z, , ,"['991225']", , ,1.463,1243.98 +13330.0,item out of stock,2019-12-17 13:53:30.000Z, ,"['884904']", , , ,0.98,129.99 +13331.0,pick item,2019-12-17 13:59:22.000Z, ,"['884861']", , , ,0.483,79.99 +13332.0,failed delivery,2019-12-17 14:03:58.000Z, , , ,"['660777']", ,0.8590000000000001,2793.0 +13333.0,send package,2019-12-17 14:09:42.000Z, , , ,"['660785']", ,5.9060000000000015,3672.95 +13334.0,failed delivery,2019-12-17 14:13:51.000Z, , , ,"['660782']", ,4.041,2232.96 +13335.0,pick item,2019-12-17 14:17:56.000Z, ,"['884972']", , , ,0.28,449.0 +13336.0,package delivered,2019-12-17 14:18:36.000Z, , , ,"['660782']", ,4.041,2232.96 +13337.0,pick item,2019-12-17 14:21:09.000Z, ,"['884985']", , , ,0.483,1099.0 +13338.0,create package,2019-12-17 14:21:09.000Z, ,"['884573','884824','884772']", ,"['660787']", ,2.043,1338.98 +13339.0,pick item,2019-12-17 14:21:41.000Z, ,"['884955']", , , ,0.495,129.0 +13340.0,place order,2019-12-17 14:32:55.000Z, ,"['884993','884989','884994','884988','884992','884990','884991']","['991227']", , ,2.77,3019.98 +13341.0,package delivered,2019-12-17 14:36:21.000Z, , , ,"['660777']", ,0.8590000000000001,2793.0 +13342.0,pick item,2019-12-17 14:41:07.000Z, ,"['884988']", , , ,0.483,1099.0 +13343.0,failed delivery,2019-12-17 14:43:39.000Z, , , ,"['660785']", ,5.9060000000000015,3672.95 +13344.0,item out of stock,2019-12-17 14:49:46.000Z, ,"['884979']", , , ,0.483,1099.0 +13345.0,pick item,2019-12-17 14:50:42.000Z, ,"['884948']", , , ,0.483,79.99 +13346.0,create package,2019-12-17 14:50:42.000Z, ,"['884927','884880','884926']", ,"['660788']", ,1.473,1727.99 +13347.0,confirm order,2019-12-17 14:52:42.000Z, , ,"['991226']", , ,1.3630000000000002,1193.99 +13348.0,pick item,2019-12-17 15:01:55.000Z, ,"['884982']", , , ,0.495,129.0 +13349.0,item out of stock,2019-12-17 15:06:34.000Z, ,"['884867']", , , ,1.37,2500.0 +13350.0,package delivered,2019-12-17 15:14:42.000Z, , , ,"['660784']", ,6.968,6647.94 +13351.0,reorder item,2019-12-17 15:16:39.000Z, ,"['884867']", , , ,1.37,2500.0 +13352.0,reorder item,2019-12-17 15:20:24.000Z, ,"['884859']", , , ,1.37,2500.0 +13353.0,pay order,2019-12-17 15:22:28.000Z, , ,"['991213']", , ,1.426,1382.99 +13354.0,pick item,2019-12-17 15:28:13.000Z, ,"['884935']", , , ,0.98,129.99 +13355.0,item out of stock,2019-12-17 15:29:02.000Z, ,"['884942']", , , ,0.38,29.99 +13356.0,confirm order,2019-12-17 15:36:50.000Z, , ,"['991218']", , ,0.48,493.99 +13357.0,pick item,2019-12-17 15:42:55.000Z, ,"['884810']", , , ,1.48,199.99 +13358.0,create package,2019-12-17 15:42:55.000Z, ,"['884843','884753','884985']", ,"['660789']", ,1.166,1218.98 +13359.0,pick item,2019-12-17 15:46:10.000Z, ,"['884954']", , , ,0.483,1099.0 +13360.0,pay order,2019-12-17 15:59:21.000Z, , ,"['990823']", , ,3.143,454.96 +13361.0,pick item,2019-12-17 16:07:45.000Z, ,"['884808']", , , ,0.38,29.99 +13362.0,pick item,2019-12-17 16:16:08.000Z, ,"['884969']", , , ,0.483,1099.0 +13363.0,create package,2019-12-17 16:16:08.000Z, ,"['884943','884932','884941','884939','884928','884940','884931','884988','884863','884929','884930','884861']", ,"['660790']", ,7.904,9060.95 +13364.0,item out of stock,2019-12-17 16:16:34.000Z, ,"['884992']", , , ,0.172,699.0 +13365.0,reorder item,2019-12-17 16:20:51.000Z, ,"['884979']", , , ,0.483,1099.0 +13366.0,send package,2019-12-17 16:22:17.000Z, , , ,"['660788']", ,1.473,1727.99 +13367.0,place order,2019-12-17 16:25:37.000Z, ,"['884996','884995']","['991228']", , ,1.86,224.98 +13368.0,confirm order,2019-12-17 16:39:30.000Z, , ,"['991228']", , ,1.86,224.98 +13369.0,send package,2019-12-17 16:41:49.000Z, , , ,"['660787']", ,2.043,1338.98 +13370.0,package delivered,2019-12-17 17:04:01.000Z, , , ,"['660785']", ,5.9060000000000015,3672.95 +13371.0,place order,2019-12-17 18:11:02.000Z, ,"['884998','884997','885000','884999']","['991229']", , ,2.632,1043.97 +13372.0,pay order,2019-12-17 19:07:30.000Z, , ,"['991214']", , ,2.14,314.97 +13373.0,item out of stock,2019-12-17 19:38:37.000Z, ,"['884973']", , , ,0.28,449.0 +13374.0,item out of stock,2019-12-17 19:53:22.000Z, ,"['884925']", , , ,0.483,1099.0 +13375.0,pay order,2019-12-17 20:27:34.000Z, , ,"['991096']", , ,1.57,2544.99 +13376.0,place order,2019-12-17 21:01:39.000Z, ,"['885003','885001','885002']","['991230']", , ,2.426,1103.98 +13377.0,place order,2019-12-18 06:27:48.000Z, ,"['885004','885012','885005','885013','885015','885007','885011','885010','885016','885014','885006','885008','885009']","['991231']", , ,11.003,12180.95 +13378.0,item out of stock,2019-12-18 07:32:45.000Z, ,"['885004']", , , ,0.495,129.0 +13379.0,item out of stock,2019-12-18 07:49:34.000Z, ,"['885011']", , , ,1.25,2200.0 +13380.0,item out of stock,2019-12-18 07:56:38.000Z, ,"['884847']", , , ,0.28,89.99 +13381.0,pick item,2019-12-18 07:58:52.000Z, ,"['885003']", , , ,0.78,99.99 +13382.0,pick item,2019-12-18 08:21:26.000Z, ,"['884995']", , , ,0.88,89.99 +13383.0,confirm order,2019-12-18 08:39:40.000Z, , ,"['991230']", , ,2.426,1103.98 +13384.0,pick item,2019-12-18 08:47:10.000Z, ,"['884981']", , , ,0.44,476.0 +13385.0,reorder item,2019-12-18 08:49:08.000Z, ,"['884942']", , , ,0.38,29.99 +13386.0,pay order,2019-12-18 08:52:37.000Z, , ,"['991050']", , ,2.886,2274.99 +13387.0,pick item,2019-12-18 08:56:16.000Z, ,"['884993']", , , ,0.28,449.0 +13388.0,pick item,2019-12-18 08:57:08.000Z, ,"['885008']", , , ,1.28,149.99 +13389.0,package delivered,2019-12-18 08:59:47.000Z, , , ,"['660787']", ,2.043,1338.98 +13390.0,package delivered,2019-12-18 09:10:04.000Z, , , ,"['660783']", ,0.468,1238.99 +13391.0,pick item,2019-12-18 09:13:59.000Z, ,"['884987']", , , ,0.88,89.99 +13392.0,place order,2019-12-18 09:14:22.000Z, ,"['885017','885018']","['991232']", , ,2.46,334.98 +13393.0,payment reminder,2019-12-18 09:16:15.000Z, , ,"['991117']", , ,2.272,1369.98 +13394.0,confirm order,2019-12-18 09:21:58.000Z, , ,"['991232']", , ,2.46,334.98 +13395.0,pick item,2019-12-18 09:26:32.000Z, ,"['884950']", , , ,1.28,149.99 +13396.0,pick item,2019-12-18 09:35:36.000Z, ,"['885012']", , , ,1.37,2500.0 +13397.0,pay order,2019-12-18 09:38:00.000Z, , ,"['991112']", , ,5.803,6559.95 +13398.0,pick item,2019-12-18 09:51:15.000Z, ,"['885005']", , , ,1.48,199.99 +13399.0,confirm order,2019-12-18 09:53:22.000Z, , ,"['991229']", , ,2.632,1043.97 +13400.0,item out of stock,2019-12-18 10:04:11.000Z, ,"['885015']", , , ,0.98,129.99 +13401.0,pick item,2019-12-18 10:16:34.000Z, ,"['885006']", , , ,0.21,529.0 +13402.0,confirm order,2019-12-18 10:29:53.000Z, , ,"['991221']", , ,4.3180000000000005,6498.99 +13403.0,reorder item,2019-12-18 10:37:02.000Z, ,"['884898']", , , ,0.166,799.0 +13404.0,package delivered,2019-12-18 10:42:08.000Z, , , ,"['660788']", ,1.473,1727.99 +13405.0,pick item,2019-12-18 10:45:59.000Z, ,"['885002']", , , ,1.48,199.99 +13406.0,place order,2019-12-18 10:48:31.000Z, ,"['885019','885022','885023','885025','885020','885024','885021']","['991233']", , ,4.18,2741.96 +13407.0,pick item,2019-12-18 10:56:54.000Z, ,"['885007']", , , ,1.37,2500.0 +13408.0,create package,2019-12-18 10:56:54.000Z, ,"['884934','884935','885012','884933','885005','884958','885007','884923','885006','884921','885008','884920']", ,"['660791']", ,8.765,9294.95 +13409.0,item out of stock,2019-12-18 10:58:44.000Z, ,"['884875']", , , ,0.88,89.99 +13410.0,item out of stock,2019-12-18 11:01:11.000Z, ,"['884937']", , , ,0.28,89.99 +13411.0,item out of stock,2019-12-18 11:01:59.000Z, ,"['884997']", , , ,0.172,699.0 +13412.0,send package,2019-12-18 11:12:45.000Z, , , ,"['660790']", ,7.904,9060.95 +13413.0,confirm order,2019-12-18 11:15:43.000Z, , ,"['991231']", , ,11.003,12180.95 +13414.0,pick item,2019-12-18 11:31:30.000Z, ,"['884980']", , , ,1.37,2500.0 +13415.0,pay order,2019-12-18 11:41:09.000Z, , ,"['991225']", , ,1.463,1243.98 +13416.0,send package,2019-12-18 11:46:21.000Z, , , ,"['660786']", ,2.138,1357.98 +13417.0,item out of stock,2019-12-18 11:46:32.000Z, ,"['884990']", , , ,0.78,99.99 +13418.0,send package,2019-12-18 11:53:54.000Z, , , ,"['660789']", ,1.166,1218.98 +13419.0,confirm order,2019-12-18 12:10:04.000Z, , ,"['991219']", , ,1.56,204.98 +13420.0,pick item,2019-12-18 12:19:20.000Z, ,"['885019']", , , ,0.172,699.0 +13421.0,pay order,2019-12-18 12:34:47.000Z, , ,"['991229']", , ,2.632,1043.97 +13422.0,reorder item,2019-12-18 12:36:59.000Z, ,"['884992']", , , ,0.172,699.0 +13423.0,reorder item,2019-12-18 12:39:27.000Z, ,"['884997']", , , ,0.172,699.0 +13424.0,pick item,2019-12-18 12:53:36.000Z, ,"['884998']", , , ,1.48,199.99 +13425.0,pick item,2019-12-18 12:54:28.000Z, ,"['884976']", , , ,0.98,129.99 +13426.0,place order,2019-12-18 12:56:50.000Z, ,"['885027','885026']","['991234']", , ,0.66,483.99 +13427.0,pick item,2019-12-18 13:00:05.000Z, ,"['884440']", , , ,1.28,149.99 +13428.0,pick item,2019-12-18 13:05:31.000Z, ,"['884978']", , , ,0.2,39.99 +13429.0,pick item,2019-12-18 13:09:14.000Z, ,"['884983']", , , ,0.2,39.99 +13430.0,package delivered,2019-12-18 13:21:52.000Z, , , ,"['660790']", ,7.904,9060.95 +13431.0,pay order,2019-12-18 13:22:23.000Z, , ,"['991075']", , ,0.36,1853.0 +13432.0,pick item,2019-12-18 13:25:18.000Z, ,"['884494']", , , ,0.172,699.0 +13433.0,pick item,2019-12-18 13:32:27.000Z, ,"['884957']", , , ,0.28,449.0 +13434.0,pick item,2019-12-18 13:37:18.000Z, ,"['884597']", , , ,0.98,129.99 +13435.0,pick item,2019-12-18 13:40:12.000Z, ,"['884499']", , , ,0.28,89.99 +13436.0,pick item,2019-12-18 13:47:52.000Z, ,"['884683']", , , ,0.483,1099.0 +13437.0,create package,2019-12-18 13:47:52.000Z, ,"['884808','884636','884810']", ,"['660792']", ,2.026,1028.98 +13438.0,pick item,2019-12-18 13:50:14.000Z, ,"['884986']", , , ,0.483,1099.0 +13439.0,package delivered,2019-12-18 13:53:04.000Z, , , ,"['660786']", ,2.138,1357.98 +13440.0,pick item,2019-12-18 14:07:07.000Z, ,"['884984']", , , ,0.78,99.99 +13441.0,pay order,2019-12-18 14:07:37.000Z, , ,"['991231']", , ,11.003,12180.95 +13442.0,pick item,2019-12-18 14:08:27.000Z, ,"['884949']", , , ,0.483,495.0 +13443.0,create package,2019-12-18 14:08:27.000Z, ,"['884945','884179','884827','884874','884946','884966','884948','884816','884969']", ,"['660793']", ,4.272,2856.94 +13444.0,payment reminder,2019-12-18 14:20:47.000Z, , ,"['991119']", , ,2.24,2833.99 +13445.0,item out of stock,2019-12-18 14:23:44.000Z, ,"['884892']", , , ,0.78,99.99 +13446.0,pick item,2019-12-18 14:30:32.000Z, ,"['884867']", , , ,1.37,2500.0 +13447.0,confirm order,2019-12-18 14:30:53.000Z, , ,"['991233']", , ,4.18,2741.96 +13448.0,item out of stock,2019-12-18 14:37:04.000Z, ,"['884879']", , , ,1.28,149.99 +13449.0,package delivered,2019-12-18 14:41:40.000Z, , , ,"['660789']", ,1.166,1218.98 +13450.0,item out of stock,2019-12-18 14:42:20.000Z, ,"['884989']", , , ,0.28,89.99 +13451.0,pick item,2019-12-18 14:52:17.000Z, ,"['884688']", , , ,1.25,2200.0 +13452.0,place order,2019-12-18 15:13:27.000Z, ,"['885029','885030','885028']","['991235']", , ,1.855,293.98 +13453.0,item out of stock,2019-12-18 15:13:58.000Z, ,"['885014']", , , ,0.2,39.99 +13454.0,pick item,2019-12-18 15:15:33.000Z, ,"['885010']", , , ,0.78,99.99 +13455.0,pick item,2019-12-18 15:16:45.000Z, ,"['885022']", , , ,1.28,149.99 +13456.0,send package,2019-12-18 15:17:35.000Z, , , ,"['660792']", ,2.026,1028.98 +13457.0,pick item,2019-12-18 15:18:40.000Z, ,"['885026']", , , ,0.38,29.99 +13458.0,pick item,2019-12-18 15:22:13.000Z, ,"['884866']", , , ,0.44,476.0 +13459.0,pick item,2019-12-18 15:23:48.000Z, ,"['884522']", , , ,0.483,1099.0 +13460.0,item out of stock,2019-12-18 15:52:52.000Z, ,"['885021']", , , ,0.188,1149.0 +13461.0,pick item,2019-12-18 15:58:21.000Z, ,"['884997']", , , ,0.172,699.0 +13462.0,pay order,2019-12-18 16:07:50.000Z, , ,"['991187']", , ,1.37,2505.0 +13463.0,send package,2019-12-18 16:07:52.000Z, , , ,"['660791']", ,8.765,9294.95 +13464.0,confirm order,2019-12-18 16:41:15.000Z, , ,"['991227']", , ,2.77,3019.98 +13465.0,place order,2019-12-18 16:46:41.000Z, ,"['885031']","['991236']", , ,1.28,154.99 +13466.0,confirm order,2019-12-18 16:58:09.000Z, , ,"['991234']", , ,0.66,483.99 +13467.0,pick item,2019-12-18 17:29:59.000Z, ,"['885016']", , , ,1.25,2200.0 +13468.0,create package,2019-12-18 17:29:59.000Z, ,"['884955','884764','884954','884949','884950','884846','884953','884951','884683']", ,"['660794']", ,6.652,4550.96 +13469.0,pay order,2019-12-18 17:36:33.000Z, , ,"['991212']", , ,4.915,5373.98 +13470.0,reorder item,2019-12-18 18:00:05.000Z, ,"['884913']", , , ,0.28,89.99 +13471.0,place order,2019-12-18 18:59:38.000Z, ,"['885033','885032','885034']","['991237']", , ,1.15,1328.0 +13472.0,pick item,2019-12-18 20:20:38.000Z, ,"['884882']", , , ,0.88,89.99 +13473.0,confirm order,2019-12-18 20:49:53.000Z, , ,"['991237']", , ,1.15,1328.0 +13474.0,place order,2019-12-18 22:38:51.000Z, ,"['885037','885036','885039','885035','885040','885038']","['991238']", , ,2.878,2053.97 +13475.0,package delivered,2019-12-19 07:19:47.000Z, , , ,"['660792']", ,2.026,1028.98 +13476.0,package delivered,2019-12-19 07:36:20.000Z, , , ,"['660791']", ,8.765,9294.95 +13477.0,pick item,2019-12-19 07:42:21.000Z, ,"['884965']", , , ,1.37,2500.0 +13478.0,pick item,2019-12-19 07:48:46.000Z, ,"['885028']", , , ,0.98,129.99 +13479.0,reorder item,2019-12-19 07:56:43.000Z, ,"['884937']", , , ,0.28,89.99 +13480.0,pick item,2019-12-19 08:14:54.000Z, ,"['884795']", , , ,0.172,699.0 +13481.0,pick item,2019-12-19 08:15:17.000Z, ,"['884518']", , , ,1.48,199.99 +13482.0,reorder item,2019-12-19 08:30:27.000Z, ,"['884944']", , , ,0.28,449.0 +13483.0,pay order,2019-12-19 08:35:12.000Z, , ,"['991150']", , ,2.305,2513.98 +13484.0,reorder item,2019-12-19 08:36:51.000Z, ,"['884974']", , , ,0.188,1149.0 +13485.0,place order,2019-12-19 08:38:12.000Z, ,"['885045','885046','885044','885042','885041','885043']","['991239']", , ,3.579,2883.98 +13486.0,pay order,2019-12-19 08:39:15.000Z, , ,"['991204']", , ,5.744,5538.96 +13487.0,item out of stock,2019-12-19 08:41:39.000Z, ,"['884991']", , , ,0.495,129.0 +13488.0,pick item,2019-12-19 08:50:25.000Z, ,"['885023']", , , ,1.28,149.99 +13489.0,item out of stock,2019-12-19 08:55:08.000Z, ,"['885030']", , , ,0.495,129.0 +13490.0,pick item,2019-12-19 08:59:47.000Z, ,"['884924']", , , ,0.2,39.99 +13491.0,pick item,2019-12-19 09:15:44.000Z, ,"['885034']", , , ,0.495,129.0 +13492.0,pick item,2019-12-19 09:16:58.000Z, ,"['884970']", , , ,0.28,89.99 +13493.0,create package,2019-12-19 09:16:58.000Z, ,"['884977','884976','884938','884093','884518','884978','884522','884980','884975']", ,"['660795']", ,6.149,5516.95 +13494.0,pick item,2019-12-19 09:21:50.000Z, ,"['884956']", , , ,0.28,89.99 +13495.0,pick item,2019-12-19 09:32:55.000Z, ,"['885001']", , , ,0.166,799.0 +13496.0,reorder item,2019-12-19 09:36:47.000Z, ,"['884847']", , , ,0.28,89.99 +13497.0,pick item,2019-12-19 09:59:23.000Z, ,"['885032']", , , ,0.172,699.0 +13498.0,pay order,2019-12-19 10:07:13.000Z, , ,"['991218']", , ,0.48,493.99 +13499.0,pay order,2019-12-19 10:18:04.000Z, , ,"['991119']", , ,2.24,2833.99 +13500.0,pick item,2019-12-19 10:28:36.000Z, ,"['885044']", , , ,1.48,199.99 +13501.0,place order,2019-12-19 10:36:12.000Z, ,"['885047']","['991240']", , ,0.2,44.99 +13502.0,pay order,2019-12-19 10:39:14.000Z, , ,"['991044']", , ,0.966,1183.99 +13503.0,reorder item,2019-12-19 10:54:31.000Z, ,"['885004']", , , ,0.495,129.0 +13504.0,reorder item,2019-12-19 11:01:16.000Z, ,"['884922']", , , ,0.28,89.99 +13505.0,item out of stock,2019-12-19 11:03:22.000Z, ,"['885013']", , , ,0.172,699.0 +13506.0,reorder item,2019-12-19 11:26:21.000Z, ,"['884879']", , , ,1.28,149.99 +13507.0,pay order,2019-12-19 11:42:13.000Z, , ,"['991142']", , ,2.15,2604.99 +13508.0,confirm order,2019-12-19 11:52:13.000Z, , ,"['991224']", , ,0.935,610.0 +13509.0,confirm order,2019-12-19 12:07:52.000Z, , ,"['991223']", , ,3.523,4392.97 +13510.0,payment reminder,2019-12-19 12:30:18.000Z, , ,"['991125']", , ,1.671,1841.99 +13511.0,place order,2019-12-19 12:32:11.000Z, ,"['885049','885050','885048']","['991241']", , ,1.76,1046.99 +13512.0,pay order,2019-12-19 13:17:07.000Z, , ,"['991188']", , ,1.495,789.98 +13513.0,item out of stock,2019-12-19 13:24:51.000Z, ,"['885041']", , , ,0.483,495.0 +13514.0,pick item,2019-12-19 13:35:55.000Z, ,"['885042']", , , ,0.44,476.0 +13515.0,confirm order,2019-12-19 13:46:26.000Z, , ,"['991235']", , ,1.855,293.98 +13516.0,pay order,2019-12-19 13:49:11.000Z, , ,"['991058']", , ,4.695,2710.96 +13517.0,pick item,2019-12-19 13:54:24.000Z, ,"['885038']", , , ,0.78,99.99 +13518.0,reorder item,2019-12-19 14:05:50.000Z, ,"['884904']", , , ,0.98,129.99 +13519.0,item out of stock,2019-12-19 14:08:32.000Z, ,"['885017']", , , ,0.98,129.99 +13520.0,place order,2019-12-19 14:24:09.000Z, ,"['885051','885052']","['991242']", , ,1.65,2954.0 +13521.0,send package,2019-12-19 14:27:34.000Z, , , ,"['660793']", ,4.272,2856.94 +13522.0,pick item,2019-12-19 14:29:20.000Z, ,"['885025']", , , ,0.2,39.99 +13523.0,confirm order,2019-12-19 14:30:25.000Z, , ,"['991236']", , ,1.28,154.99 +13524.0,pay order,2019-12-19 14:36:09.000Z, , ,"['991200']", , ,2.54,334.97 +13525.0,send package,2019-12-19 15:00:36.000Z, , , ,"['660795']", ,6.149,5516.95 +13526.0,pay order,2019-12-19 15:09:14.000Z, , ,"['991228']", , ,1.86,224.98 +13527.0,confirm order,2019-12-19 15:18:06.000Z, , ,"['991239']", , ,3.579,2883.98 +13528.0,confirm order,2019-12-19 15:20:17.000Z, , ,"['991238']", , ,2.878,2053.97 +13529.0,pay order,2019-12-19 15:27:50.000Z, , ,"['991102']", , ,1.28,154.99 +13530.0,payment reminder,2019-12-19 15:32:09.000Z, , ,"['991124']", , ,0.38,34.99 +13531.0,reorder item,2019-12-19 15:33:43.000Z, ,"['884973']", , , ,0.28,449.0 +13532.0,pay order,2019-12-19 15:35:38.000Z, , ,"['991196']", , ,1.65,2954.0 +13533.0,package delivered,2019-12-19 15:55:46.000Z, , , ,"['660793']", ,4.272,2856.94 +13534.0,package delivered,2019-12-19 15:58:29.000Z, , , ,"['660795']", ,6.149,5516.95 +13535.0,send package,2019-12-19 16:02:11.000Z, , , ,"['660794']", ,6.652,4550.96 +13536.0,place order,2019-12-19 16:08:06.000Z, ,"['885053','885054']","['991243']", , ,2.23,2334.99 +13537.0,pick item,2019-12-19 16:21:35.000Z, ,"['884908']", , , ,0.98,129.99 +13538.0,reorder item,2019-12-19 16:21:38.000Z, ,"['884875']", , , ,0.88,89.99 +13539.0,confirm order,2019-12-19 17:18:22.000Z, , ,"['991242']", , ,1.65,2954.0 +13540.0,confirm order,2019-12-19 17:24:51.000Z, , ,"['991240']", , ,0.2,44.99 +13541.0,reorder item,2019-12-19 17:35:11.000Z, ,"['885021']", , , ,0.188,1149.0 +13542.0,place order,2019-12-19 17:35:59.000Z, ,"['885056','885055','885057']","['991244']", , ,2.228,2829.0 +13543.0,pick item,2019-12-19 17:47:46.000Z, ,"['884913']", , , ,0.28,89.99 +13544.0,create package,2019-12-19 17:47:46.000Z, ,"['884972','884971','884702','885038']", ,"['660796']", ,3.31,3138.98 +13545.0,pay order,2019-12-19 17:49:13.000Z, , ,"['991148']", , ,2.915,1760.97 +13546.0,reorder item,2019-12-19 18:05:40.000Z, ,"['885014']", , , ,0.2,39.99 +13547.0,reorder item,2019-12-19 18:07:04.000Z, ,"['885011']", , , ,1.25,2200.0 +13548.0,pay order,2019-12-19 18:09:06.000Z, , ,"['991207']", , ,0.28,454.0 +13549.0,pick item,2019-12-19 18:13:30.000Z, ,"['885009']", , , ,0.166,799.0 +13550.0,pick item,2019-12-19 18:17:51.000Z, ,"['885035']", , , ,0.483,79.99 +13551.0,pick item,2019-12-19 19:48:21.000Z, ,"['885039']", , , ,0.483,79.99 +13552.0,place order,2019-12-19 20:27:32.000Z, ,"['885060','885058','885059']","['991245']", , ,2.215,759.99 +13553.0,place order,2019-12-20 04:03:06.000Z, ,"['885063','885062','885061']","['991246']", , ,2.2030000000000003,710.98 +13554.0,pick item,2019-12-20 07:40:13.000Z, ,"['884968']", , , ,1.25,2200.0 +13555.0,create package,2019-12-20 07:40:13.000Z, ,"['884960','884888','884959','884858','884882']", ,"['660797']", ,2.92,778.96 +13556.0,send package,2019-12-20 07:56:14.000Z, , , ,"['660796']", ,3.31,3138.98 +13557.0,pick item,2019-12-20 08:02:40.000Z, ,"['885024']", , , ,0.28,449.0 +13558.0,pick item,2019-12-20 08:23:50.000Z, ,"['885057']", , , ,0.495,129.0 +13559.0,pick item,2019-12-20 08:29:42.000Z, ,"['884947']", , , ,0.483,79.99 +13560.0,place order,2019-12-20 08:35:12.000Z, ,"['885064','885066','885067','885065']","['991247']", , ,1.649,2737.99 +13561.0,confirm order,2019-12-20 08:42:21.000Z, , ,"['991243']", , ,2.23,2334.99 +13562.0,reorder item,2019-12-20 08:45:16.000Z, ,"['884821']", , , ,0.172,699.0 +13563.0,pick item,2019-12-20 08:49:26.000Z, ,"['884675']", , , ,0.78,99.99 +13564.0,reorder item,2019-12-20 09:15:36.000Z, ,"['885030']", , , ,0.495,129.0 +13565.0,reorder item,2019-12-20 09:23:35.000Z, ,"['885041']", , , ,0.483,495.0 +13566.0,confirm order,2019-12-20 09:33:52.000Z, , ,"['991244']", , ,2.228,2829.0 +13567.0,pick item,2019-12-20 09:50:46.000Z, ,"['885055']", , , ,0.483,495.0 +13568.0,create package,2019-12-20 09:50:46.000Z, ,"['884437','884440']", ,"['660798']", ,1.763,1248.99 +13569.0,pick item,2019-12-20 10:15:10.000Z, ,"['885045']", , , ,0.21,529.0 +13570.0,place order,2019-12-20 10:30:11.000Z, ,"['885068','885071','885070','885069']","['991248']", , ,0.944,2778.0 +13571.0,confirm order,2019-12-20 10:38:53.000Z, , ,"['991241']", , ,1.76,1046.99 +13572.0,reorder item,2019-12-20 10:40:06.000Z, ,"['884899']", , , ,0.78,99.99 +13573.0,item out of stock,2019-12-20 10:51:22.000Z, ,"['884936']", , , ,0.88,89.99 +13574.0,pay order,2019-12-20 11:07:21.000Z, , ,"['991239']", , ,3.579,2883.98 +13575.0,pick item,2019-12-20 11:16:42.000Z, ,"['885060']", , , ,1.28,149.99 +13576.0,create package,2019-12-20 11:16:42.000Z, ,"['884962','884964','884688']", ,"['660799']", ,1.943,3224.0 +13577.0,pick item,2019-12-20 11:29:51.000Z, ,"['884961']", , , ,0.21,529.0 +13578.0,pick item,2019-12-20 11:31:28.000Z, ,"['885065']", , , ,0.2,39.99 +13579.0,pay order,2019-12-20 11:32:56.000Z, , ,"['991234']", , ,0.66,483.99 +13580.0,item out of stock,2019-12-20 11:49:21.000Z, ,"['885040']", , , ,0.483,495.0 +13581.0,place order,2019-12-20 12:20:10.000Z, ,"['885073','885074','885072','885075']","['991249']", , ,2.523,1238.98 +13582.0,pick item,2019-12-20 12:32:23.000Z, ,"['885046']", , , ,0.483,79.99 +13583.0,create package,2019-12-20 12:32:23.000Z, ,"['884913','884982','884986','884987','884981']", ,"['660800']", ,2.5780000000000003,1883.98 +13584.0,pick item,2019-12-20 12:55:11.000Z, ,"['885071']", , , ,0.166,799.0 +13585.0,item out of stock,2019-12-20 13:13:08.000Z, ,"['885047']", , , ,0.2,39.99 +13586.0,pick item,2019-12-20 13:14:32.000Z, ,"['885068']", , , ,0.166,799.0 +13587.0,package delivered,2019-12-20 13:39:23.000Z, , , ,"['660794']", ,6.652,4550.96 +13588.0,confirm order,2019-12-20 13:51:34.000Z, , ,"['991245']", , ,2.215,759.99 +13589.0,pick item,2019-12-20 13:54:00.000Z, ,"['884703']", , , ,0.172,699.0 +13590.0,reorder item,2019-12-20 13:56:09.000Z, ,"['884936']", , , ,0.88,89.99 +13591.0,pick item,2019-12-20 13:56:51.000Z, ,"['885049']", , , ,0.88,89.99 +13592.0,place order,2019-12-20 14:00:07.000Z, ,"['885078','885077','885079','885076']","['991250']", , ,3.82,903.97 +13593.0,confirm order,2019-12-20 14:03:11.000Z, , ,"['991246']", , ,2.2030000000000003,710.98 +13594.0,confirm order,2019-12-20 14:16:13.000Z, , ,"['991250']", , ,3.82,903.97 +13595.0,confirm order,2019-12-20 14:19:17.000Z, , ,"['991249']", , ,2.523,1238.98 +13596.0,item out of stock,2019-12-20 14:24:29.000Z, ,"['884996']", , , ,0.98,129.99 +13597.0,send package,2019-12-20 14:25:11.000Z, , , ,"['660800']", ,2.5780000000000003,1883.98 +13598.0,pick item,2019-12-20 14:58:44.000Z, ,"['885073']", , , ,0.483,495.0 +13599.0,create package,2019-12-20 14:58:44.000Z, ,"['884924','884494','885003','885001','885002']", ,"['660801']", ,2.798,1837.97 +13600.0,reorder item,2019-12-20 15:08:18.000Z, ,"['885047']", , , ,0.2,39.99 +13601.0,item out of stock,2019-12-20 15:09:58.000Z, ,"['885076']", , , ,0.28,449.0 +13602.0,place order,2019-12-20 15:20:02.000Z, ,"['885080','885082','885083','885081']","['991251']", , ,4.392,5903.99 +13603.0,reorder item,2019-12-20 15:23:39.000Z, ,"['885015']", , , ,0.98,129.99 +13604.0,pick item,2019-12-20 15:41:00.000Z, ,"['884864']", , , ,1.48,199.99 +13605.0,item out of stock,2019-12-20 15:45:11.000Z, ,"['885037']", , , ,0.483,495.0 +13606.0,pick item,2019-12-20 15:46:31.000Z, ,"['885077']", , , ,1.48,199.99 +13607.0,pick item,2019-12-20 15:50:42.000Z, ,"['885050']", , , ,0.44,476.0 +13608.0,send package,2019-12-20 15:52:10.000Z, , , ,"['660797']", ,2.92,778.96 +13609.0,pay order,2019-12-20 15:52:19.000Z, , ,"['991224']", , ,0.935,610.0 +13610.0,pick item,2019-12-20 15:52:32.000Z, ,"['885069']", , , ,0.172,699.0 +13611.0,item out of stock,2019-12-20 15:53:49.000Z, ,"['884963']", , , ,0.483,79.99 +13612.0,confirm order,2019-12-20 15:56:28.000Z, , ,"['991211']", , ,1.946,2342.98 +13613.0,reorder item,2019-12-20 15:57:59.000Z, ,"['885017']", , , ,0.98,129.99 +13614.0,pick item,2019-12-20 16:07:25.000Z, ,"['885067']", , , ,0.483,1099.0 +13615.0,create package,2019-12-20 16:07:25.000Z, ,"['884995','884993']", ,"['660802']", ,1.16,538.99 +13616.0,reorder item,2019-12-20 16:10:43.000Z, ,"['885040']", , , ,0.483,495.0 +13617.0,pick item,2019-12-20 16:17:15.000Z, ,"['884994']", , , ,0.28,449.0 +13618.0,pick item,2019-12-20 16:26:23.000Z, ,"['885070']", , , ,0.44,476.0 +13619.0,create package,2019-12-20 16:26:23.000Z, ,"['885019','885022','884998','885023','885025','884795','884997','885024']", ,"['660803']", ,5.0360000000000005,3085.96 +13620.0,item out of stock,2019-12-20 16:42:45.000Z, ,"['885059']", , , ,0.44,476.0 +13621.0,send package,2019-12-20 16:50:11.000Z, , , ,"['660802']", ,1.16,538.99 +13622.0,place order,2019-12-20 16:59:51.000Z, ,"['885085','885084','885086']","['991252']", , ,2.026,1023.98 +13623.0,pick item,2019-12-20 17:15:40.000Z, ,"['885058']", , , ,0.495,129.0 +13624.0,send package,2019-12-20 17:18:34.000Z, , , ,"['660801']", ,2.798,1837.97 +13625.0,package delivered,2019-12-20 17:24:56.000Z, , , ,"['660796']", ,3.31,3138.98 +13626.0,reorder item,2019-12-20 17:26:09.000Z, ,"['884989']", , , ,0.28,89.99 +13627.0,pick item,2019-12-20 17:37:56.000Z, ,"['885043']", , , ,0.483,1099.0 +13628.0,pick item,2019-12-20 17:40:14.000Z, ,"['885056']", , , ,1.25,2200.0 +13629.0,pick item,2019-12-20 17:47:11.000Z, ,"['885075']", , , ,0.28,449.0 +13630.0,package delivered,2019-12-20 18:23:53.000Z, , , ,"['660802']", ,1.16,538.99 +13631.0,reorder item,2019-12-20 19:06:34.000Z, ,"['885037']", , , ,0.483,495.0 +13632.0,place order,2019-12-20 19:39:08.000Z, ,"['885088','885087','885089','885090']","['991253']", , ,2.0380000000000003,1781.99 +13633.0,pick item,2019-12-20 20:27:01.000Z, ,"['885014']", , , ,0.2,39.99 +13634.0,pick item,2019-12-20 20:55:58.000Z, ,"['884650']", , , ,0.78,99.99 +13635.0,create package,2019-12-20 23:00:00.000Z, ,"['885026','884984','884597','885032','885034','884983']", ,"['660804']", ,3.007,1127.96 +13636.0,place order,2019-12-21 05:14:48.000Z, ,"['885095','885091','885094','885096','885092','885093']","['991254']", , ,5.002,8694.0 +13637.0,payment reminder,2019-12-21 09:45:53.000Z, , ,"['991009']", , ,2.613,3578.98 +13638.0,place order,2019-12-22 04:28:37.000Z, ,"['885099','885098','885097']","['991255']", , ,0.87,1012.99 +13639.0,payment reminder,2019-12-22 09:07:21.000Z, , ,"['991134']", , ,3.275,5899.0 +13640.0,payment reminder,2019-12-22 09:25:32.000Z, , ,"['991126']", , ,3.198,4272.97 +13641.0,payment reminder,2019-12-22 09:55:38.000Z, , ,"['990996']", , ,5.919,4572.96 +13642.0,payment reminder,2019-12-22 09:58:48.000Z, , ,"['991131']", , ,2.516,3433.99 +13643.0,payment reminder,2019-12-22 14:24:47.000Z, , ,"['991136']", , ,1.273,1098.98 +13644.0,payment reminder,2019-12-22 16:03:43.000Z, , ,"['991137']", , ,5.348,6223.97 +13645.0,place order,2019-12-22 23:55:23.000Z, ,"['885102','885100','885101','885103']","['991256']", , ,2.134,3481.99 +13646.0,pick item,2019-12-23 07:42:55.000Z, ,"['884989']", , , ,0.28,89.99 +13647.0,pick item,2019-12-23 07:47:07.000Z, ,"['885036']", , , ,0.166,799.0 +13648.0,package delivered,2019-12-23 08:09:01.000Z, , , ,"['660797']", ,2.92,778.96 +13649.0,reorder item,2019-12-23 08:13:21.000Z, ,"['885076']", , , ,0.28,449.0 +13650.0,pick item,2019-12-23 08:16:42.000Z, ,"['885076']", , , ,0.28,449.0 +13651.0,confirm order,2019-12-23 08:23:27.000Z, , ,"['991251']", , ,4.392,5903.99 +13652.0,pick item,2019-12-23 08:26:50.000Z, ,"['885097']", , , ,0.28,449.0 +13653.0,reorder item,2019-12-23 08:28:32.000Z, ,"['884990']", , , ,0.78,99.99 +13654.0,confirm order,2019-12-23 08:41:21.000Z, , ,"['991248']", , ,0.944,2778.0 +13655.0,send package,2019-12-23 08:52:32.000Z, , , ,"['660799']", ,1.943,3224.0 +13656.0,pick item,2019-12-23 08:53:24.000Z, ,"['885041']", , , ,0.483,495.0 +13657.0,reorder item,2019-12-23 08:55:09.000Z, ,"['885013']", , , ,0.172,699.0 +13658.0,item out of stock,2019-12-23 08:56:28.000Z, ,"['885095']", , , ,1.25,2200.0 +13659.0,send package,2019-12-23 08:58:11.000Z, , , ,"['660804']", ,3.007,1127.96 +13660.0,send package,2019-12-23 08:59:12.000Z, , , ,"['660803']", ,5.0360000000000005,3085.96 +13661.0,place order,2019-12-23 09:02:42.000Z, ,"['885105','885104','885106','885107']","['991257']", , ,2.7880000000000003,4209.0 +13662.0,pick item,2019-12-23 09:23:18.000Z, ,"['885020']", , , ,0.78,99.99 +13663.0,confirm order,2019-12-23 09:46:16.000Z, , ,"['991257']", , ,2.7880000000000003,4209.0 +13664.0,confirm order,2019-12-23 10:01:19.000Z, , ,"['991256']", , ,2.134,3481.99 +13665.0,pick item,2019-12-23 10:07:24.000Z, ,"['885105']", , , ,1.37,2500.0 +13666.0,package delivered,2019-12-23 10:18:13.000Z, , , ,"['660801']", ,2.798,1837.97 +13667.0,pick item,2019-12-23 10:22:16.000Z, ,"['885086']", , , ,0.88,89.99 +13668.0,create package,2019-12-23 10:22:16.000Z, ,"['884908','884957','885028','885010','885016','885014','885009']", ,"['660805']", ,4.636,3847.96 +13669.0,place order,2019-12-23 10:25:12.000Z, ,"['885108','885111','885110','885109']","['991258']", , ,2.24,783.97 +13670.0,reorder item,2019-12-23 10:26:02.000Z, ,"['884892']", , , ,0.78,99.99 +13671.0,pick item,2019-12-23 10:27:54.000Z, ,"['885094']", , , ,0.483,495.0 +13672.0,item out of stock,2019-12-23 10:39:24.000Z, ,"['885091']", , , ,1.25,2200.0 +13673.0,pick item,2019-12-23 10:50:41.000Z, ,"['885033']", , , ,0.483,495.0 +13674.0,pick item,2019-12-23 11:10:15.000Z, ,"['885072']", , , ,0.28,89.99 +13675.0,pick item,2019-12-23 11:10:26.000Z, ,"['884922']", , , ,0.28,89.99 +13676.0,pick item,2019-12-23 11:27:34.000Z, ,"['885018']", , , ,1.48,199.99 +13677.0,send package,2019-12-23 11:28:06.000Z, , , ,"['660798']", ,1.763,1248.99 +13678.0,failed delivery,2019-12-23 11:30:21.000Z, , , ,"['660799']", ,1.943,3224.0 +13679.0,send package,2019-12-23 11:40:56.000Z, , , ,"['660805']", ,4.636,3847.96 +13680.0,confirm order,2019-12-23 11:46:39.000Z, , ,"['991252']", , ,2.026,1023.98 +13681.0,item out of stock,2019-12-23 11:53:45.000Z, ,"['885066']", , , ,0.483,1099.0 +13682.0,place order,2019-12-23 12:10:11.000Z, ,"['885115','885116','885112','885113','885114']","['991259']", , ,3.703,464.95 +13683.0,package delivered,2019-12-23 12:11:24.000Z, , , ,"['660803']", ,5.0360000000000005,3085.96 +13684.0,pick item,2019-12-23 12:15:57.000Z, ,"['884879']", , , ,1.28,149.99 +13685.0,pick item,2019-12-23 12:40:38.000Z, ,"['884859']", , , ,1.37,2500.0 +13686.0,create package,2019-12-23 12:40:38.000Z, ,"['884499','885105']", ,"['660806']", ,1.65,2589.99 +13687.0,reorder item,2019-12-23 12:58:10.000Z, ,"['885095']", , , ,1.25,2200.0 +13688.0,pick item,2019-12-23 13:04:25.000Z, ,"['884919']", , , ,0.483,1099.0 +13689.0,pick item,2019-12-23 13:32:15.000Z, ,"['885021']", , , ,0.188,1149.0 +13690.0,create package,2019-12-23 13:32:15.000Z, ,"['884965','884866','884864','884970','884947','884968','884867']", ,"['660807']", ,6.672999999999999,8045.97 +13691.0,place order,2019-12-23 13:40:09.000Z, ,"['885117']","['991260']", , ,0.483,84.99 +13692.0,confirm order,2019-12-23 13:41:28.000Z, , ,"['991259']", , ,3.703,464.95 +13693.0,failed delivery,2019-12-23 13:53:42.000Z, , , ,"['660800']", ,2.5780000000000003,1883.98 +13694.0,pick item,2019-12-23 14:09:42.000Z, ,"['885090']", , , ,0.28,449.0 +13695.0,pick item,2019-12-23 14:10:58.000Z, ,"['884775']", , , ,0.78,99.99 +13696.0,pick item,2019-12-23 14:13:24.000Z, ,"['885079']", , , ,1.28,149.99 +13697.0,pick item,2019-12-23 14:16:48.000Z, ,"['885102']", , , ,0.188,1149.0 +13698.0,pick item,2019-12-23 14:31:25.000Z, ,"['885098']", , , ,0.38,29.99 +13699.0,confirm order,2019-12-23 14:44:26.000Z, , ,"['991247']", , ,1.649,2737.99 +13700.0,pick item,2019-12-23 14:50:56.000Z, ,"['885112']", , , ,0.38,29.99 +13701.0,pay order,2019-12-23 14:51:02.000Z, , ,"['991216']", , ,2.609,783.96 +13702.0,send package,2019-12-23 15:00:27.000Z, , , ,"['660806']", ,1.65,2589.99 +13703.0,payment reminder,2019-12-23 15:12:58.000Z, , ,"['991133']", , ,1.3259999999999998,933.98 +13704.0,pay order,2019-12-23 15:19:07.000Z, , ,"['991137']", , ,5.348,6223.97 +13705.0,pick item,2019-12-23 15:22:36.000Z, ,"['885074']", , , ,1.48,199.99 +13706.0,create package,2019-12-23 15:22:36.000Z, ,"['885073','885072','885058','885075','885090','884956','885074','885060']", ,"['660808']", ,4.8580000000000005,2051.96 +13707.0,reorder item,2019-12-23 15:30:33.000Z, ,"['884963']", , , ,0.483,79.99 +13708.0,place order,2019-12-23 15:40:06.000Z, ,"['885120','885119','885121','885118']","['991261']", , ,3.625,2813.98 +13709.0,pay order,2019-12-23 15:40:37.000Z, , ,"['991168']", , ,1.86,3483.0 +13710.0,confirm order,2019-12-23 15:48:38.000Z, , ,"['991255']", , ,0.87,1012.99 +13711.0,confirm order,2019-12-23 15:51:18.000Z, , ,"['991254']", , ,5.002,8694.0 +13712.0,item out of stock,2019-12-23 15:57:25.000Z, ,"['885088']", , , ,0.78,99.99 +13713.0,package delivered,2019-12-23 16:02:51.000Z, , , ,"['660805']", ,4.636,3847.96 +13714.0,confirm order,2019-12-23 16:08:26.000Z, , ,"['991258']", , ,2.24,783.97 +13715.0,pick item,2019-12-23 16:09:46.000Z, ,"['885084']", , , ,0.166,799.0 +13716.0,failed delivery,2019-12-23 16:12:50.000Z, , , ,"['660799']", ,1.943,3224.0 +13717.0,reorder item,2019-12-23 16:13:52.000Z, ,"['885066']", , , ,0.483,1099.0 +13718.0,pick item,2019-12-23 16:25:19.000Z, ,"['885117']", , , ,0.483,79.99 +13719.0,pick item,2019-12-23 16:25:57.000Z, ,"['885100']", , , ,0.483,1099.0 +13720.0,package delivered,2019-12-23 16:32:38.000Z, , , ,"['660800']", ,2.5780000000000003,1883.98 +13721.0,pick item,2019-12-23 16:40:22.000Z, ,"['885054']", , , ,0.98,129.99 +13722.0,pick item,2019-12-23 17:02:05.000Z, ,"['885087']", , , ,0.483,1099.0 +13723.0,confirm order,2019-12-23 17:25:13.000Z, , ,"['991261']", , ,3.625,2813.98 +13724.0,place order,2019-12-23 17:39:59.000Z, ,"['885124','885123','885122']","['991262']", , ,1.526,963.98 +13725.0,pick item,2019-12-23 17:40:56.000Z, ,"['884999']", , , ,0.2,39.99 +13726.0,pay order,2019-12-23 18:10:32.000Z, , ,"['991136']", , ,1.273,1098.98 +13727.0,pick item,2019-12-23 18:58:22.000Z, ,"['885113']", , , ,0.483,79.99 +13728.0,pick item,2019-12-23 19:26:26.000Z, ,"['884296']", , , ,0.483,1099.0 +13729.0,create package,2019-12-23 19:26:26.000Z, ,"['885045','885046','885044','885042','885041','885043']", ,"['660809']", ,3.579,2878.98 +13730.0,place order,2019-12-23 20:39:32.000Z, ,"['885127','885125','885126']","['991263']", , ,1.37,1072.99 +13731.0,pay order,2019-12-23 21:11:38.000Z, , ,"['991226']", , ,1.3630000000000002,1193.99 +13732.0,place order,2019-12-24 05:15:06.000Z, ,"['885131','885132','885130','885129','885128']","['991264']", , ,4.706,4232.98 +13733.0,item out of stock,2019-12-24 07:16:25.000Z, ,"['885104']", , , ,0.44,476.0 +13734.0,pick item,2019-12-24 07:22:50.000Z, ,"['885000']", , , ,0.78,99.99 +13735.0,pick item,2019-12-24 07:30:13.000Z, ,"['885061']", , , ,0.44,476.0 +13736.0,pick item,2019-12-24 08:39:35.000Z, ,"['885062']", , , ,0.483,79.99 +13737.0,place order,2019-12-24 08:54:24.000Z, ,"['885134','885133']","['991265']", , ,1.86,234.98 +13738.0,pick item,2019-12-24 08:57:17.000Z, ,"['885134']", , , ,0.38,29.99 +13739.0,item out of stock,2019-12-24 09:17:06.000Z, ,"['885063']", , , ,1.28,149.99 +13740.0,pick item,2019-12-24 09:19:35.000Z, ,"['885119']", , , ,1.37,2500.0 +13741.0,pick item,2019-12-24 09:22:10.000Z, ,"['884872']", , , ,0.166,799.0 +13742.0,create package,2019-12-24 09:22:10.000Z, ,"['885068','885100','885035','885056','884675','885057','885069','885055','885102','885071','885039','885070','885036']", ,"['660810']", ,5.755,8903.97 +13743.0,pick item,2019-12-24 09:30:24.000Z, ,"['885124']", , , ,0.166,799.0 +13744.0,pick item,2019-12-24 09:33:44.000Z, ,"['885083']", , , ,1.48,199.99 +13745.0,confirm order,2019-12-24 09:35:08.000Z, , ,"['991263']", , ,1.37,1072.99 +13746.0,pick item,2019-12-24 09:36:10.000Z, ,"['885115']", , , ,1.28,149.99 +13747.0,pick item,2019-12-24 09:36:16.000Z, ,"['885052']", , , ,0.28,449.0 +13748.0,pay order,2019-12-24 09:38:57.000Z, , ,"['991246']", , ,2.2030000000000003,710.98 +13749.0,pick item,2019-12-24 09:40:18.000Z, ,"['885093']", , , ,0.166,799.0 +13750.0,pay order,2019-12-24 09:42:35.000Z, , ,"['991244']", , ,2.228,2829.0 +13751.0,item out of stock,2019-12-24 09:46:50.000Z, ,"['885109']", , , ,0.28,449.0 +13752.0,pay order,2019-12-24 09:49:13.000Z, , ,"['991252']", , ,2.026,1023.98 +13753.0,send package,2019-12-24 09:57:42.000Z, , , ,"['660807']", ,6.672999999999999,8045.97 +13754.0,pick item,2019-12-24 10:11:09.000Z, ,"['884615']", , , ,1.25,2200.0 +13755.0,pick item,2019-12-24 10:11:23.000Z, ,"['885099']", , , ,0.21,529.0 +13756.0,pay order,2019-12-24 10:15:08.000Z, , ,"['991237']", , ,1.15,1328.0 +13757.0,pick item,2019-12-24 10:24:52.000Z, ,"['885110']", , , ,0.28,89.99 +13758.0,pick item,2019-12-24 10:30:23.000Z, ,"['885048']", , , ,0.44,476.0 +13759.0,package delivered,2019-12-24 10:40:23.000Z, , , ,"['660799']", ,1.943,3224.0 +13760.0,reorder item,2019-12-24 10:54:33.000Z, ,"['885091']", , , ,1.25,2200.0 +13761.0,pick item,2019-12-24 10:57:03.000Z, ,"['885125']", , , ,0.88,89.99 +13762.0,payment reminder,2019-12-24 10:59:10.000Z, , ,"['991031']", , ,1.046,893.99 +13763.0,package delivered,2019-12-24 10:59:57.000Z, , , ,"['660798']", ,1.763,1248.99 +13764.0,place order,2019-12-24 11:08:36.000Z, ,"['885137','885138','885135','885136']","['991266']", , ,3.616,4248.99 +13765.0,pick item,2019-12-24 11:20:38.000Z, ,"['885029']", , , ,0.38,29.99 +13766.0,pay order,2019-12-24 11:25:17.000Z, , ,"['991255']", , ,0.87,1012.99 +13767.0,pay order,2019-12-24 11:29:43.000Z, , ,"['991131']", , ,2.516,3433.99 +13768.0,pick item,2019-12-24 11:29:45.000Z, ,"['884967']", , , ,0.44,476.0 +13769.0,failed delivery,2019-12-24 11:53:06.000Z, , , ,"['660807']", ,6.672999999999999,8045.97 +13770.0,item out of stock,2019-12-24 12:01:48.000Z, ,"['885051']", , , ,1.37,2500.0 +13771.0,place order,2019-12-24 12:36:59.000Z, ,"['885146','885145','885143','885141','885139','885144','885147','885142','885140']","['991267']", , ,4.603,5648.98 +13772.0,pick item,2019-12-24 13:07:47.000Z, ,"['884911']", , , ,0.495,129.0 +13773.0,create package,2019-12-24 13:07:47.000Z, ,"['884961','885086','885084','885117','885077','885079','885076']", ,"['660811']", ,4.779,2296.96 +13774.0,send package,2019-12-24 13:11:03.000Z, , , ,"['660809']", ,3.579,2878.98 +13775.0,failed delivery,2019-12-24 13:28:23.000Z, , , ,"['660804']", ,3.007,1127.96 +13776.0,item out of stock,2019-12-24 13:33:46.000Z, ,"['885092']", , , ,1.37,2500.0 +13777.0,pick item,2019-12-24 13:39:49.000Z, ,"['885139']", , , ,0.28,449.0 +13778.0,pick item,2019-12-24 13:41:35.000Z, ,"['884944']", , , ,0.28,449.0 +13779.0,pick item,2019-12-24 13:52:47.000Z, ,"['885140']", , , ,0.28,449.0 +13780.0,pick item,2019-12-24 14:13:35.000Z, ,"['885142']", , , ,1.25,2200.0 +13781.0,place order,2019-12-24 14:33:45.000Z, ,"['885151','885150','885152','885154','885155','885156','885153','885149','885148']","['991268']", , ,7.0,7283.96 +13782.0,item out of stock,2019-12-24 14:34:42.000Z, ,"['885137']", , , ,1.37,2500.0 +13783.0,pick item,2019-12-24 14:36:52.000Z, ,"['885155']", , , ,1.37,2500.0 +13784.0,pick item,2019-12-24 14:42:48.000Z, ,"['885103']", , , ,0.483,1099.0 +13785.0,item out of stock,2019-12-24 14:52:33.000Z, ,"['885053']", , , ,1.25,2200.0 +13786.0,send package,2019-12-24 14:59:07.000Z, , , ,"['660811']", ,4.779,2296.96 +13787.0,item out of stock,2019-12-24 15:13:20.000Z, ,"['885108']", , , ,0.2,39.99 +13788.0,send package,2019-12-24 15:25:22.000Z, , , ,"['660808']", ,4.8580000000000005,2051.96 +13789.0,pay order,2019-12-24 15:41:32.000Z, , ,"['991202']", , ,1.643,679.98 +13790.0,confirm order,2019-12-24 15:44:34.000Z, , ,"['991253']", , ,2.0380000000000003,1781.99 +13791.0,package delivered,2019-12-24 15:49:17.000Z, , , ,"['660809']", ,3.579,2878.98 +13792.0,pick item,2019-12-24 15:54:48.000Z, ,"['885114']", , , ,0.78,99.99 +13793.0,create package,2019-12-24 15:54:48.000Z, ,"['885049','885098','885097','885099','885065','885050','885048','885067']", ,"['660812']", ,3.313,3188.97 +13794.0,pick item,2019-12-24 15:58:01.000Z, ,"['885138']", , , ,0.483,1099.0 +13795.0,pick item,2019-12-24 16:04:10.000Z, ,"['885130']", , , ,1.37,2500.0 +13796.0,item out of stock,2019-12-24 16:17:16.000Z, ,"['885116']", , , ,0.78,99.99 +13797.0,reorder item,2019-12-24 16:20:04.000Z, ,"['885063']", , , ,1.28,149.99 +13798.0,pick item,2019-12-24 16:21:38.000Z, ,"['885146']", , , ,0.172,699.0 +13799.0,pick item,2019-12-24 16:22:23.000Z, ,"['885121']", , , ,0.88,89.99 +13800.0,place order,2019-12-24 16:27:18.000Z, ,"['885157','885158','885160','885159']","['991269']", , ,3.015,2092.98 +13801.0,item out of stock,2019-12-24 16:28:14.000Z, ,"['885120']", , , ,0.88,89.99 +13802.0,item out of stock,2019-12-24 16:30:21.000Z, ,"['885153']", , , ,0.98,129.99 +13803.0,pick item,2019-12-24 16:34:22.000Z, ,"['885136']", , , ,1.28,149.99 +13804.0,pick item,2019-12-24 16:42:29.000Z, ,"['885141']", , , ,0.495,129.0 +13805.0,reorder item,2019-12-24 17:23:38.000Z, ,"['884996']", , , ,0.98,129.99 +13806.0,confirm order,2019-12-24 17:24:06.000Z, , ,"['991268']", , ,7.0,7283.96 +13807.0,confirm order,2019-12-24 17:31:42.000Z, , ,"['991265']", , ,1.86,234.98 +13808.0,pick item,2019-12-24 18:04:53.000Z, ,"['885145']", , , ,0.483,79.99 +13809.0,place order,2019-12-24 18:14:23.000Z, ,"['885165','885162','885164','885163','885161']","['991270']", , ,5.32,5480.98 +13810.0,pick item,2019-12-24 18:48:10.000Z, ,"['885129']", , , ,0.21,529.0 +13811.0,create package,2019-12-24 18:48:10.000Z, ,"['884703','885094','885093','884859','885138','885136']", ,"['660813']", ,3.954,5741.99 +13812.0,item out of stock,2019-12-24 20:03:23.000Z, ,"['885085']", , , ,0.98,129.99 +13813.0,package delivered,2019-12-24 20:15:23.000Z, , , ,"['660806']", ,1.65,2589.99 +13814.0,confirm order,2019-12-24 21:05:27.000Z, , ,"['991269']", , ,3.015,2092.98 +13815.0,place order,2019-12-24 21:08:21.000Z, ,"['885167','885166','885168','885169']","['991271']", , ,2.112,973.97 +13816.0,item out of stock,2019-12-24 21:12:23.000Z, ,"['885122']", , , ,0.98,129.99 +13817.0,confirm order,2019-12-24 21:16:18.000Z, , ,"['991267']", , ,4.603,5648.98 +13818.0,place order,2019-12-25 07:08:00.000Z, ,"['885172','885170','885171']","['991272']", , ,0.5920000000000001,1762.0 +13819.0,pick item,2019-12-25 07:29:54.000Z, ,"['884727']", , , ,1.48,199.99 +13820.0,item out of stock,2019-12-25 07:39:28.000Z, ,"['885147']", , , ,0.483,1099.0 +13821.0,pick item,2019-12-25 08:10:59.000Z, ,"['885154']", , , ,0.188,1149.0 +13822.0,pick item,2019-12-25 08:14:09.000Z, ,"['885078']", , , ,0.78,99.99 +13823.0,failed delivery,2019-12-25 08:14:32.000Z, , , ,"['660804']", ,3.007,1127.96 +13824.0,pick item,2019-12-25 08:15:15.000Z, ,"['885111']", , , ,1.48,199.99 +13825.0,package delivered,2019-12-25 08:31:11.000Z, , , ,"['660807']", ,6.672999999999999,8045.97 +13826.0,pick item,2019-12-25 08:33:31.000Z, ,"['885160']", , , ,0.483,1099.0 +13827.0,pick item,2019-12-25 08:35:21.000Z, ,"['885170']", , , ,0.21,529.0 +13828.0,create package,2019-12-25 08:35:21.000Z, ,"['884989','885052','884994','884775']", ,"['660814']", ,1.62,1087.98 +13829.0,confirm order,2019-12-25 08:39:12.000Z, , ,"['991272']", , ,0.5920000000000001,1762.0 +13830.0,pick item,2019-12-25 08:45:13.000Z, ,"['885126']", , , ,0.28,449.0 +13831.0,pay order,2019-12-25 08:58:52.000Z, , ,"['991272']", , ,0.5920000000000001,1762.0 +13832.0,pick item,2019-12-25 08:59:04.000Z, ,"['885166']", , , ,0.172,699.0 +13833.0,item out of stock,2019-12-25 09:00:35.000Z, ,"['885101']", , , ,0.98,129.99 +13834.0,place order,2019-12-25 09:01:47.000Z, ,"['885173','885175','885174']","['991273']", , ,3.99,7205.0 +13835.0,package delivered,2019-12-25 09:23:52.000Z, , , ,"['660811']", ,4.779,2296.96 +13836.0,pay order,2019-12-25 09:28:44.000Z, , ,"['991249']", , ,2.523,1238.98 +13837.0,pay order,2019-12-25 09:32:03.000Z, , ,"['991182']", , ,2.93,3103.99 +13838.0,pick item,2019-12-25 09:36:08.000Z, ,"['884979']", , , ,0.483,1099.0 +13839.0,confirm order,2019-12-25 09:46:36.000Z, , ,"['991273']", , ,3.99,7205.0 +13840.0,reorder item,2019-12-25 09:47:15.000Z, ,"['885053']", , , ,1.25,2200.0 +13841.0,reorder item,2019-12-25 09:50:37.000Z, ,"['884991']", , , ,0.495,129.0 +13842.0,pick item,2019-12-25 09:51:36.000Z, ,"['885127']", , , ,0.21,529.0 +13843.0,create package,2019-12-25 09:51:36.000Z, ,"['885124','884650','884727','885111','885110']", ,"['660815']", ,4.186,1388.96 +13844.0,pick item,2019-12-25 09:54:55.000Z, ,"['885152']", , , ,0.483,495.0 +13845.0,payment reminder,2019-12-25 10:01:37.000Z, , ,"['991039']", , ,4.435,1508.95 +13846.0,confirm order,2019-12-25 10:04:41.000Z, , ,"['991260']", , ,0.483,84.99 +13847.0,item out of stock,2019-12-25 10:12:29.000Z, ,"['885123']", , , ,0.38,29.99 +13848.0,pay order,2019-12-25 10:15:24.000Z, , ,"['990996']", , ,5.919,4572.96 +13849.0,pick item,2019-12-25 10:17:19.000Z, ,"['885169']", , , ,0.38,29.99 +13850.0,send package,2019-12-25 10:21:49.000Z, , , ,"['660810']", ,5.755,8903.97 +13851.0,place order,2019-12-25 10:23:22.000Z, ,"['885179','885178','885176','885177']","['991274']", , ,1.391,1799.98 +13852.0,send package,2019-12-25 10:27:26.000Z, , , ,"['660814']", ,1.62,1087.98 +13853.0,pick item,2019-12-25 10:29:40.000Z, ,"['885175']", , , ,1.37,2500.0 +13854.0,send package,2019-12-25 10:44:55.000Z, , , ,"['660812']", ,3.313,3188.97 +13855.0,pay order,2019-12-25 10:55:54.000Z, , ,"['991170']", , ,2.2,1129.99 +13856.0,confirm order,2019-12-25 11:01:58.000Z, , ,"['991271']", , ,2.112,973.97 +13857.0,pick item,2019-12-25 11:03:28.000Z, ,"['885161']", , , ,1.25,2200.0 +13858.0,send package,2019-12-25 11:10:40.000Z, , , ,"['660815']", ,4.186,1388.96 +13859.0,pick item,2019-12-25 11:17:14.000Z, ,"['885132']", , , ,0.166,799.0 +13860.0,create package,2019-12-25 11:17:14.000Z, ,"['885020','885000','885021','884999']", ,"['660816']", ,1.948,1388.97 +13861.0,pick item,2019-12-25 11:37:42.000Z, ,"['885030']", , , ,0.495,129.0 +13862.0,reorder item,2019-12-25 12:01:51.000Z, ,"['885137']", , , ,1.37,2500.0 +13863.0,pay order,2019-12-25 12:04:38.000Z, , ,"['991247']", , ,1.649,2737.99 +13864.0,place order,2019-12-25 12:06:31.000Z, ,"['885181','885180','885182']","['991275']", , ,2.446,779.98 +13865.0,package delivered,2019-12-25 12:28:40.000Z, , , ,"['660810']", ,5.755,8903.97 +13866.0,package delivered,2019-12-25 12:38:03.000Z, , , ,"['660808']", ,4.8580000000000005,2051.96 +13867.0,reorder item,2019-12-25 12:48:43.000Z, ,"['885085']", , , ,0.98,129.99 +13868.0,pick item,2019-12-25 12:50:17.000Z, ,"['885180']", , , ,0.483,495.0 +13869.0,pay order,2019-12-25 13:03:34.000Z, , ,"['991243']", , ,2.23,2334.99 +13870.0,reorder item,2019-12-25 13:12:23.000Z, ,"['885122']", , , ,0.98,129.99 +13871.0,pay order,2019-12-25 13:20:07.000Z, , ,"['991125']", , ,1.671,1841.99 +13872.0,pick item,2019-12-25 13:22:34.000Z, ,"['885158']", , , ,1.48,199.99 +13873.0,send package,2019-12-25 13:32:46.000Z, , , ,"['660813']", ,3.954,5741.99 +13874.0,place order,2019-12-25 13:32:50.000Z, ,"['885183','885185','885184']","['991276']", , ,1.826,993.98 +13875.0,package delivered,2019-12-25 13:41:12.000Z, , , ,"['660814']", ,1.62,1087.98 +13876.0,pick item,2019-12-25 13:59:47.000Z, ,"['884847']", , , ,0.28,89.99 +13877.0,create package,2019-12-25 13:59:47.000Z, ,"['885119','885121','885033']", ,"['660817']", ,2.733,3084.99 +13878.0,pick item,2019-12-25 14:02:51.000Z, ,"['885064']", , , ,0.483,495.0 +13879.0,pay order,2019-12-25 14:04:35.000Z, , ,"['991260']", , ,0.483,84.99 +13880.0,pick item,2019-12-25 14:09:47.000Z, ,"['885182']", , , ,1.48,199.99 +13881.0,pick item,2019-12-25 14:27:52.000Z, ,"['884821']", , , ,0.172,699.0 +13882.0,create package,2019-12-25 14:27:52.000Z, ,"['884922','885029','885030','885158','885160']", ,"['660818']", ,3.1180000000000003,1547.97 +13883.0,pick item,2019-12-25 14:32:32.000Z, ,"['885128']", , , ,1.48,199.99 +13884.0,send package,2019-12-25 14:37:29.000Z, , , ,"['660818']", ,3.1180000000000003,1547.97 +13885.0,pick item,2019-12-25 14:49:58.000Z, ,"['885027']", , , ,0.28,449.0 +13886.0,package delivered,2019-12-25 15:00:08.000Z, , , ,"['660804']", ,3.007,1127.96 +13887.0,confirm order,2019-12-25 15:03:21.000Z, , ,"['991276']", , ,1.826,993.98 +13888.0,confirm order,2019-12-25 15:13:55.000Z, , ,"['991274']", , ,1.391,1799.98 +13889.0,pick item,2019-12-25 15:17:03.000Z, ,"['885174']", , , ,1.25,2200.0 +13890.0,pay order,2019-12-25 15:21:07.000Z, , ,"['991217']", , ,5.647,3096.96 +13891.0,place order,2019-12-25 15:25:27.000Z, ,"['885191','885186','885190','885187','885188','885189']","['991277']", , ,3.832,7255.0 +13892.0,pick item,2019-12-25 15:36:59.000Z, ,"['885081']", , , ,1.37,2500.0 +13893.0,pick item,2019-12-25 15:37:08.000Z, ,"['885118']", , , ,0.495,129.0 +13894.0,create package,2019-12-25 15:37:08.000Z, ,"['884615','884979','885018']", ,"['660819']", ,3.213,3498.99 +13895.0,item out of stock,2019-12-25 15:41:07.000Z, ,"['885186']", , , ,0.44,476.0 +13896.0,pick item,2019-12-25 15:51:13.000Z, ,"['885191']", , , ,1.25,2200.0 +13897.0,pick item,2019-12-25 15:51:37.000Z, ,"['885080']", , , ,1.37,2500.0 +13898.0,send package,2019-12-25 15:53:47.000Z, , , ,"['660819']", ,3.213,3498.99 +13899.0,pick item,2019-12-25 16:09:12.000Z, ,"['885144']", , , ,0.28,449.0 +13900.0,create package,2019-12-25 16:09:12.000Z, ,"['884879','884296']", ,"['660820']", ,1.763,1248.99 +13901.0,reorder item,2019-12-25 16:09:41.000Z, ,"['885153']", , , ,0.98,129.99 +13902.0,package delivered,2019-12-25 16:18:31.000Z, , , ,"['660818']", ,3.1180000000000003,1547.97 +13903.0,pick item,2019-12-25 16:19:14.000Z, ,"['885011']", , , ,1.25,2200.0 +13904.0,pick item,2019-12-25 16:31:18.000Z, ,"['885157']", , , ,0.88,89.99 +13905.0,create package,2019-12-25 16:31:18.000Z, ,"['884919','884911']", ,"['660821']", ,0.978,1228.0 +13906.0,reorder item,2019-12-25 16:43:18.000Z, ,"['885120']", , , ,0.88,89.99 +13907.0,pick item,2019-12-25 16:52:50.000Z, ,"['885177']", , , ,0.483,79.99 +13908.0,pay order,2019-12-25 16:52:52.000Z, , ,"['991242']", , ,1.65,2954.0 +13909.0,place order,2019-12-25 17:10:41.000Z, ,"['885193','885192']","['991278']", , ,1.963,284.98 +13910.0,pay order,2019-12-25 18:01:04.000Z, , ,"['991253']", , ,2.0380000000000003,1781.99 +13911.0,pick item,2019-12-25 18:10:11.000Z, ,"['885185']", , , ,0.88,89.99 +13912.0,create package,2019-12-25 18:10:11.000Z, ,"['885062','885081','885115','885080','885061','885177','885113','885114','885083','885112']", ,"['660822']", ,8.549,6195.93 +13913.0,reorder item,2019-12-25 18:17:28.000Z, ,"['885092']", , , ,1.37,2500.0 +13914.0,confirm order,2019-12-25 18:25:33.000Z, , ,"['991262']", , ,1.526,963.98 +13915.0,pick item,2019-12-25 18:56:33.000Z, ,"['885192']", , , ,1.48,199.99 +13916.0,place order,2019-12-25 19:11:38.000Z, ,"['885195','885194','885196']","['991279']", , ,2.14,673.98 +13917.0,pick item,2019-12-25 19:42:00.000Z, ,"['885156']", , , ,1.25,2200.0 +13918.0,send package,2019-12-25 20:45:36.000Z, , , ,"['660816']", ,1.948,1388.97 +13919.0,place order,2019-12-25 22:02:51.000Z, ,"['885198','885197','885199']","['991280']", , ,1.685,792.99 +13920.0,create package,2019-12-25 23:00:00.000Z, ,"['885134','884872','884967','884944','885054']", ,"['660823']", ,2.246,1883.98 +13921.0,pick item,2019-12-26 07:47:55.000Z, ,"['885167']", , , ,1.28,149.99 +13922.0,place order,2019-12-26 07:55:00.000Z, ,"['885200']","['991281']", , ,0.78,104.99 +13923.0,pick item,2019-12-26 07:56:03.000Z, ,"['885037']", , , ,0.483,495.0 +13924.0,pick item,2019-12-26 08:11:16.000Z, ,"['885089']", , , ,0.495,129.0 +13925.0,failed delivery,2019-12-26 08:12:38.000Z, , , ,"['660819']", ,3.213,3498.99 +13926.0,item out of stock,2019-12-26 08:13:23.000Z, ,"['885106']", , , ,0.483,1099.0 +13927.0,reorder item,2019-12-26 08:16:13.000Z, ,"['885186']", , , ,0.44,476.0 +13928.0,confirm order,2019-12-26 08:17:48.000Z, , ,"['991266']", , ,3.616,4248.99 +13929.0,pick item,2019-12-26 08:18:52.000Z, ,"['885153']", , , ,0.98,129.99 +13930.0,confirm order,2019-12-26 08:20:39.000Z, , ,"['991280']", , ,1.685,792.99 +13931.0,confirm order,2019-12-26 08:29:18.000Z, , ,"['991278']", , ,1.963,284.98 +13932.0,pick item,2019-12-26 08:29:52.000Z, ,"['885199']", , , ,0.495,129.0 +13933.0,pick item,2019-12-26 08:38:43.000Z, ,"['884990']", , , ,0.78,99.99 +13934.0,reorder item,2019-12-26 08:45:52.000Z, ,"['884925']", , , ,0.483,1099.0 +13935.0,send package,2019-12-26 08:54:37.000Z, , , ,"['660822']", ,8.549,6195.93 +13936.0,pick item,2019-12-26 08:57:27.000Z, ,"['885189']", , , ,0.166,799.0 +13937.0,pick item,2019-12-26 09:01:40.000Z, ,"['885149']", , , ,1.28,149.99 +13938.0,confirm order,2019-12-26 09:02:00.000Z, , ,"['991281']", , ,0.78,104.99 +13939.0,pick item,2019-12-26 09:03:16.000Z, ,"['885188']", , , ,0.166,799.0 +13940.0,item out of stock,2019-12-26 09:03:24.000Z, ,"['885143']", , , ,0.88,89.99 +13941.0,pay order,2019-12-26 09:05:11.000Z, , ,"['991219']", , ,1.56,204.98 +13942.0,payment reminder,2019-12-26 09:19:53.000Z, , ,"['991166']", , ,2.8,760.97 +13943.0,pick item,2019-12-26 09:22:49.000Z, ,"['885151']", , , ,0.483,79.99 +13944.0,confirm order,2019-12-26 09:34:56.000Z, , ,"['991279']", , ,2.14,673.98 +13945.0,pick item,2019-12-26 09:53:45.000Z, ,"['885184']", , , ,0.78,99.99 +13946.0,package delivered,2019-12-26 09:58:40.000Z, , , ,"['660812']", ,3.313,3188.97 +13947.0,package delivered,2019-12-26 09:59:41.000Z, , , ,"['660813']", ,3.954,5741.99 +13948.0,item out of stock,2019-12-26 10:05:35.000Z, ,"['885096']", , , ,0.483,495.0 +13949.0,item out of stock,2019-12-26 10:09:33.000Z, ,"['885150']", , , ,0.483,495.0 +13950.0,place order,2019-12-26 10:12:18.000Z, ,"['885201','885203','885204','885205','885202']","['991282']", , ,4.172,5823.98 +13951.0,pick item,2019-12-26 10:12:18.000Z, ,"['885196']", , , ,0.98,129.99 +13952.0,item out of stock,2019-12-26 10:22:01.000Z, ,"['885187']", , , ,0.44,476.0 +13953.0,send package,2019-12-26 10:22:35.000Z, , , ,"['660821']", ,0.978,1228.0 +13954.0,package delivered,2019-12-26 10:26:31.000Z, , , ,"['660815']", ,4.186,1388.96 +13955.0,reorder item,2019-12-26 10:29:33.000Z, ,"['885059']", , , ,0.44,476.0 +13956.0,pay order,2019-12-26 10:36:18.000Z, , ,"['991268']", , ,7.0,7283.96 +13957.0,package delivered,2019-12-26 10:38:35.000Z, , , ,"['660821']", ,0.978,1228.0 +13958.0,failed delivery,2019-12-26 10:38:40.000Z, , , ,"['660822']", ,8.549,6195.93 +13959.0,pick item,2019-12-26 10:41:10.000Z, ,"['885205']", , , ,1.37,2500.0 +13960.0,create package,2019-12-26 10:41:10.000Z, ,"['885089','885175','885161','885166','885167','885169','885087','884847','885174']", ,"['660824']", ,6.96,9096.97 +13961.0,package delivered,2019-12-26 11:01:52.000Z, , , ,"['660816']", ,1.948,1388.97 +13962.0,send package,2019-12-26 11:03:59.000Z, , , ,"['660823']", ,2.246,1883.98 +13963.0,payment reminder,2019-12-26 11:35:44.000Z, , ,"['991167']", , ,1.53,2654.0 +13964.0,place order,2019-12-26 11:44:23.000Z, ,"['885207','885206']","['991283']", , ,0.468,1243.99 +13965.0,item out of stock,2019-12-26 11:47:54.000Z, ,"['885197']", , , ,0.21,529.0 +13966.0,package delivered,2019-12-26 12:03:19.000Z, , , ,"['660822']", ,8.549,6195.93 +13967.0,pay order,2019-12-26 12:57:39.000Z, , ,"['991220']", , ,1.386,1637.99 +13968.0,pick item,2019-12-26 13:07:11.000Z, ,"['885031']", , , ,1.28,149.99 +13969.0,failed delivery,2019-12-26 13:08:34.000Z, , , ,"['660823']", ,2.246,1883.98 +13970.0,send package,2019-12-26 13:29:09.000Z, , , ,"['660820']", ,1.763,1248.99 +13971.0,place order,2019-12-26 13:48:33.000Z, ,"['885208']","['991284']", , ,0.88,94.99 +13972.0,pay order,2019-12-26 13:56:50.000Z, , ,"['991274']", , ,1.391,1799.98 +13973.0,pay order,2019-12-26 13:59:40.000Z, , ,"['991124']", , ,0.38,34.99 +13974.0,confirm order,2019-12-26 14:03:16.000Z, , ,"['991277']", , ,3.832,7255.0 +13975.0,send package,2019-12-26 14:11:26.000Z, , , ,"['660817']", ,2.733,3084.99 +13976.0,pick item,2019-12-26 14:23:48.000Z, ,"['884875']", , , ,0.88,89.99 +13977.0,confirm order,2019-12-26 14:24:55.000Z, , ,"['991283']", , ,0.468,1243.99 +13978.0,item out of stock,2019-12-26 14:32:19.000Z, ,"['885165']", , , ,0.78,99.99 +13979.0,reorder item,2019-12-26 15:02:13.000Z, ,"['885116']", , , ,0.78,99.99 +13980.0,item out of stock,2019-12-26 15:03:39.000Z, ,"['885162']", , , ,1.37,2500.0 +13981.0,pick item,2019-12-26 15:14:17.000Z, ,"['885204']", , , ,0.172,699.0 +13982.0,pay order,2019-12-26 15:15:43.000Z, , ,"['991232']", , ,2.46,334.98 +13983.0,reorder item,2019-12-26 15:40:02.000Z, ,"['885165']", , , ,0.78,99.99 +13984.0,pay order,2019-12-26 15:52:07.000Z, , ,"['991256']", , ,2.134,3481.99 +13985.0,place order,2019-12-26 15:56:54.000Z, ,"['885215','885213','885209','885212','885214','885211','885210']","['991285']", , ,2.91,2171.97 +13986.0,pick item,2019-12-26 16:07:27.000Z, ,"['885171']", , , ,0.172,699.0 +13987.0,confirm order,2019-12-26 16:07:35.000Z, , ,"['991270']", , ,5.32,5480.98 +13988.0,pick item,2019-12-26 16:16:15.000Z, ,"['885198']", , , ,0.98,129.99 +13989.0,pick item,2019-12-26 16:19:28.000Z, ,"['885085']", , , ,0.98,129.99 +13990.0,confirm order,2019-12-26 16:35:58.000Z, , ,"['991284']", , ,0.88,94.99 +13991.0,reorder item,2019-12-26 16:44:53.000Z, ,"['885187']", , , ,0.44,476.0 +13992.0,reorder item,2019-12-26 16:56:03.000Z, ,"['885088']", , , ,0.78,99.99 +13993.0,confirm order,2019-12-26 17:00:39.000Z, , ,"['991264']", , ,4.706,4232.98 +13994.0,confirm order,2019-12-26 17:53:51.000Z, , ,"['991275']", , ,2.446,779.98 +13995.0,pick item,2019-12-26 17:55:09.000Z, ,"['885148']", , , ,0.483,79.99 +13996.0,pay order,2019-12-26 18:05:08.000Z, , ,"['991263']", , ,1.37,1072.99 +13997.0,place order,2019-12-26 18:13:35.000Z, ,"['885218','885217','885216','885220','885219']","['991286']", , ,2.63,3608.99 +13998.0,pick item,2019-12-26 18:18:34.000Z, ,"['885082']", , , ,0.172,699.0 +13999.0,pick item,2019-12-26 18:43:09.000Z, ,"['885190']", , , ,1.37,2500.0 +14000.0,create package,2019-12-26 18:43:09.000Z, ,"['885139','885126','885145','885141','884821','885142','885140','885146','885144','885127','885125']", ,"['660825']", ,4.782,6221.98 +14001.0,package delivered,2019-12-26 20:15:33.000Z, , , ,"['660817']", ,2.733,3084.99 +14002.0,place order,2019-12-26 21:06:45.000Z, ,"['885221','885223','885222']","['991287']", , ,3.17,933.98 +14003.0,place order,2019-12-27 06:58:24.000Z, ,"['885225','885224']","['991288']", , ,0.66,124.98 +14004.0,reorder item,2019-12-27 07:14:56.000Z, ,"['885123']", , , ,0.38,29.99 +14005.0,reorder item,2019-12-27 07:27:19.000Z, ,"['885143']", , , ,0.88,89.99 +14006.0,package delivered,2019-12-27 07:47:23.000Z, , , ,"['660820']", ,1.763,1248.99 +14007.0,send package,2019-12-27 07:55:44.000Z, , , ,"['660824']", ,6.96,9096.97 +14008.0,pick item,2019-12-27 08:05:38.000Z, ,"['885131']", , , ,1.48,199.99 +14009.0,reorder item,2019-12-27 08:51:34.000Z, ,"['885106']", , , ,0.483,1099.0 +14010.0,pay order,2019-12-27 08:54:16.000Z, , ,"['991197']", , ,1.4340000000000002,2177.99 +14011.0,pick item,2019-12-27 09:00:50.000Z, ,"['885212']", , , ,0.98,129.99 +14012.0,item out of stock,2019-12-27 09:10:27.000Z, ,"['885183']", , , ,0.166,799.0 +14013.0,send package,2019-12-27 09:12:31.000Z, , , ,"['660825']", ,4.782,6221.98 +14014.0,confirm order,2019-12-27 09:20:38.000Z, , ,"['991282']", , ,4.172,5823.98 +14015.0,package delivered,2019-12-27 09:33:44.000Z, , , ,"['660819']", ,3.213,3498.99 +14016.0,reorder item,2019-12-27 09:37:31.000Z, ,"['885162']", , , ,1.37,2500.0 +14017.0,pick item,2019-12-27 09:45:27.000Z, ,"['885221']", , , ,0.21,529.0 +14018.0,place order,2019-12-27 09:48:02.000Z, ,"['885229','885227','885228','885226','885230']","['991289']", , ,3.043,819.96 +14019.0,item out of stock,2019-12-27 09:49:08.000Z, ,"['885172']", , , ,0.21,529.0 +14020.0,pick item,2019-12-27 10:33:49.000Z, ,"['885209']", , , ,0.44,476.0 +14021.0,pick item,2019-12-27 10:37:00.000Z, ,"['885201']", , , ,1.37,2500.0 +14022.0,pay order,2019-12-27 10:40:30.000Z, , ,"['991282']", , ,4.172,5823.98 +14023.0,pick item,2019-12-27 10:43:30.000Z, ,"['885211']", , , ,0.44,476.0 +14024.0,pick item,2019-12-27 10:56:25.000Z, ,"['885218']", , , ,0.28,449.0 +14025.0,item out of stock,2019-12-27 11:06:02.000Z, ,"['885219']", , , ,0.28,449.0 +14026.0,pick item,2019-12-27 11:46:02.000Z, ,"['885223']", , , ,1.48,199.99 +14027.0,reorder item,2019-12-27 11:48:21.000Z, ,"['885108']", , , ,0.2,39.99 +14028.0,confirm order,2019-12-27 11:49:07.000Z, , ,"['991288']", , ,0.66,124.98 +14029.0,place order,2019-12-27 11:55:51.000Z, ,"['885232','885231']","['991290']", , ,0.36,1853.0 +14030.0,pay order,2019-12-27 12:07:37.000Z, , ,"['991134']", , ,3.275,5899.0 +14031.0,pick item,2019-12-27 12:22:30.000Z, ,"['885220']", , , ,0.38,29.99 +14032.0,pick item,2019-12-27 12:27:28.000Z, ,"['885208']", , , ,0.88,89.99 +14033.0,confirm order,2019-12-27 12:42:02.000Z, , ,"['991286']", , ,2.63,3608.99 +14034.0,pick item,2019-12-27 12:45:45.000Z, ,"['885222']", , , ,1.48,199.99 +14035.0,create package,2019-12-27 12:45:45.000Z, ,"['885154','885155','885131','885151','885130','885152','885156','885153','885148','885132','885129','885128','885149']", ,"['660826']", ,11.223,11011.94 +14036.0,package delivered,2019-12-27 12:52:56.000Z, , , ,"['660825']", ,4.782,6221.98 +14037.0,pick item,2019-12-27 12:57:55.000Z, ,"['885143']", , , ,0.88,89.99 +14038.0,reorder item,2019-12-27 13:24:14.000Z, ,"['885183']", , , ,0.166,799.0 +14039.0,pay order,2019-12-27 13:26:17.000Z, , ,"['991227']", , ,2.77,3019.98 +14040.0,pick item,2019-12-27 13:40:02.000Z, ,"['885159']", , , ,0.172,699.0 +14041.0,pick item,2019-12-27 13:44:46.000Z, ,"['885207']", , , ,0.188,1149.0 +14042.0,send package,2019-12-27 13:59:53.000Z, , , ,"['660826']", ,11.223,11011.94 +14043.0,place order,2019-12-27 14:11:30.000Z, ,"['885234','885235','885233']","['991291']", , ,2.343,314.97 +14044.0,pick item,2019-12-27 14:18:37.000Z, ,"['885206']", , , ,0.28,89.99 +14045.0,pick item,2019-12-27 14:18:50.000Z, ,"['885195']", , , ,0.88,89.99 +14046.0,pick item,2019-12-27 14:29:27.000Z, ,"['884450']", , , ,0.2,39.99 +14047.0,pick item,2019-12-27 14:33:33.000Z, ,"['885227']", , , ,1.28,149.99 +14048.0,item out of stock,2019-12-27 14:39:37.000Z, ,"['885235']", , , ,1.48,199.99 +14049.0,package delivered,2019-12-27 14:46:39.000Z, , , ,"['660823']", ,2.246,1883.98 +14050.0,confirm order,2019-12-27 14:51:22.000Z, , ,"['991287']", , ,3.17,933.98 +14051.0,pay order,2019-12-27 14:54:38.000Z, , ,"['991278']", , ,1.963,284.98 +14052.0,pick item,2019-12-27 15:00:53.000Z, ,"['885178']", , , ,0.28,89.99 +14053.0,pick item,2019-12-27 15:05:55.000Z, ,"['885168']", , , ,0.28,89.99 +14054.0,pick item,2019-12-27 15:27:48.000Z, ,"['885181']", , , ,0.483,79.99 +14055.0,failed delivery,2019-12-27 15:28:24.000Z, , , ,"['660826']", ,11.223,11011.94 +14056.0,pay order,2019-12-27 15:38:25.000Z, , ,"['991077']", , ,3.1830000000000003,1859.98 +14057.0,pick item,2019-12-27 15:38:51.000Z, ,"['885215']", , , ,0.2,39.99 +14058.0,place order,2019-12-27 15:42:47.000Z, ,"['885237','885236','885238']","['991292']", , ,0.6559999999999999,1782.0 +14059.0,confirm order,2019-12-27 15:50:27.000Z, , ,"['991285']", , ,2.91,2171.97 +14060.0,confirm order,2019-12-27 15:53:57.000Z, , ,"['991290']", , ,0.36,1853.0 +14061.0,package delivered,2019-12-27 16:00:56.000Z, , , ,"['660824']", ,6.96,9096.97 +14062.0,reorder item,2019-12-27 16:42:19.000Z, ,"['885219']", , , ,0.28,449.0 +14063.0,pick item,2019-12-27 16:54:10.000Z, ,"['885164']", , , ,1.48,199.99 +14064.0,pick item,2019-12-27 17:00:10.000Z, ,"['885187']", , , ,0.44,476.0 +14065.0,create package,2019-12-27 17:00:10.000Z, ,"['885103','885209','885211','885215','885212','885037','885227']", ,"['660827']", ,4.306,2865.97 +14066.0,pay order,2019-12-27 17:03:00.000Z, , ,"['991286']", , ,2.63,3608.99 +14067.0,confirm order,2019-12-27 17:20:56.000Z, , ,"['991291']", , ,2.343,314.97 +14068.0,place order,2019-12-27 17:45:21.000Z, ,"['885245','885243','885240','885241','885239','885242','885244','885246']","['991293']", , ,5.591,3881.96 +14069.0,pay order,2019-12-27 17:45:23.000Z, , ,"['991275']", , ,2.446,779.98 +14070.0,pay order,2019-12-27 18:31:36.000Z, , ,"['991198']", , ,4.85,3420.97 +14071.0,pick item,2019-12-27 20:37:18.000Z, ,"['885213']", , , ,0.2,39.99 +14072.0,place order,2019-12-27 20:55:38.000Z, ,"['885250','885248','885249','885251','885247']","['991294']", , ,1.795,2144.0 +14073.0,place order,2019-12-28 14:33:42.000Z, ,"['885257','885254','885253','885255','885256','885252']","['991295']", , ,3.189,3063.96 +14074.0,place order,2019-12-29 15:01:18.000Z, ,"['885261','885258','885262','885260','885259']","['991296']", , ,1.35,783.96 +14075.0,place order,2019-12-30 07:03:57.000Z, ,"['885263']","['991297']", , ,0.483,1104.0 +14076.0,pick item,2019-12-30 07:35:31.000Z, ,"['885193']", , , ,0.483,79.99 +14077.0,confirm order,2019-12-30 07:57:29.000Z, , ,"['991297']", , ,0.483,1104.0 +14078.0,pick item,2019-12-30 08:02:07.000Z, ,"['885217']", , , ,1.25,2200.0 +14079.0,reorder item,2019-12-30 08:11:15.000Z, ,"['885147']", , , ,0.483,1099.0 +14080.0,reorder item,2019-12-30 08:16:54.000Z, ,"['885150']", , , ,0.483,495.0 +14081.0,pick item,2019-12-30 08:31:29.000Z, ,"['884925']", , , ,0.483,1099.0 +14082.0,pick item,2019-12-30 08:31:31.000Z, ,"['885246']", , , ,0.98,129.99 +14083.0,pick item,2019-12-30 08:37:19.000Z, ,"['885210']", , , ,0.44,476.0 +14084.0,pick item,2019-12-30 08:40:48.000Z, ,"['885253']", , , ,0.483,79.99 +14085.0,create package,2019-12-30 08:40:48.000Z, ,"['885085','885078','885181','885221','885188','885222','885187','885180','885223','885182','885191','885190','885189','885246']", ,"['660828']", ,11.748,8837.93 +14086.0,confirm order,2019-12-30 08:42:06.000Z, , ,"['991293']", , ,5.591,3881.96 +14087.0,item out of stock,2019-12-30 08:54:30.000Z, ,"['885263']", , , ,0.483,1099.0 +14088.0,place order,2019-12-30 08:55:43.000Z, ,"['885268','885264','885266','885265','885267']","['991298']", , ,4.962,3353.97 +14089.0,reorder item,2019-12-30 09:00:22.000Z, ,"['885096']", , , ,0.483,495.0 +14090.0,pick item,2019-12-30 09:23:26.000Z, ,"['885176']", , , ,0.44,476.0 +14091.0,send package,2019-12-30 09:23:37.000Z, , , ,"['660827']", ,4.306,2865.97 +14092.0,pick item,2019-12-30 09:29:52.000Z, ,"['884892']", , , ,0.78,99.99 +14093.0,pick item,2019-12-30 09:37:18.000Z, ,"['885135']", , , ,0.483,495.0 +14094.0,pick item,2019-12-30 09:41:25.000Z, ,"['885230']", , , ,0.88,89.99 +14095.0,pick item,2019-12-30 09:44:26.000Z, ,"['885163']", , , ,0.44,476.0 +14096.0,pick item,2019-12-30 09:57:07.000Z, ,"['885255']", , , ,1.25,2200.0 +14097.0,pick item,2019-12-30 10:03:20.000Z, ,"['885252']", , , ,0.21,529.0 +14098.0,pick item,2019-12-30 10:03:55.000Z, ,"['885265']", , , ,0.172,699.0 +14099.0,pick item,2019-12-30 10:10:44.000Z, ,"['885107']", , , ,0.495,129.0 +14100.0,pick item,2019-12-30 10:11:42.000Z, ,"['885264']", , , ,1.28,149.99 +14101.0,confirm order,2019-12-30 10:21:47.000Z, , ,"['991289']", , ,3.043,819.96 +14102.0,pick item,2019-12-30 10:34:15.000Z, ,"['885251']", , , ,0.21,529.0 +14103.0,pick item,2019-12-30 10:43:05.000Z, ,"['884857']", , , ,1.37,2500.0 +14104.0,failed delivery,2019-12-30 10:52:09.000Z, , , ,"['660826']", ,11.223,11011.94 +14105.0,place order,2019-12-30 11:11:13.000Z, ,"['885269','885270']","['991299']", , ,1.152,833.99 +14106.0,item out of stock,2019-12-30 11:40:48.000Z, ,"['885240']", , , ,0.21,529.0 +14107.0,item out of stock,2019-12-30 11:45:39.000Z, ,"['885133']", , , ,1.48,199.99 +14108.0,confirm order,2019-12-30 11:49:30.000Z, , ,"['991298']", , ,4.962,3353.97 +14109.0,pay order,2019-12-30 11:50:33.000Z, , ,"['991291']", , ,2.343,314.97 +14110.0,pay order,2019-12-30 12:25:59.000Z, , ,"['991283']", , ,0.468,1243.99 +14111.0,pay order,2019-12-30 12:41:47.000Z, , ,"['991280']", , ,1.685,792.99 +14112.0,place order,2019-12-30 12:42:13.000Z, ,"['885273','885272','885271']","['991300']", , ,1.246,1028.99 +14113.0,item out of stock,2019-12-30 13:18:10.000Z, ,"['885232']", , , ,0.172,699.0 +14114.0,payment reminder,2019-12-30 13:19:11.000Z, , ,"['991065']", , ,4.615,3157.97 +14115.0,pick item,2019-12-30 13:19:24.000Z, ,"['885248']", , , ,0.21,529.0 +14116.0,confirm order,2019-12-30 13:26:37.000Z, , ,"['991299']", , ,1.152,833.99 +14117.0,pick item,2019-12-30 13:30:52.000Z, ,"['885040']", , , ,0.483,495.0 +14118.0,create package,2019-12-30 13:30:52.000Z, ,"['885198','885064','885170','885199','885208','885171']", ,"['660829']", ,3.22,2071.98 +14119.0,pick item,2019-12-30 13:42:25.000Z, ,"['885183']", , , ,0.166,799.0 +14120.0,pick item,2019-12-30 13:50:44.000Z, ,"['885250']", , , ,0.44,476.0 +14121.0,payment reminder,2019-12-30 14:12:25.000Z, , ,"['991184']", , ,1.2,540.98 +14122.0,pay order,2019-12-30 14:18:03.000Z, , ,"['991251']", , ,4.392,5903.99 +14123.0,pick item,2019-12-30 14:21:13.000Z, ,"['885229']", , , ,0.2,39.99 +14124.0,pick item,2019-12-30 14:24:30.000Z, ,"['885261']", , , ,0.28,89.99 +14125.0,item out of stock,2019-12-30 14:31:26.000Z, ,"['885231']", , , ,0.188,1149.0 +14126.0,pay order,2019-12-30 14:32:31.000Z, , ,"['991288']", , ,0.66,124.98 +14127.0,place order,2019-12-30 14:44:14.000Z, ,"['885276','885275','885277','885274']","['991301']", , ,1.5119999999999998,3031.99 +14128.0,confirm order,2019-12-30 14:45:26.000Z, , ,"['991295']", , ,3.189,3063.96 +14129.0,pay order,2019-12-30 14:50:40.000Z, , ,"['991298']", , ,4.962,3353.97 +14130.0,reorder item,2019-12-30 15:09:05.000Z, ,"['885109']", , , ,0.28,449.0 +14131.0,pick item,2019-12-30 15:09:18.000Z, ,"['884797']", , , ,0.88,89.99 +14132.0,item out of stock,2019-12-30 15:14:34.000Z, ,"['885200']", , , ,0.78,99.99 +14133.0,pick item,2019-12-30 15:23:58.000Z, ,"['885173']", , , ,1.37,2500.0 +14134.0,create package,2019-12-30 15:23:58.000Z, ,"['885250','885248','885027','885118','885251']", ,"['660830']", ,1.635,2112.0 +14135.0,reorder item,2019-12-30 15:33:57.000Z, ,"['885231']", , , ,0.188,1149.0 +14136.0,pick item,2019-12-30 15:36:26.000Z, ,"['885257']", , , ,0.483,79.99 +14137.0,reorder item,2019-12-30 15:39:53.000Z, ,"['885172']", , , ,0.21,529.0 +14138.0,send package,2019-12-30 15:43:14.000Z, , , ,"['660830']", ,1.635,2112.0 +14139.0,package delivered,2019-12-30 15:43:17.000Z, , , ,"['660826']", ,11.223,11011.94 +14140.0,pick item,2019-12-30 15:46:57.000Z, ,"['885088']", , , ,0.78,99.99 +14141.0,confirm order,2019-12-30 15:56:09.000Z, , ,"['991300']", , ,1.246,1028.99 +14142.0,item out of stock,2019-12-30 16:14:40.000Z, ,"['885266']", , , ,1.48,199.99 +14143.0,reorder item,2019-12-30 16:18:20.000Z, ,"['885051']", , , ,1.37,2500.0 +14144.0,pay order,2019-12-30 16:26:52.000Z, , ,"['991167']", , ,1.53,2654.0 +14145.0,reorder item,2019-12-30 16:30:08.000Z, ,"['885133']", , , ,1.48,199.99 +14146.0,pay order,2019-12-30 16:35:09.000Z, , ,"['991265']", , ,1.86,234.98 +14147.0,pick item,2019-12-30 16:41:02.000Z, ,"['885273']", , , ,0.483,79.99 +14148.0,place order,2019-12-30 16:48:15.000Z, ,"['885279','885278']","['991302']", , ,1.763,649.99 +14149.0,item out of stock,2019-12-30 16:55:31.000Z, ,"['885238']", , , ,0.166,799.0 +14150.0,pick item,2019-12-30 17:10:27.000Z, ,"['885267']", , , ,1.25,2200.0 +14151.0,reorder item,2019-12-30 17:21:46.000Z, ,"['885197']", , , ,0.21,529.0 +14152.0,pick item,2019-12-30 17:33:54.000Z, ,"['885241']", , , ,0.21,529.0 +14153.0,create package,2019-12-30 17:33:54.000Z, ,"['885255','885253','885264','885252','885265','885159','885157','885011','885267','885257']", ,"['660831']", ,7.43,8926.96 +14154.0,confirm order,2019-12-30 18:11:29.000Z, , ,"['991301']", , ,1.5119999999999998,3031.99 +14155.0,pick item,2019-12-30 18:20:18.000Z, ,"['885013']", , , ,0.172,699.0 +14156.0,place order,2019-12-30 19:04:20.000Z, ,"['885280','885281','885282']","['991303']", , ,1.7080000000000002,4003.0 +14157.0,confirm order,2019-12-30 20:26:35.000Z, , ,"['991302']", , ,1.763,649.99 +14158.0,place order,2019-12-30 21:48:15.000Z, ,"['885283','885284','885286','885285']","['991304']", , ,2.132,923.97 +14159.0,create package,2019-12-30 23:00:00.000Z, ,"['885183','885185','885218','884892','885217','885184','885135','885220']", ,"['660832']", ,4.999,4262.96 +14160.0,pay order,2019-12-31 07:27:07.000Z, , ,"['991065']", , ,4.615,3157.97 +14161.0,pick item,2019-12-31 07:29:56.000Z, ,"['884996']", , , ,0.98,129.99 +14162.0,pick item,2019-12-31 08:02:24.000Z, ,"['885269']", , , ,0.172,699.0 +14163.0,pick item,2019-12-31 08:11:27.000Z, ,"['885279']", , , ,1.28,149.99 +14164.0,pick item,2019-12-31 08:14:03.000Z, ,"['885225']", , , ,0.28,89.99 +14165.0,package delivered,2019-12-31 08:20:50.000Z, , , ,"['660830']", ,1.635,2112.0 +14166.0,reorder item,2019-12-31 08:22:45.000Z, ,"['885232']", , , ,0.172,699.0 +14167.0,pick item,2019-12-31 08:25:45.000Z, ,"['885216']", , , ,0.44,476.0 +14168.0,place order,2019-12-31 08:28:05.000Z, ,"['885288','885287','885290','885289']","['991305']", , ,2.25,753.97 +14169.0,pick item,2019-12-31 08:37:12.000Z, ,"['885236']", , , ,0.21,529.0 +14170.0,confirm order,2019-12-31 08:54:54.000Z, , ,"['991303']", , ,1.7080000000000002,4003.0 +14171.0,confirm order,2019-12-31 09:12:00.000Z, , ,"['991292']", , ,0.6559999999999999,1782.0 +14172.0,pay order,2019-12-31 09:12:43.000Z, , ,"['991257']", , ,2.7880000000000003,4209.0 +14173.0,confirm order,2019-12-31 09:13:57.000Z, , ,"['991304']", , ,2.132,923.97 +14174.0,reorder item,2019-12-31 09:16:26.000Z, ,"['885266']", , , ,1.48,199.99 +14175.0,pick item,2019-12-31 09:16:59.000Z, ,"['885194']", , , ,0.28,449.0 +14176.0,pick item,2019-12-31 09:21:50.000Z, ,"['885237']", , , ,0.28,449.0 +14177.0,pick item,2019-12-31 09:24:54.000Z, ,"['885278']", , , ,0.483,495.0 +14178.0,pick item,2019-12-31 09:31:01.000Z, ,"['885277']", , , ,0.483,1099.0 +14179.0,pay order,2019-12-31 09:35:15.000Z, , ,"['991281']", , ,0.78,104.99 +14180.0,payment reminder,2019-12-31 09:48:01.000Z, , ,"['991192']", , ,2.406,1567.98 +14181.0,send package,2019-12-31 09:56:00.000Z, , , ,"['660829']", ,3.22,2071.98 +14182.0,reorder item,2019-12-31 09:58:46.000Z, ,"['885235']", , , ,1.48,199.99 +14183.0,place order,2019-12-31 10:15:57.000Z, ,"['885291','885293','885292','885294']","['991306']", , ,2.056,1572.98 +14184.0,pick item,2019-12-31 10:37:32.000Z, ,"['885275']", , , ,0.166,799.0 +14185.0,pick item,2019-12-31 10:51:09.000Z, ,"['885274']", , , ,0.38,29.99 +14186.0,pick item,2019-12-31 11:02:12.000Z, ,"['885282']", , , ,0.172,699.0 +14187.0,pick item,2019-12-31 11:22:03.000Z, ,"['885214']", , , ,0.21,529.0 +14188.0,send package,2019-12-31 11:25:22.000Z, , , ,"['660828']", ,11.748,8837.93 +14189.0,place order,2019-12-31 11:51:41.000Z, ,"['885297','885295','885298','885296']","['991307']", , ,3.505,2563.98 +14190.0,pay order,2019-12-31 12:10:11.000Z, , ,"['991221']", , ,4.3180000000000005,6498.99 +14191.0,failed delivery,2019-12-31 12:28:23.000Z, , , ,"['660827']", ,4.306,2865.97 +14192.0,pick item,2019-12-31 12:36:50.000Z, ,"['885289']", , , ,0.21,529.0 +14193.0,pick item,2019-12-31 12:42:10.000Z, ,"['885293']", , , ,1.48,199.99 +14194.0,reorder item,2019-12-31 12:49:50.000Z, ,"['885238']", , , ,0.166,799.0 +14195.0,item out of stock,2019-12-31 13:23:41.000Z, ,"['885249']", , , ,0.495,129.0 +14196.0,reorder item,2019-12-31 13:24:10.000Z, ,"['885104']", , , ,0.44,476.0 +14197.0,pick item,2019-12-31 13:25:05.000Z, ,"['885272']", , , ,0.28,449.0 +14198.0,create package,2019-12-31 13:25:05.000Z, ,"['885178','885176','885193','885192','885082','885282']", ,"['660833']", ,3.027,2243.97 +14199.0,confirm order,2019-12-31 13:38:27.000Z, , ,"['991306']", , ,2.056,1572.98 +14200.0,place order,2019-12-31 14:03:10.000Z, ,"['885299','885300']","['991308']", , ,1.49,683.99 +14201.0,pick item,2019-12-31 14:12:04.000Z, ,"['885137']", , , ,1.37,2500.0 +14202.0,payment reminder,2019-12-31 14:17:09.000Z, , ,"['991194']", , ,2.048,1373.98 +14203.0,pick item,2019-12-31 14:17:09.000Z, ,"['885280']", , , ,1.37,2500.0 +14204.0,pay order,2019-12-31 14:30:40.000Z, , ,"['991302']", , ,1.763,649.99 +14205.0,pick item,2019-12-31 14:30:46.000Z, ,"['885297']", , , ,0.98,129.99 +14206.0,pay order,2019-12-31 14:35:45.000Z, , ,"['991194']", , ,2.048,1373.98 +14207.0,pay order,2019-12-31 14:48:58.000Z, , ,"['991166']", , ,2.8,760.97 +14208.0,pay order,2019-12-31 14:49:01.000Z, , ,"['991262']", , ,1.526,963.98 +14209.0,pick item,2019-12-31 14:49:38.000Z, ,"['885228']", , , ,0.483,495.0 +14210.0,item out of stock,2019-12-31 14:52:23.000Z, ,"['885285']", , , ,0.172,699.0 +14211.0,pick item,2019-12-31 15:10:07.000Z, ,"['885004']", , , ,0.495,129.0 +14212.0,reorder item,2019-12-31 15:15:20.000Z, ,"['885240']", , , ,0.21,529.0 +14213.0,place order,2019-12-31 15:26:07.000Z, ,"['885302','885303','885301']","['991309']", , ,1.848,1333.98 +14214.0,pick item,2019-12-31 15:34:09.000Z, ,"['885017']", , , ,0.98,129.99 +14215.0,create package,2019-12-31 15:34:09.000Z, ,"['884996','885297','885237','885236','884990']", ,"['660834']", ,3.23,1337.97 +14216.0,send package,2019-12-31 15:36:06.000Z, , , ,"['660832']", ,4.999,4262.96 +14217.0,pay order,2019-12-31 15:39:42.000Z, , ,"['991258']", , ,2.24,783.97 +14218.0,item out of stock,2019-12-31 15:40:15.000Z, ,"['885290']", , , ,0.78,99.99 +14219.0,pick item,2019-12-31 15:42:54.000Z, ,"['885271']", , , ,0.483,495.0 +14220.0,pick item,2019-12-31 15:43:32.000Z, ,"['885295']", , , ,0.495,129.0 +14221.0,send package,2019-12-31 15:48:26.000Z, , , ,"['660831']", ,7.43,8926.96 +14222.0,pick item,2019-12-31 15:58:57.000Z, ,"['885258']", , , ,0.28,89.99 +14223.0,pick item,2019-12-31 16:00:34.000Z, ,"['885150']", , , ,0.483,495.0 +14224.0,item out of stock,2019-12-31 16:02:59.000Z, ,"['885298']", , , ,0.78,99.99 +14225.0,pick item,2019-12-31 16:06:38.000Z, ,"['884936']", , , ,0.88,89.99 +14226.0,create package,2019-12-31 16:06:38.000Z, ,"['885195','885194','885279','885278','885196','885289']", ,"['660835']", ,4.113,1842.97 +14227.0,pick item,2019-12-31 16:07:52.000Z, ,"['885294']", , , ,0.2,39.99 +14228.0,pick item,2019-12-31 16:12:09.000Z, ,"['885226']", , , ,0.2,39.99 +14229.0,confirm order,2019-12-31 16:17:11.000Z, , ,"['991296']", , ,1.35,783.96 +14230.0,pick item,2019-12-31 16:17:59.000Z, ,"['885262']", , , ,0.38,29.99 +14231.0,item out of stock,2019-12-31 16:20:10.000Z, ,"['885233']", , , ,0.483,79.99 +14232.0,pay order,2019-12-31 16:26:53.000Z, , ,"['991295']", , ,3.189,3063.96 +14233.0,pay order,2019-12-31 16:28:11.000Z, , ,"['991039']", , ,4.435,1508.95 +14234.0,pick item,2019-12-31 16:35:11.000Z, ,"['885244']", , , ,0.483,79.99 +14235.0,confirm order,2019-12-31 16:52:32.000Z, , ,"['991305']", , ,2.25,753.97 +14236.0,failed delivery,2019-12-31 17:04:26.000Z, , , ,"['660829']", ,3.22,2071.98 +14237.0,place order,2019-12-31 17:12:02.000Z, ,"['885305','885304','885306']","['991310']", , ,2.5,730.98 +14238.0,item out of stock,2019-12-31 17:17:38.000Z, ,"['885291']", , , ,0.21,529.0 +14239.0,pick item,2019-12-31 17:23:57.000Z, ,"['885300']", , , ,0.21,529.0 +14240.0,pick item,2019-12-31 17:30:15.000Z, ,"['885283']", , , ,0.88,89.99 +14241.0,create package,2019-12-31 17:30:15.000Z, ,"['885207','885275','885205','885274','885204','885031','884875','885206','885277','885201']", ,"['660836']", ,6.569,9105.96 +14242.0,package delivered,2019-12-31 17:36:06.000Z, , , ,"['660828']", ,11.748,8837.93 +14243.0,item out of stock,2019-12-31 17:44:31.000Z, ,"['885243']", , , ,0.495,129.0 +14244.0,confirm order,2019-12-31 18:38:10.000Z, , ,"['991294']", , ,1.795,2144.0 +14245.0,place order,2019-12-31 19:15:41.000Z, ,"['885308','885307','885311','885309','885310']","['991311']", , ,3.107,2726.99 +14246.0,failed delivery,2019-12-31 20:11:16.000Z, , , ,"['660829']", ,3.22,2071.98 +14247.0,package delivered,2019-12-31 21:08:36.000Z, , , ,"['660827']", ,4.306,2865.97 +14248.0,place order,2019-12-31 22:10:56.000Z, ,"['885314','885315','885316','885312','885313']","['991312']", , ,2.509,1518.97 +14249.0,failed delivery,2020-01-01 07:40:57.000Z, , , ,"['660829']", ,3.22,2071.98 +14250.0,confirm order,2020-01-01 07:49:05.000Z, , ,"['991312']", , ,2.509,1518.97 +14251.0,reorder item,2020-01-01 07:56:27.000Z, ,"['885101']", , , ,0.98,129.99 +14252.0,confirm order,2020-01-01 07:57:01.000Z, , ,"['991307']", , ,3.505,2563.98 +14253.0,place order,2020-01-01 08:04:42.000Z, ,"['885318','885317','885319']","['991313']", , ,1.132,1378.99 +14254.0,pick item,2020-01-01 08:15:06.000Z, ,"['885292']", , , ,0.166,799.0 +14255.0,pick item,2020-01-01 08:23:31.000Z, ,"['885315']", , , ,0.483,495.0 +14256.0,send package,2020-01-01 08:30:09.000Z, , , ,"['660835']", ,4.113,1842.97 +14257.0,reorder item,2020-01-01 08:42:02.000Z, ,"['885285']", , , ,0.172,699.0 +14258.0,send package,2020-01-01 08:42:18.000Z, , , ,"['660836']", ,6.569,9105.96 +14259.0,item out of stock,2020-01-01 08:45:35.000Z, ,"['885318']", , , ,0.166,799.0 +14260.0,package delivered,2020-01-01 08:48:54.000Z, , , ,"['660835']", ,4.113,1842.97 +14261.0,pay order,2020-01-01 08:52:43.000Z, , ,"['991241']", , ,1.76,1046.99 +14262.0,pick item,2020-01-01 08:53:19.000Z, ,"['885234']", , , ,0.38,29.99 +14263.0,package delivered,2020-01-01 09:05:51.000Z, , , ,"['660832']", ,4.999,4262.96 +14264.0,confirm order,2020-01-01 09:06:06.000Z, , ,"['991311']", , ,3.107,2726.99 +14265.0,reorder item,2020-01-01 09:10:09.000Z, ,"['885291']", , , ,0.21,529.0 +14266.0,pay order,2020-01-01 09:12:03.000Z, , ,"['991312']", , ,2.509,1518.97 +14267.0,payment reminder,2020-01-01 09:14:57.000Z, , ,"['991199']", , ,4.769,4192.96 +14268.0,pay order,2020-01-01 09:20:11.000Z, , ,"['991192']", , ,2.406,1567.98 +14269.0,pick item,2020-01-01 09:23:42.000Z, ,"['885245']", , , ,1.48,199.99 +14270.0,package delivered,2020-01-01 09:28:22.000Z, , , ,"['660831']", ,7.43,8926.96 +14271.0,place order,2020-01-01 09:29:12.000Z, ,"['885321','885323','885322','885324','885320']","['991314']", , ,4.206,2008.97 +14272.0,pay order,2020-01-01 09:30:43.000Z, , ,"['991267']", , ,4.603,5648.98 +14273.0,item out of stock,2020-01-01 10:01:43.000Z, ,"['885287']", , , ,0.38,29.99 +14274.0,send package,2020-01-01 10:02:41.000Z, , , ,"['660834']", ,3.23,1337.97 +14275.0,reorder item,2020-01-01 10:07:54.000Z, ,"['885318']", , , ,0.166,799.0 +14276.0,pick item,2020-01-01 10:24:31.000Z, ,"['885270']", , , ,0.98,129.99 +14277.0,package delivered,2020-01-01 10:27:51.000Z, , , ,"['660836']", ,6.569,9105.96 +14278.0,pick item,2020-01-01 10:42:39.000Z, ,"['885310']", , , ,0.483,1099.0 +14279.0,item out of stock,2020-01-01 10:42:55.000Z, ,"['885301']", , , ,0.188,1149.0 +14280.0,confirm order,2020-01-01 11:00:28.000Z, , ,"['991313']", , ,1.132,1378.99 +14281.0,pick item,2020-01-01 11:06:41.000Z, ,"['885309']", , , ,1.48,199.99 +14282.0,item out of stock,2020-01-01 11:12:10.000Z, ,"['885203']", , , ,0.88,89.99 +14283.0,place order,2020-01-01 11:18:11.000Z, ,"['885326','885325']","['991315']", , ,1.81,2981.0 +14284.0,pick item,2020-01-01 11:24:39.000Z, ,"['885239']", , , ,1.25,2200.0 +14285.0,reorder item,2020-01-01 11:27:43.000Z, ,"['885298']", , , ,0.78,99.99 +14286.0,pay order,2020-01-01 11:43:50.000Z, , ,"['991222']", , ,1.628,2141.99 +14287.0,pay order,2020-01-01 11:44:58.000Z, , ,"['991303']", , ,1.7080000000000002,4003.0 +14288.0,send package,2020-01-01 11:51:43.000Z, , , ,"['660833']", ,3.027,2243.97 +14289.0,confirm order,2020-01-01 11:55:19.000Z, , ,"['991308']", , ,1.49,683.99 +14290.0,pick item,2020-01-01 12:04:35.000Z, ,"['885317']", , , ,0.483,495.0 +14291.0,pick item,2020-01-01 12:24:27.000Z, ,"['885276']", , , ,0.483,1099.0 +14292.0,create package,2020-01-01 12:24:27.000Z, ,"['885143']", ,"['660837']", ,0.88,89.99 +14293.0,place order,2020-01-01 12:56:10.000Z, ,"['885329','885332','885327','885330','885328','885331']","['991316']", , ,4.871,9982.0 +14294.0,pick item,2020-01-01 13:12:24.000Z, ,"['884904']", , , ,0.98,129.99 +14295.0,create package,2020-01-01 13:12:24.000Z, ,"['885261','884450','885273','885258','885262','884857','885271','885017','884936','885272']", ,"['660838']", ,5.6160000000000005,3993.93 +14296.0,reorder item,2020-01-01 13:19:55.000Z, ,"['885263']", , , ,0.483,1099.0 +14297.0,item out of stock,2020-01-01 13:33:11.000Z, ,"['885323']", , , ,0.483,495.0 +14298.0,reorder item,2020-01-01 13:49:46.000Z, ,"['885243']", , , ,0.495,129.0 +14299.0,pick item,2020-01-01 13:52:45.000Z, ,"['885162']", , , ,1.37,2500.0 +14300.0,package delivered,2020-01-01 14:06:21.000Z, , , ,"['660833']", ,3.027,2243.97 +14301.0,pick item,2020-01-01 14:16:42.000Z, ,"['885147']", , , ,0.483,1099.0 +14302.0,confirm order,2020-01-01 14:17:31.000Z, , ,"['991309']", , ,1.848,1333.98 +14303.0,pick item,2020-01-01 14:17:35.000Z, ,"['885307']", , , ,0.483,495.0 +14304.0,pick item,2020-01-01 14:18:29.000Z, ,"['885197']", , , ,0.21,529.0 +14305.0,confirm order,2020-01-01 14:21:37.000Z, , ,"['991310']", , ,2.5,730.98 +14306.0,reorder item,2020-01-01 14:23:41.000Z, ,"['885287']", , , ,0.38,29.99 +14307.0,pick item,2020-01-01 14:33:29.000Z, ,"['885254']", , , ,0.483,79.99 +14308.0,pick item,2020-01-01 14:34:05.000Z, ,"['885133']", , , ,1.48,199.99 +14309.0,pick item,2020-01-01 14:41:41.000Z, ,"['884973']", , , ,0.28,449.0 +14310.0,confirm order,2020-01-01 14:50:46.000Z, , ,"['991316']", , ,4.871,9982.0 +14311.0,package delivered,2020-01-01 14:54:24.000Z, , , ,"['660834']", ,3.23,1337.97 +14312.0,pick item,2020-01-01 14:59:01.000Z, ,"['884963']", , , ,0.483,79.99 +14313.0,pick item,2020-01-01 15:10:37.000Z, ,"['885108']", , , ,0.2,39.99 +14314.0,place order,2020-01-01 15:12:07.000Z, ,"['885333','885334']","['991317']", , ,1.09,623.99 +14315.0,pick item,2020-01-01 15:12:49.000Z, ,"['885318']", , , ,0.166,799.0 +14316.0,create package,2020-01-01 15:12:49.000Z, ,"['885088','885162','885164','885173','885168','885163']", ,"['660839']", ,5.72,5865.97 +14317.0,reorder item,2020-01-01 15:18:55.000Z, ,"['885323']", , , ,0.483,495.0 +14318.0,pick item,2020-01-01 15:19:26.000Z, ,"['885316']", , , ,0.2,39.99 +14319.0,pick item,2020-01-01 15:29:41.000Z, ,"['885313']", , , ,0.38,29.99 +14320.0,pick item,2020-01-01 15:31:55.000Z, ,"['885179']", , , ,0.188,1149.0 +14321.0,confirm order,2020-01-01 15:42:48.000Z, , ,"['991315']", , ,1.81,2981.0 +14322.0,reorder item,2020-01-01 15:53:12.000Z, ,"['885301']", , , ,0.188,1149.0 +14323.0,pick item,2020-01-01 15:56:39.000Z, ,"['885299']", , , ,1.28,149.99 +14324.0,pick item,2020-01-01 15:59:40.000Z, ,"['885053']", , , ,1.25,2200.0 +14325.0,pay order,2020-01-01 16:11:41.000Z, , ,"['991279']", , ,2.14,673.98 +14326.0,confirm order,2020-01-01 16:40:51.000Z, , ,"['991314']", , ,4.206,2008.97 +14327.0,place order,2020-01-01 16:44:01.000Z, ,"['885335','885337','885336']","['991318']", , ,0.618,1952.0 +14328.0,item out of stock,2020-01-01 17:01:41.000Z, ,"['885304']", , , ,0.78,99.99 +14329.0,pick item,2020-01-01 17:10:55.000Z, ,"['885247']", , , ,0.44,476.0 +14330.0,create package,2020-01-01 17:10:55.000Z, ,"['885213','885230','885229','885228','884973','885040','885210','885226','885214']", ,"['660840']", ,3.3760000000000003,2653.96 +14331.0,pay order,2020-01-01 17:17:38.000Z, , ,"['991233']", , ,4.18,2741.96 +14332.0,pay order,2020-01-01 17:27:36.000Z, , ,"['991309']", , ,1.848,1333.98 +14333.0,pick item,2020-01-01 17:35:05.000Z, ,"['885202']", , , ,0.38,29.99 +14334.0,pick item,2020-01-01 17:36:13.000Z, ,"['885324']", , , ,0.483,1099.0 +14335.0,pick item,2020-01-01 17:38:24.000Z, ,"['885325']", , , ,0.44,476.0 +14336.0,place order,2020-01-01 18:51:38.000Z, ,"['885342','885339','885341','885338','885340']","['991319']", , ,3.56,1081.98 +14337.0,package delivered,2020-01-01 19:42:46.000Z, , , ,"['660829']", ,3.22,2071.98 +14338.0,pay order,2020-01-01 20:53:05.000Z, , ,"['991308']", , ,1.49,683.99 +14339.0,place order,2020-01-01 22:22:51.000Z, ,"['885347','885343','885345','885344','885346']","['991320']", , ,2.768,4192.98 +14340.0,pick item,2020-01-02 07:23:38.000Z, ,"['885314']", , , ,0.166,799.0 +14341.0,pick item,2020-01-02 07:40:16.000Z, ,"['885345']", , , ,1.37,2500.0 +14342.0,confirm order,2020-01-02 08:00:30.000Z, , ,"['991318']", , ,0.618,1952.0 +14343.0,reorder item,2020-01-02 08:04:34.000Z, ,"['885203']", , , ,0.88,89.99 +14344.0,pick item,2020-01-02 08:04:44.000Z, ,"['885312']", , , ,1.28,149.99 +14345.0,pick item,2020-01-02 08:12:02.000Z, ,"['885063']", , , ,1.28,149.99 +14346.0,pick item,2020-01-02 08:13:07.000Z, ,"['885320']", , , ,0.98,129.99 +14347.0,send package,2020-01-02 08:18:41.000Z, , , ,"['660840']", ,3.3760000000000003,2653.96 +14348.0,place order,2020-01-02 08:19:00.000Z, ,"['885348','885349']","['991321']", , ,0.338,1503.0 +14349.0,pick item,2020-01-02 08:20:26.000Z, ,"['885334']", , , ,0.21,529.0 +14350.0,create package,2020-01-02 08:20:26.000Z, ,"['884925','885318','885317','885334']", ,"['660841']", ,1.342,2922.0 +14351.0,confirm order,2020-01-02 08:22:15.000Z, , ,"['991321']", , ,0.338,1503.0 +14352.0,pick item,2020-01-02 08:46:55.000Z, ,"['885260']", , , ,0.21,529.0 +14353.0,pick item,2020-01-02 09:07:23.000Z, ,"['885287']", , , ,0.38,29.99 +14354.0,pick item,2020-01-02 09:25:31.000Z, ,"['885284']", , , ,0.2,39.99 +14355.0,send package,2020-01-02 09:25:42.000Z, , , ,"['660837']", ,0.88,89.99 +14356.0,pick item,2020-01-02 09:31:21.000Z, ,"['885116']", , , ,0.78,99.99 +14357.0,create package,2020-01-02 09:31:21.000Z, ,"['885309','885107','885269','885150','885307','885310','885270']", ,"['660842']", ,4.5760000000000005,3246.98 +14358.0,item out of stock,2020-01-02 09:45:30.000Z, ,"['885328']", , , ,1.25,2200.0 +14359.0,pay order,2020-01-02 09:49:25.000Z, , ,"['991266']", , ,3.616,4248.99 +14360.0,confirm order,2020-01-02 09:53:13.000Z, , ,"['991317']", , ,1.09,623.99 +14361.0,place order,2020-01-02 09:57:47.000Z, ,"['885352','885351','885350']","['991322']", , ,3.4,880.98 +14362.0,pick item,2020-01-02 10:04:50.000Z, ,"['885341']", , , ,0.21,529.0 +14363.0,pick item,2020-01-02 10:16:34.000Z, ,"['885288']", , , ,0.88,89.99 +14364.0,pay order,2020-01-02 10:22:33.000Z, , ,"['991292']", , ,0.6559999999999999,1782.0 +14365.0,pick item,2020-01-02 10:23:45.000Z, ,"['885219']", , , ,0.28,449.0 +14366.0,send package,2020-01-02 10:26:50.000Z, , , ,"['660838']", ,5.6160000000000005,3993.93 +14367.0,pay order,2020-01-02 10:39:15.000Z, , ,"['991296']", , ,1.35,783.96 +14368.0,item out of stock,2020-01-02 10:42:49.000Z, ,"['885256']", , , ,0.28,89.99 +14369.0,confirm order,2020-01-02 10:46:36.000Z, , ,"['991319']", , ,3.56,1081.98 +14370.0,pick item,2020-01-02 10:46:54.000Z, ,"['885327']", , , ,1.37,2500.0 +14371.0,package delivered,2020-01-02 10:47:45.000Z, , , ,"['660837']", ,0.88,89.99 +14372.0,package delivered,2020-01-02 11:00:46.000Z, , , ,"['660840']", ,3.3760000000000003,2653.96 +14373.0,pick item,2020-01-02 11:21:04.000Z, ,"['885348']", , , ,0.166,799.0 +14374.0,pay order,2020-01-02 11:37:01.000Z, , ,"['991299']", , ,1.152,833.99 +14375.0,pick item,2020-01-02 11:41:10.000Z, ,"['885351']", , , ,1.48,199.99 +14376.0,send package,2020-01-02 11:50:03.000Z, , , ,"['660839']", ,5.72,5865.97 +14377.0,place order,2020-01-02 12:15:22.000Z, ,"['885356','885353','885355','885354']","['991323']", , ,1.456,2577.0 +14378.0,pick item,2020-01-02 12:49:41.000Z, ,"['885331']", , , ,0.21,529.0 +14379.0,create package,2020-01-02 12:49:41.000Z, ,"['885314','885300','885315','885316','884904','885312','885234','884797','885225','885299','885313']", ,"['660843']", ,6.519,2532.92 +14380.0,payment reminder,2020-01-02 13:34:28.000Z, , ,"['991201']", , ,1.49,683.99 +14381.0,pay order,2020-01-02 13:38:14.000Z, , ,"['990995']", , ,1.452,853.99 +14382.0,pick item,2020-01-02 13:39:31.000Z, ,"['885281']", , , ,0.166,799.0 +14383.0,pick item,2020-01-02 13:46:46.000Z, ,"['885353']", , , ,0.483,1099.0 +14384.0,place order,2020-01-02 13:50:31.000Z, ,"['885362','885366','885358','885361','885359','885365','885357','885363','885360','885364']","['991324']", , ,6.971,5812.96 +14385.0,send package,2020-01-02 13:55:01.000Z, , , ,"['660843']", ,6.519,2532.92 +14386.0,reorder item,2020-01-02 14:09:58.000Z, ,"['885256']", , , ,0.28,89.99 +14387.0,package delivered,2020-01-02 14:23:41.000Z, , , ,"['660838']", ,5.6160000000000005,3993.93 +14388.0,confirm order,2020-01-02 14:49:20.000Z, , ,"['991323']", , ,1.456,2577.0 +14389.0,pick item,2020-01-02 15:00:26.000Z, ,"['885165']", , , ,0.78,99.99 +14390.0,payment reminder,2020-01-02 15:06:33.000Z, , ,"['991203']", , ,2.387,1931.97 +14391.0,package delivered,2020-01-02 15:16:46.000Z, , , ,"['660839']", ,5.72,5865.97 +14392.0,item out of stock,2020-01-02 15:20:45.000Z, ,"['885347']", , , ,0.172,699.0 +14393.0,item out of stock,2020-01-02 15:24:25.000Z, ,"['885342']", , , ,0.88,89.99 +14394.0,item out of stock,2020-01-02 15:25:48.000Z, ,"['885333']", , , ,0.88,89.99 +14395.0,reorder item,2020-01-02 15:28:27.000Z, ,"['885342']", , , ,0.88,89.99 +14396.0,package delivered,2020-01-02 15:32:04.000Z, , , ,"['660843']", ,6.519,2532.92 +14397.0,pick item,2020-01-02 15:40:41.000Z, ,"['885358']", , , ,0.188,1149.0 +14398.0,send package,2020-01-02 15:48:18.000Z, , , ,"['660841']", ,1.342,2922.0 +14399.0,send package,2020-01-02 15:56:05.000Z, , , ,"['660842']", ,4.5760000000000005,3246.98 +14400.0,place order,2020-01-02 16:00:50.000Z, ,"['885367','885368']","['991325']", , ,0.36,1853.0 +14401.0,pick item,2020-01-02 16:07:15.000Z, ,"['885336']", , , ,0.172,699.0 +14402.0,pick item,2020-01-02 16:23:41.000Z, ,"['885243']", , , ,0.495,129.0 +14403.0,pick item,2020-01-02 16:24:28.000Z, ,"['885059']", , , ,0.44,476.0 +14404.0,pick item,2020-01-02 16:32:06.000Z, ,"['885362']", , , ,0.38,29.99 +14405.0,payment reminder,2020-01-02 16:40:46.000Z, , ,"['991208']", , ,0.98,134.99 +14406.0,item out of stock,2020-01-02 16:45:08.000Z, ,"['885356']", , , ,0.21,529.0 +14407.0,item out of stock,2020-01-02 17:14:51.000Z, ,"['885338']", , , ,0.495,129.0 +14408.0,reorder item,2020-01-02 17:18:16.000Z, ,"['885233']", , , ,0.483,79.99 +14409.0,place order,2020-01-02 17:21:27.000Z, ,"['885369','885371','885370']","['991326']", , ,2.2,770.98 +14410.0,pick item,2020-01-02 17:28:26.000Z, ,"['885238']", , , ,0.166,799.0 +14411.0,confirm order,2020-01-02 17:30:53.000Z, , ,"['991324']", , ,6.971,5812.96 +14412.0,item out of stock,2020-01-02 17:43:43.000Z, ,"['885332']", , , ,1.37,2500.0 +14413.0,pick item,2020-01-02 18:30:11.000Z, ,"['884713']", , , ,0.483,1099.0 +14414.0,pick item,2020-01-02 18:40:01.000Z, ,"['885363']", , , ,0.21,529.0 +14415.0,create package,2020-01-02 18:40:01.000Z, ,"['885245','885243','885241','885239','884963','885336','885244']", ,"['660844']", ,4.573,3916.97 +14416.0,place order,2020-01-02 19:43:56.000Z, ,"['885373','885372','885374']","['991327']", , ,1.85,2634.98 +14417.0,pay order,2020-01-02 19:47:45.000Z, , ,"['991270']", , ,5.32,5480.98 +14418.0,pick item,2020-01-02 20:54:00.000Z, ,"['885364']", , , ,1.25,2200.0 +14419.0,place order,2020-01-03 00:41:30.000Z, ,"['885377','885376','885375']","['991328']", , ,2.24,354.97 +14420.0,pick item,2020-01-03 08:11:54.000Z, ,"['885360']", , , ,0.28,449.0 +14421.0,place order,2020-01-03 08:53:26.000Z, ,"['885380','885379','885378']","['991329']", , ,2.063,3529.0 +14422.0,confirm order,2020-01-03 09:03:11.000Z, , ,"['991325']", , ,0.36,1853.0 +14423.0,pick item,2020-01-03 09:05:04.000Z, ,"['885321']", , , ,1.28,149.99 +14424.0,pick item,2020-01-03 09:12:33.000Z, ,"['885377']", , , ,0.28,89.99 +14425.0,pick item,2020-01-03 09:17:37.000Z, ,"['885308']", , , ,0.166,799.0 +14426.0,confirm order,2020-01-03 09:18:29.000Z, , ,"['991328']", , ,2.24,354.97 +14427.0,item out of stock,2020-01-03 09:22:55.000Z, ,"['885311']", , , ,0.495,129.0 +14428.0,pick item,2020-01-03 09:29:59.000Z, ,"['885326']", , , ,1.37,2500.0 +14429.0,pick item,2020-01-03 09:45:06.000Z, ,"['885368']", , , ,0.188,1149.0 +14430.0,create package,2020-01-03 09:45:06.000Z, ,"['885254','885004','885013']", ,"['660845']", ,1.15,907.99 +14431.0,pick item,2020-01-03 09:47:40.000Z, ,"['885369']", , , ,0.44,476.0 +14432.0,pick item,2020-01-03 09:50:00.000Z, ,"['885268']", , , ,0.78,99.99 +14433.0,pick item,2020-01-03 09:56:05.000Z, ,"['885266']", , , ,1.48,199.99 +14434.0,create package,2020-01-03 09:56:05.000Z, ,"['885137','885368','885216','885219']", ,"['660846']", ,2.278,4574.0 +14435.0,pick item,2020-01-03 10:00:13.000Z, ,"['885306']", , , ,1.28,149.99 +14436.0,confirm order,2020-01-03 10:04:01.000Z, , ,"['991322']", , ,3.4,880.98 +14437.0,pick item,2020-01-03 10:04:57.000Z, ,"['885380']", , , ,0.483,495.0 +14438.0,pick item,2020-01-03 10:08:30.000Z, ,"['885355']", , , ,0.483,495.0 +14439.0,failed delivery,2020-01-03 10:15:27.000Z, , , ,"['660841']", ,1.342,2922.0 +14440.0,pick item,2020-01-03 10:33:19.000Z, ,"['885352']", , , ,0.44,476.0 +14441.0,create package,2020-01-03 10:33:19.000Z, ,"['885380','885293','885292','885294']", ,"['660847']", ,2.329,1533.98 +14442.0,item out of stock,2020-01-03 10:40:49.000Z, ,"['885329']", , , ,0.483,1099.0 +14443.0,confirm order,2020-01-03 10:42:57.000Z, , ,"['991327']", , ,1.85,2634.98 +14444.0,pick item,2020-01-03 10:46:13.000Z, ,"['885339']", , , ,0.495,129.0 +14445.0,pick item,2020-01-03 10:55:53.000Z, ,"['885015']", , , ,0.98,129.99 +14446.0,place order,2020-01-03 11:06:40.000Z, ,"['885386','885384','885383','885385','885381','885382']","['991330']", , ,3.195,6476.99 +14447.0,package delivered,2020-01-03 11:35:38.000Z, , , ,"['660842']", ,4.5760000000000005,3246.98 +14448.0,pick item,2020-01-03 11:38:23.000Z, ,"['885319']", , , ,0.483,79.99 +14449.0,pick item,2020-01-03 11:40:39.000Z, ,"['885370']", , , ,1.48,199.99 +14450.0,create package,2020-01-03 11:40:39.000Z, ,"['885179','885063','885280','885281','885116']", ,"['660848']", ,3.784,4697.98 +14451.0,pick item,2020-01-03 11:43:45.000Z, ,"['885291']", , , ,0.21,529.0 +14452.0,confirm order,2020-01-03 11:53:44.000Z, , ,"['991329']", , ,2.063,3529.0 +14453.0,pick item,2020-01-03 12:03:09.000Z, ,"['885224']", , , ,0.38,29.99 +14454.0,pick item,2020-01-03 12:12:46.000Z, ,"['885379']", , , ,0.21,529.0 +14455.0,place order,2020-01-03 12:33:07.000Z, ,"['885388','885387','885393','885390','885392','885391','885389']","['991331']", , ,4.138,2465.98 +14456.0,pick item,2020-01-03 12:41:59.000Z, ,"['885095']", , , ,1.25,2200.0 +14457.0,pick item,2020-01-03 13:25:46.000Z, ,"['885322']", , , ,0.98,129.99 +14458.0,create package,2020-01-03 13:25:46.000Z, ,"['885283','885284','885295','885238']", ,"['660849']", ,1.741,1057.98 +14459.0,send package,2020-01-03 13:26:07.000Z, , , ,"['660848']", ,3.784,4697.98 +14460.0,confirm order,2020-01-03 13:30:21.000Z, , ,"['991330']", , ,3.195,6476.99 +14461.0,send package,2020-01-03 13:31:58.000Z, , , ,"['660846']", ,2.278,4574.0 +14462.0,pick item,2020-01-03 14:10:35.000Z, ,"['885340']", , , ,1.48,199.99 +14463.0,reorder item,2020-01-03 14:11:35.000Z, ,"['885329']", , , ,0.483,1099.0 +14464.0,item out of stock,2020-01-03 14:16:05.000Z, ,"['885390']", , , ,0.495,129.0 +14465.0,pick item,2020-01-03 14:17:24.000Z, ,"['885350']", , , ,1.48,199.99 +14466.0,place order,2020-01-03 14:26:01.000Z, ,"['885394','885396','885395']","['991332']", , ,2.013,3753.0 +14467.0,pay order,2020-01-03 14:26:27.000Z, , ,"['991316']", , ,4.871,9982.0 +14468.0,pick item,2020-01-03 14:33:33.000Z, ,"['885359']", , , ,1.48,199.99 +14469.0,reorder item,2020-01-03 14:41:47.000Z, ,"['885290']", , , ,0.78,99.99 +14470.0,pick item,2020-01-03 15:01:12.000Z, ,"['885392']", , , ,0.28,449.0 +14471.0,create package,2020-01-03 15:01:12.000Z, ,"['885276','885053','885202','885133']", ,"['660850']", ,3.593,3528.98 +14472.0,pick item,2020-01-03 15:06:36.000Z, ,"['884851']", , , ,0.188,1149.0 +14473.0,reorder item,2020-01-03 15:13:30.000Z, ,"['885333']", , , ,0.88,89.99 +14474.0,pick item,2020-01-03 15:44:49.000Z, ,"['885367']", , , ,0.172,699.0 +14475.0,confirm order,2020-01-03 15:56:31.000Z, , ,"['991320']", , ,2.768,4192.98 +14476.0,confirm order,2020-01-03 16:06:59.000Z, , ,"['991331']", , ,4.138,2465.98 +14477.0,place order,2020-01-03 16:11:50.000Z, ,"['885397','885398']","['991333']", , ,0.99,633.99 +14478.0,package delivered,2020-01-03 16:13:06.000Z, , , ,"['660841']", ,1.342,2922.0 +14479.0,pay order,2020-01-03 16:18:04.000Z, , ,"['991199']", , ,4.769,4192.96 +14480.0,reorder item,2020-01-03 17:19:15.000Z, ,"['885338']", , , ,0.495,129.0 +14481.0,place order,2020-01-03 17:43:27.000Z, ,"['885400','885401','885399']","['991334']", , ,2.43,2374.98 +14482.0,confirm order,2020-01-03 17:43:37.000Z, , ,"['991333']", , ,0.99,633.99 +14483.0,reorder item,2020-01-03 17:52:47.000Z, ,"['885347']", , , ,0.172,699.0 +14484.0,pick item,2020-01-03 17:54:43.000Z, ,"['885376']", , , ,0.98,129.99 +14485.0,pick item,2020-01-03 17:56:19.000Z, ,"['885395']", , , ,1.25,2200.0 +14486.0,create package,2020-01-03 17:56:19.000Z, ,"['884713','885369','885147','885370']", ,"['660851']", ,2.886,2873.99 +14487.0,place order,2020-01-03 20:49:56.000Z, ,"['885403','885402','885404']","['991335']", , ,2.555,383.98 +14488.0,place order,2020-01-04 13:59:30.000Z, ,"['885406','885405']","['991336']", , ,0.6829999999999999,1283.0 +14489.0,create package,2020-01-04 23:00:00.000Z, ,"['885321','885377','885197','885322','885376','885324','885320']", ,"['660852']", ,5.193,2257.95 +14490.0,payment reminder,2020-01-05 08:02:17.000Z, , ,"['991209']", , ,6.884,4546.94 +14491.0,payment reminder,2020-01-05 11:00:02.000Z, , ,"['990985']", , ,3.512,1123.97 +14492.0,payment reminder,2020-01-05 11:16:28.000Z, , ,"['991215']", , ,2.215,1398.97 +14493.0,place order,2020-01-05 14:52:54.000Z, ,"['885409','885407','885408']","['991337']", , ,2.47,2780.99 +14494.0,payment reminder,2020-01-05 15:48:10.000Z, , ,"['991210']", , ,1.709,2092.98 +14495.0,item out of stock,2020-01-06 07:53:46.000Z, ,"['885396']", , , ,0.483,1099.0 +14496.0,place order,2020-01-06 07:53:52.000Z, ,"['885414','885413','885411','885410','885412']","['991338']", , ,1.958,2148.98 +14497.0,pick item,2020-01-06 08:12:33.000Z, ,"['885373']", , , ,0.28,89.99 +14498.0,confirm order,2020-01-06 08:24:16.000Z, , ,"['991336']", , ,0.6829999999999999,1283.0 +14499.0,send package,2020-01-06 08:29:33.000Z, , , ,"['660847']", ,2.329,1533.98 +14500.0,send package,2020-01-06 08:42:13.000Z, , , ,"['660844']", ,4.573,3916.97 +14501.0,send package,2020-01-06 08:45:47.000Z, , , ,"['660851']", ,2.886,2873.99 +14502.0,pick item,2020-01-06 08:46:59.000Z, ,"['885096']", , , ,0.483,495.0 +14503.0,pick item,2020-01-06 08:50:59.000Z, ,"['885371']", , , ,0.28,89.99 +14504.0,pick item,2020-01-06 08:51:14.000Z, ,"['885372']", , , ,1.37,2500.0 +14505.0,pick item,2020-01-06 08:57:07.000Z, ,"['885240']", , , ,0.21,529.0 +14506.0,pick item,2020-01-06 09:12:01.000Z, ,"['885329']", , , ,0.483,1099.0 +14507.0,pick item,2020-01-06 09:18:22.000Z, ,"['885122']", , , ,0.98,129.99 +14508.0,pick item,2020-01-06 09:22:39.000Z, ,"['885051']", , , ,1.37,2500.0 +14509.0,pay order,2020-01-06 09:51:35.000Z, , ,"['991328']", , ,2.24,354.97 +14510.0,send package,2020-01-06 09:52:11.000Z, , , ,"['660850']", ,3.593,3528.98 +14511.0,item out of stock,2020-01-06 10:04:42.000Z, ,"['885388']", , , ,0.21,529.0 +14512.0,place order,2020-01-06 10:10:35.000Z, ,"['885416','885418','885419','885415','885417']","['991339']", , ,2.498,2457.98 +14513.0,item out of stock,2020-01-06 10:22:56.000Z, ,"['885397']", , , ,0.78,99.99 +14514.0,pick item,2020-01-06 10:29:02.000Z, ,"['885419']", , , ,0.483,495.0 +14515.0,pick item,2020-01-06 10:32:09.000Z, ,"['884898']", , , ,0.166,799.0 +14516.0,package delivered,2020-01-06 10:37:59.000Z, , , ,"['660844']", ,4.573,3916.97 +14517.0,pick item,2020-01-06 11:05:47.000Z, ,"['884899']", , , ,0.78,99.99 +14518.0,create package,2020-01-06 11:05:47.000Z, ,"['885108','885287','885122','885288']", ,"['660853']", ,2.44,289.96 +14519.0,pick item,2020-01-06 11:11:51.000Z, ,"['885349']", , , ,0.172,699.0 +14520.0,reorder item,2020-01-06 11:13:55.000Z, ,"['885388']", , , ,0.21,529.0 +14521.0,failed delivery,2020-01-06 11:18:46.000Z, , , ,"['660846']", ,2.278,4574.0 +14522.0,pick item,2020-01-06 11:20:20.000Z, ,"['885402']", , , ,0.78,99.99 +14523.0,pick item,2020-01-06 11:33:01.000Z, ,"['885409']", , , ,0.44,476.0 +14524.0,place order,2020-01-06 11:40:58.000Z, ,"['885421','885422','885420']","['991340']", , ,1.643,679.98 +14525.0,pick item,2020-01-06 11:48:00.000Z, ,"['885398']", , , ,0.21,529.0 +14526.0,create package,2020-01-06 11:48:00.000Z, ,"['885326','885345','885325','885247','885341','885340','885339','885306']", ,"['660854']", ,7.085,6959.98 +14527.0,send package,2020-01-06 11:48:18.000Z, , , ,"['660849']", ,1.741,1057.98 +14528.0,confirm order,2020-01-06 11:58:18.000Z, , ,"['991335']", , ,2.555,383.98 +14529.0,pick item,2020-01-06 12:18:24.000Z, ,"['885414']", , , ,0.166,799.0 +14530.0,pick item,2020-01-06 12:30:14.000Z, ,"['885417']", , , ,0.172,699.0 +14531.0,pick item,2020-01-06 12:32:57.000Z, ,"['885335']", , , ,0.166,799.0 +14532.0,pay order,2020-01-06 12:49:32.000Z, , ,"['991323']", , ,1.456,2577.0 +14533.0,pick item,2020-01-06 12:50:19.000Z, ,"['885378']", , , ,1.37,2500.0 +14534.0,pick item,2020-01-06 12:50:56.000Z, ,"['885407']", , , ,1.25,2200.0 +14535.0,package delivered,2020-01-06 12:56:32.000Z, , , ,"['660847']", ,2.329,1533.98 +14536.0,pick item,2020-01-06 12:58:11.000Z, ,"['885383']", , , ,0.483,1099.0 +14537.0,pick item,2020-01-06 13:05:42.000Z, ,"['885259']", , , ,0.2,39.99 +14538.0,pay order,2020-01-06 13:22:27.000Z, , ,"['991304']", , ,2.132,923.97 +14539.0,confirm order,2020-01-06 13:26:14.000Z, , ,"['991338']", , ,1.958,2148.98 +14540.0,place order,2020-01-06 13:41:43.000Z, ,"['885428','885430','885429','885426','885424','885431','885425','885427','885423']","['991341']", , ,7.286,6848.95 +14541.0,send package,2020-01-06 13:59:06.000Z, , , ,"['660853']", ,2.44,289.96 +14542.0,send package,2020-01-06 14:18:12.000Z, , , ,"['660852']", ,5.193,2257.95 +14543.0,pick item,2020-01-06 14:20:35.000Z, ,"['885286']", , , ,0.88,89.99 +14544.0,create package,2020-01-06 14:20:35.000Z, ,"['885260','885259','884851']", ,"['660855']", ,0.598,1717.99 +14545.0,send package,2020-01-06 14:23:12.000Z, , , ,"['660854']", ,7.085,6959.98 +14546.0,send package,2020-01-06 14:24:16.000Z, , , ,"['660845']", ,1.15,907.99 +14547.0,confirm order,2020-01-06 14:30:18.000Z, , ,"['991332']", , ,2.013,3753.0 +14548.0,pick item,2020-01-06 14:33:40.000Z, ,"['885347']", , , ,0.172,699.0 +14549.0,package delivered,2020-01-06 14:34:51.000Z, , , ,"['660851']", ,2.886,2873.99 +14550.0,confirm order,2020-01-06 14:41:39.000Z, , ,"['991326']", , ,2.2,770.98 +14551.0,package delivered,2020-01-06 14:44:56.000Z, , , ,"['660848']", ,3.784,4697.98 +14552.0,confirm order,2020-01-06 14:48:49.000Z, , ,"['991334']", , ,2.43,2374.98 +14553.0,pick item,2020-01-06 14:54:58.000Z, ,"['885386']", , , ,0.188,1149.0 +14554.0,pick item,2020-01-06 15:15:26.000Z, ,"['885382']", , , ,1.37,2500.0 +14555.0,create package,2020-01-06 15:15:26.000Z, ,"['885329','885327','885319','885331']", ,"['660856']", ,2.546,4207.99 +14556.0,item out of stock,2020-01-06 15:15:47.000Z, ,"['885296']", , , ,1.25,2200.0 +14557.0,package delivered,2020-01-06 15:27:06.000Z, , , ,"['660853']", ,2.44,289.96 +14558.0,package delivered,2020-01-06 15:29:58.000Z, , , ,"['660846']", ,2.278,4574.0 +14559.0,pick item,2020-01-06 15:31:22.000Z, ,"['885424']", , , ,0.483,495.0 +14560.0,package delivered,2020-01-06 15:33:27.000Z, , , ,"['660850']", ,3.593,3528.98 +14561.0,package delivered,2020-01-06 15:42:12.000Z, , , ,"['660852']", ,5.193,2257.95 +14562.0,place order,2020-01-06 15:43:13.000Z, ,"['885437','885435','885433','885432','885438','885434','885436','885439']","['991342']", , ,4.971,7601.97 +14563.0,pick item,2020-01-06 15:44:46.000Z, ,"['885430']", , , ,1.37,2500.0 +14564.0,package delivered,2020-01-06 15:56:51.000Z, , , ,"['660854']", ,7.085,6959.98 +14565.0,item out of stock,2020-01-06 16:00:58.000Z, ,"['885408']", , , ,0.78,99.99 +14566.0,pick item,2020-01-06 16:05:11.000Z, ,"['885361']", , , ,0.483,495.0 +14567.0,pick item,2020-01-06 16:07:29.000Z, ,"['885242']", , , ,0.483,79.99 +14568.0,create package,2020-01-06 16:07:29.000Z, ,"['885353','885414','885350','885362','885165','885358','885361','885359','885363','885360','885348','885352','885364','885349','885355','885351','885059']", ,"['660857']", ,10.361,10394.95 +14569.0,package delivered,2020-01-06 16:13:04.000Z, , , ,"['660849']", ,1.741,1057.98 +14570.0,send package,2020-01-06 16:46:34.000Z, , , ,"['660855']", ,0.598,1717.99 +14571.0,reorder item,2020-01-06 16:50:16.000Z, ,"['885356']", , , ,0.21,529.0 +14572.0,pick item,2020-01-06 16:53:20.000Z, ,"['885413']", , , ,0.98,129.99 +14573.0,reorder item,2020-01-06 17:16:00.000Z, ,"['885396']", , , ,0.483,1099.0 +14574.0,item out of stock,2020-01-06 17:16:52.000Z, ,"['885357']", , , ,0.44,476.0 +14575.0,pick item,2020-01-06 17:25:13.000Z, ,"['885436']", , , ,1.37,2500.0 +14576.0,pick item,2020-01-06 17:27:40.000Z, ,"['885426']", , , ,1.28,149.99 +14577.0,pick item,2020-01-06 17:29:54.000Z, ,"['885302']", , , ,0.38,29.99 +14578.0,item out of stock,2020-01-06 17:33:33.000Z, ,"['885433']", , , ,0.188,1149.0 +14579.0,place order,2020-01-06 17:46:14.000Z, ,"['885444','885441','885446','885445','885443','885440','885442']","['991343']", , ,3.332,3717.97 +14580.0,pick item,2020-01-06 18:07:46.000Z, ,"['885365']", , , ,1.28,149.99 +14581.0,pick item,2020-01-06 18:42:09.000Z, ,"['885435']", , , ,1.37,2500.0 +14582.0,pick item,2020-01-06 19:20:28.000Z, ,"['885403']", , , ,0.495,129.0 +14583.0,send package,2020-01-06 19:42:25.000Z, , , ,"['660856']", ,2.546,4207.99 +14584.0,pick item,2020-01-06 20:28:01.000Z, ,"['885431']", , , ,0.28,89.99 +14585.0,place order,2020-01-06 20:58:17.000Z, ,"['885447','885448']","['991344']", , ,0.6709999999999999,2253.0 +14586.0,item out of stock,2020-01-06 21:13:24.000Z, ,"['885391']", , , ,1.48,199.99 +14587.0,place order,2020-01-07 07:07:36.000Z, ,"['885452','885449','885454','885451','885450','885453']","['991345']", , ,3.495,3932.97 +14588.0,pick item,2020-01-07 07:55:22.000Z, ,"['885412']", , , ,0.2,39.99 +14589.0,pick item,2020-01-07 08:20:52.000Z, ,"['885416']", , , ,0.38,29.99 +14590.0,confirm order,2020-01-07 08:35:45.000Z, , ,"['991345']", , ,3.495,3932.97 +14591.0,payment reminder,2020-01-07 08:39:40.000Z, , ,"['991230']", , ,2.426,1103.98 +14592.0,item out of stock,2020-01-07 08:44:47.000Z, ,"['885385']", , , ,0.483,79.99 +14593.0,place order,2020-01-07 09:01:11.000Z, ,"['885460','885458','885457','885455','885459','885456']","['991346']", , ,2.747,2397.98 +14594.0,pick item,2020-01-07 09:03:27.000Z, ,"['885411']", , , ,0.172,699.0 +14595.0,pay order,2020-01-07 09:03:47.000Z, , ,"['991277']", , ,3.832,7255.0 +14596.0,pick item,2020-01-07 09:09:00.000Z, ,"['885404']", , , ,1.28,149.99 +14597.0,payment reminder,2020-01-07 09:16:15.000Z, , ,"['991117']", , ,2.272,1369.98 +14598.0,reorder item,2020-01-07 09:18:00.000Z, ,"['885391']", , , ,1.48,199.99 +14599.0,pick item,2020-01-07 09:22:46.000Z, ,"['885399']", , , ,0.2,39.99 +14600.0,pick item,2020-01-07 09:34:35.000Z, ,"['885422']", , , ,0.88,89.99 +14601.0,confirm order,2020-01-07 09:37:58.000Z, , ,"['991339']", , ,2.498,2457.98 +14602.0,pick item,2020-01-07 09:45:40.000Z, ,"['885342']", , , ,0.88,89.99 +14603.0,item out of stock,2020-01-07 09:54:14.000Z, ,"['885415']", , , ,0.483,1099.0 +14604.0,pay order,2020-01-07 09:58:16.000Z, , ,"['991331']", , ,4.138,2465.98 +14605.0,pick item,2020-01-07 10:02:33.000Z, ,"['885389']", , , ,0.483,495.0 +14606.0,pay order,2020-01-07 10:02:41.000Z, , ,"['991307']", , ,3.505,2563.98 +14607.0,confirm order,2020-01-07 10:16:14.000Z, , ,"['991343']", , ,3.332,3717.97 +14608.0,place order,2020-01-07 10:22:10.000Z, ,"['885464','885462','885463','885461','885465']","['991347']", , ,2.25,863.96 +14609.0,item out of stock,2020-01-07 10:27:15.000Z, ,"['885441']", , , ,0.78,99.99 +14610.0,pick item,2020-01-07 10:27:33.000Z, ,"['885438']", , , ,0.78,99.99 +14611.0,create package,2020-01-07 10:27:33.000Z, ,"['885308']", ,"['660858']", ,0.166,799.0 +14612.0,confirm order,2020-01-07 10:49:41.000Z, , ,"['991342']", , ,4.971,7601.97 +14613.0,reorder item,2020-01-07 10:52:45.000Z, ,"['885332']", , , ,1.37,2500.0 +14614.0,reorder item,2020-01-07 10:54:18.000Z, ,"['885390']", , , ,0.495,129.0 +14615.0,send package,2020-01-07 10:54:56.000Z, , , ,"['660857']", ,10.361,10394.95 +14616.0,package delivered,2020-01-07 10:59:19.000Z, , , ,"['660855']", ,0.598,1717.99 +14617.0,pick item,2020-01-07 11:06:12.000Z, ,"['885305']", , , ,0.44,476.0 +14618.0,create package,2020-01-07 11:06:12.000Z, ,"['885416','885373','885015','885268','885419','885266','885417','885372']", ,"['660859']", ,5.925,4243.95 +14619.0,confirm order,2020-01-07 11:19:22.000Z, , ,"['991337']", , ,2.47,2780.99 +14620.0,pay order,2020-01-07 11:19:53.000Z, , ,"['991031']", , ,1.046,893.99 +14621.0,confirm order,2020-01-07 11:22:36.000Z, , ,"['991340']", , ,1.643,679.98 +14622.0,pick item,2020-01-07 11:26:17.000Z, ,"['885374']", , , ,0.2,39.99 +14623.0,confirm order,2020-01-07 11:47:25.000Z, , ,"['991344']", , ,0.6709999999999999,2253.0 +14624.0,pay order,2020-01-07 11:53:26.000Z, , ,"['991327']", , ,1.85,2634.98 +14625.0,package delivered,2020-01-07 11:54:18.000Z, , , ,"['660845']", ,1.15,907.99 +14626.0,place order,2020-01-07 12:04:07.000Z, ,"['885466','885467','885468']","['991348']", , ,1.555,323.98 +14627.0,package delivered,2020-01-07 12:23:44.000Z, , , ,"['660857']", ,10.361,10394.95 +14628.0,item out of stock,2020-01-07 12:52:53.000Z, ,"['885450']", , , ,0.172,699.0 +14629.0,pick item,2020-01-07 12:57:25.000Z, ,"['885448']", , , ,0.483,1099.0 +14630.0,pay order,2020-01-07 12:59:34.000Z, , ,"['991201']", , ,1.49,683.99 +14631.0,place order,2020-01-07 13:28:01.000Z, ,"['885469','885470','885471']","['991349']", , ,1.946,294.97 +14632.0,pick item,2020-01-07 13:28:53.000Z, ,"['885455']", , , ,0.495,129.0 +14633.0,pick item,2020-01-07 13:37:17.000Z, ,"['885460']", , , ,0.44,476.0 +14634.0,pay order,2020-01-07 13:43:57.000Z, , ,"['991319']", , ,3.56,1081.98 +14635.0,pick item,2020-01-07 13:47:49.000Z, ,"['885343']", , , ,0.166,799.0 +14636.0,pay order,2020-01-07 14:03:15.000Z, , ,"['991345']", , ,3.495,3932.97 +14637.0,pick item,2020-01-07 14:10:08.000Z, ,"['885462']", , , ,0.78,99.99 +14638.0,pick item,2020-01-07 14:10:16.000Z, ,"['885463']", , , ,0.21,529.0 +14639.0,send package,2020-01-07 14:19:08.000Z, , , ,"['660859']", ,5.925,4243.95 +14640.0,item out of stock,2020-01-07 14:28:33.000Z, ,"['885464']", , , ,0.2,39.99 +14641.0,reorder item,2020-01-07 14:39:23.000Z, ,"['885311']", , , ,0.495,129.0 +14642.0,pick item,2020-01-07 14:45:56.000Z, ,"['885346']", , , ,0.28,89.99 +14643.0,create package,2020-01-07 14:45:56.000Z, ,"['885291','885379','885378','885399']", ,"['660860']", ,1.99,3597.99 +14644.0,reorder item,2020-01-07 14:49:21.000Z, ,"['885441']", , , ,0.78,99.99 +14645.0,pick item,2020-01-07 14:55:33.000Z, ,"['885425']", , , ,1.25,2200.0 +14646.0,pay order,2020-01-07 15:05:24.000Z, , ,"['991264']", , ,4.706,4232.98 +14647.0,place order,2020-01-07 15:15:50.000Z, ,"['885474','885472','885475','885473']","['991350']", , ,2.695,1258.99 +14648.0,send package,2020-01-07 15:19:21.000Z, , , ,"['660858']", ,0.166,799.0 +14649.0,reorder item,2020-01-07 15:21:36.000Z, ,"['885249']", , , ,0.495,129.0 +14650.0,reorder item,2020-01-07 15:26:58.000Z, ,"['885397']", , , ,0.78,99.99 +14651.0,pay order,2020-01-07 15:37:37.000Z, , ,"['991301']", , ,1.5119999999999998,3031.99 +14652.0,package delivered,2020-01-07 15:41:51.000Z, , , ,"['660856']", ,2.546,4207.99 +14653.0,pick item,2020-01-07 15:58:17.000Z, ,"['884942']", , , ,0.38,29.99 +14654.0,pick item,2020-01-07 15:59:36.000Z, ,"['885468']", , , ,0.495,129.0 +14655.0,pick item,2020-01-07 16:20:58.000Z, ,"['885366']", , , ,0.98,129.99 +14656.0,create package,2020-01-07 16:20:58.000Z, ,"['885224']", ,"['660861']", ,0.38,29.99 +14657.0,reorder item,2020-01-07 16:22:52.000Z, ,"['885415']", , , ,0.483,1099.0 +14658.0,pick item,2020-01-07 16:47:49.000Z, ,"['885421']", , , ,0.28,89.99 +14659.0,create package,2020-01-07 16:47:49.000Z, ,"['885095','884898','885367','885096','884899']", ,"['660862']", ,2.8510000000000004,4292.99 +14660.0,item out of stock,2020-01-07 16:48:52.000Z, ,"['885381']", , , ,0.188,1149.0 +14661.0,place order,2020-01-07 16:51:27.000Z, ,"['885478','885479','885477','885481','885482','885476','885480','885484','885483']","['991351']", , ,3.925,7638.98 +14662.0,confirm order,2020-01-07 17:25:14.000Z, , ,"['991346']", , ,2.747,2397.98 +14663.0,pick item,2020-01-07 17:38:40.000Z, ,"['885400']", , , ,0.98,129.99 +14664.0,pick item,2020-01-07 18:14:08.000Z, ,"['885443']", , , ,0.166,799.0 +14665.0,place order,2020-01-07 19:13:56.000Z, ,"['885485','885488','885486','885487']","['991352']", , ,1.67,793.97 +14666.0,pick item,2020-01-07 19:37:22.000Z, ,"['885172']", , , ,0.21,529.0 +14667.0,reorder item,2020-01-07 20:33:57.000Z, ,"['885328']", , , ,1.25,2200.0 +14668.0,place order,2020-01-07 22:07:27.000Z, ,"['885491','885492','885489','885490']","['991353']", , ,1.641,1072.98 +14669.0,reorder item,2020-01-08 07:20:56.000Z, ,"['885408']", , , ,0.78,99.99 +14670.0,pick item,2020-01-08 07:26:05.000Z, ,"['885465']", , , ,0.28,89.99 +14671.0,package delivered,2020-01-08 07:27:01.000Z, , , ,"['660858']", ,0.166,799.0 +14672.0,pick item,2020-01-08 07:37:35.000Z, ,"['885394']", , , ,0.28,449.0 +14673.0,create package,2020-01-08 07:37:35.000Z, ,"['885462','885463','885392','885465','885389']", ,"['660863']", ,2.033,1662.98 +14674.0,reorder item,2020-01-08 07:39:07.000Z, ,"['885200']", , , ,0.78,99.99 +14675.0,send package,2020-01-08 07:48:50.000Z, , , ,"['660861']", ,0.38,29.99 +14676.0,place order,2020-01-08 08:00:31.000Z, ,"['885495','885493','885494','885496']","['991354']", , ,4.31,5433.99 +14677.0,pick item,2020-01-08 08:09:41.000Z, ,"['885496']", , , ,0.21,529.0 +14678.0,pay order,2020-01-08 08:35:58.000Z, , ,"['991336']", , ,0.6829999999999999,1283.0 +14679.0,item out of stock,2020-01-08 08:41:37.000Z, ,"['885475']", , , ,0.28,449.0 +14680.0,confirm order,2020-01-08 08:42:28.000Z, , ,"['991351']", , ,3.925,7638.98 +14681.0,pick item,2020-01-08 08:52:14.000Z, ,"['885445']", , , ,0.2,39.99 +14682.0,pick item,2020-01-08 08:55:55.000Z, ,"['885453']", , , ,0.21,529.0 +14683.0,item out of stock,2020-01-08 08:56:05.000Z, ,"['885470']", , , ,0.483,79.99 +14684.0,send package,2020-01-08 09:03:28.000Z, , , ,"['660863']", ,2.033,1662.98 +14685.0,pick item,2020-01-08 09:06:41.000Z, ,"['885473']", , , ,1.48,199.99 +14686.0,confirm order,2020-01-08 09:08:52.000Z, , ,"['991352']", , ,1.67,793.97 +14687.0,pick item,2020-01-08 09:12:45.000Z, ,"['885408']", , , ,0.78,99.99 +14688.0,create package,2020-01-08 09:12:45.000Z, ,"['885403','885394','885402','885404','885395']", ,"['660864']", ,4.085,3027.98 +14689.0,item out of stock,2020-01-08 09:20:31.000Z, ,"['885476']", , , ,0.483,79.99 +14690.0,place order,2020-01-08 09:20:49.000Z, ,"['885501','885497','885498','885499','885500']","['991355']", , ,3.701,1731.98 +14691.0,package delivered,2020-01-08 09:25:55.000Z, , , ,"['660859']", ,5.925,4243.95 +14692.0,pick item,2020-01-08 09:27:03.000Z, ,"['885466']", , , ,0.28,89.99 +14693.0,pick item,2020-01-08 09:34:27.000Z, ,"['885452']", , , ,1.37,2500.0 +14694.0,pick item,2020-01-08 09:35:56.000Z, ,"['885344']", , , ,0.78,99.99 +14695.0,pay order,2020-01-08 09:49:40.000Z, , ,"['991261']", , ,3.625,2813.98 +14696.0,send package,2020-01-08 09:52:01.000Z, , , ,"['660864']", ,4.085,3027.98 +14697.0,send package,2020-01-08 09:56:45.000Z, , , ,"['660860']", ,1.99,3597.99 +14698.0,pick item,2020-01-08 10:14:18.000Z, ,"['885120']", , , ,0.88,89.99 +14699.0,pick item,2020-01-08 10:20:21.000Z, ,"['885354']", , , ,0.28,449.0 +14700.0,create package,2020-01-08 10:20:21.000Z, ,"['885371']", ,"['660865']", ,0.28,89.99 +14701.0,pick item,2020-01-08 10:37:39.000Z, ,"['885471']", , , ,0.98,129.99 +14702.0,create package,2020-01-08 10:37:39.000Z, ,"['885302','885460','885398','885240','885335','885242','885455']", ,"['660866']", ,2.384,2571.98 +14703.0,item out of stock,2020-01-08 10:43:36.000Z, ,"['885478']", , , ,0.166,799.0 +14704.0,confirm order,2020-01-08 10:46:45.000Z, , ,"['991347']", , ,2.25,863.96 +14705.0,pick item,2020-01-08 10:48:59.000Z, ,"['885449']", , , ,0.38,29.99 +14706.0,pay order,2020-01-08 10:53:16.000Z, , ,"['991332']", , ,2.013,3753.0 +14707.0,place order,2020-01-08 11:01:26.000Z, ,"['885502','885504','885503']","['991356']", , ,2.93,2704.98 +14708.0,pick item,2020-01-08 11:04:24.000Z, ,"['885387']", , , ,0.98,129.99 +14709.0,confirm order,2020-01-08 11:04:58.000Z, , ,"['991341']", , ,7.286,6848.95 +14710.0,pay order,2020-01-08 11:06:52.000Z, , ,"['991341']", , ,7.286,6848.95 +14711.0,pick item,2020-01-08 11:13:19.000Z, ,"['885401']", , , ,1.25,2200.0 +14712.0,reorder item,2020-01-08 11:13:49.000Z, ,"['885450']", , , ,0.172,699.0 +14713.0,pick item,2020-01-08 11:15:10.000Z, ,"['885410']", , , ,0.44,476.0 +14714.0,pick item,2020-01-08 11:25:49.000Z, ,"['885442']", , , ,0.44,476.0 +14715.0,pay order,2020-01-08 11:27:47.000Z, , ,"['991208']", , ,0.98,134.99 +14716.0,package delivered,2020-01-08 11:33:15.000Z, , , ,"['660861']", ,0.38,29.99 +14717.0,pick item,2020-01-08 11:34:33.000Z, ,"['885450']", , , ,0.172,699.0 +14718.0,reorder item,2020-01-08 11:50:43.000Z, ,"['885304']", , , ,0.78,99.99 +14719.0,pick item,2020-01-08 11:57:09.000Z, ,"['885485']", , , ,0.28,89.99 +14720.0,create package,2020-01-08 11:57:09.000Z, ,"['885286','885051','884942']", ,"['660867']", ,2.63,2619.98 +14721.0,payment reminder,2020-01-08 12:07:52.000Z, , ,"['991223']", , ,3.523,4392.97 +14722.0,reorder item,2020-01-08 12:11:36.000Z, ,"['885464']", , , ,0.2,39.99 +14723.0,confirm order,2020-01-08 12:11:42.000Z, , ,"['991354']", , ,4.31,5433.99 +14724.0,place order,2020-01-08 12:22:39.000Z, ,"['885505']","['991357']", , ,0.188,1154.0 +14725.0,confirm order,2020-01-08 12:24:04.000Z, , ,"['991355']", , ,3.701,1731.98 +14726.0,item out of stock,2020-01-08 12:27:48.000Z, ,"['885491']", , , ,0.2,39.99 +14727.0,pick item,2020-01-08 13:25:15.000Z, ,"['885104']", , , ,0.44,476.0 +14728.0,pay order,2020-01-08 13:25:38.000Z, , ,"['991284']", , ,0.88,94.99 +14729.0,confirm order,2020-01-08 13:35:53.000Z, , ,"['991357']", , ,0.188,1154.0 +14730.0,payment reminder,2020-01-08 13:46:26.000Z, , ,"['991235']", , ,1.855,293.98 +14731.0,place order,2020-01-08 14:05:06.000Z, ,"['885508','885507','885506','885510','885509']","['991358']", , ,2.499,4671.99 +14732.0,pick item,2020-01-08 14:11:55.000Z, ,"['885446']", , , ,0.483,1099.0 +14733.0,pick item,2020-01-08 14:13:16.000Z, ,"['885454']", , , ,0.88,89.99 +14734.0,create package,2020-01-08 14:13:16.000Z, ,"['885448','885409','885407','885408']", ,"['660868']", ,2.9530000000000003,3874.99 +14735.0,pick item,2020-01-08 14:13:55.000Z, ,"['885492']", , , ,0.495,129.0 +14736.0,pick item,2020-01-08 14:20:21.000Z, ,"['885393']", , , ,0.21,529.0 +14737.0,pick item,2020-01-08 14:20:36.000Z, ,"['885434']", , , ,0.495,129.0 +14738.0,pick item,2020-01-08 14:21:33.000Z, ,"['885444']", , , ,0.483,1099.0 +14739.0,create package,2020-01-08 14:21:33.000Z, ,"['885386','885485','885172','885383','885473','885382']", ,"['660869']", ,4.011,5566.98 +14740.0,pay order,2020-01-08 14:25:57.000Z, , ,"['991250']", , ,3.82,903.97 +14741.0,payment reminder,2020-01-08 14:30:25.000Z, , ,"['991236']", , ,1.28,154.99 +14742.0,pick item,2020-01-08 14:40:06.000Z, ,"['885482']", , , ,1.37,2500.0 +14743.0,pick item,2020-01-08 14:45:14.000Z, ,"['885328']", , , ,1.25,2200.0 +14744.0,pick item,2020-01-08 14:45:22.000Z, ,"['885432']", , , ,0.38,29.99 +14745.0,send package,2020-01-08 14:47:46.000Z, , , ,"['660868']", ,2.9530000000000003,3874.99 +14746.0,pick item,2020-01-08 14:51:46.000Z, ,"['885423']", , , ,0.98,129.99 +14747.0,confirm order,2020-01-08 14:56:14.000Z, , ,"['991350']", , ,2.695,1258.99 +14748.0,pick item,2020-01-08 14:56:22.000Z, ,"['885459']", , , ,0.166,799.0 +14749.0,payment reminder,2020-01-08 15:20:17.000Z, , ,"['991238']", , ,2.878,2053.97 +14750.0,pick item,2020-01-08 15:26:15.000Z, ,"['885440']", , , ,0.78,99.99 +14751.0,create package,2020-01-08 15:26:15.000Z, ,"['885347','885343','885120','885342','885346','885305','885344']", ,"['660870']", ,3.5980000000000003,2343.96 +14752.0,place order,2020-01-08 15:29:59.000Z, ,"['885518','885517','885511','885516','885514','885513','885519','885515','885512']","['991359']", , ,5.894,3268.94 +14753.0,pick item,2020-01-08 15:30:01.000Z, ,"['885517']", , , ,0.483,1099.0 +14754.0,pick item,2020-01-08 15:35:21.000Z, ,"['884991']", , , ,0.495,129.0 +14755.0,pick item,2020-01-08 15:38:05.000Z, ,"['885439']", , , ,0.188,1149.0 +14756.0,confirm order,2020-01-08 15:38:18.000Z, , ,"['991359']", , ,5.894,3268.94 +14757.0,send package,2020-01-08 15:47:33.000Z, , , ,"['660862']", ,2.8510000000000004,4292.99 +14758.0,pay order,2020-01-08 15:53:17.000Z, , ,"['991329']", , ,2.063,3529.0 +14759.0,pick item,2020-01-08 15:57:10.000Z, ,"['885498']", , , ,0.28,449.0 +14760.0,pick item,2020-01-08 15:57:39.000Z, ,"['885330']", , , ,0.188,1149.0 +14761.0,confirm order,2020-01-08 16:01:28.000Z, , ,"['991349']", , ,1.946,294.97 +14762.0,pick item,2020-01-08 16:08:03.000Z, ,"['885497']", , , ,0.166,799.0 +14763.0,pick item,2020-01-08 16:14:55.000Z, ,"['885483']", , , ,0.483,1099.0 +14764.0,create package,2020-01-08 16:14:55.000Z, ,"['885430','885438','885330','885426','885435','885424','885432','885431','885434','885425','885423','885436','885328','885439']", ,"['660871']", ,11.664,15321.95 +14765.0,send package,2020-01-08 16:18:32.000Z, , , ,"['660869']", ,4.011,5566.98 +14766.0,pay order,2020-01-08 16:19:16.000Z, , ,"['991285']", , ,2.91,2171.97 +14767.0,confirm order,2020-01-08 16:20:13.000Z, , ,"['991358']", , ,2.499,4671.99 +14768.0,pick item,2020-01-08 16:20:42.000Z, ,"['885303']", , , ,1.28,149.99 +14769.0,pick item,2020-01-08 16:21:43.000Z, ,"['885484']", , , ,0.188,1149.0 +14770.0,pay order,2020-01-08 16:23:28.000Z, , ,"['991273']", , ,3.99,7205.0 +14771.0,pay order,2020-01-08 16:30:44.000Z, , ,"['991184']", , ,1.2,540.98 +14772.0,pick item,2020-01-08 16:35:45.000Z, ,"['885356']", , , ,0.21,529.0 +14773.0,send package,2020-01-08 16:37:48.000Z, , , ,"['660871']", ,11.664,15321.95 +14774.0,pick item,2020-01-08 16:39:24.000Z, ,"['885375']", , , ,0.98,129.99 +14775.0,send package,2020-01-08 16:48:08.000Z, , , ,"['660866']", ,2.384,2571.98 +14776.0,reorder item,2020-01-08 16:58:54.000Z, ,"['885385']", , , ,0.483,79.99 +14777.0,item out of stock,2020-01-08 16:59:00.000Z, ,"['885384']", , , ,0.483,495.0 +14778.0,item out of stock,2020-01-08 17:00:22.000Z, ,"['885480']", , , ,0.38,29.99 +14779.0,item out of stock,2020-01-08 17:04:56.000Z, ,"['885428']", , , ,0.28,89.99 +14780.0,send package,2020-01-08 17:11:08.000Z, , , ,"['660867']", ,2.63,2619.98 +14781.0,place order,2020-01-08 17:19:45.000Z, ,"['885523','885522','885520','885521']","['991360']", , ,3.248,6330.0 +14782.0,payment reminder,2020-01-08 17:24:51.000Z, , ,"['991240']", , ,0.2,44.99 +14783.0,send package,2020-01-08 18:03:51.000Z, , , ,"['660865']", ,0.28,89.99 +14784.0,pay order,2020-01-08 18:36:38.000Z, , ,"['991297']", , ,0.483,1104.0 +14785.0,pick item,2020-01-08 18:42:47.000Z, ,"['885493']", , , ,1.37,2500.0 +14786.0,package delivered,2020-01-08 18:50:30.000Z, , , ,"['660867']", ,2.63,2619.98 +14787.0,confirm order,2020-01-08 18:57:37.000Z, , ,"['991356']", , ,2.93,2704.98 +14788.0,pick item,2020-01-08 19:27:35.000Z, ,"['885263']", , , ,0.483,1099.0 +14789.0,place order,2020-01-08 19:38:50.000Z, ,"['885528','885530','885525','885524','885531','885529','885526','885527']","['991361']", , ,8.603,11483.97 +14790.0,item out of stock,2020-01-08 19:39:12.000Z, ,"['885516']", , , ,0.44,476.0 +14791.0,failed delivery,2020-01-08 20:04:02.000Z, , , ,"['660864']", ,4.085,3027.98 +14792.0,pick item,2020-01-08 21:00:02.000Z, ,"['885437']", , , ,0.2,39.99 +14793.0,place order,2020-01-09 00:10:54.000Z, ,"['885534','885532','885533']","['991362']", , ,1.703,660.98 +14794.0,reorder item,2020-01-09 07:51:34.000Z, ,"['885478']", , , ,0.166,799.0 +14795.0,reorder item,2020-01-09 08:08:42.000Z, ,"['885384']", , , ,0.483,495.0 +14796.0,item out of stock,2020-01-09 08:10:25.000Z, ,"['885494']", , , ,1.48,199.99 +14797.0,pick item,2020-01-09 08:13:45.000Z, ,"['885479']", , , ,0.495,129.0 +14798.0,package delivered,2020-01-09 08:19:04.000Z, , , ,"['660865']", ,0.28,89.99 +14799.0,place order,2020-01-09 08:19:47.000Z, ,"['885536','885542','885535','885541','885537','885539','885540','885538']","['991363']", , ,5.632999999999999,4631.96 +14800.0,pick item,2020-01-09 08:23:58.000Z, ,"['885506']", , , ,0.495,129.0 +14801.0,pick item,2020-01-09 08:25:31.000Z, ,"['885499']", , , ,1.48,199.99 +14802.0,pick item,2020-01-09 08:37:57.000Z, ,"['885456']", , , ,0.2,39.99 +14803.0,confirm order,2020-01-09 08:41:23.000Z, , ,"['991361']", , ,8.603,11483.97 +14804.0,reorder item,2020-01-09 08:55:16.000Z, ,"['885516']", , , ,0.44,476.0 +14805.0,item out of stock,2020-01-09 09:06:40.000Z, ,"['885518']", , , ,0.88,89.99 +14806.0,package delivered,2020-01-09 09:09:37.000Z, , , ,"['660866']", ,2.384,2571.98 +14807.0,item out of stock,2020-01-09 09:26:50.000Z, ,"['885531']", , , ,0.28,89.99 +14808.0,item out of stock,2020-01-09 09:29:07.000Z, ,"['885536']", , , ,0.78,99.99 +14809.0,pick item,2020-01-09 09:37:38.000Z, ,"['885530']", , , ,1.37,2500.0 +14810.0,confirm order,2020-01-09 09:48:48.000Z, , ,"['991353']", , ,1.641,1072.98 +14811.0,package delivered,2020-01-09 09:53:55.000Z, , , ,"['660863']", ,2.033,1662.98 +14812.0,pick item,2020-01-09 09:57:17.000Z, ,"['885451']", , , ,0.483,79.99 +14813.0,place order,2020-01-09 09:59:21.000Z, ,"['885543','885544','885545']","['991364']", , ,1.746,2302.99 +14814.0,send package,2020-01-09 10:06:03.000Z, , , ,"['660870']", ,3.5980000000000003,2343.96 +14815.0,pay order,2020-01-09 10:14:52.000Z, , ,"['991333']", , ,0.99,633.99 +14816.0,package delivered,2020-01-09 10:16:22.000Z, , , ,"['660871']", ,11.664,15321.95 +14817.0,pick item,2020-01-09 10:21:30.000Z, ,"['885527']", , , ,0.88,89.99 +14818.0,create package,2020-01-09 10:21:30.000Z, ,"['885356','885366','885413','885365','885517','885411','885410','885412','885354']", ,"['660872']", ,5.025,3701.96 +14819.0,pick item,2020-01-09 10:24:30.000Z, ,"['884891']", , , ,0.28,449.0 +14820.0,failed delivery,2020-01-09 10:30:29.000Z, , , ,"['660868']", ,2.9530000000000003,3874.99 +14821.0,reorder item,2020-01-09 10:32:04.000Z, ,"['885296']", , , ,1.25,2200.0 +14822.0,reorder item,2020-01-09 10:33:26.000Z, ,"['885531']", , , ,0.28,89.99 +14823.0,pick item,2020-01-09 10:41:48.000Z, ,"['885186']", , , ,0.44,476.0 +14824.0,pay order,2020-01-09 10:43:06.000Z, , ,"['991320']", , ,2.768,4192.98 +14825.0,confirm order,2020-01-09 10:50:13.000Z, , ,"['991348']", , ,1.555,323.98 +14826.0,package delivered,2020-01-09 11:00:34.000Z, , , ,"['660862']", ,2.8510000000000004,4292.99 +14827.0,item out of stock,2020-01-09 11:17:41.000Z, ,"['885469']", , , ,0.483,79.99 +14828.0,reorder item,2020-01-09 11:23:53.000Z, ,"['885475']", , , ,0.28,449.0 +14829.0,pick item,2020-01-09 11:33:37.000Z, ,"['885529']", , , ,1.37,2500.0 +14830.0,reorder item,2020-01-09 11:35:36.000Z, ,"['885357']", , , ,0.44,476.0 +14831.0,reorder item,2020-01-09 11:43:27.000Z, ,"['885433']", , , ,0.188,1149.0 +14832.0,pick item,2020-01-09 11:56:00.000Z, ,"['885101']", , , ,0.98,129.99 +14833.0,pick item,2020-01-09 11:56:59.000Z, ,"['885538']", , , ,0.28,449.0 +14834.0,pick item,2020-01-09 12:02:48.000Z, ,"['884992']", , , ,0.172,699.0 +14835.0,failed delivery,2020-01-09 12:07:33.000Z, , , ,"['660864']", ,4.085,3027.98 +14836.0,place order,2020-01-09 12:18:30.000Z, ,"['885547','885546']","['991365']", , ,1.22,580.99 +14837.0,package delivered,2020-01-09 12:23:16.000Z, , , ,"['660860']", ,1.99,3597.99 +14838.0,item out of stock,2020-01-09 12:53:13.000Z, ,"['885467']", , , ,0.78,99.99 +14839.0,confirm order,2020-01-09 13:19:28.000Z, , ,"['991362']", , ,1.703,660.98 +14840.0,item out of stock,2020-01-09 13:30:45.000Z, ,"['885457']", , , ,0.166,799.0 +14841.0,confirm order,2020-01-09 13:41:56.000Z, , ,"['991363']", , ,5.632999999999999,4631.96 +14842.0,pick item,2020-01-09 13:47:41.000Z, ,"['885488']", , , ,0.21,529.0 +14843.0,package delivered,2020-01-09 13:51:27.000Z, , , ,"['660870']", ,3.5980000000000003,2343.96 +14844.0,payment reminder,2020-01-09 13:51:34.000Z, , ,"['991245']", , ,2.215,759.99 +14845.0,place order,2020-01-09 13:56:47.000Z, ,"['885549','885548']","['991366']", , ,1.763,1253.99 +14846.0,pay order,2020-01-09 13:59:08.000Z, , ,"['991359']", , ,5.894,3268.94 +14847.0,package delivered,2020-01-09 14:05:43.000Z, , , ,"['660869']", ,4.011,5566.98 +14848.0,pick item,2020-01-09 14:18:08.000Z, ,"['885544']", , , ,0.483,1099.0 +14849.0,confirm order,2020-01-09 14:24:05.000Z, , ,"['991360']", , ,3.248,6330.0 +14850.0,pick item,2020-01-09 14:26:14.000Z, ,"['885474']", , , ,0.495,129.0 +14851.0,create package,2020-01-09 14:26:14.000Z, ,"['885421','885422']", ,"['660873']", ,1.16,179.98 +14852.0,pick item,2020-01-09 14:37:10.000Z, ,"['885490']", , , ,0.166,799.0 +14853.0,pay order,2020-01-09 14:43:10.000Z, , ,"['991358']", , ,2.499,4671.99 +14854.0,pick item,2020-01-09 14:47:35.000Z, ,"['885523']", , , ,1.25,2200.0 +14855.0,create package,2020-01-09 14:47:35.000Z, ,"['885530','885497','885498','885499','885529','885374','885527']", ,"['660874']", ,5.746,6577.97 +14856.0,pick item,2020-01-09 15:02:13.000Z, ,"['885481']", , , ,0.188,1149.0 +14857.0,pick item,2020-01-09 15:03:16.000Z, ,"['885427']", , , ,0.88,89.99 +14858.0,item out of stock,2020-01-09 15:05:57.000Z, ,"['885447']", , , ,0.188,1149.0 +14859.0,pick item,2020-01-09 15:06:21.000Z, ,"['885512']", , , ,0.188,1149.0 +14860.0,pick item,2020-01-09 15:06:46.000Z, ,"['885510']", , , ,0.166,799.0 +14861.0,reorder item,2020-01-09 15:13:33.000Z, ,"['885428']", , , ,0.28,89.99 +14862.0,pick item,2020-01-09 15:16:00.000Z, ,"['885489']", , , ,0.78,99.99 +14863.0,reorder item,2020-01-09 15:39:14.000Z, ,"['885470']", , , ,0.483,79.99 +14864.0,item out of stock,2020-01-09 15:53:59.000Z, ,"['885405']", , , ,0.495,129.0 +14865.0,pick item,2020-01-09 15:55:21.000Z, ,"['885501']", , , ,1.28,149.99 +14866.0,send package,2020-01-09 15:55:56.000Z, , , ,"['660874']", ,5.746,6577.97 +14867.0,payment reminder,2020-01-09 15:56:28.000Z, , ,"['991211']", , ,1.946,2342.98 +14868.0,pick item,2020-01-09 16:06:22.000Z, ,"['885541']", , , ,0.88,89.99 +14869.0,create package,2020-01-09 16:06:22.000Z, ,"['885466','885400','885401','885506','885510','885468']", ,"['660875']", ,3.666,3476.98 +14870.0,item out of stock,2020-01-09 16:06:31.000Z, ,"['885500']", , , ,0.495,129.0 +14871.0,place order,2020-01-09 16:13:22.000Z, ,"['885550']","['991367']", , ,0.78,104.99 +14872.0,confirm order,2020-01-09 16:17:33.000Z, , ,"['991366']", , ,1.763,1253.99 +14873.0,pick item,2020-01-09 16:24:35.000Z, ,"['885511']", , , ,0.78,99.99 +14874.0,pick item,2020-01-09 16:24:44.000Z, ,"['885477']", , , ,0.172,699.0 +14875.0,confirm order,2020-01-09 16:51:59.000Z, , ,"['991364']", , ,1.746,2302.99 +14876.0,pay order,2020-01-09 17:12:17.000Z, , ,"['991240']", , ,0.2,44.99 +14877.0,pick item,2020-01-09 17:14:14.000Z, ,"['885337']", , , ,0.28,449.0 +14878.0,pick item,2020-01-09 17:30:52.000Z, ,"['885543']", , , ,0.78,99.99 +14879.0,place order,2020-01-09 17:46:31.000Z, ,"['885553','885555','885554','885552','885551','885556']","['991368']", , ,3.129,2094.97 +14880.0,pick item,2020-01-09 17:48:58.000Z, ,"['885553']", , , ,0.44,476.0 +14881.0,failed delivery,2020-01-09 18:34:14.000Z, , , ,"['660868']", ,2.9530000000000003,3874.99 +14882.0,item out of stock,2020-01-09 18:35:07.000Z, ,"['885550']", , , ,0.78,99.99 +14883.0,item out of stock,2020-01-09 19:17:08.000Z, ,"['885429']", , , ,0.483,1099.0 +14884.0,send package,2020-01-09 19:34:00.000Z, , , ,"['660872']", ,5.025,3701.96 +14885.0,pick item,2020-01-09 19:34:13.000Z, ,"['885486']", , , ,0.98,129.99 +14886.0,create package,2020-01-09 19:34:13.000Z, ,"['885444','885442','885446','885445','885538','885541','885443','885440']", ,"['660876']", ,3.712,4151.97 +14887.0,failed delivery,2020-01-09 19:43:11.000Z, , , ,"['660872']", ,5.025,3701.96 +14888.0,place order,2020-01-09 20:59:08.000Z, ,"['885560','885561','885558','885557','885559']","['991369']", , ,3.398,2458.98 +14889.0,create package,2020-01-09 23:00:00.000Z, ,"['885493','885452','885449','885496','885454','885451','885450','885453']", ,"['660877']", ,5.075,6956.97 +14890.0,place order,2020-01-10 07:12:42.000Z, ,"['885563','885562','885565','885564','885568','885566','885567']","['991370']", , ,4.467,1272.95 +14891.0,item out of stock,2020-01-10 07:22:58.000Z, ,"['885567']", , , ,0.78,99.99 +14892.0,pick item,2020-01-10 08:06:11.000Z, ,"['885092']", , , ,1.37,2500.0 +14893.0,pick item,2020-01-10 08:17:56.000Z, ,"['885561']", , , ,1.28,149.99 +14894.0,item out of stock,2020-01-10 08:32:54.000Z, ,"['885559']", , , ,0.21,529.0 +14895.0,pay order,2020-01-10 08:46:55.000Z, , ,"['991351']", , ,3.925,7638.98 +14896.0,send package,2020-01-10 08:53:44.000Z, , , ,"['660876']", ,3.712,4151.97 +14897.0,pick item,2020-01-10 09:04:20.000Z, ,"['884743']", , , ,0.88,89.99 +14898.0,place order,2020-01-10 09:08:50.000Z, ,"['885570','885577','885575','885572','885569','885574','885573','885576','885571']","['991371']", , ,3.125,5836.99 +14899.0,pick item,2020-01-10 09:17:14.000Z, ,"['885564']", , , ,0.38,29.99 +14900.0,pay order,2020-01-10 09:21:02.000Z, , ,"['991338']", , ,1.958,2148.98 +14901.0,item out of stock,2020-01-10 09:22:03.000Z, ,"['885524']", , , ,1.48,199.99 +14902.0,pick item,2020-01-10 09:25:50.000Z, ,"['885542']", , , ,1.25,2200.0 +14903.0,item out of stock,2020-01-10 09:28:27.000Z, ,"['885556']", , , ,0.78,99.99 +14904.0,failed delivery,2020-01-10 09:32:06.000Z, , , ,"['660868']", ,2.9530000000000003,3874.99 +14905.0,pick item,2020-01-10 09:41:26.000Z, ,"['885418']", , , ,0.98,129.99 +14906.0,reorder item,2020-01-10 09:45:17.000Z, ,"['885491']", , , ,0.2,39.99 +14907.0,payment reminder,2020-01-10 09:45:53.000Z, , ,"['991009']", , ,2.613,3578.98 +14908.0,pick item,2020-01-10 09:46:01.000Z, ,"['885091']", , , ,1.25,2200.0 +14909.0,item out of stock,2020-01-10 09:49:45.000Z, ,"['885513']", , , ,0.88,89.99 +14910.0,confirm order,2020-01-10 09:51:08.000Z, , ,"['991371']", , ,3.125,5836.99 +14911.0,reorder item,2020-01-10 09:57:34.000Z, ,"['885381']", , , ,0.188,1149.0 +14912.0,reorder item,2020-01-10 10:09:26.000Z, ,"['885476']", , , ,0.483,79.99 +14913.0,confirm order,2020-01-10 10:15:58.000Z, , ,"['991367']", , ,0.78,104.99 +14914.0,confirm order,2020-01-10 10:17:41.000Z, , ,"['991368']", , ,3.129,2094.97 +14915.0,pick item,2020-01-10 10:21:24.000Z, ,"['885487']", , , ,0.2,39.99 +14916.0,item out of stock,2020-01-10 10:26:19.000Z, ,"['885570']", , , ,0.44,476.0 +14917.0,pick item,2020-01-10 10:32:05.000Z, ,"['885566']", , , ,0.38,29.99 +14918.0,pick item,2020-01-10 10:35:30.000Z, ,"['885520']", , , ,1.37,2500.0 +14919.0,place order,2020-01-10 10:37:28.000Z, ,"['885579','885578','885580']","['991372']", , ,2.93,2744.98 +14920.0,reorder item,2020-01-10 10:47:53.000Z, ,"['885524']", , , ,1.48,199.99 +14921.0,item out of stock,2020-01-10 10:50:11.000Z, ,"['885552']", , , ,0.28,89.99 +14922.0,pick item,2020-01-10 10:54:45.000Z, ,"['885304']", , , ,0.78,99.99 +14923.0,item out of stock,2020-01-10 10:57:56.000Z, ,"['885549']", , , ,1.28,149.99 +14924.0,send package,2020-01-10 11:09:44.000Z, , , ,"['660875']", ,3.666,3476.98 +14925.0,item out of stock,2020-01-10 11:13:15.000Z, ,"['885551']", , , ,0.483,495.0 +14926.0,reorder item,2020-01-10 11:17:57.000Z, ,"['885536']", , , ,0.78,99.99 +14927.0,pick item,2020-01-10 11:38:27.000Z, ,"['885560']", , , ,0.44,476.0 +14928.0,pick item,2020-01-10 11:42:42.000Z, ,"['885495']", , , ,1.25,2200.0 +14929.0,item out of stock,2020-01-10 11:54:45.000Z, ,"['885540']", , , ,0.483,1099.0 +14930.0,pick item,2020-01-10 11:58:51.000Z, ,"['885575']", , , ,0.28,89.99 +14931.0,send package,2020-01-10 12:34:16.000Z, , , ,"['660877']", ,5.075,6956.97 +14932.0,place order,2020-01-10 12:34:43.000Z, ,"['885581','885582']","['991373']", , ,1.86,234.98 +14933.0,pick item,2020-01-10 13:06:42.000Z, ,"['885509']", , , ,0.188,1149.0 +14934.0,pick item,2020-01-10 13:14:35.000Z, ,"['885521']", , , ,0.44,476.0 +14935.0,create package,2020-01-10 13:14:35.000Z, ,"['885471','885492','885489','885104','885490']", ,"['660878']", ,2.861,1633.98 +14936.0,pick item,2020-01-10 13:14:59.000Z, ,"['885562']", , , ,0.172,699.0 +14937.0,reorder item,2020-01-10 13:31:03.000Z, ,"['885567']", , , ,0.78,99.99 +14938.0,pick item,2020-01-10 13:33:29.000Z, ,"['885571']", , , ,0.172,699.0 +14939.0,pay order,2020-01-10 13:40:03.000Z, , ,"['991330']", , ,3.195,6476.99 +14940.0,reorder item,2020-01-10 13:43:34.000Z, ,"['885518']", , , ,0.88,89.99 +14941.0,pick item,2020-01-10 13:44:54.000Z, ,"['885519']", , , ,0.88,89.99 +14942.0,item out of stock,2020-01-10 13:46:25.000Z, ,"['885526']", , , ,1.37,2500.0 +14943.0,package delivered,2020-01-10 13:57:07.000Z, , , ,"['660864']", ,4.085,3027.98 +14944.0,pay order,2020-01-10 13:58:33.000Z, , ,"['990985']", , ,3.512,1123.97 +14945.0,send package,2020-01-10 14:11:44.000Z, , , ,"['660873']", ,1.16,179.98 +14946.0,pay order,2020-01-10 14:19:50.000Z, , ,"['991215']", , ,2.215,1398.97 +14947.0,pick item,2020-01-10 14:21:11.000Z, ,"['885547']", , , ,0.78,99.99 +14948.0,pick item,2020-01-10 14:24:59.000Z, ,"['885546']", , , ,0.44,476.0 +14949.0,create package,2020-01-10 14:24:59.000Z, ,"['885387','885393','885101']", ,"['660879']", ,2.17,788.98 +14950.0,confirm order,2020-01-10 14:25:38.000Z, , ,"['991372']", , ,2.93,2744.98 +14951.0,confirm order,2020-01-10 14:26:42.000Z, , ,"['991373']", , ,1.86,234.98 +14952.0,place order,2020-01-10 14:29:14.000Z, ,"['885583']","['991374']", , ,0.2,44.99 +14953.0,pick item,2020-01-10 14:40:30.000Z, ,"['885578']", , , ,0.28,89.99 +14954.0,pay order,2020-01-10 14:41:31.000Z, , ,"['991355']", , ,3.701,1731.98 +14955.0,pick item,2020-01-10 14:52:45.000Z, ,"['885576']", , , ,0.483,495.0 +14956.0,pick item,2020-01-10 14:59:03.000Z, ,"['885577']", , , ,0.44,476.0 +14957.0,create package,2020-01-10 14:59:03.000Z, ,"['885481','885482','885479','885477','885484','885483']", ,"['660880']", ,2.8960000000000004,6725.0 +14958.0,reorder item,2020-01-10 15:42:14.000Z, ,"['885550']", , , ,0.78,99.99 +14959.0,send package,2020-01-10 15:56:13.000Z, , , ,"['660878']", ,2.861,1633.98 +14960.0,pay order,2020-01-10 15:57:35.000Z, , ,"['991211']", , ,1.946,2342.98 +14961.0,place order,2020-01-10 16:18:15.000Z, ,"['885584']","['991375']", , ,0.98,134.99 +14962.0,pick item,2020-01-10 16:30:32.000Z, ,"['885557']", , , ,0.188,1149.0 +14963.0,reorder item,2020-01-10 16:33:39.000Z, ,"['885447']", , , ,0.188,1149.0 +14964.0,send package,2020-01-10 16:41:34.000Z, , , ,"['660880']", ,2.8960000000000004,6725.0 +14965.0,reorder item,2020-01-10 16:41:57.000Z, ,"['885457']", , , ,0.166,799.0 +14966.0,confirm order,2020-01-10 16:44:17.000Z, , ,"['991365']", , ,1.22,580.99 +14967.0,confirm order,2020-01-10 16:49:32.000Z, , ,"['991369']", , ,3.398,2458.98 +14968.0,item out of stock,2020-01-10 16:52:06.000Z, ,"['885572']", , , ,0.483,1099.0 +14969.0,package delivered,2020-01-10 16:53:42.000Z, , , ,"['660880']", ,2.8960000000000004,6725.0 +14970.0,reorder item,2020-01-10 16:55:46.000Z, ,"['885540']", , , ,0.483,1099.0 +14971.0,pick item,2020-01-10 17:14:56.000Z, ,"['885522']", , , ,0.188,1149.0 +14972.0,pay order,2020-01-10 17:22:17.000Z, , ,"['991322']", , ,3.4,880.98 +14973.0,item out of stock,2020-01-10 17:30:12.000Z, ,"['885563']", , , ,1.28,149.99 +14974.0,reorder item,2020-01-10 17:35:35.000Z, ,"['885467']", , , ,0.78,99.99 +14975.0,pick item,2020-01-10 17:45:34.000Z, ,"['885533']", , , ,0.483,79.99 +14976.0,reorder item,2020-01-10 17:48:26.000Z, ,"['885494']", , , ,1.48,199.99 +14977.0,place order,2020-01-10 17:56:17.000Z, ,"['885585','885588','885591','885587','885590','885586','885589']","['991376']", , ,5.348,5157.97 +14978.0,package delivered,2020-01-10 18:41:23.000Z, , , ,"['660876']", ,3.712,4151.97 +14979.0,pick item,2020-01-10 18:58:40.000Z, ,"['885507']", , , ,1.37,2500.0 +14980.0,pick item,2020-01-10 19:29:51.000Z, ,"['885584']", , , ,0.98,129.99 +14981.0,place order,2020-01-10 21:28:26.000Z, ,"['885592','885593']","['991377']", , ,0.48,134.98 +14982.0,confirm order,2020-01-10 21:41:03.000Z, , ,"['991376']", , ,5.348,5157.97 +14983.0,payment reminder,2020-01-11 09:25:32.000Z, , ,"['991126']", , ,3.198,4272.97 +14984.0,place order,2020-01-11 16:50:30.000Z, ,"['885600','885594','885604','885598','885595','885605','885603','885596','885601','885599','885597','885602']","['991378']", , ,7.869,4801.92 +14985.0,payment reminder,2020-01-12 08:41:21.000Z, , ,"['991248']", , ,0.944,2778.0 +14986.0,payment reminder,2020-01-12 13:41:28.000Z, , ,"['991259']", , ,3.703,464.95 +14987.0,payment reminder,2020-01-12 15:12:58.000Z, , ,"['991133']", , ,1.3259999999999998,933.98 +14988.0,payment reminder,2020-01-12 15:51:18.000Z, , ,"['991254']", , ,5.002,8694.0 +14989.0,place order,2020-01-12 17:34:54.000Z, ,"['885607','885608','885606','885609','885610','885611','885612']","['991379']", , ,1.765,4089.98 +14990.0,pick item,2020-01-13 07:38:47.000Z, ,"['885461']", , , ,0.78,99.99 +14991.0,create package,2020-01-13 07:38:47.000Z, ,"['885303','885337','885186','885459','885456']", ,"['660881']", ,2.366,1913.98 +14992.0,failed delivery,2020-01-13 07:44:37.000Z, , , ,"['660868']", ,2.9530000000000003,3874.99 +14993.0,place order,2020-01-13 08:08:16.000Z, ,"['885617','885618','885615','885613','885616','885619','885614']","['991380']", , ,6.231,8008.98 +14994.0,pick item,2020-01-13 08:10:05.000Z, ,"['885617']", , , ,0.483,79.99 +14995.0,reorder item,2020-01-13 08:22:18.000Z, ,"['885480']", , , ,0.38,29.99 +14996.0,pick item,2020-01-13 08:22:32.000Z, ,"['885311']", , , ,0.495,129.0 +14997.0,item out of stock,2020-01-13 08:49:33.000Z, ,"['885458']", , , ,1.28,149.99 +14998.0,reorder item,2020-01-13 08:49:38.000Z, ,"['885469']", , , ,0.483,79.99 +14999.0,pick item,2020-01-13 08:55:05.000Z, ,"['885545']", , , ,0.483,1099.0 +15000.0,pick item,2020-01-13 09:07:28.000Z, ,"['885612']", , , ,0.21,529.0 +15001.0,pick item,2020-01-13 09:13:47.000Z, ,"['885599']", , , ,1.48,199.99 +15002.0,create package,2020-01-13 09:13:47.000Z, ,"['885553','884992','885584','884991']", ,"['660882']", ,2.087,1433.99 +15003.0,confirm order,2020-01-13 09:28:04.000Z, , ,"['991380']", , ,6.231,8008.98 +15004.0,package delivered,2020-01-13 09:31:34.000Z, , , ,"['660872']", ,5.025,3701.96 +15005.0,place order,2020-01-13 09:36:19.000Z, ,"['885622','885621','885620','885623','885624']","['991381']", , ,2.204,1976.99 +15006.0,pick item,2020-01-13 09:48:47.000Z, ,"['885502']", , , ,0.78,99.99 +15007.0,pick item,2020-01-13 09:58:43.000Z, ,"['885385']", , , ,0.483,79.99 +15008.0,item out of stock,2020-01-13 09:58:54.000Z, ,"['885622']", , , ,0.495,129.0 +15009.0,pick item,2020-01-13 10:05:19.000Z, ,"['885518']", , , ,0.88,89.99 +15010.0,failed delivery,2020-01-13 10:09:27.000Z, , , ,"['660874']", ,5.746,6577.97 +15011.0,item out of stock,2020-01-13 10:16:52.000Z, ,"['885592']", , , ,0.28,89.99 +15012.0,pick item,2020-01-13 10:23:48.000Z, ,"['885614']", , , ,0.483,495.0 +15013.0,create package,2020-01-13 10:23:48.000Z, ,"['885474','885385','885488','885486','885487','885375']", ,"['660883']", ,3.3480000000000003,1037.96 +15014.0,package delivered,2020-01-13 10:23:50.000Z, , , ,"['660868']", ,2.9530000000000003,3874.99 +15015.0,pick item,2020-01-13 10:32:28.000Z, ,"['885589']", , , ,0.38,29.99 +15016.0,send package,2020-01-13 10:33:57.000Z, , , ,"['660882']", ,2.087,1433.99 +15017.0,pick item,2020-01-13 10:41:59.000Z, ,"['885609']", , , ,0.172,699.0 +15018.0,pick item,2020-01-13 10:43:24.000Z, ,"['885565']", , , ,0.98,129.99 +15019.0,item out of stock,2020-01-13 10:51:02.000Z, ,"['885590']", , , ,0.98,129.99 +15020.0,confirm order,2020-01-13 11:02:39.000Z, , ,"['991370']", , ,4.467,1272.95 +15021.0,pick item,2020-01-13 11:07:17.000Z, ,"['885616']", , , ,0.78,99.99 +15022.0,reorder item,2020-01-13 11:08:45.000Z, ,"['885458']", , , ,1.28,149.99 +15023.0,pick item,2020-01-13 11:12:52.000Z, ,"['885587']", , , ,1.37,2500.0 +15024.0,failed delivery,2020-01-13 11:17:05.000Z, , , ,"['660875']", ,3.666,3476.98 +15025.0,send package,2020-01-13 11:29:04.000Z, , , ,"['660879']", ,2.17,788.98 +15026.0,place order,2020-01-13 11:32:26.000Z, ,"['885626','885625','885627']","['991382']", , ,1.958,1362.99 +15027.0,send package,2020-01-13 11:33:35.000Z, , , ,"['660881']", ,2.366,1913.98 +15028.0,pick item,2020-01-13 11:43:04.000Z, ,"['885595']", , , ,0.88,89.99 +15029.0,create package,2020-01-13 11:43:04.000Z, ,"['885560','885561','885557','885263']", ,"['660884']", ,2.391,2873.99 +15030.0,pay order,2020-01-13 11:47:03.000Z, , ,"['991294']", , ,1.795,2144.0 +15031.0,pick item,2020-01-13 11:57:33.000Z, ,"['884974']", , , ,0.188,1149.0 +15032.0,send package,2020-01-13 11:58:15.000Z, , , ,"['660884']", ,2.391,2873.99 +15033.0,item out of stock,2020-01-13 13:04:08.000Z, ,"['885596']", , , ,0.78,99.99 +15034.0,package delivered,2020-01-13 13:09:35.000Z, , , ,"['660874']", ,5.746,6577.97 +15035.0,pick item,2020-01-13 13:18:56.000Z, ,"['885472']", , , ,0.44,476.0 +15036.0,place order,2020-01-13 13:24:39.000Z, ,"['885630','885628','885632','885631','885629']","['991383']", , ,3.62,1316.97 +15037.0,package delivered,2020-01-13 13:35:40.000Z, , , ,"['660881']", ,2.366,1913.98 +15038.0,pick item,2020-01-13 13:44:02.000Z, ,"['885611']", , , ,0.166,799.0 +15039.0,confirm order,2020-01-13 13:45:40.000Z, , ,"['991381']", , ,2.204,1976.99 +15040.0,item out of stock,2020-01-13 13:55:44.000Z, ,"['885627']", , , ,0.495,129.0 +15041.0,pick item,2020-01-13 14:07:11.000Z, ,"['885598']", , , ,0.2,39.99 +15042.0,create package,2020-01-13 14:07:11.000Z, ,"['885437','885427','885587','885589']", ,"['660885']", ,2.83,2659.97 +15043.0,reorder item,2020-01-13 14:15:35.000Z, ,"['885596']", , , ,0.78,99.99 +15044.0,send package,2020-01-13 14:20:24.000Z, , , ,"['660885']", ,2.83,2659.97 +15045.0,pick item,2020-01-13 14:21:03.000Z, ,"['885610']", , , ,0.483,79.99 +15046.0,item out of stock,2020-01-13 14:22:09.000Z, ,"['885613']", , , ,1.25,2200.0 +15047.0,confirm order,2020-01-13 14:31:33.000Z, , ,"['991383']", , ,3.62,1316.97 +15048.0,confirm order,2020-01-13 14:37:19.000Z, , ,"['991377']", , ,0.48,134.98 +15049.0,failed delivery,2020-01-13 14:45:16.000Z, , , ,"['660882']", ,2.087,1433.99 +15050.0,reorder item,2020-01-13 14:48:45.000Z, ,"['885513']", , , ,0.88,89.99 +15051.0,item out of stock,2020-01-13 14:49:15.000Z, ,"['885568']", , , ,0.495,129.0 +15052.0,pick item,2020-01-13 14:50:06.000Z, ,"['885537']", , , ,0.28,449.0 +15053.0,pick item,2020-01-13 14:59:46.000Z, ,"['885381']", , , ,0.188,1149.0 +15054.0,pick item,2020-01-13 15:05:24.000Z, ,"['885597']", , , ,0.28,449.0 +15055.0,create package,2020-01-13 15:05:24.000Z, ,"['885092','885544','885545','885547','885576','885577','885091','885543','884891','885571','885575','885546']", ,"['660886']", ,7.241,9782.97 +15056.0,place order,2020-01-13 15:09:06.000Z, ,"['885636','885634','885633','885635']","['991384']", , ,2.818,4232.99 +15057.0,pick item,2020-01-13 15:13:35.000Z, ,"['885357']", , , ,0.44,476.0 +15058.0,package delivered,2020-01-13 15:14:51.000Z, , , ,"['660877']", ,5.075,6956.97 +15059.0,item out of stock,2020-01-13 15:18:28.000Z, ,"['885573']", , , ,0.172,699.0 +15060.0,pay order,2020-01-13 15:19:41.000Z, , ,"['991371']", , ,3.125,5836.99 +15061.0,pick item,2020-01-13 15:22:45.000Z, ,"['885586']", , , ,0.483,1099.0 +15062.0,item out of stock,2020-01-13 15:25:22.000Z, ,"['885608']", , , ,0.38,29.99 +15063.0,package delivered,2020-01-13 15:35:29.000Z, , , ,"['660885']", ,2.83,2659.97 +15064.0,pick item,2020-01-13 15:38:48.000Z, ,"['885631']", , , ,0.98,129.99 +15065.0,pick item,2020-01-13 16:03:53.000Z, ,"['885203']", , , ,0.88,89.99 +15066.0,pick item,2020-01-13 16:05:46.000Z, ,"['885505']", , , ,0.188,1149.0 +15067.0,pick item,2020-01-13 16:08:58.000Z, ,"['884626']", , , ,0.98,129.99 +15068.0,package delivered,2020-01-13 16:09:06.000Z, , , ,"['660873']", ,1.16,179.98 +15069.0,reorder item,2020-01-13 16:11:21.000Z, ,"['885572']", , , ,0.483,1099.0 +15070.0,pick item,2020-01-13 16:17:09.000Z, ,"['885534']", , , ,0.78,99.99 +15071.0,send package,2020-01-13 16:18:55.000Z, , , ,"['660883']", ,3.3480000000000003,1037.96 +15072.0,pay order,2020-01-13 16:33:52.000Z, , ,"['991317']", , ,1.09,623.99 +15073.0,item out of stock,2020-01-13 16:36:58.000Z, ,"['885503']", , , ,1.37,2500.0 +15074.0,place order,2020-01-13 16:37:59.000Z, ,"['885637']","['991385']", , ,0.166,804.0 +15075.0,item out of stock,2020-01-13 16:39:23.000Z, ,"['885593']", , , ,0.2,39.99 +15076.0,pick item,2020-01-13 16:46:29.000Z, ,"['885388']", , , ,0.21,529.0 +15077.0,pick item,2020-01-13 17:07:43.000Z, ,"['885464']", , , ,0.2,39.99 +15078.0,pick item,2020-01-13 17:36:00.000Z, ,"['885558']", , , ,1.28,149.99 +15079.0,pick item,2020-01-13 17:58:33.000Z, ,"['885629']", , , ,0.98,129.99 +15080.0,pick item,2020-01-13 18:32:36.000Z, ,"['885406']", , , ,0.188,1149.0 +15081.0,create package,2020-01-13 18:32:36.000Z, ,"['885203','885523','885522','885520','885521']", ,"['660887']", ,4.128,6414.99 +15082.0,pick item,2020-01-13 18:33:56.000Z, ,"['885581']", , , ,0.38,29.99 +15083.0,place order,2020-01-13 18:35:45.000Z, ,"['885639','885638']","['991386']", , ,1.92,680.99 +15084.0,reorder item,2020-01-13 19:28:28.000Z, ,"['885556']", , , ,0.78,99.99 +15085.0,payment reminder,2020-01-13 21:05:27.000Z, , ,"['991269']", , ,3.015,2092.98 +15086.0,place order,2020-01-13 21:51:05.000Z, ,"['885640','885641','885644','885642','885643']","['991387']", , ,2.644,4030.99 +15087.0,pick item,2020-01-14 07:51:55.000Z, ,"['885539']", , , ,1.48,199.99 +15088.0,reorder item,2020-01-14 08:05:14.000Z, ,"['885593']", , , ,0.2,39.99 +15089.0,pick item,2020-01-14 08:13:19.000Z, ,"['885602']", , , ,0.98,129.99 +15090.0,confirm order,2020-01-14 08:14:53.000Z, , ,"['991382']", , ,1.958,1362.99 +15091.0,confirm order,2020-01-14 08:24:17.000Z, , ,"['991379']", , ,1.765,4089.98 +15092.0,confirm order,2020-01-14 08:30:34.000Z, , ,"['991384']", , ,2.818,4232.99 +15093.0,place order,2020-01-14 08:33:45.000Z, ,"['885646','885647','885648','885649','885645']","['991388']", , ,3.73,933.96 +15094.0,item out of stock,2020-01-14 08:40:51.000Z, ,"['885649']", , , ,0.98,129.99 +15095.0,reorder item,2020-01-14 08:43:00.000Z, ,"['885573']", , , ,0.172,699.0 +15096.0,package delivered,2020-01-14 08:54:12.000Z, , , ,"['660883']", ,3.3480000000000003,1037.96 +15097.0,package delivered,2020-01-14 08:57:02.000Z, , , ,"['660875']", ,3.666,3476.98 +15098.0,reorder item,2020-01-14 08:57:47.000Z, ,"['885526']", , , ,1.37,2500.0 +15099.0,pick item,2020-01-14 09:00:15.000Z, ,"['885632']", , , ,0.44,476.0 +15100.0,pick item,2020-01-14 09:22:32.000Z, ,"['885644']", , , ,1.28,149.99 +15101.0,create package,2020-01-14 09:22:32.000Z, ,"['885611','885512','885612','885357','885519','885518','885610','884743','885511','885609']", ,"['660888']", ,5.079,4101.95 +15102.0,failed delivery,2020-01-14 09:22:34.000Z, , , ,"['660878']", ,2.861,1633.98 +15103.0,pay order,2020-01-14 09:26:17.000Z, , ,"['991210']", , ,1.709,2092.98 +15104.0,pick item,2020-01-14 09:29:09.000Z, ,"['885603']", , , ,1.25,2200.0 +15105.0,reorder item,2020-01-14 09:35:37.000Z, ,"['885559']", , , ,0.21,529.0 +15106.0,failed delivery,2020-01-14 09:41:47.000Z, , , ,"['660882']", ,2.087,1433.99 +15107.0,pick item,2020-01-14 09:42:13.000Z, ,"['885605']", , , ,0.166,799.0 +15108.0,pay order,2020-01-14 09:43:08.000Z, , ,"['991350']", , ,2.695,1258.99 +15109.0,pay order,2020-01-14 09:57:43.000Z, , ,"['991362']", , ,1.703,660.98 +15110.0,pick item,2020-01-14 10:05:07.000Z, ,"['885467']", , , ,0.78,99.99 +15111.0,pay order,2020-01-14 10:11:05.000Z, , ,"['991209']", , ,6.884,4546.94 +15112.0,pay order,2020-01-14 10:21:30.000Z, , ,"['991377']", , ,0.48,134.98 +15113.0,item out of stock,2020-01-14 10:24:19.000Z, ,"['885626']", , , ,0.483,1099.0 +15114.0,place order,2020-01-14 10:27:17.000Z, ,"['885651','885650']","['991389']", , ,1.76,653.99 +15115.0,reorder item,2020-01-14 10:33:40.000Z, ,"['885563']", , , ,1.28,149.99 +15116.0,reorder item,2020-01-14 10:34:38.000Z, ,"['885405']", , , ,0.495,129.0 +15117.0,pay order,2020-01-14 10:36:02.000Z, , ,"['991248']", , ,0.944,2778.0 +15118.0,pay order,2020-01-14 10:36:46.000Z, , ,"['991384']", , ,2.818,4232.99 +15119.0,package delivered,2020-01-14 10:41:48.000Z, , , ,"['660882']", ,2.087,1433.99 +15120.0,confirm order,2020-01-14 10:49:30.000Z, , ,"['991385']", , ,0.166,804.0 +15121.0,pick item,2020-01-14 10:51:25.000Z, ,"['885606']", , , ,0.166,799.0 +15122.0,payment reminder,2020-01-14 11:01:58.000Z, , ,"['991271']", , ,2.112,973.97 +15123.0,reorder item,2020-01-14 11:05:48.000Z, ,"['885552']", , , ,0.28,89.99 +15124.0,pick item,2020-01-14 11:06:13.000Z, ,"['885623']", , , ,0.166,799.0 +15125.0,pick item,2020-01-14 11:28:31.000Z, ,"['885624']", , , ,0.78,99.99 +15126.0,confirm order,2020-01-14 11:33:01.000Z, , ,"['991378']", , ,7.869,4801.92 +15127.0,reorder item,2020-01-14 11:58:00.000Z, ,"['885590']", , , ,0.98,129.99 +15128.0,pick item,2020-01-14 12:09:12.000Z, ,"['885601']", , , ,0.28,89.99 +15129.0,place order,2020-01-14 12:14:22.000Z, ,"['885654','885653','885652']","['991390']", , ,1.432,923.98 +15130.0,pick item,2020-01-14 12:20:33.000Z, ,"['885642']", , , ,0.483,1099.0 +15131.0,reorder item,2020-01-14 12:21:38.000Z, ,"['885503']", , , ,1.37,2500.0 +15132.0,confirm order,2020-01-14 13:17:09.000Z, , ,"['991375']", , ,0.98,134.99 +15133.0,package delivered,2020-01-14 13:21:32.000Z, , , ,"['660884']", ,2.391,2873.99 +15134.0,pick item,2020-01-14 13:22:11.000Z, ,"['885607']", , , ,0.188,1149.0 +15135.0,send package,2020-01-14 13:25:29.000Z, , , ,"['660886']", ,7.241,9782.97 +15136.0,confirm order,2020-01-14 13:27:43.000Z, , ,"['991374']", , ,0.2,44.99 +15137.0,item out of stock,2020-01-14 13:28:55.000Z, ,"['885615']", , , ,0.495,129.0 +15138.0,place order,2020-01-14 13:48:31.000Z, ,"['885661','885656','885659','885660','885658','885655','885657']","['991391']", , ,3.944,4106.98 +15139.0,pick item,2020-01-14 13:54:54.000Z, ,"['885648']", , , ,0.21,529.0 +15140.0,create package,2020-01-14 13:54:54.000Z, ,"['885501','885418','884626']", ,"['660889']", ,3.24,409.97 +15141.0,send package,2020-01-14 14:00:23.000Z, , , ,"['660887']", ,4.128,6414.99 +15142.0,pay order,2020-01-14 14:04:54.000Z, , ,"['991238']", , ,2.878,2053.97 +15143.0,item out of stock,2020-01-14 14:05:17.000Z, ,"['885535']", , , ,0.2,39.99 +15144.0,confirm order,2020-01-14 14:13:45.000Z, , ,"['991386']", , ,1.92,680.99 +15145.0,confirm order,2020-01-14 14:26:02.000Z, , ,"['991390']", , ,1.432,923.98 +15146.0,pick item,2020-01-14 14:29:05.000Z, ,"['885652']", , , ,0.172,699.0 +15147.0,send package,2020-01-14 14:29:45.000Z, , , ,"['660888']", ,5.079,4101.95 +15148.0,item out of stock,2020-01-14 14:43:20.000Z, ,"['885585']", , , ,0.172,699.0 +15149.0,pick item,2020-01-14 14:44:43.000Z, ,"['885548']", , , ,0.483,1099.0 +15150.0,confirm order,2020-01-14 14:45:43.000Z, , ,"['991387']", , ,2.644,4030.99 +15151.0,reorder item,2020-01-14 14:49:40.000Z, ,"['885568']", , , ,0.495,129.0 +15152.0,pick item,2020-01-14 14:55:51.000Z, ,"['885619']", , , ,1.37,2500.0 +15153.0,create package,2020-01-14 14:55:51.000Z, ,"['885562','885565','885564','885304','885566']", ,"['660890']", ,2.692,988.96 +15154.0,pick item,2020-01-14 14:56:37.000Z, ,"['885420']", , , ,0.483,495.0 +15155.0,pay order,2020-01-14 14:58:43.000Z, , ,"['991133']", , ,1.3259999999999998,933.98 +15156.0,payment reminder,2020-01-14 15:03:21.000Z, , ,"['991276']", , ,1.826,993.98 +15157.0,pick item,2020-01-14 15:06:16.000Z, ,"['885525']", , , ,0.483,1099.0 +15158.0,package delivered,2020-01-14 15:08:11.000Z, , , ,"['660879']", ,2.17,788.98 +15159.0,pick item,2020-01-14 15:11:05.000Z, ,"['885593']", , , ,0.2,39.99 +15160.0,pay order,2020-01-14 15:16:36.000Z, , ,"['991334']", , ,2.43,2374.98 +15161.0,pick item,2020-01-14 15:19:05.000Z, ,"['884631']", , , ,0.2,39.99 +15162.0,pick item,2020-01-14 15:23:57.000Z, ,"['885583']", , , ,0.2,39.99 +15163.0,create package,2020-01-14 15:23:57.000Z, ,"['885581','885616','885598','885537','885595','885614','885542','885605','885534','885406','885603','885539','885601','885617','885599','885533','885619','885597','885602']", ,"['660891']", ,13.473,11380.89 +15164.0,reorder item,2020-01-14 15:25:35.000Z, ,"['885649']", , , ,0.98,129.99 +15165.0,pay order,2020-01-14 15:52:11.000Z, , ,"['991326']", , ,2.2,770.98 +15166.0,pay order,2020-01-14 15:54:22.000Z, , ,"['991382']", , ,1.958,1362.99 +15167.0,confirm order,2020-01-14 15:55:57.000Z, , ,"['991388']", , ,3.73,933.96 +15168.0,place order,2020-01-14 15:56:50.000Z, ,"['885662','885664','885663']","['991392']", , ,3.54,454.97 +15169.0,package delivered,2020-01-14 15:59:58.000Z, , , ,"['660887']", ,4.128,6414.99 +15170.0,package delivered,2020-01-14 16:02:00.000Z, , , ,"['660886']", ,7.241,9782.97 +15171.0,pick item,2020-01-14 16:04:47.000Z, ,"['885528']", , , ,1.37,2500.0 +15172.0,pick item,2020-01-14 16:19:24.000Z, ,"['885640']", , , ,0.21,529.0 +15173.0,reorder item,2020-01-14 17:20:43.000Z, ,"['885585']", , , ,0.172,699.0 +15174.0,pay order,2020-01-14 17:26:27.000Z, , ,"['991347']", , ,2.25,863.96 +15175.0,pick item,2020-01-14 17:39:01.000Z, ,"['885621']", , , ,0.483,495.0 +15176.0,pay order,2020-01-14 17:50:14.000Z, , ,"['991378']", , ,7.869,4801.92 +15177.0,pick item,2020-01-14 18:05:48.000Z, ,"['885396']", , , ,0.483,1099.0 +15178.0,item out of stock,2020-01-14 18:06:33.000Z, ,"['885650']", , , ,1.48,199.99 +15179.0,pay order,2020-01-14 18:12:55.000Z, , ,"['991348']", , ,1.555,323.98 +15180.0,place order,2020-01-14 18:13:27.000Z, ,"['885670','885672','885669','885666','885668','885671','885667','885665']","['991393']", , ,5.816,7196.98 +15181.0,pick item,2020-01-14 18:20:14.000Z, ,"['885604']", , , ,0.483,79.99 +15182.0,item out of stock,2020-01-14 18:29:14.000Z, ,"['885663']", , , ,0.78,99.99 +15183.0,reorder item,2020-01-14 18:41:24.000Z, ,"['885615']", , , ,0.495,129.0 +15184.0,pick item,2020-01-14 19:39:56.000Z, ,"['885508']", , , ,0.28,89.99 +15185.0,package delivered,2020-01-14 19:48:36.000Z, , , ,"['660888']", ,5.079,4101.95 +15186.0,confirm order,2020-01-14 20:11:36.000Z, , ,"['991389']", , ,1.76,653.99 +15187.0,reorder item,2020-01-14 20:35:52.000Z, ,"['885650']", , , ,1.48,199.99 +15188.0,place order,2020-01-14 21:06:29.000Z, ,"['885673','885674','885675','885676','885677']","['991394']", , ,1.422,1382.97 +15189.0,pick item,2020-01-14 21:15:51.000Z, ,"['885656']", , , ,0.44,476.0 +15190.0,create package,2020-01-14 23:00:00.000Z, ,"['885495']", ,"['660892']", ,1.25,2200.0 +15191.0,place order,2020-01-15 06:56:48.000Z, ,"['885681','885682','885680','885679','885678','885683']","['991395']", , ,4.769,2801.97 +15192.0,pick item,2020-01-15 07:15:00.000Z, ,"['885666']", , , ,1.25,2200.0 +15193.0,pick item,2020-01-15 07:21:43.000Z, ,"['885677']", , , ,0.172,699.0 +15194.0,pick item,2020-01-15 07:30:39.000Z, ,"['885633']", , , ,0.28,449.0 +15195.0,pick item,2020-01-15 07:52:57.000Z, ,"['885665']", , , ,0.483,1099.0 +15196.0,pick item,2020-01-15 07:55:04.000Z, ,"['885636']", , , ,1.37,2500.0 +15197.0,reorder item,2020-01-15 07:56:59.000Z, ,"['885500']", , , ,0.495,129.0 +15198.0,pick item,2020-01-15 08:18:58.000Z, ,"['885678']", , , ,1.28,149.99 +15199.0,pick item,2020-01-15 08:32:28.000Z, ,"['885585']", , , ,0.172,699.0 +15200.0,pick item,2020-01-15 08:36:17.000Z, ,"['885106']", , , ,0.483,1099.0 +15201.0,item out of stock,2020-01-15 08:48:19.000Z, ,"['885645']", , , ,0.88,89.99 +15202.0,item out of stock,2020-01-15 08:52:38.000Z, ,"['885554']", , , ,0.98,129.99 +15203.0,pick item,2020-01-15 09:00:26.000Z, ,"['885643']", , , ,0.483,1099.0 +15204.0,item out of stock,2020-01-15 09:13:10.000Z, ,"['885683']", , , ,0.166,799.0 +15205.0,pick item,2020-01-15 09:18:37.000Z, ,"['885680']", , , ,0.483,1099.0 +15206.0,pick item,2020-01-15 09:24:39.000Z, ,"['885673']", , , ,0.28,89.99 +15207.0,pick item,2020-01-15 09:29:20.000Z, ,"['885405']", , , ,0.495,129.0 +15208.0,pick item,2020-01-15 09:41:00.000Z, ,"['885667']", , , ,0.28,449.0 +15209.0,create package,2020-01-15 09:41:00.000Z, ,"['885467','885508','885507','885509']", ,"['660893']", ,2.6180000000000003,3838.98 +15210.0,place order,2020-01-15 09:46:16.000Z, ,"['885688','885689','885684','885686','885690','885685','885687']","['991396']", , ,4.652,2131.96 +15211.0,pick item,2020-01-15 09:52:18.000Z, ,"['885579']", , , ,1.37,2500.0 +15212.0,confirm order,2020-01-15 09:54:09.000Z, , ,"['991393']", , ,5.816,7196.98 +15213.0,pick item,2020-01-15 09:56:28.000Z, ,"['885620']", , , ,0.28,449.0 +15214.0,pick item,2020-01-15 10:01:13.000Z, ,"['885647']", , , ,0.38,29.99 +15215.0,pick item,2020-01-15 10:06:18.000Z, ,"['885671']", , , ,0.98,129.99 +15216.0,create package,2020-01-15 10:06:18.000Z, ,"['885388','885461','885578','884974','885502','885464','885579']", ,"['660894']", ,3.808,4507.96 +15217.0,pick item,2020-01-15 10:09:25.000Z, ,"['885646']", , , ,1.28,149.99 +15218.0,pay order,2020-01-15 10:17:03.000Z, , ,"['991344']", , ,0.6709999999999999,2253.0 +15219.0,pick item,2020-01-15 10:22:13.000Z, ,"['885634']", , , ,0.98,129.99 +15220.0,pick item,2020-01-15 10:27:03.000Z, ,"['885668']", , , ,0.21,529.0 +15221.0,send package,2020-01-15 10:31:30.000Z, , , ,"['660890']", ,2.692,988.96 +15222.0,pick item,2020-01-15 10:33:13.000Z, ,"['885491']", , , ,0.2,39.99 +15223.0,pick item,2020-01-15 10:38:29.000Z, ,"['885675']", , , ,0.21,529.0 +15224.0,pay order,2020-01-15 10:45:13.000Z, , ,"['991381']", , ,2.204,1976.99 +15225.0,pick item,2020-01-15 10:48:14.000Z, ,"['885397']", , , ,0.78,99.99 +15226.0,pick item,2020-01-15 10:50:49.000Z, ,"['885123']", , , ,0.38,29.99 +15227.0,create package,2020-01-15 10:50:49.000Z, ,"['885505','885491','885106','885311']", ,"['660895']", ,1.366,2416.99 +15228.0,pick item,2020-01-15 10:54:49.000Z, ,"['885552']", , , ,0.28,89.99 +15229.0,confirm order,2020-01-15 10:57:19.000Z, , ,"['991396']", , ,4.652,2131.96 +15230.0,confirm order,2020-01-15 11:00:05.000Z, , ,"['991392']", , ,3.54,454.97 +15231.0,pick item,2020-01-15 11:02:40.000Z, ,"['885569']", , , ,0.483,1099.0 +15232.0,pick item,2020-01-15 11:06:54.000Z, ,"['885433']", , , ,0.188,1149.0 +15233.0,item out of stock,2020-01-15 11:09:18.000Z, ,"['885669']", , , ,0.88,89.99 +15234.0,reorder item,2020-01-15 11:14:48.000Z, ,"['885613']", , , ,1.25,2200.0 +15235.0,pay order,2020-01-15 11:22:00.000Z, , ,"['991310']", , ,2.5,730.98 +15236.0,pick item,2020-01-15 11:23:35.000Z, ,"['885531']", , , ,0.28,89.99 +15237.0,create package,2020-01-15 11:23:35.000Z, ,"['885472','884631','885381']", ,"['660896']", ,0.828,1664.99 +15238.0,item out of stock,2020-01-15 11:28:55.000Z, ,"['885658']", , , ,0.483,1099.0 +15239.0,send package,2020-01-15 11:40:39.000Z, , , ,"['660893']", ,2.6180000000000003,3838.98 +15240.0,confirm order,2020-01-15 11:52:08.000Z, , ,"['991394']", , ,1.422,1382.97 +15241.0,place order,2020-01-15 11:52:19.000Z, ,"['885693','885691','885692']","['991397']", , ,2.522,3333.99 +15242.0,pick item,2020-01-15 11:55:31.000Z, ,"['885664']", , , ,1.28,149.99 +15243.0,send package,2020-01-15 11:58:28.000Z, , , ,"['660892']", ,1.25,2200.0 +15244.0,package delivered,2020-01-15 12:02:55.000Z, , , ,"['660878']", ,2.861,1633.98 +15245.0,pay order,2020-01-15 12:05:11.000Z, , ,"['991390']", , ,1.432,923.98 +15246.0,confirm order,2020-01-15 12:16:33.000Z, , ,"['991395']", , ,4.769,2801.97 +15247.0,pick item,2020-01-15 12:17:04.000Z, ,"['885591']", , , ,1.48,199.99 +15248.0,reorder item,2020-01-15 12:25:22.000Z, ,"['885669']", , , ,0.88,89.99 +15249.0,reorder item,2020-01-15 12:28:00.000Z, ,"['885551']", , , ,0.483,495.0 +15250.0,send package,2020-01-15 12:45:04.000Z, , , ,"['660891']", ,13.473,11380.89 +15251.0,pick item,2020-01-15 12:45:32.000Z, ,"['885661']", , , ,0.78,99.99 +15252.0,create package,2020-01-15 12:45:32.000Z, ,"['885646','885585','885648','885640','885644','885591','885647','885433','885642','885643','885586']", ,"['660897']", ,6.649,6732.96 +15253.0,pay order,2020-01-15 12:53:58.000Z, , ,"['991392']", , ,3.54,454.97 +15254.0,confirm order,2020-01-15 12:56:19.000Z, , ,"['991391']", , ,3.944,4106.98 +15255.0,pick item,2020-01-15 12:58:39.000Z, ,"['885594']", , , ,0.88,89.99 +15256.0,reorder item,2020-01-15 12:58:55.000Z, ,"['885554']", , , ,0.98,129.99 +15257.0,pick item,2020-01-15 13:19:35.000Z, ,"['885476']", , , ,0.483,79.99 +15258.0,pick item,2020-01-15 13:30:59.000Z, ,"['885532']", , , ,0.44,476.0 +15259.0,reorder item,2020-01-15 13:37:12.000Z, ,"['885658']", , , ,0.483,1099.0 +15260.0,reorder item,2020-01-15 13:52:54.000Z, ,"['885622']", , , ,0.495,129.0 +15261.0,item out of stock,2020-01-15 13:54:14.000Z, ,"['885580']", , , ,1.28,149.99 +15262.0,pay order,2020-01-15 13:55:11.000Z, , ,"['991380']", , ,6.231,8008.98 +15263.0,pick item,2020-01-15 13:57:29.000Z, ,"['885298']", , , ,0.78,99.99 +15264.0,place order,2020-01-15 14:04:26.000Z, ,"['885694']","['991398']", , ,0.44,481.0 +15265.0,send package,2020-01-15 14:07:38.000Z, , , ,"['660897']", ,6.649,6732.96 +15266.0,pick item,2020-01-15 14:13:35.000Z, ,"['885618']", , , ,1.37,2500.0 +15267.0,send package,2020-01-15 14:14:31.000Z, , , ,"['660894']", ,3.808,4507.96 +15268.0,pick item,2020-01-15 14:17:12.000Z, ,"['885515']", , , ,0.88,89.99 +15269.0,package delivered,2020-01-15 14:26:00.000Z, , , ,"['660892']", ,1.25,2200.0 +15270.0,reorder item,2020-01-15 14:30:55.000Z, ,"['885570']", , , ,0.44,476.0 +15271.0,send package,2020-01-15 14:35:51.000Z, , , ,"['660889']", ,3.24,409.97 +15272.0,pay order,2020-01-15 14:38:51.000Z, , ,"['991342']", , ,4.971,7601.97 +15273.0,send package,2020-01-15 14:40:30.000Z, , , ,"['660896']", ,0.828,1664.99 +15274.0,pick item,2020-01-15 15:03:34.000Z, ,"['885390']", , , ,0.495,129.0 +15275.0,pick item,2020-01-15 15:07:19.000Z, ,"['885554']", , , ,0.98,129.99 +15276.0,reorder item,2020-01-15 15:07:35.000Z, ,"['885592']", , , ,0.28,89.99 +15277.0,reorder item,2020-01-15 15:12:23.000Z, ,"['885549']", , , ,1.28,149.99 +15278.0,pick item,2020-01-15 15:13:00.000Z, ,"['885672']", , , ,0.483,495.0 +15279.0,pick item,2020-01-15 15:16:31.000Z, ,"['885685']", , , ,0.28,449.0 +15280.0,pick item,2020-01-15 15:18:23.000Z, ,"['885596']", , , ,0.78,99.99 +15281.0,create package,2020-01-15 15:18:23.000Z, ,"['885397','885632','885652','885631','885629']", ,"['660898']", ,3.352,1534.97 +15282.0,send package,2020-01-15 15:21:12.000Z, , , ,"['660895']", ,1.366,2416.99 +15283.0,place order,2020-01-15 15:28:39.000Z, ,"['885701','885698','885695','885700','885696','885699','885697']","['991399']", , ,6.537000000000001,3602.96 +15284.0,reorder item,2020-01-15 15:28:43.000Z, ,"['885535']", , , ,0.2,39.99 +15285.0,pay order,2020-01-15 15:32:46.000Z, , ,"['991393']", , ,5.816,7196.98 +15286.0,pick item,2020-01-15 15:33:25.000Z, ,"['885630']", , , ,0.44,476.0 +15287.0,reorder item,2020-01-15 15:45:12.000Z, ,"['885627']", , , ,0.495,129.0 +15288.0,pick item,2020-01-15 15:55:25.000Z, ,"['885658']", , , ,0.483,1099.0 +15289.0,pay order,2020-01-15 16:04:03.000Z, , ,"['991354']", , ,4.31,5433.99 +15290.0,pay order,2020-01-15 16:08:16.000Z, , ,"['991373']", , ,1.86,234.98 +15291.0,pay order,2020-01-15 16:26:19.000Z, , ,"['991364']", , ,1.746,2302.99 +15292.0,pick item,2020-01-15 16:38:00.000Z, ,"['885457']", , , ,0.166,799.0 +15293.0,package delivered,2020-01-15 16:39:23.000Z, , , ,"['660891']", ,13.473,11380.89 +15294.0,pay order,2020-01-15 16:47:52.000Z, , ,"['991259']", , ,3.703,464.95 +15295.0,pick item,2020-01-15 16:49:11.000Z, ,"['885651']", , , ,0.28,449.0 +15296.0,item out of stock,2020-01-15 16:54:08.000Z, ,"['885698']", , , ,1.28,149.99 +15297.0,pick item,2020-01-15 16:55:06.000Z, ,"['885682']", , , ,0.28,449.0 +15298.0,create package,2020-01-15 16:55:06.000Z, ,"['885593','885558']", ,"['660899']", ,1.48,189.98 +15299.0,place order,2020-01-15 17:17:06.000Z, ,"['885705','885704','885702','885707','885706','885703']","['991400']", , ,2.978,4350.99 +15300.0,reorder item,2020-01-15 17:20:13.000Z, ,"['885580']", , , ,1.28,149.99 +15301.0,package delivered,2020-01-15 17:26:49.000Z, , , ,"['660889']", ,3.24,409.97 +15302.0,pick item,2020-01-15 18:09:46.000Z, ,"['885657']", , , ,0.483,1099.0 +15303.0,pick item,2020-01-15 18:46:46.000Z, ,"['885655']", , , ,0.495,129.0 +15304.0,create package,2020-01-15 18:46:46.000Z, ,"['885607','885606','885515']", ,"['660900']", ,1.234,2037.99 +15305.0,place order,2020-01-15 19:30:52.000Z, ,"['885709','885708','885710']","['991401']", , ,3.13,3153.99 +15306.0,failed delivery,2020-01-15 20:19:45.000Z, , , ,"['660894']", ,3.808,4507.96 +15307.0,pick item,2020-01-15 21:00:32.000Z, ,"['885660']", , , ,0.78,99.99 +15308.0,send package,2020-01-15 21:18:25.000Z, , , ,"['660899']", ,1.48,189.98 +15309.0,pick item,2020-01-15 21:52:10.000Z, ,"['885693']", , , ,0.98,129.99 +15310.0,place order,2020-01-15 23:23:07.000Z, ,"['885711','885712','885717','885713','885716','885714','885718','885715']","['991402']", , ,4.046,3178.96 +15311.0,package delivered,2020-01-16 07:28:20.000Z, , , ,"['660899']", ,1.48,189.98 +15312.0,pick item,2020-01-16 07:56:04.000Z, ,"['885715']", , , ,1.25,2200.0 +15313.0,create package,2020-01-16 07:56:04.000Z, ,"['885678','885624','885682','885396','885621','885620','885680','885623']", ,"['660901']", ,4.235,4639.98 +15314.0,item out of stock,2020-01-16 07:56:14.000Z, ,"['885676']", , , ,0.38,29.99 +15315.0,package delivered,2020-01-16 07:57:44.000Z, , , ,"['660890']", ,2.692,988.96 +15316.0,pick item,2020-01-16 08:08:34.000Z, ,"['885637']", , , ,0.166,799.0 +15317.0,reorder item,2020-01-16 08:23:14.000Z, ,"['885608']", , , ,0.38,29.99 +15318.0,place order,2020-01-16 08:27:13.000Z, ,"['885721','885720','885719']","['991403']", , ,2.025,3699.0 +15319.0,pick item,2020-01-16 08:28:12.000Z, ,"['885649']", , , ,0.98,129.99 +15320.0,pick item,2020-01-16 08:37:47.000Z, ,"['885702']", , , ,0.166,799.0 +15321.0,package delivered,2020-01-16 08:56:57.000Z, , , ,"['660895']", ,1.366,2416.99 +15322.0,pick item,2020-01-16 09:08:11.000Z, ,"['885689']", , , ,1.28,149.99 +15323.0,confirm order,2020-01-16 09:11:44.000Z, , ,"['991401']", , ,3.13,3153.99 +15324.0,confirm order,2020-01-16 09:14:35.000Z, , ,"['991398']", , ,0.44,481.0 +15325.0,pick item,2020-01-16 09:26:37.000Z, ,"['885711']", , , ,0.483,79.99 +15326.0,pay order,2020-01-16 09:27:59.000Z, , ,"['991353']", , ,1.641,1072.98 +15327.0,pay order,2020-01-16 09:31:07.000Z, , ,"['991276']", , ,1.826,993.98 +15328.0,pick item,2020-01-16 09:38:43.000Z, ,"['885582']", , , ,1.48,199.99 +15329.0,pick item,2020-01-16 09:45:49.000Z, ,"['885504']", , , ,0.78,99.99 +15330.0,pick item,2020-01-16 09:47:50.000Z, ,"['885256']", , , ,0.28,89.99 +15331.0,create package,2020-01-16 09:47:50.000Z, ,"['885569','885548']", ,"['660902']", ,0.966,2198.0 +15332.0,pay order,2020-01-16 09:56:57.000Z, , ,"['991236']", , ,1.28,154.99 +15333.0,pick item,2020-01-16 10:02:54.000Z, ,"['885681']", , , ,1.28,149.99 +15334.0,pick item,2020-01-16 10:03:43.000Z, ,"['885662']", , , ,1.48,199.99 +15335.0,create package,2020-01-16 10:03:43.000Z, ,"['885420']", ,"['660903']", ,0.483,495.0 +15336.0,pick item,2020-01-16 10:07:39.000Z, ,"['885654']", , , ,0.98,129.99 +15337.0,create package,2020-01-16 10:07:39.000Z, ,"['885528','885525','885531','885256']", ,"['660904']", ,2.4130000000000003,3778.98 +15338.0,place order,2020-01-16 10:14:13.000Z, ,"['885732','885725','885722','885726','885727','885731','885733','885728','885729','885724','885723','885730']","['991404']", , ,4.646,7664.97 +15339.0,pick item,2020-01-16 10:19:38.000Z, ,"['885625']", , , ,0.98,129.99 +15340.0,pick item,2020-01-16 10:21:33.000Z, ,"['885568']", , , ,0.495,129.0 +15341.0,pick item,2020-01-16 10:33:16.000Z, ,"['885708']", , , ,1.48,199.99 +15342.0,pay order,2020-01-16 10:50:30.000Z, , ,"['991398']", , ,0.44,481.0 +15343.0,confirm order,2020-01-16 10:53:55.000Z, , ,"['991397']", , ,2.522,3333.99 +15344.0,send package,2020-01-16 11:00:17.000Z, , , ,"['660901']", ,4.235,4639.98 +15345.0,confirm order,2020-01-16 11:08:06.000Z, , ,"['991403']", , ,2.025,3699.0 +15346.0,reorder item,2020-01-16 11:25:39.000Z, ,"['885645']", , , ,0.88,89.99 +15347.0,confirm order,2020-01-16 11:39:11.000Z, , ,"['991399']", , ,6.537000000000001,3602.96 +15348.0,send package,2020-01-16 11:40:23.000Z, , , ,"['660903']", ,0.483,495.0 +15349.0,package delivered,2020-01-16 11:46:06.000Z, , , ,"['660901']", ,4.235,4639.98 +15350.0,place order,2020-01-16 11:48:13.000Z, ,"['885734','885735']","['991405']", , ,2.65,2654.99 +15351.0,pick item,2020-01-16 11:53:05.000Z, ,"['885475']", , , ,0.28,449.0 +15352.0,create package,2020-01-16 11:53:05.000Z, ,"['885668','885583','885667','885672','885298','885552','885665','885673','885666','885671','885554','885675','885677']", ,"['660905']", ,6.587999999999999,6579.94 +15353.0,package delivered,2020-01-16 11:55:12.000Z, , , ,"['660896']", ,0.828,1664.99 +15354.0,package delivered,2020-01-16 11:55:46.000Z, , , ,"['660893']", ,2.6180000000000003,3838.98 +15355.0,send package,2020-01-16 12:02:12.000Z, , , ,"['660900']", ,1.234,2037.99 +15356.0,pay order,2020-01-16 12:04:38.000Z, , ,"['991383']", , ,3.62,1316.97 +15357.0,pay order,2020-01-16 12:08:38.000Z, , ,"['991318']", , ,0.618,1952.0 +15358.0,pick item,2020-01-16 12:10:06.000Z, ,"['885641']", , , ,0.188,1149.0 +15359.0,send package,2020-01-16 12:31:34.000Z, , , ,"['660902']", ,0.966,2198.0 +15360.0,pick item,2020-01-16 12:42:17.000Z, ,"['885696']", , , ,1.48,199.99 +15361.0,pick item,2020-01-16 12:49:13.000Z, ,"['885441']", , , ,0.78,99.99 +15362.0,failed delivery,2020-01-16 12:49:53.000Z, , , ,"['660897']", ,6.649,6732.96 +15363.0,send package,2020-01-16 13:10:28.000Z, , , ,"['660904']", ,2.4130000000000003,3778.98 +15364.0,send package,2020-01-16 13:29:35.000Z, , , ,"['660905']", ,6.587999999999999,6579.94 +15365.0,pick item,2020-01-16 13:33:33.000Z, ,"['885628']", , , ,0.78,99.99 +15366.0,failed delivery,2020-01-16 13:49:22.000Z, , , ,"['660902']", ,0.966,2198.0 +15367.0,pick item,2020-01-16 13:50:05.000Z, ,"['885249']", , , ,0.495,129.0 +15368.0,place order,2020-01-16 13:56:14.000Z, ,"['885737','885736']","['991406']", , ,1.26,124.98 +15369.0,package delivered,2020-01-16 13:56:18.000Z, , , ,"['660902']", ,0.966,2198.0 +15370.0,failed delivery,2020-01-16 14:17:06.000Z, , , ,"['660894']", ,3.808,4507.96 +15371.0,confirm order,2020-01-16 14:17:18.000Z, , ,"['991404']", , ,4.646,7664.97 +15372.0,pay order,2020-01-16 14:20:31.000Z, , ,"['991335']", , ,2.555,383.98 +15373.0,package delivered,2020-01-16 14:37:24.000Z, , , ,"['660900']", ,1.234,2037.99 +15374.0,pick item,2020-01-16 14:48:58.000Z, ,"['885713']", , , ,0.495,129.0 +15375.0,pick item,2020-01-16 14:50:05.000Z, ,"['885688']", , , ,0.88,89.99 +15376.0,payment reminder,2020-01-16 14:51:22.000Z, , ,"['991287']", , ,3.17,933.98 +15377.0,pick item,2020-01-16 14:53:12.000Z, ,"['885301']", , , ,0.188,1149.0 +15378.0,item out of stock,2020-01-16 14:56:04.000Z, ,"['885729']", , , ,0.166,799.0 +15379.0,pick item,2020-01-16 14:59:09.000Z, ,"['885686']", , , ,0.28,449.0 +15380.0,pick item,2020-01-16 15:02:48.000Z, ,"['885701']", , , ,1.25,2200.0 +15381.0,pick item,2020-01-16 15:08:35.000Z, ,"['885724']", , , ,0.98,129.99 +15382.0,pick item,2020-01-16 15:14:59.000Z, ,"['885570']", , , ,0.44,476.0 +15383.0,pay order,2020-01-16 15:21:25.000Z, , ,"['991389']", , ,1.76,653.99 +15384.0,pick item,2020-01-16 15:32:00.000Z, ,"['885659']", , , ,0.483,1099.0 +15385.0,create package,2020-01-16 15:32:00.000Z, ,"['885582','885661','885532','885659','885658','885594','885618','885604','885657','885441','885655','885405','885596','885656','885660']", ,"['660906']", ,10.652,7776.93 +15386.0,pick item,2020-01-16 15:41:07.000Z, ,"['885705']", , , ,0.495,129.0 +15387.0,package delivered,2020-01-16 15:42:20.000Z, , , ,"['660897']", ,6.649,6732.96 +15388.0,reorder item,2020-01-16 15:43:15.000Z, ,"['885429']", , , ,0.483,1099.0 +15389.0,pick item,2020-01-16 15:46:02.000Z, ,"['885719']", , , ,1.37,2500.0 +15390.0,pick item,2020-01-16 15:46:36.000Z, ,"['885699']", , , ,0.172,699.0 +15391.0,pick item,2020-01-16 15:49:48.000Z, ,"['885694']", , , ,0.44,476.0 +15392.0,payment reminder,2020-01-16 15:53:57.000Z, , ,"['991290']", , ,0.36,1853.0 +15393.0,pick item,2020-01-16 15:54:06.000Z, ,"['885639']", , , ,0.44,476.0 +15394.0,failed delivery,2020-01-16 15:56:04.000Z, , , ,"['660905']", ,6.587999999999999,6579.94 +15395.0,pick item,2020-01-16 16:08:15.000Z, ,"['885514']", , , ,0.483,79.99 +15396.0,place order,2020-01-16 16:12:15.000Z, ,"['885738','885742','885741','885740','885739']","['991407']", , ,4.056,3383.97 +15397.0,send package,2020-01-16 16:15:22.000Z, , , ,"['660898']", ,3.352,1534.97 +15398.0,package delivered,2020-01-16 16:34:05.000Z, , , ,"['660903']", ,0.483,495.0 +15399.0,pick item,2020-01-16 16:35:38.000Z, ,"['885555']", , , ,0.166,799.0 +15400.0,pick item,2020-01-16 16:36:23.000Z, ,"['885737']", , , ,0.88,89.99 +15401.0,confirm order,2020-01-16 16:53:42.000Z, , ,"['991407']", , ,4.056,3383.97 +15402.0,pick item,2020-01-16 16:54:00.000Z, ,"['885391']", , , ,1.48,199.99 +15403.0,pay order,2020-01-16 16:54:49.000Z, , ,"['991396']", , ,4.652,2131.96 +15404.0,pick item,2020-01-16 16:57:41.000Z, ,"['885697']", , , ,0.495,129.0 +15405.0,reorder item,2020-01-16 16:59:02.000Z, ,"['885676']", , , ,0.38,29.99 +15406.0,pick item,2020-01-16 17:29:43.000Z, ,"['885704']", , , ,0.172,699.0 +15407.0,pick item,2020-01-16 17:34:03.000Z, ,"['885742']", , , ,1.48,199.99 +15408.0,place order,2020-01-16 17:44:18.000Z, ,"['885747','885744','885745','885746','885748','885743']","['991408']", , ,2.026,779.95 +15409.0,pay order,2020-01-16 17:55:06.000Z, , ,"['991290']", , ,0.36,1853.0 +15410.0,pick item,2020-01-16 18:33:28.000Z, ,"['885470']", , , ,0.483,79.99 +15411.0,pick item,2020-01-16 18:50:14.000Z, ,"['885743']", , , ,0.483,495.0 +15412.0,package delivered,2020-01-16 19:06:28.000Z, , , ,"['660904']", ,2.4130000000000003,3778.98 +15413.0,pick item,2020-01-16 19:20:38.000Z, ,"['885653']", , , ,0.28,89.99 +15414.0,create package,2020-01-16 19:20:38.000Z, ,"['885742','885634','885633','885123','885476','885636']", ,"['660907']", ,4.973,3388.96 +15415.0,item out of stock,2020-01-16 19:50:32.000Z, ,"['885747']", , , ,0.38,29.99 +15416.0,pay order,2020-01-16 19:56:08.000Z, , ,"['991269']", , ,3.015,2092.98 +15417.0,pick item,2020-01-16 20:44:31.000Z, ,"['885588']", , , ,0.483,495.0 +15418.0,place order,2020-01-16 20:52:28.000Z, ,"['885752','885751','885749','885750']","['991409']", , ,1.648,1413.97 +15419.0,send package,2020-01-16 21:13:02.000Z, , , ,"['660906']", ,10.652,7776.93 +15420.0,place order,2020-01-17 06:32:42.000Z, ,"['885757','885754','885758','885753','885755','885759','885756']","['991410']", , ,3.994,4269.98 +15421.0,pick item,2020-01-17 07:28:04.000Z, ,"['885716']", , , ,0.44,476.0 +15422.0,pick item,2020-01-17 08:01:00.000Z, ,"['885232']", , , ,0.172,699.0 +15423.0,pick item,2020-01-17 08:19:35.000Z, ,"['885739']", , , ,0.166,799.0 +15424.0,pick item,2020-01-17 08:23:32.000Z, ,"['885727']", , , ,0.483,1099.0 +15425.0,pick item,2020-01-17 08:33:32.000Z, ,"['885721']", , , ,0.172,699.0 +15426.0,create package,2020-01-17 08:33:32.000Z, ,"['885701','885662','885664','885696','885699','885697']", ,"['660908']", ,6.157,3577.97 +15427.0,package delivered,2020-01-17 08:49:28.000Z, , , ,"['660906']", ,10.652,7776.93 +15428.0,pick item,2020-01-17 08:52:36.000Z, ,"['885231']", , , ,0.188,1149.0 +15429.0,item out of stock,2020-01-17 09:00:02.000Z, ,"['885725']", , , ,0.188,1149.0 +15430.0,pick item,2020-01-17 09:05:41.000Z, ,"['885333']", , , ,0.88,89.99 +15431.0,reorder item,2020-01-17 09:19:10.000Z, ,"['885663']", , , ,0.78,99.99 +15432.0,place order,2020-01-17 09:19:46.000Z, ,"['885763','885762','885765','885764','885760','885761']","['991411']", , ,3.695,1598.96 +15433.0,reorder item,2020-01-17 09:30:43.000Z, ,"['885698']", , , ,1.28,149.99 +15434.0,reorder item,2020-01-17 09:43:52.000Z, ,"['885626']", , , ,0.483,1099.0 +15435.0,confirm order,2020-01-17 09:45:29.000Z, , ,"['991409']", , ,1.648,1413.97 +15436.0,pick item,2020-01-17 09:51:50.000Z, ,"['885734']", , , ,1.28,149.99 +15437.0,pick item,2020-01-17 09:58:49.000Z, ,"['885691']", , , ,0.172,699.0 +15438.0,item out of stock,2020-01-17 10:12:18.000Z, ,"['885730']", , , ,0.483,495.0 +15439.0,confirm order,2020-01-17 10:25:32.000Z, , ,"['991400']", , ,2.978,4350.99 +15440.0,pick item,2020-01-17 10:26:45.000Z, ,"['885733']", , , ,0.2,39.99 +15441.0,pick item,2020-01-17 10:32:12.000Z, ,"['885746']", , , ,0.2,39.99 +15442.0,create package,2020-01-17 10:32:12.000Z, ,"['885637','885705','885704','885702','885390','885504','885391']", ,"['660909']", ,3.754,2854.98 +15443.0,pick item,2020-01-17 10:38:40.000Z, ,"['885573']", , , ,0.172,699.0 +15444.0,pick item,2020-01-17 10:47:37.000Z, ,"['885574']", , , ,0.172,699.0 +15445.0,pick item,2020-01-17 10:52:55.000Z, ,"['885066']", , , ,0.483,1099.0 +15446.0,place order,2020-01-17 10:59:20.000Z, ,"['885767','885768','885766']","['991412']", , ,2.04,743.98 +15447.0,pay order,2020-01-17 11:03:34.000Z, , ,"['991375']", , ,0.98,134.99 +15448.0,item out of stock,2020-01-17 11:07:52.000Z, ,"['885758']", , , ,0.88,89.99 +15449.0,pick item,2020-01-17 11:21:57.000Z, ,"['885670']", , , ,1.25,2200.0 +15450.0,pick item,2020-01-17 12:04:36.000Z, ,"['885717']", , , ,0.495,129.0 +15451.0,item out of stock,2020-01-17 12:41:44.000Z, ,"['885744']", , , ,0.28,89.99 +15452.0,pick item,2020-01-17 12:43:30.000Z, ,"['885757']", , , ,0.495,129.0 +15453.0,pick item,2020-01-17 13:08:03.000Z, ,"['885600']", , , ,0.21,529.0 +15454.0,create package,2020-01-17 13:08:03.000Z, ,"['885688','885734','885686','885721','885066','885685','885719','885475','885689']", ,"['660910']", ,6.305,6034.97 +15455.0,place order,2020-01-17 13:18:27.000Z, ,"['885769','885771','885772','885770']","['991413']", , ,2.212,1382.98 +15456.0,send package,2020-01-17 13:19:46.000Z, , , ,"['660909']", ,3.754,2854.98 +15457.0,item out of stock,2020-01-17 13:22:42.000Z, ,"['885712']", , , ,0.483,79.99 +15458.0,pick item,2020-01-17 13:26:26.000Z, ,"['885613']", , , ,1.25,2200.0 +15459.0,pick item,2020-01-17 13:33:31.000Z, ,"['885723']", , , ,0.188,1149.0 +15460.0,pick item,2020-01-17 13:40:11.000Z, ,"['885710']", , , ,1.37,2500.0 +15461.0,pick item,2020-01-17 13:45:26.000Z, ,"['885731']", , , ,0.38,29.99 +15462.0,pick item,2020-01-17 13:47:28.000Z, ,"['885567']", , , ,0.78,99.99 +15463.0,pick item,2020-01-17 14:00:56.000Z, ,"['885755']", , , ,0.188,1149.0 +15464.0,pay order,2020-01-17 14:10:05.000Z, , ,"['991337']", , ,2.47,2780.99 +15465.0,pick item,2020-01-17 14:11:25.000Z, ,"['885706']", , , ,0.28,89.99 +15466.0,pick item,2020-01-17 14:14:18.000Z, ,"['885638']", , , ,1.48,199.99 +15467.0,pick item,2020-01-17 14:14:59.000Z, ,"['885760']", , , ,0.98,129.99 +15468.0,create package,2020-01-17 14:14:59.000Z, ,"['885654','885713','885457','885653','885630','885711','885628','885716','885301','885715','885694','885717']", ,"['660911']", ,6.437,6233.96 +15469.0,pick item,2020-01-17 14:20:30.000Z, ,"['885338']", , , ,0.495,129.0 +15470.0,pick item,2020-01-17 14:21:11.000Z, ,"['885738']", , , ,1.25,2200.0 +15471.0,pick item,2020-01-17 14:38:54.000Z, ,"['885718']", , , ,0.2,39.99 +15472.0,pay order,2020-01-17 14:44:48.000Z, , ,"['991387']", , ,2.644,4030.99 +15473.0,pick item,2020-01-17 14:55:33.000Z, ,"['885714']", , , ,0.2,39.99 +15474.0,place order,2020-01-17 14:56:41.000Z, ,"['885777','885774','885773','885775','885776']","['991414']", , ,2.149,1964.98 +15475.0,pick item,2020-01-17 14:59:59.000Z, ,"['885764']", , , ,0.483,495.0 +15476.0,pick item,2020-01-17 15:00:49.000Z, ,"['885772']", , , ,0.172,699.0 +15477.0,pick item,2020-01-17 15:01:47.000Z, ,"['885645']", , , ,0.88,89.99 +15478.0,pick item,2020-01-17 15:09:57.000Z, ,"['885753']", , , ,0.28,449.0 +15479.0,pick item,2020-01-17 15:10:17.000Z, ,"['885754']", , , ,0.188,1149.0 +15480.0,package delivered,2020-01-17 15:12:08.000Z, , , ,"['660894']", ,3.808,4507.96 +15481.0,pick item,2020-01-17 15:18:18.000Z, ,"['885692']", , , ,1.37,2500.0 +15482.0,pick item,2020-01-17 15:29:08.000Z, ,"['885663']", , , ,0.78,99.99 +15483.0,pick item,2020-01-17 15:36:17.000Z, ,"['885722']", , , ,0.44,476.0 +15484.0,create package,2020-01-17 15:36:17.000Z, ,"['885651','885693','885691','885641','885645','885333','885588','885692','885649']", ,"['660912']", ,6.212999999999999,5731.96 +15485.0,reorder item,2020-01-17 16:05:41.000Z, ,"['885730']", , , ,0.483,495.0 +15486.0,send package,2020-01-17 16:10:11.000Z, , , ,"['660910']", ,6.305,6034.97 +15487.0,pay order,2020-01-17 16:18:57.000Z, , ,"['991356']", , ,2.93,2704.98 +15488.0,send package,2020-01-17 16:25:22.000Z, , , ,"['660908']", ,6.157,3577.97 +15489.0,confirm order,2020-01-17 16:36:29.000Z, , ,"['991413']", , ,2.212,1382.98 +15490.0,pick item,2020-01-17 16:41:30.000Z, ,"['885759']", , , ,1.48,199.99 +15491.0,pick item,2020-01-17 17:01:22.000Z, ,"['885751']", , , ,0.28,89.99 +15492.0,place order,2020-01-17 17:13:10.000Z, ,"['885778','885780','885781','885779']","['991415']", , ,1.526,1722.98 +15493.0,item out of stock,2020-01-17 17:18:26.000Z, ,"['885703']", , , ,0.495,129.0 +15494.0,package delivered,2020-01-17 17:24:04.000Z, , , ,"['660898']", ,3.352,1534.97 +15495.0,pick item,2020-01-17 17:24:11.000Z, ,"['885770']", , , ,0.28,449.0 +15496.0,reorder item,2020-01-17 17:26:05.000Z, ,"['885703']", , , ,0.495,129.0 +15497.0,pick item,2020-01-17 17:50:56.000Z, ,"['885750']", , , ,0.2,39.99 +15498.0,package delivered,2020-01-17 18:33:27.000Z, , , ,"['660905']", ,6.587999999999999,6579.94 +15499.0,pay order,2020-01-17 18:36:50.000Z, , ,"['991245']", , ,2.215,759.99 +15500.0,place order,2020-01-17 19:19:05.000Z, ,"['885782']","['991416']", , ,0.483,500.0 +15501.0,pick item,2020-01-17 20:17:02.000Z, ,"['885679']", , , ,1.28,149.99 +15502.0,confirm order,2020-01-17 20:52:23.000Z, , ,"['991406']", , ,1.26,124.98 +15503.0,place order,2020-01-17 22:17:44.000Z, ,"['885786','885783','885784','885785']","['991417']", , ,3.712,1153.97 +15504.0,place order,2020-01-18 20:53:00.000Z, ,"['885787','885788','885789']","['991418']", , ,1.15,1932.0 +15505.0,payment reminder,2020-01-19 08:42:06.000Z, , ,"['991293']", , ,5.591,3881.96 +15506.0,payment reminder,2020-01-19 10:21:47.000Z, , ,"['991289']", , ,3.043,819.96 +15507.0,payment reminder,2020-01-19 15:56:09.000Z, , ,"['991300']", , ,1.246,1028.99 +15508.0,place order,2020-01-19 21:33:49.000Z, ,"['885791','885790','885793','885792']","['991419']", , ,3.313,5313.99 +15509.0,create package,2020-01-19 23:00:00.000Z, ,"['885681','885679']", ,"['660913']", ,2.56,299.98 +15510.0,pay order,2020-01-20 07:22:15.000Z, , ,"['991203']", , ,2.387,1931.97 +15511.0,pick item,2020-01-20 07:33:56.000Z, ,"['885703']", , , ,0.495,129.0 +15512.0,send package,2020-01-20 07:46:20.000Z, , , ,"['660907']", ,4.973,3388.96 +15513.0,pick item,2020-01-20 07:58:27.000Z, ,"['885695']", , , ,0.88,89.99 +15514.0,send package,2020-01-20 08:16:45.000Z, , , ,"['660913']", ,2.56,299.98 +15515.0,pick item,2020-01-20 08:29:14.000Z, ,"['885740']", , , ,0.28,89.99 +15516.0,pick item,2020-01-20 08:30:30.000Z, ,"['885735']", , , ,1.37,2500.0 +15517.0,place order,2020-01-20 08:33:34.000Z, ,"['885796','885795','885794']","['991420']", , ,2.063,3529.0 +15518.0,reorder item,2020-01-20 08:49:13.000Z, ,"['885747']", , , ,0.38,29.99 +15519.0,package delivered,2020-01-20 08:58:48.000Z, , , ,"['660910']", ,6.305,6034.97 +15520.0,pick item,2020-01-20 09:13:16.000Z, ,"['885782']", , , ,0.483,495.0 +15521.0,confirm order,2020-01-20 09:24:22.000Z, , ,"['991415']", , ,1.526,1722.98 +15522.0,pick item,2020-01-20 09:31:14.000Z, ,"['885690']", , , ,0.172,699.0 +15523.0,create package,2020-01-20 09:31:14.000Z, ,"['885514','885625']", ,"['660914']", ,1.463,209.98 +15524.0,reorder item,2020-01-20 09:33:27.000Z, ,"['885758']", , , ,0.88,89.99 +15525.0,confirm order,2020-01-20 09:38:25.000Z, , ,"['991420']", , ,2.063,3529.0 +15526.0,reorder item,2020-01-20 09:49:37.000Z, ,"['885683']", , , ,0.166,799.0 +15527.0,pick item,2020-01-20 09:54:49.000Z, ,"['885789']", , , ,0.483,1099.0 +15528.0,pay order,2020-01-20 10:00:49.000Z, , ,"['991287']", , ,3.17,933.98 +15529.0,pick item,2020-01-20 10:04:11.000Z, ,"['885728']", , , ,0.172,699.0 +15530.0,create package,2020-01-20 10:04:11.000Z, ,"['885568','885338','885567','885249']", ,"['660915']", ,2.265,486.99 +15531.0,send package,2020-01-20 10:08:07.000Z, , , ,"['660911']", ,6.437,6233.96 +15532.0,item out of stock,2020-01-20 10:19:44.000Z, ,"['885709']", , , ,0.28,449.0 +15533.0,place order,2020-01-20 10:26:56.000Z, ,"['885799','885800','885798','885797']","['991421']", , ,3.44,474.96 +15534.0,pick item,2020-01-20 10:28:29.000Z, ,"['885787']", , , ,0.172,699.0 +15535.0,confirm order,2020-01-20 10:41:45.000Z, , ,"['991405']", , ,2.65,2654.99 +15536.0,pick item,2020-01-20 10:45:08.000Z, ,"['885779']", , , ,0.28,449.0 +15537.0,send package,2020-01-20 10:54:34.000Z, , , ,"['660912']", ,6.212999999999999,5731.96 +15538.0,package delivered,2020-01-20 10:57:00.000Z, , , ,"['660911']", ,6.437,6233.96 +15539.0,pick item,2020-01-20 11:24:57.000Z, ,"['885788']", , , ,0.495,129.0 +15540.0,send package,2020-01-20 11:39:12.000Z, , , ,"['660915']", ,2.265,486.99 +15541.0,pick item,2020-01-20 11:39:12.000Z, ,"['885767']", , , ,1.48,199.99 +15542.0,create package,2020-01-20 11:39:12.000Z, ,"['885708','885710']", ,"['660916']", ,2.85,2699.99 +15543.0,item out of stock,2020-01-20 11:39:37.000Z, ,"['885763']", , , ,0.38,29.99 +15544.0,place order,2020-01-20 12:13:39.000Z, ,"['885803','885801','885802']","['991422']", , ,1.916,3333.99 +15545.0,pick item,2020-01-20 13:26:00.000Z, ,"['885785']", , , ,1.48,199.99 +15546.0,confirm order,2020-01-20 13:31:51.000Z, , ,"['991421']", , ,3.44,474.96 +15547.0,pick item,2020-01-20 13:32:57.000Z, ,"['885781']", , , ,0.28,89.99 +15548.0,create package,2020-01-20 13:32:57.000Z, ,"['885670','885722','885727','885555','885731','885733','885728','885724','885723']", ,"['660917']", ,4.259,6621.97 +15549.0,payment reminder,2020-01-20 13:38:27.000Z, , ,"['991306']", , ,2.056,1572.98 +15550.0,place order,2020-01-20 13:47:05.000Z, ,"['885805','885804','885807','885809','885811','885810','885808','885806']","['991423']", , ,5.837999999999999,6802.96 +15551.0,pick item,2020-01-20 13:54:32.000Z, ,"['885803']", , , ,0.166,799.0 +15552.0,item out of stock,2020-01-20 14:02:24.000Z, ,"['885780']", , , ,0.483,1099.0 +15553.0,pay order,2020-01-20 14:05:15.000Z, , ,"['991321']", , ,0.338,1503.0 +15554.0,pick item,2020-01-20 14:08:06.000Z, ,"['885800']", , , ,0.98,129.99 +15555.0,pick item,2020-01-20 14:12:21.000Z, ,"['885736']", , , ,0.38,29.99 +15556.0,pick item,2020-01-20 14:18:57.000Z, ,"['885801']", , , ,0.38,29.99 +15557.0,pick item,2020-01-20 14:26:35.000Z, ,"['885799']", , , ,0.78,99.99 +15558.0,confirm order,2020-01-20 14:26:50.000Z, , ,"['991412']", , ,2.04,743.98 +15559.0,package delivered,2020-01-20 14:31:58.000Z, , , ,"['660915']", ,2.265,486.99 +15560.0,pick item,2020-01-20 14:48:43.000Z, ,"['885726']", , , ,0.483,495.0 +15561.0,package delivered,2020-01-20 14:48:56.000Z, , , ,"['660907']", ,4.973,3388.96 +15562.0,pick item,2020-01-20 14:59:24.000Z, ,"['885776']", , , ,0.28,89.99 +15563.0,pick item,2020-01-20 15:07:36.000Z, ,"['885768']", , , ,0.28,449.0 +15564.0,pay order,2020-01-20 15:10:41.000Z, , ,"['991293']", , ,5.591,3881.96 +15565.0,pick item,2020-01-20 15:15:45.000Z, ,"['885774']", , , ,0.44,476.0 +15566.0,create package,2020-01-20 15:15:45.000Z, ,"['885799','885803','885573','885801','885800','885574','885570','885737','885736']", ,"['660918']", ,4.35,3052.95 +15567.0,pick item,2020-01-20 15:19:09.000Z, ,"['885771']", , , ,0.98,129.99 +15568.0,item out of stock,2020-01-20 15:19:26.000Z, ,"['885766']", , , ,0.28,89.99 +15569.0,pick item,2020-01-20 15:19:39.000Z, ,"['885749']", , , ,0.188,1149.0 +15570.0,confirm order,2020-01-20 15:26:27.000Z, , ,"['991416']", , ,0.483,500.0 +15571.0,item out of stock,2020-01-20 15:33:40.000Z, ,"['885807']", , , ,0.28,89.99 +15572.0,pick item,2020-01-20 15:39:40.000Z, ,"['885805']", , , ,1.37,2500.0 +15573.0,pick item,2020-01-20 15:43:05.000Z, ,"['885777']", , , ,0.166,799.0 +15574.0,pick item,2020-01-20 15:47:01.000Z, ,"['885650']", , , ,1.48,199.99 +15575.0,package delivered,2020-01-20 15:53:20.000Z, , , ,"['660913']", ,2.56,299.98 +15576.0,place order,2020-01-20 15:53:58.000Z, ,"['885812','885814','885813','885815','885816']","['991424']", , ,2.047,1042.97 +15577.0,confirm order,2020-01-20 15:57:22.000Z, , ,"['991424']", , ,2.047,1042.97 +15578.0,pick item,2020-01-20 16:05:00.000Z, ,"['885810']", , , ,0.78,99.99 +15579.0,send package,2020-01-20 16:13:07.000Z, , , ,"['660914']", ,1.463,209.98 +15580.0,confirm order,2020-01-20 16:13:44.000Z, , ,"['991418']", , ,1.15,1932.0 +15581.0,pick item,2020-01-20 16:18:47.000Z, ,"['885792']", , , ,0.483,79.99 +15582.0,pick item,2020-01-20 16:24:21.000Z, ,"['885773']", , , ,0.483,495.0 +15583.0,confirm order,2020-01-20 16:25:37.000Z, , ,"['991410']", , ,3.994,4269.98 +15584.0,pick item,2020-01-20 16:30:32.000Z, ,"['885795']", , , ,0.483,495.0 +15585.0,create package,2020-01-20 16:30:32.000Z, ,"['885600','885639','885638','885613','885781','885779']", ,"['660919']", ,3.94,3943.98 +15586.0,pick item,2020-01-20 16:31:01.000Z, ,"['885748']", , , ,0.483,79.99 +15587.0,package delivered,2020-01-20 16:42:11.000Z, , , ,"['660908']", ,6.157,3577.97 +15588.0,payment reminder,2020-01-20 16:52:32.000Z, , ,"['991305']", , ,2.25,753.97 +15589.0,item out of stock,2020-01-20 17:32:23.000Z, ,"['885762']", , , ,0.2,39.99 +15590.0,failed delivery,2020-01-20 17:40:45.000Z, , , ,"['660909']", ,3.754,2854.98 +15591.0,pick item,2020-01-20 17:50:55.000Z, ,"['885790']", , , ,0.21,529.0 +15592.0,place order,2020-01-20 18:07:43.000Z, ,"['885821','885817','885820','885819','885818']","['991425']", , ,2.603,2637.98 +15593.0,confirm order,2020-01-20 19:22:18.000Z, , ,"['991425']", , ,2.603,2637.98 +15594.0,pick item,2020-01-20 20:16:34.000Z, ,"['885784']", , , ,0.172,699.0 +15595.0,pick item,2020-01-20 20:22:38.000Z, ,"['885732']", , , ,0.483,1099.0 +15596.0,package delivered,2020-01-20 20:51:42.000Z, , , ,"['660914']", ,1.463,209.98 +15597.0,place order,2020-01-20 20:55:01.000Z, ,"['885823','885824','885822','885826','885825']","['991426']", , ,2.8960000000000004,3618.98 +15598.0,pick item,2020-01-20 20:56:37.000Z, ,"['885458']", , , ,1.28,149.99 +15599.0,place order,2020-01-21 06:48:00.000Z, ,"['885827']","['991427']", , ,0.44,481.0 +15600.0,pick item,2020-01-21 07:44:59.000Z, ,"['885592']", , , ,0.28,89.99 +15601.0,create package,2020-01-21 07:44:59.000Z, ,"['885470','885782','885795','885784','885785']", ,"['660920']", ,3.1010000000000004,1968.98 +15602.0,pick item,2020-01-21 07:55:01.000Z, ,"['885814']", , , ,0.172,699.0 +15603.0,item out of stock,2020-01-21 07:55:17.000Z, ,"['885687']", , , ,0.28,89.99 +15604.0,pick item,2020-01-21 08:01:45.000Z, ,"['885698']", , , ,1.28,149.99 +15605.0,pick item,2020-01-21 08:03:05.000Z, ,"['885823']", , , ,1.37,2500.0 +15606.0,pick item,2020-01-21 08:20:53.000Z, ,"['885549']", , , ,1.28,149.99 +15607.0,pick item,2020-01-21 08:23:19.000Z, ,"['885635']", , , ,0.188,1149.0 +15608.0,create package,2020-01-21 08:23:19.000Z, ,"['885592','885746','885748','885751','885743','885749','885750']", ,"['660921']", ,2.114,1983.95 +15609.0,send package,2020-01-21 08:24:43.000Z, , , ,"['660917']", ,4.259,6621.97 +15610.0,confirm order,2020-01-21 08:36:49.000Z, , ,"['991411']", , ,3.695,1598.96 +15611.0,pick item,2020-01-21 08:41:45.000Z, ,"['885821']", , , ,0.483,495.0 +15612.0,reorder item,2020-01-21 08:44:47.000Z, ,"['885709']", , , ,0.28,449.0 +15613.0,pick item,2020-01-21 08:49:57.000Z, ,"['885707']", , , ,1.37,2500.0 +15614.0,pick item,2020-01-21 08:56:29.000Z, ,"['885469']", , , ,0.483,79.99 +15615.0,payment reminder,2020-01-21 09:06:06.000Z, , ,"['991311']", , ,3.107,2726.99 +15616.0,confirm order,2020-01-21 09:14:54.000Z, , ,"['991408']", , ,2.026,779.95 +15617.0,pick item,2020-01-21 09:34:53.000Z, ,"['885796']", , , ,1.37,2500.0 +15618.0,package delivered,2020-01-21 09:35:09.000Z, , , ,"['660917']", ,4.259,6621.97 +15619.0,reorder item,2020-01-21 09:35:33.000Z, ,"['885762']", , , ,0.2,39.99 +15620.0,place order,2020-01-21 09:36:36.000Z, ,"['885828','885829']","['991428']", , ,0.655,1803.0 +15621.0,send package,2020-01-21 09:46:10.000Z, , , ,"['660918']", ,4.35,3052.95 +15622.0,item out of stock,2020-01-21 10:15:23.000Z, ,"['885786']", , , ,0.78,99.99 +15623.0,confirm order,2020-01-21 10:22:23.000Z, , ,"['991427']", , ,0.44,481.0 +15624.0,pick item,2020-01-21 10:22:52.000Z, ,"['885674']", , , ,0.38,29.99 +15625.0,package delivered,2020-01-21 10:25:33.000Z, , , ,"['660912']", ,6.212999999999999,5731.96 +15626.0,pick item,2020-01-21 10:32:00.000Z, ,"['885794']", , , ,0.21,529.0 +15627.0,pick item,2020-01-21 10:32:14.000Z, ,"['885815']", , , ,0.2,39.99 +15628.0,create package,2020-01-21 10:32:14.000Z, ,"['885805','885232','885810','885231','885760','885764']", ,"['660922']", ,3.973,5072.98 +15629.0,pick item,2020-01-21 10:35:23.000Z, ,"['885551']", , , ,0.483,495.0 +15630.0,pick item,2020-01-21 10:57:31.000Z, ,"['885778']", , , ,0.483,79.99 +15631.0,payment reminder,2020-01-21 11:00:28.000Z, , ,"['991313']", , ,1.132,1378.99 +15632.0,pick item,2020-01-21 11:10:27.000Z, ,"['885516']", , , ,0.44,476.0 +15633.0,pay order,2020-01-21 11:22:50.000Z, , ,"['991365']", , ,1.22,580.99 +15634.0,pick item,2020-01-21 11:25:01.000Z, ,"['885827']", , , ,0.44,476.0 +15635.0,place order,2020-01-21 11:32:59.000Z, ,"['885831','885832','885830']","['991429']", , ,2.04,633.98 +15636.0,reorder item,2020-01-21 11:37:56.000Z, ,"['885780']", , , ,0.483,1099.0 +15637.0,confirm order,2020-01-21 11:46:51.000Z, , ,"['991417']", , ,3.712,1153.97 +15638.0,send package,2020-01-21 11:57:44.000Z, , , ,"['660919']", ,3.94,3943.98 +15639.0,confirm order,2020-01-21 12:02:08.000Z, , ,"['991423']", , ,5.837999999999999,6802.96 +15640.0,reorder item,2020-01-21 13:02:00.000Z, ,"['885744']", , , ,0.28,89.99 +15641.0,pick item,2020-01-21 13:05:58.000Z, ,"['885811']", , , ,1.25,2200.0 +15642.0,place order,2020-01-21 13:25:45.000Z, ,"['885833','885840','885835','885836','885837','885838','885834','885839']","['991430']", , ,3.748,4966.98 +15643.0,item out of stock,2020-01-21 13:33:52.000Z, ,"['885819']", , , ,0.172,699.0 +15644.0,pay order,2020-01-21 13:46:01.000Z, , ,"['991395']", , ,4.769,2801.97 +15645.0,send package,2020-01-21 13:49:34.000Z, , , ,"['660916']", ,2.85,2699.99 +15646.0,package delivered,2020-01-21 13:59:58.000Z, , , ,"['660918']", ,4.35,3052.95 +15647.0,pick item,2020-01-21 14:05:44.000Z, ,"['885816']", , , ,0.2,39.99 +15648.0,create package,2020-01-21 14:05:44.000Z, ,"['885738','885739','885776','885777','885774','885773','885740','885635']", ,"['660923']", ,3.253,6097.98 +15649.0,send package,2020-01-21 14:09:18.000Z, , , ,"['660920']", ,3.1010000000000004,1968.98 +15650.0,pick item,2020-01-21 14:13:06.000Z, ,"['885793']", , , ,1.37,2500.0 +15651.0,reorder item,2020-01-21 14:17:53.000Z, ,"['885729']", , , ,0.166,799.0 +15652.0,pick item,2020-01-21 14:26:25.000Z, ,"['885802']", , , ,1.37,2500.0 +15653.0,pick item,2020-01-21 14:34:12.000Z, ,"['885047']", , , ,0.2,39.99 +15654.0,confirm order,2020-01-21 14:36:02.000Z, , ,"['991429']", , ,2.04,633.98 +15655.0,pick item,2020-01-21 14:38:54.000Z, ,"['885684']", , , ,1.48,199.99 +15656.0,pick item,2020-01-21 14:39:47.000Z, ,"['885775']", , , ,0.78,99.99 +15657.0,reorder item,2020-01-21 14:45:19.000Z, ,"['885766']", , , ,0.28,89.99 +15658.0,pick item,2020-01-21 14:46:12.000Z, ,"['885791']", , , ,1.25,2200.0 +15659.0,send package,2020-01-21 14:48:42.000Z, , , ,"['660922']", ,3.973,5072.98 +15660.0,pick item,2020-01-21 14:53:26.000Z, ,"['885797']", , , ,1.48,199.99 +15661.0,reorder item,2020-01-21 15:00:57.000Z, ,"['885763']", , , ,0.38,29.99 +15662.0,pick item,2020-01-21 15:01:03.000Z, ,"['885752']", , , ,0.98,129.99 +15663.0,create package,2020-01-21 15:01:03.000Z, ,"['885757','885754','885753','885755','885759','885707','885706','885703']", ,"['660924']", ,4.776,5794.98 +15664.0,send package,2020-01-21 15:03:31.000Z, , , ,"['660924']", ,4.776,5794.98 +15665.0,place order,2020-01-21 15:11:18.000Z, ,"['885842','885841','885843','885844']","['991431']", , ,1.418,2331.99 +15666.0,package delivered,2020-01-21 15:11:46.000Z, , , ,"['660916']", ,2.85,2699.99 +15667.0,pick item,2020-01-21 15:21:52.000Z, ,"['885812']", , , ,0.98,129.99 +15668.0,pick item,2020-01-21 15:23:01.000Z, ,"['885808']", , , ,0.78,99.99 +15669.0,pick item,2020-01-21 15:25:02.000Z, ,"['885780']", , , ,0.483,1099.0 +15670.0,item out of stock,2020-01-21 15:30:44.000Z, ,"['885841']", , , ,0.28,449.0 +15671.0,payment reminder,2020-01-21 15:42:48.000Z, , ,"['991315']", , ,1.81,2981.0 +15672.0,pick item,2020-01-21 15:54:52.000Z, ,"['885828']", , , ,0.172,699.0 +15673.0,pick item,2020-01-21 16:07:40.000Z, ,"['885429']", , , ,0.483,1099.0 +15674.0,confirm order,2020-01-21 16:09:38.000Z, , ,"['991430']", , ,3.748,4966.98 +15675.0,pick item,2020-01-21 16:10:36.000Z, ,"['885285']", , , ,0.172,699.0 +15676.0,send package,2020-01-21 16:13:11.000Z, , , ,"['660923']", ,3.253,6097.98 +15677.0,item out of stock,2020-01-21 16:14:01.000Z, ,"['885832']", , , ,0.28,449.0 +15678.0,package delivered,2020-01-21 16:15:43.000Z, , , ,"['660919']", ,3.94,3943.98 +15679.0,payment reminder,2020-01-21 16:40:51.000Z, , ,"['991314']", , ,4.206,2008.97 +15680.0,place order,2020-01-21 16:42:23.000Z, ,"['885846','885850','885848','885847','885845','885849']","['991432']", , ,4.073,3742.97 +15681.0,confirm order,2020-01-21 16:47:16.000Z, , ,"['991422']", , ,1.916,3333.99 +15682.0,confirm order,2020-01-21 18:13:20.000Z, , ,"['991428']", , ,0.655,1803.0 +15683.0,reorder item,2020-01-21 18:29:22.000Z, ,"['885807']", , , ,0.28,89.99 +15684.0,pick item,2020-01-21 18:37:36.000Z, ,"['885850']", , , ,1.25,2200.0 +15685.0,place order,2020-01-21 18:46:44.000Z, ,"['885852','885853','885851']","['991433']", , ,1.74,2823.99 +15686.0,pick item,2020-01-21 20:38:59.000Z, ,"['885590']", , , ,0.98,129.99 +15687.0,create package,2020-01-21 20:38:59.000Z, ,"['885718','885789','885823','885458','885787','885788','885714']", ,"['660925']", ,4.2,4656.97 +15688.0,place order,2020-01-21 22:13:03.000Z, ,"['885856','885857','885859','885855','885854','885858']","['991434']", , ,4.538,6682.98 +15689.0,confirm order,2020-01-22 07:37:40.000Z, , ,"['991434']", , ,4.538,6682.98 +15690.0,place order,2020-01-22 08:07:14.000Z, ,"['885860','885863','885862','885861']","['991435']", , ,2.317,3782.0 +15691.0,send package,2020-01-22 08:16:51.000Z, , , ,"['660925']", ,4.2,4656.97 +15692.0,pick item,2020-01-22 08:22:15.000Z, ,"['885627']", , , ,0.495,129.0 +15693.0,pick item,2020-01-22 08:23:29.000Z, ,"['885844']", , , ,0.483,1099.0 +15694.0,pick item,2020-01-22 08:27:51.000Z, ,"['885837']", , , ,0.495,129.0 +15695.0,pick item,2020-01-22 08:45:10.000Z, ,"['885855']", , , ,1.37,2500.0 +15696.0,item out of stock,2020-01-22 08:49:33.000Z, ,"['885745']", , , ,0.2,39.99 +15697.0,confirm order,2020-01-22 08:49:45.000Z, , ,"['991433']", , ,1.74,2823.99 +15698.0,package delivered,2020-01-22 08:53:37.000Z, , , ,"['660909']", ,3.754,2854.98 +15699.0,pay order,2020-01-22 08:53:48.000Z, , ,"['991430']", , ,3.748,4966.98 +15700.0,failed delivery,2020-01-22 09:05:57.000Z, , , ,"['660923']", ,3.253,6097.98 +15701.0,item out of stock,2020-01-22 09:12:56.000Z, ,"['885720']", , , ,0.483,495.0 +15702.0,pick item,2020-01-22 09:14:46.000Z, ,"['885861']", , , ,1.37,2500.0 +15703.0,package delivered,2020-01-22 09:15:49.000Z, , , ,"['660922']", ,3.973,5072.98 +15704.0,confirm order,2020-01-22 09:27:28.000Z, , ,"['991435']", , ,2.317,3782.0 +15705.0,pick item,2020-01-22 09:31:43.000Z, ,"['885843']", , , ,0.483,79.99 +15706.0,pay order,2020-01-22 09:32:41.000Z, , ,"['991403']", , ,2.025,3699.0 +15707.0,place order,2020-01-22 09:34:16.000Z, ,"['885864','885866','885865']","['991436']", , ,1.463,224.97 +15708.0,send package,2020-01-22 09:39:38.000Z, , , ,"['660921']", ,2.114,1983.95 +15709.0,pick item,2020-01-22 09:54:10.000Z, ,"['885831']", , , ,0.88,89.99 +15710.0,create package,2020-01-22 09:54:10.000Z, ,"['885772','885770','885684','885690','885735','885771','885837']", ,"['660926']", ,4.949,4805.98 +15711.0,reorder item,2020-01-22 10:02:57.000Z, ,"['885786']", , , ,0.78,99.99 +15712.0,pick item,2020-01-22 10:23:53.000Z, ,"['885849']", , , ,0.188,1149.0 +15713.0,pay order,2020-01-22 10:35:17.000Z, , ,"['991397']", , ,2.522,3333.99 +15714.0,item out of stock,2020-01-22 10:35:55.000Z, ,"['885842']", , , ,0.172,699.0 +15715.0,item out of stock,2020-01-22 10:40:19.000Z, ,"['885847']", , , ,0.495,129.0 +15716.0,pay order,2020-01-22 10:41:13.000Z, , ,"['991391']", , ,3.944,4106.98 +15717.0,pay order,2020-01-22 10:44:04.000Z, , ,"['991408']", , ,2.026,779.95 +15718.0,confirm order,2020-01-22 11:09:45.000Z, , ,"['991419']", , ,3.313,5313.99 +15719.0,package delivered,2020-01-22 11:11:38.000Z, , , ,"['660921']", ,2.114,1983.95 +15720.0,pick item,2020-01-22 11:12:31.000Z, ,"['885858']", , , ,0.172,699.0 +15721.0,pick item,2020-01-22 11:14:44.000Z, ,"['885839']", , , ,0.28,89.99 +15722.0,place order,2020-01-22 11:28:19.000Z, ,"['885869','885868','885867','885870']","['991437']", , ,2.9410000000000003,1927.99 +15723.0,pick item,2020-01-22 11:46:11.000Z, ,"['884937']", , , ,0.28,89.99 +15724.0,item out of stock,2020-01-22 11:54:27.000Z, ,"['885836']", , , ,0.28,449.0 +15725.0,item out of stock,2020-01-22 12:04:11.000Z, ,"['885829']", , , ,0.483,1099.0 +15726.0,pick item,2020-01-22 12:19:08.000Z, ,"['885835']", , , ,0.188,1149.0 +15727.0,item out of stock,2020-01-22 12:29:45.000Z, ,"['885826']", , , ,0.483,79.99 +15728.0,item out of stock,2020-01-22 12:34:17.000Z, ,"['885741']", , , ,0.88,89.99 +15729.0,pick item,2020-01-22 12:39:58.000Z, ,"['885863']", , , ,0.172,699.0 +15730.0,confirm order,2020-01-22 12:43:12.000Z, , ,"['991414']", , ,2.149,1964.98 +15731.0,package delivered,2020-01-22 12:52:47.000Z, , , ,"['660920']", ,3.1010000000000004,1968.98 +15732.0,place order,2020-01-22 13:16:25.000Z, ,"['885872','885873','885871']","['991438']", , ,3.255,483.98 +15733.0,item out of stock,2020-01-22 14:04:14.000Z, ,"['885813']", , , ,0.495,129.0 +15734.0,send package,2020-01-22 14:22:45.000Z, , , ,"['660926']", ,4.949,4805.98 +15735.0,package delivered,2020-01-22 14:26:52.000Z, , , ,"['660923']", ,3.253,6097.98 +15736.0,reorder item,2020-01-22 14:27:29.000Z, ,"['885725']", , , ,0.188,1149.0 +15737.0,package delivered,2020-01-22 14:30:33.000Z, , , ,"['660925']", ,4.2,4656.97 +15738.0,package delivered,2020-01-22 14:35:34.000Z, , , ,"['660924']", ,4.776,5794.98 +15739.0,place order,2020-01-22 14:52:38.000Z, ,"['885877','885876','885880','885879','885874','885878','885875']","['991439']", , ,4.004,2667.97 +15740.0,pick item,2020-01-22 14:57:57.000Z, ,"['885852']", , , ,0.28,89.99 +15741.0,create package,2020-01-22 14:57:57.000Z, ,"['885827','885698','885695','885663']", ,"['660927']", ,3.38,815.97 +15742.0,pay order,2020-01-22 14:59:15.000Z, , ,"['991420']", , ,2.063,3529.0 +15743.0,confirm order,2020-01-22 15:02:16.000Z, , ,"['991402']", , ,4.046,3178.96 +15744.0,pay order,2020-01-22 15:04:46.000Z, , ,"['991289']", , ,3.043,819.96 +15745.0,pay order,2020-01-22 15:15:26.000Z, , ,"['991411']", , ,3.695,1598.96 +15746.0,pick item,2020-01-22 15:17:32.000Z, ,"['885765']", , , ,0.172,699.0 +15747.0,pick item,2020-01-22 15:43:25.000Z, ,"['885786']", , , ,0.78,99.99 +15748.0,pick item,2020-01-22 15:46:54.000Z, ,"['885864']", , , ,0.483,79.99 +15749.0,item out of stock,2020-01-22 15:51:20.000Z, ,"['885806']", , , ,0.21,529.0 +15750.0,package delivered,2020-01-22 15:51:41.000Z, , , ,"['660926']", ,4.949,4805.98 +15751.0,confirm order,2020-01-22 15:55:59.000Z, , ,"['991432']", , ,4.073,3742.97 +15752.0,pay order,2020-01-22 15:57:10.000Z, , ,"['991424']", , ,2.047,1042.97 +15753.0,pick item,2020-01-22 15:59:26.000Z, ,"['885608']", , , ,0.38,29.99 +15754.0,create package,2020-01-22 15:59:26.000Z, ,"['885516','885608','885767','885768','885627']", ,"['660928']", ,3.075,1283.98 +15755.0,send package,2020-01-22 16:03:14.000Z, , , ,"['660927']", ,3.38,815.97 +15756.0,pick item,2020-01-22 16:11:46.000Z, ,"['885873']", , , ,1.28,149.99 +15757.0,package delivered,2020-01-22 16:31:05.000Z, , , ,"['660927']", ,3.38,815.97 +15758.0,pick item,2020-01-22 16:45:09.000Z, ,"['885830']", , , ,0.88,89.99 +15759.0,confirm order,2020-01-22 16:54:45.000Z, , ,"['991431']", , ,1.418,2331.99 +15760.0,pick item,2020-01-22 16:55:01.000Z, ,"['885834']", , , ,0.44,476.0 +15761.0,place order,2020-01-22 17:05:03.000Z, ,"['885882','885881']","['991440']", , ,1.475,263.99 +15762.0,payment reminder,2020-01-22 17:30:53.000Z, , ,"['991324']", , ,6.971,5812.96 +15763.0,confirm order,2020-01-22 17:45:00.000Z, , ,"['991440']", , ,1.475,263.99 +15764.0,place order,2020-01-22 18:54:44.000Z, ,"['885886','885887','885883','885884','885885']","['991441']", , ,3.18,3268.99 +15765.0,pick item,2020-01-22 19:15:49.000Z, ,"['885879']", , , ,0.78,99.99 +15766.0,place order,2020-01-22 22:29:03.000Z, ,"['885891','885892','885889','885890','885888']","['991442']", , ,3.153,2900.97 +15767.0,confirm order,2020-01-23 07:36:27.000Z, , ,"['991442']", , ,3.153,2900.97 +15768.0,pick item,2020-01-23 08:06:54.000Z, ,"['885845']", , , ,0.38,29.99 +15769.0,create package,2020-01-23 08:06:54.000Z, ,"['885732','885726','885674','885551','885285']", ,"['660929']", ,2.001,2817.99 +15770.0,place order,2020-01-23 08:26:26.000Z, ,"['885893','885895','885894']","['991443']", , ,1.826,983.98 +15771.0,send package,2020-01-23 08:29:12.000Z, , , ,"['660929']", ,2.001,2817.99 +15772.0,pick item,2020-01-23 08:37:18.000Z, ,"['885820']", , , ,0.28,89.99 +15773.0,item out of stock,2020-01-23 08:42:17.000Z, ,"['885853']", , , ,0.21,529.0 +15774.0,pick item,2020-01-23 08:48:32.000Z, ,"['885840']", , , ,0.2,39.99 +15775.0,reorder item,2020-01-23 08:53:37.000Z, ,"['885745']", , , ,0.2,39.99 +15776.0,pick item,2020-01-23 08:58:01.000Z, ,"['885870']", , , ,0.495,129.0 +15777.0,payment reminder,2020-01-23 09:03:11.000Z, , ,"['991325']", , ,0.36,1853.0 +15778.0,item out of stock,2020-01-23 09:07:11.000Z, ,"['885846']", , , ,0.78,99.99 +15779.0,pick item,2020-01-23 09:10:16.000Z, ,"['885833']", , , ,0.495,129.0 +15780.0,reorder item,2020-01-23 09:18:32.000Z, ,"['885826']", , , ,0.483,79.99 +15781.0,confirm order,2020-01-23 09:21:20.000Z, , ,"['991436']", , ,1.463,224.97 +15782.0,pay order,2020-01-23 09:37:43.000Z, , ,"['991366']", , ,1.763,1253.99 +15783.0,pick item,2020-01-23 09:49:42.000Z, ,"['885882']", , , ,0.495,129.0 +15784.0,create package,2020-01-23 09:49:42.000Z, ,"['885814','885845','885850','885429','885849','885650','885812','885816','885590','885815']", ,"['660930']", ,6.313,5716.94 +15785.0,pick item,2020-01-23 09:54:27.000Z, ,"['885513']", , , ,0.88,89.99 +15786.0,item out of stock,2020-01-23 09:59:18.000Z, ,"['885875']", , , ,0.172,699.0 +15787.0,pick item,2020-01-23 10:10:34.000Z, ,"['885857']", , , ,0.483,79.99 +15788.0,place order,2020-01-23 10:12:40.000Z, ,"['885898','885897','885896','885899']","['991444']", , ,2.095,1148.99 +15789.0,confirm order,2020-01-23 10:17:11.000Z, , ,"['991437']", , ,2.9410000000000003,1927.99 +15790.0,pick item,2020-01-23 10:23:50.000Z, ,"['885874']", , , ,0.88,89.99 +15791.0,pick item,2020-01-23 10:28:37.000Z, ,"['885877']", , , ,1.28,149.99 +15792.0,reorder item,2020-01-23 10:33:07.000Z, ,"['885829']", , , ,0.483,1099.0 +15793.0,item out of stock,2020-01-23 10:45:42.000Z, ,"['885876']", , , ,0.44,476.0 +15794.0,package delivered,2020-01-23 11:00:01.000Z, , , ,"['660929']", ,2.001,2817.99 +15795.0,pick item,2020-01-23 11:02:01.000Z, ,"['885883']", , , ,1.37,2500.0 +15796.0,confirm order,2020-01-23 11:04:53.000Z, , ,"['991426']", , ,2.8960000000000004,3618.98 +15797.0,item out of stock,2020-01-23 11:24:55.000Z, ,"['885818']", , , ,0.188,1149.0 +15798.0,pick item,2020-01-23 11:28:51.000Z, ,"['885798']", , , ,0.2,39.99 +15799.0,item out of stock,2020-01-23 11:37:11.000Z, ,"['885887']", , , ,0.495,129.0 +15800.0,pay order,2020-01-23 11:38:13.000Z, , ,"['991388']", , ,3.73,933.96 +15801.0,place order,2020-01-23 11:45:07.000Z, ,"['885901','885903','885904','885900','885905','885902']","['991445']", , ,2.486,1063.95 +15802.0,reorder item,2020-01-23 12:02:44.000Z, ,"['885720']", , , ,0.483,495.0 +15803.0,pick item,2020-01-23 12:03:18.000Z, ,"['885725']", , , ,0.188,1149.0 +15804.0,pick item,2020-01-23 12:08:51.000Z, ,"['885848']", , , ,0.98,129.99 +15805.0,reorder item,2020-01-23 12:34:46.000Z, ,"['885875']", , , ,0.172,699.0 +15806.0,pay order,2020-01-23 12:41:41.000Z, , ,"['991418']", , ,1.15,1932.0 +15807.0,pick item,2020-01-23 12:45:09.000Z, ,"['885825']", , , ,0.28,449.0 +15808.0,confirm order,2020-01-23 12:50:13.000Z, , ,"['991439']", , ,4.004,2667.97 +15809.0,pick item,2020-01-23 12:54:55.000Z, ,"['885296']", , , ,1.25,2200.0 +15810.0,create package,2020-01-23 12:54:55.000Z, ,"['885877','885791','885790','885879','885874','885793','885792']", ,"['660931']", ,6.252999999999999,5648.96 +15811.0,reorder item,2020-01-23 13:16:18.000Z, ,"['885712']", , , ,0.483,79.99 +15812.0,pay order,2020-01-23 13:20:54.000Z, , ,"['991370']", , ,4.467,1272.95 +15813.0,pick item,2020-01-23 13:23:28.000Z, ,"['885824']", , , ,0.28,89.99 +15814.0,confirm order,2020-01-23 13:31:16.000Z, , ,"['991443']", , ,1.826,983.98 +15815.0,pay order,2020-01-23 13:40:26.000Z, , ,"['991306']", , ,2.056,1572.98 +15816.0,pick item,2020-01-23 13:42:17.000Z, ,"['885838']", , , ,1.37,2500.0 +15817.0,item out of stock,2020-01-23 13:42:43.000Z, ,"['885862']", , , ,0.28,449.0 +15818.0,pick item,2020-01-23 13:45:57.000Z, ,"['885884']", , , ,0.44,476.0 +15819.0,place order,2020-01-23 13:50:01.000Z, ,"['885907','885908','885909','885906','885910','885911']","['991446']", , ,4.072,3712.97 +15820.0,pay order,2020-01-23 13:53:22.000Z, , ,"['991324']", , ,6.971,5812.96 +15821.0,pick item,2020-01-23 13:55:16.000Z, ,"['885860']", , , ,0.495,129.0 +15822.0,item out of stock,2020-01-23 13:59:27.000Z, ,"['885910']", , , ,0.172,699.0 +15823.0,item out of stock,2020-01-23 14:01:01.000Z, ,"['885880']", , , ,0.28,449.0 +15824.0,reorder item,2020-01-23 14:39:15.000Z, ,"['885880']", , , ,0.28,449.0 +15825.0,send package,2020-01-23 14:46:45.000Z, , , ,"['660931']", ,6.252999999999999,5648.96 +15826.0,pick item,2020-01-23 14:49:48.000Z, ,"['885889']", , , ,0.2,39.99 +15827.0,pick item,2020-01-23 14:55:39.000Z, ,"['885700']", , , ,0.98,129.99 +15828.0,pick item,2020-01-23 15:00:43.000Z, ,"['885881']", , , ,0.98,129.99 +15829.0,create package,2020-01-23 15:00:43.000Z, ,"['885549','885882','885881','885843','885798','885844','885802','885797']", ,"['660932']", ,6.771,4327.95 +15830.0,confirm order,2020-01-23 15:02:26.000Z, , ,"['991441']", , ,3.18,3268.99 +15831.0,reorder item,2020-01-23 15:03:22.000Z, ,"['885836']", , , ,0.28,449.0 +15832.0,pick item,2020-01-23 15:10:38.000Z, ,"['885909']", , , ,0.21,529.0 +15833.0,pick item,2020-01-23 15:20:13.000Z, ,"['885384']", , , ,0.483,495.0 +15834.0,pick item,2020-01-23 15:31:00.000Z, ,"['885903']", , , ,0.166,799.0 +15835.0,pay order,2020-01-23 15:37:06.000Z, , ,"['991413']", , ,2.212,1382.98 +15836.0,pick item,2020-01-23 15:39:08.000Z, ,"['885891']", , , ,0.78,99.99 +15837.0,reorder item,2020-01-23 15:39:14.000Z, ,"['885841']", , , ,0.28,449.0 +15838.0,item out of stock,2020-01-23 15:43:57.000Z, ,"['885769']", , , ,0.78,99.99 +15839.0,pick item,2020-01-23 15:46:24.000Z, ,"['885761']", , , ,1.48,199.99 +15840.0,place order,2020-01-23 15:59:50.000Z, ,"['885915','885914','885913','885916','885918','885920','885912','885919','885917']","['991447']", , ,5.55,1462.93 +15841.0,pick item,2020-01-23 16:02:27.000Z, ,"['885896']", , , ,0.28,449.0 +15842.0,pick item,2020-01-23 16:29:05.000Z, ,"['885447']", , , ,0.188,1149.0 +15843.0,item out of stock,2020-01-23 16:31:36.000Z, ,"['885804']", , , ,0.98,129.99 +15844.0,pay order,2020-01-23 16:44:34.000Z, , ,"['991394']", , ,1.422,1382.97 +15845.0,send package,2020-01-23 16:52:11.000Z, , , ,"['660928']", ,3.075,1283.98 +15846.0,pick item,2020-01-23 16:55:03.000Z, ,"['885899']", , , ,0.44,476.0 +15847.0,create package,2020-01-23 16:55:03.000Z, ,"['885821','885820','885047']", ,"['660933']", ,0.963,624.98 +15848.0,pick item,2020-01-23 17:01:44.000Z, ,"['885878']", , , ,0.172,699.0 +15849.0,reorder item,2020-01-23 17:06:14.000Z, ,"['885687']", , , ,0.28,89.99 +15850.0,place order,2020-01-23 18:19:27.000Z, ,"['885924','885925','885922','885923','885921','885926']","['991448']", , ,3.1060000000000003,2416.98 +15851.0,place order,2020-01-23 21:18:29.000Z, ,"['885930','885928','885931','885927','885929']","['991449']", , ,2.789,1558.97 +15852.0,package delivered,2020-01-23 21:44:59.000Z, , , ,"['660928']", ,3.075,1283.98 +15853.0,pick item,2020-01-24 07:24:07.000Z, ,"['885817']", , , ,1.48,199.99 +15854.0,place order,2020-01-24 07:28:33.000Z, ,"['885935','885936','885937','885933','885932','885934']","['991450']", , ,3.092,2123.97 +15855.0,package delivered,2020-01-24 07:51:40.000Z, , , ,"['660931']", ,6.252999999999999,5648.96 +15856.0,pick item,2020-01-24 07:57:00.000Z, ,"['885851']", , , ,1.25,2200.0 +15857.0,create package,2020-01-24 07:57:00.000Z, ,"['885469','885796','885786','885831','885794','885830']", ,"['660934']", ,4.603,3388.96 +15858.0,pick item,2020-01-24 08:03:14.000Z, ,"['885872']", , , ,1.48,199.99 +15859.0,pick item,2020-01-24 08:10:33.000Z, ,"['885859']", , , ,0.483,1099.0 +15860.0,pick item,2020-01-24 08:26:56.000Z, ,"['885919']", , , ,0.78,99.99 +15861.0,item out of stock,2020-01-24 08:30:20.000Z, ,"['885871']", , , ,0.495,129.0 +15862.0,confirm order,2020-01-24 08:34:16.000Z, , ,"['991447']", , ,5.55,1462.93 +15863.0,send package,2020-01-24 08:36:18.000Z, , , ,"['660932']", ,6.771,4327.95 +15864.0,confirm order,2020-01-24 08:42:57.000Z, , ,"['991444']", , ,2.095,1148.99 +15865.0,confirm order,2020-01-24 08:45:44.000Z, , ,"['991449']", , ,2.789,1558.97 +15866.0,pick item,2020-01-24 08:52:36.000Z, ,"['885866']", , , ,0.78,99.99 +15867.0,pick item,2020-01-24 08:56:05.000Z, ,"['885904']", , , ,0.38,29.99 +15868.0,reorder item,2020-01-24 08:59:46.000Z, ,"['885813']", , , ,0.495,129.0 +15869.0,confirm order,2020-01-24 09:26:48.000Z, , ,"['991445']", , ,2.486,1063.95 +15870.0,place order,2020-01-24 09:32:37.000Z, ,"['885938','885940','885939','885941']","['991451']", , ,0.84,2341.99 +15871.0,confirm order,2020-01-24 09:35:44.000Z, , ,"['991451']", , ,0.84,2341.99 +15872.0,confirm order,2020-01-24 09:36:59.000Z, , ,"['991448']", , ,3.1060000000000003,2416.98 +15873.0,pick item,2020-01-24 09:40:45.000Z, ,"['885572']", , , ,0.483,1099.0 +15874.0,create package,2020-01-24 09:40:45.000Z, ,"['885857','885859','885855','885778','885828','885780','885858']", ,"['660935']", ,3.646,6255.98 +15875.0,reorder item,2020-01-24 09:41:27.000Z, ,"['885871']", , , ,0.495,129.0 +15876.0,pick item,2020-01-24 09:41:34.000Z, ,"['885925']", , , ,0.188,1149.0 +15877.0,pay order,2020-01-24 09:57:08.000Z, , ,"['991433']", , ,1.74,2823.99 +15878.0,item out of stock,2020-01-24 09:59:09.000Z, ,"['885898']", , , ,0.88,89.99 +15879.0,send package,2020-01-24 10:07:50.000Z, , , ,"['660930']", ,6.313,5716.94 +15880.0,pick item,2020-01-24 10:08:18.000Z, ,"['885931']", , , ,0.98,129.99 +15881.0,reorder item,2020-01-24 10:18:42.000Z, ,"['885741']", , , ,0.88,89.99 +15882.0,pick item,2020-01-24 10:26:13.000Z, ,"['885888']", , , ,0.483,79.99 +15883.0,reorder item,2020-01-24 10:30:22.000Z, ,"['885887']", , , ,0.495,129.0 +15884.0,package delivered,2020-01-24 10:41:24.000Z, , , ,"['660932']", ,6.771,4327.95 +15885.0,item out of stock,2020-01-24 10:42:52.000Z, ,"['885895']", , , ,0.38,29.99 +15886.0,pay order,2020-01-24 10:48:22.000Z, , ,"['991372']", , ,2.93,2744.98 +15887.0,pick item,2020-01-24 11:00:40.000Z, ,"['885938']", , , ,0.188,1149.0 +15888.0,pay order,2020-01-24 11:09:09.000Z, , ,"['991340']", , ,1.643,679.98 +15889.0,failed delivery,2020-01-24 11:12:52.000Z, , , ,"['660930']", ,6.313,5716.94 +15890.0,pick item,2020-01-24 11:14:53.000Z, ,"['885941']", , , ,0.28,449.0 +15891.0,pick item,2020-01-24 11:23:58.000Z, ,"['885683']", , , ,0.166,799.0 +15892.0,place order,2020-01-24 11:25:01.000Z, ,"['885945','885944','885942','885943']","['991452']", , ,1.188,2528.0 +15893.0,send package,2020-01-24 11:32:33.000Z, , , ,"['660933']", ,0.963,624.98 +15894.0,pick item,2020-01-24 11:34:37.000Z, ,"['885865']", , , ,0.2,39.99 +15895.0,create package,2020-01-24 11:34:37.000Z, ,"['885873','885761','885872','885765','884937','885811','885808']", ,"['660936']", ,6.722,3638.95 +15896.0,reorder item,2020-01-24 11:44:45.000Z, ,"['885898']", , , ,0.88,89.99 +15897.0,reorder item,2020-01-24 11:50:37.000Z, ,"['885804']", , , ,0.98,129.99 +15898.0,send package,2020-01-24 11:59:40.000Z, , , ,"['660935']", ,3.646,6255.98 +15899.0,pick item,2020-01-24 12:03:01.000Z, ,"['885928']", , , ,0.78,99.99 +15900.0,confirm order,2020-01-24 12:03:50.000Z, , ,"['991438']", , ,3.255,483.98 +15901.0,reorder item,2020-01-24 12:25:41.000Z, ,"['885862']", , , ,0.28,449.0 +15902.0,pick item,2020-01-24 12:30:11.000Z, ,"['885892']", , , ,1.25,2200.0 +15903.0,reorder item,2020-01-24 12:39:24.000Z, ,"['885832']", , , ,0.28,449.0 +15904.0,pick item,2020-01-24 13:01:12.000Z, ,"['885935']", , , ,0.2,39.99 +15905.0,place order,2020-01-24 13:09:50.000Z, ,"['885947','885948','885946','885949']","['991453']", , ,3.4530000000000003,963.97 +15906.0,package delivered,2020-01-24 13:10:48.000Z, , , ,"['660933']", ,0.963,624.98 +15907.0,confirm order,2020-01-24 13:17:17.000Z, , ,"['991453']", , ,3.4530000000000003,963.97 +15908.0,pick item,2020-01-24 13:23:37.000Z, ,"['885783']", , , ,1.28,149.99 +15909.0,pick item,2020-01-24 13:26:15.000Z, ,"['885323']", , , ,0.483,495.0 +15910.0,confirm order,2020-01-24 13:32:46.000Z, , ,"['991446']", , ,4.072,3712.97 +15911.0,pick item,2020-01-24 13:38:41.000Z, ,"['885921']", , , ,0.28,449.0 +15912.0,reorder item,2020-01-24 13:43:41.000Z, ,"['885819']", , , ,0.172,699.0 +15913.0,pick item,2020-01-24 13:44:46.000Z, ,"['885917']", , , ,0.98,129.99 +15914.0,create package,2020-01-24 13:44:46.000Z, ,"['885447','885891','885775','885892','885889','885888']", ,"['660937']", ,3.681,3668.96 +15915.0,reorder item,2020-01-24 13:46:42.000Z, ,"['885818']", , , ,0.188,1149.0 +15916.0,pay order,2020-01-24 13:52:38.000Z, , ,"['991445']", , ,2.486,1063.95 +15917.0,pick item,2020-01-24 13:58:49.000Z, ,"['885807']", , , ,0.28,89.99 +15918.0,pick item,2020-01-24 14:00:19.000Z, ,"['885526']", , , ,1.37,2500.0 +15919.0,pick item,2020-01-24 14:00:52.000Z, ,"['885235']", , , ,1.48,199.99 +15920.0,pick item,2020-01-24 14:10:55.000Z, ,"['885893']", , , ,1.28,149.99 +15921.0,pay order,2020-01-24 14:16:22.000Z, , ,"['991423']", , ,5.837999999999999,6802.96 +15922.0,pick item,2020-01-24 14:23:09.000Z, ,"['885559']", , , ,0.21,529.0 +15923.0,pick item,2020-01-24 14:31:37.000Z, ,"['885901']", , , ,0.38,29.99 +15924.0,create package,2020-01-24 14:31:37.000Z, ,"['885752','885559']", ,"['660938']", ,1.19,658.99 +15925.0,place order,2020-01-24 14:39:27.000Z, ,"['885951','885950']","['991454']", , ,1.865,2634.0 +15926.0,pick item,2020-01-24 14:45:12.000Z, ,"['885580']", , , ,1.28,149.99 +15927.0,pick item,2020-01-24 14:45:29.000Z, ,"['885907']", , , ,0.78,99.99 +15928.0,create package,2020-01-24 14:45:29.000Z, ,"['885860','885861','885896','885863','885899','885683']", ,"['660939']", ,2.923,5052.0 +15929.0,pick item,2020-01-24 14:51:46.000Z, ,"['885942']", , , ,0.44,476.0 +15930.0,pick item,2020-01-24 14:59:20.000Z, ,"['885886']", , , ,0.495,129.0 +15931.0,send package,2020-01-24 15:10:43.000Z, , , ,"['660936']", ,6.722,3638.95 +15932.0,reorder item,2020-01-24 15:16:16.000Z, ,"['885769']", , , ,0.78,99.99 +15933.0,pick item,2020-01-24 15:43:11.000Z, ,"['885946']", , , ,0.483,79.99 +15934.0,pick item,2020-01-24 16:05:57.000Z, ,"['885744']", , , ,0.28,89.99 +15935.0,package delivered,2020-01-24 16:25:09.000Z, , , ,"['660930']", ,6.313,5716.94 +15936.0,send package,2020-01-24 16:28:33.000Z, , , ,"['660938']", ,1.19,658.99 +15937.0,pay order,2020-01-24 16:35:55.000Z, , ,"['991406']", , ,1.26,124.98 +15938.0,place order,2020-01-24 16:38:41.000Z, ,"['885952','885955','885954','885958','885956','885957','885953']","['991455']", , ,3.468,5640.98 +15939.0,pay order,2020-01-24 17:01:52.000Z, , ,"['991404']", , ,4.646,7664.97 +15940.0,package delivered,2020-01-24 17:27:48.000Z, , , ,"['660936']", ,6.722,3638.95 +15941.0,pick item,2020-01-24 17:41:12.000Z, ,"['885936']", , , ,0.166,799.0 +15942.0,pick item,2020-01-24 18:07:56.000Z, ,"['885943']", , , ,0.28,449.0 +15943.0,create package,2020-01-24 18:07:56.000Z, ,"['885834','885839','885901','885833','885384','885835','885904','885866','885838','885865','885323','885903','885840','885864']", ,"['660940']", ,6.327999999999999,6452.93 +15944.0,place order,2020-01-24 18:37:10.000Z, ,"['885961','885959','885962','885960']","['991456']", , ,1.4780000000000002,2531.99 +15945.0,item out of stock,2020-01-24 19:05:09.000Z, ,"['885930']", , , ,0.483,495.0 +15946.0,package delivered,2020-01-24 20:41:58.000Z, , , ,"['660938']", ,1.19,658.99 +15947.0,pick item,2020-01-24 20:53:15.000Z, ,"['885841']", , , ,0.28,449.0 +15948.0,item out of stock,2020-01-24 21:12:26.000Z, ,"['885933']", , , ,0.483,495.0 +15949.0,send package,2020-01-24 21:13:32.000Z, , , ,"['660934']", ,4.603,3388.96 +15950.0,place order,2020-01-24 21:53:55.000Z, ,"['885965','885963','885964']","['991457']", , ,0.586,1862.0 +15951.0,create package,2020-01-24 23:00:00.000Z, ,"['885852','885851','885526']", ,"['660941']", ,2.9,4789.99 +15952.0,place order,2020-01-25 19:52:53.000Z, ,"['885966','885967']","['991458']", , ,1.76,234.98 +15953.0,place order,2020-01-26 20:33:34.000Z, ,"['885971','885969','885970','885968']","['991459']", , ,4.16,4584.98 +15954.0,pick item,2020-01-27 07:51:00.000Z, ,"['885954']", , , ,0.38,29.99 +15955.0,pick item,2020-01-27 08:02:26.000Z, ,"['885912']", , , ,0.483,79.99 +15956.0,item out of stock,2020-01-27 08:13:44.000Z, ,"['885948']", , , ,1.28,149.99 +15957.0,send package,2020-01-27 08:24:54.000Z, , , ,"['660941']", ,2.9,4789.99 +15958.0,place order,2020-01-27 08:27:18.000Z, ,"['885977','885974','885976','885975','885973','885972']","['991460']", , ,3.3,863.95 +15959.0,payment reminder,2020-01-27 08:39:40.000Z, , ,"['991230']", , ,2.426,1103.98 +15960.0,pick item,2020-01-27 08:42:22.000Z, ,"['885944']", , , ,0.188,1149.0 +15961.0,send package,2020-01-27 08:47:26.000Z, , , ,"['660939']", ,2.923,5052.0 +15962.0,confirm order,2020-01-27 08:48:36.000Z, , ,"['991458']", , ,1.76,234.98 +15963.0,pick item,2020-01-27 08:50:56.000Z, ,"['885900']", , , ,0.98,129.99 +15964.0,confirm order,2020-01-27 09:01:09.000Z, , ,"['991457']", , ,0.586,1862.0 +15965.0,reorder item,2020-01-27 09:04:28.000Z, ,"['885842']", , , ,0.172,699.0 +15966.0,pick item,2020-01-27 09:14:11.000Z, ,"['885885']", , , ,0.38,29.99 +15967.0,payment reminder,2020-01-27 09:16:15.000Z, , ,"['991117']", , ,2.272,1369.98 +15968.0,item out of stock,2020-01-27 09:21:28.000Z, ,"['885918']", , , ,0.495,129.0 +15969.0,pick item,2020-01-27 09:30:44.000Z, ,"['885964']", , , ,0.21,529.0 +15970.0,payment reminder,2020-01-27 09:37:58.000Z, , ,"['991339']", , ,2.498,2457.98 +15971.0,item out of stock,2020-01-27 09:43:38.000Z, ,"['885965']", , , ,0.166,799.0 +15972.0,item out of stock,2020-01-27 09:49:47.000Z, ,"['885924']", , , ,0.78,99.99 +15973.0,send package,2020-01-27 09:51:53.000Z, , , ,"['660940']", ,6.327999999999999,6452.93 +15974.0,pick item,2020-01-27 10:06:02.000Z, ,"['885945']", , , ,0.28,449.0 +15975.0,pay order,2020-01-27 10:10:20.000Z, , ,"['991447']", , ,5.55,1462.93 +15976.0,pick item,2020-01-27 10:13:48.000Z, ,"['885524']", , , ,1.48,199.99 +15977.0,place order,2020-01-27 10:14:23.000Z, ,"['885979','885978','885980']","['991461']", , ,2.048,1373.98 +15978.0,pay order,2020-01-27 10:14:58.000Z, , ,"['991425']", , ,2.603,2637.98 +15979.0,payment reminder,2020-01-27 10:16:14.000Z, , ,"['991343']", , ,3.332,3717.97 +15980.0,pick item,2020-01-27 10:27:35.000Z, ,"['885809']", , , ,0.188,1149.0 +15981.0,pick item,2020-01-27 10:31:47.000Z, ,"['885854']", , , ,0.78,99.99 +15982.0,item out of stock,2020-01-27 10:33:24.000Z, ,"['885957']", , , ,0.188,1149.0 +15983.0,pick item,2020-01-27 10:40:54.000Z, ,"['885968']", , , ,1.25,2200.0 +15984.0,pick item,2020-01-27 10:44:55.000Z, ,"['885615']", , , ,0.495,129.0 +15985.0,failed delivery,2020-01-27 10:52:31.000Z, , , ,"['660935']", ,3.646,6255.98 +15986.0,pay order,2020-01-27 10:56:08.000Z, , ,"['991421']", , ,3.44,474.96 +15987.0,pick item,2020-01-27 11:04:38.000Z, ,"['885959']", , , ,0.166,799.0 +15988.0,pay order,2020-01-27 11:13:36.000Z, , ,"['991412']", , ,2.04,743.98 +15989.0,pick item,2020-01-27 11:32:11.000Z, ,"['885937']", , , ,1.48,199.99 +15990.0,package delivered,2020-01-27 11:36:17.000Z, , , ,"['660940']", ,6.327999999999999,6452.93 +15991.0,item out of stock,2020-01-27 11:36:33.000Z, ,"['885967']", , , ,0.98,129.99 +15992.0,pick item,2020-01-27 11:45:55.000Z, ,"['885950']", , , ,0.495,129.0 +15993.0,place order,2020-01-27 11:48:34.000Z, ,"['885985','885981','885984','885983','885982']","['991462']", , ,2.313,1674.98 +15994.0,package delivered,2020-01-27 11:57:23.000Z, , , ,"['660939']", ,2.923,5052.0 +15995.0,pick item,2020-01-27 11:58:19.000Z, ,"['885916']", , , ,0.172,699.0 +15996.0,create package,2020-01-27 11:58:19.000Z, ,"['885870','885725','885909','885296','885893','885907','885964']", ,"['660942']", ,4.413,4785.98 +15997.0,item out of stock,2020-01-27 11:59:01.000Z, ,"['885867']", , , ,0.483,495.0 +15998.0,package delivered,2020-01-27 12:51:51.000Z, , , ,"['660934']", ,4.603,3388.96 +15999.0,pick item,2020-01-27 12:54:21.000Z, ,"['885951']", , , ,1.37,2500.0 +16000.0,reorder item,2020-01-27 13:02:55.000Z, ,"['885965']", , , ,0.166,799.0 +16001.0,reorder item,2020-01-27 13:08:41.000Z, ,"['885895']", , , ,0.38,29.99 +16002.0,item out of stock,2020-01-27 13:20:43.000Z, ,"['885911']", , , ,1.25,2200.0 +16003.0,reorder item,2020-01-27 13:27:19.000Z, ,"['885806']", , , ,0.21,529.0 +16004.0,item out of stock,2020-01-27 13:36:06.000Z, ,"['885868']", , , ,0.483,1099.0 +16005.0,item out of stock,2020-01-27 13:39:53.000Z, ,"['885922']", , , ,0.88,89.99 +16006.0,item out of stock,2020-01-27 13:41:36.000Z, ,"['885897']", , , ,0.495,129.0 +16007.0,pick item,2020-01-27 13:44:50.000Z, ,"['885920']", , , ,0.2,39.99 +16008.0,reorder item,2020-01-27 13:50:16.000Z, ,"['885867']", , , ,0.483,495.0 +16009.0,pick item,2020-01-27 13:51:28.000Z, ,"['885961']", , , ,0.98,129.99 +16010.0,place order,2020-01-27 13:56:55.000Z, ,"['885986','885987']","['991463']", , ,0.695,173.99 +16011.0,pick item,2020-01-27 14:02:47.000Z, ,"['885955']", , , ,0.38,29.99 +16012.0,pick item,2020-01-27 14:06:25.000Z, ,"['885915']", , , ,0.38,29.99 +16013.0,pick item,2020-01-27 14:11:39.000Z, ,"['885709']", , , ,0.28,449.0 +16014.0,pick item,2020-01-27 14:19:03.000Z, ,"['885836']", , , ,0.28,449.0 +16015.0,create package,2020-01-27 14:19:03.000Z, ,"['885513']", ,"['660943']", ,0.88,89.99 +16016.0,confirm order,2020-01-27 14:24:47.000Z, , ,"['991462']", , ,2.313,1674.98 +16017.0,reorder item,2020-01-27 14:32:55.000Z, ,"['885957']", , , ,0.188,1149.0 +16018.0,confirm order,2020-01-27 14:33:30.000Z, , ,"['991460']", , ,3.3,863.95 +16019.0,pick item,2020-01-27 14:35:40.000Z, ,"['885905']", , , ,0.2,39.99 +16020.0,create package,2020-01-27 14:35:40.000Z, ,"['885915','885885','885886','885883','885916','885928','885931','885580','885884','885920','885919','885912','885917']", ,"['660944']", ,8.72,4593.91 +16021.0,pick item,2020-01-27 14:42:10.000Z, ,"['885887']", , , ,0.495,129.0 +16022.0,item out of stock,2020-01-27 14:45:33.000Z, ,"['885756']", , , ,0.483,1099.0 +16023.0,reorder item,2020-01-27 14:51:39.000Z, ,"['885948']", , , ,1.28,149.99 +16024.0,pay order,2020-01-27 14:55:31.000Z, , ,"['991417']", , ,3.712,1153.97 +16025.0,item out of stock,2020-01-27 15:14:19.000Z, ,"['885969']", , , ,1.28,149.99 +16026.0,confirm order,2020-01-27 15:29:11.000Z, , ,"['991450']", , ,3.092,2123.97 +16027.0,item out of stock,2020-01-27 15:38:54.000Z, ,"['885982']", , , ,0.21,529.0 +16028.0,pick item,2020-01-27 15:44:39.000Z, ,"['885856']", , , ,1.25,2200.0 +16029.0,item out of stock,2020-01-27 15:55:17.000Z, ,"['885869']", , , ,1.48,199.99 +16030.0,confirm order,2020-01-27 15:55:34.000Z, , ,"['991459']", , ,4.16,4584.98 +16031.0,reorder item,2020-01-27 15:55:44.000Z, ,"['885924']", , , ,0.78,99.99 +16032.0,pick item,2020-01-27 15:57:58.000Z, ,"['885947']", , , ,0.21,529.0 +16033.0,pick item,2020-01-27 15:59:45.000Z, ,"['885871']", , , ,0.495,129.0 +16034.0,pick item,2020-01-27 16:05:09.000Z, ,"['885676']", , , ,0.38,29.99 +16035.0,send package,2020-01-27 16:09:46.000Z, , , ,"['660937']", ,3.681,3668.96 +16036.0,place order,2020-01-27 16:13:38.000Z, ,"['885988']","['991464']", , ,1.28,154.99 +16037.0,pick item,2020-01-27 16:21:52.000Z, ,"['885200']", , , ,0.78,99.99 +16038.0,pick item,2020-01-27 16:23:27.000Z, ,"['885960']", , , ,0.166,799.0 +16039.0,confirm order,2020-01-27 16:34:35.000Z, , ,"['991452']", , ,1.188,2528.0 +16040.0,reorder item,2020-01-27 16:36:41.000Z, ,"['885910']", , , ,0.172,699.0 +16041.0,reorder item,2020-01-27 16:39:03.000Z, ,"['885933']", , , ,0.483,495.0 +16042.0,pick item,2020-01-27 16:43:18.000Z, ,"['885880']", , , ,0.28,449.0 +16043.0,item out of stock,2020-01-27 17:22:43.000Z, ,"['885939']", , , ,0.2,39.99 +16044.0,payment reminder,2020-01-27 17:25:14.000Z, , ,"['991346']", , ,2.747,2397.98 +16045.0,place order,2020-01-27 17:47:03.000Z, ,"['885989','885993','885992','885990','885991']","['991465']", , ,4.456,3383.97 +16046.0,reorder item,2020-01-27 17:52:51.000Z, ,"['885853']", , , ,0.21,529.0 +16047.0,reorder item,2020-01-27 18:12:45.000Z, ,"['885869']", , , ,1.48,199.99 +16048.0,reorder item,2020-01-27 18:46:54.000Z, ,"['885969']", , , ,1.28,149.99 +16049.0,send package,2020-01-27 18:55:43.000Z, , , ,"['660943']", ,0.88,89.99 +16050.0,pick item,2020-01-27 19:10:44.000Z, ,"['885987']", , , ,0.495,129.0 +16051.0,pick item,2020-01-27 19:45:27.000Z, ,"['885971']", , , ,1.25,2200.0 +16052.0,pick item,2020-01-27 19:45:51.000Z, ,"['885819']", , , ,0.172,699.0 +16053.0,place order,2020-01-27 21:00:44.000Z, ,"['885994']","['991466']", , ,0.483,84.99 +16054.0,item out of stock,2020-01-27 21:22:30.000Z, ,"['885976']", , , ,0.28,89.99 +16055.0,place order,2020-01-28 06:22:18.000Z, ,"['885995','885997','885996']","['991467']", , ,1.346,1213.98 +16056.0,package delivered,2020-01-28 07:34:55.000Z, , , ,"['660941']", ,2.9,4789.99 +16057.0,pick item,2020-01-28 07:42:30.000Z, ,"['885995']", , , ,0.38,29.99 +16058.0,package delivered,2020-01-28 07:52:44.000Z, , , ,"['660935']", ,3.646,6255.98 +16059.0,pick item,2020-01-28 08:33:50.000Z, ,"['885806']", , , ,0.21,529.0 +16060.0,create package,2020-01-28 08:33:50.000Z, ,"['885848']", ,"['660945']", ,0.98,129.99 +16061.0,pay order,2020-01-28 08:36:22.000Z, , ,"['991402']", , ,4.046,3178.96 +16062.0,package delivered,2020-01-28 08:38:17.000Z, , , ,"['660937']", ,3.681,3668.96 +16063.0,confirm order,2020-01-28 08:42:03.000Z, , ,"['991464']", , ,1.28,154.99 +16064.0,reorder item,2020-01-28 08:42:57.000Z, ,"['885911']", , , ,1.25,2200.0 +16065.0,pick item,2020-01-28 08:49:59.000Z, ,"['885763']", , , ,0.38,29.99 +16066.0,create package,2020-01-28 08:49:59.000Z, ,"['885824','885825']", ,"['660946']", ,0.56,538.99 +16067.0,send package,2020-01-28 08:51:35.000Z, , , ,"['660942']", ,4.413,4785.98 +16068.0,confirm order,2020-01-28 08:54:24.000Z, , ,"['991465']", , ,4.456,3383.97 +16069.0,pay order,2020-01-28 09:01:58.000Z, , ,"['991436']", , ,1.463,224.97 +16070.0,place order,2020-01-28 09:08:19.000Z, ,"['886001','886000','885999','885998']","['991468']", , ,1.027,2541.99 +16071.0,payment reminder,2020-01-28 09:08:52.000Z, , ,"['991352']", , ,1.67,793.97 +16072.0,pick item,2020-01-28 09:10:39.000Z, ,"['885729']", , , ,0.166,799.0 +16073.0,pay order,2020-01-28 09:34:01.000Z, , ,"['991435']", , ,2.317,3782.0 +16074.0,reorder item,2020-01-28 09:36:36.000Z, ,"['885847']", , , ,0.495,129.0 +16075.0,pick item,2020-01-28 10:01:49.000Z, ,"['885626']", , , ,0.483,1099.0 +16076.0,create package,2020-01-28 10:01:49.000Z, ,"['885700']", ,"['660947']", ,0.98,129.99 +16077.0,pick item,2020-01-28 10:05:38.000Z, ,"['885415']", , , ,0.483,1099.0 +16078.0,create package,2020-01-28 10:05:38.000Z, ,"['885995','885938','885935','885955','885880','885936','885878','885709','885954','885937','885941']", ,"['660948']", ,4.186,4323.95 +16079.0,reorder item,2020-01-28 10:05:50.000Z, ,"['885876']", , , ,0.44,476.0 +16080.0,pick item,2020-01-28 10:06:23.000Z, ,"['885894']", , , ,0.166,799.0 +16081.0,confirm order,2020-01-28 10:08:52.000Z, , ,"['991461']", , ,2.048,1373.98 +16082.0,confirm order,2020-01-28 10:11:34.000Z, , ,"['991468']", , ,1.027,2541.99 +16083.0,pick item,2020-01-28 10:17:13.000Z, ,"['885109']", , , ,0.28,449.0 +16084.0,place order,2020-01-28 10:36:26.000Z, ,"['886002','886003']","['991469']", , ,1.09,623.99 +16085.0,pick item,2020-01-28 10:36:26.000Z, ,"['885986']", , , ,0.2,39.99 +16086.0,confirm order,2020-01-28 10:48:29.000Z, , ,"['991454']", , ,1.865,2634.0 +16087.0,item out of stock,2020-01-28 10:48:46.000Z, ,"['885973']", , , ,0.88,89.99 +16088.0,pick item,2020-01-28 10:52:09.000Z, ,"['885991']", , , ,0.98,129.99 +16089.0,pick item,2020-01-28 10:54:53.000Z, ,"['886001']", , , ,0.172,699.0 +16090.0,pick item,2020-01-28 10:59:05.000Z, ,"['885913']", , , ,1.28,149.99 +16091.0,pick item,2020-01-28 11:03:03.000Z, ,"['885927']", , , ,0.166,799.0 +16092.0,reorder item,2020-01-28 11:13:31.000Z, ,"['885897']", , , ,0.495,129.0 +16093.0,pay order,2020-01-28 11:16:50.000Z, , ,"['991339']", , ,2.498,2457.98 +16094.0,item out of stock,2020-01-28 11:17:27.000Z, ,"['885972']", , , ,0.78,99.99 +16095.0,item out of stock,2020-01-28 11:38:33.000Z, ,"['885997']", , , ,0.483,79.99 +16096.0,send package,2020-01-28 11:48:00.000Z, , , ,"['660946']", ,0.56,538.99 +16097.0,payment reminder,2020-01-28 12:07:52.000Z, , ,"['991223']", , ,3.523,4392.97 +16098.0,pick item,2020-01-28 12:15:40.000Z, ,"['885804']", , , ,0.98,129.99 +16099.0,item out of stock,2020-01-28 12:18:53.000Z, ,"['885940']", , , ,0.172,699.0 +16100.0,place order,2020-01-28 12:32:39.000Z, ,"['886006','886005','886004']","['991470']", , ,1.063,569.98 +16101.0,pay order,2020-01-28 12:36:06.000Z, , ,"['991438']", , ,3.255,483.98 +16102.0,item out of stock,2020-01-28 12:45:26.000Z, ,"['885981']", , , ,0.98,129.99 +16103.0,item out of stock,2020-01-28 12:55:50.000Z, ,"['885934']", , , ,0.483,495.0 +16104.0,item out of stock,2020-01-28 13:00:50.000Z, ,"['885990']", , , ,0.78,99.99 +16105.0,pay order,2020-01-28 13:17:54.000Z, , ,"['991462']", , ,2.313,1674.98 +16106.0,payment reminder,2020-01-28 13:35:53.000Z, , ,"['991357']", , ,0.188,1154.0 +16107.0,payment reminder,2020-01-28 13:46:26.000Z, , ,"['991235']", , ,1.855,293.98 +16108.0,send package,2020-01-28 13:46:51.000Z, , , ,"['660948']", ,4.186,4323.95 +16109.0,confirm order,2020-01-28 13:53:41.000Z, , ,"['991467']", , ,1.346,1213.98 +16110.0,pay order,2020-01-28 13:59:13.000Z, , ,"['991235']", , ,1.855,293.98 +16111.0,item out of stock,2020-01-28 14:12:58.000Z, ,"['885974']", , , ,0.88,89.99 +16112.0,item out of stock,2020-01-28 14:15:51.000Z, ,"['885980']", , , ,0.188,1149.0 +16113.0,place order,2020-01-28 14:25:05.000Z, ,"['886009','886007','886008']","['991471']", , ,1.15,912.99 +16114.0,confirm order,2020-01-28 14:32:10.000Z, , ,"['991466']", , ,0.483,84.99 +16115.0,package delivered,2020-01-28 14:32:37.000Z, , , ,"['660946']", ,0.56,538.99 +16116.0,confirm order,2020-01-28 14:37:44.000Z, , ,"['991469']", , ,1.09,623.99 +16117.0,confirm order,2020-01-28 14:43:28.000Z, , ,"['991455']", , ,3.468,5640.98 +16118.0,failed delivery,2020-01-28 14:51:14.000Z, , , ,"['660942']", ,4.413,4785.98 +16119.0,pick item,2020-01-28 14:52:37.000Z, ,"['885908']", , , ,1.28,149.99 +16120.0,reorder item,2020-01-28 15:00:10.000Z, ,"['885967']", , , ,0.98,129.99 +16121.0,pay order,2020-01-28 15:01:51.000Z, , ,"['991117']", , ,2.272,1369.98 +16122.0,reorder item,2020-01-28 15:07:22.000Z, ,"['885973']", , , ,0.88,89.99 +16123.0,send package,2020-01-28 15:15:04.000Z, , , ,"['660944']", ,8.72,4593.91 +16124.0,pick item,2020-01-28 15:23:40.000Z, ,"['885932']", , , ,0.28,89.99 +16125.0,pick item,2020-01-28 15:31:40.000Z, ,"['885890']", , , ,0.44,476.0 +16126.0,create package,2020-01-28 15:31:40.000Z, ,"['885945','885942','885968','885944','885971','885951','885943','885817','885819','885950']", ,"['660949']", ,7.205,10450.99 +16127.0,pick item,2020-01-28 15:34:04.000Z, ,"['885988']", , , ,1.28,149.99 +16128.0,pick item,2020-01-28 15:50:37.000Z, ,"['885929']", , , ,0.38,29.99 +16129.0,pick item,2020-01-28 15:50:54.000Z, ,"['886005']", , , ,0.2,39.99 +16130.0,pick item,2020-01-28 15:58:44.000Z, ,"['885745']", , , ,0.2,39.99 +16131.0,payment reminder,2020-01-28 16:01:28.000Z, , ,"['991349']", , ,1.946,294.97 +16132.0,pick item,2020-01-28 16:03:20.000Z, ,"['886002']", , , ,0.21,529.0 +16133.0,place order,2020-01-28 16:09:58.000Z, ,"['886010','886013','886011','886012']","['991472']", , ,1.093,1712.98 +16134.0,pay order,2020-01-28 16:17:41.000Z, , ,"['991461']", , ,2.048,1373.98 +16135.0,reorder item,2020-01-28 16:25:14.000Z, ,"['885981']", , , ,0.98,129.99 +16136.0,send package,2020-01-28 16:27:12.000Z, , , ,"['660947']", ,0.98,129.99 +16137.0,failed delivery,2020-01-28 16:44:28.000Z, , , ,"['660947']", ,0.98,129.99 +16138.0,pick item,2020-01-28 16:56:51.000Z, ,"['886011']", , , ,0.2,39.99 +16139.0,reorder item,2020-01-28 17:02:29.000Z, ,"['885939']", , , ,0.2,39.99 +16140.0,package delivered,2020-01-28 17:14:19.000Z, , , ,"['660942']", ,4.413,4785.98 +16141.0,place order,2020-01-28 17:39:43.000Z, ,"['886014','886015','886016']","['991473']", , ,2.258,1382.99 +16142.0,pay order,2020-01-28 18:30:09.000Z, , ,"['991439']", , ,4.004,2667.97 +16143.0,failed delivery,2020-01-28 18:35:38.000Z, , , ,"['660943']", ,0.88,89.99 +16144.0,pick item,2020-01-28 18:37:27.000Z, ,"['885906']", , , ,0.38,29.99 +16145.0,package delivered,2020-01-28 19:45:48.000Z, , , ,"['660948']", ,4.186,4323.95 +16146.0,place order,2020-01-28 20:38:44.000Z, ,"['886017','886019','886018']","['991474']", , ,1.862,1432.99 +16147.0,pick item,2020-01-28 20:56:31.000Z, ,"['885875']", , , ,0.172,699.0 +16148.0,place order,2020-01-29 05:10:18.000Z, ,"['886021','886022','886027','886020','886026','886024','886023','886025']","['991475']", , ,4.875,2920.96 +16149.0,reorder item,2020-01-29 07:25:24.000Z, ,"['885940']", , , ,0.172,699.0 +16150.0,reorder item,2020-01-29 07:38:54.000Z, ,"['885868']", , , ,0.483,1099.0 +16151.0,confirm order,2020-01-29 07:48:02.000Z, , ,"['991456']", , ,1.4780000000000002,2531.99 +16152.0,pick item,2020-01-29 08:08:40.000Z, ,"['885953']", , , ,0.172,699.0 +16153.0,pick item,2020-01-29 08:11:19.000Z, ,"['885998']", , , ,0.483,1099.0 +16154.0,create package,2020-01-29 08:11:19.000Z, ,"['885572','885988','885841']", ,"['660950']", ,2.043,1697.99 +16155.0,item out of stock,2020-01-29 08:11:43.000Z, ,"['886018']", , , ,1.48,199.99 +16156.0,reorder item,2020-01-29 08:16:16.000Z, ,"['885846']", , , ,0.78,99.99 +16157.0,pick item,2020-01-29 08:33:20.000Z, ,"['885939']", , , ,0.2,39.99 +16158.0,pick item,2020-01-29 08:34:46.000Z, ,"['885535']", , , ,0.2,39.99 +16159.0,payment reminder,2020-01-29 08:41:23.000Z, , ,"['991361']", , ,8.603,11483.97 +16160.0,reorder item,2020-01-29 08:41:55.000Z, ,"['885980']", , , ,0.188,1149.0 +16161.0,place order,2020-01-29 08:49:07.000Z, ,"['886028','886029']","['991476']", , ,1.422,2904.0 +16162.0,pay order,2020-01-29 08:52:19.000Z, , ,"['991376']", , ,5.348,5157.97 +16163.0,reorder item,2020-01-29 08:53:18.000Z, ,"['885972']", , , ,0.78,99.99 +16164.0,reorder item,2020-01-29 08:58:37.000Z, ,"['885922']", , , ,0.88,89.99 +16165.0,send package,2020-01-29 09:04:42.000Z, , , ,"['660949']", ,7.205,10450.99 +16166.0,pay order,2020-01-29 09:06:43.000Z, , ,"['991419']", , ,3.313,5313.99 +16167.0,reorder item,2020-01-29 09:08:31.000Z, ,"['885997']", , , ,0.483,79.99 +16168.0,confirm order,2020-01-29 09:13:43.000Z, , ,"['991473']", , ,2.258,1382.99 +16169.0,pick item,2020-01-29 09:16:56.000Z, ,"['886003']", , , ,0.88,89.99 +16170.0,create package,2020-01-29 09:16:56.000Z, ,"['885783','885925','885921']", ,"['660951']", ,1.7480000000000002,1747.99 +16171.0,pick item,2020-01-29 09:19:48.000Z, ,"['885720']", , , ,0.483,495.0 +16172.0,pick item,2020-01-29 09:36:56.000Z, ,"['885984']", , , ,0.44,476.0 +16173.0,package delivered,2020-01-29 09:43:22.000Z, , , ,"['660943']", ,0.88,89.99 +16174.0,send package,2020-01-29 09:57:38.000Z, , , ,"['660945']", ,0.98,129.99 +16175.0,pick item,2020-01-29 09:58:48.000Z, ,"['885989']", , , ,1.25,2200.0 +16176.0,create package,2020-01-29 09:58:48.000Z, ,"['886003','885986','885763','886002','885871','885806','885804','885200','885807','885809','885987']", ,"['660952']", ,5.098,2944.94 +16177.0,pick item,2020-01-29 10:01:34.000Z, ,"['885975']", , , ,0.2,39.99 +16178.0,pick item,2020-01-29 10:10:50.000Z, ,"['886021']", , , ,0.2,39.99 +16179.0,pick item,2020-01-29 10:12:24.000Z, ,"['886016']", , , ,0.483,1099.0 +16180.0,confirm order,2020-01-29 10:23:28.000Z, , ,"['991463']", , ,0.695,173.99 +16181.0,item out of stock,2020-01-29 10:32:55.000Z, ,"['885822']", , , ,0.483,495.0 +16182.0,pay order,2020-01-29 10:34:02.000Z, , ,"['991463']", , ,0.695,173.99 +16183.0,confirm order,2020-01-29 10:51:56.000Z, , ,"['991470']", , ,1.063,569.98 +16184.0,item out of stock,2020-01-29 10:52:59.000Z, ,"['886007']", , , ,0.495,129.0 +16185.0,confirm order,2020-01-29 10:56:41.000Z, , ,"['991476']", , ,1.422,2904.0 +16186.0,place order,2020-01-29 10:58:02.000Z, ,"['886030','886031']","['991477']", , ,1.46,2734.0 +16187.0,reorder item,2020-01-29 11:00:25.000Z, ,"['885990']", , , ,0.78,99.99 +16188.0,pick item,2020-01-29 11:25:41.000Z, ,"['885979']", , , ,0.88,89.99 +16189.0,reorder item,2020-01-29 11:40:35.000Z, ,"['885974']", , , ,0.88,89.99 +16190.0,reorder item,2020-01-29 11:42:20.000Z, ,"['885934']", , , ,0.483,495.0 +16191.0,pick item,2020-01-29 12:12:01.000Z, ,"['886004']", , , ,0.38,29.99 +16192.0,pick item,2020-01-29 12:23:09.000Z, ,"['885758']", , , ,0.88,89.99 +16193.0,confirm order,2020-01-29 12:43:54.000Z, , ,"['991472']", , ,1.093,1712.98 +16194.0,package delivered,2020-01-29 13:02:59.000Z, , , ,"['660945']", ,0.98,129.99 +16195.0,item out of stock,2020-01-29 13:12:38.000Z, ,"['886013']", , , ,0.21,529.0 +16196.0,place order,2020-01-29 13:15:51.000Z, ,"['886033','886032']","['991478']", , ,2.16,244.98 +16197.0,reorder item,2020-01-29 13:16:13.000Z, ,"['886018']", , , ,1.48,199.99 +16198.0,confirm order,2020-01-29 13:28:11.000Z, , ,"['991471']", , ,1.15,912.99 +16199.0,pick item,2020-01-29 13:28:28.000Z, ,"['886022']", , , ,1.28,149.99 +16200.0,pick item,2020-01-29 13:38:13.000Z, ,"['885997']", , , ,0.483,79.99 +16201.0,payment reminder,2020-01-29 13:41:56.000Z, , ,"['991363']", , ,5.632999999999999,4631.96 +16202.0,pick item,2020-01-29 13:43:33.000Z, ,"['886017']", , , ,0.21,529.0 +16203.0,reorder item,2020-01-29 13:44:07.000Z, ,"['885976']", , , ,0.28,89.99 +16204.0,pay order,2020-01-29 13:49:16.000Z, , ,"['991434']", , ,4.538,6682.98 +16205.0,pick item,2020-01-29 13:54:57.000Z, ,"['886015']", , , ,0.495,129.0 +16206.0,pick item,2020-01-29 13:56:31.000Z, ,"['885500']", , , ,0.495,129.0 +16207.0,create package,2020-01-29 13:56:31.000Z, ,"['885235','885615','885960','885854','886004','886011','885856','885961','885535','885959','886005']", ,"['660953']", ,6.2970000000000015,4506.93 +16208.0,pick item,2020-01-29 13:58:39.000Z, ,"['886025']", , , ,0.188,1149.0 +16209.0,pick item,2020-01-29 14:07:42.000Z, ,"['885958']", , , ,0.495,129.0 +16210.0,pick item,2020-01-29 14:22:01.000Z, ,"['886018']", , , ,1.48,199.99 +16211.0,payment reminder,2020-01-29 14:24:05.000Z, , ,"['991360']", , ,3.248,6330.0 +16212.0,reorder item,2020-01-29 14:24:07.000Z, ,"['886007']", , , ,0.495,129.0 +16213.0,send package,2020-01-29 14:29:44.000Z, , , ,"['660950']", ,2.043,1697.99 +16214.0,pick item,2020-01-29 14:36:32.000Z, ,"['885940']", , , ,0.172,699.0 +16215.0,pick item,2020-01-29 14:43:31.000Z, ,"['886033']", , , ,0.88,89.99 +16216.0,send package,2020-01-29 14:46:11.000Z, , , ,"['660952']", ,5.098,2944.94 +16217.0,pick item,2020-01-29 14:46:55.000Z, ,"['885847']", , , ,0.495,129.0 +16218.0,place order,2020-01-29 14:51:29.000Z, ,"['886039','886041','886038','886040','886036','886034','886037','886035']","['991479']", , ,4.369,2831.95 +16219.0,package delivered,2020-01-29 15:12:30.000Z, , , ,"['660944']", ,8.72,4593.91 +16220.0,send package,2020-01-29 15:18:31.000Z, , , ,"['660951']", ,1.7480000000000002,1747.99 +16221.0,pick item,2020-01-29 15:29:59.000Z, ,"['886030']", , , ,1.25,2200.0 +16222.0,pick item,2020-01-29 15:32:24.000Z, ,"['885622']", , , ,0.495,129.0 +16223.0,package delivered,2020-01-29 15:46:15.000Z, , , ,"['660947']", ,0.98,129.99 +16224.0,pay order,2020-01-29 15:52:55.000Z, , ,"['991476']", , ,1.422,2904.0 +16225.0,pick item,2020-01-29 15:56:46.000Z, ,"['885741']", , , ,0.88,89.99 +16226.0,pick item,2020-01-29 16:00:55.000Z, ,"['885926']", , , ,0.495,129.0 +16227.0,pick item,2020-01-29 16:07:45.000Z, ,"['885966']", , , ,0.78,99.99 +16228.0,create package,2020-01-29 16:07:45.000Z, ,"['885979','886018','885989','886017','885745','886015','885991','885947','886016','885744','885946']", ,"['660954']", ,6.9510000000000005,5115.94 +16229.0,pick item,2020-01-29 16:22:47.000Z, ,"['886037']", , , ,0.78,99.99 +16230.0,pick item,2020-01-29 16:26:58.000Z, ,"['886040']", , , ,0.28,89.99 +16231.0,place order,2020-01-29 17:02:46.000Z, ,"['886047','886045','886049','886048','886044','886042','886043','886046']","['991480']", , ,4.682,3431.97 +16232.0,pay order,2020-01-29 17:24:39.000Z, , ,"['991429']", , ,2.04,633.98 +16233.0,pick item,2020-01-29 17:47:00.000Z, ,"['885972']", , , ,0.78,99.99 +16234.0,pick item,2020-01-29 18:07:39.000Z, ,"['885428']", , , ,0.28,89.99 +16235.0,pick item,2020-01-29 18:09:57.000Z, ,"['885970']", , , ,0.38,29.99 +16236.0,place order,2020-01-29 18:47:53.000Z, ,"['886051','886050','886052','886053','886054']","['991481']", , ,2.501,2237.98 +16237.0,pick item,2020-01-29 18:55:05.000Z, ,"['885233']", , , ,0.483,79.99 +16238.0,send package,2020-01-29 20:22:19.000Z, , , ,"['660954']", ,6.9510000000000005,5115.94 +16239.0,confirm order,2020-01-29 20:29:36.000Z, , ,"['991478']", , ,2.16,244.98 +16240.0,confirm order,2020-01-29 20:39:42.000Z, , ,"['991479']", , ,4.369,2831.95 +16241.0,reorder item,2020-01-29 21:19:02.000Z, ,"['885982']", , , ,0.21,529.0 +16242.0,place order,2020-01-29 22:15:20.000Z, ,"['886057','886056','886055']","['991482']", , ,1.87,713.98 +16243.0,create package,2020-01-29 23:00:00.000Z, ,"['885900','885836','885720','885905']", ,"['660955']", ,1.943,1113.98 +16244.0,pick item,2020-01-30 07:04:03.000Z, ,"['886042']", , , ,0.483,1099.0 +16245.0,failed delivery,2020-01-30 07:09:47.000Z, , , ,"['660949']", ,7.205,10450.99 +16246.0,pick item,2020-01-30 07:30:24.000Z, ,"['886032']", , , ,1.28,149.99 +16247.0,pick item,2020-01-30 07:55:53.000Z, ,"['886012']", , , ,0.2,39.99 +16248.0,confirm order,2020-01-30 08:08:07.000Z, , ,"['991477']", , ,1.46,2734.0 +16249.0,place order,2020-01-30 08:09:59.000Z, ,"['886058','886061','886060','886059']","['991483']", , ,2.826,1413.97 +16250.0,send package,2020-01-30 08:10:28.000Z, , , ,"['660955']", ,1.943,1113.98 +16251.0,pick item,2020-01-30 08:25:15.000Z, ,"['885556']", , , ,0.78,99.99 +16252.0,item out of stock,2020-01-30 08:27:08.000Z, ,"['885977']", , , ,0.28,449.0 +16253.0,pick item,2020-01-30 08:31:06.000Z, ,"['885536']", , , ,0.78,99.99 +16254.0,item out of stock,2020-01-30 08:34:03.000Z, ,"['886035']", , , ,0.188,1149.0 +16255.0,package delivered,2020-01-30 08:36:59.000Z, , , ,"['660954']", ,6.9510000000000005,5115.94 +16256.0,pick item,2020-01-30 08:46:42.000Z, ,"['885842']", , , ,0.172,699.0 +16257.0,pick item,2020-01-30 08:48:56.000Z, ,"['885869']", , , ,1.48,199.99 +16258.0,reorder item,2020-01-30 08:54:32.000Z, ,"['885822']", , , ,0.483,495.0 +16259.0,pick item,2020-01-30 09:05:16.000Z, ,"['885996']", , , ,0.483,1099.0 +16260.0,reorder item,2020-01-30 09:07:49.000Z, ,"['885918']", , , ,0.495,129.0 +16261.0,pick item,2020-01-30 09:10:54.000Z, ,"['886056']", , , ,0.21,529.0 +16262.0,create package,2020-01-30 09:10:54.000Z, ,"['885524','885415','885500']", ,"['660956']", ,2.458,1427.99 +16263.0,pay order,2020-01-30 09:12:07.000Z, , ,"['991467']", , ,1.346,1213.98 +16264.0,pay order,2020-01-30 09:14:13.000Z, , ,"['991325']", , ,0.36,1853.0 +16265.0,place order,2020-01-30 09:39:46.000Z, ,"['886066','886065','886062','886067','886063','886064']","['991484']", , ,2.805,1995.99 +16266.0,payment reminder,2020-01-30 09:45:53.000Z, , ,"['991009']", , ,2.613,3578.98 +16267.0,confirm order,2020-01-30 09:48:15.000Z, , ,"['991483']", , ,2.826,1413.97 +16268.0,pick item,2020-01-30 09:49:06.000Z, ,"['886008']", , , ,0.483,79.99 +16269.0,pick item,2020-01-30 09:51:37.000Z, ,"['885993']", , , ,1.28,149.99 +16270.0,failed delivery,2020-01-30 09:53:01.000Z, , , ,"['660950']", ,2.043,1697.99 +16271.0,failed delivery,2020-01-30 09:55:18.000Z, , , ,"['660950']", ,2.043,1697.99 +16272.0,confirm order,2020-01-30 09:57:40.000Z, , ,"['991484']", , ,2.805,1995.99 +16273.0,pick item,2020-01-30 09:58:02.000Z, ,"['886006']", , , ,0.483,495.0 +16274.0,create package,2020-01-30 09:58:02.000Z, ,"['885913','885966','886030','885887','885929','885758','885984','885927']", ,"['660957']", ,5.671,3973.96 +16275.0,pay order,2020-01-30 10:14:00.000Z, , ,"['991311']", , ,3.107,2726.99 +16276.0,payment reminder,2020-01-30 10:15:58.000Z, , ,"['991367']", , ,0.78,104.99 +16277.0,payment reminder,2020-01-30 10:17:41.000Z, , ,"['991368']", , ,3.129,2094.97 +16278.0,reorder item,2020-01-30 10:30:51.000Z, ,"['886013']", , , ,0.21,529.0 +16279.0,package delivered,2020-01-30 10:33:22.000Z, , , ,"['660955']", ,1.943,1113.98 +16280.0,pick item,2020-01-30 10:36:56.000Z, ,"['886059']", , , ,1.48,199.99 +16281.0,send package,2020-01-30 10:40:47.000Z, , , ,"['660956']", ,2.458,1427.99 +16282.0,pick item,2020-01-30 10:43:04.000Z, ,"['885992']", , , ,0.166,799.0 +16283.0,pick item,2020-01-30 10:50:48.000Z, ,"['886046']", , , ,1.28,149.99 +16284.0,item out of stock,2020-01-30 10:51:32.000Z, ,"['886066']", , , ,0.483,495.0 +16285.0,pick item,2020-01-30 10:59:13.000Z, ,"['885983']", , , ,0.483,495.0 +16286.0,pick item,2020-01-30 11:05:56.000Z, ,"['886064']", , , ,0.28,449.0 +16287.0,pick item,2020-01-30 11:08:21.000Z, ,"['885949']", , , ,1.48,199.99 +16288.0,pick item,2020-01-30 11:14:18.000Z, ,"['886029']", , , ,0.172,699.0 +16289.0,pick item,2020-01-30 11:14:21.000Z, ,"['885999']", , , ,0.2,39.99 +16290.0,create package,2020-01-30 11:14:21.000Z, ,"['885556','885869','885906','885894','885908','885676','885729']", ,"['660958']", ,4.632,2107.95 +16291.0,pick item,2020-01-30 11:17:30.000Z, ,"['885910']", , , ,0.172,699.0 +16292.0,pick item,2020-01-30 11:19:34.000Z, ,"['886060']", , , ,0.483,79.99 +16293.0,package delivered,2020-01-30 11:20:18.000Z, , , ,"['660949']", ,7.205,10450.99 +16294.0,item out of stock,2020-01-30 11:20:39.000Z, ,"['885914']", , , ,0.78,99.99 +16295.0,item out of stock,2020-01-30 11:31:28.000Z, ,"['886045']", , , ,0.28,449.0 +16296.0,pick item,2020-01-30 11:38:57.000Z, ,"['886050']", , , ,0.2,39.99 +16297.0,place order,2020-01-30 11:39:19.000Z, ,"['886069','886070','886071','886068']","['991485']", , ,1.525,1168.99 +16298.0,pick item,2020-01-30 11:47:59.000Z, ,"['886036']", , , ,1.28,149.99 +16299.0,pick item,2020-01-30 11:57:17.000Z, ,"['886071']", , , ,0.44,476.0 +16300.0,pick item,2020-01-30 12:03:01.000Z, ,"['885332']", , , ,1.37,2500.0 +16301.0,pick item,2020-01-30 12:04:32.000Z, ,"['886014']", , , ,1.28,149.99 +16302.0,create package,2020-01-30 12:04:32.000Z, ,"['886056','885626','886060','886059']", ,"['660959']", ,2.656,1907.98 +16303.0,package delivered,2020-01-30 12:07:03.000Z, , , ,"['660952']", ,5.098,2944.94 +16304.0,pick item,2020-01-30 12:11:40.000Z, ,"['886044']", , , ,0.483,495.0 +16305.0,pay order,2020-01-30 12:12:45.000Z, , ,"['991428']", , ,0.655,1803.0 +16306.0,pick item,2020-01-30 12:24:49.000Z, ,"['886043']", , , ,0.21,529.0 +16307.0,pay order,2020-01-30 13:34:57.000Z, , ,"['991427']", , ,0.44,481.0 +16308.0,place order,2020-01-30 13:38:25.000Z, ,"['886075','886076','886072','886077','886073','886079','886078','886074']","['991486']", , ,5.558,5021.96 +16309.0,confirm order,2020-01-30 13:40:19.000Z, , ,"['991486']", , ,5.558,5021.96 +16310.0,pay order,2020-01-30 13:52:29.000Z, , ,"['991449']", , ,2.789,1558.97 +16311.0,pick item,2020-01-30 14:15:32.000Z, ,"['886049']", , , ,0.483,495.0 +16312.0,pick item,2020-01-30 14:25:29.000Z, ,"['886057']", , , ,1.28,149.99 +16313.0,create package,2020-01-30 14:25:29.000Z, ,"['885741','885109','885890']", ,"['660960']", ,1.6,1014.99 +16314.0,pick item,2020-01-30 14:31:31.000Z, ,"['885822']", , , ,0.483,495.0 +16315.0,send package,2020-01-30 14:33:56.000Z, , , ,"['660960']", ,1.6,1014.99 +16316.0,item out of stock,2020-01-30 14:34:16.000Z, ,"['886028']", , , ,1.25,2200.0 +16317.0,reorder item,2020-01-30 14:34:28.000Z, ,"['885914']", , , ,0.78,99.99 +16318.0,send package,2020-01-30 14:41:50.000Z, , , ,"['660953']", ,6.2970000000000015,4506.93 +16319.0,pick item,2020-01-30 14:43:06.000Z, ,"['885923']", , , ,0.483,495.0 +16320.0,confirm order,2020-01-30 14:45:34.000Z, , ,"['991480']", , ,4.682,3431.97 +16321.0,pick item,2020-01-30 14:49:11.000Z, ,"['885747']", , , ,0.38,29.99 +16322.0,create package,2020-01-30 14:49:11.000Z, ,"['886001','885822','886029','885975','885999','885972','885998']", ,"['660961']", ,2.49,3171.97 +16323.0,pick item,2020-01-30 15:00:45.000Z, ,"['886034']", , , ,0.495,129.0 +16324.0,item out of stock,2020-01-30 15:08:28.000Z, ,"['886019']", , , ,0.172,699.0 +16325.0,pick item,2020-01-30 15:08:48.000Z, ,"['885826']", , , ,0.483,79.99 +16326.0,pay order,2020-01-30 15:09:50.000Z, , ,"['991407']", , ,4.056,3383.97 +16327.0,pick item,2020-01-30 15:11:01.000Z, ,"['885952']", , , ,1.37,2500.0 +16328.0,pay order,2020-01-30 15:14:46.000Z, , ,"['991368']", , ,3.129,2094.97 +16329.0,pick item,2020-01-30 15:14:50.000Z, ,"['886009']", , , ,0.172,699.0 +16330.0,item out of stock,2020-01-30 15:23:30.000Z, ,"['886077']", , , ,0.2,39.99 +16331.0,item out of stock,2020-01-30 15:27:03.000Z, ,"['886027']", , , ,1.48,199.99 +16332.0,pick item,2020-01-30 15:28:45.000Z, ,"['885985']", , , ,0.2,39.99 +16333.0,pay order,2020-01-30 15:31:47.000Z, , ,"['991414']", , ,2.149,1964.98 +16334.0,place order,2020-01-30 15:36:38.000Z, ,"['886081','886080','886084','886085','886083','886082']","['991487']", , ,3.4760000000000004,2823.98 +16335.0,confirm order,2020-01-30 15:47:28.000Z, , ,"['991487']", , ,3.4760000000000004,2823.98 +16336.0,failed delivery,2020-01-30 15:51:19.000Z, , , ,"['660950']", ,2.043,1697.99 +16337.0,pay order,2020-01-30 15:57:01.000Z, , ,"['991483']", , ,2.826,1413.97 +16338.0,reorder item,2020-01-30 15:58:57.000Z, ,"['886027']", , , ,1.48,199.99 +16339.0,pick item,2020-01-30 16:16:09.000Z, ,"['886062']", , , ,0.88,89.99 +16340.0,pick item,2020-01-30 16:27:57.000Z, ,"['886075']", , , ,1.37,2500.0 +16341.0,create package,2020-01-30 16:27:57.000Z, ,"['886021','885958','886008','885996','885875','885932','885997','886009','885939','885953','886025','886022','885952','885940']", ,"['660962']", ,6.15,8152.94 +16342.0,reorder item,2020-01-30 16:36:18.000Z, ,"['886066']", , , ,0.483,495.0 +16343.0,payment reminder,2020-01-30 16:49:32.000Z, , ,"['991369']", , ,3.398,2458.98 +16344.0,failed delivery,2020-01-30 16:59:14.000Z, , , ,"['660951']", ,1.7480000000000002,1747.99 +16345.0,pick item,2020-01-30 17:01:06.000Z, ,"['886027']", , , ,1.48,199.99 +16346.0,pick item,2020-01-30 17:12:19.000Z, ,"['885962']", , , ,0.166,799.0 +16347.0,pick item,2020-01-30 17:16:42.000Z, ,"['886070']", , , ,0.21,529.0 +16348.0,pick item,2020-01-30 17:17:04.000Z, ,"['885980']", , , ,0.188,1149.0 +16349.0,place order,2020-01-30 17:33:03.000Z, ,"['886087','886086']","['991488']", , ,1.49,683.99 +16350.0,pick item,2020-01-30 18:20:20.000Z, ,"['886085']", , , ,0.483,495.0 +16351.0,confirm order,2020-01-30 18:24:22.000Z, , ,"['991474']", , ,1.862,1432.99 +16352.0,send package,2020-01-30 19:16:50.000Z, , , ,"['660957']", ,5.671,3973.96 +16353.0,failed delivery,2020-01-30 19:31:30.000Z, , , ,"['660951']", ,1.7480000000000002,1747.99 +16354.0,place order,2020-01-30 20:18:44.000Z, ,"['886091','886092','886089','886094','886088','886093','886090']","['991489']", , ,3.175,3092.97 +16355.0,pick item,2020-01-30 20:39:10.000Z, ,"['886007']", , , ,0.495,129.0 +16356.0,pay order,2020-01-30 20:51:03.000Z, , ,"['991466']", , ,0.483,84.99 +16357.0,place order,2020-01-31 03:10:18.000Z, ,"['886096','886095']","['991490']", , ,2.06,254.98 +16358.0,package delivered,2020-01-31 07:37:32.000Z, , , ,"['660957']", ,5.671,3973.96 +16359.0,reorder item,2020-01-31 08:13:59.000Z, ,"['886019']", , , ,0.172,699.0 +16360.0,pick item,2020-01-31 08:28:29.000Z, ,"['886052']", , , ,0.172,699.0 +16361.0,pick item,2020-01-31 08:34:51.000Z, ,"['886093']", , , ,0.2,39.99 +16362.0,place order,2020-01-31 08:37:07.000Z, ,"['886098','886100','886099','886097']","['991491']", , ,2.327,1022.98 +16363.0,pay order,2020-01-31 08:42:08.000Z, , ,"['991437']", , ,2.9410000000000003,1927.99 +16364.0,pick item,2020-01-31 09:05:35.000Z, ,"['886041']", , , ,0.38,29.99 +16365.0,failed delivery,2020-01-31 09:11:43.000Z, , , ,"['660951']", ,1.7480000000000002,1747.99 +16366.0,package delivered,2020-01-31 09:21:08.000Z, , , ,"['660953']", ,6.2970000000000015,4506.93 +16367.0,confirm order,2020-01-31 09:23:33.000Z, , ,"['991489']", , ,3.175,3092.97 +16368.0,payment reminder,2020-01-31 09:25:32.000Z, , ,"['991126']", , ,3.198,4272.97 +16369.0,pick item,2020-01-31 09:26:45.000Z, ,"['886023']", , , ,0.495,129.0 +16370.0,pick item,2020-01-31 09:38:44.000Z, ,"['885478']", , , ,0.166,799.0 +16371.0,pick item,2020-01-31 09:41:50.000Z, ,"['886079']", , , ,0.28,449.0 +16372.0,reorder item,2020-01-31 09:46:05.000Z, ,"['886045']", , , ,0.28,449.0 +16373.0,item out of stock,2020-01-31 09:56:55.000Z, ,"['886088']", , , ,0.483,495.0 +16374.0,pick item,2020-01-31 10:01:06.000Z, ,"['886092']", , , ,0.98,129.99 +16375.0,pick item,2020-01-31 10:20:08.000Z, ,"['885963']", , , ,0.21,529.0 +16376.0,create package,2020-01-31 10:20:08.000Z, ,"['886033','885970','886032']", ,"['660963']", ,2.54,269.97 +16377.0,confirm order,2020-01-31 10:21:55.000Z, , ,"['991485']", , ,1.525,1168.99 +16378.0,item out of stock,2020-01-31 10:24:51.000Z, ,"['886031']", , , ,0.21,529.0 +16379.0,pay order,2020-01-31 10:25:25.000Z, , ,"['991459']", , ,4.16,4584.98 +16380.0,send package,2020-01-31 10:30:15.000Z, , , ,"['660959']", ,2.656,1907.98 +16381.0,package delivered,2020-01-31 10:30:57.000Z, , , ,"['660951']", ,1.7480000000000002,1747.99 +16382.0,send package,2020-01-31 10:31:29.000Z, , , ,"['660962']", ,6.15,8152.94 +16383.0,pick item,2020-01-31 10:32:11.000Z, ,"['886080']", , , ,0.44,476.0 +16384.0,place order,2020-01-31 10:34:02.000Z, ,"['886103','886104','886101','886102']","['991492']", , ,1.983,750.97 +16385.0,pick item,2020-01-31 10:39:37.000Z, ,"['886090']", , , ,0.38,29.99 +16386.0,pick item,2020-01-31 10:41:43.000Z, ,"['885978']", , , ,0.98,129.99 +16387.0,create package,2020-01-31 10:41:43.000Z, ,"['885428','885332','885847']", ,"['660964']", ,2.145,2718.99 +16388.0,confirm order,2020-01-31 10:43:20.000Z, , ,"['991490']", , ,2.06,254.98 +16389.0,confirm order,2020-01-31 10:51:17.000Z, , ,"['991481']", , ,2.501,2237.98 +16390.0,send package,2020-01-31 10:58:57.000Z, , , ,"['660958']", ,4.632,2107.95 +16391.0,pay order,2020-01-31 11:04:04.000Z, , ,"['991487']", , ,3.4760000000000004,2823.98 +16392.0,pick item,2020-01-31 11:04:20.000Z, ,"['886084']", , , ,0.483,1099.0 +16393.0,pay order,2020-01-31 11:08:43.000Z, , ,"['991450']", , ,3.092,2123.97 +16394.0,pick item,2020-01-31 11:28:27.000Z, ,"['886051']", , , ,0.483,495.0 +16395.0,item out of stock,2020-01-31 11:34:57.000Z, ,"['886078']", , , ,0.188,1149.0 +16396.0,pick item,2020-01-31 11:43:10.000Z, ,"['886024']", , , ,0.172,699.0 +16397.0,create package,2020-01-31 11:43:10.000Z, ,"['886041','885622','886040','886036','886034','886037']", ,"['660965']", ,3.71,627.96 +16398.0,reorder item,2020-01-31 11:46:35.000Z, ,"['886031']", , , ,0.21,529.0 +16399.0,send package,2020-01-31 11:57:48.000Z, , , ,"['660963']", ,2.54,269.97 +16400.0,package delivered,2020-01-31 12:02:45.000Z, , , ,"['660960']", ,1.6,1014.99 +16401.0,place order,2020-01-31 12:27:51.000Z, ,"['886109','886105','886106','886107','886108']","['991493']", , ,3.686,1203.96 +16402.0,item out of stock,2020-01-31 12:33:34.000Z, ,"['886091']", , , ,0.483,1099.0 +16403.0,pay order,2020-01-31 12:36:54.000Z, , ,"['991343']", , ,3.332,3717.97 +16404.0,pick item,2020-01-31 12:38:45.000Z, ,"['885994']", , , ,0.483,79.99 +16405.0,pick item,2020-01-31 12:40:10.000Z, ,"['886108']", , , ,0.98,129.99 +16406.0,pick item,2020-01-31 12:50:19.000Z, ,"['886096']", , , ,1.28,149.99 +16407.0,package delivered,2020-01-31 12:54:48.000Z, , , ,"['660956']", ,2.458,1427.99 +16408.0,pick item,2020-01-31 13:34:12.000Z, ,"['886081']", , , ,0.98,129.99 +16409.0,pick item,2020-01-31 13:37:44.000Z, ,"['886089']", , , ,0.166,799.0 +16410.0,pick item,2020-01-31 13:45:04.000Z, ,"['886072']", , , ,0.78,99.99 +16411.0,create package,2020-01-31 13:45:04.000Z, ,"['885923','885926']", ,"['660966']", ,0.978,624.0 +16412.0,confirm order,2020-01-31 13:46:33.000Z, , ,"['991492']", , ,1.983,750.97 +16413.0,pick item,2020-01-31 13:47:08.000Z, ,"['886104']", , , ,0.78,99.99 +16414.0,confirm order,2020-01-31 13:59:55.000Z, , ,"['991488']", , ,1.49,683.99 +16415.0,pick item,2020-01-31 14:02:04.000Z, ,"['886068']", , , ,0.38,29.99 +16416.0,create package,2020-01-31 14:02:04.000Z, ,"['886049','886044','885233','885536','886043','886046','886012','885962','886006','886042']", ,"['660967']", ,5.051,4281.96 +16417.0,reorder item,2020-01-31 14:03:36.000Z, ,"['886077']", , , ,0.2,39.99 +16418.0,pick item,2020-01-31 14:09:06.000Z, ,"['886067']", , , ,0.495,129.0 +16419.0,place order,2020-01-31 14:15:30.000Z, ,"['886111','886112','886110','886113']","['991494']", , ,1.376,1752.98 +16420.0,pick item,2020-01-31 14:28:02.000Z, ,"['885769']", , , ,0.78,99.99 +16421.0,send package,2020-01-31 14:36:35.000Z, , , ,"['660965']", ,3.71,627.96 +16422.0,pick item,2020-01-31 15:06:35.000Z, ,"['886039']", , , ,0.483,1099.0 +16423.0,pay order,2020-01-31 15:11:15.000Z, , ,"['991457']", , ,0.586,1862.0 +16424.0,send package,2020-01-31 15:16:09.000Z, , , ,"['660961']", ,2.49,3171.97 +16425.0,item out of stock,2020-01-31 15:16:13.000Z, ,"['886105']", , , ,0.166,799.0 +16426.0,pick item,2020-01-31 15:30:20.000Z, ,"['886053']", , , ,1.48,199.99 +16427.0,confirm order,2020-01-31 15:39:59.000Z, , ,"['991491']", , ,2.327,1022.98 +16428.0,pay order,2020-01-31 15:40:12.000Z, , ,"['991485']", , ,1.525,1168.99 +16429.0,package delivered,2020-01-31 15:41:23.000Z, , , ,"['660965']", ,3.71,627.96 +16430.0,package delivered,2020-01-31 15:43:41.000Z, , , ,"['660962']", ,6.15,8152.94 +16431.0,pick item,2020-01-31 15:44:17.000Z, ,"['885494']", , , ,1.48,199.99 +16432.0,pick item,2020-01-31 15:45:18.000Z, ,"['886020']", , , ,0.28,449.0 +16433.0,place order,2020-01-31 15:50:47.000Z, ,"['886115','886114']","['991495']", , ,0.552,733.99 +16434.0,pick item,2020-01-31 15:52:55.000Z, ,"['886111']", , , ,0.483,79.99 +16435.0,pay order,2020-01-31 15:53:52.000Z, , ,"['991484']", , ,2.805,1995.99 +16436.0,pick item,2020-01-31 15:56:35.000Z, ,"['885948']", , , ,1.28,149.99 +16437.0,pay order,2020-01-31 16:01:37.000Z, , ,"['991360']", , ,3.248,6330.0 +16438.0,pick item,2020-01-31 16:03:42.000Z, ,"['886095']", , , ,0.78,99.99 +16439.0,package delivered,2020-01-31 16:05:31.000Z, , , ,"['660963']", ,2.54,269.97 +16440.0,pick item,2020-01-31 16:15:52.000Z, ,"['886010']", , , ,0.483,1099.0 +16441.0,create package,2020-01-31 16:15:52.000Z, ,"['886092','885842','886089','886093','886090']", ,"['660968']", ,1.898,1697.97 +16442.0,confirm order,2020-01-31 16:21:57.000Z, , ,"['991482']", , ,1.87,713.98 +16443.0,send package,2020-01-31 16:23:33.000Z, , , ,"['660966']", ,0.978,624.0 +16444.0,package delivered,2020-01-31 16:30:00.000Z, , , ,"['660958']", ,4.632,2107.95 +16445.0,pick item,2020-01-31 16:32:07.000Z, ,"['886082']", , , ,0.88,89.99 +16446.0,reorder item,2020-01-31 16:51:28.000Z, ,"['885977']", , , ,0.28,449.0 +16447.0,pick item,2020-01-31 17:00:11.000Z, ,"['885902']", , , ,0.38,29.99 +16448.0,reorder item,2020-01-31 18:00:52.000Z, ,"['885756']", , , ,0.483,1099.0 +16449.0,place order,2020-01-31 18:01:21.000Z, ,"['886116','886118','886117']","['991496']", , ,1.246,1688.99 +16450.0,item out of stock,2020-01-31 18:09:43.000Z, ,"['886026']", , , ,0.78,99.99 +16451.0,pick item,2020-01-31 19:12:05.000Z, ,"['885911']", , , ,1.25,2200.0 +16452.0,item out of stock,2020-01-31 19:29:50.000Z, ,"['886054']", , , ,0.166,799.0 +16453.0,place order,2020-01-31 20:42:17.000Z, ,"['886122','886120','886119','886121']","['991497']", , ,3.235,912.98 +16454.0,place order,2020-02-01 13:13:36.000Z, ,"['886124','886123']","['991498']", , ,0.568,1183.99 +16455.0,payment reminder,2020-02-01 15:51:18.000Z, , ,"['991254']", , ,5.002,8694.0 +16456.0,place order,2020-02-02 13:21:06.000Z, ,"['886125']","['991499']", , ,0.483,84.99 +16457.0,place order,2020-02-03 05:54:06.000Z, ,"['886126','886129','886128','886127']","['991500']", , ,3.017,3462.99 +16458.0,failed delivery,2020-02-03 07:45:22.000Z, , , ,"['660966']", ,0.978,624.0 +16459.0,payment reminder,2020-02-03 08:24:17.000Z, , ,"['991379']", , ,1.765,4089.98 +16460.0,confirm order,2020-02-03 08:28:05.000Z, , ,"['991498']", , ,0.568,1183.99 +16461.0,pick item,2020-02-03 08:33:44.000Z, ,"['886100']", , , ,0.78,99.99 +16462.0,confirm order,2020-02-03 08:49:07.000Z, , ,"['991499']", , ,0.483,84.99 +16463.0,package delivered,2020-02-03 09:00:28.000Z, , , ,"['660950']", ,2.043,1697.99 +16464.0,pick item,2020-02-03 09:02:01.000Z, ,"['886114']", , , ,0.38,29.99 +16465.0,create package,2020-02-03 09:02:01.000Z, ,"['885948','885992','885949','886014','885747','885993','885978','885980']", ,"['660969']", ,7.034,2757.94 +16466.0,send package,2020-02-03 09:06:24.000Z, , , ,"['660968']", ,1.898,1697.97 +16467.0,pick item,2020-02-03 09:14:57.000Z, ,"['886097']", , , ,0.88,89.99 +16468.0,pick item,2020-02-03 09:31:50.000Z, ,"['886047']", , , ,0.98,129.99 +16469.0,package delivered,2020-02-03 09:36:50.000Z, , , ,"['660959']", ,2.656,1907.98 +16470.0,place order,2020-02-03 09:37:18.000Z, ,"['886131','886132','886130']","['991501']", , ,3.04,384.97 +16471.0,pay order,2020-02-03 09:42:49.000Z, , ,"['991379']", , ,1.765,4089.98 +16472.0,confirm order,2020-02-03 09:47:50.000Z, , ,"['991475']", , ,4.875,2920.96 +16473.0,pick item,2020-02-03 09:57:31.000Z, ,"['886113']", , , ,0.21,529.0 +16474.0,pick item,2020-02-03 10:28:56.000Z, ,"['886124']", , , ,0.38,29.99 +16475.0,send package,2020-02-03 10:42:54.000Z, , , ,"['660967']", ,5.051,4281.96 +16476.0,payment reminder,2020-02-03 10:49:30.000Z, , ,"['991385']", , ,0.166,804.0 +16477.0,payment reminder,2020-02-03 11:01:58.000Z, , ,"['991271']", , ,2.112,973.97 +16478.0,pick item,2020-02-03 11:15:05.000Z, ,"['886083']", , , ,0.21,529.0 +16479.0,pick item,2020-02-03 11:16:47.000Z, ,"['885550']", , , ,0.78,99.99 +16480.0,place order,2020-02-03 11:34:24.000Z, ,"['886133','886134']","['991502']", , ,1.42,610.99 +16481.0,package delivered,2020-02-03 11:56:03.000Z, , , ,"['660967']", ,5.051,4281.96 +16482.0,pick item,2020-02-03 11:57:37.000Z, ,"['886066']", , , ,0.483,495.0 +16483.0,pick item,2020-02-03 12:19:45.000Z, ,"['886103']", , , ,0.483,79.99 +16484.0,create package,2020-02-03 12:19:45.000Z, ,"['886051','886052','885983','885985','886050','886066','886103','886104','886062','886067','886053','886064']", ,"['660970']", ,6.419,3311.94 +16485.0,reorder item,2020-02-03 12:31:07.000Z, ,"['885930']", , , ,0.483,495.0 +16486.0,pick item,2020-02-03 12:36:56.000Z, ,"['885687']", , , ,0.28,89.99 +16487.0,send package,2020-02-03 12:49:22.000Z, , , ,"['660970']", ,6.419,3311.94 +16488.0,pick item,2020-02-03 12:51:43.000Z, ,"['886094']", , , ,0.483,495.0 +16489.0,confirm order,2020-02-03 13:13:35.000Z, , ,"['991501']", , ,3.04,384.97 +16490.0,pick item,2020-02-03 13:14:51.000Z, ,"['885762']", , , ,0.2,39.99 +16491.0,pick item,2020-02-03 13:15:38.000Z, ,"['886058']", , , ,0.483,1099.0 +16492.0,pick item,2020-02-03 13:20:25.000Z, ,"['886074']", , , ,0.28,449.0 +16493.0,pick item,2020-02-03 13:24:45.000Z, ,"['885897']", , , ,0.495,129.0 +16494.0,payment reminder,2020-02-03 13:27:43.000Z, , ,"['991374']", , ,0.2,44.99 +16495.0,place order,2020-02-03 13:28:35.000Z, ,"['886136','886135','886137']","['991503']", , ,1.726,1043.98 +16496.0,pick item,2020-02-03 13:31:13.000Z, ,"['886061']", , , ,0.38,29.99 +16497.0,send package,2020-02-03 13:32:08.000Z, , , ,"['660964']", ,2.145,2718.99 +16498.0,pick item,2020-02-03 13:34:14.000Z, ,"['885930']", , , ,0.483,495.0 +16499.0,pay order,2020-02-03 13:47:14.000Z, , ,"['991472']", , ,1.093,1712.98 +16500.0,package delivered,2020-02-03 13:49:17.000Z, , , ,"['660966']", ,0.978,624.0 +16501.0,item out of stock,2020-02-03 13:56:06.000Z, ,"['886110']", , , ,0.2,39.99 +16502.0,pick item,2020-02-03 14:11:47.000Z, ,"['886063']", , , ,0.495,129.0 +16503.0,payment reminder,2020-02-03 14:13:45.000Z, , ,"['991386']", , ,1.92,680.99 +16504.0,reorder item,2020-02-03 14:15:10.000Z, ,"['886035']", , , ,0.188,1149.0 +16505.0,pay order,2020-02-03 14:20:49.000Z, , ,"['991363']", , ,5.632999999999999,4631.96 +16506.0,pick item,2020-02-03 14:23:17.000Z, ,"['886131']", , , ,0.98,129.99 +16507.0,pick item,2020-02-03 14:23:29.000Z, ,"['886055']", , , ,0.38,29.99 +16508.0,confirm order,2020-02-03 14:23:46.000Z, , ,"['991502']", , ,1.42,610.99 +16509.0,pick item,2020-02-03 14:24:11.000Z, ,"['885977']", , , ,0.28,449.0 +16510.0,create package,2020-02-03 14:24:11.000Z, ,"['885963','885910','885911']", ,"['660971']", ,1.632,3428.0 +16511.0,confirm order,2020-02-03 14:28:27.000Z, , ,"['991497']", , ,3.235,912.98 +16512.0,pick item,2020-02-03 14:30:05.000Z, ,"['886127']", , , ,0.98,129.99 +16513.0,failed delivery,2020-02-03 14:33:21.000Z, , , ,"['660968']", ,1.898,1697.97 +16514.0,item out of stock,2020-02-03 14:39:26.000Z, ,"['886115']", , , ,0.172,699.0 +16515.0,pay order,2020-02-03 14:54:11.000Z, , ,"['991367']", , ,0.78,104.99 +16516.0,item out of stock,2020-02-03 14:59:58.000Z, ,"['886065']", , , ,0.172,699.0 +16517.0,pay order,2020-02-03 15:12:31.000Z, , ,"['991456']", , ,1.4780000000000002,2531.99 +16518.0,place order,2020-02-03 15:16:58.000Z, ,"['886138','886140','886139']","['991504']", , ,1.463,1382.99 +16519.0,reorder item,2020-02-03 15:17:34.000Z, ,"['886026']", , , ,0.78,99.99 +16520.0,pick item,2020-02-03 15:18:22.000Z, ,"['886118']", , , ,0.28,89.99 +16521.0,package delivered,2020-02-03 15:21:56.000Z, , , ,"['660970']", ,6.419,3311.94 +16522.0,send package,2020-02-03 15:30:11.000Z, , , ,"['660971']", ,1.632,3428.0 +16523.0,pay order,2020-02-03 15:36:33.000Z, , ,"['991498']", , ,0.568,1183.99 +16524.0,pick item,2020-02-03 15:45:43.000Z, ,"['886073']", , , ,0.98,129.99 +16525.0,create package,2020-02-03 15:45:43.000Z, ,"['885762','886070','886071','886068']", ,"['660972']", ,1.23,1074.98 +16526.0,failed delivery,2020-02-03 15:46:01.000Z, , , ,"['660964']", ,2.145,2718.99 +16527.0,pick item,2020-02-03 15:49:43.000Z, ,"['886098']", , , ,0.172,699.0 +16528.0,confirm order,2020-02-03 15:52:27.000Z, , ,"['991493']", , ,3.686,1203.96 +16529.0,package delivered,2020-02-03 15:55:56.000Z, , , ,"['660971']", ,1.632,3428.0 +16530.0,item out of stock,2020-02-03 15:58:35.000Z, ,"['886128']", , , ,0.495,129.0 +16531.0,reorder item,2020-02-03 16:13:58.000Z, ,"['886028']", , , ,1.25,2200.0 +16532.0,pick item,2020-02-03 16:51:24.000Z, ,"['886134']", , , ,0.98,129.99 +16533.0,place order,2020-02-03 16:53:43.000Z, ,"['886141','886143','886142']","['991505']", , ,0.8320000000000001,823.98 +16534.0,pick item,2020-02-03 17:00:01.000Z, ,"['886138']", , , ,0.78,99.99 +16535.0,pay order,2020-02-03 17:09:29.000Z, , ,"['991446']", , ,4.072,3712.97 +16536.0,place order,2020-02-03 19:20:44.000Z, ,"['886145','886144','886146']","['991506']", , ,2.418,3483.99 +16537.0,send package,2020-02-03 20:26:03.000Z, , , ,"['660969']", ,7.034,2757.94 +16538.0,reorder item,2020-02-03 21:50:18.000Z, ,"['886088']", , , ,0.483,495.0 +16539.0,place order,2020-02-03 22:22:18.000Z, ,"['886147','886149','886148']","['991507']", , ,2.41,2384.98 +16540.0,create package,2020-02-03 23:00:00.000Z, ,"['886058','885994','886083','886082','886081','886080','886085','886055','886084','886057','886061']", ,"['660973']", ,6.482,4207.94 +16541.0,confirm order,2020-02-04 07:07:34.000Z, , ,"['991496']", , ,1.246,1688.99 +16542.0,pick item,2020-02-04 07:43:02.000Z, ,"['885956']", , , ,0.483,1099.0 +16543.0,pick item,2020-02-04 07:57:36.000Z, ,"['886048']", , , ,0.483,79.99 +16544.0,send package,2020-02-04 08:09:16.000Z, , , ,"['660972']", ,1.23,1074.98 +16545.0,pick item,2020-02-04 08:13:00.000Z, ,"['886139']", , , ,0.188,1149.0 +16546.0,place order,2020-02-04 08:18:20.000Z, ,"['886152','886151','886150']","['991508']", , ,1.618,1652.99 +16547.0,package delivered,2020-02-04 08:33:46.000Z, , , ,"['660961']", ,2.49,3171.97 +16548.0,pick item,2020-02-04 08:37:32.000Z, ,"['886149']", , , ,0.28,89.99 +16549.0,pick item,2020-02-04 08:43:19.000Z, ,"['886086']", , , ,1.28,149.99 +16550.0,reorder item,2020-02-04 08:49:52.000Z, ,"['886078']", , , ,0.188,1149.0 +16551.0,reorder item,2020-02-04 09:04:05.000Z, ,"['886110']", , , ,0.2,39.99 +16552.0,package delivered,2020-02-04 09:14:33.000Z, , , ,"['660969']", ,7.034,2757.94 +16553.0,package delivered,2020-02-04 09:26:07.000Z, , , ,"['660964']", ,2.145,2718.99 +16554.0,pick item,2020-02-04 09:37:48.000Z, ,"['886137']", , , ,0.166,799.0 +16555.0,item out of stock,2020-02-04 09:47:27.000Z, ,"['886087']", , , ,0.21,529.0 +16556.0,pick item,2020-02-04 09:51:40.000Z, ,"['886000']", , , ,0.172,699.0 +16557.0,place order,2020-02-04 09:56:28.000Z, ,"['886154','886153']","['991509']", , ,1.865,2634.0 +16558.0,pick item,2020-02-04 10:07:38.000Z, ,"['886122']", , , ,1.48,199.99 +16559.0,confirm order,2020-02-04 10:15:21.000Z, , ,"['991504']", , ,1.463,1382.99 +16560.0,pick item,2020-02-04 10:30:13.000Z, ,"['885766']", , , ,0.28,89.99 +16561.0,item out of stock,2020-02-04 10:52:50.000Z, ,"['886146']", , , ,0.98,129.99 +16562.0,pick item,2020-02-04 10:54:53.000Z, ,"['886151']", , , ,0.166,799.0 +16563.0,confirm order,2020-02-04 11:02:33.000Z, , ,"['991508']", , ,1.618,1652.99 +16564.0,failed delivery,2020-02-04 11:23:21.000Z, , , ,"['660968']", ,1.898,1697.97 +16565.0,confirm order,2020-02-04 11:26:49.000Z, , ,"['991506']", , ,2.418,3483.99 +16566.0,pick item,2020-02-04 11:46:09.000Z, ,"['886129']", , , ,1.37,2500.0 +16567.0,confirm order,2020-02-04 11:51:15.000Z, , ,"['991509']", , ,1.865,2634.0 +16568.0,item out of stock,2020-02-04 12:01:40.000Z, ,"['886109']", , , ,0.38,29.99 +16569.0,pay order,2020-02-04 12:07:51.000Z, , ,"['991465']", , ,4.456,3383.97 +16570.0,place order,2020-02-04 12:12:43.000Z, ,"['886156','886160','886159','886157','886155','886158']","['991510']", , ,4.763,6855.99 +16571.0,confirm order,2020-02-04 12:33:24.000Z, , ,"['991495']", , ,0.552,733.99 +16572.0,pay order,2020-02-04 12:41:51.000Z, , ,"['991471']", , ,1.15,912.99 +16573.0,item out of stock,2020-02-04 12:49:48.000Z, ,"['886159']", , , ,0.78,99.99 +16574.0,item out of stock,2020-02-04 12:51:45.000Z, ,"['886152']", , , ,1.28,149.99 +16575.0,confirm order,2020-02-04 13:20:17.000Z, , ,"['991500']", , ,3.017,3462.99 +16576.0,pick item,2020-02-04 13:25:26.000Z, ,"['886119']", , , ,0.28,449.0 +16577.0,create package,2020-02-04 13:25:26.000Z, ,"['885977','885826','885550','886000']", ,"['660974']", ,1.715,1327.98 +16578.0,item out of stock,2020-02-04 13:30:01.000Z, ,"['886106']", , , ,0.88,89.99 +16579.0,pick item,2020-02-04 13:31:46.000Z, ,"['886140']", , , ,0.495,129.0 +16580.0,pick item,2020-02-04 13:36:52.000Z, ,"['885876']", , , ,0.44,476.0 +16581.0,place order,2020-02-04 13:45:13.000Z, ,"['886162','886164','886161','886163']","['991511']", , ,1.918,963.97 +16582.0,confirm order,2020-02-04 13:49:29.000Z, , ,"['991507']", , ,2.41,2384.98 +16583.0,package delivered,2020-02-04 13:52:29.000Z, , , ,"['660972']", ,1.23,1074.98 +16584.0,pay order,2020-02-04 14:17:17.000Z, , ,"['991305']", , ,2.25,753.97 +16585.0,item out of stock,2020-02-04 14:19:39.000Z, ,"['886120']", , , ,0.495,129.0 +16586.0,item out of stock,2020-02-04 14:21:59.000Z, ,"['886136']", , , ,0.28,89.99 +16587.0,pick item,2020-02-04 14:26:50.000Z, ,"['885853']", , , ,0.21,529.0 +16588.0,item out of stock,2020-02-04 14:27:05.000Z, ,"['886101']", , , ,0.28,89.99 +16589.0,pick item,2020-02-04 14:30:48.000Z, ,"['886130']", , , ,0.78,99.99 +16590.0,create package,2020-02-04 14:30:48.000Z, ,"['886075','886119','886073','885769','886079','886074','885902','886072','886122','885687']", ,"['660975']", ,6.89,4496.94 +16591.0,pick item,2020-02-04 14:39:09.000Z, ,"['886026']", , , ,0.78,99.99 +16592.0,send package,2020-02-04 15:07:44.000Z, , , ,"['660973']", ,6.482,4207.94 +16593.0,pick item,2020-02-04 15:15:40.000Z, ,"['886038']", , , ,0.483,79.99 +16594.0,item out of stock,2020-02-04 15:26:59.000Z, ,"['886163']", , , ,0.483,79.99 +16595.0,reorder item,2020-02-04 15:29:06.000Z, ,"['886054']", , , ,0.166,799.0 +16596.0,pick item,2020-02-04 15:43:53.000Z, ,"['885898']", , , ,0.88,89.99 +16597.0,pick item,2020-02-04 15:43:59.000Z, ,"['885918']", , , ,0.495,129.0 +16598.0,pick item,2020-02-04 15:49:57.000Z, ,"['885540']", , , ,0.483,1099.0 +16599.0,place order,2020-02-04 15:50:14.000Z, ,"['886166','886165']","['991512']", , ,1.32,570.99 +16600.0,item out of stock,2020-02-04 16:09:00.000Z, ,"['886147']", , , ,1.25,2200.0 +16601.0,pick item,2020-02-04 16:20:51.000Z, ,"['886148']", , , ,0.88,89.99 +16602.0,pick item,2020-02-04 16:30:16.000Z, ,"['886125']", , , ,0.483,79.99 +16603.0,item out of stock,2020-02-04 16:35:36.000Z, ,"['886157']", , , ,0.483,1099.0 +16604.0,confirm order,2020-02-04 16:54:19.000Z, , ,"['991512']", , ,1.32,570.99 +16605.0,send package,2020-02-04 17:01:23.000Z, , , ,"['660975']", ,6.89,4496.94 +16606.0,place order,2020-02-04 18:00:15.000Z, ,"['886168','886167']","['991513']", , ,1.76,653.99 +16607.0,pay order,2020-02-04 18:11:32.000Z, , ,"['991126']", , ,3.198,4272.97 +16608.0,place order,2020-02-04 20:40:05.000Z, ,"['886172','886173','886170','886169','886171']","['991514']", , ,3.9,3023.97 +16609.0,reorder item,2020-02-04 21:26:50.000Z, ,"['886163']", , , ,0.483,79.99 +16610.0,place order,2020-02-05 05:18:24.000Z, ,"['886174']","['991515']", , ,0.38,34.99 +16611.0,pay order,2020-02-05 07:21:03.000Z, , ,"['991349']", , ,1.946,294.97 +16612.0,pay order,2020-02-05 07:42:55.000Z, , ,"['991313']", , ,1.132,1378.99 +16613.0,reorder item,2020-02-05 08:01:33.000Z, ,"['886157']", , , ,0.483,1099.0 +16614.0,confirm order,2020-02-05 08:17:42.000Z, , ,"['991511']", , ,1.918,963.97 +16615.0,item out of stock,2020-02-05 08:20:52.000Z, ,"['886160']", , , ,0.44,476.0 +16616.0,send package,2020-02-05 08:22:25.000Z, , , ,"['660974']", ,1.715,1327.98 +16617.0,pick item,2020-02-05 08:25:09.000Z, ,"['886156']", , , ,1.25,2200.0 +16618.0,pick item,2020-02-05 08:29:51.000Z, ,"['886045']", , , ,0.28,449.0 +16619.0,reorder item,2020-02-05 08:43:33.000Z, ,"['886109']", , , ,0.38,29.99 +16620.0,pick item,2020-02-05 08:49:56.000Z, ,"['886076']", , , ,1.48,199.99 +16621.0,create package,2020-02-05 08:49:56.000Z, ,"['886027','886139','886138','886140','885956','886007','886134','886023','885494','886026','886024','885876','886020']", ,"['660976']", ,8.548,4988.95 +16622.0,pick item,2020-02-05 08:54:10.000Z, ,"['886169']", , , ,1.25,2200.0 +16623.0,place order,2020-02-05 08:58:02.000Z, ,"['886176','886177','886175']","['991516']", , ,1.535,1892.99 +16624.0,pick item,2020-02-05 09:02:58.000Z, ,"['886117']", , , ,0.483,1099.0 +16625.0,pay order,2020-02-05 09:05:17.000Z, , ,"['991490']", , ,2.06,254.98 +16626.0,payment reminder,2020-02-05 09:11:44.000Z, , ,"['991401']", , ,3.13,3153.99 +16627.0,pay order,2020-02-05 09:13:17.000Z, , ,"['991470']", , ,1.063,569.98 +16628.0,reorder item,2020-02-05 09:13:49.000Z, ,"['886115']", , , ,0.172,699.0 +16629.0,pick item,2020-02-05 09:16:05.000Z, ,"['886173']", , , ,0.21,529.0 +16630.0,confirm order,2020-02-05 09:21:33.000Z, , ,"['991514']", , ,3.9,3023.97 +16631.0,package delivered,2020-02-05 09:33:43.000Z, , , ,"['660968']", ,1.898,1697.97 +16632.0,reorder item,2020-02-05 09:41:41.000Z, ,"['886065']", , , ,0.172,699.0 +16633.0,pick item,2020-02-05 09:43:30.000Z, ,"['886132']", , , ,1.28,149.99 +16634.0,pick item,2020-02-05 09:44:54.000Z, ,"['885730']", , , ,0.483,495.0 +16635.0,reorder item,2020-02-05 09:56:41.000Z, ,"['886146']", , , ,0.98,129.99 +16636.0,reorder item,2020-02-05 09:58:09.000Z, ,"['886136']", , , ,0.28,89.99 +16637.0,pick item,2020-02-05 09:58:32.000Z, ,"['886164']", , , ,0.78,99.99 +16638.0,pick item,2020-02-05 10:03:13.000Z, ,"['886145']", , , ,0.188,1149.0 +16639.0,pick item,2020-02-05 10:09:34.000Z, ,"['886028']", , , ,1.25,2200.0 +16640.0,pick item,2020-02-05 10:12:51.000Z, ,"['886154']", , , ,0.495,129.0 +16641.0,pick item,2020-02-05 10:18:51.000Z, ,"['886144']", , , ,1.25,2200.0 +16642.0,reorder item,2020-02-05 10:28:15.000Z, ,"['886105']", , , ,0.166,799.0 +16643.0,send package,2020-02-05 10:30:19.000Z, , , ,"['660976']", ,8.548,4988.95 +16644.0,pick item,2020-02-05 10:31:14.000Z, ,"['886166']", , , ,0.88,89.99 +16645.0,pick item,2020-02-05 10:31:55.000Z, ,"['885563']", , , ,1.28,149.99 +16646.0,package delivered,2020-02-05 10:48:38.000Z, , , ,"['660974']", ,1.715,1327.98 +16647.0,pay order,2020-02-05 10:54:42.000Z, , ,"['991357']", , ,0.188,1154.0 +16648.0,reorder item,2020-02-05 11:02:50.000Z, ,"['886120']", , , ,0.495,129.0 +16649.0,reorder item,2020-02-05 11:07:20.000Z, ,"['886128']", , , ,0.495,129.0 +16650.0,item out of stock,2020-02-05 11:14:31.000Z, ,"['886168']", , , ,1.48,199.99 +16651.0,place order,2020-02-05 11:15:51.000Z, ,"['886178','886180','886179']","['991517']", , ,3.04,444.97 +16652.0,payment reminder,2020-02-05 11:39:11.000Z, , ,"['991399']", , ,6.537000000000001,3602.96 +16653.0,pay order,2020-02-05 11:40:13.000Z, , ,"['991486']", , ,5.558,5021.96 +16654.0,item out of stock,2020-02-05 11:57:47.000Z, ,"['886133']", , , ,0.44,476.0 +16655.0,pay order,2020-02-05 12:03:41.000Z, , ,"['991499']", , ,0.483,84.99 +16656.0,place order,2020-02-05 12:51:30.000Z, ,"['886181']","['991518']", , ,0.21,534.0 +16657.0,pay order,2020-02-05 13:07:49.000Z, , ,"['991352']", , ,1.67,793.97 +16658.0,pick item,2020-02-05 13:16:12.000Z, ,"['886135']", , , ,1.28,149.99 +16659.0,create package,2020-02-05 13:16:12.000Z, ,"['885478','886108','886125','886114','886137','886095','886124','886135','886096']", ,"['660977']", ,5.895,2267.93 +16660.0,package delivered,2020-02-05 13:40:50.000Z, , , ,"['660975']", ,6.89,4496.94 +16661.0,item out of stock,2020-02-05 13:56:27.000Z, ,"['886175']", , , ,0.172,699.0 +16662.0,pick item,2020-02-05 14:13:29.000Z, ,"['886161']", , , ,0.483,79.99 +16663.0,failed delivery,2020-02-05 14:21:41.000Z, , , ,"['660976']", ,8.548,4988.95 +16664.0,pay order,2020-02-05 14:36:15.000Z, , ,"['991426']", , ,2.8960000000000004,3618.98 +16665.0,pick item,2020-02-05 14:36:39.000Z, ,"['886170']", , , ,0.78,99.99 +16666.0,pay order,2020-02-05 14:43:30.000Z, , ,"['991481']", , ,2.501,2237.98 +16667.0,pick item,2020-02-05 14:56:07.000Z, ,"['886178']", , , ,1.28,149.99 +16668.0,place order,2020-02-05 15:02:47.000Z, ,"['886183','886182','886184','886185']","['991519']", , ,2.012,2072.98 +16669.0,pick item,2020-02-05 15:05:47.000Z, ,"['886143']", , , ,0.172,699.0 +16670.0,pick item,2020-02-05 15:12:39.000Z, ,"['886126']", , , ,0.172,699.0 +16671.0,pick item,2020-02-05 15:13:00.000Z, ,"['886167']", , , ,0.28,449.0 +16672.0,pick item,2020-02-05 15:15:09.000Z, ,"['886031']", , , ,0.21,529.0 +16673.0,package delivered,2020-02-05 15:28:01.000Z, , , ,"['660976']", ,8.548,4988.95 +16674.0,package delivered,2020-02-05 15:29:37.000Z, , , ,"['660973']", ,6.482,4207.94 +16675.0,confirm order,2020-02-05 15:50:53.000Z, , ,"['991494']", , ,1.376,1752.98 +16676.0,reorder item,2020-02-05 16:06:48.000Z, ,"['886147']", , , ,1.25,2200.0 +16677.0,reorder item,2020-02-05 16:16:09.000Z, ,"['886152']", , , ,1.28,149.99 +16678.0,place order,2020-02-05 16:25:22.000Z, ,"['886187','886199','886190','886189','886192','886200','886194','886196','886193','886197','886191','886198','886186','886188','886195']","['991520']", , ,7.754,5539.93 +16679.0,pick item,2020-02-05 16:26:47.000Z, ,"['886147']", , , ,1.25,2200.0 +16680.0,item out of stock,2020-02-05 16:48:27.000Z, ,"['886195']", , , ,0.78,99.99 +16681.0,pick item,2020-02-05 16:50:16.000Z, ,"['886162']", , , ,0.172,699.0 +16682.0,create package,2020-02-05 16:50:16.000Z, ,"['886154','885898','886173','886038','886039','886170','885897','886111','886113','886169','886143']", ,"['660978']", ,5.941,5663.96 +16683.0,item out of stock,2020-02-05 16:56:35.000Z, ,"['886180']", , , ,1.48,199.99 +16684.0,pick item,2020-02-05 17:10:04.000Z, ,"['886107']", , , ,1.28,149.99 +16685.0,pick item,2020-02-05 17:15:19.000Z, ,"['886177']", , , ,0.483,1099.0 +16686.0,pay order,2020-02-05 17:20:00.000Z, , ,"['991451']", , ,0.84,2341.99 +16687.0,pay order,2020-02-05 17:38:24.000Z, , ,"['991458']", , ,1.76,234.98 +16688.0,reorder item,2020-02-05 17:50:51.000Z, ,"['886133']", , , ,0.44,476.0 +16689.0,place order,2020-02-05 18:10:31.000Z, ,"['886202','886201']","['991521']", , ,1.06,194.98 +16690.0,pick item,2020-02-05 18:13:11.000Z, ,"['886197']", , , ,0.172,699.0 +16691.0,confirm order,2020-02-05 18:35:14.000Z, , ,"['991505']", , ,0.8320000000000001,823.98 +16692.0,pick item,2020-02-05 19:15:07.000Z, ,"['886150']", , , ,0.172,699.0 +16693.0,confirm order,2020-02-05 19:45:04.000Z, , ,"['991520']", , ,7.754,5539.93 +16694.0,place order,2020-02-05 21:00:37.000Z, ,"['886204','886206','886207','886203','886205']","['991522']", , ,2.8560000000000003,1763.98 +16695.0,place order,2020-02-06 06:21:36.000Z, ,"['886210','886209','886208','886217','886218','886213','886216','886214','886212','886215','886211']","['991523']", , ,4.711,3672.95 +16696.0,confirm order,2020-02-06 07:19:32.000Z, , ,"['991515']", , ,0.38,34.99 +16697.0,pick item,2020-02-06 08:01:22.000Z, ,"['886196']", , , ,0.28,89.99 +16698.0,reorder item,2020-02-06 08:11:41.000Z, ,"['886180']", , , ,1.48,199.99 +16699.0,pay order,2020-02-06 08:19:21.000Z, , ,"['991511']", , ,1.918,963.97 +16700.0,pick item,2020-02-06 08:19:47.000Z, ,"['886203']", , , ,0.21,529.0 +16701.0,pick item,2020-02-06 08:21:40.000Z, ,"['886217']", , , ,0.88,89.99 +16702.0,pick item,2020-02-06 08:22:04.000Z, ,"['886216']", , , ,0.172,699.0 +16703.0,pay order,2020-02-06 08:25:28.000Z, , ,"['991493']", , ,3.686,1203.96 +16704.0,pick item,2020-02-06 08:26:56.000Z, ,"['886206']", , , ,0.2,39.99 +16705.0,confirm order,2020-02-06 08:28:29.000Z, , ,"['991513']", , ,1.76,653.99 +16706.0,pick item,2020-02-06 08:28:54.000Z, ,"['886190']", , , ,0.483,1099.0 +16707.0,pick item,2020-02-06 08:32:29.000Z, ,"['886209']", , , ,0.44,476.0 +16708.0,create package,2020-02-06 08:32:29.000Z, ,"['886100','886010','886045','886048','885540','886047','886098','886097']", ,"['660979']", ,4.541,3745.96 +16709.0,pay order,2020-02-06 08:39:49.000Z, , ,"['991271']", , ,2.112,973.97 +16710.0,confirm order,2020-02-06 08:46:41.000Z, , ,"['991517']", , ,3.04,444.97 +16711.0,reorder item,2020-02-06 08:53:00.000Z, ,"['886159']", , , ,0.78,99.99 +16712.0,pick item,2020-02-06 08:57:16.000Z, ,"['885503']", , , ,1.37,2500.0 +16713.0,confirm order,2020-02-06 09:06:36.000Z, , ,"['991510']", , ,4.763,6855.99 +16714.0,place order,2020-02-06 09:07:33.000Z, ,"['886223','886221','886220','886219','886222']","['991524']", , ,2.96,2568.98 +16715.0,confirm order,2020-02-06 09:35:58.000Z, , ,"['991503']", , ,1.726,1043.98 +16716.0,reorder item,2020-02-06 09:39:02.000Z, ,"['886195']", , , ,0.78,99.99 +16717.0,confirm order,2020-02-06 09:40:05.000Z, , ,"['991519']", , ,2.012,2072.98 +16718.0,send package,2020-02-06 09:43:11.000Z, , , ,"['660979']", ,4.541,3745.96 +16719.0,payment reminder,2020-02-06 09:45:29.000Z, , ,"['991409']", , ,1.648,1413.97 +16720.0,pay order,2020-02-06 09:50:03.000Z, , ,"['991455']", , ,3.468,5640.98 +16721.0,pick item,2020-02-06 09:54:48.000Z, ,"['886172']", , , ,0.88,89.99 +16722.0,pick item,2020-02-06 09:55:45.000Z, ,"['886210']", , , ,0.483,79.99 +16723.0,pick item,2020-02-06 09:57:30.000Z, ,"['885922']", , , ,0.88,89.99 +16724.0,confirm order,2020-02-06 10:03:17.000Z, , ,"['991521']", , ,1.06,194.98 +16725.0,pick item,2020-02-06 10:11:40.000Z, ,"['886192']", , , ,0.483,79.99 +16726.0,pick item,2020-02-06 10:11:47.000Z, ,"['886220']", , , ,0.172,699.0 +16727.0,pick item,2020-02-06 10:22:16.000Z, ,"['886201']", , , ,0.78,99.99 +16728.0,pay order,2020-02-06 10:22:32.000Z, , ,"['991500']", , ,3.017,3462.99 +16729.0,payment reminder,2020-02-06 10:25:32.000Z, , ,"['991400']", , ,2.978,4350.99 +16730.0,confirm order,2020-02-06 10:25:50.000Z, , ,"['991523']", , ,4.711,3672.95 +16731.0,pick item,2020-02-06 10:29:39.000Z, ,"['886069']", , , ,0.495,129.0 +16732.0,create package,2020-02-06 10:29:39.000Z, ,"['886162','886164','886161','886094','886166']", ,"['660980']", ,2.798,1463.97 +16733.0,place order,2020-02-06 10:34:53.000Z, ,"['886226','886225','886224']","['991525']", , ,0.97,593.98 +16734.0,pick item,2020-02-06 10:44:53.000Z, ,"['886141']", , , ,0.28,89.99 +16735.0,send package,2020-02-06 10:52:05.000Z, , , ,"['660978']", ,5.941,5663.96 +16736.0,pick item,2020-02-06 10:55:13.000Z, ,"['886110']", , , ,0.2,39.99 +16737.0,pick item,2020-02-06 11:08:01.000Z, ,"['886142']", , , ,0.38,29.99 +16738.0,pay order,2020-02-06 11:41:01.000Z, , ,"['991385']", , ,0.166,804.0 +16739.0,send package,2020-02-06 11:45:01.000Z, , , ,"['660980']", ,2.798,1463.97 +16740.0,pick item,2020-02-06 11:52:33.000Z, ,"['886226']", , , ,0.21,529.0 +16741.0,pay order,2020-02-06 11:59:35.000Z, , ,"['991514']", , ,3.9,3023.97 +16742.0,package delivered,2020-02-06 12:02:31.000Z, , , ,"['660978']", ,5.941,5663.96 +16743.0,confirm order,2020-02-06 12:08:07.000Z, , ,"['991516']", , ,1.535,1892.99 +16744.0,reorder item,2020-02-06 12:08:42.000Z, ,"['886087']", , , ,0.21,529.0 +16745.0,reorder item,2020-02-06 12:10:58.000Z, ,"['886168']", , , ,1.48,199.99 +16746.0,item out of stock,2020-02-06 12:22:20.000Z, ,"['886211']", , , ,0.44,476.0 +16747.0,place order,2020-02-06 12:29:34.000Z, ,"['886227','886229','886228']","['991526']", , ,1.035,1832.99 +16748.0,pick item,2020-02-06 12:30:17.000Z, ,"['886229']", , , ,0.172,699.0 +16749.0,create package,2020-02-06 12:30:17.000Z, ,"['886156','886148','886031','885930','886147','885918','886063','885503','886149']", ,"['660981']", ,6.712999999999999,8361.98 +16750.0,pick item,2020-02-06 12:41:13.000Z, ,"['886191']", , , ,0.483,495.0 +16751.0,pick item,2020-02-06 12:50:34.000Z, ,"['885974']", , , ,0.88,89.99 +16752.0,pick item,2020-02-06 12:58:33.000Z, ,"['886219']", , , ,0.188,1149.0 +16753.0,pick item,2020-02-06 13:03:34.000Z, ,"['886193']", , , ,0.28,449.0 +16754.0,pick item,2020-02-06 13:05:36.000Z, ,"['886202']", , , ,0.28,89.99 +16755.0,pick item,2020-02-06 13:09:14.000Z, ,"['886116']", , , ,0.483,495.0 +16756.0,pick item,2020-02-06 13:18:08.000Z, ,"['886158']", , , ,1.37,2500.0 +16757.0,pick item,2020-02-06 13:24:15.000Z, ,"['886221']", , , ,0.44,476.0 +16758.0,item out of stock,2020-02-06 13:29:17.000Z, ,"['886174']", , , ,0.38,29.99 +16759.0,item out of stock,2020-02-06 13:44:05.000Z, ,"['886194']", , , ,0.44,476.0 +16760.0,pick item,2020-02-06 13:47:17.000Z, ,"['886123']", , , ,0.188,1149.0 +16761.0,create package,2020-02-06 13:47:17.000Z, ,"['886210','886209','886151','886217','886229','886150','886130','886216','886131','886132','886086']", ,"['660982']", ,6.805,4071.94 +16762.0,pick item,2020-02-06 13:52:16.000Z, ,"['886188']", , , ,1.48,199.99 +16763.0,pick item,2020-02-06 14:08:38.000Z, ,"['886146']", , , ,0.98,129.99 +16764.0,confirm order,2020-02-06 14:13:19.000Z, , ,"['991524']", , ,2.96,2568.98 +16765.0,reorder item,2020-02-06 14:15:49.000Z, ,"['886175']", , , ,0.172,699.0 +16766.0,pick item,2020-02-06 14:16:02.000Z, ,"['885934']", , , ,0.483,495.0 +16767.0,pay order,2020-02-06 14:16:13.000Z, , ,"['991386']", , ,1.92,680.99 +16768.0,place order,2020-02-06 14:18:55.000Z, ,"['886230']","['991527']", , ,0.38,34.99 +16769.0,send package,2020-02-06 14:27:18.000Z, , , ,"['660977']", ,5.895,2267.93 +16770.0,package delivered,2020-02-06 14:33:05.000Z, , , ,"['660977']", ,5.895,2267.93 +16771.0,reorder item,2020-02-06 14:35:59.000Z, ,"['886211']", , , ,0.44,476.0 +16772.0,confirm order,2020-02-06 14:37:55.000Z, , ,"['991518']", , ,0.21,534.0 +16773.0,pick item,2020-02-06 14:48:32.000Z, ,"['886176']", , , ,0.88,89.99 +16774.0,pay order,2020-02-06 14:52:35.000Z, , ,"['991468']", , ,1.027,2541.99 +16775.0,package delivered,2020-02-06 14:56:14.000Z, , , ,"['660980']", ,2.798,1463.97 +16776.0,confirm order,2020-02-06 14:56:35.000Z, , ,"['991525']", , ,0.97,593.98 +16777.0,pick item,2020-02-06 15:00:25.000Z, ,"['886224']", , , ,0.38,29.99 +16778.0,item out of stock,2020-02-06 15:07:46.000Z, ,"['886227']", , , ,0.38,29.99 +16779.0,pick item,2020-02-06 15:08:24.000Z, ,"['886155']", , , ,0.44,476.0 +16780.0,reorder item,2020-02-06 15:15:59.000Z, ,"['886160']", , , ,0.44,476.0 +16781.0,pick item,2020-02-06 15:18:41.000Z, ,"['886205']", , , ,0.483,495.0 +16782.0,send package,2020-02-06 15:18:55.000Z, , , ,"['660982']", ,6.805,4071.94 +16783.0,pick item,2020-02-06 15:21:40.000Z, ,"['885813']", , , ,0.495,129.0 +16784.0,reorder item,2020-02-06 15:34:03.000Z, ,"['886227']", , , ,0.38,29.99 +16785.0,pick item,2020-02-06 15:37:38.000Z, ,"['886181']", , , ,0.21,529.0 +16786.0,pick item,2020-02-06 15:43:07.000Z, ,"['886179']", , , ,0.28,89.99 +16787.0,send package,2020-02-06 15:56:16.000Z, , , ,"['660981']", ,6.712999999999999,8361.98 +16788.0,place order,2020-02-06 15:57:37.000Z, ,"['886233','886232','886231']","['991528']", , ,2.041,4753.0 +16789.0,pick item,2020-02-06 16:00:47.000Z, ,"['886208']", , , ,0.483,79.99 +16790.0,create package,2020-02-06 16:00:47.000Z, ,"['886126','886129','886127']", ,"['660983']", ,2.522,3328.99 +16791.0,reorder item,2020-02-06 16:18:18.000Z, ,"['886101']", , , ,0.28,89.99 +16792.0,pick item,2020-02-06 16:25:47.000Z, ,"['886054']", , , ,0.166,799.0 +16793.0,pay order,2020-02-06 16:44:47.000Z, , ,"['991518']", , ,0.21,534.0 +16794.0,pick item,2020-02-06 17:20:14.000Z, ,"['886157']", , , ,0.483,1099.0 +16795.0,package delivered,2020-02-06 17:52:04.000Z, , , ,"['660979']", ,4.541,3745.96 +16796.0,pick item,2020-02-06 17:57:43.000Z, ,"['886101']", , , ,0.28,89.99 +16797.0,create package,2020-02-06 17:57:43.000Z, ,"['886116','885853','886118','886117']", ,"['660984']", ,1.456,2212.99 +16798.0,reorder item,2020-02-06 18:01:19.000Z, ,"['886091']", , , ,0.483,1099.0 +16799.0,confirm order,2020-02-06 18:03:52.000Z, , ,"['991526']", , ,1.035,1832.99 +16800.0,place order,2020-02-06 18:15:02.000Z, ,"['886239','886236','886235','886237','886238','886234']","['991529']", , ,2.052,2399.98 +16801.0,pick item,2020-02-06 18:38:05.000Z, ,"['886109']", , , ,0.38,29.99 +16802.0,pick item,2020-02-06 19:52:39.000Z, ,"['885756']", , , ,0.483,1099.0 +16803.0,place order,2020-02-06 21:09:39.000Z, ,"['886240','886244','886243','886241','886242']","['991530']", , ,4.873,3089.97 +16804.0,place order,2020-02-07 07:10:52.000Z, ,"['886252','886253','886256','886248','886247','886245','886255','886246','886250','886254','886249','886251']","['991531']", , ,7.364,6717.96 +16805.0,pick item,2020-02-07 07:17:17.000Z, ,"['885973']", , , ,0.88,89.99 +16806.0,item out of stock,2020-02-07 07:18:48.000Z, ,"['886182']", , , ,0.483,1099.0 +16807.0,pick item,2020-02-07 07:36:06.000Z, ,"['886035']", , , ,0.188,1149.0 +16808.0,create package,2020-02-07 07:36:06.000Z, ,"['885766']", ,"['660985']", ,0.28,89.99 +16809.0,pick item,2020-02-07 07:42:33.000Z, ,"['886200']", , , ,0.166,799.0 +16810.0,create package,2020-02-07 07:42:33.000Z, ,"['886076','886202','886176','886201','886177']", ,"['660986']", ,3.903,1578.96 +16811.0,pick item,2020-02-07 08:10:08.000Z, ,"['886232']", , , ,1.37,2500.0 +16812.0,pick item,2020-02-07 08:35:19.000Z, ,"['886227']", , , ,0.38,29.99 +16813.0,send package,2020-02-07 08:42:00.000Z, , , ,"['660985']", ,0.28,89.99 +16814.0,confirm order,2020-02-07 08:55:03.000Z, , ,"['991528']", , ,2.041,4753.0 +16815.0,place order,2020-02-07 09:06:06.000Z, ,"['886263','886261','886262','886259','886260','886258','886257']","['991532']", , ,2.286,2196.98 +16816.0,pick item,2020-02-07 09:06:31.000Z, ,"['886239']", , , ,0.483,495.0 +16817.0,item out of stock,2020-02-07 09:06:46.000Z, ,"['886099']", , , ,0.495,129.0 +16818.0,pay order,2020-02-07 09:12:49.000Z, , ,"['991475']", , ,4.875,2920.96 +16819.0,item out of stock,2020-02-07 09:13:32.000Z, ,"['886223']", , , ,0.88,89.99 +16820.0,pick item,2020-02-07 09:29:01.000Z, ,"['886184']", , , ,0.483,79.99 +16821.0,pick item,2020-02-07 09:34:47.000Z, ,"['886183']", , , ,0.166,799.0 +16822.0,create package,2020-02-07 09:34:47.000Z, ,"['886221','886220','886232','886219','885730']", ,"['660987']", ,2.653,5319.0 +16823.0,pick item,2020-02-07 09:35:57.000Z, ,"['886261']", , , ,0.28,89.99 +16824.0,pay order,2020-02-07 09:36:44.000Z, , ,"['991505']", , ,0.8320000000000001,823.98 +16825.0,pick item,2020-02-07 09:45:15.000Z, ,"['886102']", , , ,0.44,476.0 +16826.0,confirm order,2020-02-07 09:52:50.000Z, , ,"['991522']", , ,2.8560000000000003,1763.98 +16827.0,confirm order,2020-02-07 09:54:15.000Z, , ,"['991530']", , ,4.873,3089.97 +16828.0,pay order,2020-02-07 09:56:57.000Z, , ,"['991504']", , ,1.463,1382.99 +16829.0,pick item,2020-02-07 09:57:56.000Z, ,"['886249']", , , ,0.483,1099.0 +16830.0,send package,2020-02-07 10:11:26.000Z, , , ,"['660984']", ,1.456,2212.99 +16831.0,confirm order,2020-02-07 10:11:28.000Z, , ,"['991529']", , ,2.052,2399.98 +16832.0,pick item,2020-02-07 10:24:54.000Z, ,"['886187']", , , ,0.78,99.99 +16833.0,pick item,2020-02-07 10:27:47.000Z, ,"['886240']", , , ,1.25,2200.0 +16834.0,create package,2020-02-07 10:27:47.000Z, ,"['886145','886144','886146','886167']", ,"['660988']", ,2.698,3927.99 +16835.0,place order,2020-02-07 10:31:59.000Z, ,"['886266','886265','886264']","['991533']", , ,1.4480000000000002,1373.98 +16836.0,pay order,2020-02-07 10:47:55.000Z, , ,"['991529']", , ,2.052,2399.98 +16837.0,package delivered,2020-02-07 10:52:44.000Z, , , ,"['660981']", ,6.712999999999999,8361.98 +16838.0,pay order,2020-02-07 10:59:30.000Z, , ,"['991495']", , ,0.552,733.99 +16839.0,send package,2020-02-07 11:00:40.000Z, , , ,"['660986']", ,3.903,1578.96 +16840.0,pick item,2020-02-07 11:03:06.000Z, ,"['886236']", , , ,0.44,476.0 +16841.0,pick item,2020-02-07 11:05:30.000Z, ,"['886171']", , , ,0.78,99.99 +16842.0,item out of stock,2020-02-07 11:07:16.000Z, ,"['886259']", , , ,0.495,129.0 +16843.0,item out of stock,2020-02-07 11:17:22.000Z, ,"['886233']", , , ,0.483,1099.0 +16844.0,pay order,2020-02-07 12:09:56.000Z, , ,"['991506']", , ,2.418,3483.99 +16845.0,place order,2020-02-07 12:23:46.000Z, ,"['886270','886267','886269','886268']","['991534']", , ,1.812,1312.98 +16846.0,item out of stock,2020-02-07 12:31:19.000Z, ,"['886189']", , , ,0.172,699.0 +16847.0,pick item,2020-02-07 12:35:24.000Z, ,"['886088']", , , ,0.483,495.0 +16848.0,confirm order,2020-02-07 12:48:59.000Z, , ,"['991533']", , ,1.4480000000000002,1373.98 +16849.0,pick item,2020-02-07 12:56:39.000Z, ,"['886222']", , , ,1.28,149.99 +16850.0,create package,2020-02-07 12:56:39.000Z, ,"['886187','886190','886192','886200','886196','885974','886193','886197','886191','886188','886028','885973']", ,"['660989']", ,7.617000000000001,6390.94 +16851.0,pick item,2020-02-07 12:57:38.000Z, ,"['886204']", , , ,1.48,199.99 +16852.0,pick item,2020-02-07 12:57:49.000Z, ,"['886253']", , , ,0.166,799.0 +16853.0,package delivered,2020-02-07 13:00:22.000Z, , , ,"['660985']", ,0.28,89.99 +16854.0,pick item,2020-02-07 13:14:08.000Z, ,"['886218']", , , ,0.172,699.0 +16855.0,pick item,2020-02-07 13:27:03.000Z, ,"['886207']", , , ,0.483,495.0 +16856.0,confirm order,2020-02-07 13:28:43.000Z, , ,"['991532']", , ,2.286,2196.98 +16857.0,pick item,2020-02-07 13:43:26.000Z, ,"['886260']", , , ,0.495,129.0 +16858.0,pick item,2020-02-07 13:46:19.000Z, ,"['886252']", , , ,0.28,449.0 +16859.0,pick item,2020-02-07 14:02:04.000Z, ,"['886237']", , , ,0.483,495.0 +16860.0,place order,2020-02-07 14:07:19.000Z, ,"['886274','886272','886273','886271']","['991535']", , ,4.11,2864.97 +16861.0,pick item,2020-02-07 14:19:54.000Z, ,"['886267']", , , ,0.28,449.0 +16862.0,package delivered,2020-02-07 14:23:00.000Z, , , ,"['660986']", ,3.903,1578.96 +16863.0,pick item,2020-02-07 14:27:26.000Z, ,"['886186']", , , ,0.88,89.99 +16864.0,send package,2020-02-07 14:43:25.000Z, , , ,"['660988']", ,2.698,3927.99 +16865.0,pick item,2020-02-07 14:45:31.000Z, ,"['886159']", , , ,0.78,99.99 +16866.0,pick item,2020-02-07 14:51:30.000Z, ,"['886272']", , , ,0.98,129.99 +16867.0,confirm order,2020-02-07 14:55:39.000Z, , ,"['991527']", , ,0.38,34.99 +16868.0,package delivered,2020-02-07 14:57:10.000Z, , , ,"['660984']", ,1.456,2212.99 +16869.0,pick item,2020-02-07 15:07:26.000Z, ,"['886128']", , , ,0.495,129.0 +16870.0,create package,2020-02-07 15:07:26.000Z, ,"['885563','886178','886179','886181']", ,"['660990']", ,3.05,918.97 +16871.0,place order,2020-02-07 15:34:25.000Z, ,"['886278','886277','886276','886275']","['991536']", , ,1.376,2911.0 +16872.0,send package,2020-02-07 15:37:05.000Z, , , ,"['660983']", ,2.522,3328.99 +16873.0,confirm order,2020-02-07 15:37:17.000Z, , ,"['991534']", , ,1.812,1312.98 +16874.0,item out of stock,2020-02-07 15:37:24.000Z, ,"['886244']", , , ,0.483,495.0 +16875.0,pick item,2020-02-07 15:38:15.000Z, ,"['885969']", , , ,1.28,149.99 +16876.0,pick item,2020-02-07 15:39:02.000Z, ,"['885868']", , , ,0.483,1099.0 +16877.0,pick item,2020-02-07 15:46:58.000Z, ,"['886278']", , , ,0.483,1099.0 +16878.0,send package,2020-02-07 15:56:37.000Z, , , ,"['660987']", ,2.653,5319.0 +16879.0,reorder item,2020-02-07 15:57:52.000Z, ,"['886233']", , , ,0.483,1099.0 +16880.0,package delivered,2020-02-07 16:07:40.000Z, , , ,"['660982']", ,6.805,4071.94 +16881.0,pick item,2020-02-07 16:18:54.000Z, ,"['886263']", , , ,0.21,529.0 +16882.0,create package,2020-02-07 16:18:54.000Z, ,"['886204','886207','886107','886123','886109','886203','886205','886206']", ,"['660991']", ,4.704,3087.96 +16883.0,pick item,2020-02-07 16:26:59.000Z, ,"['886163']", , , ,0.483,79.99 +16884.0,pick item,2020-02-07 16:31:09.000Z, ,"['886255']", , , ,0.483,79.99 +16885.0,failed delivery,2020-02-07 16:38:25.000Z, , , ,"['660988']", ,2.698,3927.99 +16886.0,pick item,2020-02-07 16:40:08.000Z, ,"['886112']", , , ,0.483,1099.0 +16887.0,place order,2020-02-07 17:28:38.000Z, ,"['886280','886279']","['991537']", , ,1.26,583.99 +16888.0,item out of stock,2020-02-07 17:31:28.000Z, ,"['886275']", , , ,0.495,129.0 +16889.0,pick item,2020-02-07 18:05:55.000Z, ,"['886198']", , , ,0.495,129.0 +16890.0,pick item,2020-02-07 18:23:57.000Z, ,"['886241']", , , ,1.48,199.99 +16891.0,pick item,2020-02-07 18:38:01.000Z, ,"['886245']", , , ,0.495,129.0 +16892.0,place order,2020-02-07 20:05:29.000Z, ,"['886281','886282','886284','886283']","['991538']", , ,3.176,3652.99 +16893.0,pick item,2020-02-07 20:06:06.000Z, ,"['886280']", , , ,0.28,449.0 +16894.0,confirm order,2020-02-07 20:17:34.000Z, , ,"['991531']", , ,7.364,6717.96 +16895.0,pay order,2020-02-07 20:27:03.000Z, , ,"['991474']", , ,1.862,1432.99 +16896.0,pick item,2020-02-07 20:43:32.000Z, ,"['886230']", , , ,0.38,29.99 +16897.0,create package,2020-02-07 20:43:32.000Z, ,"['886172','886141','886142','886171','886112','886110','886035']", ,"['660992']", ,3.1910000000000003,2597.95 +16898.0,pick item,2020-02-07 20:47:15.000Z, ,"['886270']", , , ,0.172,699.0 +16899.0,place order,2020-02-08 09:32:48.000Z, ,"['886285','886286']","['991539']", , ,1.66,184.98 +16900.0,payment reminder,2020-02-08 15:56:09.000Z, , ,"['991300']", , ,1.246,1028.99 +16901.0,create package,2020-02-08 23:00:00.000Z, ,"['885922','886230']", ,"['660993']", ,1.26,119.98 +16902.0,payment reminder,2020-02-09 09:24:22.000Z, , ,"['991415']", , ,1.526,1722.98 +16903.0,place order,2020-02-09 09:59:30.000Z, ,"['886289','886295','886290','886287','886294','886293','886292','886288','886291']","['991540']", , ,7.353,2181.94 +16904.0,payment reminder,2020-02-09 10:41:45.000Z, , ,"['991405']", , ,2.65,2654.99 +16905.0,payment reminder,2020-02-09 15:26:27.000Z, , ,"['991416']", , ,0.483,500.0 +16906.0,payment reminder,2020-02-09 16:25:37.000Z, , ,"['991410']", , ,3.994,4269.98 +16907.0,place order,2020-02-10 03:10:54.000Z, ,"['886296']","['991541']", , ,1.25,2205.0 +16908.0,pick item,2020-02-10 07:26:52.000Z, ,"['886214']", , , ,0.2,39.99 +16909.0,reorder item,2020-02-10 07:32:05.000Z, ,"['886223']", , , ,0.88,89.99 +16910.0,failed delivery,2020-02-10 07:58:13.000Z, , , ,"['660987']", ,2.653,5319.0 +16911.0,reorder item,2020-02-10 08:04:53.000Z, ,"['886244']", , , ,0.483,495.0 +16912.0,pay order,2020-02-10 08:16:49.000Z, , ,"['991496']", , ,1.246,1688.99 +16913.0,send package,2020-02-10 08:16:54.000Z, , , ,"['660991']", ,4.704,3087.96 +16914.0,pick item,2020-02-10 08:18:08.000Z, ,"['886266']", , , ,0.98,129.99 +16915.0,item out of stock,2020-02-10 08:19:25.000Z, ,"['886251']", , , ,0.38,29.99 +16916.0,item out of stock,2020-02-10 08:21:38.000Z, ,"['886281']", , , ,0.166,799.0 +16917.0,pick item,2020-02-10 08:33:05.000Z, ,"['886291']", , , ,0.495,129.0 +16918.0,reorder item,2020-02-10 08:36:21.000Z, ,"['886106']", , , ,0.88,89.99 +16919.0,place order,2020-02-10 08:37:47.000Z, ,"['886300','886301','886302','886297','886299','886298']","['991542']", , ,2.084,4446.99 +16920.0,send package,2020-02-10 08:45:47.000Z, , , ,"['660992']", ,3.1910000000000003,2597.95 +16921.0,package delivered,2020-02-10 08:46:52.000Z, , , ,"['660983']", ,2.522,3328.99 +16922.0,pick item,2020-02-10 08:48:49.000Z, ,"['886293']", , , ,0.78,99.99 +16923.0,pick item,2020-02-10 08:48:52.000Z, ,"['886225']", , , ,0.38,29.99 +16924.0,item out of stock,2020-02-10 09:00:55.000Z, ,"['886256']", , , ,0.28,449.0 +16925.0,pay order,2020-02-10 09:12:57.000Z, , ,"['991502']", , ,1.42,610.99 +16926.0,send package,2020-02-10 09:15:29.000Z, , , ,"['660989']", ,7.617000000000001,6390.94 +16927.0,pick item,2020-02-10 09:28:06.000Z, ,"['886212']", , , ,0.166,799.0 +16928.0,confirm order,2020-02-10 09:32:13.000Z, , ,"['991541']", , ,1.25,2205.0 +16929.0,pick item,2020-02-10 09:35:31.000Z, ,"['886234']", , , ,0.166,799.0 +16930.0,pick item,2020-02-10 09:36:25.000Z, ,"['886283']", , , ,1.48,199.99 +16931.0,create package,2020-02-10 09:36:25.000Z, ,"['886069','886226','886225','886224']", ,"['660994']", ,1.465,717.98 +16932.0,confirm order,2020-02-10 09:48:22.000Z, , ,"['991538']", , ,3.176,3652.99 +16933.0,pick item,2020-02-10 09:57:27.000Z, ,"['885290']", , , ,0.78,99.99 +16934.0,pick item,2020-02-10 10:00:23.000Z, ,"['885924']", , , ,0.78,99.99 +16935.0,confirm order,2020-02-10 10:31:24.000Z, , ,"['991536']", , ,1.376,2911.0 +16936.0,place order,2020-02-10 10:35:21.000Z, ,"['886305','886304','886307','886303','886306']","['991543']", , ,2.757,3727.99 +16937.0,pick item,2020-02-10 10:45:44.000Z, ,"['886106']", , , ,0.88,89.99 +16938.0,pick item,2020-02-10 10:49:36.000Z, ,"['886238']", , , ,0.28,89.99 +16939.0,create package,2020-02-10 10:49:36.000Z, ,"['886234','886157','886240','886236','886159','885756','886102','886155','886241','886239','886101','886237','886238','886054','886158']", ,"['660995']", ,9.024,11393.96 +16940.0,pay order,2020-02-10 11:06:06.000Z, , ,"['991009']", , ,2.613,3578.98 +16941.0,reorder item,2020-02-10 11:10:31.000Z, ,"['886174']", , , ,0.38,29.99 +16942.0,pick item,2020-02-10 11:14:30.000Z, ,"['886121']", , , ,0.98,129.99 +16943.0,pick item,2020-02-10 11:17:37.000Z, ,"['886199']", , , ,0.38,29.99 +16944.0,pick item,2020-02-10 11:19:33.000Z, ,"['886228']", , , ,0.483,1099.0 +16945.0,item out of stock,2020-02-10 11:24:58.000Z, ,"['886213']", , , ,0.78,99.99 +16946.0,pick item,2020-02-10 11:39:19.000Z, ,"['886231']", , , ,0.188,1149.0 +16947.0,pick item,2020-02-10 11:49:14.000Z, ,"['886242']", , , ,0.88,89.99 +16948.0,pick item,2020-02-10 11:56:11.000Z, ,"['885990']", , , ,0.78,99.99 +16949.0,pay order,2020-02-10 11:58:52.000Z, , ,"['991526']", , ,1.035,1832.99 +16950.0,reorder item,2020-02-10 12:17:58.000Z, ,"['886275']", , , ,0.495,129.0 +16951.0,place order,2020-02-10 12:30:29.000Z, ,"['886308','886309']","['991544']", , ,1.853,3604.0 +16952.0,pick item,2020-02-10 12:34:00.000Z, ,"['886165']", , , ,0.44,476.0 +16953.0,pick item,2020-02-10 12:34:43.000Z, ,"['886250']", , , ,1.48,199.99 +16954.0,pay order,2020-02-10 12:48:50.000Z, , ,"['991405']", , ,2.65,2654.99 +16955.0,pick item,2020-02-10 12:56:44.000Z, ,"['886288']", , , ,1.48,199.99 +16956.0,send package,2020-02-10 12:57:17.000Z, , , ,"['660993']", ,1.26,119.98 +16957.0,pick item,2020-02-10 13:02:57.000Z, ,"['886120']", , , ,0.495,129.0 +16958.0,pay order,2020-02-10 13:20:22.000Z, , ,"['991444']", , ,2.095,1148.99 +16959.0,pay order,2020-02-10 13:33:17.000Z, , ,"['991410']", , ,3.994,4269.98 +16960.0,package delivered,2020-02-10 13:38:59.000Z, , , ,"['660987']", ,2.653,5319.0 +16961.0,send package,2020-02-10 13:40:27.000Z, , , ,"['660990']", ,3.05,918.97 +16962.0,item out of stock,2020-02-10 13:50:04.000Z, ,"['886285']", , , ,0.38,29.99 +16963.0,pick item,2020-02-10 13:53:56.000Z, ,"['886274']", , , ,0.98,129.99 +16964.0,item out of stock,2020-02-10 14:18:35.000Z, ,"['886153']", , , ,1.37,2500.0 +16965.0,pick item,2020-02-10 14:20:39.000Z, ,"['886292']", , , ,0.28,89.99 +16966.0,place order,2020-02-10 14:20:46.000Z, ,"['886311','886312','886318','886315','886316','886313','886317','886310','886314']","['991545']", , ,6.997999999999998,6458.95 +16967.0,item out of stock,2020-02-10 14:31:40.000Z, ,"['886215']", , , ,0.495,129.0 +16968.0,item out of stock,2020-02-10 14:45:36.000Z, ,"['886284']", , , ,1.25,2200.0 +16969.0,send package,2020-02-10 14:46:29.000Z, , , ,"['660994']", ,1.465,717.98 +16970.0,confirm order,2020-02-10 14:50:29.000Z, , ,"['991540']", , ,7.353,2181.94 +16971.0,pick item,2020-02-10 14:52:37.000Z, ,"['886269']", , , ,0.98,129.99 +16972.0,pick item,2020-02-10 14:53:01.000Z, ,"['886318']", , , ,0.172,699.0 +16973.0,item out of stock,2020-02-10 14:59:49.000Z, ,"['886295']", , , ,0.495,129.0 +16974.0,pick item,2020-02-10 15:07:03.000Z, ,"['886304']", , , ,0.483,1099.0 +16975.0,create package,2020-02-10 15:07:03.000Z, ,"['886263','886261','886260','885934']", ,"['660996']", ,1.4680000000000002,1242.99 +16976.0,pick item,2020-02-10 15:16:33.000Z, ,"['886264']", , , ,0.188,1149.0 +16977.0,pay order,2020-02-10 15:17:16.000Z, , ,"['991454']", , ,1.865,2634.0 +16978.0,pay order,2020-02-10 15:17:42.000Z, , ,"['991497']", , ,3.235,912.98 +16979.0,reorder item,2020-02-10 15:20:56.000Z, ,"['886213']", , , ,0.78,99.99 +16980.0,package delivered,2020-02-10 15:22:13.000Z, , , ,"['660989']", ,7.617000000000001,6390.94 +16981.0,pay order,2020-02-10 15:25:57.000Z, , ,"['991501']", , ,3.04,384.97 +16982.0,pick item,2020-02-10 15:35:08.000Z, ,"['886152']", , , ,1.28,149.99 +16983.0,payment reminder,2020-02-10 15:42:48.000Z, , ,"['991315']", , ,1.81,2981.0 +16984.0,pick item,2020-02-10 15:47:54.000Z, ,"['886013']", , , ,0.21,529.0 +16985.0,pick item,2020-02-10 15:51:54.000Z, ,"['886317']", , , ,1.37,2500.0 +16986.0,create package,2020-02-10 15:51:54.000Z, ,"['886227','886280','885813','886152','886208','886218','886214','886212','886228']", ,"['660997']", ,3.939,3474.96 +16987.0,place order,2020-02-10 16:01:19.000Z, ,"['886320','886321','886319','886322']","['991546']", , ,2.373,1268.98 +16988.0,confirm order,2020-02-10 16:04:09.000Z, , ,"['991543']", , ,2.757,3727.99 +16989.0,send package,2020-02-10 16:04:55.000Z, , , ,"['660995']", ,9.024,11393.96 +16990.0,item out of stock,2020-02-10 16:06:15.000Z, ,"['886185']", , , ,0.88,89.99 +16991.0,package delivered,2020-02-10 16:10:47.000Z, , , ,"['660993']", ,1.26,119.98 +16992.0,pick item,2020-02-10 16:12:51.000Z, ,"['886282']", , , ,0.28,449.0 +16993.0,pick item,2020-02-10 16:13:17.000Z, ,"['886091']", , , ,0.483,1099.0 +16994.0,pick item,2020-02-10 16:23:13.000Z, ,"['886302']", , , ,0.28,89.99 +16995.0,reorder item,2020-02-10 16:40:39.000Z, ,"['886295']", , , ,0.495,129.0 +16996.0,payment reminder,2020-02-10 16:40:51.000Z, , ,"['991314']", , ,4.206,2008.97 +16997.0,payment reminder,2020-02-10 16:47:16.000Z, , ,"['991422']", , ,1.916,3333.99 +16998.0,pick item,2020-02-10 16:54:20.000Z, ,"['885846']", , , ,0.78,99.99 +16999.0,pick item,2020-02-10 16:59:14.000Z, ,"['886299']", , , ,0.483,1099.0 +17000.0,item out of stock,2020-02-10 17:09:25.000Z, ,"['886286']", , , ,1.28,149.99 +17001.0,reorder item,2020-02-10 17:15:29.000Z, ,"['886251']", , , ,0.38,29.99 +17002.0,pick item,2020-02-10 17:17:22.000Z, ,"['886300']", , , ,0.21,529.0 +17003.0,reorder item,2020-02-10 17:17:23.000Z, ,"['886256']", , , ,0.28,449.0 +17004.0,place order,2020-02-10 17:22:26.000Z, ,"['886326','886323','886325','886324']","['991547']", , ,2.423,1383.97 +17005.0,package delivered,2020-02-10 17:22:38.000Z, , , ,"['660988']", ,2.698,3927.99 +17006.0,confirm order,2020-02-10 17:23:38.000Z, , ,"['991537']", , ,1.26,583.99 +17007.0,pick item,2020-02-10 17:26:39.000Z, ,"['886277']", , , ,0.188,1149.0 +17008.0,pick item,2020-02-10 17:29:11.000Z, ,"['886273']", , , ,1.37,2500.0 +17009.0,pick item,2020-02-10 17:40:09.000Z, ,"['886307']", , , ,0.166,799.0 +17010.0,create package,2020-02-10 17:40:09.000Z, ,"['886183','886318','886288','886293','886292','886317','886291','886184','886128']", ,"['660998']", ,5.721,4725.96 +17011.0,package delivered,2020-02-10 18:08:40.000Z, , , ,"['660994']", ,1.465,717.98 +17012.0,pick item,2020-02-10 18:30:44.000Z, ,"['885832']", , , ,0.28,449.0 +17013.0,pay order,2020-02-10 18:44:17.000Z, , ,"['991517']", , ,3.04,444.97 +17014.0,place order,2020-02-10 19:46:52.000Z, ,"['886328','886327']","['991548']", , ,1.72,630.99 +17015.0,pick item,2020-02-10 20:35:42.000Z, ,"['886276']", , , ,0.21,529.0 +17016.0,confirm order,2020-02-10 20:36:27.000Z, , ,"['991542']", , ,2.084,4446.99 +17017.0,place order,2020-02-11 00:59:07.000Z, ,"['886329','886330']","['991549']", , ,1.452,853.99 +17018.0,confirm order,2020-02-11 07:10:25.000Z, , ,"['991535']", , ,4.11,2864.97 +17019.0,send package,2020-02-11 07:26:42.000Z, , , ,"['660996']", ,1.4680000000000002,1242.99 +17020.0,item out of stock,2020-02-11 07:30:51.000Z, ,"['886322']", , , ,0.21,529.0 +17021.0,pick item,2020-02-11 07:34:10.000Z, ,"['886279']", , , ,0.98,129.99 +17022.0,package delivered,2020-02-11 07:43:19.000Z, , , ,"['660990']", ,3.05,918.97 +17023.0,reorder item,2020-02-11 07:50:13.000Z, ,"['886185']", , , ,0.88,89.99 +17024.0,pick item,2020-02-11 08:00:18.000Z, ,"['886287']", , , ,1.48,199.99 +17025.0,pick item,2020-02-11 08:01:38.000Z, ,"['886258']", , , ,0.166,799.0 +17026.0,confirm order,2020-02-11 08:07:02.000Z, , ,"['991545']", , ,6.997999999999998,6458.95 +17027.0,pick item,2020-02-11 08:26:10.000Z, ,"['886290']", , , ,1.48,199.99 +17028.0,failed delivery,2020-02-11 08:26:47.000Z, , , ,"['660992']", ,3.1910000000000003,2597.95 +17029.0,reorder item,2020-02-11 08:29:33.000Z, ,"['886281']", , , ,0.166,799.0 +17030.0,reorder item,2020-02-11 08:34:18.000Z, ,"['886099']", , , ,0.495,129.0 +17031.0,pick item,2020-02-11 08:58:22.000Z, ,"['885967']", , , ,0.98,129.99 +17032.0,pick item,2020-02-11 09:05:23.000Z, ,"['886087']", , , ,0.21,529.0 +17033.0,pick item,2020-02-11 09:11:18.000Z, ,"['886324']", , , ,0.483,1099.0 +17034.0,create package,2020-02-11 09:11:18.000Z, ,"['886245','886252','886253','886250','886255','886249']", ,"['660999']", ,3.387,2755.98 +17035.0,place order,2020-02-11 09:12:49.000Z, ,"['886333','886334','886331','886336','886332','886335']","['991550']", , ,4.843,5730.97 +17036.0,confirm order,2020-02-11 09:21:07.000Z, , ,"['991539']", , ,1.66,184.98 +17037.0,pay order,2020-02-11 09:35:37.000Z, , ,"['991538']", , ,3.176,3652.99 +17038.0,item out of stock,2020-02-11 09:39:03.000Z, ,"['886243']", , , ,0.78,99.99 +17039.0,failed delivery,2020-02-11 09:42:55.000Z, , , ,"['660991']", ,4.704,3087.96 +17040.0,pick item,2020-02-11 09:54:14.000Z, ,"['886247']", , , ,0.172,699.0 +17041.0,item out of stock,2020-02-11 09:56:52.000Z, ,"['886309']", , , ,0.483,1099.0 +17042.0,reorder item,2020-02-11 10:06:25.000Z, ,"['886286']", , , ,1.28,149.99 +17043.0,pick item,2020-02-11 10:07:19.000Z, ,"['886281']", , , ,0.166,799.0 +17044.0,pick item,2020-02-11 10:09:27.000Z, ,"['886321']", , , ,1.48,199.99 +17045.0,confirm order,2020-02-11 10:11:10.000Z, , ,"['991548']", , ,1.72,630.99 +17046.0,send package,2020-02-11 10:16:50.000Z, , , ,"['660998']", ,5.721,4725.96 +17047.0,pay order,2020-02-11 10:27:59.000Z, , ,"['991520']", , ,7.754,5539.93 +17048.0,send package,2020-02-11 10:29:09.000Z, , , ,"['660999']", ,3.387,2755.98 +17049.0,pay order,2020-02-11 10:29:09.000Z, , ,"['991530']", , ,4.873,3089.97 +17050.0,confirm order,2020-02-11 10:29:36.000Z, , ,"['991549']", , ,1.452,853.99 +17051.0,reorder item,2020-02-11 10:30:40.000Z, ,"['886182']", , , ,0.483,1099.0 +17052.0,reorder item,2020-02-11 10:36:20.000Z, ,"['886194']", , , ,0.44,476.0 +17053.0,pay order,2020-02-11 10:37:23.000Z, , ,"['991494']", , ,1.376,1752.98 +17054.0,pay order,2020-02-11 10:41:34.000Z, , ,"['991545']", , ,6.997999999999998,6458.95 +17055.0,item out of stock,2020-02-11 10:42:43.000Z, ,"['886262']", , , ,0.2,39.99 +17056.0,place order,2020-02-11 10:45:25.000Z, ,"['886339','886337','886338']","['991551']", , ,0.855,1982.0 +17057.0,pick item,2020-02-11 10:49:42.000Z, ,"['886268']", , , ,0.38,29.99 +17058.0,package delivered,2020-02-11 10:50:08.000Z, , , ,"['660998']", ,5.721,4725.96 +17059.0,pick item,2020-02-11 11:10:47.000Z, ,"['886313']", , , ,0.483,495.0 +17060.0,send package,2020-02-11 11:20:02.000Z, , , ,"['660997']", ,3.939,3474.96 +17061.0,pick item,2020-02-11 11:43:04.000Z, ,"['886298']", , , ,0.44,476.0 +17062.0,create package,2020-02-11 11:43:04.000Z, ,"['886270','886267','886091','886269','886088','886163','886268','886165']", ,"['661000']", ,3.701,3457.97 +17063.0,pay order,2020-02-11 11:55:26.000Z, , ,"['991477']", , ,1.46,2734.0 +17064.0,failed delivery,2020-02-11 12:03:08.000Z, , , ,"['660991']", ,4.704,3087.96 +17065.0,pick item,2020-02-11 12:09:57.000Z, ,"['886235']", , , ,0.2,39.99 +17066.0,pick item,2020-02-11 12:29:12.000Z, ,"['886254']", , , ,1.37,2500.0 +17067.0,reorder item,2020-02-11 12:30:48.000Z, ,"['886259']", , , ,0.495,129.0 +17068.0,pay order,2020-02-11 12:36:27.000Z, , ,"['991401']", , ,3.13,3153.99 +17069.0,pick item,2020-02-11 12:43:35.000Z, ,"['886330']", , , ,1.28,149.99 +17070.0,place order,2020-02-11 12:50:37.000Z, ,"['886342','886347','886350','886345','886340','886348','886346','886341','886344','886349','886343','886351']","['991552']", , ,6.237,6293.95 +17071.0,package delivered,2020-02-11 12:57:12.000Z, , , ,"['660997']", ,3.939,3474.96 +17072.0,item out of stock,2020-02-11 13:16:29.000Z, ,"['886336']", , , ,0.98,129.99 +17073.0,pick item,2020-02-11 13:32:33.000Z, ,"['886257']", , , ,0.44,476.0 +17074.0,confirm order,2020-02-11 13:51:26.000Z, , ,"['991552']", , ,6.237,6293.95 +17075.0,pick item,2020-02-11 13:52:05.000Z, ,"['886342']", , , ,0.38,29.99 +17076.0,reorder item,2020-02-11 13:58:12.000Z, ,"['886309']", , , ,0.483,1099.0 +17077.0,pick item,2020-02-11 14:12:01.000Z, ,"['885712']", , , ,0.483,79.99 +17078.0,package delivered,2020-02-11 14:12:38.000Z, , , ,"['660999']", ,3.387,2755.98 +17079.0,confirm order,2020-02-11 14:14:18.000Z, , ,"['991546']", , ,2.373,1268.98 +17080.0,pay order,2020-02-11 14:22:19.000Z, , ,"['991478']", , ,2.16,244.98 +17081.0,pay order,2020-02-11 14:27:08.000Z, , ,"['991346']", , ,2.747,2397.98 +17082.0,pick item,2020-02-11 14:38:55.000Z, ,"['886326']", , , ,0.88,89.99 +17083.0,item out of stock,2020-02-11 14:46:09.000Z, ,"['886297']", , , ,0.188,1149.0 +17084.0,item out of stock,2020-02-11 14:52:38.000Z, ,"['886311']", , , ,1.25,2200.0 +17085.0,confirm order,2020-02-11 14:54:03.000Z, , ,"['991547']", , ,2.423,1383.97 +17086.0,pick item,2020-02-11 14:59:16.000Z, ,"['886331']", , , ,1.37,2500.0 +17087.0,create package,2020-02-11 14:59:16.000Z, ,"['885868','886330','886222','886231']", ,"['661001']", ,3.2310000000000003,2547.98 +17088.0,place order,2020-02-11 15:01:02.000Z, ,"['886354','886352','886353','886355']","['991553']", , ,4.53,2944.97 +17089.0,pick item,2020-02-11 15:01:07.000Z, ,"['886223']", , , ,0.88,89.99 +17090.0,pick item,2020-02-11 15:15:50.000Z, ,"['886233']", , , ,0.483,1099.0 +17091.0,pick item,2020-02-11 15:19:43.000Z, ,"['886339']", , , ,0.495,129.0 +17092.0,confirm order,2020-02-11 15:20:19.000Z, , ,"['991553']", , ,4.53,2944.97 +17093.0,reorder item,2020-02-11 15:36:02.000Z, ,"['886153']", , , ,1.37,2500.0 +17094.0,pick item,2020-02-11 15:54:24.000Z, ,"['886333']", , , ,0.2,39.99 +17095.0,create package,2020-02-11 15:54:24.000Z, ,"['886199','886276','886278','886277','886198','885712','886186']", ,"['661002']", ,3.119,3105.97 +17096.0,pick item,2020-02-11 15:55:04.000Z, ,"['886248']", , , ,1.28,149.99 +17097.0,payment reminder,2020-02-11 15:55:59.000Z, , ,"['991432']", , ,4.073,3742.97 +17098.0,pick item,2020-02-11 16:01:59.000Z, ,"['886310']", , , ,1.28,149.99 +17099.0,failed delivery,2020-02-11 16:16:02.000Z, , , ,"['660992']", ,3.1910000000000003,2597.95 +17100.0,place order,2020-02-11 16:21:51.000Z, ,"['886359','886362','886360','886357','886361','886356','886358']","['991554']", , ,3.0010000000000003,3520.97 +17101.0,package delivered,2020-02-11 16:22:53.000Z, , , ,"['660991']", ,4.704,3087.96 +17102.0,pay order,2020-02-11 16:32:47.000Z, , ,"['991315']", , ,1.81,2981.0 +17103.0,reorder item,2020-02-11 16:43:40.000Z, ,"['886297']", , , ,0.188,1149.0 +17104.0,payment reminder,2020-02-11 16:54:45.000Z, , ,"['991431']", , ,1.418,2331.99 +17105.0,pick item,2020-02-11 17:25:47.000Z, ,"['886294']", , , ,0.38,29.99 +17106.0,payment reminder,2020-02-11 17:45:00.000Z, , ,"['991440']", , ,1.475,263.99 +17107.0,pick item,2020-02-11 17:53:07.000Z, ,"['886319']", , , ,0.2,39.99 +17108.0,pay order,2020-02-11 18:00:09.000Z, , ,"['991314']", , ,4.206,2008.97 +17109.0,place order,2020-02-11 18:03:30.000Z, ,"['886364','886370','886366','886368','886365','886363','886369','886367']","['991555']", , ,5.024,2607.96 +17110.0,item out of stock,2020-02-11 18:05:13.000Z, ,"['886335']", , , ,0.44,476.0 +17111.0,pick item,2020-02-11 18:12:14.000Z, ,"['886323']", , , ,0.28,89.99 +17112.0,pick item,2020-02-11 18:19:09.000Z, ,"['886328']", , , ,0.44,476.0 +17113.0,pick item,2020-02-11 20:22:23.000Z, ,"['886315']", , , ,0.483,79.99 +17114.0,create package,2020-02-11 20:22:23.000Z, ,"['886339','886274','886342','886120','886272','886273','886121']", ,"['661003']", ,5.68,3177.96 +17115.0,place order,2020-02-11 20:46:34.000Z, ,"['886375','886372','886374','886373','886371','886376']","['991556']", , ,3.283,3281.97 +17116.0,place order,2020-02-12 05:57:19.000Z, ,"['886381','886378','886380','886377','886379']","['991557']", , ,3.5380000000000003,4391.99 +17117.0,failed delivery,2020-02-12 07:31:36.000Z, , , ,"['660992']", ,3.1910000000000003,2597.95 +17118.0,payment reminder,2020-02-12 07:36:27.000Z, , ,"['991442']", , ,3.153,2900.97 +17119.0,package delivered,2020-02-12 07:57:45.000Z, , , ,"['660992']", ,3.1910000000000003,2597.95 +17120.0,send package,2020-02-12 08:06:32.000Z, , , ,"['661002']", ,3.119,3105.97 +17121.0,pick item,2020-02-12 08:09:24.000Z, ,"['886347']", , , ,0.88,89.99 +17122.0,pay order,2020-02-12 08:10:24.000Z, , ,"['991480']", , ,4.682,3431.97 +17123.0,reorder item,2020-02-12 08:24:25.000Z, ,"['886243']", , , ,0.78,99.99 +17124.0,pick item,2020-02-12 08:26:27.000Z, ,"['886349']", , , ,0.172,699.0 +17125.0,pick item,2020-02-12 08:28:45.000Z, ,"['886354']", , , ,1.48,199.99 +17126.0,pick item,2020-02-12 08:31:24.000Z, ,"['886251']", , , ,0.38,29.99 +17127.0,pick item,2020-02-12 08:37:01.000Z, ,"['886381']", , , ,0.495,129.0 +17128.0,failed delivery,2020-02-12 08:49:10.000Z, , , ,"['660995']", ,9.024,11393.96 +17129.0,pick item,2020-02-12 08:59:15.000Z, ,"['886168']", , , ,1.48,199.99 +17130.0,send package,2020-02-12 09:08:51.000Z, , , ,"['661001']", ,3.2310000000000003,2547.98 +17131.0,item out of stock,2020-02-12 09:13:48.000Z, ,"['886320']", , , ,0.483,495.0 +17132.0,pick item,2020-02-12 09:17:12.000Z, ,"['886271']", , , ,0.78,99.99 +17133.0,create package,2020-02-12 09:17:12.000Z, ,"['885969']", ,"['661004']", ,1.28,149.99 +17134.0,pick item,2020-02-12 09:17:47.000Z, ,"['886359']", , , ,0.78,99.99 +17135.0,create package,2020-02-12 09:17:47.000Z, ,"['885990','886359','886264','886266','886321','886319','886168']", ,"['661005']", ,5.888,1918.94 +17136.0,pick item,2020-02-12 09:20:15.000Z, ,"['886351']", , , ,0.483,495.0 +17137.0,item out of stock,2020-02-12 09:22:26.000Z, ,"['886308']", , , ,1.37,2500.0 +17138.0,package delivered,2020-02-12 09:24:07.000Z, , , ,"['660996']", ,1.4680000000000002,1242.99 +17139.0,pick item,2020-02-12 09:24:18.000Z, ,"['886341']", , , ,0.44,476.0 +17140.0,pick item,2020-02-12 09:28:03.000Z, ,"['886289']", , , ,0.483,1099.0 +17141.0,place order,2020-02-12 09:40:50.000Z, ,"['886384','886386','886382','886385','886388','886389','886387','886383']","['991558']", , ,7.621,9083.96 +17142.0,item out of stock,2020-02-12 09:54:56.000Z, ,"['886356']", , , ,0.483,1099.0 +17143.0,confirm order,2020-02-12 09:59:44.000Z, , ,"['991557']", , ,3.5380000000000003,4391.99 +17144.0,reorder item,2020-02-12 10:04:04.000Z, ,"['886335']", , , ,0.44,476.0 +17145.0,confirm order,2020-02-12 10:07:56.000Z, , ,"['991555']", , ,5.024,2607.96 +17146.0,pick item,2020-02-12 10:17:03.000Z, ,"['885981']", , , ,0.98,129.99 +17147.0,pay order,2020-02-12 10:19:07.000Z, , ,"['991432']", , ,4.073,3742.97 +17148.0,pick item,2020-02-12 10:28:11.000Z, ,"['886303']", , , ,1.48,199.99 +17149.0,reorder item,2020-02-12 10:34:42.000Z, ,"['886215']", , , ,0.495,129.0 +17150.0,failed delivery,2020-02-12 10:39:45.000Z, , , ,"['660995']", ,9.024,11393.96 +17151.0,pick item,2020-02-12 10:53:01.000Z, ,"['886305']", , , ,0.188,1149.0 +17152.0,confirm order,2020-02-12 10:53:14.000Z, , ,"['991556']", , ,3.283,3281.97 +17153.0,confirm order,2020-02-12 10:59:20.000Z, , ,"['991551']", , ,0.855,1982.0 +17154.0,send package,2020-02-12 11:02:30.000Z, , , ,"['661003']", ,5.68,3177.96 +17155.0,confirm order,2020-02-12 11:04:22.000Z, , ,"['991558']", , ,7.621,9083.96 +17156.0,pick item,2020-02-12 11:07:22.000Z, ,"['886369']", , , ,0.483,1099.0 +17157.0,create package,2020-02-12 11:07:22.000Z, ,"['886283','886282','886302','886298','886300','886281','886381','885832','886299','885924']", ,"['661006']", ,4.894,4319.97 +17158.0,pick item,2020-02-12 11:08:14.000Z, ,"['886265']", , , ,0.28,89.99 +17159.0,pick item,2020-02-12 11:08:37.000Z, ,"['886361']", , , ,0.28,449.0 +17160.0,pay order,2020-02-12 11:09:28.000Z, , ,"['991549']", , ,1.452,853.99 +17161.0,reorder item,2020-02-12 11:14:35.000Z, ,"['886322']", , , ,0.21,529.0 +17162.0,item out of stock,2020-02-12 11:25:29.000Z, ,"['886379']", , , ,0.21,529.0 +17163.0,pay order,2020-02-12 11:36:15.000Z, , ,"['991531']", , ,7.364,6717.96 +17164.0,pick item,2020-02-12 11:38:43.000Z, ,"['886358']", , , ,0.188,1149.0 +17165.0,place order,2020-02-12 11:41:27.000Z, ,"['886392','886390','886395','886391','886394','886393']","['991559']", , ,4.395,573.95 +17166.0,reorder item,2020-02-12 11:54:10.000Z, ,"['886262']", , , ,0.2,39.99 +17167.0,item out of stock,2020-02-12 12:03:10.000Z, ,"['886355']", , , ,0.2,39.99 +17168.0,pick item,2020-02-12 12:06:00.000Z, ,"['886340']", , , ,0.483,495.0 +17169.0,confirm order,2020-02-12 12:26:21.000Z, , ,"['991550']", , ,4.843,5730.97 +17170.0,reorder item,2020-02-12 13:26:01.000Z, ,"['886285']", , , ,0.38,29.99 +17171.0,confirm order,2020-02-12 13:29:23.000Z, , ,"['991554']", , ,3.0010000000000003,3520.97 +17172.0,payment reminder,2020-02-12 13:31:16.000Z, , ,"['991443']", , ,1.826,983.98 +17173.0,place order,2020-02-12 13:42:42.000Z, ,"['886397','886396']","['991560']", , ,1.4380000000000002,3354.0 +17174.0,pick item,2020-02-12 13:47:03.000Z, ,"['886312']", , , ,1.48,199.99 +17175.0,send package,2020-02-12 13:50:49.000Z, , , ,"['661004']", ,1.28,149.99 +17176.0,pick item,2020-02-12 14:15:50.000Z, ,"['886357']", , , ,0.21,529.0 +17177.0,reorder item,2020-02-12 14:27:03.000Z, ,"['886356']", , , ,0.483,1099.0 +17178.0,pick item,2020-02-12 14:33:07.000Z, ,"['886301']", , , ,0.483,1099.0 +17179.0,pay order,2020-02-12 14:43:38.000Z, , ,"['991369']", , ,3.398,2458.98 +17180.0,pay order,2020-02-12 14:45:55.000Z, , ,"['991550']", , ,4.843,5730.97 +17181.0,send package,2020-02-12 14:51:56.000Z, , , ,"['661000']", ,3.701,3457.97 +17182.0,pick item,2020-02-12 14:55:57.000Z, ,"['886174']", , , ,0.38,29.99 +17183.0,pick item,2020-02-12 14:56:33.000Z, ,"['886344']", , , ,0.98,129.99 +17184.0,confirm order,2020-02-12 15:01:47.000Z, , ,"['991560']", , ,1.4380000000000002,3354.0 +17185.0,payment reminder,2020-02-12 15:02:26.000Z, , ,"['991441']", , ,3.18,3268.99 +17186.0,package delivered,2020-02-12 15:04:59.000Z, , , ,"['661001']", ,3.2310000000000003,2547.98 +17187.0,pick item,2020-02-12 15:06:25.000Z, ,"['886378']", , , ,1.37,2500.0 +17188.0,create package,2020-02-12 15:06:25.000Z, ,"['886305','886304','886106','886307','886303','885290']", ,"['661007']", ,3.977,3436.97 +17189.0,reorder item,2020-02-12 15:06:27.000Z, ,"['886308']", , , ,1.37,2500.0 +17190.0,send package,2020-02-12 15:08:17.000Z, , , ,"['661006']", ,4.894,4319.97 +17191.0,failed delivery,2020-02-12 15:09:14.000Z, , , ,"['661002']", ,3.119,3105.97 +17192.0,reorder item,2020-02-12 15:19:30.000Z, ,"['886311']", , , ,1.25,2200.0 +17193.0,pick item,2020-02-12 15:29:50.000Z, ,"['886392']", , , ,0.495,129.0 +17194.0,pay order,2020-02-12 15:34:27.000Z, , ,"['991415']", , ,1.526,1722.98 +17195.0,pick item,2020-02-12 15:36:20.000Z, ,"['886387']", , , ,1.28,149.99 +17196.0,pick item,2020-02-12 15:38:56.000Z, ,"['886246']", , , ,0.495,129.0 +17197.0,place order,2020-02-12 15:45:11.000Z, ,"['886399','886398','886400']","['991561']", , ,2.143,689.98 +17198.0,item out of stock,2020-02-12 15:57:53.000Z, ,"['886352']", , , ,1.48,199.99 +17199.0,pick item,2020-02-12 15:59:24.000Z, ,"['886329']", , , ,0.172,699.0 +17200.0,item out of stock,2020-02-12 16:01:00.000Z, ,"['886353']", , , ,1.37,2500.0 +17201.0,package delivered,2020-02-12 16:01:25.000Z, , , ,"['660995']", ,9.024,11393.96 +17202.0,pick item,2020-02-12 16:05:58.000Z, ,"['886182']", , , ,0.483,1099.0 +17203.0,pick item,2020-02-12 16:20:30.000Z, ,"['886262']", , , ,0.2,39.99 +17204.0,create package,2020-02-12 16:20:30.000Z, ,"['886328','886242','886174','885967','885981','886354','886235']", ,"['661008']", ,5.34,1095.94 +17205.0,pay order,2020-02-12 16:21:12.000Z, , ,"['991509']", , ,1.865,2634.0 +17206.0,pick item,2020-02-12 16:37:31.000Z, ,"['886309']", , , ,0.483,1099.0 +17207.0,pick item,2020-02-12 17:05:36.000Z, ,"['886382']", , , ,0.78,99.99 +17208.0,pick item,2020-02-12 17:16:42.000Z, ,"['886215']", , , ,0.495,129.0 +17209.0,pick item,2020-02-12 17:26:51.000Z, ,"['886337']", , , ,0.172,699.0 +17210.0,pick item,2020-02-12 17:27:26.000Z, ,"['886367']", , , ,0.44,476.0 +17211.0,item out of stock,2020-02-12 17:27:43.000Z, ,"['886386']", , , ,0.483,79.99 +17212.0,pick item,2020-02-12 17:40:44.000Z, ,"['886286']", , , ,1.28,149.99 +17213.0,pick item,2020-02-12 17:44:43.000Z, ,"['886306']", , , ,0.44,476.0 +17214.0,create package,2020-02-12 17:44:43.000Z, ,"['886013']", ,"['661009']", ,0.21,529.0 +17215.0,package delivered,2020-02-12 17:47:23.000Z, , , ,"['661006']", ,4.894,4319.97 +17216.0,place order,2020-02-12 17:50:09.000Z, ,"['886402','886404','886401','886403']","['991562']", , ,2.7910000000000004,3222.99 +17217.0,item out of stock,2020-02-12 18:17:51.000Z, ,"['886346']", , , ,0.2,39.99 +17218.0,confirm order,2020-02-12 18:25:06.000Z, , ,"['991559']", , ,4.395,573.95 +17219.0,send package,2020-02-12 18:57:02.000Z, , , ,"['661009']", ,0.21,529.0 +17220.0,pick item,2020-02-12 20:02:13.000Z, ,"['886362']", , , ,0.28,89.99 +17221.0,create package,2020-02-12 20:02:13.000Z, ,"['885846','886087','886215','886279']", ,"['661010']", ,2.465,887.98 +17222.0,confirm order,2020-02-12 20:14:59.000Z, , ,"['991544']", , ,1.853,3604.0 +17223.0,place order,2020-02-12 21:10:02.000Z, ,"['886406','886405','886408','886407']","['991563']", , ,2.795,839.98 +17224.0,reorder item,2020-02-13 07:10:46.000Z, ,"['886355']", , , ,0.2,39.99 +17225.0,place order,2020-02-13 07:11:39.000Z, ,"['886410','886409','886412','886411']","['991564']", , ,2.75,552.98 +17226.0,reorder item,2020-02-13 07:16:38.000Z, ,"['886320']", , , ,0.483,495.0 +17227.0,pick item,2020-02-13 07:48:51.000Z, ,"['886372']", , , ,0.88,89.99 +17228.0,pick item,2020-02-13 07:54:48.000Z, ,"['886343']", , , ,0.2,39.99 +17229.0,pay order,2020-02-13 07:55:24.000Z, , ,"['991548']", , ,1.72,630.99 +17230.0,pay order,2020-02-13 07:58:00.000Z, , ,"['991532']", , ,2.286,2196.98 +17231.0,pick item,2020-02-13 08:08:36.000Z, ,"['886348']", , , ,0.166,799.0 +17232.0,failed delivery,2020-02-13 08:10:38.000Z, , , ,"['661003']", ,5.68,3177.96 +17233.0,reorder item,2020-02-13 08:14:17.000Z, ,"['886353']", , , ,1.37,2500.0 +17234.0,pick item,2020-02-13 08:15:10.000Z, ,"['886385']", , , ,1.37,2500.0 +17235.0,create package,2020-02-13 08:15:10.000Z, ,"['886312','886315','886289','886290','886313','886287','886294','886182','886310']", ,"['661011']", ,8.032,3552.94 +17236.0,pick item,2020-02-13 08:21:04.000Z, ,"['886296']", , , ,1.25,2200.0 +17237.0,pick item,2020-02-13 08:26:03.000Z, ,"['886380']", , , ,0.483,1099.0 +17238.0,pick item,2020-02-13 08:32:09.000Z, ,"['886403']", , , ,1.25,2200.0 +17239.0,pick item,2020-02-13 08:33:18.000Z, ,"['886211']", , , ,0.44,476.0 +17240.0,item out of stock,2020-02-13 08:35:03.000Z, ,"['886401']", , , ,0.88,89.99 +17241.0,pick item,2020-02-13 08:42:21.000Z, ,"['886395']", , , ,0.88,89.99 +17242.0,place order,2020-02-13 09:07:16.000Z, ,"['886414','886413']","['991565']", , ,2.73,2404.99 +17243.0,item out of stock,2020-02-13 09:08:27.000Z, ,"['886366']", , , ,0.28,449.0 +17244.0,item out of stock,2020-02-13 09:12:24.000Z, ,"['886334']", , , ,1.37,2500.0 +17245.0,pick item,2020-02-13 09:34:35.000Z, ,"['886355']", , , ,0.2,39.99 +17246.0,failed delivery,2020-02-13 09:35:40.000Z, , , ,"['661000']", ,3.701,3457.97 +17247.0,confirm order,2020-02-13 09:36:35.000Z, , ,"['991561']", , ,2.143,689.98 +17248.0,payment reminder,2020-02-13 09:36:59.000Z, , ,"['991448']", , ,3.1060000000000003,2416.98 +17249.0,pay order,2020-02-13 09:48:02.000Z, , ,"['991416']", , ,0.483,500.0 +17250.0,pick item,2020-02-13 10:06:47.000Z, ,"['886316']", , , ,0.28,89.99 +17251.0,reorder item,2020-02-13 10:12:55.000Z, ,"['886346']", , , ,0.2,39.99 +17252.0,send package,2020-02-13 10:13:23.000Z, , , ,"['661010']", ,2.465,887.98 +17253.0,pick item,2020-02-13 10:18:52.000Z, ,"['886404']", , , ,0.495,129.0 +17254.0,item out of stock,2020-02-13 10:19:31.000Z, ,"['886397']", , , ,1.25,2200.0 +17255.0,confirm order,2020-02-13 10:20:26.000Z, , ,"['991564']", , ,2.75,552.98 +17256.0,failed delivery,2020-02-13 10:21:53.000Z, , , ,"['661002']", ,3.119,3105.97 +17257.0,package delivered,2020-02-13 10:24:19.000Z, , , ,"['661002']", ,3.119,3105.97 +17258.0,item out of stock,2020-02-13 10:29:11.000Z, ,"['886365']", , , ,0.88,89.99 +17259.0,item out of stock,2020-02-13 10:30:11.000Z, ,"['886325']", , , ,0.78,99.99 +17260.0,item out of stock,2020-02-13 10:34:04.000Z, ,"['886400']", , , ,0.483,495.0 +17261.0,place order,2020-02-13 10:34:19.000Z, ,"['886416','886415']","['991566']", , ,0.41,573.99 +17262.0,pick item,2020-02-13 10:37:02.000Z, ,"['886376']", , , ,0.188,1149.0 +17263.0,create package,2020-02-13 10:37:02.000Z, ,"['886323','886326','886331','886369','886258','886333','886367','886324','886262','886257']", ,"['661012']", ,4.942,6708.96 +17264.0,send package,2020-02-13 10:53:48.000Z, , , ,"['661005']", ,5.888,1918.94 +17265.0,pick item,2020-02-13 10:54:48.000Z, ,"['886412']", , , ,0.28,89.99 +17266.0,pick item,2020-02-13 11:00:28.000Z, ,"['886175']", , , ,0.172,699.0 +17267.0,send package,2020-02-13 11:02:17.000Z, , , ,"['661007']", ,3.977,3436.97 +17268.0,pay order,2020-02-13 11:04:22.000Z, , ,"['991522']", , ,2.8560000000000003,1763.98 +17269.0,package delivered,2020-02-13 11:24:13.000Z, , , ,"['661009']", ,0.21,529.0 +17270.0,pick item,2020-02-13 11:24:21.000Z, ,"['886370']", , , ,0.483,79.99 +17271.0,package delivered,2020-02-13 11:27:05.000Z, , , ,"['661004']", ,1.28,149.99 +17272.0,pick item,2020-02-13 11:28:55.000Z, ,"['886413']", , , ,1.48,199.99 +17273.0,pay order,2020-02-13 11:28:59.000Z, , ,"['991560']", , ,1.4380000000000002,3354.0 +17274.0,package delivered,2020-02-13 11:29:32.000Z, , , ,"['661010']", ,2.465,887.98 +17275.0,pick item,2020-02-13 11:41:54.000Z, ,"['886194']", , , ,0.44,476.0 +17276.0,reorder item,2020-02-13 11:42:30.000Z, ,"['886366']", , , ,0.28,449.0 +17277.0,item out of stock,2020-02-13 11:43:59.000Z, ,"['886390']", , , ,0.88,89.99 +17278.0,failed delivery,2020-02-13 11:55:10.000Z, , , ,"['661000']", ,3.701,3457.97 +17279.0,failed delivery,2020-02-13 12:08:06.000Z, , , ,"['661005']", ,5.888,1918.94 +17280.0,pick item,2020-02-13 12:13:57.000Z, ,"['886371']", , , ,1.28,149.99 +17281.0,pay order,2020-02-13 12:22:54.000Z, , ,"['991537']", , ,1.26,583.99 +17282.0,place order,2020-02-13 12:28:26.000Z, ,"['886419','886418','886417']","['991567']", , ,2.151,2452.99 +17283.0,reorder item,2020-02-13 12:29:54.000Z, ,"['886401']", , , ,0.88,89.99 +17284.0,pick item,2020-02-13 12:32:09.000Z, ,"['886418']", , , ,0.483,1099.0 +17285.0,pay order,2020-02-13 12:33:22.000Z, , ,"['991440']", , ,1.475,263.99 +17286.0,item out of stock,2020-02-13 12:37:02.000Z, ,"['886360']", , , ,0.78,99.99 +17287.0,reorder item,2020-02-13 12:56:08.000Z, ,"['886397']", , , ,1.25,2200.0 +17288.0,pick item,2020-02-13 12:56:45.000Z, ,"['886406']", , , ,1.48,199.99 +17289.0,pick item,2020-02-13 13:00:18.000Z, ,"['886374']", , , ,0.483,1099.0 +17290.0,payment reminder,2020-02-13 13:17:17.000Z, , ,"['991453']", , ,3.4530000000000003,963.97 +17291.0,pick item,2020-02-13 13:23:00.000Z, ,"['886393']", , , ,0.38,29.99 +17292.0,create package,2020-02-13 13:23:00.000Z, ,"['886246','886254','886413','886251','886247','886248']", ,"['661013']", ,5.1770000000000005,3707.97 +17293.0,reorder item,2020-02-13 13:27:54.000Z, ,"['886379']", , , ,0.21,529.0 +17294.0,package delivered,2020-02-13 13:28:21.000Z, , , ,"['661005']", ,5.888,1918.94 +17295.0,confirm order,2020-02-13 13:40:45.000Z, , ,"['991565']", , ,2.73,2404.99 +17296.0,pick item,2020-02-13 14:03:16.000Z, ,"['886099']", , , ,0.495,129.0 +17297.0,item out of stock,2020-02-13 14:10:10.000Z, ,"['886383']", , , ,0.78,99.99 +17298.0,failed delivery,2020-02-13 14:16:07.000Z, , , ,"['661000']", ,3.701,3457.97 +17299.0,place order,2020-02-13 14:16:39.000Z, ,"['886423','886422','886421','886420','886424']","['991568']", , ,5.06,1030.96 +17300.0,item out of stock,2020-02-13 14:22:59.000Z, ,"['886350']", , , ,1.37,2500.0 +17301.0,confirm order,2020-02-13 14:27:04.000Z, , ,"['991566']", , ,0.41,573.99 +17302.0,reorder item,2020-02-13 14:37:13.000Z, ,"['886365']", , , ,0.88,89.99 +17303.0,send package,2020-02-13 14:38:29.000Z, , , ,"['661013']", ,5.1770000000000005,3707.97 +17304.0,pick item,2020-02-13 14:46:21.000Z, ,"['886364']", , , ,0.483,79.99 +17305.0,pick item,2020-02-13 14:49:28.000Z, ,"['886422']", , , ,1.28,149.99 +17306.0,pick item,2020-02-13 14:51:44.000Z, ,"['886314']", , , ,0.2,39.99 +17307.0,pay order,2020-02-13 14:56:36.000Z, , ,"['991441']", , ,3.18,3268.99 +17308.0,failed delivery,2020-02-13 15:07:18.000Z, , , ,"['661003']", ,5.68,3177.96 +17309.0,item out of stock,2020-02-13 15:12:11.000Z, ,"['886415']", , , ,0.2,39.99 +17310.0,pay order,2020-02-13 15:14:26.000Z, , ,"['991536']", , ,1.376,2911.0 +17311.0,confirm order,2020-02-13 15:23:22.000Z, , ,"['991568']", , ,5.06,1030.96 +17312.0,pick item,2020-02-13 15:25:17.000Z, ,"['886399']", , , ,0.78,99.99 +17313.0,pick item,2020-02-13 15:33:04.000Z, ,"['886424']", , , ,1.28,149.99 +17314.0,create package,2020-02-13 15:33:04.000Z, ,"['886329','886223','886233']", ,"['661014']", ,1.535,1887.99 +17315.0,package delivered,2020-02-13 15:46:37.000Z, , , ,"['661013']", ,5.1770000000000005,3707.97 +17316.0,pay order,2020-02-13 15:51:44.000Z, , ,"['991551']", , ,0.855,1982.0 +17317.0,place order,2020-02-13 15:53:06.000Z, ,"['886425','886427','886426','886429','886430','886428']","['991569']", , ,1.849,1579.96 +17318.0,send package,2020-02-13 15:54:41.000Z, , , ,"['661008']", ,5.34,1095.94 +17319.0,pick item,2020-02-13 16:23:17.000Z, ,"['886416']", , , ,0.21,529.0 +17320.0,reorder item,2020-02-13 16:46:27.000Z, ,"['886350']", , , ,1.37,2500.0 +17321.0,failed delivery,2020-02-13 16:52:02.000Z, , , ,"['661000']", ,3.701,3457.97 +17322.0,pick item,2020-02-13 17:29:41.000Z, ,"['886398']", , , ,0.88,89.99 +17323.0,confirm order,2020-02-13 17:57:14.000Z, , ,"['991567']", , ,2.151,2452.99 +17324.0,place order,2020-02-13 18:05:59.000Z, ,"['886431','886435','886433','886432','886434']","['991570']", , ,3.321,6398.0 +17325.0,pick item,2020-02-13 20:28:25.000Z, ,"['886414']", , , ,1.25,2200.0 +17326.0,create package,2020-02-13 20:28:25.000Z, ,"['886347','886404','886271','886286','886340','886348','886341','886344','886337','886349','886343','886175','886403','886351']", ,"['661015']", ,7.9529999999999985,7200.95 +17327.0,place order,2020-02-13 20:51:33.000Z, ,"['886437','886436']","['991571']", , ,0.705,663.0 +17328.0,item out of stock,2020-02-13 21:02:11.000Z, ,"['886368']", , , ,1.48,199.99 +17329.0,pick item,2020-02-13 21:20:30.000Z, ,"['886429']", , , ,0.28,89.99 +17330.0,create package,2020-02-13 23:00:00.000Z, ,"['886362','886265','886357','886361','886358']", ,"['661016']", ,1.238,2306.98 +17331.0,place order,2020-02-14 06:27:12.000Z, ,"['886439','886440','886438']","['991572']", , ,1.932,933.98 +17332.0,pick item,2020-02-14 07:16:38.000Z, ,"['886332']", , , ,0.483,79.99 +17333.0,item out of stock,2020-02-14 07:33:51.000Z, ,"['886439']", , , ,0.98,129.99 +17334.0,pick item,2020-02-14 07:37:07.000Z, ,"['886244']", , , ,0.483,495.0 +17335.0,pick item,2020-02-14 07:38:10.000Z, ,"['886423']", , , ,0.78,99.99 +17336.0,send package,2020-02-14 07:44:46.000Z, , , ,"['661011']", ,8.032,3552.94 +17337.0,pick item,2020-02-14 08:07:54.000Z, ,"['886377']", , , ,0.98,129.99 +17338.0,reorder item,2020-02-14 08:23:11.000Z, ,"['886400']", , , ,0.483,495.0 +17339.0,failed delivery,2020-02-14 08:42:46.000Z, , , ,"['661003']", ,5.68,3177.96 +17340.0,confirm order,2020-02-14 08:47:38.000Z, , ,"['991572']", , ,1.932,933.98 +17341.0,confirm order,2020-02-14 09:02:33.000Z, , ,"['991562']", , ,2.7910000000000004,3222.99 +17342.0,reorder item,2020-02-14 09:03:26.000Z, ,"['886334']", , , ,1.37,2500.0 +17343.0,send package,2020-02-14 09:04:52.000Z, , , ,"['661012']", ,4.942,6708.96 +17344.0,pay order,2020-02-14 09:12:05.000Z, , ,"['991442']", , ,3.153,2900.97 +17345.0,place order,2020-02-14 09:13:42.000Z, ,"['886441']","['991573']", , ,0.495,134.0 +17346.0,reorder item,2020-02-14 09:18:32.000Z, ,"['886368']", , , ,1.48,199.99 +17347.0,pick item,2020-02-14 09:23:08.000Z, ,"['886115']", , , ,0.172,699.0 +17348.0,pick item,2020-02-14 09:23:39.000Z, ,"['886436']", , , ,0.495,129.0 +17349.0,package delivered,2020-02-14 09:27:33.000Z, , , ,"['661008']", ,5.34,1095.94 +17350.0,pick item,2020-02-14 09:32:18.000Z, ,"['886335']", , , ,0.44,476.0 +17351.0,confirm order,2020-02-14 09:34:02.000Z, , ,"['991569']", , ,1.849,1579.96 +17352.0,confirm order,2020-02-14 09:35:32.000Z, , ,"['991571']", , ,0.705,663.0 +17353.0,package delivered,2020-02-14 09:41:41.000Z, , , ,"['661007']", ,3.977,3436.97 +17354.0,package delivered,2020-02-14 09:53:38.000Z, , , ,"['661012']", ,4.942,6708.96 +17355.0,pick item,2020-02-14 10:00:56.000Z, ,"['886308']", , , ,1.37,2500.0 +17356.0,pay order,2020-02-14 10:01:46.000Z, , ,"['991492']", , ,1.983,750.97 +17357.0,reorder item,2020-02-14 10:10:46.000Z, ,"['886189']", , , ,0.172,699.0 +17358.0,send package,2020-02-14 10:11:50.000Z, , , ,"['661016']", ,1.238,2306.98 +17359.0,send package,2020-02-14 10:15:32.000Z, , , ,"['661014']", ,1.535,1887.99 +17360.0,pay order,2020-02-14 10:23:46.000Z, , ,"['991453']", , ,3.4530000000000003,963.97 +17361.0,reorder item,2020-02-14 10:26:13.000Z, ,"['886360']", , , ,0.78,99.99 +17362.0,pay order,2020-02-14 10:26:52.000Z, , ,"['991512']", , ,1.32,570.99 +17363.0,pick item,2020-02-14 10:31:17.000Z, ,"['886350']", , , ,1.37,2500.0 +17364.0,pick item,2020-02-14 10:37:01.000Z, ,"['886019']", , , ,0.172,699.0 +17365.0,place order,2020-02-14 10:47:12.000Z, ,"['886446','886442','886443','886444','886445']","['991574']", , ,3.133,937.98 +17366.0,pay order,2020-02-14 10:49:00.000Z, , ,"['991541']", , ,1.25,2205.0 +17367.0,pick item,2020-02-14 10:51:59.000Z, ,"['886444']", , , ,0.495,129.0 +17368.0,pick item,2020-02-14 10:55:34.000Z, ,"['886213']", , , ,0.78,99.99 +17369.0,reorder item,2020-02-14 10:55:56.000Z, ,"['886284']", , , ,1.25,2200.0 +17370.0,package delivered,2020-02-14 11:05:12.000Z, , , ,"['661011']", ,8.032,3552.94 +17371.0,pick item,2020-02-14 11:06:52.000Z, ,"['886431']", , , ,0.166,799.0 +17372.0,package delivered,2020-02-14 11:06:59.000Z, , , ,"['661003']", ,5.68,3177.96 +17373.0,pay order,2020-02-14 11:11:02.000Z, , ,"['991568']", , ,5.06,1030.96 +17374.0,reorder item,2020-02-14 11:12:25.000Z, ,"['886352']", , , ,1.48,199.99 +17375.0,pay order,2020-02-14 11:26:59.000Z, , ,"['991569']", , ,1.849,1579.96 +17376.0,pick item,2020-02-14 11:28:22.000Z, ,"['886410']", , , ,0.495,129.0 +17377.0,pick item,2020-02-14 11:42:05.000Z, ,"['886409']", , , ,0.495,129.0 +17378.0,confirm order,2020-02-14 11:50:21.000Z, , ,"['991563']", , ,2.795,839.98 +17379.0,confirm order,2020-02-14 12:09:38.000Z, , ,"['991573']", , ,0.495,134.0 +17380.0,place order,2020-02-14 12:54:11.000Z, ,"['886448','886447']","['991575']", , ,1.66,194.98 +17381.0,reorder item,2020-02-14 13:03:52.000Z, ,"['886336']", , , ,0.98,129.99 +17382.0,pick item,2020-02-14 13:13:07.000Z, ,"['886327']", , , ,1.28,149.99 +17383.0,pay order,2020-02-14 13:31:00.000Z, , ,"['991546']", , ,2.373,1268.98 +17384.0,reorder item,2020-02-14 14:03:01.000Z, ,"['886386']", , , ,0.483,79.99 +17385.0,pick item,2020-02-14 14:18:51.000Z, ,"['886375']", , , ,0.28,89.99 +17386.0,item out of stock,2020-02-14 14:48:41.000Z, ,"['886421']", , , ,1.28,149.99 +17387.0,item out of stock,2020-02-14 14:52:49.000Z, ,"['886448']", , , ,0.78,99.99 +17388.0,item out of stock,2020-02-14 14:53:05.000Z, ,"['886435']", , , ,0.172,699.0 +17389.0,package delivered,2020-02-14 14:55:12.000Z, , , ,"['661000']", ,3.701,3457.97 +17390.0,package delivered,2020-02-14 14:56:11.000Z, , , ,"['661016']", ,1.238,2306.98 +17391.0,place order,2020-02-14 15:08:10.000Z, ,"['886452','886451','886449','886450']","['991576']", , ,1.403,1049.98 +17392.0,confirm order,2020-02-14 15:12:22.000Z, , ,"['991570']", , ,3.321,6398.0 +17393.0,pick item,2020-02-14 15:15:59.000Z, ,"['885982']", , , ,0.21,529.0 +17394.0,create package,2020-02-14 15:15:59.000Z, ,"['886392','886377','886378','886387','886301','886393','886382','886385','886380','886395']", ,"['661017']", ,8.501,7826.95 +17395.0,reorder item,2020-02-14 15:20:02.000Z, ,"['886325']", , , ,0.78,99.99 +17396.0,pick item,2020-02-14 15:21:19.000Z, ,"['885933']", , , ,0.483,495.0 +17397.0,confirm order,2020-02-14 15:33:10.000Z, , ,"['991574']", , ,3.133,937.98 +17398.0,pick item,2020-02-14 15:36:27.000Z, ,"['886105']", , , ,0.166,799.0 +17399.0,pick item,2020-02-14 16:01:49.000Z, ,"['886433']", , , ,1.25,2200.0 +17400.0,pick item,2020-02-14 16:04:37.000Z, ,"['886402']", , , ,0.166,799.0 +17401.0,pick item,2020-02-14 16:08:02.000Z, ,"['886425']", , , ,0.44,476.0 +17402.0,pick item,2020-02-14 16:25:26.000Z, ,"['886446']", , , ,0.483,495.0 +17403.0,pick item,2020-02-14 16:32:07.000Z, ,"['886389']", , , ,1.37,2500.0 +17404.0,place order,2020-02-14 16:36:07.000Z, ,"['886454','886457','886456','886455','886453']","['991577']", , ,6.105,3183.97 +17405.0,confirm order,2020-02-14 16:42:50.000Z, , ,"['991575']", , ,1.66,194.98 +17406.0,pay order,2020-02-14 16:52:30.000Z, , ,"['991431']", , ,1.418,2331.99 +17407.0,item out of stock,2020-02-14 16:55:45.000Z, ,"['886437']", , , ,0.21,529.0 +17408.0,reorder item,2020-02-14 16:59:32.000Z, ,"['886415']", , , ,0.2,39.99 +17409.0,reorder item,2020-02-14 17:05:34.000Z, ,"['886435']", , , ,0.172,699.0 +17410.0,place order,2020-02-14 18:32:01.000Z, ,"['886463','886462','886461','886459','886460','886458']","['991578']", , ,1.324,3359.0 +17411.0,place order,2020-02-14 21:43:37.000Z, ,"['886464']","['991579']", , ,0.483,1104.0 +17412.0,place order,2020-02-15 18:21:36.000Z, ,"['886465','886466']","['991580']", , ,0.446,1253.0 +17413.0,payment reminder,2020-02-16 08:39:40.000Z, , ,"['991230']", , ,2.426,1103.98 +17414.0,payment reminder,2020-02-16 14:33:30.000Z, , ,"['991460']", , ,3.3,863.95 +17415.0,payment reminder,2020-02-16 16:34:35.000Z, , ,"['991452']", , ,1.188,2528.0 +17416.0,place order,2020-02-16 18:31:00.000Z, ,"['886468','886467']","['991581']", , ,0.649,883.99 +17417.0,pick item,2020-02-17 07:34:25.000Z, ,"['886407']", , , ,0.38,29.99 +17418.0,send package,2020-02-17 07:48:07.000Z, , , ,"['661015']", ,7.9529999999999985,7200.95 +17419.0,pay order,2020-02-17 07:53:36.000Z, , ,"['991460']", , ,3.3,863.95 +17420.0,pick item,2020-02-17 07:57:29.000Z, ,"['886462']", , , ,0.172,699.0 +17421.0,place order,2020-02-17 08:12:29.000Z, ,"['886474','886471','886473','886475','886472','886470','886476','886469']","['991582']", , ,6.5760000000000005,8442.97 +17422.0,pick item,2020-02-17 08:25:15.000Z, ,"['886077']", , , ,0.2,39.99 +17423.0,create package,2020-02-17 08:25:15.000Z, ,"['886308','886194','886309']", ,"['661018']", ,2.293,4075.0 +17424.0,send package,2020-02-17 08:30:46.000Z, , , ,"['661018']", ,2.293,4075.0 +17425.0,payment reminder,2020-02-17 08:42:03.000Z, , ,"['991464']", , ,1.28,154.99 +17426.0,pick item,2020-02-17 08:46:39.000Z, ,"['886391']", , , ,0.78,99.99 +17427.0,item out of stock,2020-02-17 08:58:36.000Z, ,"['886394']", , , ,0.98,129.99 +17428.0,package delivered,2020-02-17 08:59:41.000Z, , , ,"['661018']", ,2.293,4075.0 +17429.0,pick item,2020-02-17 08:59:51.000Z, ,"['886405']", , , ,0.495,129.0 +17430.0,pay order,2020-02-17 09:09:33.000Z, , ,"['991571']", , ,0.705,663.0 +17431.0,pick item,2020-02-17 09:19:32.000Z, ,"['886338']", , , ,0.188,1149.0 +17432.0,create package,2020-02-17 09:19:32.000Z, ,"['886105','886399','886115','886398','886306']", ,"['661019']", ,2.438,2163.98 +17433.0,pick item,2020-02-17 09:19:56.000Z, ,"['886408']", , , ,0.44,476.0 +17434.0,confirm order,2020-02-17 09:34:24.000Z, , ,"['991579']", , ,0.483,1104.0 +17435.0,package delivered,2020-02-17 09:34:36.000Z, , , ,"['661015']", ,7.9529999999999985,7200.95 +17436.0,pick item,2020-02-17 09:39:45.000Z, ,"['886419']", , , ,0.188,1149.0 +17437.0,pick item,2020-02-17 09:43:25.000Z, ,"['886411']", , , ,1.48,199.99 +17438.0,place order,2020-02-17 09:44:46.000Z, ,"['886477','886482','886483','886479','886484','886481','886478','886480','886485']","['991583']", , ,3.961,5354.96 +17439.0,pick item,2020-02-17 09:50:06.000Z, ,"['886471']", , , ,0.166,799.0 +17440.0,pay order,2020-02-17 09:58:25.000Z, , ,"['991575']", , ,1.66,194.98 +17441.0,item out of stock,2020-02-17 09:59:31.000Z, ,"['886417']", , , ,1.48,199.99 +17442.0,pick item,2020-02-17 10:08:59.000Z, ,"['886468']", , , ,0.483,79.99 +17443.0,create package,2020-02-17 10:08:59.000Z, ,"['886376','886462','886374','886418','886371','886372','886419','886375']", ,"['661020']", ,3.954,5524.97 +17444.0,send package,2020-02-17 10:18:51.000Z, , , ,"['661020']", ,3.954,5524.97 +17445.0,pick item,2020-02-17 10:24:37.000Z, ,"['886451']", , , ,0.28,449.0 +17446.0,reorder item,2020-02-17 10:25:48.000Z, ,"['886383']", , , ,0.78,99.99 +17447.0,pay order,2020-02-17 10:37:37.000Z, , ,"['991557']", , ,3.5380000000000003,4391.99 +17448.0,confirm order,2020-02-17 10:47:10.000Z, , ,"['991582']", , ,6.5760000000000005,8442.97 +17449.0,pick item,2020-02-17 10:47:21.000Z, ,"['885829']", , , ,0.483,1099.0 +17450.0,send package,2020-02-17 11:00:54.000Z, , , ,"['661017']", ,8.501,7826.95 +17451.0,item out of stock,2020-02-17 11:02:05.000Z, ,"['886473']", , , ,1.37,2500.0 +17452.0,pick item,2020-02-17 11:07:47.000Z, ,"['886463']", , , ,0.28,449.0 +17453.0,reorder item,2020-02-17 11:08:42.000Z, ,"['886390']", , , ,0.88,89.99 +17454.0,confirm order,2020-02-17 11:17:06.000Z, , ,"['991581']", , ,0.649,883.99 +17455.0,pick item,2020-02-17 11:19:05.000Z, ,"['886477']", , , ,0.188,1149.0 +17456.0,pay order,2020-02-17 11:21:07.000Z, , ,"['991570']", , ,3.321,6398.0 +17457.0,pay order,2020-02-17 11:24:12.000Z, , ,"['991528']", , ,2.041,4753.0 +17458.0,pick item,2020-02-17 11:34:56.000Z, ,"['886445']", , , ,0.495,129.0 +17459.0,send package,2020-02-17 11:43:15.000Z, , , ,"['661019']", ,2.438,2163.98 +17460.0,place order,2020-02-17 11:49:19.000Z, ,"['886487','886486']","['991584']", , ,0.966,1183.99 +17461.0,payment reminder,2020-02-17 12:07:52.000Z, , ,"['991223']", , ,3.523,4392.97 +17462.0,pay order,2020-02-17 12:27:05.000Z, , ,"['991572']", , ,1.932,933.98 +17463.0,pick item,2020-02-17 12:41:27.000Z, ,"['886469']", , , ,0.2,39.99 +17464.0,confirm order,2020-02-17 12:59:44.000Z, , ,"['991584']", , ,0.966,1183.99 +17465.0,pick item,2020-02-17 13:00:02.000Z, ,"['886452']", , , ,0.483,79.99 +17466.0,confirm order,2020-02-17 13:06:45.000Z, , ,"['991583']", , ,3.961,5354.96 +17467.0,pick item,2020-02-17 13:11:54.000Z, ,"['886440']", , , ,0.78,99.99 +17468.0,create package,2020-02-17 13:11:54.000Z, ,"['886436','886296']", ,"['661021']", ,1.745,2329.0 +17469.0,pick item,2020-02-17 13:15:55.000Z, ,"['886460']", , , ,0.21,529.0 +17470.0,pick item,2020-02-17 13:25:36.000Z, ,"['886472']", , , ,1.28,149.99 +17471.0,create package,2020-02-17 13:25:36.000Z, ,"['886425','886213','886429','886211']", ,"['661022']", ,1.94,1141.98 +17472.0,reorder item,2020-02-17 13:32:14.000Z, ,"['886473']", , , ,1.37,2500.0 +17473.0,failed delivery,2020-02-17 13:46:11.000Z, , , ,"['661014']", ,1.535,1887.99 +17474.0,pay order,2020-02-17 13:47:42.000Z, , ,"['991254']", , ,5.002,8694.0 +17475.0,pick item,2020-02-17 13:50:13.000Z, ,"['886396']", , , ,0.188,1149.0 +17476.0,reorder item,2020-02-17 13:54:38.000Z, ,"['886439']", , , ,0.98,129.99 +17477.0,place order,2020-02-17 13:58:25.000Z, ,"['886488','886491','886490','886489']","['991585']", , ,1.423,294.96 +17478.0,pick item,2020-02-17 14:01:36.000Z, ,"['885867']", , , ,0.483,495.0 +17479.0,pick item,2020-02-17 14:05:57.000Z, ,"['886388']", , , ,1.37,2500.0 +17480.0,pick item,2020-02-17 14:13:10.000Z, ,"['886295']", , , ,0.495,129.0 +17481.0,create package,2020-02-17 14:13:10.000Z, ,"['885982','886327','886431','886244','886355','886433']", ,"['661023']", ,3.589,4212.98 +17482.0,pick item,2020-02-17 14:23:29.000Z, ,"['886476']", , , ,1.25,2200.0 +17483.0,pick item,2020-02-17 14:33:25.000Z, ,"['886428']", , , ,0.483,79.99 +17484.0,pick item,2020-02-17 14:35:25.000Z, ,"['886160']", , , ,0.44,476.0 +17485.0,payment reminder,2020-02-17 14:37:44.000Z, , ,"['991469']", , ,1.09,623.99 +17486.0,send package,2020-02-17 14:38:17.000Z, , , ,"['661023']", ,3.589,4212.98 +17487.0,pick item,2020-02-17 15:05:03.000Z, ,"['886464']", , , ,0.483,1099.0 +17488.0,pick item,2020-02-17 15:11:12.000Z, ,"['886486']", , , ,0.483,79.99 +17489.0,package delivered,2020-02-17 15:14:50.000Z, , , ,"['661019']", ,2.438,2163.98 +17490.0,pick item,2020-02-17 15:21:06.000Z, ,"['886373']", , , ,0.172,699.0 +17491.0,create package,2020-02-17 15:21:06.000Z, ,"['886423','886416','886316','886422','886295','886424','886314']", ,"['661024']", ,4.525,1187.95 +17492.0,confirm order,2020-02-17 15:24:33.000Z, , ,"['991585']", , ,1.423,294.96 +17493.0,pick item,2020-02-17 15:54:02.000Z, ,"['886356']", , , ,0.483,1099.0 +17494.0,pick item,2020-02-17 15:55:37.000Z, ,"['886465']", , , ,0.28,449.0 +17495.0,confirm order,2020-02-17 15:56:02.000Z, , ,"['991578']", , ,1.324,3359.0 +17496.0,place order,2020-02-17 16:16:38.000Z, ,"['886496','886495','886494','886493','886492']","['991586']", , ,1.52,4330.0 +17497.0,pick item,2020-02-17 16:25:49.000Z, ,"['886345']", , , ,0.483,495.0 +17498.0,pick item,2020-02-17 16:38:52.000Z, ,"['886478']", , , ,0.28,449.0 +17499.0,pick item,2020-02-17 16:39:53.000Z, ,"['886480']", , , ,0.44,476.0 +17500.0,pick item,2020-02-17 16:45:08.000Z, ,"['886363']", , , ,0.495,129.0 +17501.0,item out of stock,2020-02-17 16:46:05.000Z, ,"['886384']", , , ,0.188,1149.0 +17502.0,confirm order,2020-02-17 16:52:23.000Z, , ,"['991580']", , ,0.446,1253.0 +17503.0,send package,2020-02-17 16:54:12.000Z, , , ,"['661022']", ,1.94,1141.98 +17504.0,pick item,2020-02-17 17:06:57.000Z, ,"['886447']", , , ,0.88,89.99 +17505.0,create package,2020-02-17 17:06:57.000Z, ,"['886410','886409','886412','886099','885829','886411']", ,"['661025']", ,3.728,1775.98 +17506.0,pick item,2020-02-17 17:15:17.000Z, ,"['886490']", , , ,0.38,29.99 +17507.0,pick item,2020-02-17 17:23:54.000Z, ,"['886426']", , , ,0.2,39.99 +17508.0,pick item,2020-02-17 17:48:59.000Z, ,"['886457']", , , ,1.48,199.99 +17509.0,place order,2020-02-17 17:53:03.000Z, ,"['886498','886499','886497']","['991587']", , ,1.643,679.98 +17510.0,pay order,2020-02-17 17:59:04.000Z, , ,"['991300']", , ,1.246,1028.99 +17511.0,item out of stock,2020-02-17 18:02:14.000Z, ,"['886491']", , , ,0.28,89.99 +17512.0,pay order,2020-02-17 18:04:54.000Z, , ,"['991558']", , ,7.621,9083.96 +17513.0,pay order,2020-02-17 18:06:07.000Z, , ,"['991584']", , ,0.966,1183.99 +17514.0,pick item,2020-02-17 18:14:39.000Z, ,"['886386']", , , ,0.483,79.99 +17515.0,package delivered,2020-02-17 18:33:42.000Z, , , ,"['661022']", ,1.94,1141.98 +17516.0,pick item,2020-02-17 19:10:43.000Z, ,"['886450']", , , ,0.44,476.0 +17517.0,pick item,2020-02-17 19:20:56.000Z, ,"['886458']", , , ,0.28,449.0 +17518.0,create package,2020-02-17 19:20:56.000Z, ,"['886406','886370','885933','886405','886363','886407','886335','886364','886408','886332']", ,"['661026']", ,5.662000000000001,2174.95 +17519.0,reorder item,2020-02-17 21:00:37.000Z, ,"['886448']", , , ,0.78,99.99 +17520.0,place order,2020-02-17 21:18:44.000Z, ,"['886501','886502','886500']","['991588']", , ,0.935,2252.0 +17521.0,place order,2020-02-18 07:29:03.000Z, ,"['886503','886504']","['991589']", , ,2.16,244.98 +17522.0,send package,2020-02-18 07:30:40.000Z, , , ,"['661024']", ,4.525,1187.95 +17523.0,pick item,2020-02-18 07:33:19.000Z, ,"['886420']", , , ,0.44,476.0 +17524.0,send package,2020-02-18 07:48:58.000Z, , , ,"['661025']", ,3.728,1775.98 +17525.0,pick item,2020-02-18 07:50:43.000Z, ,"['886495']", , , ,0.495,129.0 +17526.0,item out of stock,2020-02-18 08:13:13.000Z, ,"['886475']", , , ,1.25,2200.0 +17527.0,reorder item,2020-02-18 08:17:19.000Z, ,"['886491']", , , ,0.28,89.99 +17528.0,pick item,2020-02-18 08:25:06.000Z, ,"['886493']", , , ,0.188,1149.0 +17529.0,package delivered,2020-02-18 08:36:13.000Z, , , ,"['661020']", ,3.954,5524.97 +17530.0,pick item,2020-02-18 08:40:36.000Z, ,"['886491']", , , ,0.28,89.99 +17531.0,payment reminder,2020-02-18 08:41:23.000Z, , ,"['991361']", , ,8.603,11483.97 +17532.0,pay order,2020-02-18 08:43:09.000Z, , ,"['991555']", , ,5.024,2607.96 +17533.0,pick item,2020-02-18 08:53:24.000Z, ,"['886487']", , , ,0.483,1099.0 +17534.0,confirm order,2020-02-18 08:56:09.000Z, , ,"['991586']", , ,1.52,4330.0 +17535.0,confirm order,2020-02-18 09:03:31.000Z, , ,"['991577']", , ,6.105,3183.97 +17536.0,confirm order,2020-02-18 09:08:48.000Z, , ,"['991589']", , ,2.16,244.98 +17537.0,payment reminder,2020-02-18 09:13:43.000Z, , ,"['991473']", , ,2.258,1382.99 +17538.0,pick item,2020-02-18 09:25:54.000Z, ,"['886366']", , , ,0.28,449.0 +17539.0,pick item,2020-02-18 09:26:01.000Z, ,"['886483']", , , ,0.28,89.99 +17540.0,pick item,2020-02-18 09:26:32.000Z, ,"['885862']", , , ,0.28,449.0 +17541.0,send package,2020-02-18 09:31:00.000Z, , , ,"['661021']", ,1.745,2329.0 +17542.0,place order,2020-02-18 09:33:22.000Z, ,"['886507','886505','886508','886506','886509','886510']","['991590']", , ,2.439,2546.99 +17543.0,pay order,2020-02-18 09:43:20.000Z, , ,"['991422']", , ,1.916,3333.99 +17544.0,confirm order,2020-02-18 09:47:13.000Z, , ,"['991590']", , ,2.439,2546.99 +17545.0,reorder item,2020-02-18 09:53:52.000Z, ,"['886475']", , , ,1.25,2200.0 +17546.0,reorder item,2020-02-18 09:54:14.000Z, ,"['886421']", , , ,1.28,149.99 +17547.0,reorder item,2020-02-18 09:55:39.000Z, ,"['886437']", , , ,0.21,529.0 +17548.0,pick item,2020-02-18 10:07:50.000Z, ,"['885895']", , , ,0.38,29.99 +17549.0,pick item,2020-02-18 10:09:27.000Z, ,"['886504']", , , ,1.28,149.99 +17550.0,create package,2020-02-18 10:09:27.000Z, ,"['886468','886487','886414','886486']", ,"['661027']", ,2.699,3458.98 +17551.0,pick item,2020-02-18 10:15:27.000Z, ,"['886498']", , , ,0.88,89.99 +17552.0,pay order,2020-02-18 10:41:24.000Z, , ,"['991399']", , ,6.537000000000001,3602.96 +17553.0,confirm order,2020-02-18 10:49:58.000Z, , ,"['991588']", , ,0.935,2252.0 +17554.0,pick item,2020-02-18 10:50:15.000Z, ,"['886507']", , , ,0.88,89.99 +17555.0,pick item,2020-02-18 10:53:07.000Z, ,"['885480']", , , ,0.38,29.99 +17556.0,package delivered,2020-02-18 11:12:33.000Z, , , ,"['661014']", ,1.535,1887.99 +17557.0,pick item,2020-02-18 11:22:01.000Z, ,"['886481']", , , ,0.2,39.99 +17558.0,create package,2020-02-18 11:22:01.000Z, ,"['886402','886345','886077','886338','886350']", ,"['661028']", ,2.407,4982.99 +17559.0,place order,2020-02-18 11:26:31.000Z, ,"['886516','886513','886515','886512','886514','886511']","['991591']", , ,5.252999999999999,3199.96 +17560.0,confirm order,2020-02-18 11:27:37.000Z, , ,"['991591']", , ,5.252999999999999,3199.96 +17561.0,pay order,2020-02-18 11:32:08.000Z, , ,"['991544']", , ,1.853,3604.0 +17562.0,item out of stock,2020-02-18 12:09:51.000Z, ,"['886506']", , , ,0.44,476.0 +17563.0,pick item,2020-02-18 12:24:04.000Z, ,"['886502']", , , ,0.483,1099.0 +17564.0,pick item,2020-02-18 13:09:37.000Z, ,"['885965']", , , ,0.166,799.0 +17565.0,place order,2020-02-18 13:12:50.000Z, ,"['886518','886517']","['991592']", , ,1.463,1233.99 +17566.0,pick item,2020-02-18 13:14:11.000Z, ,"['886325']", , , ,0.78,99.99 +17567.0,package delivered,2020-02-18 13:14:20.000Z, , , ,"['661025']", ,3.728,1775.98 +17568.0,package delivered,2020-02-18 13:17:05.000Z, , , ,"['661017']", ,8.501,7826.95 +17569.0,pick item,2020-02-18 13:23:51.000Z, ,"['886467']", , , ,0.166,799.0 +17570.0,failed delivery,2020-02-18 13:25:14.000Z, , , ,"['661021']", ,1.745,2329.0 +17571.0,pick item,2020-02-18 13:28:02.000Z, ,"['886334']", , , ,1.37,2500.0 +17572.0,create package,2020-02-18 13:28:02.000Z, ,"['886471','886019','886472','886356','886476','886469']", ,"['661029']", ,3.551,4986.98 +17573.0,pick item,2020-02-18 13:51:00.000Z, ,"['886496']", , , ,0.166,799.0 +17574.0,pick item,2020-02-18 13:51:40.000Z, ,"['886482']", , , ,0.483,79.99 +17575.0,confirm order,2020-02-18 13:57:12.000Z, , ,"['991576']", , ,1.403,1049.98 +17576.0,pick item,2020-02-18 14:00:45.000Z, ,"['886516']", , , ,0.98,129.99 +17577.0,pick item,2020-02-18 14:01:51.000Z, ,"['886078']", , , ,0.188,1149.0 +17578.0,pick item,2020-02-18 14:05:31.000Z, ,"['886415']", , , ,0.2,39.99 +17579.0,pick item,2020-02-18 14:15:59.000Z, ,"['886497']", , , ,0.483,495.0 +17580.0,create package,2020-02-18 14:15:59.000Z, ,"['886446','886502','886444','886445']", ,"['661030']", ,1.956,1852.0 +17581.0,send package,2020-02-18 14:16:27.000Z, , , ,"['661028']", ,2.407,4982.99 +17582.0,reorder item,2020-02-18 14:23:22.000Z, ,"['886417']", , , ,1.48,199.99 +17583.0,failed delivery,2020-02-18 14:24:47.000Z, , , ,"['661023']", ,3.589,4212.98 +17584.0,pick item,2020-02-18 14:24:55.000Z, ,"['886515']", , , ,0.98,129.99 +17585.0,pick item,2020-02-18 14:32:11.000Z, ,"['886470']", , , ,0.78,99.99 +17586.0,pay order,2020-02-18 14:32:44.000Z, , ,"['991443']", , ,1.826,983.98 +17587.0,pay order,2020-02-18 14:33:40.000Z, , ,"['991563']", , ,2.795,839.98 +17588.0,pay order,2020-02-18 14:34:27.000Z, , ,"['991527']", , ,0.38,34.99 +17589.0,pick item,2020-02-18 14:37:31.000Z, ,"['886501']", , , ,0.28,449.0 +17590.0,place order,2020-02-18 14:45:27.000Z, ,"['886519','886520','886521']","['991593']", , ,1.051,1263.98 +17591.0,package delivered,2020-02-18 14:58:15.000Z, , , ,"['661024']", ,4.525,1187.95 +17592.0,pay order,2020-02-18 15:05:35.000Z, , ,"['991581']", , ,0.649,883.99 +17593.0,item out of stock,2020-02-18 15:11:40.000Z, ,"['886474']", , , ,0.28,449.0 +17594.0,item out of stock,2020-02-18 15:14:04.000Z, ,"['886509']", , , ,0.172,699.0 +17595.0,send package,2020-02-18 15:18:56.000Z, , , ,"['661027']", ,2.699,3458.98 +17596.0,pick item,2020-02-18 15:29:46.000Z, ,"['886508']", , , ,0.172,699.0 +17597.0,create package,2020-02-18 15:29:46.000Z, ,"['886386','886388','886389','886391']", ,"['661031']", ,4.003,5179.98 +17598.0,pay order,2020-02-18 15:31:02.000Z, , ,"['991464']", , ,1.28,154.99 +17599.0,pick item,2020-02-18 15:36:24.000Z, ,"['886505']", , , ,0.495,129.0 +17600.0,pick item,2020-02-18 15:55:11.000Z, ,"['886484']", , , ,0.44,476.0 +17601.0,package delivered,2020-02-18 16:00:47.000Z, , , ,"['661021']", ,1.745,2329.0 +17602.0,item out of stock,2020-02-18 16:09:44.000Z, ,"['886512']", , , ,1.25,2200.0 +17603.0,pick item,2020-02-18 16:11:47.000Z, ,"['886500']", , , ,0.172,699.0 +17604.0,send package,2020-02-18 16:18:15.000Z, , , ,"['661030']", ,1.956,1852.0 +17605.0,confirm order,2020-02-18 16:22:45.000Z, , ,"['991593']", , ,1.051,1263.98 +17606.0,pick item,2020-02-18 16:39:08.000Z, ,"['886297']", , , ,0.188,1149.0 +17607.0,create package,2020-02-18 16:39:08.000Z, ,"['886452','886451','886450','885480']", ,"['661032']", ,1.5830000000000002,1034.98 +17608.0,item out of stock,2020-02-18 16:50:17.000Z, ,"['886499']", , , ,0.28,89.99 +17609.0,place order,2020-02-18 16:50:41.000Z, ,"['886522','886523','886524','886525']","['991594']", , ,2.853,1268.98 +17610.0,pick item,2020-02-18 16:55:35.000Z, ,"['886461']", , , ,0.172,699.0 +17611.0,pick item,2020-02-18 16:58:00.000Z, ,"['886365']", , , ,0.88,89.99 +17612.0,pick item,2020-02-18 17:18:43.000Z, ,"['886432']", , , ,0.483,495.0 +17613.0,pick item,2020-02-18 17:40:54.000Z, ,"['886065']", , , ,0.172,699.0 +17614.0,create package,2020-02-18 17:40:54.000Z, ,"['886463','886461','886373','886396','886460','886458']", ,"['661033']", ,1.3019999999999998,3974.0 +17615.0,pick item,2020-02-18 18:45:13.000Z, ,"['886489']", , , ,0.28,89.99 +17616.0,place order,2020-02-18 19:11:38.000Z, ,"['886526','886527']","['991595']", , ,0.99,633.99 +17617.0,confirm order,2020-02-18 20:29:34.000Z, , ,"['991595']", , ,0.99,633.99 +17618.0,payment reminder,2020-02-18 20:39:42.000Z, , ,"['991479']", , ,4.369,2831.95 +17619.0,send package,2020-02-18 21:19:27.000Z, , , ,"['661026']", ,5.662000000000001,2174.95 +17620.0,place order,2020-02-18 22:02:51.000Z, ,"['886528','886529']","['991596']", , ,1.65,2594.99 +17621.0,create package,2020-02-18 23:00:00.000Z, ,"['886477','886482','886478','886480','886484','886498','886483','886497','886481']", ,"['661034']", ,3.674,3344.96 +17622.0,pick item,2020-02-19 07:47:36.000Z, ,"['886453']", , , ,0.495,129.0 +17623.0,pay order,2020-02-19 07:48:39.000Z, , ,"['991409']", , ,1.648,1413.97 +17624.0,place order,2020-02-19 07:55:00.000Z, ,"['886530','886532','886531']","['991597']", , ,0.544,1442.99 +17625.0,send package,2020-02-19 08:04:42.000Z, , , ,"['661033']", ,1.3019999999999998,3974.0 +17626.0,package delivered,2020-02-19 08:06:50.000Z, , , ,"['661033']", ,1.3019999999999998,3974.0 +17627.0,package delivered,2020-02-19 08:11:54.000Z, , , ,"['661023']", ,3.589,4212.98 +17628.0,pick item,2020-02-19 08:22:00.000Z, ,"['886485']", , , ,1.37,2500.0 +17629.0,failed delivery,2020-02-19 08:39:41.000Z, , , ,"['661027']", ,2.699,3458.98 +17630.0,confirm order,2020-02-19 08:44:19.000Z, , ,"['991587']", , ,1.643,679.98 +17631.0,send package,2020-02-19 09:02:00.000Z, , , ,"['661034']", ,3.674,3344.96 +17632.0,pay order,2020-02-19 09:04:35.000Z, , ,"['991564']", , ,2.75,552.98 +17633.0,pick item,2020-02-19 09:05:22.000Z, ,"['886488']", , , ,0.483,79.99 +17634.0,send package,2020-02-19 09:22:40.000Z, , , ,"['661032']", ,1.5830000000000002,1034.98 +17635.0,pick item,2020-02-19 09:31:42.000Z, ,"['886352']", , , ,1.48,199.99 +17636.0,pick item,2020-02-19 09:32:53.000Z, ,"['886492']", , , ,0.483,1099.0 +17637.0,package delivered,2020-02-19 09:33:36.000Z, , , ,"['661032']", ,1.5830000000000002,1034.98 +17638.0,confirm order,2020-02-19 09:40:55.000Z, , ,"['991597']", , ,0.544,1442.99 +17639.0,reorder item,2020-02-19 09:44:53.000Z, ,"['886384']", , , ,0.188,1149.0 +17640.0,pick item,2020-02-19 10:06:51.000Z, ,"['886466']", , , ,0.166,799.0 +17641.0,package delivered,2020-02-19 10:11:49.000Z, , , ,"['661030']", ,1.956,1852.0 +17642.0,place order,2020-02-19 10:12:17.000Z, ,"['886533','886535','886536','886534']","['991598']", , ,3.313,6333.0 +17643.0,pick item,2020-02-19 10:17:58.000Z, ,"['886528']", , , ,1.37,2500.0 +17644.0,item out of stock,2020-02-19 10:38:19.000Z, ,"['886441']", , , ,0.495,129.0 +17645.0,pick item,2020-02-19 11:01:05.000Z, ,"['886430']", , , ,0.166,799.0 +17646.0,package delivered,2020-02-19 11:03:59.000Z, , , ,"['661026']", ,5.662000000000001,2174.95 +17647.0,pick item,2020-02-19 11:05:55.000Z, ,"['886459']", , , ,0.21,529.0 +17648.0,pay order,2020-02-19 11:29:50.000Z, , ,"['991577']", , ,6.105,3183.97 +17649.0,item out of stock,2020-02-19 11:40:53.000Z, ,"['886524']", , , ,1.28,149.99 +17650.0,place order,2020-02-19 11:44:22.000Z, ,"['886541','886539','886540','886537','886538']","['991599']", , ,1.656,2616.99 +17651.0,pick item,2020-02-19 11:45:33.000Z, ,"['886522']", , , ,0.483,495.0 +17652.0,pick item,2020-02-19 11:50:10.000Z, ,"['886511']", , , ,0.483,495.0 +17653.0,pick item,2020-02-19 12:15:55.000Z, ,"['886443']", , , ,1.28,149.99 +17654.0,send package,2020-02-19 12:20:45.000Z, , , ,"['661029']", ,3.551,4986.98 +17655.0,item out of stock,2020-02-19 12:28:27.000Z, ,"['886533']", , , ,1.37,2500.0 +17656.0,pick item,2020-02-19 13:15:11.000Z, ,"['886535']", , , ,0.483,1099.0 +17657.0,pay order,2020-02-19 13:18:29.000Z, , ,"['991479']", , ,4.369,2831.95 +17658.0,pay order,2020-02-19 13:35:22.000Z, , ,"['991552']", , ,6.237,6293.95 +17659.0,package delivered,2020-02-19 13:47:20.000Z, , , ,"['661028']", ,2.407,4982.99 +17660.0,package delivered,2020-02-19 13:48:24.000Z, , , ,"['661034']", ,3.674,3344.96 +17661.0,place order,2020-02-19 13:48:31.000Z, ,"['886544','886543','886542']","['991600']", , ,1.916,3333.99 +17662.0,send package,2020-02-19 13:49:53.000Z, , , ,"['661031']", ,4.003,5179.98 +17663.0,pick item,2020-02-19 14:00:35.000Z, ,"['886538']", , , ,0.21,529.0 +17664.0,create package,2020-02-19 14:00:35.000Z, ,"['885965','885895','886440','885867']", ,"['661035']", ,1.809,1423.98 +17665.0,pick item,2020-02-19 14:10:43.000Z, ,"['886514']", , , ,0.28,89.99 +17666.0,confirm order,2020-02-19 14:17:47.000Z, , ,"['991598']", , ,3.313,6333.0 +17667.0,confirm order,2020-02-19 14:26:03.000Z, , ,"['991599']", , ,1.656,2616.99 +17668.0,send package,2020-02-19 14:46:45.000Z, , , ,"['661035']", ,1.809,1423.98 +17669.0,pick item,2020-02-19 14:53:06.000Z, ,"['886523']", , , ,0.21,529.0 +17670.0,pick item,2020-02-19 15:07:17.000Z, ,"['886534']", , , ,1.25,2200.0 +17671.0,reorder item,2020-02-19 15:13:50.000Z, ,"['886509']", , , ,0.172,699.0 +17672.0,pick item,2020-02-19 15:27:35.000Z, ,"['886503']", , , ,0.88,89.99 +17673.0,create package,2020-02-19 15:27:35.000Z, ,"['886507','886508','886430','886505','886538','886426','886428']", ,"['661036']", ,2.6060000000000003,2365.97 +17674.0,pick item,2020-02-19 15:43:50.000Z, ,"['886442']", , , ,0.38,29.99 +17675.0,item out of stock,2020-02-19 15:44:15.000Z, ,"['886519']", , , ,0.483,79.99 +17676.0,pick item,2020-02-19 15:46:31.000Z, ,"['886521']", , , ,0.38,29.99 +17677.0,pick item,2020-02-19 15:53:23.000Z, ,"['886195']", , , ,0.78,99.99 +17678.0,place order,2020-02-19 15:56:50.000Z, ,"['886546','886545']","['991601']", , ,1.865,2634.0 +17679.0,pay order,2020-02-19 16:01:36.000Z, , ,"['991469']", , ,1.09,623.99 +17680.0,pick item,2020-02-19 16:03:06.000Z, ,"['885669']", , , ,0.88,89.99 +17681.0,confirm order,2020-02-19 16:09:29.000Z, , ,"['991594']", , ,2.853,1268.98 +17682.0,pick item,2020-02-19 16:19:26.000Z, ,"['886454']", , , ,1.37,2500.0 +17683.0,reorder item,2020-02-19 16:26:10.000Z, ,"['886512']", , , ,1.25,2200.0 +17684.0,pay order,2020-02-19 16:35:45.000Z, , ,"['991565']", , ,2.73,2404.99 +17685.0,item out of stock,2020-02-19 16:41:02.000Z, ,"['886434']", , , ,1.25,2200.0 +17686.0,pick item,2020-02-19 16:42:22.000Z, ,"['885914']", , , ,0.78,99.99 +17687.0,item out of stock,2020-02-19 17:10:11.000Z, ,"['886531']", , , ,0.172,699.0 +17688.0,pick item,2020-02-19 17:11:12.000Z, ,"['886537']", , , ,0.483,495.0 +17689.0,create package,2020-02-19 17:11:12.000Z, ,"['886491','885914','886488','886490','886432','886489','886352','886065','886160']", ,"['661037']", ,4.7780000000000005,2259.94 +17690.0,pay order,2020-02-19 17:26:21.000Z, , ,"['991223']", , ,3.523,4392.97 +17691.0,pick item,2020-02-19 17:27:05.000Z, ,"['886520']", , , ,0.188,1149.0 +17692.0,place order,2020-02-19 18:13:27.000Z, ,"['886548','886547','886549']","['991602']", , ,0.94,573.98 +17693.0,pick item,2020-02-19 18:50:23.000Z, ,"['886400']", , , ,0.483,495.0 +17694.0,item out of stock,2020-02-19 19:12:07.000Z, ,"['886544']", , , ,0.166,799.0 +17695.0,pay order,2020-02-19 19:31:58.000Z, , ,"['991510']", , ,4.763,6855.99 +17696.0,pick item,2020-02-19 19:42:31.000Z, ,"['886479']", , , ,0.28,89.99 +17697.0,reorder item,2020-02-19 21:05:37.000Z, ,"['886394']", , , ,0.98,129.99 +17698.0,place order,2020-02-19 21:06:29.000Z, ,"['886551','886550','886552','886553']","['991603']", , ,1.403,2208.0 +17699.0,place order,2020-02-20 06:56:48.000Z, ,"['886555','886554']","['991604']", , ,1.26,124.98 +17700.0,pay order,2020-02-20 07:53:02.000Z, , ,"['991540']", , ,7.353,2181.94 +17701.0,pick item,2020-02-20 07:57:20.000Z, ,"['886439']", , , ,0.98,129.99 +17702.0,pay order,2020-02-20 08:00:56.000Z, , ,"['991533']", , ,1.4480000000000002,1373.98 +17703.0,confirm order,2020-02-20 08:03:41.000Z, , ,"['991603']", , ,1.403,2208.0 +17704.0,pay order,2020-02-20 08:13:25.000Z, , ,"['991553']", , ,4.53,2944.97 +17705.0,item out of stock,2020-02-20 08:19:26.000Z, ,"['886550']", , , ,0.495,129.0 +17706.0,failed delivery,2020-02-20 08:26:46.000Z, , , ,"['661029']", ,3.551,4986.98 +17707.0,reorder item,2020-02-20 08:55:11.000Z, ,"['886531']", , , ,0.172,699.0 +17708.0,item out of stock,2020-02-20 09:00:56.000Z, ,"['886543']", , , ,1.37,2500.0 +17709.0,payment reminder,2020-02-20 09:23:33.000Z, , ,"['991489']", , ,3.175,3092.97 +17710.0,place order,2020-02-20 09:46:16.000Z, ,"['886557','886556']","['991605']", , ,1.052,793.99 +17711.0,pick item,2020-02-20 09:59:56.000Z, ,"['886437']", , , ,0.21,529.0 +17712.0,pay order,2020-02-20 10:01:42.000Z, , ,"['991452']", , ,1.188,2528.0 +17713.0,package delivered,2020-02-20 10:05:31.000Z, , , ,"['661031']", ,4.003,5179.98 +17714.0,reorder item,2020-02-20 10:07:04.000Z, ,"['886519']", , , ,0.483,79.99 +17715.0,pick item,2020-02-20 10:11:42.000Z, ,"['886427']", , , ,0.28,89.99 +17716.0,pick item,2020-02-20 10:13:00.000Z, ,"['886455']", , , ,1.28,149.99 +17717.0,package delivered,2020-02-20 10:17:23.000Z, , , ,"['661027']", ,2.699,3458.98 +17718.0,pick item,2020-02-20 10:24:00.000Z, ,"['886525']", , , ,0.88,89.99 +17719.0,pick item,2020-02-20 10:40:38.000Z, ,"['886548']", , , ,0.38,29.99 +17720.0,create package,2020-02-20 10:40:38.000Z, ,"['886464','885862']", ,"['661038']", ,0.763,1548.0 +17721.0,confirm order,2020-02-20 10:45:53.000Z, , ,"['991600']", , ,1.916,3333.99 +17722.0,pay order,2020-02-20 10:56:27.000Z, , ,"['991597']", , ,0.544,1442.99 +17723.0,item out of stock,2020-02-20 11:00:34.000Z, ,"['886547']", , , ,0.28,449.0 +17724.0,item out of stock,2020-02-20 11:07:27.000Z, ,"['886513']", , , ,1.28,149.99 +17725.0,pick item,2020-02-20 11:13:37.000Z, ,"['886475']", , , ,1.25,2200.0 +17726.0,pick item,2020-02-20 11:21:50.000Z, ,"['886554']", , , ,0.38,29.99 +17727.0,create package,2020-02-20 11:21:50.000Z, ,"['886454','886466','886455','886420','886415','886504','886453','886503','886457','886465']", ,"['661039']", ,7.871,4982.95 +17728.0,package delivered,2020-02-20 11:38:42.000Z, , , ,"['661029']", ,3.551,4986.98 +17729.0,place order,2020-02-20 11:52:20.000Z, ,"['886559','886558']","['991606']", , ,2.23,2334.99 +17730.0,pay order,2020-02-20 11:57:30.000Z, , ,"['991593']", , ,1.051,1263.98 +17731.0,pick item,2020-02-20 12:22:51.000Z, ,"['886549']", , , ,0.28,89.99 +17732.0,package delivered,2020-02-20 12:31:32.000Z, , , ,"['661035']", ,1.809,1423.98 +17733.0,item out of stock,2020-02-20 12:33:14.000Z, ,"['886539']", , , ,0.2,39.99 +17734.0,confirm order,2020-02-20 12:36:46.000Z, , ,"['991596']", , ,1.65,2594.99 +17735.0,pay order,2020-02-20 12:41:27.000Z, , ,"['991374']", , ,0.2,44.99 +17736.0,pay order,2020-02-20 13:05:22.000Z, , ,"['991473']", , ,2.258,1382.99 +17737.0,pay order,2020-02-20 13:09:34.000Z, , ,"['991562']", , ,2.7910000000000004,3222.99 +17738.0,reorder item,2020-02-20 13:28:24.000Z, ,"['886544']", , , ,0.166,799.0 +17739.0,pay order,2020-02-20 13:39:40.000Z, , ,"['991489']", , ,3.175,3092.97 +17740.0,reorder item,2020-02-20 13:50:53.000Z, ,"['886524']", , , ,1.28,149.99 +17741.0,payment reminder,2020-02-20 13:59:55.000Z, , ,"['991488']", , ,1.49,683.99 +17742.0,place order,2020-02-20 14:04:27.000Z, ,"['886565','886561','886566','886563','886564','886567','886560','886562']","['991607']", , ,6.63,5723.95 +17743.0,confirm order,2020-02-20 14:16:04.000Z, , ,"['991606']", , ,2.23,2334.99 +17744.0,pay order,2020-02-20 14:19:31.000Z, , ,"['991603']", , ,1.403,2208.0 +17745.0,reorder item,2020-02-20 14:20:07.000Z, ,"['886434']", , , ,1.25,2200.0 +17746.0,item out of stock,2020-02-20 14:21:19.000Z, ,"['886546']", , , ,1.37,2500.0 +17747.0,send package,2020-02-20 14:37:25.000Z, , , ,"['661036']", ,2.6060000000000003,2365.97 +17748.0,send package,2020-02-20 14:43:18.000Z, , , ,"['661038']", ,0.763,1548.0 +17749.0,pick item,2020-02-20 14:52:26.000Z, ,"['886560']", , , ,0.21,529.0 +17750.0,send package,2020-02-20 15:02:43.000Z, , , ,"['661037']", ,4.7780000000000005,2259.94 +17751.0,package delivered,2020-02-20 15:09:13.000Z, , , ,"['661037']", ,4.7780000000000005,2259.94 +17752.0,pick item,2020-02-20 15:18:28.000Z, ,"['886551']", , , ,0.188,1149.0 +17753.0,pick item,2020-02-20 15:18:54.000Z, ,"['886552']", , , ,0.44,476.0 +17754.0,confirm order,2020-02-20 15:19:26.000Z, , ,"['991607']", , ,6.63,5723.95 +17755.0,pick item,2020-02-20 15:20:12.000Z, ,"['886536']", , , ,0.21,529.0 +17756.0,place order,2020-02-20 15:28:41.000Z, ,"['886568','886569']","['991608']", , ,1.57,2544.99 +17757.0,payment reminder,2020-02-20 15:39:59.000Z, , ,"['991491']", , ,2.327,1022.98 +17758.0,pick item,2020-02-20 15:41:09.000Z, ,"['886438']", , , ,0.172,699.0 +17759.0,pick item,2020-02-20 15:47:23.000Z, ,"['886517']", , , ,0.483,1099.0 +17760.0,pick item,2020-02-20 15:54:15.000Z, ,"['886559']", , , ,0.98,129.99 +17761.0,pick item,2020-02-20 16:07:17.000Z, ,"['886456']", , , ,1.48,199.99 +17762.0,pick item,2020-02-20 16:09:34.000Z, ,"['886320']", , , ,0.483,495.0 +17763.0,create package,2020-02-20 16:09:34.000Z, ,"['886516','886447','886195','886515','886514','886511']", ,"['661040']", ,4.383,1034.95 +17764.0,reorder item,2020-02-20 16:13:39.000Z, ,"['886539']", , , ,0.2,39.99 +17765.0,payment reminder,2020-02-20 16:21:57.000Z, , ,"['991482']", , ,1.87,713.98 +17766.0,pick item,2020-02-20 16:32:44.000Z, ,"['886564']", , , ,0.38,29.99 +17767.0,send package,2020-02-20 16:39:04.000Z, , , ,"['661039']", ,7.871,4982.95 +17768.0,place order,2020-02-20 17:17:10.000Z, ,"['886570','886573','886572','886571']","['991609']", , ,1.936,1572.98 +17769.0,pick item,2020-02-20 17:32:13.000Z, ,"['886397']", , , ,1.25,2200.0 +17770.0,place order,2020-02-20 19:31:05.000Z, ,"['886574','886578','886575','886576','886577']","['991610']", , ,2.2030000000000003,1168.97 +17771.0,pick item,2020-02-20 21:25:10.000Z, ,"['886577']", , , ,0.483,495.0 +17772.0,place order,2020-02-20 23:24:24.000Z, ,"['886581','886579','886580']","['991611']", , ,3.043,799.98 +17773.0,confirm order,2020-02-21 07:30:19.000Z, , ,"['991608']", , ,1.57,2544.99 +17774.0,pick item,2020-02-21 07:40:02.000Z, ,"['886579']", , , ,1.28,149.99 +17775.0,pick item,2020-02-21 07:54:25.000Z, ,"['886542']", , , ,0.38,29.99 +17776.0,pick item,2020-02-21 07:59:37.000Z, ,"['886449']", , , ,0.2,39.99 +17777.0,create package,2020-02-21 07:59:37.000Z, ,"['886437','886496','886495','886493','886492']", ,"['661041']", ,1.5419999999999998,3705.0 +17778.0,confirm order,2020-02-21 08:08:52.000Z, , ,"['991610']", , ,2.2030000000000003,1168.97 +17779.0,place order,2020-02-21 08:28:37.000Z, ,"['886584','886583','886582']","['991612']", , ,1.6,1019.99 +17780.0,pay order,2020-02-21 08:35:29.000Z, , ,"['991600']", , ,1.916,3333.99 +17781.0,confirm order,2020-02-21 08:38:31.000Z, , ,"['991592']", , ,1.463,1233.99 +17782.0,reorder item,2020-02-21 08:44:49.000Z, ,"['886533']", , , ,1.37,2500.0 +17783.0,pick item,2020-02-21 08:46:40.000Z, ,"['886527']", , , ,0.21,529.0 +17784.0,pick item,2020-02-21 08:54:03.000Z, ,"['886566']", , , ,0.88,89.99 +17785.0,reorder item,2020-02-21 08:59:04.000Z, ,"['886513']", , , ,1.28,149.99 +17786.0,pick item,2020-02-21 09:01:07.000Z, ,"['886575']", , , ,0.28,89.99 +17787.0,item out of stock,2020-02-21 09:08:03.000Z, ,"['886573']", , , ,0.28,89.99 +17788.0,pay order,2020-02-21 09:17:58.000Z, , ,"['991573']", , ,0.495,134.0 +17789.0,reorder item,2020-02-21 09:19:17.000Z, ,"['886550']", , , ,0.495,129.0 +17790.0,pick item,2020-02-21 09:26:04.000Z, ,"['886572']", , , ,0.166,799.0 +17791.0,pick item,2020-02-21 09:29:21.000Z, ,"['886556']", , , ,0.88,89.99 +17792.0,create package,2020-02-21 09:29:21.000Z, ,"['886334','886325','886366','886365']", ,"['661042']", ,3.31,3138.98 +17793.0,package delivered,2020-02-21 09:37:09.000Z, , , ,"['661039']", ,7.871,4982.95 +17794.0,pick item,2020-02-21 09:47:49.000Z, ,"['886434']", , , ,1.25,2200.0 +17795.0,confirm order,2020-02-21 09:55:33.000Z, , ,"['991611']", , ,3.043,799.98 +17796.0,package delivered,2020-02-21 10:14:55.000Z, , , ,"['661038']", ,0.763,1548.0 +17797.0,place order,2020-02-21 10:17:02.000Z, ,"['886586','886588','886585','886587']","['991613']", , ,3.49,4663.0 +17798.0,pick item,2020-02-21 10:19:50.000Z, ,"['886512']", , , ,1.25,2200.0 +17799.0,pick item,2020-02-21 10:22:33.000Z, ,"['886540']", , , ,0.28,449.0 +17800.0,reorder item,2020-02-21 10:26:52.000Z, ,"['886441']", , , ,0.495,129.0 +17801.0,send package,2020-02-21 10:39:48.000Z, , , ,"['661040']", ,4.383,1034.95 +17802.0,package delivered,2020-02-21 10:44:29.000Z, , , ,"['661040']", ,4.383,1034.95 +17803.0,pay order,2020-02-21 10:45:20.000Z, , ,"['991586']", , ,1.52,4330.0 +17804.0,send package,2020-02-21 10:45:28.000Z, , , ,"['661042']", ,3.31,3138.98 +17805.0,pick item,2020-02-21 10:45:57.000Z, ,"['886383']", , , ,0.78,99.99 +17806.0,create package,2020-02-21 10:45:57.000Z, ,"['886467']", ,"['661043']", ,0.166,799.0 +17807.0,pick item,2020-02-21 10:57:16.000Z, ,"['886565']", , , ,0.98,129.99 +17808.0,create package,2020-02-21 10:57:16.000Z, ,"['886572','886552','886535','886536','886534','886078','886551','886528']", ,"['661044']", ,4.295,9901.0 +17809.0,package delivered,2020-02-21 11:07:16.000Z, , , ,"['661036']", ,2.6060000000000003,2365.97 +17810.0,confirm order,2020-02-21 11:08:55.000Z, , ,"['991612']", , ,1.6,1019.99 +17811.0,reorder item,2020-02-21 11:08:57.000Z, ,"['886547']", , , ,0.28,449.0 +17812.0,item out of stock,2020-02-21 11:10:01.000Z, ,"['886555']", , , ,0.88,89.99 +17813.0,confirm order,2020-02-21 11:13:28.000Z, , ,"['991609']", , ,1.936,1572.98 +17814.0,item out of stock,2020-02-21 11:14:42.000Z, ,"['886541']", , , ,0.483,1099.0 +17815.0,pick item,2020-02-21 11:38:31.000Z, ,"['886568']", , , ,0.2,39.99 +17816.0,confirm order,2020-02-21 11:48:58.000Z, , ,"['991602']", , ,0.94,573.98 +17817.0,place order,2020-02-21 11:53:51.000Z, ,"['886590','886591','886589','886592','886593']","['991614']", , ,3.151,2041.98 +17818.0,reorder item,2020-02-21 13:32:03.000Z, ,"['886573']", , , ,0.28,89.99 +17819.0,confirm order,2020-02-21 13:32:13.000Z, , ,"['991605']", , ,1.052,793.99 +17820.0,pick item,2020-02-21 13:59:46.000Z, ,"['886562']", , , ,1.37,2500.0 +17821.0,place order,2020-02-21 14:07:30.000Z, ,"['886595','886597','886594','886596']","['991615']", , ,1.626,1063.97 +17822.0,send package,2020-02-21 14:18:46.000Z, , , ,"['661041']", ,1.5419999999999998,3705.0 +17823.0,confirm order,2020-02-21 14:46:49.000Z, , ,"['991614']", , ,3.151,2041.98 +17824.0,pick item,2020-02-21 14:48:57.000Z, ,"['886595']", , , ,0.166,799.0 +17825.0,failed delivery,2020-02-21 14:49:04.000Z, , , ,"['661042']", ,3.31,3138.98 +17826.0,pick item,2020-02-21 14:55:28.000Z, ,"['886509']", , , ,0.172,699.0 +17827.0,pick item,2020-02-21 14:57:13.000Z, ,"['886587']", , , ,0.495,129.0 +17828.0,pick item,2020-02-21 15:17:44.000Z, ,"['886435']", , , ,0.172,699.0 +17829.0,pick item,2020-02-21 15:21:22.000Z, ,"['886580']", , , ,0.483,495.0 +17830.0,place order,2020-02-21 15:34:47.000Z, ,"['886602','886600','886601','886598','886606','886604','886603','886599','886605','886607']","['991616']", , ,5.202999999999999,2757.94 +17831.0,pick item,2020-02-21 15:38:04.000Z, ,"['886585']", , , ,1.25,2200.0 +17832.0,create package,2020-02-21 15:38:04.000Z, ,"['886320','886475','886470']", ,"['661045']", ,2.513,2794.99 +17833.0,pick item,2020-02-21 15:39:55.000Z, ,"['886526']", , , ,0.78,99.99 +17834.0,failed delivery,2020-02-21 15:54:57.000Z, , , ,"['661041']", ,1.5419999999999998,3705.0 +17835.0,pick item,2020-02-21 16:08:03.000Z, ,"['886553']", , , ,0.28,449.0 +17836.0,pick item,2020-02-21 16:14:19.000Z, ,"['886578']", , , ,0.78,99.99 +17837.0,create package,2020-02-21 16:14:19.000Z, ,"['886500','886442','886549','886548','886501','886443','886568','886556']", ,"['661046']", ,3.852,1577.94 +17838.0,pay order,2020-02-21 16:22:43.000Z, , ,"['991566']", , ,0.41,573.99 +17839.0,item out of stock,2020-02-21 16:29:00.000Z, ,"['886597']", , , ,0.98,129.99 +17840.0,pick item,2020-02-21 16:30:41.000Z, ,"['886557']", , , ,0.172,699.0 +17841.0,confirm order,2020-02-21 16:45:31.000Z, , ,"['991604']", , ,1.26,124.98 +17842.0,place order,2020-02-21 17:29:21.000Z, ,"['886610','886608','886609']","['991617']", , ,2.025,2423.99 +17843.0,pick item,2020-02-21 18:05:33.000Z, ,"['886584']", , , ,0.44,476.0 +17844.0,confirm order,2020-02-21 18:13:22.000Z, , ,"['991601']", , ,1.865,2634.0 +17845.0,pick item,2020-02-21 18:15:12.000Z, ,"['886598']", , , ,0.188,1149.0 +17846.0,failed delivery,2020-02-21 19:15:32.000Z, , , ,"['661041']", ,1.5419999999999998,3705.0 +17847.0,place order,2020-02-21 20:07:38.000Z, ,"['886611','886612','886613']","['991618']", , ,1.44,583.98 +17848.0,pick item,2020-02-21 20:42:38.000Z, ,"['886582']", , , ,0.88,89.99 +17849.0,pick item,2020-02-21 21:03:14.000Z, ,"['886576']", , , ,0.28,449.0 +17850.0,item out of stock,2020-02-21 21:04:58.000Z, ,"['886571']", , , ,1.28,149.99 +17851.0,place order,2020-02-22 09:45:42.000Z, ,"['886615','886614','886617','886616']","['991619']", , ,1.683,1891.0 +17852.0,place order,2020-02-23 10:25:18.000Z, ,"['886620','886619','886618']","['991620']", , ,0.992,1209.99 +17853.0,create package,2020-02-23 23:00:00.000Z, ,"['886522','886523','886297','886525','886383']", ,"['661047']", ,2.541,2362.98 +17854.0,place order,2020-02-24 03:02:30.000Z, ,"['886625','886622','886627','886624','886628','886623','886621','886626']","['991621']", , ,3.4730000000000003,3496.97 +17855.0,pay order,2020-02-24 07:47:53.000Z, , ,"['991585']", , ,1.423,294.96 +17856.0,reorder item,2020-02-24 08:22:28.000Z, ,"['886543']", , , ,1.37,2500.0 +17857.0,pay order,2020-02-24 08:28:08.000Z, , ,"['991611']", , ,3.043,799.98 +17858.0,place order,2020-02-24 08:28:33.000Z, ,"['886630','886633','886634','886632','886635','886631','886629']","['991622']", , ,4.981,1782.95 +17859.0,item out of stock,2020-02-24 08:34:23.000Z, ,"['886583']", , , ,0.28,449.0 +17860.0,pay order,2020-02-24 08:43:16.000Z, , ,"['991583']", , ,3.961,5354.96 +17861.0,pick item,2020-02-24 08:48:12.000Z, ,"['886623']", , , ,1.48,199.99 +17862.0,pick item,2020-02-24 09:01:39.000Z, ,"['886570']", , , ,0.21,529.0 +17863.0,reorder item,2020-02-24 09:21:14.000Z, ,"['886571']", , , ,1.28,149.99 +17864.0,pick item,2020-02-24 09:26:37.000Z, ,"['886601']", , , ,0.28,89.99 +17865.0,confirm order,2020-02-24 09:28:36.000Z, , ,"['991619']", , ,1.683,1891.0 +17866.0,item out of stock,2020-02-24 09:30:28.000Z, ,"['886632']", , , ,0.483,79.99 +17867.0,pick item,2020-02-24 09:32:51.000Z, ,"['886614']", , , ,0.21,529.0 +17868.0,pick item,2020-02-24 09:42:08.000Z, ,"['886617']", , , ,0.495,129.0 +17869.0,pay order,2020-02-24 10:04:24.000Z, , ,"['991596']", , ,1.65,2594.99 +17870.0,confirm order,2020-02-24 10:06:26.000Z, , ,"['991621']", , ,3.4730000000000003,3496.97 +17871.0,pick item,2020-02-24 10:10:22.000Z, ,"['886545']", , , ,0.495,129.0 +17872.0,place order,2020-02-24 10:16:53.000Z, ,"['886638','886637','886636','886639']","['991623']", , ,4.42,534.96 +17873.0,confirm order,2020-02-24 10:17:29.000Z, , ,"['991622']", , ,4.981,1782.95 +17874.0,pick item,2020-02-24 10:23:02.000Z, ,"['886634']", , , ,0.88,89.99 +17875.0,pick item,2020-02-24 10:24:10.000Z, ,"['886612']", , , ,0.28,449.0 +17876.0,create package,2020-02-24 10:24:10.000Z, ,"['886559','886479','886554','886485']", ,"['661048']", ,3.01,2749.97 +17877.0,pick item,2020-02-24 10:26:26.000Z, ,"['886629']", , , ,0.495,129.0 +17878.0,pick item,2020-02-24 10:31:09.000Z, ,"['886624']", , , ,0.166,799.0 +17879.0,send package,2020-02-24 10:35:44.000Z, , , ,"['661044']", ,4.295,9901.0 +17880.0,reorder item,2020-02-24 10:41:10.000Z, ,"['886541']", , , ,0.483,1099.0 +17881.0,pick item,2020-02-24 10:46:01.000Z, ,"['886631']", , , ,1.48,199.99 +17882.0,pick item,2020-02-24 10:46:04.000Z, ,"['886588']", , , ,1.25,2200.0 +17883.0,create package,2020-02-24 10:46:04.000Z, ,"['886397','886459','886520','886521','886542']", ,"['661049']", ,2.408,3937.98 +17884.0,pick item,2020-02-24 10:54:07.000Z, ,"['886620']", , , ,0.44,476.0 +17885.0,payment reminder,2020-02-24 11:02:33.000Z, , ,"['991508']", , ,1.618,1652.99 +17886.0,confirm order,2020-02-24 11:03:06.000Z, , ,"['991620']", , ,0.992,1209.99 +17887.0,item out of stock,2020-02-24 11:05:24.000Z, ,"['886593']", , , ,0.21,529.0 +17888.0,pick item,2020-02-24 11:12:30.000Z, ,"['886619']", , , ,0.38,29.99 +17889.0,package delivered,2020-02-24 11:13:28.000Z, , , ,"['661042']", ,3.31,3138.98 +17890.0,pick item,2020-02-24 11:22:33.000Z, ,"['886518']", , , ,0.98,129.99 +17891.0,item out of stock,2020-02-24 11:25:52.000Z, ,"['886530']", , , ,0.172,699.0 +17892.0,item out of stock,2020-02-24 11:29:41.000Z, ,"['886604']", , , ,0.28,89.99 +17893.0,reorder item,2020-02-24 11:35:00.000Z, ,"['886604']", , , ,0.28,89.99 +17894.0,place order,2020-02-24 11:53:34.000Z, ,"['886642','886640','886641']","['991624']", , ,1.215,1059.0 +17895.0,reorder item,2020-02-24 11:56:57.000Z, ,"['886632']", , , ,0.483,79.99 +17896.0,send package,2020-02-24 12:19:10.000Z, , , ,"['661046']", ,3.852,1577.94 +17897.0,send package,2020-02-24 12:23:15.000Z, , , ,"['661043']", ,0.166,799.0 +17898.0,pick item,2020-02-24 12:37:27.000Z, ,"['886602']", , , ,0.88,89.99 +17899.0,pick item,2020-02-24 12:45:30.000Z, ,"['886596']", , , ,0.2,39.99 +17900.0,create package,2020-02-24 12:45:30.000Z, ,"['886439','886438','885669','886620','886619']", ,"['661050']", ,2.852,1424.97 +17901.0,send package,2020-02-24 12:52:48.000Z, , , ,"['661048']", ,3.01,2749.97 +17902.0,confirm order,2020-02-24 12:53:21.000Z, , ,"['991613']", , ,3.49,4663.0 +17903.0,send package,2020-02-24 13:12:54.000Z, , , ,"['661047']", ,2.541,2362.98 +17904.0,pick item,2020-02-24 13:19:04.000Z, ,"['886541']", , , ,0.483,1099.0 +17905.0,item out of stock,2020-02-24 13:19:28.000Z, ,"['886586']", , , ,0.495,129.0 +17906.0,item out of stock,2020-02-24 13:20:13.000Z, ,"['886558']", , , ,1.25,2200.0 +17907.0,payment reminder,2020-02-24 13:49:29.000Z, , ,"['991507']", , ,2.41,2384.98 +17908.0,place order,2020-02-24 14:06:55.000Z, ,"['886643','886644']","['991625']", , ,0.763,589.99 +17909.0,pay order,2020-02-24 14:18:50.000Z, , ,"['991614']", , ,3.151,2041.98 +17910.0,package delivered,2020-02-24 14:23:59.000Z, , , ,"['661043']", ,0.166,799.0 +17911.0,package delivered,2020-02-24 14:24:16.000Z, , , ,"['661044']", ,4.295,9901.0 +17912.0,pay order,2020-02-24 14:27:49.000Z, , ,"['991578']", , ,1.324,3359.0 +17913.0,pay order,2020-02-24 14:47:03.000Z, , ,"['991610']", , ,2.2030000000000003,1168.97 +17914.0,pick item,2020-02-24 15:03:40.000Z, ,"['886641']", , , ,0.44,476.0 +17915.0,package delivered,2020-02-24 15:06:13.000Z, , , ,"['661041']", ,1.5419999999999998,3705.0 +17916.0,pick item,2020-02-24 15:08:15.000Z, ,"['886417']", , , ,1.48,199.99 +17917.0,pick item,2020-02-24 15:12:33.000Z, ,"['886603']", , , ,0.28,449.0 +17918.0,pay order,2020-02-24 15:12:43.000Z, , ,"['991574']", , ,3.133,937.98 +17919.0,package delivered,2020-02-24 15:18:13.000Z, , , ,"['661046']", ,3.852,1577.94 +17920.0,confirm order,2020-02-24 15:25:08.000Z, , ,"['991615']", , ,1.626,1063.97 +17921.0,pick item,2020-02-24 15:28:09.000Z, ,"['886421']", , , ,1.28,149.99 +17922.0,create package,2020-02-24 15:28:09.000Z, ,"['886541','886565','886540','886560','886562','886566','886509','886427','886537','886564']", ,"['661051']", ,5.518,6110.96 +17923.0,pay order,2020-02-24 15:33:06.000Z, , ,"['991488']", , ,1.49,683.99 +17924.0,pick item,2020-02-24 15:33:33.000Z, ,"['886285']", , , ,0.38,29.99 +17925.0,place order,2020-02-24 15:33:37.000Z, ,"['886647','886645','886646']","['991626']", , ,1.178,253.98 +17926.0,pick item,2020-02-24 15:46:58.000Z, ,"['886639']", , , ,0.38,29.99 +17927.0,pick item,2020-02-24 15:55:53.000Z, ,"['886544']", , , ,0.166,799.0 +17928.0,pick item,2020-02-24 15:59:36.000Z, ,"['886591']", , , ,1.48,199.99 +17929.0,pick item,2020-02-24 16:03:01.000Z, ,"['886574']", , , ,0.38,29.99 +17930.0,confirm order,2020-02-24 16:27:50.000Z, , ,"['991624']", , ,1.215,1059.0 +17931.0,pick item,2020-02-24 16:34:22.000Z, ,"['886622']", , , ,0.28,89.99 +17932.0,item out of stock,2020-02-24 17:06:04.000Z, ,"['886645']", , , ,0.483,79.99 +17933.0,place order,2020-02-24 17:27:02.000Z, ,"['886650','886649','886648']","['991627']", , ,1.86,3483.0 +17934.0,send package,2020-02-24 17:31:05.000Z, , , ,"['661050']", ,2.852,1424.97 +17935.0,reorder item,2020-02-24 17:35:23.000Z, ,"['886555']", , , ,0.88,89.99 +17936.0,pick item,2020-02-24 18:06:33.000Z, ,"['886581']", , , ,1.28,149.99 +17937.0,item out of stock,2020-02-24 18:43:55.000Z, ,"['886494']", , , ,0.188,1149.0 +17938.0,confirm order,2020-02-24 19:46:17.000Z, , ,"['991616']", , ,5.202999999999999,2757.94 +17939.0,place order,2020-02-24 20:00:41.000Z, ,"['886652','886654','886653','886651']","['991628']", , ,0.852,873.97 +17940.0,place order,2020-02-25 01:22:00.000Z, ,"['886656','886655','886657','886658']","['991629']", , ,2.026,2147.99 +17941.0,package delivered,2020-02-25 07:42:40.000Z, , , ,"['661050']", ,2.852,1424.97 +17942.0,item out of stock,2020-02-25 07:46:09.000Z, ,"['886618']", , , ,0.172,699.0 +17943.0,pick item,2020-02-25 07:53:18.000Z, ,"['886600']", , , ,0.2,39.99 +17944.0,confirm order,2020-02-25 07:58:57.000Z, , ,"['991623']", , ,4.42,534.96 +17945.0,item out of stock,2020-02-25 08:02:25.000Z, ,"['886510']", , , ,0.28,449.0 +17946.0,pick item,2020-02-25 08:26:37.000Z, ,"['886569']", , , ,1.37,2500.0 +17947.0,pick item,2020-02-25 08:34:59.000Z, ,"['886448']", , , ,0.78,99.99 +17948.0,create package,2020-02-25 08:34:59.000Z, ,"['886526','886449','886612','886527','886400']", ,"['661052']", ,1.953,1612.98 +17949.0,place order,2020-02-25 08:37:59.000Z, ,"['886663','886659','886661','886660','886662']","['991630']", , ,2.248,1347.98 +17950.0,confirm order,2020-02-25 08:40:29.000Z, , ,"['991629']", , ,2.026,2147.99 +17951.0,pick item,2020-02-25 08:43:57.000Z, ,"['886627']", , , ,0.44,476.0 +17952.0,pick item,2020-02-25 08:46:26.000Z, ,"['886653']", , , ,0.2,39.99 +17953.0,send package,2020-02-25 08:46:34.000Z, , , ,"['661045']", ,2.513,2794.99 +17954.0,pick item,2020-02-25 08:55:24.000Z, ,"['886660']", , , ,0.21,529.0 +17955.0,reorder item,2020-02-25 09:05:25.000Z, ,"['886506']", , , ,0.44,476.0 +17956.0,pick item,2020-02-25 09:08:04.000Z, ,"['886621']", , , ,0.483,79.99 +17957.0,pay order,2020-02-25 09:13:25.000Z, , ,"['991591']", , ,5.252999999999999,3199.96 +17958.0,confirm order,2020-02-25 09:14:29.000Z, , ,"['991628']", , ,0.852,873.97 +17959.0,reorder item,2020-02-25 09:17:12.000Z, ,"['886494']", , , ,0.188,1149.0 +17960.0,pick item,2020-02-25 09:23:47.000Z, ,"['886563']", , , ,1.28,149.99 +17961.0,create package,2020-02-25 09:23:47.000Z, ,"['886574','886575','886576','886641','886629','886578','886581','886579','886580','886634','886518','886577','886517','886631']", ,"['661053']", ,10.004,4082.92 +17962.0,item out of stock,2020-02-25 09:26:24.000Z, ,"['886594']", , , ,0.28,89.99 +17963.0,send package,2020-02-25 09:30:33.000Z, , , ,"['661049']", ,2.408,3937.98 +17964.0,pick item,2020-02-25 09:31:54.000Z, ,"['886643']", , , ,0.483,495.0 +17965.0,reorder item,2020-02-25 09:42:28.000Z, ,"['886499']", , , ,0.28,89.99 +17966.0,send package,2020-02-25 09:47:22.000Z, , , ,"['661052']", ,1.953,1612.98 +17967.0,reorder item,2020-02-25 10:10:34.000Z, ,"['886583']", , , ,0.28,449.0 +17968.0,pick item,2020-02-25 10:11:26.000Z, ,"['886655']", , , ,0.28,449.0 +17969.0,pick item,2020-02-25 10:16:13.000Z, ,"['886659']", , , ,0.28,89.99 +17970.0,item out of stock,2020-02-25 10:19:43.000Z, ,"['886529']", , , ,0.28,89.99 +17971.0,send package,2020-02-25 10:28:12.000Z, , , ,"['661051']", ,5.518,6110.96 +17972.0,place order,2020-02-25 10:35:45.000Z, ,"['886666','886665','886667','886664','886669','886668','886670']","['991631']", , ,2.295,4409.98 +17973.0,pay order,2020-02-25 10:39:19.000Z, , ,"['991361']", , ,8.603,11483.97 +17974.0,package delivered,2020-02-25 10:49:59.000Z, , , ,"['661048']", ,3.01,2749.97 +17975.0,pick item,2020-02-25 11:04:43.000Z, ,"['886616']", , , ,0.483,1099.0 +17976.0,confirm order,2020-02-25 11:04:54.000Z, , ,"['991617']", , ,2.025,2423.99 +17977.0,pick item,2020-02-25 11:19:04.000Z, ,"['886592']", , , ,0.483,1099.0 +17978.0,pick item,2020-02-25 11:21:47.000Z, ,"['886605']", , , ,0.44,476.0 +17979.0,item out of stock,2020-02-25 11:42:29.000Z, ,"['886667']", , , ,0.166,799.0 +17980.0,send package,2020-02-25 12:04:05.000Z, , , ,"['661053']", ,10.004,4082.92 +17981.0,package delivered,2020-02-25 12:16:46.000Z, , , ,"['661049']", ,2.408,3937.98 +17982.0,pick item,2020-02-25 12:18:52.000Z, ,"['886661']", , , ,0.495,129.0 +17983.0,pick item,2020-02-25 12:20:49.000Z, ,"['886609']", , , ,0.495,129.0 +17984.0,pick item,2020-02-25 12:24:39.000Z, ,"['886642']", , , ,0.495,129.0 +17985.0,place order,2020-02-25 12:31:18.000Z, ,"['886672','886671']","['991632']", , ,0.3720000000000001,743.99 +17986.0,pick item,2020-02-25 12:36:00.000Z, ,"['886573']", , , ,0.28,89.99 +17987.0,confirm order,2020-02-25 12:47:51.000Z, , ,"['991625']", , ,0.763,589.99 +17988.0,pick item,2020-02-25 12:51:25.000Z, ,"['886613']", , , ,0.78,99.99 +17989.0,pick item,2020-02-25 12:54:19.000Z, ,"['886648']", , , ,1.37,2500.0 +17990.0,reorder item,2020-02-25 13:02:49.000Z, ,"['886597']", , , ,0.98,129.99 +17991.0,pick item,2020-02-25 13:09:43.000Z, ,"['886379']", , , ,0.21,529.0 +17992.0,pick item,2020-02-25 13:10:56.000Z, ,"['886636']", , , ,1.28,149.99 +17993.0,create package,2020-02-25 13:10:56.000Z, ,"['886456','886421']", ,"['661054']", ,2.76,349.98 +17994.0,package delivered,2020-02-25 13:21:23.000Z, , , ,"['661051']", ,5.518,6110.96 +17995.0,pick item,2020-02-25 13:26:23.000Z, ,"['886637']", , , ,1.48,199.99 +17996.0,item out of stock,2020-02-25 13:49:28.000Z, ,"['886607']", , , ,0.88,89.99 +17997.0,package delivered,2020-02-25 13:49:35.000Z, , , ,"['661045']", ,2.513,2794.99 +17998.0,pick item,2020-02-25 13:52:40.000Z, ,"['886651']", , , ,0.2,39.99 +17999.0,create package,2020-02-25 13:52:40.000Z, ,"['886591','886592','886435','886434']", ,"['661055']", ,3.385,4197.99 +18000.0,pay order,2020-02-25 13:55:17.000Z, , ,"['991588']", , ,0.935,2252.0 +18001.0,pick item,2020-02-25 13:57:22.000Z, ,"['886625']", , , ,0.172,699.0 +18002.0,item out of stock,2020-02-25 14:04:31.000Z, ,"['886635']", , , ,0.483,1099.0 +18003.0,pick item,2020-02-25 14:21:11.000Z, ,"['886543']", , , ,1.37,2500.0 +18004.0,place order,2020-02-25 14:22:23.000Z, ,"['886675','886674','886673']","['991633']", , ,1.905,3399.0 +18005.0,reorder item,2020-02-25 14:31:51.000Z, ,"['886474']", , , ,0.28,449.0 +18006.0,pay order,2020-02-25 14:39:21.000Z, , ,"['991599']", , ,1.656,2616.99 +18007.0,pay order,2020-02-25 14:40:05.000Z, , ,"['991622']", , ,4.981,1782.95 +18008.0,pick item,2020-02-25 15:15:18.000Z, ,"['886590']", , , ,0.483,79.99 +18009.0,pay order,2020-02-25 15:15:32.000Z, , ,"['991604']", , ,1.26,124.98 +18010.0,pick item,2020-02-25 15:33:20.000Z, ,"['886674']", , , ,1.25,2200.0 +18011.0,create package,2020-02-25 15:33:20.000Z, ,"['886602','886600','886601','886598','886585','886512','886603','886605','886588','886448','886587']", ,"['661056']", ,7.292999999999998,9122.96 +18012.0,pick item,2020-02-25 15:39:05.000Z, ,"['886567']", , , ,0.28,89.99 +18013.0,pick item,2020-02-25 15:49:09.000Z, ,"['886657']", , , ,0.483,1099.0 +18014.0,package delivered,2020-02-25 15:55:31.000Z, , , ,"['661047']", ,2.541,2362.98 +18015.0,reorder item,2020-02-25 16:01:44.000Z, ,"['886645']", , , ,0.483,79.99 +18016.0,place order,2020-02-25 16:04:34.000Z, ,"['886678','886676','886677','886681','886680','886679']","['991634']", , ,4.558,6262.98 +18017.0,pick item,2020-02-25 16:04:54.000Z, ,"['886647']", , , ,0.495,129.0 +18018.0,pick item,2020-02-25 16:05:59.000Z, ,"['886644']", , , ,0.28,89.99 +18019.0,pick item,2020-02-25 16:06:13.000Z, ,"['886589']", , , ,0.495,129.0 +18020.0,pick item,2020-02-25 16:06:24.000Z, ,"['886668']", , , ,0.2,39.99 +18021.0,pay order,2020-02-25 16:07:43.000Z, , ,"['991605']", , ,1.052,793.99 +18022.0,pick item,2020-02-25 16:09:05.000Z, ,"['886646']", , , ,0.2,39.99 +18023.0,pick item,2020-02-25 16:13:34.000Z, ,"['886630']", , , ,0.88,89.99 +18024.0,reorder item,2020-02-25 16:16:22.000Z, ,"['886607']", , , ,0.88,89.99 +18025.0,package delivered,2020-02-25 16:23:32.000Z, , , ,"['661052']", ,1.953,1612.98 +18026.0,reorder item,2020-02-25 16:32:53.000Z, ,"['886618']", , , ,0.172,699.0 +18027.0,item out of stock,2020-02-25 16:53:00.000Z, ,"['886640']", , , ,0.28,449.0 +18028.0,pick item,2020-02-25 16:53:36.000Z, ,"['886633']", , , ,0.28,89.99 +18029.0,place order,2020-02-25 17:28:55.000Z, ,"['886682','886683','886684','886685']","['991635']", , ,3.125,2853.98 +18030.0,reorder item,2020-02-25 17:39:20.000Z, ,"['886593']", , , ,0.21,529.0 +18031.0,send package,2020-02-25 17:43:35.000Z, , , ,"['661055']", ,3.385,4197.99 +18032.0,package delivered,2020-02-25 17:52:05.000Z, , , ,"['661055']", ,3.385,4197.99 +18033.0,pick item,2020-02-25 17:58:01.000Z, ,"['886669']", , , ,0.28,89.99 +18034.0,reorder item,2020-02-25 18:14:22.000Z, ,"['886546']", , , ,1.37,2500.0 +18035.0,pick item,2020-02-25 18:45:07.000Z, ,"['886679']", , , ,1.28,149.99 +18036.0,create package,2020-02-25 18:45:07.000Z, ,"['886595','886596']", ,"['661057']", ,0.366,838.99 +18037.0,place order,2020-02-25 20:06:20.000Z, ,"['886690','886687','886689','886686','886688']","['991636']", , ,3.123,4681.99 +18038.0,place order,2020-02-26 01:55:54.000Z, ,"['886695','886694','886692','886693','886691']","['991637']", , ,1.18,3230.99 +18039.0,payment reminder,2020-02-26 07:19:32.000Z, , ,"['991515']", , ,0.38,34.99 +18040.0,confirm order,2020-02-26 07:40:26.000Z, , ,"['991633']", , ,1.905,3399.0 +18041.0,pick item,2020-02-26 08:10:35.000Z, ,"['886664']", , , ,0.483,1099.0 +18042.0,pick item,2020-02-26 08:11:18.000Z, ,"['886494']", , , ,0.188,1149.0 +18043.0,create package,2020-02-26 08:11:18.000Z, ,"['886570','886573','886285','886553']", ,"['661058']", ,1.15,1097.98 +18044.0,send package,2020-02-26 08:13:43.000Z, , , ,"['661054']", ,2.76,349.98 +18045.0,pick item,2020-02-26 08:23:54.000Z, ,"['886652']", , , ,0.172,699.0 +18046.0,payment reminder,2020-02-26 08:28:29.000Z, , ,"['991513']", , ,1.76,653.99 +18047.0,confirm order,2020-02-26 08:36:15.000Z, , ,"['991631']", , ,2.295,4409.98 +18048.0,confirm order,2020-02-26 08:58:05.000Z, , ,"['991626']", , ,1.178,253.98 +18049.0,pick item,2020-02-26 09:02:49.000Z, ,"['886626']", , , ,0.172,699.0 +18050.0,confirm order,2020-02-26 09:03:51.000Z, , ,"['991627']", , ,1.86,3483.0 +18051.0,pick item,2020-02-26 09:07:10.000Z, ,"['886681']", , , ,0.21,529.0 +18052.0,pick item,2020-02-26 09:08:28.000Z, ,"['886676']", , , ,0.38,29.99 +18053.0,create package,2020-02-26 09:08:28.000Z, ,"['886616','886557','886617','886659','886614','886661','886660','886569']", ,"['661059']", ,3.715,5703.99 +18054.0,place order,2020-02-26 09:15:17.000Z, ,"['886699','886697','886700','886698','886696','886701']","['991638']", , ,3.832,3173.98 +18055.0,package delivered,2020-02-26 09:17:01.000Z, , , ,"['661053']", ,10.004,4082.92 +18056.0,confirm order,2020-02-26 09:21:15.000Z, , ,"['991638']", , ,3.832,3173.98 +18057.0,pay order,2020-02-26 09:25:30.000Z, , ,"['991592']", , ,1.463,1233.99 +18058.0,confirm order,2020-02-26 09:25:56.000Z, , ,"['991636']", , ,3.123,4681.99 +18059.0,pick item,2020-02-26 09:28:43.000Z, ,"['886654']", , , ,0.28,89.99 +18060.0,reorder item,2020-02-26 09:29:10.000Z, ,"['886667']", , , ,0.166,799.0 +18061.0,payment reminder,2020-02-26 09:35:58.000Z, , ,"['991503']", , ,1.726,1043.98 +18062.0,payment reminder,2020-02-26 09:40:05.000Z, , ,"['991519']", , ,2.012,2072.98 +18063.0,send package,2020-02-26 09:49:01.000Z, , , ,"['661059']", ,3.715,5703.99 +18064.0,payment reminder,2020-02-26 10:03:17.000Z, , ,"['991521']", , ,1.06,194.98 +18065.0,pick item,2020-02-26 10:10:37.000Z, ,"['886677']", , , ,1.25,2200.0 +18066.0,confirm order,2020-02-26 10:16:10.000Z, , ,"['991635']", , ,3.125,2853.98 +18067.0,payment reminder,2020-02-26 10:25:32.000Z, , ,"['991400']", , ,2.978,4350.99 +18068.0,payment reminder,2020-02-26 10:25:50.000Z, , ,"['991523']", , ,4.711,3672.95 +18069.0,reorder item,2020-02-26 10:27:07.000Z, ,"['886558']", , , ,1.25,2200.0 +18070.0,place order,2020-02-26 10:50:21.000Z, ,"['886705','886703','886702','886704']","['991639']", , ,2.809,2142.98 +18071.0,send package,2020-02-26 10:56:52.000Z, , , ,"['661058']", ,1.15,1097.98 +18072.0,pick item,2020-02-26 11:06:07.000Z, ,"['886693']", , , ,0.166,799.0 +18073.0,pay order,2020-02-26 11:06:16.000Z, , ,"['991448']", , ,3.1060000000000003,2416.98 +18074.0,reorder item,2020-02-26 11:25:04.000Z, ,"['886530']", , , ,0.172,699.0 +18075.0,package delivered,2020-02-26 11:34:22.000Z, , , ,"['661059']", ,3.715,5703.99 +18076.0,pick item,2020-02-26 11:46:14.000Z, ,"['886692']", , , ,0.38,29.99 +18077.0,pay order,2020-02-26 12:02:22.000Z, , ,"['991595']", , ,0.99,633.99 +18078.0,pick item,2020-02-26 12:06:04.000Z, ,"['886658']", , , ,0.483,495.0 +18079.0,payment reminder,2020-02-26 12:08:07.000Z, , ,"['991516']", , ,1.535,1892.99 +18080.0,pick item,2020-02-26 13:00:14.000Z, ,"['886698']", , , ,0.166,799.0 +18081.0,place order,2020-02-26 13:00:30.000Z, ,"['886706','886707']","['991640']", , ,0.48,493.99 +18082.0,package delivered,2020-02-26 13:06:07.000Z, , , ,"['661054']", ,2.76,349.98 +18083.0,pick item,2020-02-26 13:18:29.000Z, ,"['886532']", , , ,0.2,39.99 +18084.0,reorder item,2020-02-26 13:28:12.000Z, ,"['886640']", , , ,0.28,449.0 +18085.0,item out of stock,2020-02-26 13:30:47.000Z, ,"['886690']", , , ,1.37,2500.0 +18086.0,confirm order,2020-02-26 13:57:55.000Z, , ,"['991637']", , ,1.18,3230.99 +18087.0,pick item,2020-02-26 13:59:18.000Z, ,"['886686']", , , ,0.78,99.99 +18088.0,create package,2020-02-26 13:59:18.000Z, ,"['886584','886657','886494','886643','886655','886693','886674','886532','886692','886582','886644','886686','886658']", ,"['661060']", ,6.292999999999998,7511.95 +18089.0,payment reminder,2020-02-26 14:13:19.000Z, , ,"['991524']", , ,2.96,2568.98 +18090.0,place order,2020-02-26 14:20:47.000Z, ,"['886709','886713','886712','886708','886711','886710']","['991641']", , ,3.786,2377.97 +18091.0,item out of stock,2020-02-26 14:22:46.000Z, ,"['886670']", , , ,0.188,1149.0 +18092.0,pick item,2020-02-26 14:29:11.000Z, ,"['886694']", , , ,0.28,449.0 +18093.0,pick item,2020-02-26 14:31:36.000Z, ,"['886711']", , , ,0.78,99.99 +18094.0,confirm order,2020-02-26 14:37:40.000Z, , ,"['991640']", , ,0.48,493.99 +18095.0,pick item,2020-02-26 14:38:19.000Z, ,"['886638']", , , ,1.28,149.99 +18096.0,pick item,2020-02-26 14:39:19.000Z, ,"['886610']", , , ,0.28,89.99 +18097.0,send package,2020-02-26 14:46:48.000Z, , , ,"['661056']", ,7.292999999999998,9122.96 +18098.0,payment reminder,2020-02-26 14:56:35.000Z, , ,"['991525']", , ,0.97,593.98 +18099.0,send package,2020-02-26 14:58:40.000Z, , , ,"['661057']", ,0.366,838.99 +18100.0,pick item,2020-02-26 15:00:01.000Z, ,"['886682']", , , ,0.98,129.99 +18101.0,item out of stock,2020-02-26 15:01:13.000Z, ,"['886703']", , , ,0.166,799.0 +18102.0,pick item,2020-02-26 15:07:01.000Z, ,"['886697']", , , ,0.78,99.99 +18103.0,confirm order,2020-02-26 15:12:21.000Z, , ,"['991639']", , ,2.809,2142.98 +18104.0,confirm order,2020-02-26 15:23:13.000Z, , ,"['991618']", , ,1.44,583.98 +18105.0,confirm order,2020-02-26 15:33:28.000Z, , ,"['991630']", , ,2.248,1347.98 +18106.0,pick item,2020-02-26 15:41:54.000Z, ,"['886702']", , , ,0.483,1099.0 +18107.0,place order,2020-02-26 16:01:21.000Z, ,"['886716','886715','886714']","['991642']", , ,3.63,2804.98 +18108.0,pick item,2020-02-26 16:08:47.000Z, ,"['886700']", , , ,1.48,199.99 +18109.0,send package,2020-02-26 16:11:46.000Z, , , ,"['661060']", ,6.292999999999998,7511.95 +18110.0,confirm order,2020-02-26 16:12:32.000Z, , ,"['991632']", , ,0.3720000000000001,743.99 +18111.0,pick item,2020-02-26 16:18:02.000Z, ,"['886687']", , , ,0.28,449.0 +18112.0,item out of stock,2020-02-26 16:22:53.000Z, ,"['886713']", , , ,0.483,1099.0 +18113.0,pick item,2020-02-26 16:27:32.000Z, ,"['886599']", , , ,0.495,129.0 +18114.0,pick item,2020-02-26 16:32:46.000Z, ,"['885818']", , , ,0.188,1149.0 +18115.0,pick item,2020-02-26 16:40:28.000Z, ,"['886680']", , , ,1.25,2200.0 +18116.0,pick item,2020-02-26 16:44:00.000Z, ,"['886606']", , , ,1.28,149.99 +18117.0,create package,2020-02-26 16:44:00.000Z, ,"['886622','886627','886626','886610','886623','886621','886379','886624','886545','886609','886625']", ,"['661061']", ,4.673,3919.96 +18118.0,package delivered,2020-02-26 17:18:45.000Z, , , ,"['661056']", ,7.292999999999998,9122.96 +18119.0,pick item,2020-02-26 17:20:22.000Z, ,"['886689']", , , ,0.483,1099.0 +18120.0,place order,2020-02-26 17:22:30.000Z, ,"['886717','886719','886720','886718']","['991643']", , ,2.66,3163.98 +18121.0,item out of stock,2020-02-26 17:25:28.000Z, ,"['886671']", , , ,0.172,699.0 +18122.0,pick item,2020-02-26 17:28:51.000Z, ,"['886604']", , , ,0.28,89.99 +18123.0,send package,2020-02-26 18:00:52.000Z, , , ,"['661061']", ,4.673,3919.96 +18124.0,place order,2020-02-26 19:47:05.000Z, ,"['886725','886722','886721','886723','886724']","['991644']", , ,3.5780000000000003,3613.97 +18125.0,pay order,2020-02-26 20:17:30.000Z, , ,"['991632']", , ,0.3720000000000001,743.99 +18126.0,pay order,2020-02-26 20:39:57.000Z, , ,"['991507']", , ,2.41,2384.98 +18127.0,place order,2020-02-27 01:00:24.000Z, ,"['886726','886728','886727']","['991645']", , ,2.548,1443.98 +18128.0,failed delivery,2020-02-27 07:13:24.000Z, , , ,"['661061']", ,4.673,3919.96 +18129.0,pick item,2020-02-27 07:34:41.000Z, ,"['886678']", , , ,0.188,1149.0 +18130.0,confirm order,2020-02-27 07:52:20.000Z, , ,"['991645']", , ,2.548,1443.98 +18131.0,place order,2020-02-27 08:14:13.000Z, ,"['886730','886729','886731']","['991646']", , ,3.51,2504.98 +18132.0,pick item,2020-02-27 08:24:17.000Z, ,"['886701']", , , ,0.44,476.0 +18133.0,confirm order,2020-02-27 08:27:35.000Z, , ,"['991642']", , ,3.63,2804.98 +18134.0,pick item,2020-02-27 08:35:57.000Z, ,"['886729']", , , ,1.25,2200.0 +18135.0,pick item,2020-02-27 08:47:55.000Z, ,"['886720']", , , ,1.37,2500.0 +18136.0,package delivered,2020-02-27 08:50:16.000Z, , , ,"['661060']", ,6.292999999999998,7511.95 +18137.0,pick item,2020-02-27 08:54:30.000Z, ,"['886718']", , , ,0.2,39.99 +18138.0,pick item,2020-02-27 08:55:19.000Z, ,"['886561']", , , ,1.25,2200.0 +18139.0,confirm order,2020-02-27 09:00:04.000Z, , ,"['991644']", , ,3.5780000000000003,3613.97 +18140.0,pick item,2020-02-27 09:01:58.000Z, ,"['886709']", , , ,0.483,495.0 +18141.0,pick item,2020-02-27 09:10:56.000Z, ,"['886715']", , , ,1.48,199.99 +18142.0,pick item,2020-02-27 09:12:44.000Z, ,"['886726']", , , ,1.48,199.99 +18143.0,create package,2020-02-27 09:12:44.000Z, ,"['886652','886543','886417','886544','886654','886653','886638','886636','886651','886637','886726','886639']", ,"['661062']", ,9.768,5097.91 +18144.0,confirm order,2020-02-27 09:18:44.000Z, , ,"['991641']", , ,3.786,2377.97 +18145.0,pay order,2020-02-27 09:24:13.000Z, , ,"['991638']", , ,3.832,3173.98 +18146.0,pay order,2020-02-27 09:38:21.000Z, , ,"['991559']", , ,4.395,573.95 +18147.0,item out of stock,2020-02-27 09:44:30.000Z, ,"['886727']", , , ,0.188,1149.0 +18148.0,place order,2020-02-27 09:48:14.000Z, ,"['886732']","['991647']", , ,0.21,534.0 +18149.0,pay order,2020-02-27 09:51:57.000Z, , ,"['991515']", , ,0.38,34.99 +18150.0,item out of stock,2020-02-27 10:00:03.000Z, ,"['886730']", , , ,0.78,99.99 +18151.0,pick item,2020-02-27 10:03:17.000Z, ,"['886390']", , , ,0.88,89.99 +18152.0,pick item,2020-02-27 10:26:25.000Z, ,"['886401']", , , ,0.88,89.99 +18153.0,item out of stock,2020-02-27 10:43:18.000Z, ,"['886705']", , , ,0.88,89.99 +18154.0,pick item,2020-02-27 10:59:41.000Z, ,"['886673']", , , ,0.172,699.0 +18155.0,pick item,2020-02-27 10:59:44.000Z, ,"['885957']", , , ,0.188,1149.0 +18156.0,reorder item,2020-02-27 11:09:52.000Z, ,"['886586']", , , ,0.495,129.0 +18157.0,item out of stock,2020-02-27 11:12:51.000Z, ,"['886708']", , , ,0.78,99.99 +18158.0,pick item,2020-02-27 11:14:45.000Z, ,"['886717']", , , ,0.88,89.99 +18159.0,pick item,2020-02-27 11:35:52.000Z, ,"['886663']", , , ,0.483,495.0 +18160.0,place order,2020-02-27 11:56:15.000Z, ,"['886734','886733','886738','886736','886737','886735']","['991648']", , ,3.905,3362.97 +18161.0,reorder item,2020-02-27 12:39:44.000Z, ,"['886690']", , , ,1.37,2500.0 +18162.0,item out of stock,2020-02-27 12:40:40.000Z, ,"['886704']", , , ,1.28,149.99 +18163.0,package delivered,2020-02-27 12:46:03.000Z, , , ,"['661061']", ,4.673,3919.96 +18164.0,pick item,2020-02-27 13:04:37.000Z, ,"['886699']", , , ,0.483,1099.0 +18165.0,package delivered,2020-02-27 13:10:29.000Z, , , ,"['661058']", ,1.15,1097.98 +18166.0,reorder item,2020-02-27 13:27:23.000Z, ,"['886727']", , , ,0.188,1149.0 +18167.0,pay order,2020-02-27 13:27:44.000Z, , ,"['991516']", , ,1.535,1892.99 +18168.0,confirm order,2020-02-27 13:31:58.000Z, , ,"['991646']", , ,3.51,2504.98 +18169.0,pay order,2020-02-27 13:37:51.000Z, , ,"['991579']", , ,0.483,1104.0 +18170.0,pick item,2020-02-27 13:42:03.000Z, ,"['886675']", , , ,0.483,495.0 +18171.0,pick item,2020-02-27 13:44:45.000Z, ,"['886737']", , , ,0.28,89.99 +18172.0,pick item,2020-02-27 13:52:33.000Z, ,"['886618']", , , ,0.172,699.0 +18173.0,pay order,2020-02-27 14:00:51.000Z, , ,"['991625']", , ,0.763,589.99 +18174.0,pick item,2020-02-27 14:05:08.000Z, ,"['886615']", , , ,0.495,129.0 +18175.0,confirm order,2020-02-27 14:05:13.000Z, , ,"['991648']", , ,3.905,3362.97 +18176.0,pick item,2020-02-27 14:06:03.000Z, ,"['886136']", , , ,0.28,89.99 +18177.0,create package,2020-02-27 14:06:03.000Z, ,"['886676','886681','886680','886678','886677','886679','886561','886563','886567']", ,"['661063']", ,7.3679999999999986,8697.96 +18178.0,pay order,2020-02-27 14:11:30.000Z, , ,"['991523']", , ,4.711,3672.95 +18179.0,place order,2020-02-27 14:12:18.000Z, ,"['886740','886742','886744','886741','886743','886739']","['991649']", , ,2.8080000000000003,1603.95 +18180.0,pick item,2020-02-27 14:21:18.000Z, ,"['886721']", , , ,0.98,129.99 +18181.0,pick item,2020-02-27 14:21:29.000Z, ,"['886719']", , , ,0.21,529.0 +18182.0,pick item,2020-02-27 14:22:19.000Z, ,"['886695']", , , ,0.166,799.0 +18183.0,pay order,2020-02-27 14:23:25.000Z, , ,"['991626']", , ,1.178,253.98 +18184.0,pick item,2020-02-27 14:24:00.000Z, ,"['886322']", , , ,0.21,529.0 +18185.0,pick item,2020-02-27 14:31:29.000Z, ,"['886672']", , , ,0.2,39.99 +18186.0,pick item,2020-02-27 14:37:49.000Z, ,"['886394']", , , ,0.98,129.99 +18187.0,package delivered,2020-02-27 14:43:47.000Z, , , ,"['661057']", ,0.366,838.99 +18188.0,item out of stock,2020-02-27 15:00:18.000Z, ,"['886628']", , , ,0.28,449.0 +18189.0,pay order,2020-02-27 15:03:36.000Z, , ,"['991627']", , ,1.86,3483.0 +18190.0,item out of stock,2020-02-27 15:06:03.000Z, ,"['886712']", , , ,0.28,449.0 +18191.0,pick item,2020-02-27 15:20:26.000Z, ,"['886611']", , , ,0.38,29.99 +18192.0,reorder item,2020-02-27 15:21:25.000Z, ,"['886730']", , , ,0.78,99.99 +18193.0,pick item,2020-02-27 15:27:22.000Z, ,"['886691']", , , ,0.188,1149.0 +18194.0,payment reminder,2020-02-27 15:37:17.000Z, , ,"['991534']", , ,1.812,1312.98 +18195.0,place order,2020-02-27 15:44:23.000Z, ,"['886745','886746']","['991650']", , ,1.65,2954.0 +18196.0,pick item,2020-02-27 15:52:05.000Z, ,"['886608']", , , ,1.25,2200.0 +18197.0,create package,2020-02-27 15:52:05.000Z, ,"['886642','886630','886633']", ,"['661064']", ,1.655,308.98 +18198.0,pick item,2020-02-27 15:57:43.000Z, ,"['886650']", , , ,0.28,449.0 +18199.0,pick item,2020-02-27 16:00:30.000Z, ,"['886656']", , , ,0.78,99.99 +18200.0,pay order,2020-02-27 16:03:37.000Z, , ,"['991644']", , ,3.5780000000000003,3613.97 +18201.0,pick item,2020-02-27 16:38:43.000Z, ,"['886662']", , , ,0.78,99.99 +18202.0,create package,2020-02-27 16:38:43.000Z, ,"['886136','886611','886613']", ,"['661065']", ,1.44,219.97 +18203.0,pay order,2020-02-27 16:47:11.000Z, , ,"['991539']", , ,1.66,184.98 +18204.0,place order,2020-02-27 17:48:33.000Z, ,"['886754','886756','886749','886758','886752','886750','886747','886751','886753','886755','886748','886757']","['991651']", , ,6.752999999999999,8726.96 +18205.0,pick item,2020-02-27 17:48:54.000Z, ,"['886666']", , , ,0.495,129.0 +18206.0,pick item,2020-02-27 18:12:30.000Z, ,"['886696']", , , ,0.483,495.0 +18207.0,pay order,2020-02-27 19:54:57.000Z, , ,"['991525']", , ,0.97,593.98 +18208.0,pick item,2020-02-27 20:44:56.000Z, ,"['886758']", , , ,1.25,2200.0 +18209.0,create package,2020-02-27 20:44:56.000Z, ,"['886650','886618','886648']", ,"['661066']", ,1.822,3648.0 +18210.0,pick item,2020-02-27 20:52:06.000Z, ,"['886714']", , , ,0.78,99.99 +18211.0,place order,2020-02-27 21:05:14.000Z, ,"['886759','886761','886760','886762']","['991652']", , ,2.375,1824.99 +18212.0,confirm order,2020-02-27 21:31:51.000Z, , ,"['991651']", , ,6.752999999999999,8726.96 +18213.0,place order,2020-02-28 06:49:18.000Z, ,"['886765','886766','886764','886763']","['991653']", , ,4.21,2594.97 +18214.0,pick item,2020-02-28 07:20:17.000Z, ,"['886546']", , , ,1.37,2500.0 +18215.0,reorder item,2020-02-28 08:01:15.000Z, ,"['886628']", , , ,0.28,449.0 +18216.0,reorder item,2020-02-28 08:04:44.000Z, ,"['886708']", , , ,0.78,99.99 +18217.0,pick item,2020-02-28 08:15:18.000Z, ,"['886755']", , , ,0.21,529.0 +18218.0,create package,2020-02-28 08:15:18.000Z, ,"['886590','886717','886589','886719','886720','886718']", ,"['661067']", ,3.638,3367.97 +18219.0,pick item,2020-02-28 08:20:52.000Z, ,"['886743']", , , ,0.28,89.99 +18220.0,reorder item,2020-02-28 08:21:05.000Z, ,"['886510']", , , ,0.28,449.0 +18221.0,pick item,2020-02-28 08:21:46.000Z, ,"['886745']", , , ,0.28,449.0 +18222.0,pick item,2020-02-28 08:37:51.000Z, ,"['886473']", , , ,1.37,2500.0 +18223.0,confirm order,2020-02-28 08:56:41.000Z, , ,"['991634']", , ,4.558,6262.98 +18224.0,send package,2020-02-28 08:57:04.000Z, , , ,"['661063']", ,7.3679999999999986,8697.96 +18225.0,pay order,2020-02-28 09:05:33.000Z, , ,"['991629']", , ,2.026,2147.99 +18226.0,confirm order,2020-02-28 09:29:26.000Z, , ,"['991653']", , ,4.21,2594.97 +18227.0,pick item,2020-02-28 09:31:53.000Z, ,"['886256']", , , ,0.28,449.0 +18228.0,pay order,2020-02-28 09:33:13.000Z, , ,"['991508']", , ,1.618,1652.99 +18229.0,place order,2020-02-28 09:38:02.000Z, ,"['886768','886767','886769','886770']","['991654']", , ,1.845,1857.99 +18230.0,send package,2020-02-28 09:38:44.000Z, , , ,"['661062']", ,9.768,5097.91 +18231.0,reorder item,2020-02-28 09:45:48.000Z, ,"['886670']", , , ,0.188,1149.0 +18232.0,confirm order,2020-02-28 10:01:30.000Z, , ,"['991647']", , ,0.21,534.0 +18233.0,send package,2020-02-28 10:04:10.000Z, , , ,"['661064']", ,1.655,308.98 +18234.0,pick item,2020-02-28 10:15:54.000Z, ,"['886762']", , , ,1.28,149.99 +18235.0,pick item,2020-02-28 10:21:28.000Z, ,"['886683']", , , ,1.37,2500.0 +18236.0,create package,2020-02-28 10:21:28.000Z, ,"['886647','886737','886646']", ,"['661068']", ,0.975,258.98 +18237.0,send package,2020-02-28 10:27:21.000Z, , , ,"['661066']", ,1.822,3648.0 +18238.0,pay order,2020-02-28 10:32:13.000Z, , ,"['991620']", , ,0.992,1209.99 +18239.0,package delivered,2020-02-28 10:38:30.000Z, , , ,"['661064']", ,1.655,308.98 +18240.0,pick item,2020-02-28 10:47:40.000Z, ,"['886757']", , , ,0.166,799.0 +18241.0,item out of stock,2020-02-28 11:00:34.000Z, ,"['886759']", , , ,0.44,476.0 +18242.0,pay order,2020-02-28 11:07:27.000Z, , ,"['991594']", , ,2.853,1268.98 +18243.0,pick item,2020-02-28 11:14:09.000Z, ,"['886665']", , , ,0.483,1099.0 +18244.0,pay order,2020-02-28 11:16:37.000Z, , ,"['991576']", , ,1.403,1049.98 +18245.0,pick item,2020-02-28 11:18:36.000Z, ,"['886742']", , , ,1.48,199.99 +18246.0,create package,2020-02-28 11:18:36.000Z, ,"['886666','886665','886664','886668','886669','886721','886709','886606','886604','886599','886711']", ,"['661069']", ,6.239,3550.94 +18247.0,pick item,2020-02-28 11:24:25.000Z, ,"['886723']", , , ,0.38,29.99 +18248.0,pay order,2020-02-28 11:25:11.000Z, , ,"['991609']", , ,1.936,1572.98 +18249.0,place order,2020-02-28 11:35:51.000Z, ,"['886774','886771','886773','886772','886775']","['991655']", , ,4.206,2008.97 +18250.0,pick item,2020-02-28 11:40:21.000Z, ,"['886688']", , , ,0.21,529.0 +18251.0,pick item,2020-02-28 11:56:03.000Z, ,"['886770']", , , ,0.483,495.0 +18252.0,item out of stock,2020-02-28 11:57:38.000Z, ,"['886746']", , , ,1.37,2500.0 +18253.0,pick item,2020-02-28 12:11:47.000Z, ,"['886763']", , , ,1.28,149.99 +18254.0,send package,2020-02-28 12:24:03.000Z, , , ,"['661068']", ,0.975,258.98 +18255.0,item out of stock,2020-02-28 12:30:17.000Z, ,"['886756']", , , ,0.98,129.99 +18256.0,pick item,2020-02-28 12:30:43.000Z, ,"['886597']", , , ,0.98,129.99 +18257.0,reorder item,2020-02-28 13:25:01.000Z, ,"['886712']", , , ,0.28,449.0 +18258.0,item out of stock,2020-02-28 13:29:04.000Z, ,"['886716']", , , ,1.37,2500.0 +18259.0,place order,2020-02-28 13:31:29.000Z, ,"['886777','886776','886780','886779','886778']","['991656']", , ,2.736,2367.98 +18260.0,pick item,2020-02-28 13:47:30.000Z, ,"['886780']", , , ,0.483,1099.0 +18261.0,pay order,2020-02-28 14:12:50.000Z, , ,"['991482']", , ,1.87,713.98 +18262.0,pay order,2020-02-28 14:14:35.000Z, , ,"['991639']", , ,2.809,2142.98 +18263.0,pay order,2020-02-28 14:20:12.000Z, , ,"['991630']", , ,2.248,1347.98 +18264.0,send package,2020-02-28 14:25:48.000Z, , , ,"['661067']", ,3.638,3367.97 +18265.0,pick item,2020-02-28 14:28:12.000Z, ,"['886772']", , , ,0.98,129.99 +18266.0,item out of stock,2020-02-28 14:29:37.000Z, ,"['886739']", , , ,0.38,29.99 +18267.0,pick item,2020-02-28 14:51:05.000Z, ,"['886441']", , , ,0.495,129.0 +18268.0,item out of stock,2020-02-28 15:04:03.000Z, ,"['886741']", , , ,0.2,39.99 +18269.0,pick item,2020-02-28 15:17:06.000Z, ,"['886667']", , , ,0.166,799.0 +18270.0,place order,2020-02-28 15:22:46.000Z, ,"['886784','886782','886783','886786','886785','886781']","['991657']", , ,3.676,2939.96 +18271.0,confirm order,2020-02-28 15:30:15.000Z, , ,"['991655']", , ,4.206,2008.97 +18272.0,reorder item,2020-02-28 15:34:36.000Z, ,"['886703']", , , ,0.166,799.0 +18273.0,pick item,2020-02-28 15:38:15.000Z, ,"['886785']", , , ,0.38,29.99 +18274.0,item out of stock,2020-02-28 15:39:13.000Z, ,"['886735']", , , ,0.28,449.0 +18275.0,reorder item,2020-02-28 15:45:04.000Z, ,"['886741']", , , ,0.2,39.99 +18276.0,pay order,2020-02-28 16:20:10.000Z, , ,"['991602']", , ,0.94,573.98 +18277.0,pick item,2020-02-28 16:26:52.000Z, ,"['886740']", , , ,0.28,89.99 +18278.0,create package,2020-02-28 16:26:52.000Z, ,"['886597','886700','886701','886696','886697','885957','886699','886698']", ,"['661070']", ,5.0,4447.97 +18279.0,pick item,2020-02-28 16:28:36.000Z, ,"['886778']", , , ,0.21,529.0 +18280.0,failed delivery,2020-02-28 16:34:05.000Z, , , ,"['661062']", ,9.768,5097.91 +18281.0,pick item,2020-02-28 16:36:16.000Z, ,"['886760']", , , ,0.172,699.0 +18282.0,pick item,2020-02-28 16:43:32.000Z, ,"['886738']", , , ,1.37,2500.0 +18283.0,pick item,2020-02-28 16:51:19.000Z, ,"['886632']", , , ,0.483,79.99 +18284.0,package delivered,2020-02-28 16:51:48.000Z, , , ,"['661068']", ,0.975,258.98 +18285.0,place order,2020-02-28 17:05:19.000Z, ,"['886787','886788']","['991658']", , ,1.463,1233.99 +18286.0,item out of stock,2020-02-28 17:27:40.000Z, ,"['886722']", , , ,0.78,99.99 +18287.0,pick item,2020-02-28 17:31:49.000Z, ,"['886748']", , , ,0.28,89.99 +18288.0,item out of stock,2020-02-28 17:54:19.000Z, ,"['886728']", , , ,0.88,89.99 +18289.0,confirm order,2020-02-28 18:28:21.000Z, , ,"['991656']", , ,2.736,2367.98 +18290.0,pick item,2020-02-28 18:29:44.000Z, ,"['886765']", , , ,1.25,2200.0 +18291.0,confirm order,2020-02-28 18:36:41.000Z, , ,"['991650']", , ,1.65,2954.0 +18292.0,send package,2020-02-28 18:44:50.000Z, , , ,"['661065']", ,1.44,219.97 +18293.0,place order,2020-02-28 18:55:32.000Z, ,"['886792','886790','886791','886789']","['991659']", , ,1.903,1858.99 +18294.0,pick item,2020-02-28 19:34:13.000Z, ,"['886782']", , , ,0.2,39.99 +18295.0,place order,2020-02-28 22:30:39.000Z, ,"['886793','886795','886794','886797','886796']","['991660']", , ,3.193,1383.99 +18296.0,create package,2020-02-28 23:00:00.000Z, ,"['886689','886673','886688','886691','886675','886695','886702','886682','886694','886683','886656','886687']", ,"['661071']", ,5.875,9496.98 +18297.0,place order,2020-02-29 21:31:45.000Z, ,"['886798']","['991661']", , ,0.44,481.0 +18298.0,payment reminder,2020-03-01 16:04:09.000Z, , ,"['991543']", , ,2.757,3727.99 +18299.0,payment reminder,2020-03-01 20:36:27.000Z, , ,"['991542']", , ,2.084,4446.99 +18300.0,place order,2020-03-01 21:51:18.000Z, ,"['886802','886799','886803','886801','886800']","['991662']", , ,4.506,4182.98 +18301.0,payment reminder,2020-03-02 07:10:25.000Z, , ,"['991535']", , ,4.11,2864.97 +18302.0,item out of stock,2020-03-02 07:29:26.000Z, ,"['886781']", , , ,0.88,89.99 +18303.0,place order,2020-03-02 08:52:03.000Z, ,"['886808','886809','886806','886807','886804','886810','886805']","['991663']", , ,3.528,5482.99 +18304.0,pick item,2020-03-02 08:53:14.000Z, ,"['886798']", , , ,0.44,476.0 +18305.0,pick item,2020-03-02 08:58:03.000Z, ,"['886802']", , , ,1.28,149.99 +18306.0,send package,2020-03-02 08:58:24.000Z, , , ,"['661069']", ,6.239,3550.94 +18307.0,package delivered,2020-03-02 08:59:36.000Z, , , ,"['661069']", ,6.239,3550.94 +18308.0,pick item,2020-03-02 09:21:34.000Z, ,"['886586']", , , ,0.495,129.0 +18309.0,reorder item,2020-03-02 09:23:01.000Z, ,"['886735']", , , ,0.28,449.0 +18310.0,item out of stock,2020-03-02 09:28:07.000Z, ,"['886769']", , , ,0.172,699.0 +18311.0,confirm order,2020-03-02 09:35:02.000Z, , ,"['991662']", , ,4.506,4182.98 +18312.0,pick item,2020-03-02 09:35:56.000Z, ,"['886796']", , , ,1.28,149.99 +18313.0,reorder item,2020-03-02 09:39:37.000Z, ,"['886594']", , , ,0.28,89.99 +18314.0,package delivered,2020-03-02 09:54:20.000Z, , , ,"['661065']", ,1.44,219.97 +18315.0,pick item,2020-03-02 09:56:50.000Z, ,"['886784']", , , ,0.483,495.0 +18316.0,pay order,2020-03-02 10:12:02.000Z, , ,"['991615']", , ,1.626,1063.97 +18317.0,pay order,2020-03-02 10:13:08.000Z, , ,"['991617']", , ,2.025,2423.99 +18318.0,pick item,2020-03-02 10:20:52.000Z, ,"['886706']", , , ,0.2,39.99 +18319.0,pay order,2020-03-02 10:26:49.000Z, , ,"['991647']", , ,0.21,534.0 +18320.0,pick item,2020-03-02 10:28:16.000Z, ,"['886789']", , , ,0.78,99.99 +18321.0,pick item,2020-03-02 10:33:02.000Z, ,"['886736']", , , ,1.28,149.99 +18322.0,pay order,2020-03-02 10:34:13.000Z, , ,"['991618']", , ,1.44,583.98 +18323.0,item out of stock,2020-03-02 10:42:50.000Z, ,"['886710']", , , ,0.98,129.99 +18324.0,reorder item,2020-03-02 10:43:49.000Z, ,"['886705']", , , ,0.88,89.99 +18325.0,confirm order,2020-03-02 10:46:42.000Z, , ,"['991652']", , ,2.375,1824.99 +18326.0,pick item,2020-03-02 10:51:55.000Z, ,"['886766']", , , ,1.48,199.99 +18327.0,place order,2020-03-02 11:03:54.000Z, ,"['886811','886815','886812','886816','886814','886813']","['991664']", , ,6.776,5302.97 +18328.0,package delivered,2020-03-02 11:05:16.000Z, , , ,"['661067']", ,3.638,3367.97 +18329.0,pick item,2020-03-02 11:19:08.000Z, ,"['886771']", , , ,0.98,129.99 +18330.0,reorder item,2020-03-02 11:19:20.000Z, ,"['886759']", , , ,0.44,476.0 +18331.0,package delivered,2020-03-02 11:21:01.000Z, , , ,"['661063']", ,7.3679999999999986,8697.96 +18332.0,item out of stock,2020-03-02 11:25:50.000Z, ,"['886767']", , , ,0.21,529.0 +18333.0,pick item,2020-03-02 11:31:15.000Z, ,"['886690']", , , ,1.37,2500.0 +18334.0,reorder item,2020-03-02 11:31:38.000Z, ,"['886739']", , , ,0.38,29.99 +18335.0,confirm order,2020-03-02 11:35:53.000Z, , ,"['991659']", , ,1.903,1858.99 +18336.0,pick item,2020-03-02 11:44:03.000Z, ,"['886754']", , , ,1.25,2200.0 +18337.0,pick item,2020-03-02 12:01:32.000Z, ,"['886792']", , , ,0.495,129.0 +18338.0,create package,2020-03-02 12:01:32.000Z, ,"['886615','886662','886745','886789','886792','886663','885818']", ,"['661072']", ,3.5010000000000003,2550.98 +18339.0,confirm order,2020-03-02 12:12:18.000Z, , ,"['991660']", , ,3.193,1383.99 +18340.0,pick item,2020-03-02 12:18:11.000Z, ,"['886812']", , , ,1.48,199.99 +18341.0,pay order,2020-03-02 12:24:06.000Z, , ,"['991656']", , ,2.736,2367.98 +18342.0,place order,2020-03-02 12:27:35.000Z, ,"['886819','886821','886818','886817','886820']","['991665']", , ,3.282,3978.98 +18343.0,send package,2020-03-02 12:58:26.000Z, , , ,"['661070']", ,5.0,4447.97 +18344.0,pick item,2020-03-02 13:00:35.000Z, ,"['886750']", , , ,0.483,495.0 +18345.0,confirm order,2020-03-02 13:05:34.000Z, , ,"['991658']", , ,1.463,1233.99 +18346.0,item out of stock,2020-03-02 13:13:54.000Z, ,"['886732']", , , ,0.21,529.0 +18347.0,item out of stock,2020-03-02 13:26:32.000Z, ,"['886752']", , , ,0.483,495.0 +18348.0,pick item,2020-03-02 13:35:42.000Z, ,"['886747']", , , ,0.188,1149.0 +18349.0,pick item,2020-03-02 13:48:52.000Z, ,"['886547']", , , ,0.28,449.0 +18350.0,reorder item,2020-03-02 13:50:53.000Z, ,"['886732']", , , ,0.21,529.0 +18351.0,item out of stock,2020-03-02 14:01:28.000Z, ,"['886751']", , , ,0.78,99.99 +18352.0,pick item,2020-03-02 14:10:15.000Z, ,"['886735']", , , ,0.28,449.0 +18353.0,pay order,2020-03-02 14:10:47.000Z, , ,"['991519']", , ,2.012,2072.98 +18354.0,pick item,2020-03-02 14:14:31.000Z, ,"['886336']", , , ,0.98,129.99 +18355.0,place order,2020-03-02 14:14:58.000Z, ,"['886822','886823','886824']","['991666']", , ,1.87,723.98 +18356.0,pay order,2020-03-02 14:19:07.000Z, , ,"['991619']", , ,1.683,1891.0 +18357.0,pick item,2020-03-02 14:22:48.000Z, ,"['886820']", , , ,0.483,495.0 +18358.0,create package,2020-03-02 14:22:48.000Z, ,"['886546','886390','886608','886729','886394']", ,"['661073']", ,5.73,7119.98 +18359.0,reorder item,2020-03-02 14:23:51.000Z, ,"['886722']", , , ,0.78,99.99 +18360.0,pick item,2020-03-02 14:24:02.000Z, ,"['886684']", , , ,0.495,129.0 +18361.0,pick item,2020-03-02 14:28:10.000Z, ,"['886499']", , , ,0.28,89.99 +18362.0,package delivered,2020-03-02 14:35:30.000Z, , , ,"['661066']", ,1.822,3648.0 +18363.0,pick item,2020-03-02 14:39:15.000Z, ,"['886731']", , , ,1.48,199.99 +18364.0,pay order,2020-03-02 14:40:55.000Z, , ,"['991524']", , ,2.96,2568.98 +18365.0,pick item,2020-03-02 14:44:18.000Z, ,"['886775']", , , ,1.28,149.99 +18366.0,payment reminder,2020-03-02 14:54:03.000Z, , ,"['991547']", , ,2.423,1383.97 +18367.0,pick item,2020-03-02 15:14:28.000Z, ,"['886707']", , , ,0.28,449.0 +18368.0,create package,2020-03-02 15:14:28.000Z, ,"['886760','886715','886762','886714']", ,"['661074']", ,3.712,1148.97 +18369.0,package delivered,2020-03-02 15:15:07.000Z, , , ,"['661062']", ,9.768,5097.91 +18370.0,pick item,2020-03-02 15:16:58.000Z, ,"['886818']", , , ,1.37,2500.0 +18371.0,confirm order,2020-03-02 15:40:10.000Z, , ,"['991643']", , ,2.66,3163.98 +18372.0,confirm order,2020-03-02 15:43:41.000Z, , ,"['991649']", , ,2.8080000000000003,1603.95 +18373.0,place order,2020-03-02 15:49:43.000Z, ,"['886826','886825','886827','886828','886829']","['991667']", , ,1.998,2338.98 +18374.0,pick item,2020-03-02 15:56:48.000Z, ,"['886786']", , , ,0.483,79.99 +18375.0,pick item,2020-03-02 16:02:05.000Z, ,"['886777']", , , ,0.483,495.0 +18376.0,pick item,2020-03-02 16:02:11.000Z, ,"['886793']", , , ,0.483,495.0 +18377.0,create package,2020-03-02 16:02:11.000Z, ,"['886771','886672','886772','886401','886775']", ,"['661075']", ,4.32,539.95 +18378.0,pick item,2020-03-02 16:18:46.000Z, ,"['886791']", , , ,0.188,1149.0 +18379.0,send package,2020-03-02 16:35:55.000Z, , , ,"['661074']", ,3.712,1148.97 +18380.0,confirm order,2020-03-02 16:42:58.000Z, , ,"['991657']", , ,3.676,2939.96 +18381.0,item out of stock,2020-03-02 16:54:40.000Z, ,"['886773']", , , ,0.483,495.0 +18382.0,pick item,2020-03-02 16:56:17.000Z, ,"['886725']", , , ,0.188,1149.0 +18383.0,pick item,2020-03-02 17:07:08.000Z, ,"['886774']", , , ,0.483,1099.0 +18384.0,item out of stock,2020-03-02 17:24:39.000Z, ,"['886794']", , , ,0.495,129.0 +18385.0,place order,2020-03-02 17:59:13.000Z, ,"['886835','886833','886830','886831','886832','886834']","['991668']", , ,4.853,3743.96 +18386.0,pick item,2020-03-02 19:08:50.000Z, ,"['886807']", , , ,0.172,699.0 +18387.0,pick item,2020-03-02 19:22:52.000Z, ,"['886779']", , , ,0.28,89.99 +18388.0,create package,2020-03-02 19:22:52.000Z, ,"['886473','886798','886322']", ,"['661076']", ,2.02,3505.0 +18389.0,item out of stock,2020-03-02 19:59:15.000Z, ,"['886805']", , , ,0.188,1149.0 +18390.0,pick item,2020-03-02 21:02:20.000Z, ,"['886826']", , , ,0.88,89.99 +18391.0,pick item,2020-03-02 21:10:21.000Z, ,"['886810']", , , ,0.483,495.0 +18392.0,place order,2020-03-02 21:37:14.000Z, ,"['886837','886836','886838']","['991669']", , ,1.846,1043.98 +18393.0,pick item,2020-03-03 07:57:41.000Z, ,"['886744']", , , ,0.188,1149.0 +18394.0,create package,2020-03-03 07:57:41.000Z, ,"['886755','886754','886748','886757','886758','886499','886750','886747']", ,"['661077']", ,4.107,7551.98 +18395.0,pay order,2020-03-03 08:03:38.000Z, , ,"['991607']", , ,6.63,5723.95 +18396.0,place order,2020-03-03 08:06:03.000Z, ,"['886845','886843','886847','886840','886841','886848','886844','886839','886846','886849','886842']","['991670']", , ,7.765,10970.96 +18397.0,item out of stock,2020-03-03 08:09:33.000Z, ,"['886835']", , , ,0.483,1099.0 +18398.0,pick item,2020-03-03 08:14:46.000Z, ,"['886847']", , , ,0.2,39.99 +18399.0,pick item,2020-03-03 08:17:16.000Z, ,"['886776']", , , ,1.28,149.99 +18400.0,send package,2020-03-03 08:25:07.000Z, , , ,"['661071']", ,5.875,9496.98 +18401.0,reorder item,2020-03-03 08:34:07.000Z, ,"['886713']", , , ,0.483,1099.0 +18402.0,reorder item,2020-03-03 08:40:57.000Z, ,"['886704']", , , ,1.28,149.99 +18403.0,pick item,2020-03-03 08:42:32.000Z, ,"['886788']", , , ,0.483,1099.0 +18404.0,pay order,2020-03-03 08:47:50.000Z, , ,"['991662']", , ,4.506,4182.98 +18405.0,pick item,2020-03-03 08:48:45.000Z, ,"['886828']", , , ,0.44,476.0 +18406.0,pick item,2020-03-03 08:48:49.000Z, ,"['886823']", , , ,0.88,89.99 +18407.0,package delivered,2020-03-03 09:21:56.000Z, , , ,"['661070']", ,5.0,4447.97 +18408.0,place order,2020-03-03 09:31:53.000Z, ,"['886851','886852','886850','886853']","['991671']", , ,1.729,1712.98 +18409.0,confirm order,2020-03-03 09:36:46.000Z, , ,"['991666']", , ,1.87,723.98 +18410.0,pick item,2020-03-03 09:48:11.000Z, ,"['886837']", , , ,1.48,199.99 +18411.0,pay order,2020-03-03 09:49:07.000Z, , ,"['991534']", , ,1.812,1312.98 +18412.0,pay order,2020-03-03 09:53:28.000Z, , ,"['991535']", , ,4.11,2864.97 +18413.0,confirm order,2020-03-03 09:54:33.000Z, , ,"['991654']", , ,1.845,1857.99 +18414.0,send package,2020-03-03 09:57:08.000Z, , , ,"['661075']", ,4.32,539.95 +18415.0,pick item,2020-03-03 10:02:23.000Z, ,"['886804']", , , ,0.44,476.0 +18416.0,pick item,2020-03-03 10:09:07.000Z, ,"['886180']", , , ,1.48,199.99 +18417.0,create package,2020-03-03 10:09:07.000Z, ,"['886740','886744','886743','886742']", ,"['661078']", ,2.228,1528.97 +18418.0,send package,2020-03-03 10:09:39.000Z, , , ,"['661073']", ,5.73,7119.98 +18419.0,pick item,2020-03-03 10:17:05.000Z, ,"['886741']", , , ,0.2,39.99 +18420.0,pay order,2020-03-03 10:29:06.000Z, , ,"['991657']", , ,3.676,2939.96 +18421.0,send package,2020-03-03 10:29:10.000Z, , , ,"['661076']", ,2.02,3505.0 +18422.0,item out of stock,2020-03-03 10:32:54.000Z, ,"['886841']", , , ,0.483,1099.0 +18423.0,pay order,2020-03-03 10:34:01.000Z, , ,"['991636']", , ,3.123,4681.99 +18424.0,pick item,2020-03-03 10:46:59.000Z, ,"['886838']", , , ,0.166,799.0 +18425.0,pick item,2020-03-03 10:47:48.000Z, ,"['886801']", , , ,1.37,2500.0 +18426.0,pick item,2020-03-03 10:48:30.000Z, ,"['886284']", , , ,1.25,2200.0 +18427.0,create package,2020-03-03 10:48:30.000Z, ,"['886256']", ,"['661079']", ,0.28,449.0 +18428.0,pick item,2020-03-03 10:48:47.000Z, ,"['886384']", , , ,0.188,1149.0 +18429.0,create package,2020-03-03 10:48:47.000Z, ,"['886784','886725','886786','886847','886723','886785','886770','886782','886823','886586','886667']", ,"['661080']", ,4.338,3376.94 +18430.0,payment reminder,2020-03-03 10:53:14.000Z, , ,"['991556']", , ,3.283,3281.97 +18431.0,package delivered,2020-03-03 10:54:35.000Z, , , ,"['661076']", ,2.02,3505.0 +18432.0,pick item,2020-03-03 10:57:08.000Z, ,"['886787']", , , ,0.98,129.99 +18433.0,confirm order,2020-03-03 10:59:33.000Z, , ,"['991661']", , ,0.44,481.0 +18434.0,send package,2020-03-03 10:59:59.000Z, , , ,"['661072']", ,3.5010000000000003,2550.98 +18435.0,reorder item,2020-03-03 11:02:20.000Z, ,"['886710']", , , ,0.98,129.99 +18436.0,pick item,2020-03-03 11:07:34.000Z, ,"['886734']", , , ,0.495,129.0 +18437.0,confirm order,2020-03-03 11:07:41.000Z, , ,"['991671']", , ,1.729,1712.98 +18438.0,package delivered,2020-03-03 11:10:39.000Z, , , ,"['661073']", ,5.73,7119.98 +18439.0,package delivered,2020-03-03 11:16:27.000Z, , , ,"['661075']", ,4.32,539.95 +18440.0,reorder item,2020-03-03 11:22:56.000Z, ,"['886769']", , , ,0.172,699.0 +18441.0,place order,2020-03-03 11:23:34.000Z, ,"['886855','886857','886854','886860','886858','886856','886859']","['991672']", , ,6.252999999999999,3084.94 +18442.0,pick item,2020-03-03 11:27:29.000Z, ,"['886368']", , , ,1.48,199.99 +18443.0,send package,2020-03-03 11:33:05.000Z, , , ,"['661078']", ,2.228,1528.97 +18444.0,confirm order,2020-03-03 11:35:16.000Z, , ,"['991664']", , ,6.776,5302.97 +18445.0,pick item,2020-03-03 11:37:18.000Z, ,"['886768']", , , ,0.98,129.99 +18446.0,pick item,2020-03-03 11:53:33.000Z, ,"['886846']", , , ,1.28,149.99 +18447.0,item out of stock,2020-03-03 12:12:25.000Z, ,"['886790']", , , ,0.44,476.0 +18448.0,pick item,2020-03-03 12:29:17.000Z, ,"['886803']", , , ,0.21,529.0 +18449.0,item out of stock,2020-03-03 12:34:32.000Z, ,"['886860']", , , ,0.78,99.99 +18450.0,pick item,2020-03-03 12:48:35.000Z, ,"['886703']", , , ,0.166,799.0 +18451.0,pick item,2020-03-03 12:50:52.000Z, ,"['886832']", , , ,0.28,89.99 +18452.0,pick item,2020-03-03 12:57:50.000Z, ,"['886856']", , , ,0.88,89.99 +18453.0,place order,2020-03-03 13:06:55.000Z, ,"['886862','886863','886861']","['991673']", , ,1.095,2279.0 +18454.0,pick item,2020-03-03 13:24:48.000Z, ,"['886153']", , , ,1.37,2500.0 +18455.0,confirm order,2020-03-03 13:28:34.000Z, , ,"['991672']", , ,6.252999999999999,3084.94 +18456.0,payment reminder,2020-03-03 13:29:23.000Z, , ,"['991554']", , ,3.0010000000000003,3520.97 +18457.0,item out of stock,2020-03-03 13:33:26.000Z, ,"['886852']", , , ,0.28,449.0 +18458.0,pick item,2020-03-03 13:39:37.000Z, ,"['886862']", , , ,0.44,476.0 +18459.0,create package,2020-03-03 13:39:37.000Z, ,"['886734','886763','886738','886803','886801','886766','886736','886153','886765','886802','886735']", ,"['661081']", ,11.665,11456.96 +18460.0,confirm order,2020-03-03 13:55:25.000Z, , ,"['991669']", , ,1.846,1043.98 +18461.0,pick item,2020-03-03 13:56:38.000Z, ,"['886819']", , , ,0.78,99.99 +18462.0,item out of stock,2020-03-03 14:00:07.000Z, ,"['886824']", , , ,0.78,99.99 +18463.0,reorder item,2020-03-03 14:01:21.000Z, ,"['886805']", , , ,0.188,1149.0 +18464.0,pick item,2020-03-03 14:05:15.000Z, ,"['886724']", , , ,1.25,2200.0 +18465.0,package delivered,2020-03-03 14:08:03.000Z, , , ,"['661072']", ,3.5010000000000003,2550.98 +18466.0,pick item,2020-03-03 14:19:39.000Z, ,"['886839']", , , ,1.37,2500.0 +18467.0,pay order,2020-03-03 14:29:00.000Z, , ,"['991608']", , ,1.57,2544.99 +18468.0,reorder item,2020-03-03 14:33:07.000Z, ,"['886824']", , , ,0.78,99.99 +18469.0,place order,2020-03-03 14:33:38.000Z, ,"['886864','886868','886866','886867','886865']","['991674']", , ,5.292999999999998,3993.97 +18470.0,item out of stock,2020-03-03 14:35:07.000Z, ,"['886866']", , , ,0.483,1099.0 +18471.0,reorder item,2020-03-03 14:36:06.000Z, ,"['886529']", , , ,0.28,89.99 +18472.0,pay order,2020-03-03 14:40:36.000Z, , ,"['991513']", , ,1.76,653.99 +18473.0,pick item,2020-03-03 14:46:31.000Z, ,"['886649']", , , ,0.21,529.0 +18474.0,reorder item,2020-03-03 14:46:41.000Z, ,"['886773']", , , ,0.483,495.0 +18475.0,package delivered,2020-03-03 14:48:18.000Z, , , ,"['661078']", ,2.228,1528.97 +18476.0,confirm order,2020-03-03 14:51:00.000Z, , ,"['991663']", , ,3.528,5482.99 +18477.0,reorder item,2020-03-03 15:07:10.000Z, ,"['886635']", , , ,0.483,1099.0 +18478.0,pick item,2020-03-03 15:08:03.000Z, ,"['886814']", , , ,0.483,1099.0 +18479.0,pick item,2020-03-03 15:26:02.000Z, ,"['886859']", , , ,0.98,129.99 +18480.0,send package,2020-03-03 15:28:07.000Z, , , ,"['661080']", ,4.338,3376.94 +18481.0,pick item,2020-03-03 15:29:04.000Z, ,"['886809']", , , ,0.495,129.0 +18482.0,send package,2020-03-03 15:30:24.000Z, , , ,"['661077']", ,4.107,7551.98 +18483.0,pick item,2020-03-03 15:30:28.000Z, ,"['886848']", , , ,0.2,39.99 +18484.0,pick item,2020-03-03 15:34:04.000Z, ,"['886843']", , , ,0.166,799.0 +18485.0,pick item,2020-03-03 15:40:41.000Z, ,"['886353']", , , ,1.37,2500.0 +18486.0,reorder item,2020-03-03 15:54:50.000Z, ,"['886866']", , , ,0.483,1099.0 +18487.0,package delivered,2020-03-03 15:56:30.000Z, , , ,"['661074']", ,3.712,1148.97 +18488.0,confirm order,2020-03-03 16:00:45.000Z, , ,"['991670']", , ,7.765,10970.96 +18489.0,confirm order,2020-03-03 16:07:52.000Z, , ,"['991668']", , ,4.853,3743.96 +18490.0,pick item,2020-03-03 16:09:34.000Z, ,"['886732']", , , ,0.21,529.0 +18491.0,create package,2020-03-03 16:09:34.000Z, ,"['886706','886632','886780','886778','886777','886776','886707','886441','886779']", ,"['661082']", ,4.194,3060.96 +18492.0,pay order,2020-03-03 16:11:34.000Z, , ,"['991649']", , ,2.8080000000000003,1603.95 +18493.0,pick item,2020-03-03 16:19:51.000Z, ,"['886811']", , , ,1.48,199.99 +18494.0,package delivered,2020-03-03 16:19:53.000Z, , , ,"['661071']", ,5.875,9496.98 +18495.0,place order,2020-03-03 16:27:03.000Z, ,"['886870','886869']","['991675']", , ,1.652,903.99 +18496.0,pay order,2020-03-03 16:33:07.000Z, , ,"['991645']", , ,2.548,1443.98 +18497.0,pay order,2020-03-03 16:44:52.000Z, , ,"['991640']", , ,0.48,493.99 +18498.0,pick item,2020-03-03 16:56:00.000Z, ,"['886833']", , , ,0.98,129.99 +18499.0,item out of stock,2020-03-03 17:00:12.000Z, ,"['886753']", , , ,0.483,495.0 +18500.0,place order,2020-03-03 18:13:53.000Z, ,"['886875','886872','886874','886871','886873']","['991676']", , ,3.218,3457.99 +18501.0,reorder item,2020-03-03 18:56:19.000Z, ,"['886835']", , , ,0.483,1099.0 +18502.0,confirm order,2020-03-03 19:49:40.000Z, , ,"['991667']", , ,1.998,2338.98 +18503.0,pay order,2020-03-03 20:54:46.000Z, , ,"['991668']", , ,4.853,3743.96 +18504.0,place order,2020-03-03 21:07:21.000Z, ,"['886877','886876','886878','886880','886879','886881']","['991677']", , ,3.329,3255.99 +18505.0,place order,2020-03-04 07:02:00.000Z, ,"['886883','886882']","['991678']", , ,0.606,1280.0 +18506.0,pick item,2020-03-04 07:53:15.000Z, ,"['886761']", , , ,0.483,495.0 +18507.0,confirm order,2020-03-04 08:06:36.000Z, , ,"['991678']", , ,0.606,1280.0 +18508.0,pick item,2020-03-04 08:17:59.000Z, ,"['886795']", , , ,0.495,129.0 +18509.0,pick item,2020-03-04 08:28:36.000Z, ,"['886882']", , , ,0.44,476.0 +18510.0,reorder item,2020-03-04 08:35:11.000Z, ,"['886841']", , , ,0.483,1099.0 +18511.0,reorder item,2020-03-04 08:40:01.000Z, ,"['886751']", , , ,0.78,99.99 +18512.0,pay order,2020-03-04 08:41:37.000Z, , ,"['991590']", , ,2.439,2546.99 +18513.0,item out of stock,2020-03-04 08:48:14.000Z, ,"['886875']", , , ,1.25,2200.0 +18514.0,pick item,2020-03-04 08:51:49.000Z, ,"['886816']", , , ,0.483,1099.0 +18515.0,place order,2020-03-04 08:52:48.000Z, ,"['886885','886884','886886']","['991679']", , ,1.838,3743.99 +18516.0,send package,2020-03-04 09:06:01.000Z, , , ,"['661079']", ,0.28,449.0 +18517.0,pick item,2020-03-04 09:08:58.000Z, ,"['886849']", , , ,1.37,2500.0 +18518.0,pay order,2020-03-04 09:11:39.000Z, , ,"['991641']", , ,3.786,2377.97 +18519.0,pick item,2020-03-04 09:14:29.000Z, ,"['886874']", , , ,0.78,99.99 +18520.0,payment reminder,2020-03-04 09:36:35.000Z, , ,"['991561']", , ,2.143,689.98 +18521.0,item out of stock,2020-03-04 09:41:20.000Z, ,"['886851']", , , ,0.483,1099.0 +18522.0,pick item,2020-03-04 09:46:06.000Z, ,"['886863']", , , ,0.483,1099.0 +18523.0,create package,2020-03-04 09:46:06.000Z, ,"['886809','886807','886804','886810','886793','886795','886796']", ,"['661083']", ,3.848,2572.99 +18524.0,pick item,2020-03-04 10:03:19.000Z, ,"['886836']", , , ,0.2,39.99 +18525.0,item out of stock,2020-03-04 10:04:57.000Z, ,"['886806']", , , ,0.38,29.99 +18526.0,pick item,2020-03-04 10:08:03.000Z, ,"['886877']", , , ,0.495,129.0 +18527.0,item out of stock,2020-03-04 10:10:41.000Z, ,"['886825']", , , ,0.188,1149.0 +18528.0,confirm order,2020-03-04 10:11:03.000Z, , ,"['991665']", , ,3.282,3978.98 +18529.0,pick item,2020-03-04 10:21:38.000Z, ,"['886884']", , , ,0.28,89.99 +18530.0,pay order,2020-03-04 10:24:37.000Z, , ,"['991665']", , ,3.282,3978.98 +18531.0,pick item,2020-03-04 10:26:33.000Z, ,"['886864']", , , ,1.28,149.99 +18532.0,reorder item,2020-03-04 10:33:07.000Z, ,"['886753']", , , ,0.483,495.0 +18533.0,pick item,2020-03-04 10:50:06.000Z, ,"['886879']", , , ,0.188,1149.0 +18534.0,reorder item,2020-03-04 10:51:09.000Z, ,"['886806']", , , ,0.38,29.99 +18535.0,pick item,2020-03-04 10:51:41.000Z, ,"['886855']", , , ,0.88,89.99 +18536.0,pay order,2020-03-04 10:55:09.000Z, , ,"['991643']", , ,2.66,3163.98 +18537.0,confirm order,2020-03-04 10:57:17.000Z, , ,"['991673']", , ,1.095,2279.0 +18538.0,reorder item,2020-03-04 11:04:13.000Z, ,"['886767']", , , ,0.21,529.0 +18539.0,place order,2020-03-04 11:05:23.000Z, ,"['886889','886888','886887']","['991680']", , ,3.29,3180.99 +18540.0,package delivered,2020-03-04 11:05:42.000Z, , , ,"['661077']", ,4.107,7551.98 +18541.0,item out of stock,2020-03-04 11:07:04.000Z, ,"['886853']", , , ,0.483,79.99 +18542.0,pick item,2020-03-04 11:12:22.000Z, ,"['886867']", , , ,1.28,149.99 +18543.0,create package,2020-03-04 11:12:22.000Z, ,"['886690','886703','886684']", ,"['661084']", ,2.031,3428.0 +18544.0,item out of stock,2020-03-04 11:17:24.000Z, ,"['886799']", , , ,1.48,199.99 +18545.0,send package,2020-03-04 11:22:10.000Z, , , ,"['661083']", ,3.848,2572.99 +18546.0,pick item,2020-03-04 11:22:45.000Z, ,"['885976']", , , ,0.28,89.99 +18547.0,item out of stock,2020-03-04 11:32:46.000Z, ,"['886834']", , , ,0.98,129.99 +18548.0,send package,2020-03-04 11:33:39.000Z, , , ,"['661084']", ,2.031,3428.0 +18549.0,reorder item,2020-03-04 11:36:52.000Z, ,"['886746']", , , ,1.37,2500.0 +18550.0,pick item,2020-03-04 11:38:14.000Z, ,"['886733']", , , ,0.2,39.99 +18551.0,pick item,2020-03-04 11:44:53.000Z, ,"['886883']", , , ,0.166,799.0 +18552.0,create package,2020-03-04 11:44:53.000Z, ,"['886811','886816','886814','886877','886649','886732','886812','886879']", ,"['661085']", ,5.029,4933.98 +18553.0,pick item,2020-03-04 11:47:09.000Z, ,"['886885']", , , ,1.37,2500.0 +18554.0,pick item,2020-03-04 11:48:21.000Z, ,"['886594']", , , ,0.28,89.99 +18555.0,pick item,2020-03-04 11:53:15.000Z, ,"['886783']", , , ,1.25,2200.0 +18556.0,pick item,2020-03-04 12:16:36.000Z, ,"['886539']", , , ,0.2,39.99 +18557.0,pay order,2020-03-04 12:20:22.000Z, , ,"['991661']", , ,0.44,481.0 +18558.0,confirm order,2020-03-04 12:24:42.000Z, , ,"['991676']", , ,3.218,3457.99 +18559.0,place order,2020-03-04 12:30:33.000Z, ,"['886892','886890','886891']","['991681']", , ,2.23,2344.98 +18560.0,pick item,2020-03-04 12:31:32.000Z, ,"['886822']", , , ,0.21,529.0 +18561.0,pick item,2020-03-04 12:45:58.000Z, ,"['886868']", , , ,0.88,89.99 +18562.0,pick item,2020-03-04 12:48:29.000Z, ,"['886645']", , , ,0.483,79.99 +18563.0,pick item,2020-03-04 12:52:38.000Z, ,"['886873']", , , ,0.21,529.0 +18564.0,create package,2020-03-04 12:52:38.000Z, ,"['886180','886791','886547']", ,"['661086']", ,1.948,1797.99 +18565.0,pick item,2020-03-04 12:57:25.000Z, ,"['886800']", , , ,0.166,799.0 +18566.0,confirm order,2020-03-04 13:05:04.000Z, , ,"['991679']", , ,1.838,3743.99 +18567.0,send package,2020-03-04 13:09:15.000Z, , , ,"['661081']", ,11.665,11456.96 +18568.0,send package,2020-03-04 13:22:15.000Z, , , ,"['661085']", ,5.029,4933.98 +18569.0,reorder item,2020-03-04 13:23:59.000Z, ,"['886799']", , , ,1.48,199.99 +18570.0,package delivered,2020-03-04 13:43:56.000Z, , , ,"['661085']", ,5.029,4933.98 +18571.0,pick item,2020-03-04 13:50:22.000Z, ,"['886889']", , , ,0.44,476.0 +18572.0,item out of stock,2020-03-04 13:57:26.000Z, ,"['886876']", , , ,0.188,1149.0 +18573.0,send package,2020-03-04 13:57:27.000Z, , , ,"['661082']", ,4.194,3060.96 +18574.0,reorder item,2020-03-04 14:06:39.000Z, ,"['886752']", , , ,0.483,495.0 +18575.0,pick item,2020-03-04 14:09:46.000Z, ,"['886888']", , , ,1.48,199.99 +18576.0,create package,2020-03-04 14:09:46.000Z, ,"['886594','886368','886336']", ,"['661087']", ,2.74,419.97 +18577.0,send package,2020-03-04 14:14:56.000Z, , , ,"['661086']", ,1.948,1797.99 +18578.0,reorder item,2020-03-04 14:17:40.000Z, ,"['886825']", , , ,0.188,1149.0 +18579.0,place order,2020-03-04 14:20:54.000Z, ,"['886893','886897','886895','886894','886896']","['991682']", , ,3.033,1356.99 +18580.0,pick item,2020-03-04 14:22:09.000Z, ,"['886844']", , , ,1.37,2500.0 +18581.0,confirm order,2020-03-04 14:26:22.000Z, , ,"['991674']", , ,5.292999999999998,3993.97 +18582.0,package delivered,2020-03-04 14:27:18.000Z, , , ,"['661080']", ,4.338,3376.94 +18583.0,pick item,2020-03-04 14:31:30.000Z, ,"['886685']", , , ,0.28,89.99 +18584.0,pick item,2020-03-04 14:35:26.000Z, ,"['886764']", , , ,0.2,39.99 +18585.0,create package,2020-03-04 14:35:26.000Z, ,"['886855','886856','886836','886859','886820','886838','886819','886818','886837']", ,"['661088']", ,7.2189999999999985,4443.94 +18586.0,package delivered,2020-03-04 14:42:08.000Z, , , ,"['661086']", ,1.948,1797.99 +18587.0,item out of stock,2020-03-04 14:47:43.000Z, ,"['886896']", , , ,0.495,129.0 +18588.0,confirm order,2020-03-04 14:57:41.000Z, , ,"['991680']", , ,3.29,3180.99 +18589.0,pick item,2020-03-04 14:59:49.000Z, ,"['886886']", , , ,0.188,1149.0 +18590.0,package delivered,2020-03-04 15:01:08.000Z, , , ,"['661084']", ,2.031,3428.0 +18591.0,reorder item,2020-03-04 15:01:19.000Z, ,"['886875']", , , ,1.25,2200.0 +18592.0,confirm order,2020-03-04 15:16:18.000Z, , ,"['991677']", , ,3.329,3255.99 +18593.0,package delivered,2020-03-04 15:32:10.000Z, , , ,"['661079']", ,0.28,449.0 +18594.0,pick item,2020-03-04 15:40:44.000Z, ,"['886858']", , , ,0.483,79.99 +18595.0,package delivered,2020-03-04 16:00:48.000Z, , , ,"['661082']", ,4.194,3060.96 +18596.0,place order,2020-03-04 16:01:35.000Z, ,"['886899','886900','886898','886901']","['991683']", , ,4.123,939.97 +18597.0,pay order,2020-03-04 16:02:24.000Z, , ,"['991653']", , ,4.21,2594.97 +18598.0,pick item,2020-03-04 16:07:02.000Z, ,"['886895']", , , ,0.495,129.0 +18599.0,pick item,2020-03-04 16:09:00.000Z, ,"['886739']", , , ,0.38,29.99 +18600.0,pick item,2020-03-04 16:14:13.000Z, ,"['886897']", , , ,0.28,449.0 +18601.0,reorder item,2020-03-04 16:21:55.000Z, ,"['886671']", , , ,0.172,699.0 +18602.0,pay order,2020-03-04 16:43:47.000Z, , ,"['991601']", , ,1.865,2634.0 +18603.0,failed delivery,2020-03-04 16:48:00.000Z, , , ,"['661083']", ,3.848,2572.99 +18604.0,pick item,2020-03-04 17:15:57.000Z, ,"['886571']", , , ,1.28,149.99 +18605.0,pick item,2020-03-04 17:20:31.000Z, ,"['886854']", , , ,0.88,89.99 +18606.0,place order,2020-03-04 17:22:58.000Z, ,"['886902','886904','886903']","['991684']", , ,0.6559999999999999,2392.99 +18607.0,pick item,2020-03-04 17:35:35.000Z, ,"['886749']", , , ,0.2,39.99 +18608.0,payment reminder,2020-03-04 17:57:14.000Z, , ,"['991567']", , ,2.151,2452.99 +18609.0,reorder item,2020-03-04 18:48:41.000Z, ,"['886728']", , , ,0.88,89.99 +18610.0,place order,2020-03-04 19:48:28.000Z, ,"['886905']","['991685']", , ,1.28,154.99 +18611.0,pay order,2020-03-04 20:36:30.000Z, , ,"['991664']", , ,6.776,5302.97 +18612.0,create package,2020-03-04 23:00:00.000Z, ,"['886826','886384','886284','886828','886731']", ,"['661089']", ,4.238,4114.98 +18613.0,place order,2020-03-05 01:08:43.000Z, ,"['886908','886910','886907','886909','886906']","['991686']", , ,1.206,1831.98 +18614.0,package delivered,2020-03-05 07:22:21.000Z, , , ,"['661081']", ,11.665,11456.96 +18615.0,pay order,2020-03-05 07:42:32.000Z, , ,"['991503']", , ,1.726,1043.98 +18616.0,pick item,2020-03-05 08:01:34.000Z, ,"['886133']", , , ,0.44,476.0 +18617.0,item out of stock,2020-03-05 08:14:17.000Z, ,"['886872']", , , ,0.495,129.0 +18618.0,pick item,2020-03-05 08:21:07.000Z, ,"['886894']", , , ,1.28,149.99 +18619.0,place order,2020-03-05 08:23:22.000Z, ,"['886914','886915','886913','886916','886911','886912']","['991687']", , ,2.4,1949.99 +18620.0,reorder item,2020-03-05 08:31:54.000Z, ,"['886853']", , , ,0.483,79.99 +18621.0,pay order,2020-03-05 08:32:47.000Z, , ,"['991543']", , ,2.757,3727.99 +18622.0,confirm order,2020-03-05 08:34:52.000Z, , ,"['991683']", , ,4.123,939.97 +18623.0,pick item,2020-03-05 08:41:49.000Z, ,"['886907']", , , ,0.28,449.0 +18624.0,pick item,2020-03-05 08:51:05.000Z, ,"['886857']", , , ,1.37,2500.0 +18625.0,pick item,2020-03-05 08:55:55.000Z, ,"['886881']", , , ,1.48,199.99 +18626.0,pick item,2020-03-05 08:56:47.000Z, ,"['886840']", , , ,0.166,799.0 +18627.0,create package,2020-03-05 08:56:47.000Z, ,"['886897','886774','886888','886571','886895','886885','886886','886884','886894','886889']", ,"['661090']", ,7.576,6391.96 +18628.0,pick item,2020-03-05 08:58:14.000Z, ,"['886813']", , , ,1.48,199.99 +18629.0,confirm order,2020-03-05 09:03:00.000Z, , ,"['991675']", , ,1.652,903.99 +18630.0,send package,2020-03-05 09:13:40.000Z, , , ,"['661089']", ,4.238,4114.98 +18631.0,pick item,2020-03-05 09:18:30.000Z, ,"['886865']", , , ,1.37,2500.0 +18632.0,pay order,2020-03-05 09:22:54.000Z, , ,"['991660']", , ,3.193,1383.99 +18633.0,pick item,2020-03-05 09:37:53.000Z, ,"['886898']", , , ,1.48,199.99 +18634.0,pick item,2020-03-05 09:40:20.000Z, ,"['886704']", , , ,1.28,149.99 +18635.0,pick item,2020-03-05 09:50:24.000Z, ,"['886842']", , , ,0.28,449.0 +18636.0,pick item,2020-03-05 09:55:09.000Z, ,"['886914']", , , ,0.21,529.0 +18637.0,place order,2020-03-05 10:06:32.000Z, ,"['886919','886917','886920','886918']","['991688']", , ,1.62,1972.98 +18638.0,confirm order,2020-03-05 10:14:43.000Z, , ,"['991685']", , ,1.28,154.99 +18639.0,item out of stock,2020-03-05 10:24:41.000Z, ,"['886890']", , , ,1.25,2200.0 +18640.0,item out of stock,2020-03-05 10:44:33.000Z, ,"['886906']", , , ,0.166,799.0 +18641.0,pick item,2020-03-05 10:44:51.000Z, ,"['886830']", , , ,0.88,89.99 +18642.0,pick item,2020-03-05 10:47:43.000Z, ,"['886713']", , , ,0.483,1099.0 +18643.0,reorder item,2020-03-05 10:49:12.000Z, ,"['886860']", , , ,0.78,99.99 +18644.0,reorder item,2020-03-05 10:53:06.000Z, ,"['886781']", , , ,0.88,89.99 +18645.0,pay order,2020-03-05 11:07:30.000Z, , ,"['991554']", , ,3.0010000000000003,3520.97 +18646.0,pick item,2020-03-05 11:22:34.000Z, ,"['886640']", , , ,0.28,449.0 +18647.0,pay order,2020-03-05 11:26:05.000Z, , ,"['991671']", , ,1.729,1712.98 +18648.0,confirm order,2020-03-05 11:28:27.000Z, , ,"['991684']", , ,0.6559999999999999,2392.99 +18649.0,pay order,2020-03-05 11:28:43.000Z, , ,"['991659']", , ,1.903,1858.99 +18650.0,reorder item,2020-03-05 11:30:25.000Z, ,"['886851']", , , ,0.483,1099.0 +18651.0,place order,2020-03-05 11:32:51.000Z, ,"['886922','886921']","['991689']", , ,0.775,583.0 +18652.0,reorder item,2020-03-05 11:45:39.000Z, ,"['886896']", , , ,0.495,129.0 +18653.0,confirm order,2020-03-05 12:05:47.000Z, , ,"['991681']", , ,2.23,2344.98 +18654.0,pick item,2020-03-05 12:05:55.000Z, ,"['886880']", , , ,0.483,495.0 +18655.0,create package,2020-03-05 12:05:55.000Z, ,"['886353','886787','886788']", ,"['661091']", ,2.833,3728.99 +18656.0,pay order,2020-03-05 12:20:49.000Z, , ,"['991646']", , ,3.51,2504.98 +18657.0,pick item,2020-03-05 12:24:51.000Z, ,"['886893']", , , ,0.483,495.0 +18658.0,pick item,2020-03-05 12:44:39.000Z, ,"['886825']", , , ,0.188,1149.0 +18659.0,send package,2020-03-05 13:04:26.000Z, , , ,"['661088']", ,7.2189999999999985,4443.94 +18660.0,send package,2020-03-05 13:17:14.000Z, , , ,"['661087']", ,2.74,419.97 +18661.0,place order,2020-03-05 13:25:29.000Z, ,"['886924','886925','886926','886923','886927']","['991690']", , ,2.392,1781.98 +18662.0,pick item,2020-03-05 13:40:05.000Z, ,"['886797']", , , ,0.44,476.0 +18663.0,create package,2020-03-05 13:40:05.000Z, ,"['886914','886741','886739']", ,"['661092']", ,0.79,598.98 +18664.0,reorder item,2020-03-05 13:47:11.000Z, ,"['886790']", , , ,0.44,476.0 +18665.0,send package,2020-03-05 13:55:05.000Z, , , ,"['661090']", ,7.576,6391.96 +18666.0,pick item,2020-03-05 13:58:16.000Z, ,"['886891']", , , ,0.78,99.99 +18667.0,pick item,2020-03-05 13:58:24.000Z, ,"['886899']", , , ,1.28,149.99 +18668.0,pick item,2020-03-05 14:05:51.000Z, ,"['886892']", , , ,0.2,39.99 +18669.0,create package,2020-03-05 14:05:51.000Z, ,"['886822','886843','886864','886868','886873','886840','886865','886768','886713','885976','886783','886848','886844','886839','886846','886724','886874','886849','886842','886867']", ,"['661093']", ,16.455,19503.92 +18670.0,reorder item,2020-03-05 14:26:25.000Z, ,"['886890']", , , ,1.25,2200.0 +18671.0,confirm order,2020-03-05 14:32:06.000Z, , ,"['991689']", , ,0.775,583.0 +18672.0,item out of stock,2020-03-05 14:33:37.000Z, ,"['886923']", , , ,0.172,699.0 +18673.0,pay order,2020-03-05 14:38:59.000Z, , ,"['991567']", , ,2.151,2452.99 +18674.0,send package,2020-03-05 14:47:42.000Z, , , ,"['661093']", ,16.455,19503.92 +18675.0,pick item,2020-03-05 14:48:38.000Z, ,"['886919']", , , ,0.38,29.99 +18676.0,reorder item,2020-03-05 14:53:37.000Z, ,"['886794']", , , ,0.495,129.0 +18677.0,pay order,2020-03-05 15:05:25.000Z, , ,"['991670']", , ,7.765,10970.96 +18678.0,package delivered,2020-03-05 15:09:31.000Z, , , ,"['661087']", ,2.74,419.97 +18679.0,place order,2020-03-05 15:10:46.000Z, ,"['886929','886928']","['991691']", , ,0.6829999999999999,124.98 +18680.0,item out of stock,2020-03-05 15:17:32.000Z, ,"['886924']", , , ,0.28,449.0 +18681.0,pick item,2020-03-05 15:25:11.000Z, ,"['886904']", , , ,0.28,89.99 +18682.0,pick item,2020-03-05 15:49:46.000Z, ,"['886921']", , , ,0.495,129.0 +18683.0,pick item,2020-03-05 15:52:17.000Z, ,"['886861']", , , ,0.172,699.0 +18684.0,pick item,2020-03-05 16:00:00.000Z, ,"['886910']", , , ,0.28,449.0 +18685.0,package delivered,2020-03-05 16:01:12.000Z, , , ,"['661093']", ,16.455,19503.92 +18686.0,item out of stock,2020-03-05 16:02:30.000Z, ,"['886871']", , , ,0.483,495.0 +18687.0,pay order,2020-03-05 16:15:54.000Z, , ,"['991685']", , ,1.28,154.99 +18688.0,pick item,2020-03-05 16:16:03.000Z, ,"['886918']", , , ,0.172,699.0 +18689.0,reorder item,2020-03-05 16:23:43.000Z, ,"['886871']", , , ,0.483,495.0 +18690.0,package delivered,2020-03-05 16:29:11.000Z, , , ,"['661090']", ,7.576,6391.96 +18691.0,pick item,2020-03-05 16:38:57.000Z, ,"['886908']", , , ,0.28,89.99 +18692.0,pick item,2020-03-05 16:41:15.000Z, ,"['886928']", , , ,0.2,39.99 +18693.0,package delivered,2020-03-05 16:41:17.000Z, , , ,"['661083']", ,3.848,2572.99 +18694.0,place order,2020-03-05 16:41:19.000Z, ,"['886930','886931']","['991692']", , ,1.3630000000000002,1193.99 +18695.0,pick item,2020-03-05 16:50:16.000Z, ,"['886829']", , , ,0.21,529.0 +18696.0,pick item,2020-03-05 17:02:44.000Z, ,"['886712']", , , ,0.28,449.0 +18697.0,package delivered,2020-03-05 18:02:21.000Z, , , ,"['661089']", ,4.238,4114.98 +18698.0,place order,2020-03-05 18:43:32.000Z, ,"['886935','886932','886933','886936','886934']","['991693']", , ,2.43,2601.98 +18699.0,reorder item,2020-03-05 19:01:54.000Z, ,"['886872']", , , ,0.495,129.0 +18700.0,pick item,2020-03-05 20:52:09.000Z, ,"['886705']", , , ,0.88,89.99 +18701.0,place order,2020-03-05 22:06:39.000Z, ,"['886938','886937','886939']","['991694']", , ,2.316,3403.99 +18702.0,package delivered,2020-03-06 07:51:06.000Z, , , ,"['661088']", ,7.2189999999999985,4443.94 +18703.0,confirm order,2020-03-06 07:58:24.000Z, , ,"['991694']", , ,2.316,3403.99 +18704.0,place order,2020-03-06 07:59:33.000Z, ,"['886943','886945','886940','886941','886942','886944']","['991695']", , ,2.721,1542.96 +18705.0,pick item,2020-03-06 08:11:22.000Z, ,"['886773']", , , ,0.483,495.0 +18706.0,pick item,2020-03-06 08:12:43.000Z, ,"['886917']", , , ,0.188,1149.0 +18707.0,pick item,2020-03-06 08:14:01.000Z, ,"['886925']", , , ,1.28,149.99 +18708.0,item out of stock,2020-03-06 08:16:17.000Z, ,"['886926']", , , ,0.38,29.99 +18709.0,pick item,2020-03-06 08:38:44.000Z, ,"['886794']", , , ,0.495,129.0 +18710.0,pick item,2020-03-06 08:46:45.000Z, ,"['886937']", , , ,0.78,99.99 +18711.0,pick item,2020-03-06 08:53:37.000Z, ,"['886730']", , , ,0.78,99.99 +18712.0,send package,2020-03-06 08:53:41.000Z, , , ,"['661091']", ,2.833,3728.99 +18713.0,pick item,2020-03-06 08:56:55.000Z, ,"['886850']", , , ,0.483,79.99 +18714.0,reorder item,2020-03-06 09:14:26.000Z, ,"['886852']", , , ,0.28,449.0 +18715.0,confirm order,2020-03-06 09:26:25.000Z, , ,"['991691']", , ,0.6829999999999999,124.98 +18716.0,pay order,2020-03-06 09:34:09.000Z, , ,"['991589']", , ,2.16,244.98 +18717.0,pick item,2020-03-06 09:38:13.000Z, ,"['886909']", , , ,0.2,39.99 +18718.0,item out of stock,2020-03-06 09:40:07.000Z, ,"['886939']", , , ,1.37,2500.0 +18719.0,pick item,2020-03-06 09:45:39.000Z, ,"['886852']", , , ,0.28,449.0 +18720.0,create package,2020-03-06 09:45:39.000Z, ,"['886862','886863','886833','886830','886832','886861']", ,"['661094']", ,3.235,2583.97 +18721.0,item out of stock,2020-03-06 09:54:17.000Z, ,"['886916']", , , ,0.495,129.0 +18722.0,confirm order,2020-03-06 10:08:27.000Z, , ,"['991686']", , ,1.206,1831.98 +18723.0,confirm order,2020-03-06 10:16:03.000Z, , ,"['991687']", , ,2.4,1949.99 +18724.0,place order,2020-03-06 10:19:07.000Z, ,"['886946','886947']","['991696']", , ,0.42,1063.0 +18725.0,pick item,2020-03-06 10:20:58.000Z, ,"['886767']", , , ,0.21,529.0 +18726.0,pick item,2020-03-06 10:36:56.000Z, ,"['886896']", , , ,0.495,129.0 +18727.0,pick item,2020-03-06 10:44:08.000Z, ,"['886903']", , , ,0.188,1149.0 +18728.0,pick item,2020-03-06 11:12:56.000Z, ,"['886360']", , , ,0.78,99.99 +18729.0,reorder item,2020-03-06 11:26:41.000Z, ,"['886834']", , , ,0.98,129.99 +18730.0,send package,2020-03-06 11:34:15.000Z, , , ,"['661092']", ,0.79,598.98 +18731.0,pick item,2020-03-06 11:50:09.000Z, ,"['886915']", , , ,0.21,529.0 +18732.0,place order,2020-03-06 11:58:02.000Z, ,"['886950','886948','886949']","['991697']", , ,0.92,969.99 +18733.0,reorder item,2020-03-06 12:11:18.000Z, ,"['886923']", , , ,0.172,699.0 +18734.0,failed delivery,2020-03-06 12:36:30.000Z, , , ,"['661092']", ,0.79,598.98 +18735.0,pick item,2020-03-06 12:38:05.000Z, ,"['886905']", , , ,1.28,149.99 +18736.0,create package,2020-03-06 12:38:05.000Z, ,"['886761']", ,"['661095']", ,0.483,495.0 +18737.0,pick item,2020-03-06 12:48:43.000Z, ,"['886900']", , , ,0.88,89.99 +18738.0,create package,2020-03-06 12:48:43.000Z, ,"['886883','886882','886640']", ,"['661096']", ,0.8859999999999999,1724.0 +18739.0,item out of stock,2020-03-06 12:57:01.000Z, ,"['886922']", , , ,0.28,449.0 +18740.0,pick item,2020-03-06 13:26:14.000Z, ,"['886259']", , , ,0.495,129.0 +18741.0,pick item,2020-03-06 13:41:09.000Z, ,"['886815']", , , ,1.37,2500.0 +18742.0,confirm order,2020-03-06 13:43:36.000Z, , ,"['991692']", , ,1.3630000000000002,1193.99 +18743.0,pay order,2020-03-06 13:59:06.000Z, , ,"['991542']", , ,2.084,4446.99 +18744.0,pick item,2020-03-06 14:00:15.000Z, ,"['886943']", , , ,0.28,89.99 +18745.0,create package,2020-03-06 14:00:15.000Z, ,"['886907','886850','886909','886908','886733','886764','886645','886910','886852','886899','886900','886898','886800']", ,"['661097']", ,6.492000000000001,2955.91 +18746.0,pick item,2020-03-06 14:05:55.000Z, ,"['886944']", , , ,0.78,99.99 +18747.0,pay order,2020-03-06 14:15:09.000Z, , ,"['991694']", , ,2.316,3403.99 +18748.0,place order,2020-03-06 14:15:51.000Z, ,"['886954','886952','886953','886951']","['991698']", , ,1.889,3174.0 +18749.0,pick item,2020-03-06 14:33:45.000Z, ,"['886949']", , , ,0.2,39.99 +18750.0,pay order,2020-03-06 14:37:11.000Z, , ,"['991667']", , ,1.998,2338.98 +18751.0,pick item,2020-03-06 14:43:23.000Z, ,"['886911']", , , ,0.21,529.0 +18752.0,reorder item,2020-03-06 14:57:44.000Z, ,"['886924']", , , ,0.28,449.0 +18753.0,confirm order,2020-03-06 15:02:29.000Z, , ,"['991690']", , ,2.392,1781.98 +18754.0,package delivered,2020-03-06 15:04:00.000Z, , , ,"['661092']", ,0.79,598.98 +18755.0,pick item,2020-03-06 15:09:50.000Z, ,"['886938']", , , ,0.166,799.0 +18756.0,confirm order,2020-03-06 15:17:56.000Z, , ,"['991696']", , ,0.42,1063.0 +18757.0,pick item,2020-03-06 15:25:04.000Z, ,"['886817']", , , ,0.166,799.0 +18758.0,pick item,2020-03-06 15:28:06.000Z, ,"['886954']", , , ,0.483,1099.0 +18759.0,pick item,2020-03-06 15:29:07.000Z, ,"['886951']", , , ,0.44,476.0 +18760.0,send package,2020-03-06 15:34:20.000Z, , , ,"['661097']", ,6.492000000000001,2955.91 +18761.0,package delivered,2020-03-06 15:43:00.000Z, , , ,"['661097']", ,6.492000000000001,2955.91 +18762.0,confirm order,2020-03-06 15:43:46.000Z, , ,"['991697']", , ,0.92,969.99 +18763.0,place order,2020-03-06 15:51:30.000Z, ,"['886957','886955','886956','886958','886959','886960']","['991699']", , ,4.391,2142.96 +18764.0,pick item,2020-03-06 15:57:36.000Z, ,"['886931']", , , ,0.88,89.99 +18765.0,confirm order,2020-03-06 16:12:20.000Z, , ,"['991698']", , ,1.889,3174.0 +18766.0,pay order,2020-03-06 16:14:44.000Z, , ,"['991654']", , ,1.845,1857.99 +18767.0,item out of stock,2020-03-06 16:18:23.000Z, ,"['886952']", , , ,0.483,495.0 +18768.0,send package,2020-03-06 16:18:53.000Z, , , ,"['661096']", ,0.8859999999999999,1724.0 +18769.0,confirm order,2020-03-06 16:22:50.000Z, , ,"['991695']", , ,2.721,1542.96 +18770.0,pay order,2020-03-06 16:27:15.000Z, , ,"['991623']", , ,4.42,534.96 +18771.0,item out of stock,2020-03-06 16:49:37.000Z, ,"['886929']", , , ,0.483,79.99 +18772.0,send package,2020-03-06 17:02:12.000Z, , , ,"['661095']", ,0.483,495.0 +18773.0,send package,2020-03-06 17:56:51.000Z, , , ,"['661094']", ,3.235,2583.97 +18774.0,place order,2020-03-06 18:02:47.000Z, ,"['886963','886962','886961','886964']","['991700']", , ,1.7280000000000002,1822.98 +18775.0,item out of stock,2020-03-06 18:03:21.000Z, ,"['886827']", , , ,0.28,89.99 +18776.0,pick item,2020-03-06 18:31:40.000Z, ,"['886930']", , , ,0.483,1099.0 +18777.0,confirm order,2020-03-06 18:38:21.000Z, , ,"['991682']", , ,3.033,1356.99 +18778.0,pick item,2020-03-06 18:57:09.000Z, ,"['886948']", , , ,0.28,449.0 +18779.0,pay order,2020-03-06 19:51:56.000Z, , ,"['991634']", , ,4.558,6262.98 +18780.0,place order,2020-03-06 20:45:09.000Z, ,"['886965','886968','886966','886967']","['991701']", , ,1.064,2328.0 +18781.0,pick item,2020-03-06 20:51:40.000Z, ,"['886936']", , , ,0.98,129.99 +18782.0,payment reminder,2020-03-07 08:39:40.000Z, , ,"['991230']", , ,2.426,1103.98 +18783.0,place order,2020-03-07 13:30:48.000Z, ,"['886974','886976','886971','886972','886973','886969','886977','886975','886970']","['991702']", , ,4.5760000000000005,4608.98 +18784.0,payment reminder,2020-03-08 10:47:10.000Z, , ,"['991582']", , ,6.5760000000000005,8442.97 +18785.0,place order,2020-03-08 13:55:30.000Z, ,"['886979','886978','886980','886981']","['991703']", , ,2.468,1911.99 +18786.0,payment reminder,2020-03-08 16:52:23.000Z, , ,"['991580']", , ,0.446,1253.0 +18787.0,place order,2020-03-09 07:02:54.000Z, ,"['886985','886984','886982','886983']","['991704']", , ,3.555,3362.99 +18788.0,confirm order,2020-03-09 07:21:30.000Z, , ,"['991688']", , ,1.62,1972.98 +18789.0,item out of stock,2020-03-09 08:01:48.000Z, ,"['886870']", , , ,0.172,699.0 +18790.0,confirm order,2020-03-09 08:10:04.000Z, , ,"['991699']", , ,4.391,2142.96 +18791.0,item out of stock,2020-03-09 08:20:54.000Z, ,"['886970']", , , ,0.495,129.0 +18792.0,pick item,2020-03-09 08:23:25.000Z, ,"['886902']", , , ,0.188,1149.0 +18793.0,package delivered,2020-03-09 08:28:02.000Z, , , ,"['661096']", ,0.8859999999999999,1724.0 +18794.0,pay order,2020-03-09 08:41:13.000Z, , ,"['991651']", , ,6.752999999999999,8726.96 +18795.0,pick item,2020-03-09 08:42:56.000Z, ,"['886275']", , , ,0.495,129.0 +18796.0,create package,2020-03-09 08:42:56.000Z, ,"['886539','886905','886794','886797']", ,"['661098']", ,2.415,794.98 +18797.0,pay order,2020-03-09 08:43:21.000Z, , ,"['991547']", , ,2.423,1383.97 +18798.0,pick item,2020-03-09 08:44:41.000Z, ,"['886977']", , , ,0.483,79.99 +18799.0,place order,2020-03-09 08:54:08.000Z, ,"['886987','886990','886989','886986','886988','886991','886992']","['991705']", , ,4.51,3150.95 +18800.0,reorder item,2020-03-09 09:13:46.000Z, ,"['886716']", , , ,1.37,2500.0 +18801.0,pick item,2020-03-09 09:16:16.000Z, ,"['886975']", , , ,1.25,2200.0 +18802.0,pick item,2020-03-09 09:18:18.000Z, ,"['886973']", , , ,0.483,495.0 +18803.0,pick item,2020-03-09 09:51:17.000Z, ,"['886984']", , , ,0.495,129.0 +18804.0,create package,2020-03-09 09:51:17.000Z, ,"['886705','886973','886977','886704','886975','886685']", ,"['661099']", ,4.6560000000000015,3104.96 +18805.0,confirm order,2020-03-09 09:53:07.000Z, , ,"['991700']", , ,1.7280000000000002,1822.98 +18806.0,pick item,2020-03-09 10:12:36.000Z, ,"['886966']", , , ,0.28,449.0 +18807.0,pick item,2020-03-09 10:12:49.000Z, ,"['886920']", , , ,0.88,89.99 +18808.0,package delivered,2020-03-09 10:17:47.000Z, , , ,"['661091']", ,2.833,3728.99 +18809.0,pick item,2020-03-09 10:20:12.000Z, ,"['886311']", , , ,1.25,2200.0 +18810.0,reorder item,2020-03-09 10:29:53.000Z, ,"['886756']", , , ,0.98,129.99 +18811.0,item out of stock,2020-03-09 10:31:58.000Z, ,"['886821']", , , ,0.483,79.99 +18812.0,pay order,2020-03-09 10:47:37.000Z, , ,"['991698']", , ,1.889,3174.0 +18813.0,confirm order,2020-03-09 10:51:17.000Z, , ,"['991702']", , ,4.5760000000000005,4608.98 +18814.0,confirm order,2020-03-09 11:04:14.000Z, , ,"['991703']", , ,2.468,1911.99 +18815.0,place order,2020-03-09 11:08:04.000Z, ,"['886993','886994']","['991706']", , ,0.693,1029.0 +18816.0,item out of stock,2020-03-09 11:16:00.000Z, ,"['886934']", , , ,0.188,1149.0 +18817.0,reorder item,2020-03-09 11:20:36.000Z, ,"['886939']", , , ,1.37,2500.0 +18818.0,confirm order,2020-03-09 11:33:21.000Z, , ,"['991705']", , ,4.51,3150.95 +18819.0,pick item,2020-03-09 11:48:58.000Z, ,"['886963']", , , ,0.28,89.99 +18820.0,pick item,2020-03-09 12:06:59.000Z, ,"['886530']", , , ,0.172,699.0 +18821.0,confirm order,2020-03-09 12:11:09.000Z, , ,"['991693']", , ,2.43,2601.98 +18822.0,pick item,2020-03-09 12:11:12.000Z, ,"['886831']", , , ,1.25,2200.0 +18823.0,create package,2020-03-09 12:11:12.000Z, ,"['886954','886951','886857','886925','886817','886854','886858']", ,"['661100']", ,5.102,5193.97 +18824.0,pick item,2020-03-09 12:30:18.000Z, ,"['886959']", , , ,0.98,129.99 +18825.0,place order,2020-03-09 12:35:55.000Z, ,"['886996','886995','886997']","['991707']", , ,0.662,1682.0 +18826.0,pick item,2020-03-09 12:40:01.000Z, ,"['886808']", , , ,1.37,2500.0 +18827.0,item out of stock,2020-03-09 12:51:19.000Z, ,"['886912']", , , ,0.495,129.0 +18828.0,pick item,2020-03-09 12:54:51.000Z, ,"['886974']", , , ,0.495,129.0 +18829.0,item out of stock,2020-03-09 13:05:30.000Z, ,"['886972']", , , ,0.44,476.0 +18830.0,pick item,2020-03-09 13:06:29.000Z, ,"['886967']", , , ,0.172,699.0 +18831.0,send package,2020-03-09 13:12:38.000Z, , , ,"['661100']", ,5.102,5193.97 +18832.0,package delivered,2020-03-09 13:19:08.000Z, , , ,"['661094']", ,3.235,2583.97 +18833.0,send package,2020-03-09 13:45:31.000Z, , , ,"['661098']", ,2.415,794.98 +18834.0,pick item,2020-03-09 13:50:40.000Z, ,"['886941']", , , ,0.495,129.0 +18835.0,pick item,2020-03-09 14:06:25.000Z, ,"['886981']", , , ,0.495,129.0 +18836.0,reorder item,2020-03-09 14:18:23.000Z, ,"['886827']", , , ,0.28,89.99 +18837.0,confirm order,2020-03-09 14:21:12.000Z, , ,"['991704']", , ,3.555,3362.99 +18838.0,pay order,2020-03-09 14:21:24.000Z, , ,"['991700']", , ,1.7280000000000002,1822.98 +18839.0,pick item,2020-03-09 14:25:08.000Z, ,"['886845']", , , ,0.88,89.99 +18840.0,create package,2020-03-09 14:25:08.000Z, ,"['886749','886943','886941','886959','886944']", ,"['661101']", ,2.735,488.96 +18841.0,place order,2020-03-09 14:31:38.000Z, ,"['887001','887000','886998','886999']","['991708']", , ,1.46,633.97 +18842.0,pick item,2020-03-09 14:38:05.000Z, ,"['886887']", , , ,1.37,2500.0 +18843.0,pay order,2020-03-09 14:38:47.000Z, , ,"['991686']", , ,1.206,1831.98 +18844.0,pay order,2020-03-09 14:44:18.000Z, , ,"['991682']", , ,3.033,1356.99 +18845.0,pick item,2020-03-09 14:45:05.000Z, ,"['886746']", , , ,1.37,2500.0 +18846.0,pick item,2020-03-09 14:49:47.000Z, ,"['886189']", , , ,0.172,699.0 +18847.0,pick item,2020-03-09 14:54:43.000Z, ,"['886728']", , , ,0.88,89.99 +18848.0,item out of stock,2020-03-09 15:17:58.000Z, ,"['886987']", , , ,0.28,89.99 +18849.0,pick item,2020-03-09 15:45:55.000Z, ,"['886955']", , , ,0.98,129.99 +18850.0,create package,2020-03-09 15:45:55.000Z, ,"['886133','886259']", ,"['661102']", ,0.935,605.0 +18851.0,pick item,2020-03-09 15:51:17.000Z, ,"['886980']", , , ,1.28,149.99 +18852.0,pick item,2020-03-09 16:00:45.000Z, ,"['886878']", , , ,0.495,129.0 +18853.0,create package,2020-03-09 16:00:45.000Z, ,"['886815','886878','886880','886813','886881','886921']", ,"['661103']", ,5.803,3652.98 +18854.0,pick item,2020-03-09 16:18:52.000Z, ,"['886992']", , , ,0.2,39.99 +18855.0,place order,2020-03-09 16:23:03.000Z, ,"['887002','887003','887006','887007','887004','887005']","['991709']", , ,3.095,3825.99 +18856.0,pay order,2020-03-09 16:24:53.000Z, , ,"['991679']", , ,1.838,3743.99 +18857.0,item out of stock,2020-03-09 16:26:42.000Z, ,"['886976']", , , ,0.28,89.99 +18858.0,confirm order,2020-03-09 16:32:02.000Z, , ,"['991708']", , ,1.46,633.97 +18859.0,pick item,2020-03-09 16:37:27.000Z, ,"['886506']", , , ,0.44,476.0 +18860.0,item out of stock,2020-03-09 16:38:00.000Z, ,"['886996']", , , ,0.172,699.0 +18861.0,pick item,2020-03-09 16:38:50.000Z, ,"['886964']", , , ,0.188,1149.0 +18862.0,package delivered,2020-03-09 16:47:24.000Z, , , ,"['661098']", ,2.415,794.98 +18863.0,confirm order,2020-03-09 16:58:34.000Z, , ,"['991706']", , ,0.693,1029.0 +18864.0,item out of stock,2020-03-09 17:00:37.000Z, ,"['886989']", , , ,0.28,89.99 +18865.0,package delivered,2020-03-09 17:23:44.000Z, , , ,"['661100']", ,5.102,5193.97 +18866.0,pick item,2020-03-09 17:56:06.000Z, ,"['886942']", , , ,0.483,1099.0 +18867.0,pay order,2020-03-09 17:58:25.000Z, , ,"['991676']", , ,3.218,3457.99 +18868.0,place order,2020-03-09 18:05:53.000Z, ,"['887012','887010','887013','887009','887008','887011']","['991710']", , ,3.986,2737.98 +18869.0,pick item,2020-03-09 18:41:47.000Z, ,"['886935']", , , ,0.172,699.0 +18870.0,pick item,2020-03-09 20:33:26.000Z, ,"['886753']", , , ,0.483,495.0 +18871.0,create package,2020-03-09 20:33:26.000Z, ,"['886893','886773','886887','886896']", ,"['661104']", ,2.8310000000000004,3619.0 +18872.0,pick item,2020-03-09 20:39:31.000Z, ,"['886983']", , , ,0.21,529.0 +18873.0,place order,2020-03-09 20:51:21.000Z, ,"['887016','887014','887015','887017']","['991711']", , ,2.6060000000000003,1133.97 +18874.0,reorder item,2020-03-09 21:27:24.000Z, ,"['886876']", , , ,0.188,1149.0 +18875.0,create package,2020-03-09 23:00:00.000Z, ,"['886730','886825','886829']", ,"['661105']", ,1.178,1777.99 +18876.0,place order,2020-03-10 06:26:00.000Z, ,"['887019','887020','887021','887018']","['991712']", , ,3.42,364.96 +18877.0,item out of stock,2020-03-10 07:18:06.000Z, ,"['886993']", , , ,0.21,529.0 +18878.0,pick item,2020-03-10 07:26:18.000Z, ,"['887008']", , , ,1.48,199.99 +18879.0,confirm order,2020-03-10 07:47:37.000Z, , ,"['991710']", , ,3.986,2737.98 +18880.0,confirm order,2020-03-10 07:54:22.000Z, , ,"['991709']", , ,3.095,3825.99 +18881.0,pick item,2020-03-10 07:54:42.000Z, ,"['886986']", , , ,0.78,99.99 +18882.0,pick item,2020-03-10 07:54:57.000Z, ,"['886913']", , , ,0.78,99.99 +18883.0,confirm order,2020-03-10 08:07:13.000Z, , ,"['991707']", , ,0.662,1682.0 +18884.0,item out of stock,2020-03-10 08:08:20.000Z, ,"['887018']", , , ,0.38,29.99 +18885.0,reorder item,2020-03-10 08:13:04.000Z, ,"['886989']", , , ,0.28,89.99 +18886.0,pay order,2020-03-10 08:29:38.000Z, , ,"['991680']", , ,3.29,3180.99 +18887.0,pick item,2020-03-10 08:36:24.000Z, ,"['886961']", , , ,0.28,449.0 +18888.0,pick item,2020-03-10 08:37:21.000Z, ,"['887011']", , , ,0.21,529.0 +18889.0,package delivered,2020-03-10 08:39:02.000Z, , , ,"['661095']", ,0.483,495.0 +18890.0,payment reminder,2020-03-10 08:44:19.000Z, , ,"['991587']", , ,1.643,679.98 +18891.0,reorder item,2020-03-10 09:02:51.000Z, ,"['886976']", , , ,0.28,89.99 +18892.0,reorder item,2020-03-10 09:07:36.000Z, ,"['886972']", , , ,0.44,476.0 +18893.0,confirm order,2020-03-10 09:09:22.000Z, , ,"['991712']", , ,3.42,364.96 +18894.0,place order,2020-03-10 09:12:24.000Z, ,"['887025','887026','887023','887022','887024']","['991713']", , ,4.793,3993.97 +18895.0,reorder item,2020-03-10 09:13:46.000Z, ,"['886922']", , , ,0.28,449.0 +18896.0,item out of stock,2020-03-10 09:14:52.000Z, ,"['886965']", , , ,0.172,699.0 +18897.0,send package,2020-03-10 09:18:39.000Z, , , ,"['661099']", ,4.6560000000000015,3104.96 +18898.0,pick item,2020-03-10 09:30:13.000Z, ,"['886869']", , , ,1.48,199.99 +18899.0,create package,2020-03-10 09:30:13.000Z, ,"['886917','886936','886891','886935','886919','886892','886920','886918','886938','886937']", ,"['661106']", ,4.698,3835.94 +18900.0,reorder item,2020-03-10 09:52:53.000Z, ,"['886916']", , , ,0.495,129.0 +18901.0,pick item,2020-03-10 09:54:39.000Z, ,"['886860']", , , ,0.78,99.99 +18902.0,pay order,2020-03-10 09:59:16.000Z, , ,"['991621']", , ,3.4730000000000003,3496.97 +18903.0,pick item,2020-03-10 09:59:26.000Z, ,"['886985']", , , ,1.48,199.99 +18904.0,pay order,2020-03-10 10:00:04.000Z, , ,"['991655']", , ,4.206,2008.97 +18905.0,send package,2020-03-10 10:02:29.000Z, , , ,"['661102']", ,0.935,605.0 +18906.0,pick item,2020-03-10 10:09:36.000Z, ,"['886953']", , , ,0.483,1099.0 +18907.0,send package,2020-03-10 10:12:57.000Z, , , ,"['661101']", ,2.735,488.96 +18908.0,place order,2020-03-10 10:44:35.000Z, ,"['887027','887028','887029']","['991714']", , ,2.446,1194.99 +18909.0,pick item,2020-03-10 10:47:28.000Z, ,"['887027']", , , ,1.48,199.99 +18910.0,item out of stock,2020-03-10 11:04:05.000Z, ,"['887013']", , , ,0.166,799.0 +18911.0,pick item,2020-03-10 11:04:27.000Z, ,"['886769']", , , ,0.172,699.0 +18912.0,pick item,2020-03-10 11:13:47.000Z, ,"['886978']", , , ,0.21,529.0 +18913.0,send package,2020-03-10 11:18:37.000Z, , , ,"['661104']", ,2.8310000000000004,3619.0 +18914.0,item out of stock,2020-03-10 11:21:34.000Z, ,"['887017']", , , ,0.28,89.99 +18915.0,pick item,2020-03-10 11:33:08.000Z, ,"['886901']", , , ,0.483,495.0 +18916.0,send package,2020-03-10 11:40:23.000Z, , , ,"['661105']", ,1.178,1777.99 +18917.0,pick item,2020-03-10 11:48:21.000Z, ,"['886558']", , , ,1.25,2200.0 +18918.0,item out of stock,2020-03-10 11:56:28.000Z, ,"['887019']", , , ,0.88,89.99 +18919.0,confirm order,2020-03-10 11:59:19.000Z, , ,"['991713']", , ,4.793,3993.97 +18920.0,reorder item,2020-03-10 12:14:05.000Z, ,"['886929']", , , ,0.483,79.99 +18921.0,place order,2020-03-10 12:48:57.000Z, ,"['887034','887030','887033','887032','887031']","['991715']", , ,3.963,1909.97 +18922.0,pick item,2020-03-10 13:00:34.000Z, ,"['887026']", , , ,0.98,129.99 +18923.0,pay order,2020-03-10 13:07:01.000Z, , ,"['991675']", , ,1.652,903.99 +18924.0,send package,2020-03-10 13:15:22.000Z, , , ,"['661103']", ,5.803,3652.98 +18925.0,item out of stock,2020-03-10 13:26:12.000Z, ,"['887024']", , , ,0.98,129.99 +18926.0,item out of stock,2020-03-10 13:42:30.000Z, ,"['887016']", , , ,0.88,89.99 +18927.0,pay order,2020-03-10 13:58:43.000Z, , ,"['991708']", , ,1.46,633.97 +18928.0,pick item,2020-03-10 14:03:18.000Z, ,"['886916']", , , ,0.495,129.0 +18929.0,create package,2020-03-10 14:03:18.000Z, ,"['886845','886767','886904','886189','886903','886981','886769','886949','886275','886948','886902','886978','886980','886712']", ,"['661107']", ,5.33,6279.96 +18930.0,pay order,2020-03-10 14:05:38.000Z, , ,"['991689']", , ,0.775,583.0 +18931.0,pick item,2020-03-10 14:08:43.000Z, ,"['887020']", , , ,0.88,89.99 +18932.0,payment reminder,2020-03-10 14:17:47.000Z, , ,"['991598']", , ,3.313,6333.0 +18933.0,package delivered,2020-03-10 14:18:54.000Z, , , ,"['661103']", ,5.803,3652.98 +18934.0,pick item,2020-03-10 14:23:34.000Z, ,"['886962']", , , ,0.98,129.99 +18935.0,confirm order,2020-03-10 14:26:37.000Z, , ,"['991715']", , ,3.963,1909.97 +18936.0,pay order,2020-03-10 14:28:47.000Z, , ,"['991707']", , ,0.662,1682.0 +18937.0,item out of stock,2020-03-10 14:29:51.000Z, ,"['886950']", , , ,0.44,476.0 +18938.0,pick item,2020-03-10 14:34:46.000Z, ,"['886947']", , , ,0.21,529.0 +18939.0,reorder item,2020-03-10 14:37:28.000Z, ,"['886987']", , , ,0.28,89.99 +18940.0,pay order,2020-03-10 14:46:16.000Z, , ,"['991690']", , ,2.392,1781.98 +18941.0,pick item,2020-03-10 14:46:20.000Z, ,"['887003']", , , ,0.483,495.0 +18942.0,package delivered,2020-03-10 14:53:29.000Z, , , ,"['661105']", ,1.178,1777.99 +18943.0,pick item,2020-03-10 14:53:36.000Z, ,"['886932']", , , ,0.88,89.99 +18944.0,place order,2020-03-10 14:57:42.000Z, ,"['887035','887037','887036','887038']","['991716']", , ,2.776,3163.98 +18945.0,send package,2020-03-10 14:57:48.000Z, , , ,"['661107']", ,5.33,6279.96 +18946.0,pick item,2020-03-10 15:03:48.000Z, ,"['886995']", , , ,0.28,449.0 +18947.0,package delivered,2020-03-10 15:04:14.000Z, , , ,"['661104']", ,2.8310000000000004,3619.0 +18948.0,send package,2020-03-10 15:11:43.000Z, , , ,"['661106']", ,4.698,3835.94 +18949.0,confirm order,2020-03-10 15:30:06.000Z, , ,"['991701']", , ,1.064,2328.0 +18950.0,reorder item,2020-03-10 15:40:42.000Z, ,"['886952']", , , ,0.483,495.0 +18951.0,pay order,2020-03-10 15:48:55.000Z, , ,"['991624']", , ,1.215,1059.0 +18952.0,pick item,2020-03-10 16:05:13.000Z, ,"['887002']", , , ,0.166,799.0 +18953.0,confirm order,2020-03-10 16:22:56.000Z, , ,"['991714']", , ,2.446,1194.99 +18954.0,item out of stock,2020-03-10 16:25:21.000Z, ,"['886960']", , , ,0.483,79.99 +18955.0,reorder item,2020-03-10 16:26:43.000Z, ,"['886970']", , , ,0.495,129.0 +18956.0,failed delivery,2020-03-10 16:37:13.000Z, , , ,"['661102']", ,0.935,605.0 +18957.0,reorder item,2020-03-10 16:52:36.000Z, ,"['887019']", , , ,0.88,89.99 +18958.0,pick item,2020-03-10 16:59:55.000Z, ,"['887033']", , , ,0.44,476.0 +18959.0,pick item,2020-03-10 17:08:55.000Z, ,"['886958']", , , ,1.48,199.99 +18960.0,place order,2020-03-10 17:15:11.000Z, ,"['887040','887039','887041']","['991717']", , ,1.473,1732.99 +18961.0,pick item,2020-03-10 17:15:17.000Z, ,"['887009']", , , ,0.21,529.0 +18962.0,confirm order,2020-03-10 17:18:00.000Z, , ,"['991717']", , ,1.473,1732.99 +18963.0,pay order,2020-03-10 17:27:53.000Z, , ,"['991717']", , ,1.473,1732.99 +18964.0,failed delivery,2020-03-10 17:36:33.000Z, , , ,"['661099']", ,4.6560000000000015,3104.96 +18965.0,confirm order,2020-03-10 18:31:43.000Z, , ,"['991711']", , ,2.6060000000000003,1133.97 +18966.0,pick item,2020-03-10 19:07:42.000Z, ,"['887005']", , , ,0.188,1149.0 +18967.0,place order,2020-03-10 19:25:08.000Z, ,"['887042','887043','887044']","['991718']", , ,0.6779999999999999,1772.99 +18968.0,pick item,2020-03-10 19:46:05.000Z, ,"['886550']", , , ,0.495,129.0 +18969.0,pay order,2020-03-10 20:30:57.000Z, , ,"['991669']", , ,1.846,1043.98 +18970.0,pick item,2020-03-10 20:55:21.000Z, ,"['886971']", , , ,0.44,476.0 +18971.0,place order,2020-03-10 22:48:42.000Z, ,"['887046','887049','887050','887045','887051','887047','887048']","['991719']", , ,4.508,6077.98 +18972.0,reorder item,2020-03-11 07:59:55.000Z, ,"['886821']", , , ,0.483,79.99 +18973.0,pay order,2020-03-11 08:06:18.000Z, , ,"['991674']", , ,5.292999999999998,3993.97 +18974.0,pick item,2020-03-11 08:14:13.000Z, ,"['886990']", , , ,0.44,476.0 +18975.0,create package,2020-03-11 08:14:13.000Z, ,"['886984','886746','886983','886985','886964','886963','886928','886962','886961']", ,"['661108']", ,5.483,5215.96 +18976.0,package delivered,2020-03-11 08:24:40.000Z, , , ,"['661107']", ,5.33,6279.96 +18977.0,pick item,2020-03-11 08:24:42.000Z, ,"['887032']", , , ,0.483,1099.0 +18978.0,item out of stock,2020-03-11 08:42:12.000Z, ,"['886997']", , , ,0.21,529.0 +18979.0,place order,2020-03-11 08:49:22.000Z, ,"['887052','887055','887056','887054','887053','887057']","['991720']", , ,4.132,1579.96 +18980.0,reorder item,2020-03-11 08:56:03.000Z, ,"['886950']", , , ,0.44,476.0 +18981.0,pick item,2020-03-11 09:05:46.000Z, ,"['887043']", , , ,0.188,1149.0 +18982.0,pick item,2020-03-11 09:23:39.000Z, ,"['887030']", , , ,0.88,89.99 +18983.0,reorder item,2020-03-11 09:24:24.000Z, ,"['886996']", , , ,0.172,699.0 +18984.0,pick item,2020-03-11 09:26:15.000Z, ,"['887000']", , , ,0.2,39.99 +18985.0,pick item,2020-03-11 09:36:34.000Z, ,"['886752']", , , ,0.483,495.0 +18986.0,pick item,2020-03-11 09:36:42.000Z, ,"['887047']", , , ,0.44,476.0 +18987.0,package delivered,2020-03-11 09:42:00.000Z, , , ,"['661101']", ,2.735,488.96 +18988.0,pick item,2020-03-11 09:53:53.000Z, ,"['886933']", , , ,0.21,529.0 +18989.0,pay order,2020-03-11 09:59:49.000Z, , ,"['991695']", , ,2.721,1542.96 +18990.0,pick item,2020-03-11 10:00:14.000Z, ,"['886346']", , , ,0.2,39.99 +18991.0,pick item,2020-03-11 10:10:02.000Z, ,"['886989']", , , ,0.28,89.99 +18992.0,create package,2020-03-11 10:10:02.000Z, ,"['886930','887030','886360','886831','887033','886931','887032']", ,"['661109']", ,5.1960000000000015,5153.97 +18993.0,pay order,2020-03-11 10:15:33.000Z, , ,"['991677']", , ,3.329,3255.99 +18994.0,package delivered,2020-03-11 10:19:19.000Z, , , ,"['661106']", ,4.698,3835.94 +18995.0,pick item,2020-03-11 10:20:48.000Z, ,"['887045']", , , ,0.78,99.99 +18996.0,item out of stock,2020-03-11 10:28:04.000Z, ,"['887056']", , , ,1.28,149.99 +18997.0,pick item,2020-03-11 10:28:40.000Z, ,"['886866']", , , ,0.483,1099.0 +18998.0,pick item,2020-03-11 10:29:32.000Z, ,"['886853']", , , ,0.483,79.99 +18999.0,pick item,2020-03-11 10:37:24.000Z, ,"['886998']", , , ,0.78,99.99 +19000.0,pick item,2020-03-11 10:41:27.000Z, ,"['886799']", , , ,1.48,199.99 +19001.0,pick item,2020-03-11 10:44:14.000Z, ,"['887028']", , , ,0.483,495.0 +19002.0,reorder item,2020-03-11 10:52:39.000Z, ,"['886906']", , , ,0.166,799.0 +19003.0,reorder item,2020-03-11 10:54:42.000Z, ,"['886870']", , , ,0.172,699.0 +19004.0,place order,2020-03-11 10:58:31.000Z, ,"['887059','887058']","['991721']", , ,1.66,184.98 +19005.0,reorder item,2020-03-11 10:59:46.000Z, ,"['886965']", , , ,0.172,699.0 +19006.0,confirm order,2020-03-11 11:00:46.000Z, , ,"['991718']", , ,0.6779999999999999,1772.99 +19007.0,pick item,2020-03-11 11:03:29.000Z, ,"['886751']", , , ,0.78,99.99 +19008.0,create package,2020-03-11 11:03:29.000Z, ,"['886915','886728','886913','886916','886911']", ,"['661110']", ,2.575,1376.98 +19009.0,item out of stock,2020-03-11 11:07:04.000Z, ,"['887035']", , , ,1.25,2200.0 +19010.0,pick item,2020-03-11 11:11:02.000Z, ,"['887049']", , , ,0.172,699.0 +19011.0,pay order,2020-03-11 11:22:15.000Z, , ,"['991616']", , ,5.202999999999999,2757.94 +19012.0,reorder item,2020-03-11 11:24:37.000Z, ,"['886993']", , , ,0.21,529.0 +19013.0,pay order,2020-03-11 11:25:54.000Z, , ,"['991561']", , ,2.143,689.98 +19014.0,pick item,2020-03-11 11:39:37.000Z, ,"['886969']", , , ,0.21,529.0 +19015.0,failed delivery,2020-03-11 12:13:54.000Z, , , ,"['661102']", ,0.935,605.0 +19016.0,reorder item,2020-03-11 12:18:43.000Z, ,"['886934']", , , ,0.188,1149.0 +19017.0,reorder item,2020-03-11 12:53:24.000Z, ,"['886960']", , , ,0.483,79.99 +19018.0,pick item,2020-03-11 13:01:59.000Z, ,"['887022']", , , ,0.98,129.99 +19019.0,place order,2020-03-11 13:16:50.000Z, ,"['887063','887062','887061','887060']","['991722']", , ,0.924,1472.98 +19020.0,pick item,2020-03-11 13:25:08.000Z, ,"['887004']", , , ,1.28,149.99 +19021.0,failed delivery,2020-03-11 13:25:18.000Z, , , ,"['661102']", ,0.935,605.0 +19022.0,pick item,2020-03-11 13:34:07.000Z, ,"['886510']", , , ,0.28,449.0 +19023.0,create package,2020-03-11 13:34:07.000Z, ,"['886311','886966','886967']", ,"['661111']", ,1.702,3348.0 +19024.0,pay order,2020-03-11 13:47:54.000Z, , ,"['991699']", , ,4.391,2142.96 +19025.0,pick item,2020-03-11 13:48:29.000Z, ,"['886708']", , , ,0.78,99.99 +19026.0,pick item,2020-03-11 13:50:10.000Z, ,"['886999']", , , ,0.2,39.99 +19027.0,item out of stock,2020-03-11 13:51:49.000Z, ,"['887014']", , , ,0.166,799.0 +19028.0,pick item,2020-03-11 13:57:44.000Z, ,"['887023']", , , ,0.483,1099.0 +19029.0,create package,2020-03-11 13:57:44.000Z, ,"['886974','886971','886530','886969','886869']", ,"['661112']", ,2.797,2032.99 +19030.0,pick item,2020-03-11 14:03:41.000Z, ,"['886968']", , , ,0.44,476.0 +19031.0,pay order,2020-03-11 14:08:56.000Z, , ,"['991658']", , ,1.463,1233.99 +19032.0,payment reminder,2020-03-11 14:16:04.000Z, , ,"['991606']", , ,2.23,2334.99 +19033.0,pick item,2020-03-11 14:25:01.000Z, ,"['887039']", , , ,0.78,99.99 +19034.0,confirm order,2020-03-11 14:30:11.000Z, , ,"['991722']", , ,0.924,1472.98 +19035.0,confirm order,2020-03-11 14:43:42.000Z, , ,"['991716']", , ,2.776,3163.98 +19036.0,pick item,2020-03-11 14:46:42.000Z, ,"['886628']", , , ,0.28,449.0 +19037.0,send package,2020-03-11 14:48:03.000Z, , , ,"['661110']", ,2.575,1376.98 +19038.0,place order,2020-03-11 14:53:27.000Z, ,"['887064','887066','887065']","['991723']", , ,2.332,943.98 +19039.0,pick item,2020-03-11 15:00:01.000Z, ,"['887057']", , , ,0.98,129.99 +19040.0,reorder item,2020-03-11 15:07:57.000Z, ,"['887024']", , , ,0.98,129.99 +19041.0,pick item,2020-03-11 15:29:27.000Z, ,"['886716']", , , ,1.37,2500.0 +19042.0,create package,2020-03-11 15:29:27.000Z, ,"['886808','886506','886510']", ,"['661113']", ,2.09,3425.0 +19043.0,pick item,2020-03-11 15:33:31.000Z, ,"['886835']", , , ,0.483,1099.0 +19044.0,payment reminder,2020-03-11 15:39:59.000Z, , ,"['991491']", , ,2.327,1022.98 +19045.0,pick item,2020-03-11 15:43:00.000Z, ,"['886970']", , , ,0.495,129.0 +19046.0,pick item,2020-03-11 15:54:33.000Z, ,"['887001']", , , ,0.28,449.0 +19047.0,create package,2020-03-11 15:54:33.000Z, ,"['887001','887000','886955','887022','887043','886558','886998','886752','887004','886751','887005','886753','887049','887003','887045','886958','886999','887026','887023','887002','886942','887047']", ,"['661114']", ,13.539,11723.9 +19048.0,pick item,2020-03-11 15:58:54.000Z, ,"['886872']", , , ,0.495,129.0 +19049.0,package delivered,2020-03-11 16:13:05.000Z, , , ,"['661110']", ,2.575,1376.98 +19050.0,confirm order,2020-03-11 16:19:28.000Z, , ,"['991723']", , ,2.332,943.98 +19051.0,failed delivery,2020-03-11 16:24:19.000Z, , , ,"['661099']", ,4.6560000000000015,3104.96 +19052.0,pick item,2020-03-11 16:27:29.000Z, ,"['886945']", , , ,0.2,39.99 +19053.0,pick item,2020-03-11 16:28:48.000Z, ,"['886940']", , , ,0.483,79.99 +19054.0,pick item,2020-03-11 16:35:11.000Z, ,"['886956']", , , ,0.188,1149.0 +19055.0,reorder item,2020-03-11 16:41:14.000Z, ,"['887018']", , , ,0.38,29.99 +19056.0,place order,2020-03-11 17:06:41.000Z, ,"['887067','887071','887069','887068','887070']","['991724']", , ,2.638,2032.97 +19057.0,send package,2020-03-11 17:07:30.000Z, , , ,"['661112']", ,2.797,2032.99 +19058.0,pick item,2020-03-11 17:09:31.000Z, ,"['887044']", , , ,0.28,89.99 +19059.0,pick item,2020-03-11 17:27:49.000Z, ,"['887059']", , , ,0.38,29.99 +19060.0,pick item,2020-03-11 18:22:43.000Z, ,"['886524']", , , ,1.28,149.99 +19061.0,pick item,2020-03-11 18:42:38.000Z, ,"['887053']", , , ,0.88,89.99 +19062.0,pick item,2020-03-11 18:57:25.000Z, ,"['886965']", , , ,0.172,699.0 +19063.0,place order,2020-03-11 18:59:38.000Z, ,"['887075','887076','887074','887072','887073','887077']","['991725']", , ,3.377,4641.98 +19064.0,send package,2020-03-11 21:10:11.000Z, , , ,"['661113']", ,2.09,3425.0 +19065.0,place order,2020-03-11 22:38:51.000Z, ,"['887080','887079','887078']","['991726']", , ,1.946,709.98 +19066.0,item out of stock,2020-03-12 07:15:51.000Z, ,"['887010']", , , ,1.48,199.99 +19067.0,package delivered,2020-03-12 07:22:29.000Z, , , ,"['661113']", ,2.09,3425.0 +19068.0,package delivered,2020-03-12 07:29:53.000Z, , , ,"['661112']", ,2.797,2032.99 +19069.0,pick item,2020-03-12 07:42:16.000Z, ,"['887021']", , , ,1.28,149.99 +19070.0,confirm order,2020-03-12 08:05:23.000Z, , ,"['991724']", , ,2.638,2032.97 +19071.0,pick item,2020-03-12 08:10:43.000Z, ,"['887006']", , , ,0.483,1099.0 +19072.0,reorder item,2020-03-12 08:14:56.000Z, ,"['887013']", , , ,0.166,799.0 +19073.0,place order,2020-03-12 08:38:12.000Z, ,"['887081']","['991727']", , ,1.37,2505.0 +19074.0,package delivered,2020-03-12 08:45:57.000Z, , , ,"['661099']", ,4.6560000000000015,3104.96 +19075.0,confirm order,2020-03-12 08:54:12.000Z, , ,"['991726']", , ,1.946,709.98 +19076.0,reorder item,2020-03-12 09:04:38.000Z, ,"['887017']", , , ,0.28,89.99 +19077.0,pay order,2020-03-12 09:07:13.000Z, , ,"['991704']", , ,3.555,3362.99 +19078.0,reorder item,2020-03-12 09:07:29.000Z, ,"['887035']", , , ,1.25,2200.0 +19079.0,pick item,2020-03-12 09:16:41.000Z, ,"['887031']", , , ,1.28,149.99 +19080.0,pick item,2020-03-12 09:18:06.000Z, ,"['887042']", , , ,0.21,529.0 +19081.0,pick item,2020-03-12 09:22:32.000Z, ,"['887079']", , , ,0.483,79.99 +19082.0,pick item,2020-03-12 09:30:36.000Z, ,"['886923']", , , ,0.172,699.0 +19083.0,reorder item,2020-03-12 09:32:49.000Z, ,"['886926']", , , ,0.38,29.99 +19084.0,item out of stock,2020-03-12 09:44:06.000Z, ,"['887040']", , , ,0.483,1099.0 +19085.0,pick item,2020-03-12 09:55:59.000Z, ,"['887038']", , , ,0.166,799.0 +19086.0,pick item,2020-03-12 09:58:35.000Z, ,"['886982']", , , ,1.37,2500.0 +19087.0,pick item,2020-03-12 10:07:50.000Z, ,"['887017']", , , ,0.28,89.99 +19088.0,pick item,2020-03-12 10:09:41.000Z, ,"['887061']", , , ,0.172,699.0 +19089.0,place order,2020-03-12 10:36:11.000Z, ,"['887085','887083','887084','887082']","['991728']", , ,3.32,424.96 +19090.0,send package,2020-03-12 10:37:27.000Z, , , ,"['661108']", ,5.483,5215.96 +19091.0,pick item,2020-03-12 10:38:54.000Z, ,"['887083']", , , ,1.28,149.99 +19092.0,send package,2020-03-12 10:40:36.000Z, , , ,"['661109']", ,5.1960000000000015,5153.97 +19093.0,pay order,2020-03-12 10:52:07.000Z, , ,"['991688']", , ,1.62,1972.98 +19094.0,pick item,2020-03-12 11:00:05.000Z, ,"['886474']", , , ,0.28,449.0 +19095.0,payment reminder,2020-03-12 11:08:55.000Z, , ,"['991612']", , ,1.6,1019.99 +19096.0,pick item,2020-03-12 11:10:38.000Z, ,"['887048']", , , ,0.78,99.99 +19097.0,create package,2020-03-12 11:10:38.000Z, ,"['886990','886989','886986','886992']", ,"['661115']", ,1.7,705.97 +19098.0,item out of stock,2020-03-12 11:15:18.000Z, ,"['887036']", , , ,0.38,29.99 +19099.0,reorder item,2020-03-12 11:22:40.000Z, ,"['887014']", , , ,0.166,799.0 +19100.0,pick item,2020-03-12 11:28:19.000Z, ,"['887066']", , , ,0.172,699.0 +19101.0,pick item,2020-03-12 12:01:33.000Z, ,"['887054']", , , ,0.38,29.99 +19102.0,pay order,2020-03-12 12:10:23.000Z, , ,"['991709']", , ,3.095,3825.99 +19103.0,pick item,2020-03-12 12:16:26.000Z, ,"['887068']", , , ,0.28,89.99 +19104.0,pay order,2020-03-12 12:29:16.000Z, , ,"['991693']", , ,2.43,2601.98 +19105.0,place order,2020-03-12 12:32:10.000Z, ,"['887088','887087','887086']","['991729']", , ,2.748,1453.98 +19106.0,failed delivery,2020-03-12 12:37:10.000Z, , , ,"['661102']", ,0.935,605.0 +19107.0,pick item,2020-03-12 12:57:50.000Z, ,"['887063']", , , ,0.2,39.99 +19108.0,create package,2020-03-12 12:57:50.000Z, ,"['887021','886524','887009','887020','887008','886628','887011','887066']", ,"['661116']", ,5.792000000000002,2795.96 +19109.0,pick item,2020-03-12 13:17:42.000Z, ,"['887065']", , , ,1.28,149.99 +19110.0,pick item,2020-03-12 13:19:11.000Z, ,"['887076']", , , ,0.166,799.0 +19111.0,send package,2020-03-12 13:23:41.000Z, , , ,"['661115']", ,1.7,705.97 +19112.0,pay order,2020-03-12 13:38:31.000Z, , ,"['991701']", , ,1.064,2328.0 +19113.0,item out of stock,2020-03-12 13:55:04.000Z, ,"['886927']", , , ,0.28,449.0 +19114.0,pick item,2020-03-12 13:57:29.000Z, ,"['887029']", , , ,0.483,495.0 +19115.0,confirm order,2020-03-12 14:19:24.000Z, , ,"['991719']", , ,4.508,6077.98 +19116.0,place order,2020-03-12 14:24:07.000Z, ,"['887089','887091','887090']","['991730']", , ,1.162,1332.99 +19117.0,confirm order,2020-03-12 14:34:24.000Z, , ,"['991721']", , ,1.66,184.98 +19118.0,pay order,2020-03-12 14:39:41.000Z, , ,"['991678']", , ,0.606,1280.0 +19119.0,pick item,2020-03-12 14:45:57.000Z, ,"['887081']", , , ,1.37,2500.0 +19120.0,pay order,2020-03-12 14:59:48.000Z, , ,"['991606']", , ,2.23,2334.99 +19121.0,pick item,2020-03-12 15:11:45.000Z, ,"['887034']", , , ,0.88,89.99 +19122.0,pay order,2020-03-12 15:14:11.000Z, , ,"['991713']", , ,4.793,3993.97 +19123.0,pick item,2020-03-12 15:38:40.000Z, ,"['887012']", , , ,0.44,476.0 +19124.0,pick item,2020-03-12 15:53:32.000Z, ,"['886519']", , , ,0.483,79.99 +19125.0,confirm order,2020-03-12 15:56:47.000Z, , ,"['991730']", , ,1.162,1332.99 +19126.0,pick item,2020-03-12 16:01:32.000Z, ,"['887025']", , , ,1.37,2500.0 +19127.0,create package,2020-03-12 16:01:32.000Z, ,"['886953','886860','886923']", ,"['661117']", ,1.435,1897.99 +19128.0,package delivered,2020-03-12 16:05:53.000Z, , , ,"['661115']", ,1.7,705.97 +19129.0,pick item,2020-03-12 16:06:25.000Z, ,"['886946']", , , ,0.21,529.0 +19130.0,place order,2020-03-12 16:08:02.000Z, ,"['887096','887094','887092','887093','887095']","['991731']", , ,3.9,444.95 +19131.0,reorder item,2020-03-12 16:17:16.000Z, ,"['887036']", , , ,0.38,29.99 +19132.0,pick item,2020-03-12 16:17:51.000Z, ,"['886821']", , , ,0.483,79.99 +19133.0,send package,2020-03-12 16:20:51.000Z, , , ,"['661114']", ,13.539,11723.9 +19134.0,pick item,2020-03-12 16:22:57.000Z, ,"['886607']", , , ,0.88,89.99 +19135.0,create package,2020-03-12 16:22:57.000Z, ,"['887027','886799','887028','886901','886853','887029']", ,"['661118']", ,4.892,1964.97 +19136.0,send package,2020-03-12 16:23:08.000Z, , , ,"['661117']", ,1.435,1897.99 +19137.0,send package,2020-03-12 16:23:51.000Z, , , ,"['661111']", ,1.702,3348.0 +19138.0,pick item,2020-03-12 16:35:14.000Z, ,"['886950']", , , ,0.44,476.0 +19139.0,place order,2020-03-12 17:35:51.000Z, ,"['887098','887099','887097']","['991732']", , ,1.826,983.98 +19140.0,send package,2020-03-12 17:40:59.000Z, , , ,"['661118']", ,4.892,1964.97 +19141.0,pick item,2020-03-12 17:42:31.000Z, ,"['887037']", , , ,0.98,129.99 +19142.0,pick item,2020-03-12 17:43:34.000Z, ,"['887015']", , , ,1.28,149.99 +19143.0,pick item,2020-03-12 18:16:49.000Z, ,"['886924']", , , ,0.28,449.0 +19144.0,pay order,2020-03-12 18:40:21.000Z, , ,"['991663']", , ,3.528,5482.99 +19145.0,pay order,2020-03-12 19:13:43.000Z, , ,"['991705']", , ,4.51,3150.95 +19146.0,place order,2020-03-12 20:27:08.000Z, ,"['887102','887100','887101']","['991733']", , ,1.64,613.98 +19147.0,pick item,2020-03-12 20:28:35.000Z, ,"['887077']", , , ,1.37,2500.0 +19148.0,item out of stock,2020-03-12 20:33:32.000Z, ,"['887080']", , , ,0.98,129.99 +19149.0,place order,2020-03-13 04:00:42.000Z, ,"['887106','887103','887105','887104']","['991734']", , ,2.536,1572.98 +19150.0,pick item,2020-03-13 07:50:49.000Z, ,"['886875']", , , ,1.25,2200.0 +19151.0,create package,2020-03-13 07:50:49.000Z, ,"['886946','886947']", ,"['661119']", ,0.42,1058.0 +19152.0,confirm order,2020-03-13 08:00:36.000Z, , ,"['991732']", , ,1.826,983.98 +19153.0,confirm order,2020-03-13 08:03:15.000Z, , ,"['991727']", , ,1.37,2505.0 +19154.0,pick item,2020-03-13 08:09:56.000Z, ,"['887058']", , , ,1.28,149.99 +19155.0,pick item,2020-03-13 08:12:31.000Z, ,"['887074']", , , ,0.483,1099.0 +19156.0,create package,2020-03-13 08:12:31.000Z, ,"['886932','886995','886933']", ,"['661120']", ,1.37,1067.99 +19157.0,send package,2020-03-13 08:18:59.000Z, , , ,"['661120']", ,1.37,1067.99 +19158.0,pick item,2020-03-13 08:26:17.000Z, ,"['886790']", , , ,0.44,476.0 +19159.0,pay order,2020-03-13 08:28:06.000Z, , ,"['991714']", , ,2.446,1194.99 +19160.0,place order,2020-03-13 08:32:33.000Z, ,"['887108','887111','887109','887107','887110','887112']","['991735']", , ,4.295,3561.98 +19161.0,pick item,2020-03-13 08:43:13.000Z, ,"['887112']", , , ,1.28,149.99 +19162.0,pick item,2020-03-13 08:43:20.000Z, ,"['887051']", , , ,0.483,1099.0 +19163.0,create package,2020-03-13 08:43:20.000Z, ,"['886550','886346']", ,"['661121']", ,0.695,168.99 +19164.0,package delivered,2020-03-13 08:50:48.000Z, , , ,"['661118']", ,4.892,1964.97 +19165.0,pay order,2020-03-13 08:56:44.000Z, , ,"['991724']", , ,2.638,2032.97 +19166.0,pick item,2020-03-13 09:11:46.000Z, ,"['886979']", , , ,0.483,1099.0 +19167.0,pick item,2020-03-13 09:13:54.000Z, ,"['887096']", , , ,0.88,89.99 +19168.0,create package,2020-03-13 09:13:54.000Z, ,"['886950','886875','886872','886979','886708','886866','886607','887039']", ,"['661122']", ,5.591,5292.97 +19169.0,pick item,2020-03-13 09:21:25.000Z, ,"['887071']", , , ,0.98,129.99 +19170.0,pick item,2020-03-13 09:22:20.000Z, ,"['887073']", , , ,0.495,129.0 +19171.0,item out of stock,2020-03-13 09:23:54.000Z, ,"['887099']", , , ,1.28,149.99 +19172.0,pick item,2020-03-13 09:24:34.000Z, ,"['887041']", , , ,0.21,529.0 +19173.0,package delivered,2020-03-13 09:33:39.000Z, , , ,"['661114']", ,13.539,11723.9 +19174.0,pay order,2020-03-13 09:36:28.000Z, , ,"['991580']", , ,0.446,1253.0 +19175.0,send package,2020-03-13 09:36:45.000Z, , , ,"['661119']", ,0.42,1058.0 +19176.0,failed delivery,2020-03-13 09:44:11.000Z, , , ,"['661111']", ,1.702,3348.0 +19177.0,pick item,2020-03-13 09:55:28.000Z, ,"['887087']", , , ,1.28,149.99 +19178.0,pick item,2020-03-13 09:57:24.000Z, ,"['886934']", , , ,0.188,1149.0 +19179.0,pay order,2020-03-13 10:02:32.000Z, , ,"['991650']", , ,1.65,2954.0 +19180.0,confirm order,2020-03-13 10:03:52.000Z, , ,"['991725']", , ,3.377,4641.98 +19181.0,confirm order,2020-03-13 10:10:37.000Z, , ,"['991735']", , ,4.295,3561.98 +19182.0,package delivered,2020-03-13 10:11:45.000Z, , , ,"['661109']", ,5.1960000000000015,5153.97 +19183.0,pick item,2020-03-13 10:18:52.000Z, ,"['886988']", , , ,1.25,2200.0 +19184.0,confirm order,2020-03-13 10:24:00.000Z, , ,"['991733']", , ,1.64,613.98 +19185.0,pick item,2020-03-13 10:24:08.000Z, ,"['887007']", , , ,0.495,129.0 +19186.0,pick item,2020-03-13 10:24:45.000Z, ,"['887105']", , , ,0.21,529.0 +19187.0,create package,2020-03-13 10:24:45.000Z, ,"['887096','886965','886968','886716']", ,"['661123']", ,2.862,3764.99 +19188.0,place order,2020-03-13 10:24:54.000Z, ,"['887115','887118','887117','887113','887114','887119','887116']","['991736']", , ,3.731,4473.98 +19189.0,pay order,2020-03-13 10:27:01.000Z, , ,"['991721']", , ,1.66,184.98 +19190.0,pick item,2020-03-13 10:40:22.000Z, ,"['887085']", , , ,0.28,89.99 +19191.0,send package,2020-03-13 10:56:58.000Z, , , ,"['661116']", ,5.792000000000002,2795.96 +19192.0,package delivered,2020-03-13 11:03:14.000Z, , , ,"['661102']", ,0.935,605.0 +19193.0,confirm order,2020-03-13 11:04:38.000Z, , ,"['991720']", , ,4.132,1579.96 +19194.0,pay order,2020-03-13 11:06:42.000Z, , ,"['991696']", , ,0.42,1063.0 +19195.0,pick item,2020-03-13 11:12:02.000Z, ,"['887091']", , , ,0.21,529.0 +19196.0,pick item,2020-03-13 11:19:31.000Z, ,"['887075']", , , ,0.38,29.99 +19197.0,pick item,2020-03-13 11:19:40.000Z, ,"['886243']", , , ,0.78,99.99 +19198.0,create package,2020-03-13 11:19:40.000Z, ,"['887105','887053','887057','887017','887054','886243','887015']", ,"['661124']", ,4.79,1118.94 +19199.0,pick item,2020-03-13 11:49:22.000Z, ,"['886926']", , , ,0.38,29.99 +19200.0,pick item,2020-03-13 11:54:11.000Z, ,"['886870']", , , ,0.172,699.0 +19201.0,place order,2020-03-13 12:09:35.000Z, ,"['887122','887123','887125','887120','887121','887124']","['991737']", , ,2.968,1929.96 +19202.0,pick item,2020-03-13 12:15:07.000Z, ,"['887070']", , , ,0.188,1149.0 +19203.0,pay order,2020-03-13 12:25:26.000Z, , ,"['991692']", , ,1.3630000000000002,1193.99 +19204.0,pay order,2020-03-13 12:28:39.000Z, , ,"['991711']", , ,2.6060000000000003,1133.97 +19205.0,pick item,2020-03-13 12:33:33.000Z, ,"['887084']", , , ,0.88,89.99 +19206.0,reorder item,2020-03-13 12:40:52.000Z, ,"['887056']", , , ,1.28,149.99 +19207.0,confirm order,2020-03-13 12:44:47.000Z, , ,"['991729']", , ,2.748,1453.98 +19208.0,package delivered,2020-03-13 13:00:20.000Z, , , ,"['661111']", ,1.702,3348.0 +19209.0,failed delivery,2020-03-13 13:11:20.000Z, , , ,"['661108']", ,5.483,5215.96 +19210.0,reorder item,2020-03-13 13:17:27.000Z, ,"['887080']", , , ,0.98,129.99 +19211.0,pick item,2020-03-13 13:21:33.000Z, ,"['887093']", , , ,0.98,129.99 +19212.0,confirm order,2020-03-13 13:29:20.000Z, , ,"['991736']", , ,3.731,4473.98 +19213.0,place order,2020-03-13 13:38:58.000Z, ,"['887126','887127']","['991738']", , ,1.32,570.99 +19214.0,confirm order,2020-03-13 13:49:36.000Z, , ,"['991738']", , ,1.32,570.99 +19215.0,pick item,2020-03-13 13:54:19.000Z, ,"['887067']", , , ,0.98,129.99 +19216.0,pick item,2020-03-13 14:04:23.000Z, ,"['887069']", , , ,0.21,529.0 +19217.0,create package,2020-03-13 14:04:23.000Z, ,"['887034','886474','886835','887031']", ,"['661125']", ,2.923,1787.98 +19218.0,pick item,2020-03-13 14:06:18.000Z, ,"['886957']", , , ,0.28,449.0 +19219.0,reorder item,2020-03-13 14:07:42.000Z, ,"['887016']", , , ,0.88,89.99 +19220.0,reorder item,2020-03-13 14:10:30.000Z, ,"['886912']", , , ,0.495,129.0 +19221.0,confirm order,2020-03-13 14:14:13.000Z, , ,"['991737']", , ,2.968,1929.96 +19222.0,pick item,2020-03-13 14:21:13.000Z, ,"['887107']", , , ,0.21,529.0 +19223.0,pick item,2020-03-13 14:25:29.000Z, ,"['887123']", , , ,0.44,476.0 +19224.0,send package,2020-03-13 14:27:42.000Z, , , ,"['661121']", ,0.695,168.99 +19225.0,pick item,2020-03-13 14:28:42.000Z, ,"['887125']", , , ,0.2,39.99 +19226.0,create package,2020-03-13 14:28:42.000Z, ,"['886870','886970','887081']", ,"['661126']", ,2.037,3328.0 +19227.0,confirm order,2020-03-13 14:37:59.000Z, , ,"['991728']", , ,3.32,424.96 +19228.0,pay order,2020-03-13 14:38:17.000Z, , ,"['991642']", , ,3.63,2804.98 +19229.0,pay order,2020-03-13 14:39:07.000Z, , ,"['991725']", , ,3.377,4641.98 +19230.0,pick item,2020-03-13 14:40:41.000Z, ,"['887114']", , , ,0.483,495.0 +19231.0,send package,2020-03-13 14:44:56.000Z, , , ,"['661125']", ,2.923,1787.98 +19232.0,pay order,2020-03-13 14:45:21.000Z, , ,"['991737']", , ,2.968,1929.96 +19233.0,pay order,2020-03-13 15:03:23.000Z, , ,"['991722']", , ,0.924,1472.98 +19234.0,pick item,2020-03-13 15:10:13.000Z, ,"['886593']", , , ,0.21,529.0 +19235.0,package delivered,2020-03-13 15:20:54.000Z, , , ,"['661117']", ,1.435,1897.99 +19236.0,reorder item,2020-03-13 15:22:52.000Z, ,"['887040']", , , ,0.483,1099.0 +19237.0,package delivered,2020-03-13 15:35:27.000Z, , , ,"['661120']", ,1.37,1067.99 +19238.0,pick item,2020-03-13 15:36:42.000Z, ,"['887062']", , , ,0.38,29.99 +19239.0,create package,2020-03-13 15:36:42.000Z, ,"['887025','887063','887061','887007','887048','887042','886945','886940','887006','887051','887044','886957','887083','887084','887085','887062','887087','886956']", ,"['661127']", ,9.724,8512.9 +19240.0,place order,2020-03-13 15:37:43.000Z, ,"['887128','887129']","['991739']", , ,0.354,1953.0 +19241.0,reorder item,2020-03-13 15:55:15.000Z, ,"['887099']", , , ,1.28,149.99 +19242.0,send package,2020-03-13 15:55:41.000Z, , , ,"['661123']", ,2.862,3764.99 +19243.0,send package,2020-03-13 16:03:15.000Z, , , ,"['661122']", ,5.591,5292.97 +19244.0,pick item,2020-03-13 16:04:04.000Z, ,"['887094']", , , ,0.38,29.99 +19245.0,pick item,2020-03-13 16:06:44.000Z, ,"['887086']", , , ,1.28,149.99 +19246.0,item out of stock,2020-03-13 16:13:24.000Z, ,"['887046']", , , ,1.37,2500.0 +19247.0,pick item,2020-03-13 16:29:23.000Z, ,"['886952']", , , ,0.483,495.0 +19248.0,confirm order,2020-03-13 16:46:48.000Z, , ,"['991731']", , ,3.9,444.95 +19249.0,item out of stock,2020-03-13 17:03:22.000Z, ,"['887118']", , , ,0.2,39.99 +19250.0,failed delivery,2020-03-13 17:08:27.000Z, , , ,"['661123']", ,2.862,3764.99 +19251.0,pick item,2020-03-13 17:19:58.000Z, ,"['887101']", , , ,0.38,29.99 +19252.0,pay order,2020-03-13 17:34:11.000Z, , ,"['991735']", , ,4.295,3561.98 +19253.0,place order,2020-03-13 17:35:13.000Z, ,"['887131','887136','887130','887132','887133','887135','887134']","['991740']", , ,3.604,6013.0 +19254.0,send package,2020-03-13 18:25:54.000Z, , , ,"['661127']", ,9.724,8512.9 +19255.0,pick item,2020-03-13 20:10:33.000Z, ,"['887097']", , , ,0.166,799.0 +19256.0,place order,2020-03-13 20:25:14.000Z, ,"['887139','887138','887140','887137']","['991741']", , ,1.774,2558.99 +19257.0,place order,2020-03-14 11:31:18.000Z, ,"['887142','887143','887141']","['991742']", , ,3.11,2434.98 +19258.0,create package,2020-03-14 23:00:00.000Z, ,"['887059','887058','886790','886982','887091']", ,"['661128']", ,3.68,3684.98 +19259.0,place order,2020-03-15 11:56:30.000Z, ,"['887144']","['991743']", , ,0.78,104.99 +19260.0,payment reminder,2020-03-15 12:53:21.000Z, , ,"['991613']", , ,3.49,4663.0 +19261.0,place order,2020-03-16 05:04:54.000Z, ,"['887145','887146','887147']","['991744']", , ,0.883,1183.98 +19262.0,confirm order,2020-03-16 07:46:09.000Z, , ,"['991739']", , ,0.354,1953.0 +19263.0,reorder item,2020-03-16 07:59:00.000Z, ,"['886927']", , , ,0.28,449.0 +19264.0,package delivered,2020-03-16 07:59:24.000Z, , , ,"['661108']", ,5.483,5215.96 +19265.0,pick item,2020-03-16 08:01:22.000Z, ,"['887134']", , , ,0.495,129.0 +19266.0,pick item,2020-03-16 08:08:01.000Z, ,"['887060']", , , ,0.172,699.0 +19267.0,package delivered,2020-03-16 08:17:00.000Z, , , ,"['661116']", ,5.792000000000002,2795.96 +19268.0,pick item,2020-03-16 08:27:01.000Z, ,"['887106']", , , ,0.88,89.99 +19269.0,pick item,2020-03-16 08:27:47.000Z, ,"['887092']", , , ,0.88,89.99 +19270.0,item out of stock,2020-03-16 08:36:53.000Z, ,"['887122']", , , ,0.188,1149.0 +19271.0,place order,2020-03-16 08:43:11.000Z, ,"['887150','887149','887157','887152','887154','887151','887148','887156','887155','887153']","['991745']", , ,9.496,8006.96 +19272.0,pick item,2020-03-16 08:48:19.000Z, ,"['887133']", , , ,0.44,476.0 +19273.0,confirm order,2020-03-16 08:56:50.000Z, , ,"['991741']", , ,1.774,2558.99 +19274.0,pick item,2020-03-16 09:12:40.000Z, ,"['887108']", , , ,1.25,2200.0 +19275.0,send package,2020-03-16 09:14:03.000Z, , , ,"['661126']", ,2.037,3328.0 +19276.0,payment reminder,2020-03-16 09:14:29.000Z, , ,"['991628']", , ,0.852,873.97 +19277.0,pick item,2020-03-16 09:15:18.000Z, ,"['887124']", , , ,0.98,129.99 +19278.0,pick item,2020-03-16 09:33:09.000Z, ,"['886939']", , , ,1.37,2500.0 +19279.0,package delivered,2020-03-16 09:37:11.000Z, , , ,"['661121']", ,0.695,168.99 +19280.0,pick item,2020-03-16 10:01:40.000Z, ,"['886994']", , , ,0.483,495.0 +19281.0,pick item,2020-03-16 10:02:37.000Z, ,"['887078']", , , ,0.483,495.0 +19282.0,pick item,2020-03-16 10:13:24.000Z, ,"['887146']", , , ,0.2,39.99 +19283.0,pick item,2020-03-16 10:17:06.000Z, ,"['887138']", , , ,0.98,129.99 +19284.0,pick item,2020-03-16 10:34:23.000Z, ,"['887151']", , , ,0.483,1099.0 +19285.0,pay order,2020-03-16 10:35:02.000Z, , ,"['991683']", , ,4.123,939.97 +19286.0,failed delivery,2020-03-16 10:39:04.000Z, , , ,"['661119']", ,0.42,1058.0 +19287.0,pick item,2020-03-16 10:41:38.000Z, ,"['887013']", , , ,0.166,799.0 +19288.0,place order,2020-03-16 10:46:10.000Z, ,"['887158']","['991746']", , ,0.172,704.0 +19289.0,failed delivery,2020-03-16 10:54:24.000Z, , , ,"['661123']", ,2.862,3764.99 +19290.0,confirm order,2020-03-16 10:54:49.000Z, , ,"['991746']", , ,0.172,704.0 +19291.0,confirm order,2020-03-16 10:57:02.000Z, , ,"['991744']", , ,0.883,1183.98 +19292.0,pick item,2020-03-16 11:05:41.000Z, ,"['887095']", , , ,0.78,99.99 +19293.0,item out of stock,2020-03-16 11:17:10.000Z, ,"['887149']", , , ,1.48,199.99 +19294.0,pick item,2020-03-16 11:17:38.000Z, ,"['887141']", , , ,0.38,29.99 +19295.0,package delivered,2020-03-16 11:18:41.000Z, , , ,"['661127']", ,9.724,8512.9 +19296.0,reorder item,2020-03-16 11:25:32.000Z, ,"['886997']", , , ,0.21,529.0 +19297.0,pick item,2020-03-16 11:41:26.000Z, ,"['887055']", , , ,0.172,699.0 +19298.0,pick item,2020-03-16 11:59:12.000Z, ,"['887130']", , , ,0.44,476.0 +19299.0,create package,2020-03-16 11:59:12.000Z, ,"['887079','887078']", ,"['661129']", ,0.966,574.99 +19300.0,package delivered,2020-03-16 12:06:06.000Z, , , ,"['661125']", ,2.923,1787.98 +19301.0,pick item,2020-03-16 12:35:56.000Z, ,"['887139']", , , ,0.188,1149.0 +19302.0,pick item,2020-03-16 12:43:24.000Z, ,"['887098']", , , ,0.38,29.99 +19303.0,create package,2020-03-16 12:43:24.000Z, ,"['887114','887037','887038']", ,"['661130']", ,1.629,1423.99 +19304.0,pick item,2020-03-16 12:51:08.000Z, ,"['886876']", , , ,0.188,1149.0 +19305.0,pick item,2020-03-16 12:52:06.000Z, ,"['886806']", , , ,0.38,29.99 +19306.0,place order,2020-03-16 12:52:07.000Z, ,"['887162','887161','887159','887160','887163']","['991747']", , ,3.346,6402.0 +19307.0,pay order,2020-03-16 13:03:04.000Z, , ,"['991741']", , ,1.774,2558.99 +19308.0,send package,2020-03-16 13:13:20.000Z, , , ,"['661129']", ,0.966,574.99 +19309.0,failed delivery,2020-03-16 13:18:01.000Z, , , ,"['661123']", ,2.862,3764.99 +19310.0,pay order,2020-03-16 13:48:04.000Z, , ,"['991739']", , ,0.354,1953.0 +19311.0,send package,2020-03-16 14:00:42.000Z, , , ,"['661124']", ,4.79,1118.94 +19312.0,confirm order,2020-03-16 14:00:53.000Z, , ,"['991742']", , ,3.11,2434.98 +19313.0,pick item,2020-03-16 14:01:22.000Z, ,"['887161']", , , ,0.166,799.0 +19314.0,create package,2020-03-16 14:01:22.000Z, ,"['887075','887071','887076','886876','887067','887074','886988','887070','887077','887069','887073','887068']", ,"['661131']", ,6.97,9933.96 +19315.0,package delivered,2020-03-16 14:01:44.000Z, , , ,"['661126']", ,2.037,3328.0 +19316.0,send package,2020-03-16 14:04:04.000Z, , , ,"['661128']", ,3.68,3684.98 +19317.0,pick item,2020-03-16 14:10:49.000Z, ,"['886513']", , , ,1.28,149.99 +19318.0,pick item,2020-03-16 14:12:10.000Z, ,"['886583']", , , ,0.28,449.0 +19319.0,pick item,2020-03-16 14:16:06.000Z, ,"['887136']", , , ,0.21,529.0 +19320.0,pick item,2020-03-16 14:24:03.000Z, ,"['887140']", , , ,0.166,799.0 +19321.0,pick item,2020-03-16 14:30:16.000Z, ,"['887088']", , , ,0.188,1149.0 +19322.0,pick item,2020-03-16 14:35:20.000Z, ,"['886722']", , , ,0.78,99.99 +19323.0,pick item,2020-03-16 14:37:02.000Z, ,"['886671']", , , ,0.172,699.0 +19324.0,pick item,2020-03-16 14:37:55.000Z, ,"['887154']", , , ,0.28,449.0 +19325.0,pick item,2020-03-16 14:45:51.000Z, ,"['886991']", , , ,1.28,149.99 +19326.0,pick item,2020-03-16 14:57:11.000Z, ,"['887064']", , , ,0.88,89.99 +19327.0,item out of stock,2020-03-16 15:00:14.000Z, ,"['887152']", , , ,0.483,495.0 +19328.0,package delivered,2020-03-16 15:01:39.000Z, , , ,"['661122']", ,5.591,5292.97 +19329.0,place order,2020-03-16 15:04:01.000Z, ,"['887164','887165']","['991748']", , ,1.853,3000.0 +19330.0,package delivered,2020-03-16 15:04:03.000Z, , , ,"['661129']", ,0.966,574.99 +19331.0,pay order,2020-03-16 15:05:58.000Z, , ,"['991718']", , ,0.6779999999999999,1772.99 +19332.0,pick item,2020-03-16 15:21:50.000Z, ,"['887109']", , , ,0.78,99.99 +19333.0,item out of stock,2020-03-16 15:27:20.000Z, ,"['887119']", , , ,0.38,29.99 +19334.0,send package,2020-03-16 15:32:49.000Z, , , ,"['661131']", ,6.97,9933.96 +19335.0,pick item,2020-03-16 15:33:20.000Z, ,"['887117']", , , ,0.495,129.0 +19336.0,create package,2020-03-16 15:33:20.000Z, ,"['887140','887064','887139','886994','887065','887138','887012','887013']", ,"['661132']", ,4.583,4087.97 +19337.0,pick item,2020-03-16 15:40:07.000Z, ,"['886727']", , , ,0.188,1149.0 +19338.0,pick item,2020-03-16 15:45:12.000Z, ,"['887129']", , , ,0.166,799.0 +19339.0,package delivered,2020-03-16 15:58:42.000Z, , , ,"['661123']", ,2.862,3764.99 +19340.0,pick item,2020-03-16 16:05:20.000Z, ,"['886927']", , , ,0.28,449.0 +19341.0,pick item,2020-03-16 16:08:51.000Z, ,"['886759']", , , ,0.44,476.0 +19342.0,pick item,2020-03-16 16:12:29.000Z, ,"['886871']", , , ,0.483,495.0 +19343.0,place order,2020-03-16 16:27:50.000Z, ,"['887166','887167']","['991749']", , ,0.552,733.99 +19344.0,pick item,2020-03-16 16:35:42.000Z, ,"['886960']", , , ,0.483,79.99 +19345.0,confirm order,2020-03-16 16:36:21.000Z, , ,"['991748']", , ,1.853,3000.0 +19346.0,send package,2020-03-16 16:41:51.000Z, , , ,"['661130']", ,1.629,1423.99 +19347.0,failed delivery,2020-03-16 16:55:40.000Z, , , ,"['661130']", ,1.629,1423.99 +19348.0,confirm order,2020-03-16 17:50:44.000Z, , ,"['991747']", , ,3.346,6402.0 +19349.0,place order,2020-03-16 18:15:27.000Z, ,"['887172','887170','887171','887168','887169']","['991750']", , ,2.714,2171.98 +19350.0,reorder item,2020-03-16 18:37:53.000Z, ,"['887118']", , , ,0.2,39.99 +19351.0,pick item,2020-03-16 19:35:11.000Z, ,"['887142']", , , ,1.48,199.99 +19352.0,pick item,2020-03-16 19:36:45.000Z, ,"['887104']", , , ,1.28,149.99 +19353.0,create package,2020-03-16 19:36:45.000Z, ,"['886519','887098','887097','886727']", ,"['661133']", ,1.217,2057.98 +19354.0,pick item,2020-03-16 19:56:48.000Z, ,"['887090']", , , ,0.78,99.99 +19355.0,place order,2020-03-16 21:10:29.000Z, ,"['887173','887176','887175','887174']","['991751']", , ,2.4930000000000003,2344.97 +19356.0,place order,2020-03-17 07:12:33.000Z, ,"['887177','887179','887178']","['991752']", , ,0.5760000000000001,2342.99 +19357.0,payment reminder,2020-03-17 07:40:26.000Z, , ,"['991633']", , ,1.905,3399.0 +19358.0,pick item,2020-03-17 07:48:08.000Z, ,"['886533']", , , ,1.37,2500.0 +19359.0,pick item,2020-03-17 07:51:24.000Z, ,"['887115']", , , ,0.483,1099.0 +19360.0,pick item,2020-03-17 07:54:30.000Z, ,"['887169']", , , ,0.172,699.0 +19361.0,create package,2020-03-17 07:54:30.000Z, ,"['887136','886924','886821','886926','886927','887130','886952','887133','887134']", ,"['661134']", ,3.491,3112.98 +19362.0,pick item,2020-03-17 07:54:31.000Z, ,"['887127']", , , ,0.44,476.0 +19363.0,confirm order,2020-03-17 07:56:13.000Z, , ,"['991740']", , ,3.604,6013.0 +19364.0,confirm order,2020-03-17 08:15:26.000Z, , ,"['991734']", , ,2.536,1572.98 +19365.0,confirm order,2020-03-17 08:24:05.000Z, , ,"['991751']", , ,2.4930000000000003,2344.97 +19366.0,reorder item,2020-03-17 08:35:47.000Z, ,"['887152']", , , ,0.483,495.0 +19367.0,payment reminder,2020-03-17 08:36:15.000Z, , ,"['991631']", , ,2.295,4409.98 +19368.0,pay order,2020-03-17 08:40:20.000Z, , ,"['991716']", , ,2.776,3163.98 +19369.0,pick item,2020-03-17 08:44:21.000Z, ,"['887050']", , , ,0.483,1099.0 +19370.0,pick item,2020-03-17 08:50:34.000Z, ,"['887160']", , , ,1.25,2200.0 +19371.0,pick item,2020-03-17 08:57:22.000Z, ,"['887126']", , , ,0.88,89.99 +19372.0,pick item,2020-03-17 08:57:27.000Z, ,"['887177']", , , ,0.2,39.99 +19373.0,place order,2020-03-17 09:08:37.000Z, ,"['887182','887181','887183','887185','887180','887184']","['991753']", , ,4.078,4811.98 +19374.0,pick item,2020-03-17 09:12:32.000Z, ,"['887036']", , , ,0.38,29.99 +19375.0,pick item,2020-03-17 09:21:04.000Z, ,"['886851']", , , ,0.483,1099.0 +19376.0,pick item,2020-03-17 09:27:40.000Z, ,"['887185']", , , ,0.28,449.0 +19377.0,pick item,2020-03-17 09:29:02.000Z, ,"['886555']", , , ,0.88,89.99 +19378.0,create package,2020-03-17 09:29:02.000Z, ,"['887108','887109','887107','887146','887112']", ,"['661135']", ,3.72,3018.97 +19379.0,item out of stock,2020-03-17 09:30:08.000Z, ,"['887116']", , , ,1.25,2200.0 +19380.0,pick item,2020-03-17 09:32:56.000Z, ,"['887111']", , , ,0.495,129.0 +19381.0,send package,2020-03-17 09:33:52.000Z, , , ,"['661135']", ,3.72,3018.97 +19382.0,package delivered,2020-03-17 09:36:21.000Z, , , ,"['661124']", ,4.79,1118.94 +19383.0,send package,2020-03-17 09:47:11.000Z, , , ,"['661132']", ,4.583,4087.97 +19384.0,reorder item,2020-03-17 09:55:20.000Z, ,"['887149']", , , ,1.48,199.99 +19385.0,confirm order,2020-03-17 09:58:39.000Z, , ,"['991752']", , ,0.5760000000000001,2342.99 +19386.0,payment reminder,2020-03-17 10:03:17.000Z, , ,"['991521']", , ,1.06,194.98 +19387.0,item out of stock,2020-03-17 10:04:41.000Z, ,"['887131']", , , ,1.37,2500.0 +19388.0,pick item,2020-03-17 10:09:28.000Z, ,"['887178']", , , ,0.188,1149.0 +19389.0,pick item,2020-03-17 10:14:51.000Z, ,"['887168']", , , ,0.21,529.0 +19390.0,payment reminder,2020-03-17 10:16:10.000Z, , ,"['991635']", , ,3.125,2853.98 +19391.0,payment reminder,2020-03-17 10:25:32.000Z, , ,"['991400']", , ,2.978,4350.99 +19392.0,confirm order,2020-03-17 10:26:36.000Z, , ,"['991753']", , ,4.078,4811.98 +19393.0,reorder item,2020-03-17 10:30:31.000Z, ,"['887131']", , , ,1.37,2500.0 +19394.0,pick item,2020-03-17 10:34:45.000Z, ,"['887184']", , , ,0.98,129.99 +19395.0,place order,2020-03-17 10:37:01.000Z, ,"['887186','887190','887188','887189','887187']","['991754']", , ,3.306,4002.98 +19396.0,send package,2020-03-17 10:40:07.000Z, , , ,"['661134']", ,3.491,3112.98 +19397.0,pick item,2020-03-17 10:44:06.000Z, ,"['887175']", , , ,0.483,79.99 +19398.0,create package,2020-03-17 10:44:06.000Z, ,"['886513','886722','886871','887041']", ,"['661136']", ,2.753,1273.98 +19399.0,pay order,2020-03-17 10:44:16.000Z, , ,"['991727']", , ,1.37,2505.0 +19400.0,pick item,2020-03-17 10:49:51.000Z, ,"['887158']", , , ,0.172,699.0 +19401.0,pick item,2020-03-17 11:01:59.000Z, ,"['887148']", , , ,1.25,2200.0 +19402.0,pick item,2020-03-17 11:03:48.000Z, ,"['887173']", , , ,0.38,29.99 +19403.0,item out of stock,2020-03-17 11:19:56.000Z, ,"['887072']", , , ,0.483,79.99 +19404.0,reorder item,2020-03-17 11:24:31.000Z, ,"['887122']", , , ,0.188,1149.0 +19405.0,package delivered,2020-03-17 11:26:12.000Z, , , ,"['661135']", ,3.72,3018.97 +19406.0,pick item,2020-03-17 11:30:23.000Z, ,"['887166']", , , ,0.172,699.0 +19407.0,create package,2020-03-17 11:30:23.000Z, ,"['886934','886939']", ,"['661137']", ,1.558,3649.0 +19408.0,pick item,2020-03-17 11:56:08.000Z, ,"['887162']", , , ,0.28,449.0 +19409.0,pick item,2020-03-17 12:02:20.000Z, ,"['887052']", , , ,0.44,476.0 +19410.0,create package,2020-03-17 12:02:20.000Z, ,"['886759','887094','887092','887185','887093','887184','887095']", ,"['661138']", ,4.72,1404.95 +19411.0,pick item,2020-03-17 12:17:07.000Z, ,"['887128']", , , ,0.188,1149.0 +19412.0,place order,2020-03-17 12:33:50.000Z, ,"['887192','887193','887191']","['991755']", , ,1.203,650.98 +19413.0,pick item,2020-03-17 12:40:59.000Z, ,"['887121']", , , ,0.78,99.99 +19414.0,pick item,2020-03-17 12:43:39.000Z, ,"['887191']", , , ,0.44,476.0 +19415.0,pick item,2020-03-17 13:17:42.000Z, ,"['887100']", , , ,0.98,129.99 +19416.0,confirm order,2020-03-17 13:21:47.000Z, , ,"['991750']", , ,2.714,2171.98 +19417.0,pick item,2020-03-17 13:22:16.000Z, ,"['887143']", , , ,1.25,2200.0 +19418.0,pick item,2020-03-17 13:46:47.000Z, ,"['887110']", , , ,0.28,449.0 +19419.0,confirm order,2020-03-17 13:54:12.000Z, , ,"['991754']", , ,3.306,4002.98 +19420.0,pick item,2020-03-17 13:57:45.000Z, ,"['887080']", , , ,0.98,129.99 +19421.0,create package,2020-03-17 13:57:45.000Z, ,"['886851','887123','887125','887121','887124']", ,"['661139']", ,2.883,1844.97 +19422.0,payment reminder,2020-03-17 13:57:55.000Z, , ,"['991637']", , ,1.18,3230.99 +19423.0,package delivered,2020-03-17 14:08:15.000Z, , , ,"['661119']", ,0.42,1058.0 +19424.0,pick item,2020-03-17 14:17:55.000Z, ,"['886972']", , , ,0.44,476.0 +19425.0,pick item,2020-03-17 14:24:52.000Z, ,"['887120']", , , ,0.38,29.99 +19426.0,place order,2020-03-17 14:27:27.000Z, ,"['887198','887197','887194','887196','887195']","['991756']", , ,1.722,2541.98 +19427.0,confirm order,2020-03-17 14:30:44.000Z, , ,"['991756']", , ,1.722,2541.98 +19428.0,pay order,2020-03-17 14:33:47.000Z, , ,"['991720']", , ,4.132,1579.96 +19429.0,pick item,2020-03-17 14:36:48.000Z, ,"['887149']", , , ,1.48,199.99 +19430.0,pick item,2020-03-17 14:40:12.000Z, ,"['887181']", , , ,0.98,129.99 +19431.0,pick item,2020-03-17 14:40:50.000Z, ,"['887157']", , , ,1.48,199.99 +19432.0,create package,2020-03-17 14:40:50.000Z, ,"['887106','887162','887160','886593','887052','887055','887104','887161']", ,"['661140']", ,4.678,5391.98 +19433.0,pick item,2020-03-17 14:41:17.000Z, ,"['887192']", , , ,0.483,79.99 +19434.0,package delivered,2020-03-17 14:55:03.000Z, , , ,"['661132']", ,4.583,4087.97 +19435.0,item out of stock,2020-03-17 14:56:18.000Z, ,"['887198']", , , ,0.483,1099.0 +19436.0,send package,2020-03-17 14:57:43.000Z, , , ,"['661133']", ,1.217,2057.98 +19437.0,reorder item,2020-03-17 15:07:46.000Z, ,"['887116']", , , ,1.25,2200.0 +19438.0,pick item,2020-03-17 15:08:07.000Z, ,"['887163']", , , ,0.28,449.0 +19439.0,package delivered,2020-03-17 15:09:43.000Z, , , ,"['661134']", ,3.491,3112.98 +19440.0,failed delivery,2020-03-17 15:15:58.000Z, , , ,"['661130']", ,1.629,1423.99 +19441.0,item out of stock,2020-03-17 15:24:47.000Z, ,"['887135']", , , ,0.483,1099.0 +19442.0,pick item,2020-03-17 15:42:25.000Z, ,"['887193']", , , ,0.28,89.99 +19443.0,pick item,2020-03-17 15:47:13.000Z, ,"['887155']", , , ,0.21,529.0 +19444.0,send package,2020-03-17 15:51:53.000Z, , , ,"['661140']", ,4.678,5391.98 +19445.0,pick item,2020-03-17 16:02:25.000Z, ,"['887102']", , , ,0.28,449.0 +19446.0,place order,2020-03-17 16:14:41.000Z, ,"['887199']","['991757']", , ,1.25,2205.0 +19447.0,failed delivery,2020-03-17 16:16:22.000Z, , , ,"['661128']", ,3.68,3684.98 +19448.0,pick item,2020-03-17 16:16:23.000Z, ,"['887194']", , , ,0.166,799.0 +19449.0,package delivered,2020-03-17 16:19:04.000Z, , , ,"['661131']", ,6.97,9933.96 +19450.0,pick item,2020-03-17 16:28:11.000Z, ,"['887174']", , , ,0.38,29.99 +19451.0,pick item,2020-03-17 16:33:26.000Z, ,"['887171']", , , ,1.28,149.99 +19452.0,create package,2020-03-17 16:33:26.000Z, ,"['887171','887169','886555','887088','887050','887168','887060','886960','887086']", ,"['661141']", ,5.148,4644.96 +19453.0,confirm order,2020-03-17 16:34:27.000Z, , ,"['991745']", , ,9.496,8006.96 +19454.0,pay order,2020-03-17 16:39:28.000Z, , ,"['991710']", , ,3.986,2737.98 +19455.0,pay order,2020-03-17 16:52:45.000Z, , ,"['991613']", , ,3.49,4663.0 +19456.0,confirm order,2020-03-17 16:53:11.000Z, , ,"['991757']", , ,1.25,2205.0 +19457.0,send package,2020-03-17 17:00:18.000Z, , , ,"['661137']", ,1.558,3649.0 +19458.0,pick item,2020-03-17 17:00:23.000Z, ,"['887145']", , , ,0.483,1099.0 +19459.0,pay order,2020-03-17 17:10:46.000Z, , ,"['991521']", , ,1.06,194.98 +19460.0,send package,2020-03-17 17:31:14.000Z, , , ,"['661138']", ,4.72,1404.95 +19461.0,place order,2020-03-17 17:49:10.000Z, ,"['887201','887202','887200']","['991758']", , ,2.64,314.97 +19462.0,pick item,2020-03-17 18:38:01.000Z, ,"['886185']", , , ,0.88,89.99 +19463.0,item out of stock,2020-03-17 20:51:41.000Z, ,"['887202']", , , ,1.28,149.99 +19464.0,place order,2020-03-17 21:07:05.000Z, ,"['887203','887204','887205']","['991759']", , ,1.97,763.98 +19465.0,confirm order,2020-03-17 21:25:07.000Z, , ,"['991755']", , ,1.203,650.98 +19466.0,place order,2020-03-18 07:00:24.000Z, ,"['887206','887208','887210','887209','887207']","['991760']", , ,3.62,504.95 +19467.0,failed delivery,2020-03-18 07:48:27.000Z, , , ,"['661137']", ,1.558,3649.0 +19468.0,package delivered,2020-03-18 08:04:29.000Z, , , ,"['661138']", ,4.72,1404.95 +19469.0,package delivered,2020-03-18 08:17:21.000Z, , , ,"['661130']", ,1.629,1423.99 +19470.0,item out of stock,2020-03-18 08:29:54.000Z, ,"['887170']", , , ,0.172,699.0 +19471.0,pick item,2020-03-18 08:38:42.000Z, ,"['887204']", , , ,0.78,99.99 +19472.0,pick item,2020-03-18 08:49:19.000Z, ,"['887179']", , , ,0.188,1149.0 +19473.0,place order,2020-03-18 08:50:23.000Z, ,"['887212','887211','887213']","['991761']", , ,3.23,2724.98 +19474.0,pick item,2020-03-18 08:56:20.000Z, ,"['887213']", , , ,1.37,2500.0 +19475.0,item out of stock,2020-03-18 08:59:01.000Z, ,"['887195']", , , ,0.21,529.0 +19476.0,confirm order,2020-03-18 09:00:49.000Z, , ,"['991760']", , ,3.62,504.95 +19477.0,pick item,2020-03-18 09:01:24.000Z, ,"['887132']", , , ,0.166,799.0 +19478.0,pick item,2020-03-18 09:01:51.000Z, ,"['887144']", , , ,0.78,99.99 +19479.0,pick item,2020-03-18 09:05:45.000Z, ,"['887205']", , , ,0.98,129.99 +19480.0,package delivered,2020-03-18 09:18:16.000Z, , , ,"['661137']", ,1.558,3649.0 +19481.0,pick item,2020-03-18 09:25:14.000Z, ,"['887209']", , , ,0.88,89.99 +19482.0,create package,2020-03-18 09:25:14.000Z, ,"['887128','886972','886583','887101','887129','887102','887100']", ,"['661142']", ,2.714,3481.98 +19483.0,item out of stock,2020-03-18 09:26:27.000Z, ,"['887199']", , , ,1.25,2200.0 +19484.0,pick item,2020-03-18 09:31:07.000Z, ,"['887189']", , , ,0.483,79.99 +19485.0,pay order,2020-03-18 09:34:32.000Z, , ,"['991733']", , ,1.64,613.98 +19486.0,item out of stock,2020-03-18 09:41:36.000Z, ,"['887201']", , , ,0.38,29.99 +19487.0,pay order,2020-03-18 10:06:42.000Z, , ,"['991744']", , ,0.883,1183.98 +19488.0,confirm order,2020-03-18 10:08:35.000Z, , ,"['991749']", , ,0.552,733.99 +19489.0,reorder item,2020-03-18 10:28:08.000Z, ,"['887119']", , , ,0.38,29.99 +19490.0,pick item,2020-03-18 10:32:55.000Z, ,"['886976']", , , ,0.28,89.99 +19491.0,pay order,2020-03-18 10:42:14.000Z, , ,"['991745']", , ,9.496,8006.96 +19492.0,place order,2020-03-18 11:00:34.000Z, ,"['887215','887216','887214','887218','887217']","['991762']", , ,2.736,2367.98 +19493.0,pick item,2020-03-18 11:01:19.000Z, ,"['887164']", , , ,1.37,2500.0 +19494.0,confirm order,2020-03-18 11:01:22.000Z, , ,"['991758']", , ,2.64,314.97 +19495.0,pay order,2020-03-18 11:07:08.000Z, , ,"['991751']", , ,2.4930000000000003,2344.97 +19496.0,send package,2020-03-18 11:11:44.000Z, , , ,"['661136']", ,2.753,1273.98 +19497.0,send package,2020-03-18 11:53:41.000Z, , , ,"['661141']", ,5.148,4644.96 +19498.0,pick item,2020-03-18 11:54:04.000Z, ,"['887099']", , , ,1.28,149.99 +19499.0,place order,2020-03-18 12:20:55.000Z, ,"['887220','887219','887221']","['991763']", , ,1.262,1322.99 +19500.0,send package,2020-03-18 12:38:48.000Z, , , ,"['661139']", ,2.883,1844.97 +19501.0,pick item,2020-03-18 12:48:42.000Z, ,"['887165']", , , ,0.483,495.0 +19502.0,package delivered,2020-03-18 13:06:04.000Z, , , ,"['661136']", ,2.753,1273.98 +19503.0,package delivered,2020-03-18 13:06:42.000Z, , , ,"['661140']", ,4.678,5391.98 +19504.0,pick item,2020-03-18 13:29:07.000Z, ,"['887186']", , , ,0.88,89.99 +19505.0,pay order,2020-03-18 13:42:36.000Z, , ,"['991734']", , ,2.536,1572.98 +19506.0,pay order,2020-03-18 13:46:30.000Z, , ,"['991728']", , ,3.32,424.96 +19507.0,send package,2020-03-18 13:50:00.000Z, , , ,"['661142']", ,2.714,3481.98 +19508.0,pick item,2020-03-18 14:00:27.000Z, ,"['887211']", , , ,0.98,129.99 +19509.0,create package,2020-03-18 14:00:27.000Z, ,"['887149','887213','887157','887154','887151','887148','887211','887142','887143','887155','887141']", ,"['661143']", ,10.643,9736.95 +19510.0,reorder item,2020-03-18 14:00:36.000Z, ,"['887010']", , , ,1.48,199.99 +19511.0,place order,2020-03-18 14:01:37.000Z, ,"['887222']","['991764']", , ,0.78,104.99 +19512.0,package delivered,2020-03-18 14:03:20.000Z, , , ,"['661133']", ,1.217,2057.98 +19513.0,payment reminder,2020-03-18 14:05:13.000Z, , ,"['991648']", , ,3.905,3362.97 +19514.0,pick item,2020-03-18 14:33:35.000Z, ,"['886997']", , , ,0.21,529.0 +19515.0,pick item,2020-03-18 14:39:35.000Z, ,"['887182']", , , ,0.28,449.0 +19516.0,pick item,2020-03-18 14:45:19.000Z, ,"['887220']", , , ,0.88,89.99 +19517.0,reorder item,2020-03-18 14:51:05.000Z, ,"['887199']", , , ,1.25,2200.0 +19518.0,pick item,2020-03-18 14:52:54.000Z, ,"['887147']", , , ,0.2,39.99 +19519.0,pay order,2020-03-18 14:57:36.000Z, , ,"['991719']", , ,4.508,6077.98 +19520.0,confirm order,2020-03-18 15:04:02.000Z, , ,"['991762']", , ,2.736,2367.98 +19521.0,confirm order,2020-03-18 15:19:47.000Z, , ,"['991763']", , ,1.262,1322.99 +19522.0,place order,2020-03-18 15:23:02.000Z, ,"['887227','887226','887225','887224','887223']","['991765']", , ,2.704,4161.0 +19523.0,pick item,2020-03-18 15:35:19.000Z, ,"['887150']", , , ,0.98,129.99 +19524.0,pick item,2020-03-18 15:39:07.000Z, ,"['887207']", , , ,0.98,129.99 +19525.0,pick item,2020-03-18 15:44:09.000Z, ,"['887113']", , , ,0.44,476.0 +19526.0,confirm order,2020-03-18 15:46:43.000Z, , ,"['991764']", , ,0.78,104.99 +19527.0,pay order,2020-03-18 16:25:54.000Z, , ,"['991400']", , ,2.978,4350.99 +19528.0,pick item,2020-03-18 16:44:18.000Z, ,"['887089']", , , ,0.172,699.0 +19529.0,package delivered,2020-03-18 16:45:45.000Z, , , ,"['661142']", ,2.714,3481.98 +19530.0,pay order,2020-03-18 16:56:52.000Z, , ,"['991712']", , ,3.42,364.96 +19531.0,pick item,2020-03-18 17:01:26.000Z, ,"['887226']", , , ,0.172,699.0 +19532.0,place order,2020-03-18 17:05:51.000Z, ,"['887232','887231','887228','887230','887229']","['991766']", , ,1.734,2213.98 +19533.0,pick item,2020-03-18 17:32:16.000Z, ,"['887223']", , , ,1.37,2500.0 +19534.0,package delivered,2020-03-18 17:35:14.000Z, , , ,"['661128']", ,3.68,3684.98 +19535.0,pick item,2020-03-18 18:11:05.000Z, ,"['887228']", , , ,0.2,39.99 +19536.0,create package,2020-03-18 18:11:05.000Z, ,"['887080','886806']", ,"['661144']", ,1.36,159.98 +19537.0,send package,2020-03-18 18:38:37.000Z, , , ,"['661143']", ,10.643,9736.95 +19538.0,place order,2020-03-18 18:57:08.000Z, ,"['887234','887233']","['991767']", , ,1.45,2244.99 +19539.0,reorder item,2020-03-18 20:22:35.000Z, ,"['887201']", , , ,0.38,29.99 +19540.0,item out of stock,2020-03-18 20:35:08.000Z, ,"['887215']", , , ,0.21,529.0 +19541.0,pick item,2020-03-18 20:38:37.000Z, ,"['887082']", , , ,0.88,89.99 +19542.0,pick item,2020-03-18 21:03:18.000Z, ,"['887187']", , , ,0.483,1099.0 +19543.0,create package,2020-03-18 21:03:18.000Z, ,"['886533','887220','886671','887144']", ,"['661145']", ,3.202,3388.98 +19544.0,place order,2020-03-18 22:33:51.000Z, ,"['887235','887237','887236']","['991768']", , ,2.74,314.97 +19545.0,pick item,2020-03-19 07:37:13.000Z, ,"['887103']", , , ,0.166,799.0 +19546.0,pick item,2020-03-19 07:53:15.000Z, ,"['887200']", , , ,0.98,129.99 +19547.0,pick item,2020-03-19 08:01:38.000Z, ,"['887203']", , , ,0.21,529.0 +19548.0,pick item,2020-03-19 08:09:48.000Z, ,"['887217']", , , ,1.28,149.99 +19549.0,create package,2020-03-19 08:09:48.000Z, ,"['886991']", ,"['661146']", ,1.28,149.99 +19550.0,failed delivery,2020-03-19 08:13:25.000Z, , , ,"['661139']", ,2.883,1844.97 +19551.0,confirm order,2020-03-19 08:13:25.000Z, , ,"['991765']", , ,2.704,4161.0 +19552.0,package delivered,2020-03-19 08:16:53.000Z, , , ,"['661139']", ,2.883,1844.97 +19553.0,confirm order,2020-03-19 08:19:22.000Z, , ,"['991768']", , ,2.74,314.97 +19554.0,package delivered,2020-03-19 08:19:30.000Z, , , ,"['661143']", ,10.643,9736.95 +19555.0,pay order,2020-03-19 08:22:08.000Z, , ,"['991723']", , ,2.332,943.98 +19556.0,pick item,2020-03-19 08:27:01.000Z, ,"['887230']", , , ,0.483,495.0 +19557.0,create package,2020-03-19 08:27:01.000Z, ,"['887115','887117','887113','887173','887036','887175','887174']", ,"['661147']", ,3.0410000000000004,1873.96 +19558.0,place order,2020-03-19 08:32:12.000Z, ,"['887240','887239','887238','887241','887242']","['991769']", , ,2.678,1928.98 +19559.0,pick item,2020-03-19 08:46:25.000Z, ,"['887159']", , , ,1.37,2500.0 +19560.0,pick item,2020-03-19 08:47:13.000Z, ,"['887172']", , , ,0.88,89.99 +19561.0,pick item,2020-03-19 08:49:42.000Z, ,"['887176']", , , ,1.25,2200.0 +19562.0,pay order,2020-03-19 09:04:11.000Z, , ,"['991758']", , ,2.64,314.97 +19563.0,pick item,2020-03-19 09:07:03.000Z, ,"['887232']", , , ,0.38,29.99 +19564.0,pick item,2020-03-19 09:17:30.000Z, ,"['887196']", , , ,0.483,79.99 +19565.0,pick item,2020-03-19 09:30:54.000Z, ,"['887137']", , , ,0.44,476.0 +19566.0,pick item,2020-03-19 09:38:30.000Z, ,"['887122']", , , ,0.188,1149.0 +19567.0,create package,2020-03-19 09:38:30.000Z, ,"['887089','887090']", ,"['661148']", ,0.952,798.99 +19568.0,failed delivery,2020-03-19 09:40:53.000Z, , , ,"['661141']", ,5.148,4644.96 +19569.0,reorder item,2020-03-19 09:47:42.000Z, ,"['887202']", , , ,1.28,149.99 +19570.0,pick item,2020-03-19 09:55:00.000Z, ,"['886670']", , , ,0.188,1149.0 +19571.0,send package,2020-03-19 09:59:43.000Z, , , ,"['661148']", ,0.952,798.99 +19572.0,confirm order,2020-03-19 10:06:36.000Z, , ,"['991767']", , ,1.45,2244.99 +19573.0,pick item,2020-03-19 10:09:48.000Z, ,"['887216']", , , ,0.483,1099.0 +19574.0,create package,2020-03-19 10:09:48.000Z, ,"['887126','887099','887158','887127']", ,"['661149']", ,2.772,1414.98 +19575.0,place order,2020-03-19 10:24:11.000Z, ,"['887246','887243','887245','887244']","['991770']", , ,3.816,4298.99 +19576.0,confirm order,2020-03-19 10:34:07.000Z, , ,"['991769']", , ,2.678,1928.98 +19577.0,pick item,2020-03-19 10:52:41.000Z, ,"['887221']", , , ,0.172,699.0 +19578.0,package delivered,2020-03-19 10:55:55.000Z, , , ,"['661141']", ,5.148,4644.96 +19579.0,pick item,2020-03-19 10:57:17.000Z, ,"['887224']", , , ,0.172,699.0 +19580.0,reorder item,2020-03-19 10:58:43.000Z, ,"['887170']", , , ,0.172,699.0 +19581.0,pick item,2020-03-19 11:00:27.000Z, ,"['887218']", , , ,0.28,89.99 +19582.0,item out of stock,2020-03-19 11:23:44.000Z, ,"['887227']", , , ,0.495,129.0 +19583.0,confirm order,2020-03-19 11:31:10.000Z, , ,"['991761']", , ,3.23,2724.98 +19584.0,pick item,2020-03-19 11:35:06.000Z, ,"['887235']", , , ,0.88,89.99 +19585.0,create package,2020-03-19 11:35:06.000Z, ,"['887189','887192','887177','887179','887187','887193','887186','887194','887164','887132','887166','887178','887191','887165','887196']", ,"['661150']", ,6.465,9624.94 +19586.0,reorder item,2020-03-19 11:52:52.000Z, ,"['887198']", , , ,0.483,1099.0 +19587.0,place order,2020-03-19 12:08:10.000Z, ,"['887247']","['991771']", , ,0.98,134.99 +19588.0,confirm order,2020-03-19 12:24:34.000Z, , ,"['991759']", , ,1.97,763.98 +19589.0,pay order,2020-03-19 12:55:06.000Z, , ,"['991753']", , ,4.078,4811.98 +19590.0,pick item,2020-03-19 13:26:15.000Z, ,"['887198']", , , ,0.483,1099.0 +19591.0,pay order,2020-03-19 13:29:51.000Z, , ,"['991763']", , ,1.262,1322.99 +19592.0,place order,2020-03-19 13:36:07.000Z, ,"['887249','887250','887248']","['991772']", , ,1.54,214.97 +19593.0,pay order,2020-03-19 13:40:47.000Z, , ,"['991760']", , ,3.62,504.95 +19594.0,pick item,2020-03-19 13:46:20.000Z, ,"['887156']", , , ,1.37,2500.0 +19595.0,send package,2020-03-19 13:51:18.000Z, , , ,"['661149']", ,2.772,1414.98 +19596.0,pick item,2020-03-19 13:58:24.000Z, ,"['887249']", , , ,0.28,89.99 +19597.0,pick item,2020-03-19 14:05:33.000Z, ,"['887167']", , , ,0.38,29.99 +19598.0,pay order,2020-03-19 14:10:56.000Z, , ,"['991730']", , ,1.162,1332.99 +19599.0,pick item,2020-03-19 14:11:56.000Z, ,"['886805']", , , ,0.188,1149.0 +19600.0,pay order,2020-03-19 14:21:25.000Z, , ,"['991747']", , ,3.346,6402.0 +19601.0,pay order,2020-03-19 14:33:45.000Z, , ,"['991706']", , ,0.693,1029.0 +19602.0,reorder item,2020-03-19 14:41:11.000Z, ,"['887046']", , , ,1.37,2500.0 +19603.0,item out of stock,2020-03-19 15:02:15.000Z, ,"['887153']", , , ,1.48,199.99 +19604.0,send package,2020-03-19 15:05:50.000Z, , , ,"['661144']", ,1.36,159.98 +19605.0,failed delivery,2020-03-19 15:06:27.000Z, , , ,"['661149']", ,2.772,1414.98 +19606.0,send package,2020-03-19 15:26:08.000Z, , , ,"['661150']", ,6.465,9624.94 +19607.0,pick item,2020-03-19 15:26:23.000Z, ,"['887188']", , , ,1.25,2200.0 +19608.0,pay order,2020-03-19 15:31:02.000Z, , ,"['991762']", , ,2.736,2367.98 +19609.0,place order,2020-03-19 15:32:01.000Z, ,"['887251','887252','887254','887253','887255']","['991773']", , ,2.4530000000000003,1912.97 +19610.0,pick item,2020-03-19 15:43:47.000Z, ,"['887238']", , , ,0.28,89.99 +19611.0,pick item,2020-03-19 15:50:58.000Z, ,"['887233']", , , ,0.2,39.99 +19612.0,pick item,2020-03-19 15:51:20.000Z, ,"['887241']", , , ,0.44,476.0 +19613.0,pay order,2020-03-19 15:53:25.000Z, , ,"['991769']", , ,2.678,1928.98 +19614.0,pick item,2020-03-19 15:57:38.000Z, ,"['887197']", , , ,0.38,29.99 +19615.0,package delivered,2020-03-19 16:00:17.000Z, , , ,"['661148']", ,0.952,798.99 +19616.0,pick item,2020-03-19 16:06:36.000Z, ,"['887180']", , , ,0.188,1149.0 +19617.0,pick item,2020-03-19 16:24:29.000Z, ,"['886993']", , , ,0.21,529.0 +19618.0,pick item,2020-03-19 16:30:51.000Z, ,"['887248']", , , ,0.38,29.99 +19619.0,reorder item,2020-03-19 16:36:00.000Z, ,"['887195']", , , ,0.21,529.0 +19620.0,pick item,2020-03-19 16:42:41.000Z, ,"['887212']", , , ,0.88,89.99 +19621.0,package delivered,2020-03-19 16:53:35.000Z, , , ,"['661150']", ,6.465,9624.94 +19622.0,confirm order,2020-03-19 17:01:39.000Z, , ,"['991770']", , ,3.816,4298.99 +19623.0,package delivered,2020-03-19 17:02:21.000Z, , , ,"['661144']", ,1.36,159.98 +19624.0,pay order,2020-03-19 17:07:01.000Z, , ,"['991754']", , ,3.306,4002.98 +19625.0,place order,2020-03-19 17:23:50.000Z, ,"['887257','887258','887256']","['991774']", , ,1.243,559.98 +19626.0,item out of stock,2020-03-19 17:26:17.000Z, ,"['887247']", , , ,0.98,129.99 +19627.0,send package,2020-03-19 17:39:04.000Z, , , ,"['661146']", ,1.28,149.99 +19628.0,send package,2020-03-19 18:00:43.000Z, , , ,"['661145']", ,3.202,3388.98 +19629.0,pick item,2020-03-19 18:48:09.000Z, ,"['887239']", , , ,0.483,1099.0 +19630.0,create package,2020-03-19 18:48:09.000Z, ,"['887111','887145','887147','887110']", ,"['661151']", ,1.4580000000000002,1716.99 +19631.0,pick item,2020-03-19 19:41:15.000Z, ,"['887219']", , , ,0.21,529.0 +19632.0,place order,2020-03-19 19:51:05.000Z, ,"['887259','887260','887261']","['991775']", , ,2.1,670.98 +19633.0,item out of stock,2020-03-19 20:20:30.000Z, ,"['887206']", , , ,0.28,89.99 +19634.0,send package,2020-03-19 20:46:43.000Z, , , ,"['661147']", ,3.0410000000000004,1873.96 +19635.0,create package,2020-03-19 23:00:00.000Z, ,"['887122','887120','887233']", ,"['661152']", ,0.768,1218.98 +19636.0,place order,2020-03-20 01:24:24.000Z, ,"['887263','887264','887262','887267','887268','887266','887265']","['991776']", , ,2.738,2032.95 +19637.0,pick item,2020-03-20 07:28:41.000Z, ,"['887268']", , , ,1.28,149.99 +19638.0,item out of stock,2020-03-20 07:56:34.000Z, ,"['887251']", , , ,0.21,529.0 +19639.0,reorder item,2020-03-20 08:17:15.000Z, ,"['887247']", , , ,0.98,129.99 +19640.0,pick item,2020-03-20 08:18:59.000Z, ,"['887263']", , , ,0.188,1149.0 +19641.0,pick item,2020-03-20 08:19:05.000Z, ,"['887261']", , , ,0.88,89.99 +19642.0,package delivered,2020-03-20 08:20:32.000Z, , , ,"['661147']", ,3.0410000000000004,1873.96 +19643.0,pick item,2020-03-20 08:40:05.000Z, ,"['887237']", , , ,0.98,129.99 +19644.0,place order,2020-03-20 08:40:37.000Z, ,"['887271','887269','887270']","['991777']", , ,1.84,334.97 +19645.0,confirm order,2020-03-20 08:45:37.000Z, , ,"['991774']", , ,1.243,559.98 +19646.0,send package,2020-03-20 09:03:48.000Z, , , ,"['661152']", ,0.768,1218.98 +19647.0,pick item,2020-03-20 09:15:50.000Z, ,"['886824']", , , ,0.78,99.99 +19648.0,confirm order,2020-03-20 09:31:10.000Z, , ,"['991743']", , ,0.78,104.99 +19649.0,pick item,2020-03-20 09:38:51.000Z, ,"['887214']", , , ,0.483,495.0 +19650.0,create package,2020-03-20 09:38:51.000Z, ,"['887182','887181','887180','886185']", ,"['661153']", ,2.3280000000000003,1817.98 +19651.0,pick item,2020-03-20 09:46:13.000Z, ,"['887243']", , , ,0.483,495.0 +19652.0,pick item,2020-03-20 09:46:15.000Z, ,"['887269']", , , ,0.28,89.99 +19653.0,pick item,2020-03-20 10:25:31.000Z, ,"['887271']", , , ,1.28,149.99 +19654.0,place order,2020-03-20 10:41:02.000Z, ,"['887276','887274','887275','887273','887272']","['991778']", , ,2.66,3269.98 +19655.0,pay order,2020-03-20 10:41:58.000Z, , ,"['991761']", , ,3.23,2724.98 +19656.0,confirm order,2020-03-20 10:48:11.000Z, , ,"['991771']", , ,0.98,134.99 +19657.0,pick item,2020-03-20 10:49:58.000Z, ,"['886529']", , , ,0.28,89.99 +19658.0,create package,2020-03-20 10:49:58.000Z, ,"['887103','887159','887261','887163']", ,"['661154']", ,2.696,3837.99 +19659.0,reorder item,2020-03-20 11:13:11.000Z, ,"['887251']", , , ,0.21,529.0 +19660.0,pick item,2020-03-20 11:34:39.000Z, ,"['887256']", , , ,0.38,29.99 +19661.0,reorder item,2020-03-20 11:38:25.000Z, ,"['887215']", , , ,0.21,529.0 +19662.0,failed delivery,2020-03-20 12:25:11.000Z, , , ,"['661145']", ,3.202,3388.98 +19663.0,place order,2020-03-20 12:41:51.000Z, ,"['887277']","['991779']", , ,0.166,804.0 +19664.0,confirm order,2020-03-20 12:43:05.000Z, , ,"['991778']", , ,2.66,3269.98 +19665.0,send package,2020-03-20 13:04:05.000Z, , , ,"['661151']", ,1.4580000000000002,1716.99 +19666.0,pick item,2020-03-20 13:07:21.000Z, ,"['887275']", , , ,1.25,2200.0 +19667.0,package delivered,2020-03-20 13:07:51.000Z, , , ,"['661151']", ,1.4580000000000002,1716.99 +19668.0,pick item,2020-03-20 13:28:00.000Z, ,"['887201']", , , ,0.38,29.99 +19669.0,package delivered,2020-03-20 13:42:46.000Z, , , ,"['661146']", ,1.28,149.99 +19670.0,item out of stock,2020-03-20 13:44:16.000Z, ,"['887231']", , , ,0.483,495.0 +19671.0,pick item,2020-03-20 13:49:27.000Z, ,"['886635']", , , ,0.483,1099.0 +19672.0,create package,2020-03-20 13:49:27.000Z, ,"['886993','887203','887204','887205','887137']", ,"['661155']", ,2.62,1763.98 +19673.0,pay order,2020-03-20 13:50:11.000Z, , ,"['991743']", , ,0.78,104.99 +19674.0,pay order,2020-03-20 14:05:29.000Z, , ,"['991767']", , ,1.45,2244.99 +19675.0,pick item,2020-03-20 14:05:38.000Z, ,"['887276']", , , ,0.38,29.99 +19676.0,send package,2020-03-20 14:16:44.000Z, , , ,"['661153']", ,2.3280000000000003,1817.98 +19677.0,pick item,2020-03-20 14:27:23.000Z, ,"['886922']", , , ,0.28,449.0 +19678.0,pick item,2020-03-20 14:35:32.000Z, ,"['887257']", , , ,0.38,29.99 +19679.0,pick item,2020-03-20 14:36:45.000Z, ,"['887255']", , , ,1.28,149.99 +19680.0,reorder item,2020-03-20 14:37:04.000Z, ,"['887206']", , , ,0.28,89.99 +19681.0,confirm order,2020-03-20 14:37:12.000Z, , ,"['991773']", , ,2.4530000000000003,1912.97 +19682.0,place order,2020-03-20 14:43:30.000Z, ,"['887279','887278']","['991780']", , ,0.763,174.98 +19683.0,package delivered,2020-03-20 15:18:54.000Z, , , ,"['661152']", ,0.768,1218.98 +19684.0,pick item,2020-03-20 15:28:57.000Z, ,"['887035']", , , ,1.25,2200.0 +19685.0,create package,2020-03-20 15:28:57.000Z, ,"['887243','887172','887209','887082','887207']", ,"['661156']", ,4.103,894.96 +19686.0,pick item,2020-03-20 15:34:13.000Z, ,"['887210']", , , ,1.28,149.99 +19687.0,pick item,2020-03-20 15:40:23.000Z, ,"['887242']", , , ,0.495,129.0 +19688.0,pick item,2020-03-20 15:42:16.000Z, ,"['886929']", , , ,0.483,79.99 +19689.0,confirm order,2020-03-20 15:46:52.000Z, , ,"['991775']", , ,2.1,670.98 +19690.0,pick item,2020-03-20 15:51:44.000Z, ,"['887234']", , , ,1.25,2200.0 +19691.0,confirm order,2020-03-20 15:53:51.000Z, , ,"['991776']", , ,2.738,2032.95 +19692.0,package delivered,2020-03-20 15:58:20.000Z, , , ,"['661153']", ,2.3280000000000003,1817.98 +19693.0,package delivered,2020-03-20 16:01:08.000Z, , , ,"['661149']", ,2.772,1414.98 +19694.0,failed delivery,2020-03-20 16:03:28.000Z, , , ,"['661145']", ,3.202,3388.98 +19695.0,reorder item,2020-03-20 16:06:43.000Z, ,"['887135']", , , ,0.483,1099.0 +19696.0,place order,2020-03-20 16:46:47.000Z, ,"['887283','887280','887284','887281','887282']","['991781']", , ,3.353,4088.99 +19697.0,send package,2020-03-20 17:23:35.000Z, , , ,"['661155']", ,2.62,1763.98 +19698.0,confirm order,2020-03-20 17:41:37.000Z, , ,"['991780']", , ,0.763,174.98 +19699.0,pick item,2020-03-20 18:43:14.000Z, ,"['887259']", , , ,0.44,476.0 +19700.0,create package,2020-03-20 18:43:14.000Z, ,"['886976','887226','887224','887223']", ,"['661157']", ,1.994,3987.99 +19701.0,place order,2020-03-20 18:59:56.000Z, ,"['887287','887288','887285','887286']","['991782']", , ,2.528,1493.97 +19702.0,reorder item,2020-03-20 19:45:43.000Z, ,"['887153']", , , ,1.48,199.99 +19703.0,place order,2020-03-20 22:39:27.000Z, ,"['887289','887290']","['991783']", , ,1.36,164.98 +19704.0,place order,2020-03-21 21:58:09.000Z, ,"['887294','887293','887292','887291']","['991784']", , ,2.226,799.97 +19705.0,payment reminder,2020-03-22 10:46:42.000Z, , ,"['991652']", , ,2.375,1824.99 +19706.0,place order,2020-03-22 22:44:06.000Z, ,"['887295','887296']","['991785']", , ,0.56,543.99 +19707.0,pay order,2020-03-23 07:47:12.000Z, , ,"['991778']", , ,2.66,3269.98 +19708.0,place order,2020-03-23 08:45:44.000Z, ,"['887298','887297']","['991786']", , ,1.475,263.99 +19709.0,pick item,2020-03-23 09:03:38.000Z, ,"['887292']", , , ,0.98,129.99 +19710.0,reorder item,2020-03-23 09:09:02.000Z, ,"['887072']", , , ,0.483,79.99 +19711.0,pick item,2020-03-23 09:10:09.000Z, ,"['887183']", , , ,1.37,2500.0 +19712.0,confirm order,2020-03-23 09:12:21.000Z, , ,"['991784']", , ,2.226,799.97 +19713.0,pick item,2020-03-23 09:32:36.000Z, ,"['887250']", , , ,0.88,89.99 +19714.0,confirm order,2020-03-23 09:34:05.000Z, , ,"['991766']", , ,1.734,2213.98 +19715.0,payment reminder,2020-03-23 09:36:46.000Z, , ,"['991666']", , ,1.87,723.98 +19716.0,pick item,2020-03-23 09:40:28.000Z, ,"['887272']", , , ,0.44,476.0 +19717.0,create package,2020-03-23 09:40:28.000Z, ,"['886997']", ,"['661158']", ,0.21,529.0 +19718.0,pay order,2020-03-23 09:46:24.000Z, , ,"['991637']", , ,1.18,3230.99 +19719.0,confirm order,2020-03-23 09:54:13.000Z, , ,"['991779']", , ,0.166,804.0 +19720.0,confirm order,2020-03-23 09:56:47.000Z, , ,"['991782']", , ,2.528,1493.97 +19721.0,pick item,2020-03-23 10:09:12.000Z, ,"['886531']", , , ,0.172,699.0 +19722.0,create package,2020-03-23 10:09:12.000Z, ,"['887212','887150','887156']", ,"['661159']", ,3.23,2719.98 +19723.0,pick item,2020-03-23 10:09:44.000Z, ,"['887284']", , , ,0.495,129.0 +19724.0,pick item,2020-03-23 10:20:38.000Z, ,"['887293']", , , ,0.483,495.0 +19725.0,pick item,2020-03-23 10:50:32.000Z, ,"['886834']", , , ,0.98,129.99 +19726.0,create package,2020-03-23 10:50:32.000Z, ,"['887214','887232','887230','887216','887228','887217','886824','887218','886670']", ,"['661160']", ,4.557,3647.95 +19727.0,send package,2020-03-23 10:51:00.000Z, , , ,"['661157']", ,1.994,3987.99 +19728.0,pay order,2020-03-23 10:51:14.000Z, , ,"['991764']", , ,0.78,104.99 +19729.0,place order,2020-03-23 10:51:15.000Z, ,"['887301','887300','887299','887302']","['991787']", , ,3.505,2563.98 +19730.0,payment reminder,2020-03-23 10:53:14.000Z, , ,"['991556']", , ,3.283,3281.97 +19731.0,item out of stock,2020-03-23 10:53:46.000Z, ,"['887264']", , , ,0.21,529.0 +19732.0,pay order,2020-03-23 10:58:06.000Z, , ,"['991702']", , ,4.5760000000000005,4608.98 +19733.0,pick item,2020-03-23 11:04:55.000Z, ,"['887283']", , , ,1.25,2200.0 +19734.0,item out of stock,2020-03-23 11:08:30.000Z, ,"['887274']", , , ,0.38,29.99 +19735.0,send package,2020-03-23 11:34:59.000Z, , , ,"['661159']", ,3.23,2719.98 +19736.0,failed delivery,2020-03-23 11:40:59.000Z, , , ,"['661145']", ,3.202,3388.98 +19737.0,pay order,2020-03-23 11:45:09.000Z, , ,"['991731']", , ,3.9,444.95 +19738.0,package delivered,2020-03-23 12:30:31.000Z, , , ,"['661155']", ,2.62,1763.98 +19739.0,send package,2020-03-23 12:40:53.000Z, , , ,"['661156']", ,4.103,894.96 +19740.0,send package,2020-03-23 12:42:19.000Z, , , ,"['661154']", ,2.696,3837.99 +19741.0,place order,2020-03-23 13:02:18.000Z, ,"['887305','887307','887306','887304','887303']","['991788']", , ,1.916,1121.98 +19742.0,pay order,2020-03-23 13:11:45.000Z, , ,"['991684']", , ,0.6559999999999999,2392.99 +19743.0,pay order,2020-03-23 13:21:35.000Z, , ,"['991755']", , ,1.203,650.98 +19744.0,pick item,2020-03-23 13:28:19.000Z, ,"['887245']", , , ,1.37,2500.0 +19745.0,payment reminder,2020-03-23 13:28:34.000Z, , ,"['991672']", , ,6.252999999999999,3084.94 +19746.0,pick item,2020-03-23 13:37:14.000Z, ,"['887246']", , , ,1.48,199.99 +19747.0,package delivered,2020-03-23 13:45:51.000Z, , , ,"['661154']", ,2.696,3837.99 +19748.0,item out of stock,2020-03-23 13:50:00.000Z, ,"['887270']", , , ,0.28,89.99 +19749.0,pick item,2020-03-23 13:50:59.000Z, ,"['887253']", , , ,0.28,89.99 +19750.0,pick item,2020-03-23 13:56:32.000Z, ,"['887265']", , , ,0.2,39.99 +19751.0,pick item,2020-03-23 13:59:13.000Z, ,"['886987']", , , ,0.28,89.99 +19752.0,pick item,2020-03-23 14:16:10.000Z, ,"['887190']", , , ,0.21,529.0 +19753.0,place order,2020-03-23 14:24:23.000Z, ,"['887308','887309','887310']","['991789']", , ,2.53,2634.98 +19754.0,pick item,2020-03-23 14:26:10.000Z, ,"['887199']", , , ,1.25,2200.0 +19755.0,confirm order,2020-03-23 14:33:52.000Z, , ,"['991772']", , ,1.54,214.97 +19756.0,item out of stock,2020-03-23 14:39:52.000Z, ,"['887208']", , , ,0.2,39.99 +19757.0,package delivered,2020-03-23 14:51:01.000Z, , , ,"['661156']", ,4.103,894.96 +19758.0,confirm order,2020-03-23 14:58:48.000Z, , ,"['991781']", , ,3.353,4088.99 +19759.0,pick item,2020-03-23 15:09:55.000Z, ,"['887202']", , , ,1.28,149.99 +19760.0,create package,2020-03-23 15:09:55.000Z, ,"['886529','887248','887249','887201','887202','887221','887250','887219','887200']", ,"['661161']", ,4.842,1837.93 +19761.0,pick item,2020-03-23 15:10:48.000Z, ,"['887247']", , , ,0.98,129.99 +19762.0,pick item,2020-03-23 15:11:42.000Z, ,"['887281']", , , ,0.98,129.99 +19763.0,package delivered,2020-03-23 15:22:06.000Z, , , ,"['661159']", ,3.23,2719.98 +19764.0,pick item,2020-03-23 15:24:17.000Z, ,"['887273']", , , ,0.21,529.0 +19765.0,pick item,2020-03-23 15:25:04.000Z, ,"['887266']", , , ,0.2,39.99 +19766.0,pay order,2020-03-23 15:34:43.000Z, , ,"['991757']", , ,1.25,2205.0 +19767.0,pick item,2020-03-23 15:38:51.000Z, ,"['887277']", , , ,0.166,799.0 +19768.0,pick item,2020-03-23 15:53:55.000Z, ,"['887285']", , , ,0.188,1149.0 +19769.0,package delivered,2020-03-23 15:56:26.000Z, , , ,"['661145']", ,3.202,3388.98 +19770.0,pick item,2020-03-23 15:58:03.000Z, ,"['887236']", , , ,0.88,89.99 +19771.0,pay order,2020-03-23 16:02:58.000Z, , ,"['991556']", , ,3.283,3281.97 +19772.0,pick item,2020-03-23 16:04:09.000Z, ,"['887300']", , , ,0.78,99.99 +19773.0,place order,2020-03-23 16:08:33.000Z, ,"['887315','887312','887314','887311','887313']","['991790']", , ,2.063,1316.99 +19774.0,pick item,2020-03-23 16:14:59.000Z, ,"['887307']", , , ,0.166,799.0 +19775.0,create package,2020-03-23 16:14:59.000Z, ,"['887035','887176']", ,"['661162']", ,2.5,4400.0 +19776.0,confirm order,2020-03-23 16:15:43.000Z, , ,"['991785']", , ,0.56,543.99 +19777.0,confirm order,2020-03-23 16:23:11.000Z, , ,"['991786']", , ,1.475,263.99 +19778.0,pay order,2020-03-23 16:27:26.000Z, , ,"['991752']", , ,0.5760000000000001,2342.99 +19779.0,pick item,2020-03-23 16:33:32.000Z, ,"['887310']", , , ,0.38,29.99 +19780.0,pay order,2020-03-23 17:22:31.000Z, , ,"['991631']", , ,2.295,4409.98 +19781.0,place order,2020-03-23 17:36:54.000Z, ,"['887316','887318','887317']","['991791']", , ,1.44,274.97 +19782.0,package delivered,2020-03-23 18:45:45.000Z, , , ,"['661157']", ,1.994,3987.99 +19783.0,place order,2020-03-23 20:30:17.000Z, ,"['887321','887319','887320']","['991792']", , ,4.11,7505.0 +19784.0,place order,2020-03-24 04:19:36.000Z, ,"['887325','887323','887324','887322']","['991793']", , ,1.173,1762.98 +19785.0,pick item,2020-03-24 07:38:01.000Z, ,"['887240']", , , ,0.98,129.99 +19786.0,create package,2020-03-24 07:38:01.000Z, ,"['887263','887235','887237','887268','887266','886805','887265','887236']", ,"['661163']", ,4.796,2837.94 +19787.0,send package,2020-03-24 07:54:30.000Z, , , ,"['661161']", ,4.842,1837.93 +19788.0,pick item,2020-03-24 07:58:04.000Z, ,"['887024']", , , ,0.98,129.99 +19789.0,pick item,2020-03-24 08:08:51.000Z, ,"['887301']", , , ,0.98,129.99 +19790.0,pick item,2020-03-24 08:32:33.000Z, ,"['887324']", , , ,0.21,529.0 +19791.0,confirm order,2020-03-24 08:32:51.000Z, , ,"['991792']", , ,4.11,7505.0 +19792.0,pick item,2020-03-24 08:44:16.000Z, ,"['887170']", , , ,0.172,699.0 +19793.0,place order,2020-03-24 08:53:21.000Z, ,"['887326','887329','887328','887327','887331','887330']","['991794']", , ,3.813,1837.97 +19794.0,confirm order,2020-03-24 09:14:28.000Z, , ,"['991787']", , ,3.505,2563.98 +19795.0,pick item,2020-03-24 09:15:54.000Z, ,"['887314']", , , ,0.483,495.0 +19796.0,pick item,2020-03-24 09:39:36.000Z, ,"['887297']", , , ,0.98,129.99 +19797.0,pick item,2020-03-24 09:48:26.000Z, ,"['887254']", , , ,0.483,1099.0 +19798.0,pick item,2020-03-24 09:48:59.000Z, ,"['887244']", , , ,0.483,1099.0 +19799.0,create package,2020-03-24 09:48:59.000Z, ,"['887190','887167','887199','887197','887198','887285','887275','887276','887272','887188','887273']", ,"['661164']", ,6.421,10471.97 +19800.0,confirm order,2020-03-24 09:49:34.000Z, , ,"['991791']", , ,1.44,274.97 +19801.0,pay order,2020-03-24 09:52:39.000Z, , ,"['991781']", , ,3.353,4088.99 +19802.0,pick item,2020-03-24 09:55:15.000Z, ,"['887326']", , , ,0.21,529.0 +19803.0,send package,2020-03-24 10:06:34.000Z, , , ,"['661158']", ,0.21,529.0 +19804.0,confirm order,2020-03-24 10:11:20.000Z, , ,"['991783']", , ,1.36,164.98 +19805.0,pick item,2020-03-24 10:12:04.000Z, ,"['887304']", , , ,0.495,129.0 +19806.0,item out of stock,2020-03-24 10:19:33.000Z, ,"['887252']", , , ,0.2,39.99 +19807.0,reorder item,2020-03-24 10:20:30.000Z, ,"['887208']", , , ,0.2,39.99 +19808.0,item out of stock,2020-03-24 10:24:13.000Z, ,"['887319']", , , ,1.37,2500.0 +19809.0,item out of stock,2020-03-24 10:35:29.000Z, ,"['887294']", , , ,0.483,79.99 +19810.0,pick item,2020-03-24 10:39:11.000Z, ,"['887299']", , , ,0.495,129.0 +19811.0,confirm order,2020-03-24 10:40:08.000Z, , ,"['991793']", , ,1.173,1762.98 +19812.0,pick item,2020-03-24 10:52:47.000Z, ,"['887260']", , , ,0.78,99.99 +19813.0,payment reminder,2020-03-24 10:57:17.000Z, , ,"['991673']", , ,1.095,2279.0 +19814.0,pay order,2020-03-24 10:59:31.000Z, , ,"['991770']", , ,3.816,4298.99 +19815.0,pay order,2020-03-24 11:00:49.000Z, , ,"['991648']", , ,3.905,3362.97 +19816.0,send package,2020-03-24 11:01:38.000Z, , , ,"['661162']", ,2.5,4400.0 +19817.0,place order,2020-03-24 11:06:29.000Z, ,"['887333','887336','887334','887335','887332']","['991795']", , ,1.887,2087.98 +19818.0,item out of stock,2020-03-24 11:08:31.000Z, ,"['887298']", , , ,0.495,129.0 +19819.0,pick item,2020-03-24 11:09:45.000Z, ,"['887318']", , , ,0.28,89.99 +19820.0,pick item,2020-03-24 11:17:26.000Z, ,"['887225']", , , ,0.495,129.0 +19821.0,item out of stock,2020-03-24 11:32:29.000Z, ,"['887313']", , , ,0.495,129.0 +19822.0,pick item,2020-03-24 12:13:00.000Z, ,"['887208']", , , ,0.2,39.99 +19823.0,pick item,2020-03-24 12:19:12.000Z, ,"['887306']", , , ,0.495,129.0 +19824.0,place order,2020-03-24 12:32:45.000Z, ,"['887340','887338','887337','887341','887339']","['991796']", , ,3.181,2287.98 +19825.0,pick item,2020-03-24 12:40:08.000Z, ,"['887308']", , , ,1.37,2500.0 +19826.0,pick item,2020-03-24 12:51:03.000Z, ,"['887282']", , , ,0.188,1149.0 +19827.0,pick item,2020-03-24 12:57:07.000Z, ,"['887229']", , , ,0.188,1149.0 +19828.0,create package,2020-03-24 12:57:07.000Z, ,"['887307','887239','887241','887304','887292','887306','887238','887242','887240','887293','886929']", ,"['661165']", ,5.78,3685.96 +19829.0,send package,2020-03-24 13:00:51.000Z, , , ,"['661160']", ,4.557,3647.95 +19830.0,package delivered,2020-03-24 13:02:00.000Z, , , ,"['661161']", ,4.842,1837.93 +19831.0,pick item,2020-03-24 13:14:46.000Z, ,"['886841']", , , ,0.483,1099.0 +19832.0,pick item,2020-03-24 13:21:02.000Z, ,"['887333']", , , ,0.172,699.0 +19833.0,item out of stock,2020-03-24 13:29:41.000Z, ,"['887303']", , , ,0.38,29.99 +19834.0,item out of stock,2020-03-24 13:30:38.000Z, ,"['887291']", , , ,0.28,89.99 +19835.0,pick item,2020-03-24 13:30:52.000Z, ,"['887335']", , , ,0.78,99.99 +19836.0,pick item,2020-03-24 13:32:54.000Z, ,"['887336']", , , ,0.28,89.99 +19837.0,package delivered,2020-03-24 13:35:45.000Z, , , ,"['661160']", ,4.557,3647.95 +19838.0,pick item,2020-03-24 13:53:20.000Z, ,"['887040']", , , ,0.483,1099.0 +19839.0,reorder item,2020-03-24 13:55:06.000Z, ,"['887294']", , , ,0.483,79.99 +19840.0,pick item,2020-03-24 14:11:58.000Z, ,"['887327']", , , ,1.48,199.99 +19841.0,reorder item,2020-03-24 14:14:57.000Z, ,"['887227']", , , ,0.495,129.0 +19842.0,place order,2020-03-24 14:25:18.000Z, ,"['887345','887344','887343','887346','887342']","['991797']", , ,3.885,6139.0 +19843.0,confirm order,2020-03-24 14:30:36.000Z, , ,"['991797']", , ,3.885,6139.0 +19844.0,confirm order,2020-03-24 14:31:02.000Z, , ,"['991790']", , ,2.063,1316.99 +19845.0,pay order,2020-03-24 14:36:33.000Z, , ,"['991230']", , ,2.426,1103.98 +19846.0,pick item,2020-03-24 14:40:57.000Z, ,"['887287']", , , ,1.28,149.99 +19847.0,pick item,2020-03-24 14:50:57.000Z, ,"['887342']", , , ,1.37,2500.0 +19848.0,package delivered,2020-03-24 14:57:18.000Z, , , ,"['661158']", ,0.21,529.0 +19849.0,send package,2020-03-24 15:02:09.000Z, , , ,"['661165']", ,5.78,3685.96 +19850.0,pick item,2020-03-24 15:07:16.000Z, ,"['887056']", , , ,1.28,149.99 +19851.0,item out of stock,2020-03-24 15:09:49.000Z, ,"['887309']", , , ,0.78,99.99 +19852.0,pick item,2020-03-24 15:12:17.000Z, ,"['887290']", , , ,0.98,129.99 +19853.0,package delivered,2020-03-24 15:18:27.000Z, , , ,"['661162']", ,2.5,4400.0 +19854.0,confirm order,2020-03-24 15:22:07.000Z, , ,"['991789']", , ,2.53,2634.98 +19855.0,pick item,2020-03-24 15:28:54.000Z, ,"['887338']", , , ,1.48,199.99 +19856.0,create package,2020-03-24 15:28:54.000Z, ,"['887271','887338','887269','887234']", ,"['661166']", ,4.29,2639.97 +19857.0,pay order,2020-03-24 15:32:08.000Z, , ,"['991791']", , ,1.44,274.97 +19858.0,item out of stock,2020-03-24 15:32:55.000Z, ,"['887288']", , , ,0.28,89.99 +19859.0,pick item,2020-03-24 15:35:10.000Z, ,"['887286']", , , ,0.78,99.99 +19860.0,reorder item,2020-03-24 15:36:58.000Z, ,"['887270']", , , ,0.28,89.99 +19861.0,send package,2020-03-24 15:42:16.000Z, , , ,"['661163']", ,4.796,2837.94 +19862.0,pick item,2020-03-24 15:50:45.000Z, ,"['887312']", , , ,0.38,29.99 +19863.0,item out of stock,2020-03-24 15:56:02.000Z, ,"['887337']", , , ,0.88,89.99 +19864.0,place order,2020-03-24 16:10:23.000Z, ,"['887347','887348']","['991798']", , ,0.98,144.98 +19865.0,pay order,2020-03-24 16:11:29.000Z, , ,"['991773']", , ,2.4530000000000003,1912.97 +19866.0,pick item,2020-03-24 16:13:47.000Z, ,"['887328']", , , ,0.483,495.0 +19867.0,pay order,2020-03-24 16:18:20.000Z, , ,"['991782']", , ,2.528,1493.97 +19868.0,pick item,2020-03-24 16:21:09.000Z, ,"['886710']", , , ,0.98,129.99 +19869.0,create package,2020-03-24 16:21:09.000Z, ,"['887257','887056','887259','887260','887256']", ,"['661167']", ,3.26,785.96 +19870.0,package delivered,2020-03-24 16:37:54.000Z, , , ,"['661165']", ,5.78,3685.96 +19871.0,send package,2020-03-24 16:40:11.000Z, , , ,"['661167']", ,3.26,785.96 +19872.0,confirm order,2020-03-24 16:50:23.000Z, , ,"['991794']", , ,3.813,1837.97 +19873.0,pick item,2020-03-24 17:01:29.000Z, ,"['887311']", , , ,0.21,529.0 +19874.0,pick item,2020-03-24 17:02:49.000Z, ,"['886756']", , , ,0.98,129.99 +19875.0,pick item,2020-03-24 17:11:50.000Z, ,"['887344']", , , ,0.495,129.0 +19876.0,pay order,2020-03-24 17:15:18.000Z, , ,"['991790']", , ,2.063,1316.99 +19877.0,pick item,2020-03-24 17:15:24.000Z, ,"['887289']", , , ,0.38,29.99 +19878.0,pay order,2020-03-24 17:20:24.000Z, , ,"['991587']", , ,1.643,679.98 +19879.0,reorder item,2020-03-24 17:24:35.000Z, ,"['887288']", , , ,0.28,89.99 +19880.0,pay order,2020-03-24 17:36:01.000Z, , ,"['991792']", , ,4.11,7505.0 +19881.0,place order,2020-03-24 17:40:34.000Z, ,"['887349','887351','887350']","['991799']", , ,2.78,4494.99 +19882.0,item out of stock,2020-03-24 17:47:03.000Z, ,"['887346']", , , ,0.44,476.0 +19883.0,confirm order,2020-03-24 17:57:45.000Z, , ,"['991788']", , ,1.916,1121.98 +19884.0,reorder item,2020-03-24 17:58:09.000Z, ,"['887274']", , , ,0.38,29.99 +19885.0,confirm order,2020-03-24 19:55:11.000Z, , ,"['991798']", , ,0.98,144.98 +19886.0,place order,2020-03-24 20:41:16.000Z, ,"['887353','887352']","['991800']", , ,0.863,1133.99 +19887.0,create package,2020-03-24 23:00:00.000Z, ,"['886635']", ,"['661168']", ,0.483,1099.0 +19888.0,place order,2020-03-25 05:25:31.000Z, ,"['887354','887356','887355']","['991801']", , ,2.513,3403.99 +19889.0,send package,2020-03-25 07:29:33.000Z, , , ,"['661166']", ,4.29,2639.97 +19890.0,pick item,2020-03-25 07:39:16.000Z, ,"['886890']", , , ,1.25,2200.0 +19891.0,pay order,2020-03-25 08:02:04.000Z, , ,"['991776']", , ,2.738,2032.95 +19892.0,pick item,2020-03-25 08:19:23.000Z, ,"['887222']", , , ,0.78,99.99 +19893.0,create package,2020-03-25 08:19:23.000Z, ,"['887283','886987','886922','887284','887281','887282']", ,"['661169']", ,3.4730000000000003,4146.98 +19894.0,pick item,2020-03-25 08:26:01.000Z, ,"['887323']", , , ,0.2,39.99 +19895.0,reorder item,2020-03-25 08:51:58.000Z, ,"['887303']", , , ,0.38,29.99 +19896.0,place order,2020-03-25 09:05:51.000Z, ,"['887357','887358','887359','887360']","['991802']", , ,3.623,1483.97 +19897.0,pick item,2020-03-25 09:13:45.000Z, ,"['887340']", , , ,0.483,495.0 +19898.0,item out of stock,2020-03-25 09:13:53.000Z, ,"['887352']", , , ,0.38,29.99 +19899.0,pick item,2020-03-25 09:20:25.000Z, ,"['887251']", , , ,0.21,529.0 +19900.0,pick item,2020-03-25 09:22:05.000Z, ,"['887316']", , , ,0.28,89.99 +19901.0,pay order,2020-03-25 09:26:15.000Z, , ,"['991766']", , ,1.734,2213.98 +19902.0,item out of stock,2020-03-25 09:26:17.000Z, ,"['887357']", , , ,0.483,1099.0 +19903.0,reorder item,2020-03-25 09:30:25.000Z, ,"['887252']", , , ,0.2,39.99 +19904.0,reorder item,2020-03-25 09:43:21.000Z, ,"['887231']", , , ,0.483,495.0 +19905.0,send package,2020-03-25 09:47:33.000Z, , , ,"['661168']", ,0.483,1099.0 +19906.0,package delivered,2020-03-25 10:00:00.000Z, , , ,"['661163']", ,4.796,2837.94 +19907.0,pick item,2020-03-25 10:06:03.000Z, ,"['887305']", , , ,0.38,29.99 +19908.0,pick item,2020-03-25 10:07:33.000Z, ,"['887347']", , , ,0.78,99.99 +19909.0,create package,2020-03-25 10:07:33.000Z, ,"['887326','887251','887254','887253','887255','887328','887327']", ,"['661170']", ,4.426,3091.97 +19910.0,pay order,2020-03-25 10:07:35.000Z, , ,"['991746']", , ,0.172,704.0 +19911.0,send package,2020-03-25 10:28:04.000Z, , , ,"['661164']", ,6.421,10471.97 +19912.0,item out of stock,2020-03-25 10:28:45.000Z, ,"['887334']", , , ,0.483,495.0 +19913.0,place order,2020-03-25 10:31:29.000Z, ,"['887361','887362']","['991803']", , ,0.49,983.0 +19914.0,confirm order,2020-03-25 10:37:51.000Z, , ,"['991795']", , ,1.887,2087.98 +19915.0,pay order,2020-03-25 10:39:44.000Z, , ,"['991788']", , ,1.916,1121.98 +19916.0,reorder item,2020-03-25 10:48:28.000Z, ,"['887337']", , , ,0.88,89.99 +19917.0,reorder item,2020-03-25 10:59:50.000Z, ,"['887309']", , , ,0.78,99.99 +19918.0,pay order,2020-03-25 11:15:48.000Z, , ,"['991652']", , ,2.375,1824.99 +19919.0,item out of stock,2020-03-25 11:22:10.000Z, ,"['887350']", , , ,0.28,89.99 +19920.0,confirm order,2020-03-25 11:39:13.000Z, , ,"['991803']", , ,0.49,983.0 +19921.0,pick item,2020-03-25 11:48:44.000Z, ,"['887322']", , , ,0.28,89.99 +19922.0,payment reminder,2020-03-25 12:05:47.000Z, , ,"['991681']", , ,2.23,2344.98 +19923.0,place order,2020-03-25 12:22:46.000Z, ,"['887365','887363','887364']","['991804']", , ,2.108,1829.99 +19924.0,confirm order,2020-03-25 12:28:31.000Z, , ,"['991801']", , ,2.513,3403.99 +19925.0,pick item,2020-03-25 12:29:47.000Z, ,"['887135']", , , ,0.483,1099.0 +19926.0,pay order,2020-03-25 12:32:09.000Z, , ,"['991768']", , ,2.74,314.97 +19927.0,reorder item,2020-03-25 12:33:40.000Z, ,"['887357']", , , ,0.483,1099.0 +19928.0,package delivered,2020-03-25 12:48:33.000Z, , , ,"['661166']", ,4.29,2639.97 +19929.0,pick item,2020-03-25 13:17:13.000Z, ,"['887359']", , , ,1.28,149.99 +19930.0,pay order,2020-03-25 13:17:40.000Z, , ,"['991784']", , ,2.226,799.97 +19931.0,confirm order,2020-03-25 13:27:36.000Z, , ,"['991796']", , ,3.181,2287.98 +19932.0,reorder item,2020-03-25 13:33:14.000Z, ,"['887291']", , , ,0.28,89.99 +19933.0,item out of stock,2020-03-25 13:34:03.000Z, ,"['887353']", , , ,0.483,1099.0 +19934.0,confirm order,2020-03-25 13:37:28.000Z, , ,"['991799']", , ,2.78,4494.99 +19935.0,send package,2020-03-25 13:57:18.000Z, , , ,"['661169']", ,3.4730000000000003,4146.98 +19936.0,pick item,2020-03-25 13:58:20.000Z, ,"['887365']", , , ,0.44,476.0 +19937.0,reorder item,2020-03-25 13:59:11.000Z, ,"['887264']", , , ,0.21,529.0 +19938.0,pick item,2020-03-25 14:03:37.000Z, ,"['887258']", , , ,0.483,495.0 +19939.0,place order,2020-03-25 14:05:19.000Z, ,"['887369','887368','887366','887367']","['991805']", , ,3.818,3933.98 +19940.0,pick item,2020-03-25 14:23:30.000Z, ,"['887317']", , , ,0.88,89.99 +19941.0,pick item,2020-03-25 14:25:19.000Z, ,"['887321']", , , ,1.37,2500.0 +19942.0,create package,2020-03-25 14:25:19.000Z, ,"['887333','887336','887210','886756','887246','887170','887244','887208','887335','887245','887024']", ,"['661171']", ,8.177,5836.93 +19943.0,pay order,2020-03-25 14:45:02.000Z, , ,"['991633']", , ,1.905,3399.0 +19944.0,pick item,2020-03-25 14:45:27.000Z, ,"['887361']", , , ,0.28,449.0 +19945.0,pay order,2020-03-25 14:50:44.000Z, , ,"['991795']", , ,1.887,2087.98 +19946.0,confirm order,2020-03-25 14:58:14.000Z, , ,"['991805']", , ,3.818,3933.98 +19947.0,confirm order,2020-03-25 15:28:34.000Z, , ,"['991800']", , ,0.863,1133.99 +19948.0,place order,2020-03-25 15:30:26.000Z, ,"['887371','887370','887373','887372']","['991806']", , ,3.52,474.96 +19949.0,pick item,2020-03-25 15:40:18.000Z, ,"['887264']", , , ,0.21,529.0 +19950.0,package delivered,2020-03-25 15:41:41.000Z, , , ,"['661167']", ,3.26,785.96 +19951.0,reorder item,2020-03-25 15:42:11.000Z, ,"['887298']", , , ,0.495,129.0 +19952.0,pay order,2020-03-25 15:50:05.000Z, , ,"['991779']", , ,0.166,804.0 +19953.0,pick item,2020-03-25 16:07:34.000Z, ,"['887294']", , , ,0.483,79.99 +19954.0,item out of stock,2020-03-25 16:09:39.000Z, ,"['887339']", , , ,0.172,699.0 +19955.0,pick item,2020-03-25 16:13:58.000Z, ,"['887014']", , , ,0.166,799.0 +19956.0,pick item,2020-03-25 16:14:10.000Z, ,"['887349']", , , ,1.25,2200.0 +19957.0,package delivered,2020-03-25 16:18:34.000Z, , , ,"['661168']", ,0.483,1099.0 +19958.0,send package,2020-03-25 16:47:52.000Z, , , ,"['661170']", ,4.426,3091.97 +19959.0,pick item,2020-03-25 17:08:40.000Z, ,"['887116']", , , ,1.25,2200.0 +19960.0,place order,2020-03-25 17:20:39.000Z, ,"['887374','887377','887378','887376','887375']","['991807']", , ,2.12,2907.98 +19961.0,pick item,2020-03-25 17:56:43.000Z, ,"['887298']", , , ,0.495,129.0 +19962.0,reorder item,2020-03-25 18:26:56.000Z, ,"['887334']", , , ,0.483,495.0 +19963.0,confirm order,2020-03-25 18:31:19.000Z, , ,"['991777']", , ,1.84,334.97 +19964.0,item out of stock,2020-03-25 18:49:42.000Z, ,"['887351']", , , ,1.25,2200.0 +19965.0,place order,2020-03-25 19:41:32.000Z, ,"['887382','887379','887380','887381']","['991808']", , ,5.21,2994.97 +19966.0,pick item,2020-03-25 19:44:13.000Z, ,"['887358']", , , ,1.48,199.99 +19967.0,pick item,2020-03-25 21:10:25.000Z, ,"['887354']", , , ,1.25,2200.0 +19968.0,place order,2020-03-26 00:27:06.000Z, ,"['887383','887384']","['991809']", , ,1.69,733.99 +19969.0,pick item,2020-03-26 08:10:28.000Z, ,"['887371']", , , ,0.88,89.99 +19970.0,pick item,2020-03-26 08:13:15.000Z, ,"['887360']", , , ,0.38,29.99 +19971.0,create package,2020-03-26 08:13:15.000Z, ,"['887371','887344','887277','887354','887183','887342']", ,"['661172']", ,5.5310000000000015,8217.99 +19972.0,pick item,2020-03-26 08:21:50.000Z, ,"['887378']", , , ,0.188,1149.0 +19973.0,item out of stock,2020-03-26 08:28:08.000Z, ,"['887295']", , , ,0.28,449.0 +19974.0,send package,2020-03-26 08:36:04.000Z, , , ,"['661171']", ,8.177,5836.93 +19975.0,confirm order,2020-03-26 08:37:05.000Z, , ,"['991804']", , ,2.108,1829.99 +19976.0,package delivered,2020-03-26 08:37:19.000Z, , , ,"['661171']", ,8.177,5836.93 +19977.0,place order,2020-03-26 08:37:36.000Z, ,"['887388','887385','887386','887387']","['991810']", , ,1.607,1997.99 +19978.0,confirm order,2020-03-26 08:49:54.000Z, , ,"['991808']", , ,5.21,2994.97 +19979.0,confirm order,2020-03-26 08:59:28.000Z, , ,"['991802']", , ,3.623,1483.97 +19980.0,reorder item,2020-03-26 09:01:29.000Z, ,"['887346']", , , ,0.44,476.0 +19981.0,pick item,2020-03-26 09:15:09.000Z, ,"['887019']", , , ,0.88,89.99 +19982.0,send package,2020-03-26 09:24:50.000Z, , , ,"['661172']", ,5.5310000000000015,8217.99 +19983.0,confirm order,2020-03-26 09:26:07.000Z, , ,"['991809']", , ,1.69,733.99 +19984.0,payment reminder,2020-03-26 09:26:25.000Z, , ,"['991691']", , ,0.6829999999999999,124.98 +19985.0,item out of stock,2020-03-26 09:34:55.000Z, ,"['887384']", , , ,0.21,529.0 +19986.0,item out of stock,2020-03-26 09:35:38.000Z, ,"['887329']", , , ,0.28,449.0 +19987.0,pay order,2020-03-26 09:40:50.000Z, , ,"['991774']", , ,1.243,559.98 +19988.0,reorder item,2020-03-26 09:51:28.000Z, ,"['887351']", , , ,1.25,2200.0 +19989.0,package delivered,2020-03-26 10:02:10.000Z, , , ,"['661170']", ,4.426,3091.97 +19990.0,item out of stock,2020-03-26 10:14:57.000Z, ,"['887325']", , , ,0.483,1099.0 +19991.0,payment reminder,2020-03-26 10:16:03.000Z, , ,"['991687']", , ,2.4,1949.99 +19992.0,pick item,2020-03-26 10:18:06.000Z, ,"['887372']", , , ,1.48,199.99 +19993.0,item out of stock,2020-03-26 10:26:01.000Z, ,"['887362']", , , ,0.21,529.0 +19994.0,place order,2020-03-26 10:34:59.000Z, ,"['887391','887389','887390']","['991811']", , ,1.334,2082.99 +19995.0,reorder item,2020-03-26 10:35:02.000Z, ,"['887339']", , , ,0.172,699.0 +19996.0,pay order,2020-03-26 10:47:32.000Z, , ,"['991793']", , ,1.173,1762.98 +19997.0,pick item,2020-03-26 10:51:45.000Z, ,"['887356']", , , ,0.78,99.99 +19998.0,pick item,2020-03-26 10:52:01.000Z, ,"['887388']", , , ,0.172,699.0 +19999.0,pick item,2020-03-26 10:54:40.000Z, ,"['887334']", , , ,0.483,495.0 +20000.0,create package,2020-03-26 10:54:40.000Z, ,"['887289','887298','887225','887290','887247','886531','887297']", ,"['661173']", ,4.482,1376.96 +20001.0,send package,2020-03-26 10:55:26.000Z, , , ,"['661173']", ,4.482,1376.96 +20002.0,pick item,2020-03-26 10:56:18.000Z, ,"['887018']", , , ,0.38,29.99 +20003.0,pick item,2020-03-26 11:08:29.000Z, ,"['887380']", , , ,1.48,199.99 +20004.0,item out of stock,2020-03-26 11:13:31.000Z, ,"['887280']", , , ,0.44,476.0 +20005.0,package delivered,2020-03-26 11:19:01.000Z, , , ,"['661169']", ,3.4730000000000003,4146.98 +20006.0,reorder item,2020-03-26 11:20:14.000Z, ,"['887384']", , , ,0.21,529.0 +20007.0,pay order,2020-03-26 11:27:31.000Z, , ,"['991804']", , ,2.108,1829.99 +20008.0,pick item,2020-03-26 11:56:45.000Z, ,"['887366']", , , ,1.28,149.99 +20009.0,confirm order,2020-03-26 12:08:01.000Z, , ,"['991806']", , ,3.52,474.96 +20010.0,place order,2020-03-26 12:29:46.000Z, ,"['887394','887393','887396','887395','887392']","['991812']", , ,2.248,1706.99 +20011.0,pick item,2020-03-26 12:42:18.000Z, ,"['887231']", , , ,0.483,495.0 +20012.0,item out of stock,2020-03-26 12:57:11.000Z, ,"['887320']", , , ,1.37,2500.0 +20013.0,pick item,2020-03-26 13:11:45.000Z, ,"['887315']", , , ,0.495,129.0 +20014.0,item out of stock,2020-03-26 13:16:06.000Z, ,"['887390']", , , ,0.166,799.0 +20015.0,item out of stock,2020-03-26 13:38:57.000Z, ,"['887302']", , , ,1.25,2200.0 +20016.0,item out of stock,2020-03-26 13:44:58.000Z, ,"['887374']", , , ,0.483,495.0 +20017.0,pick item,2020-03-26 13:54:29.000Z, ,"['887363']", , , ,0.188,1149.0 +20018.0,pick item,2020-03-26 14:05:15.000Z, ,"['887377']", , , ,0.483,79.99 +20019.0,create package,2020-03-26 14:05:15.000Z, ,"['887301','887300','887299','886834']", ,"['661174']", ,3.235,488.97 +20020.0,package delivered,2020-03-26 14:09:14.000Z, , , ,"['661164']", ,6.421,10471.97 +20021.0,pick item,2020-03-26 14:15:40.000Z, ,"['887369']", , , ,0.188,1149.0 +20022.0,place order,2020-03-26 14:19:19.000Z, ,"['887403','887399','887401','887406','887402','887405','887397','887400','887398','887404']","['991813']", , ,6.807,7685.97 +20023.0,package delivered,2020-03-26 14:35:46.000Z, , , ,"['661172']", ,5.5310000000000015,8217.99 +20024.0,pick item,2020-03-26 14:37:04.000Z, ,"['887303']", , , ,0.38,29.99 +20025.0,pick item,2020-03-26 14:49:15.000Z, ,"['887399']", , , ,0.166,799.0 +20026.0,reorder item,2020-03-26 15:01:19.000Z, ,"['887362']", , , ,0.21,529.0 +20027.0,pick item,2020-03-26 15:03:23.000Z, ,"['887355']", , , ,0.483,1099.0 +20028.0,create package,2020-03-26 15:03:23.000Z, ,"['887311','887377','887310','887116','887312','887314','887315','887308','887378']", ,"['661175']", ,5.239,7141.97 +20029.0,pick item,2020-03-26 15:21:33.000Z, ,"['887296']", , , ,0.28,89.99 +20030.0,pick item,2020-03-26 15:43:43.000Z, ,"['887330']", , , ,0.98,129.99 +20031.0,payment reminder,2020-03-26 15:43:46.000Z, , ,"['991697']", , ,0.92,969.99 +20032.0,package delivered,2020-03-26 15:46:18.000Z, , , ,"['661173']", ,4.482,1376.96 +20033.0,place order,2020-03-26 15:58:26.000Z, ,"['887407','887408']","['991814']", , ,1.08,134.98 +20034.0,reorder item,2020-03-26 16:10:51.000Z, ,"['887295']", , , ,0.28,449.0 +20035.0,item out of stock,2020-03-26 16:14:57.000Z, ,"['887401']", , , ,1.25,2200.0 +20036.0,pay order,2020-03-26 16:28:31.000Z, , ,"['991491']", , ,2.327,1022.98 +20037.0,pick item,2020-03-26 16:34:01.000Z, ,"['887206']", , , ,0.28,89.99 +20038.0,pay order,2020-03-26 16:57:19.000Z, , ,"['991806']", , ,3.52,474.96 +20039.0,item out of stock,2020-03-26 17:01:27.000Z, ,"['887381']", , , ,1.37,2500.0 +20040.0,pick item,2020-03-26 17:08:33.000Z, ,"['887367']", , , ,0.98,129.99 +20041.0,pick item,2020-03-26 17:13:18.000Z, ,"['887343']", , , ,0.21,529.0 +20042.0,pay order,2020-03-26 17:23:55.000Z, , ,"['991687']", , ,2.4,1949.99 +20043.0,pick item,2020-03-26 17:45:08.000Z, ,"['887393']", , , ,0.21,529.0 +20044.0,pick item,2020-03-26 17:50:11.000Z, ,"['887364']", , , ,1.48,199.99 +20045.0,place order,2020-03-26 18:16:39.000Z, ,"['887411','887412','887410','887413','887409']","['991815']", , ,2.417,5477.0 +20046.0,reorder item,2020-03-26 18:26:11.000Z, ,"['887374']", , , ,0.483,495.0 +20047.0,confirm order,2020-03-26 19:08:07.000Z, , ,"['991810']", , ,1.607,1997.99 +20048.0,pick item,2020-03-26 19:55:00.000Z, ,"['887368']", , , ,1.37,2500.0 +20049.0,pay order,2020-03-26 20:13:40.000Z, , ,"['991673']", , ,1.095,2279.0 +20050.0,place order,2020-03-26 21:12:53.000Z, ,"['887414','887418','887415','887417','887416']","['991816']", , ,1.7009999999999998,3554.0 +20051.0,place order,2020-03-27 07:17:21.000Z, ,"['887420','887419','887421']","['991817']", , ,3.055,433.98 +20052.0,pick item,2020-03-27 07:30:42.000Z, ,"['886996']", , , ,0.172,699.0 +20053.0,create package,2020-03-27 07:30:42.000Z, ,"['886996','887323','887349','887324','886890','887322']", ,"['661176']", ,3.362,5757.98 +20054.0,pick item,2020-03-27 07:31:59.000Z, ,"['887397']", , , ,0.88,89.99 +20055.0,pick item,2020-03-27 07:36:45.000Z, ,"['887373']", , , ,0.28,89.99 +20056.0,item out of stock,2020-03-27 07:48:53.000Z, ,"['887400']", , , ,0.495,129.0 +20057.0,pick item,2020-03-27 08:10:43.000Z, ,"['887405']", , , ,0.2,39.99 +20058.0,pick item,2020-03-27 08:21:04.000Z, ,"['887411']", , , ,1.37,2500.0 +20059.0,item out of stock,2020-03-27 08:25:06.000Z, ,"['887402']", , , ,0.483,495.0 +20060.0,item out of stock,2020-03-27 08:31:14.000Z, ,"['887420']", , , ,1.28,149.99 +20061.0,pick item,2020-03-27 08:47:02.000Z, ,"['887383']", , , ,1.48,199.99 +20062.0,pick item,2020-03-27 08:51:29.000Z, ,"['887407']", , , ,0.88,89.99 +20063.0,create package,2020-03-27 08:51:29.000Z, ,"['887222','887318','886710','886841','887231','887317','887229','887316','887040']", ,"['661177']", ,4.837,4341.95 +20064.0,pick item,2020-03-27 08:54:19.000Z, ,"['887376']", , , ,0.483,79.99 +20065.0,pick item,2020-03-27 08:59:00.000Z, ,"['887382']", , , ,1.48,199.99 +20066.0,item out of stock,2020-03-27 09:06:42.000Z, ,"['887341']", , , ,0.166,799.0 +20067.0,reorder item,2020-03-27 09:12:58.000Z, ,"['887341']", , , ,0.166,799.0 +20068.0,place order,2020-03-27 09:15:48.000Z, ,"['887422']","['991818']", , ,0.2,44.99 +20069.0,send package,2020-03-27 09:24:05.000Z, , , ,"['661174']", ,3.235,488.97 +20070.0,pick item,2020-03-27 09:43:42.000Z, ,"['887419']", , , ,0.495,129.0 +20071.0,pick item,2020-03-27 09:44:03.000Z, ,"['887392']", , , ,0.28,449.0 +20072.0,pick item,2020-03-27 09:57:07.000Z, ,"['886781']", , , ,0.88,89.99 +20073.0,confirm order,2020-03-27 10:07:57.000Z, , ,"['991817']", , ,3.055,433.98 +20074.0,confirm order,2020-03-27 10:09:54.000Z, , ,"['991814']", , ,1.08,134.98 +20075.0,send package,2020-03-27 10:10:29.000Z, , , ,"['661176']", ,3.362,5757.98 +20076.0,item out of stock,2020-03-27 10:19:32.000Z, ,"['887387']", , , ,0.172,699.0 +20077.0,send package,2020-03-27 10:28:48.000Z, , , ,"['661175']", ,5.239,7141.97 +20078.0,confirm order,2020-03-27 10:32:14.000Z, , ,"['991818']", , ,0.2,44.99 +20079.0,pay order,2020-03-27 10:43:26.000Z, , ,"['991672']", , ,6.252999999999999,3084.94 +20080.0,reorder item,2020-03-27 10:46:56.000Z, ,"['887319']", , , ,1.37,2500.0 +20081.0,place order,2020-03-27 10:51:24.000Z, ,"['887423','887424']","['991819']", , ,1.463,214.98 +20082.0,reorder item,2020-03-27 10:53:31.000Z, ,"['887390']", , , ,0.166,799.0 +20083.0,pick item,2020-03-27 10:55:43.000Z, ,"['887423']", , , ,0.98,129.99 +20084.0,confirm order,2020-03-27 11:01:40.000Z, , ,"['991813']", , ,6.807,7685.97 +20085.0,item out of stock,2020-03-27 11:03:32.000Z, ,"['887417']", , , ,0.44,476.0 +20086.0,pick item,2020-03-27 11:03:36.000Z, ,"['887118']", , , ,0.2,39.99 +20087.0,pick item,2020-03-27 11:08:49.000Z, ,"['887267']", , , ,0.28,89.99 +20088.0,pick item,2020-03-27 11:09:49.000Z, ,"['887416']", , , ,0.166,799.0 +20089.0,create package,2020-03-27 11:09:49.000Z, ,"['887287','887286','887135']", ,"['661178']", ,2.543,1348.98 +20090.0,pick item,2020-03-27 11:17:11.000Z, ,"['887370']", , , ,0.88,89.99 +20091.0,pick item,2020-03-27 11:17:55.000Z, ,"['887279']", , , ,0.28,89.99 +20092.0,reorder item,2020-03-27 11:28:55.000Z, ,"['887352']", , , ,0.38,29.99 +20093.0,pick item,2020-03-27 11:53:39.000Z, ,"['887332']", , , ,0.172,699.0 +20094.0,create package,2020-03-27 11:53:39.000Z, ,"['887340','887393','887392','887361']", ,"['661179']", ,1.253,1922.0 +20095.0,send package,2020-03-27 11:54:56.000Z, , , ,"['661178']", ,2.543,1348.98 +20096.0,failed delivery,2020-03-27 12:10:42.000Z, , , ,"['661174']", ,3.235,488.97 +20097.0,place order,2020-03-27 13:02:35.000Z, ,"['887426','887425']","['991820']", , ,0.66,483.99 +20098.0,confirm order,2020-03-27 13:10:48.000Z, , ,"['991812']", , ,2.248,1706.99 +20099.0,failed delivery,2020-03-27 13:31:48.000Z, , , ,"['661178']", ,2.543,1348.98 +20100.0,pick item,2020-03-27 13:34:45.000Z, ,"['887395']", , , ,0.495,129.0 +20101.0,pick item,2020-03-27 13:37:49.000Z, ,"['887426']", , , ,0.28,449.0 +20102.0,pay order,2020-03-27 13:44:08.000Z, , ,"['991736']", , ,3.731,4473.98 +20103.0,reorder item,2020-03-27 13:46:59.000Z, ,"['887302']", , , ,1.25,2200.0 +20104.0,pick item,2020-03-27 13:56:01.000Z, ,"['887418']", , , ,0.483,1099.0 +20105.0,failed delivery,2020-03-27 14:07:15.000Z, , , ,"['661176']", ,3.362,5757.98 +20106.0,place order,2020-03-27 14:24:58.000Z, ,"['887427']","['991821']", , ,0.483,84.99 +20107.0,confirm order,2020-03-27 14:27:14.000Z, , ,"['991819']", , ,1.463,214.98 +20108.0,pick item,2020-03-27 14:37:53.000Z, ,"['887410']", , , ,0.483,495.0 +20109.0,create package,2020-03-27 14:37:53.000Z, ,"['887303','887369','887305','887368','887364','887294','887365','887363','887367','887366']", ,"['661180']", ,7.169,5893.94 +20110.0,pick item,2020-03-27 14:40:01.000Z, ,"['887016']", , , ,0.88,89.99 +20111.0,package delivered,2020-03-27 14:48:25.000Z, , , ,"['661176']", ,3.362,5757.98 +20112.0,pick item,2020-03-27 14:53:51.000Z, ,"['887385']", , , ,0.483,495.0 +20113.0,reorder item,2020-03-27 14:55:30.000Z, ,"['887387']", , , ,0.172,699.0 +20114.0,pick item,2020-03-27 15:09:09.000Z, ,"['887345']", , , ,1.37,2500.0 +20115.0,item out of stock,2020-03-27 15:23:03.000Z, ,"['887414']", , , ,0.44,476.0 +20116.0,pick item,2020-03-27 15:23:37.000Z, ,"['887398']", , , ,0.188,1149.0 +20117.0,pick item,2020-03-27 15:24:51.000Z, ,"['887424']", , , ,0.483,79.99 +20118.0,pick item,2020-03-27 15:34:24.000Z, ,"['887427']", , , ,0.483,79.99 +20119.0,pay order,2020-03-27 15:37:57.000Z, , ,"['991801']", , ,2.513,3403.99 +20120.0,send package,2020-03-27 15:38:37.000Z, , , ,"['661180']", ,7.169,5893.94 +20121.0,pay order,2020-03-27 15:47:43.000Z, , ,"['991817']", , ,3.055,433.98 +20122.0,failed delivery,2020-03-27 15:52:46.000Z, , , ,"['661178']", ,2.543,1348.98 +20123.0,pick item,2020-03-27 16:02:17.000Z, ,"['887386']", , , ,0.78,99.99 +20124.0,pick item,2020-03-27 16:09:03.000Z, ,"['886906']", , , ,0.166,799.0 +20125.0,place order,2020-03-27 16:09:43.000Z, ,"['887430','887428','887429']","['991822']", , ,0.815,2702.0 +20126.0,send package,2020-03-27 16:29:20.000Z, , , ,"['661177']", ,4.837,4341.95 +20127.0,place order,2020-03-27 17:39:13.000Z, ,"['887433','887431','887432']","['991823']", , ,1.143,563.98 +20128.0,pick item,2020-03-27 17:52:52.000Z, ,"['887331']", , , ,0.38,29.99 +20129.0,package delivered,2020-03-27 18:01:45.000Z, , , ,"['661177']", ,4.837,4341.95 +20130.0,pick item,2020-03-27 18:05:48.000Z, ,"['887389']", , , ,0.188,1149.0 +20131.0,create package,2020-03-27 18:05:48.000Z, ,"['887411','887410','887347','887419']", ,"['661181']", ,3.128,3223.99 +20132.0,pick item,2020-03-27 19:05:22.000Z, ,"['887408']", , , ,0.2,39.99 +20133.0,confirm order,2020-03-27 19:42:05.000Z, , ,"['991816']", , ,1.7009999999999998,3554.0 +20134.0,pick item,2020-03-27 20:26:10.000Z, ,"['887391']", , , ,0.98,129.99 +20135.0,place order,2020-03-27 20:37:14.000Z, ,"['887435','887434']","['991824']", , ,1.4680000000000002,1303.99 +20136.0,package delivered,2020-03-27 21:01:11.000Z, , , ,"['661180']", ,7.169,5893.94 +20137.0,confirm order,2020-03-27 21:17:43.000Z, , ,"['991823']", , ,1.143,563.98 +20138.0,payment reminder,2020-03-28 10:47:10.000Z, , ,"['991582']", , ,6.5760000000000005,8442.97 +20139.0,place order,2020-03-28 12:43:18.000Z, ,"['887436','887438','887437']","['991825']", , ,1.543,633.98 +20140.0,payment reminder,2020-03-29 11:04:14.000Z, , ,"['991703']", , ,2.468,1911.99 +20141.0,place order,2020-03-29 12:26:30.000Z, ,"['887441','887442','887444','887443','887440','887439']","['991826']", , ,2.443,1711.97 +20142.0,create package,2020-03-29 23:00:00.000Z, ,"['887358','887382','887359','887380','887360']", ,"['661182']", ,6.1,779.95 +20143.0,place order,2020-03-30 05:04:54.000Z, ,"['887445','887446']","['991827']", , ,1.48,194.98 +20144.0,pick item,2020-03-30 06:46:29.000Z, ,"['887375']", , , ,0.483,1099.0 +20145.0,pick item,2020-03-30 07:00:29.000Z, ,"['887443']", , , ,0.38,29.99 +20146.0,confirm order,2020-03-30 07:17:42.000Z, , ,"['991811']", , ,1.334,2082.99 +20147.0,pick item,2020-03-30 07:20:20.000Z, ,"['887445']", , , ,1.28,149.99 +20148.0,item out of stock,2020-03-30 07:20:56.000Z, ,"['887262']", , , ,0.38,29.99 +20149.0,reorder item,2020-03-30 07:42:45.000Z, ,"['887262']", , , ,0.38,29.99 +20150.0,pay order,2020-03-30 07:47:50.000Z, , ,"['991812']", , ,2.248,1706.99 +20151.0,place order,2020-03-30 07:49:11.000Z, ,"['887447','887448']","['991828']", , ,1.53,2294.99 +20152.0,pay order,2020-03-30 07:54:49.000Z, , ,"['991794']", , ,3.813,1837.97 +20153.0,pick item,2020-03-30 08:13:14.000Z, ,"['887436']", , , ,0.483,79.99 +20154.0,pick item,2020-03-30 08:39:31.000Z, ,"['887404']", , , ,0.495,129.0 +20155.0,reorder item,2020-03-30 08:40:59.000Z, ,"['887353']", , , ,0.483,1099.0 +20156.0,pay order,2020-03-30 08:41:21.000Z, , ,"['991798']", , ,0.98,144.98 +20157.0,item out of stock,2020-03-30 08:43:48.000Z, ,"['887441']", , , ,0.28,449.0 +20158.0,pick item,2020-03-30 08:45:54.000Z, ,"['887295']", , , ,0.28,449.0 +20159.0,pick item,2020-03-30 08:51:03.000Z, ,"['887406']", , , ,1.28,149.99 +20160.0,create package,2020-03-30 08:51:03.000Z, ,"['887016','887258','887014']", ,"['661183']", ,1.529,1383.99 +20161.0,reorder item,2020-03-30 08:53:46.000Z, ,"['887420']", , , ,1.28,149.99 +20162.0,pay order,2020-03-30 08:54:09.000Z, , ,"['991796']", , ,3.181,2287.98 +20163.0,confirm order,2020-03-30 09:00:18.000Z, , ,"['991815']", , ,2.417,5477.0 +20164.0,pick item,2020-03-30 09:00:30.000Z, ,"['887431']", , , ,0.28,449.0 +20165.0,confirm order,2020-03-30 09:14:08.000Z, , ,"['991821']", , ,0.483,84.99 +20166.0,package delivered,2020-03-30 09:24:18.000Z, , , ,"['661178']", ,2.543,1348.98 +20167.0,pay order,2020-03-30 09:34:25.000Z, , ,"['991759']", , ,1.97,763.98 +20168.0,pick item,2020-03-30 09:45:51.000Z, ,"['887425']", , , ,0.38,29.99 +20169.0,reorder item,2020-03-30 09:48:19.000Z, ,"['887402']", , , ,0.483,495.0 +20170.0,send package,2020-03-30 09:56:27.000Z, , , ,"['661181']", ,3.128,3223.99 +20171.0,place order,2020-03-30 09:58:10.000Z, ,"['887451','887452','887449','887450']","['991829']", , ,1.758,2108.99 +20172.0,pick item,2020-03-30 09:59:36.000Z, ,"['887439']", , , ,0.21,529.0 +20173.0,create package,2020-03-30 09:59:36.000Z, ,"['887019','887443','887321','887018','887330','887418','887416','887331','887439']", ,"['661184']", ,5.229,5236.95 +20174.0,confirm order,2020-03-30 10:21:41.000Z, , ,"['991826']", , ,2.443,1711.97 +20175.0,pay order,2020-03-30 10:31:24.000Z, , ,"['991777']", , ,1.84,334.97 +20176.0,reorder item,2020-03-30 10:40:47.000Z, ,"['887280']", , , ,0.44,476.0 +20177.0,pick item,2020-03-30 11:21:44.000Z, ,"['887409']", , , ,0.188,1149.0 +20178.0,item out of stock,2020-03-30 11:35:47.000Z, ,"['887440']", , , ,0.21,529.0 +20179.0,pick item,2020-03-30 11:42:02.000Z, ,"['887451']", , , ,0.172,699.0 +20180.0,confirm order,2020-03-30 11:47:23.000Z, , ,"['991824']", , ,1.4680000000000002,1303.99 +20181.0,confirm order,2020-03-30 12:04:19.000Z, , ,"['991829']", , ,1.758,2108.99 +20182.0,pick item,2020-03-30 12:12:54.000Z, ,"['887215']", , , ,0.21,529.0 +20183.0,place order,2020-03-30 12:16:07.000Z, ,"['887453','887456','887455','887454']","['991830']", , ,1.692,1762.98 +20184.0,confirm order,2020-03-30 12:16:16.000Z, , ,"['991830']", , ,1.692,1762.98 +20185.0,pay order,2020-03-30 12:22:51.000Z, , ,"['991742']", , ,3.11,2434.98 +20186.0,pay order,2020-03-30 12:36:19.000Z, , ,"['991803']", , ,0.49,983.0 +20187.0,reorder item,2020-03-30 12:37:54.000Z, ,"['887381']", , , ,1.37,2500.0 +20188.0,confirm order,2020-03-30 12:46:08.000Z, , ,"['991820']", , ,0.66,483.99 +20189.0,reorder item,2020-03-30 13:02:13.000Z, ,"['887414']", , , ,0.44,476.0 +20190.0,package delivered,2020-03-30 13:10:47.000Z, , , ,"['661181']", ,3.128,3223.99 +20191.0,pick item,2020-03-30 13:13:12.000Z, ,"['887415']", , , ,0.172,699.0 +20192.0,pick item,2020-03-30 13:37:41.000Z, ,"['887455']", , , ,0.98,129.99 +20193.0,package delivered,2020-03-30 13:44:15.000Z, , , ,"['661175']", ,5.239,7141.97 +20194.0,item out of stock,2020-03-30 13:48:01.000Z, ,"['887437']", , , ,0.28,449.0 +20195.0,item out of stock,2020-03-30 13:51:42.000Z, ,"['887450']", , , ,0.44,476.0 +20196.0,place order,2020-03-30 13:52:01.000Z, ,"['887461','887460','887458','887459','887457']","['991831']", , ,3.2910000000000004,4011.99 +20197.0,pay order,2020-03-30 13:53:02.000Z, , ,"['991749']", , ,0.552,733.99 +20198.0,confirm order,2020-03-30 14:08:12.000Z, , ,"['991825']", , ,1.543,633.98 +20199.0,reorder item,2020-03-30 14:14:47.000Z, ,"['887440']", , , ,0.21,529.0 +20200.0,payment reminder,2020-03-30 14:17:47.000Z, , ,"['991598']", , ,3.313,6333.0 +20201.0,payment reminder,2020-03-30 14:26:37.000Z, , ,"['991715']", , ,3.963,1909.97 +20202.0,pick item,2020-03-30 14:30:46.000Z, ,"['887153']", , , ,1.48,199.99 +20203.0,package delivered,2020-03-30 14:43:34.000Z, , , ,"['661174']", ,3.235,488.97 +20204.0,item out of stock,2020-03-30 15:02:53.000Z, ,"['887442']", , , ,0.88,89.99 +20205.0,pick item,2020-03-30 15:03:46.000Z, ,"['887435']", , , ,1.28,149.99 +20206.0,send package,2020-03-30 15:09:45.000Z, , , ,"['661179']", ,1.253,1922.0 +20207.0,pay order,2020-03-30 15:27:08.000Z, , ,"['991799']", , ,2.78,4494.99 +20208.0,place order,2020-03-30 16:03:50.000Z, ,"['887464','887466','887465','887463','887462']","['991832']", , ,1.6909999999999998,2798.98 +20209.0,confirm order,2020-03-30 16:15:43.000Z, , ,"['991827']", , ,1.48,194.98 +20210.0,pick item,2020-03-30 16:26:33.000Z, ,"['887072']", , , ,0.483,79.99 +20211.0,pick item,2020-03-30 17:34:42.000Z, ,"['887319']", , , ,1.37,2500.0 +20212.0,create package,2020-03-30 17:34:42.000Z, ,"['887431','887264','887267']", ,"['661185']", ,0.77,1067.99 +20213.0,pick item,2020-03-30 17:46:52.000Z, ,"['886827']", , , ,0.28,89.99 +20214.0,place order,2020-03-30 17:51:05.000Z, ,"['887468','887469','887471','887467','887470']","['991833']", , ,1.695,933.96 +20215.0,send package,2020-03-30 17:52:11.000Z, , , ,"['661182']", ,6.1,779.95 +20216.0,reorder item,2020-03-30 18:06:35.000Z, ,"['887350']", , , ,0.28,89.99 +20217.0,item out of stock,2020-03-30 19:47:23.000Z, ,"['887379']", , , ,0.88,89.99 +20218.0,place order,2020-03-30 21:21:44.000Z, ,"['887474','887473','887472','887475']","['991834']", , ,2.372,1469.98 +20219.0,confirm order,2020-03-31 06:12:08.000Z, , ,"['991832']", , ,1.6909999999999998,2798.98 +20220.0,pick item,2020-03-31 06:30:56.000Z, ,"['887384']", , , ,0.21,529.0 +20221.0,place order,2020-03-31 07:17:40.000Z, ,"['887476','887478','887480','887477','887479']","['991835']", , ,4.15,5799.99 +20222.0,pick item,2020-03-31 07:19:25.000Z, ,"['887454']", , , ,0.166,799.0 +20223.0,create package,2020-03-31 07:19:25.000Z, ,"['887399','887385','887406','887372','887355','887343','887386','887405','887370','887345','887397','887398','887404','887388','887373','887356']", ,"['661186']", ,10.127,8258.92 +20224.0,pay order,2020-03-31 07:33:45.000Z, , ,"['991832']", , ,1.6909999999999998,2798.98 +20225.0,item out of stock,2020-03-31 07:38:57.000Z, ,"['887461']", , , ,0.28,449.0 +20226.0,pick item,2020-03-31 07:41:23.000Z, ,"['887473']", , , ,1.48,199.99 +20227.0,item out of stock,2020-03-31 07:41:54.000Z, ,"['887457']", , , ,1.37,2500.0 +20228.0,item out of stock,2020-03-31 07:48:57.000Z, ,"['887434']", , , ,0.188,1149.0 +20229.0,package delivered,2020-03-31 07:51:53.000Z, , , ,"['661179']", ,1.253,1922.0 +20230.0,pick item,2020-03-31 07:51:56.000Z, ,"['887278']", , , ,0.483,79.99 +20231.0,pay order,2020-03-31 07:57:05.000Z, , ,"['991681']", , ,2.23,2344.98 +20232.0,reorder item,2020-03-31 08:11:28.000Z, ,"['887401']", , , ,1.25,2200.0 +20233.0,pick item,2020-03-31 08:40:25.000Z, ,"['887456']", , , ,0.166,799.0 +20234.0,pick item,2020-03-31 08:40:31.000Z, ,"['887010']", , , ,1.48,199.99 +20235.0,place order,2020-03-31 08:55:07.000Z, ,"['887483','887484','887482','887481']","['991836']", , ,1.239,1857.99 +20236.0,pay order,2020-03-31 08:58:06.000Z, , ,"['991818']", , ,0.2,44.99 +20237.0,confirm order,2020-03-31 09:10:51.000Z, , ,"['991834']", , ,2.372,1469.98 +20238.0,item out of stock,2020-03-31 09:22:37.000Z, ,"['887466']", , , ,0.483,1099.0 +20239.0,send package,2020-03-31 09:26:42.000Z, , , ,"['661186']", ,10.127,8258.92 +20240.0,pay order,2020-03-31 09:30:28.000Z, , ,"['991821']", , ,0.483,84.99 +20241.0,reorder item,2020-03-31 09:31:08.000Z, ,"['887313']", , , ,0.495,129.0 +20242.0,reorder item,2020-03-31 09:38:01.000Z, ,"['887450']", , , ,0.44,476.0 +20243.0,pay order,2020-03-31 09:47:13.000Z, , ,"['991813']", , ,6.807,7685.97 +20244.0,pay order,2020-03-31 09:51:47.000Z, , ,"['991830']", , ,1.692,1762.98 +20245.0,item out of stock,2020-03-31 09:56:26.000Z, ,"['887432']", , , ,0.38,29.99 +20246.0,confirm order,2020-03-31 10:01:11.000Z, , ,"['991833']", , ,1.695,933.96 +20247.0,pick item,2020-03-31 10:05:27.000Z, ,"['887394']", , , ,0.483,495.0 +20248.0,package delivered,2020-03-31 10:24:31.000Z, , , ,"['661182']", ,6.1,779.95 +20249.0,send package,2020-03-31 10:31:15.000Z, , , ,"['661183']", ,1.529,1383.99 +20250.0,pick item,2020-03-31 10:37:28.000Z, ,"['887470']", , , ,0.172,699.0 +20251.0,reorder item,2020-03-31 10:38:41.000Z, ,"['887400']", , , ,0.495,129.0 +20252.0,pick item,2020-03-31 10:44:09.000Z, ,"['887477']", , , ,0.44,476.0 +20253.0,confirm order,2020-03-31 10:47:54.000Z, , ,"['991836']", , ,1.239,1857.99 +20254.0,place order,2020-03-31 11:10:02.000Z, ,"['887485','887487','887486']","['991837']", , ,3.2430000000000003,849.98 +20255.0,reorder item,2020-03-31 11:27:33.000Z, ,"['887320']", , , ,1.37,2500.0 +20256.0,item out of stock,2020-03-31 11:33:14.000Z, ,"['887479']", , , ,0.21,529.0 +20257.0,pick item,2020-03-31 11:46:42.000Z, ,"['887449']", , , ,0.166,799.0 +20258.0,pick item,2020-03-31 11:52:16.000Z, ,"['887422']", , , ,0.2,39.99 +20259.0,pick item,2020-03-31 11:54:42.000Z, ,"['887412']", , , ,0.21,529.0 +20260.0,send package,2020-03-31 12:08:12.000Z, , , ,"['661184']", ,5.229,5236.95 +20261.0,item out of stock,2020-03-31 12:11:03.000Z, ,"['887463']", , , ,0.2,39.99 +20262.0,item out of stock,2020-03-31 12:26:28.000Z, ,"['887428']", , , ,0.166,799.0 +20263.0,package delivered,2020-03-31 12:33:58.000Z, , , ,"['661186']", ,10.127,8258.92 +20264.0,place order,2020-03-31 12:39:51.000Z, ,"['887489','887488','887490']","['991838']", , ,2.94,344.97 +20265.0,reorder item,2020-03-31 12:48:04.000Z, ,"['887417']", , , ,0.44,476.0 +20266.0,item out of stock,2020-03-31 12:56:11.000Z, ,"['887472']", , , ,0.172,699.0 +20267.0,reorder item,2020-03-31 12:59:19.000Z, ,"['887325']", , , ,0.483,1099.0 +20268.0,confirm order,2020-03-31 13:01:11.000Z, , ,"['991807']", , ,2.12,2907.98 +20269.0,pick item,2020-03-31 13:03:50.000Z, ,"['887440']", , , ,0.21,529.0 +20270.0,pick item,2020-03-31 13:12:15.000Z, ,"['887444']", , , ,0.483,79.99 +20271.0,failed delivery,2020-03-31 13:29:57.000Z, , , ,"['661184']", ,5.229,5236.95 +20272.0,send package,2020-03-31 13:35:02.000Z, , , ,"['661185']", ,0.77,1067.99 +20273.0,confirm order,2020-03-31 13:43:23.000Z, , ,"['991822']", , ,0.815,2702.0 +20274.0,pick item,2020-03-31 13:48:09.000Z, ,"['887429']", , , ,0.166,799.0 +20275.0,package delivered,2020-03-31 13:48:33.000Z, , , ,"['661183']", ,1.529,1383.99 +20276.0,pick item,2020-03-31 13:54:27.000Z, ,"['887486']", , , ,1.28,149.99 +20277.0,pay order,2020-03-31 13:54:40.000Z, , ,"['991807']", , ,2.12,2907.98 +20278.0,reorder item,2020-03-31 14:22:23.000Z, ,"['887442']", , , ,0.88,89.99 +20279.0,confirm order,2020-03-31 14:30:47.000Z, , ,"['991835']", , ,4.15,5799.99 +20280.0,pay order,2020-03-31 14:38:10.000Z, , ,"['991628']", , ,0.852,873.97 +20281.0,place order,2020-03-31 14:39:30.000Z, ,"['887491','887492']","['991839']", , ,0.946,903.99 +20282.0,reorder item,2020-03-31 14:39:48.000Z, ,"['887463']", , , ,0.2,39.99 +20283.0,reorder item,2020-03-31 14:42:43.000Z, ,"['887379']", , , ,0.88,89.99 +20284.0,pay order,2020-03-31 14:46:55.000Z, , ,"['991780']", , ,0.763,174.98 +20285.0,confirm order,2020-03-31 14:48:57.000Z, , ,"['991837']", , ,3.2430000000000003,849.98 +20286.0,pick item,2020-03-31 14:53:22.000Z, ,"['887475']", , , ,0.44,476.0 +20287.0,pick item,2020-03-31 14:57:48.000Z, ,"['887460']", , , ,0.495,129.0 +20288.0,create package,2020-03-31 14:57:48.000Z, ,"['887206','887334','887332']", ,"['661187']", ,0.935,1283.99 +20289.0,reorder item,2020-03-31 15:03:54.000Z, ,"['887466']", , , ,0.483,1099.0 +20290.0,confirm order,2020-03-31 15:38:29.000Z, , ,"['991828']", , ,1.53,2294.99 +20291.0,pick item,2020-03-31 15:47:03.000Z, ,"['887387']", , , ,0.172,699.0 +20292.0,reorder item,2020-03-31 15:55:38.000Z, ,"['887329']", , , ,0.28,449.0 +20293.0,pick item,2020-03-31 16:25:30.000Z, ,"['887291']", , , ,0.28,89.99 +20294.0,pay order,2020-03-31 16:33:59.000Z, , ,"['991771']", , ,0.98,134.99 +20295.0,place order,2020-03-31 16:38:47.000Z, ,"['887494','887493']","['991840']", , ,2.35,2634.99 +20296.0,pick item,2020-03-31 17:29:52.000Z, ,"['887476']", , , ,1.37,2500.0 +20297.0,create package,2020-03-31 17:29:52.000Z, ,"['887476','887477','887296','887427','887295','887426','887425']", ,"['661188']", ,3.513,4073.97 +20298.0,package delivered,2020-03-31 17:35:33.000Z, , , ,"['661185']", ,0.77,1067.99 +20299.0,pick item,2020-03-31 18:25:10.000Z, ,"['887482']", , , ,0.166,799.0 +20300.0,place order,2020-03-31 19:35:56.000Z, ,"['887501','887498','887496','887495','887500','887499','887497']","['991841']", , ,5.183,5925.97 +20301.0,pick item,2020-03-31 19:51:43.000Z, ,"['887438']", , , ,0.78,99.99 +20302.0,pick item,2020-04-01 07:39:56.000Z, ,"['887403']", , , ,1.37,2500.0 +20303.0,pick item,2020-04-01 07:41:44.000Z, ,"['887493']", , , ,1.37,2500.0 +20304.0,pick item,2020-04-01 07:44:27.000Z, ,"['887447']", , , ,1.25,2200.0 +20305.0,pick item,2020-04-01 07:46:46.000Z, ,"['887471']", , , ,0.483,79.99 +20306.0,package delivered,2020-04-01 08:00:32.000Z, , , ,"['661184']", ,5.229,5236.95 +20307.0,pick item,2020-04-01 08:01:57.000Z, ,"['887351']", , , ,1.25,2200.0 +20308.0,create package,2020-04-01 08:01:57.000Z, ,"['887375','887438','887118','887455','887454','887376','887383','887456','887384','887436']", ,"['661189']", ,5.431,3855.94 +20309.0,pick item,2020-04-01 08:02:04.000Z, ,"['887495']", , , ,0.44,476.0 +20310.0,place order,2020-04-01 08:03:47.000Z, ,"['887503','887502']","['991842']", , ,0.388,1193.99 +20311.0,pick item,2020-04-01 08:08:00.000Z, ,"['887496']", , , ,1.37,2500.0 +20312.0,item out of stock,2020-04-01 08:08:57.000Z, ,"['887489']", , , ,1.28,149.99 +20313.0,reorder item,2020-04-01 08:15:45.000Z, ,"['887434']", , , ,0.188,1149.0 +20314.0,pick item,2020-04-01 08:23:10.000Z, ,"['887481']", , , ,0.38,29.99 +20315.0,pick item,2020-04-01 08:41:34.000Z, ,"['887480']", , , ,1.25,2200.0 +20316.0,reorder item,2020-04-01 08:47:57.000Z, ,"['887432']", , , ,0.38,29.99 +20317.0,confirm order,2020-04-01 08:54:08.000Z, , ,"['991838']", , ,2.94,344.97 +20318.0,payment reminder,2020-04-01 08:54:12.000Z, , ,"['991726']", , ,1.946,709.98 +20319.0,pick item,2020-04-01 09:24:26.000Z, ,"['887468']", , , ,0.28,89.99 +20320.0,pick item,2020-04-01 09:30:38.000Z, ,"['887501']", , , ,1.25,2200.0 +20321.0,pick item,2020-04-01 09:35:16.000Z, ,"['887430']", , , ,0.483,1099.0 +20322.0,pick item,2020-04-01 09:40:05.000Z, ,"['887420']", , , ,1.28,149.99 +20323.0,confirm order,2020-04-01 09:59:28.000Z, , ,"['991831']", , ,3.2910000000000004,4011.99 +20324.0,pick item,2020-04-01 10:23:58.000Z, ,"['887452']", , , ,0.98,129.99 +20325.0,pick item,2020-04-01 10:26:15.000Z, ,"['887463']", , , ,0.2,39.99 +20326.0,create package,2020-04-01 10:26:15.000Z, ,"['887408','887153','887407']", ,"['661190']", ,2.56,329.97 +20327.0,pick item,2020-04-01 11:02:51.000Z, ,"['887396']", , , ,0.78,99.99 +20328.0,payment reminder,2020-04-01 11:08:55.000Z, , ,"['991612']", , ,1.6,1019.99 +20329.0,pick item,2020-04-01 11:18:45.000Z, ,"['887417']", , , ,0.44,476.0 +20330.0,item out of stock,2020-04-01 11:21:59.000Z, ,"['887421']", , , ,1.28,149.99 +20331.0,pick item,2020-04-01 11:25:04.000Z, ,"['887270']", , , ,0.28,89.99 +20332.0,create package,2020-04-01 11:25:04.000Z, ,"['887468','887215','887424','887471','887422','887423','886781','887470']", ,"['661191']", ,3.688,1737.94 +20333.0,pick item,2020-04-01 11:37:15.000Z, ,"['887467']", , , ,0.38,29.99 +20334.0,pick item,2020-04-01 11:38:41.000Z, ,"['887379']", , , ,0.88,89.99 +20335.0,pay order,2020-04-01 12:33:19.000Z, , ,"['991789']", , ,2.53,2634.98 +20336.0,place order,2020-04-01 12:33:32.000Z, ,"['887505','887504','887506']","['991843']", , ,1.743,1223.98 +20337.0,send package,2020-04-01 12:34:59.000Z, , , ,"['661190']", ,2.56,329.97 +20338.0,pick item,2020-04-01 12:35:18.000Z, ,"['887458']", , , ,0.166,799.0 +20339.0,item out of stock,2020-04-01 12:38:44.000Z, ,"['887413']", , , ,0.166,799.0 +20340.0,pick item,2020-04-01 13:15:14.000Z, ,"['887494']", , , ,0.98,129.99 +20341.0,confirm order,2020-04-01 13:17:56.000Z, , ,"['991841']", , ,5.183,5925.97 +20342.0,pick item,2020-04-01 13:28:11.000Z, ,"['887348']", , , ,0.2,39.99 +20343.0,reorder item,2020-04-01 13:30:16.000Z, ,"['887437']", , , ,0.28,449.0 +20344.0,pay order,2020-04-01 13:46:45.000Z, , ,"['991831']", , ,3.2910000000000004,4011.99 +20345.0,pick item,2020-04-01 13:47:59.000Z, ,"['887502']", , , ,0.188,1149.0 +20346.0,send package,2020-04-01 13:49:55.000Z, , , ,"['661189']", ,5.431,3855.94 +20347.0,confirm order,2020-04-01 13:50:58.000Z, , ,"['991843']", , ,1.743,1223.98 +20348.0,reorder item,2020-04-01 13:51:15.000Z, ,"['887489']", , , ,1.28,149.99 +20349.0,confirm order,2020-04-01 13:52:30.000Z, , ,"['991839']", , ,0.946,903.99 +20350.0,send package,2020-04-01 13:52:32.000Z, , , ,"['661191']", ,3.688,1737.94 +20351.0,pick item,2020-04-01 14:00:16.000Z, ,"['887459']", , , ,0.98,129.99 +20352.0,pay order,2020-04-01 14:18:56.000Z, , ,"['991815']", , ,2.417,5477.0 +20353.0,reorder item,2020-04-01 14:26:06.000Z, ,"['887461']", , , ,0.28,449.0 +20354.0,pay order,2020-04-01 14:32:19.000Z, , ,"['991828']", , ,1.53,2294.99 +20355.0,reorder item,2020-04-01 14:36:11.000Z, ,"['887472']", , , ,0.172,699.0 +20356.0,pick item,2020-04-01 14:37:25.000Z, ,"['887484']", , , ,0.483,495.0 +20357.0,create package,2020-04-01 14:37:25.000Z, ,"['887279','887278']", ,"['661192']", ,0.763,169.98 +20358.0,confirm order,2020-04-01 14:46:21.000Z, , ,"['991840']", , ,2.35,2634.99 +20359.0,pick item,2020-04-01 14:56:24.000Z, ,"['887448']", , , ,0.28,89.99 +20360.0,failed delivery,2020-04-01 15:10:47.000Z, , , ,"['661189']", ,5.431,3855.94 +20361.0,pick item,2020-04-01 15:25:24.000Z, ,"['887491']", , , ,0.78,99.99 +20362.0,create package,2020-04-01 15:25:24.000Z, ,"['887396','887389','886906','887394','887395','887391','887475','887473','887270']", ,"['661193']", ,5.292000000000002,3567.96 +20363.0,pick item,2020-04-01 15:39:15.000Z, ,"['887402']", , , ,0.483,495.0 +20364.0,pick item,2020-04-01 15:51:21.000Z, ,"['887302']", , , ,1.25,2200.0 +20365.0,send package,2020-04-01 15:51:41.000Z, , , ,"['661188']", ,3.513,4073.97 +20366.0,pick item,2020-04-01 15:54:35.000Z, ,"['887503']", , , ,0.2,39.99 +20367.0,pick item,2020-04-01 15:56:47.000Z, ,"['887461']", , , ,0.28,449.0 +20368.0,send package,2020-04-01 16:57:24.000Z, , , ,"['661187']", ,0.935,1283.99 +20369.0,place order,2020-04-01 17:33:02.000Z, ,"['887507','887508']","['991844']", , ,0.923,1580.0 +20370.0,send package,2020-04-01 18:08:07.000Z, , , ,"['661192']", ,0.763,169.98 +20371.0,pay order,2020-04-02 06:26:26.000Z, , ,"['991811']", , ,1.334,2082.99 +20372.0,item out of stock,2020-04-02 06:49:05.000Z, ,"['887474']", , , ,0.28,89.99 +20373.0,pick item,2020-04-02 06:53:38.000Z, ,"['887341']", , , ,0.166,799.0 +20374.0,package delivered,2020-04-02 07:29:40.000Z, , , ,"['661192']", ,0.763,169.98 +20375.0,package delivered,2020-04-02 07:33:32.000Z, , , ,"['661187']", ,0.935,1283.99 +20376.0,pick item,2020-04-02 07:44:35.000Z, ,"['887288']", , , ,0.28,89.99 +20377.0,reorder item,2020-04-02 07:51:23.000Z, ,"['887441']", , , ,0.28,449.0 +20378.0,send package,2020-04-02 07:54:31.000Z, , , ,"['661193']", ,5.292000000000002,3567.96 +20379.0,payment reminder,2020-04-02 08:00:36.000Z, , ,"['991732']", , ,1.826,983.98 +20380.0,pick item,2020-04-02 08:17:43.000Z, ,"['887485']", , , ,0.483,495.0 +20381.0,pay order,2020-04-02 08:21:52.000Z, , ,"['991833']", , ,1.695,933.96 +20382.0,pick item,2020-04-02 08:29:59.000Z, ,"['887400']", , , ,0.495,129.0 +20383.0,place order,2020-04-02 08:51:31.000Z, ,"['887512','887514','887515','887510','887511','887516','887509','887513']","['991845']", , ,5.581,2322.94 +20384.0,pick item,2020-04-02 09:08:48.000Z, ,"['887499']", , , ,0.28,89.99 +20385.0,create package,2020-04-02 09:08:48.000Z, ,"['887445','887486','887420','887412','887491','887409','887348','887485']", ,"['661194']", ,5.7010000000000005,2762.95 +20386.0,package delivered,2020-04-02 09:23:46.000Z, , , ,"['661190']", ,2.56,329.97 +20387.0,pick item,2020-04-02 09:40:51.000Z, ,"['887483']", , , ,0.21,529.0 +20388.0,pick item,2020-04-02 09:58:33.000Z, ,"['887516']", , , ,1.28,149.99 +20389.0,pick item,2020-04-02 10:03:16.000Z, ,"['887469']", , , ,0.38,29.99 +20390.0,pay order,2020-04-02 10:05:14.000Z, , ,"['991834']", , ,2.372,1469.98 +20391.0,package delivered,2020-04-02 10:06:07.000Z, , , ,"['661189']", ,5.431,3855.94 +20392.0,item out of stock,2020-04-02 10:22:51.000Z, ,"['887513']", , , ,0.21,529.0 +20393.0,package delivered,2020-04-02 10:51:09.000Z, , , ,"['661188']", ,3.513,4073.97 +20394.0,send package,2020-04-02 10:58:01.000Z, , , ,"['661194']", ,5.7010000000000005,2762.95 +20395.0,pay order,2020-04-02 11:15:35.000Z, , ,"['991726']", , ,1.946,709.98 +20396.0,item out of stock,2020-04-02 11:43:37.000Z, ,"['887510']", , , ,0.188,1149.0 +20397.0,pick item,2020-04-02 11:51:30.000Z, ,"['887506']", , , ,0.38,29.99 +20398.0,pay order,2020-04-02 11:52:34.000Z, , ,"['991837']", , ,3.2430000000000003,849.98 +20399.0,pick item,2020-04-02 12:09:51.000Z, ,"['887353']", , , ,0.483,1099.0 +20400.0,pay order,2020-04-02 12:11:17.000Z, , ,"['991703']", , ,2.468,1911.99 +20401.0,pick item,2020-04-02 12:18:16.000Z, ,"['887497']", , , ,0.38,29.99 +20402.0,pick item,2020-04-02 12:29:33.000Z, ,"['887462']", , , ,0.38,29.99 +20403.0,pick item,2020-04-02 12:30:06.000Z, ,"['887274']", , , ,0.38,29.99 +20404.0,create package,2020-04-02 12:30:06.000Z, ,"['887451','887452','887072','887449']", ,"['661195']", ,1.801,1707.98 +20405.0,pick item,2020-04-02 12:33:48.000Z, ,"['887446']", , , ,0.2,39.99 +20406.0,payment reminder,2020-04-02 12:44:47.000Z, , ,"['991729']", , ,2.748,1453.98 +20407.0,reorder item,2020-04-02 12:49:48.000Z, ,"['887510']", , , ,0.188,1149.0 +20408.0,pick item,2020-04-02 13:00:29.000Z, ,"['887433']", , , ,0.483,79.99 +20409.0,confirm order,2020-04-02 13:11:29.000Z, , ,"['991842']", , ,0.388,1193.99 +20410.0,package delivered,2020-04-02 13:13:12.000Z, , , ,"['661193']", ,5.292000000000002,3567.96 +20411.0,pick item,2020-04-02 13:23:10.000Z, ,"['887508']", , , ,0.483,1099.0 +20412.0,confirm order,2020-04-02 13:23:50.000Z, , ,"['991845']", , ,5.581,2322.94 +20413.0,pick item,2020-04-02 13:48:20.000Z, ,"['887453']", , , ,0.38,29.99 +20414.0,create package,2020-04-02 13:48:20.000Z, ,"['887440','887417','887444','887010','887415','886827','887319']", ,"['661196']", ,4.435,4573.97 +20415.0,failed delivery,2020-04-02 13:49:22.000Z, , , ,"['661191']", ,3.688,1737.94 +20416.0,payment reminder,2020-04-02 13:49:36.000Z, , ,"['991738']", , ,1.32,570.99 +20417.0,pick item,2020-04-02 13:52:57.000Z, ,"['887504']", , , ,0.483,1099.0 +20418.0,pick item,2020-04-02 14:00:42.000Z, ,"['887509']", , , ,1.28,149.99 +20419.0,place order,2020-04-02 14:09:00.000Z, ,"['887518','887520','887519','887517']","['991846']", , ,2.423,1383.97 +20420.0,pick item,2020-04-02 14:14:45.000Z, ,"['887512']", , , ,0.483,79.99 +20421.0,pick item,2020-04-02 14:15:57.000Z, ,"['887450']", , , ,0.44,476.0 +20422.0,reorder item,2020-04-02 14:27:03.000Z, ,"['887474']", , , ,0.28,89.99 +20423.0,confirm order,2020-04-02 14:30:52.000Z, , ,"['991846']", , ,2.423,1383.97 +20424.0,pay order,2020-04-02 14:46:41.000Z, , ,"['991635']", , ,3.125,2853.98 +20425.0,pick item,2020-04-02 15:25:28.000Z, ,"['887131']", , , ,1.37,2500.0 +20426.0,pick item,2020-04-02 15:33:00.000Z, ,"['887280']", , , ,0.44,476.0 +20427.0,pick item,2020-04-02 15:35:07.000Z, ,"['887498']", , , ,0.98,129.99 +20428.0,create package,2020-04-02 15:35:07.000Z, ,"['887483','887435','887484','887482','887481']", ,"['661197']", ,2.519,2002.98 +20429.0,pick item,2020-04-02 16:28:28.000Z, ,"['887490']", , , ,0.78,99.99 +20430.0,pay order,2020-04-02 16:54:49.000Z, , ,"['991808']", , ,5.21,2994.97 +20431.0,confirm order,2020-04-02 17:11:59.000Z, , ,"['991844']", , ,0.923,1580.0 +20432.0,place order,2020-04-02 20:18:56.000Z, ,"['887521','887522']","['991847']", , ,1.745,2334.0 +20433.0,pay order,2020-04-03 07:01:04.000Z, , ,"['991843']", , ,1.743,1223.98 +20434.0,pick item,2020-04-03 07:11:17.000Z, ,"['887119']", , , ,0.38,29.99 +20435.0,pick item,2020-04-03 07:53:07.000Z, ,"['887465']", , , ,0.44,476.0 +20436.0,item out of stock,2020-04-03 08:12:50.000Z, ,"['887517']", , , ,0.28,89.99 +20437.0,pay order,2020-04-03 08:30:09.000Z, , ,"['991824']", , ,1.4680000000000002,1303.99 +20438.0,pick item,2020-04-03 08:32:53.000Z, ,"['887488']", , , ,0.88,89.99 +20439.0,pick item,2020-04-03 08:37:53.000Z, ,"['887500']", , , ,0.483,495.0 +20440.0,create package,2020-04-03 08:37:53.000Z, ,"['887430','887429','887291','887465','887463','887462']", ,"['661198']", ,1.949,2533.97 +20441.0,reorder item,2020-04-03 09:23:27.000Z, ,"['887517']", , , ,0.28,89.99 +20442.0,pay order,2020-04-03 09:32:43.000Z, , ,"['991816']", , ,1.7009999999999998,3554.0 +20443.0,pick item,2020-04-03 09:49:20.000Z, ,"['887434']", , , ,0.188,1149.0 +20444.0,pick item,2020-04-03 09:56:06.000Z, ,"['887518']", , , ,0.88,89.99 +20445.0,place order,2020-04-03 10:00:22.000Z, ,"['887525','887528','887523','887524','887526','887527']","['991848']", , ,5.46,5054.96 +20446.0,send package,2020-04-03 10:20:30.000Z, , , ,"['661198']", ,1.949,2533.97 +20447.0,package delivered,2020-04-03 10:40:10.000Z, , , ,"['661198']", ,1.949,2533.97 +20448.0,send package,2020-04-03 10:52:15.000Z, , , ,"['661196']", ,4.435,4573.97 +20449.0,package delivered,2020-04-03 11:40:02.000Z, , , ,"['661194']", ,5.7010000000000005,2762.95 +20450.0,pay order,2020-04-03 12:19:49.000Z, , ,"['991814']", , ,1.08,134.98 +20451.0,package delivered,2020-04-03 12:26:56.000Z, , , ,"['661191']", ,3.688,1737.94 +20452.0,reorder item,2020-04-03 12:44:38.000Z, ,"['887421']", , , ,1.28,149.99 +20453.0,pick item,2020-04-03 12:46:44.000Z, ,"['887528']", , , ,1.28,149.99 +20454.0,item out of stock,2020-04-03 12:58:46.000Z, ,"['887526']", , , ,0.38,29.99 +20455.0,item out of stock,2020-04-03 13:22:21.000Z, ,"['887521']", , , ,0.495,129.0 +20456.0,pick item,2020-04-03 13:36:58.000Z, ,"['887522']", , , ,1.25,2200.0 +20457.0,send package,2020-04-03 13:48:30.000Z, , , ,"['661195']", ,1.801,1707.98 +20458.0,reorder item,2020-04-03 13:53:57.000Z, ,"['887428']", , , ,0.166,799.0 +20459.0,pick item,2020-04-03 14:03:26.000Z, ,"['887381']", , , ,1.37,2500.0 +20460.0,place order,2020-04-03 14:26:42.000Z, ,"['887530','887531','887529']","['991849']", , ,2.71,4934.0 +20461.0,pick item,2020-04-03 14:50:18.000Z, ,"['887442']", , , ,0.88,89.99 +20462.0,create package,2020-04-03 14:50:18.000Z, ,"['887461','887460','887379','887458','887459','887381']", ,"['661199']", ,4.171,4096.98 +20463.0,pick item,2020-04-03 15:53:52.000Z, ,"['887309']", , , ,0.78,99.99 +20464.0,pick item,2020-04-03 15:56:33.000Z, ,"['887441']", , , ,0.28,449.0 +20465.0,send package,2020-04-03 16:48:07.000Z, , , ,"['661199']", ,4.171,4096.98 +20466.0,pay order,2020-04-03 18:07:52.000Z, , ,"['991809']", , ,1.69,733.99 +20467.0,package delivered,2020-04-03 19:42:58.000Z, , , ,"['661195']", ,1.801,1707.98 +20468.0,pick item,2020-04-03 19:43:05.000Z, ,"['887487']", , , ,1.48,199.99 +20469.0,place order,2020-04-03 21:12:02.000Z, ,"['887533','887532','887536','887535','887534']","['991850']", , ,4.81,7710.99 +20470.0,create package,2020-04-03 23:00:00.000Z, ,"['887403','887402','887508','887506','887400','887504','887387']", ,"['661200']", ,3.866,6050.99 +20471.0,payment reminder,2020-04-05 16:36:21.000Z, , ,"['991748']", , ,1.853,3000.0 +20472.0,reorder item,2020-04-06 06:33:43.000Z, ,"['887513']", , , ,0.21,529.0 +20473.0,pick item,2020-04-06 07:02:32.000Z, ,"['887531']", , , ,0.21,529.0 +20474.0,pick item,2020-04-06 07:22:28.000Z, ,"['887414']", , , ,0.44,476.0 +20475.0,pick item,2020-04-06 07:22:55.000Z, ,"['886912']", , , ,0.495,129.0 +20476.0,place order,2020-04-06 07:34:25.000Z, ,"['887537','887539','887540','887538']","['991851']", , ,1.18,2358.99 +20477.0,payment reminder,2020-04-06 07:56:13.000Z, , ,"['991740']", , ,3.604,6013.0 +20478.0,pick item,2020-04-06 07:57:11.000Z, ,"['887195']", , , ,0.21,529.0 +20479.0,pick item,2020-04-06 08:13:52.000Z, ,"['887505']", , , ,0.88,89.99 +20480.0,pick item,2020-04-06 08:57:44.000Z, ,"['887532']", , , ,1.37,2500.0 +20481.0,send package,2020-04-06 09:14:30.000Z, , , ,"['661197']", ,2.519,2002.98 +20482.0,send package,2020-04-06 09:35:55.000Z, , , ,"['661200']", ,3.866,6050.99 +20483.0,failed delivery,2020-04-06 09:41:30.000Z, , , ,"['661199']", ,4.171,4096.98 +20484.0,reorder item,2020-04-06 09:57:16.000Z, ,"['887457']", , , ,1.37,2500.0 +20485.0,pick item,2020-04-06 10:04:47.000Z, ,"['887466']", , , ,0.483,1099.0 +20486.0,reorder item,2020-04-06 10:10:57.000Z, ,"['887479']", , , ,0.21,529.0 +20487.0,pick item,2020-04-06 10:49:13.000Z, ,"['887464']", , , ,0.188,1149.0 +20488.0,package delivered,2020-04-06 10:53:09.000Z, , , ,"['661199']", ,4.171,4096.98 +20489.0,pick item,2020-04-06 11:16:48.000Z, ,"['887227']", , , ,0.495,129.0 +20490.0,package delivered,2020-04-06 11:22:30.000Z, , , ,"['661197']", ,2.519,2002.98 +20491.0,confirm order,2020-04-06 11:23:28.000Z, , ,"['991850']", , ,4.81,7710.99 +20492.0,pay order,2020-04-06 11:41:55.000Z, , ,"['991820']", , ,0.66,483.99 +20493.0,pick item,2020-04-06 12:02:29.000Z, ,"['887437']", , , ,0.28,449.0 +20494.0,create package,2020-04-06 12:02:29.000Z, ,"['887496','887493','887498','887499','887495','887494','887500','887501','887351','887497']", ,"['661201']", ,8.783,10750.96 +20495.0,pick item,2020-04-06 12:13:29.000Z, ,"['887536']", , , ,1.25,2200.0 +20496.0,place order,2020-04-06 12:34:48.000Z, ,"['887541','887542']","['991852']", , ,1.763,234.98 +20497.0,payment reminder,2020-04-06 13:21:47.000Z, , ,"['991750']", , ,2.714,2171.98 +20498.0,pay order,2020-04-06 13:35:58.000Z, , ,"['991748']", , ,1.853,3000.0 +20499.0,item out of stock,2020-04-06 13:43:55.000Z, ,"['887492']", , , ,0.166,799.0 +20500.0,confirm order,2020-04-06 13:50:50.000Z, , ,"['991852']", , ,1.763,234.98 +20501.0,pick item,2020-04-06 14:00:33.000Z, ,"['887489']", , , ,1.28,149.99 +20502.0,pick item,2020-04-06 14:27:49.000Z, ,"['887541']", , , ,1.28,149.99 +20503.0,pay order,2020-04-06 14:29:30.000Z, , ,"['991582']", , ,6.5760000000000005,8442.97 +20504.0,payment reminder,2020-04-06 14:30:44.000Z, , ,"['991756']", , ,1.722,2541.98 +20505.0,pay order,2020-04-06 14:36:22.000Z, , ,"['991841']", , ,5.183,5925.97 +20506.0,pick item,2020-04-06 14:40:48.000Z, ,"['887523']", , , ,1.25,2200.0 +20507.0,failed delivery,2020-04-06 14:50:27.000Z, , , ,"['661200']", ,3.866,6050.99 +20508.0,pick item,2020-04-06 14:56:08.000Z, ,"['887540']", , , ,0.44,476.0 +20509.0,pick item,2020-04-06 15:09:16.000Z, ,"['887514']", , , ,0.38,29.99 +20510.0,confirm order,2020-04-06 15:22:46.000Z, , ,"['991849']", , ,2.71,4934.0 +20511.0,failed delivery,2020-04-06 15:31:13.000Z, , , ,"['661196']", ,4.435,4573.97 +20512.0,pay order,2020-04-06 15:55:13.000Z, , ,"['991740']", , ,3.604,6013.0 +20513.0,place order,2020-04-06 17:36:20.000Z, ,"['887545','887543','887544']","['991853']", , ,2.2430000000000003,264.97 +20514.0,item out of stock,2020-04-07 06:23:03.000Z, ,"['887527']", , , ,1.37,2500.0 +20515.0,send package,2020-04-07 06:35:29.000Z, , , ,"['661201']", ,8.783,10750.96 +20516.0,reorder item,2020-04-07 07:04:23.000Z, ,"['887413']", , , ,0.166,799.0 +20517.0,pick item,2020-04-07 07:17:32.000Z, ,"['887533']", , , ,0.44,476.0 +20518.0,item out of stock,2020-04-07 07:36:15.000Z, ,"['887539']", , , ,0.172,699.0 +20519.0,pay order,2020-04-07 07:45:41.000Z, , ,"['991783']", , ,1.36,164.98 +20520.0,pay order,2020-04-07 07:48:34.000Z, , ,"['991786']", , ,1.475,263.99 +20521.0,pay order,2020-04-07 07:48:59.000Z, , ,"['991666']", , ,1.87,723.98 +20522.0,pick item,2020-04-07 08:08:09.000Z, ,"['887530']", , , ,1.25,2200.0 +20523.0,confirm order,2020-04-07 08:22:52.000Z, , ,"['991848']", , ,5.46,5054.96 +20524.0,pick item,2020-04-07 08:24:21.000Z, ,"['887510']", , , ,0.188,1149.0 +20525.0,place order,2020-04-07 08:56:28.000Z, ,"['887548','887547','887549','887546']","['991854']", , ,2.186,1155.98 +20526.0,pick item,2020-04-07 09:09:42.000Z, ,"['887519']", , , ,0.483,1099.0 +20527.0,create package,2020-04-07 09:09:42.000Z, ,"['887541','887433','887447','887448']", ,"['661202']", ,3.293,2519.97 +20528.0,pick item,2020-04-07 09:09:46.000Z, ,"['887537']", , , ,0.188,1149.0 +20529.0,pick item,2020-04-07 09:14:27.000Z, ,"['887390']", , , ,0.166,799.0 +20530.0,pick item,2020-04-07 09:30:33.000Z, ,"['887515']", , , ,0.78,99.99 +20531.0,pick item,2020-04-07 10:02:55.000Z, ,"['887534']", , , ,1.37,2500.0 +20532.0,create package,2020-04-07 10:02:55.000Z, ,"['887480','886912']", ,"['661203']", ,1.745,2329.0 +20533.0,reorder item,2020-04-07 10:12:10.000Z, ,"['887539']", , , ,0.172,699.0 +20534.0,failed delivery,2020-04-07 10:19:04.000Z, , , ,"['661196']", ,4.435,4573.97 +20535.0,package delivered,2020-04-07 10:35:24.000Z, , , ,"['661200']", ,3.866,6050.99 +20536.0,send package,2020-04-07 11:30:13.000Z, , , ,"['661203']", ,1.745,2329.0 +20537.0,pick item,2020-04-07 11:40:44.000Z, ,"['887479']", , , ,0.21,529.0 +20538.0,pick item,2020-04-07 12:29:51.000Z, ,"['887538']", , , ,0.38,29.99 +20539.0,create package,2020-04-07 12:29:51.000Z, ,"['887469','887522','887467']", ,"['661204']", ,2.01,2259.98 +20540.0,reorder item,2020-04-07 12:32:28.000Z, ,"['887527']", , , ,1.37,2500.0 +20541.0,pick item,2020-04-07 12:36:14.000Z, ,"['887262']", , , ,0.38,29.99 +20542.0,pick item,2020-04-07 13:04:34.000Z, ,"['887547']", , , ,0.483,495.0 +20543.0,pick item,2020-04-07 13:04:47.000Z, ,"['887525']", , , ,0.2,39.99 +20544.0,create package,2020-04-07 13:04:47.000Z, ,"['887525','887503','887532','887533','887536','887523','887528','887353','887502','887302','887534']", ,"['661205']", ,9.281,14553.97 +20545.0,confirm order,2020-04-07 13:10:07.000Z, , ,"['991853']", , ,2.2430000000000003,264.97 +20546.0,package delivered,2020-04-07 13:24:08.000Z, , , ,"['661196']", ,4.435,4573.97 +20547.0,pick item,2020-04-07 13:42:19.000Z, ,"['887549']", , , ,0.483,79.99 +20548.0,package delivered,2020-04-07 14:01:16.000Z, , , ,"['661203']", ,1.745,2329.0 +20549.0,place order,2020-04-07 14:18:54.000Z, ,"['887550','887552','887551','887553']","['991855']", , ,3.333,3793.98 +20550.0,confirm order,2020-04-07 14:19:38.000Z, , ,"['991851']", , ,1.18,2358.99 +20551.0,confirm order,2020-04-07 14:28:23.000Z, , ,"['991847']", , ,1.745,2334.0 +20552.0,confirm order,2020-04-07 14:38:22.000Z, , ,"['991854']", , ,2.186,1155.98 +20553.0,pay order,2020-04-07 14:47:59.000Z, , ,"['991853']", , ,2.2430000000000003,264.97 +20554.0,pick item,2020-04-07 14:53:34.000Z, ,"['887472']", , , ,0.172,699.0 +20555.0,pick item,2020-04-07 15:51:36.000Z, ,"['887529']", , , ,1.25,2200.0 +20556.0,send package,2020-04-07 16:04:15.000Z, , , ,"['661204']", ,2.01,2259.98 +20557.0,item out of stock,2020-04-07 16:14:27.000Z, ,"['887544']", , , ,0.88,89.99 +20558.0,pay order,2020-04-07 16:30:05.000Z, , ,"['991847']", , ,1.745,2334.0 +20559.0,pick item,2020-04-07 16:48:57.000Z, ,"['887350']", , , ,0.28,89.99 +20560.0,item out of stock,2020-04-07 16:49:02.000Z, ,"['887552']", , , ,0.483,1099.0 +20561.0,pick item,2020-04-07 16:55:00.000Z, ,"['887545']", , , ,0.483,79.99 +20562.0,pay order,2020-04-07 17:12:02.000Z, , ,"['991852']", , ,1.763,234.98 +20563.0,reorder item,2020-04-07 17:15:40.000Z, ,"['887526']", , , ,0.38,29.99 +20564.0,pick item,2020-04-07 19:50:49.000Z, ,"['887478']", , , ,0.88,89.99 +20565.0,place order,2020-04-07 20:48:38.000Z, ,"['887557','887561','887562','887559','887556','887558','887555','887560','887554']","['991856']", , ,6.086,3437.95 +20566.0,pick item,2020-04-08 07:11:07.000Z, ,"['887550']", , , ,1.37,2500.0 +20567.0,pay order,2020-04-08 07:31:42.000Z, , ,"['991756']", , ,1.722,2541.98 +20568.0,pay order,2020-04-08 07:38:50.000Z, , ,"['991772']", , ,1.54,214.97 +20569.0,pick item,2020-04-08 07:42:25.000Z, ,"['887313']", , , ,0.495,129.0 +20570.0,pay order,2020-04-08 08:11:43.000Z, , ,"['991849']", , ,2.71,4934.0 +20571.0,payment reminder,2020-04-08 08:13:25.000Z, , ,"['991765']", , ,2.704,4161.0 +20572.0,confirm order,2020-04-08 08:34:09.000Z, , ,"['991856']", , ,6.086,3437.95 +20573.0,package delivered,2020-04-08 08:38:16.000Z, , , ,"['661201']", ,8.783,10750.96 +20574.0,pay order,2020-04-08 08:44:52.000Z, , ,"['991835']", , ,4.15,5799.99 +20575.0,pick item,2020-04-08 09:16:05.000Z, ,"['887524']", , , ,0.98,129.99 +20576.0,send package,2020-04-08 09:37:33.000Z, , , ,"['661202']", ,3.293,2519.97 +20577.0,confirm order,2020-04-08 09:40:06.000Z, , ,"['991855']", , ,3.333,3793.98 +20578.0,pay order,2020-04-08 09:54:23.000Z, , ,"['991738']", , ,1.32,570.99 +20579.0,reorder item,2020-04-08 10:21:48.000Z, ,"['887492']", , , ,0.166,799.0 +20580.0,pick item,2020-04-08 10:22:24.000Z, ,"['887507']", , , ,0.44,476.0 +20581.0,place order,2020-04-08 10:44:55.000Z, ,"['887563']","['991857']", , ,0.483,1104.0 +20582.0,pick item,2020-04-08 11:14:55.000Z, ,"['887553']", , , ,0.2,39.99 +20583.0,create package,2020-04-08 11:14:55.000Z, ,"['887472','887341','887390']", ,"['661206']", ,0.504,2297.0 +20584.0,reorder item,2020-04-08 11:51:54.000Z, ,"['887521']", , , ,0.495,129.0 +20585.0,package delivered,2020-04-08 12:09:59.000Z, , , ,"['661204']", ,2.01,2259.98 +20586.0,pick item,2020-04-08 12:25:26.000Z, ,"['887428']", , , ,0.166,799.0 +20587.0,pick item,2020-04-08 13:12:11.000Z, ,"['887551']", , , ,1.28,149.99 +20588.0,pick item,2020-04-08 13:16:08.000Z, ,"['887374']", , , ,0.483,495.0 +20589.0,create package,2020-04-08 13:16:08.000Z, ,"['887489','887274','887288','887131','887488','887490','887195']", ,"['661207']", ,5.18,3488.95 +20590.0,pick item,2020-04-08 14:08:34.000Z, ,"['887346']", , , ,0.44,476.0 +20591.0,pick item,2020-04-08 14:24:29.000Z, ,"['887562']", , , ,0.172,699.0 +20592.0,reorder item,2020-04-08 14:33:44.000Z, ,"['887544']", , , ,0.88,89.99 +20593.0,item out of stock,2020-04-08 14:49:11.000Z, ,"['887563']", , , ,0.483,1099.0 +20594.0,pay order,2020-04-08 15:05:29.000Z, , ,"['991697']", , ,0.92,969.99 +20595.0,send package,2020-04-08 15:09:43.000Z, , , ,"['661205']", ,9.281,14553.97 +20596.0,pay order,2020-04-08 15:19:06.000Z, , ,"['991805']", , ,3.818,3933.98 +20597.0,pick item,2020-04-08 15:49:15.000Z, ,"['887521']", , , ,0.495,129.0 +20598.0,place order,2020-04-08 15:55:48.000Z, ,"['887566','887568','887567','887569','887565','887564']","['991858']", , ,2.084,2355.99 +20599.0,pay order,2020-04-08 17:04:19.000Z, , ,"['991826']", , ,2.443,1711.97 +20600.0,pick item,2020-04-08 17:51:20.000Z, ,"['887352']", , , ,0.38,29.99 +20601.0,create package,2020-04-08 23:00:00.000Z, ,"['887514','887446','887487','887510','887516','887512','887509','887515']", ,"['661208']", ,6.0710000000000015,1898.93 +20602.0,pick item,2020-04-09 06:42:16.000Z, ,"['887152']", , , ,0.483,495.0 +20603.0,send package,2020-04-09 07:21:19.000Z, , , ,"['661206']", ,0.504,2297.0 +20604.0,package delivered,2020-04-09 07:21:22.000Z, , , ,"['661206']", ,0.504,2297.0 +20605.0,pick item,2020-04-09 07:31:55.000Z, ,"['887555']", , , ,1.28,149.99 +20606.0,place order,2020-04-09 07:51:20.000Z, ,"['887570','887572','887571','887573']","['991859']", , ,3.676,3283.98 +20607.0,pick item,2020-04-09 08:02:12.000Z, ,"['887520']", , , ,0.78,99.99 +20608.0,item out of stock,2020-04-09 08:09:55.000Z, ,"['887564']", , , ,0.28,449.0 +20609.0,failed delivery,2020-04-09 08:21:16.000Z, , , ,"['661202']", ,3.293,2519.97 +20610.0,pay order,2020-04-09 08:22:00.000Z, , ,"['991787']", , ,3.505,2563.98 +20611.0,item out of stock,2020-04-09 08:37:19.000Z, ,"['887560']", , , ,0.188,1149.0 +20612.0,send package,2020-04-09 08:58:16.000Z, , , ,"['661208']", ,6.0710000000000015,1898.93 +20613.0,package delivered,2020-04-09 08:59:23.000Z, , , ,"['661205']", ,9.281,14553.97 +20614.0,item out of stock,2020-04-09 09:00:00.000Z, ,"['887543']", , , ,0.88,89.99 +20615.0,pick item,2020-04-09 09:06:37.000Z, ,"['887337']", , , ,0.88,89.99 +20616.0,pick item,2020-04-09 09:15:38.000Z, ,"['887511']", , , ,0.98,129.99 +20617.0,pick item,2020-04-09 09:36:10.000Z, ,"['887546']", , , ,0.78,99.99 +20618.0,pick item,2020-04-09 09:54:09.000Z, ,"['887566']", , , ,0.495,129.0 +20619.0,pick item,2020-04-09 10:16:24.000Z, ,"['887573']", , , ,0.98,129.99 +20620.0,package delivered,2020-04-09 10:56:42.000Z, , , ,"['661208']", ,6.0710000000000015,1898.93 +20621.0,reorder item,2020-04-09 11:04:31.000Z, ,"['887543']", , , ,0.88,89.99 +20622.0,send package,2020-04-09 11:29:39.000Z, , , ,"['661207']", ,5.18,3488.95 +20623.0,pick item,2020-04-09 11:59:17.000Z, ,"['887569']", , , ,0.28,449.0 +20624.0,pick item,2020-04-09 12:52:25.000Z, ,"['887570']", , , ,1.25,2200.0 +20625.0,pay order,2020-04-09 12:54:42.000Z, , ,"['991729']", , ,2.748,1453.98 +20626.0,place order,2020-04-09 13:08:38.000Z, ,"['887575','887574','887576']","['991860']", , ,3.148,1553.98 +20627.0,pick item,2020-04-09 14:02:31.000Z, ,"['887571']", , , ,1.28,149.99 +20628.0,create package,2020-04-09 14:02:31.000Z, ,"['887437','887119','887309','887313','887453','887374']", ,"['661209']", ,2.798,1232.97 +20629.0,pay order,2020-04-09 14:10:50.000Z, , ,"['991854']", , ,2.186,1155.98 +20630.0,confirm order,2020-04-09 14:10:51.000Z, , ,"['991858']", , ,2.084,2355.99 +20631.0,pick item,2020-04-09 14:12:51.000Z, ,"['887539']", , , ,0.172,699.0 +20632.0,send package,2020-04-09 14:26:21.000Z, , , ,"['661209']", ,2.798,1232.97 +20633.0,confirm order,2020-04-09 14:26:21.000Z, , ,"['991860']", , ,3.148,1553.98 +20634.0,pick item,2020-04-09 14:31:37.000Z, ,"['887574']", , , ,1.48,199.99 +20635.0,failed delivery,2020-04-09 14:51:28.000Z, , , ,"['661202']", ,3.293,2519.97 +20636.0,item out of stock,2020-04-09 15:34:03.000Z, ,"['887575']", , , ,1.48,199.99 +20637.0,reorder item,2020-04-09 15:37:08.000Z, ,"['887564']", , , ,0.28,449.0 +20638.0,payment reminder,2020-04-09 15:46:52.000Z, , ,"['991775']", , ,2.1,670.98 +20639.0,pick item,2020-04-09 16:23:23.000Z, ,"['887556']", , , ,0.28,449.0 +20640.0,pick item,2020-04-09 16:49:01.000Z, ,"['887565']", , , ,0.166,799.0 +20641.0,place order,2020-04-09 18:17:50.000Z, ,"['887583','887581','887580','887582','887577','887585','887586','887578','887579','887584']","['991861']", , ,7.31,3667.94 +20642.0,pick item,2020-04-10 06:44:51.000Z, ,"['887401']", , , ,1.25,2200.0 +20643.0,pick item,2020-04-10 07:19:30.000Z, ,"['887542']", , , ,0.483,79.99 +20644.0,create package,2020-04-10 07:19:30.000Z, ,"['887518','887520','887519','887280','887450']", ,"['661210']", ,3.023,2240.98 +20645.0,pick item,2020-04-10 07:27:21.000Z, ,"['887535']", , , ,0.38,29.99 +20646.0,pick item,2020-04-10 08:01:17.000Z, ,"['887567']", , , ,0.38,29.99 +20647.0,pay order,2020-04-10 08:05:53.000Z, , ,"['991827']", , ,1.48,194.98 +20648.0,pick item,2020-04-10 08:39:22.000Z, ,"['887582']", , , ,0.21,529.0 +20649.0,pick item,2020-04-10 08:45:42.000Z, ,"['887585']", , , ,1.28,149.99 +20650.0,pick item,2020-04-10 08:46:07.000Z, ,"['887339']", , , ,0.172,699.0 +20651.0,create package,2020-04-10 08:46:07.000Z, ,"['887227','887434']", ,"['661211']", ,0.6829999999999999,1278.0 +20652.0,confirm order,2020-04-10 08:53:04.000Z, , ,"['991861']", , ,7.31,3667.94 +20653.0,send package,2020-04-10 08:53:38.000Z, , , ,"['661211']", ,0.6829999999999999,1278.0 +20654.0,place order,2020-04-10 08:58:43.000Z, ,"['887591','887588','887592','887587','887590','887589']","['991862']", , ,2.53,4658.98 +20655.0,package delivered,2020-04-10 09:10:47.000Z, , , ,"['661209']", ,2.798,1232.97 +20656.0,pick item,2020-04-10 09:35:31.000Z, ,"['887325']", , , ,0.483,1099.0 +20657.0,pick item,2020-04-10 10:20:34.000Z, ,"['887561']", , , ,1.28,149.99 +20658.0,create package,2020-04-10 10:20:34.000Z, ,"['887414','887442','887550','887441','887567','887569','887566','887551','887553','887565']", ,"['661212']", ,5.771,5111.96 +20659.0,reorder item,2020-04-10 10:24:49.000Z, ,"['887563']", , , ,0.483,1099.0 +20660.0,package delivered,2020-04-10 10:50:50.000Z, , , ,"['661211']", ,0.6829999999999999,1278.0 +20661.0,pick item,2020-04-10 12:22:51.000Z, ,"['887492']", , , ,0.166,799.0 +20662.0,failed delivery,2020-04-10 12:29:16.000Z, , , ,"['661207']", ,5.18,3488.95 +20663.0,pick item,2020-04-10 12:37:40.000Z, ,"['887557']", , , ,1.48,199.99 +20664.0,pick item,2020-04-10 12:59:57.000Z, ,"['887592']", , , ,0.28,89.99 +20665.0,pick item,2020-04-10 13:04:46.000Z, ,"['887572']", , , ,0.166,799.0 +20666.0,pay order,2020-04-10 13:12:55.000Z, , ,"['991858']", , ,2.084,2355.99 +20667.0,confirm order,2020-04-10 13:13:36.000Z, , ,"['991859']", , ,3.676,3283.98 +20668.0,pick item,2020-04-10 13:24:50.000Z, ,"['887583']", , , ,0.172,699.0 +20669.0,package delivered,2020-04-10 13:30:57.000Z, , , ,"['661202']", ,3.293,2519.97 +20670.0,pick item,2020-04-10 13:33:29.000Z, ,"['887587']", , , ,1.25,2200.0 +20671.0,pick item,2020-04-10 13:52:23.000Z, ,"['887252']", , , ,0.2,39.99 +20672.0,pay order,2020-04-10 13:57:03.000Z, , ,"['991775']", , ,2.1,670.98 +20673.0,pick item,2020-04-10 14:09:58.000Z, ,"['887548']", , , ,0.44,476.0 +20674.0,item out of stock,2020-04-10 14:22:59.000Z, ,"['887586']", , , ,0.44,476.0 +20675.0,place order,2020-04-10 14:23:24.000Z, ,"['887594','887595','887593']","['991863']", , ,1.926,1452.99 +20676.0,pay order,2020-04-10 14:28:34.000Z, , ,"['991845']", , ,5.581,2322.94 +20677.0,send package,2020-04-10 14:57:40.000Z, , , ,"['661210']", ,3.023,2240.98 +20678.0,pick item,2020-04-10 15:32:51.000Z, ,"['887413']", , , ,0.166,799.0 +20679.0,pick item,2020-04-10 16:17:14.000Z, ,"['887568']", , , ,0.483,495.0 +20680.0,create package,2020-04-10 16:17:14.000Z, ,"['887428','887530','887531','887464','887466','887529']", ,"['661213']", ,3.547,7976.0 +20681.0,confirm order,2020-04-10 17:19:29.000Z, , ,"['991862']", , ,2.53,4658.98 +20682.0,place order,2020-04-10 21:02:08.000Z, ,"['887599','887597','887598','887600','887601','887596']","['991864']", , ,2.391,4260.98 +20683.0,payment reminder,2020-04-12 16:15:43.000Z, , ,"['991785']", , ,0.56,543.99 +20684.0,pick item,2020-04-13 06:32:01.000Z, ,"['887595']", , , ,0.166,799.0 +20685.0,place order,2020-04-13 07:23:31.000Z, ,"['887606','887603','887602','887605','887604']","['991865']", , ,2.625,2190.99 +20686.0,confirm order,2020-04-13 07:35:39.000Z, , ,"['991863']", , ,1.926,1452.99 +20687.0,item out of stock,2020-04-13 07:51:23.000Z, ,"['887578']", , , ,1.48,199.99 +20688.0,pick item,2020-04-13 07:55:48.000Z, ,"['887580']", , , ,0.98,129.99 +20689.0,send package,2020-04-13 08:10:10.000Z, , , ,"['661212']", ,5.771,5111.96 +20690.0,item out of stock,2020-04-13 08:56:31.000Z, ,"['887576']", , , ,0.188,1149.0 +20691.0,pick item,2020-04-13 09:00:36.000Z, ,"['887563']", , , ,0.483,1099.0 +20692.0,pick item,2020-04-13 09:01:44.000Z, ,"['887602']", , , ,0.495,129.0 +20693.0,pick item,2020-04-13 09:12:34.000Z, ,"['887579']", , , ,0.188,1149.0 +20694.0,pick item,2020-04-13 09:18:24.000Z, ,"['887596']", , , ,0.188,1149.0 +20695.0,create package,2020-04-13 09:18:24.000Z, ,"['887401','887505','887507','887346']", ,"['661214']", ,3.01,3241.99 +20696.0,pay order,2020-04-13 09:27:08.000Z, , ,"['991856']", , ,6.086,3437.95 +20697.0,pick item,2020-04-13 09:27:29.000Z, ,"['887590']", , , ,0.188,1149.0 +20698.0,pick item,2020-04-13 09:35:07.000Z, ,"['887357']", , , ,0.483,1099.0 +20699.0,pick item,2020-04-13 09:38:59.000Z, ,"['887600']", , , ,0.188,1149.0 +20700.0,confirm order,2020-04-13 10:10:39.000Z, , ,"['991857']", , ,0.483,1104.0 +20701.0,pick item,2020-04-13 10:13:44.000Z, ,"['887597']", , , ,0.98,129.99 +20702.0,create package,2020-04-13 10:13:44.000Z, ,"['887325','887537','887350','887539','887540','887538']", ,"['661215']", ,1.943,3542.98 +20703.0,reorder item,2020-04-13 10:43:14.000Z, ,"['887576']", , , ,0.188,1149.0 +20704.0,pick item,2020-04-13 10:53:13.000Z, ,"['887606']", , , ,0.495,129.0 +20705.0,pick item,2020-04-13 11:03:23.000Z, ,"['887577']", , , ,0.2,39.99 +20706.0,package delivered,2020-04-13 11:05:45.000Z, , , ,"['661212']", ,5.771,5111.96 +20707.0,place order,2020-04-13 12:13:00.000Z, ,"['887607','887611','887610','887609','887608']","['991866']", , ,3.165,3781.99 +20708.0,pick item,2020-04-13 13:04:05.000Z, ,"['887581']", , , ,0.88,89.99 +20709.0,pay order,2020-04-13 13:18:28.000Z, , ,"['991846']", , ,2.423,1383.97 +20710.0,pick item,2020-04-13 13:35:12.000Z, ,"['887610']", , , ,0.21,529.0 +20711.0,reorder item,2020-04-13 13:37:08.000Z, ,"['887552']", , , ,0.483,1099.0 +20712.0,pick item,2020-04-13 13:45:11.000Z, ,"['887593']", , , ,0.28,449.0 +20713.0,pick item,2020-04-13 13:52:47.000Z, ,"['887599']", , , ,0.483,1099.0 +20714.0,create package,2020-04-13 13:52:47.000Z, ,"['887562','887479','887555','887573','887571','887556','887574','887561','887478','887557','887570','887572']", ,"['661216']", ,10.738,5745.93 +20715.0,pick item,2020-04-13 13:57:31.000Z, ,"['887588']", , , ,0.172,699.0 +20716.0,payment reminder,2020-04-13 14:30:36.000Z, , ,"['991797']", , ,3.885,6139.0 +20717.0,pick item,2020-04-13 14:40:24.000Z, ,"['887601']", , , ,0.172,699.0 +20718.0,failed delivery,2020-04-13 14:50:17.000Z, , , ,"['661207']", ,5.18,3488.95 +20719.0,pick item,2020-04-13 14:50:51.000Z, ,"['887594']", , , ,1.48,199.99 +20720.0,package delivered,2020-04-13 15:10:46.000Z, , , ,"['661210']", ,3.023,2240.98 +20721.0,pick item,2020-04-13 15:34:53.000Z, ,"['887598']", , , ,0.38,29.99 +20722.0,place order,2020-04-13 16:51:58.000Z, ,"['887614','887612','887613']","['991867']", , ,1.663,669.98 +20723.0,pay order,2020-04-13 19:27:47.000Z, , ,"['991836']", , ,1.239,1857.99 +20724.0,create package,2020-04-13 23:00:00.000Z, ,"['887262','887542']", ,"['661217']", ,0.863,109.98 +20725.0,reorder item,2020-04-14 06:40:05.000Z, ,"['887575']", , , ,1.48,199.99 +20726.0,pick item,2020-04-14 06:46:38.000Z, ,"['887605']", , , ,0.483,1099.0 +20727.0,pick item,2020-04-14 06:55:29.000Z, ,"['887320']", , , ,1.37,2500.0 +20728.0,send package,2020-04-14 07:20:03.000Z, , , ,"['661213']", ,3.547,7976.0 +20729.0,pay order,2020-04-14 07:21:32.000Z, , ,"['991844']", , ,0.923,1580.0 +20730.0,send package,2020-04-14 07:23:43.000Z, , , ,"['661217']", ,0.863,109.98 +20731.0,confirm order,2020-04-14 07:34:04.000Z, , ,"['991865']", , ,2.625,2190.99 +20732.0,pay order,2020-04-14 07:39:03.000Z, , ,"['991851']", , ,1.18,2358.99 +20733.0,send package,2020-04-14 07:59:35.000Z, , , ,"['661216']", ,10.738,5745.93 +20734.0,pay order,2020-04-14 08:02:43.000Z, , ,"['991855']", , ,3.333,3793.98 +20735.0,pick item,2020-04-14 08:29:50.000Z, ,"['887558']", , , ,0.483,79.99 +20736.0,pick item,2020-04-14 08:41:36.000Z, ,"['887543']", , , ,0.88,89.99 +20737.0,place order,2020-04-14 08:45:54.000Z, ,"['887617','887619','887620','887616','887615','887618','887621']","['991868']", , ,5.71,1664.97 +20738.0,pick item,2020-04-14 08:51:27.000Z, ,"['887617']", , , ,1.28,149.99 +20739.0,pick item,2020-04-14 08:57:46.000Z, ,"['887620']", , , ,0.44,476.0 +20740.0,pick item,2020-04-14 09:05:01.000Z, ,"['887457']", , , ,1.37,2500.0 +20741.0,send package,2020-04-14 09:10:19.000Z, , , ,"['661214']", ,3.01,3241.99 +20742.0,package delivered,2020-04-14 09:12:39.000Z, , , ,"['661207']", ,5.18,3488.95 +20743.0,pick item,2020-04-14 09:24:49.000Z, ,"['887611']", , , ,1.37,2500.0 +20744.0,confirm order,2020-04-14 09:55:52.000Z, , ,"['991864']", , ,2.391,4260.98 +20745.0,pay order,2020-04-14 10:02:25.000Z, , ,"['991861']", , ,7.31,3667.94 +20746.0,pick item,2020-04-14 10:11:49.000Z, ,"['887616']", , , ,1.28,149.99 +20747.0,pay order,2020-04-14 10:18:49.000Z, , ,"['991797']", , ,3.885,6139.0 +20748.0,pick item,2020-04-14 10:19:55.000Z, ,"['887603']", , , ,0.98,129.99 +20749.0,create package,2020-04-14 10:19:55.000Z, ,"['887547','887611','887599','887601','887549','887600','887546','887548','887610','887597','887598','887596']", ,"['661218']", ,6.157,8435.96 +20750.0,confirm order,2020-04-14 11:05:56.000Z, , ,"['991868']", , ,5.71,1664.97 +20751.0,package delivered,2020-04-14 11:46:31.000Z, , , ,"['661213']", ,3.547,7976.0 +20752.0,send package,2020-04-14 12:00:40.000Z, , , ,"['661215']", ,1.943,3542.98 +20753.0,pick item,2020-04-14 12:04:55.000Z, ,"['887362']", , , ,0.21,529.0 +20754.0,package delivered,2020-04-14 12:27:58.000Z, , , ,"['661214']", ,3.01,3241.99 +20755.0,package delivered,2020-04-14 12:56:27.000Z, , , ,"['661215']", ,1.943,3542.98 +20756.0,package delivered,2020-04-14 13:45:39.000Z, , , ,"['661216']", ,10.738,5745.93 +20757.0,reorder item,2020-04-14 13:45:40.000Z, ,"['887586']", , , ,0.44,476.0 +20758.0,place order,2020-04-14 13:57:46.000Z, ,"['887622','887623','887624']","['991869']", , ,3.61,2494.98 +20759.0,reorder item,2020-04-14 13:59:02.000Z, ,"['887560']", , , ,0.188,1149.0 +20760.0,pick item,2020-04-14 14:15:35.000Z, ,"['887584']", , , ,1.48,199.99 +20761.0,pay order,2020-04-14 14:27:49.000Z, , ,"['991868']", , ,5.71,1664.97 +20762.0,package delivered,2020-04-14 14:52:21.000Z, , , ,"['661217']", ,0.863,109.98 +20763.0,item out of stock,2020-04-14 15:04:47.000Z, ,"['887613']", , , ,0.483,495.0 +20764.0,pick item,2020-04-14 15:19:21.000Z, ,"['887621']", , , ,0.495,129.0 +20765.0,payment reminder,2020-04-14 15:28:34.000Z, , ,"['991800']", , ,0.863,1133.99 +20766.0,pick item,2020-04-14 16:15:22.000Z, ,"['887559']", , , ,0.483,79.99 +20767.0,confirm order,2020-04-14 16:55:11.000Z, , ,"['991866']", , ,3.165,3781.99 +20768.0,item out of stock,2020-04-14 18:52:40.000Z, ,"['887604']", , , ,0.172,699.0 +20769.0,place order,2020-04-14 20:45:14.000Z, ,"['887626','887625']","['991870']", , ,2.85,2704.99 +20770.0,reorder item,2020-04-15 07:00:41.000Z, ,"['887578']", , , ,1.48,199.99 +20771.0,item out of stock,2020-04-15 07:50:11.000Z, ,"['887622']", , , ,1.25,2200.0 +20772.0,send package,2020-04-15 07:54:59.000Z, , , ,"['661218']", ,6.157,8435.96 +20773.0,package delivered,2020-04-15 07:58:22.000Z, , , ,"['661218']", ,6.157,8435.96 +20774.0,pick item,2020-04-15 08:03:39.000Z, ,"['887591']", , , ,0.2,39.99 +20775.0,pay order,2020-04-15 08:40:09.000Z, , ,"['991800']", , ,0.863,1133.99 +20776.0,pay order,2020-04-15 08:40:29.000Z, , ,"['991829']", , ,1.758,2108.99 +20777.0,payment reminder,2020-04-15 08:59:28.000Z, , ,"['991802']", , ,3.623,1483.97 +20778.0,payment reminder,2020-04-15 09:26:25.000Z, , ,"['991691']", , ,0.6829999999999999,124.98 +20779.0,reorder item,2020-04-15 09:36:00.000Z, ,"['887622']", , , ,1.25,2200.0 +20780.0,place order,2020-04-15 10:39:49.000Z, ,"['887629','887631','887627','887628','887630','887633','887632']","['991871']", , ,3.471,5989.99 +20781.0,item out of stock,2020-04-15 11:40:34.000Z, ,"['887631']", , , ,0.483,1099.0 +20782.0,pay order,2020-04-15 12:06:39.000Z, , ,"['991840']", , ,2.35,2634.99 +20783.0,pick item,2020-04-15 12:25:36.000Z, ,"['887618']", , , ,0.495,129.0 +20784.0,pick item,2020-04-15 12:58:16.000Z, ,"['887624']", , , ,0.88,89.99 +20785.0,pick item,2020-04-15 13:06:08.000Z, ,"['887554']", , , ,0.44,476.0 +20786.0,pick item,2020-04-15 13:14:44.000Z, ,"['887526']", , , ,0.38,29.99 +20787.0,pick item,2020-04-15 13:43:31.000Z, ,"['887609']", , , ,0.21,529.0 +20788.0,pick item,2020-04-15 14:00:58.000Z, ,"['887623']", , , ,1.48,199.99 +20789.0,pick item,2020-04-15 14:06:23.000Z, ,"['887329']", , , ,0.28,449.0 +20790.0,create package,2020-04-15 14:06:23.000Z, ,"['887357','887545','887543','887457']", ,"['661219']", ,3.216,3768.98 +20791.0,pick item,2020-04-15 14:06:53.000Z, ,"['887614']", , , ,0.98,129.99 +20792.0,pick item,2020-04-15 14:17:49.000Z, ,"['887608']", , , ,0.495,129.0 +20793.0,item out of stock,2020-04-15 14:40:34.000Z, ,"['887615']", , , ,1.28,149.99 +20794.0,confirm order,2020-04-15 15:11:27.000Z, , ,"['991867']", , ,1.663,669.98 +20795.0,confirm order,2020-04-15 15:30:28.000Z, , ,"['991869']", , ,3.61,2494.98 +20796.0,place order,2020-04-15 15:45:36.000Z, ,"['887637','887635','887636','887634']","['991872']", , ,3.3280000000000003,1523.97 +20797.0,confirm order,2020-04-15 15:59:28.000Z, , ,"['991871']", , ,3.471,5989.99 +20798.0,pick item,2020-04-15 16:01:31.000Z, ,"['887625']", , , ,1.48,199.99 +20799.0,confirm order,2020-04-15 16:42:23.000Z, , ,"['991870']", , ,2.85,2704.99 +20800.0,payment reminder,2020-04-15 19:08:07.000Z, , ,"['991810']", , ,1.607,1997.99 +20801.0,pay order,2020-04-16 06:52:48.000Z, , ,"['991862']", , ,2.53,4658.98 +20802.0,place order,2020-04-16 07:20:44.000Z, ,"['887638','887641','887642','887640','887643','887639']","['991873']", , ,3.651,2099.96 +20803.0,confirm order,2020-04-16 08:04:50.000Z, , ,"['991872']", , ,3.3280000000000003,1523.97 +20804.0,pick item,2020-04-16 08:24:38.000Z, ,"['887589']", , , ,0.44,476.0 +20805.0,create package,2020-04-16 08:24:38.000Z, ,"['887524','887352','887535','887526','887152']", ,"['661220']", ,2.603,714.96 +20806.0,pick item,2020-04-16 08:28:48.000Z, ,"['887564']", , , ,0.28,449.0 +20807.0,reorder item,2020-04-16 08:38:51.000Z, ,"['887613']", , , ,0.483,495.0 +20808.0,pick item,2020-04-16 08:45:28.000Z, ,"['887637']", , , ,1.28,149.99 +20809.0,pick item,2020-04-16 08:54:51.000Z, ,"['887638']", , , ,0.44,476.0 +20810.0,pick item,2020-04-16 09:00:49.000Z, ,"['887544']", , , ,0.88,89.99 +20811.0,pick item,2020-04-16 09:20:34.000Z, ,"['887635']", , , ,0.88,89.99 +20812.0,create package,2020-04-16 09:20:34.000Z, ,"['887591','887521','887588','887592','887587','887590','887589']", ,"['661221']", ,3.025,4782.98 +20813.0,pick item,2020-04-16 09:25:36.000Z, ,"['887643']", , , ,1.48,199.99 +20814.0,pick item,2020-04-16 09:33:59.000Z, ,"['887576']", , , ,0.188,1149.0 +20815.0,send package,2020-04-16 10:45:57.000Z, , , ,"['661220']", ,2.603,714.96 +20816.0,package delivered,2020-04-16 10:53:31.000Z, , , ,"['661220']", ,2.603,714.96 +20817.0,confirm order,2020-04-16 11:10:14.000Z, , ,"['991873']", , ,3.651,2099.96 +20818.0,pick item,2020-04-16 11:56:03.000Z, ,"['887640']", , , ,0.28,89.99 +20819.0,place order,2020-04-16 12:07:26.000Z, ,"['887644','887647','887646','887645']","['991874']", , ,4.105,2623.98 +20820.0,pick item,2020-04-16 12:12:08.000Z, ,"['887632']", , , ,0.172,699.0 +20821.0,pay order,2020-04-16 12:38:45.000Z, , ,"['991612']", , ,1.6,1019.99 +20822.0,send package,2020-04-16 13:09:17.000Z, , , ,"['661219']", ,3.216,3768.98 +20823.0,pick item,2020-04-16 13:14:18.000Z, ,"['887644']", , , ,0.88,89.99 +20824.0,pick item,2020-04-16 13:55:08.000Z, ,"['887639']", , , ,0.188,1149.0 +20825.0,package delivered,2020-04-16 13:58:32.000Z, , , ,"['661219']", ,3.216,3768.98 +20826.0,pay order,2020-04-16 14:07:37.000Z, , ,"['991870']", , ,2.85,2704.99 +20827.0,pick item,2020-04-16 14:24:25.000Z, ,"['887432']", , , ,0.38,29.99 +20828.0,create package,2020-04-16 14:24:25.000Z, ,"['887337','887644','887339','887362']", ,"['661222']", ,2.142,1407.98 +20829.0,payment reminder,2020-04-16 14:27:14.000Z, , ,"['991819']", , ,1.463,214.98 +20830.0,pick item,2020-04-16 14:37:16.000Z, ,"['887527']", , , ,1.37,2500.0 +20831.0,pick item,2020-04-16 14:57:32.000Z, ,"['887622']", , , ,1.25,2200.0 +20832.0,pay order,2020-04-16 15:00:38.000Z, , ,"['991765']", , ,2.704,4161.0 +20833.0,pay order,2020-04-16 15:06:55.000Z, , ,"['991860']", , ,3.148,1553.98 +20834.0,pay order,2020-04-16 16:35:34.000Z, , ,"['991785']", , ,0.56,543.99 +20835.0,place order,2020-04-16 16:40:50.000Z, ,"['887649','887650','887648']","['991875']", , ,2.516,3433.99 +20836.0,pay order,2020-04-16 19:35:08.000Z, , ,"['991867']", , ,1.663,669.98 +20837.0,payment reminder,2020-04-16 21:17:43.000Z, , ,"['991823']", , ,1.143,563.98 +20838.0,confirm order,2020-04-17 06:12:23.000Z, , ,"['991874']", , ,4.105,2623.98 +20839.0,pick item,2020-04-17 07:02:29.000Z, ,"['887648']", , , ,1.37,2500.0 +20840.0,pick item,2020-04-17 07:20:18.000Z, ,"['887650']", , , ,0.98,129.99 +20841.0,create package,2020-04-17 07:20:18.000Z, ,"['887511','887413','887492']", ,"['661223']", ,1.3119999999999998,1727.99 +20842.0,pick item,2020-04-17 08:02:31.000Z, ,"['887633']", , , ,0.98,129.99 +20843.0,pick item,2020-04-17 08:17:47.000Z, ,"['887626']", , , ,1.37,2500.0 +20844.0,place order,2020-04-17 08:23:38.000Z, ,"['887652','887655','887651','887654','887653']","['991876']", , ,3.418,902.97 +20845.0,pick item,2020-04-17 08:36:54.000Z, ,"['887647']", , , ,0.495,129.0 +20846.0,create package,2020-04-17 08:36:54.000Z, ,"['887583','887581','887580','887582','887577','887585','887579','887584']", ,"['661224']", ,5.39,2986.95 +20847.0,reorder item,2020-04-17 08:40:08.000Z, ,"['887604']", , , ,0.172,699.0 +20848.0,confirm order,2020-04-17 08:51:08.000Z, , ,"['991876']", , ,3.418,902.97 +20849.0,send package,2020-04-17 08:51:31.000Z, , , ,"['661221']", ,3.025,4782.98 +20850.0,pay order,2020-04-17 08:51:36.000Z, , ,"['991822']", , ,0.815,2702.0 +20851.0,pick item,2020-04-17 08:51:51.000Z, ,"['887552']", , , ,0.483,1099.0 +20852.0,confirm order,2020-04-17 09:01:15.000Z, , ,"['991875']", , ,2.516,3433.99 +20853.0,send package,2020-04-17 09:28:10.000Z, , , ,"['661223']", ,1.3119999999999998,1727.99 +20854.0,pick item,2020-04-17 09:35:31.000Z, ,"['887651']", , , ,0.28,449.0 +20855.0,pay order,2020-04-17 09:37:11.000Z, , ,"['991864']", , ,2.391,4260.98 +20856.0,pick item,2020-04-17 09:45:09.000Z, ,"['887612']", , , ,0.2,39.99 +20857.0,package delivered,2020-04-17 10:27:26.000Z, , , ,"['661221']", ,3.025,4782.98 +20858.0,send package,2020-04-17 12:00:02.000Z, , , ,"['661224']", ,5.39,2986.95 +20859.0,pick item,2020-04-17 13:01:02.000Z, ,"['887641']", , , ,0.483,79.99 +20860.0,pick item,2020-04-17 13:09:55.000Z, ,"['887046']", , , ,1.37,2500.0 +20861.0,place order,2020-04-17 13:13:14.000Z, ,"['887659','887661','887660','887658','887656','887662','887657','887663']","['991877']", , ,3.953,5138.98 +20862.0,pay order,2020-04-17 13:21:02.000Z, , ,"['991842']", , ,0.388,1193.99 +20863.0,reorder item,2020-04-17 13:23:11.000Z, ,"['887631']", , , ,0.483,1099.0 +20864.0,pick item,2020-04-17 13:32:47.000Z, ,"['887655']", , , ,0.88,89.99 +20865.0,pick item,2020-04-17 13:48:21.000Z, ,"['887657']", , , ,0.98,129.99 +20866.0,pick item,2020-04-17 14:12:11.000Z, ,"['887628']", , , ,0.21,529.0 +20867.0,create package,2020-04-17 14:12:11.000Z, ,"['887552','887602','887605','887329','887320','887563','887606','887252','887603','887564','887568']", ,"['661225']", ,6.032,7617.98 +20868.0,pick item,2020-04-17 14:22:23.000Z, ,"['887607']", , , ,0.88,89.99 +20869.0,failed delivery,2020-04-17 14:24:11.000Z, , , ,"['661224']", ,5.39,2986.95 +20870.0,failed delivery,2020-04-17 16:06:05.000Z, , , ,"['661224']", ,5.39,2986.95 +20871.0,send package,2020-04-17 16:50:06.000Z, , , ,"['661225']", ,6.032,7617.98 +20872.0,send package,2020-04-17 17:17:11.000Z, , , ,"['661222']", ,2.142,1407.98 +20873.0,place order,2020-04-17 18:31:38.000Z, ,"['887665','887664']","['991878']", , ,0.56,543.99 +20874.0,create package,2020-04-18 23:00:00.000Z, ,"['887594','887595','887593','887655','887651']", ,"['661226']", ,3.0860000000000003,1986.98 +20875.0,payment reminder,2020-04-19 14:08:12.000Z, , ,"['991825']", , ,1.543,633.98 +20876.0,payment reminder,2020-04-19 14:17:47.000Z, , ,"['991598']", , ,3.313,6333.0 +20877.0,payment reminder,2020-04-19 14:26:37.000Z, , ,"['991715']", , ,3.963,1909.97 +20878.0,place order,2020-04-20 02:41:28.000Z, ,"['887666']","['991879']", , ,0.166,804.0 +20879.0,package delivered,2020-04-20 06:51:56.000Z, , , ,"['661222']", ,2.142,1407.98 +20880.0,package delivered,2020-04-20 07:01:48.000Z, , , ,"['661225']", ,6.032,7617.98 +20881.0,pick item,2020-04-20 07:47:27.000Z, ,"['887619']", , , ,0.44,476.0 +20882.0,pick item,2020-04-20 07:55:55.000Z, ,"['887665']", , , ,0.28,449.0 +20883.0,item out of stock,2020-04-20 07:56:46.000Z, ,"['887634']", , , ,0.188,1149.0 +20884.0,confirm order,2020-04-20 08:16:13.000Z, , ,"['991879']", , ,0.166,804.0 +20885.0,pick item,2020-04-20 08:26:52.000Z, ,"['887630']", , , ,0.166,799.0 +20886.0,pick item,2020-04-20 08:30:58.000Z, ,"['887646']", , , ,1.48,199.99 +20887.0,package delivered,2020-04-20 08:46:36.000Z, , , ,"['661223']", ,1.3119999999999998,1727.99 +20888.0,confirm order,2020-04-20 09:14:32.000Z, , ,"['991877']", , ,3.953,5138.98 +20889.0,pick item,2020-04-20 09:25:34.000Z, ,"['887636']", , , ,0.98,129.99 +20890.0,pick item,2020-04-20 09:28:50.000Z, ,"['887666']", , , ,0.166,799.0 +20891.0,pick item,2020-04-20 09:49:29.000Z, ,"['887421']", , , ,1.28,149.99 +20892.0,pick item,2020-04-20 10:11:24.000Z, ,"['887662']", , , ,0.483,1099.0 +20893.0,pick item,2020-04-20 10:51:38.000Z, ,"['887645']", , , ,1.25,2200.0 +20894.0,pay order,2020-04-20 11:14:25.000Z, , ,"['991691']", , ,0.6829999999999999,124.98 +20895.0,place order,2020-04-20 11:17:35.000Z, ,"['887669','887668','887670','887667']","['991880']", , ,2.587,1508.99 +20896.0,pay order,2020-04-20 11:47:51.000Z, , ,"['991871']", , ,3.471,5989.99 +20897.0,send package,2020-04-20 12:29:57.000Z, , , ,"['661226']", ,3.0860000000000003,1986.98 +20898.0,pick item,2020-04-20 12:47:48.000Z, ,"['887664']", , , ,0.28,89.99 +20899.0,pick item,2020-04-20 12:55:13.000Z, ,"['887660']", , , ,0.172,699.0 +20900.0,pick item,2020-04-20 12:59:50.000Z, ,"['887659']", , , ,0.98,129.99 +20901.0,pick item,2020-04-20 13:20:19.000Z, ,"['887613']", , , ,0.483,495.0 +20902.0,confirm order,2020-04-20 13:51:13.000Z, , ,"['991878']", , ,0.56,543.99 +20903.0,pick item,2020-04-20 14:00:34.000Z, ,"['887652']", , , ,1.28,149.99 +20904.0,pick item,2020-04-20 14:55:57.000Z, ,"['887575']", , , ,1.48,199.99 +20905.0,create package,2020-04-20 14:55:57.000Z, ,"['887559','887558','887575','887554','887576']", ,"['661227']", ,3.074,1984.97 +20906.0,package delivered,2020-04-20 15:06:20.000Z, , , ,"['661224']", ,5.39,2986.95 +20907.0,place order,2020-04-20 16:01:08.000Z, ,"['887671','887674','887673','887675','887672']","['991881']", , ,1.981,3140.99 +20908.0,pick item,2020-04-20 16:01:16.000Z, ,"['887629']", , , ,0.21,529.0 +20909.0,item out of stock,2020-04-20 16:03:16.000Z, ,"['887627']", , , ,1.25,2200.0 +20910.0,pick item,2020-04-20 16:03:22.000Z, ,"['887661']", , , ,0.172,699.0 +20911.0,pick item,2020-04-20 16:44:23.000Z, ,"['887654']", , , ,0.483,79.99 +20912.0,pick item,2020-04-20 16:46:58.000Z, ,"['887674']", , , ,0.166,799.0 +20913.0,pick item,2020-04-20 17:25:33.000Z, ,"['887663']", , , ,0.495,129.0 +20914.0,create package,2020-04-20 17:25:33.000Z, ,"['887620','887619','887617','887616','887618','887621']", ,"['661228']", ,4.43,1509.98 +20915.0,place order,2020-04-21 07:04:14.000Z, ,"['887676','887677','887678','887679']","['991882']", , ,2.083,2118.99 +20916.0,pay order,2020-04-21 07:50:18.000Z, , ,"['991863']", , ,1.926,1452.99 +20917.0,confirm order,2020-04-21 07:56:20.000Z, , ,"['991880']", , ,2.587,1508.99 +20918.0,pick item,2020-04-21 07:58:50.000Z, ,"['887667']", , , ,0.172,699.0 +20919.0,pick item,2020-04-21 08:10:30.000Z, ,"['887672']", , , ,0.483,1099.0 +20920.0,pay order,2020-04-21 08:27:13.000Z, , ,"['991819']", , ,1.463,214.98 +20921.0,payment reminder,2020-04-21 08:54:08.000Z, , ,"['991838']", , ,2.94,344.97 +20922.0,pick item,2020-04-21 08:55:11.000Z, ,"['887671']", , , ,0.28,449.0 +20923.0,confirm order,2020-04-21 09:02:50.000Z, , ,"['991882']", , ,2.083,2118.99 +20924.0,reorder item,2020-04-21 09:03:03.000Z, ,"['887615']", , , ,1.28,149.99 +20925.0,confirm order,2020-04-21 09:54:28.000Z, , ,"['991881']", , ,1.981,3140.99 +20926.0,pay order,2020-04-21 10:12:05.000Z, , ,"['991715']", , ,3.963,1909.97 +20927.0,pick item,2020-04-21 10:21:42.000Z, ,"['887560']", , , ,0.188,1149.0 +20928.0,package delivered,2020-04-21 10:28:03.000Z, , , ,"['661226']", ,3.0860000000000003,1986.98 +20929.0,pick item,2020-04-21 10:36:22.000Z, ,"['887668']", , , ,1.48,199.99 +20930.0,send package,2020-04-21 10:37:39.000Z, , , ,"['661227']", ,3.074,1984.97 +20931.0,pay order,2020-04-21 10:52:08.000Z, , ,"['991875']", , ,2.516,3433.99 +20932.0,reorder item,2020-04-21 10:59:31.000Z, ,"['887634']", , , ,0.188,1149.0 +20933.0,pay order,2020-04-21 11:07:03.000Z, , ,"['991848']", , ,5.46,5054.96 +20934.0,pick item,2020-04-21 11:15:15.000Z, ,"['887677']", , , ,0.44,476.0 +20935.0,create package,2020-04-21 11:15:15.000Z, ,"['887622','887623','887624']", ,"['661229']", ,3.61,2489.98 +20936.0,place order,2020-04-21 11:34:26.000Z, ,"['887680','887682','887683','887681']","['991883']", , ,2.238,848.98 +20937.0,pay order,2020-04-21 12:37:54.000Z, , ,"['991882']", , ,2.083,2118.99 +20938.0,package delivered,2020-04-21 13:01:52.000Z, , , ,"['661227']", ,3.074,1984.97 +20939.0,confirm order,2020-04-21 13:06:20.000Z, , ,"['991883']", , ,2.238,848.98 +20940.0,pick item,2020-04-21 13:25:32.000Z, ,"['887673']", , , ,0.172,699.0 +20941.0,pay order,2020-04-21 13:48:38.000Z, , ,"['991874']", , ,4.105,2623.98 +20942.0,pick item,2020-04-21 13:50:11.000Z, ,"['887676']", , , ,0.483,1099.0 +20943.0,payment reminder,2020-04-21 13:52:30.000Z, , ,"['991839']", , ,0.946,903.99 +20944.0,pay order,2020-04-21 13:57:18.000Z, , ,"['991865']", , ,2.625,2190.99 +20945.0,pay order,2020-04-21 14:25:43.000Z, , ,"['991802']", , ,3.623,1483.97 +20946.0,pay order,2020-04-21 14:26:49.000Z, , ,"['991879']", , ,0.166,804.0 +20947.0,send package,2020-04-21 14:37:08.000Z, , , ,"['661229']", ,3.61,2489.98 +20948.0,failed delivery,2020-04-21 14:42:42.000Z, , , ,"['661229']", ,3.61,2489.98 +20949.0,pay order,2020-04-21 14:45:53.000Z, , ,"['991881']", , ,1.981,3140.99 +20950.0,pay order,2020-04-21 15:08:47.000Z, , ,"['991838']", , ,2.94,344.97 +20951.0,place order,2020-04-21 16:34:50.000Z, ,"['887685','887687','887684','887686']","['991884']", , ,1.982,3802.0 +20952.0,pick item,2020-04-21 17:18:40.000Z, ,"['887474']", , , ,0.28,89.99 +20953.0,create package,2020-04-21 17:18:40.000Z, ,"['887665','887664','887609','887607','887608']", ,"['661230']", ,2.145,1286.98 +20954.0,pick item,2020-04-21 18:22:15.000Z, ,"['887517']", , , ,0.28,89.99 +20955.0,pick item,2020-04-21 18:47:47.000Z, ,"['887675']", , , ,0.88,89.99 +20956.0,pick item,2020-04-21 18:48:39.000Z, ,"['887679']", , , ,0.28,449.0 +20957.0,pick item,2020-04-22 07:27:07.000Z, ,"['887686']", , , ,1.25,2200.0 +20958.0,send package,2020-04-22 07:41:58.000Z, , , ,"['661228']", ,4.43,1509.98 +20959.0,failed delivery,2020-04-22 07:54:11.000Z, , , ,"['661229']", ,3.61,2489.98 +20960.0,pick item,2020-04-22 07:54:32.000Z, ,"['887680']", , , ,0.28,89.99 +20961.0,create package,2020-04-22 07:54:32.000Z, ,"['887614','887612','887613']", ,"['661231']", ,1.663,664.98 +20962.0,payment reminder,2020-04-22 08:00:36.000Z, , ,"['991732']", , ,1.826,983.98 +20963.0,place order,2020-04-22 08:11:38.000Z, ,"['887691','887692','887688','887690','887689']","['991885']", , ,3.2,5912.0 +20964.0,confirm order,2020-04-22 08:12:41.000Z, , ,"['991884']", , ,1.982,3802.0 +20965.0,pick item,2020-04-22 08:37:02.000Z, ,"['887631']", , , ,0.483,1099.0 +20966.0,item out of stock,2020-04-22 08:38:15.000Z, ,"['887687']", , , ,0.28,449.0 +20967.0,item out of stock,2020-04-22 08:45:19.000Z, ,"['887678']", , , ,0.88,89.99 +20968.0,pick item,2020-04-22 08:54:05.000Z, ,"['887684']", , , ,0.28,449.0 +20969.0,pick item,2020-04-22 09:01:51.000Z, ,"['887681']", , , ,0.483,495.0 +20970.0,create package,2020-04-22 09:01:51.000Z, ,"['887641','887640','887625','887639','887432','887638','887626','887643']", ,"['661232']", ,6.101,4724.95 +20971.0,pay order,2020-04-22 10:04:08.000Z, , ,"['991598']", , ,3.313,6333.0 +20972.0,send package,2020-04-22 11:05:01.000Z, , , ,"['661232']", ,6.101,4724.95 +20973.0,pick item,2020-04-22 11:31:01.000Z, ,"['887653']", , , ,0.495,129.0 +20974.0,confirm order,2020-04-22 12:09:34.000Z, , ,"['991885']", , ,3.2,5912.0 +20975.0,place order,2020-04-22 12:49:14.000Z, ,"['887696','887695','887694','887693']","['991886']", , ,2.59,2843.98 +20976.0,confirm order,2020-04-22 12:53:36.000Z, , ,"['991886']", , ,2.59,2843.98 +20977.0,send package,2020-04-22 13:03:16.000Z, , , ,"['661230']", ,2.145,1286.98 +20978.0,package delivered,2020-04-22 13:29:58.000Z, , , ,"['661232']", ,6.101,4724.95 +20979.0,pick item,2020-04-22 14:08:18.000Z, ,"['887656']", , , ,0.483,1099.0 +20980.0,item out of stock,2020-04-22 14:13:00.000Z, ,"['887695']", , , ,1.25,2200.0 +20981.0,package delivered,2020-04-22 14:35:27.000Z, , , ,"['661230']", ,2.145,1286.98 +20982.0,reorder item,2020-04-22 14:44:52.000Z, ,"['887627']", , , ,1.25,2200.0 +20983.0,pick item,2020-04-22 15:03:12.000Z, ,"['887642']", , , ,0.78,99.99 +20984.0,pick item,2020-04-22 15:25:39.000Z, ,"['887694']", , , ,0.28,449.0 +20985.0,pick item,2020-04-22 16:09:04.000Z, ,"['887692']", , , ,0.21,529.0 +20986.0,pay order,2020-04-22 16:19:28.000Z, , ,"['991839']", , ,0.946,903.99 +20987.0,place order,2020-04-22 18:19:38.000Z, ,"['887698','887700','887699','887697']","['991887']", , ,3.221,1232.98 +20988.0,pick item,2020-04-22 19:37:00.000Z, ,"['887697']", , , ,0.495,129.0 +20989.0,pick item,2020-04-23 07:20:30.000Z, ,"['887699']", , , ,1.28,149.99 +20990.0,pick item,2020-04-23 08:29:13.000Z, ,"['887690']", , , ,0.28,449.0 +20991.0,create package,2020-04-23 08:29:13.000Z, ,"['887659','887661','887660','887656','887636','887663','887662','887657','887527','887637','887635']", ,"['661233']", ,8.275,6854.95 +20992.0,send package,2020-04-23 08:33:54.000Z, , , ,"['661231']", ,1.663,664.98 +20993.0,package delivered,2020-04-23 08:41:23.000Z, , , ,"['661231']", ,1.663,664.98 +20994.0,item out of stock,2020-04-23 08:44:34.000Z, ,"['887683']", , , ,0.495,129.0 +20995.0,pick item,2020-04-23 08:45:00.000Z, ,"['887693']", , , ,0.78,99.99 +20996.0,reorder item,2020-04-23 08:46:39.000Z, ,"['887695']", , , ,1.25,2200.0 +20997.0,pick item,2020-04-23 08:53:49.000Z, ,"['887649']", , , ,0.166,799.0 +20998.0,place order,2020-04-23 09:01:25.000Z, ,"['887704','887701','887702','887703']","['991888']", , ,2.08,1252.98 +20999.0,confirm order,2020-04-23 09:08:38.000Z, , ,"['991888']", , ,2.08,1252.98 +21000.0,item out of stock,2020-04-23 09:16:07.000Z, ,"['887698']", , , ,1.28,149.99 +21001.0,pick item,2020-04-23 09:18:53.000Z, ,"['887689']", , , ,1.25,2200.0 +21002.0,package delivered,2020-04-23 09:57:20.000Z, , , ,"['661229']", ,3.61,2489.98 +21003.0,package delivered,2020-04-23 10:37:35.000Z, , , ,"['661228']", ,4.43,1509.98 +21004.0,pick item,2020-04-23 10:41:44.000Z, ,"['887513']", , , ,0.21,529.0 +21005.0,send package,2020-04-23 12:45:10.000Z, , , ,"['661233']", ,8.275,6854.95 +21006.0,place order,2020-04-23 13:28:48.000Z, ,"['887708','887707','887706','887705']","['991889']", , ,1.845,2461.99 +21007.0,pick item,2020-04-23 13:29:30.000Z, ,"['887706']", , , ,0.98,129.99 +21008.0,confirm order,2020-04-23 13:43:41.000Z, , ,"['991887']", , ,3.221,1232.98 +21009.0,pick item,2020-04-23 13:46:38.000Z, ,"['887702']", , , ,0.88,89.99 +21010.0,package delivered,2020-04-23 13:49:39.000Z, , , ,"['661233']", ,8.275,6854.95 +21011.0,pick item,2020-04-23 14:11:16.000Z, ,"['887685']", , , ,0.172,699.0 +21012.0,pick item,2020-04-23 14:32:13.000Z, ,"['887708']", , , ,0.172,699.0 +21013.0,pick item,2020-04-23 14:40:51.000Z, ,"['887703']", , , ,0.21,529.0 +21014.0,pick item,2020-04-23 14:44:43.000Z, ,"['887670']", , , ,0.44,476.0 +21015.0,confirm order,2020-04-23 15:03:46.000Z, , ,"['991889']", , ,1.845,2461.99 +21016.0,pick item,2020-04-23 15:18:30.000Z, ,"['887627']", , , ,1.25,2200.0 +21017.0,create package,2020-04-23 15:18:30.000Z, ,"['887629','887627','887628','887631','887630','887633','887632','887544']", ,"['661234']", ,4.351,6074.98 +21018.0,item out of stock,2020-04-23 15:25:55.000Z, ,"['887704']", , , ,0.78,99.99 +21019.0,place order,2020-04-23 19:18:20.000Z, ,"['887712','887715','887710','887714','887709','887713','887711']","['991890']", , ,7.249,1723.94 +21020.0,create package,2020-04-23 23:00:00.000Z, ,"['887650','887689','887647','887649','887645','887474','887692','887690','887646','887648']", ,"['661235']", ,7.761,9225.97 +21021.0,item out of stock,2020-04-24 06:40:11.000Z, ,"['887700']", , , ,0.166,799.0 +21022.0,send package,2020-04-24 07:03:18.000Z, , , ,"['661235']", ,7.761,9225.97 +21023.0,package delivered,2020-04-24 07:35:46.000Z, , , ,"['661235']", ,7.761,9225.97 +21024.0,pick item,2020-04-24 07:41:10.000Z, ,"['887711']", , , ,1.28,149.99 +21025.0,pay order,2020-04-24 08:12:28.000Z, , ,"['991888']", , ,2.08,1252.98 +21026.0,place order,2020-04-24 09:29:28.000Z, ,"['887717','887716']","['991891']", , ,1.66,194.98 +21027.0,item out of stock,2020-04-24 10:04:41.000Z, ,"['887712']", , , ,0.483,79.99 +21028.0,pick item,2020-04-24 13:13:45.000Z, ,"['887688']", , , ,0.21,529.0 +21029.0,pick item,2020-04-24 13:14:40.000Z, ,"['887715']", , , ,1.48,199.99 +21030.0,pick item,2020-04-24 14:10:28.000Z, ,"['887707']", , , ,0.483,1099.0 +21031.0,place order,2020-04-24 14:24:54.000Z, ,"['887721','887723','887719','887718','887722','887720']","['991892']", , ,2.205,4055.99 +21032.0,item out of stock,2020-04-24 16:55:43.000Z, ,"['887717']", , , ,0.88,89.99 +21033.0,pick item,2020-04-24 17:30:59.000Z, ,"['887714']", , , ,1.48,199.99 +21034.0,place order,2020-04-24 21:06:38.000Z, ,"['887728','887726','887730','887733','887735','887727','887731','887734','887729','887724','887725','887736','887732']","['991893']", , ,5.819,5236.95 +21035.0,payment reminder,2020-04-26 11:23:28.000Z, , ,"['991850']", , ,4.81,7710.99 +21036.0,payment reminder,2020-04-26 13:21:47.000Z, , ,"['991750']", , ,2.714,2171.98 +21037.0,item out of stock,2020-04-27 06:53:02.000Z, ,"['887730']", , , ,0.44,476.0 +21038.0,pick item,2020-04-27 07:09:53.000Z, ,"['887719']", , , ,0.483,1099.0 +21039.0,confirm order,2020-04-27 07:10:00.000Z, , ,"['991893']", , ,5.819,5236.95 +21040.0,place order,2020-04-27 07:28:28.000Z, ,"['887738','887737','887739']","['991894']", , ,3.2,830.98 +21041.0,reorder item,2020-04-27 07:35:43.000Z, ,"['887700']", , , ,0.166,799.0 +21042.0,pick item,2020-04-27 07:43:53.000Z, ,"['887735']", , , ,0.28,89.99 +21043.0,pick item,2020-04-27 07:57:55.000Z, ,"['887722']", , , ,0.21,529.0 +21044.0,send package,2020-04-27 08:24:09.000Z, , , ,"['661234']", ,4.351,6074.98 +21045.0,item out of stock,2020-04-27 08:28:01.000Z, ,"['887728']", , , ,0.188,1149.0 +21046.0,pick item,2020-04-27 08:29:49.000Z, ,"['887691']", , , ,1.25,2200.0 +21047.0,confirm order,2020-04-27 08:52:18.000Z, , ,"['991891']", , ,1.66,194.98 +21048.0,pick item,2020-04-27 09:00:30.000Z, ,"['887709']", , , ,0.88,89.99 +21049.0,pay order,2020-04-27 09:15:13.000Z, , ,"['991883']", , ,2.238,848.98 +21050.0,reorder item,2020-04-27 10:11:57.000Z, ,"['887678']", , , ,0.88,89.99 +21051.0,confirm order,2020-04-27 10:14:59.000Z, , ,"['991894']", , ,3.2,830.98 +21052.0,pick item,2020-04-27 10:59:08.000Z, ,"['887727']", , , ,0.98,129.99 +21053.0,pick item,2020-04-27 11:02:01.000Z, ,"['887726']", , , ,0.483,1099.0 +21054.0,pick item,2020-04-27 11:14:13.000Z, ,"['887705']", , , ,0.21,529.0 +21055.0,item out of stock,2020-04-27 11:30:05.000Z, ,"['887738']", , , ,0.44,476.0 +21056.0,pick item,2020-04-27 12:14:05.000Z, ,"['887724']", , , ,0.21,529.0 +21057.0,place order,2020-04-27 12:22:54.000Z, ,"['887744','887745','887740','887743','887742','887741']","['991895']", , ,2.61,2867.98 +21058.0,pick item,2020-04-27 12:51:07.000Z, ,"['887734']", , , ,0.28,449.0 +21059.0,pick item,2020-04-27 13:00:25.000Z, ,"['887716']", , , ,0.78,99.99 +21060.0,pay order,2020-04-27 13:19:37.000Z, , ,"['991877']", , ,3.953,5138.98 +21061.0,item out of stock,2020-04-27 13:24:27.000Z, ,"['887658']", , , ,0.188,1149.0 +21062.0,pick item,2020-04-27 13:25:03.000Z, ,"['887701']", , , ,0.21,529.0 +21063.0,reorder item,2020-04-27 13:28:25.000Z, ,"['887683']", , , ,0.495,129.0 +21064.0,reorder item,2020-04-27 13:33:55.000Z, ,"['887704']", , , ,0.78,99.99 +21065.0,reorder item,2020-04-27 13:56:05.000Z, ,"['887687']", , , ,0.28,449.0 +21066.0,pick item,2020-04-27 14:14:11.000Z, ,"['887720']", , , ,0.38,29.99 +21067.0,create package,2020-04-27 14:14:11.000Z, ,"['887046']", ,"['661236']", ,1.37,2500.0 +21068.0,pick item,2020-04-27 14:20:01.000Z, ,"['887615']", , , ,1.28,149.99 +21069.0,create package,2020-04-27 14:20:01.000Z, ,"['887652','887666','887654','887653']", ,"['661237']", ,2.424,1157.98 +21070.0,item out of stock,2020-04-27 14:35:24.000Z, ,"['887696']", , , ,0.28,89.99 +21071.0,send package,2020-04-27 14:46:56.000Z, , , ,"['661237']", ,2.424,1157.98 +21072.0,pick item,2020-04-27 15:47:55.000Z, ,"['887737']", , , ,1.48,199.99 +21073.0,reorder item,2020-04-27 15:49:37.000Z, ,"['887738']", , , ,0.44,476.0 +21074.0,pick item,2020-04-27 16:19:00.000Z, ,"['887745']", , , ,0.172,699.0 +21075.0,place order,2020-04-27 17:11:46.000Z, ,"['887747','887748','887749','887746']","['991896']", , ,1.35,952.98 +21076.0,confirm order,2020-04-27 18:53:20.000Z, , ,"['991896']", , ,1.35,952.98 +21077.0,pick item,2020-04-28 06:29:30.000Z, ,"['887739']", , , ,1.28,149.99 +21078.0,item out of stock,2020-04-28 07:27:43.000Z, ,"['887749']", , , ,0.495,129.0 +21079.0,pick item,2020-04-28 07:29:33.000Z, ,"['887710']", , , ,1.48,199.99 +21080.0,create package,2020-04-28 07:29:33.000Z, ,"['887513','887708','887705','887421','887707','887699','887697','887706']", ,"['661238']", ,5.11,3414.97 +21081.0,pick item,2020-04-28 08:06:05.000Z, ,"['887718']", , , ,0.483,1099.0 +21082.0,pay order,2020-04-28 08:14:10.000Z, , ,"['991869']", , ,3.61,2494.98 +21083.0,place order,2020-04-28 08:19:37.000Z, ,"['887752','887750','887753','887751']","['991897']", , ,3.02,3332.99 +21084.0,package delivered,2020-04-28 08:39:11.000Z, , , ,"['661234']", ,4.351,6074.98 +21085.0,package delivered,2020-04-28 08:59:26.000Z, , , ,"['661237']", ,2.424,1157.98 +21086.0,reorder item,2020-04-28 09:38:49.000Z, ,"['887698']", , , ,1.28,149.99 +21087.0,pay order,2020-04-28 09:45:03.000Z, , ,"['991876']", , ,3.418,902.97 +21088.0,confirm order,2020-04-28 09:46:21.000Z, , ,"['991895']", , ,2.61,2867.98 +21089.0,item out of stock,2020-04-28 09:49:06.000Z, ,"['887744']", , , ,0.88,89.99 +21090.0,send package,2020-04-28 10:05:36.000Z, , , ,"['661238']", ,5.11,3414.97 +21091.0,pick item,2020-04-28 10:09:56.000Z, ,"['887742']", , , ,0.172,699.0 +21092.0,reorder item,2020-04-28 10:32:08.000Z, ,"['887728']", , , ,0.188,1149.0 +21093.0,pick item,2020-04-28 11:11:46.000Z, ,"['887713']", , , ,0.166,799.0 +21094.0,pick item,2020-04-28 11:51:33.000Z, ,"['887741']", , , ,0.78,99.99 +21095.0,pick item,2020-04-28 12:04:55.000Z, ,"['887578']", , , ,1.48,199.99 +21096.0,pick item,2020-04-28 12:09:08.000Z, ,"['887669']", , , ,0.495,129.0 +21097.0,confirm order,2020-04-28 12:27:17.000Z, , ,"['991890']", , ,7.249,1723.94 +21098.0,package delivered,2020-04-28 12:49:26.000Z, , , ,"['661238']", ,5.11,3414.97 +21099.0,place order,2020-04-28 13:05:12.000Z, ,"['887755','887754']","['991898']", , ,1.963,284.98 +21100.0,confirm order,2020-04-28 13:07:38.000Z, , ,"['991898']", , ,1.963,284.98 +21101.0,pay order,2020-04-28 13:32:02.000Z, , ,"['991896']", , ,1.35,952.98 +21102.0,pick item,2020-04-28 13:34:40.000Z, ,"['887731']", , , ,0.28,89.99 +21103.0,pick item,2020-04-28 14:03:44.000Z, ,"['887748']", , , ,0.172,699.0 +21104.0,create package,2020-04-28 14:03:44.000Z, ,"['887671','887745','887672','887742','887711','887710','887714','887709','887673','887715','887713','887676','887674','887675','887741','887677','887679']", ,"['661239']", ,11.074000000000002,8296.93 +21105.0,pick item,2020-04-28 14:08:42.000Z, ,"['887732']", , , ,0.44,476.0 +21106.0,pick item,2020-04-28 14:21:29.000Z, ,"['887746']", , , ,0.483,79.99 +21107.0,pay order,2020-04-28 14:28:25.000Z, , ,"['991880']", , ,2.587,1508.99 +21108.0,send package,2020-04-28 14:32:50.000Z, , , ,"['661236']", ,1.37,2500.0 +21109.0,pick item,2020-04-28 15:04:13.000Z, ,"['887682']", , , ,0.98,129.99 +21110.0,confirm order,2020-04-28 15:21:12.000Z, , ,"['991892']", , ,2.205,4055.99 +21111.0,pick item,2020-04-28 15:57:53.000Z, ,"['887740']", , , ,0.44,476.0 +21112.0,package delivered,2020-04-28 16:27:06.000Z, , , ,"['661236']", ,1.37,2500.0 +21113.0,place order,2020-04-28 18:07:32.000Z, ,"['887760','887757','887758','887761','887759','887756']","['991899']", , ,2.5980000000000003,3300.98 +21114.0,create package,2020-04-28 23:00:00.000Z, ,"['887726','887669','887737','887735','887727','887731','887734','887724','887670','887667','887732','887739','887668']", ,"['661240']", ,8.3,4716.94 +21115.0,reorder item,2020-04-29 07:15:44.000Z, ,"['887696']", , , ,0.28,89.99 +21116.0,send package,2020-04-29 08:19:01.000Z, , , ,"['661239']", ,11.074000000000002,8296.93 +21117.0,place order,2020-04-29 08:43:16.000Z, ,"['887762']","['991900']", , ,0.483,84.99 +21118.0,pick item,2020-04-29 08:44:33.000Z, ,"['887751']", , , ,0.21,529.0 +21119.0,pick item,2020-04-29 08:45:46.000Z, ,"['887723']", , , ,0.166,799.0 +21120.0,pick item,2020-04-29 09:09:44.000Z, ,"['887758']", , , ,0.172,699.0 +21121.0,confirm order,2020-04-29 09:19:33.000Z, , ,"['991897']", , ,3.02,3332.99 +21122.0,send package,2020-04-29 10:06:40.000Z, , , ,"['661240']", ,8.3,4716.94 +21123.0,item out of stock,2020-04-29 10:08:44.000Z, ,"['887752']", , , ,1.25,2200.0 +21124.0,pick item,2020-04-29 11:03:06.000Z, ,"['887728']", , , ,0.188,1149.0 +21125.0,pick item,2020-04-29 11:38:43.000Z, ,"['887759']", , , ,0.495,129.0 +21126.0,item out of stock,2020-04-29 11:46:15.000Z, ,"['887733']", , , ,0.495,129.0 +21127.0,pick item,2020-04-29 12:45:57.000Z, ,"['887762']", , , ,0.483,79.99 +21128.0,item out of stock,2020-04-29 12:46:47.000Z, ,"['887754']", , , ,1.48,199.99 +21129.0,pick item,2020-04-29 12:50:29.000Z, ,"['887700']", , , ,0.166,799.0 +21130.0,reorder item,2020-04-29 12:59:14.000Z, ,"['887752']", , , ,1.25,2200.0 +21131.0,pick item,2020-04-29 12:59:55.000Z, ,"['887756']", , , ,0.98,129.99 +21132.0,pick item,2020-04-29 13:40:52.000Z, ,"['887721']", , , ,0.483,495.0 +21133.0,reorder item,2020-04-29 13:45:23.000Z, ,"['887712']", , , ,0.483,79.99 +21134.0,place order,2020-04-29 13:52:30.000Z, ,"['887763']","['991901']", , ,0.172,704.0 +21135.0,pick item,2020-04-29 14:18:38.000Z, ,"['887753']", , , ,0.28,449.0 +21136.0,pay order,2020-04-29 14:23:12.000Z, , ,"['991825']", , ,1.543,633.98 +21137.0,pick item,2020-04-29 14:47:56.000Z, ,"['887683']", , , ,0.495,129.0 +21138.0,reorder item,2020-04-29 14:50:50.000Z, ,"['887730']", , , ,0.44,476.0 +21139.0,item out of stock,2020-04-29 15:18:08.000Z, ,"['887763']", , , ,0.172,699.0 +21140.0,pick item,2020-04-29 15:50:14.000Z, ,"['887761']", , , ,0.28,89.99 +21141.0,pick item,2020-04-29 15:55:16.000Z, ,"['887729']", , , ,0.88,89.99 +21142.0,pick item,2020-04-29 16:39:50.000Z, ,"['887695']", , , ,1.25,2200.0 +21143.0,pay order,2020-04-29 17:10:49.000Z, , ,"['991850']", , ,4.81,7710.99 +21144.0,place order,2020-04-29 20:29:26.000Z, ,"['887765','887764','887766']","['991902']", , ,0.848,1632.99 +21145.0,confirm order,2020-04-30 07:56:20.000Z, , ,"['991901']", , ,0.172,704.0 +21146.0,package delivered,2020-04-30 07:57:26.000Z, , , ,"['661239']", ,11.074000000000002,8296.93 +21147.0,pick item,2020-04-30 08:04:22.000Z, ,"['887765']", , , ,0.28,449.0 +21148.0,pick item,2020-04-30 08:17:09.000Z, ,"['887736']", , , ,0.483,495.0 +21149.0,pick item,2020-04-30 08:25:52.000Z, ,"['887604']", , , ,0.172,699.0 +21150.0,confirm order,2020-04-30 09:54:56.000Z, , ,"['991899']", , ,2.5980000000000003,3300.98 +21151.0,place order,2020-04-30 10:16:07.000Z, ,"['887767','887768','887769']","['991903']", , ,2.86,3183.99 +21152.0,pick item,2020-04-30 10:30:25.000Z, ,"['887698']", , , ,1.28,149.99 +21153.0,pick item,2020-04-30 12:29:54.000Z, ,"['887747']", , , ,0.2,39.99 +21154.0,pick item,2020-04-30 12:36:25.000Z, ,"['887766']", , , ,0.188,1149.0 +21155.0,pay order,2020-04-30 13:11:16.000Z, , ,"['991901']", , ,0.172,704.0 +21156.0,payment reminder,2020-04-30 13:13:36.000Z, , ,"['991859']", , ,3.676,3283.98 +21157.0,package delivered,2020-04-30 13:16:13.000Z, , , ,"['661240']", ,8.3,4716.94 +21158.0,reorder item,2020-04-30 13:45:10.000Z, ,"['887749']", , , ,0.495,129.0 +21159.0,pick item,2020-04-30 13:57:43.000Z, ,"['887760']", , , ,0.483,1099.0 +21160.0,pick item,2020-04-30 14:07:15.000Z, ,"['887768']", , , ,1.28,149.99 +21161.0,reorder item,2020-04-30 14:11:02.000Z, ,"['887658']", , , ,0.188,1149.0 +21162.0,place order,2020-04-30 14:58:12.000Z, ,"['887777','887774','887775','887772','887776','887770','887778','887773','887771']","['991904']", , ,6.681,2482.93 +21163.0,pay order,2020-04-30 15:21:55.000Z, , ,"['991878']", , ,0.56,543.99 +21164.0,pick item,2020-04-30 16:35:18.000Z, ,"['887725']", , , ,0.38,29.99 +21165.0,place order,2020-04-30 23:52:42.000Z, ,"['887780','887779']","['991905']", , ,0.58,74.98 +21166.0,reorder item,2020-05-01 07:34:41.000Z, ,"['887754']", , , ,1.48,199.99 +21167.0,pick item,2020-05-01 07:34:54.000Z, ,"['887779']", , , ,0.38,29.99 +21168.0,place order,2020-05-01 08:05:46.000Z, ,"['887784','887782','887783','887781']","['991906']", , ,3.5460000000000003,5293.99 +21169.0,confirm order,2020-05-01 08:08:44.000Z, , ,"['991905']", , ,0.58,74.98 +21170.0,reorder item,2020-05-01 08:30:25.000Z, ,"['887763']", , , ,0.172,699.0 +21171.0,pick item,2020-05-01 08:32:57.000Z, ,"['887776']", , , ,0.78,99.99 +21172.0,pick item,2020-05-01 08:47:40.000Z, ,"['887775']", , , ,0.188,1149.0 +21173.0,create package,2020-05-01 08:47:40.000Z, ,"['887560']", ,"['661241']", ,0.188,1149.0 +21174.0,pick item,2020-05-01 09:23:39.000Z, ,"['887757']", , , ,0.188,1149.0 +21175.0,create package,2020-05-01 09:23:39.000Z, ,"['887685','887684','887517','887686']", ,"['661242']", ,1.982,3437.99 +21176.0,place order,2020-05-01 09:31:19.000Z, ,"['887789','887786','887788','887785','887787']","['991907']", , ,3.51,6432.0 +21177.0,pick item,2020-05-01 09:55:31.000Z, ,"['887634']", , , ,0.188,1149.0 +21178.0,pick item,2020-05-01 10:07:57.000Z, ,"['887750']", , , ,1.28,149.99 +21179.0,pay order,2020-05-01 10:17:37.000Z, , ,"['991886']", , ,2.59,2843.98 +21180.0,pick item,2020-05-01 10:17:38.000Z, ,"['887658']", , , ,0.188,1149.0 +21181.0,place order,2020-05-01 11:22:26.000Z, ,"['887793','887791','887790','887792']","['991908']", , ,2.4290000000000003,789.97 +21182.0,confirm order,2020-05-01 12:38:53.000Z, , ,"['991907']", , ,3.51,6432.0 +21183.0,pick item,2020-05-01 13:01:38.000Z, ,"['887755']", , , ,0.483,79.99 +21184.0,create package,2020-05-01 13:01:38.000Z, ,"['887680','887682','887695','887694','887683','887693','887681']", ,"['661243']", ,4.548,3592.97 +21185.0,place order,2020-05-01 13:04:39.000Z, ,"['887797','887796','887794','887795']","['991909']", , ,3.688,5943.99 +21186.0,pick item,2020-05-01 13:18:48.000Z, ,"['887586']", , , ,0.44,476.0 +21187.0,pick item,2020-05-01 13:22:27.000Z, ,"['887773']", , , ,1.28,149.99 +21188.0,pick item,2020-05-01 13:53:38.000Z, ,"['887769']", , , ,1.37,2500.0 +21189.0,confirm order,2020-05-01 14:14:34.000Z, , ,"['991902']", , ,0.848,1632.99 +21190.0,pick item,2020-05-01 14:20:10.000Z, ,"['887792']", , , ,0.98,129.99 +21191.0,place order,2020-05-01 14:29:06.000Z, ,"['887798']","['991910']", , ,0.188,1154.0 +21192.0,pick item,2020-05-01 14:48:26.000Z, ,"['887794']", , , ,0.88,89.99 +21193.0,send package,2020-05-01 14:57:56.000Z, , , ,"['661243']", ,4.548,3592.97 +21194.0,pick item,2020-05-01 15:10:18.000Z, ,"['887774']", , , ,1.28,149.99 +21195.0,send package,2020-05-01 15:15:20.000Z, , , ,"['661241']", ,0.188,1149.0 +21196.0,confirm order,2020-05-01 15:21:41.000Z, , ,"['991900']", , ,0.483,84.99 +21197.0,item out of stock,2020-05-01 15:25:38.000Z, ,"['887782']", , , ,0.88,89.99 +21198.0,reorder item,2020-05-01 15:31:17.000Z, ,"['887717']", , , ,0.88,89.99 +21199.0,confirm order,2020-05-01 16:06:47.000Z, , ,"['991908']", , ,2.4290000000000003,789.97 +21200.0,place order,2020-05-01 16:17:59.000Z, ,"['887808','887802','887805','887799','887804','887801','887807','887800','887803','887806']","['991911']", , ,5.441,2434.94 +21201.0,pick item,2020-05-01 16:24:31.000Z, ,"['887778']", , , ,0.98,129.99 +21202.0,create package,2020-05-01 16:24:31.000Z, ,"['887642']", ,"['661244']", ,0.78,99.99 +21203.0,send package,2020-05-01 17:37:08.000Z, , , ,"['661242']", ,1.982,3437.99 +21204.0,pick item,2020-05-01 18:22:55.000Z, ,"['887793']", , , ,0.483,495.0 +21205.0,create package,2020-05-01 18:22:55.000Z, ,"['887701','887779','887702','887703']", ,"['661245']", ,1.68,1177.98 +21206.0,place order,2020-05-01 18:33:32.000Z, ,"['887809','887810','887811','887812']","['991912']", , ,1.731,2801.99 +21207.0,pay order,2020-05-01 19:05:25.000Z, , ,"['991908']", , ,2.4290000000000003,789.97 +21208.0,place order,2020-05-01 23:29:12.000Z, ,"['887813','887814']","['991913']", , ,0.612,1180.0 +21209.0,place order,2020-05-02 22:57:25.000Z, ,"['887818','887815','887816','887817']","['991914']", , ,3.983,5289.99 +21210.0,payment reminder,2020-05-03 10:10:39.000Z, , ,"['991857']", , ,0.483,1104.0 +21211.0,place order,2020-05-03 22:53:50.000Z, ,"['887820','887819','887821','887822']","['991915']", , ,2.748,1483.97 +21212.0,create package,2020-05-03 23:00:00.000Z, ,"['887691','887688','887716']", ,"['661246']", ,2.24,2828.99 +21213.0,pick item,2020-05-04 06:40:31.000Z, ,"['887806']", , , ,0.2,39.99 +21214.0,package delivered,2020-05-04 07:00:41.000Z, , , ,"['661241']", ,0.188,1149.0 +21215.0,item out of stock,2020-05-04 07:02:41.000Z, ,"['887797']", , , ,1.37,2500.0 +21216.0,pick item,2020-05-04 07:07:32.000Z, ,"['887807']", , , ,0.78,99.99 +21217.0,send package,2020-05-04 07:35:33.000Z, , , ,"['661244']", ,0.78,99.99 +21218.0,pick item,2020-05-04 07:48:24.000Z, ,"['887777']", , , ,0.483,79.99 +21219.0,place order,2020-05-04 08:01:01.000Z, ,"['887823','887824']","['991916']", , ,1.263,1203.99 +21220.0,send package,2020-05-04 08:07:45.000Z, , , ,"['661245']", ,1.68,1177.98 +21221.0,confirm order,2020-05-04 08:22:50.000Z, , ,"['991904']", , ,6.681,2482.93 +21222.0,pick item,2020-05-04 08:24:01.000Z, ,"['887813']", , , ,0.172,699.0 +21223.0,pick item,2020-05-04 08:36:35.000Z, ,"['887787']", , , ,0.21,529.0 +21224.0,confirm order,2020-05-04 09:05:23.000Z, , ,"['991913']", , ,0.612,1180.0 +21225.0,confirm order,2020-05-04 09:10:44.000Z, , ,"['991916']", , ,1.263,1203.99 +21226.0,confirm order,2020-05-04 09:12:33.000Z, , ,"['991909']", , ,3.688,5943.99 +21227.0,place order,2020-05-04 09:21:49.000Z, ,"['887825','887826','887828','887827']","['991917']", , ,2.138,752.98 +21228.0,reorder item,2020-05-04 09:26:20.000Z, ,"['887797']", , , ,1.37,2500.0 +21229.0,failed delivery,2020-05-04 09:38:46.000Z, , , ,"['661242']", ,1.982,3437.99 +21230.0,pick item,2020-05-04 09:44:42.000Z, ,"['887796']", , , ,0.188,1149.0 +21231.0,pick item,2020-05-04 09:59:14.000Z, ,"['887780']", , , ,0.2,39.99 +21232.0,create package,2020-05-04 09:59:14.000Z, ,"['887658','887719','887634','887720','887718','887787','887722','887721','887723']", ,"['661247']", ,2.7910000000000004,6877.99 +21233.0,reorder item,2020-05-04 10:17:50.000Z, ,"['887744']", , , ,0.88,89.99 +21234.0,pick item,2020-05-04 10:21:44.000Z, ,"['887818']", , , ,0.483,495.0 +21235.0,pick item,2020-05-04 10:37:07.000Z, ,"['887764']", , , ,0.38,29.99 +21236.0,pick item,2020-05-04 11:00:37.000Z, ,"['887808']", , , ,0.78,99.99 +21237.0,place order,2020-05-04 11:03:25.000Z, ,"['887831','887830','887829']","['991918']", , ,2.446,779.98 +21238.0,pick item,2020-05-04 11:07:40.000Z, ,"['887829']", , , ,0.483,495.0 +21239.0,item out of stock,2020-05-04 11:14:16.000Z, ,"['887822']", , , ,0.2,39.99 +21240.0,pick item,2020-05-04 11:14:40.000Z, ,"['887772']", , , ,0.21,529.0 +21241.0,package delivered,2020-05-04 11:24:20.000Z, , , ,"['661242']", ,1.982,3437.99 +21242.0,confirm order,2020-05-04 11:26:20.000Z, , ,"['991918']", , ,2.446,779.98 +21243.0,reorder item,2020-05-04 11:41:37.000Z, ,"['887733']", , , ,0.495,129.0 +21244.0,pay order,2020-05-04 11:52:07.000Z, , ,"['991902']", , ,0.848,1632.99 +21245.0,pay order,2020-05-04 11:57:43.000Z, , ,"['991810']", , ,1.607,1997.99 +21246.0,item out of stock,2020-05-04 12:09:04.000Z, ,"['887815']", , , ,0.88,89.99 +21247.0,confirm order,2020-05-04 12:10:24.000Z, , ,"['991912']", , ,1.731,2801.99 +21248.0,failed delivery,2020-05-04 12:20:14.000Z, , , ,"['661243']", ,4.548,3592.97 +21249.0,place order,2020-05-04 12:26:38.000Z, ,"['887837','887834','887833','887832','887835','887836']","['991919']", , ,3.887,6321.99 +21250.0,reorder item,2020-05-04 12:53:57.000Z, ,"['887822']", , , ,0.2,39.99 +21251.0,reorder item,2020-05-04 13:17:38.000Z, ,"['887782']", , , ,0.88,89.99 +21252.0,send package,2020-05-04 13:21:34.000Z, , , ,"['661246']", ,2.24,2828.99 +21253.0,package delivered,2020-05-04 13:26:10.000Z, , , ,"['661245']", ,1.68,1177.98 +21254.0,package delivered,2020-05-04 13:33:56.000Z, , , ,"['661244']", ,0.78,99.99 +21255.0,reorder item,2020-05-04 13:34:15.000Z, ,"['887815']", , , ,0.88,89.99 +21256.0,confirm order,2020-05-04 14:03:09.000Z, , ,"['991906']", , ,3.5460000000000003,5293.99 +21257.0,confirm order,2020-05-04 14:12:31.000Z, , ,"['991910']", , ,0.188,1154.0 +21258.0,place order,2020-05-04 14:13:03.000Z, ,"['887841','887839','887840','887838','887842']","['991920']", , ,3.876,3384.98 +21259.0,pay order,2020-05-04 14:22:23.000Z, , ,"['991898']", , ,1.963,284.98 +21260.0,pay order,2020-05-04 14:39:36.000Z, , ,"['991916']", , ,1.263,1203.99 +21261.0,confirm order,2020-05-04 14:39:56.000Z, , ,"['991911']", , ,5.441,2434.94 +21262.0,pick item,2020-05-04 15:05:52.000Z, ,"['887790']", , , ,0.483,79.99 +21263.0,confirm order,2020-05-04 15:19:42.000Z, , ,"['991919']", , ,3.887,6321.99 +21264.0,pick item,2020-05-04 15:26:30.000Z, ,"['887803']", , , ,0.166,799.0 +21265.0,pick item,2020-05-04 15:31:51.000Z, ,"['887819']", , , ,0.88,89.99 +21266.0,pick item,2020-05-04 15:34:42.000Z, ,"['887738']", , , ,0.44,476.0 +21267.0,create package,2020-05-04 15:34:42.000Z, ,"['887762','887615']", ,"['661248']", ,1.763,229.98 +21268.0,pick item,2020-05-04 15:40:22.000Z, ,"['887804']", , , ,0.495,129.0 +21269.0,place order,2020-05-04 15:45:54.000Z, ,"['887845','887844','887843']","['991921']", , ,2.043,1702.99 +21270.0,pick item,2020-05-04 15:47:14.000Z, ,"['887840']", , , ,0.483,495.0 +21271.0,create package,2020-05-04 15:47:14.000Z, ,"['887760','887757','887761','887808','887758','887804','887586','887759','887756','887578','887807','887803','887806']", ,"['661249']", ,6.939,5139.94 +21272.0,pick item,2020-05-04 15:50:59.000Z, ,"['887814']", , , ,0.44,476.0 +21273.0,pick item,2020-05-04 16:13:44.000Z, ,"['887826']", , , ,0.88,89.99 +21274.0,pick item,2020-05-04 16:36:02.000Z, ,"['887687']", , , ,0.28,449.0 +21275.0,payment reminder,2020-05-04 16:55:11.000Z, , ,"['991866']", , ,3.165,3781.99 +21276.0,place order,2020-05-04 17:57:16.000Z, ,"['887849','887846','887850','887851','887848','887847']","['991922']", , ,4.803,5480.97 +21277.0,pick item,2020-05-04 18:16:22.000Z, ,"['887712']", , , ,0.483,79.99 +21278.0,confirm order,2020-05-04 19:56:38.000Z, , ,"['991917']", , ,2.138,752.98 +21279.0,pick item,2020-05-04 20:18:20.000Z, ,"['887785']", , , ,0.28,449.0 +21280.0,place order,2020-05-04 21:34:07.000Z, ,"['887853','887852','887855','887854']","['991923']", , ,2.48,1312.98 +21281.0,item out of stock,2020-05-05 06:26:05.000Z, ,"['887784']", , , ,0.166,799.0 +21282.0,item out of stock,2020-05-05 06:38:12.000Z, ,"['887836']", , , ,1.37,2500.0 +21283.0,pick item,2020-05-05 07:17:04.000Z, ,"['887824']", , , ,0.78,99.99 +21284.0,confirm order,2020-05-05 07:30:20.000Z, , ,"['991903']", , ,2.86,3183.99 +21285.0,place order,2020-05-05 07:32:32.000Z, ,"['887860','887857','887858','887856','887859']","['991924']", , ,3.152,1449.97 +21286.0,item out of stock,2020-05-05 07:33:32.000Z, ,"['887859']", , , ,1.28,149.99 +21287.0,reorder item,2020-05-05 07:39:09.000Z, ,"['887836']", , , ,1.37,2500.0 +21288.0,pay order,2020-05-05 07:44:04.000Z, , ,"['991907']", , ,3.51,6432.0 +21289.0,pick item,2020-05-05 08:02:30.000Z, ,"['887833']", , , ,0.2,39.99 +21290.0,pick item,2020-05-05 08:09:24.000Z, ,"['887852']", , , ,0.21,529.0 +21291.0,pick item,2020-05-05 08:20:33.000Z, ,"['887771']", , , ,0.2,39.99 +21292.0,confirm order,2020-05-05 08:23:48.000Z, , ,"['991923']", , ,2.48,1312.98 +21293.0,package delivered,2020-05-05 08:41:30.000Z, , , ,"['661246']", ,2.24,2828.99 +21294.0,pay order,2020-05-05 08:42:25.000Z, , ,"['991923']", , ,2.48,1312.98 +21295.0,pick item,2020-05-05 09:00:23.000Z, ,"['887844']", , , ,0.483,1099.0 +21296.0,pick item,2020-05-05 09:15:39.000Z, ,"['887789']", , , ,1.37,2500.0 +21297.0,item out of stock,2020-05-05 09:19:37.000Z, ,"['887786']", , , ,0.28,449.0 +21298.0,place order,2020-05-05 09:24:51.000Z, ,"['887862','887868','887863','887867','887861','887864','887865','887869','887866']","['991925']", , ,5.339,7517.97 +21299.0,pick item,2020-05-05 09:29:09.000Z, ,"['887830']", , , ,0.483,79.99 +21300.0,pick item,2020-05-05 09:41:08.000Z, ,"['887837']", , , ,0.28,449.0 +21301.0,create package,2020-05-05 09:41:08.000Z, ,"['887747','887748','887755','887746']", ,"['661250']", ,1.338,898.97 +21302.0,item out of stock,2020-05-05 09:43:02.000Z, ,"['887809']", , , ,0.78,99.99 +21303.0,pick item,2020-05-05 09:49:44.000Z, ,"['887864']", , , ,0.166,799.0 +21304.0,pick item,2020-05-05 09:50:34.000Z, ,"['887704']", , , ,0.78,99.99 +21305.0,send package,2020-05-05 10:15:19.000Z, , , ,"['661248']", ,1.763,229.98 +21306.0,pick item,2020-05-05 10:25:26.000Z, ,"['887832']", , , ,0.495,129.0 +21307.0,item out of stock,2020-05-05 10:41:56.000Z, ,"['887821']", , , ,1.48,199.99 +21308.0,pay order,2020-05-05 10:46:07.000Z, , ,"['991909']", , ,3.688,5943.99 +21309.0,place order,2020-05-05 11:09:29.000Z, ,"['887870','887871','887873','887872']","['991926']", , ,3.026,1848.98 +21310.0,pick item,2020-05-05 11:10:27.000Z, ,"['887867']", , , ,0.38,29.99 +21311.0,create package,2020-05-05 11:10:27.000Z, ,"['887712','887740']", ,"['661251']", ,0.923,555.99 +21312.0,failed delivery,2020-05-05 11:18:37.000Z, , , ,"['661243']", ,4.548,3592.97 +21313.0,confirm order,2020-05-05 11:38:01.000Z, , ,"['991922']", , ,4.803,5480.97 +21314.0,pick item,2020-05-05 11:40:27.000Z, ,"['887865']", , , ,0.28,89.99 +21315.0,pick item,2020-05-05 11:41:08.000Z, ,"['887825']", , , ,0.28,449.0 +21316.0,create package,2020-05-05 11:41:08.000Z, ,"['887819','887750','887753','887751']", ,"['661252']", ,2.65,1217.98 +21317.0,item out of stock,2020-05-05 11:42:59.000Z, ,"['887872']", , , ,0.78,99.99 +21318.0,reorder item,2020-05-05 11:43:46.000Z, ,"['887859']", , , ,1.28,149.99 +21319.0,pick item,2020-05-05 11:46:36.000Z, ,"['887743']", , , ,0.166,799.0 +21320.0,item out of stock,2020-05-05 11:49:40.000Z, ,"['887869']", , , ,1.25,2200.0 +21321.0,item out of stock,2020-05-05 11:52:50.000Z, ,"['887860']", , , ,0.38,29.99 +21322.0,pick item,2020-05-05 12:20:17.000Z, ,"['887848']", , , ,0.483,79.99 +21323.0,place order,2020-05-05 12:38:46.000Z, ,"['887879','887876','887880','887877','887875','887878','887874']","['991927']", , ,2.949,3416.97 +21324.0,send package,2020-05-05 12:41:15.000Z, , , ,"['661251']", ,0.923,555.99 +21325.0,confirm order,2020-05-05 12:46:22.000Z, , ,"['991924']", , ,3.152,1449.97 +21326.0,failed delivery,2020-05-05 12:48:37.000Z, , , ,"['661243']", ,4.548,3592.97 +21327.0,send package,2020-05-05 12:59:29.000Z, , , ,"['661249']", ,6.939,5139.94 +21328.0,item out of stock,2020-05-05 13:09:45.000Z, ,"['887849']", , , ,0.28,89.99 +21329.0,pick item,2020-05-05 13:26:49.000Z, ,"['887795']", , , ,1.25,2200.0 +21330.0,confirm order,2020-05-05 13:29:37.000Z, , ,"['991925']", , ,5.339,7517.97 +21331.0,send package,2020-05-05 13:33:00.000Z, , , ,"['661247']", ,2.7910000000000004,6877.99 +21332.0,item out of stock,2020-05-05 13:36:40.000Z, ,"['887805']", , , ,0.44,476.0 +21333.0,send package,2020-05-05 13:47:56.000Z, , , ,"['661250']", ,1.338,898.97 +21334.0,pick item,2020-05-05 13:48:42.000Z, ,"['887839']", , , ,0.483,495.0 +21335.0,create package,2020-05-05 13:48:42.000Z, ,"['887728','887769','887768','887796','887738','887729','887725','887794','887795','887736','887604']", ,"['661253']", ,7.511,9027.96 +21336.0,confirm order,2020-05-05 13:52:48.000Z, , ,"['991920']", , ,3.876,3384.98 +21337.0,pick item,2020-05-05 13:55:23.000Z, ,"['887857']", , , ,0.88,89.99 +21338.0,item out of stock,2020-05-05 13:55:54.000Z, ,"['887783']", , , ,1.25,2200.0 +21339.0,pick item,2020-05-05 13:57:41.000Z, ,"['887862']", , , ,0.21,529.0 +21340.0,confirm order,2020-05-05 14:00:54.000Z, , ,"['991926']", , ,3.026,1848.98 +21341.0,item out of stock,2020-05-05 14:02:34.000Z, ,"['887770']", , , ,1.28,149.99 +21342.0,pick item,2020-05-05 14:03:16.000Z, ,"['887835']", , , ,1.37,2500.0 +21343.0,pick item,2020-05-05 14:07:16.000Z, ,"['887858']", , , ,0.172,699.0 +21344.0,pick item,2020-05-05 14:08:37.000Z, ,"['887845']", , , ,0.28,449.0 +21345.0,pick item,2020-05-05 14:21:03.000Z, ,"['887853']", , , ,1.28,149.99 +21346.0,confirm order,2020-05-05 14:21:49.000Z, , ,"['991914']", , ,3.983,5289.99 +21347.0,reorder item,2020-05-05 14:24:26.000Z, ,"['887786']", , , ,0.28,449.0 +21348.0,pick item,2020-05-05 14:27:15.000Z, ,"['887767']", , , ,0.21,529.0 +21349.0,pick item,2020-05-05 14:29:18.000Z, ,"['887838']", , , ,0.88,89.99 +21350.0,pick item,2020-05-05 14:34:27.000Z, ,"['887851']", , , ,1.37,2500.0 +21351.0,package delivered,2020-05-05 14:36:19.000Z, , , ,"['661251']", ,0.923,555.99 +21352.0,place order,2020-05-05 14:37:19.000Z, ,"['887883','887882','887881']","['991928']", , ,0.8490000000000001,1942.99 +21353.0,confirm order,2020-05-05 14:48:15.000Z, , ,"['991927']", , ,2.949,3416.97 +21354.0,pick item,2020-05-05 14:51:43.000Z, ,"['887859']", , , ,1.28,149.99 +21355.0,item out of stock,2020-05-05 14:58:37.000Z, ,"['887834']", , , ,0.172,699.0 +21356.0,pick item,2020-05-05 15:06:12.000Z, ,"['887877']", , , ,0.188,1149.0 +21357.0,create package,2020-05-05 15:06:12.000Z, ,"['887698','887700','887830','887877','887829']", ,"['661254']", ,2.6,2672.98 +21358.0,item out of stock,2020-05-05 15:10:13.000Z, ,"['887802']", , , ,0.88,89.99 +21359.0,package delivered,2020-05-05 15:12:45.000Z, , , ,"['661248']", ,1.763,229.98 +21360.0,package delivered,2020-05-05 15:18:18.000Z, , , ,"['661249']", ,6.939,5139.94 +21361.0,pay order,2020-05-05 15:18:24.000Z, , ,"['991912']", , ,1.731,2801.99 +21362.0,pick item,2020-05-05 15:26:59.000Z, ,"['887810']", , , ,0.28,449.0 +21363.0,pick item,2020-05-05 15:33:06.000Z, ,"['887866']", , , ,0.483,1099.0 +21364.0,pick item,2020-05-05 16:25:33.000Z, ,"['887788']", , , ,1.37,2500.0 +21365.0,pick item,2020-05-05 16:32:56.000Z, ,"['887817']", , , ,1.25,2200.0 +21366.0,send package,2020-05-05 16:34:17.000Z, , , ,"['661252']", ,2.65,1217.98 +21367.0,place order,2020-05-05 16:34:26.000Z, ,"['887890','887884','887888','887885','887887','887889','887886']","['991929']", , ,5.835,1239.95 +21368.0,pick item,2020-05-05 16:42:55.000Z, ,"['887752']", , , ,1.25,2200.0 +21369.0,create package,2020-05-05 16:42:55.000Z, ,"['887862','887867','887764','887766','887864','887865','887765','887866']", ,"['661255']", ,2.367,4174.97 +21370.0,pay order,2020-05-05 17:04:08.000Z, , ,"['991866']", , ,3.165,3781.99 +21371.0,confirm order,2020-05-05 17:21:17.000Z, , ,"['991921']", , ,2.043,1702.99 +21372.0,reorder item,2020-05-05 17:37:40.000Z, ,"['887872']", , , ,0.78,99.99 +21373.0,place order,2020-05-05 19:22:52.000Z, ,"['887892','887894','887893','887891']","['991930']", , ,3.196,3928.99 +21374.0,place order,2020-05-06 02:35:06.000Z, ,"['887895']","['991931']", , ,0.495,134.0 +21375.0,send package,2020-05-06 06:33:43.000Z, , , ,"['661254']", ,2.6,2672.98 +21376.0,pick item,2020-05-06 06:38:18.000Z, ,"['887870']", , , ,1.28,149.99 +21377.0,pick item,2020-05-06 06:58:09.000Z, ,"['887884']", , , ,0.78,99.99 +21378.0,pick item,2020-05-06 07:12:55.000Z, ,"['887799']", , , ,0.28,89.99 +21379.0,item out of stock,2020-05-06 07:40:42.000Z, ,"['887823']", , , ,0.483,1099.0 +21380.0,failed delivery,2020-05-06 07:43:20.000Z, , , ,"['661243']", ,4.548,3592.97 +21381.0,reorder item,2020-05-06 07:43:20.000Z, ,"['887821']", , , ,1.48,199.99 +21382.0,pick item,2020-05-06 07:45:50.000Z, ,"['887891']", , , ,1.25,2200.0 +21383.0,confirm order,2020-05-06 07:46:32.000Z, , ,"['991929']", , ,5.835,1239.95 +21384.0,pick item,2020-05-06 07:47:51.000Z, ,"['887812']", , , ,0.188,1149.0 +21385.0,pick item,2020-05-06 07:53:53.000Z, ,"['887820']", , , ,0.188,1149.0 +21386.0,reorder item,2020-05-06 07:56:26.000Z, ,"['887770']", , , ,1.28,149.99 +21387.0,send package,2020-05-06 08:00:10.000Z, , , ,"['661255']", ,2.367,4174.97 +21388.0,place order,2020-05-06 08:04:24.000Z, ,"['887897','887898','887896','887899','887900','887901']","['991932']", , ,5.0280000000000005,5893.97 +21389.0,payment reminder,2020-05-06 08:04:50.000Z, , ,"['991872']", , ,3.3280000000000003,1523.97 +21390.0,pick item,2020-05-06 08:09:05.000Z, ,"['887781']", , , ,1.25,2200.0 +21391.0,reorder item,2020-05-06 08:11:25.000Z, ,"['887834']", , , ,0.172,699.0 +21392.0,pay order,2020-05-06 08:19:16.000Z, , ,"['991895']", , ,2.61,2867.98 +21393.0,confirm order,2020-05-06 08:23:33.000Z, , ,"['991915']", , ,2.748,1483.97 +21394.0,pay order,2020-05-06 08:27:13.000Z, , ,"['991905']", , ,0.58,74.98 +21395.0,pick item,2020-05-06 08:32:35.000Z, ,"['887791']", , , ,0.483,79.99 +21396.0,create package,2020-05-06 08:32:35.000Z, ,"['887774','887835','887777','887775','887833','887778','887812','887772','887776','887832','887837','887810','887773','887771']", ,"['661256']", ,8.214,7043.93 +21397.0,package delivered,2020-05-06 08:52:45.000Z, , , ,"['661254']", ,2.6,2672.98 +21398.0,failed delivery,2020-05-06 09:01:17.000Z, , , ,"['661250']", ,1.338,898.97 +21399.0,pick item,2020-05-06 09:06:43.000Z, ,"['887890']", , , ,1.48,199.99 +21400.0,pick item,2020-05-06 09:13:44.000Z, ,"['887894']", , , ,0.98,129.99 +21401.0,pick item,2020-05-06 09:22:38.000Z, ,"['887854']", , , ,0.78,99.99 +21402.0,place order,2020-05-06 09:28:36.000Z, ,"['887903','887904','887902']","['991933']", , ,1.135,649.99 +21403.0,failed delivery,2020-05-06 09:28:50.000Z, , , ,"['661250']", ,1.338,898.97 +21404.0,pick item,2020-05-06 09:34:45.000Z, ,"['887717']", , , ,0.88,89.99 +21405.0,pick item,2020-05-06 09:36:49.000Z, ,"['887798']", , , ,0.188,1149.0 +21406.0,failed delivery,2020-05-06 09:45:25.000Z, , , ,"['661250']", ,1.338,898.97 +21407.0,reorder item,2020-05-06 09:54:22.000Z, ,"['887809']", , , ,0.78,99.99 +21408.0,pick item,2020-05-06 10:26:37.000Z, ,"['887847']", , , ,1.25,2200.0 +21409.0,pick item,2020-05-06 10:27:11.000Z, ,"['887897']", , , ,0.28,89.99 +21410.0,package delivered,2020-05-06 10:40:08.000Z, , , ,"['661247']", ,2.7910000000000004,6877.99 +21411.0,send package,2020-05-06 11:04:52.000Z, , , ,"['661253']", ,7.511,9027.96 +21412.0,payment reminder,2020-05-06 11:10:14.000Z, , ,"['991873']", , ,3.651,2099.96 +21413.0,place order,2020-05-06 11:16:59.000Z, ,"['887906','887907','887908','887912','887913','887905','887910','887911','887915','887914','887909','887917','887916']","['991934']", , ,8.04,8100.93 +21414.0,pick item,2020-05-06 11:19:19.000Z, ,"['887889']", , , ,1.48,199.99 +21415.0,package delivered,2020-05-06 11:21:41.000Z, , , ,"['661243']", ,4.548,3592.97 +21416.0,pick item,2020-05-06 11:26:56.000Z, ,"['887873']", , , ,0.483,1099.0 +21417.0,confirm order,2020-05-06 11:27:40.000Z, , ,"['991930']", , ,3.196,3928.99 +21418.0,reorder item,2020-05-06 11:32:25.000Z, ,"['887783']", , , ,1.25,2200.0 +21419.0,pick item,2020-05-06 11:41:12.000Z, ,"['887907']", , , ,0.172,699.0 +21420.0,pick item,2020-05-06 11:52:24.000Z, ,"['887816']", , , ,1.37,2500.0 +21421.0,confirm order,2020-05-06 11:53:58.000Z, , ,"['991931']", , ,0.495,134.0 +21422.0,package delivered,2020-05-06 11:55:32.000Z, , , ,"['661252']", ,2.65,1217.98 +21423.0,pay order,2020-05-06 11:56:45.000Z, , ,"['991913']", , ,0.612,1180.0 +21424.0,pick item,2020-05-06 12:20:21.000Z, ,"['887871']", , , ,0.483,495.0 +21425.0,pick item,2020-05-06 12:40:07.000Z, ,"['887827']", , , ,0.483,79.99 +21426.0,pick item,2020-05-06 12:45:38.000Z, ,"['887875']", , , ,0.38,29.99 +21427.0,create package,2020-05-06 12:45:38.000Z, ,"['887824','887871','887792','887870','887793','887687','887791','887790','887873']", ,"['661257']", ,5.735,3077.95 +21428.0,place order,2020-05-06 12:53:46.000Z, ,"['887920','887919','887921','887918']","['991935']", , ,2.99,2394.97 +21429.0,package delivered,2020-05-06 13:00:22.000Z, , , ,"['661255']", ,2.367,4174.97 +21430.0,reorder item,2020-05-06 13:09:13.000Z, ,"['887860']", , , ,0.38,29.99 +21431.0,reorder item,2020-05-06 13:10:00.000Z, ,"['887849']", , , ,0.28,89.99 +21432.0,confirm order,2020-05-06 13:12:22.000Z, , ,"['991933']", , ,1.135,649.99 +21433.0,pick item,2020-05-06 13:17:49.000Z, ,"['887828']", , , ,0.495,129.0 +21434.0,item out of stock,2020-05-06 13:21:00.000Z, ,"['887855']", , , ,0.21,529.0 +21435.0,item out of stock,2020-05-06 13:35:58.000Z, ,"['887801']", , , ,0.44,476.0 +21436.0,pay order,2020-05-06 13:43:31.000Z, , ,"['991892']", , ,2.205,4055.99 +21437.0,confirm order,2020-05-06 13:43:51.000Z, , ,"['991928']", , ,0.8490000000000001,1942.99 +21438.0,package delivered,2020-05-06 13:47:51.000Z, , , ,"['661250']", ,1.338,898.97 +21439.0,pay order,2020-05-06 13:47:53.000Z, , ,"['991891']", , ,1.66,194.98 +21440.0,send package,2020-05-06 13:50:13.000Z, , , ,"['661256']", ,8.214,7043.93 +21441.0,item out of stock,2020-05-06 13:51:09.000Z, ,"['887895']", , , ,0.495,129.0 +21442.0,pay order,2020-05-06 14:06:34.000Z, , ,"['991929']", , ,5.835,1239.95 +21443.0,pick item,2020-05-06 14:16:20.000Z, ,"['887902']", , , ,0.44,476.0 +21444.0,pick item,2020-05-06 14:21:06.000Z, ,"['887868']", , , ,1.25,2200.0 +21445.0,item out of stock,2020-05-06 14:21:14.000Z, ,"['887915']", , , ,1.37,2500.0 +21446.0,pick item,2020-05-06 14:30:00.000Z, ,"['887861']", , , ,0.88,89.99 +21447.0,item out of stock,2020-05-06 14:42:26.000Z, ,"['887800']", , , ,0.98,129.99 +21448.0,pick item,2020-05-06 14:46:52.000Z, ,"['887888']", , , ,0.495,129.0 +21449.0,package delivered,2020-05-06 14:54:17.000Z, , , ,"['661256']", ,8.214,7043.93 +21450.0,reorder item,2020-05-06 14:56:53.000Z, ,"['887800']", , , ,0.98,129.99 +21451.0,place order,2020-05-06 15:07:19.000Z, ,"['887924','887923','887922']","['991936']", , ,1.152,843.98 +21452.0,confirm order,2020-05-06 15:11:51.000Z, , ,"['991932']", , ,5.0280000000000005,5893.97 +21453.0,item out of stock,2020-05-06 15:17:51.000Z, ,"['887919']", , , ,0.38,29.99 +21454.0,item out of stock,2020-05-06 15:24:09.000Z, ,"['887922']", , , ,0.172,699.0 +21455.0,item out of stock,2020-05-06 15:24:51.000Z, ,"['887904']", , , ,0.495,129.0 +21456.0,pick item,2020-05-06 15:32:39.000Z, ,"['887850']", , , ,0.44,476.0 +21457.0,pick item,2020-05-06 15:51:32.000Z, ,"['887754']", , , ,1.48,199.99 +21458.0,reorder item,2020-05-06 16:14:54.000Z, ,"['887855']", , , ,0.21,529.0 +21459.0,place order,2020-05-06 16:34:25.000Z, ,"['887927','887925','887926']","['991937']", , ,3.333,2784.98 +21460.0,send package,2020-05-06 16:56:37.000Z, , , ,"['661257']", ,5.735,3077.95 +21461.0,place order,2020-05-06 19:22:50.000Z, ,"['887928']","['991938']", , ,0.28,94.99 +21462.0,pick item,2020-05-06 19:56:04.000Z, ,"['887843']", , , ,1.28,149.99 +21463.0,payment reminder,2020-05-06 21:17:43.000Z, , ,"['991823']", , ,1.143,563.98 +21464.0,place order,2020-05-07 02:34:54.000Z, ,"['887930','887933','887935','887929','887934','887932','887931']","['991939']", , ,3.378,3350.97 +21465.0,pay order,2020-05-07 06:26:17.000Z, , ,"['991910']", , ,0.188,1154.0 +21466.0,pick item,2020-05-07 06:34:38.000Z, ,"['887893']", , , ,0.483,1099.0 +21467.0,create package,2020-05-07 06:34:38.000Z, ,"['887704','887814','887853','887854','887852','887780','887813']", ,"['661258']", ,3.862,2093.96 +21468.0,confirm order,2020-05-07 06:54:09.000Z, , ,"['991935']", , ,2.99,2394.97 +21469.0,reorder item,2020-05-07 06:57:01.000Z, ,"['887802']", , , ,0.88,89.99 +21470.0,pick item,2020-05-07 06:58:28.000Z, ,"['887876']", , , ,0.166,799.0 +21471.0,pick item,2020-05-07 06:58:54.000Z, ,"['887831']", , , ,1.48,199.99 +21472.0,pick item,2020-05-07 07:06:08.000Z, ,"['887911']", , , ,0.88,89.99 +21473.0,pay order,2020-05-07 07:07:45.000Z, , ,"['991904']", , ,6.681,2482.93 +21474.0,pick item,2020-05-07 07:16:51.000Z, ,"['887903']", , , ,0.2,39.99 +21475.0,pick item,2020-05-07 07:31:51.000Z, ,"['887912']", , , ,0.98,129.99 +21476.0,pick item,2020-05-07 07:36:26.000Z, ,"['887924']", , , ,0.2,39.99 +21477.0,pick item,2020-05-07 07:38:24.000Z, ,"['887901']", , , ,0.188,1149.0 +21478.0,create package,2020-05-07 07:38:24.000Z, ,"['887818','887816','887817','887798']", ,"['661259']", ,3.2910000000000004,6344.0 +21479.0,pick item,2020-05-07 07:40:04.000Z, ,"['887856']", , , ,0.44,476.0 +21480.0,confirm order,2020-05-07 07:41:40.000Z, , ,"['991937']", , ,3.333,2784.98 +21481.0,reorder item,2020-05-07 07:49:15.000Z, ,"['887904']", , , ,0.495,129.0 +21482.0,pick item,2020-05-07 07:55:03.000Z, ,"['887904']", , , ,0.495,129.0 +21483.0,confirm order,2020-05-07 07:58:51.000Z, , ,"['991936']", , ,1.152,843.98 +21484.0,package delivered,2020-05-07 07:59:18.000Z, , , ,"['661257']", ,5.735,3077.95 +21485.0,place order,2020-05-07 08:04:11.000Z, ,"['887937','887938','887936']","['991940']", , ,2.948,1503.98 +21486.0,pick item,2020-05-07 08:04:30.000Z, ,"['887815']", , , ,0.88,89.99 +21487.0,pay order,2020-05-07 08:06:06.000Z, , ,"['991930']", , ,3.196,3928.99 +21488.0,pick item,2020-05-07 08:11:15.000Z, ,"['887900']", , , ,1.28,149.99 +21489.0,create package,2020-05-07 08:11:15.000Z, ,"['887857','887839','887858','887856','887840','887838','887859']", ,"['661260']", ,4.618,2494.97 +21490.0,confirm order,2020-05-07 08:13:43.000Z, , ,"['991940']", , ,2.948,1503.98 +21491.0,pay order,2020-05-07 08:16:26.000Z, , ,"['991920']", , ,3.876,3384.98 +21492.0,confirm order,2020-05-07 08:22:33.000Z, , ,"['991934']", , ,8.04,8100.93 +21493.0,send package,2020-05-07 08:24:33.000Z, , , ,"['661258']", ,3.862,2093.96 +21494.0,pick item,2020-05-07 08:34:14.000Z, ,"['887936']", , , ,1.48,199.99 +21495.0,reorder item,2020-05-07 08:57:52.000Z, ,"['887915']", , , ,1.37,2500.0 +21496.0,item out of stock,2020-05-07 08:59:30.000Z, ,"['887879']", , , ,0.28,89.99 +21497.0,pick item,2020-05-07 09:05:44.000Z, ,"['887918']", , , ,0.38,29.99 +21498.0,pick item,2020-05-07 09:18:37.000Z, ,"['887923']", , , ,0.78,99.99 +21499.0,pick item,2020-05-07 09:25:07.000Z, ,"['887913']", , , ,0.2,39.99 +21500.0,place order,2020-05-07 09:28:09.000Z, ,"['887939','887940','887941']","['991941']", , ,3.01,2853.99 +21501.0,send package,2020-05-07 09:32:01.000Z, , , ,"['661259']", ,3.2910000000000004,6344.0 +21502.0,confirm order,2020-05-07 09:46:34.000Z, , ,"['991941']", , ,3.01,2853.99 +21503.0,confirm order,2020-05-07 09:58:59.000Z, , ,"['991939']", , ,3.378,3350.97 +21504.0,confirm order,2020-05-07 10:06:48.000Z, , ,"['991938']", , ,0.28,94.99 +21505.0,pick item,2020-05-07 10:14:56.000Z, ,"['887917']", , , ,0.98,129.99 +21506.0,pick item,2020-05-07 10:24:23.000Z, ,"['887836']", , , ,1.37,2500.0 +21507.0,pick item,2020-05-07 10:30:11.000Z, ,"['887842']", , , ,1.25,2200.0 +21508.0,create package,2020-05-07 10:30:11.000Z, ,"['887825','887923','887924','887789','887788','887785','887826','887828','887827']", ,"['661261']", ,6.138,6336.96 +21509.0,reorder item,2020-05-07 10:31:32.000Z, ,"['887869']", , , ,1.25,2200.0 +21510.0,pick item,2020-05-07 10:39:01.000Z, ,"['887863']", , , ,0.44,476.0 +21511.0,place order,2020-05-07 11:16:06.000Z, ,"['887943','887942','887944','887948','887946','887945','887947']","['991942']", , ,3.948,2523.97 +21512.0,pay order,2020-05-07 11:49:03.000Z, , ,"['991933']", , ,1.135,649.99 +21513.0,item out of stock,2020-05-07 12:23:38.000Z, ,"['887943']", , , ,0.483,79.99 +21514.0,pick item,2020-05-07 12:29:02.000Z, ,"['887899']", , , ,1.25,2200.0 +21515.0,pick item,2020-05-07 12:33:02.000Z, ,"['887928']", , , ,0.28,89.99 +21516.0,pay order,2020-05-07 12:36:47.000Z, , ,"['991911']", , ,5.441,2434.94 +21517.0,pay order,2020-05-07 12:43:36.000Z, , ,"['991915']", , ,2.748,1483.97 +21518.0,pick item,2020-05-07 12:44:08.000Z, ,"['887925']", , , ,1.37,2500.0 +21519.0,pick item,2020-05-07 12:45:35.000Z, ,"['887874']", , , ,1.28,149.99 +21520.0,pick item,2020-05-07 12:47:11.000Z, ,"['887892']", , , ,0.483,495.0 +21521.0,pick item,2020-05-07 12:50:55.000Z, ,"['887944']", , , ,0.88,89.99 +21522.0,place order,2020-05-07 12:51:59.000Z, ,"['887949','887950']","['991943']", , ,1.69,733.99 +21523.0,package delivered,2020-05-07 12:54:40.000Z, , , ,"['661259']", ,3.2910000000000004,6344.0 +21524.0,item out of stock,2020-05-07 12:55:44.000Z, ,"['887934']", , , ,0.172,699.0 +21525.0,pay order,2020-05-07 12:56:30.000Z, , ,"['991937']", , ,3.333,2784.98 +21526.0,pick item,2020-05-07 13:23:04.000Z, ,"['887921']", , , ,0.98,129.99 +21527.0,reorder item,2020-05-07 13:24:49.000Z, ,"['887805']", , , ,0.44,476.0 +21528.0,pay order,2020-05-07 13:34:27.000Z, , ,"['991732']", , ,1.826,983.98 +21529.0,package delivered,2020-05-07 13:35:10.000Z, , , ,"['661253']", ,7.511,9027.96 +21530.0,item out of stock,2020-05-07 13:47:44.000Z, ,"['887905']", , , ,1.25,2200.0 +21531.0,pay order,2020-05-07 13:49:15.000Z, , ,"['991922']", , ,4.803,5480.97 +21532.0,pick item,2020-05-07 14:07:25.000Z, ,"['887849']", , , ,0.28,89.99 +21533.0,create package,2020-05-07 14:07:25.000Z, ,"['887893','887918','887843','887845','887891','887892','887894','887844','887921']", ,"['661262']", ,6.599,5781.96 +21534.0,pick item,2020-05-07 14:11:06.000Z, ,"['887885']", , , ,0.38,29.99 +21535.0,pick item,2020-05-07 14:30:33.000Z, ,"['887841']", , , ,0.78,99.99 +21536.0,pay order,2020-05-07 14:31:16.000Z, , ,"['991890']", , ,7.249,1723.94 +21537.0,pick item,2020-05-07 14:41:47.000Z, ,"['887937']", , , ,0.188,1149.0 +21538.0,place order,2020-05-07 15:03:46.000Z, ,"['887952','887953','887951']","['991944']", , ,1.663,1273.98 +21539.0,pick item,2020-05-07 15:14:51.000Z, ,"['887908']", , , ,0.28,449.0 +21540.0,pay order,2020-05-07 15:22:38.000Z, , ,"['991899']", , ,2.5980000000000003,3300.98 +21541.0,item out of stock,2020-05-07 15:44:06.000Z, ,"['887930']", , , ,0.88,89.99 +21542.0,reorder item,2020-05-07 15:54:32.000Z, ,"['887879']", , , ,0.28,89.99 +21543.0,pick item,2020-05-07 16:19:14.000Z, ,"['887927']", , , ,1.48,199.99 +21544.0,place order,2020-05-07 16:27:19.000Z, ,"['887956','887954','887955']","['991945']", , ,1.656,1482.99 +21545.0,pick item,2020-05-07 16:45:21.000Z, ,"['887786']", , , ,0.28,449.0 +21546.0,reorder item,2020-05-07 18:23:16.000Z, ,"['887905']", , , ,1.25,2200.0 +21547.0,place order,2020-05-07 19:01:32.000Z, ,"['887957','887958']","['991946']", , ,1.475,263.99 +21548.0,pick item,2020-05-07 19:20:36.000Z, ,"['887802']", , , ,0.88,89.99 +21549.0,item out of stock,2020-05-07 20:06:18.000Z, ,"['887916']", , , ,0.188,1149.0 +21550.0,place order,2020-05-08 00:27:06.000Z, ,"['887959','887960','887961']","['991947']", , ,1.715,709.99 +21551.0,pick item,2020-05-08 06:16:56.000Z, ,"['887946']", , , ,1.28,149.99 +21552.0,reorder item,2020-05-08 06:19:04.000Z, ,"['887919']", , , ,0.38,29.99 +21553.0,pick item,2020-05-08 06:39:10.000Z, ,"['887935']", , , ,0.495,129.0 +21554.0,create package,2020-05-08 06:39:10.000Z, ,"['887743','887935','887781']", ,"['661263']", ,1.911,3128.0 +21555.0,pick item,2020-05-08 07:16:24.000Z, ,"['887881']", , , ,0.2,39.99 +21556.0,send package,2020-05-08 07:27:36.000Z, , , ,"['661261']", ,6.138,6336.96 +21557.0,place order,2020-05-08 07:43:36.000Z, ,"['887963','887962','887964']","['991948']", , ,2.64,324.97 +21558.0,package delivered,2020-05-08 07:53:14.000Z, , , ,"['661258']", ,3.862,2093.96 +21559.0,pick item,2020-05-08 07:54:36.000Z, ,"['887956']", , , ,0.166,799.0 +21560.0,pick item,2020-05-08 08:00:38.000Z, ,"['887919']", , , ,0.38,29.99 +21561.0,create package,2020-05-08 08:00:38.000Z, ,"['887937','887851','887850','887936','887849','887848','887847','887956']", ,"['661264']", ,5.657,7493.97 +21562.0,item out of stock,2020-05-08 08:01:28.000Z, ,"['887953']", , , ,0.98,129.99 +21563.0,pick item,2020-05-08 08:03:33.000Z, ,"['887910']", , , ,0.98,129.99 +21564.0,reorder item,2020-05-08 08:04:30.000Z, ,"['887930']", , , ,0.88,89.99 +21565.0,send package,2020-05-08 08:05:14.000Z, , , ,"['661260']", ,4.618,2494.97 +21566.0,pick item,2020-05-08 08:36:25.000Z, ,"['887882']", , , ,0.483,1099.0 +21567.0,pick item,2020-05-08 08:43:25.000Z, ,"['887955']", , , ,1.28,149.99 +21568.0,pick item,2020-05-08 08:53:25.000Z, ,"['887960']", , , ,0.78,99.99 +21569.0,confirm order,2020-05-08 09:08:46.000Z, , ,"['991945']", , ,1.656,1482.99 +21570.0,pay order,2020-05-08 09:10:43.000Z, , ,"['991928']", , ,0.8490000000000001,1942.99 +21571.0,pick item,2020-05-08 09:12:51.000Z, ,"['887941']", , , ,0.28,449.0 +21572.0,pick item,2020-05-08 09:21:53.000Z, ,"['887959']", , , ,0.495,129.0 +21573.0,package delivered,2020-05-08 09:22:02.000Z, , , ,"['661261']", ,6.138,6336.96 +21574.0,item out of stock,2020-05-08 09:30:26.000Z, ,"['887880']", , , ,0.483,495.0 +21575.0,place order,2020-05-08 09:46:59.000Z, ,"['887965','887967','887966']","['991949']", , ,2.74,314.97 +21576.0,package delivered,2020-05-08 09:59:13.000Z, , , ,"['661260']", ,4.618,2494.97 +21577.0,pick item,2020-05-08 10:10:46.000Z, ,"['887932']", , , ,0.188,1149.0 +21578.0,pick item,2020-05-08 10:41:16.000Z, ,"['887964']", , , ,0.78,99.99 +21579.0,create package,2020-05-08 10:41:16.000Z, ,"['887897','887767','887899','887900','887901']", ,"['661265']", ,3.208,4117.98 +21580.0,pick item,2020-05-08 10:44:16.000Z, ,"['887949']", , , ,1.48,199.99 +21581.0,item out of stock,2020-05-08 11:00:52.000Z, ,"['887942']", , , ,0.21,529.0 +21582.0,send package,2020-05-08 11:06:00.000Z, , , ,"['661264']", ,5.657,7493.97 +21583.0,pick item,2020-05-08 11:12:50.000Z, ,"['887811']", , , ,0.483,1099.0 +21584.0,pay order,2020-05-08 11:25:06.000Z, , ,"['991873']", , ,3.651,2099.96 +21585.0,send package,2020-05-08 11:44:58.000Z, , , ,"['661262']", ,6.599,5781.96 +21586.0,package delivered,2020-05-08 11:49:39.000Z, , , ,"['661264']", ,5.657,7493.97 +21587.0,place order,2020-05-08 11:53:46.000Z, ,"['887969','887968']","['991950']", , ,2.26,304.98 +21588.0,confirm order,2020-05-08 12:06:07.000Z, , ,"['991948']", , ,2.64,324.97 +21589.0,reorder item,2020-05-08 12:08:27.000Z, ,"['887916']", , , ,0.188,1149.0 +21590.0,reorder item,2020-05-08 12:33:31.000Z, ,"['887953']", , , ,0.98,129.99 +21591.0,pick item,2020-05-08 12:37:05.000Z, ,"['887805']", , , ,0.44,476.0 +21592.0,confirm order,2020-05-08 12:39:13.000Z, , ,"['991946']", , ,1.475,263.99 +21593.0,pay order,2020-05-08 13:03:32.000Z, , ,"['991894']", , ,3.2,830.98 +21594.0,reorder item,2020-05-08 13:06:30.000Z, ,"['887934']", , , ,0.172,699.0 +21595.0,pick item,2020-05-08 13:14:26.000Z, ,"['887952']", , , ,0.483,1099.0 +21596.0,item out of stock,2020-05-08 13:16:55.000Z, ,"['887957']", , , ,0.495,129.0 +21597.0,reorder item,2020-05-08 13:31:36.000Z, ,"['887895']", , , ,0.495,129.0 +21598.0,pick item,2020-05-08 13:49:28.000Z, ,"['887962']", , , ,0.98,129.99 +21599.0,create package,2020-05-08 13:49:28.000Z, ,"['887903','887752','887904','887820','887902']", ,"['661266']", ,2.573,3993.99 +21600.0,reorder item,2020-05-08 14:00:54.000Z, ,"['887880']", , , ,0.483,495.0 +21601.0,place order,2020-05-08 14:07:19.000Z, ,"['887971','887970']","['991951']", , ,0.763,1193.99 +21602.0,item out of stock,2020-05-08 14:10:25.000Z, ,"['887906']", , , ,0.2,39.99 +21603.0,pay order,2020-05-08 14:24:55.000Z, , ,"['991823']", , ,1.143,563.98 +21604.0,pick item,2020-05-08 14:29:46.000Z, ,"['887945']", , , ,0.483,495.0 +21605.0,pick item,2020-05-08 14:35:27.000Z, ,"['887961']", , , ,0.44,476.0 +21606.0,confirm order,2020-05-08 14:48:49.000Z, , ,"['991949']", , ,2.74,314.97 +21607.0,pick item,2020-05-08 14:54:24.000Z, ,"['887966']", , , ,0.98,129.99 +21608.0,place order,2020-05-08 15:34:26.000Z, ,"['887972','887973']","['991952']", , ,0.338,1503.0 +21609.0,send package,2020-05-08 15:46:36.000Z, , , ,"['661265']", ,3.208,4117.98 +21610.0,reorder item,2020-05-08 15:58:06.000Z, ,"['887784']", , , ,0.166,799.0 +21611.0,pick item,2020-05-08 16:20:34.000Z, ,"['887733']", , , ,0.495,129.0 +21612.0,place order,2020-05-08 17:28:39.000Z, ,"['887978','887977','887975','887976','887974']","['991953']", , ,2.323,374.95 +21613.0,pay order,2020-05-08 18:59:50.000Z, , ,"['991941']", , ,3.01,2853.99 +21614.0,package delivered,2020-05-08 20:20:56.000Z, , , ,"['661262']", ,6.599,5781.96 +21615.0,place order,2020-05-08 20:36:53.000Z, ,"['887979','887980']","['991954']", , ,0.3720000000000001,743.99 +21616.0,create package,2020-05-08 23:00:00.000Z, ,"['887890','887888','887885','887889','887884']", ,"['661267']", ,4.615,658.96 +21617.0,place order,2020-05-09 16:41:12.000Z, ,"['887984','887986','887985','887982','887983','887981']","['991955']", , ,3.651,2099.96 +21618.0,place order,2020-05-10 17:16:18.000Z, ,"['887993','887990','887987','887989','887988','887991','887992']","['991956']", , ,2.2,3089.98 +21619.0,pick item,2020-05-11 06:23:51.000Z, ,"['887938']", , , ,1.28,149.99 +21620.0,pick item,2020-05-11 06:49:00.000Z, ,"['887987']", , , ,0.483,1099.0 +21621.0,place order,2020-05-11 06:56:19.000Z, ,"['887995','887994','887997','887996']","['991957']", , ,1.913,1234.0 +21622.0,item out of stock,2020-05-11 07:08:14.000Z, ,"['887914']", , , ,0.28,89.99 +21623.0,pick item,2020-05-11 07:12:31.000Z, ,"['887883']", , , ,0.166,799.0 +21624.0,confirm order,2020-05-11 07:21:17.000Z, , ,"['991950']", , ,2.26,304.98 +21625.0,pick item,2020-05-11 07:24:33.000Z, ,"['887898']", , , ,0.78,99.99 +21626.0,pick item,2020-05-11 07:28:10.000Z, ,"['887986']", , , ,0.188,1149.0 +21627.0,confirm order,2020-05-11 07:29:30.000Z, , ,"['991952']", , ,0.338,1503.0 +21628.0,pick item,2020-05-11 07:32:34.000Z, ,"['887967']", , , ,0.88,89.99 +21629.0,create package,2020-05-11 07:32:34.000Z, ,"['887907','887913','887912','887908','887927','887802','887960','887805','887799','887910','887911','887959','887925','887917','887961']", ,"['661268']", ,10.637,5728.91 +21630.0,pick item,2020-05-11 07:32:38.000Z, ,"['887878']", , , ,0.172,699.0 +21631.0,confirm order,2020-05-11 07:35:03.000Z, , ,"['991943']", , ,1.69,733.99 +21632.0,item out of stock,2020-05-11 07:36:26.000Z, ,"['887947']", , , ,0.44,476.0 +21633.0,pick item,2020-05-11 07:42:01.000Z, ,"['887965']", , , ,0.88,89.99 +21634.0,confirm order,2020-05-11 07:44:11.000Z, , ,"['991954']", , ,0.3720000000000001,743.99 +21635.0,pick item,2020-05-11 07:45:51.000Z, ,"['887950']", , , ,0.21,529.0 +21636.0,item out of stock,2020-05-11 07:52:24.000Z, ,"['887968']", , , ,0.78,99.99 +21637.0,reorder item,2020-05-11 07:58:06.000Z, ,"['887922']", , , ,0.172,699.0 +21638.0,package delivered,2020-05-11 08:03:35.000Z, , , ,"['661265']", ,3.208,4117.98 +21639.0,pick item,2020-05-11 08:05:35.000Z, ,"['887996']", , , ,0.483,495.0 +21640.0,pay order,2020-05-11 08:18:06.000Z, , ,"['991927']", , ,2.949,3416.97 +21641.0,confirm order,2020-05-11 08:20:05.000Z, , ,"['991957']", , ,1.913,1234.0 +21642.0,item out of stock,2020-05-11 08:34:03.000Z, ,"['887976']", , , ,0.483,79.99 +21643.0,pick item,2020-05-11 08:39:30.000Z, ,"['887948']", , , ,0.172,699.0 +21644.0,send package,2020-05-11 08:47:38.000Z, , , ,"['661263']", ,1.911,3128.0 +21645.0,pick item,2020-05-11 08:57:09.000Z, ,"['887970']", , , ,0.28,89.99 +21646.0,place order,2020-05-11 09:14:15.000Z, ,"['888000','888001','888002','887998','887999']","['991958']", , ,3.756,4289.98 +21647.0,pick item,2020-05-11 09:17:54.000Z, ,"['887951']", , , ,0.2,39.99 +21648.0,pay order,2020-05-11 09:25:14.000Z, , ,"['991934']", , ,8.04,8100.93 +21649.0,confirm order,2020-05-11 09:30:37.000Z, , ,"['991942']", , ,3.948,2523.97 +21650.0,confirm order,2020-05-11 09:46:15.000Z, , ,"['991947']", , ,1.715,709.99 +21651.0,pick item,2020-05-11 10:13:19.000Z, ,"['887931']", , , ,0.88,89.99 +21652.0,place order,2020-05-11 10:48:18.000Z, ,"['888004','888003','888005']","['991959']", , ,1.675,303.98 +21653.0,pick item,2020-05-11 10:58:09.000Z, ,"['887989']", , , ,0.28,449.0 +21654.0,pay order,2020-05-11 11:55:29.000Z, , ,"['991938']", , ,0.28,94.99 +21655.0,pick item,2020-05-11 11:56:13.000Z, ,"['887977']", , , ,0.38,29.99 +21656.0,pick item,2020-05-11 12:09:42.000Z, ,"['887887']", , , ,0.78,99.99 +21657.0,pick item,2020-05-11 12:14:57.000Z, ,"['888002']", , , ,0.483,1099.0 +21658.0,item out of stock,2020-05-11 12:17:47.000Z, ,"['887983']", , , ,0.28,89.99 +21659.0,confirm order,2020-05-11 12:20:16.000Z, , ,"['991944']", , ,1.663,1273.98 +21660.0,pay order,2020-05-11 12:27:00.000Z, , ,"['991918']", , ,2.446,779.98 +21661.0,pick item,2020-05-11 12:27:31.000Z, ,"['887763']", , , ,0.172,699.0 +21662.0,place order,2020-05-11 12:56:23.000Z, ,"['888006','888009','888007','888011','888010','888008']","['991960']", , ,4.386,1833.97 +21663.0,pay order,2020-05-11 12:56:41.000Z, , ,"['991900']", , ,0.483,84.99 +21664.0,pick item,2020-05-11 13:01:12.000Z, ,"['887993']", , , ,0.495,129.0 +21665.0,send package,2020-05-11 13:03:37.000Z, , , ,"['661268']", ,10.637,5728.91 +21666.0,pick item,2020-05-11 13:29:08.000Z, ,"['887783']", , , ,1.25,2200.0 +21667.0,create package,2020-05-11 13:29:08.000Z, ,"['887717']", ,"['661269']", ,0.88,89.99 +21668.0,confirm order,2020-05-11 13:59:01.000Z, , ,"['991958']", , ,3.756,4289.98 +21669.0,confirm order,2020-05-11 14:01:50.000Z, , ,"['991960']", , ,4.386,1833.97 +21670.0,send package,2020-05-11 14:17:52.000Z, , , ,"['661266']", ,2.573,3993.99 +21671.0,confirm order,2020-05-11 14:24:44.000Z, , ,"['991956']", , ,2.2,3089.98 +21672.0,pick item,2020-05-11 14:40:31.000Z, ,"['887982']", , , ,0.483,79.99 +21673.0,create package,2020-05-11 14:40:31.000Z, ,"['887876','887987','887878','887875','887874','887993','887831','887989']", ,"['661270']", ,4.7360000000000015,3554.97 +21674.0,pick item,2020-05-11 14:43:01.000Z, ,"['887973']", , , ,0.172,699.0 +21675.0,pay order,2020-05-11 14:43:22.000Z, , ,"['991924']", , ,3.152,1449.97 +21676.0,pick item,2020-05-11 14:53:53.000Z, ,"['887909']", , , ,0.28,449.0 +21677.0,send package,2020-05-11 14:55:05.000Z, , , ,"['661267']", ,4.615,658.96 +21678.0,pick item,2020-05-11 14:59:09.000Z, ,"['887997']", , , ,0.495,129.0 +21679.0,pay order,2020-05-11 15:01:52.000Z, , ,"['991946']", , ,1.475,263.99 +21680.0,place order,2020-05-11 15:12:34.000Z, ,"['888012','888013']","['991961']", , ,0.966,579.99 +21681.0,pick item,2020-05-11 15:37:27.000Z, ,"['887969']", , , ,1.48,199.99 +21682.0,pick item,2020-05-11 16:04:32.000Z, ,"['888005']", , , ,0.495,129.0 +21683.0,item out of stock,2020-05-11 16:09:31.000Z, ,"['887981']", , , ,0.44,476.0 +21684.0,place order,2020-05-11 16:44:55.000Z, ,"['888014','888017','888016','888015']","['991962']", , ,4.583,6003.99 +21685.0,failed delivery,2020-05-11 16:51:11.000Z, , , ,"['661263']", ,1.911,3128.0 +21686.0,pick item,2020-05-11 17:20:25.000Z, ,"['888008']", , , ,0.483,495.0 +21687.0,package delivered,2020-05-11 17:40:50.000Z, , , ,"['661267']", ,4.615,658.96 +21688.0,place order,2020-05-11 19:54:20.000Z, ,"['888021','888020','888019','888018']","['991963']", , ,1.6230000000000002,2447.99 +21689.0,reorder item,2020-05-11 20:05:22.000Z, ,"['887914']", , , ,0.28,89.99 +21690.0,place order,2020-05-12 05:43:54.000Z, ,"['888022','888024','888023','888025']","['991964']", , ,1.456,1557.99 +21691.0,reorder item,2020-05-12 06:09:34.000Z, ,"['887942']", , , ,0.21,529.0 +21692.0,package delivered,2020-05-12 07:13:58.000Z, , , ,"['661266']", ,2.573,3993.99 +21693.0,pick item,2020-05-12 07:18:35.000Z, ,"['887980']", , , ,0.2,39.99 +21694.0,pick item,2020-05-12 07:23:35.000Z, ,"['887926']", , , ,0.483,79.99 +21695.0,create package,2020-05-12 07:23:35.000Z, ,"['887861','887868','887863']", ,"['661271']", ,2.57,2765.99 +21696.0,reorder item,2020-05-12 07:28:14.000Z, ,"['887823']", , , ,0.483,1099.0 +21697.0,pick item,2020-05-12 07:43:42.000Z, ,"['887985']", , , ,0.78,99.99 +21698.0,pay order,2020-05-12 07:49:56.000Z, , ,"['991939']", , ,3.378,3350.97 +21699.0,package delivered,2020-05-12 08:09:26.000Z, , , ,"['661263']", ,1.911,3128.0 +21700.0,confirm order,2020-05-12 08:12:06.000Z, , ,"['991963']", , ,1.6230000000000002,2447.99 +21701.0,payment reminder,2020-05-12 08:12:41.000Z, , ,"['991884']", , ,1.982,3802.0 +21702.0,pick item,2020-05-12 08:13:17.000Z, ,"['887915']", , , ,1.37,2500.0 +21703.0,pick item,2020-05-12 08:18:13.000Z, ,"['887886']", , , ,0.44,476.0 +21704.0,create package,2020-05-12 08:18:13.000Z, ,"['887944','887946','887945','887948','887941','887754']", ,"['661272']", ,4.575,2082.97 +21705.0,pick item,2020-05-12 08:22:02.000Z, ,"['887905']", , , ,1.25,2200.0 +21706.0,confirm order,2020-05-12 08:23:39.000Z, , ,"['991959']", , ,1.675,303.98 +21707.0,pick item,2020-05-12 08:30:09.000Z, ,"['888025']", , , ,0.483,79.99 +21708.0,failed delivery,2020-05-12 08:30:29.000Z, , , ,"['661268']", ,10.637,5728.91 +21709.0,place order,2020-05-12 08:32:05.000Z, ,"['888026']","['991965']", , ,1.48,204.99 +21710.0,send package,2020-05-12 08:39:09.000Z, , , ,"['661271']", ,2.57,2765.99 +21711.0,pick item,2020-05-12 08:40:14.000Z, ,"['888009']", , , ,0.78,99.99 +21712.0,pay order,2020-05-12 08:46:39.000Z, , ,"['991921']", , ,2.043,1702.99 +21713.0,confirm order,2020-05-12 08:52:49.000Z, , ,"['991962']", , ,4.583,6003.99 +21714.0,reorder item,2020-05-12 08:54:45.000Z, ,"['887947']", , , ,0.44,476.0 +21715.0,pick item,2020-05-12 08:55:04.000Z, ,"['887994']", , , ,0.44,476.0 +21716.0,pick item,2020-05-12 08:57:41.000Z, ,"['888012']", , , ,0.483,495.0 +21717.0,pick item,2020-05-12 09:03:11.000Z, ,"['887984']", , , ,1.48,199.99 +21718.0,create package,2020-05-12 09:03:11.000Z, ,"['887952','887949','887815','887950','887951']", ,"['661273']", ,3.253,1957.97 +21719.0,confirm order,2020-05-12 09:09:35.000Z, , ,"['991951']", , ,0.763,1193.99 +21720.0,pay order,2020-05-12 09:21:40.000Z, , ,"['991949']", , ,2.74,314.97 +21721.0,pick item,2020-05-12 09:22:27.000Z, ,"['888011']", , , ,0.28,449.0 +21722.0,pick item,2020-05-12 09:23:12.000Z, ,"['887929']", , , ,0.483,1099.0 +21723.0,reorder item,2020-05-12 09:23:30.000Z, ,"['887943']", , , ,0.483,79.99 +21724.0,pick item,2020-05-12 09:35:40.000Z, ,"['888007']", , , ,1.48,199.99 +21725.0,pick item,2020-05-12 09:36:31.000Z, ,"['887998']", , , ,0.98,129.99 +21726.0,confirm order,2020-05-12 09:40:42.000Z, , ,"['991965']", , ,1.48,204.99 +21727.0,pick item,2020-05-12 09:48:31.000Z, ,"['888013']", , , ,0.483,79.99 +21728.0,create package,2020-05-12 09:48:31.000Z, ,"['887811','887836','888009','888011','888008','888025','888007','887973']", ,"['661274']", ,5.5310000000000015,5621.97 +21729.0,confirm order,2020-05-12 09:53:09.000Z, , ,"['991964']", , ,1.456,1557.99 +21730.0,item out of stock,2020-05-12 09:53:40.000Z, ,"['887933']", , , ,0.28,89.99 +21731.0,reorder item,2020-05-12 09:53:48.000Z, ,"['887981']", , , ,0.44,476.0 +21732.0,pick item,2020-05-12 09:54:34.000Z, ,"['888024']", , , ,0.28,449.0 +21733.0,pick item,2020-05-12 09:58:09.000Z, ,"['887995']", , , ,0.495,129.0 +21734.0,pick item,2020-05-12 09:58:44.000Z, ,"['887990']", , , ,0.21,529.0 +21735.0,pick item,2020-05-12 09:59:12.000Z, ,"['887800']", , , ,0.98,129.99 +21736.0,pick item,2020-05-12 09:59:17.000Z, ,"['888017']", , , ,1.25,2200.0 +21737.0,place order,2020-05-12 10:23:57.000Z, ,"['888027','888029','888028']","['991966']", , ,2.133,2674.98 +21738.0,pay order,2020-05-12 10:24:32.000Z, , ,"['991952']", , ,0.338,1503.0 +21739.0,send package,2020-05-12 10:27:11.000Z, , , ,"['661270']", ,4.7360000000000015,3554.97 +21740.0,pick item,2020-05-12 10:29:37.000Z, ,"['888022']", , , ,0.21,529.0 +21741.0,pay order,2020-05-12 10:38:14.000Z, , ,"['991963']", , ,1.6230000000000002,2447.99 +21742.0,pick item,2020-05-12 10:44:13.000Z, ,"['887895']", , , ,0.495,129.0 +21743.0,confirm order,2020-05-12 11:32:42.000Z, , ,"['991953']", , ,2.323,374.95 +21744.0,item out of stock,2020-05-12 11:50:40.000Z, ,"['888001']", , , ,0.483,79.99 +21745.0,reorder item,2020-05-12 11:56:02.000Z, ,"['887968']", , , ,0.78,99.99 +21746.0,place order,2020-05-12 12:07:42.000Z, ,"['888034','888031','888033','888030','888032']","['991967']", , ,2.79,1269.97 +21747.0,payment reminder,2020-05-12 12:09:34.000Z, , ,"['991885']", , ,3.2,5912.0 +21748.0,pick item,2020-05-12 12:16:35.000Z, ,"['887942']", , , ,0.21,529.0 +21749.0,create package,2020-05-12 12:16:35.000Z, ,"['887965','887841','887967','887966','887895','887842']", ,"['661275']", ,5.265,2738.96 +21750.0,pick item,2020-05-12 12:43:04.000Z, ,"['887834']", , , ,0.172,699.0 +21751.0,item out of stock,2020-05-12 12:47:01.000Z, ,"['887896']", , , ,1.25,2200.0 +21752.0,pay order,2020-05-12 12:48:14.000Z, , ,"['991948']", , ,2.64,324.97 +21753.0,pick item,2020-05-12 12:50:20.000Z, ,"['887971']", , , ,0.483,1099.0 +21754.0,pick item,2020-05-12 12:56:15.000Z, ,"['888004']", , , ,0.98,129.99 +21755.0,send package,2020-05-12 12:56:36.000Z, , , ,"['661269']", ,0.88,89.99 +21756.0,confirm order,2020-05-12 12:56:39.000Z, , ,"['991967']", , ,2.79,1269.97 +21757.0,package delivered,2020-05-12 13:24:10.000Z, , , ,"['661270']", ,4.7360000000000015,3554.97 +21758.0,pick item,2020-05-12 13:25:20.000Z, ,"['887978']", , , ,0.2,39.99 +21759.0,pick item,2020-05-12 13:26:13.000Z, ,"['888000']", , , ,0.44,476.0 +21760.0,pick item,2020-05-12 13:28:37.000Z, ,"['887809']", , , ,0.78,99.99 +21761.0,create package,2020-05-12 13:28:37.000Z, ,"['887928']", ,"['661276']", ,0.28,89.99 +21762.0,send package,2020-05-12 13:32:22.000Z, , , ,"['661273']", ,3.253,1957.97 +21763.0,place order,2020-05-12 13:35:11.000Z, ,"['888037','888036','888035','888038','888039']","['991968']", , ,1.996,2633.99 +21764.0,pick item,2020-05-12 13:56:07.000Z, ,"['888027']", , , ,1.37,2500.0 +21765.0,create package,2020-05-12 13:56:07.000Z, ,"['887786']", ,"['661277']", ,0.28,449.0 +21766.0,pick item,2020-05-12 13:59:53.000Z, ,"['888035']", , , ,0.483,495.0 +21767.0,create package,2020-05-12 13:59:53.000Z, ,"['887978','887977','887883','887919','887882','887881']", ,"['661278']", ,1.809,2037.96 +21768.0,send package,2020-05-12 14:16:09.000Z, , , ,"['661275']", ,5.265,2738.96 +21769.0,pay order,2020-05-12 14:24:19.000Z, , ,"['991906']", , ,3.5460000000000003,5293.99 +21770.0,reorder item,2020-05-12 14:24:30.000Z, ,"['887801']", , , ,0.44,476.0 +21771.0,pick item,2020-05-12 14:26:07.000Z, ,"['888028']", , , ,0.483,79.99 +21772.0,pick item,2020-05-12 14:29:09.000Z, ,"['888026']", , , ,1.48,199.99 +21773.0,pay order,2020-05-12 14:49:33.000Z, , ,"['991932']", , ,5.0280000000000005,5893.97 +21774.0,confirm order,2020-05-12 14:52:28.000Z, , ,"['991961']", , ,0.966,579.99 +21775.0,item out of stock,2020-05-12 14:57:54.000Z, ,"['887920']", , , ,1.25,2200.0 +21776.0,pay order,2020-05-12 15:00:27.000Z, , ,"['991953']", , ,2.323,374.95 +21777.0,pick item,2020-05-12 15:16:55.000Z, ,"['887992']", , , ,0.28,89.99 +21778.0,pay order,2020-05-12 15:19:37.000Z, , ,"['991914']", , ,3.983,5289.99 +21779.0,reorder item,2020-05-12 15:23:05.000Z, ,"['887976']", , , ,0.483,79.99 +21780.0,place order,2020-05-12 15:30:09.000Z, ,"['888044','888043','888045','888041','888040','888042']","['991969']", , ,3.0860000000000003,1962.96 +21781.0,package delivered,2020-05-12 15:36:19.000Z, , , ,"['661269']", ,0.88,89.99 +21782.0,pick item,2020-05-12 15:36:20.000Z, ,"['887730']", , , ,0.44,476.0 +21783.0,pick item,2020-05-12 15:42:22.000Z, ,"['887846']", , , ,0.98,129.99 +21784.0,pick item,2020-05-12 16:12:56.000Z, ,"['887822']", , , ,0.2,39.99 +21785.0,create package,2020-05-12 16:12:56.000Z, ,"['887969','887846','887938','887955']", ,"['661279']", ,5.02,629.96 +21786.0,pick item,2020-05-12 16:17:52.000Z, ,"['888038']", , , ,0.21,529.0 +21787.0,confirm order,2020-05-12 16:20:21.000Z, , ,"['991966']", , ,2.133,2674.98 +21788.0,pick item,2020-05-12 16:30:11.000Z, ,"['888037']", , , ,0.483,1099.0 +21789.0,pick item,2020-05-12 16:39:05.000Z, ,"['888019']", , , ,0.483,495.0 +21790.0,package delivered,2020-05-12 16:40:33.000Z, , , ,"['661275']", ,5.265,2738.96 +21791.0,confirm order,2020-05-12 16:40:33.000Z, , ,"['991955']", , ,3.651,2099.96 +21792.0,place order,2020-05-12 17:20:06.000Z, ,"['888048','888046','888047']","['991970']", , ,1.132,1378.99 +21793.0,send package,2020-05-12 17:22:11.000Z, , , ,"['661276']", ,0.28,89.99 +21794.0,pick item,2020-05-12 17:48:28.000Z, ,"['887963']", , , ,0.88,89.99 +21795.0,create package,2020-05-12 17:48:28.000Z, ,"['888005','888004','887998','887783','888002','887929','887932','887931','888000','887963','887962','887964']", ,"['661280']", ,8.818999999999997,6821.94 +21796.0,pick item,2020-05-12 17:52:46.000Z, ,"['888015']", , , ,0.483,1099.0 +21797.0,pick item,2020-05-12 18:05:57.000Z, ,"['888020']", , , ,0.188,1149.0 +21798.0,item out of stock,2020-05-12 20:13:11.000Z, ,"['888003']", , , ,0.2,39.99 +21799.0,place order,2020-05-12 20:19:47.000Z, ,"['888049','888052','888056','888053','888054','888051','888050','888055']","['991971']", , ,5.622000000000001,5291.96 +21800.0,place order,2020-05-13 06:31:08.000Z, ,"['888058','888057']","['991972']", , ,1.052,793.99 +21801.0,package delivered,2020-05-13 06:40:30.000Z, , , ,"['661273']", ,3.253,1957.97 +21802.0,failed delivery,2020-05-13 06:44:35.000Z, , , ,"['661276']", ,0.28,89.99 +21803.0,pay order,2020-05-13 06:47:35.000Z, , ,"['991947']", , ,1.715,709.99 +21804.0,pick item,2020-05-13 06:49:36.000Z, ,"['888047']", , , ,0.483,495.0 +21805.0,pay order,2020-05-13 06:52:41.000Z, , ,"['991957']", , ,1.913,1234.0 +21806.0,pick item,2020-05-13 07:08:30.000Z, ,"['887934']", , , ,0.172,699.0 +21807.0,pick item,2020-05-13 07:10:07.000Z, ,"['888049']", , , ,0.38,29.99 +21808.0,pick item,2020-05-13 07:13:40.000Z, ,"['887958']", , , ,0.98,129.99 +21809.0,reorder item,2020-05-13 07:36:13.000Z, ,"['888001']", , , ,0.483,79.99 +21810.0,pick item,2020-05-13 07:44:16.000Z, ,"['887979']", , , ,0.172,699.0 +21811.0,pay order,2020-05-13 07:44:39.000Z, , ,"['991885']", , ,3.2,5912.0 +21812.0,confirm order,2020-05-13 07:46:24.000Z, , ,"['991972']", , ,1.052,793.99 +21813.0,pay order,2020-05-13 07:46:53.000Z, , ,"['991872']", , ,3.3280000000000003,1523.97 +21814.0,failed delivery,2020-05-13 07:49:56.000Z, , , ,"['661271']", ,2.57,2765.99 +21815.0,pick item,2020-05-13 07:55:05.000Z, ,"['887975']", , , ,0.98,129.99 +21816.0,send package,2020-05-13 08:06:48.000Z, , , ,"['661280']", ,8.818999999999997,6821.94 +21817.0,pick item,2020-05-13 08:14:46.000Z, ,"['888058']", , , ,0.88,89.99 +21818.0,pick item,2020-05-13 08:22:39.000Z, ,"['888034']", , , ,0.38,29.99 +21819.0,send package,2020-05-13 08:31:08.000Z, , , ,"['661278']", ,1.809,2037.96 +21820.0,pick item,2020-05-13 08:34:25.000Z, ,"['888055']", , , ,0.166,799.0 +21821.0,place order,2020-05-13 08:36:30.000Z, ,"['888064','888059','888060','888063','888061','888062']","['991973']", , ,2.468,5167.99 +21822.0,send package,2020-05-13 08:42:21.000Z, , , ,"['661272']", ,4.575,2082.97 +21823.0,pick item,2020-05-13 08:48:25.000Z, ,"['888059']", , , ,1.25,2200.0 +21824.0,create package,2020-05-13 08:48:25.000Z, ,"['887971','887898','887970','888058','887730','887733']", ,"['661281']", ,3.358,1983.97 +21825.0,package delivered,2020-05-13 09:21:23.000Z, , , ,"['661271']", ,2.57,2765.99 +21826.0,item out of stock,2020-05-13 09:22:47.000Z, ,"['888006']", , , ,0.483,495.0 +21827.0,pick item,2020-05-13 09:26:17.000Z, ,"['888041']", , , ,0.28,449.0 +21828.0,send package,2020-05-13 09:31:51.000Z, , , ,"['661279']", ,5.02,629.96 +21829.0,send package,2020-05-13 09:32:33.000Z, , , ,"['661274']", ,5.5310000000000015,5621.97 +21830.0,pick item,2020-05-13 09:40:29.000Z, ,"['888053']", , , ,0.28,449.0 +21831.0,confirm order,2020-05-13 09:54:25.000Z, , ,"['991968']", , ,1.996,2633.99 +21832.0,pick item,2020-05-13 09:55:45.000Z, ,"['888044']", , , ,0.28,89.99 +21833.0,reorder item,2020-05-13 09:58:06.000Z, ,"['887957']", , , ,0.495,129.0 +21834.0,place order,2020-05-13 10:32:47.000Z, ,"['888066','888065']","['991974']", , ,0.58,74.98 +21835.0,pay order,2020-05-13 10:39:02.000Z, , ,"['991961']", , ,0.966,579.99 +21836.0,pick item,2020-05-13 10:39:29.000Z, ,"['887988']", , , ,0.172,699.0 +21837.0,pick item,2020-05-13 10:49:34.000Z, ,"['888042']", , , ,0.483,1099.0 +21838.0,reorder item,2020-05-13 11:04:52.000Z, ,"['887933']", , , ,0.28,89.99 +21839.0,pick item,2020-05-13 11:18:01.000Z, ,"['888063']", , , ,0.28,89.99 +21840.0,create package,2020-05-13 11:18:01.000Z, ,"['887984','887986','887958','887887','887985','887982','887886']", ,"['661282']", ,5.131,2234.95 +21841.0,item out of stock,2020-05-13 11:19:31.000Z, ,"['888062']", , , ,0.166,799.0 +21842.0,failed delivery,2020-05-13 11:25:55.000Z, , , ,"['661280']", ,8.818999999999997,6821.94 +21843.0,failed delivery,2020-05-13 11:47:50.000Z, , , ,"['661268']", ,10.637,5728.91 +21844.0,place order,2020-05-13 12:25:22.000Z, ,"['888068','888067','888069','888070']","['991975']", , ,2.482,3452.99 +21845.0,pick item,2020-05-13 12:26:09.000Z, ,"['888045']", , , ,0.483,79.99 +21846.0,send package,2020-05-13 12:35:55.000Z, , , ,"['661277']", ,0.28,449.0 +21847.0,pick item,2020-05-13 12:36:21.000Z, ,"['888052']", , , ,1.48,199.99 +21848.0,pick item,2020-05-13 12:47:56.000Z, ,"['888010']", , , ,0.88,89.99 +21849.0,pick item,2020-05-13 13:05:32.000Z, ,"['887869']", , , ,1.25,2200.0 +21850.0,pick item,2020-05-13 13:09:42.000Z, ,"['887940']", , , ,1.48,199.99 +21851.0,pick item,2020-05-13 13:10:07.000Z, ,"['887821']", , , ,1.48,199.99 +21852.0,pick item,2020-05-13 13:15:58.000Z, ,"['888061']", , , ,0.166,799.0 +21853.0,create package,2020-05-13 13:15:58.000Z, ,"['887994','887905','887995','887997','887996','888026','887915','887909','887926','887800']", ,"['661283']", ,7.756,6787.97 +21854.0,send package,2020-05-13 13:19:26.000Z, , , ,"['661283']", ,7.756,6787.97 +21855.0,pick item,2020-05-13 13:20:36.000Z, ,"['887744']", , , ,0.88,89.99 +21856.0,confirm order,2020-05-13 13:29:25.000Z, , ,"['991971']", , ,5.622000000000001,5291.96 +21857.0,pick item,2020-05-13 13:38:41.000Z, ,"['887782']", , , ,0.88,89.99 +21858.0,payment reminder,2020-05-13 13:43:41.000Z, , ,"['991887']", , ,3.221,1232.98 +21859.0,place order,2020-05-13 14:10:31.000Z, ,"['888072','888071','888073']","['991976']", , ,1.586,1409.99 +21860.0,pick item,2020-05-13 14:12:11.000Z, ,"['888064']", , , ,0.166,799.0 +21861.0,send package,2020-05-13 14:16:20.000Z, , , ,"['661281']", ,3.358,1983.97 +21862.0,package delivered,2020-05-13 14:19:03.000Z, , , ,"['661268']", ,10.637,5728.91 +21863.0,package delivered,2020-05-13 14:20:21.000Z, , , ,"['661283']", ,7.756,6787.97 +21864.0,confirm order,2020-05-13 14:25:57.000Z, , ,"['991976']", , ,1.586,1409.99 +21865.0,pick item,2020-05-13 14:28:21.000Z, ,"['888039']", , , ,0.44,476.0 +21866.0,reorder item,2020-05-13 14:52:40.000Z, ,"['887920']", , , ,1.25,2200.0 +21867.0,pick item,2020-05-13 14:55:39.000Z, ,"['887914']", , , ,0.28,89.99 +21868.0,pick item,2020-05-13 14:56:50.000Z, ,"['887974']", , , ,0.28,89.99 +21869.0,pick item,2020-05-13 15:02:14.000Z, ,"['888033']", , , ,0.44,476.0 +21870.0,payment reminder,2020-05-13 15:03:46.000Z, , ,"['991889']", , ,1.845,2461.99 +21871.0,package delivered,2020-05-13 15:06:01.000Z, , , ,"['661279']", ,5.02,629.96 +21872.0,package delivered,2020-05-13 15:07:08.000Z, , , ,"['661276']", ,0.28,89.99 +21873.0,confirm order,2020-05-13 15:10:33.000Z, , ,"['991973']", , ,2.468,5167.99 +21874.0,pick item,2020-05-13 15:11:35.000Z, ,"['887953']", , , ,0.98,129.99 +21875.0,package delivered,2020-05-13 15:14:48.000Z, , , ,"['661277']", ,0.28,449.0 +21876.0,package delivered,2020-05-13 15:15:50.000Z, , , ,"['661278']", ,1.809,2037.96 +21877.0,reorder item,2020-05-13 15:27:15.000Z, ,"['888062']", , , ,0.166,799.0 +21878.0,pick item,2020-05-13 15:33:36.000Z, ,"['888066']", , , ,0.38,29.99 +21879.0,place order,2020-05-13 15:40:49.000Z, ,"['888074','888076','888075']","['991977']", , ,1.97,1182.99 +21880.0,pick item,2020-05-13 15:46:10.000Z, ,"['888051']", , , ,0.98,129.99 +21881.0,create package,2020-05-13 15:46:10.000Z, ,"['888012','888013','887763','887822','887821']", ,"['661284']", ,2.818,1513.97 +21882.0,reorder item,2020-05-13 15:48:39.000Z, ,"['887906']", , , ,0.2,39.99 +21883.0,item out of stock,2020-05-13 16:07:44.000Z, ,"['888036']", , , ,0.38,29.99 +21884.0,confirm order,2020-05-13 16:08:06.000Z, , ,"['991974']", , ,0.58,74.98 +21885.0,pick item,2020-05-13 16:36:42.000Z, ,"['887954']", , , ,0.21,529.0 +21886.0,place order,2020-05-13 17:42:02.000Z, ,"['888079','888078','888077']","['991978']", , ,0.929,1332.99 +21887.0,confirm order,2020-05-13 18:46:43.000Z, , ,"['991978']", , ,0.929,1332.99 +21888.0,place order,2020-05-13 21:03:39.000Z, ,"['888080','888081']","['991979']", , ,0.546,833.99 +21889.0,create package,2020-05-13 23:00:00.000Z, ,"['887979','887980','888047']", ,"['661285']", ,0.855,1233.99 +21890.0,item out of stock,2020-05-14 06:12:38.000Z, ,"['888072']", , , ,0.44,476.0 +21891.0,pick item,2020-05-14 06:26:40.000Z, ,"['888073']", , , ,0.98,129.99 +21892.0,send package,2020-05-14 06:29:16.000Z, , , ,"['661285']", ,0.855,1233.99 +21893.0,item out of stock,2020-05-14 06:38:38.000Z, ,"['888050']", , , ,1.37,2500.0 +21894.0,pick item,2020-05-14 06:52:31.000Z, ,"['888046']", , , ,0.166,799.0 +21895.0,place order,2020-05-14 06:55:58.000Z, ,"['888082']","['991980']", , ,0.166,804.0 +21896.0,package delivered,2020-05-14 06:56:32.000Z, , , ,"['661272']", ,4.575,2082.97 +21897.0,pick item,2020-05-14 06:57:34.000Z, ,"['888070']", , , ,0.172,699.0 +21898.0,package delivered,2020-05-14 07:10:58.000Z, , , ,"['661274']", ,5.5310000000000015,5621.97 +21899.0,pick item,2020-05-14 07:24:29.000Z, ,"['887906']", , , ,0.2,39.99 +21900.0,pick item,2020-05-14 07:34:28.000Z, ,"['887855']", , , ,0.21,529.0 +21901.0,reorder item,2020-05-14 07:35:58.000Z, ,"['888006']", , , ,0.483,495.0 +21902.0,pick item,2020-05-14 07:39:38.000Z, ,"['887770']", , , ,1.28,149.99 +21903.0,pay order,2020-05-14 07:45:37.000Z, , ,"['991960']", , ,4.386,1833.97 +21904.0,reorder item,2020-05-14 07:45:47.000Z, ,"['887983']", , , ,0.28,89.99 +21905.0,send package,2020-05-14 08:01:47.000Z, , , ,"['661284']", ,2.818,1513.97 +21906.0,pick item,2020-05-14 08:02:09.000Z, ,"['888079']", , , ,0.28,449.0 +21907.0,create package,2020-05-14 08:02:09.000Z, ,"['888037','888061','888035','888038','888064','887809','888022','888063','888059','888024','887770','887834','888010','888039']", ,"['661286']", ,7.08,8503.96 +21908.0,package delivered,2020-05-14 08:06:34.000Z, , , ,"['661285']", ,0.855,1233.99 +21909.0,pick item,2020-05-14 08:22:22.000Z, ,"['888057']", , , ,0.172,699.0 +21910.0,pick item,2020-05-14 08:33:28.000Z, ,"['888075']", , , ,1.48,199.99 +21911.0,pick item,2020-05-14 08:39:34.000Z, ,"['887991']", , , ,0.28,89.99 +21912.0,pick item,2020-05-14 08:54:14.000Z, ,"['888082']", , , ,0.166,799.0 +21913.0,place order,2020-05-14 09:13:44.000Z, ,"['888083','888084','888085']","['991981']", , ,1.043,623.98 +21914.0,pick item,2020-05-14 09:16:30.000Z, ,"['887972']", , , ,0.166,799.0 +21915.0,pay order,2020-05-14 09:21:55.000Z, , ,"['991926']", , ,3.026,1848.98 +21916.0,pick item,2020-05-14 09:27:00.000Z, ,"['888067']", , , ,0.28,449.0 +21917.0,pay order,2020-05-14 09:27:37.000Z, , ,"['991887']", , ,3.221,1232.98 +21918.0,pick item,2020-05-14 09:28:41.000Z, ,"['888048']", , , ,0.483,79.99 +21919.0,pick item,2020-05-14 09:39:13.000Z, ,"['888023']", , , ,0.483,495.0 +21920.0,package delivered,2020-05-14 09:43:53.000Z, , , ,"['661280']", ,8.818999999999997,6821.94 +21921.0,pick item,2020-05-14 09:49:09.000Z, ,"['888016']", , , ,1.37,2500.0 +21922.0,pick item,2020-05-14 10:03:04.000Z, ,"['888065']", , , ,0.2,39.99 +21923.0,pick item,2020-05-14 10:07:05.000Z, ,"['888021']", , , ,0.172,699.0 +21924.0,send package,2020-05-14 10:21:20.000Z, , , ,"['661286']", ,7.08,8503.96 +21925.0,confirm order,2020-05-14 10:27:28.000Z, , ,"['991969']", , ,3.0860000000000003,1962.96 +21926.0,confirm order,2020-05-14 10:31:21.000Z, , ,"['991980']", , ,0.166,804.0 +21927.0,pick item,2020-05-14 10:32:13.000Z, ,"['888056']", , , ,0.483,1099.0 +21928.0,pay order,2020-05-14 10:34:00.000Z, , ,"['991931']", , ,0.495,134.0 +21929.0,place order,2020-05-14 10:47:15.000Z, ,"['888086','888088','888087']","['991982']", , ,0.905,702.99 +21930.0,pick item,2020-05-14 10:52:37.000Z, ,"['888084']", , , ,0.483,79.99 +21931.0,reorder item,2020-05-14 11:11:09.000Z, ,"['888050']", , , ,1.37,2500.0 +21932.0,send package,2020-05-14 11:17:31.000Z, , , ,"['661282']", ,5.131,2234.95 +21933.0,package delivered,2020-05-14 11:18:32.000Z, , , ,"['661282']", ,5.131,2234.95 +21934.0,pick item,2020-05-14 11:20:57.000Z, ,"['887939']", , , ,1.25,2200.0 +21935.0,create package,2020-05-14 11:20:57.000Z, ,"['887990','887988','887992','887991']", ,"['661287']", ,0.942,1407.98 +21936.0,pick item,2020-05-14 11:49:30.000Z, ,"['887823']", , , ,0.483,1099.0 +21937.0,pick item,2020-05-14 11:54:01.000Z, ,"['888087']", , , ,0.2,39.99 +21938.0,pick item,2020-05-14 12:17:02.000Z, ,"['888083']", , , ,0.28,89.99 +21939.0,pick item,2020-05-14 12:22:43.000Z, ,"['888030']", , , ,0.21,529.0 +21940.0,create package,2020-05-14 12:22:43.000Z, ,"['888017','887953','888016','888015']", ,"['661288']", ,4.083,5928.99 +21941.0,reorder item,2020-05-14 12:40:02.000Z, ,"['888072']", , , ,0.44,476.0 +21942.0,package delivered,2020-05-14 12:45:27.000Z, , , ,"['661281']", ,3.358,1983.97 +21943.0,place order,2020-05-14 12:54:18.000Z, ,"['888093','888090','888095','888089','888094','888091','888092']","['991983']", , ,3.234,4757.97 +21944.0,pick item,2020-05-14 13:13:40.000Z, ,"['887999']", , , ,1.37,2500.0 +21945.0,pay order,2020-05-14 13:23:33.000Z, , ,"['991958']", , ,3.756,4289.98 +21946.0,confirm order,2020-05-14 13:30:02.000Z, , ,"['991979']", , ,0.546,833.99 +21947.0,confirm order,2020-05-14 13:33:56.000Z, , ,"['991982']", , ,0.905,702.99 +21948.0,pick item,2020-05-14 14:09:37.000Z, ,"['888014']", , , ,1.48,199.99 +21949.0,pay order,2020-05-14 14:13:37.000Z, , ,"['991978']", , ,0.929,1332.99 +21950.0,pay order,2020-05-14 14:25:03.000Z, , ,"['991968']", , ,1.996,2633.99 +21951.0,pick item,2020-05-14 14:27:23.000Z, ,"['888086']", , , ,0.21,529.0 +21952.0,pick item,2020-05-14 14:34:02.000Z, ,"['888060']", , , ,0.44,476.0 +21953.0,create package,2020-05-14 14:34:02.000Z, ,"['887939','887942','887940']", ,"['661289']", ,2.94,2928.99 +21954.0,pick item,2020-05-14 14:49:52.000Z, ,"['888031']", , , ,0.98,129.99 +21955.0,pick item,2020-05-14 15:05:05.000Z, ,"['888078']", , , ,0.166,799.0 +21956.0,place order,2020-05-14 15:08:23.000Z, ,"['888097','888096','888098','888099','888100']","['991984']", , ,2.411,4411.99 +21957.0,pay order,2020-05-14 15:12:22.000Z, , ,"['991976']", , ,1.586,1409.99 +21958.0,send package,2020-05-14 15:32:55.000Z, , , ,"['661287']", ,0.942,1407.98 +21959.0,pay order,2020-05-14 16:02:08.000Z, , ,"['991897']", , ,3.02,3332.99 +21960.0,pick item,2020-05-14 16:11:48.000Z, ,"['887879']", , , ,0.28,89.99 +21961.0,create package,2020-05-14 16:11:48.000Z, ,"['888027','887855','888028','888073']", ,"['661290']", ,3.043,3238.98 +21962.0,pick item,2020-05-14 16:16:25.000Z, ,"['888098']", , , ,0.188,1149.0 +21963.0,place order,2020-05-14 16:36:34.000Z, ,"['888102','888101']","['991985']", , ,1.57,2544.99 +21964.0,pick item,2020-05-14 16:38:27.000Z, ,"['888032']", , , ,0.78,99.99 +21965.0,pick item,2020-05-14 17:01:42.000Z, ,"['887922']", , , ,0.172,699.0 +21966.0,place order,2020-05-14 19:29:16.000Z, ,"['888105','888104','888103']","['991986']", , ,1.73,2334.98 +21967.0,place order,2020-05-15 03:13:30.000Z, ,"['888106','888109','888107','888110','888111','888108']","['991987']", , ,2.777,4052.97 +21968.0,item out of stock,2020-05-15 06:22:01.000Z, ,"['888109']", , , ,1.37,2500.0 +21969.0,confirm order,2020-05-15 06:30:50.000Z, , ,"['991975']", , ,2.482,3452.99 +21970.0,pick item,2020-05-15 07:00:33.000Z, ,"['888104']", , , ,0.2,39.99 +21971.0,create package,2020-05-15 07:00:33.000Z, ,"['888021','888020','887922','888019']", ,"['661291']", ,1.015,3042.0 +21972.0,pick item,2020-05-15 07:02:47.000Z, ,"['888094']", , , ,0.483,79.99 +21973.0,reorder item,2020-05-15 07:43:34.000Z, ,"['887896']", , , ,1.25,2200.0 +21974.0,pick item,2020-05-15 07:44:17.000Z, ,"['888040']", , , ,0.28,89.99 +21975.0,place order,2020-05-15 07:46:39.000Z, ,"['888117','888112','888113','888115','888116','888114']","['991988']", , ,3.192,3916.98 +21976.0,pick item,2020-05-15 07:49:00.000Z, ,"['888111']", , , ,0.172,699.0 +21977.0,pick item,2020-05-15 07:58:05.000Z, ,"['888105']", , , ,1.25,2200.0 +21978.0,create package,2020-05-15 07:58:05.000Z, ,"['887782','888051','887744','888049','888053','888052','888056','887934','887999','888055']", ,"['661292']", ,7.0710000000000015,6085.95 +21979.0,confirm order,2020-05-15 08:12:56.000Z, , ,"['991983']", , ,3.234,4757.97 +21980.0,item out of stock,2020-05-15 08:14:06.000Z, ,"['888076']", , , ,0.21,529.0 +21981.0,pick item,2020-05-15 08:14:44.000Z, ,"['888054']", , , ,0.483,79.99 +21982.0,pick item,2020-05-15 08:16:43.000Z, ,"['888001']", , , ,0.483,79.99 +21983.0,confirm order,2020-05-15 08:21:48.000Z, , ,"['991977']", , ,1.97,1182.99 +21984.0,reorder item,2020-05-15 08:34:23.000Z, ,"['888003']", , , ,0.2,39.99 +21985.0,pick item,2020-05-15 08:41:39.000Z, ,"['888077']", , , ,0.483,79.99 +21986.0,send package,2020-05-15 08:44:52.000Z, , , ,"['661289']", ,2.94,2928.99 +21987.0,confirm order,2020-05-15 08:47:51.000Z, , ,"['991985']", , ,1.57,2544.99 +21988.0,send package,2020-05-15 08:52:15.000Z, , , ,"['661288']", ,4.083,5928.99 +21989.0,item out of stock,2020-05-15 09:05:57.000Z, ,"['888085']", , , ,0.28,449.0 +21990.0,package delivered,2020-05-15 09:08:46.000Z, , , ,"['661287']", ,0.942,1407.98 +21991.0,pick item,2020-05-15 09:10:10.000Z, ,"['888029']", , , ,0.28,89.99 +21992.0,pick item,2020-05-15 09:34:10.000Z, ,"['888112']", , , ,0.483,1099.0 +21993.0,send package,2020-05-15 09:38:57.000Z, , , ,"['661290']", ,3.043,3238.98 +21994.0,confirm order,2020-05-15 09:45:06.000Z, , ,"['991988']", , ,3.192,3916.98 +21995.0,place order,2020-05-15 09:53:05.000Z, ,"['888119','888121','888120','888118','888122']","['991989']", , ,4.84,7223.99 +21996.0,pick item,2020-05-15 10:03:34.000Z, ,"['888068']", , , ,0.78,99.99 +21997.0,pay order,2020-05-15 10:13:49.000Z, , ,"['991954']", , ,0.3720000000000001,743.99 +21998.0,item out of stock,2020-05-15 10:23:06.000Z, ,"['888114']", , , ,0.483,1099.0 +21999.0,package delivered,2020-05-15 10:26:13.000Z, , , ,"['661284']", ,2.818,1513.97 +22000.0,pick item,2020-05-15 10:50:39.000Z, ,"['887784']", , , ,0.166,799.0 +22001.0,send package,2020-05-15 10:56:35.000Z, , , ,"['661291']", ,1.015,3042.0 +22002.0,package delivered,2020-05-15 11:02:11.000Z, , , ,"['661286']", ,7.08,8503.96 +22003.0,pick item,2020-05-15 11:08:18.000Z, ,"['888089']", , , ,0.28,89.99 +22004.0,place order,2020-05-15 12:05:58.000Z, ,"['888123','888125','888126','888127','888124']","['991990']", , ,3.115,1123.96 +22005.0,failed delivery,2020-05-15 12:11:54.000Z, , , ,"['661290']", ,3.043,3238.98 +22006.0,item out of stock,2020-05-15 12:17:11.000Z, ,"['888106']", , , ,0.38,29.99 +22007.0,pick item,2020-05-15 12:25:07.000Z, ,"['888101']", , , ,0.2,39.99 +22008.0,pick item,2020-05-15 12:32:59.000Z, ,"['888100']", , , ,0.483,79.99 +22009.0,create package,2020-05-15 12:32:59.000Z, ,"['888079','887975','887974','888078','888077']", ,"['661293']", ,2.189,1547.97 +22010.0,confirm order,2020-05-15 12:48:15.000Z, , ,"['991970']", , ,1.132,1378.99 +22011.0,item out of stock,2020-05-15 12:50:55.000Z, ,"['888116']", , , ,0.483,1099.0 +22012.0,pay order,2020-05-15 12:57:17.000Z, , ,"['991979']", , ,0.546,833.99 +22013.0,confirm order,2020-05-15 13:06:06.000Z, , ,"['991989']", , ,4.84,7223.99 +22014.0,reorder item,2020-05-15 13:09:07.000Z, ,"['888076']", , , ,0.21,529.0 +22015.0,package delivered,2020-05-15 13:16:52.000Z, , , ,"['661289']", ,2.94,2928.99 +22016.0,package delivered,2020-05-15 13:26:47.000Z, , , ,"['661288']", ,4.083,5928.99 +22017.0,place order,2020-05-15 13:31:43.000Z, ,"['888130','888128','888129']","['991991']", , ,2.048,1373.98 +22018.0,pick item,2020-05-15 13:38:02.000Z, ,"['888130']", , , ,0.88,89.99 +22019.0,package delivered,2020-05-15 13:41:06.000Z, , , ,"['661291']", ,1.015,3042.0 +22020.0,confirm order,2020-05-15 14:10:17.000Z, , ,"['991987']", , ,2.777,4052.97 +22021.0,pick item,2020-05-15 14:18:35.000Z, ,"['888018']", , , ,0.78,99.99 +22022.0,pick item,2020-05-15 14:23:09.000Z, ,"['888127']", , , ,0.483,79.99 +22023.0,pay order,2020-05-15 14:32:55.000Z, , ,"['991972']", , ,1.052,793.99 +22024.0,confirm order,2020-05-15 14:52:56.000Z, , ,"['991984']", , ,2.411,4411.99 +22025.0,pick item,2020-05-15 14:53:14.000Z, ,"['888088']", , , ,0.495,129.0 +22026.0,pick item,2020-05-15 15:05:07.000Z, ,"['888103']", , , ,0.28,89.99 +22027.0,create package,2020-05-15 15:05:07.000Z, ,"['888031','888094','888065','888033','888089','888032','888034','888030','888066']", ,"['661294']", ,4.133,1504.93 +22028.0,place order,2020-05-15 15:23:14.000Z, ,"['888131','888132']","['991992']", , ,0.693,1633.0 +22029.0,pay order,2020-05-15 15:39:13.000Z, , ,"['991974']", , ,0.58,74.98 +22030.0,pick item,2020-05-15 15:54:44.000Z, ,"['888123']", , , ,0.172,699.0 +22031.0,send package,2020-05-15 16:05:02.000Z, , , ,"['661292']", ,7.0710000000000015,6085.95 +22032.0,confirm order,2020-05-15 16:12:51.000Z, , ,"['991986']", , ,1.73,2334.98 +22033.0,pick item,2020-05-15 16:16:48.000Z, ,"['888129']", , , ,0.98,129.99 +22034.0,pay order,2020-05-15 16:57:11.000Z, , ,"['991969']", , ,3.0860000000000003,1962.96 +22035.0,place order,2020-05-15 17:06:15.000Z, ,"['888139','888135','888137','888138','888136','888133','888134','888140']","['991993']", , ,6.269,2058.94 +22036.0,place order,2020-05-15 19:52:05.000Z, ,"['888142','888143','888141']","['991994']", , ,1.998,4130.0 +22037.0,place order,2020-05-16 13:12:24.000Z, ,"['888146','888144','888145']","['991995']", , ,2.633,3703.99 +22038.0,payment reminder,2020-05-16 13:21:47.000Z, , ,"['991750']", , ,2.714,2171.98 +22039.0,payment reminder,2020-05-17 07:10:00.000Z, , ,"['991893']", , ,5.819,5236.95 +22040.0,place order,2020-05-17 13:18:42.000Z, ,"['888147','888148']","['991996']", , ,0.6829999999999999,1283.0 +22041.0,place order,2020-05-18 05:49:18.000Z, ,"['888149','888151','888150']","['991997']", , ,1.97,763.98 +22042.0,pick item,2020-05-18 06:45:32.000Z, ,"['888144']", , , ,0.78,99.99 +22043.0,pay order,2020-05-18 07:34:29.000Z, , ,"['991987']", , ,2.777,4052.97 +22044.0,item out of stock,2020-05-18 07:48:16.000Z, ,"['888137']", , , ,1.28,149.99 +22045.0,pick item,2020-05-18 08:23:10.000Z, ,"['888043']", , , ,1.28,149.99 +22046.0,reorder item,2020-05-18 08:23:10.000Z, ,"['888036']", , , ,0.38,29.99 +22047.0,pick item,2020-05-18 08:35:35.000Z, ,"['888147']", , , ,0.495,129.0 +22048.0,place order,2020-05-18 08:38:01.000Z, ,"['888153','888152']","['991998']", , ,1.16,543.99 +22049.0,pick item,2020-05-18 08:46:39.000Z, ,"['888102']", , , ,1.37,2500.0 +22050.0,pay order,2020-05-18 08:51:27.000Z, , ,"['991986']", , ,1.73,2334.98 +22051.0,item out of stock,2020-05-18 08:54:54.000Z, ,"['888117']", , , ,0.38,29.99 +22052.0,confirm order,2020-05-18 09:20:45.000Z, , ,"['991994']", , ,1.998,4130.0 +22053.0,reorder item,2020-05-18 09:27:16.000Z, ,"['888114']", , , ,0.483,1099.0 +22054.0,confirm order,2020-05-18 09:50:54.000Z, , ,"['991995']", , ,2.633,3703.99 +22055.0,package delivered,2020-05-18 09:53:20.000Z, , , ,"['661290']", ,3.043,3238.98 +22056.0,pick item,2020-05-18 09:54:48.000Z, ,"['888135']", , , ,1.48,199.99 +22057.0,pick item,2020-05-18 10:02:40.000Z, ,"['888125']", , , ,0.2,39.99 +22058.0,pick item,2020-05-18 10:04:11.000Z, ,"['888081']", , , ,0.38,29.99 +22059.0,create package,2020-05-18 10:04:11.000Z, ,"['888045','888057','888081','888044','888135','888112','888040','888042','888043','888082','888041','888075']", ,"['661295']", ,7.247000000000001,4984.93 +22060.0,confirm order,2020-05-18 10:25:08.000Z, , ,"['991997']", , ,1.97,763.98 +22061.0,reorder item,2020-05-18 10:26:39.000Z, ,"['888116']", , , ,0.483,1099.0 +22062.0,pick item,2020-05-18 10:31:42.000Z, ,"['888119']", , , ,1.25,2200.0 +22063.0,place order,2020-05-18 10:35:49.000Z, ,"['888154','888157','888155','888158','888156']","['991999']", , ,1.596,3180.0 +22064.0,send package,2020-05-18 10:55:34.000Z, , , ,"['661295']", ,7.247000000000001,4984.93 +22065.0,send package,2020-05-18 11:19:21.000Z, , , ,"['661293']", ,2.189,1547.97 +22066.0,pick item,2020-05-18 11:41:55.000Z, ,"['887916']", , , ,0.188,1149.0 +22067.0,confirm order,2020-05-18 12:08:48.000Z, , ,"['991990']", , ,3.115,1123.96 +22068.0,pick item,2020-05-18 12:11:23.000Z, ,"['888124']", , , ,0.78,99.99 +22069.0,place order,2020-05-18 12:31:26.000Z, ,"['888159']","['992000']", , ,0.44,481.0 +22070.0,confirm order,2020-05-18 12:33:52.000Z, , ,"['991998']", , ,1.16,543.99 +22071.0,confirm order,2020-05-18 12:49:03.000Z, , ,"['992000']", , ,0.44,481.0 +22072.0,pick item,2020-05-18 12:54:57.000Z, ,"['888050']", , , ,1.37,2500.0 +22073.0,confirm order,2020-05-18 13:07:20.000Z, , ,"['991993']", , ,6.269,2058.94 +22074.0,pick item,2020-05-18 13:12:54.000Z, ,"['888145']", , , ,0.483,1099.0 +22075.0,reorder item,2020-05-18 13:27:23.000Z, ,"['888117']", , , ,0.38,29.99 +22076.0,package delivered,2020-05-18 13:48:00.000Z, , , ,"['661295']", ,7.247000000000001,4984.93 +22077.0,package delivered,2020-05-18 13:55:58.000Z, , , ,"['661292']", ,7.0710000000000015,6085.95 +22078.0,item out of stock,2020-05-18 14:00:13.000Z, ,"['888150']", , , ,0.78,99.99 +22079.0,pick item,2020-05-18 14:00:59.000Z, ,"['888140']", , , ,1.48,199.99 +22080.0,pick item,2020-05-18 14:08:41.000Z, ,"['888158']", , , ,0.483,1099.0 +22081.0,pick item,2020-05-18 14:24:28.000Z, ,"['888062']", , , ,0.166,799.0 +22082.0,send package,2020-05-18 14:25:45.000Z, , , ,"['661294']", ,4.133,1504.93 +22083.0,item out of stock,2020-05-18 14:42:27.000Z, ,"['888142']", , , ,1.37,2500.0 +22084.0,confirm order,2020-05-18 14:44:38.000Z, , ,"['991992']", , ,0.693,1633.0 +22085.0,confirm order,2020-05-18 14:55:39.000Z, , ,"['991999']", , ,1.596,3180.0 +22086.0,pick item,2020-05-18 14:56:19.000Z, ,"['888133']", , , ,0.2,39.99 +22087.0,item out of stock,2020-05-18 15:03:58.000Z, ,"['888153']", , , ,0.88,89.99 +22088.0,pick item,2020-05-18 15:11:01.000Z, ,"['888114']", , , ,0.483,1099.0 +22089.0,item out of stock,2020-05-18 15:13:33.000Z, ,"['888107']", , , ,0.2,39.99 +22090.0,pick item,2020-05-18 15:16:56.000Z, ,"['888122']", , , ,0.21,529.0 +22091.0,confirm order,2020-05-18 15:34:50.000Z, , ,"['991991']", , ,2.048,1373.98 +22092.0,pick item,2020-05-18 15:38:06.000Z, ,"['888115']", , , ,0.483,495.0 +22093.0,create package,2020-05-18 15:38:06.000Z, ,"['887869']", ,"['661296']", ,1.25,2200.0 +22094.0,pick item,2020-05-18 15:54:48.000Z, ,"['888003']", , , ,0.2,39.99 +22095.0,create package,2020-05-18 15:54:48.000Z, ,"['887906','887914','887916']", ,"['661297']", ,0.6679999999999999,1278.98 +22096.0,pick item,2020-05-18 16:01:38.000Z, ,"['888128']", , , ,0.188,1149.0 +22097.0,item out of stock,2020-05-18 16:13:50.000Z, ,"['888099']", , , ,0.21,529.0 +22098.0,pick item,2020-05-18 16:25:42.000Z, ,"['888069']", , , ,1.25,2200.0 +22099.0,pick item,2020-05-18 16:38:34.000Z, ,"['888110']", , , ,0.172,699.0 +22100.0,create package,2020-05-18 16:38:34.000Z, ,"['888130','887954','888110','888128','888111','888129']", ,"['661298']", ,2.602,3295.98 +22101.0,pick item,2020-05-18 16:53:26.000Z, ,"['888155']", , , ,0.172,699.0 +22102.0,create package,2020-05-18 23:00:00.000Z, ,"['888068','888147','888105','888067','888069','888104','888103','888048','888046','888070']", ,"['661299']", ,5.356,6785.96 +22103.0,pick item,2020-05-19 06:58:48.000Z, ,"['888138']", , , ,0.98,129.99 +22104.0,confirm order,2020-05-19 07:00:35.000Z, , ,"['991996']", , ,0.6829999999999999,1283.0 +22105.0,reorder item,2020-05-19 07:25:58.000Z, ,"['888109']", , , ,1.37,2500.0 +22106.0,pick item,2020-05-19 07:35:27.000Z, ,"['888121']", , , ,0.88,89.99 +22107.0,reorder item,2020-05-19 07:44:00.000Z, ,"['888106']", , , ,0.38,29.99 +22108.0,pay order,2020-05-19 07:53:14.000Z, , ,"['991942']", , ,3.948,2523.97 +22109.0,pick item,2020-05-19 08:19:14.000Z, ,"['888096']", , , ,0.28,449.0 +22110.0,pick item,2020-05-19 08:20:22.000Z, ,"['888159']", , , ,0.44,476.0 +22111.0,reorder item,2020-05-19 08:31:06.000Z, ,"['888142']", , , ,1.37,2500.0 +22112.0,reorder item,2020-05-19 08:38:08.000Z, ,"['888137']", , , ,1.28,149.99 +22113.0,pick item,2020-05-19 08:47:56.000Z, ,"['888036']", , , ,0.38,29.99 +22114.0,item out of stock,2020-05-19 09:23:06.000Z, ,"['888091']", , , ,0.172,699.0 +22115.0,package delivered,2020-05-19 09:24:44.000Z, , , ,"['661293']", ,2.189,1547.97 +22116.0,item out of stock,2020-05-19 09:48:54.000Z, ,"['888095']", , , ,0.483,495.0 +22117.0,pick item,2020-05-19 09:53:37.000Z, ,"['888108']", , , ,0.483,79.99 +22118.0,pay order,2020-05-19 09:56:31.000Z, , ,"['991956']", , ,2.2,3089.98 +22119.0,item out of stock,2020-05-19 10:02:02.000Z, ,"['888139']", , , ,0.166,799.0 +22120.0,pick item,2020-05-19 10:06:42.000Z, ,"['887749']", , , ,0.495,129.0 +22121.0,pay order,2020-05-19 10:28:20.000Z, , ,"['991964']", , ,1.456,1557.99 +22122.0,pick item,2020-05-19 10:38:12.000Z, ,"['888154']", , , ,0.166,799.0 +22123.0,pick item,2020-05-19 11:11:57.000Z, ,"['888148']", , , ,0.188,1149.0 +22124.0,pick item,2020-05-19 11:52:22.000Z, ,"['888136']", , , ,0.2,39.99 +22125.0,reorder item,2020-05-19 12:35:25.000Z, ,"['888153']", , , ,0.88,89.99 +22126.0,reorder item,2020-05-19 12:48:09.000Z, ,"['888150']", , , ,0.78,99.99 +22127.0,pay order,2020-05-19 12:56:14.000Z, , ,"['991975']", , ,2.482,3452.99 +22128.0,item out of stock,2020-05-19 13:09:25.000Z, ,"['888071']", , , ,0.166,799.0 +22129.0,pick item,2020-05-19 13:42:14.000Z, ,"['888117']", , , ,0.38,29.99 +22130.0,reorder item,2020-05-19 13:52:32.000Z, ,"['888107']", , , ,0.2,39.99 +22131.0,pick item,2020-05-19 14:05:38.000Z, ,"['888116']", , , ,0.483,1099.0 +22132.0,pick item,2020-05-19 14:05:58.000Z, ,"['888090']", , , ,1.37,2500.0 +22133.0,pay order,2020-05-19 14:07:03.000Z, , ,"['991993']", , ,6.269,2058.94 +22134.0,pick item,2020-05-19 14:13:18.000Z, ,"['888141']", , , ,0.188,1149.0 +22135.0,package delivered,2020-05-19 15:02:06.000Z, , , ,"['661294']", ,4.133,1504.93 +22136.0,pick item,2020-05-19 15:18:41.000Z, ,"['888074']", , , ,0.28,449.0 +22137.0,create package,2020-05-19 15:18:41.000Z, ,"['887972','888036','888060','888023','888062']", ,"['661300']", ,1.635,2598.99 +22138.0,send package,2020-05-19 15:41:03.000Z, , , ,"['661299']", ,5.356,6785.96 +22139.0,send package,2020-05-19 16:00:49.000Z, , , ,"['661296']", ,1.25,2200.0 +22140.0,pay order,2020-05-19 17:40:04.000Z, , ,"['991917']", , ,2.138,752.98 +22141.0,pick item,2020-05-19 20:02:46.000Z, ,"['888143']", , , ,0.44,476.0 +22142.0,pay order,2020-05-20 07:18:49.000Z, , ,"['991945']", , ,1.656,1482.99 +22143.0,pick item,2020-05-20 07:41:30.000Z, ,"['888092']", , , ,0.28,89.99 +22144.0,send package,2020-05-20 07:45:15.000Z, , , ,"['661297']", ,0.6679999999999999,1278.98 +22145.0,pick item,2020-05-20 07:56:21.000Z, ,"['888097']", , , ,1.25,2200.0 +22146.0,pay order,2020-05-20 07:56:24.000Z, , ,"['991998']", , ,1.16,543.99 +22147.0,pick item,2020-05-20 08:10:12.000Z, ,"['888113']", , , ,0.88,89.99 +22148.0,pick item,2020-05-20 08:10:43.000Z, ,"['887678']", , , ,0.88,89.99 +22149.0,create package,2020-05-20 08:10:43.000Z, ,"['888098','888088','888083','888084','888096','888086','888087','888097','888100']", ,"['661301']", ,3.869,4745.96 +22150.0,pick item,2020-05-20 08:12:51.000Z, ,"['888126']", , , ,1.48,199.99 +22151.0,pick item,2020-05-20 08:15:16.000Z, ,"['888131']", , , ,0.483,1099.0 +22152.0,pick item,2020-05-20 08:23:52.000Z, ,"['888151']", , , ,0.21,529.0 +22153.0,reorder item,2020-05-20 08:37:02.000Z, ,"['888099']", , , ,0.21,529.0 +22154.0,pay order,2020-05-20 08:39:36.000Z, , ,"['991992']", , ,0.693,1633.0 +22155.0,reorder item,2020-05-20 08:44:18.000Z, ,"['888085']", , , ,0.28,449.0 +22156.0,send package,2020-05-20 08:44:26.000Z, , , ,"['661298']", ,2.602,3295.98 +22157.0,pay order,2020-05-20 08:49:40.000Z, , ,"['991966']", , ,2.133,2674.98 +22158.0,failed delivery,2020-05-20 09:10:13.000Z, , , ,"['661296']", ,1.25,2200.0 +22159.0,package delivered,2020-05-20 09:59:26.000Z, , , ,"['661296']", ,1.25,2200.0 +22160.0,pick item,2020-05-20 10:08:07.000Z, ,"['888132']", , , ,0.21,529.0 +22161.0,reorder item,2020-05-20 10:34:44.000Z, ,"['888071']", , , ,0.166,799.0 +22162.0,pick item,2020-05-20 10:36:32.000Z, ,"['887896']", , , ,1.25,2200.0 +22163.0,pick item,2020-05-20 10:39:40.000Z, ,"['887801']", , , ,0.44,476.0 +22164.0,pay order,2020-05-20 11:34:41.000Z, , ,"['991995']", , ,2.633,3703.99 +22165.0,item out of stock,2020-05-20 12:13:15.000Z, ,"['888152']", , , ,0.28,449.0 +22166.0,pick item,2020-05-20 12:33:46.000Z, ,"['888146']", , , ,1.37,2500.0 +22167.0,payment reminder,2020-05-20 13:13:36.000Z, , ,"['991859']", , ,3.676,3283.98 +22168.0,pay order,2020-05-20 13:14:13.000Z, , ,"['991857']", , ,0.483,1104.0 +22169.0,send package,2020-05-20 13:28:19.000Z, , , ,"['661300']", ,1.635,2598.99 +22170.0,pick item,2020-05-20 13:30:13.000Z, ,"['888157']", , , ,0.28,449.0 +22171.0,reorder item,2020-05-20 14:50:21.000Z, ,"['888139']", , , ,0.166,799.0 +22172.0,pick item,2020-05-20 15:22:29.000Z, ,"['888118']", , , ,1.25,2200.0 +22173.0,create package,2020-05-20 15:22:29.000Z, ,"['887823','888131','888132']", ,"['661302']", ,1.176,2727.0 +22174.0,pick item,2020-05-20 15:29:27.000Z, ,"['888156']", , , ,0.495,129.0 +22175.0,package delivered,2020-05-20 15:40:10.000Z, , , ,"['661297']", ,0.6679999999999999,1278.98 +22176.0,pick item,2020-05-20 15:50:32.000Z, ,"['888006']", , , ,0.483,495.0 +22177.0,package delivered,2020-05-20 16:58:51.000Z, , , ,"['661299']", ,5.356,6785.96 +22178.0,pick item,2020-05-21 07:04:20.000Z, ,"['888080']", , , ,0.166,799.0 +22179.0,create package,2020-05-21 07:04:20.000Z, ,"['888014','888159','888146','888144','888145']", ,"['661303']", ,4.553,4374.98 +22180.0,pick item,2020-05-21 07:05:13.000Z, ,"['888149']", , , ,0.98,129.99 +22181.0,pick item,2020-05-21 07:33:46.000Z, ,"['887983']", , , ,0.28,89.99 +22182.0,send package,2020-05-21 07:34:30.000Z, , , ,"['661301']", ,3.869,4745.96 +22183.0,send package,2020-05-21 08:15:16.000Z, , , ,"['661302']", ,1.176,2727.0 +22184.0,item out of stock,2020-05-21 08:16:03.000Z, ,"['888093']", , , ,0.166,799.0 +22185.0,package delivered,2020-05-21 08:17:54.000Z, , , ,"['661302']", ,1.176,2727.0 +22186.0,failed delivery,2020-05-21 08:22:51.000Z, , , ,"['661298']", ,2.602,3295.98 +22187.0,pay order,2020-05-21 08:27:13.000Z, , ,"['991991']", , ,2.048,1373.98 +22188.0,pick item,2020-05-21 08:54:37.000Z, ,"['888139']", , , ,0.166,799.0 +22189.0,package delivered,2020-05-21 08:58:26.000Z, , , ,"['661301']", ,3.869,4745.96 +22190.0,reorder item,2020-05-21 10:29:54.000Z, ,"['888095']", , , ,0.483,495.0 +22191.0,failed delivery,2020-05-21 10:42:11.000Z, , , ,"['661298']", ,2.602,3295.98 +22192.0,send package,2020-05-21 13:27:54.000Z, , , ,"['661303']", ,4.553,4374.98 +22193.0,pay order,2020-05-21 13:46:22.000Z, , ,"['991893']", , ,5.819,5236.95 +22194.0,pay order,2020-05-21 13:54:12.000Z, , ,"['991980']", , ,0.166,804.0 +22195.0,package delivered,2020-05-21 14:11:09.000Z, , , ,"['661300']", ,1.635,2598.99 +22196.0,pay order,2020-05-21 14:43:06.000Z, , ,"['991940']", , ,2.948,1503.98 +22197.0,pick item,2020-05-21 15:03:12.000Z, ,"['887797']", , , ,1.37,2500.0 +22198.0,failed delivery,2020-05-21 15:16:09.000Z, , , ,"['661298']", ,2.602,3295.98 +22199.0,pay order,2020-05-21 15:31:50.000Z, , ,"['991996']", , ,0.6829999999999999,1283.0 +22200.0,pay order,2020-05-21 16:15:09.000Z, , ,"['991994']", , ,1.998,4130.0 +22201.0,pick item,2020-05-21 19:41:16.000Z, ,"['888134']", , , ,0.483,495.0 +22202.0,create package,2020-05-21 19:41:16.000Z, ,"['887879','888119','888121','888118','888122']", ,"['661304']", ,3.87,5108.98 +22203.0,package delivered,2020-05-21 19:43:23.000Z, , , ,"['661303']", ,4.553,4374.98 +22204.0,pay order,2020-05-21 19:50:48.000Z, , ,"['992000']", , ,0.44,481.0 +22205.0,confirm order,2020-05-22 06:22:15.000Z, , ,"['991981']", , ,1.043,623.98 +22206.0,pay order,2020-05-22 07:22:24.000Z, , ,"['991970']", , ,1.132,1378.99 +22207.0,pay order,2020-05-22 07:29:18.000Z, , ,"['991951']", , ,0.763,1193.99 +22208.0,pick item,2020-05-22 09:09:46.000Z, ,"['887872']", , , ,0.78,99.99 +22209.0,pick item,2020-05-22 10:40:21.000Z, ,"['887947']", , , ,0.44,476.0 +22210.0,reorder item,2020-05-22 11:18:06.000Z, ,"['888091']", , , ,0.172,699.0 +22211.0,package delivered,2020-05-22 12:51:49.000Z, , , ,"['661298']", ,2.602,3295.98 +22212.0,reorder item,2020-05-22 13:10:33.000Z, ,"['888093']", , , ,0.166,799.0 +22213.0,pick item,2020-05-22 15:08:19.000Z, ,"['887976']", , , ,0.483,79.99 +22214.0,create package,2020-05-23 23:00:00.000Z, ,"['887784','888157','887678','888050','888054','888001','888003','888154','888155','888158','888156']", ,"['661305']", ,5.178,6763.96 +22215.0,payment reminder,2020-05-24 15:19:42.000Z, , ,"['991919']", , ,3.887,6321.99 +22216.0,reorder item,2020-05-25 06:44:15.000Z, ,"['888152']", , , ,0.28,449.0 +22217.0,send package,2020-05-25 07:19:02.000Z, , , ,"['661305']", ,5.178,6763.96 +22218.0,payment reminder,2020-05-25 07:30:20.000Z, , ,"['991903']", , ,2.86,3183.99 +22219.0,send package,2020-05-25 08:18:21.000Z, , , ,"['661304']", ,3.87,5108.98 +22220.0,package delivered,2020-05-25 09:47:50.000Z, , , ,"['661304']", ,3.87,5108.98 +22221.0,pay order,2020-05-25 10:05:43.000Z, , ,"['991973']", , ,2.468,5167.99 +22222.0,pick item,2020-05-25 10:11:30.000Z, ,"['888152']", , , ,0.28,449.0 +22223.0,item out of stock,2020-05-25 13:09:23.000Z, ,"['888120']", , , ,1.25,2200.0 +22224.0,payment reminder,2020-05-25 13:29:37.000Z, , ,"['991925']", , ,5.339,7517.97 +22225.0,pick item,2020-05-25 14:28:35.000Z, ,"['887920']", , , ,1.25,2200.0 +22226.0,package delivered,2020-05-25 14:34:16.000Z, , , ,"['661305']", ,5.178,6763.96 +22227.0,pick item,2020-05-26 07:23:25.000Z, ,"['887880']", , , ,0.483,495.0 +22228.0,pay order,2020-05-26 08:07:12.000Z, , ,"['991903']", , ,2.86,3183.99 +22229.0,pay order,2020-05-26 11:40:17.000Z, , ,"['991989']", , ,4.84,7223.99 +22230.0,pick item,2020-05-26 12:24:33.000Z, ,"['887968']", , , ,0.78,99.99 +22231.0,pick item,2020-05-26 13:14:04.000Z, ,"['888153']", , , ,0.88,89.99 +22232.0,reorder item,2020-05-26 15:21:44.000Z, ,"['888120']", , , ,1.25,2200.0 +22233.0,payment reminder,2020-05-27 06:54:09.000Z, , ,"['991935']", , ,2.99,2394.97 +22234.0,pay order,2020-05-27 07:15:38.000Z, , ,"['991959']", , ,1.675,303.98 +22235.0,payment reminder,2020-05-27 07:58:51.000Z, , ,"['991936']", , ,1.152,843.98 +22236.0,pick item,2020-05-27 08:04:59.000Z, ,"['888106']", , , ,0.38,29.99 +22237.0,pick item,2020-05-27 08:52:47.000Z, ,"['888137']", , , ,1.28,149.99 +22238.0,pay order,2020-05-27 09:05:30.000Z, , ,"['991997']", , ,1.97,763.98 +22239.0,pick item,2020-05-27 11:09:46.000Z, ,"['888076']", , , ,0.21,529.0 +22240.0,pick item,2020-05-27 11:48:31.000Z, ,"['887933']", , , ,0.28,89.99 +22241.0,pay order,2020-05-27 12:54:55.000Z, , ,"['991971']", , ,5.622000000000001,5291.96 +22242.0,pick item,2020-05-27 13:25:01.000Z, ,"['888120']", , , ,1.25,2200.0 +22243.0,pay order,2020-05-28 08:00:04.000Z, , ,"['991982']", , ,0.905,702.99 +22244.0,pick item,2020-05-28 10:34:21.000Z, ,"['888150']", , , ,0.78,99.99 +22245.0,pick item,2020-05-28 12:54:14.000Z, ,"['887930']", , , ,0.88,89.99 +22246.0,pay order,2020-05-28 13:41:23.000Z, , ,"['991983']", , ,3.234,4757.97 +22247.0,create package,2020-05-28 23:00:00.000Z, ,"['888029']", ,"['661306']", ,0.28,89.99 +22248.0,send package,2020-05-29 06:36:52.000Z, , , ,"['661306']", ,0.28,89.99 +22249.0,pay order,2020-05-29 10:15:33.000Z, , ,"['991984']", , ,2.411,4411.99 +22250.0,pick item,2020-05-29 11:54:01.000Z, ,"['887981']", , , ,0.44,476.0 +22251.0,pick item,2020-05-29 14:48:16.000Z, ,"['888099']", , , ,0.21,529.0 +22252.0,create package,2020-05-29 14:48:16.000Z, ,"['888102','888101','887983','887981']", ,"['661307']", ,2.29,3105.98 +22253.0,pay order,2020-05-29 15:02:30.000Z, , ,"['991919']", , ,3.887,6321.99 +22254.0,pick item,2020-05-29 15:06:19.000Z, ,"['888109']", , , ,1.37,2500.0 +22255.0,pay order,2020-05-29 15:20:28.000Z, , ,"['991999']", , ,1.596,3180.0 +22256.0,pick item,2020-05-29 17:18:48.000Z, ,"['888093']", , , ,0.166,799.0 +22257.0,package delivered,2020-05-29 17:34:38.000Z, , , ,"['661306']", ,0.28,89.99 +22258.0,payment reminder,2020-05-31 07:21:17.000Z, , ,"['991950']", , ,2.26,304.98 +22259.0,payment reminder,2020-05-31 07:35:03.000Z, , ,"['991943']", , ,1.69,733.99 +22260.0,payment reminder,2020-05-31 12:20:16.000Z, , ,"['991944']", , ,1.663,1273.98 +22261.0,payment reminder,2020-06-01 08:12:41.000Z, , ,"['991884']", , ,1.982,3802.0 +22262.0,payment reminder,2020-06-01 08:52:49.000Z, , ,"['991962']", , ,4.583,6003.99 +22263.0,payment reminder,2020-06-01 09:40:42.000Z, , ,"['991965']", , ,1.48,204.99 +22264.0,payment reminder,2020-06-01 12:56:39.000Z, , ,"['991967']", , ,2.79,1269.97 +22265.0,pay order,2020-06-01 13:43:37.000Z, , ,"['991988']", , ,3.192,3916.98 +22266.0,payment reminder,2020-06-01 16:40:33.000Z, , ,"['991955']", , ,3.651,2099.96 +22267.0,send package,2020-06-02 06:52:35.000Z, , , ,"['661307']", ,2.29,3105.98 +22268.0,pick item,2020-06-02 10:07:28.000Z, ,"['887696']", , , ,0.28,89.99 +22269.0,pick item,2020-06-02 11:21:04.000Z, ,"['888095']", , , ,0.483,495.0 +22270.0,create package,2020-06-02 11:21:04.000Z, ,"['888018']", ,"['661308']", ,0.78,99.99 +22271.0,send package,2020-06-02 13:30:34.000Z, , , ,"['661308']", ,0.78,99.99 +22272.0,package delivered,2020-06-02 13:41:58.000Z, , , ,"['661308']", ,0.78,99.99 +22273.0,payment reminder,2020-06-02 15:03:46.000Z, , ,"['991889']", , ,1.845,2461.99 +22274.0,create package,2020-06-02 23:00:00.000Z, ,"['888127','887749','887947','888123','888125','888126','888124']", ,"['661309']", ,4.05,1723.96 +22275.0,pay order,2020-06-03 07:47:19.000Z, , ,"['991944']", , ,1.663,1273.98 +22276.0,package delivered,2020-06-03 08:43:10.000Z, , , ,"['661307']", ,2.29,3105.98 +22277.0,send package,2020-06-03 12:33:01.000Z, , , ,"['661309']", ,4.05,1723.96 +22278.0,failed delivery,2020-06-03 13:41:24.000Z, , , ,"['661309']", ,4.05,1723.96 +22279.0,pay order,2020-06-03 13:51:28.000Z, , ,"['991943']", , ,1.69,733.99 +22280.0,pay order,2020-06-04 06:38:02.000Z, , ,"['991990']", , ,3.115,1123.96 +22281.0,payment reminder,2020-06-04 08:21:48.000Z, , ,"['991977']", , ,1.97,1182.99 +22282.0,payment reminder,2020-06-04 08:47:51.000Z, , ,"['991985']", , ,1.57,2544.99 +22283.0,failed delivery,2020-06-04 08:59:59.000Z, , , ,"['661309']", ,4.05,1723.96 +22284.0,pay order,2020-06-04 09:35:28.000Z, , ,"['991962']", , ,4.583,6003.99 +22285.0,pay order,2020-06-04 09:50:24.000Z, , ,"['991955']", , ,3.651,2099.96 +22286.0,pay order,2020-06-04 12:34:14.000Z, , ,"['991889']", , ,1.845,2461.99 +22287.0,pick item,2020-06-04 18:53:10.000Z, ,"['888085']", , , ,0.28,449.0 +22288.0,pay order,2020-06-05 08:18:47.000Z, , ,"['991965']", , ,1.48,204.99 +22289.0,pick item,2020-06-05 08:42:25.000Z, ,"['887957']", , , ,0.495,129.0 +22290.0,pick item,2020-06-05 09:39:26.000Z, ,"['887943']", , , ,0.483,79.99 +22291.0,package delivered,2020-06-05 10:13:12.000Z, , , ,"['661309']", ,4.05,1723.96 +22292.0,pick item,2020-06-05 10:31:14.000Z, ,"['888071']", , , ,0.166,799.0 +22293.0,pay order,2020-06-05 10:34:55.000Z, , ,"['991967']", , ,2.79,1269.97 +22294.0,payment reminder,2020-06-05 13:21:47.000Z, , ,"['991750']", , ,2.714,2171.98 +22295.0,pay order,2020-06-05 15:32:43.000Z, , ,"['991935']", , ,2.99,2394.97 +22296.0,pick item,2020-06-05 15:35:03.000Z, ,"['888142']", , , ,1.37,2500.0 +22297.0,create package,2020-06-07 23:00:00.000Z, ,"['888139','888136','888133','888151','888134','888076','888140','888114','888074','888080','887896','888138','888137','888150','888116','888117','887797','888149','888113','888115']", ,"['661310']", ,12.744000000000002,11902.91 +22298.0,pay order,2020-06-09 07:06:49.000Z, , ,"['991985']", , ,1.57,2544.99 +22299.0,send package,2020-06-09 08:36:16.000Z, , , ,"['661310']", ,12.744000000000002,11902.91 +22300.0,package delivered,2020-06-09 12:55:23.000Z, , , ,"['661310']", ,12.744000000000002,11902.91 +22301.0,payment reminder,2020-06-09 13:13:36.000Z, , ,"['991859']", , ,3.676,3283.98 +22302.0,pay order,2020-06-10 08:41:09.000Z, , ,"['991977']", , ,1.97,1182.99 +22303.0,pick item,2020-06-10 09:02:14.000Z, ,"['887860']", , , ,0.38,29.99 +22304.0,pay order,2020-06-10 13:47:25.000Z, , ,"['991950']", , ,2.26,304.98 +22305.0,payment reminder,2020-06-11 06:22:15.000Z, , ,"['991981']", , ,1.043,623.98 +22306.0,pay order,2020-06-11 10:15:08.000Z, , ,"['991981']", , ,1.043,623.98 +22307.0,pick item,2020-06-11 12:52:35.000Z, ,"['888107']", , , ,0.2,39.99 +22308.0,pick item,2020-06-11 16:07:23.000Z, ,"['888072']", , , ,0.44,476.0 +22309.0,create package,2020-06-12 23:00:00.000Z, ,"['888106','888109','888107','887968','888108']", ,"['661311']", ,3.213,2749.96 +22310.0,payment reminder,2020-06-14 13:29:37.000Z, , ,"['991925']", , ,5.339,7517.97 +22311.0,send package,2020-06-15 12:38:34.000Z, , , ,"['661311']", ,3.213,2749.96 +22312.0,package delivered,2020-06-15 14:31:43.000Z, , , ,"['661311']", ,3.213,2749.96 +22313.0,payment reminder,2020-06-16 07:58:51.000Z, , ,"['991936']", , ,1.152,843.98 +22314.0,pay order,2020-06-17 13:38:18.000Z, , ,"['991925']", , ,5.339,7517.97 +22315.0,create package,2020-06-17 23:00:00.000Z, ,"['888153','888152','888148']", ,"['661312']", ,1.348,1687.99 +22316.0,send package,2020-06-18 14:32:12.000Z, , , ,"['661312']", ,1.348,1687.99 +22317.0,package delivered,2020-06-18 19:14:17.000Z, , , ,"['661312']", ,1.348,1687.99 +22318.0,payment reminder,2020-06-21 08:12:41.000Z, , ,"['991884']", , ,1.982,3802.0 +22319.0,create package,2020-06-22 23:00:00.000Z, ,"['887860','888093','888090','888095','888092']", ,"['661313']", ,2.679,3913.98 +22320.0,send package,2020-06-23 06:51:09.000Z, , , ,"['661313']", ,2.679,3913.98 +22321.0,failed delivery,2020-06-23 10:02:31.000Z, , , ,"['661313']", ,2.679,3913.98 +22322.0,pay order,2020-06-23 11:16:50.000Z, , ,"['991884']", , ,1.982,3802.0 +22323.0,package delivered,2020-06-23 14:46:49.000Z, , , ,"['661313']", ,2.679,3913.98 +22324.0,pick item,2020-06-25 09:32:42.000Z, ,"['888091']", , , ,0.172,699.0 +22325.0,payment reminder,2020-06-25 13:21:47.000Z, , ,"['991750']", , ,2.714,2171.98 +22326.0,create package,2020-06-27 23:00:00.000Z, ,"['888142','888143','887801','888141']", ,"['661314']", ,2.438,4601.0 +22327.0,send package,2020-06-29 11:28:26.000Z, , , ,"['661314']", ,2.438,4601.0 +22328.0,payment reminder,2020-06-29 13:13:36.000Z, , ,"['991859']", , ,3.676,3283.98 +22329.0,package delivered,2020-06-29 13:25:50.000Z, , , ,"['661314']", ,2.438,4601.0 +22330.0,pay order,2020-06-30 07:31:30.000Z, , ,"['991859']", , ,3.676,3283.98 +22331.0,pay order,2020-07-02 08:12:30.000Z, , ,"['991936']", , ,1.152,843.98 +22332.0,create package,2020-07-02 23:00:00.000Z, ,"['888006']", ,"['661315']", ,0.483,495.0 +22333.0,send package,2020-07-03 08:32:00.000Z, , , ,"['661315']", ,0.483,495.0 +22334.0,failed delivery,2020-07-03 12:38:32.000Z, , , ,"['661315']", ,0.483,495.0 +22335.0,package delivered,2020-07-06 16:17:48.000Z, , , ,"['661315']", ,0.483,495.0 +22336.0,create package,2020-07-07 23:00:00.000Z, ,"['887872']", ,"['661316']", ,0.78,99.99 +22337.0,send package,2020-07-08 19:02:42.000Z, , , ,"['661316']", ,0.78,99.99 +22338.0,pay order,2020-07-09 09:49:29.000Z, , ,"['991750']", , ,2.714,2171.98 +22339.0,package delivered,2020-07-09 13:52:46.000Z, , , ,"['661316']", ,0.78,99.99 +22340.0,create package,2020-07-12 23:00:00.000Z, ,"['887920','887976']", ,"['661317']", ,1.733,2279.99 +22341.0,send package,2020-07-13 12:05:37.000Z, , , ,"['661317']", ,1.733,2279.99 +22342.0,package delivered,2020-07-14 15:02:12.000Z, , , ,"['661317']", ,1.733,2279.99 +22343.0,create package,2020-07-17 23:00:00.000Z, ,"['887880','888120']", ,"['661318']", ,1.733,2695.0 +22344.0,send package,2020-07-21 13:46:48.000Z, , , ,"['661318']", ,1.733,2695.0 +22345.0,package delivered,2020-07-21 13:48:11.000Z, , , ,"['661318']", ,1.733,2695.0 +22346.0,create package,2020-07-22 23:00:00.000Z, ,"['887930','887933']", ,"['661319']", ,1.16,179.98 +22347.0,send package,2020-07-23 14:11:55.000Z, , , ,"['661319']", ,1.16,179.98 +22348.0,failed delivery,2020-07-24 14:15:58.000Z, , , ,"['661319']", ,1.16,179.98 +22349.0,package delivered,2020-07-27 13:55:33.000Z, , , ,"['661319']", ,1.16,179.98 +22350.0,create package,2020-07-27 23:00:00.000Z, ,"['888099','888085']", ,"['661320']", ,0.49,978.0 +22351.0,send package,2020-07-28 16:24:55.000Z, , , ,"['661320']", ,0.49,978.0 +22352.0,package delivered,2020-07-30 14:14:55.000Z, , , ,"['661320']", ,0.49,978.0 +22353.0,create package,2020-08-01 23:00:00.000Z, ,"['887696']", ,"['661321']", ,0.28,89.99 +22354.0,send package,2020-08-03 10:13:46.000Z, , , ,"['661321']", ,0.28,89.99 +22355.0,package delivered,2020-08-04 09:39:58.000Z, , , ,"['661321']", ,0.28,89.99 +22356.0,create package,2020-08-06 23:00:00.000Z, ,"['887957']", ,"['661322']", ,0.495,129.0 +22357.0,send package,2020-08-07 09:46:04.000Z, , , ,"['661322']", ,0.495,129.0 +22358.0,package delivered,2020-08-07 14:36:01.000Z, , , ,"['661322']", ,0.495,129.0 +22359.0,create package,2020-08-11 23:00:00.000Z, ,"['887943']", ,"['661323']", ,0.483,79.99 +22360.0,send package,2020-08-13 12:25:30.000Z, , , ,"['661323']", ,0.483,79.99 +22361.0,create package,2020-08-16 23:00:00.000Z, ,"['888072','888071']", ,"['661324']", ,0.606,1275.0 +22362.0,package delivered,2020-08-18 08:16:11.000Z, , , ,"['661323']", ,0.483,79.99 +22363.0,send package,2020-08-18 09:11:09.000Z, , , ,"['661324']", ,0.606,1275.0 +22364.0,package delivered,2020-08-19 15:57:32.000Z, , , ,"['661324']", ,0.606,1275.0 +22365.0,create package,2020-08-21 23:00:00.000Z, ,"['888091']", ,"['661325']", ,0.172,699.0 +22366.0,send package,2020-08-24 09:14:47.000Z, , , ,"['661325']", ,0.172,699.0 +22367.0,package delivered,2020-08-25 14:30:41.000Z, , , ,"['661325']", ,0.172,699.0 \ No newline at end of file diff --git a/pm4py/tests/input_data/ocel/recruiting-red.jsonocel b/pm4py/tests/input_data/ocel/recruiting-red.jsonocel new file mode 100644 index 0000000000000000000000000000000000000000..86c63a55876e32aa6482618d7f2b69496538b297 --- /dev/null +++ b/pm4py/tests/input_data/ocel/recruiting-red.jsonocel @@ -0,0 +1 @@ +{"ocel:global-event":{"ocel:activity":"__INVALID__"},"ocel:global-object":{"ocel:activity":"__INVALID__"},"ocel:global-log":{"ocel:attribute-names":[],"ocel:object-types":["applicants","applications","managers","offers","recruiters","vacancies"]},"ocel:objects":{"Application[770001]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770002]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770003]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770004]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770005]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770006]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770007]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770008]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770009]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770010]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770011]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770012]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770013]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770014]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770015]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770016]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770017]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770018]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770019]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770020]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770021]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770022]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770023]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770024]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770025]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770026]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770027]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770028]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770029]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770030]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770031]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770032]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770033]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770034]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770035]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770036]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770037]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770038]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770039]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770040]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770041]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770042]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770043]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770044]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770045]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770046]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770047]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770048]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770049]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770050]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770051]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770052]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770053]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770054]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770055]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770056]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770057]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770058]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770059]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770060]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770061]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770062]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770063]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770064]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770065]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770066]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770067]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770068]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770069]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770070]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770071]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770072]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770073]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770074]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770075]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770076]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770077]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770078]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770079]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770080]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770081]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770082]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770083]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770084]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770085]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770086]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770087]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770088]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770089]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770090]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770091]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770092]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770093]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770094]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770095]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770096]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770097]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770098]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770099]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770100]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770101]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770102]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770103]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770104]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770105]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770106]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770107]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770108]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770109]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770110]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770111]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770112]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770113]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770114]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770115]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770116]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770117]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770118]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770119]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770120]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770121]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770122]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770123]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770124]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770125]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770126]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770127]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770128]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770129]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770130]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770131]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770132]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770133]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770134]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770135]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770136]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770137]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770138]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770139]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770140]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770141]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770142]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770143]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770144]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770145]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770146]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770147]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770148]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770149]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770150]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770151]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770152]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770153]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770154]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770155]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770156]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770157]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770158]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770159]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770160]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770161]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770162]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770163]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770164]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770165]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770166]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770167]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770168]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770169]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770170]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770171]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770172]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770173]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770174]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770175]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770176]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770177]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770178]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770179]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770180]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770181]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770182]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770183]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770184]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770185]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770186]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770187]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770188]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770189]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770190]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770191]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770192]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770193]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770194]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770195]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770196]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770197]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770198]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770199]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770200]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770201]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770202]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770203]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770204]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770205]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770206]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770207]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770208]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770209]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770210]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770211]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770212]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770213]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770214]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770215]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770216]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770217]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770218]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770219]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770220]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770221]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770222]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770223]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770224]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770225]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770226]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770227]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770228]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770229]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770230]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770231]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770232]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770233]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770234]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770235]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770236]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770237]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770238]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770239]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770240]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770241]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770242]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770243]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770244]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770245]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770246]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770247]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770248]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770249]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770250]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770251]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770252]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770253]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770254]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770255]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770256]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770257]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770258]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770259]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770260]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770261]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770262]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770263]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770264]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770265]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770266]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770267]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770268]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770269]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770270]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770271]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770272]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770273]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770274]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770275]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770276]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770277]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770278]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770279]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770280]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770281]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770282]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990001]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770283]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770284]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770285]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770286]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770287]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770288]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770289]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770290]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770291]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770292]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770293]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770294]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770295]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770296]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770297]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770298]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770299]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770300]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770301]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770302]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770303]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990002]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770304]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770305]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770306]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770307]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770308]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990003]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770309]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770310]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770311]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770312]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770313]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770314]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770315]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770316]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770317]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770318]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770319]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990004]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770320]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770321]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770322]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770323]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770324]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770325]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770326]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770327]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770328]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770329]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770330]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770331]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770332]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770333]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770334]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770335]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770336]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770337]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770338]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770339]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770340]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770341]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770342]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770343]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770344]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770345]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770346]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770347]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770348]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770349]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770350]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770351]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770352]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990005]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770353]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770354]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770355]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770356]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770357]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770358]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770359]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770360]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770361]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770362]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770363]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770364]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770365]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770366]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770367]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770368]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770369]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770370]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770371]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770372]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770373]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770374]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770375]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770376]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770377]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990006]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770378]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770379]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990007]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770380]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770381]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770382]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770383]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770384]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770385]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770386]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990008]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770387]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770388]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770389]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770390]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770391]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770392]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770393]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770394]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770395]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770396]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770397]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990009]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770398]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770399]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770400]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770401]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770402]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990010]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770403]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770404]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770405]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770406]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770407]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770408]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770409]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770410]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770411]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770412]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770413]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770414]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770415]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770416]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770417]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770418]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770419]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770420]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770421]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770422]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770423]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770424]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770425]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770426]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770427]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770428]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990011]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770429]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990012]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770430]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990013]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770431]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990014]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770432]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770433]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770434]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770435]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770436]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770437]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770438]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770439]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770440]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770441]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770442]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990015]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770443]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770444]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770445]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770446]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770447]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770448]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770449]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990016]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990017]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770450]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770451]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770452]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770453]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770454]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770455]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770456]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770457]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770458]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770459]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770460]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770461]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770462]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770463]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770464]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770465]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770466]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770467]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770468]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770469]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770470]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770471]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770472]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770473]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770474]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770475]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770476]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990018]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770477]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770478]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770479]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770480]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770481]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770482]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770483]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770484]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770485]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770486]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770487]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770488]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770489]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770490]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770491]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770492]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770493]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770494]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990019]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770495]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770496]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770497]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770498]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770499]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770500]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770501]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770502]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770503]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770504]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770505]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770506]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990020]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990021]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770507]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770508]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770509]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770510]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770511]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770512]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770513]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770514]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770515]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770516]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990022]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770517]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770518]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770519]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770520]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990023]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770521]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770522]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770523]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770524]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770525]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770526]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990024]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770527]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770528]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770529]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770530]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770531]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770532]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770533]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770534]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770535]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990025]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770536]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770537]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770538]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770539]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770540]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990026]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770541]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770542]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770543]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770544]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770545]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770546]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770547]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770548]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770549]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770550]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770551]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770552]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770553]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770554]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770555]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990027]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770556]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770557]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770558]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770559]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770560]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770561]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990028]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770562]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770563]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770564]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770565]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770566]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770567]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770568]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770569]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770570]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770571]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990029]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770572]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990030]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990031]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770573]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770574]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770575]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770576]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770577]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770578]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770579]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770580]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770581]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990032]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770582]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770583]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770584]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770585]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770586]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990033]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770587]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770588]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770589]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770590]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770591]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770592]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770593]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990034]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770594]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990035]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770595]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770596]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770597]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770598]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770599]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770600]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770601]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770602]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770603]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990036]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990037]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770604]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770605]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770606]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770607]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990038]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990039]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770608]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770609]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990040]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770610]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990041]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770611]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770612]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770613]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770614]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770615]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770616]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770617]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770618]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990042]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770619]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990043]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770620]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770621]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770622]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770623]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770624]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770625]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770626]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770627]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770628]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770629]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770630]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990044]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770631]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990045]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770632]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770633]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770634]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770635]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770636]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770637]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770638]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770639]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770640]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770641]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990046]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770642]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770643]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770644]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770645]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770646]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990047]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770647]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770648]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990048]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770649]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770650]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770651]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990049]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770652]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770653]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990050]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770654]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770655]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770656]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770657]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770658]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770659]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990051]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770660]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770661]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770662]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770663]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770664]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770665]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770666]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770667]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770668]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770669]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770670]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990052]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770671]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770672]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990053]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770673]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770674]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770675]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770676]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770677]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990054]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770678]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770679]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770680]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770681]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770682]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770683]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770684]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770685]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770686]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990055]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770687]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990056]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770688]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770689]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770690]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990057]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770691]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770692]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990058]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770693]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770694]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770695]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770696]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990059]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770697]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770698]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770699]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990060]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770700]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770701]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770702]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770703]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770704]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770705]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770706]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770707]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770708]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770709]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770710]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770711]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770712]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770713]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770714]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990061]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770715]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770716]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990062]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990063]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990064]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770717]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990065]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770718]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770719]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770720]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770721]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770722]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990066]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770723]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770724]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770725]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770726]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770727]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770728]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770729]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770730]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770731]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990067]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770732]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770733]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770734]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770735]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770736]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770737]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770738]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770739]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990068]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770740]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770741]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990069]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770742]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770743]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770744]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770745]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990070]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770746]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990071]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990072]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990073]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770747]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990074]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770748]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770749]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770750]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770751]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770752]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770753]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770754]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770755]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770756]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990075]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770757]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770758]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770759]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770760]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770761]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990076]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990077]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770762]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770763]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770764]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990078]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770765]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770766]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770767]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770768]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770769]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990079]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770770]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990080]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770771]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990081]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770772]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770773]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770774]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770775]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770776]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770777]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770778]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770779]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990082]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770780]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770781]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770782]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770783]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770784]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770785]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770786]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770787]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770788]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990083]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770789]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770790]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770791]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990084]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770792]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990085]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990086]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990087]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770793]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990088]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770794]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770795]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770796]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770797]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770798]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990089]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770799]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770800]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770801]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770802]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770803]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770804]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770805]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770806]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770807]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770808]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770809]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770810]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770811]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770812]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770813]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770814]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990090]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770815]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770816]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770817]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770818]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770819]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990091]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770820]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770821]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990092]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990093]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770822]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990094]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770823]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990095]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770824]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770825]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770826]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990096]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770827]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770828]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770829]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990097]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990098]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990099]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770830]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770831]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770832]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990100]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770833]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770834]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990101]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770835]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770836]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770837]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770838]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770839]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770840]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770841]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770842]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770843]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770844]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770845]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770846]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770847]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770848]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770849]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770850]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770851]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990102]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770852]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770853]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770854]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770855]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770856]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770857]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770858]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770859]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770860]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770861]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990103]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770862]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770863]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990104]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770864]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770865]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770866]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770867]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770868]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990105]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770869]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770870]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770871]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770872]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770873]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770874]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770875]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770876]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770877]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770878]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770879]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770880]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770881]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990106]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770882]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990107]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770883]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770884]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770885]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770886]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770887]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770888]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990108]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770889]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770890]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770891]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770892]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770893]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770894]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990109]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770895]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770896]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770897]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770898]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990110]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990111]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770899]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770900]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990112]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770901]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990113]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770902]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990114]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770903]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770904]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770905]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990115]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990116]]":{"ocel:type":"offers","ocel:ovmap":{}},"Application[770906]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770907]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770908]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770909]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770910]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770911]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770912]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770913]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770914]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770915]":{"ocel:type":"applications","ocel:ovmap":{}},"Application[770916]":{"ocel:type":"applications","ocel:ovmap":{}},"Offer[[990117]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990118]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990119]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990120]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990121]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990122]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990123]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990124]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990125]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990126]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990127]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990128]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990129]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990130]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990131]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990132]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990133]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990134]]":{"ocel:type":"offers","ocel:ovmap":{}},"Offer[[990135]]":{"ocel:type":"offers","ocel:ovmap":{}}},"ocel:events":{"2":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-20T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770001]"]},"3":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-20T13:38:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770002]"]},"4":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-20T15:00:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770003]"]},"5":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-20T15:45:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770004]"]},"6":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-20T17:14:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770005]"]},"7":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-20T18:57:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770006]"]},"8":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-20T21:24:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770007]"]},"10":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T05:11:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770008]"]},"11":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T07:20:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770009]"]},"12":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T08:26:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770010]"]},"13":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T09:36:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770011]"]},"14":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T10:57:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770012]"]},"15":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T12:38:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770013]"]},"17":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-21T12:55:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770009]"]},"18":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-21T13:07:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770010]"]},"19":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-21T13:21:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770010]"]},"20":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T14:01:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770014]"]},"21":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T14:45:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770015]"]},"22":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-21T15:49:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770008]"]},"23":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T16:15:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770016]"]},"24":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T16:59:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770017]"]},"25":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T19:28:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770018]"]},"26":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-21T21:24:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770019]"]},"28":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T05:12:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770020]"]},"29":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-22T06:54:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770003]"]},"30":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T07:22:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770021]"]},"31":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-22T08:14:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770008]"]},"32":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T08:28:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770022]"]},"33":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-22T08:36:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770020]"]},"34":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-22T09:33:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770014]"]},"35":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T09:41:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770023]"]},"36":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-22T10:06:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770009]"]},"37":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T11:07:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770024]"]},"38":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-22T11:31:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770012]"]},"39":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T11:52:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770025]"]},"41":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T13:28:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770026]"]},"42":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-22T13:41:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770005]"]},"43":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-22T14:12:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770015]"]},"44":{"ocel:activity":"check references","ocel:timestamp":"2019-05-22T14:14:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770009]"]},"45":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-22T14:22:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770003]"]},"46":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T14:41:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770027]"]},"47":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-22T15:01:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770012]"]},"48":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-22T15:17:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770016]"]},"49":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-22T15:18:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770020]"]},"50":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-22T15:22:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770022]"]},"51":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-22T15:44:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770027]"]},"52":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T16:07:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770028]"]},"53":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T16:52:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770029]"]},"54":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T19:05:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770030]"]},"55":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-22T20:38:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770031]"]},"56":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T03:15:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770032]"]},"58":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-23T07:08:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770016]"]},"59":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T07:10:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770033]"]},"60":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T07:55:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770034]"]},"61":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-23T08:20:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770015]"]},"62":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-23T08:39:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770008]"]},"63":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-23T09:24:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770017]"]},"64":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T09:34:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770035]"]},"65":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-23T09:37:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770029]"]},"66":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-23T10:25:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770013]"]},"67":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T10:54:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770036]"]},"68":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-23T12:10:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770022]"]},"69":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T12:32:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770037]"]},"70":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-23T12:37:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770014]"]},"71":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-23T12:48:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770023]"]},"72":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-23T13:09:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770025]"]},"73":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-23T13:11:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770020]"]},"74":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-23T13:21:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770003]"]},"75":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-23T13:42:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770005]"]},"76":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T13:49:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770038]"]},"78":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-23T14:51:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770017]"]},"79":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T15:23:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770039]"]},"80":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T16:32:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770040]"]},"81":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T18:04:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770041]"]},"82":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T19:38:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770042]"]},"83":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-23T22:12:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770043]"]},"84":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T05:49:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770044]"]},"86":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T08:02:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770045]"]},"87":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-24T08:20:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770042]"]},"88":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T08:46:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770046]"]},"89":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-24T08:47:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770027]"]},"90":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-24T09:15:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770016]"]},"91":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-24T09:18:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770041]"]},"92":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-24T10:09:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770007]"]},"93":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T10:17:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770047]"]},"94":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-24T11:07:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770040]"]},"95":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T11:20:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770048]"]},"96":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-24T11:35:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770012]"]},"97":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T12:24:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770049]"]},"98":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-24T12:58:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770029]"]},"99":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-24T13:25:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770013]"]},"100":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T13:34:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770050]"]},"101":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-24T13:52:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770023]"]},"103":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-24T14:23:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770014]"]},"104":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T14:52:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770051]"]},"105":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-24T15:00:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770025]"]},"106":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T16:29:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770052]"]},"107":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-24T16:40:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770040]"]},"108":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-24T17:03:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770029]"]},"109":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T17:56:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770053]"]},"110":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-24T20:20:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770054]"]},"111":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-25T09:09:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770055]"]},"112":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-25T16:42:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770056]"]},"113":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-26T11:23:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770057]"]},"115":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-26T20:56:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770058]"]},"116":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T06:12:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770059]"]},"117":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-27T07:30:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770038]"]},"118":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T07:32:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770060]"]},"119":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-27T07:50:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770042]"]},"120":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-27T08:20:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770058]"]},"121":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-27T08:21:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770041]"]},"122":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-27T08:28:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770058]"]},"123":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-27T08:28:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770028]"]},"124":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T08:49:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770061]"]},"125":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-27T09:24:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770012]"]},"126":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-27T09:56:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770006]"]},"127":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T10:23:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770062]"]},"128":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T11:31:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770063]"]},"130":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-27T12:01:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770049]"]},"131":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T12:46:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770064]"]},"132":{"ocel:activity":"check references","ocel:timestamp":"2019-05-27T13:10:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770027]"]},"133":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-27T13:43:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770007]"]},"134":{"ocel:activity":"check references","ocel:timestamp":"2019-05-27T14:08:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770040]"]},"135":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T14:18:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770065]"]},"136":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-27T14:43:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770037]"]},"137":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-27T15:05:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770061]"]},"138":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T15:20:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770066]"]},"139":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-27T16:05:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770038]"]},"140":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T16:24:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770067]"]},"141":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T17:43:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770068]"]},"142":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T19:55:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770069]"]},"144":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-27T23:57:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770070]"]},"145":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T07:14:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770071]"]},"146":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T07:42:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770054]"]},"147":{"ocel:activity":"check references","ocel:timestamp":"2019-05-28T07:54:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770003]"]},"148":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T07:58:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770072]"]},"149":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T08:13:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770070]"]},"150":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T08:22:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770045]"]},"151":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T08:33:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770047]"]},"152":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-28T08:36:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770061]"]},"153":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T09:41:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770073]"]},"154":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T09:51:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770036]"]},"155":{"ocel:activity":"check references","ocel:timestamp":"2019-05-28T10:29:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770023]"]},"156":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-28T10:38:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770017]"]},"157":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T11:06:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770074]"]},"158":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-28T11:11:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770036]"]},"159":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-28T11:24:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770028]"]},"160":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T11:51:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770075]"]},"161":{"ocel:activity":"check references","ocel:timestamp":"2019-05-28T12:07:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770058]"]},"163":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-28T12:26:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770047]"]},"164":{"ocel:activity":"check references","ocel:timestamp":"2019-05-28T13:20:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770041]"]},"165":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T13:21:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770024]"]},"166":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-28T13:22:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770049]"]},"167":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T13:26:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770076]"]},"168":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T13:45:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770060]"]},"169":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-28T13:50:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770045]"]},"170":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T14:00:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770068]"]},"171":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T14:13:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770073]"]},"172":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T14:37:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770077]"]},"173":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-28T14:38:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770006]"]},"174":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T15:44:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770046]"]},"175":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T15:58:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770078]"]},"176":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-28T16:02:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770054]"]},"177":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-28T16:24:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770077]"]},"178":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-28T16:33:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770024]"]},"179":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T17:41:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770079]"]},"180":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T19:52:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770080]"]},"182":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-28T23:35:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770081]"]},"183":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-29T06:46:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770037]"]},"184":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-29T06:47:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770068]"]},"185":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T06:47:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770082]"]},"186":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-29T07:19:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770052]"]},"187":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-29T07:34:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770039]"]},"188":{"ocel:activity":"check references","ocel:timestamp":"2019-05-29T08:02:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770010]"]},"189":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-29T08:09:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770028]"]},"190":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-29T08:24:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770073]"]},"191":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-29T08:25:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770031]"]},"192":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T08:26:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770083]"]},"193":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-29T08:44:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770046]"]},"194":{"ocel:activity":"check references","ocel:timestamp":"2019-05-29T08:56:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770049]"]},"195":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-29T09:34:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770070]"]},"196":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-29T09:34:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770037]"]},"197":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T09:36:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770084]"]},"198":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-29T10:13:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770039]"]},"199":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T10:57:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770085]"]},"200":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-29T11:47:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770052]"]},"201":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T12:38:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770086]"]},"202":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-29T12:43:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770084]"]},"203":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-29T12:43:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770079]"]},"204":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-29T12:49:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770063]"]},"206":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-29T13:07:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770077]"]},"207":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T14:02:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770087]"]},"208":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T14:46:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770088]"]},"209":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-29T14:50:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770007]"]},"210":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-29T15:14:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770060]"]},"211":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-29T15:29:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770019]"]},"212":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-29T15:32:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770021]"]},"213":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T16:17:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770089]"]},"214":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T17:19:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770090]"]},"215":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-29T17:55:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770084]"]},"216":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T19:08:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770091]"]},"217":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-29T19:21:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770004]"]},"218":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-29T20:45:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770092]"]},"220":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T03:54:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770093]"]},"221":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T07:56:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770094]"]},"222":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-30T08:06:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770054]"]},"223":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T08:08:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770050]"]},"224":{"ocel:activity":"check references","ocel:timestamp":"2019-05-30T08:19:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770005]"]},"225":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T08:40:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770069]"]},"226":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T09:37:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770095]"]},"227":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T09:39:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770002]"]},"228":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T09:49:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770061]"]},"229":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-30T10:16:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770015]"]},"230":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T10:21:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770031]"]},"231":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T10:22:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770034]"]},"232":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T10:58:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770096]"]},"233":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T11:31:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770081]"]},"234":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T11:31:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770088]"]},"235":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T11:33:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770084]"]},"236":{"ocel:activity":"check references","ocel:timestamp":"2019-05-30T11:58:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770068]"]},"237":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-30T12:11:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770002]"]},"238":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T12:31:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770076]"]},"239":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T12:41:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770097]"]},"240":{"ocel:activity":"check references","ocel:timestamp":"2019-05-30T12:53:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770025]"]},"241":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T13:09:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770080]"]},"243":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T13:47:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770079]"]},"244":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T13:47:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770030]"]},"245":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T13:53:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770002]"]},"246":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T14:06:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770098]"]},"247":{"ocel:activity":"check references","ocel:timestamp":"2019-05-30T14:07:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770022]"]},"248":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-30T14:45:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770080]"]},"249":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T14:51:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770099]"]},"250":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-30T14:56:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770084]"]},"251":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T15:01:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770051]"]},"252":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T15:03:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770042]"]},"253":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-30T15:06:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770056]"]},"254":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T15:21:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770063]"]},"255":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T15:26:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770021]"]},"256":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T15:39:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770034]"]},"257":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-30T16:00:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770019]"]},"258":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T16:26:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770100]"]},"259":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-30T16:57:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770004]"]},"260":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T17:23:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770088]"]},"261":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-30T17:23:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770050]"]},"262":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-30T17:35:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770069]"]},"263":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T17:48:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770101]"]},"264":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-30T18:05:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770079]"]},"265":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T20:05:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770102]"]},"266":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-30T23:58:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770103]"]},"268":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-31T07:14:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770104]"]},"269":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-31T07:38:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770087]"]},"270":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-31T07:59:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770105]"]},"271":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-31T09:21:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770101]"]},"272":{"ocel:activity":"send rejection","ocel:timestamp":"2019-05-31T09:37:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770031]"]},"273":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-31T09:42:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770098]"]},"274":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-31T09:42:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770106]"]},"275":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-31T09:48:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770019]"]},"276":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-31T09:50:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770089]"]},"277":{"ocel:activity":"check references","ocel:timestamp":"2019-05-31T10:22:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770013]"]},"278":{"ocel:activity":"check references","ocel:timestamp":"2019-05-31T10:23:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770042]"]},"279":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-31T10:24:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770100]"]},"280":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-31T10:31:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770081]"]},"281":{"ocel:activity":"check references","ocel:timestamp":"2019-05-31T11:03:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770036]"]},"282":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-31T11:10:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770107]"]},"283":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-31T11:54:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770108]"]},"284":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-31T12:01:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770077]"]},"285":{"ocel:activity":"check references","ocel:timestamp":"2019-05-31T12:39:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770028]"]},"286":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-31T13:03:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770105]"]},"287":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-31T13:25:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770056]"]},"288":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-31T13:33:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770109]"]},"289":{"ocel:activity":"check references","ocel:timestamp":"2019-05-31T13:49:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770038]"]},"290":{"ocel:activity":"check references","ocel:timestamp":"2019-05-31T14:10:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770052]"]},"291":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-31T14:13:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770107]"]},"292":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-31T14:14:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770087]"]},"294":{"ocel:activity":"check references","ocel:timestamp":"2019-05-31T14:26:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770047]"]},"295":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-31T14:50:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770110]"]},"296":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-31T14:50:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770076]"]},"297":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-05-31T14:57:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770018]"]},"298":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-31T15:33:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770030]"]},"299":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-31T15:38:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770004]"]},"300":{"ocel:activity":"first screening","ocel:timestamp":"2019-05-31T15:38:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770089]"]},"301":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-31T16:25:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770111]"]},"302":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-31T17:45:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770112]"]},"303":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-05-31T18:04:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770051]"]},"304":{"ocel:activity":"submit application","ocel:timestamp":"2019-05-31T20:00:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770113]"]},"305":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-01T07:07:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770114]"]},"306":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-01T14:38:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770115]"]},"307":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-02T09:15:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770116]"]},"309":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-02T16:54:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770117]"]},"310":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T04:05:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770118]"]},"311":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-03T07:02:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770098]"]},"312":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T07:08:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770119]"]},"313":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-03T07:18:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770107]"]},"314":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T07:52:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770120]"]},"315":{"ocel:activity":"check references","ocel:timestamp":"2019-06-03T08:11:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770046]"]},"316":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-03T08:13:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770024]"]},"317":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-03T08:34:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770081]"]},"318":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-03T08:48:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770101]"]},"319":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-03T09:17:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770075]"]},"320":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T09:29:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770121]"]},"321":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-03T09:30:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770018]"]},"322":{"ocel:activity":"check references","ocel:timestamp":"2019-06-03T10:29:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770087]"]},"323":{"ocel:activity":"check references","ocel:timestamp":"2019-06-03T10:38:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770077]"]},"324":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T10:42:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770122]"]},"325":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-03T10:54:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770119]"]},"326":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-03T11:19:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770021]"]},"327":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-03T11:46:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770100]"]},"328":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T12:10:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770123]"]},"330":{"ocel:activity":"check references","ocel:timestamp":"2019-06-03T12:27:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770069]"]},"331":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T12:54:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770124]"]},"332":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-03T12:55:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770007]"]},"333":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-03T13:02:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770105]"]},"334":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-03T13:23:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770115]"]},"335":{"ocel:activity":"check references","ocel:timestamp":"2019-06-03T13:28:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770019]"]},"336":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-03T14:01:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770033]"]},"337":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-03T14:23:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770051]"]},"338":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-03T14:28:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770057]"]},"339":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T14:33:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770125]"]},"340":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-03T15:02:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770121]"]},"341":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-03T15:11:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770050]"]},"342":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-03T15:31:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770095]"]},"343":{"ocel:activity":"check references","ocel:timestamp":"2019-06-03T15:44:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770006]"]},"344":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T15:51:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770126]"]},"345":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-03T16:18:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770078]"]},"346":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-03T16:54:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770085]"]},"347":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T17:27:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770127]"]},"348":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T19:23:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770128]"]},"350":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-03T21:15:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770129]"]},"351":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T04:53:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770130]"]},"352":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T07:20:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770115]"]},"353":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T07:27:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770078]"]},"354":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T08:01:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770131]"]},"355":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T08:02:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770124]"]},"356":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T08:07:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770075]"]},"357":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T08:33:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770111]"]},"358":{"ocel:activity":"check references","ocel:timestamp":"2019-06-04T08:34:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770076]"]},"359":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-04T08:40:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770039]"]},"360":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T08:45:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770132]"]},"361":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T08:50:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770044]"]},"362":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T09:00:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770062]"]},"363":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-04T09:45:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770075]"]},"364":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T09:45:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770018]"]},"365":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-04T09:46:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770085]"]},"366":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T10:16:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770133]"]},"367":{"ocel:activity":"check references","ocel:timestamp":"2019-06-04T11:03:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770017]"]},"368":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T11:16:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770134]"]},"369":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T11:35:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770127]"]},"370":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-04T11:48:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770105]"]},"371":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T11:49:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770057]"]},"372":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T11:59:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770102]"]},"373":{"ocel:activity":"check references","ocel:timestamp":"2019-06-04T12:03:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770081]"]},"374":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T12:17:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770135]"]},"375":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T12:45:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770125]"]},"377":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T13:11:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770119]"]},"378":{"ocel:activity":"check references","ocel:timestamp":"2019-06-04T13:16:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770088]"]},"379":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T13:19:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770136]"]},"380":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T13:47:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770121]"]},"381":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-04T13:47:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770111]"]},"382":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T13:52:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770096]"]},"383":{"ocel:activity":"check references","ocel:timestamp":"2019-06-04T13:56:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770045]"]},"384":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T13:58:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770086]"]},"385":{"ocel:activity":"check references","ocel:timestamp":"2019-06-04T14:05:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770061]"]},"386":{"ocel:activity":"check references","ocel:timestamp":"2019-06-04T14:21:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770037]"]},"387":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T14:22:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770137]"]},"388":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T14:31:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770043]"]},"389":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T14:36:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770095]"]},"390":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T14:43:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770122]"]},"391":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-04T14:50:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770097]"]},"392":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-04T15:15:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770125]"]},"393":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T15:30:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770138]"]},"394":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T15:52:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770102]"]},"395":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-04T16:17:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770033]"]},"396":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T16:38:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770033]"]},"397":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T16:44:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770139]"]},"398":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-04T16:54:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770043]"]},"399":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-04T17:09:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770080]"]},"400":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T18:41:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770140]"]},"401":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-04T20:51:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770141]"]},"403":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T04:34:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770142]"]},"404":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T07:12:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770130]"]},"405":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T07:40:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770143]"]},"406":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T07:42:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770044]"]},"407":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T07:52:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770111]"]},"408":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T08:02:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770065]"]},"409":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T08:13:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770030]"]},"410":{"ocel:activity":"check references","ocel:timestamp":"2019-06-05T08:39:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770089]"]},"411":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T08:56:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770064]"]},"412":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T09:05:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770144]"]},"413":{"ocel:activity":"check references","ocel:timestamp":"2019-06-05T09:15:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770002]"]},"414":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T09:27:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770098]"]},"415":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-05T09:28:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770121]"]},"416":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T09:30:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770085]"]},"417":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T09:31:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770128]"]},"418":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T09:39:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770011]"]},"419":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T09:41:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770062]"]},"420":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T09:49:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770145]"]},"421":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T10:10:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770132]"]},"422":{"ocel:activity":"check references","ocel:timestamp":"2019-06-05T10:13:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770070]"]},"423":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T10:25:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770097]"]},"424":{"ocel:activity":"check references","ocel:timestamp":"2019-06-05T10:28:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770078]"]},"425":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T10:28:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770124]"]},"426":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T11:23:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770146]"]},"427":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T11:25:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770026]"]},"428":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T11:50:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770091]"]},"429":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T12:06:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770043]"]},"430":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T12:23:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770127]"]},"431":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T12:30:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770147]"]},"432":{"ocel:activity":"check references","ocel:timestamp":"2019-06-05T12:56:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770115]"]},"433":{"ocel:activity":"check references","ocel:timestamp":"2019-06-05T13:04:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770107]"]},"434":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T13:05:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770126]"]},"436":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T13:10:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770126]"]},"437":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T13:25:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770132]"]},"438":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T13:36:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770140]"]},"439":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T13:41:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770093]"]},"440":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T13:45:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770148]"]},"441":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T13:46:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770103]"]},"442":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-05T13:56:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770146]"]},"443":{"ocel:activity":"check references","ocel:timestamp":"2019-06-05T14:24:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770018]"]},"444":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T14:55:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770096]"]},"445":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T15:15:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770149]"]},"446":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-05T15:25:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770091]"]},"447":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-05T15:26:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770086]"]},"448":{"ocel:activity":"check references","ocel:timestamp":"2019-06-05T15:30:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770095]"]},"449":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-05T15:44:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770130]"]},"450":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T15:59:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770150]"]},"451":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T17:43:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770151]"]},"452":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-05T19:39:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770122]"]},"453":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T19:55:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770152]"]},"454":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-05T23:53:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770153]"]},"456":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-06T06:49:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770065]"]},"457":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T07:08:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770154]"]},"458":{"ocel:activity":"check references","ocel:timestamp":"2019-06-06T07:41:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770004]"]},"459":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T07:53:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770155]"]},"460":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-06T08:02:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770103]"]},"461":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-06T08:05:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770109]"]},"462":{"ocel:activity":"check references","ocel:timestamp":"2019-06-06T08:29:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770043]"]},"463":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-06T08:42:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770128]"]},"464":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-06T08:49:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770146]"]},"465":{"ocel:activity":"check references","ocel:timestamp":"2019-06-06T08:55:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770062]"]},"466":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-06T09:06:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770133]"]},"467":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-06T09:11:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770011]"]},"468":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T09:30:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770156]"]},"469":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-06T09:45:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770090]"]},"470":{"ocel:activity":"check references","ocel:timestamp":"2019-06-06T10:01:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770063]"]},"471":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-06T10:06:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770026]"]},"472":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-06T10:08:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770109]"]},"473":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-06T10:14:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770134]"]},"474":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-06T10:40:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770064]"]},"475":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T10:45:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770157]"]},"476":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T12:15:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770158]"]},"477":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-06T12:16:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770144]"]},"478":{"ocel:activity":"check references","ocel:timestamp":"2019-06-06T12:18:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770033]"]},"479":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-06T12:38:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770103]"]},"480":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-06T12:49:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770154]"]},"481":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T12:59:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770159]"]},"483":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-06T13:30:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770134]"]},"484":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-06T13:38:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770157]"]},"485":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-06T13:39:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770117]"]},"486":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-06T14:01:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770140]"]},"487":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-06T14:07:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770093]"]},"488":{"ocel:activity":"check references","ocel:timestamp":"2019-06-06T14:24:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770030]"]},"489":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T14:43:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770160]"]},"490":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-06T14:45:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770147]"]},"491":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-06T14:59:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770147]"]},"492":{"ocel:activity":"check references","ocel:timestamp":"2019-06-06T15:20:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770056]"]},"493":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-06T15:23:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770067]"]},"494":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-06T15:52:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770067]"]},"495":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T16:12:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770161]"]},"496":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T16:56:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770162]"]},"497":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-06T17:32:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770157]"]},"498":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-06T19:16:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770128]"]},"499":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T19:18:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770163]"]},"500":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-06T19:59:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770067]"]},"501":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-06T21:05:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770164]"]},"502":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T04:34:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770165]"]},"503":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-07T06:28:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770073]"]},"505":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-07T07:13:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770125]"]},"506":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-07T07:38:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770133]"]},"507":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T07:40:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770166]"]},"508":{"ocel:activity":"check references","ocel:timestamp":"2019-06-07T08:29:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770060]"]},"509":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-07T08:30:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770093]"]},"510":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-07T08:48:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770090]"]},"511":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T09:05:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770167]"]},"512":{"ocel:activity":"check references","ocel:timestamp":"2019-06-07T09:18:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770132]"]},"513":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-07T09:35:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770122]"]},"514":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T09:49:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770168]"]},"515":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-07T10:30:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770106]"]},"516":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-07T10:54:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770074]"]},"517":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T11:23:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770169]"]},"518":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-07T11:36:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770053]"]},"519":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-07T12:22:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770144]"]},"520":{"ocel:activity":"check references","ocel:timestamp":"2019-06-07T12:26:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770111]"]},"521":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T12:32:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770170]"]},"522":{"ocel:activity":"check references","ocel:timestamp":"2019-06-07T12:38:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770086]"]},"523":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-07T13:01:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770139]"]},"524":{"ocel:activity":"check references","ocel:timestamp":"2019-06-07T13:09:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770097]"]},"525":{"ocel:activity":"check references","ocel:timestamp":"2019-06-07T13:29:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770057]"]},"526":{"ocel:activity":"check references","ocel:timestamp":"2019-06-07T13:41:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770109]"]},"527":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T13:48:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770171]"]},"529":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-07T14:57:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770074]"]},"530":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-07T15:00:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770152]"]},"531":{"ocel:activity":"check references","ocel:timestamp":"2019-06-07T15:03:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770124]"]},"532":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-07T15:08:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770154]"]},"533":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-07T15:20:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770117]"]},"534":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T15:22:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770172]"]},"535":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-07T16:17:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770118]"]},"536":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T16:28:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770173]"]},"537":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-07T16:34:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770160]"]},"538":{"ocel:activity":"check references","ocel:timestamp":"2019-06-07T17:11:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770085]"]},"539":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T17:54:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770174]"]},"540":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-07T20:18:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770175]"]},"541":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-08T08:54:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770176]"]},"542":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-08T17:11:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770177]"]},"544":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-09T11:17:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770178]"]},"545":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-09T20:37:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770179]"]},"546":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T05:43:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770180]"]},"547":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T06:11:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770011]"]},"548":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T06:47:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770059]"]},"549":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T06:53:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770160]"]},"550":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T06:56:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770134]"]},"551":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-10T07:36:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770053]"]},"552":{"ocel:activity":"check references","ocel:timestamp":"2019-06-10T07:39:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770127]"]},"553":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T07:56:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770181]"]},"554":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T08:01:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770106]"]},"555":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T08:15:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770159]"]},"556":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-10T08:18:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770152]"]},"557":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T08:46:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770170]"]},"558":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T09:02:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770181]"]},"559":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T09:36:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770182]"]},"560":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T09:44:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770143]"]},"561":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T10:33:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770168]"]},"562":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T10:36:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770173]"]},"563":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T10:56:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770161]"]},"564":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T10:58:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770183]"]},"565":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-10T11:18:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770119]"]},"566":{"ocel:activity":"check references","ocel:timestamp":"2019-06-10T11:32:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770098]"]},"568":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T12:40:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770184]"]},"569":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-10T12:52:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770143]"]},"570":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T13:08:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770155]"]},"571":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T13:26:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770141]"]},"572":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-10T13:47:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770139]"]},"573":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T13:47:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770074]"]},"574":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T14:00:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770182]"]},"575":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T14:05:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770185]"]},"576":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T14:08:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770159]"]},"577":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-10T14:12:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770059]"]},"578":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T14:50:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770186]"]},"579":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-10T15:00:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770118]"]},"580":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T15:00:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770181]"]},"581":{"ocel:activity":"check references","ocel:timestamp":"2019-06-10T15:09:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770133]"]},"582":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-10T15:11:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770102]"]},"583":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T15:40:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770026]"]},"584":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T15:45:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770161]"]},"585":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T16:02:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770155]"]},"586":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T16:24:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770187]"]},"587":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T16:26:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770066]"]},"588":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-10T17:18:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770153]"]},"589":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T17:43:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770188]"]},"590":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T19:54:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770189]"]},"592":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-10T20:27:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770173]"]},"593":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-10T23:52:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770190]"]},"594":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T06:41:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770138]"]},"595":{"ocel:activity":"check references","ocel:timestamp":"2019-06-11T07:05:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770128]"]},"596":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T07:08:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770191]"]},"597":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-11T07:42:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770101]"]},"598":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T07:52:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770192]"]},"599":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T07:57:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770170]"]},"600":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T08:05:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770168]"]},"601":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-11T08:10:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770138]"]},"602":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T08:44:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770174]"]},"603":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T09:04:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770149]"]},"604":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T09:16:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770144]"]},"605":{"ocel:activity":"check references","ocel:timestamp":"2019-06-11T09:22:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770146]"]},"606":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T09:24:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770123]"]},"607":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T09:25:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770116]"]},"608":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T09:29:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770193]"]},"609":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T09:31:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770114]"]},"610":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T09:33:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770182]"]},"611":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T09:52:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770143]"]},"612":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T09:55:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770177]"]},"613":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T10:05:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770166]"]},"614":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T10:38:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770186]"]},"615":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T10:43:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770194]"]},"616":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T10:49:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770048]"]},"617":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T11:18:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770180]"]},"618":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T11:38:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770163]"]},"619":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T11:39:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770186]"]},"621":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-11T11:56:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770100]"]},"622":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-11T12:04:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770149]"]},"623":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T12:10:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770195]"]},"624":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-11T12:19:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770066]"]},"625":{"ocel:activity":"check references","ocel:timestamp":"2019-06-11T12:42:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770125]"]},"626":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T12:48:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770166]"]},"627":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T12:55:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770196]"]},"628":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T13:12:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770183]"]},"629":{"ocel:activity":"check references","ocel:timestamp":"2019-06-11T13:13:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770090]"]},"630":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T13:18:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770145]"]},"631":{"ocel:activity":"check references","ocel:timestamp":"2019-06-11T14:10:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770160]"]},"632":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T14:27:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770169]"]},"633":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T14:34:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770197]"]},"634":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T14:54:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770153]"]},"635":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T15:06:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770082]"]},"636":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T15:08:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770141]"]},"637":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T15:18:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770174]"]},"638":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T15:34:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770099]"]},"639":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T15:36:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770092]"]},"640":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T15:53:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770198]"]},"641":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-11T15:58:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770180]"]},"642":{"ocel:activity":"check references","ocel:timestamp":"2019-06-11T15:59:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770011]"]},"643":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T16:01:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770163]"]},"644":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-11T16:13:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770123]"]},"645":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-11T16:40:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770114]"]},"646":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-11T17:14:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770092]"]},"647":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-11T17:15:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770188]"]},"648":{"ocel:activity":"check references","ocel:timestamp":"2019-06-11T17:17:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770157]"]},"649":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T17:31:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770199]"]},"650":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T19:31:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770200]"]},"652":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-11T21:34:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770201]"]},"653":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T05:32:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770202]"]},"654":{"ocel:activity":"check references","ocel:timestamp":"2019-06-12T06:47:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770050]"]},"655":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-12T07:08:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770189]"]},"656":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-12T07:22:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770082]"]},"657":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-12T07:28:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770145]"]},"658":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T07:43:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770203]"]},"659":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-12T07:54:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770185]"]},"660":{"ocel:activity":"check references","ocel:timestamp":"2019-06-12T08:04:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770155]"]},"661":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-12T08:19:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770177]"]},"662":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-12T09:03:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770192]"]},"663":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-12T09:10:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770147]"]},"664":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T09:11:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770204]"]},"665":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-12T09:27:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770192]"]},"666":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-12T09:41:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770145]"]},"667":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-12T09:47:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770116]"]},"668":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T09:55:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770205]"]},"669":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-12T10:06:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770183]"]},"670":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-12T10:20:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770153]"]},"671":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-12T10:57:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770192]"]},"672":{"ocel:activity":"check references","ocel:timestamp":"2019-06-12T11:23:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770034]"]},"673":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T11:35:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770206]"]},"674":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-12T11:44:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770164]"]},"675":{"ocel:activity":"check references","ocel:timestamp":"2019-06-12T12:15:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770044]"]},"676":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-12T12:23:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770083]"]},"677":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-12T12:34:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770099]"]},"679":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T12:56:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770207]"]},"680":{"ocel:activity":"check references","ocel:timestamp":"2019-06-12T13:27:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770067]"]},"681":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-12T13:42:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770048]"]},"682":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-12T13:52:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770193]"]},"683":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-12T14:11:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770171]"]},"684":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-12T14:30:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770199]"]},"685":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T14:36:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770208]"]},"686":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-12T15:19:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770169]"]},"687":{"ocel:activity":"check references","ocel:timestamp":"2019-06-12T15:24:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770051]"]},"688":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T15:57:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770209]"]},"689":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-12T17:01:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770189]"]},"690":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T17:39:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770210]"]},"691":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T19:47:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770211]"]},"692":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-12T20:12:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770066]"]},"693":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-12T20:17:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770193]"]},"694":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-12T23:07:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770212]"]},"696":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T06:13:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770213]"]},"697":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-13T06:41:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770178]"]},"698":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-13T06:54:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770203]"]},"699":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-13T07:06:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770096]"]},"700":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-13T07:24:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770201]"]},"701":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T07:34:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770214]"]},"702":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-13T08:00:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770179]"]},"703":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-13T08:01:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770203]"]},"704":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-13T08:06:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770138]"]},"705":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T08:07:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770168]"]},"706":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T08:14:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770170]"]},"707":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-13T08:27:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770188]"]},"708":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T08:36:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770080]"]},"709":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T08:52:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770215]"]},"710":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-13T09:01:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770187]"]},"711":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T09:03:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770181]"]},"712":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-13T09:11:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770110]"]},"713":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-13T09:15:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770164]"]},"714":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-13T09:46:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770208]"]},"715":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-13T09:48:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770171]"]},"716":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-13T10:01:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770116]"]},"717":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-13T10:14:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770185]"]},"718":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T10:29:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770216]"]},"719":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T10:54:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770134]"]},"720":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T11:44:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770217]"]},"721":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-13T12:16:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770185]"]},"722":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-13T12:18:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770032]"]},"723":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-13T12:41:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770180]"]},"724":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T12:56:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770186]"]},"725":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-13T13:02:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770149]"]},"726":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T13:12:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770218]"]},"727":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-13T13:30:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770210]"]},"728":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T13:31:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770164]"]},"730":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T13:36:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770174]"]},"731":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-13T13:37:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770106]"]},"732":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-13T13:54:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770083]"]},"733":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T13:56:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770219]"]},"734":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-13T14:18:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770162]"]},"735":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-13T14:27:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770201]"]},"736":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-13T14:30:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770122]"]},"737":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T14:53:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770192]"]},"738":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-13T14:59:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770178]"]},"739":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T15:38:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770220]"]},"740":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-13T16:03:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770199]"]},"741":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T16:57:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770114]"]},"742":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T17:00:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770221]"]},"743":{"ocel:activity":"check references","ocel:timestamp":"2019-06-13T18:27:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770182]"]},"744":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T18:30:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770222]"]},"745":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-13T20:29:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770223]"]},"746":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T02:21:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770224]"]},"747":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-14T06:01:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770179]"]},"748":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-14T06:21:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770110]"]},"749":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T07:06:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770225]"]},"751":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T07:50:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770226]"]},"752":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T07:51:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770163]"]},"753":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T08:01:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770059]"]},"754":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-14T08:11:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770187]"]},"755":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-14T08:17:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770218]"]},"756":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T08:36:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770149]"]},"757":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T08:44:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770166]"]},"758":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-14T09:03:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770197]"]},"759":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T09:19:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770173]"]},"760":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T09:25:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770227]"]},"761":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T09:29:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770059]"]},"762":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T09:49:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770138]"]},"763":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T10:08:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770091]"]},"764":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T10:30:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770162]"]},"765":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T10:33:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770193]"]},"766":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T10:35:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770228]"]},"767":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T10:41:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770048]"]},"768":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T11:20:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770074]"]},"769":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-14T11:24:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770208]"]},"770":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-14T11:43:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770001]"]},"771":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T11:55:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770229]"]},"772":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T11:56:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770180]"]},"773":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T12:38:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770218]"]},"774":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T12:55:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770178]"]},"775":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-14T12:55:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770227]"]},"776":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-14T13:03:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770137]"]},"777":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T13:15:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770053]"]},"778":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-14T13:30:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770209]"]},"779":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T13:35:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770230]"]},"780":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-14T13:41:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770199]"]},"782":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T14:10:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770117]"]},"783":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-14T14:22:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770082]"]},"784":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T14:32:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770144]"]},"785":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-14T14:52:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770032]"]},"786":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T14:54:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770231]"]},"787":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-14T15:09:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770055]"]},"788":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T15:14:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770188]"]},"789":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T15:21:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770185]"]},"790":{"ocel:activity":"check references","ocel:timestamp":"2019-06-14T16:03:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770093]"]},"791":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T16:06:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770208]"]},"792":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-14T16:25:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770228]"]},"793":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T16:34:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770232]"]},"794":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T18:10:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770233]"]},"795":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T18:37:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770210]"]},"796":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-14T19:42:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770130]"]},"797":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-14T19:49:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770234]"]},"798":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-15T04:20:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770235]"]},"799":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-15T14:03:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770236]"]},"800":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-16T08:06:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770237]"]},"802":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-16T15:35:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770238]"]},"803":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T02:29:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770239]"]},"804":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-17T07:05:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770209]"]},"805":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T07:15:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770240]"]},"806":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-17T07:27:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770187]"]},"807":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T07:41:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770035]"]},"808":{"ocel:activity":"check references","ocel:timestamp":"2019-06-17T07:53:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770145]"]},"809":{"ocel:activity":"check references","ocel:timestamp":"2019-06-17T08:07:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770066]"]},"810":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T08:15:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770241]"]},"811":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T08:41:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770223]"]},"812":{"ocel:activity":"check references","ocel:timestamp":"2019-06-17T08:49:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770117]"]},"813":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T08:57:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770221]"]},"814":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T09:11:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770226]"]},"815":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T09:15:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770242]"]},"816":{"ocel:activity":"check references","ocel:timestamp":"2019-06-17T09:37:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770201]"]},"817":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-17T09:38:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770197]"]},"818":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-17T09:40:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770171]"]},"819":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-17T09:56:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770169]"]},"820":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T10:16:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770243]"]},"821":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-17T10:23:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770137]"]},"822":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-17T10:38:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770226]"]},"823":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T10:47:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770196]"]},"824":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-17T11:16:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770032]"]},"825":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T11:16:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770244]"]},"827":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T12:15:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770104]"]},"828":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T12:18:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770245]"]},"829":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T12:29:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770195]"]},"830":{"ocel:activity":"check references","ocel:timestamp":"2019-06-17T12:45:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770189]"]},"831":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T13:00:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770240]"]},"832":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-17T13:13:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770001]"]},"833":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T13:20:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770246]"]},"834":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-17T13:43:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770227]"]},"835":{"ocel:activity":"check references","ocel:timestamp":"2019-06-17T14:04:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770183]"]},"836":{"ocel:activity":"check references","ocel:timestamp":"2019-06-17T14:06:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770065]"]},"837":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-17T14:18:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770209]"]},"838":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T14:25:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770247]"]},"839":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T14:35:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770172]"]},"840":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T14:37:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770229]"]},"841":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T14:38:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770212]"]},"842":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-17T14:42:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770221]"]},"843":{"ocel:activity":"check references","ocel:timestamp":"2019-06-17T15:12:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770130]"]},"844":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T15:35:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770248]"]},"845":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-17T16:00:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770240]"]},"846":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-17T16:20:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770198]"]},"847":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T16:55:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770249]"]},"848":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-17T18:33:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770001]"]},"849":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T19:16:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770250]"]},"851":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-17T21:01:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770251]"]},"852":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T04:26:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770252]"]},"853":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T06:52:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770118]"]},"854":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T07:05:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770252]"]},"855":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-18T07:17:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770104]"]},"856":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T07:30:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770253]"]},"857":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T07:36:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770250]"]},"858":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-18T07:39:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770055]"]},"859":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T07:40:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770245]"]},"860":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T07:47:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770191]"]},"861":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T07:48:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770237]"]},"862":{"ocel:activity":"check references","ocel:timestamp":"2019-06-18T07:49:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770187]"]},"863":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T07:51:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770137]"]},"864":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T07:52:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770232]"]},"865":{"ocel:activity":"check references","ocel:timestamp":"2019-06-18T08:26:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770177]"]},"866":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T08:43:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770064]"]},"867":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T08:46:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770254]"]},"868":{"ocel:activity":"check references","ocel:timestamp":"2019-06-18T08:52:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770162]"]},"869":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T09:02:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770228]"]},"870":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T09:14:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770139]"]},"871":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T09:22:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770237]"]},"872":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T09:39:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770191]"]},"873":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-18T09:48:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770191]"]},"874":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T09:49:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770172]"]},"875":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-18T09:54:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770035]"]},"876":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T09:56:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770167]"]},"877":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T10:03:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770232]"]},"878":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T10:09:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770195]"]},"879":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T10:16:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770255]"]},"880":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T10:21:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770206]"]},"881":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T10:29:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770223]"]},"882":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T11:06:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770198]"]},"883":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T11:11:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770250]"]},"884":{"ocel:activity":"check references","ocel:timestamp":"2019-06-18T11:16:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770221]"]},"885":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T11:17:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770256]"]},"886":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T12:19:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770257]"]},"887":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T12:33:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770206]"]},"888":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T12:55:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770212]"]},"890":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T13:24:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770258]"]},"891":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-18T13:26:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770196]"]},"892":{"ocel:activity":"check references","ocel:timestamp":"2019-06-18T13:44:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770203]"]},"893":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T13:47:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770249]"]},"894":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T14:02:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770214]"]},"895":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T14:04:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770205]"]},"896":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T14:10:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770123]"]},"897":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T14:21:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770104]"]},"898":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-18T14:29:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770167]"]},"899":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T14:30:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770190]"]},"900":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T14:32:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770259]"]},"901":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T14:44:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770235]"]},"902":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T14:51:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770099]"]},"903":{"ocel:activity":"check references","ocel:timestamp":"2019-06-18T14:55:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770154]"]},"904":{"ocel:activity":"check references","ocel:timestamp":"2019-06-18T15:05:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770091]"]},"905":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T15:07:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770231]"]},"906":{"ocel:activity":"check references","ocel:timestamp":"2019-06-18T15:09:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770161]"]},"907":{"ocel:activity":"check references","ocel:timestamp":"2019-06-18T15:18:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770210]"]},"908":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-18T15:21:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770148]"]},"909":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T15:49:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770260]"]},"910":{"ocel:activity":"check references","ocel:timestamp":"2019-06-18T15:59:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770064]"]},"911":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T17:22:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770261]"]},"912":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T18:11:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770245]"]},"913":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T19:14:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770262]"]},"914":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-18T20:16:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770229]"]},"915":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-18T20:24:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770171]"]},"916":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-18T20:56:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770263]"]},"917":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T05:04:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770264]"]},"919":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T06:39:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770205]"]},"920":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-19T06:53:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770214]"]},"921":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T07:13:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770265]"]},"922":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T07:16:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770263]"]},"923":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T07:23:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770252]"]},"924":{"ocel:activity":"check references","ocel:timestamp":"2019-06-19T07:42:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770126]"]},"925":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T07:57:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770266]"]},"926":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T08:04:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770216]"]},"927":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T08:09:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770241]"]},"928":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T08:21:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770253]"]},"929":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-19T08:23:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770237]"]},"930":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T08:23:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770213]"]},"931":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T08:38:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770217]"]},"932":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-19T08:42:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770216]"]},"933":{"ocel:activity":"check references","ocel:timestamp":"2019-06-19T08:56:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770001]"]},"934":{"ocel:activity":"check references","ocel:timestamp":"2019-06-19T09:01:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770118]"]},"935":{"ocel:activity":"check references","ocel:timestamp":"2019-06-19T09:17:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770227]"]},"936":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-19T09:31:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770148]"]},"937":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T09:39:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770267]"]},"938":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-19T09:48:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770190]"]},"939":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T09:57:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770035]"]},"940":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T10:04:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770142]"]},"941":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T10:21:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770238]"]},"942":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T10:41:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770236]"]},"943":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T11:02:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770268]"]},"944":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-19T11:10:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770048]"]},"945":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T11:25:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770267]"]},"946":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T11:25:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770231]"]},"947":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T11:47:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770269]"]},"948":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-19T11:50:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770231]"]},"949":{"ocel:activity":"check references","ocel:timestamp":"2019-06-19T11:52:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770143]"]},"950":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T12:03:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770235]"]},"951":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T12:14:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770225]"]},"954":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770005]"]},"955":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770017]"]},"956":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770067]"]},"957":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770027]"]},"958":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770080]"]},"959":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770098]"]},"960":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770111]"]},"961":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770146]"]},"962":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770089]"]},"963":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770006]"]},"964":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770013]"]},"965":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770186]"]},"966":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770009]"]},"967":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770240]"]},"968":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770051]"]},"969":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770040]"]},"970":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770037]"]},"971":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770058]"]},"972":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T12:26:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770036]"]},"973":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-19T12:28:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770249]"]},"974":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T12:46:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770204]"]},"975":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-19T12:47:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770027]"]},"976":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T13:05:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770238]"]},"977":{"ocel:activity":"check references","ocel:timestamp":"2019-06-19T13:08:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770228]"]},"979":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T13:18:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770270]"]},"980":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T13:20:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770120]"]},"981":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T13:29:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770266]"]},"982":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T13:30:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770239]"]},"983":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T13:39:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770242]"]},"984":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-19T13:41:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770217]"]},"985":{"ocel:activity":"check references","ocel:timestamp":"2019-06-19T13:59:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770099]"]},"986":{"ocel:activity":"check references","ocel:timestamp":"2019-06-19T14:08:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770053]"]},"987":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-19T14:15:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770080]"]},"988":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T14:21:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770271]"]},"989":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T14:22:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770263]"]},"990":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T14:23:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770253]"]},"991":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-19T14:24:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770120]"]},"992":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T14:55:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770217]"]},"993":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T15:27:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770272]"]},"994":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T15:34:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770136]"]},"995":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-19T16:18:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770067]"]},"996":{"ocel:activity":"check references","ocel:timestamp":"2019-06-19T16:27:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770197]"]},"997":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T16:39:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770273]"]},"998":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T16:39:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770225]"]},"999":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T16:51:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770234]"]},"1000":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-19T16:52:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770269]"]},"1001":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-19T17:02:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770267]"]},"1002":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T17:47:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770195]"]},"1003":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T18:02:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770167]"]},"1004":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-19T18:10:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770234]"]},"1005":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T18:28:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770274]"]},"1006":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-19T19:40:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770013]"]},"1007":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-19T20:03:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770089]"]},"1008":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-19T20:25:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770275]"]},"1010":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770010]"]},"1011":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770011]"]},"1012":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770019]"]},"1013":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770061]"]},"1014":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770003]"]},"1015":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770018]"]},"1016":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770022]"]},"1017":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770060]"]},"1018":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770046]"]},"1019":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770052]"]},"1020":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770047]"]},"1021":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770045]"]},"1022":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-19T22:25:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770070]"]},"1023":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T01:55:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770276]"]},"1025":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-20T06:20:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770142]"]},"1026":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T06:37:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770259]"]},"1027":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-20T06:39:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770140]"]},"1028":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T06:51:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770139]"]},"1029":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T07:12:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770241]"]},"1030":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T07:22:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770172]"]},"1031":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T07:33:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770198]"]},"1032":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T07:34:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770019]"]},"1033":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T07:35:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770277]"]},"1034":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T08:19:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770212]"]},"1035":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-20T08:19:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770136]"]},"1036":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T08:30:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770256]"]},"1037":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T08:36:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770271]"]},"1038":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T08:38:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770235]"]},"1039":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T08:39:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770266]"]},"1040":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-20T08:42:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770213]"]},"1041":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T08:45:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770271]"]},"1042":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T08:50:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770224]"]},"1043":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T08:53:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770159]"]},"1044":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T08:54:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770278]"]},"1045":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T09:04:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770058]"]},"1046":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T09:15:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770270]"]},"1047":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T09:21:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770259]"]},"1048":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-20T09:26:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770205]"]},"1049":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T09:28:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770051]"]},"1050":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T09:32:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770011]"]},"1051":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T09:35:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770098]"]},"1052":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T09:53:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770006]"]},"1053":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T09:56:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770196]"]},"1054":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T09:57:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770238]"]},"1055":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T10:01:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770018]"]},"1056":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T10:19:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770092]"]},"1057":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-20T10:32:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770242]"]},"1058":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T10:33:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770279]"]},"1059":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T10:51:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770094]"]},"1060":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T10:55:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770179]"]},"1061":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T11:04:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770026]"]},"1062":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T11:20:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770239]"]},"1063":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T11:30:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770142]"]},"1064":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T11:47:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770236]"]},"1065":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T11:52:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770280]"]},"1066":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T11:55:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770186]"]},"1067":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-20T12:13:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770250]"]},"1068":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T12:17:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770204]"]},"1069":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T12:33:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770216]"]},"1070":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T12:39:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770249]"]},"1071":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T12:43:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770208]"]},"1072":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T12:43:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770108]"]},"1073":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-20T12:46:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770058]"]},"1075":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-20T12:49:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770025]"]},"1076":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-20T12:49:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770002]"]},"1077":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-20T12:49:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770078]"]},"1078":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-20T12:49:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770107]"]},"1079":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-20T12:49:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770128]"]},"1080":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-20T12:49:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770023]"]},"1081":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T12:50:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770270]"]},"1082":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T13:04:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770052]"]},"1083":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-20T13:22:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770060]"]},"1084":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T13:25:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770276]"]},"1085":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-20T13:25:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770276]"]},"1086":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T13:28:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770281]"]},"1087":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T13:35:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770036]"]},"1089":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T13:55:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770002]"]},"1090":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T13:56:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770035]"]},"1091":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T13:56:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770010]"]},"1092":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T13:59:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770262]"]},"1093":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T14:05:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770025]"]},"1094":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T14:16:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770151]"]},"1095":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T14:20:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770146]"]},"1096":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T14:38:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770252]"]},"1097":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T14:38:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770254]"]},"1098":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T14:41:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770282]"]},"1099":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T14:42:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770240]"]},"1100":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T14:44:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770023]"]},"1101":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T15:12:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770178]"]},"1102":{"ocel:activity":"make job offer","ocel:timestamp":"2019-06-20T15:15:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770058]","Offer[[990001]]"]},"1103":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T15:16:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770070]"]},"1104":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T15:50:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770022]"]},"1105":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T16:06:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770283]"]},"1106":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-20T16:11:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770037]"]},"1107":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T16:21:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770236]"]},"1108":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T16:24:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770263]"]},"1109":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T16:51:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770284]"]},"1110":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-20T16:56:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770254]"]},"1111":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T17:44:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770261]"]},"1112":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T17:55:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770245]"]},"1113":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-20T19:01:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770248]"]},"1114":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T19:01:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770285]"]},"1115":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T19:07:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770111]"]},"1116":{"ocel:activity":"check references","ocel:timestamp":"2019-06-20T19:11:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770259]"]},"1117":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-20T19:23:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770266]"]},"1118":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-20T19:46:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770046]"]},"1119":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-20T20:32:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770286]"]},"1121":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T02:33:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770087]"]},"1122":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T02:33:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770044]"]},"1123":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T02:33:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770144]"]},"1124":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T02:33:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770063]"]},"1125":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T02:33:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770030]"]},"1126":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T02:33:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770034]"]},"1127":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T02:33:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770049]"]},"1128":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T02:36:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770287]"]},"1129":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-21T06:44:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770240]"]},"1130":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-21T06:54:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770055]"]},"1131":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-21T07:10:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770269]"]},"1133":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T07:24:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770288]"]},"1134":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-21T07:27:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770257]"]},"1135":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-21T07:43:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770256]"]},"1136":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-21T07:46:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770248]"]},"1137":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-21T08:03:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770063]"]},"1138":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-21T08:05:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770034]"]},"1139":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-21T08:06:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770094]"]},"1140":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-21T08:16:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770061]"]},"1141":{"ocel:activity":"check references","ocel:timestamp":"2019-06-21T08:16:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770123]"]},"1142":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-21T08:28:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770040]"]},"1143":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-21T08:29:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770019]"]},"1144":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T08:34:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770289]"]},"1145":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-21T08:43:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770044]"]},"1146":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-21T08:50:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770146]"]},"1147":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-21T09:10:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770257]"]},"1148":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-21T09:41:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770224]"]},"1149":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-21T09:42:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770276]"]},"1150":{"ocel:activity":"check references","ocel:timestamp":"2019-06-21T09:46:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770204]"]},"1151":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-21T09:48:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770262]"]},"1152":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T09:52:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770290]"]},"1153":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T11:29:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770291]"]},"1154":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-21T11:42:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770036]"]},"1155":{"ocel:activity":"check references","ocel:timestamp":"2019-06-21T12:15:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770195]"]},"1156":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-21T12:27:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770094]"]},"1157":{"ocel:activity":"check references","ocel:timestamp":"2019-06-21T12:31:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770270]"]},"1158":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T12:43:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770292]"]},"1159":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-21T13:06:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770108]"]},"1160":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-21T13:10:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770254]"]},"1161":{"ocel:activity":"check references","ocel:timestamp":"2019-06-21T13:17:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770241]"]},"1163":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770081]"]},"1164":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770042]"]},"1165":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770183]"]},"1166":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770185]"]},"1167":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770149]"]},"1168":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770068]"]},"1169":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770028]"]},"1170":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770041]"]},"1171":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770093]"]},"1172":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770155]"]},"1173":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-21T13:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770038]"]},"1174":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-21T13:29:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770041]"]},"1175":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-21T13:42:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770288]"]},"1176":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-21T13:55:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770243]"]},"1177":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-21T13:59:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770093]"]},"1178":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-21T14:02:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770233]"]},"1179":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-21T14:03:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770036]"]},"1180":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-21T14:09:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770078]"]},"1181":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-21T14:10:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770070]"]},"1182":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T14:10:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770293]"]},"1183":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-21T14:19:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770136]"]},"1184":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-21T14:21:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770158]"]},"1186":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-21T14:37:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770292]"]},"1187":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-21T14:39:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770144]"]},"1188":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-21T14:47:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770264]"]},"1189":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-21T14:47:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770226]"]},"1190":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-21T14:52:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770152]"]},"1191":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T14:55:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770294]"]},"1192":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-21T14:57:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770248]"]},"1193":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-21T15:11:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770151]"]},"1194":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-21T15:18:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770063]"]},"1195":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-21T15:28:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770287]"]},"1196":{"ocel:activity":"check references","ocel:timestamp":"2019-06-21T15:30:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770092]"]},"1197":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-21T15:33:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770287]"]},"1198":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-21T15:37:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770272]"]},"1199":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-21T15:49:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770030]"]},"1200":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T16:34:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770295]"]},"1201":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-21T16:57:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770107]"]},"1202":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T18:13:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770296]"]},"1203":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-21T18:59:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770158]"]},"1204":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-21T19:55:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770297]"]},"1206":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T06:36:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770050]"]},"1207":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T06:36:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770180]"]},"1208":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-22T07:23:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770298]"]},"1210":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T14:03:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770062]"]},"1211":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T14:03:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770069]"]},"1212":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T14:03:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770141]"]},"1213":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T14:03:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770234]"]},"1214":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T14:03:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770076]"]},"1215":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T14:03:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770133]"]},"1216":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T14:03:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770189]"]},"1217":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T14:03:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770174]"]},"1218":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T14:03:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770117]"]},"1219":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-22T14:03:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770056]"]},"1220":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-22T15:10:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770299]"]},"1222":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T07:22:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770127]"]},"1223":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T07:22:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770114]"]},"1224":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T07:22:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770057]"]},"1225":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T07:22:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770090]"]},"1226":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T07:22:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770059]"]},"1227":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-23T09:21:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770300]"]},"1230":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T14:23:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770130]"]},"1231":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T14:23:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770167]"]},"1232":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T14:23:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770182]"]},"1233":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T14:23:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770065]"]},"1234":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T14:23:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770134]"]},"1235":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T14:23:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770088]"]},"1236":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-23T14:23:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770077]"]},"1237":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-23T17:05:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770301]"]},"1238":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T03:25:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770302]"]},"1239":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T06:22:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770081]"]},"1240":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T06:35:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770063]"]},"1241":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-24T06:47:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770257]"]},"1242":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T07:11:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770065]"]},"1243":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T07:21:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770068]"]},"1244":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T07:23:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770303]"]},"1245":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-24T07:32:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770289]"]},"1246":{"ocel:activity":"make job offer","ocel:timestamp":"2019-06-24T07:33:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770070]","Offer[[990002]]"]},"1247":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-24T07:36:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770288]"]},"1248":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-24T07:47:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770224]"]},"1249":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T07:53:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770056]"]},"1250":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-24T07:57:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770025]"]},"1251":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-24T08:05:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770295]"]},"1252":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-24T08:19:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770144]"]},"1253":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-24T08:22:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770261]"]},"1254":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T08:28:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770133]"]},"1255":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T08:30:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770304]"]},"1256":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-24T08:35:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770294]"]},"1257":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T08:49:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770189]"]},"1258":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-24T08:51:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770304]"]},"1259":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T09:14:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770216]"]},"1260":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T09:21:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770104]"]},"1261":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-24T09:26:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770222]"]},"1262":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T09:40:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770062]"]},"1263":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T09:46:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770305]"]},"1264":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-24T09:48:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770294]"]},"1265":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-24T09:58:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770304]"]},"1266":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T10:03:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770149]"]},"1267":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T10:09:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770045]"]},"1268":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-24T10:12:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770240]"]},"1269":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-24T10:22:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770129]"]},"1270":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T10:22:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770114]"]},"1271":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T10:36:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770174]"]},"1272":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T10:41:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770229]"]},"1273":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T11:08:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770047]"]},"1274":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-24T11:16:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770289]"]},"1275":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T11:16:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770306]"]},"1276":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-24T11:33:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770142]"]},"1278":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T11:53:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770088]"]},"1279":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T11:55:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770288]"]},"1280":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T11:57:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770017]"]},"1281":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-24T12:01:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770034]"]},"1282":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T12:16:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770307]"]},"1283":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T12:26:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770032]"]},"1284":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-06-24T12:36:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770070]","Offer[[990002]]"]},"1285":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-24T12:39:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770286]"]},"1286":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T12:44:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770009]"]},"1287":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T12:51:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770239]"]},"1288":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T12:54:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770116]"]},"1289":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-24T12:57:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770272]"]},"1290":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-24T13:04:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770093]"]},"1291":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T13:10:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770003]"]},"1292":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T13:18:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770308]"]},"1293":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T13:24:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770130]"]},"1294":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T13:29:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770249]"]},"1295":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-24T13:32:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770242]"]},"1296":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-24T13:33:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770129]"]},"1297":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T13:40:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770180]"]},"1298":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T13:40:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770087]"]},"1300":{"ocel:activity":"make job offer","ocel:timestamp":"2019-06-24T13:59:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770144]","Offer[[990003]]"]},"1301":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T14:01:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770185]"]},"1302":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T14:20:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770309]"]},"1303":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-24T14:27:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770291]"]},"1304":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T14:47:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770195]"]},"1305":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-24T14:53:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770295]"]},"1306":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T14:55:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770225]"]},"1307":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T15:04:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770127]"]},"1308":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-24T15:08:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770134]"]},"1309":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T15:10:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770019]"]},"1310":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-24T15:11:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770011]"]},"1311":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T15:26:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770310]"]},"1312":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-24T15:29:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770243]"]},"1313":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T15:36:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770158]"]},"1314":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-24T15:48:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770183]"]},"1315":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T15:54:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770257]"]},"1316":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-24T16:33:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770292]"]},"1317":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T16:36:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770311]"]},"1318":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T16:36:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770232]"]},"1319":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-24T16:43:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770310]"]},"1320":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-24T16:56:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770233]"]},"1321":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-06-24T16:57:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770144]","Offer[[990003]]"]},"1322":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-24T17:08:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770120]"]},"1323":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T18:17:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770312]"]},"1324":{"ocel:activity":"check references","ocel:timestamp":"2019-06-24T18:18:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770137]"]},"1325":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T20:04:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770313]"]},"1326":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-24T20:32:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770213]"]},"1328":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-24T23:49:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770314]"]},"1329":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T07:04:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770315]"]},"1330":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T07:11:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770291]"]},"1331":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T07:32:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770264]"]},"1332":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T07:48:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770316]"]},"1333":{"ocel:activity":"check references","ocel:timestamp":"2019-06-25T07:48:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770261]"]},"1334":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-25T07:50:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770302]"]},"1335":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T07:54:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770093]"]},"1336":{"ocel:activity":"check references","ocel:timestamp":"2019-06-25T08:09:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770276]"]},"1337":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-25T08:16:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770284]"]},"1338":{"ocel:activity":"check references","ocel:timestamp":"2019-06-25T08:16:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770196]"]},"1339":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-25T08:17:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770258]"]},"1340":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T08:46:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770069]"]},"1341":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T08:46:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770148]"]},"1342":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T08:56:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770155]"]},"1343":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-25T09:01:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770222]"]},"1344":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-25T09:01:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770078]"]},"1345":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-25T09:06:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770113]"]},"1346":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T09:07:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770217]"]},"1347":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T09:08:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770310]"]},"1348":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T09:21:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770317]"]},"1349":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T09:54:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770057]"]},"1350":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-25T09:59:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770111]"]},"1351":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-25T10:10:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770309]"]},"1352":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-25T10:21:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770174]"]},"1353":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T10:26:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770318]"]},"1354":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T10:53:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770117]"]},"1355":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T10:59:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770038]"]},"1356":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T11:37:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770319]"]},"1357":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-25T11:44:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770247]"]},"1359":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-25T12:01:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770091]"]},"1360":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-25T12:01:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770126]"]},"1361":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-25T12:01:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770074]"]},"1362":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-25T12:01:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770196]"]},"1363":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-25T12:01:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770210]"]},"1364":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-25T12:01:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770125]"]},"1365":{"ocel:activity":"make job offer","ocel:timestamp":"2019-06-25T12:15:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770078]","Offer[[990004]]"]},"1366":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-25T12:25:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770293]"]},"1367":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-25T12:33:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770010]"]},"1368":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T12:45:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770049]"]},"1370":{"ocel:activity":"check references","ocel:timestamp":"2019-06-25T12:58:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770142]"]},"1371":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T12:58:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770320]"]},"1372":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-25T12:59:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770022]"]},"1373":{"ocel:activity":"check references","ocel:timestamp":"2019-06-25T13:16:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770179]"]},"1374":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T13:16:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770267]"]},"1375":{"ocel:activity":"check references","ocel:timestamp":"2019-06-25T13:22:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770213]"]},"1376":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T13:22:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770262]"]},"1377":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-25T13:40:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770113]"]},"1378":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T13:41:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770005]"]},"1379":{"ocel:activity":"check references","ocel:timestamp":"2019-06-25T13:43:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770136]"]},"1380":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T13:57:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770302]"]},"1381":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-25T14:20:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770142]"]},"1382":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T14:38:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770286]"]},"1383":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T14:40:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770293]"]},"1384":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T14:41:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770321]"]},"1385":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T14:48:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770284]"]},"1386":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-25T15:21:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770214]"]},"1387":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-25T15:23:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770278]"]},"1388":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-25T15:36:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770189]"]},"1389":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-25T15:43:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770321]"]},"1390":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T16:06:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770322]"]},"1391":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T16:28:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770240]"]},"1392":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T16:51:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770323]"]},"1393":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T19:02:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770324]"]},"1394":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T19:13:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770050]"]},"1395":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-25T19:24:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770041]"]},"1396":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-25T19:27:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770189]"]},"1397":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-25T20:32:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770325]"]},"1398":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T02:39:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770326]"]},"1400":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-26T06:12:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770108]"]},"1401":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T06:28:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770135]"]},"1402":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-26T06:51:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770247]"]},"1403":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T07:06:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770316]"]},"1404":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-26T07:15:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770284]"]},"1405":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-26T07:20:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770025]"]},"1406":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T07:27:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770327]"]},"1407":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-26T07:44:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770126]"]},"1408":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-26T07:51:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770258]"]},"1409":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-26T07:52:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770041]"]},"1410":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-26T08:17:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770011]"]},"1411":{"ocel:activity":"check references","ocel:timestamp":"2019-06-26T08:37:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770256]"]},"1412":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-26T08:37:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770321]"]},"1413":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T08:40:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770328]"]},"1414":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-26T08:49:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770135]"]},"1415":{"ocel:activity":"check references","ocel:timestamp":"2019-06-26T09:04:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770120]"]},"1416":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T09:28:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770150]"]},"1417":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T09:43:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770268]"]},"1418":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T09:43:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770306]"]},"1419":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T09:44:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770296]"]},"1420":{"ocel:activity":"check references","ocel:timestamp":"2019-06-26T10:03:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770148]"]},"1421":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-26T10:04:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770309]"]},"1422":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T10:04:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770329]"]},"1423":{"ocel:activity":"check references","ocel:timestamp":"2019-06-26T10:04:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770286]"]},"1424":{"ocel:activity":"check references","ocel:timestamp":"2019-06-26T10:12:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770310]"]},"1425":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-26T10:16:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770076]"]},"1426":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T10:19:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770311]"]},"1427":{"ocel:activity":"check references","ocel:timestamp":"2019-06-26T10:43:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770206]"]},"1428":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T10:48:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770330]"]},"1429":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-26T11:10:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770113]"]},"1431":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T11:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770033]"]},"1432":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T11:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770086]"]},"1433":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T11:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770187]"]},"1434":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T11:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770066]"]},"1435":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T11:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770053]"]},"1436":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T11:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770152]"]},"1437":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T11:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770193]"]},"1438":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T11:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770004]"]},"1439":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T11:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770157]"]},"1440":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T11:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770166]"]},"1441":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-26T11:45:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770174]"]},"1442":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-26T11:58:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770233]"]},"1443":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T12:01:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770260]"]},"1444":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-26T12:15:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770269]"]},"1445":{"ocel:activity":"check references","ocel:timestamp":"2019-06-26T12:16:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770223]"]},"1446":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T12:22:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770072]"]},"1447":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T12:22:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770331]"]},"1448":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-26T12:23:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770278]"]},"1449":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T12:50:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770200]"]},"1450":{"ocel:activity":"check references","ocel:timestamp":"2019-06-26T12:58:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770094]"]},"1451":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-26T13:04:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770150]"]},"1453":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-26T13:19:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770321]"]},"1454":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T13:28:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770332]"]},"1455":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-26T13:33:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770149]"]},"1456":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-26T13:48:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770295]"]},"1457":{"ocel:activity":"check references","ocel:timestamp":"2019-06-26T13:54:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770234]"]},"1458":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-26T13:55:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770316]"]},"1459":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T14:29:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770104]"]},"1460":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T14:37:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770327]"]},"1461":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T14:42:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770333]"]},"1462":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T14:46:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770165]"]},"1463":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T14:50:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770301]"]},"1464":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-26T15:01:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770287]"]},"1465":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-26T15:12:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770028]"]},"1466":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T15:30:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770323]"]},"1467":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-26T15:40:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770290]"]},"1468":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-26T16:05:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770327]"]},"1469":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T16:08:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770334]"]},"1470":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-26T16:19:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770149]"]},"1471":{"ocel:activity":"check references","ocel:timestamp":"2019-06-26T16:42:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770271]"]},"1472":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T16:52:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770335]"]},"1473":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T19:06:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770336]"]},"1474":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-26T19:39:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770296]"]},"1475":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-26T19:50:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770027]"]},"1477":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T20:16:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770225]"]},"1478":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T20:16:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770198]"]},"1479":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T20:16:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770161]"]},"1480":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T20:16:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770271]"]},"1481":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-26T20:16:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770170]"]},"1482":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-26T20:41:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770337]"]},"1483":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T03:34:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770338]"]},"1485":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T06:05:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770222]"]},"1486":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T06:08:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770309]"]},"1487":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T06:27:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770307]"]},"1488":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-27T06:37:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770134]"]},"1489":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T06:47:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770313]"]},"1490":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T06:47:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770327]"]},"1491":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T06:48:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770230]"]},"1492":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T06:52:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770283]"]},"1493":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T07:22:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770111]"]},"1494":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-27T07:28:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770187]"]},"1495":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T07:34:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770339]"]},"1496":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T07:36:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770243]"]},"1497":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-27T07:42:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770193]"]},"1498":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-27T07:46:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770157]"]},"1499":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T07:49:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770128]"]},"1500":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T07:52:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770222]"]},"1501":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T07:58:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770306]"]},"1502":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T08:02:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770248]"]},"1503":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T08:05:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770230]"]},"1504":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T08:16:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770333]"]},"1505":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T08:23:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770135]"]},"1506":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T08:29:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770282]"]},"1507":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T08:31:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770253]"]},"1508":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T08:31:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770190]"]},"1509":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T08:35:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770034]"]},"1510":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T08:45:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770218]"]},"1511":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T08:46:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770134]"]},"1512":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T08:47:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770323]"]},"1513":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T08:47:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770055]"]},"1514":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T08:52:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770340]"]},"1515":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-27T09:00:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770104]"]},"1516":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-27T09:03:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770225]"]},"1517":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T09:04:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770311]"]},"1518":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-27T09:05:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770170]"]},"1519":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T09:20:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770129]"]},"1520":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T09:21:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770293]"]},"1521":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T09:30:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770304]"]},"1522":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T09:36:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770042]"]},"1523":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T09:44:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770077]"]},"1524":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T09:55:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770072]"]},"1525":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T09:58:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770108]"]},"1526":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-27T09:59:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770002]"]},"1527":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T10:08:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770308]"]},"1528":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-27T10:09:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770186]"]},"1529":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T10:09:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770323]"]},"1530":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T10:11:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770022]"]},"1531":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T10:14:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770289]"]},"1532":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T10:27:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770004]"]},"1533":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T10:29:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770341]"]},"1534":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T10:32:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770268]"]},"1535":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-27T10:34:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770243]"]},"1536":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T10:35:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770066]"]},"1537":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T10:45:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770112]"]},"1538":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-27T10:54:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770013]"]},"1539":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T10:57:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770110]"]},"1540":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T11:10:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770314]"]},"1541":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T11:42:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770342]"]},"1543":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-27T12:09:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770291]"]},"1544":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-27T12:09:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770181]"]},"1545":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-27T12:09:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770192]"]},"1546":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-27T12:09:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770232]"]},"1547":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T12:11:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770260]"]},"1548":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T12:28:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770314]"]},"1549":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T12:29:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770230]"]},"1550":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T12:30:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770282]"]},"1551":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-27T12:30:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770271]"]},"1552":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T12:34:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770260]"]},"1553":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T12:35:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770277]"]},"1554":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-27T12:37:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770182]"]},"1555":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T12:52:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770302]"]},"1556":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T12:52:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770283]"]},"1557":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T12:54:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770341]"]},"1558":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T12:59:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770301]"]},"1559":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T13:09:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770343]"]},"1560":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T13:10:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770306]"]},"1561":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T13:13:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770234]"]},"1562":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T13:14:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770327]"]},"1563":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T13:18:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770053]"]},"1564":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-27T13:21:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770006]"]},"1565":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T13:26:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770010]"]},"1566":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T13:32:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770165]"]},"1568":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-27T13:44:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770090]"]},"1569":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T13:50:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770307]"]},"1570":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T13:53:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770344]"]},"1571":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T13:55:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770268]"]},"1572":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T13:57:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770296]"]},"1573":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T14:00:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770200]"]},"1574":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T14:14:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770340]"]},"1575":{"ocel:activity":"check references","ocel:timestamp":"2019-06-27T14:25:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770291]"]},"1576":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T14:25:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770125]"]},"1577":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T14:38:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770211]"]},"1578":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T14:43:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770151]"]},"1579":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T14:50:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770297]"]},"1580":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-27T14:52:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770194]"]},"1581":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T14:56:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770232]"]},"1582":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T15:00:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770186]"]},"1583":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T15:20:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770006]"]},"1584":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T15:26:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770333]"]},"1585":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-27T15:30:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770277]"]},"1586":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T15:31:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770345]"]},"1587":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T15:46:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770074]"]},"1588":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-27T15:54:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770072]"]},"1589":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T16:28:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770161]"]},"1590":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T16:47:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770346]"]},"1591":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-27T17:39:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770091]"]},"1592":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T18:52:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770347]"]},"1594":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-27T20:46:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770109]"]},"1595":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-27T20:46:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770267]"]},"1596":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-27T20:46:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770148]"]},"1597":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-27T20:46:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770188]"]},"1598":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-27T21:13:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770348]"]},"1599":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-28T04:49:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770349]"]},"1600":{"ocel:activity":"check references","ocel:timestamp":"2019-06-28T06:49:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770314]"]},"1601":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T06:50:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770290]"]},"1602":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T06:54:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770324]"]},"1603":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T07:04:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770344]"]},"1604":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T07:14:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770258]"]},"1605":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-28T07:14:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770308]"]},"1606":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T07:18:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770344]"]},"1607":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-28T07:20:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770148]"]},"1608":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-28T07:21:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770235]"]},"1609":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-28T07:23:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770148]"]},"1611":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-28T07:33:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770127]"]},"1612":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-28T07:56:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770350]"]},"1613":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-28T08:03:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770112]"]},"1614":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T08:17:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770342]"]},"1615":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-06-28T08:19:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770058]","Offer[[990001]]"]},"1616":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T08:22:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770292]"]},"1617":{"ocel:activity":"check references","ocel:timestamp":"2019-06-28T08:24:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770295]"]},"1618":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-28T08:47:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770086]"]},"1619":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-28T08:51:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770166]"]},"1620":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T08:52:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770112]"]},"1621":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T09:22:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770150]"]},"1622":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T09:25:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770297]"]},"1623":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T09:27:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770331]"]},"1624":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-28T09:37:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770351]"]},"1625":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-28T09:46:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770211]"]},"1626":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T09:46:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770211]"]},"1627":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T09:51:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770313]"]},"1628":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T09:57:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770324]"]},"1629":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T10:07:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770340]"]},"1630":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T10:19:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770083]"]},"1631":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-28T10:38:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770129]"]},"1632":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-28T10:59:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770352]"]},"1633":{"ocel:activity":"check references","ocel:timestamp":"2019-06-28T11:08:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770260]"]},"1634":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-28T11:14:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770127]"]},"1635":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-28T11:16:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770068]"]},"1636":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T11:32:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770176]"]},"1637":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T11:59:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770332]"]},"1638":{"ocel:activity":"make job offer","ocel:timestamp":"2019-06-28T12:17:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770148]","Offer[[990005]]"]},"1639":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-28T12:35:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770210]"]},"1640":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-28T12:44:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770353]"]},"1642":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-28T12:54:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770092]"]},"1643":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-28T12:54:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770310]"]},"1644":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-28T12:54:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770097]"]},"1645":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-28T12:54:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770120]"]},"1646":{"ocel:activity":"check references","ocel:timestamp":"2019-06-28T12:57:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770309]"]},"1647":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-28T13:00:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770194]"]},"1648":{"ocel:activity":"check references","ocel:timestamp":"2019-06-28T13:06:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770141]"]},"1649":{"ocel:activity":"check references","ocel:timestamp":"2019-06-28T13:24:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770226]"]},"1650":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-28T13:26:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770332]"]},"1651":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T13:27:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770202]"]},"1652":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-28T13:29:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770235]"]},"1653":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T13:54:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770303]"]},"1654":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T13:55:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770251]"]},"1655":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-28T13:55:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770188]"]},"1656":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-28T13:56:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770192]"]},"1657":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-06-28T14:02:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770120]"]},"1658":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-28T14:07:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770142]"]},"1659":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-28T14:12:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770354]"]},"1660":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-28T14:14:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770196]"]},"1661":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T14:25:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770319]"]},"1662":{"ocel:activity":"check references","ocel:timestamp":"2019-06-28T14:30:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770264]"]},"1664":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-28T14:56:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770355]"]},"1665":{"ocel:activity":"check references","ocel:timestamp":"2019-06-28T15:04:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770167]"]},"1666":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T15:08:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770311]"]},"1667":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-06-28T15:12:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770331]"]},"1668":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T15:17:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770342]"]},"1669":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-06-28T15:41:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770312]"]},"1670":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-28T15:53:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770044]"]},"1671":{"ocel:activity":"check references","ocel:timestamp":"2019-06-28T16:27:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770290]"]},"1672":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-28T16:37:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770356]"]},"1673":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T18:06:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770341]"]},"1674":{"ocel:activity":"first screening","ocel:timestamp":"2019-06-28T18:15:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770165]"]},"1675":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-28T18:21:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770357]"]},"1676":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-06-28T18:31:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770235]"]},"1677":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-06-28T18:35:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770148]","Offer[[990005]]"]},"1678":{"ocel:activity":"send rejection","ocel:timestamp":"2019-06-28T19:30:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770097]"]},"1679":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-28T20:12:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770358]"]},"1681":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-29T03:32:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770173]"]},"1682":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-29T03:32:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770095]"]},"1683":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-29T03:32:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770085]"]},"1684":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-29T03:32:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770304]"]},"1685":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-29T03:32:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770204]"]},"1686":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-29T03:32:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770138]"]},"1687":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-29T08:20:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770359]"]},"1689":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-29T13:27:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770253]"]},"1690":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-29T13:27:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770123]"]},"1691":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-29T13:27:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770213]"]},"1692":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-29T13:27:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770143]"]},"1693":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-29T16:04:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770360]"]},"1695":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-30T06:51:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770172]"]},"1696":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-30T06:51:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770026]"]},"1697":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-30T06:51:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770208]"]},"1698":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-30T06:51:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770115]"]},"1699":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-30T06:51:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770201]"]},"1700":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-30T10:08:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770361]"]},"1702":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-30T14:25:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770001]"]},"1703":{"ocel:activity":"consult manager","ocel:timestamp":"2019-06-30T14:25:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770162]"]},"1705":{"ocel:activity":"submit application","ocel:timestamp":"2019-06-30T18:12:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770362]"]},"1706":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T04:05:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770363]"]},"1707":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-01T06:11:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770141]"]},"1708":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-01T06:36:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770167]"]},"1709":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-01T06:49:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770214]"]},"1710":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T07:08:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770364]"]},"1711":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T07:52:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770365]"]},"1712":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-01T08:03:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770319]"]},"1713":{"ocel:activity":"check references","ocel:timestamp":"2019-07-01T08:04:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770214]"]},"1714":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-01T08:40:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770353]"]},"1715":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-01T08:46:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770099]"]},"1716":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T09:29:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770366]"]},"1717":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-01T09:43:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770299]"]},"1718":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-01T09:50:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770166]"]},"1719":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-01T10:04:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770138]"]},"1720":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-01T10:06:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770312]"]},"1721":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-01T10:07:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770081]"]},"1722":{"ocel:activity":"check references","ocel:timestamp":"2019-07-01T10:18:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770233]"]},"1723":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-01T10:20:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770023]"]},"1724":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T10:43:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770367]"]},"1725":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-01T11:19:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770176]"]},"1726":{"ocel:activity":"check references","ocel:timestamp":"2019-07-01T11:22:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770267]"]},"1727":{"ocel:activity":"check references","ocel:timestamp":"2019-07-01T11:49:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770072]"]},"1728":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T12:11:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770368]"]},"1729":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-01T12:30:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770361]"]},"1730":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-01T12:30:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770300]"]},"1732":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-01T12:37:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770173]"]},"1733":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T12:55:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770369]"]},"1734":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-01T13:02:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770331]"]},"1735":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-01T14:13:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770115]"]},"1736":{"ocel:activity":"check references","ocel:timestamp":"2019-07-01T14:15:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770165]"]},"1737":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-01T14:17:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770027]"]},"1738":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-01T14:22:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770194]"]},"1739":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-01T14:26:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770131]"]},"1740":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-01T14:29:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770353]"]},"1741":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-01T14:34:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770308]"]},"1742":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T14:35:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770370]"]},"1743":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-01T14:39:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770338]"]},"1744":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-01T14:57:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770146]"]},"1745":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-01T15:01:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770277]"]},"1746":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-01T15:25:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770291]"]},"1747":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-01T15:42:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770305]"]},"1748":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T15:55:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770371]"]},"1749":{"ocel:activity":"check references","ocel:timestamp":"2019-07-01T16:07:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770342]"]},"1750":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-01T16:15:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770056]"]},"1751":{"ocel:activity":"check references","ocel:timestamp":"2019-07-01T16:43:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770243]"]},"1752":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-01T17:13:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770094]"]},"1753":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-01T17:26:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770059]"]},"1754":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T17:35:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770372]"]},"1755":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-01T17:48:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770272]"]},"1756":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-01T17:49:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770324]"]},"1757":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-01T18:27:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770365]"]},"1758":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-01T18:30:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770056]"]},"1759":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T19:40:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770373]"]},"1760":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-01T22:25:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770374]"]},"1762":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T06:14:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770375]"]},"1763":{"ocel:activity":"check references","ocel:timestamp":"2019-07-02T06:51:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770301]"]},"1764":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-02T06:53:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770338]"]},"1765":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-02T06:55:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770213]"]},"1766":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-02T07:08:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770347]"]},"1767":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-02T07:28:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770109]"]},"1768":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T07:35:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770376]"]},"1769":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-02T07:53:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770044]"]},"1770":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-02T08:01:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770172]"]},"1771":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-02T08:21:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770304]"]},"1772":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-02T08:22:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770142]"]},"1773":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-02T08:30:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770151]"]},"1774":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-02T08:37:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770098]"]},"1775":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-02T08:38:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770131]"]},"1776":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-02T08:41:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770094]"]},"1777":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-02T08:42:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770139]"]},"1778":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-02T08:45:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770308]"]},"1779":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T08:56:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770377]"]},"1780":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-02T08:57:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770281]"]},"1781":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-02T08:57:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770013]"]},"1782":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-02T08:59:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770198]"]},"1783":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-02T09:01:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770333]"]},"1784":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-02T09:08:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770246]"]},"1785":{"ocel:activity":"check references","ocel:timestamp":"2019-07-02T09:13:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770313]"]},"1786":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-02T09:19:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770035]"]},"1787":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-02T09:29:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770170]"]},"1788":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-02T09:32:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770166]","Offer[[990006]]"]},"1789":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-02T09:33:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770207]"]},"1790":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-02T09:55:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770267]"]},"1791":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-02T10:00:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770202]"]},"1792":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T10:36:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770378]"]},"1793":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-02T10:39:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770251]"]},"1794":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-02T10:39:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770364]"]},"1795":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-02T11:02:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770181]"]},"1796":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-02T11:15:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770368]"]},"1797":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-02T11:33:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770305]"]},"1798":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T11:58:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770379]"]},"1799":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-02T12:07:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770095]"]},"1800":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-02T12:07:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770086]"]},"1801":{"ocel:activity":"check references","ocel:timestamp":"2019-07-02T12:21:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770341]"]},"1803":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-02T12:30:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770245]"]},"1804":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-02T12:30:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770276]"]},"1805":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-02T12:30:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770132]"]},"1806":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-02T12:30:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770118]"]},"1807":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-02T12:30:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770361]"]},"1808":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-02T12:36:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770182]"]},"1809":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-02T12:47:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770283]"]},"1810":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-02T12:48:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770334]"]},"1811":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-02T12:54:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770337]"]},"1813":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-02T13:07:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770170]","Offer[[990007]]"]},"1814":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-02T13:19:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770303]"]},"1815":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T13:40:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770380]"]},"1816":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-02T13:49:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770245]"]},"1817":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-02T14:07:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770130]"]},"1818":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-02T14:31:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770255]"]},"1819":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-02T14:48:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770299]"]},"1820":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T15:05:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770381]"]},"1821":{"ocel:activity":"check references","ocel:timestamp":"2019-07-02T15:09:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770083]"]},"1822":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-02T15:16:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770208]"]},"1823":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-02T15:24:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770334]"]},"1824":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-02T15:25:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770337]"]},"1825":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T15:49:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770382]"]},"1826":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-02T15:50:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770347]"]},"1827":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-02T15:56:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770300]"]},"1828":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-02T16:08:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770071]"]},"1829":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-02T16:19:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770368]"]},"1830":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-02T16:34:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770023]"]},"1831":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-02T16:57:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770204]"]},"1832":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-02T17:03:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770197]"]},"1833":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-02T17:04:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770001]"]},"1834":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T17:24:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770383]"]},"1835":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-02T17:48:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770253]"]},"1836":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T19:17:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770384]"]},"1837":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-02T21:03:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770385]"]},"1839":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T04:29:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770386]"]},"1840":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-03T06:18:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770214]"]},"1841":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-03T06:27:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770081]","Offer[[990008]]"]},"1842":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T07:04:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770262]"]},"1843":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-03T07:04:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770253]"]},"1844":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T07:10:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770323]"]},"1845":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T07:27:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770300]"]},"1846":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T07:34:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770387]"]},"1847":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-03T07:37:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770052]"]},"1848":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-03T08:09:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770099]"]},"1849":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-03T08:22:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770184]"]},"1850":{"ocel:activity":"check references","ocel:timestamp":"2019-07-03T08:22:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770283]"]},"1851":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-03T08:52:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770001]"]},"1852":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T08:54:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770388]"]},"1853":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-03T09:14:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770166]","Offer[[990006]]"]},"1854":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T09:21:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770197]"]},"1855":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-03T09:27:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770255]"]},"1856":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-03T09:53:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770173]"]},"1857":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-03T10:08:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770339]"]},"1858":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T10:12:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770190]"]},"1859":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T10:32:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770389]"]},"1860":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-03T10:36:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770157]"]},"1861":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-03T10:41:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770281]"]},"1862":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-03T10:48:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770035]"]},"1863":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-03T11:09:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770282]"]},"1864":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-03T11:17:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770246]"]},"1865":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-03T11:36:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770207]"]},"1866":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T11:49:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770390]"]},"1867":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-03T12:02:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770339]"]},"1868":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-03T12:03:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770365]"]},"1870":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-03T12:11:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770124]"]},"1871":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T12:32:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770002]"]},"1872":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-03T12:40:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770251]"]},"1873":{"ocel:activity":"check references","ocel:timestamp":"2019-07-03T12:59:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770353]"]},"1874":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-03T13:02:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770018]"]},"1875":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T13:18:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770085]"]},"1876":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T13:22:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770391]"]},"1877":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T13:35:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770139]"]},"1878":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-03T13:36:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770359]"]},"1879":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-03T13:37:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770333]"]},"1882":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T13:41:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770018]"]},"1883":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-03T13:42:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770325]"]},"1884":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-03T13:44:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770033]"]},"1885":{"ocel:activity":"check references","ocel:timestamp":"2019-07-03T13:48:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770316]"]},"1886":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T13:55:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770287]"]},"1887":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T14:03:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770132]"]},"1888":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-03T14:04:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770184]"]},"1889":{"ocel:activity":"check references","ocel:timestamp":"2019-07-03T14:05:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770272]"]},"1890":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T14:12:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770235]"]},"1891":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-03T14:22:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770369]"]},"1892":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T14:30:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770392]"]},"1893":{"ocel:activity":"check references","ocel:timestamp":"2019-07-03T14:37:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770303]"]},"1894":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-03T14:39:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770369]"]},"1895":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-03T14:42:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770176]"]},"1896":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-03T14:51:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770278]"]},"1897":{"ocel:activity":"check references","ocel:timestamp":"2019-07-03T14:51:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770242]"]},"1898":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-03T15:03:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770026]"]},"1899":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-03T15:03:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770162]"]},"1900":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-03T15:29:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770373]"]},"1901":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-03T15:40:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770047]"]},"1902":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T15:44:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770393]"]},"1903":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-03T15:52:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770193]"]},"1904":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-03T16:21:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770310]"]},"1905":{"ocel:activity":"check references","ocel:timestamp":"2019-07-03T16:24:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770129]"]},"1906":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-03T16:50:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770374]"]},"1907":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T17:12:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770394]"]},"1908":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-03T17:46:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770330]"]},"1909":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-03T18:10:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770195]"]},"1910":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-03T18:18:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770094]"]},"1911":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-03T18:53:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770307]"]},"1912":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T18:54:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770395]"]},"1913":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-03T20:46:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770116]"]},"1915":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-03T20:52:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770055]"]},"1916":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-03T20:52:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770292]"]},"1917":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-03T20:52:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770327]"]},"1918":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-03T21:17:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770396]"]},"1919":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T04:58:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770397]"]},"1920":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T06:42:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770124]"]},"1921":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-04T06:56:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770373]"]},"1922":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-04T07:00:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770001]","Offer[[990009]]"]},"1924":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-04T07:26:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770033]"]},"1925":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T07:28:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770258]"]},"1926":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-04T07:31:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770255]"]},"1927":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T07:33:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770182]"]},"1928":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-04T07:41:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770396]"]},"1929":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-04T07:45:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770364]"]},"1930":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T08:07:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770398]"]},"1931":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-04T08:10:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770325]"]},"1932":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T08:29:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770337]"]},"1933":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T08:51:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770399]"]},"1934":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-04T09:08:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770026]"]},"1935":{"ocel:activity":"check references","ocel:timestamp":"2019-07-04T09:15:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770297]"]},"1936":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-04T09:16:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770071]"]},"1937":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T09:44:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770195]"]},"1938":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-04T09:51:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770118]"]},"1939":{"ocel:activity":"check references","ocel:timestamp":"2019-07-04T10:00:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770150]"]},"1940":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T10:09:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770092]"]},"1941":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T10:27:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770400]"]},"1942":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-04T10:43:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770374]"]},"1943":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-04T10:51:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770363]"]},"1944":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T10:56:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770130]"]},"1945":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-04T11:08:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770396]"]},"1946":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T11:38:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770401]"]},"1947":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-04T12:12:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770078]","Offer[[990004]]"]},"1948":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-04T12:22:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770200]"]},"1949":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-04T12:43:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770359]"]},"1950":{"ocel:activity":"check references","ocel:timestamp":"2019-07-04T12:52:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770312]"]},"1951":{"ocel:activity":"check references","ocel:timestamp":"2019-07-04T13:00:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770347]"]},"1952":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-04T13:01:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770202]"]},"1953":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T13:02:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770402]"]},"1954":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-04T13:03:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770242]"]},"1956":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-04T13:03:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770306]"]},"1957":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-04T13:03:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770257]"]},"1958":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-04T13:03:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770178]"]},"1959":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-04T13:03:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770043]"]},"1960":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-04T13:03:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770226]"]},"1961":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-04T13:06:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770276]"]},"1962":{"ocel:activity":"check references","ocel:timestamp":"2019-07-04T13:25:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770194]"]},"1963":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T13:33:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770331]"]},"1964":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-04T13:36:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770173]","Offer[[990010]]"]},"1965":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T13:46:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770403]"]},"1966":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-04T13:52:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770403]"]},"1967":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-04T13:58:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770064]"]},"1968":{"ocel:activity":"check references","ocel:timestamp":"2019-07-04T14:12:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770277]"]},"1969":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T14:12:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770211]"]},"1970":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T14:25:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770047]"]},"1972":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-04T15:11:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770330]"]},"1973":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T15:17:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770404]"]},"1974":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T15:32:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770230]"]},"1975":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-04T16:04:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770247]"]},"1976":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T16:19:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770405]"]},"1977":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-04T16:27:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770193]"]},"1978":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-04T16:29:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770394]"]},"1979":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-04T16:31:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770272]"]},"1980":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T17:25:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770406]"]},"1981":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T19:20:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770407]"]},"1982":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-04T21:09:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770408]"]},"1984":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-05T04:11:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770212]"]},"1985":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-05T04:11:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770268]"]},"1986":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-05T04:11:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770238]"]},"1987":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-05T04:11:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770164]"]},"1988":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-05T04:41:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770409]"]},"1989":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-05T06:32:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770392]"]},"1990":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-05T06:38:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770362]"]},"1991":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-05T06:48:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770400]"]},"1992":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-05T07:09:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770051]"]},"1993":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-05T07:14:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770368]"]},"1994":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-05T07:15:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770051]"]},"1995":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-05T07:24:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770383]"]},"1996":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-05T07:29:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770372]"]},"1997":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-05T07:41:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770123]"]},"1998":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-05T07:48:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770410]"]},"1999":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-05T07:53:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770406]"]},"2000":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-05T07:56:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770055]"]},"2001":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-05T08:06:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770052]"]},"2003":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-05T08:18:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770143]"]},"2004":{"ocel:activity":"check references","ocel:timestamp":"2019-07-05T08:32:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770289]"]},"2005":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-05T08:32:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770253]"]},"2006":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-05T08:39:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770257]"]},"2007":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-05T09:11:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770330]"]},"2008":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-05T09:20:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770411]"]},"2009":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-05T09:33:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770115]"]},"2010":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-05T10:11:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770310]"]},"2011":{"ocel:activity":"check references","ocel:timestamp":"2019-07-05T10:14:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770364]"]},"2012":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-05T10:24:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770394]"]},"2013":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-05T10:25:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770412]"]},"2014":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-05T10:25:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770310]"]},"2015":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-05T11:20:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770383]"]},"2016":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-05T11:35:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770202]"]},"2017":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-05T11:36:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770413]"]},"2018":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-05T12:03:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770208]"]},"2019":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-05T12:13:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770359]"]},"2020":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-05T12:30:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770123]"]},"2021":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-05T12:43:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770185]"]},"2022":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-05T12:44:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770401]"]},"2023":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-05T12:45:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770285]"]},"2024":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-05T12:56:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770414]"]},"2026":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-05T13:09:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770311]"]},"2027":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-05T13:09:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770159]"]},"2028":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-05T13:12:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770403]"]},"2029":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-05T13:34:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770386]"]},"2030":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-05T13:44:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770071]"]},"2031":{"ocel:activity":"check references","ocel:timestamp":"2019-07-05T13:56:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770319]"]},"2032":{"ocel:activity":"check references","ocel:timestamp":"2019-07-05T13:56:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770255]"]},"2033":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-05T14:35:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770339]"]},"2034":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-05T14:37:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770415]"]},"2036":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-05T15:09:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770325]"]},"2037":{"ocel:activity":"check references","ocel:timestamp":"2019-07-05T15:23:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770299]"]},"2038":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-05T15:37:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770289]"]},"2039":{"ocel:activity":"check references","ocel:timestamp":"2019-07-05T15:38:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770305]"]},"2040":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-05T15:58:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770416]"]},"2041":{"ocel:activity":"check references","ocel:timestamp":"2019-07-05T16:10:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770282]"]},"2042":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-05T16:23:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770401]"]},"2043":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-05T16:57:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770173]","Offer[[990010]]"]},"2044":{"ocel:activity":"check references","ocel:timestamp":"2019-07-05T17:17:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770361]"]},"2045":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-05T17:24:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770067]"]},"2046":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-05T17:41:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770285]"]},"2047":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-05T17:41:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770417]"]},"2048":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-05T19:47:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770393]"]},"2049":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-05T19:51:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770418]"]},"2050":{"ocel:activity":"check references","ocel:timestamp":"2019-07-05T20:27:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770292]"]},"2052":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-06T05:19:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770216]"]},"2053":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-06T05:19:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770154]"]},"2054":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-06T05:19:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770316]"]},"2055":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-06T05:43:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770419]"]},"2057":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-06T13:24:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770136]"]},"2058":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-06T13:24:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770249]"]},"2059":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-06T13:24:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770113]"]},"2060":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-06T13:24:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770160]"]},"2061":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-06T13:24:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770163]"]},"2062":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-06T13:24:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770203]"]},"2063":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-06T14:35:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770420]"]},"2065":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-07T06:42:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770233]"]},"2066":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-07T06:42:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770177]"]},"2067":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-07T06:42:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770168]"]},"2068":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-07T06:42:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770314]"]},"2069":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-07T06:42:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770260]"]},"2070":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-07T09:09:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770421]"]},"2072":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-07T14:12:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770236]"]},"2073":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-07T14:12:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770179]"]},"2074":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-07T16:42:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770422]"]},"2076":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T03:42:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770423]"]},"2077":{"ocel:activity":"check references","ocel:timestamp":"2019-07-08T06:26:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770152]"]},"2078":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T06:26:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770391]"]},"2079":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-08T06:33:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770332]"]},"2080":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T07:27:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770268]"]},"2081":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-08T07:28:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770372]"]},"2082":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-08T07:33:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770392]"]},"2083":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T07:42:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770424]"]},"2084":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-08T07:47:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770033]"]},"2085":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-08T08:00:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770083]"]},"2086":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-08T08:06:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770319]"]},"2087":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T08:08:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770419]"]},"2088":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T08:11:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770352]"]},"2089":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T08:13:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770154]"]},"2090":{"ocel:activity":"check references","ocel:timestamp":"2019-07-08T08:15:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770311]"]},"2091":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T08:30:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770335]"]},"2092":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-08T08:44:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770297]"]},"2093":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-08T08:46:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770363]"]},"2094":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T08:49:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770376]"]},"2095":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-08T08:51:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770391]"]},"2096":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T08:51:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770336]"]},"2097":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T09:09:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770425]"]},"2098":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T09:14:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770351]"]},"2099":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T09:26:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770327]"]},"2100":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-08T09:42:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770267]"]},"2101":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T09:44:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770322]"]},"2102":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-08T09:47:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770224]"]},"2103":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T09:54:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770426]"]},"2104":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T09:54:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770163]"]},"2105":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-08T10:00:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770285]"]},"2106":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-08T10:04:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770243]"]},"2107":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T10:06:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770358]"]},"2108":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-08T10:07:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770214]"]},"2109":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T10:29:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770201]"]},"2110":{"ocel:activity":"check references","ocel:timestamp":"2019-07-08T10:31:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770403]"]},"2111":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T10:32:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770407]"]},"2112":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T10:49:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770388]"]},"2113":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-08T11:07:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770276]"]},"2114":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T11:32:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770427]"]},"2115":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-08T11:41:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770226]"]},"2116":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T11:42:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770350]"]},"2117":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T12:00:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770116]"]},"2118":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-08T12:29:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770335]"]},"2119":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-08T12:33:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770358]"]},"2120":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-08T12:34:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770335]"]},"2121":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-08T12:47:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770165]"]},"2122":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T12:50:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770428]"]},"2123":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T12:53:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770311]"]},"2124":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-08T12:53:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770282]"]},"2125":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-08T13:01:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770123]","Offer[[990011]]"]},"2126":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T13:08:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770389]"]},"2127":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T13:09:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770420]"]},"2129":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T13:14:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770283]"]},"2130":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-08T13:20:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770340]"]},"2131":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-08T13:24:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770179]"]},"2132":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-08T13:30:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770177]"]},"2133":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-08T13:32:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770246]"]},"2134":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-08T13:41:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770386]"]},"2135":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-08T13:43:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770188]"]},"2136":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T13:43:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770203]"]},"2137":{"ocel:activity":"check references","ocel:timestamp":"2019-07-08T14:21:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770176]"]},"2138":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-08T14:22:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770327]"]},"2139":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T14:23:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770360]"]},"2140":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T14:24:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770429]"]},"2141":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-08T14:24:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770094]","Offer[[990012]]"]},"2142":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T14:26:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770378]"]},"2143":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-08T14:35:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770388]"]},"2144":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T14:36:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770415]"]},"2145":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-08T14:38:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770129]"]},"2146":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-08T14:44:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770362]"]},"2147":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T14:50:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770275]"]},"2148":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-08T15:05:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770312]"]},"2149":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-08T15:10:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770065]"]},"2150":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T15:22:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770312]"]},"2151":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-08T15:23:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770389]"]},"2152":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T15:32:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770430]"]},"2153":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-08T15:33:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770138]"]},"2154":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-08T15:36:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770414]"]},"2155":{"ocel:activity":"check references","ocel:timestamp":"2019-07-08T16:07:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770365]"]},"2156":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-08T16:22:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770098]"]},"2157":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-08T16:23:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770322]"]},"2158":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-08T16:36:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770233]"]},"2159":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-08T16:41:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770276]","Offer[[990013]]"]},"2160":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-08T16:44:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770406]"]},"2161":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T16:50:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770431]"]},"2162":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-08T17:10:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770242]"]},"2163":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-08T18:31:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770327]","Offer[[990014]]"]},"2164":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-08T18:35:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770001]","Offer[[990009]]"]},"2165":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T18:59:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770432]"]},"2166":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-08T20:15:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770400]"]},"2167":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-08T21:27:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770433]"]},"2168":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T05:18:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770434]"]},"2170":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-09T06:11:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770086]"]},"2171":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-09T06:26:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770249]"]},"2172":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-09T06:37:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770120]"]},"2173":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T07:26:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770419]"]},"2174":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T07:28:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770435]"]},"2175":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-09T07:31:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770160]"]},"2176":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T08:10:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770360]"]},"2177":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T08:16:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770184]"]},"2178":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-09T08:17:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770393]"]},"2179":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-09T08:23:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770046]"]},"2180":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T08:32:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770415]"]},"2181":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T08:41:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770436]"]},"2182":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-09T08:55:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770292]"]},"2183":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-09T09:04:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770351]"]},"2184":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-09T09:43:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770187]"]},"2185":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-09T10:00:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770381]"]},"2186":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-09T10:06:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770348]"]},"2187":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T10:07:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770437]"]},"2189":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-09T10:07:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770145]"]},"2190":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-09T10:07:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770221]"]},"2191":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-09T10:16:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770261]"]},"2192":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T10:22:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770414]"]},"2193":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T10:23:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770281]"]},"2194":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-09T10:28:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770275]"]},"2195":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-09T10:35:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770104]"]},"2196":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-09T10:35:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770265]"]},"2197":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T10:51:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770438]"]},"2198":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-09T10:54:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770336]"]},"2199":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-09T10:57:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770299]"]},"2200":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T11:06:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770407]"]},"2201":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-09T11:19:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770221]"]},"2202":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-09T11:30:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770260]"]},"2203":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-09T11:34:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770067]"]},"2204":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-09T11:41:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770271]"]},"2205":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T11:57:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770378]"]},"2206":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-09T12:03:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770390]"]},"2207":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T12:27:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770439]"]},"2208":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-09T12:36:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770165]"]},"2209":{"ocel:activity":"check references","ocel:timestamp":"2019-07-09T12:42:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770359]"]},"2210":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T12:51:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770352]"]},"2211":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-09T12:58:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770064]"]},"2212":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-09T13:29:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770095]"]},"2213":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-09T13:29:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770402]"]},"2215":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-09T13:34:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770420]"]},"2216":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T13:39:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770440]"]},"2217":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-09T13:59:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770265]"]},"2218":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-09T14:01:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770255]"]},"2219":{"ocel:activity":"check references","ocel:timestamp":"2019-07-09T14:05:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770110]"]},"2220":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-09T14:06:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770289]"]},"2221":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-09T14:16:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770110]"]},"2222":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-09T14:22:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770152]"]},"2223":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T14:40:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770376]"]},"2224":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-09T14:42:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770145]"]},"2225":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-09T14:52:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770046]"]},"2226":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T15:02:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770441]"]},"2227":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-09T15:33:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770432]"]},"2228":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T15:46:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770442]"]},"2229":{"ocel:activity":"check references","ocel:timestamp":"2019-07-09T16:06:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770332]"]},"2230":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-09T16:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770409]"]},"2231":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-09T16:25:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770208]","Offer[[990015]]"]},"2232":{"ocel:activity":"check references","ocel:timestamp":"2019-07-09T16:44:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770333]"]},"2233":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-09T17:03:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770216]"]},"2234":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T17:17:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770443]"]},"2235":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-09T18:31:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770281]"]},"2236":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-09T19:01:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770026]"]},"2237":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T19:04:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770444]"]},"2238":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-09T19:54:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770373]"]},"2239":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-09T20:37:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770445]"]},"2240":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T03:07:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770446]"]},"2241":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T06:42:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770068]"]},"2242":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T07:01:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770447]"]},"2243":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-10T07:04:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770381]"]},"2244":{"ocel:activity":"check references","ocel:timestamp":"2019-07-10T07:09:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770360]"]},"2246":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-10T07:23:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770396]"]},"2247":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T07:33:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770185]"]},"2248":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T07:42:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770112]"]},"2249":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T07:46:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770448]"]},"2250":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-10T08:44:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770319]"]},"2251":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-10T08:44:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770409]"]},"2252":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T08:48:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770306]"]},"2253":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T08:51:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770135]"]},"2254":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T08:54:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770104]"]},"2255":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T09:09:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770095]"]},"2256":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-10T09:14:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770273]"]},"2257":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T09:16:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770449]"]},"2258":{"ocel:activity":"check references","ocel:timestamp":"2019-07-10T09:17:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770321]"]},"2259":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T09:29:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770238]"]},"2260":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T09:30:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770236]"]},"2261":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-10T09:45:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770350]"]},"2262":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-10T10:05:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770120]","Offer[[990016]]"]},"2263":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-10T10:10:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770325]"]},"2264":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-10T10:11:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770065]","Offer[[990017]]"]},"2265":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T10:17:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770450]"]},"2266":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T11:18:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770451]"]},"2268":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-10T11:35:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770228]"]},"2269":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-10T11:58:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770245]"]},"2270":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-10T12:12:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770402]"]},"2271":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T12:22:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770452]"]},"2272":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T12:54:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770178]"]},"2273":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-10T13:25:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770383]"]},"2274":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T13:28:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770453]"]},"2275":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-10T13:42:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770255]"]},"2276":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-10T13:43:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770388]"]},"2277":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-10T13:53:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770391]"]},"2279":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T14:11:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770245]"]},"2280":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-10T14:19:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770080]"]},"2281":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-10T14:25:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770338]"]},"2282":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T14:28:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770376]"]},"2283":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T14:41:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770454]"]},"2284":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-10T14:59:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770090]"]},"2285":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-10T15:01:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770348]"]},"2286":{"ocel:activity":"check references","ocel:timestamp":"2019-07-10T15:02:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770281]"]},"2287":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-10T15:18:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770441]"]},"2288":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-10T15:23:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770431]"]},"2289":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-10T15:26:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770372]"]},"2290":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-10T15:27:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770285]"]},"2291":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-10T15:34:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770370]"]},"2292":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-10T15:44:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770387]"]},"2293":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T16:07:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770455]"]},"2294":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T16:52:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770456]"]},"2295":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-10T16:56:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770348]"]},"2296":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-10T17:05:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770327]","Offer[[990014]]"]},"2297":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T19:05:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770457]"]},"2298":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-10T19:18:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770429]"]},"2300":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-10T20:03:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770288]"]},"2301":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-10T20:38:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770458]"]},"2302":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T03:15:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770459]"]},"2303":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T07:10:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770449]"]},"2304":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T07:10:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770460]"]},"2306":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-11T07:27:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770387]"]},"2307":{"ocel:activity":"check references","ocel:timestamp":"2019-07-11T07:28:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770285]"]},"2308":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T07:31:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770320]"]},"2309":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-11T07:37:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770214]"]},"2310":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-11T07:51:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770292]"]},"2311":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T07:55:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770461]"]},"2312":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T07:58:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770275]"]},"2313":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T08:10:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770454]"]},"2314":{"ocel:activity":"check references","ocel:timestamp":"2019-07-11T08:11:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770402]"]},"2315":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T08:20:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770423]"]},"2316":{"ocel:activity":"check references","ocel:timestamp":"2019-07-11T08:27:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770184]"]},"2317":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T08:43:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770384]"]},"2318":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T08:53:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770404]"]},"2319":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T08:57:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770370]"]},"2320":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T08:58:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770390]"]},"2321":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-11T09:02:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770251]"]},"2322":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-11T09:11:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770333]"]},"2323":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T09:15:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770430]"]},"2324":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-11T09:26:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770271]"]},"2325":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-11T09:33:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770273]"]},"2326":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T09:34:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770462]"]},"2327":{"ocel:activity":"check references","ocel:timestamp":"2019-07-11T09:40:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770369]"]},"2328":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T09:40:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770393]"]},"2329":{"ocel:activity":"check references","ocel:timestamp":"2019-07-11T09:52:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770419]"]},"2330":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T09:54:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770427]"]},"2331":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-11T09:55:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770365]"]},"2332":{"ocel:activity":"check references","ocel:timestamp":"2019-07-11T10:14:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770335]"]},"2333":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-11T10:16:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770187]"]},"2334":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-11T10:26:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770352]"]},"2335":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-11T10:27:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770255]"]},"2336":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-11T10:28:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770272]"]},"2337":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T10:29:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770432]"]},"2338":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T10:51:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770382]"]},"2339":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T10:54:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770463]"]},"2340":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T10:54:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770416]"]},"2341":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T11:04:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770423]"]},"2342":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-11T11:12:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770099]"]},"2343":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-11T11:32:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770427]"]},"2345":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-11T11:49:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770218]"]},"2346":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-11T11:49:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770342]"]},"2347":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-11T11:49:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770184]"]},"2348":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T11:51:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770404]"]},"2349":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T12:32:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770464]"]},"2350":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T12:44:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770456]"]},"2351":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-11T13:04:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770157]"]},"2352":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T13:06:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770351]"]},"2353":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-11T13:07:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770332]"]},"2354":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T13:11:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770401]"]},"2355":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T13:23:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770431]"]},"2356":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T13:37:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770429]"]},"2357":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T13:40:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770444]"]},"2358":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T13:42:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770345]"]},"2359":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-11T13:49:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770285]"]},"2360":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T13:49:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770465]"]},"2361":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T13:55:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770462]"]},"2363":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-11T14:41:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770228]"]},"2364":{"ocel:activity":"check references","ocel:timestamp":"2019-07-11T14:49:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770278]"]},"2365":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-11T14:56:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770261]"]},"2366":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T15:09:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770461]"]},"2367":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-11T15:20:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770035]"]},"2368":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T15:24:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770466]"]},"2369":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-11T15:25:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770141]"]},"2370":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T15:32:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770440]"]},"2371":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-11T15:33:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770256]"]},"2372":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-11T15:42:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770428]"]},"2373":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T16:13:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770462]"]},"2374":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T16:32:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770467]"]},"2375":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-11T16:42:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770159]"]},"2376":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T16:50:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770416]"]},"2377":{"ocel:activity":"check references","ocel:timestamp":"2019-07-11T16:53:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770394]"]},"2378":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T18:06:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770468]"]},"2379":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T18:30:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770430]"]},"2380":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T19:41:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770469]"]},"2381":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-11T19:46:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770273]"]},"2383":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-11T20:46:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770353]"]},"2384":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-11T20:46:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770286]"]},"2385":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-11T20:46:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770223]"]},"2386":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-11T20:46:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770206]"]},"2387":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-11T22:34:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770470]"]},"2388":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T06:33:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770471]"]},"2389":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-12T06:47:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770454]"]},"2390":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-12T06:49:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770188]"]},"2391":{"ocel:activity":"check references","ocel:timestamp":"2019-07-12T07:05:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770391]"]},"2392":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-12T07:17:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770170]","Offer[[990007]]"]},"2393":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-12T07:21:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770156]"]},"2394":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-12T07:31:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770441]"]},"2395":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-12T07:45:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770316]"]},"2397":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-12T07:50:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770382]"]},"2398":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T08:04:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770472]"]},"2399":{"ocel:activity":"check references","ocel:timestamp":"2019-07-12T08:19:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770388]"]},"2400":{"ocel:activity":"check references","ocel:timestamp":"2019-07-12T08:47:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770392]"]},"2401":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T08:48:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770473]"]},"2402":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-12T08:52:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770285]"]},"2403":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-12T08:55:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770445]"]},"2404":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-12T09:01:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770288]"]},"2405":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-12T09:04:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770219]"]},"2406":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-12T09:16:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770458]"]},"2407":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-12T09:41:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770426]"]},"2408":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-12T09:42:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770212]"]},"2409":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-12T10:08:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770345]"]},"2410":{"ocel:activity":"check references","ocel:timestamp":"2019-07-12T10:09:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770247]"]},"2411":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-12T10:09:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770184]"]},"2412":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T10:21:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770474]"]},"2413":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-12T10:33:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770365]"]},"2414":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-12T10:48:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770322]"]},"2415":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T11:27:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770475]"]},"2416":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-12T12:06:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770110]"]},"2417":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-12T12:18:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770115]"]},"2418":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-12T12:21:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770455]"]},"2419":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T12:38:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770476]"]},"2420":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-12T12:40:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770156]"]},"2421":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-12T12:53:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770468]"]},"2423":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-12T12:55:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770137]"]},"2424":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-12T12:59:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770334]"]},"2425":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-12T13:06:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770307]"]},"2426":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-12T13:13:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770449]"]},"2427":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-12T13:14:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770374]"]},"2428":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-12T13:15:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770461]"]},"2429":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-12T13:25:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770455]"]},"2430":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-12T13:26:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770416]"]},"2431":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-12T13:39:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770321]"]},"2432":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-12T13:41:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770440]"]},"2433":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-12T13:51:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770285]","Offer[[990018]]"]},"2434":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T14:01:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770477]"]},"2435":{"ocel:activity":"check references","ocel:timestamp":"2019-07-12T14:18:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770429]"]},"2436":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-12T14:26:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770320]"]},"2437":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-12T14:35:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770221]"]},"2438":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-12T14:36:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770428]"]},"2439":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-12T14:40:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770255]"]},"2440":{"ocel:activity":"check references","ocel:timestamp":"2019-07-12T14:41:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770370]"]},"2441":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T14:45:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770478]"]},"2442":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-12T14:55:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770265]"]},"2443":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-12T15:08:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770080]"]},"2444":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-12T15:08:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770319]"]},"2445":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-12T15:10:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770409]"]},"2447":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-12T15:39:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770328]"]},"2448":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-12T16:15:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770164]"]},"2449":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T16:15:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770479]"]},"2450":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-12T17:04:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770156]"]},"2451":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T17:15:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770480]"]},"2452":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-12T18:43:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770384]"]},"2453":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T19:00:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770481]"]},"2454":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-12T20:07:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770468]"]},"2455":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-12T20:29:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770482]"]},"2457":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-13T03:38:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770361]"]},"2458":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-13T03:38:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770252]"]},"2459":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-13T03:38:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770259]"]},"2460":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-13T03:38:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770194]"]},"2461":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-13T10:03:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770483]"]},"2463":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-13T13:33:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770263]"]},"2464":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-13T13:33:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770239]"]},"2465":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-13T13:33:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770294]"]},"2466":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-13T13:33:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770229]"]},"2467":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-13T17:58:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770484]"]},"2469":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-14T07:09:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770227]"]},"2470":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-14T07:09:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770270]"]},"2471":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-14T12:26:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770485]"]},"2473":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-14T13:58:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770241]"]},"2474":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-14T13:58:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770277]"]},"2475":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-14T13:58:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770264]"]},"2476":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-14T23:10:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770486]"]},"2478":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T06:17:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770487]"]},"2479":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T06:30:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770431]"]},"2480":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T06:53:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770380]"]},"2481":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T07:01:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770366]"]},"2482":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T07:05:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770416]"]},"2483":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T07:12:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770471]"]},"2484":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T07:27:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770035]"]},"2485":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T07:39:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770340]"]},"2486":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T07:39:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770488]"]},"2487":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T07:46:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770432]"]},"2488":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-15T07:49:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770456]"]},"2489":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-15T07:49:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770201]"]},"2490":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-15T08:06:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770336]"]},"2491":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T08:06:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770294]"]},"2492":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T08:10:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770482]"]},"2493":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T08:22:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770483]"]},"2494":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T08:24:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770256]"]},"2495":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-15T08:31:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770241]"]},"2496":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T08:46:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770485]"]},"2497":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T09:04:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770489]"]},"2498":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T09:06:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770297]"]},"2499":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-15T09:07:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770444]"]},"2500":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T09:12:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770417]"]},"2501":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T09:37:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770390]"]},"2502":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-15T09:41:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770291]"]},"2503":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T09:42:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770473]"]},"2504":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T09:48:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770490]"]},"2505":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-15T10:00:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770328]"]},"2506":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T10:01:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770319]"]},"2507":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-15T10:04:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770223]"]},"2508":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T10:10:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770141]"]},"2509":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-15T10:17:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770120]","Offer[[990016]]"]},"2510":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T10:21:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770336]"]},"2511":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T10:24:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770274]"]},"2512":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-15T10:53:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770213]"]},"2513":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T11:21:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770491]"]},"2514":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T11:48:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770423]"]},"2515":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-15T11:57:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770456]"]},"2516":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T12:06:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770298]"]},"2517":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T12:20:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770263]"]},"2518":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T12:26:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770459]"]},"2519":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T12:26:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770492]"]},"2520":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-15T12:40:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770458]"]},"2521":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-15T12:46:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770281]"]},"2522":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-15T12:57:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770298]"]},"2523":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T13:01:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770275]"]},"2524":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-15T13:07:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770353]"]},"2526":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-15T13:12:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770473]"]},"2527":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T13:21:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770325]"]},"2528":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T13:31:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770291]"]},"2529":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T13:37:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770493]"]},"2530":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T13:41:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770259]"]},"2531":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-15T13:52:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770428]"]},"2532":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T13:56:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770454]"]},"2533":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-15T14:12:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770223]"]},"2534":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T14:18:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770415]"]},"2535":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-15T14:57:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770420]"]},"2536":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T14:59:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770494]"]},"2537":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-15T15:08:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770426]"]},"2538":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T15:09:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770043]"]},"2539":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-15T15:10:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770208]","Offer[[990015]]"]},"2540":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-15T15:12:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770257]"]},"2541":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T15:18:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770348]"]},"2542":{"ocel:activity":"check references","ocel:timestamp":"2019-07-15T15:33:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770393]"]},"2543":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-15T15:34:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770213]","Offer[[990019]]"]},"2544":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-15T15:43:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770328]"]},"2545":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-15T16:01:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770359]"]},"2546":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-15T16:07:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770380]"]},"2547":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-15T16:32:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770416]"]},"2548":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-15T16:32:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770227]"]},"2549":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-15T16:40:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770382]"]},"2550":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T16:43:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770495]"]},"2551":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T16:47:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770494]"]},"2552":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T17:16:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770451]"]},"2553":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T18:39:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770496]"]},"2554":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-15T18:47:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770421]"]},"2555":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-15T20:47:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770497]"]},"2556":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T04:08:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770498]"]},"2558":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-16T06:37:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770294]"]},"2559":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T07:11:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770499]"]},"2560":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-16T07:33:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770219]"]},"2561":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-16T07:40:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770445]"]},"2562":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T07:56:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770500]"]},"2563":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-16T07:57:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770288]"]},"2564":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-16T08:04:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770194]"]},"2565":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-16T08:14:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770299]"]},"2567":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-16T08:34:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770108]"]},"2568":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-16T08:55:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770351]"]},"2569":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-16T09:05:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770366]"]},"2570":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-16T09:09:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770396]"]},"2571":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-16T09:17:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770444]"]},"2572":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T09:36:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770501]"]},"2573":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-16T09:54:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770290]"]},"2574":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-16T10:06:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770282]"]},"2575":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-16T10:07:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770373]"]},"2576":{"ocel:activity":"check references","ocel:timestamp":"2019-07-16T10:22:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770400]"]},"2577":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-16T10:49:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770321]"]},"2578":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T10:57:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770502]"]},"2579":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-16T11:51:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770292]"]},"2580":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-16T11:57:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770483]"]},"2581":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-16T12:04:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770361]"]},"2582":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-16T12:05:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770123]","Offer[[990011]]"]},"2583":{"ocel:activity":"check references","ocel:timestamp":"2019-07-16T12:09:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770273]"]},"2584":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-16T12:37:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770267]"]},"2585":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T12:39:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770503]"]},"2586":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-16T12:41:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770206]"]},"2587":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-16T12:51:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770416]"]},"2588":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-16T12:52:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770160]"]},"2589":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-16T12:56:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770417]"]},"2590":{"ocel:activity":"check references","ocel:timestamp":"2019-07-16T13:03:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770113]"]},"2591":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-16T13:04:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770479]"]},"2592":{"ocel:activity":"check references","ocel:timestamp":"2019-07-16T13:15:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770339]"]},"2593":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-16T13:16:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770485]"]},"2594":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-16T13:20:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770467]"]},"2595":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-16T13:32:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770204]"]},"2596":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-16T13:39:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770481]"]},"2598":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T14:02:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770504]"]},"2599":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-16T14:08:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770386]"]},"2600":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-16T14:08:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770072]"]},"2601":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-16T14:12:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770471]"]},"2602":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-16T14:17:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770168]"]},"2603":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-16T14:20:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770274]"]},"2604":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-16T14:25:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770167]"]},"2605":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-16T14:25:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770136]"]},"2606":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T14:46:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770505]"]},"2607":{"ocel:activity":"check references","ocel:timestamp":"2019-07-16T14:47:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770322]"]},"2608":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-16T14:53:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770194]"]},"2609":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-16T15:08:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770482]"]},"2610":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-16T15:15:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770369]"]},"2611":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-16T15:17:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770143]"]},"2612":{"ocel:activity":"check references","ocel:timestamp":"2019-07-16T15:19:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770440]"]},"2613":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-16T15:31:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770441]"]},"2614":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-16T15:51:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770388]"]},"2615":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-16T15:57:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770184]"]},"2616":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T16:17:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770506]"]},"2617":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-16T16:18:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770221]","Offer[[990020]]"]},"2618":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-16T16:46:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770257]","Offer[[990021]]"]},"2619":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-16T17:04:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770325]"]},"2620":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T17:22:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770507]"]},"2621":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T19:13:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770508]"]},"2622":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-16T19:37:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770459]"]},"2623":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-16T20:01:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770417]"]},"2624":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-16T20:55:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770509]"]},"2625":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T04:55:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770510]"]},"2626":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T07:01:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770462]"]},"2628":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-17T07:47:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770276]","Offer[[990013]]"]},"2629":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T07:57:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770344]"]},"2630":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T08:03:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770511]"]},"2631":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-17T08:05:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770369]"]},"2632":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-17T08:32:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770286]"]},"2633":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-17T08:32:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770345]"]},"2634":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-17T08:34:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770433]"]},"2635":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-17T08:40:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770481]"]},"2636":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T08:47:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770512]"]},"2637":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T08:48:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770204]"]},"2638":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-17T08:49:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770152]"]},"2639":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-17T08:51:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770156]"]},"2640":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-17T09:04:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770380]"]},"2641":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-17T09:23:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770116]"]},"2642":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T09:23:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770156]"]},"2643":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-17T09:26:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770467]"]},"2644":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-17T09:30:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770418]"]},"2645":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T09:33:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770449]"]},"2646":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T09:42:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770252]"]},"2647":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-17T09:47:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770410]"]},"2648":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T10:04:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770138]"]},"2649":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T10:19:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770513]"]},"2650":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T10:55:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770345]"]},"2651":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T11:24:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770514]"]},"2652":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T11:25:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770373]"]},"2653":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-17T11:26:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770496]"]},"2654":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-17T11:37:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770489]"]},"2655":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T11:44:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770362]"]},"2656":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-17T11:46:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770447]"]},"2658":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T11:59:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770383]"]},"2659":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-17T12:09:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770393]"]},"2660":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-17T12:19:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770200]"]},"2661":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-17T12:27:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770494]"]},"2662":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T12:32:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770099]"]},"2663":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T12:32:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770515]"]},"2664":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T12:34:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770378]"]},"2665":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T12:41:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770143]"]},"2666":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T12:54:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770328]"]},"2667":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-17T12:59:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770510]"]},"2668":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T13:00:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770113]"]},"2669":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-17T13:20:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770451]"]},"2670":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T13:28:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770137]"]},"2671":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T13:35:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770404]"]},"2672":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T13:38:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770083]"]},"2673":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T13:49:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770516]"]},"2674":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T13:49:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770223]"]},"2675":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-17T13:54:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770289]"]},"2676":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-17T13:58:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770421]"]},"2677":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-17T14:02:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770387]"]},"2679":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-17T14:12:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770354]"]},"2680":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-17T14:13:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770160]","Offer[[990022]]"]},"2681":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-17T14:38:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770354]"]},"2682":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-17T14:45:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770505]"]},"2683":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T14:47:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770444]"]},"2684":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-17T14:50:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770510]"]},"2685":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-17T14:59:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770247]"]},"2686":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-17T15:02:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770163]"]},"2687":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-17T15:08:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770471]"]},"2688":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T15:17:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770401]"]},"2689":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T15:23:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770517]"]},"2690":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-17T15:28:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770456]"]},"2691":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-17T15:31:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770356]"]},"2692":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T15:31:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770468]"]},"2693":{"ocel:activity":"check references","ocel:timestamp":"2019-07-17T15:51:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770481]"]},"2694":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-17T16:02:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770314]"]},"2695":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T16:30:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770518]"]},"2696":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-17T16:55:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770383]"]},"2697":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T18:01:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770519]"]},"2698":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-17T19:04:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770282]"]},"2699":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-17T19:17:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770247]"]},"2700":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T19:31:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770520]"]},"2701":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-17T19:59:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770288]","Offer[[990023]]"]},"2703":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-17T20:55:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770309]"]},"2704":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-17T20:55:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770278]"]},"2705":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-17T21:34:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770521]"]},"2706":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T05:32:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770522]"]},"2707":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-18T06:43:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770427]"]},"2708":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-18T06:53:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770412]"]},"2709":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-18T07:09:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770506]"]},"2710":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-18T07:11:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770506]"]},"2711":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-18T07:15:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770152]"]},"2712":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-18T07:25:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770175]"]},"2713":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-18T07:30:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770384]"]},"2715":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-18T07:34:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770445]"]},"2716":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T07:44:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770523]"]},"2717":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-18T08:01:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770131]"]},"2718":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-18T08:03:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770145]"]},"2719":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-18T08:18:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770410]"]},"2720":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-18T08:21:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770154]"]},"2721":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-18T08:23:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770388]"]},"2722":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-18T08:24:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770391]"]},"2723":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-18T08:34:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770175]"]},"2724":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-18T08:39:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770430]"]},"2725":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-18T08:55:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770479]"]},"2726":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-18T09:00:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770436]"]},"2727":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-18T09:09:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770206]"]},"2728":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T09:12:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770524]"]},"2729":{"ocel:activity":"check references","ocel:timestamp":"2019-07-18T09:28:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770071]"]},"2730":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-18T09:48:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770442]"]},"2731":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T09:56:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770525]"]},"2732":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-18T10:03:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770391]"]},"2733":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-18T10:14:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770447]"]},"2734":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-18T10:50:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770108]"]},"2735":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-18T11:07:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770072]"]},"2736":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-18T11:24:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770489]"]},"2737":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T11:37:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770526]"]},"2738":{"ocel:activity":"check references","ocel:timestamp":"2019-07-18T12:04:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770200]"]},"2739":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-18T12:33:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770184]","Offer[[990024]]"]},"2740":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-18T12:43:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770492]"]},"2741":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-18T12:58:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770365]"]},"2742":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-18T12:59:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770505]"]},"2743":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T12:59:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770527]"]},"2744":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-18T13:06:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770418]"]},"2745":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-18T13:07:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770340]"]},"2747":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-18T13:08:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770339]"]},"2748":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-18T13:08:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770347]"]},"2749":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-18T13:08:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770404]"]},"2750":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-18T13:08:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770295]"]},"2751":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-18T13:23:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770345]"]},"2752":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-18T13:33:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770218]"]},"2753":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-18T13:42:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770156]"]},"2754":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-18T13:46:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770176]"]},"2755":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-18T13:48:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770314]"]},"2756":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-18T13:51:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770176]"]},"2757":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-18T13:55:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770289]"]},"2758":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-18T13:55:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770347]"]},"2759":{"ocel:activity":"check references","ocel:timestamp":"2019-07-18T13:59:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770427]"]},"2760":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-18T14:06:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770257]","Offer[[990021]]"]},"2761":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T14:43:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770528]"]},"2763":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-18T15:12:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770090]"]},"2764":{"ocel:activity":"check references","ocel:timestamp":"2019-07-18T15:16:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770380]"]},"2765":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-18T15:25:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770488]"]},"2766":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-18T15:38:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770508]"]},"2767":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-18T15:41:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770442]"]},"2768":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T16:11:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770529]"]},"2769":{"ocel:activity":"check references","ocel:timestamp":"2019-07-18T16:35:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770485]"]},"2770":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-18T16:37:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770418]"]},"2771":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-18T16:44:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770384]"]},"2772":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T16:56:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770530]"]},"2773":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-18T17:06:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770451]"]},"2774":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-18T18:13:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770342]"]},"2775":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-18T18:54:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770081]","Offer[[990008]]"]},"2776":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T19:17:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770531]"]},"2777":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-18T19:32:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770200]"]},"2778":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-18T21:03:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770532]"]},"2779":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T04:29:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770533]"]},"2781":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-19T05:07:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770364]"]},"2782":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-19T05:07:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770390]"]},"2783":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-19T05:07:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770248]"]},"2784":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-19T06:46:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770433]"]},"2785":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-19T06:53:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770320]"]},"2786":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-19T07:30:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770274]"]},"2787":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T07:34:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770534]"]},"2788":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-19T07:36:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770356]"]},"2789":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-19T08:00:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770496]"]},"2790":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-19T08:03:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770282]"]},"2791":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-19T08:12:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770305]"]},"2792":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-19T08:16:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770460]"]},"2793":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-19T08:26:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770440]"]},"2794":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-19T08:32:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770167]"]},"2795":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-19T08:47:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770371]"]},"2797":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T08:53:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770535]"]},"2798":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-19T08:56:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770194]","Offer[[990025]]"]},"2799":{"ocel:activity":"check references","ocel:timestamp":"2019-07-19T09:04:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770426]"]},"2800":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-19T09:14:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770353]"]},"2801":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-19T09:15:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770532]"]},"2802":{"ocel:activity":"check references","ocel:timestamp":"2019-07-19T09:30:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770384]"]},"2803":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-19T09:52:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770520]"]},"2804":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-19T10:11:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770206]"]},"2805":{"ocel:activity":"check references","ocel:timestamp":"2019-07-19T10:23:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770338]"]},"2806":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T10:31:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770536]"]},"2807":{"ocel:activity":"check references","ocel:timestamp":"2019-07-19T10:35:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770496]"]},"2808":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-19T10:48:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770339]"]},"2809":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-19T10:54:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770532]"]},"2810":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-19T10:55:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770365]"]},"2811":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T11:48:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770537]"]},"2812":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-19T12:42:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770370]"]},"2813":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-19T12:44:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770145]"]},"2814":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-19T12:47:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770175]"]},"2815":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-19T12:58:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770421]"]},"2816":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-19T13:09:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770434]"]},"2818":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-19T13:11:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770449]"]},"2819":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-19T13:11:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770222]"]},"2820":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-19T13:12:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770229]"]},"2821":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T13:20:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770538]"]},"2822":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-19T13:26:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770391]"]},"2823":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-19T13:28:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770168]"]},"2824":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-19T13:48:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770341]"]},"2825":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-19T14:05:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770160]","Offer[[990022]]"]},"2826":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-19T14:24:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770405]"]},"2827":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T14:25:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770539]"]},"2828":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-19T14:39:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770440]"]},"2829":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-19T14:50:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770309]"]},"2830":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-19T15:20:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770407]"]},"2831":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-19T15:24:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770447]"]},"2832":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T15:34:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770540]"]},"2833":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-19T15:42:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770510]"]},"2834":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-19T16:06:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770176]"]},"2836":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-19T16:33:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770460]"]},"2837":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-19T16:38:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770353]","Offer[[990026]]"]},"2838":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T16:53:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770541]"]},"2839":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-19T17:07:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770264]"]},"2840":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-19T17:07:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770412]"]},"2841":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-19T17:15:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770280]"]},"2842":{"ocel:activity":"check references","ocel:timestamp":"2019-07-19T17:38:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770532]"]},"2843":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-19T17:45:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770338]"]},"2844":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T19:09:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770542]"]},"2845":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-19T19:46:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770281]"]},"2846":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-19T20:48:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770543]"]},"2848":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-20T05:31:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770301]"]},"2849":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-20T11:56:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770544]"]},"2851":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-20T13:37:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770296]"]},"2852":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-21T01:16:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770545]"]},"2854":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-21T07:22:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770444]"]},"2855":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-21T07:22:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770362]"]},"2856":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-21T13:41:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770546]"]},"2858":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-21T14:23:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770313]"]},"2859":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-21T14:23:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770389]"]},"2860":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T00:39:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770547]"]},"2861":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T06:40:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770413]"]},"2862":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T06:48:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770154]"]},"2863":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T07:03:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770536]"]},"2864":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T07:03:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770548]"]},"2866":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-22T07:14:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770313]"]},"2867":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-22T07:28:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770274]"]},"2868":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T07:33:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770379]"]},"2869":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T07:40:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770377]"]},"2870":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-22T07:43:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770436]"]},"2871":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T07:48:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770549]"]},"2872":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T07:56:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770475]"]},"2873":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T07:57:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770520]"]},"2874":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-22T08:01:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770492]"]},"2875":{"ocel:activity":"check references","ocel:timestamp":"2019-07-22T08:09:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770471]"]},"2876":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T08:19:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770405]"]},"2877":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-22T08:30:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770359]"]},"2878":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-22T08:30:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770109]"]},"2879":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T08:36:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770371]"]},"2880":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T08:46:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770270]"]},"2881":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-22T08:48:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770370]"]},"2882":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-22T08:58:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770118]"]},"2883":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-22T09:08:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770475]"]},"2884":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T09:17:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770494]"]},"2885":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T09:20:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770550]"]},"2886":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T09:24:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770363]"]},"2887":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T09:34:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770491]"]},"2888":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-22T09:37:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770382]"]},"2889":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T09:39:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770420]"]},"2890":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T09:48:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770505]"]},"2891":{"ocel:activity":"check references","ocel:timestamp":"2019-07-22T10:04:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770417]"]},"2892":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-22T10:07:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770285]","Offer[[990018]]"]},"2893":{"ocel:activity":"check references","ocel:timestamp":"2019-07-22T10:17:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770433]"]},"2894":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T10:20:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770508]"]},"2895":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-22T10:22:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770218]"]},"2896":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T10:25:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770551]"]},"2897":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-22T11:05:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770414]"]},"2898":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T11:27:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770279]"]},"2899":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T11:35:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770552]"]},"2900":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-22T11:38:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770345]"]},"2901":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T11:44:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770367]"]},"2902":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T11:46:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770298]"]},"2903":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-22T11:53:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770413]"]},"2904":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T11:57:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770488]"]},"2905":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T12:00:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770509]"]},"2906":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-22T12:03:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770387]"]},"2907":{"ocel:activity":"check references","ocel:timestamp":"2019-07-22T12:08:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770421]"]},"2908":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T12:28:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770116]"]},"2909":{"ocel:activity":"check references","ocel:timestamp":"2019-07-22T12:39:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770382]"]},"2910":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T12:40:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770398]"]},"2911":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-22T12:41:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770444]"]},"2912":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-22T12:42:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770398]"]},"2913":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T12:55:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770553]"]},"2914":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-22T13:05:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770322]"]},"2915":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-22T13:11:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770225]"]},"2916":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-22T13:45:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770313]"]},"2918":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T13:51:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770516]"]},"2919":{"ocel:activity":"check references","ocel:timestamp":"2019-07-22T13:52:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770274]"]},"2920":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-22T14:00:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770280]"]},"2921":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T14:08:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770536]"]},"2922":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-22T14:24:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770353]","Offer[[990026]]"]},"2923":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T14:27:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770523]"]},"2924":{"ocel:activity":"check references","ocel:timestamp":"2019-07-22T14:31:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770414]"]},"2925":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-22T14:32:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770071]"]},"2926":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T14:34:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770554]"]},"2927":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-22T14:36:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770241]"]},"2928":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T14:39:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770314]"]},"2929":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-22T14:44:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770364]"]},"2930":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T14:53:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770482]"]},"2931":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T14:57:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770290]"]},"2932":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T14:59:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770418]"]},"2933":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T15:05:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770550]"]},"2934":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T15:10:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770332]"]},"2935":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-22T15:16:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770384]"]},"2936":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T15:22:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770398]"]},"2937":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T15:38:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770201]"]},"2938":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-22T15:53:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770544]"]},"2939":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T15:54:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770555]"]},"2940":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-22T16:03:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770313]","Offer[[990027]]"]},"2941":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-22T16:41:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770413]"]},"2942":{"ocel:activity":"check references","ocel:timestamp":"2019-07-22T16:50:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770298]"]},"2943":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-22T17:29:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770239]"]},"2944":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T17:32:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770556]"]},"2945":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T19:34:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770557]"]},"2946":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-22T21:50:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770558]"]},"2947":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T06:04:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770559]"]},"2948":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-23T07:00:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770228]"]},"2949":{"ocel:activity":"check references","ocel:timestamp":"2019-07-23T07:01:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770387]"]},"2950":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T07:20:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770560]"]},"2951":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-23T07:21:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770350]"]},"2952":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T07:27:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770415]"]},"2953":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T07:41:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770551]"]},"2954":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-23T07:48:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770516]"]},"2956":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T07:52:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770517]"]},"2957":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-23T08:04:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770380]"]},"2958":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T08:25:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770561]"]},"2959":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T08:31:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770556]"]},"2960":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T08:39:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770346]"]},"2961":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-23T08:40:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770222]"]},"2962":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-23T08:52:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770544]"]},"2963":{"ocel:activity":"check references","ocel:timestamp":"2019-07-23T08:59:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770320]"]},"2964":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-23T09:07:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770118]","Offer[[990028]]"]},"2965":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-23T09:16:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770550]"]},"2966":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-23T09:30:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770241]"]},"2967":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T09:32:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770395]"]},"2968":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T09:34:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770562]"]},"2969":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T09:41:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770275]"]},"2970":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-23T09:42:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770491]"]},"2971":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-23T09:57:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770434]"]},"2972":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-23T10:04:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770373]"]},"2973":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T10:07:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770435]"]},"2974":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T10:09:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770552]"]},"2975":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-23T10:28:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770435]"]},"2976":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T10:31:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770529]"]},"2977":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T10:38:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770469]"]},"2978":{"ocel:activity":"check references","ocel:timestamp":"2019-07-23T10:52:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770520]"]},"2979":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T10:53:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770563]"]},"2980":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-23T11:01:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770390]"]},"2981":{"ocel:activity":"check references","ocel:timestamp":"2019-07-23T11:23:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770458]"]},"2983":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T12:09:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770303]"]},"2984":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T12:09:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770406]"]},"2985":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T12:09:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770150]"]},"2986":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T12:09:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770426]"]},"2987":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T12:20:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770427]"]},"2988":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T12:26:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770131]"]},"2989":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-23T12:29:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770509]"]},"2990":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T12:31:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770564]"]},"2991":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T12:31:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770320]"]},"2992":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-23T12:31:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770228]"]},"2993":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T12:32:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770561]"]},"2994":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T12:36:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770479]"]},"2995":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T12:51:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770542]"]},"2996":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T13:00:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770413]"]},"2997":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-23T13:02:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770346]"]},"2998":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-23T13:05:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770366]"]},"2999":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-23T13:08:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770213]","Offer[[990019]]"]},"3000":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-23T13:15:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770295]"]},"3001":{"ocel:activity":"check references","ocel:timestamp":"2019-07-23T13:17:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770389]"]},"3002":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-23T13:20:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770404]"]},"3003":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-23T13:30:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770322]"]},"3004":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-23T13:35:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770416]"]},"3005":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T13:46:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770565]"]},"3006":{"ocel:activity":"check references","ocel:timestamp":"2019-07-23T14:13:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770459]"]},"3007":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-23T14:15:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770469]"]},"3008":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-23T14:19:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770377]"]},"3009":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-23T14:25:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770225]"]},"3010":{"ocel:activity":"check references","ocel:timestamp":"2019-07-23T14:28:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770363]"]},"3011":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-23T14:38:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770055]"]},"3012":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-23T14:47:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770288]","Offer[[990023]]"]},"3013":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-23T15:02:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770184]","Offer[[990024]]"]},"3014":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-23T15:08:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770071]"]},"3015":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T15:17:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770566]"]},"3017":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-23T15:20:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770440]"]},"3018":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-23T15:24:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770379]"]},"3019":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T15:24:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770298]"]},"3020":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T15:26:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770429]"]},"3021":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-23T15:47:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770405]"]},"3022":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-23T16:10:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770296]"]},"3023":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-23T16:12:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770491]"]},"3024":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-23T16:18:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770556]"]},"3025":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T16:18:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770567]"]},"3026":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-23T16:25:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770168]"]},"3027":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T16:30:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770560]"]},"3028":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-23T17:24:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770512]"]},"3029":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T17:25:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770568]"]},"3030":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-23T17:26:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770108]"]},"3031":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T19:18:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770569]"]},"3032":{"ocel:activity":"check references","ocel:timestamp":"2019-07-23T19:54:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770489]"]},"3033":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-23T21:06:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770570]"]},"3034":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T04:35:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770571]"]},"3035":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-24T06:14:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770264]"]},"3036":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T06:29:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770523]"]},"3037":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T06:33:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770248]"]},"3038":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-24T07:04:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770426]"]},"3039":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T07:13:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770478]"]},"3040":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-24T07:27:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770176]","Offer[[990029]]"]},"3041":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-24T07:30:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770393]"]},"3042":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T07:41:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770572]"]},"3043":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T07:54:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770301]"]},"3044":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T07:57:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770539]"]},"3045":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-24T08:06:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770381]"]},"3046":{"ocel:activity":"check references","ocel:timestamp":"2019-07-24T08:06:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770406]"]},"3047":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-24T08:08:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770247]"]},"3048":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T08:12:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770564]"]},"3049":{"ocel:activity":"check references","ocel:timestamp":"2019-07-24T08:12:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770451]"]},"3050":{"ocel:activity":"check references","ocel:timestamp":"2019-07-24T08:12:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770131]"]},"3051":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-24T08:17:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770367]"]},"3052":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-24T08:20:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770279]"]},"3053":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-24T08:25:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770065]","Offer[[990017]]"]},"3054":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T08:28:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770350]"]},"3055":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T08:38:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770434]"]},"3056":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T08:38:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770552]"]},"3057":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-24T08:39:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770281]","Offer[[990030]]"]},"3058":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T08:43:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770305]"]},"3059":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T08:47:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770571]"]},"3060":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-24T08:48:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770247]","Offer[[990031]]"]},"3062":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T09:04:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770515]"]},"3063":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T09:07:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770573]"]},"3064":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T09:10:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770529]"]},"3065":{"ocel:activity":"check references","ocel:timestamp":"2019-07-24T09:19:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770516]"]},"3066":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T09:21:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770452]"]},"3067":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T09:23:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770452]"]},"3068":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T09:26:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770207]"]},"3069":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T09:35:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770427]"]},"3070":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T09:45:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770410]"]},"3071":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T09:48:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770487]"]},"3072":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T09:51:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770574]"]},"3073":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T10:35:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770391]"]},"3074":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T10:38:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770490]"]},"3075":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-24T10:54:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770265]"]},"3076":{"ocel:activity":"check references","ocel:timestamp":"2019-07-24T11:04:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770409]"]},"3077":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T11:27:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770575]"]},"3078":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-24T11:28:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770131]"]},"3079":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-24T11:32:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770277]"]},"3080":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-24T11:43:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770551]"]},"3082":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-24T12:10:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770509]"]},"3083":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-24T12:19:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770110]"]},"3084":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T12:35:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770539]"]},"3085":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T12:39:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770576]"]},"3086":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T12:41:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770338]"]},"3087":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-24T12:48:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770429]"]},"3088":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T12:52:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770220]"]},"3089":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-24T12:52:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770409]"]},"3090":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T13:10:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770542]"]},"3091":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T13:24:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770517]"]},"3092":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-24T13:24:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770395]"]},"3093":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-24T13:25:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770356]"]},"3094":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T13:55:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770550]"]},"3095":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T14:03:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770577]"]},"3096":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-24T14:05:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770387]"]},"3097":{"ocel:activity":"check references","ocel:timestamp":"2019-07-24T14:20:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770445]"]},"3098":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-24T14:21:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770409]"]},"3099":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T14:30:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770537]"]},"3100":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T14:47:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770578]"]},"3101":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-24T14:50:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770561]"]},"3102":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-24T15:03:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770478]"]},"3103":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-24T15:08:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770286]"]},"3104":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T15:13:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770163]"]},"3105":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-24T15:17:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770312]"]},"3106":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-24T15:17:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770487]"]},"3107":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-24T15:43:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770426]"]},"3108":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T16:05:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770576]"]},"3109":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T16:12:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770109]"]},"3110":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T16:19:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770579]"]},"3112":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-24T16:23:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770311]"]},"3113":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T16:26:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770449]"]},"3114":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-24T16:39:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770455]"]},"3115":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T17:28:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770580]"]},"3116":{"ocel:activity":"check references","ocel:timestamp":"2019-07-24T17:31:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770550]"]},"3117":{"ocel:activity":"check references","ocel:timestamp":"2019-07-24T17:35:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770467]"]},"3118":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T19:25:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770581]"]},"3119":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-24T19:53:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770311]","Offer[[990032]]"]},"3120":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-24T20:07:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770470]"]},"3122":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-24T20:45:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770394]"]},"3123":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-24T21:20:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770582]"]},"3124":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-25T05:04:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770583]"]},"3125":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T06:29:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770317]"]},"3126":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T06:45:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770203]"]},"3127":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-25T06:48:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770303]"]},"3128":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-25T07:12:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770584]"]},"3129":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-25T07:24:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770110]"]},"3130":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T07:26:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770387]"]},"3131":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-25T07:29:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770550]"]},"3132":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T07:31:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770560]"]},"3133":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-25T07:32:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770094]","Offer[[990012]]"]},"3134":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-25T07:34:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770414]"]},"3135":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-25T07:57:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770585]"]},"3136":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T08:05:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770502]"]},"3137":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T08:13:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770395]"]},"3138":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T08:25:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770548]"]},"3139":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-25T08:34:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770275]"]},"3140":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-25T08:39:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770506]"]},"3141":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T08:40:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770277]"]},"3142":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T08:49:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770354]"]},"3143":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T08:51:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770525]"]},"3144":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-25T08:57:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770382]"]},"3145":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T09:00:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770492]"]},"3146":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-25T09:01:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770278]"]},"3147":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-25T09:15:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770363]"]},"3148":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T09:17:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770570]"]},"3149":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-25T09:38:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770586]"]},"3150":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T09:49:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770339]"]},"3151":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-25T09:49:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770339]","Offer[[990033]]"]},"3152":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T09:54:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770072]"]},"3153":{"ocel:activity":"check references","ocel:timestamp":"2019-07-25T09:57:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770508]"]},"3155":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-25T10:07:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770417]"]},"3156":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T10:09:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770296]"]},"3157":{"ocel:activity":"check references","ocel:timestamp":"2019-07-25T10:12:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770381]"]},"3158":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T10:15:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770219]"]},"3159":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T10:41:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770347]"]},"3160":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T10:46:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770379]"]},"3161":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-25T11:01:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770587]"]},"3162":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T11:04:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770577]"]},"3163":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-25T11:09:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770220]"]},"3164":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-25T11:11:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770515]"]},"3165":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-25T11:22:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770395]"]},"3166":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-25T12:03:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770394]"]},"3167":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T12:13:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770460]"]},"3168":{"ocel:activity":"check references","ocel:timestamp":"2019-07-25T12:20:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770479]"]},"3169":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T12:28:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770244]"]},"3170":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-25T12:33:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770339]","Offer[[990033]]"]},"3171":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-25T12:51:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770244]"]},"3173":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T12:59:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770564]"]},"3174":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-25T13:10:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770512]"]},"3175":{"ocel:activity":"check references","ocel:timestamp":"2019-07-25T13:18:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770529]"]},"3176":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T13:22:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770429]"]},"3177":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T13:30:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770558]"]},"3178":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T13:35:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770470]"]},"3179":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-25T13:40:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770462]"]},"3180":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-25T13:44:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770072]"]},"3181":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-25T13:44:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770588]"]},"3182":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-25T13:53:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770341]"]},"3183":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T14:04:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770498]"]},"3184":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T14:15:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770469]"]},"3185":{"ocel:activity":"check references","ocel:timestamp":"2019-07-25T14:16:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770542]"]},"3186":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-25T14:22:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770576]"]},"3187":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-25T14:22:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770347]"]},"3188":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-25T14:28:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770296]"]},"3189":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T14:47:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770507]"]},"3190":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-25T14:59:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770428]"]},"3191":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T14:59:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770268]"]},"3192":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-25T15:13:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770589]"]},"3193":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-25T15:17:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770577]"]},"3194":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T15:27:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770341]"]},"3195":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-25T15:30:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770460]"]},"3196":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T15:37:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770571]"]},"3197":{"ocel:activity":"check references","ocel:timestamp":"2019-07-25T15:57:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770405]"]},"3198":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-25T15:57:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770590]"]},"3200":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T16:44:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770569]"]},"3201":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-25T16:47:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770525]"]},"3202":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-25T16:57:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770333]"]},"3203":{"ocel:activity":"check references","ocel:timestamp":"2019-07-25T17:28:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770488]"]},"3204":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T17:35:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770575]"]},"3205":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-25T17:39:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770591]"]},"3206":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-25T18:33:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770490]"]},"3207":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-25T19:48:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770592]"]},"3208":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T19:59:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770315]"]},"3209":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-25T20:06:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770176]","Offer[[990029]]"]},"3210":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-25T20:07:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770381]"]},"3211":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-25T20:21:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770464]"]},"3213":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-26T03:13:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770488]"]},"3214":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-26T03:13:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770520]"]},"3215":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-26T06:48:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770514]"]},"3216":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-26T06:49:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770498]"]},"3217":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-26T06:54:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770517]"]},"3218":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-26T06:54:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770593]"]},"3219":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-26T06:57:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770589]"]},"3220":{"ocel:activity":"check references","ocel:timestamp":"2019-07-26T06:58:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770175]"]},"3221":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-26T07:22:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770479]"]},"3222":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-26T07:34:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770405]"]},"3223":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-26T07:36:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770108]","Offer[[990034]]"]},"3224":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-26T08:07:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770515]"]},"3225":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-26T08:19:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770374]"]},"3226":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-26T08:30:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770389]"]},"3227":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-26T08:35:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770594]"]},"3228":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-26T08:46:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770406]"]},"3229":{"ocel:activity":"check references","ocel:timestamp":"2019-07-26T09:01:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770461]"]},"3230":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-26T09:02:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770502]"]},"3231":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-26T09:04:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770392]"]},"3232":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-26T09:24:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770277]","Offer[[990035]]"]},"3233":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-26T09:36:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770220]"]},"3234":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-26T09:37:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770317]"]},"3235":{"ocel:activity":"check references","ocel:timestamp":"2019-07-26T09:38:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770379]"]},"3236":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-26T09:44:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770458]"]},"3237":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-26T09:54:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770264]"]},"3238":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-26T09:55:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770595]"]},"3239":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-26T10:13:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770247]","Offer[[990031]]"]},"3240":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-26T10:22:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770464]"]},"3241":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-26T10:33:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770475]"]},"3243":{"ocel:activity":"check references","ocel:timestamp":"2019-07-26T10:55:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770354]"]},"3244":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-26T11:33:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770579]"]},"3245":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-26T11:35:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770596]"]},"3246":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-26T12:03:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770283]"]},"3247":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-26T12:07:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770362]"]},"3248":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-26T12:25:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770466]"]},"3249":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-26T12:25:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770473]"]},"3250":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-26T12:45:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770514]"]},"3251":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-26T12:55:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770597]"]},"3252":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-26T13:03:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770588]"]},"3253":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-26T13:06:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770537]"]},"3255":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-26T13:06:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770471]"]},"3256":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-26T13:09:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770244]"]},"3257":{"ocel:activity":"check references","ocel:timestamp":"2019-07-26T13:17:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770561]"]},"3258":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-26T13:33:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770367]"]},"3259":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-26T13:37:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770392]"]},"3260":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-26T13:55:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770464]"]},"3261":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-26T13:57:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770328]"]},"3262":{"ocel:activity":"check references","ocel:timestamp":"2019-07-26T14:00:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770525]"]},"3263":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-26T14:02:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770570]"]},"3264":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-26T14:02:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770409]"]},"3265":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-26T14:08:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770462]"]},"3266":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-26T14:12:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770207]"]},"3267":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-26T14:22:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770466]"]},"3268":{"ocel:activity":"check references","ocel:timestamp":"2019-07-26T14:31:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770494]"]},"3269":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-26T14:35:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770598]"]},"3270":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-26T14:39:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770550]"]},"3271":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-26T14:45:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770548]"]},"3272":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-26T14:59:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770527]"]},"3273":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-26T15:01:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770504]"]},"3274":{"ocel:activity":"check references","ocel:timestamp":"2019-07-26T15:15:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770452]"]},"3275":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-26T15:22:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770592]"]},"3276":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-26T15:55:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770599]"]},"3277":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-26T16:06:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770507]"]},"3278":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-26T16:08:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770379]"]},"3279":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-26T16:27:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770562]"]},"3282":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-27T04:38:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770360]"]},"3284":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-27T13:39:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770544]"]},"3286":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-28T07:29:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770419]"]},"3287":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-28T07:29:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770273]"]},"3289":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-29T06:54:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770358]"]},"3290":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T07:24:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770408]"]},"3291":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-29T07:26:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770588]"]},"3292":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-29T07:37:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770280]"]},"3293":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-29T07:44:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770328]"]},"3294":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-29T07:44:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770600]"]},"3295":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-29T07:44:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770387]"]},"3296":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-29T07:45:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770371]"]},"3297":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-29T07:50:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770589]"]},"3298":{"ocel:activity":"check references","ocel:timestamp":"2019-07-29T08:09:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770464]"]},"3299":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T08:14:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770424]"]},"3300":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-29T08:15:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770440]"]},"3302":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T08:38:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770518]"]},"3303":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-29T08:53:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770108]","Offer[[990034]]"]},"3304":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-29T09:02:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770315]"]},"3305":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-29T09:12:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770601]"]},"3306":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-29T09:22:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770592]"]},"3307":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T09:27:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770439]"]},"3308":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-29T09:37:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770504]"]},"3309":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-29T09:53:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770577]"]},"3310":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-29T09:56:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770602]"]},"3311":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T10:39:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770486]"]},"3312":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T10:57:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770513]"]},"3313":{"ocel:activity":"check references","ocel:timestamp":"2019-07-29T11:05:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770564]"]},"3314":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-29T11:12:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770527]"]},"3315":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-29T11:15:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770278]"]},"3316":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T11:18:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770526]"]},"3317":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-29T11:38:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770603]"]},"3318":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T11:38:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770563]"]},"3319":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-29T11:38:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770512]"]},"3320":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-29T11:38:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770575]"]},"3321":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T11:40:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770343]"]},"3322":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-29T11:48:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770322]"]},"3323":{"ocel:activity":"check references","ocel:timestamp":"2019-07-29T11:55:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770395]"]},"3324":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-29T12:04:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770426]","Offer[[990036]]"]},"3325":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-29T12:11:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770513]"]},"3326":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T12:12:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770566]"]},"3327":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-29T12:20:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770419]"]},"3328":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-29T12:23:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770268]","Offer[[990037]]"]},"3329":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T12:51:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770541]"]},"3330":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-29T12:55:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770452]"]},"3331":{"ocel:activity":"check references","ocel:timestamp":"2019-07-29T13:04:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770492]"]},"3332":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-29T13:08:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770405]"]},"3333":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-29T13:24:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770424]"]},"3334":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-29T13:29:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770558]"]},"3335":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-29T13:40:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770526]"]},"3336":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-29T13:45:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770483]"]},"3337":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-29T13:45:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770604]"]},"3338":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-29T13:45:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770369]"]},"3339":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-29T13:54:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770320]"]},"3340":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-29T13:54:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770569]"]},"3341":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T13:56:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770585]"]},"3342":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-29T14:11:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770343]"]},"3343":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-29T14:25:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770359]"]},"3344":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-29T14:30:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770439]"]},"3345":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-29T14:37:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770273]"]},"3346":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T14:43:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770215]"]},"3347":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T14:49:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770411]"]},"3348":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-29T15:15:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770605]"]},"3349":{"ocel:activity":"check references","ocel:timestamp":"2019-07-29T15:19:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770265]"]},"3350":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T15:31:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770534]"]},"3351":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-29T15:36:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770218]"]},"3353":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-29T15:59:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770606]"]},"3354":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-29T16:17:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770233]"]},"3355":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-29T16:34:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770411]"]},"3356":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-29T17:07:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770471]"]},"3357":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-29T17:12:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770341]"]},"3358":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-29T17:27:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770488]"]},"3359":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-29T17:43:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770607]"]},"3360":{"ocel:activity":"check references","ocel:timestamp":"2019-07-29T18:35:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770412]"]},"3361":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-29T19:31:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770385]"]},"3362":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-30T06:17:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770278]","Offer[[990038]]"]},"3363":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T07:02:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770436]"]},"3364":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-30T07:06:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770233]","Offer[[990039]]"]},"3365":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-30T07:08:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770562]"]},"3366":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T07:16:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770466]"]},"3367":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T07:21:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770220]"]},"3368":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T07:30:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770556]"]},"3369":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-30T07:50:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770322]"]},"3370":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-30T07:50:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770608]"]},"3371":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T07:58:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770491]"]},"3372":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-30T08:17:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770415]"]},"3373":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T08:17:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770413]"]},"3374":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T08:33:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770474]"]},"3375":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-30T08:44:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770354]"]},"3376":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T08:52:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770317]"]},"3377":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T08:56:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770579]"]},"3378":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T09:12:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770607]"]},"3379":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-30T09:20:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770486]"]},"3380":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T09:20:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770343]"]},"3381":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T09:24:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770518]"]},"3382":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-30T09:25:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770609]"]},"3383":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-30T09:27:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770405]","Offer[[990040]]"]},"3384":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T09:29:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770553]"]},"3385":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T09:32:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770581]"]},"3387":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T09:41:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770512]"]},"3388":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T09:51:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770355]"]},"3389":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T09:56:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770424]"]},"3390":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-30T09:58:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770563]"]},"3391":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-30T10:04:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770462]"]},"3392":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T10:08:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770580]"]},"3393":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-30T10:17:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770413]"]},"3394":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T10:24:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770490]"]},"3395":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-30T10:34:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770369]"]},"3396":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-30T10:35:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770610]"]},"3397":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T10:40:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770544]"]},"3398":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-30T10:58:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770395]"]},"3399":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T11:04:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770607]"]},"3400":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-30T11:09:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770452]"]},"3401":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-30T11:11:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770277]","Offer[[990035]]"]},"3402":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T11:42:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770441]"]},"3403":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T11:45:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770346]"]},"3404":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-30T12:13:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770359]","Offer[[990041]]"]},"3405":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T12:16:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770547]"]},"3406":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-30T13:06:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770358]"]},"3407":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T13:08:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770526]"]},"3408":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-30T13:11:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770434]"]},"3409":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-30T13:11:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770611]"]},"3410":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T13:15:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770515]"]},"3411":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T13:19:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770601]"]},"3412":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T13:21:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770439]"]},"3413":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T13:52:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770472]"]},"3414":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T13:56:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770527]"]},"3415":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T13:57:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770585]"]},"3416":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T14:00:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770523]"]},"3417":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-30T14:03:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770421]"]},"3418":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-30T14:04:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770385]"]},"3419":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-30T14:04:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770295]"]},"3420":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-30T14:05:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770534]"]},"3421":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-30T14:13:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770131]"]},"3422":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-30T14:13:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770408]"]},"3423":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-30T14:20:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770355]"]},"3424":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T14:27:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770534]"]},"3425":{"ocel:activity":"check references","ocel:timestamp":"2019-07-30T14:30:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770560]"]},"3426":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-30T14:31:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770547]"]},"3428":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-30T14:42:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770402]"]},"3429":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-30T14:53:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770379]"]},"3430":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-30T14:53:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770612]"]},"3431":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-30T14:55:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770541]"]},"3432":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-30T15:32:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770363]"]},"3433":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T15:43:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770557]"]},"3434":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-07-30T16:07:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770278]","Offer[[990038]]"]},"3435":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-30T16:30:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770613]"]},"3436":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-30T16:53:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770558]"]},"3437":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-30T16:56:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770515]"]},"3438":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-30T17:00:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770215]"]},"3440":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T17:05:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770450]"]},"3441":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-30T17:16:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770298]"]},"3442":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-30T17:34:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770530]"]},"3444":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T06:28:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770573]"]},"3445":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-31T06:36:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770366]"]},"3446":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-31T06:36:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770614]"]},"3447":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T07:09:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770563]"]},"3448":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-31T07:25:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770566]"]},"3449":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T07:48:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770513]"]},"3450":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-31T07:55:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770467]"]},"3451":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-31T07:57:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770525]"]},"3452":{"ocel:activity":"check references","ocel:timestamp":"2019-07-31T07:58:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770498]"]},"3453":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T07:59:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770609]"]},"3454":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T08:11:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770474]"]},"3455":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T08:25:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770567]"]},"3456":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-31T08:32:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770317]"]},"3457":{"ocel:activity":"check references","ocel:timestamp":"2019-07-31T08:38:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770490]"]},"3458":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-31T08:43:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770567]"]},"3459":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-31T08:59:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770471]"]},"3460":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-31T09:07:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770395]"]},"3461":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T09:22:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770580]"]},"3462":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-31T09:26:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770360]"]},"3463":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-07-31T10:02:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770311]","Offer[[990032]]"]},"3465":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T10:21:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770495]"]},"3466":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-31T10:42:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770462]"]},"3467":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-31T10:42:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770615]"]},"3468":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T10:42:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770541]"]},"3469":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-31T11:27:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770530]"]},"3470":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-31T11:35:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770472]"]},"3471":{"ocel:activity":"check references","ocel:timestamp":"2019-07-31T11:36:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770539]"]},"3472":{"ocel:activity":"check references","ocel:timestamp":"2019-07-31T11:50:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770513]"]},"3473":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T11:58:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770385]"]},"3474":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T12:06:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770397]"]},"3475":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T12:14:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770570]"]},"3476":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T12:21:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770442]"]},"3477":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T12:30:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770524]"]},"3478":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-31T12:37:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770203]"]},"3479":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-31T12:37:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770616]"]},"3481":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T12:48:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770480]"]},"3482":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T13:00:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770465]"]},"3483":{"ocel:activity":"consult manager","ocel:timestamp":"2019-07-31T13:15:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770475]"]},"3484":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-31T13:28:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770274]"]},"3485":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-31T13:45:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770383]"]},"3486":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-31T13:54:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770283]"]},"3487":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-31T13:58:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770617]"]},"3488":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T14:42:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770573]"]},"3489":{"ocel:activity":"check references","ocel:timestamp":"2019-07-31T15:01:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770475]"]},"3490":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-31T15:11:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770150]"]},"3491":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T15:19:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770497]"]},"3492":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T15:23:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770597]"]},"3493":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-31T15:29:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770553]"]},"3494":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-07-31T15:31:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770414]"]},"3495":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-31T15:41:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770618]"]},"3496":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T15:49:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770547]"]},"3497":{"ocel:activity":"make job offer","ocel:timestamp":"2019-07-31T16:15:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770471]","Offer[[990042]]"]},"3498":{"ocel:activity":"first screening","ocel:timestamp":"2019-07-31T16:20:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770581]"]},"3500":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-07-31T17:30:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770397]"]},"3501":{"ocel:activity":"send rejection","ocel:timestamp":"2019-07-31T18:00:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770421]"]},"3502":{"ocel:activity":"submit application","ocel:timestamp":"2019-07-31T18:00:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770619]"]},"3503":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-07-31T18:31:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770612]"]},"3504":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-07-31T20:04:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770544]"]},"3506":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-01T00:20:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770485]"]},"3507":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-01T00:20:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770423]"]},"3508":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-01T07:10:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770354]"]},"3509":{"ocel:activity":"check references","ocel:timestamp":"2019-08-01T07:17:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770317]"]},"3510":{"ocel:activity":"check references","ocel:timestamp":"2019-08-01T08:04:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770398]"]},"3511":{"ocel:activity":"check references","ocel:timestamp":"2019-08-01T08:13:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770580]"]},"3512":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T08:40:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770478]"]},"3513":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T08:56:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770315]"]},"3514":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-01T09:17:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770544]"]},"3515":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-01T09:20:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770533]"]},"3516":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-01T09:20:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770175]"]},"3517":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-01T09:39:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770535]"]},"3518":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T10:22:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770601]"]},"3519":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T10:34:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770576]"]},"3521":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-01T10:36:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770414]","Offer[[990043]]"]},"3522":{"ocel:activity":"check references","ocel:timestamp":"2019-08-01T11:02:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770410]"]},"3523":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-01T11:21:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770580]"]},"3524":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-01T11:53:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770429]"]},"3525":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-01T11:53:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770620]"]},"3526":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-01T11:54:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770480]"]},"3527":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-01T12:31:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770520]"]},"3528":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-01T12:42:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770450]"]},"3530":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-01T12:55:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770451]"]},"3531":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-01T12:55:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770579]"]},"3532":{"ocel:activity":"check references","ocel:timestamp":"2019-08-01T12:58:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770592]"]},"3533":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T13:06:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770480]"]},"3534":{"ocel:activity":"check references","ocel:timestamp":"2019-08-01T13:07:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770534]"]},"3535":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-01T13:10:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770619]"]},"3536":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-01T13:15:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770577]"]},"3537":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T13:17:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770524]"]},"3538":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-01T13:20:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770463]"]},"3539":{"ocel:activity":"check references","ocel:timestamp":"2019-08-01T13:22:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770356]"]},"3540":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-01T13:31:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770621]"]},"3541":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T13:35:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770609]"]},"3542":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-01T13:50:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770497]"]},"3543":{"ocel:activity":"check references","ocel:timestamp":"2019-08-01T13:55:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770244]"]},"3544":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-01T14:11:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770055]"]},"3545":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-01T14:35:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770467]"]},"3546":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-01T14:46:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770622]"]},"3547":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-01T14:47:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770590]"]},"3548":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T14:57:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770215]"]},"3549":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-01T15:08:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770597]"]},"3550":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-01T15:36:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770535]"]},"3551":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-01T15:38:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770494]"]},"3552":{"ocel:activity":"check references","ocel:timestamp":"2019-08-01T15:40:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770569]"]},"3553":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-01T15:42:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770356]"]},"3554":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-01T15:46:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770333]"]},"3555":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-01T16:09:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770499]"]},"3556":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-01T16:18:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770623]"]},"3557":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T16:31:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770497]"]},"3558":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T16:33:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770472]"]},"3559":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-01T17:23:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770624]"]},"3560":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-01T17:35:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770557]"]},"3562":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-01T19:15:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770312]"]},"3563":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-01T19:15:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770625]"]},"3565":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T03:42:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770398]"]},"3566":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T03:42:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770441]"]},"3567":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T03:42:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770454]"]},"3568":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-02T06:36:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770426]","Offer[[990036]]"]},"3569":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-02T06:51:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770398]"]},"3570":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-02T06:58:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770458]"]},"3571":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-02T06:58:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770626]"]},"3572":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-02T07:09:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770590]"]},"3573":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-02T07:28:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770402]"]},"3574":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-02T07:36:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770562]"]},"3575":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-02T07:57:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770604]"]},"3576":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-02T08:17:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770503]"]},"3577":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-02T08:20:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770571]"]},"3578":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-02T08:31:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770175]"]},"3579":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-02T08:41:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770627]"]},"3580":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-02T09:08:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770454]"]},"3581":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-02T09:10:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770318]"]},"3582":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-02T09:16:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770495]"]},"3583":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-02T09:23:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770612]"]},"3584":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-02T10:08:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770628]"]},"3585":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-02T10:23:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770295]"]},"3586":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-02T10:42:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770397]"]},"3587":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-02T10:52:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770629]"]},"3589":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-02T11:04:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770514]"]},"3590":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T11:15:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770469]"]},"3591":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-02T11:29:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770329]"]},"3592":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-02T11:43:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770383]"]},"3593":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-02T11:54:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770443]"]},"3594":{"ocel:activity":"check references","ocel:timestamp":"2019-08-02T12:05:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770537]"]},"3595":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-02T12:29:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770630]"]},"3596":{"ocel:activity":"check references","ocel:timestamp":"2019-08-02T12:41:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770563]"]},"3597":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-02T12:43:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770623]"]},"3598":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-02T12:46:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770533]"]},"3599":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-02T12:50:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770544]","Offer[[990044]]"]},"3600":{"ocel:activity":"check references","ocel:timestamp":"2019-08-02T13:29:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770215]"]},"3601":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-02T13:31:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770535]"]},"3602":{"ocel:activity":"check references","ocel:timestamp":"2019-08-02T13:32:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770557]"]},"3604":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T13:37:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770403]"]},"3605":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T13:37:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770433]"]},"3606":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T13:37:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770431]"]},"3607":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T13:37:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770496]"]},"3608":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T13:37:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770400]"]},"3609":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T13:37:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770523]"]},"3610":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-02T13:40:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770356]"]},"3611":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-02T13:43:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770476]"]},"3612":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-02T13:55:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770465]"]},"3613":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-02T14:08:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770286]"]},"3614":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-02T14:08:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770631]"]},"3615":{"ocel:activity":"check references","ocel:timestamp":"2019-08-02T14:24:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770377]"]},"3616":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-02T14:38:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770619]"]},"3617":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-02T14:48:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770606]"]},"3618":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-02T14:54:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770485]"]},"3619":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-02T14:56:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770395]","Offer[[990045]]"]},"3620":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-02T15:24:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770131]"]},"3621":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-02T15:24:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770632]"]},"3622":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-02T15:30:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770525]"]},"3623":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-02T15:44:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770355]"]},"3624":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-02T16:06:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770600]"]},"3625":{"ocel:activity":"check references","ocel:timestamp":"2019-08-02T16:16:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770385]"]},"3626":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-02T16:33:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770633]"]},"3627":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-02T16:43:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770562]"]},"3628":{"ocel:activity":"check references","ocel:timestamp":"2019-08-02T17:14:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770505]"]},"3629":{"ocel:activity":"check references","ocel:timestamp":"2019-08-02T17:44:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770576]"]},"3631":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-02T19:34:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770411]"]},"3632":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-02T20:12:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770503]"]},"3634":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-03T07:23:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770556]"]},"3635":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-03T07:23:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770445]"]},"3637":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-03T14:26:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770563]"]},"3638":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-03T14:26:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770466]"]},"3640":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-04T08:08:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770412]"]},"3641":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-04T08:08:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770470]"]},"3643":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-05T07:39:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770601]"]},"3644":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-05T07:39:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770634]"]},"3645":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-05T07:48:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770530]"]},"3646":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-05T08:19:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770612]"]},"3647":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-05T08:21:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770329]"]},"3648":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-05T08:25:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770499]"]},"3649":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-05T08:27:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770575]"]},"3650":{"ocel:activity":"check references","ocel:timestamp":"2019-08-05T08:31:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770527]"]},"3652":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-05T08:49:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770545]"]},"3653":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-05T08:59:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770600]"]},"3654":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-05T09:33:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770435]"]},"3655":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-05T09:46:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770563]"]},"3656":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-05T09:47:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770392]"]},"3657":{"ocel:activity":"check references","ocel:timestamp":"2019-08-05T09:56:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770558]"]},"3658":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-05T10:04:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770479]"]},"3659":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-05T10:05:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770318]"]},"3660":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-05T10:08:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770512]"]},"3661":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-05T10:18:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770556]"]},"3662":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-05T10:18:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770635]"]},"3663":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-05T10:21:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770530]"]},"3664":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-05T10:33:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770511]"]},"3665":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-05T11:22:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770636]"]},"3666":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-05T11:54:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770485]"]},"3667":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-05T12:26:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770582]"]},"3668":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-05T12:27:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770463]"]},"3669":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-05T13:35:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770395]","Offer[[990045]]"]},"3670":{"ocel:activity":"check references","ocel:timestamp":"2019-08-05T13:40:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770573]"]},"3671":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-05T13:47:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770623]"]},"3672":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-05T13:48:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770335]"]},"3673":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-05T13:53:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770604]"]},"3674":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-05T14:01:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770524]"]},"3675":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-05T14:10:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770393]"]},"3676":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-05T14:35:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770471]","Offer[[990042]]"]},"3677":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-05T14:44:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770466]"]},"3678":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-05T14:59:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770441]"]},"3679":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-05T14:59:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770637]"]},"3680":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-05T15:14:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770474]"]},"3681":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-05T15:34:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770551]"]},"3683":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-06T06:29:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770361]"]},"3684":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-06T06:53:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770476]"]},"3685":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-06T06:53:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770419]"]},"3686":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-06T07:21:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770490]"]},"3687":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-06T07:33:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770565]"]},"3688":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-06T07:41:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770616]"]},"3689":{"ocel:activity":"check references","ocel:timestamp":"2019-08-06T07:52:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770585]"]},"3690":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-06T07:54:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770411]"]},"3691":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-06T07:54:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770638]"]},"3692":{"ocel:activity":"check references","ocel:timestamp":"2019-08-06T08:06:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770480]"]},"3693":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-06T08:16:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770494]"]},"3694":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-06T08:16:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770465]"]},"3695":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-06T08:18:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770476]"]},"3696":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-06T08:20:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770545]"]},"3697":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-06T08:21:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770563]"]},"3698":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-06T08:31:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770504]"]},"3699":{"ocel:activity":"check references","ocel:timestamp":"2019-08-06T08:42:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770588]"]},"3700":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-06T08:45:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770565]"]},"3701":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-06T08:46:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770565]"]},"3702":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-06T08:48:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770450]"]},"3703":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-06T09:03:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770442]"]},"3704":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-06T09:18:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770589]"]},"3705":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-06T09:20:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770627]"]},"3707":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-06T09:29:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770317]"]},"3708":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-06T09:32:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770639]"]},"3709":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-06T09:41:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770599]"]},"3710":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-06T09:46:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770564]"]},"3711":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-06T10:06:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770507]"]},"3712":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-06T10:32:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770496]"]},"3713":{"ocel:activity":"check references","ocel:timestamp":"2019-08-06T10:43:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770343]"]},"3714":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-06T10:49:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770640]"]},"3715":{"ocel:activity":"check references","ocel:timestamp":"2019-08-06T10:52:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770562]"]},"3716":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-06T11:00:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770315]"]},"3717":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-06T11:11:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770356]"]},"3718":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-06T12:05:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770544]","Offer[[990044]]"]},"3719":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-06T12:18:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770459]"]},"3720":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-06T12:22:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770641]"]},"3721":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-06T12:25:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770459]"]},"3722":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-06T12:38:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770479]","Offer[[990046]]"]},"3723":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-06T12:44:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770545]"]},"3724":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-06T13:26:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770499]"]},"3725":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-06T13:29:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770642]"]},"3726":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-06T13:29:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770454]"]},"3727":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-06T13:45:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770499]"]},"3728":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-06T13:51:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770443]"]},"3729":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-06T14:35:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770640]"]},"3730":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-06T14:37:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770490]"]},"3731":{"ocel:activity":"check references","ocel:timestamp":"2019-08-06T14:41:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770474]"]},"3732":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-06T14:42:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770643]"]},"3733":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-06T14:54:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770445]"]},"3734":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-06T15:02:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770606]"]},"3735":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-06T15:08:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770400]"]},"3736":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-06T15:10:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770357]"]},"3737":{"ocel:activity":"check references","ocel:timestamp":"2019-08-06T15:38:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770545]"]},"3738":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-06T15:55:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770630]"]},"3739":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-06T16:09:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770644]"]},"3740":{"ocel:activity":"check references","ocel:timestamp":"2019-08-06T16:18:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770547]"]},"3741":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-06T16:27:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770643]"]},"3743":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-06T16:53:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770645]"]},"3745":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-06T17:59:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770481]"]},"3746":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-06T19:10:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770646]"]},"3747":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-06T19:55:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770392]","Offer[[990047]]"]},"3748":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-06T20:05:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770580]"]},"3749":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-06T20:48:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770647]"]},"3750":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-07T07:21:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770602]"]},"3751":{"ocel:activity":"check references","ocel:timestamp":"2019-08-07T07:33:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770623]"]},"3752":{"ocel:activity":"check references","ocel:timestamp":"2019-08-07T07:46:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770524]"]},"3753":{"ocel:activity":"check references","ocel:timestamp":"2019-08-07T08:07:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770207]"]},"3754":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-07T08:10:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770495]"]},"3755":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-07T08:27:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770610]"]},"3756":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-07T08:35:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770221]","Offer[[990020]]"]},"3757":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-07T08:58:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770370]"]},"3758":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-07T09:49:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770446]"]},"3759":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-07T09:53:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770611]"]},"3760":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-07T09:57:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770582]"]},"3761":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-07T10:08:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770594]"]},"3763":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-07T10:35:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770599]"]},"3764":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-07T10:40:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770481]"]},"3765":{"ocel:activity":"check references","ocel:timestamp":"2019-08-07T11:52:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770579]"]},"3766":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-07T12:05:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770611]"]},"3767":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-07T12:09:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770463]"]},"3768":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-07T12:48:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770414]","Offer[[990043]]"]},"3769":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-07T12:50:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770424]"]},"3770":{"ocel:activity":"check references","ocel:timestamp":"2019-08-07T12:56:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770607]"]},"3772":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-07T13:10:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770508]"]},"3773":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-07T13:10:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770468]"]},"3774":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-07T13:10:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770518]"]},"3775":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-07T13:10:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770346]"]},"3776":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-07T13:10:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770526]"]},"3777":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-07T13:31:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770511]"]},"3778":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-07T13:57:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770541]"]},"3779":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-07T14:11:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770408]"]},"3780":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-07T14:25:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770403]"]},"3781":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-07T14:25:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770648]"]},"3782":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-07T14:54:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770433]"]},"3783":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-07T15:31:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770419]","Offer[[990048]]"]},"3784":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-07T15:32:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770485]"]},"3785":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-07T15:36:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770649]"]},"3786":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-07T16:39:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770233]","Offer[[990039]]"]},"3787":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-07T16:56:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770650]"]},"3788":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-07T17:10:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770566]"]},"3790":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-07T19:27:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770523]"]},"3792":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-08T05:28:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770539]"]},"3793":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-08T05:28:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770461]"]},"3794":{"ocel:activity":"check references","ocel:timestamp":"2019-08-08T06:41:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770478]"]},"3795":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-08T07:07:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770625]"]},"3796":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-08T07:09:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770627]"]},"3797":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-08T07:14:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770526]"]},"3798":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-08T07:29:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770279]"]},"3799":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-08T07:30:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770412]"]},"3800":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-08T07:39:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770479]","Offer[[990046]]"]},"3801":{"ocel:activity":"check references","ocel:timestamp":"2019-08-08T08:11:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770541]"]},"3802":{"ocel:activity":"check references","ocel:timestamp":"2019-08-08T08:36:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770518]"]},"3803":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-08T08:56:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770645]"]},"3804":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-08T08:59:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770637]"]},"3805":{"ocel:activity":"check references","ocel:timestamp":"2019-08-08T09:09:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770503]"]},"3806":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-08T09:11:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770222]"]},"3807":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-08T09:20:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770444]"]},"3808":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-08T09:30:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770444]"]},"3809":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-08T09:30:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770651]"]},"3810":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-08T09:32:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770614]"]},"3811":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-08T09:33:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770268]","Offer[[990037]]"]},"3812":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-08T09:46:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770475]"]},"3813":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-08T09:47:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770594]"]},"3814":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-08T10:00:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770359]","Offer[[990041]]"]},"3815":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-08T10:08:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770578]"]},"3816":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-08T10:19:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770219]"]},"3817":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-08T10:29:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770597]"]},"3818":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-08T10:31:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770222]","Offer[[990049]]"]},"3819":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-08T10:32:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770431]"]},"3820":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-08T10:45:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770652]"]},"3821":{"ocel:activity":"check references","ocel:timestamp":"2019-08-08T11:02:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770473]"]},"3823":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-08T11:20:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770393]"]},"3824":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-08T11:52:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770520]"]},"3825":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-08T12:14:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770653]"]},"3826":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-08T12:33:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770625]"]},"3827":{"ocel:activity":"check references","ocel:timestamp":"2019-08-08T12:37:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770219]"]},"3828":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-08T13:07:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770443]"]},"3829":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-08T13:12:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770454]","Offer[[990050]]"]},"3830":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-08T13:20:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770595]"]},"3831":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-08T13:22:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770564]"]},"3832":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-08T13:33:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770616]"]},"3834":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-08T13:33:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770569]"]},"3835":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-08T13:33:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770410]"]},"3836":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-08T13:33:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770561]"]},"3837":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-08T13:39:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770451]"]},"3838":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-08T13:44:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770118]","Offer[[990028]]"]},"3839":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-08T13:49:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770281]","Offer[[990030]]"]},"3840":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-08T14:10:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770489]"]},"3841":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-08T14:58:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770531]"]},"3842":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-08T15:21:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770643]"]},"3843":{"ocel:activity":"check references","ocel:timestamp":"2019-08-08T15:38:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770509]"]},"3844":{"ocel:activity":"check references","ocel:timestamp":"2019-08-08T15:42:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770358]"]},"3845":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-08T16:09:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770294]"]},"3846":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-08T16:22:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770219]"]},"3847":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-08T16:59:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770640]"]},"3848":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-08T18:46:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770644]"]},"3850":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-08T19:01:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770562]"]},"3851":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-08T19:01:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770654]"]},"3852":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-09T06:29:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770375]"]},"3853":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-09T06:50:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770648]"]},"3855":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-09T07:11:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770570]"]},"3856":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-09T07:21:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770637]"]},"3857":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-09T07:28:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770446]"]},"3858":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-09T07:45:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770586]"]},"3859":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-09T07:54:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770614]"]},"3860":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-09T07:58:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770357]"]},"3861":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-09T07:58:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770630]"]},"3862":{"ocel:activity":"check references","ocel:timestamp":"2019-08-09T08:09:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770436]"]},"3863":{"ocel:activity":"check references","ocel:timestamp":"2019-08-09T08:53:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770565]"]},"3864":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-09T08:58:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770551]"]},"3865":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-09T09:45:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770584]"]},"3866":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-09T10:03:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770643]"]},"3867":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-09T10:04:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770539]"]},"3868":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-09T10:10:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770512]"]},"3869":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-09T10:17:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770645]"]},"3870":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-09T10:27:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770610]"]},"3871":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-09T11:17:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770603]"]},"3872":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-09T11:24:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770200]"]},"3873":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-09T11:57:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770423]"]},"3874":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-09T11:57:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770655]"]},"3876":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-09T12:07:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770629]"]},"3877":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-09T12:22:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770583]"]},"3878":{"ocel:activity":"check references","ocel:timestamp":"2019-08-09T12:22:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770346]"]},"3879":{"ocel:activity":"check references","ocel:timestamp":"2019-08-09T12:28:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770609]"]},"3880":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-09T12:41:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770541]"]},"3881":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-09T12:48:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770630]"]},"3882":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-09T13:17:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770443]"]},"3883":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-09T13:27:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770524]"]},"3884":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-09T13:40:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770656]"]},"3885":{"ocel:activity":"check references","ocel:timestamp":"2019-08-09T13:43:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770469]"]},"3886":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-09T13:43:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770580]"]},"3887":{"ocel:activity":"check references","ocel:timestamp":"2019-08-09T13:45:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770599]"]},"3888":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-09T13:45:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770531]"]},"3889":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-09T13:48:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770602]"]},"3891":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-09T14:10:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770578]"]},"3892":{"ocel:activity":"check references","ocel:timestamp":"2019-08-09T14:38:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770566]"]},"3893":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-09T14:41:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770502]"]},"3894":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-09T14:44:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770194]","Offer[[990025]]"]},"3895":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-09T14:46:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770463]"]},"3896":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-09T15:04:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770575]"]},"3897":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-09T15:04:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770657]"]},"3898":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-09T15:49:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770658]"]},"3899":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-09T16:29:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770318]"]},"3900":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-09T19:12:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770620]"]},"3901":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-09T19:14:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770345]"]},"3902":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-09T19:22:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770529]"]},"3906":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-10T14:16:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770355]"]},"3908":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-11T07:48:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770581]"]},"3910":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-11T15:15:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770215]"]},"3911":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-11T15:15:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770532]"]},"3912":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-11T15:15:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770573]"]},"3913":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-12T06:31:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770452]"]},"3914":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-12T06:36:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770526]"]},"3915":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-12T06:53:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770346]"]},"3916":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-12T06:58:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770466]"]},"3917":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T07:11:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770370]"]},"3918":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T07:11:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770659]"]},"3919":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-12T07:12:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770605]"]},"3920":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-12T07:20:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770410]"]},"3921":{"ocel:activity":"check references","ocel:timestamp":"2019-08-12T07:20:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770504]"]},"3922":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-12T07:30:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770620]"]},"3923":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-12T07:44:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770526]","Offer[[990051]]"]},"3924":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-12T07:54:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770461]"]},"3925":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-12T08:07:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770561]"]},"3926":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T08:11:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770606]"]},"3927":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T08:11:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770660]"]},"3928":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-12T08:37:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770518]"]},"3929":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T08:39:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770536]"]},"3930":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T08:55:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770661]"]},"3931":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-12T09:16:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770648]"]},"3932":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-12T09:20:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770220]"]},"3933":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-12T09:44:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770529]"]},"3935":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T09:58:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770294]"]},"3936":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T10:08:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770579]"]},"3937":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-12T10:11:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770548]"]},"3938":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-12T10:25:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770504]"]},"3939":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-12T10:27:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770644]"]},"3940":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T10:35:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770662]"]},"3941":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-12T10:37:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770273]"]},"3942":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T11:54:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770663]"]},"3943":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-12T12:35:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770603]"]},"3944":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T13:06:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770472]"]},"3945":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-12T13:12:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770584]"]},"3946":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-12T13:28:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770438]"]},"3947":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T13:33:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770664]"]},"3948":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T13:33:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770265]"]},"3949":{"ocel:activity":"check references","ocel:timestamp":"2019-08-12T13:47:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770397]"]},"3950":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T13:56:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770345]"]},"3951":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-12T14:07:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770526]","Offer[[990051]]"]},"3952":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-12T14:13:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770653]"]},"3953":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T14:50:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770665]"]},"3954":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T14:57:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770563]"]},"3955":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-12T15:05:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770381]"]},"3956":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-12T15:09:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770384]"]},"3957":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-12T15:29:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770658]"]},"3958":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-12T15:57:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770658]"]},"3959":{"ocel:activity":"check references","ocel:timestamp":"2019-08-12T16:08:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770318]"]},"3960":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T16:26:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770666]"]},"3961":{"ocel:activity":"check references","ocel:timestamp":"2019-08-12T16:33:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770590]"]},"3962":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T16:49:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770508]"]},"3963":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-12T16:55:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770640]"]},"3964":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-12T17:10:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770627]"]},"3966":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T17:46:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770667]"]},"3967":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T20:01:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770668]"]},"3968":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-12T23:34:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770669]"]},"3969":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-13T06:06:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770457]"]},"3970":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-13T06:43:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770215]"]},"3971":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-13T07:31:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770394]"]},"3972":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-13T07:52:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770200]"]},"3973":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-13T07:52:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770670]"]},"3974":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-13T08:04:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770481]"]},"3975":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-13T08:05:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770313]","Offer[[990027]]"]},"3976":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-13T08:13:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770512]"]},"3977":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-13T08:18:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770595]"]},"3978":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-13T08:22:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770664]"]},"3979":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-13T08:43:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770582]"]},"3980":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-13T08:45:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770425]"]},"3981":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-13T08:46:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770466]","Offer[[990052]]"]},"3982":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-13T08:50:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770326]"]},"3983":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-13T08:51:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770207]"]},"3984":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-13T09:25:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770567]"]},"3985":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-13T09:28:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770671]"]},"3986":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-13T09:39:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770358]"]},"3987":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-13T09:53:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770375]"]},"3988":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-13T10:19:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770603]"]},"3989":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-13T10:31:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770422]"]},"3991":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-13T10:48:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770583]"]},"3992":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-13T11:20:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770335]"]},"3993":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-13T11:20:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770672]"]},"3994":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-13T11:50:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770629]"]},"3995":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-13T12:20:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770578]"]},"3996":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-13T12:27:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770452]","Offer[[990053]]"]},"3997":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-13T12:32:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770605]"]},"3998":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-13T12:40:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770518]"]},"3999":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-13T12:52:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770586]"]},"4000":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-13T13:02:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770512]"]},"4001":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-13T13:02:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770673]"]},"4002":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-13T13:27:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770478]"]},"4003":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-13T13:37:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770280]"]},"4004":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-13T13:40:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770496]"]},"4005":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-13T13:43:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770150]"]},"4006":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-13T13:47:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770674]"]},"4007":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-13T14:06:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770641]"]},"4008":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-13T14:23:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770487]"]},"4009":{"ocel:activity":"check references","ocel:timestamp":"2019-08-13T14:27:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770637]"]},"4010":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-13T14:42:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770486]"]},"4011":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-13T15:03:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770468]"]},"4012":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-13T15:18:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770675]"]},"4013":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-13T15:27:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770394]"]},"4014":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-13T16:09:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770646]"]},"4015":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-13T16:16:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770583]"]},"4016":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-13T16:22:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770676]"]},"4017":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-13T16:29:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770384]"]},"4018":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-13T16:47:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770349]"]},"4019":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-13T17:11:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770502]"]},"4020":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-13T17:34:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770677]"]},"4022":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-13T18:58:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770520]","Offer[[990054]]"]},"4023":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-13T19:38:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770678]"]},"4024":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-13T20:15:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770650]"]},"4026":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-13T23:37:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770498]"]},"4027":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-13T23:37:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770590]"]},"4028":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-14T07:09:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770413]"]},"4029":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-14T07:30:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770582]"]},"4030":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-14T07:30:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770679]"]},"4031":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-14T07:38:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770473]"]},"4032":{"ocel:activity":"check references","ocel:timestamp":"2019-08-14T07:52:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770567]"]},"4033":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-14T08:07:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770326]"]},"4034":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-14T08:21:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770481]"]},"4035":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-14T08:43:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770515]"]},"4036":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-14T08:45:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770680]"]},"4037":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-14T08:52:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770425]"]},"4038":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-14T09:08:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770480]"]},"4039":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-14T09:19:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770489]"]},"4040":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-14T09:21:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770364]"]},"4041":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-14T09:25:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770505]"]},"4042":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-14T09:28:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770364]"]},"4043":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-14T09:31:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770597]"]},"4044":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-14T09:32:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770446]"]},"4045":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-14T09:58:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770573]"]},"4046":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-14T10:16:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770681]"]},"4048":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-14T12:15:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770578]"]},"4049":{"ocel:activity":"check references","ocel:timestamp":"2019-08-14T12:28:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770315]"]},"4050":{"ocel:activity":"check references","ocel:timestamp":"2019-08-14T12:29:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770610]"]},"4051":{"ocel:activity":"check references","ocel:timestamp":"2019-08-14T12:39:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770551]"]},"4052":{"ocel:activity":"check references","ocel:timestamp":"2019-08-14T12:44:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770570]"]},"4053":{"ocel:activity":"check references","ocel:timestamp":"2019-08-14T12:47:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770629]"]},"4054":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-14T12:58:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770422]"]},"4055":{"ocel:activity":"check references","ocel:timestamp":"2019-08-14T13:05:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770355]"]},"4057":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-14T13:08:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770516]"]},"4058":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-14T13:41:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770273]"]},"4059":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-14T13:41:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770682]"]},"4060":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-14T13:55:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770349]"]},"4061":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-14T14:21:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770650]"]},"4062":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-14T14:22:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770381]"]},"4063":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-14T14:30:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770326]"]},"4064":{"ocel:activity":"check references","ocel:timestamp":"2019-08-14T14:42:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770643]"]},"4065":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-14T14:44:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770390]"]},"4066":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-14T14:53:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770664]"]},"4067":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-14T15:04:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770419]","Offer[[990048]]"]},"4068":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-14T15:07:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770631]"]},"4069":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-14T15:08:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770683]"]},"4070":{"ocel:activity":"check references","ocel:timestamp":"2019-08-14T15:14:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770578]"]},"4071":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-14T15:23:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770576]"]},"4072":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-14T15:41:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770539]"]},"4073":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-14T15:51:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770677]"]},"4074":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-14T16:13:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770355]"]},"4075":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-14T16:23:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770602]"]},"4076":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-14T18:32:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770680]"]},"4079":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-15T04:57:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770491]"]},"4080":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-15T06:09:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770631]"]},"4081":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-15T06:37:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770279]"]},"4082":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-15T07:23:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770653]"]},"4083":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-15T07:30:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770672]"]},"4084":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-15T07:45:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770570]"]},"4085":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-15T07:46:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770438]"]},"4086":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-15T08:00:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770457]"]},"4087":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-15T08:13:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770641]"]},"4088":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-15T08:22:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770505]"]},"4089":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-15T08:26:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770469]"]},"4090":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-15T08:26:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770684]"]},"4091":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-15T08:58:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770632]"]},"4092":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-15T09:03:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770518]"]},"4093":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-15T09:05:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770489]"]},"4094":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-15T09:30:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770595]"]},"4095":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-15T09:36:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770685]"]},"4096":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-15T10:04:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770514]"]},"4097":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-15T10:07:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770431]"]},"4098":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-15T10:16:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770377]"]},"4099":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-15T10:57:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770686]"]},"4100":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-15T11:04:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770533]"]},"4101":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-15T11:12:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770539]","Offer[[990055]]"]},"4102":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-15T11:32:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770505]"]},"4103":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-15T11:41:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770559]"]},"4104":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-15T12:03:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770565]"]},"4105":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-15T12:38:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770635]"]},"4106":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-15T12:39:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770315]"]},"4107":{"ocel:activity":"check references","ocel:timestamp":"2019-08-15T12:48:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770424]"]},"4109":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-15T13:21:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770497]"]},"4110":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-15T13:21:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770687]"]},"4111":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-15T13:34:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770150]"]},"4112":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-15T13:34:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770663]"]},"4114":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-15T14:00:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770476]"]},"4115":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-15T14:00:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770492]"]},"4116":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-15T14:00:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770592]"]},"4117":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-15T14:00:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770513]"]},"4118":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-15T14:07:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770580]","Offer[[990056]]"]},"4119":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-15T14:10:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770531]"]},"4120":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-15T14:14:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770603]"]},"4121":{"ocel:activity":"check references","ocel:timestamp":"2019-08-15T14:14:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770611]"]},"4122":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-15T14:16:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770487]"]},"4123":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-15T14:16:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770608]"]},"4124":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-15T14:26:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770688]"]},"4125":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-15T14:34:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770488]"]},"4126":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-15T14:34:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770275]"]},"4127":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-15T14:37:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770644]"]},"4128":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-15T14:38:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770392]","Offer[[990047]]"]},"4129":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-15T14:39:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770488]"]},"4130":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-15T14:45:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770298]"]},"4131":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-15T14:53:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770215]"]},"4132":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-15T14:54:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770593]"]},"4133":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-15T15:18:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770683]"]},"4134":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-15T15:37:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770689]"]},"4135":{"ocel:activity":"check references","ocel:timestamp":"2019-08-15T15:53:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770612]"]},"4136":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-15T16:17:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770650]"]},"4137":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-15T16:18:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770676]"]},"4138":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-15T16:19:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770554]"]},"4139":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-15T16:35:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770573]"]},"4140":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-15T16:59:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770690]"]},"4141":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-15T17:32:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770505]","Offer[[990057]]"]},"4142":{"ocel:activity":"check references","ocel:timestamp":"2019-08-15T17:35:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770584]"]},"4143":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-15T17:39:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770424]"]},"4144":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-15T18:59:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770559]"]},"4145":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-15T19:27:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770691]"]},"4146":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-15T19:47:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770612]"]},"4148":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-16T07:05:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770478]"]},"4149":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-16T07:05:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770692]"]},"4150":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-16T07:06:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770661]"]},"4152":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-16T07:15:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770558]"]},"4153":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-16T07:15:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770537]"]},"4154":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-16T07:15:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770450]"]},"4155":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-16T07:35:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770504]"]},"4156":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-16T07:37:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770431]","Offer[[990058]]"]},"4157":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-16T07:43:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770513]"]},"4158":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-16T07:47:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770504]"]},"4159":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-16T07:50:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770693]"]},"4160":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-16T07:55:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770683]"]},"4161":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-16T08:07:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770590]"]},"4162":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-16T08:18:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770680]"]},"4163":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-16T08:29:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770500]"]},"4164":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-16T08:33:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770569]"]},"4165":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-16T08:47:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770532]"]},"4166":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-16T09:08:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770651]"]},"4167":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-16T09:14:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770633]"]},"4168":{"ocel:activity":"check references","ocel:timestamp":"2019-08-16T09:23:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770408]"]},"4169":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-16T09:24:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770694]"]},"4170":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-16T09:51:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770555]"]},"4171":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-16T10:22:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770558]"]},"4172":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-16T10:29:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770646]"]},"4173":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-16T10:30:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770608]"]},"4174":{"ocel:activity":"check references","ocel:timestamp":"2019-08-16T10:48:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770463]"]},"4175":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-16T11:09:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770610]"]},"4176":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-16T12:34:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770653]"]},"4177":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-16T12:34:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770695]"]},"4178":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-16T12:35:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770435]"]},"4179":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-16T12:55:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770592]"]},"4180":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-16T13:12:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770677]"]},"4181":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-16T13:15:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770694]"]},"4182":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-16T13:41:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770580]","Offer[[990056]]"]},"4184":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-16T13:46:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770466]","Offer[[990052]]"]},"4185":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-16T13:52:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770554]"]},"4186":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-16T13:52:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770696]"]},"4187":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-16T14:02:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770537]"]},"4189":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-16T14:09:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770560]"]},"4190":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-16T14:13:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770489]","Offer[[990059]]"]},"4191":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-16T14:17:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770670]"]},"4192":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-16T14:20:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770220]"]},"4193":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-16T14:50:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770633]"]},"4194":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-16T15:30:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770697]"]},"4195":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-16T15:36:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770465]"]},"4196":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-16T15:40:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770555]"]},"4197":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-16T15:50:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770593]"]},"4198":{"ocel:activity":"check references","ocel:timestamp":"2019-08-16T16:02:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770616]"]},"4199":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-16T16:44:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770698]"]},"4200":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-16T17:09:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770632]"]},"4201":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-16T17:12:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770570]"]},"4203":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-17T07:34:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770436]"]},"4204":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-17T07:34:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770397]"]},"4206":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-17T14:47:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770600]"]},"4207":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-17T14:47:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770585]"]},"4210":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-18T08:49:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770648]"]},"4211":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-18T08:49:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770619]"]},"4213":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-18T16:18:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770343]"]},"4214":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-18T16:18:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770244]"]},"4215":{"ocel:activity":"check references","ocel:timestamp":"2019-08-19T06:54:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770465]"]},"4216":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-19T07:05:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770533]"]},"4217":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-19T07:13:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770670]"]},"4218":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-19T07:52:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770560]"]},"4219":{"ocel:activity":"check references","ocel:timestamp":"2019-08-19T08:22:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770446]"]},"4220":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-19T08:23:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770674]"]},"4221":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-19T08:27:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770630]"]},"4222":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-19T08:27:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770699]"]},"4223":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-19T08:29:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770491]"]},"4224":{"ocel:activity":"check references","ocel:timestamp":"2019-08-19T08:58:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770531]"]},"4225":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-19T09:16:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770542]"]},"4226":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-19T09:18:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770692]"]},"4227":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-19T09:22:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770436]"]},"4228":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-19T09:32:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770698]"]},"4229":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-19T09:39:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770646]"]},"4230":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-19T09:42:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770663]"]},"4231":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-19T09:48:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770573]","Offer[[990060]]"]},"4232":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-19T09:54:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770672]"]},"4233":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-19T10:01:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770439]"]},"4234":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-19T10:03:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770657]"]},"4235":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-19T10:27:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770298]"]},"4236":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-19T10:27:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770700]"]},"4237":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-19T10:27:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770568]"]},"4238":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-19T10:54:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770568]"]},"4239":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-19T11:02:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770436]"]},"4241":{"ocel:activity":"check references","ocel:timestamp":"2019-08-19T11:17:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770583]"]},"4242":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-19T11:48:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770692]"]},"4243":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-19T12:26:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770616]"]},"4244":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-19T12:30:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770175]"]},"4245":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-19T12:40:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770671]"]},"4246":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-19T12:42:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770522]"]},"4247":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-19T12:44:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770552]"]},"4248":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-19T12:47:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770594]"]},"4249":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-19T12:47:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770701]"]},"4250":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-19T13:14:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770244]"]},"4251":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-19T13:41:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770318]"]},"4252":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-19T14:09:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770584]"]},"4253":{"ocel:activity":"check references","ocel:timestamp":"2019-08-19T14:10:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770683]"]},"4254":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-19T14:12:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770687]"]},"4255":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-19T14:17:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770547]"]},"4256":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-19T14:19:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770702]"]},"4257":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-19T14:19:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770678]"]},"4258":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-19T14:35:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770464]"]},"4259":{"ocel:activity":"check references","ocel:timestamp":"2019-08-19T14:42:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770608]"]},"4260":{"ocel:activity":"check references","ocel:timestamp":"2019-08-19T14:47:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770658]"]},"4261":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-19T14:51:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770500]"]},"4262":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-19T15:06:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770465]"]},"4263":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-19T15:13:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770398]"]},"4264":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-19T15:22:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770703]"]},"4265":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-19T15:51:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770457]"]},"4266":{"ocel:activity":"check references","ocel:timestamp":"2019-08-19T15:56:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770442]"]},"4267":{"ocel:activity":"check references","ocel:timestamp":"2019-08-19T16:51:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770664]"]},"4269":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T06:33:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770661]"]},"4270":{"ocel:activity":"check references","ocel:timestamp":"2019-08-20T06:39:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770486]"]},"4271":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-20T06:48:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770679]"]},"4272":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-20T06:52:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770492]"]},"4273":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-20T06:52:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770704]"]},"4274":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-20T07:07:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770504]"]},"4275":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T07:36:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770694]"]},"4276":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-20T07:39:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770493]"]},"4277":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-20T07:41:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770595]"]},"4278":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-20T07:47:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770599]"]},"4279":{"ocel:activity":"check references","ocel:timestamp":"2019-08-20T08:18:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770450]"]},"4280":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-20T08:32:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770705]"]},"4281":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-20T08:39:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770701]"]},"4282":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T08:44:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770635]"]},"4283":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T08:50:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770553]"]},"4284":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-20T08:57:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770547]"]},"4285":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T08:59:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770651]"]},"4286":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T09:26:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770679]"]},"4287":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T09:41:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770438]"]},"4288":{"ocel:activity":"check references","ocel:timestamp":"2019-08-20T09:56:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770641]"]},"4289":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-20T10:05:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770676]"]},"4290":{"ocel:activity":"check references","ocel:timestamp":"2019-08-20T10:09:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770279]"]},"4291":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-20T10:40:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770215]"]},"4292":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-20T10:40:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770706]"]},"4293":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-20T10:46:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770442]"]},"4294":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-20T11:12:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770678]"]},"4295":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-20T11:55:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770399]"]},"4296":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-20T11:55:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770498]"]},"4298":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-20T12:14:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770480]"]},"4299":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-20T12:14:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770707]"]},"4300":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-20T12:33:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770623]"]},"4301":{"ocel:activity":"check references","ocel:timestamp":"2019-08-20T12:56:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770602]"]},"4302":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-20T13:03:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770399]"]},"4303":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-20T13:11:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770405]","Offer[[990040]]"]},"4304":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-20T13:13:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770474]"]},"4305":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-20T13:13:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770708]"]},"4306":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-20T13:25:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770390]"]},"4307":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-20T13:31:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770318]"]},"4308":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-20T13:33:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770618]"]},"4309":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-20T13:37:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770565]"]},"4310":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-20T13:41:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770486]"]},"4311":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-20T13:47:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770636]"]},"4312":{"ocel:activity":"check references","ocel:timestamp":"2019-08-20T13:51:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770487]"]},"4313":{"ocel:activity":"check references","ocel:timestamp":"2019-08-20T13:56:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770326]"]},"4314":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-20T13:57:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770539]","Offer[[990055]]"]},"4315":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-20T13:58:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770709]"]},"4316":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-20T14:07:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770385]"]},"4317":{"ocel:activity":"check references","ocel:timestamp":"2019-08-20T14:29:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770595]"]},"4318":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-20T14:32:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770548]"]},"4319":{"ocel:activity":"check references","ocel:timestamp":"2019-08-20T14:35:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770552]"]},"4320":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T14:40:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770701]"]},"4321":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T14:48:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770357]"]},"4322":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-20T14:59:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770698]"]},"4323":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-20T15:02:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770516]"]},"4324":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T15:07:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770677]"]},"4325":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-20T15:34:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770618]"]},"4326":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-20T15:34:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770681]"]},"4327":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-20T15:40:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770710]"]},"4328":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-20T16:01:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770704]"]},"4329":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-20T16:26:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770671]"]},"4330":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-20T16:27:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770693]"]},"4331":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-20T16:35:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770623]"]},"4332":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-20T16:56:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770397]"]},"4333":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-20T17:05:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770711]"]},"4334":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-20T17:14:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770489]","Offer[[990059]]"]},"4335":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-20T18:57:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770493]"]},"4336":{"ocel:activity":"check references","ocel:timestamp":"2019-08-20T19:31:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770597]"]},"4338":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-21T06:12:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770609]"]},"4339":{"ocel:activity":"check references","ocel:timestamp":"2019-08-21T06:47:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770470]"]},"4341":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-21T07:04:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770664]"]},"4342":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-21T07:14:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770676]"]},"4343":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-21T07:20:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770511]"]},"4344":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-21T07:34:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770528]"]},"4345":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-21T07:49:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770674]"]},"4346":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-21T08:02:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770375]"]},"4347":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-21T08:18:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770367]"]},"4348":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-21T08:18:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770712]"]},"4349":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-21T08:23:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770473]"]},"4350":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-21T08:27:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770691]"]},"4351":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-21T08:43:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770668]"]},"4352":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-21T08:56:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770413]"]},"4353":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-21T09:07:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770709]"]},"4354":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-21T09:13:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770681]"]},"4355":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-21T09:20:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770713]"]},"4356":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-21T09:21:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770667]"]},"4357":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-21T09:26:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770604]"]},"4358":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-21T09:56:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770693]"]},"4359":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-21T09:59:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770689]"]},"4360":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-21T10:26:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770486]"]},"4361":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-21T10:38:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770631]"]},"4362":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-21T10:38:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770714]"]},"4363":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-21T11:12:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770459]"]},"4364":{"ocel:activity":"check references","ocel:timestamp":"2019-08-21T11:32:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770701]"]},"4365":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-21T12:37:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770552]"]},"4366":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-21T12:37:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770570]","Offer[[990061]]"]},"4367":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-21T12:49:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770410]"]},"4369":{"ocel:activity":"check references","ocel:timestamp":"2019-08-21T13:05:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770661]"]},"4370":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-21T13:18:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770705]"]},"4371":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-21T13:24:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770451]"]},"4372":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-21T13:25:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770576]"]},"4373":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-21T13:25:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770715]"]},"4374":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-21T13:33:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770431]","Offer[[990058]]"]},"4376":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-21T13:47:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770527]"]},"4377":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-21T13:47:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770651]"]},"4378":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-21T13:53:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770663]"]},"4379":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-21T14:05:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770643]"]},"4380":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-21T14:17:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770687]"]},"4381":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-21T14:19:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770636]"]},"4382":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-21T14:21:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770279]"]},"4383":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-21T14:35:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770716]"]},"4384":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-21T15:04:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770463]"]},"4385":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-21T15:10:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770343]"]},"4386":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-21T15:26:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770599]"]},"4387":{"ocel:activity":"check references","ocel:timestamp":"2019-08-21T15:44:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770619]"]},"4388":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-21T15:44:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770597]"]},"4389":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-21T16:04:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770522]"]},"4390":{"ocel:activity":"check references","ocel:timestamp":"2019-08-21T16:50:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770677]"]},"4391":{"ocel:activity":"check references","ocel:timestamp":"2019-08-21T17:05:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770679]"]},"4392":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-21T17:06:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770657]"]},"4393":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-21T20:17:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770528]"]},"4395":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-22T06:15:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770459]","Offer[[990062]]"]},"4396":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-22T06:21:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770704]"]},"4397":{"ocel:activity":"check references","ocel:timestamp":"2019-08-22T07:00:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770604]"]},"4398":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-22T07:03:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770450]"]},"4399":{"ocel:activity":"check references","ocel:timestamp":"2019-08-22T07:14:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770533]"]},"4400":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-22T07:20:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770667]"]},"4401":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-22T07:40:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770542]"]},"4403":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-22T07:56:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770454]","Offer[[990050]]"]},"4404":{"ocel:activity":"check references","ocel:timestamp":"2019-08-22T08:14:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770511]"]},"4405":{"ocel:activity":"check references","ocel:timestamp":"2019-08-22T08:42:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770593]"]},"4406":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-22T08:47:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770528]"]},"4407":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-22T08:49:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770591]"]},"4408":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-22T08:57:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770464]"]},"4409":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-22T10:20:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770633]"]},"4410":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-22T10:25:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770567]"]},"4411":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-22T10:51:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770609]"]},"4412":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-22T11:33:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770408]"]},"4413":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-22T12:06:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770461]"]},"4414":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-22T12:09:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770707]"]},"4415":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-22T12:41:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770398]","Offer[[990063]]"]},"4416":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-22T12:48:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770410]","Offer[[990064]]"]},"4418":{"ocel:activity":"check references","ocel:timestamp":"2019-08-22T13:33:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770605]"]},"4419":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-22T14:15:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770500]"]},"4420":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-22T14:17:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770377]"]},"4421":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-22T14:17:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770717]"]},"4422":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-22T14:20:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770487]"]},"4423":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-22T14:23:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770382]"]},"4424":{"ocel:activity":"check references","ocel:timestamp":"2019-08-22T14:26:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770495]"]},"4425":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-22T14:37:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770570]","Offer[[990061]]"]},"4426":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-22T14:39:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770682]"]},"4427":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-22T14:45:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770357]"]},"4428":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-22T14:52:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770436]","Offer[[990065]]"]},"4429":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-22T14:54:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770437]"]},"4430":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-22T14:59:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770343]"]},"4431":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-22T15:06:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770463]"]},"4432":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-22T15:10:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770549]"]},"4433":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-22T15:12:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770578]"]},"4435":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-22T15:19:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770718]"]},"4436":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-22T15:25:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770693]"]},"4437":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-22T15:33:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770560]"]},"4438":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-22T16:21:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770584]"]},"4439":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-22T16:25:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770645]"]},"4440":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-22T16:25:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770719]"]},"4441":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-22T16:45:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770667]"]},"4442":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-22T16:46:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770682]"]},"4443":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-22T17:17:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770689]"]},"4444":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-22T17:45:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770720]"]},"4445":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-22T18:41:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770709]"]},"4447":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-23T07:05:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770552]"]},"4448":{"ocel:activity":"check references","ocel:timestamp":"2019-08-23T07:25:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770635]"]},"4449":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-23T07:26:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770533]"]},"4450":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-23T07:29:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770523]"]},"4451":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T07:39:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770685]"]},"4452":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-23T07:56:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770361]"]},"4453":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-23T07:56:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770721]"]},"4454":{"ocel:activity":"check references","ocel:timestamp":"2019-08-23T07:57:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770553]"]},"4455":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-23T08:41:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770590]"]},"4456":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-23T08:47:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770547]"]},"4457":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-23T08:51:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770658]"]},"4459":{"ocel:activity":"check references","ocel:timestamp":"2019-08-23T09:01:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770581]"]},"4460":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-23T09:03:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770691]"]},"4461":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-23T09:18:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770619]"]},"4462":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T09:21:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770522]"]},"4463":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-23T09:24:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770609]"]},"4464":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-23T09:38:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770722]"]},"4465":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T09:45:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770647]"]},"4466":{"ocel:activity":"check references","ocel:timestamp":"2019-08-23T09:59:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770633]"]},"4467":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-23T10:10:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770382]","Offer[[990066]]"]},"4468":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T10:20:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770697]"]},"4469":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T10:40:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770691]"]},"4470":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-23T10:42:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770604]"]},"4471":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-23T10:51:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770553]"]},"4472":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T11:16:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770634]"]},"4473":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-23T11:18:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770552]"]},"4474":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-23T11:18:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770723]"]},"4475":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-23T11:36:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770585]"]},"4476":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-23T11:41:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770531]"]},"4477":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T11:48:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770657]"]},"4478":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-23T11:57:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770496]"]},"4479":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-23T12:12:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770509]"]},"4480":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-23T12:21:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770724]"]},"4481":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T12:38:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770723]"]},"4482":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-23T12:41:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770633]"]},"4483":{"ocel:activity":"check references","ocel:timestamp":"2019-08-23T12:50:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770694]"]},"4484":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-23T13:11:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770635]"]},"4485":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T13:12:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770675]"]},"4486":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T13:15:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770574]"]},"4487":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T13:18:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770675]"]},"4488":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-23T13:24:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770658]"]},"4489":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-23T13:27:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770725]"]},"4490":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T13:42:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770620]"]},"4491":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T13:42:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770425]"]},"4492":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T13:46:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770695]"]},"4493":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-23T13:50:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770567]"]},"4494":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-23T13:56:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770515]"]},"4495":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T13:59:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770668]"]},"4496":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-23T13:59:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770709]"]},"4497":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T14:00:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770618]"]},"4499":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-23T14:14:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770634]"]},"4500":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-23T14:17:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770437]"]},"4501":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T14:27:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770666]"]},"4502":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-23T14:35:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770675]"]},"4503":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-23T14:36:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770561]"]},"4504":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-23T14:38:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770726]"]},"4505":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T14:42:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770700]"]},"4506":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T15:00:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770723]"]},"4507":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T15:16:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770698]"]},"4508":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T15:17:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770689]"]},"4509":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T15:46:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770703]"]},"4510":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T15:56:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770715]"]},"4511":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-23T16:00:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770727]"]},"4512":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-23T16:01:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770722]"]},"4514":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-23T16:23:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770637]"]},"4515":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-23T16:45:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770728]"]},"4516":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-23T16:52:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770397]"]},"4517":{"ocel:activity":"check references","ocel:timestamp":"2019-08-23T17:17:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770681]"]},"4518":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-23T19:30:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770700]"]},"4519":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-23T19:58:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770574]"]},"4521":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-24T10:01:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770625]"]},"4522":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-24T10:01:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770676]"]},"4524":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-24T16:42:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770683]"]},"4528":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-25T18:18:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770545]"]},"4529":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-26T07:12:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770705]"]},"4530":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-26T07:33:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770718]"]},"4531":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-26T07:40:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770643]"]},"4532":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-26T07:40:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770729]"]},"4533":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-26T07:53:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770721]"]},"4534":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-26T08:08:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770647]"]},"4535":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-26T08:13:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770656]"]},"4536":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-26T08:43:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770549]"]},"4537":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-26T08:43:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770695]"]},"4538":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-26T09:09:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770559]"]},"4539":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-26T09:24:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770680]"]},"4540":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-26T09:25:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770591]"]},"4541":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-26T09:31:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770275]"]},"4542":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-26T09:31:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770730]"]},"4543":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-26T09:45:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770656]"]},"4544":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-26T09:58:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770412]"]},"4545":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-26T10:20:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770716]"]},"4546":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-26T10:25:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770545]"]},"4547":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-26T10:26:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770666]"]},"4548":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-26T10:29:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770634]"]},"4549":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-26T10:34:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770389]"]},"4550":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-26T10:50:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770725]"]},"4551":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-26T11:09:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770609]"]},"4552":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-26T11:09:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770731]"]},"4553":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-26T11:28:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770637]"]},"4554":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-26T12:07:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770410]","Offer[[990064]]"]},"4556":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-26T12:21:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770491]"]},"4557":{"ocel:activity":"check references","ocel:timestamp":"2019-08-26T12:43:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770646]"]},"4558":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-26T13:28:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770664]"]},"4559":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-26T13:40:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770451]","Offer[[990067]]"]},"4560":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-26T13:42:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770616]"]},"4561":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-26T13:42:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770732]"]},"4562":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-26T13:49:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770452]","Offer[[990053]]"]},"4563":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-26T14:02:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770598]"]},"4564":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-26T14:06:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770707]"]},"4565":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-26T14:18:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770375]"]},"4566":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-26T14:44:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770464]"]},"4567":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-26T14:51:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770685]"]},"4568":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-26T14:59:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770673]"]},"4569":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-26T15:09:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770733]"]},"4570":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-26T15:36:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770702]"]},"4571":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-26T15:44:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770615]"]},"4572":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-26T16:28:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770590]"]},"4573":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-26T16:28:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770734]"]},"4574":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-26T16:39:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770725]"]},"4575":{"ocel:activity":"check references","ocel:timestamp":"2019-08-26T16:51:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770559]"]},"4576":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-26T17:10:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770572]"]},"4577":{"ocel:activity":"check references","ocel:timestamp":"2019-08-27T07:12:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770476]"]},"4578":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-27T07:21:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770694]"]},"4579":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-27T07:25:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770527]"]},"4580":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-27T07:25:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770735]"]},"4581":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-27T08:07:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770722]"]},"4582":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-27T08:18:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770358]"]},"4583":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-27T08:27:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770279]"]},"4584":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-27T08:44:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770604]"]},"4585":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-27T08:44:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770736]"]},"4586":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-27T08:53:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770716]"]},"4587":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-27T09:12:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770696]"]},"4588":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-27T10:07:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770718]"]},"4589":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-27T10:44:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770588]"]},"4590":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-27T10:47:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770439]"]},"4591":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-27T10:47:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770737]"]},"4592":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-27T11:20:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770531]"]},"4593":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-27T11:22:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770397]"]},"4594":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-27T11:39:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770697]"]},"4595":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-27T12:19:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770738]"]},"4596":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-27T12:49:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770588]"]},"4597":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-27T13:01:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770551]"]},"4598":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-27T13:06:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770175]"]},"4599":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-27T13:23:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770739]"]},"4600":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-27T13:23:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770703]"]},"4601":{"ocel:activity":"check references","ocel:timestamp":"2019-08-27T13:30:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770357]"]},"4602":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-27T13:37:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770584]"]},"4603":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-27T13:37:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770422]"]},"4604":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-27T13:48:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770511]"]},"4605":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-27T13:48:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770279]","Offer[[990068]]"]},"4606":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-27T13:54:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770647]"]},"4607":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-27T13:56:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770572]"]},"4608":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-27T13:58:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770558]"]},"4609":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-27T14:00:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770598]"]},"4610":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-27T14:11:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770385]"]},"4611":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-27T14:31:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770740]"]},"4612":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-27T14:34:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770586]"]},"4613":{"ocel:activity":"check references","ocel:timestamp":"2019-08-27T14:41:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770674]"]},"4614":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-27T14:45:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770681]"]},"4615":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-27T15:34:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770473]"]},"4616":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-27T15:46:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770741]"]},"4617":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-27T15:53:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770560]","Offer[[990069]]"]},"4618":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-27T16:44:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770610]"]},"4619":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-27T17:17:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770742]"]},"4620":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-27T19:03:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770743]"]},"4621":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-28T07:03:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770712]"]},"4622":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-28T07:10:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770491]"]},"4623":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-28T07:10:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770744]"]},"4624":{"ocel:activity":"check references","ocel:timestamp":"2019-08-28T07:11:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770600]"]},"4625":{"ocel:activity":"check references","ocel:timestamp":"2019-08-28T07:23:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770691]"]},"4626":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-28T07:45:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770535]"]},"4627":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-28T07:48:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770581]"]},"4628":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-28T07:54:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770745]"]},"4629":{"ocel:activity":"check references","ocel:timestamp":"2019-08-28T08:08:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770716]"]},"4630":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-28T08:14:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770424]"]},"4631":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-28T08:17:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770715]"]},"4632":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-28T08:22:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770547]","Offer[[990070]]"]},"4634":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-28T08:32:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770605]"]},"4635":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-28T08:39:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770516]"]},"4636":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-28T08:56:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770549]"]},"4637":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-28T09:04:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770670]"]},"4638":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-28T09:24:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770688]"]},"4639":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-28T09:30:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770476]"]},"4640":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-28T09:33:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770746]"]},"4641":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-28T09:56:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770484]"]},"4642":{"ocel:activity":"check references","ocel:timestamp":"2019-08-28T09:57:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770634]"]},"4643":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-28T10:00:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770516]","Offer[[990071]]"]},"4644":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-28T10:04:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770695]"]},"4645":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-28T10:18:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770360]"]},"4646":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-28T11:36:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770615]"]},"4647":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-28T12:37:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770329]"]},"4648":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-28T12:40:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770583]"]},"4649":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-28T12:47:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770343]","Offer[[990072]]"]},"4650":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-28T12:50:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770696]"]},"4651":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-28T12:52:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770721]"]},"4652":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-28T13:01:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770707]"]},"4653":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-28T13:06:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770584]","Offer[[990073]]"]},"4654":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-28T13:07:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770600]"]},"4655":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-28T13:21:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770664]"]},"4656":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-28T13:24:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770712]"]},"4657":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-28T13:52:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770683]"]},"4658":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-28T13:52:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770747]"]},"4659":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-28T13:54:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770668]"]},"4660":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-28T13:56:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770358]","Offer[[990074]]"]},"4661":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-28T14:03:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770222]","Offer[[990049]]"]},"4662":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-28T14:04:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770714]"]},"4663":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-28T14:07:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770389]"]},"4664":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-28T14:13:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770673]"]},"4665":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-28T14:15:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770523]"]},"4667":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-28T15:05:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770412]"]},"4668":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-28T15:29:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770748]"]},"4669":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-28T15:32:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770553]"]},"4671":{"ocel:activity":"check references","ocel:timestamp":"2019-08-28T15:50:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770676]"]},"4672":{"ocel:activity":"check references","ocel:timestamp":"2019-08-28T16:18:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770671]"]},"4673":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-28T16:43:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770749]"]},"4674":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-28T16:48:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770398]","Offer[[990063]]"]},"4675":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-28T16:48:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770597]"]},"4676":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-28T18:39:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770750]"]},"4677":{"ocel:activity":"check references","ocel:timestamp":"2019-08-28T19:01:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770329]"]},"4678":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-28T20:29:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770726]"]},"4679":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-29T07:32:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770533]"]},"4680":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-29T07:52:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770541]"]},"4681":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-29T08:12:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770702]"]},"4682":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-29T08:24:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770424]"]},"4683":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-29T08:24:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770751]"]},"4684":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-29T08:37:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770521]"]},"4685":{"ocel:activity":"check references","ocel:timestamp":"2019-08-29T08:41:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770687]"]},"4686":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-29T09:30:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770637]"]},"4688":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-29T09:49:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770343]","Offer[[990072]]"]},"4689":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-29T09:53:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770561]"]},"4690":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-29T09:53:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770752]"]},"4691":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-29T10:14:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770599]"]},"4692":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-29T10:39:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770543]"]},"4693":{"ocel:activity":"check references","ocel:timestamp":"2019-08-29T10:50:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770457]"]},"4694":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-29T11:51:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770355]"]},"4695":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-29T12:27:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770521]"]},"4696":{"ocel:activity":"check references","ocel:timestamp":"2019-08-29T12:44:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770703]"]},"4697":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-29T12:45:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770357]"]},"4698":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-29T12:55:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770498]"]},"4699":{"ocel:activity":"check references","ocel:timestamp":"2019-08-29T13:07:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770670]"]},"4700":{"ocel:activity":"check references","ocel:timestamp":"2019-08-29T13:11:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770500]"]},"4701":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-29T13:30:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770515]"]},"4702":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-29T13:30:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770753]"]},"4703":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-29T14:18:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770358]","Offer[[990074]]"]},"4704":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-29T14:39:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770607]"]},"4705":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-29T14:45:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770453]"]},"4706":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-29T14:52:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770680]"]},"4707":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-29T15:00:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770484]"]},"4708":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-29T15:02:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770701]"]},"4709":{"ocel:activity":"check references","ocel:timestamp":"2019-08-29T15:26:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770704]"]},"4710":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-29T15:36:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770425]"]},"4711":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-29T15:36:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770754]"]},"4712":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-29T15:45:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770714]"]},"4713":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-29T15:56:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770724]"]},"4714":{"ocel:activity":"check references","ocel:timestamp":"2019-08-29T16:15:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770668]"]},"4716":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-29T17:07:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770636]"]},"4717":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-29T18:43:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770652]"]},"4718":{"ocel:activity":"check references","ocel:timestamp":"2019-08-29T19:06:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770522]"]},"4719":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-30T07:00:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770470]"]},"4720":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-30T07:00:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770755]"]},"4721":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-30T07:01:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770635]"]},"4722":{"ocel:activity":"check references","ocel:timestamp":"2019-08-30T07:21:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770647]"]},"4723":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-30T07:27:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770697]"]},"4724":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-30T07:30:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770726]"]},"4725":{"ocel:activity":"check references","ocel:timestamp":"2019-08-30T08:20:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770689]"]},"4726":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-30T08:54:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770446]"]},"4727":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-30T08:55:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770599]"]},"4728":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-30T08:55:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770756]"]},"4729":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-30T09:11:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770586]"]},"4730":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-30T09:20:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770670]"]},"4731":{"ocel:activity":"make job offer","ocel:timestamp":"2019-08-30T09:31:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770558]","Offer[[990075]]"]},"4732":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-30T09:43:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770719]"]},"4733":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-30T09:44:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770503]"]},"4734":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-30T10:16:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770422]"]},"4736":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-30T10:38:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770528]"]},"4737":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-30T10:38:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770757]"]},"4738":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-30T11:51:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770629]"]},"4739":{"ocel:activity":"check references","ocel:timestamp":"2019-08-30T11:52:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770712]"]},"4740":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-30T12:44:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770688]"]},"4741":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-30T12:55:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770595]"]},"4742":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-30T12:55:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770758]"]},"4743":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-30T13:45:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770382]","Offer[[990066]]"]},"4744":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-30T13:47:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770438]"]},"4745":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-30T13:49:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770652]"]},"4746":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-08-30T13:49:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770668]"]},"4747":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-30T14:15:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770500]"]},"4748":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-08-30T14:25:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770520]","Offer[[990054]]"]},"4749":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-30T14:26:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770736]"]},"4750":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-08-30T14:47:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770584]","Offer[[990073]]"]},"4751":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-08-30T14:59:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770654]"]},"4752":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-30T15:06:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770688]"]},"4753":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-08-30T15:35:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770543]"]},"4754":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-30T15:40:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770703]"]},"4755":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-08-30T15:45:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770511]"]},"4756":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-30T16:37:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770457]"]},"4757":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-30T16:45:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770591]"]},"4758":{"ocel:activity":"send rejection","ocel:timestamp":"2019-08-30T16:51:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770694]"]},"4759":{"ocel:activity":"submit application","ocel:timestamp":"2019-08-30T16:51:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770759]"]},"4761":{"ocel:activity":"first screening","ocel:timestamp":"2019-08-30T18:47:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770656]"]},"4763":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-31T10:36:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770671]"]},"4764":{"ocel:activity":"consult manager","ocel:timestamp":"2019-08-31T10:36:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770716]"]},"4768":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T06:47:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770607]"]},"4769":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T07:35:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770637]"]},"4770":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-02T07:35:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770760]"]},"4771":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-02T07:43:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770635]"]},"4772":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T08:04:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770759]"]},"4773":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-02T08:08:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770505]","Offer[[990057]]"]},"4774":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T08:23:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770638]"]},"4775":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-02T08:26:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770612]"]},"4776":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T08:28:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770735]"]},"4777":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-02T08:31:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770646]"]},"4778":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T08:32:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770714]"]},"4779":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T08:37:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770446]"]},"4780":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T08:38:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770408]"]},"4781":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T08:41:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770521]"]},"4782":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-02T08:54:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770761]"]},"4783":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-02T08:55:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770355]","Offer[[990076]]"]},"4784":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T08:58:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770646]"]},"4785":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T08:59:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770614]"]},"4786":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-02T09:01:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770534]"]},"4787":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T09:05:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770745]"]},"4788":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-02T09:08:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770219]"]},"4789":{"ocel:activity":"check references","ocel:timestamp":"2019-09-02T09:37:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770673]"]},"4790":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T09:38:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770503]"]},"4791":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-02T09:43:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770664]","Offer[[990077]]"]},"4792":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T10:06:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770657]"]},"4793":{"ocel:activity":"check references","ocel:timestamp":"2019-09-02T10:08:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770693]"]},"4794":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T10:11:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770638]"]},"4795":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T10:14:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770583]"]},"4796":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-02T10:31:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770329]"]},"4797":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-02T10:34:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770762]"]},"4798":{"ocel:activity":"check references","ocel:timestamp":"2019-09-02T10:34:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770422]"]},"4799":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-02T10:35:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770442]"]},"4800":{"ocel:activity":"check references","ocel:timestamp":"2019-09-02T10:44:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770707]"]},"4801":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-02T11:14:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770654]"]},"4802":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T11:39:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770761]"]},"4803":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-02T12:25:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770553]"]},"4804":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-02T12:30:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770557]"]},"4805":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-02T12:36:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770682]"]},"4806":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T12:45:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770716]"]},"4807":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T12:45:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770714]"]},"4808":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-02T12:45:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770763]"]},"4809":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T12:56:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770696]"]},"4810":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-02T13:01:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770666]"]},"4811":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T13:02:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770735]"]},"4812":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T13:06:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770554]"]},"4813":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T13:16:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770463]"]},"4814":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T13:16:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770705]"]},"4815":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T13:21:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770574]"]},"4816":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-02T13:26:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770704]"]},"4817":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-02T13:26:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770724]"]},"4818":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T13:30:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770676]"]},"4819":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T13:34:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770500]"]},"4820":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T13:37:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770726]"]},"4821":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T13:39:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770597]"]},"4822":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-02T13:44:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770607]"]},"4823":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T13:44:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770759]"]},"4824":{"ocel:activity":"check references","ocel:timestamp":"2019-09-02T13:46:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770725]"]},"4825":{"ocel:activity":"check references","ocel:timestamp":"2019-09-02T13:49:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770680]"]},"4826":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-02T13:54:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770564]"]},"4827":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T14:03:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770755]"]},"4828":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T14:05:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770665]"]},"4829":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T14:07:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770329]"]},"4830":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T14:14:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770534]"]},"4831":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-02T14:15:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770764]"]},"4832":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T14:16:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770681]"]},"4833":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T14:22:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770692]"]},"4834":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-02T14:27:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770360]","Offer[[990078]]"]},"4835":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-02T14:29:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770446]"]},"4836":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T14:38:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770533]"]},"4837":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T14:40:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770642]"]},"4838":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T14:47:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770755]"]},"4839":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T14:57:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770665]"]},"4840":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-02T14:59:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770765]"]},"4841":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-02T15:01:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770453]"]},"4842":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T15:01:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770546]"]},"4843":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-02T15:04:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770608]"]},"4844":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T15:06:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770760]"]},"4845":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T15:08:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770654]"]},"4846":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T15:16:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770730]"]},"4847":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T15:46:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770615]"]},"4848":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T15:49:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770442]"]},"4849":{"ocel:activity":"check references","ocel:timestamp":"2019-09-02T15:50:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770554]"]},"4850":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-02T16:44:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770766]"]},"4851":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-02T17:02:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770736]"]},"4852":{"ocel:activity":"check references","ocel:timestamp":"2019-09-02T17:14:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770666]"]},"4853":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T17:29:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770543]"]},"4854":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-02T18:20:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770748]"]},"4855":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-02T18:40:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770629]"]},"4856":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-02T18:41:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770767]"]},"4857":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-02T18:54:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770761]"]},"4858":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-02T19:13:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770219]"]},"4859":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-02T19:44:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770719]"]},"4860":{"ocel:activity":"check references","ocel:timestamp":"2019-09-02T20:01:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770682]"]},"4861":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-02T20:45:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770581]"]},"4862":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-02T20:51:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770768]"]},"4863":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-03T04:31:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770769]"]},"4864":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-03T06:32:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770446]","Offer[[990079]]"]},"4865":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-03T07:36:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770770]"]},"4866":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-03T07:38:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770602]"]},"4867":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T07:54:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770438]"]},"4868":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T08:01:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770549]"]},"4869":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-03T08:04:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770725]"]},"4870":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-03T08:06:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770699]"]},"4871":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-03T08:29:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770738]"]},"4872":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T08:39:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770591]"]},"4873":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-03T08:42:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770680]"]},"4874":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-03T08:46:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770602]"]},"4875":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-03T08:47:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770724]"]},"4876":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T08:52:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770603]"]},"4877":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-03T08:58:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770354]"]},"4878":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T09:24:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770722]"]},"4879":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-03T09:27:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770560]","Offer[[990069]]"]},"4880":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-03T09:35:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770671]"]},"4881":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-03T09:36:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770587]"]},"4882":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T09:46:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770755]"]},"4883":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-03T09:49:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770725]"]},"4884":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-03T09:53:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770546]"]},"4885":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-03T09:54:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770632]"]},"4886":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-03T10:09:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770703]"]},"4887":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T10:29:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770648]"]},"4888":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-03T10:31:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770686]"]},"4889":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-03T10:38:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770593]"]},"4890":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-03T10:51:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770646]"]},"4891":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-03T11:06:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770655]"]},"4892":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T11:18:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770761]"]},"4893":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-03T11:18:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770716]"]},"4894":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-03T11:56:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770498]","Offer[[990080]]"]},"4895":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T12:00:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770715]"]},"4896":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-03T12:04:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770678]"]},"4897":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-03T12:15:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770701]"]},"4898":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-03T12:15:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770771]"]},"4899":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-03T12:19:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770738]"]},"4900":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-03T12:22:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770659]"]},"4901":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-03T12:23:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770685]"]},"4902":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-03T12:26:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770716]","Offer[[990081]]"]},"4903":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T12:30:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770614]"]},"4904":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-03T12:33:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770315]"]},"4905":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-03T12:39:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770583]"]},"4906":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-03T12:42:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770437]"]},"4907":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-03T12:44:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770461]"]},"4908":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-03T12:47:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770545]"]},"4909":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-03T12:49:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770721]"]},"4910":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-03T12:51:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770760]"]},"4911":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-03T12:54:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770745]"]},"4912":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-03T13:02:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770692]"]},"4913":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-03T13:16:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770772]"]},"4914":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-03T13:43:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770451]","Offer[[990067]]"]},"4915":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-03T13:49:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770464]"]},"4916":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-03T13:53:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770621]"]},"4917":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-03T14:16:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770773]"]},"4918":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-03T14:17:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770457]"]},"4919":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-03T14:19:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770730]"]},"4920":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-03T14:33:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770438]"]},"4921":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-03T14:37:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770766]"]},"4923":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-03T15:17:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770774]"]},"4924":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-03T15:30:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770522]"]},"4925":{"ocel:activity":"check references","ocel:timestamp":"2019-09-03T15:34:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770672]"]},"4926":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-03T15:35:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770622]"]},"4927":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-03T15:51:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770547]","Offer[[990070]]"]},"4928":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-03T16:20:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770775]"]},"4929":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-03T16:59:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770623]"]},"4930":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-03T17:25:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770522]"]},"4931":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-03T17:40:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770642]"]},"4933":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-03T19:53:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770748]"]},"4934":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-04T07:05:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770734]"]},"4935":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-04T07:10:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770587]"]},"4936":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-04T07:35:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770516]","Offer[[990071]]"]},"4937":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-04T07:39:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770318]"]},"4938":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T07:42:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770686]"]},"4939":{"ocel:activity":"check references","ocel:timestamp":"2019-09-04T08:00:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770696]"]},"4940":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-04T08:00:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770670]"]},"4941":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-04T08:04:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770655]"]},"4942":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-04T08:06:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770603]"]},"4943":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T08:20:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770670]"]},"4944":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-04T08:20:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770776]"]},"4945":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-04T08:25:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770593]"]},"4946":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T08:26:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770612]"]},"4947":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T08:38:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770354]"]},"4948":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T08:39:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770621]"]},"4950":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-04T08:43:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770641]"]},"4951":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-04T08:43:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770679]"]},"4952":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T08:53:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770568]"]},"4953":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T09:06:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770699]"]},"4954":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-04T09:24:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770777]"]},"4955":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T09:28:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770349]"]},"4956":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T09:29:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770734]"]},"4957":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-04T09:33:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770450]"]},"4958":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-04T09:52:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770608]"]},"4959":{"ocel:activity":"check references","ocel:timestamp":"2019-09-04T10:07:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770618]"]},"4960":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-04T10:21:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770448]"]},"4961":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T10:27:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770659]"]},"4962":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-04T10:27:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770554]"]},"4963":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T10:28:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770724]"]},"4964":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-04T10:33:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770778]"]},"4965":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T10:34:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770545]"]},"4966":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-04T11:01:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770711]"]},"4967":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-04T11:10:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770542]"]},"4968":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-04T11:13:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770648]"]},"4969":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-04T11:14:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770764]"]},"4970":{"ocel:activity":"check references","ocel:timestamp":"2019-09-04T11:20:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770656]"]},"4971":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-04T11:44:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770641]"]},"4972":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T11:48:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770553]"]},"4973":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-04T11:51:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770779]"]},"4974":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-04T11:59:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770588]"]},"4975":{"ocel:activity":"check references","ocel:timestamp":"2019-09-04T12:00:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770723]"]},"4976":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-04T12:01:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770743]"]},"4977":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-04T12:21:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770349]"]},"4978":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-04T12:39:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770607]","Offer[[990082]]"]},"4979":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T13:16:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770493]"]},"4980":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T13:17:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770764]"]},"4981":{"ocel:activity":"check references","ocel:timestamp":"2019-09-04T13:22:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770685]"]},"4982":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-04T13:26:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770780]"]},"4983":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-04T13:41:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770737]"]},"4984":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T13:42:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770318]"]},"4985":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-04T13:44:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770569]"]},"4986":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T13:46:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770655]"]},"4987":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-04T13:47:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770754]"]},"4988":{"ocel:activity":"check references","ocel:timestamp":"2019-09-04T13:50:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770760]"]},"4989":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T13:50:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770678]"]},"4990":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-04T13:59:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770459]","Offer[[990062]]"]},"4991":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T14:07:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770635]"]},"4992":{"ocel:activity":"check references","ocel:timestamp":"2019-09-04T14:07:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770349]"]},"4993":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T14:12:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770652]"]},"4994":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-04T14:15:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770641]"]},"4995":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T14:21:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770588]"]},"4996":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-04T14:32:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770749]"]},"4997":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-04T14:37:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770781]"]},"4998":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-04T14:45:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770567]"]},"4999":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-04T14:53:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770557]"]},"5000":{"ocel:activity":"check references","ocel:timestamp":"2019-09-04T14:59:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770638]"]},"5001":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-04T15:00:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770780]"]},"5002":{"ocel:activity":"check references","ocel:timestamp":"2019-09-04T15:00:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770521]"]},"5003":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-04T15:49:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770754]"]},"5004":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T15:51:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770620]"]},"5005":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-04T15:59:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770782]"]},"5007":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-04T16:18:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770661]"]},"5008":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-04T16:22:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770498]","Offer[[990080]]"]},"5009":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-04T16:43:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770422]"]},"5010":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-04T17:11:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770698]"]},"5011":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-04T17:23:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770522]"]},"5012":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-04T17:44:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770783]"]},"5013":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T18:47:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770736]"]},"5014":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-04T19:12:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770737]"]},"5015":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-04T19:33:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770486]"]},"5016":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-04T19:56:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770784]"]},"5017":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T00:03:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770785]"]},"5018":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T06:21:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770786]"]},"5019":{"ocel:activity":"check references","ocel:timestamp":"2019-09-05T06:22:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770697]"]},"5020":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T06:35:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770734]"]},"5021":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-05T06:37:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770399]"]},"5022":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-05T06:46:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770786]"]},"5023":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-05T07:07:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770622]"]},"5024":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T07:07:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770611]"]},"5025":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-05T07:12:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770557]"]},"5026":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-05T07:14:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770766]"]},"5027":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T07:41:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770737]"]},"5028":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T07:43:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770495]"]},"5029":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T07:46:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770787]"]},"5030":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T07:47:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770638]"]},"5031":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T07:50:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770564]"]},"5032":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-05T07:50:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770786]"]},"5033":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-05T07:53:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770669]"]},"5034":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-05T07:53:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770611]"]},"5035":{"ocel:activity":"check references","ocel:timestamp":"2019-09-05T08:07:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770745]"]},"5036":{"ocel:activity":"check references","ocel:timestamp":"2019-09-05T08:08:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770437]"]},"5037":{"ocel:activity":"check references","ocel:timestamp":"2019-09-05T08:18:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770493]"]},"5038":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T08:22:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770541]"]},"5039":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-05T08:23:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770749]"]},"5040":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T08:27:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770614]"]},"5041":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-05T08:37:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770758]"]},"5042":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T08:47:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770654]"]},"5043":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-05T08:50:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770614]"]},"5044":{"ocel:activity":"check references","ocel:timestamp":"2019-09-05T08:51:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770688]"]},"5045":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T08:53:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770315]"]},"5046":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-05T08:54:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770679]"]},"5047":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-05T09:07:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770422]"]},"5048":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-05T09:16:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770743]"]},"5049":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T09:16:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770788]"]},"5050":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-05T09:22:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770775]"]},"5052":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-05T09:34:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770623]","Offer[[990083]]"]},"5053":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T09:40:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770326]"]},"5054":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-05T09:55:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770573]","Offer[[990060]]"]},"5055":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T10:10:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770697]"]},"5056":{"ocel:activity":"check references","ocel:timestamp":"2019-09-05T10:16:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770615]"]},"5057":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T10:16:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770511]"]},"5058":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T10:18:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770789]"]},"5059":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T10:25:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770486]"]},"5060":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-05T10:31:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770775]"]},"5061":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-05T10:33:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770783]"]},"5062":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T10:50:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770691]"]},"5063":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-05T11:04:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770690]"]},"5064":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T11:06:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770542]"]},"5065":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T11:20:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770790]"]},"5066":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-05T11:32:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770668]"]},"5067":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-05T11:40:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770780]"]},"5068":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T11:55:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770696]"]},"5069":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T12:08:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770605]"]},"5070":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-05T12:10:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770554]"]},"5071":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T12:25:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770791]"]},"5072":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-05T12:31:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770360]","Offer[[990078]]"]},"5074":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-05T12:49:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770711]"]},"5075":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-05T13:03:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770763]"]},"5076":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-05T13:04:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770581]","Offer[[990084]]"]},"5077":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-05T13:06:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770581]","Offer[[990084]]"]},"5078":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-05T13:09:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770639]"]},"5079":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-05T13:14:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770666]"]},"5080":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-05T13:15:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770448]"]},"5081":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T13:22:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770574]"]},"5082":{"ocel:activity":"check references","ocel:timestamp":"2019-09-05T13:24:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770399]"]},"5083":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-05T13:25:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770763]"]},"5084":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-05T13:34:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770783]"]},"5085":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T13:35:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770792]"]},"5086":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-05T13:35:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770668]","Offer[[990085]]"]},"5087":{"ocel:activity":"check references","ocel:timestamp":"2019-09-05T13:38:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770627]"]},"5088":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T13:44:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770634]"]},"5089":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-05T13:55:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770614]"]},"5090":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-05T13:56:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770691]"]},"5091":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-05T14:30:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770529]"]},"5092":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-05T14:45:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770529]","Offer[[990086]]"]},"5093":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-05T14:47:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770641]","Offer[[990087]]"]},"5094":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-05T14:49:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770705]"]},"5095":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T14:54:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770793]"]},"5096":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T14:57:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770647]"]},"5097":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-05T14:57:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770718]"]},"5098":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-05T15:22:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770614]","Offer[[990088]]"]},"5099":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-05T15:29:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770638]"]},"5100":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-05T15:41:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770765]"]},"5101":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-05T15:57:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770758]"]},"5102":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-05T16:14:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770598]"]},"5103":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T16:24:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770786]"]},"5104":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T16:34:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770794]"]},"5106":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-05T16:35:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770759]"]},"5107":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-05T16:38:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770690]"]},"5108":{"ocel:activity":"check references","ocel:timestamp":"2019-09-05T16:49:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770738]"]},"5109":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T18:10:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770795]"]},"5110":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-05T18:16:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770638]"]},"5111":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-05T18:20:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770477]"]},"5112":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T19:49:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770796]"]},"5113":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-05T23:23:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770797]"]},"5114":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-06T06:27:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770477]"]},"5115":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-06T06:32:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770798]"]},"5116":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-06T06:38:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770668]","Offer[[990085]]"]},"5117":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T06:55:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770737]"]},"5118":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T07:19:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770591]"]},"5119":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-06T07:23:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770587]"]},"5120":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T07:29:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770522]"]},"5121":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-06T07:38:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770659]"]},"5122":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-06T07:44:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770446]","Offer[[990079]]"]},"5123":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T07:44:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770795]"]},"5124":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T07:48:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770789]"]},"5125":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-06T07:59:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770557]","Offer[[990089]]"]},"5126":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-06T08:02:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770799]"]},"5127":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T08:17:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770695]"]},"5128":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-06T08:17:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770716]","Offer[[990081]]"]},"5129":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T08:41:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770659]"]},"5130":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-06T08:47:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770800]"]},"5131":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T08:54:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770567]"]},"5132":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-06T09:01:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770487]"]},"5133":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T09:02:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770625]"]},"5134":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-06T09:05:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770326]"]},"5135":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T09:06:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770748]"]},"5136":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-06T09:18:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770639]"]},"5137":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-06T09:22:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770399]"]},"5138":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T09:26:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770733]"]},"5139":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T09:32:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770621]"]},"5140":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-06T09:37:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770689]"]},"5141":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-06T10:14:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770697]"]},"5142":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-06T10:18:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770801]"]},"5144":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-06T10:38:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770711]"]},"5145":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-06T11:15:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770669]"]},"5146":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T11:48:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770763]"]},"5147":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T11:54:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770651]"]},"5148":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T12:18:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770762]"]},"5149":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-06T12:34:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770566]"]},"5150":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-06T12:42:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770765]"]},"5151":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T12:46:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770790]"]},"5152":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T12:48:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770720]"]},"5153":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-06T12:55:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770399]"]},"5154":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-06T13:00:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770326]"]},"5155":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T13:06:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770660]"]},"5156":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-06T13:18:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770789]"]},"5157":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T13:23:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770739]"]},"5158":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T13:23:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770682]"]},"5159":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-06T13:23:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770802]"]},"5160":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T13:24:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770655]"]},"5161":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T13:28:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770646]"]},"5162":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T13:35:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770627]"]},"5163":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T13:39:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770495]"]},"5164":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T13:48:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770583]"]},"5165":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-06T14:02:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770693]"]},"5166":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-06T14:03:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770661]"]},"5167":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-06T14:04:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770790]"]},"5168":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T14:09:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770519]"]},"5169":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-06T14:19:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770660]"]},"5170":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T14:21:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770799]"]},"5171":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-06T14:32:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770803]"]},"5172":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-06T14:39:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770702]"]},"5173":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T14:55:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770718]"]},"5174":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-06T14:56:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770673]"]},"5175":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T15:03:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770422]"]},"5176":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T15:05:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770731]"]},"5177":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-06T15:29:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770546]"]},"5178":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-06T15:29:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770731]"]},"5179":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T15:45:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770775]"]},"5180":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T15:48:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770568]"]},"5181":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-06T15:48:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770804]"]},"5182":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T16:22:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770769]"]},"5183":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-06T16:46:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770326]"]},"5184":{"ocel:activity":"check references","ocel:timestamp":"2019-09-06T17:03:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770765]"]},"5185":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-06T17:22:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770805]"]},"5187":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-06T17:56:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770346]"]},"5188":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-06T19:13:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770806]"]},"5189":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-06T20:03:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770500]"]},"5190":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-06T20:23:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770796]"]},"5191":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-06T20:54:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770807]"]},"5193":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-07T11:11:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770559]"]},"5194":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-07T11:11:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770549]"]},"5195":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-07T11:11:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770687]"]},"5196":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-07T11:11:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770672]"]},"5197":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-07T12:33:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770808]"]},"5199":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-07T18:53:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770765]"]},"5200":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-07T18:53:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770674]"]},"5201":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-07T18:53:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770761]"]},"5202":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-07T18:53:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770723]"]},"5203":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-08T06:39:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770809]"]},"5205":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-08T12:04:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770652]"]},"5207":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-08T20:31:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770437]"]},"5208":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-09T06:14:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770766]"]},"5209":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-09T06:20:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770349]"]},"5210":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-09T06:20:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770810]"]},"5211":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-09T06:38:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770484]"]},"5212":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-09T06:41:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770762]"]},"5213":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-09T06:43:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770534]"]},"5214":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-09T07:01:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770651]"]},"5215":{"ocel:activity":"check references","ocel:timestamp":"2019-09-09T07:02:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770639]"]},"5216":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-09T07:19:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770800]"]},"5217":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-09T07:29:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770660]"]},"5218":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-09T07:37:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770799]"]},"5219":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-09T08:03:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770672]"]},"5220":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-09T08:04:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770733]"]},"5221":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-09T08:13:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770614]","Offer[[990088]]"]},"5222":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-09T08:14:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770519]"]},"5223":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-09T08:17:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770623]","Offer[[990083]]"]},"5224":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-09T08:21:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770534]"]},"5225":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-09T08:21:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770811]"]},"5226":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-09T08:29:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770687]"]},"5227":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-09T08:36:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770752]"]},"5228":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-09T09:16:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770521]"]},"5229":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-09T09:33:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770795]"]},"5230":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-09T09:49:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770704]"]},"5231":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-09T09:53:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770625]"]},"5232":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-09T09:59:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770642]"]},"5233":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-09T10:20:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770793]"]},"5234":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-09T10:44:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770450]"]},"5235":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-09T10:44:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770812]"]},"5236":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-09T11:09:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770754]"]},"5237":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-09T11:31:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770702]"]},"5238":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-09T11:46:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770677]"]},"5239":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-09T11:46:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770693]"]},"5240":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-09T11:51:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770629]"]},"5241":{"ocel:activity":"check references","ocel:timestamp":"2019-09-09T12:02:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770652]"]},"5242":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-09T12:03:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770477]"]},"5243":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-09T12:12:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770652]"]},"5244":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-09T12:24:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770743]"]},"5245":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-09T12:40:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770521]"]},"5246":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-09T12:40:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770813]"]},"5247":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-09T12:52:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770617]"]},"5248":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-09T12:56:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770686]"]},"5249":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-09T13:09:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770436]","Offer[[990065]]"]},"5250":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-09T13:21:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770739]"]},"5251":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-09T13:22:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770765]"]},"5252":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-09T13:24:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770730]"]},"5253":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-09T13:31:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770639]"]},"5254":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-09T13:37:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770546]"]},"5255":{"ocel:activity":"check references","ocel:timestamp":"2019-09-09T13:50:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770632]"]},"5256":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-09T13:55:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770749]"]},"5257":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-09T13:56:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770634]"]},"5258":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-09T14:01:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770687]"]},"5259":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-09T14:04:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770769]"]},"5260":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-09T14:05:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770814]"]},"5261":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-09T14:10:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770720]"]},"5262":{"ocel:activity":"check references","ocel:timestamp":"2019-09-09T14:10:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770484]"]},"5263":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-09T14:15:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770752]"]},"5264":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-09T14:17:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770661]"]},"5265":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-09T14:42:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770569]","Offer[[990090]]"]},"5266":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-09T14:43:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770501]"]},"5267":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-09T14:43:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770665]"]},"5268":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-09T14:49:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770815]"]},"5269":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-09T14:50:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770772]"]},"5270":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-09T14:54:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770685]"]},"5271":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-09T15:11:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770796]"]},"5272":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-09T15:16:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770629]"]},"5273":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-09T15:58:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770809]"]},"5274":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-09T16:05:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770628]"]},"5275":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-09T16:23:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770816]"]},"5276":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-09T16:23:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770529]","Offer[[990086]]"]},"5277":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-09T17:02:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770617]"]},"5278":{"ocel:activity":"check references","ocel:timestamp":"2019-09-09T17:29:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770543]"]},"5279":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-09T17:39:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770817]"]},"5280":{"ocel:activity":"check references","ocel:timestamp":"2019-09-09T18:28:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770743]"]},"5281":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-09T19:47:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770818]"]},"5282":{"ocel:activity":"check references","ocel:timestamp":"2019-09-09T19:48:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770699]"]},"5283":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-09T19:49:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770747]"]},"5284":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-10T06:02:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770687]"]},"5285":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-10T06:02:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770819]"]},"5286":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T06:06:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770814]"]},"5287":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-10T06:24:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770796]"]},"5288":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-10T06:48:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770448]"]},"5289":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-10T07:14:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770743]"]},"5290":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-10T07:32:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770814]"]},"5291":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-10T07:33:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770519]"]},"5292":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-10T07:39:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770800]"]},"5293":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-10T07:46:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770493]"]},"5294":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T07:53:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770703]"]},"5295":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-10T07:55:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770696]"]},"5296":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-10T07:57:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770793]"]},"5297":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-10T07:58:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770703]","Offer[[990091]]"]},"5298":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-10T08:06:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770761]"]},"5299":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-10T08:06:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770820]"]},"5300":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T08:13:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770658]"]},"5301":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T08:38:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770329]"]},"5302":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T08:43:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770660]"]},"5303":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-10T08:49:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770689]"]},"5304":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-10T09:07:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770790]"]},"5305":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-10T09:10:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770559]"]},"5306":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-10T09:10:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770821]"]},"5307":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T09:11:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770803]"]},"5308":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-10T09:18:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770803]"]},"5309":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T09:34:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770798]"]},"5310":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T09:35:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770593]"]},"5311":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T09:40:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770751]"]},"5312":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T09:50:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770696]"]},"5313":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-10T09:52:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770477]"]},"5314":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-10T10:00:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770279]","Offer[[990068]]"]},"5315":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-10T10:09:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770658]","Offer[[990092]]"]},"5316":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T10:27:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770818]"]},"5317":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T10:31:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770795]"]},"5318":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T10:32:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770672]"]},"5319":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T10:44:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770753]"]},"5320":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T10:48:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770399]"]},"5321":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T11:16:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770766]"]},"5322":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-10T11:22:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770696]","Offer[[990093]]"]},"5323":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T11:32:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770749]"]},"5324":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-10T12:22:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770399]"]},"5325":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-10T12:22:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770822]"]},"5326":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-10T12:49:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770718]"]},"5327":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T12:53:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770821]"]},"5328":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-10T13:09:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770628]"]},"5329":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-10T13:12:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770747]"]},"5330":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T13:18:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770757]"]},"5331":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T13:20:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770624]"]},"5332":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T13:20:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770633]"]},"5333":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-10T13:31:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770659]"]},"5334":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-10T13:35:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770355]","Offer[[990076]]"]},"5335":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-10T13:36:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770723]"]},"5336":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-10T13:38:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770638]","Offer[[990094]]"]},"5337":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-10T13:46:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770501]"]},"5338":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-10T13:56:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770484]"]},"5339":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-10T13:59:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770703]","Offer[[990091]]"]},"5340":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-10T14:08:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770800]"]},"5341":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-10T14:08:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770823]"]},"5342":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-10T14:10:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770790]"]},"5343":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-10T14:12:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770639]"]},"5344":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T14:25:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770503]"]},"5345":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-10T14:26:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770772]"]},"5347":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T14:34:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770681]"]},"5348":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T14:41:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770725]"]},"5349":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T14:50:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770790]"]},"5350":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T14:58:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770448]"]},"5351":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-10T14:58:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770725]","Offer[[990095]]"]},"5352":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T15:04:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770786]"]},"5353":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T15:07:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770613]"]},"5354":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T15:12:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770759]"]},"5355":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T15:16:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770796]"]},"5356":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T15:20:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770639]"]},"5357":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T15:31:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770642]"]},"5358":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-10T15:42:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770602]"]},"5359":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T15:58:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770801]"]},"5360":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-10T16:16:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770753]"]},"5361":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T16:24:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770596]"]},"5362":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T16:37:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770822]"]},"5363":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-10T16:41:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770791]"]},"5364":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-10T16:52:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770484]"]},"5365":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-10T16:55:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770639]"]},"5366":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-10T16:55:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770824]"]},"5367":{"ocel:activity":"check references","ocel:timestamp":"2019-09-10T17:02:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770730]"]},"5368":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-10T18:25:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770661]"]},"5369":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-10T19:14:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770825]"]},"5370":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-11T06:37:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770759]"]},"5371":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T06:46:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770747]"]},"5372":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T06:55:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770751]"]},"5373":{"ocel:activity":"check references","ocel:timestamp":"2019-09-11T07:04:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770587]"]},"5374":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T07:18:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770818]"]},"5375":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T07:19:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770809]"]},"5376":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-11T07:22:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770598]"]},"5377":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-11T07:22:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770826]"]},"5378":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T07:26:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770684]"]},"5379":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T07:31:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770739]"]},"5380":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T07:35:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770813]"]},"5381":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-11T07:42:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770791]"]},"5382":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-11T07:45:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770672]","Offer[[990096]]"]},"5383":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-11T07:53:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770625]"]},"5384":{"ocel:activity":"check references","ocel:timestamp":"2019-09-11T07:59:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770711]"]},"5385":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T08:06:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770779]"]},"5386":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T08:14:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770555]"]},"5387":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T08:19:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770801]"]},"5388":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-11T08:20:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770566]"]},"5389":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-11T08:22:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770696]","Offer[[990093]]"]},"5390":{"ocel:activity":"check references","ocel:timestamp":"2019-09-11T08:23:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770721]"]},"5391":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-11T08:30:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770827]"]},"5392":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-11T08:38:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770822]"]},"5393":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T08:54:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770788]"]},"5394":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T08:58:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770768]"]},"5395":{"ocel:activity":"check references","ocel:timestamp":"2019-09-11T09:04:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770702]"]},"5396":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-11T09:16:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770666]"]},"5397":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-11T09:30:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770681]"]},"5398":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-11T09:44:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770828]"]},"5399":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T09:45:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770823]"]},"5400":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-11T09:45:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770757]"]},"5402":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T10:07:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770538]"]},"5403":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T10:21:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770769]"]},"5404":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T10:55:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770803]"]},"5405":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-11T11:03:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770672]","Offer[[990096]]"]},"5406":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-11T11:04:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770677]"]},"5407":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-11T11:14:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770829]"]},"5408":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-11T11:23:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770673]"]},"5409":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T11:25:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770758]"]},"5410":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T11:29:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770821]"]},"5411":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-11T11:34:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770673]"]},"5412":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T12:00:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770798]"]},"5413":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-11T12:10:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770537]"]},"5414":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-11T12:12:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770621]"]},"5415":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-11T12:15:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770624]"]},"5416":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-11T12:19:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770695]"]},"5417":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T12:44:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770727]"]},"5418":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T12:45:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770774]"]},"5419":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-11T12:52:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770721]"]},"5420":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-11T13:03:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770813]"]},"5421":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-11T13:06:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770329]","Offer[[990097]]"]},"5422":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-11T13:08:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770625]","Offer[[990098]]"]},"5423":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-11T13:10:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770711]"]},"5424":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-11T13:22:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770437]"]},"5425":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-11T13:44:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770666]","Offer[[990099]]"]},"5426":{"ocel:activity":"check references","ocel:timestamp":"2019-09-11T14:16:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770700]"]},"5427":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T14:16:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770756]"]},"5428":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T14:20:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770708]"]},"5429":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-11T14:40:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770723]"]},"5430":{"ocel:activity":"check references","ocel:timestamp":"2019-09-11T14:41:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770764]"]},"5431":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-11T14:42:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770621]"]},"5432":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T14:47:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770813]"]},"5433":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-11T14:55:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770752]"]},"5434":{"ocel:activity":"check references","ocel:timestamp":"2019-09-11T15:17:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770477]"]},"5435":{"ocel:activity":"check references","ocel:timestamp":"2019-09-11T15:28:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770519]"]},"5436":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-11T15:31:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770780]"]},"5437":{"ocel:activity":"check references","ocel:timestamp":"2019-09-11T15:48:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770665]"]},"5438":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-11T15:54:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770613]"]},"5439":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-11T16:06:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770596]"]},"5440":{"ocel:activity":"check references","ocel:timestamp":"2019-09-11T16:16:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770803]"]},"5441":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-11T16:32:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770673]"]},"5442":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-11T16:32:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770830]"]},"5443":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T16:39:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770778]"]},"5444":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-11T17:16:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770665]"]},"5446":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-11T17:23:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770817]"]},"5447":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-11T18:12:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770743]"]},"5448":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-11T19:11:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770778]"]},"5449":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T06:58:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770779]"]},"5450":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-12T07:10:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770558]","Offer[[990075]]"]},"5451":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T07:12:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770720]"]},"5452":{"ocel:activity":"check references","ocel:timestamp":"2019-09-12T07:16:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770636]"]},"5453":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T07:22:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770684]"]},"5454":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T07:27:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770774]"]},"5455":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-12T07:50:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770647]"]},"5456":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-12T07:50:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770831]"]},"5457":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T08:07:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770772]"]},"5458":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T08:16:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770757]"]},"5459":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-12T08:20:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770689]"]},"5460":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-12T08:20:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770655]"]},"5461":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-12T08:22:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770798]"]},"5462":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T08:24:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770708]"]},"5463":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T08:29:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770727]"]},"5464":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-12T08:37:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770819]"]},"5465":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-12T08:37:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770662]"]},"5466":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T08:38:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770819]"]},"5467":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-12T08:44:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770782]"]},"5468":{"ocel:activity":"check references","ocel:timestamp":"2019-09-12T09:02:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770821]"]},"5469":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T09:22:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770617]"]},"5470":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-12T09:22:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770503]"]},"5471":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T09:23:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770538]"]},"5472":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-12T09:25:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770832]"]},"5473":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-12T09:27:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770749]"]},"5474":{"ocel:activity":"check references","ocel:timestamp":"2019-09-12T09:29:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770753]"]},"5475":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-12T09:30:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770743]","Offer[[990100]]"]},"5476":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-12T09:44:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770813]"]},"5477":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-12T09:52:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770484]"]},"5478":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T10:11:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770768]"]},"5479":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T10:12:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770793]"]},"5480":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-12T10:30:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770725]","Offer[[990095]]"]},"5481":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-12T10:34:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770493]"]},"5482":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-12T10:36:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770833]"]},"5483":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-12T10:40:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770737]"]},"5484":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T10:46:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770788]"]},"5486":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-12T10:48:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770618]"]},"5487":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-12T10:48:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770656]"]},"5488":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-12T10:58:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770636]"]},"5489":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-12T11:09:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770557]","Offer[[990089]]"]},"5490":{"ocel:activity":"check references","ocel:timestamp":"2019-09-12T11:10:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770783]"]},"5491":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T11:23:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770756]"]},"5492":{"ocel:activity":"check references","ocel:timestamp":"2019-09-12T11:49:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770555]"]},"5493":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-12T11:52:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770811]"]},"5494":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-12T11:56:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770834]"]},"5495":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-12T12:02:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770500]"]},"5496":{"ocel:activity":"check references","ocel:timestamp":"2019-09-12T12:11:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770752]"]},"5497":{"ocel:activity":"check references","ocel:timestamp":"2019-09-12T12:15:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770736]"]},"5498":{"ocel:activity":"check references","ocel:timestamp":"2019-09-12T12:32:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770586]"]},"5499":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-12T13:06:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770689]","Offer[[990101]]"]},"5500":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-12T13:16:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770707]"]},"5501":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-12T13:16:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770608]"]},"5502":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-12T13:17:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770346]"]},"5503":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-12T13:27:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770777]"]},"5504":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T13:34:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770823]"]},"5505":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-12T13:37:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770835]"]},"5506":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-12T13:56:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770752]"]},"5507":{"ocel:activity":"check references","ocel:timestamp":"2019-09-12T14:01:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770814]"]},"5508":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T14:03:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770708]"]},"5509":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-12T14:07:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770695]"]},"5510":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-12T14:13:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770702]"]},"5511":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-12T14:24:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770812]"]},"5512":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-12T14:27:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770633]"]},"5513":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-12T14:42:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770555]"]},"5514":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-12T14:58:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770836]"]},"5515":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T15:02:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770613]"]},"5516":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-12T15:19:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770477]"]},"5517":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-12T15:19:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770540]"]},"5518":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-12T15:30:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770736]"]},"5519":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-12T15:37:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770790]"]},"5520":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-12T15:45:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770772]"]},"5521":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-12T16:07:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770743]","Offer[[990100]]"]},"5522":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-12T16:14:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770824]"]},"5523":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T16:26:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770782]"]},"5524":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T16:32:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770662]"]},"5525":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-12T16:41:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770837]"]},"5526":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-12T16:52:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770757]"]},"5527":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-12T17:12:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770540]"]},"5528":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-12T17:20:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770817]"]},"5529":{"ocel:activity":"check references","ocel:timestamp":"2019-09-12T17:23:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770758]"]},"5530":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-12T17:49:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770385]"]},"5531":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-12T18:32:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770834]"]},"5532":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-12T18:33:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770838]"]},"5533":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-12T18:36:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770833]"]},"5535":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-12T20:16:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770766]"]},"5536":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T06:40:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770834]"]},"5537":{"ocel:activity":"check references","ocel:timestamp":"2019-09-13T06:49:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770819]"]},"5538":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-13T06:56:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770811]"]},"5539":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-13T07:08:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770777]"]},"5540":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-13T07:25:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770828]"]},"5541":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-13T07:50:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770625]","Offer[[990098]]"]},"5542":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-13T07:57:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770487]"]},"5543":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-13T07:57:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770839]"]},"5544":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T08:11:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770540]"]},"5545":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-13T08:13:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770385]"]},"5546":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-13T08:33:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770806]"]},"5547":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-13T08:35:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770655]"]},"5548":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T08:38:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770690]"]},"5549":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-13T08:39:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770549]"]},"5550":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-13T09:01:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770638]","Offer[[990094]]"]},"5551":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-13T09:02:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770803]"]},"5552":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-13T09:28:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770438]"]},"5553":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-13T09:37:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770753]"]},"5554":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-13T09:39:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770840]"]},"5555":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-13T09:57:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770825]"]},"5556":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-13T10:04:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770695]"]},"5557":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T10:07:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770727]"]},"5558":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T10:08:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770777]"]},"5559":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T10:23:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770824]"]},"5560":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T10:25:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770812]"]},"5561":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-13T10:33:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770664]","Offer[[990077]]"]},"5562":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-13T10:33:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770723]"]},"5563":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-13T11:02:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770841]"]},"5564":{"ocel:activity":"check references","ocel:timestamp":"2019-09-13T11:42:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770731]"]},"5565":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-13T11:44:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770665]"]},"5566":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-13T11:47:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770842]"]},"5568":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-13T12:03:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770493]"]},"5569":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-13T12:11:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770555]"]},"5570":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T12:42:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770806]"]},"5571":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T13:07:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770833]"]},"5572":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-13T13:11:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770693]"]},"5573":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-13T13:17:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770766]"]},"5574":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-13T13:18:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770843]"]},"5575":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T13:40:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770822]"]},"5576":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-13T13:44:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770603]"]},"5577":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T13:54:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770791]"]},"5578":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-13T13:56:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770842]"]},"5579":{"ocel:activity":"check references","ocel:timestamp":"2019-09-13T14:08:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770757]"]},"5580":{"ocel:activity":"check references","ocel:timestamp":"2019-09-13T14:08:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770793]"]},"5581":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-13T14:21:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770844]"]},"5582":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-13T14:32:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770618]"]},"5583":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-13T14:40:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770732]"]},"5584":{"ocel:activity":"check references","ocel:timestamp":"2019-09-13T14:42:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770735]"]},"5585":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-13T14:42:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770656]"]},"5586":{"ocel:activity":"check references","ocel:timestamp":"2019-09-13T14:49:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770817]"]},"5587":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-13T14:54:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770708]"]},"5588":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-13T14:54:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770674]"]},"5589":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-13T15:11:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770780]"]},"5590":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-13T15:15:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770775]"]},"5591":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-13T15:19:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770787]"]},"5592":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-13T15:26:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770845]"]},"5593":{"ocel:activity":"check references","ocel:timestamp":"2019-09-13T15:41:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770823]"]},"5594":{"ocel:activity":"check references","ocel:timestamp":"2019-09-13T16:28:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770613]"]},"5595":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-13T16:37:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770846]"]},"5596":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-13T17:19:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770569]","Offer[[990090]]"]},"5597":{"ocel:activity":"check references","ocel:timestamp":"2019-09-13T17:31:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770822]"]},"5598":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-13T17:54:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770825]"]},"5599":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-13T18:16:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770730]"]},"5600":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-13T18:20:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770732]"]},"5601":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-13T18:20:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770847]"]},"5602":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-13T19:38:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770649]"]},"5603":{"ocel:activity":"check references","ocel:timestamp":"2019-09-13T19:57:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770788]"]},"5604":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-13T20:10:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770848]"]},"5606":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-13T20:47:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770688]"]},"5607":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-13T20:47:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770715]"]},"5608":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-13T20:47:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770699]"]},"5609":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-13T20:47:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770764]"]},"5611":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-14T12:56:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770789]"]},"5614":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-15T13:45:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770809]"]},"5615":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-16T07:11:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770818]"]},"5616":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-16T07:25:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770784]"]},"5617":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T07:35:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770756]"]},"5618":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-16T07:37:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770617]"]},"5619":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T07:40:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770484]"]},"5620":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-16T07:40:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770849]"]},"5621":{"ocel:activity":"check references","ocel:timestamp":"2019-09-16T07:49:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770747]"]},"5622":{"ocel:activity":"check references","ocel:timestamp":"2019-09-16T08:07:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770727]"]},"5623":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-16T08:08:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770736]"]},"5624":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T08:10:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770693]"]},"5625":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T08:11:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770825]"]},"5626":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-16T08:26:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770833]"]},"5627":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-16T08:33:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770607]","Offer[[990082]]"]},"5628":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-16T08:38:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770787]"]},"5629":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-16T08:42:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770649]"]},"5630":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-16T08:45:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770843]"]},"5631":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-16T08:55:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770839]"]},"5632":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T08:55:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770768]"]},"5633":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T09:00:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770812]"]},"5634":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-16T09:06:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770850]"]},"5635":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T09:07:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770538]"]},"5636":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T09:23:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770842]"]},"5637":{"ocel:activity":"check references","ocel:timestamp":"2019-09-16T09:29:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770739]"]},"5638":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T09:35:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770719]"]},"5639":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-16T09:43:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770713]"]},"5640":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-16T09:46:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770659]"]},"5641":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-16T09:50:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770843]"]},"5642":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-16T09:50:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770851]"]},"5643":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T09:57:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770596]"]},"5644":{"ocel:activity":"check references","ocel:timestamp":"2019-09-16T10:00:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770756]"]},"5645":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-16T10:01:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770665]","Offer[[990102]]"]},"5646":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T10:14:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770774]"]},"5647":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-16T10:45:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770611]"]},"5648":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T10:49:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770684]"]},"5649":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T10:52:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770711]"]},"5650":{"ocel:activity":"check references","ocel:timestamp":"2019-09-16T10:55:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770777]"]},"5651":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T10:57:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770786]"]},"5652":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T10:58:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770828]"]},"5653":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T11:02:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770787]"]},"5654":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-16T11:25:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770852]"]},"5655":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-16T11:49:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770586]"]},"5656":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-16T11:59:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770730]"]},"5657":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T12:08:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770803]"]},"5658":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-16T12:35:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770853]"]},"5659":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-16T12:35:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770707]"]},"5660":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T12:43:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770622]"]},"5661":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T12:56:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770787]"]},"5662":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T12:58:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770779]"]},"5663":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T13:05:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770602]"]},"5664":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T13:12:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770718]"]},"5665":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T13:17:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770751]"]},"5666":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T13:18:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770843]"]},"5667":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-16T13:29:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770648]"]},"5668":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-16T13:55:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770854]"]},"5669":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T14:22:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770628]"]},"5670":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-16T14:28:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770794]"]},"5671":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-16T14:35:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770636]"]},"5672":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-16T14:36:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770651]"]},"5673":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-16T15:11:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770846]"]},"5674":{"ocel:activity":"check references","ocel:timestamp":"2019-09-16T15:13:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770809]"]},"5675":{"ocel:activity":"check references","ocel:timestamp":"2019-09-16T15:14:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770806]"]},"5676":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-16T15:19:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770839]"]},"5677":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-16T15:29:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770671]"]},"5678":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-16T15:34:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770855]"]},"5679":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T15:36:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770659]"]},"5680":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-16T16:01:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770651]"]},"5681":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-16T16:53:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770856]"]},"5682":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-16T17:07:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770707]"]},"5683":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-16T17:48:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770572]"]},"5684":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-16T19:08:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770857]"]},"5685":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-16T20:28:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770777]"]},"5686":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-16T20:45:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770858]"]},"5688":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-16T21:13:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770755]"]},"5689":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-16T21:13:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770700]"]},"5690":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-16T21:13:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770543]"]},"5691":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-16T21:13:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770615]"]},"5692":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T03:55:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770859]"]},"5693":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-17T06:02:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770791]"]},"5694":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T06:41:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770781]"]},"5695":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T06:44:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770810]"]},"5696":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-17T07:00:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770357]"]},"5697":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-17T07:06:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770700]"]},"5698":{"ocel:activity":"check references","ocel:timestamp":"2019-09-17T07:29:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770818]"]},"5699":{"ocel:activity":"check references","ocel:timestamp":"2019-09-17T07:40:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770834]"]},"5700":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T07:52:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770733]"]},"5701":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-17T07:52:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770810]"]},"5702":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T07:57:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770860]"]},"5703":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-17T07:58:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770699]"]},"5704":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-17T08:06:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770739]"]},"5705":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T08:09:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770835]"]},"5706":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T08:09:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770848]"]},"5707":{"ocel:activity":"check references","ocel:timestamp":"2019-09-17T08:14:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770833]"]},"5708":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T08:14:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770835]"]},"5709":{"ocel:activity":"check references","ocel:timestamp":"2019-09-17T08:14:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770769]"]},"5710":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-17T08:22:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770537]"]},"5711":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-17T08:26:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770833]"]},"5712":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-17T08:32:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770611]"]},"5713":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-17T08:34:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770608]"]},"5714":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T08:35:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770742]"]},"5715":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-17T08:35:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770615]"]},"5716":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-17T08:39:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770600]"]},"5717":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-17T08:42:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770757]"]},"5718":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-17T08:48:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770796]"]},"5719":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-17T09:20:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770704]"]},"5720":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-17T09:27:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770632]"]},"5721":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-17T09:30:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770846]"]},"5722":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T09:39:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770861]"]},"5723":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-17T09:39:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770437]"]},"5724":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-17T09:44:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770784]"]},"5725":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T09:51:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770859]"]},"5726":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T09:52:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770742]"]},"5727":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T09:59:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770816]"]},"5728":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T10:11:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770848]"]},"5729":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-17T10:30:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770843]"]},"5730":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-17T10:41:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770636]","Offer[[990103]]"]},"5731":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T10:47:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770841]"]},"5732":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T10:58:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770799]"]},"5733":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T11:02:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770862]"]},"5734":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T11:39:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770846]"]},"5735":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T11:46:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770863]"]},"5736":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T11:49:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770841]"]},"5737":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-17T11:57:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770437]","Offer[[990104]]"]},"5738":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-17T11:59:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770752]"]},"5739":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-17T12:01:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770737]"]},"5740":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-17T12:10:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770713]"]},"5741":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T12:18:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770853]"]},"5742":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-17T12:39:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770794]"]},"5743":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T12:51:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770804]"]},"5744":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-17T12:58:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770775]"]},"5745":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T13:17:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770864]"]},"5746":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-17T13:29:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770781]"]},"5747":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T13:33:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770854]"]},"5748":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T13:39:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770805]"]},"5749":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-17T13:41:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770697]"]},"5750":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-17T13:42:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770438]"]},"5751":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T13:44:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770808]"]},"5752":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T13:45:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770840]"]},"5753":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T13:46:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770770]"]},"5754":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T13:50:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770794]"]},"5755":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T13:52:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770785]"]},"5756":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-17T14:03:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770737]"]},"5757":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T14:19:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770865]"]},"5758":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-17T14:32:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770806]"]},"5759":{"ocel:activity":"check references","ocel:timestamp":"2019-09-17T14:47:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770733]"]},"5760":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T14:48:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770784]"]},"5761":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-17T14:54:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770764]"]},"5762":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-17T14:57:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770658]","Offer[[990092]]"]},"5763":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T15:01:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770810]"]},"5764":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T15:23:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770866]"]},"5765":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T15:24:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770816]"]},"5766":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-17T15:31:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770747]"]},"5767":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-17T15:55:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770801]"]},"5768":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-17T16:16:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770804]"]},"5769":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T16:32:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770867]"]},"5770":{"ocel:activity":"check references","ocel:timestamp":"2019-09-17T16:46:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770835]"]},"5771":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-17T16:58:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770785]"]},"5772":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-17T17:25:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770777]"]},"5773":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-17T17:47:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770808]"]},"5774":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T18:04:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770868]"]},"5775":{"ocel:activity":"check references","ocel:timestamp":"2019-09-17T18:45:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770780]"]},"5776":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-17T18:48:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770648]","Offer[[990105]]"]},"5777":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T19:38:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770869]"]},"5778":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-17T20:40:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770728]"]},"5779":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-17T22:12:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770870]"]},"5780":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T05:49:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770871]"]},"5781":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T06:46:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770854]"]},"5782":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T06:57:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770501]"]},"5783":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T07:13:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770824]"]},"5784":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T07:22:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770453]"]},"5785":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T07:25:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770819]"]},"5786":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-18T07:30:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770641]","Offer[[990087]]"]},"5787":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T07:49:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770732]"]},"5788":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T07:55:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770846]"]},"5789":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-18T08:00:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770700]"]},"5790":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T08:06:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770538]"]},"5791":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-18T08:08:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770704]"]},"5792":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T08:08:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770872]"]},"5793":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T08:20:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770805]"]},"5794":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T08:25:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770778]"]},"5795":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-18T08:26:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770755]"]},"5796":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-18T08:40:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770699]"]},"5797":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T08:52:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770756]"]},"5798":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T08:53:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770873]"]},"5799":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T08:56:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770830]"]},"5800":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T08:57:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770840]"]},"5801":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-18T09:20:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770666]","Offer[[990099]]"]},"5802":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-18T09:24:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770357]"]},"5803":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T09:30:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770617]"]},"5804":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T09:34:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770868]"]},"5805":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T09:50:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770453]"]},"5806":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T09:51:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770690]"]},"5807":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T10:07:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770849]"]},"5808":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T10:14:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770768]"]},"5809":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T10:15:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770792]"]},"5810":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-18T10:22:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770728]"]},"5811":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T10:30:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770874]"]},"5812":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-18T10:41:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770818]"]},"5813":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T10:54:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770713]"]},"5815":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T11:13:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770642]"]},"5816":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T11:13:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770842]"]},"5817":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T11:45:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770875]"]},"5818":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T12:21:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770767]"]},"5819":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T12:29:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770720]"]},"5820":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-18T12:32:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770493]"]},"5821":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T12:38:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770868]"]},"5822":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T12:46:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770816]"]},"5823":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T12:47:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770797]"]},"5824":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T13:00:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770622]"]},"5825":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T13:00:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770830]"]},"5826":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T13:06:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770859]"]},"5827":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T13:09:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770853]"]},"5828":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T13:14:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770876]"]},"5829":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T13:20:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770628]"]},"5830":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-18T13:21:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770739]"]},"5831":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T13:30:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770841]"]},"5832":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T13:38:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770662]"]},"5833":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T13:42:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770799]"]},"5834":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T13:42:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770453]"]},"5835":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-18T13:46:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770671]"]},"5836":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-18T13:49:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770572]"]},"5837":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T13:57:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770713]"]},"5838":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T13:59:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770877]"]},"5839":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T14:03:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770649]"]},"5840":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-18T14:04:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770770]"]},"5841":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T14:05:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770684]"]},"5842":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T14:08:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770828]"]},"5843":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-18T14:08:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770767]"]},"5844":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T14:13:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770785]"]},"5845":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T14:34:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770728]"]},"5846":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T14:41:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770733]"]},"5847":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T14:44:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770841]"]},"5848":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T14:55:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770857]"]},"5849":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-18T15:02:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770797]"]},"5850":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T15:17:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770781]"]},"5851":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T15:37:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770669]"]},"5852":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T15:40:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770852]"]},"5853":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T15:42:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770878]"]},"5854":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T15:42:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770877]"]},"5855":{"ocel:activity":"check references","ocel:timestamp":"2019-09-18T15:43:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770842]"]},"5856":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T15:44:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770717]"]},"5857":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-18T16:06:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770543]"]},"5858":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T16:06:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770742]"]},"5859":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T16:40:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770706]"]},"5860":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-18T16:43:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770767]"]},"5861":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-18T17:01:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770717]"]},"5862":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T17:09:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770879]"]},"5863":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-18T17:32:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770784]"]},"5864":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-18T17:45:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770863]"]},"5865":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-18T18:30:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770688]"]},"5866":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T18:47:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770880]"]},"5868":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T18:57:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770823]"]},"5869":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T18:57:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770448]"]},"5870":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T18:57:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770519]"]},"5871":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-18T18:57:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770712]"]},"5872":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-18T19:10:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770617]"]},"5873":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-18T21:02:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770881]"]},"5874":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-19T07:07:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770636]","Offer[[990103]]"]},"5875":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-19T07:17:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770554]"]},"5876":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-19T07:29:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770540]"]},"5877":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T07:37:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770791]"]},"5878":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-19T07:42:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770699]","Offer[[990106]]"]},"5879":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-19T07:49:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770849]"]},"5880":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T07:49:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770774]"]},"5881":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-19T07:59:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770753]"]},"5882":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-19T07:59:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770882]"]},"5883":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-19T08:02:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770652]"]},"5884":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-19T08:03:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770706]"]},"5885":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-19T08:08:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770848]"]},"5886":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-19T08:09:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770857]"]},"5887":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-19T08:10:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770729]"]},"5888":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-19T08:23:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770593]"]},"5889":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-19T08:29:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770700]","Offer[[990107]]"]},"5890":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T08:39:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770756]"]},"5891":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T08:39:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770732]"]},"5892":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T08:51:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770712]"]},"5893":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-19T08:51:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770649]"]},"5894":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-19T08:52:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770543]"]},"5895":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-19T09:05:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770707]"]},"5896":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-19T09:12:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770881]"]},"5897":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T09:16:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770747]"]},"5898":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-19T09:28:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770662]"]},"5899":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-19T09:44:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770883]"]},"5900":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-19T09:44:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770879]"]},"5901":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-19T09:55:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770804]"]},"5902":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-19T09:56:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770877]"]},"5903":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T09:58:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770841]"]},"5904":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-19T10:04:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770797]"]},"5905":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-19T10:08:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770712]"]},"5906":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T10:38:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770728]"]},"5907":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T10:49:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770448]"]},"5908":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T11:02:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770778]"]},"5909":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-19T11:03:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770715]"]},"5910":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-19T11:12:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770884]"]},"5911":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T11:34:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770796]"]},"5912":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T11:41:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770868]"]},"5913":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T11:45:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770772]"]},"5914":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-19T11:50:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770790]"]},"5915":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-19T11:54:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770702]"]},"5916":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-19T11:56:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770885]"]},"5917":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T12:11:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770805]"]},"5919":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-19T12:11:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770758]"]},"5920":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-19T12:17:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770792]"]},"5921":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T12:44:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770840]"]},"5922":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-19T12:45:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770864]"]},"5923":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-19T12:51:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770862]"]},"5924":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-19T12:52:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770790]"]},"5925":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-19T12:56:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770554]"]},"5926":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-19T13:01:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770779]"]},"5927":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T13:11:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770806]"]},"5928":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T13:14:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770791]"]},"5929":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-19T13:37:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770886]"]},"5930":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T13:41:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770540]"]},"5931":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-19T13:45:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770733]"]},"5932":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-19T13:48:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770754]"]},"5933":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-19T13:48:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770881]"]},"5934":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-19T13:53:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770863]"]},"5935":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-19T13:55:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770778]"]},"5936":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-19T14:04:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770874]"]},"5937":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T14:25:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770854]"]},"5938":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T14:28:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770780]"]},"5939":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-19T14:32:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770885]"]},"5940":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T14:38:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770816]"]},"5941":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T14:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770719]"]},"5942":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T14:39:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770686]"]},"5943":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-19T14:40:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770680]"]},"5944":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-19T14:51:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770729]"]},"5945":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-19T14:59:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770887]"]},"5946":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T15:07:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770772]"]},"5947":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-19T15:16:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770728]"]},"5948":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-19T15:22:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770773]"]},"5949":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T15:41:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770810]"]},"5950":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-19T15:49:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770519]"]},"5951":{"ocel:activity":"check references","ocel:timestamp":"2019-09-19T16:02:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770843]"]},"5952":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-19T16:03:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770852]"]},"5953":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-19T16:44:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770888]"]},"5954":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-19T16:59:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770697]","Offer[[990108]]"]},"5955":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-19T17:13:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770837]"]},"5956":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-19T17:30:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770596]"]},"5957":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-19T17:39:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770864]"]},"5958":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-19T18:16:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770807]"]},"5959":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-19T18:40:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770889]"]},"5960":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-19T20:50:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770890]"]},"5962":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-19T20:53:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770745]"]},"5963":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-20T04:24:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770891]"]},"5964":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T06:45:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770845]"]},"5965":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T07:03:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770853]"]},"5966":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-20T07:04:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770830]"]},"5967":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-20T07:23:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770823]"]},"5968":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-20T07:29:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770892]"]},"5969":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-20T07:30:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770807]"]},"5970":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-20T08:19:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770770]"]},"5971":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T08:38:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770789]"]},"5972":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T08:38:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770858]"]},"5973":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-20T08:42:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770794]"]},"5974":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-20T08:43:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770893]"]},"5975":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-20T09:04:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770808]"]},"5976":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T09:13:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770785]"]},"5977":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T09:30:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770713]"]},"5978":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T09:33:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770750]"]},"5979":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-20T09:39:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770837]"]},"5980":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T09:48:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770891]"]},"5981":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-20T09:51:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770891]"]},"5982":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-20T09:54:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770845]"]},"5983":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-20T10:12:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770894]"]},"5984":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T10:18:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770880]"]},"5985":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T10:27:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770886]"]},"5986":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-20T10:36:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770879]"]},"5987":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T10:55:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770838]"]},"5988":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T10:56:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770875]"]},"5989":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T11:28:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770781]"]},"5990":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T11:47:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770877]"]},"5991":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-20T11:59:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770862]"]},"5992":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-20T12:05:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770770]"]},"5993":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-20T12:17:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770652]","Offer[[990109]]"]},"5994":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-20T13:01:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770587]"]},"5995":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-20T13:01:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770720]"]},"5997":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-20T13:04:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770735]"]},"5998":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-20T13:04:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770783]"]},"5999":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-20T13:04:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770748]"]},"6000":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-20T13:14:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770538]"]},"6001":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T13:19:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770710]"]},"6002":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-20T13:22:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770778]"]},"6003":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-20T13:22:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770895]"]},"6004":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-20T13:33:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770702]"]},"6005":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-20T13:33:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770840]"]},"6006":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T13:44:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770797]"]},"6007":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T13:48:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770662]"]},"6008":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-20T13:54:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770453]"]},"6009":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-20T13:57:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770864]"]},"6010":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T13:59:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770596]"]},"6011":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T14:00:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770878]"]},"6012":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-20T14:01:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770769]"]},"6013":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T14:16:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770771]"]},"6014":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T14:25:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770768]"]},"6015":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-20T14:29:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770896]"]},"6016":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-20T14:44:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770747]"]},"6017":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T15:04:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770626]"]},"6018":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-20T15:07:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770710]"]},"6019":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-20T15:16:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770758]"]},"6020":{"ocel:activity":"check references","ocel:timestamp":"2019-09-20T15:30:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770770]"]},"6021":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-20T15:43:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770897]"]},"6022":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-20T16:52:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770840]"]},"6023":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-20T16:54:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770626]"]},"6024":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-20T17:29:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770863]"]},"6025":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-20T18:45:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770770]"]},"6026":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-20T18:54:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770826]"]},"6028":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-21T04:23:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770684]"]},"6029":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-21T04:23:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770814]"]},"6030":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-21T04:23:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770868]"]},"6032":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-21T13:22:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770817]"]},"6033":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-21T13:22:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770628]"]},"6034":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-21T13:22:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770760]"]},"6035":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-21T13:22:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770731]"]},"6036":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-21T13:22:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770660]"]},"6038":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-22T06:38:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770763]"]},"6039":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-22T06:38:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770788]"]},"6040":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-22T06:38:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770792]"]},"6041":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-22T06:38:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770822]"]},"6042":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-22T06:38:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770774]"]},"6043":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-22T06:38:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770854]"]},"6044":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-22T06:38:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770722]"]},"6046":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-22T14:05:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770613]"]},"6047":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-22T14:05:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770690]"]},"6048":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-22T14:05:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770738]"]},"6049":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-23T06:29:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770773]"]},"6050":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T06:31:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770878]"]},"6051":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T06:48:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770885]"]},"6052":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-23T06:49:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770448]"]},"6053":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-23T07:10:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770750]"]},"6054":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-23T07:17:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770843]"]},"6055":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-23T07:22:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770860]"]},"6056":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T07:25:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770874]"]},"6057":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-23T07:34:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770850]"]},"6058":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-23T07:37:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770730]"]},"6059":{"ocel:activity":"check references","ocel:timestamp":"2019-09-23T07:38:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770649]"]},"6060":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-23T07:40:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770880]"]},"6061":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-23T07:48:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770843]"]},"6062":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-23T07:58:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770865]"]},"6063":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T08:08:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770891]"]},"6064":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-23T08:12:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770642]"]},"6065":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-23T08:12:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770898]"]},"6066":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-23T08:25:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770622]"]},"6067":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T08:34:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770807]"]},"6068":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T08:53:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770886]"]},"6069":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-23T08:57:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770890]"]},"6070":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-23T09:12:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770859]"]},"6071":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-23T09:19:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770735]"]},"6072":{"ocel:activity":"check references","ocel:timestamp":"2019-09-23T09:20:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770742]"]},"6073":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-23T09:36:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770600]","Offer[[990110]]"]},"6074":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-23T09:47:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770622]"]},"6075":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-23T09:54:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770789]"]},"6076":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-23T09:55:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770876]"]},"6077":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-23T10:22:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770712]","Offer[[990111]]"]},"6078":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-23T10:27:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770662]"]},"6079":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-23T10:35:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770543]"]},"6080":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-23T10:35:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770899]"]},"6081":{"ocel:activity":"check references","ocel:timestamp":"2019-09-23T10:40:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770881]"]},"6082":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-23T10:44:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770826]"]},"6083":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-23T10:44:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770875]"]},"6084":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-23T10:57:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770329]","Offer[[990097]]"]},"6085":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-23T11:03:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770844]"]},"6086":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T11:14:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770858]"]},"6087":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T11:49:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770729]"]},"6088":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-23T12:06:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770809]"]},"6089":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-23T12:06:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770900]"]},"6090":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-23T12:10:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770819]"]},"6091":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T12:37:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770838]"]},"6092":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-23T12:38:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770850]"]},"6093":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-23T12:52:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770771]"]},"6094":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-23T12:54:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770679]"]},"6095":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-23T12:59:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770785]"]},"6096":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-23T12:59:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770864]"]},"6097":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T13:03:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770826]"]},"6098":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-23T13:19:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770860]"]},"6099":{"ocel:activity":"check references","ocel:timestamp":"2019-09-23T13:19:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770808]"]},"6100":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-23T13:20:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770887]"]},"6101":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-23T13:25:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770660]"]},"6102":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-23T13:39:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770857]"]},"6103":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-23T13:40:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770783]"]},"6104":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-23T13:45:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770866]"]},"6105":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-23T13:47:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770586]"]},"6106":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-23T13:49:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770874]"]},"6107":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T14:16:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770865]"]},"6108":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-23T14:17:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770628]"]},"6109":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-23T14:17:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770843]","Offer[[990112]]"]},"6110":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-23T14:31:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770774]"]},"6111":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-23T14:31:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770901]"]},"6112":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-23T14:47:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770448]"]},"6113":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T14:53:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770876]"]},"6114":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-23T15:17:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770586]","Offer[[990113]]"]},"6115":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-23T15:18:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770861]"]},"6116":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-23T15:19:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770884]"]},"6117":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-23T15:38:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770789]"]},"6118":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-23T15:47:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770902]"]},"6119":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-23T16:05:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770752]","Offer[[990114]]"]},"6120":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-23T16:06:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770618]"]},"6121":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-23T16:20:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770656]"]},"6122":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T17:00:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770845]"]},"6123":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-23T17:01:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770861]"]},"6124":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-23T19:37:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770816]"]},"6125":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-23T19:49:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770618]"]},"6126":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-23T19:49:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770903]"]},"6127":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T07:10:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770793]"]},"6128":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-24T07:10:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770844]"]},"6129":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-24T07:26:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770686]"]},"6130":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-24T07:26:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770904]"]},"6131":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-24T07:30:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770816]"]},"6132":{"ocel:activity":"check references","ocel:timestamp":"2019-09-24T07:35:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770863]"]},"6133":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-24T07:39:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770791]"]},"6134":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-24T07:49:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770652]","Offer[[990109]]"]},"6135":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-24T07:53:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770852]"]},"6136":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-24T08:03:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770861]"]},"6137":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-24T08:05:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770840]"]},"6138":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-24T08:28:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770822]"]},"6139":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-24T08:36:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770905]"]},"6140":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-24T08:37:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770816]","Offer[[990115]]"]},"6141":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-24T08:40:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770817]"]},"6142":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-24T08:42:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770793]"]},"6143":{"ocel:activity":"check references","ocel:timestamp":"2019-09-24T08:46:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770729]"]},"6145":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T08:52:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770849]"]},"6146":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T08:52:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770824]"]},"6147":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T08:52:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770834]"]},"6148":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T08:52:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770795]"]},"6149":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T08:55:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770885]"]},"6150":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-24T09:03:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770854]"]},"6151":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-24T09:05:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770890]"]},"6152":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-24T09:19:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770769]"]},"6153":{"ocel:activity":"check references","ocel:timestamp":"2019-09-24T09:27:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770799]"]},"6154":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T09:43:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770838]"]},"6155":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-24T09:44:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770884]"]},"6156":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-24T09:44:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770763]"]},"6157":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-24T09:47:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770866]"]},"6158":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-24T09:54:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770730]","Offer[[990116]]"]},"6159":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-24T09:57:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770906]"]},"6160":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-24T10:00:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770660]"]},"6161":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T10:06:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770781]"]},"6162":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-24T10:08:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770887]"]},"6163":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-24T10:12:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770837]"]},"6164":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-24T10:17:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770840]"]},"6165":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-24T10:50:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770869]"]},"6166":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-24T10:52:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770869]"]},"6167":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-24T11:38:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770907]"]},"6168":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-24T11:41:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770742]"]},"6169":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T12:04:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770858]"]},"6170":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-24T12:12:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770519]"]},"6171":{"ocel:activity":"check references","ocel:timestamp":"2019-09-24T12:17:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770874]"]},"6172":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T12:19:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770846]"]},"6173":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-24T12:24:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770822]"]},"6174":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-24T12:27:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770689]","Offer[[990101]]"]},"6175":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-24T12:41:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770720]"]},"6176":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-24T12:42:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770736]"]},"6177":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-24T12:54:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770842]"]},"6178":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-24T13:01:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770908]"]},"6179":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-24T13:14:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770632]"]},"6180":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-24T13:23:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770875]"]},"6181":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-24T13:44:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770860]"]},"6182":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-24T13:45:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770909]"]},"6183":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T14:17:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770881]"]},"6184":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-24T14:18:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770843]","Offer[[990112]]"]},"6185":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T14:22:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770826]"]},"6186":{"ocel:activity":"check references","ocel:timestamp":"2019-09-24T14:23:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770501]"]},"6187":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-24T14:25:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770788]"]},"6188":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-24T14:29:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770872]"]},"6189":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-24T14:33:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770713]"]},"6190":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-24T14:41:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770868]"]},"6191":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T14:44:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770732]"]},"6192":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T14:51:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770719]"]},"6193":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-24T15:07:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770827]"]},"6194":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-24T15:15:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770910]"]},"6195":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T15:27:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770862]"]},"6196":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-24T15:33:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770808]"]},"6197":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-24T15:40:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770699]","Offer[[990106]]"]},"6198":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-24T15:42:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770691]"]},"6199":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-24T15:59:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770911]"]},"6200":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-24T16:01:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770736]"]},"6201":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-24T16:12:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770477]"]},"6202":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-24T16:41:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770596]"]},"6203":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-24T16:43:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770799]"]},"6204":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-24T17:43:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770912]"]},"6205":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T06:38:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770837]"]},"6206":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-25T07:06:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770854]"]},"6207":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T07:41:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770477]"]},"6208":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-25T07:41:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770913]"]},"6209":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-25T07:41:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770817]"]},"6210":{"ocel:activity":"check references","ocel:timestamp":"2019-09-25T07:53:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770767]"]},"6211":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T08:06:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770680]"]},"6212":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-25T08:16:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770722]"]},"6213":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T08:28:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770747]"]},"6214":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-25T08:32:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770622]"]},"6215":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T08:36:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770501]"]},"6216":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-25T08:36:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770773]"]},"6217":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-25T08:41:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770741]"]},"6218":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T08:51:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770876]"]},"6219":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T08:57:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770738]"]},"6220":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T08:58:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770540]"]},"6221":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T09:03:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770587]"]},"6222":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-25T09:06:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770914]"]},"6223":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T09:08:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770854]"]},"6224":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-25T09:22:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770827]"]},"6225":{"ocel:activity":"check references","ocel:timestamp":"2019-09-25T09:23:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770792]"]},"6226":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-25T09:24:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770728]"]},"6227":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T09:26:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770669]"]},"6228":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T09:29:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770834]"]},"6229":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T09:30:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770691]"]},"6230":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T09:36:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770879]"]},"6231":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T09:45:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770613]"]},"6232":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-25T09:50:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770915]"]},"6233":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-25T09:51:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770748]"]},"6234":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T09:53:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770760]"]},"6235":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T09:55:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770731]"]},"6236":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T10:11:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770768]"]},"6237":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-25T10:36:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770690]"]},"6238":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T10:38:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770822]"]},"6239":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-25T11:22:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770437]","Offer[[990104]]"]},"6240":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T11:23:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770745]"]},"6241":{"ocel:activity":"submit application","ocel:timestamp":"2019-09-25T11:25:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770916]"]},"6242":{"ocel:activity":"check references","ocel:timestamp":"2019-09-25T11:33:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770669]"]},"6243":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-25T11:44:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770839]"]},"6244":{"ocel:activity":"check references","ocel:timestamp":"2019-09-25T11:57:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770859]"]},"6245":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-25T12:02:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770662]"]},"6247":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T12:12:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770727]"]},"6248":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T12:12:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770767]"]},"6249":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T12:12:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770810]"]},"6250":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-25T12:14:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770665]","Offer[[990102]]"]},"6251":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-25T12:38:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770881]"]},"6252":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-25T12:42:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770844]"]},"6253":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-25T12:44:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770899]"]},"6254":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-25T12:50:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770872]"]},"6255":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T13:13:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770805]"]},"6256":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T13:14:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770660]"]},"6257":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T13:18:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770853]"]},"6258":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-25T13:20:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770780]"]},"6259":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-25T13:22:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770896]"]},"6260":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-25T13:27:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770810]"]},"6261":{"ocel:activity":"check references","ocel:timestamp":"2019-09-25T13:27:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770773]"]},"6262":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T13:33:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770865]"]},"6263":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-25T13:38:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770815]"]},"6264":{"ocel:activity":"check references","ocel:timestamp":"2019-09-25T13:43:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770837]"]},"6265":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-25T13:53:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770780]","Offer[[990117]]"]},"6266":{"ocel:activity":"check references","ocel:timestamp":"2019-09-25T13:59:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770866]"]},"6267":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-25T14:01:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770901]"]},"6268":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-25T14:04:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770792]"]},"6269":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-25T14:22:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770741]"]},"6270":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-25T15:06:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770867]"]},"6271":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-25T15:17:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770912]"]},"6272":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T15:29:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770662]"]},"6273":{"ocel:activity":"check references","ocel:timestamp":"2019-09-25T15:40:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770779]"]},"6274":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-25T15:51:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770873]"]},"6275":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-25T15:56:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770615]"]},"6276":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T16:05:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770860]"]},"6277":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T16:08:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770814]"]},"6278":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-25T16:25:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770781]"]},"6279":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-25T17:04:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770762]"]},"6280":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-25T18:08:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770842]"]},"6281":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-25T18:21:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770839]"]},"6282":{"ocel:activity":"check references","ocel:timestamp":"2019-09-25T19:38:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770872]"]},"6283":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-25T20:08:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770771]"]},"6284":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-26T06:19:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770519]"]},"6285":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-26T06:52:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770767]"]},"6286":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-26T07:18:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770807]"]},"6287":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-26T07:31:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770847]"]},"6288":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T07:38:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770783]"]},"6289":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T07:38:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770901]"]},"6290":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-26T08:14:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770903]"]},"6291":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-26T08:38:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770727]"]},"6292":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-26T08:40:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770815]"]},"6293":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-26T08:53:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770878]"]},"6294":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T08:53:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770896]"]},"6295":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-26T09:01:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770783]","Offer[[990118]]"]},"6296":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-26T09:05:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770900]"]},"6297":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-26T09:15:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770856]"]},"6298":{"ocel:activity":"check references","ocel:timestamp":"2019-09-26T09:24:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770876]"]},"6299":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-26T09:35:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770808]"]},"6300":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T09:36:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770717]"]},"6301":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-26T09:38:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770847]"]},"6302":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T09:42:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770728]"]},"6303":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T09:45:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770792]"]},"6304":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-26T09:49:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770867]"]},"6305":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T09:50:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770727]"]},"6306":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-26T09:56:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770697]","Offer[[990108]]"]},"6307":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T09:59:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770626]"]},"6308":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T10:11:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770880]"]},"6309":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-26T10:13:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770909]"]},"6310":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-26T10:20:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770912]"]},"6311":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T10:22:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770721]"]},"6312":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T10:29:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770756]"]},"6313":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-26T11:09:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770876]"]},"6314":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-26T11:11:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770785]"]},"6315":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T11:14:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770596]"]},"6316":{"ocel:activity":"check references","ocel:timestamp":"2019-09-26T11:23:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770839]"]},"6317":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-26T11:25:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770911]"]},"6318":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-26T11:32:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770744]"]},"6319":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-26T11:57:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770773]"]},"6320":{"ocel:activity":"check references","ocel:timestamp":"2019-09-26T12:12:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770865]"]},"6321":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-26T12:36:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770886]"]},"6322":{"ocel:activity":"check references","ocel:timestamp":"2019-09-26T12:38:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770875]"]},"6323":{"ocel:activity":"check references","ocel:timestamp":"2019-09-26T12:45:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770858]"]},"6324":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T12:52:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770899]"]},"6325":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-26T12:54:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770721]"]},"6326":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-26T12:58:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770756]","Offer[[990119]]"]},"6327":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-26T13:14:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770805]"]},"6328":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-26T13:15:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770779]"]},"6329":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-26T13:30:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770586]","Offer[[990113]]"]},"6330":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-26T13:38:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770893]"]},"6331":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T13:39:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770811]"]},"6332":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T13:39:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770893]"]},"6333":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T13:41:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770788]"]},"6334":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T13:52:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770810]"]},"6335":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T13:54:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770876]"]},"6336":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T13:56:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770903]"]},"6337":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-26T13:58:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770872]"]},"6338":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T14:14:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770759]"]},"6339":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T14:37:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770713]"]},"6340":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-26T14:40:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770656]"]},"6341":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-26T14:44:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770622]"]},"6342":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-26T14:58:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770759]","Offer[[990120]]"]},"6343":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-26T14:59:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770900]"]},"6344":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-26T14:59:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770884]"]},"6345":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-26T15:14:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770727]","Offer[[990121]]"]},"6346":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T15:23:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770770]"]},"6347":{"ocel:activity":"check references","ocel:timestamp":"2019-09-26T15:33:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770887]"]},"6348":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-26T15:42:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770824]"]},"6349":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T15:46:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770847]"]},"6350":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-26T16:00:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770706]"]},"6351":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-26T16:14:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770873]"]},"6352":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-26T16:16:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770615]"]},"6353":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-26T16:33:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770788]","Offer[[990122]]"]},"6354":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-26T17:14:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770891]"]},"6355":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-26T18:39:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770735]"]},"6356":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T06:33:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770762]"]},"6357":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-27T06:53:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770712]","Offer[[990111]]"]},"6358":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-27T06:59:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770648]","Offer[[990105]]"]},"6359":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T07:42:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770791]"]},"6360":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-27T07:46:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770624]"]},"6361":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-27T07:51:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770819]"]},"6362":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-27T07:55:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770750]"]},"6363":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-27T08:04:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770905]"]},"6364":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T08:21:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770817]"]},"6365":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-27T09:08:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770853]"]},"6366":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-27T09:30:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770909]"]},"6367":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-27T09:30:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770915]"]},"6368":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-27T09:32:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770871]"]},"6369":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T09:33:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770879]"]},"6370":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T09:48:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770864]"]},"6371":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-27T09:49:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770873]"]},"6372":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-27T09:53:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770863]"]},"6373":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-27T10:09:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770744]"]},"6374":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-27T10:15:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770600]","Offer[[990110]]"]},"6375":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T10:37:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770684]"]},"6376":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-27T10:58:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770596]","Offer[[990123]]"]},"6377":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T11:02:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770819]"]},"6378":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-27T11:11:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770710]"]},"6379":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-27T11:23:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770901]"]},"6380":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T11:26:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770844]"]},"6381":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-27T11:52:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770856]"]},"6382":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T12:01:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770903]"]},"6383":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T12:01:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770713]"]},"6384":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-27T12:13:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770852]"]},"6385":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T12:16:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770893]"]},"6386":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-27T12:19:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770538]"]},"6387":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T12:37:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770857]"]},"6388":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T12:45:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770865]"]},"6389":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-27T13:10:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770837]"]},"6390":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-27T13:19:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770828]"]},"6391":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-27T13:19:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770905]"]},"6392":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T13:50:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770884]"]},"6393":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-27T13:50:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770915]"]},"6394":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-27T13:54:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770811]"]},"6395":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T14:05:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770501]"]},"6396":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-27T14:14:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770793]"]},"6397":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T14:17:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770795]"]},"6398":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T14:27:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770719]"]},"6399":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-27T14:35:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770911]"]},"6400":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T14:48:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770842]"]},"6401":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-27T14:52:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770717]"]},"6402":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T15:11:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770732]"]},"6403":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-27T15:13:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770730]","Offer[[990116]]"]},"6404":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T15:16:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770862]"]},"6405":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T15:22:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770773]"]},"6406":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-27T15:33:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770816]","Offer[[990115]]"]},"6407":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T15:43:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770750]"]},"6408":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-27T16:12:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770621]"]},"6409":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T16:27:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770826]"]},"6410":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T16:29:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770603]"]},"6411":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-27T16:32:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770833]"]},"6412":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-27T16:53:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770827]"]},"6413":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T18:57:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770626]"]},"6414":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T18:59:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770890]"]},"6415":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-27T19:22:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770871]"]},"6416":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-27T20:06:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770740]"]},"6417":{"ocel:activity":"check references","ocel:timestamp":"2019-09-27T20:11:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770706]"]},"6418":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-27T20:12:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770858]"]},"6419":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-30T06:45:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770866]"]},"6420":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-30T07:02:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770679]"]},"6421":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-30T07:02:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770884]"]},"6422":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-30T07:17:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770649]"]},"6423":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-09-30T07:58:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770752]","Offer[[990114]]"]},"6424":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-30T08:07:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770837]"]},"6425":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-30T08:21:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770846]"]},"6426":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-30T08:58:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770767]"]},"6427":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-30T09:07:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770839]"]},"6428":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-30T09:16:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770863]"]},"6429":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-30T09:21:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770845]"]},"6430":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-30T09:28:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770746]"]},"6431":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-30T09:53:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770869]"]},"6432":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-30T10:12:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770710]"]},"6433":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-30T10:20:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770767]"]},"6434":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-30T10:21:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770836]"]},"6435":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-30T10:25:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770882]"]},"6436":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-30T10:28:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770896]"]},"6437":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-30T10:30:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770873]"]},"6438":{"ocel:activity":"check references","ocel:timestamp":"2019-09-30T10:31:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770807]"]},"6439":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-30T10:43:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770877]"]},"6440":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-30T10:47:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770867]"]},"6441":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-30T10:53:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770735]"]},"6442":{"ocel:activity":"make job offer","ocel:timestamp":"2019-09-30T11:27:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770837]","Offer[[990124]]"]},"6443":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-09-30T11:31:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770884]"]},"6444":{"ocel:activity":"first screening","ocel:timestamp":"2019-09-30T11:44:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770782]"]},"6445":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-30T11:58:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770706]"]},"6446":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-30T12:25:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770797]"]},"6447":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-09-30T12:29:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770836]"]},"6448":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-30T12:57:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770857]"]},"6449":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-30T13:04:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770872]"]},"6450":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-30T13:05:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770826]"]},"6451":{"ocel:activity":"check references","ocel:timestamp":"2019-09-30T13:11:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770771]"]},"6452":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-30T13:47:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770821]"]},"6453":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-30T15:10:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770821]"]},"6454":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-30T15:22:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770871]"]},"6455":{"ocel:activity":"consult manager","ocel:timestamp":"2019-09-30T16:11:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770875]"]},"6456":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-09-30T16:54:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770902]"]},"6457":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-30T17:08:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770669]"]},"6458":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-09-30T17:27:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770706]"]},"6459":{"ocel:activity":"send rejection","ocel:timestamp":"2019-09-30T19:07:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770728]"]},"6460":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-09-30T19:22:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770700]","Offer[[990107]]"]},"6461":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-01T07:09:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770740]"]},"6462":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-01T07:22:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770828]"]},"6463":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-01T07:24:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770740]"]},"6464":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-01T07:27:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770770]"]},"6465":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-01T07:28:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770874]"]},"6466":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-01T07:31:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770628]"]},"6467":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-01T07:58:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770884]"]},"6468":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-01T08:02:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770900]"]},"6469":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-01T08:15:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770807]"]},"6470":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-01T08:16:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770914]"]},"6471":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-10-01T08:22:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770756]","Offer[[990119]]"]},"6472":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-01T08:36:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770797]"]},"6473":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-01T08:50:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770844]"]},"6474":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-01T09:00:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770882]"]},"6475":{"ocel:activity":"check references","ocel:timestamp":"2019-10-01T09:20:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770827]"]},"6476":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-01T09:36:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770876]","Offer[[990125]]"]},"6477":{"ocel:activity":"check references","ocel:timestamp":"2019-10-01T09:36:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770885]"]},"6478":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-01T10:07:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770789]"]},"6479":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-01T10:27:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770902]"]},"6480":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-01T10:29:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770859]"]},"6481":{"ocel:activity":"check references","ocel:timestamp":"2019-10-01T10:40:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770717]"]},"6482":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-01T11:00:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770779]"]},"6483":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-01T11:12:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770617]"]},"6484":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-01T11:25:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770617]"]},"6485":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-01T11:51:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770746]"]},"6486":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-01T12:32:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770758]"]},"6487":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-01T13:21:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770841]"]},"6488":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-01T13:22:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770859]"]},"6489":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-01T13:36:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770851]"]},"6490":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-01T13:36:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770914]"]},"6491":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-01T13:40:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770780]","Offer[[990117]]"]},"6492":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-01T13:54:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770906]"]},"6493":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-01T13:55:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770740]"]},"6494":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-01T13:59:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770864]"]},"6495":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-01T14:13:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770792]"]},"6496":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-01T14:18:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770905]"]},"6497":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-01T14:25:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770859]"]},"6498":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-01T14:50:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770810]"]},"6499":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-01T14:52:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770779]","Offer[[990126]]"]},"6500":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-01T15:06:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770706]"]},"6501":{"ocel:activity":"check references","ocel:timestamp":"2019-10-01T15:29:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770849]"]},"6502":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-01T15:31:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770796]"]},"6503":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-01T16:43:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770729]"]},"6504":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-01T16:48:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770875]"]},"6505":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-01T17:25:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770877]"]},"6506":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-01T17:30:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770837]","Offer[[990124]]"]},"6507":{"ocel:activity":"check references","ocel:timestamp":"2019-10-01T18:00:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770847]"]},"6508":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-01T19:14:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770729]"]},"6509":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-02T07:18:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770839]"]},"6510":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-02T07:25:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770772]"]},"6511":{"ocel:activity":"check references","ocel:timestamp":"2019-10-02T07:42:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770900]"]},"6512":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-02T08:00:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770866]"]},"6513":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-02T08:12:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770906]"]},"6514":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-02T08:15:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770717]"]},"6515":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-02T08:25:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770841]"]},"6516":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-02T08:27:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770847]"]},"6517":{"ocel:activity":"check references","ocel:timestamp":"2019-10-02T08:40:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770852]"]},"6518":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-02T08:41:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770628]","Offer[[990127]]"]},"6519":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-02T09:03:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770910]"]},"6520":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-02T09:23:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770849]"]},"6521":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-02T09:43:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770851]"]},"6522":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-02T10:00:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770887]"]},"6523":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-02T10:04:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770706]"]},"6524":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-02T10:17:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770827]"]},"6525":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-02T10:20:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770758]"]},"6526":{"ocel:activity":"check references","ocel:timestamp":"2019-10-02T10:23:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770782]"]},"6527":{"ocel:activity":"check references","ocel:timestamp":"2019-10-02T11:46:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770869]"]},"6528":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-02T11:58:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770806]"]},"6529":{"ocel:activity":"check references","ocel:timestamp":"2019-10-02T12:03:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770902]"]},"6530":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-02T12:04:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770835]"]},"6531":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-02T13:18:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770821]"]},"6532":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-02T13:21:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770806]"]},"6533":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-02T13:34:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770624]"]},"6534":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-02T14:56:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770844]"]},"6535":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-02T14:57:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770897]"]},"6536":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-02T15:15:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770906]"]},"6537":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-02T15:24:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770879]"]},"6538":{"ocel:activity":"check references","ocel:timestamp":"2019-10-02T15:36:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770891]"]},"6539":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-02T16:23:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770815]"]},"6540":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-02T16:46:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770722]"]},"6541":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-02T17:37:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770771]"]},"6542":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-02T19:14:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770833]"]},"6543":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-03T06:33:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770910]"]},"6544":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-03T06:55:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770788]","Offer[[990122]]"]},"6545":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-03T07:25:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770796]"]},"6546":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-03T07:26:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770621]"]},"6547":{"ocel:activity":"check references","ocel:timestamp":"2019-10-03T07:49:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770838]"]},"6548":{"ocel:activity":"check references","ocel:timestamp":"2019-10-03T07:50:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770914]"]},"6549":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-03T08:25:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770899]"]},"6550":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-03T08:25:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770891]"]},"6551":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-03T08:40:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770916]"]},"6552":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-03T08:54:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770839]"]},"6553":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-03T08:56:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770722]"]},"6554":{"ocel:activity":"check references","ocel:timestamp":"2019-10-03T09:12:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770811]"]},"6555":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-03T09:24:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770909]"]},"6556":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-03T09:38:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770838]"]},"6557":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-03T09:45:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770887]"]},"6558":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-03T09:52:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770910]"]},"6560":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-03T10:49:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770811]"]},"6561":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-03T11:58:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770727]","Offer[[990121]]"]},"6562":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-03T12:40:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770850]"]},"6563":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-03T13:21:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770867]"]},"6564":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-03T13:48:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770811]"]},"6565":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-03T14:07:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770902]"]},"6566":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-03T14:14:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770881]"]},"6567":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-03T14:31:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770853]"]},"6568":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-03T14:31:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770729]"]},"6569":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-03T15:26:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770907]"]},"6570":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-03T15:33:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770897]"]},"6571":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-03T15:40:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770793]"]},"6572":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-03T15:46:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770916]"]},"6573":{"ocel:activity":"check references","ocel:timestamp":"2019-10-03T15:52:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770901]"]},"6574":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-03T16:10:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770881]"]},"6575":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-03T20:04:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770771]"]},"6576":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-04T06:27:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770885]"]},"6577":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-04T07:09:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770832]"]},"6578":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-04T07:30:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770902]"]},"6579":{"ocel:activity":"check references","ocel:timestamp":"2019-10-04T07:44:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770905]"]},"6580":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-04T07:51:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770916]"]},"6581":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-10-04T08:25:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770596]","Offer[[990123]]"]},"6582":{"ocel:activity":"check references","ocel:timestamp":"2019-10-04T08:30:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770867]"]},"6583":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-04T08:46:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770538]"]},"6584":{"ocel:activity":"check references","ocel:timestamp":"2019-10-04T08:47:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770897]"]},"6585":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-04T09:21:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770869]"]},"6586":{"ocel:activity":"check references","ocel:timestamp":"2019-10-04T09:29:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770815]"]},"6587":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-04T09:41:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770802]"]},"6588":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-04T09:45:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770748]"]},"6589":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-04T09:54:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770838]"]},"6590":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-04T09:58:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770836]"]},"6591":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-04T10:23:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770889]"]},"6592":{"ocel:activity":"check references","ocel:timestamp":"2019-10-04T10:54:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770873]"]},"6593":{"ocel:activity":"check references","ocel:timestamp":"2019-10-04T11:39:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770906]"]},"6594":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-04T12:03:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770876]","Offer[[990125]]"]},"6595":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-04T12:15:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770864]"]},"6596":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-04T12:52:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770811]"]},"6597":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-04T13:00:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770729]","Offer[[990128]]"]},"6598":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-04T13:16:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770821]"]},"6599":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-04T13:27:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770776]"]},"6600":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-04T13:57:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770905]"]},"6601":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-04T14:15:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770799]"]},"6602":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-04T14:30:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770907]"]},"6603":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-04T14:40:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770907]"]},"6604":{"ocel:activity":"check references","ocel:timestamp":"2019-10-04T14:56:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770916]"]},"6605":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-04T15:05:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770888]"]},"6606":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-04T15:22:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770852]"]},"6607":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-04T15:34:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770908]"]},"6608":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-04T15:44:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770838]"]},"6609":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-04T15:47:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770772]"]},"6610":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-04T16:07:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770868]"]},"6611":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-04T17:36:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770908]"]},"6612":{"ocel:activity":"check references","ocel:timestamp":"2019-10-04T19:31:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770899]"]},"6613":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-10-07T06:22:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770729]","Offer[[990128]]"]},"6614":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-07T07:43:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770850]"]},"6615":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-07T08:27:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770783]","Offer[[990118]]"]},"6616":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-07T08:48:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770894]"]},"6617":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-07T08:55:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770916]"]},"6618":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-07T08:56:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770741]"]},"6619":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-07T09:03:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770690]"]},"6620":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-07T09:09:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770626]"]},"6621":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-07T09:14:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770888]"]},"6622":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-07T09:16:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770906]"]},"6623":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-07T09:25:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770832]"]},"6624":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-07T09:42:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770869]"]},"6625":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-07T10:14:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770895]"]},"6626":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-07T11:11:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770889]"]},"6627":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-07T12:04:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770873]"]},"6628":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-07T12:20:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770853]"]},"6629":{"ocel:activity":"check references","ocel:timestamp":"2019-10-07T12:59:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770909]"]},"6630":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-07T13:03:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770741]"]},"6631":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-07T13:08:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770862]"]},"6632":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-07T13:21:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770851]"]},"6633":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-07T13:28:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770799]"]},"6634":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-07T13:33:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770911]"]},"6635":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-07T13:37:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770626]"]},"6636":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-07T13:57:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770776]"]},"6637":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-07T14:44:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770856]"]},"6638":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-07T14:46:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770802]"]},"6639":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-07T15:45:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770746]"]},"6640":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-07T16:54:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770828]"]},"6641":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-07T17:06:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770862]"]},"6642":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-07T20:33:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770894]"]},"6643":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-08T07:26:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770836]"]},"6644":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-08T07:31:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770898]"]},"6645":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-08T07:31:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770880]"]},"6646":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-08T07:33:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770851]"]},"6647":{"ocel:activity":"check references","ocel:timestamp":"2019-10-08T07:37:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770850]"]},"6648":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-08T08:00:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770908]"]},"6649":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-08T08:09:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770832]"]},"6650":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-08T08:59:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770867]"]},"6651":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-08T09:13:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770864]"]},"6652":{"ocel:activity":"check references","ocel:timestamp":"2019-10-08T09:14:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770741]"]},"6653":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-08T09:20:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770888]"]},"6654":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-08T09:27:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770901]"]},"6655":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-08T09:34:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770872]"]},"6656":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-08T09:53:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770862]"]},"6657":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-08T10:02:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770895]"]},"6658":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-08T10:44:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770915]"]},"6659":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-08T11:58:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770748]"]},"6660":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-08T12:29:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770900]"]},"6661":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-08T13:13:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770850]"]},"6662":{"ocel:activity":"check references","ocel:timestamp":"2019-10-08T13:18:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770896]"]},"6663":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-08T13:31:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770916]"]},"6664":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-08T13:33:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770750]"]},"6665":{"ocel:activity":"check references","ocel:timestamp":"2019-10-08T14:04:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770740]"]},"6666":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-08T14:21:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770898]"]},"6667":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-08T14:31:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770835]"]},"6668":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-08T15:14:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770750]"]},"6669":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-08T15:15:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770867]"]},"6670":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-08T15:37:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770538]"]},"6671":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-08T18:23:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770904]"]},"6672":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-08T20:19:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770782]"]},"6673":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-09T06:19:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770899]"]},"6674":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-09T06:41:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770912]"]},"6675":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-09T07:15:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770898]"]},"6676":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-09T07:27:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770776]"]},"6677":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-09T07:35:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770905]"]},"6678":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-09T07:54:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770802]"]},"6679":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-09T07:57:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770782]"]},"6680":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-09T08:11:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770882]"]},"6681":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-09T08:29:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770815]"]},"6682":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-09T08:43:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770750]"]},"6683":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-09T08:52:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770746]"]},"6684":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-09T09:00:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770896]"]},"6685":{"ocel:activity":"check references","ocel:timestamp":"2019-10-09T09:17:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770907]"]},"6686":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-10-09T09:26:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770759]","Offer[[990120]]"]},"6687":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-09T09:43:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770912]"]},"6688":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-09T10:16:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770855]"]},"6689":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-09T10:25:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770868]"]},"6690":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-09T10:34:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770779]","Offer[[990126]]"]},"6691":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-09T11:03:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770750]"]},"6692":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-09T11:24:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770867]","Offer[[990129]]"]},"6693":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-09T11:29:29.000Z","ocel:vmap":{},"ocel:omap":["Application[770828]"]},"6694":{"ocel:activity":"check references","ocel:timestamp":"2019-10-09T11:43:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770746]"]},"6695":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-09T12:28:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770907]"]},"6696":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-09T12:39:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770741]"]},"6697":{"ocel:activity":"check references","ocel:timestamp":"2019-10-09T13:07:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770624]"]},"6698":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-09T13:25:18.000Z","ocel:vmap":{},"ocel:omap":["Application[770690]"]},"6699":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-09T13:52:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770891]"]},"6700":{"ocel:activity":"check references","ocel:timestamp":"2019-10-09T14:53:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770851]"]},"6701":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-09T15:04:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770900]"]},"6702":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-09T16:41:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770824]"]},"6703":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-09T16:45:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770851]"]},"6704":{"ocel:activity":"check references","ocel:timestamp":"2019-10-09T17:26:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770908]"]},"6705":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-10T06:03:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770847]"]},"6707":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-10T07:42:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770846]"]},"6708":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-10T07:48:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770904]"]},"6709":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-10T07:53:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770746]"]},"6710":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-10T08:20:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770832]"]},"6711":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-10T08:21:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770866]"]},"6712":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-10T08:34:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770883]"]},"6713":{"ocel:activity":"check references","ocel:timestamp":"2019-10-10T08:48:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770710]"]},"6714":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-10T08:55:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770875]"]},"6715":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-10T08:57:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770907]"]},"6716":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-10T09:03:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770909]"]},"6717":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-10T09:10:35.000Z","ocel:vmap":{},"ocel:omap":["Application[770882]"]},"6718":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-10T09:23:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770669]"]},"6719":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-10T09:31:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770776]"]},"6720":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-10T09:54:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770898]"]},"6721":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-10T09:56:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770916]","Offer[[990130]]"]},"6722":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-10T10:35:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770855]"]},"6723":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-10T10:40:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770831]"]},"6724":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-10T11:55:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770740]"]},"6725":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-10T12:03:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770744]"]},"6726":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-10T12:20:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770831]"]},"6727":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-10T14:53:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770911]"]},"6728":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-10T15:00:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770624]"]},"6729":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-10T16:23:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770866]"]},"6730":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-10T17:01:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770914]"]},"6731":{"ocel:activity":"check references","ocel:timestamp":"2019-10-11T06:41:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770836]"]},"6732":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-11T07:00:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770897]"]},"6733":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-11T07:19:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770873]"]},"6734":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-11T07:26:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770897]"]},"6735":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-11T07:54:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770895]"]},"6736":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-11T07:55:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770836]"]},"6737":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-11T08:08:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770891]","Offer[[990131]]"]},"6738":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-11T08:24:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770846]"]},"6739":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-11T08:36:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770883]"]},"6740":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-11T08:37:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770624]"]},"6741":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-11T08:55:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770831]"]},"6742":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-11T09:36:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770744]"]},"6743":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-11T10:42:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770873]"]},"6744":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-11T11:03:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770863]"]},"6745":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-11T12:05:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770909]"]},"6746":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-11T12:22:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770904]"]},"6747":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-11T12:28:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770669]"]},"6748":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-11T13:21:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770875]"]},"6749":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-11T13:41:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770717]"]},"6750":{"ocel:activity":"check references","ocel:timestamp":"2019-10-11T15:00:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770882]"]},"6751":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-11T15:10:03.000Z","ocel:vmap":{},"ocel:omap":["Application[770903]"]},"6752":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-11T15:51:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770872]"]},"6753":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-11T17:59:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770902]"]},"6754":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-11T17:59:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770746]"]},"6755":{"ocel:activity":"check references","ocel:timestamp":"2019-10-14T06:31:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770898]"]},"6756":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-14T07:50:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770797]"]},"6757":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-14T08:06:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770847]"]},"6758":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-14T08:50:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770746]","Offer[[990132]]"]},"6759":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-14T10:17:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770710]"]},"6760":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-14T10:26:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770863]"]},"6761":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-14T10:40:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770904]"]},"6762":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-14T12:52:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770894]"]},"6763":{"ocel:activity":"check references","ocel:timestamp":"2019-10-14T13:02:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770744]"]},"6764":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-14T13:49:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770815]"]},"6765":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-14T13:59:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770908]"]},"6766":{"ocel:activity":"check references","ocel:timestamp":"2019-10-14T14:01:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770895]"]},"6767":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-14T15:10:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770894]"]},"6768":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-14T15:25:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770869]"]},"6769":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-14T15:45:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770891]","Offer[[990131]]"]},"6770":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-14T16:35:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770847]"]},"6771":{"ocel:activity":"check references","ocel:timestamp":"2019-10-14T16:40:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770832]"]},"6772":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-14T17:07:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770895]"]},"6773":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-14T17:25:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770869]"]},"6774":{"ocel:activity":"check references","ocel:timestamp":"2019-10-14T19:25:34.000Z","ocel:vmap":{},"ocel:omap":["Application[770912]"]},"6775":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-15T06:43:17.000Z","ocel:vmap":{},"ocel:omap":["Application[770628]","Offer[[990127]]"]},"6776":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-15T07:18:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770802]"]},"6777":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-15T07:38:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770898]"]},"6778":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-15T07:38:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770717]"]},"6779":{"ocel:activity":"check references","ocel:timestamp":"2019-10-15T08:07:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770911]"]},"6780":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-15T08:23:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770820]"]},"6781":{"ocel:activity":"check references","ocel:timestamp":"2019-10-15T08:28:31.000Z","ocel:vmap":{},"ocel:omap":["Application[770904]"]},"6782":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-15T08:58:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770895]"]},"6783":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-15T10:08:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770624]","Offer[[990133]]"]},"6784":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-15T10:22:09.000Z","ocel:vmap":{},"ocel:omap":["Application[770902]"]},"6785":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-15T12:52:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770820]"]},"6786":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-15T13:50:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770892]"]},"6787":{"ocel:activity":"job offer declined","ocel:timestamp":"2019-10-15T15:02:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770916]","Offer[[990130]]"]},"6788":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-15T15:31:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770832]"]},"6789":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-16T07:14:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770914]"]},"6790":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-16T07:26:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770888]"]},"6791":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-16T07:49:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770867]","Offer[[990129]]"]},"6792":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-16T08:06:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770903]"]},"6793":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-16T08:59:13.000Z","ocel:vmap":{},"ocel:omap":["Application[770913]"]},"6794":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-16T09:20:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770911]"]},"6795":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-16T09:45:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770850]"]},"6796":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-16T10:07:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770889]"]},"6797":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-16T10:35:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770908]"]},"6798":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-16T10:35:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770892]"]},"6799":{"ocel:activity":"check references","ocel:timestamp":"2019-10-16T10:57:59.000Z","ocel:vmap":{},"ocel:omap":["Application[770831]"]},"6800":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-16T11:24:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770829]"]},"6802":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-16T12:27:46.000Z","ocel:vmap":{},"ocel:omap":["Application[770829]"]},"6803":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-16T12:40:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770855]"]},"6804":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-16T14:41:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770904]"]},"6805":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-16T14:51:41.000Z","ocel:vmap":{},"ocel:omap":["Application[770892]"]},"6806":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-16T14:53:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770887]"]},"6807":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-16T16:26:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770741]"]},"6808":{"ocel:activity":"check references","ocel:timestamp":"2019-10-17T07:05:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770776]"]},"6809":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-17T07:40:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770776]"]},"6810":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-17T08:36:19.000Z","ocel:vmap":{},"ocel:omap":["Application[770912]"]},"6811":{"ocel:activity":"check references","ocel:timestamp":"2019-10-17T09:03:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770802]"]},"6812":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-17T09:43:32.000Z","ocel:vmap":{},"ocel:omap":["Application[770882]"]},"6813":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-17T11:11:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770909]"]},"6814":{"ocel:activity":"check references","ocel:timestamp":"2019-10-17T12:21:01.000Z","ocel:vmap":{},"ocel:omap":["Application[770889]"]},"6815":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-17T12:31:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770820]"]},"6816":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-17T12:49:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770824]"]},"6817":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-17T13:10:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770797]"]},"6818":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-17T13:10:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770913]"]},"6819":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-17T13:10:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770898]"]},"6820":{"ocel:activity":"check references","ocel:timestamp":"2019-10-17T14:24:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770855]"]},"6821":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-18T08:08:50.000Z","ocel:vmap":{},"ocel:omap":["Application[770820]"]},"6822":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-18T10:23:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770887]"]},"6823":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-18T11:43:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770896]"]},"6824":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-18T14:19:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770909]"]},"6825":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-18T15:44:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770913]"]},"6826":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-18T18:28:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770850]"]},"6827":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-18T19:36:15.000Z","ocel:vmap":{},"ocel:omap":["Application[770897]"]},"6828":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-21T09:09:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770744]"]},"6829":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-21T09:15:58.000Z","ocel:vmap":{},"ocel:omap":["Application[770906]"]},"6831":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-21T12:25:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770898]","Offer[[990134]]"]},"6832":{"ocel:activity":"check references","ocel:timestamp":"2019-10-21T12:45:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770892]"]},"6833":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-21T13:00:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770913]"]},"6834":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-21T13:42:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770802]"]},"6835":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-21T15:17:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770741]"]},"6836":{"ocel:activity":"assign recruiter","ocel:timestamp":"2019-10-21T16:40:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770870]"]},"6837":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-21T17:05:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770895]"]},"6838":{"ocel:activity":"assign vacancy","ocel:timestamp":"2019-10-22T08:13:43.000Z","ocel:vmap":{},"ocel:omap":["Application[770870]"]},"6839":{"ocel:activity":"check references","ocel:timestamp":"2019-10-22T12:10:39.000Z","ocel:vmap":{},"ocel:omap":["Application[770888]"]},"6840":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-22T13:08:40.000Z","ocel:vmap":{},"ocel:omap":["Application[770855]"]},"6841":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-22T13:18:06.000Z","ocel:vmap":{},"ocel:omap":["Application[770831]"]},"6842":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-22T13:20:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770624]","Offer[[990133]]"]},"6843":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-22T13:26:56.000Z","ocel:vmap":{},"ocel:omap":["Application[770771]"]},"6844":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-22T13:27:14.000Z","ocel:vmap":{},"ocel:omap":["Application[770889]"]},"6845":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-22T13:50:42.000Z","ocel:vmap":{},"ocel:omap":["Application[770892]"]},"6846":{"ocel:activity":"make job offer","ocel:timestamp":"2019-10-22T14:23:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770897]","Offer[[990135]]"]},"6847":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-22T14:25:49.000Z","ocel:vmap":{},"ocel:omap":["Application[770746]","Offer[[990132]]"]},"6848":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-23T06:37:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770831]"]},"6849":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-23T07:33:28.000Z","ocel:vmap":{},"ocel:omap":["Application[770900]"]},"6850":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-23T09:41:25.000Z","ocel:vmap":{},"ocel:omap":["Application[770782]"]},"6851":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-23T12:32:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770771]"]},"6852":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-23T12:51:53.000Z","ocel:vmap":{},"ocel:omap":["Application[770889]"]},"6853":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-23T13:30:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770870]"]},"6854":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-24T07:09:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770836]"]},"6855":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-24T08:06:11.000Z","ocel:vmap":{},"ocel:omap":["Application[770829]"]},"6856":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-24T09:15:08.000Z","ocel:vmap":{},"ocel:omap":["Application[770896]"]},"6857":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-24T09:17:51.000Z","ocel:vmap":{},"ocel:omap":["Application[770911]"]},"6858":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-24T10:10:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770900]"]},"6859":{"ocel:activity":"check references","ocel:timestamp":"2019-10-24T12:22:57.000Z","ocel:vmap":{},"ocel:omap":["Application[770913]"]},"6860":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-24T12:59:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770895]"]},"6861":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-24T13:04:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770897]","Offer[[990135]]"]},"6862":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-24T14:17:26.000Z","ocel:vmap":{},"ocel:omap":["Application[770782]"]},"6863":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-24T14:25:05.000Z","ocel:vmap":{},"ocel:omap":["Application[770913]"]},"6864":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-25T07:05:37.000Z","ocel:vmap":{},"ocel:omap":["Application[770831]"]},"6865":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-25T08:27:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770892]"]},"6866":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-25T09:18:23.000Z","ocel:vmap":{},"ocel:omap":["Application[770776]"]},"6867":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-25T09:59:20.000Z","ocel:vmap":{},"ocel:omap":["Application[770744]"]},"6868":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-25T10:12:24.000Z","ocel:vmap":{},"ocel:omap":["Application[770911]"]},"6869":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-25T11:38:54.000Z","ocel:vmap":{},"ocel:omap":["Application[770906]"]},"6870":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-25T12:50:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770870]"]},"6871":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-25T17:05:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770831]"]},"6872":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-25T20:01:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770851]"]},"6873":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-28T08:29:22.000Z","ocel:vmap":{},"ocel:omap":["Application[770836]"]},"6874":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-28T08:52:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770851]"]},"6875":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-28T10:09:38.000Z","ocel:vmap":{},"ocel:omap":["Application[770832]"]},"6876":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-10-28T14:13:48.000Z","ocel:vmap":{},"ocel:omap":["Application[770855]"]},"6877":{"ocel:activity":"check references","ocel:timestamp":"2019-10-28T17:23:45.000Z","ocel:vmap":{},"ocel:omap":["Application[770829]"]},"6878":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-29T10:00:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770802]"]},"6879":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-29T13:10:12.000Z","ocel:vmap":{},"ocel:omap":["Application[770744]"]},"6880":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-29T15:34:07.000Z","ocel:vmap":{},"ocel:omap":["Application[770855]"]},"6881":{"ocel:activity":"offer accepted and hired","ocel:timestamp":"2019-10-29T16:22:55.000Z","ocel:vmap":{},"ocel:omap":["Application[770898]","Offer[[990134]]"]},"6882":{"ocel:activity":"first screening","ocel:timestamp":"2019-10-29T16:28:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770883]"]},"6883":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-30T07:41:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770832]"]},"6884":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-30T13:35:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770855]"]},"6885":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-30T13:45:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770776]"]},"6887":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-10-30T17:34:52.000Z","ocel:vmap":{},"ocel:omap":["Application[770908]"]},"6888":{"ocel:activity":"send rejection","ocel:timestamp":"2019-10-31T12:06:36.000Z","ocel:vmap":{},"ocel:omap":["Application[770888]"]},"6889":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-31T13:51:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770883]"]},"6890":{"ocel:activity":"consult manager","ocel:timestamp":"2019-10-31T15:59:16.000Z","ocel:vmap":{},"ocel:omap":["Application[770829]"]},"6891":{"ocel:activity":"send rejection","ocel:timestamp":"2019-11-01T08:31:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770829]"]},"6892":{"ocel:activity":"send rejection","ocel:timestamp":"2019-11-01T09:49:04.000Z","ocel:vmap":{},"ocel:omap":["Application[770908]"]},"6893":{"ocel:activity":"send rejection","ocel:timestamp":"2019-11-01T10:38:21.000Z","ocel:vmap":{},"ocel:omap":["Application[770802]"]},"6894":{"ocel:activity":"check references","ocel:timestamp":"2019-11-01T15:36:47.000Z","ocel:vmap":{},"ocel:omap":["Application[770883]"]},"6895":{"ocel:activity":"check references","ocel:timestamp":"2019-11-04T12:06:33.000Z","ocel:vmap":{},"ocel:omap":["Application[770870]"]},"6896":{"ocel:activity":"invite for interview","ocel:timestamp":"2019-11-04T12:14:02.000Z","ocel:vmap":{},"ocel:omap":["Application[770883]"]},"6897":{"ocel:activity":"send rejection","ocel:timestamp":"2019-11-05T17:24:00.000Z","ocel:vmap":{},"ocel:omap":["Application[770870]"]},"6898":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-11-11T11:28:10.000Z","ocel:vmap":{},"ocel:omap":["Application[770883]"]},"6899":{"ocel:activity":"conduct interview","ocel:timestamp":"2019-11-11T13:35:30.000Z","ocel:vmap":{},"ocel:omap":["Application[770913]"]},"6900":{"ocel:activity":"send rejection","ocel:timestamp":"2019-11-12T14:28:44.000Z","ocel:vmap":{},"ocel:omap":["Application[770913]"]},"6901":{"ocel:activity":"send rejection","ocel:timestamp":"2019-11-18T14:52:27.000Z","ocel:vmap":{},"ocel:omap":["Application[770883]"]}}} \ No newline at end of file diff --git a/pm4py/tests/input_data/ocel/schema.json b/pm4py/tests/input_data/ocel/schema.json new file mode 100644 index 0000000000000000000000000000000000000000..40d2409add102fcffcdf058ef3f2355205c20b78 --- /dev/null +++ b/pm4py/tests/input_data/ocel/schema.json @@ -0,0 +1,96 @@ +{ + "$schema": "http://json-schema.org/schema#", + "additionalProperties": true, + "definitions": { + "AttributeBooleanType": { + "type": "boolean" + }, + "AttributeDateType": { + "type": "string", + "format": "date-time" + }, + "AttributeFloatType": { + "type": "number" + }, + "AttributeIntType": { + "type": "integer" + }, + "AttributeStringType": { + "type": "string" + }, + "ObjectMappingType": { + "type": "object" + }, + "ValueMappingType": { + "type": "object" + }, + "EventType": { + "properties": { + "ocel:id": { + "$ref": "#/definitions/AttributeStringType" + }, + "ocel:activity": { + "$ref": "#/definitions/AttributeStringType" + }, + "ocel:timestamp": { + "$ref": "#/definitions/AttributeDateType" + }, + "ocel:vmap": { + "items": { + "$ref": "#/definitions/ValueMappingType" + }, + "type": "object" + }, + "ocel:omap": { + "type": "array" + } + }, + "required": [ + "ocel:id", + "ocel:activity", + "ocel:timestamp", + "ocel:omap", + "ocel:vmap" + ], + "type": "object" + }, + "ObjectType": { + "properties": { + "ocel:id": { + "$ref": "#/definitions/AttributeStringType" + }, + "ocel:type": { + "$ref": "#/definitions/AttributeStringType" + }, + "ocel:ovmap": { + "items": { + "$ref": "#/definitions/ValueMappingType" + }, + "type": "object" + } + }, + "required": [ + "ocel:id", + "ocel:type", + "ocel:ovmap" + ], + "type": "object" + } + }, + "description": "Schema for the JSON-OCEL implementation", + "properties": { + "ocel:events": { + "items": { + "$ref": "#/definitions/EventType" + }, + "type": "object" + }, + "ocel:objects": { + "items": { + "$ref": "#/definitions/ObjectMappingType" + }, + "type": "object" + } + }, + "type": "object" +} diff --git a/pm4py/tests/input_data/ocel/schema.xml b/pm4py/tests/input_data/ocel/schema.xml new file mode 100644 index 0000000000000000000000000000000000000000..4df77a936087f9fa697a4665a95775347e6c9aca --- /dev/null +++ b/pm4py/tests/input_data/ocel/schema.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/input_data/ocel/schema_ocel2.json b/pm4py/tests/input_data/ocel/schema_ocel2.json new file mode 100644 index 0000000000000000000000000000000000000000..38faae0d30aff08c516da35fc796457ec5527a95 --- /dev/null +++ b/pm4py/tests/input_data/ocel/schema_ocel2.json @@ -0,0 +1,117 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "eventTypes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "type": { "type": "string" } + }, + "required": ["name", "type"] + } + } + }, + "required": ["name", "attributes"] + } + }, + "objectTypes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "type": { "type": "string" } + }, + "required": ["name", "type"] + } + } + }, + "required": ["name", "attributes"] + } + }, + "events": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "type": { "type": "string" }, + "time": { "type": "string", "format": "date-time" }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "value": { "type": "string" } + }, + "required": ["name", "value"] + } + }, + "relationships": { + "type": "array", + "items": { + "type": "object", + "properties": { + "objectId": { "type": "string" }, + "qualifier": { "type": "string" } + }, + "required": ["objectId", "qualifier"] + } + } + }, + "required": ["id", "type", "time"] + } + }, + "objects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "type": { "type": "string" }, + "relationships": { + "type": "array", + "items": { + "type": "object", + "properties": { + "objectId": { "type": "string" }, + "qualifier": { "type": "string" } + }, + "required": ["objectId", "qualifier"] + } + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "value": { "type": "string" }, + "time": { "type": "string", "format": "date-time" } + }, + "required": ["name", "value", "time"] + } + } + }, + "required": ["id", "type"] + } + } + }, + "required": ["eventTypes", "objectTypes", "events", "objects"] +} diff --git a/pm4py/tests/input_data/ocel/validation/schema.json b/pm4py/tests/input_data/ocel/validation/schema.json new file mode 100644 index 0000000000000000000000000000000000000000..3ff1bda82581703fe93b1058a408779e6725ac6c --- /dev/null +++ b/pm4py/tests/input_data/ocel/validation/schema.json @@ -0,0 +1,94 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": true, + "definitions": { + "AttributeBooleanType": { + "type": "boolean" + }, + "AttributeDateType": { + "type": "string", + "format": "date-time" + }, + "AttributeFloatType": { + "type": "number" + }, + "AttributeIntType": { + "type": "integer" + }, + "AttributeStringType": { + "type": "string" + }, + "ObjectMappingType": { + "type": "object" + }, + "ValueMappingType": { + "type": "object" + }, + "EventType": { + "patternProperties": { + "(.*?)": { + "type": "object", + "properties": { + "ocel:id": { + "$ref": "#/definitions/AttributeStringType" + }, + "ocel:activity": { + "$ref": "#/definitions/AttributeStringType" + }, + "ocel:timestamp": { + "$ref": "#/definitions/AttributeDateType" + }, + "ocel:vmap": { + "items": { + "$ref": "#/definitions/ValueMappingType" + }, + "type": "object" + }, + "ocel:omap": { + "type": "array", + "items": { + "$ref": "#/definitions/AttributeStringType" + } + } + }, + "required": [ + "ocel:activity", + "ocel:timestamp", + "ocel:omap", + "ocel:vmap" + ] + } + } + }, + "ObjectType": { + "type": "object", + "patternProperties": { + "(.*?)": { + "type": "object", + "properties": { + "ocel:type": { + "$ref": "#/definitions/AttributeStringType" + }, + "ocel:ovmap": { + "$ref": "#/definitions/ValueMappingType" + } + }, + "required": [ + "ocel:type", + "ocel:ovmap" + ] + } + } + } + }, + "description": "Schema for the JSON-OCEL implementation", + "properties": { + "ocel:events": { + "$ref": "#/definitions/EventType" + }, + "ocel:objects": { + "$ref": "#/definitions/ObjectType" + } + }, + "type": "object" +} diff --git a/pm4py/tests/input_data/ocel/validation/schema.xml b/pm4py/tests/input_data/ocel/validation/schema.xml new file mode 100644 index 0000000000000000000000000000000000000000..43978d95578cb7a01176ed3172fe1a1d0bbacd43 --- /dev/null +++ b/pm4py/tests/input_data/ocel/validation/schema.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/partial order example 3.xes b/pm4py/tests/input_data/partial order example 3.xes new file mode 100644 index 0000000000000000000000000000000000000000..1a9e759262926af35dfff70d21f325edbfb3820a --- /dev/null +++ b/pm4py/tests/input_data/partial order example 3.xes @@ -0,0 +1,367 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/input_data/partial order example.xes b/pm4py/tests/input_data/partial order example.xes new file mode 100644 index 0000000000000000000000000000000000000000..92b6a6191e5ecb37d4d318f2b47cfe7039269f0d --- /dev/null +++ b/pm4py/tests/input_data/partial order example.xes @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/input_data/receipt.bpmn b/pm4py/tests/input_data/receipt.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..81b023a816086c3fc42a7439ba4f278a8b5c9158 --- /dev/null +++ b/pm4py/tests/input_data/receipt.bpmn @@ -0,0 +1,1994 @@ + + + + + idf2a0db22-7148-467c-9387-fe019fd50568 + id622f4374-04f8-445c-914f-cc794339ab77 + + + id5049a115-065e-4cdc-a2d9-ac016c42a9f7 + id27a1dd94-a2ca-466b-b156-019556e93119 + id7092bde4-7861-4399-a3d4-9e293f895a63 + + + ida2106949-303d-45fa-9b29-791100d797da + id9baba2c8-bf8b-4937-a6e5-7471bcadec67 + + + id0824096b-5d86-44d6-ae77-38275200e5e4 + idc17230e2-f876-4cec-b359-f6a444b4790d + id5d100fdc-3a47-446c-aa5b-384a5d73d5e1 + + + id5dea6fa5-3bbc-4d4d-8990-a69f619ffedd + id758315f0-6662-4040-ad28-1c7facf0c2af + id8cb41a9e-dad1-479b-a7f5-48c3a4a1a9e7 + + + idbf76e33f-a3a7-4494-991c-c5fbe21adb61 + idc474e897-8a0a-499b-ae98-17f1df4bcf3e + id1f6afbee-84c4-482a-bea5-e356d3f14f3c + + + id480dc5fb-73b1-4389-9568-25c48bae8fb8 + iddef1871e-6551-4f2d-84ff-90fe7c517c88 + id179bfbe1-6afc-4381-8673-c00f1e197adb + + + id49249afc-fbde-4770-965a-b1c98fe0b2ac + id208c71a7-e4d6-4bd0-8b11-d783f4b5b8d8 + + + id2d130b54-fb01-42d2-87e3-fb5de8d9e628 + id131e2ad0-f527-4190-8196-e2d216b95bcd + idcbef432b-0bf8-4d3c-90a9-606244d5521a + + + id131e2ad0-f527-4190-8196-e2d216b95bcd + id6949452e-bd68-4cf9-bafe-701e21ef9273 + id0389be7c-e176-4f01-a169-ff968e265f48 + + + id622f4374-04f8-445c-914f-cc794339ab77 + idc64d3549-694c-460b-902a-e13f6084b663 + id1d6a8943-6dca-40cc-855f-2ce53d642a0b + + + idcb433aff-5df5-4798-ab16-a86c5351c211 + idf251bb45-8021-4647-8772-cc632992810a + + + id13a71652-4025-4c25-bdf6-1c21f765ffec + id02074975-702c-4760-81e8-e5c388b2b0ca + + + id208c71a7-e4d6-4bd0-8b11-d783f4b5b8d8 + ide437e16c-a40f-4b04-8359-efa9ff1fda00 + + + ida8a67c9e-e127-4821-b5ec-1435a2fb8b4f + id27dda66f-649f-486b-8e13-774a63cab580 + + + id8bfa2f42-3420-4f2b-bdfe-a6d29fcd6255 + ideb92c29a-5306-4f0f-ad4b-d4ed5c7cfe6a + id14156929-64dc-465d-a384-600d0cb57493 + + + id0773ee59-0f4b-4d15-8d8c-7206aa10c7fe + idbfe7e64a-77c7-4ba7-a767-3f3cccf53a6b + idd377a1fd-4c4f-4db4-88d7-8e4c832f20a4 + + + idbfe7e64a-77c7-4ba7-a767-3f3cccf53a6b + idfeebf0fa-5b0b-43c2-946e-31eb1d66fec1 + iddef1871e-6551-4f2d-84ff-90fe7c517c88 + + + idea9157e2-b505-4329-bccb-599a0a8d9fc2 + id92de6c3b-3eba-44f5-9502-f3d64289e585 + idc096ee80-6c03-45d2-a61b-bd5baf525028 + id74356e22-aabd-4e21-8308-3495e272e80b + + + id5237909e-c72a-4c6b-9d7e-2790f42ec9d9 + ida15f0deb-17c2-4c3e-8011-17cf9016a376 + + + idcc2c7c02-6204-4be3-b60d-7108f353e633 + idb2a7aa13-9d5e-4108-bfa7-a8b71bb72b98 + idb6344a79-b477-4c82-8208-07b6f9ac0913 + + + id88072026-8434-4c7f-b1c5-c349de88b78a + idfc27b434-2fbc-46c1-9daf-db13b3c0c2ae + + + idc0f0d2a2-15d5-4fa3-a482-0a5e9d5c6ec9 + id07c8d34f-5aa9-451f-af6f-bc1d2674a381 + id487d97c6-0a8e-4ada-8717-08a081330b03 + + + id87c36532-4925-42e8-9c7d-070d35884ea0 + idde5a07a6-a21e-4b92-b26b-0d670b2e8535 + id466378b6-cca4-4895-a684-78fbbde6d338 + + + ide7bcebf4-54bb-45a1-9216-1267cbb36773 + idcb433aff-5df5-4798-ab16-a86c5351c211 + id050078cc-2761-4d22-82aa-a0682accf5da + + + id216d5fa3-bf37-43c3-a377-5de4cec003be + id1f91001a-147f-4644-a907-90aa08824ac3 + idc0f0d2a2-15d5-4fa3-a482-0a5e9d5c6ec9 + + + idb6344a79-b477-4c82-8208-07b6f9ac0913 + id179bfbe1-6afc-4381-8673-c00f1e197adb + ide7bcebf4-54bb-45a1-9216-1267cbb36773 + + + id5fdd000d-a9bb-4a85-b57b-62f8325a975d + id1f6afbee-84c4-482a-bea5-e356d3f14f3c + id829fe302-43c9-4e04-a013-9c5144738ba0 + + + idc17230e2-f876-4cec-b359-f6a444b4790d + id8119046a-866f-4a4b-90ca-02701e884cba + id0e29bb52-4010-4887-a403-85fc2a82a68f + + + ide9b58fd6-36ca-4ce8-b96b-6f24f749f52f + id8c42d6de-60e6-4a92-a4cd-aa2d8265353e + + + id6eb40f8f-fdc5-44bb-8311-306a590b6962 + id0386e090-d989-4a07-8084-0c4be90ce6e6 + idb2a7aa13-9d5e-4108-bfa7-a8b71bb72b98 + + + id8119046a-866f-4a4b-90ca-02701e884cba + idc0571c45-7173-43c9-994c-b2212736e522 + ida2106949-303d-45fa-9b29-791100d797da + + + id7182e658-d4eb-413b-a0d4-fb14e60553da + id466378b6-cca4-4895-a684-78fbbde6d338 + iddde586ee-3638-465d-b162-187df01c8738 + + + idc096ee80-6c03-45d2-a61b-bd5baf525028 + id15c0b807-a0a6-4484-9671-aaaadd38eae3 + + + id7273baa9-ab04-4580-b7df-4a7d27d15bc8 + id566608dc-1d98-4114-95c4-4254dc7c9558 + + + id11c463e8-75fe-412b-ab26-74503c697ddf + id5049a115-065e-4cdc-a2d9-ac016c42a9f7 + + + id27dda66f-649f-486b-8e13-774a63cab580 + id7092bde4-7861-4399-a3d4-9e293f895a63 + id1998173d-b598-4425-8998-c3122531bf69 + id8ddc1d7e-b987-4a97-bba0-f87f0488730c + + + id14156929-64dc-465d-a384-600d0cb57493 + id8cb41a9e-dad1-479b-a7f5-48c3a4a1a9e7 + id456fd937-7e16-413f-8f5c-b90b318b7e45 + + + iddde586ee-3638-465d-b162-187df01c8738 + ida8a67c9e-e127-4821-b5ec-1435a2fb8b4f + id4c5a8370-a2e3-4a03-8a2c-ae2b6978e765 + id1998173d-b598-4425-8998-c3122531bf69 + + + id6949452e-bd68-4cf9-bafe-701e21ef9273 + ide6323d05-f83c-4847-aca0-84cff9168893 + idf09a057e-d427-48c1-993f-cfd955540a18 + + + id8ddc1d7e-b987-4a97-bba0-f87f0488730c + ida9194682-3218-4956-9d25-0d258e894c48 + ideb92c29a-5306-4f0f-ad4b-d4ed5c7cfe6a + + + id758315f0-6662-4040-ad28-1c7facf0c2af + id9d124e5d-8f8a-4b6a-b91c-58ba8ef45b81 + id98b5dfe3-7ac2-4561-b9e6-6a42e1f1e145 + + + id1dd01cf3-8c4b-4011-b77b-cdd059a4aac6 + id1a02366d-589a-44a2-bde2-a4bc4068e605 + id65085c8b-8c6f-4ebd-b0bd-d448e55f00b6 + + + id92de6c3b-3eba-44f5-9502-f3d64289e585 + id4c5e8933-2f5c-4c41-9045-e0b2bf8e2c87 + + + id02074975-702c-4760-81e8-e5c388b2b0ca + ida54eaebc-6935-4f48-8908-bdd2ae4db48e + id71e5b292-3254-4dc2-a4e0-3631d5fa7e74 + + + id0386e090-d989-4a07-8084-0c4be90ce6e6 + id3fdaf201-9608-43c1-b515-0c22ab6b5baf + id35820f7e-fb21-4f4e-9d2c-92371b42eb21 + + + id4d69f64a-ac29-45eb-a66f-31bb8bb1cb94 + id2c9a443a-02c3-478f-ad87-572e13f80646 + id27b5139e-5634-4512-a0a0-9db54d19ea80 + + + idcb43aec1-b9d6-47e6-ac22-a65ea89a9734 + + + id86ac7d15-6a9f-457b-88c6-d0a73a0bfbea + id7273baa9-ab04-4580-b7df-4a7d27d15bc8 + id048549dc-3d09-4256-b27c-bfc5d310a8a9 + + + id8c42d6de-60e6-4a92-a4cd-aa2d8265353e + id25eefe83-65d3-4fe6-bd06-4153b8f2eb3b + idea9157e2-b505-4329-bccb-599a0a8d9fc2 + + + id829fe302-43c9-4e04-a013-9c5144738ba0 + id88072026-8434-4c7f-b1c5-c349de88b78a + id0394e53b-1414-444c-894c-06b1b028db98 + + + id65969cf8-7dfb-42d9-bc32-a9195bcddc1c + idd377a1fd-4c4f-4db4-88d7-8e4c832f20a4 + id47001884-4b73-4610-8493-027b17c00be4 + + + id1a02366d-589a-44a2-bde2-a4bc4068e605 + ide0291e22-917f-458b-857c-dbbb8ce616b7 + id7d949c21-5156-4786-a373-a27118e03476 + + + idabc6018b-90d0-4b4b-8c88-8cac91face75 + idb55dc1df-5960-47ce-be5c-9ddddcf62e36 + id7acb14dd-7dff-42d4-983c-c946437180a3 + + + id1f2e3a56-1416-4f71-87df-9803644a6312 + id39b0055c-7e5b-4e80-95ec-8d3272cbd830 + id07c8d34f-5aa9-451f-af6f-bc1d2674a381 + + + id4b766446-b548-4ce7-8fd5-dcd3770daeae + id98b5dfe3-7ac2-4561-b9e6-6a42e1f1e145 + id0824096b-5d86-44d6-ae77-38275200e5e4 + + + idde5a07a6-a21e-4b92-b26b-0d670b2e8535 + id7182e658-d4eb-413b-a0d4-fb14e60553da + + + id5d100fdc-3a47-446c-aa5b-384a5d73d5e1 + id87c36532-4925-42e8-9c7d-070d35884ea0 + ida9194682-3218-4956-9d25-0d258e894c48 + + + id411d2d9a-2858-47e3-bac4-b25da9c96b36 + id7dd7375a-c172-4b86-b1e2-e7464f476bb3 + + + id18e030f3-fec5-4b0e-8c8c-fe15c663a80d + id5b2ada1f-2307-478c-9ffc-370152b52eab + id157ebb77-fe26-41f2-aceb-bd0d0823b0f8 + + + id9baba2c8-bf8b-4937-a6e5-7471bcadec67 + id9a33c3bb-ebea-42b1-8c7d-e23e5df18da4 + idc0571c45-7173-43c9-994c-b2212736e522 + + + id9454e4d8-0ca4-4fde-ba83-6f808112e28c + id27b5139e-5634-4512-a0a0-9db54d19ea80 + idc79b6f21-e58c-4fc9-9274-d3dec5b97dcf + + + ida15f0deb-17c2-4c3e-8011-17cf9016a376 + id89285d6e-6f6e-45e8-b2ea-da6c8cde7fcd + id1f2e3a56-1416-4f71-87df-9803644a6312 + + + idc474e897-8a0a-499b-ae98-17f1df4bcf3e + id5fdd000d-a9bb-4a85-b57b-62f8325a975d + + + id8c3a7264-7411-4cdf-b6c6-87f88779ff3b + id4d95aaa2-8f3b-4874-89b9-cfd391929bd6 + id7220d232-8918-41cb-a7e5-84b86c91b63b + + + idc56f8a08-1e98-48f1-ab0f-5bb7e8fba3a3 + idf2a0db22-7148-467c-9387-fe019fd50568 + id49249afc-fbde-4770-965a-b1c98fe0b2ac + + + id9c129fea-3310-4514-a52c-16d92b3414e1 + id11c463e8-75fe-412b-ab26-74503c697ddf + id27a1dd94-a2ca-466b-b156-019556e93119 + + + id9d124e5d-8f8a-4b6a-b91c-58ba8ef45b81 + id4b766446-b548-4ce7-8fd5-dcd3770daeae + + + id2c9a443a-02c3-478f-ad87-572e13f80646 + id9454e4d8-0ca4-4fde-ba83-6f808112e28c + + + idfeebf0fa-5b0b-43c2-946e-31eb1d66fec1 + id480dc5fb-73b1-4389-9568-25c48bae8fb8 + + + idcb43aec1-b9d6-47e6-ac22-a65ea89a9734 + id1dd01cf3-8c4b-4011-b77b-cdd059a4aac6 + + + id4c5a8370-a2e3-4a03-8a2c-ae2b6978e765 + id13a71652-4025-4c25-bdf6-1c21f765ffec + id34266af0-ea8b-4b7d-909c-5dc60317bc84 + + + id157ebb77-fe26-41f2-aceb-bd0d0823b0f8 + id413bc0db-873c-433e-8f4a-74ae78f30e68 + id4d95aaa2-8f3b-4874-89b9-cfd391929bd6 + + + ide0291e22-917f-458b-857c-dbbb8ce616b7 + id411d2d9a-2858-47e3-bac4-b25da9c96b36 + idc9eb4e82-a62d-4eae-9921-f2f5ae27a106 + + + id4c5e8933-2f5c-4c41-9045-e0b2bf8e2c87 + id15c0b807-a0a6-4484-9671-aaaadd38eae3 + id74356e22-aabd-4e21-8308-3495e272e80b + ide33f9cf8-77cb-4d43-b77b-0a89a1799f1e + + + id7dd7375a-c172-4b86-b1e2-e7464f476bb3 + idc9eb4e82-a62d-4eae-9921-f2f5ae27a106 + id18e030f3-fec5-4b0e-8c8c-fe15c663a80d + + + id645ee7a5-ad0f-4b4d-a158-e931d8c6ae3f + ide437e16c-a40f-4b04-8359-efa9ff1fda00 + id780407be-4a20-4a08-8162-f02d9b05052f + id0773ee59-0f4b-4d15-8d8c-7206aa10c7fe + + + id1eadca49-5576-4ad5-921c-a2fa96dd00a2 + + + id7d949c21-5156-4786-a373-a27118e03476 + id6eb40f8f-fdc5-44bb-8311-306a590b6962 + id65969cf8-7dfb-42d9-bc32-a9195bcddc1c + + + id35820f7e-fb21-4f4e-9d2c-92371b42eb21 + id830a01d1-2700-4722-a9b6-dade6de057bc + + + id413bc0db-873c-433e-8f4a-74ae78f30e68 + id8c3a7264-7411-4cdf-b6c6-87f88779ff3b + + + idfc27b434-2fbc-46c1-9daf-db13b3c0c2ae + id0394e53b-1414-444c-894c-06b1b028db98 + id7c9569a5-5cc1-4319-b3c1-113d06c9a5cc + + + id7220d232-8918-41cb-a7e5-84b86c91b63b + id65085c8b-8c6f-4ebd-b0bd-d448e55f00b6 + id1eadca49-5576-4ad5-921c-a2fa96dd00a2 + + + id4efe0254-3742-4d83-a088-a85af14bf564 + id0389be7c-e176-4f01-a169-ff968e265f48 + idbf76e33f-a3a7-4494-991c-c5fbe21adb61 + + + id7acb14dd-7dff-42d4-983c-c946437180a3 + id4efe0254-3742-4d83-a088-a85af14bf564 + ide6323d05-f83c-4847-aca0-84cff9168893 + + + id015d3eeb-c904-4198-98d0-4ddecab45765 + id71e5b292-3254-4dc2-a4e0-3631d5fa7e74 + iddaf7618f-2f85-40c8-8d70-c49e07c06fcc + + + idc79b6f21-e58c-4fc9-9274-d3dec5b97dcf + id456fd937-7e16-413f-8f5c-b90b318b7e45 + idabc6018b-90d0-4b4b-8c88-8cac91face75 + + + id487d97c6-0a8e-4ada-8717-08a081330b03 + idff568ae8-8e47-4828-8e44-f908c8581c5e + id93c677f4-e9a2-45d3-85a8-a66931f9761d + id780407be-4a20-4a08-8162-f02d9b05052f + + + id9a33c3bb-ebea-42b1-8c7d-e23e5df18da4 + id0e29bb52-4010-4887-a403-85fc2a82a68f + id8bfa2f42-3420-4f2b-bdfe-a6d29fcd6255 + + + id47001884-4b73-4610-8493-027b17c00be4 + id5237909e-c72a-4c6b-9d7e-2790f42ec9d9 + id89285d6e-6f6e-45e8-b2ea-da6c8cde7fcd + + + id1d6a8943-6dca-40cc-855f-2ce53d642a0b + idc56f8a08-1e98-48f1-ab0f-5bb7e8fba3a3 + + + iddaf7618f-2f85-40c8-8d70-c49e07c06fcc + id34266af0-ea8b-4b7d-909c-5dc60317bc84 + id9c129fea-3310-4514-a52c-16d92b3414e1 + + + id93c677f4-e9a2-45d3-85a8-a66931f9761d + idc64d3549-694c-460b-902a-e13f6084b663 + + + id04dcdbd8-7e0b-4293-8638-0a75460f1fd3 + id4d69f64a-ac29-45eb-a66f-31bb8bb1cb94 + id5dea6fa5-3bbc-4d4d-8990-a69f619ffedd + + + id7c9569a5-5cc1-4319-b3c1-113d06c9a5cc + idcbef432b-0bf8-4d3c-90a9-606244d5521a + id1f91001a-147f-4644-a907-90aa08824ac3 + + + ide33f9cf8-77cb-4d43-b77b-0a89a1799f1e + id04dcdbd8-7e0b-4293-8638-0a75460f1fd3 + idb55dc1df-5960-47ce-be5c-9ddddcf62e36 + + + idf251bb45-8021-4647-8772-cc632992810a + id050078cc-2761-4d22-82aa-a0682accf5da + id5b2ada1f-2307-478c-9ffc-370152b52eab + + + ida54eaebc-6935-4f48-8908-bdd2ae4db48e + id015d3eeb-c904-4198-98d0-4ddecab45765 + + + id39b0055c-7e5b-4e80-95ec-8d3272cbd830 + id86ac7d15-6a9f-457b-88c6-d0a73a0bfbea + id2d130b54-fb01-42d2-87e3-fb5de8d9e628 + + + idf09a057e-d427-48c1-993f-cfd955540a18 + ide9b58fd6-36ca-4ce8-b96b-6f24f749f52f + id25eefe83-65d3-4fe6-bd06-4153b8f2eb3b + + + id566608dc-1d98-4114-95c4-4254dc7c9558 + id048549dc-3d09-4256-b27c-bfc5d310a8a9 + id216d5fa3-bf37-43c3-a377-5de4cec003be + + + idff568ae8-8e47-4828-8e44-f908c8581c5e + id645ee7a5-ad0f-4b4d-a158-e931d8c6ae3f + + + id830a01d1-2700-4722-a9b6-dade6de057bc + idcc2c7c02-6204-4be3-b60d-7108f353e633 + id3fdaf201-9608-43c1-b515-0c22ab6b5baf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/receipt.csv b/pm4py/tests/input_data/receipt.csv new file mode 100644 index 0000000000000000000000000000000000000000..001eaa872a824887bc4d1000ee1d0282a3f70c23 --- /dev/null +++ b/pm4py/tests/input_data/receipt.csv @@ -0,0 +1,8578 @@ +case:channel,case:concept:name,case:deadline,case:department,case:enddate,case:enddate_planned,case:group,case:responsible,case:startdate,concept:instance,concept:name,lifecycle:transition,org:group,org:resource,time:timestamp +Internet,case-10011,2011-12-06 13:41:31.788000+01:00,General,,2011-12-06 13:41:31.788000+01:00,Group 2,Resource21,2011-10-11 13:42:22.688000+02:00,task-42933,Confirmation of receipt,complete,Group 1,Resource21,2011-10-11 13:45:40.276000+02:00 +Internet,case-10011,2011-12-06 13:41:31.788000+01:00,General,,2011-12-06 13:41:31.788000+01:00,Group 2,Resource21,2011-10-11 13:42:22.688000+02:00,task-42935,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-10-12 08:26:25.398000+02:00 +Internet,case-10011,2011-12-06 13:41:31.788000+01:00,General,,2011-12-06 13:41:31.788000+01:00,Group 2,Resource21,2011-10-11 13:42:22.688000+02:00,task-42957,T03 Adjust confirmation of receipt,complete,Group 1,Resource21,2011-11-24 15:36:51.302000+01:00 +Internet,case-10011,2011-12-06 13:41:31.788000+01:00,General,,2011-12-06 13:41:31.788000+01:00,Group 2,Resource21,2011-10-11 13:42:22.688000+02:00,task-47958,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-11-24 15:37:16.553000+01:00 +Internet,case-10017,2011-12-06 01:06:40+01:00,General,2011-10-18 13:56:55.943000+02:00,2011-12-06 01:06:40.010000+01:00,Group 5,Resource04,2011-10-11 01:06:40.020000+02:00,task-43021,Confirmation of receipt,complete,EMPTY,Resource30,2011-10-18 13:46:39.679000+02:00 +Internet,case-10017,2011-12-06 01:06:40+01:00,General,2011-10-18 13:56:55.943000+02:00,2011-12-06 01:06:40.010000+01:00,Group 5,Resource04,2011-10-11 01:06:40.020000+02:00,task-43672,T06 Determine necessity of stop advice,complete,Group 1,Resource30,2011-10-18 13:47:06.950000+02:00 +Internet,case-10017,2011-12-06 01:06:40+01:00,General,2011-10-18 13:56:55.943000+02:00,2011-12-06 01:06:40.010000+01:00,Group 5,Resource04,2011-10-11 01:06:40.020000+02:00,task-43671,T02 Check confirmation of receipt,complete,Group 4,Resource30,2011-10-18 13:47:26.235000+02:00 +Internet,case-10017,2011-12-06 01:06:40+01:00,General,2011-10-18 13:56:55.943000+02:00,2011-12-06 01:06:40.010000+01:00,Group 5,Resource04,2011-10-11 01:06:40.020000+02:00,task-43674,T03 Adjust confirmation of receipt,complete,Group 1,Resource30,2011-10-18 13:47:41.811000+02:00 +Internet,case-10017,2011-12-06 01:06:40+01:00,General,2011-10-18 13:56:55.943000+02:00,2011-12-06 01:06:40.010000+01:00,Group 5,Resource04,2011-10-11 01:06:40.020000+02:00,task-43675,T02 Check confirmation of receipt,complete,Group 4,Resource30,2011-10-18 13:47:57.979000+02:00 +Internet,case-10017,2011-12-06 01:06:40+01:00,General,2011-10-18 13:56:55.943000+02:00,2011-12-06 01:06:40.010000+01:00,Group 5,Resource04,2011-10-11 01:06:40.020000+02:00,task-43673,T10 Determine necessity to stop indication,complete,Group 1,Resource30,2011-10-18 13:48:15.357000+02:00 +Internet,case-10017,2011-12-06 01:06:40+01:00,General,2011-10-18 13:56:55.943000+02:00,2011-12-06 01:06:40.010000+01:00,Group 5,Resource04,2011-10-11 01:06:40.020000+02:00,task-43676,T03 Adjust confirmation of receipt,complete,Group 1,Resource30,2011-10-18 13:48:30.632000+02:00 +Internet,case-10017,2011-12-06 01:06:40+01:00,General,2011-10-18 13:56:55.943000+02:00,2011-12-06 01:06:40.010000+01:00,Group 5,Resource04,2011-10-11 01:06:40.020000+02:00,task-43679,T02 Check confirmation of receipt,complete,Group 4,Resource30,2011-10-18 13:51:01.525000+02:00 +Internet,case-10017,2011-12-06 01:06:40+01:00,General,2011-10-18 13:56:55.943000+02:00,2011-12-06 01:06:40.010000+01:00,Group 5,Resource04,2011-10-11 01:06:40.020000+02:00,task-43686,T03 Adjust confirmation of receipt,complete,Group 1,admin2,2011-10-18 13:56:57.603000+02:00 +Internet,case-10024,2011-12-01 01:06:40+01:00,General,2011-11-17 07:53:06.189000+01:00,2011-12-01 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43229,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-18 15:53:19.732000+02:00 +Internet,case-10024,2011-12-01 01:06:40+01:00,General,2011-11-17 07:53:06.189000+01:00,2011-12-01 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43727,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-18 15:53:38.108000+02:00 +Internet,case-10024,2011-12-01 01:06:40+01:00,General,2011-11-17 07:53:06.189000+01:00,2011-12-01 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43729,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-18 15:53:53.778000+02:00 +Internet,case-10024,2011-12-01 01:06:40+01:00,General,2011-11-17 07:53:06.189000+01:00,2011-12-01 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43730,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-18 15:54:06.717000+02:00 +Internet,case-10024,2011-12-01 01:06:40+01:00,General,2011-11-17 07:53:06.189000+01:00,2011-12-01 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43728,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-18 15:54:24.121000+02:00 +Internet,case-10024,2011-12-01 01:06:40+01:00,General,2011-11-17 07:53:06.189000+01:00,2011-12-01 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43731,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-18 15:57:18.847000+02:00 +Internet,case-10025,2011-12-05 01:06:40+01:00,General,2011-11-14 09:15:07.941000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-43231,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-25 09:27:08.484000+02:00 +Internet,case-10025,2011-12-05 01:06:40+01:00,General,2011-11-14 09:15:07.941000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44375,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-25 09:27:27.316000+02:00 +Internet,case-10025,2011-12-05 01:06:40+01:00,General,2011-11-14 09:15:07.941000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44377,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-25 09:27:46.307000+02:00 +Internet,case-10025,2011-12-05 01:06:40+01:00,General,2011-11-14 09:15:07.941000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44379,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-25 09:28:00.504000+02:00 +Internet,case-10025,2011-12-05 01:06:40+01:00,General,2011-11-14 09:15:07.941000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44376,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-25 09:28:15.484000+02:00 +Internet,case-10025,2011-12-05 01:06:40+01:00,General,2011-11-14 09:15:07.941000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44380,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-25 09:28:33.002000+02:00 +Internet,case-10028,2011-12-05 01:06:40+01:00,General,2011-12-05 15:34:49.174000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-43250,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-25 14:13:10.744000+02:00 +Internet,case-10028,2011-12-05 01:06:40+01:00,General,2011-12-05 15:34:49.174000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44467,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-25 14:13:31.837000+02:00 +Internet,case-10028,2011-12-05 01:06:40+01:00,General,2011-12-05 15:34:49.174000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44469,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-25 14:13:49.542000+02:00 +Internet,case-10028,2011-12-05 01:06:40+01:00,General,2011-12-05 15:34:49.174000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44470,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-25 14:14:24.249000+02:00 +Internet,case-10028,2011-12-05 01:06:40+01:00,General,2011-12-05 15:34:49.174000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44468,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-25 14:22:15.239000+02:00 +Internet,case-10028,2011-12-05 01:06:40+01:00,General,2011-12-05 15:34:49.174000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44471,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-25 14:23:06.272000+02:00 +Internet,case-10028,2011-12-05 01:06:40+01:00,General,2011-12-05 15:34:49.174000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44472,T16 Report reasons to hold request,complete,Group 1,Resource03,2011-10-25 14:23:58.755000+02:00 +Internet,case-10028,2011-12-05 01:06:40+01:00,General,2011-12-05 15:34:49.174000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44473,T17 Check report Y to stop indication,complete,Group 4,Resource03,2011-10-25 14:24:22.922000+02:00 +Internet,case-10028,2011-12-05 01:06:40+01:00,General,2011-12-05 15:34:49.174000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44474,T19 Determine report Y to stop indication,complete,Group 3,Resource03,2011-10-25 14:24:55.079000+02:00 +Internet,case-10028,2011-12-05 01:06:40+01:00,General,2011-12-05 15:34:49.174000+01:00,2011-12-05 01:06:40.010000+01:00,Group 8,Resource11,2011-10-10 01:06:40.020000+02:00,task-44475,T20 Print report Y to stop indication,complete,Group 2,Resource03,2011-10-25 14:25:10.989000+02:00 +Internet,case-10059,2011-12-12 14:23:48.241000+01:00,General,2011-10-24 11:10:14.651000+02:00,2011-12-12 14:23:48.241000+01:00,Group 5,Resource06,2011-10-17 14:23:48.241000+02:00,task-43463,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-17 15:31:27.570000+02:00 +Internet,case-10059,2011-12-12 14:23:48.241000+01:00,General,2011-10-24 11:10:14.651000+02:00,2011-12-12 14:23:48.241000+01:00,Group 5,Resource06,2011-10-17 14:23:48.241000+02:00,task-43499,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-17 15:31:51.615000+02:00 +Internet,case-10059,2011-12-12 14:23:48.241000+01:00,General,2011-10-24 11:10:14.651000+02:00,2011-12-12 14:23:48.241000+01:00,Group 5,Resource06,2011-10-17 14:23:48.241000+02:00,task-43501,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-17 15:32:34.591000+02:00 +Internet,case-10059,2011-12-12 14:23:48.241000+01:00,General,2011-10-24 11:10:14.651000+02:00,2011-12-12 14:23:48.241000+01:00,Group 5,Resource06,2011-10-17 14:23:48.241000+02:00,task-43503,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-17 15:33:42.796000+02:00 +Internet,case-10059,2011-12-12 14:23:48.241000+01:00,General,2011-10-24 11:10:14.651000+02:00,2011-12-12 14:23:48.241000+01:00,Group 5,Resource06,2011-10-17 14:23:48.241000+02:00,task-43500,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-17 15:34:25.518000+02:00 +Internet,case-10059,2011-12-12 14:23:48.241000+01:00,General,2011-10-24 11:10:14.651000+02:00,2011-12-12 14:23:48.241000+01:00,Group 5,Resource06,2011-10-17 14:23:48.241000+02:00,task-43504,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-17 15:41:19.472000+02:00 +Internet,case-10061,2011-12-06 01:06:40+01:00,General,2011-11-23 08:50:44.645000+01:00,2012-12-06 01:06:40.010000+01:00,Group 8,Resource11,2011-10-11 01:06:40.020000+02:00,task-43657,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-24 15:00:50.433000+02:00 +Internet,case-10061,2011-12-06 01:06:40+01:00,General,2011-11-23 08:50:44.645000+01:00,2012-12-06 01:06:40.010000+01:00,Group 8,Resource11,2011-10-11 01:06:40.020000+02:00,task-44274,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-24 15:01:21.907000+02:00 +Internet,case-10061,2011-12-06 01:06:40+01:00,General,2011-11-23 08:50:44.645000+01:00,2012-12-06 01:06:40.010000+01:00,Group 8,Resource11,2011-10-11 01:06:40.020000+02:00,task-44275,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-24 15:01:44.536000+02:00 +Internet,case-10061,2011-12-06 01:06:40+01:00,General,2011-11-23 08:50:44.645000+01:00,2012-12-06 01:06:40.010000+01:00,Group 8,Resource11,2011-10-11 01:06:40.020000+02:00,task-44273,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-24 15:01:59.826000+02:00 +Internet,case-10061,2011-12-06 01:06:40+01:00,General,2011-11-23 08:50:44.645000+01:00,2012-12-06 01:06:40.010000+01:00,Group 8,Resource11,2011-10-11 01:06:40.020000+02:00,task-44277,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-24 15:02:16.227000+02:00 +Internet,case-10061,2011-12-06 01:06:40+01:00,General,2011-11-23 08:50:44.645000+01:00,2012-12-06 01:06:40.010000+01:00,Group 8,Resource11,2011-10-11 01:06:40.020000+02:00,task-44279,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-24 15:02:32.399000+02:00 +Internet,case-10062,2012-01-03 13:51:06.416000+01:00,Customer contact,2011-10-18 13:34:37.957000+02:00,2012-01-03 13:51:06.416000+01:00,,admin3,2011-10-17 14:51:06.416000+02:00,task-43664,Confirmation of receipt,complete,Group 1,admin2,2011-10-18 13:34:39.087000+02:00 +Internet,case-10065,2012-01-11 01:06:40+01:00,General,2011-12-16 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource06,2011-10-12 01:06:40.020000+02:00,task-43698,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-28 10:31:29.136000+02:00 +Internet,case-10065,2012-01-11 01:06:40+01:00,General,2011-12-16 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource06,2011-10-12 01:06:40.020000+02:00,task-44947,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-28 10:31:49.811000+02:00 +Internet,case-10065,2012-01-11 01:06:40+01:00,General,2011-12-16 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource06,2011-10-12 01:06:40.020000+02:00,task-44949,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-28 10:32:08.374000+02:00 +Internet,case-10065,2012-01-11 01:06:40+01:00,General,2011-12-16 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource06,2011-10-12 01:06:40.020000+02:00,task-44950,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-28 10:32:49.753000+02:00 +Internet,case-10065,2012-01-11 01:06:40+01:00,General,2011-12-16 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource06,2011-10-12 01:06:40.020000+02:00,task-44948,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-28 10:45:06.394000+02:00 +Internet,case-10065,2012-01-11 01:06:40+01:00,General,2011-12-16 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource06,2011-10-12 01:06:40.020000+02:00,task-44955,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-28 11:01:50.118000+02:00 +Internet,case-10066,2012-12-08 01:06:40+01:00,General,2011-11-30 08:48:31.281000+01:00,2012-12-08 01:06:40.010000+01:00,Group 5,Resource22,2011-10-13 01:06:40.020000+02:00,task-43721,Confirmation of receipt,complete,EMPTY,Resource22,2011-11-22 13:46:36.256000+01:00 +Internet,case-10066,2012-12-08 01:06:40+01:00,General,2011-11-30 08:48:31.281000+01:00,2012-12-08 01:06:40.010000+01:00,Group 5,Resource22,2011-10-13 01:06:40.020000+02:00,task-47561,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-11-22 13:48:39.989000+01:00 +Internet,case-10066,2012-12-08 01:06:40+01:00,General,2011-11-30 08:48:31.281000+01:00,2012-12-08 01:06:40.010000+01:00,Group 5,Resource22,2011-10-13 01:06:40.020000+02:00,task-47565,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-11-22 13:49:21.982000+01:00 +Internet,case-10066,2012-12-08 01:06:40+01:00,General,2011-11-30 08:48:31.281000+01:00,2012-12-08 01:06:40.010000+01:00,Group 5,Resource22,2011-10-13 01:06:40.020000+02:00,task-47570,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-11-22 13:52:51.629000+01:00 +Internet,case-10066,2012-12-08 01:06:40+01:00,General,2011-11-30 08:48:31.281000+01:00,2012-12-08 01:06:40.010000+01:00,Group 5,Resource22,2011-10-13 01:06:40.020000+02:00,task-47562,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-11-22 13:57:59.101000+01:00 +Internet,case-10066,2012-12-08 01:06:40+01:00,General,2011-11-30 08:48:31.281000+01:00,2012-12-08 01:06:40.010000+01:00,Group 5,Resource22,2011-10-13 01:06:40.020000+02:00,task-47579,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-11-22 13:59:50.916000+01:00 +Internet,case-10067,2011-12-08 01:06:40+01:00,General,2011-11-16 10:31:30.572000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-13 01:06:40.020000+02:00,task-43787,Confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 20:39:03.392000+01:00 +Internet,case-10067,2011-12-08 01:06:40+01:00,General,2011-11-16 10:31:30.572000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-13 01:06:40.020000+02:00,task-46129,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 20:39:34.137000+01:00 +Internet,case-10067,2011-12-08 01:06:40+01:00,General,2011-11-16 10:31:30.572000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-13 01:06:40.020000+02:00,task-46131,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 20:40:02.334000+01:00 +Internet,case-10067,2011-12-08 01:06:40+01:00,General,2011-11-16 10:31:30.572000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-13 01:06:40.020000+02:00,task-46132,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 20:40:26.677000+01:00 +Internet,case-10067,2011-12-08 01:06:40+01:00,General,2011-11-16 10:31:30.572000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-13 01:06:40.020000+02:00,task-46130,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-11-09 20:40:49.698000+01:00 +Internet,case-10067,2011-12-08 01:06:40+01:00,General,2011-11-16 10:31:30.572000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-13 01:06:40.020000+02:00,task-46133,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-11-09 20:41:13.745000+01:00 +Internet,case-10068,2011-12-09 01:06:40+01:00,General,2011-10-24 11:39:09.003000+02:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource06,2011-10-14 01:06:40.020000+02:00,task-43788,Confirmation of receipt,complete,EMPTY,Resource20,2011-10-20 12:39:37.946000+02:00 +Internet,case-10068,2011-12-09 01:06:40+01:00,General,2011-10-24 11:39:09.003000+02:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource06,2011-10-14 01:06:40.020000+02:00,task-43991,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-10-20 12:40:07.912000+02:00 +Internet,case-10068,2011-12-09 01:06:40+01:00,General,2011-10-24 11:39:09.003000+02:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource06,2011-10-14 01:06:40.020000+02:00,task-43993,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-10-20 12:40:31.903000+02:00 +Internet,case-10068,2011-12-09 01:06:40+01:00,General,2011-10-24 11:39:09.003000+02:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource06,2011-10-14 01:06:40.020000+02:00,task-43994,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-10-20 12:41:02.031000+02:00 +Internet,case-10068,2011-12-09 01:06:40+01:00,General,2011-10-24 11:39:09.003000+02:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource06,2011-10-14 01:06:40.020000+02:00,task-43992,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-10-20 12:41:28.600000+02:00 +Internet,case-10068,2011-12-09 01:06:40+01:00,General,2011-10-24 11:39:09.003000+02:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource06,2011-10-14 01:06:40.020000+02:00,task-43995,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-10-20 12:42:01.990000+02:00 +Internet,case-10069,2012-01-05 00:00:00+01:00,General,2011-12-30 15:41:42.684000+01:00,2012-01-05 00:00:00.010000+01:00,Group 5,Resource08,2011-10-14 01:06:40.020000+02:00,task-43792,Confirmation of receipt,complete,EMPTY,Resource08,2011-11-07 15:10:10.205000+01:00 +Internet,case-10069,2012-01-05 00:00:00+01:00,General,2011-12-30 15:41:42.684000+01:00,2012-01-05 00:00:00.010000+01:00,Group 5,Resource08,2011-10-14 01:06:40.020000+02:00,task-45608,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-11-07 15:11:51.689000+01:00 +Internet,case-10069,2012-01-05 00:00:00+01:00,General,2011-12-30 15:41:42.684000+01:00,2012-01-05 00:00:00.010000+01:00,Group 5,Resource08,2011-10-14 01:06:40.020000+02:00,task-45610,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-11-07 15:12:53.254000+01:00 +Internet,case-10069,2012-01-05 00:00:00+01:00,General,2011-12-30 15:41:42.684000+01:00,2012-01-05 00:00:00.010000+01:00,Group 5,Resource08,2011-10-14 01:06:40.020000+02:00,task-45611,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-11-07 15:13:17.976000+01:00 +Internet,case-10069,2012-01-05 00:00:00+01:00,General,2011-12-30 15:41:42.684000+01:00,2012-01-05 00:00:00.010000+01:00,Group 5,Resource08,2011-10-14 01:06:40.020000+02:00,task-45609,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-11-07 15:14:49.848000+01:00 +Internet,case-10069,2012-01-05 00:00:00+01:00,General,2011-12-30 15:41:42.684000+01:00,2012-01-05 00:00:00.010000+01:00,Group 5,Resource08,2011-10-14 01:06:40.020000+02:00,task-45612,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-11-07 15:16:47.427000+01:00 +Internet,case-10070,2011-12-09 01:06:40+01:00,General,2011-11-18 09:47:22.105000+01:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource13,2011-10-14 01:06:40.020000+02:00,task-43793,Confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 19:43:25.050000+01:00 +Internet,case-10070,2011-12-09 01:06:40+01:00,General,2011-11-18 09:47:22.105000+01:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource13,2011-10-14 01:06:40.020000+02:00,task-46107,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-11-09 19:43:50.463000+01:00 +Internet,case-10070,2011-12-09 01:06:40+01:00,General,2011-11-18 09:47:22.105000+01:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource13,2011-10-14 01:06:40.020000+02:00,task-46106,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 19:44:27.071000+01:00 +Internet,case-10070,2011-12-09 01:06:40+01:00,General,2011-11-18 09:47:22.105000+01:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource13,2011-10-14 01:06:40.020000+02:00,task-46109,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-11-09 19:44:58.894000+01:00 +Internet,case-10070,2011-12-09 01:06:40+01:00,General,2011-11-18 09:47:22.105000+01:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource13,2011-10-14 01:06:40.020000+02:00,task-46108,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-11-09 19:45:21.385000+01:00 +Internet,case-10070,2011-12-09 01:06:40+01:00,General,2011-11-18 09:47:22.105000+01:00,2011-12-09 01:06:40.010000+01:00,Group 5,Resource13,2011-10-14 01:06:40.020000+02:00,task-46110,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-11-09 19:48:48.443000+01:00 +Internet,case-10071,2011-12-12 01:06:40+01:00,General,2012-01-18 09:50:57.856000+01:00,2011-12-12 01:06:40.010000+01:00,Group 2,Resource21,2011-10-17 01:06:40.020000+02:00,task-43844,Confirmation of receipt,complete,Group 1,Resource21,2011-10-19 09:56:55.204000+02:00 +Internet,case-10071,2011-12-12 01:06:40+01:00,General,2012-01-18 09:50:57.856000+01:00,2011-12-12 01:06:40.010000+01:00,Group 2,Resource21,2011-10-17 01:06:40.020000+02:00,task-43846,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-10-19 09:57:39.722000+02:00 +Internet,case-10071,2011-12-12 01:06:40+01:00,General,2012-01-18 09:50:57.856000+01:00,2011-12-12 01:06:40.010000+01:00,Group 2,Resource21,2011-10-17 01:06:40.020000+02:00,task-43848,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-10-19 09:58:15.323000+02:00 +Internet,case-10071,2011-12-12 01:06:40+01:00,General,2012-01-18 09:50:57.856000+01:00,2011-12-12 01:06:40.010000+01:00,Group 2,Resource21,2011-10-17 01:06:40.020000+02:00,task-43849,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-10-19 09:58:36.018000+02:00 +Internet,case-10071,2011-12-12 01:06:40+01:00,General,2012-01-18 09:50:57.856000+01:00,2011-12-12 01:06:40.010000+01:00,Group 2,Resource21,2011-10-17 01:06:40.020000+02:00,task-43847,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-10-19 09:58:54.326000+02:00 +Internet,case-10071,2011-12-12 01:06:40+01:00,General,2012-01-18 09:50:57.856000+01:00,2011-12-12 01:06:40.010000+01:00,Group 2,Resource21,2011-10-17 01:06:40.020000+02:00,task-43850,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-10-20 14:06:59.060000+02:00 +Internet,case-10071,2011-12-12 01:06:40+01:00,General,2012-01-18 09:50:57.856000+01:00,2011-12-12 01:06:40.010000+01:00,Group 2,Resource21,2011-10-17 01:06:40.020000+02:00,task-44022,T11 Create document X request unlicensed,complete,Group 1,Resource21,2012-01-18 09:48:33.680000+01:00 +Internet,case-10071,2011-12-12 01:06:40+01:00,General,2012-01-18 09:50:57.856000+01:00,2011-12-12 01:06:40.010000+01:00,Group 2,Resource21,2011-10-17 01:06:40.020000+02:00,task-53047,T12 Check document X request unlicensed,complete,Group 4,Resource21,2012-01-18 09:49:09.359000+01:00 +Internet,case-10071,2011-12-12 01:06:40+01:00,General,2012-01-18 09:50:57.856000+01:00,2011-12-12 01:06:40.010000+01:00,Group 2,Resource21,2011-10-17 01:06:40.020000+02:00,task-53049,T14 Determine document X request unlicensed,complete,Group 3,Resource21,2012-01-18 09:49:44.753000+01:00 +Internet,case-10071,2011-12-12 01:06:40+01:00,General,2012-01-18 09:50:57.856000+01:00,2011-12-12 01:06:40.010000+01:00,Group 2,Resource21,2011-10-17 01:06:40.020000+02:00,task-53051,T15 Print document X request unlicensed,complete,Group 2,Resource21,2012-01-18 09:50:57.577000+01:00 +Internet,case-10072,2011-12-11 01:06:40+01:00,General,2011-12-07 15:03:44.321000+01:00,2011-12-11 01:06:40.010000+01:00,,admin1,2011-10-16 01:06:40.020000+02:00,task-43796,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-31 11:09:14.275000+01:00 +Internet,case-10072,2011-12-11 01:06:40+01:00,General,2011-12-07 15:03:44.321000+01:00,2011-12-11 01:06:40.010000+01:00,,admin1,2011-10-16 01:06:40.020000+02:00,task-45103,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-31 11:10:03.929000+01:00 +Internet,case-10072,2011-12-11 01:06:40+01:00,General,2011-12-07 15:03:44.321000+01:00,2011-12-11 01:06:40.010000+01:00,,admin1,2011-10-16 01:06:40.020000+02:00,task-45105,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-31 11:10:37.260000+01:00 +Internet,case-10072,2011-12-11 01:06:40+01:00,General,2011-12-07 15:03:44.321000+01:00,2011-12-11 01:06:40.010000+01:00,,admin1,2011-10-16 01:06:40.020000+02:00,task-45106,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-31 11:10:54.423000+01:00 +Internet,case-10072,2011-12-11 01:06:40+01:00,General,2011-12-07 15:03:44.321000+01:00,2011-12-11 01:06:40.010000+01:00,,admin1,2011-10-16 01:06:40.020000+02:00,task-45104,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-31 11:36:38.174000+01:00 +Internet,case-10072,2011-12-11 01:06:40+01:00,General,2011-12-07 15:03:44.321000+01:00,2011-12-11 01:06:40.010000+01:00,,admin1,2011-10-16 01:06:40.020000+02:00,task-45129,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-31 11:37:11.319000+01:00 +Internet,case-10073,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource22,2011-10-17 01:06:40.020000+02:00,task-43868,Confirmation of receipt,complete,EMPTY,Resource22,2011-11-29 14:28:08.930000+01:00 +Internet,case-10073,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource22,2011-10-17 01:06:40.020000+02:00,task-48486,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-11-29 14:40:03.247000+01:00 +Internet,case-10073,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource22,2011-10-17 01:06:40.020000+02:00,task-48490,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-11-29 14:40:32.371000+01:00 +Internet,case-10073,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource22,2011-10-17 01:06:40.020000+02:00,task-48491,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-11-29 14:41:12.227000+01:00 +Internet,case-10073,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource22,2011-10-17 01:06:40.020000+02:00,task-48487,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-11-29 14:42:10.340000+01:00 +Internet,case-10073,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource22,2011-10-17 01:06:40.020000+02:00,task-48493,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource22,2011-11-30 10:53:50.203000+01:00 +Internet,case-10073,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource22,2011-10-17 01:06:40.020000+02:00,task-48492,T08 Draft and send request for advice,complete,Group 1,Resource22,2011-11-30 10:54:46.581000+01:00 +Internet,case-10073,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource22,2011-10-17 01:06:40.020000+02:00,task-48562,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource22,2011-11-30 11:02:33.530000+01:00 +Internet,case-10073,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource22,2011-10-17 01:06:40.020000+02:00,task-48563,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-11-30 11:04:28.307000+01:00 +Internet,case-10073,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource22,2011-10-17 01:06:40.020000+02:00,task-48564,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-11-30 11:05:12.807000+01:00 +Internet,case-10075,2012-01-03 14:45:00.878000+01:00,Customer contact,2011-10-20 11:57:51.715000+02:00,2012-01-03 14:45:00.878000+01:00,,admin3,2011-10-17 15:45:00.878000+02:00,task-43984,Confirmation of receipt,complete,Group 1,admin2,2011-10-20 11:57:52.783000+02:00 +Internet,case-10087,2011-12-13 01:06:40+01:00,General,2011-12-21 00:00:00.010000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-43905,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-24 15:57:27.372000+02:00 +Internet,case-10087,2011-12-13 01:06:40+01:00,General,2011-12-21 00:00:00.010000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44298,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-24 15:57:45.747000+02:00 +Internet,case-10087,2011-12-13 01:06:40+01:00,General,2011-12-21 00:00:00.010000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44300,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-24 15:58:02.043000+02:00 +Internet,case-10087,2011-12-13 01:06:40+01:00,General,2011-12-21 00:00:00.010000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44301,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-24 15:58:19.298000+02:00 +Internet,case-10087,2011-12-13 01:06:40+01:00,General,2011-12-21 00:00:00.010000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44299,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-24 15:58:34.305000+02:00 +Internet,case-10087,2011-12-13 01:06:40+01:00,General,2011-12-21 00:00:00.010000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44302,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-24 15:58:55.006000+02:00 +Internet,case-10089,2011-12-09 01:06:40+01:00,General,2011-10-24 12:02:19.895000+02:00,2011-12-09 01:06:40.010000+01:00,Group 2,Resource20,2011-10-14 01:06:40.020000+02:00,task-43627,Confirmation of receipt,complete,Group 1,Resource20,2011-10-18 16:12:35.899000+02:00 +Internet,case-10089,2011-12-09 01:06:40+01:00,General,2011-10-24 12:02:19.895000+02:00,2011-12-09 01:06:40.010000+01:00,Group 2,Resource20,2011-10-14 01:06:40.020000+02:00,task-43748,T02 Check confirmation of receipt,complete,EMPTY,Resource20,2011-10-18 16:14:00.020000+02:00 +Internet,case-10089,2011-12-09 01:06:40+01:00,General,2011-10-24 12:02:19.895000+02:00,2011-12-09 01:06:40.010000+01:00,Group 2,Resource20,2011-10-14 01:06:40.020000+02:00,task-43751,T04 Determine confirmation of receipt,complete,EMPTY,Resource20,2011-10-18 16:14:55.271000+02:00 +Internet,case-10089,2011-12-09 01:06:40+01:00,General,2011-10-24 12:02:19.895000+02:00,2011-12-09 01:06:40.010000+01:00,Group 2,Resource20,2011-10-14 01:06:40.020000+02:00,task-43755,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-10-18 16:15:26.326000+02:00 +Internet,case-10089,2011-12-09 01:06:40+01:00,General,2011-10-24 12:02:19.895000+02:00,2011-12-09 01:06:40.010000+01:00,Group 2,Resource20,2011-10-14 01:06:40.020000+02:00,task-43749,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-10-18 16:16:01.203000+02:00 +Internet,case-10089,2011-12-09 01:06:40+01:00,General,2011-10-24 12:02:19.895000+02:00,2011-12-09 01:06:40.010000+01:00,Group 2,Resource20,2011-10-14 01:06:40.020000+02:00,task-43759,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-10-18 16:16:30.526000+02:00 +Internet,case-10089,2011-12-09 01:06:40+01:00,General,2011-10-24 12:02:19.895000+02:00,2011-12-09 01:06:40.010000+01:00,Group 2,Resource20,2011-10-14 01:06:40.020000+02:00,task-43760,T11 Create document X request unlicensed,complete,Group 1,admin2,2011-10-24 12:02:20.931000+02:00 +Internet,case-10090,2011-12-13 01:06:40+01:00,General,2011-12-23 10:15:43.378000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource01,2011-10-18 01:06:40.020000+02:00,task-43906,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-24 16:25:16.886000+02:00 +Internet,case-10090,2011-12-13 01:06:40+01:00,General,2011-12-23 10:15:43.378000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource01,2011-10-18 01:06:40.020000+02:00,task-44319,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-24 16:25:48.093000+02:00 +Internet,case-10090,2011-12-13 01:06:40+01:00,General,2011-12-23 10:15:43.378000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource01,2011-10-18 01:06:40.020000+02:00,task-44321,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-24 16:26:08.810000+02:00 +Internet,case-10090,2011-12-13 01:06:40+01:00,General,2011-12-23 10:15:43.378000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource01,2011-10-18 01:06:40.020000+02:00,task-44322,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-24 16:26:35.495000+02:00 +Internet,case-10090,2011-12-13 01:06:40+01:00,General,2011-12-23 10:15:43.378000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource01,2011-10-18 01:06:40.020000+02:00,task-44320,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-24 16:27:22.161000+02:00 +Internet,case-10090,2011-12-13 01:06:40+01:00,General,2011-12-23 10:15:43.378000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource01,2011-10-18 01:06:40.020000+02:00,task-44323,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-24 16:27:44.390000+02:00 +Internet,case-10094,2011-12-13 01:06:40+01:00,General,2011-11-23 09:10:27.977000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-43907,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-25 15:07:27.732000+02:00 +Internet,case-10094,2011-12-13 01:06:40+01:00,General,2011-11-23 09:10:27.977000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44511,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-25 15:07:50.830000+02:00 +Internet,case-10094,2011-12-13 01:06:40+01:00,General,2011-11-23 09:10:27.977000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44513,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-25 15:08:07.876000+02:00 +Internet,case-10094,2011-12-13 01:06:40+01:00,General,2011-11-23 09:10:27.977000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44514,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-25 15:08:27.483000+02:00 +Internet,case-10094,2011-12-13 01:06:40+01:00,General,2011-11-23 09:10:27.977000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44512,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-25 15:08:48.537000+02:00 +Internet,case-10094,2011-12-13 01:06:40+01:00,General,2011-11-23 09:10:27.977000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44515,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-25 15:09:15.981000+02:00 +Internet,case-10095,2011-12-13 01:06:40+01:00,General,2011-11-11 00:00:00.010000+01:00,2011-12-13 01:06:40.010000+01:00,Group 5,Resource05,2011-10-18 01:06:40.020000+02:00,task-44056,Confirmation of receipt,complete,EMPTY,admin2,2011-11-14 09:26:07.385000+01:00 +Internet,case-10098,2011-12-13 01:06:40+01:00,General,2011-11-21 10:55:59.502000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44006,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-25 16:06:58.586000+02:00 +Internet,case-10098,2011-12-13 01:06:40+01:00,General,2011-11-21 10:55:59.502000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44538,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-25 16:07:20.077000+02:00 +Internet,case-10098,2011-12-13 01:06:40+01:00,General,2011-11-21 10:55:59.502000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44540,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-25 16:07:48.289000+02:00 +Internet,case-10098,2011-12-13 01:06:40+01:00,General,2011-11-21 10:55:59.502000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44541,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-25 16:08:23.484000+02:00 +Internet,case-10098,2011-12-13 01:06:40+01:00,General,2011-11-21 10:55:59.502000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44539,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-25 16:08:54.842000+02:00 +Internet,case-10098,2011-12-13 01:06:40+01:00,General,2011-11-21 10:55:59.502000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44542,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-25 16:09:21.982000+02:00 +Internet,case-10099,2011-12-13 01:06:40+01:00,General,2011-11-23 09:18:38.635000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44008,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 09:04:38.421000+02:00 +Internet,case-10099,2011-12-13 01:06:40+01:00,General,2011-11-23 09:18:38.635000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44588,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 09:04:58.466000+02:00 +Internet,case-10099,2011-12-13 01:06:40+01:00,General,2011-11-23 09:18:38.635000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44590,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 09:05:15.074000+02:00 +Internet,case-10099,2011-12-13 01:06:40+01:00,General,2011-11-23 09:18:38.635000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44591,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 09:05:29.235000+02:00 +Internet,case-10099,2011-12-13 01:06:40+01:00,General,2011-11-23 09:18:38.635000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44589,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 09:05:43.792000+02:00 +Internet,case-10099,2011-12-13 01:06:40+01:00,General,2011-11-23 09:18:38.635000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44592,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 09:07:16.656000+02:00 +Internet,case-10101,2011-12-13 01:06:40+01:00,General,2011-11-16 14:34:26.165000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44010,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 11:44:51.917000+02:00 +Internet,case-10101,2011-12-13 01:06:40+01:00,General,2011-11-16 14:34:26.165000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44664,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 11:45:23.672000+02:00 +Internet,case-10101,2011-12-13 01:06:40+01:00,General,2011-11-16 14:34:26.165000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44666,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 11:45:54.899000+02:00 +Internet,case-10101,2011-12-13 01:06:40+01:00,General,2011-11-16 14:34:26.165000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44667,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 11:46:16.939000+02:00 +Internet,case-10101,2011-12-13 01:06:40+01:00,General,2011-11-16 14:34:26.165000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44665,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 11:46:40.098000+02:00 +Internet,case-10101,2011-12-13 01:06:40+01:00,General,2011-11-16 14:34:26.165000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44668,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 11:47:15.161000+02:00 +Internet,case-10102,2012-01-24 01:06:40+01:00,General,,2012-01-24 01:06:40.010000+01:00,Group 5,Resource02,2011-10-18 01:06:40.020000+02:00,task-43717,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-20 11:06:16.081000+02:00 +Internet,case-10102,2012-01-24 01:06:40+01:00,General,,2012-01-24 01:06:40.010000+01:00,Group 5,Resource02,2011-10-18 01:06:40.020000+02:00,task-43960,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-10-27 13:46:27.098000+02:00 +Internet,case-10102,2012-01-24 01:06:40+01:00,General,,2012-01-24 01:06:40.010000+01:00,Group 5,Resource02,2011-10-18 01:06:40.020000+02:00,task-44912,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-27 13:46:49.205000+02:00 +Internet,case-10102,2012-01-24 01:06:40+01:00,General,,2012-01-24 01:06:40.010000+01:00,Group 5,Resource02,2011-10-18 01:06:40.020000+02:00,task-44913,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-10-27 15:11:16.295000+02:00 +Internet,case-10102,2012-01-24 01:06:40+01:00,General,,2012-01-24 01:06:40.010000+01:00,Group 5,Resource02,2011-10-18 01:06:40.020000+02:00,task-43961,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-11-17 08:13:20.068000+01:00 +Internet,case-10102,2012-01-24 01:06:40+01:00,General,,2012-01-24 01:06:40.010000+01:00,Group 5,Resource02,2011-10-18 01:06:40.020000+02:00,task-46924,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-11-17 08:14:21.708000+01:00 +Internet,case-10103,2012-01-02 00:00:00+01:00,General,2012-01-18 14:42:30.860000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-10-11 01:06:40.020000+02:00,task-43718,Confirmation of receipt,complete,EMPTY,Resource02,2011-11-15 07:20:14.205000+01:00 +Internet,case-10103,2012-01-02 00:00:00+01:00,General,2012-01-18 14:42:30.860000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-10-11 01:06:40.020000+02:00,task-46638,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-11-15 07:20:38.880000+01:00 +Internet,case-10103,2012-01-02 00:00:00+01:00,General,2012-01-18 14:42:30.860000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-10-11 01:06:40.020000+02:00,task-46640,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-11-15 07:21:00.327000+01:00 +Internet,case-10103,2012-01-02 00:00:00+01:00,General,2012-01-18 14:42:30.860000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-10-11 01:06:40.020000+02:00,task-46641,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-11-15 07:21:22.524000+01:00 +Internet,case-10103,2012-01-02 00:00:00+01:00,General,2012-01-18 14:42:30.860000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-10-11 01:06:40.020000+02:00,task-46639,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-11-15 07:42:16.335000+01:00 +Internet,case-10103,2012-01-02 00:00:00+01:00,General,2012-01-18 14:42:30.860000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-10-11 01:06:40.020000+02:00,task-46642,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-11-15 07:42:43.828000+01:00 +Internet,case-10105,2011-12-13 01:06:40+01:00,General,2011-11-14 09:21:17.077000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44050,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 14:45:46.454000+02:00 +Internet,case-10105,2011-12-13 01:06:40+01:00,General,2011-11-14 09:21:17.077000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44690,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 14:46:05.211000+02:00 +Internet,case-10105,2011-12-13 01:06:40+01:00,General,2011-11-14 09:21:17.077000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44692,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 14:46:20.612000+02:00 +Internet,case-10105,2011-12-13 01:06:40+01:00,General,2011-11-14 09:21:17.077000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44693,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 14:46:39.019000+02:00 +Internet,case-10105,2011-12-13 01:06:40+01:00,General,2011-11-14 09:21:17.077000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44691,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 14:46:55.969000+02:00 +Internet,case-10105,2011-12-13 01:06:40+01:00,General,2011-11-14 09:21:17.077000+01:00,2011-12-13 01:06:40.010000+01:00,Group 8,Resource11,2011-10-18 01:06:40.020000+02:00,task-44694,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 14:47:17.500000+02:00 +Internet,case-10120,2011-12-15 01:06:40+01:00,General,2011-11-18 10:41:02.406000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource05,2011-10-20 01:06:40.020000+02:00,task-44018,Confirmation of receipt,complete,EMPTY,Resource05,2011-10-25 09:56:31.704000+02:00 +Internet,case-10120,2011-12-15 01:06:40+01:00,General,2011-11-18 10:41:02.406000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource05,2011-10-20 01:06:40.020000+02:00,task-44401,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-10-25 09:57:00.379000+02:00 +Internet,case-10120,2011-12-15 01:06:40+01:00,General,2011-11-18 10:41:02.406000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource05,2011-10-20 01:06:40.020000+02:00,task-44403,T04 Determine confirmation of receipt,complete,EMPTY,Resource05,2011-10-25 11:34:25.395000+02:00 +Internet,case-10120,2011-12-15 01:06:40+01:00,General,2011-11-18 10:41:02.406000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource05,2011-10-20 01:06:40.020000+02:00,task-44423,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-10-25 11:34:46.250000+02:00 +Internet,case-10120,2011-12-15 01:06:40+01:00,General,2011-11-18 10:41:02.406000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource05,2011-10-20 01:06:40.020000+02:00,task-44402,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-10-25 11:35:58.954000+02:00 +Internet,case-10120,2011-12-15 01:06:40+01:00,General,2011-11-18 10:41:02.406000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource05,2011-10-20 01:06:40.020000+02:00,task-44424,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-10-25 13:45:05.459000+02:00 +Internet,case-10127,2011-12-15 01:06:40+01:00,General,2011-11-14 16:28:14.523000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource06,2011-10-20 01:06:40.020000+02:00,task-44038,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-27 08:37:51.459000+02:00 +Internet,case-10127,2011-12-15 01:06:40+01:00,General,2011-11-14 16:28:14.523000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource06,2011-10-20 01:06:40.020000+02:00,task-44809,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-27 08:38:11.536000+02:00 +Internet,case-10127,2011-12-15 01:06:40+01:00,General,2011-11-14 16:28:14.523000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource06,2011-10-20 01:06:40.020000+02:00,task-44811,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-27 08:38:39.137000+02:00 +Internet,case-10127,2011-12-15 01:06:40+01:00,General,2011-11-14 16:28:14.523000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource06,2011-10-20 01:06:40.020000+02:00,task-44812,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-27 08:39:02.930000+02:00 +Internet,case-10127,2011-12-15 01:06:40+01:00,General,2011-11-14 16:28:14.523000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource06,2011-10-20 01:06:40.020000+02:00,task-44810,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-27 08:39:43.531000+02:00 +Internet,case-10127,2011-12-15 01:06:40+01:00,General,2011-11-14 16:28:14.523000+01:00,2011-12-15 01:06:40.010000+01:00,Group 5,Resource06,2011-10-20 01:06:40.020000+02:00,task-44814,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-27 08:40:03.485000+02:00 +Internet,case-10134,2011-12-16 01:06:40+01:00,General,2011-11-21 10:22:01.058000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44094,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 15:04:21.840000+02:00 +Internet,case-10134,2011-12-16 01:06:40+01:00,General,2011-11-21 10:22:01.058000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44711,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 15:04:43.045000+02:00 +Internet,case-10134,2011-12-16 01:06:40+01:00,General,2011-11-21 10:22:01.058000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44713,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 15:05:00.324000+02:00 +Internet,case-10134,2011-12-16 01:06:40+01:00,General,2011-11-21 10:22:01.058000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44714,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 15:05:19.716000+02:00 +Internet,case-10134,2011-12-16 01:06:40+01:00,General,2011-11-21 10:22:01.058000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44712,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 15:05:34.867000+02:00 +Internet,case-10134,2011-12-16 01:06:40+01:00,General,2011-11-21 10:22:01.058000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44715,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 15:05:59.098000+02:00 +Internet,case-10136,2011-12-16 01:06:40+01:00,General,2011-11-21 10:47:45.048000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44102,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 15:40:46.193000+02:00 +Internet,case-10136,2011-12-16 01:06:40+01:00,General,2011-11-21 10:47:45.048000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44738,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 15:41:05.144000+02:00 +Internet,case-10136,2011-12-16 01:06:40+01:00,General,2011-11-21 10:47:45.048000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44737,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 15:41:23.359000+02:00 +Internet,case-10136,2011-12-16 01:06:40+01:00,General,2011-11-21 10:47:45.048000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44740,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 15:41:39.797000+02:00 +Internet,case-10136,2011-12-16 01:06:40+01:00,General,2011-11-21 10:47:45.048000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44741,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 15:41:56.091000+02:00 +Internet,case-10136,2011-12-16 01:06:40+01:00,General,2011-11-21 10:47:45.048000+01:00,2011-12-16 01:06:40.010000+01:00,Group 8,Resource11,2011-10-21 01:06:40.020000+02:00,task-44739,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 15:42:22.465000+02:00 +Internet,case-10138,2011-12-16 01:06:40+01:00,General,,2011-12-16 01:06:40.010000+01:00,Group 5,Resource12,2011-10-21 01:06:40.020000+02:00,task-44150,Confirmation of receipt,complete,EMPTY,Resource12,2011-12-08 14:52:51.432000+01:00 +Internet,case-10138,2011-12-16 01:06:40+01:00,General,,2011-12-16 01:06:40.010000+01:00,Group 5,Resource12,2011-10-21 01:06:40.020000+02:00,task-49490,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-12-08 14:53:26.952000+01:00 +Internet,case-10138,2011-12-16 01:06:40+01:00,General,,2011-12-16 01:06:40.010000+01:00,Group 5,Resource12,2011-10-21 01:06:40.020000+02:00,task-49494,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-12-08 14:53:55.363000+01:00 +Internet,case-10138,2011-12-16 01:06:40+01:00,General,,2011-12-16 01:06:40.010000+01:00,Group 5,Resource12,2011-10-21 01:06:40.020000+02:00,task-49491,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-12-08 14:55:00.037000+01:00 +Internet,case-10138,2011-12-16 01:06:40+01:00,General,,2011-12-16 01:06:40.010000+01:00,Group 5,Resource12,2011-10-21 01:06:40.020000+02:00,task-49496,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-12-08 14:55:37.151000+01:00 +Internet,case-10138,2011-12-16 01:06:40+01:00,General,,2011-12-16 01:06:40.010000+01:00,Group 5,Resource12,2011-10-21 01:06:40.020000+02:00,task-49495,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-12-14 13:36:32.274000+01:00 +Internet,case-10139,2012-01-09 08:57:00.805000+01:00,Customer contact,2011-10-21 10:07:15.049000+02:00,2012-01-09 08:57:00.805000+01:00,,admin3,2011-10-21 09:57:00.805000+02:00,task-44093,Confirmation of receipt,complete,Group 1,admin2,2011-10-21 10:07:16.084000+02:00 +Internet,case-10146,2011-12-16 01:06:40+01:00,General,2011-11-16 12:19:00.566000+01:00,2011-12-16 01:06:40.010000+01:00,Group 2,Resource03,2011-10-21 01:06:40.020000+02:00,task-44278,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-07 15:24:56.152000+01:00 +Internet,case-10146,2011-12-16 01:06:40+01:00,General,2011-11-16 12:19:00.566000+01:00,2011-12-16 01:06:40.010000+01:00,Group 2,Resource03,2011-10-21 01:06:40.020000+02:00,task-45622,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-07 15:25:45.882000+01:00 +Internet,case-10146,2011-12-16 01:06:40+01:00,General,2011-11-16 12:19:00.566000+01:00,2011-12-16 01:06:40.010000+01:00,Group 2,Resource03,2011-10-21 01:06:40.020000+02:00,task-45624,T04 Determine confirmation of receipt,complete,EMPTY,Resource03,2011-11-16 12:05:43.389000+01:00 +Internet,case-10146,2011-12-16 01:06:40+01:00,General,2011-11-16 12:19:00.566000+01:00,2011-12-16 01:06:40.010000+01:00,Group 2,Resource03,2011-10-21 01:06:40.020000+02:00,task-46832,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-16 12:06:16.314000+01:00 +Internet,case-10146,2011-12-16 01:06:40+01:00,General,2011-11-16 12:19:00.566000+01:00,2011-12-16 01:06:40.010000+01:00,Group 2,Resource03,2011-10-21 01:06:40.020000+02:00,task-45623,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-16 12:06:32.021000+01:00 +Internet,case-10146,2011-12-16 01:06:40+01:00,General,2011-11-16 12:19:00.566000+01:00,2011-12-16 01:06:40.010000+01:00,Group 2,Resource03,2011-10-21 01:06:40.020000+02:00,task-46833,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-16 12:07:02.208000+01:00 +Internet,case-10147,2011-12-17 01:06:40+01:00,General,2011-11-21 14:00:38.805000+01:00,2011-12-17 01:06:40.010000+01:00,Group 8,Resource11,2011-10-22 01:06:40.020000+02:00,task-44297,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-26 16:07:55.282000+02:00 +Internet,case-10147,2011-12-17 01:06:40+01:00,General,2011-11-21 14:00:38.805000+01:00,2011-12-17 01:06:40.010000+01:00,Group 8,Resource11,2011-10-22 01:06:40.020000+02:00,task-44759,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-26 16:10:03.859000+02:00 +Internet,case-10147,2011-12-17 01:06:40+01:00,General,2011-11-21 14:00:38.805000+01:00,2011-12-17 01:06:40.010000+01:00,Group 8,Resource11,2011-10-22 01:06:40.020000+02:00,task-44761,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-26 16:10:19.743000+02:00 +Internet,case-10147,2011-12-17 01:06:40+01:00,General,2011-11-21 14:00:38.805000+01:00,2011-12-17 01:06:40.010000+01:00,Group 8,Resource11,2011-10-22 01:06:40.020000+02:00,task-44762,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-26 16:10:44.250000+02:00 +Internet,case-10147,2011-12-17 01:06:40+01:00,General,2011-11-21 14:00:38.805000+01:00,2011-12-17 01:06:40.010000+01:00,Group 8,Resource11,2011-10-22 01:06:40.020000+02:00,task-44760,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-26 16:10:58.544000+02:00 +Internet,case-10147,2011-12-17 01:06:40+01:00,General,2011-11-21 14:00:38.805000+01:00,2011-12-17 01:06:40.010000+01:00,Group 8,Resource11,2011-10-22 01:06:40.020000+02:00,task-44763,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-26 16:11:19.812000+02:00 +Internet,case-10159,2011-12-18 01:06:40+01:00,General,2011-12-07 08:39:52.978000+01:00,2011-12-18 01:06:40.010000+01:00,Group 8,Resource11,2011-10-23 01:06:40.020000+02:00,task-44315,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-10 11:00:39.952000+01:00 +Internet,case-10159,2011-12-18 01:06:40+01:00,General,2011-12-07 08:39:52.978000+01:00,2011-12-18 01:06:40.010000+01:00,Group 8,Resource11,2011-10-23 01:06:40.020000+02:00,task-46200,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-10 11:01:15.080000+01:00 +Internet,case-10159,2011-12-18 01:06:40+01:00,General,2011-12-07 08:39:52.978000+01:00,2011-12-18 01:06:40.010000+01:00,Group 8,Resource11,2011-10-23 01:06:40.020000+02:00,task-46202,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-10 11:02:07.499000+01:00 +Internet,case-10159,2011-12-18 01:06:40+01:00,General,2011-12-07 08:39:52.978000+01:00,2011-12-18 01:06:40.010000+01:00,Group 8,Resource11,2011-10-23 01:06:40.020000+02:00,task-46203,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-10 11:02:24.015000+01:00 +Internet,case-10159,2011-12-18 01:06:40+01:00,General,2011-12-07 08:39:52.978000+01:00,2011-12-18 01:06:40.010000+01:00,Group 8,Resource11,2011-10-23 01:06:40.020000+02:00,task-46201,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-10 11:02:41.340000+01:00 +Internet,case-10159,2011-12-18 01:06:40+01:00,General,2011-12-07 08:39:52.978000+01:00,2011-12-18 01:06:40.010000+01:00,Group 8,Resource11,2011-10-23 01:06:40.020000+02:00,task-46204,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-10 11:03:55.840000+01:00 +Internet,case-10160,2012-01-29 01:06:40+01:00,General,,2012-01-29 01:06:40.010000+01:00,Group 5,Resource02,2011-10-23 01:06:40.020000+02:00,task-44421,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-25 15:20:00.343000+02:00 +Internet,case-10160,2012-01-29 01:06:40+01:00,General,,2012-01-29 01:06:40.010000+01:00,Group 5,Resource02,2011-10-23 01:06:40.020000+02:00,task-44532,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-25 15:21:08.384000+02:00 +Internet,case-10160,2012-01-29 01:06:40+01:00,General,,2012-01-29 01:06:40.010000+01:00,Group 5,Resource02,2011-10-23 01:06:40.020000+02:00,task-44534,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-25 15:21:33.582000+02:00 +Internet,case-10160,2012-01-29 01:06:40+01:00,General,,2012-01-29 01:06:40.010000+01:00,Group 5,Resource02,2011-10-23 01:06:40.020000+02:00,task-44535,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-25 15:22:26.004000+02:00 +Internet,case-10160,2012-01-29 01:06:40+01:00,General,,2012-01-29 01:06:40.010000+01:00,Group 5,Resource02,2011-10-23 01:06:40.020000+02:00,task-44533,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-25 15:24:25.818000+02:00 +Internet,case-10163,2011-12-18 01:06:40+01:00,Customer contact,2011-10-27 10:17:23.186000+02:00,2011-12-18 01:06:40.010000+01:00,,admin3,2011-10-23 01:06:40.020000+02:00,task-44838,Confirmation of receipt,complete,Group 1,admin2,2011-10-27 10:17:24.156000+02:00 +Internet,case-10164,2011-12-19 01:06:40+01:00,General,2011-11-18 16:02:50.407000+01:00,2011-12-19 01:06:40.010000+01:00,Group 8,Resource01,2011-10-24 01:06:40.020000+02:00,task-44845,Confirmation of receipt,complete,Group 1,Resource01,2011-10-27 11:02:53.821000+02:00 +Internet,case-10164,2011-12-19 01:06:40+01:00,General,2011-11-18 16:02:50.407000+01:00,2011-12-19 01:06:40.010000+01:00,Group 8,Resource01,2011-10-24 01:06:40.020000+02:00,task-44861,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2011-10-27 11:18:08.789000+02:00 +Internet,case-10164,2011-12-19 01:06:40+01:00,General,2011-11-18 16:02:50.407000+01:00,2011-12-19 01:06:40.010000+01:00,Group 8,Resource01,2011-10-24 01:06:40.020000+02:00,task-44862,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-11-18 16:02:51.452000+01:00 +Internet,case-10164,2011-12-19 01:06:40+01:00,General,2011-11-18 16:02:50.407000+01:00,2011-12-19 01:06:40.010000+01:00,Group 8,Resource01,2011-10-24 01:06:40.020000+02:00,task-44867,T04 Determine confirmation of receipt,complete,EMPTY,admin2,2011-11-18 16:02:52.082000+01:00 +Internet,case-10183,2013-01-02 00:00:00+01:00,General,,2011-12-20 00:00:00.010000+01:00,Group 5,Resource09,2011-10-25 01:06:40.020000+02:00,task-44619,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-09 14:16:10.879000+01:00 +Internet,case-10183,2013-01-02 00:00:00+01:00,General,,2011-12-20 00:00:00.010000+01:00,Group 5,Resource09,2011-10-25 01:06:40.020000+02:00,task-49575,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-09 14:16:39.383000+01:00 +Internet,case-10183,2013-01-02 00:00:00+01:00,General,,2011-12-20 00:00:00.010000+01:00,Group 5,Resource09,2011-10-25 01:06:40.020000+02:00,task-49577,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-09 14:17:02.175000+01:00 +Internet,case-10183,2013-01-02 00:00:00+01:00,General,,2011-12-20 00:00:00.010000+01:00,Group 5,Resource09,2011-10-25 01:06:40.020000+02:00,task-49576,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-09 14:17:35.863000+01:00 +Internet,case-10183,2013-01-02 00:00:00+01:00,General,,2011-12-20 00:00:00.010000+01:00,Group 5,Resource09,2011-10-25 01:06:40.020000+02:00,task-49579,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-09 14:24:28.994000+01:00 +Internet,case-10183,2013-01-02 00:00:00+01:00,General,,2011-12-20 00:00:00.010000+01:00,Group 5,Resource09,2011-10-25 01:06:40.020000+02:00,task-49578,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-09 14:30:04.403000+01:00 +Internet,case-10194,2011-12-22 01:06:40+01:00,General,2012-01-17 11:28:46.518000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource02,2011-10-05 01:06:40.020000+02:00,task-44570,Confirmation of receipt,complete,EMPTY,admin2,2012-01-17 11:28:47.373000+01:00 +Internet,case-10195,2011-12-22 01:06:40+01:00,General,2012-01-17 11:29:38.198000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource02,2011-10-05 01:06:40.020000+02:00,task-44573,Confirmation of receipt,complete,EMPTY,admin2,2012-01-17 11:29:39.271000+01:00 +Internet,case-10196,2011-12-28 00:00:00+01:00,General,2011-12-23 16:08:22.587000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource23,2011-10-12 01:06:40.020000+02:00,task-44626,Confirmation of receipt,complete,EMPTY,Resource23,2011-11-07 08:53:41.967000+01:00 +Internet,case-10196,2011-12-28 00:00:00+01:00,General,2011-12-23 16:08:22.587000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource23,2011-10-12 01:06:40.020000+02:00,task-45499,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-11-07 08:59:27.936000+01:00 +Internet,case-10196,2011-12-28 00:00:00+01:00,General,2011-12-23 16:08:22.587000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource23,2011-10-12 01:06:40.020000+02:00,task-45501,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-11-07 08:59:55.396000+01:00 +Internet,case-10196,2011-12-28 00:00:00+01:00,General,2011-12-23 16:08:22.587000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource23,2011-10-12 01:06:40.020000+02:00,task-45502,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-11-07 09:00:26.195000+01:00 +Internet,case-10196,2011-12-28 00:00:00+01:00,General,2011-12-23 16:08:22.587000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource23,2011-10-12 01:06:40.020000+02:00,task-45500,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-11-07 09:03:53.415000+01:00 +Internet,case-10196,2011-12-28 00:00:00+01:00,General,2011-12-23 16:08:22.587000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource23,2011-10-12 01:06:40.020000+02:00,task-45503,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-11-07 09:04:19.919000+01:00 +Internet,case-10198,2011-12-21 01:06:40+01:00,General,2011-12-07 08:50:52.710000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-26 01:06:40.020000+02:00,task-44868,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-07 15:41:35.421000+01:00 +Internet,case-10198,2011-12-21 01:06:40+01:00,General,2011-12-07 08:50:52.710000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-26 01:06:40.020000+02:00,task-45627,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-07 15:42:00.650000+01:00 +Internet,case-10198,2011-12-21 01:06:40+01:00,General,2011-12-07 08:50:52.710000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-26 01:06:40.020000+02:00,task-45626,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-07 15:42:25.734000+01:00 +Internet,case-10198,2011-12-21 01:06:40+01:00,General,2011-12-07 08:50:52.710000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-26 01:06:40.020000+02:00,task-45631,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-07 15:42:53.160000+01:00 +Internet,case-10198,2011-12-21 01:06:40+01:00,General,2011-12-07 08:50:52.710000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-26 01:06:40.020000+02:00,task-45632,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-07 15:43:09.610000+01:00 +Internet,case-10198,2011-12-21 01:06:40+01:00,General,2011-12-07 08:50:52.710000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-26 01:06:40.020000+02:00,task-45630,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-07 15:43:33.300000+01:00 +Desk,case-10199,2011-12-13 01:06:40+01:00,General,2011-12-07 15:23:56.316000+01:00,2011-12-13 01:06:40.010000+01:00,Group 5,Resource13,2011-10-18 01:06:40.020000+02:00,task-44710,Confirmation of receipt,complete,EMPTY,Resource13,2011-10-31 12:27:03.433000+01:00 +Desk,case-10199,2011-12-13 01:06:40+01:00,General,2011-12-07 15:23:56.316000+01:00,2011-12-13 01:06:40.010000+01:00,Group 5,Resource13,2011-10-18 01:06:40.020000+02:00,task-45152,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-10-31 12:27:59.136000+01:00 +Desk,case-10199,2011-12-13 01:06:40+01:00,General,2011-12-07 15:23:56.316000+01:00,2011-12-13 01:06:40.010000+01:00,Group 5,Resource13,2011-10-18 01:06:40.020000+02:00,task-45154,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-10-31 12:29:26.336000+01:00 +Desk,case-10199,2011-12-13 01:06:40+01:00,General,2011-12-07 15:23:56.316000+01:00,2011-12-13 01:06:40.010000+01:00,Group 5,Resource13,2011-10-18 01:06:40.020000+02:00,task-45155,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-10-31 12:30:30.258000+01:00 +Desk,case-10199,2011-12-13 01:06:40+01:00,General,2011-12-07 15:23:56.316000+01:00,2011-12-13 01:06:40.010000+01:00,Group 5,Resource13,2011-10-18 01:06:40.020000+02:00,task-45153,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-10-31 12:30:58.868000+01:00 +Desk,case-10199,2011-12-13 01:06:40+01:00,General,2011-12-07 15:23:56.316000+01:00,2011-12-13 01:06:40.010000+01:00,Group 5,Resource13,2011-10-18 01:06:40.020000+02:00,task-45159,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-10-31 12:31:26.913000+01:00 +Desk,case-10202,2012-01-11 00:00:00+01:00,General,2012-01-09 16:52:03.253000+01:00,2012-01-11 00:00:00.010000+01:00,Group 5,Resource23,2011-10-24 01:06:40.020000+02:00,task-44758,Confirmation of receipt,complete,EMPTY,Resource23,2011-11-11 11:26:45.553000+01:00 +Desk,case-10202,2012-01-11 00:00:00+01:00,General,2012-01-09 16:52:03.253000+01:00,2012-01-11 00:00:00.010000+01:00,Group 5,Resource23,2011-10-24 01:06:40.020000+02:00,task-46355,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-11-11 11:27:13.213000+01:00 +Desk,case-10202,2012-01-11 00:00:00+01:00,General,2012-01-09 16:52:03.253000+01:00,2012-01-11 00:00:00.010000+01:00,Group 5,Resource23,2011-10-24 01:06:40.020000+02:00,task-46357,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-11-11 11:27:35.312000+01:00 +Desk,case-10202,2012-01-11 00:00:00+01:00,General,2012-01-09 16:52:03.253000+01:00,2012-01-11 00:00:00.010000+01:00,Group 5,Resource23,2011-10-24 01:06:40.020000+02:00,task-46358,T05 Print and send confirmation of receipt,complete,EMPTY,Resource23,2011-11-11 11:28:32.859000+01:00 +Desk,case-10202,2012-01-11 00:00:00+01:00,General,2012-01-09 16:52:03.253000+01:00,2012-01-11 00:00:00.010000+01:00,Group 5,Resource23,2011-10-24 01:06:40.020000+02:00,task-46356,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-11-11 11:28:54.141000+01:00 +Desk,case-10202,2012-01-11 00:00:00+01:00,General,2012-01-09 16:52:03.253000+01:00,2012-01-11 00:00:00.010000+01:00,Group 5,Resource23,2011-10-24 01:06:40.020000+02:00,task-46360,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-11-11 11:29:22.728000+01:00 +Internet,case-10210,2011-12-22 01:06:40+01:00,General,2011-11-02 16:23:21.225000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource01,2011-10-27 01:06:40.020000+02:00,task-44918,Confirmation of receipt,complete,EMPTY,admin2,2011-11-02 16:23:22.365000+01:00 +Internet,case-10211,2011-12-22 01:06:40+01:00,General,2011-11-21 13:48:22.259000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-44920,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-07 16:10:25.162000+01:00 +Internet,case-10211,2011-12-22 01:06:40+01:00,General,2011-11-21 13:48:22.259000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45661,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-07 16:10:46.884000+01:00 +Internet,case-10211,2011-12-22 01:06:40+01:00,General,2011-11-21 13:48:22.259000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45663,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-07 16:11:03.116000+01:00 +Internet,case-10211,2011-12-22 01:06:40+01:00,General,2011-11-21 13:48:22.259000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45664,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-07 16:11:17.467000+01:00 +Internet,case-10211,2011-12-22 01:06:40+01:00,General,2011-11-21 13:48:22.259000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45662,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-07 16:11:33.028000+01:00 +Internet,case-10211,2011-12-22 01:06:40+01:00,General,2011-11-21 13:48:22.259000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45665,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-07 16:11:56.020000+01:00 +Internet,case-10218,2011-12-22 01:06:40+01:00,General,2011-12-07 08:59:51.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-44926,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-07 16:38:30.783000+01:00 +Internet,case-10218,2011-12-22 01:06:40+01:00,General,2011-12-07 08:59:51.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45681,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-07 16:39:57.124000+01:00 +Internet,case-10218,2011-12-22 01:06:40+01:00,General,2011-12-07 08:59:51.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45683,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-07 16:40:14.204000+01:00 +Internet,case-10218,2011-12-22 01:06:40+01:00,General,2011-12-07 08:59:51.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45684,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-07 16:40:27.744000+01:00 +Internet,case-10218,2011-12-22 01:06:40+01:00,General,2011-12-07 08:59:51.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45682,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-07 16:40:42.920000+01:00 +Internet,case-10218,2011-12-22 01:06:40+01:00,General,2011-12-07 08:59:51.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45685,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-07 16:41:08.668000+01:00 +Internet,case-10220,2011-12-22 01:06:40+01:00,General,2011-12-07 09:17:33.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-44928,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-08 09:00:30.827000+01:00 +Internet,case-10220,2011-12-22 01:06:40+01:00,General,2011-12-07 09:17:33.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45705,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-08 09:01:19.566000+01:00 +Internet,case-10220,2011-12-22 01:06:40+01:00,General,2011-12-07 09:17:33.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45707,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-08 09:01:39.235000+01:00 +Internet,case-10220,2011-12-22 01:06:40+01:00,General,2011-12-07 09:17:33.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45708,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-08 09:01:56.265000+01:00 +Internet,case-10220,2011-12-22 01:06:40+01:00,General,2011-12-07 09:17:33.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45706,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-08 09:02:13.352000+01:00 +Internet,case-10220,2011-12-22 01:06:40+01:00,General,2011-12-07 09:17:33.356000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45709,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-08 09:02:42.865000+01:00 +Internet,case-10221,2011-12-22 01:06:40+01:00,General,2011-12-12 15:03:53.791000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-44932,Confirmation of receipt,complete,EMPTY,Resource14,2011-11-29 12:27:58.006000+01:00 +Internet,case-10221,2011-12-22 01:06:40+01:00,General,2011-12-12 15:03:53.791000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-48452,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-11-29 12:29:42.082000+01:00 +Internet,case-10221,2011-12-22 01:06:40+01:00,General,2011-12-12 15:03:53.791000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-48454,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-11-29 12:30:24.691000+01:00 +Internet,case-10221,2011-12-22 01:06:40+01:00,General,2011-12-12 15:03:53.791000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-48455,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-11-29 12:30:47.253000+01:00 +Internet,case-10221,2011-12-22 01:06:40+01:00,General,2011-12-12 15:03:53.791000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-48453,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-11-29 12:41:42.876000+01:00 +Internet,case-10221,2011-12-22 01:06:40+01:00,General,2011-12-12 15:03:53.791000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-48460,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-11-29 12:43:19.895000+01:00 +Internet,case-10222,2011-12-22 00:00:00+01:00,General,2012-01-05 16:07:21.119000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource22,2011-10-27 01:06:40.020000+02:00,task-44933,Confirmation of receipt,complete,EMPTY,Resource22,2011-11-24 14:48:41.587000+01:00 +Internet,case-10222,2011-12-22 00:00:00+01:00,General,2012-01-05 16:07:21.119000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource22,2011-10-27 01:06:40.020000+02:00,task-47890,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-11-24 14:49:36.208000+01:00 +Internet,case-10222,2011-12-22 00:00:00+01:00,General,2012-01-05 16:07:21.119000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource22,2011-10-27 01:06:40.020000+02:00,task-47895,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-11-24 14:50:25.478000+01:00 +Internet,case-10222,2011-12-22 00:00:00+01:00,General,2012-01-05 16:07:21.119000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource22,2011-10-27 01:06:40.020000+02:00,task-47897,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-11-24 14:51:41.327000+01:00 +Internet,case-10222,2011-12-22 00:00:00+01:00,General,2012-01-05 16:07:21.119000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource22,2011-10-27 01:06:40.020000+02:00,task-47891,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-11-24 15:25:55.356000+01:00 +Internet,case-10222,2011-12-22 00:00:00+01:00,General,2012-01-05 16:07:21.119000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource22,2011-10-27 01:06:40.020000+02:00,task-47939,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-11-24 15:27:02.129000+01:00 +Internet,case-10223,2011-12-22 00:00:00+01:00,General,2011-12-19 08:48:52.854000+01:00,2011-12-22 00:00:00.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-44935,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-08 09:18:47.312000+01:00 +Internet,case-10223,2011-12-22 00:00:00+01:00,General,2011-12-19 08:48:52.854000+01:00,2011-12-22 00:00:00.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45740,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-08 09:20:22.751000+01:00 +Internet,case-10223,2011-12-22 00:00:00+01:00,General,2011-12-19 08:48:52.854000+01:00,2011-12-22 00:00:00.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45742,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-08 09:20:41.418000+01:00 +Internet,case-10223,2011-12-22 00:00:00+01:00,General,2011-12-19 08:48:52.854000+01:00,2011-12-22 00:00:00.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45743,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-08 09:20:56.808000+01:00 +Internet,case-10223,2011-12-22 00:00:00+01:00,General,2011-12-19 08:48:52.854000+01:00,2011-12-22 00:00:00.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45741,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-08 09:21:16.142000+01:00 +Internet,case-10223,2011-12-22 00:00:00+01:00,General,2011-12-19 08:48:52.854000+01:00,2011-12-22 00:00:00.010000+01:00,Group 8,Resource11,2011-10-27 01:06:40.020000+02:00,task-45744,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-08 09:21:43.487000+01:00 +Internet,case-10225,2011-12-22 00:00:00+01:00,General,2012-01-18 12:34:02.740000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-45089,Confirmation of receipt,complete,EMPTY,Resource14,2011-12-07 09:11:29.887000+01:00 +Internet,case-10225,2011-12-22 00:00:00+01:00,General,2012-01-18 12:34:02.740000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-49272,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-12-07 10:01:02.208000+01:00 +Internet,case-10225,2011-12-22 00:00:00+01:00,General,2012-01-18 12:34:02.740000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-49271,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-12-07 10:04:22.794000+01:00 +Internet,case-10225,2011-12-22 00:00:00+01:00,General,2012-01-18 12:34:02.740000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-49296,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-12-07 10:05:05.939000+01:00 +Internet,case-10225,2011-12-22 00:00:00+01:00,General,2012-01-18 12:34:02.740000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-49298,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-12-07 10:05:36.523000+01:00 +Internet,case-10225,2011-12-22 00:00:00+01:00,General,2012-01-18 12:34:02.740000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource14,2011-10-27 01:06:40.020000+02:00,task-49294,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-12-07 10:16:31.803000+01:00 +Internet,case-10228,2012-01-16 01:06:40+01:00,Customer contact,2011-10-31 10:14:34.772000+01:00,2012-01-16 01:06:40.010000+01:00,,admin3,2011-10-28 01:06:40.020000+02:00,task-45092,Confirmation of receipt,complete,Group 1,admin2,2011-10-31 10:14:35.980000+01:00 +Internet,case-10232,2011-12-23 01:06:40+01:00,General,2011-12-14 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource01,2011-10-28 01:06:40.020000+02:00,task-45094,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-07 12:16:57.518000+01:00 +Internet,case-10232,2011-12-23 01:06:40+01:00,General,2011-12-14 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource01,2011-10-28 01:06:40.020000+02:00,task-49332,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-07 12:20:41.121000+01:00 +Internet,case-10232,2011-12-23 01:06:40+01:00,General,2011-12-14 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource01,2011-10-28 01:06:40.020000+02:00,task-49337,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-07 12:21:05.443000+01:00 +Internet,case-10232,2011-12-23 01:06:40+01:00,General,2011-12-14 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource01,2011-10-28 01:06:40.020000+02:00,task-49338,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-07 12:21:28.467000+01:00 +Internet,case-10232,2011-12-23 01:06:40+01:00,General,2011-12-14 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource01,2011-10-28 01:06:40.020000+02:00,task-49333,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-07 12:21:51.193000+01:00 +Internet,case-10232,2011-12-23 01:06:40+01:00,General,2011-12-14 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource01,2011-10-28 01:06:40.020000+02:00,task-49339,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-07 12:22:21.436000+01:00 +Internet,case-10244,2012-01-16 01:06:40+01:00,Customer contact,2011-11-02 16:13:15.190000+01:00,2012-01-16 01:06:40.010000+01:00,,admin3,2011-10-29 01:06:40.020000+02:00,task-45408,Confirmation of receipt,complete,Group 1,admin2,2011-11-02 16:13:16.366000+01:00 +Internet,case-10259,2011-12-26 01:06:40+01:00,General,2011-12-07 14:16:29.410000+01:00,2011-12-26 01:06:40.010000+01:00,Group 5,Resource09,2011-10-31 01:06:40.010000+01:00,task-45351,Confirmation of receipt,complete,EMPTY,admin2,2011-12-07 14:16:30.384000+01:00 +Internet,case-10263,2011-12-26 01:06:40+01:00,General,,2011-12-26 01:06:40.010000+01:00,Group 5,Resource12,2011-10-31 01:06:40.010000+01:00,task-45829,Confirmation of receipt,complete,EMPTY,Resource12,2011-11-18 14:15:19.355000+01:00 +Internet,case-10263,2011-12-26 01:06:40+01:00,General,,2011-12-26 01:06:40.010000+01:00,Group 5,Resource12,2011-10-31 01:06:40.010000+01:00,task-47271,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-11-18 14:15:51.435000+01:00 +Internet,case-10263,2011-12-26 01:06:40+01:00,General,,2011-12-26 01:06:40.010000+01:00,Group 5,Resource12,2011-10-31 01:06:40.010000+01:00,task-47275,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-11-18 14:17:30.382000+01:00 +Internet,case-10263,2011-12-26 01:06:40+01:00,General,,2011-12-26 01:06:40.010000+01:00,Group 5,Resource12,2011-10-31 01:06:40.010000+01:00,task-47272,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-11-29 14:23:32.990000+01:00 +Internet,case-10263,2011-12-26 01:06:40+01:00,General,,2011-12-26 01:06:40.010000+01:00,Group 5,Resource12,2011-10-31 01:06:40.010000+01:00,task-47278,T05 Print and send confirmation of receipt,complete,Group 2,Resource27,2011-11-30 12:02:03.222000+01:00 +Internet,case-10266,2011-12-26 01:06:40+01:00,General,2011-11-15 11:45:02.515000+01:00,2011-12-26 01:06:40.010000+01:00,Group 5,Resource06,2011-10-31 01:06:40.010000+01:00,task-45368,Confirmation of receipt,complete,EMPTY,admin2,2011-11-15 11:45:03.544000+01:00 +Internet,case-10273,2011-12-27 01:06:40+01:00,General,2011-12-09 10:19:24.639000+01:00,2011-12-27 01:06:40.010000+01:00,Group 5,Resource04,2011-11-01 01:06:40.010000+01:00,task-45420,Confirmation of receipt,complete,EMPTY,admin2,2011-12-09 10:19:25.642000+01:00 +Internet,case-10284,2011-12-28 01:06:40+01:00,General,2011-12-07 09:34:15.575000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45606,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-09 10:10:47.105000+01:00 +Internet,case-10284,2011-12-28 01:06:40+01:00,General,2011-12-07 09:34:15.575000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45908,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-09 10:11:19.508000+01:00 +Internet,case-10284,2011-12-28 01:06:40+01:00,General,2011-12-07 09:34:15.575000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45907,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-09 10:11:49.422000+01:00 +Internet,case-10284,2011-12-28 01:06:40+01:00,General,2011-12-07 09:34:15.575000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45910,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-09 10:12:31.413000+01:00 +Internet,case-10284,2011-12-28 01:06:40+01:00,General,2011-12-07 09:34:15.575000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45911,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-09 10:17:20.992000+01:00 +Internet,case-10284,2011-12-28 01:06:40+01:00,General,2011-12-07 09:34:15.575000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45909,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-09 10:17:42.795000+01:00 +Post,case-10286,2011-12-23 01:06:40+01:00,General,2011-12-07 09:11:03.638000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-28 01:06:40.020000+02:00,task-45479,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-09 09:19:20.905000+01:00 +Post,case-10286,2011-12-23 01:06:40+01:00,General,2011-12-07 09:11:03.638000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-28 01:06:40.020000+02:00,task-45885,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-09 09:22:21.141000+01:00 +Post,case-10286,2011-12-23 01:06:40+01:00,General,2011-12-07 09:11:03.638000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-28 01:06:40.020000+02:00,task-45887,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-09 09:22:39.816000+01:00 +Post,case-10286,2011-12-23 01:06:40+01:00,General,2011-12-07 09:11:03.638000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-28 01:06:40.020000+02:00,task-45888,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-09 09:22:57.042000+01:00 +Post,case-10286,2011-12-23 01:06:40+01:00,General,2011-12-07 09:11:03.638000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-28 01:06:40.020000+02:00,task-45886,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-09 09:23:13.487000+01:00 +Post,case-10286,2011-12-23 01:06:40+01:00,General,2011-12-07 09:11:03.638000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-28 01:06:40.020000+02:00,task-45889,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-09 09:31:00.488000+01:00 +Internet,case-10287,2011-12-28 00:00:00+01:00,General,2011-12-23 14:11:59.502000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45580,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-09 10:36:08.748000+01:00 +Internet,case-10287,2011-12-28 00:00:00+01:00,General,2011-12-23 14:11:59.502000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45929,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-09 10:36:27.973000+01:00 +Internet,case-10287,2011-12-28 00:00:00+01:00,General,2011-12-23 14:11:59.502000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45931,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-09 10:36:44.917000+01:00 +Internet,case-10287,2011-12-28 00:00:00+01:00,General,2011-12-23 14:11:59.502000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45932,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-09 10:36:59.330000+01:00 +Internet,case-10287,2011-12-28 00:00:00+01:00,General,2011-12-23 14:11:59.502000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45930,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-09 10:37:15.027000+01:00 +Internet,case-10287,2011-12-28 00:00:00+01:00,General,2011-12-23 14:11:59.502000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45933,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-09 10:37:34.862000+01:00 +Internet,case-10289,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource06,2011-11-02 01:06:40.010000+01:00,task-45524,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-10 11:33:31.398000+01:00 +Internet,case-10289,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource06,2011-11-02 01:06:40.010000+01:00,task-46222,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-10 11:37:51.725000+01:00 +Internet,case-10289,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource06,2011-11-02 01:06:40.010000+01:00,task-46228,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-10 11:38:11.514000+01:00 +Internet,case-10289,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource06,2011-11-02 01:06:40.010000+01:00,task-46229,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-10 11:38:30.166000+01:00 +Internet,case-10289,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource06,2011-11-02 01:06:40.010000+01:00,task-46223,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-10 11:39:49.369000+01:00 +Internet,case-10289,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource06,2011-11-02 01:06:40.010000+01:00,task-46230,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-10 11:40:42.373000+01:00 +Internet,case-10291,2011-12-28 01:06:40+01:00,General,2011-11-17 15:25:45.174000+01:00,2011-12-28 01:06:40.010000+01:00,Group 2,Resource03,2011-11-02 01:06:40.010000+01:00,task-45419,Confirmation of receipt,complete,EMPTY,admin2,2011-11-17 15:25:46.106000+01:00 +Internet,case-10297,2011-12-28 01:06:40+01:00,General,2011-12-07 10:53:41.781000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45581,Confirmation of receipt,complete,EMPTY,Resource21,2011-11-09 12:23:28.314000+01:00 +Internet,case-10297,2011-12-28 01:06:40+01:00,General,2011-12-07 10:53:41.781000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45987,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-11-09 12:23:55.292000+01:00 +Internet,case-10297,2011-12-28 01:06:40+01:00,General,2011-12-07 10:53:41.781000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45989,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-11-09 12:24:19.850000+01:00 +Internet,case-10297,2011-12-28 01:06:40+01:00,General,2011-12-07 10:53:41.781000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45990,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-11-09 12:24:37.827000+01:00 +Internet,case-10297,2011-12-28 01:06:40+01:00,General,2011-12-07 10:53:41.781000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45988,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-11-09 12:42:02.828000+01:00 +Internet,case-10297,2011-12-28 01:06:40+01:00,General,2011-12-07 10:53:41.781000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45999,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-11-09 12:42:35.139000+01:00 +Internet,case-10299,2011-12-28 01:06:40+01:00,General,2011-12-13 07:41:22.236000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45582,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-09 11:01:38.475000+01:00 +Internet,case-10299,2011-12-28 01:06:40+01:00,General,2011-12-13 07:41:22.236000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45949,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-09 11:01:59.252000+01:00 +Internet,case-10299,2011-12-28 01:06:40+01:00,General,2011-12-13 07:41:22.236000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45951,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-09 11:02:18.044000+01:00 +Internet,case-10299,2011-12-28 01:06:40+01:00,General,2011-12-13 07:41:22.236000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45952,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-09 11:02:37.096000+01:00 +Internet,case-10299,2011-12-28 01:06:40+01:00,General,2011-12-13 07:41:22.236000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45950,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-09 11:03:10.328000+01:00 +Internet,case-10299,2011-12-28 01:06:40+01:00,General,2011-12-13 07:41:22.236000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45953,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-09 11:03:41.390000+01:00 +Internet,case-10300,2011-12-28 01:06:40+01:00,General,2011-12-13 07:47:04.800000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-45583,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-10 10:34:14.137000+01:00 +Internet,case-10300,2011-12-28 01:06:40+01:00,General,2011-12-13 07:47:04.800000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-46173,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-10 10:34:33.033000+01:00 +Internet,case-10300,2011-12-28 01:06:40+01:00,General,2011-12-13 07:47:04.800000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-46175,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-10 10:34:50.827000+01:00 +Internet,case-10300,2011-12-28 01:06:40+01:00,General,2011-12-13 07:47:04.800000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-46176,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-10 10:35:08.823000+01:00 +Internet,case-10300,2011-12-28 01:06:40+01:00,General,2011-12-13 07:47:04.800000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-46174,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-10 10:35:24.410000+01:00 +Internet,case-10300,2011-12-28 01:06:40+01:00,General,2011-12-13 07:47:04.800000+01:00,2011-12-28 01:06:40.010000+01:00,Group 8,Resource11,2011-11-02 01:06:40.010000+01:00,task-46178,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-10 10:35:48.129000+01:00 +Internet,case-10306,2011-12-28 01:06:40+01:00,General,2011-12-21 13:52:37.326000+01:00,2011-12-28 01:06:40.010000+01:00,Group 5,Resource08,2011-11-02 01:06:40.010000+01:00,task-45418,Confirmation of receipt,complete,EMPTY,admin2,2011-12-21 13:52:38.616000+01:00 +Internet,case-10322,2011-12-30 01:06:40+01:00,General,2011-12-13 07:51:46.479000+01:00,2011-12-30 01:06:40.010000+01:00,Group 8,Resource11,2011-11-04 01:06:40.010000+01:00,task-45613,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-15 08:52:21.307000+01:00 +Internet,case-10322,2011-12-30 01:06:40+01:00,General,2011-12-13 07:51:46.479000+01:00,2011-12-30 01:06:40.010000+01:00,Group 8,Resource11,2011-11-04 01:06:40.010000+01:00,task-46664,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-15 08:53:38.329000+01:00 +Internet,case-10322,2011-12-30 01:06:40+01:00,General,2011-12-13 07:51:46.479000+01:00,2011-12-30 01:06:40.010000+01:00,Group 8,Resource11,2011-11-04 01:06:40.010000+01:00,task-46666,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-15 08:54:00.462000+01:00 +Internet,case-10322,2011-12-30 01:06:40+01:00,General,2011-12-13 07:51:46.479000+01:00,2011-12-30 01:06:40.010000+01:00,Group 8,Resource11,2011-11-04 01:06:40.010000+01:00,task-46667,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-15 08:54:14.252000+01:00 +Internet,case-10322,2011-12-30 01:06:40+01:00,General,2011-12-13 07:51:46.479000+01:00,2011-12-30 01:06:40.010000+01:00,Group 8,Resource11,2011-11-04 01:06:40.010000+01:00,task-46665,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-15 08:54:28.851000+01:00 +Internet,case-10322,2011-12-30 01:06:40+01:00,General,2011-12-13 07:51:46.479000+01:00,2011-12-30 01:06:40.010000+01:00,Group 8,Resource11,2011-11-04 01:06:40.010000+01:00,task-46668,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-15 08:54:50.336000+01:00 +Internet,case-10324,2011-12-30 13:03:40.343000+01:00,General,,2011-12-30 13:03:40.343000+01:00,,Resource26,2011-11-04 13:03:40.343000+01:00,task-45433,Confirmation of receipt,complete,Group 1,Resource26,2011-11-04 13:05:32.854000+01:00 +Internet,case-10324,2011-12-30 13:03:40.343000+01:00,General,,2011-12-30 13:03:40.343000+01:00,,Resource26,2011-11-04 13:03:40.343000+01:00,task-45435,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-11-08 11:03:26.870000+01:00 +Internet,case-10324,2011-12-30 13:03:40.343000+01:00,General,,2011-12-30 13:03:40.343000+01:00,,Resource26,2011-11-04 13:03:40.343000+01:00,task-45766,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource24,2011-12-12 12:12:42.140000+01:00 +Internet,case-10326,2012-02-05 00:00:00+01:00,General,,2011-12-30 00:00:00.010000+01:00,Group 5,Resource09,2011-11-04 01:06:40.010000+01:00,task-45813,Confirmation of receipt,complete,EMPTY,Resource09,2011-11-30 15:55:18.032000+01:00 +Internet,case-10326,2012-02-05 00:00:00+01:00,General,,2011-12-30 00:00:00.010000+01:00,Group 5,Resource09,2011-11-04 01:06:40.010000+01:00,task-48674,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-11-30 15:56:06.840000+01:00 +Internet,case-10326,2012-02-05 00:00:00+01:00,General,,2011-12-30 00:00:00.010000+01:00,Group 5,Resource09,2011-11-04 01:06:40.010000+01:00,task-48676,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-11-30 15:57:16.513000+01:00 +Internet,case-10326,2012-02-05 00:00:00+01:00,General,,2011-12-30 00:00:00.010000+01:00,Group 5,Resource09,2011-11-04 01:06:40.010000+01:00,task-48679,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-11-30 15:57:41.635000+01:00 +Internet,case-10326,2012-02-05 00:00:00+01:00,General,,2011-12-30 00:00:00.010000+01:00,Group 5,Resource09,2011-11-04 01:06:40.010000+01:00,task-48675,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-11-30 15:58:23.761000+01:00 +Internet,case-10326,2012-02-05 00:00:00+01:00,General,,2011-12-30 00:00:00.010000+01:00,Group 5,Resource09,2011-11-04 01:06:40.010000+01:00,task-48680,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-11-30 16:04:43.684000+01:00 +Internet,case-10336,2011-12-31 00:00:00+01:00,General,2011-12-20 10:45:09.086000+01:00,2011-12-31 00:00:00.010000+01:00,Group 8,Resource11,2011-11-05 01:06:40.010000+01:00,task-45822,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-17 15:56:50.215000+01:00 +Internet,case-10336,2011-12-31 00:00:00+01:00,General,2011-12-20 10:45:09.086000+01:00,2011-12-31 00:00:00.010000+01:00,Group 8,Resource11,2011-11-05 01:06:40.010000+01:00,task-47040,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-17 15:57:14.361000+01:00 +Internet,case-10336,2011-12-31 00:00:00+01:00,General,2011-12-20 10:45:09.086000+01:00,2011-12-31 00:00:00.010000+01:00,Group 8,Resource11,2011-11-05 01:06:40.010000+01:00,task-47043,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-17 15:57:53.421000+01:00 +Internet,case-10336,2011-12-31 00:00:00+01:00,General,2011-12-20 10:45:09.086000+01:00,2011-12-31 00:00:00.010000+01:00,Group 8,Resource11,2011-11-05 01:06:40.010000+01:00,task-47044,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-17 15:58:15.308000+01:00 +Internet,case-10336,2011-12-31 00:00:00+01:00,General,2011-12-20 10:45:09.086000+01:00,2011-12-31 00:00:00.010000+01:00,Group 8,Resource11,2011-11-05 01:06:40.010000+01:00,task-47041,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-17 15:58:38.333000+01:00 +Internet,case-10336,2011-12-31 00:00:00+01:00,General,2011-12-20 10:45:09.086000+01:00,2011-12-31 00:00:00.010000+01:00,Group 8,Resource11,2011-11-05 01:06:40.010000+01:00,task-47046,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-17 15:59:46.294000+01:00 +Internet,case-10339,2011-12-31 01:06:40+01:00,General,,2011-12-31 01:06:40.010000+01:00,Group 5,Resource06,2011-11-05 01:06:40.010000+01:00,task-45831,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-14 13:52:08.621000+01:00 +Internet,case-10339,2011-12-31 01:06:40+01:00,General,,2011-12-31 01:06:40.010000+01:00,Group 5,Resource06,2011-11-05 01:06:40.010000+01:00,task-46542,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-14 13:55:13.723000+01:00 +Internet,case-10339,2011-12-31 01:06:40+01:00,General,,2011-12-31 01:06:40.010000+01:00,Group 5,Resource06,2011-11-05 01:06:40.010000+01:00,task-46549,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-14 13:55:44.472000+01:00 +Internet,case-10339,2011-12-31 01:06:40+01:00,General,,2011-12-31 01:06:40.010000+01:00,Group 5,Resource06,2011-11-05 01:06:40.010000+01:00,task-46550,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-14 13:56:07.190000+01:00 +Internet,case-10339,2011-12-31 01:06:40+01:00,General,,2011-12-31 01:06:40.010000+01:00,Group 5,Resource06,2011-11-05 01:06:40.010000+01:00,task-46543,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-14 13:57:03.737000+01:00 +Internet,case-10339,2011-12-31 01:06:40+01:00,General,,2011-12-31 01:06:40.010000+01:00,Group 5,Resource06,2011-11-05 01:06:40.010000+01:00,task-46554,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-14 13:57:28.105000+01:00 +Internet,case-10350,2012-01-01 01:06:40+01:00,General,2011-12-07 09:48:15.041000+01:00,2012-01-01 01:06:40.010000+01:00,Group 8,Resource11,2011-11-06 01:06:40.010000+01:00,task-45830,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-10 15:10:55.045000+01:00 +Internet,case-10350,2012-01-01 01:06:40+01:00,General,2011-12-07 09:48:15.041000+01:00,2012-01-01 01:06:40.010000+01:00,Group 8,Resource11,2011-11-06 01:06:40.010000+01:00,task-46269,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-10 15:11:15.596000+01:00 +Internet,case-10350,2012-01-01 01:06:40+01:00,General,2011-12-07 09:48:15.041000+01:00,2012-01-01 01:06:40.010000+01:00,Group 8,Resource11,2011-11-06 01:06:40.010000+01:00,task-46271,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-10 15:11:31.757000+01:00 +Internet,case-10350,2012-01-01 01:06:40+01:00,General,2011-12-07 09:48:15.041000+01:00,2012-01-01 01:06:40.010000+01:00,Group 8,Resource11,2011-11-06 01:06:40.010000+01:00,task-46272,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-10 15:11:46.581000+01:00 +Internet,case-10350,2012-01-01 01:06:40+01:00,General,2011-12-07 09:48:15.041000+01:00,2012-01-01 01:06:40.010000+01:00,Group 8,Resource11,2011-11-06 01:06:40.010000+01:00,task-46270,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-10 15:12:02.898000+01:00 +Internet,case-10350,2012-01-01 01:06:40+01:00,General,2011-12-07 09:48:15.041000+01:00,2012-01-01 01:06:40.010000+01:00,Group 8,Resource11,2011-11-06 01:06:40.010000+01:00,task-46273,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-10 15:12:27.629000+01:00 +Internet,case-10352,2012-01-01 01:06:40+01:00,General,2011-11-18 10:49:10.069000+01:00,2012-01-01 01:06:40.010000+01:00,Group 2,Resource20,2011-11-06 01:06:40.010000+01:00,task-45832,Confirmation of receipt,complete,EMPTY,Resource20,2011-11-14 10:50:37.798000+01:00 +Internet,case-10352,2012-01-01 01:06:40+01:00,General,2011-11-18 10:49:10.069000+01:00,2012-01-01 01:06:40.010000+01:00,Group 2,Resource20,2011-11-06 01:06:40.010000+01:00,task-46469,T02 Check confirmation of receipt,complete,EMPTY,Resource20,2011-11-14 10:51:38.023000+01:00 +Internet,case-10352,2012-01-01 01:06:40+01:00,General,2011-11-18 10:49:10.069000+01:00,2012-01-01 01:06:40.010000+01:00,Group 2,Resource20,2011-11-06 01:06:40.010000+01:00,task-46471,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-11-14 11:59:27.024000+01:00 +Internet,case-10352,2012-01-01 01:06:40+01:00,General,2011-11-18 10:49:10.069000+01:00,2012-01-01 01:06:40.010000+01:00,Group 2,Resource20,2011-11-06 01:06:40.010000+01:00,task-46476,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-11-14 12:00:15.861000+01:00 +Internet,case-10352,2012-01-01 01:06:40+01:00,General,2011-11-18 10:49:10.069000+01:00,2012-01-01 01:06:40.010000+01:00,Group 2,Resource20,2011-11-06 01:06:40.010000+01:00,task-46470,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-11-14 12:00:44.335000+01:00 +Internet,case-10352,2012-01-01 01:06:40+01:00,General,2011-11-18 10:49:10.069000+01:00,2012-01-01 01:06:40.010000+01:00,Group 2,Resource20,2011-11-06 01:06:40.010000+01:00,task-46477,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-11-14 12:01:17.656000+01:00 +Internet,case-10354,2012-01-02 08:47:37.906000+01:00,Customer contact,2011-11-07 08:48:38.223000+01:00,2012-01-02 08:47:37.906000+01:00,,test,2011-11-07 08:47:37.906000+01:00,task-45496,Confirmation of receipt,complete,Group 1,admin2,2011-11-07 08:48:39.290000+01:00 +Internet,case-10357,2012-01-02 01:06:40+01:00,General,2011-11-14 09:21:48.989000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource06,2011-11-07 01:06:40.010000+01:00,task-45881,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-09 11:29:46.788000+01:00 +Internet,case-10357,2012-01-02 01:06:40+01:00,General,2011-11-14 09:21:48.989000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource06,2011-11-07 01:06:40.010000+01:00,task-45961,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-09 11:30:08.582000+01:00 +Internet,case-10357,2012-01-02 01:06:40+01:00,General,2011-11-14 09:21:48.989000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource06,2011-11-07 01:06:40.010000+01:00,task-45963,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-09 11:30:27.273000+01:00 +Internet,case-10357,2012-01-02 01:06:40+01:00,General,2011-11-14 09:21:48.989000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource06,2011-11-07 01:06:40.010000+01:00,task-45964,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-09 11:30:44.331000+01:00 +Internet,case-10357,2012-01-02 01:06:40+01:00,General,2011-11-14 09:21:48.989000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource06,2011-11-07 01:06:40.010000+01:00,task-45962,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-09 11:31:04.655000+01:00 +Internet,case-10357,2012-01-02 01:06:40+01:00,General,2011-11-14 09:21:48.989000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource06,2011-11-07 01:06:40.010000+01:00,task-45965,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-09 11:31:33.707000+01:00 +Internet,case-10357,2012-01-02 01:06:40+01:00,General,2011-11-14 09:21:48.989000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource06,2011-11-07 01:06:40.010000+01:00,task-45966,T11 Create document X request unlicensed,complete,Group 1,Resource06,2011-11-09 11:34:00.271000+01:00 +Internet,case-10357,2012-01-02 01:06:40+01:00,General,2011-11-14 09:21:48.989000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource06,2011-11-07 01:06:40.010000+01:00,task-45967,T12 Check document X request unlicensed,complete,Group 4,Resource06,2011-11-09 11:40:14.529000+01:00 +Internet,case-10357,2012-01-02 01:06:40+01:00,General,2011-11-14 09:21:48.989000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource06,2011-11-07 01:06:40.010000+01:00,task-45968,T14 Determine document X request unlicensed,complete,Group 3,Resource06,2011-11-09 11:40:39.482000+01:00 +Internet,case-10357,2012-01-02 01:06:40+01:00,General,2011-11-14 09:21:48.989000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource06,2011-11-07 01:06:40.010000+01:00,task-45969,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-11-14 09:21:48.805000+01:00 +Internet,case-10360,2012-01-02 01:06:40+01:00,General,2011-12-05 09:42:17.930000+01:00,2012-01-02 01:06:40.010000+01:00,Group 5,Resource13,2011-11-07 01:06:40.010000+01:00,task-45986,Confirmation of receipt,complete,EMPTY,admin2,2011-12-05 09:42:18.947000+01:00 +Internet,case-10375,2012-01-02 00:00:00+01:00,General,2012-01-18 11:32:31.001000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 01:06:40.010000+01:00,task-46071,Confirmation of receipt,complete,EMPTY,Resource14,2011-11-17 14:30:18.360000+01:00 +Internet,case-10375,2012-01-02 00:00:00+01:00,General,2012-01-18 11:32:31.001000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 01:06:40.010000+01:00,task-46992,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-11-17 14:48:22.100000+01:00 +Internet,case-10375,2012-01-02 00:00:00+01:00,General,2012-01-18 11:32:31.001000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 01:06:40.010000+01:00,task-47000,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-11-17 14:49:24.984000+01:00 +Internet,case-10375,2012-01-02 00:00:00+01:00,General,2012-01-18 11:32:31.001000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 01:06:40.010000+01:00,task-47001,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-11-17 14:49:44.706000+01:00 +Internet,case-10375,2012-01-02 00:00:00+01:00,General,2012-01-18 11:32:31.001000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 01:06:40.010000+01:00,task-46993,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-11-17 15:23:53.401000+01:00 +Internet,case-10375,2012-01-02 00:00:00+01:00,General,2012-01-18 11:32:31.001000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 01:06:40.010000+01:00,task-47031,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-11-17 15:24:32.419000+01:00 +Post,case-10378,2012-03-13 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-10-26 01:06:40.020000+02:00,task-45765,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-08 12:51:26.998000+01:00 +Post,case-10378,2012-03-13 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-10-26 01:06:40.020000+02:00,task-45793,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-08 12:51:49.834000+01:00 +Post,case-10378,2012-03-13 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-10-26 01:06:40.020000+02:00,task-45795,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-08 12:52:07.613000+01:00 +Post,case-10378,2012-03-13 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-10-26 01:06:40.020000+02:00,task-45796,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-08 12:52:24.716000+01:00 +Post,case-10378,2012-03-13 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-10-26 01:06:40.020000+02:00,task-45794,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-08 12:52:43.378000+01:00 +Post,case-10378,2012-03-13 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-10-26 01:06:40.020000+02:00,task-45797,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-08 12:53:03.885000+01:00 +Internet,case-10384,2012-01-03 00:00:00+01:00,General,2011-12-30 14:58:37.454000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource23,2011-11-08 01:06:40.010000+01:00,task-46092,Confirmation of receipt,complete,EMPTY,Resource23,2011-11-25 11:17:52.239000+01:00 +Internet,case-10384,2012-01-03 00:00:00+01:00,General,2011-12-30 14:58:37.454000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource23,2011-11-08 01:06:40.010000+01:00,task-48054,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-11-25 11:18:56.984000+01:00 +Internet,case-10384,2012-01-03 00:00:00+01:00,General,2011-12-30 14:58:37.454000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource23,2011-11-08 01:06:40.010000+01:00,task-48056,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-11-25 11:19:28.587000+01:00 +Internet,case-10384,2012-01-03 00:00:00+01:00,General,2011-12-30 14:58:37.454000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource23,2011-11-08 01:06:40.010000+01:00,task-48058,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-11-25 11:19:51.210000+01:00 +Internet,case-10384,2012-01-03 00:00:00+01:00,General,2011-12-30 14:58:37.454000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource23,2011-11-08 01:06:40.010000+01:00,task-48055,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-11-25 11:22:40.036000+01:00 +Internet,case-10384,2012-01-03 00:00:00+01:00,General,2011-12-30 14:58:37.454000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource23,2011-11-08 01:06:40.010000+01:00,task-48061,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-11-25 11:23:04.911000+01:00 +Internet,case-10392,2012-01-04 00:00:00+01:00,General,2011-12-22 15:18:30.995000+01:00,2012-01-04 00:00:00.010000+01:00,Group 8,Resource11,2011-11-09 01:06:40.010000+01:00,task-46220,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 09:09:30.172000+01:00 +Internet,case-10392,2012-01-04 00:00:00+01:00,General,2011-12-22 15:18:30.995000+01:00,2012-01-04 00:00:00.010000+01:00,Group 8,Resource11,2011-11-09 01:06:40.010000+01:00,task-47123,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 09:09:49.213000+01:00 +Internet,case-10392,2012-01-04 00:00:00+01:00,General,2011-12-22 15:18:30.995000+01:00,2012-01-04 00:00:00.010000+01:00,Group 8,Resource11,2011-11-09 01:06:40.010000+01:00,task-47125,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 09:18:08.748000+01:00 +Internet,case-10392,2012-01-04 00:00:00+01:00,General,2011-12-22 15:18:30.995000+01:00,2012-01-04 00:00:00.010000+01:00,Group 8,Resource11,2011-11-09 01:06:40.010000+01:00,task-47126,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 09:18:24.008000+01:00 +Internet,case-10392,2012-01-04 00:00:00+01:00,General,2011-12-22 15:18:30.995000+01:00,2012-01-04 00:00:00.010000+01:00,Group 8,Resource11,2011-11-09 01:06:40.010000+01:00,task-47124,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 09:18:39.882000+01:00 +Internet,case-10392,2012-01-04 00:00:00+01:00,General,2011-12-22 15:18:30.995000+01:00,2012-01-04 00:00:00.010000+01:00,Group 8,Resource11,2011-11-09 01:06:40.010000+01:00,task-47127,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 09:19:13.974000+01:00 +Internet,case-10392,2012-01-04 00:00:00+01:00,General,2011-12-22 15:18:30.995000+01:00,2012-01-04 00:00:00.010000+01:00,Group 8,Resource11,2011-11-09 01:06:40.010000+01:00,task-47128,T16 Report reasons to hold request,complete,Group 1,Resource03,2011-11-18 09:19:33.548000+01:00 +Internet,case-10392,2012-01-04 00:00:00+01:00,General,2011-12-22 15:18:30.995000+01:00,2012-01-04 00:00:00.010000+01:00,Group 8,Resource11,2011-11-09 01:06:40.010000+01:00,task-47129,T17 Check report Y to stop indication,complete,Group 4,Resource03,2011-11-18 09:19:51.377000+01:00 +Internet,case-10392,2012-01-04 00:00:00+01:00,General,2011-12-22 15:18:30.995000+01:00,2012-01-04 00:00:00.010000+01:00,Group 8,Resource11,2011-11-09 01:06:40.010000+01:00,task-47130,T19 Determine report Y to stop indication,complete,Group 3,Resource03,2011-11-18 09:21:19.608000+01:00 +Internet,case-10392,2012-01-04 00:00:00+01:00,General,2011-12-22 15:18:30.995000+01:00,2012-01-04 00:00:00.010000+01:00,Group 8,Resource11,2011-11-09 01:06:40.010000+01:00,task-47131,T20 Print report Y to stop indication,complete,Group 2,Resource03,2011-11-18 09:21:34.851000+01:00 +Internet,case-10394,2012-01-04 01:06:40+01:00,General,2011-12-07 15:44:34.237000+01:00,2012-01-04 01:06:40.010000+01:00,Group 7,Resource35,2011-11-09 01:06:40.010000+01:00,task-46236,Confirmation of receipt,complete,EMPTY,admin2,2011-12-07 15:44:35.181000+01:00 +Internet,case-10407,2012-01-05 01:06:40+01:00,General,2011-11-18 11:02:10.932000+01:00,2012-01-05 01:06:40.010000+01:00,Group 2,Resource20,2011-11-10 01:06:40.010000+01:00,task-46221,Confirmation of receipt,complete,EMPTY,Resource20,2011-11-14 12:58:01.365000+01:00 +Internet,case-10407,2012-01-05 01:06:40+01:00,General,2011-11-18 11:02:10.932000+01:00,2012-01-05 01:06:40.010000+01:00,Group 2,Resource20,2011-11-10 01:06:40.010000+01:00,task-46515,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-11-14 12:58:28.781000+01:00 +Internet,case-10407,2012-01-05 01:06:40+01:00,General,2011-11-18 11:02:10.932000+01:00,2012-01-05 01:06:40.010000+01:00,Group 2,Resource20,2011-11-10 01:06:40.010000+01:00,task-46517,T04 Determine confirmation of receipt,complete,EMPTY,Resource20,2011-11-14 13:06:50.609000+01:00 +Internet,case-10407,2012-01-05 01:06:40+01:00,General,2011-11-18 11:02:10.932000+01:00,2012-01-05 01:06:40.010000+01:00,Group 2,Resource20,2011-11-10 01:06:40.010000+01:00,task-46520,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-11-14 13:07:46.421000+01:00 +Internet,case-10407,2012-01-05 01:06:40+01:00,General,2011-11-18 11:02:10.932000+01:00,2012-01-05 01:06:40.010000+01:00,Group 2,Resource20,2011-11-10 01:06:40.010000+01:00,task-46516,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-11-14 13:09:12.841000+01:00 +Internet,case-10407,2012-01-05 01:06:40+01:00,General,2011-11-18 11:02:10.932000+01:00,2012-01-05 01:06:40.010000+01:00,Group 2,Resource20,2011-11-10 01:06:40.010000+01:00,task-46522,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-11-14 13:09:55.809000+01:00 +Internet,case-10410,2012-01-05 01:06:40+01:00,General,,2012-01-05 01:06:40.010000+01:00,Group 5,Resource09,2011-11-10 01:06:40.010000+01:00,task-47381,Confirmation of receipt,complete,EMPTY,Resource09,2011-11-30 14:46:15.565000+01:00 +Internet,case-10410,2012-01-05 01:06:40+01:00,General,,2012-01-05 01:06:40.010000+01:00,Group 5,Resource09,2011-11-10 01:06:40.010000+01:00,task-48645,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-11-30 14:47:01.891000+01:00 +Internet,case-10410,2012-01-05 01:06:40+01:00,General,,2012-01-05 01:06:40.010000+01:00,Group 5,Resource09,2011-11-10 01:06:40.010000+01:00,task-48647,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-11-30 14:47:52.207000+01:00 +Internet,case-10410,2012-01-05 01:06:40+01:00,General,,2012-01-05 01:06:40.010000+01:00,Group 5,Resource09,2011-11-10 01:06:40.010000+01:00,task-48648,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-11-30 14:48:46.418000+01:00 +Internet,case-10410,2012-01-05 01:06:40+01:00,General,,2012-01-05 01:06:40.010000+01:00,Group 5,Resource09,2011-11-10 01:06:40.010000+01:00,task-48646,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-11-30 16:32:41.199000+01:00 +Internet,case-10410,2012-01-05 01:06:40+01:00,General,,2012-01-05 01:06:40.010000+01:00,Group 5,Resource09,2011-11-10 01:06:40.010000+01:00,task-48699,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-11-30 16:34:56.762000+01:00 +Internet,case-10459,2012-01-09 01:06:40+01:00,General,2011-11-25 09:54:28.893000+01:00,2012-01-09 01:06:40.010000+01:00,Group 5,Resource08,2011-11-14 01:06:40.010000+01:00,task-46654,Confirmation of receipt,complete,EMPTY,Resource08,2011-11-22 14:30:37.731000+01:00 +Internet,case-10459,2012-01-09 01:06:40+01:00,General,2011-11-25 09:54:28.893000+01:00,2012-01-09 01:06:40.010000+01:00,Group 5,Resource08,2011-11-14 01:06:40.010000+01:00,task-47612,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-11-22 14:32:58.478000+01:00 +Internet,case-10459,2012-01-09 01:06:40+01:00,General,2011-11-25 09:54:28.893000+01:00,2012-01-09 01:06:40.010000+01:00,Group 5,Resource08,2011-11-14 01:06:40.010000+01:00,task-47614,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-11-22 14:38:58.795000+01:00 +Internet,case-10459,2012-01-09 01:06:40+01:00,General,2011-11-25 09:54:28.893000+01:00,2012-01-09 01:06:40.010000+01:00,Group 5,Resource08,2011-11-14 01:06:40.010000+01:00,task-47621,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-11-22 14:41:49.850000+01:00 +Internet,case-10459,2012-01-09 01:06:40+01:00,General,2011-11-25 09:54:28.893000+01:00,2012-01-09 01:06:40.010000+01:00,Group 5,Resource08,2011-11-14 01:06:40.010000+01:00,task-47613,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-11-22 14:45:24.199000+01:00 +Internet,case-10459,2012-01-09 01:06:40+01:00,General,2011-11-25 09:54:28.893000+01:00,2012-01-09 01:06:40.010000+01:00,Group 5,Resource08,2011-11-14 01:06:40.010000+01:00,task-47622,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-11-22 14:45:46.562000+01:00 +Internet,case-10460,2012-01-09 01:06:40+01:00,General,2011-11-25 09:31:43.698000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource20,2011-11-14 01:06:40.010000+01:00,task-46678,Confirmation of receipt,complete,EMPTY,Resource20,2011-11-22 15:03:05.355000+01:00 +Internet,case-10460,2012-01-09 01:06:40+01:00,General,2011-11-25 09:31:43.698000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource20,2011-11-14 01:06:40.010000+01:00,task-47643,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-11-22 15:03:37.543000+01:00 +Internet,case-10460,2012-01-09 01:06:40+01:00,General,2011-11-25 09:31:43.698000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource20,2011-11-14 01:06:40.010000+01:00,task-47646,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-11-22 15:03:59.803000+01:00 +Internet,case-10460,2012-01-09 01:06:40+01:00,General,2011-11-25 09:31:43.698000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource20,2011-11-14 01:06:40.010000+01:00,task-47647,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-11-22 15:04:51.662000+01:00 +Internet,case-10460,2012-01-09 01:06:40+01:00,General,2011-11-25 09:31:43.698000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource20,2011-11-14 01:06:40.010000+01:00,task-47644,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-11-22 15:09:28.407000+01:00 +Internet,case-10460,2012-01-09 01:06:40+01:00,General,2011-11-25 09:31:43.698000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource20,2011-11-14 01:06:40.010000+01:00,task-47650,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-11-22 15:35:03.653000+01:00 +Internet,case-10461,2012-01-09 01:06:40+01:00,General,2011-11-23 14:06:55.068000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource03,2011-11-14 01:06:40.010000+01:00,task-46694,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 09:53:38.081000+01:00 +Internet,case-10461,2012-01-09 01:06:40+01:00,General,2011-11-23 14:06:55.068000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource03,2011-11-14 01:06:40.010000+01:00,task-47151,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 09:54:05.458000+01:00 +Internet,case-10461,2012-01-09 01:06:40+01:00,General,2011-11-23 14:06:55.068000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource03,2011-11-14 01:06:40.010000+01:00,task-47153,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 09:54:20.930000+01:00 +Internet,case-10461,2012-01-09 01:06:40+01:00,General,2011-11-23 14:06:55.068000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource03,2011-11-14 01:06:40.010000+01:00,task-47155,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 09:54:54.994000+01:00 +Internet,case-10461,2012-01-09 01:06:40+01:00,General,2011-11-23 14:06:55.068000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource03,2011-11-14 01:06:40.010000+01:00,task-47152,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 09:55:15.110000+01:00 +Internet,case-10461,2012-01-09 01:06:40+01:00,General,2011-11-23 14:06:55.068000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource03,2011-11-14 01:06:40.010000+01:00,task-47156,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 09:55:50.240000+01:00 +Internet,case-10461,2012-01-09 01:06:40+01:00,General,2011-11-23 14:06:55.068000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource03,2011-11-14 01:06:40.010000+01:00,task-47157,T16 Report reasons to hold request,complete,Group 1,Resource03,2011-11-18 09:56:06.771000+01:00 +Internet,case-10461,2012-01-09 01:06:40+01:00,General,2011-11-23 14:06:55.068000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource03,2011-11-14 01:06:40.010000+01:00,task-47158,T17 Check report Y to stop indication,complete,Group 4,Resource03,2011-11-18 09:56:27.350000+01:00 +Internet,case-10461,2012-01-09 01:06:40+01:00,General,2011-11-23 14:06:55.068000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource03,2011-11-14 01:06:40.010000+01:00,task-47159,T19 Determine report Y to stop indication,complete,Group 3,Resource03,2011-11-18 09:56:44.304000+01:00 +Internet,case-10461,2012-01-09 01:06:40+01:00,General,2011-11-23 14:06:55.068000+01:00,2012-01-09 01:06:40.010000+01:00,Group 2,Resource03,2011-11-14 01:06:40.010000+01:00,task-47160,T20 Print report Y to stop indication,complete,Group 2,Resource03,2011-11-18 09:56:58.025000+01:00 +Internet,case-10463,2012-02-29 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-11-14 01:06:40.010000+01:00,task-46759,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-25 16:09:50.422000+01:00 +Internet,case-10463,2012-02-29 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-11-14 01:06:40.010000+01:00,task-48121,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-25 16:10:19.837000+01:00 +Internet,case-10463,2012-02-29 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-11-14 01:06:40.010000+01:00,task-48123,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-25 16:10:39.345000+01:00 +Internet,case-10463,2012-02-29 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-11-14 01:06:40.010000+01:00,task-48124,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-25 16:10:54.528000+01:00 +Internet,case-10463,2012-02-29 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-11-14 01:06:40.010000+01:00,task-48122,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-25 16:15:35.699000+01:00 +Internet,case-10463,2012-02-29 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource06,2011-11-14 01:06:40.010000+01:00,task-48125,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-25 16:15:57.008000+01:00 +Internet,case-10464,2012-02-20 00:00:00+01:00,General,,2012-02-20 00:00:00.010000+01:00,Group 5,Resource09,2011-11-14 01:06:40.010000+01:00,task-47422,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-15 14:10:18.508000+01:00 +Internet,case-10464,2012-02-20 00:00:00+01:00,General,,2012-02-20 00:00:00.010000+01:00,Group 5,Resource09,2011-11-14 01:06:40.010000+01:00,task-50012,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-15 14:10:56.673000+01:00 +Internet,case-10464,2012-02-20 00:00:00+01:00,General,,2012-02-20 00:00:00.010000+01:00,Group 5,Resource09,2011-11-14 01:06:40.010000+01:00,task-50013,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-15 14:12:14.656000+01:00 +Internet,case-10464,2012-02-20 00:00:00+01:00,General,,2012-02-20 00:00:00.010000+01:00,Group 5,Resource09,2011-11-14 01:06:40.010000+01:00,task-50011,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-15 14:19:41.933000+01:00 +Internet,case-10464,2012-02-20 00:00:00+01:00,General,,2012-02-20 00:00:00.010000+01:00,Group 5,Resource09,2011-11-14 01:06:40.010000+01:00,task-50027,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-15 14:22:32.946000+01:00 +Internet,case-10464,2012-02-20 00:00:00+01:00,General,,2012-02-20 00:00:00.010000+01:00,Group 5,Resource09,2011-11-14 01:06:40.010000+01:00,task-50033,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-15 14:25:00.655000+01:00 +Internet,case-10472,2012-01-10 01:06:40+01:00,General,2011-12-13 08:01:09.294000+01:00,2012-01-10 01:06:40.010000+01:00,Group 8,Resource11,2011-11-15 01:06:40.010000+01:00,task-46765,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-17 16:42:14.396000+01:00 +Internet,case-10472,2012-01-10 01:06:40+01:00,General,2011-12-13 08:01:09.294000+01:00,2012-01-10 01:06:40.010000+01:00,Group 8,Resource11,2011-11-15 01:06:40.010000+01:00,task-47095,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-17 16:42:35.975000+01:00 +Internet,case-10472,2012-01-10 01:06:40+01:00,General,2011-12-13 08:01:09.294000+01:00,2012-01-10 01:06:40.010000+01:00,Group 8,Resource11,2011-11-15 01:06:40.010000+01:00,task-47097,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-17 16:42:51.761000+01:00 +Internet,case-10472,2012-01-10 01:06:40+01:00,General,2011-12-13 08:01:09.294000+01:00,2012-01-10 01:06:40.010000+01:00,Group 8,Resource11,2011-11-15 01:06:40.010000+01:00,task-47098,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-17 16:43:05.721000+01:00 +Internet,case-10472,2012-01-10 01:06:40+01:00,General,2011-12-13 08:01:09.294000+01:00,2012-01-10 01:06:40.010000+01:00,Group 8,Resource11,2011-11-15 01:06:40.010000+01:00,task-47096,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-17 16:43:24.256000+01:00 +Internet,case-10472,2012-01-10 01:06:40+01:00,General,2011-12-13 08:01:09.294000+01:00,2012-01-10 01:06:40.010000+01:00,Group 8,Resource11,2011-11-15 01:06:40.010000+01:00,task-47099,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-17 16:43:45.101000+01:00 +Internet,case-10473,2012-01-10 00:00:00+01:00,General,2012-01-09 16:41:15.601000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-46729,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-15 11:50:45.760000+01:00 +Internet,case-10473,2012-01-10 00:00:00+01:00,General,2012-01-09 16:41:15.601000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-46742,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-15 11:51:37.240000+01:00 +Internet,case-10473,2012-01-10 00:00:00+01:00,General,2012-01-09 16:41:15.601000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-46745,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-15 11:51:56.604000+01:00 +Internet,case-10473,2012-01-10 00:00:00+01:00,General,2012-01-09 16:41:15.601000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-46746,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-15 11:52:14.927000+01:00 +Internet,case-10473,2012-01-10 00:00:00+01:00,General,2012-01-09 16:41:15.601000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-46743,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-15 11:52:55.810000+01:00 +Internet,case-10473,2012-01-10 00:00:00+01:00,General,2012-01-09 16:41:15.601000+01:00,2012-01-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-46747,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-15 11:53:23.792000+01:00 +Internet,case-10474,2012-01-10 00:00:00+01:00,General,2012-01-09 16:36:35.304000+01:00,2012-01-10 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-46762,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-28 09:15:12.675000+01:00 +Internet,case-10474,2012-01-10 00:00:00+01:00,General,2012-01-09 16:36:35.304000+01:00,2012-01-10 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-48143,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-28 09:31:16.975000+01:00 +Internet,case-10474,2012-01-10 00:00:00+01:00,General,2012-01-09 16:36:35.304000+01:00,2012-01-10 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-48149,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-28 09:31:39.371000+01:00 +Internet,case-10474,2012-01-10 00:00:00+01:00,General,2012-01-09 16:36:35.304000+01:00,2012-01-10 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-48151,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-28 09:31:58.732000+01:00 +Internet,case-10474,2012-01-10 00:00:00+01:00,General,2012-01-09 16:36:35.304000+01:00,2012-01-10 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-48144,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-28 09:32:25.848000+01:00 +Internet,case-10474,2012-01-10 00:00:00+01:00,General,2012-01-09 16:36:35.304000+01:00,2012-01-10 00:00:00.010000+01:00,Group 5,Resource06,2011-11-15 01:06:40.010000+01:00,task-48153,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-28 09:32:46.412000+01:00 +Internet,case-10479,2012-01-10 01:06:40+01:00,General,2011-11-18 11:14:22.481000+01:00,2012-01-10 01:06:40.010000+01:00,Group 2,Resource03,2011-11-15 01:06:40.010000+01:00,task-46766,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 10:39:14.337000+01:00 +Internet,case-10479,2012-01-10 01:06:40+01:00,General,2011-11-18 11:14:22.481000+01:00,2012-01-10 01:06:40.010000+01:00,Group 2,Resource03,2011-11-15 01:06:40.010000+01:00,task-47184,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 10:39:34.311000+01:00 +Internet,case-10479,2012-01-10 01:06:40+01:00,General,2011-11-18 11:14:22.481000+01:00,2012-01-10 01:06:40.010000+01:00,Group 2,Resource03,2011-11-15 01:06:40.010000+01:00,task-47186,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 10:58:40.012000+01:00 +Internet,case-10479,2012-01-10 01:06:40+01:00,General,2011-11-18 11:14:22.481000+01:00,2012-01-10 01:06:40.010000+01:00,Group 2,Resource03,2011-11-15 01:06:40.010000+01:00,task-47193,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 11:13:53.173000+01:00 +Internet,case-10479,2012-01-10 01:06:40+01:00,General,2011-11-18 11:14:22.481000+01:00,2012-01-10 01:06:40.010000+01:00,Group 2,Resource03,2011-11-15 01:06:40.010000+01:00,task-47185,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-11-18 11:14:23.398000+01:00 +Internet,case-10483,2012-02-22 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-46826,Confirmation of receipt,complete,EMPTY,Resource02,2012-01-09 11:31:41.636000+01:00 +Internet,case-10483,2012-02-22 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-51617,T02 Check confirmation of receipt,complete,Group 4,Resource02,2012-01-09 11:32:15.732000+01:00 +Internet,case-10483,2012-02-22 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-51619,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2012-01-09 11:32:51.848000+01:00 +Internet,case-10483,2012-02-22 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-51620,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2012-01-09 11:33:18.309000+01:00 +Internet,case-10484,2012-02-22 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-46860,Confirmation of receipt,complete,EMPTY,Resource02,2012-01-09 12:11:30.587000+01:00 +Internet,case-10484,2012-02-22 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-51627,T02 Check confirmation of receipt,complete,Group 4,Resource02,2012-01-09 12:12:07.726000+01:00 +Internet,case-10484,2012-02-22 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-51629,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2012-01-09 12:12:57.161000+01:00 +Internet,case-10484,2012-02-22 00:00:00+01:00,General,,2012-02-22 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-51630,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2012-01-09 12:13:51.633000+01:00 +Internet,case-10487,2012-01-11 01:06:40+01:00,General,2011-12-07 09:56:05.674000+01:00,2012-01-11 01:06:40.010000+01:00,Group 8,Resource11,2011-11-16 01:06:40.010000+01:00,task-46867,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 12:02:46.930000+01:00 +Internet,case-10487,2012-01-11 01:06:40+01:00,General,2011-12-07 09:56:05.674000+01:00,2012-01-11 01:06:40.010000+01:00,Group 8,Resource11,2011-11-16 01:06:40.010000+01:00,task-47210,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 12:03:07.303000+01:00 +Internet,case-10487,2012-01-11 01:06:40+01:00,General,2011-12-07 09:56:05.674000+01:00,2012-01-11 01:06:40.010000+01:00,Group 8,Resource11,2011-11-16 01:06:40.010000+01:00,task-47212,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 12:03:27.687000+01:00 +Internet,case-10487,2012-01-11 01:06:40+01:00,General,2011-12-07 09:56:05.674000+01:00,2012-01-11 01:06:40.010000+01:00,Group 8,Resource11,2011-11-16 01:06:40.010000+01:00,task-47213,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 12:03:42.380000+01:00 +Internet,case-10487,2012-01-11 01:06:40+01:00,General,2011-12-07 09:56:05.674000+01:00,2012-01-11 01:06:40.010000+01:00,Group 8,Resource11,2011-11-16 01:06:40.010000+01:00,task-47211,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 12:04:04.405000+01:00 +Internet,case-10487,2012-01-11 01:06:40+01:00,General,2011-12-07 09:56:05.674000+01:00,2012-01-11 01:06:40.010000+01:00,Group 8,Resource11,2011-11-16 01:06:40.010000+01:00,task-47214,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 12:04:25.848000+01:00 +Internet,case-10489,2012-02-23 00:00:00+01:00,General,,2012-02-23 00:00:00.010000+01:00,Group 5,Resource02,2011-11-16 01:06:40.010000+01:00,task-46874,Confirmation of receipt,complete,EMPTY,Resource02,2011-12-01 14:44:04.954000+01:00 +Internet,case-10489,2012-02-23 00:00:00+01:00,General,,2012-02-23 00:00:00.010000+01:00,Group 5,Resource02,2011-11-16 01:06:40.010000+01:00,task-48806,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-12-01 14:44:34.050000+01:00 +Internet,case-10489,2012-02-23 00:00:00+01:00,General,,2012-02-23 00:00:00.010000+01:00,Group 5,Resource02,2011-11-16 01:06:40.010000+01:00,task-48808,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-12-01 14:44:57.380000+01:00 +Internet,case-10489,2012-02-23 00:00:00+01:00,General,,2012-02-23 00:00:00.010000+01:00,Group 5,Resource02,2011-11-16 01:06:40.010000+01:00,task-48809,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-12-01 14:45:21.242000+01:00 +Internet,case-10489,2012-02-23 00:00:00+01:00,General,,2012-02-23 00:00:00.010000+01:00,Group 5,Resource02,2011-11-16 01:06:40.010000+01:00,task-48807,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-12-01 14:47:15.322000+01:00 +Internet,case-10489,2012-02-23 00:00:00+01:00,General,,2012-02-23 00:00:00.010000+01:00,Group 5,Resource02,2011-11-16 01:06:40.010000+01:00,task-48810,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-12-01 14:47:58.903000+01:00 +Internet,case-10492,2012-01-11 01:06:40+01:00,General,2011-11-22 10:25:17.026000+01:00,2012-01-11 01:06:40.010000+01:00,Group 2,Resource03,2011-11-16 01:06:40.010000+01:00,task-46950,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-22 09:52:39.368000+01:00 +Internet,case-10492,2012-01-11 01:06:40+01:00,General,2011-11-22 10:25:17.026000+01:00,2012-01-11 01:06:40.010000+01:00,Group 2,Resource03,2011-11-16 01:06:40.010000+01:00,task-47490,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-22 09:53:28.689000+01:00 +Internet,case-10492,2012-01-11 01:06:40+01:00,General,2011-11-22 10:25:17.026000+01:00,2012-01-11 01:06:40.010000+01:00,Group 2,Resource03,2011-11-16 01:06:40.010000+01:00,task-47492,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-22 09:53:51.826000+01:00 +Internet,case-10492,2012-01-11 01:06:40+01:00,General,2011-11-22 10:25:17.026000+01:00,2012-01-11 01:06:40.010000+01:00,Group 2,Resource03,2011-11-16 01:06:40.010000+01:00,task-47493,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-22 09:54:27.929000+01:00 +Internet,case-10492,2012-01-11 01:06:40+01:00,General,2011-11-22 10:25:17.026000+01:00,2012-01-11 01:06:40.010000+01:00,Group 2,Resource03,2011-11-16 01:06:40.010000+01:00,task-47491,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-22 09:55:09.933000+01:00 +Internet,case-10492,2012-01-11 01:06:40+01:00,General,2011-11-22 10:25:17.026000+01:00,2012-01-11 01:06:40.010000+01:00,Group 2,Resource03,2011-11-16 01:06:40.010000+01:00,task-47494,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-22 09:55:54.193000+01:00 +Internet,case-10497,2012-01-12 01:06:40+01:00,General,2011-12-13 07:56:25.045000+01:00,2012-01-12 01:06:40.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-46955,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 14:15:41.322000+01:00 +Internet,case-10497,2012-01-12 01:06:40+01:00,General,2011-12-13 07:56:25.045000+01:00,2012-01-12 01:06:40.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47273,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 14:16:05.061000+01:00 +Internet,case-10497,2012-01-12 01:06:40+01:00,General,2011-12-13 07:56:25.045000+01:00,2012-01-12 01:06:40.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47276,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 14:16:21.225000+01:00 +Internet,case-10497,2012-01-12 01:06:40+01:00,General,2011-12-13 07:56:25.045000+01:00,2012-01-12 01:06:40.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47277,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 14:17:48.146000+01:00 +Internet,case-10497,2012-01-12 01:06:40+01:00,General,2011-12-13 07:56:25.045000+01:00,2012-01-12 01:06:40.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47274,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 14:18:13.728000+01:00 +Internet,case-10497,2012-01-12 01:06:40+01:00,General,2011-12-13 07:56:25.045000+01:00,2012-01-12 01:06:40.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47279,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 14:18:48.561000+01:00 +Internet,case-10498,2012-01-12 00:00:00+01:00,General,2011-12-23 15:10:40.223000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-46958,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 14:41:16.794000+01:00 +Internet,case-10498,2012-01-12 00:00:00+01:00,General,2011-12-23 15:10:40.223000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47300,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 14:41:39.728000+01:00 +Internet,case-10498,2012-01-12 00:00:00+01:00,General,2011-12-23 15:10:40.223000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47302,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 14:41:55.081000+01:00 +Internet,case-10498,2012-01-12 00:00:00+01:00,General,2011-12-23 15:10:40.223000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47303,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 14:42:12.895000+01:00 +Internet,case-10498,2012-01-12 00:00:00+01:00,General,2011-12-23 15:10:40.223000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47301,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 14:54:15.830000+01:00 +Internet,case-10498,2012-01-12 00:00:00+01:00,General,2011-12-23 15:10:40.223000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47305,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 15:01:23.990000+01:00 +Internet,case-10499,2012-01-12 00:00:00+01:00,General,2011-12-23 15:35:14.426000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-46972,Confirmation of receipt,complete,EMPTY,Resource03,2011-11-18 15:22:24.611000+01:00 +Internet,case-10499,2012-01-12 00:00:00+01:00,General,2011-12-23 15:35:14.426000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47323,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-18 15:22:42.192000+01:00 +Internet,case-10499,2012-01-12 00:00:00+01:00,General,2011-12-23 15:35:14.426000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47325,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-18 15:22:57.393000+01:00 +Internet,case-10499,2012-01-12 00:00:00+01:00,General,2011-12-23 15:35:14.426000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47326,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-18 15:23:20.869000+01:00 +Internet,case-10499,2012-01-12 00:00:00+01:00,General,2011-12-23 15:35:14.426000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47324,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-18 15:23:34.611000+01:00 +Internet,case-10499,2012-01-12 00:00:00+01:00,General,2011-12-23 15:35:14.426000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47327,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-18 15:24:52.767000+01:00 +Internet,case-10502,2012-01-12 00:00:00+01:00,General,2012-01-16 15:09:57.947000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-46996,Confirmation of receipt,complete,EMPTY,Resource13,2011-12-15 11:25:23.298000+01:00 +Internet,case-10502,2012-01-12 00:00:00+01:00,General,2012-01-16 15:09:57.947000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-49959,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-12-15 11:26:04.272000+01:00 +Internet,case-10502,2012-01-12 00:00:00+01:00,General,2012-01-16 15:09:57.947000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-49961,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-12-15 11:26:41.370000+01:00 +Internet,case-10502,2012-01-12 00:00:00+01:00,General,2012-01-16 15:09:57.947000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-49962,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-12-15 11:27:17.646000+01:00 +Internet,case-10502,2012-01-12 00:00:00+01:00,General,2012-01-16 15:09:57.947000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-49960,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-12-15 11:29:36.267000+01:00 +Internet,case-10502,2012-01-12 00:00:00+01:00,General,2012-01-16 15:09:57.947000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-49963,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-12-15 11:30:06.832000+01:00 +Internet,case-10509,2012-01-04 01:06:40+01:00,General,2011-11-30 16:08:40.943000+01:00,2012-01-04 01:06:40.010000+01:00,Group 5,Resource05,2011-11-09 01:06:40.010000+01:00,task-47039,Confirmation of receipt,complete,EMPTY,Resource05,2011-11-28 09:50:57.605000+01:00 +Internet,case-10509,2012-01-04 01:06:40+01:00,General,2011-11-30 16:08:40.943000+01:00,2012-01-04 01:06:40.010000+01:00,Group 5,Resource05,2011-11-09 01:06:40.010000+01:00,task-48167,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-11-28 09:51:19.170000+01:00 +Internet,case-10509,2012-01-04 01:06:40+01:00,General,2011-11-30 16:08:40.943000+01:00,2012-01-04 01:06:40.010000+01:00,Group 5,Resource05,2011-11-09 01:06:40.010000+01:00,task-48166,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-11-28 09:51:59.079000+01:00 +Internet,case-10509,2012-01-04 01:06:40+01:00,General,2011-11-30 16:08:40.943000+01:00,2012-01-04 01:06:40.010000+01:00,Group 5,Resource05,2011-11-09 01:06:40.010000+01:00,task-48169,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-11-28 09:52:31.415000+01:00 +Internet,case-10509,2012-01-04 01:06:40+01:00,General,2011-11-30 16:08:40.943000+01:00,2012-01-04 01:06:40.010000+01:00,Group 5,Resource05,2011-11-09 01:06:40.010000+01:00,task-48170,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-11-28 09:52:48.615000+01:00 +Internet,case-10509,2012-01-04 01:06:40+01:00,General,2011-11-30 16:08:40.943000+01:00,2012-01-04 01:06:40.010000+01:00,Group 5,Resource05,2011-11-09 01:06:40.010000+01:00,task-48168,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-11-28 09:53:34.153000+01:00 +Internet,case-10511,2011-12-28 00:00:00+01:00,General,2011-12-07 09:39:48.523000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 00:00:00.010000+01:00,task-46990,Confirmation of receipt,complete,Group 1,Resource03,2011-11-17 15:11:00.004000+01:00 +Internet,case-10511,2011-12-28 00:00:00+01:00,General,2011-12-07 09:39:48.523000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 00:00:00.010000+01:00,task-47009,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-11-17 15:11:23.105000+01:00 +Internet,case-10511,2011-12-28 00:00:00+01:00,General,2011-12-07 09:39:48.523000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 00:00:00.010000+01:00,task-47011,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-11-17 15:11:43.109000+01:00 +Internet,case-10511,2011-12-28 00:00:00+01:00,General,2011-12-07 09:39:48.523000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 00:00:00.010000+01:00,task-47012,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-11-17 15:12:03.851000+01:00 +Internet,case-10511,2011-12-28 00:00:00+01:00,General,2011-12-07 09:39:48.523000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 00:00:00.010000+01:00,task-47010,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-11-17 15:16:28.264000+01:00 +Internet,case-10511,2011-12-28 00:00:00+01:00,General,2011-12-07 09:39:48.523000+01:00,2011-12-28 00:00:00.010000+01:00,Group 8,Resource11,2011-11-02 00:00:00.010000+01:00,task-47014,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-11-17 15:16:57.113000+01:00 +Internet,case-10512,2012-02-15 00:00:00+01:00,General,2012-01-19 14:41:04.746000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-47424,Confirmation of receipt,complete,EMPTY,Resource13,2011-11-30 21:02:08.700000+01:00 +Internet,case-10512,2012-02-15 00:00:00+01:00,General,2012-01-19 14:41:04.746000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-48712,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-11-30 21:02:49.223000+01:00 +Internet,case-10512,2012-02-15 00:00:00+01:00,General,2012-01-19 14:41:04.746000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-48714,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-11-30 21:03:54.644000+01:00 +Internet,case-10512,2012-02-15 00:00:00+01:00,General,2012-01-19 14:41:04.746000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-48715,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-11-30 21:04:57.092000+01:00 +Internet,case-10512,2012-02-15 00:00:00+01:00,General,2012-01-19 14:41:04.746000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-48713,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-11-30 21:05:25.227000+01:00 +Internet,case-10512,2012-02-15 00:00:00+01:00,General,2012-01-19 14:41:04.746000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource13,2011-11-17 01:06:40.010000+01:00,task-48716,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-11-30 21:05:48.871000+01:00 +Internet,case-10514,2012-01-12 00:00:00+01:00,General,2012-01-18 11:59:00.881000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource09,2011-11-17 01:06:40.010000+01:00,task-47468,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-22 12:44:26.417000+01:00 +Internet,case-10514,2012-01-12 00:00:00+01:00,General,2012-01-18 11:59:00.881000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource09,2011-11-17 01:06:40.010000+01:00,task-50640,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-22 12:45:02.538000+01:00 +Internet,case-10514,2012-01-12 00:00:00+01:00,General,2012-01-18 11:59:00.881000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource09,2011-11-17 01:06:40.010000+01:00,task-50642,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-22 12:45:30.961000+01:00 +Internet,case-10514,2012-01-12 00:00:00+01:00,General,2012-01-18 11:59:00.881000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource09,2011-11-17 01:06:40.010000+01:00,task-50641,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-22 12:46:05.225000+01:00 +Internet,case-10514,2012-01-12 00:00:00+01:00,General,2012-01-18 11:59:00.881000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource09,2011-11-17 01:06:40.010000+01:00,task-50644,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-22 12:46:51.746000+01:00 +Internet,case-10514,2012-01-12 00:00:00+01:00,General,2012-01-18 11:59:00.881000+01:00,2012-01-12 00:00:00.010000+01:00,Group 5,Resource09,2011-11-17 01:06:40.010000+01:00,task-50643,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-22 12:47:21.763000+01:00 +Internet,case-10517,2012-01-12 00:00:00+01:00,General,2011-12-23 10:01:29.356000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47465,Confirmation of receipt,complete,EMPTY,Resource01,2011-11-24 15:28:31.455000+01:00 +Internet,case-10517,2012-01-12 00:00:00+01:00,General,2011-12-23 10:01:29.356000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47941,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-11-24 15:28:49.749000+01:00 +Internet,case-10517,2012-01-12 00:00:00+01:00,General,2011-12-23 10:01:29.356000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47943,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-11-24 15:29:09.116000+01:00 +Internet,case-10517,2012-01-12 00:00:00+01:00,General,2011-12-23 10:01:29.356000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47944,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-11-24 15:29:25.785000+01:00 +Internet,case-10517,2012-01-12 00:00:00+01:00,General,2011-12-23 10:01:29.356000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47942,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-11-24 15:29:52.922000+01:00 +Internet,case-10517,2012-01-12 00:00:00+01:00,General,2011-12-23 10:01:29.356000+01:00,2012-01-12 00:00:00.010000+01:00,Group 8,Resource11,2011-11-17 01:06:40.010000+01:00,task-47945,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-11-24 15:30:19.049000+01:00 +Internet,case-10526,2012-01-13 00:00:00+01:00,General,2011-12-23 11:25:49.557000+01:00,2012-01-13 00:00:00.010000+01:00,Group 8,Resource11,2011-11-18 01:06:40.010000+01:00,task-47466,Confirmation of receipt,complete,EMPTY,Resource01,2011-11-24 15:17:03.683000+01:00 +Internet,case-10526,2012-01-13 00:00:00+01:00,General,2011-12-23 11:25:49.557000+01:00,2012-01-13 00:00:00.010000+01:00,Group 8,Resource11,2011-11-18 01:06:40.010000+01:00,task-47917,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-11-24 15:17:28.049000+01:00 +Internet,case-10526,2012-01-13 00:00:00+01:00,General,2011-12-23 11:25:49.557000+01:00,2012-01-13 00:00:00.010000+01:00,Group 8,Resource11,2011-11-18 01:06:40.010000+01:00,task-47916,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-11-24 15:17:45.367000+01:00 +Internet,case-10526,2012-01-13 00:00:00+01:00,General,2011-12-23 11:25:49.557000+01:00,2012-01-13 00:00:00.010000+01:00,Group 8,Resource11,2011-11-18 01:06:40.010000+01:00,task-47919,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-11-24 15:18:11.416000+01:00 +Internet,case-10526,2012-01-13 00:00:00+01:00,General,2011-12-23 11:25:49.557000+01:00,2012-01-13 00:00:00.010000+01:00,Group 8,Resource11,2011-11-18 01:06:40.010000+01:00,task-47920,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-11-24 15:18:29.633000+01:00 +Internet,case-10526,2012-01-13 00:00:00+01:00,General,2011-12-23 11:25:49.557000+01:00,2012-01-13 00:00:00.010000+01:00,Group 8,Resource11,2011-11-18 01:06:40.010000+01:00,task-47918,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-11-24 15:18:46.116000+01:00 +Internet,case-10541,2012-01-16 01:06:40+01:00,General,2011-11-25 10:01:30.375000+01:00,2012-01-16 01:06:40.010000+01:00,Group 5,Resource08,2011-11-21 01:06:40.010000+01:00,task-47481,Confirmation of receipt,complete,EMPTY,Resource08,2011-11-24 11:39:46.582000+01:00 +Internet,case-10541,2012-01-16 01:06:40+01:00,General,2011-11-25 10:01:30.375000+01:00,2012-01-16 01:06:40.010000+01:00,Group 5,Resource08,2011-11-21 01:06:40.010000+01:00,task-47802,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-11-24 11:46:52.160000+01:00 +Internet,case-10541,2012-01-16 01:06:40+01:00,General,2011-11-25 10:01:30.375000+01:00,2012-01-16 01:06:40.010000+01:00,Group 5,Resource08,2011-11-21 01:06:40.010000+01:00,task-47807,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-11-24 11:48:07.308000+01:00 +Internet,case-10541,2012-01-16 01:06:40+01:00,General,2011-11-25 10:01:30.375000+01:00,2012-01-16 01:06:40.010000+01:00,Group 5,Resource08,2011-11-21 01:06:40.010000+01:00,task-47808,T05 Print and send confirmation of receipt,complete,Group 2,Resource08,2011-11-24 11:48:40.018000+01:00 +Internet,case-10541,2012-01-16 01:06:40+01:00,General,2011-11-25 10:01:30.375000+01:00,2012-01-16 01:06:40.010000+01:00,Group 5,Resource08,2011-11-21 01:06:40.010000+01:00,task-47803,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-11-24 11:53:15.660000+01:00 +Internet,case-10541,2012-01-16 01:06:40+01:00,General,2011-11-25 10:01:30.375000+01:00,2012-01-16 01:06:40.010000+01:00,Group 5,Resource08,2011-11-21 01:06:40.010000+01:00,task-47810,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-11-24 12:10:33.205000+01:00 +Internet,case-10542,2012-02-27 00:00:00+01:00,General,,2012-02-27 00:00:00.010000+01:00,Group 5,Resource02,2011-11-21 01:06:40.010000+01:00,task-47527,Confirmation of receipt,complete,EMPTY,Resource02,2012-01-17 11:24:14.147000+01:00 +Internet,case-10542,2012-02-27 00:00:00+01:00,General,,2012-02-27 00:00:00.010000+01:00,Group 5,Resource02,2011-11-21 01:06:40.010000+01:00,task-52768,T02 Check confirmation of receipt,complete,Group 4,Resource02,2012-01-17 11:24:50.099000+01:00 +Internet,case-10542,2012-02-27 00:00:00+01:00,General,,2012-02-27 00:00:00.010000+01:00,Group 5,Resource02,2011-11-21 01:06:40.010000+01:00,task-52770,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2012-01-17 11:25:40.715000+01:00 +Internet,case-10542,2012-02-27 00:00:00+01:00,General,,2012-02-27 00:00:00.010000+01:00,Group 5,Resource02,2011-11-21 01:06:40.010000+01:00,task-52771,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2012-01-17 11:26:47.870000+01:00 +Internet,case-10546,2011-12-28 00:00:00+01:00,General,2011-12-22 00:00:00.010000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource08,2011-11-02 01:06:40.010000+01:00,task-47387,Confirmation of receipt,complete,EMPTY,Resource08,2011-11-24 15:18:50.269000+01:00 +Internet,case-10546,2011-12-28 00:00:00+01:00,General,2011-12-22 00:00:00.010000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource08,2011-11-02 01:06:40.010000+01:00,task-47922,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-11-24 15:20:34.623000+01:00 +Internet,case-10546,2011-12-28 00:00:00+01:00,General,2011-12-22 00:00:00.010000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource08,2011-11-02 01:06:40.010000+01:00,task-47930,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-11-24 15:21:12.700000+01:00 +Internet,case-10546,2011-12-28 00:00:00+01:00,General,2011-12-22 00:00:00.010000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource08,2011-11-02 01:06:40.010000+01:00,task-47934,T05 Print and send confirmation of receipt,complete,Group 2,Resource08,2011-11-24 15:22:56.138000+01:00 +Internet,case-10546,2011-12-28 00:00:00+01:00,General,2011-12-22 00:00:00.010000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource08,2011-11-02 01:06:40.010000+01:00,task-47923,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-11-24 15:24:35.976000+01:00 +Internet,case-10546,2011-12-28 00:00:00+01:00,General,2011-12-22 00:00:00.010000+01:00,2011-12-28 00:00:00.010000+01:00,Group 5,Resource08,2011-11-02 01:06:40.010000+01:00,task-47938,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-11-28 10:22:58.669000+01:00 +Internet,case-10550,2012-01-16 01:06:40+01:00,General,2011-11-25 09:08:53.865000+01:00,2012-01-16 01:06:40.010000+01:00,Group 2,Resource20,2011-11-21 01:06:40.010000+01:00,task-47482,Confirmation of receipt,complete,EMPTY,Resource20,2011-11-22 13:48:53.252000+01:00 +Internet,case-10550,2012-01-16 01:06:40+01:00,General,2011-11-25 09:08:53.865000+01:00,2012-01-16 01:06:40.010000+01:00,Group 2,Resource20,2011-11-21 01:06:40.010000+01:00,task-47567,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-11-22 13:49:20.353000+01:00 +Internet,case-10550,2012-01-16 01:06:40+01:00,General,2011-11-25 09:08:53.865000+01:00,2012-01-16 01:06:40.010000+01:00,Group 2,Resource20,2011-11-21 01:06:40.010000+01:00,task-47569,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-11-22 13:49:42.964000+01:00 +Internet,case-10550,2012-01-16 01:06:40+01:00,General,2011-11-25 09:08:53.865000+01:00,2012-01-16 01:06:40.010000+01:00,Group 2,Resource20,2011-11-21 01:06:40.010000+01:00,task-47572,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-11-22 13:50:08.478000+01:00 +Internet,case-10550,2012-01-16 01:06:40+01:00,General,2011-11-25 09:08:53.865000+01:00,2012-01-16 01:06:40.010000+01:00,Group 2,Resource20,2011-11-21 01:06:40.010000+01:00,task-47568,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-11-22 13:50:35.789000+01:00 +Internet,case-10550,2012-01-16 01:06:40+01:00,General,2011-11-25 09:08:53.865000+01:00,2012-01-16 01:06:40.010000+01:00,Group 2,Resource20,2011-11-21 01:06:40.010000+01:00,task-47573,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-11-22 13:50:57.789000+01:00 +Internet,case-10551,2012-01-16 00:00:00+01:00,General,,2012-01-16 00:00:00.010000+01:00,Group 5,Resource09,2011-11-21 01:06:40.010000+01:00,task-47532,Confirmation of receipt,complete,EMPTY,Resource09,2012-01-11 12:00:05.791000+01:00 +Internet,case-10551,2012-01-16 00:00:00+01:00,General,,2012-01-16 00:00:00.010000+01:00,Group 5,Resource09,2011-11-21 01:06:40.010000+01:00,task-51938,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2012-01-11 12:00:53.694000+01:00 +Internet,case-10551,2012-01-16 00:00:00+01:00,General,,2012-01-16 00:00:00.010000+01:00,Group 5,Resource09,2011-11-21 01:06:40.010000+01:00,task-51939,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2012-01-11 12:01:55.141000+01:00 +Internet,case-10551,2012-01-16 00:00:00+01:00,General,,2012-01-16 00:00:00.010000+01:00,Group 5,Resource09,2011-11-21 01:06:40.010000+01:00,task-51937,T02 Check confirmation of receipt,complete,Group 4,Resource09,2012-01-11 12:02:51.856000+01:00 +Internet,case-10551,2012-01-16 00:00:00+01:00,General,,2012-01-16 00:00:00.010000+01:00,Group 5,Resource09,2011-11-21 01:06:40.010000+01:00,task-51941,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2012-01-11 12:04:31.551000+01:00 +Internet,case-10551,2012-01-16 00:00:00+01:00,General,,2012-01-16 00:00:00.010000+01:00,Group 5,Resource09,2011-11-21 01:06:40.010000+01:00,task-51942,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2012-01-11 12:05:14.491000+01:00 +Internet,case-10555,2012-01-16 00:00:00+01:00,General,2011-12-23 12:04:26.129000+01:00,2012-01-16 00:00:00.010000+01:00,Group 8,Resource11,2011-11-21 01:06:40.010000+01:00,task-47544,Confirmation of receipt,complete,EMPTY,Resource01,2011-11-24 14:48:48.674000+01:00 +Internet,case-10555,2012-01-16 00:00:00+01:00,General,2011-12-23 12:04:26.129000+01:00,2012-01-16 00:00:00.010000+01:00,Group 8,Resource11,2011-11-21 01:06:40.010000+01:00,task-47892,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-11-24 14:49:31.532000+01:00 +Internet,case-10555,2012-01-16 00:00:00+01:00,General,2011-12-23 12:04:26.129000+01:00,2012-01-16 00:00:00.010000+01:00,Group 8,Resource11,2011-11-21 01:06:40.010000+01:00,task-47894,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-11-24 14:50:11.471000+01:00 +Internet,case-10555,2012-01-16 00:00:00+01:00,General,2011-12-23 12:04:26.129000+01:00,2012-01-16 00:00:00.010000+01:00,Group 8,Resource11,2011-11-21 01:06:40.010000+01:00,task-47896,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-11-24 14:50:42.141000+01:00 +Internet,case-10555,2012-01-16 00:00:00+01:00,General,2011-12-23 12:04:26.129000+01:00,2012-01-16 00:00:00.010000+01:00,Group 8,Resource11,2011-11-21 01:06:40.010000+01:00,task-47893,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-11-24 14:50:57.458000+01:00 +Internet,case-10555,2012-01-16 00:00:00+01:00,General,2011-12-23 12:04:26.129000+01:00,2012-01-16 00:00:00.010000+01:00,Group 8,Resource11,2011-11-21 01:06:40.010000+01:00,task-47898,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-11-24 14:51:29.552000+01:00 +Internet,case-10563,2012-02-08 08:54:00.925000+01:00,Customer contact,2011-11-22 11:56:10.095000+01:00,2012-02-08 08:54:00.925000+01:00,,admin3,2011-11-22 08:54:00.925000+01:00,task-47550,Confirmation of receipt,complete,Group 1,admin2,2011-11-22 11:56:11.144000+01:00 +Internet,case-10564,2012-01-17 00:00:00+01:00,General,,2012-01-17 00:00:00.010000+01:00,Group 5,Resource09,2011-11-22 01:06:40.010000+01:00,task-48825,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-08 14:15:29.375000+01:00 +Internet,case-10564,2012-01-17 00:00:00+01:00,General,,2012-01-17 00:00:00.010000+01:00,Group 5,Resource09,2011-11-22 01:06:40.010000+01:00,task-49478,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-08 14:16:06.431000+01:00 +Internet,case-10564,2012-01-17 00:00:00+01:00,General,,2012-01-17 00:00:00.010000+01:00,Group 5,Resource09,2011-11-22 01:06:40.010000+01:00,task-49480,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-08 14:16:42.668000+01:00 +Internet,case-10564,2012-01-17 00:00:00+01:00,General,,2012-01-17 00:00:00.010000+01:00,Group 5,Resource09,2011-11-22 01:06:40.010000+01:00,task-49481,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-08 14:17:07.988000+01:00 +Internet,case-10564,2012-01-17 00:00:00+01:00,General,,2012-01-17 00:00:00.010000+01:00,Group 5,Resource09,2011-11-22 01:06:40.010000+01:00,task-49479,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-08 14:17:39.570000+01:00 +Internet,case-10564,2012-01-17 00:00:00+01:00,General,,2012-01-17 00:00:00.010000+01:00,Group 5,Resource09,2011-11-22 01:06:40.010000+01:00,task-49482,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-08 14:40:56.319000+01:00 +Internet,case-10571,2012-01-17 01:06:40+01:00,General,2011-12-09 10:15:03.846000+01:00,2012-01-17 01:06:40.010000+01:00,Group 5,Resource04,2011-11-22 01:06:40.010000+01:00,task-47712,Confirmation of receipt,complete,EMPTY,admin2,2011-12-09 10:15:04.933000+01:00 +Internet,case-10575,2012-01-18 00:00:00+01:00,General,2012-01-05 14:32:52.039000+01:00,2012-01-18 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-47750,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-01 08:33:35.361000+01:00 +Internet,case-10575,2012-01-18 00:00:00+01:00,General,2012-01-05 14:32:52.039000+01:00,2012-01-18 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-48736,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-01 08:34:01.593000+01:00 +Internet,case-10575,2012-01-18 00:00:00+01:00,General,2012-01-05 14:32:52.039000+01:00,2012-01-18 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-48739,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-01 08:34:49.023000+01:00 +Internet,case-10575,2012-01-18 00:00:00+01:00,General,2012-01-05 14:32:52.039000+01:00,2012-01-18 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-48740,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-01 08:36:40.264000+01:00 +Internet,case-10575,2012-01-18 00:00:00+01:00,General,2012-01-05 14:32:52.039000+01:00,2012-01-18 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-48737,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-01 08:37:42.825000+01:00 +Internet,case-10575,2012-01-18 00:00:00+01:00,General,2012-01-05 14:32:52.039000+01:00,2012-01-18 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-48741,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-01 08:38:10.344000+01:00 +Internet,case-10576,2012-02-09 00:00:00+01:00,General,2012-01-12 14:47:41.335000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-47755,Confirmation of receipt,complete,EMPTY,Resource01,2011-11-24 14:30:50.714000+01:00 +Internet,case-10576,2012-02-09 00:00:00+01:00,General,2012-01-12 14:47:41.335000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-47872,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-11-24 14:31:22.728000+01:00 +Internet,case-10576,2012-02-09 00:00:00+01:00,General,2012-01-12 14:47:41.335000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-47871,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-11-24 14:31:48.853000+01:00 +Internet,case-10576,2012-02-09 00:00:00+01:00,General,2012-01-12 14:47:41.335000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-47874,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-11-24 14:32:07.053000+01:00 +Internet,case-10576,2012-02-09 00:00:00+01:00,General,2012-01-12 14:47:41.335000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-47876,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-11-24 14:32:23.408000+01:00 +Internet,case-10576,2012-02-09 00:00:00+01:00,General,2012-01-12 14:47:41.335000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-11-23 01:06:40.010000+01:00,task-47873,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-11-24 14:32:46.077000+01:00 +Internet,case-10582,2012-02-09 16:21:00.744000+01:00,Customer contact,2011-11-24 09:15:48.187000+01:00,2012-02-09 16:21:00.744000+01:00,,admin3,2011-11-23 16:21:00.744000+01:00,task-47796,Confirmation of receipt,complete,Group 1,admin2,2011-11-24 09:15:49.144000+01:00 +Internet,case-10583,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource09,2011-11-23 01:06:40.010000+01:00,task-48829,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-15 14:42:52.507000+01:00 +Internet,case-10583,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource09,2011-11-23 01:06:40.010000+01:00,task-50035,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-15 14:45:08.364000+01:00 +Internet,case-10583,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource09,2011-11-23 01:06:40.010000+01:00,task-50037,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-15 14:45:47.035000+01:00 +Internet,case-10583,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource09,2011-11-23 01:06:40.010000+01:00,task-50038,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-15 14:46:19.010000+01:00 +Internet,case-10583,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource09,2011-11-23 01:06:40.010000+01:00,task-50036,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-15 14:46:49.392000+01:00 +Internet,case-10583,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource09,2011-11-23 01:06:40.010000+01:00,task-50039,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-15 14:47:46.628000+01:00 +Internet,case-10592,2012-01-19 01:06:40+01:00,General,2011-12-12 15:18:40.732000+01:00,2012-01-19 01:06:40.010000+01:00,Group 5,Resource12,2011-11-24 01:06:40.010000+01:00,task-47915,Confirmation of receipt,complete,EMPTY,Resource12,2011-11-29 11:46:06.532000+01:00 +Internet,case-10592,2012-01-19 01:06:40+01:00,General,2011-12-12 15:18:40.732000+01:00,2012-01-19 01:06:40.010000+01:00,Group 5,Resource12,2011-11-24 01:06:40.010000+01:00,task-48426,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-11-29 11:46:54.371000+01:00 +Internet,case-10592,2012-01-19 01:06:40+01:00,General,2011-12-12 15:18:40.732000+01:00,2012-01-19 01:06:40.010000+01:00,Group 5,Resource12,2011-11-24 01:06:40.010000+01:00,task-48428,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-11-29 11:47:32.540000+01:00 +Internet,case-10592,2012-01-19 01:06:40+01:00,General,2011-12-12 15:18:40.732000+01:00,2012-01-19 01:06:40.010000+01:00,Group 5,Resource12,2011-11-24 01:06:40.010000+01:00,task-48427,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-11-29 12:08:36.453000+01:00 +Internet,case-10592,2012-01-19 01:06:40+01:00,General,2011-12-12 15:18:40.732000+01:00,2012-01-19 01:06:40.010000+01:00,Group 5,Resource12,2011-11-24 01:06:40.010000+01:00,task-48445,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-11-29 12:09:11.004000+01:00 +Internet,case-10592,2012-01-19 01:06:40+01:00,General,2011-12-12 15:18:40.732000+01:00,2012-01-19 01:06:40.010000+01:00,Group 5,Resource12,2011-11-24 01:06:40.010000+01:00,task-48429,T05 Print and send confirmation of receipt,complete,Group 2,Resource27,2011-11-30 12:02:36.695000+01:00 +Internet,case-10593,2012-01-19 00:00:00+01:00,General,2012-01-17 14:33:56.518000+01:00,2012-01-19 00:00:00.010000+01:00,Group 5,Resource04,2011-11-24 01:06:40.010000+01:00,task-48182,Confirmation of receipt,complete,EMPTY,Resource04,2011-11-30 13:54:33.716000+01:00 +Internet,case-10593,2012-01-19 00:00:00+01:00,General,2012-01-17 14:33:56.518000+01:00,2012-01-19 00:00:00.010000+01:00,Group 5,Resource04,2011-11-24 01:06:40.010000+01:00,task-48607,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-11-30 13:54:56.948000+01:00 +Internet,case-10593,2012-01-19 00:00:00+01:00,General,2012-01-17 14:33:56.518000+01:00,2012-01-19 00:00:00.010000+01:00,Group 5,Resource04,2011-11-24 01:06:40.010000+01:00,task-48609,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-11-30 13:55:14.723000+01:00 +Internet,case-10593,2012-01-19 00:00:00+01:00,General,2012-01-17 14:33:56.518000+01:00,2012-01-19 00:00:00.010000+01:00,Group 5,Resource04,2011-11-24 01:06:40.010000+01:00,task-48611,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-11-30 13:55:33.200000+01:00 +Internet,case-10593,2012-01-19 00:00:00+01:00,General,2012-01-17 14:33:56.518000+01:00,2012-01-19 00:00:00.010000+01:00,Group 5,Resource04,2011-11-24 01:06:40.010000+01:00,task-48608,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-11-30 13:55:50.019000+01:00 +Internet,case-10593,2012-01-19 00:00:00+01:00,General,2012-01-17 14:33:56.518000+01:00,2012-01-19 00:00:00.010000+01:00,Group 5,Resource04,2011-11-24 01:06:40.010000+01:00,task-48613,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-11-30 13:56:09.588000+01:00 +Internet,case-10598,2012-01-20 01:06:40+01:00,General,2011-11-30 15:52:53.757000+01:00,2012-01-20 01:06:40.010000+01:00,Group 2,Resource20,2011-11-24 01:06:40.010000+01:00,task-47964,Confirmation of receipt,complete,EMPTY,Resource20,2011-11-24 16:28:52.911000+01:00 +Internet,case-10598,2012-01-20 01:06:40+01:00,General,2011-11-30 15:52:53.757000+01:00,2012-01-20 01:06:40.010000+01:00,Group 2,Resource20,2011-11-24 01:06:40.010000+01:00,task-47965,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-11-24 16:30:32.541000+01:00 +Internet,case-10598,2012-01-20 01:06:40+01:00,General,2011-11-30 15:52:53.757000+01:00,2012-01-20 01:06:40.010000+01:00,Group 2,Resource20,2011-11-24 01:06:40.010000+01:00,task-47967,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-11-24 16:30:49.801000+01:00 +Internet,case-10598,2012-01-20 01:06:40+01:00,General,2011-11-30 15:52:53.757000+01:00,2012-01-20 01:06:40.010000+01:00,Group 2,Resource20,2011-11-24 01:06:40.010000+01:00,task-47968,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-11-24 16:31:26.522000+01:00 +Internet,case-10598,2012-01-20 01:06:40+01:00,General,2011-11-30 15:52:53.757000+01:00,2012-01-20 01:06:40.010000+01:00,Group 2,Resource20,2011-11-24 01:06:40.010000+01:00,task-47966,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-11-24 16:31:57.491000+01:00 +Internet,case-10598,2012-01-20 01:06:40+01:00,General,2011-11-30 15:52:53.757000+01:00,2012-01-20 01:06:40.010000+01:00,Group 2,Resource20,2011-11-24 01:06:40.010000+01:00,task-47969,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-11-24 16:32:30.511000+01:00 +Internet,case-10600,2012-01-19 00:00:00+01:00,General,2012-01-12 14:34:01.420000+01:00,2012-01-19 00:00:00.010000+01:00,Group 8,Resource11,2011-11-24 01:06:40.010000+01:00,task-48203,Confirmation of receipt,complete,EMPTY,Resource01,2011-12-21 10:20:20.213000+01:00 +Internet,case-10600,2012-01-19 00:00:00+01:00,General,2012-01-12 14:34:01.420000+01:00,2012-01-19 00:00:00.010000+01:00,Group 8,Resource11,2011-11-24 01:06:40.010000+01:00,task-50412,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-12-21 10:46:42.284000+01:00 +Internet,case-10600,2012-01-19 00:00:00+01:00,General,2012-01-12 14:34:01.420000+01:00,2012-01-19 00:00:00.010000+01:00,Group 8,Resource11,2011-11-24 01:06:40.010000+01:00,task-50436,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-12-21 10:47:24.332000+01:00 +Internet,case-10600,2012-01-19 00:00:00+01:00,General,2012-01-12 14:34:01.420000+01:00,2012-01-19 00:00:00.010000+01:00,Group 8,Resource11,2011-11-24 01:06:40.010000+01:00,task-50438,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-12-21 10:48:11.870000+01:00 +Internet,case-10600,2012-01-19 00:00:00+01:00,General,2012-01-12 14:34:01.420000+01:00,2012-01-19 00:00:00.010000+01:00,Group 8,Resource11,2011-11-24 01:06:40.010000+01:00,task-50413,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-12-21 10:48:36.883000+01:00 +Internet,case-10600,2012-01-19 00:00:00+01:00,General,2012-01-12 14:34:01.420000+01:00,2012-01-19 00:00:00.010000+01:00,Group 8,Resource11,2011-11-24 01:06:40.010000+01:00,task-50439,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-12-21 10:50:36.805000+01:00 +Internet,case-10621,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource14,2011-11-28 01:06:40.010000+01:00,task-48247,Confirmation of receipt,complete,EMPTY,Resource21,2012-01-20 13:02:41.692000+01:00 +Internet,case-10621,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource14,2011-11-28 01:06:40.010000+01:00,task-53320,T02 Check confirmation of receipt,complete,Group 4,Resource21,2012-01-20 13:03:22.343000+01:00 +Internet,case-10621,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource14,2011-11-28 01:06:40.010000+01:00,task-53322,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2012-01-20 13:04:42.498000+01:00 +Internet,case-10621,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource14,2011-11-28 01:06:40.010000+01:00,task-53323,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2012-01-20 13:05:14.580000+01:00 +Internet,case-10621,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource14,2011-11-28 01:06:40.010000+01:00,task-53321,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2012-01-20 13:05:47.919000+01:00 +Internet,case-10621,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource14,2011-11-28 01:06:40.010000+01:00,task-53324,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2012-01-20 13:06:25.475000+01:00 +Internet,case-10623,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-28 01:06:40.010000+01:00,task-48349,Confirmation of receipt,complete,EMPTY,Resource06,2011-12-02 09:10:04.876000+01:00 +Internet,case-10623,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-28 01:06:40.010000+01:00,task-48834,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-12-02 09:53:30.525000+01:00 +Internet,case-10623,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-28 01:06:40.010000+01:00,task-48839,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-12-02 09:54:36.749000+01:00 +Internet,case-10623,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-28 01:06:40.010000+01:00,task-48840,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-12-02 09:55:02.061000+01:00 +Internet,case-10623,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-28 01:06:40.010000+01:00,task-48835,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-12-02 09:58:38.507000+01:00 +Internet,case-10623,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-11-28 01:06:40.010000+01:00,task-48841,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-12-02 09:59:01.611000+01:00 +Internet,case-10624,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource04,2011-11-28 01:06:40.010000+01:00,task-48467,Confirmation of receipt,complete,EMPTY,Resource04,2011-12-01 10:44:22.790000+01:00 +Internet,case-10624,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource04,2011-11-28 01:06:40.010000+01:00,task-48764,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-12-01 10:45:28.019000+01:00 +Internet,case-10624,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource04,2011-11-28 01:06:40.010000+01:00,task-48766,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-12-01 10:45:46.710000+01:00 +Internet,case-10624,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource04,2011-11-28 01:06:40.010000+01:00,task-48767,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-12-01 10:46:04.524000+01:00 +Internet,case-10624,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource04,2011-11-28 01:06:40.010000+01:00,task-48765,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-12-01 12:52:52.161000+01:00 +Internet,case-10624,2012-01-23 00:00:00+01:00,General,,2012-01-23 00:00:00.010000+01:00,Group 5,Resource04,2011-11-28 01:06:40.010000+01:00,task-48782,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-12-01 12:53:18.284000+01:00 +Internet,case-10626,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-48507,Confirmation of receipt,complete,EMPTY,Resource02,2012-01-16 10:05:19.539000+01:00 +Internet,case-10626,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-52413,T02 Check confirmation of receipt,complete,Group 4,Resource02,2012-01-16 10:27:20.523000+01:00 +Internet,case-10626,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-52436,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2012-01-16 10:35:25.190000+01:00 +Internet,case-10626,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-52437,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2012-01-16 10:37:59.698000+01:00 +Internet,case-10626,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-52414,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2012-01-16 10:39:51.238000+01:00 +Internet,case-10626,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource02,2011-11-15 01:06:40.010000+01:00,task-52438,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2012-01-16 10:50:04.279000+01:00 +Internet,case-10636,2012-01-12 00:00:00+01:00,General,2012-01-19 15:07:29.638000+01:00,2012-01-12 00:00:00.010000+01:00,Group 2,Resource21,2011-11-28 01:06:40.010000+01:00,task-48544,Confirmation of receipt,complete,EMPTY,Resource21,2012-01-18 10:04:47.448000+01:00 +Internet,case-10636,2012-01-12 00:00:00+01:00,General,2012-01-19 15:07:29.638000+01:00,2012-01-12 00:00:00.010000+01:00,Group 2,Resource21,2011-11-28 01:06:40.010000+01:00,task-53056,T02 Check confirmation of receipt,complete,Group 4,Resource21,2012-01-18 10:05:30.029000+01:00 +Internet,case-10636,2012-01-12 00:00:00+01:00,General,2012-01-19 15:07:29.638000+01:00,2012-01-12 00:00:00.010000+01:00,Group 2,Resource21,2011-11-28 01:06:40.010000+01:00,task-53058,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2012-01-18 10:06:07.388000+01:00 +Internet,case-10636,2012-01-12 00:00:00+01:00,General,2012-01-19 15:07:29.638000+01:00,2012-01-12 00:00:00.010000+01:00,Group 2,Resource21,2011-11-28 01:06:40.010000+01:00,task-53059,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2012-01-18 10:06:51.311000+01:00 +Internet,case-10636,2012-01-12 00:00:00+01:00,General,2012-01-19 15:07:29.638000+01:00,2012-01-12 00:00:00.010000+01:00,Group 2,Resource21,2011-11-28 01:06:40.010000+01:00,task-53057,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2012-01-18 10:07:26.118000+01:00 +Internet,case-10636,2012-01-12 00:00:00+01:00,General,2012-01-19 15:07:29.638000+01:00,2012-01-12 00:00:00.010000+01:00,Group 2,Resource21,2011-11-28 01:06:40.010000+01:00,task-53060,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2012-01-18 10:08:01.844000+01:00 +Internet,case-10646,2012-01-24 01:06:40+01:00,General,2011-12-09 15:47:19.142000+01:00,2012-01-24 01:06:40.010000+01:00,Group 5,Resource06,2011-11-29 01:06:40.010000+01:00,task-48826,Confirmation of receipt,complete,EMPTY,Resource06,2011-12-02 15:07:18.216000+01:00 +Internet,case-10646,2012-01-24 01:06:40+01:00,General,2011-12-09 15:47:19.142000+01:00,2012-01-24 01:06:40.010000+01:00,Group 5,Resource06,2011-11-29 01:06:40.010000+01:00,task-48887,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-12-02 15:07:47.141000+01:00 +Internet,case-10646,2012-01-24 01:06:40+01:00,General,2011-12-09 15:47:19.142000+01:00,2012-01-24 01:06:40.010000+01:00,Group 5,Resource06,2011-11-29 01:06:40.010000+01:00,task-48889,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-12-02 15:08:06.030000+01:00 +Internet,case-10646,2012-01-24 01:06:40+01:00,General,2011-12-09 15:47:19.142000+01:00,2012-01-24 01:06:40.010000+01:00,Group 5,Resource06,2011-11-29 01:06:40.010000+01:00,task-48890,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-12-02 15:08:24.428000+01:00 +Internet,case-10646,2012-01-24 01:06:40+01:00,General,2011-12-09 15:47:19.142000+01:00,2012-01-24 01:06:40.010000+01:00,Group 5,Resource06,2011-11-29 01:06:40.010000+01:00,task-48888,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-12-02 15:08:56.053000+01:00 +Internet,case-10646,2012-01-24 01:06:40+01:00,General,2011-12-09 15:47:19.142000+01:00,2012-01-24 01:06:40.010000+01:00,Group 5,Resource06,2011-11-29 01:06:40.010000+01:00,task-48891,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-12-02 15:09:23.531000+01:00 +Internet,case-10647,2012-01-24 00:00:00+01:00,General,2012-01-17 11:03:50.415000+01:00,2012-01-24 00:00:00.010000+01:00,Group 8,Resource11,2011-11-29 01:06:40.010000+01:00,task-48804,Confirmation of receipt,complete,EMPTY,Resource03,2011-12-06 15:01:49.228000+01:00 +Internet,case-10647,2012-01-24 00:00:00+01:00,General,2012-01-17 11:03:50.415000+01:00,2012-01-24 00:00:00.010000+01:00,Group 8,Resource11,2011-11-29 01:06:40.010000+01:00,task-49180,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-12-06 15:02:24.505000+01:00 +Internet,case-10647,2012-01-24 00:00:00+01:00,General,2012-01-17 11:03:50.415000+01:00,2012-01-24 00:00:00.010000+01:00,Group 8,Resource11,2011-11-29 01:06:40.010000+01:00,task-49182,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-12-06 15:02:41.153000+01:00 +Internet,case-10647,2012-01-24 00:00:00+01:00,General,2012-01-17 11:03:50.415000+01:00,2012-01-24 00:00:00.010000+01:00,Group 8,Resource11,2011-11-29 01:06:40.010000+01:00,task-49183,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-12-06 15:02:57.205000+01:00 +Internet,case-10647,2012-01-24 00:00:00+01:00,General,2012-01-17 11:03:50.415000+01:00,2012-01-24 00:00:00.010000+01:00,Group 8,Resource11,2011-11-29 01:06:40.010000+01:00,task-49181,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-12-06 15:03:19.558000+01:00 +Internet,case-10647,2012-01-24 00:00:00+01:00,General,2012-01-17 11:03:50.415000+01:00,2012-01-24 00:00:00.010000+01:00,Group 8,Resource11,2011-11-29 01:06:40.010000+01:00,task-49184,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-12-06 15:04:39.219000+01:00 +Internet,case-10660,2012-02-16 08:48:01.064000+01:00,Customer contact,2011-12-01 00:00:00.010000+01:00,2012-02-16 08:48:01.064000+01:00,,admin3,2011-11-30 08:48:01.064000+01:00,task-48833,Confirmation of receipt,complete,Group 1,admin2,2011-12-02 08:29:50.103000+01:00 +Internet,case-10661,2012-01-25 00:00:00+01:00,General,2012-01-20 16:08:56.917000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource06,2011-11-30 01:06:40.010000+01:00,task-48838,Confirmation of receipt,complete,EMPTY,Resource06,2011-12-13 13:04:48.724000+01:00 +Internet,case-10661,2012-01-25 00:00:00+01:00,General,2012-01-20 16:08:56.917000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource06,2011-11-30 01:06:40.010000+01:00,task-49770,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-12-13 13:06:38.157000+01:00 +Internet,case-10661,2012-01-25 00:00:00+01:00,General,2012-01-20 16:08:56.917000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource06,2011-11-30 01:06:40.010000+01:00,task-49771,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-12-13 13:54:01.182000+01:00 +Internet,case-10661,2012-01-25 00:00:00+01:00,General,2012-01-20 16:08:56.917000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource06,2011-11-30 01:06:40.010000+01:00,task-49787,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-12-13 13:54:35.391000+01:00 +Internet,case-10661,2012-01-25 00:00:00+01:00,General,2012-01-20 16:08:56.917000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource06,2011-11-30 01:06:40.010000+01:00,task-49772,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-12-13 13:55:18.189000+01:00 +Internet,case-10661,2012-01-25 00:00:00+01:00,General,2012-01-20 16:08:56.917000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource06,2011-11-30 01:06:40.010000+01:00,task-49789,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-12-13 13:59:02.065000+01:00 +Desk,case-10662,2012-01-20 01:06:40+01:00,General,2011-12-09 16:10:54.408000+01:00,2012-01-20 01:06:40.010000+01:00,Group 5,Resource06,2011-11-25 01:06:40.010000+01:00,task-48537,Confirmation of receipt,complete,EMPTY,Resource06,2011-11-30 16:04:11.166000+01:00 +Desk,case-10662,2012-01-20 01:06:40+01:00,General,2011-12-09 16:10:54.408000+01:00,2012-01-20 01:06:40.010000+01:00,Group 5,Resource06,2011-11-25 01:06:40.010000+01:00,task-48682,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-11-30 16:04:34.445000+01:00 +Desk,case-10662,2012-01-20 01:06:40+01:00,General,2011-12-09 16:10:54.408000+01:00,2012-01-20 01:06:40.010000+01:00,Group 5,Resource06,2011-11-25 01:06:40.010000+01:00,task-48684,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-30 16:05:16.298000+01:00 +Desk,case-10662,2012-01-20 01:06:40+01:00,General,2011-12-09 16:10:54.408000+01:00,2012-01-20 01:06:40.010000+01:00,Group 5,Resource06,2011-11-25 01:06:40.010000+01:00,task-48686,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-30 16:05:37.734000+01:00 +Desk,case-10662,2012-01-20 01:06:40+01:00,General,2011-12-09 16:10:54.408000+01:00,2012-01-20 01:06:40.010000+01:00,Group 5,Resource06,2011-11-25 01:06:40.010000+01:00,task-48683,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-11-30 16:06:12.022000+01:00 +Desk,case-10662,2012-01-20 01:06:40+01:00,General,2011-12-09 16:10:54.408000+01:00,2012-01-20 01:06:40.010000+01:00,Group 5,Resource06,2011-11-25 01:06:40.010000+01:00,task-48689,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-11-30 16:06:44.087000+01:00 +Internet,case-10663,2012-01-25 00:00:00+01:00,General,2012-01-18 15:38:08.002000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource04,2011-11-30 01:06:40.010000+01:00,task-48953,Confirmation of receipt,complete,EMPTY,Resource04,2011-12-09 12:49:19.454000+01:00 +Internet,case-10663,2012-01-25 00:00:00+01:00,General,2012-01-18 15:38:08.002000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource04,2011-11-30 01:06:40.010000+01:00,task-49557,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-12-09 12:49:50.916000+01:00 +Internet,case-10663,2012-01-25 00:00:00+01:00,General,2012-01-18 15:38:08.002000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource04,2011-11-30 01:06:40.010000+01:00,task-49559,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-12-09 12:50:16.571000+01:00 +Internet,case-10663,2012-01-25 00:00:00+01:00,General,2012-01-18 15:38:08.002000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource04,2011-11-30 01:06:40.010000+01:00,task-49560,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-12-09 12:50:39.797000+01:00 +Internet,case-10663,2012-01-25 00:00:00+01:00,General,2012-01-18 15:38:08.002000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource04,2011-11-30 01:06:40.010000+01:00,task-49558,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-12-09 12:50:59.806000+01:00 +Internet,case-10663,2012-01-25 00:00:00+01:00,General,2012-01-18 15:38:08.002000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource04,2011-11-30 01:06:40.010000+01:00,task-49561,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-12-09 12:51:22.060000+01:00 +Internet,case-10669,2012-01-25 00:00:00+01:00,General,2012-01-05 14:04:24.457000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-48987,Confirmation of receipt,complete,EMPTY,Resource03,2011-12-06 16:11:54.463000+01:00 +Internet,case-10669,2012-01-25 00:00:00+01:00,General,2012-01-05 14:04:24.457000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-49208,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-12-06 16:12:17.249000+01:00 +Internet,case-10669,2012-01-25 00:00:00+01:00,General,2012-01-05 14:04:24.457000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-49210,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-12-06 16:12:35.482000+01:00 +Internet,case-10669,2012-01-25 00:00:00+01:00,General,2012-01-05 14:04:24.457000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-49211,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-12-06 16:12:50.221000+01:00 +Internet,case-10669,2012-01-25 00:00:00+01:00,General,2012-01-05 14:04:24.457000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-49209,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-12-06 16:13:06.971000+01:00 +Internet,case-10669,2012-01-25 00:00:00+01:00,General,2012-01-05 14:04:24.457000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-49213,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-12-06 16:13:33.793000+01:00 +Internet,case-10670,2012-01-25 00:00:00+01:00,General,2012-01-05 14:43:14.280000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-48989,Confirmation of receipt,complete,EMPTY,Resource03,2011-12-07 14:45:21.482000+01:00 +Internet,case-10670,2012-01-25 00:00:00+01:00,General,2012-01-05 14:43:14.280000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-49366,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-12-07 14:46:27.071000+01:00 +Internet,case-10670,2012-01-25 00:00:00+01:00,General,2012-01-05 14:43:14.280000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-49368,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-12-07 14:46:44.803000+01:00 +Internet,case-10670,2012-01-25 00:00:00+01:00,General,2012-01-05 14:43:14.280000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-49369,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-12-07 14:47:02.003000+01:00 +Internet,case-10670,2012-01-25 00:00:00+01:00,General,2012-01-05 14:43:14.280000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-49367,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-12-07 14:47:22.169000+01:00 +Internet,case-10670,2012-01-25 00:00:00+01:00,General,2012-01-05 14:43:14.280000+01:00,2012-01-25 00:00:00.010000+01:00,Group 8,Resource11,2011-11-30 01:06:40.010000+01:00,task-49370,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-12-07 14:47:44.738000+01:00 +Internet,case-10671,2012-01-25 00:00:00+01:00,General,2012-01-20 15:53:31.556000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource05,2011-11-30 01:06:40.010000+01:00,task-48999,Confirmation of receipt,complete,EMPTY,Resource05,2011-12-15 12:17:50.970000+01:00 +Internet,case-10671,2012-01-25 00:00:00+01:00,General,2012-01-20 15:53:31.556000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource05,2011-11-30 01:06:40.010000+01:00,task-49983,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-12-15 12:18:31.532000+01:00 +Internet,case-10671,2012-01-25 00:00:00+01:00,General,2012-01-20 15:53:31.556000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource05,2011-11-30 01:06:40.010000+01:00,task-49985,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-12-15 12:18:57.325000+01:00 +Internet,case-10671,2012-01-25 00:00:00+01:00,General,2012-01-20 15:53:31.556000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource05,2011-11-30 01:06:40.010000+01:00,task-49986,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-12-15 12:20:03.012000+01:00 +Internet,case-10671,2012-01-25 00:00:00+01:00,General,2012-01-20 15:53:31.556000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource05,2011-11-30 01:06:40.010000+01:00,task-49984,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-12-15 12:21:06.553000+01:00 +Internet,case-10671,2012-01-25 00:00:00+01:00,General,2012-01-20 15:53:31.556000+01:00,2012-01-25 00:00:00.010000+01:00,Group 5,Resource05,2011-11-30 01:06:40.010000+01:00,task-49988,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-12-15 12:21:41.425000+01:00 +Internet,case-10675,2012-01-25 00:00:00+01:00,General,,2012-01-25 00:00:00.010000+01:00,Group 5,Resource09,2011-11-30 01:06:40.010000+01:00,task-49000,Confirmation of receipt,complete,EMPTY,Resource09,2011-12-23 14:36:26.442000+01:00 +Internet,case-10675,2012-01-25 00:00:00+01:00,General,,2012-01-25 00:00:00.010000+01:00,Group 5,Resource09,2011-11-30 01:06:40.010000+01:00,task-50760,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-23 14:38:23.853000+01:00 +Internet,case-10675,2012-01-25 00:00:00+01:00,General,,2012-01-25 00:00:00.010000+01:00,Group 5,Resource09,2011-11-30 01:06:40.010000+01:00,task-50761,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-23 14:39:08.074000+01:00 +Internet,case-10688,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 5,Resource04,2011-12-01 01:06:40.010000+01:00,task-49018,Confirmation of receipt,complete,EMPTY,Resource04,2011-12-09 16:37:36.011000+01:00 +Internet,case-10688,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 5,Resource04,2011-12-01 01:06:40.010000+01:00,task-49622,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-12-09 16:37:57.329000+01:00 +Internet,case-10688,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 5,Resource04,2011-12-01 01:06:40.010000+01:00,task-49624,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-12-09 16:38:15.458000+01:00 +Internet,case-10688,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 5,Resource04,2011-12-01 01:06:40.010000+01:00,task-49625,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-12-09 16:38:31.683000+01:00 +Internet,case-10688,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 5,Resource04,2011-12-01 01:06:40.010000+01:00,task-49623,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-12-22 11:10:39.999000+01:00 +Internet,case-10688,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 5,Resource04,2011-12-01 01:06:40.010000+01:00,task-50601,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-12-22 11:11:38.505000+01:00 +e-mail,case-10693,2011-12-24 01:06:40+01:00,General,2011-12-06 14:41:38.980000+01:00,2011-12-24 01:06:40.010000+01:00,Group 2,Resource03,2011-10-29 01:06:40.020000+02:00,task-48816,Confirmation of receipt,complete,EMPTY,Resource03,2011-12-06 14:40:10.889000+01:00 +e-mail,case-10693,2011-12-24 01:06:40+01:00,General,2011-12-06 14:41:38.980000+01:00,2011-12-24 01:06:40.010000+01:00,Group 2,Resource03,2011-10-29 01:06:40.020000+02:00,task-49164,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-12-06 14:40:35.378000+01:00 +e-mail,case-10693,2011-12-24 01:06:40+01:00,General,2011-12-06 14:41:38.980000+01:00,2011-12-24 01:06:40.010000+01:00,Group 2,Resource03,2011-10-29 01:06:40.020000+02:00,task-49166,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-12-06 14:40:51.708000+01:00 +e-mail,case-10693,2011-12-24 01:06:40+01:00,General,2011-12-06 14:41:38.980000+01:00,2011-12-24 01:06:40.010000+01:00,Group 2,Resource03,2011-10-29 01:06:40.020000+02:00,task-49167,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-12-06 14:41:07.822000+01:00 +e-mail,case-10693,2011-12-24 01:06:40+01:00,General,2011-12-06 14:41:38.980000+01:00,2011-12-24 01:06:40.010000+01:00,Group 2,Resource03,2011-10-29 01:06:40.020000+02:00,task-49165,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-12-06 14:41:40.040000+01:00 +Internet,case-10709,2012-01-27 00:00:00+01:00,General,,2012-01-27 00:00:00.010000+01:00,Group 5,Resource09,2011-12-02 01:06:40.010000+01:00,task-49007,Confirmation of receipt,complete,EMPTY,Resource09,2012-01-10 13:14:31.452000+01:00 +Internet,case-10709,2012-01-27 00:00:00+01:00,General,,2012-01-27 00:00:00.010000+01:00,Group 5,Resource09,2011-12-02 01:06:40.010000+01:00,task-51735,T02 Check confirmation of receipt,complete,Group 4,Resource09,2012-01-10 13:15:26.688000+01:00 +Internet,case-10709,2012-01-27 00:00:00+01:00,General,,2012-01-27 00:00:00.010000+01:00,Group 5,Resource09,2011-12-02 01:06:40.010000+01:00,task-51736,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2012-01-10 13:47:41.697000+01:00 +Internet,case-10709,2012-01-27 00:00:00+01:00,General,,2012-01-27 00:00:00.010000+01:00,Group 5,Resource09,2011-12-02 01:06:40.010000+01:00,task-51762,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2012-01-10 14:09:25.832000+01:00 +Internet,case-10709,2012-01-27 00:00:00+01:00,General,,2012-01-27 00:00:00.010000+01:00,Group 5,Resource09,2011-12-02 01:06:40.010000+01:00,task-51737,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2012-01-10 14:11:40.999000+01:00 +Internet,case-10709,2012-01-27 00:00:00+01:00,General,,2012-01-27 00:00:00.010000+01:00,Group 5,Resource09,2011-12-02 01:06:40.010000+01:00,task-51776,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2012-01-10 14:12:14.059000+01:00 +Internet,case-10735,2012-01-30 00:00:00+01:00,General,2012-01-05 14:51:53.398000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49022,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-07 11:27:27.810000+01:00 +Internet,case-10735,2012-01-30 00:00:00+01:00,General,2012-01-05 14:51:53.398000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49311,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-07 11:27:59.544000+01:00 +Internet,case-10735,2012-01-30 00:00:00+01:00,General,2012-01-05 14:51:53.398000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49313,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-07 11:28:27.297000+01:00 +Internet,case-10735,2012-01-30 00:00:00+01:00,General,2012-01-05 14:51:53.398000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49314,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-07 11:29:01.432000+01:00 +Internet,case-10735,2012-01-30 00:00:00+01:00,General,2012-01-05 14:51:53.398000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49312,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-07 11:29:25.305000+01:00 +Internet,case-10735,2012-01-30 00:00:00+01:00,General,2012-01-05 14:51:53.398000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49315,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-07 11:30:00.766000+01:00 +Internet,case-10749,2012-01-30 00:00:00+01:00,General,2012-01-17 11:40:15.756000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49076,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-06 13:30:29.664000+01:00 +Internet,case-10749,2012-01-30 00:00:00+01:00,General,2012-01-17 11:40:15.756000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49129,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-06 13:37:47.452000+01:00 +Internet,case-10749,2012-01-30 00:00:00+01:00,General,2012-01-17 11:40:15.756000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49132,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-06 13:38:09.733000+01:00 +Internet,case-10749,2012-01-30 00:00:00+01:00,General,2012-01-17 11:40:15.756000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49133,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-06 13:38:30.187000+01:00 +Internet,case-10749,2012-01-30 00:00:00+01:00,General,2012-01-17 11:40:15.756000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49130,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-06 13:38:57.461000+01:00 +Internet,case-10749,2012-01-30 00:00:00+01:00,General,2012-01-17 11:40:15.756000+01:00,2012-01-30 00:00:00.010000+01:00,Group 8,Resource11,2011-12-05 01:06:40.010000+01:00,task-49135,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-06 13:39:25.089000+01:00 +Internet,case-10757,2012-01-31 00:00:00+01:00,General,2012-01-17 15:05:03.138000+01:00,2012-01-31 00:00:00.010000+01:00,Group 5,Resource06,2011-12-06 01:06:40.010000+01:00,task-49100,Confirmation of receipt,complete,EMPTY,Resource06,2011-12-13 12:09:28.917000+01:00 +Internet,case-10757,2012-01-31 00:00:00+01:00,General,2012-01-17 15:05:03.138000+01:00,2012-01-31 00:00:00.010000+01:00,Group 5,Resource06,2011-12-06 01:06:40.010000+01:00,task-49762,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-12-13 15:18:51.703000+01:00 +Internet,case-10757,2012-01-31 00:00:00+01:00,General,2012-01-17 15:05:03.138000+01:00,2012-01-31 00:00:00.010000+01:00,Group 5,Resource06,2011-12-06 01:06:40.010000+01:00,task-49805,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-12-13 15:19:42.246000+01:00 +Internet,case-10757,2012-01-31 00:00:00+01:00,General,2012-01-17 15:05:03.138000+01:00,2012-01-31 00:00:00.010000+01:00,Group 5,Resource06,2011-12-06 01:06:40.010000+01:00,task-49806,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-12-13 15:20:26.891000+01:00 +Internet,case-10757,2012-01-31 00:00:00+01:00,General,2012-01-17 15:05:03.138000+01:00,2012-01-31 00:00:00.010000+01:00,Group 5,Resource06,2011-12-06 01:06:40.010000+01:00,task-49763,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-12-13 15:28:47.163000+01:00 +Internet,case-10757,2012-01-31 00:00:00+01:00,General,2012-01-17 15:05:03.138000+01:00,2012-01-31 00:00:00.010000+01:00,Group 5,Resource06,2011-12-06 01:06:40.010000+01:00,task-49812,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-12-13 15:29:29.822000+01:00 +Internet,case-10763,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 7,Resource35,2011-12-05 00:00:00.010000+01:00,task-49158,Confirmation of receipt,complete,EMPTY,Resource35,2011-12-17 16:16:49.296000+01:00 +Internet,case-10763,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 7,Resource35,2011-12-05 00:00:00.010000+01:00,task-50087,T02 Check confirmation of receipt,complete,Group 4,Resource35,2011-12-17 16:17:26.955000+01:00 +Internet,case-10763,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 7,Resource35,2011-12-05 00:00:00.010000+01:00,task-50089,T04 Determine confirmation of receipt,complete,Group 3,Resource35,2011-12-17 16:17:56.913000+01:00 +Internet,case-10763,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 7,Resource35,2011-12-05 00:00:00.010000+01:00,task-50088,T06 Determine necessity of stop advice,complete,Group 1,Resource35,2011-12-17 16:18:30.884000+01:00 +Internet,case-10763,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 7,Resource35,2011-12-05 00:00:00.010000+01:00,task-50091,T10 Determine necessity to stop indication,complete,Group 1,Resource35,2011-12-17 16:19:13.622000+01:00 +Internet,case-10763,2012-01-30 00:00:00+01:00,General,,2012-01-30 00:00:00.010000+01:00,Group 7,Resource35,2011-12-05 00:00:00.010000+01:00,task-50090,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-12-19 11:34:23.055000+01:00 +Internet,case-10765,2012-01-31 01:06:40+01:00,General,,2012-01-31 01:06:40.010000+01:00,Group 5,Resource23,2011-12-06 01:06:40.010000+01:00,task-49206,Confirmation of receipt,complete,EMPTY,Resource23,2011-12-12 14:30:43.309000+01:00 +Internet,case-10765,2012-01-31 01:06:40+01:00,General,,2012-01-31 01:06:40.010000+01:00,Group 5,Resource23,2011-12-06 01:06:40.010000+01:00,task-49672,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-12-12 14:32:01.716000+01:00 +Internet,case-10765,2012-01-31 01:06:40+01:00,General,,2012-01-31 01:06:40.010000+01:00,Group 5,Resource23,2011-12-06 01:06:40.010000+01:00,task-49674,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-12-12 14:32:40.534000+01:00 +Internet,case-10765,2012-01-31 01:06:40+01:00,General,,2012-01-31 01:06:40.010000+01:00,Group 5,Resource23,2011-12-06 01:06:40.010000+01:00,task-49675,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-12-12 14:33:38.186000+01:00 +Internet,case-10777,2012-02-01 00:00:00+01:00,General,2012-01-05 15:00:31.243000+01:00,2012-02-01 00:00:00.010000+01:00,Group 8,Resource11,2011-12-07 01:06:40.010000+01:00,task-49364,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-09 08:51:11.509000+01:00 +Internet,case-10777,2012-02-01 00:00:00+01:00,General,2012-01-05 15:00:31.243000+01:00,2012-02-01 00:00:00.010000+01:00,Group 8,Resource11,2011-12-07 01:06:40.010000+01:00,task-49525,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-09 08:51:52.760000+01:00 +Internet,case-10777,2012-02-01 00:00:00+01:00,General,2012-01-05 15:00:31.243000+01:00,2012-02-01 00:00:00.010000+01:00,Group 8,Resource11,2011-12-07 01:06:40.010000+01:00,task-49527,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-09 08:52:21.123000+01:00 +Internet,case-10777,2012-02-01 00:00:00+01:00,General,2012-01-05 15:00:31.243000+01:00,2012-02-01 00:00:00.010000+01:00,Group 8,Resource11,2011-12-07 01:06:40.010000+01:00,task-49528,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-09 08:52:41.023000+01:00 +Internet,case-10777,2012-02-01 00:00:00+01:00,General,2012-01-05 15:00:31.243000+01:00,2012-02-01 00:00:00.010000+01:00,Group 8,Resource11,2011-12-07 01:06:40.010000+01:00,task-49526,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-09 08:53:04.728000+01:00 +Internet,case-10777,2012-02-01 00:00:00+01:00,General,2012-01-05 15:00:31.243000+01:00,2012-02-01 00:00:00.010000+01:00,Group 8,Resource11,2011-12-07 01:06:40.010000+01:00,task-49529,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-09 08:53:29.259000+01:00 +Internet,case-10779,2011-12-26 00:00:00+01:00,General,,2011-12-26 00:00:00.010000+01:00,Group 5,Resource09,2011-10-31 01:06:40.010000+01:00,task-49365,Confirmation of receipt,complete,Group 1,Resource09,2011-12-07 15:52:49.492000+01:00 +Internet,case-10779,2011-12-26 00:00:00+01:00,General,,2011-12-26 00:00:00.010000+01:00,Group 5,Resource09,2011-10-31 01:06:40.010000+01:00,task-49404,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-12-07 15:56:56.564000+01:00 +Internet,case-10779,2011-12-26 00:00:00+01:00,General,,2011-12-26 00:00:00.010000+01:00,Group 5,Resource09,2011-10-31 01:06:40.010000+01:00,task-49403,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-12-07 15:58:29.727000+01:00 +Internet,case-10779,2011-12-26 00:00:00+01:00,General,,2011-12-26 00:00:00.010000+01:00,Group 5,Resource09,2011-10-31 01:06:40.010000+01:00,task-49405,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-12-07 15:59:40.804000+01:00 +Internet,case-10779,2011-12-26 00:00:00+01:00,General,,2011-12-26 00:00:00.010000+01:00,Group 5,Resource09,2011-10-31 01:06:40.010000+01:00,task-49406,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-12-07 16:00:17.096000+01:00 +Internet,case-10779,2011-12-26 00:00:00+01:00,General,,2011-12-26 00:00:00.010000+01:00,Group 5,Resource09,2011-10-31 01:06:40.010000+01:00,task-49408,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-12-07 16:00:46.464000+01:00 +Internet,case-10788,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource14,2011-12-08 01:06:40.010000+01:00,task-49448,Confirmation of receipt,complete,Group 1,Resource14,2012-01-12 15:13:12.379000+01:00 +Internet,case-10788,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource14,2011-12-08 01:06:40.010000+01:00,task-52177,T02 Check confirmation of receipt,complete,Group 4,Resource14,2012-01-12 15:13:56.588000+01:00 +Internet,case-10788,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource14,2011-12-08 01:06:40.010000+01:00,task-52179,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2012-01-12 15:14:33.885000+01:00 +Internet,case-10788,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource14,2011-12-08 01:06:40.010000+01:00,task-52180,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2012-01-12 15:16:01.964000+01:00 +Internet,case-10788,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource14,2011-12-08 01:06:40.010000+01:00,task-52178,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2012-01-12 15:17:05.134000+01:00 +Internet,case-10788,2012-02-02 00:00:00+01:00,General,,2012-02-02 00:00:00.010000+01:00,Group 5,Resource14,2011-12-08 01:06:40.010000+01:00,task-52181,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2012-01-12 15:18:11.016000+01:00 +Internet,case-10799,2012-02-02 00:00:00+01:00,General,2012-01-05 15:13:32.700000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-49657,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-21 12:35:49.971000+01:00 +Internet,case-10799,2012-02-02 00:00:00+01:00,General,2012-01-05 15:13:32.700000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-50488,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-21 12:36:33.658000+01:00 +Internet,case-10799,2012-02-02 00:00:00+01:00,General,2012-01-05 15:13:32.700000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-50490,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-21 13:11:54.559000+01:00 +Internet,case-10799,2012-02-02 00:00:00+01:00,General,2012-01-05 15:13:32.700000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-50493,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-21 13:15:09.991000+01:00 +Internet,case-10799,2012-02-02 00:00:00+01:00,General,2012-01-05 15:13:32.700000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-50489,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-21 13:15:40.720000+01:00 +Internet,case-10799,2012-02-02 00:00:00+01:00,General,2012-01-05 15:13:32.700000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-50495,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-21 13:22:30.403000+01:00 +Internet,case-10800,2012-02-02 00:00:00+01:00,General,2012-01-10 14:25:59.612000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-49661,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-21 14:23:48.367000+01:00 +Internet,case-10800,2012-02-02 00:00:00+01:00,General,2012-01-10 14:25:59.612000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-50521,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-21 14:24:27.676000+01:00 +Internet,case-10800,2012-02-02 00:00:00+01:00,General,2012-01-10 14:25:59.612000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-50523,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-21 14:24:58.629000+01:00 +Internet,case-10800,2012-02-02 00:00:00+01:00,General,2012-01-10 14:25:59.612000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-50524,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-21 14:25:24.973000+01:00 +Internet,case-10800,2012-02-02 00:00:00+01:00,General,2012-01-10 14:25:59.612000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-50522,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-21 14:25:50.026000+01:00 +Internet,case-10800,2012-02-02 00:00:00+01:00,General,2012-01-10 14:25:59.612000+01:00,2012-02-02 00:00:00.010000+01:00,Group 8,Resource11,2011-12-08 01:06:40.010000+01:00,task-50525,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-21 14:26:26.932000+01:00 +Internet,case-10810,2012-02-03 00:00:00+01:00,General,2012-01-17 15:16:21.542000+01:00,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-12-09 01:06:40.010000+01:00,task-49664,Confirmation of receipt,complete,EMPTY,Resource06,2012-01-12 15:56:12.766000+01:00 +Internet,case-10810,2012-02-03 00:00:00+01:00,General,2012-01-17 15:16:21.542000+01:00,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-12-09 01:06:40.010000+01:00,task-52201,T02 Check confirmation of receipt,complete,Group 4,Resource06,2012-01-12 16:07:45.635000+01:00 +Internet,case-10810,2012-02-03 00:00:00+01:00,General,2012-01-17 15:16:21.542000+01:00,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-12-09 01:06:40.010000+01:00,task-52217,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2012-01-12 16:08:24.037000+01:00 +Internet,case-10810,2012-02-03 00:00:00+01:00,General,2012-01-17 15:16:21.542000+01:00,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-12-09 01:06:40.010000+01:00,task-52218,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2012-01-12 16:09:31.229000+01:00 +Internet,case-10810,2012-02-03 00:00:00+01:00,General,2012-01-17 15:16:21.542000+01:00,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-12-09 01:06:40.010000+01:00,task-52202,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2012-01-12 16:10:05.481000+01:00 +Internet,case-10810,2012-02-03 00:00:00+01:00,General,2012-01-17 15:16:21.542000+01:00,2012-02-03 00:00:00.010000+01:00,Group 5,Resource06,2011-12-09 01:06:40.010000+01:00,task-52219,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2012-01-12 16:11:11.427000+01:00 +Internet,case-10814,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource12,2011-12-09 01:06:40.010000+01:00,task-49676,Confirmation of receipt,complete,EMPTY,Resource12,2011-12-28 14:19:04.153000+01:00 +Internet,case-10814,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource12,2011-12-09 01:06:40.010000+01:00,task-50875,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-12-28 14:20:33.399000+01:00 +Internet,case-10814,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource12,2011-12-09 01:06:40.010000+01:00,task-50877,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-12-28 14:21:05.710000+01:00 +Internet,case-10814,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource12,2011-12-09 01:06:40.010000+01:00,task-50876,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-12-28 14:39:32.658000+01:00 +Internet,case-10814,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource12,2011-12-09 01:06:40.010000+01:00,task-50880,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-12-28 14:45:48.231000+01:00 +Internet,case-10814,2012-02-03 00:00:00+01:00,General,,2012-02-03 00:00:00.010000+01:00,Group 5,Resource12,2011-12-09 01:06:40.010000+01:00,task-50878,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-12-30 10:01:44.557000+01:00 +Internet,case-10838,2012-02-05 00:00:00+01:00,General,,2012-02-05 00:00:00.010000+01:00,Group 5,Resource04,2011-12-11 01:06:40.010000+01:00,task-49838,Confirmation of receipt,complete,EMPTY,Resource04,2012-01-03 12:51:49.190000+01:00 +Internet,case-10838,2012-02-05 00:00:00+01:00,General,,2012-02-05 00:00:00.010000+01:00,Group 5,Resource04,2011-12-11 01:06:40.010000+01:00,task-51106,T02 Check confirmation of receipt,complete,Group 4,Resource04,2012-01-03 12:52:18.360000+01:00 +Internet,case-10838,2012-02-05 00:00:00+01:00,General,,2012-02-05 00:00:00.010000+01:00,Group 5,Resource04,2011-12-11 01:06:40.010000+01:00,task-51108,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2012-01-03 12:53:19.645000+01:00 +Internet,case-10838,2012-02-05 00:00:00+01:00,General,,2012-02-05 00:00:00.010000+01:00,Group 5,Resource04,2011-12-11 01:06:40.010000+01:00,task-51110,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2012-01-03 12:53:44.316000+01:00 +Internet,case-10838,2012-02-05 00:00:00+01:00,General,,2012-02-05 00:00:00.010000+01:00,Group 5,Resource04,2011-12-11 01:06:40.010000+01:00,task-51107,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2012-01-04 08:57:57.196000+01:00 +Internet,case-10838,2012-02-05 00:00:00+01:00,General,,2012-02-05 00:00:00.010000+01:00,Group 5,Resource04,2011-12-11 01:06:40.010000+01:00,task-51148,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2012-01-04 08:58:41.444000+01:00 +Internet,case-10853,2012-02-06 00:00:00+01:00,General,2012-01-17 15:26:34.656000+01:00,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-49898,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 16:54:34.620000+01:00 +Internet,case-10853,2012-02-06 00:00:00+01:00,General,2012-01-17 15:26:34.656000+01:00,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51530,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 16:55:03.629000+01:00 +Internet,case-10853,2012-02-06 00:00:00+01:00,General,2012-01-17 15:26:34.656000+01:00,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51532,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 16:55:29.771000+01:00 +Internet,case-10853,2012-02-06 00:00:00+01:00,General,2012-01-17 15:26:34.656000+01:00,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51533,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 16:55:55.212000+01:00 +Internet,case-10853,2012-02-06 00:00:00+01:00,General,2012-01-17 15:26:34.656000+01:00,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51531,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 09:03:39.027000+01:00 +Internet,case-10853,2012-02-06 00:00:00+01:00,General,2012-01-17 15:26:34.656000+01:00,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51588,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 09:04:19.401000+01:00 +Internet,case-10854,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-49907,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 16:57:48.131000+01:00 +Internet,case-10854,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51534,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 16:58:14.608000+01:00 +Internet,case-10854,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51536,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 16:58:37.766000+01:00 +Internet,case-10854,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51537,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 16:59:02.444000+01:00 +Internet,case-10854,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51535,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 09:10:58.906000+01:00 +Internet,case-10854,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51592,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 09:11:58.715000+01:00 +Internet,case-10855,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-49914,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 17:01:10.603000+01:00 +Internet,case-10855,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51538,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 17:01:38.601000+01:00 +Internet,case-10855,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51540,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 17:02:16.472000+01:00 +Internet,case-10855,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51541,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 17:02:44.551000+01:00 +Internet,case-10855,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51539,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 09:13:55.440000+01:00 +Internet,case-10855,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51596,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 09:14:25.478000+01:00 +Internet,case-10856,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-49938,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 17:06:05.709000+01:00 +Internet,case-10856,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51542,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 17:06:35.887000+01:00 +Internet,case-10856,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51544,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 17:07:13.824000+01:00 +Internet,case-10856,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51545,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 17:07:34.752000+01:00 +Internet,case-10856,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51543,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 09:57:11.425000+01:00 +Internet,case-10856,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51601,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 09:57:58.055000+01:00 +Internet,case-10857,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource13,2011-12-12 01:06:40.010000+01:00,task-49946,Confirmation of receipt,complete,EMPTY,Resource13,2012-01-04 19:36:09.258000+01:00 +Internet,case-10857,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource13,2011-12-12 01:06:40.010000+01:00,task-51231,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2012-01-04 19:37:33.931000+01:00 +Internet,case-10857,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource13,2011-12-12 01:06:40.010000+01:00,task-51232,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2012-01-04 19:53:52.494000+01:00 +Internet,case-10857,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource13,2011-12-12 01:06:40.010000+01:00,task-51233,T16 Report reasons to hold request,complete,Group 1,Resource13,2012-01-04 19:54:44.634000+01:00 +Internet,case-10857,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource13,2011-12-12 01:06:40.010000+01:00,task-51234,T17 Check report Y to stop indication,complete,EMPTY,Resource13,2012-01-04 19:55:41.647000+01:00 +Internet,case-10857,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource13,2011-12-12 01:06:40.010000+01:00,task-51235,T19 Determine report Y to stop indication,complete,EMPTY,Resource13,2012-01-04 19:56:18.050000+01:00 +Internet,case-10857,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource13,2011-12-12 01:06:40.010000+01:00,task-51236,T20 Print report Y to stop indication,complete,Group 2,Resource13,2012-01-04 19:56:54.192000+01:00 +Internet,case-10857,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource13,2011-12-12 01:06:40.010000+01:00,task-51230,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 08:19:19.141000+01:00 +Internet,case-10857,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource13,2011-12-12 01:06:40.010000+01:00,task-51250,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 12:47:06.479000+01:00 +Internet,case-10857,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource13,2011-12-12 01:06:40.010000+01:00,task-51359,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 12:47:44.454000+01:00 +Internet,case-10858,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-49950,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 17:09:08.572000+01:00 +Internet,case-10858,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51546,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 17:09:34.549000+01:00 +Internet,case-10858,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51548,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 17:10:02.415000+01:00 +Internet,case-10858,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51549,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 17:10:25.423000+01:00 +Internet,case-10858,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51547,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 09:59:39.010000+01:00 +Internet,case-10858,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51605,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 10:00:18.393000+01:00 +Internet,case-10861,2012-02-07 00:00:00+01:00,General,,2012-02-07 00:00:00.010000+01:00,Group 2,Resource20,2011-12-13 01:06:40.010000+01:00,task-49951,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 17:15:03.958000+01:00 +Internet,case-10861,2012-02-07 00:00:00+01:00,General,,2012-02-07 00:00:00.010000+01:00,Group 2,Resource20,2011-12-13 01:06:40.010000+01:00,task-51554,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 17:15:31.581000+01:00 +Internet,case-10861,2012-02-07 00:00:00+01:00,General,,2012-02-07 00:00:00.010000+01:00,Group 2,Resource20,2011-12-13 01:06:40.010000+01:00,task-51556,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 17:15:58.425000+01:00 +Internet,case-10861,2012-02-07 00:00:00+01:00,General,,2012-02-07 00:00:00.010000+01:00,Group 2,Resource20,2011-12-13 01:06:40.010000+01:00,task-51557,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 17:16:21.170000+01:00 +Internet,case-10861,2012-02-07 00:00:00+01:00,General,,2012-02-07 00:00:00.010000+01:00,Group 2,Resource20,2011-12-13 01:06:40.010000+01:00,task-51555,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 10:13:58.004000+01:00 +Internet,case-10861,2012-02-07 00:00:00+01:00,General,,2012-02-07 00:00:00.010000+01:00,Group 2,Resource20,2011-12-13 01:06:40.010000+01:00,task-51614,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 10:14:27.715000+01:00 +Internet,case-10862,2012-02-06 00:00:00+01:00,Customer contact,2011-12-12 00:00:00.010000+01:00,2012-02-06 00:00:00.010000+01:00,,admin3,2011-12-12 01:06:40.010000+01:00,task-49958,Confirmation of receipt,complete,EMPTY,admin2,2011-12-15 11:53:12.667000+01:00 +Internet,case-10863,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-49982,Confirmation of receipt,complete,Group 1,Resource20,2012-01-06 17:12:33.877000+01:00 +Internet,case-10863,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51550,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 17:13:03.650000+01:00 +Internet,case-10863,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51552,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 17:13:26.748000+01:00 +Internet,case-10863,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51553,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 17:13:47.123000+01:00 +Internet,case-10863,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51551,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-09 10:01:58.448000+01:00 +Internet,case-10863,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 2,Resource20,2011-12-12 01:06:40.010000+01:00,task-51609,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-09 10:02:31.647000+01:00 +Internet,case-10864,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource14,2011-12-12 01:06:40.010000+01:00,task-49987,Confirmation of receipt,complete,Group 1,Resource03,2011-12-16 12:08:04.183000+01:00 +Internet,case-10864,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource14,2011-12-12 01:06:40.010000+01:00,task-50077,T02 Check confirmation of receipt,complete,Group 4,Resource14,2012-01-12 15:42:20.138000+01:00 +Internet,case-10864,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource14,2011-12-12 01:06:40.010000+01:00,task-52190,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2012-01-12 15:46:21.518000+01:00 +Internet,case-10864,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource14,2011-12-12 01:06:40.010000+01:00,task-52191,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2012-01-12 15:47:07.049000+01:00 +Internet,case-10864,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource14,2011-12-12 01:06:40.010000+01:00,task-50078,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2012-01-12 15:47:44.589000+01:00 +Internet,case-10864,2012-02-06 00:00:00+01:00,General,,2012-02-06 00:00:00.010000+01:00,Group 5,Resource14,2011-12-12 01:06:40.010000+01:00,task-52192,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2012-01-12 15:48:18.252000+01:00 +Internet,case-10890,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource18,2011-12-13 01:06:40.010000+01:00,task-50051,Confirmation of receipt,complete,EMPTY,Resource18,2012-01-10 15:22:52.336000+01:00 +Internet,case-10890,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource18,2011-12-13 01:06:40.010000+01:00,task-51829,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2012-01-10 15:23:38.942000+01:00 +Internet,case-10890,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource18,2011-12-13 01:06:40.010000+01:00,task-51831,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2012-01-10 15:24:44.401000+01:00 +Internet,case-10890,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource18,2011-12-13 01:06:40.010000+01:00,task-51832,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2012-01-10 15:25:19.302000+01:00 +Internet,case-10890,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource18,2011-12-13 01:06:40.010000+01:00,task-51830,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2012-01-10 15:54:53.704000+01:00 +Internet,case-10890,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource18,2011-12-13 01:06:40.010000+01:00,task-51855,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2012-01-10 15:55:30.283000+01:00 +Internet,case-10892,2012-02-07 00:00:00+01:00,General,2012-01-12 14:17:12.049000+01:00,2012-02-07 00:00:00.010000+01:00,Group 8,Resource11,2011-12-13 01:06:40.010000+01:00,task-50052,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-21 08:41:50.337000+01:00 +Internet,case-10892,2012-02-07 00:00:00+01:00,General,2012-01-12 14:17:12.049000+01:00,2012-02-07 00:00:00.010000+01:00,Group 8,Resource11,2011-12-13 01:06:40.010000+01:00,task-50385,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-21 08:42:49.661000+01:00 +Internet,case-10892,2012-02-07 00:00:00+01:00,General,2012-01-12 14:17:12.049000+01:00,2012-02-07 00:00:00.010000+01:00,Group 8,Resource11,2011-12-13 01:06:40.010000+01:00,task-50387,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-21 08:44:56.141000+01:00 +Internet,case-10892,2012-02-07 00:00:00+01:00,General,2012-01-12 14:17:12.049000+01:00,2012-02-07 00:00:00.010000+01:00,Group 8,Resource11,2011-12-13 01:06:40.010000+01:00,task-50388,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-21 08:51:22.982000+01:00 +Internet,case-10892,2012-02-07 00:00:00+01:00,General,2012-01-12 14:17:12.049000+01:00,2012-02-07 00:00:00.010000+01:00,Group 8,Resource11,2011-12-13 01:06:40.010000+01:00,task-50386,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-21 08:52:15.331000+01:00 +Internet,case-10892,2012-02-07 00:00:00+01:00,General,2012-01-12 14:17:12.049000+01:00,2012-02-07 00:00:00.010000+01:00,Group 8,Resource11,2011-12-13 01:06:40.010000+01:00,task-50389,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-21 08:53:08.141000+01:00 +Internet,case-10918,2012-03-01 00:00:00+01:00,General,,2012-03-01 00:00:00.010000+01:00,,Resource26,2011-12-14 09:54:01.065000+01:00,task-49844,Confirmation of receipt,complete,EMPTY,Resource42,2012-01-23 10:23:25.017000+01:00 +Internet,case-10929,2012-02-01 00:00:00+01:00,General,2012-01-19 14:03:29.080000+01:00,2012-02-01 00:00:00.010000+01:00,Group 11,Resource28,2011-12-07 01:06:40.010000+01:00,task-49932,Confirmation of receipt,complete,EMPTY,Resource28,2011-12-19 15:34:47.491000+01:00 +Internet,case-10929,2012-02-01 00:00:00+01:00,General,2012-01-19 14:03:29.080000+01:00,2012-02-01 00:00:00.010000+01:00,Group 11,Resource28,2011-12-07 01:06:40.010000+01:00,task-50250,T02 Check confirmation of receipt,complete,EMPTY,Resource28,2011-12-19 15:37:28.906000+01:00 +Internet,case-10929,2012-02-01 00:00:00+01:00,General,2012-01-19 14:03:29.080000+01:00,2012-02-01 00:00:00.010000+01:00,Group 11,Resource28,2011-12-07 01:06:40.010000+01:00,task-50251,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-12-19 15:38:21.935000+01:00 +Internet,case-10929,2012-02-01 00:00:00+01:00,General,2012-01-19 14:03:29.080000+01:00,2012-02-01 00:00:00.010000+01:00,Group 11,Resource28,2011-12-07 01:06:40.010000+01:00,task-50253,T10 Determine necessity to stop indication,complete,Group 1,Resource28,2011-12-19 15:39:29.045000+01:00 +Internet,case-10929,2012-02-01 00:00:00+01:00,General,2012-01-19 14:03:29.080000+01:00,2012-02-01 00:00:00.010000+01:00,Group 11,Resource28,2011-12-07 01:06:40.010000+01:00,task-50252,T04 Determine confirmation of receipt,complete,EMPTY,Resource28,2012-01-16 13:17:48.717000+01:00 +Internet,case-10929,2012-02-01 00:00:00+01:00,General,2012-01-19 14:03:29.080000+01:00,2012-02-01 00:00:00.010000+01:00,Group 11,Resource28,2011-12-07 01:06:40.010000+01:00,task-52548,T05 Print and send confirmation of receipt,complete,Group 2,Resource28,2012-01-16 13:18:38.578000+01:00 +Internet,case-10946,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource05,2011-12-15 01:06:40.010000+01:00,task-50195,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-03 10:04:36.517000+01:00 +Internet,case-10946,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource05,2011-12-15 01:06:40.010000+01:00,task-51048,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-03 10:05:52.122000+01:00 +Internet,case-10946,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource05,2011-12-15 01:06:40.010000+01:00,task-51050,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-03 10:06:40.471000+01:00 +Internet,case-10946,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource05,2011-12-15 01:06:40.010000+01:00,task-51051,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-03 10:07:09.781000+01:00 +Internet,case-10946,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource05,2011-12-15 01:06:40.010000+01:00,task-51049,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-03 10:09:42.388000+01:00 +Internet,case-10946,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource05,2011-12-15 01:06:40.010000+01:00,task-51052,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-03 10:10:27.621000+01:00 +Internet,case-10948,2012-02-09 00:00:00+01:00,General,2012-01-12 14:08:04.148000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-12-15 01:06:40.010000+01:00,task-50197,Confirmation of receipt,complete,EMPTY,Resource16,2011-12-21 10:24:17.770000+01:00 +Internet,case-10948,2012-02-09 00:00:00+01:00,General,2012-01-12 14:08:04.148000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-12-15 01:06:40.010000+01:00,task-50416,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-12-21 10:25:05.167000+01:00 +Internet,case-10948,2012-02-09 00:00:00+01:00,General,2012-01-12 14:08:04.148000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-12-15 01:06:40.010000+01:00,task-50418,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-12-21 10:25:34.019000+01:00 +Internet,case-10948,2012-02-09 00:00:00+01:00,General,2012-01-12 14:08:04.148000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-12-15 01:06:40.010000+01:00,task-50419,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-12-21 10:25:58.710000+01:00 +Internet,case-10948,2012-02-09 00:00:00+01:00,General,2012-01-12 14:08:04.148000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-12-15 01:06:40.010000+01:00,task-50417,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-12-21 10:26:32.902000+01:00 +Internet,case-10948,2012-02-09 00:00:00+01:00,General,2012-01-12 14:08:04.148000+01:00,2012-02-09 00:00:00.010000+01:00,Group 8,Resource11,2011-12-15 01:06:40.010000+01:00,task-50420,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-12-21 10:27:41.001000+01:00 +Internet,case-10950,2012-01-02 00:00:00+01:00,General,,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 00:00:00.010000+01:00,task-50050,Confirmation of receipt,complete,EMPTY,Resource14,2011-12-20 10:22:12.713000+01:00 +Internet,case-10950,2012-01-02 00:00:00+01:00,General,,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 00:00:00.010000+01:00,task-50309,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-12-20 10:29:17.765000+01:00 +Internet,case-10950,2012-01-02 00:00:00+01:00,General,,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 00:00:00.010000+01:00,task-50315,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-12-20 11:03:39.353000+01:00 +Internet,case-10950,2012-01-02 00:00:00+01:00,General,,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 00:00:00.010000+01:00,task-50323,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-12-20 11:04:13.923000+01:00 +Internet,case-10950,2012-01-02 00:00:00+01:00,General,,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 00:00:00.010000+01:00,task-50310,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-12-20 11:08:02.697000+01:00 +Internet,case-10950,2012-01-02 00:00:00+01:00,General,,2012-01-02 00:00:00.010000+01:00,Group 5,Resource14,2011-11-07 00:00:00.010000+01:00,task-50324,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-12-20 11:11:21.148000+01:00 +Internet,case-10951,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource13,2011-12-15 01:06:40.010000+01:00,task-50217,Confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 10:24:58.463000+01:00 +Internet,case-10951,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource13,2011-12-15 01:06:40.010000+01:00,task-51287,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2012-01-05 10:32:39.507000+01:00 +Internet,case-10951,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource13,2011-12-15 01:06:40.010000+01:00,task-51286,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 10:33:36.161000+01:00 +Internet,case-10951,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource13,2011-12-15 01:06:40.010000+01:00,task-51289,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 10:34:29.305000+01:00 +Internet,case-10951,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource13,2011-12-15 01:06:40.010000+01:00,task-51290,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2012-01-05 10:36:25.145000+01:00 +Internet,case-10951,2012-02-09 00:00:00+01:00,General,,2012-02-09 00:00:00.010000+01:00,Group 5,Resource13,2011-12-15 01:06:40.010000+01:00,task-51288,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2012-01-05 10:36:53.293000+01:00 +Internet,case-10971,2012-02-11 00:00:00+01:00,General,,2012-02-11 00:00:00.010000+01:00,Group 5,Resource13,2011-12-16 01:06:40.010000+01:00,task-50227,Confirmation of receipt,complete,EMPTY,Resource13,2012-01-10 13:16:23.523000+01:00 +Internet,case-10971,2012-02-11 00:00:00+01:00,General,,2012-02-11 00:00:00.010000+01:00,Group 5,Resource13,2011-12-16 01:06:40.010000+01:00,task-51738,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2012-01-10 13:19:00.861000+01:00 +Internet,case-10971,2012-02-11 00:00:00+01:00,General,,2012-02-11 00:00:00.010000+01:00,Group 5,Resource13,2011-12-16 01:06:40.010000+01:00,task-51741,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2012-01-10 13:21:13.637000+01:00 +Internet,case-10971,2012-02-11 00:00:00+01:00,General,,2012-02-11 00:00:00.010000+01:00,Group 5,Resource13,2011-12-16 01:06:40.010000+01:00,task-51739,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2012-01-10 13:21:56.885000+01:00 +Internet,case-10971,2012-02-11 00:00:00+01:00,General,,2012-02-11 00:00:00.010000+01:00,Group 5,Resource13,2011-12-16 01:06:40.010000+01:00,task-51742,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2012-01-10 13:23:49.193000+01:00 +Internet,case-10971,2012-02-11 00:00:00+01:00,General,,2012-02-11 00:00:00.010000+01:00,Group 5,Resource13,2011-12-16 01:06:40.010000+01:00,task-51743,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2012-01-10 13:26:48.822000+01:00 +Internet,case-11006,2012-02-13 00:00:00+01:00,General,2012-01-17 13:54:25.963000+01:00,2012-02-13 00:00:00.010000+01:00,Group 8,Resource11,2011-12-19 01:06:40.010000+01:00,task-50245,Confirmation of receipt,complete,EMPTY,Resource01,2011-12-28 15:36:23.336000+01:00 +Internet,case-11006,2012-02-13 00:00:00+01:00,General,2012-01-17 13:54:25.963000+01:00,2012-02-13 00:00:00.010000+01:00,Group 8,Resource11,2011-12-19 01:06:40.010000+01:00,task-50898,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-12-28 15:36:51.757000+01:00 +Internet,case-11006,2012-02-13 00:00:00+01:00,General,2012-01-17 13:54:25.963000+01:00,2012-02-13 00:00:00.010000+01:00,Group 8,Resource11,2011-12-19 01:06:40.010000+01:00,task-50900,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-12-28 15:37:17.275000+01:00 +Internet,case-11006,2012-02-13 00:00:00+01:00,General,2012-01-17 13:54:25.963000+01:00,2012-02-13 00:00:00.010000+01:00,Group 8,Resource11,2011-12-19 01:06:40.010000+01:00,task-50901,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-12-28 15:38:14.575000+01:00 +Internet,case-11006,2012-02-13 00:00:00+01:00,General,2012-01-17 13:54:25.963000+01:00,2012-02-13 00:00:00.010000+01:00,Group 8,Resource11,2011-12-19 01:06:40.010000+01:00,task-50899,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-12-28 15:39:34.441000+01:00 +Internet,case-11006,2012-02-13 00:00:00+01:00,General,2012-01-17 13:54:25.963000+01:00,2012-02-13 00:00:00.010000+01:00,Group 8,Resource11,2011-12-19 01:06:40.010000+01:00,task-50902,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-12-28 15:44:34.115000+01:00 +Internet,case-11007,2012-02-13 00:00:00+01:00,General,,2012-02-13 00:00:00.010000+01:00,Group 5,Resource05,2011-12-19 01:06:40.010000+01:00,task-50273,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-03 16:02:18.024000+01:00 +Internet,case-11007,2012-02-13 00:00:00+01:00,General,,2012-02-13 00:00:00.010000+01:00,Group 5,Resource05,2011-12-19 01:06:40.010000+01:00,task-51128,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-05 08:40:10.511000+01:00 +Internet,case-11007,2012-02-13 00:00:00+01:00,General,,2012-02-13 00:00:00.010000+01:00,Group 5,Resource05,2011-12-19 01:06:40.010000+01:00,task-51251,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-05 08:45:59.214000+01:00 +Internet,case-11007,2012-02-13 00:00:00+01:00,General,,2012-02-13 00:00:00.010000+01:00,Group 5,Resource05,2011-12-19 01:06:40.010000+01:00,task-51253,T05 Print and send confirmation of receipt,complete,EMPTY,Resource05,2012-01-05 09:49:38.861000+01:00 +Internet,case-11007,2012-02-13 00:00:00+01:00,General,,2012-02-13 00:00:00.010000+01:00,Group 5,Resource05,2011-12-19 01:06:40.010000+01:00,task-51129,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-05 09:51:36.497000+01:00 +Internet,case-11007,2012-02-13 00:00:00+01:00,General,,2012-02-13 00:00:00.010000+01:00,Group 5,Resource05,2011-12-19 01:06:40.010000+01:00,task-51260,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-05 09:52:53.749000+01:00 +Internet,case-11048,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-50486,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-05 14:00:46.902000+01:00 +Internet,case-11048,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-51384,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-05 14:01:29.103000+01:00 +Internet,case-11048,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-51386,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-05 14:05:58.518000+01:00 +Internet,case-11048,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-51388,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-05 14:06:28.934000+01:00 +Internet,case-11048,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-51385,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-05 14:07:46.415000+01:00 +Internet,case-11048,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-51392,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-05 14:09:51.300000+01:00 +Internet,case-11050,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-50487,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-17 07:29:45.807000+01:00 +Internet,case-11050,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-52654,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-17 07:30:21.486000+01:00 +Internet,case-11050,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-52656,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-17 07:31:04.679000+01:00 +Internet,case-11050,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-52657,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-17 07:31:40.568000+01:00 +Internet,case-11050,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-52655,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-17 07:32:09.582000+01:00 +Internet,case-11050,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-52658,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-17 07:32:43.377000+01:00 +Internet,case-11053,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-50505,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-17 08:38:18.138000+01:00 +Internet,case-11053,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-52692,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-17 08:38:52.371000+01:00 +Internet,case-11053,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-52693,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-17 08:39:32.646000+01:00 +Internet,case-11053,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-52694,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-17 08:40:36.442000+01:00 +Internet,case-11053,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-52697,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-17 08:42:11.053000+01:00 +Internet,case-11053,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource05,2011-12-21 01:06:40.010000+01:00,task-52695,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-17 08:44:59.677000+01:00 +Internet,case-11058,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource22,2011-12-21 01:06:40.010000+01:00,task-50536,Confirmation of receipt,complete,EMPTY,Resource22,2012-01-17 09:55:10.977000+01:00 +Internet,case-11058,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource22,2011-12-21 01:06:40.010000+01:00,task-52725,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2012-01-17 09:57:45.295000+01:00 +Internet,case-11058,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource22,2011-12-21 01:06:40.010000+01:00,task-52724,T02 Check confirmation of receipt,complete,Group 4,Resource22,2012-01-17 13:55:22.771000+01:00 +Internet,case-11058,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource22,2011-12-21 01:06:40.010000+01:00,task-52824,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2012-01-17 13:57:00.334000+01:00 +Internet,case-11058,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource22,2011-12-21 01:06:40.010000+01:00,task-52826,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2012-01-17 13:57:39.208000+01:00 +Internet,case-11058,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource22,2011-12-21 01:06:40.010000+01:00,task-52726,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2012-01-17 13:58:38.544000+01:00 +Internet,case-11059,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-50546,Confirmation of receipt,complete,EMPTY,Resource04,2012-01-11 12:55:56.776000+01:00 +Internet,case-11059,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-51955,T02 Check confirmation of receipt,complete,Group 4,Resource04,2012-01-11 12:56:33.884000+01:00 +Internet,case-11059,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-51957,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2012-01-11 12:57:02.860000+01:00 +Internet,case-11059,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-51958,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2012-01-11 12:57:29.891000+01:00 +Internet,case-11059,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-51956,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2012-01-17 14:44:06.677000+01:00 +Internet,case-11059,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-52855,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2012-01-17 14:44:48.567000+01:00 +Internet,case-11063,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-50607,Confirmation of receipt,complete,EMPTY,Resource04,2012-01-11 16:17:53.202000+01:00 +Internet,case-11063,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-51989,T02 Check confirmation of receipt,complete,Group 4,Resource04,2012-01-11 16:18:28.394000+01:00 +Internet,case-11063,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-51991,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2012-01-11 16:19:13.590000+01:00 +Internet,case-11063,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-51992,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2012-01-11 16:19:43.202000+01:00 +Internet,case-11063,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-51990,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2012-01-11 16:20:14.985000+01:00 +Internet,case-11063,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-12-21 01:06:40.010000+01:00,task-51993,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2012-01-11 16:20:54.744000+01:00 +Internet,case-11080,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource14,2011-12-22 01:06:40.010000+01:00,task-50658,Confirmation of receipt,complete,EMPTY,Resource14,2012-01-23 11:58:31.282000+01:00 +Internet,case-11080,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource14,2011-12-22 01:06:40.010000+01:00,task-53420,T02 Check confirmation of receipt,complete,Group 4,Resource14,2012-01-23 11:59:02.529000+01:00 +Internet,case-11080,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource14,2011-12-22 01:06:40.010000+01:00,task-53422,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2012-01-23 12:00:48.419000+01:00 +Internet,case-11080,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource14,2011-12-22 01:06:40.010000+01:00,task-53423,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2012-01-23 12:01:17.550000+01:00 +Internet,case-11080,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource14,2011-12-22 01:06:40.010000+01:00,task-53421,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2012-01-23 12:02:03.196000+01:00 +Internet,case-11080,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource14,2011-12-22 01:06:40.010000+01:00,task-53424,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2012-01-23 12:02:37.738000+01:00 +Internet,case-11094,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource13,2011-12-22 01:06:40.010000+01:00,task-50687,Confirmation of receipt,complete,EMPTY,Resource13,2012-01-15 13:22:12.557000+01:00 +Internet,case-11094,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource13,2011-12-22 01:06:40.010000+01:00,task-52366,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2012-01-15 13:23:36.084000+01:00 +Internet,case-11094,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource13,2011-12-22 01:06:40.010000+01:00,task-52368,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2012-01-15 13:24:50.228000+01:00 +Internet,case-11094,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource13,2011-12-22 01:06:40.010000+01:00,task-52369,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2012-01-15 13:25:55.526000+01:00 +Internet,case-11094,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource13,2011-12-22 01:06:40.010000+01:00,task-52367,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2012-01-15 13:26:35.968000+01:00 +Internet,case-11094,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource13,2011-12-22 01:06:40.010000+01:00,task-52370,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2012-01-15 13:27:11.044000+01:00 +Internet,case-11096,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource06,2011-12-22 01:06:40.010000+01:00,task-51200,Confirmation of receipt,complete,EMPTY,Resource06,2012-01-13 15:43:24.396000+01:00 +Internet,case-11096,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource06,2011-12-22 01:06:40.010000+01:00,task-52316,T02 Check confirmation of receipt,complete,Group 4,Resource06,2012-01-13 15:44:18.052000+01:00 +Internet,case-11096,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource06,2011-12-22 01:06:40.010000+01:00,task-52318,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2012-01-13 15:45:05.357000+01:00 +Internet,case-11096,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource06,2011-12-22 01:06:40.010000+01:00,task-52319,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2012-01-13 15:45:37.394000+01:00 +Internet,case-11096,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource06,2011-12-22 01:06:40.010000+01:00,task-52317,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2012-01-13 15:46:12.274000+01:00 +Internet,case-11096,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource06,2011-12-22 01:06:40.010000+01:00,task-52320,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2012-01-13 15:46:46.222000+01:00 +Internet,case-11115,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 5,Resource13,2011-12-23 01:06:40.010000+01:00,task-51224,Confirmation of receipt,complete,EMPTY,Resource13,2012-01-18 15:46:13.649000+01:00 +Internet,case-11115,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 5,Resource13,2011-12-23 01:06:40.010000+01:00,task-53208,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2012-01-18 15:46:47.535000+01:00 +Internet,case-11115,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 5,Resource13,2011-12-23 01:06:40.010000+01:00,task-53207,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2012-01-18 15:47:30.077000+01:00 +Internet,case-11115,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 5,Resource13,2011-12-23 01:06:40.010000+01:00,task-53210,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2012-01-18 15:48:12.759000+01:00 +Internet,case-11115,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 5,Resource13,2011-12-23 01:06:40.010000+01:00,task-53209,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2012-01-18 15:48:49.021000+01:00 +Internet,case-11115,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 5,Resource13,2011-12-23 01:06:40.010000+01:00,task-53211,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2012-01-18 15:49:34.655000+01:00 +Internet,case-11129,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 2,Resource20,2011-12-23 01:06:40.010000+01:00,task-51225,Confirmation of receipt,complete,EMPTY,Resource20,2012-01-06 14:20:51.185000+01:00 +Internet,case-11129,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 2,Resource20,2011-12-23 01:06:40.010000+01:00,task-51491,T02 Check confirmation of receipt,complete,Group 4,Resource20,2012-01-06 14:23:09.346000+01:00 +Internet,case-11129,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 2,Resource20,2011-12-23 01:06:40.010000+01:00,task-51494,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2012-01-06 14:25:09.701000+01:00 +Internet,case-11129,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 2,Resource20,2011-12-23 01:06:40.010000+01:00,task-51495,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2012-01-06 14:25:43.079000+01:00 +Internet,case-11129,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 2,Resource20,2011-12-23 01:06:40.010000+01:00,task-51492,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2012-01-06 14:52:05.571000+01:00 +Internet,case-11129,2012-02-17 00:00:00+01:00,General,,2012-02-17 00:00:00.010000+01:00,Group 2,Resource20,2011-12-23 01:06:40.010000+01:00,task-51499,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2012-01-06 14:53:11.253000+01:00 +Internet,case-11154,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource06,2011-12-27 01:06:40.010000+01:00,task-51254,Confirmation of receipt,complete,EMPTY,Resource06,2012-01-16 12:31:11.027000+01:00 +Internet,case-11154,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource06,2011-12-27 01:06:40.010000+01:00,task-52519,T02 Check confirmation of receipt,complete,Group 4,Resource06,2012-01-16 12:32:13.632000+01:00 +Internet,case-11154,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource06,2011-12-27 01:06:40.010000+01:00,task-52521,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2012-01-16 12:33:01.053000+01:00 +Internet,case-11154,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource06,2011-12-27 01:06:40.010000+01:00,task-52522,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2012-01-16 12:33:43.742000+01:00 +Internet,case-11154,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource06,2011-12-27 01:06:40.010000+01:00,task-52520,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2012-01-16 12:34:23.168000+01:00 +Internet,case-11154,2012-02-21 00:00:00+01:00,General,,2012-02-21 00:00:00.010000+01:00,Group 5,Resource06,2011-12-27 01:06:40.010000+01:00,task-52523,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2012-01-16 12:35:08.739000+01:00 +Internet,case-11214,2012-03-25 00:00:00+01:00,General,,2012-02-26 00:00:00.010000+01:00,Group 2,Resource07,2012-01-01 01:06:40.010000+01:00,task-51257,Confirmation of receipt,complete,EMPTY,Resource07,2012-01-10 14:41:29.553000+01:00 +Internet,case-11214,2012-03-25 00:00:00+01:00,General,,2012-02-26 00:00:00.010000+01:00,Group 2,Resource07,2012-01-01 01:06:40.010000+01:00,task-51799,T02 Check confirmation of receipt,complete,Group 4,Resource07,2012-01-10 14:42:09.187000+01:00 +Internet,case-11214,2012-03-25 00:00:00+01:00,General,,2012-02-26 00:00:00.010000+01:00,Group 2,Resource07,2012-01-01 01:06:40.010000+01:00,task-51801,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2012-01-10 14:42:36.740000+01:00 +Internet,case-11214,2012-03-25 00:00:00+01:00,General,,2012-02-26 00:00:00.010000+01:00,Group 2,Resource07,2012-01-01 01:06:40.010000+01:00,task-51802,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2012-01-10 14:43:18.047000+01:00 +Internet,case-11214,2012-03-25 00:00:00+01:00,General,,2012-02-26 00:00:00.010000+01:00,Group 2,Resource07,2012-01-01 01:06:40.010000+01:00,task-51800,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2012-01-10 14:48:12.062000+01:00 +Internet,case-11214,2012-03-25 00:00:00+01:00,General,,2012-02-26 00:00:00.010000+01:00,Group 2,Resource07,2012-01-01 01:06:40.010000+01:00,task-51803,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2012-01-10 14:48:58.604000+01:00 +Internet,case-11268,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource12,2012-01-04 01:06:40.010000+01:00,task-51259,Confirmation of receipt,complete,EMPTY,Resource12,2012-01-12 14:25:56.505000+01:00 +Internet,case-11268,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource12,2012-01-04 01:06:40.010000+01:00,task-52136,T02 Check confirmation of receipt,complete,Group 4,Resource12,2012-01-12 14:30:49.989000+01:00 +Internet,case-11268,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource12,2012-01-04 01:06:40.010000+01:00,task-52138,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2012-01-12 14:31:29.075000+01:00 +Internet,case-11268,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource12,2012-01-04 01:06:40.010000+01:00,task-52137,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2012-01-12 14:34:39.302000+01:00 +Internet,case-11268,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource12,2012-01-04 01:06:40.010000+01:00,task-52141,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2012-01-12 14:35:16.754000+01:00 +Internet,case-11268,2012-02-29 00:00:00+01:00,General,,2012-02-29 00:00:00.010000+01:00,Group 5,Resource12,2012-01-04 01:06:40.010000+01:00,task-52139,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2012-01-20 13:49:57.510000+01:00 +Internet,case-11275,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource22,2011-12-22 01:06:40.010000+01:00,task-51199,Confirmation of receipt,complete,EMPTY,Resource22,2012-01-12 14:36:54.782000+01:00 +Internet,case-11275,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource22,2011-12-22 01:06:40.010000+01:00,task-52146,T02 Check confirmation of receipt,complete,Group 4,Resource22,2012-01-12 14:37:39.465000+01:00 +Internet,case-11275,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource22,2011-12-22 01:06:40.010000+01:00,task-52149,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2012-01-12 14:38:52.849000+01:00 +Internet,case-11275,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource22,2011-12-22 01:06:40.010000+01:00,task-52150,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2012-01-12 14:40:39.515000+01:00 +Internet,case-11275,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource22,2011-12-22 01:06:40.010000+01:00,task-52147,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2012-01-12 14:41:22.579000+01:00 +Internet,case-11275,2012-02-16 00:00:00+01:00,General,,2012-02-16 00:00:00.010000+01:00,Group 5,Resource22,2011-12-22 01:06:40.010000+01:00,task-52154,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2012-01-12 14:42:05.233000+01:00 +Internet,case-11375,2012-01-13 00:00:00+01:00,General,2012-01-18 12:40:44.606000+01:00,2012-01-13 00:00:00.010000+01:00,Group 5,Resource12,2011-11-18 01:06:40.010000+01:00,task-51896,Confirmation of receipt,complete,EMPTY,Resource12,2012-01-11 12:11:08.204000+01:00 +Internet,case-11375,2012-01-13 00:00:00+01:00,General,2012-01-18 12:40:44.606000+01:00,2012-01-13 00:00:00.010000+01:00,Group 5,Resource12,2011-11-18 01:06:40.010000+01:00,task-51946,T02 Check confirmation of receipt,complete,Group 4,Resource12,2012-01-11 12:12:22.011000+01:00 +Internet,case-11375,2012-01-13 00:00:00+01:00,General,2012-01-18 12:40:44.606000+01:00,2012-01-13 00:00:00.010000+01:00,Group 5,Resource12,2011-11-18 01:06:40.010000+01:00,task-51948,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2012-01-11 12:13:05.661000+01:00 +Internet,case-11375,2012-01-13 00:00:00+01:00,General,2012-01-18 12:40:44.606000+01:00,2012-01-13 00:00:00.010000+01:00,Group 5,Resource12,2011-11-18 01:06:40.010000+01:00,task-51947,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2012-01-11 12:14:22.771000+01:00 +Internet,case-11375,2012-01-13 00:00:00+01:00,General,2012-01-18 12:40:44.606000+01:00,2012-01-13 00:00:00.010000+01:00,Group 5,Resource12,2011-11-18 01:06:40.010000+01:00,task-51950,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2012-01-11 12:16:09.310000+01:00 +Internet,case-11375,2012-01-13 00:00:00+01:00,General,2012-01-18 12:40:44.606000+01:00,2012-01-13 00:00:00.010000+01:00,Group 5,Resource12,2011-11-18 01:06:40.010000+01:00,task-51952,T16 Report reasons to hold request,complete,Group 1,Resource12,2012-01-13 07:40:31.256000+01:00 +Internet,case-11375,2012-01-13 00:00:00+01:00,General,2012-01-18 12:40:44.606000+01:00,2012-01-13 00:00:00.010000+01:00,Group 5,Resource12,2011-11-18 01:06:40.010000+01:00,task-52236,T17 Check report Y to stop indication,complete,Group 4,Resource12,2012-01-13 07:41:08.656000+01:00 +Internet,case-11375,2012-01-13 00:00:00+01:00,General,2012-01-18 12:40:44.606000+01:00,2012-01-13 00:00:00.010000+01:00,Group 5,Resource12,2011-11-18 01:06:40.010000+01:00,task-52237,T19 Determine report Y to stop indication,complete,Group 3,Resource12,2012-01-13 07:41:41.200000+01:00 +Internet,case-11375,2012-01-13 00:00:00+01:00,General,2012-01-18 12:40:44.606000+01:00,2012-01-13 00:00:00.010000+01:00,Group 5,Resource12,2011-11-18 01:06:40.010000+01:00,task-52238,T20 Print report Y to stop indication,complete,Group 2,Resource12,2012-01-13 07:42:16.811000+01:00 +Internet,case-11375,2012-01-13 00:00:00+01:00,General,2012-01-18 12:40:44.606000+01:00,2012-01-13 00:00:00.010000+01:00,Group 5,Resource12,2011-11-18 01:06:40.010000+01:00,task-51949,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2012-01-13 08:08:42.768000+01:00 +Internet,case-11376,2012-02-27 00:00:00+01:00,General,,2012-02-27 00:00:00.010000+01:00,Group 5,Resource02,2011-11-21 01:06:40.010000+01:00,task-51913,Confirmation of receipt,complete,EMPTY,Resource02,2012-01-17 07:49:54.680000+01:00 +Internet,case-11376,2012-02-27 00:00:00+01:00,General,,2012-02-27 00:00:00.010000+01:00,Group 5,Resource02,2011-11-21 01:06:40.010000+01:00,task-52673,T02 Check confirmation of receipt,complete,Group 4,Resource02,2012-01-17 12:00:33.584000+01:00 +Internet,case-11376,2012-02-27 00:00:00+01:00,General,,2012-02-27 00:00:00.010000+01:00,Group 5,Resource02,2011-11-21 01:06:40.010000+01:00,task-52785,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2012-01-17 12:01:16.626000+01:00 +Internet,case-11376,2012-02-27 00:00:00+01:00,General,,2012-02-27 00:00:00.010000+01:00,Group 5,Resource02,2011-11-21 01:06:40.010000+01:00,task-52786,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2012-01-17 12:02:13.821000+01:00 +Internet,case-11376,2012-02-27 00:00:00+01:00,General,,2012-02-27 00:00:00.010000+01:00,Group 5,Resource02,2011-11-21 01:06:40.010000+01:00,task-52674,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2012-01-17 12:03:44.842000+01:00 +Internet,case-11376,2012-02-27 00:00:00+01:00,General,,2012-02-27 00:00:00.010000+01:00,Group 5,Resource02,2011-11-21 01:06:40.010000+01:00,task-52788,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2012-01-17 12:04:35.396000+01:00 +Internet,case-11378,2012-01-20 00:00:00+01:00,General,2012-01-20 09:12:24.814000+01:00,2012-01-20 00:00:00.010000+01:00,Group 8,Resource11,2011-11-25 01:06:40.010000+01:00,task-51638,Confirmation of receipt,complete,EMPTY,Resource07,2012-01-17 09:02:43.992000+01:00 +Internet,case-11378,2012-01-20 00:00:00+01:00,General,2012-01-20 09:12:24.814000+01:00,2012-01-20 00:00:00.010000+01:00,Group 8,Resource11,2011-11-25 01:06:40.010000+01:00,task-52706,T02 Check confirmation of receipt,complete,Group 4,Resource07,2012-01-17 09:03:25.633000+01:00 +Internet,case-11378,2012-01-20 00:00:00+01:00,General,2012-01-20 09:12:24.814000+01:00,2012-01-20 00:00:00.010000+01:00,Group 8,Resource11,2011-11-25 01:06:40.010000+01:00,task-52708,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2012-01-17 09:04:01.485000+01:00 +Internet,case-11378,2012-01-20 00:00:00+01:00,General,2012-01-20 09:12:24.814000+01:00,2012-01-20 00:00:00.010000+01:00,Group 8,Resource11,2011-11-25 01:06:40.010000+01:00,task-52711,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2012-01-17 09:04:28.414000+01:00 +Internet,case-11378,2012-01-20 00:00:00+01:00,General,2012-01-20 09:12:24.814000+01:00,2012-01-20 00:00:00.010000+01:00,Group 8,Resource11,2011-11-25 01:06:40.010000+01:00,task-52707,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2012-01-17 09:05:19.033000+01:00 +Internet,case-11378,2012-01-20 00:00:00+01:00,General,2012-01-20 09:12:24.814000+01:00,2012-01-20 00:00:00.010000+01:00,Group 8,Resource11,2011-11-25 01:06:40.010000+01:00,task-52712,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2012-01-17 09:05:57.074000+01:00 +Internet,case-11380,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource06,2012-01-09 01:06:40.010000+01:00,task-51961,Confirmation of receipt,complete,EMPTY,Resource06,2012-01-13 16:29:03.742000+01:00 +Internet,case-11380,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource06,2012-01-09 01:06:40.010000+01:00,task-52337,T02 Check confirmation of receipt,complete,Group 4,Resource06,2012-01-13 16:30:16.897000+01:00 +Internet,case-11380,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource06,2012-01-09 01:06:40.010000+01:00,task-52339,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2012-01-13 16:30:51.650000+01:00 +Internet,case-11380,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource06,2012-01-09 01:06:40.010000+01:00,task-52340,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2012-01-13 16:31:20.117000+01:00 +Internet,case-11380,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource06,2012-01-09 01:06:40.010000+01:00,task-52338,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2012-01-13 16:32:45.283000+01:00 +Internet,case-11380,2012-03-05 00:00:00+01:00,General,,2012-03-05 00:00:00.010000+01:00,Group 5,Resource06,2012-01-09 01:06:40.010000+01:00,task-52341,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2012-01-13 16:33:17.201000+01:00 +Internet,case-11399,2012-01-24 00:00:00+01:00,General,2012-01-17 10:01:44.200000+01:00,2012-01-24 00:00:00.010000+01:00,Group 6,Resource40,2011-11-29 00:00:00.010000+01:00,task-51720,Confirmation of receipt,complete,Group 1,Resource27,2012-01-12 11:11:27.976000+01:00 +Internet,case-11399,2012-01-24 00:00:00+01:00,General,2012-01-17 10:01:44.200000+01:00,2012-01-24 00:00:00.010000+01:00,Group 6,Resource40,2011-11-29 00:00:00.010000+01:00,task-52050,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2012-01-12 11:18:08.932000+01:00 +Internet,case-11399,2012-01-24 00:00:00+01:00,General,2012-01-17 10:01:44.200000+01:00,2012-01-24 00:00:00.010000+01:00,Group 6,Resource40,2011-11-29 00:00:00.010000+01:00,task-52049,T02 Check confirmation of receipt,complete,Group 4,Resource11,2012-01-12 11:18:48.350000+01:00 +Internet,case-11399,2012-01-24 00:00:00+01:00,General,2012-01-17 10:01:44.200000+01:00,2012-01-24 00:00:00.010000+01:00,Group 6,Resource40,2011-11-29 00:00:00.010000+01:00,task-52053,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2012-01-12 11:19:40.782000+01:00 +Internet,case-11399,2012-01-24 00:00:00+01:00,General,2012-01-17 10:01:44.200000+01:00,2012-01-24 00:00:00.010000+01:00,Group 6,Resource40,2011-11-29 00:00:00.010000+01:00,task-52054,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2012-01-12 11:20:20.992000+01:00 +Internet,case-11399,2012-01-24 00:00:00+01:00,General,2012-01-17 10:01:44.200000+01:00,2012-01-24 00:00:00.010000+01:00,Group 6,Resource40,2011-11-29 00:00:00.010000+01:00,task-52052,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2012-01-12 11:21:00.074000+01:00 +Internet,case-11399,2012-01-24 00:00:00+01:00,General,2012-01-17 10:01:44.200000+01:00,2012-01-24 00:00:00.010000+01:00,Group 6,Resource40,2011-11-29 00:00:00.010000+01:00,task-52056,T16 Report reasons to hold request,complete,Group 1,Resource11,2012-01-12 11:25:33.823000+01:00 +Internet,case-11399,2012-01-24 00:00:00+01:00,General,2012-01-17 10:01:44.200000+01:00,2012-01-24 00:00:00.010000+01:00,Group 6,Resource40,2011-11-29 00:00:00.010000+01:00,task-52058,T17 Check report Y to stop indication,complete,Group 4,Resource11,2012-01-12 11:26:15.750000+01:00 +Internet,case-11399,2012-01-24 00:00:00+01:00,General,2012-01-17 10:01:44.200000+01:00,2012-01-24 00:00:00.010000+01:00,Group 6,Resource40,2011-11-29 00:00:00.010000+01:00,task-52059,T19 Determine report Y to stop indication,complete,Group 3,Resource11,2012-01-12 11:26:54.747000+01:00 +Internet,case-11399,2012-01-24 00:00:00+01:00,General,2012-01-17 10:01:44.200000+01:00,2012-01-24 00:00:00.010000+01:00,Group 6,Resource40,2011-11-29 00:00:00.010000+01:00,task-52060,T20 Print report Y to stop indication,complete,Group 2,Resource11,2012-01-12 11:27:40.453000+01:00 +Internet,case-11427,2012-03-07 00:00:00+01:00,General,,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-51977,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-23 14:21:35.335000+01:00 +Internet,case-11427,2012-03-07 00:00:00+01:00,General,,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-53445,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-23 14:22:11.094000+01:00 +Internet,case-11427,2012-03-07 00:00:00+01:00,General,,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-53447,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-23 14:22:47.598000+01:00 +Internet,case-11427,2012-03-07 00:00:00+01:00,General,,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-53448,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-23 14:36:04.241000+01:00 +Internet,case-11427,2012-03-07 00:00:00+01:00,General,,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-53446,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-23 14:38:16.158000+01:00 +Internet,case-11427,2012-03-07 00:00:00+01:00,General,,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-53449,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-23 14:39:21.894000+01:00 +Internet,case-11437,2012-03-07 00:00:00+01:00,General,2012-01-18 10:25:47.641000+01:00,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-51998,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-18 09:39:31.608000+01:00 +Internet,case-11437,2012-03-07 00:00:00+01:00,General,2012-01-18 10:25:47.641000+01:00,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-53027,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-18 09:40:02.238000+01:00 +Internet,case-11437,2012-03-07 00:00:00+01:00,General,2012-01-18 10:25:47.641000+01:00,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-53029,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-18 09:40:33.063000+01:00 +Internet,case-11437,2012-03-07 00:00:00+01:00,General,2012-01-18 10:25:47.641000+01:00,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-53030,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-18 09:40:58.960000+01:00 +Internet,case-11437,2012-03-07 00:00:00+01:00,General,2012-01-18 10:25:47.641000+01:00,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-53028,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-18 09:41:36.146000+01:00 +Internet,case-11437,2012-03-07 00:00:00+01:00,General,2012-01-18 10:25:47.641000+01:00,2012-03-07 00:00:00.010000+01:00,Group 5,Resource05,2012-01-11 01:06:40.010000+01:00,task-53031,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-18 09:42:22.166000+01:00 +Internet,case-11458,2012-03-08 00:00:00+01:00,General,,2012-03-08 00:00:00.010000+01:00,Group 5,Resource05,2012-01-12 01:06:40.010000+01:00,task-52267,Confirmation of receipt,complete,EMPTY,Resource05,2012-01-23 15:39:28.185000+01:00 +Internet,case-11458,2012-03-08 00:00:00+01:00,General,,2012-03-08 00:00:00.010000+01:00,Group 5,Resource05,2012-01-12 01:06:40.010000+01:00,task-53486,T02 Check confirmation of receipt,complete,Group 4,Resource05,2012-01-23 15:40:01.303000+01:00 +Internet,case-11458,2012-03-08 00:00:00+01:00,General,,2012-03-08 00:00:00.010000+01:00,Group 5,Resource05,2012-01-12 01:06:40.010000+01:00,task-53488,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2012-01-23 15:40:42.753000+01:00 +Internet,case-11458,2012-03-08 00:00:00+01:00,General,,2012-03-08 00:00:00.010000+01:00,Group 5,Resource05,2012-01-12 01:06:40.010000+01:00,task-53490,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2012-01-23 15:41:12.424000+01:00 +Internet,case-11458,2012-03-08 00:00:00+01:00,General,,2012-03-08 00:00:00.010000+01:00,Group 5,Resource05,2012-01-12 01:06:40.010000+01:00,task-53487,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2012-01-23 15:42:10.417000+01:00 +Internet,case-11458,2012-03-08 00:00:00+01:00,General,,2012-03-08 00:00:00.010000+01:00,Group 5,Resource05,2012-01-12 01:06:40.010000+01:00,task-53491,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2012-01-23 15:42:54.644000+01:00 +Desk,case-11460,2012-03-02 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource06,2012-01-06 01:06:40.010000+01:00,task-52286,Confirmation of receipt,complete,EMPTY,Resource06,2012-01-19 16:12:19.703000+01:00 +Desk,case-11460,2012-03-02 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource06,2012-01-06 01:06:40.010000+01:00,task-53275,T02 Check confirmation of receipt,complete,Group 4,Resource06,2012-01-19 16:14:07.239000+01:00 +Desk,case-11460,2012-03-02 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource06,2012-01-06 01:06:40.010000+01:00,task-53277,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2012-01-19 16:14:39.497000+01:00 +Desk,case-11460,2012-03-02 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource06,2012-01-06 01:06:40.010000+01:00,task-53276,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2012-01-19 16:15:25.469000+01:00 +Desk,case-11460,2012-03-02 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource06,2012-01-06 01:06:40.010000+01:00,task-53279,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2012-01-19 16:15:58.589000+01:00 +Desk,case-11460,2012-03-02 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource06,2012-01-06 01:06:40.010000+01:00,task-53278,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2012-01-20 13:53:13.367000+01:00 +Internet,case-11470,2012-03-09 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource18,2012-01-13 01:06:40.010000+01:00,task-52400,Confirmation of receipt,complete,EMPTY,Resource18,2012-01-18 09:10:47.037000+01:00 +Internet,case-11470,2012-03-09 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource18,2012-01-13 01:06:40.010000+01:00,task-53019,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2012-01-18 09:13:20.508000+01:00 +Internet,case-11470,2012-03-09 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource18,2012-01-13 01:06:40.010000+01:00,task-53022,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2012-01-18 09:15:25.069000+01:00 +Internet,case-11470,2012-03-09 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource18,2012-01-13 01:06:40.010000+01:00,task-53023,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2012-01-18 09:17:33.202000+01:00 +Internet,case-11470,2012-03-09 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource18,2012-01-13 01:06:40.010000+01:00,task-53021,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2012-01-18 09:24:07.559000+01:00 +Internet,case-11470,2012-03-09 00:00:00+01:00,General,,2012-03-02 00:00:00.010000+01:00,Group 5,Resource18,2012-01-13 01:06:40.010000+01:00,task-53024,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2012-01-18 09:38:45.355000+01:00 +Internet,case-11473,2012-03-09 00:00:00+01:00,General,,2012-03-09 00:00:00.010000+01:00,Group 5,Resource18,2012-01-13 01:06:40.010000+01:00,task-52544,Confirmation of receipt,complete,EMPTY,Resource18,2012-01-18 10:29:52.496000+01:00 +Internet,case-11473,2012-03-09 00:00:00+01:00,General,,2012-03-09 00:00:00.010000+01:00,Group 5,Resource18,2012-01-13 01:06:40.010000+01:00,task-53085,T02 Check confirmation of receipt,complete,Group 4,Resource18,2012-01-18 11:51:06.633000+01:00 +Internet,case-11473,2012-03-09 00:00:00+01:00,General,,2012-03-09 00:00:00.010000+01:00,Group 5,Resource18,2012-01-13 01:06:40.010000+01:00,task-53146,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2012-01-18 11:51:41.408000+01:00 +Internet,case-11473,2012-03-09 00:00:00+01:00,General,,2012-03-09 00:00:00.010000+01:00,Group 5,Resource18,2012-01-13 01:06:40.010000+01:00,task-53147,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2012-01-18 11:52:44.235000+01:00 +Internet,case-11481,2012-03-10 00:00:00+01:00,General,,2012-03-10 00:00:00.010000+01:00,Group 5,Resource23,2012-01-14 01:06:40.010000+01:00,task-52561,Confirmation of receipt,complete,EMPTY,Resource23,2012-01-23 10:41:13.388000+01:00 +Internet,case-11481,2012-03-10 00:00:00+01:00,General,,2012-03-10 00:00:00.010000+01:00,Group 5,Resource23,2012-01-14 01:06:40.010000+01:00,task-53400,T02 Check confirmation of receipt,complete,Group 4,Resource23,2012-01-23 10:45:16.188000+01:00 +Internet,case-11481,2012-03-10 00:00:00+01:00,General,,2012-03-10 00:00:00.010000+01:00,Group 5,Resource23,2012-01-14 01:06:40.010000+01:00,task-53402,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2012-01-23 10:45:51.220000+01:00 +Internet,case-11481,2012-03-10 00:00:00+01:00,General,,2012-03-10 00:00:00.010000+01:00,Group 5,Resource23,2012-01-14 01:06:40.010000+01:00,task-53403,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2012-01-23 10:46:17.711000+01:00 +Internet,case-11517,2012-03-13 00:00:00+01:00,General,,2012-03-13 00:00:00.010000+01:00,Group 5,Resource06,2012-01-17 01:06:40.010000+01:00,task-52825,Confirmation of receipt,complete,EMPTY,Resource18,2012-01-17 16:54:45.106000+01:00 +Internet,case-11517,2012-03-13 00:00:00+01:00,General,,2012-03-13 00:00:00.010000+01:00,Group 5,Resource06,2012-01-17 01:06:40.010000+01:00,task-52975,T02 Check confirmation of receipt,complete,Group 4,Resource18,2012-01-17 16:59:56.347000+01:00 +Internet,case-11517,2012-03-13 00:00:00+01:00,General,,2012-03-13 00:00:00.010000+01:00,Group 5,Resource06,2012-01-17 01:06:40.010000+01:00,task-52977,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2012-01-17 17:01:50.545000+01:00 +Internet,case-11517,2012-03-13 00:00:00+01:00,General,,2012-03-13 00:00:00.010000+01:00,Group 5,Resource06,2012-01-17 01:06:40.010000+01:00,task-52978,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2012-01-17 17:02:29.572000+01:00 +Desk,case-3756,2010-11-29 01:06:40+01:00,General,2010-11-29 14:51:06.575000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource02,2010-10-04 01:06:40.020000+02:00,task-25,Confirmation of receipt,complete,EMPTY,Resource02,2010-10-05 08:32:48.565000+02:00 +Desk,case-3756,2010-11-29 01:06:40+01:00,General,2010-11-29 14:51:06.575000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource02,2010-10-04 01:06:40.020000+02:00,task-45,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-10-05 08:42:49.801000+02:00 +Desk,case-3756,2010-11-29 01:06:40+01:00,General,2010-11-29 14:51:06.575000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource02,2010-10-04 01:06:40.020000+02:00,task-44,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-05 09:31:29.133000+02:00 +Desk,case-3756,2010-11-29 01:06:40+01:00,General,2010-11-29 14:51:06.575000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource02,2010-10-04 01:06:40.020000+02:00,task-46,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource24,2010-10-05 09:32:37.563000+02:00 +Desk,case-3756,2010-11-29 01:06:40+01:00,General,2010-11-29 14:51:06.575000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource02,2010-10-04 01:06:40.020000+02:00,task-48,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-10-05 09:39:14.231000+02:00 +Desk,case-3756,2010-11-29 01:06:40+01:00,General,2010-11-29 14:51:06.575000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource02,2010-10-04 01:06:40.020000+02:00,task-49,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-10-05 09:40:16.663000+02:00 +Desk,case-3756,2010-11-29 01:06:40+01:00,General,2010-11-29 14:51:06.575000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource02,2010-10-04 01:06:40.020000+02:00,task-47,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-05 10:44:20.945000+02:00 +Desk,case-3756,2010-11-29 01:06:40+01:00,General,2010-11-29 14:51:06.575000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource02,2010-10-04 01:06:40.020000+02:00,task-59,T05 Print and send confirmation of receipt,complete,EMPTY,Resource21,2010-10-05 15:16:10.469000+02:00 +Desk,case-3766,2010-11-29 01:06:40+01:00,Experts,2010-11-29 13:18:50.141000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource08,2010-10-04 01:06:40.020000+02:00,task-35,Confirmation of receipt,complete,EMPTY,Resource08,2010-10-05 13:01:58.437000+02:00 +Desk,case-3766,2010-11-29 01:06:40+01:00,Experts,2010-11-29 13:18:50.141000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource08,2010-10-04 01:06:40.020000+02:00,task-67,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-10-05 13:07:35.391000+02:00 +Desk,case-3766,2010-11-29 01:06:40+01:00,Experts,2010-11-29 13:18:50.141000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource08,2010-10-04 01:06:40.020000+02:00,task-68,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-10-05 13:08:22.858000+02:00 +Desk,case-3766,2010-11-29 01:06:40+01:00,Experts,2010-11-29 13:18:50.141000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource08,2010-10-04 01:06:40.020000+02:00,task-66,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-05 15:03:36.552000+02:00 +Desk,case-3766,2010-11-29 01:06:40+01:00,Experts,2010-11-29 13:18:50.141000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource08,2010-10-04 01:06:40.020000+02:00,task-81,T03 Adjust confirmation of receipt,complete,Group 1,Resource08,2010-10-05 15:22:03.157000+02:00 +Desk,case-3766,2010-11-29 01:06:40+01:00,Experts,2010-11-29 13:18:50.141000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource08,2010-10-04 01:06:40.020000+02:00,task-84,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-05 15:26:38.519000+02:00 +Desk,case-3766,2010-11-29 01:06:40+01:00,Experts,2010-11-29 13:18:50.141000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource08,2010-10-04 01:06:40.020000+02:00,task-86,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-06 09:12:49.541000+02:00 +Desk,case-3766,2010-11-29 01:06:40+01:00,Experts,2010-11-29 13:18:50.141000+01:00,2010-11-29 01:06:40.010000+01:00,,Resource08,2010-10-04 01:06:40.020000+02:00,task-96,T05 Print and send confirmation of receipt,complete,Group 2,Resource08,2010-10-07 15:16:55.755000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-128,Confirmation of receipt,complete,Group 1,Resource12,2010-10-18 09:24:27.073000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-273,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-10-18 10:45:17.970000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-272,T02 Check confirmation of receipt,complete,EMPTY,Resource26,2010-10-18 11:25:15.229000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-277,T03 Adjust confirmation of receipt,complete,Group 1,Resource12,2010-10-18 12:27:27.873000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-280,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-20 12:18:19.102000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-275,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-10-21 08:14:04.349000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-333,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-10-21 08:36:37.616000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-334,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2010-10-21 08:37:49.327000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-312,T03 Adjust confirmation of receipt,complete,Group 1,Resource12,2010-10-21 09:23:05.590000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-350,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-21 11:40:14.028000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-358,T03 Adjust confirmation of receipt,complete,Group 1,Resource12,2010-10-21 11:47:50.697000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-359,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-10-21 11:50:06.814000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-360,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-10-22 13:21:52.847000+02:00 +Internet,case-3818,2010-12-02 01:06:40+01:00,General,2011-03-02 08:30:11.985000+01:00,2010-12-02 01:06:40.010000+01:00,,Resource12,2010-10-06 01:06:40.020000+02:00,task-432,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-10-25 11:52:01.185000+02:00 +Internet,case-3877,2010-11-30 01:06:40+01:00,General,2011-03-01 09:23:58.143000+01:00,2010-11-30 01:06:40.010000+01:00,,Resource12,2010-10-11 01:06:40.020000+02:00,task-187,Confirmation of receipt,complete,Group 1,Resource12,2010-11-01 10:37:56.964000+01:00 +Internet,case-3877,2010-11-30 01:06:40+01:00,General,2011-03-01 09:23:58.143000+01:00,2010-11-30 01:06:40.010000+01:00,,Resource12,2010-10-11 01:06:40.020000+02:00,task-609,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-11-02 10:38:19.621000+01:00 +Internet,case-3877,2010-11-30 01:06:40+01:00,General,2011-03-01 09:23:58.143000+01:00,2010-11-30 01:06:40.010000+01:00,,Resource12,2010-10-11 01:06:40.020000+02:00,task-608,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2010-11-02 10:41:42.166000+01:00 +Internet,case-3877,2010-11-30 01:06:40+01:00,General,2011-03-01 09:23:58.143000+01:00,2010-11-30 01:06:40.010000+01:00,,Resource12,2010-10-11 01:06:40.020000+02:00,task-706,T04 Determine confirmation of receipt,complete,EMPTY,Resource12,2010-11-02 10:42:47.991000+01:00 +Internet,case-3877,2010-11-30 01:06:40+01:00,General,2011-03-01 09:23:58.143000+01:00,2010-11-30 01:06:40.010000+01:00,,Resource12,2010-10-11 01:06:40.020000+02:00,task-707,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-03 08:46:54.881000+01:00 +Internet,case-3877,2010-11-30 01:06:40+01:00,General,2011-03-01 09:23:58.143000+01:00,2010-11-30 01:06:40.010000+01:00,,Resource12,2010-10-11 01:06:40.020000+02:00,task-704,T08 Draft and send request for advice,complete,Group 1,Resource12,2010-11-03 10:06:27.156000+01:00 +Internet,case-3877,2010-11-30 01:06:40+01:00,General,2011-03-01 09:23:58.143000+01:00,2010-11-30 01:06:40.010000+01:00,,Resource12,2010-10-11 01:06:40.020000+02:00,task-705,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-11-03 10:06:46.745000+01:00 +Internet,case-3877,2010-11-30 01:06:40+01:00,General,2011-03-01 09:23:58.143000+01:00,2010-11-30 01:06:40.010000+01:00,,Resource12,2010-10-11 01:06:40.020000+02:00,task-785,T09-4 Process or receive external advice from party 4,complete,Group 1,Resource12,2010-11-03 10:07:03.160000+01:00 +Internet,case-3877,2010-11-30 01:06:40+01:00,General,2011-03-01 09:23:58.143000+01:00,2010-11-30 01:06:40.010000+01:00,,Resource12,2010-10-11 01:06:40.020000+02:00,task-786,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-11-03 10:07:47.559000+01:00 +Internet,case-3877,2010-11-30 01:06:40+01:00,General,2011-03-01 09:23:58.143000+01:00,2010-11-30 01:06:40.010000+01:00,,Resource12,2010-10-11 01:06:40.020000+02:00,task-787,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2010-11-03 10:08:13.786000+01:00 +Internet,case-3879,2010-12-06 00:00:00+01:00,General,2010-12-06 09:01:13.501000+01:00,2010-12-06 00:00:00.010000+01:00,,Resource01,2010-10-11 00:00:00.020000+02:00,task-189,Confirmation of receipt,complete,EMPTY,Resource11,2010-10-27 09:27:51.856000+02:00 +Internet,case-3879,2010-12-06 00:00:00+01:00,General,2010-12-06 09:01:13.501000+01:00,2010-12-06 00:00:00.010000+01:00,,Resource01,2010-10-11 00:00:00.020000+02:00,task-532,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 11:23:25.112000+01:00 +Internet,case-3879,2010-12-06 00:00:00+01:00,General,2010-12-06 09:01:13.501000+01:00,2010-12-06 00:00:00.010000+01:00,,Resource01,2010-10-11 00:00:00.020000+02:00,task-533,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-04 15:03:15.752000+01:00 +Internet,case-3879,2010-12-06 00:00:00+01:00,General,2010-12-06 09:01:13.501000+01:00,2010-12-06 00:00:00.010000+01:00,,Resource01,2010-10-11 00:00:00.020000+02:00,task-972,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-04 15:03:49.437000+01:00 +Internet,case-3879,2010-12-06 00:00:00+01:00,General,2010-12-06 09:01:13.501000+01:00,2010-12-06 00:00:00.010000+01:00,,Resource01,2010-10-11 00:00:00.020000+02:00,task-873,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-26 09:30:16.271000+01:00 +Internet,case-3879,2010-12-06 00:00:00+01:00,General,2010-12-06 09:01:13.501000+01:00,2010-12-06 00:00:00.010000+01:00,,Resource01,2010-10-11 00:00:00.020000+02:00,task-2120,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 07:40:21.413000+01:00 +e-mail,case-3926,2010-12-09 00:00:00+01:00,Experts,2011-01-28 15:31:07.302000+01:00,2010-12-09 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-238,Confirmation of receipt,complete,Group 1,Resource02,2010-11-04 11:33:28.141000+01:00 +e-mail,case-3926,2010-12-09 00:00:00+01:00,Experts,2011-01-28 15:31:07.302000+01:00,2010-12-09 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-878,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-04 14:01:34.394000+01:00 +e-mail,case-3926,2010-12-09 00:00:00+01:00,Experts,2011-01-28 15:31:07.302000+01:00,2010-12-09 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-879,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-11-04 14:59:41.086000+01:00 +e-mail,case-3926,2010-12-09 00:00:00+01:00,Experts,2011-01-28 15:31:07.302000+01:00,2010-12-09 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-968,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-11-04 15:01:20.367000+01:00 +e-mail,case-3926,2010-12-09 00:00:00+01:00,Experts,2011-01-28 15:31:07.302000+01:00,2010-12-09 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-944,T03 Adjust confirmation of receipt,complete,Group 1,Resource02,2010-11-04 15:14:32.442000+01:00 +e-mail,case-3926,2010-12-09 00:00:00+01:00,Experts,2011-01-28 15:31:07.302000+01:00,2010-12-09 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-981,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-04 15:51:18.204000+01:00 +e-mail,case-3926,2010-12-09 00:00:00+01:00,Experts,2011-01-28 15:31:07.302000+01:00,2010-12-09 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-996,T03 Adjust confirmation of receipt,complete,Group 1,Resource02,2010-11-05 08:25:01.081000+01:00 +e-mail,case-3926,2010-12-09 00:00:00+01:00,Experts,2011-01-28 15:31:07.302000+01:00,2010-12-09 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-1010,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-05 09:34:08.144000+01:00 +e-mail,case-3926,2010-12-09 00:00:00+01:00,Experts,2011-01-28 15:31:07.302000+01:00,2010-12-09 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-1019,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-11 15:04:26.194000+01:00 +e-mail,case-3926,2010-12-09 00:00:00+01:00,Experts,2011-01-28 15:31:07.302000+01:00,2010-12-09 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-1405,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:09:08.525000+01:00 +e-mail,case-3927,2010-12-03 01:06:40+01:00,General,2011-09-02 11:03:10.777000+02:00,2010-12-03 01:06:40.010000+01:00,Group 5,Resource12,2010-10-08 01:06:40.020000+02:00,task-239,Confirmation of receipt,complete,Group 1,Resource15,2010-11-23 11:34:13.017000+01:00 +e-mail,case-3927,2010-12-03 01:06:40+01:00,General,2011-09-02 11:03:10.777000+02:00,2010-12-03 01:06:40.010000+01:00,Group 5,Resource12,2010-10-08 01:06:40.020000+02:00,task-1877,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 08:57:47.280000+01:00 +e-mail,case-3927,2010-12-03 01:06:40+01:00,General,2011-09-02 11:03:10.777000+02:00,2010-12-03 01:06:40.010000+01:00,Group 5,Resource12,2010-10-08 01:06:40.020000+02:00,task-2103,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-11-30 10:23:33.230000+01:00 +e-mail,case-3927,2010-12-03 01:06:40+01:00,General,2011-09-02 11:03:10.777000+02:00,2010-12-03 01:06:40.010000+01:00,Group 5,Resource12,2010-10-08 01:06:40.020000+02:00,task-2369,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:17:29.108000+01:00 +e-mail,case-3927,2010-12-03 01:06:40+01:00,General,2011-09-02 11:03:10.777000+02:00,2010-12-03 01:06:40.010000+01:00,Group 5,Resource12,2010-10-08 01:06:40.020000+02:00,task-1878,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-27 12:00:24.623000+02:00 +e-mail,case-3927,2010-12-03 01:06:40+01:00,General,2011-09-02 11:03:10.777000+02:00,2010-12-03 01:06:40.010000+01:00,Group 5,Resource12,2010-10-08 01:06:40.020000+02:00,task-22365,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-27 12:00:46.956000+02:00 +Desk,case-3961,2010-12-13 01:06:40+01:00,General,2011-01-14 15:34:24.686000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource07,2010-10-12 01:06:40.020000+02:00,task-276,Confirmation of receipt,complete,Group 1,Resource11,2010-10-27 08:59:50.876000+02:00 +Desk,case-3961,2010-12-13 01:06:40+01:00,General,2011-01-14 15:34:24.686000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource07,2010-10-12 01:06:40.020000+02:00,task-529,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-10-27 09:04:29.967000+02:00 +Desk,case-3961,2010-12-13 01:06:40+01:00,General,2011-01-14 15:34:24.686000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource07,2010-10-12 01:06:40.020000+02:00,task-530,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource11,2010-10-27 09:20:34.229000+02:00 +Desk,case-3961,2010-12-13 01:06:40+01:00,General,2011-01-14 15:34:24.686000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource07,2010-10-12 01:06:40.020000+02:00,task-531,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 08:42:39.946000+01:00 +Desk,case-3961,2010-12-13 01:06:40+01:00,General,2011-01-14 15:34:24.686000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource07,2010-10-12 01:06:40.020000+02:00,task-596,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 08:43:32.894000+01:00 +Desk,case-3961,2010-12-13 01:06:40+01:00,General,2011-01-14 15:34:24.686000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource07,2010-10-12 01:06:40.020000+02:00,task-528,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-04 11:39:31.978000+01:00 +Desk,case-3961,2010-12-13 01:06:40+01:00,General,2011-01-14 15:34:24.686000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource07,2010-10-12 01:06:40.020000+02:00,task-885,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 13:18:12.405000+01:00 +Desk,case-3961,2010-12-13 01:06:40+01:00,General,2011-01-14 15:34:24.686000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource07,2010-10-12 01:06:40.020000+02:00,task-934,T05 Print and send confirmation of receipt,complete,EMPTY,Resource27,2010-11-04 13:52:36.812000+01:00 +Internet,case-3983,2010-12-07 01:06:40+01:00,General,2010-12-20 12:50:32.733000+01:00,2010-12-07 01:06:40.010000+01:00,,Resource06,2010-10-12 01:06:40.020000+02:00,task-300,Confirmation of receipt,complete,Group 1,Resource06,2010-11-25 08:59:33.164000+01:00 +Internet,case-3983,2010-12-07 01:06:40+01:00,General,2010-12-20 12:50:32.733000+01:00,2010-12-07 01:06:40.010000+01:00,,Resource06,2010-10-12 01:06:40.020000+02:00,task-2018,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-11-25 09:01:56.987000+01:00 +Internet,case-3983,2010-12-07 01:06:40+01:00,General,2010-12-20 12:50:32.733000+01:00,2010-12-07 01:06:40.010000+01:00,,Resource06,2010-10-12 01:06:40.020000+02:00,task-2022,T03 Adjust confirmation of receipt,complete,Group 1,Resource06,2010-11-25 09:07:20.020000+01:00 +Internet,case-3983,2010-12-07 01:06:40+01:00,General,2010-12-20 12:50:32.733000+01:00,2010-12-07 01:06:40.010000+01:00,,Resource06,2010-10-12 01:06:40.020000+02:00,task-2024,T02 Check confirmation of receipt,complete,Group 4,Resource06,2010-11-25 09:07:47.085000+01:00 +Internet,case-3983,2010-12-07 01:06:40+01:00,General,2010-12-20 12:50:32.733000+01:00,2010-12-07 01:06:40.010000+01:00,,Resource06,2010-10-12 01:06:40.020000+02:00,task-2025,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2010-11-25 09:08:09.843000+01:00 +Internet,case-3983,2010-12-07 01:06:40+01:00,General,2010-12-20 12:50:32.733000+01:00,2010-12-07 01:06:40.010000+01:00,,Resource06,2010-10-12 01:06:40.020000+02:00,task-2019,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2010-11-25 09:08:35.547000+01:00 +Internet,case-3983,2010-12-07 01:06:40+01:00,General,2010-12-20 12:50:32.733000+01:00,2010-12-07 01:06:40.010000+01:00,,Resource06,2010-10-12 01:06:40.020000+02:00,task-2027,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2010-11-25 09:08:59.165000+01:00 +Internet,case-3983,2010-12-07 01:06:40+01:00,General,2010-12-20 12:50:32.733000+01:00,2010-12-07 01:06:40.010000+01:00,,Resource06,2010-10-12 01:06:40.020000+02:00,task-2026,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:31:08.264000+01:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-301,Confirmation of receipt,complete,Group 1,Resource09,2010-10-25 15:57:54.249000+02:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-479,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-10-25 16:13:31.442000+02:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-485,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource09,2010-10-26 09:38:40.195000+02:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-481,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource09,2010-10-26 09:39:17.902000+02:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-480,T08 Draft and send request for advice,complete,Group 1,Resource09,2010-10-26 09:41:04.891000+02:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-493,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource09,2010-10-26 09:42:16.765000+02:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-482,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource35,2010-11-02 15:47:29.459000+01:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-484,T07-4 Draft internal advice to hold for type 4,complete,Group 12,Resource32,2010-11-04 09:07:41.168000+01:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-483,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource32,2010-11-04 09:12:24.545000+01:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-478,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 09:34:05.717000+01:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-844,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2010-11-04 09:37:44.329000+01:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-845,T05 Print and send confirmation of receipt,complete,EMPTY,Resource27,2010-11-04 13:41:14.073000+01:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-839,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-04 13:56:19.742000+01:00 +Internet,case-3984,2010-12-15 01:06:40+01:00,General,2010-12-21 00:00:00.010000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource09,2010-10-15 01:06:40.020000+02:00,task-938,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2010-11-04 13:56:48.479000+01:00 +Internet,case-3987,2011-01-05 01:06:40+01:00,Experts,2011-01-05 15:59:41.857000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-14 01:06:40.020000+02:00,task-304,Confirmation of receipt,complete,Group 1,Resource08,2010-10-26 10:47:33.327000+02:00 +Internet,case-3987,2011-01-05 01:06:40+01:00,Experts,2011-01-05 15:59:41.857000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-14 01:06:40.020000+02:00,task-498,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-10-26 12:23:24.830000+02:00 +Internet,case-3987,2011-01-05 01:06:40+01:00,Experts,2011-01-05 15:59:41.857000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-14 01:06:40.020000+02:00,task-504,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-10-26 12:27:17.766000+02:00 +Internet,case-3987,2011-01-05 01:06:40+01:00,Experts,2011-01-05 15:59:41.857000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-14 01:06:40.020000+02:00,task-497,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-10-26 15:52:17.181000+02:00 +Internet,case-3987,2011-01-05 01:06:40+01:00,Experts,2011-01-05 15:59:41.857000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-14 01:06:40.020000+02:00,task-514,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-28 11:46:00.571000+02:00 +Internet,case-3987,2011-01-05 01:06:40+01:00,Experts,2011-01-05 15:59:41.857000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-14 01:06:40.020000+02:00,task-545,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-10-28 13:46:25.048000+02:00 +Internet,case-3988,2010-12-15 01:06:40+01:00,Experts,2010-12-03 13:08:58.576000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource02,2010-10-14 01:06:40.020000+02:00,task-306,Confirmation of receipt,complete,Group 1,Resource02,2010-11-08 13:51:30.397000+01:00 +Internet,case-3988,2010-12-15 01:06:40+01:00,Experts,2010-12-03 13:08:58.576000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource02,2010-10-14 01:06:40.020000+02:00,task-1174,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-11-09 08:46:13.771000+01:00 +Internet,case-3988,2010-12-15 01:06:40+01:00,Experts,2010-12-03 13:08:58.576000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource02,2010-10-14 01:06:40.020000+02:00,task-1226,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-11-09 08:47:00.517000+01:00 +Internet,case-3988,2010-12-15 01:06:40+01:00,Experts,2010-12-03 13:08:58.576000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource02,2010-10-14 01:06:40.020000+02:00,task-1228,T11 Create document X request unlicensed,complete,Group 1,Resource02,2010-11-09 12:03:37.792000+01:00 +Internet,case-3988,2010-12-15 01:06:40+01:00,Experts,2010-12-03 13:08:58.576000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource02,2010-10-14 01:06:40.020000+02:00,task-1263,T12 Check document X request unlicensed,complete,EMPTY,Resource24,2010-11-09 12:56:25.059000+01:00 +Internet,case-3988,2010-12-15 01:06:40+01:00,Experts,2010-12-03 13:08:58.576000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource02,2010-10-14 01:06:40.020000+02:00,task-1173,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:57:15.740000+01:00 +Internet,case-3988,2010-12-15 01:06:40+01:00,Experts,2010-12-03 13:08:58.576000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource02,2010-10-14 01:06:40.020000+02:00,task-1301,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:56:31.497000+01:00 +Internet,case-3988,2010-12-15 01:06:40+01:00,Experts,2010-12-03 13:08:58.576000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource02,2010-10-14 01:06:40.020000+02:00,task-1440,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:26:00.772000+01:00 +Internet,case-3988,2010-12-15 01:06:40+01:00,Experts,2010-12-03 13:08:58.576000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource02,2010-10-14 01:06:40.020000+02:00,task-1270,T13 Adjust document X request unlicensed,complete,Group 1,admin2,2010-12-03 13:08:59.345000+01:00 +Internet,case-3989,2010-12-10 01:06:40+01:00,General,2010-12-29 16:18:00.338000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-308,Confirmation of receipt,complete,Group 1,Resource12,2010-10-22 09:57:23.546000+02:00 +Internet,case-3989,2010-12-10 01:06:40+01:00,General,2010-12-29 16:18:00.338000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-382,T02 Check confirmation of receipt,complete,Group 4,Resource12,2010-10-22 09:57:46.254000+02:00 +Internet,case-3989,2010-12-10 01:06:40+01:00,General,2010-12-29 16:18:00.338000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-384,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2010-10-22 09:58:13.317000+02:00 +Internet,case-3989,2010-12-10 01:06:40+01:00,General,2010-12-29 16:18:00.338000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-385,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2010-10-22 09:58:35.137000+02:00 +Internet,case-3989,2010-12-10 01:06:40+01:00,General,2010-12-29 16:18:00.338000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-383,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-10-22 09:59:04.836000+02:00 +Internet,case-3989,2010-12-10 01:06:40+01:00,General,2010-12-29 16:18:00.338000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-386,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2010-10-22 09:59:36.800000+02:00 +Internet,case-3991,2010-12-10 01:06:40+01:00,General,2010-12-08 14:19:25.375000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource04,2010-10-15 01:06:40.020000+02:00,task-310,Confirmation of receipt,complete,Group 1,Resource04,2010-10-22 11:17:05.605000+02:00 +Internet,case-3991,2010-12-10 01:06:40+01:00,General,2010-12-08 14:19:25.375000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource04,2010-10-15 01:06:40.020000+02:00,task-410,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-10-22 11:23:44.282000+02:00 +Internet,case-3991,2010-12-10 01:06:40+01:00,General,2010-12-08 14:19:25.375000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource04,2010-10-15 01:06:40.020000+02:00,task-409,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-10-22 11:23:58.873000+02:00 +Internet,case-3991,2010-12-10 01:06:40+01:00,General,2010-12-08 14:19:25.375000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource04,2010-10-15 01:06:40.020000+02:00,task-412,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-10-22 11:24:08.474000+02:00 +Internet,case-3991,2010-12-10 01:06:40+01:00,General,2010-12-08 14:19:25.375000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource04,2010-10-15 01:06:40.020000+02:00,task-411,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-10-22 11:30:31.019000+02:00 +Internet,case-3991,2010-12-10 01:06:40+01:00,General,2010-12-08 14:19:25.375000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource04,2010-10-15 01:06:40.020000+02:00,task-413,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2010-10-22 11:34:43.024000+02:00 +Internet,case-3995,2011-01-05 01:06:40+01:00,Experts,2010-12-28 09:28:09.296000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-20 01:06:40.020000+02:00,task-320,Confirmation of receipt,complete,EMPTY,Resource08,2010-10-26 09:45:05.690000+02:00 +Internet,case-3995,2011-01-05 01:06:40+01:00,Experts,2010-12-28 09:28:09.296000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-20 01:06:40.020000+02:00,task-494,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-10-26 15:51:10.937000+02:00 +Internet,case-3995,2011-01-05 01:06:40+01:00,Experts,2010-12-28 09:28:09.296000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-20 01:06:40.020000+02:00,task-512,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-28 11:44:43.133000+02:00 +Internet,case-3995,2011-01-05 01:06:40+01:00,Experts,2010-12-28 09:28:09.296000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-20 01:06:40.020000+02:00,task-543,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-10-28 13:44:25.273000+02:00 +Internet,case-3995,2011-01-05 01:06:40+01:00,Experts,2010-12-28 09:28:09.296000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-20 01:06:40.020000+02:00,task-495,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-08 14:42:25.008000+01:00 +Internet,case-3995,2011-01-05 01:06:40+01:00,Experts,2010-12-28 09:28:09.296000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-10-20 01:06:40.020000+02:00,task-1184,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-08 15:17:20.902000+01:00 +Internet,case-3997,2010-12-12 01:06:40+01:00,Experts,2010-12-03 00:00:00.010000+01:00,2010-12-12 01:06:40.010000+01:00,,Resource17,2010-10-17 01:06:40.020000+02:00,task-322,Confirmation of receipt,complete,Group 1,Resource17,2010-11-04 14:30:42.541000+01:00 +Internet,case-3997,2010-12-12 01:06:40+01:00,Experts,2010-12-03 00:00:00.010000+01:00,2010-12-12 01:06:40.010000+01:00,,Resource17,2010-10-17 01:06:40.020000+02:00,task-947,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-11-04 14:31:21.178000+01:00 +Internet,case-3997,2010-12-12 01:06:40+01:00,Experts,2010-12-03 00:00:00.010000+01:00,2010-12-12 01:06:40.010000+01:00,,Resource17,2010-10-17 01:06:40.020000+02:00,task-948,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-11-04 14:31:40.155000+01:00 +Internet,case-3997,2010-12-12 01:06:40+01:00,Experts,2010-12-03 00:00:00.010000+01:00,2010-12-12 01:06:40.010000+01:00,,Resource17,2010-10-17 01:06:40.020000+02:00,task-946,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-11-18 11:31:22.936000+01:00 +Internet,case-3997,2010-12-12 01:06:40+01:00,Experts,2010-12-03 00:00:00.010000+01:00,2010-12-12 01:06:40.010000+01:00,,Resource17,2010-10-17 01:06:40.020000+02:00,task-1635,T04 Determine confirmation of receipt,complete,EMPTY,Resource02,2010-11-22 12:08:49.070000+01:00 +Internet,case-3997,2010-12-12 01:06:40+01:00,Experts,2010-12-03 00:00:00.010000+01:00,2010-12-12 01:06:40.010000+01:00,,Resource17,2010-10-17 01:06:40.020000+02:00,task-1806,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:15:04.106000+01:00 +Internet,case-3998,2010-12-15 01:06:40+01:00,Experts,2010-12-15 15:27:27.932000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-323,Confirmation of receipt,complete,EMPTY,Resource08,2010-10-26 09:18:14.992000+02:00 +Internet,case-3998,2010-12-15 01:06:40+01:00,Experts,2010-12-15 15:27:27.932000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-491,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-10-26 15:51:51.369000+02:00 +Internet,case-3998,2010-12-15 01:06:40+01:00,Experts,2010-12-15 15:27:27.932000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-513,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-28 11:45:05.599000+02:00 +Internet,case-3998,2010-12-15 01:06:40+01:00,Experts,2010-12-15 15:27:27.932000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-544,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-10-28 13:45:19.365000+02:00 +Internet,case-3998,2010-12-15 01:06:40+01:00,Experts,2010-12-15 15:27:27.932000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-492,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-02 14:38:22.827000+01:00 +Internet,case-3998,2010-12-15 01:06:40+01:00,Experts,2010-12-15 15:27:27.932000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-724,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-02 14:38:47.479000+01:00 +Internet,case-4000,2010-12-15 01:06:40+01:00,Experts,2010-12-01 16:06:48.028000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource17,2010-10-18 01:06:40.020000+02:00,task-325,Confirmation of receipt,complete,Group 1,Resource17,2010-11-04 11:45:14.018000+01:00 +Internet,case-4000,2010-12-15 01:06:40+01:00,Experts,2010-12-01 16:06:48.028000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource17,2010-10-18 01:06:40.020000+02:00,task-891,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-11-04 11:45:48.226000+01:00 +Internet,case-4000,2010-12-15 01:06:40+01:00,Experts,2010-12-01 16:06:48.028000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource17,2010-10-18 01:06:40.020000+02:00,task-892,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-11-04 11:46:07.945000+01:00 +Internet,case-4000,2010-12-15 01:06:40+01:00,Experts,2010-12-01 16:06:48.028000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource17,2010-10-18 01:06:40.020000+02:00,task-890,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-11-18 10:35:48.552000+01:00 +Internet,case-4000,2010-12-15 01:06:40+01:00,Experts,2010-12-01 16:06:48.028000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource17,2010-10-18 01:06:40.020000+02:00,task-1630,T03 Adjust confirmation of receipt,complete,Group 1,Resource17,2010-11-18 10:40:05.522000+01:00 +Internet,case-4000,2010-12-15 01:06:40+01:00,Experts,2010-12-01 16:06:48.028000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource17,2010-10-18 01:06:40.020000+02:00,task-1631,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-11-18 10:44:34.458000+01:00 +Internet,case-4000,2010-12-15 01:06:40+01:00,Experts,2010-12-01 16:06:48.028000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource17,2010-10-18 01:06:40.020000+02:00,task-1633,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-24 11:14:28.576000+01:00 +Internet,case-4000,2010-12-15 01:06:40+01:00,Experts,2010-12-01 16:06:48.028000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource17,2010-10-18 01:06:40.020000+02:00,task-1966,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:26:54.924000+01:00 +Internet,case-4008,2010-12-16 00:00:00+01:00,General,2010-10-26 15:28:42.703000+02:00,2010-12-16 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-346,Confirmation of receipt,complete,Group 1,admin2,2010-10-26 15:28:43.424000+02:00 +Internet,case-4010,2010-12-13 01:06:40+01:00,Experts,2010-12-14 16:12:14.310000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-348,Confirmation of receipt,complete,Group 1,Resource08,2010-10-26 11:03:01.924000+02:00 +Internet,case-4010,2010-12-13 01:06:40+01:00,Experts,2010-12-14 16:12:14.310000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-500,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-10-26 15:52:41.293000+02:00 +Internet,case-4010,2010-12-13 01:06:40+01:00,Experts,2010-12-14 16:12:14.310000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-515,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-10-28 11:46:26.703000+02:00 +Internet,case-4010,2010-12-13 01:06:40+01:00,Experts,2010-12-14 16:12:14.310000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-547,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-10-28 13:47:04.666000+02:00 +Internet,case-4010,2010-12-13 01:06:40+01:00,Experts,2010-12-14 16:12:14.310000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-501,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-04 11:36:38.175000+01:00 +Internet,case-4010,2010-12-13 01:06:40+01:00,Experts,2010-12-14 16:12:14.310000+01:00,2010-12-13 01:06:40.010000+01:00,,Resource08,2010-10-18 01:06:40.020000+02:00,task-883,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-04 11:36:57.035000+01:00 +Internet,case-4011,2010-12-14 01:06:40+01:00,General,2010-12-10 14:12:45.513000+01:00,2010-12-14 01:06:40.010000+01:00,,Resource07,2010-10-21 01:06:40.020000+02:00,task-349,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-08 09:18:09.532000+01:00 +Internet,case-4011,2010-12-14 01:06:40+01:00,General,2010-12-10 14:12:45.513000+01:00,2010-12-14 01:06:40.010000+01:00,,Resource07,2010-10-21 01:06:40.020000+02:00,task-1082,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-08 09:18:29.688000+01:00 +Internet,case-4011,2010-12-14 01:06:40+01:00,General,2010-12-10 14:12:45.513000+01:00,2010-12-14 01:06:40.010000+01:00,,Resource07,2010-10-21 01:06:40.020000+02:00,task-1083,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-08 09:18:55.857000+01:00 +Internet,case-4011,2010-12-14 01:06:40+01:00,General,2010-12-10 14:12:45.513000+01:00,2010-12-14 01:06:40.010000+01:00,,Resource07,2010-10-21 01:06:40.020000+02:00,task-1081,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-09 08:13:59.914000+01:00 +Internet,case-4011,2010-12-14 01:06:40+01:00,General,2010-12-10 14:12:45.513000+01:00,2010-12-14 01:06:40.010000+01:00,,Resource07,2010-10-21 01:06:40.020000+02:00,task-1222,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-11-29 14:58:20.142000+01:00 +Internet,case-4011,2010-12-14 01:06:40+01:00,General,2010-12-10 14:12:45.513000+01:00,2010-12-14 01:06:40.010000+01:00,,Resource07,2010-10-21 01:06:40.020000+02:00,task-2250,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-11-29 15:05:45.486000+01:00 +Internet,case-4011,2010-12-14 01:06:40+01:00,General,2010-12-10 14:12:45.513000+01:00,2010-12-14 01:06:40.010000+01:00,,Resource07,2010-10-21 01:06:40.020000+02:00,task-2258,T03 Adjust confirmation of receipt,complete,Group 1,Resource07,2010-12-10 08:26:07.397000+01:00 +Internet,case-4011,2010-12-14 01:06:40+01:00,General,2010-12-10 14:12:45.513000+01:00,2010-12-14 01:06:40.010000+01:00,,Resource07,2010-10-21 01:06:40.020000+02:00,task-3534,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-10 08:27:33.436000+01:00 +Internet,case-4011,2010-12-14 01:06:40+01:00,General,2010-12-10 14:12:45.513000+01:00,2010-12-14 01:06:40.010000+01:00,,Resource07,2010-10-21 01:06:40.020000+02:00,task-3535,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-10 08:28:24.637000+01:00 +Internet,case-4011,2010-12-14 01:06:40+01:00,General,2010-12-10 14:12:45.513000+01:00,2010-12-14 01:06:40.010000+01:00,,Resource07,2010-10-21 01:06:40.020000+02:00,task-3536,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-10 08:28:35.351000+01:00 +Internet,case-4012,2010-12-15 01:06:40+01:00,General,2010-12-10 14:08:36.611000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource01,2010-10-20 01:06:40.020000+02:00,task-351,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-08 09:42:06.196000+01:00 +Internet,case-4012,2010-12-15 01:06:40+01:00,General,2010-12-10 14:08:36.611000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource01,2010-10-20 01:06:40.020000+02:00,task-1094,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-08 09:42:23.986000+01:00 +Internet,case-4012,2010-12-15 01:06:40+01:00,General,2010-12-10 14:08:36.611000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource01,2010-10-20 01:06:40.020000+02:00,task-1095,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-08 09:43:14.965000+01:00 +Internet,case-4012,2010-12-15 01:06:40+01:00,General,2010-12-10 14:08:36.611000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource01,2010-10-20 01:06:40.020000+02:00,task-1093,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-11-24 11:31:26.888000+01:00 +Internet,case-4012,2010-12-15 01:06:40+01:00,General,2010-12-10 14:08:36.611000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource01,2010-10-20 01:06:40.020000+02:00,task-1971,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-11-29 14:50:55.327000+01:00 +Internet,case-4012,2010-12-15 01:06:40+01:00,General,2010-12-10 14:08:36.611000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource01,2010-10-20 01:06:40.020000+02:00,task-2248,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-11-29 15:41:08.959000+01:00 +Internet,case-4013,2011-02-25 01:06:40+01:00,Experts,2010-12-24 15:25:31.676000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-352,Confirmation of receipt,complete,Group 1,Resource17,2010-11-11 15:05:22.193000+01:00 +Internet,case-4013,2011-02-25 01:06:40+01:00,Experts,2010-12-24 15:25:31.676000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-1407,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-11-11 15:06:10.159000+01:00 +Internet,case-4013,2011-02-25 01:06:40+01:00,Experts,2010-12-24 15:25:31.676000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-1408,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-11-11 15:06:32.510000+01:00 +Internet,case-4013,2011-02-25 01:06:40+01:00,Experts,2010-12-24 15:25:31.676000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-1406,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-11-16 13:32:33.837000+01:00 +Internet,case-4013,2011-02-25 01:06:40+01:00,Experts,2010-12-24 15:25:31.676000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-1531,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-22 08:26:54.898000+01:00 +Internet,case-4013,2011-02-25 01:06:40+01:00,Experts,2010-12-24 15:25:31.676000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-1785,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 08:59:53.407000+01:00 +Internet,case-4014,2010-12-16 00:00:00+01:00,General,2010-12-02 13:12:39.256000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-354,Confirmation of receipt,complete,Group 1,Resource11,2010-11-01 11:22:55.945000+01:00 +Internet,case-4014,2010-12-16 00:00:00+01:00,General,2010-12-02 13:12:39.256000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-612,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 11:25:03.686000+01:00 +Internet,case-4014,2010-12-16 00:00:00+01:00,General,2010-12-02 13:12:39.256000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-613,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 11:25:43.152000+01:00 +Internet,case-4014,2010-12-16 00:00:00+01:00,General,2010-12-02 13:12:39.256000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-611,T02 Check confirmation of receipt,complete,EMPTY,Resource21,2010-11-01 11:45:22.431000+01:00 +Internet,case-4014,2010-12-16 00:00:00+01:00,General,2010-12-02 13:12:39.256000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-625,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-01 12:39:19.161000+01:00 +Internet,case-4014,2010-12-16 00:00:00+01:00,General,2010-12-02 13:12:39.256000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-638,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-03 08:45:12.305000+01:00 +Internet,case-4015,2010-12-16 00:00:00+01:00,General,2010-11-04 15:37:38.995000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-355,Confirmation of receipt,complete,EMPTY,admin2,2010-11-04 15:37:39.639000+01:00 +Post,case-4017,2010-12-16 00:00:00+01:00,General,2010-12-07 14:49:47.626000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-18 00:00:00.020000+02:00,task-357,Confirmation of receipt,complete,Group 1,Resource11,2010-11-01 12:16:04.360000+01:00 +Post,case-4017,2010-12-16 00:00:00+01:00,General,2010-12-07 14:49:47.626000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-18 00:00:00.020000+02:00,task-628,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 12:19:33.758000+01:00 +Post,case-4017,2010-12-16 00:00:00+01:00,General,2010-12-07 14:49:47.626000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-18 00:00:00.020000+02:00,task-629,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 12:21:48.593000+01:00 +Post,case-4017,2010-12-16 00:00:00+01:00,General,2010-12-07 14:49:47.626000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-18 00:00:00.020000+02:00,task-627,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-01 12:40:15.155000+01:00 +Post,case-4017,2010-12-16 00:00:00+01:00,General,2010-12-07 14:49:47.626000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-18 00:00:00.020000+02:00,task-639,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-01 12:52:53.315000+01:00 +Post,case-4017,2010-12-16 00:00:00+01:00,General,2010-12-07 14:49:47.626000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-18 00:00:00.020000+02:00,task-654,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-03 08:46:13.204000+01:00 +Post,case-4020,2010-12-16 00:00:00+01:00,General,2010-12-02 13:54:08.640000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-364,Confirmation of receipt,complete,Group 1,Resource11,2010-11-01 12:46:24.892000+01:00 +Post,case-4020,2010-12-16 00:00:00+01:00,General,2010-12-02 13:54:08.640000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-643,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 12:46:55.737000+01:00 +Post,case-4020,2010-12-16 00:00:00+01:00,General,2010-12-02 13:54:08.640000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-644,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 12:47:52.420000+01:00 +Post,case-4020,2010-12-16 00:00:00+01:00,General,2010-12-02 13:54:08.640000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-642,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:29:40.881000+01:00 +Post,case-4020,2010-12-16 00:00:00+01:00,General,2010-12-02 13:54:08.640000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-853,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-09 11:20:01.131000+01:00 +Post,case-4020,2010-12-16 00:00:00+01:00,General,2010-12-02 13:54:08.640000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-1258,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-11 12:53:21.394000+01:00 +Internet,case-4021,2010-12-16 00:00:00+01:00,General,2010-12-06 15:58:40.035000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-12 00:00:00.020000+02:00,task-366,Confirmation of receipt,complete,Group 1,Resource11,2010-11-01 13:55:26.056000+01:00 +Internet,case-4021,2010-12-16 00:00:00+01:00,General,2010-12-06 15:58:40.035000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-12 00:00:00.020000+02:00,task-663,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 13:56:49.019000+01:00 +Internet,case-4021,2010-12-16 00:00:00+01:00,General,2010-12-06 15:58:40.035000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-12 00:00:00.020000+02:00,task-664,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 13:59:17.587000+01:00 +Internet,case-4021,2010-12-16 00:00:00+01:00,General,2010-12-06 15:58:40.035000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-12 00:00:00.020000+02:00,task-665,T16 Report reasons to hold request,complete,Group 1,Resource11,2010-11-01 14:08:01.278000+01:00 +Internet,case-4021,2010-12-16 00:00:00+01:00,General,2010-12-06 15:58:40.035000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-12 00:00:00.020000+02:00,task-666,T17 Check report Y to stop indication,complete,Group 4,Resource11,2010-11-01 14:21:05.870000+01:00 +Internet,case-4021,2010-12-16 00:00:00+01:00,General,2010-12-06 15:58:40.035000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-12 00:00:00.020000+02:00,task-667,T19 Determine report Y to stop indication,complete,Group 3,Resource11,2010-11-01 14:22:02.839000+01:00 +Internet,case-4021,2010-12-16 00:00:00+01:00,General,2010-12-06 15:58:40.035000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-12 00:00:00.020000+02:00,task-668,T20 Print report Y to stop indication,complete,Group 2,Resource11,2010-11-01 14:22:22.753000+01:00 +Internet,case-4021,2010-12-16 00:00:00+01:00,General,2010-12-06 15:58:40.035000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-12 00:00:00.020000+02:00,task-662,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-09 08:47:01.792000+01:00 +Internet,case-4021,2010-12-16 00:00:00+01:00,General,2010-12-06 15:58:40.035000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-12 00:00:00.020000+02:00,task-1229,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-09 13:04:41.176000+01:00 +Internet,case-4021,2010-12-16 00:00:00+01:00,General,2010-12-06 15:58:40.035000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource01,2010-10-12 00:00:00.020000+02:00,task-1272,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-11 12:54:27.065000+01:00 +Internet,case-4024,2010-12-16 00:00:00+01:00,Experts,2010-12-01 00:00:00.010000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource17,2010-10-20 00:00:00.020000+02:00,task-369,Confirmation of receipt,complete,Group 1,admin2,2010-12-20 12:10:34.164000+01:00 +Post,case-4025,2010-12-16 00:00:00+01:00,General,2010-12-06 08:34:01.693000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-370,Confirmation of receipt,complete,Group 1,Resource11,2010-11-01 15:05:27.606000+01:00 +Post,case-4025,2010-12-16 00:00:00+01:00,General,2010-12-06 08:34:01.693000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-676,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-01 15:05:48.091000+01:00 +Post,case-4025,2010-12-16 00:00:00+01:00,General,2010-12-06 08:34:01.693000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-677,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-01 15:06:29.816000+01:00 +Post,case-4025,2010-12-16 00:00:00+01:00,General,2010-12-06 08:34:01.693000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-675,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-11-01 15:06:53.096000+01:00 +Post,case-4025,2010-12-16 00:00:00+01:00,General,2010-12-06 08:34:01.693000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-679,T03 Adjust confirmation of receipt,complete,Group 1,Resource07,2010-12-02 10:03:09.970000+01:00 +Post,case-4025,2010-12-16 00:00:00+01:00,General,2010-12-06 08:34:01.693000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-2615,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-02 10:03:48.065000+01:00 +Post,case-4025,2010-12-16 00:00:00+01:00,General,2010-12-06 08:34:01.693000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-2616,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-02 10:04:10.288000+01:00 +Post,case-4025,2010-12-16 00:00:00+01:00,General,2010-12-06 08:34:01.693000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-2617,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-02 10:10:12.758000+01:00 +Post,case-4027,2010-12-16 01:06:40+01:00,General,2010-12-02 14:40:49.817000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource07,2010-10-01 01:06:40.020000+02:00,task-373,Confirmation of receipt,complete,Group 1,Resource11,2010-11-02 07:32:35.409000+01:00 +Post,case-4027,2010-12-16 01:06:40+01:00,General,2010-12-02 14:40:49.817000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource07,2010-10-01 01:06:40.020000+02:00,task-693,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-02 07:33:03.163000+01:00 +Post,case-4027,2010-12-16 01:06:40+01:00,General,2010-12-02 14:40:49.817000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource07,2010-10-01 01:06:40.020000+02:00,task-694,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-02 07:33:46.468000+01:00 +Post,case-4027,2010-12-16 01:06:40+01:00,General,2010-12-02 14:40:49.817000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource07,2010-10-01 01:06:40.020000+02:00,task-692,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:16:16.748000+01:00 +Post,case-4027,2010-12-16 01:06:40+01:00,General,2010-12-02 14:40:49.817000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource07,2010-10-01 01:06:40.020000+02:00,task-848,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-11-04 11:34:39.983000+01:00 +Post,case-4027,2010-12-16 01:06:40+01:00,General,2010-12-02 14:40:49.817000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource07,2010-10-01 01:06:40.020000+02:00,task-880,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-04 17:04:13.689000+01:00 +Post,case-4028,2010-12-16 00:00:00+01:00,General,2010-12-02 14:23:04.930000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-01 00:00:00.020000+02:00,task-376,Confirmation of receipt,complete,Group 1,Resource01,2010-11-02 12:42:19.582000+01:00 +Post,case-4028,2010-12-16 00:00:00+01:00,General,2010-12-02 14:23:04.930000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-01 00:00:00.020000+02:00,task-716,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-11-02 12:45:03.277000+01:00 +Post,case-4028,2010-12-16 00:00:00+01:00,General,2010-12-02 14:23:04.930000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-01 00:00:00.020000+02:00,task-717,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-11-02 12:46:01.076000+01:00 +Post,case-4028,2010-12-16 00:00:00+01:00,General,2010-12-02 14:23:04.930000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-01 00:00:00.020000+02:00,task-715,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:01:23.772000+01:00 +Post,case-4028,2010-12-16 00:00:00+01:00,General,2010-12-02 14:23:04.930000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-01 00:00:00.020000+02:00,task-847,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 15:27:23.404000+01:00 +Post,case-4028,2010-12-16 00:00:00+01:00,General,2010-12-02 14:23:04.930000+01:00,2010-12-16 00:00:00.010000+01:00,,Resource07,2010-10-01 00:00:00.020000+02:00,task-993,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2010-11-11 12:52:39.426000+01:00 +e-mail,case-4057,2010-12-20 00:00:00+01:00,General,2010-12-09 14:16:49.836000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-451,Confirmation of receipt,complete,Group 1,Resource11,2010-11-03 07:29:21.044000+01:00 +e-mail,case-4057,2010-12-20 00:00:00+01:00,General,2010-12-09 14:16:49.836000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-741,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-03 07:29:43.407000+01:00 +e-mail,case-4057,2010-12-20 00:00:00+01:00,General,2010-12-09 14:16:49.836000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-742,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-03 07:34:41.207000+01:00 +e-mail,case-4057,2010-12-20 00:00:00+01:00,General,2010-12-09 14:16:49.836000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-740,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-11-03 07:43:45.093000+01:00 +e-mail,case-4057,2010-12-20 00:00:00+01:00,General,2010-12-09 14:16:49.836000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-750,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-11-03 07:52:15.597000+01:00 +e-mail,case-4057,2010-12-20 00:00:00+01:00,General,2010-12-09 14:16:49.836000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-754,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:25:04.170000+01:00 +e-mail,case-4057,2010-12-20 00:00:00+01:00,General,2010-12-09 14:16:49.836000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-851,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-11 14:56:32.965000+01:00 +e-mail,case-4057,2010-12-20 00:00:00+01:00,General,2010-12-09 14:16:49.836000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-12 00:00:00.020000+02:00,task-1403,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:06:20.910000+01:00 +e-mail,case-4058,2010-12-20 00:00:00+01:00,General,2010-12-09 13:44:04.791000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-452,Confirmation of receipt,complete,Group 1,Resource11,2010-11-03 07:58:51.869000+01:00 +e-mail,case-4058,2010-12-20 00:00:00+01:00,General,2010-12-09 13:44:04.791000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-756,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-03 07:59:55.594000+01:00 +e-mail,case-4058,2010-12-20 00:00:00+01:00,General,2010-12-09 13:44:04.791000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-757,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-03 08:00:44.893000+01:00 +e-mail,case-4058,2010-12-20 00:00:00+01:00,General,2010-12-09 13:44:04.791000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-755,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:20:57.159000+01:00 +e-mail,case-4058,2010-12-20 00:00:00+01:00,General,2010-12-09 13:44:04.791000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-850,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-11 14:38:59.844000+01:00 +e-mail,case-4058,2010-12-20 00:00:00+01:00,General,2010-12-09 13:44:04.791000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-1401,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:20:22.813000+01:00 +e-mail,case-4059,2010-12-20 00:00:00+01:00,General,2010-11-30 12:43:36.529000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-464,Confirmation of receipt,complete,Group 1,Resource11,2010-11-03 08:28:13.934000+01:00 +e-mail,case-4059,2010-12-20 00:00:00+01:00,General,2010-11-30 12:43:36.529000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-767,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-03 08:29:04.356000+01:00 +e-mail,case-4059,2010-12-20 00:00:00+01:00,General,2010-11-30 12:43:36.529000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-768,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-03 08:29:32.087000+01:00 +e-mail,case-4059,2010-12-20 00:00:00+01:00,General,2010-11-30 12:43:36.529000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-766,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:26:39.061000+01:00 +e-mail,case-4059,2010-12-20 00:00:00+01:00,General,2010-11-30 12:43:36.529000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-852,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-11 14:57:37.754000+01:00 +e-mail,case-4059,2010-12-20 00:00:00+01:00,General,2010-11-30 12:43:36.529000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource07,2010-10-04 00:00:00.020000+02:00,task-1404,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:07:03.744000+01:00 +e-mail,case-4060,2010-12-20 00:00:00+01:00,General,2010-12-02 12:43:39.676000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-465,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-08 10:25:51.042000+01:00 +e-mail,case-4060,2010-12-20 00:00:00+01:00,General,2010-12-02 12:43:39.676000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-1122,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-08 10:26:14.161000+01:00 +e-mail,case-4060,2010-12-20 00:00:00+01:00,General,2010-12-02 12:43:39.676000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-1123,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-08 10:26:42.087000+01:00 +e-mail,case-4060,2010-12-20 00:00:00+01:00,General,2010-12-02 12:43:39.676000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-1121,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 08:56:40.517000+01:00 +e-mail,case-4060,2010-12-20 00:00:00+01:00,General,2010-12-02 12:43:39.676000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-2101,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-11-26 15:42:09.276000+01:00 +e-mail,case-4060,2010-12-20 00:00:00+01:00,General,2010-12-02 12:43:39.676000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-2174,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-11-26 15:47:51.848000+01:00 +e-mail,case-4061,2010-12-20 00:00:00+01:00,General,2010-12-03 10:33:27.505000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-466,Confirmation of receipt,complete,Group 1,Resource11,2010-11-04 08:33:20.405000+01:00 +e-mail,case-4061,2010-12-20 00:00:00+01:00,General,2010-12-03 10:33:27.505000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-827,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-04 08:33:48.717000+01:00 +e-mail,case-4061,2010-12-20 00:00:00+01:00,General,2010-12-03 10:33:27.505000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-828,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-04 08:34:22.793000+01:00 +e-mail,case-4061,2010-12-20 00:00:00+01:00,General,2010-12-03 10:33:27.505000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-826,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 10:33:02.334000+01:00 +e-mail,case-4061,2010-12-20 00:00:00+01:00,General,2010-12-03 10:33:27.505000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-854,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 11:51:09.059000+01:00 +e-mail,case-4061,2010-12-20 00:00:00+01:00,General,2010-12-03 10:33:27.505000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-04 00:00:00.020000+02:00,task-902,T05 Print and send confirmation of receipt,complete,EMPTY,Resource27,2010-11-04 13:46:12.386000+01:00 +e-mail,case-4063,2010-12-20 00:00:00+01:00,General,2010-12-10 09:44:08.348000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-468,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-04 10:42:56.993000+01:00 +e-mail,case-4063,2010-12-20 00:00:00+01:00,General,2010-12-10 09:44:08.348000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-857,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-04 10:44:29.599000+01:00 +e-mail,case-4063,2010-12-20 00:00:00+01:00,General,2010-12-10 09:44:08.348000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-858,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-04 10:45:04.398000+01:00 +e-mail,case-4063,2010-12-20 00:00:00+01:00,General,2010-12-10 09:44:08.348000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-856,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 11:24:06.515000+01:00 +e-mail,case-4063,2010-12-20 00:00:00+01:00,General,2010-12-10 09:44:08.348000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-874,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-04 11:30:38.645000+01:00 +e-mail,case-4063,2010-12-20 00:00:00+01:00,General,2010-12-10 09:44:08.348000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource11,2010-10-04 00:00:00.020000+02:00,task-877,T05 Print and send confirmation of receipt,complete,EMPTY,Resource27,2010-11-04 13:38:23.965000+01:00 +Post,case-4071,2010-12-20 00:00:00+01:00,General,2010-12-03 14:17:45.760000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-08 00:00:00.020000+02:00,task-476,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-08 09:58:52.315000+01:00 +Post,case-4071,2010-12-20 00:00:00+01:00,General,2010-12-03 14:17:45.760000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-08 00:00:00.020000+02:00,task-1108,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-08 09:59:08.857000+01:00 +Post,case-4071,2010-12-20 00:00:00+01:00,General,2010-12-03 14:17:45.760000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-08 00:00:00.020000+02:00,task-1109,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-08 09:59:43.904000+01:00 +Post,case-4071,2010-12-20 00:00:00+01:00,General,2010-12-03 14:17:45.760000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-08 00:00:00.020000+02:00,task-1107,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-25 15:51:46.498000+01:00 +Post,case-4071,2010-12-20 00:00:00+01:00,General,2010-12-03 14:17:45.760000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-08 00:00:00.020000+02:00,task-2061,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-01 10:14:30.086000+01:00 +Post,case-4071,2010-12-20 00:00:00+01:00,General,2010-12-03 14:17:45.760000+01:00,2010-12-20 00:00:00.010000+01:00,,Resource01,2010-10-08 00:00:00.020000+02:00,task-2511,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-03 13:34:06.358000+01:00 +Internet,case-4077,2010-12-21 01:06:40+01:00,General,2010-12-22 15:29:11.843000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource09,2010-10-21 01:06:40.020000+02:00,task-490,Confirmation of receipt,complete,Group 1,Resource08,2010-11-05 11:42:28.549000+01:00 +Internet,case-4077,2010-12-21 01:06:40+01:00,General,2010-12-22 15:29:11.843000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource09,2010-10-21 01:06:40.020000+02:00,task-1035,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:56:48.464000+01:00 +Internet,case-4077,2010-12-21 01:06:40+01:00,General,2010-12-22 15:29:11.843000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource09,2010-10-21 01:06:40.020000+02:00,task-1299,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:48:36.475000+01:00 +Internet,case-4077,2010-12-21 01:06:40+01:00,General,2010-12-22 15:29:11.843000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource09,2010-10-21 01:06:40.020000+02:00,task-1435,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:23:00.561000+01:00 +Internet,case-4077,2010-12-21 01:06:40+01:00,General,2010-12-22 15:29:11.843000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource09,2010-10-21 01:06:40.020000+02:00,task-1036,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-17 12:06:19.161000+01:00 +Internet,case-4077,2010-12-21 01:06:40+01:00,General,2010-12-22 15:29:11.843000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource09,2010-10-21 01:06:40.020000+02:00,task-1564,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2010-11-17 12:06:46.426000+01:00 +Internet,case-4081,2010-12-21 01:06:40+01:00,Experts,2010-11-30 15:33:33.288000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-11 01:06:40.020000+02:00,task-508,Confirmation of receipt,complete,Group 1,Resource08,2010-11-05 08:58:23.197000+01:00 +Internet,case-4081,2010-12-21 01:06:40+01:00,Experts,2010-11-30 15:33:33.288000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-11 01:06:40.020000+02:00,task-1011,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-05 09:39:29.677000+01:00 +Internet,case-4081,2010-12-21 01:06:40+01:00,Experts,2010-11-30 15:33:33.288000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-11 01:06:40.020000+02:00,task-1023,T03 Adjust confirmation of receipt,complete,Group 1,Resource08,2010-11-05 11:22:11.329000+01:00 +Internet,case-4081,2010-12-21 01:06:40+01:00,Experts,2010-11-30 15:33:33.288000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-11 01:06:40.020000+02:00,task-1032,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:45:27.109000+01:00 +Internet,case-4081,2010-12-21 01:06:40+01:00,Experts,2010-11-30 15:33:33.288000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-11 01:06:40.020000+02:00,task-1297,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 15:02:26.576000+01:00 +Internet,case-4081,2010-12-21 01:06:40+01:00,Experts,2010-11-30 15:33:33.288000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-11 01:06:40.020000+02:00,task-1443,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:29:07.375000+01:00 +Internet,case-4081,2010-12-21 01:06:40+01:00,Experts,2010-11-30 15:33:33.288000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-11 01:06:40.020000+02:00,task-1012,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-18 12:24:28.715000+01:00 +Internet,case-4081,2010-12-21 01:06:40+01:00,Experts,2010-11-30 15:33:33.288000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-11 01:06:40.020000+02:00,task-1644,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-18 12:24:43.413000+01:00 +Internet,case-4083,2010-12-21 00:00:00+01:00,General,2011-01-13 08:57:53.945000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource05,2010-10-21 00:00:00.020000+02:00,task-511,Confirmation of receipt,complete,Group 1,Resource05,2010-11-09 08:46:13.078000+01:00 +Internet,case-4083,2010-12-21 00:00:00+01:00,General,2011-01-13 08:57:53.945000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource05,2010-10-21 00:00:00.020000+02:00,task-1227,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-11-09 08:49:59.813000+01:00 +Internet,case-4083,2010-12-21 00:00:00+01:00,General,2011-01-13 08:57:53.945000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource05,2010-10-21 00:00:00.020000+02:00,task-1230,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-11-09 08:51:09.549000+01:00 +Internet,case-4083,2010-12-21 00:00:00+01:00,General,2011-01-13 08:57:53.945000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource05,2010-10-21 00:00:00.020000+02:00,task-1225,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 14:23:14.328000+01:00 +Internet,case-4083,2010-12-21 00:00:00+01:00,General,2011-01-13 08:57:53.945000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource05,2010-10-21 00:00:00.020000+02:00,task-1279,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:52:24.857000+01:00 +Internet,case-4083,2010-12-21 00:00:00+01:00,General,2011-01-13 08:57:53.945000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource05,2010-10-21 00:00:00.020000+02:00,task-1438,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:28:14.641000+01:00 +Internet,case-4084,2010-12-21 00:00:00+01:00,General,2010-12-20 12:38:26.767000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-516,Confirmation of receipt,complete,Group 1,Resource09,2010-11-04 15:18:51.161000+01:00 +Internet,case-4084,2010-12-21 00:00:00+01:00,General,2010-12-20 12:38:26.767000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-984,T02 Check confirmation of receipt,complete,EMPTY,Resource09,2010-11-09 08:41:47.429000+01:00 +Internet,case-4084,2010-12-21 00:00:00+01:00,General,2010-12-20 12:38:26.767000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-985,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-09 08:58:12.628000+01:00 +Internet,case-4084,2010-12-21 00:00:00+01:00,General,2010-12-20 12:38:26.767000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-1223,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2010-11-16 12:26:36.800000+01:00 +Internet,case-4084,2010-12-21 00:00:00+01:00,General,2010-12-20 12:38:26.767000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-1526,T02 Check confirmation of receipt,complete,EMPTY,Resource09,2010-11-16 13:56:09.421000+01:00 +Internet,case-4084,2010-12-21 00:00:00+01:00,General,2010-12-20 12:38:26.767000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-1533,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2010-11-16 13:56:45.290000+01:00 +Internet,case-4084,2010-12-21 00:00:00+01:00,General,2010-12-20 12:38:26.767000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-1534,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-17 13:43:42.511000+01:00 +Internet,case-4084,2010-12-21 00:00:00+01:00,General,2010-12-20 12:38:26.767000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-1580,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-22 08:30:48.002000+01:00 +Internet,case-4084,2010-12-21 00:00:00+01:00,General,2010-12-20 12:38:26.767000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-1787,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:02:53.720000+01:00 +Internet,case-4084,2010-12-21 00:00:00+01:00,General,2010-12-20 12:38:26.767000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-1237,T07-5 Draft intern advice aspect 5,complete,Group 1,admin2,2010-12-20 12:38:27.652000+01:00 +Internet,case-4085,2010-12-21 00:00:00+01:00,General,2010-12-20 12:49:39.180000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource06,2010-10-21 00:00:00.020000+02:00,task-517,Confirmation of receipt,complete,EMPTY,admin2,2010-12-20 12:49:40.212000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-546,Confirmation of receipt,complete,Group 1,Resource09,2010-11-04 11:46:41.738000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-899,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-04 11:49:30.047000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-901,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource09,2010-11-04 11:56:08.505000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-906,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-04 11:58:11.677000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-909,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2010-11-04 11:58:44.612000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-898,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-04 14:03:18.938000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-945,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2010-11-04 14:50:14.865000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-966,T02 Check confirmation of receipt,complete,Group 4,Resource09,2010-11-04 15:41:35.618000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-994,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2010-11-04 15:44:28.309000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-995,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-11-16 13:28:40.803000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-1530,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-17 13:45:24.748000+01:00 +Internet,case-4100,2010-12-23 00:00:00+01:00,General,2010-12-22 14:43:48.030000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource09,2010-10-21 00:00:00.020000+02:00,task-1581,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-22 14:06:25.987000+01:00 +Internet,case-4101,2010-12-23 01:06:40+01:00,General,2011-02-04 09:40:40.613000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource05,2010-10-21 01:06:40.020000+02:00,task-548,Confirmation of receipt,complete,Group 1,Resource05,2010-11-09 09:38:24.169000+01:00 +Internet,case-4101,2010-12-23 01:06:40+01:00,General,2011-02-04 09:40:40.613000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource05,2010-10-21 01:06:40.020000+02:00,task-1246,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-11-09 09:39:15.034000+01:00 +Internet,case-4101,2010-12-23 01:06:40+01:00,General,2011-02-04 09:40:40.613000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource05,2010-10-21 01:06:40.020000+02:00,task-1247,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-11-09 09:43:28.490000+01:00 +Internet,case-4101,2010-12-23 01:06:40+01:00,General,2011-02-04 09:40:40.613000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource05,2010-10-21 01:06:40.020000+02:00,task-1245,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 14:24:44.350000+01:00 +Internet,case-4101,2010-12-23 01:06:40+01:00,General,2011-02-04 09:40:40.613000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource05,2010-10-21 01:06:40.020000+02:00,task-1280,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:54:10.595000+01:00 +Internet,case-4101,2010-12-23 01:06:40+01:00,General,2011-02-04 09:40:40.613000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource05,2010-10-21 01:06:40.020000+02:00,task-1439,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:23:37.090000+01:00 +Internet,case-4102,2010-12-23 00:00:00+01:00,Experts,2010-12-30 11:23:06.047000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource08,2010-10-21 00:00:00.020000+02:00,task-549,Confirmation of receipt,complete,Group 1,Resource08,2010-11-05 09:26:50.492000+01:00 +Internet,case-4102,2010-12-23 00:00:00+01:00,Experts,2010-12-30 11:23:06.047000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource08,2010-10-21 00:00:00.020000+02:00,task-1017,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-05 09:36:28.810000+01:00 +Internet,case-4102,2010-12-23 00:00:00+01:00,Experts,2010-12-30 11:23:06.047000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource08,2010-10-21 00:00:00.020000+02:00,task-1021,T03 Adjust confirmation of receipt,complete,Group 1,Resource08,2010-11-05 09:43:41.331000+01:00 +Internet,case-4102,2010-12-23 00:00:00+01:00,Experts,2010-12-30 11:23:06.047000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource08,2010-10-21 00:00:00.020000+02:00,task-1024,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:46:11.084000+01:00 +Internet,case-4102,2010-12-23 00:00:00+01:00,Experts,2010-12-30 11:23:06.047000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource08,2010-10-21 00:00:00.020000+02:00,task-1298,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:58:23.296000+01:00 +Internet,case-4102,2010-12-23 00:00:00+01:00,Experts,2010-12-30 11:23:06.047000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource08,2010-10-21 00:00:00.020000+02:00,task-1441,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:27:07.150000+01:00 +Internet,case-4102,2010-12-23 00:00:00+01:00,Experts,2010-12-30 11:23:06.047000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource08,2010-10-21 00:00:00.020000+02:00,task-1018,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-16 16:09:30.900000+01:00 +Internet,case-4102,2010-12-23 00:00:00+01:00,Experts,2010-12-30 11:23:06.047000+01:00,2010-12-23 00:00:00.010000+01:00,,Resource08,2010-10-21 00:00:00.020000+02:00,task-1544,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-16 16:12:49.284000+01:00 +Internet,case-4103,2010-12-16 01:06:40+01:00,General,2010-12-10 14:39:00.949000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource01,2010-10-21 01:06:40.020000+02:00,task-550,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-08 10:47:19.211000+01:00 +Internet,case-4103,2010-12-16 01:06:40+01:00,General,2010-12-10 14:39:00.949000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource01,2010-10-21 01:06:40.020000+02:00,task-1139,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-08 10:47:36.538000+01:00 +Internet,case-4103,2010-12-16 01:06:40+01:00,General,2010-12-10 14:39:00.949000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource01,2010-10-21 01:06:40.020000+02:00,task-1141,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-08 10:48:12.243000+01:00 +Internet,case-4103,2010-12-16 01:06:40+01:00,General,2010-12-10 14:39:00.949000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource01,2010-10-21 01:06:40.020000+02:00,task-1138,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-09 10:23:46.696000+01:00 +Internet,case-4103,2010-12-16 01:06:40+01:00,General,2010-12-10 14:39:00.949000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource01,2010-10-21 01:06:40.020000+02:00,task-1257,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:50:12.389000+01:00 +Internet,case-4103,2010-12-16 01:06:40+01:00,General,2010-12-10 14:39:00.949000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource01,2010-10-21 01:06:40.020000+02:00,task-1436,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:27:45.067000+01:00 +Internet,case-4111,2011-05-05 01:06:40+02:00,General,2011-04-13 00:00:00.020000+02:00,2011-05-05 01:06:40.020000+02:00,,Resource02,2010-10-23 01:06:40.020000+02:00,task-558,Confirmation of receipt,complete,EMPTY,Resource02,2010-11-09 15:00:48.543000+01:00 +Internet,case-4111,2011-05-05 01:06:40+02:00,General,2011-04-13 00:00:00.020000+02:00,2011-05-05 01:06:40.020000+02:00,,Resource02,2010-10-23 01:06:40.020000+02:00,task-1287,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 16:01:52.270000+01:00 +Internet,case-4111,2011-05-05 01:06:40+02:00,General,2011-04-13 00:00:00.020000+02:00,2011-05-05 01:06:40.020000+02:00,,Resource02,2010-10-23 01:06:40.020000+02:00,task-1288,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-11-09 16:02:46.641000+01:00 +Internet,case-4111,2011-05-05 01:06:40+02:00,General,2011-04-13 00:00:00.020000+02:00,2011-05-05 01:06:40.020000+02:00,,Resource02,2010-10-23 01:06:40.020000+02:00,task-1307,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource02,2010-11-09 16:04:00.213000+01:00 +Internet,case-4111,2011-05-05 01:06:40+02:00,General,2011-04-13 00:00:00.020000+02:00,2011-05-05 01:06:40.020000+02:00,,Resource02,2010-10-23 01:06:40.020000+02:00,task-1308,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-11-09 16:04:24.683000+01:00 +Internet,case-4111,2011-05-05 01:06:40+02:00,General,2011-04-13 00:00:00.020000+02:00,2011-05-05 01:06:40.020000+02:00,,Resource02,2010-10-23 01:06:40.020000+02:00,task-1304,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 15:04:23.485000+01:00 +Internet,case-4111,2011-05-05 01:06:40+02:00,General,2011-04-13 00:00:00.020000+02:00,2011-05-05 01:06:40.020000+02:00,,Resource02,2010-10-23 01:06:40.020000+02:00,task-1444,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:22:26.674000+01:00 +Internet,case-4111,2011-05-05 01:06:40+02:00,General,2011-04-13 00:00:00.020000+02:00,2011-05-05 01:06:40.020000+02:00,,Resource02,2010-10-23 01:06:40.020000+02:00,task-1309,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-08 11:54:32.200000+01:00 +Internet,case-4114,2010-12-24 01:06:40+01:00,General,2010-12-30 12:12:57.114000+01:00,2010-12-24 01:06:40.010000+01:00,,Resource08,2010-10-24 01:06:40.020000+02:00,task-561,Confirmation of receipt,complete,Group 1,Resource08,2010-11-05 15:19:40.640000+01:00 +Internet,case-4114,2010-12-24 01:06:40+01:00,General,2010-12-30 12:12:57.114000+01:00,2010-12-24 01:06:40.010000+01:00,,Resource08,2010-10-24 01:06:40.020000+02:00,task-1053,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:43:08.091000+01:00 +Internet,case-4114,2010-12-24 01:06:40+01:00,General,2010-12-30 12:12:57.114000+01:00,2010-12-24 01:06:40.010000+01:00,,Resource08,2010-10-24 01:06:40.020000+02:00,task-1295,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 14:46:48.754000+01:00 +Internet,case-4114,2010-12-24 01:06:40+01:00,General,2010-12-30 12:12:57.114000+01:00,2010-12-24 01:06:40.010000+01:00,,Resource08,2010-10-24 01:06:40.020000+02:00,task-1434,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:26:34.559000+01:00 +Internet,case-4114,2010-12-24 01:06:40+01:00,General,2010-12-30 12:12:57.114000+01:00,2010-12-24 01:06:40.010000+01:00,,Resource08,2010-10-24 01:06:40.020000+02:00,task-1054,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-18 14:45:48.314000+01:00 +Internet,case-4114,2010-12-24 01:06:40+01:00,General,2010-12-30 12:12:57.114000+01:00,2010-12-24 01:06:40.010000+01:00,,Resource08,2010-10-24 01:06:40.020000+02:00,task-1662,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-18 14:46:07.723000+01:00 +Internet,case-4117,2010-12-20 01:06:40+01:00,General,2010-12-10 13:41:17.791000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource34,2010-10-25 01:06:40.020000+02:00,task-564,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-25 15:19:58.537000+01:00 +Internet,case-4117,2010-12-20 01:06:40+01:00,General,2010-12-10 13:41:17.791000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource34,2010-10-25 01:06:40.020000+02:00,task-2053,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-25 15:24:57.419000+01:00 +Internet,case-4117,2010-12-20 01:06:40+01:00,General,2010-12-10 13:41:17.791000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource34,2010-10-25 01:06:40.020000+02:00,task-2054,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-25 15:31:09.270000+01:00 +Internet,case-4117,2010-12-20 01:06:40+01:00,General,2010-12-10 13:41:17.791000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource34,2010-10-25 01:06:40.020000+02:00,task-2052,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-26 09:29:43.743000+01:00 +Internet,case-4117,2010-12-20 01:06:40+01:00,General,2010-12-10 13:41:17.791000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource34,2010-10-25 01:06:40.020000+02:00,task-2119,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-11-29 08:04:51.772000+01:00 +Internet,case-4117,2010-12-20 01:06:40+01:00,General,2010-12-10 13:41:17.791000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource34,2010-10-25 01:06:40.020000+02:00,task-2202,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 07:53:13.904000+01:00 +Internet,case-4117,2010-12-20 01:06:40+01:00,General,2010-12-10 13:41:17.791000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource34,2010-10-25 01:06:40.020000+02:00,task-2278,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-09 13:38:51.711000+01:00 +Internet,case-4117,2010-12-20 01:06:40+01:00,General,2010-12-10 13:41:17.791000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource34,2010-10-25 01:06:40.020000+02:00,task-3486,T05 Print and send confirmation of receipt,complete,Group 2,Resource34,2010-12-10 09:11:23.508000+01:00 +Internet,case-4118,2010-12-28 01:06:40+01:00,General,2010-12-31 10:00:12.259000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource04,2010-10-25 01:06:40.020000+02:00,task-565,Confirmation of receipt,complete,Group 1,Resource04,2010-11-09 16:09:47.500000+01:00 +Internet,case-4118,2010-12-28 01:06:40+01:00,General,2010-12-31 10:00:12.259000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource04,2010-10-25 01:06:40.020000+02:00,task-1311,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-09 16:10:15.497000+01:00 +Internet,case-4118,2010-12-28 01:06:40+01:00,General,2010-12-31 10:00:12.259000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource04,2010-10-25 01:06:40.020000+02:00,task-1312,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-09 16:10:33.992000+01:00 +Internet,case-4118,2010-12-28 01:06:40+01:00,General,2010-12-31 10:00:12.259000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource04,2010-10-25 01:06:40.020000+02:00,task-1310,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-11-16 13:34:40.273000+01:00 +Internet,case-4118,2010-12-28 01:06:40+01:00,General,2010-12-31 10:00:12.259000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource04,2010-10-25 01:06:40.020000+02:00,task-1532,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-22 08:28:28.030000+01:00 +Internet,case-4118,2010-12-28 01:06:40+01:00,General,2010-12-31 10:00:12.259000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource04,2010-10-25 01:06:40.020000+02:00,task-1786,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:01:21.356000+01:00 +Internet,case-4119,2010-12-21 01:06:40+01:00,General,2010-12-17 09:22:09.134000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-566,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-09 07:57:04.484000+01:00 +Internet,case-4119,2010-12-21 01:06:40+01:00,General,2010-12-17 09:22:09.134000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-1215,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-09 07:57:33.991000+01:00 +Internet,case-4119,2010-12-21 01:06:40+01:00,General,2010-12-17 09:22:09.134000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-1216,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-09 08:01:14.050000+01:00 +Internet,case-4119,2010-12-21 01:06:40+01:00,General,2010-12-17 09:22:09.134000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-1214,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2010-11-09 11:30:54.690000+01:00 +Internet,case-4119,2010-12-21 01:06:40+01:00,General,2010-12-17 09:22:09.134000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-1260,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 09:00:02.359000+01:00 +Internet,case-4119,2010-12-21 01:06:40+01:00,General,2010-12-17 09:22:09.134000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-1419,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:21:07.769000+01:00 +Internet,case-4144,2010-12-21 01:06:40+01:00,General,2011-01-14 15:36:37.929000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource07,2010-10-26 01:06:40.020000+02:00,task-595,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-10 12:09:40.789000+01:00 +Internet,case-4144,2010-12-21 01:06:40+01:00,General,2011-01-14 15:36:37.929000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource07,2010-10-26 01:06:40.020000+02:00,task-3614,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-10 12:10:20.113000+01:00 +Internet,case-4144,2010-12-21 01:06:40+01:00,General,2011-01-14 15:36:37.929000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource07,2010-10-26 01:06:40.020000+02:00,task-3615,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-10 12:13:38.826000+01:00 +Internet,case-4144,2010-12-21 01:06:40+01:00,General,2011-01-14 15:36:37.929000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource07,2010-10-26 01:06:40.020000+02:00,task-3613,T02 Check confirmation of receipt,complete,EMPTY,Resource34,2010-12-10 12:57:20.976000+01:00 +Internet,case-4144,2010-12-21 01:06:40+01:00,General,2011-01-14 15:36:37.929000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource07,2010-10-26 01:06:40.020000+02:00,task-3634,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-10 13:45:13.774000+01:00 +Internet,case-4144,2010-12-21 01:06:40+01:00,General,2011-01-14 15:36:37.929000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource07,2010-10-26 01:06:40.020000+02:00,task-3639,T05 Print and send confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 14:11:41.002000+01:00 +Internet,case-4146,2010-12-21 01:06:40+01:00,General,2010-12-15 14:45:23.624000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource06,2010-10-26 01:06:40.020000+02:00,task-602,Confirmation of receipt,complete,EMPTY,Resource07,2010-11-25 16:15:12.031000+01:00 +Internet,case-4146,2010-12-21 01:06:40+01:00,General,2010-12-15 14:45:23.624000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource06,2010-10-26 01:06:40.020000+02:00,task-2063,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-11-25 16:15:42.738000+01:00 +Internet,case-4146,2010-12-21 01:06:40+01:00,General,2010-12-15 14:45:23.624000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource06,2010-10-26 01:06:40.020000+02:00,task-2064,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-11-25 16:16:29.698000+01:00 +Internet,case-4146,2010-12-21 01:06:40+01:00,General,2010-12-15 14:45:23.624000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource06,2010-10-26 01:06:40.020000+02:00,task-2062,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 09:09:54.177000+01:00 +Internet,case-4146,2010-12-21 01:06:40+01:00,General,2010-12-15 14:45:23.624000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource06,2010-10-26 01:06:40.020000+02:00,task-2323,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 09:10:50.238000+01:00 +Internet,case-4146,2010-12-21 01:06:40+01:00,General,2010-12-15 14:45:23.624000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource06,2010-10-26 01:06:40.020000+02:00,task-2324,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-11-30 09:11:11.593000+01:00 +Internet,case-4147,2010-12-21 01:06:40+01:00,General,2011-01-21 12:03:50.618000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource02,2010-10-26 01:06:40.020000+02:00,task-603,Confirmation of receipt,complete,Group 1,Resource02,2010-12-01 16:24:55.077000+01:00 +Internet,case-4147,2010-12-21 01:06:40+01:00,General,2011-01-21 12:03:50.618000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource02,2010-10-26 01:06:40.020000+02:00,task-2538,T02 Check confirmation of receipt,complete,EMPTY,Resource39,2010-12-01 16:34:36.807000+01:00 +Internet,case-4147,2010-12-21 01:06:40+01:00,General,2011-01-21 12:03:50.618000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource02,2010-10-26 01:06:40.020000+02:00,task-2540,T03 Adjust confirmation of receipt,complete,Group 1,Resource02,2010-12-06 13:59:49.294000+01:00 +Internet,case-4147,2010-12-21 01:06:40+01:00,General,2011-01-21 12:03:50.618000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource02,2010-10-26 01:06:40.020000+02:00,task-2990,T02 Check confirmation of receipt,complete,Group 4,Resource02,2010-12-06 14:00:05.661000+01:00 +Internet,case-4147,2010-12-21 01:06:40+01:00,General,2011-01-21 12:03:50.618000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource02,2010-10-26 01:06:40.020000+02:00,task-2991,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 08:15:15.538000+01:00 +Internet,case-4147,2010-12-21 01:06:40+01:00,General,2011-01-21 12:03:50.618000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource02,2010-10-26 01:06:40.020000+02:00,task-3020,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-07 08:32:14.837000+01:00 +Internet,case-4147,2010-12-21 01:06:40+01:00,General,2011-01-21 12:03:50.618000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource02,2010-10-26 01:06:40.020000+02:00,task-2539,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-08 16:12:55.966000+01:00 +Internet,case-4147,2010-12-21 01:06:40+01:00,General,2011-01-21 12:03:50.618000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource02,2010-10-26 01:06:40.020000+02:00,task-3399,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-08 16:16:39.128000+01:00 +Internet,case-4149,2010-12-21 01:06:40+01:00,General,2010-12-17 12:04:02.816000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-26 01:06:40.020000+02:00,task-605,Confirmation of receipt,complete,Group 1,Resource08,2010-11-05 14:30:08.159000+01:00 +Internet,case-4149,2010-12-21 01:06:40+01:00,General,2010-12-17 12:04:02.816000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-26 01:06:40.020000+02:00,task-1047,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-05 14:31:07.966000+01:00 +Internet,case-4149,2010-12-21 01:06:40+01:00,General,2010-12-17 12:04:02.816000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-26 01:06:40.020000+02:00,task-1048,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-05 14:31:35.445000+01:00 +Internet,case-4149,2010-12-21 01:06:40+01:00,General,2010-12-17 12:04:02.816000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-26 01:06:40.020000+02:00,task-1046,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-09 15:44:17.788000+01:00 +Internet,case-4149,2010-12-21 01:06:40+01:00,General,2010-12-17 12:04:02.816000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-26 01:06:40.020000+02:00,task-1296,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 15:00:18.957000+01:00 +Internet,case-4149,2010-12-21 01:06:40+01:00,General,2010-12-17 12:04:02.816000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource08,2010-10-26 01:06:40.020000+02:00,task-1442,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:25:26.201000+01:00 +Internet,case-4157,2010-12-21 01:06:40+01:00,Customer contact,2010-12-17 10:21:41.974000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-659,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 08:24:42.997000+01:00 +Internet,case-4157,2010-12-21 01:06:40+01:00,Customer contact,2010-12-17 10:21:41.974000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-2290,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 08:25:31.275000+01:00 +Internet,case-4157,2010-12-21 01:06:40+01:00,Customer contact,2010-12-17 10:21:41.974000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-2291,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 08:26:34.330000+01:00 +Internet,case-4157,2010-12-21 01:06:40+01:00,Customer contact,2010-12-17 10:21:41.974000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-2292,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 08:27:08.940000+01:00 +Internet,case-4157,2010-12-21 01:06:40+01:00,Customer contact,2010-12-17 10:21:41.974000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-2293,T07-4 Draft internal advice to hold for type 4,complete,EMPTY,Resource11,2010-11-30 08:27:59.445000+01:00 +Internet,case-4157,2010-12-21 01:06:40+01:00,Customer contact,2010-12-17 10:21:41.974000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-2294,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 08:28:44.151000+01:00 +Internet,case-4157,2010-12-21 01:06:40+01:00,Customer contact,2010-12-17 10:21:41.974000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-2295,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-30 08:29:45.853000+01:00 +Internet,case-4157,2010-12-21 01:06:40+01:00,Customer contact,2010-12-17 10:21:41.974000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-2289,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 11:07:58.906000+01:00 +Internet,case-4157,2010-12-21 01:06:40+01:00,Customer contact,2010-12-17 10:21:41.974000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-3258,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 11:08:59.730000+01:00 +Internet,case-4157,2010-12-21 01:06:40+01:00,Customer contact,2010-12-17 10:21:41.974000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-3259,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 13:34:40.772000+01:00 +Internet,case-4158,2010-12-21 01:06:40+01:00,Customer contact,2011-01-14 11:39:10.177000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-660,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 07:47:54.417000+01:00 +Internet,case-4158,2010-12-21 01:06:40+01:00,Customer contact,2011-01-14 11:39:10.177000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-2550,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 08:34:56.309000+01:00 +Internet,case-4158,2010-12-21 01:06:40+01:00,Customer contact,2011-01-14 11:39:10.177000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-2551,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-08 11:43:04.093000+01:00 +Internet,case-4158,2010-12-21 01:06:40+01:00,Customer contact,2011-01-14 11:39:10.177000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-3026,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 11:43:51.948000+01:00 +Internet,case-4158,2010-12-21 01:06:40+01:00,Customer contact,2011-01-14 11:39:10.177000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-3292,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-08 11:45:40.022000+01:00 +Internet,case-4158,2010-12-21 01:06:40+01:00,Customer contact,2011-01-14 11:39:10.177000+01:00,2010-12-21 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-3293,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-14 13:49:29.028000+01:00 +Internet,case-4159,2010-12-22 01:06:40+01:00,General,2010-12-21 14:28:26.692000+01:00,2010-12-22 01:06:40.010000+01:00,,Resource02,2010-10-27 01:06:40.020000+02:00,task-661,Confirmation of receipt,complete,Group 1,Resource02,2010-11-26 11:50:26.184000+01:00 +Internet,case-4159,2010-12-22 01:06:40+01:00,General,2010-12-21 14:28:26.692000+01:00,2010-12-22 01:06:40.010000+01:00,,Resource02,2010-10-27 01:06:40.020000+02:00,task-2147,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-11-26 11:53:55.563000+01:00 +Internet,case-4159,2010-12-22 01:06:40+01:00,General,2010-12-21 14:28:26.692000+01:00,2010-12-22 01:06:40.010000+01:00,,Resource02,2010-10-27 01:06:40.020000+02:00,task-2148,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-11-26 11:54:25.036000+01:00 +Internet,case-4159,2010-12-22 01:06:40+01:00,General,2010-12-21 14:28:26.692000+01:00,2010-12-22 01:06:40.010000+01:00,,Resource02,2010-10-27 01:06:40.020000+02:00,task-2146,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-11-26 14:23:11.333000+01:00 +Internet,case-4159,2010-12-22 01:06:40+01:00,General,2010-12-21 14:28:26.692000+01:00,2010-12-22 01:06:40.010000+01:00,,Resource02,2010-10-27 01:06:40.020000+02:00,task-2163,T04 Determine confirmation of receipt,complete,EMPTY,Resource02,2010-12-03 11:40:19.957000+01:00 +Internet,case-4159,2010-12-22 01:06:40+01:00,General,2010-12-21 14:28:26.692000+01:00,2010-12-22 01:06:40.010000+01:00,,Resource02,2010-10-27 01:06:40.020000+02:00,task-2687,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:38:19.085000+01:00 +Internet,case-416,2010-11-26 01:06:40+01:00,General,,2010-11-26 01:06:40.010000+01:00,,Resource26,2010-10-01 01:06:40.020000+02:00,task-1,Confirmation of receipt,complete,Group 1,Resource21,2010-10-20 12:56:58.348000+02:00 +Internet,case-416,2010-11-26 01:06:40+01:00,General,,2010-11-26 01:06:40.010000+01:00,,Resource26,2010-10-01 01:06:40.020000+02:00,task-315,T02 Check confirmation of receipt,complete,Group 4,Resource21,2010-10-20 12:57:49.263000+02:00 +Internet,case-416,2010-11-26 01:06:40+01:00,General,,2010-11-26 01:06:40.010000+01:00,,Resource26,2010-10-01 01:06:40.020000+02:00,task-317,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2010-10-20 12:58:58.565000+02:00 +Internet,case-416,2010-11-26 01:06:40+01:00,General,,2010-11-26 01:06:40.010000+01:00,,Resource26,2010-10-01 01:06:40.020000+02:00,task-318,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2010-10-20 12:59:23.662000+02:00 +Internet,case-416,2010-11-26 01:06:40+01:00,General,,2010-11-26 01:06:40.010000+01:00,,Resource26,2010-10-01 01:06:40.020000+02:00,task-316,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2010-10-20 13:02:33.507000+02:00 +Internet,case-416,2010-11-26 01:06:40+01:00,General,,2010-11-26 01:06:40.010000+01:00,,Resource26,2010-10-01 01:06:40.020000+02:00,task-319,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2010-11-08 14:07:42.360000+01:00 +Internet,case-4161,2010-12-27 01:06:40+01:00,General,2011-02-07 10:04:22.258000+01:00,2010-12-27 01:06:40.010000+01:00,,Resource15,2010-10-27 01:06:40.020000+02:00,task-684,Confirmation of receipt,complete,Group 1,Resource15,2010-11-23 12:19:41.441000+01:00 +Internet,case-4161,2010-12-27 01:06:40+01:00,General,2011-02-07 10:04:22.258000+01:00,2010-12-27 01:06:40.010000+01:00,,Resource15,2010-10-27 01:06:40.020000+02:00,task-1882,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 09:00:46.351000+01:00 +Internet,case-4161,2010-12-27 01:06:40+01:00,General,2011-02-07 10:04:22.258000+01:00,2010-12-27 01:06:40.010000+01:00,,Resource15,2010-10-27 01:06:40.020000+02:00,task-2107,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-11-30 08:21:40.981000+01:00 +Internet,case-4161,2010-12-27 01:06:40+01:00,General,2011-02-07 10:04:22.258000+01:00,2010-12-27 01:06:40.010000+01:00,,Resource15,2010-10-27 01:06:40.020000+02:00,task-2288,T03 Adjust confirmation of receipt,complete,Group 1,admin2,2011-02-07 10:04:23.135000+01:00 +Internet,case-4161,2010-12-27 01:06:40+01:00,General,2011-02-07 10:04:22.258000+01:00,2010-12-27 01:06:40.010000+01:00,,Resource15,2010-10-27 01:06:40.020000+02:00,task-1883,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-02-07 10:04:23.862000+01:00 +Internet,case-4175,2010-12-08 00:00:00+01:00,General,2010-12-09 09:06:23.826000+01:00,2010-12-08 00:00:00.010000+01:00,,Resource25,2010-10-08 00:00:00.020000+02:00,task-730,Confirmation of receipt,complete,Group 1,Resource25,2010-11-04 15:18:33.535000+01:00 +Internet,case-4175,2010-12-08 00:00:00+01:00,General,2010-12-09 09:06:23.826000+01:00,2010-12-08 00:00:00.010000+01:00,,Resource25,2010-10-08 00:00:00.020000+02:00,task-983,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-11-04 15:21:59.690000+01:00 +Internet,case-4175,2010-12-08 00:00:00+01:00,General,2010-12-09 09:06:23.826000+01:00,2010-12-08 00:00:00.010000+01:00,,Resource25,2010-10-08 00:00:00.020000+02:00,task-990,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource25,2010-11-10 14:20:21.653000+01:00 +Internet,case-4175,2010-12-08 00:00:00+01:00,General,2010-12-09 09:06:23.826000+01:00,2010-12-08 00:00:00.010000+01:00,,Resource25,2010-10-08 00:00:00.020000+02:00,task-1352,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-11-10 14:21:06.822000+01:00 +Internet,case-4175,2010-12-08 00:00:00+01:00,General,2010-12-09 09:06:23.826000+01:00,2010-12-08 00:00:00.010000+01:00,,Resource25,2010-10-08 00:00:00.020000+02:00,task-1353,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource25,2010-11-10 14:25:50.320000+01:00 +Internet,case-4175,2010-12-08 00:00:00+01:00,General,2010-12-09 09:06:23.826000+01:00,2010-12-08 00:00:00.010000+01:00,,Resource25,2010-10-08 00:00:00.020000+02:00,task-1354,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-11-10 14:26:38.744000+01:00 +Internet,case-4175,2010-12-08 00:00:00+01:00,General,2010-12-09 09:06:23.826000+01:00,2010-12-08 00:00:00.010000+01:00,,Resource25,2010-10-08 00:00:00.020000+02:00,task-1355,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2010-11-10 14:28:05.476000+01:00 +Internet,case-4175,2010-12-08 00:00:00+01:00,General,2010-12-09 09:06:23.826000+01:00,2010-12-08 00:00:00.010000+01:00,,Resource25,2010-10-08 00:00:00.020000+02:00,task-982,T02 Check confirmation of receipt,complete,EMPTY,Resource28,2010-11-11 13:20:04.142000+01:00 +Internet,case-4175,2010-12-08 00:00:00+01:00,General,2010-12-09 09:06:23.826000+01:00,2010-12-08 00:00:00.010000+01:00,,Resource25,2010-10-08 00:00:00.020000+02:00,task-1374,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-11-17 13:41:03.018000+01:00 +Internet,case-4175,2010-12-08 00:00:00+01:00,General,2010-12-09 09:06:23.826000+01:00,2010-12-08 00:00:00.010000+01:00,,Resource25,2010-10-08 00:00:00.020000+02:00,task-1579,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 08:56:13.703000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-782,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:11:39.624000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-2568,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-02 08:11:57.582000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-2569,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-02 08:13:55.406000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-2567,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-12-02 08:20:08.769000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-2573,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-12-02 08:21:46.572000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-2575,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:27:20.046000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-2576,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-12-02 08:27:39.920000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-2577,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-12-02 08:28:03.007000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-2578,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:28:43.868000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-2579,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2010-12-02 08:29:00.825000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-2580,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 14:31:19.493000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-3361,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-12-08 14:36:17.802000+01:00 +Internet,case-4185,2010-12-23 01:06:40+01:00,Customer contact,2010-12-16 15:30:50.573000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource11,2010-10-28 01:06:40.020000+02:00,task-3363,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 13:57:18.174000+01:00 +Internet,case-4186,2010-12-29 00:00:00+01:00,General,2011-01-10 15:40:27.145000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource11,2010-10-29 00:00:00.020000+02:00,task-783,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:00:12.219000+01:00 +Internet,case-4186,2010-12-29 00:00:00+01:00,General,2011-01-10 15:40:27.145000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource11,2010-10-29 00:00:00.020000+02:00,task-2560,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-02 08:02:51.102000+01:00 +Internet,case-4186,2010-12-29 00:00:00+01:00,General,2011-01-10 15:40:27.145000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource11,2010-10-29 00:00:00.020000+02:00,task-2561,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-02 08:03:20.160000+01:00 +Internet,case-4186,2010-12-29 00:00:00+01:00,General,2011-01-10 15:40:27.145000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource11,2010-10-29 00:00:00.020000+02:00,task-2559,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 08:37:16.390000+01:00 +Internet,case-4186,2010-12-29 00:00:00+01:00,General,2011-01-10 15:40:27.145000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource11,2010-10-29 00:00:00.020000+02:00,task-3028,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 08:53:52.015000+01:00 +Internet,case-4186,2010-12-29 00:00:00+01:00,General,2011-01-10 15:40:27.145000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource11,2010-10-29 00:00:00.020000+02:00,task-3048,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-07 09:09:18.787000+01:00 +Internet,case-4187,2010-12-26 01:06:40+01:00,Customer contact,2010-12-23 08:38:15.922000+01:00,2010-12-26 01:06:40.010000+01:00,,Resource11,2010-10-31 02:06:40.020000+01:00,task-791,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 07:53:22.504000+01:00 +Internet,case-4187,2010-12-26 01:06:40+01:00,Customer contact,2010-12-23 08:38:15.922000+01:00,2010-12-26 01:06:40.010000+01:00,,Resource11,2010-10-31 02:06:40.020000+01:00,task-2553,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-02 07:54:13.466000+01:00 +Internet,case-4187,2010-12-26 01:06:40+01:00,Customer contact,2010-12-23 08:38:15.922000+01:00,2010-12-26 01:06:40.010000+01:00,,Resource11,2010-10-31 02:06:40.020000+01:00,task-2554,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-02 07:54:35.995000+01:00 +Internet,case-4187,2010-12-26 01:06:40+01:00,Customer contact,2010-12-23 08:38:15.922000+01:00,2010-12-26 01:06:40.010000+01:00,,Resource11,2010-10-31 02:06:40.020000+01:00,task-2552,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 08:35:27.763000+01:00 +Internet,case-4187,2010-12-26 01:06:40+01:00,Customer contact,2010-12-23 08:38:15.922000+01:00,2010-12-26 01:06:40.010000+01:00,,Resource11,2010-10-31 02:06:40.020000+01:00,task-3027,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 12:28:13.793000+01:00 +Internet,case-4187,2010-12-26 01:06:40+01:00,Customer contact,2010-12-23 08:38:15.922000+01:00,2010-12-26 01:06:40.010000+01:00,,Resource11,2010-10-31 02:06:40.020000+01:00,task-3331,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-14 13:53:30.413000+01:00 +Internet,case-4188,2010-12-29 00:00:00+01:00,General,2010-12-22 12:00:45.003000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource09,2010-10-20 00:00:00.020000+02:00,task-810,Confirmation of receipt,complete,EMPTY,Resource09,2010-11-08 12:44:00.430000+01:00 +Internet,case-4188,2010-12-29 00:00:00+01:00,General,2010-12-22 12:00:45.003000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource09,2010-10-20 00:00:00.020000+02:00,task-1159,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-08 12:46:16.023000+01:00 +Internet,case-4188,2010-12-29 00:00:00+01:00,General,2010-12-22 12:00:45.003000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource09,2010-10-20 00:00:00.020000+02:00,task-1160,T08 Draft and send request for advice,complete,Group 1,Resource09,2010-11-08 12:46:56.586000+01:00 +Internet,case-4188,2010-12-29 00:00:00+01:00,General,2010-12-22 12:00:45.003000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource09,2010-10-20 00:00:00.020000+02:00,task-1161,T09-4 Process or receive external advice from party 4,complete,Group 1,Resource09,2010-11-08 12:47:12.538000+01:00 +Internet,case-4188,2010-12-29 00:00:00+01:00,General,2010-12-22 12:00:45.003000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource09,2010-10-20 00:00:00.020000+02:00,task-1162,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-11-08 12:47:34.348000+01:00 +Internet,case-4188,2010-12-29 00:00:00+01:00,General,2010-12-22 12:00:45.003000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource09,2010-10-20 00:00:00.020000+02:00,task-1163,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2010-11-08 12:49:11.529000+01:00 +Internet,case-4188,2010-12-29 00:00:00+01:00,General,2010-12-22 12:00:45.003000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource09,2010-10-20 00:00:00.020000+02:00,task-1158,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-11-09 12:13:20.418000+01:00 +Internet,case-4188,2010-12-29 00:00:00+01:00,General,2010-12-22 12:00:45.003000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource09,2010-10-20 00:00:00.020000+02:00,task-1265,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-12 09:02:49.872000+01:00 +Internet,case-4188,2010-12-29 00:00:00+01:00,General,2010-12-22 12:00:45.003000+01:00,2010-12-29 00:00:00.010000+01:00,,Resource09,2010-10-20 00:00:00.020000+02:00,task-1420,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-16 10:21:50.718000+01:00 +Internet,case-4189,2010-12-20 01:06:40+01:00,General,2010-12-20 12:36:27.539000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource06,2010-10-25 01:06:40.020000+02:00,task-812,Confirmation of receipt,complete,EMPTY,admin2,2010-12-20 12:36:28.288000+01:00 +Internet,case-4208,2010-12-28 01:06:40+01:00,General,2010-12-20 11:17:48.529000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource11,2010-11-02 01:06:40.010000+01:00,task-900,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:47:31.459000+01:00 +Internet,case-4208,2010-12-28 01:06:40+01:00,General,2010-12-20 11:17:48.529000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource11,2010-11-02 01:06:40.010000+01:00,task-2583,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:48:34.402000+01:00 +Internet,case-4208,2010-12-28 01:06:40+01:00,General,2010-12-20 11:17:48.529000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource11,2010-11-02 01:06:40.010000+01:00,task-2584,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-02 08:50:22.430000+01:00 +Internet,case-4208,2010-12-28 01:06:40+01:00,General,2010-12-20 11:17:48.529000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource11,2010-11-02 01:06:40.010000+01:00,task-2587,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-02 08:53:00.533000+01:00 +Internet,case-4208,2010-12-28 01:06:40+01:00,General,2010-12-20 11:17:48.529000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource11,2010-11-02 01:06:40.010000+01:00,task-2585,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:54:01.332000+01:00 +Internet,case-4208,2010-12-28 01:06:40+01:00,General,2010-12-20 11:17:48.529000+01:00,2010-12-28 01:06:40.010000+01:00,,Resource11,2010-11-02 01:06:40.010000+01:00,task-2592,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-02 08:54:39.811000+01:00 +Internet,case-4219,2010-12-31 00:00:00+01:00,General,2011-03-29 15:16:05.641000+02:00,2010-12-31 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-1025,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-07 16:20:44.780000+01:00 +Internet,case-4219,2010-12-31 00:00:00+01:00,General,2011-03-29 15:16:05.641000+02:00,2010-12-31 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-3162,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2010-12-07 16:43:55.262000+01:00 +Internet,case-4219,2010-12-31 00:00:00+01:00,General,2011-03-29 15:16:05.641000+02:00,2010-12-31 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-3166,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2010-12-07 16:47:52.078000+01:00 +Internet,case-4219,2010-12-31 00:00:00+01:00,General,2011-03-29 15:16:05.641000+02:00,2010-12-31 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-3167,T05 Print and send confirmation of receipt,complete,EMPTY,Resource02,2010-12-07 16:48:44.941000+01:00 +Internet,case-4219,2010-12-31 00:00:00+01:00,General,2011-03-29 15:16:05.641000+02:00,2010-12-31 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-3163,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-07 16:49:47.960000+01:00 +Internet,case-4219,2010-12-31 00:00:00+01:00,General,2011-03-29 15:16:05.641000+02:00,2010-12-31 00:00:00.010000+01:00,,Resource02,2010-10-07 00:00:00.020000+02:00,task-3168,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-07 16:50:10.110000+01:00 +Internet,case-4243,2010-12-29 01:06:40+01:00,Customer contact,2010-12-23 08:11:02.555000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-1092,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 10:05:01.220000+01:00 +Internet,case-4243,2010-12-29 01:06:40+01:00,Customer contact,2010-12-23 08:11:02.555000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-3230,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-08 10:05:22.642000+01:00 +Internet,case-4243,2010-12-29 01:06:40+01:00,Customer contact,2010-12-23 08:11:02.555000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-3229,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 10:07:08.958000+01:00 +Internet,case-4243,2010-12-29 01:06:40+01:00,Customer contact,2010-12-23 08:11:02.555000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-3231,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-08 10:08:28.383000+01:00 +Internet,case-4243,2010-12-29 01:06:40+01:00,Customer contact,2010-12-23 08:11:02.555000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-3232,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-08 10:52:20.092000+01:00 +Internet,case-4243,2010-12-29 01:06:40+01:00,Customer contact,2010-12-23 08:11:02.555000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-3257,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 13:31:07.754000+01:00 +Internet,case-4247,2010-12-29 01:06:40+01:00,General,2010-12-23 09:28:01.451000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource07,2010-11-03 01:06:40.010000+01:00,task-1151,Confirmation of receipt,complete,Group 1,Resource07,2010-11-25 16:26:23.142000+01:00 +Internet,case-4247,2010-12-29 01:06:40+01:00,General,2010-12-23 09:28:01.451000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource07,2010-11-03 01:06:40.010000+01:00,task-2071,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-11-25 16:26:41.545000+01:00 +Internet,case-4247,2010-12-29 01:06:40+01:00,General,2010-12-23 09:28:01.451000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource07,2010-11-03 01:06:40.010000+01:00,task-2072,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-11-25 16:27:03.105000+01:00 +Internet,case-4247,2010-12-29 01:06:40+01:00,General,2010-12-23 09:28:01.451000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource07,2010-11-03 01:06:40.010000+01:00,task-2070,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-11-30 11:15:10.421000+01:00 +Internet,case-4247,2010-12-29 01:06:40+01:00,General,2010-12-23 09:28:01.451000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource07,2010-11-03 01:06:40.010000+01:00,task-2380,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-11-30 11:33:21.851000+01:00 +Internet,case-4247,2010-12-29 01:06:40+01:00,General,2010-12-23 09:28:01.451000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource07,2010-11-03 01:06:40.010000+01:00,task-2382,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:26:33.377000+01:00 +Internet,case-4248,2011-01-03 01:06:40+01:00,General,2010-12-20 12:50:05.982000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource06,2010-10-14 01:06:40.020000+02:00,task-1153,Confirmation of receipt,complete,EMPTY,admin2,2010-12-20 12:50:06.640000+01:00 +Internet,case-4249,2010-12-29 01:06:40+01:00,General,2010-12-21 09:21:08.535000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-1156,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:05:24.139000+01:00 +Internet,case-4249,2010-12-29 01:06:40+01:00,General,2010-12-21 09:21:08.535000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-2396,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 12:18:29.293000+01:00 +Internet,case-4249,2010-12-29 01:06:40+01:00,General,2010-12-21 09:21:08.535000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-2395,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:19:14.969000+01:00 +Internet,case-4249,2010-12-29 01:06:40+01:00,General,2010-12-21 09:21:08.535000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-2400,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-30 12:19:49.002000+01:00 +Internet,case-4249,2010-12-29 01:06:40+01:00,General,2010-12-21 09:21:08.535000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-2401,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-11-30 12:20:31.346000+01:00 +Internet,case-4249,2010-12-29 01:06:40+01:00,General,2010-12-21 09:21:08.535000+01:00,2010-12-29 01:06:40.010000+01:00,,Resource11,2010-11-03 01:06:40.010000+01:00,task-2405,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-11-30 12:20:46.444000+01:00 +Internet,case-4251,2011-01-03 00:00:00+01:00,General,2010-12-29 10:22:32.417000+01:00,2011-01-03 00:00:00.010000+01:00,,Resource05,2010-10-13 00:00:00.020000+02:00,task-1172,Confirmation of receipt,complete,Group 1,Resource05,2010-11-18 09:19:56.129000+01:00 +Internet,case-4251,2011-01-03 00:00:00+01:00,General,2010-12-29 10:22:32.417000+01:00,2011-01-03 00:00:00.010000+01:00,,Resource05,2010-10-13 00:00:00.020000+02:00,task-1614,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-11-18 09:24:17.458000+01:00 +Internet,case-4251,2011-01-03 00:00:00+01:00,General,2010-12-29 10:22:32.417000+01:00,2011-01-03 00:00:00.010000+01:00,,Resource05,2010-10-13 00:00:00.020000+02:00,task-1616,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-11-18 09:25:18.636000+01:00 +Internet,case-4251,2011-01-03 00:00:00+01:00,General,2010-12-29 10:22:32.417000+01:00,2011-01-03 00:00:00.010000+01:00,,Resource05,2010-10-13 00:00:00.020000+02:00,task-1613,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-19 16:22:08.685000+01:00 +Internet,case-4251,2011-01-03 00:00:00+01:00,General,2010-12-29 10:22:32.417000+01:00,2011-01-03 00:00:00.010000+01:00,,Resource05,2010-10-13 00:00:00.020000+02:00,task-1738,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-24 11:33:38.008000+01:00 +Internet,case-4251,2011-01-03 00:00:00+01:00,General,2010-12-29 10:22:32.417000+01:00,2011-01-03 00:00:00.010000+01:00,,Resource05,2010-10-13 00:00:00.020000+02:00,task-1972,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:28:28.886000+01:00 +Internet,case-4255,2010-12-30 01:06:40+01:00,General,2010-12-16 15:21:14.531000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource01,2010-11-04 01:06:40.010000+01:00,task-1195,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:34:39.201000+01:00 +Internet,case-4255,2010-12-30 01:06:40+01:00,General,2010-12-16 15:21:14.531000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource01,2010-11-04 01:06:40.010000+01:00,task-2412,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:35:52.251000+01:00 +Internet,case-4255,2010-12-30 01:06:40+01:00,General,2010-12-16 15:21:14.531000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource01,2010-11-04 01:06:40.010000+01:00,task-2414,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-11-30 12:36:27.260000+01:00 +Internet,case-4255,2010-12-30 01:06:40+01:00,General,2010-12-16 15:21:14.531000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource01,2010-11-04 01:06:40.010000+01:00,task-2415,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 12:37:18.867000+01:00 +Internet,case-4255,2010-12-30 01:06:40+01:00,General,2010-12-16 15:21:14.531000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource01,2010-11-04 01:06:40.010000+01:00,task-2413,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 12:37:31.816000+01:00 +Internet,case-4255,2010-12-30 01:06:40+01:00,General,2010-12-16 15:21:14.531000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource01,2010-11-04 01:06:40.010000+01:00,task-2416,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-30 12:37:50.542000+01:00 +Internet,case-4274,2010-12-30 01:06:40+01:00,General,2010-12-24 11:59:41.447000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-1243,Confirmation of receipt,complete,EMPTY,Resource17,2010-11-19 10:30:32.551000+01:00 +Internet,case-4274,2010-12-30 01:06:40+01:00,General,2010-12-24 11:59:41.447000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-1699,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-11-19 10:31:15.981000+01:00 +Internet,case-4274,2010-12-30 01:06:40+01:00,General,2010-12-24 11:59:41.447000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-1702,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-11-19 10:31:45.859000+01:00 +Internet,case-4274,2010-12-30 01:06:40+01:00,General,2010-12-24 11:59:41.447000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-1698,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-11-19 14:02:07.406000+01:00 +Internet,case-4274,2010-12-30 01:06:40+01:00,General,2010-12-24 11:59:41.447000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-1723,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2010-11-24 11:23:03.928000+01:00 +Internet,case-4274,2010-12-30 01:06:40+01:00,General,2010-12-24 11:59:41.447000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-1970,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:29:49.304000+01:00 +Internet,case-4277,2010-12-30 01:06:40+01:00,General,2011-03-15 10:58:41.393000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource02,2010-11-04 01:06:40.010000+01:00,task-1259,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-02 15:03:17.656000+01:00 +Internet,case-4277,2010-12-30 01:06:40+01:00,General,2011-03-15 10:58:41.393000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource02,2010-11-04 01:06:40.010000+01:00,task-2653,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2010-12-06 14:10:19.116000+01:00 +Internet,case-4277,2010-12-30 01:06:40+01:00,General,2011-03-15 10:58:41.393000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource02,2010-11-04 01:06:40.010000+01:00,task-2654,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-06 14:42:57.169000+01:00 +Internet,case-4277,2010-12-30 01:06:40+01:00,General,2011-03-15 10:58:41.393000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource02,2010-11-04 01:06:40.010000+01:00,task-2996,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-06 14:51:10.689000+01:00 +Internet,case-4277,2010-12-30 01:06:40+01:00,General,2011-03-15 10:58:41.393000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource02,2010-11-04 01:06:40.010000+01:00,task-2992,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 08:47:24.975000+01:00 +Internet,case-4277,2010-12-30 01:06:40+01:00,General,2011-03-15 10:58:41.393000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource02,2010-11-04 01:06:40.010000+01:00,task-3040,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-07 08:49:10.781000+01:00 +Internet,case-4279,2010-12-10 01:06:40+01:00,General,2011-03-02 08:30:51.773000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-1269,Confirmation of receipt,complete,Group 1,Resource12,2010-11-10 11:21:33.057000+01:00 +Internet,case-4279,2010-12-10 01:06:40+01:00,General,2011-03-02 08:30:51.773000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-1345,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-11-11 14:13:35.775000+01:00 +Internet,case-4279,2010-12-10 01:06:40+01:00,General,2011-03-02 08:30:51.773000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-1377,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2010-11-11 14:14:13.332000+01:00 +Internet,case-4279,2010-12-10 01:06:40+01:00,General,2011-03-02 08:30:51.773000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-1344,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2010-11-11 14:32:50.573000+01:00 +Internet,case-4279,2010-12-10 01:06:40+01:00,General,2011-03-02 08:30:51.773000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-1394,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2010-11-11 14:33:20.077000+01:00 +Internet,case-4279,2010-12-10 01:06:40+01:00,General,2011-03-02 08:30:51.773000+01:00,2010-12-10 01:06:40.010000+01:00,,Resource12,2010-10-15 01:06:40.020000+02:00,task-1395,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2010-11-11 14:33:31.895000+01:00 +Internet,case-4317,2010-12-30 01:06:40+01:00,General,2010-12-29 12:44:23.411000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource08,2010-11-04 01:06:40.010000+01:00,task-1426,Confirmation of receipt,complete,Group 1,Resource08,2010-11-23 12:58:39.850000+01:00 +Internet,case-4317,2010-12-30 01:06:40+01:00,General,2010-12-29 12:44:23.411000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource08,2010-11-04 01:06:40.010000+01:00,task-1891,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-11-23 13:02:43.993000+01:00 +Internet,case-4317,2010-12-30 01:06:40+01:00,General,2010-12-29 12:44:23.411000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource08,2010-11-04 01:06:40.010000+01:00,task-1892,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-11-23 13:03:09.100000+01:00 +Internet,case-4317,2010-12-30 01:06:40+01:00,General,2010-12-29 12:44:23.411000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource08,2010-11-04 01:06:40.010000+01:00,task-1890,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 08:57:14.441000+01:00 +Internet,case-4317,2010-12-30 01:06:40+01:00,General,2010-12-29 12:44:23.411000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource08,2010-11-04 01:06:40.010000+01:00,task-2102,T04 Determine confirmation of receipt,complete,EMPTY,Resource04,2010-11-26 10:09:50.090000+01:00 +Internet,case-4317,2010-12-30 01:06:40+01:00,General,2010-12-29 12:44:23.411000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource08,2010-11-04 01:06:40.010000+01:00,task-2130,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 10:02:41.089000+01:00 +Internet,case-4319,2010-12-31 01:06:40+01:00,General,2010-12-17 15:00:28.299000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-1429,Confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 13:56:43.347000+01:00 +Internet,case-4319,2010-12-31 01:06:40+01:00,General,2010-12-17 15:00:28.299000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-2425,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-11-30 13:57:29.374000+01:00 +Internet,case-4319,2010-12-31 01:06:40+01:00,General,2010-12-17 15:00:28.299000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-2426,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-11-30 13:58:42.811000+01:00 +Internet,case-4319,2010-12-31 01:06:40+01:00,General,2010-12-17 15:00:28.299000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-2427,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 13:59:06.922000+01:00 +Internet,case-4319,2010-12-31 01:06:40+01:00,General,2010-12-17 15:00:28.299000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-2431,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-11-30 14:00:38.275000+01:00 +Internet,case-4319,2010-12-31 01:06:40+01:00,General,2010-12-17 15:00:28.299000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-2429,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-11-30 14:01:04.464000+01:00 +Internet,case-4328,2011-01-08 00:00:00+01:00,General,2011-03-21 12:35:29.160000+01:00,2011-01-08 00:00:00.010000+01:00,,Resource51,2010-11-13 00:00:00.010000+01:00,task-1450,Confirmation of receipt,complete,EMPTY,Resource36,2011-03-01 15:45:50.426000+01:00 +Internet,case-4328,2011-01-08 00:00:00+01:00,General,2011-03-21 12:35:29.160000+01:00,2011-01-08 00:00:00.010000+01:00,,Resource51,2010-11-13 00:00:00.010000+01:00,task-14763,T02 Check confirmation of receipt,complete,Group 4,Resource36,2011-03-01 15:50:01.543000+01:00 +Internet,case-4328,2011-01-08 00:00:00+01:00,General,2011-03-21 12:35:29.160000+01:00,2011-01-08 00:00:00.010000+01:00,,Resource51,2010-11-13 00:00:00.010000+01:00,task-14764,T06 Determine necessity of stop advice,complete,Group 1,Resource36,2011-03-01 15:50:53.503000+01:00 +Internet,case-4328,2011-01-08 00:00:00+01:00,General,2011-03-21 12:35:29.160000+01:00,2011-01-08 00:00:00.010000+01:00,,Resource51,2010-11-13 00:00:00.010000+01:00,task-14765,T04 Determine confirmation of receipt,complete,Group 3,Resource36,2011-03-01 15:52:02.024000+01:00 +Internet,case-4328,2011-01-08 00:00:00+01:00,General,2011-03-21 12:35:29.160000+01:00,2011-01-08 00:00:00.010000+01:00,,Resource51,2010-11-13 00:00:00.010000+01:00,task-14767,T05 Print and send confirmation of receipt,complete,Group 2,Resource36,2011-03-01 15:53:25.806000+01:00 +Internet,case-4328,2011-01-08 00:00:00+01:00,General,2011-03-21 12:35:29.160000+01:00,2011-01-08 00:00:00.010000+01:00,,Resource51,2010-11-13 00:00:00.010000+01:00,task-14766,T10 Determine necessity to stop indication,complete,Group 1,Resource36,2011-03-01 15:55:04.214000+01:00 +Internet,case-4344,2011-01-10 00:00:00+01:00,General,2011-04-04 14:05:56.004000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1466,Confirmation of receipt,complete,Group 1,Resource04,2010-11-23 09:16:35.832000+01:00 +Internet,case-4344,2011-01-10 00:00:00+01:00,General,2011-04-04 14:05:56.004000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1823,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-11-23 09:18:53.915000+01:00 +Internet,case-4344,2011-01-10 00:00:00+01:00,General,2011-04-04 14:05:56.004000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1825,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-11-23 09:19:10.039000+01:00 +Internet,case-4344,2011-01-10 00:00:00+01:00,General,2011-04-04 14:05:56.004000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1826,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2010-11-23 09:24:11.612000+01:00 +Internet,case-4344,2011-01-10 00:00:00+01:00,General,2011-04-04 14:05:56.004000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1824,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-23 09:25:26.571000+01:00 +Internet,case-4344,2011-01-10 00:00:00+01:00,General,2011-04-04 14:05:56.004000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1827,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-23 09:27:57.790000+01:00 +Internet,case-4345,2011-01-10 00:00:00+01:00,General,2010-11-30 14:25:46.767000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1467,Confirmation of receipt,complete,Group 1,Resource21,2010-11-23 15:59:06.988000+01:00 +Internet,case-4345,2011-01-10 00:00:00+01:00,General,2010-11-30 14:25:46.767000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1941,T02 Check confirmation of receipt,complete,Group 4,Resource21,2010-11-23 16:08:15.596000+01:00 +Internet,case-4345,2011-01-10 00:00:00+01:00,General,2010-11-30 14:25:46.767000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1947,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-11-25 10:16:49.103000+01:00 +Internet,case-4345,2011-01-10 00:00:00+01:00,General,2010-11-30 14:25:46.767000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-2040,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:46:14.548000+01:00 +Internet,case-4345,2011-01-10 00:00:00+01:00,General,2010-11-30 14:25:46.767000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1942,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-30 13:58:39.431000+01:00 +Internet,case-4345,2011-01-10 00:00:00+01:00,General,2010-11-30 14:25:46.767000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-2428,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-30 13:58:56.702000+01:00 +Internet,case-4346,2011-01-10 00:00:00+01:00,General,2011-08-18 08:42:21.805000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-1468,Confirmation of receipt,complete,Group 1,Resource21,2010-11-25 09:01:06.997000+01:00 +Internet,case-4346,2011-01-10 00:00:00+01:00,General,2011-08-18 08:42:21.805000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-2020,T02 Check confirmation of receipt,complete,EMPTY,Resource21,2010-11-25 09:09:53.721000+01:00 +Internet,case-4346,2011-01-10 00:00:00+01:00,General,2011-08-18 08:42:21.805000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-2032,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2010-11-25 10:24:54.306000+01:00 +Internet,case-4346,2011-01-10 00:00:00+01:00,General,2011-08-18 08:42:21.805000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-2041,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:32:31.628000+01:00 +Internet,case-4346,2011-01-10 00:00:00+01:00,General,2011-08-18 08:42:21.805000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-2021,T06 Determine necessity of stop advice,complete,EMPTY,Resource21,2011-04-04 13:48:49.776000+02:00 +Internet,case-4346,2011-01-10 00:00:00+01:00,General,2011-08-18 08:42:21.805000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-18944,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource21,2011-04-04 13:51:48.317000+02:00 +Internet,case-4346,2011-01-10 00:00:00+01:00,General,2011-08-18 08:42:21.805000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-18945,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-04-04 13:52:20.251000+02:00 +Internet,case-4346,2011-01-10 00:00:00+01:00,General,2011-08-18 08:42:21.805000+02:00,2011-01-10 00:00:00.010000+01:00,,Resource21,2010-11-15 00:00:00.010000+01:00,task-18946,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-04-04 13:54:21.379000+02:00 +Internet,case-4347,2011-01-10 00:00:00+01:00,General,2010-11-23 15:37:50.423000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource26,2010-11-10 00:00:00.010000+01:00,task-1477,Confirmation of receipt,complete,Group 1,admin2,2010-11-23 15:37:51.505000+01:00 +Internet,case-4348,2011-01-10 00:00:00+01:00,General,2010-11-23 15:47:48.446000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource26,2010-11-10 00:00:00.010000+01:00,task-1478,Confirmation of receipt,complete,Group 1,admin2,2010-11-23 15:47:49.945000+01:00 +Internet,case-4349,2011-01-10 00:00:00+01:00,General,2010-11-23 15:48:24.623000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource26,2010-11-10 00:00:00.010000+01:00,task-1479,Confirmation of receipt,complete,Group 1,admin2,2010-11-23 15:48:25.571000+01:00 +Internet,case-4350,2011-01-10 00:00:00+01:00,General,2011-01-19 10:12:27.752000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource26,2010-11-10 00:00:00.010000+01:00,task-1480,Confirmation of receipt,complete,EMPTY,admin2,2011-01-19 10:12:28.533000+01:00 +Internet,case-4363,2011-01-10 00:00:00+01:00,General,2010-11-23 15:59:10.740000+01:00,2011-01-10 00:00:00.010000+01:00,,Resource26,2010-11-10 00:00:00.010000+01:00,task-1493,Confirmation of receipt,complete,Group 1,admin2,2010-11-23 15:59:11.872000+01:00 +Internet,case-4380,2010-12-23 01:06:40+01:00,General,2010-12-22 16:21:33.700000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource15,2010-11-01 01:06:40.010000+01:00,task-1510,Confirmation of receipt,complete,Group 1,Resource15,2010-11-23 12:25:37.551000+01:00 +Internet,case-4380,2010-12-23 01:06:40+01:00,General,2010-12-22 16:21:33.700000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource15,2010-11-01 01:06:40.010000+01:00,task-1884,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 08:58:13.474000+01:00 +Internet,case-4380,2010-12-23 01:06:40+01:00,General,2010-12-22 16:21:33.700000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource15,2010-11-01 01:06:40.010000+01:00,task-2104,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-11-30 08:39:05.866000+01:00 +Internet,case-4380,2010-12-23 01:06:40+01:00,General,2010-12-22 16:21:33.700000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource15,2010-11-01 01:06:40.010000+01:00,task-1885,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-11-30 08:40:11.604000+01:00 +Internet,case-4380,2010-12-23 01:06:40+01:00,General,2010-12-22 16:21:33.700000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource15,2010-11-01 01:06:40.010000+01:00,task-2305,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-11-30 08:40:35.638000+01:00 +Internet,case-4380,2010-12-23 01:06:40+01:00,General,2010-12-22 16:21:33.700000+01:00,2010-12-23 01:06:40.010000+01:00,,Resource15,2010-11-01 01:06:40.010000+01:00,task-2304,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:16:35.712000+01:00 +Internet,case-4384,2010-12-31 01:06:40+01:00,General,2010-12-14 16:11:07.326000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource01,2010-11-05 01:06:40.010000+01:00,task-1521,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 11:46:32.331000+01:00 +Internet,case-4384,2010-12-31 01:06:40+01:00,General,2010-12-14 16:11:07.326000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource01,2010-11-05 01:06:40.010000+01:00,task-3855,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-13 11:54:01.983000+01:00 +Internet,case-4384,2010-12-31 01:06:40+01:00,General,2010-12-14 16:11:07.326000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource01,2010-11-05 01:06:40.010000+01:00,task-3856,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-13 11:54:37.414000+01:00 +Internet,case-4384,2010-12-31 01:06:40+01:00,General,2010-12-14 16:11:07.326000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource01,2010-11-05 01:06:40.010000+01:00,task-3854,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 11:55:48.228000+01:00 +Internet,case-4384,2010-12-31 01:06:40+01:00,General,2010-12-14 16:11:07.326000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource01,2010-11-05 01:06:40.010000+01:00,task-3860,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-12-13 11:56:03.074000+01:00 +Internet,case-4384,2010-12-31 01:06:40+01:00,General,2010-12-14 16:11:07.326000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource01,2010-11-05 01:06:40.010000+01:00,task-3861,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 11:56:47.362000+01:00 +Internet,case-4388,2010-12-16 01:06:40+01:00,General,2010-12-13 14:06:03.626000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource04,2010-10-21 01:06:40.020000+02:00,task-1535,Confirmation of receipt,complete,Group 1,Resource04,2010-11-19 10:27:47.282000+01:00 +Internet,case-4388,2010-12-16 01:06:40+01:00,General,2010-12-13 14:06:03.626000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource04,2010-10-21 01:06:40.020000+02:00,task-1695,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-19 10:30:03.931000+01:00 +Internet,case-4388,2010-12-16 01:06:40+01:00,General,2010-12-13 14:06:03.626000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource04,2010-10-21 01:06:40.020000+02:00,task-1696,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-19 10:30:25.507000+01:00 +Internet,case-4388,2010-12-16 01:06:40+01:00,General,2010-12-13 14:06:03.626000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource04,2010-10-21 01:06:40.020000+02:00,task-1694,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2010-11-19 10:33:50.591000+01:00 +Internet,case-4388,2010-12-16 01:06:40+01:00,General,2010-12-13 14:06:03.626000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource04,2010-10-21 01:06:40.020000+02:00,task-1709,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-11-23 12:48:10.035000+01:00 +Internet,case-4388,2010-12-16 01:06:40+01:00,General,2010-12-13 14:06:03.626000+01:00,2010-12-16 01:06:40.010000+01:00,,Resource04,2010-10-21 01:06:40.020000+02:00,task-1889,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2010-11-23 12:48:54.429000+01:00 +Internet,case-4389,2011-01-11 00:00:00+01:00,General,2010-11-23 15:58:37.623000+01:00,2011-01-11 00:00:00.010000+01:00,,Resource04,2010-10-28 00:00:00.020000+02:00,task-1541,Confirmation of receipt,complete,Group 1,admin2,2010-11-23 15:58:38.429000+01:00 +Internet,case-4394,2011-01-05 01:06:40+01:00,General,2010-12-15 00:00:00.010000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource14,2010-11-10 01:06:40.010000+01:00,task-1551,Confirmation of receipt,complete,EMPTY,admin2,2010-12-16 12:40:07.939000+01:00 +Internet,case-4395,2011-01-03 01:06:40+01:00,General,2010-12-23 08:12:42.801000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-1552,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:39:01.149000+01:00 +Internet,case-4395,2011-01-03 01:06:40+01:00,General,2010-12-23 08:12:42.801000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3896,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-13 12:39:41.069000+01:00 +Internet,case-4395,2011-01-03 01:06:40+01:00,General,2010-12-23 08:12:42.801000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3895,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:51:14.991000+01:00 +Internet,case-4395,2011-01-03 01:06:40+01:00,General,2010-12-23 08:12:42.801000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3899,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:51:57.779000+01:00 +Internet,case-4395,2011-01-03 01:06:40+01:00,General,2010-12-23 08:12:42.801000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3902,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:52:39.872000+01:00 +Internet,case-4395,2011-01-03 01:06:40+01:00,General,2010-12-23 08:12:42.801000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3897,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-13 12:53:15.462000+01:00 +Internet,case-4396,2010-12-30 01:06:40+01:00,General,2010-12-23 08:12:07.587000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource07,2010-11-04 01:06:40.010000+01:00,task-1553,Confirmation of receipt,complete,Group 1,Resource07,2010-11-25 16:35:43.970000+01:00 +Internet,case-4396,2010-12-30 01:06:40+01:00,General,2010-12-23 08:12:07.587000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource07,2010-11-04 01:06:40.010000+01:00,task-2079,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-11-25 16:35:59.878000+01:00 +Internet,case-4396,2010-12-30 01:06:40+01:00,General,2010-12-23 08:12:07.587000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource07,2010-11-04 01:06:40.010000+01:00,task-2080,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-11-25 16:36:17.475000+01:00 +Internet,case-4396,2010-12-30 01:06:40+01:00,General,2010-12-23 08:12:07.587000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource07,2010-11-04 01:06:40.010000+01:00,task-2078,T02 Check confirmation of receipt,complete,Group 4,Resource32,2010-11-25 17:36:52.317000+01:00 +Internet,case-4396,2010-12-30 01:06:40+01:00,General,2010-12-23 08:12:07.587000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource07,2010-11-04 01:06:40.010000+01:00,task-2092,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-11-30 12:01:22.599000+01:00 +Internet,case-4396,2010-12-30 01:06:40+01:00,General,2010-12-23 08:12:07.587000+01:00,2010-12-30 01:06:40.010000+01:00,,Resource07,2010-11-04 01:06:40.010000+01:00,task-2394,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:18:46.819000+01:00 +Internet,case-4397,2011-01-05 01:06:40+01:00,Customer contact,2011-01-03 11:20:14.128000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource11,2010-11-10 01:06:40.010000+01:00,task-1554,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 08:38:28.119000+01:00 +Internet,case-4397,2011-01-05 01:06:40+01:00,Customer contact,2011-01-03 11:20:14.128000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource11,2010-11-10 01:06:40.010000+01:00,task-4315,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 08:42:06.640000+01:00 +Internet,case-4397,2011-01-05 01:06:40+01:00,Customer contact,2011-01-03 11:20:14.128000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource11,2010-11-10 01:06:40.010000+01:00,task-4316,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 08:44:09.988000+01:00 +Internet,case-4397,2011-01-05 01:06:40+01:00,Customer contact,2011-01-03 11:20:14.128000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource11,2010-11-10 01:06:40.010000+01:00,task-4314,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 08:58:06.213000+01:00 +Internet,case-4397,2011-01-05 01:06:40+01:00,Customer contact,2011-01-03 11:20:14.128000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource11,2010-11-10 01:06:40.010000+01:00,task-4337,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 09:08:19.661000+01:00 +Internet,case-4397,2011-01-05 01:06:40+01:00,Customer contact,2011-01-03 11:20:14.128000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource11,2010-11-10 01:06:40.010000+01:00,task-4350,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-15 09:08:44.350000+01:00 +Internet,case-4401,2010-12-20 01:06:40+01:00,Customer contact,2010-12-10 14:27:40.740000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource11,2010-10-25 01:06:40.020000+02:00,task-1558,Confirmation of receipt,complete,EMPTY,Resource19,2010-12-09 11:32:24.762000+01:00 +Internet,case-4401,2010-12-20 01:06:40+01:00,Customer contact,2010-12-10 14:27:40.740000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource11,2010-10-25 01:06:40.020000+02:00,task-3449,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-12-09 11:41:54.519000+01:00 +Internet,case-4401,2010-12-20 01:06:40+01:00,Customer contact,2010-12-10 14:27:40.740000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource11,2010-10-25 01:06:40.020000+02:00,task-3456,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-12-09 11:44:13.624000+01:00 +Internet,case-4401,2010-12-20 01:06:40+01:00,Customer contact,2010-12-10 14:27:40.740000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource11,2010-10-25 01:06:40.020000+02:00,task-3450,T06 Determine necessity of stop advice,complete,EMPTY,Resource11,2010-12-09 11:44:31.005000+01:00 +Internet,case-4401,2010-12-20 01:06:40+01:00,Customer contact,2010-12-10 14:27:40.740000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource11,2010-10-25 01:06:40.020000+02:00,task-3458,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-09 11:44:55.698000+01:00 +Internet,case-4401,2010-12-20 01:06:40+01:00,Customer contact,2010-12-10 14:27:40.740000+01:00,2010-12-20 01:06:40.010000+01:00,,Resource11,2010-10-25 01:06:40.020000+02:00,task-3457,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-10 10:05:41.449000+01:00 +Internet,case-4403,2011-01-12 01:06:40+01:00,General,2010-12-17 08:49:03.043000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-1560,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-13 10:28:58.696000+01:00 +Internet,case-4403,2011-01-12 01:06:40+01:00,General,2010-12-17 08:49:03.043000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-3791,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-13 10:29:20.204000+01:00 +Internet,case-4403,2011-01-12 01:06:40+01:00,General,2010-12-17 08:49:03.043000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-3793,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-13 10:29:44.324000+01:00 +Internet,case-4403,2011-01-12 01:06:40+01:00,General,2010-12-17 08:49:03.043000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-3794,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-13 10:30:05.509000+01:00 +Internet,case-4403,2011-01-12 01:06:40+01:00,General,2010-12-17 08:49:03.043000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-3792,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-13 10:30:16.612000+01:00 +Internet,case-4403,2011-01-12 01:06:40+01:00,General,2010-12-17 08:49:03.043000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource11,2010-10-26 01:06:40.020000+02:00,task-3795,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-13 10:39:16.049000+01:00 +Internet,case-4407,2011-12-21 01:06:40+01:00,General,2010-12-17 09:10:48.138000+01:00,2011-12-21 01:06:40.010000+01:00,,Resource34,2010-10-26 01:06:40.020000+02:00,task-1583,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-13 10:14:42.822000+01:00 +Internet,case-4407,2011-12-21 01:06:40+01:00,General,2010-12-17 09:10:48.138000+01:00,2011-12-21 01:06:40.010000+01:00,,Resource34,2010-10-26 01:06:40.020000+02:00,task-3770,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-13 10:15:06.626000+01:00 +Internet,case-4407,2011-12-21 01:06:40+01:00,General,2010-12-17 09:10:48.138000+01:00,2011-12-21 01:06:40.010000+01:00,,Resource34,2010-10-26 01:06:40.020000+02:00,task-3772,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-13 10:15:27.006000+01:00 +Internet,case-4407,2011-12-21 01:06:40+01:00,General,2010-12-17 09:10:48.138000+01:00,2011-12-21 01:06:40.010000+01:00,,Resource34,2010-10-26 01:06:40.020000+02:00,task-3774,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-13 10:16:08.245000+01:00 +Internet,case-4407,2011-12-21 01:06:40+01:00,General,2010-12-17 09:10:48.138000+01:00,2011-12-21 01:06:40.010000+01:00,,Resource34,2010-10-26 01:06:40.020000+02:00,task-3771,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-13 10:16:22.877000+01:00 +Internet,case-4407,2011-12-21 01:06:40+01:00,General,2010-12-17 09:10:48.138000+01:00,2011-12-21 01:06:40.010000+01:00,,Resource34,2010-10-26 01:06:40.020000+02:00,task-3775,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-13 10:21:25.358000+01:00 +Internet,case-4408,2011-01-07 01:06:40+01:00,Customer contact,2010-12-30 11:54:42.174000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource11,2010-11-12 01:06:40.010000+01:00,task-1589,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 09:31:28.615000+01:00 +Internet,case-4408,2011-01-07 01:06:40+01:00,Customer contact,2010-12-30 11:54:42.174000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource11,2010-11-12 01:06:40.010000+01:00,task-4365,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 09:32:15.833000+01:00 +Internet,case-4408,2011-01-07 01:06:40+01:00,Customer contact,2010-12-30 11:54:42.174000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource11,2010-11-12 01:06:40.010000+01:00,task-4366,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 09:34:41.886000+01:00 +Internet,case-4408,2011-01-07 01:06:40+01:00,Customer contact,2010-12-30 11:54:42.174000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource11,2010-11-12 01:06:40.010000+01:00,task-4364,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:23:35.595000+01:00 +Internet,case-4408,2011-01-07 01:06:40+01:00,Customer contact,2010-12-30 11:54:42.174000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource11,2010-11-12 01:06:40.010000+01:00,task-4471,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 15:02:22.927000+01:00 +Internet,case-4408,2011-01-07 01:06:40+01:00,Customer contact,2010-12-30 11:54:42.174000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource11,2010-11-12 01:06:40.010000+01:00,task-4585,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:09:53.180000+01:00 +Internet,case-4410,2010-12-31 01:06:40+01:00,General,2010-12-21 16:58:51.915000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-1591,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:03:26.710000+01:00 +Internet,case-4410,2010-12-31 01:06:40+01:00,General,2010-12-21 16:58:51.915000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-3864,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-12-13 12:03:51.008000+01:00 +Internet,case-4410,2010-12-31 01:06:40+01:00,General,2010-12-21 16:58:51.915000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-3866,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2010-12-13 12:04:12.053000+01:00 +Internet,case-4410,2010-12-31 01:06:40+01:00,General,2010-12-21 16:58:51.915000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-3867,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 12:04:49.579000+01:00 +Internet,case-4410,2010-12-31 01:06:40+01:00,General,2010-12-21 16:58:51.915000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-3865,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-13 12:05:04.400000+01:00 +Internet,case-4410,2010-12-31 01:06:40+01:00,General,2010-12-21 16:58:51.915000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-3868,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-13 12:05:24.780000+01:00 +Internet,case-4411,2010-12-31 01:06:40+01:00,General,2011-01-21 16:16:25.452000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource15,2010-11-05 01:06:40.010000+01:00,task-1599,Confirmation of receipt,complete,Group 1,Resource15,2010-11-23 12:36:04.005000+01:00 +Internet,case-4411,2010-12-31 01:06:40+01:00,General,2011-01-21 16:16:25.452000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource15,2010-11-05 01:06:40.010000+01:00,task-1887,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-11-24 11:41:40.604000+01:00 +Internet,case-4411,2010-12-31 01:06:40+01:00,General,2011-01-21 16:16:25.452000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource15,2010-11-05 01:06:40.010000+01:00,task-1976,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-11-24 11:42:11.894000+01:00 +Internet,case-4411,2010-12-31 01:06:40+01:00,General,2011-01-21 16:16:25.452000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource15,2010-11-05 01:06:40.010000+01:00,task-1886,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-11-26 08:58:36.790000+01:00 +Internet,case-4411,2010-12-31 01:06:40+01:00,General,2011-01-21 16:16:25.452000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource15,2010-11-05 01:06:40.010000+01:00,task-2105,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-11-30 08:55:50.262000+01:00 +Internet,case-4411,2010-12-31 01:06:40+01:00,General,2011-01-21 16:16:25.452000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource15,2010-11-05 01:06:40.010000+01:00,task-2319,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:17:13.976000+01:00 +Internet,case-4413,2010-12-31 01:06:40+01:00,General,2010-12-23 08:10:26.014000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-1601,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 08:00:28.887000+01:00 +Internet,case-4413,2010-12-31 01:06:40+01:00,General,2010-12-23 08:10:26.014000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-4287,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 08:04:02.850000+01:00 +Internet,case-4413,2010-12-31 01:06:40+01:00,General,2010-12-23 08:10:26.014000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-4288,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 08:13:46.791000+01:00 +Internet,case-4413,2010-12-31 01:06:40+01:00,General,2010-12-23 08:10:26.014000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-4286,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 08:55:20.876000+01:00 +Internet,case-4413,2010-12-31 01:06:40+01:00,General,2010-12-23 08:10:26.014000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-4329,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:04:34.939000+01:00 +Internet,case-4413,2010-12-31 01:06:40+01:00,General,2010-12-23 08:10:26.014000+01:00,2010-12-31 01:06:40.010000+01:00,,Resource11,2010-11-05 01:06:40.010000+01:00,task-4437,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:11:24.730000+01:00 +Internet,case-4414,2010-12-15 01:06:40+01:00,General,2010-12-20 14:49:55.261000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource04,2010-10-20 01:06:40.020000+02:00,task-1602,Confirmation of receipt,complete,Group 1,Resource04,2010-11-19 09:08:14.971000+01:00 +Internet,case-4414,2010-12-15 01:06:40+01:00,General,2010-12-20 14:49:55.261000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource04,2010-10-20 01:06:40.020000+02:00,task-1678,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-19 09:12:32.973000+01:00 +Internet,case-4414,2010-12-15 01:06:40+01:00,General,2010-12-20 14:49:55.261000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource04,2010-10-20 01:06:40.020000+02:00,task-1679,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-19 09:12:51.630000+01:00 +Internet,case-4414,2010-12-15 01:06:40+01:00,General,2010-12-20 14:49:55.261000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource04,2010-10-20 01:06:40.020000+02:00,task-1677,T02 Check confirmation of receipt,complete,EMPTY,Resource14,2010-11-19 09:13:40.046000+01:00 +Internet,case-4414,2010-12-15 01:06:40+01:00,General,2010-12-20 14:49:55.261000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource04,2010-10-20 01:06:40.020000+02:00,task-1684,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-11-23 12:47:07.717000+01:00 +Internet,case-4414,2010-12-15 01:06:40+01:00,General,2010-12-20 14:49:55.261000+01:00,2010-12-15 01:06:40.010000+01:00,,Resource04,2010-10-20 01:06:40.020000+02:00,task-1888,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 09:25:07.358000+01:00 +Internet,case-4437,2011-01-03 01:06:40+01:00,General,2011-01-14 11:39:00.429000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource15,2010-11-08 01:06:40.010000+01:00,task-1720,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-08 14:03:15.964000+01:00 +Internet,case-4437,2011-01-03 01:06:40+01:00,General,2011-01-14 11:39:00.429000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource15,2010-11-08 01:06:40.010000+01:00,task-3350,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-08 14:07:33.763000+01:00 +Internet,case-4437,2011-01-03 01:06:40+01:00,General,2011-01-14 11:39:00.429000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource15,2010-11-08 01:06:40.010000+01:00,task-3352,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-12-08 14:07:44.692000+01:00 +Internet,case-4437,2011-01-03 01:06:40+01:00,General,2011-01-14 11:39:00.429000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource15,2010-11-08 01:06:40.010000+01:00,task-3353,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 13:53:47.516000+01:00 +Internet,case-4437,2011-01-03 01:06:40+01:00,General,2011-01-14 11:39:00.429000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource15,2010-11-08 01:06:40.010000+01:00,task-3351,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-24 10:10:47.806000+01:00 +Internet,case-4437,2011-01-03 01:06:40+01:00,General,2011-01-14 11:39:00.429000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource15,2010-11-08 01:06:40.010000+01:00,task-5587,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-24 10:11:08.029000+01:00 +Internet,case-4498,2011-01-03 01:06:40+01:00,General,2010-12-27 09:32:51.456000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-1879,Confirmation of receipt,complete,Group 1,Resource01,2010-11-30 09:47:16.066000+01:00 +Internet,case-4498,2011-01-03 01:06:40+01:00,General,2010-12-27 09:32:51.456000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-2348,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-11-30 09:57:06.659000+01:00 +Internet,case-4498,2011-01-03 01:06:40+01:00,General,2010-12-27 09:32:51.456000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-2350,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-11-30 09:57:25.842000+01:00 +Internet,case-4498,2011-01-03 01:06:40+01:00,General,2010-12-27 09:32:51.456000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-2347,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 14:38:12.562000+01:00 +Internet,case-4498,2011-01-03 01:06:40+01:00,General,2010-12-27 09:32:51.456000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3129,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 14:49:08.718000+01:00 +Internet,case-4498,2011-01-03 01:06:40+01:00,General,2010-12-27 09:32:51.456000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3136,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-08 09:35:45.376000+01:00 +Internet,case-4500,2010-12-07 00:00:00+01:00,General,2010-12-07 10:30:13.041000+01:00,2010-12-07 00:00:00.010000+01:00,,Resource04,2010-10-12 00:00:00.020000+02:00,task-1903,Confirmation of receipt,complete,Group 1,Resource04,2010-11-24 16:02:24.377000+01:00 +Internet,case-4500,2010-12-07 00:00:00+01:00,General,2010-12-07 10:30:13.041000+01:00,2010-12-07 00:00:00.010000+01:00,,Resource04,2010-10-12 00:00:00.020000+02:00,task-1988,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-11-24 16:02:37.600000+01:00 +Internet,case-4500,2010-12-07 00:00:00+01:00,General,2010-12-07 10:30:13.041000+01:00,2010-12-07 00:00:00.010000+01:00,,Resource04,2010-10-12 00:00:00.020000+02:00,task-1990,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-11-24 16:02:47.233000+01:00 +Internet,case-4500,2010-12-07 00:00:00+01:00,General,2010-12-07 10:30:13.041000+01:00,2010-12-07 00:00:00.010000+01:00,,Resource04,2010-10-12 00:00:00.020000+02:00,task-1989,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-24 16:02:59.904000+01:00 +Internet,case-4500,2010-12-07 00:00:00+01:00,General,2010-12-07 10:30:13.041000+01:00,2010-12-07 00:00:00.010000+01:00,,Resource04,2010-10-12 00:00:00.020000+02:00,task-1992,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-24 16:03:16.770000+01:00 +Internet,case-4500,2010-12-07 00:00:00+01:00,General,2010-12-07 10:30:13.041000+01:00,2010-12-07 00:00:00.010000+01:00,,Resource04,2010-10-12 00:00:00.020000+02:00,task-1991,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2010-11-24 16:26:00.225000+01:00 +Internet,case-4502,2011-01-03 01:06:40+01:00,General,2010-12-27 09:33:21.478000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-1907,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 13:59:10.764000+01:00 +Internet,case-4502,2011-01-03 01:06:40+01:00,General,2010-12-27 09:33:21.478000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3960,T02 Check confirmation of receipt,complete,Group 4,Resource11,2010-12-13 13:59:42.994000+01:00 +Internet,case-4502,2011-01-03 01:06:40+01:00,General,2010-12-27 09:33:21.478000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3962,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2010-12-13 14:00:21.666000+01:00 +Internet,case-4502,2011-01-03 01:06:40+01:00,General,2010-12-27 09:33:21.478000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3961,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-13 14:00:40.629000+01:00 +Internet,case-4502,2011-01-03 01:06:40+01:00,General,2010-12-27 09:33:21.478000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3963,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-13 14:01:38.027000+01:00 +Internet,case-4502,2011-01-03 01:06:40+01:00,General,2010-12-27 09:33:21.478000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource01,2010-11-08 01:06:40.010000+01:00,task-3966,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-13 14:01:56.554000+01:00 +Internet,case-4503,2010-12-28 00:00:00+01:00,General,2010-12-24 11:31:03.532000+01:00,2010-12-28 00:00:00.010000+01:00,,Resource17,2010-11-02 00:00:00.010000+01:00,task-1908,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-09 10:41:02.292000+01:00 +Internet,case-4503,2010-12-28 00:00:00+01:00,General,2010-12-24 11:31:03.532000+01:00,2010-12-28 00:00:00.010000+01:00,,Resource17,2010-11-02 00:00:00.010000+01:00,task-3443,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-09 12:51:04.296000+01:00 +Internet,case-4503,2010-12-28 00:00:00+01:00,General,2010-12-24 11:31:03.532000+01:00,2010-12-28 00:00:00.010000+01:00,,Resource17,2010-11-02 00:00:00.010000+01:00,task-3478,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-09 13:44:12.572000+01:00 +Internet,case-4503,2010-12-28 00:00:00+01:00,General,2010-12-24 11:31:03.532000+01:00,2010-12-28 00:00:00.010000+01:00,,Resource17,2010-11-02 00:00:00.010000+01:00,task-3490,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:01:54.490000+01:00 +Internet,case-4503,2010-12-28 00:00:00+01:00,General,2010-12-24 11:31:03.532000+01:00,2010-12-28 00:00:00.010000+01:00,,Resource17,2010-11-02 00:00:00.010000+01:00,task-3444,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-17 10:42:56.319000+01:00 +Internet,case-4503,2010-12-28 00:00:00+01:00,General,2010-12-24 11:31:03.532000+01:00,2010-12-28 00:00:00.010000+01:00,,Resource17,2010-11-02 00:00:00.010000+01:00,task-4854,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-17 10:51:35.454000+01:00 +Internet,case-4504,2010-12-31 00:00:00+01:00,General,2010-12-29 10:59:05.066000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource05,2010-11-05 00:00:00.010000+01:00,task-1912,Confirmation of receipt,complete,EMPTY,Resource05,2010-12-06 10:34:37.814000+01:00 +Internet,case-4504,2010-12-31 00:00:00+01:00,General,2010-12-29 10:59:05.066000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource05,2010-11-05 00:00:00.010000+01:00,task-2848,T02 Check confirmation of receipt,complete,Group 4,Resource05,2010-12-06 10:46:53.521000+01:00 +Internet,case-4504,2010-12-31 00:00:00+01:00,General,2010-12-29 10:59:05.066000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource05,2010-11-05 00:00:00.010000+01:00,task-2849,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 10:47:33.803000+01:00 +Internet,case-4504,2010-12-31 00:00:00+01:00,General,2010-12-29 10:59:05.066000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource05,2010-11-05 00:00:00.010000+01:00,task-2854,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-12-06 10:48:47.503000+01:00 +Internet,case-4504,2010-12-31 00:00:00+01:00,General,2010-12-29 10:59:05.066000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource05,2010-11-05 00:00:00.010000+01:00,task-2853,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2010-12-06 11:23:17.384000+01:00 +Internet,case-4504,2010-12-31 00:00:00+01:00,General,2010-12-29 10:59:05.066000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource05,2010-11-05 00:00:00.010000+01:00,task-2920,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2010-12-06 11:24:09.769000+01:00 +Internet,case-4505,2011-02-10 01:06:40+01:00,General,2011-02-08 13:23:14.212000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-1913,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-07 13:59:27.164000+01:00 +Internet,case-4505,2011-02-10 01:06:40+01:00,General,2011-02-08 13:23:14.212000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-3104,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-07 14:00:15.088000+01:00 +Internet,case-4505,2011-02-10 01:06:40+01:00,General,2011-02-08 13:23:14.212000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-3105,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-07 14:00:30.156000+01:00 +Internet,case-4505,2011-02-10 01:06:40+01:00,General,2011-02-08 13:23:14.212000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-3103,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-08 09:19:42.102000+01:00 +Internet,case-4505,2011-02-10 01:06:40+01:00,General,2011-02-08 13:23:14.212000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-3210,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-08 11:59:19.048000+01:00 +Internet,case-4505,2011-02-10 01:06:40+01:00,General,2011-02-08 13:23:14.212000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-11-04 01:06:40.010000+01:00,task-3312,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 13:46:55.828000+01:00 +Internet,case-4509,2011-01-04 00:00:00+01:00,General,2010-12-29 15:36:23.770000+01:00,2011-01-04 00:00:00.010000+01:00,,Resource15,2010-11-09 00:00:00.010000+01:00,task-1917,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-06 09:16:04.356000+01:00 +Internet,case-4509,2011-01-04 00:00:00+01:00,General,2010-12-29 15:36:23.770000+01:00,2011-01-04 00:00:00.010000+01:00,,Resource15,2010-11-09 00:00:00.010000+01:00,task-2819,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-06 09:26:09.124000+01:00 +Internet,case-4509,2011-01-04 00:00:00+01:00,General,2010-12-29 15:36:23.770000+01:00,2011-01-04 00:00:00.010000+01:00,,Resource15,2010-11-09 00:00:00.010000+01:00,task-2820,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-06 09:30:05.090000+01:00 +Internet,case-4509,2011-01-04 00:00:00+01:00,General,2010-12-29 15:36:23.770000+01:00,2011-01-04 00:00:00.010000+01:00,,Resource15,2010-11-09 00:00:00.010000+01:00,task-2824,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-06 09:31:52.506000+01:00 +Internet,case-4509,2011-01-04 00:00:00+01:00,General,2010-12-29 15:36:23.770000+01:00,2011-01-04 00:00:00.010000+01:00,,Resource15,2010-11-09 00:00:00.010000+01:00,task-2821,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 11:51:00.046000+01:00 +Internet,case-4509,2011-01-04 00:00:00+01:00,General,2010-12-29 15:36:23.770000+01:00,2011-01-04 00:00:00.010000+01:00,,Resource15,2010-11-09 00:00:00.010000+01:00,task-2953,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:09:15.693000+01:00 +Internet,case-4511,2011-01-05 00:00:00+01:00,General,2011-01-05 14:46:51.620000+01:00,2011-01-05 00:00:00.010000+01:00,,Resource08,2010-11-10 00:00:00.010000+01:00,task-1924,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-03 12:12:23.592000+01:00 +Internet,case-4511,2011-01-05 00:00:00+01:00,General,2011-01-05 14:46:51.620000+01:00,2011-01-05 00:00:00.010000+01:00,,Resource08,2010-11-10 00:00:00.010000+01:00,task-2690,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-03 12:12:46.827000+01:00 +Internet,case-4511,2011-01-05 00:00:00+01:00,General,2011-01-05 14:46:51.620000+01:00,2011-01-05 00:00:00.010000+01:00,,Resource08,2010-11-10 00:00:00.010000+01:00,task-2691,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-03 12:13:11.392000+01:00 +Internet,case-4511,2011-01-05 00:00:00+01:00,General,2011-01-05 14:46:51.620000+01:00,2011-01-05 00:00:00.010000+01:00,,Resource08,2010-11-10 00:00:00.010000+01:00,task-2693,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-03 12:13:27.511000+01:00 +Internet,case-4511,2011-01-05 00:00:00+01:00,General,2011-01-05 14:46:51.620000+01:00,2011-01-05 00:00:00.010000+01:00,,Resource08,2010-11-10 00:00:00.010000+01:00,task-2692,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-03 12:22:49.461000+01:00 +Internet,case-4511,2011-01-05 00:00:00+01:00,General,2011-01-05 14:46:51.620000+01:00,2011-01-05 00:00:00.010000+01:00,,Resource08,2010-11-10 00:00:00.010000+01:00,task-2703,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:39:47.169000+01:00 +Internet,case-4512,2011-05-26 01:06:40+02:00,General,2011-04-19 13:21:09.087000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource02,2010-11-12 01:06:40.010000+01:00,task-1932,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-08 17:31:19.128000+01:00 +Internet,case-4512,2011-05-26 01:06:40+02:00,General,2011-04-19 13:21:09.087000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource02,2010-11-12 01:06:40.010000+01:00,task-3417,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-12-22 14:09:43.539000+01:00 +Internet,case-4512,2011-05-26 01:06:40+02:00,General,2011-04-19 13:21:09.087000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource02,2010-11-12 01:06:40.010000+01:00,task-5463,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-22 14:16:11.506000+01:00 +Internet,case-4512,2011-05-26 01:06:40+02:00,General,2011-04-19 13:21:09.087000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource02,2010-11-12 01:06:40.010000+01:00,task-5466,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 10:01:18.997000+01:00 +Internet,case-4512,2011-05-26 01:06:40+02:00,General,2011-04-19 13:21:09.087000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource02,2010-11-12 01:06:40.010000+01:00,task-3418,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-05 15:04:18.521000+01:00 +Internet,case-4512,2011-05-26 01:06:40+02:00,General,2011-04-19 13:21:09.087000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource02,2010-11-12 01:06:40.010000+01:00,task-6908,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-05 15:41:43.800000+01:00 +Internet,case-4513,2011-01-11 01:06:40+01:00,General,2011-01-07 14:47:52.474000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource15,2010-11-16 01:06:40.010000+01:00,task-1933,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-03 14:23:44.825000+01:00 +Internet,case-4513,2011-01-11 01:06:40+01:00,General,2011-01-07 14:47:52.474000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource15,2010-11-16 01:06:40.010000+01:00,task-2747,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-03 14:25:37.215000+01:00 +Internet,case-4513,2011-01-11 01:06:40+01:00,General,2011-01-07 14:47:52.474000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource15,2010-11-16 01:06:40.010000+01:00,task-2749,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-03 14:54:23.415000+01:00 +Internet,case-4513,2011-01-11 01:06:40+01:00,General,2011-01-07 14:47:52.474000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource15,2010-11-16 01:06:40.010000+01:00,task-2754,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:24:42.802000+01:00 +Internet,case-4513,2011-01-11 01:06:40+01:00,General,2011-01-07 14:47:52.474000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource15,2010-11-16 01:06:40.010000+01:00,task-2748,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-08 09:43:34.084000+01:00 +Internet,case-4513,2011-01-11 01:06:40+01:00,General,2011-01-07 14:47:52.474000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource15,2010-11-16 01:06:40.010000+01:00,task-3218,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-08 09:43:49.538000+01:00 +Internet,case-4515,2011-01-03 01:06:40+01:00,General,2010-12-17 15:13:58.294000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource07,2010-11-08 01:06:40.010000+01:00,task-1938,Confirmation of receipt,complete,Group 1,Resource07,2010-12-02 09:14:36.341000+01:00 +Internet,case-4515,2011-01-03 01:06:40+01:00,General,2010-12-17 15:13:58.294000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource07,2010-11-08 01:06:40.010000+01:00,task-2595,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-02 09:15:36.139000+01:00 +Internet,case-4515,2011-01-03 01:06:40+01:00,General,2010-12-17 15:13:58.294000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource07,2010-11-08 01:06:40.010000+01:00,task-2596,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-02 09:22:48.215000+01:00 +Internet,case-4515,2011-01-03 01:06:40+01:00,General,2010-12-17 15:13:58.294000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource07,2010-11-08 01:06:40.010000+01:00,task-2594,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-02 09:23:22.313000+01:00 +Internet,case-4515,2011-01-03 01:06:40+01:00,General,2010-12-17 15:13:58.294000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource07,2010-11-08 01:06:40.010000+01:00,task-2600,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-02 09:23:38.418000+01:00 +Internet,case-4515,2011-01-03 01:06:40+01:00,General,2010-12-17 15:13:58.294000+01:00,2011-01-03 01:06:40.010000+01:00,,Resource07,2010-11-08 01:06:40.010000+01:00,task-2601,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:33:31.641000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-1944,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-09 11:58:38.877000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-3466,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-09 12:00:00.659000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-3467,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-09 13:44:21.064000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-3491,T11 Create document X request unlicensed,complete,Group 1,Resource17,2011-01-04 11:04:26.169000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-6670,T12 Check document X request unlicensed,complete,EMPTY,Resource24,2011-01-04 11:58:58.041000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-3465,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 08:57:03.458000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-7149,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 08:57:48.917000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-7150,T05 Print and send confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 08:58:30.889000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-6683,T13 Adjust document X request unlicensed,complete,Group 1,Resource17,2011-01-07 08:58:41.064000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-7151,T12 Check document X request unlicensed,complete,Group 4,Resource17,2011-01-07 08:59:10.268000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-7152,T14 Determine document X request unlicensed,complete,EMPTY,Resource10,2011-01-07 11:28:15.929000+01:00 +Internet,case-4516,2011-01-12 01:06:40+01:00,General,2011-01-10 11:01:52.963000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource17,2010-11-17 01:06:40.010000+01:00,task-7223,T15 Print document X request unlicensed,complete,Group 2,Resource17,2011-01-10 11:01:52.812000+01:00 +Internet,case-4517,2011-01-12 00:00:00+01:00,General,2011-01-04 09:31:35.967000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource01,2010-11-17 00:00:00.010000+01:00,task-1949,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 10:50:08.645000+01:00 +Internet,case-4517,2011-01-12 00:00:00+01:00,General,2011-01-04 09:31:35.967000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource01,2010-11-17 00:00:00.010000+01:00,task-4422,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 10:50:35.547000+01:00 +Internet,case-4517,2011-01-12 00:00:00+01:00,General,2011-01-04 09:31:35.967000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource01,2010-11-17 00:00:00.010000+01:00,task-4423,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 10:51:42.943000+01:00 +Internet,case-4517,2011-01-12 00:00:00+01:00,General,2011-01-04 09:31:35.967000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource01,2010-11-17 00:00:00.010000+01:00,task-4425,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 10:52:34.597000+01:00 +Internet,case-4517,2011-01-12 00:00:00+01:00,General,2011-01-04 09:31:35.967000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource01,2010-11-17 00:00:00.010000+01:00,task-4424,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:39:16.015000+01:00 +Internet,case-4517,2011-01-12 00:00:00+01:00,General,2011-01-04 09:31:35.967000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource01,2010-11-17 00:00:00.010000+01:00,task-4627,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:17:19.301000+01:00 +Internet,case-4518,2011-01-12 00:00:00+01:00,General,2010-12-13 10:05:15.332000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource05,2010-11-17 00:00:00.010000+01:00,task-1950,Confirmation of receipt,complete,EMPTY,Resource05,2010-12-06 11:09:48.632000+01:00 +Internet,case-4518,2011-01-12 00:00:00+01:00,General,2010-12-13 10:05:15.332000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource05,2010-11-17 00:00:00.010000+01:00,task-2884,T02 Check confirmation of receipt,complete,Group 4,Resource05,2010-12-06 11:10:28.555000+01:00 +Internet,case-4518,2011-01-12 00:00:00+01:00,General,2010-12-13 10:05:15.332000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource05,2010-11-17 00:00:00.010000+01:00,task-2886,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2010-12-06 11:11:12.638000+01:00 +Internet,case-4518,2011-01-12 00:00:00+01:00,General,2010-12-13 10:05:15.332000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource05,2010-11-17 00:00:00.010000+01:00,task-2885,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 11:11:52.086000+01:00 +Internet,case-4518,2011-01-12 00:00:00+01:00,General,2010-12-13 10:05:15.332000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource05,2010-11-17 00:00:00.010000+01:00,task-2888,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-12-06 11:12:27.556000+01:00 +Internet,case-4518,2011-01-12 00:00:00+01:00,General,2010-12-13 10:05:15.332000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource05,2010-11-17 00:00:00.010000+01:00,task-2887,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2010-12-06 11:13:36.416000+01:00 +Internet,case-4518,2011-01-12 00:00:00+01:00,General,2010-12-13 10:05:15.332000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource05,2010-11-17 00:00:00.010000+01:00,task-2891,T11 Create document X request unlicensed,complete,EMPTY,Resource05,2010-12-06 11:19:56.774000+01:00 +Internet,case-4518,2011-01-12 00:00:00+01:00,General,2010-12-13 10:05:15.332000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource05,2010-11-17 00:00:00.010000+01:00,task-2907,T12 Check document X request unlicensed,complete,Group 4,Resource05,2010-12-13 09:58:10.924000+01:00 +Internet,case-4518,2011-01-12 00:00:00+01:00,General,2010-12-13 10:05:15.332000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource05,2010-11-17 00:00:00.010000+01:00,task-3757,T14 Determine document X request unlicensed,complete,Group 3,Resource05,2010-12-13 09:58:45.641000+01:00 +Internet,case-4518,2011-01-12 00:00:00+01:00,General,2010-12-13 10:05:15.332000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource05,2010-11-17 00:00:00.010000+01:00,task-3758,T15 Print document X request unlicensed,complete,Group 2,Resource05,2010-12-13 10:05:15.164000+01:00 +Internet,case-4519,2011-01-12 01:06:40+01:00,General,2010-12-24 10:59:35.765000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource01,2010-11-17 01:06:40.010000+01:00,task-1951,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 11:14:18.499000+01:00 +Internet,case-4519,2011-01-12 01:06:40+01:00,General,2010-12-24 10:59:35.765000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource01,2010-11-17 01:06:40.010000+01:00,task-4442,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 11:14:33.948000+01:00 +Internet,case-4519,2011-01-12 01:06:40+01:00,General,2010-12-24 10:59:35.765000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource01,2010-11-17 01:06:40.010000+01:00,task-4443,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 11:15:38.180000+01:00 +Internet,case-4519,2011-01-12 01:06:40+01:00,General,2010-12-24 10:59:35.765000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource01,2010-11-17 01:06:40.010000+01:00,task-4448,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 11:16:02.558000+01:00 +Internet,case-4519,2011-01-12 01:06:40+01:00,General,2010-12-24 10:59:35.765000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource01,2010-11-17 01:06:40.010000+01:00,task-4444,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:26:15.178000+01:00 +Internet,case-4519,2011-01-12 01:06:40+01:00,General,2010-12-24 10:59:35.765000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource01,2010-11-17 01:06:40.010000+01:00,task-4622,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:15:45.864000+01:00 +Internet,case-4526,2011-01-04 01:06:40+01:00,General,2011-01-04 15:11:30.255000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource08,2010-11-09 01:06:40.010000+01:00,task-1958,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-03 15:47:30.578000+01:00 +Internet,case-4526,2011-01-04 01:06:40+01:00,General,2011-01-04 15:11:30.255000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource08,2010-11-09 01:06:40.010000+01:00,task-2763,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-03 15:54:20.198000+01:00 +Internet,case-4526,2011-01-04 01:06:40+01:00,General,2011-01-04 15:11:30.255000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource08,2010-11-09 01:06:40.010000+01:00,task-2765,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 08:23:21.296000+01:00 +Internet,case-4526,2011-01-04 01:06:40+01:00,General,2011-01-04 15:11:30.255000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource08,2010-11-09 01:06:40.010000+01:00,task-2788,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:26:34.572000+01:00 +Internet,case-4526,2011-01-04 01:06:40+01:00,General,2011-01-04 15:11:30.255000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource08,2010-11-09 01:06:40.010000+01:00,task-2764,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-09 14:25:07.465000+01:00 +Internet,case-4526,2011-01-04 01:06:40+01:00,General,2011-01-04 15:11:30.255000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource08,2010-11-09 01:06:40.010000+01:00,task-3497,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-21 11:48:46.252000+01:00 +Internet,case-4527,2011-02-24 01:06:40+01:00,General,2011-01-31 11:39:05.417000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource02,2010-11-18 01:06:40.010000+01:00,task-1959,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-11 07:47:45.213000+01:00 +Internet,case-4527,2011-02-24 01:06:40+01:00,General,2011-01-31 11:39:05.417000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource02,2010-11-18 01:06:40.010000+01:00,task-7511,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-11 07:54:35.176000+01:00 +Internet,case-4527,2011-02-24 01:06:40+01:00,General,2011-01-31 11:39:05.417000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource02,2010-11-18 01:06:40.010000+01:00,task-7513,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 08:14:59.202000+01:00 +Internet,case-4527,2011-02-24 01:06:40+01:00,General,2011-01-31 11:39:05.417000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource02,2010-11-18 01:06:40.010000+01:00,task-7519,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 09:16:51.017000+01:00 +Internet,case-4527,2011-02-24 01:06:40+01:00,General,2011-01-31 11:39:05.417000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource02,2010-11-18 01:06:40.010000+01:00,task-7512,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-11 12:32:45.042000+01:00 +Internet,case-4527,2011-02-24 01:06:40+01:00,General,2011-01-31 11:39:05.417000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource02,2010-11-18 01:06:40.010000+01:00,task-7678,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-11 12:33:06.980000+01:00 +Internet,case-4529,2011-01-13 00:00:00+01:00,General,2011-01-28 13:14:26.380000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource02,2010-11-18 00:00:00.010000+01:00,task-1961,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-03 13:39:15.425000+01:00 +Internet,case-4529,2011-01-13 00:00:00+01:00,General,2011-01-28 13:14:26.380000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource02,2010-11-18 00:00:00.010000+01:00,task-2720,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-06 11:03:30.734000+01:00 +Internet,case-4529,2011-01-13 00:00:00+01:00,General,2011-01-28 13:14:26.380000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource02,2010-11-18 00:00:00.010000+01:00,task-2878,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 11:52:41.561000+01:00 +Internet,case-4529,2011-01-13 00:00:00+01:00,General,2011-01-28 13:14:26.380000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource02,2010-11-18 00:00:00.010000+01:00,task-2955,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:10:14.038000+01:00 +Internet,case-4529,2011-01-13 00:00:00+01:00,General,2011-01-28 13:14:26.380000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource02,2010-11-18 00:00:00.010000+01:00,task-2721,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-07 14:32:16.240000+01:00 +Internet,case-4529,2011-01-13 00:00:00+01:00,General,2011-01-28 13:14:26.380000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource02,2010-11-18 00:00:00.010000+01:00,task-3125,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-07 14:32:36.452000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-1967,Confirmation of receipt,complete,EMPTY,Resource05,2010-12-06 11:47:02.080000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2943,T02 Check confirmation of receipt,complete,Group 4,Resource05,2010-12-06 11:48:57.302000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2947,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2010-12-06 11:49:16.129000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2945,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 11:50:04.994000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2950,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource05,2010-12-06 11:50:30.956000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2951,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 11:50:52.453000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2952,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource05,2010-12-06 11:52:06.628000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2954,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 11:54:10.625000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2957,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource05,2010-12-06 11:55:50.234000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2963,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 11:56:03.915000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2964,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-12-06 11:56:22.116000+01:00 +Internet,case-4532,2011-01-14 01:06:40+01:00,General,2010-12-22 10:20:02.829000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource05,2010-11-19 01:06:40.010000+01:00,task-2948,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:04:27.090000+01:00 +Internet,case-4533,2011-01-04 01:06:40+01:00,General,2010-12-17 00:00:00.010000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-1968,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-03 13:53:37.924000+01:00 +Internet,case-4533,2011-01-04 01:06:40+01:00,General,2010-12-17 00:00:00.010000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-2728,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-03 13:58:47.227000+01:00 +Internet,case-4533,2011-01-04 01:06:40+01:00,General,2010-12-17 00:00:00.010000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-2734,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-03 14:47:50.288000+01:00 +Internet,case-4533,2011-01-04 01:06:40+01:00,General,2010-12-17 00:00:00.010000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-2751,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:22:14.802000+01:00 +Internet,case-4533,2011-01-04 01:06:40+01:00,General,2010-12-17 00:00:00.010000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-2729,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-16 11:18:58.845000+01:00 +Internet,case-4533,2011-01-04 01:06:40+01:00,General,2010-12-17 00:00:00.010000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-4657,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-16 11:19:20.894000+01:00 +Internet,case-4534,2011-01-04 01:06:40+01:00,General,2011-01-10 13:23:01.068000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-1978,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-14 09:58:30.806000+01:00 +Internet,case-4534,2011-01-04 01:06:40+01:00,General,2011-01-10 13:23:01.068000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4065,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-14 10:00:36.354000+01:00 +Internet,case-4534,2011-01-04 01:06:40+01:00,General,2011-01-10 13:23:01.068000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4066,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-14 10:02:44.613000+01:00 +Internet,case-4534,2011-01-04 01:06:40+01:00,General,2011-01-10 13:23:01.068000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4070,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-14 10:04:17.190000+01:00 +Internet,case-4534,2011-01-04 01:06:40+01:00,General,2011-01-10 13:23:01.068000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4067,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:10:14.646000+01:00 +Internet,case-4534,2011-01-04 01:06:40+01:00,General,2011-01-10 13:23:01.068000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4440,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:14:01.720000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-1984,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-14 15:08:54.503000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-4240,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:19:10.470000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-4776,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:21:30.318000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-4789,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:23:50.542000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-4241,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 12:48:43.961000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-6051,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-01-13 15:04:16.192000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-8183,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-13 15:04:49.935000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-8184,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-31 11:01:18.270000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-10157,T16 Report reasons to hold request,complete,Group 1,Resource12,2011-02-15 14:40:08.631000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-12325,T17 Check report Y to stop indication,complete,Group 4,Resource12,2011-02-15 14:40:44.022000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-12326,T19 Determine report Y to stop indication,complete,EMPTY,Resource12,2011-02-15 14:43:16.487000+01:00 +Internet,case-4537,2011-01-04 01:06:40+01:00,General,,2011-01-04 01:06:40.010000+01:00,,Resource12,2010-11-09 01:06:40.010000+01:00,task-12329,T20 Print report Y to stop indication,complete,Group 2,Resource12,2011-02-15 14:43:43.912000+01:00 +Internet,case-4538,2011-01-04 01:06:40+01:00,General,2010-12-24 10:32:30.453000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-1985,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-14 11:31:05.784000+01:00 +Internet,case-4538,2011-01-04 01:06:40+01:00,General,2010-12-24 10:32:30.453000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4097,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-14 11:31:29.201000+01:00 +Internet,case-4538,2011-01-04 01:06:40+01:00,General,2010-12-24 10:32:30.453000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4098,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-14 11:32:05.930000+01:00 +Internet,case-4538,2011-01-04 01:06:40+01:00,General,2010-12-24 10:32:30.453000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4100,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-14 11:32:48.547000+01:00 +Internet,case-4538,2011-01-04 01:06:40+01:00,General,2010-12-24 10:32:30.453000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4099,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:15:20.129000+01:00 +Internet,case-4538,2011-01-04 01:06:40+01:00,General,2010-12-24 10:32:30.453000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4447,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:14:59.683000+01:00 +Internet,case-4539,2010-12-24 00:00:00+01:00,General,2010-12-24 14:55:51.294000+01:00,2010-12-24 00:00:00.010000+01:00,,Resource09,2010-10-29 00:00:00.020000+02:00,task-1987,Confirmation of receipt,complete,EMPTY,Resource09,2010-12-08 10:36:47.253000+01:00 +Internet,case-4539,2010-12-24 00:00:00+01:00,General,2010-12-24 14:55:51.294000+01:00,2010-12-24 00:00:00.010000+01:00,,Resource09,2010-10-29 00:00:00.020000+02:00,task-3243,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-12-08 10:37:27.181000+01:00 +Internet,case-4539,2010-12-24 00:00:00+01:00,General,2010-12-24 14:55:51.294000+01:00,2010-12-24 00:00:00.010000+01:00,,Resource09,2010-10-29 00:00:00.020000+02:00,task-3245,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource09,2010-12-08 10:37:47.194000+01:00 +Internet,case-4539,2010-12-24 00:00:00+01:00,General,2010-12-24 14:55:51.294000+01:00,2010-12-24 00:00:00.010000+01:00,,Resource09,2010-10-29 00:00:00.020000+02:00,task-3244,T08 Draft and send request for advice,complete,Group 1,Resource09,2010-12-08 10:38:16.074000+01:00 +Internet,case-4539,2010-12-24 00:00:00+01:00,General,2010-12-24 14:55:51.294000+01:00,2010-12-24 00:00:00.010000+01:00,,Resource09,2010-10-29 00:00:00.020000+02:00,task-3246,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource09,2010-12-08 10:38:33.164000+01:00 +Internet,case-4539,2010-12-24 00:00:00+01:00,General,2010-12-24 14:55:51.294000+01:00,2010-12-24 00:00:00.010000+01:00,,Resource09,2010-10-29 00:00:00.020000+02:00,task-3247,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2010-12-08 10:38:56.857000+01:00 +Internet,case-4539,2010-12-24 00:00:00+01:00,General,2010-12-24 14:55:51.294000+01:00,2010-12-24 00:00:00.010000+01:00,,Resource09,2010-10-29 00:00:00.020000+02:00,task-3248,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2010-12-08 10:39:22.815000+01:00 +Internet,case-4539,2010-12-24 00:00:00+01:00,General,2010-12-24 14:55:51.294000+01:00,2010-12-24 00:00:00.010000+01:00,,Resource09,2010-10-29 00:00:00.020000+02:00,task-3242,T02 Check confirmation of receipt,complete,EMPTY,Resource09,2010-12-20 14:21:51.192000+01:00 +Internet,case-4539,2010-12-24 00:00:00+01:00,General,2010-12-24 14:55:51.294000+01:00,2010-12-24 00:00:00.010000+01:00,,Resource09,2010-10-29 00:00:00.020000+02:00,task-5153,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2010-12-20 14:22:43.875000+01:00 +Internet,case-4539,2010-12-24 00:00:00+01:00,General,2010-12-24 14:55:51.294000+01:00,2010-12-24 00:00:00.010000+01:00,,Resource09,2010-10-29 00:00:00.020000+02:00,task-5156,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2010-12-20 14:23:42.284000+01:00 +Internet,case-4540,2011-01-19 00:00:00+01:00,General,2010-12-23 15:15:58.399000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-2011,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-13 14:12:59.193000+01:00 +Internet,case-4540,2011-01-19 00:00:00+01:00,General,2010-12-23 15:15:58.399000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3975,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-13 14:13:33.180000+01:00 +Internet,case-4540,2011-01-19 00:00:00+01:00,General,2010-12-23 15:15:58.399000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3974,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-13 14:14:06.699000+01:00 +Internet,case-4540,2011-01-19 00:00:00+01:00,General,2010-12-23 15:15:58.399000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3977,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-13 14:14:34.976000+01:00 +Internet,case-4540,2011-01-19 00:00:00+01:00,General,2010-12-23 15:15:58.399000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3978,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-13 14:15:15.140000+01:00 +Internet,case-4540,2011-01-19 00:00:00+01:00,General,2010-12-23 15:15:58.399000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3976,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-13 16:38:02.696000+01:00 +Internet,case-4546,2011-01-20 00:00:00+01:00,General,2011-01-12 14:38:39.025000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource05,2010-11-25 00:00:00.010000+01:00,task-2051,Confirmation of receipt,complete,EMPTY,Resource05,2010-12-06 12:33:07.552000+01:00 +Internet,case-4546,2011-01-20 00:00:00+01:00,General,2011-01-12 14:38:39.025000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource05,2010-11-25 00:00:00.010000+01:00,task-2975,T02 Check confirmation of receipt,complete,Group 4,Resource05,2010-12-06 12:34:43.472000+01:00 +Internet,case-4546,2011-01-20 00:00:00+01:00,General,2011-01-12 14:38:39.025000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource05,2010-11-25 00:00:00.010000+01:00,task-2976,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2010-12-06 12:35:04.050000+01:00 +Internet,case-4546,2011-01-20 00:00:00+01:00,General,2011-01-12 14:38:39.025000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource05,2010-11-25 00:00:00.010000+01:00,task-2978,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2010-12-06 12:35:27.484000+01:00 +Internet,case-4546,2011-01-20 00:00:00+01:00,General,2011-01-12 14:38:39.025000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource05,2010-11-25 00:00:00.010000+01:00,task-2977,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 08:10:52.054000+01:00 +Internet,case-4546,2011-01-20 00:00:00+01:00,General,2011-01-12 14:38:39.025000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource05,2010-11-25 00:00:00.010000+01:00,task-3019,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-07 08:32:28.223000+01:00 +Internet,case-4553,2011-02-15 01:06:40+01:00,General,2011-01-19 13:55:58.483000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-2122,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-03 14:05:12.402000+01:00 +Internet,case-4553,2011-02-15 01:06:40+01:00,General,2011-01-19 13:55:58.483000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-2736,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-06 11:02:58.683000+01:00 +Internet,case-4553,2011-02-15 01:06:40+01:00,General,2011-01-19 13:55:58.483000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-2877,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 11:56:23.729000+01:00 +Internet,case-4553,2011-02-15 01:06:40+01:00,General,2011-01-19 13:55:58.483000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-2966,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:11:57.194000+01:00 +Internet,case-4553,2011-02-15 01:06:40+01:00,General,2011-01-19 13:55:58.483000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-2737,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-13 12:51:15.058000+01:00 +Internet,case-4553,2011-02-15 01:06:40+01:00,General,2011-01-19 13:55:58.483000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-3900,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource02,2010-12-13 12:52:55.750000+01:00 +Internet,case-4553,2011-02-15 01:06:40+01:00,General,2011-01-19 13:55:58.483000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-3901,T07-4 Draft internal advice to hold for type 4,complete,Group 12,Resource02,2010-12-13 12:53:31.919000+01:00 +Internet,case-4553,2011-02-15 01:06:40+01:00,General,2011-01-19 13:55:58.483000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-3906,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2010-12-13 12:55:22.347000+01:00 +Internet,case-4553,2011-02-15 01:06:40+01:00,General,2011-01-19 13:55:58.483000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource02,2010-11-09 01:06:40.010000+01:00,task-3909,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2010-12-13 12:55:53.481000+01:00 +Internet,case-4554,2011-01-04 01:06:40+01:00,General,2011-01-04 09:32:14.134000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-2136,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-14 11:58:24.911000+01:00 +Internet,case-4554,2011-01-04 01:06:40+01:00,General,2011-01-04 09:32:14.134000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4118,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-14 11:58:42.082000+01:00 +Internet,case-4554,2011-01-04 01:06:40+01:00,General,2011-01-04 09:32:14.134000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4119,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-14 12:03:20.292000+01:00 +Internet,case-4554,2011-01-04 01:06:40+01:00,General,2011-01-04 09:32:14.134000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4122,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-14 12:06:16.251000+01:00 +Internet,case-4554,2011-01-04 01:06:40+01:00,General,2011-01-04 09:32:14.134000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4120,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:18:19.159000+01:00 +Internet,case-4554,2011-01-04 01:06:40+01:00,General,2011-01-04 09:32:14.134000+01:00,2011-01-04 01:06:40.010000+01:00,,Resource01,2010-11-09 01:06:40.010000+01:00,task-4456,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:21:11.832000+01:00 +Internet,case-4555,2011-01-05 01:06:40+01:00,General,2010-12-04 00:00:00.010000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-11-10 01:06:40.010000+01:00,task-2143,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-07 14:57:17.433000+01:00 +Internet,case-4555,2011-01-05 01:06:40+01:00,General,2010-12-04 00:00:00.010000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-11-10 01:06:40.010000+01:00,task-3144,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-07 14:57:33.329000+01:00 +Internet,case-4555,2011-01-05 01:06:40+01:00,General,2010-12-04 00:00:00.010000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-11-10 01:06:40.010000+01:00,task-3145,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-07 14:57:50.377000+01:00 +Internet,case-4555,2011-01-05 01:06:40+01:00,General,2010-12-04 00:00:00.010000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-11-10 01:06:40.010000+01:00,task-3147,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-07 14:58:21.998000+01:00 +Internet,case-4555,2011-01-05 01:06:40+01:00,General,2010-12-04 00:00:00.010000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-11-10 01:06:40.010000+01:00,task-3146,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 17:27:36.808000+01:00 +Internet,case-4555,2011-01-05 01:06:40+01:00,General,2010-12-04 00:00:00.010000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource08,2010-11-10 01:06:40.010000+01:00,task-3181,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-08 09:40:15.864000+01:00 +Internet,case-4556,2011-01-05 01:06:40+01:00,General,2011-01-04 10:04:20.408000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource04,2010-11-10 01:06:40.010000+01:00,task-2144,Confirmation of receipt,complete,Group 1,Resource04,2010-11-29 14:13:38.573000+01:00 +Internet,case-4556,2011-01-05 01:06:40+01:00,General,2011-01-04 10:04:20.408000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource04,2010-11-10 01:06:40.010000+01:00,task-2225,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-11-29 14:15:30.723000+01:00 +Internet,case-4556,2011-01-05 01:06:40+01:00,General,2011-01-04 10:04:20.408000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource04,2010-11-10 01:06:40.010000+01:00,task-2228,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-11-29 14:15:43.456000+01:00 +Internet,case-4556,2011-01-05 01:06:40+01:00,General,2011-01-04 10:04:20.408000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource04,2010-11-10 01:06:40.010000+01:00,task-2226,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-11-29 14:17:11.457000+01:00 +Internet,case-4556,2011-01-05 01:06:40+01:00,General,2011-01-04 10:04:20.408000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource04,2010-11-10 01:06:40.010000+01:00,task-2232,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-11-29 14:29:07.956000+01:00 +Internet,case-4556,2011-01-05 01:06:40+01:00,General,2011-01-04 10:04:20.408000+01:00,2011-01-05 01:06:40.010000+01:00,,Resource04,2010-11-10 01:06:40.010000+01:00,task-2229,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-11-30 10:17:33.827000+01:00 +Internet,case-4559,2011-01-06 01:06:40+01:00,General,2011-01-31 12:44:28.588000+01:00,2011-01-06 01:06:40.010000+01:00,,Resource01,2010-11-11 01:06:40.010000+01:00,task-2154,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-14 12:24:35.032000+01:00 +Internet,case-4559,2011-01-06 01:06:40+01:00,General,2011-01-31 12:44:28.588000+01:00,2011-01-06 01:06:40.010000+01:00,,Resource01,2010-11-11 01:06:40.010000+01:00,task-4136,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-14 12:24:50.979000+01:00 +Internet,case-4559,2011-01-06 01:06:40+01:00,General,2011-01-31 12:44:28.588000+01:00,2011-01-06 01:06:40.010000+01:00,,Resource01,2010-11-11 01:06:40.010000+01:00,task-4137,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-14 12:25:24.609000+01:00 +Internet,case-4559,2011-01-06 01:06:40+01:00,General,2011-01-31 12:44:28.588000+01:00,2011-01-06 01:06:40.010000+01:00,,Resource01,2010-11-11 01:06:40.010000+01:00,task-4139,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-14 12:26:08.036000+01:00 +Internet,case-4559,2011-01-06 01:06:40+01:00,General,2011-01-31 12:44:28.588000+01:00,2011-01-06 01:06:40.010000+01:00,,Resource01,2010-11-11 01:06:40.010000+01:00,task-4138,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:20:45.445000+01:00 +Internet,case-4559,2011-01-06 01:06:40+01:00,General,2011-01-31 12:44:28.588000+01:00,2011-01-06 01:06:40.010000+01:00,,Resource01,2010-11-11 01:06:40.010000+01:00,task-4469,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:18:04.905000+01:00 +Internet,case-4560,2011-01-07 01:06:40+01:00,General,2011-01-04 09:31:19.742000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-2161,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 08:50:39.546000+01:00 +Internet,case-4560,2011-01-07 01:06:40+01:00,General,2011-01-04 09:31:19.742000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-4322,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 08:50:57.304000+01:00 +Internet,case-4560,2011-01-07 01:06:40+01:00,General,2011-01-04 09:31:19.742000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-4323,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 08:54:27.582000+01:00 +Internet,case-4560,2011-01-07 01:06:40+01:00,General,2011-01-04 09:31:19.742000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-4325,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 08:54:44.709000+01:00 +Internet,case-4560,2011-01-07 01:06:40+01:00,General,2011-01-04 09:31:19.742000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-4324,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:04:01.308000+01:00 +Internet,case-4560,2011-01-07 01:06:40+01:00,General,2011-01-04 09:31:19.742000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-4436,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:16:01.021000+01:00 +Internet,case-4563,2011-01-07 01:06:40+01:00,General,2011-01-10 15:39:15.646000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-2166,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 14:03:12.375000+01:00 +Internet,case-4563,2011-01-07 01:06:40+01:00,General,2011-01-10 15:39:15.646000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-4535,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 14:04:39.364000+01:00 +Internet,case-4563,2011-01-07 01:06:40+01:00,General,2011-01-10 15:39:15.646000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-4536,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 14:08:19.176000+01:00 +Internet,case-4563,2011-01-07 01:06:40+01:00,General,2011-01-10 15:39:15.646000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-4534,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:59:33.212000+01:00 +Internet,case-4563,2011-01-07 01:06:40+01:00,General,2011-01-10 15:39:15.646000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-4638,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-16 10:17:28.950000+01:00 +Internet,case-4563,2011-01-07 01:06:40+01:00,General,2011-01-10 15:39:15.646000+01:00,2011-01-07 01:06:40.010000+01:00,,Resource01,2010-11-12 01:06:40.010000+01:00,task-4646,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:22:12.235000+01:00 +Internet,case-4565,2011-01-21 01:06:40+01:00,General,2011-01-21 11:50:25.729000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-11-12 01:06:40.010000+01:00,task-2171,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-13 14:40:49.987000+01:00 +Internet,case-4565,2011-01-21 01:06:40+01:00,General,2011-01-21 11:50:25.729000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-11-12 01:06:40.010000+01:00,task-3995,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-13 14:41:49.419000+01:00 +Internet,case-4565,2011-01-21 01:06:40+01:00,General,2011-01-21 11:50:25.729000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-11-12 01:06:40.010000+01:00,task-3997,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-13 15:25:12.686000+01:00 +Internet,case-4565,2011-01-21 01:06:40+01:00,General,2011-01-21 11:50:25.729000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-11-12 01:06:40.010000+01:00,task-3994,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-14 08:48:17.357000+01:00 +Internet,case-4565,2011-01-21 01:06:40+01:00,General,2011-01-21 11:50:25.729000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-11-12 01:06:40.010000+01:00,task-4056,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-14 09:34:12.534000+01:00 +Internet,case-4565,2011-01-21 01:06:40+01:00,General,2011-01-21 11:50:25.729000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-11-12 01:06:40.010000+01:00,task-4062,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-14 13:05:45.917000+01:00 +Internet,case-4582,2011-01-08 01:06:40+01:00,General,2010-12-23 08:16:13.446000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2332,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-06 10:52:43.232000+01:00 +Internet,case-4582,2011-01-08 01:06:40+01:00,General,2010-12-23 08:16:13.446000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2862,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-06 10:52:58.348000+01:00 +Internet,case-4582,2011-01-08 01:06:40+01:00,General,2010-12-23 08:16:13.446000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2863,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-06 10:53:12.421000+01:00 +Internet,case-4582,2011-01-08 01:06:40+01:00,General,2010-12-23 08:16:13.446000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2865,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-06 10:54:44.003000+01:00 +Internet,case-4582,2011-01-08 01:06:40+01:00,General,2010-12-23 08:16:13.446000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2864,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-06 10:56:39.545000+01:00 +Internet,case-4582,2011-01-08 01:06:40+01:00,General,2010-12-23 08:16:13.446000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2872,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:42:59.019000+01:00 +Internet,case-4583,2011-01-08 01:06:40+01:00,General,2010-12-31 15:49:44.284000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2365,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-06 11:12:17.536000+01:00 +Internet,case-4583,2011-01-08 01:06:40+01:00,General,2010-12-31 15:49:44.284000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2890,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-06 11:12:33.385000+01:00 +Internet,case-4583,2011-01-08 01:06:40+01:00,General,2010-12-31 15:49:44.284000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2889,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-06 11:15:59.708000+01:00 +Internet,case-4583,2011-01-08 01:06:40+01:00,General,2010-12-31 15:49:44.284000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2892,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-06 11:16:23.369000+01:00 +Internet,case-4583,2011-01-08 01:06:40+01:00,General,2010-12-31 15:49:44.284000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2893,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-06 11:16:40.882000+01:00 +Internet,case-4583,2011-01-08 01:06:40+01:00,General,2010-12-31 15:49:44.284000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource07,2010-11-13 01:06:40.010000+01:00,task-2898,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:53:45.674000+01:00 +Internet,case-4584,2011-01-08 01:06:40+01:00,General,2011-01-10 12:34:51.330000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource02,2010-11-13 01:06:40.010000+01:00,task-2375,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-06 09:29:42.346000+01:00 +Internet,case-4584,2011-01-08 01:06:40+01:00,General,2011-01-10 12:34:51.330000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource02,2010-11-13 01:06:40.010000+01:00,task-2822,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-06 11:03:46.296000+01:00 +Internet,case-4584,2011-01-08 01:06:40+01:00,General,2011-01-10 12:34:51.330000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource02,2010-11-13 01:06:40.010000+01:00,task-2879,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 11:54:27.223000+01:00 +Internet,case-4584,2011-01-08 01:06:40+01:00,General,2011-01-10 12:34:51.330000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource02,2010-11-13 01:06:40.010000+01:00,task-2958,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:06:42.682000+01:00 +Internet,case-4584,2011-01-08 01:06:40+01:00,General,2011-01-10 12:34:51.330000+01:00,2011-01-08 01:06:40.010000+01:00,,Resource02,2010-11-13 01:06:40.010000+01:00,task-2823,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-01-10 12:34:52.561000+01:00 +Internet,case-4585,2011-01-10 01:06:40+01:00,General,2011-01-05 09:19:52.557000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource01,2010-11-15 01:06:40.010000+01:00,task-2386,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 10:19:34.036000+01:00 +Internet,case-4585,2011-01-10 01:06:40+01:00,General,2011-01-05 09:19:52.557000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource01,2010-11-15 01:06:40.010000+01:00,task-4407,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 10:19:48.333000+01:00 +Internet,case-4585,2011-01-10 01:06:40+01:00,General,2011-01-05 09:19:52.557000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource01,2010-11-15 01:06:40.010000+01:00,task-4408,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 10:20:49.913000+01:00 +Internet,case-4585,2011-01-10 01:06:40+01:00,General,2011-01-05 09:19:52.557000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource01,2010-11-15 01:06:40.010000+01:00,task-4410,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 10:21:48.053000+01:00 +Internet,case-4585,2011-01-10 01:06:40+01:00,General,2011-01-05 09:19:52.557000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource01,2010-11-15 01:06:40.010000+01:00,task-4409,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:06:38.602000+01:00 +Internet,case-4585,2011-01-10 01:06:40+01:00,General,2011-01-05 09:19:52.557000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource01,2010-11-15 01:06:40.010000+01:00,task-4620,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:13:46.099000+01:00 +Internet,case-4586,2011-01-10 01:06:40+01:00,General,2011-01-11 16:28:31.047000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource02,2010-11-15 01:06:40.010000+01:00,task-2424,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-06 11:31:06.615000+01:00 +Internet,case-4586,2011-01-10 01:06:40+01:00,General,2011-01-11 16:28:31.047000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource02,2010-11-15 01:06:40.010000+01:00,task-2925,T02 Check confirmation of receipt,complete,Group 4,Resource02,2010-12-06 11:31:25.672000+01:00 +Internet,case-4586,2011-01-10 01:06:40+01:00,General,2011-01-11 16:28:31.047000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource02,2010-11-15 01:06:40.010000+01:00,task-2927,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-06 11:59:32.057000+01:00 +Internet,case-4586,2011-01-10 01:06:40+01:00,General,2011-01-11 16:28:31.047000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource02,2010-11-15 01:06:40.010000+01:00,task-2970,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:12:40.900000+01:00 +Internet,case-4586,2011-01-10 01:06:40+01:00,General,2011-01-11 16:28:31.047000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource02,2010-11-15 01:06:40.010000+01:00,task-2926,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-11 08:06:16.422000+01:00 +Internet,case-4586,2011-01-10 01:06:40+01:00,General,2011-01-11 16:28:31.047000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource02,2010-11-15 01:06:40.010000+01:00,task-7514,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-11 08:06:40.034000+01:00 +Internet,case-4587,2011-01-10 01:06:40+01:00,General,2011-01-07 14:10:30.410000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource17,2010-11-15 01:06:40.010000+01:00,task-2453,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-02 15:19:45.492000+01:00 +Internet,case-4587,2011-01-10 01:06:40+01:00,General,2011-01-07 14:10:30.410000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource17,2010-11-15 01:06:40.010000+01:00,task-2656,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-02 15:20:40.607000+01:00 +Internet,case-4587,2011-01-10 01:06:40+01:00,General,2011-01-07 14:10:30.410000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource17,2010-11-15 01:06:40.010000+01:00,task-2657,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-02 15:27:36.589000+01:00 +Internet,case-4587,2011-01-10 01:06:40+01:00,General,2011-01-07 14:10:30.410000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource17,2010-11-15 01:06:40.010000+01:00,task-2655,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-09 15:29:05.537000+01:00 +Internet,case-4587,2011-01-10 01:06:40+01:00,General,2011-01-07 14:10:30.410000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource17,2010-11-15 01:06:40.010000+01:00,task-3510,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-10 08:19:38.578000+01:00 +Internet,case-4587,2011-01-10 01:06:40+01:00,General,2011-01-07 14:10:30.410000+01:00,2011-01-10 01:06:40.010000+01:00,,Resource17,2010-11-15 01:06:40.010000+01:00,task-3532,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:04:12.304000+01:00 +Internet,case-4589,2011-01-11 01:06:40+01:00,General,2010-12-24 12:27:38.174000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-2487,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-06 10:16:34.347000+01:00 +Internet,case-4589,2011-01-11 01:06:40+01:00,General,2010-12-24 12:27:38.174000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-2836,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-06 10:18:57.378000+01:00 +Internet,case-4589,2011-01-11 01:06:40+01:00,General,2010-12-24 12:27:38.174000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-2835,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-06 10:19:25.141000+01:00 +Internet,case-4589,2011-01-11 01:06:40+01:00,General,2010-12-24 12:27:38.174000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-2838,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-06 10:19:40.450000+01:00 +Internet,case-4589,2011-01-11 01:06:40+01:00,General,2010-12-24 12:27:38.174000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-2837,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-06 10:20:07.236000+01:00 +Internet,case-4589,2011-01-11 01:06:40+01:00,General,2010-12-24 12:27:38.174000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-2839,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:42:01.490000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-2502,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-14 10:02:42.366000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4069,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-14 10:03:43.130000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4071,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-14 10:04:53.418000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4075,T16 Report reasons to hold request,complete,Group 1,Resource07,2010-12-14 10:08:02.373000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4078,T17 Check report Y to stop indication,complete,Group 4,Resource07,2010-12-14 10:09:30.738000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4079,T19 Determine report Y to stop indication,complete,Group 3,Resource07,2010-12-14 10:09:44.859000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4081,T20 Print report Y to stop indication,complete,Group 2,Resource07,2010-12-14 10:10:06.033000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4068,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:01:32.454000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4618,T03 Adjust confirmation of receipt,complete,Group 1,Resource07,2010-12-16 10:46:30.287000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4651,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-16 10:47:06.958000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4652,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-16 10:47:46.773000+01:00 +Internet,case-4592,2011-01-11 01:06:40+01:00,General,2010-12-30 12:29:20.384000+01:00,2011-01-11 01:06:40.010000+01:00,,Resource07,2010-11-16 01:06:40.010000+01:00,task-4653,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-16 10:48:20.867000+01:00 +Internet,case-4598,2011-01-19 01:06:40+01:00,General,2010-12-17 11:50:32.847000+01:00,2011-01-19 01:06:40.010000+01:00,,Resource34,2010-11-24 01:06:40.010000+01:00,task-2508,Confirmation of receipt,complete,EMPTY,Resource34,2010-12-10 14:42:47.518000+01:00 +Internet,case-4598,2011-01-19 01:06:40+01:00,General,2010-12-17 11:50:32.847000+01:00,2011-01-19 01:06:40.010000+01:00,,Resource34,2010-11-24 01:06:40.010000+01:00,task-3667,T02 Check confirmation of receipt,complete,EMPTY,Resource34,2010-12-10 14:44:09.214000+01:00 +Internet,case-4598,2011-01-19 01:06:40+01:00,General,2010-12-17 11:50:32.847000+01:00,2011-01-19 01:06:40.010000+01:00,,Resource34,2010-11-24 01:06:40.010000+01:00,task-3669,T04 Determine confirmation of receipt,complete,EMPTY,Resource34,2010-12-10 14:45:04.207000+01:00 +Internet,case-4598,2011-01-19 01:06:40+01:00,General,2010-12-17 11:50:32.847000+01:00,2011-01-19 01:06:40.010000+01:00,,Resource34,2010-11-24 01:06:40.010000+01:00,task-3670,T05 Print and send confirmation of receipt,complete,EMPTY,Resource34,2010-12-10 14:45:54.662000+01:00 +Internet,case-4598,2011-01-19 01:06:40+01:00,General,2010-12-17 11:50:32.847000+01:00,2011-01-19 01:06:40.010000+01:00,,Resource34,2010-11-24 01:06:40.010000+01:00,task-3668,T06 Determine necessity of stop advice,complete,Group 1,Resource34,2010-12-10 14:46:56.741000+01:00 +Internet,case-4598,2011-01-19 01:06:40+01:00,General,2010-12-17 11:50:32.847000+01:00,2011-01-19 01:06:40.010000+01:00,,Resource34,2010-11-24 01:06:40.010000+01:00,task-3671,T10 Determine necessity to stop indication,complete,Group 1,Resource34,2010-12-10 14:48:00.370000+01:00 +Internet,case-4599,2011-01-12 01:06:40+01:00,General,2011-01-10 15:10:36.074000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource02,2010-11-17 01:06:40.010000+01:00,task-2509,Confirmation of receipt,complete,EMPTY,Resource02,2010-12-06 13:55:44.720000+01:00 +Internet,case-4599,2011-01-12 01:06:40+01:00,General,2011-01-10 15:10:36.074000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource02,2010-11-17 01:06:40.010000+01:00,task-2987,T02 Check confirmation of receipt,complete,Group 4,Resource02,2010-12-06 13:55:59.228000+01:00 +Internet,case-4599,2011-01-12 01:06:40+01:00,General,2011-01-10 15:10:36.074000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource02,2010-11-17 01:06:40.010000+01:00,task-2989,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 08:17:59.224000+01:00 +Internet,case-4599,2011-01-12 01:06:40+01:00,General,2011-01-10 15:10:36.074000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource02,2010-11-17 01:06:40.010000+01:00,task-3021,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-07 08:32:44.765000+01:00 +Internet,case-4599,2011-01-12 01:06:40+01:00,General,2011-01-10 15:10:36.074000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource02,2010-11-17 01:06:40.010000+01:00,task-2988,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-01-10 15:10:37.132000+01:00 +Internet,case-4600,2011-01-11 01:06:40+01:00,General,2011-05-16 13:03:56.250000+02:00,2011-01-11 01:06:40.010000+01:00,,admin1,2010-11-16 01:06:40.010000+01:00,task-2510,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-14 14:59:22.948000+01:00 +Internet,case-4600,2011-01-11 01:06:40+01:00,General,2011-05-16 13:03:56.250000+02:00,2011-01-11 01:06:40.010000+01:00,,admin1,2010-11-16 01:06:40.010000+01:00,task-4236,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:18:09.656000+01:00 +Internet,case-4600,2011-01-11 01:06:40+01:00,General,2011-05-16 13:03:56.250000+02:00,2011-01-11 01:06:40.010000+01:00,,admin1,2010-11-16 01:06:40.010000+01:00,task-4773,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:29:45.264000+01:00 +Internet,case-4600,2011-01-11 01:06:40+01:00,General,2011-05-16 13:03:56.250000+02:00,2011-01-11 01:06:40.010000+01:00,,admin1,2010-11-16 01:06:40.010000+01:00,task-4824,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-21 11:03:49.027000+01:00 +Internet,case-4600,2011-01-11 01:06:40+01:00,General,2011-05-16 13:03:56.250000+02:00,2011-01-11 01:06:40.010000+01:00,,admin1,2010-11-16 01:06:40.010000+01:00,task-4237,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-06 13:01:03.546000+01:00 +Internet,case-4600,2011-01-11 01:06:40+01:00,General,2011-05-16 13:03:56.250000+02:00,2011-01-11 01:06:40.010000+01:00,,admin1,2010-11-16 01:06:40.010000+01:00,task-7085,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-06 13:01:37.422000+01:00 +Internet,case-4601,2011-01-12 01:06:40+01:00,General,2011-09-19 16:50:59.362000+02:00,2011-01-12 01:06:40.010000+01:00,,Resource12,2010-11-17 01:06:40.010000+01:00,task-2526,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-14 14:36:38.009000+01:00 +Internet,case-4601,2011-01-12 01:06:40+01:00,General,2011-09-19 16:50:59.362000+02:00,2011-01-12 01:06:40.010000+01:00,,Resource12,2010-11-17 01:06:40.010000+01:00,task-4222,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:16:48.413000+01:00 +Internet,case-4601,2011-01-12 01:06:40+01:00,General,2011-09-19 16:50:59.362000+02:00,2011-01-12 01:06:40.010000+01:00,,Resource12,2010-11-17 01:06:40.010000+01:00,task-4765,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:29:29.517000+01:00 +Internet,case-4601,2011-01-12 01:06:40+01:00,General,2011-09-19 16:50:59.362000+02:00,2011-01-12 01:06:40.010000+01:00,,Resource12,2010-11-17 01:06:40.010000+01:00,task-4823,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-21 11:25:16.429000+01:00 +Internet,case-4601,2011-01-12 01:06:40+01:00,General,2011-09-19 16:50:59.362000+02:00,2011-01-12 01:06:40.010000+01:00,,Resource12,2010-11-17 01:06:40.010000+01:00,task-4223,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-16 11:44:54.556000+02:00 +Internet,case-4601,2011-01-12 01:06:40+01:00,General,2011-09-19 16:50:59.362000+02:00,2011-01-12 01:06:40.010000+01:00,,Resource12,2010-11-17 01:06:40.010000+01:00,task-39247,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-16 11:45:39.533000+02:00 +Internet,case-4602,2011-01-26 00:00:00+01:00,General,2011-01-28 12:28:46.892000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource17,2010-11-17 00:00:00.010000+01:00,task-2527,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-09 16:13:14.649000+01:00 +Internet,case-4602,2011-01-26 00:00:00+01:00,General,2011-01-28 12:28:46.892000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource17,2010-11-17 00:00:00.010000+01:00,task-3515,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-09 16:13:53.468000+01:00 +Internet,case-4602,2011-01-26 00:00:00+01:00,General,2011-01-28 12:28:46.892000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource17,2010-11-17 00:00:00.010000+01:00,task-3516,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-09 16:14:07.565000+01:00 +Internet,case-4602,2011-01-26 00:00:00+01:00,General,2011-01-28 12:28:46.892000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource17,2010-11-17 00:00:00.010000+01:00,task-3514,T02 Check confirmation of receipt,complete,EMPTY,Resource04,2010-12-10 14:29:28.270000+01:00 +Internet,case-4602,2011-01-26 00:00:00+01:00,General,2011-01-28 12:28:46.892000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource17,2010-11-17 00:00:00.010000+01:00,task-3664,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-10 16:13:27.991000+01:00 +Internet,case-4602,2011-01-26 00:00:00+01:00,General,2011-01-28 12:28:46.892000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource17,2010-11-17 00:00:00.010000+01:00,task-3707,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-14 08:30:14.495000+01:00 +Internet,case-4603,2011-01-12 01:06:40+01:00,General,2010-12-24 12:11:58.365000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource07,2010-11-17 01:06:40.010000+01:00,task-2528,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-06 11:43:40.461000+01:00 +Internet,case-4603,2011-01-12 01:06:40+01:00,General,2010-12-24 12:11:58.365000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource07,2010-11-17 01:06:40.010000+01:00,task-2931,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-06 11:43:57.995000+01:00 +Internet,case-4603,2011-01-12 01:06:40+01:00,General,2010-12-24 12:11:58.365000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource07,2010-11-17 01:06:40.010000+01:00,task-2933,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-06 11:44:11.319000+01:00 +Internet,case-4603,2011-01-12 01:06:40+01:00,General,2010-12-24 12:11:58.365000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource07,2010-11-17 01:06:40.010000+01:00,task-2932,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-06 11:44:36.318000+01:00 +Internet,case-4603,2011-01-12 01:06:40+01:00,General,2010-12-24 12:11:58.365000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource07,2010-11-17 01:06:40.010000+01:00,task-2935,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-06 11:44:56.579000+01:00 +Internet,case-4603,2011-01-12 01:06:40+01:00,General,2010-12-24 12:11:58.365000+01:00,2011-01-12 01:06:40.010000+01:00,,Resource07,2010-11-17 01:06:40.010000+01:00,task-2934,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 15:05:46.768000+01:00 +Internet,case-4604,2011-01-12 00:00:00+01:00,General,2010-12-24 11:08:17.541000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource07,2010-11-17 00:00:00.010000+01:00,task-2530,Confirmation of receipt,complete,Group 1,Resource07,2010-12-02 16:30:23.852000+01:00 +Internet,case-4604,2011-01-12 00:00:00+01:00,General,2010-12-24 11:08:17.541000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource07,2010-11-17 00:00:00.010000+01:00,task-2664,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-02 16:31:39.999000+01:00 +Internet,case-4604,2011-01-12 00:00:00+01:00,General,2010-12-24 11:08:17.541000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource07,2010-11-17 00:00:00.010000+01:00,task-2663,T02 Check confirmation of receipt,complete,Group 4,Resource07,2010-12-02 16:32:38.152000+01:00 +Internet,case-4604,2011-01-12 00:00:00+01:00,General,2010-12-24 11:08:17.541000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource07,2010-11-17 00:00:00.010000+01:00,task-2666,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-02 16:33:13.669000+01:00 +Internet,case-4604,2011-01-12 00:00:00+01:00,General,2010-12-24 11:08:17.541000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource07,2010-11-17 00:00:00.010000+01:00,task-2667,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:36:38.951000+01:00 +Internet,case-4604,2011-01-12 00:00:00+01:00,General,2010-12-24 11:08:17.541000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource07,2010-11-17 00:00:00.010000+01:00,task-2665,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-07 08:38:07.394000+01:00 +Internet,case-4605,2011-01-12 00:00:00+01:00,General,2011-02-02 14:42:57.829000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource04,2010-11-17 00:00:00.010000+01:00,task-2531,Confirmation of receipt,complete,EMPTY,Resource04,2010-12-07 15:33:40.283000+01:00 +Internet,case-4605,2011-01-12 00:00:00+01:00,General,2011-02-02 14:42:57.829000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource04,2010-11-17 00:00:00.010000+01:00,task-3159,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-12-07 15:33:55.010000+01:00 +Internet,case-4605,2011-01-12 00:00:00+01:00,General,2011-02-02 14:42:57.829000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource04,2010-11-17 00:00:00.010000+01:00,task-3161,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 17:40:02.396000+01:00 +Internet,case-4605,2011-01-12 00:00:00+01:00,General,2011-02-02 14:42:57.829000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource04,2010-11-17 00:00:00.010000+01:00,task-3184,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-08 09:42:51.112000+01:00 +Internet,case-4605,2011-01-12 00:00:00+01:00,General,2011-02-02 14:42:57.829000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource04,2010-11-17 00:00:00.010000+01:00,task-3160,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-12-08 16:04:09.031000+01:00 +Internet,case-4605,2011-01-12 00:00:00+01:00,General,2011-02-02 14:42:57.829000+01:00,2011-01-12 00:00:00.010000+01:00,,Resource04,2010-11-17 00:00:00.010000+01:00,task-3392,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-12-08 16:04:22.644000+01:00 +Internet,case-4608,2011-02-21 01:06:40+01:00,General,2011-02-18 12:15:49.689000+01:00,2011-02-21 01:06:40.010000+01:00,,Resource04,2010-11-17 01:06:40.010000+01:00,task-2534,Confirmation of receipt,complete,EMPTY,Resource04,2010-12-17 13:09:03.663000+01:00 +Internet,case-4608,2011-02-21 01:06:40+01:00,General,2011-02-18 12:15:49.689000+01:00,2011-02-21 01:06:40.010000+01:00,,Resource04,2010-11-17 01:06:40.010000+01:00,task-4912,T02 Check confirmation of receipt,complete,Group 4,Resource04,2010-12-17 13:09:24.659000+01:00 +Internet,case-4608,2011-02-21 01:06:40+01:00,General,2011-02-18 12:15:49.689000+01:00,2011-02-21 01:06:40.010000+01:00,,Resource04,2010-11-17 01:06:40.010000+01:00,task-4914,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2010-12-17 13:09:36.206000+01:00 +Internet,case-4608,2011-02-21 01:06:40+01:00,General,2011-02-18 12:15:49.689000+01:00,2011-02-21 01:06:40.010000+01:00,,Resource04,2010-11-17 01:06:40.010000+01:00,task-4913,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2010-12-17 13:09:49.891000+01:00 +Internet,case-4608,2011-02-21 01:06:40+01:00,General,2011-02-18 12:15:49.689000+01:00,2011-02-21 01:06:40.010000+01:00,,Resource04,2010-11-17 01:06:40.010000+01:00,task-4916,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-12-17 13:10:07.683000+01:00 +Internet,case-4608,2011-02-21 01:06:40+01:00,General,2011-02-18 12:15:49.689000+01:00,2011-02-21 01:06:40.010000+01:00,,Resource04,2010-11-17 01:06:40.010000+01:00,task-4915,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2010-12-20 16:15:26.476000+01:00 +Internet,case-4619,2011-01-13 00:00:00+01:00,General,2011-01-13 12:29:05.367000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource08,2010-11-18 00:00:00.010000+01:00,task-2599,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-03 13:48:01.931000+01:00 +Internet,case-4619,2011-01-13 00:00:00+01:00,General,2011-01-13 12:29:05.367000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource08,2010-11-18 00:00:00.010000+01:00,task-2722,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-03 13:48:16.495000+01:00 +Internet,case-4619,2011-01-13 00:00:00+01:00,General,2011-01-13 12:29:05.367000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource08,2010-11-18 00:00:00.010000+01:00,task-2724,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-03 14:50:01.850000+01:00 +Internet,case-4619,2011-01-13 00:00:00+01:00,General,2011-01-13 12:29:05.367000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource08,2010-11-18 00:00:00.010000+01:00,task-2752,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-06 14:40:49.307000+01:00 +Internet,case-4619,2011-01-13 00:00:00+01:00,General,2011-01-13 12:29:05.367000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource08,2010-11-18 00:00:00.010000+01:00,task-2723,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-13 10:37:38.475000+01:00 +Internet,case-4619,2011-01-13 00:00:00+01:00,General,2011-01-13 12:29:05.367000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource08,2010-11-18 00:00:00.010000+01:00,task-3801,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-13 10:37:55.173000+01:00 +Internet,case-4623,2011-01-13 00:00:00+01:00,General,2010-12-10 09:36:48.051000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource07,2010-11-18 00:00:00.010000+01:00,task-2631,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-07 09:07:53.862000+01:00 +Internet,case-4623,2011-01-13 00:00:00+01:00,General,2010-12-10 09:36:48.051000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource07,2010-11-18 00:00:00.010000+01:00,task-3051,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-07 09:11:47.505000+01:00 +Internet,case-4623,2011-01-13 00:00:00+01:00,General,2010-12-10 09:36:48.051000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource07,2010-11-18 00:00:00.010000+01:00,task-3053,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-07 09:23:21.902000+01:00 +Internet,case-4623,2011-01-13 00:00:00+01:00,General,2010-12-10 09:36:48.051000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource07,2010-11-18 00:00:00.010000+01:00,task-3050,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 14:30:37.692000+01:00 +Internet,case-4623,2011-01-13 00:00:00+01:00,General,2010-12-10 09:36:48.051000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource07,2010-11-18 00:00:00.010000+01:00,task-3122,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 16:43:51.518000+01:00 +Internet,case-4623,2011-01-13 00:00:00+01:00,General,2010-12-10 09:36:48.051000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource07,2010-11-18 00:00:00.010000+01:00,task-3165,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-08 09:38:23.535000+01:00 +Internet,case-4623,2011-01-13 00:00:00+01:00,General,2010-12-10 09:36:48.051000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource07,2010-11-18 00:00:00.010000+01:00,task-3057,T11 Create document X request unlicensed,complete,Group 1,Resource07,2010-12-10 08:11:58.211000+01:00 +Internet,case-4623,2011-01-13 00:00:00+01:00,General,2010-12-10 09:36:48.051000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource07,2010-11-18 00:00:00.010000+01:00,task-3525,T12 Check document X request unlicensed,complete,Group 4,Resource19,2010-12-10 08:46:30.628000+01:00 +Internet,case-4623,2011-01-13 00:00:00+01:00,General,2010-12-10 09:36:48.051000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource07,2010-11-18 00:00:00.010000+01:00,task-3540,T14 Determine document X request unlicensed,complete,Group 3,Resource07,2010-12-10 09:36:37.075000+01:00 +Internet,case-4623,2011-01-13 00:00:00+01:00,General,2010-12-10 09:36:48.051000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource07,2010-11-18 00:00:00.010000+01:00,task-3552,T15 Print document X request unlicensed,complete,Group 2,Resource07,2010-12-10 09:36:47.840000+01:00 +Internet,case-4632,2011-01-13 01:06:40+01:00,General,2011-01-10 14:46:35.026000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource07,2010-11-18 01:06:40.010000+01:00,task-2670,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-07 09:49:35.925000+01:00 +Internet,case-4632,2011-01-13 01:06:40+01:00,General,2011-01-10 14:46:35.026000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource07,2010-11-18 01:06:40.010000+01:00,task-3060,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-07 09:50:57.824000+01:00 +Internet,case-4632,2011-01-13 01:06:40+01:00,General,2011-01-10 14:46:35.026000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource07,2010-11-18 01:06:40.010000+01:00,task-3061,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-07 09:52:00.389000+01:00 +Internet,case-4632,2011-01-13 01:06:40+01:00,General,2011-01-10 14:46:35.026000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource07,2010-11-18 01:06:40.010000+01:00,task-3059,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-07 14:31:47.009000+01:00 +Internet,case-4632,2011-01-13 01:06:40+01:00,General,2011-01-10 14:46:35.026000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource07,2010-11-18 01:06:40.010000+01:00,task-3123,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-07 16:24:15.374000+01:00 +Internet,case-4632,2011-01-13 01:06:40+01:00,General,2011-01-10 14:46:35.026000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource07,2010-11-18 01:06:40.010000+01:00,task-3164,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-08 09:37:15.669000+01:00 +Internet,case-4633,2010-12-07 01:06:40+01:00,General,2011-01-19 10:13:08.646000+01:00,2010-12-07 01:06:40.010000+01:00,,Resource26,2010-10-12 01:06:40.020000+02:00,task-2671,Confirmation of receipt,complete,EMPTY,admin2,2011-01-19 10:13:09.527000+01:00 +Internet,case-4639,2011-01-15 00:00:00+01:00,General,2010-12-27 16:13:22.464000+01:00,2011-01-15 00:00:00.010000+01:00,,Resource01,2010-11-20 00:00:00.010000+01:00,task-2716,Confirmation of receipt,complete,EMPTY,Resource01,2010-12-15 11:52:03.599000+01:00 +Internet,case-4639,2011-01-15 00:00:00+01:00,General,2010-12-27 16:13:22.464000+01:00,2011-01-15 00:00:00.010000+01:00,,Resource01,2010-11-20 00:00:00.010000+01:00,task-4486,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 11:56:46.605000+01:00 +Internet,case-4639,2011-01-15 00:00:00+01:00,General,2010-12-27 16:13:22.464000+01:00,2011-01-15 00:00:00.010000+01:00,,Resource01,2010-11-20 00:00:00.010000+01:00,task-4488,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2010-12-15 11:58:21.887000+01:00 +Internet,case-4639,2011-01-15 00:00:00+01:00,General,2010-12-27 16:13:22.464000+01:00,2011-01-15 00:00:00.010000+01:00,,Resource01,2010-11-20 00:00:00.010000+01:00,task-4490,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2010-12-15 11:59:52.331000+01:00 +Internet,case-4639,2011-01-15 00:00:00+01:00,General,2010-12-27 16:13:22.464000+01:00,2011-01-15 00:00:00.010000+01:00,,Resource01,2010-11-20 00:00:00.010000+01:00,task-4487,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 12:00:06.209000+01:00 +Internet,case-4639,2011-01-15 00:00:00+01:00,General,2010-12-27 16:13:22.464000+01:00,2011-01-15 00:00:00.010000+01:00,,Resource01,2010-11-20 00:00:00.010000+01:00,task-4491,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 12:00:32.199000+01:00 +Internet,case-4640,2011-01-16 00:00:00+01:00,General,2011-01-10 13:18:15.437000+01:00,2011-01-16 00:00:00.010000+01:00,,Resource08,2010-11-21 00:00:00.010000+01:00,task-2733,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-09 15:58:25.494000+01:00 +Internet,case-4640,2011-01-16 00:00:00+01:00,General,2011-01-10 13:18:15.437000+01:00,2011-01-16 00:00:00.010000+01:00,,Resource08,2010-11-21 00:00:00.010000+01:00,task-3511,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-09 15:58:39.802000+01:00 +Internet,case-4640,2011-01-16 00:00:00+01:00,General,2011-01-10 13:18:15.437000+01:00,2011-01-16 00:00:00.010000+01:00,,Resource08,2010-11-21 00:00:00.010000+01:00,task-3513,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-10 08:21:44.667000+01:00 +Internet,case-4640,2011-01-16 00:00:00+01:00,General,2011-01-10 13:18:15.437000+01:00,2011-01-16 00:00:00.010000+01:00,,Resource08,2010-11-21 00:00:00.010000+01:00,task-3533,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:03:12.340000+01:00 +Internet,case-4640,2011-01-16 00:00:00+01:00,General,2011-01-10 13:18:15.437000+01:00,2011-01-16 00:00:00.010000+01:00,,Resource08,2010-11-21 00:00:00.010000+01:00,task-3512,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-13 13:29:35.449000+01:00 +Internet,case-4640,2011-01-16 00:00:00+01:00,General,2011-01-10 13:18:15.437000+01:00,2011-01-16 00:00:00.010000+01:00,,Resource08,2010-11-21 00:00:00.010000+01:00,task-3950,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-14 09:32:26.216000+01:00 +Internet,case-4641,2011-01-17 00:00:00+01:00,General,2010-12-27 16:24:10.172000+01:00,2011-01-17 00:00:00.010000+01:00,,Resource07,2010-11-22 00:00:00.010000+01:00,task-2750,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-10 15:58:10.790000+01:00 +Internet,case-4641,2011-01-17 00:00:00+01:00,General,2010-12-27 16:24:10.172000+01:00,2011-01-17 00:00:00.010000+01:00,,Resource07,2010-11-22 00:00:00.010000+01:00,task-3695,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-10 15:59:33.005000+01:00 +Internet,case-4641,2011-01-17 00:00:00+01:00,General,2010-12-27 16:24:10.172000+01:00,2011-01-17 00:00:00.010000+01:00,,Resource07,2010-11-22 00:00:00.010000+01:00,task-3694,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-10 16:02:14.805000+01:00 +Internet,case-4641,2011-01-17 00:00:00+01:00,General,2010-12-27 16:24:10.172000+01:00,2011-01-17 00:00:00.010000+01:00,,Resource07,2010-11-22 00:00:00.010000+01:00,task-3696,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-10 16:03:45.699000+01:00 +Internet,case-4641,2011-01-17 00:00:00+01:00,General,2010-12-27 16:24:10.172000+01:00,2011-01-17 00:00:00.010000+01:00,,Resource07,2010-11-22 00:00:00.010000+01:00,task-3697,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-10 16:06:24.227000+01:00 +Internet,case-4641,2011-01-17 00:00:00+01:00,General,2010-12-27 16:24:10.172000+01:00,2011-01-17 00:00:00.010000+01:00,,Resource07,2010-11-22 00:00:00.010000+01:00,task-3701,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-10 16:06:34.697000+01:00 +Internet,case-4653,2011-01-14 01:06:40+01:00,General,2011-01-17 16:42:46.600000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource15,2010-11-19 01:06:40.010000+01:00,task-2956,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-10 09:06:10.530000+01:00 +Internet,case-4653,2011-01-14 01:06:40+01:00,General,2011-01-17 16:42:46.600000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource15,2010-11-19 01:06:40.010000+01:00,task-3541,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-10 09:06:28.682000+01:00 +Internet,case-4653,2011-01-14 01:06:40+01:00,General,2011-01-17 16:42:46.600000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource15,2010-11-19 01:06:40.010000+01:00,task-3543,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-12-10 09:06:42.567000+01:00 +Internet,case-4653,2011-01-14 01:06:40+01:00,General,2011-01-17 16:42:46.600000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource15,2010-11-19 01:06:40.010000+01:00,task-3542,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-10 09:17:46.605000+01:00 +Internet,case-4653,2011-01-14 01:06:40+01:00,General,2011-01-17 16:42:46.600000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource15,2010-11-19 01:06:40.010000+01:00,task-3546,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-10 09:19:16.776000+01:00 +Internet,case-4653,2011-01-14 01:06:40+01:00,General,2011-01-17 16:42:46.600000+01:00,2011-01-14 01:06:40.010000+01:00,,Resource15,2010-11-19 01:06:40.010000+01:00,task-3544,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:07:31.101000+01:00 +Internet,case-4654,2011-01-17 01:06:40+01:00,General,2011-01-14 15:44:16.899000+01:00,2011-01-17 01:06:40.010000+01:00,,Resource15,2010-11-22 01:06:40.010000+01:00,task-2994,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-10 10:56:54.593000+01:00 +Internet,case-4654,2011-01-17 01:06:40+01:00,General,2011-01-14 15:44:16.899000+01:00,2011-01-17 01:06:40.010000+01:00,,Resource15,2010-11-22 01:06:40.010000+01:00,task-3588,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-10 10:57:14.025000+01:00 +Internet,case-4654,2011-01-17 01:06:40+01:00,General,2011-01-14 15:44:16.899000+01:00,2011-01-17 01:06:40.010000+01:00,,Resource15,2010-11-22 01:06:40.010000+01:00,task-3587,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-10 10:58:30.167000+01:00 +Internet,case-4654,2011-01-17 01:06:40+01:00,General,2011-01-14 15:44:16.899000+01:00,2011-01-17 01:06:40.010000+01:00,,Resource15,2010-11-22 01:06:40.010000+01:00,task-3590,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-12-10 10:58:44.669000+01:00 +Internet,case-4654,2011-01-17 01:06:40+01:00,General,2011-01-14 15:44:16.899000+01:00,2011-01-17 01:06:40.010000+01:00,,Resource15,2010-11-22 01:06:40.010000+01:00,task-3589,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-10 10:59:02.440000+01:00 +Internet,case-4654,2011-01-17 01:06:40+01:00,General,2011-01-14 15:44:16.899000+01:00,2011-01-17 01:06:40.010000+01:00,,Resource15,2010-11-22 01:06:40.010000+01:00,task-3591,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:11:06.185000+01:00 +Internet,case-4656,2011-03-14 01:06:40+01:00,General,2011-02-23 00:00:00.010000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource17,2010-11-23 01:06:40.010000+01:00,task-3017,Confirmation of receipt,complete,EMPTY,Resource17,2010-12-14 15:42:36.276000+01:00 +Internet,case-4656,2011-03-14 01:06:40+01:00,General,2011-02-23 00:00:00.010000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource17,2010-11-23 01:06:40.010000+01:00,task-4255,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2010-12-14 15:43:12.701000+01:00 +Internet,case-4656,2011-03-14 01:06:40+01:00,General,2011-02-23 00:00:00.010000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource17,2010-11-23 01:06:40.010000+01:00,task-4256,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2010-12-14 15:43:41.072000+01:00 +Internet,case-4656,2011-03-14 01:06:40+01:00,General,2011-02-23 00:00:00.010000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource17,2010-11-23 01:06:40.010000+01:00,task-4257,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2010-12-14 15:44:42.533000+01:00 +Internet,case-4656,2011-03-14 01:06:40+01:00,General,2011-02-23 00:00:00.010000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource17,2010-11-23 01:06:40.010000+01:00,task-4258,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-14 15:45:04.757000+01:00 +Internet,case-4656,2011-03-14 01:06:40+01:00,General,2011-02-23 00:00:00.010000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource17,2010-11-23 01:06:40.010000+01:00,task-4259,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 08:35:18.185000+01:00 +Internet,case-4666,2011-01-18 01:06:40+01:00,General,2011-01-18 09:52:21.599000+01:00,2011-01-18 01:06:40.010000+01:00,,Resource08,2010-11-23 01:06:40.010000+01:00,task-3134,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-14 12:50:47.719000+01:00 +Internet,case-4666,2011-01-18 01:06:40+01:00,General,2011-01-18 09:52:21.599000+01:00,2011-01-18 01:06:40.010000+01:00,,Resource08,2010-11-23 01:06:40.010000+01:00,task-4161,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-14 12:51:07.579000+01:00 +Internet,case-4666,2011-01-18 01:06:40+01:00,General,2011-01-18 09:52:21.599000+01:00,2011-01-18 01:06:40.010000+01:00,,Resource08,2010-11-23 01:06:40.010000+01:00,task-4163,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-15 16:47:37.064000+01:00 +Internet,case-4666,2011-01-18 01:06:40+01:00,General,2011-01-18 09:52:21.599000+01:00,2011-01-18 01:06:40.010000+01:00,,Resource08,2010-11-23 01:06:40.010000+01:00,task-4610,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:11:54.027000+01:00 +Internet,case-4666,2011-01-18 01:06:40+01:00,General,2011-01-18 09:52:21.599000+01:00,2011-01-18 01:06:40.010000+01:00,,Resource08,2010-11-23 01:06:40.010000+01:00,task-4162,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-07 14:44:48.678000+01:00 +Internet,case-4666,2011-01-18 01:06:40+01:00,General,2011-01-18 09:52:21.599000+01:00,2011-01-18 01:06:40.010000+01:00,,Resource08,2010-11-23 01:06:40.010000+01:00,task-7277,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-07 14:45:05.256000+01:00 +Internet,case-4667,2011-01-31 00:00:00+01:00,General,2011-01-26 15:10:16.721000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource12,2010-12-06 00:00:00.010000+01:00,task-3156,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-14 10:10:14.666000+01:00 +Internet,case-4667,2011-01-31 00:00:00+01:00,General,2011-01-26 15:10:16.721000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource12,2010-12-06 00:00:00.010000+01:00,task-4083,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2010-12-22 14:09:01.192000+01:00 +Internet,case-4667,2011-01-31 00:00:00+01:00,General,2011-01-26 15:10:16.721000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource12,2010-12-06 00:00:00.010000+01:00,task-5462,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-22 14:14:47.466000+01:00 +Internet,case-4667,2011-01-31 00:00:00+01:00,General,2011-01-26 15:10:16.721000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource12,2010-12-06 00:00:00.010000+01:00,task-5465,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 10:03:05.766000+01:00 +Internet,case-4667,2011-01-31 00:00:00+01:00,General,2011-01-26 15:10:16.721000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource12,2010-12-06 00:00:00.010000+01:00,task-4084,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-06 12:21:20.609000+01:00 +Internet,case-4667,2011-01-31 00:00:00+01:00,General,2011-01-26 15:10:16.721000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource12,2010-12-06 00:00:00.010000+01:00,task-7049,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-01-06 12:21:55.888000+01:00 +Internet,case-4667,2011-01-31 00:00:00+01:00,General,2011-01-26 15:10:16.721000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource12,2010-12-06 00:00:00.010000+01:00,task-7050,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-06 12:22:24.200000+01:00 +Internet,case-4667,2011-01-31 00:00:00+01:00,General,2011-01-26 15:10:16.721000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource12,2010-12-06 00:00:00.010000+01:00,task-7051,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-01-06 12:22:51.490000+01:00 +Internet,case-4667,2011-01-31 00:00:00+01:00,General,2011-01-26 15:10:16.721000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource12,2010-12-06 00:00:00.010000+01:00,task-7052,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-06 12:23:38.884000+01:00 +Internet,case-4667,2011-01-31 00:00:00+01:00,General,2011-01-26 15:10:16.721000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource12,2010-12-06 00:00:00.010000+01:00,task-7053,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-06 12:24:09.724000+01:00 +Internet,case-4677,2011-02-28 01:06:40+01:00,General,2011-02-25 09:44:56.521000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2011-01-03 01:06:40.010000+01:00,task-3233,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-10 11:23:33.213000+01:00 +Internet,case-4677,2011-02-28 01:06:40+01:00,General,2011-02-25 09:44:56.521000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2011-01-03 01:06:40.010000+01:00,task-3604,T02 Check confirmation of receipt,complete,Group 4,Resource15,2010-12-10 11:23:49.409000+01:00 +Internet,case-4677,2011-02-28 01:06:40+01:00,General,2011-02-25 09:44:56.521000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2011-01-03 01:06:40.010000+01:00,task-3606,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2010-12-10 11:24:00.090000+01:00 +Internet,case-4677,2011-02-28 01:06:40+01:00,General,2011-02-25 09:44:56.521000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2011-01-03 01:06:40.010000+01:00,task-3605,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2010-12-10 11:24:23.663000+01:00 +Internet,case-4677,2011-02-28 01:06:40+01:00,General,2011-02-25 09:44:56.521000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2011-01-03 01:06:40.010000+01:00,task-3608,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2010-12-10 11:24:45.453000+01:00 +Internet,case-4677,2011-02-28 01:06:40+01:00,General,2011-02-25 09:44:56.521000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2011-01-03 01:06:40.010000+01:00,task-3607,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-10 14:12:49.726000+01:00 +Internet,case-4678,2011-01-18 00:00:00+01:00,General,2010-12-24 13:53:53.755000+01:00,2011-01-18 00:00:00.010000+01:00,,Resource07,2010-11-23 00:00:00.010000+01:00,task-3284,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-10 16:20:10.289000+01:00 +Internet,case-4678,2011-01-18 00:00:00+01:00,General,2010-12-24 13:53:53.755000+01:00,2011-01-18 00:00:00.010000+01:00,,Resource07,2010-11-23 00:00:00.010000+01:00,task-3710,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-10 16:23:10.841000+01:00 +Internet,case-4678,2011-01-18 00:00:00+01:00,General,2010-12-24 13:53:53.755000+01:00,2011-01-18 00:00:00.010000+01:00,,Resource07,2010-11-23 00:00:00.010000+01:00,task-3711,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-10 16:23:39.510000+01:00 +Internet,case-4678,2011-01-18 00:00:00+01:00,General,2010-12-24 13:53:53.755000+01:00,2011-01-18 00:00:00.010000+01:00,,Resource07,2010-11-23 00:00:00.010000+01:00,task-3709,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-13 10:46:30.738000+01:00 +Internet,case-4678,2011-01-18 00:00:00+01:00,General,2010-12-24 13:53:53.755000+01:00,2011-01-18 00:00:00.010000+01:00,,Resource07,2010-11-23 00:00:00.010000+01:00,task-3817,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-13 13:18:34.872000+01:00 +Internet,case-4678,2011-01-18 00:00:00+01:00,General,2010-12-24 13:53:53.755000+01:00,2011-01-18 00:00:00.010000+01:00,,Resource07,2010-11-23 00:00:00.010000+01:00,task-3943,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-13 13:18:59.128000+01:00 +Internet,case-4680,2011-01-19 00:00:00+01:00,General,2011-01-10 16:17:53.605000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3344,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 11:14:56.714000+01:00 +Internet,case-4680,2011-01-19 00:00:00+01:00,General,2011-01-10 16:17:53.605000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-4446,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 11:18:47.684000+01:00 +Internet,case-4680,2011-01-19 00:00:00+01:00,General,2011-01-10 16:17:53.605000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-4459,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 11:19:08.606000+01:00 +Internet,case-4680,2011-01-19 00:00:00+01:00,General,2011-01-10 16:17:53.605000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-4445,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:41:59.769000+01:00 +Internet,case-4680,2011-01-19 00:00:00+01:00,General,2011-01-10 16:17:53.605000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-4628,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-16 10:11:57.396000+01:00 +Internet,case-4680,2011-01-19 00:00:00+01:00,General,2011-01-10 16:17:53.605000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-4643,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:20:19.080000+01:00 +Internet,case-4683,2011-01-19 00:00:00+01:00,General,2011-01-20 09:42:03.621000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3386,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-10 16:52:36.937000+01:00 +Internet,case-4683,2011-01-19 00:00:00+01:00,General,2011-01-20 09:42:03.621000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3724,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-10 16:52:53.468000+01:00 +Internet,case-4683,2011-01-19 00:00:00+01:00,General,2011-01-20 09:42:03.621000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3725,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-10 16:53:12.143000+01:00 +Internet,case-4683,2011-01-19 00:00:00+01:00,General,2011-01-20 09:42:03.621000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3723,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-13 10:50:02.107000+01:00 +Internet,case-4683,2011-01-19 00:00:00+01:00,General,2011-01-20 09:42:03.621000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-3820,T04 Determine confirmation of receipt,complete,Group 3,Resource26,2010-12-13 15:43:21.453000+01:00 +Internet,case-4683,2011-01-19 00:00:00+01:00,General,2011-01-20 09:42:03.621000+01:00,2011-01-19 00:00:00.010000+01:00,,Resource07,2010-11-24 00:00:00.010000+01:00,task-4024,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-13 16:35:31.886000+01:00 +Internet,case-4687,2011-01-20 00:00:00+01:00,General,2011-01-10 13:21:56.701000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-3412,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-15 09:51:38.429000+01:00 +Internet,case-4687,2011-01-20 00:00:00+01:00,General,2011-01-10 13:21:56.701000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-4391,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-15 15:18:20.714000+01:00 +Internet,case-4687,2011-01-20 00:00:00+01:00,General,2011-01-10 13:21:56.701000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-4588,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-15 15:26:25.687000+01:00 +Internet,case-4687,2011-01-20 00:00:00+01:00,General,2011-01-10 13:21:56.701000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-4390,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-16 09:04:18.683000+01:00 +Internet,case-4687,2011-01-20 00:00:00+01:00,General,2011-01-10 13:21:56.701000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-4619,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-16 10:06:11.632000+01:00 +Internet,case-4687,2011-01-20 00:00:00+01:00,General,2011-01-10 13:21:56.701000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-4641,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-17 10:18:49.301000+01:00 +Internet,case-4758,2011-03-12 01:06:40+01:00,General,2011-03-09 10:12:00.243000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource08,2010-11-24 01:06:40.010000+01:00,task-4063,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-23 15:12:06.884000+01:00 +Internet,case-4758,2011-03-12 01:06:40+01:00,General,2011-03-09 10:12:00.243000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource08,2010-11-24 01:06:40.010000+01:00,task-5543,T02 Check confirmation of receipt,complete,Group 4,Resource08,2010-12-23 15:12:31.902000+01:00 +Internet,case-4758,2011-03-12 01:06:40+01:00,General,2011-03-09 10:12:00.243000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource08,2010-11-24 01:06:40.010000+01:00,task-5544,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-23 15:13:01.771000+01:00 +Internet,case-4758,2011-03-12 01:06:40+01:00,General,2011-03-09 10:12:00.243000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource08,2010-11-24 01:06:40.010000+01:00,task-5546,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-23 15:13:26.677000+01:00 +Internet,case-4758,2011-03-12 01:06:40+01:00,General,2011-03-09 10:12:00.243000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource08,2010-11-24 01:06:40.010000+01:00,task-5545,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 09:26:17.172000+01:00 +Internet,case-4758,2011-03-12 01:06:40+01:00,General,2011-03-09 10:12:00.243000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource08,2010-11-24 01:06:40.010000+01:00,task-5577,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 10:04:59.868000+01:00 +Internet,case-4759,2011-01-13 01:06:40+01:00,General,2011-02-08 15:45:37.389000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource15,2010-11-18 01:06:40.010000+01:00,task-4096,Confirmation of receipt,complete,EMPTY,Resource15,2010-12-24 15:41:15.271000+01:00 +Internet,case-4759,2011-01-13 01:06:40+01:00,General,2011-02-08 15:45:37.389000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource15,2010-11-18 01:06:40.010000+01:00,task-5741,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2010-12-24 15:50:46.154000+01:00 +Internet,case-4759,2011-01-13 01:06:40+01:00,General,2011-02-08 15:45:37.389000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource15,2010-11-18 01:06:40.010000+01:00,task-5763,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 15:52:58.737000+01:00 +Internet,case-4759,2011-01-13 01:06:40+01:00,General,2011-02-08 15:45:37.389000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource15,2010-11-18 01:06:40.010000+01:00,task-5767,T05 Print and send confirmation of receipt,complete,EMPTY,admin1,2010-12-30 13:10:44.088000+01:00 +Internet,case-4759,2011-01-13 01:06:40+01:00,General,2011-02-08 15:45:37.389000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource15,2010-11-18 01:06:40.010000+01:00,task-5742,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-04 09:49:09.870000+01:00 +Internet,case-4759,2011-01-13 01:06:40+01:00,General,2011-02-08 15:45:37.389000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource15,2010-11-18 01:06:40.010000+01:00,task-6644,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-04 09:49:28.293000+01:00 +Internet,case-4760,2011-01-20 01:06:40+01:00,General,2011-01-10 12:42:32.647000+01:00,2011-01-20 01:06:40.010000+01:00,,Resource11,2010-11-25 01:06:40.010000+01:00,task-4132,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:13:19.586000+01:00 +Internet,case-4760,2011-01-20 01:06:40+01:00,General,2011-01-10 12:42:32.647000+01:00,2011-01-20 01:06:40.010000+01:00,,Resource11,2010-11-25 01:06:40.010000+01:00,task-4755,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:28:56.960000+01:00 +Internet,case-4760,2011-01-20 01:06:40+01:00,General,2011-01-10 12:42:32.647000+01:00,2011-01-20 01:06:40.010000+01:00,,Resource11,2010-11-25 01:06:40.010000+01:00,task-4821,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:36:47.021000+01:00 +Internet,case-4760,2011-01-20 01:06:40+01:00,General,2011-01-10 12:42:32.647000+01:00,2011-01-20 01:06:40.010000+01:00,,Resource11,2010-11-25 01:06:40.010000+01:00,task-4756,T06 Determine necessity of stop advice,complete,EMPTY,Resource11,2010-12-27 12:13:01.685000+01:00 +Internet,case-4760,2011-01-20 01:06:40+01:00,General,2011-01-10 12:42:32.647000+01:00,2011-01-20 01:06:40.010000+01:00,,Resource11,2010-11-25 01:06:40.010000+01:00,task-5862,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-27 12:13:18.227000+01:00 +Internet,case-4760,2011-01-20 01:06:40+01:00,General,2011-01-10 12:42:32.647000+01:00,2011-01-20 01:06:40.010000+01:00,,Resource11,2010-11-25 01:06:40.010000+01:00,task-4842,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-29 08:58:19.317000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4169,Confirmation of receipt,complete,Group 1,Resource25,2010-12-14 14:18:22.511000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4195,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-12-14 14:19:59.793000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4198,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource25,2010-12-14 14:21:46.996000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4197,T08 Draft and send request for advice,complete,Group 1,Resource25,2010-12-14 14:23:12.190000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4202,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource25,2010-12-14 14:23:26.150000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4204,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-12-14 14:24:32.145000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4208,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource25,2010-12-14 14:25:01.495000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4209,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2010-12-14 14:25:20.301000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4210,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2010-12-14 14:25:46.918000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4194,T02 Check confirmation of receipt,complete,Group 4,Resource25,2010-12-14 15:28:36.139000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4253,T04 Determine confirmation of receipt,complete,Group 3,Resource25,2010-12-14 15:28:58.029000+01:00 +Desk,case-4762,2011-01-13 01:06:40+01:00,General,2011-02-02 09:55:29.925000+01:00,2011-01-13 01:06:40.010000+01:00,,Resource25,2010-11-18 01:06:40.010000+01:00,task-4254,T05 Print and send confirmation of receipt,complete,Group 2,Resource25,2010-12-14 15:29:17.828000+01:00 +Internet,case-4763,2011-02-09 01:06:40+01:00,General,2011-02-08 15:46:11.268000+01:00,2011-02-09 01:06:40.010000+01:00,,Resource04,2010-11-29 01:06:40.010000+01:00,task-4172,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:13:44.427000+01:00 +Internet,case-4763,2011-02-09 01:06:40+01:00,General,2011-02-08 15:46:11.268000+01:00,2011-02-09 01:06:40.010000+01:00,,Resource04,2010-11-29 01:06:40.010000+01:00,task-4757,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:29:12.335000+01:00 +Internet,case-4763,2011-02-09 01:06:40+01:00,General,2011-02-08 15:46:11.268000+01:00,2011-02-09 01:06:40.010000+01:00,,Resource04,2010-11-29 01:06:40.010000+01:00,task-4822,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:32:02.597000+01:00 +Internet,case-4763,2011-02-09 01:06:40+01:00,General,2011-02-08 15:46:11.268000+01:00,2011-02-09 01:06:40.010000+01:00,,Resource04,2010-11-29 01:06:40.010000+01:00,task-4758,T06 Determine necessity of stop advice,complete,EMPTY,Resource04,2010-12-17 14:33:12.157000+01:00 +Internet,case-4763,2011-02-09 01:06:40+01:00,General,2011-02-08 15:46:11.268000+01:00,2011-02-09 01:06:40.010000+01:00,,Resource04,2010-11-29 01:06:40.010000+01:00,task-4939,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-12-17 14:33:28.363000+01:00 +Internet,case-4763,2011-02-09 01:06:40+01:00,General,2011-02-08 15:46:11.268000+01:00,2011-02-09 01:06:40.010000+01:00,,Resource04,2010-11-29 01:06:40.010000+01:00,task-4830,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-21 10:24:37.017000+01:00 +Internet,case-4764,2011-01-24 01:06:40+01:00,General,2011-02-02 13:27:54.785000+01:00,2011-01-24 01:06:40.010000+01:00,,Resource08,2010-11-29 01:06:40.010000+01:00,task-4174,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:14:56.246000+01:00 +Internet,case-4764,2011-01-24 01:06:40+01:00,General,2011-02-02 13:27:54.785000+01:00,2011-01-24 01:06:40.010000+01:00,,Resource08,2010-11-29 01:06:40.010000+01:00,task-4759,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:28:20.061000+01:00 +Internet,case-4764,2011-01-24 01:06:40+01:00,General,2011-02-02 13:27:54.785000+01:00,2011-01-24 01:06:40.010000+01:00,,Resource08,2010-11-29 01:06:40.010000+01:00,task-4819,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:37:33.595000+01:00 +Internet,case-4764,2011-01-24 01:06:40+01:00,General,2011-02-02 13:27:54.785000+01:00,2011-01-24 01:06:40.010000+01:00,,Resource08,2010-11-29 01:06:40.010000+01:00,task-4845,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2010-12-23 13:58:32.473000+01:00 +Internet,case-4764,2011-01-24 01:06:40+01:00,General,2011-02-02 13:27:54.785000+01:00,2011-01-24 01:06:40.010000+01:00,,Resource08,2010-11-29 01:06:40.010000+01:00,task-4760,T06 Determine necessity of stop advice,complete,EMPTY,Resource08,2010-12-23 14:05:11.820000+01:00 +Internet,case-4764,2011-01-24 01:06:40+01:00,General,2011-02-02 13:27:54.785000+01:00,2011-01-24 01:06:40.010000+01:00,,Resource08,2010-11-29 01:06:40.010000+01:00,task-5525,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-23 14:05:27.585000+01:00 +Internet,case-4765,2011-01-25 00:00:00+01:00,General,2011-01-13 09:53:06.668000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource07,2010-11-30 00:00:00.010000+01:00,task-4178,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:15:20.283000+01:00 +Internet,case-4765,2011-01-25 00:00:00+01:00,General,2011-01-13 09:53:06.668000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource07,2010-11-30 00:00:00.010000+01:00,task-4761,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:25:35.968000+01:00 +Internet,case-4765,2011-01-25 00:00:00+01:00,General,2011-01-13 09:53:06.668000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource07,2010-11-30 00:00:00.010000+01:00,task-4810,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:36:12.941000+01:00 +Internet,case-4765,2011-01-25 00:00:00+01:00,General,2011-01-13 09:53:06.668000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource07,2010-11-30 00:00:00.010000+01:00,task-4762,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 14:28:48.056000+01:00 +Internet,case-4765,2011-01-25 00:00:00+01:00,General,2011-01-13 09:53:06.668000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource07,2010-11-30 00:00:00.010000+01:00,task-5685,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 14:31:04.482000+01:00 +Internet,case-4765,2011-01-25 00:00:00+01:00,General,2011-01-13 09:53:06.668000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource07,2010-11-30 00:00:00.010000+01:00,task-4840,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-06 10:50:16.044000+01:00 +Post,case-4766,2010-12-31 00:00:00+01:00,General,2010-12-23 08:11:45.103000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource07,2010-11-05 00:00:00.010000+01:00,task-4179,Confirmation of receipt,complete,Group 1,Resource01,2010-12-15 08:24:10.397000+01:00 +Post,case-4766,2010-12-31 00:00:00+01:00,General,2010-12-23 08:11:45.103000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource07,2010-11-05 00:00:00.010000+01:00,task-4294,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 08:24:27.187000+01:00 +Post,case-4766,2010-12-31 00:00:00+01:00,General,2010-12-23 08:11:45.103000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource07,2010-11-05 00:00:00.010000+01:00,task-4295,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 08:25:15.553000+01:00 +Post,case-4766,2010-12-31 00:00:00+01:00,General,2010-12-23 08:11:45.103000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource07,2010-11-05 00:00:00.010000+01:00,task-4297,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 08:26:22.885000+01:00 +Post,case-4766,2010-12-31 00:00:00+01:00,General,2010-12-23 08:11:45.103000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource07,2010-11-05 00:00:00.010000+01:00,task-4296,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 08:56:36.486000+01:00 +Post,case-4766,2010-12-31 00:00:00+01:00,General,2010-12-23 08:11:45.103000+01:00,2010-12-31 00:00:00.010000+01:00,,Resource07,2010-11-05 00:00:00.010000+01:00,task-4333,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 10:21:26.537000+01:00 +Internet,case-4767,2011-01-25 01:06:40+01:00,General,2011-01-28 14:06:44.443000+01:00,2011-01-25 01:06:40.010000+01:00,,Resource17,2010-11-30 01:06:40.010000+01:00,task-4186,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:15:36.442000+01:00 +Internet,case-4767,2011-01-25 01:06:40+01:00,General,2011-01-28 14:06:44.443000+01:00,2011-01-25 01:06:40.010000+01:00,,Resource17,2010-11-30 01:06:40.010000+01:00,task-4763,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:25:50.044000+01:00 +Internet,case-4767,2011-01-25 01:06:40+01:00,General,2011-01-28 14:06:44.443000+01:00,2011-01-25 01:06:40.010000+01:00,,Resource17,2010-11-30 01:06:40.010000+01:00,task-4811,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:37:19.123000+01:00 +Internet,case-4767,2011-01-25 01:06:40+01:00,General,2011-01-28 14:06:44.443000+01:00,2011-01-25 01:06:40.010000+01:00,,Resource17,2010-11-30 01:06:40.010000+01:00,task-4764,T06 Determine necessity of stop advice,complete,EMPTY,Resource17,2010-12-20 11:20:28.836000+01:00 +Internet,case-4767,2011-01-25 01:06:40+01:00,General,2011-01-28 14:06:44.443000+01:00,2011-01-25 01:06:40.010000+01:00,,Resource17,2010-11-30 01:06:40.010000+01:00,task-5044,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2010-12-20 11:20:44.566000+01:00 +Internet,case-4767,2011-01-25 01:06:40+01:00,General,2011-01-28 14:06:44.443000+01:00,2011-01-25 01:06:40.010000+01:00,,Resource17,2010-11-30 01:06:40.010000+01:00,task-4844,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2010-12-20 13:35:44.989000+01:00 +Internet,case-4769,2011-01-25 00:00:00+01:00,General,2011-01-06 09:08:32.961000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource11,2010-11-30 00:00:00.010000+01:00,task-4193,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:17:43.814000+01:00 +Internet,case-4769,2011-01-25 00:00:00+01:00,General,2011-01-06 09:08:32.961000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource11,2010-11-30 00:00:00.010000+01:00,task-4771,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:26:25.577000+01:00 +Internet,case-4769,2011-01-25 00:00:00+01:00,General,2011-01-06 09:08:32.961000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource11,2010-11-30 00:00:00.010000+01:00,task-4813,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:33:21.802000+01:00 +Internet,case-4769,2011-01-25 00:00:00+01:00,General,2011-01-06 09:08:32.961000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource11,2010-11-30 00:00:00.010000+01:00,task-4772,T06 Determine necessity of stop advice,complete,EMPTY,Resource26,2010-12-21 11:11:52.039000+01:00 +Internet,case-4769,2011-01-25 00:00:00+01:00,General,2011-01-06 09:08:32.961000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource11,2010-11-30 00:00:00.010000+01:00,task-5260,T10 Determine necessity to stop indication,complete,Group 1,Resource26,2010-12-21 11:12:11.623000+01:00 +Internet,case-4769,2011-01-25 00:00:00+01:00,General,2011-01-06 09:08:32.961000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource11,2010-11-30 00:00:00.010000+01:00,task-4834,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-21 11:22:34.266000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-4226,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:17:03.921000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-4767,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:27:20.636000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-4816,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:38:48.972000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-4849,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-30 13:07:43.684000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-4768,T06 Determine necessity of stop advice,complete,EMPTY,Resource15,2011-01-04 10:24:29.864000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-6660,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource35,2011-01-11 10:24:48.073000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-6661,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource33,2011-01-11 15:14:25.680000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-7779,T06 Determine necessity of stop advice,complete,EMPTY,Resource15,2011-01-13 11:07:20.473000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-8070,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource15,2011-01-13 11:07:45.604000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-8071,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource15,2011-01-13 11:07:57.393000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-8073,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-13 11:08:12.119000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-8074,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource15,2011-01-13 11:08:28.915000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-8075,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource15,2011-01-13 11:08:39.178000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-8076,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-13 11:09:01.790000+01:00 +Internet,case-4771,2011-05-31 01:06:40+02:00,General,2011-04-07 15:40:43.697000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource15,2010-11-30 01:06:40.010000+01:00,task-8078,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-13 11:09:20.055000+01:00 +Internet,case-4773,2011-01-25 00:00:00+01:00,General,2011-01-26 16:07:58.280000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource04,2010-11-30 00:00:00.010000+01:00,task-4235,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:18:24.004000+01:00 +Internet,case-4773,2011-01-25 00:00:00+01:00,General,2011-01-26 16:07:58.280000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource04,2010-11-30 00:00:00.010000+01:00,task-4774,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:24:25.535000+01:00 +Internet,case-4773,2011-01-25 00:00:00+01:00,General,2011-01-26 16:07:58.280000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource04,2010-11-30 00:00:00.010000+01:00,task-4804,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:35:01.148000+01:00 +Internet,case-4773,2011-01-25 00:00:00+01:00,General,2011-01-26 16:07:58.280000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource04,2010-11-30 00:00:00.010000+01:00,task-4837,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-21 10:25:16.468000+01:00 +Internet,case-4773,2011-01-25 00:00:00+01:00,General,2011-01-26 16:07:58.280000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource04,2010-11-30 00:00:00.010000+01:00,task-4775,T06 Determine necessity of stop advice,complete,EMPTY,Resource04,2010-12-21 11:02:52.451000+01:00 +Internet,case-4773,2011-01-25 00:00:00+01:00,General,2011-01-26 16:07:58.280000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource04,2010-11-30 00:00:00.010000+01:00,task-5257,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2010-12-21 11:03:05.310000+01:00 +Internet,case-4774,2011-01-20 00:00:00+01:00,General,2011-01-14 15:56:17.205000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-4246,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:19:30.551000+01:00 +Internet,case-4774,2011-01-20 00:00:00+01:00,General,2011-01-14 15:56:17.205000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-4777,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:26:44.199000+01:00 +Internet,case-4774,2011-01-20 00:00:00+01:00,General,2011-01-14 15:56:17.205000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-4814,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:33:40.838000+01:00 +Internet,case-4774,2011-01-20 00:00:00+01:00,General,2011-01-14 15:56:17.205000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-4835,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 10:25:24.065000+01:00 +Internet,case-4774,2011-01-20 00:00:00+01:00,General,2011-01-14 15:56:17.205000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-4778,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 13:54:27.318000+01:00 +Internet,case-4774,2011-01-20 00:00:00+01:00,General,2011-01-14 15:56:17.205000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-5653,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 13:56:57.236000+01:00 +Internet,case-4777,2011-01-20 00:00:00+01:00,General,2011-01-11 09:00:56.175000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-4261,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:17:21.054000+01:00 +Internet,case-4777,2011-01-20 00:00:00+01:00,General,2011-01-11 09:00:56.175000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-4769,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:26:07.771000+01:00 +Internet,case-4777,2011-01-20 00:00:00+01:00,General,2011-01-11 09:00:56.175000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-4812,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:37:55.751000+01:00 +Internet,case-4777,2011-01-20 00:00:00+01:00,General,2011-01-11 09:00:56.175000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-4770,T06 Determine necessity of stop advice,complete,EMPTY,Resource11,2010-12-27 11:18:00.183000+01:00 +Internet,case-4777,2011-01-20 00:00:00+01:00,General,2011-01-11 09:00:56.175000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-5848,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-27 11:18:32.337000+01:00 +Internet,case-4777,2011-01-20 00:00:00+01:00,General,2011-01-11 09:00:56.175000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource11,2010-11-25 00:00:00.010000+01:00,task-4846,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-04 16:40:38.369000+01:00 +Internet,case-4778,2011-01-21 00:00:00+01:00,General,2011-01-07 12:06:15.036000+01:00,2011-01-21 00:00:00.010000+01:00,,Resource07,2010-11-26 00:00:00.010000+01:00,task-4262,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:19:50.098000+01:00 +Internet,case-4778,2011-01-21 00:00:00+01:00,General,2011-01-07 12:06:15.036000+01:00,2011-01-21 00:00:00.010000+01:00,,Resource07,2010-11-26 00:00:00.010000+01:00,task-4779,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:24:47.466000+01:00 +Internet,case-4778,2011-01-21 00:00:00+01:00,General,2011-01-07 12:06:15.036000+01:00,2011-01-21 00:00:00.010000+01:00,,Resource07,2010-11-26 00:00:00.010000+01:00,task-4806,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:37:04.384000+01:00 +Internet,case-4778,2011-01-21 00:00:00+01:00,General,2011-01-07 12:06:15.036000+01:00,2011-01-21 00:00:00.010000+01:00,,Resource07,2010-11-26 00:00:00.010000+01:00,task-4780,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 14:20:24.922000+01:00 +Internet,case-4778,2011-01-21 00:00:00+01:00,General,2011-01-07 12:06:15.036000+01:00,2011-01-21 00:00:00.010000+01:00,,Resource07,2010-11-26 00:00:00.010000+01:00,task-5675,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 14:20:59.792000+01:00 +Internet,case-4778,2011-01-21 00:00:00+01:00,General,2011-01-07 12:06:15.036000+01:00,2011-01-21 00:00:00.010000+01:00,,Resource07,2010-11-26 00:00:00.010000+01:00,task-4843,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-04 09:07:44.006000+01:00 +Internet,case-4779,2011-01-23 00:00:00+01:00,General,2011-01-20 15:34:07.266000+01:00,2011-01-23 00:00:00.010000+01:00,,Resource11,2010-11-28 00:00:00.010000+01:00,task-4271,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:20:29.781000+01:00 +Internet,case-4779,2011-01-23 00:00:00+01:00,General,2011-01-20 15:34:07.266000+01:00,2011-01-23 00:00:00.010000+01:00,,Resource11,2010-11-28 00:00:00.010000+01:00,task-4783,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:27:03.150000+01:00 +Internet,case-4779,2011-01-23 00:00:00+01:00,General,2011-01-20 15:34:07.266000+01:00,2011-01-23 00:00:00.010000+01:00,,Resource11,2010-11-28 00:00:00.010000+01:00,task-4815,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:38:19.241000+01:00 +Internet,case-4779,2011-01-23 00:00:00+01:00,General,2011-01-20 15:34:07.266000+01:00,2011-01-23 00:00:00.010000+01:00,,Resource11,2010-11-28 00:00:00.010000+01:00,task-4784,T06 Determine necessity of stop advice,complete,EMPTY,Resource11,2010-12-27 12:44:59.302000+01:00 +Internet,case-4779,2011-01-23 00:00:00+01:00,General,2011-01-20 15:34:07.266000+01:00,2011-01-23 00:00:00.010000+01:00,,Resource11,2010-11-28 00:00:00.010000+01:00,task-5873,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-27 14:17:44.817000+01:00 +Internet,case-4779,2011-01-23 00:00:00+01:00,General,2011-01-20 15:34:07.266000+01:00,2011-01-23 00:00:00.010000+01:00,,Resource11,2010-11-28 00:00:00.010000+01:00,task-4847,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-29 09:19:45.561000+01:00 +Post,case-4780,2011-01-20 00:00:00+01:00,General,2011-01-13 09:39:30.383000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-4272,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:20:07.645000+01:00 +Post,case-4780,2011-01-20 00:00:00+01:00,General,2011-01-13 09:39:30.383000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-4781,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:25:01.055000+01:00 +Post,case-4780,2011-01-20 00:00:00+01:00,General,2011-01-13 09:39:30.383000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-4807,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:30:47.275000+01:00 +Post,case-4780,2011-01-20 00:00:00+01:00,General,2011-01-13 09:39:30.383000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-4782,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 14:07:03.617000+01:00 +Post,case-4780,2011-01-20 00:00:00+01:00,General,2011-01-13 09:39:30.383000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-5663,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 14:13:09.438000+01:00 +Post,case-4780,2011-01-20 00:00:00+01:00,General,2011-01-13 09:39:30.383000+01:00,2011-01-20 00:00:00.010000+01:00,,Resource07,2010-11-25 00:00:00.010000+01:00,task-4826,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-06 10:49:38.437000+01:00 +Desk,case-4781,2010-12-21 00:00:00+01:00,General,2010-12-17 14:50:32.046000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource07,2010-10-26 00:00:00.020000+02:00,task-4275,Confirmation of receipt,complete,Group 1,Resource01,2010-12-15 09:44:43.229000+01:00 +Desk,case-4781,2010-12-21 00:00:00+01:00,General,2010-12-17 14:50:32.046000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource07,2010-10-26 00:00:00.020000+02:00,task-4383,T02 Check confirmation of receipt,complete,Group 4,Resource01,2010-12-15 09:45:11.956000+01:00 +Desk,case-4781,2010-12-21 00:00:00+01:00,General,2010-12-17 14:50:32.046000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource07,2010-10-26 00:00:00.020000+02:00,task-4384,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2010-12-15 09:49:10.045000+01:00 +Desk,case-4781,2010-12-21 00:00:00+01:00,General,2010-12-17 14:50:32.046000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource07,2010-10-26 00:00:00.020000+02:00,task-4386,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2010-12-15 09:49:34.866000+01:00 +Desk,case-4781,2010-12-21 00:00:00+01:00,General,2010-12-17 14:50:32.046000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource07,2010-10-26 00:00:00.020000+02:00,task-4385,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-15 11:29:58.709000+01:00 +Desk,case-4781,2010-12-21 00:00:00+01:00,General,2010-12-17 14:50:32.046000+01:00,2010-12-21 00:00:00.010000+01:00,,Resource07,2010-10-26 00:00:00.020000+02:00,task-4478,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-15 14:20:23.619000+01:00 +Post,case-4806,2011-01-25 00:00:00+01:00,General,2011-01-07 12:27:29.250000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource34,2010-11-30 00:00:00.010000+01:00,task-4636,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:22:27.456000+01:00 +Post,case-4806,2011-01-25 00:00:00+01:00,General,2011-01-07 12:27:29.250000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource34,2010-11-30 00:00:00.010000+01:00,task-4794,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:32:26.625000+01:00 +Post,case-4806,2011-01-25 00:00:00+01:00,General,2011-01-07 12:27:29.250000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource34,2010-11-30 00:00:00.010000+01:00,task-4831,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:35:20.827000+01:00 +Post,case-4806,2011-01-25 00:00:00+01:00,General,2011-01-07 12:27:29.250000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource34,2010-11-30 00:00:00.010000+01:00,task-4795,T06 Determine necessity of stop advice,complete,EMPTY,Resource34,2010-12-17 12:08:11.969000+01:00 +Post,case-4806,2011-01-25 00:00:00+01:00,General,2011-01-07 12:27:29.250000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource34,2010-11-30 00:00:00.010000+01:00,task-4888,T10 Determine necessity to stop indication,complete,Group 1,Resource34,2010-12-17 12:12:08.687000+01:00 +Post,case-4806,2011-01-25 00:00:00+01:00,General,2011-01-07 12:27:29.250000+01:00,2011-01-25 00:00:00.010000+01:00,,Resource34,2010-11-30 00:00:00.010000+01:00,task-4838,T05 Print and send confirmation of receipt,complete,EMPTY,admin1,2010-12-21 11:44:14.896000+01:00 +Desk,case-4807,2011-04-05 01:06:40+02:00,General,2011-04-01 15:58:08.848000+02:00,2011-01-25 01:06:40.010000+01:00,,Resource22,2010-11-30 01:06:40.010000+01:00,task-4645,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:21:46.261000+01:00 +Desk,case-4807,2011-04-05 01:06:40+02:00,General,2011-04-01 15:58:08.848000+02:00,2011-01-25 01:06:40.010000+01:00,,Resource22,2010-11-30 01:06:40.010000+01:00,task-4790,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:27:55.552000+01:00 +Desk,case-4807,2011-04-05 01:06:40+02:00,General,2011-04-01 15:58:08.848000+02:00,2011-01-25 01:06:40.010000+01:00,,Resource22,2010-11-30 01:06:40.010000+01:00,task-4818,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:35:37.087000+01:00 +Desk,case-4807,2011-04-05 01:06:40+02:00,General,2011-04-01 15:58:08.848000+02:00,2011-01-25 01:06:40.010000+01:00,,Resource22,2010-11-30 01:06:40.010000+01:00,task-4791,T06 Determine necessity of stop advice,complete,EMPTY,Resource22,2010-12-27 09:39:54.086000+01:00 +Desk,case-4807,2011-04-05 01:06:40+02:00,General,2011-04-01 15:58:08.848000+02:00,2011-01-25 01:06:40.010000+01:00,,Resource22,2010-11-30 01:06:40.010000+01:00,task-5817,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2010-12-27 09:41:07.887000+01:00 +Desk,case-4807,2011-04-05 01:06:40+02:00,General,2011-04-01 15:58:08.848000+02:00,2011-01-25 01:06:40.010000+01:00,,Resource22,2010-11-30 01:06:40.010000+01:00,task-4839,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-30 13:07:07.218000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-4647,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:22:08.980000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-4792,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:28:40.301000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-4820,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:38:33.422000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-4793,T06 Determine necessity of stop advice,complete,EMPTY,Resource15,2010-12-24 10:50:19.906000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-4848,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-30 13:07:27.346000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-5613,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource29,2011-01-18 14:18:44.152000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8823,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-01-18 14:19:49.591000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8828,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource29,2011-01-18 14:20:07.827000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8829,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-01-18 14:20:39.983000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8830,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource29,2011-01-18 14:21:26.953000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8831,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-01-18 14:21:49.421000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8833,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource29,2011-01-18 14:22:23.694000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8834,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-01-18 14:22:55.328000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8835,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource29,2011-01-18 14:24:31.856000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8837,T06 Determine necessity of stop advice,complete,Group 7,Resource15,2011-01-19 10:43:13.997000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8929,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource15,2011-01-19 10:43:31.437000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8930,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-19 10:43:46.628000+01:00 +Desk,case-4808,2011-01-27 00:00:00+01:00,General,2011-02-08 15:10:58.033000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource15,2010-12-02 00:00:00.010000+01:00,task-8931,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-19 10:44:37.479000+01:00 +Post,case-4809,2011-01-28 00:00:00+01:00,General,2011-01-13 12:22:49.908000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-4648,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:22:44.741000+01:00 +Post,case-4809,2011-01-28 00:00:00+01:00,General,2011-01-13 12:22:49.908000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-4796,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:32:51.677000+01:00 +Post,case-4809,2011-01-28 00:00:00+01:00,General,2011-01-13 12:22:49.908000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-4832,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:39:56.296000+01:00 +Post,case-4809,2011-01-28 00:00:00+01:00,General,2011-01-13 12:22:49.908000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-4797,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 15:52:37.727000+01:00 +Post,case-4809,2011-01-28 00:00:00+01:00,General,2011-01-13 12:22:49.908000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-5766,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 15:57:48.331000+01:00 +Post,case-4809,2011-01-28 00:00:00+01:00,General,2011-01-13 12:22:49.908000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-4850,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 08:21:06.050000+01:00 +Post,case-4810,2011-01-28 00:00:00+01:00,General,2011-01-13 11:32:30.318000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-4649,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:23:06.388000+01:00 +Post,case-4810,2011-01-28 00:00:00+01:00,General,2011-01-13 11:32:30.318000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-4798,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:30:06.351000+01:00 +Post,case-4810,2011-01-28 00:00:00+01:00,General,2011-01-13 11:32:30.318000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-4825,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:31:08.294000+01:00 +Post,case-4810,2011-01-28 00:00:00+01:00,General,2011-01-13 11:32:30.318000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-4799,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 16:02:51.272000+01:00 +Post,case-4810,2011-01-28 00:00:00+01:00,General,2011-01-13 11:32:30.318000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-4827,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 08:28:53.203000+01:00 +Post,case-4810,2011-01-28 00:00:00+01:00,General,2011-01-13 11:32:30.318000+01:00,2011-01-28 00:00:00.010000+01:00,,Resource07,2010-12-03 00:00:00.010000+01:00,task-5777,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-04 08:24:48.655000+01:00 +Desk,case-4811,2011-02-03 00:00:00+01:00,General,2011-01-20 13:03:01.643000+01:00,2011-02-03 00:00:00.010000+01:00,,Resource07,2010-12-09 00:00:00.010000+01:00,task-4675,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:23:24.758000+01:00 +Desk,case-4811,2011-02-03 00:00:00+01:00,General,2011-01-20 13:03:01.643000+01:00,2011-02-03 00:00:00.010000+01:00,,Resource07,2010-12-09 00:00:00.010000+01:00,task-4800,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:36:30.956000+01:00 +Desk,case-4811,2011-02-03 00:00:00+01:00,General,2011-01-20 13:03:01.643000+01:00,2011-02-03 00:00:00.010000+01:00,,Resource07,2010-12-09 00:00:00.010000+01:00,task-4841,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:41:38.831000+01:00 +Desk,case-4811,2011-02-03 00:00:00+01:00,General,2011-01-20 13:03:01.643000+01:00,2011-02-03 00:00:00.010000+01:00,,Resource07,2010-12-09 00:00:00.010000+01:00,task-4801,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 16:07:05.547000+01:00 +Desk,case-4811,2011-02-03 00:00:00+01:00,General,2011-01-20 13:03:01.643000+01:00,2011-02-03 00:00:00.010000+01:00,,Resource07,2010-12-09 00:00:00.010000+01:00,task-5778,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 16:09:05.193000+01:00 +Desk,case-4811,2011-02-03 00:00:00+01:00,General,2011-01-20 13:03:01.643000+01:00,2011-02-03 00:00:00.010000+01:00,,Resource07,2010-12-09 00:00:00.010000+01:00,task-4852,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 13:35:39.251000+01:00 +Internet,case-4814,2011-01-26 00:00:00+01:00,General,2011-01-10 13:20:26.529000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-4701,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:23:41.409000+01:00 +Internet,case-4814,2011-01-26 00:00:00+01:00,General,2011-01-10 13:20:26.529000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-4802,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:31:27.846000+01:00 +Internet,case-4814,2011-01-26 00:00:00+01:00,General,2011-01-10 13:20:26.529000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-4828,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:31:46.391000+01:00 +Internet,case-4814,2011-01-26 00:00:00+01:00,General,2011-01-10 13:20:26.529000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-4803,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-24 14:39:16.689000+01:00 +Internet,case-4814,2011-01-26 00:00:00+01:00,General,2011-01-10 13:20:26.529000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-5695,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 14:41:08.088000+01:00 +Internet,case-4814,2011-01-26 00:00:00+01:00,General,2011-01-10 13:20:26.529000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-4829,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-29 13:08:53.593000+01:00 +Internet,case-4827,2011-01-26 01:06:40+01:00,General,2011-01-14 15:56:54.775000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource34,2010-12-01 01:06:40.010000+01:00,task-4746,Confirmation of receipt,complete,Group 1,Resource10,2010-12-17 10:25:16.565000+01:00 +Internet,case-4827,2011-01-26 01:06:40+01:00,General,2011-01-14 15:56:54.775000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource34,2010-12-01 01:06:40.010000+01:00,task-4808,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-17 10:33:06.722000+01:00 +Internet,case-4827,2011-01-26 01:06:40+01:00,General,2011-01-14 15:56:54.775000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource34,2010-12-01 01:06:40.010000+01:00,task-4833,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-17 10:40:11.444000+01:00 +Internet,case-4827,2011-01-26 01:06:40+01:00,General,2011-01-14 15:56:54.775000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource34,2010-12-01 01:06:40.010000+01:00,task-4809,T06 Determine necessity of stop advice,complete,EMPTY,Resource07,2010-12-27 12:45:58.852000+01:00 +Internet,case-4827,2011-01-26 01:06:40+01:00,General,2011-01-14 15:56:54.775000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource34,2010-12-01 01:06:40.010000+01:00,task-5874,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-27 12:47:34.547000+01:00 +Internet,case-4827,2011-01-26 01:06:40+01:00,General,2011-01-14 15:56:54.775000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource34,2010-12-01 01:06:40.010000+01:00,task-4851,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 08:27:28.493000+01:00 +Internet,case-4827,2011-01-26 01:06:40+01:00,General,2011-01-14 15:56:54.775000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource34,2010-12-01 01:06:40.010000+01:00,task-5875,T11 Create document X request unlicensed,complete,Group 1,admin2,2011-01-14 15:56:55.509000+01:00 +Post,case-4832,2011-01-13 00:00:00+01:00,General,2010-12-31 10:44:23.501000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource12,2010-11-18 00:00:00.010000+01:00,task-4938,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-20 11:15:59.433000+01:00 +Post,case-4832,2011-01-13 00:00:00+01:00,General,2010-12-31 10:44:23.501000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource12,2010-11-18 00:00:00.010000+01:00,task-5035,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2010-12-20 11:58:52.029000+01:00 +Post,case-4832,2011-01-13 00:00:00+01:00,General,2010-12-31 10:44:23.501000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource12,2010-11-18 00:00:00.010000+01:00,task-5069,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2010-12-20 11:59:19.872000+01:00 +Post,case-4832,2011-01-13 00:00:00+01:00,General,2010-12-31 10:44:23.501000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource12,2010-11-18 00:00:00.010000+01:00,task-5070,T05 Print and send confirmation of receipt,complete,EMPTY,Resource12,2010-12-20 12:00:32.783000+01:00 +Post,case-4832,2011-01-13 00:00:00+01:00,General,2010-12-31 10:44:23.501000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource12,2010-11-18 00:00:00.010000+01:00,task-5036,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-20 12:07:19.758000+01:00 +Post,case-4832,2011-01-13 00:00:00+01:00,General,2010-12-31 10:44:23.501000+01:00,2011-01-13 00:00:00.010000+01:00,,Resource12,2010-11-18 00:00:00.010000+01:00,task-5077,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2010-12-20 12:08:11.685000+01:00 +Internet,case-4833,2011-01-26 00:00:00+01:00,General,2011-01-13 11:08:01.835000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-4940,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-20 11:59:43.112000+01:00 +Internet,case-4833,2011-01-26 00:00:00+01:00,General,2011-01-13 11:08:01.835000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-5071,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-20 13:12:51.349000+01:00 +Internet,case-4833,2011-01-26 00:00:00+01:00,General,2011-01-13 11:08:01.835000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-5125,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-22 09:38:39.114000+01:00 +Internet,case-4833,2011-01-26 00:00:00+01:00,General,2011-01-13 11:08:01.835000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-5382,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 09:48:18.886000+01:00 +Internet,case-4833,2011-01-26 00:00:00+01:00,General,2011-01-13 11:08:01.835000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-5072,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-24 14:56:31.361000+01:00 +Internet,case-4833,2011-01-26 00:00:00+01:00,General,2011-01-13 11:08:01.835000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource07,2010-12-01 00:00:00.010000+01:00,task-5710,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 14:58:08.132000+01:00 +Internet,case-4834,2011-01-26 00:00:00+01:00,General,2011-01-06 09:46:31.789000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-4961,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-20 17:02:46.928000+01:00 +Internet,case-4834,2011-01-26 00:00:00+01:00,General,2011-01-06 09:46:31.789000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-5214,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-22 09:52:52.099000+01:00 +Internet,case-4834,2011-01-26 00:00:00+01:00,General,2011-01-06 09:46:31.789000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-5389,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-22 10:50:08.896000+01:00 +Internet,case-4834,2011-01-26 00:00:00+01:00,General,2011-01-06 09:46:31.789000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-5423,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 09:59:17.610000+01:00 +Internet,case-4834,2011-01-26 00:00:00+01:00,General,2011-01-06 09:46:31.789000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-5215,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-28 07:46:32.295000+01:00 +Internet,case-4834,2011-01-26 00:00:00+01:00,General,2011-01-06 09:46:31.789000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-5941,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-28 07:48:12.199000+01:00 +Internet,case-4837,2011-01-26 01:06:40+01:00,General,2011-01-25 17:04:40.546000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-4975,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-20 16:57:01.202000+01:00 +Internet,case-4837,2011-01-26 01:06:40+01:00,General,2011-01-25 17:04:40.546000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5212,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-22 09:40:30.035000+01:00 +Internet,case-4837,2011-01-26 01:06:40+01:00,General,2011-01-25 17:04:40.546000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5383,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-22 09:47:15.917000+01:00 +Internet,case-4837,2011-01-26 01:06:40+01:00,General,2011-01-25 17:04:40.546000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5386,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-24 09:42:30.661000+01:00 +Internet,case-4837,2011-01-26 01:06:40+01:00,General,2011-01-25 17:04:40.546000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5213,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-24 15:18:12.487000+01:00 +Internet,case-4837,2011-01-26 01:06:40+01:00,General,2011-01-25 17:04:40.546000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5721,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 15:20:07.739000+01:00 +Internet,case-4891,2011-01-26 00:00:00+01:00,General,2011-01-25 09:49:29.713000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-5251,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-23 16:54:48.171000+01:00 +Internet,case-4891,2011-01-26 00:00:00+01:00,General,2011-01-25 09:49:29.713000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-5553,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-24 11:36:43.053000+01:00 +Internet,case-4891,2011-01-26 00:00:00+01:00,General,2011-01-25 09:49:29.713000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-5628,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 12:01:13.266000+01:00 +Internet,case-4891,2011-01-26 00:00:00+01:00,General,2011-01-25 09:49:29.713000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-5637,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-28 08:01:37.583000+01:00 +Internet,case-4891,2011-01-26 00:00:00+01:00,General,2011-01-25 09:49:29.713000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-5554,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-29 10:23:42.144000+01:00 +Internet,case-4891,2011-01-26 00:00:00+01:00,General,2011-01-25 09:49:29.713000+01:00,2011-01-26 00:00:00.010000+01:00,,Resource11,2010-12-01 00:00:00.010000+01:00,task-6149,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-29 10:24:01.310000+01:00 +Internet,case-4892,2011-01-31 01:06:40+01:00,General,2011-03-01 11:33:59.752000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-5253,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 12:50:56.125000+01:00 +Internet,case-4892,2011-01-31 01:06:40+01:00,General,2011-03-01 11:33:59.752000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-6345,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 12:51:36.433000+01:00 +Internet,case-4892,2011-01-31 01:06:40+01:00,General,2011-03-01 11:33:59.752000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-6346,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2010-12-30 12:51:50.602000+01:00 +Internet,case-4892,2011-01-31 01:06:40+01:00,General,2011-03-01 11:33:59.752000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-6348,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2010-12-30 13:02:05.943000+01:00 +Internet,case-4892,2011-01-31 01:06:40+01:00,General,2011-03-01 11:33:59.752000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-6347,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:15:23.521000+01:00 +Internet,case-4892,2011-01-31 01:06:40+01:00,General,2011-03-01 11:33:59.752000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-6389,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-31 11:28:32.972000+01:00 +Internet,case-4895,2011-01-31 00:00:00+01:00,General,2011-02-17 13:41:01.229000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource02,2010-12-06 00:00:00.010000+01:00,task-5266,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 14:24:54.305000+01:00 +Internet,case-4895,2011-01-31 00:00:00+01:00,General,2011-02-17 13:41:01.229000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource02,2010-12-06 00:00:00.010000+01:00,task-8161,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-01-13 14:25:56.228000+01:00 +Internet,case-4895,2011-01-31 00:00:00+01:00,General,2011-02-17 13:41:01.229000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource02,2010-12-06 00:00:00.010000+01:00,task-8162,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-13 14:26:41.361000+01:00 +Internet,case-4895,2011-01-31 00:00:00+01:00,General,2011-02-17 13:41:01.229000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource02,2010-12-06 00:00:00.010000+01:00,task-8164,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-13 14:27:01.109000+01:00 +Internet,case-4895,2011-01-31 00:00:00+01:00,General,2011-02-17 13:41:01.229000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource02,2010-12-06 00:00:00.010000+01:00,task-8163,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:17:16.640000+01:00 +Internet,case-4895,2011-01-31 00:00:00+01:00,General,2011-02-17 13:41:01.229000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource02,2010-12-06 00:00:00.010000+01:00,task-8226,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:53:21.844000+01:00 +Internet,case-4896,2011-01-26 01:06:40+01:00,General,2011-01-10 13:28:35.749000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5267,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-23 17:03:00.964000+01:00 +Internet,case-4896,2011-01-26 01:06:40+01:00,General,2011-01-10 13:28:35.749000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5557,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-24 11:38:36.243000+01:00 +Internet,case-4896,2011-01-26 01:06:40+01:00,General,2011-01-10 13:28:35.749000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5629,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 12:02:37.237000+01:00 +Internet,case-4896,2011-01-26 01:06:40+01:00,General,2011-01-10 13:28:35.749000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5558,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-24 15:28:54.616000+01:00 +Internet,case-4896,2011-01-26 01:06:40+01:00,General,2011-01-10 13:28:35.749000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5732,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 15:36:10.435000+01:00 +Internet,case-4896,2011-01-26 01:06:40+01:00,General,2011-01-10 13:28:35.749000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource07,2010-12-01 01:06:40.010000+01:00,task-5638,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-28 10:02:48.526000+01:00 +Internet,case-4897,2011-01-26 01:06:40+01:00,General,2011-01-26 15:50:04.617000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource08,2010-12-01 01:06:40.010000+01:00,task-5268,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-28 15:04:42.577000+01:00 +Internet,case-4897,2011-01-26 01:06:40+01:00,General,2011-01-26 15:50:04.617000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource08,2010-12-01 01:06:40.010000+01:00,task-6081,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-28 15:05:24.948000+01:00 +Internet,case-4897,2011-01-26 01:06:40+01:00,General,2011-01-26 15:50:04.617000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource08,2010-12-01 01:06:40.010000+01:00,task-6083,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-28 16:13:58.317000+01:00 +Internet,case-4897,2011-01-26 01:06:40+01:00,General,2011-01-26 15:50:04.617000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource08,2010-12-01 01:06:40.010000+01:00,task-6093,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-01-10 08:47:24.236000+01:00 +Internet,case-4897,2011-01-26 01:06:40+01:00,General,2011-01-26 15:50:04.617000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource08,2010-12-01 01:06:40.010000+01:00,task-6082,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-10 08:57:13.534000+01:00 +Internet,case-4897,2011-01-26 01:06:40+01:00,General,2011-01-26 15:50:04.617000+01:00,2011-01-26 01:06:40.010000+01:00,,Resource08,2010-12-01 01:06:40.010000+01:00,task-7370,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-10 09:26:08.390000+01:00 +Internet,case-4898,2011-01-31 01:06:40+01:00,General,2011-02-15 10:58:40.180000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource02,2010-12-06 01:06:40.010000+01:00,task-5270,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 15:48:54.503000+01:00 +Internet,case-4898,2011-01-31 01:06:40+01:00,General,2011-02-15 10:58:40.180000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource02,2010-12-06 01:06:40.010000+01:00,task-8206,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 15:49:37.672000+01:00 +Internet,case-4898,2011-01-31 01:06:40+01:00,General,2011-02-15 10:58:40.180000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource02,2010-12-06 01:06:40.010000+01:00,task-8208,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:32:11.122000+01:00 +Internet,case-4898,2011-01-31 01:06:40+01:00,General,2011-02-15 10:58:40.180000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource02,2010-12-06 01:06:40.010000+01:00,task-8207,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-13 17:07:14.033000+01:00 +Internet,case-4898,2011-01-31 01:06:40+01:00,General,2011-02-15 10:58:40.180000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource02,2010-12-06 01:06:40.010000+01:00,task-8245,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-14 07:47:15.029000+01:00 +Internet,case-4898,2011-01-31 01:06:40+01:00,General,2011-02-15 10:58:40.180000+01:00,2011-01-31 01:06:40.010000+01:00,,Resource02,2010-12-06 01:06:40.010000+01:00,task-8243,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:52:11.811000+01:00 +Internet,case-4899,2011-01-27 00:00:00+01:00,General,2011-01-06 08:41:05.254000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource07,2010-12-02 00:00:00.010000+01:00,task-5271,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-23 17:07:44.891000+01:00 +Internet,case-4899,2011-01-27 00:00:00+01:00,General,2011-01-06 08:41:05.254000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource07,2010-12-02 00:00:00.010000+01:00,task-5559,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-24 11:34:58.337000+01:00 +Internet,case-4899,2011-01-27 00:00:00+01:00,General,2011-01-06 08:41:05.254000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource07,2010-12-02 00:00:00.010000+01:00,task-5627,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 12:00:23.682000+01:00 +Internet,case-4899,2011-01-27 00:00:00+01:00,General,2011-01-06 08:41:05.254000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource07,2010-12-02 00:00:00.010000+01:00,task-5560,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-24 15:43:11.974000+01:00 +Internet,case-4899,2011-01-27 00:00:00+01:00,General,2011-01-06 08:41:05.254000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource07,2010-12-02 00:00:00.010000+01:00,task-5746,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-24 15:45:07.747000+01:00 +Internet,case-4899,2011-01-27 00:00:00+01:00,General,2011-01-06 08:41:05.254000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource07,2010-12-02 00:00:00.010000+01:00,task-5636,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-29 11:24:54.895000+01:00 +Internet,case-4900,2011-01-27 00:00:00+01:00,General,2011-01-20 18:10:18.448000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource11,2010-12-02 00:00:00.010000+01:00,task-5272,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-23 16:59:56.008000+01:00 +Internet,case-4900,2011-01-27 00:00:00+01:00,General,2011-01-20 18:10:18.448000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource11,2010-12-02 00:00:00.010000+01:00,task-5555,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-24 10:09:05.143000+01:00 +Internet,case-4900,2011-01-27 00:00:00+01:00,General,2011-01-20 18:10:18.448000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource11,2010-12-02 00:00:00.010000+01:00,task-5586,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-24 10:13:56.270000+01:00 +Internet,case-4900,2011-01-27 00:00:00+01:00,General,2011-01-20 18:10:18.448000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource11,2010-12-02 00:00:00.010000+01:00,task-5592,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2010-12-28 08:30:29.179000+01:00 +Internet,case-4900,2011-01-27 00:00:00+01:00,General,2011-01-20 18:10:18.448000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource11,2010-12-02 00:00:00.010000+01:00,task-5556,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-28 08:32:38.344000+01:00 +Internet,case-4900,2011-01-27 00:00:00+01:00,General,2011-01-20 18:10:18.448000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource11,2010-12-02 00:00:00.010000+01:00,task-5957,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-28 08:33:01.592000+01:00 +Internet,case-4901,2011-01-27 00:00:00+01:00,General,2011-02-04 12:16:54.067000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource05,2010-12-02 00:00:00.010000+01:00,task-5276,Confirmation of receipt,complete,EMPTY,Resource05,2011-01-03 11:12:15.095000+01:00 +Internet,case-4901,2011-01-27 00:00:00+01:00,General,2011-02-04 12:16:54.067000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource05,2010-12-02 00:00:00.010000+01:00,task-6503,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-01-03 11:14:02.661000+01:00 +Internet,case-4901,2011-01-27 00:00:00+01:00,General,2011-02-04 12:16:54.067000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource05,2010-12-02 00:00:00.010000+01:00,task-6504,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-01-03 11:18:15.118000+01:00 +Internet,case-4901,2011-01-27 00:00:00+01:00,General,2011-02-04 12:16:54.067000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource05,2010-12-02 00:00:00.010000+01:00,task-6511,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-01-03 11:18:59.517000+01:00 +Internet,case-4901,2011-01-27 00:00:00+01:00,General,2011-02-04 12:16:54.067000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource05,2010-12-02 00:00:00.010000+01:00,task-6509,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-01-03 11:36:07.703000+01:00 +Internet,case-4901,2011-01-27 00:00:00+01:00,General,2011-02-04 12:16:54.067000+01:00,2011-01-27 00:00:00.010000+01:00,,Resource05,2010-12-02 00:00:00.010000+01:00,task-6524,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-01-03 11:39:13.388000+01:00 +Internet,case-4902,2011-01-28 01:06:40+01:00,General,2011-01-25 09:56:35.150000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource07,2010-12-03 01:06:40.010000+01:00,task-5281,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-27 09:56:41.044000+01:00 +Internet,case-4902,2011-01-28 01:06:40+01:00,General,2011-01-25 09:56:35.150000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource07,2010-12-03 01:06:40.010000+01:00,task-5822,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-27 09:57:11.887000+01:00 +Internet,case-4902,2011-01-28 01:06:40+01:00,General,2011-01-25 09:56:35.150000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource07,2010-12-03 01:06:40.010000+01:00,task-5824,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-27 09:57:34.660000+01:00 +Internet,case-4902,2011-01-28 01:06:40+01:00,General,2011-01-25 09:56:35.150000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource07,2010-12-03 01:06:40.010000+01:00,task-5821,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-27 10:03:26.385000+01:00 +Internet,case-4902,2011-01-28 01:06:40+01:00,General,2011-01-25 09:56:35.150000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource07,2010-12-03 01:06:40.010000+01:00,task-5833,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-27 10:03:40.607000+01:00 +Internet,case-4902,2011-01-28 01:06:40+01:00,General,2011-01-25 09:56:35.150000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource07,2010-12-03 01:06:40.010000+01:00,task-5834,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-28 08:13:40.017000+01:00 +Internet,case-4903,2011-01-28 01:06:40+01:00,General,2011-02-08 00:00:00.010000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource35,2010-12-03 01:06:40.010000+01:00,task-5289,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-04 11:24:04.105000+01:00 +Internet,case-4903,2011-01-28 01:06:40+01:00,General,2011-02-08 00:00:00.010000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource35,2010-12-03 01:06:40.010000+01:00,task-6676,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-04 16:42:52.586000+01:00 +Internet,case-4903,2011-01-28 01:06:40+01:00,General,2011-02-08 00:00:00.010000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource35,2010-12-03 01:06:40.010000+01:00,task-6737,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-04 16:43:11.086000+01:00 +Internet,case-4903,2011-01-28 01:06:40+01:00,General,2011-02-08 00:00:00.010000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource35,2010-12-03 01:06:40.010000+01:00,task-6739,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 11:55:07.330000+01:00 +Internet,case-4903,2011-01-28 01:06:40+01:00,General,2011-02-08 00:00:00.010000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource35,2010-12-03 01:06:40.010000+01:00,task-6677,T06 Determine necessity of stop advice,complete,Group 1,Resource35,2011-01-12 16:56:06.080000+01:00 +Internet,case-4903,2011-01-28 01:06:40+01:00,General,2011-02-08 00:00:00.010000+01:00,2011-01-28 01:06:40.010000+01:00,,Resource35,2010-12-03 01:06:40.010000+01:00,task-7961,T10 Determine necessity to stop indication,complete,Group 1,admin2,2011-02-09 09:28:46.539000+01:00 +Post,case-4920,2011-04-13 01:06:40+02:00,General,2011-04-12 14:12:50.523000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource15,2010-12-08 01:06:40.010000+01:00,task-5402,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-12 14:45:57.475000+01:00 +Post,case-4920,2011-04-13 01:06:40+02:00,General,2011-04-12 14:12:50.523000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource15,2010-12-08 01:06:40.010000+01:00,task-7937,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 11:15:12.572000+01:00 +Post,case-4920,2011-04-13 01:06:40+02:00,General,2011-04-12 14:12:50.523000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource15,2010-12-08 01:06:40.010000+01:00,task-8087,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 11:15:33.108000+01:00 +Post,case-4920,2011-04-13 01:06:40+02:00,General,2011-04-12 14:12:50.523000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource15,2010-12-08 01:06:40.010000+01:00,task-8088,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:40:48.568000+01:00 +Post,case-4920,2011-04-13 01:06:40+02:00,General,2011-04-12 14:12:50.523000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource15,2010-12-08 01:06:40.010000+01:00,task-7938,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-24 08:59:58.170000+01:00 +Post,case-4920,2011-04-13 01:06:40+02:00,General,2011-04-12 14:12:50.523000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource15,2010-12-08 01:06:40.010000+01:00,task-9278,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-24 09:00:21.103000+01:00 +Post,case-4922,2011-02-10 00:00:00+01:00,General,2011-02-11 11:36:29.855000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-5410,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 11:08:48.046000+01:00 +Post,case-4922,2011-02-10 00:00:00+01:00,General,2011-02-11 11:36:29.855000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8559,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 11:09:50.532000+01:00 +Post,case-4922,2011-02-10 00:00:00+01:00,General,2011-02-11 11:36:29.855000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8561,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-17 11:58:20.624000+01:00 +Post,case-4922,2011-02-10 00:00:00+01:00,General,2011-02-11 11:36:29.855000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8560,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 08:41:58.518000+01:00 +Post,case-4922,2011-02-10 00:00:00+01:00,General,2011-02-11 11:36:29.855000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8703,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-18 08:42:16.927000+01:00 +Post,case-4922,2011-02-10 00:00:00+01:00,General,2011-02-11 11:36:29.855000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8585,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 10:12:55.742000+01:00 +Post,case-4923,2011-02-10 00:00:00+01:00,General,2011-02-11 11:28:04.497000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-5411,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 11:50:08.510000+01:00 +Post,case-4923,2011-02-10 00:00:00+01:00,General,2011-02-11 11:28:04.497000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8573,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 11:50:56.307000+01:00 +Post,case-4923,2011-02-10 00:00:00+01:00,General,2011-02-11 11:28:04.497000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8575,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-17 12:08:19.897000+01:00 +Post,case-4923,2011-02-10 00:00:00+01:00,General,2011-02-11 11:28:04.497000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8574,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 09:48:46.250000+01:00 +Post,case-4923,2011-02-10 00:00:00+01:00,General,2011-02-11 11:28:04.497000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8735,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-01-18 09:49:33.297000+01:00 +Post,case-4923,2011-02-10 00:00:00+01:00,General,2011-02-11 11:28:04.497000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8736,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 09:49:51.532000+01:00 +Post,case-4923,2011-02-10 00:00:00+01:00,General,2011-02-11 11:28:04.497000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8737,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-18 09:50:05.744000+01:00 +Post,case-4923,2011-02-10 00:00:00+01:00,General,2011-02-11 11:28:04.497000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource02,2010-12-16 00:00:00.010000+01:00,task-8594,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 10:09:36.866000+01:00 +Desk,case-4924,2011-02-14 00:00:00+01:00,General,2011-03-28 12:41:17.155000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-20 00:00:00.010000+01:00,task-5422,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-18 12:53:37.525000+01:00 +Desk,case-4924,2011-02-14 00:00:00+01:00,General,2011-03-28 12:41:17.155000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-20 00:00:00.010000+01:00,task-8800,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-18 12:54:37.901000+01:00 +Desk,case-4924,2011-02-14 00:00:00+01:00,General,2011-03-28 12:41:17.155000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-20 00:00:00.010000+01:00,task-8801,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-18 12:55:08.036000+01:00 +Desk,case-4924,2011-02-14 00:00:00+01:00,General,2011-03-28 12:41:17.155000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-20 00:00:00.010000+01:00,task-8799,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-02-07 15:33:18.597000+01:00 +Desk,case-4924,2011-02-14 00:00:00+01:00,General,2011-03-28 12:41:17.155000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-20 00:00:00.010000+01:00,task-11299,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-02-09 14:00:41.522000+01:00 +Desk,case-4924,2011-02-14 00:00:00+01:00,General,2011-03-28 12:41:17.155000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-20 00:00:00.010000+01:00,task-11518,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-09 15:06:11.727000+01:00 +Desk,case-4924,2011-02-14 00:00:00+01:00,General,2011-03-28 12:41:17.155000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-20 00:00:00.010000+01:00,task-11527,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-09 15:06:28.296000+01:00 +Desk,case-4924,2011-02-14 00:00:00+01:00,General,2011-03-28 12:41:17.155000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-20 00:00:00.010000+01:00,task-11528,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-11 08:38:09.108000+01:00 +Desk,case-4925,2011-02-11 01:06:40+01:00,General,,2011-02-11 01:06:40.010000+01:00,,Resource12,2010-12-17 01:06:40.010000+01:00,task-5434,Confirmation of receipt,complete,EMPTY,Resource12,2011-01-03 11:33:36.015000+01:00 +Desk,case-4925,2011-02-11 01:06:40+01:00,General,,2011-02-11 01:06:40.010000+01:00,,Resource12,2010-12-17 01:06:40.010000+01:00,task-6521,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-01-03 11:34:03.359000+01:00 +Desk,case-4925,2011-02-11 01:06:40+01:00,General,,2011-02-11 01:06:40.010000+01:00,,Resource12,2010-12-17 01:06:40.010000+01:00,task-6523,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-03 13:55:10.205000+01:00 +Desk,case-4925,2011-02-11 01:06:40+01:00,General,,2011-02-11 01:06:40.010000+01:00,,Resource12,2010-12-17 01:06:40.010000+01:00,task-6578,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 11:50:26.443000+01:00 +Desk,case-4925,2011-02-11 01:06:40+01:00,General,,2011-02-11 01:06:40.010000+01:00,,Resource12,2010-12-17 01:06:40.010000+01:00,task-6522,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-12 10:17:44.150000+01:00 +Desk,case-4925,2011-02-11 01:06:40+01:00,General,,2011-02-11 01:06:40.010000+01:00,,Resource12,2010-12-17 01:06:40.010000+01:00,task-7856,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource12,2011-01-13 11:30:08.958000+01:00 +Desk,case-4925,2011-02-11 01:06:40+01:00,General,,2011-02-11 01:06:40.010000+01:00,,Resource12,2010-12-17 01:06:40.010000+01:00,task-8096,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-13 11:30:30.314000+01:00 +Desk,case-4925,2011-02-11 01:06:40+01:00,General,,2011-02-11 01:06:40.010000+01:00,,Resource12,2010-12-17 01:06:40.010000+01:00,task-8097,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-13 11:31:10.934000+01:00 +Desk,case-4926,2011-04-04 01:06:40+02:00,General,2011-03-17 09:22:44.335000+01:00,2011-04-04 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-5438,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-12 14:54:04.422000+01:00 +Desk,case-4926,2011-04-04 01:06:40+02:00,General,2011-03-17 09:22:44.335000+01:00,2011-04-04 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-7941,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-12 15:20:58.827000+01:00 +Desk,case-4926,2011-04-04 01:06:40+02:00,General,2011-03-17 09:22:44.335000+01:00,2011-04-04 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-7946,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-12 15:21:16.895000+01:00 +Desk,case-4926,2011-04-04 01:06:40+02:00,General,2011-03-17 09:22:44.335000+01:00,2011-04-04 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-7940,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 11:17:26.872000+01:00 +Desk,case-4926,2011-04-04 01:06:40+02:00,General,2011-03-17 09:22:44.335000+01:00,2011-04-04 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-8089,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 11:17:40.718000+01:00 +Desk,case-4926,2011-04-04 01:06:40+02:00,General,2011-03-17 09:22:44.335000+01:00,2011-04-04 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-8090,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:42:16.277000+01:00 +Desk,case-4927,2011-02-14 00:00:00+01:00,General,2011-01-13 11:56:15.421000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource07,2010-12-20 00:00:00.010000+01:00,task-5441,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-30 07:55:59.103000+01:00 +Desk,case-4927,2011-02-14 00:00:00+01:00,General,2011-01-13 11:56:15.421000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource07,2010-12-20 00:00:00.010000+01:00,task-6237,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-30 07:56:43.232000+01:00 +Desk,case-4927,2011-02-14 00:00:00+01:00,General,2011-01-13 11:56:15.421000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource07,2010-12-20 00:00:00.010000+01:00,task-6238,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-30 08:01:02.994000+01:00 +Desk,case-4927,2011-02-14 00:00:00+01:00,General,2011-01-13 11:56:15.421000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource07,2010-12-20 00:00:00.010000+01:00,task-6236,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-30 09:09:49.746000+01:00 +Desk,case-4927,2011-02-14 00:00:00+01:00,General,2011-01-13 11:56:15.421000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource07,2010-12-20 00:00:00.010000+01:00,task-6260,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:12:15.940000+01:00 +Desk,case-4927,2011-02-14 00:00:00+01:00,General,2011-01-13 11:56:15.421000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource07,2010-12-20 00:00:00.010000+01:00,task-6387,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-03 16:32:49.294000+01:00 +Internet,case-4930,2011-02-10 01:06:40+01:00,General,2011-02-16 14:49:13.268000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-03 01:06:40.010000+01:00,task-5467,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 09:09:02.887000+01:00 +Internet,case-4930,2011-02-10 01:06:40+01:00,General,2011-02-16 14:49:13.268000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-03 01:06:40.010000+01:00,task-7161,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-07 09:48:45.404000+01:00 +Internet,case-4930,2011-02-10 01:06:40+01:00,General,2011-02-16 14:49:13.268000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-03 01:06:40.010000+01:00,task-7183,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-07 09:49:04.509000+01:00 +Internet,case-4930,2011-02-10 01:06:40+01:00,General,2011-02-16 14:49:13.268000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-03 01:06:40.010000+01:00,task-7160,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 09:49:42.207000+01:00 +Internet,case-4930,2011-02-10 01:06:40+01:00,General,2011-02-16 14:49:13.268000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-03 01:06:40.010000+01:00,task-7185,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-07 11:32:18.303000+01:00 +Internet,case-4930,2011-02-10 01:06:40+01:00,General,2011-02-16 14:49:13.268000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-03 01:06:40.010000+01:00,task-7225,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 15:45:32.198000+01:00 +Internet,case-4939,2011-02-01 00:00:00+01:00,General,2011-02-01 16:16:17.020000+01:00,2011-02-01 00:00:00.010000+01:00,,Resource17,2010-12-07 00:00:00.010000+01:00,task-5519,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 10:28:15.346000+01:00 +Internet,case-4939,2011-02-01 00:00:00+01:00,General,2011-02-01 16:16:17.020000+01:00,2011-02-01 00:00:00.010000+01:00,,Resource17,2010-12-07 00:00:00.010000+01:00,task-7391,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-10 10:28:28.630000+01:00 +Internet,case-4939,2011-02-01 00:00:00+01:00,General,2011-02-01 16:16:17.020000+01:00,2011-02-01 00:00:00.010000+01:00,,Resource17,2010-12-07 00:00:00.010000+01:00,task-7392,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-10 10:28:47.739000+01:00 +Internet,case-4939,2011-02-01 00:00:00+01:00,General,2011-02-01 16:16:17.020000+01:00,2011-02-01 00:00:00.010000+01:00,,Resource17,2010-12-07 00:00:00.010000+01:00,task-7390,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 10:29:22.672000+01:00 +Internet,case-4939,2011-02-01 00:00:00+01:00,General,2011-02-01 16:16:17.020000+01:00,2011-02-01 00:00:00.010000+01:00,,Resource17,2010-12-07 00:00:00.010000+01:00,task-7394,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-10 11:49:59.816000+01:00 +Internet,case-4939,2011-02-01 00:00:00+01:00,General,2011-02-01 16:16:17.020000+01:00,2011-02-01 00:00:00.010000+01:00,,Resource17,2010-12-07 00:00:00.010000+01:00,task-7411,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:27:46.315000+01:00 +Internet,case-4941,2011-02-02 00:00:00+01:00,General,2011-05-11 09:38:26.369000+02:00,2011-02-02 00:00:00.010000+01:00,,Resource09,2010-12-08 00:00:00.010000+01:00,task-5523,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-05 12:04:46.010000+01:00 +Internet,case-4941,2011-02-02 00:00:00+01:00,General,2011-05-11 09:38:26.369000+02:00,2011-02-02 00:00:00.010000+01:00,,Resource09,2010-12-08 00:00:00.010000+01:00,task-6857,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-05 12:10:24.898000+01:00 +Internet,case-4941,2011-02-02 00:00:00+01:00,General,2011-05-11 09:38:26.369000+02:00,2011-02-02 00:00:00.010000+01:00,,Resource09,2010-12-08 00:00:00.010000+01:00,task-6858,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource09,2011-01-13 12:14:58.802000+01:00 +Internet,case-4941,2011-02-02 00:00:00+01:00,General,2011-05-11 09:38:26.369000+02:00,2011-02-02 00:00:00.010000+01:00,,Resource09,2010-12-08 00:00:00.010000+01:00,task-8121,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-13 12:15:20.489000+01:00 +Internet,case-4941,2011-02-02 00:00:00+01:00,General,2011-05-11 09:38:26.369000+02:00,2011-02-02 00:00:00.010000+01:00,,Resource09,2010-12-08 00:00:00.010000+01:00,task-8122,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-13 12:15:47.147000+01:00 +Internet,case-4941,2011-02-02 00:00:00+01:00,General,2011-05-11 09:38:26.369000+02:00,2011-02-02 00:00:00.010000+01:00,,Resource09,2010-12-08 00:00:00.010000+01:00,task-6856,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-13 12:59:56.180000+01:00 +Internet,case-4941,2011-02-02 00:00:00+01:00,General,2011-05-11 09:38:26.369000+02:00,2011-02-02 00:00:00.010000+01:00,,Resource09,2010-12-08 00:00:00.010000+01:00,task-8156,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:21:31.379000+01:00 +Internet,case-4941,2011-02-02 00:00:00+01:00,General,2011-05-11 09:38:26.369000+02:00,2011-02-02 00:00:00.010000+01:00,,Resource09,2010-12-08 00:00:00.010000+01:00,task-8233,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:33:55.023000+01:00 +Internet,case-4943,2011-04-14 01:06:40+02:00,General,2011-04-11 00:00:00.020000+02:00,2011-04-14 01:06:40.020000+02:00,,Resource17,2010-12-09 01:06:40.010000+01:00,task-5542,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 12:15:38.509000+01:00 +Internet,case-4943,2011-04-14 01:06:40+02:00,General,2011-04-11 00:00:00.020000+02:00,2011-04-14 01:06:40.020000+02:00,,Resource17,2010-12-09 01:06:40.010000+01:00,task-7416,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-10 12:15:54.133000+01:00 +Internet,case-4943,2011-04-14 01:06:40+02:00,General,2011-04-11 00:00:00.020000+02:00,2011-04-14 01:06:40.020000+02:00,,Resource17,2010-12-09 01:06:40.010000+01:00,task-7417,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-10 12:16:06.257000+01:00 +Internet,case-4943,2011-04-14 01:06:40+02:00,General,2011-04-11 00:00:00.020000+02:00,2011-04-14 01:06:40.020000+02:00,,Resource17,2010-12-09 01:06:40.010000+01:00,task-7415,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 12:18:14.442000+01:00 +Internet,case-4943,2011-04-14 01:06:40+02:00,General,2011-04-11 00:00:00.020000+02:00,2011-04-14 01:06:40.020000+02:00,,Resource17,2010-12-09 01:06:40.010000+01:00,task-7421,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-10 14:23:12.135000+01:00 +Internet,case-4943,2011-04-14 01:06:40+02:00,General,2011-04-11 00:00:00.020000+02:00,2011-04-14 01:06:40.020000+02:00,,Resource17,2010-12-09 01:06:40.010000+01:00,task-7445,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:25:53.817000+01:00 +Internet,case-4944,2011-03-17 01:06:40+01:00,General,2011-03-02 10:27:28.139000+01:00,2011-03-17 01:06:40.010000+01:00,,Resource02,2010-12-09 01:06:40.010000+01:00,task-5552,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-19 17:08:59.152000+01:00 +Internet,case-4944,2011-03-17 01:06:40+01:00,General,2011-03-02 10:27:28.139000+01:00,2011-03-17 01:06:40.010000+01:00,,Resource02,2010-12-09 01:06:40.010000+01:00,task-9028,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-19 17:09:55.928000+01:00 +Internet,case-4944,2011-03-17 01:06:40+01:00,General,2011-03-02 10:27:28.139000+01:00,2011-03-17 01:06:40.010000+01:00,,Resource02,2010-12-09 01:06:40.010000+01:00,task-9029,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-20 07:51:24.410000+01:00 +Internet,case-4944,2011-03-17 01:06:40+01:00,General,2011-03-02 10:27:28.139000+01:00,2011-03-17 01:06:40.010000+01:00,,Resource02,2010-12-09 01:06:40.010000+01:00,task-9034,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-20 08:38:19.981000+01:00 +Internet,case-4944,2011-03-17 01:06:40+01:00,General,2011-03-02 10:27:28.139000+01:00,2011-03-17 01:06:40.010000+01:00,,Resource02,2010-12-09 01:06:40.010000+01:00,task-9030,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-21 09:24:24.968000+01:00 +Internet,case-4944,2011-03-17 01:06:40+01:00,General,2011-03-02 10:27:28.139000+01:00,2011-03-17 01:06:40.010000+01:00,,Resource02,2010-12-09 01:06:40.010000+01:00,task-9193,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 12:20:40.484000+01:00 +Desk,case-4946,2011-02-04 01:06:40+01:00,General,2011-02-17 15:11:15.249000+01:00,2011-02-04 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-5580,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:19:04.351000+01:00 +Desk,case-4946,2011-02-04 01:06:40+01:00,General,2011-02-17 15:11:15.249000+01:00,2011-02-04 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-6362,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:19:39.338000+01:00 +Desk,case-4946,2011-02-04 01:06:40+01:00,General,2011-02-17 15:11:15.249000+01:00,2011-02-04 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-6364,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:19:30.644000+01:00 +Desk,case-4946,2011-02-04 01:06:40+01:00,General,2011-02-17 15:11:15.249000+01:00,2011-02-04 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-6392,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-31 11:43:06.997000+01:00 +Desk,case-4946,2011-02-04 01:06:40+01:00,General,2011-02-17 15:11:15.249000+01:00,2011-02-04 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-6363,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-11 15:57:57.437000+01:00 +Desk,case-4946,2011-02-04 01:06:40+01:00,General,2011-02-17 15:11:15.249000+01:00,2011-02-04 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-7789,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-11 16:06:35.978000+01:00 +Desk,case-4947,2011-02-10 01:06:40+01:00,General,2011-02-10 16:09:18.704000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-16 01:06:40.010000+01:00,task-5597,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 15:11:45.596000+01:00 +Desk,case-4947,2011-02-10 01:06:40+01:00,General,2011-02-10 16:09:18.704000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-16 01:06:40.010000+01:00,task-7457,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-10 15:12:08.048000+01:00 +Desk,case-4947,2011-02-10 01:06:40+01:00,General,2011-02-10 16:09:18.704000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-16 01:06:40.010000+01:00,task-7458,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-10 15:12:24.068000+01:00 +Desk,case-4947,2011-02-10 01:06:40+01:00,General,2011-02-10 16:09:18.704000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-16 01:06:40.010000+01:00,task-7456,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 15:13:10.742000+01:00 +Desk,case-4947,2011-02-10 01:06:40+01:00,General,2011-02-10 16:09:18.704000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-16 01:06:40.010000+01:00,task-7462,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-10 15:36:15.847000+01:00 +Desk,case-4947,2011-02-10 01:06:40+01:00,General,2011-02-10 16:09:18.704000+01:00,2011-02-10 01:06:40.010000+01:00,,Resource17,2010-12-16 01:06:40.010000+01:00,task-7490,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 11:38:07.480000+01:00 +Post,case-4954,2011-01-31 00:00:00+01:00,General,2011-02-01 20:59:36.460000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource17,2010-12-06 00:00:00.010000+01:00,task-5719,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 15:54:09.192000+01:00 +Post,case-4954,2011-01-31 00:00:00+01:00,General,2011-02-01 20:59:36.460000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource17,2010-12-06 00:00:00.010000+01:00,task-7327,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-07 15:54:38.491000+01:00 +Post,case-4954,2011-01-31 00:00:00+01:00,General,2011-02-01 20:59:36.460000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource17,2010-12-06 00:00:00.010000+01:00,task-7328,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-07 15:54:55.831000+01:00 +Post,case-4954,2011-01-31 00:00:00+01:00,General,2011-02-01 20:59:36.460000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource17,2010-12-06 00:00:00.010000+01:00,task-7330,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-07 15:55:12.717000+01:00 +Post,case-4954,2011-01-31 00:00:00+01:00,General,2011-02-01 20:59:36.460000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource17,2010-12-06 00:00:00.010000+01:00,task-7329,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-07 16:22:30.887000+01:00 +Post,case-4954,2011-01-31 00:00:00+01:00,General,2011-02-01 20:59:36.460000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource17,2010-12-06 00:00:00.010000+01:00,task-7342,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 11:41:24.562000+01:00 +Post,case-4955,2011-02-14 01:06:40+01:00,General,2011-02-11 08:39:09.903000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-5730,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 13:45:37.206000+01:00 +Post,case-4955,2011-02-14 01:06:40+01:00,General,2011-02-11 08:39:09.903000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-6358,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 13:46:11.494000+01:00 +Post,case-4955,2011-02-14 01:06:40+01:00,General,2011-02-11 08:39:09.903000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-6360,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:18:14.969000+01:00 +Post,case-4955,2011-02-14 01:06:40+01:00,General,2011-02-11 08:39:09.903000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-6391,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-31 11:42:36.327000+01:00 +Post,case-4955,2011-02-14 01:06:40+01:00,General,2011-02-11 08:39:09.903000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-6359,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-10 15:17:56.354000+01:00 +Post,case-4955,2011-02-14 01:06:40+01:00,General,2011-02-11 08:39:09.903000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource08,2010-12-06 01:06:40.010000+01:00,task-7469,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-10 15:40:01.059000+01:00 +Internet,case-4969,2011-02-18 01:06:40+01:00,General,2011-02-17 11:25:34.815000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-5816,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:34:56.858000+01:00 +Internet,case-4969,2011-02-18 01:06:40+01:00,General,2011-02-17 11:25:34.815000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-6366,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-01-13 15:48:45.500000+01:00 +Internet,case-4969,2011-02-18 01:06:40+01:00,General,2011-02-17 11:25:34.815000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-6367,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-13 15:51:06.212000+01:00 +Internet,case-4969,2011-02-18 01:06:40+01:00,General,2011-02-17 11:25:34.815000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-8209,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-13 15:51:32.019000+01:00 +Internet,case-4969,2011-02-18 01:06:40+01:00,General,2011-02-17 11:25:34.815000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-8205,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:33:27.908000+01:00 +Internet,case-4969,2011-02-18 01:06:40+01:00,General,2011-02-17 11:25:34.815000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource08,2010-12-10 01:06:40.010000+01:00,task-8244,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:36:13.350000+01:00 +Internet,case-4972,2011-02-21 00:00:00+01:00,General,2010-12-30 12:07:16.045000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-5838,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-28 16:52:10.618000+01:00 +Internet,case-4972,2011-02-21 00:00:00+01:00,General,2010-12-30 12:07:16.045000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-6109,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-28 16:52:31.705000+01:00 +Internet,case-4972,2011-02-21 00:00:00+01:00,General,2010-12-30 12:07:16.045000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-6110,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-28 16:53:21.828000+01:00 +Internet,case-4972,2011-02-21 00:00:00+01:00,General,2010-12-30 12:07:16.045000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-6108,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-30 08:59:32.164000+01:00 +Internet,case-4972,2011-02-21 00:00:00+01:00,General,2010-12-30 12:07:16.045000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-6253,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-30 09:37:15.629000+01:00 +Internet,case-4972,2011-02-21 00:00:00+01:00,General,2010-12-30 12:07:16.045000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-6271,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 09:37:28.595000+01:00 +Internet,case-4973,2011-02-21 00:00:00+01:00,General,2010-12-30 12:01:52.371000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-5839,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-28 16:23:37.616000+01:00 +Internet,case-4973,2011-02-21 00:00:00+01:00,General,2010-12-30 12:01:52.371000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-6097,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-28 16:23:56.714000+01:00 +Internet,case-4973,2011-02-21 00:00:00+01:00,General,2010-12-30 12:01:52.371000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-6098,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-28 16:24:13.731000+01:00 +Internet,case-4973,2011-02-21 00:00:00+01:00,General,2010-12-30 12:01:52.371000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-6096,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-30 09:04:50.621000+01:00 +Internet,case-4973,2011-02-21 00:00:00+01:00,General,2010-12-30 12:01:52.371000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-6257,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2010-12-30 10:31:48.154000+01:00 +Internet,case-4973,2011-02-21 00:00:00+01:00,General,2010-12-30 12:01:52.371000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource07,2010-12-27 00:00:00.010000+01:00,task-6293,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2010-12-30 10:32:04.094000+01:00 +Internet,case-4975,2011-04-28 01:06:40+02:00,General,2011-04-21 16:09:13.659000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource04,2010-12-10 01:06:40.010000+01:00,task-5846,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-03 10:31:34.480000+01:00 +Internet,case-4975,2011-04-28 01:06:40+02:00,General,2011-04-21 16:09:13.659000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource04,2010-12-10 01:06:40.010000+01:00,task-6490,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-03 10:32:13.490000+01:00 +Internet,case-4975,2011-04-28 01:06:40+02:00,General,2011-04-21 16:09:13.659000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource04,2010-12-10 01:06:40.010000+01:00,task-6491,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-03 11:07:11.735000+01:00 +Internet,case-4975,2011-04-28 01:06:40+02:00,General,2011-04-21 16:09:13.659000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource04,2010-12-10 01:06:40.010000+01:00,task-6500,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-03 11:07:26.033000+01:00 +Internet,case-4975,2011-04-28 01:06:40+02:00,General,2011-04-21 16:09:13.659000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource04,2010-12-10 01:06:40.010000+01:00,task-6492,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-03 12:00:57.185000+01:00 +Internet,case-4975,2011-04-28 01:06:40+02:00,General,2011-04-21 16:09:13.659000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource04,2010-12-10 01:06:40.010000+01:00,task-6550,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 11:48:13.916000+01:00 +Post,case-4976,2011-02-07 00:00:00+01:00,General,2011-02-03 12:17:25.080000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource11,2010-12-13 00:00:00.010000+01:00,task-5847,Confirmation of receipt,complete,EMPTY,Resource11,2010-12-28 08:58:59.254000+01:00 +Post,case-4976,2011-02-07 00:00:00+01:00,General,2011-02-03 12:17:25.080000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource11,2010-12-13 00:00:00.010000+01:00,task-5972,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2010-12-28 09:01:15.042000+01:00 +Post,case-4976,2011-02-07 00:00:00+01:00,General,2011-02-03 12:17:25.080000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource11,2010-12-13 00:00:00.010000+01:00,task-5975,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2010-12-28 09:01:33.415000+01:00 +Post,case-4976,2011-02-07 00:00:00+01:00,General,2011-02-03 12:17:25.080000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource11,2010-12-13 00:00:00.010000+01:00,task-5971,T02 Check confirmation of receipt,complete,Group 4,Resource10,2010-12-28 12:25:05.826000+01:00 +Post,case-4976,2011-02-07 00:00:00+01:00,General,2011-02-03 12:17:25.080000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource11,2010-12-13 00:00:00.010000+01:00,task-6044,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-28 12:25:19.053000+01:00 +Post,case-4976,2011-02-07 00:00:00+01:00,General,2011-02-03 12:17:25.080000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource11,2010-12-13 00:00:00.010000+01:00,task-6045,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2010-12-29 11:02:58.354000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-5858,Confirmation of receipt,complete,EMPTY,Resource12,2010-12-28 13:41:00.042000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6059,T02 Check confirmation of receipt,complete,Group 4,Resource12,2010-12-28 13:42:16.852000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6061,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2010-12-28 13:44:21.732000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6060,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 13:48:35.091000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6064,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-12-28 13:50:35.760000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6065,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 13:51:22.871000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6066,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-12-28 13:52:06.561000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6067,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 13:53:08.382000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6068,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-12-28 13:54:25.935000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6069,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 13:55:00.162000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6070,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2010-12-28 13:55:43.786000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6071,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2010-12-28 13:57:46.642000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6063,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-01-03 13:52:15.336000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6072,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-01-03 13:55:42.514000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6579,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-03 14:00:58.818000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6580,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-01-03 14:01:42.761000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6581,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-03 14:02:43.156000+01:00 +Desk,case-4978,2011-02-10 01:06:40+01:00,General,2011-10-26 11:26:41.868000+02:00,2011-02-10 01:06:40.010000+01:00,,Resource12,2010-12-16 01:06:40.010000+01:00,task-6582,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-03 14:03:13.971000+01:00 +Internet,case-4980,2011-02-07 01:06:40+01:00,General,2011-04-07 15:43:27.347000+02:00,2011-02-07 01:06:40.010000+01:00,,Resource09,2010-12-13 01:06:40.010000+01:00,task-5872,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-05 13:16:11.638000+01:00 +Internet,case-4980,2011-02-07 01:06:40+01:00,General,2011-04-07 15:43:27.347000+02:00,2011-02-07 01:06:40.010000+01:00,,Resource09,2010-12-13 01:06:40.010000+01:00,task-6870,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-05 13:17:19.396000+01:00 +Internet,case-4980,2011-02-07 01:06:40+01:00,General,2011-04-07 15:43:27.347000+02:00,2011-02-07 01:06:40.010000+01:00,,Resource09,2010-12-13 01:06:40.010000+01:00,task-6871,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-05 13:40:23.362000+01:00 +Internet,case-4980,2011-02-07 01:06:40+01:00,General,2011-04-07 15:43:27.347000+02:00,2011-02-07 01:06:40.010000+01:00,,Resource09,2010-12-13 01:06:40.010000+01:00,task-6869,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-13 12:59:26.562000+01:00 +Internet,case-4980,2011-02-07 01:06:40+01:00,General,2011-04-07 15:43:27.347000+02:00,2011-02-07 01:06:40.010000+01:00,,Resource09,2010-12-13 01:06:40.010000+01:00,task-8155,T04 Determine confirmation of receipt,complete,EMPTY,Resource09,2011-01-25 09:22:42.562000+01:00 +Internet,case-4980,2011-02-07 01:06:40+01:00,General,2011-04-07 15:43:27.347000+02:00,2011-02-07 01:06:40.010000+01:00,,Resource09,2010-12-13 01:06:40.010000+01:00,task-9417,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-01-25 09:23:19.236000+01:00 +Internet,case-4981,2011-02-07 00:00:00+01:00,General,2011-03-11 10:49:44.794000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource14,2010-12-13 00:00:00.010000+01:00,task-5876,Confirmation of receipt,complete,EMPTY,Resource14,2011-01-11 09:49:19.363000+01:00 +Internet,case-4981,2011-02-07 00:00:00+01:00,General,2011-03-11 10:49:44.794000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource14,2010-12-13 00:00:00.010000+01:00,task-7571,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-01-11 10:29:35.262000+01:00 +Internet,case-4981,2011-02-07 00:00:00+01:00,General,2011-03-11 10:49:44.794000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource14,2010-12-13 00:00:00.010000+01:00,task-7584,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-01-11 10:29:52.600000+01:00 +Internet,case-4981,2011-02-07 00:00:00+01:00,General,2011-03-11 10:49:44.794000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource14,2010-12-13 00:00:00.010000+01:00,task-7570,T02 Check confirmation of receipt,complete,EMPTY,Resource14,2011-01-11 10:31:20.626000+01:00 +Internet,case-4981,2011-02-07 00:00:00+01:00,General,2011-03-11 10:49:44.794000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource14,2010-12-13 00:00:00.010000+01:00,task-7588,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 10:48:54.789000+01:00 +Internet,case-4981,2011-02-07 00:00:00+01:00,General,2011-03-11 10:49:44.794000+01:00,2011-02-07 00:00:00.010000+01:00,,Resource14,2010-12-13 00:00:00.010000+01:00,task-7603,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 14:11:50.889000+01:00 +Internet,case-4986,2011-03-01 01:06:40+01:00,General,2011-02-23 14:25:50.802000+01:00,2011-03-01 01:06:40.010000+01:00,,Resource04,2010-12-14 01:06:40.010000+01:00,task-5919,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-03 10:36:13.845000+01:00 +Internet,case-4986,2011-03-01 01:06:40+01:00,General,2011-02-23 14:25:50.802000+01:00,2011-03-01 01:06:40.010000+01:00,,Resource04,2010-12-14 01:06:40.010000+01:00,task-6493,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-03 10:36:26.627000+01:00 +Internet,case-4986,2011-03-01 01:06:40+01:00,General,2011-02-23 14:25:50.802000+01:00,2011-03-01 01:06:40.010000+01:00,,Resource04,2010-12-14 01:06:40.010000+01:00,task-6494,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-03 12:56:44.341000+01:00 +Internet,case-4986,2011-03-01 01:06:40+01:00,General,2011-02-23 14:25:50.802000+01:00,2011-03-01 01:06:40.010000+01:00,,Resource04,2010-12-14 01:06:40.010000+01:00,task-6563,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-03 12:57:00.153000+01:00 +Internet,case-4986,2011-03-01 01:06:40+01:00,General,2011-02-23 14:25:50.802000+01:00,2011-03-01 01:06:40.010000+01:00,,Resource04,2010-12-14 01:06:40.010000+01:00,task-6495,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-03 12:57:05.714000+01:00 +Internet,case-4986,2011-03-01 01:06:40+01:00,General,2011-02-23 14:25:50.802000+01:00,2011-03-01 01:06:40.010000+01:00,,Resource04,2010-12-14 01:06:40.010000+01:00,task-6566,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 11:52:15.292000+01:00 +Desk,case-4995,2011-02-14 00:00:00+01:00,General,2011-03-02 16:51:39.087000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource14,2010-12-20 00:00:00.010000+01:00,task-5995,Confirmation of receipt,complete,EMPTY,Resource14,2011-01-11 11:04:08.708000+01:00 +Desk,case-4995,2011-02-14 00:00:00+01:00,General,2011-03-02 16:51:39.087000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource14,2010-12-20 00:00:00.010000+01:00,task-7609,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-01-11 11:06:49.696000+01:00 +Desk,case-4995,2011-02-14 00:00:00+01:00,General,2011-03-02 16:51:39.087000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource14,2010-12-20 00:00:00.010000+01:00,task-7610,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-01-11 11:07:05.230000+01:00 +Desk,case-4995,2011-02-14 00:00:00+01:00,General,2011-03-02 16:51:39.087000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource14,2010-12-20 00:00:00.010000+01:00,task-7608,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-11 12:16:03.586000+01:00 +Desk,case-4995,2011-02-14 00:00:00+01:00,General,2011-03-02 16:51:39.087000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource14,2010-12-20 00:00:00.010000+01:00,task-7666,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 12:16:13.822000+01:00 +Desk,case-4995,2011-02-14 00:00:00+01:00,General,2011-03-02 16:51:39.087000+01:00,2011-02-14 00:00:00.010000+01:00,,Resource14,2010-12-20 00:00:00.010000+01:00,task-7667,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:59:22.494000+01:00 +Internet,case-4997,2011-04-26 01:06:40+02:00,General,2011-04-20 15:20:40.063000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-5997,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-05 10:10:22.641000+01:00 +Internet,case-4997,2011-04-26 01:06:40+02:00,General,2011-04-20 15:20:40.063000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6808,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-05 10:17:46.929000+01:00 +Internet,case-4997,2011-04-26 01:06:40+02:00,General,2011-04-20 15:20:40.063000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6807,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-01-05 10:25:20.918000+01:00 +Internet,case-4997,2011-04-26 01:06:40+02:00,General,2011-04-20 15:20:40.063000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6811,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:33:24.735000+01:00 +Internet,case-4997,2011-04-26 01:06:40+02:00,General,2011-04-20 15:20:40.063000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6809,T08 Draft and send request for advice,complete,Group 1,Resource15,2011-01-06 08:33:16.134000+01:00 +Internet,case-4997,2011-04-26 01:06:40+02:00,General,2011-04-20 15:20:40.063000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6939,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource15,2011-01-06 08:33:32.413000+01:00 +Internet,case-4997,2011-04-26 01:06:40+02:00,General,2011-04-20 15:20:40.063000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6940,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-06 08:33:51.069000+01:00 +Internet,case-4997,2011-04-26 01:06:40+02:00,General,2011-04-20 15:20:40.063000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6941,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-06 08:34:09.099000+01:00 +Internet,case-4997,2011-04-26 01:06:40+02:00,General,2011-04-20 15:20:40.063000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6860,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 15:22:59.592000+01:00 +Post,case-4998,2011-02-22 01:06:40+01:00,General,2011-02-24 13:44:43.546000+01:00,2011-02-22 01:06:40.010000+01:00,,Resource17,2010-12-20 01:06:40.010000+01:00,task-5999,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-10 15:25:48.168000+01:00 +Post,case-4998,2011-02-22 01:06:40+01:00,General,2011-02-24 13:44:43.546000+01:00,2011-02-22 01:06:40.010000+01:00,,Resource17,2010-12-20 01:06:40.010000+01:00,task-7472,T02 Check confirmation of receipt,complete,Group 4,Resource17,2011-01-10 15:26:01.053000+01:00 +Post,case-4998,2011-02-22 01:06:40+01:00,General,2011-02-24 13:44:43.546000+01:00,2011-02-22 01:06:40.010000+01:00,,Resource17,2010-12-20 01:06:40.010000+01:00,task-7473,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-10 15:26:18.630000+01:00 +Post,case-4998,2011-02-22 01:06:40+01:00,General,2011-02-24 13:44:43.546000+01:00,2011-02-22 01:06:40.010000+01:00,,Resource17,2010-12-20 01:06:40.010000+01:00,task-7475,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-10 15:26:34.907000+01:00 +Post,case-4998,2011-02-22 01:06:40+01:00,General,2011-02-24 13:44:43.546000+01:00,2011-02-22 01:06:40.010000+01:00,,Resource17,2010-12-20 01:06:40.010000+01:00,task-7474,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-10 15:42:28.937000+01:00 +Post,case-4998,2011-02-22 01:06:40+01:00,General,2011-02-24 13:44:43.546000+01:00,2011-02-22 01:06:40.010000+01:00,,Resource17,2010-12-20 01:06:40.010000+01:00,task-7498,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:21:00.919000+01:00 +Post,case-4999,2011-02-14 01:06:40+01:00,General,2011-01-27 10:50:30.276000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource07,2010-12-20 01:06:40.010000+01:00,task-6005,Confirmation of receipt,complete,EMPTY,Resource07,2010-12-30 11:06:21.508000+01:00 +Post,case-4999,2011-02-14 01:06:40+01:00,General,2011-01-27 10:50:30.276000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource07,2010-12-20 01:06:40.010000+01:00,task-6305,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2010-12-30 11:08:05.623000+01:00 +Post,case-4999,2011-02-14 01:06:40+01:00,General,2011-01-27 10:50:30.276000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource07,2010-12-20 01:06:40.010000+01:00,task-6304,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2010-12-30 11:10:03.881000+01:00 +Post,case-4999,2011-02-14 01:06:40+01:00,General,2011-01-27 10:50:30.276000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource07,2010-12-20 01:06:40.010000+01:00,task-6306,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2010-12-30 11:20:02.359000+01:00 +Post,case-4999,2011-02-14 01:06:40+01:00,General,2011-01-27 10:50:30.276000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource07,2010-12-20 01:06:40.010000+01:00,task-6309,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2010-12-30 11:22:30.793000+01:00 +Post,case-4999,2011-02-14 01:06:40+01:00,General,2011-01-27 10:50:30.276000+01:00,2011-02-14 01:06:40.010000+01:00,,Resource07,2010-12-20 01:06:40.010000+01:00,task-6321,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-03 16:30:26.236000+01:00 +Internet,case-5000,2011-04-06 01:06:40+02:00,General,2011-03-25 16:33:11.436000+01:00,2011-04-06 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6012,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-05 09:06:38.252000+01:00 +Internet,case-5000,2011-04-06 01:06:40+02:00,General,2011-03-25 16:33:11.436000+01:00,2011-04-06 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6777,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-05 09:13:42.787000+01:00 +Internet,case-5000,2011-04-06 01:06:40+02:00,General,2011-03-25 16:33:11.436000+01:00,2011-04-06 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6780,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-05 09:13:59.063000+01:00 +Internet,case-5000,2011-04-06 01:06:40+02:00,General,2011-03-25 16:33:11.436000+01:00,2011-04-06 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6776,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-05 09:31:51.052000+01:00 +Internet,case-5000,2011-04-06 01:06:40+02:00,General,2011-03-25 16:33:11.436000+01:00,2011-04-06 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6794,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 09:32:05.934000+01:00 +Internet,case-5000,2011-04-06 01:06:40+02:00,General,2011-03-25 16:33:11.436000+01:00,2011-04-06 01:06:40.020000+02:00,,Resource15,2010-12-15 01:06:40.010000+01:00,task-6795,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 12:18:31.862000+01:00 +Internet,case-5002,2011-02-16 00:00:00+01:00,General,2011-01-19 10:10:45.508000+01:00,2011-02-16 00:00:00.010000+01:00,,Resource26,2010-12-14 00:00:00.010000+01:00,task-6017,Confirmation of receipt,complete,EMPTY,admin2,2011-01-19 10:10:46.594000+01:00 +Internet,case-5010,2011-02-09 00:00:00+01:00,General,2011-01-20 00:00:00.010000+01:00,2011-02-09 00:00:00.010000+01:00,,Resource08,2010-12-15 00:00:00.010000+01:00,task-6077,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:39:11.950000+01:00 +Internet,case-5010,2011-02-09 00:00:00+01:00,General,2011-01-20 00:00:00.010000+01:00,2011-02-09 00:00:00.010000+01:00,,Resource08,2010-12-15 00:00:00.010000+01:00,task-6368,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:39:51.140000+01:00 +Internet,case-5010,2011-02-09 00:00:00+01:00,General,2011-01-20 00:00:00.010000+01:00,2011-02-09 00:00:00.010000+01:00,,Resource08,2010-12-15 00:00:00.010000+01:00,task-6370,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:16:52.406000+01:00 +Internet,case-5010,2011-02-09 00:00:00+01:00,General,2011-01-20 00:00:00.010000+01:00,2011-02-09 00:00:00.010000+01:00,,Resource08,2010-12-15 00:00:00.010000+01:00,task-6390,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-31 11:32:16.370000+01:00 +Internet,case-5010,2011-02-09 00:00:00+01:00,General,2011-01-20 00:00:00.010000+01:00,2011-02-09 00:00:00.010000+01:00,,Resource08,2010-12-15 00:00:00.010000+01:00,task-6369,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-13 16:07:36.422000+01:00 +Internet,case-5010,2011-02-09 00:00:00+01:00,General,2011-01-20 00:00:00.010000+01:00,2011-02-09 00:00:00.010000+01:00,,Resource08,2010-12-15 00:00:00.010000+01:00,task-8217,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-13 16:13:14.209000+01:00 +Internet,case-5011,2011-04-21 01:06:40+02:00,General,2011-04-20 12:10:05.125000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource08,2010-12-16 01:06:40.010000+01:00,task-6085,Confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:49:18.954000+01:00 +Internet,case-5011,2011-04-21 01:06:40+02:00,General,2011-04-20 12:10:05.125000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource08,2010-12-16 01:06:40.010000+01:00,task-6371,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2010-12-30 14:49:58.782000+01:00 +Internet,case-5011,2011-04-21 01:06:40+02:00,General,2011-04-20 12:10:05.125000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource08,2010-12-16 01:06:40.010000+01:00,task-6373,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2010-12-31 09:20:50.538000+01:00 +Internet,case-5011,2011-04-21 01:06:40+02:00,General,2011-04-20 12:10:05.125000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource08,2010-12-16 01:06:40.010000+01:00,task-6393,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2010-12-31 11:42:49.311000+01:00 +Internet,case-5011,2011-04-21 01:06:40+02:00,General,2011-04-20 12:10:05.125000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource08,2010-12-16 01:06:40.010000+01:00,task-6372,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-14 09:01:49.572000+01:00 +Internet,case-5011,2011-04-21 01:06:40+02:00,General,2011-04-20 12:10:05.125000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource08,2010-12-16 01:06:40.010000+01:00,task-8298,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-14 09:02:22.983000+01:00 +Internet,case-5014,2011-03-10 01:06:40+01:00,General,2011-03-10 10:23:39.974000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource15,2010-12-16 01:06:40.010000+01:00,task-6092,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-05 09:48:40.762000+01:00 +Internet,case-5014,2011-03-10 01:06:40+01:00,General,2011-03-10 10:23:39.974000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource15,2010-12-16 01:06:40.010000+01:00,task-6801,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-01-10 09:42:21.463000+01:00 +Internet,case-5014,2011-03-10 01:06:40+01:00,General,2011-03-10 10:23:39.974000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource15,2010-12-16 01:06:40.010000+01:00,task-6802,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-10 09:44:54.890000+01:00 +Internet,case-5014,2011-03-10 01:06:40+01:00,General,2011-03-10 10:23:39.974000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource15,2010-12-16 01:06:40.010000+01:00,task-7375,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-10 09:45:17.156000+01:00 +Internet,case-5014,2011-03-10 01:06:40+01:00,General,2011-03-10 10:23:39.974000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource15,2010-12-16 01:06:40.010000+01:00,task-7374,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-10 11:48:40.187000+01:00 +Internet,case-5014,2011-03-10 01:06:40+01:00,General,2011-03-10 10:23:39.974000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource15,2010-12-16 01:06:40.010000+01:00,task-7410,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:30:46.933000+01:00 +Internet,case-5021,2011-03-10 01:06:40+01:00,General,2011-03-08 12:13:10.584000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource04,2010-12-16 01:06:40.010000+01:00,task-6138,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-07 14:42:49.358000+01:00 +Internet,case-5021,2011-03-10 01:06:40+01:00,General,2011-03-08 12:13:10.584000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource04,2010-12-16 01:06:40.010000+01:00,task-7271,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-07 14:43:02.116000+01:00 +Internet,case-5021,2011-03-10 01:06:40+01:00,General,2011-03-08 12:13:10.584000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource04,2010-12-16 01:06:40.010000+01:00,task-7273,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-07 14:43:12.423000+01:00 +Internet,case-5021,2011-03-10 01:06:40+01:00,General,2011-03-08 12:13:10.584000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource04,2010-12-16 01:06:40.010000+01:00,task-7274,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-07 15:25:03.384000+01:00 +Internet,case-5021,2011-03-10 01:06:40+01:00,General,2011-03-08 12:13:10.584000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource04,2010-12-16 01:06:40.010000+01:00,task-7275,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-07 15:25:59.426000+01:00 +Internet,case-5021,2011-03-10 01:06:40+01:00,General,2011-03-08 12:13:10.584000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource04,2010-12-16 01:06:40.010000+01:00,task-7309,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 15:48:40.718000+01:00 +Internet,case-5024,2011-02-08 00:00:00+01:00,General,2011-01-20 15:42:14.981000+01:00,2011-02-08 00:00:00.010000+01:00,,Resource11,2010-12-14 00:00:00.010000+01:00,task-6189,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 10:41:13.343000+01:00 +Internet,case-5024,2011-02-08 00:00:00+01:00,General,2011-01-20 15:42:14.981000+01:00,2011-02-08 00:00:00.010000+01:00,,Resource11,2010-12-14 00:00:00.010000+01:00,task-6666,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:02:31.403000+01:00 +Internet,case-5024,2011-02-08 00:00:00+01:00,General,2011-01-20 15:42:14.981000+01:00,2011-02-08 00:00:00.010000+01:00,,Resource11,2010-12-14 00:00:00.010000+01:00,task-6667,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-06 11:34:46.345000+01:00 +Internet,case-5024,2011-02-08 00:00:00+01:00,General,2011-01-20 15:42:14.981000+01:00,2011-02-08 00:00:00.010000+01:00,,Resource11,2010-12-14 00:00:00.010000+01:00,task-6815,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-07 10:04:20.198000+01:00 +Internet,case-5024,2011-02-08 00:00:00+01:00,General,2011-01-20 15:42:14.981000+01:00,2011-02-08 00:00:00.010000+01:00,,Resource11,2010-12-14 00:00:00.010000+01:00,task-7200,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-07 13:31:13.435000+01:00 +Internet,case-5024,2011-02-08 00:00:00+01:00,General,2011-01-20 15:42:14.981000+01:00,2011-02-08 00:00:00.010000+01:00,,Resource11,2010-12-14 00:00:00.010000+01:00,task-7025,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-01-12 08:31:51.362000+01:00 +Internet,case-5036,2011-02-16 01:06:40+01:00,General,2011-02-11 16:37:55.743000+01:00,2011-02-16 01:06:40.010000+01:00,,Resource02,2010-12-15 01:06:40.010000+01:00,task-6312,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 10:23:04.049000+01:00 +Internet,case-5036,2011-02-16 01:06:40+01:00,General,2011-02-11 16:37:55.743000+01:00,2011-02-16 01:06:40.010000+01:00,,Resource02,2010-12-15 01:06:40.010000+01:00,task-8036,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-01-13 10:23:53.689000+01:00 +Internet,case-5036,2011-02-16 01:06:40+01:00,General,2011-02-11 16:37:55.743000+01:00,2011-02-16 01:06:40.010000+01:00,,Resource02,2010-12-15 01:06:40.010000+01:00,task-8037,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-13 10:56:43.766000+01:00 +Internet,case-5036,2011-02-16 01:06:40+01:00,General,2011-02-11 16:37:55.743000+01:00,2011-02-16 01:06:40.010000+01:00,,Resource02,2010-12-15 01:06:40.010000+01:00,task-8058,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-13 10:57:02.562000+01:00 +Internet,case-5036,2011-02-16 01:06:40+01:00,General,2011-02-11 16:37:55.743000+01:00,2011-02-16 01:06:40.010000+01:00,,Resource02,2010-12-15 01:06:40.010000+01:00,task-8038,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 11:06:13.687000+01:00 +Internet,case-5036,2011-02-16 01:06:40+01:00,General,2011-02-11 16:37:55.743000+01:00,2011-02-16 01:06:40.010000+01:00,,Resource02,2010-12-15 01:06:40.010000+01:00,task-8069,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:39:28.814000+01:00 +Internet,case-5037,2011-02-24 00:00:00+01:00,General,2011-01-13 12:28:26.950000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource07,2010-12-30 00:00:00.010000+01:00,task-6334,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:37:29.489000+01:00 +Internet,case-5037,2011-02-24 00:00:00+01:00,General,2011-01-13 12:28:26.950000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource07,2010-12-30 00:00:00.010000+01:00,task-6735,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:09:05.023000+01:00 +Internet,case-5037,2011-02-24 00:00:00+01:00,General,2011-01-13 12:28:26.950000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource07,2010-12-30 00:00:00.010000+01:00,task-6821,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:38:04.778000+01:00 +Internet,case-5037,2011-02-24 00:00:00+01:00,General,2011-01-13 12:28:26.950000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource07,2010-12-30 00:00:00.010000+01:00,task-6864,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-06 12:29:36.525000+01:00 +Internet,case-5037,2011-02-24 00:00:00+01:00,General,2011-01-13 12:28:26.950000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource07,2010-12-30 00:00:00.010000+01:00,task-6736,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-06 12:30:01.742000+01:00 +Internet,case-5037,2011-02-24 00:00:00+01:00,General,2011-01-13 12:28:26.950000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource07,2010-12-30 00:00:00.010000+01:00,task-7067,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-06 12:33:51.324000+01:00 +Internet,case-5039,2011-02-10 00:00:00+01:00,General,2011-02-01 08:57:30.509000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6343,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:55:20.668000+01:00 +Internet,case-5039,2011-02-10 00:00:00+01:00,General,2011-02-01 08:57:30.509000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6754,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:10:15.620000+01:00 +Internet,case-5039,2011-02-10 00:00:00+01:00,General,2011-02-01 08:57:30.509000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6822,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:35:45.348000+01:00 +Internet,case-5039,2011-02-10 00:00:00+01:00,General,2011-02-01 08:57:30.509000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6862,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-06 10:54:04.863000+01:00 +Internet,case-5039,2011-02-10 00:00:00+01:00,General,2011-02-01 08:57:30.509000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6755,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-02-01 08:57:31.646000+01:00 +Internet,case-5040,2011-02-10 00:00:00+01:00,General,2011-02-03 13:07:56.840000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6354,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:56:50.730000+01:00 +Internet,case-5040,2011-02-10 00:00:00+01:00,General,2011-02-03 13:07:56.840000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6756,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:11:35.465000+01:00 +Internet,case-5040,2011-02-10 00:00:00+01:00,General,2011-02-03 13:07:56.840000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6823,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:38:55.193000+01:00 +Internet,case-5040,2011-02-10 00:00:00+01:00,General,2011-02-03 13:07:56.840000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6865,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-06 10:17:11.945000+01:00 +Internet,case-5040,2011-02-10 00:00:00+01:00,General,2011-02-03 13:07:56.840000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6757,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-06 10:17:28.682000+01:00 +Internet,case-5040,2011-02-10 00:00:00+01:00,General,2011-02-03 13:07:56.840000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource07,2010-12-16 00:00:00.010000+01:00,task-6963,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-06 11:01:13.253000+01:00 +Internet,case-5041,2011-02-10 00:00:00+01:00,General,2011-01-11 10:22:10.369000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource05,2010-12-16 00:00:00.010000+01:00,task-6357,Confirmation of receipt,complete,EMPTY,admin2,2011-01-11 10:22:11.419000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-6365,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 12:18:48.641000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8127,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-13 12:19:49.949000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8129,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 12:24:35.501000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8128,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-13 12:27:27.358000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8136,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource41,2011-01-17 14:44:31.552000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8135,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:43:42.315000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8673,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 10:41:00.512000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8769,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource02,2011-01-18 10:46:37.453000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8772,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 10:47:07.678000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8773,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource02,2011-01-18 10:48:04.717000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8774,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-18 10:53:05.790000+01:00 +Internet,case-5042,2011-03-15 01:06:40+01:00,General,2011-03-15 16:32:41.443000+01:00,2011-03-15 01:06:40.010000+01:00,,Resource02,2010-12-07 01:06:40.010000+01:00,task-8775,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-18 11:04:49.352000+01:00 +Internet,case-5043,2011-02-11 00:00:00+01:00,General,2011-02-04 11:55:21.184000+01:00,2011-02-11 00:00:00.010000+01:00,,Resource07,2010-12-17 00:00:00.010000+01:00,task-6374,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:58:10.831000+01:00 +Internet,case-5043,2011-02-11 00:00:00+01:00,General,2011-02-04 11:55:21.184000+01:00,2011-02-11 00:00:00.010000+01:00,,Resource07,2010-12-17 00:00:00.010000+01:00,task-6758,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:12:44.191000+01:00 +Internet,case-5043,2011-02-11 00:00:00+01:00,General,2011-02-04 11:55:21.184000+01:00,2011-02-11 00:00:00.010000+01:00,,Resource07,2010-12-17 00:00:00.010000+01:00,task-6826,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-01-05 11:13:04.736000+01:00 +Internet,case-5043,2011-02-11 00:00:00+01:00,General,2011-02-04 11:55:21.184000+01:00,2011-02-11 00:00:00.010000+01:00,,Resource07,2010-12-17 00:00:00.010000+01:00,task-6827,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2011-01-05 11:36:31.255000+01:00 +Internet,case-5043,2011-02-11 00:00:00+01:00,General,2011-02-04 11:55:21.184000+01:00,2011-02-11 00:00:00.010000+01:00,,Resource07,2010-12-17 00:00:00.010000+01:00,task-6759,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-01-05 11:39:00.880000+01:00 +Internet,case-5043,2011-02-11 00:00:00+01:00,General,2011-02-04 11:55:21.184000+01:00,2011-02-11 00:00:00.010000+01:00,,Resource07,2010-12-17 00:00:00.010000+01:00,task-6841,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-01-05 11:39:27.077000+01:00 +Internet,case-5044,2011-06-10 01:06:40+02:00,General,2011-06-07 11:13:01.358000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource02,2010-12-17 01:06:40.010000+01:00,task-6375,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-11 10:41:14.829000+01:00 +Internet,case-5044,2011-06-10 01:06:40+02:00,General,2011-06-07 11:13:01.358000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource02,2010-12-17 01:06:40.010000+01:00,task-7593,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-11 10:42:13.291000+01:00 +Internet,case-5044,2011-06-10 01:06:40+02:00,General,2011-06-07 11:13:01.358000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource02,2010-12-17 01:06:40.010000+01:00,task-7594,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-11 10:44:42.991000+01:00 +Internet,case-5044,2011-06-10 01:06:40+02:00,General,2011-06-07 11:13:01.358000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource02,2010-12-17 01:06:40.010000+01:00,task-7596,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-01-11 10:45:40.010000+01:00 +Internet,case-5044,2011-06-10 01:06:40+02:00,General,2011-06-07 11:13:01.358000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource02,2010-12-17 01:06:40.010000+01:00,task-7597,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-11 10:46:02.018000+01:00 +Internet,case-5044,2011-06-10 01:06:40+02:00,General,2011-06-07 11:13:01.358000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource02,2010-12-17 01:06:40.010000+01:00,task-7598,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-11 10:46:37.624000+01:00 +Internet,case-5044,2011-06-10 01:06:40+02:00,General,2011-06-07 11:13:01.358000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource02,2010-12-17 01:06:40.010000+01:00,task-7595,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 10:54:13.503000+01:00 +Internet,case-5044,2011-06-10 01:06:40+02:00,General,2011-06-07 11:13:01.358000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource02,2010-12-17 01:06:40.010000+01:00,task-7607,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 14:16:05.601000+01:00 +Internet,case-5045,2011-02-11 01:06:40+01:00,General,2011-01-20 13:13:35.461000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource11,2010-12-17 01:06:40.010000+01:00,task-6377,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-03 11:58:10.679000+01:00 +Internet,case-5045,2011-02-11 01:06:40+01:00,General,2011-01-20 13:13:35.461000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource11,2010-12-17 01:06:40.010000+01:00,task-6543,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-03 11:59:18.291000+01:00 +Internet,case-5045,2011-02-11 01:06:40+01:00,General,2011-01-20 13:13:35.461000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource11,2010-12-17 01:06:40.010000+01:00,task-6544,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-03 11:59:37.887000+01:00 +Internet,case-5045,2011-02-11 01:06:40+01:00,General,2011-01-20 13:13:35.461000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource11,2010-12-17 01:06:40.010000+01:00,task-6542,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-03 16:08:49.361000+01:00 +Internet,case-5045,2011-02-11 01:06:40+01:00,General,2011-01-20 13:13:35.461000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource11,2010-12-17 01:06:40.010000+01:00,task-6611,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-04 08:41:17.509000+01:00 +Internet,case-5045,2011-02-11 01:06:40+01:00,General,2011-01-20 13:13:35.461000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource11,2010-12-17 01:06:40.010000+01:00,task-6640,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-04 16:48:30.524000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-6382,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-05 13:50:03.479000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-6885,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-05 13:51:29.400000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-6886,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource25,2011-01-07 14:06:04.017000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-7262,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-11 14:17:48.704000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-7718,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource09,2011-01-11 14:18:59.524000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-6884,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-13 10:25:57.769000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-8040,T04 Determine confirmation of receipt,complete,Group 3,Resource24,2011-01-13 10:26:30.641000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-7723,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-17 10:59:36.797000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-8554,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource09,2011-01-17 11:00:11.396000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-8556,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-17 11:00:37.651000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-8557,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-17 12:17:15.543000+01:00 +Internet,case-5046,2011-02-11 01:06:40+01:00,General,2011-02-10 14:04:38.006000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-8041,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:38:16.529000+01:00 +Internet,case-5091,2011-02-15 00:00:00+01:00,General,2011-01-20 09:41:09.024000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6540,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:33:32.666000+01:00 +Internet,case-5091,2011-02-15 00:00:00+01:00,General,2011-01-20 09:41:09.024000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6731,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:06:08.165000+01:00 +Internet,case-5091,2011-02-15 00:00:00+01:00,General,2011-01-20 09:41:09.024000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6818,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:34:26.824000+01:00 +Internet,case-5091,2011-02-15 00:00:00+01:00,General,2011-01-20 09:41:09.024000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6861,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-06 10:21:14.403000+01:00 +Internet,case-5091,2011-02-15 00:00:00+01:00,General,2011-01-20 09:41:09.024000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6732,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-06 10:21:29.090000+01:00 +Internet,case-5091,2011-02-15 00:00:00+01:00,General,2011-01-20 09:41:09.024000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6965,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-06 11:30:17.980000+01:00 +Internet,case-5099,2011-02-15 00:00:00+01:00,General,2011-01-13 12:40:33.053000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6577,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-04 16:35:23.458000+01:00 +Internet,case-5099,2011-02-15 00:00:00+01:00,General,2011-01-13 12:40:33.053000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6733,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-05 11:03:56.397000+01:00 +Internet,case-5099,2011-02-15 00:00:00+01:00,General,2011-01-13 12:40:33.053000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6817,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-05 12:36:39.061000+01:00 +Internet,case-5099,2011-02-15 00:00:00+01:00,General,2011-01-13 12:40:33.053000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6863,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-06 10:20:02.390000+01:00 +Internet,case-5099,2011-02-15 00:00:00+01:00,General,2011-01-13 12:40:33.053000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6734,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-06 12:17:19.977000+01:00 +Internet,case-5099,2011-02-15 00:00:00+01:00,General,2011-01-13 12:40:33.053000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-7040,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-06 12:17:40.020000+01:00 +Internet,case-5101,2011-02-15 00:00:00+01:00,General,2011-01-27 10:29:27.194000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6605,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-06 10:37:39.773000+01:00 +Internet,case-5101,2011-02-15 00:00:00+01:00,General,2011-01-27 10:29:27.194000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6969,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-01-06 11:59:25.872000+01:00 +Internet,case-5101,2011-02-15 00:00:00+01:00,General,2011-01-27 10:29:27.194000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-6970,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-06 12:00:30.307000+01:00 +Internet,case-5101,2011-02-15 00:00:00+01:00,General,2011-01-27 10:29:27.194000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-7032,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-06 12:24:59.849000+01:00 +Internet,case-5101,2011-02-15 00:00:00+01:00,General,2011-01-27 10:29:27.194000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-7031,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-07 11:21:38.240000+01:00 +Internet,case-5101,2011-02-15 00:00:00+01:00,General,2011-01-27 10:29:27.194000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource07,2010-12-21 00:00:00.010000+01:00,task-7218,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-07 14:55:41.914000+01:00 +Internet,case-5102,2011-02-15 00:00:00+01:00,Customer contact,2011-01-05 09:28:07.195000+01:00,2011-02-15 00:00:00.010000+01:00,,admin3,2010-12-21 00:00:00.010000+01:00,task-6606,Confirmation of receipt,complete,EMPTY,admin2,2011-01-05 09:28:07.911000+01:00 +Internet,case-5109,2011-02-20 01:06:40+01:00,General,2011-02-03 13:18:21.261000+01:00,2011-02-20 01:06:40.010000+01:00,,Resource01,2010-12-26 01:06:40.010000+01:00,task-6641,Confirmation of receipt,complete,EMPTY,Resource01,2011-01-06 10:49:52.689000+01:00 +Internet,case-5109,2011-02-20 01:06:40+01:00,General,2011-02-03 13:18:21.261000+01:00,2011-02-20 01:06:40.010000+01:00,,Resource01,2010-12-26 01:06:40.010000+01:00,task-6971,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-01-06 10:50:38.615000+01:00 +Internet,case-5109,2011-02-20 01:06:40+01:00,General,2011-02-03 13:18:21.261000+01:00,2011-02-20 01:06:40.010000+01:00,,Resource01,2010-12-26 01:06:40.010000+01:00,task-6972,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-06 10:51:57.478000+01:00 +Internet,case-5109,2011-02-20 01:06:40+01:00,General,2011-02-03 13:18:21.261000+01:00,2011-02-20 01:06:40.010000+01:00,,Resource01,2010-12-26 01:06:40.010000+01:00,task-6974,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-06 10:53:43.485000+01:00 +Internet,case-5109,2011-02-20 01:06:40+01:00,General,2011-02-03 13:18:21.261000+01:00,2011-02-20 01:06:40.010000+01:00,,Resource01,2010-12-26 01:06:40.010000+01:00,task-6973,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-07 10:26:10.339000+01:00 +Internet,case-5109,2011-02-20 01:06:40+01:00,General,2011-02-03 13:18:21.261000+01:00,2011-02-20 01:06:40.010000+01:00,,Resource01,2010-12-26 01:06:40.010000+01:00,task-7207,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-07 15:04:37.202000+01:00 +Desk,case-5113,2011-02-15 00:00:00+01:00,General,2011-02-11 13:12:36.819000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource17,2010-12-21 00:00:00.010000+01:00,task-6681,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-20 18:14:09.459000+01:00 +Desk,case-5113,2011-02-15 00:00:00+01:00,General,2011-02-11 13:12:36.819000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource17,2010-12-21 00:00:00.010000+01:00,task-9127,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-20 18:15:16.077000+01:00 +Desk,case-5113,2011-02-15 00:00:00+01:00,General,2011-02-11 13:12:36.819000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource17,2010-12-21 00:00:00.010000+01:00,task-9128,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-20 18:15:29.480000+01:00 +Desk,case-5113,2011-02-15 00:00:00+01:00,General,2011-02-11 13:12:36.819000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource17,2010-12-21 00:00:00.010000+01:00,task-9130,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-20 18:15:55.081000+01:00 +Desk,case-5113,2011-02-15 00:00:00+01:00,General,2011-02-11 13:12:36.819000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource17,2010-12-21 00:00:00.010000+01:00,task-9129,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-21 09:05:42.549000+01:00 +Desk,case-5113,2011-02-15 00:00:00+01:00,General,2011-02-11 13:12:36.819000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource17,2010-12-21 00:00:00.010000+01:00,task-9172,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 12:08:25.996000+01:00 +Post,case-5115,2011-02-17 00:00:00+01:00,General,2011-02-24 13:42:20.236000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource18,2010-12-23 00:00:00.010000+01:00,task-6684,Confirmation of receipt,complete,EMPTY,Resource18,2011-01-06 10:16:58.972000+01:00 +Post,case-5115,2011-02-17 00:00:00+01:00,General,2011-02-24 13:42:20.236000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource18,2010-12-23 00:00:00.010000+01:00,task-6961,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-01-11 11:14:52.864000+01:00 +Post,case-5115,2011-02-17 00:00:00+01:00,General,2011-02-24 13:42:20.236000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource18,2010-12-23 00:00:00.010000+01:00,task-7623,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 11:54:53.574000+01:00 +Post,case-5115,2011-02-17 00:00:00+01:00,General,2011-02-24 13:42:20.236000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource18,2010-12-23 00:00:00.010000+01:00,task-7660,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 14:07:34.908000+01:00 +Post,case-5115,2011-02-17 00:00:00+01:00,General,2011-02-24 13:42:20.236000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource18,2010-12-23 00:00:00.010000+01:00,task-6962,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-12 10:56:15.145000+01:00 +Post,case-5115,2011-02-17 00:00:00+01:00,General,2011-02-24 13:42:20.236000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource18,2010-12-23 00:00:00.010000+01:00,task-7865,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-12 10:56:29.555000+01:00 +Post,case-5116,2011-02-17 00:00:00+01:00,General,2011-01-26 08:24:35.551000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource07,2010-12-23 00:00:00.010000+01:00,task-6701,Confirmation of receipt,complete,EMPTY,admin2,2011-01-26 08:24:39.677000+01:00 +Post,case-5120,2011-02-16 00:00:00+01:00,General,2011-02-08 10:13:36.786000+01:00,2011-02-16 00:00:00.010000+01:00,,Resource02,2010-12-22 00:00:00.010000+01:00,task-6723,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-14 15:36:32.573000+01:00 +Post,case-5120,2011-02-16 00:00:00+01:00,General,2011-02-08 10:13:36.786000+01:00,2011-02-16 00:00:00.010000+01:00,,Resource02,2010-12-22 00:00:00.010000+01:00,task-8444,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-17 12:38:13.316000+01:00 +Post,case-5120,2011-02-16 00:00:00+01:00,General,2011-02-08 10:13:36.786000+01:00,2011-02-16 00:00:00.010000+01:00,,Resource02,2010-12-22 00:00:00.010000+01:00,task-8603,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 14:54:45.337000+01:00 +Post,case-5120,2011-02-16 00:00:00+01:00,General,2011-02-08 10:13:36.786000+01:00,2011-02-16 00:00:00.010000+01:00,,Resource02,2010-12-22 00:00:00.010000+01:00,task-8965,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:20:09.442000+01:00 +Post,case-5120,2011-02-16 00:00:00+01:00,General,2011-02-08 10:13:36.786000+01:00,2011-02-16 00:00:00.010000+01:00,,Resource02,2010-12-22 00:00:00.010000+01:00,task-8445,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-25 16:55:54.784000+01:00 +Post,case-5120,2011-02-16 00:00:00+01:00,General,2011-02-08 10:13:36.786000+01:00,2011-02-16 00:00:00.010000+01:00,,Resource02,2010-12-22 00:00:00.010000+01:00,task-9541,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-25 16:56:12.975000+01:00 +Internet,case-5121,2011-07-05 01:06:40+02:00,General,2011-07-06 15:23:31.924000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource04,2011-01-04 01:06:40.010000+01:00,task-6724,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-26 08:44:55.483000+01:00 +Internet,case-5121,2011-07-05 01:06:40+02:00,General,2011-07-06 15:23:31.924000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource04,2011-01-04 01:06:40.010000+01:00,task-9576,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-26 08:45:12.394000+01:00 +Internet,case-5121,2011-07-05 01:06:40+02:00,General,2011-07-06 15:23:31.924000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource04,2011-01-04 01:06:40.010000+01:00,task-9578,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-27 10:19:14.099000+01:00 +Internet,case-5121,2011-07-05 01:06:40+02:00,General,2011-07-06 15:23:31.924000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource04,2011-01-04 01:06:40.010000+01:00,task-9749,T05 Print and send confirmation of receipt,complete,EMPTY,Resource04,2011-01-27 15:39:29.408000+01:00 +Internet,case-5121,2011-07-05 01:06:40+02:00,General,2011-07-06 15:23:31.924000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource04,2011-01-04 01:06:40.010000+01:00,task-9577,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-02-01 16:18:11.423000+01:00 +Internet,case-5121,2011-07-05 01:06:40+02:00,General,2011-07-06 15:23:31.924000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource04,2011-01-04 01:06:40.010000+01:00,task-10468,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-02-01 16:18:25.318000+01:00 +Post,case-5122,2011-02-21 01:06:40+01:00,General,2011-02-08 14:04:03.360000+01:00,2011-02-21 01:06:40.010000+01:00,,Resource09,2010-12-27 01:06:40.010000+01:00,task-6729,Confirmation of receipt,complete,EMPTY,admin2,2011-02-08 14:04:04.616000+01:00 +Post,case-5132,2011-02-21 00:00:00+01:00,General,2011-02-08 13:54:54.571000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource09,2010-12-27 00:00:00.010000+01:00,task-6770,Confirmation of receipt,complete,EMPTY,admin2,2011-02-08 13:54:55.354000+01:00 +Post,case-5133,2011-02-22 00:00:00+01:00,General,2011-02-18 14:46:47.461000+01:00,2011-02-22 00:00:00.010000+01:00,,Resource08,2010-12-28 00:00:00.010000+01:00,task-6774,Confirmation of receipt,complete,EMPTY,Resource08,2011-01-18 08:12:04.353000+01:00 +Post,case-5133,2011-02-22 00:00:00+01:00,General,2011-02-18 14:46:47.461000+01:00,2011-02-22 00:00:00.010000+01:00,,Resource08,2010-12-28 00:00:00.010000+01:00,task-8697,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-01-18 08:12:37.316000+01:00 +Post,case-5133,2011-02-22 00:00:00+01:00,General,2011-02-18 14:46:47.461000+01:00,2011-02-22 00:00:00.010000+01:00,,Resource08,2010-12-28 00:00:00.010000+01:00,task-8699,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-01-18 15:29:10.307000+01:00 +Post,case-5133,2011-02-22 00:00:00+01:00,General,2011-02-18 14:46:47.461000+01:00,2011-02-22 00:00:00.010000+01:00,,Resource08,2010-12-28 00:00:00.010000+01:00,task-8880,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 10:51:31.787000+01:00 +Post,case-5133,2011-02-22 00:00:00+01:00,General,2011-02-18 14:46:47.461000+01:00,2011-02-22 00:00:00.010000+01:00,,Resource08,2010-12-28 00:00:00.010000+01:00,task-8698,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-31 13:26:10.607000+01:00 +Post,case-5133,2011-02-22 00:00:00+01:00,General,2011-02-18 14:46:47.461000+01:00,2011-02-22 00:00:00.010000+01:00,,Resource08,2010-12-28 00:00:00.010000+01:00,task-10200,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-31 13:26:27.235000+01:00 +Internet,case-5135,2011-03-30 01:06:40+02:00,General,2011-04-20 10:56:09.528000+02:00,2011-03-30 01:06:40.020000+02:00,,Resource02,2010-12-22 01:06:40.010000+01:00,task-6797,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-06 16:34:14.660000+01:00 +Internet,case-5135,2011-03-30 01:06:40+02:00,General,2011-04-20 10:56:09.528000+02:00,2011-03-30 01:06:40.020000+02:00,,Resource02,2010-12-22 01:06:40.010000+01:00,task-7129,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-06 16:36:03.719000+01:00 +Internet,case-5135,2011-03-30 01:06:40+02:00,General,2011-04-20 10:56:09.528000+02:00,2011-03-30 01:06:40.020000+02:00,,Resource02,2010-12-22 01:06:40.010000+01:00,task-7130,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-07 07:42:40.950000+01:00 +Internet,case-5135,2011-03-30 01:06:40+02:00,General,2011-04-20 10:56:09.528000+02:00,2011-03-30 01:06:40.020000+02:00,,Resource02,2010-12-22 01:06:40.010000+01:00,task-7138,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-01-07 07:51:53.105000+01:00 +Internet,case-5135,2011-03-30 01:06:40+02:00,General,2011-04-20 10:56:09.528000+02:00,2011-03-30 01:06:40.020000+02:00,,Resource02,2010-12-22 01:06:40.010000+01:00,task-7139,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-07 07:52:11.980000+01:00 +Internet,case-5135,2011-03-30 01:06:40+02:00,General,2011-04-20 10:56:09.528000+02:00,2011-03-30 01:06:40.020000+02:00,,Resource02,2010-12-22 01:06:40.010000+01:00,task-7140,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource02,2011-01-07 07:52:36.087000+01:00 +Internet,case-5135,2011-03-30 01:06:40+02:00,General,2011-04-20 10:56:09.528000+02:00,2011-03-30 01:06:40.020000+02:00,,Resource02,2010-12-22 01:06:40.010000+01:00,task-7141,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-07 07:53:00.836000+01:00 +Internet,case-5135,2011-03-30 01:06:40+02:00,General,2011-04-20 10:56:09.528000+02:00,2011-03-30 01:06:40.020000+02:00,,Resource02,2010-12-22 01:06:40.010000+01:00,task-7142,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-07 07:53:24.448000+01:00 +Internet,case-5135,2011-03-30 01:06:40+02:00,General,2011-04-20 10:56:09.528000+02:00,2011-03-30 01:06:40.020000+02:00,,Resource02,2010-12-22 01:06:40.010000+01:00,task-7131,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-07 08:02:08.049000+01:00 +Internet,case-5135,2011-03-30 01:06:40+02:00,General,2011-04-20 10:56:09.528000+02:00,2011-03-30 01:06:40.020000+02:00,,Resource02,2010-12-22 01:06:40.010000+01:00,task-7144,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-07 15:37:17.405000+01:00 +Desk,case-5137,2011-05-03 01:06:40+02:00,General,2011-04-18 16:09:57.975000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource14,2010-12-28 01:06:40.010000+01:00,task-6799,Confirmation of receipt,complete,EMPTY,Resource14,2011-01-11 11:17:00.962000+01:00 +Desk,case-5137,2011-05-03 01:06:40+02:00,General,2011-04-18 16:09:57.975000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource14,2010-12-28 01:06:40.010000+01:00,task-7625,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-01-11 11:17:55.130000+01:00 +Desk,case-5137,2011-05-03 01:06:40+02:00,General,2011-04-18 16:09:57.975000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource14,2010-12-28 01:06:40.010000+01:00,task-7626,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-01-11 11:18:11.442000+01:00 +Desk,case-5137,2011-05-03 01:06:40+02:00,General,2011-04-18 16:09:57.975000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource14,2010-12-28 01:06:40.010000+01:00,task-7624,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-13 13:01:06.651000+01:00 +Desk,case-5137,2011-05-03 01:06:40+02:00,General,2011-04-18 16:09:57.975000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource14,2010-12-28 01:06:40.010000+01:00,task-8158,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:15:51.204000+01:00 +Desk,case-5137,2011-05-03 01:06:40+02:00,General,2011-04-18 16:09:57.975000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource14,2010-12-28 01:06:40.010000+01:00,task-8225,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 10:07:50.341000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-6816,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-19 15:05:04.530000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-8972,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-19 15:05:33.840000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-8973,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-19 15:06:03.508000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-8971,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-02-07 15:31:47.396000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-11298,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-03-21 12:08:33.771000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-16955,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-21 13:11:10.252000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-17007,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-03-21 13:14:54.468000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-17020,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-21 13:16:27.307000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-17021,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-03-21 13:51:17.484000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-17036,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-21 13:53:05.298000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-17038,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-03-21 13:53:23.131000+01:00 +Internet,case-5141,2011-02-16 00:00:00+01:00,General,2011-04-18 12:50:19.125000+02:00,2011-02-16 00:00:00.010000+01:00,,Resource09,2010-12-22 00:00:00.010000+01:00,task-17039,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-03-21 13:53:37.981000+01:00 +Desk,case-5144,2011-02-24 01:06:40+01:00,General,2011-04-12 13:53:01.110000+02:00,2011-02-24 01:06:40.010000+01:00,,Resource12,2010-12-30 01:06:40.010000+01:00,task-6859,Confirmation of receipt,complete,EMPTY,Resource12,2011-01-13 09:54:02.081000+01:00 +Desk,case-5144,2011-02-24 01:06:40+01:00,General,2011-04-12 13:53:01.110000+02:00,2011-02-24 01:06:40.010000+01:00,,Resource12,2010-12-30 01:06:40.010000+01:00,task-8021,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-14 08:20:20.482000+01:00 +Desk,case-5144,2011-02-24 01:06:40+01:00,General,2011-04-12 13:53:01.110000+02:00,2011-02-24 01:06:40.010000+01:00,,Resource12,2010-12-30 01:06:40.010000+01:00,task-8288,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-14 08:20:51.784000+01:00 +Desk,case-5144,2011-02-24 01:06:40+01:00,General,2011-04-12 13:53:01.110000+02:00,2011-02-24 01:06:40.010000+01:00,,Resource12,2010-12-30 01:06:40.010000+01:00,task-8020,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-01-14 08:23:19.475000+01:00 +Desk,case-5144,2011-02-24 01:06:40+01:00,General,2011-04-12 13:53:01.110000+02:00,2011-02-24 01:06:40.010000+01:00,,Resource12,2010-12-30 01:06:40.010000+01:00,task-8292,T04 Determine confirmation of receipt,complete,EMPTY,Resource12,2011-02-17 11:57:53.105000+01:00 +Desk,case-5144,2011-02-24 01:06:40+01:00,General,2011-04-12 13:53:01.110000+02:00,2011-02-24 01:06:40.010000+01:00,,Resource12,2010-12-30 01:06:40.010000+01:00,task-12757,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-17 15:00:55.430000+01:00 +Internet,case-5145,2011-02-15 00:00:00+01:00,General,2011-02-09 15:24:56.103000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource15,2010-12-21 00:00:00.010000+01:00,task-6866,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-11 14:41:26.858000+01:00 +Internet,case-5145,2011-02-15 00:00:00+01:00,General,2011-02-09 15:24:56.103000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource15,2010-12-21 00:00:00.010000+01:00,task-7752,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-11 14:42:07.187000+01:00 +Internet,case-5145,2011-02-15 00:00:00+01:00,General,2011-02-09 15:24:56.103000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource15,2010-12-21 00:00:00.010000+01:00,task-7753,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-11 14:43:57.211000+01:00 +Internet,case-5145,2011-02-15 00:00:00+01:00,General,2011-02-09 15:24:56.103000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource15,2010-12-21 00:00:00.010000+01:00,task-7751,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-12 11:42:55.939000+01:00 +Internet,case-5145,2011-02-15 00:00:00+01:00,General,2011-02-09 15:24:56.103000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource15,2010-12-21 00:00:00.010000+01:00,task-7886,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-12 11:43:08.537000+01:00 +Internet,case-5145,2011-02-15 00:00:00+01:00,General,2011-02-09 15:24:56.103000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource15,2010-12-21 00:00:00.010000+01:00,task-7887,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-12 14:43:41.124000+01:00 +Post,case-5146,2011-02-24 01:06:40+01:00,General,2011-03-09 09:14:56.415000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-6868,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-11 11:09:33.517000+01:00 +Post,case-5146,2011-02-24 01:06:40+01:00,General,2011-03-09 09:14:56.415000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-7617,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-11 11:12:37.268000+01:00 +Post,case-5146,2011-02-24 01:06:40+01:00,General,2011-03-09 09:14:56.415000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-7621,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-11 11:13:03.112000+01:00 +Post,case-5146,2011-02-24 01:06:40+01:00,General,2011-03-09 09:14:56.415000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-7616,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-11 12:17:23.067000+01:00 +Post,case-5146,2011-02-24 01:06:40+01:00,General,2011-03-09 09:14:56.415000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-7668,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 12:17:54.812000+01:00 +Post,case-5146,2011-02-24 01:06:40+01:00,General,2011-03-09 09:14:56.415000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-7669,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:43:29.280000+01:00 +Internet,case-5151,2011-03-01 00:00:00+01:00,General,2011-02-03 13:29:48.588000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource01,2011-01-04 00:00:00.010000+01:00,task-6907,Confirmation of receipt,complete,EMPTY,Resource01,2011-01-06 11:15:36.220000+01:00 +Internet,case-5151,2011-03-01 00:00:00+01:00,General,2011-02-03 13:29:48.588000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource01,2011-01-04 00:00:00.010000+01:00,task-7002,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-01-06 11:15:53.252000+01:00 +Internet,case-5151,2011-03-01 00:00:00+01:00,General,2011-02-03 13:29:48.588000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource01,2011-01-04 00:00:00.010000+01:00,task-7003,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-06 11:18:47.531000+01:00 +Internet,case-5151,2011-03-01 00:00:00+01:00,General,2011-02-03 13:29:48.588000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource01,2011-01-04 00:00:00.010000+01:00,task-7005,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-06 11:20:30.973000+01:00 +Internet,case-5151,2011-03-01 00:00:00+01:00,General,2011-02-03 13:29:48.588000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource01,2011-01-04 00:00:00.010000+01:00,task-7004,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-07 10:48:17.595000+01:00 +Internet,case-5151,2011-03-01 00:00:00+01:00,General,2011-02-03 13:29:48.588000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource01,2011-01-04 00:00:00.010000+01:00,task-7214,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-07 15:20:18.020000+01:00 +Post,case-5153,2011-03-16 01:06:40+01:00,General,2011-03-24 14:17:15.719000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-6920,Confirmation of receipt,complete,Group 1,Resource18,2011-01-06 13:10:53.097000+01:00 +Post,case-5153,2011-03-16 01:06:40+01:00,General,2011-03-24 14:17:15.719000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-7094,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-01-11 11:21:22.692000+01:00 +Post,case-5153,2011-03-16 01:06:40+01:00,General,2011-03-24 14:17:15.719000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-7629,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 11:58:06.114000+01:00 +Post,case-5153,2011-03-16 01:06:40+01:00,General,2011-03-24 14:17:15.719000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-7661,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 14:05:18.828000+01:00 +Post,case-5153,2011-03-16 01:06:40+01:00,General,2011-03-24 14:17:15.719000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-7095,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-11 14:35:26.111000+01:00 +Post,case-5153,2011-03-16 01:06:40+01:00,General,2011-03-24 14:17:15.719000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-7743,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-11 14:35:49.744000+01:00 +Post,case-5155,2011-03-16 01:06:40+01:00,General,2011-03-17 15:47:34.137000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-6929,Confirmation of receipt,complete,Group 1,Resource18,2011-01-06 13:17:33.109000+01:00 +Post,case-5155,2011-03-16 01:06:40+01:00,General,2011-03-17 15:47:34.137000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-7096,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-01-11 11:22:44.910000+01:00 +Post,case-5155,2011-03-16 01:06:40+01:00,General,2011-03-17 15:47:34.137000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-7630,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-11 12:02:42.852000+01:00 +Post,case-5155,2011-03-16 01:06:40+01:00,General,2011-03-17 15:47:34.137000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-7664,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 13:49:46.226000+01:00 +Post,case-5155,2011-03-16 01:06:40+01:00,General,2011-03-17 15:47:34.137000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-7097,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-11 14:46:52.367000+01:00 +Post,case-5155,2011-03-16 01:06:40+01:00,General,2011-03-17 15:47:34.137000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource18,2010-12-29 01:06:40.010000+01:00,task-7760,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-11 14:47:15.114000+01:00 +Internet,case-5167,2011-02-17 00:00:00+01:00,General,2011-01-27 10:38:44.999000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource01,2010-12-23 00:00:00.010000+01:00,task-7026,Confirmation of receipt,complete,EMPTY,Resource01,2011-01-07 09:14:50.920000+01:00 +Internet,case-5167,2011-02-17 00:00:00+01:00,General,2011-01-27 10:38:44.999000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource01,2010-12-23 00:00:00.010000+01:00,task-7163,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-01-07 09:15:05.586000+01:00 +Internet,case-5167,2011-02-17 00:00:00+01:00,General,2011-01-27 10:38:44.999000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource01,2010-12-23 00:00:00.010000+01:00,task-7164,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-07 09:15:29.928000+01:00 +Internet,case-5167,2011-02-17 00:00:00+01:00,General,2011-01-27 10:38:44.999000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource01,2010-12-23 00:00:00.010000+01:00,task-7166,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-07 09:15:55.787000+01:00 +Internet,case-5167,2011-02-17 00:00:00+01:00,General,2011-01-27 10:38:44.999000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource01,2010-12-23 00:00:00.010000+01:00,task-7165,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-07 11:38:14.655000+01:00 +Internet,case-5167,2011-02-17 00:00:00+01:00,General,2011-01-27 10:38:44.999000+01:00,2011-02-17 00:00:00.010000+01:00,,Resource01,2010-12-23 00:00:00.010000+01:00,task-7227,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-07 15:38:36.184000+01:00 +e-mail,case-5185,2011-03-03 00:00:00+01:00,General,2011-01-31 14:22:37.998000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource14,2011-01-06 00:00:00.010000+01:00,task-7178,Confirmation of receipt,complete,EMPTY,Resource14,2011-01-11 14:28:22.812000+01:00 +e-mail,case-5185,2011-03-03 00:00:00+01:00,General,2011-01-31 14:22:37.998000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource14,2011-01-06 00:00:00.010000+01:00,task-7741,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-01-11 14:52:59.433000+01:00 +e-mail,case-5185,2011-03-03 00:00:00+01:00,General,2011-01-31 14:22:37.998000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource14,2011-01-06 00:00:00.010000+01:00,task-7774,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-01-11 14:53:19.335000+01:00 +e-mail,case-5185,2011-03-03 00:00:00+01:00,General,2011-01-31 14:22:37.998000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource14,2011-01-06 00:00:00.010000+01:00,task-7740,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-12 11:45:22.480000+01:00 +e-mail,case-5185,2011-03-03 00:00:00+01:00,General,2011-01-31 14:22:37.998000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource14,2011-01-06 00:00:00.010000+01:00,task-7888,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-12 11:45:36.126000+01:00 +e-mail,case-5185,2011-03-03 00:00:00+01:00,General,2011-01-31 14:22:37.998000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource14,2011-01-06 00:00:00.010000+01:00,task-7889,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-12 15:01:30.274000+01:00 +Internet,case-5186,2011-02-18 01:06:40+01:00,General,2011-02-11 15:02:31.454000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource18,2010-12-24 01:06:40.010000+01:00,task-7181,Confirmation of receipt,complete,Group 1,Resource38,2011-01-07 09:57:09.885000+01:00 +Internet,case-5186,2011-02-18 01:06:40+01:00,General,2011-02-11 15:02:31.454000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource18,2010-12-24 01:06:40.010000+01:00,task-7197,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-01-11 11:19:12.683000+01:00 +Internet,case-5186,2011-02-18 01:06:40+01:00,General,2011-02-11 15:02:31.454000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource18,2010-12-24 01:06:40.010000+01:00,task-7628,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-01-11 12:29:58.051000+01:00 +Internet,case-5186,2011-02-18 01:06:40+01:00,General,2011-02-11 15:02:31.454000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource18,2010-12-24 01:06:40.010000+01:00,task-7198,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-11 12:37:23.480000+01:00 +Internet,case-5186,2011-02-18 01:06:40+01:00,General,2011-02-11 15:02:31.454000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource18,2010-12-24 01:06:40.010000+01:00,task-7683,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-11 12:38:44.810000+01:00 +Internet,case-5186,2011-02-18 01:06:40+01:00,General,2011-02-11 15:02:31.454000+01:00,2011-02-18 01:06:40.010000+01:00,,Resource18,2010-12-24 01:06:40.010000+01:00,task-7676,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-11 14:59:35.424000+01:00 +Internet,case-5187,2011-02-20 00:00:00+01:00,General,2011-01-11 08:39:13.496000+01:00,2011-02-20 00:00:00.010000+01:00,,Resource01,2010-12-26 00:00:00.010000+01:00,task-7208,Confirmation of receipt,complete,EMPTY,admin2,2011-01-11 08:39:14.261000+01:00 +Internet,case-5190,2011-02-28 01:06:40+01:00,General,2011-02-25 13:11:59.215000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2010-12-27 01:06:40.010000+01:00,task-7219,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-11 14:09:18.394000+01:00 +Internet,case-5190,2011-02-28 01:06:40+01:00,General,2011-02-25 13:11:59.215000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2010-12-27 01:06:40.010000+01:00,task-7712,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-11 14:11:20.424000+01:00 +Internet,case-5190,2011-02-28 01:06:40+01:00,General,2011-02-25 13:11:59.215000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2010-12-27 01:06:40.010000+01:00,task-7714,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-11 14:11:36.208000+01:00 +Internet,case-5190,2011-02-28 01:06:40+01:00,General,2011-02-25 13:11:59.215000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2010-12-27 01:06:40.010000+01:00,task-7711,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-12 11:47:01.218000+01:00 +Internet,case-5190,2011-02-28 01:06:40+01:00,General,2011-02-25 13:11:59.215000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2010-12-27 01:06:40.010000+01:00,task-7890,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-12 11:47:15.588000+01:00 +Internet,case-5190,2011-02-28 01:06:40+01:00,General,2011-02-25 13:11:59.215000+01:00,2011-02-28 01:06:40.010000+01:00,,Resource15,2010-12-27 01:06:40.010000+01:00,task-7891,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-12 15:01:12.940000+01:00 +e-mail,case-5191,2011-03-04 00:00:00+01:00,General,2011-02-08 14:32:39.711000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-7221,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-07 08:49:51.378000+01:00 +e-mail,case-5191,2011-03-04 00:00:00+01:00,General,2011-02-08 14:32:39.711000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-11153,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-07 08:54:22.518000+01:00 +e-mail,case-5191,2011-03-04 00:00:00+01:00,General,2011-02-08 14:32:39.711000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-11152,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-02-07 08:54:51.568000+01:00 +e-mail,case-5191,2011-03-04 00:00:00+01:00,General,2011-02-08 14:32:39.711000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-11155,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-02-07 08:57:05.110000+01:00 +e-mail,case-5191,2011-03-04 00:00:00+01:00,General,2011-02-08 14:32:39.711000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-11157,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-02-07 08:57:47.858000+01:00 +e-mail,case-5191,2011-03-04 00:00:00+01:00,General,2011-02-08 14:32:39.711000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-11154,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-07 09:42:27.649000+01:00 +e-mail,case-5194,2011-03-04 00:00:00+01:00,General,2011-02-08 15:36:36.783000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-7233,Confirmation of receipt,complete,EMPTY,Resource08,2011-01-17 09:36:33.985000+01:00 +e-mail,case-5194,2011-03-04 00:00:00+01:00,General,2011-02-08 15:36:36.783000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-8492,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-01-17 09:37:09.764000+01:00 +e-mail,case-5194,2011-03-04 00:00:00+01:00,General,2011-02-08 15:36:36.783000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-8494,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-01-17 09:37:39.327000+01:00 +e-mail,case-5194,2011-03-04 00:00:00+01:00,General,2011-02-08 15:36:36.783000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-8495,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-01-17 09:38:16.995000+01:00 +e-mail,case-5194,2011-03-04 00:00:00+01:00,General,2011-02-08 15:36:36.783000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-8493,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-17 09:38:26.926000+01:00 +e-mail,case-5194,2011-03-04 00:00:00+01:00,General,2011-02-08 15:36:36.783000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource08,2011-01-07 00:00:00.010000+01:00,task-8496,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-17 09:38:45.924000+01:00 +Internet,case-5196,2011-03-03 00:00:00+01:00,General,2011-02-08 11:10:10.493000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource02,2011-01-06 00:00:00.010000+01:00,task-7248,Confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 14:09:30.414000+01:00 +Internet,case-5196,2011-03-03 00:00:00+01:00,General,2011-02-08 11:10:10.493000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource02,2011-01-06 00:00:00.010000+01:00,task-8661,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-01-17 14:10:22.198000+01:00 +Internet,case-5196,2011-03-03 00:00:00+01:00,General,2011-02-08 11:10:10.493000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource02,2011-01-06 00:00:00.010000+01:00,task-8662,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-01-17 15:09:43.827000+01:00 +Internet,case-5196,2011-03-03 00:00:00+01:00,General,2011-02-08 11:10:10.493000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource02,2011-01-06 00:00:00.010000+01:00,task-8681,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-01-17 15:14:08.197000+01:00 +Internet,case-5196,2011-03-03 00:00:00+01:00,General,2011-02-08 11:10:10.493000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource02,2011-01-06 00:00:00.010000+01:00,task-8664,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 15:07:32.811000+01:00 +Internet,case-5196,2011-03-03 00:00:00+01:00,General,2011-02-08 11:10:10.493000+01:00,2011-03-03 00:00:00.010000+01:00,,Resource02,2011-01-06 00:00:00.010000+01:00,task-8987,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-21 14:14:59.560000+01:00 +Internet,case-5235,2011-03-07 00:00:00+01:00,General,2011-02-24 13:36:06.546000+01:00,2011-03-07 00:00:00.010000+01:00,,Resource25,2011-01-10 00:00:00.010000+01:00,task-7501,Confirmation of receipt,complete,EMPTY,Resource37,2011-01-20 14:59:06.147000+01:00 +Internet,case-5235,2011-03-07 00:00:00+01:00,General,2011-02-24 13:36:06.546000+01:00,2011-03-07 00:00:00.010000+01:00,,Resource25,2011-01-10 00:00:00.010000+01:00,task-9101,T06 Determine necessity of stop advice,complete,Group 1,Resource37,2011-01-20 15:03:04.970000+01:00 +Internet,case-5235,2011-03-07 00:00:00+01:00,General,2011-02-24 13:36:06.546000+01:00,2011-03-07 00:00:00.010000+01:00,,Resource25,2011-01-10 00:00:00.010000+01:00,task-9102,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource37,2011-01-20 15:03:49.691000+01:00 +Internet,case-5235,2011-03-07 00:00:00+01:00,General,2011-02-24 13:36:06.546000+01:00,2011-03-07 00:00:00.010000+01:00,,Resource25,2011-01-10 00:00:00.010000+01:00,task-9103,T06 Determine necessity of stop advice,complete,Group 1,Resource37,2011-01-20 15:04:34.320000+01:00 +Internet,case-5235,2011-03-07 00:00:00+01:00,General,2011-02-24 13:36:06.546000+01:00,2011-03-07 00:00:00.010000+01:00,,Resource25,2011-01-10 00:00:00.010000+01:00,task-9104,T10 Determine necessity to stop indication,complete,Group 1,Resource37,2011-01-20 15:05:29.600000+01:00 +Internet,case-5235,2011-03-07 00:00:00+01:00,General,2011-02-24 13:36:06.546000+01:00,2011-03-07 00:00:00.010000+01:00,,Resource25,2011-01-10 00:00:00.010000+01:00,task-9100,T02 Check confirmation of receipt,complete,EMPTY,Resource25,2011-01-25 10:06:48.377000+01:00 +Internet,case-5235,2011-03-07 00:00:00+01:00,General,2011-02-24 13:36:06.546000+01:00,2011-03-07 00:00:00.010000+01:00,,Resource25,2011-01-10 00:00:00.010000+01:00,task-9436,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-01-26 13:13:15.164000+01:00 +Internet,case-5235,2011-03-07 00:00:00+01:00,General,2011-02-24 13:36:06.546000+01:00,2011-03-07 00:00:00.010000+01:00,,Resource25,2011-01-10 00:00:00.010000+01:00,task-9665,T05 Print and send confirmation of receipt,complete,EMPTY,admin1,2011-02-17 14:45:27.116000+01:00 +Internet,case-5243,2011-03-20 01:06:40+01:00,General,2011-03-16 16:29:55.520000+01:00,2011-03-20 01:06:40.010000+01:00,,Resource04,2010-12-27 01:06:40.010000+01:00,task-7566,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-17 13:08:29.581000+01:00 +Internet,case-5243,2011-03-20 01:06:40+01:00,General,2011-03-16 16:29:55.520000+01:00,2011-03-20 01:06:40.010000+01:00,,Resource04,2010-12-27 01:06:40.010000+01:00,task-8607,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-17 13:08:52.108000+01:00 +Internet,case-5243,2011-03-20 01:06:40+01:00,General,2011-03-16 16:29:55.520000+01:00,2011-03-20 01:06:40.010000+01:00,,Resource04,2010-12-27 01:06:40.010000+01:00,task-8608,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-17 13:09:12.513000+01:00 +Internet,case-5243,2011-03-20 01:06:40+01:00,General,2011-03-16 16:29:55.520000+01:00,2011-03-20 01:06:40.010000+01:00,,Resource04,2010-12-27 01:06:40.010000+01:00,task-8610,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-17 13:09:27.162000+01:00 +Internet,case-5243,2011-03-20 01:06:40+01:00,General,2011-03-16 16:29:55.520000+01:00,2011-03-20 01:06:40.010000+01:00,,Resource04,2010-12-27 01:06:40.010000+01:00,task-8609,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 14:57:14.202000+01:00 +Internet,case-5243,2011-03-20 01:06:40+01:00,General,2011-03-16 16:29:55.520000+01:00,2011-03-20 01:06:40.010000+01:00,,Resource04,2010-12-27 01:06:40.010000+01:00,task-8967,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:02:55.996000+01:00 +Internet,case-5245,2011-01-21 01:06:40+01:00,General,2011-01-21 16:00:15.194000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-7614,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-18 09:27:21.804000+01:00 +Internet,case-5245,2011-01-21 01:06:40+01:00,General,2011-01-21 16:00:15.194000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-8712,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-18 09:27:38.295000+01:00 +Internet,case-5245,2011-01-21 01:06:40+01:00,General,2011-01-21 16:00:15.194000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-8713,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-18 09:28:01.375000+01:00 +Internet,case-5245,2011-01-21 01:06:40+01:00,General,2011-01-21 16:00:15.194000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-8711,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-01-18 09:39:19.245000+01:00 +Internet,case-5245,2011-01-21 01:06:40+01:00,General,2011-01-21 16:00:15.194000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-8729,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-01-18 09:40:52.540000+01:00 +Internet,case-5245,2011-01-21 01:06:40+01:00,General,2011-01-21 16:00:15.194000+01:00,2011-01-21 01:06:40.010000+01:00,,Resource17,2010-10-20 01:06:40.020000+02:00,task-8730,T05 Print and send confirmation of receipt,complete,EMPTY,Resource17,2011-01-18 09:41:45.512000+01:00 +Internet,case-5247,2011-01-16 01:06:40+01:00,General,2011-01-14 14:24:26.688000+01:00,2011-01-16 01:06:40.010000+01:00,,Resource08,2011-01-11 01:06:40.010000+01:00,task-7635,Confirmation of receipt,complete,Group 1,Resource21,2011-01-11 11:42:43.292000+01:00 +Internet,case-5247,2011-01-16 01:06:40+01:00,General,2011-01-14 14:24:26.688000+01:00,2011-01-16 01:06:40.010000+01:00,,Resource08,2011-01-11 01:06:40.010000+01:00,task-7651,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-01-13 10:20:52.791000+01:00 +Internet,case-5247,2011-01-16 01:06:40+01:00,General,2011-01-14 14:24:26.688000+01:00,2011-01-16 01:06:40.010000+01:00,,Resource08,2011-01-11 01:06:40.010000+01:00,task-7652,T06 Determine necessity of stop advice,complete,EMPTY,Resource08,2011-01-13 10:21:09.735000+01:00 +Internet,case-5247,2011-01-16 01:06:40+01:00,General,2011-01-14 14:24:26.688000+01:00,2011-01-16 01:06:40.010000+01:00,,Resource08,2011-01-11 01:06:40.010000+01:00,task-8031,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-13 10:21:24.502000+01:00 +Internet,case-5247,2011-01-16 01:06:40+01:00,General,2011-01-14 14:24:26.688000+01:00,2011-01-16 01:06:40.010000+01:00,,Resource08,2011-01-11 01:06:40.010000+01:00,task-8030,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-01-13 10:21:59.109000+01:00 +Internet,case-5247,2011-01-16 01:06:40+01:00,General,2011-01-14 14:24:26.688000+01:00,2011-01-16 01:06:40.010000+01:00,,Resource08,2011-01-11 01:06:40.010000+01:00,task-8033,T05 Print and send confirmation of receipt,complete,Group 2,Resource08,2011-01-13 10:22:14.108000+01:00 +Internet,case-5250,2011-01-31 00:00:00+01:00,General,2011-02-09 11:50:34.042000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource09,2010-12-06 00:00:00.010000+01:00,task-7700,Confirmation of receipt,complete,EMPTY,Resource09,2011-01-17 09:36:13.653000+01:00 +Internet,case-5250,2011-01-31 00:00:00+01:00,General,2011-02-09 11:50:34.042000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource09,2010-12-06 00:00:00.010000+01:00,task-8491,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-17 09:41:11.425000+01:00 +Internet,case-5250,2011-01-31 00:00:00+01:00,General,2011-02-09 11:50:34.042000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource09,2010-12-06 00:00:00.010000+01:00,task-8498,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-17 09:41:38.083000+01:00 +Internet,case-5250,2011-01-31 00:00:00+01:00,General,2011-02-09 11:50:34.042000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource09,2010-12-06 00:00:00.010000+01:00,task-8490,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-17 12:38:43.397000+01:00 +Internet,case-5250,2011-01-31 00:00:00+01:00,General,2011-02-09 11:50:34.042000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource09,2010-12-06 00:00:00.010000+01:00,task-8604,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 14:55:55.230000+01:00 +Internet,case-5250,2011-01-31 00:00:00+01:00,General,2011-02-09 11:50:34.042000+01:00,2011-01-31 00:00:00.010000+01:00,,Resource09,2010-12-06 00:00:00.010000+01:00,task-8966,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:43:44.009000+01:00 +Internet,case-5254,2011-05-19 01:06:40+02:00,General,2011-06-20 11:43:02.571000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource18,2010-12-27 01:06:40.010000+01:00,task-7787,Confirmation of receipt,complete,EMPTY,Resource18,2011-01-13 11:38:56.153000+01:00 +Internet,case-5254,2011-05-19 01:06:40+02:00,General,2011-06-20 11:43:02.571000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource18,2010-12-27 01:06:40.010000+01:00,task-8105,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-13 11:39:27.720000+01:00 +Internet,case-5254,2011-05-19 01:06:40+02:00,General,2011-06-20 11:43:02.571000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource18,2010-12-27 01:06:40.010000+01:00,task-8106,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-13 11:40:11.410000+01:00 +Internet,case-5254,2011-05-19 01:06:40+02:00,General,2011-06-20 11:43:02.571000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource18,2010-12-27 01:06:40.010000+01:00,task-8104,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 16:09:20.719000+01:00 +Internet,case-5254,2011-05-19 01:06:40+02:00,General,2011-06-20 11:43:02.571000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource18,2010-12-27 01:06:40.010000+01:00,task-8218,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:09:38.658000+01:00 +Internet,case-5254,2011-05-19 01:06:40+02:00,General,2011-06-20 11:43:02.571000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource18,2010-12-27 01:06:40.010000+01:00,task-8219,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:46:52.717000+01:00 +Internet,case-5266,2011-02-21 00:00:00+01:00,General,2011-04-29 14:21:55.843000+02:00,2011-02-21 00:00:00.010000+01:00,,Resource12,2010-12-27 00:00:00.010000+01:00,task-7836,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-13 15:00:42.373000+01:00 +Internet,case-5266,2011-02-21 00:00:00+01:00,General,2011-04-29 14:21:55.843000+02:00,2011-02-21 00:00:00.010000+01:00,,Resource12,2010-12-27 00:00:00.010000+01:00,task-8181,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 16:25:51.513000+01:00 +Internet,case-5266,2011-02-21 00:00:00+01:00,General,2011-04-29 14:21:55.843000+02:00,2011-02-21 00:00:00.010000+01:00,,Resource12,2010-12-27 00:00:00.010000+01:00,task-8237,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:26:26.698000+01:00 +Internet,case-5266,2011-02-21 00:00:00+01:00,General,2011-04-29 14:21:55.843000+02:00,2011-02-21 00:00:00.010000+01:00,,Resource12,2010-12-27 00:00:00.010000+01:00,task-8238,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:39:01.188000+01:00 +Internet,case-5266,2011-02-21 00:00:00+01:00,General,2011-04-29 14:21:55.843000+02:00,2011-02-21 00:00:00.010000+01:00,,Resource12,2010-12-27 00:00:00.010000+01:00,task-8182,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-18 11:50:28.597000+01:00 +Internet,case-5266,2011-02-21 00:00:00+01:00,General,2011-04-29 14:21:55.843000+02:00,2011-02-21 00:00:00.010000+01:00,,Resource12,2010-12-27 00:00:00.010000+01:00,task-8784,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-18 11:50:51.180000+01:00 +Internet,case-5268,2011-02-21 00:00:00+01:00,General,2011-01-13 12:35:15.061000+01:00,2011-02-21 00:00:00.010000+01:00,,Resource26,2010-12-27 00:00:00.010000+01:00,task-7842,Confirmation of receipt,complete,EMPTY,admin2,2011-01-13 12:35:15.762000+01:00 +Internet,case-5273,2011-02-21 01:06:40+01:00,General,2011-05-19 14:16:01.675000+02:00,2011-02-21 01:06:40.010000+01:00,,Resource14,2010-12-27 01:06:40.010000+01:00,task-7896,Confirmation of receipt,complete,EMPTY,Resource14,2011-01-13 11:34:18.143000+01:00 +Internet,case-5273,2011-02-21 01:06:40+01:00,General,2011-05-19 14:16:01.675000+02:00,2011-02-21 01:06:40.010000+01:00,,Resource14,2010-12-27 01:06:40.010000+01:00,task-8102,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 16:01:07.457000+01:00 +Internet,case-5273,2011-02-21 01:06:40+01:00,General,2011-05-19 14:16:01.675000+02:00,2011-02-21 01:06:40.010000+01:00,,Resource14,2010-12-27 01:06:40.010000+01:00,task-8215,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:04:41.638000+01:00 +Internet,case-5273,2011-02-21 01:06:40+01:00,General,2011-05-19 14:16:01.675000+02:00,2011-02-21 01:06:40.010000+01:00,,Resource14,2010-12-27 01:06:40.010000+01:00,task-8216,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:45:26.978000+01:00 +Internet,case-5273,2011-02-21 01:06:40+01:00,General,2011-05-19 14:16:01.675000+02:00,2011-02-21 01:06:40.010000+01:00,,Resource14,2010-12-27 01:06:40.010000+01:00,task-8103,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-01-24 10:11:55.548000+01:00 +Internet,case-5273,2011-02-21 01:06:40+01:00,General,2011-05-19 14:16:01.675000+02:00,2011-02-21 01:06:40.010000+01:00,,Resource14,2010-12-27 01:06:40.010000+01:00,task-9304,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-01-24 10:14:45.458000+01:00 +Internet,case-5275,2011-06-07 01:06:40+02:00,General,2011-06-07 15:05:26.063000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource18,2010-12-28 01:06:40.010000+01:00,task-7909,Confirmation of receipt,complete,EMPTY,Resource18,2011-01-14 16:03:09.840000+01:00 +Internet,case-5275,2011-06-07 01:06:40+02:00,General,2011-06-07 15:05:26.063000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource18,2010-12-28 01:06:40.010000+01:00,task-8452,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-17 09:06:42.726000+01:00 +Internet,case-5275,2011-06-07 01:06:40+02:00,General,2011-06-07 15:05:26.063000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource18,2010-12-28 01:06:40.010000+01:00,task-8480,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-17 09:09:14.670000+01:00 +Internet,case-5275,2011-06-07 01:06:40+02:00,General,2011-06-07 15:05:26.063000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource18,2010-12-28 01:06:40.010000+01:00,task-8451,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-01-17 13:47:49.460000+01:00 +Internet,case-5275,2011-06-07 01:06:40+02:00,General,2011-06-07 15:05:26.063000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource18,2010-12-28 01:06:40.010000+01:00,task-8634,T03 Adjust confirmation of receipt,complete,Group 1,Resource18,2011-01-20 13:39:54.930000+01:00 +Internet,case-5275,2011-06-07 01:06:40+02:00,General,2011-06-07 15:05:26.063000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource18,2010-12-28 01:06:40.010000+01:00,task-9078,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-01-20 13:40:10.916000+01:00 +Internet,case-5275,2011-06-07 01:06:40+02:00,General,2011-06-07 15:05:26.063000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource18,2010-12-28 01:06:40.010000+01:00,task-9079,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-01-20 13:41:34.147000+01:00 +Internet,case-5275,2011-06-07 01:06:40+02:00,General,2011-06-07 15:05:26.063000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource18,2010-12-28 01:06:40.010000+01:00,task-9080,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:04:54.827000+01:00 +Internet,case-5285,2011-02-15 00:00:00+01:00,General,2011-01-19 10:11:56.843000+01:00,2011-02-15 00:00:00.010000+01:00,,Resource26,2010-12-23 00:00:00.010000+01:00,task-7953,Confirmation of receipt,complete,Group 1,admin2,2011-01-19 10:11:57.658000+01:00 +Internet,case-5286,2011-02-23 00:00:00+01:00,General,2011-08-19 08:50:23.351000+02:00,2011-02-23 00:00:00.010000+01:00,,Resource12,2010-12-29 00:00:00.010000+01:00,task-7954,Confirmation of receipt,complete,EMPTY,Resource12,2011-02-02 15:31:51.578000+01:00 +Internet,case-5286,2011-02-23 00:00:00+01:00,General,2011-08-19 08:50:23.351000+02:00,2011-02-23 00:00:00.010000+01:00,,Resource12,2010-12-29 00:00:00.010000+01:00,task-10696,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-02-02 15:47:52.354000+01:00 +Internet,case-5286,2011-02-23 00:00:00+01:00,General,2011-08-19 08:50:23.351000+02:00,2011-02-23 00:00:00.010000+01:00,,Resource12,2010-12-29 00:00:00.010000+01:00,task-10698,T04 Determine confirmation of receipt,complete,EMPTY,Resource12,2011-02-03 09:37:37.396000+01:00 +Internet,case-5286,2011-02-23 00:00:00+01:00,General,2011-08-19 08:50:23.351000+02:00,2011-02-23 00:00:00.010000+01:00,,Resource12,2010-12-29 00:00:00.010000+01:00,task-10759,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-02-03 09:41:52.753000+01:00 +Internet,case-5286,2011-02-23 00:00:00+01:00,General,2011-08-19 08:50:23.351000+02:00,2011-02-23 00:00:00.010000+01:00,,Resource12,2010-12-29 00:00:00.010000+01:00,task-10697,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-02-03 09:43:18.262000+01:00 +Internet,case-5286,2011-02-23 00:00:00+01:00,General,2011-08-19 08:50:23.351000+02:00,2011-02-23 00:00:00.010000+01:00,,Resource12,2010-12-29 00:00:00.010000+01:00,task-10760,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource12,2011-02-03 09:44:22.757000+01:00 +Internet,case-5286,2011-02-23 00:00:00+01:00,General,2011-08-19 08:50:23.351000+02:00,2011-02-23 00:00:00.010000+01:00,,Resource12,2010-12-29 00:00:00.010000+01:00,task-10763,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-02-03 09:44:56.122000+01:00 +Internet,case-5286,2011-02-23 00:00:00+01:00,General,2011-08-19 08:50:23.351000+02:00,2011-02-23 00:00:00.010000+01:00,,Resource12,2010-12-29 00:00:00.010000+01:00,task-10764,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource12,2011-02-03 09:45:20.401000+01:00 +Internet,case-5286,2011-02-23 00:00:00+01:00,General,2011-08-19 08:50:23.351000+02:00,2011-02-23 00:00:00.010000+01:00,,Resource12,2010-12-29 00:00:00.010000+01:00,task-10765,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-02-03 09:45:49.765000+01:00 +Internet,case-5286,2011-02-23 00:00:00+01:00,General,2011-08-19 08:50:23.351000+02:00,2011-02-23 00:00:00.010000+01:00,,Resource12,2010-12-29 00:00:00.010000+01:00,task-10766,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-02-03 09:48:39.077000+01:00 +Internet,case-5287,2011-02-11 01:06:40+01:00,General,2011-02-16 12:12:40.005000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource05,2010-12-17 01:06:40.010000+01:00,task-7955,Confirmation of receipt,complete,Group 1,Resource05,2011-01-19 11:02:30.901000+01:00 +Internet,case-5287,2011-02-11 01:06:40+01:00,General,2011-02-16 12:12:40.005000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource05,2010-12-17 01:06:40.010000+01:00,task-8936,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-01-19 11:03:09.168000+01:00 +Internet,case-5287,2011-02-11 01:06:40+01:00,General,2011-02-16 12:12:40.005000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource05,2010-12-17 01:06:40.010000+01:00,task-8937,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-01-19 11:04:13.688000+01:00 +Internet,case-5287,2011-02-11 01:06:40+01:00,General,2011-02-16 12:12:40.005000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource05,2010-12-17 01:06:40.010000+01:00,task-8938,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-01-19 11:04:31.732000+01:00 +Internet,case-5287,2011-02-11 01:06:40+01:00,General,2011-02-16 12:12:40.005000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource05,2010-12-17 01:06:40.010000+01:00,task-8940,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-01-19 11:04:58.566000+01:00 +Internet,case-5287,2011-02-11 01:06:40+01:00,General,2011-02-16 12:12:40.005000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource05,2010-12-17 01:06:40.010000+01:00,task-8939,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-01-19 11:06:00.493000+01:00 +Internet,case-5288,2011-04-01 01:06:40+02:00,General,2011-04-01 14:45:51.635000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource08,2010-12-17 01:06:40.010000+01:00,task-7956,Confirmation of receipt,complete,EMPTY,Resource08,2011-01-13 15:13:10.761000+01:00 +Internet,case-5288,2011-04-01 01:06:40+02:00,General,2011-04-01 14:45:51.635000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource08,2010-12-17 01:06:40.010000+01:00,task-8188,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-13 15:13:40.597000+01:00 +Internet,case-5288,2011-04-01 01:06:40+02:00,General,2011-04-01 14:45:51.635000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource08,2010-12-17 01:06:40.010000+01:00,task-8189,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-13 15:14:01.163000+01:00 +Internet,case-5288,2011-04-01 01:06:40+02:00,General,2011-04-01 14:45:51.635000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource08,2010-12-17 01:06:40.010000+01:00,task-8187,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-01-13 15:14:30.109000+01:00 +Internet,case-5288,2011-04-01 01:06:40+02:00,General,2011-04-01 14:45:51.635000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource08,2010-12-17 01:06:40.010000+01:00,task-8191,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:27:39.707000+01:00 +Internet,case-5288,2011-04-01 01:06:40+02:00,General,2011-04-01 14:45:51.635000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource08,2010-12-17 01:06:40.010000+01:00,task-8239,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:19:42.487000+01:00 +Desk,case-5289,2011-04-22 01:06:40+02:00,General,2011-04-20 15:45:28.388000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-7960,Confirmation of receipt,complete,Group 1,Resource15,2011-01-13 15:12:26.011000+01:00 +Desk,case-5289,2011-04-22 01:06:40+02:00,General,2011-04-20 15:45:28.388000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-8185,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 16:23:42.177000+01:00 +Desk,case-5289,2011-04-22 01:06:40+02:00,General,2011-04-20 15:45:28.388000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-8234,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:23:53.685000+01:00 +Desk,case-5289,2011-04-22 01:06:40+02:00,General,2011-04-20 15:45:28.388000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-8186,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-14 08:13:13.195000+01:00 +Desk,case-5289,2011-04-22 01:06:40+02:00,General,2011-04-20 15:45:28.388000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-8280,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-14 08:14:07.545000+01:00 +Desk,case-5289,2011-04-22 01:06:40+02:00,General,2011-04-20 15:45:28.388000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource15,2010-12-17 01:06:40.010000+01:00,task-8235,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 09:29:06.653000+01:00 +Internet,case-5294,2011-03-23 01:06:40+01:00,General,2011-03-22 16:05:24.947000+01:00,2011-03-23 01:06:40.010000+01:00,,Resource15,2010-12-29 01:06:40.010000+01:00,task-7988,Confirmation of receipt,complete,Group 1,Resource15,2011-01-13 15:16:25.244000+01:00 +Internet,case-5294,2011-03-23 01:06:40+01:00,General,2011-03-22 16:05:24.947000+01:00,2011-03-23 01:06:40.010000+01:00,,Resource15,2010-12-29 01:06:40.010000+01:00,task-8192,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-13 16:28:51.610000+01:00 +Internet,case-5294,2011-03-23 01:06:40+01:00,General,2011-03-22 16:05:24.947000+01:00,2011-03-23 01:06:40.010000+01:00,,Resource15,2010-12-29 01:06:40.010000+01:00,task-8240,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-13 16:29:02.459000+01:00 +Internet,case-5294,2011-03-23 01:06:40+01:00,General,2011-03-22 16:05:24.947000+01:00,2011-03-23 01:06:40.010000+01:00,,Resource15,2010-12-29 01:06:40.010000+01:00,task-8193,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-14 10:04:18.865000+01:00 +Internet,case-5294,2011-03-23 01:06:40+01:00,General,2011-03-22 16:05:24.947000+01:00,2011-03-23 01:06:40.010000+01:00,,Resource15,2010-12-29 01:06:40.010000+01:00,task-8318,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-14 10:04:36.681000+01:00 +Internet,case-5294,2011-03-23 01:06:40+01:00,General,2011-03-22 16:05:24.947000+01:00,2011-03-23 01:06:40.010000+01:00,,Resource15,2010-12-29 01:06:40.010000+01:00,task-8241,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-14 10:05:20.024000+01:00 +Internet,case-5297,2011-03-19 01:06:40+01:00,General,2011-03-16 14:41:16.283000+01:00,2011-03-19 01:06:40.010000+01:00,,Resource04,2010-12-29 01:06:40.010000+01:00,task-8085,Confirmation of receipt,complete,Group 1,Resource04,2011-01-17 13:52:35.916000+01:00 +Internet,case-5297,2011-03-19 01:06:40+01:00,General,2011-03-16 14:41:16.283000+01:00,2011-03-19 01:06:40.010000+01:00,,Resource04,2010-12-29 01:06:40.010000+01:00,task-8635,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-17 13:52:51.477000+01:00 +Internet,case-5297,2011-03-19 01:06:40+01:00,General,2011-03-16 14:41:16.283000+01:00,2011-03-19 01:06:40.010000+01:00,,Resource04,2010-12-29 01:06:40.010000+01:00,task-8636,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-17 13:53:08.838000+01:00 +Internet,case-5297,2011-03-19 01:06:40+01:00,General,2011-03-16 14:41:16.283000+01:00,2011-03-19 01:06:40.010000+01:00,,Resource04,2010-12-29 01:06:40.010000+01:00,task-8638,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-17 13:53:38.250000+01:00 +Internet,case-5297,2011-03-19 01:06:40+01:00,General,2011-03-16 14:41:16.283000+01:00,2011-03-19 01:06:40.010000+01:00,,Resource04,2010-12-29 01:06:40.010000+01:00,task-8637,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 15:05:34.699000+01:00 +Internet,case-5297,2011-03-19 01:06:40+01:00,General,2011-03-16 14:41:16.283000+01:00,2011-03-19 01:06:40.010000+01:00,,Resource04,2010-12-29 01:06:40.010000+01:00,task-8974,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:48:28.585000+01:00 +Post,case-5298,2011-03-02 00:00:00+01:00,General,2011-02-04 13:28:24.157000+01:00,2011-03-02 00:00:00.010000+01:00,,Resource12,2011-01-05 00:00:00.010000+01:00,task-8091,Confirmation of receipt,complete,Group 1,Resource12,2011-01-14 08:06:51.863000+01:00 +Post,case-5298,2011-03-02 00:00:00+01:00,General,2011-02-04 13:28:24.157000+01:00,2011-03-02 00:00:00.010000+01:00,,Resource12,2011-01-05 00:00:00.010000+01:00,task-8273,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-01-14 08:08:01.042000+01:00 +Post,case-5298,2011-03-02 00:00:00+01:00,General,2011-02-04 13:28:24.157000+01:00,2011-03-02 00:00:00.010000+01:00,,Resource12,2011-01-05 00:00:00.010000+01:00,task-8274,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-01-14 08:08:26.001000+01:00 +Post,case-5298,2011-03-02 00:00:00+01:00,General,2011-02-04 13:28:24.157000+01:00,2011-03-02 00:00:00.010000+01:00,,Resource12,2011-01-05 00:00:00.010000+01:00,task-8272,T02 Check confirmation of receipt,complete,EMPTY,Resource21,2011-02-04 13:09:08.172000+01:00 +Post,case-5298,2011-03-02 00:00:00+01:00,General,2011-02-04 13:28:24.157000+01:00,2011-03-02 00:00:00.010000+01:00,,Resource12,2011-01-05 00:00:00.010000+01:00,task-10968,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-02-04 13:11:07.780000+01:00 +Post,case-5298,2011-03-02 00:00:00+01:00,General,2011-02-04 13:28:24.157000+01:00,2011-03-02 00:00:00.010000+01:00,,Resource12,2011-01-05 00:00:00.010000+01:00,task-10969,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-02-04 13:27:34.329000+01:00 +Internet,case-5299,2011-02-25 01:06:40+01:00,General,2011-02-15 10:59:01.802000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource08,2010-12-31 01:06:40.010000+01:00,task-8119,Confirmation of receipt,complete,EMPTY,Resource08,2011-01-14 14:16:02.335000+01:00 +Internet,case-5299,2011-02-25 01:06:40+01:00,General,2011-02-15 10:59:01.802000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource08,2010-12-31 01:06:40.010000+01:00,task-8414,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-01-14 14:16:34.590000+01:00 +Internet,case-5299,2011-02-25 01:06:40+01:00,General,2011-02-15 10:59:01.802000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource08,2010-12-31 01:06:40.010000+01:00,task-8415,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-01-14 14:16:52.078000+01:00 +Internet,case-5299,2011-02-25 01:06:40+01:00,General,2011-02-15 10:59:01.802000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource08,2010-12-31 01:06:40.010000+01:00,task-8416,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-01-14 14:18:46.191000+01:00 +Internet,case-5299,2011-02-25 01:06:40+01:00,General,2011-02-15 10:59:01.802000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource08,2010-12-31 01:06:40.010000+01:00,task-8418,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-18 09:31:34.057000+01:00 +Internet,case-5299,2011-02-25 01:06:40+01:00,General,2011-02-15 10:59:01.802000+01:00,2011-02-25 01:06:40.010000+01:00,,Resource08,2010-12-31 01:06:40.010000+01:00,task-8417,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-01-31 11:30:46.404000+01:00 +Internet,case-5301,2011-03-10 00:00:00+01:00,General,2011-03-04 11:47:56.186000+01:00,2011-03-10 00:00:00.010000+01:00,,Resource13,2011-01-13 00:00:00.010000+01:00,task-8140,Confirmation of receipt,complete,EMPTY,Resource13,2011-01-27 10:32:14.323000+01:00 +Internet,case-5301,2011-03-10 00:00:00+01:00,General,2011-03-04 11:47:56.186000+01:00,2011-03-10 00:00:00.010000+01:00,,Resource13,2011-01-13 00:00:00.010000+01:00,task-9764,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-27 10:38:13.989000+01:00 +Internet,case-5301,2011-03-10 00:00:00+01:00,General,2011-03-04 11:47:56.186000+01:00,2011-03-10 00:00:00.010000+01:00,,Resource13,2011-01-13 00:00:00.010000+01:00,task-9772,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-27 10:39:23.652000+01:00 +Internet,case-5301,2011-03-10 00:00:00+01:00,General,2011-03-04 11:47:56.186000+01:00,2011-03-10 00:00:00.010000+01:00,,Resource13,2011-01-13 00:00:00.010000+01:00,task-9774,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-01-27 10:45:28.139000+01:00 +Internet,case-5301,2011-03-10 00:00:00+01:00,General,2011-03-04 11:47:56.186000+01:00,2011-03-10 00:00:00.010000+01:00,,Resource13,2011-01-13 00:00:00.010000+01:00,task-9765,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-01-27 10:46:48.803000+01:00 +Internet,case-5301,2011-03-10 00:00:00+01:00,General,2011-03-04 11:47:56.186000+01:00,2011-03-10 00:00:00.010000+01:00,,Resource13,2011-01-13 00:00:00.010000+01:00,task-9779,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-01-27 10:47:29.537000+01:00 +Desk,case-5311,2011-02-14 00:00:00+01:00,General,2011-04-14 14:12:56.814000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-27 00:00:00.010000+01:00,task-8365,Confirmation of receipt,complete,Group 1,Resource09,2011-01-17 13:58:21.153000+01:00 +Desk,case-5311,2011-02-14 00:00:00+01:00,General,2011-04-14 14:12:56.814000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-27 00:00:00.010000+01:00,task-8643,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-01-17 13:59:31.321000+01:00 +Desk,case-5311,2011-02-14 00:00:00+01:00,General,2011-04-14 14:12:56.814000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-27 00:00:00.010000+01:00,task-8648,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-01-17 14:00:14.123000+01:00 +Desk,case-5311,2011-02-14 00:00:00+01:00,General,2011-04-14 14:12:56.814000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-27 00:00:00.010000+01:00,task-8642,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-19 15:06:31.204000+01:00 +Desk,case-5311,2011-02-14 00:00:00+01:00,General,2011-04-14 14:12:56.814000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-27 00:00:00.010000+01:00,task-8976,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-19 15:09:37.013000+01:00 +Desk,case-5311,2011-02-14 00:00:00+01:00,General,2011-04-14 14:12:56.814000+02:00,2011-02-14 00:00:00.010000+01:00,,Resource09,2010-12-27 00:00:00.010000+01:00,task-8989,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:29:18.142000+01:00 +Internet,case-5337,2011-03-12 00:00:00+01:00,Customer contact,2011-01-15 13:42:03.349000+01:00,2011-03-12 00:00:00.010000+01:00,,admin3,2011-01-15 00:00:00.010000+01:00,task-8466,Confirmation of receipt,complete,Group 1,admin2,2011-01-15 13:42:05.411000+01:00 +Internet,case-5351,2011-03-14 00:00:00+01:00,General,2011-08-18 08:43:00.267000+02:00,2011-03-14 00:00:00.010000+01:00,,Resource21,2011-01-17 00:00:00.010000+01:00,task-8666,Confirmation of receipt,complete,Group 1,Resource21,2011-01-17 14:15:36.633000+01:00 +Internet,case-5351,2011-03-14 00:00:00+01:00,General,2011-08-18 08:43:00.267000+02:00,2011-03-14 00:00:00.010000+01:00,,Resource21,2011-01-17 00:00:00.010000+01:00,task-8668,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-01-17 14:20:38.278000+01:00 +Internet,case-5351,2011-03-14 00:00:00+01:00,General,2011-08-18 08:43:00.267000+02:00,2011-03-14 00:00:00.010000+01:00,,Resource21,2011-01-17 00:00:00.010000+01:00,task-8670,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource21,2011-01-18 14:08:06.004000+01:00 +Internet,case-5351,2011-03-14 00:00:00+01:00,General,2011-08-18 08:43:00.267000+02:00,2011-03-14 00:00:00.010000+01:00,,Resource21,2011-01-17 00:00:00.010000+01:00,task-8811,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-01-18 14:08:35.153000+01:00 +Internet,case-5351,2011-03-14 00:00:00+01:00,General,2011-08-18 08:43:00.267000+02:00,2011-03-14 00:00:00.010000+01:00,,Resource21,2011-01-17 00:00:00.010000+01:00,task-8812,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-01-18 14:09:19.866000+01:00 +Internet,case-5351,2011-03-14 00:00:00+01:00,General,2011-08-18 08:43:00.267000+02:00,2011-03-14 00:00:00.010000+01:00,,Resource21,2011-01-17 00:00:00.010000+01:00,task-8667,T02 Check confirmation of receipt,complete,EMPTY,Resource21,2011-03-30 10:00:52.380000+02:00 +Internet,case-5351,2011-03-14 00:00:00+01:00,General,2011-08-18 08:43:00.267000+02:00,2011-03-14 00:00:00.010000+01:00,,Resource21,2011-01-17 00:00:00.010000+01:00,task-18390,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-30 11:15:20.861000+02:00 +Internet,case-5351,2011-03-14 00:00:00+01:00,General,2011-08-18 08:43:00.267000+02:00,2011-03-14 00:00:00.010000+01:00,,Resource21,2011-01-17 00:00:00.010000+01:00,task-18443,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 08:49:54.077000+02:00 +Internet,case-5355,2011-02-24 00:00:00+01:00,General,2011-04-07 15:45:12.541000+02:00,2011-02-24 00:00:00.010000+01:00,,Resource12,2010-12-30 00:00:00.010000+01:00,task-8686,Confirmation of receipt,complete,EMPTY,Resource12,2011-03-01 13:43:51.747000+01:00 +Internet,case-5355,2011-02-24 00:00:00+01:00,General,2011-04-07 15:45:12.541000+02:00,2011-02-24 00:00:00.010000+01:00,,Resource12,2010-12-30 00:00:00.010000+01:00,task-14729,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-03-02 08:27:07.117000+01:00 +Internet,case-5355,2011-02-24 00:00:00+01:00,General,2011-04-07 15:45:12.541000+02:00,2011-02-24 00:00:00.010000+01:00,,Resource12,2010-12-30 00:00:00.010000+01:00,task-14730,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-03-02 08:33:01.590000+01:00 +Internet,case-5355,2011-02-24 00:00:00+01:00,General,2011-04-07 15:45:12.541000+02:00,2011-02-24 00:00:00.010000+01:00,,Resource12,2010-12-30 00:00:00.010000+01:00,task-14842,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-03-02 08:33:39.344000+01:00 +Internet,case-5355,2011-02-24 00:00:00+01:00,General,2011-04-07 15:45:12.541000+02:00,2011-02-24 00:00:00.010000+01:00,,Resource12,2010-12-30 00:00:00.010000+01:00,task-14828,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-02 09:00:13.975000+01:00 +Internet,case-5355,2011-02-24 00:00:00+01:00,General,2011-04-07 15:45:12.541000+02:00,2011-02-24 00:00:00.010000+01:00,,Resource12,2010-12-30 00:00:00.010000+01:00,task-14859,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-02 14:26:03.181000+01:00 +Internet,case-5372,2011-10-06 01:06:40+02:00,General,2011-10-03 16:33:42.541000+02:00,2011-10-06 01:06:40.020000+02:00,,Resource04,2010-12-30 01:06:40.010000+01:00,task-8779,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-25 08:28:31.212000+01:00 +Internet,case-5372,2011-10-06 01:06:40+02:00,General,2011-10-03 16:33:42.541000+02:00,2011-10-06 01:06:40.020000+02:00,,Resource04,2010-12-30 01:06:40.010000+01:00,task-9399,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-25 08:28:50.452000+01:00 +Internet,case-5372,2011-10-06 01:06:40+02:00,General,2011-10-03 16:33:42.541000+02:00,2011-10-06 01:06:40.020000+02:00,,Resource04,2010-12-30 01:06:40.010000+01:00,task-9401,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-25 12:25:56.074000+01:00 +Internet,case-5372,2011-10-06 01:06:40+02:00,General,2011-10-03 16:33:42.541000+02:00,2011-10-06 01:06:40.020000+02:00,,Resource04,2010-12-30 01:06:40.010000+01:00,task-9479,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 13:34:52.394000+01:00 +Internet,case-5372,2011-10-06 01:06:40+02:00,General,2011-10-03 16:33:42.541000+02:00,2011-10-06 01:06:40.020000+02:00,,Resource04,2010-12-30 01:06:40.010000+01:00,task-9400,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-02-07 12:19:06.668000+01:00 +Internet,case-5372,2011-10-06 01:06:40+02:00,General,2011-10-03 16:33:42.541000+02:00,2011-10-06 01:06:40.020000+02:00,,Resource04,2010-12-30 01:06:40.010000+01:00,task-11226,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-02-07 12:19:21.429000+01:00 +Internet,case-5377,2011-02-24 01:06:40+01:00,General,2011-02-08 14:43:40.566000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource09,2010-12-30 01:06:40.010000+01:00,task-8808,Confirmation of receipt,complete,EMPTY,admin2,2011-02-08 14:43:41.336000+01:00 +Internet,case-5378,2011-06-23 01:06:40+02:00,General,2011-06-27 09:48:16.948000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-8840,Confirmation of receipt,complete,EMPTY,Resource15,2011-01-25 08:50:39.572000+01:00 +Internet,case-5378,2011-06-23 01:06:40+02:00,General,2011-06-27 09:48:16.948000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-9402,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-01-25 08:50:58.132000+01:00 +Internet,case-5378,2011-06-23 01:06:40+02:00,General,2011-06-27 09:48:16.948000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-9403,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-25 08:51:18.222000+01:00 +Internet,case-5378,2011-06-23 01:06:40+02:00,General,2011-06-27 09:48:16.948000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-9405,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-25 08:56:09.803000+01:00 +Internet,case-5378,2011-06-23 01:06:40+02:00,General,2011-06-27 09:48:16.948000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-9404,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-25 12:06:45.847000+01:00 +Internet,case-5378,2011-06-23 01:06:40+02:00,General,2011-06-27 09:48:16.948000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-9473,T05 Print and send confirmation of receipt,complete,Group 2,Resource15,2011-01-27 12:36:49.981000+01:00 +Internet,case-5379,2011-02-24 00:00:00+01:00,General,2011-02-23 09:52:26.725000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource04,2010-12-30 00:00:00.010000+01:00,task-8845,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-26 08:48:44.956000+01:00 +Internet,case-5379,2011-02-24 00:00:00+01:00,General,2011-02-23 09:52:26.725000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource04,2010-12-30 00:00:00.010000+01:00,task-9582,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-26 08:48:57.670000+01:00 +Internet,case-5379,2011-02-24 00:00:00+01:00,General,2011-02-23 09:52:26.725000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource04,2010-12-30 00:00:00.010000+01:00,task-9584,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-27 09:03:25.903000+01:00 +Internet,case-5379,2011-02-24 00:00:00+01:00,General,2011-02-23 09:52:26.725000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource04,2010-12-30 00:00:00.010000+01:00,task-9719,T05 Print and send confirmation of receipt,complete,EMPTY,Resource04,2011-02-07 12:34:15.775000+01:00 +Internet,case-5379,2011-02-24 00:00:00+01:00,General,2011-02-23 09:52:26.725000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource04,2010-12-30 00:00:00.010000+01:00,task-9583,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-02-07 13:38:33.219000+01:00 +Internet,case-5379,2011-02-24 00:00:00+01:00,General,2011-02-23 09:52:26.725000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource04,2010-12-30 00:00:00.010000+01:00,task-11251,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-02-07 13:38:45.419000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-8885,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-01 16:35:39.977000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10486,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-02-01 16:37:33.275000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10487,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-02 09:12:07.958000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10545,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-02-02 09:19:05.488000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10554,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-02 09:21:52.637000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10555,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource02,2011-02-02 09:22:52.817000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10557,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-02 09:23:40.770000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10559,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-02-02 09:24:33.044000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10560,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-02 09:24:55.446000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10561,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-02 09:25:15.384000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10488,T04 Determine confirmation of receipt,complete,EMPTY,Resource02,2011-02-02 10:49:15.212000+01:00 +Desk,case-5380,2011-03-04 01:06:40+01:00,General,2011-02-04 15:10:26.588000+01:00,2011-03-04 01:06:40.010000+01:00,,Resource02,2011-01-07 01:06:40.010000+01:00,task-10632,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-02-02 10:51:01.951000+01:00 +Internet,case-5381,2011-02-24 00:00:00+01:00,General,2011-02-15 10:33:29.582000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-8886,Confirmation of receipt,complete,Group 1,Resource18,2011-01-20 13:56:59.677000+01:00 +Internet,case-5381,2011-02-24 00:00:00+01:00,General,2011-02-15 10:33:29.582000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-9084,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-01-20 13:59:54.727000+01:00 +Internet,case-5381,2011-02-24 00:00:00+01:00,General,2011-02-15 10:33:29.582000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-9086,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-01-20 14:00:12.609000+01:00 +Internet,case-5381,2011-02-24 00:00:00+01:00,General,2011-02-15 10:33:29.582000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-9087,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 12:00:28.441000+01:00 +Internet,case-5381,2011-02-24 00:00:00+01:00,General,2011-02-15 10:33:29.582000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-9085,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-25 09:13:56.754000+01:00 +Internet,case-5381,2011-02-24 00:00:00+01:00,General,2011-02-15 10:33:29.582000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-9410,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-25 09:14:15.919000+01:00 +Desk,case-5382,2011-04-12 01:06:40+02:00,General,2011-04-07 12:04:53.294000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource17,2010-12-21 01:06:40.010000+01:00,task-8887,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-10 11:26:36.273000+01:00 +Desk,case-5382,2011-04-12 01:06:40+02:00,General,2011-04-07 12:04:53.294000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource17,2010-12-21 01:06:40.010000+01:00,task-11660,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-02-10 11:38:31.394000+01:00 +Desk,case-5382,2011-04-12 01:06:40+02:00,General,2011-04-07 12:04:53.294000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource17,2010-12-21 01:06:40.010000+01:00,task-11662,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-10 11:42:11.791000+01:00 +Desk,case-5382,2011-04-12 01:06:40+02:00,General,2011-04-07 12:04:53.294000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource17,2010-12-21 01:06:40.010000+01:00,task-11677,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-10 11:42:29.053000+01:00 +Desk,case-5382,2011-04-12 01:06:40+02:00,General,2011-04-07 12:04:53.294000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource17,2010-12-21 01:06:40.010000+01:00,task-11676,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-10 12:00:29.578000+01:00 +Desk,case-5382,2011-04-12 01:06:40+02:00,General,2011-04-07 12:04:53.294000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource17,2010-12-21 01:06:40.010000+01:00,task-11700,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-11 09:09:15.209000+01:00 +Desk,case-5383,2011-02-23 00:00:00+01:00,General,2011-03-04 15:53:21.175000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource04,2010-12-29 00:00:00.010000+01:00,task-8888,Confirmation of receipt,complete,EMPTY,Resource04,2011-01-28 15:29:43.786000+01:00 +Desk,case-5383,2011-02-23 00:00:00+01:00,General,2011-03-04 15:53:21.175000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource04,2010-12-29 00:00:00.010000+01:00,task-10081,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-28 15:30:00.274000+01:00 +Desk,case-5383,2011-02-23 00:00:00+01:00,General,2011-03-04 15:53:21.175000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource04,2010-12-29 00:00:00.010000+01:00,task-10083,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-01-28 15:30:14.758000+01:00 +Desk,case-5383,2011-02-23 00:00:00+01:00,General,2011-03-04 15:53:21.175000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource04,2010-12-29 00:00:00.010000+01:00,task-10084,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-01-28 15:31:20.711000+01:00 +Desk,case-5383,2011-02-23 00:00:00+01:00,General,2011-03-04 15:53:21.175000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource04,2010-12-29 00:00:00.010000+01:00,task-10082,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-02-04 14:18:50.548000+01:00 +Desk,case-5383,2011-02-23 00:00:00+01:00,General,2011-03-04 15:53:21.175000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource04,2010-12-29 00:00:00.010000+01:00,task-10990,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-02-04 14:19:04.058000+01:00 +Desk,case-5385,2011-02-24 01:06:40+01:00,Customer contact,2011-01-26 14:03:16.115000+01:00,2011-02-24 01:06:40.010000+01:00,,Resource03,2010-12-30 01:06:40.010000+01:00,task-8890,Confirmation of receipt,complete,EMPTY,admin2,2011-01-26 14:03:17.013000+01:00 +Internet,case-5397,2011-02-25 00:00:00+01:00,General,2011-02-08 10:30:23.514000+01:00,2011-02-25 00:00:00.010000+01:00,,Resource01,2010-12-31 00:00:00.010000+01:00,task-8933,Confirmation of receipt,complete,EMPTY,Resource01,2011-01-27 12:56:08.180000+01:00 +Internet,case-5397,2011-02-25 00:00:00+01:00,General,2011-02-08 10:30:23.514000+01:00,2011-02-25 00:00:00.010000+01:00,,Resource01,2010-12-31 00:00:00.010000+01:00,task-9850,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-01-27 12:56:23.514000+01:00 +Internet,case-5397,2011-02-25 00:00:00+01:00,General,2011-02-08 10:30:23.514000+01:00,2011-02-25 00:00:00.010000+01:00,,Resource01,2010-12-31 00:00:00.010000+01:00,task-9851,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-27 12:59:55.993000+01:00 +Internet,case-5397,2011-02-25 00:00:00+01:00,General,2011-02-08 10:30:23.514000+01:00,2011-02-25 00:00:00.010000+01:00,,Resource01,2010-12-31 00:00:00.010000+01:00,task-9854,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-27 13:00:37.807000+01:00 +Internet,case-5397,2011-02-25 00:00:00+01:00,General,2011-02-08 10:30:23.514000+01:00,2011-02-25 00:00:00.010000+01:00,,Resource01,2010-12-31 00:00:00.010000+01:00,task-9852,T04 Determine confirmation of receipt,complete,EMPTY,Resource07,2011-02-03 10:05:31.598000+01:00 +Internet,case-5397,2011-02-25 00:00:00+01:00,General,2011-02-08 10:30:23.514000+01:00,2011-02-25 00:00:00.010000+01:00,,Resource01,2010-12-31 00:00:00.010000+01:00,task-10776,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-03 10:06:00.875000+01:00 +Internet,case-5398,2011-03-28 01:06:40+02:00,General,2011-03-18 12:04:12.415000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource04,2010-12-31 01:06:40.010000+01:00,task-8949,Confirmation of receipt,complete,Group 1,Resource04,2011-01-19 16:28:08.208000+01:00 +Internet,case-5398,2011-03-28 01:06:40+02:00,General,2011-03-18 12:04:12.415000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource04,2010-12-31 01:06:40.010000+01:00,task-9019,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-01-21 09:14:19.467000+01:00 +Internet,case-5398,2011-03-28 01:06:40+02:00,General,2011-03-18 12:04:12.415000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource04,2010-12-31 01:06:40.010000+01:00,task-9186,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-01-21 09:14:32.449000+01:00 +Internet,case-5398,2011-03-28 01:06:40+02:00,General,2011-03-18 12:04:12.415000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource04,2010-12-31 01:06:40.010000+01:00,task-9020,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-01-21 09:14:58.812000+01:00 +Internet,case-5398,2011-03-28 01:06:40+02:00,General,2011-03-18 12:04:12.415000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource04,2010-12-31 01:06:40.010000+01:00,task-9189,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-01-21 09:15:11.544000+01:00 +Internet,case-5398,2011-03-28 01:06:40+02:00,General,2011-03-18 12:04:12.415000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource04,2010-12-31 01:06:40.010000+01:00,task-9188,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 12:13:40.735000+01:00 +Internet,case-5401,2011-02-24 00:00:00+01:00,General,2011-02-24 10:18:42.399000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-8952,Confirmation of receipt,complete,Group 1,Resource18,2011-01-20 14:06:00.418000+01:00 +Internet,case-5401,2011-02-24 00:00:00+01:00,General,2011-02-24 10:18:42.399000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-9088,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-01-20 14:09:11.295000+01:00 +Internet,case-5401,2011-02-24 00:00:00+01:00,General,2011-02-24 10:18:42.399000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-9091,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-01-20 14:09:32.926000+01:00 +Internet,case-5401,2011-02-24 00:00:00+01:00,General,2011-02-24 10:18:42.399000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-9092,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-01-24 11:08:35.372000+01:00 +Internet,case-5401,2011-02-24 00:00:00+01:00,General,2011-02-24 10:18:42.399000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-9089,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-01-25 10:03:39.049000+01:00 +Internet,case-5401,2011-02-24 00:00:00+01:00,General,2011-02-24 10:18:42.399000+01:00,2011-02-24 00:00:00.010000+01:00,,Resource18,2010-12-30 00:00:00.010000+01:00,task-9432,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-01-25 10:03:58.554000+01:00 +Internet,case-5405,2011-05-30 01:06:40+02:00,General,2011-05-30 11:00:16.928000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource17,2010-12-31 01:06:40.010000+01:00,task-8960,Confirmation of receipt,complete,EMPTY,Resource17,2011-01-27 15:26:47.162000+01:00 +Internet,case-5405,2011-05-30 01:06:40+02:00,General,2011-05-30 11:00:16.928000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource17,2010-12-31 01:06:40.010000+01:00,task-9911,T02 Check confirmation of receipt,complete,Group 4,Resource17,2011-01-27 15:27:04.749000+01:00 +Internet,case-5405,2011-05-30 01:06:40+02:00,General,2011-05-30 11:00:16.928000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource17,2010-12-31 01:06:40.010000+01:00,task-9913,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-01-27 15:27:16.374000+01:00 +Internet,case-5405,2011-05-30 01:06:40+02:00,General,2011-05-30 11:00:16.928000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource17,2010-12-31 01:06:40.010000+01:00,task-9914,T05 Print and send confirmation of receipt,complete,EMPTY,Resource17,2011-01-27 15:29:54.206000+01:00 +Internet,case-5405,2011-05-30 01:06:40+02:00,General,2011-05-30 11:00:16.928000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource17,2010-12-31 01:06:40.010000+01:00,task-9912,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-01-28 14:30:22.451000+01:00 +Internet,case-5405,2011-05-30 01:06:40+02:00,General,2011-05-30 11:00:16.928000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource17,2010-12-31 01:06:40.010000+01:00,task-10046,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-01-28 14:30:42.716000+01:00 +Desk,case-5406,2011-02-23 00:00:00+01:00,General,2011-02-17 16:41:02.698000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource07,2010-12-29 00:00:00.010000+01:00,task-8962,Confirmation of receipt,complete,EMPTY,Resource01,2011-01-27 14:34:17.431000+01:00 +Desk,case-5406,2011-02-23 00:00:00+01:00,General,2011-02-17 16:41:02.698000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource07,2010-12-29 00:00:00.010000+01:00,task-9891,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-01-27 14:34:41.072000+01:00 +Desk,case-5406,2011-02-23 00:00:00+01:00,General,2011-02-17 16:41:02.698000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource07,2010-12-29 00:00:00.010000+01:00,task-9892,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-01-27 14:44:42.382000+01:00 +Desk,case-5406,2011-02-23 00:00:00+01:00,General,2011-02-17 16:41:02.698000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource07,2010-12-29 00:00:00.010000+01:00,task-9895,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-01-27 14:47:13.317000+01:00 +Desk,case-5406,2011-02-23 00:00:00+01:00,General,2011-02-17 16:41:02.698000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource07,2010-12-29 00:00:00.010000+01:00,task-9893,T04 Determine confirmation of receipt,complete,EMPTY,Resource07,2011-02-03 11:10:54.978000+01:00 +Desk,case-5406,2011-02-23 00:00:00+01:00,General,2011-02-17 16:41:02.698000+01:00,2011-02-23 00:00:00.010000+01:00,,Resource07,2010-12-29 00:00:00.010000+01:00,task-10793,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-03 11:11:24.300000+01:00 +Desk,case-5418,2011-03-04 00:00:00+01:00,General,2011-02-22 09:30:55.455000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource07,2011-01-07 00:00:00.010000+01:00,task-9059,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-24 17:06:35.720000+01:00 +Desk,case-5418,2011-03-04 00:00:00+01:00,General,2011-02-22 09:30:55.455000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource07,2011-01-07 00:00:00.010000+01:00,task-9388,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-26 13:05:07.161000+01:00 +Desk,case-5418,2011-03-04 00:00:00+01:00,General,2011-02-22 09:30:55.455000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource07,2011-01-07 00:00:00.010000+01:00,task-9658,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-01-26 13:05:22.117000+01:00 +Desk,case-5418,2011-03-04 00:00:00+01:00,General,2011-02-22 09:30:55.455000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource07,2011-01-07 00:00:00.010000+01:00,task-9659,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-27 09:18:53.526000+01:00 +Desk,case-5418,2011-03-04 00:00:00+01:00,General,2011-02-22 09:30:55.455000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource07,2011-01-07 00:00:00.010000+01:00,task-9389,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-31 14:17:14.446000+01:00 +Desk,case-5418,2011-03-04 00:00:00+01:00,General,2011-02-22 09:30:55.455000+01:00,2011-03-04 00:00:00.010000+01:00,,Resource07,2011-01-07 00:00:00.010000+01:00,task-10243,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-01-31 14:21:42.504000+01:00 +Desk,case-5419,2011-03-01 00:00:00+01:00,General,2011-02-15 14:59:06.211000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource35,2011-01-04 00:00:00.010000+01:00,task-9060,Confirmation of receipt,complete,EMPTY,admin2,2011-02-15 14:59:07.340000+01:00 +Internet,case-5457,2011-03-03 00:00:00+01:00,General,2011-04-21 00:00:00.020000+02:00,2011-03-03 00:00:00.010000+01:00,,Resource09,2011-01-06 00:00:00.010000+01:00,task-9302,Confirmation of receipt,complete,EMPTY,Resource09,2011-02-22 08:47:36.176000+01:00 +Internet,case-5457,2011-03-03 00:00:00+01:00,General,2011-04-21 00:00:00.020000+02:00,2011-03-03 00:00:00.010000+01:00,,Resource09,2011-01-06 00:00:00.010000+01:00,task-13446,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-02-22 08:48:39.670000+01:00 +Internet,case-5457,2011-03-03 00:00:00+01:00,General,2011-04-21 00:00:00.020000+02:00,2011-03-03 00:00:00.010000+01:00,,Resource09,2011-01-06 00:00:00.010000+01:00,task-13447,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-02-22 08:49:05.234000+01:00 +Internet,case-5457,2011-03-03 00:00:00+01:00,General,2011-04-21 00:00:00.020000+02:00,2011-03-03 00:00:00.010000+01:00,,Resource09,2011-01-06 00:00:00.010000+01:00,task-13445,T02 Check confirmation of receipt,complete,EMPTY,Resource39,2011-05-04 13:31:54.094000+02:00 +Internet,case-5457,2011-03-03 00:00:00+01:00,General,2011-04-21 00:00:00.020000+02:00,2011-03-03 00:00:00.010000+01:00,,Resource09,2011-01-06 00:00:00.010000+01:00,task-23757,T04 Determine confirmation of receipt,complete,EMPTY,admin2,2011-05-24 12:03:42.916000+02:00 +Desk,case-5462,2011-03-07 01:06:40+01:00,General,2011-01-28 12:03:52.245000+01:00,2011-03-07 01:06:40.010000+01:00,,Resource26,2011-01-10 01:06:40.010000+01:00,task-9344,Confirmation of receipt,complete,EMPTY,Resource26,2011-01-26 08:49:48.547000+01:00 +Desk,case-5462,2011-03-07 01:06:40+01:00,General,2011-01-28 12:03:52.245000+01:00,2011-03-07 01:06:40.010000+01:00,,Resource26,2011-01-10 01:06:40.010000+01:00,task-9586,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-01-26 08:50:30.333000+01:00 +Desk,case-5462,2011-03-07 01:06:40+01:00,General,2011-01-28 12:03:52.245000+01:00,2011-03-07 01:06:40.010000+01:00,,Resource26,2011-01-10 01:06:40.010000+01:00,task-9588,T10 Determine necessity to stop indication,complete,Group 1,Resource26,2011-01-26 08:50:52.694000+01:00 +Desk,case-5462,2011-03-07 01:06:40+01:00,General,2011-01-28 12:03:52.245000+01:00,2011-03-07 01:06:40.010000+01:00,,Resource26,2011-01-10 01:06:40.010000+01:00,task-9585,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-27 10:34:33.729000+01:00 +Desk,case-5462,2011-03-07 01:06:40+01:00,General,2011-01-28 12:03:52.245000+01:00,2011-03-07 01:06:40.010000+01:00,,Resource26,2011-01-10 01:06:40.010000+01:00,task-9768,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-27 10:34:47.547000+01:00 +Desk,case-5462,2011-03-07 01:06:40+01:00,General,2011-01-28 12:03:52.245000+01:00,2011-03-07 01:06:40.010000+01:00,,Resource26,2011-01-10 01:06:40.010000+01:00,task-9771,T05 Print and send confirmation of receipt,complete,Group 2,admin2,2011-01-28 12:03:53.599000+01:00 +Desk,case-5462,2011-03-07 01:06:40+01:00,General,2011-01-28 12:03:52.245000+01:00,2011-03-07 01:06:40.010000+01:00,,Resource26,2011-01-10 01:06:40.010000+01:00,task-9590,T11 Create document X request unlicensed,complete,Group 1,admin2,2011-01-28 12:03:54.080000+01:00 +Internet,case-5469,2011-03-08 01:06:40+01:00,General,2011-04-07 15:42:13.759000+02:00,2011-02-08 01:06:40.010000+01:00,,Resource22,2010-12-14 01:06:40.010000+01:00,task-9383,Confirmation of receipt,complete,EMPTY,admin2,2011-04-07 15:42:14.621000+02:00 +Desk,case-5482,2011-02-10 00:00:00+01:00,General,2011-01-28 14:59:54.161000+01:00,2011-02-10 00:00:00.010000+01:00,,Resource18,2010-12-16 00:00:00.010000+01:00,task-9528,Confirmation of receipt,complete,EMPTY,admin2,2011-01-28 14:59:55.010000+01:00 +Desk,case-5483,2011-02-11 01:06:40+01:00,General,2011-01-28 15:00:49.640000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource18,2010-12-17 01:06:40.010000+01:00,task-9549,Confirmation of receipt,complete,EMPTY,admin2,2011-01-28 15:00:50.404000+01:00 +Desk,case-5484,2011-02-16 00:00:00+01:00,General,2011-01-28 15:46:53.371000+01:00,2011-02-16 00:00:00.010000+01:00,,Resource18,2010-12-22 00:00:00.010000+01:00,task-9550,Confirmation of receipt,complete,EMPTY,admin2,2011-01-28 15:46:54.296000+01:00 +Intern,case-5503,2011-03-10 01:06:40+01:00,General,2011-02-04 16:05:09.655000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource11,2011-01-13 01:06:40.010000+01:00,task-9574,Confirmation of receipt,complete,EMPTY,Resource11,2011-01-26 10:05:01.299000+01:00 +Intern,case-5503,2011-03-10 01:06:40+01:00,General,2011-02-04 16:05:09.655000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource11,2011-01-13 01:06:40.010000+01:00,task-9611,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-01-26 10:05:50.741000+01:00 +Intern,case-5503,2011-03-10 01:06:40+01:00,General,2011-02-04 16:05:09.655000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource11,2011-01-13 01:06:40.010000+01:00,task-9612,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-01-26 10:06:19.899000+01:00 +Intern,case-5503,2011-03-10 01:06:40+01:00,General,2011-02-04 16:05:09.655000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource11,2011-01-13 01:06:40.010000+01:00,task-9610,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-26 13:17:25.720000+01:00 +Intern,case-5503,2011-03-10 01:06:40+01:00,General,2011-02-04 16:05:09.655000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource11,2011-01-13 01:06:40.010000+01:00,task-9668,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-01-26 13:18:42.196000+01:00 +Intern,case-5503,2011-03-10 01:06:40+01:00,General,2011-02-04 16:05:09.655000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource11,2011-01-13 01:06:40.010000+01:00,task-9669,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-27 09:20:35.668000+01:00 +Internet,case-5504,2011-03-14 00:00:00+01:00,General,2011-02-04 12:16:16.911000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource11,2011-01-17 00:00:00.010000+01:00,task-9592,Confirmation of receipt,complete,Group 1,Resource11,2011-01-26 09:23:48.980000+01:00 +Internet,case-5504,2011-03-14 00:00:00+01:00,General,2011-02-04 12:16:16.911000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource11,2011-01-17 00:00:00.010000+01:00,task-9595,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-01-26 09:24:08.406000+01:00 +Internet,case-5504,2011-03-14 00:00:00+01:00,General,2011-02-04 12:16:16.911000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource11,2011-01-17 00:00:00.010000+01:00,task-9596,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-01-26 09:25:31.414000+01:00 +Internet,case-5504,2011-03-14 00:00:00+01:00,General,2011-02-04 12:16:16.911000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource11,2011-01-17 00:00:00.010000+01:00,task-9594,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-01-26 13:09:30.634000+01:00 +Internet,case-5504,2011-03-14 00:00:00+01:00,General,2011-02-04 12:16:16.911000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource11,2011-01-17 00:00:00.010000+01:00,task-9662,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-01-26 13:10:26.279000+01:00 +Internet,case-5504,2011-03-14 00:00:00+01:00,General,2011-02-04 12:16:16.911000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource11,2011-01-17 00:00:00.010000+01:00,task-9663,T05 Print and send confirmation of receipt,complete,EMPTY,Resource07,2011-01-27 09:23:52.738000+01:00 +Internet,case-5510,2011-03-08 01:06:40+01:00,Customer contact,2011-02-08 09:06:06.356000+01:00,2011-03-08 01:06:40.010000+01:00,,admin3,2011-01-11 01:06:40.010000+01:00,task-9636,Confirmation of receipt,complete,EMPTY,admin2,2011-02-08 09:06:07.304000+01:00 +Internet,case-5512,2011-03-09 01:06:40+01:00,General,2011-03-02 15:58:38.081000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource08,2011-01-12 01:06:40.010000+01:00,task-9638,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-01 09:33:52.903000+01:00 +Internet,case-5512,2011-03-09 01:06:40+01:00,General,2011-03-02 15:58:38.081000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource08,2011-01-12 01:06:40.010000+01:00,task-10369,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-01 09:35:13.754000+01:00 +Internet,case-5512,2011-03-09 01:06:40+01:00,General,2011-03-02 15:58:38.081000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource08,2011-01-12 01:06:40.010000+01:00,task-10370,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-01 09:35:29.345000+01:00 +Internet,case-5512,2011-03-09 01:06:40+01:00,General,2011-03-02 15:58:38.081000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource08,2011-01-12 01:06:40.010000+01:00,task-10372,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-01 09:35:51.153000+01:00 +Internet,case-5512,2011-03-09 01:06:40+01:00,General,2011-03-02 15:58:38.081000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource08,2011-01-12 01:06:40.010000+01:00,task-10371,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-01 15:12:57.030000+01:00 +Internet,case-5512,2011-03-09 01:06:40+01:00,General,2011-03-02 15:58:38.081000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource08,2011-01-12 01:06:40.010000+01:00,task-10442,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 14:37:24.440000+01:00 +Desk,case-5517,2011-03-10 01:06:40+01:00,General,2011-03-03 13:45:12.539000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource13,2011-01-13 01:06:40.010000+01:00,task-9679,Confirmation of receipt,complete,Group 1,Resource13,2011-01-27 11:11:33.565000+01:00 +Desk,case-5517,2011-03-10 01:06:40+01:00,General,2011-03-03 13:45:12.539000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource13,2011-01-13 01:06:40.010000+01:00,task-9787,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-01-27 11:50:45.604000+01:00 +Desk,case-5517,2011-03-10 01:06:40+01:00,General,2011-03-03 13:45:12.539000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource13,2011-01-13 01:06:40.010000+01:00,task-9814,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-27 11:50:59.589000+01:00 +Desk,case-5517,2011-03-10 01:06:40+01:00,General,2011-03-03 13:45:12.539000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource13,2011-01-13 01:06:40.010000+01:00,task-9815,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-02-02 08:28:32.263000+01:00 +Desk,case-5517,2011-03-10 01:06:40+01:00,General,2011-03-03 13:45:12.539000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource13,2011-01-13 01:06:40.010000+01:00,task-9788,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-02-02 08:28:50.038000+01:00 +Desk,case-5517,2011-03-10 01:06:40+01:00,General,2011-03-03 13:45:12.539000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource13,2011-01-13 01:06:40.010000+01:00,task-10514,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-02-02 08:29:13.189000+01:00 +Desk,case-5517,2011-03-10 01:06:40+01:00,General,2011-03-03 13:45:12.539000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource13,2011-01-13 01:06:40.010000+01:00,task-10515,T16 Report reasons to hold request,complete,Group 1,Resource13,2011-02-02 08:34:01.141000+01:00 +Desk,case-5517,2011-03-10 01:06:40+01:00,General,2011-03-03 13:45:12.539000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource13,2011-01-13 01:06:40.010000+01:00,task-10519,T17 Check report Y to stop indication,complete,EMPTY,Resource13,2011-02-02 08:35:14.052000+01:00 +Desk,case-5517,2011-03-10 01:06:40+01:00,General,2011-03-03 13:45:12.539000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource13,2011-01-13 01:06:40.010000+01:00,task-10521,T19 Determine report Y to stop indication,complete,Group 3,Resource13,2011-02-02 08:35:55.993000+01:00 +Desk,case-5517,2011-03-10 01:06:40+01:00,General,2011-03-03 13:45:12.539000+01:00,2011-03-10 01:06:40.010000+01:00,,Resource13,2011-01-13 01:06:40.010000+01:00,task-10522,T20 Print report Y to stop indication,complete,Group 2,Resource13,2011-02-02 08:36:13.619000+01:00 +Desk,case-5519,2011-03-11 01:06:40+01:00,General,2011-02-24 08:49:04.322000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource11,2011-01-14 01:06:40.010000+01:00,task-9688,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-31 16:19:31.273000+01:00 +Desk,case-5519,2011-03-11 01:06:40+01:00,General,2011-02-24 08:49:04.322000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource11,2011-01-14 01:06:40.010000+01:00,task-10324,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-01-31 16:20:02.135000+01:00 +Desk,case-5519,2011-03-11 01:06:40+01:00,General,2011-02-24 08:49:04.322000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource11,2011-01-14 01:06:40.010000+01:00,task-10325,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-31 16:20:24.743000+01:00 +Desk,case-5519,2011-03-11 01:06:40+01:00,General,2011-02-24 08:49:04.322000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource11,2011-01-14 01:06:40.010000+01:00,task-10326,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-01-31 16:33:38.948000+01:00 +Desk,case-5519,2011-03-11 01:06:40+01:00,General,2011-02-24 08:49:04.322000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource11,2011-01-14 01:06:40.010000+01:00,task-10333,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 14:19:51.604000+01:00 +Desk,case-5519,2011-03-11 01:06:40+01:00,General,2011-02-24 08:49:04.322000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource11,2011-01-14 01:06:40.010000+01:00,task-10327,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-10 09:17:57.972000+01:00 +Desk,case-5520,2011-03-09 01:06:40+01:00,General,2011-03-11 12:23:42.322000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource11,2011-01-12 01:06:40.010000+01:00,task-9691,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-31 15:24:36.539000+01:00 +Desk,case-5520,2011-03-09 01:06:40+01:00,General,2011-03-11 12:23:42.322000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource11,2011-01-12 01:06:40.010000+01:00,task-10304,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-01-31 15:24:55.041000+01:00 +Desk,case-5520,2011-03-09 01:06:40+01:00,General,2011-03-11 12:23:42.322000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource11,2011-01-12 01:06:40.010000+01:00,task-10306,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-01-31 15:25:06.852000+01:00 +Desk,case-5520,2011-03-09 01:06:40+01:00,General,2011-03-11 12:23:42.322000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource11,2011-01-12 01:06:40.010000+01:00,task-10307,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-31 15:25:22.986000+01:00 +Desk,case-5520,2011-03-09 01:06:40+01:00,General,2011-03-11 12:23:42.322000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource11,2011-01-12 01:06:40.010000+01:00,task-10305,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-01-31 15:25:34.905000+01:00 +Desk,case-5520,2011-03-09 01:06:40+01:00,General,2011-03-11 12:23:42.322000+01:00,2011-03-09 01:06:40.010000+01:00,,Resource11,2011-01-12 01:06:40.010000+01:00,task-10308,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-08 15:05:57.935000+01:00 +Desk,case-5521,2011-02-11 01:06:40+01:00,General,2011-03-23 14:26:35.578000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-9708,Confirmation of receipt,complete,Group 1,Resource21,2011-01-27 10:16:05.297000+01:00 +Desk,case-5521,2011-02-11 01:06:40+01:00,General,2011-03-23 14:26:35.578000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-9744,T02 Check confirmation of receipt,complete,EMPTY,Resource09,2011-02-07 09:59:47.985000+01:00 +Desk,case-5521,2011-02-11 01:06:40+01:00,General,2011-03-23 14:26:35.578000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-9745,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-02-07 10:36:21.148000+01:00 +Desk,case-5521,2011-02-11 01:06:40+01:00,General,2011-03-23 14:26:35.578000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-11195,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-02-07 10:36:43.908000+01:00 +Desk,case-5521,2011-02-11 01:06:40+01:00,General,2011-03-23 14:26:35.578000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-11193,T04 Determine confirmation of receipt,complete,EMPTY,Resource09,2011-02-09 09:07:00.990000+01:00 +Desk,case-5521,2011-02-11 01:06:40+01:00,General,2011-03-23 14:26:35.578000+01:00,2011-02-11 01:06:40.010000+01:00,,Resource09,2010-12-17 01:06:40.010000+01:00,task-11443,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-02-09 09:07:17.986000+01:00 +Internet,case-5529,2011-03-11 01:06:40+01:00,General,2011-03-03 15:36:44.177000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource02,2011-01-14 01:06:40.010000+01:00,task-9716,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-07 11:11:07.485000+01:00 +Internet,case-5529,2011-03-11 01:06:40+01:00,General,2011-03-03 15:36:44.177000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource02,2011-01-14 01:06:40.010000+01:00,task-11201,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-07 11:15:21.902000+01:00 +Internet,case-5529,2011-03-11 01:06:40+01:00,General,2011-03-03 15:36:44.177000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource02,2011-01-14 01:06:40.010000+01:00,task-11203,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-02-07 11:20:12.503000+01:00 +Internet,case-5529,2011-03-11 01:06:40+01:00,General,2011-03-03 15:36:44.177000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource02,2011-01-14 01:06:40.010000+01:00,task-11204,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-02-07 11:21:19.202000+01:00 +Internet,case-5529,2011-03-11 01:06:40+01:00,General,2011-03-03 15:36:44.177000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource02,2011-01-14 01:06:40.010000+01:00,task-11202,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-07 11:21:45.194000+01:00 +Internet,case-5529,2011-03-11 01:06:40+01:00,General,2011-03-03 15:36:44.177000+01:00,2011-03-11 01:06:40.010000+01:00,,Resource02,2011-01-14 01:06:40.010000+01:00,task-11205,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-07 11:22:20.117000+01:00 +Internet,case-5530,2011-03-12 01:06:40+01:00,General,2011-02-22 14:41:05.508000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource17,2011-01-15 01:06:40.010000+01:00,task-9721,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-03 11:07:02.147000+01:00 +Internet,case-5530,2011-03-12 01:06:40+01:00,General,2011-02-22 14:41:05.508000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource17,2011-01-15 01:06:40.010000+01:00,task-10789,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-03 11:30:35.377000+01:00 +Internet,case-5530,2011-03-12 01:06:40+01:00,General,2011-02-22 14:41:05.508000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource17,2011-01-15 01:06:40.010000+01:00,task-10800,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-03 11:31:02.259000+01:00 +Internet,case-5530,2011-03-12 01:06:40+01:00,General,2011-02-22 14:41:05.508000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource17,2011-01-15 01:06:40.010000+01:00,task-10790,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-07 08:58:22.287000+01:00 +Internet,case-5530,2011-03-12 01:06:40+01:00,General,2011-02-22 14:41:05.508000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource17,2011-01-15 01:06:40.010000+01:00,task-11158,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-07 09:00:07.478000+01:00 +Internet,case-5530,2011-03-12 01:06:40+01:00,General,2011-02-22 14:41:05.508000+01:00,2011-03-12 01:06:40.010000+01:00,,Resource17,2011-01-15 01:06:40.010000+01:00,task-10801,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-02-07 10:01:03.436000+01:00 +Internet,case-5531,2011-03-14 00:00:00+01:00,General,2011-02-18 12:48:02.415000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource02,2011-01-17 00:00:00.010000+01:00,task-9723,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-18 12:31:08.898000+01:00 +Internet,case-5531,2011-03-14 00:00:00+01:00,General,2011-02-18 12:48:02.415000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource02,2011-01-17 00:00:00.010000+01:00,task-13033,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-18 12:31:23.873000+01:00 +Internet,case-5531,2011-03-14 00:00:00+01:00,General,2011-02-18 12:48:02.415000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource02,2011-01-17 00:00:00.010000+01:00,task-13036,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-02-18 12:31:39.196000+01:00 +Internet,case-5531,2011-03-14 00:00:00+01:00,General,2011-02-18 12:48:02.415000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource02,2011-01-17 00:00:00.010000+01:00,task-13037,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-02-18 12:31:49.205000+01:00 +Internet,case-5531,2011-03-14 00:00:00+01:00,General,2011-02-18 12:48:02.415000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource02,2011-01-17 00:00:00.010000+01:00,task-13034,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-18 12:32:05.080000+01:00 +Internet,case-5531,2011-03-14 00:00:00+01:00,General,2011-02-18 12:48:02.415000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource02,2011-01-17 00:00:00.010000+01:00,task-13039,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-18 12:32:43.980000+01:00 +Internet,case-5531,2011-03-14 00:00:00+01:00,General,2011-02-18 12:48:02.415000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource02,2011-01-17 00:00:00.010000+01:00,task-13043,T11 Create document X request unlicensed,complete,Group 1,Resource02,2011-02-18 12:46:14.108000+01:00 +Internet,case-5531,2011-03-14 00:00:00+01:00,General,2011-02-18 12:48:02.415000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource02,2011-01-17 00:00:00.010000+01:00,task-13058,T12 Check document X request unlicensed,complete,Group 4,Resource02,2011-02-18 12:46:27.790000+01:00 +Internet,case-5531,2011-03-14 00:00:00+01:00,General,2011-02-18 12:48:02.415000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource02,2011-01-17 00:00:00.010000+01:00,task-13059,T14 Determine document X request unlicensed,complete,Group 3,Resource02,2011-02-18 12:46:41.984000+01:00 +Internet,case-5531,2011-03-14 00:00:00+01:00,General,2011-02-18 12:48:02.415000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource02,2011-01-17 00:00:00.010000+01:00,task-13060,T15 Print document X request unlicensed,complete,Group 2,Resource02,2011-02-18 12:48:02.276000+01:00 +Desk,case-5532,2011-03-08 00:00:00+01:00,General,2011-02-24 08:38:09.385000+01:00,2011-03-08 00:00:00.010000+01:00,,Resource01,2011-01-11 00:00:00.010000+01:00,task-9730,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-31 16:36:17.331000+01:00 +Desk,case-5532,2011-03-08 00:00:00+01:00,General,2011-02-24 08:38:09.385000+01:00,2011-03-08 00:00:00.010000+01:00,,Resource01,2011-01-11 00:00:00.010000+01:00,task-10335,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-01 08:02:15.930000+01:00 +Desk,case-5532,2011-03-08 00:00:00+01:00,General,2011-02-24 08:38:09.385000+01:00,2011-03-08 00:00:00.010000+01:00,,Resource01,2011-01-11 00:00:00.010000+01:00,task-10359,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-01 08:02:35.437000+01:00 +Desk,case-5532,2011-03-08 00:00:00+01:00,General,2011-02-24 08:38:09.385000+01:00,2011-03-08 00:00:00.010000+01:00,,Resource01,2011-01-11 00:00:00.010000+01:00,task-10336,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-02 10:04:09.738000+01:00 +Desk,case-5532,2011-03-08 00:00:00+01:00,General,2011-02-24 08:38:09.385000+01:00,2011-03-08 00:00:00.010000+01:00,,Resource01,2011-01-11 00:00:00.010000+01:00,task-10602,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-02 10:05:33.092000+01:00 +Desk,case-5532,2011-03-08 00:00:00+01:00,General,2011-02-24 08:38:09.385000+01:00,2011-03-08 00:00:00.010000+01:00,,Resource01,2011-01-11 00:00:00.010000+01:00,task-10360,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 14:36:54.119000+01:00 +Internet,case-5533,2011-03-11 00:00:00+01:00,General,2011-02-15 11:25:09.252000+01:00,2011-03-11 00:00:00.010000+01:00,,Resource17,2011-01-14 00:00:00.010000+01:00,task-9731,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-14 08:39:23.914000+01:00 +Internet,case-5533,2011-03-11 00:00:00+01:00,General,2011-02-15 11:25:09.252000+01:00,2011-03-11 00:00:00.010000+01:00,,Resource17,2011-01-14 00:00:00.010000+01:00,task-12103,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-02-14 08:40:05.195000+01:00 +Internet,case-5533,2011-03-11 00:00:00+01:00,General,2011-02-15 11:25:09.252000+01:00,2011-03-11 00:00:00.010000+01:00,,Resource17,2011-01-14 00:00:00.010000+01:00,task-12104,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-14 08:40:18.353000+01:00 +Internet,case-5533,2011-03-11 00:00:00+01:00,General,2011-02-15 11:25:09.252000+01:00,2011-03-11 00:00:00.010000+01:00,,Resource17,2011-01-14 00:00:00.010000+01:00,task-12106,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-14 08:40:35.976000+01:00 +Internet,case-5533,2011-03-11 00:00:00+01:00,General,2011-02-15 11:25:09.252000+01:00,2011-03-11 00:00:00.010000+01:00,,Resource17,2011-01-14 00:00:00.010000+01:00,task-12107,T11 Create document X request unlicensed,complete,Group 1,Resource17,2011-02-14 08:57:35.249000+01:00 +Internet,case-5533,2011-03-11 00:00:00+01:00,General,2011-02-15 11:25:09.252000+01:00,2011-03-11 00:00:00.010000+01:00,,Resource17,2011-01-14 00:00:00.010000+01:00,task-12111,T12 Check document X request unlicensed,complete,EMPTY,Resource15,2011-02-14 09:17:01.432000+01:00 +Internet,case-5533,2011-03-11 00:00:00+01:00,General,2011-02-15 11:25:09.252000+01:00,2011-03-11 00:00:00.010000+01:00,,Resource17,2011-01-14 00:00:00.010000+01:00,task-12105,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-14 12:01:30.911000+01:00 +Internet,case-5533,2011-03-11 00:00:00+01:00,General,2011-02-15 11:25:09.252000+01:00,2011-03-11 00:00:00.010000+01:00,,Resource17,2011-01-14 00:00:00.010000+01:00,task-12119,T14 Determine document X request unlicensed,complete,Group 3,Resource10,2011-02-14 12:03:23.014000+01:00 +Internet,case-5533,2011-03-11 00:00:00+01:00,General,2011-02-15 11:25:09.252000+01:00,2011-03-11 00:00:00.010000+01:00,,Resource17,2011-01-14 00:00:00.010000+01:00,task-12160,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-15 11:21:45.035000+01:00 +Internet,case-5533,2011-03-11 00:00:00+01:00,General,2011-02-15 11:25:09.252000+01:00,2011-03-11 00:00:00.010000+01:00,,Resource17,2011-01-14 00:00:00.010000+01:00,task-12164,T15 Print document X request unlicensed,complete,Group 2,admin1,2011-02-15 11:25:09.113000+01:00 +Internet,case-5534,2011-04-07 01:06:40+02:00,General,2011-04-05 11:44:31.845000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-9732,Confirmation of receipt,complete,Group 1,Resource15,2011-01-28 15:01:55.547000+01:00 +Internet,case-5534,2011-04-07 01:06:40+02:00,General,2011-04-05 11:44:31.845000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-10067,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-01-28 15:02:42.463000+01:00 +Internet,case-5534,2011-04-07 01:06:40+02:00,General,2011-04-05 11:44:31.845000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-10069,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-01-28 15:02:58.272000+01:00 +Internet,case-5534,2011-04-07 01:06:40+02:00,General,2011-04-05 11:44:31.845000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-10070,T05 Print and send confirmation of receipt,complete,Group 2,Resource15,2011-01-28 15:03:08.687000+01:00 +Internet,case-5534,2011-04-07 01:06:40+02:00,General,2011-04-05 11:44:31.845000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-10068,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-02 10:00:16.614000+01:00 +Internet,case-5534,2011-04-07 01:06:40+02:00,General,2011-04-05 11:44:31.845000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource15,2010-12-30 01:06:40.010000+01:00,task-10597,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-02 10:00:43.977000+01:00 +Internet,case-5535,2011-03-14 01:06:40+01:00,General,2011-03-11 12:25:27.553000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource11,2011-01-17 01:06:40.010000+01:00,task-9733,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-08 13:49:59.784000+01:00 +Internet,case-5535,2011-03-14 01:06:40+01:00,General,2011-03-11 12:25:27.553000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource11,2011-01-17 01:06:40.010000+01:00,task-11394,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-08 13:50:36.598000+01:00 +Internet,case-5535,2011-03-14 01:06:40+01:00,General,2011-03-11 12:25:27.553000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource11,2011-01-17 01:06:40.010000+01:00,task-11395,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-08 13:55:10.041000+01:00 +Internet,case-5535,2011-03-14 01:06:40+01:00,General,2011-03-11 12:25:27.553000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource11,2011-01-17 01:06:40.010000+01:00,task-11393,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-02-08 14:43:02.610000+01:00 +Internet,case-5535,2011-03-14 01:06:40+01:00,General,2011-03-11 12:25:27.553000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource11,2011-01-17 01:06:40.010000+01:00,task-11412,T04 Determine confirmation of receipt,complete,EMPTY,Resource07,2011-02-10 09:45:41.590000+01:00 +Internet,case-5535,2011-03-14 01:06:40+01:00,General,2011-03-11 12:25:27.553000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource11,2011-01-17 01:06:40.010000+01:00,task-11608,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-10 09:45:54.059000+01:00 +Internet,case-5536,2011-03-14 01:06:40+01:00,General,2011-03-18 10:16:28.139000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource08,2011-01-17 01:06:40.010000+01:00,task-9738,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-10 13:13:09.414000+01:00 +Internet,case-5536,2011-03-14 01:06:40+01:00,General,2011-03-18 10:16:28.139000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource08,2011-01-17 01:06:40.010000+01:00,task-11750,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-10 13:13:25.364000+01:00 +Internet,case-5536,2011-03-14 01:06:40+01:00,General,2011-03-18 10:16:28.139000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource08,2011-01-17 01:06:40.010000+01:00,task-11751,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-10 13:14:55.089000+01:00 +Internet,case-5536,2011-03-14 01:06:40+01:00,General,2011-03-18 10:16:28.139000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource08,2011-01-17 01:06:40.010000+01:00,task-11756,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-10 13:15:11.585000+01:00 +Internet,case-5536,2011-03-14 01:06:40+01:00,General,2011-03-18 10:16:28.139000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource08,2011-01-17 01:06:40.010000+01:00,task-11752,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-02-11 08:49:04.649000+01:00 +Internet,case-5536,2011-03-14 01:06:40+01:00,General,2011-03-18 10:16:28.139000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource08,2011-01-17 01:06:40.010000+01:00,task-11841,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-11 09:12:14.412000+01:00 +Internet,case-5540,2011-03-15 00:00:00+01:00,General,2011-02-24 08:59:07.092000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-9778,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-01 16:42:32.524000+01:00 +Internet,case-5540,2011-03-15 00:00:00+01:00,General,2011-02-24 08:59:07.092000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-10489,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-01 16:42:46.188000+01:00 +Internet,case-5540,2011-03-15 00:00:00+01:00,General,2011-02-24 08:59:07.092000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-10491,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-01 16:43:00.397000+01:00 +Internet,case-5540,2011-03-15 00:00:00+01:00,General,2011-02-24 08:59:07.092000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-10492,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-01 16:43:10.482000+01:00 +Internet,case-5540,2011-03-15 00:00:00+01:00,General,2011-02-24 08:59:07.092000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-10490,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-02 08:58:45.206000+01:00 +Internet,case-5540,2011-03-15 00:00:00+01:00,General,2011-02-24 08:59:07.092000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-10534,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-02 08:59:40.397000+01:00 +Internet,case-5541,2011-03-15 00:00:00+01:00,General,2011-02-15 14:33:41.919000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource08,2011-01-18 00:00:00.010000+01:00,task-9785,Confirmation of receipt,complete,EMPTY,admin2,2011-02-15 14:33:43.076000+01:00 +Desk,case-5542,2011-03-10 00:00:00+01:00,General,2011-02-14 15:18:04.862000+01:00,2011-03-10 00:00:00.010000+01:00,,Resource06,2011-01-13 00:00:00.010000+01:00,task-9786,Confirmation of receipt,complete,EMPTY,admin2,2011-02-14 15:18:06.124000+01:00 +Internet,case-5543,2011-03-15 00:00:00+01:00,General,2011-03-01 09:28:52.160000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-9791,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-01 16:32:27.473000+01:00 +Internet,case-5543,2011-03-15 00:00:00+01:00,General,2011-03-01 09:28:52.160000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-10482,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-01 16:32:59.610000+01:00 +Internet,case-5543,2011-03-15 00:00:00+01:00,General,2011-03-01 09:28:52.160000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-10484,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-01 16:33:13.930000+01:00 +Internet,case-5543,2011-03-15 00:00:00+01:00,General,2011-03-01 09:28:52.160000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-10485,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-01 16:33:25.007000+01:00 +Internet,case-5543,2011-03-15 00:00:00+01:00,General,2011-03-01 09:28:52.160000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-10483,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-02 09:46:48.693000+01:00 +Internet,case-5543,2011-03-15 00:00:00+01:00,General,2011-03-01 09:28:52.160000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource01,2011-01-18 00:00:00.010000+01:00,task-10573,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-02 09:48:04.651000+01:00 +Internet,case-5545,2011-03-16 00:00:00+01:00,General,2011-04-08 10:31:15.081000+02:00,2011-03-16 00:00:00.010000+01:00,,Resource14,2011-01-19 00:00:00.010000+01:00,task-9806,Confirmation of receipt,complete,EMPTY,Resource14,2011-03-21 12:17:58.134000+01:00 +Internet,case-5545,2011-03-16 00:00:00+01:00,General,2011-04-08 10:31:15.081000+02:00,2011-03-16 00:00:00.010000+01:00,,Resource14,2011-01-19 00:00:00.010000+01:00,task-16965,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-03-21 12:18:17.101000+01:00 +Internet,case-5545,2011-03-16 00:00:00+01:00,General,2011-04-08 10:31:15.081000+02:00,2011-03-16 00:00:00.010000+01:00,,Resource14,2011-01-19 00:00:00.010000+01:00,task-16966,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-03-21 12:18:33.195000+01:00 +Internet,case-5545,2011-03-16 00:00:00+01:00,General,2011-04-08 10:31:15.081000+02:00,2011-03-16 00:00:00.010000+01:00,,Resource14,2011-01-19 00:00:00.010000+01:00,task-16964,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-03-21 12:19:11.678000+01:00 +Internet,case-5545,2011-03-16 00:00:00+01:00,General,2011-04-08 10:31:15.081000+02:00,2011-03-16 00:00:00.010000+01:00,,Resource14,2011-01-19 00:00:00.010000+01:00,task-16970,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-03-21 12:19:25.676000+01:00 +Internet,case-5545,2011-03-16 00:00:00+01:00,General,2011-04-08 10:31:15.081000+02:00,2011-03-16 00:00:00.010000+01:00,,Resource14,2011-01-19 00:00:00.010000+01:00,task-16971,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-03-21 12:19:40.570000+01:00 +Internet,case-5546,2011-03-16 00:00:00+01:00,General,2011-02-24 12:22:00.602000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource11,2011-01-19 00:00:00.010000+01:00,task-9807,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-02 16:03:33.805000+01:00 +Internet,case-5546,2011-03-16 00:00:00+01:00,General,2011-02-24 12:22:00.602000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource11,2011-01-19 00:00:00.010000+01:00,task-10700,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-02 16:04:02.926000+01:00 +Internet,case-5546,2011-03-16 00:00:00+01:00,General,2011-02-24 12:22:00.602000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource11,2011-01-19 00:00:00.010000+01:00,task-10701,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-02 16:04:33.817000+01:00 +Internet,case-5546,2011-03-16 00:00:00+01:00,General,2011-02-24 12:22:00.602000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource11,2011-01-19 00:00:00.010000+01:00,task-10703,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-02 16:05:59.790000+01:00 +Internet,case-5546,2011-03-16 00:00:00+01:00,General,2011-02-24 12:22:00.602000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource11,2011-01-19 00:00:00.010000+01:00,task-10702,T04 Determine confirmation of receipt,complete,EMPTY,Resource07,2011-02-03 08:42:24.750000+01:00 +Internet,case-5546,2011-03-16 00:00:00+01:00,General,2011-02-24 12:22:00.602000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource11,2011-01-19 00:00:00.010000+01:00,task-10748,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-03 08:43:26.737000+01:00 +Internet,case-5547,2011-03-14 00:00:00+01:00,General,2011-03-01 14:42:05.676000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource25,2011-01-17 00:00:00.010000+01:00,task-9811,Confirmation of receipt,complete,EMPTY,Resource25,2011-02-17 08:50:26.915000+01:00 +Internet,case-5547,2011-03-14 00:00:00+01:00,General,2011-03-01 14:42:05.676000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource25,2011-01-17 00:00:00.010000+01:00,task-12686,T02 Check confirmation of receipt,complete,Group 4,Resource25,2011-02-17 08:50:51.959000+01:00 +Internet,case-5547,2011-03-14 00:00:00+01:00,General,2011-03-01 14:42:05.676000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource25,2011-01-17 00:00:00.010000+01:00,task-12687,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-02-17 08:55:28.954000+01:00 +Internet,case-5547,2011-03-14 00:00:00+01:00,General,2011-03-01 14:42:05.676000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource25,2011-01-17 00:00:00.010000+01:00,task-12689,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2011-02-17 08:57:25.431000+01:00 +Internet,case-5547,2011-03-14 00:00:00+01:00,General,2011-03-01 14:42:05.676000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource25,2011-01-17 00:00:00.010000+01:00,task-12688,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-21 09:42:46.001000+01:00 +Internet,case-5547,2011-03-14 00:00:00+01:00,General,2011-03-01 14:42:05.676000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource25,2011-01-17 00:00:00.010000+01:00,task-13256,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-22 16:12:06.818000+01:00 +Internet,case-5548,2011-03-16 00:00:00+01:00,General,2011-02-22 16:53:55.093000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource01,2011-01-19 00:00:00.010000+01:00,task-9812,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-01 16:20:43.760000+01:00 +Internet,case-5548,2011-03-16 00:00:00+01:00,General,2011-02-22 16:53:55.093000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource01,2011-01-19 00:00:00.010000+01:00,task-10475,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-01 16:20:59.925000+01:00 +Internet,case-5548,2011-03-16 00:00:00+01:00,General,2011-02-22 16:53:55.093000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource01,2011-01-19 00:00:00.010000+01:00,task-10477,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-01 16:21:17.706000+01:00 +Internet,case-5548,2011-03-16 00:00:00+01:00,General,2011-02-22 16:53:55.093000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource01,2011-01-19 00:00:00.010000+01:00,task-10479,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-01 16:21:28.859000+01:00 +Internet,case-5548,2011-03-16 00:00:00+01:00,General,2011-02-22 16:53:55.093000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource01,2011-01-19 00:00:00.010000+01:00,task-10476,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-01 16:21:43.665000+01:00 +Internet,case-5548,2011-03-16 00:00:00+01:00,General,2011-02-22 16:53:55.093000+01:00,2011-03-16 00:00:00.010000+01:00,,Resource01,2011-01-19 00:00:00.010000+01:00,task-10480,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-03 08:43:32.014000+01:00 +Internet,case-5549,2011-03-15 00:00:00+01:00,General,2011-03-15 10:08:48.138000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource06,2011-01-18 00:00:00.010000+01:00,task-9824,Confirmation of receipt,complete,EMPTY,Resource06,2011-02-16 11:30:59.689000+01:00 +Internet,case-5549,2011-03-15 00:00:00+01:00,General,2011-03-15 10:08:48.138000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource06,2011-01-18 00:00:00.010000+01:00,task-12515,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-02-16 11:31:21.991000+01:00 +Internet,case-5549,2011-03-15 00:00:00+01:00,General,2011-03-15 10:08:48.138000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource06,2011-01-18 00:00:00.010000+01:00,task-12516,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-02-16 11:31:39.228000+01:00 +Internet,case-5549,2011-03-15 00:00:00+01:00,General,2011-03-15 10:08:48.138000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource06,2011-01-18 00:00:00.010000+01:00,task-12518,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-02-16 11:32:05.835000+01:00 +Internet,case-5549,2011-03-15 00:00:00+01:00,General,2011-03-15 10:08:48.138000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource06,2011-01-18 00:00:00.010000+01:00,task-12517,T04 Determine confirmation of receipt,complete,EMPTY,Resource06,2011-02-16 13:46:42.897000+01:00 +Internet,case-5549,2011-03-15 00:00:00+01:00,General,2011-03-15 10:08:48.138000+01:00,2011-03-15 00:00:00.010000+01:00,,Resource06,2011-01-18 00:00:00.010000+01:00,task-12552,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-16 14:28:55.869000+01:00 +Internet,case-5552,2011-05-26 01:06:40+02:00,General,2011-05-02 11:21:37.498000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource15,2011-01-19 01:06:40.010000+01:00,task-9863,Confirmation of receipt,complete,Group 1,Resource15,2011-01-28 09:37:18.080000+01:00 +Internet,case-5552,2011-05-26 01:06:40+02:00,General,2011-05-02 11:21:37.498000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource15,2011-01-19 01:06:40.010000+01:00,task-9950,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-01-28 09:37:38.230000+01:00 +Internet,case-5552,2011-05-26 01:06:40+02:00,General,2011-05-02 11:21:37.498000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource15,2011-01-19 01:06:40.010000+01:00,task-9952,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-01-28 09:37:59.290000+01:00 +Internet,case-5552,2011-05-26 01:06:40+02:00,General,2011-05-02 11:21:37.498000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource15,2011-01-19 01:06:40.010000+01:00,task-9953,T05 Print and send confirmation of receipt,complete,Group 2,Resource15,2011-01-28 09:38:13.949000+01:00 +Internet,case-5552,2011-05-26 01:06:40+02:00,General,2011-05-02 11:21:37.498000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource15,2011-01-19 01:06:40.010000+01:00,task-9951,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-01-28 09:43:57.474000+01:00 +Internet,case-5552,2011-05-26 01:06:40+02:00,General,2011-05-02 11:21:37.498000+02:00,2011-05-26 01:06:40.020000+02:00,,Resource15,2011-01-19 01:06:40.010000+01:00,task-9954,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-01-28 09:44:19.953000+01:00 +Internet,case-5554,2011-05-08 01:06:40+02:00,General,2011-05-04 16:07:36.807000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-01-14 01:06:40.010000+01:00,task-9872,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-01 16:06:53.322000+01:00 +Internet,case-5554,2011-05-08 01:06:40+02:00,General,2011-05-04 16:07:36.807000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-01-14 01:06:40.010000+01:00,task-10458,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-01 16:07:13.385000+01:00 +Internet,case-5554,2011-05-08 01:06:40+02:00,General,2011-05-04 16:07:36.807000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-01-14 01:06:40.010000+01:00,task-10459,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-01 16:07:48.511000+01:00 +Internet,case-5554,2011-05-08 01:06:40+02:00,General,2011-05-04 16:07:36.807000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-01-14 01:06:40.010000+01:00,task-10461,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-01 16:09:32.110000+01:00 +Internet,case-5554,2011-05-08 01:06:40+02:00,General,2011-05-04 16:07:36.807000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-01-14 01:06:40.010000+01:00,task-10460,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-02 13:32:53.512000+01:00 +Internet,case-5554,2011-05-08 01:06:40+02:00,General,2011-05-04 16:07:36.807000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-01-14 01:06:40.010000+01:00,task-10673,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 14:47:50.672000+01:00 +Internet,case-5556,2011-03-20 00:00:00+01:00,General,2011-02-28 11:17:49.041000+01:00,2011-03-20 00:00:00.010000+01:00,,Resource01,2011-01-23 00:00:00.010000+01:00,task-9886,Confirmation of receipt,complete,EMPTY,Resource07,2011-01-31 17:01:32.529000+01:00 +Internet,case-5556,2011-03-20 00:00:00+01:00,General,2011-02-28 11:17:49.041000+01:00,2011-03-20 00:00:00.010000+01:00,,Resource01,2011-01-23 00:00:00.010000+01:00,task-10344,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-01-31 17:01:56.115000+01:00 +Internet,case-5556,2011-03-20 00:00:00+01:00,General,2011-02-28 11:17:49.041000+01:00,2011-03-20 00:00:00.010000+01:00,,Resource01,2011-01-23 00:00:00.010000+01:00,task-10346,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-01-31 17:02:07.423000+01:00 +Internet,case-5556,2011-03-20 00:00:00+01:00,General,2011-02-28 11:17:49.041000+01:00,2011-03-20 00:00:00.010000+01:00,,Resource01,2011-01-23 00:00:00.010000+01:00,task-10347,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-01-31 17:02:18.133000+01:00 +Internet,case-5556,2011-03-20 00:00:00+01:00,General,2011-02-28 11:17:49.041000+01:00,2011-03-20 00:00:00.010000+01:00,,Resource01,2011-01-23 00:00:00.010000+01:00,task-10345,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-04 09:35:23.398000+01:00 +Internet,case-5556,2011-03-20 00:00:00+01:00,General,2011-02-28 11:17:49.041000+01:00,2011-03-20 00:00:00.010000+01:00,,Resource01,2011-01-23 00:00:00.010000+01:00,task-10860,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-04 09:35:52.167000+01:00 +Internet,case-5557,2011-03-21 01:06:40+01:00,General,2011-05-16 16:12:18.768000+02:00,2011-03-21 01:06:40.010000+01:00,,Resource09,2011-01-24 01:06:40.010000+01:00,task-9889,Confirmation of receipt,complete,EMPTY,Resource09,2011-03-07 16:14:30.553000+01:00 +Internet,case-5557,2011-03-21 01:06:40+01:00,General,2011-05-16 16:12:18.768000+02:00,2011-03-21 01:06:40.010000+01:00,,Resource09,2011-01-24 01:06:40.010000+01:00,task-15390,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-07 16:14:51.104000+01:00 +Internet,case-5557,2011-03-21 01:06:40+01:00,General,2011-05-16 16:12:18.768000+02:00,2011-03-21 01:06:40.010000+01:00,,Resource09,2011-01-24 01:06:40.010000+01:00,task-15392,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-03-07 16:15:16.704000+01:00 +Internet,case-5557,2011-03-21 01:06:40+01:00,General,2011-05-16 16:12:18.768000+02:00,2011-03-21 01:06:40.010000+01:00,,Resource09,2011-01-24 01:06:40.010000+01:00,task-15393,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-03-07 16:15:26.952000+01:00 +Internet,case-5557,2011-03-21 01:06:40+01:00,General,2011-05-16 16:12:18.768000+02:00,2011-03-21 01:06:40.010000+01:00,,Resource09,2011-01-24 01:06:40.010000+01:00,task-15391,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-08 08:32:34.688000+01:00 +Internet,case-5557,2011-03-21 01:06:40+01:00,General,2011-05-16 16:12:18.768000+02:00,2011-03-21 01:06:40.010000+01:00,,Resource09,2011-01-24 01:06:40.010000+01:00,task-15411,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-03-08 08:33:34.070000+01:00 +Internet,case-5558,2011-03-01 00:00:00+01:00,General,2011-02-25 16:18:49.424000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource05,2011-01-04 00:00:00.010000+01:00,task-9890,Confirmation of receipt,complete,EMPTY,Resource05,2011-02-03 10:59:55.704000+01:00 +Internet,case-5558,2011-03-01 00:00:00+01:00,General,2011-02-25 16:18:49.424000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource05,2011-01-04 00:00:00.010000+01:00,task-10782,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-02-03 11:00:14.089000+01:00 +Internet,case-5558,2011-03-01 00:00:00+01:00,General,2011-02-25 16:18:49.424000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource05,2011-01-04 00:00:00.010000+01:00,task-10784,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-02-03 11:04:02.100000+01:00 +Internet,case-5558,2011-03-01 00:00:00+01:00,General,2011-02-25 16:18:49.424000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource05,2011-01-04 00:00:00.010000+01:00,task-10788,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-02-03 11:05:05.119000+01:00 +Internet,case-5558,2011-03-01 00:00:00+01:00,General,2011-02-25 16:18:49.424000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource05,2011-01-04 00:00:00.010000+01:00,task-10783,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-03 11:08:44.913000+01:00 +Internet,case-5558,2011-03-01 00:00:00+01:00,General,2011-02-25 16:18:49.424000+01:00,2011-03-01 00:00:00.010000+01:00,,Resource05,2011-01-04 00:00:00.010000+01:00,task-10791,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-02-03 11:11:57.557000+01:00 +Internet,case-5559,2011-04-18 01:06:40+02:00,General,2011-03-22 14:50:27.887000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource06,2011-01-24 01:06:40.010000+01:00,task-9894,Confirmation of receipt,complete,EMPTY,Resource06,2011-02-16 14:10:34.432000+01:00 +Internet,case-5559,2011-04-18 01:06:40+02:00,General,2011-03-22 14:50:27.887000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource06,2011-01-24 01:06:40.010000+01:00,task-12569,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-02-16 14:10:56.225000+01:00 +Internet,case-5559,2011-04-18 01:06:40+02:00,General,2011-03-22 14:50:27.887000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource06,2011-01-24 01:06:40.010000+01:00,task-12570,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-02-16 14:12:28.219000+01:00 +Internet,case-5559,2011-04-18 01:06:40+02:00,General,2011-03-22 14:50:27.887000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource06,2011-01-24 01:06:40.010000+01:00,task-12568,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-02-22 14:53:56.427000+01:00 +Internet,case-5559,2011-04-18 01:06:40+02:00,General,2011-03-22 14:50:27.887000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource06,2011-01-24 01:06:40.010000+01:00,task-13695,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-28 11:51:04.126000+01:00 +Internet,case-5559,2011-04-18 01:06:40+02:00,General,2011-03-22 14:50:27.887000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource06,2011-01-24 01:06:40.010000+01:00,task-14423,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 09:58:22.103000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-9901,Confirmation of receipt,complete,EMPTY,Resource05,2011-02-01 16:17:34.957000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-10467,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-01 16:18:37.840000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-10466,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-02-01 16:19:02.498000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-10473,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-02-01 16:21:14.816000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-10478,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-02-01 16:21:28.866000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-10470,T08 Draft and send request for advice,complete,Group 1,Resource05,2011-02-02 08:46:45.966000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-10532,T09-4 Process or receive external advice from party 4,complete,Group 1,Resource05,2011-02-02 09:13:18.989000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-10546,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-02 09:13:51.772000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-10548,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-02-02 09:17:23.844000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-10549,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-02 09:17:39.040000+01:00 +Internet,case-5560,2011-03-22 00:00:00+01:00,General,2011-02-24 15:16:49.882000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-01-25 00:00:00.010000+01:00,task-10550,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-02-02 09:18:02.685000+01:00 +Internet,case-5561,2011-03-23 00:00:00+01:00,General,2011-02-28 11:41:07.295000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource01,2011-01-26 00:00:00.010000+01:00,task-9907,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-09 09:16:53.116000+01:00 +Internet,case-5561,2011-03-23 00:00:00+01:00,General,2011-02-28 11:41:07.295000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource01,2011-01-26 00:00:00.010000+01:00,task-11444,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-09 09:17:10.172000+01:00 +Internet,case-5561,2011-03-23 00:00:00+01:00,General,2011-02-28 11:41:07.295000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource01,2011-01-26 00:00:00.010000+01:00,task-11445,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-09 09:17:43.728000+01:00 +Internet,case-5561,2011-03-23 00:00:00+01:00,General,2011-02-28 11:41:07.295000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource01,2011-01-26 00:00:00.010000+01:00,task-11446,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-10 11:47:31.055000+01:00 +Internet,case-5561,2011-03-23 00:00:00+01:00,General,2011-02-28 11:41:07.295000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource01,2011-01-26 00:00:00.010000+01:00,task-11689,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-11 09:07:52.194000+01:00 +Internet,case-5561,2011-03-23 00:00:00+01:00,General,2011-02-28 11:41:07.295000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource01,2011-01-26 00:00:00.010000+01:00,task-11447,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-11 11:03:25.763000+01:00 +Internet,case-5566,2011-03-21 01:06:40+01:00,General,2011-03-22 14:33:55.175000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource08,2011-01-24 01:06:40.010000+01:00,task-9929,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-08 14:41:45.686000+01:00 +Internet,case-5566,2011-03-21 01:06:40+01:00,General,2011-03-22 14:33:55.175000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource08,2011-01-24 01:06:40.010000+01:00,task-11409,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-08 14:42:01.733000+01:00 +Internet,case-5566,2011-03-21 01:06:40+01:00,General,2011-03-22 14:33:55.175000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource08,2011-01-24 01:06:40.010000+01:00,task-11411,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-09 07:59:25.720000+01:00 +Internet,case-5566,2011-03-21 01:06:40+01:00,General,2011-03-22 14:33:55.175000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource08,2011-01-24 01:06:40.010000+01:00,task-11441,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-09 12:12:19.613000+01:00 +Internet,case-5566,2011-03-21 01:06:40+01:00,General,2011-03-22 14:33:55.175000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource08,2011-01-24 01:06:40.010000+01:00,task-11410,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-11 14:32:16.404000+01:00 +Internet,case-5566,2011-03-21 01:06:40+01:00,General,2011-03-22 14:33:55.175000+01:00,2011-03-21 01:06:40.010000+01:00,,Resource08,2011-01-24 01:06:40.010000+01:00,task-12009,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-11 14:34:55.921000+01:00 +Internet,case-5573,2011-03-22 00:00:00+01:00,General,2011-03-22 11:26:39.827000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource02,2011-01-25 00:00:00.010000+01:00,task-9940,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-21 10:54:35.132000+01:00 +Internet,case-5573,2011-03-22 00:00:00+01:00,General,2011-03-22 11:26:39.827000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource02,2011-01-25 00:00:00.010000+01:00,task-13290,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-21 10:57:01.807000+01:00 +Internet,case-5573,2011-03-22 00:00:00+01:00,General,2011-03-22 11:26:39.827000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource02,2011-01-25 00:00:00.010000+01:00,task-13291,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-21 10:57:34.609000+01:00 +Internet,case-5573,2011-03-22 00:00:00+01:00,General,2011-03-22 11:26:39.827000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource02,2011-01-25 00:00:00.010000+01:00,task-13294,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-02-21 11:18:54.176000+01:00 +Internet,case-5573,2011-03-22 00:00:00+01:00,General,2011-03-22 11:26:39.827000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource02,2011-01-25 00:00:00.010000+01:00,task-13307,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-21 11:19:32.766000+01:00 +Internet,case-5573,2011-03-22 00:00:00+01:00,General,2011-03-22 11:26:39.827000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource02,2011-01-25 00:00:00.010000+01:00,task-13309,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-21 11:19:54.380000+01:00 +Internet,case-5573,2011-03-22 00:00:00+01:00,General,2011-03-22 11:26:39.827000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource02,2011-01-25 00:00:00.010000+01:00,task-13293,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-21 15:17:49.393000+01:00 +Internet,case-5573,2011-03-22 00:00:00+01:00,General,2011-03-22 11:26:39.827000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource02,2011-01-25 00:00:00.010000+01:00,task-13417,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 11:01:06.231000+01:00 +Internet,case-5574,2011-03-23 01:06:40+01:00,General,2011-03-10 00:00:00.010000+01:00,2011-03-23 01:06:40.010000+01:00,,Resource11,2011-01-26 01:06:40.010000+01:00,task-9946,Confirmation of receipt,complete,EMPTY,admin2,2011-03-17 13:01:49.516000+01:00 +Desk,case-5576,2011-03-14 01:06:40+01:00,General,2011-03-02 11:00:27.952000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource13,2011-01-17 01:06:40.010000+01:00,task-9964,Confirmation of receipt,complete,EMPTY,Resource13,2011-02-02 10:37:30.381000+01:00 +Desk,case-5576,2011-03-14 01:06:40+01:00,General,2011-03-02 11:00:27.952000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource13,2011-01-17 01:06:40.010000+01:00,task-10620,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-02-02 10:38:52.942000+01:00 +Desk,case-5576,2011-03-14 01:06:40+01:00,General,2011-03-02 11:00:27.952000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource13,2011-01-17 01:06:40.010000+01:00,task-10623,T04 Determine confirmation of receipt,complete,Group 3,Resource13,2011-02-02 10:40:28.295000+01:00 +Desk,case-5576,2011-03-14 01:06:40+01:00,General,2011-03-02 11:00:27.952000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource13,2011-01-17 01:06:40.010000+01:00,task-10624,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-02-02 10:42:46.317000+01:00 +Desk,case-5576,2011-03-14 01:06:40+01:00,General,2011-03-02 11:00:27.952000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource13,2011-01-17 01:06:40.010000+01:00,task-10621,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-02-02 10:43:00.641000+01:00 +Desk,case-5576,2011-03-14 01:06:40+01:00,General,2011-03-02 11:00:27.952000+01:00,2011-03-14 01:06:40.010000+01:00,,Resource13,2011-01-17 01:06:40.010000+01:00,task-10625,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-02-02 10:47:06.288000+01:00 +Internet,case-5577,2011-03-24 00:00:00+01:00,General,2011-05-19 14:23:29.363000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource02,2011-01-27 00:00:00.010000+01:00,task-9976,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-21 15:11:58.599000+01:00 +Internet,case-5577,2011-03-24 00:00:00+01:00,General,2011-05-19 14:23:29.363000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource02,2011-01-27 00:00:00.010000+01:00,task-13413,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-21 15:12:19.354000+01:00 +Internet,case-5577,2011-03-24 00:00:00+01:00,General,2011-05-19 14:23:29.363000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource02,2011-01-27 00:00:00.010000+01:00,task-13414,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-21 15:41:41.395000+01:00 +Internet,case-5577,2011-03-24 00:00:00+01:00,General,2011-05-19 14:23:29.363000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource02,2011-01-27 00:00:00.010000+01:00,task-13423,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-21 15:42:01.485000+01:00 +Internet,case-5577,2011-03-24 00:00:00+01:00,General,2011-05-19 14:23:29.363000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource02,2011-01-27 00:00:00.010000+01:00,task-13415,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-23 10:30:47.062000+01:00 +Internet,case-5577,2011-03-24 00:00:00+01:00,General,2011-05-19 14:23:29.363000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource02,2011-01-27 00:00:00.010000+01:00,task-13797,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 12:06:41.890000+01:00 +Internet,case-5578,2011-03-24 01:06:40+01:00,General,2011-04-05 09:58:13.961000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-9983,Confirmation of receipt,complete,EMPTY,admin2,2011-04-05 09:58:14.844000+02:00 +Desk,case-5580,2011-03-23 00:00:00+01:00,General,2011-03-10 15:56:19.858000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource11,2011-01-26 00:00:00.010000+01:00,task-9986,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-09 15:52:24.439000+01:00 +Desk,case-5580,2011-03-23 00:00:00+01:00,General,2011-03-10 15:56:19.858000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource11,2011-01-26 00:00:00.010000+01:00,task-11537,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-09 15:52:49.522000+01:00 +Desk,case-5580,2011-03-23 00:00:00+01:00,General,2011-03-10 15:56:19.858000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource11,2011-01-26 00:00:00.010000+01:00,task-11539,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-10 11:52:23.353000+01:00 +Desk,case-5580,2011-03-23 00:00:00+01:00,General,2011-03-10 15:56:19.858000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource11,2011-01-26 00:00:00.010000+01:00,task-11692,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-10 13:18:24.356000+01:00 +Desk,case-5580,2011-03-23 00:00:00+01:00,General,2011-03-10 15:56:19.858000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource11,2011-01-26 00:00:00.010000+01:00,task-11538,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-10 14:40:31.733000+01:00 +Desk,case-5580,2011-03-23 00:00:00+01:00,General,2011-03-10 15:56:19.858000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource11,2011-01-26 00:00:00.010000+01:00,task-11786,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-10 15:04:09.440000+01:00 +Internet,case-5582,2011-06-07 01:06:40+02:00,General,2011-06-07 09:29:10.521000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-01-25 01:06:40.010000+01:00,task-9988,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-14 12:01:18.318000+01:00 +Internet,case-5582,2011-06-07 01:06:40+02:00,General,2011-06-07 09:29:10.521000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-01-25 01:06:40.010000+01:00,task-12158,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-02-14 12:02:06.338000+01:00 +Internet,case-5582,2011-06-07 01:06:40+02:00,General,2011-06-07 09:29:10.521000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-01-25 01:06:40.010000+01:00,task-12159,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-14 12:02:29.678000+01:00 +Internet,case-5582,2011-06-07 01:06:40+02:00,General,2011-06-07 09:29:10.521000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-01-25 01:06:40.010000+01:00,task-12162,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-14 12:02:49.723000+01:00 +Internet,case-5582,2011-06-07 01:06:40+02:00,General,2011-06-07 09:29:10.521000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-01-25 01:06:40.010000+01:00,task-12161,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-14 12:10:06.831000+01:00 +Internet,case-5582,2011-06-07 01:06:40+02:00,General,2011-06-07 09:29:10.521000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-01-25 01:06:40.010000+01:00,task-12169,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-15 11:21:59.047000+01:00 +Desk,case-5583,2011-03-07 01:06:40+01:00,General,2011-02-15 15:12:38.123000+01:00,2011-03-07 01:06:40.010000+01:00,,Resource35,2011-01-10 01:06:40.010000+01:00,task-9993,Confirmation of receipt,complete,EMPTY,admin2,2011-02-15 15:12:39.185000+01:00 +Internet,case-5585,2011-03-24 01:06:40+01:00,General,2011-09-22 14:45:23.851000+02:00,2011-03-24 01:06:40.010000+01:00,Group 2,Resource07,2011-01-27 01:06:40.010000+01:00,task-10012,Confirmation of receipt,complete,EMPTY,Resource26,2011-06-16 20:22:17.020000+02:00 +Internet,case-5585,2011-03-24 01:06:40+01:00,General,2011-09-22 14:45:23.851000+02:00,2011-03-24 01:06:40.010000+01:00,Group 2,Resource07,2011-01-27 01:06:40.010000+01:00,task-28853,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-16 20:22:44.111000+02:00 +Internet,case-5585,2011-03-24 01:06:40+01:00,General,2011-09-22 14:45:23.851000+02:00,2011-03-24 01:06:40.010000+01:00,Group 2,Resource07,2011-01-27 01:06:40.010000+01:00,task-28854,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource24,2011-07-18 14:11:32.085000+02:00 +Internet,case-5585,2011-03-24 01:06:40+01:00,General,2011-09-22 14:45:23.851000+02:00,2011-03-24 01:06:40.010000+01:00,Group 2,Resource07,2011-01-27 01:06:40.010000+01:00,task-28855,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource40,2011-08-08 16:02:07.078000+02:00 +Internet,case-5585,2011-03-24 01:06:40+01:00,General,2011-09-22 14:45:23.851000+02:00,2011-03-24 01:06:40.010000+01:00,Group 2,Resource07,2011-01-27 01:06:40.010000+01:00,task-35756,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-09-15 12:10:48.214000+02:00 +Internet,case-5585,2011-03-24 01:06:40+01:00,General,2011-09-22 14:45:23.851000+02:00,2011-03-24 01:06:40.010000+01:00,Group 2,Resource07,2011-01-27 01:06:40.010000+01:00,task-39061,T07-1 Draft intern advice aspect 1,complete,Group 7,admin2,2011-09-22 14:45:24.932000+02:00 +Internet,case-5585,2011-03-24 01:06:40+01:00,General,2011-09-22 14:45:23.851000+02:00,2011-03-24 01:06:40.010000+01:00,Group 2,Resource07,2011-01-27 01:06:40.010000+01:00,task-28852,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-09-22 14:45:25.613000+02:00 +Internet,case-5585,2011-03-24 01:06:40+01:00,General,2011-09-22 14:45:23.851000+02:00,2011-03-24 01:06:40.010000+01:00,Group 2,Resource07,2011-01-27 01:06:40.010000+01:00,task-39062,T07-2 Draft intern advice aspect 2,complete,Group 15,admin2,2011-09-22 14:45:26.304000+02:00 +Desk,case-5594,2011-03-24 01:06:40+01:00,General,2011-03-15 14:40:56.024000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource08,2011-01-27 01:06:40.010000+01:00,task-10058,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-08 15:30:55.087000+01:00 +Desk,case-5594,2011-03-24 01:06:40+01:00,General,2011-03-15 14:40:56.024000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource08,2011-01-27 01:06:40.010000+01:00,task-11421,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-09 07:56:45.858000+01:00 +Desk,case-5594,2011-03-24 01:06:40+01:00,General,2011-03-15 14:40:56.024000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource08,2011-01-27 01:06:40.010000+01:00,task-11439,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-09 07:57:03.458000+01:00 +Desk,case-5594,2011-03-24 01:06:40+01:00,General,2011-03-15 14:40:56.024000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource08,2011-01-27 01:06:40.010000+01:00,task-11440,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-09 12:10:43.894000+01:00 +Desk,case-5594,2011-03-24 01:06:40+01:00,General,2011-03-15 14:40:56.024000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource08,2011-01-27 01:06:40.010000+01:00,task-11422,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-14 14:32:29.749000+01:00 +Desk,case-5594,2011-03-24 01:06:40+01:00,General,2011-03-15 14:40:56.024000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource08,2011-01-27 01:06:40.010000+01:00,task-12218,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-14 14:35:51.244000+01:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-10059,Confirmation of receipt,complete,EMPTY,Resource09,2011-03-08 09:54:58.423000+01:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-15447,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-08 09:56:18.083000+01:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-15449,T08 Draft and send request for advice,complete,Group 1,Resource09,2011-03-08 09:57:10.588000+01:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-15450,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource09,2011-03-08 10:03:22.949000+01:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-15451,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource09,2011-03-08 10:03:43.830000+01:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-15452,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource09,2011-03-08 10:04:03.072000+01:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-15454,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-08 10:04:17.627000+01:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-15455,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-03-08 10:04:36.616000+01:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-15446,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-03-24 10:32:54.458000+01:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-17533,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-04-18 14:29:18.014000+02:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-20833,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-04-18 14:29:36.540000+02:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-20834,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-04-18 14:29:49.734000+02:00 +Internet,case-5595,2011-03-24 01:06:40+01:00,General,2011-06-06 10:55:21.981000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource09,2011-01-27 01:06:40.010000+01:00,task-20835,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-04-18 14:30:01.996000+02:00 +Desk,case-5597,2011-03-24 00:00:00+01:00,General,2011-02-28 11:47:00.573000+01:00,2011-03-24 00:00:00.010000+01:00,,Resource11,2011-01-27 00:00:00.010000+01:00,task-10085,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-15 15:09:27.025000+01:00 +Desk,case-5597,2011-03-24 00:00:00+01:00,General,2011-02-28 11:47:00.573000+01:00,2011-03-24 00:00:00.010000+01:00,,Resource11,2011-01-27 00:00:00.010000+01:00,task-12355,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-15 15:09:49.796000+01:00 +Desk,case-5597,2011-03-24 00:00:00+01:00,General,2011-02-28 11:47:00.573000+01:00,2011-03-24 00:00:00.010000+01:00,,Resource11,2011-01-27 00:00:00.010000+01:00,task-12357,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-15 15:10:40.691000+01:00 +Desk,case-5597,2011-03-24 00:00:00+01:00,General,2011-02-28 11:47:00.573000+01:00,2011-03-24 00:00:00.010000+01:00,,Resource11,2011-01-27 00:00:00.010000+01:00,task-12358,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-15 15:11:06.077000+01:00 +Desk,case-5597,2011-03-24 00:00:00+01:00,General,2011-02-28 11:47:00.573000+01:00,2011-03-24 00:00:00.010000+01:00,,Resource11,2011-01-27 00:00:00.010000+01:00,task-12356,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-15 15:11:24.982000+01:00 +Desk,case-5597,2011-03-24 00:00:00+01:00,General,2011-02-28 11:47:00.573000+01:00,2011-03-24 00:00:00.010000+01:00,,Resource11,2011-01-27 00:00:00.010000+01:00,task-12359,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-15 15:11:46.393000+01:00 +Desk,case-5597,2011-03-24 00:00:00+01:00,General,2011-02-28 11:47:00.573000+01:00,2011-03-24 00:00:00.010000+01:00,,Resource11,2011-01-27 00:00:00.010000+01:00,task-12360,T11 Create document X request unlicensed,complete,Group 1,Resource07,2011-02-24 15:53:25.233000+01:00 +Desk,case-5597,2011-03-24 00:00:00+01:00,General,2011-02-28 11:47:00.573000+01:00,2011-03-24 00:00:00.010000+01:00,,Resource11,2011-01-27 00:00:00.010000+01:00,task-14128,T12 Check document X request unlicensed,complete,EMPTY,Resource01,2011-02-25 09:10:36.708000+01:00 +Desk,case-5597,2011-03-24 00:00:00+01:00,General,2011-02-28 11:47:00.573000+01:00,2011-03-24 00:00:00.010000+01:00,,Resource11,2011-01-27 00:00:00.010000+01:00,task-14193,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-02-28 09:02:43.447000+01:00 +Desk,case-5597,2011-03-24 00:00:00+01:00,General,2011-02-28 11:47:00.573000+01:00,2011-03-24 00:00:00.010000+01:00,,Resource11,2011-01-27 00:00:00.010000+01:00,task-14339,T15 Print document X request unlicensed,complete,Group 2,Resource07,2011-02-28 11:47:00.458000+01:00 +Internet,case-5599,2011-03-24 01:06:40+01:00,General,2011-02-28 11:54:34.507000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource01,2011-01-27 01:06:40.010000+01:00,task-10087,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-10 15:19:26.313000+01:00 +Internet,case-5599,2011-03-24 01:06:40+01:00,General,2011-02-28 11:54:34.507000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource01,2011-01-27 01:06:40.010000+01:00,task-11799,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-10 15:19:38.966000+01:00 +Internet,case-5599,2011-03-24 01:06:40+01:00,General,2011-02-28 11:54:34.507000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource01,2011-01-27 01:06:40.010000+01:00,task-11801,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-10 15:20:13.637000+01:00 +Internet,case-5599,2011-03-24 01:06:40+01:00,General,2011-02-28 11:54:34.507000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource01,2011-01-27 01:06:40.010000+01:00,task-11802,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-10 15:20:34.639000+01:00 +Internet,case-5599,2011-03-24 01:06:40+01:00,General,2011-02-28 11:54:34.507000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource01,2011-01-27 01:06:40.010000+01:00,task-11800,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-11 11:29:14.514000+01:00 +Internet,case-5599,2011-03-24 01:06:40+01:00,General,2011-02-28 11:54:34.507000+01:00,2011-03-24 01:06:40.010000+01:00,,Resource01,2011-01-27 01:06:40.010000+01:00,task-11966,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-11 11:29:36.478000+01:00 +Internet,case-5646,2011-03-25 01:06:40+01:00,General,2011-02-28 12:13:30.183000+01:00,2011-03-25 01:06:40.010000+01:00,,Resource07,2011-01-28 01:06:40.010000+01:00,task-10147,Confirmation of receipt,complete,EMPTY,Resource43,2011-02-01 08:57:01.159000+01:00 +Internet,case-5646,2011-03-25 01:06:40+01:00,General,2011-02-28 12:13:30.183000+01:00,2011-03-25 01:06:40.010000+01:00,,Resource07,2011-01-28 01:06:40.010000+01:00,task-10363,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-01 08:57:54.921000+01:00 +Internet,case-5646,2011-03-25 01:06:40+01:00,General,2011-02-28 12:13:30.183000+01:00,2011-03-25 01:06:40.010000+01:00,,Resource07,2011-01-28 01:06:40.010000+01:00,task-10365,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-01 08:58:33.106000+01:00 +Internet,case-5646,2011-03-25 01:06:40+01:00,General,2011-02-28 12:13:30.183000+01:00,2011-03-25 01:06:40.010000+01:00,,Resource07,2011-01-28 01:06:40.010000+01:00,task-10366,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-01 09:12:20.423000+01:00 +Internet,case-5646,2011-03-25 01:06:40+01:00,General,2011-02-28 12:13:30.183000+01:00,2011-03-25 01:06:40.010000+01:00,,Resource07,2011-01-28 01:06:40.010000+01:00,task-10364,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-01 09:12:36.288000+01:00 +Internet,case-5646,2011-03-25 01:06:40+01:00,General,2011-02-28 12:13:30.183000+01:00,2011-03-25 01:06:40.010000+01:00,,Resource07,2011-01-28 01:06:40.010000+01:00,task-10367,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 14:56:35.288000+01:00 +Internet,case-5653,2011-06-01 01:06:40+02:00,General,2011-05-03 11:52:25.459000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource04,2011-01-29 01:06:40.010000+01:00,task-10162,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-24 16:19:32.977000+01:00 +Internet,case-5653,2011-06-01 01:06:40+02:00,General,2011-05-03 11:52:25.459000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource04,2011-01-29 01:06:40.010000+01:00,task-17762,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-24 16:19:46.591000+01:00 +Internet,case-5653,2011-06-01 01:06:40+02:00,General,2011-05-03 11:52:25.459000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource04,2011-01-29 01:06:40.010000+01:00,task-17763,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-24 16:20:37.383000+01:00 +Internet,case-5653,2011-06-01 01:06:40+02:00,General,2011-05-03 11:52:25.459000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource04,2011-01-29 01:06:40.010000+01:00,task-17765,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-24 16:20:57.395000+01:00 +Internet,case-5653,2011-06-01 01:06:40+02:00,General,2011-05-03 11:52:25.459000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource04,2011-01-29 01:06:40.010000+01:00,task-17764,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-03-30 09:29:54.217000+02:00 +Internet,case-5653,2011-06-01 01:06:40+02:00,General,2011-05-03 11:52:25.459000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource04,2011-01-29 01:06:40.010000+01:00,task-18360,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:17:46.237000+02:00 +Internet,case-5657,2011-03-26 00:00:00+01:00,General,2011-03-25 10:24:50.603000+01:00,2011-03-26 00:00:00.010000+01:00,,Resource17,2011-01-29 00:00:00.010000+01:00,task-10169,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-18 10:34:31.311000+01:00 +Internet,case-5657,2011-03-26 00:00:00+01:00,General,2011-03-25 10:24:50.603000+01:00,2011-03-26 00:00:00.010000+01:00,,Resource17,2011-01-29 00:00:00.010000+01:00,task-12980,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-02-18 10:35:10.612000+01:00 +Internet,case-5657,2011-03-26 00:00:00+01:00,General,2011-03-25 10:24:50.603000+01:00,2011-03-26 00:00:00.010000+01:00,,Resource17,2011-01-29 00:00:00.010000+01:00,task-12981,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-02-18 11:45:57.223000+01:00 +Internet,case-5657,2011-03-26 00:00:00+01:00,General,2011-03-25 10:24:50.603000+01:00,2011-03-26 00:00:00.010000+01:00,,Resource17,2011-01-29 00:00:00.010000+01:00,task-13014,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-02-18 11:46:11.455000+01:00 +Internet,case-5657,2011-03-26 00:00:00+01:00,General,2011-03-25 10:24:50.603000+01:00,2011-03-26 00:00:00.010000+01:00,,Resource17,2011-01-29 00:00:00.010000+01:00,task-12982,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-18 12:28:39.760000+01:00 +Internet,case-5657,2011-03-26 00:00:00+01:00,General,2011-03-25 10:24:50.603000+01:00,2011-03-26 00:00:00.010000+01:00,,Resource17,2011-01-29 00:00:00.010000+01:00,task-13031,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-22 14:48:09.468000+01:00 +Internet,case-5660,2011-03-26 01:06:40+01:00,General,2011-03-29 11:36:18.189000+02:00,2011-03-26 01:06:40.010000+01:00,,Resource15,2011-01-29 01:06:40.010000+01:00,task-10177,Confirmation of receipt,complete,EMPTY,Resource15,2011-02-02 09:49:30.098000+01:00 +Internet,case-5660,2011-03-26 01:06:40+01:00,General,2011-03-29 11:36:18.189000+02:00,2011-03-26 01:06:40.010000+01:00,,Resource15,2011-01-29 01:06:40.010000+01:00,task-10584,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-02 09:49:49.264000+01:00 +Internet,case-5660,2011-03-26 01:06:40+01:00,General,2011-03-29 11:36:18.189000+02:00,2011-03-26 01:06:40.010000+01:00,,Resource15,2011-01-29 01:06:40.010000+01:00,task-10586,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-02 11:22:49.928000+01:00 +Internet,case-5660,2011-03-26 01:06:40+01:00,General,2011-03-29 11:36:18.189000+02:00,2011-03-26 01:06:40.010000+01:00,,Resource15,2011-01-29 01:06:40.010000+01:00,task-10583,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-02 13:38:16.453000+01:00 +Internet,case-5660,2011-03-26 01:06:40+01:00,General,2011-03-29 11:36:18.189000+02:00,2011-03-26 01:06:40.010000+01:00,,Resource15,2011-01-29 01:06:40.010000+01:00,task-10675,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-02 13:39:09.844000+01:00 +Internet,case-5660,2011-03-26 01:06:40+01:00,General,2011-03-29 11:36:18.189000+02:00,2011-03-26 01:06:40.010000+01:00,,Resource15,2011-01-29 01:06:40.010000+01:00,task-10676,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-02 13:52:02.513000+01:00 +Internet,case-5683,2011-03-28 01:06:40+02:00,General,2011-03-03 12:19:24.121000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource07,2011-01-31 01:06:40.010000+01:00,task-10429,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-08 10:55:26.620000+01:00 +Internet,case-5683,2011-03-28 01:06:40+02:00,General,2011-03-03 12:19:24.121000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource07,2011-01-31 01:06:40.010000+01:00,task-11357,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-08 10:55:52.858000+01:00 +Internet,case-5683,2011-03-28 01:06:40+02:00,General,2011-03-03 12:19:24.121000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource07,2011-01-31 01:06:40.010000+01:00,task-11358,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-08 10:57:16.401000+01:00 +Internet,case-5683,2011-03-28 01:06:40+02:00,General,2011-03-03 12:19:24.121000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource07,2011-01-31 01:06:40.010000+01:00,task-11360,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-08 10:58:00.736000+01:00 +Internet,case-5683,2011-03-28 01:06:40+02:00,General,2011-03-03 12:19:24.121000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource07,2011-01-31 01:06:40.010000+01:00,task-11359,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-10 11:48:57.639000+01:00 +Internet,case-5683,2011-03-28 01:06:40+02:00,General,2011-03-03 12:19:24.121000+01:00,2011-03-28 01:06:40.020000+02:00,,Resource07,2011-01-31 01:06:40.010000+01:00,task-11690,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-11 09:06:51.545000+01:00 +Internet,case-5684,2011-03-28 00:00:00+02:00,General,2011-03-08 16:39:44.521000+01:00,2011-03-28 00:00:00.020000+02:00,,Resource07,2011-01-31 00:00:00.010000+01:00,task-10430,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-04 16:55:51.677000+01:00 +Internet,case-5684,2011-03-28 00:00:00+02:00,General,2011-03-08 16:39:44.521000+01:00,2011-03-28 00:00:00.020000+02:00,,Resource07,2011-01-31 00:00:00.010000+01:00,task-11053,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-04 16:56:40.140000+01:00 +Internet,case-5684,2011-03-28 00:00:00+02:00,General,2011-03-08 16:39:44.521000+01:00,2011-03-28 00:00:00.020000+02:00,,Resource07,2011-01-31 00:00:00.010000+01:00,task-11055,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-04 16:57:16.601000+01:00 +Internet,case-5684,2011-03-28 00:00:00+02:00,General,2011-03-08 16:39:44.521000+01:00,2011-03-28 00:00:00.020000+02:00,,Resource07,2011-01-31 00:00:00.010000+01:00,task-11056,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-04 16:57:29.595000+01:00 +Internet,case-5684,2011-03-28 00:00:00+02:00,General,2011-03-08 16:39:44.521000+01:00,2011-03-28 00:00:00.020000+02:00,,Resource07,2011-01-31 00:00:00.010000+01:00,task-11054,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-04 16:57:46.898000+01:00 +Internet,case-5684,2011-03-28 00:00:00+02:00,General,2011-03-08 16:39:44.521000+01:00,2011-03-28 00:00:00.020000+02:00,,Resource07,2011-01-31 00:00:00.010000+01:00,task-11057,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-04 16:58:02.803000+01:00 +Internet,case-5686,2011-03-29 00:00:00+02:00,General,2011-02-28 12:21:03.615000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-10432,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-11 09:30:00.863000+01:00 +Internet,case-5686,2011-03-29 00:00:00+02:00,General,2011-02-28 12:21:03.615000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11861,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-11 09:30:21.274000+01:00 +Internet,case-5686,2011-03-29 00:00:00+02:00,General,2011-02-28 12:21:03.615000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11863,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-11 09:31:55.567000+01:00 +Internet,case-5686,2011-03-29 00:00:00+02:00,General,2011-02-28 12:21:03.615000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11864,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-11 09:32:10.489000+01:00 +Internet,case-5686,2011-03-29 00:00:00+02:00,General,2011-02-28 12:21:03.615000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11862,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-11 09:33:28.394000+01:00 +Internet,case-5686,2011-03-29 00:00:00+02:00,General,2011-02-28 12:21:03.615000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11865,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-11 09:33:53.772000+01:00 +Desk,case-5704,2011-03-22 00:00:00+01:00,General,2011-03-15 15:43:05.532000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-02-25 00:00:00.010000+01:00,task-10510,Confirmation of receipt,complete,EMPTY,Resource05,2011-02-14 12:59:07.997000+01:00 +Desk,case-5704,2011-03-22 00:00:00+01:00,General,2011-03-15 15:43:05.532000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-02-25 00:00:00.010000+01:00,task-12189,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-02-14 12:59:47.552000+01:00 +Desk,case-5704,2011-03-22 00:00:00+01:00,General,2011-03-15 15:43:05.532000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-02-25 00:00:00.010000+01:00,task-12190,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-14 13:00:33.090000+01:00 +Desk,case-5704,2011-03-22 00:00:00+01:00,General,2011-03-15 15:43:05.532000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-02-25 00:00:00.010000+01:00,task-12192,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-02-14 13:00:54.912000+01:00 +Desk,case-5704,2011-03-22 00:00:00+01:00,General,2011-03-15 15:43:05.532000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-02-25 00:00:00.010000+01:00,task-12191,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-15 16:35:19.685000+01:00 +Desk,case-5704,2011-03-22 00:00:00+01:00,General,2011-03-15 15:43:05.532000+01:00,2011-03-22 00:00:00.010000+01:00,,Resource05,2011-02-25 00:00:00.010000+01:00,task-12406,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-02-16 07:48:50.218000+01:00 +Desk,case-5706,2011-03-23 00:00:00+01:00,General,2011-02-17 16:46:23.611000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource07,2011-01-26 00:00:00.010000+01:00,task-10512,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-04 15:19:59.421000+01:00 +Desk,case-5706,2011-03-23 00:00:00+01:00,General,2011-02-17 16:46:23.611000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource07,2011-01-26 00:00:00.010000+01:00,task-11028,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-04 15:20:43.442000+01:00 +Desk,case-5706,2011-03-23 00:00:00+01:00,General,2011-02-17 16:46:23.611000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource07,2011-01-26 00:00:00.010000+01:00,task-11031,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-04 15:20:59.258000+01:00 +Desk,case-5706,2011-03-23 00:00:00+01:00,General,2011-02-17 16:46:23.611000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource07,2011-01-26 00:00:00.010000+01:00,task-11032,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-04 15:21:12.911000+01:00 +Desk,case-5706,2011-03-23 00:00:00+01:00,General,2011-02-17 16:46:23.611000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource07,2011-01-26 00:00:00.010000+01:00,task-11029,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-04 15:21:27.504000+01:00 +Desk,case-5706,2011-03-23 00:00:00+01:00,General,2011-02-17 16:46:23.611000+01:00,2011-03-23 00:00:00.010000+01:00,,Resource07,2011-01-26 00:00:00.010000+01:00,task-11033,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-04 15:22:01.647000+01:00 +Internet,case-5707,2011-03-29 00:00:00+02:00,General,2011-03-03 11:36:28.283000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource11,2011-02-01 00:00:00.010000+01:00,task-10517,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 15:29:12.869000+01:00 +Internet,case-5707,2011-03-29 00:00:00+02:00,General,2011-03-03 11:36:28.283000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource11,2011-02-01 00:00:00.010000+01:00,task-12889,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 15:30:29.064000+01:00 +Internet,case-5707,2011-03-29 00:00:00+02:00,General,2011-03-03 11:36:28.283000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource11,2011-02-01 00:00:00.010000+01:00,task-12891,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 15:30:40.633000+01:00 +Internet,case-5707,2011-03-29 00:00:00+02:00,General,2011-03-03 11:36:28.283000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource11,2011-02-01 00:00:00.010000+01:00,task-12892,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 15:30:50.348000+01:00 +Internet,case-5707,2011-03-29 00:00:00+02:00,General,2011-03-03 11:36:28.283000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource11,2011-02-01 00:00:00.010000+01:00,task-12890,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 15:31:07.581000+01:00 +Internet,case-5707,2011-03-29 00:00:00+02:00,General,2011-03-03 11:36:28.283000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource11,2011-02-01 00:00:00.010000+01:00,task-12893,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 15:31:21.875000+01:00 +Internet,case-5710,2011-03-29 00:00:00+02:00,General,2011-02-22 09:37:38.363000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-10547,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-09 12:07:29.300000+01:00 +Internet,case-5710,2011-03-29 00:00:00+02:00,General,2011-02-22 09:37:38.363000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11493,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-09 12:07:46.209000+01:00 +Internet,case-5710,2011-03-29 00:00:00+02:00,General,2011-02-22 09:37:38.363000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11494,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-09 13:16:38.491000+01:00 +Internet,case-5710,2011-03-29 00:00:00+02:00,General,2011-02-22 09:37:38.363000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11503,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-09 13:18:06.103000+01:00 +Internet,case-5710,2011-03-29 00:00:00+02:00,General,2011-02-22 09:37:38.363000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11495,T04 Determine confirmation of receipt,complete,EMPTY,Resource01,2011-02-10 09:58:36.256000+01:00 +Internet,case-5710,2011-03-29 00:00:00+02:00,General,2011-02-22 09:37:38.363000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11624,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-10 09:58:47.927000+01:00 +Internet,case-5712,2011-03-29 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-10598,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-10 09:30:52.063000+01:00 +Internet,case-5712,2011-03-29 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11572,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-10 09:31:05.872000+01:00 +Internet,case-5712,2011-03-29 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11574,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-10 09:31:57.654000+01:00 +Internet,case-5712,2011-03-29 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11579,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-10 09:32:24.434000+01:00 +Internet,case-5712,2011-03-29 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11573,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-10 09:32:34.788000+01:00 +Internet,case-5712,2011-03-29 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource01,2011-02-01 00:00:00.010000+01:00,task-11580,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-10 09:33:03.566000+01:00 +Internet,case-5714,2011-03-29 00:00:00+02:00,General,2011-04-12 13:55:18.788000+02:00,2011-03-29 00:00:00.020000+02:00,,Resource07,2011-02-01 00:00:00.010000+01:00,task-10653,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-16 15:22:10.836000+01:00 +Internet,case-5714,2011-03-29 00:00:00+02:00,General,2011-04-12 13:55:18.788000+02:00,2011-03-29 00:00:00.020000+02:00,,Resource07,2011-02-01 00:00:00.010000+01:00,task-12619,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-16 15:22:23.873000+01:00 +Internet,case-5714,2011-03-29 00:00:00+02:00,General,2011-04-12 13:55:18.788000+02:00,2011-03-29 00:00:00.020000+02:00,,Resource07,2011-02-01 00:00:00.010000+01:00,task-12621,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-16 15:22:38.402000+01:00 +Internet,case-5714,2011-03-29 00:00:00+02:00,General,2011-04-12 13:55:18.788000+02:00,2011-03-29 00:00:00.020000+02:00,,Resource07,2011-02-01 00:00:00.010000+01:00,task-12622,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-16 15:22:48.748000+01:00 +Internet,case-5714,2011-03-29 00:00:00+02:00,General,2011-04-12 13:55:18.788000+02:00,2011-03-29 00:00:00.020000+02:00,,Resource07,2011-02-01 00:00:00.010000+01:00,task-12620,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-03-01 10:16:07.490000+01:00 +Internet,case-5714,2011-03-29 00:00:00+02:00,General,2011-04-12 13:55:18.788000+02:00,2011-03-29 00:00:00.020000+02:00,,Resource07,2011-02-01 00:00:00.010000+01:00,task-14668,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-03-01 10:16:31.090000+01:00 +e-mail,case-5721,2011-03-30 00:00:00+02:00,General,2011-05-16 09:48:44.730000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource09,2011-02-02 00:00:00.010000+01:00,task-10670,Confirmation of receipt,complete,EMPTY,Resource09,2011-03-10 09:42:52.622000+01:00 +e-mail,case-5721,2011-03-30 00:00:00+02:00,General,2011-05-16 09:48:44.730000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource09,2011-02-02 00:00:00.010000+01:00,task-15693,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-10 09:43:13.264000+01:00 +e-mail,case-5721,2011-03-30 00:00:00+02:00,General,2011-05-16 09:48:44.730000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource09,2011-02-02 00:00:00.010000+01:00,task-15695,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-03-10 09:43:27.281000+01:00 +e-mail,case-5721,2011-03-30 00:00:00+02:00,General,2011-05-16 09:48:44.730000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource09,2011-02-02 00:00:00.010000+01:00,task-15696,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-10 09:43:46.648000+01:00 +e-mail,case-5721,2011-03-30 00:00:00+02:00,General,2011-05-16 09:48:44.730000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource09,2011-02-02 00:00:00.010000+01:00,task-15697,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-03-10 09:44:17.616000+01:00 +e-mail,case-5721,2011-03-30 00:00:00+02:00,General,2011-05-16 09:48:44.730000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource09,2011-02-02 00:00:00.010000+01:00,task-15698,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-03-10 09:44:30.725000+01:00 +e-mail,case-5721,2011-03-30 00:00:00+02:00,General,2011-05-16 09:48:44.730000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource09,2011-02-02 00:00:00.010000+01:00,task-15694,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-10 09:44:54.788000+01:00 +e-mail,case-5721,2011-03-30 00:00:00+02:00,General,2011-05-16 09:48:44.730000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource09,2011-02-02 00:00:00.010000+01:00,task-15699,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-03-10 09:45:27.170000+01:00 +Internet,case-5737,2011-03-30 00:00:00+02:00,General,2011-03-17 10:36:27.613000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource06,2011-02-02 00:00:00.010000+01:00,task-10799,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-10 18:06:48.012000+01:00 +Internet,case-5737,2011-03-30 00:00:00+02:00,General,2011-03-17 10:36:27.613000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource06,2011-02-02 00:00:00.010000+01:00,task-15871,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-10 18:52:50.554000+01:00 +Internet,case-5737,2011-03-30 00:00:00+02:00,General,2011-03-17 10:36:27.613000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource06,2011-02-02 00:00:00.010000+01:00,task-15874,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-10 18:53:06.918000+01:00 +Internet,case-5737,2011-03-30 00:00:00+02:00,General,2011-03-17 10:36:27.613000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource06,2011-02-02 00:00:00.010000+01:00,task-15870,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-03-11 10:06:25.650000+01:00 +Internet,case-5737,2011-03-30 00:00:00+02:00,General,2011-03-17 10:36:27.613000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource06,2011-02-02 00:00:00.010000+01:00,task-15901,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-11 10:06:38.077000+01:00 +Internet,case-5737,2011-03-30 00:00:00+02:00,General,2011-03-17 10:36:27.613000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource06,2011-02-02 00:00:00.010000+01:00,task-15902,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-11 11:02:53.089000+01:00 +Internet,case-5743,2011-03-30 00:00:00+02:00,General,2011-03-08 16:52:32.517000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource11,2011-02-03 00:00:00.010000+01:00,task-10845,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 12:00:30.436000+01:00 +Internet,case-5743,2011-03-30 00:00:00+02:00,General,2011-03-08 16:52:32.517000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource11,2011-02-03 00:00:00.010000+01:00,task-12758,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 12:00:44.323000+01:00 +Internet,case-5743,2011-03-30 00:00:00+02:00,General,2011-03-08 16:52:32.517000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource11,2011-02-03 00:00:00.010000+01:00,task-12760,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 12:01:00.905000+01:00 +Internet,case-5743,2011-03-30 00:00:00+02:00,General,2011-03-08 16:52:32.517000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource11,2011-02-03 00:00:00.010000+01:00,task-12762,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 12:01:12.016000+01:00 +Internet,case-5743,2011-03-30 00:00:00+02:00,General,2011-03-08 16:52:32.517000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource11,2011-02-03 00:00:00.010000+01:00,task-12759,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 12:01:42.241000+01:00 +Internet,case-5743,2011-03-30 00:00:00+02:00,General,2011-03-08 16:52:32.517000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource11,2011-02-03 00:00:00.010000+01:00,task-12763,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 12:02:04.663000+01:00 +Desk,case-5748,2011-04-28 00:00:00+02:00,General,2011-04-21 12:15:07.155000+02:00,2011-03-28 00:00:00.020000+02:00,,Resource05,2011-01-31 00:00:00.010000+01:00,task-10852,Confirmation of receipt,complete,EMPTY,Resource05,2011-02-23 10:33:49.721000+01:00 +Desk,case-5748,2011-04-28 00:00:00+02:00,General,2011-04-21 12:15:07.155000+02:00,2011-03-28 00:00:00.020000+02:00,,Resource05,2011-01-31 00:00:00.010000+01:00,task-13800,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-02-23 10:34:09.992000+01:00 +Desk,case-5748,2011-04-28 00:00:00+02:00,General,2011-04-21 12:15:07.155000+02:00,2011-03-28 00:00:00.020000+02:00,,Resource05,2011-01-31 00:00:00.010000+01:00,task-13803,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-02-23 10:34:41.492000+01:00 +Desk,case-5748,2011-04-28 00:00:00+02:00,General,2011-04-21 12:15:07.155000+02:00,2011-03-28 00:00:00.020000+02:00,,Resource05,2011-01-31 00:00:00.010000+01:00,task-13801,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-23 10:37:17.249000+01:00 +Desk,case-5748,2011-04-28 00:00:00+02:00,General,2011-04-21 12:15:07.155000+02:00,2011-03-28 00:00:00.020000+02:00,,Resource05,2011-01-31 00:00:00.010000+01:00,task-13811,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-02-23 10:37:58.680000+01:00 +Desk,case-5748,2011-04-28 00:00:00+02:00,General,2011-04-21 12:15:07.155000+02:00,2011-03-28 00:00:00.020000+02:00,,Resource05,2011-01-31 00:00:00.010000+01:00,task-13814,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-23 10:38:16.373000+01:00 +Desk,case-5748,2011-04-28 00:00:00+02:00,General,2011-04-21 12:15:07.155000+02:00,2011-03-28 00:00:00.020000+02:00,,Resource05,2011-01-31 00:00:00.010000+01:00,task-13815,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-02-23 10:39:05.733000+01:00 +Desk,case-5748,2011-04-28 00:00:00+02:00,General,2011-04-21 12:15:07.155000+02:00,2011-03-28 00:00:00.020000+02:00,,Resource05,2011-01-31 00:00:00.010000+01:00,task-13816,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-23 10:39:20.688000+01:00 +Desk,case-5748,2011-04-28 00:00:00+02:00,General,2011-04-21 12:15:07.155000+02:00,2011-03-28 00:00:00.020000+02:00,,Resource05,2011-01-31 00:00:00.010000+01:00,task-13817,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-02-23 10:39:41.643000+01:00 +Desk,case-5748,2011-04-28 00:00:00+02:00,General,2011-04-21 12:15:07.155000+02:00,2011-03-28 00:00:00.020000+02:00,,Resource05,2011-01-31 00:00:00.010000+01:00,task-13805,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-24 12:05:59.893000+01:00 +Internet,case-5749,2011-06-09 01:06:40+02:00,General,2011-06-16 10:00:31.852000+02:00,2011-06-09 01:06:40.020000+02:00,,Resource23,2011-02-03 01:06:40.010000+01:00,task-10853,Confirmation of receipt,complete,EMPTY,Resource23,2011-02-15 13:54:11.090000+01:00 +Internet,case-5749,2011-06-09 01:06:40+02:00,General,2011-06-16 10:00:31.852000+02:00,2011-06-09 01:06:40.020000+02:00,,Resource23,2011-02-03 01:06:40.010000+01:00,task-12322,T02 Check confirmation of receipt,complete,EMPTY,Resource23,2011-02-16 13:38:55.940000+01:00 +Internet,case-5749,2011-06-09 01:06:40+02:00,General,2011-06-16 10:00:31.852000+02:00,2011-06-09 01:06:40.020000+02:00,,Resource23,2011-02-03 01:06:40.010000+01:00,task-12323,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-02-16 13:52:04.901000+01:00 +Internet,case-5749,2011-06-09 01:06:40+02:00,General,2011-06-16 10:00:31.852000+02:00,2011-06-09 01:06:40.020000+02:00,,Resource23,2011-02-03 01:06:40.010000+01:00,task-12549,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-16 14:58:18.910000+01:00 +Internet,case-5749,2011-06-09 01:06:40+02:00,General,2011-06-16 10:00:31.852000+02:00,2011-06-09 01:06:40.020000+02:00,,Resource23,2011-02-03 01:06:40.010000+01:00,task-12557,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-02-16 15:26:24.365000+01:00 +Internet,case-5749,2011-06-09 01:06:40+02:00,General,2011-06-16 10:00:31.852000+02:00,2011-06-09 01:06:40.020000+02:00,,Resource23,2011-02-03 01:06:40.010000+01:00,task-12602,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-17 15:10:30.022000+01:00 +Internet,case-5750,2011-03-25 01:06:40+01:00,General,2011-04-20 09:52:55.437000+02:00,2011-03-25 01:06:40.010000+01:00,,Resource14,2011-01-28 01:06:40.010000+01:00,task-10854,Confirmation of receipt,complete,EMPTY,Resource14,2011-02-24 10:33:47.626000+01:00 +Internet,case-5750,2011-03-25 01:06:40+01:00,General,2011-04-20 09:52:55.437000+02:00,2011-03-25 01:06:40.010000+01:00,,Resource14,2011-01-28 01:06:40.010000+01:00,task-13953,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-02-24 10:37:49.302000+01:00 +Internet,case-5750,2011-03-25 01:06:40+01:00,General,2011-04-20 09:52:55.437000+02:00,2011-03-25 01:06:40.010000+01:00,,Resource14,2011-01-28 01:06:40.010000+01:00,task-13957,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-02-24 10:38:30.115000+01:00 +Internet,case-5750,2011-03-25 01:06:40+01:00,General,2011-04-20 09:52:55.437000+02:00,2011-03-25 01:06:40.010000+01:00,,Resource14,2011-01-28 01:06:40.010000+01:00,task-13952,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-02-24 10:43:13.869000+01:00 +Internet,case-5750,2011-03-25 01:06:40+01:00,General,2011-04-20 09:52:55.437000+02:00,2011-03-25 01:06:40.010000+01:00,,Resource14,2011-01-28 01:06:40.010000+01:00,task-13962,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-02-24 10:43:58.366000+01:00 +Internet,case-5750,2011-03-25 01:06:40+01:00,General,2011-04-20 09:52:55.437000+02:00,2011-03-25 01:06:40.010000+01:00,,Resource14,2011-01-28 01:06:40.010000+01:00,task-13963,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-24 13:47:34.219000+01:00 +Desk,case-5761,2011-03-29 00:00:00+02:00,General,2011-02-23 16:30:01.646000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource18,2011-02-01 00:00:00.010000+01:00,task-10981,Confirmation of receipt,complete,EMPTY,Resource18,2011-02-11 14:44:32.645000+01:00 +Desk,case-5761,2011-03-29 00:00:00+02:00,General,2011-02-23 16:30:01.646000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource18,2011-02-01 00:00:00.010000+01:00,task-12015,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-02-11 14:45:15.718000+01:00 +Desk,case-5761,2011-03-29 00:00:00+02:00,General,2011-02-23 16:30:01.646000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource18,2011-02-01 00:00:00.010000+01:00,task-12016,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-02-11 14:45:33.317000+01:00 +Desk,case-5761,2011-03-29 00:00:00+02:00,General,2011-02-23 16:30:01.646000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource18,2011-02-01 00:00:00.010000+01:00,task-12014,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-02-11 15:13:30.857000+01:00 +Desk,case-5761,2011-03-29 00:00:00+02:00,General,2011-02-23 16:30:01.646000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource18,2011-02-01 00:00:00.010000+01:00,task-12044,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-02-11 15:16:23.241000+01:00 +Desk,case-5761,2011-03-29 00:00:00+02:00,General,2011-02-23 16:30:01.646000+01:00,2011-03-29 00:00:00.020000+02:00,,Resource18,2011-02-01 00:00:00.010000+01:00,task-12051,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-02-11 15:16:34.253000+01:00 +Desk,case-5766,2011-04-01 00:00:00+02:00,General,2011-04-01 09:42:43.367000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-11004,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 12:43:42.612000+01:00 +Desk,case-5766,2011-04-01 00:00:00+02:00,General,2011-04-01 09:42:43.367000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-12791,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 12:43:57.835000+01:00 +Desk,case-5766,2011-04-01 00:00:00+02:00,General,2011-04-01 09:42:43.367000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-12793,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 12:44:10.561000+01:00 +Desk,case-5766,2011-04-01 00:00:00+02:00,General,2011-04-01 09:42:43.367000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-12794,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 12:44:20.053000+01:00 +Desk,case-5766,2011-04-01 00:00:00+02:00,General,2011-04-01 09:42:43.367000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-12792,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 12:44:30.601000+01:00 +Desk,case-5766,2011-04-01 00:00:00+02:00,General,2011-04-01 09:42:43.367000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-12795,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 12:44:44.909000+01:00 +Desk,case-5767,2011-04-01 00:00:00+02:00,General,2011-03-11 12:31:00.801000+01:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-11005,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-10 12:06:34.506000+01:00 +Desk,case-5767,2011-04-01 00:00:00+02:00,General,2011-03-11 12:31:00.801000+01:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-11705,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-10 12:06:49.852000+01:00 +Desk,case-5767,2011-04-01 00:00:00+02:00,General,2011-03-11 12:31:00.801000+01:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-11707,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-10 12:07:01.894000+01:00 +Desk,case-5767,2011-04-01 00:00:00+02:00,General,2011-03-11 12:31:00.801000+01:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-11708,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-10 12:07:13.399000+01:00 +Desk,case-5767,2011-04-01 00:00:00+02:00,General,2011-03-11 12:31:00.801000+01:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-11706,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-28 13:21:28.433000+01:00 +Desk,case-5767,2011-04-01 00:00:00+02:00,General,2011-03-11 12:31:00.801000+01:00,2011-04-01 00:00:00.020000+02:00,,Resource07,2011-02-04 00:00:00.010000+01:00,task-14490,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-28 13:21:42.130000+01:00 +Internet,case-5769,2011-04-01 00:00:00+02:00,General,2011-03-31 07:48:34.557000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource11,2011-02-04 00:00:00.010000+01:00,task-11042,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-18 09:09:45.415000+01:00 +Internet,case-5769,2011-04-01 00:00:00+02:00,General,2011-03-31 07:48:34.557000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource11,2011-02-04 00:00:00.010000+01:00,task-12954,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-18 09:13:20.723000+01:00 +Internet,case-5769,2011-04-01 00:00:00+02:00,General,2011-03-31 07:48:34.557000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource11,2011-02-04 00:00:00.010000+01:00,task-12956,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-18 09:13:38.905000+01:00 +Internet,case-5769,2011-04-01 00:00:00+02:00,General,2011-03-31 07:48:34.557000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource11,2011-02-04 00:00:00.010000+01:00,task-12957,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-18 09:13:49.279000+01:00 +Internet,case-5769,2011-04-01 00:00:00+02:00,General,2011-03-31 07:48:34.557000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource11,2011-02-04 00:00:00.010000+01:00,task-12955,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-28 13:53:40.453000+01:00 +Internet,case-5769,2011-04-01 00:00:00+02:00,General,2011-03-31 07:48:34.557000+02:00,2011-04-01 00:00:00.020000+02:00,,Resource11,2011-02-04 00:00:00.010000+01:00,task-14507,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-28 13:54:20.212000+01:00 +Internet,case-5865,2011-04-01 01:06:40+02:00,General,2011-04-01 09:42:16.979000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource11,2011-02-04 01:06:40.010000+01:00,task-11244,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 15:23:19.194000+01:00 +Internet,case-5865,2011-04-01 01:06:40+02:00,General,2011-04-01 09:42:16.979000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource11,2011-02-04 01:06:40.010000+01:00,task-12885,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 15:23:32.337000+01:00 +Internet,case-5865,2011-04-01 01:06:40+02:00,General,2011-04-01 09:42:16.979000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource11,2011-02-04 01:06:40.010000+01:00,task-12887,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 15:23:44.713000+01:00 +Internet,case-5865,2011-04-01 01:06:40+02:00,General,2011-04-01 09:42:16.979000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource11,2011-02-04 01:06:40.010000+01:00,task-12888,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 15:23:53.838000+01:00 +Internet,case-5865,2011-04-01 01:06:40+02:00,General,2011-04-01 09:42:16.979000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource11,2011-02-04 01:06:40.010000+01:00,task-12886,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-01 12:36:22.050000+01:00 +Internet,case-5865,2011-04-01 01:06:40+02:00,General,2011-04-01 09:42:16.979000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource11,2011-02-04 01:06:40.010000+01:00,task-14718,T10 Determine necessity to stop indication,complete,EMPTY,Resource01,2011-03-30 14:53:13.440000+02:00 +Internet,case-5865,2011-04-01 01:06:40+02:00,General,2011-04-01 09:42:16.979000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource11,2011-02-04 01:06:40.010000+01:00,task-18536,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-03-30 16:12:57.295000+02:00 +Internet,case-5865,2011-04-01 01:06:40+02:00,General,2011-04-01 09:42:16.979000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource11,2011-02-04 01:06:40.010000+01:00,task-18540,T12 Check document X request unlicensed,complete,EMPTY,Resource07,2011-03-31 11:18:27.121000+02:00 +Internet,case-5865,2011-04-01 01:06:40+02:00,General,2011-04-01 09:42:16.979000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource11,2011-02-04 01:06:40.010000+01:00,task-18608,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-03-31 14:31:43.007000+02:00 +Internet,case-5865,2011-04-01 01:06:40+02:00,General,2011-04-01 09:42:16.979000+02:00,2011-04-01 01:06:40.020000+02:00,,Resource11,2011-02-04 01:06:40.010000+01:00,task-18687,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-04-01 09:42:16.646000+02:00 +Internet,case-5870,2011-04-02 00:00:00+02:00,General,2011-03-08 17:04:44.582000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource07,2011-02-05 00:00:00.010000+01:00,task-11268,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 15:08:53.884000+01:00 +Internet,case-5870,2011-04-02 00:00:00+02:00,General,2011-03-08 17:04:44.582000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource07,2011-02-05 00:00:00.010000+01:00,task-12853,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 15:09:11.716000+01:00 +Internet,case-5870,2011-04-02 00:00:00+02:00,General,2011-03-08 17:04:44.582000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource07,2011-02-05 00:00:00.010000+01:00,task-12855,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 15:09:30.127000+01:00 +Internet,case-5870,2011-04-02 00:00:00+02:00,General,2011-03-08 17:04:44.582000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource07,2011-02-05 00:00:00.010000+01:00,task-12856,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 15:09:41.700000+01:00 +Internet,case-5870,2011-04-02 00:00:00+02:00,General,2011-03-08 17:04:44.582000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource07,2011-02-05 00:00:00.010000+01:00,task-12854,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 15:09:53.380000+01:00 +Internet,case-5870,2011-04-02 00:00:00+02:00,General,2011-03-08 17:04:44.582000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource07,2011-02-05 00:00:00.010000+01:00,task-12857,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 15:10:06.205000+01:00 +Internet,case-5874,2011-04-02 00:00:00+02:00,General,2011-03-19 00:00:00.010000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource08,2011-02-05 00:00:00.010000+01:00,task-11295,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-11 15:09:11.760000+01:00 +Internet,case-5874,2011-04-02 00:00:00+02:00,General,2011-03-19 00:00:00.010000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource08,2011-02-05 00:00:00.010000+01:00,task-12035,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-11 15:17:23.406000+01:00 +Internet,case-5874,2011-04-02 00:00:00+02:00,General,2011-03-19 00:00:00.010000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource08,2011-02-05 00:00:00.010000+01:00,task-12055,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-14 11:58:26.238000+01:00 +Internet,case-5874,2011-04-02 00:00:00+02:00,General,2011-03-19 00:00:00.010000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource08,2011-02-05 00:00:00.010000+01:00,task-12157,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-15 11:21:32.907000+01:00 +Internet,case-5874,2011-04-02 00:00:00+02:00,General,2011-03-19 00:00:00.010000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource08,2011-02-05 00:00:00.010000+01:00,task-12036,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-17 13:22:13.249000+01:00 +Internet,case-5874,2011-04-02 00:00:00+02:00,General,2011-03-19 00:00:00.010000+01:00,2011-04-02 00:00:00.020000+02:00,,Resource08,2011-02-05 00:00:00.010000+01:00,task-12813,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-17 13:29:46.472000+01:00 +Internet,case-5875,2011-04-04 00:00:00+02:00,General,2011-03-08 17:12:31.223000+01:00,2011-04-04 00:00:00.020000+02:00,,Resource07,2011-02-07 00:00:00.010000+01:00,task-11301,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 14:55:55.319000+01:00 +Internet,case-5875,2011-04-04 00:00:00+02:00,General,2011-03-08 17:12:31.223000+01:00,2011-04-04 00:00:00.020000+02:00,,Resource07,2011-02-07 00:00:00.010000+01:00,task-12833,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 14:56:09.900000+01:00 +Internet,case-5875,2011-04-04 00:00:00+02:00,General,2011-03-08 17:12:31.223000+01:00,2011-04-04 00:00:00.020000+02:00,,Resource07,2011-02-07 00:00:00.010000+01:00,task-12835,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 14:56:21.947000+01:00 +Internet,case-5875,2011-04-04 00:00:00+02:00,General,2011-03-08 17:12:31.223000+01:00,2011-04-04 00:00:00.020000+02:00,,Resource07,2011-02-07 00:00:00.010000+01:00,task-12836,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 14:56:37.296000+01:00 +Internet,case-5875,2011-04-04 00:00:00+02:00,General,2011-03-08 17:12:31.223000+01:00,2011-04-04 00:00:00.020000+02:00,,Resource07,2011-02-07 00:00:00.010000+01:00,task-12834,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 14:56:57.561000+01:00 +Internet,case-5875,2011-04-04 00:00:00+02:00,General,2011-03-08 17:12:31.223000+01:00,2011-04-04 00:00:00.020000+02:00,,Resource07,2011-02-07 00:00:00.010000+01:00,task-12837,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 14:57:15.654000+01:00 +Internet,case-5877,2011-03-30 00:00:00+02:00,General,2011-03-30 00:00:00.020000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource37,2011-02-02 00:00:00.010000+01:00,task-11307,Confirmation of receipt,complete,EMPTY,Resource09,2011-03-14 08:14:49.727000+01:00 +Internet,case-5877,2011-03-30 00:00:00+02:00,General,2011-03-30 00:00:00.020000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource37,2011-02-02 00:00:00.010000+01:00,task-15979,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-14 08:15:26.593000+01:00 +Internet,case-5877,2011-03-30 00:00:00+02:00,General,2011-03-30 00:00:00.020000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource37,2011-02-02 00:00:00.010000+01:00,task-15981,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-03-14 08:15:47.584000+01:00 +Internet,case-5877,2011-03-30 00:00:00+02:00,General,2011-03-30 00:00:00.020000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource37,2011-02-02 00:00:00.010000+01:00,task-15982,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-03-14 08:16:02.726000+01:00 +Internet,case-5877,2011-03-30 00:00:00+02:00,General,2011-03-30 00:00:00.020000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource37,2011-02-02 00:00:00.010000+01:00,task-15980,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-14 08:16:49.373000+01:00 +Internet,case-5877,2011-03-30 00:00:00+02:00,General,2011-03-30 00:00:00.020000+02:00,2011-03-30 00:00:00.020000+02:00,,Resource37,2011-02-02 00:00:00.010000+01:00,task-15983,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-03-14 08:17:59.434000+01:00 +Internet,case-5878,2011-04-03 00:00:00+02:00,General,2011-03-31 15:40:23.559000+02:00,2011-04-03 00:00:00.020000+02:00,,Resource17,2011-02-06 00:00:00.010000+01:00,task-11308,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-14 09:49:45.134000+01:00 +Internet,case-5878,2011-04-03 00:00:00+02:00,General,2011-03-31 15:40:23.559000+02:00,2011-04-03 00:00:00.020000+02:00,,Resource17,2011-02-06 00:00:00.010000+01:00,task-12132,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-14 09:50:40.423000+01:00 +Internet,case-5878,2011-04-03 00:00:00+02:00,General,2011-03-31 15:40:23.559000+02:00,2011-04-03 00:00:00.020000+02:00,,Resource17,2011-02-06 00:00:00.010000+01:00,task-12131,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-02-14 09:50:54.090000+01:00 +Internet,case-5878,2011-04-03 00:00:00+02:00,General,2011-03-31 15:40:23.559000+02:00,2011-04-03 00:00:00.020000+02:00,,Resource17,2011-02-06 00:00:00.010000+01:00,task-12133,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-14 09:51:10.694000+01:00 +Internet,case-5878,2011-04-03 00:00:00+02:00,General,2011-03-31 15:40:23.559000+02:00,2011-04-03 00:00:00.020000+02:00,,Resource17,2011-02-06 00:00:00.010000+01:00,task-12134,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-14 12:19:09.483000+01:00 +Internet,case-5878,2011-04-03 00:00:00+02:00,General,2011-03-31 15:40:23.559000+02:00,2011-04-03 00:00:00.020000+02:00,,Resource17,2011-02-06 00:00:00.010000+01:00,task-12173,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-15 11:22:12.128000+01:00 +Desk,case-5879,2011-05-16 01:06:40+02:00,General,2011-04-20 14:23:27.429000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource02,2011-02-07 01:06:40.010000+01:00,task-11309,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-23 15:14:53.768000+01:00 +Desk,case-5879,2011-05-16 01:06:40+02:00,General,2011-04-20 14:23:27.429000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource02,2011-02-07 01:06:40.010000+01:00,task-13886,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-23 15:15:32.188000+01:00 +Desk,case-5879,2011-05-16 01:06:40+02:00,General,2011-04-20 14:23:27.429000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource02,2011-02-07 01:06:40.010000+01:00,task-13887,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-23 16:43:34.117000+01:00 +Desk,case-5879,2011-05-16 01:06:40+02:00,General,2011-04-20 14:23:27.429000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource02,2011-02-07 01:06:40.010000+01:00,task-13897,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-23 16:43:54.838000+01:00 +Desk,case-5879,2011-05-16 01:06:40+02:00,General,2011-04-20 14:23:27.429000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource02,2011-02-07 01:06:40.010000+01:00,task-13888,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-28 08:42:16.545000+01:00 +Desk,case-5879,2011-05-16 01:06:40+02:00,General,2011-04-20 14:23:27.429000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource02,2011-02-07 01:06:40.010000+01:00,task-14333,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 09:45:27.703000+01:00 +Internet,case-5895,2011-04-04 01:06:40+02:00,General,2011-04-04 16:08:08.213000+02:00,2011-04-04 01:06:40.020000+02:00,,Resource04,2011-02-07 01:06:40.010000+01:00,task-11342,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-01 11:40:39.151000+01:00 +Internet,case-5895,2011-04-04 01:06:40+02:00,General,2011-04-04 16:08:08.213000+02:00,2011-04-04 01:06:40.020000+02:00,,Resource04,2011-02-07 01:06:40.010000+01:00,task-14699,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-01 11:41:06.681000+01:00 +Internet,case-5895,2011-04-04 01:06:40+02:00,General,2011-04-04 16:08:08.213000+02:00,2011-04-04 01:06:40.020000+02:00,,Resource04,2011-02-07 01:06:40.010000+01:00,task-14701,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-01 11:41:16.464000+01:00 +Internet,case-5895,2011-04-04 01:06:40+02:00,General,2011-04-04 16:08:08.213000+02:00,2011-04-04 01:06:40.020000+02:00,,Resource04,2011-02-07 01:06:40.010000+01:00,task-14702,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 15:11:11.656000+01:00 +Internet,case-5895,2011-04-04 01:06:40+02:00,General,2011-04-04 16:08:08.213000+02:00,2011-04-04 01:06:40.020000+02:00,,Resource04,2011-02-07 01:06:40.010000+01:00,task-14700,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-02 16:06:16.190000+01:00 +Internet,case-5895,2011-04-04 01:06:40+02:00,General,2011-04-04 16:08:08.213000+02:00,2011-04-04 01:06:40.020000+02:00,,Resource04,2011-02-07 01:06:40.010000+01:00,task-15002,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-02 16:06:32.002000+01:00 +Internet,case-5897,2011-05-03 01:06:40+02:00,General,,2011-04-18 01:06:40.020000+02:00,Group 10,Resource52,2011-02-08 01:06:40.010000+01:00,task-11355,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-16 11:31:40.766000+01:00 +Internet,case-5897,2011-05-03 01:06:40+02:00,General,,2011-04-18 01:06:40.020000+02:00,Group 10,Resource52,2011-02-08 01:06:40.010000+01:00,task-16409,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-16 11:32:51.310000+01:00 +Internet,case-5897,2011-05-03 01:06:40+02:00,General,,2011-04-18 01:06:40.020000+02:00,Group 10,Resource52,2011-02-08 01:06:40.010000+01:00,task-16412,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-03-16 11:33:03.326000+01:00 +Internet,case-5897,2011-05-03 01:06:40+02:00,General,,2011-04-18 01:06:40.020000+02:00,Group 10,Resource52,2011-02-08 01:06:40.010000+01:00,task-16410,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-16 11:34:56.807000+01:00 +Internet,case-5897,2011-05-03 01:06:40+02:00,General,,2011-04-18 01:06:40.020000+02:00,Group 10,Resource52,2011-02-08 01:06:40.010000+01:00,task-16414,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-16 11:35:21.411000+01:00 +Internet,case-5897,2011-05-03 01:06:40+02:00,General,,2011-04-18 01:06:40.020000+02:00,Group 10,Resource52,2011-02-08 01:06:40.010000+01:00,task-16413,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-16 13:38:34.942000+01:00 +Internet,case-5919,2011-04-06 00:00:00+02:00,General,2011-03-31 07:47:54.447000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-11512,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-18 10:56:02.026000+01:00 +Internet,case-5919,2011-04-06 00:00:00+02:00,General,2011-03-31 07:47:54.447000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-12989,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-18 10:56:50.315000+01:00 +Internet,case-5919,2011-04-06 00:00:00+02:00,General,2011-03-31 07:47:54.447000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-12991,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-18 10:57:49.808000+01:00 +Internet,case-5919,2011-04-06 00:00:00+02:00,General,2011-03-31 07:47:54.447000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-12992,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-18 10:58:44.159000+01:00 +Internet,case-5919,2011-04-06 00:00:00+02:00,General,2011-03-31 07:47:54.447000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-12990,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-18 10:59:01.208000+01:00 +Internet,case-5919,2011-04-06 00:00:00+02:00,General,2011-03-31 07:47:54.447000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-12993,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-18 10:59:51.121000+01:00 +Internet,case-5921,2011-04-06 00:00:00+02:00,General,2011-04-04 08:13:48.018000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-11516,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 11:26:11.595000+01:00 +Internet,case-5921,2011-04-06 00:00:00+02:00,General,2011-04-04 08:13:48.018000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-12736,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 11:26:27.011000+01:00 +Internet,case-5921,2011-04-06 00:00:00+02:00,General,2011-04-04 08:13:48.018000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-12738,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 11:26:37.683000+01:00 +Internet,case-5921,2011-04-06 00:00:00+02:00,General,2011-04-04 08:13:48.018000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-12737,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 11:26:53.996000+01:00 +Internet,case-5921,2011-04-06 00:00:00+02:00,General,2011-04-04 08:13:48.018000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-12739,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 11:27:05.458000+01:00 +Internet,case-5921,2011-04-06 00:00:00+02:00,General,2011-04-04 08:13:48.018000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource11,2011-02-09 00:00:00.010000+01:00,task-12740,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 11:28:23.847000+01:00 +Internet,case-5922,2011-04-06 00:00:00+02:00,General,2011-04-05 14:29:29.177000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource17,2011-02-09 00:00:00.010000+01:00,task-11519,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-18 10:23:35.556000+01:00 +Internet,case-5922,2011-04-06 00:00:00+02:00,General,2011-04-05 14:29:29.177000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource17,2011-02-09 00:00:00.010000+01:00,task-12972,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-18 10:24:03.795000+01:00 +Internet,case-5922,2011-04-06 00:00:00+02:00,General,2011-04-05 14:29:29.177000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource17,2011-02-09 00:00:00.010000+01:00,task-12973,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-18 10:27:14.014000+01:00 +Internet,case-5922,2011-04-06 00:00:00+02:00,General,2011-04-05 14:29:29.177000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource17,2011-02-09 00:00:00.010000+01:00,task-12971,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-18 12:41:43.409000+01:00 +Internet,case-5922,2011-04-06 00:00:00+02:00,General,2011-04-05 14:29:29.177000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource17,2011-02-09 00:00:00.010000+01:00,task-13056,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-18 12:41:57.209000+01:00 +Internet,case-5922,2011-04-06 00:00:00+02:00,General,2011-04-05 14:29:29.177000+02:00,2011-04-06 00:00:00.020000+02:00,,Resource17,2011-02-09 00:00:00.010000+01:00,task-13057,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-22 14:55:29.516000+01:00 +Desk,case-5923,2011-02-28 00:00:00+01:00,General,2011-02-17 16:36:58.066000+01:00,2011-02-28 00:00:00.010000+01:00,,Resource07,2011-01-03 00:00:00.010000+01:00,task-11522,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-14 08:29:15.391000+01:00 +Desk,case-5923,2011-02-28 00:00:00+01:00,General,2011-02-17 16:36:58.066000+01:00,2011-02-28 00:00:00.010000+01:00,,Resource07,2011-01-03 00:00:00.010000+01:00,task-12092,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-14 08:29:48.971000+01:00 +Desk,case-5923,2011-02-28 00:00:00+01:00,General,2011-02-17 16:36:58.066000+01:00,2011-02-28 00:00:00.010000+01:00,,Resource07,2011-01-03 00:00:00.010000+01:00,task-12094,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-14 08:30:04.764000+01:00 +Desk,case-5923,2011-02-28 00:00:00+01:00,General,2011-02-17 16:36:58.066000+01:00,2011-02-28 00:00:00.010000+01:00,,Resource07,2011-01-03 00:00:00.010000+01:00,task-12095,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-14 08:30:14.253000+01:00 +Desk,case-5923,2011-02-28 00:00:00+01:00,General,2011-02-17 16:36:58.066000+01:00,2011-02-28 00:00:00.010000+01:00,,Resource07,2011-01-03 00:00:00.010000+01:00,task-12093,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-14 08:30:29.648000+01:00 +Desk,case-5923,2011-02-28 00:00:00+01:00,General,2011-02-17 16:36:58.066000+01:00,2011-02-28 00:00:00.010000+01:00,,Resource07,2011-01-03 00:00:00.010000+01:00,task-12096,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-14 08:30:47.931000+01:00 +Desk,case-5926,2011-03-22 01:06:40+01:00,Customer contact,2011-02-09 15:06:37.905000+01:00,2011-03-22 01:06:40.010000+01:00,,admin3,2011-01-25 01:06:40.010000+01:00,task-11526,Confirmation of receipt,complete,Group 1,admin2,2011-02-09 15:06:38.763000+01:00 +Desk,case-5928,2011-07-05 01:06:40+02:00,General,2011-07-06 15:12:01.192000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource17,2011-01-19 01:06:40.010000+01:00,task-11533,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-15 16:17:26.017000+01:00 +Desk,case-5928,2011-07-05 01:06:40+02:00,General,2011-07-06 15:12:01.192000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource17,2011-01-19 01:06:40.010000+01:00,task-16232,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-15 16:25:57.685000+01:00 +Desk,case-5928,2011-07-05 01:06:40+02:00,General,2011-07-06 15:12:01.192000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource17,2011-01-19 01:06:40.010000+01:00,task-16233,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-15 16:26:08.851000+01:00 +Desk,case-5928,2011-07-05 01:06:40+02:00,General,2011-07-06 15:12:01.192000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource17,2011-01-19 01:06:40.010000+01:00,task-16239,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-15 16:26:20.939000+01:00 +Desk,case-5928,2011-07-05 01:06:40+02:00,General,2011-07-06 15:12:01.192000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource17,2011-01-19 01:06:40.010000+01:00,task-16238,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-03-15 16:27:06.675000+01:00 +Desk,case-5928,2011-07-05 01:06:40+02:00,General,2011-07-06 15:12:01.192000+02:00,2011-07-05 01:06:40.020000+02:00,,Resource17,2011-01-19 01:06:40.010000+01:00,task-16243,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-03-15 16:27:28.532000+01:00 +Desk,case-5932,2011-03-14 00:00:00+01:00,General,2011-02-25 16:28:20.090000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource05,2011-01-24 00:00:00.010000+01:00,task-11540,Confirmation of receipt,complete,EMPTY,Resource05,2011-02-23 08:59:07.791000+01:00 +Desk,case-5932,2011-03-14 00:00:00+01:00,General,2011-02-25 16:28:20.090000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource05,2011-01-24 00:00:00.010000+01:00,task-13735,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-02-23 08:59:47.945000+01:00 +Desk,case-5932,2011-03-14 00:00:00+01:00,General,2011-02-25 16:28:20.090000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource05,2011-01-24 00:00:00.010000+01:00,task-13737,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-02-23 09:00:12.959000+01:00 +Desk,case-5932,2011-03-14 00:00:00+01:00,General,2011-02-25 16:28:20.090000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource05,2011-01-24 00:00:00.010000+01:00,task-13736,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-02-23 09:02:37.380000+01:00 +Desk,case-5932,2011-03-14 00:00:00+01:00,General,2011-02-25 16:28:20.090000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource05,2011-01-24 00:00:00.010000+01:00,task-13739,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-02-23 09:03:05.639000+01:00 +Desk,case-5932,2011-03-14 00:00:00+01:00,General,2011-02-25 16:28:20.090000+01:00,2011-03-14 00:00:00.010000+01:00,,Resource05,2011-01-24 00:00:00.010000+01:00,task-13738,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 11:41:29.984000+01:00 +Internet,case-5941,2011-05-04 01:06:40+02:00,General,2011-05-02 11:33:28.439000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource02,2011-02-09 01:06:40.010000+01:00,task-11634,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-22 16:38:42.897000+01:00 +Internet,case-5941,2011-05-04 01:06:40+02:00,General,2011-05-02 11:33:28.439000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource02,2011-02-09 01:06:40.010000+01:00,task-13712,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-22 16:47:45.719000+01:00 +Internet,case-5941,2011-05-04 01:06:40+02:00,General,2011-05-02 11:33:28.439000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource02,2011-02-09 01:06:40.010000+01:00,task-13713,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-22 16:51:11.147000+01:00 +Internet,case-5941,2011-05-04 01:06:40+02:00,General,2011-05-02 11:33:28.439000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource02,2011-02-09 01:06:40.010000+01:00,task-13715,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-22 16:51:35.046000+01:00 +Internet,case-5941,2011-05-04 01:06:40+02:00,General,2011-05-02 11:33:28.439000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource02,2011-02-09 01:06:40.010000+01:00,task-13714,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-23 10:44:27.382000+01:00 +Internet,case-5941,2011-05-04 01:06:40+02:00,General,2011-05-02 11:33:28.439000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource02,2011-02-09 01:06:40.010000+01:00,task-13827,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 12:03:35.307000+01:00 +Internet,case-5942,2011-04-07 01:06:40+02:00,General,2011-04-13 11:53:23.561000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-11648,Confirmation of receipt,complete,EMPTY,Resource18,2011-02-14 16:20:31.973000+01:00 +Internet,case-5942,2011-04-07 01:06:40+02:00,General,2011-04-13 11:53:23.561000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-12259,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-02-14 16:21:20.653000+01:00 +Internet,case-5942,2011-04-07 01:06:40+02:00,General,2011-04-13 11:53:23.561000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-12260,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-02-14 16:21:36.335000+01:00 +Internet,case-5942,2011-04-07 01:06:40+02:00,General,2011-04-13 11:53:23.561000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-12258,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-02-21 11:44:26.314000+01:00 +Internet,case-5942,2011-04-07 01:06:40+02:00,General,2011-04-13 11:53:23.561000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-13316,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-21 15:42:33.606000+01:00 +Internet,case-5942,2011-04-07 01:06:40+02:00,General,2011-04-13 11:53:23.561000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-13425,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 11:06:33.728000+01:00 +Internet,case-5943,2011-04-06 00:00:00+02:00,General,2011-02-22 10:33:42.168000+01:00,2011-04-06 00:00:00.020000+02:00,,Resource02,2011-02-09 00:00:00.010000+01:00,task-11649,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-14 15:46:18.518000+01:00 +Internet,case-5943,2011-04-06 00:00:00+02:00,General,2011-02-22 10:33:42.168000+01:00,2011-04-06 00:00:00.020000+02:00,,Resource02,2011-02-09 00:00:00.010000+01:00,task-12241,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-14 15:46:36.377000+01:00 +Internet,case-5943,2011-04-06 00:00:00+02:00,General,2011-02-22 10:33:42.168000+01:00,2011-04-06 00:00:00.020000+02:00,,Resource02,2011-02-09 00:00:00.010000+01:00,task-12242,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-14 15:47:01.511000+01:00 +Internet,case-5943,2011-04-06 00:00:00+02:00,General,2011-02-22 10:33:42.168000+01:00,2011-04-06 00:00:00.020000+02:00,,Resource02,2011-02-09 00:00:00.010000+01:00,task-12244,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-14 15:47:44.760000+01:00 +Internet,case-5943,2011-04-06 00:00:00+02:00,General,2011-02-22 10:33:42.168000+01:00,2011-04-06 00:00:00.020000+02:00,,Resource02,2011-02-09 00:00:00.010000+01:00,task-12243,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-15 16:43:16.047000+01:00 +Internet,case-5943,2011-04-06 00:00:00+02:00,General,2011-02-22 10:33:42.168000+01:00,2011-04-06 00:00:00.020000+02:00,,Resource02,2011-02-09 00:00:00.010000+01:00,task-12417,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-16 14:23:01.644000+01:00 +Internet,case-5946,2011-04-06 01:06:40+02:00,General,2011-04-06 11:26:14.402000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource04,2011-02-09 01:06:40.010000+01:00,task-11744,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-01 11:58:34.191000+01:00 +Internet,case-5946,2011-04-06 01:06:40+02:00,General,2011-04-06 11:26:14.402000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource04,2011-02-09 01:06:40.010000+01:00,task-14704,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-01 11:58:46.817000+01:00 +Internet,case-5946,2011-04-06 01:06:40+02:00,General,2011-04-06 11:26:14.402000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource04,2011-02-09 01:06:40.010000+01:00,task-14706,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-01 11:58:56.649000+01:00 +Internet,case-5946,2011-04-06 01:06:40+02:00,General,2011-04-06 11:26:14.402000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource04,2011-02-09 01:06:40.010000+01:00,task-14707,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 15:09:46.516000+01:00 +Internet,case-5946,2011-04-06 01:06:40+02:00,General,2011-04-06 11:26:14.402000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource04,2011-02-09 01:06:40.010000+01:00,task-14705,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-03 11:52:38.970000+01:00 +Internet,case-5946,2011-04-06 01:06:40+02:00,General,2011-04-06 11:26:14.402000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource04,2011-02-09 01:06:40.010000+01:00,task-15073,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-03 11:52:52.889000+01:00 +Internet,case-5952,2011-04-07 00:00:00+02:00,General,2011-03-07 08:46:58.682000+01:00,2011-04-07 00:00:00.020000+02:00,,Resource18,2011-02-10 00:00:00.010000+01:00,task-11839,Confirmation of receipt,complete,EMPTY,Resource18,2011-02-14 16:30:11.722000+01:00 +Internet,case-5952,2011-04-07 00:00:00+02:00,General,2011-03-07 08:46:58.682000+01:00,2011-04-07 00:00:00.020000+02:00,,Resource18,2011-02-10 00:00:00.010000+01:00,task-12268,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-02-14 16:30:31.521000+01:00 +Internet,case-5952,2011-04-07 00:00:00+02:00,General,2011-03-07 08:46:58.682000+01:00,2011-04-07 00:00:00.020000+02:00,,Resource18,2011-02-10 00:00:00.010000+01:00,task-12269,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-02-14 16:30:44.688000+01:00 +Internet,case-5952,2011-04-07 00:00:00+02:00,General,2011-03-07 08:46:58.682000+01:00,2011-04-07 00:00:00.020000+02:00,,Resource18,2011-02-10 00:00:00.010000+01:00,task-12267,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-02-21 11:45:07.795000+01:00 +Internet,case-5952,2011-04-07 00:00:00+02:00,General,2011-03-07 08:46:58.682000+01:00,2011-04-07 00:00:00.020000+02:00,,Resource18,2011-02-10 00:00:00.010000+01:00,task-13318,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-21 15:44:17.404000+01:00 +Internet,case-5952,2011-04-07 00:00:00+02:00,General,2011-03-07 08:46:58.682000+01:00,2011-04-07 00:00:00.020000+02:00,,Resource18,2011-02-10 00:00:00.010000+01:00,task-13428,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 11:34:04.762000+01:00 +Desk,case-5956,2011-05-02 01:06:40+02:00,General,2011-05-13 08:18:57.460000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-12005,Confirmation of receipt,complete,EMPTY,Resource15,2011-02-16 11:26:51.816000+01:00 +Desk,case-5956,2011-05-02 01:06:40+02:00,General,2011-05-13 08:18:57.460000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-12513,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-16 12:35:30.683000+01:00 +Desk,case-5956,2011-05-02 01:06:40+02:00,General,2011-05-13 08:18:57.460000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-12544,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-16 12:35:48.090000+01:00 +Desk,case-5956,2011-05-02 01:06:40+02:00,General,2011-05-13 08:18:57.460000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-12545,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-16 14:37:51.629000+01:00 +Desk,case-5956,2011-05-02 01:06:40+02:00,General,2011-05-13 08:18:57.460000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-12514,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-28 14:44:17.301000+01:00 +Desk,case-5956,2011-05-02 01:06:40+02:00,General,2011-05-13 08:18:57.460000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-14542,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-28 14:45:03.626000+01:00 +Desk,case-5957,2011-04-07 00:00:00+02:00,General,2011-04-07 14:57:18.547000+02:00,2011-04-07 00:00:00.020000+02:00,,Resource11,2011-02-10 00:00:00.010000+01:00,task-12006,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-17 10:21:31.067000+01:00 +Desk,case-5957,2011-04-07 00:00:00+02:00,General,2011-04-07 14:57:18.547000+02:00,2011-04-07 00:00:00.020000+02:00,,Resource11,2011-02-10 00:00:00.010000+01:00,task-12704,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-17 10:22:02.411000+01:00 +Desk,case-5957,2011-04-07 00:00:00+02:00,General,2011-04-07 14:57:18.547000+02:00,2011-04-07 00:00:00.020000+02:00,,Resource11,2011-02-10 00:00:00.010000+01:00,task-12706,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-17 10:22:15.628000+01:00 +Desk,case-5957,2011-04-07 00:00:00+02:00,General,2011-04-07 14:57:18.547000+02:00,2011-04-07 00:00:00.020000+02:00,,Resource11,2011-02-10 00:00:00.010000+01:00,task-12707,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-17 10:22:29.825000+01:00 +Desk,case-5957,2011-04-07 00:00:00+02:00,General,2011-04-07 14:57:18.547000+02:00,2011-04-07 00:00:00.020000+02:00,,Resource11,2011-02-10 00:00:00.010000+01:00,task-12705,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-17 10:22:51.453000+01:00 +Desk,case-5957,2011-04-07 00:00:00+02:00,General,2011-04-07 14:57:18.547000+02:00,2011-04-07 00:00:00.020000+02:00,,Resource11,2011-02-10 00:00:00.010000+01:00,task-12708,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-17 10:24:24.944000+01:00 +Desk,case-5958,2011-03-08 00:00:00+01:00,General,2011-02-17 08:19:32.055000+01:00,2011-03-08 00:00:00.010000+01:00,,Resource07,2011-01-11 00:00:00.010000+01:00,task-12007,Confirmation of receipt,complete,EMPTY,admin2,2011-02-17 08:19:33.087000+01:00 +Internet,case-5959,2011-04-04 00:00:00+02:00,General,2011-07-14 10:25:49.485000+02:00,2011-04-04 00:00:00.020000+02:00,,Resource26,2011-02-07 00:00:00.010000+01:00,task-12008,Confirmation of receipt,complete,EMPTY,Resource25,2011-02-24 13:29:42.415000+01:00 +Internet,case-5959,2011-04-04 00:00:00+02:00,General,2011-07-14 10:25:49.485000+02:00,2011-04-04 00:00:00.020000+02:00,,Resource26,2011-02-07 00:00:00.010000+01:00,task-14052,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-03-07 13:34:50.191000+01:00 +Internet,case-5959,2011-04-04 00:00:00+02:00,General,2011-07-14 10:25:49.485000+02:00,2011-04-04 00:00:00.020000+02:00,,Resource26,2011-02-07 00:00:00.010000+01:00,task-14053,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-15 12:00:51.677000+02:00 +Internet,case-5959,2011-04-04 00:00:00+02:00,General,2011-07-14 10:25:49.485000+02:00,2011-04-04 00:00:00.020000+02:00,,Resource26,2011-02-07 00:00:00.010000+01:00,task-28706,T10 Determine necessity to stop indication,complete,Group 1,Resource26,2011-06-15 12:48:44.620000+02:00 +Internet,case-5959,2011-04-04 00:00:00+02:00,General,2011-07-14 10:25:49.485000+02:00,2011-04-04 00:00:00.020000+02:00,,Resource26,2011-02-07 00:00:00.010000+01:00,task-15324,T04 Determine confirmation of receipt,complete,EMPTY,Resource26,2011-06-15 13:40:28.689000+02:00 +Internet,case-5959,2011-04-04 00:00:00+02:00,General,2011-07-14 10:25:49.485000+02:00,2011-04-04 00:00:00.020000+02:00,,Resource26,2011-02-07 00:00:00.010000+01:00,task-28709,T05 Print and send confirmation of receipt,complete,EMPTY,Resource26,2011-06-16 20:20:37.533000+02:00 +Desk,case-5961,2011-04-26 01:06:40+02:00,General,2011-04-20 16:04:55.300000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-02-04 01:06:40.010000+01:00,task-12058,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-25 15:33:01.866000+01:00 +Desk,case-5961,2011-04-26 01:06:40+02:00,General,2011-04-20 16:04:55.300000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-02-04 01:06:40.010000+01:00,task-14280,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-02-25 15:33:16.323000+01:00 +Desk,case-5961,2011-04-26 01:06:40+02:00,General,2011-04-20 16:04:55.300000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-02-04 01:06:40.010000+01:00,task-14281,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-02-28 11:34:18.014000+01:00 +Desk,case-5961,2011-04-26 01:06:40+02:00,General,2011-04-20 16:04:55.300000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-02-04 01:06:40.010000+01:00,task-14406,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-02-28 11:37:42.003000+01:00 +Desk,case-5961,2011-04-26 01:06:40+02:00,General,2011-04-20 16:04:55.300000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-02-04 01:06:40.010000+01:00,task-14282,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-28 12:18:05.833000+01:00 +Desk,case-5961,2011-04-26 01:06:40+02:00,General,2011-04-20 16:04:55.300000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-02-04 01:06:40.010000+01:00,task-14464,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 10:16:51.166000+01:00 +Internet,case-5983,2011-04-10 00:00:00+02:00,General,2011-03-29 14:10:17.464000+02:00,2011-04-10 00:00:00.020000+02:00,,Resource15,2011-02-13 00:00:00.010000+01:00,task-12172,Confirmation of receipt,complete,EMPTY,Resource15,2011-02-16 11:37:58.519000+01:00 +Internet,case-5983,2011-04-10 00:00:00+02:00,General,2011-03-29 14:10:17.464000+02:00,2011-04-10 00:00:00.020000+02:00,,Resource15,2011-02-13 00:00:00.010000+01:00,task-12523,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-16 12:37:06.649000+01:00 +Internet,case-5983,2011-04-10 00:00:00+02:00,General,2011-03-29 14:10:17.464000+02:00,2011-04-10 00:00:00.020000+02:00,,Resource15,2011-02-13 00:00:00.010000+01:00,task-12547,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-16 12:37:18.779000+01:00 +Internet,case-5983,2011-04-10 00:00:00+02:00,General,2011-03-29 14:10:17.464000+02:00,2011-04-10 00:00:00.020000+02:00,,Resource15,2011-02-13 00:00:00.010000+01:00,task-12548,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-16 14:24:36.004000+01:00 +Internet,case-5983,2011-04-10 00:00:00+02:00,General,2011-03-29 14:10:17.464000+02:00,2011-04-10 00:00:00.020000+02:00,,Resource15,2011-02-13 00:00:00.010000+01:00,task-12524,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-18 10:36:01.130000+01:00 +Internet,case-5983,2011-04-10 00:00:00+02:00,General,2011-03-29 14:10:17.464000+02:00,2011-04-10 00:00:00.020000+02:00,,Resource15,2011-02-13 00:00:00.010000+01:00,task-12983,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-18 10:36:19.540000+01:00 +Internet,case-5986,2011-05-08 01:06:40+02:00,General,2011-06-28 09:35:48.698000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-02-13 01:06:40.010000+01:00,task-12239,Confirmation of receipt,complete,EMPTY,Resource08,2011-02-28 16:11:41.938000+01:00 +Internet,case-5986,2011-05-08 01:06:40+02:00,General,2011-06-28 09:35:48.698000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-02-13 01:06:40.010000+01:00,task-14575,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-02-28 16:12:20.436000+01:00 +Internet,case-5986,2011-05-08 01:06:40+02:00,General,2011-06-28 09:35:48.698000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-02-13 01:06:40.010000+01:00,task-14578,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-02-28 16:20:59.567000+01:00 +Internet,case-5986,2011-05-08 01:06:40+02:00,General,2011-06-28 09:35:48.698000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-02-13 01:06:40.010000+01:00,task-14576,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-01 08:25:31.376000+01:00 +Internet,case-5986,2011-05-08 01:06:40+02:00,General,2011-06-28 09:35:48.698000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-02-13 01:06:40.010000+01:00,task-14628,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-01 08:29:51.010000+01:00 +Internet,case-5986,2011-05-08 01:06:40+02:00,General,2011-06-28 09:35:48.698000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-02-13 01:06:40.010000+01:00,task-14629,T16 Report reasons to hold request,complete,Group 1,Resource08,2011-03-01 08:34:32.492000+01:00 +Internet,case-5986,2011-05-08 01:06:40+02:00,General,2011-06-28 09:35:48.698000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-02-13 01:06:40.010000+01:00,task-14633,T17 Check report Y to stop indication,complete,Group 4,Resource08,2011-03-01 08:35:32.670000+01:00 +Internet,case-5986,2011-05-08 01:06:40+02:00,General,2011-06-28 09:35:48.698000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-02-13 01:06:40.010000+01:00,task-14638,T19 Determine report Y to stop indication,complete,Group 3,Resource08,2011-03-01 08:35:50.559000+01:00 +Internet,case-5986,2011-05-08 01:06:40+02:00,General,2011-06-28 09:35:48.698000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-02-13 01:06:40.010000+01:00,task-14641,T20 Print report Y to stop indication,complete,Group 2,Resource08,2011-03-01 08:36:13.441000+01:00 +Internet,case-5986,2011-05-08 01:06:40+02:00,General,2011-06-28 09:35:48.698000+02:00,2011-05-08 01:06:40.020000+02:00,,Resource08,2011-02-13 01:06:40.010000+01:00,task-14584,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 10:21:24.622000+01:00 +Internet,case-5987,2011-04-11 01:06:40+02:00,General,2011-02-16 14:23:07.250000+01:00,2011-04-11 01:06:40.020000+02:00,,Resource23,2011-02-14 01:06:40.010000+01:00,task-12249,Confirmation of receipt,complete,EMPTY,admin2,2011-02-16 14:23:08.600000+01:00 +Internet,case-5994,2011-04-11 00:00:00+02:00,General,2011-04-04 08:26:16.417000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-12277,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 09:43:30.149000+01:00 +Internet,case-5994,2011-04-11 00:00:00+02:00,General,2011-04-04 08:26:16.417000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-13460,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 09:43:51.042000+01:00 +Internet,case-5994,2011-04-11 00:00:00+02:00,General,2011-04-04 08:26:16.417000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-13462,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 09:44:13.036000+01:00 +Internet,case-5994,2011-04-11 00:00:00+02:00,General,2011-04-04 08:26:16.417000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-13463,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 09:44:27.624000+01:00 +Internet,case-5994,2011-04-11 00:00:00+02:00,General,2011-04-04 08:26:16.417000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-13461,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 09:44:54.659000+01:00 +Internet,case-5994,2011-04-11 00:00:00+02:00,General,2011-04-04 08:26:16.417000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-13464,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 10:01:01.459000+01:00 +Internet,case-5997,2011-04-11 00:00:00+02:00,General,2011-04-11 08:18:12.264000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-12280,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 13:37:31.328000+01:00 +Internet,case-5997,2011-04-11 00:00:00+02:00,General,2011-04-11 08:18:12.264000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-13601,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 13:37:46.799000+01:00 +Internet,case-5997,2011-04-11 00:00:00+02:00,General,2011-04-11 08:18:12.264000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-13603,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 13:37:58.037000+01:00 +Internet,case-5997,2011-04-11 00:00:00+02:00,General,2011-04-11 08:18:12.264000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-13604,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 13:38:09.067000+01:00 +Internet,case-5997,2011-04-11 00:00:00+02:00,General,2011-04-11 08:18:12.264000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-13602,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 13:38:19.754000+01:00 +Internet,case-5997,2011-04-11 00:00:00+02:00,General,2011-04-11 08:18:12.264000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource11,2011-02-14 00:00:00.010000+01:00,task-13605,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 13:38:36.667000+01:00 +Internet,case-5998,2011-04-11 00:00:00+02:00,General,2011-04-07 09:09:05.884000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource02,2011-02-14 00:00:00.010000+01:00,task-12281,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-22 12:33:34.076000+01:00 +Internet,case-5998,2011-04-11 00:00:00+02:00,General,2011-04-07 09:09:05.884000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource02,2011-02-14 00:00:00.010000+01:00,task-13559,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-22 12:33:54.700000+01:00 +Internet,case-5998,2011-04-11 00:00:00+02:00,General,2011-04-07 09:09:05.884000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource02,2011-02-14 00:00:00.010000+01:00,task-13560,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-22 12:39:29.929000+01:00 +Internet,case-5998,2011-04-11 00:00:00+02:00,General,2011-04-07 09:09:05.884000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource02,2011-02-14 00:00:00.010000+01:00,task-13562,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource02,2011-02-22 12:40:09.009000+01:00 +Internet,case-5998,2011-04-11 00:00:00+02:00,General,2011-04-07 09:09:05.884000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource02,2011-02-14 00:00:00.010000+01:00,task-13563,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-22 12:40:22.166000+01:00 +Internet,case-5998,2011-04-11 00:00:00+02:00,General,2011-04-07 09:09:05.884000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource02,2011-02-14 00:00:00.010000+01:00,task-13564,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource02,2011-02-22 12:40:32.708000+01:00 +Internet,case-5998,2011-04-11 00:00:00+02:00,General,2011-04-07 09:09:05.884000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource02,2011-02-14 00:00:00.010000+01:00,task-13565,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-22 12:40:43.308000+01:00 +Internet,case-5998,2011-04-11 00:00:00+02:00,General,2011-04-07 09:09:05.884000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource02,2011-02-14 00:00:00.010000+01:00,task-13566,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-22 12:45:06.258000+01:00 +Internet,case-5998,2011-04-11 00:00:00+02:00,General,2011-04-07 09:09:05.884000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource02,2011-02-14 00:00:00.010000+01:00,task-13561,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-23 10:31:51.061000+01:00 +Internet,case-5998,2011-04-11 00:00:00+02:00,General,2011-04-07 09:09:05.884000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource02,2011-02-14 00:00:00.010000+01:00,task-13798,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-23 11:57:55.759000+01:00 +Internet,case-6009,2011-07-08 01:06:40+02:00,General,2011-07-12 14:59:47.005000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource18,2010-12-22 01:06:40.010000+01:00,task-12324,Confirmation of receipt,complete,EMPTY,Resource18,2011-02-15 15:02:12.233000+01:00 +Internet,case-6009,2011-07-08 01:06:40+02:00,General,2011-07-12 14:59:47.005000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource18,2010-12-22 01:06:40.010000+01:00,task-12345,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-02-15 15:02:52.613000+01:00 +Internet,case-6009,2011-07-08 01:06:40+02:00,General,2011-07-12 14:59:47.005000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource18,2010-12-22 01:06:40.010000+01:00,task-12347,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-02-15 15:03:11.659000+01:00 +Internet,case-6009,2011-07-08 01:06:40+02:00,General,2011-07-12 14:59:47.005000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource18,2010-12-22 01:06:40.010000+01:00,task-12348,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-02-15 15:03:25.931000+01:00 +Internet,case-6009,2011-07-08 01:06:40+02:00,General,2011-07-12 14:59:47.005000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource18,2010-12-22 01:06:40.010000+01:00,task-12346,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-02-15 15:08:54.387000+01:00 +Internet,case-6009,2011-07-08 01:06:40+02:00,General,2011-07-12 14:59:47.005000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource18,2010-12-22 01:06:40.010000+01:00,task-12353,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-02-15 15:16:08.086000+01:00 +Internet,case-6010,2011-03-24 00:00:00+01:00,General,2011-04-28 09:24:48.587000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource09,2011-01-27 00:00:00.010000+01:00,task-12327,Confirmation of receipt,complete,EMPTY,Resource09,2011-03-22 14:00:09.265000+01:00 +Internet,case-6010,2011-03-24 00:00:00+01:00,General,2011-04-28 09:24:48.587000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource09,2011-01-27 00:00:00.010000+01:00,task-17204,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-22 14:16:48.583000+01:00 +Internet,case-6010,2011-03-24 00:00:00+01:00,General,2011-04-28 09:24:48.587000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource09,2011-01-27 00:00:00.010000+01:00,task-17211,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource09,2011-03-22 14:17:17.713000+01:00 +Internet,case-6010,2011-03-24 00:00:00+01:00,General,2011-04-28 09:24:48.587000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource09,2011-01-27 00:00:00.010000+01:00,task-17212,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-03-22 14:17:33.559000+01:00 +Internet,case-6010,2011-03-24 00:00:00+01:00,General,2011-04-28 09:24:48.587000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource09,2011-01-27 00:00:00.010000+01:00,task-17213,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-03-22 14:18:27.266000+01:00 +Internet,case-6010,2011-03-24 00:00:00+01:00,General,2011-04-28 09:24:48.587000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource09,2011-01-27 00:00:00.010000+01:00,task-17203,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-03-22 14:23:56.997000+01:00 +Internet,case-6010,2011-03-24 00:00:00+01:00,General,2011-04-28 09:24:48.587000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource09,2011-01-27 00:00:00.010000+01:00,task-17235,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-03-22 14:24:23.966000+01:00 +Internet,case-6010,2011-03-24 00:00:00+01:00,General,2011-04-28 09:24:48.587000+02:00,2011-03-24 00:00:00.010000+01:00,,Resource09,2011-01-27 00:00:00.010000+01:00,task-17236,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-22 14:59:14.284000+01:00 +Internet,case-6012,2011-05-04 14:56:16.838000+02:00,General,2011-03-16 12:10:18.381000+01:00,2011-05-04 14:56:16.838000+02:00,,Resource06,2011-02-15 14:56:16.838000+01:00,task-12336,Confirmation of receipt,complete,EMPTY,Resource06,2011-02-15 16:21:09.031000+01:00 +Internet,case-6012,2011-05-04 14:56:16.838000+02:00,General,2011-03-16 12:10:18.381000+01:00,2011-05-04 14:56:16.838000+02:00,,Resource06,2011-02-15 14:56:16.838000+01:00,task-12394,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-02-15 16:21:27.674000+01:00 +Internet,case-6012,2011-05-04 14:56:16.838000+02:00,General,2011-03-16 12:10:18.381000+01:00,2011-05-04 14:56:16.838000+02:00,,Resource06,2011-02-15 14:56:16.838000+01:00,task-12396,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-02-15 16:21:36.900000+01:00 +Internet,case-6012,2011-05-04 14:56:16.838000+02:00,General,2011-03-16 12:10:18.381000+01:00,2011-05-04 14:56:16.838000+02:00,,Resource06,2011-02-15 14:56:16.838000+01:00,task-12397,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-02-15 16:21:46.222000+01:00 +Internet,case-6012,2011-05-04 14:56:16.838000+02:00,General,2011-03-16 12:10:18.381000+01:00,2011-05-04 14:56:16.838000+02:00,,Resource06,2011-02-15 14:56:16.838000+01:00,task-12395,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-02-15 16:21:58.843000+01:00 +Internet,case-6012,2011-05-04 14:56:16.838000+02:00,General,2011-03-16 12:10:18.381000+01:00,2011-05-04 14:56:16.838000+02:00,,Resource06,2011-02-15 14:56:16.838000+01:00,task-12398,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-02-15 16:22:14.939000+01:00 +Internet,case-6015,2011-05-04 15:00:43.554000+02:00,General,2011-03-11 15:50:56.266000+01:00,2011-05-04 15:00:43.554000+02:00,,Resource06,2011-02-15 15:00:43.554000+01:00,task-12344,Confirmation of receipt,complete,EMPTY,Resource06,2011-02-15 15:29:29.915000+01:00 +Internet,case-6015,2011-05-04 15:00:43.554000+02:00,General,2011-03-11 15:50:56.266000+01:00,2011-05-04 15:00:43.554000+02:00,,Resource06,2011-02-15 15:00:43.554000+01:00,task-12368,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-02-15 15:45:56.421000+01:00 +Internet,case-6015,2011-05-04 15:00:43.554000+02:00,General,2011-03-11 15:50:56.266000+01:00,2011-05-04 15:00:43.554000+02:00,,Resource06,2011-02-15 15:00:43.554000+01:00,task-12371,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-02-15 15:46:10.121000+01:00 +Internet,case-6015,2011-05-04 15:00:43.554000+02:00,General,2011-03-11 15:50:56.266000+01:00,2011-05-04 15:00:43.554000+02:00,,Resource06,2011-02-15 15:00:43.554000+01:00,task-12369,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-02-15 15:46:33.991000+01:00 +Internet,case-6015,2011-05-04 15:00:43.554000+02:00,General,2011-03-11 15:50:56.266000+01:00,2011-05-04 15:00:43.554000+02:00,,Resource06,2011-02-15 15:00:43.554000+01:00,task-12373,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource06,2011-02-15 15:47:20.899000+01:00 +Internet,case-6015,2011-05-04 15:00:43.554000+02:00,General,2011-03-11 15:50:56.266000+01:00,2011-05-04 15:00:43.554000+02:00,,Resource06,2011-02-15 15:00:43.554000+01:00,task-12374,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-02-15 15:47:47.680000+01:00 +Internet,case-6015,2011-05-04 15:00:43.554000+02:00,General,2011-03-11 15:50:56.266000+01:00,2011-05-04 15:00:43.554000+02:00,,Resource06,2011-02-15 15:00:43.554000+01:00,task-12375,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-02-15 15:48:36.617000+01:00 +Internet,case-6015,2011-05-04 15:00:43.554000+02:00,General,2011-03-11 15:50:56.266000+01:00,2011-05-04 15:00:43.554000+02:00,,Resource06,2011-02-15 15:00:43.554000+01:00,task-12372,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-16 14:03:48.596000+01:00 +Internet,case-6028,2011-04-06 01:06:40+02:00,General,2011-08-29 11:59:25.489000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource23,2011-02-09 01:06:40.010000+01:00,task-12563,Confirmation of receipt,complete,EMPTY,Resource23,2011-02-18 13:12:55.873000+01:00 +Internet,case-6028,2011-04-06 01:06:40+02:00,General,2011-08-29 11:59:25.489000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource23,2011-02-09 01:06:40.010000+01:00,task-13063,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-02-18 13:50:02.588000+01:00 +Internet,case-6028,2011-04-06 01:06:40+02:00,General,2011-08-29 11:59:25.489000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource23,2011-02-09 01:06:40.010000+01:00,task-13073,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource23,2011-02-18 13:52:21.237000+01:00 +Internet,case-6028,2011-04-06 01:06:40+02:00,General,2011-08-29 11:59:25.489000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource23,2011-02-09 01:06:40.010000+01:00,task-13072,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource23,2011-02-18 13:52:54.812000+01:00 +Internet,case-6028,2011-04-06 01:06:40+02:00,General,2011-08-29 11:59:25.489000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource23,2011-02-09 01:06:40.010000+01:00,task-13074,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-02-18 13:53:41.779000+01:00 +Internet,case-6028,2011-04-06 01:06:40+02:00,General,2011-08-29 11:59:25.489000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource23,2011-02-09 01:06:40.010000+01:00,task-13075,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-02-18 13:54:00.377000+01:00 +Internet,case-6028,2011-04-06 01:06:40+02:00,General,2011-08-29 11:59:25.489000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource23,2011-02-09 01:06:40.010000+01:00,task-13062,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-21 08:30:46.099000+01:00 +Internet,case-6028,2011-04-06 01:06:40+02:00,General,2011-08-29 11:59:25.489000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource23,2011-02-09 01:06:40.010000+01:00,task-13218,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-21 08:31:01.425000+01:00 +Internet,case-6028,2011-04-06 01:06:40+02:00,General,2011-08-29 11:59:25.489000+02:00,2011-04-06 01:06:40.020000+02:00,,Resource23,2011-02-09 01:06:40.010000+01:00,task-13219,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-22 15:42:12.080000+01:00 +Internet,case-6032,2011-04-13 00:00:00+02:00,General,2011-04-12 07:30:39.271000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-12641,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 13:54:08.256000+01:00 +Internet,case-6032,2011-04-13 00:00:00+02:00,General,2011-04-12 07:30:39.271000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-13627,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 13:54:22.951000+01:00 +Internet,case-6032,2011-04-13 00:00:00+02:00,General,2011-04-12 07:30:39.271000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-13629,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 13:54:39.175000+01:00 +Internet,case-6032,2011-04-13 00:00:00+02:00,General,2011-04-12 07:30:39.271000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-13630,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 13:54:49.009000+01:00 +Internet,case-6032,2011-04-13 00:00:00+02:00,General,2011-04-12 07:30:39.271000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-13628,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 13:54:59.636000+01:00 +Internet,case-6032,2011-04-13 00:00:00+02:00,General,2011-04-12 07:30:39.271000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-13631,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 13:55:31.584000+01:00 +Internet,case-6034,2011-04-13 00:00:00+02:00,General,2011-04-04 08:38:31.554000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource11,2011-02-16 00:00:00.010000+01:00,task-12649,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 14:38:33.075000+01:00 +Internet,case-6034,2011-04-13 00:00:00+02:00,General,2011-04-04 08:38:31.554000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource11,2011-02-16 00:00:00.010000+01:00,task-13672,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 14:39:59.146000+01:00 +Internet,case-6034,2011-04-13 00:00:00+02:00,General,2011-04-04 08:38:31.554000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource11,2011-02-16 00:00:00.010000+01:00,task-13674,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 14:40:13.046000+01:00 +Internet,case-6034,2011-04-13 00:00:00+02:00,General,2011-04-04 08:38:31.554000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource11,2011-02-16 00:00:00.010000+01:00,task-13675,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 14:40:24.815000+01:00 +Internet,case-6034,2011-04-13 00:00:00+02:00,General,2011-04-04 08:38:31.554000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource11,2011-02-16 00:00:00.010000+01:00,task-13673,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 14:40:34.911000+01:00 +Internet,case-6034,2011-04-13 00:00:00+02:00,General,2011-04-04 08:38:31.554000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource11,2011-02-16 00:00:00.010000+01:00,task-13676,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 14:40:49.472000+01:00 +Internet,case-6036,2011-04-12 00:00:00+02:00,General,2011-04-04 08:46:19.676000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-12655,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 14:09:48.369000+01:00 +Internet,case-6036,2011-04-12 00:00:00+02:00,General,2011-04-04 08:46:19.676000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-13648,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 14:10:02.010000+01:00 +Internet,case-6036,2011-04-12 00:00:00+02:00,General,2011-04-04 08:46:19.676000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-13650,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 14:10:19.024000+01:00 +Internet,case-6036,2011-04-12 00:00:00+02:00,General,2011-04-04 08:46:19.676000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-13651,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 14:10:28.732000+01:00 +Internet,case-6036,2011-04-12 00:00:00+02:00,General,2011-04-04 08:46:19.676000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-13649,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 14:10:39.921000+01:00 +Internet,case-6036,2011-04-12 00:00:00+02:00,General,2011-04-04 08:46:19.676000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-13652,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 14:10:55.059000+01:00 +Internet,case-6055,2011-04-14 01:06:40+02:00,General,2011-04-04 13:11:59.089000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource11,2011-02-16 01:06:40.010000+01:00,task-12910,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 11:08:27.138000+01:00 +Internet,case-6055,2011-04-14 01:06:40+02:00,General,2011-04-04 13:11:59.089000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource11,2011-02-16 01:06:40.010000+01:00,task-13498,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 11:08:48.079000+01:00 +Internet,case-6055,2011-04-14 01:06:40+02:00,General,2011-04-04 13:11:59.089000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource11,2011-02-16 01:06:40.010000+01:00,task-13500,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 11:09:02.605000+01:00 +Internet,case-6055,2011-04-14 01:06:40+02:00,General,2011-04-04 13:11:59.089000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource11,2011-02-16 01:06:40.010000+01:00,task-13501,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 11:09:15.119000+01:00 +Internet,case-6055,2011-04-14 01:06:40+02:00,General,2011-04-04 13:11:59.089000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource11,2011-02-16 01:06:40.010000+01:00,task-13499,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 11:09:25.958000+01:00 +Internet,case-6055,2011-04-14 01:06:40+02:00,General,2011-04-04 13:11:59.089000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource11,2011-02-16 01:06:40.010000+01:00,task-13502,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 11:09:42.816000+01:00 +Internet,case-6056,2011-04-13 01:06:40+02:00,General,2011-05-31 14:41:22.033000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource14,2011-02-16 01:06:40.010000+01:00,task-12925,Confirmation of receipt,complete,EMPTY,Resource14,2011-03-16 14:21:26.788000+01:00 +Internet,case-6056,2011-04-13 01:06:40+02:00,General,2011-05-31 14:41:22.033000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource14,2011-02-16 01:06:40.010000+01:00,task-16469,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-03-16 14:28:24.821000+01:00 +Internet,case-6056,2011-04-13 01:06:40+02:00,General,2011-05-31 14:41:22.033000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource14,2011-02-16 01:06:40.010000+01:00,task-16479,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-03-16 14:28:46.788000+01:00 +Internet,case-6056,2011-04-13 01:06:40+02:00,General,2011-05-31 14:41:22.033000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource14,2011-02-16 01:06:40.010000+01:00,task-16468,T02 Check confirmation of receipt,complete,EMPTY,Resource14,2011-03-21 11:40:46.087000+01:00 +Internet,case-6056,2011-04-13 01:06:40+02:00,General,2011-05-31 14:41:22.033000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource14,2011-02-16 01:06:40.010000+01:00,task-16939,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-03-21 11:42:07.701000+01:00 +Internet,case-6056,2011-04-13 01:06:40+02:00,General,2011-05-31 14:41:22.033000+02:00,2011-04-13 01:06:40.020000+02:00,,Resource14,2011-02-16 01:06:40.010000+01:00,task-16940,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-22 14:29:14.386000+01:00 +Internet,case-6068,2011-04-13 00:00:00+02:00,General,2011-02-25 11:11:42.522000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-12969,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-25 08:35:57.643000+01:00 +Internet,case-6068,2011-04-13 00:00:00+02:00,General,2011-02-25 11:11:42.522000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-14166,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-25 08:36:14.984000+01:00 +Internet,case-6068,2011-04-13 00:00:00+02:00,General,2011-02-25 11:11:42.522000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-14168,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-25 08:36:33.624000+01:00 +Internet,case-6068,2011-04-13 00:00:00+02:00,General,2011-02-25 11:11:42.522000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-14169,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-25 08:36:50.332000+01:00 +Internet,case-6068,2011-04-13 00:00:00+02:00,General,2011-02-25 11:11:42.522000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-14167,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-25 08:37:04.785000+01:00 +Internet,case-6068,2011-04-13 00:00:00+02:00,General,2011-02-25 11:11:42.522000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-14170,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-25 08:37:27.287000+01:00 +Internet,case-6069,2011-04-13 00:00:00+02:00,General,2011-03-04 00:00:00.010000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-12978,Confirmation of receipt,complete,EMPTY,Resource07,2011-02-25 08:30:18.153000+01:00 +Internet,case-6069,2011-04-13 00:00:00+02:00,General,2011-03-04 00:00:00.010000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-14161,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-02-25 08:30:32.837000+01:00 +Internet,case-6069,2011-04-13 00:00:00+02:00,General,2011-03-04 00:00:00.010000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-14163,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-02-25 08:30:46.492000+01:00 +Internet,case-6069,2011-04-13 00:00:00+02:00,General,2011-03-04 00:00:00.010000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-14164,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-02-25 08:30:57.246000+01:00 +Internet,case-6069,2011-04-13 00:00:00+02:00,General,2011-03-04 00:00:00.010000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-14162,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-02-25 08:31:19.584000+01:00 +Internet,case-6069,2011-04-13 00:00:00+02:00,General,2011-03-04 00:00:00.010000+01:00,2011-04-13 00:00:00.020000+02:00,,Resource07,2011-02-16 00:00:00.010000+01:00,task-14165,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-02-25 09:06:13.365000+01:00 +Internet,case-6070,2011-04-14 00:00:00+02:00,General,2011-03-09 14:40:03.533000+01:00,2011-04-14 00:00:00.020000+02:00,,Resource02,2011-02-17 00:00:00.010000+01:00,task-12988,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-23 12:21:43.483000+01:00 +Internet,case-6070,2011-04-14 00:00:00+02:00,General,2011-03-09 14:40:03.533000+01:00,2011-04-14 00:00:00.020000+02:00,,Resource02,2011-02-17 00:00:00.010000+01:00,task-13853,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-23 12:22:41.433000+01:00 +Internet,case-6070,2011-04-14 00:00:00+02:00,General,2011-03-09 14:40:03.533000+01:00,2011-04-14 00:00:00.020000+02:00,,Resource02,2011-02-17 00:00:00.010000+01:00,task-13854,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-23 12:23:23.308000+01:00 +Internet,case-6070,2011-04-14 00:00:00+02:00,General,2011-03-09 14:40:03.533000+01:00,2011-04-14 00:00:00.020000+02:00,,Resource02,2011-02-17 00:00:00.010000+01:00,task-13855,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-02-28 08:35:24.034000+01:00 +Internet,case-6070,2011-04-14 00:00:00+02:00,General,2011-03-09 14:40:03.533000+01:00,2011-04-14 00:00:00.020000+02:00,,Resource02,2011-02-17 00:00:00.010000+01:00,task-14332,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 09:41:41.624000+01:00 +Internet,case-6070,2011-04-14 00:00:00+02:00,General,2011-03-09 14:40:03.533000+01:00,2011-04-14 00:00:00.020000+02:00,,Resource02,2011-02-17 00:00:00.010000+01:00,task-13856,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-09 14:13:26.588000+01:00 +Internet,case-6070,2011-04-14 00:00:00+02:00,General,2011-03-09 14:40:03.533000+01:00,2011-04-14 00:00:00.020000+02:00,,Resource02,2011-02-17 00:00:00.010000+01:00,task-15636,T11 Create document X request unlicensed,complete,Group 1,Resource02,2011-03-09 14:39:16.401000+01:00 +Internet,case-6070,2011-04-14 00:00:00+02:00,General,2011-03-09 14:40:03.533000+01:00,2011-04-14 00:00:00.020000+02:00,,Resource02,2011-02-17 00:00:00.010000+01:00,task-15639,T12 Check document X request unlicensed,complete,Group 4,Resource02,2011-03-09 14:39:31.110000+01:00 +Internet,case-6070,2011-04-14 00:00:00+02:00,General,2011-03-09 14:40:03.533000+01:00,2011-04-14 00:00:00.020000+02:00,,Resource02,2011-02-17 00:00:00.010000+01:00,task-15641,T14 Determine document X request unlicensed,complete,Group 3,Resource02,2011-03-09 14:39:45.537000+01:00 +Internet,case-6070,2011-04-14 00:00:00+02:00,General,2011-03-09 14:40:03.533000+01:00,2011-04-14 00:00:00.020000+02:00,,Resource02,2011-02-17 00:00:00.010000+01:00,task-15642,T15 Print document X request unlicensed,complete,Group 2,Resource02,2011-03-09 14:40:03.379000+01:00 +Internet,case-6071,2011-04-14 00:00:00+02:00,General,2011-04-15 10:48:38.110000+02:00,2011-04-14 00:00:00.020000+02:00,,Resource09,2011-02-17 00:00:00.010000+01:00,task-13007,Confirmation of receipt,complete,EMPTY,admin2,2011-04-15 10:48:39.224000+02:00 +Desk,case-6078,2011-04-11 00:00:00+02:00,General,2011-04-11 15:03:39.275000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource08,2011-02-14 00:00:00.010000+01:00,task-13141,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-01 10:50:41.841000+01:00 +Desk,case-6078,2011-04-11 00:00:00+02:00,General,2011-04-11 15:03:39.275000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource08,2011-02-14 00:00:00.010000+01:00,task-14694,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-01 10:51:48.724000+01:00 +Desk,case-6078,2011-04-11 00:00:00+02:00,General,2011-04-11 15:03:39.275000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource08,2011-02-14 00:00:00.010000+01:00,task-14696,T04 Determine confirmation of receipt,complete,EMPTY,admin3,2011-03-02 08:58:25.690000+01:00 +Desk,case-6078,2011-04-11 00:00:00+02:00,General,2011-04-11 15:03:39.275000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource08,2011-02-14 00:00:00.010000+01:00,task-14856,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-02 14:23:33.253000+01:00 +Desk,case-6078,2011-04-11 00:00:00+02:00,General,2011-04-11 15:03:39.275000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource08,2011-02-14 00:00:00.010000+01:00,task-14695,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-15 15:35:06.940000+01:00 +Desk,case-6078,2011-04-11 00:00:00+02:00,General,2011-04-11 15:03:39.275000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource08,2011-02-14 00:00:00.010000+01:00,task-16216,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-15 15:35:24.673000+01:00 +Desk,case-6080,2011-04-12 01:06:40+02:00,General,2011-08-30 15:42:21.722000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource14,2011-02-15 01:06:40.010000+01:00,task-13146,Confirmation of receipt,complete,EMPTY,Resource14,2011-08-24 10:34:05.988000+02:00 +Desk,case-6080,2011-04-12 01:06:40+02:00,General,2011-08-30 15:42:21.722000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource14,2011-02-15 01:06:40.010000+01:00,task-37017,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-24 10:34:33.983000+02:00 +Desk,case-6080,2011-04-12 01:06:40+02:00,General,2011-08-30 15:42:21.722000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource14,2011-02-15 01:06:40.010000+01:00,task-37020,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-24 10:34:55.136000+02:00 +Desk,case-6080,2011-04-12 01:06:40+02:00,General,2011-08-30 15:42:21.722000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource14,2011-02-15 01:06:40.010000+01:00,task-37021,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-24 10:35:17.321000+02:00 +Desk,case-6080,2011-04-12 01:06:40+02:00,General,2011-08-30 15:42:21.722000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource14,2011-02-15 01:06:40.010000+01:00,task-37018,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-24 10:37:39.051000+02:00 +Desk,case-6080,2011-04-12 01:06:40+02:00,General,2011-08-30 15:42:21.722000+02:00,2011-04-12 01:06:40.020000+02:00,,Resource14,2011-02-15 01:06:40.010000+01:00,task-37023,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-24 10:49:15.317000+02:00 +Desk,case-6084,2011-04-08 00:00:00+02:00,General,2011-04-04 12:59:01.454000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource11,2011-02-11 00:00:00.010000+01:00,task-13200,Confirmation of receipt,complete,EMPTY,Resource01,2011-02-22 12:50:06.201000+01:00 +Desk,case-6084,2011-04-08 00:00:00+02:00,General,2011-04-04 12:59:01.454000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource11,2011-02-11 00:00:00.010000+01:00,task-13572,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-02-22 12:50:25.949000+01:00 +Desk,case-6084,2011-04-08 00:00:00+02:00,General,2011-04-04 12:59:01.454000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource11,2011-02-11 00:00:00.010000+01:00,task-13574,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-02-22 12:50:38.221000+01:00 +Desk,case-6084,2011-04-08 00:00:00+02:00,General,2011-04-04 12:59:01.454000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource11,2011-02-11 00:00:00.010000+01:00,task-13575,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-02-22 12:50:47.627000+01:00 +Desk,case-6084,2011-04-08 00:00:00+02:00,General,2011-04-04 12:59:01.454000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource11,2011-02-11 00:00:00.010000+01:00,task-13573,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-02-22 12:50:58.790000+01:00 +Desk,case-6084,2011-04-08 00:00:00+02:00,General,2011-04-04 12:59:01.454000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource11,2011-02-11 00:00:00.010000+01:00,task-13576,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-02-22 12:51:22.240000+01:00 +Internet,case-6108,2011-04-15 00:00:00+02:00,General,2011-04-19 15:00:56.690000+02:00,2011-04-15 00:00:00.020000+02:00,,Resource09,2011-02-21 00:00:00.010000+01:00,task-13275,Confirmation of receipt,complete,EMPTY,Resource09,2011-04-11 11:35:13.544000+02:00 +Internet,case-6108,2011-04-15 00:00:00+02:00,General,2011-04-19 15:00:56.690000+02:00,2011-04-15 00:00:00.020000+02:00,,Resource09,2011-02-21 00:00:00.010000+01:00,task-19834,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-04-11 11:35:34.107000+02:00 +Internet,case-6108,2011-04-15 00:00:00+02:00,General,2011-04-19 15:00:56.690000+02:00,2011-04-15 00:00:00.020000+02:00,,Resource09,2011-02-21 00:00:00.010000+01:00,task-19835,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-04-11 11:36:06.319000+02:00 +Internet,case-6108,2011-04-15 00:00:00+02:00,General,2011-04-19 15:00:56.690000+02:00,2011-04-15 00:00:00.020000+02:00,,Resource09,2011-02-21 00:00:00.010000+01:00,task-19833,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-04-11 11:37:15.543000+02:00 +Internet,case-6108,2011-04-15 00:00:00+02:00,General,2011-04-19 15:00:56.690000+02:00,2011-04-15 00:00:00.020000+02:00,,Resource09,2011-02-21 00:00:00.010000+01:00,task-19840,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-04-11 11:37:48.452000+02:00 +Internet,case-6108,2011-04-15 00:00:00+02:00,General,2011-04-19 15:00:56.690000+02:00,2011-04-15 00:00:00.020000+02:00,,Resource09,2011-02-21 00:00:00.010000+01:00,task-19841,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-04-11 12:08:45.470000+02:00 +Internet,case-6110,2011-04-16 00:00:00+02:00,General,2011-02-24 00:00:00.010000+01:00,2011-04-16 00:00:00.020000+02:00,,Resource23,2011-02-19 00:00:00.010000+01:00,task-13295,Confirmation of receipt,complete,EMPTY,admin2,2011-04-06 11:01:22.808000+02:00 +Internet,case-6112,2011-04-15 00:00:00+02:00,General,2011-03-01 09:57:13.497000+01:00,2011-04-15 00:00:00.020000+02:00,,Resource09,2011-02-18 00:00:00.010000+01:00,task-13317,Confirmation of receipt,complete,EMPTY,admin2,2011-03-01 09:57:14.427000+01:00 +Internet,case-6113,2011-04-17 00:00:00+02:00,General,2011-07-26 08:06:13.303000+02:00,2011-04-17 00:00:00.020000+02:00,,Resource12,2011-02-20 00:00:00.010000+01:00,task-13331,Confirmation of receipt,complete,EMPTY,Resource12,2011-03-03 11:03:56.100000+01:00 +Internet,case-6113,2011-04-17 00:00:00+02:00,General,2011-07-26 08:06:13.303000+02:00,2011-04-17 00:00:00.020000+02:00,,Resource12,2011-02-20 00:00:00.010000+01:00,task-15040,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-03-07 08:18:34.373000+01:00 +Internet,case-6113,2011-04-17 00:00:00+02:00,General,2011-07-26 08:06:13.303000+02:00,2011-04-17 00:00:00.020000+02:00,,Resource12,2011-02-20 00:00:00.010000+01:00,task-15269,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-07 16:29:43.657000+01:00 +Internet,case-6113,2011-04-17 00:00:00+02:00,General,2011-07-26 08:06:13.303000+02:00,2011-04-17 00:00:00.020000+02:00,,Resource12,2011-02-20 00:00:00.010000+01:00,task-15397,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-08 10:28:34.433000+01:00 +Internet,case-6113,2011-04-17 00:00:00+02:00,General,2011-07-26 08:06:13.303000+02:00,2011-04-17 00:00:00.020000+02:00,,Resource12,2011-02-20 00:00:00.010000+01:00,task-15041,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-03-14 09:47:49.474000+01:00 +Internet,case-6113,2011-04-17 00:00:00+02:00,General,2011-07-26 08:06:13.303000+02:00,2011-04-17 00:00:00.020000+02:00,,Resource12,2011-02-20 00:00:00.010000+01:00,task-16027,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-03-14 09:48:28.694000+01:00 +Internet,case-6116,2011-04-18 00:00:00+02:00,General,2011-03-11 09:34:22.368000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource18,2011-02-21 00:00:00.010000+01:00,task-13346,Confirmation of receipt,complete,EMPTY,Resource18,2011-02-24 15:48:16.499000+01:00 +Internet,case-6116,2011-04-18 00:00:00+02:00,General,2011-03-11 09:34:22.368000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource18,2011-02-21 00:00:00.010000+01:00,task-14122,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-02-24 15:48:34.863000+01:00 +Internet,case-6116,2011-04-18 00:00:00+02:00,General,2011-03-11 09:34:22.368000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource18,2011-02-21 00:00:00.010000+01:00,task-14124,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-02-24 15:48:47.328000+01:00 +Internet,case-6116,2011-04-18 00:00:00+02:00,General,2011-03-11 09:34:22.368000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource18,2011-02-21 00:00:00.010000+01:00,task-14126,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-02-24 15:49:36.398000+01:00 +Internet,case-6116,2011-04-18 00:00:00+02:00,General,2011-03-11 09:34:22.368000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource18,2011-02-21 00:00:00.010000+01:00,task-14123,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-02-24 15:56:47.417000+01:00 +Internet,case-6116,2011-04-18 00:00:00+02:00,General,2011-03-11 09:34:22.368000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource18,2011-02-21 00:00:00.010000+01:00,task-14129,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-02-24 15:58:49.340000+01:00 +Internet,case-6128,2011-06-13 01:06:40+02:00,General,2011-06-08 00:00:00.020000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource08,2011-02-21 01:06:40.010000+01:00,task-13444,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-01 12:01:43.728000+01:00 +Internet,case-6128,2011-06-13 01:06:40+02:00,General,2011-06-08 00:00:00.020000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource08,2011-02-21 01:06:40.010000+01:00,task-14709,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-01 12:13:55.733000+01:00 +Internet,case-6128,2011-06-13 01:06:40+02:00,General,2011-06-08 00:00:00.020000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource08,2011-02-21 01:06:40.010000+01:00,task-14711,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-01 12:20:43.673000+01:00 +Internet,case-6128,2011-06-13 01:06:40+02:00,General,2011-06-08 00:00:00.020000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource08,2011-02-21 01:06:40.010000+01:00,task-14708,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-01 12:21:07.289000+01:00 +Internet,case-6128,2011-06-13 01:06:40+02:00,General,2011-06-08 00:00:00.020000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource08,2011-02-21 01:06:40.010000+01:00,task-14713,T04 Determine confirmation of receipt,complete,EMPTY,admin3,2011-03-02 09:01:11.685000+01:00 +Internet,case-6128,2011-06-13 01:06:40+02:00,General,2011-06-08 00:00:00.020000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource08,2011-02-21 01:06:40.010000+01:00,task-14862,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-02 14:30:12.818000+01:00 +Internet,case-6130,2011-04-05 01:06:40+02:00,General,2011-03-31 09:55:25.855000+02:00,2011-04-05 01:06:40.020000+02:00,,Resource11,2011-02-08 01:06:40.010000+01:00,task-13527,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-10 12:09:05.416000+01:00 +Internet,case-6130,2011-04-05 01:06:40+02:00,General,2011-03-31 09:55:25.855000+02:00,2011-04-05 01:06:40.020000+02:00,,Resource11,2011-02-08 01:06:40.010000+01:00,task-15769,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-10 12:09:20.153000+01:00 +Internet,case-6130,2011-04-05 01:06:40+02:00,General,2011-03-31 09:55:25.855000+02:00,2011-04-05 01:06:40.020000+02:00,,Resource11,2011-02-08 01:06:40.010000+01:00,task-15773,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-10 12:09:33.830000+01:00 +Internet,case-6130,2011-04-05 01:06:40+02:00,General,2011-03-31 09:55:25.855000+02:00,2011-04-05 01:06:40.020000+02:00,,Resource11,2011-02-08 01:06:40.010000+01:00,task-15774,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-10 12:09:44.583000+01:00 +Internet,case-6130,2011-04-05 01:06:40+02:00,General,2011-03-31 09:55:25.855000+02:00,2011-04-05 01:06:40.020000+02:00,,Resource11,2011-02-08 01:06:40.010000+01:00,task-15770,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-10 12:09:57.564000+01:00 +Internet,case-6130,2011-04-05 01:06:40+02:00,General,2011-03-31 09:55:25.855000+02:00,2011-04-05 01:06:40.020000+02:00,,Resource11,2011-02-08 01:06:40.010000+01:00,task-15775,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-10 12:10:14.946000+01:00 +Internet,case-6140,2011-04-18 01:06:40+02:00,General,2011-04-18 09:35:17.988000+02:00,2011-04-18 01:06:40.020000+02:00,,Resource17,2011-02-21 01:06:40.010000+01:00,task-13724,Confirmation of receipt,complete,EMPTY,Resource17,2011-02-24 12:35:09.094000+01:00 +Internet,case-6140,2011-04-18 01:06:40+02:00,General,2011-04-18 09:35:17.988000+02:00,2011-04-18 01:06:40.020000+02:00,,Resource17,2011-02-21 01:06:40.010000+01:00,task-14019,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-02-24 12:35:49.090000+01:00 +Internet,case-6140,2011-04-18 01:06:40+02:00,General,2011-04-18 09:35:17.988000+02:00,2011-04-18 01:06:40.020000+02:00,,Resource17,2011-02-21 01:06:40.010000+01:00,task-14020,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-02-24 12:39:14.121000+01:00 +Internet,case-6140,2011-04-18 01:06:40+02:00,General,2011-04-18 09:35:17.988000+02:00,2011-04-18 01:06:40.020000+02:00,,Resource17,2011-02-21 01:06:40.010000+01:00,task-14022,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-02-24 12:39:34.497000+01:00 +Internet,case-6140,2011-04-18 01:06:40+02:00,General,2011-04-18 09:35:17.988000+02:00,2011-04-18 01:06:40.020000+02:00,,Resource17,2011-02-21 01:06:40.010000+01:00,task-14021,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-28 12:07:06.216000+01:00 +Internet,case-6140,2011-04-18 01:06:40+02:00,General,2011-04-18 09:35:17.988000+02:00,2011-04-18 01:06:40.020000+02:00,,Resource17,2011-02-21 01:06:40.010000+01:00,task-14450,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 09:56:49.573000+01:00 +Internet,case-6141,2011-03-25 00:00:00+01:00,General,2011-04-12 08:14:31.155000+02:00,2011-03-25 00:00:00.010000+01:00,,Resource01,2011-01-28 00:00:00.010000+01:00,task-13725,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-02 08:25:12.415000+01:00 +Internet,case-6141,2011-03-25 00:00:00+01:00,General,2011-04-12 08:14:31.155000+02:00,2011-03-25 00:00:00.010000+01:00,,Resource01,2011-01-28 00:00:00.010000+01:00,task-14822,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-02 08:25:30.190000+01:00 +Internet,case-6141,2011-03-25 00:00:00+01:00,General,2011-04-12 08:14:31.155000+02:00,2011-03-25 00:00:00.010000+01:00,,Resource01,2011-01-28 00:00:00.010000+01:00,task-14823,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-02 08:26:07.265000+01:00 +Internet,case-6141,2011-03-25 00:00:00+01:00,General,2011-04-12 08:14:31.155000+02:00,2011-03-25 00:00:00.010000+01:00,,Resource01,2011-01-28 00:00:00.010000+01:00,task-14821,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-02 08:26:50.794000+01:00 +Internet,case-6141,2011-03-25 00:00:00+01:00,General,2011-04-12 08:14:31.155000+02:00,2011-03-25 00:00:00.010000+01:00,,Resource01,2011-01-28 00:00:00.010000+01:00,task-14827,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-02 08:27:09.024000+01:00 +Internet,case-6141,2011-03-25 00:00:00+01:00,General,2011-04-12 08:14:31.155000+02:00,2011-03-25 00:00:00.010000+01:00,,Resource01,2011-01-28 00:00:00.010000+01:00,task-14829,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-02 08:27:25.565000+01:00 +Internet,case-6145,2011-05-03 01:06:40+02:00,General,2011-04-26 11:53:49.140000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource15,2011-02-22 01:06:40.010000+01:00,task-13784,Confirmation of receipt,complete,EMPTY,Resource15,2011-02-23 12:45:30.822000+01:00 +Internet,case-6145,2011-05-03 01:06:40+02:00,General,2011-04-26 11:53:49.140000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource15,2011-02-22 01:06:40.010000+01:00,task-13859,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-23 12:51:58.381000+01:00 +Internet,case-6145,2011-05-03 01:06:40+02:00,General,2011-04-26 11:53:49.140000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource15,2011-02-22 01:06:40.010000+01:00,task-13860,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-28 10:47:24.851000+01:00 +Internet,case-6145,2011-05-03 01:06:40+02:00,General,2011-04-26 11:53:49.140000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource15,2011-02-22 01:06:40.010000+01:00,task-13858,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-02-28 11:53:00.608000+01:00 +Internet,case-6145,2011-05-03 01:06:40+02:00,General,2011-04-26 11:53:49.140000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource15,2011-02-22 01:06:40.010000+01:00,task-14426,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-28 11:53:15.005000+01:00 +Internet,case-6145,2011-05-03 01:06:40+02:00,General,2011-04-26 11:53:49.140000+02:00,2011-05-03 01:06:40.020000+02:00,,Resource15,2011-02-22 01:06:40.010000+01:00,task-14427,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 10:13:07.907000+01:00 +Internet,case-6146,2011-04-19 01:06:40+02:00,General,2011-03-30 13:37:17.561000+02:00,2011-04-19 01:06:40.020000+02:00,,Resource22,2011-02-22 01:06:40.010000+01:00,task-13810,Confirmation of receipt,complete,EMPTY,Resource22,2011-03-01 15:14:59.796000+01:00 +Internet,case-6146,2011-04-19 01:06:40+02:00,General,2011-03-30 13:37:17.561000+02:00,2011-04-19 01:06:40.020000+02:00,,Resource22,2011-02-22 01:06:40.010000+01:00,task-14743,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-03-01 15:15:30.500000+01:00 +Internet,case-6146,2011-04-19 01:06:40+02:00,General,2011-03-30 13:37:17.561000+02:00,2011-04-19 01:06:40.020000+02:00,,Resource22,2011-02-22 01:06:40.010000+01:00,task-14744,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-03-01 15:16:25.593000+01:00 +Internet,case-6146,2011-04-19 01:06:40+02:00,General,2011-03-30 13:37:17.561000+02:00,2011-04-19 01:06:40.020000+02:00,,Resource22,2011-02-22 01:06:40.010000+01:00,task-14746,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-03-01 15:17:22.287000+01:00 +Internet,case-6146,2011-04-19 01:06:40+02:00,General,2011-03-30 13:37:17.561000+02:00,2011-04-19 01:06:40.020000+02:00,,Resource22,2011-02-22 01:06:40.010000+01:00,task-14745,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-02 08:58:58.804000+01:00 +Internet,case-6146,2011-04-19 01:06:40+02:00,General,2011-03-30 13:37:17.561000+02:00,2011-04-19 01:06:40.020000+02:00,,Resource22,2011-02-22 01:06:40.010000+01:00,task-14857,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-02 14:27:46.341000+01:00 +Internet,case-6147,2011-04-19 01:06:40+02:00,General,2011-09-16 00:00:00.020000+02:00,2011-04-19 01:06:40.020000+02:00,,Resource14,2011-02-22 01:06:40.010000+01:00,task-13845,Confirmation of receipt,complete,EMPTY,admin2,2011-09-19 10:26:06.536000+02:00 +Internet,case-6148,2011-04-20 00:00:00+02:00,General,2011-03-23 14:39:43.350000+01:00,2011-04-20 00:00:00.020000+02:00,,Resource02,2011-02-23 00:00:00.010000+01:00,task-13851,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-28 09:22:36.039000+01:00 +Internet,case-6148,2011-04-20 00:00:00+02:00,General,2011-03-23 14:39:43.350000+01:00,2011-04-20 00:00:00.020000+02:00,,Resource02,2011-02-23 00:00:00.010000+01:00,task-14348,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-28 09:23:12.522000+01:00 +Internet,case-6148,2011-04-20 00:00:00+02:00,General,2011-03-23 14:39:43.350000+01:00,2011-04-20 00:00:00.020000+02:00,,Resource02,2011-02-23 00:00:00.010000+01:00,task-14347,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-28 09:23:30.739000+01:00 +Internet,case-6148,2011-04-20 00:00:00+02:00,General,2011-03-23 14:39:43.350000+01:00,2011-04-20 00:00:00.020000+02:00,,Resource02,2011-02-23 00:00:00.010000+01:00,task-14349,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-28 09:40:08.697000+01:00 +Internet,case-6148,2011-04-20 00:00:00+02:00,General,2011-03-23 14:39:43.350000+01:00,2011-04-20 00:00:00.020000+02:00,,Resource02,2011-02-23 00:00:00.010000+01:00,task-14350,T04 Determine confirmation of receipt,complete,EMPTY,Resource09,2011-02-28 10:43:09.537000+01:00 +Internet,case-6148,2011-04-20 00:00:00+02:00,General,2011-03-23 14:39:43.350000+01:00,2011-04-20 00:00:00.020000+02:00,,Resource02,2011-02-23 00:00:00.010000+01:00,task-14388,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-02-28 14:43:50.132000+01:00 +Internet,case-6149,2011-04-20 00:00:00+02:00,General,2011-03-28 00:00:00.020000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-13857,Confirmation of receipt,complete,EMPTY,Resource07,2011-03-01 13:22:53.680000+01:00 +Internet,case-6149,2011-04-20 00:00:00+02:00,General,2011-03-28 00:00:00.020000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-14722,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-03-01 13:23:18.048000+01:00 +Internet,case-6149,2011-04-20 00:00:00+02:00,General,2011-03-28 00:00:00.020000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-14724,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-03-01 13:23:36.467000+01:00 +Internet,case-6149,2011-04-20 00:00:00+02:00,General,2011-03-28 00:00:00.020000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-14725,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-03-01 13:23:46.681000+01:00 +Internet,case-6149,2011-04-20 00:00:00+02:00,General,2011-03-28 00:00:00.020000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-14723,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-03-01 13:24:00.608000+01:00 +Internet,case-6149,2011-04-20 00:00:00+02:00,General,2011-03-28 00:00:00.020000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-14726,T10 Determine necessity to stop indication,complete,Group 1,admin2,2011-03-29 15:16:30.329000+02:00 +Internet,case-6152,2011-04-18 00:00:00+02:00,General,2011-03-09 11:14:12.705000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-21 00:00:00.010000+01:00,task-13875,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-28 11:55:34.582000+01:00 +Internet,case-6152,2011-04-18 00:00:00+02:00,General,2011-03-09 11:14:12.705000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-21 00:00:00.010000+01:00,task-14431,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-28 11:55:56.790000+01:00 +Internet,case-6152,2011-04-18 00:00:00+02:00,General,2011-03-09 11:14:12.705000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-21 00:00:00.010000+01:00,task-14432,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-28 11:56:45.082000+01:00 +Internet,case-6152,2011-04-18 00:00:00+02:00,General,2011-03-09 11:14:12.705000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-21 00:00:00.010000+01:00,task-14434,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-28 11:57:05.776000+01:00 +Internet,case-6152,2011-04-18 00:00:00+02:00,General,2011-03-09 11:14:12.705000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-21 00:00:00.010000+01:00,task-14433,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-02-28 12:53:10.243000+01:00 +Internet,case-6152,2011-04-18 00:00:00+02:00,General,2011-03-09 11:14:12.705000+01:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-21 00:00:00.010000+01:00,task-14483,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-02-28 17:09:53.696000+01:00 +Internet,case-6153,2011-04-11 00:00:00+02:00,General,2011-04-29 09:04:28.140000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource05,2011-02-14 00:00:00.010000+01:00,task-13882,Confirmation of receipt,complete,EMPTY,Resource05,2011-03-14 12:12:11.558000+01:00 +Internet,case-6153,2011-04-11 00:00:00+02:00,General,2011-04-29 09:04:28.140000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource05,2011-02-14 00:00:00.010000+01:00,task-16063,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-03-14 12:12:30.042000+01:00 +Internet,case-6153,2011-04-11 00:00:00+02:00,General,2011-04-29 09:04:28.140000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource05,2011-02-14 00:00:00.010000+01:00,task-16065,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-03-14 12:13:59.873000+01:00 +Internet,case-6153,2011-04-11 00:00:00+02:00,General,2011-04-29 09:04:28.140000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource05,2011-02-14 00:00:00.010000+01:00,task-16066,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-03-14 12:14:16.037000+01:00 +Internet,case-6153,2011-04-11 00:00:00+02:00,General,2011-04-29 09:04:28.140000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource05,2011-02-14 00:00:00.010000+01:00,task-16064,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-03-16 07:36:30.927000+01:00 +Internet,case-6153,2011-04-11 00:00:00+02:00,General,2011-04-29 09:04:28.140000+02:00,2011-04-11 00:00:00.020000+02:00,,Resource05,2011-02-14 00:00:00.010000+01:00,task-16283,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-03-16 07:37:04.696000+01:00 +Desk,case-6156,2011-04-13 00:00:00+02:00,General,2011-04-08 14:25:31.842000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource17,2011-02-16 00:00:00.010000+01:00,task-13894,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-10 14:30:26.555000+01:00 +Desk,case-6156,2011-04-13 00:00:00+02:00,General,2011-04-08 14:25:31.842000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource17,2011-02-16 00:00:00.010000+01:00,task-15830,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-10 14:31:27.232000+01:00 +Desk,case-6156,2011-04-13 00:00:00+02:00,General,2011-04-08 14:25:31.842000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource17,2011-02-16 00:00:00.010000+01:00,task-15832,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-03-10 14:31:41.363000+01:00 +Desk,case-6156,2011-04-13 00:00:00+02:00,General,2011-04-08 14:25:31.842000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource17,2011-02-16 00:00:00.010000+01:00,task-15831,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-10 14:31:51.986000+01:00 +Desk,case-6156,2011-04-13 00:00:00+02:00,General,2011-04-08 14:25:31.842000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource17,2011-02-16 00:00:00.010000+01:00,task-15834,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-10 14:32:25.152000+01:00 +Desk,case-6156,2011-04-13 00:00:00+02:00,General,2011-04-08 14:25:31.842000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource17,2011-02-16 00:00:00.010000+01:00,task-15833,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-11 10:58:36.100000+01:00 +Internet,case-6166,2011-04-20 00:00:00+02:00,General,2011-04-11 07:36:38.039000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-14054,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-10 13:29:02.485000+01:00 +Internet,case-6166,2011-04-20 00:00:00+02:00,General,2011-04-11 07:36:38.039000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-15804,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-10 13:29:17.151000+01:00 +Internet,case-6166,2011-04-20 00:00:00+02:00,General,2011-04-11 07:36:38.039000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-15806,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-10 13:29:38.656000+01:00 +Internet,case-6166,2011-04-20 00:00:00+02:00,General,2011-04-11 07:36:38.039000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-15807,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-10 13:29:49.252000+01:00 +Internet,case-6166,2011-04-20 00:00:00+02:00,General,2011-04-11 07:36:38.039000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-15805,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-10 13:30:01.953000+01:00 +Internet,case-6166,2011-04-20 00:00:00+02:00,General,2011-04-11 07:36:38.039000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource11,2011-02-23 00:00:00.010000+01:00,task-15808,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-10 13:30:16.611000+01:00 +Internet,case-6167,2011-04-20 00:00:00+02:00,General,2011-04-12 10:45:01.060000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource07,2011-02-23 00:00:00.010000+01:00,task-14061,Confirmation of receipt,complete,EMPTY,Resource07,2011-03-24 08:53:45.448000+01:00 +Internet,case-6167,2011-04-20 00:00:00+02:00,General,2011-04-12 10:45:01.060000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource07,2011-02-23 00:00:00.010000+01:00,task-17480,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:32:00.063000+02:00 +Internet,case-6167,2011-04-20 00:00:00+02:00,General,2011-04-12 10:45:01.060000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource07,2011-02-23 00:00:00.010000+01:00,task-18554,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-31 08:34:33.972000+02:00 +Internet,case-6167,2011-04-20 00:00:00+02:00,General,2011-04-12 10:45:01.060000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource07,2011-02-23 00:00:00.010000+01:00,task-18556,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:20:29.103000+02:00 +Internet,case-6167,2011-04-20 00:00:00+02:00,General,2011-04-12 10:45:01.060000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource07,2011-02-23 00:00:00.010000+01:00,task-17481,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 15:07:02.535000+02:00 +Internet,case-6167,2011-04-20 00:00:00+02:00,General,2011-04-12 10:45:01.060000+02:00,2011-04-20 00:00:00.020000+02:00,,Resource07,2011-02-23 00:00:00.010000+01:00,task-19153,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 15:07:45.213000+02:00 +Internet,case-6168,2011-04-21 00:00:00+02:00,General,2011-04-06 12:09:43.071000+02:00,2011-04-21 00:00:00.020000+02:00,,Resource11,2011-02-24 00:00:00.010000+01:00,task-14064,Confirmation of receipt,complete,EMPTY,Resource07,2011-03-01 16:49:39.248000+01:00 +Internet,case-6168,2011-04-21 00:00:00+02:00,General,2011-04-06 12:09:43.071000+02:00,2011-04-21 00:00:00.020000+02:00,,Resource11,2011-02-24 00:00:00.010000+01:00,task-14791,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-03-01 16:49:53.640000+01:00 +Internet,case-6168,2011-04-21 00:00:00+02:00,General,2011-04-06 12:09:43.071000+02:00,2011-04-21 00:00:00.020000+02:00,,Resource11,2011-02-24 00:00:00.010000+01:00,task-14793,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-03-01 16:50:22.029000+01:00 +Internet,case-6168,2011-04-21 00:00:00+02:00,General,2011-04-06 12:09:43.071000+02:00,2011-04-21 00:00:00.020000+02:00,,Resource11,2011-02-24 00:00:00.010000+01:00,task-14794,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-03-01 16:50:35.882000+01:00 +Internet,case-6168,2011-04-21 00:00:00+02:00,General,2011-04-06 12:09:43.071000+02:00,2011-04-21 00:00:00.020000+02:00,,Resource11,2011-02-24 00:00:00.010000+01:00,task-14792,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-03-01 16:50:49.752000+01:00 +Internet,case-6168,2011-04-21 00:00:00+02:00,General,2011-04-06 12:09:43.071000+02:00,2011-04-21 00:00:00.020000+02:00,,Resource11,2011-02-24 00:00:00.010000+01:00,task-14795,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-03-01 16:57:28.647000+01:00 +Internet,case-6169,2011-05-14 01:06:40+02:00,General,2011-05-09 16:30:11.401000+02:00,2011-05-14 01:06:40.020000+02:00,,Resource15,2011-02-24 01:06:40.010000+01:00,task-14094,Confirmation of receipt,complete,EMPTY,Resource15,2011-02-25 14:29:00.446000+01:00 +Internet,case-6169,2011-05-14 01:06:40+02:00,General,2011-05-09 16:30:11.401000+02:00,2011-05-14 01:06:40.020000+02:00,,Resource15,2011-02-24 01:06:40.010000+01:00,task-14256,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-02-28 11:56:49.898000+01:00 +Internet,case-6169,2011-05-14 01:06:40+02:00,General,2011-05-09 16:30:11.401000+02:00,2011-05-14 01:06:40.020000+02:00,,Resource15,2011-02-24 01:06:40.010000+01:00,task-14435,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-02-28 11:57:18.990000+01:00 +Internet,case-6169,2011-05-14 01:06:40+02:00,General,2011-05-09 16:30:11.401000+02:00,2011-05-14 01:06:40.020000+02:00,,Resource15,2011-02-24 01:06:40.010000+01:00,task-14255,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-03-04 13:41:42.757000+01:00 +Internet,case-6169,2011-05-14 01:06:40+02:00,General,2011-05-09 16:30:11.401000+02:00,2011-05-14 01:06:40.020000+02:00,,Resource15,2011-02-24 01:06:40.010000+01:00,task-15235,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-07 16:22:27.319000+01:00 +Internet,case-6169,2011-05-14 01:06:40+02:00,General,2011-05-09 16:30:11.401000+02:00,2011-05-14 01:06:40.020000+02:00,,Resource15,2011-02-24 01:06:40.010000+01:00,task-15395,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-08 10:22:35.626000+01:00 +Internet,case-6171,2011-04-18 00:00:00+02:00,General,2011-04-12 00:00:00.020000+02:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-22 00:00:00.010000+01:00,task-14127,Confirmation of receipt,complete,EMPTY,Resource02,2011-02-28 14:13:12.709000+01:00 +Internet,case-6171,2011-04-18 00:00:00+02:00,General,2011-04-12 00:00:00.020000+02:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-22 00:00:00.010000+01:00,task-14523,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-02-28 14:13:31.252000+01:00 +Internet,case-6171,2011-04-18 00:00:00+02:00,General,2011-04-12 00:00:00.020000+02:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-22 00:00:00.010000+01:00,task-14524,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-02-28 14:14:00.358000+01:00 +Internet,case-6171,2011-04-18 00:00:00+02:00,General,2011-04-12 00:00:00.020000+02:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-22 00:00:00.010000+01:00,task-14527,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-02-28 14:55:53.687000+01:00 +Internet,case-6171,2011-04-18 00:00:00+02:00,General,2011-04-12 00:00:00.020000+02:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-22 00:00:00.010000+01:00,task-14525,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-02-28 16:33:42.976000+01:00 +Internet,case-6171,2011-04-18 00:00:00+02:00,General,2011-04-12 00:00:00.020000+02:00,2011-04-18 00:00:00.020000+02:00,,Resource02,2011-02-22 00:00:00.010000+01:00,task-14589,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-01 10:19:44.015000+01:00 +Internet,case-6177,2011-04-08 00:00:00+02:00,General,2011-04-06 13:57:14.410000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource08,2010-12-06 00:00:00.010000+01:00,task-14196,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-18 08:43:48.512000+01:00 +Internet,case-6177,2011-04-08 00:00:00+02:00,General,2011-04-06 13:57:14.410000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource08,2010-12-06 00:00:00.010000+01:00,task-16685,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-18 08:46:35.318000+01:00 +Internet,case-6177,2011-04-08 00:00:00+02:00,General,2011-04-06 13:57:14.410000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource08,2010-12-06 00:00:00.010000+01:00,task-16687,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-03-18 08:47:03.966000+01:00 +Internet,case-6177,2011-04-08 00:00:00+02:00,General,2011-04-06 13:57:14.410000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource08,2010-12-06 00:00:00.010000+01:00,task-16688,T05 Print and send confirmation of receipt,complete,Group 2,Resource08,2011-03-18 08:49:00.786000+01:00 +Internet,case-6177,2011-04-08 00:00:00+02:00,General,2011-04-06 13:57:14.410000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource08,2010-12-06 00:00:00.010000+01:00,task-16686,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-18 08:49:12.821000+01:00 +Internet,case-6177,2011-04-08 00:00:00+02:00,General,2011-04-06 13:57:14.410000+02:00,2011-04-08 00:00:00.020000+02:00,,Resource08,2010-12-06 00:00:00.010000+01:00,task-16689,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-18 08:49:32.686000+01:00 +Internet,case-6209,2011-04-22 01:06:40+02:00,General,2011-04-12 11:40:18.410000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-14374,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:00:22.304000+01:00 +Internet,case-6209,2011-04-22 01:06:40+02:00,General,2011-04-12 11:40:18.410000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-17486,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:00:46.423000+01:00 +Internet,case-6209,2011-04-22 01:06:40+02:00,General,2011-04-12 11:40:18.410000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-17488,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:01:02.490000+01:00 +Internet,case-6209,2011-04-22 01:06:40+02:00,General,2011-04-12 11:40:18.410000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-17489,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:01:18.133000+01:00 +Internet,case-6209,2011-04-22 01:06:40+02:00,General,2011-04-12 11:40:18.410000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-17487,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-24 14:38:07.063000+01:00 +Internet,case-6209,2011-04-22 01:06:40+02:00,General,2011-04-12 11:40:18.410000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-17662,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-24 14:38:52.058000+01:00 +Internet,case-6212,2011-04-22 00:00:00+02:00,General,2011-04-12 11:12:37.664000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-14399,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:05:45.728000+01:00 +Internet,case-6212,2011-04-22 00:00:00+02:00,General,2011-04-12 11:12:37.664000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-17492,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:05:59.222000+01:00 +Internet,case-6212,2011-04-22 00:00:00+02:00,General,2011-04-12 11:12:37.664000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-17494,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:06:15.166000+01:00 +Internet,case-6212,2011-04-22 00:00:00+02:00,General,2011-04-12 11:12:37.664000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-17495,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:06:25.612000+01:00 +Internet,case-6212,2011-04-22 00:00:00+02:00,General,2011-04-12 11:12:37.664000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-17493,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-24 15:11:22.488000+01:00 +Internet,case-6212,2011-04-22 00:00:00+02:00,General,2011-04-12 11:12:37.664000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-17701,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-24 15:11:36.223000+01:00 +Internet,case-6215,2011-04-22 00:00:00+02:00,General,2011-03-30 12:25:31.869000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource02,2011-02-25 00:00:00.010000+01:00,task-14489,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-03 11:11:27.996000+01:00 +Internet,case-6215,2011-04-22 00:00:00+02:00,General,2011-03-30 12:25:31.869000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource02,2011-02-25 00:00:00.010000+01:00,task-15043,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-03 11:12:41.283000+01:00 +Internet,case-6215,2011-04-22 00:00:00+02:00,General,2011-03-30 12:25:31.869000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource02,2011-02-25 00:00:00.010000+01:00,task-15044,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-03 11:37:25.886000+01:00 +Internet,case-6215,2011-04-22 00:00:00+02:00,General,2011-03-30 12:25:31.869000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource02,2011-02-25 00:00:00.010000+01:00,task-15065,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-03 11:38:16.399000+01:00 +Internet,case-6215,2011-04-22 00:00:00+02:00,General,2011-03-30 12:25:31.869000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource02,2011-02-25 00:00:00.010000+01:00,task-15045,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-03 14:51:02.665000+01:00 +Internet,case-6215,2011-04-22 00:00:00+02:00,General,2011-03-30 12:25:31.869000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource02,2011-02-25 00:00:00.010000+01:00,task-15143,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-03 15:37:11.339000+01:00 +Internet,case-6216,2011-06-10 01:06:40+02:00,General,2011-05-17 15:14:34.635000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-14551,Confirmation of receipt,complete,EMPTY,Resource18,2011-03-07 10:49:17.828000+01:00 +Internet,case-6216,2011-06-10 01:06:40+02:00,General,2011-05-17 15:14:34.635000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-15305,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-03-07 10:49:30.883000+01:00 +Internet,case-6216,2011-06-10 01:06:40+02:00,General,2011-05-17 15:14:34.635000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-15307,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-03-07 10:49:42.826000+01:00 +Internet,case-6216,2011-06-10 01:06:40+02:00,General,2011-05-17 15:14:34.635000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-15308,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-03-07 10:49:53.771000+01:00 +Internet,case-6216,2011-06-10 01:06:40+02:00,General,2011-05-17 15:14:34.635000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-15306,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-03-07 10:50:04.880000+01:00 +Internet,case-6216,2011-06-10 01:06:40+02:00,General,2011-05-17 15:14:34.635000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource18,2011-02-10 01:06:40.010000+01:00,task-15309,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-03-07 10:50:20.585000+01:00 +Internet,case-6217,2011-04-22 00:00:00+02:00,General,2011-04-07 15:22:44.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource18,2011-02-25 00:00:00.010000+01:00,task-14554,Confirmation of receipt,complete,EMPTY,Resource18,2011-03-02 11:42:20.454000+01:00 +Internet,case-6217,2011-04-22 00:00:00+02:00,General,2011-04-07 15:22:44.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource18,2011-02-25 00:00:00.010000+01:00,task-14952,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-03-02 11:42:33.735000+01:00 +Internet,case-6217,2011-04-22 00:00:00+02:00,General,2011-04-07 15:22:44.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource18,2011-02-25 00:00:00.010000+01:00,task-14954,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-03-02 11:42:44.924000+01:00 +Internet,case-6217,2011-04-22 00:00:00+02:00,General,2011-04-07 15:22:44.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource18,2011-02-25 00:00:00.010000+01:00,task-14953,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-03-02 11:43:12.337000+01:00 +Internet,case-6217,2011-04-22 00:00:00+02:00,General,2011-04-07 15:22:44.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource18,2011-02-25 00:00:00.010000+01:00,task-14956,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-03-02 11:43:29.430000+01:00 +Internet,case-6217,2011-04-22 00:00:00+02:00,General,2011-04-07 15:22:44.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource18,2011-02-25 00:00:00.010000+01:00,task-14955,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-02 14:34:26.793000+01:00 +Internet,case-6223,2011-04-22 00:00:00+02:00,General,2011-05-12 08:16:32.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-14613,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 14:03:10.408000+01:00 +Internet,case-6223,2011-04-22 00:00:00+02:00,General,2011-05-12 08:16:32.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-16449,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 14:03:23.387000+01:00 +Internet,case-6223,2011-04-22 00:00:00+02:00,General,2011-05-12 08:16:32.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-16451,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 14:03:34.914000+01:00 +Internet,case-6223,2011-04-22 00:00:00+02:00,General,2011-05-12 08:16:32.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-16452,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 14:03:46.748000+01:00 +Internet,case-6223,2011-04-22 00:00:00+02:00,General,2011-05-12 08:16:32.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-16450,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-24 15:25:33.420000+01:00 +Internet,case-6223,2011-04-22 00:00:00+02:00,General,2011-05-12 08:16:32.849000+02:00,2011-04-22 00:00:00.020000+02:00,,Resource11,2011-02-25 00:00:00.010000+01:00,task-17724,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-24 15:25:52.932000+01:00 +Internet,case-6225,2011-04-22 01:06:40+02:00,General,2011-03-23 14:46:49.016000+01:00,2011-04-22 01:06:40.020000+02:00,,Resource02,2011-02-25 01:06:40.010000+01:00,task-14615,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-04 09:26:31.928000+01:00 +Internet,case-6225,2011-04-22 01:06:40+02:00,General,2011-03-23 14:46:49.016000+01:00,2011-04-22 01:06:40.020000+02:00,,Resource02,2011-02-25 01:06:40.010000+01:00,task-15170,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-04 09:26:57.519000+01:00 +Internet,case-6225,2011-04-22 01:06:40+02:00,General,2011-03-23 14:46:49.016000+01:00,2011-04-22 01:06:40.020000+02:00,,Resource02,2011-02-25 01:06:40.010000+01:00,task-15171,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-04 10:09:04.342000+01:00 +Internet,case-6225,2011-04-22 01:06:40+02:00,General,2011-03-23 14:46:49.016000+01:00,2011-04-22 01:06:40.020000+02:00,,Resource02,2011-02-25 01:06:40.010000+01:00,task-15175,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-04 10:23:59.137000+01:00 +Internet,case-6225,2011-04-22 01:06:40+02:00,General,2011-03-23 14:46:49.016000+01:00,2011-04-22 01:06:40.020000+02:00,,Resource02,2011-02-25 01:06:40.010000+01:00,task-15172,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-04 10:39:14.353000+01:00 +Internet,case-6225,2011-04-22 01:06:40+02:00,General,2011-03-23 14:46:49.016000+01:00,2011-04-22 01:06:40.020000+02:00,,Resource02,2011-02-25 01:06:40.010000+01:00,task-15189,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-04 10:47:18.269000+01:00 +Internet,case-6226,2011-04-23 00:00:00+02:00,General,2011-03-21 10:21:24.593000+01:00,2011-04-23 00:00:00.020000+02:00,,Resource15,2011-02-26 00:00:00.010000+01:00,task-14616,Confirmation of receipt,complete,EMPTY,Resource15,2011-03-02 13:55:59.454000+01:00 +Internet,case-6226,2011-04-23 00:00:00+02:00,General,2011-03-21 10:21:24.593000+01:00,2011-04-23 00:00:00.020000+02:00,,Resource15,2011-02-26 00:00:00.010000+01:00,task-14970,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-03-02 14:00:21.667000+01:00 +Internet,case-6226,2011-04-23 00:00:00+02:00,General,2011-03-21 10:21:24.593000+01:00,2011-04-23 00:00:00.020000+02:00,,Resource15,2011-02-26 00:00:00.010000+01:00,task-14971,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-03-02 14:01:35.333000+01:00 +Internet,case-6226,2011-04-23 00:00:00+02:00,General,2011-03-21 10:21:24.593000+01:00,2011-04-23 00:00:00.020000+02:00,,Resource15,2011-02-26 00:00:00.010000+01:00,task-14969,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-03-04 13:41:19.887000+01:00 +Internet,case-6226,2011-04-23 00:00:00+02:00,General,2011-03-21 10:21:24.593000+01:00,2011-04-23 00:00:00.020000+02:00,,Resource15,2011-02-26 00:00:00.010000+01:00,task-15234,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-07 14:31:56.274000+01:00 +Internet,case-6226,2011-04-23 00:00:00+02:00,General,2011-03-21 10:21:24.593000+01:00,2011-04-23 00:00:00.020000+02:00,,Resource15,2011-02-26 00:00:00.010000+01:00,task-15356,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-08 10:18:51.751000+01:00 +Internet,case-6234,2011-05-07 01:06:40+02:00,General,2011-05-02 12:54:01.947000+02:00,2011-05-07 01:06:40.020000+02:00,,Resource11,2011-02-27 01:06:40.010000+01:00,task-14689,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 14:15:53.935000+01:00 +Internet,case-6234,2011-05-07 01:06:40+02:00,General,2011-05-02 12:54:01.947000+02:00,2011-05-07 01:06:40.020000+02:00,,Resource11,2011-02-27 01:06:40.010000+01:00,task-16457,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 14:16:13.777000+01:00 +Internet,case-6234,2011-05-07 01:06:40+02:00,General,2011-05-02 12:54:01.947000+02:00,2011-05-07 01:06:40.020000+02:00,,Resource11,2011-02-27 01:06:40.010000+01:00,task-16459,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 14:16:24.507000+01:00 +Internet,case-6234,2011-05-07 01:06:40+02:00,General,2011-05-02 12:54:01.947000+02:00,2011-05-07 01:06:40.020000+02:00,,Resource11,2011-02-27 01:06:40.010000+01:00,task-16460,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 14:16:38.990000+01:00 +Internet,case-6234,2011-05-07 01:06:40+02:00,General,2011-05-02 12:54:01.947000+02:00,2011-05-07 01:06:40.020000+02:00,,Resource11,2011-02-27 01:06:40.010000+01:00,task-16458,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-24 15:40:00.365000+01:00 +Internet,case-6234,2011-05-07 01:06:40+02:00,General,2011-05-02 12:54:01.947000+02:00,2011-05-07 01:06:40.020000+02:00,,Resource11,2011-02-27 01:06:40.010000+01:00,task-17739,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-24 15:50:41.199000+01:00 +Internet,case-6235,2011-04-21 01:06:40+02:00,General,2011-04-06 12:16:19.764000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource11,2011-02-24 01:06:40.010000+01:00,task-14698,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 13:56:44.109000+01:00 +Internet,case-6235,2011-04-21 01:06:40+02:00,General,2011-04-06 12:16:19.764000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource11,2011-02-24 01:06:40.010000+01:00,task-16443,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 13:56:59.438000+01:00 +Internet,case-6235,2011-04-21 01:06:40+02:00,General,2011-04-06 12:16:19.764000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource11,2011-02-24 01:06:40.010000+01:00,task-16446,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 13:57:14.633000+01:00 +Internet,case-6235,2011-04-21 01:06:40+02:00,General,2011-04-06 12:16:19.764000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource11,2011-02-24 01:06:40.010000+01:00,task-16447,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 13:57:29.338000+01:00 +Internet,case-6235,2011-04-21 01:06:40+02:00,General,2011-04-06 12:16:19.764000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource11,2011-02-24 01:06:40.010000+01:00,task-16445,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-24 14:28:05.341000+01:00 +Internet,case-6235,2011-04-21 01:06:40+02:00,General,2011-04-06 12:16:19.764000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource11,2011-02-24 01:06:40.010000+01:00,task-17641,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-24 14:28:33.868000+01:00 +Internet,case-6241,2011-04-20 01:06:40+02:00,General,2011-04-06 15:36:52.448000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-14789,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-03 10:58:15.051000+01:00 +Internet,case-6241,2011-04-20 01:06:40+02:00,General,2011-04-06 15:36:52.448000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-15036,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-03 10:58:34.565000+01:00 +Internet,case-6241,2011-04-20 01:06:40+02:00,General,2011-04-06 15:36:52.448000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-15038,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-03 10:58:48.540000+01:00 +Internet,case-6241,2011-04-20 01:06:40+02:00,General,2011-04-06 15:36:52.448000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-15039,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-03 10:59:00.964000+01:00 +Internet,case-6241,2011-04-20 01:06:40+02:00,General,2011-04-06 15:36:52.448000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-15037,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-03 13:30:55.551000+01:00 +Internet,case-6241,2011-04-20 01:06:40+02:00,General,2011-04-06 15:36:52.448000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-15117,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-03 13:53:00.532000+01:00 +Internet,case-6246,2011-06-07 01:06:40+02:00,General,2011-05-30 12:08:55.438000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-14814,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 09:25:54.441000+01:00 +Internet,case-6246,2011-06-07 01:06:40+02:00,General,2011-05-30 12:08:55.438000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-16514,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 09:26:54.360000+01:00 +Internet,case-6246,2011-06-07 01:06:40+02:00,General,2011-05-30 12:08:55.438000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-16515,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-17 09:36:55.354000+01:00 +Internet,case-6246,2011-06-07 01:06:40+02:00,General,2011-05-30 12:08:55.438000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-16517,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-17 09:41:25.875000+01:00 +Internet,case-6246,2011-06-07 01:06:40+02:00,General,2011-05-30 12:08:55.438000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-16516,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-17 09:54:25.550000+01:00 +Internet,case-6246,2011-06-07 01:06:40+02:00,General,2011-05-30 12:08:55.438000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-16524,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:33:15.523000+01:00 +Internet,case-6251,2011-04-20 01:06:40+02:00,General,2011-05-12 07:13:17.541000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-14819,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 13:36:08.610000+01:00 +Internet,case-6251,2011-04-20 01:06:40+02:00,General,2011-05-12 07:13:17.541000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-16433,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 13:36:22.182000+01:00 +Internet,case-6251,2011-04-20 01:06:40+02:00,General,2011-05-12 07:13:17.541000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-16435,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 13:36:35.137000+01:00 +Internet,case-6251,2011-04-20 01:06:40+02:00,General,2011-05-12 07:13:17.541000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-16436,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 13:36:45.288000+01:00 +Internet,case-6251,2011-04-20 01:06:40+02:00,General,2011-05-12 07:13:17.541000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-16434,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 12:43:21.644000+02:00 +Internet,case-6251,2011-04-20 01:06:40+02:00,General,2011-05-12 07:13:17.541000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource11,2011-02-23 01:06:40.010000+01:00,task-19036,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 12:44:35.544000+02:00 +Internet,case-6258,2011-04-27 01:06:40+02:00,General,2011-04-13 08:29:20.365000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource34,2011-03-02 01:06:40.010000+01:00,task-14962,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:10:31.842000+01:00 +Internet,case-6258,2011-04-27 01:06:40+02:00,General,2011-04-13 08:29:20.365000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource34,2011-03-02 01:06:40.010000+01:00,task-17496,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:10:46.206000+01:00 +Internet,case-6258,2011-04-27 01:06:40+02:00,General,2011-04-13 08:29:20.365000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource34,2011-03-02 01:06:40.010000+01:00,task-17498,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:10:58.510000+01:00 +Internet,case-6258,2011-04-27 01:06:40+02:00,General,2011-04-13 08:29:20.365000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource34,2011-03-02 01:06:40.010000+01:00,task-17499,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:11:13.928000+01:00 +Internet,case-6258,2011-04-27 01:06:40+02:00,General,2011-04-13 08:29:20.365000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource34,2011-03-02 01:06:40.010000+01:00,task-17497,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 13:43:40.177000+02:00 +Internet,case-6258,2011-04-27 01:06:40+02:00,General,2011-04-13 08:29:20.365000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource34,2011-03-02 01:06:40.010000+01:00,task-19058,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 13:44:02.489000+02:00 +Internet,case-6259,2011-04-27 01:06:40+02:00,General,2011-04-12 11:06:44.831000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-14966,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:30:18.063000+01:00 +Internet,case-6259,2011-04-27 01:06:40+02:00,General,2011-04-12 11:06:44.831000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-17506,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:30:34.747000+01:00 +Internet,case-6259,2011-04-27 01:06:40+02:00,General,2011-04-12 11:06:44.831000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-17508,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:30:51.601000+01:00 +Internet,case-6259,2011-04-27 01:06:40+02:00,General,2011-04-12 11:06:44.831000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-17509,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:31:01.829000+01:00 +Internet,case-6259,2011-04-27 01:06:40+02:00,General,2011-04-12 11:06:44.831000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-17507,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 13:54:46.065000+02:00 +Internet,case-6259,2011-04-27 01:06:40+02:00,General,2011-04-12 11:06:44.831000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-19077,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 13:54:59.656000+02:00 +Internet,case-6262,2011-04-27 01:06:40+02:00,General,2011-04-12 11:02:08.639000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-14973,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:39:50.320000+01:00 +Internet,case-6262,2011-04-27 01:06:40+02:00,General,2011-04-12 11:02:08.639000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-17510,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:40:05.412000+01:00 +Internet,case-6262,2011-04-27 01:06:40+02:00,General,2011-04-12 11:02:08.639000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-17512,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:40:18.159000+01:00 +Internet,case-6262,2011-04-27 01:06:40+02:00,General,2011-04-12 11:02:08.639000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-17513,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:40:43.992000+01:00 +Internet,case-6262,2011-04-27 01:06:40+02:00,General,2011-04-12 11:02:08.639000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-17511,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 14:06:27.530000+02:00 +Internet,case-6262,2011-04-27 01:06:40+02:00,General,2011-04-12 11:02:08.639000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource11,2011-03-02 01:06:40.010000+01:00,task-19094,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 14:06:53.046000+02:00 +Internet,case-6279,2011-04-28 00:00:00+02:00,General,2011-08-18 08:44:13.497000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource21,2011-03-03 00:00:00.010000+01:00,task-15104,Confirmation of receipt,complete,Group 1,Resource21,2011-03-03 13:02:09.062000+01:00 +Internet,case-6279,2011-04-28 00:00:00+02:00,General,2011-08-18 08:44:13.497000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource21,2011-03-03 00:00:00.010000+01:00,task-15113,T02 Check confirmation of receipt,complete,EMPTY,Resource21,2011-03-09 12:12:41.369000+01:00 +Internet,case-6279,2011-04-28 00:00:00+02:00,General,2011-08-18 08:44:13.497000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource21,2011-03-03 00:00:00.010000+01:00,task-15630,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-03-09 12:13:20.976000+01:00 +Internet,case-6279,2011-04-28 00:00:00+02:00,General,2011-08-18 08:44:13.497000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource21,2011-03-03 00:00:00.010000+01:00,task-15632,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-10 10:28:48.972000+01:00 +Internet,case-6279,2011-04-28 00:00:00+02:00,General,2011-08-18 08:44:13.497000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource21,2011-03-03 00:00:00.010000+01:00,task-15114,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-08-18 08:44:14.462000+02:00 +Internet,case-6292,2011-04-12 00:00:00+02:00,General,2011-04-13 08:13:28.262000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-15169,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-10 13:08:32.931000+01:00 +Internet,case-6292,2011-04-12 00:00:00+02:00,General,2011-04-13 08:13:28.262000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-15792,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-10 13:09:02.368000+01:00 +Internet,case-6292,2011-04-12 00:00:00+02:00,General,2011-04-13 08:13:28.262000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-15794,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-10 13:09:33.239000+01:00 +Internet,case-6292,2011-04-12 00:00:00+02:00,General,2011-04-13 08:13:28.262000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-15795,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-10 13:09:47.074000+01:00 +Internet,case-6292,2011-04-12 00:00:00+02:00,General,2011-04-13 08:13:28.262000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-15793,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-10 13:09:58.753000+01:00 +Internet,case-6292,2011-04-12 00:00:00+02:00,General,2011-04-13 08:13:28.262000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource11,2011-02-15 00:00:00.010000+01:00,task-15796,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-03-10 13:10:16.539000+01:00 +Desk,case-6297,2011-05-25 01:06:40+02:00,General,2011-10-18 10:30:07.730000+02:00,2011-05-25 01:06:40.020000+02:00,Group 5,Resource02,2011-02-16 01:06:40.010000+01:00,task-15232,Confirmation of receipt,complete,EMPTY,Resource15,2011-03-10 08:56:43.057000+01:00 +Desk,case-6297,2011-05-25 01:06:40+02:00,General,2011-10-18 10:30:07.730000+02:00,2011-05-25 01:06:40.020000+02:00,Group 5,Resource02,2011-02-16 01:06:40.010000+01:00,task-15687,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-03-10 08:57:34.633000+01:00 +Desk,case-6297,2011-05-25 01:06:40+02:00,General,2011-10-18 10:30:07.730000+02:00,2011-05-25 01:06:40.020000+02:00,Group 5,Resource02,2011-02-16 01:06:40.010000+01:00,task-15688,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-03-10 08:58:06.448000+01:00 +Desk,case-6297,2011-05-25 01:06:40+02:00,General,2011-10-18 10:30:07.730000+02:00,2011-05-25 01:06:40.020000+02:00,Group 5,Resource02,2011-02-16 01:06:40.010000+01:00,task-15686,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-03-14 12:39:41.602000+01:00 +Desk,case-6297,2011-05-25 01:06:40+02:00,General,2011-10-18 10:30:07.730000+02:00,2011-05-25 01:06:40.020000+02:00,Group 5,Resource02,2011-02-16 01:06:40.010000+01:00,task-16074,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-14 12:41:16.175000+01:00 +Desk,case-6297,2011-05-25 01:06:40+02:00,General,2011-10-18 10:30:07.730000+02:00,2011-05-25 01:06:40.020000+02:00,Group 5,Resource02,2011-02-16 01:06:40.010000+01:00,task-16075,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-15 12:19:36.277000+01:00 +Internet,case-6315,2011-04-27 00:00:00+02:00,General,2011-04-26 08:42:34.517000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-15298,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 14:24:05.757000+01:00 +Internet,case-6315,2011-04-27 00:00:00+02:00,General,2011-04-26 08:42:34.517000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-16475,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 14:24:29.603000+01:00 +Internet,case-6315,2011-04-27 00:00:00+02:00,General,2011-04-26 08:42:34.517000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-16477,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 14:24:41.835000+01:00 +Internet,case-6315,2011-04-27 00:00:00+02:00,General,2011-04-26 08:42:34.517000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-16478,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 14:24:53.113000+01:00 +Internet,case-6315,2011-04-27 00:00:00+02:00,General,2011-04-26 08:42:34.517000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-16476,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 14:49:13.323000+02:00 +Internet,case-6315,2011-04-27 00:00:00+02:00,General,2011-04-26 08:42:34.517000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-19151,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 12:31:59.396000+02:00 +Internet,case-6315,2011-04-27 00:00:00+02:00,General,2011-04-26 08:42:34.517000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-21851,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-04-21 12:49:32.785000+02:00 +Internet,case-6315,2011-04-27 00:00:00+02:00,General,2011-04-26 08:42:34.517000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-21865,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-04-21 12:49:47.252000+02:00 +Internet,case-6315,2011-04-27 00:00:00+02:00,General,2011-04-26 08:42:34.517000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-21867,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-04-21 13:51:09.121000+02:00 +Internet,case-6315,2011-04-27 00:00:00+02:00,General,2011-04-26 08:42:34.517000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-21889,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-04-26 08:42:34.323000+02:00 +Internet,case-6317,2011-04-28 00:00:00+02:00,General,2011-04-12 10:52:22.399000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-15313,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 09:44:52.459000+01:00 +Internet,case-6317,2011-04-28 00:00:00+02:00,General,2011-04-12 10:52:22.399000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17515,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 09:45:47.165000+01:00 +Internet,case-6317,2011-04-28 00:00:00+02:00,General,2011-04-12 10:52:22.399000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17518,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 09:46:03.263000+01:00 +Internet,case-6317,2011-04-28 00:00:00+02:00,General,2011-04-12 10:52:22.399000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17519,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 09:47:29.910000+01:00 +Internet,case-6317,2011-04-28 00:00:00+02:00,General,2011-04-12 10:52:22.399000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17516,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 14:25:57.841000+02:00 +Internet,case-6317,2011-04-28 00:00:00+02:00,General,2011-04-12 10:52:22.399000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-19116,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-05 14:26:50.015000+02:00 +Internet,case-6319,2011-04-27 00:00:00+02:00,General,2011-03-09 11:40:43.035000+01:00,2011-04-27 00:00:00.020000+02:00,,Resource04,2011-03-02 00:00:00.010000+01:00,task-15317,Confirmation of receipt,complete,Group 1,Resource04,2011-03-07 13:36:57.093000+01:00 +Internet,case-6319,2011-04-27 00:00:00+02:00,General,2011-03-09 11:40:43.035000+01:00,2011-04-27 00:00:00.020000+02:00,,Resource04,2011-03-02 00:00:00.010000+01:00,task-15325,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-07 13:48:25.453000+01:00 +Internet,case-6319,2011-04-27 00:00:00+02:00,General,2011-03-09 11:40:43.035000+01:00,2011-04-27 00:00:00.020000+02:00,,Resource04,2011-03-02 00:00:00.010000+01:00,task-15326,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-07 13:48:36.190000+01:00 +Internet,case-6319,2011-04-27 00:00:00+02:00,General,2011-03-09 11:40:43.035000+01:00,2011-04-27 00:00:00.020000+02:00,,Resource04,2011-03-02 00:00:00.010000+01:00,task-15334,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-07 13:48:57.793000+01:00 +Internet,case-6319,2011-04-27 00:00:00+02:00,General,2011-03-09 11:40:43.035000+01:00,2011-04-27 00:00:00.020000+02:00,,Resource04,2011-03-02 00:00:00.010000+01:00,task-15333,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-07 13:52:06.444000+01:00 +Internet,case-6319,2011-04-27 00:00:00+02:00,General,2011-03-09 11:40:43.035000+01:00,2011-04-27 00:00:00.020000+02:00,,Resource04,2011-03-02 00:00:00.010000+01:00,task-15339,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-03-07 13:52:16.702000+01:00 +Internet,case-6319,2011-04-27 00:00:00+02:00,General,2011-03-09 11:40:43.035000+01:00,2011-04-27 00:00:00.020000+02:00,,Resource04,2011-03-02 00:00:00.010000+01:00,task-15335,T11 Create document X request unlicensed,complete,Group 1,Resource04,2011-03-07 13:52:25.633000+01:00 +Internet,case-6319,2011-04-27 00:00:00+02:00,General,2011-03-09 11:40:43.035000+01:00,2011-04-27 00:00:00.020000+02:00,,Resource04,2011-03-02 00:00:00.010000+01:00,task-15341,T12 Check document X request unlicensed,complete,Group 4,Resource04,2011-03-07 13:52:50.533000+01:00 +Internet,case-6319,2011-04-27 00:00:00+02:00,General,2011-03-09 11:40:43.035000+01:00,2011-04-27 00:00:00.020000+02:00,,Resource04,2011-03-02 00:00:00.010000+01:00,task-15342,T14 Determine document X request unlicensed,complete,EMPTY,Resource10,2011-03-07 16:51:33.418000+01:00 +Internet,case-6319,2011-04-27 00:00:00+02:00,General,2011-03-09 11:40:43.035000+01:00,2011-04-27 00:00:00.020000+02:00,,Resource04,2011-03-02 00:00:00.010000+01:00,task-15399,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-03-09 11:40:42.914000+01:00 +Internet,case-6320,2011-04-28 00:00:00+02:00,General,2011-04-26 08:43:45.444000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-15321,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 10:19:50.916000+01:00 +Internet,case-6320,2011-04-28 00:00:00+02:00,General,2011-04-26 08:43:45.444000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17523,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 10:20:41.494000+01:00 +Internet,case-6320,2011-04-28 00:00:00+02:00,General,2011-04-26 08:43:45.444000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17525,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 10:20:57.418000+01:00 +Internet,case-6320,2011-04-28 00:00:00+02:00,General,2011-04-26 08:43:45.444000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17526,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 10:21:26.389000+01:00 +Internet,case-6320,2011-04-28 00:00:00+02:00,General,2011-04-26 08:43:45.444000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17524,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-05 14:57:40.052000+02:00 +Internet,case-6320,2011-04-28 00:00:00+02:00,General,2011-04-26 08:43:45.444000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-19152,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 12:51:29.322000+02:00 +Internet,case-6320,2011-04-28 00:00:00+02:00,General,2011-04-26 08:43:45.444000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-21868,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-04-21 12:56:59.950000+02:00 +Internet,case-6320,2011-04-28 00:00:00+02:00,General,2011-04-26 08:43:45.444000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-21869,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-04-21 12:57:11.972000+02:00 +Internet,case-6320,2011-04-28 00:00:00+02:00,General,2011-04-26 08:43:45.444000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-21870,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-04-21 13:56:47.101000+02:00 +Internet,case-6320,2011-04-28 00:00:00+02:00,General,2011-04-26 08:43:45.444000+02:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-21891,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-04-26 08:43:45.258000+02:00 +Internet,case-6322,2011-04-28 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-15343,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 10:31:41.008000+01:00 +Internet,case-6322,2011-04-28 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17530,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 10:32:54.843000+01:00 +Internet,case-6322,2011-04-28 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17532,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 10:33:16.713000+01:00 +Internet,case-6322,2011-04-28 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17535,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 10:33:35.802000+01:00 +Internet,case-6322,2011-04-28 00:00:00+02:00,General,2011-03-24 00:00:00.010000+01:00,2011-04-28 00:00:00.020000+02:00,,Resource11,2011-03-03 00:00:00.010000+01:00,task-17531,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-03-29 15:41:11.001000+02:00 +Internet,case-6324,2011-04-29 00:00:00+02:00,General,2011-04-20 12:01:12.029000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource11,2011-03-04 00:00:00.010000+01:00,task-15358,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 10:38:43.588000+01:00 +Internet,case-6324,2011-04-29 00:00:00+02:00,General,2011-04-20 12:01:12.029000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource11,2011-03-04 00:00:00.010000+01:00,task-17536,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 10:38:58.057000+01:00 +Internet,case-6324,2011-04-29 00:00:00+02:00,General,2011-04-20 12:01:12.029000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource11,2011-03-04 00:00:00.010000+01:00,task-17538,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 10:39:17.708000+01:00 +Internet,case-6324,2011-04-29 00:00:00+02:00,General,2011-04-20 12:01:12.029000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource11,2011-03-04 00:00:00.010000+01:00,task-17539,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 10:39:28.422000+01:00 +Internet,case-6324,2011-04-29 00:00:00+02:00,General,2011-04-20 12:01:12.029000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource11,2011-03-04 00:00:00.010000+01:00,task-17537,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-06 09:31:26.349000+02:00 +Internet,case-6324,2011-04-29 00:00:00+02:00,General,2011-04-20 12:01:12.029000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource11,2011-03-04 00:00:00.010000+01:00,task-19207,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-06 09:32:44.172000+02:00 +Internet,case-6326,2011-06-23 01:06:40+02:00,General,2011-06-29 16:30:05.642000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-03-04 01:06:40.010000+01:00,task-15386,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-08 11:45:20.444000+01:00 +Internet,case-6326,2011-06-23 01:06:40+02:00,General,2011-06-29 16:30:05.642000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-03-04 01:06:40.010000+01:00,task-15506,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-08 11:46:13.768000+01:00 +Internet,case-6326,2011-06-23 01:06:40+02:00,General,2011-06-29 16:30:05.642000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-03-04 01:06:40.010000+01:00,task-15508,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-08 11:46:24.986000+01:00 +Internet,case-6326,2011-06-23 01:06:40+02:00,General,2011-06-29 16:30:05.642000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-03-04 01:06:40.010000+01:00,task-15509,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-03-08 11:46:43.116000+01:00 +Internet,case-6326,2011-06-23 01:06:40+02:00,General,2011-06-29 16:30:05.642000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-03-04 01:06:40.010000+01:00,task-15507,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-08 11:46:53.439000+01:00 +Internet,case-6326,2011-06-23 01:06:40+02:00,General,2011-06-29 16:30:05.642000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-03-04 01:06:40.010000+01:00,task-15510,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-08 11:47:06.166000+01:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-15433,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 10:45:41.418000+01:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-17540,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 10:46:01.784000+01:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-17542,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 10:46:13.946000+01:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-17543,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 10:46:24.024000+01:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-17541,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-06 10:06:24.073000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19232,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-06 10:07:15.367000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19233,T16 Report reasons to hold request,complete,Group 1,Resource11,2011-04-06 14:14:40.223000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19323,T17 Check report Y to stop indication,complete,Group 4,Resource11,2011-04-06 14:15:18.808000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19324,T18 Adjust report Y to stop indicition,complete,Group 1,Resource11,2011-04-06 14:15:31.424000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19325,T17 Check report Y to stop indication,complete,EMPTY,Resource11,2011-04-06 14:16:10.658000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19326,T18 Adjust report Y to stop indicition,complete,Group 1,Resource11,2011-04-06 14:16:29.966000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19327,T17 Check report Y to stop indication,complete,EMPTY,Resource11,2011-04-06 14:17:22.246000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19328,T18 Adjust report Y to stop indicition,complete,Group 1,Resource11,2011-04-06 14:17:34.132000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19329,T17 Check report Y to stop indication,complete,EMPTY,Resource11,2011-04-06 14:19:08.597000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19330,T18 Adjust report Y to stop indicition,complete,Group 1,Resource11,2011-04-06 14:19:25.491000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19331,T17 Check report Y to stop indication,complete,Group 4,Resource11,2011-04-06 14:19:39.722000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19332,T19 Determine report Y to stop indication,complete,Group 3,Resource11,2011-04-06 14:19:53.076000+02:00 +Internet,case-6335,2011-04-03 00:00:00+02:00,General,2011-04-20 11:49:26.141000+02:00,2011-04-30 00:00:00.020000+02:00,,Resource11,2011-03-05 00:00:00.010000+01:00,task-19333,T20 Print report Y to stop indication,complete,Group 2,Resource11,2011-04-06 14:20:03.916000+02:00 +Internet,case-6339,2011-06-01 01:06:40+02:00,General,2011-06-20 15:22:26.262000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource15,2011-03-06 01:06:40.010000+01:00,task-15448,Confirmation of receipt,complete,EMPTY,Resource15,2011-03-10 14:19:56.082000+01:00 +Internet,case-6339,2011-06-01 01:06:40+02:00,General,2011-06-20 15:22:26.262000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource15,2011-03-06 01:06:40.010000+01:00,task-15828,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-03-10 14:24:42.827000+01:00 +Internet,case-6339,2011-06-01 01:06:40+02:00,General,2011-06-20 15:22:26.262000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource15,2011-03-06 01:06:40.010000+01:00,task-15827,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-03-17 12:14:32.422000+01:00 +Internet,case-6339,2011-06-01 01:06:40+02:00,General,2011-06-20 15:22:26.262000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource15,2011-03-06 01:06:40.010000+01:00,task-16598,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-03-17 12:14:45.083000+01:00 +Internet,case-6339,2011-06-01 01:06:40+02:00,General,2011-06-20 15:22:26.262000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource15,2011-03-06 01:06:40.010000+01:00,task-16599,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:37:24.642000+01:00 +Internet,case-6339,2011-06-01 01:06:40+02:00,General,2011-06-20 15:22:26.262000+02:00,2011-06-01 01:06:40.020000+02:00,,Resource15,2011-03-06 01:06:40.010000+01:00,task-15829,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-03-25 11:58:30.646000+01:00 +Internet,case-6343,2011-05-01 00:00:00+02:00,General,2011-03-10 16:06:00.711000+01:00,2011-05-01 00:00:00.020000+02:00,,Resource02,2011-03-06 00:00:00.010000+01:00,task-15489,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-10 14:48:56.527000+01:00 +Internet,case-6343,2011-05-01 00:00:00+02:00,General,2011-03-10 16:06:00.711000+01:00,2011-05-01 00:00:00.020000+02:00,,Resource02,2011-03-06 00:00:00.010000+01:00,task-15842,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-10 14:49:14.192000+01:00 +Internet,case-6343,2011-05-01 00:00:00+02:00,General,2011-03-10 16:06:00.711000+01:00,2011-05-01 00:00:00.020000+02:00,,Resource02,2011-03-06 00:00:00.010000+01:00,task-15845,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-10 14:49:28.279000+01:00 +Internet,case-6343,2011-05-01 00:00:00+02:00,General,2011-03-10 16:06:00.711000+01:00,2011-05-01 00:00:00.020000+02:00,,Resource02,2011-03-06 00:00:00.010000+01:00,task-15846,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-10 14:49:38.955000+01:00 +Internet,case-6343,2011-05-01 00:00:00+02:00,General,2011-03-10 16:06:00.711000+01:00,2011-05-01 00:00:00.020000+02:00,,Resource02,2011-03-06 00:00:00.010000+01:00,task-15843,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-10 14:50:26.819000+01:00 +Internet,case-6343,2011-05-01 00:00:00+02:00,General,2011-03-10 16:06:00.711000+01:00,2011-05-01 00:00:00.020000+02:00,,Resource02,2011-03-06 00:00:00.010000+01:00,task-15847,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-10 15:43:23.265000+01:00 +Internet,case-6343,2011-05-01 00:00:00+02:00,General,2011-03-10 16:06:00.711000+01:00,2011-05-01 00:00:00.020000+02:00,,Resource02,2011-03-06 00:00:00.010000+01:00,task-15854,T11 Create document X request unlicensed,complete,Group 1,Resource02,2011-03-10 16:05:05.115000+01:00 +Internet,case-6343,2011-05-01 00:00:00+02:00,General,2011-03-10 16:06:00.711000+01:00,2011-05-01 00:00:00.020000+02:00,,Resource02,2011-03-06 00:00:00.010000+01:00,task-15857,T12 Check document X request unlicensed,complete,Group 4,Resource02,2011-03-10 16:05:17.629000+01:00 +Internet,case-6343,2011-05-01 00:00:00+02:00,General,2011-03-10 16:06:00.711000+01:00,2011-05-01 00:00:00.020000+02:00,,Resource02,2011-03-06 00:00:00.010000+01:00,task-15858,T14 Determine document X request unlicensed,complete,Group 3,Resource02,2011-03-10 16:05:50.620000+01:00 +Internet,case-6343,2011-05-01 00:00:00+02:00,General,2011-03-10 16:06:00.711000+01:00,2011-05-01 00:00:00.020000+02:00,,Resource02,2011-03-06 00:00:00.010000+01:00,task-15859,T15 Print document X request unlicensed,complete,Group 2,Resource02,2011-03-10 16:06:00.570000+01:00 +Internet,case-6345,2011-04-20 01:06:40+02:00,General,2011-03-29 10:21:56.682000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource05,2011-02-23 01:06:40.010000+01:00,task-15528,Confirmation of receipt,complete,EMPTY,Resource05,2011-03-16 09:08:00.882000+01:00 +Internet,case-6345,2011-04-20 01:06:40+02:00,General,2011-03-29 10:21:56.682000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource05,2011-02-23 01:06:40.010000+01:00,task-16310,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-03-16 09:08:19.734000+01:00 +Internet,case-6345,2011-04-20 01:06:40+02:00,General,2011-03-29 10:21:56.682000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource05,2011-02-23 01:06:40.010000+01:00,task-16308,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-03-16 09:08:35.347000+01:00 +Internet,case-6345,2011-04-20 01:06:40+02:00,General,2011-03-29 10:21:56.682000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource05,2011-02-23 01:06:40.010000+01:00,task-16312,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-03-16 09:14:53.973000+01:00 +Internet,case-6345,2011-04-20 01:06:40+02:00,General,2011-03-29 10:21:56.682000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource05,2011-02-23 01:06:40.010000+01:00,task-16313,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-03-16 09:16:40.457000+01:00 +Internet,case-6345,2011-04-20 01:06:40+02:00,General,2011-03-29 10:21:56.682000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource05,2011-02-23 01:06:40.010000+01:00,task-16311,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-03-16 09:16:54.236000+01:00 +Internet,case-6347,2011-04-13 00:00:00+02:00,General,2011-04-12 11:45:11.374000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource04,2011-02-16 00:00:00.010000+01:00,task-15541,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-09 14:39:11.807000+01:00 +Internet,case-6347,2011-04-13 00:00:00+02:00,General,2011-04-12 11:45:11.374000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource04,2011-02-16 00:00:00.010000+01:00,task-15637,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-09 14:39:25.948000+01:00 +Internet,case-6347,2011-04-13 00:00:00+02:00,General,2011-04-12 11:45:11.374000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource04,2011-02-16 00:00:00.010000+01:00,task-15638,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-09 14:39:56.499000+01:00 +Internet,case-6347,2011-04-13 00:00:00+02:00,General,2011-04-12 11:45:11.374000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource04,2011-02-16 00:00:00.010000+01:00,task-15643,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-09 14:40:12.079000+01:00 +Internet,case-6347,2011-04-13 00:00:00+02:00,General,2011-04-12 11:45:11.374000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource04,2011-02-16 00:00:00.010000+01:00,task-15640,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-09 14:53:07.472000+01:00 +Internet,case-6347,2011-04-13 00:00:00+02:00,General,2011-04-12 11:45:11.374000+02:00,2011-04-13 00:00:00.020000+02:00,,Resource04,2011-02-16 00:00:00.010000+01:00,task-15652,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-10 10:32:54.331000+01:00 +Internet,case-6357,2011-04-28 01:06:40+02:00,General,2011-03-21 09:43:11.638000+01:00,2011-04-28 01:06:40.020000+02:00,,Resource05,2011-03-03 01:06:40.010000+01:00,task-15595,Confirmation of receipt,complete,EMPTY,Resource05,2011-03-16 10:31:36.855000+01:00 +Internet,case-6357,2011-04-28 01:06:40+02:00,General,2011-03-21 09:43:11.638000+01:00,2011-04-28 01:06:40.020000+02:00,,Resource05,2011-03-03 01:06:40.010000+01:00,task-16386,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-03-16 10:31:54.708000+01:00 +Internet,case-6357,2011-04-28 01:06:40+02:00,General,2011-03-21 09:43:11.638000+01:00,2011-04-28 01:06:40.020000+02:00,,Resource05,2011-03-03 01:06:40.010000+01:00,task-16388,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-03-16 10:32:08.125000+01:00 +Internet,case-6357,2011-04-28 01:06:40+02:00,General,2011-03-21 09:43:11.638000+01:00,2011-04-28 01:06:40.020000+02:00,,Resource05,2011-03-03 01:06:40.010000+01:00,task-16389,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-03-16 10:32:21.537000+01:00 +Internet,case-6357,2011-04-28 01:06:40+02:00,General,2011-03-21 09:43:11.638000+01:00,2011-04-28 01:06:40.020000+02:00,,Resource05,2011-03-03 01:06:40.010000+01:00,task-16387,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-03-16 10:32:35.840000+01:00 +Internet,case-6357,2011-04-28 01:06:40+02:00,General,2011-03-21 09:43:11.638000+01:00,2011-04-28 01:06:40.020000+02:00,,Resource05,2011-03-03 01:06:40.010000+01:00,task-16391,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-03-16 10:32:56.078000+01:00 +Internet,case-6357,2011-04-28 01:06:40+02:00,General,2011-03-21 09:43:11.638000+01:00,2011-04-28 01:06:40.020000+02:00,,Resource05,2011-03-03 01:06:40.010000+01:00,task-16392,T11 Create document X request unlicensed,complete,Group 1,Resource05,2011-03-17 10:42:26.537000+01:00 +Internet,case-6357,2011-04-28 01:06:40+02:00,General,2011-03-21 09:43:11.638000+01:00,2011-04-28 01:06:40.020000+02:00,,Resource05,2011-03-03 01:06:40.010000+01:00,task-16558,T12 Check document X request unlicensed,complete,Group 4,Resource05,2011-03-17 10:42:36.840000+01:00 +Internet,case-6357,2011-04-28 01:06:40+02:00,General,2011-03-21 09:43:11.638000+01:00,2011-04-28 01:06:40.020000+02:00,,Resource05,2011-03-03 01:06:40.010000+01:00,task-16559,T14 Determine document X request unlicensed,complete,Group 3,Resource05,2011-03-17 10:42:53.564000+01:00 +Internet,case-6357,2011-04-28 01:06:40+02:00,General,2011-03-21 09:43:11.638000+01:00,2011-04-28 01:06:40.020000+02:00,,Resource05,2011-03-03 01:06:40.010000+01:00,task-16560,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-03-21 09:43:11.402000+01:00 +Internet,case-6363,2011-04-15 01:06:40+02:00,General,2011-04-12 12:06:58.622000+02:00,2011-04-15 01:06:40.020000+02:00,,Resource11,2011-02-18 01:06:40.010000+01:00,task-15650,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 10:22:42.986000+01:00 +Internet,case-6363,2011-04-15 01:06:40+02:00,General,2011-04-12 12:06:58.622000+02:00,2011-04-15 01:06:40.020000+02:00,,Resource11,2011-02-18 01:06:40.010000+01:00,task-16361,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 10:22:57.399000+01:00 +Internet,case-6363,2011-04-15 01:06:40+02:00,General,2011-04-12 12:06:58.622000+02:00,2011-04-15 01:06:40.020000+02:00,,Resource11,2011-02-18 01:06:40.010000+01:00,task-16364,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 10:23:10.215000+01:00 +Internet,case-6363,2011-04-15 01:06:40+02:00,General,2011-04-12 12:06:58.622000+02:00,2011-04-15 01:06:40.020000+02:00,,Resource11,2011-02-18 01:06:40.010000+01:00,task-16365,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 10:23:21.717000+01:00 +Internet,case-6363,2011-04-15 01:06:40+02:00,General,2011-04-12 12:06:58.622000+02:00,2011-04-15 01:06:40.020000+02:00,,Resource11,2011-02-18 01:06:40.010000+01:00,task-16362,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-03-16 10:27:36.826000+01:00 +Internet,case-6363,2011-04-15 01:06:40+02:00,General,2011-04-12 12:06:58.622000+02:00,2011-04-15 01:06:40.020000+02:00,,Resource11,2011-02-18 01:06:40.010000+01:00,task-16384,T10 Determine necessity to stop indication,complete,EMPTY,Resource11,2011-03-21 12:29:43.708000+01:00 +Internet,case-6366,2011-06-13 01:06:40+02:00,General,2011-05-31 11:21:14.607000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource04,2011-02-22 01:06:40.010000+01:00,task-15658,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-15 16:56:23.105000+01:00 +Internet,case-6366,2011-06-13 01:06:40+02:00,General,2011-05-31 11:21:14.607000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource04,2011-02-22 01:06:40.010000+01:00,task-16251,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-15 16:56:37.928000+01:00 +Internet,case-6366,2011-06-13 01:06:40+02:00,General,2011-05-31 11:21:14.607000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource04,2011-02-22 01:06:40.010000+01:00,task-16253,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-15 16:56:48.465000+01:00 +Internet,case-6366,2011-06-13 01:06:40+02:00,General,2011-05-31 11:21:14.607000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource04,2011-02-22 01:06:40.010000+01:00,task-16254,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-03-15 16:56:58.501000+01:00 +Internet,case-6366,2011-06-13 01:06:40+02:00,General,2011-05-31 11:21:14.607000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource04,2011-02-22 01:06:40.010000+01:00,task-16252,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-15 16:57:07.681000+01:00 +Internet,case-6366,2011-06-13 01:06:40+02:00,General,2011-05-31 11:21:14.607000+02:00,2011-06-13 01:06:40.020000+02:00,,Resource04,2011-02-22 01:06:40.010000+01:00,task-16255,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-15 16:57:19.351000+01:00 +Internet,case-6374,2011-05-03 00:00:00+02:00,General,2011-08-19 09:01:30.370000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource12,2011-03-08 00:00:00.010000+01:00,task-15681,Confirmation of receipt,complete,EMPTY,Resource12,2011-03-14 14:45:01.445000+01:00 +Internet,case-6374,2011-05-03 00:00:00+02:00,General,2011-08-19 09:01:30.370000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource12,2011-03-08 00:00:00.010000+01:00,task-16099,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-03-17 12:03:49.811000+01:00 +Internet,case-6374,2011-05-03 00:00:00+02:00,General,2011-08-19 09:01:30.370000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource12,2011-03-08 00:00:00.010000+01:00,task-16595,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-03-17 12:37:46.103000+01:00 +Internet,case-6374,2011-05-03 00:00:00+02:00,General,2011-08-19 09:01:30.370000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource12,2011-03-08 00:00:00.010000+01:00,task-16608,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:35:59.306000+01:00 +Internet,case-6374,2011-05-03 00:00:00+02:00,General,2011-08-19 09:01:30.370000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource12,2011-03-08 00:00:00.010000+01:00,task-16100,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-19 08:04:16.027000+02:00 +Internet,case-6374,2011-05-03 00:00:00+02:00,General,2011-08-19 09:01:30.370000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource12,2011-03-08 00:00:00.010000+01:00,task-25599,T08 Draft and send request for advice,complete,Group 1,Resource12,2011-05-19 11:57:53.015000+02:00 +Internet,case-6374,2011-05-03 00:00:00+02:00,General,2011-08-19 09:01:30.370000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource12,2011-03-08 00:00:00.010000+01:00,task-25691,T09-1 Process or receive external advice from party 1,complete,Group 1,Resource12,2011-05-19 11:58:49.377000+02:00 +Internet,case-6374,2011-05-03 00:00:00+02:00,General,2011-08-19 09:01:30.370000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource12,2011-03-08 00:00:00.010000+01:00,task-25694,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-19 12:01:53.824000+02:00 +Internet,case-6374,2011-05-03 00:00:00+02:00,General,2011-08-19 09:01:30.370000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource12,2011-03-08 00:00:00.010000+01:00,task-25706,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-19 12:02:39.725000+02:00 +Internet,case-6375,2011-05-03 00:00:00+02:00,General,2011-04-27 11:17:53.563000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource14,2011-03-08 00:00:00.010000+01:00,task-15692,Confirmation of receipt,complete,EMPTY,Resource14,2011-03-21 13:39:45.091000+01:00 +Internet,case-6375,2011-05-03 00:00:00+02:00,General,2011-04-27 11:17:53.563000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource14,2011-03-08 00:00:00.010000+01:00,task-17027,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-03-21 13:40:15.552000+01:00 +Internet,case-6375,2011-05-03 00:00:00+02:00,General,2011-04-27 11:17:53.563000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource14,2011-03-08 00:00:00.010000+01:00,task-17029,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-03-21 13:40:34.104000+01:00 +Internet,case-6375,2011-05-03 00:00:00+02:00,General,2011-04-27 11:17:53.563000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource14,2011-03-08 00:00:00.010000+01:00,task-17026,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-03-21 20:44:42.411000+01:00 +Internet,case-6375,2011-05-03 00:00:00+02:00,General,2011-04-27 11:17:53.563000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource14,2011-03-08 00:00:00.010000+01:00,task-17097,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-21 20:44:54.592000+01:00 +Internet,case-6375,2011-05-03 00:00:00+02:00,General,2011-04-27 11:17:53.563000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource14,2011-03-08 00:00:00.010000+01:00,task-17098,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-22 14:38:15.659000+01:00 +Internet,case-6378,2011-07-01 01:06:40+02:00,General,2011-06-16 13:55:21.953000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource02,2011-03-09 01:06:40.010000+01:00,task-15739,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-11 14:58:30.063000+01:00 +Internet,case-6378,2011-07-01 01:06:40+02:00,General,2011-06-16 13:55:21.953000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource02,2011-03-09 01:06:40.010000+01:00,task-15946,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-11 14:58:54.590000+01:00 +Internet,case-6378,2011-07-01 01:06:40+02:00,General,2011-06-16 13:55:21.953000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource02,2011-03-09 01:06:40.010000+01:00,task-15947,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-11 14:59:09.837000+01:00 +Internet,case-6378,2011-07-01 01:06:40+02:00,General,2011-06-16 13:55:21.953000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource02,2011-03-09 01:06:40.010000+01:00,task-15948,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-11 15:39:35.315000+01:00 +Internet,case-6378,2011-07-01 01:06:40+02:00,General,2011-06-16 13:55:21.953000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource02,2011-03-09 01:06:40.010000+01:00,task-15951,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-11 16:08:00.730000+01:00 +Internet,case-6378,2011-07-01 01:06:40+02:00,General,2011-06-16 13:55:21.953000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource02,2011-03-09 01:06:40.010000+01:00,task-15949,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-14 11:55:06.135000+01:00 +Internet,case-6379,2011-05-11 01:06:40+02:00,General,2011-05-09 16:26:24.721000+02:00,2011-05-11 01:06:40.020000+02:00,,Resource04,2011-03-09 01:06:40.010000+01:00,task-15740,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-24 14:36:59.627000+01:00 +Internet,case-6379,2011-05-11 01:06:40+02:00,General,2011-05-09 16:26:24.721000+02:00,2011-05-11 01:06:40.020000+02:00,,Resource04,2011-03-09 01:06:40.010000+01:00,task-17656,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-24 14:37:15.241000+01:00 +Internet,case-6379,2011-05-11 01:06:40+02:00,General,2011-05-09 16:26:24.721000+02:00,2011-05-11 01:06:40.020000+02:00,,Resource04,2011-03-09 01:06:40.010000+01:00,task-17657,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-24 14:37:55.570000+01:00 +Internet,case-6379,2011-05-11 01:06:40+02:00,General,2011-05-09 16:26:24.721000+02:00,2011-05-11 01:06:40.020000+02:00,,Resource04,2011-03-09 01:06:40.010000+01:00,task-17661,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-24 14:38:13.163000+01:00 +Internet,case-6379,2011-05-11 01:06:40+02:00,General,2011-05-09 16:26:24.721000+02:00,2011-05-11 01:06:40.020000+02:00,,Resource04,2011-03-09 01:06:40.010000+01:00,task-17659,T04 Determine confirmation of receipt,complete,EMPTY,Resource04,2011-04-21 10:45:39.546000+02:00 +Internet,case-6379,2011-05-11 01:06:40+02:00,General,2011-05-09 16:26:24.721000+02:00,2011-05-11 01:06:40.020000+02:00,,Resource04,2011-03-09 01:06:40.010000+01:00,task-21725,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-04-21 10:46:03.309000+02:00 +Internet,case-6380,2011-05-04 00:00:00+02:00,General,2011-04-20 11:24:44.730000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-15762,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 10:59:14.184000+01:00 +Internet,case-6380,2011-05-04 00:00:00+02:00,General,2011-04-20 11:24:44.730000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-17547,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 10:59:29.369000+01:00 +Internet,case-6380,2011-05-04 00:00:00+02:00,General,2011-04-20 11:24:44.730000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-17549,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 10:59:44.022000+01:00 +Internet,case-6380,2011-05-04 00:00:00+02:00,General,2011-04-20 11:24:44.730000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-17550,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 10:59:56.259000+01:00 +Internet,case-6380,2011-05-04 00:00:00+02:00,General,2011-04-20 11:24:44.730000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-17548,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-06 10:48:27.359000+02:00 +Internet,case-6380,2011-05-04 00:00:00+02:00,General,2011-04-20 11:24:44.730000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-19251,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-06 10:51:31.112000+02:00 +Internet,case-6381,2011-05-04 00:00:00+02:00,General,2011-04-18 08:15:41.589000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-15801,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:04:53.722000+01:00 +Internet,case-6381,2011-05-04 00:00:00+02:00,General,2011-04-18 08:15:41.589000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-17552,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:05:08.650000+01:00 +Internet,case-6381,2011-05-04 00:00:00+02:00,General,2011-04-18 08:15:41.589000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-17554,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:05:22.308000+01:00 +Internet,case-6381,2011-05-04 00:00:00+02:00,General,2011-04-18 08:15:41.589000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-17555,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:05:36.595000+01:00 +Internet,case-6381,2011-05-04 00:00:00+02:00,General,2011-04-18 08:15:41.589000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-17553,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-06 11:06:49.250000+02:00 +Internet,case-6381,2011-05-04 00:00:00+02:00,General,2011-04-18 08:15:41.589000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-19263,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-06 11:07:30.730000+02:00 +Internet,case-6382,2011-05-04 00:00:00+02:00,General,2011-04-20 11:15:03.092000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-15803,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-28 15:10:34.271000+02:00 +Internet,case-6382,2011-05-04 00:00:00+02:00,General,2011-04-20 11:15:03.092000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-18090,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:45:08.624000+02:00 +Internet,case-6382,2011-05-04 00:00:00+02:00,General,2011-04-20 11:15:03.092000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-18566,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-31 15:11:59.469000+02:00 +Internet,case-6382,2011-05-04 00:00:00+02:00,General,2011-04-20 11:15:03.092000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-18700,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 14:04:42.968000+02:00 +Internet,case-6382,2011-05-04 00:00:00+02:00,General,2011-04-20 11:15:03.092000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-18091,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-13 10:09:03.032000+02:00 +Internet,case-6382,2011-05-04 00:00:00+02:00,General,2011-04-20 11:15:03.092000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource11,2011-03-09 00:00:00.010000+01:00,task-20196,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-13 10:09:16.841000+02:00 +Internet,case-6383,2011-05-04 00:00:00+02:00,General,2011-05-03 11:47:54.952000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource05,2011-03-09 00:00:00.010000+01:00,task-15817,Confirmation of receipt,complete,EMPTY,Resource05,2011-03-23 10:31:11.571000+01:00 +Internet,case-6383,2011-05-04 00:00:00+02:00,General,2011-05-03 11:47:54.952000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource05,2011-03-09 00:00:00.010000+01:00,task-17344,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-03-23 10:31:34.644000+01:00 +Internet,case-6383,2011-05-04 00:00:00+02:00,General,2011-05-03 11:47:54.952000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource05,2011-03-09 00:00:00.010000+01:00,task-17346,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-03-23 10:31:47.783000+01:00 +Internet,case-6383,2011-05-04 00:00:00+02:00,General,2011-05-03 11:47:54.952000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource05,2011-03-09 00:00:00.010000+01:00,task-17347,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-03-23 10:33:11.659000+01:00 +Internet,case-6383,2011-05-04 00:00:00+02:00,General,2011-05-03 11:47:54.952000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource05,2011-03-09 00:00:00.010000+01:00,task-17345,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-03-23 10:33:59.691000+01:00 +Internet,case-6383,2011-05-04 00:00:00+02:00,General,2011-05-03 11:47:54.952000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource05,2011-03-09 00:00:00.010000+01:00,task-17348,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-03-23 10:34:26.734000+01:00 +Internet,case-6384,2011-03-30 00:00:00+02:00,General,2011-03-11 15:56:41.344000+01:00,2011-03-30 00:00:00.020000+02:00,,Resource01,2011-02-02 00:00:00.010000+01:00,task-15818,Confirmation of receipt,complete,EMPTY,admin2,2011-03-11 15:56:42.040000+01:00 +Internet,case-6385,2011-05-04 00:00:00+02:00,General,2011-04-21 08:58:31.264000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource08,2011-03-09 00:00:00.010000+01:00,task-15819,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 10:55:11.230000+01:00 +Internet,case-6385,2011-05-04 00:00:00+02:00,General,2011-04-21 08:58:31.264000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource08,2011-03-09 00:00:00.010000+01:00,task-16562,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 10:58:39.813000+01:00 +Internet,case-6385,2011-05-04 00:00:00+02:00,General,2011-04-21 08:58:31.264000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource08,2011-03-09 00:00:00.010000+01:00,task-16563,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-17 11:05:13.385000+01:00 +Internet,case-6385,2011-05-04 00:00:00+02:00,General,2011-04-21 08:58:31.264000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource08,2011-03-09 00:00:00.010000+01:00,task-16568,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-17 11:05:28.030000+01:00 +Internet,case-6385,2011-05-04 00:00:00+02:00,General,2011-04-21 08:58:31.264000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource08,2011-03-09 00:00:00.010000+01:00,task-16570,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-17 11:07:13.804000+01:00 +Internet,case-6385,2011-05-04 00:00:00+02:00,General,2011-04-21 08:58:31.264000+02:00,2011-05-04 00:00:00.020000+02:00,,Resource08,2011-03-09 00:00:00.010000+01:00,task-16571,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:34:15.740000+01:00 +Internet,case-6386,2011-05-17 01:06:40+02:00,General,2011-04-21 13:54:07.106000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource02,2011-02-22 01:06:40.010000+01:00,task-15841,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-18 08:08:34.304000+01:00 +Internet,case-6386,2011-05-17 01:06:40+02:00,General,2011-04-21 13:54:07.106000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource02,2011-02-22 01:06:40.010000+01:00,task-16674,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-18 08:08:53.922000+01:00 +Internet,case-6386,2011-05-17 01:06:40+02:00,General,2011-04-21 13:54:07.106000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource02,2011-02-22 01:06:40.010000+01:00,task-16676,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-18 08:09:10.789000+01:00 +Internet,case-6386,2011-05-17 01:06:40+02:00,General,2011-04-21 13:54:07.106000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource02,2011-02-22 01:06:40.010000+01:00,task-16677,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-18 08:09:28.300000+01:00 +Internet,case-6386,2011-05-17 01:06:40+02:00,General,2011-04-21 13:54:07.106000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource02,2011-02-22 01:06:40.010000+01:00,task-16675,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-18 08:23:16.197000+01:00 +Internet,case-6386,2011-05-17 01:06:40+02:00,General,2011-04-21 13:54:07.106000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource02,2011-02-22 01:06:40.010000+01:00,task-16678,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-18 08:24:46.877000+01:00 +Internet,case-6387,2011-05-05 00:00:00+02:00,General,2011-04-01 14:54:09.591000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource17,2011-03-10 00:00:00.010000+01:00,task-15844,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-21 14:05:50.672000+01:00 +Internet,case-6387,2011-05-05 00:00:00+02:00,General,2011-04-01 14:54:09.591000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource17,2011-03-10 00:00:00.010000+01:00,task-17043,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-21 14:06:03.322000+01:00 +Internet,case-6387,2011-05-05 00:00:00+02:00,General,2011-04-01 14:54:09.591000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource17,2011-03-10 00:00:00.010000+01:00,task-17044,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-21 14:06:17.497000+01:00 +Internet,case-6387,2011-05-05 00:00:00+02:00,General,2011-04-01 14:54:09.591000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource17,2011-03-10 00:00:00.010000+01:00,task-17042,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-21 14:08:33.727000+01:00 +Internet,case-6387,2011-05-05 00:00:00+02:00,General,2011-04-01 14:54:09.591000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource17,2011-03-10 00:00:00.010000+01:00,task-17049,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-21 20:40:48.032000+01:00 +Internet,case-6387,2011-05-05 00:00:00+02:00,General,2011-04-01 14:54:09.591000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource17,2011-03-10 00:00:00.010000+01:00,task-17095,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-22 14:32:30.460000+01:00 +Internet,case-6388,2011-04-22 01:06:40+02:00,General,2011-04-20 10:57:13.852000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-15851,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-16 14:06:20.555000+01:00 +Internet,case-6388,2011-04-22 01:06:40+02:00,General,2011-04-20 10:57:13.852000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-16453,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-16 14:06:37.599000+01:00 +Internet,case-6388,2011-04-22 01:06:40+02:00,General,2011-04-20 10:57:13.852000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-16455,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-16 14:06:49.523000+01:00 +Internet,case-6388,2011-04-22 01:06:40+02:00,General,2011-04-20 10:57:13.852000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-16456,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-16 14:06:58.922000+01:00 +Internet,case-6388,2011-04-22 01:06:40+02:00,General,2011-04-20 10:57:13.852000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-16454,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-06 08:03:30.605000+02:00 +Internet,case-6388,2011-04-22 01:06:40+02:00,General,2011-04-20 10:57:13.852000+02:00,2011-04-22 01:06:40.020000+02:00,,Resource11,2011-02-25 01:06:40.010000+01:00,task-19188,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-06 08:05:54.931000+02:00 +Internet,case-6389,2011-05-05 00:00:00+02:00,General,2011-05-02 08:36:22.633000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-15852,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:20:25.179000+01:00 +Internet,case-6389,2011-05-05 00:00:00+02:00,General,2011-05-02 08:36:22.633000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17556,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:20:40.323000+01:00 +Internet,case-6389,2011-05-05 00:00:00+02:00,General,2011-05-02 08:36:22.633000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17558,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:21:00.083000+01:00 +Internet,case-6389,2011-05-05 00:00:00+02:00,General,2011-05-02 08:36:22.633000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17559,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:21:24.209000+01:00 +Internet,case-6389,2011-05-05 00:00:00+02:00,General,2011-05-02 08:36:22.633000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17557,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-07 08:08:11.893000+02:00 +Internet,case-6389,2011-05-05 00:00:00+02:00,General,2011-05-02 08:36:22.633000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-19410,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-07 08:13:00.841000+02:00 +Internet,case-6390,2011-05-05 00:00:00+02:00,General,2011-04-18 08:08:51.714000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-15853,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:27:28.459000+01:00 +Internet,case-6390,2011-05-05 00:00:00+02:00,General,2011-04-18 08:08:51.714000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17560,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:27:49.645000+01:00 +Internet,case-6390,2011-05-05 00:00:00+02:00,General,2011-04-18 08:08:51.714000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17562,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:28:03.232000+01:00 +Internet,case-6390,2011-05-05 00:00:00+02:00,General,2011-04-18 08:08:51.714000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17563,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:28:28.565000+01:00 +Internet,case-6390,2011-05-05 00:00:00+02:00,General,2011-04-18 08:08:51.714000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17561,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-07 09:07:03.482000+02:00 +Internet,case-6390,2011-05-05 00:00:00+02:00,General,2011-04-18 08:08:51.714000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-19428,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-07 09:07:24.415000+02:00 +Internet,case-6391,2011-06-06 01:06:40+02:00,General,2011-04-21 17:10:22.871000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-15855,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-21 14:25:02.773000+01:00 +Internet,case-6391,2011-06-06 01:06:40+02:00,General,2011-04-21 17:10:22.871000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-17053,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-21 14:25:41.095000+01:00 +Internet,case-6391,2011-06-06 01:06:40+02:00,General,2011-04-21 17:10:22.871000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-17054,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-21 14:25:53.604000+01:00 +Internet,case-6391,2011-06-06 01:06:40+02:00,General,2011-04-21 17:10:22.871000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-17056,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-21 14:26:20.207000+01:00 +Internet,case-6391,2011-06-06 01:06:40+02:00,General,2011-04-21 17:10:22.871000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-17055,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-21 20:42:14.588000+01:00 +Internet,case-6391,2011-06-06 01:06:40+02:00,General,2011-04-21 17:10:22.871000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-17096,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-22 14:31:31.051000+01:00 +Internet,case-6407,2011-05-05 00:00:00+02:00,General,2011-04-26 09:22:50.149000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-15895,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:35:13.025000+01:00 +Internet,case-6407,2011-05-05 00:00:00+02:00,General,2011-04-26 09:22:50.149000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17564,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:35:31.024000+01:00 +Internet,case-6407,2011-05-05 00:00:00+02:00,General,2011-04-26 09:22:50.149000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17566,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:35:45.161000+01:00 +Internet,case-6407,2011-05-05 00:00:00+02:00,General,2011-04-26 09:22:50.149000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17567,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:36:02.403000+01:00 +Internet,case-6407,2011-05-05 00:00:00+02:00,General,2011-04-26 09:22:50.149000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17565,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-07 09:25:22.643000+02:00 +Internet,case-6407,2011-05-05 00:00:00+02:00,General,2011-04-26 09:22:50.149000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-19441,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-07 09:30:29.975000+02:00 +Internet,case-6411,2011-06-30 01:06:40+02:00,General,2011-06-30 12:17:32.708000+02:00,2011-06-30 01:06:40.020000+02:00,,Resource18,2011-03-11 01:06:40.010000+01:00,task-15904,Confirmation of receipt,complete,EMPTY,Resource18,2011-03-14 15:35:19.672000+01:00 +Internet,case-6411,2011-06-30 01:06:40+02:00,General,2011-06-30 12:17:32.708000+02:00,2011-06-30 01:06:40.020000+02:00,,Resource18,2011-03-11 01:06:40.010000+01:00,task-16103,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-03-14 16:08:01.736000+01:00 +Internet,case-6411,2011-06-30 01:06:40+02:00,General,2011-06-30 12:17:32.708000+02:00,2011-06-30 01:06:40.020000+02:00,,Resource18,2011-03-11 01:06:40.010000+01:00,task-16110,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-14 16:31:03.092000+01:00 +Internet,case-6411,2011-06-30 01:06:40+02:00,General,2011-06-30 12:17:32.708000+02:00,2011-06-30 01:06:40.020000+02:00,,Resource18,2011-03-11 01:06:40.010000+01:00,task-16113,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-15 12:28:48.641000+01:00 +Internet,case-6411,2011-06-30 01:06:40+02:00,General,2011-06-30 12:17:32.708000+02:00,2011-06-30 01:06:40.020000+02:00,,Resource18,2011-03-11 01:06:40.010000+01:00,task-16104,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-03-22 15:24:41.524000+01:00 +Internet,case-6411,2011-06-30 01:06:40+02:00,General,2011-06-30 12:17:32.708000+02:00,2011-06-30 01:06:40.020000+02:00,,Resource18,2011-03-11 01:06:40.010000+01:00,task-17285,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-03-22 15:55:06.747000+01:00 +Internet,case-6413,2011-05-06 01:06:40+02:00,General,2011-05-04 16:12:17.687000+02:00,2011-05-06 01:06:40.020000+02:00,,Resource08,2011-03-11 01:06:40.010000+01:00,task-15919,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 15:45:51.260000+01:00 +Internet,case-6413,2011-05-06 01:06:40+02:00,General,2011-05-04 16:12:17.687000+02:00,2011-05-06 01:06:40.020000+02:00,,Resource08,2011-03-11 01:06:40.010000+01:00,task-16653,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-17 15:46:05.292000+01:00 +Internet,case-6413,2011-05-06 01:06:40+02:00,General,2011-05-04 16:12:17.687000+02:00,2011-05-06 01:06:40.020000+02:00,,Resource08,2011-03-11 01:06:40.010000+01:00,task-16655,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-17 16:09:07.952000+01:00 +Internet,case-6413,2011-05-06 01:06:40+02:00,General,2011-05-04 16:12:17.687000+02:00,2011-05-06 01:06:40.020000+02:00,,Resource08,2011-03-11 01:06:40.010000+01:00,task-16658,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:40:02.917000+01:00 +Internet,case-6413,2011-05-06 01:06:40+02:00,General,2011-05-04 16:12:17.687000+02:00,2011-05-06 01:06:40.020000+02:00,,Resource08,2011-03-11 01:06:40.010000+01:00,task-16654,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-22 14:15:45.552000+01:00 +Internet,case-6413,2011-05-06 01:06:40+02:00,General,2011-05-04 16:12:17.687000+02:00,2011-05-06 01:06:40.020000+02:00,,Resource08,2011-03-11 01:06:40.010000+01:00,task-17208,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-22 14:16:43.502000+01:00 +Internet,case-6413,2011-05-06 01:06:40+02:00,General,2011-05-04 16:12:17.687000+02:00,2011-05-06 01:06:40.020000+02:00,,Resource08,2011-03-11 01:06:40.010000+01:00,task-17210,T16 Report reasons to hold request,complete,Group 1,Resource08,2011-03-22 14:18:06.052000+01:00 +Internet,case-6413,2011-05-06 01:06:40+02:00,General,2011-05-04 16:12:17.687000+02:00,2011-05-06 01:06:40.020000+02:00,,Resource08,2011-03-11 01:06:40.010000+01:00,task-17214,T17 Check report Y to stop indication,complete,Group 4,Resource08,2011-03-22 14:18:20.530000+01:00 +Internet,case-6413,2011-05-06 01:06:40+02:00,General,2011-05-04 16:12:17.687000+02:00,2011-05-06 01:06:40.020000+02:00,,Resource08,2011-03-11 01:06:40.010000+01:00,task-17215,T19 Determine report Y to stop indication,complete,EMPTY,Resource08,2011-03-22 14:19:09.344000+01:00 +Internet,case-6413,2011-05-06 01:06:40+02:00,General,2011-05-04 16:12:17.687000+02:00,2011-05-06 01:06:40.020000+02:00,,Resource08,2011-03-11 01:06:40.010000+01:00,task-17219,T20 Print report Y to stop indication,complete,Group 2,Resource08,2011-03-22 14:19:25.420000+01:00 +Desk,case-6415,2011-04-26 01:06:40+02:00,General,2011-04-21 15:00:04.459000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-15939,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-17 11:26:16.789000+01:00 +Desk,case-6415,2011-04-26 01:06:40+02:00,General,2011-04-21 15:00:04.459000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-16584,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-17 11:26:43.687000+01:00 +Desk,case-6415,2011-04-26 01:06:40+02:00,General,2011-04-21 15:00:04.459000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-16585,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-17 11:39:04.143000+01:00 +Desk,case-6415,2011-04-26 01:06:40+02:00,General,2011-04-21 15:00:04.459000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-16590,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-17 11:39:32.291000+01:00 +Desk,case-6415,2011-04-26 01:06:40+02:00,General,2011-04-21 15:00:04.459000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-16586,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-17 12:28:28.215000+01:00 +Desk,case-6415,2011-04-26 01:06:40+02:00,General,2011-04-21 15:00:04.459000+02:00,2011-04-26 01:06:40.020000+02:00,,Resource08,2011-03-01 01:06:40.010000+01:00,task-16602,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-21 09:38:42.068000+01:00 +Desk,case-6417,2011-04-26 00:00:00+02:00,General,2011-04-26 10:55:15.989000+02:00,2011-04-26 00:00:00.020000+02:00,,Resource17,2011-03-01 00:00:00.010000+01:00,task-15941,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-16 14:16:42.565000+01:00 +Desk,case-6417,2011-04-26 00:00:00+02:00,General,2011-04-26 10:55:15.989000+02:00,2011-04-26 00:00:00.020000+02:00,,Resource17,2011-03-01 00:00:00.010000+01:00,task-16461,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-16 14:17:18.680000+01:00 +Desk,case-6417,2011-04-26 00:00:00+02:00,General,2011-04-26 10:55:15.989000+02:00,2011-04-26 00:00:00.020000+02:00,,Resource17,2011-03-01 00:00:00.010000+01:00,task-16462,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-16 14:17:57.267000+01:00 +Desk,case-6417,2011-04-26 00:00:00+02:00,General,2011-04-26 10:55:15.989000+02:00,2011-04-26 00:00:00.020000+02:00,,Resource17,2011-03-01 00:00:00.010000+01:00,task-16464,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-16 14:18:17.781000+01:00 +Desk,case-6417,2011-04-26 00:00:00+02:00,General,2011-04-26 10:55:15.989000+02:00,2011-04-26 00:00:00.020000+02:00,,Resource17,2011-03-01 00:00:00.010000+01:00,task-16463,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-16 20:54:53.049000+01:00 +Desk,case-6417,2011-04-26 00:00:00+02:00,General,2011-04-26 10:55:15.989000+02:00,2011-04-26 00:00:00.020000+02:00,,Resource17,2011-03-01 00:00:00.010000+01:00,task-16502,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-17 09:02:02.106000+01:00 +Internet,case-6437,2011-05-09 00:00:00+02:00,General,2011-08-18 08:45:49.181000+02:00,2011-05-09 00:00:00.020000+02:00,,Resource21,2011-03-14 00:00:00.010000+01:00,task-16035,Confirmation of receipt,complete,Group 1,Resource21,2011-03-14 10:59:59.290000+01:00 +Internet,case-6437,2011-05-09 00:00:00+02:00,General,2011-08-18 08:45:49.181000+02:00,2011-05-09 00:00:00.020000+02:00,,Resource21,2011-03-14 00:00:00.010000+01:00,task-16038,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-08-18 08:45:50.227000+02:00 +Internet,case-6437,2011-05-09 00:00:00+02:00,General,2011-08-18 08:45:49.181000+02:00,2011-05-09 00:00:00.020000+02:00,,Resource21,2011-03-14 00:00:00.010000+01:00,task-16037,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-08-18 08:45:50.819000+02:00 +Internet,case-6438,2011-05-08 00:00:00+02:00,General,2011-05-04 16:15:12.118000+02:00,2011-05-08 00:00:00.020000+02:00,,Resource13,2011-03-13 00:00:00.010000+01:00,task-16036,Confirmation of receipt,complete,EMPTY,Resource13,2011-03-15 12:26:46.532000+01:00 +Internet,case-6438,2011-05-08 00:00:00+02:00,General,2011-05-04 16:15:12.118000+02:00,2011-05-08 00:00:00.020000+02:00,,Resource13,2011-03-13 00:00:00.010000+01:00,task-16160,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-03-15 12:31:00.695000+01:00 +Internet,case-6438,2011-05-08 00:00:00+02:00,General,2011-05-04 16:15:12.118000+02:00,2011-05-08 00:00:00.020000+02:00,,Resource13,2011-03-13 00:00:00.010000+01:00,task-16161,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-03-15 12:42:29.969000+01:00 +Internet,case-6438,2011-05-08 00:00:00+02:00,General,2011-05-04 16:15:12.118000+02:00,2011-05-08 00:00:00.020000+02:00,,Resource13,2011-03-13 00:00:00.010000+01:00,task-16169,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource13,2011-03-15 12:45:29.514000+01:00 +Internet,case-6438,2011-05-08 00:00:00+02:00,General,2011-05-04 16:15:12.118000+02:00,2011-05-08 00:00:00.020000+02:00,,Resource13,2011-03-13 00:00:00.010000+01:00,task-16170,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-03-15 12:45:48.978000+01:00 +Internet,case-6438,2011-05-08 00:00:00+02:00,General,2011-05-04 16:15:12.118000+02:00,2011-05-08 00:00:00.020000+02:00,,Resource13,2011-03-13 00:00:00.010000+01:00,task-16171,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-03-15 12:46:08.529000+01:00 +Internet,case-6438,2011-05-08 00:00:00+02:00,General,2011-05-04 16:15:12.118000+02:00,2011-05-08 00:00:00.020000+02:00,,Resource13,2011-03-13 00:00:00.010000+01:00,task-16167,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-15 13:00:46.953000+01:00 +Internet,case-6438,2011-05-08 00:00:00+02:00,General,2011-05-04 16:15:12.118000+02:00,2011-05-08 00:00:00.020000+02:00,,Resource13,2011-03-13 00:00:00.010000+01:00,task-16181,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-15 14:35:28.026000+01:00 +Internet,case-6459,2011-04-24 00:00:00+02:00,General,2011-04-21 14:24:59.920000+02:00,2011-04-24 00:00:00.020000+02:00,,Resource17,2011-02-27 00:00:00.010000+01:00,task-16271,Confirmation of receipt,complete,EMPTY,Resource17,2011-03-22 12:19:27.628000+01:00 +Internet,case-6459,2011-04-24 00:00:00+02:00,General,2011-04-21 14:24:59.920000+02:00,2011-04-24 00:00:00.020000+02:00,,Resource17,2011-02-27 00:00:00.010000+01:00,task-17189,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-03-22 12:20:01.063000+01:00 +Internet,case-6459,2011-04-24 00:00:00+02:00,General,2011-04-21 14:24:59.920000+02:00,2011-04-24 00:00:00.020000+02:00,,Resource17,2011-02-27 00:00:00.010000+01:00,task-17190,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-03-22 12:21:07.860000+01:00 +Internet,case-6459,2011-04-24 00:00:00+02:00,General,2011-04-21 14:24:59.920000+02:00,2011-04-24 00:00:00.020000+02:00,,Resource17,2011-02-27 00:00:00.010000+01:00,task-17192,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-03-22 12:21:29.741000+01:00 +Internet,case-6459,2011-04-24 00:00:00+02:00,General,2011-04-21 14:24:59.920000+02:00,2011-04-24 00:00:00.020000+02:00,,Resource17,2011-02-27 00:00:00.010000+01:00,task-17191,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-23 10:00:12.840000+01:00 +Internet,case-6459,2011-04-24 00:00:00+02:00,General,2011-04-21 14:24:59.920000+02:00,2011-04-24 00:00:00.020000+02:00,,Resource17,2011-02-27 00:00:00.010000+01:00,task-17334,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-23 16:17:52.460000+01:00 +Internet,case-6471,2011-05-10 01:06:40+02:00,General,2011-05-11 13:43:32.245000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource11,2011-03-15 01:06:40.010000+01:00,task-16314,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:47:16.104000+01:00 +Internet,case-6471,2011-05-10 01:06:40+02:00,General,2011-05-11 13:43:32.245000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource11,2011-03-15 01:06:40.010000+01:00,task-17569,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:47:36.063000+01:00 +Internet,case-6471,2011-05-10 01:06:40+02:00,General,2011-05-11 13:43:32.245000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource11,2011-03-15 01:06:40.010000+01:00,task-17571,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:48:29.478000+01:00 +Internet,case-6471,2011-05-10 01:06:40+02:00,General,2011-05-11 13:43:32.245000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource11,2011-03-15 01:06:40.010000+01:00,task-17572,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:48:40.414000+01:00 +Internet,case-6471,2011-05-10 01:06:40+02:00,General,2011-05-11 13:43:32.245000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource11,2011-03-15 01:06:40.010000+01:00,task-17570,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-04-07 09:55:21.957000+02:00 +Internet,case-6471,2011-05-10 01:06:40+02:00,General,2011-05-11 13:43:32.245000+02:00,2011-05-10 01:06:40.020000+02:00,,Resource11,2011-03-15 01:06:40.010000+01:00,task-19461,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-04-07 09:55:39.064000+02:00 +Internet,case-6475,2011-05-10 00:00:00+02:00,General,2011-04-18 08:00:57.296000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-16404,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 11:53:20.647000+01:00 +Internet,case-6475,2011-05-10 00:00:00+02:00,General,2011-04-18 08:00:57.296000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-17573,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 11:53:42.669000+01:00 +Internet,case-6475,2011-05-10 00:00:00+02:00,General,2011-04-18 08:00:57.296000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-17575,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 11:54:01.657000+01:00 +Internet,case-6475,2011-05-10 00:00:00+02:00,General,2011-04-18 08:00:57.296000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-17576,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 11:54:13.421000+01:00 +Internet,case-6475,2011-05-10 00:00:00+02:00,General,2011-04-18 08:00:57.296000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-17574,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-07 12:52:53.268000+02:00 +Internet,case-6475,2011-05-10 00:00:00+02:00,General,2011-04-18 08:00:57.296000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-19522,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-07 13:03:02.315000+02:00 +Internet,case-6480,2011-05-10 00:00:00+02:00,General,2011-05-02 11:28:13.405000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-16488,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 13:10:19.436000+01:00 +Internet,case-6480,2011-05-10 00:00:00+02:00,General,2011-05-02 11:28:13.405000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-17588,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 13:10:40.834000+01:00 +Internet,case-6480,2011-05-10 00:00:00+02:00,General,2011-05-02 11:28:13.405000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-17593,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 13:11:00.180000+01:00 +Internet,case-6480,2011-05-10 00:00:00+02:00,General,2011-05-02 11:28:13.405000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-17594,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 13:11:11.821000+01:00 +Internet,case-6480,2011-05-10 00:00:00+02:00,General,2011-05-02 11:28:13.405000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-17589,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-13 09:10:48.963000+02:00 +Internet,case-6480,2011-05-10 00:00:00+02:00,General,2011-05-02 11:28:13.405000+02:00,2011-05-10 00:00:00.020000+02:00,,Resource11,2011-03-15 00:00:00.010000+01:00,task-20154,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-13 14:13:33.642000+02:00 +Internet,case-6495,2011-05-11 00:00:00+02:00,General,2011-03-31 15:24:59.444000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource02,2011-03-16 00:00:00.010000+01:00,task-16525,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-18 12:02:41.499000+01:00 +Internet,case-6495,2011-05-11 00:00:00+02:00,General,2011-03-31 15:24:59.444000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource02,2011-03-16 00:00:00.010000+01:00,task-16821,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-18 12:03:02.647000+01:00 +Internet,case-6495,2011-05-11 00:00:00+02:00,General,2011-03-31 15:24:59.444000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource02,2011-03-16 00:00:00.010000+01:00,task-16822,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-18 12:03:32.093000+01:00 +Internet,case-6495,2011-05-11 00:00:00+02:00,General,2011-03-31 15:24:59.444000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource02,2011-03-16 00:00:00.010000+01:00,task-16823,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-18 12:04:24.733000+01:00 +Internet,case-6495,2011-05-11 00:00:00+02:00,General,2011-03-31 15:24:59.444000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource02,2011-03-16 00:00:00.010000+01:00,task-16826,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-18 12:04:56.795000+01:00 +Internet,case-6495,2011-05-11 00:00:00+02:00,General,2011-03-31 15:24:59.444000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource02,2011-03-16 00:00:00.010000+01:00,task-16824,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-18 12:05:13.734000+01:00 +Internet,case-6496,2011-05-11 00:00:00+02:00,General,2011-04-07 10:39:01.540000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource05,2011-03-16 00:00:00.010000+01:00,task-16544,Confirmation of receipt,complete,EMPTY,Resource05,2011-03-24 14:20:30.457000+01:00 +Internet,case-6496,2011-05-11 00:00:00+02:00,General,2011-04-07 10:39:01.540000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource05,2011-03-16 00:00:00.010000+01:00,task-17638,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-03-24 14:20:48.034000+01:00 +Internet,case-6496,2011-05-11 00:00:00+02:00,General,2011-04-07 10:39:01.540000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource05,2011-03-16 00:00:00.010000+01:00,task-17639,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-03-28 10:43:34.600000+02:00 +Internet,case-6496,2011-05-11 00:00:00+02:00,General,2011-04-07 10:39:01.540000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource05,2011-03-16 00:00:00.010000+01:00,task-17640,T04 Determine confirmation of receipt,complete,EMPTY,Resource05,2011-03-28 10:43:48.234000+02:00 +Internet,case-6496,2011-05-11 00:00:00+02:00,General,2011-04-07 10:39:01.540000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource05,2011-03-16 00:00:00.010000+01:00,task-17999,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-03-28 10:44:07.141000+02:00 +Internet,case-6496,2011-05-11 00:00:00+02:00,General,2011-04-07 10:39:01.540000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource05,2011-03-16 00:00:00.010000+01:00,task-17998,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-03-28 10:44:25.200000+02:00 +Internet,case-6498,2011-06-22 01:06:40+02:00,General,2011-06-27 08:56:56.974000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource08,2011-03-16 01:06:40.010000+01:00,task-16561,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-24 13:42:52.644000+01:00 +Internet,case-6498,2011-06-22 01:06:40+02:00,General,2011-06-27 08:56:56.974000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource08,2011-03-16 01:06:40.010000+01:00,task-17612,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-24 13:43:13.769000+01:00 +Internet,case-6498,2011-06-22 01:06:40+02:00,General,2011-06-27 08:56:56.974000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource08,2011-03-16 01:06:40.010000+01:00,task-17614,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-24 14:10:38.337000+01:00 +Internet,case-6498,2011-06-22 01:06:40+02:00,General,2011-06-27 08:56:56.974000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource08,2011-03-16 01:06:40.010000+01:00,task-17613,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-24 14:13:19.441000+01:00 +Internet,case-6498,2011-06-22 01:06:40+02:00,General,2011-06-27 08:56:56.974000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource08,2011-03-16 01:06:40.010000+01:00,task-17624,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-24 14:13:34.978000+01:00 +Internet,case-6498,2011-06-22 01:06:40+02:00,General,2011-06-27 08:56:56.974000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource08,2011-03-16 01:06:40.010000+01:00,task-17621,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-24 14:44:46.861000+01:00 +Desk,case-6503,2011-05-02 00:00:00+02:00,Customer contact,2011-03-18 10:02:30.725000+01:00,2011-05-02 00:00:00.020000+02:00,,admin3,2011-03-07 00:00:00.010000+01:00,task-16589,Confirmation of receipt,complete,Group 1,admin2,2011-03-18 10:02:31.892000+01:00 +Desk,case-6504,2011-05-04 01:06:40+02:00,General,2011-04-29 09:44:59.052000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource06,2011-03-09 01:06:40.010000+01:00,task-16597,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-23 09:52:52.743000+01:00 +Desk,case-6504,2011-05-04 01:06:40+02:00,General,2011-04-29 09:44:59.052000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource06,2011-03-09 01:06:40.010000+01:00,task-17322,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-23 09:53:12.969000+01:00 +Desk,case-6504,2011-05-04 01:06:40+02:00,General,2011-04-29 09:44:59.052000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource06,2011-03-09 01:06:40.010000+01:00,task-17323,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-23 09:53:44.550000+01:00 +Desk,case-6504,2011-05-04 01:06:40+02:00,General,2011-04-29 09:44:59.052000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource06,2011-03-09 01:06:40.010000+01:00,task-17325,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-23 09:54:16.067000+01:00 +Desk,case-6504,2011-05-04 01:06:40+02:00,General,2011-04-29 09:44:59.052000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource06,2011-03-09 01:06:40.010000+01:00,task-17324,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-23 09:56:27.960000+01:00 +Desk,case-6504,2011-05-04 01:06:40+02:00,General,2011-04-29 09:44:59.052000+02:00,2011-05-04 01:06:40.020000+02:00,,Resource06,2011-03-09 01:06:40.010000+01:00,task-17332,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-23 16:14:39.678000+01:00 +Internet,case-6512,2011-05-11 00:00:00+02:00,General,2011-03-24 14:33:41.874000+01:00,2011-05-11 00:00:00.020000+02:00,,Resource06,2011-03-16 00:00:00.010000+01:00,task-16632,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-23 14:33:55.879000+01:00 +Internet,case-6512,2011-05-11 00:00:00+02:00,General,2011-03-24 14:33:41.874000+01:00,2011-05-11 00:00:00.020000+02:00,,Resource06,2011-03-16 00:00:00.010000+01:00,task-17399,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-23 14:34:16.761000+01:00 +Internet,case-6512,2011-05-11 00:00:00+02:00,General,2011-03-24 14:33:41.874000+01:00,2011-05-11 00:00:00.020000+02:00,,Resource06,2011-03-16 00:00:00.010000+01:00,task-17401,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-03-23 14:34:29.198000+01:00 +Internet,case-6512,2011-05-11 00:00:00+02:00,General,2011-03-24 14:33:41.874000+01:00,2011-05-11 00:00:00.020000+02:00,,Resource06,2011-03-16 00:00:00.010000+01:00,task-17402,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-03-23 14:34:39.081000+01:00 +Internet,case-6512,2011-05-11 00:00:00+02:00,General,2011-03-24 14:33:41.874000+01:00,2011-05-11 00:00:00.020000+02:00,,Resource06,2011-03-16 00:00:00.010000+01:00,task-17400,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-23 14:35:00.802000+01:00 +Internet,case-6512,2011-05-11 00:00:00+02:00,General,2011-03-24 14:33:41.874000+01:00,2011-05-11 00:00:00.020000+02:00,,Resource06,2011-03-16 00:00:00.010000+01:00,task-17403,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-23 14:35:31.122000+01:00 +Internet,case-6512,2011-05-11 00:00:00+02:00,General,2011-03-24 14:33:41.874000+01:00,2011-05-11 00:00:00.020000+02:00,,Resource06,2011-03-16 00:00:00.010000+01:00,task-17404,T11 Create document X request unlicensed,complete,Group 1,Resource06,2011-03-23 14:44:16.587000+01:00 +Internet,case-6512,2011-05-11 00:00:00+02:00,General,2011-03-24 14:33:41.874000+01:00,2011-05-11 00:00:00.020000+02:00,,Resource06,2011-03-16 00:00:00.010000+01:00,task-17408,T12 Check document X request unlicensed,complete,Group 4,Resource06,2011-03-23 14:44:27.756000+01:00 +Internet,case-6512,2011-05-11 00:00:00+02:00,General,2011-03-24 14:33:41.874000+01:00,2011-05-11 00:00:00.020000+02:00,,Resource06,2011-03-16 00:00:00.010000+01:00,task-17409,T14 Determine document X request unlicensed,complete,EMPTY,Resource10,2011-03-23 16:26:46.007000+01:00 +Internet,case-6512,2011-05-11 00:00:00+02:00,General,2011-03-24 14:33:41.874000+01:00,2011-05-11 00:00:00.020000+02:00,,Resource06,2011-03-16 00:00:00.010000+01:00,task-17455,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-03-24 14:33:41.749000+01:00 +Internet,case-6515,2011-04-22 00:00:00+02:00,General,2011-03-18 15:06:58.511000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16639,Confirmation of receipt,complete,Group 1,Resource04,2011-03-18 09:40:49.471000+01:00 +Internet,case-6515,2011-04-22 00:00:00+02:00,General,2011-03-18 15:06:58.511000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16713,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-18 09:41:01.981000+01:00 +Internet,case-6515,2011-04-22 00:00:00+02:00,General,2011-03-18 15:06:58.511000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16715,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-18 09:41:10.991000+01:00 +Internet,case-6515,2011-04-22 00:00:00+02:00,General,2011-03-18 15:06:58.511000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16716,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-03-18 09:41:21.216000+01:00 +Internet,case-6515,2011-04-22 00:00:00+02:00,General,2011-03-18 15:06:58.511000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16714,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-18 09:41:34.507000+01:00 +Internet,case-6515,2011-04-22 00:00:00+02:00,General,2011-03-18 15:06:58.511000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16717,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-18 09:41:51.715000+01:00 +Internet,case-6516,2011-06-21 01:06:40+02:00,General,2011-06-01 11:48:48.133000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource18,2011-03-16 01:06:40.010000+01:00,task-16640,Confirmation of receipt,complete,EMPTY,Resource18,2011-03-22 15:14:21.822000+01:00 +Internet,case-6516,2011-06-21 01:06:40+02:00,General,2011-06-01 11:48:48.133000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource18,2011-03-16 01:06:40.010000+01:00,task-17282,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-03-22 15:36:47.603000+01:00 +Internet,case-6516,2011-06-21 01:06:40+02:00,General,2011-06-01 11:48:48.133000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource18,2011-03-16 01:06:40.010000+01:00,task-17289,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-03-22 15:37:05.755000+01:00 +Internet,case-6516,2011-06-21 01:06:40+02:00,General,2011-06-01 11:48:48.133000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource18,2011-03-16 01:06:40.010000+01:00,task-17290,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-23 16:13:18.819000+01:00 +Internet,case-6516,2011-06-21 01:06:40+02:00,General,2011-06-01 11:48:48.133000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource18,2011-03-16 01:06:40.010000+01:00,task-17283,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-04-07 08:19:55.232000+02:00 +Internet,case-6516,2011-06-21 01:06:40+02:00,General,2011-06-01 11:48:48.133000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource18,2011-03-16 01:06:40.010000+01:00,task-19415,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-04-07 08:20:15.160000+02:00 +Internet,case-6517,2011-04-22 00:00:00+02:00,General,2011-03-18 15:44:27.843000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16643,Confirmation of receipt,complete,Group 1,Resource04,2011-03-18 11:02:01.540000+01:00 +Internet,case-6517,2011-04-22 00:00:00+02:00,General,2011-03-18 15:44:27.843000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16769,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-18 11:02:32.330000+01:00 +Internet,case-6517,2011-04-22 00:00:00+02:00,General,2011-03-18 15:44:27.843000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16771,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-03-18 11:02:43.261000+01:00 +Internet,case-6517,2011-04-22 00:00:00+02:00,General,2011-03-18 15:44:27.843000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16772,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-03-18 11:02:56.961000+01:00 +Internet,case-6517,2011-04-22 00:00:00+02:00,General,2011-03-18 15:44:27.843000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16770,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-18 11:03:07.477000+01:00 +Internet,case-6517,2011-04-22 00:00:00+02:00,General,2011-03-18 15:44:27.843000+01:00,2011-04-22 00:00:00.020000+02:00,,Resource04,2011-02-25 00:00:00.010000+01:00,task-16773,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-18 11:03:25.333000+01:00 +Internet,case-6537,2011-05-09 00:00:00+02:00,General,2011-05-10 12:24:24.005000+02:00,2011-05-09 00:00:00.020000+02:00,,admin1,2011-03-14 00:00:00.010000+01:00,task-16732,Confirmation of receipt,complete,Group 1,Resource25,2011-03-18 11:47:03.758000+01:00 +Internet,case-6537,2011-05-09 00:00:00+02:00,General,2011-05-10 12:24:24.005000+02:00,2011-05-09 00:00:00.020000+02:00,,admin1,2011-03-14 00:00:00.010000+01:00,task-16807,T02 Check confirmation of receipt,complete,EMPTY,Resource25,2011-03-18 11:47:58.309000+01:00 +Internet,case-6537,2011-05-09 00:00:00+02:00,General,2011-05-10 12:24:24.005000+02:00,2011-05-09 00:00:00.020000+02:00,,admin1,2011-03-14 00:00:00.010000+01:00,task-16808,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-03-18 11:53:15.898000+01:00 +Internet,case-6537,2011-05-09 00:00:00+02:00,General,2011-05-10 12:24:24.005000+02:00,2011-05-09 00:00:00.020000+02:00,,admin1,2011-03-14 00:00:00.010000+01:00,task-16812,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2011-03-18 11:53:41.940000+01:00 +Internet,case-6537,2011-05-09 00:00:00+02:00,General,2011-05-10 12:24:24.005000+02:00,2011-05-09 00:00:00.020000+02:00,,admin1,2011-03-14 00:00:00.010000+01:00,task-16809,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-03-18 12:33:16.444000+01:00 +Internet,case-6537,2011-05-09 00:00:00+02:00,General,2011-05-10 12:24:24.005000+02:00,2011-05-09 00:00:00.020000+02:00,,admin1,2011-03-14 00:00:00.010000+01:00,task-16836,T05 Print and send confirmation of receipt,complete,EMPTY,Resource25,2011-03-18 14:45:58.581000+01:00 +Internet,case-6538,2011-05-07 01:06:40+02:00,General,2011-03-31 13:56:51.700000+02:00,2011-05-07 01:06:40.020000+02:00,,Resource05,2011-03-12 01:06:40.010000+01:00,task-16744,Confirmation of receipt,complete,EMPTY,admin2,2011-03-31 13:56:52.639000+02:00 +Internet,case-6540,2011-05-02 01:06:40+02:00,General,2011-04-19 11:59:28.010000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource02,2011-03-07 01:06:40.010000+01:00,task-16777,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-25 09:51:00.887000+01:00 +Internet,case-6540,2011-05-02 01:06:40+02:00,General,2011-04-19 11:59:28.010000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource02,2011-03-07 01:06:40.010000+01:00,task-17794,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-25 09:51:20.204000+01:00 +Internet,case-6540,2011-05-02 01:06:40+02:00,General,2011-04-19 11:59:28.010000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource02,2011-03-07 01:06:40.010000+01:00,task-17796,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-25 09:51:40.344000+01:00 +Internet,case-6540,2011-05-02 01:06:40+02:00,General,2011-04-19 11:59:28.010000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource02,2011-03-07 01:06:40.010000+01:00,task-17797,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-25 09:53:04.506000+01:00 +Internet,case-6540,2011-05-02 01:06:40+02:00,General,2011-04-19 11:59:28.010000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource02,2011-03-07 01:06:40.010000+01:00,task-17795,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-25 09:55:17.819000+01:00 +Internet,case-6540,2011-05-02 01:06:40+02:00,General,2011-04-19 11:59:28.010000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource02,2011-03-07 01:06:40.010000+01:00,task-17798,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-25 09:56:13.884000+01:00 +Desk,case-6541,2011-04-20 01:06:40+02:00,General,2011-05-09 16:33:35.631000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource14,2011-02-23 01:06:40.010000+01:00,task-16805,Confirmation of receipt,complete,EMPTY,Resource14,2011-03-29 13:06:09.671000+02:00 +Desk,case-6541,2011-04-20 01:06:40+02:00,General,2011-05-09 16:33:35.631000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource14,2011-02-23 01:06:40.010000+01:00,task-18274,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-03-29 14:23:17.916000+02:00 +Desk,case-6541,2011-04-20 01:06:40+02:00,General,2011-05-09 16:33:35.631000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource14,2011-02-23 01:06:40.010000+01:00,task-18292,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-03-29 14:41:16.385000+02:00 +Desk,case-6541,2011-04-20 01:06:40+02:00,General,2011-05-09 16:33:35.631000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource14,2011-02-23 01:06:40.010000+01:00,task-18293,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-03-29 14:41:33.113000+02:00 +Desk,case-6541,2011-04-20 01:06:40+02:00,General,2011-05-09 16:33:35.631000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource14,2011-02-23 01:06:40.010000+01:00,task-18275,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-03 08:38:10.260000+02:00 +Desk,case-6541,2011-04-20 01:06:40+02:00,General,2011-05-09 16:33:35.631000+02:00,2011-04-20 01:06:40.020000+02:00,,Resource14,2011-02-23 01:06:40.010000+01:00,task-23299,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-03 08:38:30.728000+02:00 +Desk,case-6542,2011-05-11 00:00:00+02:00,General,2011-05-03 07:05:55.556000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-16806,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 13:17:07.257000+01:00 +Desk,case-6542,2011-05-11 00:00:00+02:00,General,2011-05-03 07:05:55.556000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-17595,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 13:17:27.079000+01:00 +Desk,case-6542,2011-05-11 00:00:00+02:00,General,2011-05-03 07:05:55.556000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-17597,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 13:17:46.211000+01:00 +Desk,case-6542,2011-05-11 00:00:00+02:00,General,2011-05-03 07:05:55.556000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-17598,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 13:18:15.340000+01:00 +Desk,case-6542,2011-05-11 00:00:00+02:00,General,2011-05-03 07:05:55.556000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-17596,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-13 14:30:33.753000+02:00 +Desk,case-6542,2011-05-11 00:00:00+02:00,General,2011-05-03 07:05:55.556000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-20307,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-13 14:31:45.074000+02:00 +Post,case-6544,2011-05-12 00:00:00+02:00,General,2011-05-03 07:17:38.353000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-16844,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 13:30:23.768000+01:00 +Post,case-6544,2011-05-12 00:00:00+02:00,General,2011-05-03 07:17:38.353000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-17599,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 13:30:47.152000+01:00 +Post,case-6544,2011-05-12 00:00:00+02:00,General,2011-05-03 07:17:38.353000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-17601,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 13:33:53.495000+01:00 +Post,case-6544,2011-05-12 00:00:00+02:00,General,2011-05-03 07:17:38.353000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-17602,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 13:34:04.563000+01:00 +Post,case-6544,2011-05-12 00:00:00+02:00,General,2011-05-03 07:17:38.353000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-17600,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 11:22:45.588000+02:00 +Post,case-6544,2011-05-12 00:00:00+02:00,General,2011-05-03 07:17:38.353000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-20456,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 11:23:15.448000+02:00 +Desk,case-6545,2011-05-12 00:00:00+02:00,General,2011-03-30 12:29:45.678000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource06,2011-03-17 00:00:00.010000+01:00,task-16845,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-23 15:34:29.285000+01:00 +Desk,case-6545,2011-05-12 00:00:00+02:00,General,2011-03-30 12:29:45.678000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource06,2011-03-17 00:00:00.010000+01:00,task-17421,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-23 15:34:44.560000+01:00 +Desk,case-6545,2011-05-12 00:00:00+02:00,General,2011-03-30 12:29:45.678000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource06,2011-03-17 00:00:00.010000+01:00,task-17423,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-03-23 15:34:56.770000+01:00 +Desk,case-6545,2011-05-12 00:00:00+02:00,General,2011-03-30 12:29:45.678000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource06,2011-03-17 00:00:00.010000+01:00,task-17424,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-03-23 15:35:06.274000+01:00 +Desk,case-6545,2011-05-12 00:00:00+02:00,General,2011-03-30 12:29:45.678000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource06,2011-03-17 00:00:00.010000+01:00,task-17422,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-23 15:35:18.651000+01:00 +Desk,case-6545,2011-05-12 00:00:00+02:00,General,2011-03-30 12:29:45.678000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource06,2011-03-17 00:00:00.010000+01:00,task-17425,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-23 15:35:31.546000+01:00 +Internet,case-6585,2011-05-12 00:00:00+02:00,General,2011-05-02 15:08:33.826000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-16930,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 13:37:20.727000+01:00 +Internet,case-6585,2011-05-12 00:00:00+02:00,General,2011-05-02 15:08:33.826000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-17603,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 13:37:38.231000+01:00 +Internet,case-6585,2011-05-12 00:00:00+02:00,General,2011-05-02 15:08:33.826000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-17605,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 13:37:50.901000+01:00 +Internet,case-6585,2011-05-12 00:00:00+02:00,General,2011-05-02 15:08:33.826000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-17606,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 13:38:07.839000+01:00 +Internet,case-6585,2011-05-12 00:00:00+02:00,General,2011-05-02 15:08:33.826000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-17604,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 11:31:58.267000+02:00 +Internet,case-6585,2011-05-12 00:00:00+02:00,General,2011-05-02 15:08:33.826000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource11,2011-03-17 00:00:00.010000+01:00,task-20472,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 11:32:18.890000+02:00 +Internet,case-6606,2011-05-16 01:06:40+02:00,General,2011-04-28 10:45:13.017000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource08,2011-03-21 01:06:40.010000+01:00,task-17123,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-23 14:22:44.682000+01:00 +Internet,case-6606,2011-05-16 01:06:40+02:00,General,2011-04-28 10:45:13.017000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource08,2011-03-21 01:06:40.010000+01:00,task-17396,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-23 14:40:38.067000+01:00 +Internet,case-6606,2011-05-16 01:06:40+02:00,General,2011-04-28 10:45:13.017000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource08,2011-03-21 01:06:40.010000+01:00,task-17397,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-23 14:40:54.342000+01:00 +Internet,case-6606,2011-05-16 01:06:40+02:00,General,2011-04-28 10:45:13.017000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource08,2011-03-21 01:06:40.010000+01:00,task-17407,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-23 14:49:38.630000+01:00 +Internet,case-6606,2011-05-16 01:06:40+02:00,General,2011-04-28 10:45:13.017000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource08,2011-03-21 01:06:40.010000+01:00,task-17406,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-24 08:35:34.920000+01:00 +Internet,case-6606,2011-05-16 01:06:40+02:00,General,2011-04-28 10:45:13.017000+02:00,2011-05-16 01:06:40.020000+02:00,,Resource08,2011-03-21 01:06:40.010000+01:00,task-17470,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-24 14:37:52.725000+01:00 +Internet,case-6607,2011-05-21 01:06:40+02:00,General,2011-05-23 15:03:05.403000+02:00,2011-05-21 01:06:40.020000+02:00,,Resource06,2011-03-20 01:06:40.010000+01:00,task-17132,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-30 10:52:56.391000+02:00 +Internet,case-6607,2011-05-21 01:06:40+02:00,General,2011-05-23 15:03:05.403000+02:00,2011-05-21 01:06:40.020000+02:00,,Resource06,2011-03-20 01:06:40.010000+01:00,task-18420,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-30 10:53:12.829000+02:00 +Internet,case-6607,2011-05-21 01:06:40+02:00,General,2011-05-23 15:03:05.403000+02:00,2011-05-21 01:06:40.020000+02:00,,Resource06,2011-03-20 01:06:40.010000+01:00,task-18421,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-30 10:53:25.969000+02:00 +Internet,case-6607,2011-05-21 01:06:40+02:00,General,2011-05-23 15:03:05.403000+02:00,2011-05-21 01:06:40.020000+02:00,,Resource06,2011-03-20 01:06:40.010000+01:00,task-18423,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-30 10:53:41.794000+02:00 +Internet,case-6607,2011-05-21 01:06:40+02:00,General,2011-05-23 15:03:05.403000+02:00,2011-05-21 01:06:40.020000+02:00,,Resource06,2011-03-20 01:06:40.010000+01:00,task-18422,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-30 11:31:18.653000+02:00 +Internet,case-6607,2011-05-21 01:06:40+02:00,General,2011-05-23 15:03:05.403000+02:00,2011-05-21 01:06:40.020000+02:00,,Resource06,2011-03-20 01:06:40.010000+01:00,task-18462,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:06:40.828000+02:00 +Internet,case-6610,2011-05-15 00:00:00+02:00,General,2011-05-03 07:20:58.757000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource11,2011-03-20 00:00:00.010000+01:00,task-17179,Confirmation of receipt,complete,EMPTY,Resource01,2011-03-24 13:42:14.825000+01:00 +Internet,case-6610,2011-05-15 00:00:00+02:00,General,2011-05-03 07:20:58.757000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource11,2011-03-20 00:00:00.010000+01:00,task-17608,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-03-24 13:42:27.947000+01:00 +Internet,case-6610,2011-05-15 00:00:00+02:00,General,2011-05-03 07:20:58.757000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource11,2011-03-20 00:00:00.010000+01:00,task-17610,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-03-24 13:42:41.839000+01:00 +Internet,case-6610,2011-05-15 00:00:00+02:00,General,2011-05-03 07:20:58.757000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource11,2011-03-20 00:00:00.010000+01:00,task-17611,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-03-24 13:42:54.223000+01:00 +Internet,case-6610,2011-05-15 00:00:00+02:00,General,2011-05-03 07:20:58.757000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource11,2011-03-20 00:00:00.010000+01:00,task-17609,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 11:42:31.449000+02:00 +Internet,case-6610,2011-05-15 00:00:00+02:00,General,2011-05-03 07:20:58.757000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource11,2011-03-20 00:00:00.010000+01:00,task-20490,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 11:42:48.954000+02:00 +Internet,case-6612,2011-05-17 01:06:40+02:00,General,2011-05-12 14:00:01.208000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource08,2011-03-22 01:06:40.010000+01:00,task-17186,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-23 11:25:25.751000+01:00 +Internet,case-6612,2011-05-17 01:06:40+02:00,General,2011-05-12 14:00:01.208000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource08,2011-03-22 01:06:40.010000+01:00,task-17364,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-23 11:26:24.171000+01:00 +Internet,case-6612,2011-05-17 01:06:40+02:00,General,2011-05-12 14:00:01.208000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource08,2011-03-22 01:06:40.010000+01:00,task-17365,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-23 11:42:29.855000+01:00 +Internet,case-6612,2011-05-17 01:06:40+02:00,General,2011-05-12 14:00:01.208000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource08,2011-03-22 01:06:40.010000+01:00,task-17370,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-23 11:42:49.961000+01:00 +Internet,case-6612,2011-05-17 01:06:40+02:00,General,2011-05-12 14:00:01.208000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource08,2011-03-22 01:06:40.010000+01:00,task-17366,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-24 08:32:34.198000+01:00 +Internet,case-6612,2011-05-17 01:06:40+02:00,General,2011-05-12 14:00:01.208000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource08,2011-03-22 01:06:40.010000+01:00,task-17466,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-24 14:35:40.225000+01:00 +Internet,case-6617,2011-04-28 01:06:40+02:00,General,2011-04-28 15:44:56.661000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource17,2011-03-03 01:06:40.010000+01:00,task-17200,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-28 10:32:32.241000+02:00 +Internet,case-6617,2011-04-28 01:06:40+02:00,General,2011-04-28 15:44:56.661000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource17,2011-03-03 01:06:40.010000+01:00,task-22517,T02 Check confirmation of receipt,complete,Group 4,Resource17,2011-04-28 10:39:57.087000+02:00 +Internet,case-6617,2011-04-28 01:06:40+02:00,General,2011-04-28 15:44:56.661000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource17,2011-03-03 01:06:40.010000+01:00,task-22521,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-04-28 10:40:08.486000+02:00 +Internet,case-6617,2011-04-28 01:06:40+02:00,General,2011-04-28 15:44:56.661000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource17,2011-03-03 01:06:40.010000+01:00,task-22522,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-04-28 10:40:18.582000+02:00 +Internet,case-6617,2011-04-28 01:06:40+02:00,General,2011-04-28 15:44:56.661000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource17,2011-03-03 01:06:40.010000+01:00,task-22518,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-28 10:40:28.675000+02:00 +Internet,case-6617,2011-04-28 01:06:40+02:00,General,2011-04-28 15:44:56.661000+02:00,2011-04-28 01:06:40.020000+02:00,,Resource17,2011-03-03 01:06:40.010000+01:00,task-22523,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-28 10:40:46.481000+02:00 +Internet,case-6622,2011-05-17 00:00:00+02:00,General,2011-04-13 14:48:57.628000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource18,2011-03-22 00:00:00.010000+01:00,task-17284,Confirmation of receipt,complete,EMPTY,Resource18,2011-03-24 08:52:35.965000+01:00 +Internet,case-6622,2011-05-17 00:00:00+02:00,General,2011-04-13 14:48:57.628000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource18,2011-03-22 00:00:00.010000+01:00,task-17478,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-03-24 08:54:04.077000+01:00 +Internet,case-6622,2011-05-17 00:00:00+02:00,General,2011-04-13 14:48:57.628000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource18,2011-03-22 00:00:00.010000+01:00,task-17482,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-03-24 08:58:15.209000+01:00 +Internet,case-6622,2011-05-17 00:00:00+02:00,General,2011-04-13 14:48:57.628000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource18,2011-03-22 00:00:00.010000+01:00,task-17483,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-03-24 08:58:31.073000+01:00 +Internet,case-6622,2011-05-17 00:00:00+02:00,General,2011-04-13 14:48:57.628000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource18,2011-03-22 00:00:00.010000+01:00,task-17479,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-03-24 08:58:52.772000+01:00 +Internet,case-6622,2011-05-17 00:00:00+02:00,General,2011-04-13 14:48:57.628000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource18,2011-03-22 00:00:00.010000+01:00,task-17484,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-03-24 08:59:14.590000+01:00 +Post,case-6631,2011-05-18 01:06:40+02:00,General,2011-05-16 14:11:42.356000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-03-02 01:06:40.010000+01:00,task-17362,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-28 15:11:07.890000+02:00 +Post,case-6631,2011-05-18 01:06:40+02:00,General,2011-05-16 14:11:42.356000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-03-02 01:06:40.010000+01:00,task-18092,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-28 15:11:24.133000+02:00 +Post,case-6631,2011-05-18 01:06:40+02:00,General,2011-05-16 14:11:42.356000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-03-02 01:06:40.010000+01:00,task-18093,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-28 15:40:39.470000+02:00 +Post,case-6631,2011-05-18 01:06:40+02:00,General,2011-05-16 14:11:42.356000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-03-02 01:06:40.010000+01:00,task-18133,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-28 15:40:53.816000+02:00 +Post,case-6631,2011-05-18 01:06:40+02:00,General,2011-05-16 14:11:42.356000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-03-02 01:06:40.010000+01:00,task-18094,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-30 10:29:33.636000+02:00 +Post,case-6631,2011-05-18 01:06:40+02:00,General,2011-05-16 14:11:42.356000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-03-02 01:06:40.010000+01:00,task-18399,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:18:05.229000+02:00 +Post,case-6644,2011-04-27 00:00:00+02:00,General,2011-04-04 00:00:00.020000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource17,2011-03-02 00:00:00.010000+01:00,task-17476,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-01 09:58:07.735000+02:00 +Post,case-6644,2011-04-27 00:00:00+02:00,General,2011-04-04 00:00:00.020000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource17,2011-03-02 00:00:00.010000+01:00,task-18787,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-04-01 09:59:34.059000+02:00 +Post,case-6644,2011-04-27 00:00:00+02:00,General,2011-04-04 00:00:00.020000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource17,2011-03-02 00:00:00.010000+01:00,task-18793,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-04-01 10:00:50.028000+02:00 +Post,case-6644,2011-04-27 00:00:00+02:00,General,2011-04-04 00:00:00.020000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource17,2011-03-02 00:00:00.010000+01:00,task-18788,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-04 14:18:57.120000+02:00 +Post,case-6644,2011-04-27 00:00:00+02:00,General,2011-04-04 00:00:00.020000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource17,2011-03-02 00:00:00.010000+01:00,task-18964,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-04 14:19:19.931000+02:00 +Post,case-6644,2011-04-27 00:00:00+02:00,General,2011-04-04 00:00:00.020000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource17,2011-03-02 00:00:00.010000+01:00,task-18794,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 15:13:41.894000+02:00 +Post,case-6644,2011-04-27 00:00:00+02:00,General,2011-04-04 00:00:00.020000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource17,2011-03-02 00:00:00.010000+01:00,task-18965,T11 Create document X request unlicensed,complete,Group 1,admin2,2011-04-21 10:15:37.535000+02:00 +Post,case-6645,2011-04-27 00:00:00+02:00,General,2011-04-26 15:11:59.286000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-17514,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-28 14:13:54.187000+02:00 +Post,case-6645,2011-04-27 00:00:00+02:00,General,2011-04-26 15:11:59.286000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-18071,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-03-28 14:14:38.609000+02:00 +Post,case-6645,2011-04-27 00:00:00+02:00,General,2011-04-26 15:11:59.286000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-18072,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-03-28 14:15:05.202000+02:00 +Post,case-6645,2011-04-27 00:00:00+02:00,General,2011-04-26 15:11:59.286000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-18070,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:37:26.575000+02:00 +Post,case-6645,2011-04-27 00:00:00+02:00,General,2011-04-26 15:11:59.286000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-18559,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-31 15:20:45.078000+02:00 +Post,case-6645,2011-04-27 00:00:00+02:00,General,2011-04-26 15:11:59.286000+02:00,2011-04-27 00:00:00.020000+02:00,,Resource11,2011-03-02 00:00:00.010000+01:00,task-18716,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 14:06:51.934000+02:00 +Post,case-6646,2011-05-02 00:00:00+02:00,General,2011-05-02 14:11:47.699000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-17520,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-29 10:48:24.971000+02:00 +Post,case-6646,2011-05-02 00:00:00+02:00,General,2011-05-02 14:11:47.699000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-18206,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-29 10:48:39.665000+02:00 +Post,case-6646,2011-05-02 00:00:00+02:00,General,2011-05-02 14:11:47.699000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-18208,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-29 10:48:53.630000+02:00 +Post,case-6646,2011-05-02 00:00:00+02:00,General,2011-05-02 14:11:47.699000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-18209,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-29 10:49:09.034000+02:00 +Post,case-6646,2011-05-02 00:00:00+02:00,General,2011-05-02 14:11:47.699000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-18207,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-29 12:18:21.237000+02:00 +Post,case-6646,2011-05-02 00:00:00+02:00,General,2011-05-02 14:11:47.699000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-18254,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-29 12:23:43.362000+02:00 +Post,case-6648,2011-05-02 00:00:00+02:00,General,2011-05-02 14:19:56.484000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-17568,Confirmation of receipt,complete,EMPTY,Resource02,2011-03-29 11:19:26.058000+02:00 +Post,case-6648,2011-05-02 00:00:00+02:00,General,2011-05-02 14:19:56.484000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-18214,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-03-29 11:45:37.188000+02:00 +Post,case-6648,2011-05-02 00:00:00+02:00,General,2011-05-02 14:19:56.484000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-18234,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-03-29 11:45:49.119000+02:00 +Post,case-6648,2011-05-02 00:00:00+02:00,General,2011-05-02 14:19:56.484000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-18235,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-03-29 11:46:00.654000+02:00 +Post,case-6648,2011-05-02 00:00:00+02:00,General,2011-05-02 14:19:56.484000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-18215,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-03-29 11:46:21.883000+02:00 +Post,case-6648,2011-05-02 00:00:00+02:00,General,2011-05-02 14:19:56.484000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource02,2011-03-07 00:00:00.010000+01:00,task-18236,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-03-29 11:46:40.975000+02:00 +Post,case-6649,2011-05-03 00:00:00+02:00,General,2011-05-19 15:31:20.458000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource11,2011-03-08 00:00:00.010000+01:00,task-17580,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-28 14:57:22.374000+02:00 +Post,case-6649,2011-05-03 00:00:00+02:00,General,2011-05-19 15:31:20.458000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource11,2011-03-08 00:00:00.010000+01:00,task-18087,T02 Check confirmation of receipt,complete,EMPTY,Resource32,2011-03-31 15:02:37.843000+02:00 +Post,case-6649,2011-05-03 00:00:00+02:00,General,2011-05-19 15:31:20.458000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource11,2011-03-08 00:00:00.010000+01:00,task-18695,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 15:46:16.205000+02:00 +Post,case-6649,2011-05-03 00:00:00+02:00,General,2011-05-19 15:31:20.458000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource11,2011-03-08 00:00:00.010000+01:00,task-18728,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 14:30:46.310000+02:00 +Post,case-6649,2011-05-03 00:00:00+02:00,General,2011-05-19 15:31:20.458000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource11,2011-03-08 00:00:00.010000+01:00,task-18088,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-05-12 14:58:44.794000+02:00 +Post,case-6649,2011-05-03 00:00:00+02:00,General,2011-05-19 15:31:20.458000+02:00,2011-05-03 00:00:00.020000+02:00,,Resource11,2011-03-08 00:00:00.010000+01:00,task-24761,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-05-12 15:00:55.063000+02:00 +Post,case-6650,2011-05-05 00:00:00+02:00,General,2011-05-03 11:50:19.323000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource06,2011-03-10 00:00:00.010000+01:00,task-17607,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-12 10:20:59.394000+02:00 +Post,case-6650,2011-05-05 00:00:00+02:00,General,2011-05-03 11:50:19.323000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource06,2011-03-10 00:00:00.010000+01:00,task-19964,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-12 10:21:19.864000+02:00 +Post,case-6650,2011-05-05 00:00:00+02:00,General,2011-05-03 11:50:19.323000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource06,2011-03-10 00:00:00.010000+01:00,task-19966,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-12 10:21:32.123000+02:00 +Post,case-6650,2011-05-05 00:00:00+02:00,General,2011-05-03 11:50:19.323000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource06,2011-03-10 00:00:00.010000+01:00,task-19967,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-04-12 10:21:44.216000+02:00 +Post,case-6650,2011-05-05 00:00:00+02:00,General,2011-05-03 11:50:19.323000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource06,2011-03-10 00:00:00.010000+01:00,task-19965,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-12 10:21:56.804000+02:00 +Post,case-6650,2011-05-05 00:00:00+02:00,General,2011-05-03 11:50:19.323000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource06,2011-03-10 00:00:00.010000+01:00,task-19968,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-12 10:22:29.313000+02:00 +Post,case-6653,2011-05-06 00:00:00+02:00,General,2011-04-29 11:29:43.730000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource06,2011-03-11 00:00:00.010000+01:00,task-17660,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-29 10:11:42.068000+02:00 +Post,case-6653,2011-05-06 00:00:00+02:00,General,2011-04-29 11:29:43.730000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource06,2011-03-11 00:00:00.010000+01:00,task-18181,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-29 10:11:56.752000+02:00 +Post,case-6653,2011-05-06 00:00:00+02:00,General,2011-04-29 11:29:43.730000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource06,2011-03-11 00:00:00.010000+01:00,task-18182,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-29 10:12:14.032000+02:00 +Post,case-6653,2011-05-06 00:00:00+02:00,General,2011-04-29 11:29:43.730000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource06,2011-03-11 00:00:00.010000+01:00,task-18185,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-29 10:12:29.919000+02:00 +Post,case-6653,2011-05-06 00:00:00+02:00,General,2011-04-29 11:29:43.730000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource06,2011-03-11 00:00:00.010000+01:00,task-18184,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-30 10:37:24.914000+02:00 +Post,case-6653,2011-05-06 00:00:00+02:00,General,2011-04-29 11:29:43.730000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource06,2011-03-11 00:00:00.010000+01:00,task-18402,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 08:47:54.232000+02:00 +Post,case-6654,2011-05-06 00:00:00+02:00,General,2011-05-02 09:54:01.913000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource11,2011-03-11 00:00:00.010000+01:00,task-17712,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-29 07:44:33.058000+02:00 +Post,case-6654,2011-05-06 00:00:00+02:00,General,2011-05-02 09:54:01.913000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource11,2011-03-11 00:00:00.010000+01:00,task-18158,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:51:03.267000+02:00 +Post,case-6654,2011-05-06 00:00:00+02:00,General,2011-05-02 09:54:01.913000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource11,2011-03-11 00:00:00.010000+01:00,task-18572,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-03-31 08:51:16.749000+02:00 +Post,case-6654,2011-05-06 00:00:00+02:00,General,2011-05-02 09:54:01.913000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource11,2011-03-11 00:00:00.010000+01:00,task-18573,T05 Print and send confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 09:30:44.475000+02:00 +Post,case-6654,2011-05-06 00:00:00+02:00,General,2011-05-02 09:54:01.913000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource11,2011-03-11 00:00:00.010000+01:00,task-18159,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 09:30:58.759000+02:00 +Post,case-6654,2011-05-06 00:00:00+02:00,General,2011-05-02 09:54:01.913000+02:00,2011-05-06 00:00:00.020000+02:00,,Resource11,2011-03-11 00:00:00.010000+01:00,task-20367,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 09:34:36.926000+02:00 +Internet,case-6655,2011-05-01 01:06:40+02:00,Experts,2011-04-28 00:00:00.020000+02:00,2011-04-24 01:06:40.020000+02:00,,Resource06,2011-02-27 01:06:40.010000+01:00,task-17734,Confirmation of receipt,complete,EMPTY,Resource06,2011-03-25 10:08:19.522000+01:00 +Internet,case-6655,2011-05-01 01:06:40+02:00,Experts,2011-04-28 00:00:00.020000+02:00,2011-04-24 01:06:40.020000+02:00,,Resource06,2011-02-27 01:06:40.010000+01:00,task-17802,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-03-25 10:09:10.583000+01:00 +Internet,case-6655,2011-05-01 01:06:40+02:00,Experts,2011-04-28 00:00:00.020000+02:00,2011-04-24 01:06:40.020000+02:00,,Resource06,2011-02-27 01:06:40.010000+01:00,task-17804,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-03-25 10:11:46.960000+01:00 +Internet,case-6655,2011-05-01 01:06:40+02:00,Experts,2011-04-28 00:00:00.020000+02:00,2011-04-24 01:06:40.020000+02:00,,Resource06,2011-02-27 01:06:40.010000+01:00,task-17806,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-03-25 10:14:25.646000+01:00 +Internet,case-6655,2011-05-01 01:06:40+02:00,Experts,2011-04-28 00:00:00.020000+02:00,2011-04-24 01:06:40.020000+02:00,,Resource06,2011-02-27 01:06:40.010000+01:00,task-17805,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-25 12:09:20.531000+01:00 +Internet,case-6655,2011-05-01 01:06:40+02:00,Experts,2011-04-28 00:00:00.020000+02:00,2011-04-24 01:06:40.020000+02:00,,Resource06,2011-02-27 01:06:40.010000+01:00,task-17855,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-29 16:09:09.097000+02:00 +Post,case-6662,2011-05-30 01:06:40+02:00,General,2011-05-27 13:03:53.522000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource15,2011-03-25 01:06:40.010000+01:00,task-17778,Confirmation of receipt,complete,EMPTY,Resource15,2011-03-29 10:12:33.993000+02:00 +Post,case-6662,2011-05-30 01:06:40+02:00,General,2011-05-27 13:03:53.522000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource15,2011-03-25 01:06:40.010000+01:00,task-18187,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-03-29 10:13:22.020000+02:00 +Post,case-6662,2011-05-30 01:06:40+02:00,General,2011-05-27 13:03:53.522000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource15,2011-03-25 01:06:40.010000+01:00,task-18191,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-03-29 10:13:40.066000+02:00 +Post,case-6662,2011-05-30 01:06:40+02:00,General,2011-05-27 13:03:53.522000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource15,2011-03-25 01:06:40.010000+01:00,task-18188,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-03-29 10:22:25.572000+02:00 +Post,case-6662,2011-05-30 01:06:40+02:00,General,2011-05-27 13:03:53.522000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource15,2011-03-25 01:06:40.010000+01:00,task-18198,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-03-29 10:29:44.221000+02:00 +Post,case-6662,2011-05-30 01:06:40+02:00,General,2011-05-27 13:03:53.522000+02:00,2011-05-30 01:06:40.020000+02:00,,Resource15,2011-03-25 01:06:40.010000+01:00,task-18192,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-29 15:56:57.431000+02:00 +Post,case-6665,2011-05-05 00:00:00+02:00,General,2011-05-02 09:35:12.891000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-17793,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-29 07:20:06.180000+02:00 +Post,case-6665,2011-05-05 00:00:00+02:00,General,2011-05-02 09:35:12.891000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-18156,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:49:06.478000+02:00 +Post,case-6665,2011-05-05 00:00:00+02:00,General,2011-05-02 09:35:12.891000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-18569,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-03-31 08:49:20.888000+02:00 +Post,case-6665,2011-05-05 00:00:00+02:00,General,2011-05-02 09:35:12.891000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-18570,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:21:45.393000+02:00 +Post,case-6665,2011-05-05 00:00:00+02:00,General,2011-05-02 09:35:12.891000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-18157,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 09:46:10.761000+02:00 +Post,case-6665,2011-05-05 00:00:00+02:00,General,2011-05-02 09:35:12.891000+02:00,2011-05-05 00:00:00.020000+02:00,,Resource11,2011-03-10 00:00:00.010000+01:00,task-20383,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 09:47:40.478000+02:00 +Post,case-6667,2011-05-11 00:00:00+02:00,General,2011-05-02 15:30:05.555000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-17803,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-29 08:34:24.689000+02:00 +Post,case-6667,2011-05-11 00:00:00+02:00,General,2011-05-02 15:30:05.555000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-18162,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:53:26.864000+02:00 +Post,case-6667,2011-05-11 00:00:00+02:00,General,2011-05-02 15:30:05.555000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-18575,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-03-31 08:54:32.497000+02:00 +Post,case-6667,2011-05-11 00:00:00+02:00,General,2011-05-02 15:30:05.555000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-18576,T05 Print and send confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 10:58:15.963000+02:00 +Post,case-6667,2011-05-11 00:00:00+02:00,General,2011-05-02 15:30:05.555000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-18163,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 10:58:26.111000+02:00 +Post,case-6667,2011-05-11 00:00:00+02:00,General,2011-05-02 15:30:05.555000+02:00,2011-05-11 00:00:00.020000+02:00,,Resource11,2011-03-16 00:00:00.010000+01:00,task-20437,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 11:11:56.344000+02:00 +Post,case-6668,2011-06-22 01:06:40+02:00,General,2011-06-01 10:43:32.531000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource04,2011-03-16 01:06:40.010000+01:00,task-17819,Confirmation of receipt,complete,EMPTY,Resource04,2011-04-01 09:19:25.794000+02:00 +Post,case-6668,2011-06-22 01:06:40+02:00,General,2011-06-01 10:43:32.531000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource04,2011-03-16 01:06:40.010000+01:00,task-18763,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-04-01 09:19:41.913000+02:00 +Post,case-6668,2011-06-22 01:06:40+02:00,General,2011-06-01 10:43:32.531000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource04,2011-03-16 01:06:40.010000+01:00,task-18764,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-04-01 09:20:07.958000+02:00 +Post,case-6668,2011-06-22 01:06:40+02:00,General,2011-06-01 10:43:32.531000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource04,2011-03-16 01:06:40.010000+01:00,task-18766,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-04-01 09:20:27.801000+02:00 +Post,case-6668,2011-06-22 01:06:40+02:00,General,2011-06-01 10:43:32.531000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource04,2011-03-16 01:06:40.010000+01:00,task-18765,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-01 09:41:17.414000+02:00 +Post,case-6668,2011-06-22 01:06:40+02:00,General,2011-06-01 10:43:32.531000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource04,2011-03-16 01:06:40.010000+01:00,task-18779,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 15:11:49.127000+02:00 +Post,case-6671,2011-05-17 00:00:00+02:00,General,2011-07-26 14:14:27.386000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource09,2011-03-22 00:00:00.010000+01:00,task-17842,Confirmation of receipt,complete,EMPTY,Resource09,2011-07-11 12:24:17.317000+02:00 +Post,case-6671,2011-05-17 00:00:00+02:00,General,2011-07-26 14:14:27.386000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource09,2011-03-22 00:00:00.010000+01:00,task-31579,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-11 12:24:42.991000+02:00 +Post,case-6671,2011-05-17 00:00:00+02:00,General,2011-07-26 14:14:27.386000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource09,2011-03-22 00:00:00.010000+01:00,task-31581,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-11 12:25:09.516000+02:00 +Post,case-6671,2011-05-17 00:00:00+02:00,General,2011-07-26 14:14:27.386000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource09,2011-03-22 00:00:00.010000+01:00,task-31582,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-11 12:25:31.803000+02:00 +Post,case-6671,2011-05-17 00:00:00+02:00,General,2011-07-26 14:14:27.386000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource09,2011-03-22 00:00:00.010000+01:00,task-31580,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-11 12:25:56.513000+02:00 +Post,case-6671,2011-05-17 00:00:00+02:00,General,2011-07-26 14:14:27.386000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource09,2011-03-22 00:00:00.010000+01:00,task-31583,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-11 12:26:30.092000+02:00 +Post,case-6672,2011-05-02 00:00:00+02:00,General,2011-05-11 15:19:21.594000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource22,2011-03-07 00:00:00.010000+01:00,task-17862,Confirmation of receipt,complete,EMPTY,Resource22,2011-03-31 15:46:08.599000+02:00 +Post,case-6672,2011-05-02 00:00:00+02:00,General,2011-05-11 15:19:21.594000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource22,2011-03-07 00:00:00.010000+01:00,task-18726,T02 Check confirmation of receipt,complete,EMPTY,Resource22,2011-03-31 15:47:53.750000+02:00 +Post,case-6672,2011-05-02 00:00:00+02:00,General,2011-05-11 15:19:21.594000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource22,2011-03-07 00:00:00.010000+01:00,task-18727,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-03-31 15:49:45.086000+02:00 +Post,case-6672,2011-05-02 00:00:00+02:00,General,2011-05-11 15:19:21.594000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource22,2011-03-07 00:00:00.010000+01:00,task-18731,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-03-31 15:50:06.604000+02:00 +Post,case-6672,2011-05-02 00:00:00+02:00,General,2011-05-11 15:19:21.594000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource22,2011-03-07 00:00:00.010000+01:00,task-18730,T04 Determine confirmation of receipt,complete,EMPTY,Resource22,2011-04-06 14:34:52.128000+02:00 +Post,case-6672,2011-05-02 00:00:00+02:00,General,2011-05-11 15:19:21.594000+02:00,2011-05-02 00:00:00.020000+02:00,,Resource22,2011-03-07 00:00:00.010000+01:00,task-19347,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 14:48:34.988000+02:00 +Internet,case-6678,2011-05-17 01:06:40+02:00,General,2011-07-08 11:55:22.139000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource04,2011-03-22 01:06:40.010000+01:00,task-17872,Confirmation of receipt,complete,EMPTY,Resource04,2011-03-31 08:56:25.924000+02:00 +Internet,case-6678,2011-05-17 01:06:40+02:00,General,2011-07-08 11:55:22.139000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource04,2011-03-22 01:06:40.010000+01:00,task-18577,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-03-31 08:56:47.445000+02:00 +Internet,case-6678,2011-05-17 01:06:40+02:00,General,2011-07-08 11:55:22.139000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource04,2011-03-22 01:06:40.010000+01:00,task-18578,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-03-31 13:43:50.888000+02:00 +Internet,case-6678,2011-05-17 01:06:40+02:00,General,2011-07-08 11:55:22.139000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource04,2011-03-22 01:06:40.010000+01:00,task-18672,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-03-31 13:44:05.203000+02:00 +Internet,case-6678,2011-05-17 01:06:40+02:00,General,2011-07-08 11:55:22.139000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource04,2011-03-22 01:06:40.010000+01:00,task-18579,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-03-31 15:14:04.582000+02:00 +Internet,case-6678,2011-05-17 01:06:40+02:00,General,2011-07-08 11:55:22.139000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource04,2011-03-22 01:06:40.010000+01:00,task-18703,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 14:28:47.705000+02:00 +Internet,case-6679,2011-05-17 00:00:00+02:00,General,2011-05-17 09:51:38.926000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource17,2011-03-22 00:00:00.010000+01:00,task-17879,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-01 16:21:55.067000+02:00 +Internet,case-6679,2011-05-17 00:00:00+02:00,General,2011-05-17 09:51:38.926000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource17,2011-03-22 00:00:00.010000+01:00,task-18844,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-04-01 16:24:04.003000+02:00 +Internet,case-6679,2011-05-17 00:00:00+02:00,General,2011-05-17 09:51:38.926000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource17,2011-03-22 00:00:00.010000+01:00,task-18846,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-04 08:11:13.044000+02:00 +Internet,case-6679,2011-05-17 00:00:00+02:00,General,2011-05-17 09:51:38.926000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource17,2011-03-22 00:00:00.010000+01:00,task-18845,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-04 11:29:46.426000+02:00 +Internet,case-6679,2011-05-17 00:00:00+02:00,General,2011-05-17 09:51:38.926000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource17,2011-03-22 00:00:00.010000+01:00,task-18925,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-04 14:21:09.052000+02:00 +Internet,case-6679,2011-05-17 00:00:00+02:00,General,2011-05-17 09:51:38.926000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource17,2011-03-22 00:00:00.010000+01:00,task-18870,T05 Print and send confirmation of receipt,complete,EMPTY,admin1,2011-04-06 15:21:15.495000+02:00 +Internet,case-6680,2011-07-11 01:06:40+02:00,General,2011-07-12 15:13:17.702000+02:00,2011-07-11 01:06:40.020000+02:00,,Resource13,2011-03-23 01:06:40.010000+01:00,task-17893,Confirmation of receipt,complete,EMPTY,Resource13,2011-04-08 11:38:20.410000+02:00 +Internet,case-6680,2011-07-11 01:06:40+02:00,General,2011-07-12 15:13:17.702000+02:00,2011-07-11 01:06:40.020000+02:00,,Resource13,2011-03-23 01:06:40.010000+01:00,task-19671,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-04-08 11:39:29.184000+02:00 +Internet,case-6680,2011-07-11 01:06:40+02:00,General,2011-07-12 15:13:17.702000+02:00,2011-07-11 01:06:40.020000+02:00,,Resource13,2011-03-23 01:06:40.010000+01:00,task-19672,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-04-08 11:39:48.397000+02:00 +Internet,case-6680,2011-07-11 01:06:40+02:00,General,2011-07-12 15:13:17.702000+02:00,2011-07-11 01:06:40.020000+02:00,,Resource13,2011-03-23 01:06:40.010000+01:00,task-19674,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-04-08 11:40:09.484000+02:00 +Internet,case-6680,2011-07-11 01:06:40+02:00,General,2011-07-12 15:13:17.702000+02:00,2011-07-11 01:06:40.020000+02:00,,Resource13,2011-03-23 01:06:40.010000+01:00,task-19673,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-11 09:05:31.787000+02:00 +Internet,case-6680,2011-07-11 01:06:40+02:00,General,2011-07-12 15:13:17.702000+02:00,2011-07-11 01:06:40.020000+02:00,,Resource13,2011-03-23 01:06:40.010000+01:00,task-19779,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-04-11 09:35:39.496000+02:00 +Internet,case-6681,2011-05-17 00:00:00+02:00,General,2011-05-12 12:05:59.735000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource15,2011-03-22 00:00:00.010000+01:00,task-17896,Confirmation of receipt,complete,EMPTY,Resource15,2011-03-29 11:21:59.517000+02:00 +Internet,case-6681,2011-05-17 00:00:00+02:00,General,2011-05-12 12:05:59.735000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource15,2011-03-22 00:00:00.010000+01:00,task-18216,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-03-29 11:22:20.284000+02:00 +Internet,case-6681,2011-05-17 00:00:00+02:00,General,2011-05-12 12:05:59.735000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource15,2011-03-22 00:00:00.010000+01:00,task-18218,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-03-29 11:22:32.161000+02:00 +Internet,case-6681,2011-05-17 00:00:00+02:00,General,2011-05-12 12:05:59.735000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource15,2011-03-22 00:00:00.010000+01:00,task-18217,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-03-29 11:22:46.075000+02:00 +Internet,case-6681,2011-05-17 00:00:00+02:00,General,2011-05-12 12:05:59.735000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource15,2011-03-22 00:00:00.010000+01:00,task-18220,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-03-29 11:23:10.398000+02:00 +Internet,case-6681,2011-05-17 00:00:00+02:00,General,2011-05-12 12:05:59.735000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource15,2011-03-22 00:00:00.010000+01:00,task-18219,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-29 15:55:05.218000+02:00 +Internet,case-6682,2011-08-05 01:06:40+02:00,General,2011-08-03 14:52:24.942000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource18,2011-03-23 01:06:40.010000+01:00,task-17897,Confirmation of receipt,complete,EMPTY,Resource18,2011-04-07 11:09:40.019000+02:00 +Internet,case-6682,2011-08-05 01:06:40+02:00,General,2011-08-03 14:52:24.942000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource18,2011-03-23 01:06:40.010000+01:00,task-19498,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-04-07 11:14:39.795000+02:00 +Internet,case-6682,2011-08-05 01:06:40+02:00,General,2011-08-03 14:52:24.942000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource18,2011-03-23 01:06:40.010000+01:00,task-19497,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-04-07 11:14:52.276000+02:00 +Internet,case-6682,2011-08-05 01:06:40+02:00,General,2011-08-03 14:52:24.942000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource18,2011-03-23 01:06:40.010000+01:00,task-19501,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-04-07 11:15:33.805000+02:00 +Internet,case-6682,2011-08-05 01:06:40+02:00,General,2011-08-03 14:52:24.942000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource18,2011-03-23 01:06:40.010000+01:00,task-19502,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-04-07 11:15:50.994000+02:00 +Internet,case-6682,2011-08-05 01:06:40+02:00,General,2011-08-03 14:52:24.942000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource18,2011-03-23 01:06:40.010000+01:00,task-19500,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-04-07 12:06:15.715000+02:00 +Internet,case-6683,2011-05-19 00:00:00+02:00,General,2011-06-16 07:50:11.848000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-17898,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-30 14:33:12.923000+02:00 +Internet,case-6683,2011-05-19 00:00:00+02:00,General,2011-06-16 07:50:11.848000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-18523,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-30 14:34:09.776000+02:00 +Internet,case-6683,2011-05-19 00:00:00+02:00,General,2011-06-16 07:50:11.848000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-18525,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-30 14:34:27.389000+02:00 +Internet,case-6683,2011-05-19 00:00:00+02:00,General,2011-06-16 07:50:11.848000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-18522,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-03-30 14:34:49.662000+02:00 +Internet,case-6683,2011-05-19 00:00:00+02:00,General,2011-06-16 07:50:11.848000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-18527,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-03-30 14:35:45.553000+02:00 +Internet,case-6683,2011-05-19 00:00:00+02:00,General,2011-06-16 07:50:11.848000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-18528,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-03-31 09:14:19.064000+02:00 +Internet,case-6684,2011-05-19 01:06:40+02:00,General,2011-06-20 16:40:14.763000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource14,2011-03-24 01:06:40.010000+01:00,task-17907,Confirmation of receipt,complete,EMPTY,Resource14,2011-04-20 14:57:48.940000+02:00 +Internet,case-6684,2011-05-19 01:06:40+02:00,General,2011-06-20 16:40:14.763000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource14,2011-03-24 01:06:40.010000+01:00,task-21503,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-04-20 14:58:06.780000+02:00 +Internet,case-6684,2011-05-19 01:06:40+02:00,General,2011-06-20 16:40:14.763000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource14,2011-03-24 01:06:40.010000+01:00,task-21506,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-04-20 14:58:23.121000+02:00 +Internet,case-6684,2011-05-19 01:06:40+02:00,General,2011-06-20 16:40:14.763000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource14,2011-03-24 01:06:40.010000+01:00,task-21508,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-04-20 14:58:36.393000+02:00 +Internet,case-6684,2011-05-19 01:06:40+02:00,General,2011-06-20 16:40:14.763000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource14,2011-03-24 01:06:40.010000+01:00,task-21504,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-04-20 14:58:52.993000+02:00 +Internet,case-6684,2011-05-19 01:06:40+02:00,General,2011-06-20 16:40:14.763000+02:00,2011-05-19 01:06:40.020000+02:00,,Resource14,2011-03-24 01:06:40.010000+01:00,task-21509,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-04-20 14:59:07.808000+02:00 +Internet,case-6709,2011-05-19 00:00:00+02:00,General,2011-05-30 07:48:47.369000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-17958,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 12:11:18.800000+02:00 +Internet,case-6709,2011-05-19 00:00:00+02:00,General,2011-05-30 07:48:47.369000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-20512,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-14 12:11:34.410000+02:00 +Internet,case-6709,2011-05-19 00:00:00+02:00,General,2011-05-30 07:48:47.369000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-20514,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-14 12:11:54.461000+02:00 +Internet,case-6709,2011-05-19 00:00:00+02:00,General,2011-05-30 07:48:47.369000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-20515,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-14 12:12:06.496000+02:00 +Internet,case-6709,2011-05-19 00:00:00+02:00,General,2011-05-30 07:48:47.369000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-20513,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-28 14:25:03.615000+02:00 +Internet,case-6709,2011-05-19 00:00:00+02:00,General,2011-05-30 07:48:47.369000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-22657,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-28 14:25:18.373000+02:00 +Internet,case-6710,2011-05-19 00:00:00+02:00,General,2011-05-03 07:44:05.415000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-17968,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-29 09:01:33.141000+02:00 +Internet,case-6710,2011-05-19 00:00:00+02:00,General,2011-05-03 07:44:05.415000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-18166,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:56:47.720000+02:00 +Internet,case-6710,2011-05-19 00:00:00+02:00,General,2011-05-03 07:44:05.415000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-18580,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-03-31 08:57:17.530000+02:00 +Internet,case-6710,2011-05-19 00:00:00+02:00,General,2011-05-03 07:44:05.415000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-18581,T05 Print and send confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 12:37:18.618000+02:00 +Internet,case-6710,2011-05-19 00:00:00+02:00,General,2011-05-03 07:44:05.415000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-18167,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 12:37:31.728000+02:00 +Internet,case-6710,2011-05-19 00:00:00+02:00,General,2011-05-03 07:44:05.415000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource11,2011-03-24 00:00:00.010000+01:00,task-20519,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 12:44:58.572000+02:00 +Internet,case-6711,2011-05-19 00:00:00+02:00,General,2011-05-19 10:14:27.216000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-17969,Confirmation of receipt,complete,EMPTY,Resource08,2011-03-30 14:20:08.616000+02:00 +Internet,case-6711,2011-05-19 00:00:00+02:00,General,2011-05-19 10:14:27.216000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-18516,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-03-30 14:20:27.637000+02:00 +Internet,case-6711,2011-05-19 00:00:00+02:00,General,2011-05-19 10:14:27.216000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-18518,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-03-30 14:21:19.895000+02:00 +Internet,case-6711,2011-05-19 00:00:00+02:00,General,2011-05-19 10:14:27.216000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-18517,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-03-30 14:21:35.699000+02:00 +Internet,case-6711,2011-05-19 00:00:00+02:00,General,2011-05-19 10:14:27.216000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-18520,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-03-30 14:28:00.217000+02:00 +Internet,case-6711,2011-05-19 00:00:00+02:00,General,2011-05-19 10:14:27.216000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource08,2011-03-24 00:00:00.010000+01:00,task-18519,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-13 09:30:55.619000+02:00 +Internet,case-6712,2011-05-20 00:00:00+02:00,General,2011-05-04 08:15:10.967000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource11,2011-03-25 00:00:00.010000+01:00,task-17972,Confirmation of receipt,complete,EMPTY,Resource11,2011-03-29 09:10:12.157000+02:00 +Internet,case-6712,2011-05-20 00:00:00+02:00,General,2011-05-04 08:15:10.967000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource11,2011-03-25 00:00:00.010000+01:00,task-18168,T02 Check confirmation of receipt,complete,EMPTY,Resource19,2011-03-31 08:59:26.244000+02:00 +Internet,case-6712,2011-05-20 00:00:00+02:00,General,2011-05-04 08:15:10.967000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource11,2011-03-25 00:00:00.010000+01:00,task-18582,T04 Determine confirmation of receipt,complete,Group 3,Resource19,2011-03-31 08:59:52.809000+02:00 +Internet,case-6712,2011-05-20 00:00:00+02:00,General,2011-05-04 08:15:10.967000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource11,2011-03-25 00:00:00.010000+01:00,task-18583,T05 Print and send confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 12:56:02.984000+02:00 +Internet,case-6712,2011-05-20 00:00:00+02:00,General,2011-05-04 08:15:10.967000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource11,2011-03-25 00:00:00.010000+01:00,task-18169,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 12:56:17.895000+02:00 +Internet,case-6712,2011-05-20 00:00:00+02:00,General,2011-05-04 08:15:10.967000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource11,2011-03-25 00:00:00.010000+01:00,task-20536,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 12:59:54.934000+02:00 +Internet,case-6713,2011-05-20 00:00:00+02:00,General,2011-06-21 09:39:12.616000+02:00,2011-05-20 00:00:00.020000+02:00,,admin1,2011-03-25 00:00:00.010000+01:00,task-17997,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-10 13:42:11.433000+02:00 +Internet,case-6713,2011-05-20 00:00:00+02:00,General,2011-06-21 09:39:12.616000+02:00,2011-05-20 00:00:00.020000+02:00,,admin1,2011-03-25 00:00:00.010000+01:00,task-24256,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-10 13:42:30.297000+02:00 +Internet,case-6713,2011-05-20 00:00:00+02:00,General,2011-06-21 09:39:12.616000+02:00,2011-05-20 00:00:00.020000+02:00,,admin1,2011-03-25 00:00:00.010000+01:00,task-24258,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-10 13:42:56.397000+02:00 +Internet,case-6713,2011-05-20 00:00:00+02:00,General,2011-06-21 09:39:12.616000+02:00,2011-05-20 00:00:00.020000+02:00,,admin1,2011-03-25 00:00:00.010000+01:00,task-24259,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-05-10 13:43:12.453000+02:00 +Internet,case-6713,2011-05-20 00:00:00+02:00,General,2011-06-21 09:39:12.616000+02:00,2011-05-20 00:00:00.020000+02:00,,admin1,2011-03-25 00:00:00.010000+01:00,task-24257,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-10 13:43:36.047000+02:00 +Internet,case-6713,2011-05-20 00:00:00+02:00,General,2011-06-21 09:39:12.616000+02:00,2011-05-20 00:00:00.020000+02:00,,admin1,2011-03-25 00:00:00.010000+01:00,task-24260,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-10 13:43:55.753000+02:00 +Internet,case-6714,2011-06-24 01:06:40+02:00,General,2011-06-21 15:18:27.406000+02:00,2011-06-24 01:06:40.020000+02:00,Group 5,Resource04,2011-03-25 01:06:40.010000+01:00,task-18023,Confirmation of receipt,complete,EMPTY,Resource04,2011-05-02 15:14:08.285000+02:00 +Internet,case-6714,2011-06-24 01:06:40+02:00,General,2011-06-21 15:18:27.406000+02:00,2011-06-24 01:06:40.020000+02:00,Group 5,Resource04,2011-03-25 01:06:40.010000+01:00,task-23212,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-02 15:15:01.329000+02:00 +Internet,case-6714,2011-06-24 01:06:40+02:00,General,2011-06-21 15:18:27.406000+02:00,2011-06-24 01:06:40.020000+02:00,Group 5,Resource04,2011-03-25 01:06:40.010000+01:00,task-23216,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-02 15:15:13.818000+02:00 +Internet,case-6714,2011-06-24 01:06:40+02:00,General,2011-06-21 15:18:27.406000+02:00,2011-06-24 01:06:40.020000+02:00,Group 5,Resource04,2011-03-25 01:06:40.010000+01:00,task-23217,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-02 15:15:24.092000+02:00 +Internet,case-6714,2011-06-24 01:06:40+02:00,General,2011-06-21 15:18:27.406000+02:00,2011-06-24 01:06:40.020000+02:00,Group 5,Resource04,2011-03-25 01:06:40.010000+01:00,task-23213,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-02 15:15:33.991000+02:00 +Internet,case-6714,2011-06-24 01:06:40+02:00,General,2011-06-21 15:18:27.406000+02:00,2011-06-24 01:06:40.020000+02:00,Group 5,Resource04,2011-03-25 01:06:40.010000+01:00,task-23218,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-02 15:15:59.350000+02:00 +Internet,case-6715,2011-05-20 01:06:40+02:00,General,2011-05-18 16:16:04.715000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource04,2011-03-25 01:06:40.010000+01:00,task-18029,Confirmation of receipt,complete,EMPTY,Resource04,2011-05-03 11:12:20.665000+02:00 +Internet,case-6715,2011-05-20 01:06:40+02:00,General,2011-05-18 16:16:04.715000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource04,2011-03-25 01:06:40.010000+01:00,task-23402,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-03 11:12:37.537000+02:00 +Internet,case-6715,2011-05-20 01:06:40+02:00,General,2011-05-18 16:16:04.715000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource04,2011-03-25 01:06:40.010000+01:00,task-23404,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-03 11:12:47.808000+02:00 +Internet,case-6715,2011-05-20 01:06:40+02:00,General,2011-05-18 16:16:04.715000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource04,2011-03-25 01:06:40.010000+01:00,task-23405,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-03 11:12:57.825000+02:00 +Internet,case-6715,2011-05-20 01:06:40+02:00,General,2011-05-18 16:16:04.715000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource04,2011-03-25 01:06:40.010000+01:00,task-23403,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-03 11:13:07.305000+02:00 +Internet,case-6715,2011-05-20 01:06:40+02:00,General,2011-05-18 16:16:04.715000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource04,2011-03-25 01:06:40.010000+01:00,task-23406,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-03 11:13:21.589000+02:00 +Internet,case-6719,2011-06-17 01:06:40+02:00,General,2011-06-16 12:09:17.112000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource06,2011-03-25 01:06:40.010000+01:00,task-18043,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-11 10:15:48.048000+02:00 +Internet,case-6719,2011-06-17 01:06:40+02:00,General,2011-06-16 12:09:17.112000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource06,2011-03-25 01:06:40.010000+01:00,task-19787,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-11 10:16:23.586000+02:00 +Internet,case-6719,2011-06-17 01:06:40+02:00,General,2011-06-16 12:09:17.112000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource06,2011-03-25 01:06:40.010000+01:00,task-19788,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-11 10:16:38.759000+02:00 +Internet,case-6719,2011-06-17 01:06:40+02:00,General,2011-06-16 12:09:17.112000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource06,2011-03-25 01:06:40.010000+01:00,task-19786,T02 Check confirmation of receipt,complete,EMPTY,Resource24,2011-04-13 08:55:44.464000+02:00 +Internet,case-6719,2011-06-17 01:06:40+02:00,General,2011-06-16 12:09:17.112000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource06,2011-03-25 01:06:40.010000+01:00,task-20132,T03 Adjust confirmation of receipt,complete,Group 1,Resource06,2011-05-10 15:54:29.275000+02:00 +Internet,case-6719,2011-06-17 01:06:40+02:00,General,2011-06-16 12:09:17.112000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource06,2011-03-25 01:06:40.010000+01:00,task-24317,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-10 15:57:16.410000+02:00 +Internet,case-6719,2011-06-17 01:06:40+02:00,General,2011-06-16 12:09:17.112000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource06,2011-03-25 01:06:40.010000+01:00,task-24319,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-10 15:57:28.404000+02:00 +Internet,case-6719,2011-06-17 01:06:40+02:00,General,2011-06-16 12:09:17.112000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource06,2011-03-25 01:06:40.010000+01:00,task-24320,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-10 15:57:42.891000+02:00 +e-mail,case-6724,2011-04-27 01:06:40+02:00,General,2011-05-16 09:51:38.002000+02:00,2011-04-27 01:06:40.020000+02:00,,Resource09,2011-03-02 01:06:40.010000+01:00,task-18081,Confirmation of receipt,complete,EMPTY,admin2,2011-05-16 09:51:39.219000+02:00 +Internet,case-6737,2011-05-20 01:06:40+02:00,General,2011-05-11 10:03:04.278000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource11,2011-03-25 01:06:40.010000+01:00,task-18172,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 13:51:52.883000+02:00 +Internet,case-6737,2011-05-20 01:06:40+02:00,General,2011-05-11 10:03:04.278000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource11,2011-03-25 01:06:40.010000+01:00,task-20555,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-14 13:52:11.220000+02:00 +Internet,case-6737,2011-05-20 01:06:40+02:00,General,2011-05-11 10:03:04.278000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource11,2011-03-25 01:06:40.010000+01:00,task-20557,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-14 13:52:25.320000+02:00 +Internet,case-6737,2011-05-20 01:06:40+02:00,General,2011-05-11 10:03:04.278000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource11,2011-03-25 01:06:40.010000+01:00,task-20558,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-14 13:52:38.618000+02:00 +Internet,case-6737,2011-05-20 01:06:40+02:00,General,2011-05-11 10:03:04.278000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource11,2011-03-25 01:06:40.010000+01:00,task-20556,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 13:52:54.576000+02:00 +Internet,case-6737,2011-05-20 01:06:40+02:00,General,2011-05-11 10:03:04.278000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource11,2011-03-25 01:06:40.010000+01:00,task-20559,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 13:55:42.626000+02:00 +Internet,case-6738,2011-05-21 00:00:00+02:00,General,2011-05-03 07:26:00.355000+02:00,2011-05-21 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-18201,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 08:22:48.586000+02:00 +Internet,case-6738,2011-05-21 00:00:00+02:00,General,2011-05-03 07:26:00.355000+02:00,2011-05-21 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21580,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 08:23:10.608000+02:00 +Internet,case-6738,2011-05-21 00:00:00+02:00,General,2011-05-03 07:26:00.355000+02:00,2011-05-21 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21582,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 08:23:28.928000+02:00 +Internet,case-6738,2011-05-21 00:00:00+02:00,General,2011-05-03 07:26:00.355000+02:00,2011-05-21 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21583,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 08:23:40.312000+02:00 +Internet,case-6738,2011-05-21 00:00:00+02:00,General,2011-05-03 07:26:00.355000+02:00,2011-05-21 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21581,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 08:23:56.720000+02:00 +Internet,case-6738,2011-05-21 00:00:00+02:00,General,2011-05-03 07:26:00.355000+02:00,2011-05-21 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21584,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 08:24:24.951000+02:00 +Internet,case-6738,2011-05-21 00:00:00+02:00,General,2011-05-03 07:26:00.355000+02:00,2011-05-21 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21585,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-04-21 09:17:10.387000+02:00 +Internet,case-6738,2011-05-21 00:00:00+02:00,General,2011-05-03 07:26:00.355000+02:00,2011-05-21 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21616,T12 Check document X request unlicensed,complete,EMPTY,Resource01,2011-04-21 13:35:52.006000+02:00 +Internet,case-6738,2011-05-21 00:00:00+02:00,General,2011-05-03 07:26:00.355000+02:00,2011-05-21 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21879,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-04-21 13:39:15.779000+02:00 +Internet,case-6738,2011-05-21 00:00:00+02:00,General,2011-05-03 07:26:00.355000+02:00,2011-05-21 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21882,T15 Print document X request unlicensed,complete,Group 2,Resource11,2011-05-03 07:26:00.141000+02:00 +Internet,case-6739,2011-05-22 00:00:00+02:00,General,2011-05-04 08:33:12.367000+02:00,2011-05-22 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-18210,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-19 13:57:25.855000+02:00 +Internet,case-6739,2011-05-22 00:00:00+02:00,General,2011-05-04 08:33:12.367000+02:00,2011-05-22 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21133,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-19 13:57:44.716000+02:00 +Internet,case-6739,2011-05-22 00:00:00+02:00,General,2011-05-04 08:33:12.367000+02:00,2011-05-22 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21135,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-19 13:57:58.222000+02:00 +Internet,case-6739,2011-05-22 00:00:00+02:00,General,2011-05-04 08:33:12.367000+02:00,2011-05-22 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21136,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-19 13:58:09.259000+02:00 +Internet,case-6739,2011-05-22 00:00:00+02:00,General,2011-05-04 08:33:12.367000+02:00,2011-05-22 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21134,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-19 14:00:16.714000+02:00 +Internet,case-6739,2011-05-22 00:00:00+02:00,General,2011-05-04 08:33:12.367000+02:00,2011-05-22 00:00:00.020000+02:00,,Resource11,2011-03-26 00:00:00.010000+01:00,task-21137,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-19 14:02:57.204000+02:00 +Internet,case-6747,2011-05-23 00:00:00+02:00,General,2011-06-09 12:02:47.145000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource11,2011-03-28 00:00:00.020000+02:00,task-18288,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 09:40:56.538000+02:00 +Internet,case-6747,2011-05-23 00:00:00+02:00,General,2011-06-09 12:02:47.145000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource11,2011-03-28 00:00:00.020000+02:00,task-21623,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 09:41:43.129000+02:00 +Internet,case-6747,2011-05-23 00:00:00+02:00,General,2011-06-09 12:02:47.145000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource11,2011-03-28 00:00:00.020000+02:00,task-21625,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 09:41:56.687000+02:00 +Internet,case-6747,2011-05-23 00:00:00+02:00,General,2011-06-09 12:02:47.145000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource11,2011-03-28 00:00:00.020000+02:00,task-21626,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 09:42:05.396000+02:00 +Internet,case-6747,2011-05-23 00:00:00+02:00,General,2011-06-09 12:02:47.145000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource11,2011-03-28 00:00:00.020000+02:00,task-21624,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 09:42:16.131000+02:00 +Internet,case-6747,2011-05-23 00:00:00+02:00,General,2011-06-09 12:02:47.145000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource11,2011-03-28 00:00:00.020000+02:00,task-21627,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 09:42:30.026000+02:00 +Internet,case-6748,2011-05-23 00:00:00+02:00,General,2011-05-20 10:16:51.355000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource13,2011-03-28 00:00:00.020000+02:00,task-18294,Confirmation of receipt,complete,EMPTY,Resource13,2011-04-11 11:21:13.656000+02:00 +Internet,case-6748,2011-05-23 00:00:00+02:00,General,2011-05-20 10:16:51.355000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource13,2011-03-28 00:00:00.020000+02:00,task-19817,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-04-11 11:22:01.725000+02:00 +Internet,case-6748,2011-05-23 00:00:00+02:00,General,2011-05-20 10:16:51.355000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource13,2011-03-28 00:00:00.020000+02:00,task-19818,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-04-11 12:03:41.676000+02:00 +Internet,case-6748,2011-05-23 00:00:00+02:00,General,2011-05-20 10:16:51.355000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource13,2011-03-28 00:00:00.020000+02:00,task-19848,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-04-11 12:04:02.394000+02:00 +Internet,case-6748,2011-05-23 00:00:00+02:00,General,2011-05-20 10:16:51.355000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource13,2011-03-28 00:00:00.020000+02:00,task-19819,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-12 08:25:41.283000+02:00 +Internet,case-6748,2011-05-23 00:00:00+02:00,General,2011-05-20 10:16:51.355000+02:00,2011-05-23 00:00:00.020000+02:00,,Resource13,2011-03-28 00:00:00.020000+02:00,task-19947,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-12 15:47:08.548000+02:00 +Internet,case-6749,2011-05-23 01:06:40+02:00,General,2011-05-18 14:05:02.912000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource08,2011-03-28 01:06:40.020000+02:00,task-18302,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 14:46:05.312000+02:00 +Internet,case-6749,2011-05-23 01:06:40+02:00,General,2011-05-18 14:05:02.912000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource08,2011-03-28 01:06:40.020000+02:00,task-19564,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 14:48:44.495000+02:00 +Internet,case-6749,2011-05-23 01:06:40+02:00,General,2011-05-18 14:05:02.912000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource08,2011-03-28 01:06:40.020000+02:00,task-19569,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 14:51:36.240000+02:00 +Internet,case-6749,2011-05-23 01:06:40+02:00,General,2011-05-18 14:05:02.912000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource08,2011-03-28 01:06:40.020000+02:00,task-19565,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-07 14:51:49.090000+02:00 +Internet,case-6749,2011-05-23 01:06:40+02:00,General,2011-05-18 14:05:02.912000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource08,2011-03-28 01:06:40.020000+02:00,task-19573,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-07 14:52:07.738000+02:00 +Internet,case-6749,2011-05-23 01:06:40+02:00,General,2011-05-18 14:05:02.912000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource08,2011-03-28 01:06:40.020000+02:00,task-19572,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-08 11:43:56.122000+02:00 +Internet,case-6751,2011-05-12 00:00:00+02:00,General,2011-05-11 15:38:18.938000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource05,2011-03-17 00:00:00.010000+01:00,task-18313,Confirmation of receipt,complete,EMPTY,Resource05,2011-04-27 08:26:21.667000+02:00 +Internet,case-6751,2011-05-12 00:00:00+02:00,General,2011-05-11 15:38:18.938000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource05,2011-03-17 00:00:00.010000+01:00,task-22221,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-04-27 08:27:35.719000+02:00 +Internet,case-6751,2011-05-12 00:00:00+02:00,General,2011-05-11 15:38:18.938000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource05,2011-03-17 00:00:00.010000+01:00,task-22222,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-05-11 15:38:19.908000+02:00 +Internet,case-6751,2011-05-12 00:00:00+02:00,General,2011-05-11 15:38:18.938000+02:00,2011-05-12 00:00:00.020000+02:00,,Resource05,2011-03-17 00:00:00.010000+01:00,task-22223,T03 Adjust confirmation of receipt,complete,Group 1,admin2,2011-05-11 15:38:20.615000+02:00 +e-mail,case-6757,2011-04-29 00:00:00+02:00,General,2011-08-31 11:20:42.561000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource14,2011-03-04 00:00:00.010000+01:00,task-18382,Confirmation of receipt,complete,EMPTY,Resource14,2011-04-08 09:00:47.160000+02:00 +e-mail,case-6757,2011-04-29 00:00:00+02:00,General,2011-08-31 11:20:42.561000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource14,2011-03-04 00:00:00.010000+01:00,task-19612,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-04-08 09:01:23.881000+02:00 +e-mail,case-6757,2011-04-29 00:00:00+02:00,General,2011-08-31 11:20:42.561000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource14,2011-03-04 00:00:00.010000+01:00,task-19614,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-04-08 09:01:44.647000+02:00 +e-mail,case-6757,2011-04-29 00:00:00+02:00,General,2011-08-31 11:20:42.561000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource14,2011-03-04 00:00:00.010000+01:00,task-19615,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-04-08 09:02:09.291000+02:00 +e-mail,case-6757,2011-04-29 00:00:00+02:00,General,2011-08-31 11:20:42.561000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource14,2011-03-04 00:00:00.010000+01:00,task-19613,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-04-08 09:02:59.214000+02:00 +e-mail,case-6757,2011-04-29 00:00:00+02:00,General,2011-08-31 11:20:42.561000+02:00,2011-04-29 00:00:00.020000+02:00,,Resource14,2011-03-04 00:00:00.010000+01:00,task-19617,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-04-08 09:03:25.913000+02:00 +Internet,case-6765,2011-05-13 00:00:00+02:00,General,2011-05-13 09:54:20.801000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-18537,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-05 16:03:42.144000+02:00 +Internet,case-6765,2011-05-13 00:00:00+02:00,General,2011-05-13 09:54:20.801000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-19176,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-06 13:36:06.093000+02:00 +Internet,case-6765,2011-05-13 00:00:00+02:00,General,2011-05-13 09:54:20.801000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-19308,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-06 13:37:59.901000+02:00 +Internet,case-6765,2011-05-13 00:00:00+02:00,General,2011-05-13 09:54:20.801000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-19177,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-06 13:44:00.734000+02:00 +Internet,case-6765,2011-05-13 00:00:00+02:00,General,2011-05-13 09:54:20.801000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-19312,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-06 13:45:08.747000+02:00 +Internet,case-6765,2011-05-13 00:00:00+02:00,General,2011-05-13 09:54:20.801000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-19311,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-06 15:27:53.015000+02:00 +Internet,case-6767,2011-05-24 00:00:00+02:00,General,2011-05-19 15:45:39.897000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource05,2011-03-29 00:00:00.020000+02:00,task-18541,Confirmation of receipt,complete,EMPTY,admin1,2011-04-12 15:37:05.390000+02:00 +Internet,case-6767,2011-05-24 00:00:00+02:00,General,2011-05-19 15:45:39.897000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource05,2011-03-29 00:00:00.020000+02:00,task-20062,T02 Check confirmation of receipt,complete,Group 4,admin1,2011-04-12 16:03:57.181000+02:00 +Internet,case-6767,2011-05-24 00:00:00+02:00,General,2011-05-19 15:45:39.897000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource05,2011-03-29 00:00:00.020000+02:00,task-20066,T04 Determine confirmation of receipt,complete,Group 3,admin1,2011-04-12 16:04:12.375000+02:00 +Internet,case-6767,2011-05-24 00:00:00+02:00,General,2011-05-19 15:45:39.897000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource05,2011-03-29 00:00:00.020000+02:00,task-20067,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-12 16:04:22.947000+02:00 +Internet,case-6767,2011-05-24 00:00:00+02:00,General,2011-05-19 15:45:39.897000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource05,2011-03-29 00:00:00.020000+02:00,task-20063,T06 Determine necessity of stop advice,complete,EMPTY,Resource05,2011-05-09 09:26:55.702000+02:00 +Internet,case-6767,2011-05-24 00:00:00+02:00,General,2011-05-19 15:45:39.897000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource05,2011-03-29 00:00:00.020000+02:00,task-23870,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-09 09:28:06.879000+02:00 +Internet,case-6778,2011-05-13 00:00:00+02:00,General,2011-05-13 10:13:27.812000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-18587,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 13:20:34.912000+02:00 +Internet,case-6778,2011-05-13 00:00:00+02:00,General,2011-05-13 10:13:27.812000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-19534,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-04-07 13:20:57.619000+02:00 +Internet,case-6778,2011-05-13 00:00:00+02:00,General,2011-05-13 10:13:27.812000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-19536,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 13:31:18.565000+02:00 +Internet,case-6778,2011-05-13 00:00:00+02:00,General,2011-05-13 10:13:27.812000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-19535,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-07 13:31:40.561000+02:00 +Internet,case-6778,2011-05-13 00:00:00+02:00,General,2011-05-13 10:13:27.812000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-19545,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-07 13:31:59.419000+02:00 +Internet,case-6778,2011-05-13 00:00:00+02:00,General,2011-05-13 10:13:27.812000+02:00,2011-05-13 00:00:00.020000+02:00,,Resource08,2011-03-18 00:00:00.010000+01:00,task-19544,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-08 11:38:41.982000+02:00 +Internet,case-6782,2011-07-27 01:06:40+02:00,General,2011-08-31 11:48:48.898000+02:00,2011-07-27 01:06:40.020000+02:00,,admin1,2011-03-28 01:06:40.020000+02:00,task-18603,Confirmation of receipt,complete,EMPTY,Resource15,2011-04-06 10:36:47.785000+02:00 +Internet,case-6782,2011-07-27 01:06:40+02:00,General,2011-08-31 11:48:48.898000+02:00,2011-07-27 01:06:40.020000+02:00,,admin1,2011-03-28 01:06:40.020000+02:00,task-19247,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-14 08:57:13.347000+02:00 +Internet,case-6782,2011-07-27 01:06:40+02:00,General,2011-08-31 11:48:48.898000+02:00,2011-07-27 01:06:40.020000+02:00,,admin1,2011-03-28 01:06:40.020000+02:00,task-20347,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-14 08:57:29.690000+02:00 +Internet,case-6782,2011-07-27 01:06:40+02:00,General,2011-08-31 11:48:48.898000+02:00,2011-07-27 01:06:40.020000+02:00,,admin1,2011-03-28 01:06:40.020000+02:00,task-19246,T02 Check confirmation of receipt,complete,EMPTY,Resource15,2011-04-14 09:08:03.181000+02:00 +Internet,case-6782,2011-07-27 01:06:40+02:00,General,2011-08-31 11:48:48.898000+02:00,2011-07-27 01:06:40.020000+02:00,,admin1,2011-03-28 01:06:40.020000+02:00,task-20351,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-04-14 09:08:15.597000+02:00 +Internet,case-6782,2011-07-27 01:06:40+02:00,General,2011-08-31 11:48:48.898000+02:00,2011-07-27 01:06:40.020000+02:00,,admin1,2011-03-28 01:06:40.020000+02:00,task-20352,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-18 15:18:57.470000+02:00 +Internet,case-6785,2011-05-24 00:00:00+02:00,General,2011-05-17 13:24:16.426000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource08,2011-03-29 00:00:00.020000+02:00,task-18681,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 15:50:12.956000+02:00 +Internet,case-6785,2011-05-24 00:00:00+02:00,General,2011-05-17 13:24:16.426000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource08,2011-03-29 00:00:00.020000+02:00,task-19592,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 15:50:56.198000+02:00 +Internet,case-6785,2011-05-24 00:00:00+02:00,General,2011-05-17 13:24:16.426000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource08,2011-03-29 00:00:00.020000+02:00,task-19594,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-07 15:53:28.472000+02:00 +Internet,case-6785,2011-05-24 00:00:00+02:00,General,2011-05-17 13:24:16.426000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource08,2011-03-29 00:00:00.020000+02:00,task-19593,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-07 15:54:09.882000+02:00 +Internet,case-6785,2011-05-24 00:00:00+02:00,General,2011-05-17 13:24:16.426000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource08,2011-03-29 00:00:00.020000+02:00,task-19597,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-07 15:54:52.695000+02:00 +Internet,case-6785,2011-05-24 00:00:00+02:00,General,2011-05-17 13:24:16.426000+02:00,2011-05-24 00:00:00.020000+02:00,,Resource08,2011-03-29 00:00:00.020000+02:00,task-19596,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-08 11:40:43.717000+02:00 +Internet,case-6786,2011-05-25 00:00:00+02:00,General,2011-04-21 12:15:57.402000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource06,2011-03-30 00:00:00.020000+02:00,task-18683,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-06 14:58:48.017000+02:00 +Internet,case-6786,2011-05-25 00:00:00+02:00,General,2011-04-21 12:15:57.402000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource06,2011-03-30 00:00:00.020000+02:00,task-19352,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-06 14:59:02.983000+02:00 +Internet,case-6786,2011-05-25 00:00:00+02:00,General,2011-04-21 12:15:57.402000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource06,2011-03-30 00:00:00.020000+02:00,task-19353,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-06 14:59:35.465000+02:00 +Internet,case-6786,2011-05-25 00:00:00+02:00,General,2011-04-21 12:15:57.402000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource06,2011-03-30 00:00:00.020000+02:00,task-19355,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-06 15:09:40.166000+02:00 +Internet,case-6786,2011-05-25 00:00:00+02:00,General,2011-04-21 12:15:57.402000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource06,2011-03-30 00:00:00.020000+02:00,task-19354,T04 Determine confirmation of receipt,complete,EMPTY,admin1,2011-04-21 12:15:45.418000+02:00 +Internet,case-6786,2011-05-25 00:00:00+02:00,General,2011-04-21 12:15:57.402000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource06,2011-03-30 00:00:00.020000+02:00,task-21835,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-21 12:15:57.226000+02:00 +Internet,case-6787,2011-05-25 01:06:40+02:00,General,2011-05-04 11:08:57.615000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource11,2011-03-30 01:06:40.020000+02:00,task-18690,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 10:21:19.162000+02:00 +Internet,case-6787,2011-05-25 01:06:40+02:00,General,2011-05-04 11:08:57.615000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource11,2011-03-30 01:06:40.020000+02:00,task-21669,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 10:21:37.302000+02:00 +Internet,case-6787,2011-05-25 01:06:40+02:00,General,2011-05-04 11:08:57.615000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource11,2011-03-30 01:06:40.020000+02:00,task-21672,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 10:22:17.855000+02:00 +Internet,case-6787,2011-05-25 01:06:40+02:00,General,2011-05-04 11:08:57.615000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource11,2011-03-30 01:06:40.020000+02:00,task-21673,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 10:23:30.322000+02:00 +Internet,case-6787,2011-05-25 01:06:40+02:00,General,2011-05-04 11:08:57.615000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource11,2011-03-30 01:06:40.020000+02:00,task-21670,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 10:23:56.234000+02:00 +Internet,case-6787,2011-05-25 01:06:40+02:00,General,2011-05-04 11:08:57.615000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource11,2011-03-30 01:06:40.020000+02:00,task-21675,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 10:24:22.974000+02:00 +Internet,case-6790,2011-05-25 00:00:00+02:00,General,2011-05-12 08:59:34.294000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource11,2011-03-30 00:00:00.020000+02:00,task-18701,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 10:01:24.870000+02:00 +Internet,case-6790,2011-05-25 00:00:00+02:00,General,2011-05-12 08:59:34.294000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource11,2011-03-30 00:00:00.020000+02:00,task-21653,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 10:01:40.719000+02:00 +Internet,case-6790,2011-05-25 00:00:00+02:00,General,2011-05-12 08:59:34.294000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource11,2011-03-30 00:00:00.020000+02:00,task-21655,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 10:01:54.551000+02:00 +Internet,case-6790,2011-05-25 00:00:00+02:00,General,2011-05-12 08:59:34.294000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource11,2011-03-30 00:00:00.020000+02:00,task-21656,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 10:02:05.178000+02:00 +Internet,case-6790,2011-05-25 00:00:00+02:00,General,2011-05-12 08:59:34.294000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource11,2011-03-30 00:00:00.020000+02:00,task-21654,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 10:02:23.352000+02:00 +Internet,case-6790,2011-05-25 00:00:00+02:00,General,2011-05-12 08:59:34.294000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource11,2011-03-30 00:00:00.020000+02:00,task-21657,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-10 13:51:58.116000+02:00 +Internet,case-6790,2011-05-25 00:00:00+02:00,General,2011-05-12 08:59:34.294000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource11,2011-03-30 00:00:00.020000+02:00,task-24271,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-05-10 14:53:49.695000+02:00 +Internet,case-6790,2011-05-25 00:00:00+02:00,General,2011-05-12 08:59:34.294000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource11,2011-03-30 00:00:00.020000+02:00,task-24293,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-05-10 14:54:07.289000+02:00 +Internet,case-6790,2011-05-25 00:00:00+02:00,General,2011-05-12 08:59:34.294000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource11,2011-03-30 00:00:00.020000+02:00,task-24294,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-05-11 16:02:19.076000+02:00 +Internet,case-6790,2011-05-25 00:00:00+02:00,General,2011-05-12 08:59:34.294000+02:00,2011-05-25 00:00:00.020000+02:00,,Resource11,2011-03-30 00:00:00.020000+02:00,task-24555,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-05-12 08:59:34.067000+02:00 +Internet,case-6800,2011-05-25 01:06:40+02:00,General,2011-09-07 15:24:18.355000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource14,2011-03-30 01:06:40.020000+02:00,task-18756,Confirmation of receipt,complete,EMPTY,Resource14,2011-06-17 08:32:19.910000+02:00 +Internet,case-6800,2011-05-25 01:06:40+02:00,General,2011-09-07 15:24:18.355000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource14,2011-03-30 01:06:40.020000+02:00,task-28862,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-06-17 08:32:49.591000+02:00 +Internet,case-6800,2011-05-25 01:06:40+02:00,General,2011-09-07 15:24:18.355000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource14,2011-03-30 01:06:40.020000+02:00,task-28864,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-06-17 08:33:09.044000+02:00 +Internet,case-6800,2011-05-25 01:06:40+02:00,General,2011-09-07 15:24:18.355000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource14,2011-03-30 01:06:40.020000+02:00,task-28865,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-06-17 08:33:30.683000+02:00 +Internet,case-6800,2011-05-25 01:06:40+02:00,General,2011-09-07 15:24:18.355000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource14,2011-03-30 01:06:40.020000+02:00,task-28863,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-06-17 08:45:14.789000+02:00 +Internet,case-6800,2011-05-25 01:06:40+02:00,General,2011-09-07 15:24:18.355000+02:00,2011-05-25 01:06:40.020000+02:00,,Resource14,2011-03-30 01:06:40.020000+02:00,task-28866,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-06-17 08:45:34.336000+02:00 +Internet,case-6801,2011-05-26 00:00:00+02:00,General,2011-04-21 10:43:49.725000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-18757,Confirmation of receipt,complete,EMPTY,admin2,2011-04-21 10:43:50.470000+02:00 +Internet,case-6802,2011-05-26 00:00:00+02:00,General,2011-05-04 08:47:50.171000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-18761,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 10:54:31.606000+02:00 +Internet,case-6802,2011-05-26 00:00:00+02:00,General,2011-05-04 08:47:50.171000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21733,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 10:55:10.094000+02:00 +Internet,case-6802,2011-05-26 00:00:00+02:00,General,2011-05-04 08:47:50.171000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21735,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 10:55:23.901000+02:00 +Internet,case-6802,2011-05-26 00:00:00+02:00,General,2011-05-04 08:47:50.171000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21736,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 10:55:34.934000+02:00 +Internet,case-6802,2011-05-26 00:00:00+02:00,General,2011-05-04 08:47:50.171000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21734,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 10:55:51.445000+02:00 +Internet,case-6802,2011-05-26 00:00:00+02:00,General,2011-05-04 08:47:50.171000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21738,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 10:56:05.747000+02:00 +Internet,case-6804,2011-05-26 00:00:00+02:00,General,2011-05-11 10:08:17.075000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-18774,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 11:02:52.955000+02:00 +Internet,case-6804,2011-05-26 00:00:00+02:00,General,2011-05-11 10:08:17.075000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21749,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 11:03:08.225000+02:00 +Internet,case-6804,2011-05-26 00:00:00+02:00,General,2011-05-11 10:08:17.075000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21751,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 11:03:28.186000+02:00 +Internet,case-6804,2011-05-26 00:00:00+02:00,General,2011-05-11 10:08:17.075000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21752,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 11:03:38.747000+02:00 +Internet,case-6804,2011-05-26 00:00:00+02:00,General,2011-05-11 10:08:17.075000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21750,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 11:03:50.973000+02:00 +Internet,case-6804,2011-05-26 00:00:00+02:00,General,2011-05-11 10:08:17.075000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21753,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 11:04:10.698000+02:00 +Internet,case-6805,2011-05-26 00:00:00+02:00,General,2011-06-30 09:38:10.645000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource09,2011-03-31 00:00:00.020000+02:00,task-18786,Confirmation of receipt,complete,EMPTY,Resource09,2011-05-17 12:18:54.427000+02:00 +Internet,case-6805,2011-05-26 00:00:00+02:00,General,2011-06-30 09:38:10.645000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource09,2011-03-31 00:00:00.020000+02:00,task-25249,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-05-17 12:19:13.915000+02:00 +Internet,case-6805,2011-05-26 00:00:00+02:00,General,2011-06-30 09:38:10.645000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource09,2011-03-31 00:00:00.020000+02:00,task-25250,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-05-17 12:19:48.363000+02:00 +Internet,case-6805,2011-05-26 00:00:00+02:00,General,2011-06-30 09:38:10.645000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource09,2011-03-31 00:00:00.020000+02:00,task-25248,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-05-17 12:20:27.164000+02:00 +Internet,case-6805,2011-05-26 00:00:00+02:00,General,2011-06-30 09:38:10.645000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource09,2011-03-31 00:00:00.020000+02:00,task-25254,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-05-17 12:21:09.902000+02:00 +Internet,case-6805,2011-05-26 00:00:00+02:00,General,2011-06-30 09:38:10.645000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource09,2011-03-31 00:00:00.020000+02:00,task-25257,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-05-17 12:21:31.095000+02:00 +Internet,case-6807,2011-05-27 00:00:00+02:00,General,2011-05-11 10:38:56.426000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource11,2011-04-01 00:00:00.020000+02:00,task-18820,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 11:22:10.877000+02:00 +Internet,case-6807,2011-05-27 00:00:00+02:00,General,2011-05-11 10:38:56.426000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource11,2011-04-01 00:00:00.020000+02:00,task-21770,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 11:22:27.624000+02:00 +Internet,case-6807,2011-05-27 00:00:00+02:00,General,2011-05-11 10:38:56.426000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource11,2011-04-01 00:00:00.020000+02:00,task-21772,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 11:22:42.473000+02:00 +Internet,case-6807,2011-05-27 00:00:00+02:00,General,2011-05-11 10:38:56.426000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource11,2011-04-01 00:00:00.020000+02:00,task-21773,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 11:22:53.290000+02:00 +Internet,case-6807,2011-05-27 00:00:00+02:00,General,2011-05-11 10:38:56.426000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource11,2011-04-01 00:00:00.020000+02:00,task-21771,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 11:23:04.852000+02:00 +Internet,case-6807,2011-05-27 00:00:00+02:00,General,2011-05-11 10:38:56.426000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource11,2011-04-01 00:00:00.020000+02:00,task-21774,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 11:23:34.670000+02:00 +Internet,case-6838,2011-05-27 00:00:00+02:00,General,2011-05-31 11:22:53.024000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource14,2011-04-01 00:00:00.020000+02:00,task-18916,Confirmation of receipt,complete,EMPTY,Resource14,2011-04-13 09:05:15.465000+02:00 +Internet,case-6838,2011-05-27 00:00:00+02:00,General,2011-05-31 11:22:53.024000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource14,2011-04-01 00:00:00.020000+02:00,task-20150,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-04-13 09:05:43.537000+02:00 +Internet,case-6838,2011-05-27 00:00:00+02:00,General,2011-05-31 11:22:53.024000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource14,2011-04-01 00:00:00.020000+02:00,task-20152,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-04-13 09:06:01.065000+02:00 +Internet,case-6838,2011-05-27 00:00:00+02:00,General,2011-05-31 11:22:53.024000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource14,2011-04-01 00:00:00.020000+02:00,task-20153,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-04-13 09:06:11.703000+02:00 +Internet,case-6838,2011-05-27 00:00:00+02:00,General,2011-05-31 11:22:53.024000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource14,2011-04-01 00:00:00.020000+02:00,task-20151,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-04-13 09:45:49.567000+02:00 +Internet,case-6838,2011-05-27 00:00:00+02:00,General,2011-05-31 11:22:53.024000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource14,2011-04-01 00:00:00.020000+02:00,task-20189,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-04-13 09:48:08.209000+02:00 +Post,case-6848,2011-05-09 00:00:00+02:00,General,2011-05-20 14:23:58.983000+02:00,2011-05-09 00:00:00.020000+02:00,,Resource11,2011-03-14 00:00:00.010000+01:00,task-18969,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-14 10:23:52.791000+02:00 +Post,case-6848,2011-05-09 00:00:00+02:00,General,2011-05-20 14:23:58.983000+02:00,2011-05-09 00:00:00.020000+02:00,,Resource11,2011-03-14 00:00:00.010000+01:00,task-20407,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-14 10:24:12.580000+02:00 +Post,case-6848,2011-05-09 00:00:00+02:00,General,2011-05-20 14:23:58.983000+02:00,2011-05-09 00:00:00.020000+02:00,,Resource11,2011-03-14 00:00:00.010000+01:00,task-20409,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-14 10:24:24.463000+02:00 +Post,case-6848,2011-05-09 00:00:00+02:00,General,2011-05-20 14:23:58.983000+02:00,2011-05-09 00:00:00.020000+02:00,,Resource11,2011-03-14 00:00:00.010000+01:00,task-20410,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-14 10:24:36.556000+02:00 +Post,case-6848,2011-05-09 00:00:00+02:00,General,2011-05-20 14:23:58.983000+02:00,2011-05-09 00:00:00.020000+02:00,,Resource11,2011-03-14 00:00:00.010000+01:00,task-20408,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-14 10:24:47.705000+02:00 +Post,case-6848,2011-05-09 00:00:00+02:00,General,2011-05-20 14:23:58.983000+02:00,2011-05-09 00:00:00.020000+02:00,,Resource11,2011-03-14 00:00:00.010000+01:00,task-20411,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-14 10:25:03.190000+02:00 +Internet,case-6862,2011-05-15 00:00:00+02:00,General,2011-06-01 08:27:49.750000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource23,2011-03-20 00:00:00.010000+01:00,task-19075,Confirmation of receipt,complete,EMPTY,Resource23,2011-04-06 10:40:13.700000+02:00 +Internet,case-6862,2011-05-15 00:00:00+02:00,General,2011-06-01 08:27:49.750000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource23,2011-03-20 00:00:00.010000+01:00,task-19249,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-04-06 10:51:11.013000+02:00 +Internet,case-6862,2011-05-15 00:00:00+02:00,General,2011-06-01 08:27:49.750000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource23,2011-03-20 00:00:00.010000+01:00,task-19253,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource23,2011-04-06 10:54:49.381000+02:00 +Internet,case-6862,2011-05-15 00:00:00+02:00,General,2011-06-01 08:27:49.750000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource23,2011-03-20 00:00:00.010000+01:00,task-19252,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource23,2011-04-07 09:52:24.217000+02:00 +Internet,case-6862,2011-05-15 00:00:00+02:00,General,2011-06-01 08:27:49.750000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource23,2011-03-20 00:00:00.010000+01:00,task-19455,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-04-07 09:53:10.816000+02:00 +Internet,case-6862,2011-05-15 00:00:00+02:00,General,2011-06-01 08:27:49.750000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource23,2011-03-20 00:00:00.010000+01:00,task-19456,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-04-07 09:53:33.733000+02:00 +Internet,case-6862,2011-05-15 00:00:00+02:00,General,2011-06-01 08:27:49.750000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource23,2011-03-20 00:00:00.010000+01:00,task-19248,T02 Check confirmation of receipt,complete,EMPTY,Resource18,2011-04-07 10:11:10.065000+02:00 +Internet,case-6862,2011-05-15 00:00:00+02:00,General,2011-06-01 08:27:49.750000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource23,2011-03-20 00:00:00.010000+01:00,task-19474,T04 Determine confirmation of receipt,complete,EMPTY,Resource18,2011-04-07 10:12:05.283000+02:00 +Internet,case-6862,2011-05-15 00:00:00+02:00,General,2011-06-01 08:27:49.750000+02:00,2011-05-15 00:00:00.020000+02:00,,Resource23,2011-03-20 00:00:00.010000+01:00,task-19475,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-08 11:25:12.126000+02:00 +Internet,case-6864,2011-05-31 00:00:00+02:00,General,2011-05-11 10:12:43.232000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource11,2011-04-05 00:00:00.020000+02:00,task-19172,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 11:37:58.407000+02:00 +Internet,case-6864,2011-05-31 00:00:00+02:00,General,2011-05-11 10:12:43.232000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource11,2011-04-05 00:00:00.020000+02:00,task-21791,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 11:38:18.109000+02:00 +Internet,case-6864,2011-05-31 00:00:00+02:00,General,2011-05-11 10:12:43.232000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource11,2011-04-05 00:00:00.020000+02:00,task-21793,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 11:38:34.130000+02:00 +Internet,case-6864,2011-05-31 00:00:00+02:00,General,2011-05-11 10:12:43.232000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource11,2011-04-05 00:00:00.020000+02:00,task-21794,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 11:38:46.125000+02:00 +Internet,case-6864,2011-05-31 00:00:00+02:00,General,2011-05-11 10:12:43.232000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource11,2011-04-05 00:00:00.020000+02:00,task-21792,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 11:38:59.640000+02:00 +Internet,case-6864,2011-05-31 00:00:00+02:00,General,2011-05-11 10:12:43.232000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource11,2011-04-05 00:00:00.020000+02:00,task-21795,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 11:39:15.774000+02:00 +Internet,case-6865,2011-05-31 01:06:40+02:00,General,2011-05-11 10:24:18.810000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource11,2011-04-05 01:06:40.020000+02:00,task-19173,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 11:57:59.419000+02:00 +Internet,case-6865,2011-05-31 01:06:40+02:00,General,2011-05-11 10:24:18.810000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource11,2011-04-05 01:06:40.020000+02:00,task-21812,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 11:58:13.844000+02:00 +Internet,case-6865,2011-05-31 01:06:40+02:00,General,2011-05-11 10:24:18.810000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource11,2011-04-05 01:06:40.020000+02:00,task-21814,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 11:58:30.448000+02:00 +Internet,case-6865,2011-05-31 01:06:40+02:00,General,2011-05-11 10:24:18.810000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource11,2011-04-05 01:06:40.020000+02:00,task-21815,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 11:58:47.987000+02:00 +Internet,case-6865,2011-05-31 01:06:40+02:00,General,2011-05-11 10:24:18.810000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource11,2011-04-05 01:06:40.020000+02:00,task-21813,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 11:59:02.639000+02:00 +Internet,case-6865,2011-05-31 01:06:40+02:00,General,2011-05-11 10:24:18.810000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource11,2011-04-05 01:06:40.020000+02:00,task-21816,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-21 11:59:17.349000+02:00 +Internet,case-6869,2011-05-31 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource01,2011-04-06 00:00:00.020000+02:00,task-19234,Confirmation of receipt,complete,EMPTY,admin2,2011-05-26 13:12:22.644000+02:00 +Internet,case-6872,2011-05-31 00:00:00+02:00,General,2011-05-26 14:44:18.896000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource06,2011-04-06 00:00:00.020000+02:00,task-19250,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-26 12:25:03.223000+02:00 +Internet,case-6872,2011-05-31 00:00:00+02:00,General,2011-05-26 14:44:18.896000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource06,2011-04-06 00:00:00.020000+02:00,task-22171,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-26 12:58:24.035000+02:00 +Internet,case-6872,2011-05-31 00:00:00+02:00,General,2011-05-26 14:44:18.896000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource06,2011-04-06 00:00:00.020000+02:00,task-22177,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-26 12:58:44.562000+02:00 +Internet,case-6872,2011-05-31 00:00:00+02:00,General,2011-05-26 14:44:18.896000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource06,2011-04-06 00:00:00.020000+02:00,task-22178,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-04-26 12:58:58.633000+02:00 +Internet,case-6872,2011-05-31 00:00:00+02:00,General,2011-05-26 14:44:18.896000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource06,2011-04-06 00:00:00.020000+02:00,task-22172,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-27 08:29:40.103000+02:00 +Internet,case-6872,2011-05-31 00:00:00+02:00,General,2011-05-26 14:44:18.896000+02:00,2011-05-31 00:00:00.020000+02:00,,Resource06,2011-04-06 00:00:00.020000+02:00,task-22227,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-27 08:33:03.573000+02:00 +Internet,case-6874,2011-05-31 01:06:40+02:00,General,2011-05-30 00:00:00.020000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource01,2011-04-06 01:06:40.020000+02:00,task-19274,Confirmation of receipt,complete,EMPTY,admin2,2011-05-31 07:49:04.675000+02:00 +Internet,case-6899,2011-06-01 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource01,2011-04-06 00:00:00.020000+02:00,task-19505,Confirmation of receipt,complete,EMPTY,admin2,2011-05-26 13:12:56.277000+02:00 +Internet,case-6900,2011-06-01 00:00:00+02:00,General,2011-05-19 10:38:35.015000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-19510,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-21 13:18:49.743000+02:00 +Internet,case-6900,2011-06-01 00:00:00+02:00,General,2011-05-19 10:38:35.015000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-21871,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-21 13:19:08.501000+02:00 +Internet,case-6900,2011-06-01 00:00:00+02:00,General,2011-05-19 10:38:35.015000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-21873,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-21 13:19:23.812000+02:00 +Internet,case-6900,2011-06-01 00:00:00+02:00,General,2011-05-19 10:38:35.015000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-21874,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-21 13:19:35.228000+02:00 +Internet,case-6900,2011-06-01 00:00:00+02:00,General,2011-05-19 10:38:35.015000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-21872,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-21 13:19:47.516000+02:00 +Internet,case-6900,2011-06-01 00:00:00+02:00,General,2011-05-19 10:38:35.015000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-21875,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 08:47:05.541000+02:00 +Internet,case-6901,2011-04-07 01:06:40+02:00,General,2011-05-09 11:55:01.282000+02:00,2011-04-07 01:06:40.020000+02:00,,Resource22,2011-02-25 01:06:40.010000+01:00,task-19523,Confirmation of receipt,complete,EMPTY,admin2,2011-05-09 11:55:02.416000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-19528,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-02 09:53:08.159000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22925,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-02 09:53:55.304000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22928,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-02 09:54:58.525000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22929,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-05-02 09:55:21.659000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22926,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 09:56:28.248000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22932,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-05-02 09:57:45.909000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22935,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 09:58:06.941000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22937,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-05-02 09:58:28.736000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22938,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 09:58:52.039000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22939,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource12,2011-05-02 10:00:14.673000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22944,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 10:20:49.180000+02:00 +Internet,case-6902,2011-02-24 00:00:00+01:00,General,2011-05-27 15:23:14.842000+02:00,2011-02-24 00:00:00.010000+01:00,,admin1,2010-12-31 00:00:00.010000+01:00,task-22964,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-02 10:21:24.652000+02:00 +Internet,case-6904,2011-06-01 00:00:00+02:00,General,2011-05-11 10:44:38.184000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-19556,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 11:08:51.932000+02:00 +Internet,case-6904,2011-06-01 00:00:00+02:00,General,2011-05-11 10:44:38.184000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-22550,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 11:09:14.618000+02:00 +Internet,case-6904,2011-06-01 00:00:00+02:00,General,2011-05-11 10:44:38.184000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-22552,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 11:09:27.171000+02:00 +Internet,case-6904,2011-06-01 00:00:00+02:00,General,2011-05-11 10:44:38.184000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-22553,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 11:09:39.441000+02:00 +Internet,case-6904,2011-06-01 00:00:00+02:00,General,2011-05-11 10:44:38.184000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-22551,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-28 11:09:52.935000+02:00 +Internet,case-6904,2011-06-01 00:00:00+02:00,General,2011-05-11 10:44:38.184000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource11,2011-04-06 00:00:00.020000+02:00,task-22554,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-28 11:16:52.970000+02:00 +Desk,case-6912,2011-05-17 01:06:40+02:00,General,2011-05-12 08:39:47.740000+02:00,2011-05-17 01:06:40.020000+02:00,,Resource06,2011-03-22 01:06:40.010000+01:00,task-19669,Confirmation of receipt,complete,EMPTY,admin2,2011-05-12 08:39:48.752000+02:00 +Internet,case-6944,2011-06-01 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource01,2011-04-06 00:00:00.020000+02:00,task-19958,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 13:30:26.922000+02:00 +Internet,case-6944,2011-06-01 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource01,2011-04-06 00:00:00.020000+02:00,task-22637,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 13:31:19.663000+02:00 +Internet,case-6944,2011-06-01 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource01,2011-04-06 00:00:00.020000+02:00,task-22639,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 13:31:55.907000+02:00 +Internet,case-6944,2011-06-01 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource01,2011-04-06 00:00:00.020000+02:00,task-22640,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 13:33:43.345000+02:00 +Internet,case-6944,2011-06-01 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource01,2011-04-06 00:00:00.020000+02:00,task-22638,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-28 13:34:04.228000+02:00 +Internet,case-6944,2011-06-01 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-01 00:00:00.020000+02:00,,Resource01,2011-04-06 00:00:00.020000+02:00,task-22643,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-28 14:01:27.029000+02:00 +Internet,case-6947,2011-06-02 01:06:40+02:00,General,2011-05-23 09:49:37.059000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource11,2011-04-07 01:06:40.020000+02:00,task-19962,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 14:53:24.088000+02:00 +Internet,case-6947,2011-06-02 01:06:40+02:00,General,2011-05-23 09:49:37.059000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource11,2011-04-07 01:06:40.020000+02:00,task-22676,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 14:53:45.942000+02:00 +Internet,case-6947,2011-06-02 01:06:40+02:00,General,2011-05-23 09:49:37.059000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource11,2011-04-07 01:06:40.020000+02:00,task-22678,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 14:53:56.885000+02:00 +Internet,case-6947,2011-06-02 01:06:40+02:00,General,2011-05-23 09:49:37.059000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource11,2011-04-07 01:06:40.020000+02:00,task-22679,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:01:11.710000+02:00 +Internet,case-6947,2011-06-02 01:06:40+02:00,General,2011-05-23 09:49:37.059000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource11,2011-04-07 01:06:40.020000+02:00,task-22677,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-12 09:34:14.232000+02:00 +Internet,case-6947,2011-06-02 01:06:40+02:00,General,2011-05-23 09:49:37.059000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource11,2011-04-07 01:06:40.020000+02:00,task-24587,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 09:34:36.210000+02:00 +Internet,case-6948,2011-06-02 00:00:00+02:00,General,2011-05-19 11:46:19.473000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-19975,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 15:16:02.969000+02:00 +Internet,case-6948,2011-06-02 00:00:00+02:00,General,2011-05-19 11:46:19.473000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-22689,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 15:16:18.990000+02:00 +Internet,case-6948,2011-06-02 00:00:00+02:00,General,2011-05-19 11:46:19.473000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-22691,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 15:16:32.023000+02:00 +Internet,case-6948,2011-06-02 00:00:00+02:00,General,2011-05-19 11:46:19.473000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-22692,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:18:01.832000+02:00 +Internet,case-6948,2011-06-02 00:00:00+02:00,General,2011-05-19 11:46:19.473000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-22690,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-03 12:03:51.093000+02:00 +Internet,case-6948,2011-06-02 00:00:00+02:00,General,2011-05-19 11:46:19.473000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-23446,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 13:31:32.063000+02:00 +Internet,case-6948,2011-06-02 00:00:00+02:00,General,2011-05-19 11:46:19.473000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-24705,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-05-12 13:46:33.389000+02:00 +Internet,case-6948,2011-06-02 00:00:00+02:00,General,2011-05-19 11:46:19.473000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-24706,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-05-12 13:46:57.388000+02:00 +Internet,case-6948,2011-06-02 00:00:00+02:00,General,2011-05-19 11:46:19.473000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-24707,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-05-19 10:35:15.145000+02:00 +Internet,case-6948,2011-06-02 00:00:00+02:00,General,2011-05-19 11:46:19.473000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-25634,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-05-19 11:46:19.283000+02:00 +Internet,case-6950,2011-06-05 00:00:00+02:00,General,2011-05-19 12:06:02.771000+02:00,2011-06-05 00:00:00.020000+02:00,,Resource11,2011-04-10 00:00:00.020000+02:00,task-19993,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 15:05:51.422000+02:00 +Internet,case-6950,2011-06-05 00:00:00+02:00,General,2011-05-19 12:06:02.771000+02:00,2011-06-05 00:00:00.020000+02:00,,Resource11,2011-04-10 00:00:00.020000+02:00,task-22681,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 15:06:06.817000+02:00 +Internet,case-6950,2011-06-05 00:00:00+02:00,General,2011-05-19 12:06:02.771000+02:00,2011-06-05 00:00:00.020000+02:00,,Resource11,2011-04-10 00:00:00.020000+02:00,task-22683,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 15:06:20.254000+02:00 +Internet,case-6950,2011-06-05 00:00:00+02:00,General,2011-05-19 12:06:02.771000+02:00,2011-06-05 00:00:00.020000+02:00,,Resource11,2011-04-10 00:00:00.020000+02:00,task-22684,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:06:31.683000+02:00 +Internet,case-6950,2011-06-05 00:00:00+02:00,General,2011-05-19 12:06:02.771000+02:00,2011-06-05 00:00:00.020000+02:00,,Resource11,2011-04-10 00:00:00.020000+02:00,task-22682,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-12 09:46:12.540000+02:00 +Internet,case-6950,2011-06-05 00:00:00+02:00,General,2011-05-19 12:06:02.771000+02:00,2011-06-05 00:00:00.020000+02:00,,Resource11,2011-04-10 00:00:00.020000+02:00,task-24603,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 09:47:59.271000+02:00 +Internet,case-6951,2011-04-14 01:06:40+02:00,General,2011-04-12 00:00:00.020000+02:00,2011-04-14 01:06:40.020000+02:00,,Resource17,2010-12-09 01:06:40.010000+01:00,task-20008,Confirmation of receipt,complete,EMPTY,admin2,2011-04-14 08:20:48.570000+02:00 +Internet,case-6953,2011-06-01 01:06:40+02:00,General,2011-06-17 08:32:56.223000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-04-06 01:06:40.020000+02:00,task-20035,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-19 10:10:25.445000+02:00 +Internet,case-6953,2011-06-01 01:06:40+02:00,General,2011-06-17 08:32:56.223000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-04-06 01:06:40.020000+02:00,task-21031,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-19 10:10:45.567000+02:00 +Internet,case-6953,2011-06-01 01:06:40+02:00,General,2011-06-17 08:32:56.223000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-04-06 01:06:40.020000+02:00,task-21033,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-19 10:11:00.222000+02:00 +Internet,case-6953,2011-06-01 01:06:40+02:00,General,2011-06-17 08:32:56.223000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-04-06 01:06:40.020000+02:00,task-21034,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-04-19 10:11:11.537000+02:00 +Internet,case-6953,2011-06-01 01:06:40+02:00,General,2011-06-17 08:32:56.223000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-04-06 01:06:40.020000+02:00,task-21032,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-19 10:11:26.110000+02:00 +Internet,case-6953,2011-06-01 01:06:40+02:00,General,2011-06-17 08:32:56.223000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource06,2011-04-06 01:06:40.020000+02:00,task-21035,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-19 10:11:45.505000+02:00 +Internet,case-6955,2011-06-02 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-20037,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 14:49:47.708000+02:00 +Internet,case-6955,2011-06-02 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-22671,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 14:50:03.219000+02:00 +Internet,case-6955,2011-06-02 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-22673,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 14:50:15.040000+02:00 +Internet,case-6955,2011-06-02 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-22674,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 14:50:26.587000+02:00 +Internet,case-6955,2011-06-02 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource01,2011-04-07 00:00:00.020000+02:00,task-22672,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-05-26 13:13:58.332000+02:00 +Internet,case-6957,2011-06-03 00:00:00+02:00,General,2011-05-26 11:37:57.372000+02:00,2011-06-03 00:00:00.020000+02:00,,Resource13,2011-04-08 00:00:00.020000+02:00,task-20039,Confirmation of receipt,complete,EMPTY,Resource13,2011-04-13 10:53:05.329000+02:00 +Internet,case-6957,2011-06-03 00:00:00+02:00,General,2011-05-26 11:37:57.372000+02:00,2011-06-03 00:00:00.020000+02:00,,Resource13,2011-04-08 00:00:00.020000+02:00,task-20220,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-04-13 10:53:52.557000+02:00 +Internet,case-6957,2011-06-03 00:00:00+02:00,General,2011-05-26 11:37:57.372000+02:00,2011-06-03 00:00:00.020000+02:00,,Resource13,2011-04-08 00:00:00.020000+02:00,task-20221,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-04-13 10:54:16.536000+02:00 +Internet,case-6957,2011-06-03 00:00:00+02:00,General,2011-05-26 11:37:57.372000+02:00,2011-06-03 00:00:00.020000+02:00,,Resource13,2011-04-08 00:00:00.020000+02:00,task-20223,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-04-13 10:54:33.659000+02:00 +Internet,case-6957,2011-06-03 00:00:00+02:00,General,2011-05-26 11:37:57.372000+02:00,2011-06-03 00:00:00.020000+02:00,,Resource13,2011-04-08 00:00:00.020000+02:00,task-20222,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-15 14:56:28.069000+02:00 +Internet,case-6957,2011-06-03 00:00:00+02:00,General,2011-05-26 11:37:57.372000+02:00,2011-06-03 00:00:00.020000+02:00,,Resource13,2011-04-08 00:00:00.020000+02:00,task-20659,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-18 15:17:21.141000+02:00 +Desk,case-6969,2011-05-20 00:00:00+02:00,General,2011-05-23 16:14:21.628000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource06,2011-03-25 00:00:00.010000+01:00,task-20175,Confirmation of receipt,complete,Group 1,Resource06,2011-04-13 11:59:05.016000+02:00 +Desk,case-6969,2011-05-20 00:00:00+02:00,General,2011-05-23 16:14:21.628000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource06,2011-03-25 00:00:00.010000+01:00,task-20246,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-13 11:59:22.070000+02:00 +Desk,case-6969,2011-05-20 00:00:00+02:00,General,2011-05-23 16:14:21.628000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource06,2011-03-25 00:00:00.010000+01:00,task-20248,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-13 11:59:35.192000+02:00 +Desk,case-6969,2011-05-20 00:00:00+02:00,General,2011-05-23 16:14:21.628000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource06,2011-03-25 00:00:00.010000+01:00,task-20249,T05 Print and send confirmation of receipt,complete,EMPTY,Resource06,2011-04-13 12:08:53.826000+02:00 +Desk,case-6969,2011-05-20 00:00:00+02:00,General,2011-05-23 16:14:21.628000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource06,2011-03-25 00:00:00.010000+01:00,task-20247,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-27 13:41:29.549000+02:00 +Desk,case-6969,2011-05-20 00:00:00+02:00,General,2011-05-23 16:14:21.628000+02:00,2011-05-20 00:00:00.020000+02:00,,Resource06,2011-03-25 00:00:00.010000+01:00,task-22396,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-27 13:41:44.590000+02:00 +Internet,case-6979,2011-06-02 00:00:00+02:00,General,2011-05-25 15:38:06.845000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource02,2011-04-07 00:00:00.020000+02:00,task-20354,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-15 07:47:43.344000+02:00 +Internet,case-6979,2011-06-02 00:00:00+02:00,General,2011-05-25 15:38:06.845000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource02,2011-04-07 00:00:00.020000+02:00,task-20588,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-04-15 07:48:23.665000+02:00 +Internet,case-6979,2011-06-02 00:00:00+02:00,General,2011-05-25 15:38:06.845000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource02,2011-04-07 00:00:00.020000+02:00,task-20590,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-15 07:48:38.937000+02:00 +Internet,case-6979,2011-06-02 00:00:00+02:00,General,2011-05-25 15:38:06.845000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource02,2011-04-07 00:00:00.020000+02:00,task-20591,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-15 07:48:48.846000+02:00 +Internet,case-6979,2011-06-02 00:00:00+02:00,General,2011-05-25 15:38:06.845000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource02,2011-04-07 00:00:00.020000+02:00,task-20589,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-15 08:38:48.306000+02:00 +Internet,case-6979,2011-06-02 00:00:00+02:00,General,2011-05-25 15:38:06.845000+02:00,2011-06-02 00:00:00.020000+02:00,,Resource02,2011-04-07 00:00:00.020000+02:00,task-20592,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-15 08:40:58.471000+02:00 +Internet,case-6982,2011-06-06 01:06:40+02:00,General,2011-06-24 09:37:47.317000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource06,2011-04-09 01:06:40.020000+02:00,task-20455,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-26 09:45:57.669000+02:00 +Internet,case-6982,2011-06-06 01:06:40+02:00,General,2011-06-24 09:37:47.317000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource06,2011-04-09 01:06:40.020000+02:00,task-22073,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-26 09:46:15.216000+02:00 +Internet,case-6982,2011-06-06 01:06:40+02:00,General,2011-06-24 09:37:47.317000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource06,2011-04-09 01:06:40.020000+02:00,task-22076,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-26 09:46:27.373000+02:00 +Internet,case-6982,2011-06-06 01:06:40+02:00,General,2011-06-24 09:37:47.317000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource06,2011-04-09 01:06:40.020000+02:00,task-22077,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-04-26 09:46:38.900000+02:00 +Internet,case-6982,2011-06-06 01:06:40+02:00,General,2011-06-24 09:37:47.317000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource06,2011-04-09 01:06:40.020000+02:00,task-22075,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-26 09:46:53.741000+02:00 +Internet,case-6982,2011-06-06 01:06:40+02:00,General,2011-06-24 09:37:47.317000+02:00,2011-06-06 01:06:40.020000+02:00,,Resource06,2011-04-09 01:06:40.020000+02:00,task-22079,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-26 09:47:09.922000+02:00 +Internet,case-6987,2011-06-02 01:06:40+02:00,General,2011-04-21 09:38:51.239000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource15,2011-04-07 01:06:40.020000+02:00,task-20566,Confirmation of receipt,complete,Group 1,Resource15,2011-04-18 09:52:36.194000+02:00 +Internet,case-6987,2011-06-02 01:06:40+02:00,General,2011-04-21 09:38:51.239000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource15,2011-04-07 01:06:40.020000+02:00,task-20734,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-04-18 09:52:59.077000+02:00 +Internet,case-6987,2011-06-02 01:06:40+02:00,General,2011-04-21 09:38:51.239000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource15,2011-04-07 01:06:40.020000+02:00,task-20736,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-04-18 09:53:10.803000+02:00 +Internet,case-6987,2011-06-02 01:06:40+02:00,General,2011-04-21 09:38:51.239000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource15,2011-04-07 01:06:40.020000+02:00,task-20735,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-18 09:53:24.166000+02:00 +Internet,case-6987,2011-06-02 01:06:40+02:00,General,2011-04-21 09:38:51.239000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource15,2011-04-07 01:06:40.020000+02:00,task-20738,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-18 09:53:40.989000+02:00 +Internet,case-6987,2011-06-02 01:06:40+02:00,General,2011-04-21 09:38:51.239000+02:00,2011-06-02 01:06:40.020000+02:00,,Resource15,2011-04-07 01:06:40.020000+02:00,task-20737,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-18 15:25:20.592000+02:00 +Internet,case-6988,2011-07-01 01:06:40+02:00,General,2011-07-07 15:01:56.078000+02:00,2011-07-01 01:06:40.020000+02:00,Group 5,Resource02,2011-04-09 01:06:40.020000+02:00,task-20572,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:01:09.032000+02:00 +Internet,case-6988,2011-07-01 01:06:40+02:00,General,2011-07-07 15:01:56.078000+02:00,2011-07-01 01:06:40.020000+02:00,Group 5,Resource02,2011-04-09 01:06:40.020000+02:00,task-21938,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-21 15:09:38.036000+02:00 +Internet,case-6988,2011-07-01 01:06:40+02:00,General,2011-07-07 15:01:56.078000+02:00,2011-07-01 01:06:40.020000+02:00,Group 5,Resource02,2011-04-09 01:06:40.020000+02:00,task-21937,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:09:53.753000+02:00 +Internet,case-6988,2011-07-01 01:06:40+02:00,General,2011-07-07 15:01:56.078000+02:00,2011-07-01 01:06:40.020000+02:00,Group 5,Resource02,2011-04-09 01:06:40.020000+02:00,task-21939,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-21 15:10:09.040000+02:00 +Internet,case-6988,2011-07-01 01:06:40+02:00,General,2011-07-07 15:01:56.078000+02:00,2011-07-01 01:06:40.020000+02:00,Group 5,Resource02,2011-04-09 01:06:40.020000+02:00,task-21940,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:10:42.016000+02:00 +Internet,case-6988,2011-07-01 01:06:40+02:00,General,2011-07-07 15:01:56.078000+02:00,2011-07-01 01:06:40.020000+02:00,Group 5,Resource02,2011-04-09 01:06:40.020000+02:00,task-21942,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-04-21 15:10:55.780000+02:00 +Internet,case-6989,2011-06-06 00:00:00+02:00,General,2011-05-19 10:53:50.047000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-20579,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 15:11:56.573000+02:00 +Internet,case-6989,2011-06-06 00:00:00+02:00,General,2011-05-19 10:53:50.047000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-22685,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 15:12:10.772000+02:00 +Internet,case-6989,2011-06-06 00:00:00+02:00,General,2011-05-19 10:53:50.047000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-22687,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 15:12:27.245000+02:00 +Internet,case-6989,2011-06-06 00:00:00+02:00,General,2011-05-19 10:53:50.047000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-22688,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:12:41.628000+02:00 +Internet,case-6989,2011-06-06 00:00:00+02:00,General,2011-05-19 10:53:50.047000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-22686,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-13 08:36:59.996000+02:00 +Internet,case-6989,2011-06-06 00:00:00+02:00,General,2011-05-19 10:53:50.047000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-24881,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-13 08:38:32.509000+02:00 +Internet,case-6989,2011-06-06 00:00:00+02:00,General,2011-05-19 10:53:50.047000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-24882,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-05-13 08:58:35.387000+02:00 +Internet,case-6989,2011-06-06 00:00:00+02:00,General,2011-05-19 10:53:50.047000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-24884,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-05-13 09:04:13.966000+02:00 +Internet,case-6989,2011-06-06 00:00:00+02:00,General,2011-05-19 10:53:50.047000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-24885,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-05-19 10:32:05.630000+02:00 +Internet,case-6989,2011-06-06 00:00:00+02:00,General,2011-05-19 10:53:50.047000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-25630,T15 Print document X request unlicensed,complete,Group 2,Resource11,2011-05-19 10:53:49.765000+02:00 +Internet,case-6990,2011-06-06 00:00:00+02:00,General,2011-05-31 08:25:25.998000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-20582,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 15:26:41.819000+02:00 +Internet,case-6990,2011-06-06 00:00:00+02:00,General,2011-05-31 08:25:25.998000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-22695,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 15:27:04.252000+02:00 +Internet,case-6990,2011-06-06 00:00:00+02:00,General,2011-05-31 08:25:25.998000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-22697,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 15:27:17.716000+02:00 +Internet,case-6990,2011-06-06 00:00:00+02:00,General,2011-05-31 08:25:25.998000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-22698,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:27:38.268000+02:00 +Internet,case-6990,2011-06-06 00:00:00+02:00,General,2011-05-31 08:25:25.998000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-22696,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-12 11:04:47.362000+02:00 +Internet,case-6990,2011-06-06 00:00:00+02:00,General,2011-05-31 08:25:25.998000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-24629,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 11:13:26.274000+02:00 +Internet,case-6993,2011-06-06 00:00:00+02:00,General,2011-06-06 00:00:00.020000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-20586,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 15:43:32.808000+02:00 +Internet,case-6993,2011-06-06 00:00:00+02:00,General,2011-06-06 00:00:00.020000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-22708,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 15:43:50.409000+02:00 +Internet,case-6993,2011-06-06 00:00:00+02:00,General,2011-06-06 00:00:00.020000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-22710,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 15:44:05.222000+02:00 +Internet,case-6993,2011-06-06 00:00:00+02:00,General,2011-06-06 00:00:00.020000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-22711,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 15:44:20.419000+02:00 +Internet,case-6993,2011-06-06 00:00:00+02:00,General,2011-06-06 00:00:00.020000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-22709,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-12 11:45:14.303000+02:00 +Internet,case-6993,2011-06-06 00:00:00+02:00,General,2011-06-06 00:00:00.020000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource11,2011-04-11 00:00:00.020000+02:00,task-24650,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 11:46:39.323000+02:00 +Internet,case-6995,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-20598,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 09:28:23.446000+02:00 +Internet,case-6995,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21279,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-04-20 09:30:47.189000+02:00 +Internet,case-6995,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21281,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-04-20 09:31:24.907000+02:00 +Internet,case-6995,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21282,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 09:32:09.423000+02:00 +Internet,case-6995,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21280,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-20 09:32:36.702000+02:00 +Internet,case-6995,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21284,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-20 09:33:51.880000+02:00 +Desk,case-6996,2011-05-17 00:00:00+02:00,General,2011-05-23 09:22:52.709000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource11,2011-03-22 00:00:00.010000+01:00,task-20605,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-19 09:10:57.850000+02:00 +Desk,case-6996,2011-05-17 00:00:00+02:00,General,2011-05-23 09:22:52.709000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource11,2011-03-22 00:00:00.010000+01:00,task-20980,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-19 09:11:16.019000+02:00 +Desk,case-6996,2011-05-17 00:00:00+02:00,General,2011-05-23 09:22:52.709000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource11,2011-03-22 00:00:00.010000+01:00,task-20983,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-19 09:11:30.897000+02:00 +Desk,case-6996,2011-05-17 00:00:00+02:00,General,2011-05-23 09:22:52.709000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource11,2011-03-22 00:00:00.010000+01:00,task-20985,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-19 09:11:42.866000+02:00 +Desk,case-6996,2011-05-17 00:00:00+02:00,General,2011-05-23 09:22:52.709000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource11,2011-03-22 00:00:00.010000+01:00,task-20981,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-19 09:12:15.048000+02:00 +Desk,case-6996,2011-05-17 00:00:00+02:00,General,2011-05-23 09:22:52.709000+02:00,2011-05-17 00:00:00.020000+02:00,,Resource11,2011-03-22 00:00:00.010000+01:00,task-20988,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-19 09:13:51.229000+02:00 +Internet,case-6997,2011-06-06 00:00:00+02:00,General,2011-05-31 07:51:26.263000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-20606,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 08:59:03.302000+02:00 +Internet,case-6997,2011-06-06 00:00:00+02:00,General,2011-05-31 07:51:26.263000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-22874,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 08:59:19.149000+02:00 +Internet,case-6997,2011-06-06 00:00:00+02:00,General,2011-05-31 07:51:26.263000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-22875,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 08:59:35.086000+02:00 +Internet,case-6997,2011-06-06 00:00:00+02:00,General,2011-05-31 07:51:26.263000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-22876,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 08:59:49.634000+02:00 +Internet,case-6997,2011-06-06 00:00:00+02:00,General,2011-05-31 07:51:26.263000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-22878,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 09:00:03.075000+02:00 +Internet,case-6997,2011-06-06 00:00:00+02:00,General,2011-05-31 07:51:26.263000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource01,2011-04-11 00:00:00.020000+02:00,task-22877,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 12:02:54.091000+02:00 +Desk,case-6998,2011-07-01 01:06:40+02:00,General,2011-06-20 15:22:29.132000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource13,2011-03-22 01:06:40.010000+01:00,task-20613,Confirmation of receipt,complete,EMPTY,Resource13,2011-04-20 07:56:26.031000+02:00 +Desk,case-6998,2011-07-01 01:06:40+02:00,General,2011-06-20 15:22:29.132000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource13,2011-03-22 01:06:40.010000+01:00,task-21246,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-04-20 07:57:15.696000+02:00 +Desk,case-6998,2011-07-01 01:06:40+02:00,General,2011-06-20 15:22:29.132000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource13,2011-03-22 01:06:40.010000+01:00,task-21245,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-04-20 07:57:32.308000+02:00 +Desk,case-6998,2011-07-01 01:06:40+02:00,General,2011-06-20 15:22:29.132000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource13,2011-03-22 01:06:40.010000+01:00,task-21247,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-04-20 07:58:18.620000+02:00 +Desk,case-6998,2011-07-01 01:06:40+02:00,General,2011-06-20 15:22:29.132000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource13,2011-03-22 01:06:40.010000+01:00,task-21248,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-04-27 09:06:36.518000+02:00 +Desk,case-6998,2011-07-01 01:06:40+02:00,General,2011-06-20 15:22:29.132000+02:00,2011-07-01 01:06:40.020000+02:00,,Resource13,2011-03-22 01:06:40.010000+01:00,task-22276,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-28 15:16:53.667000+02:00 +Internet,case-6999,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-20623,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 10:02:58.352000+02:00 +Internet,case-6999,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21302,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 10:07:43.048000+02:00 +Internet,case-6999,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21313,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 10:08:24.390000+02:00 +Internet,case-6999,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21314,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-20 10:09:30.245000+02:00 +Internet,case-6999,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21303,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-20 10:13:46.327000+02:00 +Internet,case-6999,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21323,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-20 10:15:01.207000+02:00 +Desk,case-7000,2011-05-18 01:06:40+02:00,General,2011-05-17 10:41:23.512000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource17,2011-03-23 01:06:40.010000+01:00,task-20635,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:55:07.600000+02:00 +Desk,case-7000,2011-05-18 01:06:40+02:00,General,2011-05-17 10:41:23.512000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource17,2011-03-23 01:06:40.010000+01:00,task-21964,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 18:31:56.107000+02:00 +Desk,case-7000,2011-05-18 01:06:40+02:00,General,2011-05-17 10:41:23.512000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource17,2011-03-23 01:06:40.010000+01:00,task-21975,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 18:32:28.746000+02:00 +Desk,case-7000,2011-05-18 01:06:40+02:00,General,2011-05-17 10:41:23.512000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource17,2011-03-23 01:06:40.010000+01:00,task-21976,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-04-21 18:32:39.008000+02:00 +Desk,case-7000,2011-05-18 01:06:40+02:00,General,2011-05-17 10:41:23.512000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource17,2011-03-23 01:06:40.010000+01:00,task-21965,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-21 18:32:48.153000+02:00 +Desk,case-7000,2011-05-18 01:06:40+02:00,General,2011-05-17 10:41:23.512000+02:00,2011-05-18 01:06:40.020000+02:00,,Resource17,2011-03-23 01:06:40.010000+01:00,task-21977,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-21 18:33:01.430000+02:00 +Internet,case-7002,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-20638,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 13:38:18.469000+02:00 +Internet,case-7002,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-21112,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-04-19 13:38:47.911000+02:00 +Internet,case-7002,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-21114,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 13:39:54.520000+02:00 +Internet,case-7002,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-21115,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 13:42:07.116000+02:00 +Internet,case-7002,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-21113,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-19 13:54:22.612000+02:00 +Internet,case-7002,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-21128,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-19 13:55:35.725000+02:00 +Internet,case-7004,2011-05-15 01:06:40+02:00,General,2011-05-04 08:00:41.113000+02:00,2011-05-15 01:06:40.020000+02:00,,Resource11,2011-03-24 01:06:40.010000+01:00,task-20641,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-19 10:23:00.736000+02:00 +Internet,case-7004,2011-05-15 01:06:40+02:00,General,2011-05-04 08:00:41.113000+02:00,2011-05-15 01:06:40.020000+02:00,,Resource11,2011-03-24 01:06:40.010000+01:00,task-21045,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-19 10:23:35.062000+02:00 +Internet,case-7004,2011-05-15 01:06:40+02:00,General,2011-05-04 08:00:41.113000+02:00,2011-05-15 01:06:40.020000+02:00,,Resource11,2011-03-24 01:06:40.010000+01:00,task-21048,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-19 10:23:57.921000+02:00 +Internet,case-7004,2011-05-15 01:06:40+02:00,General,2011-05-04 08:00:41.113000+02:00,2011-05-15 01:06:40.020000+02:00,,Resource11,2011-03-24 01:06:40.010000+01:00,task-21050,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-19 10:24:22.020000+02:00 +Internet,case-7004,2011-05-15 01:06:40+02:00,General,2011-05-04 08:00:41.113000+02:00,2011-05-15 01:06:40.020000+02:00,,Resource11,2011-03-24 01:06:40.010000+01:00,task-21046,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-19 10:24:53.065000+02:00 +Internet,case-7004,2011-05-15 01:06:40+02:00,General,2011-05-04 08:00:41.113000+02:00,2011-05-15 01:06:40.020000+02:00,,Resource11,2011-03-24 01:06:40.010000+01:00,task-21052,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-19 10:25:37.221000+02:00 +Internet,case-7005,2011-06-12 01:06:40+02:00,General,2011-06-06 14:43:46.515000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource11,2011-04-12 01:06:40.020000+02:00,task-20642,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 08:56:59.477000+02:00 +Internet,case-7005,2011-06-12 01:06:40+02:00,General,2011-06-06 14:43:46.515000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource11,2011-04-12 01:06:40.020000+02:00,task-22869,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 08:57:19.793000+02:00 +Internet,case-7005,2011-06-12 01:06:40+02:00,General,2011-06-06 14:43:46.515000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource11,2011-04-12 01:06:40.020000+02:00,task-22871,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 08:57:41.286000+02:00 +Internet,case-7005,2011-06-12 01:06:40+02:00,General,2011-06-06 14:43:46.515000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource11,2011-04-12 01:06:40.020000+02:00,task-22872,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 08:57:52.463000+02:00 +Internet,case-7005,2011-06-12 01:06:40+02:00,General,2011-06-06 14:43:46.515000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource11,2011-04-12 01:06:40.020000+02:00,task-22870,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 08:58:18.142000+02:00 +Internet,case-7005,2011-06-12 01:06:40+02:00,General,2011-06-06 14:43:46.515000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource11,2011-04-12 01:06:40.020000+02:00,task-22873,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 13:56:52.782000+02:00 +Internet,case-7008,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-20653,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:04:50.163000+02:00 +Internet,case-7008,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-21170,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-19 15:29:59.098000+02:00 +Internet,case-7008,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-21177,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-19 15:30:15.666000+02:00 +Internet,case-7008,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-21169,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:31:22.222000+02:00 +Internet,case-7008,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-21181,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:32:07.586000+02:00 +Internet,case-7008,2011-05-27 00:00:00+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource08,2011-04-01 00:00:00.020000+02:00,task-21182,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:33:31.443000+02:00 +Desk,case-7012,2011-05-19 00:00:00+02:00,General,2011-05-18 13:24:47.744000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource02,2011-03-24 00:00:00.010000+01:00,task-20662,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-20 09:56:02.184000+02:00 +Desk,case-7012,2011-05-19 00:00:00+02:00,General,2011-05-18 13:24:47.744000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource02,2011-03-24 00:00:00.010000+01:00,task-21296,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-04-20 09:56:25.776000+02:00 +Desk,case-7012,2011-05-19 00:00:00+02:00,General,2011-05-18 13:24:47.744000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource02,2011-03-24 00:00:00.010000+01:00,task-21298,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-20 09:58:32.879000+02:00 +Desk,case-7012,2011-05-19 00:00:00+02:00,General,2011-05-18 13:24:47.744000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource02,2011-03-24 00:00:00.010000+01:00,task-21300,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-20 09:58:50.381000+02:00 +Desk,case-7012,2011-05-19 00:00:00+02:00,General,2011-05-18 13:24:47.744000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource02,2011-03-24 00:00:00.010000+01:00,task-21297,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-20 10:03:16.476000+02:00 +Desk,case-7012,2011-05-19 00:00:00+02:00,General,2011-05-18 13:24:47.744000+02:00,2011-05-19 00:00:00.020000+02:00,,Resource02,2011-03-24 00:00:00.010000+01:00,task-21304,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-20 10:03:38.168000+02:00 +Internet,case-7014,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-20664,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:59:00.266000+02:00 +Internet,case-7014,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21204,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 15:59:41.587000+02:00 +Internet,case-7014,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21207,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 16:00:49.544000+02:00 +Internet,case-7014,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21212,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-19 16:01:30.609000+02:00 +Internet,case-7014,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21205,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-19 16:03:31.448000+02:00 +Internet,case-7014,2011-05-27 01:06:40+02:00,General,2011-05-17 00:00:00.020000+02:00,2011-05-27 01:06:40.020000+02:00,,Resource08,2011-04-01 01:06:40.020000+02:00,task-21215,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-19 16:04:01.405000+02:00 +Internet,case-7016,2011-05-20 01:06:40+02:00,General,2011-06-21 14:20:05.524000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource12,2011-03-25 01:06:40.010000+01:00,task-20668,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-02 12:46:29.233000+02:00 +Internet,case-7016,2011-05-20 01:06:40+02:00,General,2011-06-21 14:20:05.524000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource12,2011-03-25 01:06:40.010000+01:00,task-23112,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-02 13:34:32.918000+02:00 +Internet,case-7016,2011-05-20 01:06:40+02:00,General,2011-06-21 14:20:05.524000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource12,2011-03-25 01:06:40.010000+01:00,task-23145,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-02 13:34:59.433000+02:00 +Internet,case-7016,2011-05-20 01:06:40+02:00,General,2011-06-21 14:20:05.524000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource12,2011-03-25 01:06:40.010000+01:00,task-23146,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-05-02 13:37:26.441000+02:00 +Internet,case-7016,2011-05-20 01:06:40+02:00,General,2011-06-21 14:20:05.524000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource12,2011-03-25 01:06:40.010000+01:00,task-23113,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 13:45:23.536000+02:00 +Internet,case-7016,2011-05-20 01:06:40+02:00,General,2011-06-21 14:20:05.524000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource12,2011-03-25 01:06:40.010000+01:00,task-23159,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource12,2011-05-02 13:46:25.341000+02:00 +Internet,case-7016,2011-05-20 01:06:40+02:00,General,2011-06-21 14:20:05.524000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource12,2011-03-25 01:06:40.010000+01:00,task-23158,T08 Draft and send request for advice,complete,Group 1,Resource12,2011-05-02 13:47:15.573000+02:00 +Internet,case-7016,2011-05-20 01:06:40+02:00,General,2011-06-21 14:20:05.524000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource12,2011-03-25 01:06:40.010000+01:00,task-23160,T09-4 Process or receive external advice from party 4,complete,Group 1,Resource12,2011-05-02 13:47:38.397000+02:00 +Internet,case-7016,2011-05-20 01:06:40+02:00,General,2011-06-21 14:20:05.524000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource12,2011-03-25 01:06:40.010000+01:00,task-23161,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-02 13:48:15.157000+02:00 +Internet,case-7016,2011-05-20 01:06:40+02:00,General,2011-06-21 14:20:05.524000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource12,2011-03-25 01:06:40.010000+01:00,task-23162,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-02 13:48:51.151000+02:00 +Internet,case-7036,2011-06-05 01:06:40+02:00,General,2011-05-27 00:00:00.020000+02:00,2011-06-05 01:06:40.020000+02:00,,Resource09,2011-04-10 01:06:40.020000+02:00,task-20694,Confirmation of receipt,complete,EMPTY,admin2,2011-06-06 16:34:14.325000+02:00 +Internet,case-7037,2011-07-18 01:06:40+02:00,General,2011-07-19 13:15:08.506000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource15,2011-04-11 01:06:40.020000+02:00,task-20700,Confirmation of receipt,complete,EMPTY,Resource15,2011-04-18 13:37:20.938000+02:00 +Internet,case-7037,2011-07-18 01:06:40+02:00,General,2011-07-19 13:15:08.506000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource15,2011-04-11 01:06:40.020000+02:00,task-20817,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-04-18 13:37:38.054000+02:00 +Internet,case-7037,2011-07-18 01:06:40+02:00,General,2011-07-19 13:15:08.506000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource15,2011-04-11 01:06:40.020000+02:00,task-20819,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-04-18 13:37:50.086000+02:00 +Internet,case-7037,2011-07-18 01:06:40+02:00,General,2011-07-19 13:15:08.506000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource15,2011-04-11 01:06:40.020000+02:00,task-20820,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-18 15:13:03.793000+02:00 +Internet,case-7037,2011-07-18 01:06:40+02:00,General,2011-07-19 13:15:08.506000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource15,2011-04-11 01:06:40.020000+02:00,task-20818,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-28 11:59:24.001000+02:00 +Internet,case-7037,2011-07-18 01:06:40+02:00,General,2011-07-19 13:15:08.506000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource15,2011-04-11 01:06:40.020000+02:00,task-22580,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-28 11:59:37.948000+02:00 +Internet,case-7042,2011-06-07 01:06:40+02:00,General,2011-06-30 09:41:23.780000+02:00,2011-06-07 01:06:40.020000+02:00,,Resource09,2011-04-12 01:06:40.020000+02:00,task-20724,Confirmation of receipt,complete,EMPTY,admin2,2011-06-30 09:41:24.724000+02:00 +Internet,case-7043,2011-06-07 00:00:00+02:00,General,2011-05-30 12:56:19.706000+02:00,2011-06-07 00:00:00.020000+02:00,,Resource02,2011-04-12 00:00:00.020000+02:00,task-20732,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-20 15:06:51.527000+02:00 +Internet,case-7043,2011-06-07 00:00:00+02:00,General,2011-05-30 12:56:19.706000+02:00,2011-06-07 00:00:00.020000+02:00,,Resource02,2011-04-12 00:00:00.020000+02:00,task-21517,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-04-20 15:07:09.279000+02:00 +Internet,case-7043,2011-06-07 00:00:00+02:00,General,2011-05-30 12:56:19.706000+02:00,2011-06-07 00:00:00.020000+02:00,,Resource02,2011-04-12 00:00:00.020000+02:00,task-21519,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-20 15:07:23.977000+02:00 +Internet,case-7043,2011-06-07 00:00:00+02:00,General,2011-05-30 12:56:19.706000+02:00,2011-06-07 00:00:00.020000+02:00,,Resource02,2011-04-12 00:00:00.020000+02:00,task-21520,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-20 15:07:35.257000+02:00 +Internet,case-7043,2011-06-07 00:00:00+02:00,General,2011-05-30 12:56:19.706000+02:00,2011-06-07 00:00:00.020000+02:00,,Resource02,2011-04-12 00:00:00.020000+02:00,task-21518,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-21 09:08:09.585000+02:00 +Internet,case-7043,2011-06-07 00:00:00+02:00,General,2011-05-30 12:56:19.706000+02:00,2011-06-07 00:00:00.020000+02:00,,Resource02,2011-04-12 00:00:00.020000+02:00,task-21613,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-21 09:11:02.282000+02:00 +Internet,case-7045,2011-06-23 01:06:40+02:00,General,2011-06-22 16:04:10.860000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-04-12 01:06:40.020000+02:00,task-20758,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:38:27.803000+02:00 +Internet,case-7045,2011-06-23 01:06:40+02:00,General,2011-06-22 16:04:10.860000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-04-12 01:06:40.020000+02:00,task-21957,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-04-21 15:38:44.484000+02:00 +Internet,case-7045,2011-06-23 01:06:40+02:00,General,2011-06-22 16:04:10.860000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-04-12 01:06:40.020000+02:00,task-21956,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:39:55.285000+02:00 +Internet,case-7045,2011-06-23 01:06:40+02:00,General,2011-06-22 16:04:10.860000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-04-12 01:06:40.020000+02:00,task-21958,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-04-21 15:40:11.961000+02:00 +Internet,case-7045,2011-06-23 01:06:40+02:00,General,2011-06-22 16:04:10.860000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-04-12 01:06:40.020000+02:00,task-21959,T04 Determine confirmation of receipt,complete,EMPTY,Resource17,2011-04-21 15:41:04.015000+02:00 +Internet,case-7045,2011-06-23 01:06:40+02:00,General,2011-06-22 16:04:10.860000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource04,2011-04-12 01:06:40.020000+02:00,task-21961,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-04-21 15:41:20.605000+02:00 +Internet,case-7047,2011-06-08 00:00:00+02:00,General,2011-05-19 12:28:29.205000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-20769,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 08:54:36.776000+02:00 +Internet,case-7047,2011-06-08 00:00:00+02:00,General,2011-05-19 12:28:29.205000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22864,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 08:55:15.908000+02:00 +Internet,case-7047,2011-06-08 00:00:00+02:00,General,2011-05-19 12:28:29.205000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22866,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 08:55:32.081000+02:00 +Internet,case-7047,2011-06-08 00:00:00+02:00,General,2011-05-19 12:28:29.205000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22867,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 08:55:47.953000+02:00 +Internet,case-7047,2011-06-08 00:00:00+02:00,General,2011-05-19 12:28:29.205000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22865,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 08:56:10.221000+02:00 +Internet,case-7047,2011-06-08 00:00:00+02:00,General,2011-05-19 12:28:29.205000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22868,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 14:20:59.566000+02:00 +Internet,case-7048,2011-06-08 00:00:00+02:00,General,2011-05-19 14:07:15.448000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-20791,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 09:05:51.779000+02:00 +Internet,case-7048,2011-06-08 00:00:00+02:00,General,2011-05-19 14:07:15.448000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22880,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 09:06:11.004000+02:00 +Internet,case-7048,2011-06-08 00:00:00+02:00,General,2011-05-19 14:07:15.448000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22882,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 09:06:29.623000+02:00 +Internet,case-7048,2011-06-08 00:00:00+02:00,General,2011-05-19 14:07:15.448000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22883,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 09:06:39.589000+02:00 +Internet,case-7048,2011-06-08 00:00:00+02:00,General,2011-05-19 14:07:15.448000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22881,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 09:06:52.392000+02:00 +Internet,case-7048,2011-06-08 00:00:00+02:00,General,2011-05-19 14:07:15.448000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22884,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 14:30:23.939000+02:00 +Internet,case-7051,2011-06-08 01:06:40+02:00,General,2011-05-19 13:54:09.449000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-20806,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 10:21:53.200000+02:00 +Internet,case-7051,2011-06-08 01:06:40+02:00,General,2011-05-19 13:54:09.449000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-22966,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 10:22:25.428000+02:00 +Internet,case-7051,2011-06-08 01:06:40+02:00,General,2011-05-19 13:54:09.449000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-22968,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 10:22:40.005000+02:00 +Internet,case-7051,2011-06-08 01:06:40+02:00,General,2011-05-19 13:54:09.449000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-22970,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 10:22:53.654000+02:00 +Internet,case-7051,2011-06-08 01:06:40+02:00,General,2011-05-19 13:54:09.449000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-22967,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 10:23:05.243000+02:00 +Internet,case-7051,2011-06-08 01:06:40+02:00,General,2011-05-19 13:54:09.449000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-22971,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 15:39:41.777000+02:00 +Internet,case-7052,2011-06-08 00:00:00+02:00,General,2011-05-23 14:09:24.011000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-20809,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 09:14:09.273000+02:00 +Internet,case-7052,2011-06-08 00:00:00+02:00,General,2011-05-23 14:09:24.011000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22889,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 09:14:29.481000+02:00 +Internet,case-7052,2011-06-08 00:00:00+02:00,General,2011-05-23 14:09:24.011000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22888,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 09:14:50.121000+02:00 +Internet,case-7052,2011-06-08 00:00:00+02:00,General,2011-05-23 14:09:24.011000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22891,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 09:15:05.702000+02:00 +Internet,case-7052,2011-06-08 00:00:00+02:00,General,2011-05-23 14:09:24.011000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22892,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 09:15:21.277000+02:00 +Internet,case-7052,2011-06-08 00:00:00+02:00,General,2011-05-23 14:09:24.011000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource11,2011-04-13 00:00:00.020000+02:00,task-22890,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-05-12 15:28:54.187000+02:00 +Internet,case-7053,2011-06-08 00:00:00+02:00,General,2011-06-06 15:24:53.815000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource17,2011-04-13 00:00:00.020000+02:00,task-20810,Confirmation of receipt,complete,EMPTY,Resource17,2011-05-30 13:39:34.619000+02:00 +Internet,case-7053,2011-06-08 00:00:00+02:00,General,2011-06-06 15:24:53.815000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource17,2011-04-13 00:00:00.020000+02:00,task-27123,T02 Check confirmation of receipt,complete,Group 4,Resource17,2011-05-30 13:39:50.681000+02:00 +Internet,case-7053,2011-06-08 00:00:00+02:00,General,2011-06-06 15:24:53.815000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource17,2011-04-13 00:00:00.020000+02:00,task-27124,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-05-30 13:40:00.596000+02:00 +Internet,case-7053,2011-06-08 00:00:00+02:00,General,2011-06-06 15:24:53.815000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource17,2011-04-13 00:00:00.020000+02:00,task-27126,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-05-30 13:40:15.683000+02:00 +Internet,case-7053,2011-06-08 00:00:00+02:00,General,2011-06-06 15:24:53.815000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource17,2011-04-13 00:00:00.020000+02:00,task-27125,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-05-30 13:40:54.484000+02:00 +Internet,case-7053,2011-06-08 00:00:00+02:00,General,2011-06-06 15:24:53.815000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource17,2011-04-13 00:00:00.020000+02:00,task-27131,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-05-30 13:41:15.724000+02:00 +Internet,case-7058,2011-06-08 00:00:00+02:00,General,2011-05-31 14:07:43.182000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource15,2011-04-13 00:00:00.020000+02:00,task-20824,Confirmation of receipt,complete,EMPTY,Resource15,2011-04-21 08:57:21.371000+02:00 +Internet,case-7058,2011-06-08 00:00:00+02:00,General,2011-05-31 14:07:43.182000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource15,2011-04-13 00:00:00.020000+02:00,task-21597,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-04-21 08:57:36.097000+02:00 +Internet,case-7058,2011-06-08 00:00:00+02:00,General,2011-05-31 14:07:43.182000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource15,2011-04-13 00:00:00.020000+02:00,task-21599,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-04-21 08:57:50.896000+02:00 +Internet,case-7058,2011-06-08 00:00:00+02:00,General,2011-05-31 14:07:43.182000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource15,2011-04-13 00:00:00.020000+02:00,task-21598,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-21 08:58:43.039000+02:00 +Internet,case-7058,2011-06-08 00:00:00+02:00,General,2011-05-31 14:07:43.182000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource15,2011-04-13 00:00:00.020000+02:00,task-21602,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-21 09:01:27.523000+02:00 +Internet,case-7058,2011-06-08 00:00:00+02:00,General,2011-05-31 14:07:43.182000+02:00,2011-06-08 00:00:00.020000+02:00,,Resource15,2011-04-13 00:00:00.020000+02:00,task-21601,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-27 09:02:14.797000+02:00 +Internet,case-7060,2011-06-09 01:06:40+02:00,General,2011-09-14 16:00:50.214000+02:00,2011-06-09 01:06:40.020000+02:00,Group 5,Resource12,2011-04-14 01:06:40.020000+02:00,task-20831,Confirmation of receipt,complete,EMPTY,Resource18,2011-05-02 12:17:29.209000+02:00 +Internet,case-7060,2011-06-09 01:06:40+02:00,General,2011-09-14 16:00:50.214000+02:00,2011-06-09 01:06:40.020000+02:00,Group 5,Resource12,2011-04-14 01:06:40.020000+02:00,task-23060,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-05-02 12:17:47.776000+02:00 +Internet,case-7060,2011-06-09 01:06:40+02:00,General,2011-09-14 16:00:50.214000+02:00,2011-06-09 01:06:40.020000+02:00,Group 5,Resource12,2011-04-14 01:06:40.020000+02:00,task-23062,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-05-02 12:18:30.463000+02:00 +Internet,case-7060,2011-06-09 01:06:40+02:00,General,2011-09-14 16:00:50.214000+02:00,2011-06-09 01:06:40.020000+02:00,Group 5,Resource12,2011-04-14 01:06:40.020000+02:00,task-23063,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-05-02 12:18:45.695000+02:00 +Internet,case-7060,2011-06-09 01:06:40+02:00,General,2011-09-14 16:00:50.214000+02:00,2011-06-09 01:06:40.020000+02:00,Group 5,Resource12,2011-04-14 01:06:40.020000+02:00,task-23061,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-27 09:37:57.009000+02:00 +Internet,case-7060,2011-06-09 01:06:40+02:00,General,2011-09-14 16:00:50.214000+02:00,2011-06-09 01:06:40.020000+02:00,Group 5,Resource12,2011-04-14 01:06:40.020000+02:00,task-26636,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-27 09:38:19.768000+02:00 +Internet,case-7079,2011-06-09 00:00:00+02:00,General,2011-05-30 14:47:00.868000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource02,2011-04-14 00:00:00.020000+02:00,task-20941,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-21 16:37:33.380000+02:00 +Internet,case-7079,2011-06-09 00:00:00+02:00,General,2011-05-30 14:47:00.868000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource02,2011-04-14 00:00:00.020000+02:00,task-21969,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-04-21 16:37:55.193000+02:00 +Internet,case-7079,2011-06-09 00:00:00+02:00,General,2011-05-30 14:47:00.868000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource02,2011-04-14 00:00:00.020000+02:00,task-21971,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-21 16:47:33.947000+02:00 +Internet,case-7079,2011-06-09 00:00:00+02:00,General,2011-05-30 14:47:00.868000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource02,2011-04-14 00:00:00.020000+02:00,task-21972,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-21 16:47:43.266000+02:00 +Internet,case-7079,2011-06-09 00:00:00+02:00,General,2011-05-30 14:47:00.868000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource02,2011-04-14 00:00:00.020000+02:00,task-21970,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-21 16:47:56.392000+02:00 +Internet,case-7079,2011-06-09 00:00:00+02:00,General,2011-05-30 14:47:00.868000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource02,2011-04-14 00:00:00.020000+02:00,task-21973,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-26 08:25:19.554000+02:00 +Internet,case-7080,2011-06-08 01:06:40+02:00,General,2011-05-19 14:11:26.431000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-20943,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 09:22:38.942000+02:00 +Internet,case-7080,2011-06-08 01:06:40+02:00,General,2011-05-19 14:11:26.431000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-22908,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 09:23:01.252000+02:00 +Internet,case-7080,2011-06-08 01:06:40+02:00,General,2011-05-19 14:11:26.431000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-22910,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 09:23:18.843000+02:00 +Internet,case-7080,2011-06-08 01:06:40+02:00,General,2011-05-19 14:11:26.431000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-22911,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 09:23:39.517000+02:00 +Internet,case-7080,2011-06-08 01:06:40+02:00,General,2011-05-19 14:11:26.431000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-22909,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 09:23:53.482000+02:00 +Internet,case-7080,2011-06-08 01:06:40+02:00,General,2011-05-19 14:11:26.431000+02:00,2011-06-08 01:06:40.020000+02:00,,Resource11,2011-04-13 01:06:40.020000+02:00,task-22912,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-12 15:26:56.600000+02:00 +Internet,case-7083,2011-06-10 01:06:40+02:00,General,2011-06-09 16:14:51.712000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource14,2011-04-15 01:06:40.020000+02:00,task-21002,Confirmation of receipt,complete,EMPTY,Resource14,2011-05-09 10:12:35.003000+02:00 +Internet,case-7083,2011-06-10 01:06:40+02:00,General,2011-06-09 16:14:51.712000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource14,2011-04-15 01:06:40.020000+02:00,task-23906,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-09 10:13:48.243000+02:00 +Internet,case-7083,2011-06-10 01:06:40+02:00,General,2011-06-09 16:14:51.712000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource14,2011-04-15 01:06:40.020000+02:00,task-23908,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-09 10:14:12.584000+02:00 +Internet,case-7083,2011-06-10 01:06:40+02:00,General,2011-06-09 16:14:51.712000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource14,2011-04-15 01:06:40.020000+02:00,task-23909,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-09 10:14:35.986000+02:00 +Internet,case-7083,2011-06-10 01:06:40+02:00,General,2011-06-09 16:14:51.712000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource14,2011-04-15 01:06:40.020000+02:00,task-23907,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-09 12:16:30.342000+02:00 +Internet,case-7083,2011-06-10 01:06:40+02:00,General,2011-06-09 16:14:51.712000+02:00,2011-06-10 01:06:40.020000+02:00,,Resource14,2011-04-15 01:06:40.020000+02:00,task-23981,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-09 12:17:54.990000+02:00 +Internet,case-7084,2011-06-13 00:00:00+02:00,General,2011-06-09 17:50:00.750000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-21021,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 10:46:52.264000+02:00 +Internet,case-7084,2011-06-13 00:00:00+02:00,General,2011-06-09 17:50:00.750000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-22985,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 10:47:12.107000+02:00 +Internet,case-7084,2011-06-13 00:00:00+02:00,General,2011-06-09 17:50:00.750000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-22987,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 10:47:26.664000+02:00 +Internet,case-7084,2011-06-13 00:00:00+02:00,General,2011-06-09 17:50:00.750000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-22988,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 10:47:37.350000+02:00 +Internet,case-7084,2011-06-13 00:00:00+02:00,General,2011-06-09 17:50:00.750000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-22986,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 10:47:49.397000+02:00 +Internet,case-7084,2011-06-13 00:00:00+02:00,General,2011-06-09 17:50:00.750000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-22989,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-13 09:13:14.833000+02:00 +Internet,case-7085,2011-06-14 00:00:00+02:00,General,2011-08-18 08:47:26.880000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource21,2011-04-19 00:00:00.020000+02:00,task-21027,Confirmation of receipt,complete,Group 1,Resource21,2011-04-19 10:32:59.775000+02:00 +Internet,case-7085,2011-06-14 00:00:00+02:00,General,2011-08-18 08:47:26.880000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource21,2011-04-19 00:00:00.020000+02:00,task-21055,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-04-19 10:33:29.895000+02:00 +Internet,case-7085,2011-06-14 00:00:00+02:00,General,2011-08-18 08:47:26.880000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource21,2011-04-19 00:00:00.020000+02:00,task-21058,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-04-19 10:34:54.325000+02:00 +Internet,case-7085,2011-06-14 00:00:00+02:00,General,2011-08-18 08:47:26.880000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource21,2011-04-19 00:00:00.020000+02:00,task-21059,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-04-19 10:35:43.253000+02:00 +Internet,case-7085,2011-06-14 00:00:00+02:00,General,2011-08-18 08:47:26.880000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource21,2011-04-19 00:00:00.020000+02:00,task-21056,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-05-18 09:25:14.945000+02:00 +Internet,case-7085,2011-06-14 00:00:00+02:00,General,2011-08-18 08:47:26.880000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource21,2011-04-19 00:00:00.020000+02:00,task-25345,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-05-18 09:25:37.587000+02:00 +Internet,case-7087,2011-05-31 01:06:40+02:00,General,,2011-05-31 01:06:40.020000+02:00,Group 5,Resource14,2011-04-05 01:06:40.020000+02:00,task-21075,Confirmation of receipt,complete,EMPTY,Resource15,2011-04-20 11:21:34.857000+02:00 +Internet,case-7087,2011-05-31 01:06:40+02:00,General,,2011-05-31 01:06:40.020000+02:00,Group 5,Resource14,2011-04-05 01:06:40.020000+02:00,task-21396,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-04-20 11:21:57.216000+02:00 +Internet,case-7087,2011-05-31 01:06:40+02:00,General,,2011-05-31 01:06:40.020000+02:00,Group 5,Resource14,2011-04-05 01:06:40.020000+02:00,task-21398,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-04-20 11:22:34.430000+02:00 +Internet,case-7087,2011-05-31 01:06:40+02:00,General,,2011-05-31 01:06:40.020000+02:00,Group 5,Resource14,2011-04-05 01:06:40.020000+02:00,task-21397,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-04-20 11:24:35.924000+02:00 +Internet,case-7087,2011-05-31 01:06:40+02:00,General,,2011-05-31 01:06:40.020000+02:00,Group 5,Resource14,2011-04-05 01:06:40.020000+02:00,task-21400,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-04-20 11:27:11.309000+02:00 +Internet,case-7087,2011-05-31 01:06:40+02:00,General,,2011-05-31 01:06:40.020000+02:00,Group 5,Resource14,2011-04-05 01:06:40.020000+02:00,task-21399,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-27 08:59:32.688000+02:00 +Internet,case-7089,2011-04-22 01:06:40+02:00,General,2011-04-21 15:28:13.241000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource18,2011-04-14 01:06:40.020000+02:00,task-21093,Confirmation of receipt,complete,Group 1,admin3,2011-04-19 13:53:36.217000+02:00 +Internet,case-7089,2011-04-22 01:06:40+02:00,General,2011-04-21 15:28:13.241000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource18,2011-04-14 01:06:40.020000+02:00,task-21126,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-04-19 15:54:11.251000+02:00 +Internet,case-7089,2011-04-22 01:06:40+02:00,General,2011-04-21 15:28:13.241000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource18,2011-04-14 01:06:40.020000+02:00,task-21127,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-04-19 15:54:25.939000+02:00 +Internet,case-7089,2011-04-22 01:06:40+02:00,General,2011-04-21 15:28:13.241000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource18,2011-04-14 01:06:40.020000+02:00,task-21188,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-04-19 15:54:37.365000+02:00 +Internet,case-7089,2011-04-22 01:06:40+02:00,General,2011-04-21 15:28:13.241000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource18,2011-04-14 01:06:40.020000+02:00,task-21191,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-04-19 15:54:49.139000+02:00 +Internet,case-7089,2011-04-22 01:06:40+02:00,General,2011-04-21 15:28:13.241000+02:00,2011-04-21 01:06:40.020000+02:00,,Resource18,2011-04-14 01:06:40.020000+02:00,task-21190,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-04-19 15:56:06.460000+02:00 +Internet,case-709,2010-11-26 00:00:00+01:00,General,2011-08-18 08:41:39.734000+02:00,2010-11-26 00:00:00.010000+01:00,,Resource21,2010-10-01 00:00:00.020000+02:00,task-3,Confirmation of receipt,complete,Group 1,Resource21,2010-11-03 10:57:52.384000+01:00 +Internet,case-709,2010-11-26 00:00:00+01:00,General,2011-08-18 08:41:39.734000+02:00,2010-11-26 00:00:00.010000+01:00,,Resource21,2010-10-01 00:00:00.020000+02:00,task-803,T02 Check confirmation of receipt,complete,Group 4,Resource21,2010-11-03 10:59:58.965000+01:00 +Internet,case-709,2010-11-26 00:00:00+01:00,General,2011-08-18 08:41:39.734000+02:00,2010-11-26 00:00:00.010000+01:00,,Resource21,2010-10-01 00:00:00.020000+02:00,task-808,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2010-11-03 11:00:23.028000+01:00 +Internet,case-709,2010-11-26 00:00:00+01:00,General,2011-08-18 08:41:39.734000+02:00,2010-11-26 00:00:00.010000+01:00,,Resource21,2010-10-01 00:00:00.020000+02:00,task-809,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2010-11-03 11:00:57.724000+01:00 +Internet,case-709,2010-11-26 00:00:00+01:00,General,2011-08-18 08:41:39.734000+02:00,2010-11-26 00:00:00.010000+01:00,,Resource21,2010-10-01 00:00:00.020000+02:00,task-804,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2010-11-09 14:33:13.103000+01:00 +Internet,case-709,2010-11-26 00:00:00+01:00,General,2011-08-18 08:41:39.734000+02:00,2010-11-26 00:00:00.010000+01:00,,Resource21,2010-10-01 00:00:00.020000+02:00,task-1281,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource21,2010-11-09 14:33:55.830000+01:00 +Internet,case-709,2010-11-26 00:00:00+01:00,General,2011-08-18 08:41:39.734000+02:00,2010-11-26 00:00:00.010000+01:00,,Resource21,2010-10-01 00:00:00.020000+02:00,task-1282,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2010-11-09 14:34:28.410000+01:00 +Internet,case-709,2010-11-26 00:00:00+01:00,General,2011-08-18 08:41:39.734000+02:00,2010-11-26 00:00:00.010000+01:00,,Resource21,2010-10-01 00:00:00.020000+02:00,task-1283,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2010-11-09 14:34:55.347000+01:00 +Internet,case-7091,2011-05-24 01:06:40+02:00,General,2011-05-20 16:28:57.947000+02:00,2011-05-24 01:06:40.020000+02:00,,Resource04,2011-03-29 01:06:40.020000+02:00,task-21158,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-04 12:19:12.020000+02:00 +Internet,case-7091,2011-05-24 01:06:40+02:00,General,2011-05-20 16:28:57.947000+02:00,2011-05-24 01:06:40.020000+02:00,,Resource04,2011-03-29 01:06:40.020000+02:00,task-23717,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-04 12:51:51.822000+02:00 +Internet,case-7091,2011-05-24 01:06:40+02:00,General,2011-05-20 16:28:57.947000+02:00,2011-05-24 01:06:40.020000+02:00,,Resource04,2011-03-29 01:06:40.020000+02:00,task-23736,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-04 12:52:03.911000+02:00 +Internet,case-7091,2011-05-24 01:06:40+02:00,General,2011-05-20 16:28:57.947000+02:00,2011-05-24 01:06:40.020000+02:00,,Resource04,2011-03-29 01:06:40.020000+02:00,task-23737,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-04 12:52:15.390000+02:00 +Internet,case-7091,2011-05-24 01:06:40+02:00,General,2011-05-20 16:28:57.947000+02:00,2011-05-24 01:06:40.020000+02:00,,Resource04,2011-03-29 01:06:40.020000+02:00,task-23718,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-04 12:52:31.157000+02:00 +Internet,case-7091,2011-05-24 01:06:40+02:00,General,2011-05-20 16:28:57.947000+02:00,2011-05-24 01:06:40.020000+02:00,,Resource04,2011-03-29 01:06:40.020000+02:00,task-23739,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-04 12:52:49.053000+02:00 +Internet,case-7092,2011-05-26 00:00:00+02:00,General,2011-05-11 10:29:02.178000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21165,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-27 11:05:46.277000+02:00 +Internet,case-7092,2011-05-26 00:00:00+02:00,General,2011-05-11 10:29:02.178000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-22345,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-27 11:06:36.211000+02:00 +Internet,case-7092,2011-05-26 00:00:00+02:00,General,2011-05-11 10:29:02.178000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-22350,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-27 11:06:49.973000+02:00 +Internet,case-7092,2011-05-26 00:00:00+02:00,General,2011-05-11 10:29:02.178000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-22351,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-27 11:16:21.105000+02:00 +Internet,case-7092,2011-05-26 00:00:00+02:00,General,2011-05-11 10:29:02.178000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-22346,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-27 13:06:46.444000+02:00 +Internet,case-7092,2011-05-26 00:00:00+02:00,General,2011-05-11 10:29:02.178000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-22389,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-27 13:07:08.178000+02:00 +Internet,case-7093,2011-05-26 00:00:00+02:00,General,2011-05-11 10:20:22.501000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-21168,Confirmation of receipt,complete,EMPTY,Resource01,2011-04-28 09:26:03.180000+02:00 +Internet,case-7093,2011-05-26 00:00:00+02:00,General,2011-05-11 10:20:22.501000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-22485,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-04-28 09:26:17.585000+02:00 +Internet,case-7093,2011-05-26 00:00:00+02:00,General,2011-05-11 10:20:22.501000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-22487,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-04-28 09:26:33.419000+02:00 +Internet,case-7093,2011-05-26 00:00:00+02:00,General,2011-05-11 10:20:22.501000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-22488,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-04-28 09:26:44.462000+02:00 +Internet,case-7093,2011-05-26 00:00:00+02:00,General,2011-05-11 10:20:22.501000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-22486,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-04-28 09:44:31.203000+02:00 +Internet,case-7093,2011-05-26 00:00:00+02:00,General,2011-05-11 10:20:22.501000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource11,2011-03-31 00:00:00.020000+02:00,task-22491,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-04-28 09:44:45.480000+02:00 +Internet,case-7094,2011-05-26 00:00:00+02:00,General,2011-06-16 14:45:04.264000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource05,2011-03-31 00:00:00.020000+02:00,task-21171,Confirmation of receipt,complete,EMPTY,Resource05,2011-05-02 09:48:02.020000+02:00 +Internet,case-7094,2011-05-26 00:00:00+02:00,General,2011-06-16 14:45:04.264000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource05,2011-03-31 00:00:00.020000+02:00,task-22919,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-02 09:51:15.270000+02:00 +Internet,case-7094,2011-05-26 00:00:00+02:00,General,2011-06-16 14:45:04.264000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource05,2011-03-31 00:00:00.020000+02:00,task-22921,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-02 09:51:37.777000+02:00 +Internet,case-7094,2011-05-26 00:00:00+02:00,General,2011-06-16 14:45:04.264000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource05,2011-03-31 00:00:00.020000+02:00,task-22922,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-05-02 09:51:58.263000+02:00 +Internet,case-7094,2011-05-26 00:00:00+02:00,General,2011-06-16 14:45:04.264000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource05,2011-03-31 00:00:00.020000+02:00,task-22920,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-02 09:52:19.979000+02:00 +Internet,case-7094,2011-05-26 00:00:00+02:00,General,2011-06-16 14:45:04.264000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource05,2011-03-31 00:00:00.020000+02:00,task-22924,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-02 09:53:19.482000+02:00 +Internet,case-7094,2011-05-26 00:00:00+02:00,General,2011-06-16 14:45:04.264000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource05,2011-03-31 00:00:00.020000+02:00,task-22927,T16 Report reasons to hold request,complete,Group 1,Resource05,2011-05-02 09:56:11.751000+02:00 +Internet,case-7094,2011-05-26 00:00:00+02:00,General,2011-06-16 14:45:04.264000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource05,2011-03-31 00:00:00.020000+02:00,task-22931,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-05-02 09:57:37.605000+02:00 +Internet,case-7094,2011-05-26 00:00:00+02:00,General,2011-06-16 14:45:04.264000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource05,2011-03-31 00:00:00.020000+02:00,task-22934,T19 Determine report Y to stop indication,complete,Group 3,Resource05,2011-05-02 09:59:10.319000+02:00 +Internet,case-7094,2011-05-26 00:00:00+02:00,General,2011-06-16 14:45:04.264000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource05,2011-03-31 00:00:00.020000+02:00,task-22940,T20 Print report Y to stop indication,complete,Group 2,Resource05,2011-05-02 09:59:23.761000+02:00 +Internet,case-7108,2011-06-12 00:00:00+02:00,General,2011-06-09 16:52:12.437000+02:00,2011-06-12 00:00:00.020000+02:00,,Resource14,2011-04-17 00:00:00.020000+02:00,task-21254,Confirmation of receipt,complete,EMPTY,Resource14,2011-05-09 10:18:51.421000+02:00 +Internet,case-7108,2011-06-12 00:00:00+02:00,General,2011-06-09 16:52:12.437000+02:00,2011-06-12 00:00:00.020000+02:00,,Resource14,2011-04-17 00:00:00.020000+02:00,task-23912,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-09 10:19:15.536000+02:00 +Internet,case-7108,2011-06-12 00:00:00+02:00,General,2011-06-09 16:52:12.437000+02:00,2011-06-12 00:00:00.020000+02:00,,Resource14,2011-04-17 00:00:00.020000+02:00,task-23914,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-09 10:19:33.719000+02:00 +Internet,case-7108,2011-06-12 00:00:00+02:00,General,2011-06-09 16:52:12.437000+02:00,2011-06-12 00:00:00.020000+02:00,,Resource14,2011-04-17 00:00:00.020000+02:00,task-23915,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-09 10:19:53.297000+02:00 +Internet,case-7108,2011-06-12 00:00:00+02:00,General,2011-06-09 16:52:12.437000+02:00,2011-06-12 00:00:00.020000+02:00,,Resource14,2011-04-17 00:00:00.020000+02:00,task-23913,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-09 12:11:03.404000+02:00 +Internet,case-7108,2011-06-12 00:00:00+02:00,General,2011-06-09 16:52:12.437000+02:00,2011-06-12 00:00:00.020000+02:00,,Resource14,2011-04-17 00:00:00.020000+02:00,task-23969,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-09 12:11:22.902000+02:00 +Internet,case-7110,2011-04-12 00:00:00+02:00,General,2011-04-20 12:40:53.709000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource06,2011-02-15 00:00:00.010000+01:00,task-21283,Confirmation of receipt,complete,EMPTY,Resource06,2011-04-20 10:21:47.949000+02:00 +Internet,case-7110,2011-04-12 00:00:00+02:00,General,2011-04-20 12:40:53.709000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource06,2011-02-15 00:00:00.010000+01:00,task-21336,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-04-20 10:22:06.093000+02:00 +Internet,case-7110,2011-04-12 00:00:00+02:00,General,2011-04-20 12:40:53.709000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource06,2011-02-15 00:00:00.010000+01:00,task-21339,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-04-20 10:22:36.294000+02:00 +Internet,case-7110,2011-04-12 00:00:00+02:00,General,2011-04-20 12:40:53.709000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource06,2011-02-15 00:00:00.010000+01:00,task-21343,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-04-20 10:22:55.418000+02:00 +Internet,case-7110,2011-04-12 00:00:00+02:00,General,2011-04-20 12:40:53.709000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource06,2011-02-15 00:00:00.010000+01:00,task-21337,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-04-20 10:23:07.406000+02:00 +Internet,case-7110,2011-04-12 00:00:00+02:00,General,2011-04-20 12:40:53.709000+02:00,2011-04-12 00:00:00.020000+02:00,,Resource06,2011-02-15 00:00:00.010000+01:00,task-21345,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-04-20 10:23:41.874000+02:00 +e-mail,case-7112,2011-05-20 01:06:40+02:00,General,2011-05-24 15:00:51.630000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource25,2011-03-25 01:06:40.010000+01:00,task-21294,Confirmation of receipt,complete,EMPTY,Resource25,2011-05-18 15:11:02.512000+02:00 +e-mail,case-7112,2011-05-20 01:06:40+02:00,General,2011-05-24 15:00:51.630000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource25,2011-03-25 01:06:40.010000+01:00,task-25550,T02 Check confirmation of receipt,complete,EMPTY,Resource25,2011-05-18 15:11:47.024000+02:00 +e-mail,case-7112,2011-05-20 01:06:40+02:00,General,2011-05-24 15:00:51.630000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource25,2011-03-25 01:06:40.010000+01:00,task-25552,T04 Determine confirmation of receipt,complete,EMPTY,Resource25,2011-05-18 15:12:53.203000+02:00 +e-mail,case-7112,2011-05-20 01:06:40+02:00,General,2011-05-24 15:00:51.630000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource25,2011-03-25 01:06:40.010000+01:00,task-25554,T05 Print and send confirmation of receipt,complete,Group 2,Resource25,2011-05-18 15:13:20.248000+02:00 +e-mail,case-7112,2011-05-20 01:06:40+02:00,General,2011-05-24 15:00:51.630000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource25,2011-03-25 01:06:40.010000+01:00,task-25551,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-05-18 15:18:52.187000+02:00 +e-mail,case-7112,2011-05-20 01:06:40+02:00,General,2011-05-24 15:00:51.630000+02:00,2011-05-20 01:06:40.020000+02:00,,Resource25,2011-03-25 01:06:40.010000+01:00,task-25555,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2011-05-18 15:20:43.126000+02:00 +Desk,case-7114,2011-05-27 00:00:00+02:00,General,2011-08-30 10:59:41.122000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-21378,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-03 15:18:22.690000+02:00 +Desk,case-7114,2011-05-27 00:00:00+02:00,General,2011-08-30 10:59:41.122000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-23534,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-03 15:18:51.126000+02:00 +Desk,case-7114,2011-05-27 00:00:00+02:00,General,2011-08-30 10:59:41.122000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-23536,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-03 15:19:18.200000+02:00 +Desk,case-7114,2011-05-27 00:00:00+02:00,General,2011-08-30 10:59:41.122000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-23538,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-05-03 15:19:36.390000+02:00 +Desk,case-7114,2011-05-27 00:00:00+02:00,General,2011-08-30 10:59:41.122000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-23535,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-03 15:20:30.072000+02:00 +Desk,case-7114,2011-05-27 00:00:00+02:00,General,2011-08-30 10:59:41.122000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-23539,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-03 15:20:53.315000+02:00 +Desk,case-7117,2011-05-27 00:00:00+02:00,General,2011-08-30 09:21:52.980000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-21441,Confirmation of receipt,complete,EMPTY,Resource12,2011-06-06 14:32:52.471000+02:00 +Desk,case-7117,2011-05-27 00:00:00+02:00,General,2011-08-30 09:21:52.980000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-27866,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-06-06 14:33:35.093000+02:00 +Desk,case-7117,2011-05-27 00:00:00+02:00,General,2011-08-30 09:21:52.980000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-27870,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-06-06 14:33:56.060000+02:00 +Desk,case-7117,2011-05-27 00:00:00+02:00,General,2011-08-30 09:21:52.980000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-27867,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-06-06 14:34:33.716000+02:00 +Desk,case-7117,2011-05-27 00:00:00+02:00,General,2011-08-30 09:21:52.980000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-27873,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-06-06 14:36:36.050000+02:00 +Desk,case-7117,2011-05-27 00:00:00+02:00,General,2011-08-30 09:21:52.980000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource12,2011-04-01 00:00:00.020000+02:00,task-27872,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-24 14:29:16.806000+02:00 +Internet,case-7119,2011-05-26 00:00:00+02:00,General,2011-05-25 11:56:19.436000+02:00,2011-05-26 00:00:00.020000+02:00,,admin1,2011-03-31 00:00:00.020000+02:00,task-21464,Confirmation of receipt,complete,EMPTY,Resource05,2011-05-02 11:54:04.911000+02:00 +Internet,case-7119,2011-05-26 00:00:00+02:00,General,2011-05-25 11:56:19.436000+02:00,2011-05-26 00:00:00.020000+02:00,,admin1,2011-03-31 00:00:00.020000+02:00,task-23025,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-02 11:54:21.679000+02:00 +Internet,case-7119,2011-05-26 00:00:00+02:00,General,2011-05-25 11:56:19.436000+02:00,2011-05-26 00:00:00.020000+02:00,,admin1,2011-03-31 00:00:00.020000+02:00,task-23027,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-02 11:54:35.131000+02:00 +Internet,case-7119,2011-05-26 00:00:00+02:00,General,2011-05-25 11:56:19.436000+02:00,2011-05-26 00:00:00.020000+02:00,,admin1,2011-03-31 00:00:00.020000+02:00,task-23028,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-05-02 11:54:48.496000+02:00 +Internet,case-7119,2011-05-26 00:00:00+02:00,General,2011-05-25 11:56:19.436000+02:00,2011-05-26 00:00:00.020000+02:00,,admin1,2011-03-31 00:00:00.020000+02:00,task-23026,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-02 11:56:32.814000+02:00 +Internet,case-7119,2011-05-26 00:00:00+02:00,General,2011-05-25 11:56:19.436000+02:00,2011-05-26 00:00:00.020000+02:00,,admin1,2011-03-31 00:00:00.020000+02:00,task-23029,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-02 11:56:48.823000+02:00 +Internet,case-7120,2011-05-18 00:00:00+02:00,General,2011-05-13 14:57:38.805000+02:00,2011-05-18 00:00:00.020000+02:00,,Resource14,2011-03-22 00:00:00.010000+01:00,task-21484,Confirmation of receipt,complete,EMPTY,Resource14,2011-05-02 12:30:02.570000+02:00 +Internet,case-7120,2011-05-18 00:00:00+02:00,General,2011-05-13 14:57:38.805000+02:00,2011-05-18 00:00:00.020000+02:00,,Resource14,2011-03-22 00:00:00.010000+01:00,task-23072,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-02 12:30:37.400000+02:00 +Internet,case-7120,2011-05-18 00:00:00+02:00,General,2011-05-13 14:57:38.805000+02:00,2011-05-18 00:00:00.020000+02:00,,Resource14,2011-03-22 00:00:00.010000+01:00,task-23077,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-02 12:31:24.822000+02:00 +Internet,case-7120,2011-05-18 00:00:00+02:00,General,2011-05-13 14:57:38.805000+02:00,2011-05-18 00:00:00.020000+02:00,,Resource14,2011-03-22 00:00:00.010000+01:00,task-23078,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-02 12:31:39.966000+02:00 +Internet,case-7120,2011-05-18 00:00:00+02:00,General,2011-05-13 14:57:38.805000+02:00,2011-05-18 00:00:00.020000+02:00,,Resource14,2011-03-22 00:00:00.010000+01:00,task-23073,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-02 12:31:51.678000+02:00 +Internet,case-7120,2011-05-18 00:00:00+02:00,General,2011-05-13 14:57:38.805000+02:00,2011-05-18 00:00:00.020000+02:00,,Resource14,2011-03-22 00:00:00.010000+01:00,task-23080,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-02 12:32:08.106000+02:00 +Internet,case-7129,2011-06-14 01:06:40+02:00,General,2011-06-17 08:57:46.186000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource13,2011-04-19 01:06:40.020000+02:00,task-21617,Confirmation of receipt,complete,EMPTY,Resource13,2011-04-27 08:14:55.727000+02:00 +Internet,case-7129,2011-06-14 01:06:40+02:00,General,2011-06-17 08:57:46.186000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource13,2011-04-19 01:06:40.020000+02:00,task-22216,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-04-27 08:15:44.066000+02:00 +Internet,case-7129,2011-06-14 01:06:40+02:00,General,2011-06-17 08:57:46.186000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource13,2011-04-19 01:06:40.020000+02:00,task-22217,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-04-27 08:16:01.424000+02:00 +Internet,case-7129,2011-06-14 01:06:40+02:00,General,2011-06-17 08:57:46.186000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource13,2011-04-19 01:06:40.020000+02:00,task-22219,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-04-27 08:16:41.954000+02:00 +Internet,case-7129,2011-06-14 01:06:40+02:00,General,2011-06-17 08:57:46.186000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource13,2011-04-19 01:06:40.020000+02:00,task-22218,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-04-27 09:20:27.017000+02:00 +Internet,case-7129,2011-06-14 01:06:40+02:00,General,2011-06-17 08:57:46.186000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource13,2011-04-19 01:06:40.020000+02:00,task-22290,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-04-28 15:23:59.707000+02:00 +Internet,case-7131,2011-06-14 00:00:00+02:00,General,2011-05-25 08:15:25.760000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource11,2011-04-19 00:00:00.020000+02:00,task-21790,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 10:58:18.808000+02:00 +Internet,case-7131,2011-06-14 00:00:00+02:00,General,2011-05-25 08:15:25.760000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource11,2011-04-19 00:00:00.020000+02:00,task-22993,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 10:58:33.361000+02:00 +Internet,case-7131,2011-06-14 00:00:00+02:00,General,2011-05-25 08:15:25.760000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource11,2011-04-19 00:00:00.020000+02:00,task-22995,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 10:58:52.488000+02:00 +Internet,case-7131,2011-06-14 00:00:00+02:00,General,2011-05-25 08:15:25.760000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource11,2011-04-19 00:00:00.020000+02:00,task-22996,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 10:59:03.746000+02:00 +Internet,case-7131,2011-06-14 00:00:00+02:00,General,2011-05-25 08:15:25.760000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource11,2011-04-19 00:00:00.020000+02:00,task-22994,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 10:59:23.436000+02:00 +Internet,case-7131,2011-06-14 00:00:00+02:00,General,2011-05-25 08:15:25.760000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource11,2011-04-19 00:00:00.020000+02:00,task-22997,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-13 09:51:07.145000+02:00 +Internet,case-7132,2011-05-23 01:06:40+02:00,General,2011-05-23 12:40:03.643000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource17,2011-03-28 01:06:40.020000+02:00,task-21811,Confirmation of receipt,complete,EMPTY,Resource17,2011-04-29 13:41:07.912000+02:00 +Internet,case-7132,2011-05-23 01:06:40+02:00,General,2011-05-23 12:40:03.643000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource17,2011-03-28 01:06:40.020000+02:00,task-22793,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-05-02 13:40:47.217000+02:00 +Internet,case-7132,2011-05-23 01:06:40+02:00,General,2011-05-23 12:40:03.643000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource17,2011-03-28 01:06:40.020000+02:00,task-22794,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-05-02 13:41:00.637000+02:00 +Internet,case-7132,2011-05-23 01:06:40+02:00,General,2011-05-23 12:40:03.643000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource17,2011-03-28 01:06:40.020000+02:00,task-23151,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-05-02 13:41:17.556000+02:00 +Internet,case-7132,2011-05-23 01:06:40+02:00,General,2011-05-23 12:40:03.643000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource17,2011-03-28 01:06:40.020000+02:00,task-23152,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-05-02 13:41:29.804000+02:00 +Internet,case-7132,2011-05-23 01:06:40+02:00,General,2011-05-23 12:40:03.643000+02:00,2011-05-23 01:06:40.020000+02:00,,Resource17,2011-03-28 01:06:40.020000+02:00,task-23154,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-05-02 13:42:03.077000+02:00 +Internet,case-7134,2011-05-27 00:00:00+02:00,General,2011-05-31 11:41:15.066000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource18,2011-04-01 00:00:00.020000+02:00,task-21864,Confirmation of receipt,complete,EMPTY,Resource18,2011-04-28 12:36:55.668000+02:00 +Internet,case-7134,2011-05-27 00:00:00+02:00,General,2011-05-31 11:41:15.066000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource18,2011-04-01 00:00:00.020000+02:00,task-22618,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-04-28 12:37:09.169000+02:00 +Internet,case-7134,2011-05-27 00:00:00+02:00,General,2011-05-31 11:41:15.066000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource18,2011-04-01 00:00:00.020000+02:00,task-22620,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-04-28 12:37:19.577000+02:00 +Internet,case-7134,2011-05-27 00:00:00+02:00,General,2011-05-31 11:41:15.066000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource18,2011-04-01 00:00:00.020000+02:00,task-22621,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-04-28 12:37:45.662000+02:00 +Internet,case-7134,2011-05-27 00:00:00+02:00,General,2011-05-31 11:41:15.066000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource18,2011-04-01 00:00:00.020000+02:00,task-22619,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-05-30 08:10:55.101000+02:00 +Internet,case-7134,2011-05-27 00:00:00+02:00,General,2011-05-31 11:41:15.066000+02:00,2011-05-27 00:00:00.020000+02:00,,Resource18,2011-04-01 00:00:00.020000+02:00,task-26834,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-05-30 08:11:15.470000+02:00 +Internet,case-7175,2011-06-14 00:00:00+02:00,General,2011-05-31 15:05:31.360000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource05,2011-04-19 00:00:00.020000+02:00,task-22021,Confirmation of receipt,complete,EMPTY,Resource05,2011-05-09 15:09:06.672000+02:00 +Internet,case-7175,2011-06-14 00:00:00+02:00,General,2011-05-31 15:05:31.360000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource05,2011-04-19 00:00:00.020000+02:00,task-24013,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-09 15:09:23.924000+02:00 +Internet,case-7175,2011-06-14 00:00:00+02:00,General,2011-05-31 15:05:31.360000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource05,2011-04-19 00:00:00.020000+02:00,task-24014,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-09 15:10:40.645000+02:00 +Internet,case-7175,2011-06-14 00:00:00+02:00,General,2011-05-31 15:05:31.360000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource05,2011-04-19 00:00:00.020000+02:00,task-24012,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-09 15:10:53.830000+02:00 +Internet,case-7175,2011-06-14 00:00:00+02:00,General,2011-05-31 15:05:31.360000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource05,2011-04-19 00:00:00.020000+02:00,task-24016,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-09 15:11:08.707000+02:00 +Internet,case-7175,2011-06-14 00:00:00+02:00,General,2011-05-31 15:05:31.360000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource05,2011-04-19 00:00:00.020000+02:00,task-24017,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-05-09 15:11:21.712000+02:00 +Internet,case-7177,2011-06-14 01:06:40+02:00,General,2011-05-04 08:18:25.137000+02:00,2011-06-14 01:06:40.020000+02:00,,Resource13,2011-04-19 01:06:40.020000+02:00,task-22026,Confirmation of receipt,complete,EMPTY,admin2,2011-05-04 08:18:26.126000+02:00 +Internet,case-7178,2011-06-15 00:00:00+02:00,General,2011-05-25 08:18:19.702000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource11,2011-04-20 00:00:00.020000+02:00,task-22032,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 12:34:06.750000+02:00 +Internet,case-7178,2011-06-15 00:00:00+02:00,General,2011-05-25 08:18:19.702000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource11,2011-04-20 00:00:00.020000+02:00,task-23091,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 12:34:34.526000+02:00 +Internet,case-7178,2011-06-15 00:00:00+02:00,General,2011-05-25 08:18:19.702000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource11,2011-04-20 00:00:00.020000+02:00,task-23093,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 12:34:50.146000+02:00 +Internet,case-7178,2011-06-15 00:00:00+02:00,General,2011-05-25 08:18:19.702000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource11,2011-04-20 00:00:00.020000+02:00,task-23094,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 12:35:03.656000+02:00 +Internet,case-7178,2011-06-15 00:00:00+02:00,General,2011-05-25 08:18:19.702000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource11,2011-04-20 00:00:00.020000+02:00,task-23092,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 12:35:17.532000+02:00 +Internet,case-7178,2011-06-15 00:00:00+02:00,General,2011-05-25 08:18:19.702000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource11,2011-04-20 00:00:00.020000+02:00,task-23096,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-13 12:03:08.817000+02:00 +Internet,case-7182,2011-08-13 01:06:40+02:00,General,2011-08-12 15:44:31.411000+02:00,2011-08-13 01:06:40.020000+02:00,Group 5,Resource13,2011-04-20 01:06:40.020000+02:00,task-22097,Confirmation of receipt,complete,EMPTY,Resource08,2011-04-28 13:12:38.150000+02:00 +Internet,case-7182,2011-08-13 01:06:40+02:00,General,2011-08-12 15:44:31.411000+02:00,2011-08-13 01:06:40.020000+02:00,Group 5,Resource13,2011-04-20 01:06:40.020000+02:00,task-22623,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-04-28 13:13:04.868000+02:00 +Internet,case-7182,2011-08-13 01:06:40+02:00,General,2011-08-12 15:44:31.411000+02:00,2011-08-13 01:06:40.020000+02:00,Group 5,Resource13,2011-04-20 01:06:40.020000+02:00,task-22625,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-04-28 13:13:47.328000+02:00 +Internet,case-7182,2011-08-13 01:06:40+02:00,General,2011-08-12 15:44:31.411000+02:00,2011-08-13 01:06:40.020000+02:00,Group 5,Resource13,2011-04-20 01:06:40.020000+02:00,task-22627,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-04-28 13:14:20.642000+02:00 +Internet,case-7182,2011-08-13 01:06:40+02:00,General,2011-08-12 15:44:31.411000+02:00,2011-08-13 01:06:40.020000+02:00,Group 5,Resource13,2011-04-20 01:06:40.020000+02:00,task-22624,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-04-28 13:14:34.853000+02:00 +Internet,case-7182,2011-08-13 01:06:40+02:00,General,2011-08-12 15:44:31.411000+02:00,2011-08-13 01:06:40.020000+02:00,Group 5,Resource13,2011-04-20 01:06:40.020000+02:00,task-22629,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-04-28 13:17:13.974000+02:00 +Internet,case-7183,2011-03-24 01:06:40+01:00,General,2011-05-25 12:10:33.468000+02:00,2011-03-24 01:06:40.010000+01:00,,Resource02,2011-01-27 01:06:40.010000+01:00,task-22098,Confirmation of receipt,complete,EMPTY,admin2,2011-05-25 12:10:34.852000+02:00 +Internet,case-7187,2011-06-15 01:06:40+02:00,General,2011-06-16 09:47:30.599000+02:00,2011-06-15 01:06:40.020000+02:00,,Resource04,2011-04-20 01:06:40.020000+02:00,task-22103,Confirmation of receipt,complete,EMPTY,Resource04,2011-05-04 09:36:12.987000+02:00 +Internet,case-7187,2011-06-15 01:06:40+02:00,General,2011-06-16 09:47:30.599000+02:00,2011-06-15 01:06:40.020000+02:00,,Resource04,2011-04-20 01:06:40.020000+02:00,task-23643,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-04 09:36:27.778000+02:00 +Internet,case-7187,2011-06-15 01:06:40+02:00,General,2011-06-16 09:47:30.599000+02:00,2011-06-15 01:06:40.020000+02:00,,Resource04,2011-04-20 01:06:40.020000+02:00,task-23645,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-04 09:36:38.144000+02:00 +Internet,case-7187,2011-06-15 01:06:40+02:00,General,2011-06-16 09:47:30.599000+02:00,2011-06-15 01:06:40.020000+02:00,,Resource04,2011-04-20 01:06:40.020000+02:00,task-23646,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-04 09:36:47.795000+02:00 +Internet,case-7187,2011-06-15 01:06:40+02:00,General,2011-06-16 09:47:30.599000+02:00,2011-06-15 01:06:40.020000+02:00,,Resource04,2011-04-20 01:06:40.020000+02:00,task-23644,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-04 09:36:57.377000+02:00 +Internet,case-7187,2011-06-15 01:06:40+02:00,General,2011-06-16 09:47:30.599000+02:00,2011-06-15 01:06:40.020000+02:00,,Resource04,2011-04-20 01:06:40.020000+02:00,task-23647,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-04 09:38:40.205000+02:00 +e-mail,case-7189,2011-06-15 00:00:00+02:00,General,2011-06-01 09:36:32.823000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource02,2011-04-20 00:00:00.020000+02:00,task-22128,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-27 09:04:01.644000+02:00 +e-mail,case-7189,2011-06-15 00:00:00+02:00,General,2011-06-01 09:36:32.823000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource02,2011-04-20 00:00:00.020000+02:00,task-22264,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-04-27 09:04:31.227000+02:00 +e-mail,case-7189,2011-06-15 00:00:00+02:00,General,2011-06-01 09:36:32.823000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource02,2011-04-20 00:00:00.020000+02:00,task-22266,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-27 09:04:46.032000+02:00 +e-mail,case-7189,2011-06-15 00:00:00+02:00,General,2011-06-01 09:36:32.823000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource02,2011-04-20 00:00:00.020000+02:00,task-22267,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-27 09:05:05.703000+02:00 +e-mail,case-7189,2011-06-15 00:00:00+02:00,General,2011-06-01 09:36:32.823000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource02,2011-04-20 00:00:00.020000+02:00,task-22265,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-27 09:05:22.067000+02:00 +e-mail,case-7189,2011-06-15 00:00:00+02:00,General,2011-06-01 09:36:32.823000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource02,2011-04-20 00:00:00.020000+02:00,task-22270,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-27 09:05:43.709000+02:00 +Internet,case-7192,2011-07-14 01:06:40+02:00,General,2011-07-11 11:28:34.813000+02:00,2011-07-14 01:06:40.020000+02:00,Group 8,Resource32,2011-04-21 01:06:40.020000+02:00,task-22137,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 12:40:33.789000+02:00 +Internet,case-7192,2011-07-14 01:06:40+02:00,General,2011-07-11 11:28:34.813000+02:00,2011-07-14 01:06:40.020000+02:00,Group 8,Resource32,2011-04-21 01:06:40.020000+02:00,task-23103,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 12:40:51.173000+02:00 +Internet,case-7192,2011-07-14 01:06:40+02:00,General,2011-07-11 11:28:34.813000+02:00,2011-07-14 01:06:40.020000+02:00,Group 8,Resource32,2011-04-21 01:06:40.020000+02:00,task-23106,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 12:53:14.048000+02:00 +Internet,case-7192,2011-07-14 01:06:40+02:00,General,2011-07-11 11:28:34.813000+02:00,2011-07-14 01:06:40.020000+02:00,Group 8,Resource32,2011-04-21 01:06:40.020000+02:00,task-23118,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 12:53:26.198000+02:00 +Internet,case-7192,2011-07-14 01:06:40+02:00,General,2011-07-11 11:28:34.813000+02:00,2011-07-14 01:06:40.020000+02:00,Group 8,Resource32,2011-04-21 01:06:40.020000+02:00,task-23104,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 12:53:39.950000+02:00 +Internet,case-7192,2011-07-14 01:06:40+02:00,General,2011-07-11 11:28:34.813000+02:00,2011-07-14 01:06:40.020000+02:00,Group 8,Resource32,2011-04-21 01:06:40.020000+02:00,task-23120,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-13 15:15:39.662000+02:00 +Internet,case-7194,2011-06-17 01:06:40+02:00,General,2011-06-16 13:33:48.845000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource02,2011-04-22 01:06:40.020000+02:00,task-22147,Confirmation of receipt,complete,EMPTY,Resource02,2011-04-28 11:47:22.008000+02:00 +Internet,case-7194,2011-06-17 01:06:40+02:00,General,2011-06-16 13:33:48.845000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource02,2011-04-22 01:06:40.020000+02:00,task-22572,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-04-28 11:47:38.784000+02:00 +Internet,case-7194,2011-06-17 01:06:40+02:00,General,2011-06-16 13:33:48.845000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource02,2011-04-22 01:06:40.020000+02:00,task-22574,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-04-28 11:47:51.670000+02:00 +Internet,case-7194,2011-06-17 01:06:40+02:00,General,2011-06-16 13:33:48.845000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource02,2011-04-22 01:06:40.020000+02:00,task-22575,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-04-28 11:48:08.802000+02:00 +Internet,case-7194,2011-06-17 01:06:40+02:00,General,2011-06-16 13:33:48.845000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource02,2011-04-22 01:06:40.020000+02:00,task-22573,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-04-28 11:57:56.151000+02:00 +Internet,case-7194,2011-06-17 01:06:40+02:00,General,2011-06-16 13:33:48.845000+02:00,2011-06-17 01:06:40.020000+02:00,,Resource02,2011-04-22 01:06:40.020000+02:00,task-22576,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-04-28 11:58:15.231000+02:00 +Internet,case-7197,2011-06-19 00:00:00+02:00,General,2011-07-15 08:56:51.052000+02:00,2011-06-19 00:00:00.020000+02:00,,Resource01,2011-04-24 00:00:00.020000+02:00,task-22180,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-02 12:59:09.915000+02:00 +Internet,case-7197,2011-06-19 00:00:00+02:00,General,2011-07-15 08:56:51.052000+02:00,2011-06-19 00:00:00.020000+02:00,,Resource01,2011-04-24 00:00:00.020000+02:00,task-23128,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 12:59:31.403000+02:00 +Internet,case-7197,2011-06-19 00:00:00+02:00,General,2011-07-15 08:56:51.052000+02:00,2011-06-19 00:00:00.020000+02:00,,Resource01,2011-04-24 00:00:00.020000+02:00,task-23130,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 12:59:50.226000+02:00 +Internet,case-7197,2011-06-19 00:00:00+02:00,General,2011-07-15 08:56:51.052000+02:00,2011-06-19 00:00:00.020000+02:00,,Resource01,2011-04-24 00:00:00.020000+02:00,task-23133,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 13:00:11.220000+02:00 +Internet,case-7197,2011-06-19 00:00:00+02:00,General,2011-07-15 08:56:51.052000+02:00,2011-06-19 00:00:00.020000+02:00,,Resource01,2011-04-24 00:00:00.020000+02:00,task-23129,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 13:00:36.051000+02:00 +Internet,case-7197,2011-06-19 00:00:00+02:00,General,2011-07-15 08:56:51.052000+02:00,2011-06-19 00:00:00.020000+02:00,,Resource01,2011-04-24 00:00:00.020000+02:00,task-23140,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-18 12:11:22.479000+02:00 +Desk,case-7233,2011-07-08 01:06:40+02:00,General,2011-07-08 16:02:33.750000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource02,2011-04-01 01:06:40.020000+02:00,task-22343,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-02 12:59:54.065000+02:00 +Desk,case-7233,2011-07-08 01:06:40+02:00,General,2011-07-08 16:02:33.750000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource02,2011-04-01 01:06:40.020000+02:00,task-23134,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-02 13:00:15.762000+02:00 +Desk,case-7233,2011-07-08 01:06:40+02:00,General,2011-07-08 16:02:33.750000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource02,2011-04-01 01:06:40.020000+02:00,task-23137,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-02 13:00:33.228000+02:00 +Desk,case-7233,2011-07-08 01:06:40+02:00,General,2011-07-08 16:02:33.750000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource02,2011-04-01 01:06:40.020000+02:00,task-23139,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-02 13:01:08.708000+02:00 +Desk,case-7233,2011-07-08 01:06:40+02:00,General,2011-07-08 16:02:33.750000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource02,2011-04-01 01:06:40.020000+02:00,task-23135,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-02 13:52:13.021000+02:00 +Desk,case-7233,2011-07-08 01:06:40+02:00,General,2011-07-08 16:02:33.750000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource02,2011-04-01 01:06:40.020000+02:00,task-23167,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-02 14:40:02.740000+02:00 +Internet,case-7256,2011-06-20 01:06:40+02:00,General,2011-06-22 16:49:24.689000+02:00,2011-06-20 01:06:40.020000+02:00,Group 5,Resource05,2011-04-25 01:06:40.020000+02:00,task-22644,Confirmation of receipt,complete,EMPTY,Resource05,2011-05-10 15:39:31.734000+02:00 +Internet,case-7256,2011-06-20 01:06:40+02:00,General,2011-06-22 16:49:24.689000+02:00,2011-06-20 01:06:40.020000+02:00,Group 5,Resource05,2011-04-25 01:06:40.020000+02:00,task-24300,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-10 15:39:48.916000+02:00 +Internet,case-7256,2011-06-20 01:06:40+02:00,General,2011-06-22 16:49:24.689000+02:00,2011-06-20 01:06:40.020000+02:00,Group 5,Resource05,2011-04-25 01:06:40.020000+02:00,task-24302,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-10 15:40:05.495000+02:00 +Internet,case-7256,2011-06-20 01:06:40+02:00,General,2011-06-22 16:49:24.689000+02:00,2011-06-20 01:06:40.020000+02:00,Group 5,Resource05,2011-04-25 01:06:40.020000+02:00,task-24301,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-10 15:40:45.356000+02:00 +Internet,case-7256,2011-06-20 01:06:40+02:00,General,2011-06-22 16:49:24.689000+02:00,2011-06-20 01:06:40.020000+02:00,Group 5,Resource05,2011-04-25 01:06:40.020000+02:00,task-24304,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-10 15:41:00.734000+02:00 +Internet,case-7256,2011-06-20 01:06:40+02:00,General,2011-06-22 16:49:24.689000+02:00,2011-06-20 01:06:40.020000+02:00,Group 5,Resource05,2011-04-25 01:06:40.020000+02:00,task-24303,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:36:52.461000+02:00 +Internet,case-7264,2011-08-30 01:06:40+02:00,General,2011-08-29 09:49:09.129000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-04-26 01:06:40.020000+02:00,task-22745,Confirmation of receipt,complete,EMPTY,Resource15,2011-05-04 11:12:18.601000+02:00 +Internet,case-7264,2011-08-30 01:06:40+02:00,General,2011-08-29 09:49:09.129000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-04-26 01:06:40.020000+02:00,task-23709,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-04 11:12:34.732000+02:00 +Internet,case-7264,2011-08-30 01:06:40+02:00,General,2011-08-29 09:49:09.129000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-04-26 01:06:40.020000+02:00,task-23711,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-04 11:12:46.880000+02:00 +Internet,case-7264,2011-08-30 01:06:40+02:00,General,2011-08-29 09:49:09.129000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-04-26 01:06:40.020000+02:00,task-23710,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-11 08:36:33.250000+02:00 +Internet,case-7264,2011-08-30 01:06:40+02:00,General,2011-08-29 09:49:09.129000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-04-26 01:06:40.020000+02:00,task-24372,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-11 08:37:04.066000+02:00 +Internet,case-7264,2011-08-30 01:06:40+02:00,General,2011-08-29 09:49:09.129000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-04-26 01:06:40.020000+02:00,task-23712,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:08:59.203000+02:00 +Internet,case-7265,2011-06-20 01:06:40+02:00,General,2011-07-15 11:43:59.244000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource08,2011-04-25 01:06:40.020000+02:00,task-22746,Confirmation of receipt,complete,EMPTY,Resource08,2011-05-04 08:42:05.468000+02:00 +Internet,case-7265,2011-06-20 01:06:40+02:00,General,2011-07-15 11:43:59.244000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource08,2011-04-25 01:06:40.020000+02:00,task-23611,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-04 08:43:30.014000+02:00 +Internet,case-7265,2011-06-20 01:06:40+02:00,General,2011-07-15 11:43:59.244000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource08,2011-04-25 01:06:40.020000+02:00,task-23612,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-05-04 08:44:54.863000+02:00 +Internet,case-7265,2011-06-20 01:06:40+02:00,General,2011-07-15 11:43:59.244000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource08,2011-04-25 01:06:40.020000+02:00,task-23613,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-05-04 08:45:10.390000+02:00 +Internet,case-7265,2011-06-20 01:06:40+02:00,General,2011-07-15 11:43:59.244000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource08,2011-04-25 01:06:40.020000+02:00,task-23614,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-05-04 08:45:29.534000+02:00 +Internet,case-7265,2011-06-20 01:06:40+02:00,General,2011-07-15 11:43:59.244000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource08,2011-04-25 01:06:40.020000+02:00,task-23615,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-05-04 10:13:34.508000+02:00 +Internet,case-7266,2011-08-01 01:06:40+02:00,General,2011-07-29 10:07:52.691000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource13,2011-04-25 01:06:40.020000+02:00,task-22750,Confirmation of receipt,complete,EMPTY,Resource13,2011-05-03 12:58:50.048000+02:00 +Internet,case-7266,2011-08-01 01:06:40+02:00,General,2011-07-29 10:07:52.691000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource13,2011-04-25 01:06:40.020000+02:00,task-23463,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-05-03 12:59:36.876000+02:00 +Internet,case-7266,2011-08-01 01:06:40+02:00,General,2011-07-29 10:07:52.691000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource13,2011-04-25 01:06:40.020000+02:00,task-23464,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-05-04 07:13:08.933000+02:00 +Internet,case-7266,2011-08-01 01:06:40+02:00,General,2011-07-29 10:07:52.691000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource13,2011-04-25 01:06:40.020000+02:00,task-23574,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-05-04 07:13:31.070000+02:00 +Internet,case-7266,2011-08-01 01:06:40+02:00,General,2011-07-29 10:07:52.691000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource13,2011-04-25 01:06:40.020000+02:00,task-23465,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-05-09 08:24:46.118000+02:00 +Internet,case-7266,2011-08-01 01:06:40+02:00,General,2011-07-29 10:07:52.691000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource13,2011-04-25 01:06:40.020000+02:00,task-23850,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:10:41.963000+02:00 +Internet,case-7267,2011-06-21 00:00:00+02:00,General,2011-05-30 08:37:38.745000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-22762,Confirmation of receipt,complete,Group 1,Resource07,2011-05-02 15:40:12.711000+02:00 +Internet,case-7267,2011-06-21 00:00:00+02:00,General,2011-05-30 08:37:38.745000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-23238,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 15:40:28.954000+02:00 +Internet,case-7267,2011-06-21 00:00:00+02:00,General,2011-05-30 08:37:38.745000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-23239,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 15:40:41.287000+02:00 +Internet,case-7267,2011-06-21 00:00:00+02:00,General,2011-05-30 08:37:38.745000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-23240,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 15:41:03.946000+02:00 +Internet,case-7267,2011-06-21 00:00:00+02:00,General,2011-05-30 08:37:38.745000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-23242,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 15:46:40.240000+02:00 +Internet,case-7267,2011-06-21 00:00:00+02:00,General,2011-05-30 08:37:38.745000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-23241,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-18 13:15:00.039000+02:00 +Internet,case-7268,2011-06-21 00:00:00+02:00,General,2011-05-12 14:18:55.154000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource01,2011-04-26 00:00:00.020000+02:00,task-22763,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-10 13:30:54.631000+02:00 +Internet,case-7268,2011-06-21 00:00:00+02:00,General,2011-05-12 14:18:55.154000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource01,2011-04-26 00:00:00.020000+02:00,task-24227,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-10 13:31:12.842000+02:00 +Internet,case-7268,2011-06-21 00:00:00+02:00,General,2011-05-12 14:18:55.154000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource01,2011-04-26 00:00:00.020000+02:00,task-24229,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-10 13:31:30.791000+02:00 +Internet,case-7268,2011-06-21 00:00:00+02:00,General,2011-05-12 14:18:55.154000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource01,2011-04-26 00:00:00.020000+02:00,task-24230,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-10 13:31:44.332000+02:00 +Internet,case-7268,2011-06-21 00:00:00+02:00,General,2011-05-12 14:18:55.154000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource01,2011-04-26 00:00:00.020000+02:00,task-24228,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-10 13:32:22.348000+02:00 +Internet,case-7268,2011-06-21 00:00:00+02:00,General,2011-05-12 14:18:55.154000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource01,2011-04-26 00:00:00.020000+02:00,task-24231,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-10 13:32:55.781000+02:00 +Internet,case-7269,2011-06-21 00:00:00+02:00,General,2011-05-30 08:51:10.622000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-22764,Confirmation of receipt,complete,Group 1,Resource07,2011-05-02 15:59:17.860000+02:00 +Internet,case-7269,2011-06-21 00:00:00+02:00,General,2011-05-30 08:51:10.622000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-23243,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-02 15:59:57.843000+02:00 +Internet,case-7269,2011-06-21 00:00:00+02:00,General,2011-05-30 08:51:10.622000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-23246,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-02 16:00:20.137000+02:00 +Internet,case-7269,2011-06-21 00:00:00+02:00,General,2011-05-30 08:51:10.622000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-23247,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-02 16:00:33.777000+02:00 +Internet,case-7269,2011-06-21 00:00:00+02:00,General,2011-05-30 08:51:10.622000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-23244,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-02 16:00:45.588000+02:00 +Internet,case-7269,2011-06-21 00:00:00+02:00,General,2011-05-30 08:51:10.622000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-23248,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-18 13:57:10.042000+02:00 +Desk,case-7270,2011-05-30 00:00:00+02:00,General,2011-06-28 16:02:27.895000+02:00,2011-05-30 00:00:00.020000+02:00,,Resource18,2011-04-04 00:00:00.020000+02:00,task-22770,Confirmation of receipt,complete,EMPTY,Resource18,2011-05-03 13:21:17.150000+02:00 +Desk,case-7270,2011-05-30 00:00:00+02:00,General,2011-06-28 16:02:27.895000+02:00,2011-05-30 00:00:00.020000+02:00,,Resource18,2011-04-04 00:00:00.020000+02:00,task-23475,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-05-03 13:21:36.349000+02:00 +Desk,case-7270,2011-05-30 00:00:00+02:00,General,2011-06-28 16:02:27.895000+02:00,2011-05-30 00:00:00.020000+02:00,,Resource18,2011-04-04 00:00:00.020000+02:00,task-23477,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-05-03 13:21:48.957000+02:00 +Desk,case-7270,2011-05-30 00:00:00+02:00,General,2011-06-28 16:02:27.895000+02:00,2011-05-30 00:00:00.020000+02:00,,Resource18,2011-04-04 00:00:00.020000+02:00,task-23478,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-05-03 13:22:02.673000+02:00 +Desk,case-7270,2011-05-30 00:00:00+02:00,General,2011-06-28 16:02:27.895000+02:00,2011-05-30 00:00:00.020000+02:00,,Resource18,2011-04-04 00:00:00.020000+02:00,task-23476,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-06-06 14:25:05.865000+02:00 +Desk,case-7270,2011-05-30 00:00:00+02:00,General,2011-06-28 16:02:27.895000+02:00,2011-05-30 00:00:00.020000+02:00,,Resource18,2011-04-04 00:00:00.020000+02:00,task-27859,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-06-06 14:25:50.932000+02:00 +Internet,case-7272,2011-06-21 01:06:40+02:00,General,,2011-06-21 01:06:40.020000+02:00,Group 5,Resource14,2011-04-26 01:06:40.020000+02:00,task-22787,Confirmation of receipt,complete,EMPTY,Resource15,2011-06-06 08:51:08.069000+02:00 +Internet,case-7272,2011-06-21 01:06:40+02:00,General,,2011-06-21 01:06:40.020000+02:00,Group 5,Resource14,2011-04-26 01:06:40.020000+02:00,task-27646,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-06-06 08:51:25.556000+02:00 +Internet,case-7272,2011-06-21 01:06:40+02:00,General,,2011-06-21 01:06:40.020000+02:00,Group 5,Resource14,2011-04-26 01:06:40.020000+02:00,task-27648,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-06-06 08:51:38.698000+02:00 +Internet,case-7272,2011-06-21 01:06:40+02:00,General,,2011-06-21 01:06:40.020000+02:00,Group 5,Resource14,2011-04-26 01:06:40.020000+02:00,task-27647,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-06-06 08:52:14.255000+02:00 +Internet,case-7272,2011-06-21 01:06:40+02:00,General,,2011-06-21 01:06:40.020000+02:00,Group 5,Resource14,2011-04-26 01:06:40.020000+02:00,task-27650,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-06-06 08:52:30.316000+02:00 +Internet,case-7272,2011-06-21 01:06:40+02:00,General,,2011-06-21 01:06:40.020000+02:00,Group 5,Resource14,2011-04-26 01:06:40.020000+02:00,task-27649,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-16 14:49:37.432000+02:00 +Internet,case-7273,2011-08-03 01:06:40+02:00,General,2011-08-03 10:53:58.465000+02:00,2011-08-03 01:06:40.020000+02:00,,Resource02,2011-04-27 01:06:40.020000+02:00,task-22815,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-03 15:35:48.714000+02:00 +Internet,case-7273,2011-08-03 01:06:40+02:00,General,2011-08-03 10:53:58.465000+02:00,2011-08-03 01:06:40.020000+02:00,,Resource02,2011-04-27 01:06:40.020000+02:00,task-23550,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-03 15:36:06.221000+02:00 +Internet,case-7273,2011-08-03 01:06:40+02:00,General,2011-08-03 10:53:58.465000+02:00,2011-08-03 01:06:40.020000+02:00,,Resource02,2011-04-27 01:06:40.020000+02:00,task-23551,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-03 15:38:51.947000+02:00 +Internet,case-7273,2011-08-03 01:06:40+02:00,General,2011-08-03 10:53:58.465000+02:00,2011-08-03 01:06:40.020000+02:00,,Resource02,2011-04-27 01:06:40.020000+02:00,task-23552,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-03 15:44:50.367000+02:00 +Internet,case-7273,2011-08-03 01:06:40+02:00,General,2011-08-03 10:53:58.465000+02:00,2011-08-03 01:06:40.020000+02:00,,Resource02,2011-04-27 01:06:40.020000+02:00,task-23554,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-03 15:45:00.805000+02:00 +Internet,case-7273,2011-08-03 01:06:40+02:00,General,2011-08-03 10:53:58.465000+02:00,2011-08-03 01:06:40.020000+02:00,,Resource02,2011-04-27 01:06:40.020000+02:00,task-23553,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-04 08:33:53.315000+02:00 +Internet,case-7274,2011-04-25 01:06:40+02:00,General,2011-05-03 13:36:04.846000+02:00,2011-04-25 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-22820,Confirmation of receipt,complete,Group 1,Resource17,2011-05-02 09:19:19.171000+02:00 +Internet,case-7274,2011-04-25 01:06:40+02:00,General,2011-05-03 13:36:04.846000+02:00,2011-04-25 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-22893,T02 Check confirmation of receipt,complete,Group 4,Resource17,2011-05-02 09:19:31.927000+02:00 +Internet,case-7274,2011-04-25 01:06:40+02:00,General,2011-05-03 13:36:04.846000+02:00,2011-04-25 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-22895,T04 Determine confirmation of receipt,complete,Group 3,Resource17,2011-05-02 09:19:49.681000+02:00 +Internet,case-7274,2011-04-25 01:06:40+02:00,General,2011-05-03 13:36:04.846000+02:00,2011-04-25 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-22896,T05 Print and send confirmation of receipt,complete,Group 2,Resource17,2011-05-02 09:19:58.328000+02:00 +Internet,case-7274,2011-04-25 01:06:40+02:00,General,2011-05-03 13:36:04.846000+02:00,2011-04-25 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-22894,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-05-02 09:20:09.013000+02:00 +Internet,case-7274,2011-04-25 01:06:40+02:00,General,2011-05-03 13:36:04.846000+02:00,2011-04-25 01:06:40.020000+02:00,,Resource17,2011-02-28 01:06:40.010000+01:00,task-22898,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-05-02 09:20:22.483000+02:00 +Internet,case-7297,2011-06-21 00:00:00+02:00,General,2011-05-31 08:44:23.922000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-22862,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-11 13:47:03.917000+02:00 +Internet,case-7297,2011-06-21 00:00:00+02:00,General,2011-05-31 08:44:23.922000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-24512,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-11 13:47:21.641000+02:00 +Internet,case-7297,2011-06-21 00:00:00+02:00,General,2011-05-31 08:44:23.922000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-24514,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-11 13:47:36.918000+02:00 +Internet,case-7297,2011-06-21 00:00:00+02:00,General,2011-05-31 08:44:23.922000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-24515,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-11 13:47:58.951000+02:00 +Internet,case-7297,2011-06-21 00:00:00+02:00,General,2011-05-31 08:44:23.922000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-24513,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-18 14:41:52.854000+02:00 +Internet,case-7297,2011-06-21 00:00:00+02:00,General,2011-05-31 08:44:23.922000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource11,2011-04-26 00:00:00.020000+02:00,task-25512,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-18 14:42:17.441000+02:00 +Internet,case-7300,2011-06-23 00:00:00+02:00,General,2011-07-06 11:55:18.834000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-22914,Confirmation of receipt,complete,EMPTY,Resource04,2011-05-04 10:24:19.569000+02:00 +Internet,case-7300,2011-06-23 00:00:00+02:00,General,2011-07-06 11:55:18.834000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-23677,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-04 10:24:34.134000+02:00 +Internet,case-7300,2011-06-23 00:00:00+02:00,General,2011-07-06 11:55:18.834000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-23679,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-04 10:24:44.766000+02:00 +Internet,case-7300,2011-06-23 00:00:00+02:00,General,2011-07-06 11:55:18.834000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-23680,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-04 10:24:55.096000+02:00 +Internet,case-7300,2011-06-23 00:00:00+02:00,General,2011-07-06 11:55:18.834000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-23678,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-04 10:25:04.730000+02:00 +Internet,case-7300,2011-06-23 00:00:00+02:00,General,2011-07-06 11:55:18.834000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-23681,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-04 10:25:18.629000+02:00 +Desk,case-7301,2011-06-03 01:06:40+02:00,General,2011-08-30 10:29:38.597000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource06,2011-04-08 01:06:40.020000+02:00,task-22918,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-18 12:10:27.211000+02:00 +Desk,case-7301,2011-06-03 01:06:40+02:00,General,2011-08-30 10:29:38.597000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource06,2011-04-08 01:06:40.020000+02:00,task-25417,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-18 12:11:28.794000+02:00 +Desk,case-7301,2011-06-03 01:06:40+02:00,General,2011-08-30 10:29:38.597000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource06,2011-04-08 01:06:40.020000+02:00,task-25420,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-18 12:11:47.404000+02:00 +Desk,case-7301,2011-06-03 01:06:40+02:00,General,2011-08-30 10:29:38.597000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource06,2011-04-08 01:06:40.020000+02:00,task-25423,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-18 12:12:00.237000+02:00 +Desk,case-7301,2011-06-03 01:06:40+02:00,General,2011-08-30 10:29:38.597000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource06,2011-04-08 01:06:40.020000+02:00,task-25418,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-18 12:12:28.523000+02:00 +Desk,case-7301,2011-06-03 01:06:40+02:00,General,2011-08-30 10:29:38.597000+02:00,2011-06-23 01:06:40.020000+02:00,,Resource06,2011-04-08 01:06:40.020000+02:00,task-25425,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-18 12:12:42.982000+02:00 +Internet,case-7305,2011-05-02 01:06:40+02:00,General,2011-06-09 16:49:33.859000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-22969,Confirmation of receipt,complete,EMPTY,Resource15,2011-05-27 11:46:44.277000+02:00 +Internet,case-7305,2011-05-02 01:06:40+02:00,General,2011-06-09 16:49:33.859000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-26701,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-27 11:47:03.473000+02:00 +Internet,case-7305,2011-05-02 01:06:40+02:00,General,2011-06-09 16:49:33.859000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-26700,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-27 11:47:20.156000+02:00 +Internet,case-7305,2011-05-02 01:06:40+02:00,General,2011-06-09 16:49:33.859000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-26705,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-27 11:47:34.696000+02:00 +Internet,case-7305,2011-05-02 01:06:40+02:00,General,2011-06-09 16:49:33.859000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-26706,T05 Print and send confirmation of receipt,complete,Group 2,Resource15,2011-05-27 11:47:47.149000+02:00 +Internet,case-7305,2011-05-02 01:06:40+02:00,General,2011-06-09 16:49:33.859000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-26704,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-27 11:48:12.185000+02:00 +Internet,case-7305,2011-05-02 01:06:40+02:00,General,2011-06-09 16:49:33.859000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-26707,T11 Create document X request unlicensed,complete,Group 1,Resource15,2011-05-27 12:06:46.107000+02:00 +Internet,case-7305,2011-05-02 01:06:40+02:00,General,2011-06-09 16:49:33.859000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-26719,T12 Check document X request unlicensed,complete,Group 4,Resource15,2011-05-27 12:06:59.586000+02:00 +Internet,case-7305,2011-05-02 01:06:40+02:00,General,2011-06-09 16:49:33.859000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-26720,T14 Determine document X request unlicensed,complete,Group 3,Resource15,2011-05-27 12:07:11.856000+02:00 +Internet,case-7305,2011-05-02 01:06:40+02:00,General,2011-06-09 16:49:33.859000+02:00,2011-05-02 01:06:40.020000+02:00,,Resource15,2011-02-07 01:06:40.010000+01:00,task-26721,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-06-09 16:49:33.600000+02:00 +Desk,case-7310,2011-06-28 01:06:40+02:00,General,2011-07-26 08:47:26.864000+02:00,2011-06-28 01:06:40.020000+02:00,Group 5,Resource22,2011-03-22 01:06:40.010000+01:00,task-22998,Confirmation of receipt,complete,EMPTY,Resource15,2011-05-03 11:43:12.886000+02:00 +Desk,case-7310,2011-06-28 01:06:40+02:00,General,2011-07-26 08:47:26.864000+02:00,2011-06-28 01:06:40.020000+02:00,Group 5,Resource22,2011-03-22 01:06:40.010000+01:00,task-23431,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-03 11:43:53.270000+02:00 +Desk,case-7310,2011-06-28 01:06:40+02:00,General,2011-07-26 08:47:26.864000+02:00,2011-06-28 01:06:40.020000+02:00,Group 5,Resource22,2011-03-22 01:06:40.010000+01:00,task-23433,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-03 11:44:28.932000+02:00 +Desk,case-7310,2011-06-28 01:06:40+02:00,General,2011-07-26 08:47:26.864000+02:00,2011-06-28 01:06:40.020000+02:00,Group 5,Resource22,2011-03-22 01:06:40.010000+01:00,task-23432,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-03 11:49:32.745000+02:00 +Desk,case-7310,2011-06-28 01:06:40+02:00,General,2011-07-26 08:47:26.864000+02:00,2011-06-28 01:06:40.020000+02:00,Group 5,Resource22,2011-03-22 01:06:40.010000+01:00,task-23438,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-03 12:13:17.755000+02:00 +Desk,case-7310,2011-06-28 01:06:40+02:00,General,2011-07-26 08:47:26.864000+02:00,2011-06-28 01:06:40.020000+02:00,Group 5,Resource22,2011-03-22 01:06:40.010000+01:00,task-23434,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 11:36:43.848000+02:00 +Internet,case-7311,2011-06-24 00:00:00+02:00,General,2011-06-24 14:16:14.675000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource02,2011-04-29 00:00:00.020000+02:00,task-23005,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-09 09:47:21.850000+02:00 +Internet,case-7311,2011-06-24 00:00:00+02:00,General,2011-06-24 14:16:14.675000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource02,2011-04-29 00:00:00.020000+02:00,task-23897,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-09 09:47:44.415000+02:00 +Internet,case-7311,2011-06-24 00:00:00+02:00,General,2011-06-24 14:16:14.675000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource02,2011-04-29 00:00:00.020000+02:00,task-23899,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-09 09:48:04.829000+02:00 +Internet,case-7311,2011-06-24 00:00:00+02:00,General,2011-06-24 14:16:14.675000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource02,2011-04-29 00:00:00.020000+02:00,task-23900,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-09 09:48:21.129000+02:00 +Internet,case-7311,2011-06-24 00:00:00+02:00,General,2011-06-24 14:16:14.675000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource02,2011-04-29 00:00:00.020000+02:00,task-23898,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-09 12:06:00.081000+02:00 +Internet,case-7311,2011-06-24 00:00:00+02:00,General,2011-06-24 14:16:14.675000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource02,2011-04-29 00:00:00.020000+02:00,task-23960,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-09 12:06:19.898000+02:00 +Internet,case-7314,2011-06-24 00:00:00+02:00,General,2011-05-30 09:02:48.360000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource11,2011-04-29 00:00:00.020000+02:00,task-23057,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-11 14:00:22.518000+02:00 +Internet,case-7314,2011-06-24 00:00:00+02:00,General,2011-05-30 09:02:48.360000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource11,2011-04-29 00:00:00.020000+02:00,task-24517,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-11 14:00:36.809000+02:00 +Internet,case-7314,2011-06-24 00:00:00+02:00,General,2011-05-30 09:02:48.360000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource11,2011-04-29 00:00:00.020000+02:00,task-24519,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-11 14:00:49.190000+02:00 +Internet,case-7314,2011-06-24 00:00:00+02:00,General,2011-05-30 09:02:48.360000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource11,2011-04-29 00:00:00.020000+02:00,task-24520,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-11 14:01:04.897000+02:00 +Internet,case-7314,2011-06-24 00:00:00+02:00,General,2011-05-30 09:02:48.360000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource11,2011-04-29 00:00:00.020000+02:00,task-24518,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-18 15:00:20.275000+02:00 +Internet,case-7314,2011-06-24 00:00:00+02:00,General,2011-05-30 09:02:48.360000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource11,2011-04-29 00:00:00.020000+02:00,task-25530,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-18 15:01:28.924000+02:00 +Desk,case-7317,2011-06-09 00:00:00+02:00,General,2011-05-31 11:22:16.958000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource14,2011-04-14 00:00:00.020000+02:00,task-23108,Confirmation of receipt,complete,EMPTY,Resource14,2011-05-20 12:08:45.978000+02:00 +Desk,case-7317,2011-06-09 00:00:00+02:00,General,2011-05-31 11:22:16.958000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource14,2011-04-14 00:00:00.020000+02:00,task-25843,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-20 12:09:02.506000+02:00 +Desk,case-7317,2011-06-09 00:00:00+02:00,General,2011-05-31 11:22:16.958000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource14,2011-04-14 00:00:00.020000+02:00,task-25845,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-20 12:09:19.150000+02:00 +Desk,case-7317,2011-06-09 00:00:00+02:00,General,2011-05-31 11:22:16.958000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource14,2011-04-14 00:00:00.020000+02:00,task-25846,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-20 12:09:38.541000+02:00 +Desk,case-7317,2011-06-09 00:00:00+02:00,General,2011-05-31 11:22:16.958000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource14,2011-04-14 00:00:00.020000+02:00,task-25844,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-20 12:09:52.885000+02:00 +Desk,case-7317,2011-06-09 00:00:00+02:00,General,2011-05-31 11:22:16.958000+02:00,2011-06-09 00:00:00.020000+02:00,,Resource14,2011-04-14 00:00:00.020000+02:00,task-25847,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-20 12:10:11.009000+02:00 +Internet,case-7320,2011-06-26 00:00:00+02:00,General,2011-06-28 09:29:37.394000+02:00,2011-06-26 00:00:00.020000+02:00,,Resource02,2011-05-01 00:00:00.020000+02:00,task-23186,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-10 14:19:08.002000+02:00 +Internet,case-7320,2011-06-26 00:00:00+02:00,General,2011-06-28 09:29:37.394000+02:00,2011-06-26 00:00:00.020000+02:00,,Resource02,2011-05-01 00:00:00.020000+02:00,task-24285,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-10 14:21:57.096000+02:00 +Internet,case-7320,2011-06-26 00:00:00+02:00,General,2011-06-28 09:29:37.394000+02:00,2011-06-26 00:00:00.020000+02:00,,Resource02,2011-05-01 00:00:00.020000+02:00,task-24287,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-10 14:53:10.645000+02:00 +Internet,case-7320,2011-06-26 00:00:00+02:00,General,2011-06-28 09:29:37.394000+02:00,2011-06-26 00:00:00.020000+02:00,,Resource02,2011-05-01 00:00:00.020000+02:00,task-24292,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-10 14:54:55.471000+02:00 +Internet,case-7320,2011-06-26 00:00:00+02:00,General,2011-06-28 09:29:37.394000+02:00,2011-06-26 00:00:00.020000+02:00,,Resource02,2011-05-01 00:00:00.020000+02:00,task-24286,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-10 15:16:16.005000+02:00 +Internet,case-7320,2011-06-26 00:00:00+02:00,General,2011-06-28 09:29:37.394000+02:00,2011-06-26 00:00:00.020000+02:00,,Resource02,2011-05-01 00:00:00.020000+02:00,task-24295,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-10 15:52:07.240000+02:00 +Internet,case-7322,2011-05-31 01:06:40+02:00,General,2011-10-07 16:30:37.337000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource14,2011-04-05 01:06:40.020000+02:00,task-23209,Confirmation of receipt,complete,EMPTY,Resource14,2011-05-19 11:45:56.728000+02:00 +Internet,case-7322,2011-05-31 01:06:40+02:00,General,2011-10-07 16:30:37.337000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource14,2011-04-05 01:06:40.020000+02:00,task-25674,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-19 11:46:51.028000+02:00 +Internet,case-7322,2011-05-31 01:06:40+02:00,General,2011-10-07 16:30:37.337000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource14,2011-04-05 01:06:40.020000+02:00,task-25677,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-19 11:47:05.956000+02:00 +Internet,case-7322,2011-05-31 01:06:40+02:00,General,2011-10-07 16:30:37.337000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource14,2011-04-05 01:06:40.020000+02:00,task-25678,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-19 11:47:26.113000+02:00 +Internet,case-7322,2011-05-31 01:06:40+02:00,General,2011-10-07 16:30:37.337000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource14,2011-04-05 01:06:40.020000+02:00,task-25675,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-06-07 13:58:45.371000+02:00 +Internet,case-7322,2011-05-31 01:06:40+02:00,General,2011-10-07 16:30:37.337000+02:00,2011-05-31 01:06:40.020000+02:00,,Resource14,2011-04-05 01:06:40.020000+02:00,task-28149,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-06-07 13:59:07.546000+02:00 +e-mail,case-7341,2011-06-24 01:06:40+02:00,General,2011-05-20 11:59:47.595000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource02,2011-04-29 01:06:40.020000+02:00,task-23333,Confirmation of receipt,complete,Group 1,Resource02,2011-05-10 10:23:17.026000+02:00 +e-mail,case-7341,2011-06-24 01:06:40+02:00,General,2011-05-20 11:59:47.595000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource02,2011-04-29 01:06:40.020000+02:00,task-24131,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-10 10:23:38.909000+02:00 +e-mail,case-7341,2011-06-24 01:06:40+02:00,General,2011-05-20 11:59:47.595000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource02,2011-04-29 01:06:40.020000+02:00,task-24133,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-10 10:23:53.523000+02:00 +e-mail,case-7341,2011-06-24 01:06:40+02:00,General,2011-05-20 11:59:47.595000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource02,2011-04-29 01:06:40.020000+02:00,task-24134,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-10 10:24:07.661000+02:00 +e-mail,case-7341,2011-06-24 01:06:40+02:00,General,2011-05-20 11:59:47.595000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource02,2011-04-29 01:06:40.020000+02:00,task-24132,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-10 10:32:56.148000+02:00 +e-mail,case-7341,2011-06-24 01:06:40+02:00,General,2011-05-20 11:59:47.595000+02:00,2011-06-24 01:06:40.020000+02:00,,Resource02,2011-04-29 01:06:40.020000+02:00,task-24136,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-10 10:33:12.883000+02:00 +Internet,case-7349,2011-06-06 00:00:00+02:00,General,2011-06-01 15:45:41.973000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource15,2011-05-03 00:00:00.020000+02:00,task-23533,Confirmation of receipt,complete,Group 1,Resource15,2011-05-10 10:42:12.520000+02:00 +Internet,case-7349,2011-06-06 00:00:00+02:00,General,2011-06-01 15:45:41.973000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource15,2011-05-03 00:00:00.020000+02:00,task-24146,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-10 10:42:29.658000+02:00 +Internet,case-7349,2011-06-06 00:00:00+02:00,General,2011-06-01 15:45:41.973000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource15,2011-05-03 00:00:00.020000+02:00,task-24149,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-10 10:42:42.497000+02:00 +Internet,case-7349,2011-06-06 00:00:00+02:00,General,2011-06-01 15:45:41.973000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource15,2011-05-03 00:00:00.020000+02:00,task-24147,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-10 10:42:56.639000+02:00 +Internet,case-7349,2011-06-06 00:00:00+02:00,General,2011-06-01 15:45:41.973000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource15,2011-05-03 00:00:00.020000+02:00,task-24152,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-10 10:43:16.934000+02:00 +Internet,case-7349,2011-06-06 00:00:00+02:00,General,2011-06-01 15:45:41.973000+02:00,2011-06-06 00:00:00.020000+02:00,,Resource15,2011-05-03 00:00:00.020000+02:00,task-24150,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:20:10.993000+02:00 +Internet,case-7358,2011-06-29 01:06:40+02:00,General,2011-09-02 10:03:10.286000+02:00,2011-06-29 01:06:40.020000+02:00,Group 5,Resource09,2011-05-04 01:06:40.020000+02:00,task-23633,Confirmation of receipt,complete,Group 1,Resource15,2011-05-10 12:09:25.071000+02:00 +Internet,case-7358,2011-06-29 01:06:40+02:00,General,2011-09-02 10:03:10.286000+02:00,2011-06-29 01:06:40.020000+02:00,Group 5,Resource09,2011-05-04 01:06:40.020000+02:00,task-24195,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-10 12:11:01.924000+02:00 +Internet,case-7358,2011-06-29 01:06:40+02:00,General,2011-09-02 10:03:10.286000+02:00,2011-06-29 01:06:40.020000+02:00,Group 5,Resource09,2011-05-04 01:06:40.020000+02:00,task-24194,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-10 12:11:56.155000+02:00 +Internet,case-7358,2011-06-29 01:06:40+02:00,General,2011-09-02 10:03:10.286000+02:00,2011-06-29 01:06:40.020000+02:00,Group 5,Resource09,2011-05-04 01:06:40.020000+02:00,task-24199,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-10 12:12:10.553000+02:00 +Internet,case-7358,2011-06-29 01:06:40+02:00,General,2011-09-02 10:03:10.286000+02:00,2011-06-29 01:06:40.020000+02:00,Group 5,Resource09,2011-05-04 01:06:40.020000+02:00,task-24200,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:22:53.530000+02:00 +Internet,case-7358,2011-06-29 01:06:40+02:00,General,2011-09-02 10:03:10.286000+02:00,2011-06-29 01:06:40.020000+02:00,Group 5,Resource09,2011-05-04 01:06:40.020000+02:00,task-24198,T07-2 Draft intern advice aspect 2,complete,EMPTY,Resource33,2011-05-30 12:13:59.270000+02:00 +Internet,case-7358,2011-06-29 01:06:40+02:00,General,2011-09-02 10:03:10.286000+02:00,2011-06-29 01:06:40.020000+02:00,Group 5,Resource09,2011-05-04 01:06:40.020000+02:00,task-27031,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-30 13:58:45.433000+02:00 +Internet,case-7358,2011-06-29 01:06:40+02:00,General,2011-09-02 10:03:10.286000+02:00,2011-06-29 01:06:40.020000+02:00,Group 5,Resource09,2011-05-04 01:06:40.020000+02:00,task-27147,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-30 13:59:04.568000+02:00 +Post,case-7362,2011-06-14 00:00:00+02:00,General,2011-08-03 10:41:37.121000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource09,2011-04-19 00:00:00.020000+02:00,task-23665,Confirmation of receipt,complete,EMPTY,Resource09,2011-06-08 14:08:44.629000+02:00 +Post,case-7362,2011-06-14 00:00:00+02:00,General,2011-08-03 10:41:37.121000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource09,2011-04-19 00:00:00.020000+02:00,task-28343,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-06-08 14:09:11.946000+02:00 +Post,case-7362,2011-06-14 00:00:00+02:00,General,2011-08-03 10:41:37.121000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource09,2011-04-19 00:00:00.020000+02:00,task-28342,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-06-08 14:09:29.570000+02:00 +Post,case-7362,2011-06-14 00:00:00+02:00,General,2011-08-03 10:41:37.121000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource09,2011-04-19 00:00:00.020000+02:00,task-28345,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-06-08 14:09:48.020000+02:00 +Post,case-7362,2011-06-14 00:00:00+02:00,General,2011-08-03 10:41:37.121000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource09,2011-04-19 00:00:00.020000+02:00,task-28346,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-06-08 14:10:06.215000+02:00 +Post,case-7362,2011-06-14 00:00:00+02:00,General,2011-08-03 10:41:37.121000+02:00,2011-06-14 00:00:00.020000+02:00,,Resource09,2011-04-19 00:00:00.020000+02:00,task-28344,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-06-08 14:10:29.567000+02:00 +Post,case-7363,2011-06-15 00:00:00+02:00,General,2011-05-31 08:36:31.861000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource12,2011-04-20 00:00:00.020000+02:00,task-23675,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-17 12:38:44.749000+02:00 +Post,case-7363,2011-06-15 00:00:00+02:00,General,2011-05-31 08:36:31.861000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource12,2011-04-20 00:00:00.020000+02:00,task-25272,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-17 12:40:16.987000+02:00 +Post,case-7363,2011-06-15 00:00:00+02:00,General,2011-05-31 08:36:31.861000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource12,2011-04-20 00:00:00.020000+02:00,task-25274,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-17 12:40:40.293000+02:00 +Post,case-7363,2011-06-15 00:00:00+02:00,General,2011-05-31 08:36:31.861000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource12,2011-04-20 00:00:00.020000+02:00,task-25275,T05 Print and send confirmation of receipt,complete,EMPTY,Resource12,2011-05-26 14:10:03.991000+02:00 +Post,case-7363,2011-06-15 00:00:00+02:00,General,2011-05-31 08:36:31.861000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource12,2011-04-20 00:00:00.020000+02:00,task-25273,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-26 14:15:02.840000+02:00 +Post,case-7363,2011-06-15 00:00:00+02:00,General,2011-05-31 08:36:31.861000+02:00,2011-06-15 00:00:00.020000+02:00,,Resource12,2011-04-20 00:00:00.020000+02:00,task-26506,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-26 14:15:27.393000+02:00 +Internet,case-7364,2011-06-29 01:06:40+02:00,General,2011-05-11 11:59:11.016000+02:00,2011-06-29 01:06:40.020000+02:00,,Resource02,2011-05-04 01:06:40.020000+02:00,task-23691,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-11 11:46:34.343000+02:00 +Internet,case-7364,2011-06-29 01:06:40+02:00,General,2011-05-11 11:59:11.016000+02:00,2011-06-29 01:06:40.020000+02:00,,Resource02,2011-05-04 01:06:40.020000+02:00,task-24471,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-11 11:46:51.298000+02:00 +Internet,case-7364,2011-06-29 01:06:40+02:00,General,2011-05-11 11:59:11.016000+02:00,2011-06-29 01:06:40.020000+02:00,,Resource02,2011-05-04 01:06:40.020000+02:00,task-24473,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-11 11:47:05.844000+02:00 +Internet,case-7364,2011-06-29 01:06:40+02:00,General,2011-05-11 11:59:11.016000+02:00,2011-06-29 01:06:40.020000+02:00,,Resource02,2011-05-04 01:06:40.020000+02:00,task-24474,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-11 11:47:16.821000+02:00 +Internet,case-7364,2011-06-29 01:06:40+02:00,General,2011-05-11 11:59:11.016000+02:00,2011-06-29 01:06:40.020000+02:00,,Resource02,2011-05-04 01:06:40.020000+02:00,task-24472,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-11 11:48:56.756000+02:00 +Internet,case-7364,2011-06-29 01:06:40+02:00,General,2011-05-11 11:59:11.016000+02:00,2011-06-29 01:06:40.020000+02:00,,Resource02,2011-05-04 01:06:40.020000+02:00,task-24475,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-11 11:49:14.353000+02:00 +Internet,case-7364,2011-06-29 01:06:40+02:00,General,2011-05-11 11:59:11.016000+02:00,2011-06-29 01:06:40.020000+02:00,,Resource02,2011-05-04 01:06:40.020000+02:00,task-24476,T11 Create document X request unlicensed,complete,Group 1,Resource02,2011-05-11 11:58:08.252000+02:00 +Internet,case-7364,2011-06-29 01:06:40+02:00,General,2011-05-11 11:59:11.016000+02:00,2011-06-29 01:06:40.020000+02:00,,Resource02,2011-05-04 01:06:40.020000+02:00,task-24478,T12 Check document X request unlicensed,complete,Group 4,Resource02,2011-05-11 11:58:31.858000+02:00 +Internet,case-7364,2011-06-29 01:06:40+02:00,General,2011-05-11 11:59:11.016000+02:00,2011-06-29 01:06:40.020000+02:00,,Resource02,2011-05-04 01:06:40.020000+02:00,task-24479,T14 Determine document X request unlicensed,complete,Group 3,Resource02,2011-05-11 11:59:00.071000+02:00 +Internet,case-7364,2011-06-29 01:06:40+02:00,General,2011-05-11 11:59:11.016000+02:00,2011-06-29 01:06:40.020000+02:00,,Resource02,2011-05-04 01:06:40.020000+02:00,task-24481,T15 Print document X request unlicensed,complete,Group 2,Resource02,2011-05-11 11:59:10.860000+02:00 +Internet,case-7416,2011-06-28 00:00:00+02:00,General,2011-11-18 11:17:34.048000+01:00,2011-06-28 00:00:00.020000+02:00,,admin1,2011-05-03 00:00:00.020000+02:00,task-23849,Confirmation of receipt,complete,EMPTY,Resource09,2011-06-07 11:31:22.403000+02:00 +Internet,case-7416,2011-06-28 00:00:00+02:00,General,2011-11-18 11:17:34.048000+01:00,2011-06-28 00:00:00.020000+02:00,,admin1,2011-05-03 00:00:00.020000+02:00,task-28087,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-06-07 11:31:43.390000+02:00 +Internet,case-7416,2011-06-28 00:00:00+02:00,General,2011-11-18 11:17:34.048000+01:00,2011-06-28 00:00:00.020000+02:00,,admin1,2011-05-03 00:00:00.020000+02:00,task-28089,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-06-07 11:31:59.148000+02:00 +Internet,case-7416,2011-06-28 00:00:00+02:00,General,2011-11-18 11:17:34.048000+01:00,2011-06-28 00:00:00.020000+02:00,,admin1,2011-05-03 00:00:00.020000+02:00,task-28090,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-06-07 11:32:13.508000+02:00 +Internet,case-7416,2011-06-28 00:00:00+02:00,General,2011-11-18 11:17:34.048000+01:00,2011-06-28 00:00:00.020000+02:00,,admin1,2011-05-03 00:00:00.020000+02:00,task-28088,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-06-07 11:32:25.780000+02:00 +Internet,case-7416,2011-06-28 00:00:00+02:00,General,2011-11-18 11:17:34.048000+01:00,2011-06-28 00:00:00.020000+02:00,,admin1,2011-05-03 00:00:00.020000+02:00,task-28091,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-06-07 11:33:00.325000+02:00 +Internet,case-7418,2011-06-24 00:00:00+02:00,General,2011-10-26 11:29:00.694000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource12,2011-04-29 00:00:00.020000+02:00,task-23902,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-16 11:41:29.436000+02:00 +Internet,case-7418,2011-06-24 00:00:00+02:00,General,2011-10-26 11:29:00.694000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource12,2011-04-29 00:00:00.020000+02:00,task-25119,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-16 11:45:39.109000+02:00 +Internet,case-7418,2011-06-24 00:00:00+02:00,General,2011-10-26 11:29:00.694000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource12,2011-04-29 00:00:00.020000+02:00,task-25122,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-16 11:51:48.198000+02:00 +Internet,case-7418,2011-06-24 00:00:00+02:00,General,2011-10-26 11:29:00.694000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource12,2011-04-29 00:00:00.020000+02:00,task-25124,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-18 14:15:11.109000+02:00 +Internet,case-7418,2011-06-24 00:00:00+02:00,General,2011-10-26 11:29:00.694000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource12,2011-04-29 00:00:00.020000+02:00,task-25120,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-06-06 10:53:12.796000+02:00 +Internet,case-7418,2011-06-24 00:00:00+02:00,General,2011-10-26 11:29:00.694000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource12,2011-04-29 00:00:00.020000+02:00,task-27729,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-06-06 10:53:34.816000+02:00 +Desk,case-7421,2011-05-26 00:00:00+02:00,General,2011-05-25 10:32:35.580000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource06,2011-03-31 00:00:00.020000+02:00,task-23956,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-12 15:06:02.799000+02:00 +Desk,case-7421,2011-05-26 00:00:00+02:00,General,2011-05-25 10:32:35.580000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource06,2011-03-31 00:00:00.020000+02:00,task-24771,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-12 15:10:29.245000+02:00 +Desk,case-7421,2011-05-26 00:00:00+02:00,General,2011-05-25 10:32:35.580000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource06,2011-03-31 00:00:00.020000+02:00,task-24770,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-12 15:10:46.281000+02:00 +Desk,case-7421,2011-05-26 00:00:00+02:00,General,2011-05-25 10:32:35.580000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource06,2011-03-31 00:00:00.020000+02:00,task-24780,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-12 15:11:02.261000+02:00 +Desk,case-7421,2011-05-26 00:00:00+02:00,General,2011-05-25 10:32:35.580000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource06,2011-03-31 00:00:00.020000+02:00,task-24782,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-12 15:11:16.129000+02:00 +Desk,case-7421,2011-05-26 00:00:00+02:00,General,2011-05-25 10:32:35.580000+02:00,2011-05-26 00:00:00.020000+02:00,,Resource06,2011-03-31 00:00:00.020000+02:00,task-24779,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-12 15:11:33.621000+02:00 +Internet,case-7423,2011-07-14 01:06:40+02:00,General,2011-10-14 16:31:58.382000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-04 01:06:40.020000+02:00,task-23982,Confirmation of receipt,complete,Group 1,Resource08,2011-05-10 10:40:07.422000+02:00 +Internet,case-7423,2011-07-14 01:06:40+02:00,General,2011-10-14 16:31:58.382000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-04 01:06:40.020000+02:00,task-24143,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-10 10:40:55.744000+02:00 +Internet,case-7423,2011-07-14 01:06:40+02:00,General,2011-10-14 16:31:58.382000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-04 01:06:40.020000+02:00,task-24145,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-05-10 10:42:18.290000+02:00 +Internet,case-7423,2011-07-14 01:06:40+02:00,General,2011-10-14 16:31:58.382000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-04 01:06:40.020000+02:00,task-24144,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-05-10 10:42:45.998000+02:00 +Internet,case-7423,2011-07-14 01:06:40+02:00,General,2011-10-14 16:31:58.382000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-04 01:06:40.020000+02:00,task-24151,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-05-10 10:43:09.945000+02:00 +Internet,case-7423,2011-07-14 01:06:40+02:00,General,2011-10-14 16:31:58.382000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-04 01:06:40.020000+02:00,task-24148,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-11 12:18:36.425000+02:00 +Post,case-7425,2011-06-20 01:06:40+02:00,General,2011-07-15 11:12:45.695000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource18,2011-04-25 01:06:40.020000+02:00,task-23997,Confirmation of receipt,complete,EMPTY,Resource18,2011-06-17 14:28:42.453000+02:00 +Post,case-7425,2011-06-20 01:06:40+02:00,General,2011-07-15 11:12:45.695000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource18,2011-04-25 01:06:40.020000+02:00,task-28995,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-06-17 14:31:43.842000+02:00 +Post,case-7425,2011-06-20 01:06:40+02:00,General,2011-07-15 11:12:45.695000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource18,2011-04-25 01:06:40.020000+02:00,task-28996,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-06-17 14:32:02.649000+02:00 +Post,case-7425,2011-06-20 01:06:40+02:00,General,2011-07-15 11:12:45.695000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource18,2011-04-25 01:06:40.020000+02:00,task-29000,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-06-17 14:32:31.221000+02:00 +Post,case-7425,2011-06-20 01:06:40+02:00,General,2011-07-15 11:12:45.695000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource18,2011-04-25 01:06:40.020000+02:00,task-28999,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-06-17 14:32:48.654000+02:00 +Post,case-7425,2011-06-20 01:06:40+02:00,General,2011-07-15 11:12:45.695000+02:00,2011-06-20 01:06:40.020000+02:00,,Resource18,2011-04-25 01:06:40.020000+02:00,task-29002,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-06-17 14:33:05.734000+02:00 +Post,case-7426,2011-06-20 00:00:00+02:00,General,2011-07-20 10:35:05.430000+02:00,2011-06-20 00:00:00.020000+02:00,,Resource18,2011-04-25 00:00:00.020000+02:00,task-24032,Confirmation of receipt,complete,EMPTY,Resource18,2011-06-21 13:53:40.406000+02:00 +Post,case-7426,2011-06-20 00:00:00+02:00,General,2011-07-20 10:35:05.430000+02:00,2011-06-20 00:00:00.020000+02:00,,Resource18,2011-04-25 00:00:00.020000+02:00,task-29320,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-06-21 13:53:58.826000+02:00 +Post,case-7426,2011-06-20 00:00:00+02:00,General,2011-07-20 10:35:05.430000+02:00,2011-06-20 00:00:00.020000+02:00,,Resource18,2011-04-25 00:00:00.020000+02:00,task-29322,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-06-21 13:54:23.025000+02:00 +Post,case-7426,2011-06-20 00:00:00+02:00,General,2011-07-20 10:35:05.430000+02:00,2011-06-20 00:00:00.020000+02:00,,Resource18,2011-04-25 00:00:00.020000+02:00,task-29321,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-06-21 13:54:58.269000+02:00 +Post,case-7426,2011-06-20 00:00:00+02:00,General,2011-07-20 10:35:05.430000+02:00,2011-06-20 00:00:00.020000+02:00,,Resource18,2011-04-25 00:00:00.020000+02:00,task-29323,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-06-21 13:55:16.225000+02:00 +Post,case-7426,2011-06-20 00:00:00+02:00,General,2011-07-20 10:35:05.430000+02:00,2011-06-20 00:00:00.020000+02:00,,Resource18,2011-04-25 00:00:00.020000+02:00,task-29324,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-06-21 13:55:38.695000+02:00 +Internet,case-7442,2011-06-30 00:00:00+02:00,General,2011-05-23 14:00:45.003000+02:00,2011-06-30 00:00:00.020000+02:00,,Resource11,2011-05-05 00:00:00.020000+02:00,task-24126,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-13 15:04:01.676000+02:00 +Internet,case-7442,2011-06-30 00:00:00+02:00,General,2011-05-23 14:00:45.003000+02:00,2011-06-30 00:00:00.020000+02:00,,Resource11,2011-05-05 00:00:00.020000+02:00,task-25009,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-13 15:04:14.452000+02:00 +Internet,case-7442,2011-06-30 00:00:00+02:00,General,2011-05-23 14:00:45.003000+02:00,2011-06-30 00:00:00.020000+02:00,,Resource11,2011-05-05 00:00:00.020000+02:00,task-25011,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-13 15:04:29.810000+02:00 +Internet,case-7442,2011-06-30 00:00:00+02:00,General,2011-05-23 14:00:45.003000+02:00,2011-06-30 00:00:00.020000+02:00,,Resource11,2011-05-05 00:00:00.020000+02:00,task-25012,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-13 15:04:47.925000+02:00 +Internet,case-7442,2011-06-30 00:00:00+02:00,General,2011-05-23 14:00:45.003000+02:00,2011-06-30 00:00:00.020000+02:00,,Resource11,2011-05-05 00:00:00.020000+02:00,task-25010,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-13 15:04:59.317000+02:00 +Internet,case-7442,2011-06-30 00:00:00+02:00,General,2011-05-23 14:00:45.003000+02:00,2011-06-30 00:00:00.020000+02:00,,Resource11,2011-05-05 00:00:00.020000+02:00,task-25014,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-05-13 15:05:14.064000+02:00 +Internet,case-7443,2011-07-03 01:06:40+02:00,General,2011-05-11 15:00:12.108000+02:00,2011-07-03 01:06:40.020000+02:00,,Resource02,2011-05-08 01:06:40.020000+02:00,task-24161,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-11 14:35:35.318000+02:00 +Internet,case-7443,2011-07-03 01:06:40+02:00,General,2011-05-11 15:00:12.108000+02:00,2011-07-03 01:06:40.020000+02:00,,Resource02,2011-05-08 01:06:40.020000+02:00,task-24521,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-11 14:36:02.557000+02:00 +Internet,case-7443,2011-07-03 01:06:40+02:00,General,2011-05-11 15:00:12.108000+02:00,2011-07-03 01:06:40.020000+02:00,,Resource02,2011-05-08 01:06:40.020000+02:00,task-24523,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-11 14:36:15.591000+02:00 +Internet,case-7443,2011-07-03 01:06:40+02:00,General,2011-05-11 15:00:12.108000+02:00,2011-07-03 01:06:40.020000+02:00,,Resource02,2011-05-08 01:06:40.020000+02:00,task-24524,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-11 14:36:36.997000+02:00 +Internet,case-7443,2011-07-03 01:06:40+02:00,General,2011-05-11 15:00:12.108000+02:00,2011-07-03 01:06:40.020000+02:00,,Resource02,2011-05-08 01:06:40.020000+02:00,task-24522,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-11 14:36:55.073000+02:00 +Internet,case-7443,2011-07-03 01:06:40+02:00,General,2011-05-11 15:00:12.108000+02:00,2011-07-03 01:06:40.020000+02:00,,Resource02,2011-05-08 01:06:40.020000+02:00,task-24526,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-11 14:37:10.431000+02:00 +Internet,case-7443,2011-07-03 01:06:40+02:00,General,2011-05-11 15:00:12.108000+02:00,2011-07-03 01:06:40.020000+02:00,,Resource02,2011-05-08 01:06:40.020000+02:00,task-24527,T11 Create document X request unlicensed,complete,Group 1,Resource02,2011-05-11 14:59:21.655000+02:00 +Internet,case-7443,2011-07-03 01:06:40+02:00,General,2011-05-11 15:00:12.108000+02:00,2011-07-03 01:06:40.020000+02:00,,Resource02,2011-05-08 01:06:40.020000+02:00,task-24536,T12 Check document X request unlicensed,complete,Group 4,Resource02,2011-05-11 14:59:39.929000+02:00 +Internet,case-7443,2011-07-03 01:06:40+02:00,General,2011-05-11 15:00:12.108000+02:00,2011-07-03 01:06:40.020000+02:00,,Resource02,2011-05-08 01:06:40.020000+02:00,task-24537,T14 Determine document X request unlicensed,complete,Group 3,Resource02,2011-05-11 14:59:58.415000+02:00 +Internet,case-7443,2011-07-03 01:06:40+02:00,General,2011-05-11 15:00:12.108000+02:00,2011-07-03 01:06:40.020000+02:00,,Resource02,2011-05-08 01:06:40.020000+02:00,task-24538,T15 Print document X request unlicensed,complete,Group 2,Resource02,2011-05-11 15:00:11.935000+02:00 +Desk,case-7469,2011-07-03 01:06:40+02:00,General,2011-06-09 11:56:05.923000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource11,2011-04-27 01:06:40.020000+02:00,task-24384,Confirmation of receipt,complete,EMPTY,Resource07,2011-05-13 10:46:32.480000+02:00 +Desk,case-7469,2011-07-03 01:06:40+02:00,General,2011-06-09 11:56:05.923000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource11,2011-04-27 01:06:40.020000+02:00,task-24940,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-05-13 13:02:51.992000+02:00 +Desk,case-7469,2011-07-03 01:06:40+02:00,General,2011-06-09 11:56:05.923000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource11,2011-04-27 01:06:40.020000+02:00,task-24962,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-05-13 13:03:05.025000+02:00 +Desk,case-7469,2011-07-03 01:06:40+02:00,General,2011-06-09 11:56:05.923000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource11,2011-04-27 01:06:40.020000+02:00,task-24963,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-05-13 13:03:23.711000+02:00 +Desk,case-7469,2011-07-03 01:06:40+02:00,General,2011-06-09 11:56:05.923000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource11,2011-04-27 01:06:40.020000+02:00,task-24941,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-13 13:03:45.572000+02:00 +Desk,case-7469,2011-07-03 01:06:40+02:00,General,2011-06-09 11:56:05.923000+02:00,2011-06-22 01:06:40.020000+02:00,,Resource11,2011-04-27 01:06:40.020000+02:00,task-24966,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-05-13 13:04:15.024000+02:00 +Desk,case-7472,2011-06-16 01:06:40+02:00,General,2011-06-16 10:45:12.296000+02:00,2011-06-16 01:06:40.020000+02:00,,Resource08,2011-04-21 01:06:40.020000+02:00,task-24467,Confirmation of receipt,complete,EMPTY,Resource08,2011-05-12 15:08:38.389000+02:00 +Desk,case-7472,2011-06-16 01:06:40+02:00,General,2011-06-16 10:45:12.296000+02:00,2011-06-16 01:06:40.020000+02:00,,Resource08,2011-04-21 01:06:40.020000+02:00,task-24772,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-12 15:09:53.175000+02:00 +Desk,case-7472,2011-06-16 01:06:40+02:00,General,2011-06-16 10:45:12.296000+02:00,2011-06-16 01:06:40.020000+02:00,,Resource08,2011-04-21 01:06:40.020000+02:00,task-24776,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-05-12 15:10:49.451000+02:00 +Desk,case-7472,2011-06-16 01:06:40+02:00,General,2011-06-16 10:45:12.296000+02:00,2011-06-16 01:06:40.020000+02:00,,Resource08,2011-04-21 01:06:40.020000+02:00,task-24773,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-05-12 15:11:19.925000+02:00 +Desk,case-7472,2011-06-16 01:06:40+02:00,General,2011-06-16 10:45:12.296000+02:00,2011-06-16 01:06:40.020000+02:00,,Resource08,2011-04-21 01:06:40.020000+02:00,task-24783,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-05-12 15:43:48.350000+02:00 +Desk,case-7472,2011-06-16 01:06:40+02:00,General,2011-06-16 10:45:12.296000+02:00,2011-06-16 01:06:40.020000+02:00,,Resource08,2011-04-21 01:06:40.020000+02:00,task-24781,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-13 13:54:06.020000+02:00 +Desk,case-7477,2011-06-13 00:00:00+02:00,General,2011-06-06 07:30:41.375000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-24516,Confirmation of receipt,complete,Group 1,Resource01,2011-05-12 15:09:41.022000+02:00 +Desk,case-7477,2011-06-13 00:00:00+02:00,General,2011-06-06 07:30:41.375000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-24774,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-12 15:10:02.025000+02:00 +Desk,case-7477,2011-06-13 00:00:00+02:00,General,2011-06-06 07:30:41.375000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-24777,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-12 15:10:24.466000+02:00 +Desk,case-7477,2011-06-13 00:00:00+02:00,General,2011-06-06 07:30:41.375000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-24778,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-12 15:10:42.004000+02:00 +Desk,case-7477,2011-06-13 00:00:00+02:00,General,2011-06-06 07:30:41.375000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-24775,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-13 14:44:39.096000+02:00 +Desk,case-7477,2011-06-13 00:00:00+02:00,General,2011-06-06 07:30:41.375000+02:00,2011-06-13 00:00:00.020000+02:00,,Resource11,2011-04-18 00:00:00.020000+02:00,task-24990,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-05-13 14:45:00.938000+02:00 +Desk,case-7497,2011-07-21 01:06:40+02:00,General,2011-07-20 09:23:56.285000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource13,2011-04-21 01:06:40.020000+02:00,task-24929,Confirmation of receipt,complete,EMPTY,Resource13,2011-05-20 11:19:41.410000+02:00 +Desk,case-7497,2011-07-21 01:06:40+02:00,General,2011-07-20 09:23:56.285000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource13,2011-04-21 01:06:40.020000+02:00,task-25828,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-05-20 11:20:28.356000+02:00 +Desk,case-7497,2011-07-21 01:06:40+02:00,General,2011-07-20 09:23:56.285000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource13,2011-04-21 01:06:40.020000+02:00,task-25829,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-05-20 11:49:32.796000+02:00 +Desk,case-7497,2011-07-21 01:06:40+02:00,General,2011-07-20 09:23:56.285000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource13,2011-04-21 01:06:40.020000+02:00,task-25831,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-05-20 11:49:46.080000+02:00 +Desk,case-7497,2011-07-21 01:06:40+02:00,General,2011-07-20 09:23:56.285000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource13,2011-04-21 01:06:40.020000+02:00,task-25830,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-05-26 08:37:42.971000+02:00 +Desk,case-7497,2011-07-21 01:06:40+02:00,General,2011-07-20 09:23:56.285000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource13,2011-04-21 01:06:40.020000+02:00,task-26360,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-27 16:42:41.664000+02:00 +Desk,case-7503,2011-09-15 01:06:40+02:00,General,2011-09-15 12:22:10.181000+02:00,2011-09-15 01:06:40.020000+02:00,,Resource06,2011-04-28 01:06:40.020000+02:00,task-25041,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-26 16:52:16.671000+02:00 +Desk,case-7503,2011-09-15 01:06:40+02:00,General,2011-09-15 12:22:10.181000+02:00,2011-09-15 01:06:40.020000+02:00,,Resource06,2011-04-28 01:06:40.020000+02:00,task-26592,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-26 16:52:36.320000+02:00 +Desk,case-7503,2011-09-15 01:06:40+02:00,General,2011-09-15 12:22:10.181000+02:00,2011-09-15 01:06:40.020000+02:00,,Resource06,2011-04-28 01:06:40.020000+02:00,task-26594,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-26 16:52:51.250000+02:00 +Desk,case-7503,2011-09-15 01:06:40+02:00,General,2011-09-15 12:22:10.181000+02:00,2011-09-15 01:06:40.020000+02:00,,Resource06,2011-04-28 01:06:40.020000+02:00,task-26595,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-26 16:53:01.304000+02:00 +Desk,case-7503,2011-09-15 01:06:40+02:00,General,2011-09-15 12:22:10.181000+02:00,2011-09-15 01:06:40.020000+02:00,,Resource06,2011-04-28 01:06:40.020000+02:00,task-26593,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-26 16:53:13.295000+02:00 +Desk,case-7503,2011-09-15 01:06:40+02:00,General,2011-09-15 12:22:10.181000+02:00,2011-09-15 01:06:40.020000+02:00,,Resource06,2011-04-28 01:06:40.020000+02:00,task-26596,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-26 16:53:27.922000+02:00 +Internet,case-7523,2011-09-20 01:06:40+02:00,General,2011-09-01 12:40:46.536000+02:00,2011-09-20 01:06:40.020000+02:00,,Resource02,2011-05-10 01:06:40.020000+02:00,task-25098,Confirmation of receipt,complete,Group 1,Resource02,2011-05-24 09:51:25.110000+02:00 +Internet,case-7523,2011-09-20 01:06:40+02:00,General,2011-09-01 12:40:46.536000+02:00,2011-09-20 01:06:40.020000+02:00,,Resource02,2011-05-10 01:06:40.020000+02:00,task-26165,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-24 09:51:50.622000+02:00 +Internet,case-7523,2011-09-20 01:06:40+02:00,General,2011-09-01 12:40:46.536000+02:00,2011-09-20 01:06:40.020000+02:00,,Resource02,2011-05-10 01:06:40.020000+02:00,task-26167,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-24 09:52:19.767000+02:00 +Internet,case-7523,2011-09-20 01:06:40+02:00,General,2011-09-01 12:40:46.536000+02:00,2011-09-20 01:06:40.020000+02:00,,Resource02,2011-05-10 01:06:40.020000+02:00,task-26168,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-24 09:52:32.606000+02:00 +Internet,case-7523,2011-09-20 01:06:40+02:00,General,2011-09-01 12:40:46.536000+02:00,2011-09-20 01:06:40.020000+02:00,,Resource02,2011-05-10 01:06:40.020000+02:00,task-26166,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-24 10:26:18.635000+02:00 +Internet,case-7523,2011-09-20 01:06:40+02:00,General,2011-09-01 12:40:46.536000+02:00,2011-09-20 01:06:40.020000+02:00,,Resource02,2011-05-10 01:06:40.020000+02:00,task-26181,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-24 10:27:12.156000+02:00 +Internet,case-7525,2011-08-01 01:06:40+02:00,General,2011-08-02 11:10:20.030000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource02,2011-05-11 01:06:40.020000+02:00,task-25103,Confirmation of receipt,complete,Group 1,Resource02,2011-05-23 15:38:02.577000+02:00 +Internet,case-7525,2011-08-01 01:06:40+02:00,General,2011-08-02 11:10:20.030000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource02,2011-05-11 01:06:40.020000+02:00,task-26111,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-06-01 07:54:17.642000+02:00 +Internet,case-7525,2011-08-01 01:06:40+02:00,General,2011-08-02 11:10:20.030000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource02,2011-05-11 01:06:40.020000+02:00,task-27392,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-06-01 07:54:29.708000+02:00 +Internet,case-7525,2011-08-01 01:06:40+02:00,General,2011-08-02 11:10:20.030000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource02,2011-05-11 01:06:40.020000+02:00,task-27393,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-06-01 07:54:42.362000+02:00 +Internet,case-7525,2011-08-01 01:06:40+02:00,General,2011-08-02 11:10:20.030000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource02,2011-05-11 01:06:40.020000+02:00,task-26112,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-06-01 09:43:46.526000+02:00 +Internet,case-7525,2011-08-01 01:06:40+02:00,General,2011-08-02 11:10:20.030000+02:00,2011-08-01 01:06:40.020000+02:00,,Resource02,2011-05-11 01:06:40.020000+02:00,task-27450,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-06-01 12:52:48.457000+02:00 +Desk,case-7535,2011-06-21 00:00:00+02:00,General,2011-05-27 09:10:17.111000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource08,2011-04-26 00:00:00.020000+02:00,task-25174,Confirmation of receipt,complete,Group 1,Resource08,2011-05-19 14:18:29.277000+02:00 +Desk,case-7535,2011-06-21 00:00:00+02:00,General,2011-05-27 09:10:17.111000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource08,2011-04-26 00:00:00.020000+02:00,task-25759,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-05-19 14:19:10.571000+02:00 +Desk,case-7535,2011-06-21 00:00:00+02:00,General,2011-05-27 09:10:17.111000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource08,2011-04-26 00:00:00.020000+02:00,task-25761,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-05-19 14:19:34.284000+02:00 +Desk,case-7535,2011-06-21 00:00:00+02:00,General,2011-05-27 09:10:17.111000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource08,2011-04-26 00:00:00.020000+02:00,task-25758,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-19 14:20:39.344000+02:00 +Desk,case-7535,2011-06-21 00:00:00+02:00,General,2011-05-27 09:10:17.111000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource08,2011-04-26 00:00:00.020000+02:00,task-25763,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-05-19 14:21:11.536000+02:00 +Desk,case-7535,2011-06-21 00:00:00+02:00,General,2011-05-27 09:10:17.111000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource08,2011-04-26 00:00:00.020000+02:00,task-25764,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-05-19 14:21:55.516000+02:00 +Desk,case-7535,2011-06-21 00:00:00+02:00,General,2011-05-27 09:10:17.111000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource08,2011-04-26 00:00:00.020000+02:00,task-25762,T11 Create document X request unlicensed,complete,Group 1,Resource08,2011-05-20 09:12:28.197000+02:00 +Desk,case-7535,2011-06-21 00:00:00+02:00,General,2011-05-27 09:10:17.111000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource08,2011-04-26 00:00:00.020000+02:00,task-25813,T12 Check document X request unlicensed,complete,EMPTY,Resource04,2011-05-20 10:44:33.248000+02:00 +Desk,case-7535,2011-06-21 00:00:00+02:00,General,2011-05-27 09:10:17.111000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource08,2011-04-26 00:00:00.020000+02:00,task-25824,T14 Determine document X request unlicensed,complete,Group 3,Resource08,2011-05-20 10:45:30.738000+02:00 +Desk,case-7535,2011-06-21 00:00:00+02:00,General,2011-05-27 09:10:17.111000+02:00,2011-06-21 00:00:00.020000+02:00,,Resource08,2011-04-26 00:00:00.020000+02:00,task-25825,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-05-27 09:10:16.853000+02:00 +Desk,case-7541,2011-06-23 00:00:00+02:00,General,2011-06-01 11:08:31.534000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-25180,Confirmation of receipt,complete,Group 1,Resource04,2011-05-19 11:55:23.539000+02:00 +Desk,case-7541,2011-06-23 00:00:00+02:00,General,2011-06-01 11:08:31.534000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-25683,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-19 11:55:39.014000+02:00 +Desk,case-7541,2011-06-23 00:00:00+02:00,General,2011-06-01 11:08:31.534000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-25682,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-19 11:55:51.485000+02:00 +Desk,case-7541,2011-06-23 00:00:00+02:00,General,2011-06-01 11:08:31.534000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-25685,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-19 11:56:03.092000+02:00 +Desk,case-7541,2011-06-23 00:00:00+02:00,General,2011-06-01 11:08:31.534000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-25686,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-19 11:56:13.624000+02:00 +Desk,case-7541,2011-06-23 00:00:00+02:00,General,2011-06-01 11:08:31.534000+02:00,2011-06-23 00:00:00.020000+02:00,,Resource04,2011-04-28 00:00:00.020000+02:00,task-25684,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-19 11:56:26.335000+02:00 +Internet,case-7556,2011-07-06 00:00:00+02:00,General,2011-07-11 11:35:18.493000+02:00,2011-07-06 00:00:00.020000+02:00,Group 5,Resource02,2011-05-11 00:00:00.020000+02:00,task-25215,Confirmation of receipt,complete,EMPTY,Resource08,2011-05-27 09:15:44.787000+02:00 +Internet,case-7556,2011-07-06 00:00:00+02:00,General,2011-07-11 11:35:18.493000+02:00,2011-07-06 00:00:00.020000+02:00,Group 5,Resource02,2011-05-11 00:00:00.020000+02:00,task-26618,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-27 09:16:25.219000+02:00 +Internet,case-7556,2011-07-06 00:00:00+02:00,General,2011-07-11 11:35:18.493000+02:00,2011-07-06 00:00:00.020000+02:00,Group 5,Resource02,2011-05-11 00:00:00.020000+02:00,task-26620,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-05-27 09:17:02.587000+02:00 +Internet,case-7556,2011-07-06 00:00:00+02:00,General,2011-07-11 11:35:18.493000+02:00,2011-07-06 00:00:00.020000+02:00,Group 5,Resource02,2011-05-11 00:00:00.020000+02:00,task-26621,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-06-01 13:43:51.381000+02:00 +Internet,case-7556,2011-07-06 00:00:00+02:00,General,2011-07-11 11:35:18.493000+02:00,2011-07-06 00:00:00.020000+02:00,Group 5,Resource02,2011-05-11 00:00:00.020000+02:00,task-26619,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-06-01 13:48:13.149000+02:00 +Internet,case-7556,2011-07-06 00:00:00+02:00,General,2011-07-11 11:35:18.493000+02:00,2011-07-06 00:00:00.020000+02:00,Group 5,Resource02,2011-05-11 00:00:00.020000+02:00,task-27528,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-06-01 13:48:31.441000+02:00 +Internet,case-7558,2011-07-06 00:00:00+02:00,General,2011-05-31 00:00:00.020000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource12,2011-05-11 00:00:00.020000+02:00,task-25231,Confirmation of receipt,complete,EMPTY,Resource12,2011-05-26 09:32:07.512000+02:00 +Internet,case-7558,2011-07-06 00:00:00+02:00,General,2011-05-31 00:00:00.020000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource12,2011-05-11 00:00:00.020000+02:00,task-26385,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-05-26 09:32:42.394000+02:00 +Internet,case-7558,2011-07-06 00:00:00+02:00,General,2011-05-31 00:00:00.020000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource12,2011-05-11 00:00:00.020000+02:00,task-26387,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-05-26 09:33:10.240000+02:00 +Internet,case-7558,2011-07-06 00:00:00+02:00,General,2011-05-31 00:00:00.020000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource12,2011-05-11 00:00:00.020000+02:00,task-26388,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-05-26 09:33:32.502000+02:00 +Internet,case-7558,2011-07-06 00:00:00+02:00,General,2011-05-31 00:00:00.020000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource12,2011-05-11 00:00:00.020000+02:00,task-26386,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-05-26 09:34:01.579000+02:00 +Internet,case-7558,2011-07-06 00:00:00+02:00,General,2011-05-31 00:00:00.020000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource12,2011-05-11 00:00:00.020000+02:00,task-26389,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-05-26 09:34:55.274000+02:00 +Internet,case-7563,2011-07-07 00:00:00+02:00,General,2011-06-06 14:57:38.616000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-25283,Confirmation of receipt,complete,Group 1,Resource01,2011-05-18 14:26:19.203000+02:00 +Internet,case-7563,2011-07-07 00:00:00+02:00,General,2011-06-06 14:57:38.616000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-25503,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-18 14:26:58.692000+02:00 +Internet,case-7563,2011-07-07 00:00:00+02:00,General,2011-06-06 14:57:38.616000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-25505,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-18 14:28:52.647000+02:00 +Internet,case-7563,2011-07-07 00:00:00+02:00,General,2011-06-06 14:57:38.616000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-25507,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-18 14:29:03.693000+02:00 +Internet,case-7563,2011-07-07 00:00:00+02:00,General,2011-06-06 14:57:38.616000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-25504,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-26 10:19:42.709000+02:00 +Internet,case-7563,2011-07-07 00:00:00+02:00,General,2011-06-06 14:57:38.616000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-26405,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-26 13:15:05.892000+02:00 +Internet,case-7565,2011-08-18 01:06:40+02:00,General,2011-08-15 11:57:56.227000+02:00,2011-08-18 01:06:40.020000+02:00,,Resource13,2011-05-12 01:06:40.020000+02:00,task-25290,Confirmation of receipt,complete,EMPTY,Resource13,2011-05-24 07:14:18.292000+02:00 +Internet,case-7565,2011-08-18 01:06:40+02:00,General,2011-08-15 11:57:56.227000+02:00,2011-08-18 01:06:40.020000+02:00,,Resource13,2011-05-12 01:06:40.020000+02:00,task-26134,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-05-24 07:15:21.853000+02:00 +Internet,case-7565,2011-08-18 01:06:40+02:00,General,2011-08-15 11:57:56.227000+02:00,2011-08-18 01:06:40.020000+02:00,,Resource13,2011-05-12 01:06:40.020000+02:00,task-26135,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-05-24 07:15:36.573000+02:00 +Internet,case-7565,2011-08-18 01:06:40+02:00,General,2011-08-15 11:57:56.227000+02:00,2011-08-18 01:06:40.020000+02:00,,Resource13,2011-05-12 01:06:40.020000+02:00,task-26137,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-05-24 07:15:54.256000+02:00 +Internet,case-7565,2011-08-18 01:06:40+02:00,General,2011-08-15 11:57:56.227000+02:00,2011-08-18 01:06:40.020000+02:00,,Resource13,2011-05-12 01:06:40.020000+02:00,task-26136,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-05-26 08:41:27.038000+02:00 +Internet,case-7565,2011-08-18 01:06:40+02:00,General,2011-08-15 11:57:56.227000+02:00,2011-08-18 01:06:40.020000+02:00,,Resource13,2011-05-12 01:06:40.020000+02:00,task-26362,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-27 16:36:58.131000+02:00 +Internet,case-7566,2011-07-07 00:00:00+02:00,General,2011-08-22 12:42:33.383000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource05,2011-05-12 00:00:00.020000+02:00,task-25291,Confirmation of receipt,complete,Group 1,Resource05,2011-05-23 11:58:36.043000+02:00 +Internet,case-7566,2011-07-07 00:00:00+02:00,General,2011-08-22 12:42:33.383000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource05,2011-05-12 00:00:00.020000+02:00,task-26023,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-23 12:19:03.199000+02:00 +Internet,case-7566,2011-07-07 00:00:00+02:00,General,2011-08-22 12:42:33.383000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource05,2011-05-12 00:00:00.020000+02:00,task-26030,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-23 12:19:21.547000+02:00 +Internet,case-7566,2011-07-07 00:00:00+02:00,General,2011-08-22 12:42:33.383000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource05,2011-05-12 00:00:00.020000+02:00,task-26031,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-05-23 12:23:44.401000+02:00 +Internet,case-7566,2011-07-07 00:00:00+02:00,General,2011-08-22 12:42:33.383000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource05,2011-05-12 00:00:00.020000+02:00,task-26024,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-23 12:24:04.495000+02:00 +Internet,case-7566,2011-07-07 00:00:00+02:00,General,2011-08-22 12:42:33.383000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource05,2011-05-12 00:00:00.020000+02:00,task-26035,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-23 12:24:26.728000+02:00 +Internet,case-7567,2011-07-07 00:00:00+02:00,General,2011-06-09 11:33:30.970000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-25293,Confirmation of receipt,complete,Group 1,Resource01,2011-05-18 14:33:56.160000+02:00 +Internet,case-7567,2011-07-07 00:00:00+02:00,General,2011-06-09 11:33:30.970000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-25508,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-18 14:35:12.999000+02:00 +Internet,case-7567,2011-07-07 00:00:00+02:00,General,2011-06-09 11:33:30.970000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-25510,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-18 14:35:24.369000+02:00 +Internet,case-7567,2011-07-07 00:00:00+02:00,General,2011-06-09 11:33:30.970000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-25511,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-18 14:35:33.678000+02:00 +Internet,case-7567,2011-07-07 00:00:00+02:00,General,2011-06-09 11:33:30.970000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-25509,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-05-23 12:30:30.770000+02:00 +Internet,case-7567,2011-07-07 00:00:00+02:00,General,2011-06-09 11:33:30.970000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource11,2011-05-12 00:00:00.020000+02:00,task-26050,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-05-23 12:30:48.690000+02:00 +Internet,case-7568,2011-07-07 00:00:00+02:00,General,2011-08-30 12:09:03.786000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource18,2011-05-12 00:00:00.020000+02:00,task-25294,Confirmation of receipt,complete,EMPTY,Resource18,2011-06-20 14:29:09.929000+02:00 +Internet,case-7568,2011-07-07 00:00:00+02:00,General,2011-08-30 12:09:03.786000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource18,2011-05-12 00:00:00.020000+02:00,task-29187,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-06-20 14:29:31.825000+02:00 +Internet,case-7568,2011-07-07 00:00:00+02:00,General,2011-08-30 12:09:03.786000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource18,2011-05-12 00:00:00.020000+02:00,task-29189,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-06-20 14:30:14.271000+02:00 +Internet,case-7568,2011-07-07 00:00:00+02:00,General,2011-08-30 12:09:03.786000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource18,2011-05-12 00:00:00.020000+02:00,task-29190,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-06-20 14:30:36.903000+02:00 +Internet,case-7568,2011-07-07 00:00:00+02:00,General,2011-08-30 12:09:03.786000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource18,2011-05-12 00:00:00.020000+02:00,task-29188,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-06-20 14:36:11.751000+02:00 +Internet,case-7568,2011-07-07 00:00:00+02:00,General,2011-08-30 12:09:03.786000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource18,2011-05-12 00:00:00.020000+02:00,task-29191,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-06-20 14:36:47.178000+02:00 +Internet,case-7569,2011-07-07 00:00:00+02:00,General,2011-08-30 13:50:32.613000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource12,2011-05-12 00:00:00.020000+02:00,task-25299,Confirmation of receipt,complete,EMPTY,Resource12,2011-06-06 09:00:20.128000+02:00 +Internet,case-7569,2011-07-07 00:00:00+02:00,General,2011-08-30 13:50:32.613000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource12,2011-05-12 00:00:00.020000+02:00,task-27654,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-06-06 09:01:10.436000+02:00 +Internet,case-7569,2011-07-07 00:00:00+02:00,General,2011-08-30 13:50:32.613000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource12,2011-05-12 00:00:00.020000+02:00,task-27657,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-06-06 09:49:11.050000+02:00 +Internet,case-7569,2011-07-07 00:00:00+02:00,General,2011-08-30 13:50:32.613000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource12,2011-05-12 00:00:00.020000+02:00,task-27653,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-06-06 10:28:13.678000+02:00 +Internet,case-7569,2011-07-07 00:00:00+02:00,General,2011-08-30 13:50:32.613000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource12,2011-05-12 00:00:00.020000+02:00,task-27711,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-06-06 10:28:36.647000+02:00 +Internet,case-7569,2011-07-07 00:00:00+02:00,General,2011-08-30 13:50:32.613000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource12,2011-05-12 00:00:00.020000+02:00,task-27712,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-06-06 10:29:20.577000+02:00 +Internet,case-7570,2011-07-10 00:00:00+02:00,General,2011-07-11 12:17:31.615000+02:00,2011-07-10 00:00:00.020000+02:00,,Resource01,2011-05-15 00:00:00.020000+02:00,task-25300,Confirmation of receipt,complete,Group 1,Resource01,2011-05-20 15:08:44.165000+02:00 +Internet,case-7570,2011-07-10 00:00:00+02:00,General,2011-07-11 12:17:31.615000+02:00,2011-07-10 00:00:00.020000+02:00,,Resource01,2011-05-15 00:00:00.020000+02:00,task-25887,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-20 15:09:03.161000+02:00 +Internet,case-7570,2011-07-10 00:00:00+02:00,General,2011-07-11 12:17:31.615000+02:00,2011-07-10 00:00:00.020000+02:00,,Resource01,2011-05-15 00:00:00.020000+02:00,task-25889,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-20 15:09:20.155000+02:00 +Internet,case-7570,2011-07-10 00:00:00+02:00,General,2011-07-11 12:17:31.615000+02:00,2011-07-10 00:00:00.020000+02:00,,Resource01,2011-05-15 00:00:00.020000+02:00,task-25890,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-20 15:09:32.818000+02:00 +Internet,case-7570,2011-07-10 00:00:00+02:00,General,2011-07-11 12:17:31.615000+02:00,2011-07-10 00:00:00.020000+02:00,,Resource01,2011-05-15 00:00:00.020000+02:00,task-25888,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-26 13:27:09.297000+02:00 +Internet,case-7570,2011-07-10 00:00:00+02:00,General,2011-07-11 12:17:31.615000+02:00,2011-07-10 00:00:00.020000+02:00,,Resource01,2011-05-15 00:00:00.020000+02:00,task-26455,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-26 13:28:10.860000+02:00 +Desk,case-7579,2011-07-04 00:00:00+02:00,General,2011-07-01 15:17:49.913000+02:00,2011-07-04 00:00:00.020000+02:00,,Resource15,2011-05-09 00:00:00.020000+02:00,task-25354,Confirmation of receipt,complete,Group 1,Resource15,2011-05-23 11:01:16.373000+02:00 +Desk,case-7579,2011-07-04 00:00:00+02:00,General,2011-07-01 15:17:49.913000+02:00,2011-07-04 00:00:00.020000+02:00,,Resource15,2011-05-09 00:00:00.020000+02:00,task-26010,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-05-23 11:01:33.395000+02:00 +Desk,case-7579,2011-07-04 00:00:00+02:00,General,2011-07-01 15:17:49.913000+02:00,2011-07-04 00:00:00.020000+02:00,,Resource15,2011-05-09 00:00:00.020000+02:00,task-26012,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-05-23 11:01:47.042000+02:00 +Desk,case-7579,2011-07-04 00:00:00+02:00,General,2011-07-01 15:17:49.913000+02:00,2011-07-04 00:00:00.020000+02:00,,Resource15,2011-05-09 00:00:00.020000+02:00,task-26011,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-05-23 11:06:36.303000+02:00 +Desk,case-7579,2011-07-04 00:00:00+02:00,General,2011-07-01 15:17:49.913000+02:00,2011-07-04 00:00:00.020000+02:00,,Resource15,2011-05-09 00:00:00.020000+02:00,task-26014,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-05-23 11:09:42.193000+02:00 +Desk,case-7579,2011-07-04 00:00:00+02:00,General,2011-07-01 15:17:49.913000+02:00,2011-07-04 00:00:00.020000+02:00,,Resource15,2011-05-09 00:00:00.020000+02:00,task-26013,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-25 14:42:15.186000+02:00 +Internet,case-7584,2011-07-13 00:00:00+02:00,General,2011-08-18 08:47:56.972000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource21,2011-05-18 00:00:00.020000+02:00,task-25384,Confirmation of receipt,complete,Group 1,Resource21,2011-05-18 10:50:58.184000+02:00 +Internet,case-7584,2011-07-13 00:00:00+02:00,General,2011-08-18 08:47:56.972000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource21,2011-05-18 00:00:00.020000+02:00,task-25385,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-05-18 10:51:50.824000+02:00 +Internet,case-7584,2011-07-13 00:00:00+02:00,General,2011-08-18 08:47:56.972000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource21,2011-05-18 00:00:00.020000+02:00,task-25388,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-05-18 10:54:18.275000+02:00 +Internet,case-7584,2011-07-13 00:00:00+02:00,General,2011-08-18 08:47:56.972000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource21,2011-05-18 00:00:00.020000+02:00,task-25389,T05 Print and send confirmation of receipt,complete,EMPTY,Resource21,2011-05-18 11:11:45.588000+02:00 +Internet,case-7584,2011-07-13 00:00:00+02:00,General,2011-08-18 08:47:56.972000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource21,2011-05-18 00:00:00.020000+02:00,task-25386,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-05-18 11:13:26.409000+02:00 +Internet,case-7584,2011-07-13 00:00:00+02:00,General,2011-08-18 08:47:56.972000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource21,2011-05-18 00:00:00.020000+02:00,task-25396,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-05-18 11:13:46.642000+02:00 +Desk,case-7590,2011-06-24 00:00:00+02:00,General,2011-06-24 14:21:57.533000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource05,2011-04-29 00:00:00.020000+02:00,task-25435,Confirmation of receipt,complete,EMPTY,Resource05,2011-05-30 09:38:37.698000+02:00 +Desk,case-7590,2011-06-24 00:00:00+02:00,General,2011-06-24 14:21:57.533000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource05,2011-04-29 00:00:00.020000+02:00,task-26906,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-05-30 09:39:32.529000+02:00 +Desk,case-7590,2011-06-24 00:00:00+02:00,General,2011-06-24 14:21:57.533000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource05,2011-04-29 00:00:00.020000+02:00,task-26907,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-05-30 09:39:45.400000+02:00 +Desk,case-7590,2011-06-24 00:00:00+02:00,General,2011-06-24 14:21:57.533000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource05,2011-04-29 00:00:00.020000+02:00,task-26909,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-05-30 09:40:02.614000+02:00 +Desk,case-7590,2011-06-24 00:00:00+02:00,General,2011-06-24 14:21:57.533000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource05,2011-04-29 00:00:00.020000+02:00,task-26908,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-05-30 09:40:16.266000+02:00 +Desk,case-7590,2011-06-24 00:00:00+02:00,General,2011-06-24 14:21:57.533000+02:00,2011-06-24 00:00:00.020000+02:00,,Resource05,2011-04-29 00:00:00.020000+02:00,task-26911,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-05-30 09:40:29.230000+02:00 +Internet,case-7612,2011-07-11 00:00:00+02:00,General,2011-10-31 10:00:36.314000+01:00,2011-07-11 00:00:00.020000+02:00,,Resource09,2011-05-16 00:00:00.020000+02:00,task-25729,Confirmation of receipt,complete,EMPTY,Resource09,2011-06-07 14:21:39.731000+02:00 +Internet,case-7612,2011-07-11 00:00:00+02:00,General,2011-10-31 10:00:36.314000+01:00,2011-07-11 00:00:00.020000+02:00,,Resource09,2011-05-16 00:00:00.020000+02:00,task-28170,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-06-07 14:22:18.227000+02:00 +Internet,case-7612,2011-07-11 00:00:00+02:00,General,2011-10-31 10:00:36.314000+01:00,2011-07-11 00:00:00.020000+02:00,,Resource09,2011-05-16 00:00:00.020000+02:00,task-28171,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-06-07 14:25:16.883000+02:00 +Internet,case-7612,2011-07-11 00:00:00+02:00,General,2011-10-31 10:00:36.314000+01:00,2011-07-11 00:00:00.020000+02:00,,Resource09,2011-05-16 00:00:00.020000+02:00,task-28169,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-06-07 14:33:36.977000+02:00 +Internet,case-7612,2011-07-11 00:00:00+02:00,General,2011-10-31 10:00:36.314000+01:00,2011-07-11 00:00:00.020000+02:00,,Resource09,2011-05-16 00:00:00.020000+02:00,task-28188,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-06-07 14:33:59.280000+02:00 +Internet,case-7612,2011-07-11 00:00:00+02:00,General,2011-10-31 10:00:36.314000+01:00,2011-07-11 00:00:00.020000+02:00,,Resource09,2011-05-16 00:00:00.020000+02:00,task-28189,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-06-07 14:34:11.512000+02:00 +Internet,case-7612,2011-07-11 00:00:00+02:00,General,2011-10-31 10:00:36.314000+01:00,2011-07-11 00:00:00.020000+02:00,,Resource09,2011-05-16 00:00:00.020000+02:00,task-28172,T16 Report reasons to hold request,complete,Group 1,Resource09,2011-06-07 14:35:38.902000+02:00 +Internet,case-7612,2011-07-11 00:00:00+02:00,General,2011-10-31 10:00:36.314000+01:00,2011-07-11 00:00:00.020000+02:00,,Resource09,2011-05-16 00:00:00.020000+02:00,task-28191,T17 Check report Y to stop indication,complete,Group 4,Resource09,2011-06-07 14:35:57.851000+02:00 +Internet,case-7612,2011-07-11 00:00:00+02:00,General,2011-10-31 10:00:36.314000+01:00,2011-07-11 00:00:00.020000+02:00,,Resource09,2011-05-16 00:00:00.020000+02:00,task-28193,T19 Determine report Y to stop indication,complete,Group 3,Resource09,2011-06-07 14:36:15.510000+02:00 +Internet,case-7612,2011-07-11 00:00:00+02:00,General,2011-10-31 10:00:36.314000+01:00,2011-07-11 00:00:00.020000+02:00,,Resource09,2011-05-16 00:00:00.020000+02:00,task-28195,T20 Print report Y to stop indication,complete,Group 2,Resource09,2011-06-07 14:36:33.149000+02:00 +Internet,case-7628,2011-08-22 01:06:40+02:00,General,2011-08-22 16:26:36.759000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-25816,Confirmation of receipt,complete,EMPTY,Resource15,2011-06-06 12:13:35.272000+02:00 +Internet,case-7628,2011-08-22 01:06:40+02:00,General,2011-08-22 16:26:36.759000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-27785,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-06-06 12:13:52.282000+02:00 +Internet,case-7628,2011-08-22 01:06:40+02:00,General,2011-08-22 16:26:36.759000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-27787,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-06-06 12:14:23.185000+02:00 +Internet,case-7628,2011-08-22 01:06:40+02:00,General,2011-08-22 16:26:36.759000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-27786,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-06-06 12:15:48.356000+02:00 +Internet,case-7628,2011-08-22 01:06:40+02:00,General,2011-08-22 16:26:36.759000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-27789,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-06-06 14:34:53.869000+02:00 +Internet,case-7628,2011-08-22 01:06:40+02:00,General,2011-08-22 16:26:36.759000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-27788,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-16 14:55:30.762000+02:00 +Desk,case-7630,2011-07-20 01:06:40+02:00,General,2011-07-20 08:55:48.402000+02:00,2011-07-20 01:06:40.020000+02:00,,admin1,2011-04-27 01:06:40.020000+02:00,task-25823,Confirmation of receipt,complete,EMPTY,Resource13,2011-05-30 12:02:24.800000+02:00 +Desk,case-7630,2011-07-20 01:06:40+02:00,General,2011-07-20 08:55:48.402000+02:00,2011-07-20 01:06:40.020000+02:00,,admin1,2011-04-27 01:06:40.020000+02:00,task-27013,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-05-30 12:03:00.090000+02:00 +Desk,case-7630,2011-07-20 01:06:40+02:00,General,2011-07-20 08:55:48.402000+02:00,2011-07-20 01:06:40.020000+02:00,,admin1,2011-04-27 01:06:40.020000+02:00,task-27015,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-05-30 12:16:02.609000+02:00 +Desk,case-7630,2011-07-20 01:06:40+02:00,General,2011-07-20 08:55:48.402000+02:00,2011-07-20 01:06:40.020000+02:00,,admin1,2011-04-27 01:06:40.020000+02:00,task-27032,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-05-30 12:17:50.321000+02:00 +Desk,case-7630,2011-07-20 01:06:40+02:00,General,2011-07-20 08:55:48.402000+02:00,2011-07-20 01:06:40.020000+02:00,,admin1,2011-04-27 01:06:40.020000+02:00,task-27014,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-05-30 12:18:29.788000+02:00 +Desk,case-7630,2011-07-20 01:06:40+02:00,General,2011-07-20 08:55:48.402000+02:00,2011-07-20 01:06:40.020000+02:00,,admin1,2011-04-27 01:06:40.020000+02:00,task-27033,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-05-30 12:18:43.648000+02:00 +Internet,case-7631,2011-07-12 01:06:40+02:00,General,2011-07-13 15:54:41.180000+02:00,2011-07-12 01:06:40.020000+02:00,,Resource17,2011-05-17 01:06:40.020000+02:00,task-25835,Confirmation of receipt,complete,EMPTY,Resource17,2011-05-26 14:24:20.017000+02:00 +Internet,case-7631,2011-07-12 01:06:40+02:00,General,2011-07-13 15:54:41.180000+02:00,2011-07-12 01:06:40.020000+02:00,,Resource17,2011-05-17 01:06:40.020000+02:00,task-26513,T02 Check confirmation of receipt,complete,EMPTY,Resource17,2011-05-26 14:24:59.277000+02:00 +Internet,case-7631,2011-07-12 01:06:40+02:00,General,2011-07-13 15:54:41.180000+02:00,2011-07-12 01:06:40.020000+02:00,,Resource17,2011-05-17 01:06:40.020000+02:00,task-26514,T06 Determine necessity of stop advice,complete,Group 1,Resource17,2011-05-26 14:25:11.419000+02:00 +Internet,case-7631,2011-07-12 01:06:40+02:00,General,2011-07-13 15:54:41.180000+02:00,2011-07-12 01:06:40.020000+02:00,,Resource17,2011-05-17 01:06:40.020000+02:00,task-26516,T10 Determine necessity to stop indication,complete,Group 1,Resource17,2011-05-26 14:25:29.587000+02:00 +Internet,case-7631,2011-07-12 01:06:40+02:00,General,2011-07-13 15:54:41.180000+02:00,2011-07-12 01:06:40.020000+02:00,,Resource17,2011-05-17 01:06:40.020000+02:00,task-26515,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-05-26 22:55:04.881000+02:00 +Internet,case-7631,2011-07-12 01:06:40+02:00,General,2011-07-13 15:54:41.180000+02:00,2011-07-12 01:06:40.020000+02:00,,Resource17,2011-05-17 01:06:40.020000+02:00,task-26615,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-05-27 16:38:33.295000+02:00 +Internet,case-7632,2011-07-13 01:06:40+02:00,General,2011-07-12 11:04:49.692000+02:00,2011-07-13 01:06:40.020000+02:00,,Resource02,2011-05-18 01:06:40.020000+02:00,task-25874,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-31 09:36:11.980000+02:00 +Internet,case-7632,2011-07-13 01:06:40+02:00,General,2011-07-12 11:04:49.692000+02:00,2011-07-13 01:06:40.020000+02:00,,Resource02,2011-05-18 01:06:40.020000+02:00,task-27260,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-31 09:36:32.347000+02:00 +Internet,case-7632,2011-07-13 01:06:40+02:00,General,2011-07-12 11:04:49.692000+02:00,2011-07-13 01:06:40.020000+02:00,,Resource02,2011-05-18 01:06:40.020000+02:00,task-27261,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-31 09:36:50.205000+02:00 +Internet,case-7632,2011-07-13 01:06:40+02:00,General,2011-07-12 11:04:49.692000+02:00,2011-07-13 01:06:40.020000+02:00,,Resource02,2011-05-18 01:06:40.020000+02:00,task-27263,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-31 09:37:11.068000+02:00 +Internet,case-7632,2011-07-13 01:06:40+02:00,General,2011-07-12 11:04:49.692000+02:00,2011-07-13 01:06:40.020000+02:00,,Resource02,2011-05-18 01:06:40.020000+02:00,task-27262,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-31 09:37:32.864000+02:00 +Internet,case-7632,2011-07-13 01:06:40+02:00,General,2011-07-12 11:04:49.692000+02:00,2011-07-13 01:06:40.020000+02:00,,Resource02,2011-05-18 01:06:40.020000+02:00,task-27265,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-31 09:37:49.357000+02:00 +Internet,case-7664,2011-07-14 00:00:00+02:00,General,2011-06-21 08:33:13.322000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource01,2011-05-19 00:00:00.020000+02:00,task-25954,Confirmation of receipt,complete,EMPTY,admin2,2011-06-21 08:33:14.630000+02:00 +Internet,case-7665,2011-07-14 01:06:40+02:00,General,2011-06-21 14:23:14.147000+02:00,2011-07-14 01:06:40.020000+02:00,,Resource11,2011-05-19 01:06:40.020000+02:00,task-25969,Confirmation of receipt,complete,Group 1,Resource01,2011-05-26 14:28:31.073000+02:00 +Internet,case-7665,2011-07-14 01:06:40+02:00,General,2011-06-21 14:23:14.147000+02:00,2011-07-14 01:06:40.020000+02:00,,Resource11,2011-05-19 01:06:40.020000+02:00,task-26518,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-26 14:28:46.240000+02:00 +Internet,case-7665,2011-07-14 01:06:40+02:00,General,2011-06-21 14:23:14.147000+02:00,2011-07-14 01:06:40.020000+02:00,,Resource11,2011-05-19 01:06:40.020000+02:00,task-26519,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-26 14:29:00.068000+02:00 +Internet,case-7665,2011-07-14 01:06:40+02:00,General,2011-06-21 14:23:14.147000+02:00,2011-07-14 01:06:40.020000+02:00,,Resource11,2011-05-19 01:06:40.020000+02:00,task-26520,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-26 14:29:15.012000+02:00 +Internet,case-7665,2011-07-14 01:06:40+02:00,General,2011-06-21 14:23:14.147000+02:00,2011-07-14 01:06:40.020000+02:00,,Resource11,2011-05-19 01:06:40.020000+02:00,task-26522,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-26 14:29:48.159000+02:00 +Internet,case-7665,2011-07-14 01:06:40+02:00,General,2011-06-21 14:23:14.147000+02:00,2011-07-14 01:06:40.020000+02:00,,Resource11,2011-05-19 01:06:40.020000+02:00,task-26521,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-26 14:30:06.571000+02:00 +Internet,case-7666,2011-07-14 00:00:00+02:00,General,2011-06-22 09:03:31.262000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-25984,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-26 14:41:12.564000+02:00 +Internet,case-7666,2011-07-14 00:00:00+02:00,General,2011-06-22 09:03:31.262000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26540,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-26 14:41:26.162000+02:00 +Internet,case-7666,2011-07-14 00:00:00+02:00,General,2011-06-22 09:03:31.262000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26542,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-26 14:41:41.810000+02:00 +Internet,case-7666,2011-07-14 00:00:00+02:00,General,2011-06-22 09:03:31.262000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26543,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-26 14:41:53.389000+02:00 +Internet,case-7666,2011-07-14 00:00:00+02:00,General,2011-06-22 09:03:31.262000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26541,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-26 14:42:06.503000+02:00 +Internet,case-7666,2011-07-14 00:00:00+02:00,General,2011-06-22 09:03:31.262000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26544,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-26 14:42:19.997000+02:00 +Internet,case-7667,2011-07-14 00:00:00+02:00,General,2011-06-22 08:58:43.213000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26016,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-26 14:53:50.287000+02:00 +Internet,case-7667,2011-07-14 00:00:00+02:00,General,2011-06-22 08:58:43.213000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26561,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-26 14:54:07.601000+02:00 +Internet,case-7667,2011-07-14 00:00:00+02:00,General,2011-06-22 08:58:43.213000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26563,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-26 14:54:20.900000+02:00 +Internet,case-7667,2011-07-14 00:00:00+02:00,General,2011-06-22 08:58:43.213000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26564,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-26 14:54:32.257000+02:00 +Internet,case-7667,2011-07-14 00:00:00+02:00,General,2011-06-22 08:58:43.213000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26562,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-05-26 14:54:49.989000+02:00 +Internet,case-7667,2011-07-14 00:00:00+02:00,General,2011-06-22 08:58:43.213000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource11,2011-05-19 00:00:00.020000+02:00,task-26565,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-05-26 14:55:25.840000+02:00 +Internet,case-7683,2011-07-14 00:00:00+02:00,General,2011-07-13 16:40:02.484000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource02,2011-05-19 00:00:00.020000+02:00,task-26151,Confirmation of receipt,complete,EMPTY,Resource02,2011-05-25 14:45:39.553000+02:00 +Internet,case-7683,2011-07-14 00:00:00+02:00,General,2011-07-13 16:40:02.484000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource02,2011-05-19 00:00:00.020000+02:00,task-26311,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-25 14:46:34.153000+02:00 +Internet,case-7683,2011-07-14 00:00:00+02:00,General,2011-07-13 16:40:02.484000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource02,2011-05-19 00:00:00.020000+02:00,task-26313,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-25 14:46:58.001000+02:00 +Internet,case-7683,2011-07-14 00:00:00+02:00,General,2011-07-13 16:40:02.484000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource02,2011-05-19 00:00:00.020000+02:00,task-26314,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-25 14:47:12.893000+02:00 +Internet,case-7683,2011-07-14 00:00:00+02:00,General,2011-07-13 16:40:02.484000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource02,2011-05-19 00:00:00.020000+02:00,task-26312,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-25 14:56:57.164000+02:00 +Internet,case-7683,2011-07-14 00:00:00+02:00,General,2011-07-13 16:40:02.484000+02:00,2011-07-14 00:00:00.020000+02:00,,Resource02,2011-05-19 00:00:00.020000+02:00,task-26315,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-25 14:57:15.886000+02:00 +Internet,case-7685,2011-07-14 00:00:00+02:00,General,2011-07-14 16:10:39.025000+02:00,2011-07-14 00:00:00.020000+02:00,Group 5,Resource02,2011-05-19 00:00:00.020000+02:00,task-26161,Confirmation of receipt,complete,EMPTY,Resource09,2011-07-04 12:08:41.453000+02:00 +Internet,case-7685,2011-07-14 00:00:00+02:00,General,2011-07-14 16:10:39.025000+02:00,2011-07-14 00:00:00.020000+02:00,Group 5,Resource02,2011-05-19 00:00:00.020000+02:00,task-30773,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-04 12:09:48.535000+02:00 +Internet,case-7685,2011-07-14 00:00:00+02:00,General,2011-07-14 16:10:39.025000+02:00,2011-07-14 00:00:00.020000+02:00,Group 5,Resource02,2011-05-19 00:00:00.020000+02:00,task-30775,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-04 12:10:22.753000+02:00 +Internet,case-7685,2011-07-14 00:00:00+02:00,General,2011-07-14 16:10:39.025000+02:00,2011-07-14 00:00:00.020000+02:00,Group 5,Resource02,2011-05-19 00:00:00.020000+02:00,task-30776,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-04 12:11:08.184000+02:00 +Internet,case-7685,2011-07-14 00:00:00+02:00,General,2011-07-14 16:10:39.025000+02:00,2011-07-14 00:00:00.020000+02:00,Group 5,Resource02,2011-05-19 00:00:00.020000+02:00,task-30774,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-04 13:55:33.712000+02:00 +Internet,case-7685,2011-07-14 00:00:00+02:00,General,2011-07-14 16:10:39.025000+02:00,2011-07-14 00:00:00.020000+02:00,Group 5,Resource02,2011-05-19 00:00:00.020000+02:00,task-30791,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-04 14:01:46.913000+02:00 +Internet,case-7686,2011-07-15 00:00:00+02:00,General,2011-07-13 07:51:18.158000+02:00,2011-07-15 00:00:00.020000+02:00,Group 8,Resource11,2011-05-20 00:00:00.020000+02:00,task-26178,Confirmation of receipt,complete,EMPTY,Resource01,2011-05-26 15:18:56.464000+02:00 +Internet,case-7686,2011-07-15 00:00:00+02:00,General,2011-07-13 07:51:18.158000+02:00,2011-07-15 00:00:00.020000+02:00,Group 8,Resource11,2011-05-20 00:00:00.020000+02:00,task-26581,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-05-26 15:19:11.066000+02:00 +Internet,case-7686,2011-07-15 00:00:00+02:00,General,2011-07-13 07:51:18.158000+02:00,2011-07-15 00:00:00.020000+02:00,Group 8,Resource11,2011-05-20 00:00:00.020000+02:00,task-26583,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-05-26 15:19:23.645000+02:00 +Internet,case-7686,2011-07-15 00:00:00+02:00,General,2011-07-13 07:51:18.158000+02:00,2011-07-15 00:00:00.020000+02:00,Group 8,Resource11,2011-05-20 00:00:00.020000+02:00,task-26584,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-05-26 15:19:43.983000+02:00 +Internet,case-7686,2011-07-15 00:00:00+02:00,General,2011-07-13 07:51:18.158000+02:00,2011-07-15 00:00:00.020000+02:00,Group 8,Resource11,2011-05-20 00:00:00.020000+02:00,task-26582,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 13:18:33.952000+02:00 +Internet,case-7686,2011-07-15 00:00:00+02:00,General,2011-07-13 07:51:18.158000+02:00,2011-07-15 00:00:00.020000+02:00,Group 8,Resource11,2011-05-20 00:00:00.020000+02:00,task-30158,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 13:19:29.376000+02:00 +Internet,case-7689,2011-07-15 00:00:00+02:00,General,2011-05-25 00:00:00.020000+02:00,2011-07-15 00:00:00.020000+02:00,,Resource04,2011-05-20 00:00:00.020000+02:00,task-26186,Confirmation of receipt,complete,EMPTY,admin2,2011-06-06 15:59:00.644000+02:00 +Internet,case-7690,2011-08-19 01:06:40+02:00,General,2011-08-17 14:51:31.130000+02:00,2011-08-19 01:06:40.020000+02:00,,Resource06,2011-05-13 01:06:40.020000+02:00,task-26193,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-27 10:37:35.162000+02:00 +Internet,case-7690,2011-08-19 01:06:40+02:00,General,2011-08-17 14:51:31.130000+02:00,2011-08-19 01:06:40.020000+02:00,,Resource06,2011-05-13 01:06:40.020000+02:00,task-26653,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-27 10:38:57.682000+02:00 +Internet,case-7690,2011-08-19 01:06:40+02:00,General,2011-08-17 14:51:31.130000+02:00,2011-08-19 01:06:40.020000+02:00,,Resource06,2011-05-13 01:06:40.020000+02:00,task-26655,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-27 10:39:09.781000+02:00 +Internet,case-7690,2011-08-19 01:06:40+02:00,General,2011-08-17 14:51:31.130000+02:00,2011-08-19 01:06:40.020000+02:00,,Resource06,2011-05-13 01:06:40.020000+02:00,task-26656,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-27 10:39:20.359000+02:00 +Internet,case-7690,2011-08-19 01:06:40+02:00,General,2011-08-17 14:51:31.130000+02:00,2011-08-19 01:06:40.020000+02:00,,Resource06,2011-05-13 01:06:40.020000+02:00,task-26654,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-27 10:39:34.029000+02:00 +Internet,case-7690,2011-08-19 01:06:40+02:00,General,2011-08-17 14:51:31.130000+02:00,2011-08-19 01:06:40.020000+02:00,,Resource06,2011-05-13 01:06:40.020000+02:00,task-26657,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-27 10:39:51.120000+02:00 +Internet,case-7693,2011-07-12 00:00:00+02:00,General,2011-06-16 10:08:59.610000+02:00,2011-07-12 00:00:00.020000+02:00,,Resource08,2011-05-17 00:00:00.020000+02:00,task-26207,Confirmation of receipt,complete,EMPTY,Resource08,2011-05-31 10:38:41.113000+02:00 +Internet,case-7693,2011-07-12 00:00:00+02:00,General,2011-06-16 10:08:59.610000+02:00,2011-07-12 00:00:00.020000+02:00,,Resource08,2011-05-17 00:00:00.020000+02:00,task-27290,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-05-31 10:39:25.176000+02:00 +Internet,case-7693,2011-07-12 00:00:00+02:00,General,2011-06-16 10:08:59.610000+02:00,2011-07-12 00:00:00.020000+02:00,,Resource08,2011-05-17 00:00:00.020000+02:00,task-27293,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-05-31 10:39:59.467000+02:00 +Internet,case-7693,2011-07-12 00:00:00+02:00,General,2011-06-16 10:08:59.610000+02:00,2011-07-12 00:00:00.020000+02:00,,Resource08,2011-05-17 00:00:00.020000+02:00,task-27294,T05 Print and send confirmation of receipt,complete,EMPTY,Resource08,2011-05-31 10:40:54.577000+02:00 +Internet,case-7693,2011-07-12 00:00:00+02:00,General,2011-06-16 10:08:59.610000+02:00,2011-07-12 00:00:00.020000+02:00,,Resource08,2011-05-17 00:00:00.020000+02:00,task-27291,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-05-31 10:54:07.286000+02:00 +Internet,case-7693,2011-07-12 00:00:00+02:00,General,2011-06-16 10:08:59.610000+02:00,2011-07-12 00:00:00.020000+02:00,,Resource08,2011-05-17 00:00:00.020000+02:00,task-27297,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-05-31 10:56:07.322000+02:00 +Internet,case-7693,2011-07-12 00:00:00+02:00,General,2011-06-16 10:08:59.610000+02:00,2011-07-12 00:00:00.020000+02:00,,Resource08,2011-05-17 00:00:00.020000+02:00,task-27298,T11 Create document X request unlicensed,complete,Group 1,Resource08,2011-05-31 11:24:47.869000+02:00 +Internet,case-7693,2011-07-12 00:00:00+02:00,General,2011-06-16 10:08:59.610000+02:00,2011-07-12 00:00:00.020000+02:00,,Resource08,2011-05-17 00:00:00.020000+02:00,task-27304,T12 Check document X request unlicensed,complete,EMPTY,Resource17,2011-05-31 11:51:19.884000+02:00 +Internet,case-7693,2011-07-12 00:00:00+02:00,General,2011-06-16 10:08:59.610000+02:00,2011-07-12 00:00:00.020000+02:00,,Resource08,2011-05-17 00:00:00.020000+02:00,task-27307,T14 Determine document X request unlicensed,complete,Group 3,Resource17,2011-05-31 11:51:37.184000+02:00 +Internet,case-7693,2011-07-12 00:00:00+02:00,General,2011-06-16 10:08:59.610000+02:00,2011-07-12 00:00:00.020000+02:00,,Resource08,2011-05-17 00:00:00.020000+02:00,task-27308,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-06-16 10:08:59.411000+02:00 +Internet,case-7694,2011-07-07 00:00:00+02:00,General,2011-08-16 09:07:19.279000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource14,2011-05-12 00:00:00.020000+02:00,task-26208,Confirmation of receipt,complete,Group 1,Resource14,2011-05-31 09:07:53.980000+02:00 +Internet,case-7694,2011-07-07 00:00:00+02:00,General,2011-08-16 09:07:19.279000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource14,2011-05-12 00:00:00.020000+02:00,task-27247,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-05-31 09:08:15.230000+02:00 +Internet,case-7694,2011-07-07 00:00:00+02:00,General,2011-08-16 09:07:19.279000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource14,2011-05-12 00:00:00.020000+02:00,task-27249,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-05-31 09:08:32.255000+02:00 +Internet,case-7694,2011-07-07 00:00:00+02:00,General,2011-08-16 09:07:19.279000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource14,2011-05-12 00:00:00.020000+02:00,task-27250,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-05-31 09:08:45.500000+02:00 +Internet,case-7694,2011-07-07 00:00:00+02:00,General,2011-08-16 09:07:19.279000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource14,2011-05-12 00:00:00.020000+02:00,task-27248,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-05-31 09:09:04.334000+02:00 +Internet,case-7694,2011-07-07 00:00:00+02:00,General,2011-08-16 09:07:19.279000+02:00,2011-07-07 00:00:00.020000+02:00,,Resource14,2011-05-12 00:00:00.020000+02:00,task-27251,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-05-31 09:09:21.803000+02:00 +Internet,case-7697,2011-07-15 01:06:40+02:00,General,2011-06-09 17:07:38.304000+02:00,2011-07-15 01:06:40.020000+02:00,,Resource06,2011-05-20 01:06:40.020000+02:00,task-26211,Confirmation of receipt,complete,EMPTY,Resource06,2011-05-30 13:29:51.762000+02:00 +Internet,case-7697,2011-07-15 01:06:40+02:00,General,2011-06-09 17:07:38.304000+02:00,2011-07-15 01:06:40.020000+02:00,,Resource06,2011-05-20 01:06:40.020000+02:00,task-27109,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-30 13:50:00.795000+02:00 +Internet,case-7697,2011-07-15 01:06:40+02:00,General,2011-06-09 17:07:38.304000+02:00,2011-07-15 01:06:40.020000+02:00,,Resource06,2011-05-20 01:06:40.020000+02:00,task-27138,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-30 13:50:11.872000+02:00 +Internet,case-7697,2011-07-15 01:06:40+02:00,General,2011-06-09 17:07:38.304000+02:00,2011-07-15 01:06:40.020000+02:00,,Resource06,2011-05-20 01:06:40.020000+02:00,task-27139,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-30 13:50:22.133000+02:00 +Internet,case-7697,2011-07-15 01:06:40+02:00,General,2011-06-09 17:07:38.304000+02:00,2011-07-15 01:06:40.020000+02:00,,Resource06,2011-05-20 01:06:40.020000+02:00,task-27110,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-30 13:50:45.338000+02:00 +Internet,case-7697,2011-07-15 01:06:40+02:00,General,2011-06-09 17:07:38.304000+02:00,2011-07-15 01:06:40.020000+02:00,,Resource06,2011-05-20 01:06:40.020000+02:00,task-27140,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-30 14:16:08.305000+02:00 +Internet,case-7697,2011-07-15 01:06:40+02:00,General,2011-06-09 17:07:38.304000+02:00,2011-07-15 01:06:40.020000+02:00,,Resource06,2011-05-20 01:06:40.020000+02:00,task-27167,T11 Create document X request unlicensed,complete,Group 1,Resource06,2011-05-30 14:50:28.051000+02:00 +Internet,case-7697,2011-07-15 01:06:40+02:00,General,2011-06-09 17:07:38.304000+02:00,2011-07-15 01:06:40.020000+02:00,,Resource06,2011-05-20 01:06:40.020000+02:00,task-27188,T12 Check document X request unlicensed,complete,Group 4,Resource06,2011-05-30 14:52:07.158000+02:00 +Internet,case-7697,2011-07-15 01:06:40+02:00,General,2011-06-09 17:07:38.304000+02:00,2011-07-15 01:06:40.020000+02:00,,Resource06,2011-05-20 01:06:40.020000+02:00,task-27189,T14 Determine document X request unlicensed,complete,Group 3,Resource06,2011-05-30 14:52:25.927000+02:00 +Internet,case-7697,2011-07-15 01:06:40+02:00,General,2011-06-09 17:07:38.304000+02:00,2011-07-15 01:06:40.020000+02:00,,Resource06,2011-05-20 01:06:40.020000+02:00,task-27190,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-06-09 17:07:38.111000+02:00 +Internet,case-7699,2011-08-10 01:06:40+02:00,General,2011-08-12 12:13:02.602000+02:00,2011-08-10 01:06:40.020000+02:00,,Resource04,2011-05-11 01:06:40.020000+02:00,task-26214,Confirmation of receipt,complete,Group 1,Resource04,2011-05-30 13:37:25.501000+02:00 +Internet,case-7699,2011-08-10 01:06:40+02:00,General,2011-08-12 12:13:02.602000+02:00,2011-08-10 01:06:40.020000+02:00,,Resource04,2011-05-11 01:06:40.020000+02:00,task-27114,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-30 13:37:39.770000+02:00 +Internet,case-7699,2011-08-10 01:06:40+02:00,General,2011-08-12 12:13:02.602000+02:00,2011-08-10 01:06:40.020000+02:00,,Resource04,2011-05-11 01:06:40.020000+02:00,task-27115,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-30 13:37:50.560000+02:00 +Internet,case-7699,2011-08-10 01:06:40+02:00,General,2011-08-12 12:13:02.602000+02:00,2011-08-10 01:06:40.020000+02:00,,Resource04,2011-05-11 01:06:40.020000+02:00,task-27116,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-30 13:38:01.061000+02:00 +Internet,case-7699,2011-08-10 01:06:40+02:00,General,2011-08-12 12:13:02.602000+02:00,2011-08-10 01:06:40.020000+02:00,,Resource04,2011-05-11 01:06:40.020000+02:00,task-27118,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-30 13:38:10.980000+02:00 +Internet,case-7699,2011-08-10 01:06:40+02:00,General,2011-08-12 12:13:02.602000+02:00,2011-08-10 01:06:40.020000+02:00,,Resource04,2011-05-11 01:06:40.020000+02:00,task-27117,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-30 13:38:23.665000+02:00 +Internet,case-7700,2011-09-05 01:06:40+02:00,General,2011-09-22 09:29:32.860000+02:00,2011-09-05 01:06:40.020000+02:00,,Resource06,2011-05-16 01:06:40.020000+02:00,task-26215,Confirmation of receipt,complete,Group 1,Resource06,2011-05-27 11:57:52.750000+02:00 +Internet,case-7700,2011-09-05 01:06:40+02:00,General,2011-09-22 09:29:32.860000+02:00,2011-09-05 01:06:40.020000+02:00,,Resource06,2011-05-16 01:06:40.020000+02:00,task-26711,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-05-27 11:59:07.899000+02:00 +Internet,case-7700,2011-09-05 01:06:40+02:00,General,2011-09-22 09:29:32.860000+02:00,2011-09-05 01:06:40.020000+02:00,,Resource06,2011-05-16 01:06:40.020000+02:00,task-26713,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-05-27 11:59:25.792000+02:00 +Internet,case-7700,2011-09-05 01:06:40+02:00,General,2011-09-22 09:29:32.860000+02:00,2011-09-05 01:06:40.020000+02:00,,Resource06,2011-05-16 01:06:40.020000+02:00,task-26712,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-05-27 11:59:38.595000+02:00 +Internet,case-7700,2011-09-05 01:06:40+02:00,General,2011-09-22 09:29:32.860000+02:00,2011-09-05 01:06:40.020000+02:00,,Resource06,2011-05-16 01:06:40.020000+02:00,task-26714,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-05-27 11:59:52.144000+02:00 +Internet,case-7700,2011-09-05 01:06:40+02:00,General,2011-09-22 09:29:32.860000+02:00,2011-09-05 01:06:40.020000+02:00,,Resource06,2011-05-16 01:06:40.020000+02:00,task-26715,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-05-27 12:00:48.541000+02:00 +Internet,case-7750,2011-07-22 01:06:40+02:00,General,2011-07-20 10:00:20.946000+02:00,2011-07-22 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-26627,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-06 12:46:00.801000+02:00 +Internet,case-7750,2011-07-22 01:06:40+02:00,General,2011-07-20 10:00:20.946000+02:00,2011-07-22 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-27798,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-06 12:46:34.174000+02:00 +Internet,case-7750,2011-07-22 01:06:40+02:00,General,2011-07-20 10:00:20.946000+02:00,2011-07-22 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-27799,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-06 12:46:56.367000+02:00 +Internet,case-7750,2011-07-22 01:06:40+02:00,General,2011-07-20 10:00:20.946000+02:00,2011-07-22 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-27800,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-06 12:47:30.081000+02:00 +Internet,case-7750,2011-07-22 01:06:40+02:00,General,2011-07-20 10:00:20.946000+02:00,2011-07-22 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-27801,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-06 12:47:45.214000+02:00 +Internet,case-7750,2011-07-22 01:06:40+02:00,General,2011-07-20 10:00:20.946000+02:00,2011-07-22 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-27803,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-06-06 12:51:45.164000+02:00 +Internet,case-7751,2011-02-06 00:00:00+01:00,General,2011-05-30 16:47:33.837000+02:00,2011-02-06 00:00:00.010000+01:00,,Resource22,2010-12-12 00:00:00.010000+01:00,task-26648,Confirmation of receipt,complete,Group 1,Resource22,2011-05-27 12:51:00.124000+02:00 +Internet,case-7751,2011-02-06 00:00:00+01:00,General,2011-05-30 16:47:33.837000+02:00,2011-02-06 00:00:00.010000+01:00,,Resource22,2010-12-12 00:00:00.010000+01:00,task-26729,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-05-27 12:51:30.375000+02:00 +Internet,case-7751,2011-02-06 00:00:00+01:00,General,2011-05-30 16:47:33.837000+02:00,2011-02-06 00:00:00.010000+01:00,,Resource22,2010-12-12 00:00:00.010000+01:00,task-26731,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-05-27 12:51:55.269000+02:00 +Internet,case-7751,2011-02-06 00:00:00+01:00,General,2011-05-30 16:47:33.837000+02:00,2011-02-06 00:00:00.010000+01:00,,Resource22,2010-12-12 00:00:00.010000+01:00,task-26732,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-05-27 12:52:15.751000+02:00 +Internet,case-7751,2011-02-06 00:00:00+01:00,General,2011-05-30 16:47:33.837000+02:00,2011-02-06 00:00:00.010000+01:00,,Resource22,2010-12-12 00:00:00.010000+01:00,task-26730,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-05-27 12:53:19.857000+02:00 +Internet,case-7751,2011-02-06 00:00:00+01:00,General,2011-05-30 16:47:33.837000+02:00,2011-02-06 00:00:00.010000+01:00,,Resource22,2010-12-12 00:00:00.010000+01:00,task-26733,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-05-27 12:54:42.057000+02:00 +e-mail,case-7753,2011-07-11 00:00:00+02:00,General,2011-07-12 15:26:10.291000+02:00,2011-07-11 00:00:00.020000+02:00,,Resource04,2011-05-16 00:00:00.020000+02:00,task-26709,Confirmation of receipt,complete,Group 1,Resource04,2011-05-31 13:20:06.562000+02:00 +e-mail,case-7753,2011-07-11 00:00:00+02:00,General,2011-07-12 15:26:10.291000+02:00,2011-07-11 00:00:00.020000+02:00,,Resource04,2011-05-16 00:00:00.020000+02:00,task-27325,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-05-31 13:20:20.388000+02:00 +e-mail,case-7753,2011-07-11 00:00:00+02:00,General,2011-07-12 15:26:10.291000+02:00,2011-07-11 00:00:00.020000+02:00,,Resource04,2011-05-16 00:00:00.020000+02:00,task-27327,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-05-31 13:20:31.568000+02:00 +e-mail,case-7753,2011-07-11 00:00:00+02:00,General,2011-07-12 15:26:10.291000+02:00,2011-07-11 00:00:00.020000+02:00,,Resource04,2011-05-16 00:00:00.020000+02:00,task-27328,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-05-31 13:20:41.292000+02:00 +e-mail,case-7753,2011-07-11 00:00:00+02:00,General,2011-07-12 15:26:10.291000+02:00,2011-07-11 00:00:00.020000+02:00,,Resource04,2011-05-16 00:00:00.020000+02:00,task-27326,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-05-31 13:20:50.875000+02:00 +e-mail,case-7753,2011-07-11 00:00:00+02:00,General,2011-07-12 15:26:10.291000+02:00,2011-07-11 00:00:00.020000+02:00,,Resource04,2011-05-16 00:00:00.020000+02:00,task-27329,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-05-31 13:21:02.764000+02:00 +Internet,case-7754,2011-07-19 00:00:00+02:00,Customer contact,2011-05-25 00:00:00.020000+02:00,2011-07-19 00:00:00.020000+02:00,,admin3,2011-05-24 00:00:00.020000+02:00,task-26710,Confirmation of receipt,complete,Group 1,admin2,2011-05-27 13:10:58.848000+02:00 +Internet,case-7755,2011-07-20 01:06:40+02:00,General,2011-06-21 15:00:53.806000+02:00,2011-07-20 01:06:40.020000+02:00,,Resource01,2011-05-25 01:06:40.020000+02:00,task-26739,Confirmation of receipt,complete,Group 1,Resource11,2011-06-01 08:20:39.043000+02:00 +Internet,case-7755,2011-07-20 01:06:40+02:00,General,2011-06-21 15:00:53.806000+02:00,2011-07-20 01:06:40.020000+02:00,,Resource01,2011-05-25 01:06:40.020000+02:00,task-27394,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-06-01 08:21:04.711000+02:00 +Internet,case-7755,2011-07-20 01:06:40+02:00,General,2011-06-21 15:00:53.806000+02:00,2011-07-20 01:06:40.020000+02:00,,Resource01,2011-05-25 01:06:40.020000+02:00,task-27396,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-06-01 08:21:41.571000+02:00 +Internet,case-7755,2011-07-20 01:06:40+02:00,General,2011-06-21 15:00:53.806000+02:00,2011-07-20 01:06:40.020000+02:00,,Resource01,2011-05-25 01:06:40.020000+02:00,task-27397,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-06-01 08:21:52.409000+02:00 +Internet,case-7755,2011-07-20 01:06:40+02:00,General,2011-06-21 15:00:53.806000+02:00,2011-07-20 01:06:40.020000+02:00,,Resource01,2011-05-25 01:06:40.020000+02:00,task-27395,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-06-01 08:22:10.135000+02:00 +Internet,case-7755,2011-07-20 01:06:40+02:00,General,2011-06-21 15:00:53.806000+02:00,2011-07-20 01:06:40.020000+02:00,,Resource01,2011-05-25 01:06:40.020000+02:00,task-27398,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-06-01 08:22:48.684000+02:00 +Internet,case-7757,2011-07-19 00:00:00+02:00,General,2011-07-12 07:47:56.905000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-26741,Confirmation of receipt,complete,Group 1,Resource11,2011-06-01 08:58:23.157000+02:00 +Internet,case-7757,2011-07-19 00:00:00+02:00,General,2011-07-12 07:47:56.905000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-27421,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-06-01 08:58:42.133000+02:00 +Internet,case-7757,2011-07-19 00:00:00+02:00,General,2011-07-12 07:47:56.905000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-27423,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-06-01 08:59:18.956000+02:00 +Internet,case-7757,2011-07-19 00:00:00+02:00,General,2011-07-12 07:47:56.905000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-27424,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-06-01 08:59:33.950000+02:00 +Internet,case-7757,2011-07-19 00:00:00+02:00,General,2011-07-12 07:47:56.905000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-27422,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-06-01 09:00:10.189000+02:00 +Internet,case-7757,2011-07-19 00:00:00+02:00,General,2011-07-12 07:47:56.905000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-27427,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-06-01 09:06:03.185000+02:00 +Internet,case-7758,2011-07-18 00:00:00+02:00,General,2011-08-15 07:52:55.041000+02:00,2011-07-18 00:00:00.020000+02:00,Group 8,Resource11,2011-05-23 00:00:00.020000+02:00,task-26769,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 11:19:05.151000+02:00 +Internet,case-7758,2011-07-18 00:00:00+02:00,General,2011-08-15 07:52:55.041000+02:00,2011-07-18 00:00:00.020000+02:00,Group 8,Resource11,2011-05-23 00:00:00.020000+02:00,task-30017,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 11:19:25.533000+02:00 +Internet,case-7758,2011-07-18 00:00:00+02:00,General,2011-08-15 07:52:55.041000+02:00,2011-07-18 00:00:00.020000+02:00,Group 8,Resource11,2011-05-23 00:00:00.020000+02:00,task-30019,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 11:19:54.601000+02:00 +Internet,case-7758,2011-07-18 00:00:00+02:00,General,2011-08-15 07:52:55.041000+02:00,2011-07-18 00:00:00.020000+02:00,Group 8,Resource11,2011-05-23 00:00:00.020000+02:00,task-30020,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 11:20:08.421000+02:00 +Internet,case-7758,2011-07-18 00:00:00+02:00,General,2011-08-15 07:52:55.041000+02:00,2011-07-18 00:00:00.020000+02:00,Group 8,Resource11,2011-05-23 00:00:00.020000+02:00,task-30018,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 11:20:31.497000+02:00 +Internet,case-7758,2011-07-18 00:00:00+02:00,General,2011-08-15 07:52:55.041000+02:00,2011-07-18 00:00:00.020000+02:00,Group 8,Resource11,2011-05-23 00:00:00.020000+02:00,task-30021,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 11:20:54.129000+02:00 +Internet,case-7759,2011-07-18 01:06:40+02:00,General,2011-07-19 09:57:29.392000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-26774,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-01 11:40:47.712000+02:00 +Internet,case-7759,2011-07-18 01:06:40+02:00,General,2011-07-19 09:57:29.392000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-27492,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-01 11:45:27.247000+02:00 +Internet,case-7759,2011-07-18 01:06:40+02:00,General,2011-07-19 09:57:29.392000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-27493,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-01 11:45:44.548000+02:00 +Internet,case-7759,2011-07-18 01:06:40+02:00,General,2011-07-19 09:57:29.392000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-27494,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-01 11:46:14.974000+02:00 +Internet,case-7759,2011-07-18 01:06:40+02:00,General,2011-07-19 09:57:29.392000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-27498,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-01 11:48:26.905000+02:00 +Internet,case-7759,2011-07-18 01:06:40+02:00,General,2011-07-19 09:57:29.392000+02:00,2011-07-18 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-27495,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-01 11:48:40.863000+02:00 +Internet,case-7760,2011-07-19 00:00:00+02:00,General,2011-06-06 15:09:33.450000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource01,2011-05-24 00:00:00.020000+02:00,task-26775,Confirmation of receipt,complete,Group 1,Resource11,2011-05-30 12:03:04.514000+02:00 +Internet,case-7760,2011-07-19 00:00:00+02:00,General,2011-06-06 15:09:33.450000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource01,2011-05-24 00:00:00.020000+02:00,task-27017,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-05-30 12:06:59.856000+02:00 +Internet,case-7760,2011-07-19 00:00:00+02:00,General,2011-06-06 15:09:33.450000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource01,2011-05-24 00:00:00.020000+02:00,task-27020,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-05-30 12:09:50.404000+02:00 +Internet,case-7760,2011-07-19 00:00:00+02:00,General,2011-06-06 15:09:33.450000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource01,2011-05-24 00:00:00.020000+02:00,task-27016,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2011-06-01 11:01:39.703000+02:00 +Internet,case-7760,2011-07-19 00:00:00+02:00,General,2011-06-06 15:09:33.450000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource01,2011-05-24 00:00:00.020000+02:00,task-27473,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-06-01 11:01:52.677000+02:00 +Internet,case-7760,2011-07-19 00:00:00+02:00,General,2011-06-06 15:09:33.450000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource01,2011-05-24 00:00:00.020000+02:00,task-27474,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-06-01 11:02:03.590000+02:00 +Internet,case-7761,2011-08-19 01:06:40+02:00,General,2011-08-17 16:30:51.464000+02:00,2011-08-19 01:06:40.020000+02:00,Group 5,Resource04,2011-05-27 01:06:40.020000+02:00,task-26781,Confirmation of receipt,complete,Group 1,Resource04,2011-06-07 09:05:16.998000+02:00 +Internet,case-7761,2011-08-19 01:06:40+02:00,General,2011-08-17 16:30:51.464000+02:00,2011-08-19 01:06:40.020000+02:00,Group 5,Resource04,2011-05-27 01:06:40.020000+02:00,task-28026,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-06-07 09:07:21.786000+02:00 +Internet,case-7761,2011-08-19 01:06:40+02:00,General,2011-08-17 16:30:51.464000+02:00,2011-08-19 01:06:40.020000+02:00,Group 5,Resource04,2011-05-27 01:06:40.020000+02:00,task-28028,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-06-07 09:07:41.844000+02:00 +Internet,case-7761,2011-08-19 01:06:40+02:00,General,2011-08-17 16:30:51.464000+02:00,2011-08-19 01:06:40.020000+02:00,Group 5,Resource04,2011-05-27 01:06:40.020000+02:00,task-28029,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-06-07 09:07:51.976000+02:00 +Internet,case-7761,2011-08-19 01:06:40+02:00,General,2011-08-17 16:30:51.464000+02:00,2011-08-19 01:06:40.020000+02:00,Group 5,Resource04,2011-05-27 01:06:40.020000+02:00,task-28027,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-06-07 14:47:04.516000+02:00 +Internet,case-7761,2011-08-19 01:06:40+02:00,General,2011-08-17 16:30:51.464000+02:00,2011-08-19 01:06:40.020000+02:00,Group 5,Resource04,2011-05-27 01:06:40.020000+02:00,task-28204,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-06-07 14:47:27.247000+02:00 +Internet,case-7762,2011-08-29 01:06:40+02:00,General,2011-09-21 15:19:39.030000+02:00,2011-08-29 01:06:40.020000+02:00,,Resource02,2011-05-23 01:06:40.020000+02:00,task-26782,Confirmation of receipt,complete,EMPTY,Resource02,2011-07-14 15:49:44.468000+02:00 +Internet,case-7762,2011-08-29 01:06:40+02:00,General,2011-09-21 15:19:39.030000+02:00,2011-08-29 01:06:40.020000+02:00,,Resource02,2011-05-23 01:06:40.020000+02:00,task-32116,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-07-14 15:50:06.221000+02:00 +Internet,case-7762,2011-08-29 01:06:40+02:00,General,2011-09-21 15:19:39.030000+02:00,2011-08-29 01:06:40.020000+02:00,,Resource02,2011-05-23 01:06:40.020000+02:00,task-32118,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-07-14 15:50:26.228000+02:00 +Internet,case-7762,2011-08-29 01:06:40+02:00,General,2011-09-21 15:19:39.030000+02:00,2011-08-29 01:06:40.020000+02:00,,Resource02,2011-05-23 01:06:40.020000+02:00,task-32119,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-07-14 15:50:41.662000+02:00 +Internet,case-7762,2011-08-29 01:06:40+02:00,General,2011-09-21 15:19:39.030000+02:00,2011-08-29 01:06:40.020000+02:00,,Resource02,2011-05-23 01:06:40.020000+02:00,task-32117,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-07-14 15:51:26.472000+02:00 +Internet,case-7762,2011-08-29 01:06:40+02:00,General,2011-09-21 15:19:39.030000+02:00,2011-08-29 01:06:40.020000+02:00,,Resource02,2011-05-23 01:06:40.020000+02:00,task-32120,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-07-14 15:51:57.281000+02:00 +Internet,case-7763,2011-07-22 00:00:00+02:00,General,2011-06-01 09:02:45.723000+02:00,2011-07-22 00:00:00.020000+02:00,,Resource02,2011-05-27 00:00:00.020000+02:00,task-26786,Confirmation of receipt,complete,Group 1,Resource02,2011-05-30 11:17:44.400000+02:00 +Internet,case-7763,2011-07-22 00:00:00+02:00,General,2011-06-01 09:02:45.723000+02:00,2011-07-22 00:00:00.020000+02:00,,Resource02,2011-05-27 00:00:00.020000+02:00,task-26976,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-05-30 11:18:05.974000+02:00 +Internet,case-7763,2011-07-22 00:00:00+02:00,General,2011-06-01 09:02:45.723000+02:00,2011-07-22 00:00:00.020000+02:00,,Resource02,2011-05-27 00:00:00.020000+02:00,task-26978,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-05-30 11:18:30.188000+02:00 +Internet,case-7763,2011-07-22 00:00:00+02:00,General,2011-06-01 09:02:45.723000+02:00,2011-07-22 00:00:00.020000+02:00,,Resource02,2011-05-27 00:00:00.020000+02:00,task-26979,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-05-30 11:18:43.001000+02:00 +Internet,case-7763,2011-07-22 00:00:00+02:00,General,2011-06-01 09:02:45.723000+02:00,2011-07-22 00:00:00.020000+02:00,,Resource02,2011-05-27 00:00:00.020000+02:00,task-26977,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-05-30 11:20:40.832000+02:00 +Internet,case-7763,2011-07-22 00:00:00+02:00,General,2011-06-01 09:02:45.723000+02:00,2011-07-22 00:00:00.020000+02:00,,Resource02,2011-05-27 00:00:00.020000+02:00,task-26980,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-05-30 11:21:00.125000+02:00 +Internet,case-7805,2011-07-21 01:06:40+02:00,General,,2011-07-21 01:06:40.020000+02:00,,Resource14,2011-05-26 01:06:40.020000+02:00,task-26920,Confirmation of receipt,complete,Group 1,Resource14,2011-06-20 08:47:42.688000+02:00 +Internet,case-7805,2011-07-21 01:06:40+02:00,General,,2011-07-21 01:06:40.020000+02:00,,Resource14,2011-05-26 01:06:40.020000+02:00,task-29080,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-06-20 08:48:11.620000+02:00 +Internet,case-7805,2011-07-21 01:06:40+02:00,General,,2011-07-21 01:06:40.020000+02:00,,Resource14,2011-05-26 01:06:40.020000+02:00,task-29082,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-06-20 08:48:31.478000+02:00 +Internet,case-7805,2011-07-21 01:06:40+02:00,General,,2011-07-21 01:06:40.020000+02:00,,Resource14,2011-05-26 01:06:40.020000+02:00,task-29083,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-06-20 08:48:50.221000+02:00 +Internet,case-7805,2011-07-21 01:06:40+02:00,General,,2011-07-21 01:06:40.020000+02:00,,Resource14,2011-05-26 01:06:40.020000+02:00,task-29081,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-06-20 09:07:02.065000+02:00 +Internet,case-7805,2011-07-21 01:06:40+02:00,General,,2011-07-21 01:06:40.020000+02:00,,Resource14,2011-05-26 01:06:40.020000+02:00,task-29087,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-06-20 09:07:26.235000+02:00 +Internet,case-7807,2011-07-21 00:00:00+02:00,General,2011-08-17 12:25:55.993000+02:00,2011-07-21 00:00:00.020000+02:00,,Resource12,2011-05-26 00:00:00.020000+02:00,task-26960,Confirmation of receipt,complete,EMPTY,admin2,2011-08-17 12:25:56.906000+02:00 +Internet,case-7810,2011-07-21 00:00:00+02:00,General,2011-07-20 08:27:32.767000+02:00,2011-07-21 00:00:00.020000+02:00,,Resource13,2011-05-26 00:00:00.020000+02:00,task-26975,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-07 08:44:09.680000+02:00 +Internet,case-7810,2011-07-21 00:00:00+02:00,General,2011-07-20 08:27:32.767000+02:00,2011-07-21 00:00:00.020000+02:00,,Resource13,2011-05-26 00:00:00.020000+02:00,task-28005,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-07 08:46:25.281000+02:00 +Internet,case-7810,2011-07-21 00:00:00+02:00,General,2011-07-20 08:27:32.767000+02:00,2011-07-21 00:00:00.020000+02:00,,Resource13,2011-05-26 00:00:00.020000+02:00,task-28007,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-07 08:47:51.956000+02:00 +Internet,case-7810,2011-07-21 00:00:00+02:00,General,2011-07-20 08:27:32.767000+02:00,2011-07-21 00:00:00.020000+02:00,,Resource13,2011-05-26 00:00:00.020000+02:00,task-28009,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-06-07 08:49:30.439000+02:00 +Internet,case-7810,2011-07-21 00:00:00+02:00,General,2011-07-20 08:27:32.767000+02:00,2011-07-21 00:00:00.020000+02:00,,Resource13,2011-05-26 00:00:00.020000+02:00,task-28006,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-07 08:52:25.071000+02:00 +Internet,case-7810,2011-07-21 00:00:00+02:00,General,2011-07-20 08:27:32.767000+02:00,2011-07-21 00:00:00.020000+02:00,,Resource13,2011-05-26 00:00:00.020000+02:00,task-28016,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-07 08:53:19.894000+02:00 +Internet,case-7814,2011-06-27 00:00:00+02:00,General,2011-06-28 12:08:16.358000+02:00,2011-06-27 00:00:00.020000+02:00,,Resource02,2011-05-02 00:00:00.020000+02:00,task-27178,Confirmation of receipt,complete,Group 1,Resource02,2011-06-06 15:00:09.673000+02:00 +Internet,case-7814,2011-06-27 00:00:00+02:00,General,2011-06-28 12:08:16.358000+02:00,2011-06-27 00:00:00.020000+02:00,,Resource02,2011-05-02 00:00:00.020000+02:00,task-27899,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-06-06 15:00:31.901000+02:00 +Internet,case-7814,2011-06-27 00:00:00+02:00,General,2011-06-28 12:08:16.358000+02:00,2011-06-27 00:00:00.020000+02:00,,Resource02,2011-05-02 00:00:00.020000+02:00,task-27901,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-06-06 15:00:53.220000+02:00 +Internet,case-7814,2011-06-27 00:00:00+02:00,General,2011-06-28 12:08:16.358000+02:00,2011-06-27 00:00:00.020000+02:00,,Resource02,2011-05-02 00:00:00.020000+02:00,task-27902,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-06-06 15:01:06.469000+02:00 +Internet,case-7814,2011-06-27 00:00:00+02:00,General,2011-06-28 12:08:16.358000+02:00,2011-06-27 00:00:00.020000+02:00,,Resource02,2011-05-02 00:00:00.020000+02:00,task-27900,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-06-09 11:35:49.390000+02:00 +Internet,case-7814,2011-06-27 00:00:00+02:00,General,2011-06-28 12:08:16.358000+02:00,2011-06-27 00:00:00.020000+02:00,,Resource02,2011-05-02 00:00:00.020000+02:00,task-28478,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-06-09 11:36:47.398000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27193,Confirmation of receipt,complete,EMPTY,Resource05,2011-06-06 09:47:31.708000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27677,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-06-06 09:47:46.563000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27679,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-06-06 09:48:04.553000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27680,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-06-06 09:48:19.723000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27678,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-06 09:49:04.495000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27681,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-06-06 09:49:41.978000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27683,T16 Report reasons to hold request,complete,Group 1,Resource05,2011-06-06 09:56:09.998000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27686,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-06-06 09:56:39.135000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27687,T18 Adjust report Y to stop indicition,complete,Group 1,Resource05,2011-06-06 09:57:01.276000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27688,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-06-06 09:57:15.624000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27689,T18 Adjust report Y to stop indicition,complete,Group 1,Resource05,2011-06-06 09:57:34.132000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27690,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-06-06 09:58:04.754000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27691,T19 Determine report Y to stop indication,complete,Group 3,Resource05,2011-06-06 09:58:44.603000+02:00 +Internet,case-7815,2011-07-08 01:06:40+02:00,General,2011-07-12 15:40:36.201000+02:00,2011-07-08 01:06:40.020000+02:00,,Resource05,2011-05-13 01:06:40.020000+02:00,task-27692,T20 Print report Y to stop indication,complete,Group 2,Resource05,2011-06-06 09:59:06.434000+02:00 +Internet,case-7817,2011-07-13 00:00:00+02:00,General,2011-07-07 09:39:24.114000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource01,2011-05-18 00:00:00.020000+02:00,task-27197,Confirmation of receipt,complete,EMPTY,Resource01,2011-06-16 08:29:10.537000+02:00 +Internet,case-7817,2011-07-13 00:00:00+02:00,General,2011-07-07 09:39:24.114000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource01,2011-05-18 00:00:00.020000+02:00,task-28737,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-06-21 09:24:39.143000+02:00 +Internet,case-7817,2011-07-13 00:00:00+02:00,General,2011-07-07 09:39:24.114000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource01,2011-05-18 00:00:00.020000+02:00,task-29259,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-21 09:25:29.771000+02:00 +Internet,case-7817,2011-07-13 00:00:00+02:00,General,2011-07-07 09:39:24.114000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource01,2011-05-18 00:00:00.020000+02:00,task-29260,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-21 09:25:46.086000+02:00 +Internet,case-7817,2011-07-13 00:00:00+02:00,General,2011-07-07 09:39:24.114000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource01,2011-05-18 00:00:00.020000+02:00,task-28738,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-21 09:26:06.235000+02:00 +Internet,case-7817,2011-07-13 00:00:00+02:00,General,2011-07-07 09:39:24.114000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource01,2011-05-18 00:00:00.020000+02:00,task-29261,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-22 10:17:22.904000+02:00 +Internet,case-7817,2011-07-13 00:00:00+02:00,General,2011-07-07 09:39:24.114000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource01,2011-05-18 00:00:00.020000+02:00,task-29445,T11 Create document X request unlicensed,complete,Group 1,Resource01,2011-06-28 09:22:56.913000+02:00 +Internet,case-7817,2011-07-13 00:00:00+02:00,General,2011-07-07 09:39:24.114000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource01,2011-05-18 00:00:00.020000+02:00,task-29920,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-06-28 09:23:46.983000+02:00 +Internet,case-7817,2011-07-13 00:00:00+02:00,General,2011-07-07 09:39:24.114000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource01,2011-05-18 00:00:00.020000+02:00,task-29923,T14 Determine document X request unlicensed,complete,EMPTY,Resource19,2011-07-01 16:09:31.009000+02:00 +Internet,case-7817,2011-07-13 00:00:00+02:00,General,2011-07-07 09:39:24.114000+02:00,2011-07-13 00:00:00.020000+02:00,,Resource01,2011-05-18 00:00:00.020000+02:00,task-30638,T15 Print document X request unlicensed,complete,Group 2,Resource01,2011-07-07 09:39:23.936000+02:00 +Internet,case-7818,2011-07-08 00:00:00+02:00,General,2011-08-03 00:00:00.020000+02:00,2011-07-08 00:00:00.020000+02:00,Group 5,Resource06,2011-05-13 00:00:00.020000+02:00,task-27205,Confirmation of receipt,complete,EMPTY,Resource08,2011-06-01 11:19:56.489000+02:00 +Internet,case-7818,2011-07-08 00:00:00+02:00,General,2011-08-03 00:00:00.020000+02:00,2011-07-08 00:00:00.020000+02:00,Group 5,Resource06,2011-05-13 00:00:00.020000+02:00,task-27484,T02 Check confirmation of receipt,complete,EMPTY,Resource08,2011-06-01 11:20:40.339000+02:00 +Internet,case-7818,2011-07-08 00:00:00+02:00,General,2011-08-03 00:00:00.020000+02:00,2011-07-08 00:00:00.020000+02:00,Group 5,Resource06,2011-05-13 00:00:00.020000+02:00,task-27488,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-06-01 11:23:06.576000+02:00 +Internet,case-7818,2011-07-08 00:00:00+02:00,General,2011-08-03 00:00:00.020000+02:00,2011-07-08 00:00:00.020000+02:00,Group 5,Resource06,2011-05-13 00:00:00.020000+02:00,task-27485,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-06-08 10:10:11.262000+02:00 +Internet,case-7818,2011-07-08 00:00:00+02:00,General,2011-08-03 00:00:00.020000+02:00,2011-07-08 00:00:00.020000+02:00,Group 5,Resource06,2011-05-13 00:00:00.020000+02:00,task-28295,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-06-08 10:10:32.002000+02:00 +Internet,case-7818,2011-07-08 00:00:00+02:00,General,2011-08-03 00:00:00.020000+02:00,2011-07-08 00:00:00.020000+02:00,Group 5,Resource06,2011-05-13 00:00:00.020000+02:00,task-27490,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-16 10:09:59.519000+02:00 +Internet,case-7832,2011-09-08 01:06:40+02:00,General,2011-08-02 10:53:16.729000+02:00,2011-09-08 01:06:40.020000+02:00,,Resource02,2011-05-29 01:06:40.020000+02:00,task-27356,Confirmation of receipt,complete,EMPTY,Resource08,2011-06-21 14:55:44.927000+02:00 +Internet,case-7832,2011-09-08 01:06:40+02:00,General,2011-08-02 10:53:16.729000+02:00,2011-09-08 01:06:40.020000+02:00,,Resource02,2011-05-29 01:06:40.020000+02:00,task-29355,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-06-21 14:56:05.053000+02:00 +Internet,case-7832,2011-09-08 01:06:40+02:00,General,2011-08-02 10:53:16.729000+02:00,2011-09-08 01:06:40.020000+02:00,,Resource02,2011-05-29 01:06:40.020000+02:00,task-29357,T04 Determine confirmation of receipt,complete,Group 3,Resource08,2011-06-21 14:56:31.383000+02:00 +Internet,case-7832,2011-09-08 01:06:40+02:00,General,2011-08-02 10:53:16.729000+02:00,2011-09-08 01:06:40.020000+02:00,,Resource02,2011-05-29 01:06:40.020000+02:00,task-29356,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-06-21 15:13:11.486000+02:00 +Internet,case-7832,2011-09-08 01:06:40+02:00,General,2011-08-02 10:53:16.729000+02:00,2011-09-08 01:06:40.020000+02:00,,Resource02,2011-05-29 01:06:40.020000+02:00,task-29367,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-06-21 15:17:58.102000+02:00 +Internet,case-7832,2011-09-08 01:06:40+02:00,General,2011-08-02 10:53:16.729000+02:00,2011-09-08 01:06:40.020000+02:00,,Resource02,2011-05-29 01:06:40.020000+02:00,task-29358,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-24 14:35:38.308000+02:00 +Internet,case-7847,2011-10-26 01:06:40+02:00,General,2011-10-20 11:05:33.020000+02:00,2011-10-26 01:06:40.020000+02:00,,Resource02,2011-05-30 01:06:40.020000+02:00,task-27445,Confirmation of receipt,complete,EMPTY,Resource08,2011-06-21 15:37:56.799000+02:00 +Internet,case-7847,2011-10-26 01:06:40+02:00,General,2011-10-20 11:05:33.020000+02:00,2011-10-26 01:06:40.020000+02:00,,Resource02,2011-05-30 01:06:40.020000+02:00,task-29377,T02 Check confirmation of receipt,complete,Group 4,Resource08,2011-06-21 15:38:25.923000+02:00 +Internet,case-7847,2011-10-26 01:06:40+02:00,General,2011-10-20 11:05:33.020000+02:00,2011-10-26 01:06:40.020000+02:00,,Resource02,2011-05-30 01:06:40.020000+02:00,task-29379,T04 Determine confirmation of receipt,complete,EMPTY,Resource08,2011-06-21 15:39:06.247000+02:00 +Internet,case-7847,2011-10-26 01:06:40+02:00,General,2011-10-20 11:05:33.020000+02:00,2011-10-26 01:06:40.020000+02:00,,Resource02,2011-05-30 01:06:40.020000+02:00,task-29378,T06 Determine necessity of stop advice,complete,Group 1,Resource08,2011-06-21 15:40:57.622000+02:00 +Internet,case-7847,2011-10-26 01:06:40+02:00,General,2011-10-20 11:05:33.020000+02:00,2011-10-26 01:06:40.020000+02:00,,Resource02,2011-05-30 01:06:40.020000+02:00,task-29381,T10 Determine necessity to stop indication,complete,Group 1,Resource08,2011-06-21 15:41:46.533000+02:00 +Internet,case-7847,2011-10-26 01:06:40+02:00,General,2011-10-20 11:05:33.020000+02:00,2011-10-26 01:06:40.020000+02:00,,Resource02,2011-05-30 01:06:40.020000+02:00,task-29380,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-24 14:33:14.885000+02:00 +Internet,case-7851,2011-07-25 00:00:00+02:00,General,2011-07-20 11:28:19.607000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource06,2011-05-30 00:00:00.020000+02:00,task-27479,Confirmation of receipt,complete,EMPTY,Resource06,2011-06-07 12:13:13.124000+02:00 +Internet,case-7851,2011-07-25 00:00:00+02:00,General,2011-07-20 11:28:19.607000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource06,2011-05-30 00:00:00.020000+02:00,task-28125,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-06-07 12:13:39.709000+02:00 +Internet,case-7851,2011-07-25 00:00:00+02:00,General,2011-07-20 11:28:19.607000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource06,2011-05-30 00:00:00.020000+02:00,task-28126,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-06-07 12:13:55.759000+02:00 +Internet,case-7851,2011-07-25 00:00:00+02:00,General,2011-07-20 11:28:19.607000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource06,2011-05-30 00:00:00.020000+02:00,task-28124,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-06-07 12:14:10.630000+02:00 +Internet,case-7851,2011-07-25 00:00:00+02:00,General,2011-07-20 11:28:19.607000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource06,2011-05-30 00:00:00.020000+02:00,task-28129,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-06-07 12:14:25.041000+02:00 +Internet,case-7851,2011-07-25 00:00:00+02:00,General,2011-07-20 11:28:19.607000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource06,2011-05-30 00:00:00.020000+02:00,task-28130,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-06-07 12:14:37.489000+02:00 +Internet,case-7856,2011-07-25 00:00:00+02:00,General,2011-08-15 11:22:26.220000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource05,2011-05-30 00:00:00.020000+02:00,task-27531,Confirmation of receipt,complete,Group 1,Resource05,2011-06-07 12:05:30.699000+02:00 +Internet,case-7856,2011-07-25 00:00:00+02:00,General,2011-08-15 11:22:26.220000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource05,2011-05-30 00:00:00.020000+02:00,task-28116,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-06-07 12:05:46.308000+02:00 +Internet,case-7856,2011-07-25 00:00:00+02:00,General,2011-08-15 11:22:26.220000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource05,2011-05-30 00:00:00.020000+02:00,task-28118,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-06-07 12:06:06.233000+02:00 +Internet,case-7856,2011-07-25 00:00:00+02:00,General,2011-08-15 11:22:26.220000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource05,2011-05-30 00:00:00.020000+02:00,task-28119,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-06-07 12:06:50.641000+02:00 +Internet,case-7856,2011-07-25 00:00:00+02:00,General,2011-08-15 11:22:26.220000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource05,2011-05-30 00:00:00.020000+02:00,task-28117,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-07 12:10:23.239000+02:00 +Internet,case-7856,2011-07-25 00:00:00+02:00,General,2011-08-15 11:22:26.220000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource05,2011-05-30 00:00:00.020000+02:00,task-28122,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-06-07 12:24:25.981000+02:00 +Internet,case-7905,2011-07-26 00:00:00+02:00,General,2011-07-25 09:57:39.681000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-27660,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 10:31:05.590000+02:00 +Internet,case-7905,2011-07-26 00:00:00+02:00,General,2011-07-25 09:57:39.681000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29951,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 10:31:28.300000+02:00 +Internet,case-7905,2011-07-26 00:00:00+02:00,General,2011-07-25 09:57:39.681000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29953,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 10:31:49.896000+02:00 +Internet,case-7905,2011-07-26 00:00:00+02:00,General,2011-07-25 09:57:39.681000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29954,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 10:32:07.454000+02:00 +Internet,case-7905,2011-07-26 00:00:00+02:00,General,2011-07-25 09:57:39.681000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29952,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 10:32:20.566000+02:00 +Internet,case-7905,2011-07-26 00:00:00+02:00,General,2011-07-25 09:57:39.681000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29955,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 10:32:36.027000+02:00 +Internet,case-7907,2011-07-26 01:06:40+02:00,General,2011-07-18 14:17:16.031000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-27694,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 11:51:05.031000+02:00 +Internet,case-7907,2011-07-26 01:06:40+02:00,General,2011-07-18 14:17:16.031000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-30065,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 11:51:27.201000+02:00 +Internet,case-7907,2011-07-26 01:06:40+02:00,General,2011-07-18 14:17:16.031000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-30067,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 11:51:44.852000+02:00 +Internet,case-7907,2011-07-26 01:06:40+02:00,General,2011-07-18 14:17:16.031000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-30069,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 11:52:04.754000+02:00 +Internet,case-7907,2011-07-26 01:06:40+02:00,General,2011-07-18 14:17:16.031000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-30066,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 11:52:28.638000+02:00 +Internet,case-7907,2011-07-26 01:06:40+02:00,General,2011-07-18 14:17:16.031000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-30070,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 11:53:47.477000+02:00 +Internet,case-7908,2011-07-26 00:00:00+02:00,General,2011-07-13 07:56:32.983000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-27705,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 10:45:11.259000+02:00 +Internet,case-7908,2011-07-26 00:00:00+02:00,General,2011-07-13 07:56:32.983000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29971,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 10:46:40.527000+02:00 +Internet,case-7908,2011-07-26 00:00:00+02:00,General,2011-07-13 07:56:32.983000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29974,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 10:47:08.522000+02:00 +Internet,case-7908,2011-07-26 00:00:00+02:00,General,2011-07-13 07:56:32.983000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29975,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 10:47:26.561000+02:00 +Internet,case-7908,2011-07-26 00:00:00+02:00,General,2011-07-13 07:56:32.983000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29972,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 10:47:51.061000+02:00 +Internet,case-7908,2011-07-26 00:00:00+02:00,General,2011-07-13 07:56:32.983000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29976,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 10:48:45.299000+02:00 +Internet,case-7911,2011-07-26 00:00:00+02:00,General,2011-07-13 08:05:04.176000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-27721,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 11:03:09.846000+02:00 +Internet,case-7911,2011-07-26 00:00:00+02:00,General,2011-07-13 08:05:04.176000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29993,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 11:03:30.227000+02:00 +Internet,case-7911,2011-07-26 00:00:00+02:00,General,2011-07-13 08:05:04.176000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29995,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 11:03:45.757000+02:00 +Internet,case-7911,2011-07-26 00:00:00+02:00,General,2011-07-13 08:05:04.176000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29996,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 11:04:02.032000+02:00 +Internet,case-7911,2011-07-26 00:00:00+02:00,General,2011-07-13 08:05:04.176000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29994,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 11:04:22.702000+02:00 +Internet,case-7911,2011-07-26 00:00:00+02:00,General,2011-07-13 08:05:04.176000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-29997,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 11:04:57.941000+02:00 +Internet,case-7912,2011-07-26 00:00:00+02:00,General,2011-07-13 08:17:38.614000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-27750,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 11:34:57.533000+02:00 +Internet,case-7912,2011-07-26 00:00:00+02:00,General,2011-07-13 08:17:38.614000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-30037,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 11:35:17.756000+02:00 +Internet,case-7912,2011-07-26 00:00:00+02:00,General,2011-07-13 08:17:38.614000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-30039,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 11:35:37.546000+02:00 +Internet,case-7912,2011-07-26 00:00:00+02:00,General,2011-07-13 08:17:38.614000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-30040,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 11:35:51.665000+02:00 +Internet,case-7912,2011-07-26 00:00:00+02:00,General,2011-07-13 08:17:38.614000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-30038,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 11:36:05.355000+02:00 +Internet,case-7912,2011-07-26 00:00:00+02:00,General,2011-07-13 08:17:38.614000+02:00,2011-07-26 00:00:00.020000+02:00,Group 8,Resource11,2011-05-31 00:00:00.020000+02:00,task-30041,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 11:36:25.368000+02:00 +Internet,case-7915,2011-07-26 01:06:40+02:00,General,2011-07-25 07:33:19.467000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-27755,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 13:01:39.026000+02:00 +Internet,case-7915,2011-07-26 01:06:40+02:00,General,2011-07-25 07:33:19.467000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-30126,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 13:02:22.877000+02:00 +Internet,case-7915,2011-07-26 01:06:40+02:00,General,2011-07-25 07:33:19.467000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-30129,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 13:02:44.429000+02:00 +Internet,case-7915,2011-07-26 01:06:40+02:00,General,2011-07-25 07:33:19.467000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-30131,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 13:04:22.285000+02:00 +Internet,case-7915,2011-07-26 01:06:40+02:00,General,2011-07-25 07:33:19.467000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-30127,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 13:05:04.688000+02:00 +Internet,case-7915,2011-07-26 01:06:40+02:00,General,2011-07-25 07:33:19.467000+02:00,2011-07-26 01:06:40.020000+02:00,Group 8,Resource11,2011-05-31 01:06:40.020000+02:00,task-30136,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 13:06:29.647000+02:00 +Internet,case-7917,2011-07-27 00:00:00+02:00,General,2011-07-18 14:32:07.502000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-27757,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 11:07:53.965000+02:00 +Internet,case-7917,2011-07-27 00:00:00+02:00,General,2011-07-18 14:32:07.502000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30350,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 11:08:17.914000+02:00 +Internet,case-7917,2011-07-27 00:00:00+02:00,General,2011-07-18 14:32:07.502000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30353,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 11:13:21.705000+02:00 +Internet,case-7917,2011-07-27 00:00:00+02:00,General,2011-07-18 14:32:07.502000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30351,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 11:13:52.277000+02:00 +Internet,case-7917,2011-07-27 00:00:00+02:00,General,2011-07-18 14:32:07.502000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30354,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 11:14:09.223000+02:00 +Internet,case-7918,2011-07-27 00:00:00+02:00,General,2011-07-18 14:40:29.864000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-27763,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 11:23:57.674000+02:00 +Internet,case-7918,2011-07-27 00:00:00+02:00,General,2011-07-18 14:40:29.864000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30371,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 11:24:45.246000+02:00 +Internet,case-7918,2011-07-27 00:00:00+02:00,General,2011-07-18 14:40:29.864000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30373,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 11:25:01.702000+02:00 +Internet,case-7918,2011-07-27 00:00:00+02:00,General,2011-07-18 14:40:29.864000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30374,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 11:25:16.596000+02:00 +Internet,case-7918,2011-07-27 00:00:00+02:00,General,2011-07-18 14:40:29.864000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30372,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 11:25:36.548000+02:00 +Internet,case-7918,2011-07-27 00:00:00+02:00,General,2011-07-18 14:40:29.864000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30375,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 11:25:53.154000+02:00 +Internet,case-7920,2011-07-27 00:00:00+02:00,General,2011-07-01 00:00:00.020000+02:00,2011-07-27 00:00:00.020000+02:00,,Resource01,2011-06-01 00:00:00.020000+02:00,task-27779,Confirmation of receipt,complete,EMPTY,admin2,2011-07-11 08:25:30.438000+02:00 +Internet,case-7922,2011-07-27 00:00:00+02:00,General,2011-07-20 10:04:31.199000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-27791,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 11:52:38.122000+02:00 +Internet,case-7922,2011-07-27 00:00:00+02:00,General,2011-07-20 10:04:31.199000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30399,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 11:53:01.727000+02:00 +Internet,case-7922,2011-07-27 00:00:00+02:00,General,2011-07-20 10:04:31.199000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30402,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 11:53:17.631000+02:00 +Internet,case-7922,2011-07-27 00:00:00+02:00,General,2011-07-20 10:04:31.199000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30403,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 11:53:32.008000+02:00 +Internet,case-7922,2011-07-27 00:00:00+02:00,General,2011-07-20 10:04:31.199000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30400,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 11:53:49.061000+02:00 +Internet,case-7922,2011-07-27 00:00:00+02:00,General,2011-07-20 10:04:31.199000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30404,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 11:54:06.594000+02:00 +Internet,case-7923,2011-07-27 00:00:00+02:00,General,2011-07-20 10:12:12.378000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-27802,Confirmation of receipt,complete,EMPTY,Resource01,2011-06-30 12:33:06.653000+02:00 +Internet,case-7923,2011-07-27 00:00:00+02:00,General,2011-07-20 10:12:12.378000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30435,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 12:33:30.374000+02:00 +Internet,case-7923,2011-07-27 00:00:00+02:00,General,2011-07-20 10:12:12.378000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30439,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 12:33:50.680000+02:00 +Internet,case-7923,2011-07-27 00:00:00+02:00,General,2011-07-20 10:12:12.378000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30440,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 12:34:07.294000+02:00 +Internet,case-7923,2011-07-27 00:00:00+02:00,General,2011-07-20 10:12:12.378000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30436,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 12:34:23.629000+02:00 +Internet,case-7923,2011-07-27 00:00:00+02:00,General,2011-07-20 10:12:12.378000+02:00,2011-07-27 00:00:00.020000+02:00,Group 8,Resource11,2011-06-01 00:00:00.020000+02:00,task-30441,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 12:34:42.228000+02:00 +Internet,case-7926,2011-10-25 01:06:40+02:00,General,2011-10-05 12:35:48.463000+02:00,2011-10-25 01:06:40.020000+02:00,,Resource04,2011-06-01 01:06:40.020000+02:00,task-27850,Confirmation of receipt,complete,Group 1,Resource04,2011-06-09 13:09:30.176000+02:00 +Internet,case-7926,2011-10-25 01:06:40+02:00,General,2011-10-05 12:35:48.463000+02:00,2011-10-25 01:06:40.020000+02:00,,Resource04,2011-06-01 01:06:40.020000+02:00,task-28518,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-06-09 13:10:01.025000+02:00 +Internet,case-7926,2011-10-25 01:06:40+02:00,General,2011-10-05 12:35:48.463000+02:00,2011-10-25 01:06:40.020000+02:00,,Resource04,2011-06-01 01:06:40.020000+02:00,task-28520,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-06-09 13:10:13.713000+02:00 +Internet,case-7926,2011-10-25 01:06:40+02:00,General,2011-10-05 12:35:48.463000+02:00,2011-10-25 01:06:40.020000+02:00,,Resource04,2011-06-01 01:06:40.020000+02:00,task-28521,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-06-09 13:10:35.908000+02:00 +Internet,case-7926,2011-10-25 01:06:40+02:00,General,2011-10-05 12:35:48.463000+02:00,2011-10-25 01:06:40.020000+02:00,,Resource04,2011-06-01 01:06:40.020000+02:00,task-28519,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-06-09 13:11:21.696000+02:00 +Internet,case-7926,2011-10-25 01:06:40+02:00,General,2011-10-05 12:35:48.463000+02:00,2011-10-25 01:06:40.020000+02:00,,Resource04,2011-06-01 01:06:40.020000+02:00,task-28522,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-06-09 13:11:47.046000+02:00 +Internet,case-7929,2011-07-29 00:00:00+02:00,General,2012-01-06 08:33:38.909000+01:00,2011-07-29 00:00:00.020000+02:00,,Resource14,2011-06-03 00:00:00.020000+02:00,task-27898,Confirmation of receipt,complete,EMPTY,Resource14,2011-07-12 13:51:55.251000+02:00 +Internet,case-7929,2011-07-29 00:00:00+02:00,General,2012-01-06 08:33:38.909000+01:00,2011-07-29 00:00:00.020000+02:00,,Resource14,2011-06-03 00:00:00.020000+02:00,task-31759,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-07-12 13:58:56.955000+02:00 +Internet,case-7929,2011-07-29 00:00:00+02:00,General,2012-01-06 08:33:38.909000+01:00,2011-07-29 00:00:00.020000+02:00,,Resource14,2011-06-03 00:00:00.020000+02:00,task-31766,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-07-12 13:59:41.646000+02:00 +Internet,case-7929,2011-07-29 00:00:00+02:00,General,2012-01-06 08:33:38.909000+01:00,2011-07-29 00:00:00.020000+02:00,,Resource14,2011-06-03 00:00:00.020000+02:00,task-31767,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-07-12 14:07:07.978000+02:00 +Internet,case-7929,2011-07-29 00:00:00+02:00,General,2012-01-06 08:33:38.909000+01:00,2011-07-29 00:00:00.020000+02:00,,Resource14,2011-06-03 00:00:00.020000+02:00,task-31760,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-07-12 14:07:30.278000+02:00 +Internet,case-7929,2011-07-29 00:00:00+02:00,General,2012-01-06 08:33:38.909000+01:00,2011-07-29 00:00:00.020000+02:00,,Resource14,2011-06-03 00:00:00.020000+02:00,task-31768,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-07-12 14:07:58.027000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28148,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-16 10:29:10.512000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28748,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-16 10:31:00.907000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28750,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:32:05.724000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28751,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-16 10:33:38.794000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28752,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:38:06.334000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28754,T02 Check confirmation of receipt,complete,Group 4,Resource13,2011-06-16 10:38:26.918000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28755,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:40:22.888000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28756,T02 Check confirmation of receipt,complete,Group 4,Resource13,2011-06-16 10:40:44.627000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28757,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:49:05.232000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28763,T02 Check confirmation of receipt,complete,Group 4,Resource13,2011-06-16 10:49:26.714000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28764,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:50:46.469000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28749,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-27 13:48:16.435000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-28765,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:49:01.590000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-29866,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:49:29.835000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-29867,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:49:50.828000+02:00 +Internet,case-7953,2011-09-06 01:06:40+02:00,General,2011-07-28 15:02:44.383000+02:00,2011-09-06 01:06:40.020000+02:00,,Resource13,2011-05-23 01:06:40.020000+02:00,task-29865,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-27 13:50:06.272000+02:00 +Internet,case-7956,2011-07-19 00:00:00+02:00,General,2011-07-19 13:43:38.735000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource12,2011-05-24 00:00:00.020000+02:00,task-28203,Confirmation of receipt,complete,EMPTY,Resource12,2011-07-12 09:52:19.528000+02:00 +Internet,case-7956,2011-07-19 00:00:00+02:00,General,2011-07-19 13:43:38.735000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource12,2011-05-24 00:00:00.020000+02:00,task-31682,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-07-12 09:53:01.309000+02:00 +Internet,case-7956,2011-07-19 00:00:00+02:00,General,2011-07-19 13:43:38.735000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource12,2011-05-24 00:00:00.020000+02:00,task-31684,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-07-12 09:53:25.523000+02:00 +Internet,case-7956,2011-07-19 00:00:00+02:00,General,2011-07-19 13:43:38.735000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource12,2011-05-24 00:00:00.020000+02:00,task-31685,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-07-12 09:54:02.424000+02:00 +Internet,case-7956,2011-07-19 00:00:00+02:00,General,2011-07-19 13:43:38.735000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource12,2011-05-24 00:00:00.020000+02:00,task-31683,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-07-12 09:54:41.147000+02:00 +Internet,case-7956,2011-07-19 00:00:00+02:00,General,2011-07-19 13:43:38.735000+02:00,2011-07-19 00:00:00.020000+02:00,,Resource12,2011-05-24 00:00:00.020000+02:00,task-31686,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-07-12 09:55:46.407000+02:00 +Internet,case-7957,2011-07-19 00:00:00+02:00,General,2011-08-18 15:56:42.667000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-28222,Confirmation of receipt,complete,Group 1,Resource01,2011-06-28 09:53:18.435000+02:00 +Internet,case-7957,2011-07-19 00:00:00+02:00,General,2011-08-18 15:56:42.667000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-29931,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-28 09:53:40.558000+02:00 +Internet,case-7957,2011-07-19 00:00:00+02:00,General,2011-08-18 15:56:42.667000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-29933,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-28 09:53:56.992000+02:00 +Internet,case-7957,2011-07-19 00:00:00+02:00,General,2011-08-18 15:56:42.667000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-29934,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-28 09:54:10.385000+02:00 +Internet,case-7957,2011-07-19 00:00:00+02:00,General,2011-08-18 15:56:42.667000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-29932,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-28 09:54:26.182000+02:00 +Internet,case-7957,2011-07-19 00:00:00+02:00,General,2011-08-18 15:56:42.667000+02:00,2011-07-19 00:00:00.020000+02:00,Group 8,Resource11,2011-05-24 00:00:00.020000+02:00,task-29935,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-28 09:54:44.108000+02:00 +Internet,case-7958,2011-07-21 01:06:40+02:00,General,2011-07-20 07:59:15.627000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource05,2011-05-26 01:06:40.020000+02:00,task-28234,Confirmation of receipt,complete,EMPTY,Resource05,2011-06-09 12:28:41.018000+02:00 +Internet,case-7958,2011-07-21 01:06:40+02:00,General,2011-07-20 07:59:15.627000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource05,2011-05-26 01:06:40.020000+02:00,task-28508,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-06-09 12:29:10.337000+02:00 +Internet,case-7958,2011-07-21 01:06:40+02:00,General,2011-07-20 07:59:15.627000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource05,2011-05-26 01:06:40.020000+02:00,task-28509,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-09 12:29:36.488000+02:00 +Internet,case-7958,2011-07-21 01:06:40+02:00,General,2011-07-20 07:59:15.627000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource05,2011-05-26 01:06:40.020000+02:00,task-28511,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-06-09 12:36:18.648000+02:00 +Internet,case-7958,2011-07-21 01:06:40+02:00,General,2011-07-20 07:59:15.627000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource05,2011-05-26 01:06:40.020000+02:00,task-28510,T04 Determine confirmation of receipt,complete,EMPTY,Resource05,2011-06-09 12:40:21.057000+02:00 +Internet,case-7958,2011-07-21 01:06:40+02:00,General,2011-07-20 07:59:15.627000+02:00,2011-07-21 01:06:40.020000+02:00,,Resource05,2011-05-26 01:06:40.020000+02:00,task-28516,T05 Print and send confirmation of receipt,complete,EMPTY,Resource05,2011-06-09 13:44:54.995000+02:00 +Internet,case-7960,2011-08-01 00:00:00+02:00,General,,2011-08-01 00:00:00.020000+02:00,,Resource12,2011-06-06 00:00:00.020000+02:00,task-28241,Confirmation of receipt,complete,EMPTY,Resource12,2011-07-26 09:59:34.888000+02:00 +Internet,case-7960,2011-08-01 00:00:00+02:00,General,,2011-08-01 00:00:00.020000+02:00,,Resource12,2011-06-06 00:00:00.020000+02:00,task-33441,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-07-26 10:00:11.810000+02:00 +Internet,case-7960,2011-08-01 00:00:00+02:00,General,,2011-08-01 00:00:00.020000+02:00,,Resource12,2011-06-06 00:00:00.020000+02:00,task-33445,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-07-26 10:00:49.092000+02:00 +Internet,case-7960,2011-08-01 00:00:00+02:00,General,,2011-08-01 00:00:00.020000+02:00,,Resource12,2011-06-06 00:00:00.020000+02:00,task-33447,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-07-26 10:01:31.891000+02:00 +Internet,case-7960,2011-08-01 00:00:00+02:00,General,,2011-08-01 00:00:00.020000+02:00,,Resource12,2011-06-06 00:00:00.020000+02:00,task-33442,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-07-26 10:02:17.423000+02:00 +Internet,case-7960,2011-08-01 00:00:00+02:00,General,,2011-08-01 00:00:00.020000+02:00,,Resource12,2011-06-06 00:00:00.020000+02:00,task-33451,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-07-26 10:02:43.861000+02:00 +Internet,case-7961,2011-08-09 01:06:40+02:00,General,2011-08-12 15:10:50.100000+02:00,2011-08-09 01:06:40.020000+02:00,,Resource13,2011-05-30 01:06:40.020000+02:00,task-28250,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-16 10:54:19.134000+02:00 +Internet,case-7961,2011-08-09 01:06:40+02:00,General,2011-08-12 15:10:50.100000+02:00,2011-08-09 01:06:40.020000+02:00,,Resource13,2011-05-30 01:06:40.020000+02:00,task-28767,T02 Check confirmation of receipt,complete,Group 4,Resource13,2011-06-16 10:54:53.605000+02:00 +Internet,case-7961,2011-08-09 01:06:40+02:00,General,2011-08-12 15:10:50.100000+02:00,2011-08-09 01:06:40.020000+02:00,,Resource13,2011-05-30 01:06:40.020000+02:00,task-28769,T03 Adjust confirmation of receipt,complete,Group 1,Resource13,2011-06-16 10:55:11.383000+02:00 +Internet,case-7961,2011-08-09 01:06:40+02:00,General,2011-08-12 15:10:50.100000+02:00,2011-08-09 01:06:40.020000+02:00,,Resource13,2011-05-30 01:06:40.020000+02:00,task-28770,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 11:42:52.227000+02:00 +Internet,case-7961,2011-08-09 01:06:40+02:00,General,2011-08-12 15:10:50.100000+02:00,2011-08-09 01:06:40.020000+02:00,,Resource13,2011-05-30 01:06:40.020000+02:00,task-30058,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 11:43:19.875000+02:00 +Internet,case-7961,2011-08-09 01:06:40+02:00,General,2011-08-12 15:10:50.100000+02:00,2011-08-09 01:06:40.020000+02:00,,Resource13,2011-05-30 01:06:40.020000+02:00,task-30059,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 11:43:46.033000+02:00 +Internet,case-7961,2011-08-09 01:06:40+02:00,General,2011-08-12 15:10:50.100000+02:00,2011-08-09 01:06:40.020000+02:00,,Resource13,2011-05-30 01:06:40.020000+02:00,task-28768,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-28 11:44:08.985000+02:00 +Internet,case-7961,2011-08-09 01:06:40+02:00,General,2011-08-12 15:10:50.100000+02:00,2011-08-09 01:06:40.020000+02:00,,Resource13,2011-05-30 01:06:40.020000+02:00,task-30060,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-28 11:44:51.464000+02:00 +Internet,case-7976,2011-08-01 00:00:00+02:00,General,2011-07-20 10:20:56.199000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-28286,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 12:46:08.925000+02:00 +Internet,case-7976,2011-08-01 00:00:00+02:00,General,2011-07-20 10:20:56.199000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-30461,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 12:46:32.845000+02:00 +Internet,case-7976,2011-08-01 00:00:00+02:00,General,2011-07-20 10:20:56.199000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-30460,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 12:46:49.105000+02:00 +Internet,case-7976,2011-08-01 00:00:00+02:00,General,2011-07-20 10:20:56.199000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-30463,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 12:47:04.719000+02:00 +Internet,case-7976,2011-08-01 00:00:00+02:00,General,2011-07-20 10:20:56.199000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-30464,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 12:47:19.251000+02:00 +Internet,case-7976,2011-08-01 00:00:00+02:00,General,2011-07-20 10:20:56.199000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-30462,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 12:47:52.932000+02:00 +Internet,case-7978,2011-07-25 00:00:00+02:00,General,2011-06-24 14:40:16.300000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource15,2011-05-30 00:00:00.020000+02:00,task-28298,Confirmation of receipt,complete,Group 1,Resource15,2011-06-17 10:51:58.423000+02:00 +Internet,case-7978,2011-07-25 00:00:00+02:00,General,2011-06-24 14:40:16.300000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource15,2011-05-30 00:00:00.020000+02:00,task-28908,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-06-17 10:52:31.530000+02:00 +Internet,case-7978,2011-07-25 00:00:00+02:00,General,2011-06-24 14:40:16.300000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource15,2011-05-30 00:00:00.020000+02:00,task-28910,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-06-17 10:52:48.800000+02:00 +Internet,case-7978,2011-07-25 00:00:00+02:00,General,2011-06-24 14:40:16.300000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource15,2011-05-30 00:00:00.020000+02:00,task-28909,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-06-17 10:53:18.877000+02:00 +Internet,case-7978,2011-07-25 00:00:00+02:00,General,2011-06-24 14:40:16.300000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource15,2011-05-30 00:00:00.020000+02:00,task-28912,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-06-17 10:54:00.741000+02:00 +Internet,case-7978,2011-07-25 00:00:00+02:00,General,2011-06-24 14:40:16.300000+02:00,2011-07-25 00:00:00.020000+02:00,,Resource15,2011-05-30 00:00:00.020000+02:00,task-28911,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-24 14:39:55.719000+02:00 +Internet,case-7980,2011-07-13 01:06:40+02:00,General,,2011-07-13 01:06:40.020000+02:00,Group 10,Resource53,2011-05-18 01:06:40.020000+02:00,task-28317,Confirmation of receipt,complete,Group 1,Resource05,2011-06-16 15:10:50.230000+02:00 +Internet,case-7980,2011-07-13 01:06:40+02:00,General,,2011-07-13 01:06:40.020000+02:00,Group 10,Resource53,2011-05-18 01:06:40.020000+02:00,task-28821,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-06-16 17:43:29.021000+02:00 +Internet,case-7980,2011-07-13 01:06:40+02:00,General,,2011-07-13 01:06:40.020000+02:00,Group 10,Resource53,2011-05-18 01:06:40.020000+02:00,task-28822,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-16 17:43:58.860000+02:00 +Internet,case-7980,2011-07-13 01:06:40+02:00,General,,2011-07-13 01:06:40.020000+02:00,Group 10,Resource53,2011-05-18 01:06:40.020000+02:00,task-28844,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-16 17:44:54.732000+02:00 +Internet,case-7980,2011-07-13 01:06:40+02:00,General,,2011-07-13 01:06:40.020000+02:00,Group 10,Resource53,2011-05-18 01:06:40.020000+02:00,task-28845,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-06-21 09:10:30.832000+02:00 +Internet,case-7980,2011-07-13 01:06:40+02:00,General,,2011-07-13 01:06:40.020000+02:00,Group 10,Resource53,2011-05-18 01:06:40.020000+02:00,task-29255,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-06-21 09:45:18.435000+02:00 +Internet,case-7980,2011-07-13 01:06:40+02:00,General,,2011-07-13 01:06:40.020000+02:00,Group 10,Resource53,2011-05-18 01:06:40.020000+02:00,task-28843,T03 Adjust confirmation of receipt,complete,Group 1,Resource05,2011-06-21 11:41:10.753000+02:00 +Internet,case-7980,2011-07-13 01:06:40+02:00,General,,2011-07-13 01:06:40.020000+02:00,Group 10,Resource53,2011-05-18 01:06:40.020000+02:00,task-29298,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-06-21 11:41:32.123000+02:00 +Internet,case-7980,2011-07-13 01:06:40+02:00,General,,2011-07-13 01:06:40.020000+02:00,Group 10,Resource53,2011-05-18 01:06:40.020000+02:00,task-29300,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-06-21 11:41:51.657000+02:00 +Internet,case-7980,2011-07-13 01:06:40+02:00,General,,2011-07-13 01:06:40.020000+02:00,Group 10,Resource53,2011-05-18 01:06:40.020000+02:00,task-29302,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-06-21 11:42:10.031000+02:00 +Internet,case-7981,2011-07-06 00:00:00+02:00,General,2011-07-08 15:19:47.775000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource15,2011-05-11 00:00:00.020000+02:00,task-28321,Confirmation of receipt,complete,Group 1,Resource15,2011-06-22 10:45:55.002000+02:00 +Internet,case-7981,2011-07-06 00:00:00+02:00,General,2011-07-08 15:19:47.775000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource15,2011-05-11 00:00:00.020000+02:00,task-29460,T02 Check confirmation of receipt,complete,Group 4,Resource15,2011-06-22 11:05:52.983000+02:00 +Internet,case-7981,2011-07-06 00:00:00+02:00,General,2011-07-08 15:19:47.775000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource15,2011-05-11 00:00:00.020000+02:00,task-29464,T04 Determine confirmation of receipt,complete,Group 3,Resource15,2011-06-22 11:06:12.747000+02:00 +Internet,case-7981,2011-07-06 00:00:00+02:00,General,2011-07-08 15:19:47.775000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource15,2011-05-11 00:00:00.020000+02:00,task-29461,T06 Determine necessity of stop advice,complete,Group 1,Resource15,2011-06-22 11:06:35.855000+02:00 +Internet,case-7981,2011-07-06 00:00:00+02:00,General,2011-07-08 15:19:47.775000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource15,2011-05-11 00:00:00.020000+02:00,task-29466,T10 Determine necessity to stop indication,complete,Group 1,Resource15,2011-06-22 11:08:28.812000+02:00 +Internet,case-7981,2011-07-06 00:00:00+02:00,General,2011-07-08 15:19:47.775000+02:00,2011-07-06 00:00:00.020000+02:00,,Resource15,2011-05-11 00:00:00.020000+02:00,task-29465,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-06-24 14:32:02.001000+02:00 +Internet,case-7986,2011-07-26 00:00:00+02:00,General,2011-06-17 13:39:08.410000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource02,2011-05-31 00:00:00.020000+02:00,task-28336,Confirmation of receipt,complete,Group 1,admin2,2011-06-17 13:39:09.245000+02:00 +Internet,case-7988,2011-07-26 00:00:00+02:00,General,2011-07-15 11:38:31.886000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource13,2011-05-31 00:00:00.020000+02:00,task-28354,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:22:31.482000+02:00 +Internet,case-7988,2011-07-26 00:00:00+02:00,General,2011-07-15 11:38:31.886000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource13,2011-05-31 00:00:00.020000+02:00,task-30100,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:23:50.267000+02:00 +Internet,case-7988,2011-07-26 00:00:00+02:00,General,2011-07-15 11:38:31.886000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource13,2011-05-31 00:00:00.020000+02:00,task-30102,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:24:27.354000+02:00 +Internet,case-7988,2011-07-26 00:00:00+02:00,General,2011-07-15 11:38:31.886000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource13,2011-05-31 00:00:00.020000+02:00,task-30103,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-06-28 12:24:43.740000+02:00 +Internet,case-7988,2011-07-26 00:00:00+02:00,General,2011-07-15 11:38:31.886000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource13,2011-05-31 00:00:00.020000+02:00,task-30101,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-28 12:25:04.502000+02:00 +Internet,case-7988,2011-07-26 00:00:00+02:00,General,2011-07-15 11:38:31.886000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource13,2011-05-31 00:00:00.020000+02:00,task-30104,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-28 12:25:23.478000+02:00 +Internet,case-7988,2011-07-26 00:00:00+02:00,General,2011-07-15 11:38:31.886000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource13,2011-05-31 00:00:00.020000+02:00,task-30105,T11 Create document X request unlicensed,complete,Group 1,Resource13,2011-06-28 12:33:50.587000+02:00 +Internet,case-7988,2011-07-26 00:00:00+02:00,General,2011-07-15 11:38:31.886000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource13,2011-05-31 00:00:00.020000+02:00,task-30106,T12 Check document X request unlicensed,complete,Group 4,Resource13,2011-06-28 12:34:11.175000+02:00 +Internet,case-7988,2011-07-26 00:00:00+02:00,General,2011-07-15 11:38:31.886000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource13,2011-05-31 00:00:00.020000+02:00,task-30107,T14 Determine document X request unlicensed,complete,EMPTY,Resource10,2011-06-30 15:13:24.822000+02:00 +Internet,case-7988,2011-07-26 00:00:00+02:00,General,2011-07-15 11:38:31.886000+02:00,2011-07-26 00:00:00.020000+02:00,,Resource13,2011-05-31 00:00:00.020000+02:00,task-30547,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-07-15 11:38:31.702000+02:00 +Internet,case-7990,2011-08-01 00:00:00+02:00,General,2011-07-20 10:34:03.921000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-28388,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-07 13:54:38.149000+02:00 +Internet,case-7990,2011-08-01 00:00:00+02:00,General,2011-07-20 10:34:03.921000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-31321,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-07 13:55:25.760000+02:00 +Internet,case-7990,2011-08-01 00:00:00+02:00,General,2011-07-20 10:34:03.921000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-31323,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-07 13:55:44.681000+02:00 +Internet,case-7990,2011-08-01 00:00:00+02:00,General,2011-07-20 10:34:03.921000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-31325,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-07 13:56:05.638000+02:00 +Internet,case-7990,2011-08-01 00:00:00+02:00,General,2011-07-20 10:34:03.921000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-31322,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-07 13:56:49.249000+02:00 +Internet,case-7990,2011-08-01 00:00:00+02:00,General,2011-07-20 10:34:03.921000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-31326,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-07 13:57:51.625000+02:00 +Internet,case-7991,2011-08-02 00:00:00+02:00,General,2011-07-28 11:36:29.366000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource01,2011-06-07 00:00:00.020000+02:00,task-28395,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 15:02:42.489000+02:00 +Internet,case-7991,2011-08-02 00:00:00+02:00,General,2011-07-28 11:36:29.366000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource01,2011-06-07 00:00:00.020000+02:00,task-30526,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 15:03:28.599000+02:00 +Internet,case-7991,2011-08-02 00:00:00+02:00,General,2011-07-28 11:36:29.366000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource01,2011-06-07 00:00:00.020000+02:00,task-30528,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 15:03:54.462000+02:00 +Internet,case-7991,2011-08-02 00:00:00+02:00,General,2011-07-28 11:36:29.366000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource01,2011-06-07 00:00:00.020000+02:00,task-30529,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 15:04:12.766000+02:00 +Internet,case-7991,2011-08-02 00:00:00+02:00,General,2011-07-28 11:36:29.366000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource01,2011-06-07 00:00:00.020000+02:00,task-30527,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 15:04:28.205000+02:00 +Internet,case-7991,2011-08-02 00:00:00+02:00,General,2011-07-28 11:36:29.366000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource01,2011-06-07 00:00:00.020000+02:00,task-30530,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 15:05:11.046000+02:00 +Internet,case-8011,2011-08-01 00:00:00+02:00,General,2011-07-20 10:47:01.655000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-28441,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 14:42:27.967000+02:00 +Internet,case-8011,2011-08-01 00:00:00+02:00,General,2011-07-20 10:47:01.655000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-30506,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 14:42:49.289000+02:00 +Internet,case-8011,2011-08-01 00:00:00+02:00,General,2011-07-20 10:47:01.655000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-30508,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 14:43:05.822000+02:00 +Internet,case-8011,2011-08-01 00:00:00+02:00,General,2011-07-20 10:47:01.655000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-30509,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 14:43:21.785000+02:00 +Internet,case-8011,2011-08-01 00:00:00+02:00,General,2011-07-20 10:47:01.655000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-30507,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 14:43:42.808000+02:00 +Internet,case-8011,2011-08-01 00:00:00+02:00,General,2011-07-20 10:47:01.655000+02:00,2011-08-01 00:00:00.020000+02:00,Group 8,Resource11,2011-06-06 00:00:00.020000+02:00,task-30510,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 14:44:05.382000+02:00 +Internet,case-8012,2011-08-03 00:00:00+02:00,General,2011-07-20 11:29:19.470000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-28454,Confirmation of receipt,complete,Group 1,Resource31,2011-07-04 10:12:40.719000+02:00 +Internet,case-8012,2011-08-03 00:00:00+02:00,General,2011-07-20 11:29:19.470000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30685,T02 Check confirmation of receipt,complete,Group 4,Resource31,2011-07-04 10:14:51.421000+02:00 +Internet,case-8012,2011-08-03 00:00:00+02:00,General,2011-07-20 11:29:19.470000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30687,T04 Determine confirmation of receipt,complete,Group 3,Resource31,2011-07-04 10:15:50.379000+02:00 +Internet,case-8012,2011-08-03 00:00:00+02:00,General,2011-07-20 11:29:19.470000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30689,T05 Print and send confirmation of receipt,complete,Group 2,Resource31,2011-07-04 10:16:30.345000+02:00 +Internet,case-8012,2011-08-03 00:00:00+02:00,General,2011-07-20 11:29:19.470000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30686,T06 Determine necessity of stop advice,complete,Group 1,Resource31,2011-07-04 10:17:15.429000+02:00 +Internet,case-8012,2011-08-03 00:00:00+02:00,General,2011-07-20 11:29:19.470000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30691,T10 Determine necessity to stop indication,complete,Group 1,Resource31,2011-07-04 10:18:17.096000+02:00 +Internet,case-8014,2011-08-03 00:00:00+02:00,General,2011-07-20 11:36:05.108000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-28465,Confirmation of receipt,complete,Group 1,Resource31,2011-07-04 11:29:01.430000+02:00 +Internet,case-8014,2011-08-03 00:00:00+02:00,General,2011-07-20 11:36:05.108000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30733,T02 Check confirmation of receipt,complete,Group 4,Resource31,2011-07-04 11:32:08.699000+02:00 +Internet,case-8014,2011-08-03 00:00:00+02:00,General,2011-07-20 11:36:05.108000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30737,T04 Determine confirmation of receipt,complete,Group 3,Resource31,2011-07-04 11:32:34.009000+02:00 +Internet,case-8014,2011-08-03 00:00:00+02:00,General,2011-07-20 11:36:05.108000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30734,T06 Determine necessity of stop advice,complete,Group 1,Resource31,2011-07-04 11:33:07.186000+02:00 +Internet,case-8014,2011-08-03 00:00:00+02:00,General,2011-07-20 11:36:05.108000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30738,T05 Print and send confirmation of receipt,complete,Group 2,Resource31,2011-07-04 11:34:29.418000+02:00 +Internet,case-8014,2011-08-03 00:00:00+02:00,General,2011-07-20 11:36:05.108000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30740,T10 Determine necessity to stop indication,complete,Group 1,Resource31,2011-07-04 11:35:19.324000+02:00 +Internet,case-8015,2011-08-03 00:00:00+02:00,General,2011-07-25 10:11:47.884000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-28466,Confirmation of receipt,complete,Group 1,Resource07,2011-07-05 08:56:27.430000+02:00 +Internet,case-8015,2011-08-03 00:00:00+02:00,General,2011-07-25 10:11:47.884000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30894,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-07-05 08:57:29.772000+02:00 +Internet,case-8015,2011-08-03 00:00:00+02:00,General,2011-07-25 10:11:47.884000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30896,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-07-05 08:58:02.540000+02:00 +Internet,case-8015,2011-08-03 00:00:00+02:00,General,2011-07-25 10:11:47.884000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30897,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-07-05 08:58:26.947000+02:00 +Internet,case-8015,2011-08-03 00:00:00+02:00,General,2011-07-25 10:11:47.884000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30895,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-07-05 08:59:30.379000+02:00 +Internet,case-8015,2011-08-03 00:00:00+02:00,General,2011-07-25 10:11:47.884000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30898,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-07-05 09:00:22.750000+02:00 +Internet,case-8016,2011-08-03 00:00:00+02:00,General,2011-07-27 08:35:00.199000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-28470,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-14 11:57:04.590000+02:00 +Internet,case-8016,2011-08-03 00:00:00+02:00,General,2011-07-27 08:35:00.199000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-31992,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-14 11:57:40.065000+02:00 +Internet,case-8016,2011-08-03 00:00:00+02:00,General,2011-07-27 08:35:00.199000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-31994,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-14 11:57:59.754000+02:00 +Internet,case-8016,2011-08-03 00:00:00+02:00,General,2011-07-27 08:35:00.199000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-31995,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-14 11:58:35.065000+02:00 +Internet,case-8016,2011-08-03 00:00:00+02:00,General,2011-07-27 08:35:00.199000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-31993,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-14 11:59:01.101000+02:00 +Internet,case-8016,2011-08-03 00:00:00+02:00,General,2011-07-27 08:35:00.199000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-31996,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-14 11:59:33.707000+02:00 +Internet,case-8017,2011-08-03 00:00:00+02:00,General,2011-07-21 09:46:33.313000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-28474,Confirmation of receipt,complete,Group 1,Resource16,2011-07-04 15:32:23.852000+02:00 +Internet,case-8017,2011-08-03 00:00:00+02:00,General,2011-07-21 09:46:33.313000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30837,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-04 15:33:13.474000+02:00 +Internet,case-8017,2011-08-03 00:00:00+02:00,General,2011-07-21 09:46:33.313000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30839,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-04 15:33:54.454000+02:00 +Internet,case-8017,2011-08-03 00:00:00+02:00,General,2011-07-21 09:46:33.313000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30843,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-04 15:34:34.278000+02:00 +Internet,case-8017,2011-08-03 00:00:00+02:00,General,2011-07-21 09:46:33.313000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30838,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-04 15:35:05.342000+02:00 +Internet,case-8017,2011-08-03 00:00:00+02:00,General,2011-07-21 09:46:33.313000+02:00,2011-08-03 00:00:00.020000+02:00,Group 8,Resource11,2011-06-08 00:00:00.020000+02:00,task-30846,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-04 15:36:05.754000+02:00 +Internet,case-8018,2011-08-02 00:00:00+02:00,General,2011-07-20 11:00:36.494000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource11,2011-06-07 00:00:00.020000+02:00,task-28475,Confirmation of receipt,complete,Group 1,Resource01,2011-06-30 15:34:21.881000+02:00 +Internet,case-8018,2011-08-02 00:00:00+02:00,General,2011-07-20 11:00:36.494000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource11,2011-06-07 00:00:00.020000+02:00,task-30549,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-06-30 15:34:41.856000+02:00 +Internet,case-8018,2011-08-02 00:00:00+02:00,General,2011-07-20 11:00:36.494000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource11,2011-06-07 00:00:00.020000+02:00,task-30551,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-06-30 15:35:01.003000+02:00 +Internet,case-8018,2011-08-02 00:00:00+02:00,General,2011-07-20 11:00:36.494000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource11,2011-06-07 00:00:00.020000+02:00,task-30552,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-06-30 15:35:15.166000+02:00 +Internet,case-8018,2011-08-02 00:00:00+02:00,General,2011-07-20 11:00:36.494000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource11,2011-06-07 00:00:00.020000+02:00,task-30550,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-06-30 15:35:33.071000+02:00 +Internet,case-8018,2011-08-02 00:00:00+02:00,General,2011-07-20 11:00:36.494000+02:00,2011-08-02 00:00:00.020000+02:00,Group 8,Resource11,2011-06-07 00:00:00.020000+02:00,task-30553,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-06-30 15:35:56.264000+02:00 +Internet,case-8019,2011-08-04 00:00:00+02:00,General,2011-06-21 08:32:30.705000+02:00,2011-08-04 00:00:00.020000+02:00,Group 8,Resource01,2011-06-09 00:00:00.020000+02:00,task-28476,Confirmation of receipt,complete,Group 1,admin2,2011-06-21 08:32:35.088000+02:00 +Internet,case-8020,2011-08-04 00:00:00+02:00,General,2011-07-25 08:11:56.678000+02:00,2011-08-04 00:00:00.020000+02:00,Group 8,Resource11,2011-06-09 00:00:00.020000+02:00,task-28486,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-07 09:31:06.477000+02:00 +Internet,case-8020,2011-08-04 00:00:00+02:00,General,2011-07-25 08:11:56.678000+02:00,2011-08-04 00:00:00.020000+02:00,Group 8,Resource11,2011-06-09 00:00:00.020000+02:00,task-31242,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-07 09:31:34.336000+02:00 +Internet,case-8020,2011-08-04 00:00:00+02:00,General,2011-07-25 08:11:56.678000+02:00,2011-08-04 00:00:00.020000+02:00,Group 8,Resource11,2011-06-09 00:00:00.020000+02:00,task-31244,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-07 09:31:54.384000+02:00 +Internet,case-8020,2011-08-04 00:00:00+02:00,General,2011-07-25 08:11:56.678000+02:00,2011-08-04 00:00:00.020000+02:00,Group 8,Resource11,2011-06-09 00:00:00.020000+02:00,task-31245,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-07 09:32:10.716000+02:00 +Internet,case-8020,2011-08-04 00:00:00+02:00,General,2011-07-25 08:11:56.678000+02:00,2011-08-04 00:00:00.020000+02:00,Group 8,Resource11,2011-06-09 00:00:00.020000+02:00,task-31243,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-07 09:32:28.272000+02:00 +Internet,case-8020,2011-08-04 00:00:00+02:00,General,2011-07-25 08:11:56.678000+02:00,2011-08-04 00:00:00.020000+02:00,Group 8,Resource11,2011-06-09 00:00:00.020000+02:00,task-31246,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-07 09:33:05.852000+02:00 +Internet,case-8021,2011-08-04 00:00:00+02:00,General,2011-08-02 11:20:35.789000+02:00,2011-08-04 00:00:00.020000+02:00,Group 5,Resource13,2011-06-09 00:00:00.020000+02:00,task-28492,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:53:07.115000+02:00 +Internet,case-8021,2011-08-04 00:00:00+02:00,General,2011-08-02 11:20:35.789000+02:00,2011-08-04 00:00:00.020000+02:00,Group 5,Resource13,2011-06-09 00:00:00.020000+02:00,task-30114,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:53:42.995000+02:00 +Internet,case-8021,2011-08-04 00:00:00+02:00,General,2011-08-02 11:20:35.789000+02:00,2011-08-04 00:00:00.020000+02:00,Group 5,Resource13,2011-06-09 00:00:00.020000+02:00,task-30115,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-28 12:54:03.737000+02:00 +Internet,case-8021,2011-08-04 00:00:00+02:00,General,2011-08-02 11:20:35.789000+02:00,2011-08-04 00:00:00.020000+02:00,Group 5,Resource13,2011-06-09 00:00:00.020000+02:00,task-30116,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-28 12:55:03.585000+02:00 +Internet,case-8021,2011-08-04 00:00:00+02:00,General,2011-08-02 11:20:35.789000+02:00,2011-08-04 00:00:00.020000+02:00,Group 5,Resource13,2011-06-09 00:00:00.020000+02:00,task-30118,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-06-28 12:55:45.290000+02:00 +Internet,case-8021,2011-08-04 00:00:00+02:00,General,2011-08-02 11:20:35.789000+02:00,2011-08-04 00:00:00.020000+02:00,Group 5,Resource13,2011-06-09 00:00:00.020000+02:00,task-30117,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-28 12:56:02.083000+02:00 +Internet,case-8047,2011-08-05 17:00:10.794000+02:00,General,,2011-08-05 17:00:10.794000+02:00,,Resource26,2011-06-10 17:00:10.794000+02:00,task-28617,Confirmation of receipt,complete,Group 1,admin2,2011-06-15 08:43:42.105000+02:00 +Internet,case-8047,2011-08-05 17:00:10.794000+02:00,General,,2011-08-05 17:00:10.794000+02:00,,Resource26,2011-06-10 17:00:10.794000+02:00,task-28677,T02 Check confirmation of receipt,complete,Group 4,TEST,2011-06-15 10:54:47.774000+02:00 +Internet,case-8047,2011-08-05 17:00:10.794000+02:00,General,,2011-08-05 17:00:10.794000+02:00,,Resource26,2011-06-10 17:00:10.794000+02:00,task-28678,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-15 11:51:34.970000+02:00 +Internet,case-8047,2011-08-05 17:00:10.794000+02:00,General,,2011-08-05 17:00:10.794000+02:00,,Resource26,2011-06-10 17:00:10.794000+02:00,task-28704,T10 Determine necessity to stop indication,complete,Group 1,Resource26,2011-06-15 11:55:26.279000+02:00 +Internet,case-8047,2011-08-05 17:00:10.794000+02:00,General,,2011-08-05 17:00:10.794000+02:00,,Resource26,2011-06-10 17:00:10.794000+02:00,task-28692,T04 Determine confirmation of receipt,complete,Group 3,Resource26,2011-06-15 20:55:28.037000+02:00 +Internet,case-8047,2011-08-05 17:00:10.794000+02:00,General,,2011-08-05 17:00:10.794000+02:00,,Resource26,2011-06-10 17:00:10.794000+02:00,task-28725,T03 Adjust confirmation of receipt,complete,Group 1,Resource26,2011-06-15 20:55:48.260000+02:00 +Internet,case-8047,2011-08-05 17:00:10.794000+02:00,General,,2011-08-05 17:00:10.794000+02:00,,Resource26,2011-06-10 17:00:10.794000+02:00,task-28726,T02 Check confirmation of receipt,complete,Group 4,Resource26,2011-06-15 20:59:51.176000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28634,Confirmation of receipt,complete,Group 1,admin2,2011-06-14 15:49:29.332000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28670,T02 Check confirmation of receipt,complete,Group 4,admin2,2011-06-14 15:52:59.095000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28672,T04 Determine confirmation of receipt,complete,Group 3,admin2,2011-06-15 10:21:17.087000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28687,T05 Print and send confirmation of receipt,complete,Group 2,TEST,2011-06-15 10:44:01.474000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28671,T06 Determine necessity of stop advice,complete,Group 1,test,2011-06-15 11:12:55.261000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28694,T08 Draft and send request for advice,complete,Group 1,test,2011-06-15 11:18:47.458000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28701,T09-3 Process or receive external advice from party 3,complete,Group 1,test,2011-06-15 11:23:17.210000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28703,T09-1 Process or receive external advice from party 1,complete,Group 1,test,2011-06-15 11:26:16.806000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28696,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource26,2011-06-15 11:53:50.708000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28699,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource26,2011-06-15 11:54:09.601000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28700,T09-2 Process or receive external advice from party 2,complete,Group 1,Resource26,2011-06-15 12:04:01.557000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28702,T09-4 Process or receive external advice from party 4,complete,Group 1,Resource26,2011-06-15 12:41:42.494000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28697,T07-2 Draft intern advice aspect 2,complete,Group 15,test,2011-06-15 13:46:46.820000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28695,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource26,2011-06-16 15:48:40.842000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28698,T07-4 Draft internal advice to hold for type 4,complete,Group 12,Resource26,2011-06-16 15:48:58.173000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28831,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-16 15:49:43.934000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28833,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-16 15:50:32.990000+02:00 +Internet,case-8061,2011-08-08 15:37:34.380000+02:00,General,,2011-08-08 15:37:34.380000+02:00,,Resource26,2011-06-13 15:37:34.380000+02:00,task-28834,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2011-06-16 15:51:57.591000+02:00 +Internet,case-8068,2011-08-09 10:08:29.011000+02:00,General,2011-10-24 12:38:10.339000+02:00,2011-08-09 10:08:29.011000+02:00,Group 5,Resource14,2011-06-14 10:08:29.011000+02:00,task-28647,Confirmation of receipt,complete,Group 1,Resource14,2011-07-05 08:44:33.356000+02:00 +Internet,case-8068,2011-08-09 10:08:29.011000+02:00,General,2011-10-24 12:38:10.339000+02:00,2011-08-09 10:08:29.011000+02:00,Group 5,Resource14,2011-06-14 10:08:29.011000+02:00,task-30887,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-07-05 08:45:08.567000+02:00 +Internet,case-8068,2011-08-09 10:08:29.011000+02:00,General,2011-10-24 12:38:10.339000+02:00,2011-08-09 10:08:29.011000+02:00,Group 5,Resource14,2011-06-14 10:08:29.011000+02:00,task-30886,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-07-05 08:48:01.826000+02:00 +Internet,case-8068,2011-08-09 10:08:29.011000+02:00,General,2011-10-24 12:38:10.339000+02:00,2011-08-09 10:08:29.011000+02:00,Group 5,Resource14,2011-06-14 10:08:29.011000+02:00,task-30889,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-07-05 08:48:20.709000+02:00 +Internet,case-8068,2011-08-09 10:08:29.011000+02:00,General,2011-10-24 12:38:10.339000+02:00,2011-08-09 10:08:29.011000+02:00,Group 5,Resource14,2011-06-14 10:08:29.011000+02:00,task-30891,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-07-05 08:48:54.412000+02:00 +Internet,case-8068,2011-08-09 10:08:29.011000+02:00,General,2011-10-24 12:38:10.339000+02:00,2011-08-09 10:08:29.011000+02:00,Group 5,Resource14,2011-06-14 10:08:29.011000+02:00,task-31957,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-07-15 14:03:46.734000+02:00 +Internet,case-8077,2011-08-09 01:06:40+02:00,General,2011-08-08 00:00:00.020000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource04,2011-06-14 01:06:40.020000+02:00,task-28662,Confirmation of receipt,complete,Group 1,Resource04,2011-06-22 08:45:07.133000+02:00 +Internet,case-8077,2011-08-09 01:06:40+02:00,General,2011-08-08 00:00:00.020000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource04,2011-06-14 01:06:40.020000+02:00,task-29414,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-06-22 08:45:24.919000+02:00 +Internet,case-8077,2011-08-09 01:06:40+02:00,General,2011-08-08 00:00:00.020000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource04,2011-06-14 01:06:40.020000+02:00,task-29416,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-06-22 08:45:44.302000+02:00 +Internet,case-8077,2011-08-09 01:06:40+02:00,General,2011-08-08 00:00:00.020000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource04,2011-06-14 01:06:40.020000+02:00,task-29417,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-06-22 08:46:09.708000+02:00 +Internet,case-8077,2011-08-09 01:06:40+02:00,General,2011-08-08 00:00:00.020000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource04,2011-06-14 01:06:40.020000+02:00,task-29415,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-06-22 08:50:26.977000+02:00 +Internet,case-8077,2011-08-09 01:06:40+02:00,General,2011-08-08 00:00:00.020000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource04,2011-06-14 01:06:40.020000+02:00,task-29418,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-06-22 08:53:14.021000+02:00 +Internet,case-8079,2011-08-31 14:45:00.957000+02:00,General,,2011-08-31 14:45:00.957000+02:00,,Resource26,2011-06-14 14:45:00.957000+02:00,task-28666,Confirmation of receipt,complete,Group 1,Resource26,2011-06-15 13:42:34.168000+02:00 +Internet,case-8079,2011-08-31 14:45:00.957000+02:00,General,,2011-08-31 14:45:00.957000+02:00,,Resource26,2011-06-14 14:45:00.957000+02:00,task-28711,T02 Check confirmation of receipt,complete,Group 4,Resource26,2011-06-15 21:01:15.678000+02:00 +Internet,case-8079,2011-08-31 14:45:00.957000+02:00,General,,2011-08-31 14:45:00.957000+02:00,,Resource26,2011-06-14 14:45:00.957000+02:00,task-28731,T03 Adjust confirmation of receipt,complete,Group 1,Resource26,2011-06-15 21:01:53.785000+02:00 +Internet,case-8079,2011-08-31 14:45:00.957000+02:00,General,,2011-08-31 14:45:00.957000+02:00,,Resource26,2011-06-14 14:45:00.957000+02:00,task-28732,T02 Check confirmation of receipt,complete,Group 4,Resource10,2011-06-16 13:01:54.592000+02:00 +Internet,case-8081,2011-08-09 01:06:40+02:00,General,2011-07-25 09:12:43.992000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-28667,Confirmation of receipt,complete,EMPTY,Resource16,2011-07-05 13:29:10.018000+02:00 +Internet,case-8081,2011-08-09 01:06:40+02:00,General,2011-07-25 09:12:43.992000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31062,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-05 13:29:38.507000+02:00 +Internet,case-8081,2011-08-09 01:06:40+02:00,General,2011-07-25 09:12:43.992000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31064,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-05 13:30:01.661000+02:00 +Internet,case-8081,2011-08-09 01:06:40+02:00,General,2011-07-25 09:12:43.992000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31065,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-05 13:30:40.050000+02:00 +Internet,case-8081,2011-08-09 01:06:40+02:00,General,2011-07-25 09:12:43.992000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31063,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-05 13:31:04.022000+02:00 +Internet,case-8081,2011-08-09 01:06:40+02:00,General,2011-07-25 09:12:43.992000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31066,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-05 13:31:29.451000+02:00 +Internet,case-8082,2011-08-09 01:06:40+02:00,General,2011-07-25 08:20:52.864000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-28668,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-13 09:53:25.176000+02:00 +Internet,case-8082,2011-08-09 01:06:40+02:00,General,2011-07-25 08:20:52.864000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31865,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-13 09:53:50.512000+02:00 +Internet,case-8082,2011-08-09 01:06:40+02:00,General,2011-07-25 08:20:52.864000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31867,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-13 09:54:09.035000+02:00 +Internet,case-8082,2011-08-09 01:06:40+02:00,General,2011-07-25 08:20:52.864000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31868,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-13 09:54:31.016000+02:00 +Internet,case-8082,2011-08-09 01:06:40+02:00,General,2011-07-25 08:20:52.864000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31866,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-13 09:54:46.981000+02:00 +Internet,case-8082,2011-08-09 01:06:40+02:00,General,2011-07-25 08:20:52.864000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31869,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-13 09:55:22.938000+02:00 +Internet,case-8083,2011-08-09 01:06:40+02:00,General,2011-07-25 08:38:59.632000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-28669,Confirmation of receipt,complete,EMPTY,Resource16,2011-07-05 14:12:57.409000+02:00 +Internet,case-8083,2011-08-09 01:06:40+02:00,General,2011-07-25 08:38:59.632000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31084,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-05 14:13:24.016000+02:00 +Internet,case-8083,2011-08-09 01:06:40+02:00,General,2011-07-25 08:38:59.632000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31086,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-05 14:13:56.984000+02:00 +Internet,case-8083,2011-08-09 01:06:40+02:00,General,2011-07-25 08:38:59.632000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31087,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-05 14:14:18.480000+02:00 +Internet,case-8083,2011-08-09 01:06:40+02:00,General,2011-07-25 08:38:59.632000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31085,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-05 14:14:39.156000+02:00 +Internet,case-8083,2011-08-09 01:06:40+02:00,General,2011-07-25 08:38:59.632000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31088,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-05 14:15:03.558000+02:00 +Internet,case-8084,2011-08-09 01:06:40+02:00,General,2011-07-25 08:51:37.539000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-28673,Confirmation of receipt,complete,EMPTY,Resource16,2011-07-08 09:26:23.650000+02:00 +Internet,case-8084,2011-08-09 01:06:40+02:00,General,2011-07-25 08:51:37.539000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31389,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-08 09:26:56.265000+02:00 +Internet,case-8084,2011-08-09 01:06:40+02:00,General,2011-07-25 08:51:37.539000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31391,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-08 09:27:23.002000+02:00 +Internet,case-8084,2011-08-09 01:06:40+02:00,General,2011-07-25 08:51:37.539000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31392,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-08 09:27:45.467000+02:00 +Internet,case-8084,2011-08-09 01:06:40+02:00,General,2011-07-25 08:51:37.539000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31390,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-08 09:28:11.385000+02:00 +Internet,case-8084,2011-08-09 01:06:40+02:00,General,2011-07-25 08:51:37.539000+02:00,2011-08-09 01:06:40.020000+02:00,Group 8,Resource11,2011-06-14 01:06:40.020000+02:00,task-31393,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-08 09:28:51.978000+02:00 +Internet,case-8092,2011-08-05 01:06:40+02:00,General,2011-07-13 15:30:24.198000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource13,2011-06-10 01:06:40.020000+02:00,task-28686,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-22 13:47:16.381000+02:00 +Internet,case-8092,2011-08-05 01:06:40+02:00,General,2011-07-13 15:30:24.198000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource13,2011-06-10 01:06:40.020000+02:00,task-29523,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-22 13:51:58.810000+02:00 +Internet,case-8092,2011-08-05 01:06:40+02:00,General,2011-07-13 15:30:24.198000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource13,2011-06-10 01:06:40.020000+02:00,task-29522,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-22 13:52:31.680000+02:00 +Internet,case-8092,2011-08-05 01:06:40+02:00,General,2011-07-13 15:30:24.198000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource13,2011-06-10 01:06:40.020000+02:00,task-29524,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-22 13:52:50.457000+02:00 +Internet,case-8092,2011-08-05 01:06:40+02:00,General,2011-07-13 15:30:24.198000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource13,2011-06-10 01:06:40.020000+02:00,task-29525,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-22 13:53:38.453000+02:00 +Internet,case-8092,2011-08-05 01:06:40+02:00,General,2011-07-13 15:30:24.198000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource13,2011-06-10 01:06:40.020000+02:00,task-29528,T05 Print and send confirmation of receipt,complete,Group 2,Resource13,2011-06-22 13:54:35.854000+02:00 +Internet,case-8093,2011-09-21 01:06:40+02:00,General,2011-09-05 11:45:11.852000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-28688,Confirmation of receipt,complete,Group 1,Resource04,2011-06-22 10:31:37.672000+02:00 +Internet,case-8093,2011-09-21 01:06:40+02:00,General,2011-09-05 11:45:11.852000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-29446,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-06-22 10:32:09.283000+02:00 +Internet,case-8093,2011-09-21 01:06:40+02:00,General,2011-09-05 11:45:11.852000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-29448,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-06-22 10:32:41.570000+02:00 +Internet,case-8093,2011-09-21 01:06:40+02:00,General,2011-09-05 11:45:11.852000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-29449,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-06-22 10:33:14.640000+02:00 +Internet,case-8093,2011-09-21 01:06:40+02:00,General,2011-09-05 11:45:11.852000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-29447,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-06-22 15:11:01.976000+02:00 +Internet,case-8093,2011-09-21 01:06:40+02:00,General,2011-09-05 11:45:11.852000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-29571,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-06-22 15:11:24.768000+02:00 +Desk,case-8098,2011-07-21 01:06:40+02:00,General,2011-08-23 10:00:13.100000+02:00,2011-07-21 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-28713,Confirmation of receipt,complete,EMPTY,Resource13,2011-07-04 11:28:30.205000+02:00 +Desk,case-8098,2011-07-21 01:06:40+02:00,General,2011-08-23 10:00:13.100000+02:00,2011-07-21 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-30731,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-07-04 11:31:29.068000+02:00 +Desk,case-8098,2011-07-21 01:06:40+02:00,General,2011-08-23 10:00:13.100000+02:00,2011-07-21 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-30735,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-07-04 11:32:00.667000+02:00 +Desk,case-8098,2011-07-21 01:06:40+02:00,General,2011-08-23 10:00:13.100000+02:00,2011-07-21 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-30736,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-07-04 11:32:47.755000+02:00 +Desk,case-8098,2011-07-21 01:06:40+02:00,General,2011-08-23 10:00:13.100000+02:00,2011-07-21 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-30732,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-07-04 11:33:04.137000+02:00 +Desk,case-8098,2011-07-21 01:06:40+02:00,General,2011-08-23 10:00:13.100000+02:00,2011-07-21 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-30739,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-07-04 11:33:23.885000+02:00 +Internet,case-8099,2011-08-10 15:16:24.392000+02:00,Customer contact,2011-08-09 14:37:32.274000+02:00,2011-08-10 15:16:24.392000+02:00,,admin3,2011-06-15 15:16:24.392000+02:00,task-28714,Confirmation of receipt,complete,EMPTY,admin2,2011-08-09 14:37:33.620000+02:00 +Internet,case-8100,2011-05-27 01:06:40+02:00,General,2011-06-24 10:10:32.020000+02:00,2011-05-27 01:06:40.020000+02:00,Group 5,Resource06,2011-04-01 01:06:40.020000+02:00,task-28715,Confirmation of receipt,complete,Group 1,Resource06,2011-06-20 09:03:00.459000+02:00 +Internet,case-8100,2011-05-27 01:06:40+02:00,General,2011-06-24 10:10:32.020000+02:00,2011-05-27 01:06:40.020000+02:00,Group 5,Resource06,2011-04-01 01:06:40.020000+02:00,task-29085,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-06-20 09:19:35.449000+02:00 +Internet,case-8100,2011-05-27 01:06:40+02:00,General,2011-06-24 10:10:32.020000+02:00,2011-05-27 01:06:40.020000+02:00,Group 5,Resource06,2011-04-01 01:06:40.020000+02:00,task-29094,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-06-20 09:19:53.648000+02:00 +Internet,case-8100,2011-05-27 01:06:40+02:00,General,2011-06-24 10:10:32.020000+02:00,2011-05-27 01:06:40.020000+02:00,Group 5,Resource06,2011-04-01 01:06:40.020000+02:00,task-29095,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-06-20 09:20:10.860000+02:00 +Internet,case-8100,2011-05-27 01:06:40+02:00,General,2011-06-24 10:10:32.020000+02:00,2011-05-27 01:06:40.020000+02:00,Group 5,Resource06,2011-04-01 01:06:40.020000+02:00,task-29086,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-06-20 09:20:34.147000+02:00 +Internet,case-8100,2011-05-27 01:06:40+02:00,General,2011-06-24 10:10:32.020000+02:00,2011-05-27 01:06:40.020000+02:00,Group 5,Resource06,2011-04-01 01:06:40.020000+02:00,task-29096,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-06-20 11:00:29.389000+02:00 +Internet,case-8102,2011-09-01 01:06:40+02:00,General,2011-08-26 14:51:04.144000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-28717,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:30:22.026000+02:00 +Internet,case-8102,2011-09-01 01:06:40+02:00,General,2011-08-26 14:51:04.144000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-29835,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:31:56.502000+02:00 +Internet,case-8102,2011-09-01 01:06:40+02:00,General,2011-08-26 14:51:04.144000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-29837,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:32:28.618000+02:00 +Internet,case-8102,2011-09-01 01:06:40+02:00,General,2011-08-26 14:51:04.144000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-29836,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-27 13:32:52.784000+02:00 +Internet,case-8102,2011-09-01 01:06:40+02:00,General,2011-08-26 14:51:04.144000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-29838,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 13:33:22.251000+02:00 +Internet,case-8102,2011-09-01 01:06:40+02:00,General,2011-08-26 14:51:04.144000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-05-26 01:06:40.020000+02:00,task-29839,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-27 13:33:45.679000+02:00 +Desk,case-8104,2011-08-10 16:26:53.432000+02:00,General,2011-07-14 09:04:09.877000+02:00,2011-08-10 16:26:53.432000+02:00,Group 7,Resource35,2011-06-15 16:26:53.432000+02:00,task-28719,Confirmation of receipt,complete,EMPTY,admin2,2011-07-14 09:04:11.137000+02:00 +Internet,case-8105,2011-08-10 16:27:56.852000+02:00,General,2011-08-12 11:34:09.085000+02:00,2011-08-10 16:27:56.852000+02:00,Group 5,Resource12,2011-06-15 16:31:28.724000+02:00,task-28720,Confirmation of receipt,complete,EMPTY,Resource12,2011-07-21 11:06:02.203000+02:00 +Internet,case-8105,2011-08-10 16:27:56.852000+02:00,General,2011-08-12 11:34:09.085000+02:00,2011-08-10 16:27:56.852000+02:00,Group 5,Resource12,2011-06-15 16:31:28.724000+02:00,task-32983,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-07-21 11:19:35.542000+02:00 +Internet,case-8105,2011-08-10 16:27:56.852000+02:00,General,2011-08-12 11:34:09.085000+02:00,2011-08-10 16:27:56.852000+02:00,Group 5,Resource12,2011-06-15 16:31:28.724000+02:00,task-32988,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-07-21 11:20:37.912000+02:00 +Internet,case-8105,2011-08-10 16:27:56.852000+02:00,General,2011-08-12 11:34:09.085000+02:00,2011-08-10 16:27:56.852000+02:00,Group 5,Resource12,2011-06-15 16:31:28.724000+02:00,task-32990,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-07-21 11:21:55.470000+02:00 +Internet,case-8105,2011-08-10 16:27:56.852000+02:00,General,2011-08-12 11:34:09.085000+02:00,2011-08-10 16:27:56.852000+02:00,Group 5,Resource12,2011-06-15 16:31:28.724000+02:00,task-32984,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-07-21 11:22:40.287000+02:00 +Internet,case-8105,2011-08-10 16:27:56.852000+02:00,General,2011-08-12 11:34:09.085000+02:00,2011-08-10 16:27:56.852000+02:00,Group 5,Resource12,2011-06-15 16:31:28.724000+02:00,task-32992,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-07-21 11:34:35.458000+02:00 +Internet,case-8131,2011-08-12 01:06:40+02:00,General,2011-07-25 09:18:52.518000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-28883,Confirmation of receipt,complete,Group 1,Resource16,2011-07-08 10:00:07.989000+02:00 +Internet,case-8131,2011-08-12 01:06:40+02:00,General,2011-07-25 09:18:52.518000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-31413,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-08 10:00:33.447000+02:00 +Internet,case-8131,2011-08-12 01:06:40+02:00,General,2011-07-25 09:18:52.518000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-31415,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-08 10:01:27.763000+02:00 +Internet,case-8131,2011-08-12 01:06:40+02:00,General,2011-07-25 09:18:52.518000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-31416,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-08 10:01:52.152000+02:00 +Internet,case-8131,2011-08-12 01:06:40+02:00,General,2011-07-25 09:18:52.518000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-31414,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-08 10:02:15.183000+02:00 +Internet,case-8131,2011-08-12 01:06:40+02:00,General,2011-07-25 09:18:52.518000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-31417,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-08 10:02:58.985000+02:00 +Internet,case-8132,2011-08-12 01:06:40+02:00,General,2011-07-27 08:41:31.032000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-28887,Confirmation of receipt,complete,Group 1,Resource16,2011-07-05 12:10:25.728000+02:00 +Internet,case-8132,2011-08-12 01:06:40+02:00,General,2011-07-27 08:41:31.032000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-31032,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-05 12:10:56.395000+02:00 +Internet,case-8132,2011-08-12 01:06:40+02:00,General,2011-07-27 08:41:31.032000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-31034,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-05 12:11:23.993000+02:00 +Internet,case-8132,2011-08-12 01:06:40+02:00,General,2011-07-27 08:41:31.032000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-31035,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-05 12:11:47.148000+02:00 +Internet,case-8132,2011-08-12 01:06:40+02:00,General,2011-07-27 08:41:31.032000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-31033,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-05 12:12:15.069000+02:00 +Internet,case-8132,2011-08-12 01:06:40+02:00,General,2011-07-27 08:41:31.032000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-31036,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-05 12:12:42.051000+02:00 +Internet,case-8133,2011-08-12 01:06:40+02:00,General,2011-07-27 08:57:47.557000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-28894,Confirmation of receipt,complete,Group 1,Resource16,2011-07-05 11:17:08.904000+02:00 +Internet,case-8133,2011-08-12 01:06:40+02:00,General,2011-07-27 08:57:47.557000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-30963,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-07-05 11:17:38.823000+02:00 +Internet,case-8133,2011-08-12 01:06:40+02:00,General,2011-07-27 08:57:47.557000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-30965,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-05 11:18:00.678000+02:00 +Internet,case-8133,2011-08-12 01:06:40+02:00,General,2011-07-27 08:57:47.557000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-30966,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-05 11:18:26.621000+02:00 +Internet,case-8133,2011-08-12 01:06:40+02:00,General,2011-07-27 08:57:47.557000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-30964,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-05 11:19:09.878000+02:00 +Internet,case-8133,2011-08-12 01:06:40+02:00,General,2011-07-27 08:57:47.557000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-30967,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-05 11:19:35.897000+02:00 +Internet,case-8135,2011-08-12 01:06:40+02:00,General,2011-07-27 09:01:43.489000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-28902,Confirmation of receipt,complete,Group 1,Resource07,2011-07-05 10:08:44.375000+02:00 +Internet,case-8135,2011-08-12 01:06:40+02:00,General,2011-07-27 09:01:43.489000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-30933,T02 Check confirmation of receipt,complete,Group 4,Resource07,2011-07-05 10:24:28.855000+02:00 +Internet,case-8135,2011-08-12 01:06:40+02:00,General,2011-07-27 09:01:43.489000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-30937,T04 Determine confirmation of receipt,complete,Group 3,Resource07,2011-07-05 10:25:35.428000+02:00 +Internet,case-8135,2011-08-12 01:06:40+02:00,General,2011-07-27 09:01:43.489000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-30938,T05 Print and send confirmation of receipt,complete,Group 2,Resource07,2011-07-05 10:26:27.567000+02:00 +Internet,case-8135,2011-08-12 01:06:40+02:00,General,2011-07-27 09:01:43.489000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-30934,T06 Determine necessity of stop advice,complete,Group 1,Resource07,2011-07-05 10:27:08.266000+02:00 +Internet,case-8135,2011-08-12 01:06:40+02:00,General,2011-07-27 09:01:43.489000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-30939,T10 Determine necessity to stop indication,complete,Group 1,Resource07,2011-07-05 10:27:41.264000+02:00 +Desk,case-8136,2011-08-12 01:06:40+02:00,General,2011-08-01 15:11:23.676000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource09,2011-06-17 01:06:40.020000+02:00,task-28903,Confirmation of receipt,complete,Group 1,Resource09,2011-07-01 10:39:07.949000+02:00 +Desk,case-8136,2011-08-12 01:06:40+02:00,General,2011-08-01 15:11:23.676000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource09,2011-06-17 01:06:40.020000+02:00,task-30580,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-01 10:39:37.906000+02:00 +Desk,case-8136,2011-08-12 01:06:40+02:00,General,2011-08-01 15:11:23.676000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource09,2011-06-17 01:06:40.020000+02:00,task-30582,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-01 10:40:21.914000+02:00 +Desk,case-8136,2011-08-12 01:06:40+02:00,General,2011-08-01 15:11:23.676000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource09,2011-06-17 01:06:40.020000+02:00,task-30581,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-01 10:41:08.528000+02:00 +Desk,case-8136,2011-08-12 01:06:40+02:00,General,2011-08-01 15:11:23.676000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource09,2011-06-17 01:06:40.020000+02:00,task-30584,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-01 10:41:38.595000+02:00 +Desk,case-8136,2011-08-12 01:06:40+02:00,General,2011-08-01 15:11:23.676000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource09,2011-06-17 01:06:40.020000+02:00,task-30583,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-01 10:49:44.722000+02:00 +Internet,case-8137,2011-08-10 01:06:40+02:00,General,2011-08-10 16:23:05.862000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource13,2011-06-15 01:06:40.020000+02:00,task-28904,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 12:55:24.837000+02:00 +Internet,case-8137,2011-08-10 01:06:40+02:00,General,2011-08-10 16:23:05.862000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource13,2011-06-15 01:06:40.020000+02:00,task-29810,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 12:56:08.686000+02:00 +Internet,case-8137,2011-08-10 01:06:40+02:00,General,2011-08-10 16:23:05.862000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource13,2011-06-15 01:06:40.020000+02:00,task-29812,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 12:56:49.205000+02:00 +Internet,case-8137,2011-08-10 01:06:40+02:00,General,2011-08-10 16:23:05.862000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource13,2011-06-15 01:06:40.020000+02:00,task-29813,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-27 12:57:22.148000+02:00 +Internet,case-8137,2011-08-10 01:06:40+02:00,General,2011-08-10 16:23:05.862000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource13,2011-06-15 01:06:40.020000+02:00,task-29811,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-27 12:57:49.676000+02:00 +Internet,case-8137,2011-08-10 01:06:40+02:00,General,2011-08-10 16:23:05.862000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource13,2011-06-15 01:06:40.020000+02:00,task-29814,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-27 12:58:09.048000+02:00 +Internet,case-8138,2011-08-12 01:06:40+02:00,General,2011-07-27 09:55:01.014000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-28907,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-14 12:32:42.453000+02:00 +Internet,case-8138,2011-08-12 01:06:40+02:00,General,2011-07-27 09:55:01.014000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-32009,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-14 12:33:27.308000+02:00 +Internet,case-8138,2011-08-12 01:06:40+02:00,General,2011-07-27 09:55:01.014000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-32011,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-14 12:33:48.564000+02:00 +Internet,case-8138,2011-08-12 01:06:40+02:00,General,2011-07-27 09:55:01.014000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-32012,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-14 12:34:08.562000+02:00 +Internet,case-8138,2011-08-12 01:06:40+02:00,General,2011-07-27 09:55:01.014000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-32010,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-14 12:34:40.687000+02:00 +Internet,case-8138,2011-08-12 01:06:40+02:00,General,2011-07-27 09:55:01.014000+02:00,2011-08-12 01:06:40.020000+02:00,Group 8,Resource11,2011-06-17 01:06:40.020000+02:00,task-32013,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-14 12:35:04.338000+02:00 +Desk,case-8141,2011-08-12 01:06:40+02:00,General,2011-12-09 15:08:00.018000+01:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-29031,Confirmation of receipt,complete,EMPTY,Resource06,2011-07-12 14:53:32.546000+02:00 +Desk,case-8141,2011-08-12 01:06:40+02:00,General,2011-12-09 15:08:00.018000+01:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-31799,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-21 10:28:10.022000+02:00 +Desk,case-8141,2011-08-12 01:06:40+02:00,General,2011-12-09 15:08:00.018000+01:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-31798,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-11-09 08:53:08.186000+01:00 +Desk,case-8141,2011-08-12 01:06:40+02:00,General,2011-12-09 15:08:00.018000+01:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-45877,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-11-09 08:53:24.370000+01:00 +Desk,case-8141,2011-08-12 01:06:40+02:00,General,2011-12-09 15:08:00.018000+01:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-45878,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-11-09 08:57:49.951000+01:00 +Desk,case-8141,2011-08-12 01:06:40+02:00,General,2011-12-09 15:08:00.018000+01:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-32960,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-12-06 16:07:31.109000+01:00 +Desk,case-8142,2011-08-12 15:53:34.450000+02:00,General,2011-07-29 15:08:16.210000+02:00,2011-08-12 15:53:34.450000+02:00,Group 5,Resource09,2011-06-17 15:53:34.450000+02:00,task-29050,Confirmation of receipt,complete,Group 1,Resource09,2011-07-06 15:04:32.166000+02:00 +Desk,case-8142,2011-08-12 15:53:34.450000+02:00,General,2011-07-29 15:08:16.210000+02:00,2011-08-12 15:53:34.450000+02:00,Group 5,Resource09,2011-06-17 15:53:34.450000+02:00,task-31200,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-06 15:05:12.160000+02:00 +Desk,case-8142,2011-08-12 15:53:34.450000+02:00,General,2011-07-29 15:08:16.210000+02:00,2011-08-12 15:53:34.450000+02:00,Group 5,Resource09,2011-06-17 15:53:34.450000+02:00,task-31199,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-06 15:06:31.645000+02:00 +Desk,case-8142,2011-08-12 15:53:34.450000+02:00,General,2011-07-29 15:08:16.210000+02:00,2011-08-12 15:53:34.450000+02:00,Group 5,Resource09,2011-06-17 15:53:34.450000+02:00,task-31202,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-06 15:07:01.336000+02:00 +Desk,case-8142,2011-08-12 15:53:34.450000+02:00,General,2011-07-29 15:08:16.210000+02:00,2011-08-12 15:53:34.450000+02:00,Group 5,Resource09,2011-06-17 15:53:34.450000+02:00,task-31203,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-06 15:07:47.950000+02:00 +Desk,case-8142,2011-08-12 15:53:34.450000+02:00,General,2011-07-29 15:08:16.210000+02:00,2011-08-12 15:53:34.450000+02:00,Group 5,Resource09,2011-06-17 15:53:34.450000+02:00,task-31201,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-06 15:08:38.772000+02:00 +Internet,case-8179,2011-08-12 01:06:40+02:00,General,2011-08-12 14:08:34.496000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource13,2011-06-17 01:06:40.020000+02:00,task-29084,Confirmation of receipt,complete,EMPTY,Resource13,2011-06-29 10:07:01.086000+02:00 +Internet,case-8179,2011-08-12 01:06:40+02:00,General,2011-08-12 14:08:34.496000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource13,2011-06-17 01:06:40.020000+02:00,task-30205,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-06-29 10:09:09.227000+02:00 +Internet,case-8179,2011-08-12 01:06:40+02:00,General,2011-08-12 14:08:34.496000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource13,2011-06-17 01:06:40.020000+02:00,task-30204,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-06-29 10:10:54.648000+02:00 +Internet,case-8179,2011-08-12 01:06:40+02:00,General,2011-08-12 14:08:34.496000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource13,2011-06-17 01:06:40.020000+02:00,task-30207,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-06-29 10:11:22.480000+02:00 +Internet,case-8179,2011-08-12 01:06:40+02:00,General,2011-08-12 14:08:34.496000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource13,2011-06-17 01:06:40.020000+02:00,task-30208,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-06-29 10:11:47.742000+02:00 +Internet,case-8179,2011-08-12 01:06:40+02:00,General,2011-08-12 14:08:34.496000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource13,2011-06-17 01:06:40.020000+02:00,task-30206,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-06-29 10:19:31.809000+02:00 +Internet,case-8180,2011-08-14 01:06:40+02:00,General,2011-07-27 09:16:35.299000+02:00,2011-08-14 01:06:40.020000+02:00,Group 8,Resource11,2011-06-19 01:06:40.020000+02:00,task-29098,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-07 11:20:55.087000+02:00 +Internet,case-8180,2011-08-14 01:06:40+02:00,General,2011-07-27 09:16:35.299000+02:00,2011-08-14 01:06:40.020000+02:00,Group 8,Resource11,2011-06-19 01:06:40.020000+02:00,task-31277,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-07 11:21:18.590000+02:00 +Internet,case-8180,2011-08-14 01:06:40+02:00,General,2011-07-27 09:16:35.299000+02:00,2011-08-14 01:06:40.020000+02:00,Group 8,Resource11,2011-06-19 01:06:40.020000+02:00,task-31280,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-07 11:21:44.747000+02:00 +Internet,case-8180,2011-08-14 01:06:40+02:00,General,2011-07-27 09:16:35.299000+02:00,2011-08-14 01:06:40.020000+02:00,Group 8,Resource11,2011-06-19 01:06:40.020000+02:00,task-31282,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-07 11:22:15.060000+02:00 +Internet,case-8180,2011-08-14 01:06:40+02:00,General,2011-07-27 09:16:35.299000+02:00,2011-08-14 01:06:40.020000+02:00,Group 8,Resource11,2011-06-19 01:06:40.020000+02:00,task-31278,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-07 11:22:38.614000+02:00 +Internet,case-8180,2011-08-14 01:06:40+02:00,General,2011-07-27 09:16:35.299000+02:00,2011-08-14 01:06:40.020000+02:00,Group 8,Resource11,2011-06-19 01:06:40.020000+02:00,task-31285,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-07 11:23:02.697000+02:00 +Desk,case-8183,2011-09-06 01:06:40+02:00,General,2011-08-30 09:42:28.600000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource06,2011-05-31 01:06:40.020000+02:00,task-29109,Confirmation of receipt,complete,Group 1,Resource06,2011-06-27 09:47:40.274000+02:00 +Desk,case-8183,2011-09-06 01:06:40+02:00,General,2011-08-30 09:42:28.600000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource06,2011-05-31 01:06:40.020000+02:00,task-29758,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-06-27 10:47:24.200000+02:00 +Desk,case-8183,2011-09-06 01:06:40+02:00,General,2011-08-30 09:42:28.600000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource06,2011-05-31 01:06:40.020000+02:00,task-29784,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-06-27 13:03:24.786000+02:00 +Desk,case-8183,2011-09-06 01:06:40+02:00,General,2011-08-30 09:42:28.600000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource06,2011-05-31 01:06:40.020000+02:00,task-29827,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-06-27 13:03:43.471000+02:00 +Desk,case-8183,2011-09-06 01:06:40+02:00,General,2011-08-30 09:42:28.600000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource06,2011-05-31 01:06:40.020000+02:00,task-29759,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-06-27 13:07:18.920000+02:00 +Desk,case-8183,2011-09-06 01:06:40+02:00,General,2011-08-30 09:42:28.600000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource06,2011-05-31 01:06:40.020000+02:00,task-29830,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-06-27 13:07:56.300000+02:00 +Desk,case-8184,2011-09-27 01:06:40+02:00,General,2011-09-20 16:08:58.791000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource23,2011-05-31 01:06:40.020000+02:00,task-29138,Confirmation of receipt,complete,Group 1,Resource23,2011-06-28 12:49:13.915000+02:00 +Desk,case-8184,2011-09-27 01:06:40+02:00,General,2011-09-20 16:08:58.791000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource23,2011-05-31 01:06:40.020000+02:00,task-30108,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-06-28 12:50:02.553000+02:00 +Desk,case-8184,2011-09-27 01:06:40+02:00,General,2011-09-20 16:08:58.791000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource23,2011-05-31 01:06:40.020000+02:00,task-30110,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-06-28 12:50:39.203000+02:00 +Desk,case-8184,2011-09-27 01:06:40+02:00,General,2011-09-20 16:08:58.791000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource23,2011-05-31 01:06:40.020000+02:00,task-30111,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-06-28 12:54:12.278000+02:00 +Desk,case-8184,2011-09-27 01:06:40+02:00,General,2011-09-20 16:08:58.791000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource23,2011-05-31 01:06:40.020000+02:00,task-30109,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-07-01 11:19:09.308000+02:00 +Desk,case-8184,2011-09-27 01:06:40+02:00,General,2011-09-20 16:08:58.791000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource23,2011-05-31 01:06:40.020000+02:00,task-30600,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-07-01 11:21:49.271000+02:00 +Internet,case-8186,2011-08-15 01:06:40+02:00,General,,2011-08-15 01:06:40.020000+02:00,,Resource26,2011-06-20 01:06:40.020000+02:00,task-29167,Confirmation of receipt,complete,Group 1,Resource26,2011-06-21 22:30:05.950000+02:00 +Internet,case-8198,2011-08-16 01:06:40+02:00,General,2011-07-28 07:24:34.315000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-29263,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-13 13:12:58.533000+02:00 +Internet,case-8198,2011-08-16 01:06:40+02:00,General,2011-07-28 07:24:34.315000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-31922,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-13 13:13:21.658000+02:00 +Internet,case-8198,2011-08-16 01:06:40+02:00,General,2011-07-28 07:24:34.315000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-31924,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-13 13:13:41.158000+02:00 +Internet,case-8198,2011-08-16 01:06:40+02:00,General,2011-07-28 07:24:34.315000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-31925,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-13 13:14:01.090000+02:00 +Internet,case-8198,2011-08-16 01:06:40+02:00,General,2011-07-28 07:24:34.315000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-31923,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-13 13:14:15.882000+02:00 +Internet,case-8198,2011-08-16 01:06:40+02:00,General,2011-07-28 07:24:34.315000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-31926,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-13 13:14:53.068000+02:00 +Internet,case-8199,2011-08-16 01:06:40+02:00,General,2011-08-10 14:38:57.142000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-29294,Confirmation of receipt,complete,Group 1,Resource04,2011-06-22 14:01:31.637000+02:00 +Internet,case-8199,2011-08-16 01:06:40+02:00,General,2011-08-10 14:38:57.142000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-29541,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-06-22 14:01:50.701000+02:00 +Internet,case-8199,2011-08-16 01:06:40+02:00,General,2011-08-10 14:38:57.142000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-29543,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-06-22 14:02:10.143000+02:00 +Internet,case-8199,2011-08-16 01:06:40+02:00,General,2011-08-10 14:38:57.142000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-29544,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-06-22 14:02:28.179000+02:00 +Internet,case-8199,2011-08-16 01:06:40+02:00,General,2011-08-10 14:38:57.142000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-29542,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-06-24 08:52:19.621000+02:00 +Internet,case-8199,2011-08-16 01:06:40+02:00,General,2011-08-10 14:38:57.142000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-29643,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-06-24 08:52:39.470000+02:00 +Internet,case-8232,2011-08-19 10:33:04.860000+02:00,General,2011-08-17 10:06:11.016000+02:00,2011-08-19 10:33:04.860000+02:00,Group 5,Resource05,2011-06-24 10:33:04.860000+02:00,task-29671,Confirmation of receipt,complete,EMPTY,Resource05,2011-07-04 13:52:06.292000+02:00 +Internet,case-8232,2011-08-19 10:33:04.860000+02:00,General,2011-08-17 10:06:11.016000+02:00,2011-08-19 10:33:04.860000+02:00,Group 5,Resource05,2011-06-24 10:33:04.860000+02:00,task-30789,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-07-04 14:06:54.393000+02:00 +Internet,case-8232,2011-08-19 10:33:04.860000+02:00,General,2011-08-17 10:06:11.016000+02:00,2011-08-19 10:33:04.860000+02:00,Group 5,Resource05,2011-06-24 10:33:04.860000+02:00,task-30801,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-07-04 14:11:22.323000+02:00 +Internet,case-8232,2011-08-19 10:33:04.860000+02:00,General,2011-08-17 10:06:11.016000+02:00,2011-08-19 10:33:04.860000+02:00,Group 5,Resource05,2011-06-24 10:33:04.860000+02:00,task-30788,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-04 14:12:14.652000+02:00 +Internet,case-8232,2011-08-19 10:33:04.860000+02:00,General,2011-08-17 10:06:11.016000+02:00,2011-08-19 10:33:04.860000+02:00,Group 5,Resource05,2011-06-24 10:33:04.860000+02:00,task-30807,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-04 14:13:17.216000+02:00 +Internet,case-8232,2011-08-19 10:33:04.860000+02:00,General,2011-08-17 10:06:11.016000+02:00,2011-08-19 10:33:04.860000+02:00,Group 5,Resource05,2011-06-24 10:33:04.860000+02:00,task-30808,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-07-04 14:13:46.110000+02:00 +Internet,case-8234,2011-08-19 11:23:22.882000+02:00,General,2011-11-16 10:16:19.364000+01:00,2011-08-19 11:23:22.882000+02:00,Group 5,Resource14,2011-06-24 11:23:22.882000+02:00,task-29675,Confirmation of receipt,complete,EMPTY,Resource14,2011-08-26 10:38:57.113000+02:00 +Internet,case-8234,2011-08-19 11:23:22.882000+02:00,General,2011-11-16 10:16:19.364000+01:00,2011-08-19 11:23:22.882000+02:00,Group 5,Resource14,2011-06-24 11:23:22.882000+02:00,task-37187,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-26 10:39:24.737000+02:00 +Internet,case-8234,2011-08-19 11:23:22.882000+02:00,General,2011-11-16 10:16:19.364000+01:00,2011-08-19 11:23:22.882000+02:00,Group 5,Resource14,2011-06-24 11:23:22.882000+02:00,task-37189,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-26 10:39:45.761000+02:00 +Internet,case-8234,2011-08-19 11:23:22.882000+02:00,General,2011-11-16 10:16:19.364000+01:00,2011-08-19 11:23:22.882000+02:00,Group 5,Resource14,2011-06-24 11:23:22.882000+02:00,task-37190,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-26 10:40:16.633000+02:00 +Internet,case-8234,2011-08-19 11:23:22.882000+02:00,General,2011-11-16 10:16:19.364000+01:00,2011-08-19 11:23:22.882000+02:00,Group 5,Resource14,2011-06-24 11:23:22.882000+02:00,task-37188,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-26 10:40:37.718000+02:00 +Internet,case-8234,2011-08-19 11:23:22.882000+02:00,General,2011-11-16 10:16:19.364000+01:00,2011-08-19 11:23:22.882000+02:00,Group 5,Resource14,2011-06-24 11:23:22.882000+02:00,task-37191,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-26 10:41:12.151000+02:00 +Internet,case-8259,2011-08-17 01:06:40+02:00,General,2011-08-15 12:57:08.915000+02:00,2011-08-17 01:06:40.020000+02:00,Group 5,Resource12,2011-06-22 01:06:40.020000+02:00,task-29770,Confirmation of receipt,complete,EMPTY,Resource12,2011-08-08 14:44:02.220000+02:00 +Internet,case-8259,2011-08-17 01:06:40+02:00,General,2011-08-15 12:57:08.915000+02:00,2011-08-17 01:06:40.020000+02:00,Group 5,Resource12,2011-06-22 01:06:40.020000+02:00,task-35685,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-08-08 14:44:45.625000+02:00 +Internet,case-8259,2011-08-17 01:06:40+02:00,General,2011-08-15 12:57:08.915000+02:00,2011-08-17 01:06:40.020000+02:00,Group 5,Resource12,2011-06-22 01:06:40.020000+02:00,task-35687,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-08-08 14:45:33.258000+02:00 +Internet,case-8259,2011-08-17 01:06:40+02:00,General,2011-08-15 12:57:08.915000+02:00,2011-08-17 01:06:40.020000+02:00,Group 5,Resource12,2011-06-22 01:06:40.020000+02:00,task-35688,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-08-08 14:46:21.601000+02:00 +Internet,case-8259,2011-08-17 01:06:40+02:00,General,2011-08-15 12:57:08.915000+02:00,2011-08-17 01:06:40.020000+02:00,Group 5,Resource12,2011-06-22 01:06:40.020000+02:00,task-35686,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-08 14:46:44.947000+02:00 +Internet,case-8259,2011-08-17 01:06:40+02:00,General,2011-08-15 12:57:08.915000+02:00,2011-08-17 01:06:40.020000+02:00,Group 5,Resource12,2011-06-22 01:06:40.020000+02:00,task-35689,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-08-08 14:47:10.742000+02:00 +Internet,case-8261,2011-08-17 01:06:40+02:00,General,2011-07-28 07:29:13.253000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-29785,Confirmation of receipt,complete,Group 1,Resource27,2011-06-27 10:50:43.177000+02:00 +Internet,case-8261,2011-08-17 01:06:40+02:00,General,2011-07-28 07:29:13.253000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-29787,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-14 13:58:06.481000+02:00 +Internet,case-8261,2011-08-17 01:06:40+02:00,General,2011-07-28 07:29:13.253000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-29786,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-14 13:58:34.106000+02:00 +Internet,case-8261,2011-08-17 01:06:40+02:00,General,2011-07-28 07:29:13.253000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32050,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-14 14:00:10.399000+02:00 +Internet,case-8261,2011-08-17 01:06:40+02:00,General,2011-07-28 07:29:13.253000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32051,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-14 14:00:29.442000+02:00 +Internet,case-8261,2011-08-17 01:06:40+02:00,General,2011-07-28 07:29:13.253000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32049,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-14 14:02:43.390000+02:00 +Internet,case-8263,2011-08-17 01:06:40+02:00,General,2011-08-01 07:58:15.718000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-29791,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 09:07:08.407000+02:00 +Internet,case-8263,2011-08-17 01:06:40+02:00,General,2011-08-01 07:58:15.718000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32551,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 09:07:39.818000+02:00 +Internet,case-8263,2011-08-17 01:06:40+02:00,General,2011-08-01 07:58:15.718000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32553,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 09:08:01.275000+02:00 +Internet,case-8263,2011-08-17 01:06:40+02:00,General,2011-08-01 07:58:15.718000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32554,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 09:08:24.214000+02:00 +Internet,case-8263,2011-08-17 01:06:40+02:00,General,2011-08-01 07:58:15.718000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32552,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 09:08:41.227000+02:00 +Internet,case-8263,2011-08-17 01:06:40+02:00,General,2011-08-01 07:58:15.718000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32555,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 09:09:23.789000+02:00 +Internet,case-8264,2011-08-17 01:06:40+02:00,General,2011-07-28 07:33:28.173000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-29792,Confirmation of receipt,complete,Group 1,Resource27,2011-06-27 11:17:25.441000+02:00 +Internet,case-8264,2011-08-17 01:06:40+02:00,General,2011-07-28 07:33:28.173000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-29793,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-14 14:32:01.996000+02:00 +Internet,case-8264,2011-08-17 01:06:40+02:00,General,2011-07-28 07:33:28.173000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32072,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-14 14:32:28.491000+02:00 +Internet,case-8264,2011-08-17 01:06:40+02:00,General,2011-07-28 07:33:28.173000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32073,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-14 14:33:00.223000+02:00 +Internet,case-8264,2011-08-17 01:06:40+02:00,General,2011-07-28 07:33:28.173000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-29794,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-14 14:33:17.387000+02:00 +Internet,case-8264,2011-08-17 01:06:40+02:00,General,2011-07-28 07:33:28.173000+02:00,2011-08-17 01:06:40.020000+02:00,Group 8,Resource11,2011-06-22 01:06:40.020000+02:00,task-32074,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-14 14:33:36.618000+02:00 +Internet,case-8265,2011-08-18 01:06:40+02:00,General,2011-08-01 08:08:24.381000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-29798,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 09:19:32.759000+02:00 +Internet,case-8265,2011-08-18 01:06:40+02:00,General,2011-08-01 08:08:24.381000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-32575,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 09:20:00.751000+02:00 +Internet,case-8265,2011-08-18 01:06:40+02:00,General,2011-08-01 08:08:24.381000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-32578,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 09:20:18.700000+02:00 +Internet,case-8265,2011-08-18 01:06:40+02:00,General,2011-08-01 08:08:24.381000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-32579,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 09:20:35.697000+02:00 +Internet,case-8265,2011-08-18 01:06:40+02:00,General,2011-08-01 08:08:24.381000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-32576,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 09:20:53.838000+02:00 +Internet,case-8265,2011-08-18 01:06:40+02:00,General,2011-08-01 08:08:24.381000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-32581,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 09:21:12.800000+02:00 +Internet,case-8266,2011-08-18 01:06:40+02:00,General,2011-08-01 08:16:20.110000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-29803,Confirmation of receipt,complete,Group 1,Resource27,2011-06-27 11:48:49.676000+02:00 +Internet,case-8266,2011-08-18 01:06:40+02:00,General,2011-08-01 08:16:20.110000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-29804,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 10:02:27.775000+02:00 +Internet,case-8266,2011-08-18 01:06:40+02:00,General,2011-08-01 08:16:20.110000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-32611,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 10:02:53.044000+02:00 +Internet,case-8266,2011-08-18 01:06:40+02:00,General,2011-08-01 08:16:20.110000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-32612,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 10:03:17.624000+02:00 +Internet,case-8266,2011-08-18 01:06:40+02:00,General,2011-08-01 08:16:20.110000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-29805,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 10:03:36.415000+02:00 +Internet,case-8266,2011-08-18 01:06:40+02:00,General,2011-08-01 08:16:20.110000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource11,2011-06-23 01:06:40.020000+02:00,task-32613,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 10:04:36.459000+02:00 +Internet,case-8267,2011-08-18 01:06:40+02:00,Customer contact,2011-06-24 00:00:00.020000+02:00,2011-08-18 01:06:40.020000+02:00,,admin3,2011-06-24 01:06:40.020000+02:00,task-29806,Confirmation of receipt,complete,Group 1,Resource27,2011-06-27 12:06:24.059000+02:00 +Internet,case-8267,2011-08-18 01:06:40+02:00,Customer contact,2011-06-24 00:00:00.020000+02:00,2011-08-18 01:06:40.020000+02:00,,admin3,2011-06-24 01:06:40.020000+02:00,task-29807,T02 Check confirmation of receipt,complete,Group 4,admin2,2011-06-27 12:14:43.992000+02:00 +Internet,case-8267,2011-08-18 01:06:40+02:00,Customer contact,2011-06-24 00:00:00.020000+02:00,2011-08-18 01:06:40.020000+02:00,,admin3,2011-06-24 01:06:40.020000+02:00,task-29808,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-06-27 12:14:44.515000+02:00 +Internet,case-8269,2011-08-18 01:06:40+02:00,General,2011-07-14 09:01:39.196000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource18,2011-06-23 01:06:40.020000+02:00,task-29864,Confirmation of receipt,complete,EMPTY,admin2,2011-07-14 09:01:43.571000+02:00 +Internet,case-8295,2011-08-19 01:06:40+02:00,General,,2011-08-19 01:06:40.020000+02:00,Group 5,Resource14,2011-06-24 01:06:40.020000+02:00,task-29998,Confirmation of receipt,complete,Group 1,Resource27,2011-06-28 11:11:03.646000+02:00 +Internet,case-8295,2011-08-19 01:06:40+02:00,General,,2011-08-19 01:06:40.020000+02:00,Group 5,Resource14,2011-06-24 01:06:40.020000+02:00,task-30015,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-07-11 16:04:14.501000+02:00 +Internet,case-8295,2011-08-19 01:06:40+02:00,General,,2011-08-19 01:06:40.020000+02:00,Group 5,Resource14,2011-06-24 01:06:40.020000+02:00,task-31655,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-07-11 16:04:37.109000+02:00 +Internet,case-8295,2011-08-19 01:06:40+02:00,General,,2011-08-19 01:06:40.020000+02:00,Group 5,Resource14,2011-06-24 01:06:40.020000+02:00,task-31656,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-07-11 16:04:53.646000+02:00 +Internet,case-8295,2011-08-19 01:06:40+02:00,General,,2011-08-19 01:06:40.020000+02:00,Group 5,Resource14,2011-06-24 01:06:40.020000+02:00,task-30016,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-07-11 16:05:11.701000+02:00 +Internet,case-8295,2011-08-19 01:06:40+02:00,General,,2011-08-19 01:06:40.020000+02:00,Group 5,Resource14,2011-06-24 01:06:40.020000+02:00,task-31657,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-07-11 16:05:31.583000+02:00 +Internet,case-8297,2011-10-04 01:06:40+02:00,General,2011-09-26 14:55:43.297000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource04,2011-06-28 01:06:40.020000+02:00,task-30064,Confirmation of receipt,complete,Group 1,Resource18,2011-06-30 14:12:33.519000+02:00 +Internet,case-8297,2011-10-04 01:06:40+02:00,General,2011-09-26 14:55:43.297000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource04,2011-06-28 01:06:40.020000+02:00,task-30500,T02 Check confirmation of receipt,complete,Group 4,Resource18,2011-06-30 14:12:58.302000+02:00 +Internet,case-8297,2011-10-04 01:06:40+02:00,General,2011-09-26 14:55:43.297000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource04,2011-06-28 01:06:40.020000+02:00,task-30502,T04 Determine confirmation of receipt,complete,Group 3,Resource18,2011-06-30 14:13:35.292000+02:00 +Internet,case-8297,2011-10-04 01:06:40+02:00,General,2011-09-26 14:55:43.297000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource04,2011-06-28 01:06:40.020000+02:00,task-30503,T05 Print and send confirmation of receipt,complete,Group 2,Resource18,2011-06-30 14:13:59.316000+02:00 +Internet,case-8297,2011-10-04 01:06:40+02:00,General,2011-09-26 14:55:43.297000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource04,2011-06-28 01:06:40.020000+02:00,task-30501,T06 Determine necessity of stop advice,complete,Group 1,Resource18,2011-07-08 11:11:43.094000+02:00 +Internet,case-8297,2011-10-04 01:06:40+02:00,General,2011-09-26 14:55:43.297000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource04,2011-06-28 01:06:40.020000+02:00,task-31473,T10 Determine necessity to stop indication,complete,Group 1,Resource18,2011-07-08 11:12:16.341000+02:00 +Internet,case-8318,2011-08-04 01:06:40+02:00,General,2011-08-15 15:58:15.067000+02:00,2011-08-04 01:06:40.020000+02:00,Group 5,Resource05,2011-06-09 01:06:40.020000+02:00,task-30279,Confirmation of receipt,complete,Group 1,Resource05,2011-07-04 09:52:56.673000+02:00 +Internet,case-8318,2011-08-04 01:06:40+02:00,General,2011-08-15 15:58:15.067000+02:00,2011-08-04 01:06:40.020000+02:00,Group 5,Resource05,2011-06-09 01:06:40.020000+02:00,task-30665,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-04 09:53:30.669000+02:00 +Internet,case-8318,2011-08-04 01:06:40+02:00,General,2011-08-15 15:58:15.067000+02:00,2011-08-04 01:06:40.020000+02:00,Group 5,Resource05,2011-06-09 01:06:40.020000+02:00,task-30666,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-07-04 09:55:15.654000+02:00 +Internet,case-8318,2011-08-04 01:06:40+02:00,General,2011-08-15 15:58:15.067000+02:00,2011-08-04 01:06:40.020000+02:00,Group 5,Resource05,2011-06-09 01:06:40.020000+02:00,task-30667,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-04 09:55:56.746000+02:00 +Internet,case-8318,2011-08-04 01:06:40+02:00,General,2011-08-15 15:58:15.067000+02:00,2011-08-04 01:06:40.020000+02:00,Group 5,Resource05,2011-06-09 01:06:40.020000+02:00,task-30669,T03 Adjust confirmation of receipt,complete,Group 1,Resource05,2011-07-04 09:57:27.039000+02:00 +Internet,case-8318,2011-08-04 01:06:40+02:00,General,2011-08-15 15:58:15.067000+02:00,2011-08-04 01:06:40.020000+02:00,Group 5,Resource05,2011-06-09 01:06:40.020000+02:00,task-30670,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-04 09:58:05.869000+02:00 +Internet,case-8318,2011-08-04 01:06:40+02:00,General,2011-08-15 15:58:15.067000+02:00,2011-08-04 01:06:40.020000+02:00,Group 5,Resource05,2011-06-09 01:06:40.020000+02:00,task-30668,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-07-04 09:58:36.803000+02:00 +Internet,case-8318,2011-08-04 01:06:40+02:00,General,2011-08-15 15:58:15.067000+02:00,2011-08-04 01:06:40.020000+02:00,Group 5,Resource05,2011-06-09 01:06:40.020000+02:00,task-30671,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-04 10:04:34.230000+02:00 +Internet,case-8318,2011-08-04 01:06:40+02:00,General,2011-08-15 15:58:15.067000+02:00,2011-08-04 01:06:40.020000+02:00,Group 5,Resource05,2011-06-09 01:06:40.020000+02:00,task-30676,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-07-04 10:06:06.290000+02:00 +Internet,case-8320,2011-08-05 01:06:40+02:00,General,2011-09-19 08:51:33.367000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource09,2011-06-10 01:06:40.020000+02:00,task-30289,Confirmation of receipt,complete,EMPTY,Resource09,2011-07-26 09:19:50.943000+02:00 +Internet,case-8320,2011-08-05 01:06:40+02:00,General,2011-09-19 08:51:33.367000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource09,2011-06-10 01:06:40.020000+02:00,task-33440,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-26 14:12:15.038000+02:00 +Internet,case-8320,2011-08-05 01:06:40+02:00,General,2011-09-19 08:51:33.367000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource09,2011-06-10 01:06:40.020000+02:00,task-33439,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-26 14:12:42.401000+02:00 +Internet,case-8320,2011-08-05 01:06:40+02:00,General,2011-09-19 08:51:33.367000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource09,2011-06-10 01:06:40.020000+02:00,task-33499,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-26 14:13:26.300000+02:00 +Internet,case-8320,2011-08-05 01:06:40+02:00,General,2011-09-19 08:51:33.367000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource09,2011-06-10 01:06:40.020000+02:00,task-33500,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-26 14:13:49.912000+02:00 +Internet,case-8320,2011-08-05 01:06:40+02:00,General,2011-09-19 08:51:33.367000+02:00,2011-08-05 01:06:40.020000+02:00,Group 5,Resource09,2011-06-10 01:06:40.020000+02:00,task-33498,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-26 14:14:22.592000+02:00 +Desk,case-8321,2011-08-16 01:06:40+02:00,General,2011-07-27 09:20:19.791000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-30291,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-14 14:52:03.390000+02:00 +Desk,case-8321,2011-08-16 01:06:40+02:00,General,2011-07-27 09:20:19.791000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-32093,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-14 14:52:23.427000+02:00 +Desk,case-8321,2011-08-16 01:06:40+02:00,General,2011-07-27 09:20:19.791000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-32095,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-14 15:00:23.744000+02:00 +Desk,case-8321,2011-08-16 01:06:40+02:00,General,2011-07-27 09:20:19.791000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-32097,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-14 15:01:31.093000+02:00 +Desk,case-8321,2011-08-16 01:06:40+02:00,General,2011-07-27 09:20:19.791000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-32094,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-14 15:02:37.155000+02:00 +Desk,case-8321,2011-08-16 01:06:40+02:00,General,2011-07-27 09:20:19.791000+02:00,2011-08-16 01:06:40.020000+02:00,Group 8,Resource11,2011-06-21 01:06:40.020000+02:00,task-32098,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-14 15:03:52.159000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-30300,Confirmation of receipt,complete,Group 1,Resource05,2011-07-04 12:37:42.658000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-30782,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:31:06.192000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-30781,T02 Check confirmation of receipt,complete,EMPTY,Resource05,2011-08-01 09:46:51.434000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34600,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-08-01 09:47:15.128000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34604,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-01 09:47:40.251000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34606,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-01 09:48:11.577000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34605,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:48:33.074000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34607,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-08-01 09:48:50.433000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34608,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:49:15.388000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34609,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource05,2011-08-01 09:50:21.355000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34611,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:50:36.984000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34612,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource05,2011-08-01 09:51:32.157000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34614,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:52:36.664000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34615,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource05,2011-08-01 09:53:44.758000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34616,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:54:16.734000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34617,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-08-01 09:54:38.139000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34618,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:55:09.509000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34619,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource05,2011-08-01 09:55:34.741000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34620,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:56:10.861000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34621,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource05,2011-08-01 09:56:59.387000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34623,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:57:19.958000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34625,T07-1 Draft intern advice aspect 1,complete,EMPTY,Resource05,2011-08-01 09:58:16.614000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34626,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 09:58:48.159000+02:00 +Internet,case-8323,2011-08-09 01:06:40+02:00,General,2011-08-01 12:51:30.801000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource05,2011-06-14 01:06:40.020000+02:00,task-34627,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-01 10:03:44.585000+02:00 +Internet,case-8342,2011-08-24 01:06:40+02:00,General,2011-07-13 09:48:49.381000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource14,2011-06-29 01:06:40.020000+02:00,task-30386,Confirmation of receipt,complete,Group 1,Resource27,2011-06-30 11:31:44.747000+02:00 +Internet,case-8342,2011-08-24 01:06:40+02:00,General,2011-07-13 09:48:49.381000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource14,2011-06-29 01:06:40.020000+02:00,task-30392,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-07-07 10:57:28.399000+02:00 +Internet,case-8342,2011-08-24 01:06:40+02:00,General,2011-07-13 09:48:49.381000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource14,2011-06-29 01:06:40.020000+02:00,task-31267,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-07-07 10:57:46.754000+02:00 +Internet,case-8342,2011-08-24 01:06:40+02:00,General,2011-07-13 09:48:49.381000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource14,2011-06-29 01:06:40.020000+02:00,task-31268,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-07-07 10:58:03.942000+02:00 +Internet,case-8342,2011-08-24 01:06:40+02:00,General,2011-07-13 09:48:49.381000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource14,2011-06-29 01:06:40.020000+02:00,task-30393,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-07-07 10:58:51.116000+02:00 +Internet,case-8342,2011-08-24 01:06:40+02:00,General,2011-07-13 09:48:49.381000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource14,2011-06-29 01:06:40.020000+02:00,task-31269,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-07-07 10:59:11.436000+02:00 +Internet,case-8344,2011-08-22 01:06:40+02:00,General,2011-08-22 15:03:08.467000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-30434,Confirmation of receipt,complete,Group 1,Resource27,2011-06-30 12:37:49.667000+02:00 +Internet,case-8344,2011-08-22 01:06:40+02:00,General,2011-08-22 15:03:08.467000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-30455,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-05 08:42:24.520000+02:00 +Internet,case-8344,2011-08-22 01:06:40+02:00,General,2011-08-22 15:03:08.467000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-30456,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-07-05 08:42:43.888000+02:00 +Internet,case-8344,2011-08-22 01:06:40+02:00,General,2011-08-22 15:03:08.467000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-30881,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-07-05 08:43:02.634000+02:00 +Internet,case-8344,2011-08-22 01:06:40+02:00,General,2011-08-22 15:03:08.467000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-30880,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-05 08:43:22.152000+02:00 +Internet,case-8344,2011-08-22 01:06:40+02:00,General,2011-08-22 15:03:08.467000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-30883,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-07-05 08:43:41.404000+02:00 +Internet,case-8363,2011-08-22 01:06:40+02:00,General,2011-09-06 10:31:34.113000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-30617,Confirmation of receipt,complete,EMPTY,Resource05,2011-07-05 13:13:13.848000+02:00 +Internet,case-8363,2011-08-22 01:06:40+02:00,General,2011-09-06 10:31:34.113000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-31059,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-05 13:13:47.994000+02:00 +Internet,case-8363,2011-08-22 01:06:40+02:00,General,2011-09-06 10:31:34.113000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-31061,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-05 13:46:54.343000+02:00 +Internet,case-8363,2011-08-22 01:06:40+02:00,General,2011-09-06 10:31:34.113000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-31060,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-07-05 14:23:01.480000+02:00 +Internet,case-8363,2011-08-22 01:06:40+02:00,General,2011-09-06 10:31:34.113000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-31104,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-07-05 14:23:48.103000+02:00 +Internet,case-8363,2011-08-22 01:06:40+02:00,General,2011-09-06 10:31:34.113000+02:00,2011-08-22 01:06:40.020000+02:00,Group 5,Resource05,2011-06-27 01:06:40.020000+02:00,task-31083,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-07-05 14:24:41.540000+02:00 +Internet,case-8365,2011-08-23 01:06:40+02:00,General,2011-08-22 15:30:39.953000+02:00,2011-08-23 01:06:40.020000+02:00,Group 5,Resource05,2011-06-28 01:06:40.020000+02:00,task-30631,Confirmation of receipt,complete,Group 1,Resource05,2011-07-05 12:01:03.447000+02:00 +Internet,case-8365,2011-08-23 01:06:40+02:00,General,2011-08-22 15:30:39.953000+02:00,2011-08-23 01:06:40.020000+02:00,Group 5,Resource05,2011-06-28 01:06:40.020000+02:00,task-31009,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-07-05 12:02:01.664000+02:00 +Internet,case-8365,2011-08-23 01:06:40+02:00,General,2011-08-22 15:30:39.953000+02:00,2011-08-23 01:06:40.020000+02:00,Group 5,Resource05,2011-06-28 01:06:40.020000+02:00,task-31010,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-07-05 12:02:21.068000+02:00 +Internet,case-8365,2011-08-23 01:06:40+02:00,General,2011-08-22 15:30:39.953000+02:00,2011-08-23 01:06:40.020000+02:00,Group 5,Resource05,2011-06-28 01:06:40.020000+02:00,task-31012,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-07-05 12:02:40.491000+02:00 +Internet,case-8365,2011-08-23 01:06:40+02:00,General,2011-08-22 15:30:39.953000+02:00,2011-08-23 01:06:40.020000+02:00,Group 5,Resource05,2011-06-28 01:06:40.020000+02:00,task-31011,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-07-05 12:02:59.624000+02:00 +Internet,case-8365,2011-08-23 01:06:40+02:00,General,2011-08-22 15:30:39.953000+02:00,2011-08-23 01:06:40.020000+02:00,Group 5,Resource05,2011-06-28 01:06:40.020000+02:00,task-31014,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-07-05 12:03:57.199000+02:00 +Internet,case-8367,2011-08-26 01:06:40+02:00,General,2011-09-05 10:52:02.922000+02:00,2011-08-26 01:06:40.020000+02:00,Group 6,Resource29,2011-06-27 01:06:40.020000+02:00,task-30641,Confirmation of receipt,complete,EMPTY,Resource29,2011-07-05 15:40:37.140000+02:00 +Internet,case-8367,2011-08-26 01:06:40+02:00,General,2011-09-05 10:52:02.922000+02:00,2011-08-26 01:06:40.020000+02:00,Group 6,Resource29,2011-06-27 01:06:40.020000+02:00,task-31114,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-07-05 15:41:41.174000+02:00 +Internet,case-8367,2011-08-26 01:06:40+02:00,General,2011-09-05 10:52:02.922000+02:00,2011-08-26 01:06:40.020000+02:00,Group 6,Resource29,2011-06-27 01:06:40.020000+02:00,task-31115,T10 Determine necessity to stop indication,complete,Group 1,Resource29,2011-07-05 15:42:13.576000+02:00 +Internet,case-8367,2011-08-26 01:06:40+02:00,General,2011-09-05 10:52:02.922000+02:00,2011-08-26 01:06:40.020000+02:00,Group 6,Resource29,2011-06-27 01:06:40.020000+02:00,task-31113,T02 Check confirmation of receipt,complete,EMPTY,Resource29,2011-07-05 16:01:22.893000+02:00 +Internet,case-8367,2011-08-26 01:06:40+02:00,General,2011-09-05 10:52:02.922000+02:00,2011-08-26 01:06:40.020000+02:00,Group 6,Resource29,2011-06-27 01:06:40.020000+02:00,task-31126,T04 Determine confirmation of receipt,complete,EMPTY,Resource29,2011-07-05 16:02:36.727000+02:00 +Internet,case-8367,2011-08-26 01:06:40+02:00,General,2011-09-05 10:52:02.922000+02:00,2011-08-26 01:06:40.020000+02:00,Group 6,Resource29,2011-06-27 01:06:40.020000+02:00,task-31127,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-07-15 16:12:52.047000+02:00 +Internet,case-8381,2011-10-06 01:06:40+02:00,General,2011-09-30 14:05:01.438000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-30655,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 09:44:59.104000+02:00 +Internet,case-8381,2011-10-06 01:06:40+02:00,General,2011-09-30 14:05:01.438000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33651,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 09:47:52.724000+02:00 +Internet,case-8381,2011-10-06 01:06:40+02:00,General,2011-09-30 14:05:01.438000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33653,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 09:48:10.881000+02:00 +Internet,case-8381,2011-10-06 01:06:40+02:00,General,2011-09-30 14:05:01.438000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33654,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 09:48:52.032000+02:00 +Internet,case-8381,2011-10-06 01:06:40+02:00,General,2011-09-30 14:05:01.438000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33652,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 09:49:12.271000+02:00 +Internet,case-8381,2011-10-06 01:06:40+02:00,General,2011-09-30 14:05:01.438000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33655,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 09:49:28.938000+02:00 +Internet,case-8385,2011-10-06 01:06:40+02:00,General,2011-09-21 16:08:47.117000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-30777,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 09:55:45.135000+02:00 +Internet,case-8385,2011-10-06 01:06:40+02:00,General,2011-09-21 16:08:47.117000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33663,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 09:56:06.569000+02:00 +Internet,case-8385,2011-10-06 01:06:40+02:00,General,2011-09-21 16:08:47.117000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33665,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 09:56:29.974000+02:00 +Internet,case-8385,2011-10-06 01:06:40+02:00,General,2011-09-21 16:08:47.117000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33666,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 09:56:49.184000+02:00 +Internet,case-8385,2011-10-06 01:06:40+02:00,General,2011-09-21 16:08:47.117000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33664,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 09:57:03.816000+02:00 +Internet,case-8385,2011-10-06 01:06:40+02:00,General,2011-09-21 16:08:47.117000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33668,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 09:57:19.932000+02:00 +Internet,case-8388,2011-10-06 01:06:40+02:00,General,2011-09-30 10:33:31.866000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-30792,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:00:00.473000+02:00 +Internet,case-8388,2011-10-06 01:06:40+02:00,General,2011-09-30 10:33:31.866000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33673,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:00:18.861000+02:00 +Internet,case-8388,2011-10-06 01:06:40+02:00,General,2011-09-30 10:33:31.866000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33676,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:00:40.355000+02:00 +Internet,case-8388,2011-10-06 01:06:40+02:00,General,2011-09-30 10:33:31.866000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33678,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:00:59.259000+02:00 +Internet,case-8388,2011-10-06 01:06:40+02:00,General,2011-09-30 10:33:31.866000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33674,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:01:14.403000+02:00 +Internet,case-8388,2011-10-06 01:06:40+02:00,General,2011-09-30 10:33:31.866000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33680,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:01:36.257000+02:00 +Internet,case-8390,2011-08-24 01:06:40+02:00,General,2011-08-23 16:10:49.238000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource02,2011-05-18 01:06:40.020000+02:00,task-30836,Confirmation of receipt,complete,Group 1,Resource02,2011-07-12 09:23:21.707000+02:00 +Internet,case-8390,2011-08-24 01:06:40+02:00,General,2011-08-23 16:10:49.238000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource02,2011-05-18 01:06:40.020000+02:00,task-31677,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-07-12 09:23:48.664000+02:00 +Internet,case-8390,2011-08-24 01:06:40+02:00,General,2011-08-23 16:10:49.238000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource02,2011-05-18 01:06:40.020000+02:00,task-31679,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-07-12 09:24:32.537000+02:00 +Internet,case-8390,2011-08-24 01:06:40+02:00,General,2011-08-23 16:10:49.238000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource02,2011-05-18 01:06:40.020000+02:00,task-31680,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-07-12 09:24:55.215000+02:00 +Internet,case-8390,2011-08-24 01:06:40+02:00,General,2011-08-23 16:10:49.238000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource02,2011-05-18 01:06:40.020000+02:00,task-31678,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-07-28 14:11:07.460000+02:00 +Internet,case-8390,2011-08-24 01:06:40+02:00,General,2011-08-23 16:10:49.238000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource02,2011-05-18 01:06:40.020000+02:00,task-34100,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-07-28 14:12:41.655000+02:00 +Internet,case-8398,2011-08-24 01:06:40+02:00,General,2011-08-01 08:22:05.095000+02:00,2011-08-24 01:06:40.020000+02:00,Group 8,Resource11,2011-06-29 01:06:40.020000+02:00,task-30924,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 10:54:58.203000+02:00 +Internet,case-8398,2011-08-24 01:06:40+02:00,General,2011-08-01 08:22:05.095000+02:00,2011-08-24 01:06:40.020000+02:00,Group 8,Resource11,2011-06-29 01:06:40.020000+02:00,task-32660,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 10:55:22.959000+02:00 +Internet,case-8398,2011-08-24 01:06:40+02:00,General,2011-08-01 08:22:05.095000+02:00,2011-08-24 01:06:40.020000+02:00,Group 8,Resource11,2011-06-29 01:06:40.020000+02:00,task-32662,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 10:55:40.914000+02:00 +Internet,case-8398,2011-08-24 01:06:40+02:00,General,2011-08-01 08:22:05.095000+02:00,2011-08-24 01:06:40.020000+02:00,Group 8,Resource11,2011-06-29 01:06:40.020000+02:00,task-32663,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 10:55:56.999000+02:00 +Internet,case-8398,2011-08-24 01:06:40+02:00,General,2011-08-01 08:22:05.095000+02:00,2011-08-24 01:06:40.020000+02:00,Group 8,Resource11,2011-06-29 01:06:40.020000+02:00,task-32661,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 10:56:22.428000+02:00 +Internet,case-8398,2011-08-24 01:06:40+02:00,General,2011-08-01 08:22:05.095000+02:00,2011-08-24 01:06:40.020000+02:00,Group 8,Resource11,2011-06-29 01:06:40.020000+02:00,task-32664,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 10:56:40.362000+02:00 +Internet,case-8399,2011-08-25 01:06:40+02:00,General,2011-08-02 07:44:03.231000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-30931,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 11:06:42.119000+02:00 +Internet,case-8399,2011-08-25 01:06:40+02:00,General,2011-08-02 07:44:03.231000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-32680,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 11:08:53.730000+02:00 +Internet,case-8399,2011-08-25 01:06:40+02:00,General,2011-08-02 07:44:03.231000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-32682,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 11:09:17.358000+02:00 +Internet,case-8399,2011-08-25 01:06:40+02:00,General,2011-08-02 07:44:03.231000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-32683,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 11:09:44.644000+02:00 +Internet,case-8399,2011-08-25 01:06:40+02:00,General,2011-08-02 07:44:03.231000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-32681,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 11:10:07.349000+02:00 +Internet,case-8399,2011-08-25 01:06:40+02:00,General,2011-08-02 07:44:03.231000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-32684,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 11:10:24.840000+02:00 +Internet,case-8401,2011-08-25 01:06:40+02:00,General,2011-08-02 07:38:55.391000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-30935,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 11:19:15.585000+02:00 +Internet,case-8401,2011-08-25 01:06:40+02:00,General,2011-08-02 07:38:55.391000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-32697,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 11:19:50.327000+02:00 +Internet,case-8401,2011-08-25 01:06:40+02:00,General,2011-08-02 07:38:55.391000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-32699,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 11:20:32.112000+02:00 +Internet,case-8401,2011-08-25 01:06:40+02:00,General,2011-08-02 07:38:55.391000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-32700,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 11:20:54.274000+02:00 +Internet,case-8401,2011-08-25 01:06:40+02:00,General,2011-08-02 07:38:55.391000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-32698,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 11:21:19.126000+02:00 +Internet,case-8401,2011-08-25 01:06:40+02:00,General,2011-08-02 07:38:55.391000+02:00,2011-08-25 01:06:40.020000+02:00,Group 8,Resource11,2011-06-30 01:06:40.020000+02:00,task-32701,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 11:21:51.284000+02:00 +Internet,case-8403,2011-08-26 01:06:40+02:00,General,2011-08-02 07:33:56.390000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-30945,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 11:36:46.518000+02:00 +Internet,case-8403,2011-08-26 01:06:40+02:00,General,2011-08-02 07:33:56.390000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32720,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 11:37:11.202000+02:00 +Internet,case-8403,2011-08-26 01:06:40+02:00,General,2011-08-02 07:33:56.390000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32724,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 11:37:27.853000+02:00 +Internet,case-8403,2011-08-26 01:06:40+02:00,General,2011-08-02 07:33:56.390000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32725,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 11:37:44.777000+02:00 +Internet,case-8403,2011-08-26 01:06:40+02:00,General,2011-08-02 07:33:56.390000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32721,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 11:38:01.070000+02:00 +Internet,case-8403,2011-08-26 01:06:40+02:00,General,2011-08-02 07:33:56.390000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32726,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 11:38:27.554000+02:00 +Internet,case-8406,2011-08-26 01:06:40+02:00,General,2011-08-03 07:23:49.587000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-30959,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 12:35:02.996000+02:00 +Internet,case-8406,2011-08-26 01:06:40+02:00,General,2011-08-03 07:23:49.587000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32771,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 12:35:39.699000+02:00 +Internet,case-8406,2011-08-26 01:06:40+02:00,General,2011-08-03 07:23:49.587000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32773,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 12:36:28.010000+02:00 +Internet,case-8406,2011-08-26 01:06:40+02:00,General,2011-08-03 07:23:49.587000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32775,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 12:36:46.849000+02:00 +Internet,case-8406,2011-08-26 01:06:40+02:00,General,2011-08-03 07:23:49.587000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32772,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 12:37:03.628000+02:00 +Internet,case-8406,2011-08-26 01:06:40+02:00,General,2011-08-03 07:23:49.587000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32776,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 12:37:26.679000+02:00 +Internet,case-8408,2011-08-30 11:08:46.379000+02:00,General,2011-08-26 15:40:55.950000+02:00,2011-08-30 11:08:46.379000+02:00,Group 5,Resource06,2011-07-05 11:08:46.379000+02:00,task-30962,Confirmation of receipt,complete,Group 1,Resource06,2011-07-05 11:26:14.600000+02:00 +Internet,case-8408,2011-08-30 11:08:46.379000+02:00,General,2011-08-26 15:40:55.950000+02:00,2011-08-30 11:08:46.379000+02:00,Group 5,Resource06,2011-07-05 11:08:46.379000+02:00,task-30984,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-05 11:26:36.256000+02:00 +Internet,case-8408,2011-08-30 11:08:46.379000+02:00,General,2011-08-26 15:40:55.950000+02:00,2011-08-30 11:08:46.379000+02:00,Group 5,Resource06,2011-07-05 11:08:46.379000+02:00,task-30986,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-05 11:26:58.666000+02:00 +Internet,case-8408,2011-08-30 11:08:46.379000+02:00,General,2011-08-26 15:40:55.950000+02:00,2011-08-30 11:08:46.379000+02:00,Group 5,Resource06,2011-07-05 11:08:46.379000+02:00,task-30987,T05 Print and send confirmation of receipt,complete,EMPTY,Resource06,2011-07-05 11:27:33.846000+02:00 +Internet,case-8408,2011-08-30 11:08:46.379000+02:00,General,2011-08-26 15:40:55.950000+02:00,2011-08-30 11:08:46.379000+02:00,Group 5,Resource06,2011-07-05 11:08:46.379000+02:00,task-30985,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-05 11:28:14.194000+02:00 +Internet,case-8408,2011-08-30 11:08:46.379000+02:00,General,2011-08-26 15:40:55.950000+02:00,2011-08-30 11:08:46.379000+02:00,Group 5,Resource06,2011-07-05 11:08:46.379000+02:00,task-30988,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-05 11:28:34.129000+02:00 +Internet,case-8409,2011-08-24 01:06:40+02:00,General,2011-08-24 15:51:35.662000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource13,2011-06-29 01:06:40.020000+02:00,task-30982,Confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 15:06:50.185000+02:00 +Internet,case-8409,2011-08-24 01:06:40+02:00,General,2011-08-24 15:51:35.662000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource13,2011-06-29 01:06:40.020000+02:00,task-34175,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 15:07:26.427000+02:00 +Internet,case-8409,2011-08-24 01:06:40+02:00,General,2011-08-24 15:51:35.662000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource13,2011-06-29 01:06:40.020000+02:00,task-34178,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 15:07:57.837000+02:00 +Internet,case-8409,2011-08-24 01:06:40+02:00,General,2011-08-24 15:51:35.662000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource13,2011-06-29 01:06:40.020000+02:00,task-34180,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 15:08:29.348000+02:00 +Internet,case-8409,2011-08-24 01:06:40+02:00,General,2011-08-24 15:51:35.662000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource13,2011-06-29 01:06:40.020000+02:00,task-34176,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-07-28 15:08:45.589000+02:00 +Internet,case-8409,2011-08-24 01:06:40+02:00,General,2011-08-24 15:51:35.662000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource13,2011-06-29 01:06:40.020000+02:00,task-34182,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-07-28 15:09:01.302000+02:00 +Internet,case-8410,2011-10-06 01:06:40+02:00,General,2011-09-30 11:21:21.336000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource05,2011-06-30 01:06:40.020000+02:00,task-31008,Confirmation of receipt,complete,EMPTY,Resource05,2011-08-01 13:45:15.806000+02:00 +Internet,case-8410,2011-10-06 01:06:40+02:00,General,2011-09-30 11:21:21.336000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource05,2011-06-30 01:06:40.020000+02:00,task-34694,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-08-01 13:48:34.755000+02:00 +Internet,case-8410,2011-10-06 01:06:40+02:00,General,2011-09-30 11:21:21.336000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource05,2011-06-30 01:06:40.020000+02:00,task-34696,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-01 13:49:05.274000+02:00 +Internet,case-8410,2011-10-06 01:06:40+02:00,General,2011-09-30 11:21:21.336000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource05,2011-06-30 01:06:40.020000+02:00,task-34697,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-01 13:49:41.929000+02:00 +Internet,case-8410,2011-10-06 01:06:40+02:00,General,2011-09-30 11:21:21.336000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource05,2011-06-30 01:06:40.020000+02:00,task-34695,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-01 14:06:16.955000+02:00 +Internet,case-8410,2011-10-06 01:06:40+02:00,General,2011-09-30 11:21:21.336000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource05,2011-06-30 01:06:40.020000+02:00,task-34699,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-01 14:07:07.106000+02:00 +Internet,case-8411,2011-10-20 01:06:40+02:00,General,2011-11-16 10:25:18.295000+01:00,2011-08-25 01:06:40.020000+02:00,,admin1,2011-06-30 01:06:40.020000+02:00,task-31082,Confirmation of receipt,complete,EMPTY,Resource09,2011-08-04 13:53:12.097000+02:00 +Internet,case-8411,2011-10-20 01:06:40+02:00,General,2011-11-16 10:25:18.295000+01:00,2011-08-25 01:06:40.020000+02:00,,admin1,2011-06-30 01:06:40.020000+02:00,task-35430,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-08-04 13:53:59.896000+02:00 +Internet,case-8411,2011-10-20 01:06:40+02:00,General,2011-11-16 10:25:18.295000+01:00,2011-08-25 01:06:40.020000+02:00,,admin1,2011-06-30 01:06:40.020000+02:00,task-35429,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-08-04 13:54:28.029000+02:00 +Internet,case-8411,2011-10-20 01:06:40+02:00,General,2011-11-16 10:25:18.295000+01:00,2011-08-25 01:06:40.020000+02:00,,admin1,2011-06-30 01:06:40.020000+02:00,task-35433,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-08-04 13:54:52.007000+02:00 +Internet,case-8411,2011-10-20 01:06:40+02:00,General,2011-11-16 10:25:18.295000+01:00,2011-08-25 01:06:40.020000+02:00,,admin1,2011-06-30 01:06:40.020000+02:00,task-35435,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-08-04 13:55:26.474000+02:00 +Internet,case-8411,2011-10-20 01:06:40+02:00,General,2011-11-16 10:25:18.295000+01:00,2011-08-25 01:06:40.020000+02:00,,admin1,2011-06-30 01:06:40.020000+02:00,task-35432,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-08-04 13:56:07.454000+02:00 +Internet,case-8419,2011-11-22 01:06:40+01:00,General,2011-10-31 15:25:21.985000+01:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource06,2011-06-30 01:06:40.020000+02:00,task-31150,Confirmation of receipt,complete,Group 1,Resource27,2011-07-06 09:08:49.694000+02:00 +Internet,case-8419,2011-11-22 01:06:40+01:00,General,2011-10-31 15:25:21.985000+01:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource06,2011-06-30 01:06:40.020000+02:00,task-31154,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-20 13:05:10.530000+02:00 +Internet,case-8419,2011-11-22 01:06:40+01:00,General,2011-10-31 15:25:21.985000+01:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource06,2011-06-30 01:06:40.020000+02:00,task-31153,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-07-20 13:06:33.579000+02:00 +Internet,case-8419,2011-11-22 01:06:40+01:00,General,2011-10-31 15:25:21.985000+01:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource06,2011-06-30 01:06:40.020000+02:00,task-32827,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-20 13:06:52.610000+02:00 +Internet,case-8419,2011-11-22 01:06:40+01:00,General,2011-10-31 15:25:21.985000+01:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource06,2011-06-30 01:06:40.020000+02:00,task-32828,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-20 13:07:10.411000+02:00 +Internet,case-8419,2011-11-22 01:06:40+01:00,General,2011-10-31 15:25:21.985000+01:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource06,2011-06-30 01:06:40.020000+02:00,task-32824,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-20 13:33:46.681000+02:00 +Internet,case-8420,2011-10-14 01:06:40+02:00,General,2011-10-12 09:57:54.797000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource02,2011-06-28 01:06:40.020000+02:00,task-31151,Confirmation of receipt,complete,EMPTY,Resource02,2011-08-05 12:11:03.200000+02:00 +Internet,case-8420,2011-10-14 01:06:40+02:00,General,2011-10-12 09:57:54.797000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource02,2011-06-28 01:06:40.020000+02:00,task-35540,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-05 12:11:25.952000+02:00 +Internet,case-8420,2011-10-14 01:06:40+02:00,General,2011-10-12 09:57:54.797000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource02,2011-06-28 01:06:40.020000+02:00,task-35542,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-05 12:11:51.285000+02:00 +Internet,case-8420,2011-10-14 01:06:40+02:00,General,2011-10-12 09:57:54.797000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource02,2011-06-28 01:06:40.020000+02:00,task-35543,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-05 12:12:13.690000+02:00 +Internet,case-8420,2011-10-14 01:06:40+02:00,General,2011-10-12 09:57:54.797000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource02,2011-06-28 01:06:40.020000+02:00,task-35541,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-05 12:12:39.133000+02:00 +Internet,case-8420,2011-10-14 01:06:40+02:00,General,2011-10-12 09:57:54.797000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource02,2011-06-28 01:06:40.020000+02:00,task-35544,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-05 12:30:58.130000+02:00 +Internet,case-8421,2011-08-26 01:06:40+02:00,General,2011-08-03 07:28:53.760000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-31155,Confirmation of receipt,complete,Group 1,Resource27,2011-07-06 09:37:38.241000+02:00 +Internet,case-8421,2011-08-26 01:06:40+02:00,General,2011-08-03 07:28:53.760000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-31156,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 12:47:25.863000+02:00 +Internet,case-8421,2011-08-26 01:06:40+02:00,General,2011-08-03 07:28:53.760000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32791,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 12:47:57.432000+02:00 +Internet,case-8421,2011-08-26 01:06:40+02:00,General,2011-08-03 07:28:53.760000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32792,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 12:48:17.097000+02:00 +Internet,case-8421,2011-08-26 01:06:40+02:00,General,2011-08-03 07:28:53.760000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-31157,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 12:48:40.717000+02:00 +Internet,case-8421,2011-08-26 01:06:40+02:00,General,2011-08-03 07:28:53.760000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource11,2011-07-01 01:06:40.020000+02:00,task-32793,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 12:49:04.654000+02:00 +Internet,case-8423,2011-10-22 01:06:40+02:00,General,2011-09-21 10:39:04.742000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource23,2011-06-30 01:06:40.020000+02:00,task-31159,Confirmation of receipt,complete,Group 1,Resource23,2011-07-12 12:20:32.901000+02:00 +Internet,case-8423,2011-10-22 01:06:40+02:00,General,2011-09-21 10:39:04.742000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource23,2011-06-30 01:06:40.020000+02:00,task-31748,T02 Check confirmation of receipt,complete,Group 4,Resource23,2011-07-12 12:21:01.765000+02:00 +Internet,case-8423,2011-10-22 01:06:40+02:00,General,2011-09-21 10:39:04.742000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource23,2011-06-30 01:06:40.020000+02:00,task-31750,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-07-12 12:21:20.010000+02:00 +Internet,case-8423,2011-10-22 01:06:40+02:00,General,2011-09-21 10:39:04.742000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource23,2011-06-30 01:06:40.020000+02:00,task-31751,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-07-12 12:21:45.939000+02:00 +Internet,case-8423,2011-10-22 01:06:40+02:00,General,2011-09-21 10:39:04.742000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource23,2011-06-30 01:06:40.020000+02:00,task-31749,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-07-15 15:49:17.010000+02:00 +Internet,case-8423,2011-10-22 01:06:40+02:00,General,2011-09-21 10:39:04.742000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource23,2011-06-30 01:06:40.020000+02:00,task-32232,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-07-15 15:49:54.225000+02:00 +Internet,case-8424,2011-08-27 01:06:40+02:00,General,2011-09-26 16:47:18.815000+02:00,2011-08-27 01:06:40.020000+02:00,Group 5,Resource12,2011-07-02 01:06:40.020000+02:00,task-31160,Confirmation of receipt,complete,Group 1,Resource27,2011-07-06 09:57:52.606000+02:00 +Internet,case-8424,2011-08-27 01:06:40+02:00,General,2011-09-26 16:47:18.815000+02:00,2011-08-27 01:06:40.020000+02:00,Group 5,Resource12,2011-07-02 01:06:40.020000+02:00,task-31161,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-09-13 10:50:07.301000+02:00 +Internet,case-8424,2011-08-27 01:06:40+02:00,General,2011-09-26 16:47:18.815000+02:00,2011-08-27 01:06:40.020000+02:00,Group 5,Resource12,2011-07-02 01:06:40.020000+02:00,task-38823,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-13 10:53:15.574000+02:00 +Internet,case-8424,2011-08-27 01:06:40+02:00,General,2011-09-26 16:47:18.815000+02:00,2011-08-27 01:06:40.020000+02:00,Group 5,Resource12,2011-07-02 01:06:40.020000+02:00,task-38824,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-13 10:53:49.601000+02:00 +Internet,case-8424,2011-08-27 01:06:40+02:00,General,2011-09-26 16:47:18.815000+02:00,2011-08-27 01:06:40.020000+02:00,Group 5,Resource12,2011-07-02 01:06:40.020000+02:00,task-31162,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-13 10:55:01.244000+02:00 +Internet,case-8424,2011-08-27 01:06:40+02:00,General,2011-09-26 16:47:18.815000+02:00,2011-08-27 01:06:40.020000+02:00,Group 5,Resource12,2011-07-02 01:06:40.020000+02:00,task-38825,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-13 10:55:28.635000+02:00 +Internet,case-8425,2011-08-25 01:06:40+02:00,General,2011-09-05 10:03:36.724000+02:00,2011-08-25 01:06:40.020000+02:00,Group 5,Resource12,2011-06-30 01:06:40.020000+02:00,task-31176,Confirmation of receipt,complete,EMPTY,Resource12,2011-08-29 09:03:12.499000+02:00 +Internet,case-8425,2011-08-25 01:06:40+02:00,General,2011-09-05 10:03:36.724000+02:00,2011-08-25 01:06:40.020000+02:00,Group 5,Resource12,2011-06-30 01:06:40.020000+02:00,task-37287,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-08-29 09:07:19.010000+02:00 +Internet,case-8425,2011-08-25 01:06:40+02:00,General,2011-09-05 10:03:36.724000+02:00,2011-08-25 01:06:40.020000+02:00,Group 5,Resource12,2011-06-30 01:06:40.020000+02:00,task-37289,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-08-29 09:22:43.054000+02:00 +Internet,case-8425,2011-08-25 01:06:40+02:00,General,2011-09-05 10:03:36.724000+02:00,2011-08-25 01:06:40.020000+02:00,Group 5,Resource12,2011-06-30 01:06:40.020000+02:00,task-37290,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-08-29 09:23:20.345000+02:00 +Internet,case-8425,2011-08-25 01:06:40+02:00,General,2011-09-05 10:03:36.724000+02:00,2011-08-25 01:06:40.020000+02:00,Group 5,Resource12,2011-06-30 01:06:40.020000+02:00,task-37288,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-29 09:24:23.319000+02:00 +Internet,case-8425,2011-08-25 01:06:40+02:00,General,2011-09-05 10:03:36.724000+02:00,2011-08-25 01:06:40.020000+02:00,Group 5,Resource12,2011-06-30 01:06:40.020000+02:00,task-37291,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-08-29 09:24:56.983000+02:00 +Desk,case-8427,2011-08-12 01:06:40+02:00,General,2011-07-19 14:05:33.768000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-31178,Confirmation of receipt,complete,Group 1,Resource06,2011-07-12 14:08:38.777000+02:00 +Desk,case-8427,2011-08-12 01:06:40+02:00,General,2011-07-19 14:05:33.768000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-31774,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-12 14:09:00.205000+02:00 +Desk,case-8427,2011-08-12 01:06:40+02:00,General,2011-07-19 14:05:33.768000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-31776,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-12 14:09:17.357000+02:00 +Desk,case-8427,2011-08-12 01:06:40+02:00,General,2011-07-19 14:05:33.768000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-31775,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-12 14:09:47.962000+02:00 +Desk,case-8427,2011-08-12 01:06:40+02:00,General,2011-07-19 14:05:33.768000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-31777,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-12 14:10:04.894000+02:00 +Desk,case-8427,2011-08-12 01:06:40+02:00,General,2011-07-19 14:05:33.768000+02:00,2011-08-12 01:06:40.020000+02:00,Group 5,Resource06,2011-06-17 01:06:40.020000+02:00,task-31778,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-12 14:10:22.196000+02:00 +Internet,case-8441,2011-08-30 01:06:40+02:00,General,2011-07-13 00:00:00.020000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource01,2011-07-05 01:06:40.020000+02:00,task-31314,Confirmation of receipt,complete,Group 1,Resource27,2011-07-07 13:35:43.950000+02:00 +Internet,case-8441,2011-08-30 01:06:40+02:00,General,2011-07-13 00:00:00.020000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource01,2011-07-05 01:06:40.020000+02:00,task-31316,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-07-15 13:45:49.995000+02:00 +Internet,case-8441,2011-08-30 01:06:40+02:00,General,2011-07-13 00:00:00.020000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource01,2011-07-05 01:06:40.020000+02:00,task-31315,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-07-15 13:45:50.767000+02:00 +Internet,case-8442,2011-08-30 01:06:40+02:00,General,2011-08-03 07:35:35.509000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-31318,Confirmation of receipt,complete,Group 1,Resource27,2011-07-07 13:50:59.813000+02:00 +Internet,case-8442,2011-08-30 01:06:40+02:00,General,2011-08-03 07:35:35.509000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-31319,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 13:04:47.791000+02:00 +Internet,case-8442,2011-08-30 01:06:40+02:00,General,2011-08-03 07:35:35.509000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-31320,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 13:05:26.141000+02:00 +Internet,case-8442,2011-08-30 01:06:40+02:00,General,2011-08-03 07:35:35.509000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-32823,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 13:06:04.607000+02:00 +Internet,case-8442,2011-08-30 01:06:40+02:00,General,2011-08-03 07:35:35.509000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-32826,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 13:06:51.894000+02:00 +Internet,case-8442,2011-08-30 01:06:40+02:00,General,2011-08-03 07:35:35.509000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-32825,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 13:08:02.148000+02:00 +Internet,case-8444,2011-09-01 13:59:04.071000+02:00,General,2011-08-04 07:54:02.568000+02:00,2011-09-01 13:59:04.071000+02:00,Group 8,Resource11,2011-07-07 13:59:04.071000+02:00,task-31335,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-20 14:59:59.481000+02:00 +Internet,case-8444,2011-09-01 13:59:04.071000+02:00,General,2011-08-04 07:54:02.568000+02:00,2011-09-01 13:59:04.071000+02:00,Group 8,Resource11,2011-07-07 13:59:04.071000+02:00,task-32884,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-20 15:00:20.302000+02:00 +Internet,case-8444,2011-09-01 13:59:04.071000+02:00,General,2011-08-04 07:54:02.568000+02:00,2011-09-01 13:59:04.071000+02:00,Group 8,Resource11,2011-07-07 13:59:04.071000+02:00,task-32886,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-20 15:01:15.268000+02:00 +Internet,case-8444,2011-09-01 13:59:04.071000+02:00,General,2011-08-04 07:54:02.568000+02:00,2011-09-01 13:59:04.071000+02:00,Group 8,Resource11,2011-07-07 13:59:04.071000+02:00,task-32887,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-20 15:02:10.078000+02:00 +Internet,case-8444,2011-09-01 13:59:04.071000+02:00,General,2011-08-04 07:54:02.568000+02:00,2011-09-01 13:59:04.071000+02:00,Group 8,Resource11,2011-07-07 13:59:04.071000+02:00,task-32885,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-20 15:02:28.259000+02:00 +Internet,case-8444,2011-09-01 13:59:04.071000+02:00,General,2011-08-04 07:54:02.568000+02:00,2011-09-01 13:59:04.071000+02:00,Group 8,Resource11,2011-07-07 13:59:04.071000+02:00,task-32888,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-20 15:02:45.871000+02:00 +Internet,case-8445,2011-09-01 14:19:53.925000+02:00,General,2011-08-04 08:00:49.806000+02:00,2011-09-01 14:19:53.925000+02:00,Group 8,Resource11,2011-07-07 14:19:53.925000+02:00,task-31339,Confirmation of receipt,complete,Group 1,Resource27,2011-07-07 14:23:08.713000+02:00 +Internet,case-8445,2011-09-01 14:19:53.925000+02:00,General,2011-08-04 08:00:49.806000+02:00,2011-09-01 14:19:53.925000+02:00,Group 8,Resource11,2011-07-07 14:19:53.925000+02:00,task-31341,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 13:07:05.491000+02:00 +Internet,case-8445,2011-09-01 14:19:53.925000+02:00,General,2011-08-04 08:00:49.806000+02:00,2011-09-01 14:19:53.925000+02:00,Group 8,Resource11,2011-07-07 14:19:53.925000+02:00,task-33049,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 13:07:45.973000+02:00 +Internet,case-8445,2011-09-01 14:19:53.925000+02:00,General,2011-08-04 08:00:49.806000+02:00,2011-09-01 14:19:53.925000+02:00,Group 8,Resource11,2011-07-07 14:19:53.925000+02:00,task-33050,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 13:08:46.825000+02:00 +Internet,case-8445,2011-09-01 14:19:53.925000+02:00,General,2011-08-04 08:00:49.806000+02:00,2011-09-01 14:19:53.925000+02:00,Group 8,Resource11,2011-07-07 14:19:53.925000+02:00,task-31342,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 13:09:07.022000+02:00 +Internet,case-8445,2011-09-01 14:19:53.925000+02:00,General,2011-08-04 08:00:49.806000+02:00,2011-09-01 14:19:53.925000+02:00,Group 8,Resource11,2011-07-07 14:19:53.925000+02:00,task-33051,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 13:09:39.648000+02:00 +Internet,case-8446,2011-09-01 14:45:13.369000+02:00,General,2011-09-02 15:09:31.995000+02:00,2011-09-01 14:45:13.369000+02:00,Group 5,Resource12,2011-07-07 14:45:13.369000+02:00,task-31344,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-01 12:11:45.413000+02:00 +Internet,case-8446,2011-09-01 14:45:13.369000+02:00,General,2011-09-02 15:09:31.995000+02:00,2011-09-01 14:45:13.369000+02:00,Group 5,Resource12,2011-07-07 14:45:13.369000+02:00,task-37835,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-01 12:14:52.504000+02:00 +Internet,case-8446,2011-09-01 14:45:13.369000+02:00,General,2011-09-02 15:09:31.995000+02:00,2011-09-01 14:45:13.369000+02:00,Group 5,Resource12,2011-07-07 14:45:13.369000+02:00,task-37837,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-01 12:15:34.181000+02:00 +Internet,case-8446,2011-09-01 14:45:13.369000+02:00,General,2011-09-02 15:09:31.995000+02:00,2011-09-01 14:45:13.369000+02:00,Group 5,Resource12,2011-07-07 14:45:13.369000+02:00,task-37838,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-01 12:16:06.942000+02:00 +Internet,case-8446,2011-09-01 14:45:13.369000+02:00,General,2011-09-02 15:09:31.995000+02:00,2011-09-01 14:45:13.369000+02:00,Group 5,Resource12,2011-07-07 14:45:13.369000+02:00,task-37836,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-01 12:16:41.339000+02:00 +Internet,case-8446,2011-09-01 14:45:13.369000+02:00,General,2011-09-02 15:09:31.995000+02:00,2011-09-01 14:45:13.369000+02:00,Group 5,Resource12,2011-07-07 14:45:13.369000+02:00,task-37839,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-01 12:19:10.677000+02:00 +Internet,case-8448,2011-08-30 01:06:40+02:00,General,2011-08-29 12:32:13.621000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-07-05 01:06:40.020000+02:00,task-31346,Confirmation of receipt,complete,Group 1,Resource27,2011-07-07 14:54:49.619000+02:00 +Internet,case-8448,2011-08-30 01:06:40+02:00,General,2011-08-29 12:32:13.621000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-07-05 01:06:40.020000+02:00,task-31349,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 16:11:42.469000+02:00 +Internet,case-8448,2011-08-30 01:06:40+02:00,General,2011-08-29 12:32:13.621000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-07-05 01:06:40.020000+02:00,task-34257,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 16:12:15.589000+02:00 +Internet,case-8448,2011-08-30 01:06:40+02:00,General,2011-08-29 12:32:13.621000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-07-05 01:06:40.020000+02:00,task-34258,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-07-28 16:12:51.763000+02:00 +Internet,case-8448,2011-08-30 01:06:40+02:00,General,2011-08-29 12:32:13.621000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-07-05 01:06:40.020000+02:00,task-31350,T06 Determine necessity of stop advice,complete,EMPTY,Resource13,2011-07-28 16:13:25.795000+02:00 +Internet,case-8448,2011-08-30 01:06:40+02:00,General,2011-08-29 12:32:13.621000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource13,2011-07-05 01:06:40.020000+02:00,task-34259,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-07-28 16:13:45.542000+02:00 +Internet,case-8449,2011-09-01 15:05:36.177000+02:00,General,2011-08-04 08:06:12.876000+02:00,2011-09-01 15:05:36.177000+02:00,Group 8,Resource11,2011-07-07 15:05:36.177000+02:00,task-31354,Confirmation of receipt,complete,Group 1,Resource27,2011-07-07 15:09:02.441000+02:00 +Internet,case-8449,2011-09-01 15:05:36.177000+02:00,General,2011-08-04 08:06:12.876000+02:00,2011-09-01 15:05:36.177000+02:00,Group 8,Resource11,2011-07-07 15:05:36.177000+02:00,task-31355,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 11:04:30.426000+02:00 +Internet,case-8449,2011-09-01 15:05:36.177000+02:00,General,2011-08-04 08:06:12.876000+02:00,2011-09-01 15:05:36.177000+02:00,Group 8,Resource11,2011-07-07 15:05:36.177000+02:00,task-32980,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 11:04:53.620000+02:00 +Internet,case-8449,2011-09-01 15:05:36.177000+02:00,General,2011-08-04 08:06:12.876000+02:00,2011-09-01 15:05:36.177000+02:00,Group 8,Resource11,2011-07-07 15:05:36.177000+02:00,task-32981,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 11:07:30.070000+02:00 +Internet,case-8449,2011-09-01 15:05:36.177000+02:00,General,2011-08-04 08:06:12.876000+02:00,2011-09-01 15:05:36.177000+02:00,Group 8,Resource11,2011-07-07 15:05:36.177000+02:00,task-31356,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 11:20:23.582000+02:00 +Internet,case-8449,2011-09-01 15:05:36.177000+02:00,General,2011-08-04 08:06:12.876000+02:00,2011-09-01 15:05:36.177000+02:00,Group 8,Resource11,2011-07-07 15:05:36.177000+02:00,task-32989,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 12:38:15.452000+02:00 +Internet,case-8456,2011-10-06 01:06:40+02:00,General,2011-09-30 09:29:26.396000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-31388,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:03:42.616000+02:00 +Internet,case-8456,2011-10-06 01:06:40+02:00,General,2011-09-30 09:29:26.396000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33687,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:04:00.870000+02:00 +Internet,case-8456,2011-10-06 01:06:40+02:00,General,2011-09-30 09:29:26.396000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33689,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:04:17.457000+02:00 +Internet,case-8456,2011-10-06 01:06:40+02:00,General,2011-09-30 09:29:26.396000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33690,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:04:36.274000+02:00 +Internet,case-8456,2011-10-06 01:06:40+02:00,General,2011-09-30 09:29:26.396000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33688,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:04:49.535000+02:00 +Internet,case-8456,2011-10-06 01:06:40+02:00,General,2011-09-30 09:29:26.396000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33691,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:05:04.985000+02:00 +Internet,case-8457,2011-10-06 01:06:40+02:00,General,2011-09-21 09:32:53.661000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-31397,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:09:37.142000+02:00 +Internet,case-8457,2011-10-06 01:06:40+02:00,General,2011-09-21 09:32:53.661000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33699,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:09:55.086000+02:00 +Internet,case-8457,2011-10-06 01:06:40+02:00,General,2011-09-21 09:32:53.661000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33701,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:10:11.502000+02:00 +Internet,case-8457,2011-10-06 01:06:40+02:00,General,2011-09-21 09:32:53.661000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33702,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:10:28.680000+02:00 +Internet,case-8457,2011-10-06 01:06:40+02:00,General,2011-09-21 09:32:53.661000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33700,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:10:41.626000+02:00 +Internet,case-8457,2011-10-06 01:06:40+02:00,General,2011-09-21 09:32:53.661000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33703,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:11:00.192000+02:00 +Internet,case-8458,2011-10-06 01:06:40+02:00,General,2011-09-20 11:36:08.106000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-31411,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:13:43.875000+02:00 +Internet,case-8458,2011-10-06 01:06:40+02:00,General,2011-09-20 11:36:08.106000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33707,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:14:03.807000+02:00 +Internet,case-8458,2011-10-06 01:06:40+02:00,General,2011-09-20 11:36:08.106000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33709,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:14:18.365000+02:00 +Internet,case-8458,2011-10-06 01:06:40+02:00,General,2011-09-20 11:36:08.106000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33710,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:14:34.764000+02:00 +Internet,case-8458,2011-10-06 01:06:40+02:00,General,2011-09-20 11:36:08.106000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33708,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:14:50.196000+02:00 +Internet,case-8458,2011-10-06 01:06:40+02:00,General,2011-09-20 11:36:08.106000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33715,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:15:08.678000+02:00 +Internet,case-8459,2011-10-06 01:06:40+02:00,General,2011-09-30 16:45:08.267000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-31412,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:24:57.488000+02:00 +Internet,case-8459,2011-10-06 01:06:40+02:00,General,2011-09-30 16:45:08.267000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33727,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:25:15.529000+02:00 +Internet,case-8459,2011-10-06 01:06:40+02:00,General,2011-09-30 16:45:08.267000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33729,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:25:31.224000+02:00 +Internet,case-8459,2011-10-06 01:06:40+02:00,General,2011-09-30 16:45:08.267000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33730,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:25:47.583000+02:00 +Internet,case-8459,2011-10-06 01:06:40+02:00,General,2011-09-30 16:45:08.267000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33728,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:26:01.983000+02:00 +Internet,case-8459,2011-10-06 01:06:40+02:00,General,2011-09-30 16:45:08.267000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33731,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:26:31.395000+02:00 +Internet,case-8460,2011-10-06 01:06:40+02:00,General,2011-09-30 16:25:55.393000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-31445,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:30:41.918000+02:00 +Internet,case-8460,2011-10-06 01:06:40+02:00,General,2011-09-30 16:25:55.393000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33734,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:30:59.974000+02:00 +Internet,case-8460,2011-10-06 01:06:40+02:00,General,2011-09-30 16:25:55.393000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33736,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:31:17.057000+02:00 +Internet,case-8460,2011-10-06 01:06:40+02:00,General,2011-09-30 16:25:55.393000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33737,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:31:51.392000+02:00 +Internet,case-8460,2011-10-06 01:06:40+02:00,General,2011-09-30 16:25:55.393000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33735,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:32:04.761000+02:00 +Internet,case-8460,2011-10-06 01:06:40+02:00,General,2011-09-30 16:25:55.393000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33738,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:32:21.238000+02:00 +Internet,case-8461,2011-09-27 01:06:40+02:00,General,2011-09-05 12:50:10.453000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-31449,Confirmation of receipt,complete,EMPTY,Resource06,2011-07-29 10:09:43.120000+02:00 +Internet,case-8461,2011-09-27 01:06:40+02:00,General,2011-09-05 12:50:10.453000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-34353,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-29 10:10:09.063000+02:00 +Internet,case-8461,2011-09-27 01:06:40+02:00,General,2011-09-05 12:50:10.453000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-34355,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-29 10:10:27.079000+02:00 +Internet,case-8461,2011-09-27 01:06:40+02:00,General,2011-09-05 12:50:10.453000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-34356,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-29 10:10:46.086000+02:00 +Internet,case-8461,2011-09-27 01:06:40+02:00,General,2011-09-05 12:50:10.453000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-34354,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-29 10:33:10.329000+02:00 +Internet,case-8461,2011-09-27 01:06:40+02:00,General,2011-09-05 12:50:10.453000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-34361,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-29 10:44:04.925000+02:00 +Internet,case-8462,2011-10-06 01:06:40+02:00,General,2011-09-30 16:41:10.569000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-31455,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 10:34:44.315000+02:00 +Internet,case-8462,2011-10-06 01:06:40+02:00,General,2011-09-30 16:41:10.569000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33742,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 10:35:04.614000+02:00 +Internet,case-8462,2011-10-06 01:06:40+02:00,General,2011-09-30 16:41:10.569000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33744,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 10:35:25.095000+02:00 +Internet,case-8462,2011-10-06 01:06:40+02:00,General,2011-09-30 16:41:10.569000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33745,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 10:35:44.918000+02:00 +Internet,case-8462,2011-10-06 01:06:40+02:00,General,2011-09-30 16:41:10.569000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33743,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 10:36:02.570000+02:00 +Internet,case-8462,2011-10-06 01:06:40+02:00,General,2011-09-30 16:41:10.569000+02:00,2011-10-06 01:06:40.020000+02:00,Group 5,Resource04,2011-06-21 01:06:40.020000+02:00,task-33746,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 10:36:19.046000+02:00 +Internet,case-8465,2011-09-01 01:06:40+02:00,General,2011-08-03 07:44:33.808000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-31471,Confirmation of receipt,complete,Group 1,Resource27,2011-07-08 11:12:19.739000+02:00 +Internet,case-8465,2011-09-01 01:06:40+02:00,General,2011-08-03 07:44:33.808000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-31475,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 10:46:40.846000+02:00 +Internet,case-8465,2011-09-01 01:06:40+02:00,General,2011-08-03 07:44:33.808000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-32962,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 10:47:10.490000+02:00 +Internet,case-8465,2011-09-01 01:06:40+02:00,General,2011-08-03 07:44:33.808000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-32963,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 10:47:29.816000+02:00 +Internet,case-8465,2011-09-01 01:06:40+02:00,General,2011-08-03 07:44:33.808000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-31476,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 10:47:46.359000+02:00 +Internet,case-8465,2011-09-01 01:06:40+02:00,General,2011-08-03 07:44:33.808000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-32964,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 10:50:14.484000+02:00 +Internet,case-8467,2011-09-01 01:06:40+02:00,General,2011-09-26 16:08:33.468000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-31484,Confirmation of receipt,complete,Group 1,Resource27,2011-07-08 11:30:34.380000+02:00 +Internet,case-8467,2011-09-01 01:06:40+02:00,General,2011-09-26 16:08:33.468000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-31487,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-07-26 20:00:45.469000+02:00 +Internet,case-8467,2011-09-01 01:06:40+02:00,General,2011-09-26 16:08:33.468000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-33593,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-07-26 20:01:11.635000+02:00 +Internet,case-8467,2011-09-01 01:06:40+02:00,General,2011-09-26 16:08:33.468000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-33594,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-07-26 20:01:37.713000+02:00 +Internet,case-8467,2011-09-01 01:06:40+02:00,General,2011-09-26 16:08:33.468000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-31488,T06 Determine necessity of stop advice,complete,EMPTY,Resource13,2011-07-26 20:02:08.050000+02:00 +Internet,case-8467,2011-09-01 01:06:40+02:00,General,2011-09-26 16:08:33.468000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-33595,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-07-26 20:02:28.364000+02:00 +Internet,case-8469,2011-09-02 01:06:40+02:00,General,2011-08-04 08:13:39.644000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31493,Confirmation of receipt,complete,Group 1,Resource27,2011-07-08 12:02:36.640000+02:00 +Internet,case-8469,2011-09-02 01:06:40+02:00,General,2011-08-04 08:13:39.644000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31494,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 13:24:41.990000+02:00 +Internet,case-8469,2011-09-02 01:06:40+02:00,General,2011-08-04 08:13:39.644000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33064,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 13:25:22.779000+02:00 +Internet,case-8469,2011-09-02 01:06:40+02:00,General,2011-08-04 08:13:39.644000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33065,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 13:25:43.159000+02:00 +Internet,case-8469,2011-09-02 01:06:40+02:00,General,2011-08-04 08:13:39.644000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31495,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 13:26:00.381000+02:00 +Internet,case-8469,2011-09-02 01:06:40+02:00,General,2011-08-04 08:13:39.644000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33066,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 13:26:19.755000+02:00 +Internet,case-8495,2011-09-03 01:06:40+02:00,General,2011-08-12 00:00:00.020000+02:00,2011-09-03 01:06:40.020000+02:00,Group 5,Resource14,2011-07-09 01:06:40.020000+02:00,task-31546,Confirmation of receipt,complete,EMPTY,admin2,2011-08-15 08:56:22.507000+02:00 +Internet,case-8500,2011-09-02 01:06:40+02:00,General,2011-08-04 08:42:11.097000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31567,Confirmation of receipt,complete,Group 1,Resource27,2011-07-11 11:39:25.745000+02:00 +Internet,case-8500,2011-09-02 01:06:40+02:00,General,2011-08-04 08:42:11.097000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31568,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 13:38:10.924000+02:00 +Internet,case-8500,2011-09-02 01:06:40+02:00,General,2011-08-04 08:42:11.097000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33081,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 13:38:28.138000+02:00 +Internet,case-8500,2011-09-02 01:06:40+02:00,General,2011-08-04 08:42:11.097000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33082,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 13:38:50.370000+02:00 +Internet,case-8500,2011-09-02 01:06:40+02:00,General,2011-08-04 08:42:11.097000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31569,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 13:39:26.770000+02:00 +Internet,case-8500,2011-09-02 01:06:40+02:00,General,2011-08-04 08:42:11.097000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33083,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 13:50:42.534000+02:00 +Internet,case-8501,2011-09-02 01:06:40+02:00,General,2011-08-04 08:49:44.997000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31572,Confirmation of receipt,complete,Group 1,Resource27,2011-07-11 11:49:05.918000+02:00 +Internet,case-8501,2011-09-02 01:06:40+02:00,General,2011-08-04 08:49:44.997000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31573,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 14:07:02.283000+02:00 +Internet,case-8501,2011-09-02 01:06:40+02:00,General,2011-08-04 08:49:44.997000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33095,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 14:07:29.612000+02:00 +Internet,case-8501,2011-09-02 01:06:40+02:00,General,2011-08-04 08:49:44.997000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33096,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 14:07:46.858000+02:00 +Internet,case-8501,2011-09-02 01:06:40+02:00,General,2011-08-04 08:49:44.997000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31574,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 14:10:32.812000+02:00 +Internet,case-8501,2011-09-02 01:06:40+02:00,General,2011-08-04 08:49:44.997000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33097,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 14:10:54.479000+02:00 +Internet,case-8502,2011-09-02 01:06:40+02:00,General,2011-08-04 08:54:16.463000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31575,Confirmation of receipt,complete,Group 1,Resource27,2011-07-11 11:59:09.881000+02:00 +Internet,case-8502,2011-09-02 01:06:40+02:00,General,2011-08-04 08:54:16.463000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31576,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-21 14:47:42.233000+02:00 +Internet,case-8502,2011-09-02 01:06:40+02:00,General,2011-08-04 08:54:16.463000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33115,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 14:48:15.617000+02:00 +Internet,case-8502,2011-09-02 01:06:40+02:00,General,2011-08-04 08:54:16.463000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33116,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 14:49:02.269000+02:00 +Internet,case-8502,2011-09-02 01:06:40+02:00,General,2011-08-04 08:54:16.463000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-31577,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 14:50:47.836000+02:00 +Internet,case-8502,2011-09-02 01:06:40+02:00,General,2011-08-04 08:54:16.463000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource11,2011-07-08 01:06:40.020000+02:00,task-33117,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 14:51:46.365000+02:00 +Internet,case-8503,2011-09-01 01:06:40+02:00,General,2011-08-10 16:05:07.760000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource02,2011-07-07 01:06:40.020000+02:00,task-31589,Confirmation of receipt,complete,EMPTY,Resource02,2011-08-08 11:14:55.636000+02:00 +Internet,case-8503,2011-09-01 01:06:40+02:00,General,2011-08-10 16:05:07.760000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource02,2011-07-07 01:06:40.020000+02:00,task-35621,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-08 11:15:26.784000+02:00 +Internet,case-8503,2011-09-01 01:06:40+02:00,General,2011-08-10 16:05:07.760000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource02,2011-07-07 01:06:40.020000+02:00,task-35623,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-08 11:16:18.899000+02:00 +Internet,case-8503,2011-09-01 01:06:40+02:00,General,2011-08-10 16:05:07.760000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource02,2011-07-07 01:06:40.020000+02:00,task-35624,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-08 11:16:40.016000+02:00 +Internet,case-8503,2011-09-01 01:06:40+02:00,General,2011-08-10 16:05:07.760000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource02,2011-07-07 01:06:40.020000+02:00,task-35622,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-08 11:16:58.950000+02:00 +Internet,case-8503,2011-09-01 01:06:40+02:00,General,2011-08-10 16:05:07.760000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource02,2011-07-07 01:06:40.020000+02:00,task-35625,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-08 11:17:17.463000+02:00 +Internet,case-8504,2011-09-01 01:06:40+02:00,General,2011-10-04 10:35:33.466000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-31610,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-26 12:38:48.188000+02:00 +Internet,case-8504,2011-09-01 01:06:40+02:00,General,2011-10-04 10:35:33.466000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-40418,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-26 12:39:15.033000+02:00 +Internet,case-8504,2011-09-01 01:06:40+02:00,General,2011-10-04 10:35:33.466000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-40420,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-26 12:39:44.674000+02:00 +Internet,case-8504,2011-09-01 01:06:40+02:00,General,2011-10-04 10:35:33.466000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-40421,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-26 12:40:08.451000+02:00 +Internet,case-8504,2011-09-01 01:06:40+02:00,General,2011-10-04 10:35:33.466000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-40419,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-26 12:41:18.891000+02:00 +Internet,case-8504,2011-09-01 01:06:40+02:00,General,2011-10-04 10:35:33.466000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-40422,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-26 12:41:40.851000+02:00 +Internet,case-8505,2011-09-01 01:06:40+02:00,General,2011-10-04 10:54:58.673000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-31611,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-26 14:19:20.926000+02:00 +Internet,case-8505,2011-09-01 01:06:40+02:00,General,2011-10-04 10:54:58.673000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-40464,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-26 14:20:01.321000+02:00 +Internet,case-8505,2011-09-01 01:06:40+02:00,General,2011-10-04 10:54:58.673000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-40466,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-26 14:20:25.975000+02:00 +Internet,case-8505,2011-09-01 01:06:40+02:00,General,2011-10-04 10:54:58.673000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-40467,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-26 14:21:01.246000+02:00 +Internet,case-8505,2011-09-01 01:06:40+02:00,General,2011-10-04 10:54:58.673000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-40465,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-26 14:21:43.272000+02:00 +Internet,case-8505,2011-09-01 01:06:40+02:00,General,2011-10-04 10:54:58.673000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource12,2011-07-07 01:06:40.020000+02:00,task-40468,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-26 14:24:52.081000+02:00 +Internet,case-8507,2011-09-05 13:50:18.729000+02:00,General,2011-08-29 13:41:34.539000+02:00,2011-09-05 13:50:18.729000+02:00,Group 5,Resource12,2011-07-11 13:53:24.202000+02:00,task-31617,Confirmation of receipt,complete,EMPTY,Resource12,2011-08-04 12:05:37.629000+02:00 +Internet,case-8507,2011-09-05 13:50:18.729000+02:00,General,2011-08-29 13:41:34.539000+02:00,2011-09-05 13:50:18.729000+02:00,Group 5,Resource12,2011-07-11 13:53:24.202000+02:00,task-35372,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-08-04 12:06:26.685000+02:00 +Internet,case-8507,2011-09-05 13:50:18.729000+02:00,General,2011-08-29 13:41:34.539000+02:00,2011-09-05 13:50:18.729000+02:00,Group 5,Resource12,2011-07-11 13:53:24.202000+02:00,task-35374,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-08-04 12:06:58.959000+02:00 +Internet,case-8507,2011-09-05 13:50:18.729000+02:00,General,2011-08-29 13:41:34.539000+02:00,2011-09-05 13:50:18.729000+02:00,Group 5,Resource12,2011-07-11 13:53:24.202000+02:00,task-35375,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-08-04 12:07:35.588000+02:00 +Internet,case-8507,2011-09-05 13:50:18.729000+02:00,General,2011-08-29 13:41:34.539000+02:00,2011-09-05 13:50:18.729000+02:00,Group 5,Resource12,2011-07-11 13:53:24.202000+02:00,task-35373,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-04 12:16:02.819000+02:00 +Internet,case-8507,2011-09-05 13:50:18.729000+02:00,General,2011-08-29 13:41:34.539000+02:00,2011-09-05 13:50:18.729000+02:00,Group 5,Resource12,2011-07-11 13:53:24.202000+02:00,task-35380,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-08-04 12:17:15.011000+02:00 +Internet,case-8511,2011-10-14 01:06:40+02:00,General,2011-10-11 13:55:52.280000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource22,2011-07-08 01:06:40.020000+02:00,task-31637,Confirmation of receipt,complete,EMPTY,Resource22,2011-07-20 11:36:49.743000+02:00 +Internet,case-8511,2011-10-14 01:06:40+02:00,General,2011-10-11 13:55:52.280000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource22,2011-07-08 01:06:40.020000+02:00,task-32722,T02 Check confirmation of receipt,complete,EMPTY,Resource22,2011-07-20 11:38:05.999000+02:00 +Internet,case-8511,2011-10-14 01:06:40+02:00,General,2011-10-11 13:55:52.280000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource22,2011-07-08 01:06:40.020000+02:00,task-32727,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-07-20 11:38:43.145000+02:00 +Internet,case-8511,2011-10-14 01:06:40+02:00,General,2011-10-11 13:55:52.280000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource22,2011-07-08 01:06:40.020000+02:00,task-32729,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-07-20 11:39:18.104000+02:00 +Internet,case-8511,2011-10-14 01:06:40+02:00,General,2011-10-11 13:55:52.280000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource22,2011-07-08 01:06:40.020000+02:00,task-32723,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-07-20 11:41:01.552000+02:00 +Internet,case-8511,2011-10-14 01:06:40+02:00,General,2011-10-11 13:55:52.280000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource22,2011-07-08 01:06:40.020000+02:00,task-32736,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-07-20 11:42:01.398000+02:00 +Internet,case-8522,2011-09-02 01:06:40+02:00,General,2011-10-14 11:57:22.270000+02:00,2011-09-02 01:06:40.020000+02:00,Group 5,Resource09,2011-07-08 01:06:40.020000+02:00,task-31691,Confirmation of receipt,complete,EMPTY,Resource09,2011-07-27 09:53:04.511000+02:00 +Internet,case-8522,2011-09-02 01:06:40+02:00,General,2011-10-14 11:57:22.270000+02:00,2011-09-02 01:06:40.020000+02:00,Group 5,Resource09,2011-07-08 01:06:40.020000+02:00,task-33657,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-27 09:53:50.931000+02:00 +Internet,case-8522,2011-09-02 01:06:40+02:00,General,2011-10-14 11:57:22.270000+02:00,2011-09-02 01:06:40.020000+02:00,Group 5,Resource09,2011-07-08 01:06:40.020000+02:00,task-33658,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-27 09:54:59.441000+02:00 +Internet,case-8522,2011-09-02 01:06:40+02:00,General,2011-10-14 11:57:22.270000+02:00,2011-09-02 01:06:40.020000+02:00,Group 5,Resource09,2011-07-08 01:06:40.020000+02:00,task-33659,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-27 09:55:27.690000+02:00 +Internet,case-8522,2011-09-02 01:06:40+02:00,General,2011-10-14 11:57:22.270000+02:00,2011-09-02 01:06:40.020000+02:00,Group 5,Resource09,2011-07-08 01:06:40.020000+02:00,task-33662,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-27 09:55:57.805000+02:00 +Internet,case-8522,2011-09-02 01:06:40+02:00,General,2011-10-14 11:57:22.270000+02:00,2011-09-02 01:06:40.020000+02:00,Group 5,Resource09,2011-07-08 01:06:40.020000+02:00,task-33661,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-27 09:56:43.519000+02:00 +Internet,case-8550,2011-09-06 01:06:40+02:00,General,2011-09-30 09:05:15.234000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource22,2011-07-12 01:06:40.020000+02:00,task-31895,Confirmation of receipt,complete,Group 1,Resource27,2011-07-13 10:50:42.053000+02:00 +Internet,case-8550,2011-09-06 01:06:40+02:00,General,2011-09-30 09:05:15.234000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource22,2011-07-12 01:06:40.020000+02:00,task-31898,T02 Check confirmation of receipt,complete,EMPTY,Resource22,2011-09-23 11:27:41.537000+02:00 +Internet,case-8550,2011-09-06 01:06:40+02:00,General,2011-09-30 09:05:15.234000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource22,2011-07-12 01:06:40.020000+02:00,task-40061,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-09-23 11:28:22.149000+02:00 +Internet,case-8550,2011-09-06 01:06:40+02:00,General,2011-09-30 09:05:15.234000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource22,2011-07-12 01:06:40.020000+02:00,task-40062,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-09-23 11:30:00.495000+02:00 +Internet,case-8550,2011-09-06 01:06:40+02:00,General,2011-09-30 09:05:15.234000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource22,2011-07-12 01:06:40.020000+02:00,task-31899,T06 Determine necessity of stop advice,complete,EMPTY,Resource22,2011-09-23 11:30:38.375000+02:00 +Internet,case-8550,2011-09-06 01:06:40+02:00,General,2011-09-30 09:05:15.234000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource22,2011-07-12 01:06:40.020000+02:00,task-40063,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-09-23 11:31:25.937000+02:00 +Internet,case-8551,2011-09-06 01:06:40+02:00,General,2011-08-30 11:57:35.095000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-31909,Confirmation of receipt,complete,Group 1,Resource27,2011-07-13 11:12:19.592000+02:00 +Internet,case-8551,2011-09-06 01:06:40+02:00,General,2011-08-30 11:57:35.095000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-31910,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-08-09 11:29:27.408000+02:00 +Internet,case-8551,2011-09-06 01:06:40+02:00,General,2011-08-30 11:57:35.095000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-35906,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-09 11:29:49.894000+02:00 +Internet,case-8551,2011-09-06 01:06:40+02:00,General,2011-08-30 11:57:35.095000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-35907,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-09 11:30:08.340000+02:00 +Internet,case-8551,2011-09-06 01:06:40+02:00,General,2011-08-30 11:57:35.095000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-31911,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-09 11:32:01.558000+02:00 +Internet,case-8551,2011-09-06 01:06:40+02:00,General,2011-08-30 11:57:35.095000+02:00,2011-09-06 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-35908,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-09 11:33:49.690000+02:00 +e-mail,case-8560,2011-08-31 01:06:40+02:00,General,2011-10-12 16:40:30.274000+02:00,2011-08-31 01:06:40.020000+02:00,Group 11,Resource25,2011-07-06 01:06:40.020000+02:00,task-31953,Confirmation of receipt,complete,EMPTY,Resource09,2011-10-12 10:48:22.500000+02:00 +e-mail,case-8560,2011-08-31 01:06:40+02:00,General,2011-10-12 16:40:30.274000+02:00,2011-08-31 01:06:40.020000+02:00,Group 11,Resource25,2011-07-06 01:06:40.020000+02:00,task-43003,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-12 11:17:12.857000+02:00 +e-mail,case-8560,2011-08-31 01:06:40+02:00,General,2011-10-12 16:40:30.274000+02:00,2011-08-31 01:06:40.020000+02:00,Group 11,Resource25,2011-07-06 01:06:40.020000+02:00,task-43002,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-10-12 11:18:25.528000+02:00 +e-mail,case-8560,2011-08-31 01:06:40+02:00,General,2011-10-12 16:40:30.274000+02:00,2011-08-31 01:06:40.020000+02:00,Group 11,Resource25,2011-07-06 01:06:40.020000+02:00,task-43017,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-10-12 11:20:02.737000+02:00 +e-mail,case-8560,2011-08-31 01:06:40+02:00,General,2011-10-12 16:40:30.274000+02:00,2011-08-31 01:06:40.020000+02:00,Group 11,Resource25,2011-07-06 01:06:40.020000+02:00,task-43019,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-10-12 11:20:24.196000+02:00 +e-mail,case-8560,2011-08-31 01:06:40+02:00,General,2011-10-12 16:40:30.274000+02:00,2011-08-31 01:06:40.020000+02:00,Group 11,Resource25,2011-07-06 01:06:40.020000+02:00,task-43015,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-12 11:23:06.342000+02:00 +Internet,case-8639,2011-09-07 01:06:40+02:00,General,2011-08-04 08:59:29.552000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-32296,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 10:56:56.180000+02:00 +Internet,case-8639,2011-09-07 01:06:40+02:00,General,2011-08-04 08:59:29.552000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-32297,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-21 15:19:42.665000+02:00 +Internet,case-8639,2011-09-07 01:06:40+02:00,General,2011-08-04 08:59:29.552000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-33138,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-21 15:20:40.509000+02:00 +Internet,case-8639,2011-09-07 01:06:40+02:00,General,2011-08-04 08:59:29.552000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-33139,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-21 15:21:06.664000+02:00 +Internet,case-8639,2011-09-07 01:06:40+02:00,General,2011-08-04 08:59:29.552000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-32298,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-21 15:21:28.167000+02:00 +Internet,case-8639,2011-09-07 01:06:40+02:00,General,2011-08-04 08:59:29.552000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-33140,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-21 15:21:47.196000+02:00 +Internet,case-8642,2011-09-07 01:06:40+02:00,General,2011-09-30 14:31:28.812000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-32308,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 11:24:55.234000+02:00 +Internet,case-8642,2011-09-07 01:06:40+02:00,General,2011-09-30 14:31:28.812000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-32311,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-22 14:06:51.143000+02:00 +Internet,case-8642,2011-09-07 01:06:40+02:00,General,2011-09-30 14:31:28.812000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-33233,T03 Adjust confirmation of receipt,complete,Group 1,Resource01,2011-07-22 14:07:09.996000+02:00 +Internet,case-8642,2011-09-07 01:06:40+02:00,General,2011-09-30 14:31:28.812000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-33234,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-22 14:09:16.354000+02:00 +Internet,case-8642,2011-09-07 01:06:40+02:00,General,2011-09-30 14:31:28.812000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-33235,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-22 14:18:48.492000+02:00 +Internet,case-8642,2011-09-07 01:06:40+02:00,General,2011-09-30 14:31:28.812000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-33236,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-22 14:19:13.582000+02:00 +Internet,case-8642,2011-09-07 01:06:40+02:00,General,2011-09-30 14:31:28.812000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-32312,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 11:46:27.552000+02:00 +Internet,case-8642,2011-09-07 01:06:40+02:00,General,2011-09-30 14:31:28.812000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-34019,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 13:34:08.093000+02:00 +Internet,case-8645,2011-09-07 01:06:40+02:00,General,2011-08-09 08:29:57.963000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-32314,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 11:41:38.077000+02:00 +Internet,case-8645,2011-09-07 01:06:40+02:00,General,2011-08-09 08:29:57.963000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-32315,T02 Check confirmation of receipt,complete,EMPTY,Resource16,2011-07-28 09:00:53.461000+02:00 +Internet,case-8645,2011-09-07 01:06:40+02:00,General,2011-08-09 08:29:57.963000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-33888,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-07-28 09:01:22.840000+02:00 +Internet,case-8645,2011-09-07 01:06:40+02:00,General,2011-08-09 08:29:57.963000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-33889,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-07-28 09:02:02.882000+02:00 +Internet,case-8645,2011-09-07 01:06:40+02:00,General,2011-08-09 08:29:57.963000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-32316,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-07-28 09:02:28.361000+02:00 +Internet,case-8645,2011-09-07 01:06:40+02:00,General,2011-08-09 08:29:57.963000+02:00,2011-09-07 01:06:40.020000+02:00,Group 8,Resource11,2011-07-13 01:06:40.020000+02:00,task-33893,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-07-28 09:03:19.430000+02:00 +Internet,case-8646,2011-10-19 01:06:40+02:00,General,2011-10-04 15:20:59.123000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource06,2011-07-13 01:06:40.020000+02:00,task-32317,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 12:01:13.168000+02:00 +Internet,case-8646,2011-10-19 01:06:40+02:00,General,2011-10-04 15:20:59.123000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource06,2011-07-13 01:06:40.020000+02:00,task-32319,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-08-31 10:12:16.817000+02:00 +Internet,case-8646,2011-10-19 01:06:40+02:00,General,2011-10-04 15:20:59.123000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource06,2011-07-13 01:06:40.020000+02:00,task-37595,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-31 10:12:32.952000+02:00 +Internet,case-8646,2011-10-19 01:06:40+02:00,General,2011-10-04 15:20:59.123000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource06,2011-07-13 01:06:40.020000+02:00,task-37596,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-31 10:12:49.244000+02:00 +Internet,case-8646,2011-10-19 01:06:40+02:00,General,2011-10-04 15:20:59.123000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource06,2011-07-13 01:06:40.020000+02:00,task-32320,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-31 10:13:31.537000+02:00 +Internet,case-8646,2011-10-19 01:06:40+02:00,General,2011-10-04 15:20:59.123000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource06,2011-07-13 01:06:40.020000+02:00,task-37597,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-31 10:14:25.146000+02:00 +Internet,case-8650,2011-09-08 01:06:40+02:00,General,2011-07-21 13:58:54.784000+02:00,2011-09-08 01:06:40.020000+02:00,Group 8,Resource01,2011-07-14 01:06:40.020000+02:00,task-32330,Confirmation of receipt,complete,Group 1,admin2,2011-07-21 13:58:55.760000+02:00 +Internet,case-8652,2011-09-09 01:06:40+02:00,General,2011-08-09 08:39:45.323000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-32338,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 14:09:48.466000+02:00 +Internet,case-8652,2011-09-09 01:06:40+02:00,General,2011-08-09 08:39:45.323000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-32339,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 08:41:00.151000+02:00 +Internet,case-8652,2011-09-09 01:06:40+02:00,General,2011-08-09 08:39:45.323000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-33864,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 08:41:17.114000+02:00 +Internet,case-8652,2011-09-09 01:06:40+02:00,General,2011-08-09 08:39:45.323000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-33865,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 08:41:34.948000+02:00 +Internet,case-8652,2011-09-09 01:06:40+02:00,General,2011-08-09 08:39:45.323000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-32340,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 08:42:04.881000+02:00 +Internet,case-8652,2011-09-09 01:06:40+02:00,General,2011-08-09 08:39:45.323000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-33866,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 08:42:23.055000+02:00 +Internet,case-8653,2011-10-21 01:06:40+02:00,General,2011-10-24 14:09:10.905000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-07-15 01:06:40.020000+02:00,task-32345,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 14:20:30.486000+02:00 +Internet,case-8653,2011-10-21 01:06:40+02:00,General,2011-10-24 14:09:10.905000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-07-15 01:06:40.020000+02:00,task-32346,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-08-31 12:46:08.372000+02:00 +Internet,case-8653,2011-10-21 01:06:40+02:00,General,2011-10-24 14:09:10.905000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-07-15 01:06:40.020000+02:00,task-37661,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-31 12:46:24.009000+02:00 +Internet,case-8653,2011-10-21 01:06:40+02:00,General,2011-10-24 14:09:10.905000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-07-15 01:06:40.020000+02:00,task-37662,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-31 12:46:40.190000+02:00 +Internet,case-8653,2011-10-21 01:06:40+02:00,General,2011-10-24 14:09:10.905000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-07-15 01:06:40.020000+02:00,task-32347,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-31 12:46:55.291000+02:00 +Internet,case-8653,2011-10-21 01:06:40+02:00,General,2011-10-24 14:09:10.905000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-07-15 01:06:40.020000+02:00,task-37663,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-31 12:47:15.537000+02:00 +Internet,case-8654,2011-09-09 01:06:40+02:00,General,2011-08-09 08:53:03.538000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-32352,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 14:30:04.073000+02:00 +Internet,case-8654,2011-09-09 01:06:40+02:00,General,2011-08-09 08:53:03.538000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-32353,T02 Check confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 14:33:02.368000+02:00 +Internet,case-8654,2011-09-09 01:06:40+02:00,General,2011-08-09 08:53:03.538000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-34132,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 14:33:33.339000+02:00 +Internet,case-8654,2011-09-09 01:06:40+02:00,General,2011-08-09 08:53:03.538000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-34133,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 14:35:00.444000+02:00 +Internet,case-8654,2011-09-09 01:06:40+02:00,General,2011-08-09 08:53:03.538000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-32354,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 14:35:45.363000+02:00 +Internet,case-8654,2011-09-09 01:06:40+02:00,General,2011-08-09 08:53:03.538000+02:00,2011-09-09 01:06:40.020000+02:00,Group 8,Resource11,2011-07-15 01:06:40.020000+02:00,task-34134,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 14:37:46.041000+02:00 +Internet,case-8656,2011-09-11 01:06:40+02:00,General,2011-09-09 00:00:00.020000+02:00,2011-09-11 01:06:40.020000+02:00,Group 5,Resource12,2011-07-17 01:06:40.020000+02:00,task-32359,Confirmation of receipt,complete,Group 1,Resource27,2011-07-18 14:40:34.291000+02:00 +Internet,case-8656,2011-09-11 01:06:40+02:00,General,2011-09-09 00:00:00.020000+02:00,2011-09-11 01:06:40.020000+02:00,Group 5,Resource12,2011-07-17 01:06:40.020000+02:00,task-32361,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-09-23 15:21:07.212000+02:00 +Internet,case-8656,2011-09-11 01:06:40+02:00,General,2011-09-09 00:00:00.020000+02:00,2011-09-11 01:06:40.020000+02:00,Group 5,Resource12,2011-07-17 01:06:40.020000+02:00,task-32362,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-09-23 15:21:07.801000+02:00 +Internet,case-8663,2011-10-21 01:06:40+02:00,General,2011-10-04 15:53:09.142000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource13,2011-07-15 01:06:40.020000+02:00,task-32401,Confirmation of receipt,complete,Group 1,Resource27,2011-07-19 08:40:38.469000+02:00 +Internet,case-8663,2011-10-21 01:06:40+02:00,General,2011-10-04 15:53:09.142000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource13,2011-07-15 01:06:40.020000+02:00,task-32402,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-07-22 12:21:59.107000+02:00 +Internet,case-8663,2011-10-21 01:06:40+02:00,General,2011-10-04 15:53:09.142000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource13,2011-07-15 01:06:40.020000+02:00,task-33212,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-07-22 12:22:32.416000+02:00 +Internet,case-8663,2011-10-21 01:06:40+02:00,General,2011-10-04 15:53:09.142000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource13,2011-07-15 01:06:40.020000+02:00,task-33213,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-07-22 12:22:55.811000+02:00 +Internet,case-8663,2011-10-21 01:06:40+02:00,General,2011-10-04 15:53:09.142000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource13,2011-07-15 01:06:40.020000+02:00,task-32403,T06 Determine necessity of stop advice,complete,EMPTY,Resource13,2011-07-22 12:23:30.039000+02:00 +Internet,case-8663,2011-10-21 01:06:40+02:00,General,2011-10-04 15:53:09.142000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource13,2011-07-15 01:06:40.020000+02:00,task-33214,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-07-22 12:23:49.745000+02:00 +Internet,case-8704,2011-08-09 01:06:40+02:00,General,2011-08-24 12:04:43.618000+02:00,2011-08-09 01:06:40.020000+02:00,Group 7,Resource35,2011-06-14 01:06:40.020000+02:00,task-32857,Confirmation of receipt,complete,EMPTY,admin2,2011-08-24 12:04:44.655000+02:00 +Internet,case-8708,2011-09-14 16:14:11.461000+02:00,General,2011-07-28 12:20:49.887000+02:00,2011-09-14 16:14:11.461000+02:00,Group 5,Resource09,2011-07-20 16:14:11.461000+02:00,task-32911,Confirmation of receipt,complete,EMPTY,admin2,2011-07-28 12:20:51.068000+02:00 +Internet,case-8709,2011-09-14 01:06:40+02:00,General,2011-07-28 12:22:12.460000+02:00,2011-09-14 01:06:40.020000+02:00,Group 5,Resource09,2011-07-20 01:06:40.020000+02:00,task-32912,Confirmation of receipt,complete,EMPTY,admin2,2011-07-28 12:22:13.305000+02:00 +Internet,case-8710,2011-08-09 01:06:40+02:00,General,2011-09-13 12:17:12.615000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource14,2011-06-14 01:06:40.020000+02:00,task-32913,Confirmation of receipt,complete,EMPTY,Resource09,2011-07-28 15:19:45.681000+02:00 +Internet,case-8710,2011-08-09 01:06:40+02:00,General,2011-09-13 12:17:12.615000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource14,2011-06-14 01:06:40.020000+02:00,task-34200,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-07-28 15:22:21.540000+02:00 +Internet,case-8710,2011-08-09 01:06:40+02:00,General,2011-09-13 12:17:12.615000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource14,2011-06-14 01:06:40.020000+02:00,task-34201,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-07-28 15:23:08.179000+02:00 +Internet,case-8710,2011-08-09 01:06:40+02:00,General,2011-09-13 12:17:12.615000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource14,2011-06-14 01:06:40.020000+02:00,task-34199,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-07-28 15:23:42.998000+02:00 +Internet,case-8710,2011-08-09 01:06:40+02:00,General,2011-09-13 12:17:12.615000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource14,2011-06-14 01:06:40.020000+02:00,task-34205,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-07-28 15:25:00.933000+02:00 +Internet,case-8710,2011-08-09 01:06:40+02:00,General,2011-09-13 12:17:12.615000+02:00,2011-08-09 01:06:40.020000+02:00,Group 5,Resource14,2011-06-14 01:06:40.020000+02:00,task-34210,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-07-28 15:25:38.412000+02:00 +Internet,case-8728,2011-07-28 01:06:40+02:00,General,2011-07-29 10:25:34.265000+02:00,2011-07-28 01:06:40.020000+02:00,Group 5,Resource06,2011-05-11 01:06:40.020000+02:00,task-32987,Confirmation of receipt,complete,EMPTY,Resource06,2011-07-28 11:53:35.431000+02:00 +Internet,case-8728,2011-07-28 01:06:40+02:00,General,2011-07-29 10:25:34.265000+02:00,2011-07-28 01:06:40.020000+02:00,Group 5,Resource06,2011-05-11 01:06:40.020000+02:00,task-34021,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-28 11:59:17.324000+02:00 +Internet,case-8728,2011-07-28 01:06:40+02:00,General,2011-07-29 10:25:34.265000+02:00,2011-07-28 01:06:40.020000+02:00,Group 5,Resource06,2011-05-11 01:06:40.020000+02:00,task-34027,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-28 11:59:34.415000+02:00 +Internet,case-8728,2011-07-28 01:06:40+02:00,General,2011-07-29 10:25:34.265000+02:00,2011-07-28 01:06:40.020000+02:00,Group 5,Resource06,2011-05-11 01:06:40.020000+02:00,task-34028,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-28 12:01:25.616000+02:00 +Internet,case-8728,2011-07-28 01:06:40+02:00,General,2011-07-29 10:25:34.265000+02:00,2011-07-28 01:06:40.020000+02:00,Group 5,Resource06,2011-05-11 01:06:40.020000+02:00,task-34022,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-28 12:01:42.793000+02:00 +Internet,case-8728,2011-07-28 01:06:40+02:00,General,2011-07-29 10:25:34.265000+02:00,2011-07-28 01:06:40.020000+02:00,Group 5,Resource06,2011-05-11 01:06:40.020000+02:00,task-34029,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-28 12:03:05.144000+02:00 +Internet,case-8733,2011-08-10 01:06:40+02:00,General,2011-09-02 11:43:53.132000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource06,2011-06-15 01:06:40.020000+02:00,task-33113,Confirmation of receipt,complete,EMPTY,Resource06,2011-08-25 12:49:35.899000+02:00 +Internet,case-8733,2011-08-10 01:06:40+02:00,General,2011-09-02 11:43:53.132000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource06,2011-06-15 01:06:40.020000+02:00,task-37127,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-25 12:49:57.360000+02:00 +Internet,case-8733,2011-08-10 01:06:40+02:00,General,2011-09-02 11:43:53.132000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource06,2011-06-15 01:06:40.020000+02:00,task-37126,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-25 12:50:35.211000+02:00 +Internet,case-8733,2011-08-10 01:06:40+02:00,General,2011-09-02 11:43:53.132000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource06,2011-06-15 01:06:40.020000+02:00,task-37129,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-25 12:50:50.892000+02:00 +Internet,case-8733,2011-08-10 01:06:40+02:00,General,2011-09-02 11:43:53.132000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource06,2011-06-15 01:06:40.020000+02:00,task-37130,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-25 12:51:08.015000+02:00 +Internet,case-8733,2011-08-10 01:06:40+02:00,General,2011-09-02 11:43:53.132000+02:00,2011-08-10 01:06:40.020000+02:00,Group 5,Resource06,2011-06-15 01:06:40.020000+02:00,task-37128,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-25 12:51:30.158000+02:00 +Internet,case-8734,2011-10-05 01:06:40+02:00,General,2011-09-08 10:31:27.899000+02:00,2011-10-05 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-33165,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-26 14:51:10.078000+02:00 +Internet,case-8734,2011-10-05 01:06:40+02:00,General,2011-09-08 10:31:27.899000+02:00,2011-10-05 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-33522,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-26 14:51:32.693000+02:00 +Internet,case-8734,2011-10-05 01:06:40+02:00,General,2011-09-08 10:31:27.899000+02:00,2011-10-05 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-33524,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-26 14:51:50.229000+02:00 +Internet,case-8734,2011-10-05 01:06:40+02:00,General,2011-09-08 10:31:27.899000+02:00,2011-10-05 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-33525,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-26 14:52:09.681000+02:00 +Internet,case-8734,2011-10-05 01:06:40+02:00,General,2011-09-08 10:31:27.899000+02:00,2011-10-05 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-33523,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-26 14:52:24.125000+02:00 +Internet,case-8734,2011-10-05 01:06:40+02:00,General,2011-09-08 10:31:27.899000+02:00,2011-10-05 01:06:40.020000+02:00,Group 5,Resource04,2011-06-15 01:06:40.020000+02:00,task-33526,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-26 14:52:45.806000+02:00 +Internet,case-8742,2011-10-24 01:06:40+02:00,General,2011-10-03 15:53:03.902000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource02,2011-07-18 01:06:40.020000+02:00,task-33173,Confirmation of receipt,complete,Group 1,Resource27,2011-07-22 08:57:13.058000+02:00 +Internet,case-8742,2011-10-24 01:06:40+02:00,General,2011-10-03 15:53:03.902000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource02,2011-07-18 01:06:40.020000+02:00,task-33174,T02 Check confirmation of receipt,complete,EMPTY,Resource02,2011-08-10 11:07:05.646000+02:00 +Internet,case-8742,2011-10-24 01:06:40+02:00,General,2011-10-03 15:53:03.902000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource02,2011-07-18 01:06:40.020000+02:00,task-36037,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-10 11:07:31.882000+02:00 +Internet,case-8742,2011-10-24 01:06:40+02:00,General,2011-10-03 15:53:03.902000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource02,2011-07-18 01:06:40.020000+02:00,task-36038,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-10 11:08:02.606000+02:00 +Internet,case-8742,2011-10-24 01:06:40+02:00,General,2011-10-03 15:53:03.902000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource02,2011-07-18 01:06:40.020000+02:00,task-33175,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-10 11:09:41.491000+02:00 +Internet,case-8742,2011-10-24 01:06:40+02:00,General,2011-10-03 15:53:03.902000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource02,2011-07-18 01:06:40.020000+02:00,task-36039,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-10 11:11:02.328000+02:00 +Internet,case-8743,2011-09-12 00:00:00+02:00,General,,2011-09-12 00:00:00.020000+02:00,Group 5,Resource14,2011-07-18 01:06:40.020000+02:00,task-33176,Confirmation of receipt,complete,Group 1,Resource27,2011-07-22 09:15:19.798000+02:00 +Internet,case-8743,2011-09-12 00:00:00+02:00,General,,2011-09-12 00:00:00.020000+02:00,Group 5,Resource14,2011-07-18 01:06:40.020000+02:00,task-33177,T02 Check confirmation of receipt,complete,EMPTY,Resource14,2011-08-17 13:48:11.103000+02:00 +Internet,case-8743,2011-09-12 00:00:00+02:00,General,,2011-09-12 00:00:00.020000+02:00,Group 5,Resource14,2011-07-18 01:06:40.020000+02:00,task-36640,T04 Determine confirmation of receipt,complete,EMPTY,Resource14,2011-09-05 10:55:43.211000+02:00 +Internet,case-8743,2011-09-12 00:00:00+02:00,General,,2011-09-12 00:00:00.020000+02:00,Group 5,Resource14,2011-07-18 01:06:40.020000+02:00,task-38002,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-09-05 10:56:06.769000+02:00 +Internet,case-8743,2011-09-12 00:00:00+02:00,General,,2011-09-12 00:00:00.020000+02:00,Group 5,Resource14,2011-07-18 01:06:40.020000+02:00,task-33178,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-09-05 10:56:26.855000+02:00 +Internet,case-8743,2011-09-12 00:00:00+02:00,General,,2011-09-12 00:00:00.020000+02:00,Group 5,Resource14,2011-07-18 01:06:40.020000+02:00,task-38003,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-09-05 10:56:48.811000+02:00 +Internet,case-8744,2011-09-12 01:06:40+02:00,General,2011-08-17 13:39:47.957000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource13,2011-07-18 01:06:40.020000+02:00,task-33181,Confirmation of receipt,complete,Group 1,Resource27,2011-07-22 09:33:26.440000+02:00 +Internet,case-8744,2011-09-12 01:06:40+02:00,General,2011-08-17 13:39:47.957000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource13,2011-07-18 01:06:40.020000+02:00,task-33183,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-08-01 20:50:37.967000+02:00 +Internet,case-8744,2011-09-12 01:06:40+02:00,General,2011-08-17 13:39:47.957000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource13,2011-07-18 01:06:40.020000+02:00,task-34790,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-08-01 20:51:16.837000+02:00 +Internet,case-8744,2011-09-12 01:06:40+02:00,General,2011-08-17 13:39:47.957000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource13,2011-07-18 01:06:40.020000+02:00,task-34791,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-08-01 20:51:59.169000+02:00 +Internet,case-8744,2011-09-12 01:06:40+02:00,General,2011-08-17 13:39:47.957000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource13,2011-07-18 01:06:40.020000+02:00,task-33184,T06 Determine necessity of stop advice,complete,EMPTY,Resource13,2011-08-01 20:52:31.652000+02:00 +Internet,case-8744,2011-09-12 01:06:40+02:00,General,2011-08-17 13:39:47.957000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource13,2011-07-18 01:06:40.020000+02:00,task-34792,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-08-01 20:52:51.809000+02:00 +Internet,case-8745,2011-08-16 01:06:40+02:00,General,2011-08-25 12:17:08.219000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource06,2011-06-21 01:06:40.020000+02:00,task-33192,Confirmation of receipt,complete,EMPTY,Resource06,2011-08-22 12:23:15.787000+02:00 +Internet,case-8745,2011-08-16 01:06:40+02:00,General,2011-08-25 12:17:08.219000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource06,2011-06-21 01:06:40.020000+02:00,task-36911,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-22 12:23:34.814000+02:00 +Internet,case-8745,2011-08-16 01:06:40+02:00,General,2011-08-25 12:17:08.219000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource06,2011-06-21 01:06:40.020000+02:00,task-36910,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-22 12:23:58.319000+02:00 +Internet,case-8745,2011-08-16 01:06:40+02:00,General,2011-08-25 12:17:08.219000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource06,2011-06-21 01:06:40.020000+02:00,task-36913,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-22 12:24:25.690000+02:00 +Internet,case-8745,2011-08-16 01:06:40+02:00,General,2011-08-25 12:17:08.219000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource06,2011-06-21 01:06:40.020000+02:00,task-36914,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-22 12:24:44.996000+02:00 +Internet,case-8745,2011-08-16 01:06:40+02:00,General,2011-08-25 12:17:08.219000+02:00,2011-08-16 01:06:40.020000+02:00,Group 5,Resource06,2011-06-21 01:06:40.020000+02:00,task-36912,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-22 12:25:01.725000+02:00 +Internet,case-8746,2011-09-13 01:06:40+02:00,General,2011-08-23 12:25:02.669000+02:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource06,2011-07-19 01:06:40.020000+02:00,task-33195,Confirmation of receipt,complete,Group 1,Resource27,2011-07-22 10:48:01.228000+02:00 +Internet,case-8746,2011-09-13 01:06:40+02:00,General,2011-08-23 12:25:02.669000+02:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource06,2011-07-19 01:06:40.020000+02:00,task-33198,T02 Check confirmation of receipt,complete,EMPTY,Resource06,2011-08-03 13:20:28.954000+02:00 +Internet,case-8746,2011-09-13 01:06:40+02:00,General,2011-08-23 12:25:02.669000+02:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource06,2011-07-19 01:06:40.020000+02:00,task-35065,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-03 13:20:52.370000+02:00 +Internet,case-8746,2011-09-13 01:06:40+02:00,General,2011-08-23 12:25:02.669000+02:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource06,2011-07-19 01:06:40.020000+02:00,task-33199,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-03 13:21:11.212000+02:00 +Internet,case-8746,2011-09-13 01:06:40+02:00,General,2011-08-23 12:25:02.669000+02:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource06,2011-07-19 01:06:40.020000+02:00,task-35066,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-03 13:21:35.152000+02:00 +Internet,case-8746,2011-09-13 01:06:40+02:00,General,2011-08-23 12:25:02.669000+02:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource06,2011-07-19 01:06:40.020000+02:00,task-35067,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-22 12:40:05.437000+02:00 +Internet,case-8749,2011-10-10 01:06:40+02:00,General,2011-08-31 14:45:05.672000+02:00,2011-10-10 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-33209,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 14:15:09.454000+02:00 +Internet,case-8749,2011-10-10 01:06:40+02:00,General,2011-08-31 14:45:05.672000+02:00,2011-10-10 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-34103,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 14:15:30.018000+02:00 +Internet,case-8749,2011-10-10 01:06:40+02:00,General,2011-08-31 14:45:05.672000+02:00,2011-10-10 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-34105,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 14:15:47.739000+02:00 +Internet,case-8749,2011-10-10 01:06:40+02:00,General,2011-08-31 14:45:05.672000+02:00,2011-10-10 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-34106,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 14:16:30.610000+02:00 +Internet,case-8749,2011-10-10 01:06:40+02:00,General,2011-08-31 14:45:05.672000+02:00,2011-10-10 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-34104,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 14:17:02.058000+02:00 +Internet,case-8749,2011-10-10 01:06:40+02:00,General,2011-08-31 14:45:05.672000+02:00,2011-10-10 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-34107,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 14:17:29.758000+02:00 +Internet,case-8750,2011-08-18 01:06:40+02:00,General,2011-09-29 09:43:32.752000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-33218,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 10:46:20.281000+02:00 +Internet,case-8750,2011-08-18 01:06:40+02:00,General,2011-09-29 09:43:32.752000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-35329,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 10:47:05.590000+02:00 +Internet,case-8750,2011-08-18 01:06:40+02:00,General,2011-09-29 09:43:32.752000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-35331,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 10:47:53.263000+02:00 +Internet,case-8750,2011-08-18 01:06:40+02:00,General,2011-09-29 09:43:32.752000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-35332,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 10:48:09.930000+02:00 +Internet,case-8750,2011-08-18 01:06:40+02:00,General,2011-09-29 09:43:32.752000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-35330,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 10:48:27.068000+02:00 +Internet,case-8750,2011-08-18 01:06:40+02:00,General,2011-09-29 09:43:32.752000+02:00,2011-08-18 01:06:40.020000+02:00,Group 8,Resource01,2011-06-22 01:06:40.020000+02:00,task-35333,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 10:50:23.515000+02:00 +Internet,case-8754,2011-09-16 14:46:57.572000+02:00,General,2011-10-13 14:29:53.414000+02:00,2011-09-16 14:46:57.572000+02:00,Group 5,Resource22,2011-07-22 14:46:57.572000+02:00,task-33238,Confirmation of receipt,complete,EMPTY,Resource22,2011-10-11 08:56:02.200000+02:00 +Internet,case-8754,2011-09-16 14:46:57.572000+02:00,General,2011-10-13 14:29:53.414000+02:00,2011-09-16 14:46:57.572000+02:00,Group 5,Resource22,2011-07-22 14:46:57.572000+02:00,task-42705,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-10-11 08:56:39.384000+02:00 +Internet,case-8754,2011-09-16 14:46:57.572000+02:00,General,2011-10-13 14:29:53.414000+02:00,2011-09-16 14:46:57.572000+02:00,Group 5,Resource22,2011-07-22 14:46:57.572000+02:00,task-42707,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-10-11 08:57:13.231000+02:00 +Internet,case-8754,2011-09-16 14:46:57.572000+02:00,General,2011-10-13 14:29:53.414000+02:00,2011-09-16 14:46:57.572000+02:00,Group 5,Resource22,2011-07-22 14:46:57.572000+02:00,task-42708,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-10-11 08:57:52.094000+02:00 +Internet,case-8754,2011-09-16 14:46:57.572000+02:00,General,2011-10-13 14:29:53.414000+02:00,2011-09-16 14:46:57.572000+02:00,Group 5,Resource22,2011-07-22 14:46:57.572000+02:00,task-42706,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-10-11 08:58:46.644000+02:00 +Internet,case-8754,2011-09-16 14:46:57.572000+02:00,General,2011-10-13 14:29:53.414000+02:00,2011-09-16 14:46:57.572000+02:00,Group 5,Resource22,2011-07-22 14:46:57.572000+02:00,task-42711,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-10-11 09:01:50.310000+02:00 +Internet,case-8755,2011-08-24 01:06:40+02:00,General,2011-09-14 09:58:37.835000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-06-29 01:06:40.020000+02:00,task-33239,Confirmation of receipt,complete,EMPTY,Resource06,2011-07-29 08:15:08.678000+02:00 +Internet,case-8755,2011-08-24 01:06:40+02:00,General,2011-09-14 09:58:37.835000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-06-29 01:06:40.020000+02:00,task-34294,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-29 09:39:24.256000+02:00 +Internet,case-8755,2011-08-24 01:06:40+02:00,General,2011-09-14 09:58:37.835000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-06-29 01:06:40.020000+02:00,task-34293,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-29 09:39:53.035000+02:00 +Internet,case-8755,2011-08-24 01:06:40+02:00,General,2011-09-14 09:58:37.835000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-06-29 01:06:40.020000+02:00,task-34325,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-29 09:40:15.528000+02:00 +Internet,case-8755,2011-08-24 01:06:40+02:00,General,2011-09-14 09:58:37.835000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-06-29 01:06:40.020000+02:00,task-34324,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-29 09:40:36.549000+02:00 +Internet,case-8755,2011-08-24 01:06:40+02:00,General,2011-09-14 09:58:37.835000+02:00,2011-08-24 01:06:40.020000+02:00,Group 5,Resource06,2011-06-29 01:06:40.020000+02:00,task-34326,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-29 09:42:33.038000+02:00 +Internet,case-8770,2012-02-28 00:00:00+01:00,General,,2012-02-28 00:00:00.010000+01:00,Group 5,Resource04,2011-07-20 01:06:40.020000+02:00,task-33282,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 11:17:45.605000+02:00 +Internet,case-8770,2012-02-28 00:00:00+01:00,General,,2012-02-28 00:00:00.010000+01:00,Group 5,Resource04,2011-07-20 01:06:40.020000+02:00,task-33760,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 11:18:15.869000+02:00 +Internet,case-8770,2012-02-28 00:00:00+01:00,General,,2012-02-28 00:00:00.010000+01:00,Group 5,Resource04,2011-07-20 01:06:40.020000+02:00,task-33762,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 11:18:38.442000+02:00 +Internet,case-8770,2012-02-28 00:00:00+01:00,General,,2012-02-28 00:00:00.010000+01:00,Group 5,Resource04,2011-07-20 01:06:40.020000+02:00,task-33763,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 11:18:59.417000+02:00 +Internet,case-8770,2012-02-28 00:00:00+01:00,General,,2012-02-28 00:00:00.010000+01:00,Group 5,Resource04,2011-07-20 01:06:40.020000+02:00,task-33761,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-07-27 11:19:14.054000+02:00 +Internet,case-8770,2012-02-28 00:00:00+01:00,General,,2012-02-28 00:00:00.010000+01:00,Group 5,Resource04,2011-07-20 01:06:40.020000+02:00,task-33764,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-07-27 11:19:37.618000+02:00 +Internet,case-8771,2011-10-26 01:06:40+02:00,General,2011-10-05 10:31:29.082000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-33285,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-02 14:13:47.848000+02:00 +Internet,case-8771,2011-10-26 01:06:40+02:00,General,2011-10-05 10:31:29.082000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-34932,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-02 14:14:05.540000+02:00 +Internet,case-8771,2011-10-26 01:06:40+02:00,General,2011-10-05 10:31:29.082000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-34934,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-02 14:14:30.759000+02:00 +Internet,case-8771,2011-10-26 01:06:40+02:00,General,2011-10-05 10:31:29.082000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-34936,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-02 14:14:48.326000+02:00 +Internet,case-8771,2011-10-26 01:06:40+02:00,General,2011-10-05 10:31:29.082000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-34933,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-02 14:15:03.233000+02:00 +Internet,case-8771,2011-10-26 01:06:40+02:00,General,2011-10-05 10:31:29.082000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-34937,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-02 14:15:23.192000+02:00 +Internet,case-8774,2011-09-16 01:06:40+02:00,General,2011-07-26 14:53:09.051000+02:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource06,2011-07-22 01:06:40.020000+02:00,task-33290,Confirmation of receipt,complete,EMPTY,admin2,2011-07-26 14:53:09.884000+02:00 +Internet,case-8775,2011-09-16 01:06:40+02:00,General,2011-08-09 09:26:18.340000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-33293,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 15:36:16.459000+02:00 +Internet,case-8775,2011-09-16 01:06:40+02:00,General,2011-08-09 09:26:18.340000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34234,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 15:37:25.361000+02:00 +Internet,case-8775,2011-09-16 01:06:40+02:00,General,2011-08-09 09:26:18.340000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34236,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 15:38:37.719000+02:00 +Internet,case-8775,2011-09-16 01:06:40+02:00,General,2011-08-09 09:26:18.340000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34237,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 15:39:54.922000+02:00 +Internet,case-8775,2011-09-16 01:06:40+02:00,General,2011-08-09 09:26:18.340000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34235,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 15:40:15.659000+02:00 +Internet,case-8775,2011-09-16 01:06:40+02:00,General,2011-08-09 09:26:18.340000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34238,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 15:40:35.478000+02:00 +Internet,case-8776,2011-10-26 01:06:40+02:00,General,2011-10-05 10:27:54.449000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-33299,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 15:11:18.319000+02:00 +Internet,case-8776,2011-10-26 01:06:40+02:00,General,2011-10-05 10:27:54.449000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-33832,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 15:11:37.483000+02:00 +Internet,case-8776,2011-10-26 01:06:40+02:00,General,2011-10-05 10:27:54.449000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-33834,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 15:17:08.369000+02:00 +Internet,case-8776,2011-10-26 01:06:40+02:00,General,2011-10-05 10:27:54.449000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-33835,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 15:17:28.204000+02:00 +Internet,case-8776,2011-10-26 01:06:40+02:00,General,2011-10-05 10:27:54.449000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-33833,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-02 11:54:51.998000+02:00 +Internet,case-8776,2011-10-26 01:06:40+02:00,General,2011-10-05 10:27:54.449000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-34898,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-02 11:55:18.533000+02:00 +Internet,case-8777,2011-09-16 01:06:40+02:00,General,2011-08-09 11:34:14.669000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-33300,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-29 13:56:08.528000+02:00 +Internet,case-8777,2011-09-16 01:06:40+02:00,General,2011-08-09 11:34:14.669000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34452,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-29 13:56:31.243000+02:00 +Internet,case-8777,2011-09-16 01:06:40+02:00,General,2011-08-09 11:34:14.669000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34453,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-29 13:56:48.714000+02:00 +Internet,case-8777,2011-09-16 01:06:40+02:00,General,2011-08-09 11:34:14.669000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34454,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-29 13:57:20.196000+02:00 +Internet,case-8777,2011-09-16 01:06:40+02:00,General,2011-08-09 11:34:14.669000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34456,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-29 13:57:42.363000+02:00 +Internet,case-8777,2011-09-16 01:06:40+02:00,General,2011-08-09 11:34:14.669000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34455,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-29 13:58:00.612000+02:00 +Internet,case-8778,2011-10-26 01:06:40+02:00,General,2011-10-05 12:40:23.654000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-33301,Confirmation of receipt,complete,EMPTY,Resource04,2011-07-27 15:10:45.070000+02:00 +Internet,case-8778,2011-10-26 01:06:40+02:00,General,2011-10-05 12:40:23.654000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-33830,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-07-27 15:18:06.322000+02:00 +Internet,case-8778,2011-10-26 01:06:40+02:00,General,2011-10-05 12:40:23.654000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-33836,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-07-27 15:18:35.385000+02:00 +Internet,case-8778,2011-10-26 01:06:40+02:00,General,2011-10-05 12:40:23.654000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-33837,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-07-27 15:18:52.960000+02:00 +Internet,case-8778,2011-10-26 01:06:40+02:00,General,2011-10-05 12:40:23.654000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-33831,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-02 12:41:36.677000+02:00 +Internet,case-8778,2011-10-26 01:06:40+02:00,General,2011-10-05 12:40:23.654000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-22 01:06:40.020000+02:00,task-34913,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-02 12:42:03.331000+02:00 +Internet,case-8779,2011-09-16 01:06:40+02:00,General,2011-08-09 09:05:57.247000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-33302,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-29 14:12:05.171000+02:00 +Internet,case-8779,2011-09-16 01:06:40+02:00,General,2011-08-09 09:05:57.247000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34470,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-29 14:12:31.341000+02:00 +Internet,case-8779,2011-09-16 01:06:40+02:00,General,2011-08-09 09:05:57.247000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34472,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-29 14:13:14.316000+02:00 +Internet,case-8779,2011-09-16 01:06:40+02:00,General,2011-08-09 09:05:57.247000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34474,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-29 14:14:54.928000+02:00 +Internet,case-8779,2011-09-16 01:06:40+02:00,General,2011-08-09 09:05:57.247000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34471,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-29 14:15:13.926000+02:00 +Internet,case-8779,2011-09-16 01:06:40+02:00,General,2011-08-09 09:05:57.247000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-34475,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-29 14:15:45.650000+02:00 +Internet,case-8780,2011-09-16 01:06:40+02:00,General,2011-11-14 16:02:47.247000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource12,2011-07-22 01:06:40.020000+02:00,task-33303,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-12 12:24:48.211000+02:00 +Internet,case-8780,2011-09-16 01:06:40+02:00,General,2011-11-14 16:02:47.247000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource12,2011-07-22 01:06:40.020000+02:00,task-38677,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-12 12:25:30.077000+02:00 +Internet,case-8780,2011-09-16 01:06:40+02:00,General,2011-11-14 16:02:47.247000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource12,2011-07-22 01:06:40.020000+02:00,task-38679,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-12 12:25:55.668000+02:00 +Internet,case-8780,2011-09-16 01:06:40+02:00,General,2011-11-14 16:02:47.247000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource12,2011-07-22 01:06:40.020000+02:00,task-38680,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-12 12:26:31.382000+02:00 +Internet,case-8780,2011-09-16 01:06:40+02:00,General,2011-11-14 16:02:47.247000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource12,2011-07-22 01:06:40.020000+02:00,task-38678,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-12 12:27:03.627000+02:00 +Internet,case-8780,2011-09-16 01:06:40+02:00,General,2011-11-14 16:02:47.247000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource12,2011-07-22 01:06:40.020000+02:00,task-38681,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-12 12:27:44.271000+02:00 +Internet,case-8782,2011-09-16 01:06:40+02:00,General,2011-09-26 12:37:11.822000+02:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource05,2011-07-22 01:06:40.020000+02:00,task-33307,Confirmation of receipt,complete,EMPTY,Resource05,2011-08-09 08:31:58.154000+02:00 +Internet,case-8782,2011-09-16 01:06:40+02:00,General,2011-09-26 12:37:11.822000+02:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource05,2011-07-22 01:06:40.020000+02:00,task-35809,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-08-09 08:32:39.262000+02:00 +Internet,case-8782,2011-09-16 01:06:40+02:00,General,2011-09-26 12:37:11.822000+02:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource05,2011-07-22 01:06:40.020000+02:00,task-35811,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-09 08:32:59.076000+02:00 +Internet,case-8782,2011-09-16 01:06:40+02:00,General,2011-09-26 12:37:11.822000+02:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource05,2011-07-22 01:06:40.020000+02:00,task-35812,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-09 08:33:24.853000+02:00 +Internet,case-8782,2011-09-16 01:06:40+02:00,General,2011-09-26 12:37:11.822000+02:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource05,2011-07-22 01:06:40.020000+02:00,task-35810,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-09 08:33:59.702000+02:00 +Internet,case-8782,2011-09-16 01:06:40+02:00,General,2011-09-26 12:37:11.822000+02:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource05,2011-07-22 01:06:40.020000+02:00,task-35813,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-09 08:34:29.696000+02:00 +Internet,case-8783,2011-09-12 01:06:40+02:00,Customer contact,2011-07-25 14:19:14.858000+02:00,2011-09-12 01:06:40.020000+02:00,,admin3,2011-07-18 01:06:40.020000+02:00,task-33310,Confirmation of receipt,complete,Group 1,admin2,2011-07-25 14:19:15.791000+02:00 +Internet,case-8784,2011-09-15 01:06:40+02:00,General,2011-08-30 11:49:28.929000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-33311,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 10:52:38.558000+02:00 +Internet,case-8784,2011-09-15 01:06:40+02:00,General,2011-08-30 11:49:28.929000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-33970,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 10:53:26.191000+02:00 +Internet,case-8784,2011-09-15 01:06:40+02:00,General,2011-08-30 11:49:28.929000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-33972,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 10:54:41.798000+02:00 +Internet,case-8784,2011-09-15 01:06:40+02:00,General,2011-08-30 11:49:28.929000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-33973,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 11:10:43.241000+02:00 +Internet,case-8784,2011-09-15 01:06:40+02:00,General,2011-08-30 11:49:28.929000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-33971,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 11:11:05.041000+02:00 +Internet,case-8784,2011-09-15 01:06:40+02:00,General,2011-08-30 11:49:28.929000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-33981,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 11:11:32.143000+02:00 +Internet,case-8785,2011-09-15 01:06:40+02:00,General,2011-08-09 10:29:59.542000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-33312,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 14:55:35.612000+02:00 +Internet,case-8785,2011-09-15 01:06:40+02:00,General,2011-08-09 10:29:59.542000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-34154,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 14:56:03.975000+02:00 +Internet,case-8785,2011-09-15 01:06:40+02:00,General,2011-08-09 10:29:59.542000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-34156,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 14:56:26.634000+02:00 +Internet,case-8785,2011-09-15 01:06:40+02:00,General,2011-08-09 10:29:59.542000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-34157,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 14:56:45.976000+02:00 +Internet,case-8785,2011-09-15 01:06:40+02:00,General,2011-08-09 10:29:59.542000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-34155,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 14:57:06.221000+02:00 +Internet,case-8785,2011-09-15 01:06:40+02:00,General,2011-08-09 10:29:59.542000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-34158,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 14:59:05.613000+02:00 +Internet,case-8786,2011-09-15 01:06:40+02:00,General,2011-08-09 11:58:54.199000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-33313,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 15:23:25.436000+02:00 +Internet,case-8786,2011-09-15 01:06:40+02:00,General,2011-08-09 11:58:54.199000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-34203,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 15:24:13.105000+02:00 +Internet,case-8786,2011-09-15 01:06:40+02:00,General,2011-08-09 11:58:54.199000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-34206,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 15:24:32.742000+02:00 +Internet,case-8786,2011-09-15 01:06:40+02:00,General,2011-08-09 11:58:54.199000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-34207,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 15:24:53.477000+02:00 +Internet,case-8786,2011-09-15 01:06:40+02:00,General,2011-08-09 11:58:54.199000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-34204,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 15:25:21.609000+02:00 +Internet,case-8786,2011-09-15 01:06:40+02:00,General,2011-08-09 11:58:54.199000+02:00,2011-09-15 01:06:40.020000+02:00,Group 8,Resource11,2011-07-21 01:06:40.020000+02:00,task-34211,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 15:25:51.662000+02:00 +Internet,case-8796,2011-10-31 01:06:40+01:00,General,2011-10-27 11:41:12.036000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-07-25 01:06:40.020000+02:00,task-33459,Confirmation of receipt,complete,EMPTY,Resource06,2011-07-29 12:26:00.756000+02:00 +Internet,case-8796,2011-10-31 01:06:40+01:00,General,2011-10-27 11:41:12.036000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-07-25 01:06:40.020000+02:00,task-34438,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-07-29 12:26:19.746000+02:00 +Internet,case-8796,2011-10-31 01:06:40+01:00,General,2011-10-27 11:41:12.036000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-07-25 01:06:40.020000+02:00,task-34437,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-07-29 12:26:37.903000+02:00 +Internet,case-8796,2011-10-31 01:06:40+01:00,General,2011-10-27 11:41:12.036000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-07-25 01:06:40.020000+02:00,task-34440,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-07-29 12:26:58.268000+02:00 +Internet,case-8796,2011-10-31 01:06:40+01:00,General,2011-10-27 11:41:12.036000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-07-25 01:06:40.020000+02:00,task-34441,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-07-29 12:27:17.511000+02:00 +Internet,case-8796,2011-10-31 01:06:40+01:00,General,2011-10-27 11:41:12.036000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-07-25 01:06:40.020000+02:00,task-34439,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-07-29 12:27:37.459000+02:00 +Internet,case-8798,2011-09-19 01:06:40+02:00,General,2011-08-19 14:11:48.617000+02:00,2011-09-19 01:06:40.020000+02:00,Group 8,Resource01,2011-07-25 01:06:40.020000+02:00,task-33483,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-11 10:37:19.681000+02:00 +Internet,case-8798,2011-09-19 01:06:40+02:00,General,2011-08-19 14:11:48.617000+02:00,2011-09-19 01:06:40.020000+02:00,Group 8,Resource01,2011-07-25 01:06:40.020000+02:00,task-36266,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-11 10:38:04.212000+02:00 +Internet,case-8798,2011-09-19 01:06:40+02:00,General,2011-08-19 14:11:48.617000+02:00,2011-09-19 01:06:40.020000+02:00,Group 8,Resource01,2011-07-25 01:06:40.020000+02:00,task-36268,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-08-19 14:03:48.678000+02:00 +Internet,case-8798,2011-09-19 01:06:40+02:00,General,2011-08-19 14:11:48.617000+02:00,2011-09-19 01:06:40.020000+02:00,Group 8,Resource01,2011-07-25 01:06:40.020000+02:00,task-36853,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-19 14:11:12.381000+02:00 +Internet,case-8798,2011-09-19 01:06:40+02:00,General,2011-08-19 14:11:48.617000+02:00,2011-09-19 01:06:40.020000+02:00,Group 8,Resource01,2011-07-25 01:06:40.020000+02:00,task-36267,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-08-19 14:11:49.508000+02:00 +Internet,case-8802,2011-08-30 01:06:40+02:00,General,2011-08-08 08:47:37.770000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-33506,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 09:37:15.024000+02:00 +Internet,case-8802,2011-08-30 01:06:40+02:00,General,2011-08-08 08:47:37.770000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-35234,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 09:37:35.130000+02:00 +Internet,case-8802,2011-08-30 01:06:40+02:00,General,2011-08-08 08:47:37.770000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-35236,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 09:37:51.424000+02:00 +Internet,case-8802,2011-08-30 01:06:40+02:00,General,2011-08-08 08:47:37.770000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-35237,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 09:38:07.555000+02:00 +Internet,case-8802,2011-08-30 01:06:40+02:00,General,2011-08-08 08:47:37.770000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-35235,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 09:38:23.015000+02:00 +Internet,case-8802,2011-08-30 01:06:40+02:00,General,2011-08-08 08:47:37.770000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-35238,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 09:38:41.419000+02:00 +Internet,case-8812,2011-09-20 01:06:40+02:00,General,2011-08-02 07:51:55.717000+02:00,2011-09-20 01:06:40.020000+02:00,Group 8,Resource11,2011-07-26 01:06:40.020000+02:00,task-33705,Confirmation of receipt,complete,EMPTY,Resource01,2011-07-28 09:01:50.194000+02:00 +Internet,case-8812,2011-09-20 01:06:40+02:00,General,2011-08-02 07:51:55.717000+02:00,2011-09-20 01:06:40.020000+02:00,Group 8,Resource11,2011-07-26 01:06:40.020000+02:00,task-33890,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-07-28 09:02:16.195000+02:00 +Internet,case-8812,2011-09-20 01:06:40+02:00,General,2011-08-02 07:51:55.717000+02:00,2011-09-20 01:06:40.020000+02:00,Group 8,Resource11,2011-07-26 01:06:40.020000+02:00,task-33892,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-07-28 09:02:34.125000+02:00 +Internet,case-8812,2011-09-20 01:06:40+02:00,General,2011-08-02 07:51:55.717000+02:00,2011-09-20 01:06:40.020000+02:00,Group 8,Resource11,2011-07-26 01:06:40.020000+02:00,task-33894,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-07-28 09:02:53.167000+02:00 +Internet,case-8812,2011-09-20 01:06:40+02:00,General,2011-08-02 07:51:55.717000+02:00,2011-09-20 01:06:40.020000+02:00,Group 8,Resource11,2011-07-26 01:06:40.020000+02:00,task-33891,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-07-28 09:03:11.186000+02:00 +Internet,case-8812,2011-09-20 01:06:40+02:00,General,2011-08-02 07:51:55.717000+02:00,2011-09-20 01:06:40.020000+02:00,Group 8,Resource11,2011-07-26 01:06:40.020000+02:00,task-33895,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-07-28 09:03:39.686000+02:00 +Internet,case-8815,2011-08-18 01:06:40+02:00,General,2011-08-15 14:46:00.636000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource05,2011-06-23 01:06:40.020000+02:00,task-33771,Confirmation of receipt,complete,EMPTY,Resource05,2011-08-03 09:03:38.213000+02:00 +Internet,case-8815,2011-08-18 01:06:40+02:00,General,2011-08-15 14:46:00.636000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource05,2011-06-23 01:06:40.020000+02:00,task-34999,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-08-03 09:16:50.773000+02:00 +Internet,case-8815,2011-08-18 01:06:40+02:00,General,2011-08-15 14:46:00.636000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource05,2011-06-23 01:06:40.020000+02:00,task-35002,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-03 09:17:11.394000+02:00 +Internet,case-8815,2011-08-18 01:06:40+02:00,General,2011-08-15 14:46:00.636000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource05,2011-06-23 01:06:40.020000+02:00,task-35003,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-03 09:17:38.771000+02:00 +Internet,case-8815,2011-08-18 01:06:40+02:00,General,2011-08-15 14:46:00.636000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource05,2011-06-23 01:06:40.020000+02:00,task-35000,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-03 09:17:57.264000+02:00 +Internet,case-8815,2011-08-18 01:06:40+02:00,General,2011-08-15 14:46:00.636000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource05,2011-06-23 01:06:40.020000+02:00,task-35004,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-03 09:18:37.509000+02:00 +Internet,case-8822,2011-08-26 01:06:40+02:00,General,2011-08-26 11:42:50.171000+02:00,2011-08-26 01:06:40.020000+02:00,Group 5,Resource06,2011-07-01 01:06:40.020000+02:00,task-33827,Confirmation of receipt,complete,EMPTY,Resource06,2011-08-03 15:53:29.904000+02:00 +Internet,case-8822,2011-08-26 01:06:40+02:00,General,2011-08-26 11:42:50.171000+02:00,2011-08-26 01:06:40.020000+02:00,Group 5,Resource06,2011-07-01 01:06:40.020000+02:00,task-35122,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-03 15:53:50.496000+02:00 +Internet,case-8822,2011-08-26 01:06:40+02:00,General,2011-08-26 11:42:50.171000+02:00,2011-08-26 01:06:40.020000+02:00,Group 5,Resource06,2011-07-01 01:06:40.020000+02:00,task-35124,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-03 15:54:05.596000+02:00 +Internet,case-8822,2011-08-26 01:06:40+02:00,General,2011-08-26 11:42:50.171000+02:00,2011-08-26 01:06:40.020000+02:00,Group 5,Resource06,2011-07-01 01:06:40.020000+02:00,task-35125,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-03 15:54:22.016000+02:00 +Internet,case-8822,2011-08-26 01:06:40+02:00,General,2011-08-26 11:42:50.171000+02:00,2011-08-26 01:06:40.020000+02:00,Group 5,Resource06,2011-07-01 01:06:40.020000+02:00,task-35123,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-03 15:54:42.441000+02:00 +Internet,case-8822,2011-08-26 01:06:40+02:00,General,2011-08-26 11:42:50.171000+02:00,2011-08-26 01:06:40.020000+02:00,Group 5,Resource06,2011-07-01 01:06:40.020000+02:00,task-35126,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-03 15:55:01.260000+02:00 +Internet,case-8823,2011-11-22 01:06:40+01:00,General,2011-10-10 09:55:02.628000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource02,2011-06-23 01:06:40.020000+02:00,task-33838,Confirmation of receipt,complete,EMPTY,Resource02,2011-08-04 15:25:51.474000+02:00 +Internet,case-8823,2011-11-22 01:06:40+01:00,General,2011-10-10 09:55:02.628000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource02,2011-06-23 01:06:40.020000+02:00,task-35487,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-04 15:26:19.133000+02:00 +Internet,case-8823,2011-11-22 01:06:40+01:00,General,2011-10-10 09:55:02.628000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource02,2011-06-23 01:06:40.020000+02:00,task-35489,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-04 15:26:46.830000+02:00 +Internet,case-8823,2011-11-22 01:06:40+01:00,General,2011-10-10 09:55:02.628000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource02,2011-06-23 01:06:40.020000+02:00,task-35490,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-04 15:27:08.932000+02:00 +Internet,case-8823,2011-11-22 01:06:40+01:00,General,2011-10-10 09:55:02.628000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource02,2011-06-23 01:06:40.020000+02:00,task-35488,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-04 15:28:51.536000+02:00 +Internet,case-8823,2011-11-22 01:06:40+01:00,General,2011-10-10 09:55:02.628000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource02,2011-06-23 01:06:40.020000+02:00,task-35491,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-04 15:29:22.245000+02:00 +Internet,case-8833,2011-09-19 01:06:40+02:00,General,2011-08-30 15:15:19.487000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource12,2011-07-25 01:06:40.020000+02:00,task-33860,Confirmation of receipt,complete,EMPTY,Resource12,2011-08-04 08:46:14.618000+02:00 +Internet,case-8833,2011-09-19 01:06:40+02:00,General,2011-08-30 15:15:19.487000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource12,2011-07-25 01:06:40.020000+02:00,task-35203,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-08-04 08:47:53.498000+02:00 +Internet,case-8833,2011-09-19 01:06:40+02:00,General,2011-08-30 15:15:19.487000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource12,2011-07-25 01:06:40.020000+02:00,task-35206,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-08-04 08:48:19.265000+02:00 +Internet,case-8833,2011-09-19 01:06:40+02:00,General,2011-08-30 15:15:19.487000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource12,2011-07-25 01:06:40.020000+02:00,task-35207,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-08-04 08:48:57.489000+02:00 +Internet,case-8833,2011-09-19 01:06:40+02:00,General,2011-08-30 15:15:19.487000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource12,2011-07-25 01:06:40.020000+02:00,task-35205,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-04 08:50:07.551000+02:00 +Internet,case-8833,2011-09-19 01:06:40+02:00,General,2011-08-30 15:15:19.487000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource12,2011-07-25 01:06:40.020000+02:00,task-35210,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-08-04 09:02:32.279000+02:00 +Internet,case-8837,2011-08-30 01:06:40+02:00,General,2011-08-08 09:03:47.077000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-33935,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 09:48:32.895000+02:00 +Internet,case-8837,2011-08-30 01:06:40+02:00,General,2011-08-08 09:03:47.077000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-35267,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 09:48:57.447000+02:00 +Internet,case-8837,2011-08-30 01:06:40+02:00,General,2011-08-08 09:03:47.077000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-35269,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 09:49:16.196000+02:00 +Internet,case-8837,2011-08-30 01:06:40+02:00,General,2011-08-08 09:03:47.077000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-35270,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 09:49:31.871000+02:00 +Internet,case-8837,2011-08-30 01:06:40+02:00,General,2011-08-08 09:03:47.077000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-35268,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 09:49:46.636000+02:00 +Internet,case-8837,2011-08-30 01:06:40+02:00,General,2011-08-08 09:03:47.077000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-04 01:06:40.020000+02:00,task-35271,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 09:50:04.632000+02:00 +Internet,case-8839,2011-08-30 00:00:00+02:00,General,2012-01-18 09:56:50.954000+01:00,2011-08-30 00:00:00.020000+02:00,Group 5,Resource14,2011-07-04 01:06:40.020000+02:00,task-33947,Confirmation of receipt,complete,EMPTY,Resource14,2011-08-09 12:17:14.032000+02:00 +Internet,case-8839,2011-08-30 00:00:00+02:00,General,2012-01-18 09:56:50.954000+01:00,2011-08-30 00:00:00.020000+02:00,Group 5,Resource14,2011-07-04 01:06:40.020000+02:00,task-35919,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-09 12:17:42.423000+02:00 +Internet,case-8839,2011-08-30 00:00:00+02:00,General,2012-01-18 09:56:50.954000+01:00,2011-08-30 00:00:00.020000+02:00,Group 5,Resource14,2011-07-04 01:06:40.020000+02:00,task-35921,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-09 12:18:07.245000+02:00 +Internet,case-8839,2011-08-30 00:00:00+02:00,General,2012-01-18 09:56:50.954000+01:00,2011-08-30 00:00:00.020000+02:00,Group 5,Resource14,2011-07-04 01:06:40.020000+02:00,task-35922,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-09 12:18:35.706000+02:00 +Internet,case-8839,2011-08-30 00:00:00+02:00,General,2012-01-18 09:56:50.954000+01:00,2011-08-30 00:00:00.020000+02:00,Group 5,Resource14,2011-07-04 01:06:40.020000+02:00,task-35920,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-09 12:20:43.465000+02:00 +Internet,case-8839,2011-08-30 00:00:00+02:00,General,2012-01-18 09:56:50.954000+01:00,2011-08-30 00:00:00.020000+02:00,Group 5,Resource14,2011-07-04 01:06:40.020000+02:00,task-35923,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-09 12:21:07.616000+02:00 +Internet,case-8840,2011-09-20 01:06:40+02:00,General,2011-08-30 12:28:15.307000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource06,2011-07-26 01:06:40.020000+02:00,task-33951,Confirmation of receipt,complete,EMPTY,Resource06,2011-08-04 08:39:44.970000+02:00 +Internet,case-8840,2011-09-20 01:06:40+02:00,General,2011-08-30 12:28:15.307000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource06,2011-07-26 01:06:40.020000+02:00,task-35186,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-04 08:40:04.627000+02:00 +Internet,case-8840,2011-09-20 01:06:40+02:00,General,2011-08-30 12:28:15.307000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource06,2011-07-26 01:06:40.020000+02:00,task-35188,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-04 08:40:20.179000+02:00 +Internet,case-8840,2011-09-20 01:06:40+02:00,General,2011-08-30 12:28:15.307000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource06,2011-07-26 01:06:40.020000+02:00,task-35189,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-04 08:40:37.420000+02:00 +Internet,case-8840,2011-09-20 01:06:40+02:00,General,2011-08-30 12:28:15.307000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource06,2011-07-26 01:06:40.020000+02:00,task-35187,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-04 08:41:54.151000+02:00 +Internet,case-8840,2011-09-20 01:06:40+02:00,General,2011-08-30 12:28:15.307000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource06,2011-07-26 01:06:40.020000+02:00,task-35191,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-04 08:43:07.086000+02:00 +Internet,case-8841,2011-09-21 01:06:40+02:00,General,2011-08-18 08:10:00.879000+02:00,2011-09-21 01:06:40.020000+02:00,Group 8,Resource11,2011-07-27 01:06:40.020000+02:00,task-33967,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-11 08:53:05.442000+02:00 +Internet,case-8841,2011-09-21 01:06:40+02:00,General,2011-08-18 08:10:00.879000+02:00,2011-09-21 01:06:40.020000+02:00,Group 8,Resource11,2011-07-27 01:06:40.020000+02:00,task-36175,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-11 08:53:24.186000+02:00 +Internet,case-8841,2011-09-21 01:06:40+02:00,General,2011-08-18 08:10:00.879000+02:00,2011-09-21 01:06:40.020000+02:00,Group 8,Resource11,2011-07-27 01:06:40.020000+02:00,task-36177,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-11 08:53:40.240000+02:00 +Internet,case-8841,2011-09-21 01:06:40+02:00,General,2011-08-18 08:10:00.879000+02:00,2011-09-21 01:06:40.020000+02:00,Group 8,Resource11,2011-07-27 01:06:40.020000+02:00,task-36178,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-11 08:53:58.920000+02:00 +Internet,case-8841,2011-09-21 01:06:40+02:00,General,2011-08-18 08:10:00.879000+02:00,2011-09-21 01:06:40.020000+02:00,Group 8,Resource11,2011-07-27 01:06:40.020000+02:00,task-36176,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-11 08:54:39.774000+02:00 +Internet,case-8841,2011-09-21 01:06:40+02:00,General,2011-08-18 08:10:00.879000+02:00,2011-09-21 01:06:40.020000+02:00,Group 8,Resource11,2011-07-27 01:06:40.020000+02:00,task-36179,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-11 08:55:03.003000+02:00 +Internet,case-8842,2011-08-30 01:06:40+02:00,General,2011-08-08 08:41:27.017000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-33969,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 10:20:33.171000+02:00 +Internet,case-8842,2011-08-30 01:06:40+02:00,General,2011-08-08 08:41:27.017000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-35305,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 10:20:56.365000+02:00 +Internet,case-8842,2011-08-30 01:06:40+02:00,General,2011-08-08 08:41:27.017000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-35307,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 10:21:15.634000+02:00 +Internet,case-8842,2011-08-30 01:06:40+02:00,General,2011-08-08 08:41:27.017000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-35308,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 10:21:37.453000+02:00 +Internet,case-8842,2011-08-30 01:06:40+02:00,General,2011-08-08 08:41:27.017000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-35306,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 10:21:52.096000+02:00 +Internet,case-8842,2011-08-30 01:06:40+02:00,General,2011-08-08 08:41:27.017000+02:00,2011-08-30 01:06:40.020000+02:00,Group 8,Resource11,2011-07-05 01:06:40.020000+02:00,task-35309,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 10:22:31.296000+02:00 +Internet,case-8844,2011-09-21 01:06:40+02:00,General,2011-11-22 09:38:17.689000+01:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource02,2011-07-27 01:06:40.020000+02:00,task-33978,Confirmation of receipt,complete,EMPTY,Resource02,2011-08-19 11:12:50.362000+02:00 +Internet,case-8844,2011-09-21 01:06:40+02:00,General,2011-11-22 09:38:17.689000+01:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource02,2011-07-27 01:06:40.020000+02:00,task-36811,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-19 11:17:17.445000+02:00 +Internet,case-8844,2011-09-21 01:06:40+02:00,General,2011-11-22 09:38:17.689000+01:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource02,2011-07-27 01:06:40.020000+02:00,task-36813,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-19 11:17:53.079000+02:00 +Internet,case-8844,2011-09-21 01:06:40+02:00,General,2011-11-22 09:38:17.689000+01:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource02,2011-07-27 01:06:40.020000+02:00,task-36814,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-19 11:18:20.997000+02:00 +Internet,case-8844,2011-09-21 01:06:40+02:00,General,2011-11-22 09:38:17.689000+01:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource02,2011-07-27 01:06:40.020000+02:00,task-36812,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-19 11:21:01.840000+02:00 +Internet,case-8844,2011-09-21 01:06:40+02:00,General,2011-11-22 09:38:17.689000+01:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource02,2011-07-27 01:06:40.020000+02:00,task-36815,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-19 11:22:01.653000+02:00 +Internet,case-8847,2011-09-21 01:06:40+02:00,General,2011-08-30 14:37:31.919000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource05,2011-07-27 01:06:40.020000+02:00,task-34003,Confirmation of receipt,complete,EMPTY,Resource05,2011-08-03 10:01:03.756000+02:00 +Internet,case-8847,2011-09-21 01:06:40+02:00,General,2011-08-30 14:37:31.919000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource05,2011-07-27 01:06:40.020000+02:00,task-35029,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-08-03 10:01:28.231000+02:00 +Internet,case-8847,2011-09-21 01:06:40+02:00,General,2011-08-30 14:37:31.919000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource05,2011-07-27 01:06:40.020000+02:00,task-35031,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-03 10:02:08.192000+02:00 +Internet,case-8847,2011-09-21 01:06:40+02:00,General,2011-08-30 14:37:31.919000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource05,2011-07-27 01:06:40.020000+02:00,task-35032,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-03 10:02:35.898000+02:00 +Internet,case-8847,2011-09-21 01:06:40+02:00,General,2011-08-30 14:37:31.919000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource05,2011-07-27 01:06:40.020000+02:00,task-35030,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-03 10:03:20.534000+02:00 +Internet,case-8847,2011-09-21 01:06:40+02:00,General,2011-08-30 14:37:31.919000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource05,2011-07-27 01:06:40.020000+02:00,task-35033,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-03 10:07:21.748000+02:00 +Internet,case-8848,2011-09-22 11:42:57.229000+02:00,General,2011-08-09 09:33:16.510000+02:00,2011-09-22 11:42:57.229000+02:00,Group 8,Resource11,2011-07-28 11:42:57.229000+02:00,task-34018,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 09:59:05.463000+02:00 +Internet,case-8848,2011-09-22 11:42:57.229000+02:00,General,2011-08-09 09:33:16.510000+02:00,2011-09-22 11:42:57.229000+02:00,Group 8,Resource11,2011-07-28 11:42:57.229000+02:00,task-35287,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 09:59:27.085000+02:00 +Internet,case-8848,2011-09-22 11:42:57.229000+02:00,General,2011-08-09 09:33:16.510000+02:00,2011-09-22 11:42:57.229000+02:00,Group 8,Resource11,2011-07-28 11:42:57.229000+02:00,task-35289,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 09:59:43.384000+02:00 +Internet,case-8848,2011-09-22 11:42:57.229000+02:00,General,2011-08-09 09:33:16.510000+02:00,2011-09-22 11:42:57.229000+02:00,Group 8,Resource11,2011-07-28 11:42:57.229000+02:00,task-35290,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 10:00:01.088000+02:00 +Internet,case-8848,2011-09-22 11:42:57.229000+02:00,General,2011-08-09 09:33:16.510000+02:00,2011-09-22 11:42:57.229000+02:00,Group 8,Resource11,2011-07-28 11:42:57.229000+02:00,task-35288,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 10:00:17.269000+02:00 +Internet,case-8848,2011-09-22 11:42:57.229000+02:00,General,2011-08-09 09:33:16.510000+02:00,2011-09-22 11:42:57.229000+02:00,Group 8,Resource11,2011-07-28 11:42:57.229000+02:00,task-35291,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 10:00:37.127000+02:00 +Internet,case-8849,2011-08-31 01:06:40+02:00,General,2011-08-04 11:29:19.019000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource04,2011-07-05 01:06:40.020000+02:00,task-34026,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-03 15:55:27.259000+02:00 +Internet,case-8849,2011-08-31 01:06:40+02:00,General,2011-08-04 11:29:19.019000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource04,2011-07-05 01:06:40.020000+02:00,task-35131,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-03 15:55:49.201000+02:00 +Internet,case-8849,2011-08-31 01:06:40+02:00,General,2011-08-04 11:29:19.019000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource04,2011-07-05 01:06:40.020000+02:00,task-35134,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-03 15:56:19.760000+02:00 +Internet,case-8849,2011-08-31 01:06:40+02:00,General,2011-08-04 11:29:19.019000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource04,2011-07-05 01:06:40.020000+02:00,task-35136,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-03 15:56:49.992000+02:00 +Internet,case-8849,2011-08-31 01:06:40+02:00,General,2011-08-04 11:29:19.019000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource04,2011-07-05 01:06:40.020000+02:00,task-35132,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-03 15:57:10.427000+02:00 +Internet,case-8849,2011-08-31 01:06:40+02:00,General,2011-08-04 11:29:19.019000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource04,2011-07-05 01:06:40.020000+02:00,task-35139,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-03 15:57:39.056000+02:00 +Internet,case-8851,2011-09-01 01:06:40+02:00,General,,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-34085,Confirmation of receipt,complete,EMPTY,Resource14,2011-08-10 12:24:02.297000+02:00 +Internet,case-8851,2011-09-01 01:06:40+02:00,General,,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-36078,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-10 12:24:35.513000+02:00 +Internet,case-8851,2011-09-01 01:06:40+02:00,General,,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-36080,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-10 12:25:07.162000+02:00 +Internet,case-8851,2011-09-01 01:06:40+02:00,General,,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-36081,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-10 12:25:46.856000+02:00 +Internet,case-8851,2011-09-01 01:06:40+02:00,General,,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-36079,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-10 12:26:11.567000+02:00 +Internet,case-8851,2011-09-01 01:06:40+02:00,General,,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-36082,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-10 12:26:35.180000+02:00 +Internet,case-8852,2011-09-01 01:06:40+02:00,General,2011-08-29 12:24:36.662000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-34094,Confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:40:30.301000+02:00 +Internet,case-8852,2011-09-01 01:06:40+02:00,General,2011-08-29 12:24:36.662000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-35105,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-08-03 15:42:29.092000+02:00 +Internet,case-8852,2011-09-01 01:06:40+02:00,General,2011-08-29 12:24:36.662000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-35106,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-08-03 15:42:45.748000+02:00 +Internet,case-8852,2011-09-01 01:06:40+02:00,General,2011-08-29 12:24:36.662000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-35104,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:43:25.988000+02:00 +Internet,case-8852,2011-09-01 01:06:40+02:00,General,2011-08-29 12:24:36.662000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-35108,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:43:57.368000+02:00 +Internet,case-8852,2011-09-01 01:06:40+02:00,General,2011-08-29 12:24:36.662000+02:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource13,2011-07-07 01:06:40.020000+02:00,task-35109,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:44:19.909000+02:00 +Internet,case-8853,2011-08-31 01:06:40+02:00,General,2011-08-29 12:52:51.806000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource13,2011-07-06 01:06:40.020000+02:00,task-34096,Confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:04:37.733000+02:00 +Internet,case-8853,2011-08-31 01:06:40+02:00,General,2011-08-29 12:52:51.806000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource13,2011-07-06 01:06:40.020000+02:00,task-35081,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:07:43.270000+02:00 +Internet,case-8853,2011-08-31 01:06:40+02:00,General,2011-08-29 12:52:51.806000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource13,2011-07-06 01:06:40.020000+02:00,task-35083,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:08:16.825000+02:00 +Internet,case-8853,2011-08-31 01:06:40+02:00,General,2011-08-29 12:52:51.806000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource13,2011-07-06 01:06:40.020000+02:00,task-35084,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-08-03 15:08:43.505000+02:00 +Internet,case-8853,2011-08-31 01:06:40+02:00,General,2011-08-29 12:52:51.806000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource13,2011-07-06 01:06:40.020000+02:00,task-35082,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-08-03 15:08:58.365000+02:00 +Internet,case-8853,2011-08-31 01:06:40+02:00,General,2011-08-29 12:52:51.806000+02:00,2011-08-31 01:06:40.020000+02:00,Group 5,Resource13,2011-07-06 01:06:40.020000+02:00,task-35085,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-08-03 15:09:14.162000+02:00 +Internet,case-8854,2011-08-04 01:06:40+02:00,General,2011-10-05 09:14:52.564000+02:00,2011-08-04 01:06:40.020000+02:00,Group 11,Resource24,2011-06-09 01:06:40.020000+02:00,task-34097,Confirmation of receipt,complete,EMPTY,Resource09,2011-08-02 15:36:37.720000+02:00 +Internet,case-8854,2011-08-04 01:06:40+02:00,General,2011-10-05 09:14:52.564000+02:00,2011-08-04 01:06:40.020000+02:00,Group 11,Resource24,2011-06-09 01:06:40.020000+02:00,task-34949,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-08-02 15:38:12.025000+02:00 +Internet,case-8854,2011-08-04 01:06:40+02:00,General,2011-10-05 09:14:52.564000+02:00,2011-08-04 01:06:40.020000+02:00,Group 11,Resource24,2011-06-09 01:06:40.020000+02:00,task-34951,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-08-02 15:38:38.518000+02:00 +Internet,case-8854,2011-08-04 01:06:40+02:00,General,2011-10-05 09:14:52.564000+02:00,2011-08-04 01:06:40.020000+02:00,Group 11,Resource24,2011-06-09 01:06:40.020000+02:00,task-34952,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-08-02 15:39:04.276000+02:00 +Internet,case-8854,2011-08-04 01:06:40+02:00,General,2011-10-05 09:14:52.564000+02:00,2011-08-04 01:06:40.020000+02:00,Group 11,Resource24,2011-06-09 01:06:40.020000+02:00,task-34950,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-08-02 15:39:28.302000+02:00 +Internet,case-8854,2011-08-04 01:06:40+02:00,General,2011-10-05 09:14:52.564000+02:00,2011-08-04 01:06:40.020000+02:00,Group 11,Resource24,2011-06-09 01:06:40.020000+02:00,task-34953,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-08-02 15:40:08.563000+02:00 +Internet,case-8855,2011-09-01 01:06:40+02:00,General,2011-08-18 07:55:06.759000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-34113,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 13:11:13.023000+02:00 +Internet,case-8855,2011-09-01 01:06:40+02:00,General,2011-08-18 07:55:06.759000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-35402,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 13:12:02.623000+02:00 +Internet,case-8855,2011-09-01 01:06:40+02:00,General,2011-08-18 07:55:06.759000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-35404,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 13:12:51.212000+02:00 +Internet,case-8855,2011-09-01 01:06:40+02:00,General,2011-08-18 07:55:06.759000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-35405,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 13:13:20.800000+02:00 +Internet,case-8855,2011-09-01 01:06:40+02:00,General,2011-08-18 07:55:06.759000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-35403,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 13:13:56.694000+02:00 +Internet,case-8855,2011-09-01 01:06:40+02:00,General,2011-08-18 07:55:06.759000+02:00,2011-09-01 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-35407,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 13:14:15.811000+02:00 +Internet,case-8856,2011-09-02 01:06:40+02:00,General,2011-10-04 08:42:50.217000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource01,2011-07-08 01:06:40.020000+02:00,task-34131,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 12:03:43.336000+02:00 +Internet,case-8856,2011-09-02 01:06:40+02:00,General,2011-10-04 08:42:50.217000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource01,2011-07-08 01:06:40.020000+02:00,task-35366,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 12:46:28.880000+02:00 +Internet,case-8856,2011-09-02 01:06:40+02:00,General,2011-10-04 08:42:50.217000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource01,2011-07-08 01:06:40.020000+02:00,task-35383,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 12:47:05.201000+02:00 +Internet,case-8856,2011-09-02 01:06:40+02:00,General,2011-10-04 08:42:50.217000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource01,2011-07-08 01:06:40.020000+02:00,task-35385,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 12:48:05.459000+02:00 +Internet,case-8856,2011-09-02 01:06:40+02:00,General,2011-10-04 08:42:50.217000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource01,2011-07-08 01:06:40.020000+02:00,task-35367,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 12:48:34.861000+02:00 +Internet,case-8856,2011-09-02 01:06:40+02:00,General,2011-10-04 08:42:50.217000+02:00,2011-09-02 01:06:40.020000+02:00,Group 8,Resource01,2011-07-08 01:06:40.020000+02:00,task-35387,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 12:49:44.542000+02:00 +Internet,case-8858,2011-09-01 01:06:40+02:00,General,2011-11-09 16:11:48.715000+01:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-34153,Confirmation of receipt,complete,EMPTY,Resource14,2011-08-16 14:13:19.944000+02:00 +Internet,case-8858,2011-09-01 01:06:40+02:00,General,2011-11-09 16:11:48.715000+01:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-36543,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-16 14:26:06.687000+02:00 +Internet,case-8858,2011-09-01 01:06:40+02:00,General,2011-11-09 16:11:48.715000+01:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-36544,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-16 14:28:19.502000+02:00 +Internet,case-8858,2011-09-01 01:06:40+02:00,General,2011-11-09 16:11:48.715000+01:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-36553,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-16 14:28:47.911000+02:00 +Internet,case-8858,2011-09-01 01:06:40+02:00,General,2011-11-09 16:11:48.715000+01:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-36551,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-16 14:30:58.954000+02:00 +Internet,case-8858,2011-09-01 01:06:40+02:00,General,2011-11-09 16:11:48.715000+01:00,2011-09-01 01:06:40.020000+02:00,Group 5,Resource14,2011-07-07 01:06:40.020000+02:00,task-36560,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-16 14:31:53.449000+02:00 +Internet,case-8863,2011-10-19 01:06:40+02:00,General,2011-10-04 15:36:34.804000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource02,2011-07-11 01:06:40.020000+02:00,task-34196,Confirmation of receipt,complete,EMPTY,Resource02,2011-08-08 14:38:14.155000+02:00 +Internet,case-8863,2011-10-19 01:06:40+02:00,General,2011-10-04 15:36:34.804000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource02,2011-07-11 01:06:40.020000+02:00,task-35677,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-08 14:39:00.312000+02:00 +Internet,case-8863,2011-10-19 01:06:40+02:00,General,2011-10-04 15:36:34.804000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource02,2011-07-11 01:06:40.020000+02:00,task-35679,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-08 14:39:22.139000+02:00 +Internet,case-8863,2011-10-19 01:06:40+02:00,General,2011-10-04 15:36:34.804000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource02,2011-07-11 01:06:40.020000+02:00,task-35680,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-08 14:39:55.089000+02:00 +Internet,case-8863,2011-10-19 01:06:40+02:00,General,2011-10-04 15:36:34.804000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource02,2011-07-11 01:06:40.020000+02:00,task-35678,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-08 14:40:18.949000+02:00 +Internet,case-8863,2011-10-19 01:06:40+02:00,General,2011-10-04 15:36:34.804000+02:00,2011-10-19 01:06:40.020000+02:00,Group 5,Resource02,2011-07-11 01:06:40.020000+02:00,task-35681,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-08 14:42:56.289000+02:00 +Internet,case-8864,2011-09-06 01:06:40+02:00,General,2011-08-18 08:01:10.666000+02:00,2011-09-06 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-34230,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-04 15:31:38.201000+02:00 +Internet,case-8864,2011-09-06 01:06:40+02:00,General,2011-08-18 08:01:10.666000+02:00,2011-09-06 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-35493,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-04 15:32:00.946000+02:00 +Internet,case-8864,2011-09-06 01:06:40+02:00,General,2011-08-18 08:01:10.666000+02:00,2011-09-06 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-35495,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-04 15:32:18.665000+02:00 +Internet,case-8864,2011-09-06 01:06:40+02:00,General,2011-08-18 08:01:10.666000+02:00,2011-09-06 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-35496,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-04 15:32:35.742000+02:00 +Internet,case-8864,2011-09-06 01:06:40+02:00,General,2011-08-18 08:01:10.666000+02:00,2011-09-06 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-35494,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-04 15:32:52.326000+02:00 +Internet,case-8864,2011-09-06 01:06:40+02:00,General,2011-08-18 08:01:10.666000+02:00,2011-09-06 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-35497,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-04 15:33:10.015000+02:00 +Internet,case-8905,2011-09-26 01:06:40+02:00,General,2011-08-02 10:41:40.140000+02:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource02,2011-08-01 01:06:40.020000+02:00,task-34681,Confirmation of receipt,complete,Group 1,Resource02,2011-08-01 15:20:40.408000+02:00 +Internet,case-8905,2011-09-26 01:06:40+02:00,General,2011-08-02 10:41:40.140000+02:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource02,2011-08-01 01:06:40.020000+02:00,task-34760,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-01 15:21:05.210000+02:00 +Internet,case-8905,2011-09-26 01:06:40+02:00,General,2011-08-02 10:41:40.140000+02:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource02,2011-08-01 01:06:40.020000+02:00,task-34763,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-01 15:21:22.927000+02:00 +Internet,case-8905,2011-09-26 01:06:40+02:00,General,2011-08-02 10:41:40.140000+02:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource02,2011-08-01 01:06:40.020000+02:00,task-34764,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-01 15:21:42.340000+02:00 +Internet,case-8905,2011-09-26 01:06:40+02:00,General,2011-08-02 10:41:40.140000+02:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource02,2011-08-01 01:06:40.020000+02:00,task-34761,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-01 15:23:51.774000+02:00 +Internet,case-8905,2011-09-26 01:06:40+02:00,General,2011-08-02 10:41:40.140000+02:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource02,2011-08-01 01:06:40.020000+02:00,task-34769,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-01 15:24:23.013000+02:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-4,Confirmation of receipt,complete,Group 1,Resource26,2010-10-02 09:20:39.266000+02:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-5,T02 Check confirmation of receipt,complete,Group 4,Resource26,2010-10-02 09:21:26.588000+02:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-7,T03 Adjust confirmation of receipt,complete,Group 1,Resource26,2010-10-02 09:31:12.836000+02:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-8,T02 Check confirmation of receipt,complete,Group 4,Resource26,2010-10-02 09:31:40.160000+02:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-9,T03 Adjust confirmation of receipt,complete,Group 1,Resource26,2010-10-02 09:32:01.401000+02:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-10,T02 Check confirmation of receipt,complete,Group 4,Resource21,2010-11-09 14:13:52.563000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1275,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2010-11-09 14:14:10.016000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1276,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2010-11-09 14:14:22.628000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-6,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2010-11-09 14:14:37.300000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1277,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource21,2010-11-09 14:17:36.097000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1278,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2010-11-10 07:52:33.800000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1335,T07-1 Draft intern advice aspect 1,complete,Group 13,Resource26,2010-11-10 07:52:51.041000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1336,T06 Determine necessity of stop advice,complete,Group 1,Resource26,2010-11-10 07:53:08.065000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1337,T10 Determine necessity to stop indication,complete,Group 1,admin1,2010-11-10 09:38:45.959000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1338,T11 Create document X request unlicensed,complete,Group 1,admin1,2010-11-10 09:38:57.202000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1339,T12 Check document X request unlicensed,complete,Group 4,admin1,2010-11-10 09:39:07.674000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1340,T14 Determine document X request unlicensed,complete,Group 3,admin1,2010-11-10 09:39:21.494000+01:00 +Internet,case-891,2010-11-26 00:00:00+01:00,General,2010-11-12 13:40:44.661000+01:00,2010-11-26 00:00:00.010000+01:00,,Resource26,2010-10-01 00:00:00.020000+02:00,task-1341,T15 Print document X request unlicensed,complete,Group 2,Resource26,2010-11-12 13:40:44.291000+01:00 +Internet,case-8919,2011-09-29 01:06:40+02:00,General,2011-09-12 10:44:33.854000+02:00,2011-09-29 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-34927,Confirmation of receipt,complete,EMPTY,Resource01,2011-08-10 10:27:23.598000+02:00 +Internet,case-8919,2011-09-29 01:06:40+02:00,General,2011-09-12 10:44:33.854000+02:00,2011-09-29 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-36024,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-10 10:35:09.945000+02:00 +Internet,case-8919,2011-09-29 01:06:40+02:00,General,2011-09-12 10:44:33.854000+02:00,2011-09-29 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-36026,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-10 10:35:54.845000+02:00 +Internet,case-8919,2011-09-29 01:06:40+02:00,General,2011-09-12 10:44:33.854000+02:00,2011-09-29 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-36027,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-10 10:36:35.526000+02:00 +Internet,case-8919,2011-09-29 01:06:40+02:00,General,2011-09-12 10:44:33.854000+02:00,2011-09-29 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-36025,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-10 10:37:22.264000+02:00 +Internet,case-8919,2011-09-29 01:06:40+02:00,General,2011-09-12 10:44:33.854000+02:00,2011-09-29 01:06:40.020000+02:00,Group 8,Resource11,2011-07-12 01:06:40.020000+02:00,task-36028,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-10 10:44:06.780000+02:00 +Internet,case-8921,2011-08-18 01:06:40+02:00,General,2011-08-09 14:32:23.632000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource04,2011-06-22 01:06:40.020000+02:00,task-34930,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-09 12:38:23.664000+02:00 +Internet,case-8921,2011-08-18 01:06:40+02:00,General,2011-08-09 14:32:23.632000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource04,2011-06-22 01:06:40.020000+02:00,task-35933,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-09 12:38:53.023000+02:00 +Internet,case-8921,2011-08-18 01:06:40+02:00,General,2011-08-09 14:32:23.632000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource04,2011-06-22 01:06:40.020000+02:00,task-35936,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-09 12:39:17.208000+02:00 +Internet,case-8921,2011-08-18 01:06:40+02:00,General,2011-08-09 14:32:23.632000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource04,2011-06-22 01:06:40.020000+02:00,task-35937,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-09 12:39:35.544000+02:00 +Internet,case-8921,2011-08-18 01:06:40+02:00,General,2011-08-09 14:32:23.632000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource04,2011-06-22 01:06:40.020000+02:00,task-35934,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-09 12:39:51.234000+02:00 +Internet,case-8921,2011-08-18 01:06:40+02:00,General,2011-08-09 14:32:23.632000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource04,2011-06-22 01:06:40.020000+02:00,task-35939,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-09 12:40:09.569000+02:00 +Internet,case-8921,2011-08-18 01:06:40+02:00,General,2011-08-09 14:32:23.632000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource04,2011-06-22 01:06:40.020000+02:00,task-35940,T11 Create document X request unlicensed,complete,Group 1,Resource04,2011-08-09 14:31:12.429000+02:00 +Internet,case-8921,2011-08-18 01:06:40+02:00,General,2011-08-09 14:32:23.632000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource04,2011-06-22 01:06:40.020000+02:00,task-35959,T12 Check document X request unlicensed,complete,Group 4,Resource04,2011-08-09 14:31:33.293000+02:00 +Internet,case-8921,2011-08-18 01:06:40+02:00,General,2011-08-09 14:32:23.632000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource04,2011-06-22 01:06:40.020000+02:00,task-35960,T14 Determine document X request unlicensed,complete,Group 3,Resource04,2011-08-09 14:32:00.893000+02:00 +Internet,case-8921,2011-08-18 01:06:40+02:00,General,2011-08-09 14:32:23.632000+02:00,2011-08-18 01:06:40.020000+02:00,Group 5,Resource04,2011-06-22 01:06:40.020000+02:00,task-35961,T15 Print document X request unlicensed,complete,Group 2,Resource04,2011-08-09 14:32:23.487000+02:00 +Internet,case-8922,2011-09-20 01:06:40+02:00,General,2011-09-14 11:50:53.694000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource04,2011-07-14 01:06:40.020000+02:00,task-34947,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-08 14:56:56.883000+02:00 +Internet,case-8922,2011-09-20 01:06:40+02:00,General,2011-09-14 11:50:53.694000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource04,2011-07-14 01:06:40.020000+02:00,task-35703,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-08 14:57:18.359000+02:00 +Internet,case-8922,2011-09-20 01:06:40+02:00,General,2011-09-14 11:50:53.694000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource04,2011-07-14 01:06:40.020000+02:00,task-35705,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-08 14:57:37.893000+02:00 +Internet,case-8922,2011-09-20 01:06:40+02:00,General,2011-09-14 11:50:53.694000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource04,2011-07-14 01:06:40.020000+02:00,task-35706,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-08 14:57:57.968000+02:00 +Internet,case-8922,2011-09-20 01:06:40+02:00,General,2011-09-14 11:50:53.694000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource04,2011-07-14 01:06:40.020000+02:00,task-35704,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-08 15:15:44.899000+02:00 +Internet,case-8922,2011-09-20 01:06:40+02:00,General,2011-09-14 11:50:53.694000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource04,2011-07-14 01:06:40.020000+02:00,task-35717,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-08 15:16:10.956000+02:00 +Internet,case-8923,2011-11-08 01:06:40+01:00,General,2011-10-04 11:51:03.131000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource13,2011-07-25 01:06:40.020000+02:00,task-34958,Confirmation of receipt,complete,EMPTY,Resource13,2011-08-15 09:37:07.097000+02:00 +Internet,case-8923,2011-11-08 01:06:40+01:00,General,2011-10-04 11:51:03.131000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource13,2011-07-25 01:06:40.020000+02:00,task-36413,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-08-15 09:37:27.921000+02:00 +Internet,case-8923,2011-11-08 01:06:40+01:00,General,2011-10-04 11:51:03.131000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource13,2011-07-25 01:06:40.020000+02:00,task-36414,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-08-15 09:37:46.677000+02:00 +Internet,case-8923,2011-11-08 01:06:40+01:00,General,2011-10-04 11:51:03.131000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource13,2011-07-25 01:06:40.020000+02:00,task-36412,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-08-15 09:38:23.127000+02:00 +Internet,case-8923,2011-11-08 01:06:40+01:00,General,2011-10-04 11:51:03.131000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource13,2011-07-25 01:06:40.020000+02:00,task-36416,T04 Determine confirmation of receipt,complete,Group 3,Resource13,2011-08-15 09:38:43.809000+02:00 +Internet,case-8923,2011-11-08 01:06:40+01:00,General,2011-10-04 11:51:03.131000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource13,2011-07-25 01:06:40.020000+02:00,task-36417,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-08-15 09:39:11.485000+02:00 +Internet,case-8932,2011-09-09 01:06:40+02:00,General,2011-08-15 09:04:11.312000+02:00,2011-09-09 01:06:40.020000+02:00,Group 5,Resource09,2011-07-15 01:06:40.020000+02:00,task-34989,Confirmation of receipt,complete,Group 1,admin2,2011-08-15 09:04:12.097000+02:00 +Internet,case-8934,2011-09-19 01:06:40+02:00,General,2011-09-12 14:12:18.624000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource05,2011-07-25 01:06:40.020000+02:00,task-35001,Confirmation of receipt,complete,Group 1,Resource05,2011-08-11 09:25:50.571000+02:00 +Internet,case-8934,2011-09-19 01:06:40+02:00,General,2011-09-12 14:12:18.624000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource05,2011-07-25 01:06:40.020000+02:00,task-36219,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-08-11 09:26:19.437000+02:00 +Internet,case-8934,2011-09-19 01:06:40+02:00,General,2011-09-12 14:12:18.624000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource05,2011-07-25 01:06:40.020000+02:00,task-36218,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-08-11 09:26:42.058000+02:00 +Internet,case-8934,2011-09-19 01:06:40+02:00,General,2011-09-12 14:12:18.624000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource05,2011-07-25 01:06:40.020000+02:00,task-36221,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-08-11 09:27:01.459000+02:00 +Internet,case-8934,2011-09-19 01:06:40+02:00,General,2011-09-12 14:12:18.624000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource05,2011-07-25 01:06:40.020000+02:00,task-36222,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-08-11 09:27:41.372000+02:00 +Internet,case-8934,2011-09-19 01:06:40+02:00,General,2011-09-12 14:12:18.624000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource05,2011-07-25 01:06:40.020000+02:00,task-36220,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-08-11 09:28:37.415000+02:00 +Internet,case-8936,2011-11-01 01:06:40+01:00,General,2011-11-07 15:47:19.133000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-35028,Confirmation of receipt,complete,Group 1,Resource02,2011-08-10 15:03:16.600000+02:00 +Internet,case-8936,2011-11-01 01:06:40+01:00,General,2011-11-07 15:47:19.133000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-36116,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-10 15:03:43.965000+02:00 +Internet,case-8936,2011-11-01 01:06:40+01:00,General,2011-11-07 15:47:19.133000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-36118,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-10 15:04:03.653000+02:00 +Internet,case-8936,2011-11-01 01:06:40+01:00,General,2011-11-07 15:47:19.133000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-36119,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-10 15:04:22.437000+02:00 +Internet,case-8936,2011-11-01 01:06:40+01:00,General,2011-11-07 15:47:19.133000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-36117,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-10 15:04:39.823000+02:00 +Internet,case-8936,2011-11-01 01:06:40+01:00,General,2011-11-07 15:47:19.133000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-36120,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-10 15:23:58.423000+02:00 +Internet,case-8954,2011-11-18 01:06:40+01:00,General,2011-11-16 10:10:47.056000+01:00,2011-11-18 01:06:40.010000+01:00,Group 5,Resource23,2011-07-22 01:06:40.020000+02:00,task-35230,Confirmation of receipt,complete,Group 1,Resource04,2011-08-04 11:33:25.033000+02:00 +Internet,case-8954,2011-11-18 01:06:40+01:00,General,2011-11-16 10:10:47.056000+01:00,2011-11-18 01:06:40.010000+01:00,Group 5,Resource23,2011-07-22 01:06:40.020000+02:00,task-35355,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-04 11:33:47.076000+02:00 +Internet,case-8954,2011-11-18 01:06:40+01:00,General,2011-11-16 10:10:47.056000+01:00,2011-11-18 01:06:40.010000+01:00,Group 5,Resource23,2011-07-22 01:06:40.020000+02:00,task-35357,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-04 11:34:05.872000+02:00 +Internet,case-8954,2011-11-18 01:06:40+01:00,General,2011-11-16 10:10:47.056000+01:00,2011-11-18 01:06:40.010000+01:00,Group 5,Resource23,2011-07-22 01:06:40.020000+02:00,task-35358,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-04 11:34:24.912000+02:00 +Internet,case-8954,2011-11-18 01:06:40+01:00,General,2011-11-16 10:10:47.056000+01:00,2011-11-18 01:06:40.010000+01:00,Group 5,Resource23,2011-07-22 01:06:40.020000+02:00,task-35356,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-04 11:34:42.221000+02:00 +Internet,case-8954,2011-11-18 01:06:40+01:00,General,2011-11-16 10:10:47.056000+01:00,2011-11-18 01:06:40.010000+01:00,Group 5,Resource23,2011-07-22 01:06:40.020000+02:00,task-35359,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-04 11:35:01.839000+02:00 +Internet,case-8958,2011-09-16 01:06:40+02:00,General,2011-10-31 16:46:01.941000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource14,2011-07-22 01:06:40.020000+02:00,task-35321,Confirmation of receipt,complete,Group 1,Resource14,2011-08-09 10:11:55.902000+02:00 +Internet,case-8958,2011-09-16 01:06:40+02:00,General,2011-10-31 16:46:01.941000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource14,2011-07-22 01:06:40.020000+02:00,task-35870,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-09 10:12:36.770000+02:00 +Internet,case-8958,2011-09-16 01:06:40+02:00,General,2011-10-31 16:46:01.941000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource14,2011-07-22 01:06:40.020000+02:00,task-35872,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-09 10:12:56.494000+02:00 +Internet,case-8958,2011-09-16 01:06:40+02:00,General,2011-10-31 16:46:01.941000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource14,2011-07-22 01:06:40.020000+02:00,task-35873,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-09 10:13:22.672000+02:00 +Internet,case-8958,2011-09-16 01:06:40+02:00,General,2011-10-31 16:46:01.941000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource14,2011-07-22 01:06:40.020000+02:00,task-35871,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-09 10:41:14.999000+02:00 +Internet,case-8958,2011-09-16 01:06:40+02:00,General,2011-10-31 16:46:01.941000+01:00,2011-09-16 01:06:40.020000+02:00,Group 5,Resource14,2011-07-22 01:06:40.020000+02:00,task-35878,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-09 10:43:50.060000+02:00 +Internet,case-8959,2011-09-23 01:06:40+02:00,General,2011-09-12 13:55:36.171000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-35353,Confirmation of receipt,complete,Group 1,Resource01,2011-08-10 14:16:59.274000+02:00 +Internet,case-8959,2011-09-23 01:06:40+02:00,General,2011-09-12 13:55:36.171000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36092,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-10 14:17:22.152000+02:00 +Internet,case-8959,2011-09-23 01:06:40+02:00,General,2011-09-12 13:55:36.171000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36094,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-10 14:17:50.313000+02:00 +Internet,case-8959,2011-09-23 01:06:40+02:00,General,2011-09-12 13:55:36.171000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36095,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-10 14:18:35.008000+02:00 +Internet,case-8959,2011-09-23 01:06:40+02:00,General,2011-09-12 13:55:36.171000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36093,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-10 14:19:30.470000+02:00 +Internet,case-8959,2011-09-23 01:06:40+02:00,General,2011-09-12 13:55:36.171000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36096,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-10 14:19:57.555000+02:00 +Internet,case-8962,2011-09-23 01:06:40+02:00,General,2011-08-18 08:15:43.236000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-35364,Confirmation of receipt,complete,Group 1,Resource01,2011-08-10 15:32:50.308000+02:00 +Internet,case-8962,2011-09-23 01:06:40+02:00,General,2011-08-18 08:15:43.236000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36133,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-10 15:33:35.557000+02:00 +Internet,case-8962,2011-09-23 01:06:40+02:00,General,2011-08-18 08:15:43.236000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36136,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-10 15:34:56.533000+02:00 +Internet,case-8962,2011-09-23 01:06:40+02:00,General,2011-08-18 08:15:43.236000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36139,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-10 15:35:20.702000+02:00 +Internet,case-8962,2011-09-23 01:06:40+02:00,General,2011-08-18 08:15:43.236000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36134,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-10 15:35:35.913000+02:00 +Internet,case-8962,2011-09-23 01:06:40+02:00,General,2011-08-18 08:15:43.236000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36140,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-10 15:36:05.724000+02:00 +Internet,case-8964,2011-09-23 01:06:40+02:00,General,2011-08-18 08:30:02.345000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-35417,Confirmation of receipt,complete,Group 1,Resource01,2011-08-11 09:17:34.597000+02:00 +Internet,case-8964,2011-09-23 01:06:40+02:00,General,2011-08-18 08:30:02.345000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36197,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-11 09:17:57.894000+02:00 +Internet,case-8964,2011-09-23 01:06:40+02:00,General,2011-08-18 08:30:02.345000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36199,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-11 09:18:25.057000+02:00 +Internet,case-8964,2011-09-23 01:06:40+02:00,General,2011-08-18 08:30:02.345000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36200,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-11 09:18:44.028000+02:00 +Internet,case-8964,2011-09-23 01:06:40+02:00,General,2011-08-18 08:30:02.345000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36198,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-11 09:19:04.671000+02:00 +Internet,case-8964,2011-09-23 01:06:40+02:00,General,2011-08-18 08:30:02.345000+02:00,2011-09-23 01:06:40.020000+02:00,Group 8,Resource11,2011-07-29 01:06:40.020000+02:00,task-36201,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-11 09:19:23.985000+02:00 +Internet,case-8967,2011-10-31 01:06:40+01:00,General,2011-10-28 15:56:53.545000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource04,2011-07-29 01:06:40.020000+02:00,task-35469,Confirmation of receipt,complete,Group 1,Resource04,2011-08-15 14:47:45.427000+02:00 +Internet,case-8967,2011-10-31 01:06:40+01:00,General,2011-10-28 15:56:53.545000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource04,2011-07-29 01:06:40.020000+02:00,task-36463,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-15 14:48:15.319000+02:00 +Internet,case-8967,2011-10-31 01:06:40+01:00,General,2011-10-28 15:56:53.545000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource04,2011-07-29 01:06:40.020000+02:00,task-36465,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-15 14:48:41.486000+02:00 +Internet,case-8967,2011-10-31 01:06:40+01:00,General,2011-10-28 15:56:53.545000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource04,2011-07-29 01:06:40.020000+02:00,task-36466,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-15 14:49:07.100000+02:00 +Internet,case-8967,2011-10-31 01:06:40+01:00,General,2011-10-28 15:56:53.545000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource04,2011-07-29 01:06:40.020000+02:00,task-36464,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-15 14:59:03.928000+02:00 +Internet,case-8967,2011-10-31 01:06:40+01:00,General,2011-10-28 15:56:53.545000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource04,2011-07-29 01:06:40.020000+02:00,task-36472,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-15 15:00:39.031000+02:00 +Internet,case-8969,2011-09-26 01:06:40+02:00,General,2011-09-08 00:00:00.020000+02:00,2011-09-26 01:06:40.020000+02:00,Group 8,Resource01,2011-08-01 01:06:40.020000+02:00,task-35484,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 08:59:20.294000+02:00 +Internet,case-8969,2011-09-26 01:06:40+02:00,General,2011-09-08 00:00:00.020000+02:00,2011-09-26 01:06:40.020000+02:00,Group 8,Resource01,2011-08-01 01:06:40.020000+02:00,task-38254,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 09:00:54.687000+02:00 +Internet,case-8969,2011-09-26 01:06:40+02:00,General,2011-09-08 00:00:00.020000+02:00,2011-09-26 01:06:40.020000+02:00,Group 8,Resource01,2011-08-01 01:06:40.020000+02:00,task-38256,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-09-09 09:22:30.850000+02:00 +Internet,case-8969,2011-09-26 01:06:40+02:00,General,2011-09-08 00:00:00.020000+02:00,2011-09-26 01:06:40.020000+02:00,Group 8,Resource01,2011-08-01 01:06:40.020000+02:00,task-38562,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-09-09 09:26:11.076000+02:00 +Internet,case-8969,2011-09-26 01:06:40+02:00,General,2011-09-08 00:00:00.020000+02:00,2011-09-26 01:06:40.020000+02:00,Group 8,Resource01,2011-08-01 01:06:40.020000+02:00,task-38255,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-09-15 09:36:09.253000+02:00 +Internet,case-8977,2011-09-23 01:06:40+02:00,General,,2011-09-23 01:06:40.020000+02:00,Group 5,Resource09,2011-07-29 01:06:40.020000+02:00,task-35530,Confirmation of receipt,complete,EMPTY,Resource30,2011-09-14 13:20:07.989000+02:00 +Internet,case-8982,2011-09-24 01:06:40+02:00,General,2011-08-30 10:01:11.614000+02:00,2011-09-24 01:06:40.020000+02:00,Group 5,Resource13,2011-07-30 01:06:40.020000+02:00,task-35535,Confirmation of receipt,complete,EMPTY,Resource13,2011-08-12 11:47:42.594000+02:00 +Internet,case-8982,2011-09-24 01:06:40+02:00,General,2011-08-30 10:01:11.614000+02:00,2011-09-24 01:06:40.020000+02:00,Group 5,Resource13,2011-07-30 01:06:40.020000+02:00,task-36341,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-08-12 11:49:37.019000+02:00 +Internet,case-8982,2011-09-24 01:06:40+02:00,General,2011-08-30 10:01:11.614000+02:00,2011-09-24 01:06:40.020000+02:00,Group 5,Resource13,2011-07-30 01:06:40.020000+02:00,task-36343,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-08-12 11:50:06.654000+02:00 +Internet,case-8982,2011-09-24 01:06:40+02:00,General,2011-08-30 10:01:11.614000+02:00,2011-09-24 01:06:40.020000+02:00,Group 5,Resource13,2011-07-30 01:06:40.020000+02:00,task-36344,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-08-12 11:52:49.567000+02:00 +Internet,case-8982,2011-09-24 01:06:40+02:00,General,2011-08-30 10:01:11.614000+02:00,2011-09-24 01:06:40.020000+02:00,Group 5,Resource13,2011-07-30 01:06:40.020000+02:00,task-36342,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-08-12 11:53:06.407000+02:00 +Internet,case-8982,2011-09-24 01:06:40+02:00,General,2011-08-30 10:01:11.614000+02:00,2011-09-24 01:06:40.020000+02:00,Group 5,Resource13,2011-07-30 01:06:40.020000+02:00,task-36345,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-08-12 11:54:03.012000+02:00 +Internet,case-8983,2011-11-05 01:06:40+01:00,General,2011-10-31 11:27:42.585000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource02,2011-07-30 01:06:40.020000+02:00,task-35536,Confirmation of receipt,complete,Group 1,Resource02,2011-08-22 08:46:15.702000+02:00 +Internet,case-8983,2011-11-05 01:06:40+01:00,General,2011-10-31 11:27:42.585000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource02,2011-07-30 01:06:40.020000+02:00,task-36885,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-22 08:47:11.778000+02:00 +Internet,case-8983,2011-11-05 01:06:40+01:00,General,2011-10-31 11:27:42.585000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource02,2011-07-30 01:06:40.020000+02:00,task-36887,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-22 09:05:22.802000+02:00 +Internet,case-8983,2011-11-05 01:06:40+01:00,General,2011-10-31 11:27:42.585000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource02,2011-07-30 01:06:40.020000+02:00,task-36888,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-22 09:22:41.469000+02:00 +Internet,case-8983,2011-11-05 01:06:40+01:00,General,2011-10-31 11:27:42.585000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource02,2011-07-30 01:06:40.020000+02:00,task-36886,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-09-25 18:17:48.604000+02:00 +Internet,case-8983,2011-11-05 01:06:40+01:00,General,2011-10-31 11:27:42.585000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource02,2011-07-30 01:06:40.020000+02:00,task-40229,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-09-25 18:18:16.498000+02:00 +Internet,case-8986,2011-09-26 01:06:40+02:00,General,2011-11-18 09:55:27.554000+01:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource14,2011-08-01 01:06:40.020000+02:00,task-35539,Confirmation of receipt,complete,Group 1,Resource14,2011-08-26 12:50:15.651000+02:00 +Internet,case-8986,2011-09-26 01:06:40+02:00,General,2011-11-18 09:55:27.554000+01:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource14,2011-08-01 01:06:40.020000+02:00,task-37226,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-26 12:50:37.469000+02:00 +Internet,case-8986,2011-09-26 01:06:40+02:00,General,2011-11-18 09:55:27.554000+01:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource14,2011-08-01 01:06:40.020000+02:00,task-37228,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-26 12:50:58.097000+02:00 +Internet,case-8986,2011-09-26 01:06:40+02:00,General,2011-11-18 09:55:27.554000+01:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource14,2011-08-01 01:06:40.020000+02:00,task-37229,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-26 12:51:21.604000+02:00 +Internet,case-8986,2011-09-26 01:06:40+02:00,General,2011-11-18 09:55:27.554000+01:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource14,2011-08-01 01:06:40.020000+02:00,task-37227,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-29 10:40:23.636000+02:00 +Internet,case-8986,2011-09-26 01:06:40+02:00,General,2011-11-18 09:55:27.554000+01:00,2011-09-26 01:06:40.020000+02:00,Group 5,Resource14,2011-08-01 01:06:40.020000+02:00,task-37315,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-29 10:40:44.349000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-35555,Confirmation of receipt,complete,Group 1,Resource12,2011-08-11 14:25:17.524000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36294,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-08-11 14:26:04.791000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36296,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-08-11 14:26:51.380000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36297,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-08-11 14:27:52.790000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36295,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-11 14:33:07.403000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36299,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource12,2011-08-11 14:35:16.881000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36300,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource12,2011-08-11 14:45:44.795000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36301,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-11 14:46:35.333000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36303,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource12,2011-08-11 14:47:03.653000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36302,T07-3 Draft intern advice hold for aspect 3,complete,Group 14,Resource12,2011-08-11 14:47:22.767000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36304,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-08-11 14:47:46.348000+02:00 +Internet,case-8989,2011-09-27 01:06:40+02:00,General,2011-09-19 16:54:45.917000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-36305,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-08-11 14:48:34.970000+02:00 +Internet,case-8992,2011-09-27 01:06:40+02:00,General,2011-09-01 00:00:00.020000+02:00,2011-09-27 01:06:40.020000+02:00,Group 5,Resource12,2011-08-02 01:06:40.020000+02:00,task-35558,Confirmation of receipt,complete,EMPTY,admin2,2011-09-26 08:35:08.169000+02:00 +Internet,case-8993,2011-11-05 01:06:40+01:00,General,2011-10-31 11:31:25.901000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource06,2011-08-03 01:06:40.020000+02:00,task-35559,Confirmation of receipt,complete,Group 1,Resource06,2011-08-10 08:46:13.009000+02:00 +Internet,case-8993,2011-11-05 01:06:40+01:00,General,2011-10-31 11:31:25.901000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource06,2011-08-03 01:06:40.020000+02:00,task-35994,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-10 08:46:40.893000+02:00 +Internet,case-8993,2011-11-05 01:06:40+01:00,General,2011-10-31 11:31:25.901000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource06,2011-08-03 01:06:40.020000+02:00,task-35996,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-10 08:47:00.406000+02:00 +Internet,case-8993,2011-11-05 01:06:40+01:00,General,2011-10-31 11:31:25.901000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource06,2011-08-03 01:06:40.020000+02:00,task-35997,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-10 08:47:21.444000+02:00 +Internet,case-8993,2011-11-05 01:06:40+01:00,General,2011-10-31 11:31:25.901000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource06,2011-08-03 01:06:40.020000+02:00,task-35995,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-10 08:47:37.307000+02:00 +Internet,case-8993,2011-11-05 01:06:40+01:00,General,2011-10-31 11:31:25.901000+01:00,2011-11-05 01:06:40.010000+01:00,Group 5,Resource06,2011-08-03 01:06:40.020000+02:00,task-35998,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-10 09:03:28.778000+02:00 +Internet,case-8998,2011-09-19 01:06:40+02:00,General,2011-11-25 10:13:25.412000+01:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource14,2011-07-25 01:06:40.020000+02:00,task-35583,Confirmation of receipt,complete,Group 1,Resource14,2011-08-11 09:19:07.312000+02:00 +Internet,case-8998,2011-09-19 01:06:40+02:00,General,2011-11-25 10:13:25.412000+01:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource14,2011-07-25 01:06:40.020000+02:00,task-36202,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-11 09:19:37.957000+02:00 +Internet,case-8998,2011-09-19 01:06:40+02:00,General,2011-11-25 10:13:25.412000+01:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource14,2011-07-25 01:06:40.020000+02:00,task-36205,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-11 09:20:17.986000+02:00 +Internet,case-8998,2011-09-19 01:06:40+02:00,General,2011-11-25 10:13:25.412000+01:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource14,2011-07-25 01:06:40.020000+02:00,task-36209,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-11 09:20:42.982000+02:00 +Internet,case-8998,2011-09-19 01:06:40+02:00,General,2011-11-25 10:13:25.412000+01:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource14,2011-07-25 01:06:40.020000+02:00,task-36203,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-11 10:19:57.784000+02:00 +Internet,case-8998,2011-09-19 01:06:40+02:00,General,2011-11-25 10:13:25.412000+01:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource14,2011-07-25 01:06:40.020000+02:00,task-36239,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-11 10:20:33.780000+02:00 +Internet,case-9004,2011-09-21 01:06:40+02:00,General,2011-10-17 16:51:57.398000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource14,2011-07-27 01:06:40.020000+02:00,task-35714,Confirmation of receipt,complete,Group 1,Resource14,2011-08-16 11:14:52.974000+02:00 +Internet,case-9004,2011-09-21 01:06:40+02:00,General,2011-10-17 16:51:57.398000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource14,2011-07-27 01:06:40.020000+02:00,task-36511,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-08-16 11:15:20.107000+02:00 +Internet,case-9004,2011-09-21 01:06:40+02:00,General,2011-10-17 16:51:57.398000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource14,2011-07-27 01:06:40.020000+02:00,task-36513,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-08-16 11:16:26.667000+02:00 +Internet,case-9004,2011-09-21 01:06:40+02:00,General,2011-10-17 16:51:57.398000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource14,2011-07-27 01:06:40.020000+02:00,task-36514,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-08-16 11:16:48.761000+02:00 +Internet,case-9004,2011-09-21 01:06:40+02:00,General,2011-10-17 16:51:57.398000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource14,2011-07-27 01:06:40.020000+02:00,task-36512,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-08-16 11:54:43.404000+02:00 +Internet,case-9004,2011-09-21 01:06:40+02:00,General,2011-10-17 16:51:57.398000+02:00,2011-09-21 01:06:40.020000+02:00,Group 5,Resource14,2011-07-27 01:06:40.020000+02:00,task-36517,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-08-16 11:55:04.023000+02:00 +Internet,case-9011,2011-09-20 01:06:40+02:00,General,2011-08-29 11:39:41.422000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-35929,Confirmation of receipt,complete,Group 1,Resource02,2011-08-18 09:03:47.712000+02:00 +Internet,case-9011,2011-09-20 01:06:40+02:00,General,2011-08-29 11:39:41.422000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-36709,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-18 09:04:10.566000+02:00 +Internet,case-9011,2011-09-20 01:06:40+02:00,General,2011-08-29 11:39:41.422000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-36711,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-18 09:04:46.787000+02:00 +Internet,case-9011,2011-09-20 01:06:40+02:00,General,2011-08-29 11:39:41.422000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-36712,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-18 09:05:12.176000+02:00 +Internet,case-9011,2011-09-20 01:06:40+02:00,General,2011-08-29 11:39:41.422000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-36710,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-18 09:06:46.928000+02:00 +Internet,case-9011,2011-09-20 01:06:40+02:00,General,2011-08-29 11:39:41.422000+02:00,2011-09-20 01:06:40.020000+02:00,Group 5,Resource02,2011-07-26 01:06:40.020000+02:00,task-36713,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-18 13:46:17.085000+02:00 +Internet,case-9012,2011-09-29 01:06:40+02:00,General,2011-10-18 08:40:01.225000+02:00,2011-09-29 01:06:40.020000+02:00,Group 5,Resource12,2011-08-04 01:06:40.020000+02:00,task-35958,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-23 14:35:40.202000+02:00 +Internet,case-9012,2011-09-29 01:06:40+02:00,General,2011-10-18 08:40:01.225000+02:00,2011-09-29 01:06:40.020000+02:00,Group 5,Resource12,2011-08-04 01:06:40.020000+02:00,task-40150,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-23 14:36:25.450000+02:00 +Internet,case-9012,2011-09-29 01:06:40+02:00,General,2011-10-18 08:40:01.225000+02:00,2011-09-29 01:06:40.020000+02:00,Group 5,Resource12,2011-08-04 01:06:40.020000+02:00,task-40152,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-23 14:36:54.957000+02:00 +Internet,case-9012,2011-09-29 01:06:40+02:00,General,2011-10-18 08:40:01.225000+02:00,2011-09-29 01:06:40.020000+02:00,Group 5,Resource12,2011-08-04 01:06:40.020000+02:00,task-40153,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-23 14:37:28.436000+02:00 +Internet,case-9012,2011-09-29 01:06:40+02:00,General,2011-10-18 08:40:01.225000+02:00,2011-09-29 01:06:40.020000+02:00,Group 5,Resource12,2011-08-04 01:06:40.020000+02:00,task-40151,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-23 14:38:01.057000+02:00 +Internet,case-9012,2011-09-29 01:06:40+02:00,General,2011-10-18 08:40:01.225000+02:00,2011-09-29 01:06:40.020000+02:00,Group 5,Resource12,2011-08-04 01:06:40.020000+02:00,task-40156,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-23 14:38:26.005000+02:00 +Internet,case-9013,2011-09-30 01:06:40+02:00,General,2011-09-29 15:21:29.582000+02:00,2011-09-30 01:06:40.020000+02:00,,admin1,2011-08-05 01:06:40.020000+02:00,task-35962,Confirmation of receipt,complete,EMPTY,Resource09,2011-09-23 14:15:36.688000+02:00 +Internet,case-9013,2011-09-30 01:06:40+02:00,General,2011-09-29 15:21:29.582000+02:00,2011-09-30 01:06:40.020000+02:00,,admin1,2011-08-05 01:06:40.020000+02:00,task-40127,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-09-23 14:15:58.446000+02:00 +Internet,case-9013,2011-09-30 01:06:40+02:00,General,2011-09-29 15:21:29.582000+02:00,2011-09-30 01:06:40.020000+02:00,,admin1,2011-08-05 01:06:40.020000+02:00,task-40128,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-09-23 14:16:28.347000+02:00 +Internet,case-9013,2011-09-30 01:06:40+02:00,General,2011-09-29 15:21:29.582000+02:00,2011-09-30 01:06:40.020000+02:00,,admin1,2011-08-05 01:06:40.020000+02:00,task-40129,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-09-23 14:16:47.753000+02:00 +Internet,case-9013,2011-09-30 01:06:40+02:00,General,2011-09-29 15:21:29.582000+02:00,2011-09-30 01:06:40.020000+02:00,,admin1,2011-08-05 01:06:40.020000+02:00,task-40131,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-09-23 14:17:04.456000+02:00 +Internet,case-9013,2011-09-30 01:06:40+02:00,General,2011-09-29 15:21:29.582000+02:00,2011-09-30 01:06:40.020000+02:00,,admin1,2011-08-05 01:06:40.020000+02:00,task-40130,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-09-23 14:17:42.272000+02:00 +Internet,case-9014,2011-09-30 01:06:40+02:00,General,2011-08-26 13:49:10.193000+02:00,2011-09-30 01:06:40.020000+02:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-35970,Confirmation of receipt,complete,Group 1,Resource04,2011-08-19 14:26:09.623000+02:00 +Internet,case-9014,2011-09-30 01:06:40+02:00,General,2011-08-26 13:49:10.193000+02:00,2011-09-30 01:06:40.020000+02:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-36854,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-19 14:26:29.407000+02:00 +Internet,case-9014,2011-09-30 01:06:40+02:00,General,2011-08-26 13:49:10.193000+02:00,2011-09-30 01:06:40.020000+02:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-36856,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-19 14:26:53.536000+02:00 +Internet,case-9014,2011-09-30 01:06:40+02:00,General,2011-08-26 13:49:10.193000+02:00,2011-09-30 01:06:40.020000+02:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-36857,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-19 14:27:12.652000+02:00 +Internet,case-9014,2011-09-30 01:06:40+02:00,General,2011-08-26 13:49:10.193000+02:00,2011-09-30 01:06:40.020000+02:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-36855,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-24 12:35:45.035000+02:00 +Internet,case-9014,2011-09-30 01:06:40+02:00,General,2011-08-26 13:49:10.193000+02:00,2011-09-30 01:06:40.020000+02:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-37049,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-24 12:36:04.081000+02:00 +Internet,case-9016,2011-11-14 01:06:40+01:00,General,2011-09-22 14:17:37.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-08-08 01:06:40.020000+02:00,task-35987,Confirmation of receipt,complete,Group 1,Resource06,2011-08-19 12:18:13.372000+02:00 +Internet,case-9016,2011-11-14 01:06:40+01:00,General,2011-09-22 14:17:37.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-08-08 01:06:40.020000+02:00,task-36840,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-19 12:18:38.854000+02:00 +Internet,case-9016,2011-11-14 01:06:40+01:00,General,2011-09-22 14:17:37.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-08-08 01:06:40.020000+02:00,task-36842,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-19 12:19:20.102000+02:00 +Internet,case-9016,2011-11-14 01:06:40+01:00,General,2011-09-22 14:17:37.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-08-08 01:06:40.020000+02:00,task-36843,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-19 12:20:14.379000+02:00 +Internet,case-9016,2011-11-14 01:06:40+01:00,General,2011-09-22 14:17:37.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-08-08 01:06:40.020000+02:00,task-36841,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-19 12:23:02.680000+02:00 +Internet,case-9016,2011-11-14 01:06:40+01:00,General,2011-09-22 14:17:37.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-08-08 01:06:40.020000+02:00,task-36844,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-19 12:27:00.508000+02:00 +Internet,case-9026,2011-11-25 01:06:40+01:00,General,2011-11-07 11:21:25.159000+01:00,2011-11-25 01:06:40.010000+01:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-36158,Confirmation of receipt,complete,Group 1,Resource04,2011-08-17 16:18:25.744000+02:00 +Internet,case-9026,2011-11-25 01:06:40+01:00,General,2011-11-07 11:21:25.159000+01:00,2011-11-25 01:06:40.010000+01:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-36667,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-17 16:18:44.870000+02:00 +Internet,case-9026,2011-11-25 01:06:40+01:00,General,2011-11-07 11:21:25.159000+01:00,2011-11-25 01:06:40.010000+01:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-36669,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-17 16:19:03.116000+02:00 +Internet,case-9026,2011-11-25 01:06:40+01:00,General,2011-11-07 11:21:25.159000+01:00,2011-11-25 01:06:40.010000+01:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-36670,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-17 16:19:26.677000+02:00 +Internet,case-9026,2011-11-25 01:06:40+01:00,General,2011-11-07 11:21:25.159000+01:00,2011-11-25 01:06:40.010000+01:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-36668,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-17 16:19:43.773000+02:00 +Internet,case-9026,2011-11-25 01:06:40+01:00,General,2011-11-07 11:21:25.159000+01:00,2011-11-25 01:06:40.010000+01:00,Group 5,Resource04,2011-08-05 01:06:40.020000+02:00,task-36671,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-17 16:20:03.740000+02:00 +Internet,case-9032,2011-10-03 00:00:00+02:00,General,2012-01-17 13:52:44.800000+01:00,2011-10-03 00:00:00.020000+02:00,Group 5,Resource14,2011-08-08 01:06:40.020000+02:00,task-36192,Confirmation of receipt,complete,EMPTY,Resource14,2011-10-19 08:59:01.108000+02:00 +Internet,case-9032,2011-10-03 00:00:00+02:00,General,2012-01-17 13:52:44.800000+01:00,2011-10-03 00:00:00.020000+02:00,Group 5,Resource14,2011-08-08 01:06:40.020000+02:00,task-43819,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-10-19 08:59:39.434000+02:00 +Internet,case-9032,2011-10-03 00:00:00+02:00,General,2012-01-17 13:52:44.800000+01:00,2011-10-03 00:00:00.020000+02:00,Group 5,Resource14,2011-08-08 01:06:40.020000+02:00,task-43821,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-10-19 09:00:03.974000+02:00 +Internet,case-9032,2011-10-03 00:00:00+02:00,General,2012-01-17 13:52:44.800000+01:00,2011-10-03 00:00:00.020000+02:00,Group 5,Resource14,2011-08-08 01:06:40.020000+02:00,task-43822,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-10-19 09:00:43.284000+02:00 +Internet,case-9032,2011-10-03 00:00:00+02:00,General,2012-01-17 13:52:44.800000+01:00,2011-10-03 00:00:00.020000+02:00,Group 5,Resource14,2011-08-08 01:06:40.020000+02:00,task-43820,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-10-19 09:01:11.070000+02:00 +Internet,case-9032,2011-10-03 00:00:00+02:00,General,2012-01-17 13:52:44.800000+01:00,2011-10-03 00:00:00.020000+02:00,Group 5,Resource14,2011-08-08 01:06:40.020000+02:00,task-43823,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-10-19 09:01:30.636000+02:00 +Internet,case-9033,2011-11-24 01:06:40+01:00,General,2011-11-18 10:34:52.323000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource02,2011-08-10 01:06:40.020000+02:00,task-36229,Confirmation of receipt,complete,Group 1,Resource02,2011-08-17 14:17:51.542000+02:00 +Internet,case-9033,2011-11-24 01:06:40+01:00,General,2011-11-18 10:34:52.323000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource02,2011-08-10 01:06:40.020000+02:00,task-36645,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-17 14:18:20.560000+02:00 +Internet,case-9033,2011-11-24 01:06:40+01:00,General,2011-11-18 10:34:52.323000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource02,2011-08-10 01:06:40.020000+02:00,task-36647,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-17 14:18:37.866000+02:00 +Internet,case-9033,2011-11-24 01:06:40+01:00,General,2011-11-18 10:34:52.323000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource02,2011-08-10 01:06:40.020000+02:00,task-36648,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-17 14:19:01.768000+02:00 +Internet,case-9033,2011-11-24 01:06:40+01:00,General,2011-11-18 10:34:52.323000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource02,2011-08-10 01:06:40.020000+02:00,task-36646,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-17 14:19:46.790000+02:00 +Internet,case-9033,2011-11-24 01:06:40+01:00,General,2011-11-18 10:34:52.323000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource02,2011-08-10 01:06:40.020000+02:00,task-36649,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-17 14:20:11.341000+02:00 +Internet,case-9040,2011-10-06 01:06:40+02:00,General,2011-09-12 14:11:45.124000+02:00,2011-10-06 01:06:40.020000+02:00,Group 8,Resource11,2011-08-11 01:06:40.020000+02:00,task-36311,Confirmation of receipt,complete,Group 1,Resource01,2011-08-18 10:44:35.702000+02:00 +Internet,case-9040,2011-10-06 01:06:40+02:00,General,2011-09-12 14:11:45.124000+02:00,2011-10-06 01:06:40.020000+02:00,Group 8,Resource11,2011-08-11 01:06:40.020000+02:00,task-36718,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-08-18 10:44:54.597000+02:00 +Internet,case-9040,2011-10-06 01:06:40+02:00,General,2011-09-12 14:11:45.124000+02:00,2011-10-06 01:06:40.020000+02:00,Group 8,Resource11,2011-08-11 01:06:40.020000+02:00,task-36720,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-08-18 10:45:10.506000+02:00 +Internet,case-9040,2011-10-06 01:06:40+02:00,General,2011-09-12 14:11:45.124000+02:00,2011-10-06 01:06:40.020000+02:00,Group 8,Resource11,2011-08-11 01:06:40.020000+02:00,task-36721,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-08-18 10:45:26.949000+02:00 +Internet,case-9040,2011-10-06 01:06:40+02:00,General,2011-09-12 14:11:45.124000+02:00,2011-10-06 01:06:40.020000+02:00,Group 8,Resource11,2011-08-11 01:06:40.020000+02:00,task-36719,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-08-18 10:45:46.626000+02:00 +Internet,case-9040,2011-10-06 01:06:40+02:00,General,2011-09-12 14:11:45.124000+02:00,2011-10-06 01:06:40.020000+02:00,Group 8,Resource11,2011-08-11 01:06:40.020000+02:00,task-36722,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-08-18 10:46:03.198000+02:00 +Internet,case-9067,2011-11-09 01:06:40+01:00,General,2011-11-09 14:40:07.417000+01:00,2011-11-09 01:06:40.010000+01:00,Group 5,Resource02,2011-08-03 01:06:40.020000+02:00,task-36409,Confirmation of receipt,complete,Group 1,Resource02,2011-08-16 14:19:21.654000+02:00 +Internet,case-9067,2011-11-09 01:06:40+01:00,General,2011-11-09 14:40:07.417000+01:00,2011-11-09 01:06:40.010000+01:00,Group 5,Resource02,2011-08-03 01:06:40.020000+02:00,task-36546,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-08-16 14:23:14.460000+02:00 +Internet,case-9067,2011-11-09 01:06:40+01:00,General,2011-11-09 14:40:07.417000+01:00,2011-11-09 01:06:40.010000+01:00,Group 5,Resource02,2011-08-03 01:06:40.020000+02:00,task-36545,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-08-16 14:24:10.993000+02:00 +Internet,case-9067,2011-11-09 01:06:40+01:00,General,2011-11-09 14:40:07.417000+01:00,2011-11-09 01:06:40.010000+01:00,Group 5,Resource02,2011-08-03 01:06:40.020000+02:00,task-36548,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-08-16 14:24:29.432000+02:00 +Internet,case-9067,2011-11-09 01:06:40+01:00,General,2011-11-09 14:40:07.417000+01:00,2011-11-09 01:06:40.010000+01:00,Group 5,Resource02,2011-08-03 01:06:40.020000+02:00,task-36549,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-08-16 14:24:56.869000+02:00 +Internet,case-9067,2011-11-09 01:06:40+01:00,General,2011-11-09 14:40:07.417000+01:00,2011-11-09 01:06:40.010000+01:00,Group 5,Resource02,2011-08-03 01:06:40.020000+02:00,task-36547,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-08-16 14:25:49.705000+02:00 +Internet,case-9072,2012-02-10 00:00:00+01:00,General,,2012-02-10 00:00:00.010000+01:00,Group 5,Resource04,2011-08-10 01:06:40.020000+02:00,task-36432,Confirmation of receipt,complete,Group 1,Resource04,2011-08-18 15:38:25.593000+02:00 +Internet,case-9072,2012-02-10 00:00:00+01:00,General,,2012-02-10 00:00:00.010000+01:00,Group 5,Resource04,2011-08-10 01:06:40.020000+02:00,task-36760,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-18 15:41:33.072000+02:00 +Internet,case-9072,2012-02-10 00:00:00+01:00,General,,2012-02-10 00:00:00.010000+01:00,Group 5,Resource04,2011-08-10 01:06:40.020000+02:00,task-36762,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-18 15:42:15.810000+02:00 +Internet,case-9072,2012-02-10 00:00:00+01:00,General,,2012-02-10 00:00:00.010000+01:00,Group 5,Resource04,2011-08-10 01:06:40.020000+02:00,task-36763,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-19 11:16:56.979000+02:00 +Internet,case-9072,2012-02-10 00:00:00+01:00,General,,2012-02-10 00:00:00.010000+01:00,Group 5,Resource04,2011-08-10 01:06:40.020000+02:00,task-36761,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-19 11:36:16.497000+02:00 +Internet,case-9072,2012-02-10 00:00:00+01:00,General,,2012-02-10 00:00:00.010000+01:00,Group 5,Resource04,2011-08-10 01:06:40.020000+02:00,task-36827,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-19 11:36:44.756000+02:00 +Internet,case-9075,2011-10-21 01:06:40+02:00,General,2011-10-29 00:00:00.020000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-08-14 01:06:40.020000+02:00,task-36451,Confirmation of receipt,complete,Group 1,Resource21,2011-08-17 10:24:11.767000+02:00 +Internet,case-9075,2011-10-21 01:06:40+02:00,General,2011-10-29 00:00:00.020000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-08-14 01:06:40.020000+02:00,task-36599,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-08-17 10:24:55.081000+02:00 +Internet,case-9075,2011-10-21 01:06:40+02:00,General,2011-10-29 00:00:00.020000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-08-14 01:06:40.020000+02:00,task-36601,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-08-17 10:26:55.924000+02:00 +Internet,case-9075,2011-10-21 01:06:40+02:00,General,2011-10-29 00:00:00.020000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-08-14 01:06:40.020000+02:00,task-36602,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-08-17 10:27:44.542000+02:00 +Internet,case-9075,2011-10-21 01:06:40+02:00,General,2011-10-29 00:00:00.020000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-08-14 01:06:40.020000+02:00,task-36600,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-08-17 10:29:21.115000+02:00 +Internet,case-9075,2011-10-21 01:06:40+02:00,General,2011-10-29 00:00:00.020000+02:00,2011-10-21 01:06:40.020000+02:00,Group 5,Resource06,2011-08-14 01:06:40.020000+02:00,task-36603,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-08-17 10:31:14.091000+02:00 +Internet,case-9076,2011-09-22 01:06:40+02:00,General,2011-10-05 11:01:50.118000+02:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource25,2011-07-28 01:06:40.020000+02:00,task-36455,Confirmation of receipt,complete,EMPTY,Resource33,2011-08-15 14:51:34.879000+02:00 +Internet,case-9076,2011-09-22 01:06:40+02:00,General,2011-10-05 11:01:50.118000+02:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource25,2011-07-28 01:06:40.020000+02:00,task-36467,T02 Check confirmation of receipt,complete,EMPTY,Resource33,2011-08-15 17:08:35.629000+02:00 +Internet,case-9076,2011-09-22 01:06:40+02:00,General,2011-10-05 11:01:50.118000+02:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource25,2011-07-28 01:06:40.020000+02:00,task-36468,T06 Determine necessity of stop advice,complete,Group 1,Resource33,2011-08-16 08:47:33.884000+02:00 +Internet,case-9076,2011-09-22 01:06:40+02:00,General,2011-10-05 11:01:50.118000+02:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource25,2011-07-28 01:06:40.020000+02:00,task-36488,T04 Determine confirmation of receipt,complete,Group 3,Resource33,2011-08-16 08:52:10.147000+02:00 +Internet,case-9076,2011-09-22 01:06:40+02:00,General,2011-10-05 11:01:50.118000+02:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource25,2011-07-28 01:06:40.020000+02:00,task-36498,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-08-24 09:30:21.294000+02:00 +Internet,case-9076,2011-09-22 01:06:40+02:00,General,2011-10-05 11:01:50.118000+02:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource25,2011-07-28 01:06:40.020000+02:00,task-36497,T07-5 Draft intern advice aspect 5,complete,Group 1,Resource33,2011-08-29 11:26:14.520000+02:00 +Internet,case-9076,2011-09-22 01:06:40+02:00,General,2011-10-05 11:01:50.118000+02:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource25,2011-07-28 01:06:40.020000+02:00,task-36496,T08 Draft and send request for advice,complete,Group 1,Resource33,2011-08-29 13:16:38.971000+02:00 +Internet,case-9076,2011-09-22 01:06:40+02:00,General,2011-10-05 11:01:50.118000+02:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource25,2011-07-28 01:06:40.020000+02:00,task-37391,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource25,2011-10-04 14:15:39.384000+02:00 +Internet,case-9076,2011-09-22 01:06:40+02:00,General,2011-10-05 11:01:50.118000+02:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource25,2011-07-28 01:06:40.020000+02:00,task-41558,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-10-04 14:16:25.969000+02:00 +Internet,case-9076,2011-09-22 01:06:40+02:00,General,2011-10-05 11:01:50.118000+02:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource25,2011-07-28 01:06:40.020000+02:00,task-41559,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2011-10-04 14:16:54.150000+02:00 +Internet,case-9078,2011-10-04 01:06:40+02:00,General,2011-09-22 10:06:40.242000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource12,2011-08-09 01:06:40.020000+02:00,task-36480,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-15 12:21:46.754000+02:00 +Internet,case-9078,2011-10-04 01:06:40+02:00,General,2011-09-22 10:06:40.242000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource12,2011-08-09 01:06:40.020000+02:00,task-39068,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-15 12:22:18.211000+02:00 +Internet,case-9078,2011-10-04 01:06:40+02:00,General,2011-09-22 10:06:40.242000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource12,2011-08-09 01:06:40.020000+02:00,task-39070,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-15 12:23:07.183000+02:00 +Internet,case-9078,2011-10-04 01:06:40+02:00,General,2011-09-22 10:06:40.242000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource12,2011-08-09 01:06:40.020000+02:00,task-39073,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-15 12:27:04.985000+02:00 +Internet,case-9078,2011-10-04 01:06:40+02:00,General,2011-09-22 10:06:40.242000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource12,2011-08-09 01:06:40.020000+02:00,task-39069,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-15 12:27:37.627000+02:00 +Internet,case-9078,2011-10-04 01:06:40+02:00,General,2011-09-22 10:06:40.242000+02:00,2011-10-04 01:06:40.020000+02:00,Group 5,Resource12,2011-08-09 01:06:40.020000+02:00,task-39081,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-15 12:59:09.483000+02:00 +Internet,case-9088,2011-10-10 01:06:40+02:00,General,2011-09-05 10:52:52.445000+02:00,2011-10-10 01:06:40.020000+02:00,Group 7,Resource35,2011-08-15 01:06:40.020000+02:00,task-36508,Confirmation of receipt,complete,EMPTY,Resource30,2011-09-05 09:20:22.831000+02:00 +Internet,case-9088,2011-10-10 01:06:40+02:00,General,2011-09-05 10:52:52.445000+02:00,2011-10-10 01:06:40.020000+02:00,Group 7,Resource35,2011-08-15 01:06:40.020000+02:00,task-37967,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-09-05 10:52:53.482000+02:00 +Internet,case-9088,2011-10-10 01:06:40+02:00,General,2011-09-05 10:52:52.445000+02:00,2011-10-10 01:06:40.020000+02:00,Group 7,Resource35,2011-08-15 01:06:40.020000+02:00,task-37966,T02 Check confirmation of receipt,complete,Group 4,admin2,2011-09-05 10:52:54.095000+02:00 +Internet,case-9089,2011-11-24 01:06:40+01:00,General,2011-08-17 12:27:43.697000+02:00,2011-11-24 01:06:40.010000+01:00,Group 2,Resource21,2011-05-26 01:06:40.020000+02:00,task-36515,Confirmation of receipt,complete,Group 1,admin2,2011-08-17 12:27:44.527000+02:00 +Internet,case-9133,2011-09-13 01:06:40+02:00,General,2011-11-18 09:31:40.645000+01:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource09,2011-07-19 01:06:40.020000+02:00,task-36771,Confirmation of receipt,complete,EMPTY,Resource09,2011-09-12 15:19:26.747000+02:00 +Internet,case-9133,2011-09-13 01:06:40+02:00,General,2011-11-18 09:31:40.645000+01:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource09,2011-07-19 01:06:40.020000+02:00,task-38770,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-09-12 15:21:19.979000+02:00 +Internet,case-9133,2011-09-13 01:06:40+02:00,General,2011-11-18 09:31:40.645000+01:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource09,2011-07-19 01:06:40.020000+02:00,task-38773,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-09-12 15:21:43.146000+02:00 +Internet,case-9133,2011-09-13 01:06:40+02:00,General,2011-11-18 09:31:40.645000+01:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource09,2011-07-19 01:06:40.020000+02:00,task-38774,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-09-13 12:23:09.132000+02:00 +Internet,case-9133,2011-09-13 01:06:40+02:00,General,2011-11-18 09:31:40.645000+01:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource09,2011-07-19 01:06:40.020000+02:00,task-38771,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-04 15:00:14.121000+02:00 +Internet,case-9133,2011-09-13 01:06:40+02:00,General,2011-11-18 09:31:40.645000+01:00,2011-09-13 01:06:40.020000+02:00,Group 5,Resource09,2011-07-19 01:06:40.020000+02:00,task-41585,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-04 15:01:44.111000+02:00 +Internet,case-9143,2011-09-12 01:06:40+02:00,General,2011-09-20 12:16:27.702000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource05,2011-07-18 01:06:40.020000+02:00,task-36810,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-07 10:25:04.412000+02:00 +Internet,case-9143,2011-09-12 01:06:40+02:00,General,2011-09-20 12:16:27.702000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource05,2011-07-18 01:06:40.020000+02:00,task-38176,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-07 10:26:10.034000+02:00 +Internet,case-9143,2011-09-12 01:06:40+02:00,General,2011-09-20 12:16:27.702000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource05,2011-07-18 01:06:40.020000+02:00,task-38179,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-07 10:57:21.420000+02:00 +Internet,case-9143,2011-09-12 01:06:40+02:00,General,2011-09-20 12:16:27.702000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource05,2011-07-18 01:06:40.020000+02:00,task-38183,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-07 11:01:16.610000+02:00 +Internet,case-9143,2011-09-12 01:06:40+02:00,General,2011-09-20 12:16:27.702000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource05,2011-07-18 01:06:40.020000+02:00,task-38177,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-07 11:02:31.921000+02:00 +Internet,case-9143,2011-09-12 01:06:40+02:00,General,2011-09-20 12:16:27.702000+02:00,2011-09-12 01:06:40.020000+02:00,Group 5,Resource05,2011-07-18 01:06:40.020000+02:00,task-38184,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-07 11:03:13.586000+02:00 +Internet,case-9163,2011-10-13 01:06:40+02:00,General,2011-10-04 13:14:49.460000+02:00,2011-10-13 01:06:40.020000+02:00,Group 5,Resource05,2011-08-18 01:06:40.020000+02:00,task-36891,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-12 14:37:40.577000+02:00 +Internet,case-9163,2011-10-13 01:06:40+02:00,General,2011-10-04 13:14:49.460000+02:00,2011-10-13 01:06:40.020000+02:00,Group 5,Resource05,2011-08-18 01:06:40.020000+02:00,task-38739,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-12 14:38:16.949000+02:00 +Internet,case-9163,2011-10-13 01:06:40+02:00,General,2011-10-04 13:14:49.460000+02:00,2011-10-13 01:06:40.020000+02:00,Group 5,Resource05,2011-08-18 01:06:40.020000+02:00,task-38741,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-12 14:38:54.982000+02:00 +Internet,case-9163,2011-10-13 01:06:40+02:00,General,2011-10-04 13:14:49.460000+02:00,2011-10-13 01:06:40.020000+02:00,Group 5,Resource05,2011-08-18 01:06:40.020000+02:00,task-38742,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-12 14:40:16.909000+02:00 +Internet,case-9163,2011-10-13 01:06:40+02:00,General,2011-10-04 13:14:49.460000+02:00,2011-10-13 01:06:40.020000+02:00,Group 5,Resource05,2011-08-18 01:06:40.020000+02:00,task-38740,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-12 14:40:36.483000+02:00 +Internet,case-9163,2011-10-13 01:06:40+02:00,General,2011-10-04 13:14:49.460000+02:00,2011-10-13 01:06:40.020000+02:00,Group 5,Resource05,2011-08-18 01:06:40.020000+02:00,task-38743,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-12 14:42:56.828000+02:00 +Internet,case-9165,2011-10-14 01:06:40+02:00,General,2011-10-05 08:55:57.593000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource06,2011-08-19 01:06:40.020000+02:00,task-36893,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-04 11:44:39.661000+02:00 +Internet,case-9165,2011-10-14 01:06:40+02:00,General,2011-10-05 08:55:57.593000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource06,2011-08-19 01:06:40.020000+02:00,task-41512,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-04 11:45:08.832000+02:00 +Internet,case-9165,2011-10-14 01:06:40+02:00,General,2011-10-05 08:55:57.593000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource06,2011-08-19 01:06:40.020000+02:00,task-41514,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-04 11:45:27.816000+02:00 +Internet,case-9165,2011-10-14 01:06:40+02:00,General,2011-10-05 08:55:57.593000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource06,2011-08-19 01:06:40.020000+02:00,task-41515,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-04 11:46:03.315000+02:00 +Internet,case-9165,2011-10-14 01:06:40+02:00,General,2011-10-05 08:55:57.593000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource06,2011-08-19 01:06:40.020000+02:00,task-41513,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-04 11:46:28.496000+02:00 +Internet,case-9165,2011-10-14 01:06:40+02:00,General,2011-10-05 08:55:57.593000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource06,2011-08-19 01:06:40.020000+02:00,task-41516,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-04 11:46:48.196000+02:00 +Internet,case-9172,2011-10-17 01:06:40+02:00,General,2011-09-22 09:53:49.581000+02:00,2011-10-17 01:06:40.020000+02:00,Group 5,Resource23,2011-08-22 01:06:40.020000+02:00,task-36952,Confirmation of receipt,complete,EMPTY,Resource23,2011-09-09 11:20:27.804000+02:00 +Internet,case-9172,2011-10-17 01:06:40+02:00,General,2011-09-22 09:53:49.581000+02:00,2011-10-17 01:06:40.020000+02:00,Group 5,Resource23,2011-08-22 01:06:40.020000+02:00,task-38577,T02 Check confirmation of receipt,complete,EMPTY,Resource23,2011-09-09 11:22:25.332000+02:00 +Internet,case-9172,2011-10-17 01:06:40+02:00,General,2011-09-22 09:53:49.581000+02:00,2011-10-17 01:06:40.020000+02:00,Group 5,Resource23,2011-08-22 01:06:40.020000+02:00,task-38579,T04 Determine confirmation of receipt,complete,EMPTY,Resource23,2011-09-09 11:24:52.826000+02:00 +Internet,case-9172,2011-10-17 01:06:40+02:00,General,2011-09-22 09:53:49.581000+02:00,2011-10-17 01:06:40.020000+02:00,Group 5,Resource23,2011-08-22 01:06:40.020000+02:00,task-38580,T05 Print and send confirmation of receipt,complete,EMPTY,Resource23,2011-09-09 11:25:29.256000+02:00 +Internet,case-9172,2011-10-17 01:06:40+02:00,General,2011-09-22 09:53:49.581000+02:00,2011-10-17 01:06:40.020000+02:00,Group 5,Resource23,2011-08-22 01:06:40.020000+02:00,task-38578,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-09-16 11:08:12.417000+02:00 +Internet,case-9172,2011-10-17 01:06:40+02:00,General,2011-09-22 09:53:49.581000+02:00,2011-10-17 01:06:40.020000+02:00,Group 5,Resource23,2011-08-22 01:06:40.020000+02:00,task-39216,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-09-16 11:08:47.403000+02:00 +Internet,case-9176,2011-10-17 15:58:34.116000+02:00,General,2011-10-04 14:08:14.324000+02:00,2011-10-17 15:58:34.116000+02:00,Group 5,Resource12,2011-08-22 16:00:29.157000+02:00,task-36959,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-26 08:54:17.224000+02:00 +Internet,case-9176,2011-10-17 15:58:34.116000+02:00,General,2011-10-04 14:08:14.324000+02:00,2011-10-17 15:58:34.116000+02:00,Group 5,Resource12,2011-08-22 16:00:29.157000+02:00,task-40250,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-26 08:54:48.783000+02:00 +Internet,case-9176,2011-10-17 15:58:34.116000+02:00,General,2011-10-04 14:08:14.324000+02:00,2011-10-17 15:58:34.116000+02:00,Group 5,Resource12,2011-08-22 16:00:29.157000+02:00,task-40252,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-26 08:55:18.388000+02:00 +Internet,case-9176,2011-10-17 15:58:34.116000+02:00,General,2011-10-04 14:08:14.324000+02:00,2011-10-17 15:58:34.116000+02:00,Group 5,Resource12,2011-08-22 16:00:29.157000+02:00,task-40253,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-26 08:55:53.936000+02:00 +Internet,case-9176,2011-10-17 15:58:34.116000+02:00,General,2011-10-04 14:08:14.324000+02:00,2011-10-17 15:58:34.116000+02:00,Group 5,Resource12,2011-08-22 16:00:29.157000+02:00,task-40251,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-26 08:56:18.831000+02:00 +Internet,case-9176,2011-10-17 15:58:34.116000+02:00,General,2011-10-04 14:08:14.324000+02:00,2011-10-17 15:58:34.116000+02:00,Group 5,Resource12,2011-08-22 16:00:29.157000+02:00,task-40254,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-26 08:56:46.026000+02:00 +Internet,case-9199,2011-09-13 01:06:40+02:00,General,2011-09-14 16:46:58.318000+02:00,2011-09-13 01:06:40.020000+02:00,Group 6,Resource29,2011-07-19 01:06:40.020000+02:00,task-37012,Confirmation of receipt,complete,EMPTY,Resource29,2011-09-08 12:36:59.555000+02:00 +Internet,case-9199,2011-09-13 01:06:40+02:00,General,2011-09-14 16:46:58.318000+02:00,2011-09-13 01:06:40.020000+02:00,Group 6,Resource29,2011-07-19 01:06:40.020000+02:00,task-38486,T02 Check confirmation of receipt,complete,EMPTY,Resource29,2011-09-08 12:39:34.966000+02:00 +Internet,case-9199,2011-09-13 01:06:40+02:00,General,2011-09-14 16:46:58.318000+02:00,2011-09-13 01:06:40.020000+02:00,Group 6,Resource29,2011-07-19 01:06:40.020000+02:00,task-38489,T04 Determine confirmation of receipt,complete,EMPTY,Resource29,2011-09-08 12:40:23.759000+02:00 +Internet,case-9199,2011-09-13 01:06:40+02:00,General,2011-09-14 16:46:58.318000+02:00,2011-09-13 01:06:40.020000+02:00,Group 6,Resource29,2011-07-19 01:06:40.020000+02:00,task-38490,T05 Print and send confirmation of receipt,complete,EMPTY,Resource29,2011-09-08 12:41:58.362000+02:00 +Internet,case-9199,2011-09-13 01:06:40+02:00,General,2011-09-14 16:46:58.318000+02:00,2011-09-13 01:06:40.020000+02:00,Group 6,Resource29,2011-07-19 01:06:40.020000+02:00,task-38487,T06 Determine necessity of stop advice,complete,Group 1,Resource29,2011-09-08 12:43:08.695000+02:00 +Internet,case-9199,2011-09-13 01:06:40+02:00,General,2011-09-14 16:46:58.318000+02:00,2011-09-13 01:06:40.020000+02:00,Group 6,Resource29,2011-07-19 01:06:40.020000+02:00,task-38491,T10 Determine necessity to stop indication,complete,Group 1,Resource29,2011-09-08 12:43:41.881000+02:00 +Internet,case-9201,2011-09-19 01:06:40+02:00,General,2011-09-14 10:37:35.447000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource04,2011-07-25 01:06:40.020000+02:00,task-37014,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-29 11:34:19.176000+02:00 +Internet,case-9201,2011-09-19 01:06:40+02:00,General,2011-09-14 10:37:35.447000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource04,2011-07-25 01:06:40.020000+02:00,task-37353,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-29 11:34:55.747000+02:00 +Internet,case-9201,2011-09-19 01:06:40+02:00,General,2011-09-14 10:37:35.447000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource04,2011-07-25 01:06:40.020000+02:00,task-37355,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-29 11:35:14.747000+02:00 +Internet,case-9201,2011-09-19 01:06:40+02:00,General,2011-09-14 10:37:35.447000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource04,2011-07-25 01:06:40.020000+02:00,task-37356,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-29 11:35:37.780000+02:00 +Internet,case-9201,2011-09-19 01:06:40+02:00,General,2011-09-14 10:37:35.447000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource04,2011-07-25 01:06:40.020000+02:00,task-37354,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-29 11:35:58.206000+02:00 +Internet,case-9201,2011-09-19 01:06:40+02:00,General,2011-09-14 10:37:35.447000+02:00,2011-09-19 01:06:40.020000+02:00,Group 5,Resource04,2011-07-25 01:06:40.020000+02:00,task-37357,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-29 11:36:17.632000+02:00 +Internet,case-9203,2011-06-22 01:06:40+02:00,General,2011-09-01 07:23:15.377000+02:00,2011-06-22 01:06:40.020000+02:00,Group 8,Resource01,2011-04-27 01:06:40.020000+02:00,task-37043,Confirmation of receipt,complete,EMPTY,Resource11,2011-08-31 13:23:06.586000+02:00 +Internet,case-9203,2011-06-22 01:06:40+02:00,General,2011-09-01 07:23:15.377000+02:00,2011-06-22 01:06:40.020000+02:00,Group 8,Resource01,2011-04-27 01:06:40.020000+02:00,task-37679,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-08-31 13:23:32.332000+02:00 +Internet,case-9203,2011-06-22 01:06:40+02:00,General,2011-09-01 07:23:15.377000+02:00,2011-06-22 01:06:40.020000+02:00,Group 8,Resource01,2011-04-27 01:06:40.020000+02:00,task-37681,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2011-08-31 13:23:54.958000+02:00 +Internet,case-9203,2011-06-22 01:06:40+02:00,General,2011-09-01 07:23:15.377000+02:00,2011-06-22 01:06:40.020000+02:00,Group 8,Resource01,2011-04-27 01:06:40.020000+02:00,task-37682,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-08-31 13:24:26.662000+02:00 +Internet,case-9203,2011-06-22 01:06:40+02:00,General,2011-09-01 07:23:15.377000+02:00,2011-06-22 01:06:40.020000+02:00,Group 8,Resource01,2011-04-27 01:06:40.020000+02:00,task-37683,T03 Adjust confirmation of receipt,complete,Group 1,Resource11,2011-08-31 13:26:26.682000+02:00 +Internet,case-9203,2011-06-22 01:06:40+02:00,General,2011-09-01 07:23:15.377000+02:00,2011-06-22 01:06:40.020000+02:00,Group 8,Resource01,2011-04-27 01:06:40.020000+02:00,task-37685,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-08-31 13:26:57.195000+02:00 +Internet,case-9203,2011-06-22 01:06:40+02:00,General,2011-09-01 07:23:15.377000+02:00,2011-06-22 01:06:40.020000+02:00,Group 8,Resource01,2011-04-27 01:06:40.020000+02:00,task-37686,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-08-31 13:27:20.538000+02:00 +Internet,case-9203,2011-06-22 01:06:40+02:00,General,2011-09-01 07:23:15.377000+02:00,2011-06-22 01:06:40.020000+02:00,Group 8,Resource01,2011-04-27 01:06:40.020000+02:00,task-37687,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-08-31 13:27:38.655000+02:00 +Internet,case-9203,2011-06-22 01:06:40+02:00,General,2011-09-01 07:23:15.377000+02:00,2011-06-22 01:06:40.020000+02:00,Group 8,Resource01,2011-04-27 01:06:40.020000+02:00,task-37680,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-08-31 13:28:27.190000+02:00 +Internet,case-9203,2011-06-22 01:06:40+02:00,General,2011-09-01 07:23:15.377000+02:00,2011-06-22 01:06:40.020000+02:00,Group 8,Resource01,2011-04-27 01:06:40.020000+02:00,task-37688,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-08-31 13:29:58.415000+02:00 +Internet,case-9206,2011-07-11 01:06:40+02:00,General,,2011-07-11 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-37047,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-12 10:36:02.977000+02:00 +Internet,case-9206,2011-07-11 01:06:40+02:00,General,,2011-07-11 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-42998,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-12 10:36:22.305000+02:00 +Internet,case-9206,2011-07-11 01:06:40+02:00,General,,2011-07-11 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-43000,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-12 10:36:40.937000+02:00 +Internet,case-9206,2011-07-11 01:06:40+02:00,General,,2011-07-11 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-43001,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-12 10:36:56.930000+02:00 +Internet,case-9206,2011-07-11 01:06:40+02:00,General,,2011-07-11 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-42999,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-12 11:18:20.323000+02:00 +Internet,case-9206,2011-07-11 01:06:40+02:00,General,,2011-07-11 01:06:40.020000+02:00,Group 5,Resource02,2011-05-16 01:06:40.020000+02:00,task-43016,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-12 11:18:52.128000+02:00 +Internet,case-9207,2011-07-14 01:06:40+02:00,General,2011-10-04 10:01:07.865000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-19 01:06:40.020000+02:00,task-37048,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-26 08:48:32.489000+02:00 +Internet,case-9207,2011-07-14 01:06:40+02:00,General,2011-10-04 10:01:07.865000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-19 01:06:40.020000+02:00,task-40248,T02 Check confirmation of receipt,complete,EMPTY,Resource12,2011-09-26 10:37:45.672000+02:00 +Internet,case-9207,2011-07-14 01:06:40+02:00,General,2011-10-04 10:01:07.865000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-19 01:06:40.020000+02:00,task-40249,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-26 10:40:40.917000+02:00 +Internet,case-9207,2011-07-14 01:06:40+02:00,General,2011-10-04 10:01:07.865000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-19 01:06:40.020000+02:00,task-40315,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-26 10:41:14.676000+02:00 +Internet,case-9207,2011-07-14 01:06:40+02:00,General,2011-10-04 10:01:07.865000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-19 01:06:40.020000+02:00,task-40326,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-26 10:54:42.925000+02:00 +Internet,case-9207,2011-07-14 01:06:40+02:00,General,2011-10-04 10:01:07.865000+02:00,2011-07-14 01:06:40.020000+02:00,Group 5,Resource12,2011-05-19 01:06:40.020000+02:00,task-40323,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-26 10:55:10.832000+02:00 +Internet,case-9209,2011-08-03 00:00:00+02:00,General,2012-01-17 13:28:28.475000+01:00,2011-08-03 00:00:00.020000+02:00,Group 5,Resource02,2011-06-08 01:06:40.020000+02:00,task-37057,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-12 07:56:57.799000+02:00 +Internet,case-9209,2011-08-03 00:00:00+02:00,General,2012-01-17 13:28:28.475000+01:00,2011-08-03 00:00:00.020000+02:00,Group 5,Resource02,2011-06-08 01:06:40.020000+02:00,task-42948,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-12 08:02:01.980000+02:00 +Internet,case-9209,2011-08-03 00:00:00+02:00,General,2012-01-17 13:28:28.475000+01:00,2011-08-03 00:00:00.020000+02:00,Group 5,Resource02,2011-06-08 01:06:40.020000+02:00,task-42951,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-12 08:02:24.053000+02:00 +Internet,case-9209,2011-08-03 00:00:00+02:00,General,2012-01-17 13:28:28.475000+01:00,2011-08-03 00:00:00.020000+02:00,Group 5,Resource02,2011-06-08 01:06:40.020000+02:00,task-42952,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-12 08:02:42.277000+02:00 +Internet,case-9209,2011-08-03 00:00:00+02:00,General,2012-01-17 13:28:28.475000+01:00,2011-08-03 00:00:00.020000+02:00,Group 5,Resource02,2011-06-08 01:06:40.020000+02:00,task-42949,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-12 08:05:04.738000+02:00 +Internet,case-9209,2011-08-03 00:00:00+02:00,General,2012-01-17 13:28:28.475000+01:00,2011-08-03 00:00:00.020000+02:00,Group 5,Resource02,2011-06-08 01:06:40.020000+02:00,task-42953,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-12 08:06:07.907000+02:00 +Internet,case-9212,2011-08-19 01:06:40+02:00,General,2011-09-01 08:29:34.390000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37060,Confirmation of receipt,complete,EMPTY,Resource11,2011-09-01 07:24:31.792000+02:00 +Internet,case-9212,2011-08-19 01:06:40+02:00,General,2011-09-01 08:29:34.390000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37746,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-09-01 07:25:34.985000+02:00 +Internet,case-9212,2011-08-19 01:06:40+02:00,General,2011-09-01 08:29:34.390000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37745,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-09-01 07:26:02.339000+02:00 +Internet,case-9212,2011-08-19 01:06:40+02:00,General,2011-09-01 08:29:34.390000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37748,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-09-01 07:26:28.713000+02:00 +Internet,case-9212,2011-08-19 01:06:40+02:00,General,2011-09-01 08:29:34.390000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37749,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-09-01 07:26:54.380000+02:00 +Internet,case-9212,2011-08-19 01:06:40+02:00,General,2011-09-01 08:29:34.390000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37747,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-09-01 07:30:34.586000+02:00 +Internet,case-9213,2011-08-19 01:06:40+02:00,General,2011-09-01 09:17:15.452000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37064,Confirmation of receipt,complete,EMPTY,Resource11,2011-09-01 08:39:09.918000+02:00 +Internet,case-9213,2011-08-19 01:06:40+02:00,General,2011-09-01 09:17:15.452000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37779,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-09-01 08:40:46.025000+02:00 +Internet,case-9213,2011-08-19 01:06:40+02:00,General,2011-09-01 09:17:15.452000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37780,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-09-01 08:41:50.295000+02:00 +Internet,case-9213,2011-08-19 01:06:40+02:00,General,2011-09-01 09:17:15.452000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37778,T02 Check confirmation of receipt,complete,Group 4,Resource11,2011-09-01 08:42:44.916000+02:00 +Internet,case-9213,2011-08-19 01:06:40+02:00,General,2011-09-01 09:17:15.452000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37784,T04 Determine confirmation of receipt,complete,Group 3,Resource11,2011-09-01 08:43:26.015000+02:00 +Internet,case-9213,2011-08-19 01:06:40+02:00,General,2011-09-01 09:17:15.452000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource01,2011-06-24 01:06:40.020000+02:00,task-37785,T05 Print and send confirmation of receipt,complete,Group 2,Resource11,2011-09-01 08:43:57.984000+02:00 +Internet,case-9214,2011-08-26 01:06:40+02:00,General,2011-08-31 13:32:18.102000+02:00,2011-08-26 01:06:40.020000+02:00,Group 8,Resource01,2011-07-01 01:06:40.020000+02:00,task-37068,Confirmation of receipt,complete,EMPTY,admin2,2011-08-31 13:32:18.984000+02:00 +Internet,case-9218,2011-10-13 01:06:40+02:00,General,2011-09-12 14:20:29.359000+02:00,2011-10-13 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-37072,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 09:25:07.087000+02:00 +Internet,case-9218,2011-10-13 01:06:40+02:00,General,2011-09-12 14:20:29.359000+02:00,2011-10-13 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-38273,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 09:25:30.231000+02:00 +Internet,case-9218,2011-10-13 01:06:40+02:00,General,2011-09-12 14:20:29.359000+02:00,2011-10-13 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-38275,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 09:25:47.157000+02:00 +Internet,case-9218,2011-10-13 01:06:40+02:00,General,2011-09-12 14:20:29.359000+02:00,2011-10-13 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-38276,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 09:26:05.953000+02:00 +Internet,case-9218,2011-10-13 01:06:40+02:00,General,2011-09-12 14:20:29.359000+02:00,2011-10-13 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-38274,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 09:26:22.061000+02:00 +Internet,case-9218,2011-10-13 01:06:40+02:00,General,2011-09-12 14:20:29.359000+02:00,2011-10-13 01:06:40.020000+02:00,Group 8,Resource11,2011-07-07 01:06:40.020000+02:00,task-38277,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 09:26:40.271000+02:00 +Desk,case-9226,2011-08-30 01:06:40+02:00,General,2011-08-31 10:01:57.853000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-37106,Confirmation of receipt,complete,EMPTY,Resource06,2011-08-30 09:39:00.949000+02:00 +Desk,case-9226,2011-08-30 01:06:40+02:00,General,2011-08-31 10:01:57.853000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-37442,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-08-30 09:39:30.164000+02:00 +Desk,case-9226,2011-08-30 01:06:40+02:00,General,2011-08-31 10:01:57.853000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-37444,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-08-30 09:39:51.600000+02:00 +Desk,case-9226,2011-08-30 01:06:40+02:00,General,2011-08-31 10:01:57.853000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-37447,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-08-30 09:40:13.564000+02:00 +Desk,case-9226,2011-08-30 01:06:40+02:00,General,2011-08-31 10:01:57.853000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-37443,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-08-30 09:40:32.773000+02:00 +Desk,case-9226,2011-08-30 01:06:40+02:00,General,2011-08-31 10:01:57.853000+02:00,2011-08-30 01:06:40.020000+02:00,Group 5,Resource06,2011-07-05 01:06:40.020000+02:00,task-37448,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-08-30 09:41:15.423000+02:00 +Internet,case-9228,2011-10-26 01:06:40+02:00,General,2011-10-05 13:01:08.242000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-37110,Confirmation of receipt,complete,EMPTY,Resource04,2011-08-29 10:10:18.965000+02:00 +Internet,case-9228,2011-10-26 01:06:40+02:00,General,2011-10-05 13:01:08.242000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-37300,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-08-29 10:10:42.442000+02:00 +Internet,case-9228,2011-10-26 01:06:40+02:00,General,2011-10-05 13:01:08.242000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-37302,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-08-29 10:11:01.504000+02:00 +Internet,case-9228,2011-10-26 01:06:40+02:00,General,2011-10-05 13:01:08.242000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-37303,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-08-29 10:11:24.853000+02:00 +Internet,case-9228,2011-10-26 01:06:40+02:00,General,2011-10-05 13:01:08.242000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-37301,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-08-29 10:11:41.777000+02:00 +Internet,case-9228,2011-10-26 01:06:40+02:00,General,2011-10-05 13:01:08.242000+02:00,2011-10-26 01:06:40.020000+02:00,Group 5,Resource04,2011-07-21 01:06:40.020000+02:00,task-37304,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-08-29 10:12:03.155000+02:00 +Internet,case-9232,2011-09-16 01:06:40+02:00,General,2011-10-31 14:40:10.648000+01:00,2011-09-16 01:06:40.020000+02:00,,admin1,2011-07-22 01:06:40.020000+02:00,task-37145,Confirmation of receipt,complete,EMPTY,Resource09,2011-09-28 10:32:38.239000+02:00 +Internet,case-9232,2011-09-16 01:06:40+02:00,General,2011-10-31 14:40:10.648000+01:00,2011-09-16 01:06:40.020000+02:00,,admin1,2011-07-22 01:06:40.020000+02:00,task-40699,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-09-28 10:33:13.324000+02:00 +Internet,case-9232,2011-09-16 01:06:40+02:00,General,2011-10-31 14:40:10.648000+01:00,2011-09-16 01:06:40.020000+02:00,,admin1,2011-07-22 01:06:40.020000+02:00,task-40701,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-09-28 10:33:48.879000+02:00 +Internet,case-9232,2011-09-16 01:06:40+02:00,General,2011-10-31 14:40:10.648000+01:00,2011-09-16 01:06:40.020000+02:00,,admin1,2011-07-22 01:06:40.020000+02:00,task-40702,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-09-28 10:34:08.740000+02:00 +Internet,case-9232,2011-09-16 01:06:40+02:00,General,2011-10-31 14:40:10.648000+01:00,2011-09-16 01:06:40.020000+02:00,,admin1,2011-07-22 01:06:40.020000+02:00,task-40700,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-09-28 10:34:37.914000+02:00 +Internet,case-9232,2011-09-16 01:06:40+02:00,General,2011-10-31 14:40:10.648000+01:00,2011-09-16 01:06:40.020000+02:00,,admin1,2011-07-22 01:06:40.020000+02:00,task-40703,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-09-28 10:35:22.341000+02:00 +Internet,case-9270,2011-10-18 01:06:40+02:00,General,2011-11-18 10:06:45.299000+01:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource14,2011-08-23 01:06:40.020000+02:00,task-37295,Confirmation of receipt,complete,EMPTY,Resource14,2011-11-14 10:16:51.933000+01:00 +Internet,case-9270,2011-10-18 01:06:40+02:00,General,2011-11-18 10:06:45.299000+01:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource14,2011-08-23 01:06:40.020000+02:00,task-46444,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-11-14 10:17:17.530000+01:00 +Internet,case-9270,2011-10-18 01:06:40+02:00,General,2011-11-18 10:06:45.299000+01:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource14,2011-08-23 01:06:40.020000+02:00,task-46446,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-11-14 10:17:39.932000+01:00 +Internet,case-9270,2011-10-18 01:06:40+02:00,General,2011-11-18 10:06:45.299000+01:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource14,2011-08-23 01:06:40.020000+02:00,task-46447,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-11-14 10:18:18.595000+01:00 +Internet,case-9270,2011-10-18 01:06:40+02:00,General,2011-11-18 10:06:45.299000+01:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource14,2011-08-23 01:06:40.020000+02:00,task-46445,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-11-14 10:18:44.261000+01:00 +Internet,case-9270,2011-10-18 01:06:40+02:00,General,2011-11-18 10:06:45.299000+01:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource14,2011-08-23 01:06:40.020000+02:00,task-46449,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-11-14 10:19:06.315000+01:00 +Internet,case-9271,2011-10-24 00:00:00+02:00,General,2011-12-23 15:11:46.687000+01:00,2011-10-24 00:00:00.020000+02:00,,admin1,2011-08-29 10:05:57.665000+02:00,task-37299,Confirmation of receipt,complete,EMPTY,Resource09,2011-10-17 15:08:22.470000+02:00 +Internet,case-9271,2011-10-24 00:00:00+02:00,General,2011-12-23 15:11:46.687000+01:00,2011-10-24 00:00:00.020000+02:00,,admin1,2011-08-29 10:05:57.665000+02:00,task-43484,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-10-17 15:08:56.575000+02:00 +Internet,case-9271,2011-10-24 00:00:00+02:00,General,2011-12-23 15:11:46.687000+01:00,2011-10-24 00:00:00.020000+02:00,,admin1,2011-08-29 10:05:57.665000+02:00,task-43485,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-17 15:09:30.620000+02:00 +Internet,case-9271,2011-10-24 00:00:00+02:00,General,2011-12-23 15:11:46.687000+01:00,2011-10-24 00:00:00.020000+02:00,,admin1,2011-08-29 10:05:57.665000+02:00,task-43486,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-10-17 15:09:57.370000+02:00 +Internet,case-9271,2011-10-24 00:00:00+02:00,General,2011-12-23 15:11:46.687000+01:00,2011-10-24 00:00:00.020000+02:00,,admin1,2011-08-29 10:05:57.665000+02:00,task-43487,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-17 15:11:09.434000+02:00 +Internet,case-9271,2011-10-24 00:00:00+02:00,General,2011-12-23 15:11:46.687000+01:00,2011-10-24 00:00:00.020000+02:00,,admin1,2011-08-29 10:05:57.665000+02:00,task-43488,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-10-17 15:19:10.864000+02:00 +Internet,case-9274,2011-10-20 01:06:40+02:00,General,2011-10-19 13:46:28.582000+02:00,2011-10-20 01:06:40.020000+02:00,Group 8,Resource01,2011-08-25 01:06:40.020000+02:00,task-37340,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 09:54:59.225000+02:00 +Internet,case-9274,2011-10-20 01:06:40+02:00,General,2011-10-19 13:46:28.582000+02:00,2011-10-20 01:06:40.020000+02:00,Group 8,Resource01,2011-08-25 01:06:40.020000+02:00,task-38291,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 09:55:24.165000+02:00 +Internet,case-9274,2011-10-20 01:06:40+02:00,General,2011-10-19 13:46:28.582000+02:00,2011-10-20 01:06:40.020000+02:00,Group 8,Resource01,2011-08-25 01:06:40.020000+02:00,task-38292,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 09:55:51.692000+02:00 +Internet,case-9274,2011-10-20 01:06:40+02:00,General,2011-10-19 13:46:28.582000+02:00,2011-10-20 01:06:40.020000+02:00,Group 8,Resource01,2011-08-25 01:06:40.020000+02:00,task-38294,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 09:56:13.804000+02:00 +Internet,case-9274,2011-10-20 01:06:40+02:00,General,2011-10-19 13:46:28.582000+02:00,2011-10-20 01:06:40.020000+02:00,Group 8,Resource01,2011-08-25 01:06:40.020000+02:00,task-38293,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 09:57:03.412000+02:00 +Internet,case-9274,2011-10-20 01:06:40+02:00,General,2011-10-19 13:46:28.582000+02:00,2011-10-20 01:06:40.020000+02:00,Group 8,Resource01,2011-08-25 01:06:40.020000+02:00,task-38296,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 09:57:22.546000+02:00 +Internet,case-9277,2011-09-09 01:06:40+02:00,General,2011-10-06 15:04:16.609000+02:00,2011-09-09 01:06:40.020000+02:00,Group 5,Resource05,2011-07-15 01:06:40.020000+02:00,task-37371,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-06 14:47:05.185000+02:00 +Internet,case-9277,2011-09-09 01:06:40+02:00,General,2011-10-06 15:04:16.609000+02:00,2011-09-09 01:06:40.020000+02:00,Group 5,Resource05,2011-07-15 01:06:40.020000+02:00,task-38089,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-06 14:55:02.214000+02:00 +Internet,case-9277,2011-09-09 01:06:40+02:00,General,2011-10-06 15:04:16.609000+02:00,2011-09-09 01:06:40.020000+02:00,Group 5,Resource05,2011-07-15 01:06:40.020000+02:00,task-38091,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-06 14:58:10.671000+02:00 +Internet,case-9277,2011-09-09 01:06:40+02:00,General,2011-10-06 15:04:16.609000+02:00,2011-09-09 01:06:40.020000+02:00,Group 5,Resource05,2011-07-15 01:06:40.020000+02:00,task-38092,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-06 14:58:35.323000+02:00 +Internet,case-9277,2011-09-09 01:06:40+02:00,General,2011-10-06 15:04:16.609000+02:00,2011-09-09 01:06:40.020000+02:00,Group 5,Resource05,2011-07-15 01:06:40.020000+02:00,task-38090,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-06 14:58:55.630000+02:00 +Internet,case-9277,2011-09-09 01:06:40+02:00,General,2011-10-06 15:04:16.609000+02:00,2011-09-09 01:06:40.020000+02:00,Group 5,Resource05,2011-07-15 01:06:40.020000+02:00,task-38093,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-06 14:59:18.711000+02:00 +Internet,case-9281,2011-10-24 13:56:40.490000+02:00,General,2011-09-09 00:00:00.020000+02:00,2011-10-24 13:56:40.490000+02:00,Group 8,Resource01,2011-08-29 13:56:40.490000+02:00,task-37399,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 13:10:38.550000+02:00 +Internet,case-9281,2011-10-24 13:56:40.490000+02:00,General,2011-09-09 00:00:00.020000+02:00,2011-10-24 13:56:40.490000+02:00,Group 8,Resource01,2011-08-29 13:56:40.490000+02:00,task-38514,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 13:11:14.746000+02:00 +Internet,case-9281,2011-10-24 13:56:40.490000+02:00,General,2011-09-09 00:00:00.020000+02:00,2011-10-24 13:56:40.490000+02:00,Group 8,Resource01,2011-08-29 13:56:40.490000+02:00,task-38517,T04 Determine confirmation of receipt,complete,EMPTY,Resource19,2011-09-09 09:30:43.422000+02:00 +Internet,case-9281,2011-10-24 13:56:40.490000+02:00,General,2011-09-09 00:00:00.020000+02:00,2011-10-24 13:56:40.490000+02:00,Group 8,Resource01,2011-08-29 13:56:40.490000+02:00,task-38565,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-09-09 14:20:45.907000+02:00 +Internet,case-9281,2011-10-24 13:56:40.490000+02:00,General,2011-09-09 00:00:00.020000+02:00,2011-10-24 13:56:40.490000+02:00,Group 8,Resource01,2011-08-29 13:56:40.490000+02:00,task-38515,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-09-15 09:37:39.033000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37428,Confirmation of receipt,complete,EMPTY,Resource28,2011-08-31 14:16:45.403000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37713,T02 Check confirmation of receipt,complete,Group 4,Resource28,2011-08-31 14:18:49.848000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37714,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-08-31 14:24:54.608000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37716,T08 Draft and send request for advice,complete,Group 1,Resource28,2011-08-31 15:06:49.707000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37730,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource28,2011-08-31 15:10:26.204000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37715,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-08-31 15:19:13.128000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37733,T03 Adjust confirmation of receipt,complete,Group 1,Resource28,2011-09-01 09:17:53.293000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37815,T02 Check confirmation of receipt,complete,Group 4,Resource28,2011-09-01 09:18:30.530000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37816,T04 Determine confirmation of receipt,complete,Group 3,Resource28,2011-09-01 09:19:59.433000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37819,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-09-05 12:47:38.003000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-37717,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource28,2011-09-06 13:47:00.452000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38084,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-09-06 13:47:37.892000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38085,T08 Draft and send request for advice,complete,Group 1,Resource28,2011-09-06 13:48:32.486000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38087,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource28,2011-09-06 13:49:06.451000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38086,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource28,2011-09-06 15:32:21.434000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38113,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-09-06 15:32:50.799000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38115,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource28,2011-09-06 15:34:32.598000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38114,T08 Draft and send request for advice,complete,Group 1,Resource28,2011-09-06 15:35:00.732000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38116,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource28,2011-09-06 15:35:27.742000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38117,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-09-06 15:35:57.624000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38118,T08 Draft and send request for advice,complete,Group 1,Resource28,2011-09-06 15:36:57.508000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38120,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource28,2011-09-06 15:37:21.293000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38119,T07-2 Draft intern advice aspect 2,complete,Group 15,Resource28,2011-09-06 15:37:40.982000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38121,T06 Determine necessity of stop advice,complete,Group 1,Resource28,2011-09-06 15:38:06.003000+02:00 +Internet,case-9289,2011-09-22 01:06:40+02:00,General,2011-11-28 13:54:14.388000+01:00,2011-09-22 01:06:40.020000+02:00,Group 11,Resource28,2011-07-28 01:06:40.020000+02:00,task-38122,T10 Determine necessity to stop indication,complete,Group 1,Resource28,2011-09-06 15:41:24.377000+02:00 +Internet,case-9290,2011-10-12 01:06:40+02:00,General,,2011-10-12 01:06:40.020000+02:00,Group 5,Resource14,2011-08-17 01:06:40.020000+02:00,task-37462,Confirmation of receipt,complete,EMPTY,Resource14,2011-11-17 09:00:49.548000+01:00 +Internet,case-9290,2011-10-12 01:06:40+02:00,General,,2011-10-12 01:06:40.020000+02:00,Group 5,Resource14,2011-08-17 01:06:40.020000+02:00,task-46940,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-11-17 09:05:55.615000+01:00 +Internet,case-9290,2011-10-12 01:06:40+02:00,General,,2011-10-12 01:06:40.020000+02:00,Group 5,Resource14,2011-08-17 01:06:40.020000+02:00,task-46942,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-11-17 09:06:15.256000+01:00 +Internet,case-9290,2011-10-12 01:06:40+02:00,General,,2011-10-12 01:06:40.020000+02:00,Group 5,Resource14,2011-08-17 01:06:40.020000+02:00,task-46943,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-11-17 09:06:34.207000+01:00 +Internet,case-9290,2011-10-12 01:06:40+02:00,General,,2011-10-12 01:06:40.020000+02:00,Group 5,Resource14,2011-08-17 01:06:40.020000+02:00,task-46941,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-11-17 09:06:52.343000+01:00 +Internet,case-9290,2011-10-12 01:06:40+02:00,General,,2011-10-12 01:06:40.020000+02:00,Group 5,Resource14,2011-08-17 01:06:40.020000+02:00,task-46944,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-11-17 09:07:20.758000+01:00 +Internet,case-9292,2011-11-24 01:06:40+01:00,General,2011-12-01 00:00:00.010000+01:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource01,2011-08-18 01:06:40.020000+02:00,task-37475,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-30 13:40:01.094000+02:00 +Internet,case-9292,2011-11-24 01:06:40+01:00,General,2011-12-01 00:00:00.010000+01:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource01,2011-08-18 01:06:40.020000+02:00,task-41027,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-30 13:41:56.250000+02:00 +Internet,case-9292,2011-11-24 01:06:40+01:00,General,2011-12-01 00:00:00.010000+01:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource01,2011-08-18 01:06:40.020000+02:00,task-41029,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-30 13:42:15.520000+02:00 +Internet,case-9292,2011-11-24 01:06:40+01:00,General,2011-12-01 00:00:00.010000+01:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource01,2011-08-18 01:06:40.020000+02:00,task-41030,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-30 13:44:46.846000+02:00 +Internet,case-9292,2011-11-24 01:06:40+01:00,General,2011-12-01 00:00:00.010000+01:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource01,2011-08-18 01:06:40.020000+02:00,task-41028,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-30 13:45:34.479000+02:00 +Internet,case-9292,2011-11-24 01:06:40+01:00,General,2011-12-01 00:00:00.010000+01:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource01,2011-08-18 01:06:40.020000+02:00,task-41031,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-30 13:46:09.118000+02:00 +Internet,case-9294,2011-11-24 01:06:40+01:00,General,2011-11-25 09:40:46.473000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource13,2011-08-18 01:06:40.020000+02:00,task-37481,Confirmation of receipt,complete,EMPTY,Resource13,2011-09-16 11:22:01.912000+02:00 +Internet,case-9294,2011-11-24 01:06:40+01:00,General,2011-11-25 09:40:46.473000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource13,2011-08-18 01:06:40.020000+02:00,task-39220,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-09-16 11:23:27.590000+02:00 +Internet,case-9294,2011-11-24 01:06:40+01:00,General,2011-11-25 09:40:46.473000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource13,2011-08-18 01:06:40.020000+02:00,task-39226,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-09-16 11:28:07.415000+02:00 +Internet,case-9294,2011-11-24 01:06:40+01:00,General,2011-11-25 09:40:46.473000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource13,2011-08-18 01:06:40.020000+02:00,task-39222,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-09-16 11:30:04.519000+02:00 +Internet,case-9294,2011-11-24 01:06:40+01:00,General,2011-11-25 09:40:46.473000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource13,2011-08-18 01:06:40.020000+02:00,task-39234,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-09-16 11:33:57.383000+02:00 +Internet,case-9294,2011-11-24 01:06:40+01:00,General,2011-11-25 09:40:46.473000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource13,2011-08-18 01:06:40.020000+02:00,task-39236,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-09-16 11:35:59.052000+02:00 +Internet,case-9295,2011-10-24 01:06:40+02:00,General,2011-10-05 10:52:33.979000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource05,2011-08-29 01:06:40.020000+02:00,task-37503,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-15 11:24:40.993000+02:00 +Internet,case-9295,2011-10-24 01:06:40+02:00,General,2011-10-05 10:52:33.979000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource05,2011-08-29 01:06:40.020000+02:00,task-39028,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-15 11:25:06.002000+02:00 +Internet,case-9295,2011-10-24 01:06:40+02:00,General,2011-10-05 10:52:33.979000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource05,2011-08-29 01:06:40.020000+02:00,task-39030,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-15 11:25:25.938000+02:00 +Internet,case-9295,2011-10-24 01:06:40+02:00,General,2011-10-05 10:52:33.979000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource05,2011-08-29 01:06:40.020000+02:00,task-39031,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-15 11:29:28.871000+02:00 +Internet,case-9295,2011-10-24 01:06:40+02:00,General,2011-10-05 10:52:33.979000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource05,2011-08-29 01:06:40.020000+02:00,task-39029,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-15 11:31:19.790000+02:00 +Internet,case-9295,2011-10-24 01:06:40+02:00,General,2011-10-05 10:52:33.979000+02:00,2011-10-24 01:06:40.020000+02:00,Group 5,Resource05,2011-08-29 01:06:40.020000+02:00,task-39033,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-15 11:31:45.538000+02:00 +Internet,case-9331,2011-10-14 01:06:40+02:00,General,2011-10-03 12:01:25.051000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-37856,Confirmation of receipt,complete,EMPTY,Resource23,2011-09-01 13:56:19.252000+02:00 +Internet,case-9331,2011-10-14 01:06:40+02:00,General,2011-10-03 12:01:25.051000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-37878,T02 Check confirmation of receipt,complete,EMPTY,Resource23,2011-09-01 13:57:02.601000+02:00 +Internet,case-9331,2011-10-14 01:06:40+02:00,General,2011-10-03 12:01:25.051000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-37880,T04 Determine confirmation of receipt,complete,EMPTY,Resource23,2011-09-01 13:57:52.262000+02:00 +Internet,case-9331,2011-10-14 01:06:40+02:00,General,2011-10-03 12:01:25.051000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-37881,T05 Print and send confirmation of receipt,complete,EMPTY,Resource23,2011-09-01 13:58:33.616000+02:00 +Internet,case-9331,2011-10-14 01:06:40+02:00,General,2011-10-03 12:01:25.051000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-37879,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-09-01 13:59:02.412000+02:00 +Internet,case-9331,2011-10-14 01:06:40+02:00,General,2011-10-03 12:01:25.051000+02:00,2011-10-14 01:06:40.020000+02:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-37882,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-09-01 13:59:38.075000+02:00 +Internet,case-9336,2011-10-27 15:40:26.738000+02:00,General,2011-10-27 11:16:39.329000+02:00,2011-10-27 15:40:26.738000+02:00,Group 8,Resource11,2011-09-01 15:40:26.738000+02:00,task-37905,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 11:03:09.173000+02:00 +Internet,case-9336,2011-10-27 15:40:26.738000+02:00,General,2011-10-27 11:16:39.329000+02:00,2011-10-27 15:40:26.738000+02:00,Group 8,Resource11,2011-09-01 15:40:26.738000+02:00,task-38358,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 11:03:32.193000+02:00 +Internet,case-9336,2011-10-27 15:40:26.738000+02:00,General,2011-10-27 11:16:39.329000+02:00,2011-10-27 15:40:26.738000+02:00,Group 8,Resource11,2011-09-01 15:40:26.738000+02:00,task-38360,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 11:03:47.373000+02:00 +Internet,case-9336,2011-10-27 15:40:26.738000+02:00,General,2011-10-27 11:16:39.329000+02:00,2011-10-27 15:40:26.738000+02:00,Group 8,Resource11,2011-09-01 15:40:26.738000+02:00,task-38361,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 11:04:04.545000+02:00 +Internet,case-9336,2011-10-27 15:40:26.738000+02:00,General,2011-10-27 11:16:39.329000+02:00,2011-10-27 15:40:26.738000+02:00,Group 8,Resource11,2011-09-01 15:40:26.738000+02:00,task-38359,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 11:04:22.543000+02:00 +Internet,case-9336,2011-10-27 15:40:26.738000+02:00,General,2011-10-27 11:16:39.329000+02:00,2011-10-27 15:40:26.738000+02:00,Group 8,Resource11,2011-09-01 15:40:26.738000+02:00,task-38362,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 11:04:48.877000+02:00 +Internet,case-9337,2011-10-27 16:09:49.687000+02:00,General,2011-10-05 00:00:00.020000+02:00,2011-10-27 16:09:49.687000+02:00,Group 8,Resource11,2011-09-01 16:09:49.687000+02:00,task-37906,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 11:13:05.487000+02:00 +Internet,case-9337,2011-10-27 16:09:49.687000+02:00,General,2011-10-05 00:00:00.020000+02:00,2011-10-27 16:09:49.687000+02:00,Group 8,Resource11,2011-09-01 16:09:49.687000+02:00,task-38378,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 11:13:24.946000+02:00 +Internet,case-9337,2011-10-27 16:09:49.687000+02:00,General,2011-10-05 00:00:00.020000+02:00,2011-10-27 16:09:49.687000+02:00,Group 8,Resource11,2011-09-01 16:09:49.687000+02:00,task-38380,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 11:13:42.580000+02:00 +Internet,case-9337,2011-10-27 16:09:49.687000+02:00,General,2011-10-05 00:00:00.020000+02:00,2011-10-27 16:09:49.687000+02:00,Group 8,Resource11,2011-09-01 16:09:49.687000+02:00,task-38381,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 11:14:00.562000+02:00 +Internet,case-9337,2011-10-27 16:09:49.687000+02:00,General,2011-10-05 00:00:00.020000+02:00,2011-10-27 16:09:49.687000+02:00,Group 8,Resource11,2011-09-01 16:09:49.687000+02:00,task-38379,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 11:14:16.452000+02:00 +Internet,case-9337,2011-10-27 16:09:49.687000+02:00,General,2011-10-05 00:00:00.020000+02:00,2011-10-27 16:09:49.687000+02:00,Group 8,Resource11,2011-09-01 16:09:49.687000+02:00,task-38382,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 11:14:40.451000+02:00 +Internet,case-9366,2011-10-27 01:06:40+02:00,General,2011-10-05 13:14:11.328000+02:00,2011-10-27 01:06:40.020000+02:00,Group 5,Resource05,2011-09-01 01:06:40.020000+02:00,task-37975,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-15 18:47:36.235000+02:00 +Internet,case-9366,2011-10-27 01:06:40+02:00,General,2011-10-05 13:14:11.328000+02:00,2011-10-27 01:06:40.020000+02:00,Group 5,Resource05,2011-09-01 01:06:40.020000+02:00,task-39162,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-15 18:47:58.746000+02:00 +Internet,case-9366,2011-10-27 01:06:40+02:00,General,2011-10-05 13:14:11.328000+02:00,2011-10-27 01:06:40.020000+02:00,Group 5,Resource05,2011-09-01 01:06:40.020000+02:00,task-39164,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-15 18:48:47.297000+02:00 +Internet,case-9366,2011-10-27 01:06:40+02:00,General,2011-10-05 13:14:11.328000+02:00,2011-10-27 01:06:40.020000+02:00,Group 5,Resource05,2011-09-01 01:06:40.020000+02:00,task-39165,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-15 18:51:24.071000+02:00 +Internet,case-9366,2011-10-27 01:06:40+02:00,General,2011-10-05 13:14:11.328000+02:00,2011-10-27 01:06:40.020000+02:00,Group 5,Resource05,2011-09-01 01:06:40.020000+02:00,task-39163,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-15 18:51:45.644000+02:00 +Internet,case-9366,2011-10-27 01:06:40+02:00,General,2011-10-05 13:14:11.328000+02:00,2011-10-27 01:06:40.020000+02:00,Group 5,Resource05,2011-09-01 01:06:40.020000+02:00,task-39166,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-15 18:52:11.727000+02:00 +Internet,case-9368,2011-10-27 01:06:40+02:00,General,2011-09-21 13:55:53.053000+02:00,2011-10-27 01:06:40.020000+02:00,Group 8,Resource11,2011-09-01 01:06:40.020000+02:00,task-37994,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 10:45:41.620000+02:00 +Internet,case-9368,2011-10-27 01:06:40+02:00,General,2011-09-21 13:55:53.053000+02:00,2011-10-27 01:06:40.020000+02:00,Group 8,Resource11,2011-09-01 01:06:40.020000+02:00,task-38328,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 10:46:09.971000+02:00 +Internet,case-9368,2011-10-27 01:06:40+02:00,General,2011-09-21 13:55:53.053000+02:00,2011-10-27 01:06:40.020000+02:00,Group 8,Resource11,2011-09-01 01:06:40.020000+02:00,task-38330,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 10:46:45.565000+02:00 +Internet,case-9368,2011-10-27 01:06:40+02:00,General,2011-09-21 13:55:53.053000+02:00,2011-10-27 01:06:40.020000+02:00,Group 8,Resource11,2011-09-01 01:06:40.020000+02:00,task-38331,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 10:47:04.683000+02:00 +Internet,case-9368,2011-10-27 01:06:40+02:00,General,2011-09-21 13:55:53.053000+02:00,2011-10-27 01:06:40.020000+02:00,Group 8,Resource11,2011-09-01 01:06:40.020000+02:00,task-38329,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 10:47:22.708000+02:00 +Internet,case-9368,2011-10-27 01:06:40+02:00,General,2011-09-21 13:55:53.053000+02:00,2011-10-27 01:06:40.020000+02:00,Group 8,Resource11,2011-09-01 01:06:40.020000+02:00,task-38332,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 10:47:43.503000+02:00 +Internet,case-9370,2011-10-28 01:06:40+02:00,General,2011-09-20 12:13:30.037000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38012,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 11:21:58.956000+02:00 +Internet,case-9370,2011-10-28 01:06:40+02:00,General,2011-09-20 12:13:30.037000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38401,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 11:22:18.607000+02:00 +Internet,case-9370,2011-10-28 01:06:40+02:00,General,2011-09-20 12:13:30.037000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38403,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 11:22:36.500000+02:00 +Internet,case-9370,2011-10-28 01:06:40+02:00,General,2011-09-20 12:13:30.037000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38404,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 11:22:56.185000+02:00 +Internet,case-9370,2011-10-28 01:06:40+02:00,General,2011-09-20 12:13:30.037000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38402,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 11:23:14.747000+02:00 +Internet,case-9370,2011-10-28 01:06:40+02:00,General,2011-09-20 12:13:30.037000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38406,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 11:23:41.594000+02:00 +Internet,case-9373,2011-10-28 01:06:40+02:00,General,2011-09-20 12:18:28.793000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38022,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-08 11:31:49.409000+02:00 +Internet,case-9373,2011-10-28 01:06:40+02:00,General,2011-09-20 12:18:28.793000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38420,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-08 11:32:07.761000+02:00 +Internet,case-9373,2011-10-28 01:06:40+02:00,General,2011-09-20 12:18:28.793000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38422,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-08 11:32:25.830000+02:00 +Internet,case-9373,2011-10-28 01:06:40+02:00,General,2011-09-20 12:18:28.793000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38423,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-08 11:32:46.834000+02:00 +Internet,case-9373,2011-10-28 01:06:40+02:00,General,2011-09-20 12:18:28.793000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38421,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-08 11:33:03.878000+02:00 +Internet,case-9373,2011-10-28 01:06:40+02:00,General,2011-09-20 12:18:28.793000+02:00,2011-10-28 01:06:40.020000+02:00,Group 8,Resource11,2011-09-02 01:06:40.020000+02:00,task-38424,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-08 11:33:26.127000+02:00 +Internet,case-9376,2011-11-24 01:06:40+01:00,General,2011-11-25 09:21:24.447000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource04,2011-09-02 01:06:40.020000+02:00,task-38025,Confirmation of receipt,complete,EMPTY,Resource04,2011-09-12 15:53:00.121000+02:00 +Internet,case-9376,2011-11-24 01:06:40+01:00,General,2011-11-25 09:21:24.447000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource04,2011-09-02 01:06:40.020000+02:00,task-38778,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-09-12 15:53:21.512000+02:00 +Internet,case-9376,2011-11-24 01:06:40+01:00,General,2011-11-25 09:21:24.447000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource04,2011-09-02 01:06:40.020000+02:00,task-38780,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-09-12 15:53:40.486000+02:00 +Internet,case-9376,2011-11-24 01:06:40+01:00,General,2011-11-25 09:21:24.447000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource04,2011-09-02 01:06:40.020000+02:00,task-38781,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-09-12 15:54:11.305000+02:00 +Internet,case-9376,2011-11-24 01:06:40+01:00,General,2011-11-25 09:21:24.447000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource04,2011-09-02 01:06:40.020000+02:00,task-38779,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-09-12 15:54:32.202000+02:00 +Internet,case-9376,2011-11-24 01:06:40+01:00,General,2011-11-25 09:21:24.447000+01:00,2011-11-24 01:06:40.010000+01:00,Group 5,Resource04,2011-09-02 01:06:40.020000+02:00,task-38782,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-09-12 15:54:52.193000+02:00 +Internet,case-9385,2011-10-31 01:06:40+01:00,General,2011-10-28 14:46:41.985000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-09-05 01:06:40.020000+02:00,task-38058,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-12 14:39:45.245000+02:00 +Internet,case-9385,2011-10-31 01:06:40+01:00,General,2011-10-28 14:46:41.985000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-09-05 01:06:40.020000+02:00,task-43143,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-12 14:40:07.202000+02:00 +Internet,case-9385,2011-10-31 01:06:40+01:00,General,2011-10-28 14:46:41.985000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-09-05 01:06:40.020000+02:00,task-43145,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-12 14:40:41.087000+02:00 +Internet,case-9385,2011-10-31 01:06:40+01:00,General,2011-10-28 14:46:41.985000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-09-05 01:06:40.020000+02:00,task-43146,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-12 14:40:59.913000+02:00 +Internet,case-9385,2011-10-31 01:06:40+01:00,General,2011-10-28 14:46:41.985000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-09-05 01:06:40.020000+02:00,task-43144,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-12 14:41:58.247000+02:00 +Internet,case-9385,2011-10-31 01:06:40+01:00,General,2011-10-28 14:46:41.985000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource06,2011-09-05 01:06:40.020000+02:00,task-43147,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-12 14:44:40.449000+02:00 +Internet,case-9389,2011-10-31 01:06:40+01:00,General,2011-10-05 15:16:45.222000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource05,2011-09-05 01:06:40.020000+02:00,task-38083,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-19 10:16:45.370000+02:00 +Internet,case-9389,2011-10-31 01:06:40+01:00,General,2011-10-05 15:16:45.222000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource05,2011-09-05 01:06:40.020000+02:00,task-39400,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-19 10:17:32.195000+02:00 +Internet,case-9389,2011-10-31 01:06:40+01:00,General,2011-10-05 15:16:45.222000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource05,2011-09-05 01:06:40.020000+02:00,task-39402,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-19 10:18:06.933000+02:00 +Internet,case-9389,2011-10-31 01:06:40+01:00,General,2011-10-05 15:16:45.222000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource05,2011-09-05 01:06:40.020000+02:00,task-39401,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-19 10:18:43.791000+02:00 +Internet,case-9389,2011-10-31 01:06:40+01:00,General,2011-10-05 15:16:45.222000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource05,2011-09-05 01:06:40.020000+02:00,task-39404,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-19 10:19:07.754000+02:00 +Internet,case-9389,2011-10-31 01:06:40+01:00,General,2011-10-05 15:16:45.222000+02:00,2011-10-31 01:06:40.010000+01:00,Group 5,Resource05,2011-09-05 01:06:40.020000+02:00,task-39403,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-19 11:12:23.513000+02:00 +Internet,case-9394,2011-11-01 15:15:44.205000+01:00,General,2011-10-21 11:39:20.626000+02:00,2011-11-01 15:15:44.205000+01:00,Group 5,Resource02,2011-09-06 15:21:18.331000+02:00,task-38112,Confirmation of receipt,complete,EMPTY,Resource02,2011-09-26 15:07:52.805000+02:00 +Internet,case-9394,2011-11-01 15:15:44.205000+01:00,General,2011-10-21 11:39:20.626000+02:00,2011-11-01 15:15:44.205000+01:00,Group 5,Resource02,2011-09-06 15:21:18.331000+02:00,task-40519,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-09-26 15:08:19.476000+02:00 +Internet,case-9394,2011-11-01 15:15:44.205000+01:00,General,2011-10-21 11:39:20.626000+02:00,2011-11-01 15:15:44.205000+01:00,Group 5,Resource02,2011-09-06 15:21:18.331000+02:00,task-40521,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-09-26 15:08:44.222000+02:00 +Internet,case-9394,2011-11-01 15:15:44.205000+01:00,General,2011-10-21 11:39:20.626000+02:00,2011-11-01 15:15:44.205000+01:00,Group 5,Resource02,2011-09-06 15:21:18.331000+02:00,task-40522,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-09-26 15:09:20.457000+02:00 +Internet,case-9394,2011-11-01 15:15:44.205000+01:00,General,2011-10-21 11:39:20.626000+02:00,2011-11-01 15:15:44.205000+01:00,Group 5,Resource02,2011-09-06 15:21:18.331000+02:00,task-40520,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-09-26 15:37:32.379000+02:00 +Internet,case-9394,2011-11-01 15:15:44.205000+01:00,General,2011-10-21 11:39:20.626000+02:00,2011-11-01 15:15:44.205000+01:00,Group 5,Resource02,2011-09-06 15:21:18.331000+02:00,task-40538,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-09-26 15:47:24.357000+02:00 +Internet,case-9395,2011-11-01 01:06:40+01:00,General,2011-09-23 10:18:23.947000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-38123,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-19 14:51:41.225000+02:00 +Internet,case-9395,2011-11-01 01:06:40+01:00,General,2011-09-23 10:18:23.947000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39481,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-19 14:52:23.816000+02:00 +Internet,case-9395,2011-11-01 01:06:40+01:00,General,2011-09-23 10:18:23.947000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39482,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-19 14:54:19.103000+02:00 +Internet,case-9395,2011-11-01 01:06:40+01:00,General,2011-09-23 10:18:23.947000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39485,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-19 14:59:12.713000+02:00 +Internet,case-9395,2011-11-01 01:06:40+01:00,General,2011-09-23 10:18:23.947000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39486,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-09-21 12:38:15.584000+02:00 +Internet,case-9395,2011-11-01 01:06:40+01:00,General,2011-09-23 10:18:23.947000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39484,T04 Determine confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 12:38:33.934000+02:00 +Internet,case-9395,2011-11-01 01:06:40+01:00,General,2011-09-23 10:18:23.947000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39772,T05 Print and send confirmation of receipt,complete,EMPTY,Resource10,2011-09-22 14:09:53.320000+02:00 +Internet,case-9395,2011-11-01 01:06:40+01:00,General,2011-09-23 10:18:23.947000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39771,T12 Check document X request unlicensed,complete,Group 4,Resource01,2011-09-23 10:12:10.134000+02:00 +Internet,case-9395,2011-11-01 01:06:40+01:00,General,2011-09-23 10:18:23.947000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-40036,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-09-23 10:18:08.982000+02:00 +Internet,case-9395,2011-11-01 01:06:40+01:00,General,2011-09-23 10:18:23.947000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-40039,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-09-23 10:18:23.789000+02:00 +Internet,case-9407,2011-11-01 01:06:40+01:00,General,2011-09-26 09:12:19.969000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-38163,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-19 16:39:59.355000+02:00 +Internet,case-9407,2011-11-01 01:06:40+01:00,General,2011-09-26 09:12:19.969000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39495,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-19 16:41:01.252000+02:00 +Internet,case-9407,2011-11-01 01:06:40+01:00,General,2011-09-26 09:12:19.969000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39496,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-19 16:42:22.882000+02:00 +Internet,case-9407,2011-11-01 01:06:40+01:00,General,2011-09-26 09:12:19.969000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39498,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-19 16:42:42.075000+02:00 +Internet,case-9407,2011-11-01 01:06:40+01:00,General,2011-09-26 09:12:19.969000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39497,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-09-25 21:23:18.352000+02:00 +Internet,case-9407,2011-11-01 01:06:40+01:00,General,2011-09-26 09:12:19.969000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-40236,T05 Print and send confirmation of receipt,complete,EMPTY,Resource03,2011-09-26 08:58:37.903000+02:00 +Internet,case-9407,2011-11-01 01:06:40+01:00,General,2011-09-26 09:12:19.969000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-39499,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-09-26 09:11:04.340000+02:00 +Internet,case-9407,2011-11-01 01:06:40+01:00,General,2011-09-26 09:12:19.969000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-40258,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-09-26 09:11:43.179000+02:00 +Internet,case-9407,2011-11-01 01:06:40+01:00,General,2011-09-26 09:12:19.969000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-40259,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-09-26 09:12:03.930000+02:00 +Internet,case-9407,2011-11-01 01:06:40+01:00,General,2011-09-26 09:12:19.969000+02:00,2011-11-01 01:06:40.010000+01:00,Group 8,Resource01,2011-09-06 01:06:40.020000+02:00,task-40260,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-09-26 09:12:19.803000+02:00 +Internet,case-9408,2011-11-01 01:06:40+01:00,General,2011-11-18 10:13:52.690000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource14,2011-09-06 01:06:40.020000+02:00,task-38168,Confirmation of receipt,complete,EMPTY,Resource14,2011-10-11 08:26:07.057000+02:00 +Internet,case-9408,2011-11-01 01:06:40+01:00,General,2011-11-18 10:13:52.690000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource14,2011-09-06 01:06:40.020000+02:00,task-42669,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-10-11 08:26:31.599000+02:00 +Internet,case-9408,2011-11-01 01:06:40+01:00,General,2011-11-18 10:13:52.690000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource14,2011-09-06 01:06:40.020000+02:00,task-42671,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-10-11 08:26:57.473000+02:00 +Internet,case-9408,2011-11-01 01:06:40+01:00,General,2011-11-18 10:13:52.690000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource14,2011-09-06 01:06:40.020000+02:00,task-42672,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-10-11 08:27:18.566000+02:00 +Internet,case-9408,2011-11-01 01:06:40+01:00,General,2011-11-18 10:13:52.690000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource14,2011-09-06 01:06:40.020000+02:00,task-42670,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-10-11 08:27:37.936000+02:00 +Internet,case-9408,2011-11-01 01:06:40+01:00,General,2011-11-18 10:13:52.690000+01:00,2011-11-01 01:06:40.010000+01:00,Group 5,Resource14,2011-09-06 01:06:40.020000+02:00,task-42673,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-10-11 08:28:08.662000+02:00 +Internet,case-9410,2011-10-28 01:06:40+02:00,General,2011-10-17 13:02:05.819000+02:00,2011-10-28 01:06:40.020000+02:00,Group 5,Resource02,2011-09-02 01:06:40.020000+02:00,task-38200,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-06 08:04:24.927000+02:00 +Internet,case-9410,2011-10-28 01:06:40+02:00,General,2011-10-17 13:02:05.819000+02:00,2011-10-28 01:06:40.020000+02:00,Group 5,Resource02,2011-09-02 01:06:40.020000+02:00,task-41905,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-06 08:04:49.716000+02:00 +Internet,case-9410,2011-10-28 01:06:40+02:00,General,2011-10-17 13:02:05.819000+02:00,2011-10-28 01:06:40.020000+02:00,Group 5,Resource02,2011-09-02 01:06:40.020000+02:00,task-41907,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-06 08:05:07.576000+02:00 +Internet,case-9410,2011-10-28 01:06:40+02:00,General,2011-10-17 13:02:05.819000+02:00,2011-10-28 01:06:40.020000+02:00,Group 5,Resource02,2011-09-02 01:06:40.020000+02:00,task-41908,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-06 08:05:26.560000+02:00 +Internet,case-9410,2011-10-28 01:06:40+02:00,General,2011-10-17 13:02:05.819000+02:00,2011-10-28 01:06:40.020000+02:00,Group 5,Resource02,2011-09-02 01:06:40.020000+02:00,task-41906,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-06 08:05:49.874000+02:00 +Internet,case-9410,2011-10-28 01:06:40+02:00,General,2011-10-17 13:02:05.819000+02:00,2011-10-28 01:06:40.020000+02:00,Group 5,Resource02,2011-09-02 01:06:40.020000+02:00,task-41909,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-06 08:06:28.334000+02:00 +Internet,case-9411,2011-11-02 11:21:02.567000+01:00,General,2011-10-05 15:34:43.763000+02:00,2011-11-02 11:21:02.567000+01:00,Group 5,Resource02,2011-09-07 11:21:02.567000+02:00,task-38203,Confirmation of receipt,complete,EMPTY,Resource02,2011-09-26 11:09:34.608000+02:00 +Internet,case-9411,2011-11-02 11:21:02.567000+01:00,General,2011-10-05 15:34:43.763000+02:00,2011-11-02 11:21:02.567000+01:00,Group 5,Resource02,2011-09-07 11:21:02.567000+02:00,task-40339,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-09-26 11:09:55.369000+02:00 +Internet,case-9411,2011-11-02 11:21:02.567000+01:00,General,2011-10-05 15:34:43.763000+02:00,2011-11-02 11:21:02.567000+01:00,Group 5,Resource02,2011-09-07 11:21:02.567000+02:00,task-40341,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-09-26 11:10:24.969000+02:00 +Internet,case-9411,2011-11-02 11:21:02.567000+01:00,General,2011-10-05 15:34:43.763000+02:00,2011-11-02 11:21:02.567000+01:00,Group 5,Resource02,2011-09-07 11:21:02.567000+02:00,task-40343,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-09-26 11:10:45.973000+02:00 +Internet,case-9411,2011-11-02 11:21:02.567000+01:00,General,2011-10-05 15:34:43.763000+02:00,2011-11-02 11:21:02.567000+01:00,Group 5,Resource02,2011-09-07 11:21:02.567000+02:00,task-40340,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-09-26 11:11:05.468000+02:00 +Internet,case-9411,2011-11-02 11:21:02.567000+01:00,General,2011-10-05 15:34:43.763000+02:00,2011-11-02 11:21:02.567000+01:00,Group 5,Resource02,2011-09-07 11:21:02.567000+02:00,task-40344,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-09-26 11:11:24.472000+02:00 +Internet,case-9413,2011-11-02 13:02:36.975000+01:00,General,2011-09-21 14:00:25.191000+02:00,2011-11-02 13:02:36.975000+01:00,Group 8,Resource11,2011-09-07 13:02:36.975000+02:00,task-38215,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-15 16:00:34.039000+02:00 +Internet,case-9413,2011-11-02 13:02:36.975000+01:00,General,2011-09-21 14:00:25.191000+02:00,2011-11-02 13:02:36.975000+01:00,Group 8,Resource11,2011-09-07 13:02:36.975000+02:00,task-39145,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-15 16:00:53.237000+02:00 +Internet,case-9413,2011-11-02 13:02:36.975000+01:00,General,2011-09-21 14:00:25.191000+02:00,2011-11-02 13:02:36.975000+01:00,Group 8,Resource11,2011-09-07 13:02:36.975000+02:00,task-39147,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-15 16:01:12.398000+02:00 +Internet,case-9413,2011-11-02 13:02:36.975000+01:00,General,2011-09-21 14:00:25.191000+02:00,2011-11-02 13:02:36.975000+01:00,Group 8,Resource11,2011-09-07 13:02:36.975000+02:00,task-39148,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-15 16:01:29.147000+02:00 +Internet,case-9413,2011-11-02 13:02:36.975000+01:00,General,2011-09-21 14:00:25.191000+02:00,2011-11-02 13:02:36.975000+01:00,Group 8,Resource11,2011-09-07 13:02:36.975000+02:00,task-39146,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-15 16:01:53.090000+02:00 +Internet,case-9413,2011-11-02 13:02:36.975000+01:00,General,2011-09-21 14:00:25.191000+02:00,2011-11-02 13:02:36.975000+01:00,Group 8,Resource11,2011-09-07 13:02:36.975000+02:00,task-39149,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-15 16:02:25.238000+02:00 +Internet,case-9414,2011-11-02 13:34:52.554000+01:00,General,2011-09-26 14:31:54.627000+02:00,2011-11-02 13:34:52.554000+01:00,Group 8,Resource11,2011-09-07 13:34:52.554000+02:00,task-38221,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-20 15:37:27.717000+02:00 +Internet,case-9414,2011-11-02 13:34:52.554000+01:00,General,2011-09-26 14:31:54.627000+02:00,2011-11-02 13:34:52.554000+01:00,Group 8,Resource11,2011-09-07 13:34:52.554000+02:00,task-39610,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-20 15:37:56.509000+02:00 +Internet,case-9414,2011-11-02 13:34:52.554000+01:00,General,2011-09-26 14:31:54.627000+02:00,2011-11-02 13:34:52.554000+01:00,Group 8,Resource11,2011-09-07 13:34:52.554000+02:00,task-39611,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-20 15:40:18.931000+02:00 +Internet,case-9414,2011-11-02 13:34:52.554000+01:00,General,2011-09-26 14:31:54.627000+02:00,2011-11-02 13:34:52.554000+01:00,Group 8,Resource11,2011-09-07 13:34:52.554000+02:00,task-39616,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-20 15:41:22.576000+02:00 +Internet,case-9414,2011-11-02 13:34:52.554000+01:00,General,2011-09-26 14:31:54.627000+02:00,2011-11-02 13:34:52.554000+01:00,Group 8,Resource11,2011-09-07 13:34:52.554000+02:00,task-39612,T04 Determine confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 14:05:25.697000+02:00 +Internet,case-9414,2011-11-02 13:34:52.554000+01:00,General,2011-09-26 14:31:54.627000+02:00,2011-11-02 13:34:52.554000+01:00,Group 8,Resource11,2011-09-07 13:34:52.554000+02:00,task-39796,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 14:05:39.819000+02:00 +Internet,case-9415,2011-11-02 14:23:25.265000+01:00,General,2011-09-21 14:06:20.661000+02:00,2011-11-02 14:23:25.265000+01:00,Group 8,Resource11,2011-09-07 14:23:25.265000+02:00,task-38222,Confirmation of receipt,complete,EMPTY,Resource16,2011-09-16 09:47:00.123000+02:00 +Internet,case-9415,2011-11-02 14:23:25.265000+01:00,General,2011-09-21 14:06:20.661000+02:00,2011-11-02 14:23:25.265000+01:00,Group 8,Resource11,2011-09-07 14:23:25.265000+02:00,task-39186,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-09-16 09:49:28.526000+02:00 +Internet,case-9415,2011-11-02 14:23:25.265000+01:00,General,2011-09-21 14:06:20.661000+02:00,2011-11-02 14:23:25.265000+01:00,Group 8,Resource11,2011-09-07 14:23:25.265000+02:00,task-39188,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-09-16 09:50:01.221000+02:00 +Internet,case-9415,2011-11-02 14:23:25.265000+01:00,General,2011-09-21 14:06:20.661000+02:00,2011-11-02 14:23:25.265000+01:00,Group 8,Resource11,2011-09-07 14:23:25.265000+02:00,task-39189,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-09-16 09:50:32.429000+02:00 +Internet,case-9415,2011-11-02 14:23:25.265000+01:00,General,2011-09-21 14:06:20.661000+02:00,2011-11-02 14:23:25.265000+01:00,Group 8,Resource11,2011-09-07 14:23:25.265000+02:00,task-39187,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-09-16 09:51:08.489000+02:00 +Internet,case-9415,2011-11-02 14:23:25.265000+01:00,General,2011-09-21 14:06:20.661000+02:00,2011-11-02 14:23:25.265000+01:00,Group 8,Resource11,2011-09-07 14:23:25.265000+02:00,task-39190,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-09-16 09:51:48.227000+02:00 +Internet,case-9417,2011-11-02 01:06:40+01:00,General,2011-09-29 11:50:24.416000+02:00,2011-11-02 01:06:40.010000+01:00,Group 8,Resource11,2011-09-07 01:06:40.020000+02:00,task-38239,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-15 13:20:12.002000+02:00 +Internet,case-9417,2011-11-02 01:06:40+01:00,General,2011-09-29 11:50:24.416000+02:00,2011-11-02 01:06:40.010000+01:00,Group 8,Resource11,2011-09-07 01:06:40.020000+02:00,task-39096,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-15 13:20:33.100000+02:00 +Internet,case-9417,2011-11-02 01:06:40+01:00,General,2011-09-29 11:50:24.416000+02:00,2011-11-02 01:06:40.010000+01:00,Group 8,Resource11,2011-09-07 01:06:40.020000+02:00,task-39098,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-15 13:20:52.222000+02:00 +Internet,case-9417,2011-11-02 01:06:40+01:00,General,2011-09-29 11:50:24.416000+02:00,2011-11-02 01:06:40.010000+01:00,Group 8,Resource11,2011-09-07 01:06:40.020000+02:00,task-39099,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-15 13:21:21.468000+02:00 +Internet,case-9417,2011-11-02 01:06:40+01:00,General,2011-09-29 11:50:24.416000+02:00,2011-11-02 01:06:40.010000+01:00,Group 8,Resource11,2011-09-07 01:06:40.020000+02:00,task-39097,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-15 13:22:08.191000+02:00 +Internet,case-9417,2011-11-02 01:06:40+01:00,General,2011-09-29 11:50:24.416000+02:00,2011-11-02 01:06:40.010000+01:00,Group 8,Resource11,2011-09-07 01:06:40.020000+02:00,task-39100,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-15 13:22:40.144000+02:00 +Internet,case-9424,2011-12-14 00:00:00+01:00,General,2012-01-17 14:10:50.857000+01:00,2011-12-14 00:00:00.010000+01:00,Group 5,Resource04,2011-09-07 01:06:40.020000+02:00,task-38248,Confirmation of receipt,complete,EMPTY,Resource04,2011-09-12 16:05:03.134000+02:00 +Internet,case-9424,2011-12-14 00:00:00+01:00,General,2012-01-17 14:10:50.857000+01:00,2011-12-14 00:00:00.010000+01:00,Group 5,Resource04,2011-09-07 01:06:40.020000+02:00,task-38784,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-09-12 16:05:31.356000+02:00 +Internet,case-9424,2011-12-14 00:00:00+01:00,General,2012-01-17 14:10:50.857000+01:00,2011-12-14 00:00:00.010000+01:00,Group 5,Resource04,2011-09-07 01:06:40.020000+02:00,task-38786,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-09-12 16:05:49.293000+02:00 +Internet,case-9424,2011-12-14 00:00:00+01:00,General,2012-01-17 14:10:50.857000+01:00,2011-12-14 00:00:00.010000+01:00,Group 5,Resource04,2011-09-07 01:06:40.020000+02:00,task-38787,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-09-12 16:06:12.194000+02:00 +Internet,case-9424,2011-12-14 00:00:00+01:00,General,2012-01-17 14:10:50.857000+01:00,2011-12-14 00:00:00.010000+01:00,Group 5,Resource04,2011-09-07 01:06:40.020000+02:00,task-38785,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-09-12 16:09:37.100000+02:00 +Internet,case-9424,2011-12-14 00:00:00+01:00,General,2012-01-17 14:10:50.857000+01:00,2011-12-14 00:00:00.010000+01:00,Group 5,Resource04,2011-09-07 01:06:40.020000+02:00,task-38788,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-09-12 16:09:56.491000+02:00 +Internet,case-9430,2011-11-03 10:26:54.251000+01:00,General,2011-10-10 14:55:18.420000+02:00,2011-11-03 10:26:54.251000+01:00,Group 8,Resource11,2011-09-08 10:26:54.251000+02:00,task-38314,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 10:39:04.408000+02:00 +Internet,case-9430,2011-11-03 10:26:54.251000+01:00,General,2011-10-10 14:55:18.420000+02:00,2011-11-03 10:26:54.251000+01:00,Group 8,Resource11,2011-09-08 10:26:54.251000+02:00,task-39720,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-21 10:39:24.631000+02:00 +Internet,case-9430,2011-11-03 10:26:54.251000+01:00,General,2011-10-10 14:55:18.420000+02:00,2011-11-03 10:26:54.251000+01:00,Group 8,Resource11,2011-09-08 10:26:54.251000+02:00,task-39722,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-21 10:39:52.924000+02:00 +Internet,case-9430,2011-11-03 10:26:54.251000+01:00,General,2011-10-10 14:55:18.420000+02:00,2011-11-03 10:26:54.251000+01:00,Group 8,Resource11,2011-09-08 10:26:54.251000+02:00,task-39723,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 10:40:09.526000+02:00 +Internet,case-9430,2011-11-03 10:26:54.251000+01:00,General,2011-10-10 14:55:18.420000+02:00,2011-11-03 10:26:54.251000+01:00,Group 8,Resource11,2011-09-08 10:26:54.251000+02:00,task-39721,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-21 10:42:24.039000+02:00 +Internet,case-9430,2011-11-03 10:26:54.251000+01:00,General,2011-10-10 14:55:18.420000+02:00,2011-11-03 10:26:54.251000+01:00,Group 8,Resource11,2011-09-08 10:26:54.251000+02:00,task-39725,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-21 10:43:04.793000+02:00 +Internet,case-9438,2011-11-03 00:00:00+01:00,General,,2011-11-03 00:00:00.010000+01:00,Group 5,Resource14,2011-09-08 01:06:40.020000+02:00,task-38488,Confirmation of receipt,complete,EMPTY,Resource14,2011-10-20 11:45:06.641000+02:00 +Internet,case-9438,2011-11-03 00:00:00+01:00,General,,2011-11-03 00:00:00.010000+01:00,Group 5,Resource14,2011-09-08 01:06:40.020000+02:00,task-43965,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-10-20 11:45:29.869000+02:00 +Internet,case-9438,2011-11-03 00:00:00+01:00,General,,2011-11-03 00:00:00.010000+01:00,Group 5,Resource14,2011-09-08 01:06:40.020000+02:00,task-43967,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-10-20 11:45:53.151000+02:00 +Internet,case-9438,2011-11-03 00:00:00+01:00,General,,2011-11-03 00:00:00.010000+01:00,Group 5,Resource14,2011-09-08 01:06:40.020000+02:00,task-43968,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-10-20 11:46:11.361000+02:00 +Internet,case-9438,2011-11-03 00:00:00+01:00,General,,2011-11-03 00:00:00.010000+01:00,Group 5,Resource14,2011-09-08 01:06:40.020000+02:00,task-43966,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-10-20 11:46:37.953000+02:00 +Internet,case-9438,2011-11-03 00:00:00+01:00,General,,2011-11-03 00:00:00.010000+01:00,Group 5,Resource14,2011-09-08 01:06:40.020000+02:00,task-43970,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-10-20 11:46:59.658000+02:00 +Internet,case-9442,2011-11-03 01:06:40+01:00,General,2011-09-29 13:28:52.704000+02:00,2011-11-03 01:06:40.010000+01:00,Group 8,Resource11,2011-09-08 01:06:40.020000+02:00,task-38527,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-20 16:20:58.206000+02:00 +Internet,case-9442,2011-11-03 01:06:40+01:00,General,2011-09-29 13:28:52.704000+02:00,2011-11-03 01:06:40.010000+01:00,Group 8,Resource11,2011-09-08 01:06:40.020000+02:00,task-39644,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-20 16:21:19.538000+02:00 +Internet,case-9442,2011-11-03 01:06:40+01:00,General,2011-09-29 13:28:52.704000+02:00,2011-11-03 01:06:40.010000+01:00,Group 8,Resource11,2011-09-08 01:06:40.020000+02:00,task-39645,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-21 09:53:12.406000+02:00 +Internet,case-9442,2011-11-03 01:06:40+01:00,General,2011-09-29 13:28:52.704000+02:00,2011-11-03 01:06:40.010000+01:00,Group 8,Resource11,2011-09-08 01:06:40.020000+02:00,task-39685,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-21 09:53:36.673000+02:00 +Internet,case-9442,2011-11-03 01:06:40+01:00,General,2011-09-29 13:28:52.704000+02:00,2011-11-03 01:06:40.010000+01:00,Group 8,Resource11,2011-09-08 01:06:40.020000+02:00,task-39646,T04 Determine confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 10:12:38.485000+02:00 +Internet,case-9442,2011-11-03 01:06:40+01:00,General,2011-09-29 13:28:52.704000+02:00,2011-11-03 01:06:40.010000+01:00,Group 8,Resource11,2011-09-08 01:06:40.020000+02:00,task-39712,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 10:32:06.937000+02:00 +Internet,case-9443,2011-11-03 15:51:10.593000+01:00,General,2011-09-26 14:43:51.468000+02:00,2011-11-03 15:51:10.593000+01:00,Group 8,Resource11,2011-09-08 15:51:10.592000+02:00,task-38541,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 11:27:59.759000+02:00 +Internet,case-9443,2011-11-03 15:51:10.593000+01:00,General,2011-09-26 14:43:51.468000+02:00,2011-11-03 15:51:10.593000+01:00,Group 8,Resource11,2011-09-08 15:51:10.592000+02:00,task-39748,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-21 11:28:20.134000+02:00 +Internet,case-9443,2011-11-03 15:51:10.593000+01:00,General,2011-09-26 14:43:51.468000+02:00,2011-11-03 15:51:10.593000+01:00,Group 8,Resource11,2011-09-08 15:51:10.592000+02:00,task-39750,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-21 11:28:37.309000+02:00 +Internet,case-9443,2011-11-03 15:51:10.593000+01:00,General,2011-09-26 14:43:51.468000+02:00,2011-11-03 15:51:10.593000+01:00,Group 8,Resource11,2011-09-08 15:51:10.592000+02:00,task-39751,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 11:28:59.194000+02:00 +Internet,case-9443,2011-11-03 15:51:10.593000+01:00,General,2011-09-26 14:43:51.468000+02:00,2011-11-03 15:51:10.593000+01:00,Group 8,Resource11,2011-09-08 15:51:10.592000+02:00,task-39749,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-21 11:29:18.493000+02:00 +Internet,case-9443,2011-11-03 15:51:10.593000+01:00,General,2011-09-26 14:43:51.468000+02:00,2011-11-03 15:51:10.593000+01:00,Group 8,Resource11,2011-09-08 15:51:10.592000+02:00,task-39752,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-21 11:29:44.657000+02:00 +Desk,case-9487,2011-11-04 01:06:40+01:00,General,2011-10-24 14:28:59.828000+02:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource13,2011-09-09 01:06:40.020000+02:00,task-38632,Confirmation of receipt,complete,EMPTY,Resource13,2011-09-21 09:42:20.087000+02:00 +Desk,case-9487,2011-11-04 01:06:40+01:00,General,2011-10-24 14:28:59.828000+02:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource13,2011-09-09 01:06:40.020000+02:00,task-39671,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-09-21 09:42:57.765000+02:00 +Desk,case-9487,2011-11-04 01:06:40+01:00,General,2011-10-24 14:28:59.828000+02:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource13,2011-09-09 01:06:40.020000+02:00,task-39673,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-09-21 09:43:29.330000+02:00 +Desk,case-9487,2011-11-04 01:06:40+01:00,General,2011-10-24 14:28:59.828000+02:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource13,2011-09-09 01:06:40.020000+02:00,task-39674,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-09-21 09:43:56.281000+02:00 +Desk,case-9487,2011-11-04 01:06:40+01:00,General,2011-10-24 14:28:59.828000+02:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource13,2011-09-09 01:06:40.020000+02:00,task-39672,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-09-21 09:44:18.054000+02:00 +Desk,case-9487,2011-11-04 01:06:40+01:00,General,2011-10-24 14:28:59.828000+02:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource13,2011-09-09 01:06:40.020000+02:00,task-39675,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-09-21 09:44:37.402000+02:00 +Internet,case-9494,2011-11-06 01:06:40+01:00,General,2011-09-29 13:34:49.834000+02:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-38650,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 15:27:33.064000+02:00 +Internet,case-9494,2011-11-06 01:06:40+01:00,General,2011-09-29 13:34:49.834000+02:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-39836,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-21 15:28:08.253000+02:00 +Internet,case-9494,2011-11-06 01:06:40+01:00,General,2011-09-29 13:34:49.834000+02:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-39838,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-21 15:28:23.539000+02:00 +Internet,case-9494,2011-11-06 01:06:40+01:00,General,2011-09-29 13:34:49.834000+02:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-39839,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 15:28:40.152000+02:00 +Internet,case-9494,2011-11-06 01:06:40+01:00,General,2011-09-29 13:34:49.834000+02:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-39837,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-21 15:28:55.259000+02:00 +Internet,case-9494,2011-11-06 01:06:40+01:00,General,2011-09-29 13:34:49.834000+02:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-39840,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-21 15:29:16.344000+02:00 +Internet,case-9495,2011-11-06 01:06:40+01:00,General,2011-11-07 11:24:35.404000+01:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-38661,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-22 08:57:36.892000+02:00 +Internet,case-9495,2011-11-06 01:06:40+01:00,General,2011-11-07 11:24:35.404000+01:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-39892,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-22 08:58:03.254000+02:00 +Internet,case-9495,2011-11-06 01:06:40+01:00,General,2011-11-07 11:24:35.404000+01:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-39894,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-22 08:58:21.088000+02:00 +Internet,case-9495,2011-11-06 01:06:40+01:00,General,2011-11-07 11:24:35.404000+01:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-39895,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-22 08:58:37.223000+02:00 +Internet,case-9495,2011-11-06 01:06:40+01:00,General,2011-11-07 11:24:35.404000+01:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-39893,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-22 08:59:21.522000+02:00 +Internet,case-9495,2011-11-06 01:06:40+01:00,General,2011-11-07 11:24:35.404000+01:00,2011-11-06 01:06:40.010000+01:00,Group 8,Resource11,2011-09-11 01:06:40.020000+02:00,task-39896,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-22 08:59:46.578000+02:00 +Internet,case-9528,2011-11-07 01:06:40+01:00,General,2011-10-06 14:30:49.004000+02:00,2011-11-07 01:06:40.010000+01:00,Group 5,Resource05,2011-09-12 01:06:40.020000+02:00,task-38811,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-19 12:19:52.001000+02:00 +Internet,case-9528,2011-11-07 01:06:40+01:00,General,2011-10-06 14:30:49.004000+02:00,2011-11-07 01:06:40.010000+01:00,Group 5,Resource05,2011-09-12 01:06:40.020000+02:00,task-39427,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-19 12:25:08.244000+02:00 +Internet,case-9528,2011-11-07 01:06:40+01:00,General,2011-10-06 14:30:49.004000+02:00,2011-11-07 01:06:40.010000+01:00,Group 5,Resource05,2011-09-12 01:06:40.020000+02:00,task-39431,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-19 12:25:37.065000+02:00 +Internet,case-9528,2011-11-07 01:06:40+01:00,General,2011-10-06 14:30:49.004000+02:00,2011-11-07 01:06:40.010000+01:00,Group 5,Resource05,2011-09-12 01:06:40.020000+02:00,task-39432,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-19 12:36:03.258000+02:00 +Internet,case-9528,2011-11-07 01:06:40+01:00,General,2011-10-06 14:30:49.004000+02:00,2011-11-07 01:06:40.010000+01:00,Group 5,Resource05,2011-09-12 01:06:40.020000+02:00,task-39428,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-19 12:52:20.414000+02:00 +Internet,case-9528,2011-11-07 01:06:40+01:00,General,2011-10-06 14:30:49.004000+02:00,2011-11-07 01:06:40.010000+01:00,Group 5,Resource05,2011-09-12 01:06:40.020000+02:00,task-39450,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-19 12:54:11.407000+02:00 +Internet,case-9532,2011-11-08 01:06:40+01:00,General,2011-10-25 14:14:37.632000+02:00,2011-11-08 01:06:40.010000+01:00,Group 6,Resource37,2011-09-13 01:06:40.020000+02:00,task-38815,Confirmation of receipt,complete,EMPTY,Resource25,2011-10-25 09:12:28.347000+02:00 +Internet,case-9532,2011-11-08 01:06:40+01:00,General,2011-10-25 14:14:37.632000+02:00,2011-11-08 01:06:40.010000+01:00,Group 6,Resource37,2011-09-13 01:06:40.020000+02:00,task-44353,T02 Check confirmation of receipt,complete,Group 4,Resource25,2011-10-25 09:12:58.682000+02:00 +Internet,case-9532,2011-11-08 01:06:40+01:00,General,2011-10-25 14:14:37.632000+02:00,2011-11-08 01:06:40.010000+01:00,Group 6,Resource37,2011-09-13 01:06:40.020000+02:00,task-44355,T04 Determine confirmation of receipt,complete,Group 3,Resource25,2011-10-25 09:13:21.444000+02:00 +Internet,case-9532,2011-11-08 01:06:40+01:00,General,2011-10-25 14:14:37.632000+02:00,2011-11-08 01:06:40.010000+01:00,Group 6,Resource37,2011-09-13 01:06:40.020000+02:00,task-44356,T05 Print and send confirmation of receipt,complete,Group 2,Resource25,2011-10-25 09:13:40.512000+02:00 +Internet,case-9532,2011-11-08 01:06:40+01:00,General,2011-10-25 14:14:37.632000+02:00,2011-11-08 01:06:40.010000+01:00,Group 6,Resource37,2011-09-13 01:06:40.020000+02:00,task-44354,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-10-25 09:14:07.874000+02:00 +Internet,case-9532,2011-11-08 01:06:40+01:00,General,2011-10-25 14:14:37.632000+02:00,2011-11-08 01:06:40.010000+01:00,Group 6,Resource37,2011-09-13 01:06:40.020000+02:00,task-44357,T08 Draft and send request for advice,complete,Group 1,Resource25,2011-10-25 09:14:42.520000+02:00 +Internet,case-9532,2011-11-08 01:06:40+01:00,General,2011-10-25 14:14:37.632000+02:00,2011-11-08 01:06:40.010000+01:00,Group 6,Resource37,2011-09-13 01:06:40.020000+02:00,task-44358,T09-3 Process or receive external advice from party 3,complete,Group 1,Resource25,2011-10-25 09:15:24.426000+02:00 +Internet,case-9532,2011-11-08 01:06:40+01:00,General,2011-10-25 14:14:37.632000+02:00,2011-11-08 01:06:40.010000+01:00,Group 6,Resource37,2011-09-13 01:06:40.020000+02:00,task-44359,T06 Determine necessity of stop advice,complete,Group 1,Resource25,2011-10-25 09:15:51.403000+02:00 +Internet,case-9532,2011-11-08 01:06:40+01:00,General,2011-10-25 14:14:37.632000+02:00,2011-11-08 01:06:40.010000+01:00,Group 6,Resource37,2011-09-13 01:06:40.020000+02:00,task-44360,T10 Determine necessity to stop indication,complete,Group 1,Resource25,2011-10-25 09:16:20.683000+02:00 +Internet,case-9542,2011-11-08 00:00:00+01:00,General,,2011-11-08 00:00:00.010000+01:00,Group 5,Resource09,2011-09-13 13:53:46.937000+02:00,task-38847,Confirmation of receipt,complete,EMPTY,Resource09,2012-01-12 11:30:24.529000+01:00 +Internet,case-9542,2011-11-08 00:00:00+01:00,General,,2011-11-08 00:00:00.010000+01:00,Group 5,Resource09,2011-09-13 13:53:46.937000+02:00,task-52064,T02 Check confirmation of receipt,complete,Group 4,Resource09,2012-01-12 11:31:14.791000+01:00 +Internet,case-9542,2011-11-08 00:00:00+01:00,General,,2011-11-08 00:00:00.010000+01:00,Group 5,Resource09,2011-09-13 13:53:46.937000+02:00,task-52066,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2012-01-12 11:31:48.940000+01:00 +Internet,case-9542,2011-11-08 00:00:00+01:00,General,,2011-11-08 00:00:00.010000+01:00,Group 5,Resource09,2011-09-13 13:53:46.937000+02:00,task-52067,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2012-01-12 11:32:43.621000+01:00 +Internet,case-9542,2011-11-08 00:00:00+01:00,General,,2011-11-08 00:00:00.010000+01:00,Group 5,Resource09,2011-09-13 13:53:46.937000+02:00,task-52065,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2012-01-12 11:33:21.699000+01:00 +Internet,case-9542,2011-11-08 00:00:00+01:00,General,,2011-11-08 00:00:00.010000+01:00,Group 5,Resource09,2011-09-13 13:53:46.937000+02:00,task-52068,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2012-01-12 11:34:28.299000+01:00 +Internet,case-9543,2011-11-04 01:06:40+01:00,General,2011-09-29 11:58:55.050000+02:00,2011-11-04 01:06:40.010000+01:00,Group 8,Resource11,2011-09-09 01:06:40.020000+02:00,task-38859,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 14:45:03.537000+02:00 +Internet,case-9543,2011-11-04 01:06:40+01:00,General,2011-09-29 11:58:55.050000+02:00,2011-11-04 01:06:40.010000+01:00,Group 8,Resource11,2011-09-09 01:06:40.020000+02:00,task-39812,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-21 14:45:33.595000+02:00 +Internet,case-9543,2011-11-04 01:06:40+01:00,General,2011-09-29 11:58:55.050000+02:00,2011-11-04 01:06:40.010000+01:00,Group 8,Resource11,2011-09-09 01:06:40.020000+02:00,task-39814,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-21 14:45:50.165000+02:00 +Internet,case-9543,2011-11-04 01:06:40+01:00,General,2011-09-29 11:58:55.050000+02:00,2011-11-04 01:06:40.010000+01:00,Group 8,Resource11,2011-09-09 01:06:40.020000+02:00,task-39815,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 14:46:07.270000+02:00 +Internet,case-9543,2011-11-04 01:06:40+01:00,General,2011-09-29 11:58:55.050000+02:00,2011-11-04 01:06:40.010000+01:00,Group 8,Resource11,2011-09-09 01:06:40.020000+02:00,task-39813,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-21 14:46:22.940000+02:00 +Internet,case-9543,2011-11-04 01:06:40+01:00,General,2011-09-29 11:58:55.050000+02:00,2011-11-04 01:06:40.010000+01:00,Group 8,Resource11,2011-09-09 01:06:40.020000+02:00,task-39816,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-21 14:46:47.481000+02:00 +Internet,case-9544,2011-11-08 14:29:44.135000+01:00,General,2011-09-29 13:44:39.420000+02:00,2011-11-08 14:29:44.135000+01:00,Group 8,Resource11,2011-09-13 14:29:44.135000+02:00,task-38883,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-21 15:58:04.647000+02:00 +Internet,case-9544,2011-11-08 14:29:44.135000+01:00,General,2011-09-29 13:44:39.420000+02:00,2011-11-08 14:29:44.135000+01:00,Group 8,Resource11,2011-09-13 14:29:44.135000+02:00,task-39857,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-21 15:58:56.316000+02:00 +Internet,case-9544,2011-11-08 14:29:44.135000+01:00,General,2011-09-29 13:44:39.420000+02:00,2011-11-08 14:29:44.135000+01:00,Group 8,Resource11,2011-09-13 14:29:44.135000+02:00,task-39859,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-21 15:59:14.985000+02:00 +Internet,case-9544,2011-11-08 14:29:44.135000+01:00,General,2011-09-29 13:44:39.420000+02:00,2011-11-08 14:29:44.135000+01:00,Group 8,Resource11,2011-09-13 14:29:44.135000+02:00,task-39860,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-21 15:59:47.332000+02:00 +Internet,case-9544,2011-11-08 14:29:44.135000+01:00,General,2011-09-29 13:44:39.420000+02:00,2011-11-08 14:29:44.135000+01:00,Group 8,Resource11,2011-09-13 14:29:44.135000+02:00,task-39858,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-21 16:00:01.786000+02:00 +Internet,case-9544,2011-11-08 14:29:44.135000+01:00,General,2011-09-29 13:44:39.420000+02:00,2011-11-08 14:29:44.135000+01:00,Group 8,Resource11,2011-09-13 14:29:44.135000+02:00,task-39861,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-21 16:00:22.573000+02:00 +Internet,case-9545,2011-11-08 01:06:40+01:00,General,2011-10-10 11:38:23.529000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-38890,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-20 15:39:16.472000+02:00 +Internet,case-9545,2011-11-08 01:06:40+01:00,General,2011-10-10 11:38:23.529000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-39613,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-20 15:39:40.796000+02:00 +Internet,case-9545,2011-11-08 01:06:40+01:00,General,2011-10-10 11:38:23.529000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-39615,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-20 15:40:30.567000+02:00 +Internet,case-9545,2011-11-08 01:06:40+01:00,General,2011-10-10 11:38:23.529000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-39617,T05 Print and send confirmation of receipt,complete,EMPTY,Resource05,2011-09-20 15:41:14.444000+02:00 +Internet,case-9545,2011-11-08 01:06:40+01:00,General,2011-10-10 11:38:23.529000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-39614,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-20 15:41:42.340000+02:00 +Internet,case-9545,2011-11-08 01:06:40+01:00,General,2011-10-10 11:38:23.529000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-39620,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-20 15:43:21.369000+02:00 +Internet,case-9554,2011-11-08 01:06:40+01:00,General,2011-11-01 09:46:40.220000+01:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-38908,Confirmation of receipt,complete,EMPTY,Resource05,2011-09-27 10:19:27.159000+02:00 +Internet,case-9554,2011-11-08 01:06:40+01:00,General,2011-11-01 09:46:40.220000+01:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-40584,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-09-27 10:19:52.003000+02:00 +Internet,case-9554,2011-11-08 01:06:40+01:00,General,2011-11-01 09:46:40.220000+01:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-40586,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-09-27 10:20:23.298000+02:00 +Internet,case-9554,2011-11-08 01:06:40+01:00,General,2011-11-01 09:46:40.220000+01:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-40587,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-09-27 10:20:43.516000+02:00 +Internet,case-9554,2011-11-08 01:06:40+01:00,General,2011-11-01 09:46:40.220000+01:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-40585,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-09-27 10:21:02.345000+02:00 +Internet,case-9554,2011-11-08 01:06:40+01:00,General,2011-11-01 09:46:40.220000+01:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-40589,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-09-27 10:21:39.019000+02:00 +Internet,case-9554,2011-11-08 01:06:40+01:00,General,2011-11-01 09:46:40.220000+01:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-40590,T16 Report reasons to hold request,complete,Group 1,Resource05,2011-09-27 10:22:41.154000+02:00 +Internet,case-9554,2011-11-08 01:06:40+01:00,General,2011-11-01 09:46:40.220000+01:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-40591,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-09-27 10:32:41.531000+02:00 +Internet,case-9554,2011-11-08 01:06:40+01:00,General,2011-11-01 09:46:40.220000+01:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-40599,T19 Determine report Y to stop indication,complete,Group 3,Resource05,2011-09-27 10:33:40.371000+02:00 +Internet,case-9554,2011-11-08 01:06:40+01:00,General,2011-11-01 09:46:40.220000+01:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource05,2011-09-13 01:06:40.020000+02:00,task-40600,T20 Print report Y to stop indication,complete,Group 2,Resource05,2011-09-27 10:34:36.894000+02:00 +Internet,case-9557,2011-12-21 01:06:40+01:00,General,2011-12-12 15:51:22.111000+01:00,2011-12-21 01:06:40.010000+01:00,Group 5,Resource02,2011-09-14 01:06:40.020000+02:00,task-38913,Confirmation of receipt,complete,EMPTY,Resource02,2011-09-26 10:25:34.011000+02:00 +Internet,case-9557,2011-12-21 01:06:40+01:00,General,2011-12-12 15:51:22.111000+01:00,2011-12-21 01:06:40.010000+01:00,Group 5,Resource02,2011-09-14 01:06:40.020000+02:00,task-40308,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-09-26 10:26:09.166000+02:00 +Internet,case-9557,2011-12-21 01:06:40+01:00,General,2011-12-12 15:51:22.111000+01:00,2011-12-21 01:06:40.010000+01:00,Group 5,Resource02,2011-09-14 01:06:40.020000+02:00,task-40310,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-09-26 10:26:28.080000+02:00 +Internet,case-9557,2011-12-21 01:06:40+01:00,General,2011-12-12 15:51:22.111000+01:00,2011-12-21 01:06:40.010000+01:00,Group 5,Resource02,2011-09-14 01:06:40.020000+02:00,task-40311,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-09-26 10:26:46.089000+02:00 +Internet,case-9557,2011-12-21 01:06:40+01:00,General,2011-12-12 15:51:22.111000+01:00,2011-12-21 01:06:40.010000+01:00,Group 5,Resource02,2011-09-14 01:06:40.020000+02:00,task-40309,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-17 14:57:01.989000+02:00 +Internet,case-9557,2011-12-21 01:06:40+01:00,General,2011-12-12 15:51:22.111000+01:00,2011-12-21 01:06:40.010000+01:00,Group 5,Resource02,2011-09-14 01:06:40.020000+02:00,task-43478,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-17 14:57:32.825000+02:00 +Internet,case-9562,2011-11-08 01:06:40+01:00,General,2011-10-06 09:07:47.705000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource12,2011-09-13 01:06:40.020000+02:00,task-38959,Confirmation of receipt,complete,EMPTY,Resource12,2011-09-22 14:40:19.636000+02:00 +Internet,case-9562,2011-11-08 01:06:40+01:00,General,2011-10-06 09:07:47.705000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource12,2011-09-13 01:06:40.020000+02:00,task-39975,T02 Check confirmation of receipt,complete,Group 4,Resource12,2011-09-22 14:41:10.376000+02:00 +Internet,case-9562,2011-11-08 01:06:40+01:00,General,2011-10-06 09:07:47.705000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource12,2011-09-13 01:06:40.020000+02:00,task-39977,T04 Determine confirmation of receipt,complete,Group 3,Resource12,2011-09-22 14:44:00.716000+02:00 +Internet,case-9562,2011-11-08 01:06:40+01:00,General,2011-10-06 09:07:47.705000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource12,2011-09-13 01:06:40.020000+02:00,task-39979,T05 Print and send confirmation of receipt,complete,Group 2,Resource12,2011-09-22 14:44:35.466000+02:00 +Internet,case-9562,2011-11-08 01:06:40+01:00,General,2011-10-06 09:07:47.705000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource12,2011-09-13 01:06:40.020000+02:00,task-39976,T06 Determine necessity of stop advice,complete,Group 1,Resource12,2011-09-22 14:45:08.036000+02:00 +Internet,case-9562,2011-11-08 01:06:40+01:00,General,2011-10-06 09:07:47.705000+02:00,2011-11-08 01:06:40.010000+01:00,Group 5,Resource12,2011-09-13 01:06:40.020000+02:00,task-39980,T10 Determine necessity to stop indication,complete,Group 1,Resource12,2011-09-22 14:53:20.110000+02:00 +Internet,case-9563,2011-10-28 01:06:40+02:00,General,2011-09-20 12:06:47.797000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-38963,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-15 08:50:22.376000+02:00 +Internet,case-9563,2011-10-28 01:06:40+02:00,General,2011-09-20 12:06:47.797000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-38974,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-15 08:50:42.484000+02:00 +Internet,case-9563,2011-10-28 01:06:40+02:00,General,2011-09-20 12:06:47.797000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-38976,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-15 08:50:58.360000+02:00 +Internet,case-9563,2011-10-28 01:06:40+02:00,General,2011-09-20 12:06:47.797000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-38977,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-15 08:51:16.804000+02:00 +Internet,case-9563,2011-10-28 01:06:40+02:00,General,2011-09-20 12:06:47.797000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-38975,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-15 08:51:34.799000+02:00 +Internet,case-9563,2011-10-28 01:06:40+02:00,General,2011-09-20 12:06:47.797000+02:00,2011-09-16 01:06:40.020000+02:00,Group 8,Resource11,2011-07-22 01:06:40.020000+02:00,task-38978,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-15 08:51:52.305000+02:00 +Internet,case-9574,2011-11-09 01:06:40+01:00,General,2011-09-27 14:48:52.484000+02:00,2011-11-09 01:06:40.010000+01:00,Group 8,Resource01,2011-09-14 01:06:40.020000+02:00,task-39083,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-26 14:40:40.421000+02:00 +Internet,case-9574,2011-11-09 01:06:40+01:00,General,2011-09-27 14:48:52.484000+02:00,2011-11-09 01:06:40.010000+01:00,Group 8,Resource01,2011-09-14 01:06:40.020000+02:00,task-40491,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-26 14:40:59.042000+02:00 +Internet,case-9574,2011-11-09 01:06:40+01:00,General,2011-09-27 14:48:52.484000+02:00,2011-11-09 01:06:40.010000+01:00,Group 8,Resource01,2011-09-14 01:06:40.020000+02:00,task-40492,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-26 14:46:14.377000+02:00 +Internet,case-9574,2011-11-09 01:06:40+01:00,General,2011-09-27 14:48:52.484000+02:00,2011-11-09 01:06:40.010000+01:00,Group 8,Resource01,2011-09-14 01:06:40.020000+02:00,task-40507,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-26 14:46:34.333000+02:00 +Internet,case-9574,2011-11-09 01:06:40+01:00,General,2011-09-27 14:48:52.484000+02:00,2011-11-09 01:06:40.010000+01:00,Group 8,Resource01,2011-09-14 01:06:40.020000+02:00,task-40493,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-09-27 14:01:18.292000+02:00 +Internet,case-9574,2011-11-09 01:06:40+01:00,General,2011-09-27 14:48:52.484000+02:00,2011-11-09 01:06:40.010000+01:00,Group 8,Resource01,2011-09-14 01:06:40.020000+02:00,task-40652,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-27 14:44:05.636000+02:00 +Internet,case-9574,2011-11-09 01:06:40+01:00,General,2011-09-27 14:48:52.484000+02:00,2011-11-09 01:06:40.010000+01:00,Group 8,Resource01,2011-09-14 01:06:40.020000+02:00,task-40509,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-09-27 14:47:55.209000+02:00 +Internet,case-9574,2011-11-09 01:06:40+01:00,General,2011-09-27 14:48:52.484000+02:00,2011-11-09 01:06:40.010000+01:00,Group 8,Resource01,2011-09-14 01:06:40.020000+02:00,task-40673,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-09-27 14:48:13.801000+02:00 +Internet,case-9574,2011-11-09 01:06:40+01:00,General,2011-09-27 14:48:52.484000+02:00,2011-11-09 01:06:40.010000+01:00,Group 8,Resource01,2011-09-14 01:06:40.020000+02:00,task-40674,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-09-27 14:48:37.187000+02:00 +Internet,case-9574,2011-11-09 01:06:40+01:00,General,2011-09-27 14:48:52.484000+02:00,2011-11-09 01:06:40.010000+01:00,Group 8,Resource01,2011-09-14 01:06:40.020000+02:00,task-40675,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-09-27 14:48:52.322000+02:00 +Internet,case-9623,2011-11-10 01:06:40+01:00,General,2011-11-01 12:19:15.572000+01:00,2011-11-10 01:06:40.010000+01:00,Group 8,Resource11,2011-09-15 01:06:40.020000+02:00,task-39386,Confirmation of receipt,complete,EMPTY,Resource01,2011-09-30 14:05:30.453000+02:00 +Internet,case-9623,2011-11-10 01:06:40+01:00,General,2011-11-01 12:19:15.572000+01:00,2011-11-10 01:06:40.010000+01:00,Group 8,Resource11,2011-09-15 01:06:40.020000+02:00,task-41042,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-09-30 14:05:48.982000+02:00 +Internet,case-9623,2011-11-10 01:06:40+01:00,General,2011-11-01 12:19:15.572000+01:00,2011-11-10 01:06:40.010000+01:00,Group 8,Resource11,2011-09-15 01:06:40.020000+02:00,task-41044,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-09-30 14:06:05.944000+02:00 +Internet,case-9623,2011-11-10 01:06:40+01:00,General,2011-11-01 12:19:15.572000+01:00,2011-11-10 01:06:40.010000+01:00,Group 8,Resource11,2011-09-15 01:06:40.020000+02:00,task-41045,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-09-30 14:06:21.892000+02:00 +Internet,case-9623,2011-11-10 01:06:40+01:00,General,2011-11-01 12:19:15.572000+01:00,2011-11-10 01:06:40.010000+01:00,Group 8,Resource11,2011-09-15 01:06:40.020000+02:00,task-41043,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-09-30 14:06:37.513000+02:00 +Internet,case-9623,2011-11-10 01:06:40+01:00,General,2011-11-01 12:19:15.572000+01:00,2011-11-10 01:06:40.010000+01:00,Group 8,Resource11,2011-09-15 01:06:40.020000+02:00,task-41046,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-09-30 14:07:15.921000+02:00 +e-mail,case-9624,2011-11-14 08:53:11.527000+01:00,General,2011-10-06 10:00:38.440000+02:00,2011-11-14 08:53:11.527000+01:00,,admin1,2011-09-19 08:53:11.527000+02:00,task-39388,Confirmation of receipt,complete,EMPTY,Resource09,2011-09-19 12:32:59.548000+02:00 +e-mail,case-9624,2011-11-14 08:53:11.527000+01:00,General,2011-10-06 10:00:38.440000+02:00,2011-11-14 08:53:11.527000+01:00,,admin1,2011-09-19 08:53:11.527000+02:00,task-39435,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-09-19 12:34:58.803000+02:00 +e-mail,case-9624,2011-11-14 08:53:11.527000+01:00,General,2011-10-06 10:00:38.440000+02:00,2011-11-14 08:53:11.527000+01:00,,admin1,2011-09-19 08:53:11.527000+02:00,task-39436,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-09-19 12:37:47.508000+02:00 +e-mail,case-9624,2011-11-14 08:53:11.527000+01:00,General,2011-10-06 10:00:38.440000+02:00,2011-11-14 08:53:11.527000+01:00,,admin1,2011-09-19 08:53:11.527000+02:00,task-39434,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-09-19 12:45:54.885000+02:00 +e-mail,case-9624,2011-11-14 08:53:11.527000+01:00,General,2011-10-06 10:00:38.440000+02:00,2011-11-14 08:53:11.527000+01:00,,admin1,2011-09-19 08:53:11.527000+02:00,task-39445,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-09-19 12:47:07.785000+02:00 +e-mail,case-9624,2011-11-14 08:53:11.527000+01:00,General,2011-10-06 10:00:38.440000+02:00,2011-11-14 08:53:11.527000+01:00,,admin1,2011-09-19 08:53:11.527000+02:00,task-39447,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-09-19 12:55:12.077000+02:00 +Internet,case-9626,2011-12-23 01:06:40+01:00,General,2011-12-19 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource23,2011-09-16 01:06:40.020000+02:00,task-39399,Confirmation of receipt,complete,EMPTY,Resource23,2011-09-26 13:23:50.214000+02:00 +Internet,case-9626,2011-12-23 01:06:40+01:00,General,2011-12-19 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource23,2011-09-16 01:06:40.020000+02:00,task-40446,T02 Check confirmation of receipt,complete,EMPTY,Resource23,2011-09-26 13:25:36.704000+02:00 +Internet,case-9626,2011-12-23 01:06:40+01:00,General,2011-12-19 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource23,2011-09-16 01:06:40.020000+02:00,task-40448,T04 Determine confirmation of receipt,complete,EMPTY,Resource23,2011-09-26 13:26:12.802000+02:00 +Internet,case-9626,2011-12-23 01:06:40+01:00,General,2011-12-19 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource23,2011-09-16 01:06:40.020000+02:00,task-40449,T05 Print and send confirmation of receipt,complete,EMPTY,Resource23,2011-09-26 13:26:53.086000+02:00 +Internet,case-9626,2011-12-23 01:06:40+01:00,General,2011-12-19 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource23,2011-09-16 01:06:40.020000+02:00,task-40447,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-09-26 13:27:16.922000+02:00 +Internet,case-9626,2011-12-23 01:06:40+01:00,General,2011-12-19 00:00:00.010000+01:00,2011-12-23 01:06:40.010000+01:00,Group 5,Resource23,2011-09-16 01:06:40.020000+02:00,task-40450,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-09-26 13:27:41.106000+02:00 +Internet,case-9628,2011-11-14 11:28:43.636000+01:00,General,2011-11-16 10:04:26.017000+01:00,2011-11-14 11:28:43.636000+01:00,Group 5,Resource04,2011-09-19 11:28:43.636000+02:00,task-39420,Confirmation of receipt,complete,EMPTY,Resource04,2011-09-27 09:46:52.030000+02:00 +Internet,case-9628,2011-11-14 11:28:43.636000+01:00,General,2011-11-16 10:04:26.017000+01:00,2011-11-14 11:28:43.636000+01:00,Group 5,Resource04,2011-09-19 11:28:43.636000+02:00,task-40576,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-09-27 09:47:16.447000+02:00 +Internet,case-9628,2011-11-14 11:28:43.636000+01:00,General,2011-11-16 10:04:26.017000+01:00,2011-11-14 11:28:43.636000+01:00,Group 5,Resource04,2011-09-19 11:28:43.636000+02:00,task-40578,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-09-27 10:18:49.679000+02:00 +Internet,case-9628,2011-11-14 11:28:43.636000+01:00,General,2011-11-16 10:04:26.017000+01:00,2011-11-14 11:28:43.636000+01:00,Group 5,Resource04,2011-09-19 11:28:43.636000+02:00,task-40583,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-09-27 10:23:36.635000+02:00 +Internet,case-9628,2011-11-14 11:28:43.636000+01:00,General,2011-11-16 10:04:26.017000+01:00,2011-11-14 11:28:43.636000+01:00,Group 5,Resource04,2011-09-19 11:28:43.636000+02:00,task-40577,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-09-27 10:23:52.916000+02:00 +Internet,case-9628,2011-11-14 11:28:43.636000+01:00,General,2011-11-16 10:04:26.017000+01:00,2011-11-14 11:28:43.636000+01:00,Group 5,Resource04,2011-09-19 11:28:43.636000+02:00,task-40593,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-09-27 10:24:14.974000+02:00 +Internet,case-9631,2011-11-13 01:06:40+01:00,General,2011-10-10 15:07:48.586000+02:00,2011-11-13 01:06:40.010000+01:00,Group 8,Resource11,2011-09-18 01:06:40.020000+02:00,task-39455,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-26 14:57:41.419000+02:00 +Internet,case-9631,2011-11-13 01:06:40+01:00,General,2011-10-10 15:07:48.586000+02:00,2011-11-13 01:06:40.010000+01:00,Group 8,Resource11,2011-09-18 01:06:40.020000+02:00,task-40513,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-26 14:58:01.365000+02:00 +Internet,case-9631,2011-11-13 01:06:40+01:00,General,2011-10-10 15:07:48.586000+02:00,2011-11-13 01:06:40.010000+01:00,Group 8,Resource11,2011-09-18 01:06:40.020000+02:00,task-40515,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-26 15:01:45.731000+02:00 +Internet,case-9631,2011-11-13 01:06:40+01:00,General,2011-10-10 15:07:48.586000+02:00,2011-11-13 01:06:40.010000+01:00,Group 8,Resource11,2011-09-18 01:06:40.020000+02:00,task-40516,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-26 15:02:01.058000+02:00 +Internet,case-9631,2011-11-13 01:06:40+01:00,General,2011-10-10 15:07:48.586000+02:00,2011-11-13 01:06:40.010000+01:00,Group 8,Resource11,2011-09-18 01:06:40.020000+02:00,task-40514,T06 Determine necessity of stop advice,complete,EMPTY,Resource03,2011-09-26 15:02:25.581000+02:00 +Internet,case-9631,2011-11-13 01:06:40+01:00,General,2011-10-10 15:07:48.586000+02:00,2011-11-13 01:06:40.010000+01:00,Group 8,Resource11,2011-09-18 01:06:40.020000+02:00,task-40517,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-26 15:02:58.002000+02:00 +Internet,case-9631,2011-11-13 01:06:40+01:00,General,2011-10-10 15:07:48.586000+02:00,2011-11-13 01:06:40.010000+01:00,Group 8,Resource11,2011-09-18 01:06:40.020000+02:00,task-40518,T16 Report reasons to hold request,complete,Group 1,Resource01,2011-09-29 13:51:57.612000+02:00 +Internet,case-9631,2011-11-13 01:06:40+01:00,General,2011-10-10 15:07:48.586000+02:00,2011-11-13 01:06:40.010000+01:00,Group 8,Resource11,2011-09-18 01:06:40.020000+02:00,task-40839,T17 Check report Y to stop indication,complete,Group 4,Resource01,2011-09-29 13:52:16.377000+02:00 +Internet,case-9631,2011-11-13 01:06:40+01:00,General,2011-10-10 15:07:48.586000+02:00,2011-11-13 01:06:40.010000+01:00,Group 8,Resource11,2011-09-18 01:06:40.020000+02:00,task-40840,T19 Determine report Y to stop indication,complete,Group 3,Resource01,2011-09-29 13:52:34.107000+02:00 +Internet,case-9631,2011-11-13 01:06:40+01:00,General,2011-10-10 15:07:48.586000+02:00,2011-11-13 01:06:40.010000+01:00,Group 8,Resource11,2011-09-18 01:06:40.020000+02:00,task-40841,T20 Print report Y to stop indication,complete,Group 2,Resource01,2011-09-29 13:52:52.419000+02:00 +Internet,case-9633,2011-11-14 01:06:40+01:00,General,2011-11-16 09:56:19.555000+01:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-39464,Confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 15:49:18.282000+02:00 +Internet,case-9633,2011-11-14 01:06:40+01:00,General,2011-11-16 09:56:19.555000+01:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41110,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 15:50:07.853000+02:00 +Internet,case-9633,2011-11-14 01:06:40+01:00,General,2011-11-16 09:56:19.555000+01:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41115,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 15:50:57.872000+02:00 +Internet,case-9633,2011-11-14 01:06:40+01:00,General,2011-11-16 09:56:19.555000+01:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41119,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 15:51:27.023000+02:00 +Internet,case-9633,2011-11-14 01:06:40+01:00,General,2011-11-16 09:56:19.555000+01:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41111,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-10-05 21:38:45.530000+02:00 +Internet,case-9633,2011-11-14 01:06:40+01:00,General,2011-11-16 09:56:19.555000+01:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41879,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-10-05 21:39:15.432000+02:00 +Internet,case-9635,2011-11-09 01:06:40+01:00,General,,2011-11-09 01:06:40.010000+01:00,Group 6,Resource33,2011-09-14 01:06:40.020000+02:00,task-39480,Confirmation of receipt,complete,EMPTY,Resource33,2011-10-03 14:34:49.913000+02:00 +Internet,case-9635,2011-11-09 01:06:40+01:00,General,,2011-11-09 01:06:40.010000+01:00,Group 6,Resource33,2011-09-14 01:06:40.020000+02:00,task-41265,T06 Determine necessity of stop advice,complete,Group 1,Resource33,2011-10-03 14:53:44.874000+02:00 +Internet,case-9635,2011-11-09 01:06:40+01:00,General,,2011-11-09 01:06:40.010000+01:00,Group 6,Resource33,2011-09-14 01:06:40.020000+02:00,task-41267,T10 Determine necessity to stop indication,complete,Group 1,Resource33,2011-10-03 14:55:18.139000+02:00 +Internet,case-9635,2011-11-09 01:06:40+01:00,General,,2011-11-09 01:06:40.010000+01:00,Group 6,Resource33,2011-09-14 01:06:40.020000+02:00,task-41264,T02 Check confirmation of receipt,complete,EMPTY,Resource38,2011-10-03 16:28:10.185000+02:00 +Internet,case-9635,2011-11-09 01:06:40+01:00,General,,2011-11-09 01:06:40.010000+01:00,Group 6,Resource33,2011-09-14 01:06:40.020000+02:00,task-41310,T04 Determine confirmation of receipt,complete,Group 3,Resource38,2011-10-03 16:28:31.692000+02:00 +Internet,case-9635,2011-11-09 01:06:40+01:00,General,,2011-11-09 01:06:40.010000+01:00,Group 6,Resource33,2011-09-14 01:06:40.020000+02:00,task-41313,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-10-05 10:36:24.653000+02:00 +Internet,case-9639,2011-11-14 01:06:40+01:00,General,2011-10-20 13:47:55.996000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-09-19 01:06:40.020000+02:00,task-39493,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-14 10:11:00.255000+02:00 +Internet,case-9639,2011-11-14 01:06:40+01:00,General,2011-10-20 13:47:55.996000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-09-19 01:06:40.020000+02:00,task-43326,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-14 10:11:21.875000+02:00 +Internet,case-9639,2011-11-14 01:06:40+01:00,General,2011-10-20 13:47:55.996000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-09-19 01:06:40.020000+02:00,task-43328,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-14 10:11:44.272000+02:00 +Internet,case-9639,2011-11-14 01:06:40+01:00,General,2011-10-20 13:47:55.996000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-09-19 01:06:40.020000+02:00,task-43329,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-14 10:12:01.701000+02:00 +Internet,case-9639,2011-11-14 01:06:40+01:00,General,2011-10-20 13:47:55.996000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-09-19 01:06:40.020000+02:00,task-43327,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-14 10:12:19.209000+02:00 +Internet,case-9639,2011-11-14 01:06:40+01:00,General,2011-10-20 13:47:55.996000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource06,2011-09-19 01:06:40.020000+02:00,task-43330,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-14 10:12:38.431000+02:00 +Internet,case-9652,2011-11-14 01:06:40+01:00,General,2011-10-11 07:57:35.374000+02:00,2011-11-14 01:06:40.010000+01:00,Group 8,Resource11,2011-09-19 01:06:40.020000+02:00,task-39584,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-26 10:15:09.846000+02:00 +Internet,case-9652,2011-11-14 01:06:40+01:00,General,2011-10-11 07:57:35.374000+02:00,2011-11-14 01:06:40.010000+01:00,Group 8,Resource11,2011-09-19 01:06:40.020000+02:00,task-40304,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-26 10:16:45.151000+02:00 +Internet,case-9652,2011-11-14 01:06:40+01:00,General,2011-10-11 07:57:35.374000+02:00,2011-11-14 01:06:40.010000+01:00,Group 8,Resource11,2011-09-19 01:06:40.020000+02:00,task-40306,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-26 10:17:03.554000+02:00 +Internet,case-9652,2011-11-14 01:06:40+01:00,General,2011-10-11 07:57:35.374000+02:00,2011-11-14 01:06:40.010000+01:00,Group 8,Resource11,2011-09-19 01:06:40.020000+02:00,task-40307,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-26 10:17:18.252000+02:00 +Internet,case-9652,2011-11-14 01:06:40+01:00,General,2011-10-11 07:57:35.374000+02:00,2011-11-14 01:06:40.010000+01:00,Group 8,Resource11,2011-09-19 01:06:40.020000+02:00,task-40305,T06 Determine necessity of stop advice,complete,EMPTY,Resource03,2011-09-26 10:37:09.017000+02:00 +Internet,case-9652,2011-11-14 01:06:40+01:00,General,2011-10-11 07:57:35.374000+02:00,2011-11-14 01:06:40.010000+01:00,Group 8,Resource11,2011-09-19 01:06:40.020000+02:00,task-40313,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-26 10:37:32.645000+02:00 +Internet,case-9653,2011-11-15 01:06:40+01:00,General,2011-11-07 07:57:09.029000+01:00,2011-11-15 01:06:40.010000+01:00,Group 8,Resource11,2011-09-20 01:06:40.020000+02:00,task-39591,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 11:08:28.762000+02:00 +Internet,case-9653,2011-11-15 01:06:40+01:00,General,2011-11-07 07:57:09.029000+01:00,2011-11-15 01:06:40.010000+01:00,Group 8,Resource11,2011-09-20 01:06:40.020000+02:00,task-42843,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 11:08:46.300000+02:00 +Internet,case-9653,2011-11-15 01:06:40+01:00,General,2011-11-07 07:57:09.029000+01:00,2011-11-15 01:06:40.010000+01:00,Group 8,Resource11,2011-09-20 01:06:40.020000+02:00,task-42845,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 11:09:02.832000+02:00 +Internet,case-9653,2011-11-15 01:06:40+01:00,General,2011-11-07 07:57:09.029000+01:00,2011-11-15 01:06:40.010000+01:00,Group 8,Resource11,2011-09-20 01:06:40.020000+02:00,task-42846,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 11:09:33.266000+02:00 +Internet,case-9653,2011-11-15 01:06:40+01:00,General,2011-11-07 07:57:09.029000+01:00,2011-11-15 01:06:40.010000+01:00,Group 8,Resource11,2011-09-20 01:06:40.020000+02:00,task-42844,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 11:09:54.859000+02:00 +Internet,case-9653,2011-11-15 01:06:40+01:00,General,2011-11-07 07:57:09.029000+01:00,2011-11-15 01:06:40.010000+01:00,Group 8,Resource11,2011-09-20 01:06:40.020000+02:00,task-42847,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-11 11:10:15.529000+02:00 +Internet,case-9670,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,,Resource50,2011-09-15 01:06:40.020000+02:00,task-39724,Confirmation of receipt,complete,EMPTY,Resource02,2011-09-26 08:41:00.730000+02:00 +Internet,case-9670,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,,Resource50,2011-09-15 01:06:40.020000+02:00,task-40242,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-09-26 08:41:46.980000+02:00 +Internet,case-9670,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,,Resource50,2011-09-15 01:06:40.020000+02:00,task-40244,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-09-26 08:42:04.392000+02:00 +Internet,case-9670,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,,Resource50,2011-09-15 01:06:40.020000+02:00,task-40245,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-09-26 08:42:20.954000+02:00 +Internet,case-9670,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,,Resource50,2011-09-15 01:06:40.020000+02:00,task-40243,T06 Determine necessity of stop advice,complete,EMPTY,Resource13,2011-09-30 16:29:19.407000+02:00 +Internet,case-9670,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,,Resource50,2011-09-15 01:06:40.020000+02:00,task-41152,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-09-30 16:33:02.196000+02:00 +Internet,case-9697,2011-11-14 01:06:40+01:00,General,2011-10-24 13:18:28.237000+02:00,2011-11-14 01:06:40.010000+01:00,,admin1,2011-09-19 01:06:40.020000+02:00,task-39891,Confirmation of receipt,complete,EMPTY,Resource09,2011-10-14 10:20:48.245000+02:00 +Internet,case-9697,2011-11-14 01:06:40+01:00,General,2011-10-24 13:18:28.237000+02:00,2011-11-14 01:06:40.010000+01:00,,admin1,2011-09-19 01:06:40.020000+02:00,task-43340,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-10-14 10:21:25.662000+02:00 +Internet,case-9697,2011-11-14 01:06:40+01:00,General,2011-10-24 13:18:28.237000+02:00,2011-11-14 01:06:40.010000+01:00,,admin1,2011-09-19 01:06:40.020000+02:00,task-43341,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-14 10:22:39.101000+02:00 +Internet,case-9697,2011-11-14 01:06:40+01:00,General,2011-10-24 13:18:28.237000+02:00,2011-11-14 01:06:40.010000+01:00,,admin1,2011-09-19 01:06:40.020000+02:00,task-43343,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-14 10:23:15.205000+02:00 +Internet,case-9697,2011-11-14 01:06:40+01:00,General,2011-10-24 13:18:28.237000+02:00,2011-11-14 01:06:40.010000+01:00,,admin1,2011-09-19 01:06:40.020000+02:00,task-43342,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-10-14 10:52:05.305000+02:00 +Internet,case-9697,2011-11-14 01:06:40+01:00,General,2011-10-24 13:18:28.237000+02:00,2011-11-14 01:06:40.010000+01:00,,admin1,2011-09-19 01:06:40.020000+02:00,task-43357,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-10-14 10:59:40.337000+02:00 +Internet,case-9700,2011-11-03 01:06:40+01:00,General,2011-10-24 14:29:49.295000+02:00,2011-11-03 01:06:40.010000+01:00,Group 5,Resource04,2011-07-28 01:06:40.020000+02:00,task-39921,Confirmation of receipt,complete,EMPTY,Resource04,2011-09-23 09:58:15.049000+02:00 +Internet,case-9700,2011-11-03 01:06:40+01:00,General,2011-10-24 14:29:49.295000+02:00,2011-11-03 01:06:40.010000+01:00,Group 5,Resource04,2011-07-28 01:06:40.020000+02:00,task-40025,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-09-23 10:02:37.118000+02:00 +Internet,case-9700,2011-11-03 01:06:40+01:00,General,2011-10-24 14:29:49.295000+02:00,2011-11-03 01:06:40.010000+01:00,Group 5,Resource04,2011-07-28 01:06:40.020000+02:00,task-40029,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-09-23 10:03:00.213000+02:00 +Internet,case-9700,2011-11-03 01:06:40+01:00,General,2011-10-24 14:29:49.295000+02:00,2011-11-03 01:06:40.010000+01:00,Group 5,Resource04,2011-07-28 01:06:40.020000+02:00,task-40030,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-09-23 10:03:18.256000+02:00 +Internet,case-9700,2011-11-03 01:06:40+01:00,General,2011-10-24 14:29:49.295000+02:00,2011-11-03 01:06:40.010000+01:00,Group 5,Resource04,2011-07-28 01:06:40.020000+02:00,task-40026,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-09-23 10:03:36.047000+02:00 +Internet,case-9700,2011-11-03 01:06:40+01:00,General,2011-10-24 14:29:49.295000+02:00,2011-11-03 01:06:40.010000+01:00,Group 5,Resource04,2011-07-28 01:06:40.020000+02:00,task-40031,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-09-23 10:03:55.500000+02:00 +Internet,case-9701,2011-11-16 01:06:40+01:00,General,2011-09-29 13:56:04.146000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-39943,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-26 09:19:57.013000+02:00 +Internet,case-9701,2011-11-16 01:06:40+01:00,General,2011-09-29 13:56:04.146000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40273,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-26 09:20:34.553000+02:00 +Internet,case-9701,2011-11-16 01:06:40+01:00,General,2011-09-29 13:56:04.146000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40272,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-26 09:21:25.598000+02:00 +Internet,case-9701,2011-11-16 01:06:40+01:00,General,2011-09-29 13:56:04.146000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40277,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-26 09:21:46.194000+02:00 +Internet,case-9701,2011-11-16 01:06:40+01:00,General,2011-09-29 13:56:04.146000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40278,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-26 09:22:43.633000+02:00 +Internet,case-9701,2011-11-16 01:06:40+01:00,General,2011-09-29 13:56:04.146000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40275,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-26 09:29:39.585000+02:00 +Internet,case-9704,2011-11-16 01:06:40+01:00,General,2011-10-06 14:25:21.217000+02:00,2011-11-16 01:06:40.010000+01:00,Group 5,Resource23,2011-09-21 01:06:40.020000+02:00,task-39948,Confirmation of receipt,complete,EMPTY,admin2,2011-10-06 14:25:22.501000+02:00 +Internet,case-9710,2011-11-17 01:06:40+01:00,General,2011-10-11 08:30:07.381000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-39991,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-23 15:01:51.693000+02:00 +Internet,case-9710,2011-11-17 01:06:40+01:00,General,2011-10-11 08:30:07.381000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40172,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-23 15:02:11.230000+02:00 +Internet,case-9710,2011-11-17 01:06:40+01:00,General,2011-10-11 08:30:07.381000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40174,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-23 15:02:29.598000+02:00 +Internet,case-9710,2011-11-17 01:06:40+01:00,General,2011-10-11 08:30:07.381000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40175,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-23 15:02:48.496000+02:00 +Internet,case-9710,2011-11-17 01:06:40+01:00,General,2011-10-11 08:30:07.381000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40173,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-23 15:03:06.523000+02:00 +Internet,case-9710,2011-11-17 01:06:40+01:00,General,2011-10-11 08:30:07.381000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40176,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-23 15:03:28.537000+02:00 +Internet,case-9711,2011-11-16 01:06:40+01:00,General,2011-10-11 08:03:06.258000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-39995,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-30 10:43:30.220000+02:00 +Internet,case-9711,2011-11-16 01:06:40+01:00,General,2011-10-11 08:03:06.258000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40965,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-30 10:43:55.482000+02:00 +Internet,case-9711,2011-11-16 01:06:40+01:00,General,2011-10-11 08:03:06.258000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40967,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-30 10:44:12.160000+02:00 +Internet,case-9711,2011-11-16 01:06:40+01:00,General,2011-10-11 08:03:06.258000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40968,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-30 10:44:27.948000+02:00 +Internet,case-9711,2011-11-16 01:06:40+01:00,General,2011-10-11 08:03:06.258000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40966,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-30 10:44:46.049000+02:00 +Internet,case-9711,2011-11-16 01:06:40+01:00,General,2011-10-11 08:03:06.258000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40969,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-30 10:45:09.772000+02:00 +Internet,case-9721,2011-11-16 01:06:40+01:00,General,2011-10-04 09:10:22.547000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource01,2011-09-21 01:06:40.020000+02:00,task-40019,Confirmation of receipt,complete,EMPTY,Resource03,2011-09-30 11:03:34.407000+02:00 +Internet,case-9721,2011-11-16 01:06:40+01:00,General,2011-10-04 09:10:22.547000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource01,2011-09-21 01:06:40.020000+02:00,task-40985,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-30 11:04:01.293000+02:00 +Internet,case-9721,2011-11-16 01:06:40+01:00,General,2011-10-04 09:10:22.547000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource01,2011-09-21 01:06:40.020000+02:00,task-40987,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-10-03 15:21:23.183000+02:00 +Internet,case-9721,2011-11-16 01:06:40+01:00,General,2011-10-04 09:10:22.547000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource01,2011-09-21 01:06:40.020000+02:00,task-41293,T05 Print and send confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 09:07:12.540000+02:00 +Internet,case-9721,2011-11-16 01:06:40+01:00,General,2011-10-04 09:10:22.547000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource01,2011-09-21 01:06:40.020000+02:00,task-40986,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-04 09:07:29.503000+02:00 +Internet,case-9721,2011-11-16 01:06:40+01:00,General,2011-10-04 09:10:22.547000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource01,2011-09-21 01:06:40.020000+02:00,task-41351,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-04 09:09:16.085000+02:00 +Internet,case-9721,2011-11-16 01:06:40+01:00,General,2011-10-04 09:10:22.547000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource01,2011-09-21 01:06:40.020000+02:00,task-41353,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-10-04 09:09:32.457000+02:00 +Internet,case-9721,2011-11-16 01:06:40+01:00,General,2011-10-04 09:10:22.547000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource01,2011-09-21 01:06:40.020000+02:00,task-41354,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-10-04 09:09:50.197000+02:00 +Internet,case-9721,2011-11-16 01:06:40+01:00,General,2011-10-04 09:10:22.547000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource01,2011-09-21 01:06:40.020000+02:00,task-41355,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-10-04 09:10:06.901000+02:00 +Internet,case-9721,2011-11-16 01:06:40+01:00,General,2011-10-04 09:10:22.547000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource01,2011-09-21 01:06:40.020000+02:00,task-41356,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-10-04 09:10:22.384000+02:00 +Internet,case-9722,2011-11-16 01:06:40+01:00,General,2011-10-21 11:58:15.716000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40024,Confirmation of receipt,complete,EMPTY,Resource21,2011-09-30 11:21:13.671000+02:00 +Internet,case-9722,2011-11-16 01:06:40+01:00,General,2011-10-21 11:58:15.716000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40992,T06 Determine necessity of stop advice,complete,Group 1,Resource21,2011-09-30 11:22:00.194000+02:00 +Internet,case-9722,2011-11-16 01:06:40+01:00,General,2011-10-21 11:58:15.716000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40993,T10 Determine necessity to stop indication,complete,Group 1,Resource21,2011-09-30 11:22:24.654000+02:00 +Internet,case-9722,2011-11-16 01:06:40+01:00,General,2011-10-21 11:58:15.716000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40991,T02 Check confirmation of receipt,complete,Group 4,Resource21,2011-09-30 11:23:08.115000+02:00 +Internet,case-9722,2011-11-16 01:06:40+01:00,General,2011-10-21 11:58:15.716000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40995,T04 Determine confirmation of receipt,complete,Group 3,Resource21,2011-09-30 11:23:39.538000+02:00 +Internet,case-9722,2011-11-16 01:06:40+01:00,General,2011-10-21 11:58:15.716000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40996,T05 Print and send confirmation of receipt,complete,Group 2,Resource21,2011-09-30 11:24:09.654000+02:00 +Internet,case-9725,2011-11-16 01:06:40+01:00,General,2011-10-11 08:08:42.352000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40076,Confirmation of receipt,complete,EMPTY,Resource16,2011-09-30 08:32:23.321000+02:00 +Internet,case-9725,2011-11-16 01:06:40+01:00,General,2011-10-11 08:08:42.352000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40897,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-09-30 08:32:56.218000+02:00 +Internet,case-9725,2011-11-16 01:06:40+01:00,General,2011-10-11 08:08:42.352000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40898,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-09-30 08:33:53.476000+02:00 +Internet,case-9725,2011-11-16 01:06:40+01:00,General,2011-10-11 08:08:42.352000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40899,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-09-30 08:34:50.848000+02:00 +Internet,case-9725,2011-11-16 01:06:40+01:00,General,2011-10-11 08:08:42.352000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40901,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-09-30 08:35:14.378000+02:00 +Internet,case-9725,2011-11-16 01:06:40+01:00,General,2011-10-11 08:08:42.352000+02:00,2011-11-16 01:06:40.010000+01:00,Group 8,Resource11,2011-09-21 01:06:40.020000+02:00,task-40900,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-09-30 08:36:11.726000+02:00 +Internet,case-9727,2011-11-17 01:06:40+01:00,General,2011-10-11 08:37:46.803000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40197,Confirmation of receipt,complete,EMPTY,Resource16,2011-09-30 09:58:40.550000+02:00 +Internet,case-9727,2011-11-17 01:06:40+01:00,General,2011-10-11 08:37:46.803000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40939,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-09-30 09:59:09.961000+02:00 +Internet,case-9727,2011-11-17 01:06:40+01:00,General,2011-10-11 08:37:46.803000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40941,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-09-30 09:59:38.257000+02:00 +Internet,case-9727,2011-11-17 01:06:40+01:00,General,2011-10-11 08:37:46.803000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40942,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-09-30 10:00:00.618000+02:00 +Internet,case-9727,2011-11-17 01:06:40+01:00,General,2011-10-11 08:37:46.803000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40940,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-09-30 10:00:27.528000+02:00 +Internet,case-9727,2011-11-17 01:06:40+01:00,General,2011-10-11 08:37:46.803000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40943,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-09-30 10:00:59.534000+02:00 +Internet,case-9746,2011-11-17 01:06:40+01:00,General,2011-10-04 09:15:07.546000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource01,2011-09-22 01:06:40.020000+02:00,task-40246,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-03 10:18:35.659000+02:00 +Internet,case-9746,2011-11-17 01:06:40+01:00,General,2011-10-04 09:15:07.546000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource01,2011-09-22 01:06:40.020000+02:00,task-41195,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-03 10:18:57.330000+02:00 +Internet,case-9746,2011-11-17 01:06:40+01:00,General,2011-10-04 09:15:07.546000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource01,2011-09-22 01:06:40.020000+02:00,task-41197,T04 Determine confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 09:12:56.342000+02:00 +Internet,case-9746,2011-11-17 01:06:40+01:00,General,2011-10-04 09:15:07.546000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource01,2011-09-22 01:06:40.020000+02:00,task-41357,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-04 09:13:14.094000+02:00 +Internet,case-9746,2011-11-17 01:06:40+01:00,General,2011-10-04 09:15:07.546000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource01,2011-09-22 01:06:40.020000+02:00,task-41196,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-04 09:13:29.252000+02:00 +Internet,case-9746,2011-11-17 01:06:40+01:00,General,2011-10-04 09:15:07.546000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource01,2011-09-22 01:06:40.020000+02:00,task-41358,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-04 09:13:59.373000+02:00 +Internet,case-9746,2011-11-17 01:06:40+01:00,General,2011-10-04 09:15:07.546000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource01,2011-09-22 01:06:40.020000+02:00,task-41359,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-10-04 09:14:15.302000+02:00 +Internet,case-9746,2011-11-17 01:06:40+01:00,General,2011-10-04 09:15:07.546000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource01,2011-09-22 01:06:40.020000+02:00,task-41360,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-10-04 09:14:33.525000+02:00 +Internet,case-9746,2011-11-17 01:06:40+01:00,General,2011-10-04 09:15:07.546000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource01,2011-09-22 01:06:40.020000+02:00,task-41361,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-10-04 09:14:52.889000+02:00 +Internet,case-9746,2011-11-17 01:06:40+01:00,General,2011-10-04 09:15:07.546000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource01,2011-09-22 01:06:40.020000+02:00,task-41363,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-10-04 09:15:07.376000+02:00 +Internet,case-9747,2013-01-03 00:00:00+01:00,General,,2013-01-03 00:00:00.010000+01:00,Group 5,Resource22,2011-09-22 01:06:40.020000+02:00,task-40290,Confirmation of receipt,complete,EMPTY,Resource22,2011-10-10 12:50:47.498000+02:00 +Internet,case-9747,2013-01-03 00:00:00+01:00,General,,2013-01-03 00:00:00.010000+01:00,Group 5,Resource22,2011-09-22 01:06:40.020000+02:00,task-42438,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-10-10 12:51:21.259000+02:00 +Internet,case-9747,2013-01-03 00:00:00+01:00,General,,2013-01-03 00:00:00.010000+01:00,Group 5,Resource22,2011-09-22 01:06:40.020000+02:00,task-42440,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-10-10 12:51:55.574000+02:00 +Internet,case-9747,2013-01-03 00:00:00+01:00,General,,2013-01-03 00:00:00.010000+01:00,Group 5,Resource22,2011-09-22 01:06:40.020000+02:00,task-42441,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-10-10 12:52:26.007000+02:00 +Internet,case-9747,2013-01-03 00:00:00+01:00,General,,2013-01-03 00:00:00.010000+01:00,Group 5,Resource22,2011-09-22 01:06:40.020000+02:00,task-42439,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-10-10 12:59:33.869000+02:00 +Internet,case-9747,2013-01-03 00:00:00+01:00,General,,2013-01-03 00:00:00.010000+01:00,Group 5,Resource22,2011-09-22 01:06:40.020000+02:00,task-42442,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-10-10 13:00:47.078000+02:00 +Internet,case-9748,2011-11-17 01:06:40+01:00,General,2011-10-26 11:02:42.995000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40303,Confirmation of receipt,complete,Group 1,Resource03,2011-09-30 15:42:14.628000+02:00 +Internet,case-9748,2011-11-17 01:06:40+01:00,General,2011-10-26 11:02:42.995000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41097,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-30 15:42:40.812000+02:00 +Internet,case-9748,2011-11-17 01:06:40+01:00,General,2011-10-26 11:02:42.995000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41099,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-30 15:46:10.426000+02:00 +Internet,case-9748,2011-11-17 01:06:40+01:00,General,2011-10-26 11:02:42.995000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41100,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-30 15:46:24.649000+02:00 +Internet,case-9748,2011-11-17 01:06:40+01:00,General,2011-10-26 11:02:42.995000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41098,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-30 15:46:40.636000+02:00 +Internet,case-9748,2011-11-17 01:06:40+01:00,General,2011-10-26 11:02:42.995000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41101,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-30 15:47:03.157000+02:00 +Internet,case-9749,2011-11-17 01:06:40+01:00,General,2011-10-11 10:08:25.252000+02:00,2011-11-17 01:06:40.010000+01:00,Group 5,Resource05,2011-09-22 01:06:40.020000+02:00,task-40312,Confirmation of receipt,complete,EMPTY,Resource05,2011-10-06 17:41:44.676000+02:00 +Internet,case-9749,2011-11-17 01:06:40+01:00,General,2011-10-11 10:08:25.252000+02:00,2011-11-17 01:06:40.010000+01:00,Group 5,Resource05,2011-09-22 01:06:40.020000+02:00,task-42025,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-10-06 17:42:39.522000+02:00 +Internet,case-9749,2011-11-17 01:06:40+01:00,General,2011-10-11 10:08:25.252000+02:00,2011-11-17 01:06:40.010000+01:00,Group 5,Resource05,2011-09-22 01:06:40.020000+02:00,task-42026,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-10-06 17:42:55.518000+02:00 +Internet,case-9749,2011-11-17 01:06:40+01:00,General,2011-10-11 10:08:25.252000+02:00,2011-11-17 01:06:40.010000+01:00,Group 5,Resource05,2011-09-22 01:06:40.020000+02:00,task-42027,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-10-06 17:43:11.945000+02:00 +Internet,case-9749,2011-11-17 01:06:40+01:00,General,2011-10-11 10:08:25.252000+02:00,2011-11-17 01:06:40.010000+01:00,Group 5,Resource05,2011-09-22 01:06:40.020000+02:00,task-42029,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-10-06 17:43:39.268000+02:00 +Internet,case-9749,2011-11-17 01:06:40+01:00,General,2011-10-11 10:08:25.252000+02:00,2011-11-17 01:06:40.010000+01:00,Group 5,Resource05,2011-09-22 01:06:40.020000+02:00,task-42028,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-10-06 17:44:15.120000+02:00 +Internet,case-9751,2011-11-17 01:06:40+01:00,General,2011-10-26 09:52:00.253000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40342,Confirmation of receipt,complete,Group 1,Resource03,2011-09-30 16:07:41.244000+02:00 +Internet,case-9751,2011-11-17 01:06:40+01:00,General,2011-10-26 09:52:00.253000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41130,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-09-30 16:08:02.816000+02:00 +Internet,case-9751,2011-11-17 01:06:40+01:00,General,2011-10-26 09:52:00.253000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41132,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-09-30 16:08:19.588000+02:00 +Internet,case-9751,2011-11-17 01:06:40+01:00,General,2011-10-26 09:52:00.253000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41133,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-09-30 16:08:35.867000+02:00 +Internet,case-9751,2011-11-17 01:06:40+01:00,General,2011-10-26 09:52:00.253000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41131,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-09-30 16:08:50.711000+02:00 +Internet,case-9751,2011-11-17 01:06:40+01:00,General,2011-10-26 09:52:00.253000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41134,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-09-30 16:09:27.763000+02:00 +Internet,case-9752,2011-10-18 01:06:40+02:00,General,2011-10-17 13:52:49.040000+02:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-40365,Confirmation of receipt,complete,Group 1,Resource02,2011-09-29 11:57:15.876000+02:00 +Internet,case-9752,2011-10-18 01:06:40+02:00,General,2011-10-17 13:52:49.040000+02:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-40797,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-09-29 11:58:42.158000+02:00 +Internet,case-9752,2011-10-18 01:06:40+02:00,General,2011-10-17 13:52:49.040000+02:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-40800,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-09-29 11:59:06.872000+02:00 +Internet,case-9752,2011-10-18 01:06:40+02:00,General,2011-10-17 13:52:49.040000+02:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-40801,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-09-29 11:59:45.692000+02:00 +Internet,case-9752,2011-10-18 01:06:40+02:00,General,2011-10-17 13:52:49.040000+02:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-40798,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-09-29 12:00:14.150000+02:00 +Internet,case-9752,2011-10-18 01:06:40+02:00,General,2011-10-17 13:52:49.040000+02:00,2011-10-18 01:06:40.020000+02:00,Group 5,Resource02,2011-07-12 01:06:40.020000+02:00,task-40802,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-09-29 12:01:49.251000+02:00 +Internet,case-9753,2011-11-17 01:06:40+01:00,General,2011-10-11 09:01:04.653000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40373,Confirmation of receipt,complete,Group 1,Resource03,2011-10-03 09:09:18.501000+02:00 +Internet,case-9753,2011-11-17 01:06:40+01:00,General,2011-10-11 09:01:04.653000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41172,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-03 09:09:49.069000+02:00 +Internet,case-9753,2011-11-17 01:06:40+01:00,General,2011-10-11 09:01:04.653000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41174,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-03 09:10:26.100000+02:00 +Internet,case-9753,2011-11-17 01:06:40+01:00,General,2011-10-11 09:01:04.653000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41175,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-03 09:10:42.990000+02:00 +Internet,case-9753,2011-11-17 01:06:40+01:00,General,2011-10-11 09:01:04.653000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41173,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-03 09:10:58.831000+02:00 +Internet,case-9753,2011-11-17 01:06:40+01:00,General,2011-10-11 09:01:04.653000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41176,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-03 09:12:25.979000+02:00 +Internet,case-9754,2011-11-17 01:06:40+01:00,General,2011-10-21 12:45:22.019000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40383,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-04 08:43:35.546000+02:00 +Internet,case-9754,2011-11-17 01:06:40+01:00,General,2011-10-21 12:45:22.019000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41331,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-04 08:44:28.376000+02:00 +Internet,case-9754,2011-11-17 01:06:40+01:00,General,2011-10-21 12:45:22.019000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41333,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-04 08:44:54.909000+02:00 +Internet,case-9754,2011-11-17 01:06:40+01:00,General,2011-10-21 12:45:22.019000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41334,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-04 08:45:19.542000+02:00 +Internet,case-9754,2011-11-17 01:06:40+01:00,General,2011-10-21 12:45:22.019000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41332,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-04 08:46:21.048000+02:00 +Internet,case-9754,2011-11-17 01:06:40+01:00,General,2011-10-21 12:45:22.019000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41335,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-04 08:46:56.941000+02:00 +Internet,case-9756,2011-11-17 01:06:40+01:00,General,2011-10-21 12:53:05.599000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-40398,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 09:37:52.101000+02:00 +Internet,case-9756,2011-11-17 01:06:40+01:00,General,2011-10-21 12:53:05.599000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41374,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-04 09:38:19.264000+02:00 +Internet,case-9756,2011-11-17 01:06:40+01:00,General,2011-10-21 12:53:05.599000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41376,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-04 09:38:38.057000+02:00 +Internet,case-9756,2011-11-17 01:06:40+01:00,General,2011-10-21 12:53:05.599000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41378,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-04 09:38:54.020000+02:00 +Internet,case-9756,2011-11-17 01:06:40+01:00,General,2011-10-21 12:53:05.599000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41375,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-04 09:39:14.261000+02:00 +Internet,case-9756,2011-11-17 01:06:40+01:00,General,2011-10-21 12:53:05.599000+02:00,2011-11-17 01:06:40.010000+01:00,Group 8,Resource11,2011-09-22 01:06:40.020000+02:00,task-41382,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-04 09:39:33.883000+02:00 +Internet,case-9758,2011-11-18 01:06:40+01:00,General,2011-10-21 13:05:18.728000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-40413,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 10:11:44.556000+02:00 +Internet,case-9758,2011-11-18 01:06:40+01:00,General,2011-10-21 13:05:18.728000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-41417,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-04 10:12:17.422000+02:00 +Internet,case-9758,2011-11-18 01:06:40+01:00,General,2011-10-21 13:05:18.728000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-41421,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-04 10:12:34.443000+02:00 +Internet,case-9758,2011-11-18 01:06:40+01:00,General,2011-10-21 13:05:18.728000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-41422,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-04 10:12:48.483000+02:00 +Internet,case-9758,2011-11-18 01:06:40+01:00,General,2011-10-21 13:05:18.728000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-41418,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-04 10:13:02.739000+02:00 +Internet,case-9758,2011-11-18 01:06:40+01:00,General,2011-10-21 13:05:18.728000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-41423,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-04 10:13:19.239000+02:00 +Internet,case-9759,2011-11-18 01:06:40+01:00,General,,2011-11-18 01:06:40.010000+01:00,Group 5,Resource04,2011-09-23 01:06:40.020000+02:00,task-40439,Confirmation of receipt,complete,EMPTY,Resource04,2011-10-10 11:41:25.702000+02:00 +Internet,case-9759,2011-11-18 01:06:40+01:00,General,,2011-11-18 01:06:40.010000+01:00,Group 5,Resource04,2011-09-23 01:06:40.020000+02:00,task-42395,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-10-10 11:41:52.387000+02:00 +Internet,case-9759,2011-11-18 01:06:40+01:00,General,,2011-11-18 01:06:40.010000+01:00,Group 5,Resource04,2011-09-23 01:06:40.020000+02:00,task-42397,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-10-10 11:42:09.309000+02:00 +Internet,case-9759,2011-11-18 01:06:40+01:00,General,,2011-11-18 01:06:40.010000+01:00,Group 5,Resource04,2011-09-23 01:06:40.020000+02:00,task-42398,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-10-10 11:42:26.515000+02:00 +Internet,case-9759,2011-11-18 01:06:40+01:00,General,,2011-11-18 01:06:40.010000+01:00,Group 5,Resource04,2011-09-23 01:06:40.020000+02:00,task-42396,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-10-10 14:34:23.097000+02:00 +Internet,case-9759,2011-11-18 01:06:40+01:00,General,,2011-11-18 01:06:40.010000+01:00,Group 5,Resource04,2011-09-23 01:06:40.020000+02:00,task-42486,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-10-10 14:34:52.577000+02:00 +Internet,case-9762,2011-11-18 01:06:40+01:00,General,2011-10-21 13:14:40.192000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-40454,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 10:29:15.847000+02:00 +Internet,case-9762,2011-11-18 01:06:40+01:00,General,2011-10-21 13:14:40.192000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-41451,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-04 10:29:40.505000+02:00 +Internet,case-9762,2011-11-18 01:06:40+01:00,General,2011-10-21 13:14:40.192000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-41453,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-04 10:29:58.416000+02:00 +Internet,case-9762,2011-11-18 01:06:40+01:00,General,2011-10-21 13:14:40.192000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-41450,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-04 10:30:18.249000+02:00 +Internet,case-9762,2011-11-18 01:06:40+01:00,General,2011-10-21 13:14:40.192000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-41455,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-04 10:34:40.222000+02:00 +Internet,case-9762,2011-11-18 01:06:40+01:00,General,2011-10-21 13:14:40.192000+02:00,2011-11-18 01:06:40.010000+01:00,Group 8,Resource11,2011-09-23 01:06:40.020000+02:00,task-41458,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-04 10:35:00.969000+02:00 +Internet,case-9763,2011-12-13 13:30:01.533000+01:00,Experts,2011-09-26 15:19:04.083000+02:00,2011-12-13 13:30:01.533000+01:00,,Resource54,2011-09-26 14:30:01.533000+02:00,task-40504,Confirmation of receipt,complete,Group 1,admin2,2011-09-26 15:19:05.401000+02:00 +Internet,case-9765,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,Group 5,Resource09,2011-09-15 01:06:40.020000+02:00,task-40539,Confirmation of receipt,complete,EMPTY,Resource09,2011-11-09 12:30:39.630000+01:00 +Internet,case-9765,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,Group 5,Resource09,2011-09-15 01:06:40.020000+02:00,task-45992,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-11-09 12:31:16.108000+01:00 +Internet,case-9765,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,Group 5,Resource09,2011-09-15 01:06:40.020000+02:00,task-45993,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-11-09 12:31:58.143000+01:00 +Internet,case-9765,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,Group 5,Resource09,2011-09-15 01:06:40.020000+02:00,task-45991,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-11-09 12:32:52.795000+01:00 +Internet,case-9765,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,Group 5,Resource09,2011-09-15 01:06:40.020000+02:00,task-45995,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-11-09 12:33:16.236000+01:00 +Internet,case-9765,2011-11-10 01:06:40+01:00,General,,2011-11-10 01:06:40.010000+01:00,Group 5,Resource09,2011-09-15 01:06:40.020000+02:00,task-45996,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-11-09 12:33:36.705000+01:00 +Internet,case-9767,2011-11-14 01:06:40+01:00,General,2011-10-06 10:26:46.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-40555,Confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 14:30:00.552000+02:00 +Internet,case-9767,2011-11-14 01:06:40+01:00,General,2011-10-06 10:26:46.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41062,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 14:30:50.395000+02:00 +Internet,case-9767,2011-11-14 01:06:40+01:00,General,2011-10-06 10:26:46.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41064,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 14:31:20.426000+02:00 +Internet,case-9767,2011-11-14 01:06:40+01:00,General,2011-10-06 10:26:46.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41065,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-09-30 14:31:52.484000+02:00 +Internet,case-9767,2011-11-14 01:06:40+01:00,General,2011-10-06 10:26:46.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41063,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-09-30 14:32:17.902000+02:00 +Internet,case-9767,2011-11-14 01:06:40+01:00,General,2011-10-06 10:26:46.035000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41066,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-09-30 14:32:38.695000+02:00 +Internet,case-9776,2011-11-14 01:06:40+01:00,General,2011-10-05 10:53:29.744000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource05,2011-09-19 01:06:40.020000+02:00,task-40567,Confirmation of receipt,complete,EMPTY,Resource05,2011-10-04 13:55:53.460000+02:00 +Internet,case-9776,2011-11-14 01:06:40+01:00,General,2011-10-05 10:53:29.744000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource05,2011-09-19 01:06:40.020000+02:00,task-41549,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-10-04 13:56:52.113000+02:00 +Internet,case-9776,2011-11-14 01:06:40+01:00,General,2011-10-05 10:53:29.744000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource05,2011-09-19 01:06:40.020000+02:00,task-41548,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-10-04 13:57:31.604000+02:00 +Internet,case-9776,2011-11-14 01:06:40+01:00,General,2011-10-05 10:53:29.744000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource05,2011-09-19 01:06:40.020000+02:00,task-41551,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-10-04 13:57:55.358000+02:00 +Internet,case-9776,2011-11-14 01:06:40+01:00,General,2011-10-05 10:53:29.744000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource05,2011-09-19 01:06:40.020000+02:00,task-41550,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-10-04 13:58:24.283000+02:00 +Internet,case-9776,2011-11-14 01:06:40+01:00,General,2011-10-05 10:53:29.744000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource05,2011-09-19 01:06:40.020000+02:00,task-41552,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-10-04 13:58:46.503000+02:00 +Internet,case-9776,2011-11-14 01:06:40+01:00,General,2011-10-05 10:53:29.744000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource05,2011-09-19 01:06:40.020000+02:00,task-41553,T11 Create document X request unlicensed,complete,Group 1,Resource05,2011-10-04 15:31:19.507000+02:00 +Internet,case-9776,2011-11-14 01:06:40+01:00,General,2011-10-05 10:53:29.744000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource05,2011-09-19 01:06:40.020000+02:00,task-41598,T12 Check document X request unlicensed,complete,Group 4,Resource05,2011-10-04 15:31:44.797000+02:00 +Internet,case-9776,2011-11-14 01:06:40+01:00,General,2011-10-05 10:53:29.744000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource05,2011-09-19 01:06:40.020000+02:00,task-41599,T14 Determine document X request unlicensed,complete,Group 3,Resource05,2011-10-04 15:32:07.911000+02:00 +Internet,case-9776,2011-11-14 01:06:40+01:00,General,2011-10-05 10:53:29.744000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource05,2011-09-19 01:06:40.020000+02:00,task-41600,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-10-05 10:53:29.581000+02:00 +Internet,case-9777,2011-11-14 01:06:40+01:00,General,,2011-11-14 01:06:40.010000+01:00,Group 5,Resource04,2011-09-19 01:06:40.020000+02:00,task-40579,Confirmation of receipt,complete,EMPTY,Resource04,2011-10-06 13:40:22.485000+02:00 +Internet,case-9777,2011-11-14 01:06:40+01:00,General,,2011-11-14 01:06:40.010000+01:00,Group 5,Resource04,2011-09-19 01:06:40.020000+02:00,task-41961,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-10-06 13:40:43.718000+02:00 +Internet,case-9777,2011-11-14 01:06:40+01:00,General,,2011-11-14 01:06:40.010000+01:00,Group 5,Resource04,2011-09-19 01:06:40.020000+02:00,task-41963,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-10-06 13:41:04.006000+02:00 +Internet,case-9777,2011-11-14 01:06:40+01:00,General,,2011-11-14 01:06:40.010000+01:00,Group 5,Resource04,2011-09-19 01:06:40.020000+02:00,task-41964,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-10-06 13:41:19.987000+02:00 +Internet,case-9777,2011-11-14 01:06:40+01:00,General,,2011-11-14 01:06:40.010000+01:00,Group 5,Resource04,2011-09-19 01:06:40.020000+02:00,task-41962,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-10-06 13:41:36.316000+02:00 +Internet,case-9777,2011-11-14 01:06:40+01:00,General,,2011-11-14 01:06:40.010000+01:00,Group 5,Resource04,2011-09-19 01:06:40.020000+02:00,task-41965,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-10-06 13:41:55.830000+02:00 +Internet,case-9778,2011-11-14 01:06:40+01:00,General,2011-10-10 12:20:07.940000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-40598,Confirmation of receipt,complete,EMPTY,Resource13,2011-10-05 20:25:09.904000+02:00 +Internet,case-9778,2011-11-14 01:06:40+01:00,General,2011-10-10 12:20:07.940000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41844,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-10-05 20:26:54.931000+02:00 +Internet,case-9778,2011-11-14 01:06:40+01:00,General,2011-10-10 12:20:07.940000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41846,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-10-05 20:27:50.334000+02:00 +Internet,case-9778,2011-11-14 01:06:40+01:00,General,2011-10-10 12:20:07.940000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41847,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-10-05 20:28:22.796000+02:00 +Internet,case-9778,2011-11-14 01:06:40+01:00,General,2011-10-10 12:20:07.940000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41845,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-10-05 20:28:43.792000+02:00 +Internet,case-9778,2011-11-14 01:06:40+01:00,General,2011-10-10 12:20:07.940000+02:00,2011-11-14 01:06:40.010000+01:00,Group 5,Resource13,2011-09-19 01:06:40.020000+02:00,task-41848,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-10-05 20:29:15.740000+02:00 +Internet,case-9781,2011-11-15 01:06:40+01:00,General,2011-10-24 15:37:57.124000+02:00,2011-11-15 01:06:40.010000+01:00,Group 7,Resource35,2011-09-20 01:06:40.020000+02:00,task-40615,Confirmation of receipt,complete,EMPTY,admin2,2011-10-24 15:37:58.098000+02:00 +Internet,case-9782,2011-11-15 01:06:40+01:00,General,2011-10-10 12:36:44.702000+02:00,2011-11-15 01:06:40.010000+01:00,Group 5,Resource05,2011-09-20 01:06:40.020000+02:00,task-40625,Confirmation of receipt,complete,EMPTY,Resource05,2011-10-06 15:03:45.228000+02:00 +Internet,case-9782,2011-11-15 01:06:40+01:00,General,2011-10-10 12:36:44.702000+02:00,2011-11-15 01:06:40.010000+01:00,Group 5,Resource05,2011-09-20 01:06:40.020000+02:00,task-41988,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-10-06 15:04:15.140000+02:00 +Internet,case-9782,2011-11-15 01:06:40+01:00,General,2011-10-10 12:36:44.702000+02:00,2011-11-15 01:06:40.010000+01:00,Group 5,Resource05,2011-09-20 01:06:40.020000+02:00,task-41990,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-10-06 15:05:11.911000+02:00 +Internet,case-9782,2011-11-15 01:06:40+01:00,General,2011-10-10 12:36:44.702000+02:00,2011-11-15 01:06:40.010000+01:00,Group 5,Resource05,2011-09-20 01:06:40.020000+02:00,task-41989,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-10-06 15:06:55.274000+02:00 +Internet,case-9782,2011-11-15 01:06:40+01:00,General,2011-10-10 12:36:44.702000+02:00,2011-11-15 01:06:40.010000+01:00,Group 5,Resource05,2011-09-20 01:06:40.020000+02:00,task-41991,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-10-06 15:45:07.072000+02:00 +Internet,case-9782,2011-11-15 01:06:40+01:00,General,2011-10-10 12:36:44.702000+02:00,2011-11-15 01:06:40.010000+01:00,Group 5,Resource05,2011-09-20 01:06:40.020000+02:00,task-41992,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-10-06 15:45:42.237000+02:00 +Internet,case-9786,2011-11-22 15:41:20.390000+01:00,General,2011-10-26 11:31:48.362000+02:00,2011-11-22 15:41:20.390000+01:00,Group 8,Resource11,2011-09-27 15:41:20.390000+02:00,task-40678,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-04 09:36:42.586000+02:00 +Internet,case-9786,2011-11-22 15:41:20.390000+01:00,General,2011-10-26 11:31:48.362000+02:00,2011-11-22 15:41:20.390000+01:00,Group 8,Resource11,2011-09-27 15:41:20.390000+02:00,task-41370,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-04 09:37:08.661000+02:00 +Internet,case-9786,2011-11-22 15:41:20.390000+01:00,General,2011-10-26 11:31:48.362000+02:00,2011-11-22 15:41:20.390000+01:00,Group 8,Resource11,2011-09-27 15:41:20.390000+02:00,task-41372,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-04 09:37:35.615000+02:00 +Internet,case-9786,2011-11-22 15:41:20.390000+01:00,General,2011-10-26 11:31:48.362000+02:00,2011-11-22 15:41:20.390000+01:00,Group 8,Resource11,2011-09-27 15:41:20.390000+02:00,task-41373,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-04 09:37:56.947000+02:00 +Internet,case-9786,2011-11-22 15:41:20.390000+01:00,General,2011-10-26 11:31:48.362000+02:00,2011-11-22 15:41:20.390000+01:00,Group 8,Resource11,2011-09-27 15:41:20.390000+02:00,task-41371,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-04 09:38:24.716000+02:00 +Internet,case-9786,2011-11-22 15:41:20.390000+01:00,General,2011-10-26 11:31:48.362000+02:00,2011-11-22 15:41:20.390000+01:00,Group 8,Resource11,2011-09-27 15:41:20.390000+02:00,task-41377,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-04 09:38:49.394000+02:00 +Internet,case-9791,2011-11-22 01:06:40+01:00,General,2011-10-05 15:08:13.591000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-40685,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 10:56:59.202000+02:00 +Internet,case-9791,2011-11-22 01:06:40+01:00,General,2011-10-05 15:08:13.591000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41494,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-04 10:57:19.621000+02:00 +Internet,case-9791,2011-11-22 01:06:40+01:00,General,2011-10-05 15:08:13.591000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41496,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-10-05 13:39:46.563000+02:00 +Internet,case-9791,2011-11-22 01:06:40+01:00,General,2011-10-05 15:08:13.591000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41750,T05 Print and send confirmation of receipt,complete,EMPTY,Resource03,2011-10-05 15:06:38.330000+02:00 +Internet,case-9791,2011-11-22 01:06:40+01:00,General,2011-10-05 15:08:13.591000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41495,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-05 15:06:52.563000+02:00 +Internet,case-9791,2011-11-22 01:06:40+01:00,General,2011-10-05 15:08:13.591000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41787,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-05 15:07:14.153000+02:00 +Internet,case-9791,2011-11-22 01:06:40+01:00,General,2011-10-05 15:08:13.591000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41788,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-10-05 15:07:29.219000+02:00 +Internet,case-9791,2011-11-22 01:06:40+01:00,General,2011-10-05 15:08:13.591000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41789,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-10-05 15:07:44.418000+02:00 +Internet,case-9791,2011-11-22 01:06:40+01:00,General,2011-10-05 15:08:13.591000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41791,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-10-05 15:08:00.214000+02:00 +Internet,case-9791,2011-11-22 01:06:40+01:00,General,2011-10-05 15:08:13.591000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41792,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-10-05 15:08:13.420000+02:00 +Internet,case-9793,2011-11-22 01:06:40+01:00,General,2011-10-05 15:10:19.252000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-40689,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-04 11:26:13.158000+02:00 +Internet,case-9793,2011-11-22 01:06:40+01:00,General,2011-10-05 15:10:19.252000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41505,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-04 11:27:01.407000+02:00 +Internet,case-9793,2011-11-22 01:06:40+01:00,General,2011-10-05 15:10:19.252000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41507,T04 Determine confirmation of receipt,complete,EMPTY,Resource10,2011-10-05 13:41:58.942000+02:00 +Internet,case-9793,2011-11-22 01:06:40+01:00,General,2011-10-05 15:10:19.252000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41751,T05 Print and send confirmation of receipt,complete,EMPTY,Resource03,2011-10-05 15:08:39.793000+02:00 +Internet,case-9793,2011-11-22 01:06:40+01:00,General,2011-10-05 15:10:19.252000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41506,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-05 15:08:54.142000+02:00 +Internet,case-9793,2011-11-22 01:06:40+01:00,General,2011-10-05 15:10:19.252000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41793,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-05 15:09:17.340000+02:00 +Internet,case-9793,2011-11-22 01:06:40+01:00,General,2011-10-05 15:10:19.252000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41794,T11 Create document X request unlicensed,complete,Group 1,Resource03,2011-10-05 15:09:32.391000+02:00 +Internet,case-9793,2011-11-22 01:06:40+01:00,General,2011-10-05 15:10:19.252000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41796,T12 Check document X request unlicensed,complete,Group 4,Resource03,2011-10-05 15:09:47.347000+02:00 +Internet,case-9793,2011-11-22 01:06:40+01:00,General,2011-10-05 15:10:19.252000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41797,T14 Determine document X request unlicensed,complete,Group 3,Resource03,2011-10-05 15:10:04.500000+02:00 +Internet,case-9793,2011-11-22 01:06:40+01:00,General,2011-10-05 15:10:19.252000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource01,2011-09-27 01:06:40.020000+02:00,task-41798,T15 Print document X request unlicensed,complete,Group 2,Resource03,2011-10-05 15:10:19.089000+02:00 +Internet,case-9794,2011-11-22 01:06:40+01:00,General,2011-10-11 14:38:37.510000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource05,2011-09-27 01:06:40.020000+02:00,task-40696,Confirmation of receipt,complete,EMPTY,Resource05,2011-10-10 09:52:01.554000+02:00 +Internet,case-9794,2011-11-22 01:06:40+01:00,General,2011-10-11 14:38:37.510000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource05,2011-09-27 01:06:40.020000+02:00,task-42314,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-10-10 09:52:44.561000+02:00 +Internet,case-9794,2011-11-22 01:06:40+01:00,General,2011-10-11 14:38:37.510000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource05,2011-09-27 01:06:40.020000+02:00,task-42315,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-10-10 09:53:05.367000+02:00 +Internet,case-9794,2011-11-22 01:06:40+01:00,General,2011-10-11 14:38:37.510000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource05,2011-09-27 01:06:40.020000+02:00,task-42316,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-10-10 09:53:29.073000+02:00 +Internet,case-9794,2011-11-22 01:06:40+01:00,General,2011-10-11 14:38:37.510000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource05,2011-09-27 01:06:40.020000+02:00,task-42317,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-10-10 09:53:54.198000+02:00 +Internet,case-9794,2011-11-22 01:06:40+01:00,General,2011-10-11 14:38:37.510000+02:00,2011-11-22 01:06:40.010000+01:00,Group 5,Resource05,2011-09-27 01:06:40.020000+02:00,task-42318,T05 Print and send confirmation of receipt,complete,EMPTY,Resource05,2011-10-10 09:54:32.900000+02:00 +Internet,case-9796,2011-11-22 01:06:40+01:00,General,2011-10-26 11:19:51.767000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource11,2011-09-27 01:06:40.020000+02:00,task-40698,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-04 10:12:14.127000+02:00 +Internet,case-9796,2011-11-22 01:06:40+01:00,General,2011-10-26 11:19:51.767000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource11,2011-09-27 01:06:40.020000+02:00,task-41419,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-04 10:49:03.666000+02:00 +Internet,case-9796,2011-11-22 01:06:40+01:00,General,2011-10-26 11:19:51.767000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource11,2011-09-27 01:06:40.020000+02:00,task-41473,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-04 10:49:26.572000+02:00 +Internet,case-9796,2011-11-22 01:06:40+01:00,General,2011-10-26 11:19:51.767000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource11,2011-09-27 01:06:40.020000+02:00,task-41474,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-04 10:49:48.580000+02:00 +Internet,case-9796,2011-11-22 01:06:40+01:00,General,2011-10-26 11:19:51.767000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource11,2011-09-27 01:06:40.020000+02:00,task-41420,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-04 10:50:12.328000+02:00 +Internet,case-9796,2011-11-22 01:06:40+01:00,General,2011-10-26 11:19:51.767000+02:00,2011-11-22 01:06:40.010000+01:00,Group 8,Resource11,2011-09-27 01:06:40.020000+02:00,task-41475,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-04 10:50:44.667000+02:00 +Internet,case-9804,2011-08-19 01:06:40+02:00,General,2011-10-10 14:48:03.366000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource11,2011-06-24 01:06:40.020000+02:00,task-40738,Confirmation of receipt,complete,EMPTY,Resource11,2011-10-04 08:24:58.199000+02:00 +Internet,case-9804,2011-08-19 01:06:40+02:00,General,2011-10-10 14:48:03.366000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource11,2011-06-24 01:06:40.020000+02:00,task-41330,T06 Determine necessity of stop advice,complete,Group 1,Resource11,2011-10-05 07:48:09.663000+02:00 +Internet,case-9804,2011-08-19 01:06:40+02:00,General,2011-10-10 14:48:03.366000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource11,2011-06-24 01:06:40.020000+02:00,task-41329,T02 Check confirmation of receipt,complete,EMPTY,Resource11,2011-10-05 07:49:01.184000+02:00 +Internet,case-9804,2011-08-19 01:06:40+02:00,General,2011-10-10 14:48:03.366000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource11,2011-06-24 01:06:40.020000+02:00,task-41620,T04 Determine confirmation of receipt,complete,EMPTY,Resource11,2011-10-05 07:51:06.795000+02:00 +Internet,case-9804,2011-08-19 01:06:40+02:00,General,2011-10-10 14:48:03.366000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource11,2011-06-24 01:06:40.020000+02:00,task-41621,T05 Print and send confirmation of receipt,complete,EMPTY,Resource11,2011-10-05 07:52:16.526000+02:00 +Internet,case-9804,2011-08-19 01:06:40+02:00,General,2011-10-10 14:48:03.366000+02:00,2011-08-19 01:06:40.020000+02:00,Group 8,Resource11,2011-06-24 01:06:40.020000+02:00,task-41619,T10 Determine necessity to stop indication,complete,Group 1,Resource11,2011-10-05 07:52:52.344000+02:00 +Internet,case-9823,2011-10-26 01:06:40+02:00,General,2011-10-26 09:46:21.997000+02:00,2011-10-26 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-40807,Confirmation of receipt,complete,EMPTY,Resource01,2011-10-13 17:56:27.069000+02:00 +Internet,case-9823,2011-10-26 01:06:40+02:00,General,2011-10-26 09:46:21.997000+02:00,2011-10-26 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-43296,T06 Determine necessity of stop advice,complete,Group 1,Resource01,2011-10-13 17:57:06.123000+02:00 +Internet,case-9823,2011-10-26 01:06:40+02:00,General,2011-10-26 09:46:21.997000+02:00,2011-10-26 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-43295,T02 Check confirmation of receipt,complete,Group 4,Resource01,2011-10-13 17:57:26.894000+02:00 +Internet,case-9823,2011-10-26 01:06:40+02:00,General,2011-10-26 09:46:21.997000+02:00,2011-10-26 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-43297,T10 Determine necessity to stop indication,complete,Group 1,Resource01,2011-10-13 17:57:46.535000+02:00 +Internet,case-9823,2011-10-26 01:06:40+02:00,General,2011-10-26 09:46:21.997000+02:00,2011-10-26 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-43298,T04 Determine confirmation of receipt,complete,Group 3,Resource01,2011-10-13 17:58:10.389000+02:00 +Internet,case-9823,2011-10-26 01:06:40+02:00,General,2011-10-26 09:46:21.997000+02:00,2011-10-26 01:06:40.020000+02:00,Group 8,Resource01,2011-07-13 01:06:40.020000+02:00,task-43300,T05 Print and send confirmation of receipt,complete,Group 2,Resource01,2011-10-13 17:58:34.636000+02:00 +Internet,case-9826,2011-11-23 01:06:40+01:00,General,2011-11-30 12:44:48.919000+01:00,2011-11-23 01:06:40.010000+01:00,Group 5,Resource22,2011-09-28 01:06:40.020000+02:00,task-40863,Confirmation of receipt,complete,EMPTY,admin2,2011-11-30 12:44:49.990000+01:00 +Internet,case-9837,2011-12-19 00:00:00+01:00,General,,2011-12-19 00:00:00.010000+01:00,Group 2,Resource21,2011-09-30 01:06:40.020000+02:00,task-40957,Confirmation of receipt,complete,EMPTY,Resource21,2011-12-13 12:11:46.729000+01:00 +Internet,case-9839,2011-11-25 01:06:40+01:00,General,2011-10-27 12:08:55.838000+02:00,2011-11-25 01:06:40.010000+01:00,Group 8,Resource11,2011-09-30 01:06:40.020000+02:00,task-41004,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-05 10:47:10.795000+02:00 +Internet,case-9839,2011-11-25 01:06:40+01:00,General,2011-10-27 12:08:55.838000+02:00,2011-11-25 01:06:40.010000+01:00,Group 8,Resource11,2011-09-30 01:06:40.020000+02:00,task-41671,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-05 10:47:53.279000+02:00 +Internet,case-9839,2011-11-25 01:06:40+01:00,General,2011-10-27 12:08:55.838000+02:00,2011-11-25 01:06:40.010000+01:00,Group 8,Resource11,2011-09-30 01:06:40.020000+02:00,task-41673,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-05 10:48:23.828000+02:00 +Internet,case-9839,2011-11-25 01:06:40+01:00,General,2011-10-27 12:08:55.838000+02:00,2011-11-25 01:06:40.010000+01:00,Group 8,Resource11,2011-09-30 01:06:40.020000+02:00,task-41676,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-05 10:48:46.355000+02:00 +Internet,case-9839,2011-11-25 01:06:40+01:00,General,2011-10-27 12:08:55.838000+02:00,2011-11-25 01:06:40.010000+01:00,Group 8,Resource11,2011-09-30 01:06:40.020000+02:00,task-41672,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-05 10:49:15.759000+02:00 +Internet,case-9839,2011-11-25 01:06:40+01:00,General,2011-10-27 12:08:55.838000+02:00,2011-11-25 01:06:40.010000+01:00,Group 8,Resource11,2011-09-30 01:06:40.020000+02:00,task-41679,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-05 10:49:51.324000+02:00 +Internet,case-9844,2011-12-18 23:00:00+01:00,General,2011-11-15 09:45:22.531000+01:00,2011-12-18 23:00:00.010000+01:00,,Resource20,2011-09-30 00:00:00.020000+02:00,task-41041,Confirmation of receipt,complete,EMPTY,admin2,2011-11-15 09:45:23.438000+01:00 +Internet,case-9845,2011-12-18 23:00:00+01:00,General,2011-11-15 09:46:01.946000+01:00,2011-12-18 23:00:00.010000+01:00,,Resource20,2011-09-30 00:00:00.020000+02:00,task-41089,Confirmation of receipt,complete,EMPTY,admin2,2011-11-15 09:46:02.943000+01:00 +Internet,case-9860,2011-11-22 00:00:00+01:00,General,2012-01-18 10:43:56.634000+01:00,2011-11-22 00:00:00.010000+01:00,Group 5,Resource14,2011-09-27 01:06:40.020000+02:00,task-41194,Confirmation of receipt,complete,EMPTY,Resource14,2011-10-13 15:15:49.560000+02:00 +Internet,case-9860,2011-11-22 00:00:00+01:00,General,2012-01-18 10:43:56.634000+01:00,2011-11-22 00:00:00.010000+01:00,Group 5,Resource14,2011-09-27 01:06:40.020000+02:00,task-43262,T02 Check confirmation of receipt,complete,Group 4,Resource14,2011-10-13 15:16:20.578000+02:00 +Internet,case-9860,2011-11-22 00:00:00+01:00,General,2012-01-18 10:43:56.634000+01:00,2011-11-22 00:00:00.010000+01:00,Group 5,Resource14,2011-09-27 01:06:40.020000+02:00,task-43265,T04 Determine confirmation of receipt,complete,Group 3,Resource14,2011-10-13 15:16:43.584000+02:00 +Internet,case-9860,2011-11-22 00:00:00+01:00,General,2012-01-18 10:43:56.634000+01:00,2011-11-22 00:00:00.010000+01:00,Group 5,Resource14,2011-09-27 01:06:40.020000+02:00,task-43267,T05 Print and send confirmation of receipt,complete,Group 2,Resource14,2011-10-13 15:17:02.372000+02:00 +Internet,case-9860,2011-11-22 00:00:00+01:00,General,2012-01-18 10:43:56.634000+01:00,2011-11-22 00:00:00.010000+01:00,Group 5,Resource14,2011-09-27 01:06:40.020000+02:00,task-43263,T06 Determine necessity of stop advice,complete,Group 1,Resource14,2011-10-13 15:31:53.957000+02:00 +Internet,case-9860,2011-11-22 00:00:00+01:00,General,2012-01-18 10:43:56.634000+01:00,2011-11-22 00:00:00.010000+01:00,Group 5,Resource14,2011-09-27 01:06:40.020000+02:00,task-43275,T10 Determine necessity to stop indication,complete,Group 1,Resource14,2011-11-24 11:41:40.227000+01:00 +Internet,case-9870,2011-11-04 01:06:40+01:00,General,2011-10-31 15:58:24.653000+01:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-41215,Confirmation of receipt,complete,Group 1,Resource23,2011-10-03 12:26:45.990000+02:00 +Internet,case-9870,2011-11-04 01:06:40+01:00,General,2011-10-31 15:58:24.653000+01:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-41226,T02 Check confirmation of receipt,complete,EMPTY,Resource23,2011-10-03 12:27:55.320000+02:00 +Internet,case-9870,2011-11-04 01:06:40+01:00,General,2011-10-31 15:58:24.653000+01:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-41228,T04 Determine confirmation of receipt,complete,Group 3,Resource23,2011-10-03 12:28:26.193000+02:00 +Internet,case-9870,2011-11-04 01:06:40+01:00,General,2011-10-31 15:58:24.653000+01:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-41229,T05 Print and send confirmation of receipt,complete,Group 2,Resource23,2011-10-03 12:29:44.815000+02:00 +Internet,case-9870,2011-11-04 01:06:40+01:00,General,2011-10-31 15:58:24.653000+01:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-41227,T06 Determine necessity of stop advice,complete,Group 1,Resource23,2011-10-03 12:32:06.531000+02:00 +Internet,case-9870,2011-11-04 01:06:40+01:00,General,2011-10-31 15:58:24.653000+01:00,2011-11-04 01:06:40.010000+01:00,Group 5,Resource23,2011-07-08 01:06:40.020000+02:00,task-41230,T10 Determine necessity to stop indication,complete,Group 1,Resource23,2011-10-03 12:32:36.095000+02:00 +Internet,case-9883,2012-01-10 00:00:00+01:00,General,2012-01-09 16:47:20.282000+01:00,2011-11-29 00:00:00.010000+01:00,Group 5,Resource09,2011-10-04 01:06:40.020000+02:00,task-41339,Confirmation of receipt,complete,EMPTY,Resource09,2011-11-24 14:05:19.191000+01:00 +Internet,case-9883,2012-01-10 00:00:00+01:00,General,2012-01-09 16:47:20.282000+01:00,2011-11-29 00:00:00.010000+01:00,Group 5,Resource09,2011-10-04 01:06:40.020000+02:00,task-47857,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-11-24 14:05:55.077000+01:00 +Internet,case-9883,2012-01-10 00:00:00+01:00,General,2012-01-09 16:47:20.282000+01:00,2011-11-29 00:00:00.010000+01:00,Group 5,Resource09,2011-10-04 01:06:40.020000+02:00,task-47859,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-11-24 14:07:05.561000+01:00 +Internet,case-9883,2012-01-10 00:00:00+01:00,General,2012-01-09 16:47:20.282000+01:00,2011-11-29 00:00:00.010000+01:00,Group 5,Resource09,2011-10-04 01:06:40.020000+02:00,task-47861,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-11-24 14:07:33.305000+01:00 +Internet,case-9883,2012-01-10 00:00:00+01:00,General,2012-01-09 16:47:20.282000+01:00,2011-11-29 00:00:00.010000+01:00,Group 5,Resource09,2011-10-04 01:06:40.020000+02:00,task-47858,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-11-24 14:08:10.995000+01:00 +Internet,case-9883,2012-01-10 00:00:00+01:00,General,2012-01-09 16:47:20.282000+01:00,2011-11-29 00:00:00.010000+01:00,Group 5,Resource09,2011-10-04 01:06:40.020000+02:00,task-47862,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-11-24 14:08:57.511000+01:00 +Internet,case-9884,2011-11-29 09:06:52.777000+01:00,General,2011-10-27 12:18:43.686000+02:00,2011-11-29 09:06:52.777000+01:00,Group 8,Resource11,2011-10-04 09:06:52.777000+02:00,task-41352,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 10:05:57.552000+02:00 +Internet,case-9884,2011-11-29 09:06:52.777000+01:00,General,2011-10-27 12:18:43.686000+02:00,2011-11-29 09:06:52.777000+01:00,Group 8,Resource11,2011-10-04 09:06:52.777000+02:00,task-42336,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 10:21:44.804000+02:00 +Internet,case-9884,2011-11-29 09:06:52.777000+01:00,General,2011-10-27 12:18:43.686000+02:00,2011-11-29 09:06:52.777000+01:00,Group 8,Resource11,2011-10-04 09:06:52.777000+02:00,task-42339,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 10:22:01.954000+02:00 +Internet,case-9884,2011-11-29 09:06:52.777000+01:00,General,2011-10-27 12:18:43.686000+02:00,2011-11-29 09:06:52.777000+01:00,Group 8,Resource11,2011-10-04 09:06:52.777000+02:00,task-42340,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 10:22:18.846000+02:00 +Internet,case-9884,2011-11-29 09:06:52.777000+01:00,General,2011-10-27 12:18:43.686000+02:00,2011-11-29 09:06:52.777000+01:00,Group 8,Resource11,2011-10-04 09:06:52.777000+02:00,task-42337,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 10:22:41.765000+02:00 +Internet,case-9884,2011-11-29 09:06:52.777000+01:00,General,2011-10-27 12:18:43.686000+02:00,2011-11-29 09:06:52.777000+01:00,Group 8,Resource11,2011-10-04 09:06:52.777000+02:00,task-42343,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 10:23:04.339000+02:00 +Internet,case-9885,2011-12-08 01:06:40+01:00,General,2011-11-25 09:48:38.851000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-04 01:06:40.020000+02:00,task-41362,Confirmation of receipt,complete,EMPTY,Resource13,2011-10-07 12:35:08.589000+02:00 +Internet,case-9885,2011-12-08 01:06:40+01:00,General,2011-11-25 09:48:38.851000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-04 01:06:40.020000+02:00,task-42187,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-10-07 12:35:30.666000+02:00 +Internet,case-9885,2011-12-08 01:06:40+01:00,General,2011-11-25 09:48:38.851000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-04 01:06:40.020000+02:00,task-42186,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-10-07 12:36:19.161000+02:00 +Internet,case-9885,2011-12-08 01:06:40+01:00,General,2011-11-25 09:48:38.851000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-04 01:06:40.020000+02:00,task-42189,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-10-07 12:37:13.471000+02:00 +Internet,case-9885,2011-12-08 01:06:40+01:00,General,2011-11-25 09:48:38.851000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-04 01:06:40.020000+02:00,task-42190,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-10-07 12:37:42.893000+02:00 +Internet,case-9885,2011-12-08 01:06:40+01:00,General,2011-11-25 09:48:38.851000+01:00,2011-12-08 01:06:40.010000+01:00,Group 5,Resource13,2011-10-04 01:06:40.020000+02:00,task-42188,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-10-07 12:37:59.264000+02:00 +Internet,case-9886,2011-11-29 09:19:19.745000+01:00,General,2011-10-18 14:40:05.269000+02:00,2011-11-29 09:19:19.745000+01:00,Group 2,Resource03,2011-10-04 09:19:19.745000+02:00,task-41365,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 11:56:12.906000+02:00 +Internet,case-9886,2011-11-29 09:19:19.745000+01:00,General,2011-10-18 14:40:05.269000+02:00,2011-11-29 09:19:19.745000+01:00,Group 2,Resource03,2011-10-04 09:19:19.745000+02:00,task-42401,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 11:56:54.629000+02:00 +Internet,case-9886,2011-11-29 09:19:19.745000+01:00,General,2011-10-18 14:40:05.269000+02:00,2011-11-29 09:19:19.745000+01:00,Group 2,Resource03,2011-10-04 09:19:19.745000+02:00,task-42403,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 11:57:09.725000+02:00 +Internet,case-9886,2011-11-29 09:19:19.745000+01:00,General,2011-10-18 14:40:05.269000+02:00,2011-11-29 09:19:19.745000+01:00,Group 2,Resource03,2011-10-04 09:19:19.745000+02:00,task-42404,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 11:57:24.160000+02:00 +Internet,case-9886,2011-11-29 09:19:19.745000+01:00,General,2011-10-18 14:40:05.269000+02:00,2011-11-29 09:19:19.745000+01:00,Group 2,Resource03,2011-10-04 09:19:19.745000+02:00,task-42402,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 12:23:56.500000+02:00 +Internet,case-9886,2011-11-29 09:19:19.745000+01:00,General,2011-10-18 14:40:05.269000+02:00,2011-11-29 09:19:19.745000+01:00,Group 2,Resource03,2011-10-04 09:19:19.745000+02:00,task-42411,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 12:24:29.467000+02:00 +Internet,case-9887,2011-11-29 09:24:23.041000+01:00,General,2011-10-12 00:00:00.020000+02:00,2011-11-29 09:24:23.041000+01:00,Group 5,Resource23,2011-10-04 09:24:23.041000+02:00,task-41366,Confirmation of receipt,complete,EMPTY,Resource30,2011-10-12 09:12:32.218000+02:00 +Internet,case-9887,2011-11-29 09:24:23.041000+01:00,General,2011-10-12 00:00:00.020000+02:00,2011-11-29 09:24:23.041000+01:00,Group 5,Resource23,2011-10-04 09:24:23.041000+02:00,task-42981,T06 Determine necessity of stop advice,complete,Group 1,Resource30,2011-10-12 09:13:03.103000+02:00 +Internet,case-9887,2011-11-29 09:24:23.041000+01:00,General,2011-10-12 00:00:00.020000+02:00,2011-11-29 09:24:23.041000+01:00,Group 5,Resource23,2011-10-04 09:24:23.041000+02:00,task-42982,T10 Determine necessity to stop indication,complete,Group 1,Resource30,2011-10-12 09:13:22.808000+02:00 +Internet,case-9887,2011-11-29 09:24:23.041000+01:00,General,2011-10-12 00:00:00.020000+02:00,2011-11-29 09:24:23.041000+01:00,Group 5,Resource23,2011-10-04 09:24:23.041000+02:00,task-42980,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-10-13 07:45:02.665000+02:00 +Internet,case-9888,2011-11-22 01:06:40+01:00,General,2011-10-24 15:31:37.489000+02:00,2011-11-22 01:06:40.010000+01:00,Group 7,Resource35,2011-09-27 01:06:40.020000+02:00,task-41367,Confirmation of receipt,complete,EMPTY,admin2,2011-10-24 15:31:38.520000+02:00 +Internet,case-9890,2011-11-29 09:31:36.900000+01:00,General,2011-10-27 11:35:45.803000+02:00,2011-11-29 09:31:36.900000+01:00,Group 8,Resource11,2011-10-04 09:31:36.900000+02:00,task-41369,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 10:51:30.841000+02:00 +Internet,case-9890,2011-11-29 09:31:36.900000+01:00,General,2011-10-27 11:35:45.803000+02:00,2011-11-29 09:31:36.900000+01:00,Group 8,Resource11,2011-10-04 09:31:36.900000+02:00,task-42363,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 10:51:53.044000+02:00 +Internet,case-9890,2011-11-29 09:31:36.900000+01:00,General,2011-10-27 11:35:45.803000+02:00,2011-11-29 09:31:36.900000+01:00,Group 8,Resource11,2011-10-04 09:31:36.900000+02:00,task-42365,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 10:52:13.396000+02:00 +Internet,case-9890,2011-11-29 09:31:36.900000+01:00,General,2011-10-27 11:35:45.803000+02:00,2011-11-29 09:31:36.900000+01:00,Group 8,Resource11,2011-10-04 09:31:36.900000+02:00,task-42366,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 10:52:27.424000+02:00 +Internet,case-9890,2011-11-29 09:31:36.900000+01:00,General,2011-10-27 11:35:45.803000+02:00,2011-11-29 09:31:36.900000+01:00,Group 8,Resource11,2011-10-04 09:31:36.900000+02:00,task-42364,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 10:52:43.675000+02:00 +Internet,case-9890,2011-11-29 09:31:36.900000+01:00,General,2011-10-27 11:35:45.803000+02:00,2011-11-29 09:31:36.900000+01:00,Group 8,Resource11,2011-10-04 09:31:36.900000+02:00,task-42367,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 10:53:04.545000+02:00 +Internet,case-9892,2011-11-24 01:06:40+01:00,General,2011-10-26 11:44:41.624000+02:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource11,2011-09-29 01:06:40.020000+02:00,task-41394,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-07 16:12:59.069000+02:00 +Internet,case-9892,2011-11-24 01:06:40+01:00,General,2011-10-26 11:44:41.624000+02:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource11,2011-09-29 01:06:40.020000+02:00,task-42245,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-07 16:13:52.394000+02:00 +Internet,case-9892,2011-11-24 01:06:40+01:00,General,2011-10-26 11:44:41.624000+02:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource11,2011-09-29 01:06:40.020000+02:00,task-42247,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-07 16:14:08.421000+02:00 +Internet,case-9892,2011-11-24 01:06:40+01:00,General,2011-10-26 11:44:41.624000+02:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource11,2011-09-29 01:06:40.020000+02:00,task-42248,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-07 16:14:20.841000+02:00 +Internet,case-9892,2011-11-24 01:06:40+01:00,General,2011-10-26 11:44:41.624000+02:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource11,2011-09-29 01:06:40.020000+02:00,task-42246,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-07 16:55:53.075000+02:00 +Internet,case-9892,2011-11-24 01:06:40+01:00,General,2011-10-26 11:44:41.624000+02:00,2011-11-24 01:06:40.010000+01:00,Group 8,Resource11,2011-09-29 01:06:40.020000+02:00,task-42254,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-07 16:56:16.241000+02:00 +Internet,case-9893,2011-11-16 01:06:40+01:00,General,2011-10-24 15:34:42.610000+02:00,2011-11-16 01:06:40.010000+01:00,Group 7,Resource35,2011-09-21 01:06:40.020000+02:00,task-41414,Confirmation of receipt,complete,EMPTY,admin2,2011-10-24 15:34:43.435000+02:00 +Internet,case-9894,2011-12-21 01:06:40+01:00,General,2011-10-05 16:54:17.281000+02:00,2011-12-21 01:06:40.010000+01:00,Group 2,Resource21,2011-10-04 01:06:40.020000+02:00,task-41446,Confirmation of receipt,complete,EMPTY,Resource26,2011-10-04 15:21:40.365000+02:00 +Internet,case-9894,2011-12-21 01:06:40+01:00,General,2011-10-05 16:54:17.281000+02:00,2011-12-21 01:06:40.010000+01:00,Group 2,Resource21,2011-10-04 01:06:40.020000+02:00,task-41597,T06 Determine necessity of stop advice,complete,Group 1,admin2,2011-10-05 16:54:18.610000+02:00 +Internet,case-9894,2011-12-21 01:06:40+01:00,General,2011-10-05 16:54:17.281000+02:00,2011-12-21 01:06:40.010000+01:00,Group 2,Resource21,2011-10-04 01:06:40.020000+02:00,task-41596,T02 Check confirmation of receipt,complete,EMPTY,admin2,2011-10-05 16:54:19.195000+02:00 +Internet,case-9895,2011-11-21 01:06:40+01:00,General,2011-11-07 08:02:00.900000+01:00,2011-11-21 01:06:40.010000+01:00,Group 8,Resource11,2011-09-26 01:06:40.020000+02:00,task-41457,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 12:49:05.896000+02:00 +Internet,case-9895,2011-11-21 01:06:40+01:00,General,2011-11-07 08:02:00.900000+01:00,2011-11-21 01:06:40.010000+01:00,Group 8,Resource11,2011-09-26 01:06:40.020000+02:00,task-42882,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 12:49:30.730000+02:00 +Internet,case-9895,2011-11-21 01:06:40+01:00,General,2011-11-07 08:02:00.900000+01:00,2011-11-21 01:06:40.010000+01:00,Group 8,Resource11,2011-09-26 01:06:40.020000+02:00,task-42883,T07-4 Draft internal advice to hold for type 4,complete,Group 12,Resource03,2011-10-11 12:49:46.177000+02:00 +Internet,case-9895,2011-11-21 01:06:40+01:00,General,2011-11-07 08:02:00.900000+01:00,2011-11-21 01:06:40.010000+01:00,Group 8,Resource11,2011-09-26 01:06:40.020000+02:00,task-42884,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 12:50:00.788000+02:00 +Internet,case-9895,2011-11-21 01:06:40+01:00,General,2011-11-07 08:02:00.900000+01:00,2011-11-21 01:06:40.010000+01:00,Group 8,Resource11,2011-09-26 01:06:40.020000+02:00,task-42885,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-11 12:50:21.919000+02:00 +Internet,case-9895,2011-11-21 01:06:40+01:00,General,2011-11-07 08:02:00.900000+01:00,2011-11-21 01:06:40.010000+01:00,Group 8,Resource11,2011-09-26 01:06:40.020000+02:00,task-42881,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 12:50:36.614000+02:00 +Internet,case-9895,2011-11-21 01:06:40+01:00,General,2011-11-07 08:02:00.900000+01:00,2011-11-21 01:06:40.010000+01:00,Group 8,Resource11,2011-09-26 01:06:40.020000+02:00,task-42887,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 12:50:51.298000+02:00 +Internet,case-9895,2011-11-21 01:06:40+01:00,General,2011-11-07 08:02:00.900000+01:00,2011-11-21 01:06:40.010000+01:00,Group 8,Resource11,2011-09-26 01:06:40.020000+02:00,task-42888,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 12:51:05.484000+02:00 +Internet,case-9896,2011-11-21 01:06:40+01:00,General,2011-10-24 15:28:39.607000+02:00,2011-11-21 01:06:40.010000+01:00,Group 7,Resource35,2011-09-26 01:06:40.020000+02:00,task-41497,Confirmation of receipt,complete,EMPTY,admin2,2011-10-24 15:28:40.618000+02:00 +Internet,case-9897,2012-01-02 00:00:00+01:00,General,2012-01-17 14:23:20.043000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-09-26 01:06:40.020000+02:00,task-41499,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-05 12:37:17.065000+02:00 +Internet,case-9897,2012-01-02 00:00:00+01:00,General,2012-01-17 14:23:20.043000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-09-26 01:06:40.020000+02:00,task-41726,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-05 12:37:52.586000+02:00 +Internet,case-9897,2012-01-02 00:00:00+01:00,General,2012-01-17 14:23:20.043000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-09-26 01:06:40.020000+02:00,task-41728,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-05 12:38:14.918000+02:00 +Internet,case-9897,2012-01-02 00:00:00+01:00,General,2012-01-17 14:23:20.043000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-09-26 01:06:40.020000+02:00,task-41727,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-05 12:40:34.844000+02:00 +Internet,case-9897,2012-01-02 00:00:00+01:00,General,2012-01-17 14:23:20.043000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-09-26 01:06:40.020000+02:00,task-41734,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-05 12:48:53.171000+02:00 +Internet,case-9897,2012-01-02 00:00:00+01:00,General,2012-01-17 14:23:20.043000+01:00,2012-01-02 00:00:00.010000+01:00,Group 5,Resource02,2011-09-26 01:06:40.020000+02:00,task-41731,T05 Print and send confirmation of receipt,complete,EMPTY,Resource02,2011-10-06 07:37:28.500000+02:00 +Internet,case-9904,2011-12-21 01:06:40+01:00,General,2011-11-07 10:00:24.618000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-41773,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 09:10:57.835000+02:00 +Internet,case-9904,2011-12-21 01:06:40+01:00,General,2011-11-07 10:00:24.618000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-42288,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 09:11:20.142000+02:00 +Internet,case-9904,2011-12-21 01:06:40+01:00,General,2011-11-07 10:00:24.618000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-42290,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 09:11:45.822000+02:00 +Internet,case-9904,2011-12-21 01:06:40+01:00,General,2011-11-07 10:00:24.618000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-42291,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 09:12:01.759000+02:00 +Internet,case-9904,2011-12-21 01:06:40+01:00,General,2011-11-07 10:00:24.618000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-42289,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 09:23:10.365000+02:00 +Internet,case-9904,2011-12-21 01:06:40+01:00,General,2011-11-07 10:00:24.618000+01:00,2011-12-21 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-42293,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 09:23:32.479000+02:00 +Internet,case-9916,2011-11-29 01:06:40+01:00,General,2011-11-30 08:10:59.139000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-41746,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 11:37:39.876000+02:00 +Internet,case-9916,2011-11-29 01:06:40+01:00,General,2011-11-30 08:10:59.139000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-42864,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 11:38:07.852000+02:00 +Internet,case-9916,2011-11-29 01:06:40+01:00,General,2011-11-30 08:10:59.139000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-42866,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 11:38:32.571000+02:00 +Internet,case-9916,2011-11-29 01:06:40+01:00,General,2011-11-30 08:10:59.139000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-42867,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 11:38:48.265000+02:00 +Internet,case-9916,2011-11-29 01:06:40+01:00,General,2011-11-30 08:10:59.139000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-42865,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 11:39:12.189000+02:00 +Internet,case-9916,2011-11-29 01:06:40+01:00,General,2011-11-30 08:10:59.139000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-42869,T07-4 Draft internal advice to hold for type 4,complete,EMPTY,Resource03,2011-10-18 09:59:35.030000+02:00 +Internet,case-9916,2011-11-29 01:06:40+01:00,General,2011-11-30 08:10:59.139000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-43595,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-18 09:59:53.419000+02:00 +Internet,case-9916,2011-11-29 01:06:40+01:00,General,2011-11-30 08:10:59.139000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-43596,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-18 10:00:35.042000+02:00 +Internet,case-9919,2011-12-22 01:06:40+01:00,General,2011-11-30 07:40:07.644000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-41803,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-07 09:06:53.480000+02:00 +Internet,case-9919,2011-12-22 01:06:40+01:00,General,2011-11-30 07:40:07.644000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42097,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-07 09:07:23.379000+02:00 +Internet,case-9919,2011-12-22 01:06:40+01:00,General,2011-11-30 07:40:07.644000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42099,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-07 09:07:48.870000+02:00 +Internet,case-9919,2011-12-22 01:06:40+01:00,General,2011-11-30 07:40:07.644000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42100,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-07 09:08:07.023000+02:00 +Internet,case-9919,2011-12-22 01:06:40+01:00,General,2011-11-30 07:40:07.644000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42098,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-07 09:08:24.290000+02:00 +Internet,case-9919,2011-12-22 01:06:40+01:00,General,2011-11-30 07:40:07.644000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42101,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-07 09:08:53.701000+02:00 +Internet,case-9920,2011-12-22 01:06:40+01:00,General,2011-11-21 14:23:38.004000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-41816,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-07 08:39:18.634000+02:00 +Internet,case-9920,2011-12-22 01:06:40+01:00,General,2011-11-21 14:23:38.004000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42060,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-07 08:40:03.223000+02:00 +Internet,case-9920,2011-12-22 01:06:40+01:00,General,2011-11-21 14:23:38.004000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42062,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-07 08:40:22.614000+02:00 +Internet,case-9920,2011-12-22 01:06:40+01:00,General,2011-11-21 14:23:38.004000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42063,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-07 08:40:39.521000+02:00 +Internet,case-9920,2011-12-22 01:06:40+01:00,General,2011-11-21 14:23:38.004000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42061,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-07 08:40:59.538000+02:00 +Internet,case-9920,2011-12-22 01:06:40+01:00,General,2011-11-21 14:23:38.004000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42064,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-07 08:41:28.276000+02:00 +Internet,case-9921,2011-11-28 01:06:40+01:00,General,2011-11-07 12:32:52.389000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource04,2011-10-03 01:06:40.020000+02:00,task-41704,Confirmation of receipt,complete,EMPTY,Resource09,2011-10-31 15:22:24.741000+01:00 +Internet,case-9921,2011-11-28 01:06:40+01:00,General,2011-11-07 12:32:52.389000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource04,2011-10-03 01:06:40.020000+02:00,task-45243,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-10-31 15:23:40.966000+01:00 +Internet,case-9921,2011-11-28 01:06:40+01:00,General,2011-11-07 12:32:52.389000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource04,2011-10-03 01:06:40.020000+02:00,task-45245,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-10-31 15:25:26.050000+01:00 +Internet,case-9921,2011-11-28 01:06:40+01:00,General,2011-11-07 12:32:52.389000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource04,2011-10-03 01:06:40.020000+02:00,task-45244,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-31 15:25:52.415000+01:00 +Internet,case-9921,2011-11-28 01:06:40+01:00,General,2011-11-07 12:32:52.389000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource04,2011-10-03 01:06:40.020000+02:00,task-45249,T05 Print and send confirmation of receipt,complete,Group 2,Resource09,2011-10-31 15:26:18.131000+01:00 +Internet,case-9921,2011-11-28 01:06:40+01:00,General,2011-11-07 12:32:52.389000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource04,2011-10-03 01:06:40.020000+02:00,task-45250,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-31 15:30:16.685000+01:00 +Internet,case-9921,2011-11-28 01:06:40+01:00,General,2011-11-07 12:32:52.389000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource04,2011-10-03 01:06:40.020000+02:00,task-45251,T11 Create document X request unlicensed,complete,Group 1,Resource09,2011-10-31 15:51:33.320000+01:00 +Internet,case-9921,2011-11-28 01:06:40+01:00,General,2011-11-07 12:32:52.389000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource04,2011-10-03 01:06:40.020000+02:00,task-45261,T12 Check document X request unlicensed,complete,EMPTY,Resource04,2011-10-31 16:16:03.351000+01:00 +Internet,case-9921,2011-11-28 01:06:40+01:00,General,2011-11-07 12:32:52.389000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource04,2011-10-03 01:06:40.020000+02:00,task-45269,T14 Determine document X request unlicensed,complete,Group 3,Resource04,2011-10-31 16:16:26.975000+01:00 +Internet,case-9921,2011-11-28 01:06:40+01:00,General,2011-11-07 12:32:52.389000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource04,2011-10-03 01:06:40.020000+02:00,task-45270,T15 Print document X request unlicensed,complete,EMPTY,admin1,2011-11-07 12:32:52.208000+01:00 +Internet,case-9923,2011-11-28 01:06:40+01:00,General,2011-10-31 16:55:13.160000+01:00,2011-11-28 01:06:40.010000+01:00,Group 2,Resource20,2011-10-03 01:06:40.020000+02:00,task-41716,Confirmation of receipt,complete,EMPTY,Resource20,2011-10-26 12:04:17.338000+02:00 +Internet,case-9923,2011-11-28 01:06:40+01:00,General,2011-10-31 16:55:13.160000+01:00,2011-11-28 01:06:40.010000+01:00,Group 2,Resource20,2011-10-03 01:06:40.020000+02:00,task-44685,T02 Check confirmation of receipt,complete,EMPTY,Resource20,2011-10-27 10:47:14.553000+02:00 +Internet,case-9923,2011-11-28 01:06:40+01:00,General,2011-10-31 16:55:13.160000+01:00,2011-11-28 01:06:40.010000+01:00,Group 2,Resource20,2011-10-03 01:06:40.020000+02:00,task-44844,T04 Determine confirmation of receipt,complete,EMPTY,Resource20,2011-10-27 10:47:51.088000+02:00 +Internet,case-9923,2011-11-28 01:06:40+01:00,General,2011-10-31 16:55:13.160000+01:00,2011-11-28 01:06:40.010000+01:00,Group 2,Resource20,2011-10-03 01:06:40.020000+02:00,task-44846,T05 Print and send confirmation of receipt,complete,EMPTY,Resource20,2011-10-27 10:48:27.302000+02:00 +Internet,case-9923,2011-11-28 01:06:40+01:00,General,2011-10-31 16:55:13.160000+01:00,2011-11-28 01:06:40.010000+01:00,Group 2,Resource20,2011-10-03 01:06:40.020000+02:00,task-44686,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-10-27 10:49:30.585000+02:00 +Internet,case-9923,2011-11-28 01:06:40+01:00,General,2011-10-31 16:55:13.160000+01:00,2011-11-28 01:06:40.010000+01:00,Group 2,Resource20,2011-10-03 01:06:40.020000+02:00,task-44848,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-10-27 10:49:48.187000+02:00 +Internet,case-9924,2011-12-22 01:06:40+01:00,General,2011-11-21 09:37:01.435000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-41819,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-07 10:00:49.113000+02:00 +Internet,case-9924,2011-12-22 01:06:40+01:00,General,2011-11-21 09:37:01.435000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42122,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-07 10:01:12.702000+02:00 +Internet,case-9924,2011-12-22 01:06:40+01:00,General,2011-11-21 09:37:01.435000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42124,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-07 10:01:35.421000+02:00 +Internet,case-9924,2011-12-22 01:06:40+01:00,General,2011-11-21 09:37:01.435000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42125,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-07 10:01:59.336000+02:00 +Internet,case-9924,2011-12-22 01:06:40+01:00,General,2011-11-21 09:37:01.435000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42123,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-07 10:02:26.888000+02:00 +Internet,case-9924,2011-12-22 01:06:40+01:00,General,2011-11-21 09:37:01.435000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42126,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-07 10:03:13.921000+02:00 +Internet,case-9925,2011-12-22 01:06:40+01:00,General,2011-11-21 09:44:12.722000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-41823,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 14:39:28.524000+02:00 +Internet,case-9925,2011-12-22 01:06:40+01:00,General,2011-11-21 09:44:12.722000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42494,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 14:39:49.247000+02:00 +Internet,case-9925,2011-12-22 01:06:40+01:00,General,2011-11-21 09:44:12.722000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42497,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 14:40:05.221000+02:00 +Internet,case-9925,2011-12-22 01:06:40+01:00,General,2011-11-21 09:44:12.722000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42498,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 14:40:26.413000+02:00 +Internet,case-9925,2011-12-22 01:06:40+01:00,General,2011-11-21 09:44:12.722000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42495,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 14:40:41.099000+02:00 +Internet,case-9925,2011-12-22 01:06:40+01:00,General,2011-11-21 09:44:12.722000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42500,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 14:40:59.473000+02:00 +Internet,case-9926,2011-12-22 01:06:40+01:00,General,2011-10-26 08:05:04.376000+02:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource02,2011-10-05 01:06:40.020000+02:00,task-41831,Confirmation of receipt,complete,EMPTY,Resource20,2011-10-18 09:41:14.043000+02:00 +Internet,case-9926,2011-12-22 01:06:40+01:00,General,2011-10-26 08:05:04.376000+02:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource02,2011-10-05 01:06:40.020000+02:00,task-43584,T02 Check confirmation of receipt,complete,Group 4,Resource20,2011-10-18 09:42:17.499000+02:00 +Internet,case-9926,2011-12-22 01:06:40+01:00,General,2011-10-26 08:05:04.376000+02:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource02,2011-10-05 01:06:40.020000+02:00,task-43585,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-10-18 09:45:24.098000+02:00 +Internet,case-9926,2011-12-22 01:06:40+01:00,General,2011-10-26 08:05:04.376000+02:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource02,2011-10-05 01:06:40.020000+02:00,task-43587,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-10-18 09:46:56.818000+02:00 +Internet,case-9926,2011-12-22 01:06:40+01:00,General,2011-10-26 08:05:04.376000+02:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource02,2011-10-05 01:06:40.020000+02:00,task-43586,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-10-18 10:37:50.168000+02:00 +Internet,case-9926,2011-12-22 01:06:40+01:00,General,2011-10-26 08:05:04.376000+02:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource02,2011-10-05 01:06:40.020000+02:00,task-43621,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-10-18 10:41:56.733000+02:00 +Internet,case-9927,2011-12-22 01:06:40+01:00,General,2011-11-15 10:37:58.468000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource05,2011-10-05 01:06:40.020000+02:00,task-41833,Confirmation of receipt,complete,EMPTY,Resource05,2011-11-08 11:41:03.047000+01:00 +Internet,case-9927,2011-12-22 01:06:40+01:00,General,2011-11-15 10:37:58.468000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource05,2011-10-05 01:06:40.020000+02:00,task-45772,T02 Check confirmation of receipt,complete,Group 4,Resource05,2011-11-08 11:41:32.606000+01:00 +Internet,case-9927,2011-12-22 01:06:40+01:00,General,2011-11-15 10:37:58.468000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource05,2011-10-05 01:06:40.020000+02:00,task-45774,T04 Determine confirmation of receipt,complete,Group 3,Resource05,2011-11-08 11:41:56.772000+01:00 +Internet,case-9927,2011-12-22 01:06:40+01:00,General,2011-11-15 10:37:58.468000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource05,2011-10-05 01:06:40.020000+02:00,task-45775,T05 Print and send confirmation of receipt,complete,Group 2,Resource05,2011-11-08 11:42:18.067000+01:00 +Internet,case-9927,2011-12-22 01:06:40+01:00,General,2011-11-15 10:37:58.468000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource05,2011-10-05 01:06:40.020000+02:00,task-45773,T06 Determine necessity of stop advice,complete,Group 1,Resource05,2011-11-08 11:42:43.344000+01:00 +Internet,case-9927,2011-12-22 01:06:40+01:00,General,2011-11-15 10:37:58.468000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource05,2011-10-05 01:06:40.020000+02:00,task-45776,T10 Determine necessity to stop indication,complete,Group 1,Resource05,2011-11-08 11:43:11.154000+01:00 +Internet,case-9927,2011-12-22 01:06:40+01:00,General,2011-11-15 10:37:58.468000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource05,2011-10-05 01:06:40.020000+02:00,task-45777,T16 Report reasons to hold request,complete,Group 1,Resource05,2011-11-08 11:43:56.699000+01:00 +Internet,case-9927,2011-12-22 01:06:40+01:00,General,2011-11-15 10:37:58.468000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource05,2011-10-05 01:06:40.020000+02:00,task-45778,T17 Check report Y to stop indication,complete,Group 4,Resource05,2011-11-08 11:44:51.187000+01:00 +Internet,case-9927,2011-12-22 01:06:40+01:00,General,2011-11-15 10:37:58.468000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource05,2011-10-05 01:06:40.020000+02:00,task-45779,T19 Determine report Y to stop indication,complete,Group 3,Resource05,2011-11-08 11:45:36.126000+01:00 +Internet,case-9927,2011-12-22 01:06:40+01:00,General,2011-11-15 10:37:58.468000+01:00,2011-12-22 01:06:40.010000+01:00,Group 5,Resource05,2011-10-05 01:06:40.020000+02:00,task-45780,T20 Print report Y to stop indication,complete,Group 2,Resource05,2011-11-08 11:47:32.708000+01:00 +Internet,case-9928,2011-11-28 01:06:40+01:00,General,2011-12-07 12:55:18.299000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource22,2011-10-03 01:06:40.020000+02:00,task-41741,Confirmation of receipt,complete,EMPTY,Resource22,2011-10-24 09:59:01.977000+02:00 +Internet,case-9928,2011-11-28 01:06:40+01:00,General,2011-12-07 12:55:18.299000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource22,2011-10-03 01:06:40.020000+02:00,task-44216,T02 Check confirmation of receipt,complete,Group 4,Resource22,2011-10-24 10:00:06.125000+02:00 +Internet,case-9928,2011-11-28 01:06:40+01:00,General,2011-12-07 12:55:18.299000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource22,2011-10-03 01:06:40.020000+02:00,task-44218,T04 Determine confirmation of receipt,complete,Group 3,Resource22,2011-10-24 10:00:42.057000+02:00 +Internet,case-9928,2011-11-28 01:06:40+01:00,General,2011-12-07 12:55:18.299000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource22,2011-10-03 01:06:40.020000+02:00,task-44219,T05 Print and send confirmation of receipt,complete,Group 2,Resource22,2011-10-24 10:01:40.451000+02:00 +Internet,case-9928,2011-11-28 01:06:40+01:00,General,2011-12-07 12:55:18.299000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource22,2011-10-03 01:06:40.020000+02:00,task-44217,T06 Determine necessity of stop advice,complete,Group 1,Resource22,2011-10-24 10:03:05.042000+02:00 +Internet,case-9928,2011-11-28 01:06:40+01:00,General,2011-12-07 12:55:18.299000+01:00,2011-11-28 01:06:40.010000+01:00,Group 5,Resource22,2011-10-03 01:06:40.020000+02:00,task-44220,T10 Determine necessity to stop indication,complete,Group 1,Resource22,2011-10-24 10:04:05.240000+02:00 +Internet,case-9929,2011-12-22 01:06:40+01:00,General,2011-11-17 08:26:24.943000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-41834,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-07 10:54:10.132000+02:00 +Internet,case-9929,2011-12-22 01:06:40+01:00,General,2011-11-17 08:26:24.943000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42161,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-07 10:54:36.601000+02:00 +Internet,case-9929,2011-12-22 01:06:40+01:00,General,2011-11-17 08:26:24.943000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42163,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-07 10:55:00.562000+02:00 +Internet,case-9929,2011-12-22 01:06:40+01:00,General,2011-11-17 08:26:24.943000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42164,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-07 11:08:54.831000+02:00 +Internet,case-9929,2011-12-22 01:06:40+01:00,General,2011-11-17 08:26:24.943000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42162,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-07 11:09:20.555000+02:00 +Internet,case-9929,2011-12-22 01:06:40+01:00,General,2011-11-17 08:26:24.943000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42165,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-07 11:09:56.242000+02:00 +Internet,case-9931,2011-12-22 01:06:40+01:00,General,2011-11-21 09:55:44.983000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-41835,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-07 10:22:11.258000+02:00 +Internet,case-9931,2011-12-22 01:06:40+01:00,General,2011-11-21 09:55:44.983000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42141,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-07 10:22:44.484000+02:00 +Internet,case-9931,2011-12-22 01:06:40+01:00,General,2011-11-21 09:55:44.983000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42143,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-07 10:23:09.462000+02:00 +Internet,case-9931,2011-12-22 01:06:40+01:00,General,2011-11-21 09:55:44.983000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42144,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-07 10:23:29.729000+02:00 +Internet,case-9931,2011-12-22 01:06:40+01:00,General,2011-11-21 09:55:44.983000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42142,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-07 10:23:50.389000+02:00 +Internet,case-9931,2011-12-22 01:06:40+01:00,General,2011-11-21 09:55:44.983000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42145,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-07 10:24:18.898000+02:00 +Internet,case-9932,2011-12-22 01:06:40+01:00,General,2011-11-17 08:54:03.790000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-41836,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 16:27:46.227000+02:00 +Internet,case-9932,2011-12-22 01:06:40+01:00,General,2011-11-17 08:54:03.790000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42607,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 16:30:22.617000+02:00 +Internet,case-9932,2011-12-22 01:06:40+01:00,General,2011-11-17 08:54:03.790000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42608,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 16:32:12.805000+02:00 +Internet,case-9932,2011-12-22 01:06:40+01:00,General,2011-11-17 08:54:03.790000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42609,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 16:32:29.516000+02:00 +Internet,case-9932,2011-12-22 01:06:40+01:00,General,2011-11-17 08:54:03.790000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42611,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 16:32:54.943000+02:00 +Internet,case-9932,2011-12-22 01:06:40+01:00,General,2011-11-17 08:54:03.790000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42610,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 16:33:24.899000+02:00 +Internet,case-9934,2011-12-22 01:06:40+01:00,General,2011-11-21 10:13:59.758000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-41837,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 15:10:44.354000+02:00 +Internet,case-9934,2011-12-22 01:06:40+01:00,General,2011-11-21 10:13:59.758000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42540,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 15:11:02.971000+02:00 +Internet,case-9934,2011-12-22 01:06:40+01:00,General,2011-11-21 10:13:59.758000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42541,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 15:11:18.435000+02:00 +Internet,case-9934,2011-12-22 01:06:40+01:00,General,2011-11-21 10:13:59.758000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42543,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 15:11:38.132000+02:00 +Internet,case-9934,2011-12-22 01:06:40+01:00,General,2011-11-21 10:13:59.758000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42542,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 15:12:17.748000+02:00 +Internet,case-9934,2011-12-22 01:06:40+01:00,General,2011-11-21 10:13:59.758000+01:00,2011-12-22 01:06:40.010000+01:00,Group 8,Resource11,2011-10-05 01:06:40.020000+02:00,task-42547,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 15:12:34.753000+02:00 +Internet,case-9936,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-10-05 01:06:40.020000+02:00,task-42105,Confirmation of receipt,complete,EMPTY,Resource04,2011-10-20 14:28:41.313000+02:00 +Internet,case-9936,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-10-05 01:06:40.020000+02:00,task-44025,T02 Check confirmation of receipt,complete,Group 4,Resource04,2011-10-20 14:29:00.055000+02:00 +Internet,case-9936,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-10-05 01:06:40.020000+02:00,task-44027,T04 Determine confirmation of receipt,complete,Group 3,Resource04,2011-10-20 14:31:27.177000+02:00 +Internet,case-9936,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-10-05 01:06:40.020000+02:00,task-44028,T05 Print and send confirmation of receipt,complete,Group 2,Resource04,2011-10-20 14:31:43.030000+02:00 +Internet,case-9936,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-10-05 01:06:40.020000+02:00,task-44026,T06 Determine necessity of stop advice,complete,Group 1,Resource04,2011-10-20 14:32:06.126000+02:00 +Internet,case-9936,2012-02-15 00:00:00+01:00,General,,2012-02-15 00:00:00.010000+01:00,Group 5,Resource04,2011-10-05 01:06:40.020000+02:00,task-44029,T10 Determine necessity to stop indication,complete,Group 1,Resource04,2011-10-20 14:32:26.561000+02:00 +Internet,case-9941,2011-12-22 00:00:00+01:00,General,2012-01-05 15:39:06.431000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource13,2011-10-06 01:06:40.020000+02:00,task-42054,Confirmation of receipt,complete,EMPTY,Resource13,2011-10-19 19:41:32.262000+02:00 +Internet,case-9941,2011-12-22 00:00:00+01:00,General,2012-01-05 15:39:06.431000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource13,2011-10-06 01:06:40.020000+02:00,task-43919,T02 Check confirmation of receipt,complete,EMPTY,Resource13,2011-10-19 19:42:03.079000+02:00 +Internet,case-9941,2011-12-22 00:00:00+01:00,General,2012-01-05 15:39:06.431000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource13,2011-10-06 01:06:40.020000+02:00,task-43921,T04 Determine confirmation of receipt,complete,EMPTY,Resource13,2011-10-19 19:42:29.666000+02:00 +Internet,case-9941,2011-12-22 00:00:00+01:00,General,2012-01-05 15:39:06.431000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource13,2011-10-06 01:06:40.020000+02:00,task-43922,T05 Print and send confirmation of receipt,complete,EMPTY,Resource13,2011-10-19 19:42:56.431000+02:00 +Internet,case-9941,2011-12-22 00:00:00+01:00,General,2012-01-05 15:39:06.431000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource13,2011-10-06 01:06:40.020000+02:00,task-43920,T06 Determine necessity of stop advice,complete,Group 1,Resource13,2011-10-19 19:43:13.100000+02:00 +Internet,case-9941,2011-12-22 00:00:00+01:00,General,2012-01-05 15:39:06.431000+01:00,2011-12-22 00:00:00.010000+01:00,Group 5,Resource13,2011-10-06 01:06:40.020000+02:00,task-43923,T10 Determine necessity to stop indication,complete,Group 1,Resource13,2011-10-19 19:44:02.650000+02:00 +Internet,case-9942,2011-12-23 01:06:40+01:00,General,2011-11-21 10:39:21.672000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-41923,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-12 08:55:03.746000+02:00 +Internet,case-9942,2011-12-23 01:06:40+01:00,General,2011-11-21 10:39:21.672000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42960,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-12 08:55:29.367000+02:00 +Internet,case-9942,2011-12-23 01:06:40+01:00,General,2011-11-21 10:39:21.672000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42962,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-12 08:56:01.197000+02:00 +Internet,case-9942,2011-12-23 01:06:40+01:00,General,2011-11-21 10:39:21.672000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42963,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-12 08:56:22.704000+02:00 +Internet,case-9942,2011-12-23 01:06:40+01:00,General,2011-11-21 10:39:21.672000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42961,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-12 08:56:43.907000+02:00 +Internet,case-9942,2011-12-23 01:06:40+01:00,General,2011-11-21 10:39:21.672000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42964,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-12 08:57:12.640000+02:00 +Internet,case-9943,2011-11-29 01:06:40+01:00,General,2011-11-07 09:28:24.079000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-41926,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-12 12:36:36.794000+02:00 +Internet,case-9943,2011-11-29 01:06:40+01:00,General,2011-11-07 09:28:24.079000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-43095,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-12 12:46:25.348000+02:00 +Internet,case-9943,2011-11-29 01:06:40+01:00,General,2011-11-07 09:28:24.079000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-43098,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-12 12:46:47.190000+02:00 +Internet,case-9943,2011-11-29 01:06:40+01:00,General,2011-11-07 09:28:24.079000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-43099,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-12 12:47:04.899000+02:00 +Internet,case-9943,2011-11-29 01:06:40+01:00,General,2011-11-07 09:28:24.079000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-43096,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-12 12:47:22.696000+02:00 +Internet,case-9943,2011-11-29 01:06:40+01:00,General,2011-11-07 09:28:24.079000+01:00,2011-11-29 01:06:40.010000+01:00,Group 8,Resource11,2011-10-04 01:06:40.020000+02:00,task-43100,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-12 12:47:45.840000+02:00 +Internet,case-9944,2011-12-23 01:06:40+01:00,General,2011-11-17 08:47:54.571000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-41952,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-12 11:49:54.420000+02:00 +Internet,case-9944,2011-12-23 01:06:40+01:00,General,2011-11-17 08:47:54.571000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43054,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-12 11:50:19.220000+02:00 +Internet,case-9944,2011-12-23 01:06:40+01:00,General,2011-11-17 08:47:54.571000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43061,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-12 11:50:38.925000+02:00 +Internet,case-9944,2011-12-23 01:06:40+01:00,General,2011-11-17 08:47:54.571000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43062,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-12 11:50:56.920000+02:00 +Internet,case-9944,2011-12-23 01:06:40+01:00,General,2011-11-17 08:47:54.571000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43056,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-12 11:51:16.166000+02:00 +Internet,case-9944,2011-12-23 01:06:40+01:00,General,2011-11-17 08:47:54.571000+01:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-43064,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-12 11:51:47.101000+02:00 +Internet,case-9946,2011-11-23 01:06:40+01:00,General,2011-11-14 08:31:14.790000+01:00,2011-11-23 01:06:40.010000+01:00,Group 8,Resource11,2011-09-28 01:06:40.020000+02:00,task-41932,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-12 15:13:15.006000+02:00 +Internet,case-9946,2011-11-23 01:06:40+01:00,General,2011-11-14 08:31:14.790000+01:00,2011-11-23 01:06:40.010000+01:00,Group 8,Resource11,2011-09-28 01:06:40.020000+02:00,task-43161,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-12 15:17:26.259000+02:00 +Internet,case-9946,2011-11-23 01:06:40+01:00,General,2011-11-14 08:31:14.790000+01:00,2011-11-23 01:06:40.010000+01:00,Group 8,Resource11,2011-09-28 01:06:40.020000+02:00,task-43165,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-12 15:17:44.756000+02:00 +Internet,case-9946,2011-11-23 01:06:40+01:00,General,2011-11-14 08:31:14.790000+01:00,2011-11-23 01:06:40.010000+01:00,Group 8,Resource11,2011-09-28 01:06:40.020000+02:00,task-43166,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-12 15:18:01.377000+02:00 +Internet,case-9946,2011-11-23 01:06:40+01:00,General,2011-11-14 08:31:14.790000+01:00,2011-11-23 01:06:40.010000+01:00,Group 8,Resource11,2011-09-28 01:06:40.020000+02:00,task-43162,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-12 15:18:18.572000+02:00 +Internet,case-9946,2011-11-23 01:06:40+01:00,General,2011-11-14 08:31:14.790000+01:00,2011-11-23 01:06:40.010000+01:00,Group 8,Resource11,2011-09-28 01:06:40.020000+02:00,task-43168,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-12 15:18:43.878000+02:00 +Internet,case-9947,2012-01-15 00:00:00+01:00,General,2012-01-16 15:45:57.982000+01:00,2012-01-15 00:00:00.010000+01:00,Group 5,Resource02,2011-10-03 01:06:40.020000+02:00,task-41933,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-18 13:22:17.174000+02:00 +Internet,case-9947,2012-01-15 00:00:00+01:00,General,2012-01-16 15:45:57.982000+01:00,2012-01-15 00:00:00.010000+01:00,Group 5,Resource02,2011-10-03 01:06:40.020000+02:00,task-43658,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-18 13:23:01.421000+02:00 +Internet,case-9947,2012-01-15 00:00:00+01:00,General,2012-01-16 15:45:57.982000+01:00,2012-01-15 00:00:00.010000+01:00,Group 5,Resource02,2011-10-03 01:06:40.020000+02:00,task-43660,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-18 13:23:44.438000+02:00 +Internet,case-9947,2012-01-15 00:00:00+01:00,General,2012-01-16 15:45:57.982000+01:00,2012-01-15 00:00:00.010000+01:00,Group 5,Resource02,2011-10-03 01:06:40.020000+02:00,task-43661,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-18 13:24:05.444000+02:00 +Internet,case-9947,2012-01-15 00:00:00+01:00,General,2012-01-16 15:45:57.982000+01:00,2012-01-15 00:00:00.010000+01:00,Group 5,Resource02,2011-10-03 01:06:40.020000+02:00,task-43659,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-10-18 14:06:13.467000+02:00 +Internet,case-9947,2012-01-15 00:00:00+01:00,General,2012-01-16 15:45:57.982000+01:00,2012-01-15 00:00:00.010000+01:00,Group 5,Resource02,2011-10-03 01:06:40.020000+02:00,task-43705,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-10-18 14:06:42.492000+02:00 +Internet,case-9948,2011-12-23 01:06:40+01:00,General,2011-10-14 13:03:38.170000+02:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-41951,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 15:40:31.164000+02:00 +Internet,case-9948,2011-12-23 01:06:40+01:00,General,2011-10-14 13:03:38.170000+02:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42564,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 15:40:56.999000+02:00 +Internet,case-9948,2011-12-23 01:06:40+01:00,General,2011-10-14 13:03:38.170000+02:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42565,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 15:41:22.694000+02:00 +Internet,case-9948,2011-12-23 01:06:40+01:00,General,2011-10-14 13:03:38.170000+02:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42566,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 15:41:38.735000+02:00 +Internet,case-9948,2011-12-23 01:06:40+01:00,General,2011-10-14 13:03:38.170000+02:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42568,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 15:41:52.458000+02:00 +Internet,case-9948,2011-12-23 01:06:40+01:00,General,2011-10-14 13:03:38.170000+02:00,2011-12-23 01:06:40.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42567,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 15:42:12.496000+02:00 +Internet,case-9955,2011-12-23 00:00:00+01:00,General,2011-12-23 15:35:09.572000+01:00,2011-12-23 00:00:00.010000+01:00,Group 5,Resource02,2011-10-06 01:06:40.020000+02:00,task-42311,Confirmation of receipt,complete,EMPTY,Resource02,2011-10-31 14:52:30.132000+01:00 +Internet,case-9955,2011-12-23 00:00:00+01:00,General,2011-12-23 15:35:09.572000+01:00,2011-12-23 00:00:00.010000+01:00,Group 5,Resource02,2011-10-06 01:06:40.020000+02:00,task-45227,T02 Check confirmation of receipt,complete,Group 4,Resource02,2011-10-31 14:52:54.101000+01:00 +Internet,case-9955,2011-12-23 00:00:00+01:00,General,2011-12-23 15:35:09.572000+01:00,2011-12-23 00:00:00.010000+01:00,Group 5,Resource02,2011-10-06 01:06:40.020000+02:00,task-45229,T04 Determine confirmation of receipt,complete,Group 3,Resource02,2011-10-31 14:53:18.768000+01:00 +Internet,case-9955,2011-12-23 00:00:00+01:00,General,2011-12-23 15:35:09.572000+01:00,2011-12-23 00:00:00.010000+01:00,Group 5,Resource02,2011-10-06 01:06:40.020000+02:00,task-45231,T05 Print and send confirmation of receipt,complete,Group 2,Resource02,2011-10-31 14:53:51.460000+01:00 +Internet,case-9955,2011-12-23 00:00:00+01:00,General,2011-12-23 15:35:09.572000+01:00,2011-12-23 00:00:00.010000+01:00,Group 5,Resource02,2011-10-06 01:06:40.020000+02:00,task-45228,T06 Determine necessity of stop advice,complete,Group 1,Resource02,2011-11-23 08:38:57.507000+01:00 +Internet,case-9955,2011-12-23 00:00:00+01:00,General,2011-12-23 15:35:09.572000+01:00,2011-12-23 00:00:00.010000+01:00,Group 5,Resource02,2011-10-06 01:06:40.020000+02:00,task-47695,T10 Determine necessity to stop indication,complete,Group 1,Resource02,2011-11-23 13:57:38.127000+01:00 +Internet,case-9957,2011-12-01 00:00:00+01:00,General,2012-01-05 14:13:21.439000+01:00,2011-12-01 00:00:00.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42338,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 13:16:57.661000+02:00 +Internet,case-9957,2011-12-01 00:00:00+01:00,General,2012-01-05 14:13:21.439000+01:00,2011-12-01 00:00:00.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42913,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 13:17:16.597000+02:00 +Internet,case-9957,2011-12-01 00:00:00+01:00,General,2012-01-05 14:13:21.439000+01:00,2011-12-01 00:00:00.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42915,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 13:17:35.672000+02:00 +Internet,case-9957,2011-12-01 00:00:00+01:00,General,2012-01-05 14:13:21.439000+01:00,2011-12-01 00:00:00.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42916,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 13:17:49.206000+02:00 +Internet,case-9957,2011-12-01 00:00:00+01:00,General,2012-01-05 14:13:21.439000+01:00,2011-12-01 00:00:00.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42914,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 13:19:09.983000+02:00 +Internet,case-9957,2011-12-01 00:00:00+01:00,General,2012-01-05 14:13:21.439000+01:00,2011-12-01 00:00:00.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42917,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-11 13:19:30.958000+02:00 +Internet,case-9957,2011-12-01 00:00:00+01:00,General,2012-01-05 14:13:21.439000+01:00,2011-12-01 00:00:00.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42919,T16 Report reasons to hold request,complete,Group 1,Resource03,2011-10-11 13:21:31.944000+02:00 +Internet,case-9957,2011-12-01 00:00:00+01:00,General,2012-01-05 14:13:21.439000+01:00,2011-12-01 00:00:00.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42920,T17 Check report Y to stop indication,complete,Group 4,Resource03,2011-10-11 13:21:50.216000+02:00 +Internet,case-9957,2011-12-01 00:00:00+01:00,General,2012-01-05 14:13:21.439000+01:00,2011-12-01 00:00:00.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42921,T19 Determine report Y to stop indication,complete,Group 3,Resource03,2011-10-11 13:22:10.284000+02:00 +Internet,case-9957,2011-12-01 00:00:00+01:00,General,2012-01-05 14:13:21.439000+01:00,2011-12-01 00:00:00.010000+01:00,Group 8,Resource11,2011-10-06 01:06:40.020000+02:00,task-42922,T20 Print report Y to stop indication,complete,Group 2,Resource03,2011-10-11 13:22:24.226000+02:00 +Internet,case-9961,2011-12-26 01:06:40+01:00,General,2011-11-23 08:56:59.365000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42221,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-11 09:12:50.433000+02:00 +Internet,case-9961,2011-12-26 01:06:40+01:00,General,2011-11-23 08:56:59.365000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42725,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-11 09:13:17.033000+02:00 +Internet,case-9961,2011-12-26 01:06:40+01:00,General,2011-11-23 08:56:59.365000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42727,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-11 09:13:36.932000+02:00 +Internet,case-9961,2011-12-26 01:06:40+01:00,General,2011-11-23 08:56:59.365000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42728,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-11 09:13:54.840000+02:00 +Internet,case-9961,2011-12-26 01:06:40+01:00,General,2011-11-23 08:56:59.365000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42726,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-11 09:14:16.008000+02:00 +Internet,case-9961,2011-12-26 01:06:40+01:00,General,2011-11-23 08:56:59.365000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42729,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-11 09:14:45.071000+02:00 +Internet,case-9963,2011-12-02 01:06:40+01:00,General,2011-11-14 08:40:38.838000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42357,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-11 09:54:15.948000+02:00 +Internet,case-9963,2011-12-02 01:06:40+01:00,General,2011-11-14 08:40:38.838000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42774,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-11 09:54:41.512000+02:00 +Internet,case-9963,2011-12-02 01:06:40+01:00,General,2011-11-14 08:40:38.838000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42776,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-11 09:58:52.580000+02:00 +Internet,case-9963,2011-12-02 01:06:40+01:00,General,2011-11-14 08:40:38.838000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42780,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-11 09:59:12.263000+02:00 +Internet,case-9963,2011-12-02 01:06:40+01:00,General,2011-11-14 08:40:38.838000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42775,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-11 09:59:35.492000+02:00 +Internet,case-9963,2011-12-02 01:06:40+01:00,General,2011-11-14 08:40:38.838000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42782,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-11 10:00:04.529000+02:00 +Internet,case-9966,2011-12-02 01:06:40+01:00,General,2011-12-02 14:48:58.581000+01:00,2011-12-02 01:06:40.010000+01:00,Group 5,Resource09,2011-10-07 01:06:40.020000+02:00,task-42362,Confirmation of receipt,complete,EMPTY,Resource09,2011-10-25 11:17:19.567000+02:00 +Internet,case-9966,2011-12-02 01:06:40+01:00,General,2011-12-02 14:48:58.581000+01:00,2011-12-02 01:06:40.010000+01:00,Group 5,Resource09,2011-10-07 01:06:40.020000+02:00,task-44419,T02 Check confirmation of receipt,complete,EMPTY,Resource09,2011-10-25 12:13:00.339000+02:00 +Internet,case-9966,2011-12-02 01:06:40+01:00,General,2011-12-02 14:48:58.581000+01:00,2011-12-02 01:06:40.010000+01:00,Group 5,Resource09,2011-10-07 01:06:40.020000+02:00,task-44420,T06 Determine necessity of stop advice,complete,Group 1,Resource09,2011-10-25 12:14:58.533000+02:00 +Internet,case-9966,2011-12-02 01:06:40+01:00,General,2011-12-02 14:48:58.581000+01:00,2011-12-02 01:06:40.010000+01:00,Group 5,Resource09,2011-10-07 01:06:40.020000+02:00,task-44428,T10 Determine necessity to stop indication,complete,Group 1,Resource09,2011-10-25 12:15:31.971000+02:00 +Internet,case-9966,2011-12-02 01:06:40+01:00,General,2011-12-02 14:48:58.581000+01:00,2011-12-02 01:06:40.010000+01:00,Group 5,Resource09,2011-10-07 01:06:40.020000+02:00,task-44427,T04 Determine confirmation of receipt,complete,Group 3,Resource10,2011-10-25 12:49:59.137000+02:00 +Internet,case-9966,2011-12-02 01:06:40+01:00,General,2011-12-02 14:48:58.581000+01:00,2011-12-02 01:06:40.010000+01:00,Group 5,Resource09,2011-10-07 01:06:40.020000+02:00,task-44438,T03 Adjust confirmation of receipt,complete,Group 1,Resource09,2011-11-01 08:55:52.385000+01:00 +Internet,case-9966,2011-12-02 01:06:40+01:00,General,2011-12-02 14:48:58.581000+01:00,2011-12-02 01:06:40.010000+01:00,Group 5,Resource09,2011-10-07 01:06:40.020000+02:00,task-45340,T02 Check confirmation of receipt,complete,Group 4,Resource09,2011-11-01 08:56:44.375000+01:00 +Internet,case-9966,2011-12-02 01:06:40+01:00,General,2011-12-02 14:48:58.581000+01:00,2011-12-02 01:06:40.010000+01:00,Group 5,Resource09,2011-10-07 01:06:40.020000+02:00,task-45341,T04 Determine confirmation of receipt,complete,Group 3,Resource09,2011-11-01 08:59:28.350000+01:00 +Internet,case-9966,2011-12-02 01:06:40+01:00,General,2011-12-02 14:48:58.581000+01:00,2011-12-02 01:06:40.010000+01:00,Group 5,Resource09,2011-10-07 01:06:40.020000+02:00,task-45342,T05 Print and send confirmation of receipt,complete,Group 2,admin1,2011-11-07 12:34:29.078000+01:00 +Internet,case-9967,2011-12-02 01:06:40+01:00,General,2011-11-07 10:54:05.508000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42292,Confirmation of receipt,complete,EMPTY,Resource16,2011-10-11 08:34:50.571000+02:00 +Internet,case-9967,2011-12-02 01:06:40+01:00,General,2011-11-07 10:54:05.508000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42682,T06 Determine necessity of stop advice,complete,Group 1,Resource16,2011-10-11 08:35:13.280000+02:00 +Internet,case-9967,2011-12-02 01:06:40+01:00,General,2011-11-07 10:54:05.508000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42681,T02 Check confirmation of receipt,complete,Group 4,Resource16,2011-10-11 08:35:37.693000+02:00 +Internet,case-9967,2011-12-02 01:06:40+01:00,General,2011-11-07 10:54:05.508000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42684,T04 Determine confirmation of receipt,complete,Group 3,Resource16,2011-10-11 08:35:58.321000+02:00 +Internet,case-9967,2011-12-02 01:06:40+01:00,General,2011-11-07 10:54:05.508000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42685,T05 Print and send confirmation of receipt,complete,Group 2,Resource16,2011-10-11 08:36:15.505000+02:00 +Internet,case-9967,2011-12-02 01:06:40+01:00,General,2011-11-07 10:54:05.508000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42683,T10 Determine necessity to stop indication,complete,Group 1,Resource16,2011-10-11 08:36:42.866000+02:00 +Internet,case-9969,2011-12-02 01:06:40+01:00,General,2011-11-14 08:50:36.749000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42300,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 16:01:16.213000+02:00 +Internet,case-9969,2011-12-02 01:06:40+01:00,General,2011-11-14 08:50:36.749000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42587,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 16:01:33.711000+02:00 +Internet,case-9969,2011-12-02 01:06:40+01:00,General,2011-11-14 08:50:36.749000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42589,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 16:01:49.941000+02:00 +Internet,case-9969,2011-12-02 01:06:40+01:00,General,2011-11-14 08:50:36.749000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42590,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 16:02:05.310000+02:00 +Internet,case-9969,2011-12-02 01:06:40+01:00,General,2011-11-14 08:50:36.749000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42588,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 16:02:59.871000+02:00 +Internet,case-9969,2011-12-02 01:06:40+01:00,General,2011-11-14 08:50:36.749000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42591,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 16:05:52.955000+02:00 +Internet,case-9970,2011-12-26 01:06:40+01:00,General,2011-11-23 09:03:22.743000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42384,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-10 16:48:24.273000+02:00 +Internet,case-9970,2011-12-26 01:06:40+01:00,General,2011-11-23 09:03:22.743000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42630,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-10 16:48:58.021000+02:00 +Internet,case-9970,2011-12-26 01:06:40+01:00,General,2011-11-23 09:03:22.743000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42632,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-10 16:49:19.540000+02:00 +Internet,case-9970,2011-12-26 01:06:40+01:00,General,2011-11-23 09:03:22.743000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42633,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-10 16:49:42.935000+02:00 +Internet,case-9970,2011-12-26 01:06:40+01:00,General,2011-11-23 09:03:22.743000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42631,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-10 16:50:07.416000+02:00 +Internet,case-9970,2011-12-26 01:06:40+01:00,General,2011-11-23 09:03:22.743000+01:00,2011-12-26 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42634,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-10 16:50:28.926000+02:00 +Internet,case-9972,2011-12-02 01:06:40+01:00,General,2011-11-07 08:11:54.768000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42392,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 09:33:40.916000+02:00 +Internet,case-9972,2011-12-02 01:06:40+01:00,General,2011-11-07 08:11:54.768000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42748,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 09:34:02.700000+02:00 +Internet,case-9972,2011-12-02 01:06:40+01:00,General,2011-11-07 08:11:54.768000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42750,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 09:34:26.398000+02:00 +Internet,case-9972,2011-12-02 01:06:40+01:00,General,2011-11-07 08:11:54.768000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42751,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 09:36:02.310000+02:00 +Internet,case-9972,2011-12-02 01:06:40+01:00,General,2011-11-07 08:11:54.768000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42749,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 09:36:17.726000+02:00 +Internet,case-9972,2011-12-02 01:06:40+01:00,General,2011-11-07 08:11:54.768000+01:00,2011-12-02 01:06:40.010000+01:00,Group 8,Resource11,2011-10-07 01:06:40.020000+02:00,task-42752,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-11 09:36:49.905000+02:00 +Internet,case-9981,2011-12-03 01:06:40+01:00,General,2011-10-11 10:36:32.140000+02:00,2011-12-03 01:06:40.010000+01:00,Group 2,Resource03,2011-10-08 01:06:40.020000+02:00,task-42399,Confirmation of receipt,complete,EMPTY,Resource03,2011-10-11 10:22:13.618000+02:00 +Internet,case-9981,2011-12-03 01:06:40+01:00,General,2011-10-11 10:36:32.140000+02:00,2011-12-03 01:06:40.010000+01:00,Group 2,Resource03,2011-10-08 01:06:40.020000+02:00,task-42800,T02 Check confirmation of receipt,complete,Group 4,Resource03,2011-10-11 10:22:32.153000+02:00 +Internet,case-9981,2011-12-03 01:06:40+01:00,General,2011-10-11 10:36:32.140000+02:00,2011-12-03 01:06:40.010000+01:00,Group 2,Resource03,2011-10-08 01:06:40.020000+02:00,task-42802,T04 Determine confirmation of receipt,complete,Group 3,Resource03,2011-10-11 10:22:46.603000+02:00 +Internet,case-9981,2011-12-03 01:06:40+01:00,General,2011-10-11 10:36:32.140000+02:00,2011-12-03 01:06:40.010000+01:00,Group 2,Resource03,2011-10-08 01:06:40.020000+02:00,task-42803,T05 Print and send confirmation of receipt,complete,Group 2,Resource03,2011-10-11 10:23:00.604000+02:00 +Internet,case-9981,2011-12-03 01:06:40+01:00,General,2011-10-11 10:36:32.140000+02:00,2011-12-03 01:06:40.010000+01:00,Group 2,Resource03,2011-10-08 01:06:40.020000+02:00,task-42801,T06 Determine necessity of stop advice,complete,Group 1,Resource03,2011-10-11 10:23:27.058000+02:00 +Internet,case-9981,2011-12-03 01:06:40+01:00,General,2011-10-11 10:36:32.140000+02:00,2011-12-03 01:06:40.010000+01:00,Group 2,Resource03,2011-10-08 01:06:40.020000+02:00,task-42804,T10 Determine necessity to stop indication,complete,Group 1,Resource03,2011-10-11 10:28:16.630000+02:00 +Internet,case-9986,2011-12-04 01:06:40+01:00,General,2011-10-27 13:21:44.814000+02:00,2011-12-04 01:06:40.010000+01:00,Group 2,Resource20,2011-10-09 01:06:40.020000+02:00,task-42426,Confirmation of receipt,complete,EMPTY,Resource20,2011-10-26 10:05:29.211000+02:00 +Internet,case-9986,2011-12-04 01:06:40+01:00,General,2011-10-27 13:21:44.814000+02:00,2011-12-04 01:06:40.010000+01:00,Group 2,Resource20,2011-10-09 01:06:40.020000+02:00,task-44627,T02 Check confirmation of receipt,complete,EMPTY,Resource20,2011-10-26 10:06:37.311000+02:00 +Internet,case-9986,2011-12-04 01:06:40+01:00,General,2011-10-27 13:21:44.814000+02:00,2011-12-04 01:06:40.010000+01:00,Group 2,Resource20,2011-10-09 01:06:40.020000+02:00,task-44629,T04 Determine confirmation of receipt,complete,Group 3,Resource20,2011-10-26 10:07:03.750000+02:00 +Internet,case-9986,2011-12-04 01:06:40+01:00,General,2011-10-27 13:21:44.814000+02:00,2011-12-04 01:06:40.010000+01:00,Group 2,Resource20,2011-10-09 01:06:40.020000+02:00,task-44630,T05 Print and send confirmation of receipt,complete,Group 2,Resource20,2011-10-26 10:07:27.130000+02:00 +Internet,case-9986,2011-12-04 01:06:40+01:00,General,2011-10-27 13:21:44.814000+02:00,2011-12-04 01:06:40.010000+01:00,Group 2,Resource20,2011-10-09 01:06:40.020000+02:00,task-44628,T06 Determine necessity of stop advice,complete,Group 1,Resource20,2011-10-26 10:07:49.759000+02:00 +Internet,case-9986,2011-12-04 01:06:40+01:00,General,2011-10-27 13:21:44.814000+02:00,2011-12-04 01:06:40.010000+01:00,Group 2,Resource20,2011-10-09 01:06:40.020000+02:00,task-44631,T10 Determine necessity to stop indication,complete,Group 1,Resource20,2011-10-26 10:08:14.773000+02:00 +Internet,case-9997,2011-12-01 01:06:40+01:00,General,2011-10-20 14:19:44.448000+02:00,2011-12-01 01:06:40.010000+01:00,Group 5,Resource06,2011-10-06 01:06:40.020000+02:00,task-42287,Confirmation of receipt,complete,EMPTY,Resource06,2011-10-18 09:03:12.303000+02:00 +Internet,case-9997,2011-12-01 01:06:40+01:00,General,2011-10-20 14:19:44.448000+02:00,2011-12-01 01:06:40.010000+01:00,Group 5,Resource06,2011-10-06 01:06:40.020000+02:00,task-43560,T02 Check confirmation of receipt,complete,Group 4,Resource06,2011-10-18 09:04:48.732000+02:00 +Internet,case-9997,2011-12-01 01:06:40+01:00,General,2011-10-20 14:19:44.448000+02:00,2011-12-01 01:06:40.010000+01:00,Group 5,Resource06,2011-10-06 01:06:40.020000+02:00,task-43562,T04 Determine confirmation of receipt,complete,Group 3,Resource06,2011-10-18 09:05:12.359000+02:00 +Internet,case-9997,2011-12-01 01:06:40+01:00,General,2011-10-20 14:19:44.448000+02:00,2011-12-01 01:06:40.010000+01:00,Group 5,Resource06,2011-10-06 01:06:40.020000+02:00,task-43563,T05 Print and send confirmation of receipt,complete,Group 2,Resource06,2011-10-18 09:05:30.196000+02:00 +Internet,case-9997,2011-12-01 01:06:40+01:00,General,2011-10-20 14:19:44.448000+02:00,2011-12-01 01:06:40.010000+01:00,Group 5,Resource06,2011-10-06 01:06:40.020000+02:00,task-43561,T06 Determine necessity of stop advice,complete,Group 1,Resource06,2011-10-18 09:06:01.468000+02:00 +Internet,case-9997,2011-12-01 01:06:40+01:00,General,2011-10-20 14:19:44.448000+02:00,2011-12-01 01:06:40.010000+01:00,Group 5,Resource06,2011-10-06 01:06:40.020000+02:00,task-43564,T10 Determine necessity to stop indication,complete,Group 1,Resource06,2011-10-18 09:06:20.547000+02:00 diff --git a/pm4py/tests/input_data/receipt.parquet b/pm4py/tests/input_data/receipt.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fcc7776c028626af46966938ae88fc78b6961f1c --- /dev/null +++ b/pm4py/tests/input_data/receipt.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:482022ea9d4bb7238787fe855b59500e81a028fb559541bb8255e367a219f4f5 +size 179745 diff --git a/pm4py/tests/input_data/receipt.xes b/pm4py/tests/input_data/receipt.xes new file mode 100644 index 0000000000000000000000000000000000000000..8ba8b03ec223c019c39f89ebd34e927b845e53f8 --- /dev/null +++ b/pm4py/tests/input_data/receipt.xes @@ -0,0 +1,85252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/receipt_one_variant.pnml b/pm4py/tests/input_data/receipt_one_variant.pnml new file mode 100644 index 0000000000000000000000000000000000000000..4bbedfa1a305dc94f90752da1741c7635c62ddda --- /dev/null +++ b/pm4py/tests/input_data/receipt_one_variant.pnml @@ -0,0 +1,82 @@ + + + + + + + source + + + 1 + + + + + sink + + + + + p3 + + + + + p2 + + + + + p4 + + + + + p1 + + + + + Confirmation of receipt + + + + + T05 Print and send confirmation of receipt + + + + + T04 Determine confirmation of receipt + + + + + T06 Determine necessity of stop advice + + + + + T02 Check confirmation of receipt + + + + + + + + + + + + + + + + + 1 + + + + + diff --git a/pm4py/tests/input_data/reviewing.csv b/pm4py/tests/input_data/reviewing.csv new file mode 100644 index 0000000000000000000000000000000000000000..1a1a1bd6fd248f289cf26825d2e0d937b3a85e30 --- /dev/null +++ b/pm4py/tests/input_data/reviewing.csv @@ -0,0 +1,3731 @@ +Result by Reviewer A,Result by Reviewer B,Result by Reviewer C,Result by Reviewer X,accepts,case:concept:name,case:description,concept:name,lifecycle:transition,org:resource,rejects,time:timestamp +,,,,,1,Simulated process instance,invite reviewers,start,Mike,,2006-01-01 00:00:00+01:00 +,,,,,1,Simulated process instance,invite reviewers,complete,Mike,,2006-01-06 00:00:00+01:00 +,reject,,,,1,Simulated process instance,get review 2,complete,Carol,,2006-01-09 00:00:00+01:00 +,,reject,,,1,Simulated process instance,get review 3,complete,Pam,,2006-01-10 00:00:00+01:00 +reject,,,,,1,Simulated process instance,get review 1,complete,John,,2006-01-11 00:00:00+01:00 +,,,,,1,Simulated process instance,collect reviews,start,Anne,,2006-01-11 00:00:00+01:00 +,,,,,1,Simulated process instance,collect reviews,complete,Anne,,2006-01-13 00:00:00+01:00 +,,,,,1,Simulated process instance,decide,start,Wil,,2006-01-13 00:00:00+01:00 +,,,,0,1,Simulated process instance,decide,complete,Wil,3,2006-01-18 00:00:00+01:00 +,,,,,1,Simulated process instance,invite additional reviewer,start,Anne,,2006-01-18 00:00:00+01:00 +,,,,,1,Simulated process instance,invite additional reviewer,complete,Anne,,2006-01-20 00:00:00+01:00 +,,,accept,,1,Simulated process instance,get review X,complete,Pam,,2006-01-23 00:00:00+01:00 +,,,,,1,Simulated process instance,decide,start,Wil,,2006-01-24 00:00:00+01:00 +,,,,1,1,Simulated process instance,decide,complete,Wil,3,2006-01-27 00:00:00+01:00 +,,,,,1,Simulated process instance,invite additional reviewer,start,Mike,,2006-01-27 00:00:00+01:00 +,,,,,1,Simulated process instance,invite additional reviewer,complete,Mike,,2006-01-28 00:00:00+01:00 +,,,reject,,1,Simulated process instance,get review X,complete,Mary,,2006-01-31 00:00:00+01:00 +,,,,,1,Simulated process instance,decide,start,Wil,,2006-02-14 00:00:00+01:00 +,,,,1,1,Simulated process instance,decide,complete,Wil,4,2006-02-19 00:00:00+01:00 +,,,,,1,Simulated process instance,invite additional reviewer,start,Mike,,2006-02-19 00:00:00+01:00 +,,,,,1,Simulated process instance,invite additional reviewer,complete,Mike,,2006-02-23 00:00:00+01:00 +,,,reject,,1,Simulated process instance,get review X,complete,Sara,,2006-02-25 00:00:00+01:00 +,,,,,1,Simulated process instance,decide,start,Wil,,2006-04-08 01:00:00+02:00 +,,,,1,1,Simulated process instance,decide,complete,Wil,5,2006-04-10 01:00:00+02:00 +,,,,,1,Simulated process instance,reject,start,Anne,,2006-04-11 01:00:00+02:00 +,,,,,1,Simulated process instance,reject,complete,Anne,,2006-04-13 01:00:00+02:00 +,,,,,10,Simulated process instance,invite reviewers,start,Anne,,2006-02-03 00:00:00+01:00 +,,,,,10,Simulated process instance,invite reviewers,complete,Anne,,2006-02-06 00:00:00+01:00 +,accept,,,,10,Simulated process instance,get review 2,complete,Sara,,2006-02-06 00:00:00+01:00 +,,accept,,,10,Simulated process instance,get review 3,complete,John,,2006-02-06 00:00:00+01:00 +,,,,,10,Simulated process instance,time-out 1,complete,__INVALID__,,2006-02-07 00:00:00+01:00 +,,,,,10,Simulated process instance,collect reviews,start,Mike,,2006-02-07 00:00:00+01:00 +,,,,,10,Simulated process instance,collect reviews,complete,Mike,,2006-02-11 00:00:00+01:00 +,,,,,10,Simulated process instance,decide,start,Wil,,2006-03-01 00:00:00+01:00 +,,,,2,10,Simulated process instance,decide,complete,Wil,0,2006-03-01 00:00:00+01:00 +,,,,,10,Simulated process instance,invite additional reviewer,start,Mike,,2006-03-04 00:00:00+01:00 +,,,,,10,Simulated process instance,invite additional reviewer,complete,Mike,,2006-03-08 00:00:00+01:00 +,,,,,10,Simulated process instance,time-out X,complete,__INVALID__,,2006-03-12 00:00:00+01:00 +,,,,,10,Simulated process instance,decide,start,Wil,,2006-05-14 01:00:00+02:00 +,,,,2,10,Simulated process instance,decide,complete,Wil,0,2006-05-17 01:00:00+02:00 +,,,,,10,Simulated process instance,invite additional reviewer,start,Mike,,2006-05-20 01:00:00+02:00 +,,,,,10,Simulated process instance,invite additional reviewer,complete,Mike,,2006-05-23 01:00:00+02:00 +,,,,,10,Simulated process instance,time-out X,complete,__INVALID__,,2006-05-31 01:00:00+02:00 +,,,,,10,Simulated process instance,decide,start,Wil,,2006-07-27 01:00:00+02:00 +,,,,2,10,Simulated process instance,decide,complete,Wil,0,2006-07-30 01:00:00+02:00 +,,,,,10,Simulated process instance,invite additional reviewer,start,Anne,,2006-08-08 01:00:00+02:00 +,,,,,10,Simulated process instance,invite additional reviewer,complete,Anne,,2006-08-12 01:00:00+02:00 +,,,reject,,10,Simulated process instance,get review X,complete,Pete,,2006-08-14 01:00:00+02:00 +,,,,,10,Simulated process instance,decide,start,Wil,,2006-11-18 00:00:00+01:00 +,,,,2,10,Simulated process instance,decide,complete,Wil,1,2006-11-22 00:00:00+01:00 +,,,,,10,Simulated process instance,invite additional reviewer,start,Anne,,2007-02-02 00:00:00+01:00 +,,,,,10,Simulated process instance,invite additional reviewer,complete,Anne,,2007-02-06 00:00:00+01:00 +,,,,,10,Simulated process instance,time-out X,complete,__INVALID__,,2007-02-10 00:00:00+01:00 +,,,,,10,Simulated process instance,decide,start,Wil,,2007-12-02 00:00:00+01:00 +,,,,2,10,Simulated process instance,decide,complete,Wil,1,2007-12-02 00:00:00+01:00 +,,,,,10,Simulated process instance,invite additional reviewer,start,Mike,,2007-12-02 00:00:00+01:00 +,,,,,10,Simulated process instance,invite additional reviewer,complete,Mike,,2007-12-02 00:00:00+01:00 +,,,accept,,10,Simulated process instance,get review X,complete,Carol,,2007-12-06 00:00:00+01:00 +,,,,,10,Simulated process instance,decide,start,Wil,,2008-02-16 00:00:00+01:00 +,,,,3,10,Simulated process instance,decide,complete,Wil,1,2008-02-21 00:00:00+01:00 +,,,,,10,Simulated process instance,invite additional reviewer,start,Anne,,2008-02-21 00:00:00+01:00 +,,,,,10,Simulated process instance,invite additional reviewer,complete,Anne,,2008-02-22 00:00:00+01:00 +,,,,,10,Simulated process instance,time-out X,complete,__INVALID__,,2008-03-01 00:00:00+01:00 +,,,,,10,Simulated process instance,decide,start,Wil,,2009-07-15 01:00:00+02:00 +,,,,3,10,Simulated process instance,decide,complete,Wil,1,2009-07-15 01:00:00+02:00 +,,,,,10,Simulated process instance,accept,start,Mike,,2009-07-17 01:00:00+02:00 +,,,,,10,Simulated process instance,accept,complete,Mike,,2009-07-17 01:00:00+02:00 +,,,,,100,Simulated process instance,invite reviewers,start,Anne,,2007-03-15 00:00:00+01:00 +,,,,,100,Simulated process instance,invite reviewers,complete,Anne,,2007-03-18 00:00:00+01:00 +,,accept,,,100,Simulated process instance,get review 3,complete,Pam,,2007-03-19 00:00:00+01:00 +accept,,,,,100,Simulated process instance,get review 1,complete,Sara,,2007-03-21 00:00:00+01:00 +,reject,,,,100,Simulated process instance,get review 2,complete,Pete,,2007-03-22 00:00:00+01:00 +,,,,,100,Simulated process instance,collect reviews,start,Anne,,2007-03-22 00:00:00+01:00 +,,,,,100,Simulated process instance,collect reviews,complete,Anne,,2007-03-25 00:00:00+01:00 +,,,,,100,Simulated process instance,decide,start,Wil,,2008-02-02 00:00:00+01:00 +,,,,2,100,Simulated process instance,decide,complete,Wil,1,2008-02-03 00:00:00+01:00 +,,,,,100,Simulated process instance,invite additional reviewer,start,Mike,,2008-02-03 00:00:00+01:00 +,,,,,100,Simulated process instance,invite additional reviewer,complete,Mike,,2008-02-05 00:00:00+01:00 +,,,,,100,Simulated process instance,time-out X,complete,__INVALID__,,2008-02-05 00:00:00+01:00 +,,,,,100,Simulated process instance,decide,start,Wil,,2008-08-11 01:00:00+02:00 +,,,,2,100,Simulated process instance,decide,complete,Wil,1,2008-08-14 01:00:00+02:00 +,,,,,100,Simulated process instance,invite additional reviewer,start,Anne,,2008-08-14 01:00:00+02:00 +,,,,,100,Simulated process instance,invite additional reviewer,complete,Anne,,2008-08-16 01:00:00+02:00 +,,,,,100,Simulated process instance,time-out X,complete,__INVALID__,,2008-08-21 01:00:00+02:00 +,,,,,100,Simulated process instance,decide,start,Wil,,2009-03-08 00:00:00+01:00 +,,,,2,100,Simulated process instance,decide,complete,Wil,1,2009-03-13 00:00:00+01:00 +,,,,,100,Simulated process instance,invite additional reviewer,start,Anne,,2009-03-13 00:00:00+01:00 +,,,,,100,Simulated process instance,invite additional reviewer,complete,Anne,,2009-03-16 00:00:00+01:00 +,,,reject,,100,Simulated process instance,get review X,complete,Mary,,2009-03-20 00:00:00+01:00 +,,,,,100,Simulated process instance,decide,start,Wil,,2009-08-19 01:00:00+02:00 +,,,,2,100,Simulated process instance,decide,complete,Wil,2,2009-08-19 01:00:00+02:00 +,,,,,100,Simulated process instance,invite additional reviewer,start,Mike,,2009-08-22 01:00:00+02:00 +,,,,,100,Simulated process instance,invite additional reviewer,complete,Mike,,2009-08-24 01:00:00+02:00 +,,,,,100,Simulated process instance,time-out X,complete,__INVALID__,,2009-08-31 01:00:00+02:00 +,,,,,100,Simulated process instance,decide,start,Wil,,2009-09-06 01:00:00+02:00 +,,,,2,100,Simulated process instance,decide,complete,Wil,2,2009-09-10 01:00:00+02:00 +,,,,,100,Simulated process instance,invite additional reviewer,start,Anne,,2009-09-10 01:00:00+02:00 +,,,,,100,Simulated process instance,invite additional reviewer,complete,Anne,,2009-09-12 01:00:00+02:00 +,,,accept,,100,Simulated process instance,get review X,complete,Mary,,2009-09-16 01:00:00+02:00 +,,,,,100,Simulated process instance,decide,start,Wil,,2009-09-19 01:00:00+02:00 +,,,,3,100,Simulated process instance,decide,complete,Wil,2,2009-09-23 01:00:00+02:00 +,,,,,100,Simulated process instance,accept,start,Mike,,2009-09-23 01:00:00+02:00 +,,,,,100,Simulated process instance,accept,complete,Mike,,2009-09-23 01:00:00+02:00 +,,,,,11,Simulated process instance,invite reviewers,start,Mike,,2006-02-04 00:00:00+01:00 +,,,,,11,Simulated process instance,invite reviewers,complete,Mike,,2006-02-06 00:00:00+01:00 +,,reject,,,11,Simulated process instance,get review 3,complete,Sam,,2006-02-08 00:00:00+01:00 +,,,,,11,Simulated process instance,time-out 2,complete,__INVALID__,,2006-02-10 00:00:00+01:00 +,,,,,11,Simulated process instance,time-out 1,complete,__INVALID__,,2006-02-12 00:00:00+01:00 +,,,,,11,Simulated process instance,collect reviews,start,Anne,,2006-02-18 00:00:00+01:00 +,,,,,11,Simulated process instance,collect reviews,complete,Anne,,2006-02-21 00:00:00+01:00 +,,,,,11,Simulated process instance,decide,start,Wil,,2006-06-20 01:00:00+02:00 +,,,,1,11,Simulated process instance,decide,complete,Wil,1,2006-06-22 01:00:00+02:00 +,,,,,11,Simulated process instance,invite additional reviewer,start,Mike,,2006-06-24 01:00:00+02:00 +,,,,,11,Simulated process instance,invite additional reviewer,complete,Mike,,2006-06-29 01:00:00+02:00 +,,,,,11,Simulated process instance,time-out X,complete,__INVALID__,,2006-07-05 01:00:00+02:00 +,,,,,11,Simulated process instance,decide,start,Wil,,2006-07-07 01:00:00+02:00 +,,,,1,11,Simulated process instance,decide,complete,Wil,1,2006-07-07 01:00:00+02:00 +,,,,,11,Simulated process instance,invite additional reviewer,start,Mike,,2006-07-20 01:00:00+02:00 +,,,,,11,Simulated process instance,invite additional reviewer,complete,Mike,,2006-07-23 01:00:00+02:00 +,,,,,11,Simulated process instance,time-out X,complete,__INVALID__,,2006-08-01 01:00:00+02:00 +,,,,,11,Simulated process instance,decide,start,Wil,,2006-09-20 01:00:00+02:00 +,,,,1,11,Simulated process instance,decide,complete,Wil,1,2006-09-22 01:00:00+02:00 +,,,,,11,Simulated process instance,invite additional reviewer,start,Mike,,2006-10-23 01:00:00+02:00 +,,,,,11,Simulated process instance,invite additional reviewer,complete,Mike,,2006-10-23 01:00:00+02:00 +,,,,,11,Simulated process instance,time-out X,complete,__INVALID__,,2006-10-27 01:00:00+02:00 +,,,,,11,Simulated process instance,decide,start,Wil,,2007-01-25 00:00:00+01:00 +,,,,1,11,Simulated process instance,decide,complete,Wil,1,2007-01-28 00:00:00+01:00 +,,,,,11,Simulated process instance,invite additional reviewer,start,Anne,,2007-02-10 00:00:00+01:00 +,,,,,11,Simulated process instance,invite additional reviewer,complete,Anne,,2007-02-15 00:00:00+01:00 +,,,reject,,11,Simulated process instance,get review X,complete,Mary,,2007-02-20 00:00:00+01:00 +,,,,,11,Simulated process instance,decide,start,Wil,,2008-03-03 00:00:00+01:00 +,,,,1,11,Simulated process instance,decide,complete,Wil,2,2008-03-04 00:00:00+01:00 +,,,,,11,Simulated process instance,invite additional reviewer,start,Anne,,2008-03-04 00:00:00+01:00 +,,,,,11,Simulated process instance,invite additional reviewer,complete,Anne,,2008-03-04 00:00:00+01:00 +,,,,,11,Simulated process instance,time-out X,complete,__INVALID__,,2008-03-13 00:00:00+01:00 +,,,,,11,Simulated process instance,decide,start,Wil,,2008-07-29 01:00:00+02:00 +,,,,1,11,Simulated process instance,decide,complete,Wil,2,2008-08-01 01:00:00+02:00 +,,,,,11,Simulated process instance,invite additional reviewer,start,Anne,,2008-08-01 01:00:00+02:00 +,,,,,11,Simulated process instance,invite additional reviewer,complete,Anne,,2008-08-04 01:00:00+02:00 +,,,accept,,11,Simulated process instance,get review X,complete,Mary,,2008-08-05 01:00:00+02:00 +,,,,,11,Simulated process instance,decide,start,Wil,,2008-09-15 01:00:00+02:00 +,,,,2,11,Simulated process instance,decide,complete,Wil,2,2008-09-18 01:00:00+02:00 +,,,,,11,Simulated process instance,invite additional reviewer,start,Mike,,2008-09-18 01:00:00+02:00 +,,,,,11,Simulated process instance,invite additional reviewer,complete,Mike,,2008-09-23 01:00:00+02:00 +,,,reject,,11,Simulated process instance,get review X,complete,Carol,,2008-09-26 01:00:00+02:00 +,,,,,11,Simulated process instance,decide,start,Wil,,2009-02-16 00:00:00+01:00 +,,,,2,11,Simulated process instance,decide,complete,Wil,3,2009-02-16 00:00:00+01:00 +,,,,,11,Simulated process instance,reject,start,Anne,,2009-02-19 00:00:00+01:00 +,,,,,11,Simulated process instance,reject,complete,Anne,,2009-02-20 00:00:00+01:00 +,,,,,12,Simulated process instance,invite reviewers,start,Anne,,2006-02-07 00:00:00+01:00 +,,,,,12,Simulated process instance,invite reviewers,complete,Anne,,2006-02-07 00:00:00+01:00 +,accept,,,,12,Simulated process instance,get review 2,complete,John,,2006-02-11 00:00:00+01:00 +,,accept,,,12,Simulated process instance,get review 3,complete,Carol,,2006-02-12 00:00:00+01:00 +,,,,,12,Simulated process instance,time-out 1,complete,__INVALID__,,2006-02-13 00:00:00+01:00 +,,,,,12,Simulated process instance,collect reviews,start,Mike,,2006-02-14 00:00:00+01:00 +,,,,,12,Simulated process instance,collect reviews,complete,Mike,,2006-02-18 00:00:00+01:00 +,,,,,12,Simulated process instance,decide,start,Wil,,2006-02-24 00:00:00+01:00 +,,,,2,12,Simulated process instance,decide,complete,Wil,0,2006-02-26 00:00:00+01:00 +,,,,,12,Simulated process instance,invite additional reviewer,start,Mike,,2006-02-26 00:00:00+01:00 +,,,,,12,Simulated process instance,invite additional reviewer,complete,Mike,,2006-03-01 00:00:00+01:00 +,,,,,12,Simulated process instance,time-out X,complete,__INVALID__,,2006-03-07 00:00:00+01:00 +,,,,,12,Simulated process instance,decide,start,Wil,,2006-03-10 00:00:00+01:00 +,,,,2,12,Simulated process instance,decide,complete,Wil,0,2006-03-15 00:00:00+01:00 +,,,,,12,Simulated process instance,invite additional reviewer,start,Anne,,2006-03-16 00:00:00+01:00 +,,,,,12,Simulated process instance,invite additional reviewer,complete,Anne,,2006-03-19 00:00:00+01:00 +,,,,,12,Simulated process instance,time-out X,complete,__INVALID__,,2006-03-29 01:00:00+02:00 +,,,,,12,Simulated process instance,decide,start,Wil,,2006-03-31 01:00:00+02:00 +,,,,2,12,Simulated process instance,decide,complete,Wil,0,2006-04-03 01:00:00+02:00 +,,,,,12,Simulated process instance,invite additional reviewer,start,Mike,,2006-04-05 01:00:00+02:00 +,,,,,12,Simulated process instance,invite additional reviewer,complete,Mike,,2006-04-08 01:00:00+02:00 +,,,reject,,12,Simulated process instance,get review X,complete,Pete,,2006-04-12 01:00:00+02:00 +,,,,,12,Simulated process instance,decide,start,Wil,,2006-11-10 00:00:00+01:00 +,,,,2,12,Simulated process instance,decide,complete,Wil,1,2006-11-13 00:00:00+01:00 +,,,,,12,Simulated process instance,invite additional reviewer,start,Anne,,2007-01-06 00:00:00+01:00 +,,,,,12,Simulated process instance,invite additional reviewer,complete,Anne,,2007-01-09 00:00:00+01:00 +,,,reject,,12,Simulated process instance,get review X,complete,Pete,,2007-01-13 00:00:00+01:00 +,,,,,12,Simulated process instance,decide,start,Wil,,2007-11-17 00:00:00+01:00 +,,,,2,12,Simulated process instance,decide,complete,Wil,2,2007-11-21 00:00:00+01:00 +,,,,,12,Simulated process instance,invite additional reviewer,start,Mike,,2007-11-21 00:00:00+01:00 +,,,,,12,Simulated process instance,invite additional reviewer,complete,Mike,,2007-11-25 00:00:00+01:00 +,,,,,12,Simulated process instance,time-out X,complete,__INVALID__,,2007-12-01 00:00:00+01:00 +,,,,,12,Simulated process instance,decide,start,Wil,,2008-03-24 00:00:00+01:00 +,,,,2,12,Simulated process instance,decide,complete,Wil,2,2008-03-28 00:00:00+01:00 +,,,,,12,Simulated process instance,invite additional reviewer,start,Mike,,2008-03-28 00:00:00+01:00 +,,,,,12,Simulated process instance,invite additional reviewer,complete,Mike,,2008-04-01 01:00:00+02:00 +,,,reject,,12,Simulated process instance,get review X,complete,Carol,,2008-04-03 01:00:00+02:00 +,,,,,12,Simulated process instance,decide,start,Wil,,2008-04-16 01:00:00+02:00 +,,,,2,12,Simulated process instance,decide,complete,Wil,3,2008-04-19 01:00:00+02:00 +,,,,,12,Simulated process instance,reject,start,Anne,,2008-04-19 01:00:00+02:00 +,,,,,12,Simulated process instance,reject,complete,Anne,,2008-04-23 01:00:00+02:00 +,,,,,13,Simulated process instance,invite reviewers,start,Anne,,2006-02-15 00:00:00+01:00 +,,,,,13,Simulated process instance,invite reviewers,complete,Anne,,2006-02-18 00:00:00+01:00 +,reject,,,,13,Simulated process instance,get review 2,complete,Carol,,2006-02-21 00:00:00+01:00 +,,,,,13,Simulated process instance,time-out 1,complete,__INVALID__,,2006-02-22 00:00:00+01:00 +,,accept,,,13,Simulated process instance,get review 3,complete,John,,2006-02-23 00:00:00+01:00 +,,,,,13,Simulated process instance,collect reviews,start,Anne,,2006-02-24 00:00:00+01:00 +,,,,,13,Simulated process instance,collect reviews,complete,Anne,,2006-02-24 00:00:00+01:00 +,,,,,13,Simulated process instance,decide,start,Wil,,2006-03-06 00:00:00+01:00 +,,,,1,13,Simulated process instance,decide,complete,Wil,1,2006-03-10 00:00:00+01:00 +,,,,,13,Simulated process instance,invite additional reviewer,start,Anne,,2006-03-13 00:00:00+01:00 +,,,,,13,Simulated process instance,invite additional reviewer,complete,Anne,,2006-03-16 00:00:00+01:00 +,,,,,13,Simulated process instance,time-out X,complete,__INVALID__,,2006-03-26 00:00:00+01:00 +,,,,,13,Simulated process instance,decide,start,Wil,,2006-04-20 01:00:00+02:00 +,,,,1,13,Simulated process instance,decide,complete,Wil,1,2006-04-22 01:00:00+02:00 +,,,,,13,Simulated process instance,invite additional reviewer,start,Mike,,2006-04-22 01:00:00+02:00 +,,,,,13,Simulated process instance,invite additional reviewer,complete,Mike,,2006-04-23 01:00:00+02:00 +,,,,,13,Simulated process instance,time-out X,complete,__INVALID__,,2006-05-02 01:00:00+02:00 +,,,,,13,Simulated process instance,decide,start,Wil,,2006-05-05 01:00:00+02:00 +,,,,1,13,Simulated process instance,decide,complete,Wil,1,2006-05-09 01:00:00+02:00 +,,,,,13,Simulated process instance,invite additional reviewer,start,Mike,,2006-05-09 01:00:00+02:00 +,,,,,13,Simulated process instance,invite additional reviewer,complete,Mike,,2006-05-11 01:00:00+02:00 +,,,,,13,Simulated process instance,time-out X,complete,__INVALID__,,2006-05-16 01:00:00+02:00 +,,,,,13,Simulated process instance,decide,start,Wil,,2006-07-13 01:00:00+02:00 +,,,,1,13,Simulated process instance,decide,complete,Wil,1,2006-07-13 01:00:00+02:00 +,,,,,13,Simulated process instance,invite additional reviewer,start,Mike,,2007-01-20 00:00:00+01:00 +,,,,,13,Simulated process instance,invite additional reviewer,complete,Mike,,2007-01-23 00:00:00+01:00 +,,,reject,,13,Simulated process instance,get review X,complete,Carol,,2007-01-24 00:00:00+01:00 +,,,,,13,Simulated process instance,decide,start,Wil,,2007-02-13 00:00:00+01:00 +,,,,1,13,Simulated process instance,decide,complete,Wil,2,2007-02-13 00:00:00+01:00 +,,,,,13,Simulated process instance,invite additional reviewer,start,Anne,,2007-04-03 01:00:00+02:00 +,,,,,13,Simulated process instance,invite additional reviewer,complete,Anne,,2007-04-08 01:00:00+02:00 +,,,,,13,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-15 01:00:00+02:00 +,,,,,13,Simulated process instance,decide,start,Wil,,2008-02-03 00:00:00+01:00 +,,,,1,13,Simulated process instance,decide,complete,Wil,2,2008-02-04 00:00:00+01:00 +,,,,,13,Simulated process instance,invite additional reviewer,start,Mike,,2008-02-05 00:00:00+01:00 +,,,,,13,Simulated process instance,invite additional reviewer,complete,Mike,,2008-02-09 00:00:00+01:00 +,,,,,13,Simulated process instance,time-out X,complete,__INVALID__,,2008-02-13 00:00:00+01:00 +,,,,,13,Simulated process instance,decide,start,Wil,,2008-03-20 00:00:00+01:00 +,,,,1,13,Simulated process instance,decide,complete,Wil,2,2008-03-24 00:00:00+01:00 +,,,,,13,Simulated process instance,invite additional reviewer,start,Mike,,2008-03-24 00:00:00+01:00 +,,,,,13,Simulated process instance,invite additional reviewer,complete,Mike,,2008-03-24 00:00:00+01:00 +,,,reject,,13,Simulated process instance,get review X,complete,Pam,,2008-03-25 00:00:00+01:00 +,,,,,13,Simulated process instance,decide,start,Wil,,2008-05-01 01:00:00+02:00 +,,,,1,13,Simulated process instance,decide,complete,Wil,3,2008-05-05 01:00:00+02:00 +,,,,,13,Simulated process instance,invite additional reviewer,start,Anne,,2008-05-05 01:00:00+02:00 +,,,,,13,Simulated process instance,invite additional reviewer,complete,Anne,,2008-05-10 01:00:00+02:00 +,,,accept,,13,Simulated process instance,get review X,complete,Pete,,2008-05-10 01:00:00+02:00 +,,,,,13,Simulated process instance,decide,start,Wil,,2008-09-28 01:00:00+02:00 +,,,,2,13,Simulated process instance,decide,complete,Wil,3,2008-09-30 01:00:00+02:00 +,,,,,13,Simulated process instance,invite additional reviewer,start,Mike,,2008-09-30 01:00:00+02:00 +,,,,,13,Simulated process instance,invite additional reviewer,complete,Mike,,2008-10-01 01:00:00+02:00 +,,,reject,,13,Simulated process instance,get review X,complete,Carol,,2008-10-05 01:00:00+02:00 +,,,,,13,Simulated process instance,decide,start,Wil,,2008-11-25 00:00:00+01:00 +,,,,2,13,Simulated process instance,decide,complete,Wil,4,2008-11-28 00:00:00+01:00 +,,,,,13,Simulated process instance,reject,start,Mike,,2008-11-28 00:00:00+01:00 +,,,,,13,Simulated process instance,reject,complete,Mike,,2008-12-01 00:00:00+01:00 +,,,,,14,Simulated process instance,invite reviewers,start,Mike,,2006-02-23 00:00:00+01:00 +,,,,,14,Simulated process instance,invite reviewers,complete,Mike,,2006-02-25 00:00:00+01:00 +,,,,,14,Simulated process instance,time-out 2,complete,__INVALID__,,2006-02-27 00:00:00+01:00 +,,,,,14,Simulated process instance,time-out 3,complete,__INVALID__,,2006-02-28 00:00:00+01:00 +reject,,,,,14,Simulated process instance,get review 1,complete,Sam,,2006-03-01 00:00:00+01:00 +,,,,,14,Simulated process instance,collect reviews,start,Mike,,2006-03-01 00:00:00+01:00 +,,,,,14,Simulated process instance,collect reviews,complete,Mike,,2006-03-04 00:00:00+01:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2006-05-01 01:00:00+02:00 +,,,,0,14,Simulated process instance,decide,complete,Wil,2,2006-05-05 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Mike,,2006-05-13 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Mike,,2006-05-17 01:00:00+02:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2006-05-20 01:00:00+02:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2006-05-25 01:00:00+02:00 +,,,,0,14,Simulated process instance,decide,complete,Wil,2,2006-05-25 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Anne,,2006-05-30 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Anne,,2006-06-01 01:00:00+02:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2006-06-06 01:00:00+02:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2006-07-13 01:00:00+02:00 +,,,,0,14,Simulated process instance,decide,complete,Wil,2,2006-07-18 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Mike,,2006-09-01 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Mike,,2006-09-01 01:00:00+02:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2006-09-08 01:00:00+02:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2006-09-25 01:00:00+02:00 +,,,,0,14,Simulated process instance,decide,complete,Wil,2,2006-09-29 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Mike,,2006-11-25 00:00:00+01:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Mike,,2006-11-27 00:00:00+01:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2006-12-06 00:00:00+01:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2007-03-31 01:00:00+02:00 +,,,,0,14,Simulated process instance,decide,complete,Wil,2,2007-04-04 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Anne,,2007-04-17 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Anne,,2007-04-20 01:00:00+02:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-26 01:00:00+02:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2008-04-19 01:00:00+02:00 +,,,,0,14,Simulated process instance,decide,complete,Wil,2,2008-04-23 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Mike,,2008-04-23 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Mike,,2008-04-26 01:00:00+02:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2008-05-03 01:00:00+02:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2008-07-17 01:00:00+02:00 +,,,,0,14,Simulated process instance,decide,complete,Wil,2,2008-07-18 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Anne,,2008-07-18 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Anne,,2008-07-18 01:00:00+02:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2008-07-20 01:00:00+02:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2008-10-01 01:00:00+02:00 +,,,,0,14,Simulated process instance,decide,complete,Wil,2,2008-10-05 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Anne,,2008-10-05 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Anne,,2008-10-10 01:00:00+02:00 +,,,accept,,14,Simulated process instance,get review X,complete,Pete,,2008-10-10 01:00:00+02:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2008-12-17 00:00:00+01:00 +,,,,1,14,Simulated process instance,decide,complete,Wil,2,2008-12-21 00:00:00+01:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Anne,,2008-12-21 00:00:00+01:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Anne,,2008-12-23 00:00:00+01:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2008-12-24 00:00:00+01:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2009-05-16 01:00:00+02:00 +,,,,1,14,Simulated process instance,decide,complete,Wil,2,2009-05-20 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Anne,,2009-05-20 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Anne,,2009-05-22 01:00:00+02:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2009-05-26 01:00:00+02:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2009-08-21 01:00:00+02:00 +,,,,1,14,Simulated process instance,decide,complete,Wil,2,2009-08-22 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Anne,,2009-08-23 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Anne,,2009-08-28 01:00:00+02:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2009-09-01 01:00:00+02:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2009-10-01 01:00:00+02:00 +,,,,1,14,Simulated process instance,decide,complete,Wil,2,2009-10-01 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Mike,,2009-10-01 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Mike,,2009-10-04 01:00:00+02:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2009-10-04 01:00:00+02:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2009-10-21 01:00:00+02:00 +,,,,1,14,Simulated process instance,decide,complete,Wil,2,2009-10-24 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Anne,,2009-10-24 01:00:00+02:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Anne,,2009-10-29 00:00:00+01:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2009-11-02 00:00:00+01:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2009-11-18 00:00:00+01:00 +,,,,1,14,Simulated process instance,decide,complete,Wil,2,2009-11-18 00:00:00+01:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Anne,,2009-11-18 00:00:00+01:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Anne,,2009-11-21 00:00:00+01:00 +,,,,,14,Simulated process instance,time-out X,complete,__INVALID__,,2009-11-29 00:00:00+01:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2009-12-12 00:00:00+01:00 +,,,,1,14,Simulated process instance,decide,complete,Wil,2,2009-12-14 00:00:00+01:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Anne,,2009-12-14 00:00:00+01:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Anne,,2009-12-16 00:00:00+01:00 +,,,accept,,14,Simulated process instance,get review X,complete,Pete,,2009-12-16 00:00:00+01:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2009-12-16 00:00:00+01:00 +,,,,2,14,Simulated process instance,decide,complete,Wil,2,2009-12-18 00:00:00+01:00 +,,,,,14,Simulated process instance,invite additional reviewer,start,Mike,,2009-12-18 00:00:00+01:00 +,,,,,14,Simulated process instance,invite additional reviewer,complete,Mike,,2009-12-18 00:00:00+01:00 +,,,reject,,14,Simulated process instance,get review X,complete,Pam,,2009-12-18 00:00:00+01:00 +,,,,,14,Simulated process instance,decide,start,Wil,,2010-01-03 00:00:00+01:00 +,,,,2,14,Simulated process instance,decide,complete,Wil,3,2010-01-03 00:00:00+01:00 +,,,,,14,Simulated process instance,reject,start,Mike,,2010-01-04 00:00:00+01:00 +,,,,,14,Simulated process instance,reject,complete,Mike,,2010-01-06 00:00:00+01:00 +,,,,,15,Simulated process instance,invite reviewers,start,Anne,,2006-03-01 00:00:00+01:00 +,,,,,15,Simulated process instance,invite reviewers,complete,Anne,,2006-03-01 00:00:00+01:00 +,,accept,,,15,Simulated process instance,get review 3,complete,John,,2006-03-01 00:00:00+01:00 +,,,,,15,Simulated process instance,time-out 1,complete,__INVALID__,,2006-03-03 00:00:00+01:00 +,,,,,15,Simulated process instance,time-out 2,complete,__INVALID__,,2006-03-08 00:00:00+01:00 +,,,,,15,Simulated process instance,collect reviews,start,Mike,,2006-03-18 00:00:00+01:00 +,,,,,15,Simulated process instance,collect reviews,complete,Mike,,2006-03-18 00:00:00+01:00 +,,,,,15,Simulated process instance,decide,start,Wil,,2006-06-05 01:00:00+02:00 +,,,,2,15,Simulated process instance,decide,complete,Wil,0,2006-06-06 01:00:00+02:00 +,,,,,15,Simulated process instance,invite additional reviewer,start,Anne,,2006-08-29 01:00:00+02:00 +,,,,,15,Simulated process instance,invite additional reviewer,complete,Anne,,2006-09-02 01:00:00+02:00 +,,,reject,,15,Simulated process instance,get review X,complete,Sam,,2006-09-04 01:00:00+02:00 +,,,,,15,Simulated process instance,decide,start,Wil,,2006-10-06 01:00:00+02:00 +,,,,2,15,Simulated process instance,decide,complete,Wil,1,2006-10-11 01:00:00+02:00 +,,,,,15,Simulated process instance,invite additional reviewer,start,Anne,,2007-01-03 00:00:00+01:00 +,,,,,15,Simulated process instance,invite additional reviewer,complete,Anne,,2007-01-03 00:00:00+01:00 +,,,reject,,15,Simulated process instance,get review X,complete,Pete,,2007-01-06 00:00:00+01:00 +,,,,,15,Simulated process instance,decide,start,Wil,,2007-03-27 01:00:00+02:00 +,,,,2,15,Simulated process instance,decide,complete,Wil,2,2007-03-31 01:00:00+02:00 +,,,,,15,Simulated process instance,invite additional reviewer,start,Mike,,2007-04-05 01:00:00+02:00 +,,,,,15,Simulated process instance,invite additional reviewer,complete,Mike,,2007-04-06 01:00:00+02:00 +,,,,,15,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-16 01:00:00+02:00 +,,,,,15,Simulated process instance,decide,start,Wil,,2007-06-25 01:00:00+02:00 +,,,,2,15,Simulated process instance,decide,complete,Wil,2,2007-06-29 01:00:00+02:00 +,,,,,15,Simulated process instance,invite additional reviewer,start,Anne,,2007-06-29 01:00:00+02:00 +,,,,,15,Simulated process instance,invite additional reviewer,complete,Anne,,2007-07-01 01:00:00+02:00 +,,,accept,,15,Simulated process instance,get review X,complete,Mary,,2007-07-02 01:00:00+02:00 +,,,,,15,Simulated process instance,decide,start,Wil,,2008-03-04 00:00:00+01:00 +,,,,3,15,Simulated process instance,decide,complete,Wil,2,2008-03-08 00:00:00+01:00 +,,,,,15,Simulated process instance,accept,start,Mike,,2008-03-08 00:00:00+01:00 +,,,,,15,Simulated process instance,accept,complete,Mike,,2008-03-10 00:00:00+01:00 +,,,,,16,Simulated process instance,invite reviewers,start,Anne,,2006-03-01 00:00:00+01:00 +,,,,,16,Simulated process instance,invite reviewers,complete,Anne,,2006-03-03 00:00:00+01:00 +,,,,,16,Simulated process instance,time-out 1,complete,__INVALID__,,2006-03-04 00:00:00+01:00 +,reject,,,,16,Simulated process instance,get review 2,complete,Pam,,2006-03-06 00:00:00+01:00 +,,,,,16,Simulated process instance,time-out 3,complete,__INVALID__,,2006-03-07 00:00:00+01:00 +,,,,,16,Simulated process instance,collect reviews,start,Anne,,2006-03-08 00:00:00+01:00 +,,,,,16,Simulated process instance,collect reviews,complete,Anne,,2006-03-08 00:00:00+01:00 +,,,,,16,Simulated process instance,decide,start,Wil,,2006-03-15 00:00:00+01:00 +,,,,0,16,Simulated process instance,decide,complete,Wil,1,2006-03-18 00:00:00+01:00 +,,,,,16,Simulated process instance,invite additional reviewer,start,Mike,,2006-03-18 00:00:00+01:00 +,,,,,16,Simulated process instance,invite additional reviewer,complete,Mike,,2006-03-19 00:00:00+01:00 +,,,accept,,16,Simulated process instance,get review X,complete,Pete,,2006-03-22 00:00:00+01:00 +,,,,,16,Simulated process instance,decide,start,Wil,,2006-03-22 00:00:00+01:00 +,,,,1,16,Simulated process instance,decide,complete,Wil,1,2006-03-23 00:00:00+01:00 +,,,,,16,Simulated process instance,invite additional reviewer,start,Mike,,2006-03-29 01:00:00+02:00 +,,,,,16,Simulated process instance,invite additional reviewer,complete,Mike,,2006-03-30 01:00:00+02:00 +,,,accept,,16,Simulated process instance,get review X,complete,Pam,,2006-04-02 01:00:00+02:00 +,,,,,16,Simulated process instance,decide,start,Wil,,2006-07-30 01:00:00+02:00 +,,,,2,16,Simulated process instance,decide,complete,Wil,1,2006-07-30 01:00:00+02:00 +,,,,,16,Simulated process instance,invite additional reviewer,start,Anne,,2006-07-31 01:00:00+02:00 +,,,,,16,Simulated process instance,invite additional reviewer,complete,Anne,,2006-08-03 01:00:00+02:00 +,,,,,16,Simulated process instance,time-out X,complete,__INVALID__,,2006-08-10 01:00:00+02:00 +,,,,,16,Simulated process instance,decide,start,Wil,,2006-09-04 01:00:00+02:00 +,,,,2,16,Simulated process instance,decide,complete,Wil,1,2006-09-08 01:00:00+02:00 +,,,,,16,Simulated process instance,invite additional reviewer,start,Anne,,2006-09-09 01:00:00+02:00 +,,,,,16,Simulated process instance,invite additional reviewer,complete,Anne,,2006-09-10 01:00:00+02:00 +,,,reject,,16,Simulated process instance,get review X,complete,Pete,,2006-09-14 01:00:00+02:00 +,,,,,16,Simulated process instance,decide,start,Wil,,2006-11-30 00:00:00+01:00 +,,,,2,16,Simulated process instance,decide,complete,Wil,2,2006-12-04 00:00:00+01:00 +,,,,,16,Simulated process instance,invite additional reviewer,start,Mike,,2007-01-18 00:00:00+01:00 +,,,,,16,Simulated process instance,invite additional reviewer,complete,Mike,,2007-01-20 00:00:00+01:00 +,,,accept,,16,Simulated process instance,get review X,complete,Sam,,2007-01-23 00:00:00+01:00 +,,,,,16,Simulated process instance,decide,start,Wil,,2007-04-13 01:00:00+02:00 +,,,,3,16,Simulated process instance,decide,complete,Wil,2,2007-04-14 01:00:00+02:00 +,,,,,16,Simulated process instance,accept,start,Mike,,2007-04-15 01:00:00+02:00 +,,,,,16,Simulated process instance,accept,complete,Mike,,2007-04-20 01:00:00+02:00 +,,,,,17,Simulated process instance,invite reviewers,start,Anne,,2006-03-03 00:00:00+01:00 +,,,,,17,Simulated process instance,invite reviewers,complete,Anne,,2006-03-03 00:00:00+01:00 +,,reject,,,17,Simulated process instance,get review 3,complete,Carol,,2006-03-06 00:00:00+01:00 +,,,,,17,Simulated process instance,time-out 2,complete,__INVALID__,,2006-03-10 00:00:00+01:00 +,,,,,17,Simulated process instance,time-out 1,complete,__INVALID__,,2006-03-11 00:00:00+01:00 +,,,,,17,Simulated process instance,collect reviews,start,Mike,,2006-03-16 00:00:00+01:00 +,,,,,17,Simulated process instance,collect reviews,complete,Mike,,2006-03-17 00:00:00+01:00 +,,,,,17,Simulated process instance,decide,start,Wil,,2006-03-23 00:00:00+01:00 +,,,,0,17,Simulated process instance,decide,complete,Wil,2,2006-03-26 00:00:00+01:00 +,,,,,17,Simulated process instance,invite additional reviewer,start,Mike,,2006-03-26 00:00:00+01:00 +,,,,,17,Simulated process instance,invite additional reviewer,complete,Mike,,2006-03-27 01:00:00+02:00 +,,,,,17,Simulated process instance,time-out X,complete,__INVALID__,,2006-04-03 01:00:00+02:00 +,,,,,17,Simulated process instance,decide,start,Wil,,2006-09-03 01:00:00+02:00 +,,,,0,17,Simulated process instance,decide,complete,Wil,2,2006-09-04 01:00:00+02:00 +,,,,,17,Simulated process instance,invite additional reviewer,start,Mike,,2006-09-07 01:00:00+02:00 +,,,,,17,Simulated process instance,invite additional reviewer,complete,Mike,,2006-09-11 01:00:00+02:00 +,,,accept,,17,Simulated process instance,get review X,complete,Carol,,2006-09-12 01:00:00+02:00 +,,,,,17,Simulated process instance,decide,start,Wil,,2006-09-17 01:00:00+02:00 +,,,,1,17,Simulated process instance,decide,complete,Wil,2,2006-09-19 01:00:00+02:00 +,,,,,17,Simulated process instance,invite additional reviewer,start,Anne,,2006-09-29 01:00:00+02:00 +,,,,,17,Simulated process instance,invite additional reviewer,complete,Anne,,2006-10-03 01:00:00+02:00 +,,,accept,,17,Simulated process instance,get review X,complete,Sam,,2006-10-03 01:00:00+02:00 +,,,,,17,Simulated process instance,decide,start,Wil,,2007-05-21 01:00:00+02:00 +,,,,2,17,Simulated process instance,decide,complete,Wil,2,2007-05-25 01:00:00+02:00 +,,,,,17,Simulated process instance,invite additional reviewer,start,Anne,,2007-05-25 01:00:00+02:00 +,,,,,17,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-27 01:00:00+02:00 +,,,accept,,17,Simulated process instance,get review X,complete,Sam,,2007-05-29 01:00:00+02:00 +,,,,,17,Simulated process instance,decide,start,Wil,,2008-07-14 01:00:00+02:00 +,,,,3,17,Simulated process instance,decide,complete,Wil,2,2008-07-17 01:00:00+02:00 +,,,,,17,Simulated process instance,accept,start,Mike,,2008-07-17 01:00:00+02:00 +,,,,,17,Simulated process instance,accept,complete,Mike,,2008-07-19 01:00:00+02:00 +,,,,,18,Simulated process instance,invite reviewers,start,Anne,,2006-03-03 00:00:00+01:00 +,,,,,18,Simulated process instance,invite reviewers,complete,Anne,,2006-03-08 00:00:00+01:00 +,,,,,18,Simulated process instance,time-out 1,complete,__INVALID__,,2006-03-09 00:00:00+01:00 +,reject,,,,18,Simulated process instance,get review 2,complete,John,,2006-03-09 00:00:00+01:00 +,,accept,,,18,Simulated process instance,get review 3,complete,Sara,,2006-03-13 00:00:00+01:00 +,,,,,18,Simulated process instance,collect reviews,start,Anne,,2006-03-19 00:00:00+01:00 +,,,,,18,Simulated process instance,collect reviews,complete,Anne,,2006-03-24 00:00:00+01:00 +,,,,,18,Simulated process instance,decide,start,Wil,,2006-03-26 00:00:00+01:00 +,,,,1,18,Simulated process instance,decide,complete,Wil,1,2006-03-31 01:00:00+02:00 +,,,,,18,Simulated process instance,invite additional reviewer,start,Anne,,2006-04-01 01:00:00+02:00 +,,,,,18,Simulated process instance,invite additional reviewer,complete,Anne,,2006-04-04 01:00:00+02:00 +,,,,,18,Simulated process instance,time-out X,complete,__INVALID__,,2006-04-06 01:00:00+02:00 +,,,,,18,Simulated process instance,decide,start,Wil,,2006-04-15 01:00:00+02:00 +,,,,1,18,Simulated process instance,decide,complete,Wil,1,2006-04-20 01:00:00+02:00 +,,,,,18,Simulated process instance,invite additional reviewer,start,Anne,,2006-04-20 01:00:00+02:00 +,,,,,18,Simulated process instance,invite additional reviewer,complete,Anne,,2006-04-20 01:00:00+02:00 +,,,reject,,18,Simulated process instance,get review X,complete,Pam,,2006-04-22 01:00:00+02:00 +,,,,,18,Simulated process instance,decide,start,Wil,,2006-07-06 01:00:00+02:00 +,,,,1,18,Simulated process instance,decide,complete,Wil,2,2006-07-07 01:00:00+02:00 +,,,,,18,Simulated process instance,invite additional reviewer,start,Mike,,2007-03-27 01:00:00+02:00 +,,,,,18,Simulated process instance,invite additional reviewer,complete,Mike,,2007-04-01 01:00:00+02:00 +,,,,,18,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-08 01:00:00+02:00 +,,,,,18,Simulated process instance,decide,start,Wil,,2007-10-26 01:00:00+02:00 +,,,,1,18,Simulated process instance,decide,complete,Wil,2,2007-10-30 00:00:00+01:00 +,,,,,18,Simulated process instance,invite additional reviewer,start,Anne,,2007-10-30 00:00:00+01:00 +,,,,,18,Simulated process instance,invite additional reviewer,complete,Anne,,2007-11-04 00:00:00+01:00 +,,,accept,,18,Simulated process instance,get review X,complete,Pam,,2007-11-07 00:00:00+01:00 +,,,,,18,Simulated process instance,decide,start,Wil,,2008-01-09 00:00:00+01:00 +,,,,2,18,Simulated process instance,decide,complete,Wil,2,2008-01-12 00:00:00+01:00 +,,,,,18,Simulated process instance,invite additional reviewer,start,Mike,,2008-01-12 00:00:00+01:00 +,,,,,18,Simulated process instance,invite additional reviewer,complete,Mike,,2008-01-16 00:00:00+01:00 +,,,reject,,18,Simulated process instance,get review X,complete,Sara,,2008-01-21 00:00:00+01:00 +,,,,,18,Simulated process instance,decide,start,Wil,,2008-02-16 00:00:00+01:00 +,,,,2,18,Simulated process instance,decide,complete,Wil,3,2008-02-16 00:00:00+01:00 +,,,,,18,Simulated process instance,invite additional reviewer,start,Mike,,2008-02-16 00:00:00+01:00 +,,,,,18,Simulated process instance,invite additional reviewer,complete,Mike,,2008-02-21 00:00:00+01:00 +,,,accept,,18,Simulated process instance,get review X,complete,Mary,,2008-02-23 00:00:00+01:00 +,,,,,18,Simulated process instance,decide,start,Wil,,2008-05-05 01:00:00+02:00 +,,,,3,18,Simulated process instance,decide,complete,Wil,3,2008-05-07 01:00:00+02:00 +,,,,,18,Simulated process instance,reject,start,Mike,,2008-05-09 01:00:00+02:00 +,,,,,18,Simulated process instance,reject,complete,Mike,,2008-05-11 01:00:00+02:00 +,,,,,19,Simulated process instance,invite reviewers,start,Mike,,2006-03-10 00:00:00+01:00 +,,,,,19,Simulated process instance,invite reviewers,complete,Mike,,2006-03-12 00:00:00+01:00 +,,,,,19,Simulated process instance,time-out 2,complete,__INVALID__,,2006-03-15 00:00:00+01:00 +accept,,,,,19,Simulated process instance,get review 1,complete,John,,2006-03-17 00:00:00+01:00 +,,,,,19,Simulated process instance,time-out 3,complete,__INVALID__,,2006-03-21 00:00:00+01:00 +,,,,,19,Simulated process instance,collect reviews,start,Anne,,2006-03-24 00:00:00+01:00 +,,,,,19,Simulated process instance,collect reviews,complete,Anne,,2006-03-26 00:00:00+01:00 +,,,,,19,Simulated process instance,decide,start,Wil,,2006-07-23 01:00:00+02:00 +,,,,2,19,Simulated process instance,decide,complete,Wil,0,2006-07-27 01:00:00+02:00 +,,,,,19,Simulated process instance,invite additional reviewer,start,Mike,,2006-09-30 01:00:00+02:00 +,,,,,19,Simulated process instance,invite additional reviewer,complete,Mike,,2006-10-04 01:00:00+02:00 +,,,,,19,Simulated process instance,time-out X,complete,__INVALID__,,2006-10-09 01:00:00+02:00 +,,,,,19,Simulated process instance,decide,start,Wil,,2006-10-17 01:00:00+02:00 +,,,,2,19,Simulated process instance,decide,complete,Wil,0,2006-10-18 01:00:00+02:00 +,,,,,19,Simulated process instance,invite additional reviewer,start,Anne,,2007-03-01 00:00:00+01:00 +,,,,,19,Simulated process instance,invite additional reviewer,complete,Anne,,2007-03-03 00:00:00+01:00 +,,,,,19,Simulated process instance,time-out X,complete,__INVALID__,,2007-03-05 00:00:00+01:00 +,,,,,19,Simulated process instance,decide,start,Wil,,2007-03-10 00:00:00+01:00 +,,,,2,19,Simulated process instance,decide,complete,Wil,0,2007-03-11 00:00:00+01:00 +,,,,,19,Simulated process instance,invite additional reviewer,start,Anne,,2007-03-19 00:00:00+01:00 +,,,,,19,Simulated process instance,invite additional reviewer,complete,Anne,,2007-03-21 00:00:00+01:00 +,,,,,19,Simulated process instance,time-out X,complete,__INVALID__,,2007-03-31 01:00:00+02:00 +,,,,,19,Simulated process instance,decide,start,Wil,,2009-02-06 00:00:00+01:00 +,,,,2,19,Simulated process instance,decide,complete,Wil,0,2009-02-11 00:00:00+01:00 +,,,,,19,Simulated process instance,invite additional reviewer,start,Mike,,2009-02-11 00:00:00+01:00 +,,,,,19,Simulated process instance,invite additional reviewer,complete,Mike,,2009-02-16 00:00:00+01:00 +,,,,,19,Simulated process instance,time-out X,complete,__INVALID__,,2009-02-24 00:00:00+01:00 +,,,,,19,Simulated process instance,decide,start,Wil,,2009-07-28 01:00:00+02:00 +,,,,2,19,Simulated process instance,decide,complete,Wil,0,2009-08-02 01:00:00+02:00 +,,,,,19,Simulated process instance,invite additional reviewer,start,Anne,,2009-08-02 01:00:00+02:00 +,,,,,19,Simulated process instance,invite additional reviewer,complete,Anne,,2009-08-04 01:00:00+02:00 +,,,accept,,19,Simulated process instance,get review X,complete,Pam,,2009-08-04 01:00:00+02:00 +,,,,,19,Simulated process instance,decide,start,Wil,,2010-02-01 00:00:00+01:00 +,,,,3,19,Simulated process instance,decide,complete,Wil,0,2010-02-03 00:00:00+01:00 +,,,,,19,Simulated process instance,invite additional reviewer,start,Anne,,2010-02-03 00:00:00+01:00 +,,,,,19,Simulated process instance,invite additional reviewer,complete,Anne,,2010-02-08 00:00:00+01:00 +,,,accept,,19,Simulated process instance,get review X,complete,Sara,,2010-02-09 00:00:00+01:00 +,,,,,19,Simulated process instance,decide,start,Wil,,2010-03-08 00:00:00+01:00 +,,,,4,19,Simulated process instance,decide,complete,Wil,0,2010-03-13 00:00:00+01:00 +,,,,,19,Simulated process instance,invite additional reviewer,start,Anne,,2010-03-13 00:00:00+01:00 +,,,,,19,Simulated process instance,invite additional reviewer,complete,Anne,,2010-03-18 00:00:00+01:00 +,,,reject,,19,Simulated process instance,get review X,complete,Pete,,2010-03-21 00:00:00+01:00 +,,,,,19,Simulated process instance,decide,start,Wil,,2010-04-04 01:00:00+02:00 +,,,,4,19,Simulated process instance,decide,complete,Wil,1,2010-04-06 01:00:00+02:00 +,,,,,19,Simulated process instance,accept,start,Mike,,2010-04-06 01:00:00+02:00 +,,,,,19,Simulated process instance,accept,complete,Mike,,2010-04-10 01:00:00+02:00 +,,,,,2,Simulated process instance,invite reviewers,start,Anne,,2006-01-02 00:00:00+01:00 +,,,,,2,Simulated process instance,invite reviewers,complete,Anne,,2006-01-04 00:00:00+01:00 +,accept,,,,2,Simulated process instance,get review 2,complete,Sam,,2006-01-06 00:00:00+01:00 +,,reject,,,2,Simulated process instance,get review 3,complete,Pete,,2006-01-08 00:00:00+01:00 +accept,,,,,2,Simulated process instance,get review 1,complete,Mary,,2006-01-09 00:00:00+01:00 +,,,,,2,Simulated process instance,collect reviews,start,Mike,,2006-01-09 00:00:00+01:00 +,,,,,2,Simulated process instance,collect reviews,complete,Mike,,2006-01-10 00:00:00+01:00 +,,,,,2,Simulated process instance,decide,start,Wil,,2006-01-10 00:00:00+01:00 +,,,,2,2,Simulated process instance,decide,complete,Wil,1,2006-01-11 00:00:00+01:00 +,,,,,2,Simulated process instance,invite additional reviewer,start,Anne,,2006-01-11 00:00:00+01:00 +,,,,,2,Simulated process instance,invite additional reviewer,complete,Anne,,2006-01-11 00:00:00+01:00 +,,,reject,,2,Simulated process instance,get review X,complete,Pam,,2006-01-15 00:00:00+01:00 +,,,,,2,Simulated process instance,decide,start,Wil,,2006-01-18 00:00:00+01:00 +,,,,2,2,Simulated process instance,decide,complete,Wil,2,2006-01-19 00:00:00+01:00 +,,,,,2,Simulated process instance,invite additional reviewer,start,Anne,,2006-01-20 00:00:00+01:00 +,,,,,2,Simulated process instance,invite additional reviewer,complete,Anne,,2006-01-24 00:00:00+01:00 +,,,accept,,2,Simulated process instance,get review X,complete,Mary,,2006-01-28 00:00:00+01:00 +,,,,,2,Simulated process instance,decide,start,Wil,,2006-01-30 00:00:00+01:00 +,,,,3,2,Simulated process instance,decide,complete,Wil,2,2006-02-03 00:00:00+01:00 +,,,,,2,Simulated process instance,invite additional reviewer,start,Anne,,2006-02-03 00:00:00+01:00 +,,,,,2,Simulated process instance,invite additional reviewer,complete,Anne,,2006-02-03 00:00:00+01:00 +,,,,,2,Simulated process instance,time-out X,complete,__INVALID__,,2006-02-13 00:00:00+01:00 +,,,,,2,Simulated process instance,decide,start,Wil,,2006-02-19 00:00:00+01:00 +,,,,3,2,Simulated process instance,decide,complete,Wil,2,2006-02-19 00:00:00+01:00 +,,,,,2,Simulated process instance,invite additional reviewer,start,Anne,,2006-02-21 00:00:00+01:00 +,,,,,2,Simulated process instance,invite additional reviewer,complete,Anne,,2006-02-24 00:00:00+01:00 +,,,reject,,2,Simulated process instance,get review X,complete,Pete,,2006-02-26 00:00:00+01:00 +,,,,,2,Simulated process instance,decide,start,Wil,,2006-02-26 00:00:00+01:00 +,,,,3,2,Simulated process instance,decide,complete,Wil,3,2006-03-01 00:00:00+01:00 +,,,,,2,Simulated process instance,accept,start,Mike,,2006-03-01 00:00:00+01:00 +,,,,,2,Simulated process instance,accept,complete,Mike,,2006-03-01 00:00:00+01:00 +,,,,,20,Simulated process instance,invite reviewers,start,Mike,,2006-03-12 00:00:00+01:00 +,,,,,20,Simulated process instance,invite reviewers,complete,Mike,,2006-03-16 00:00:00+01:00 +accept,,,,,20,Simulated process instance,get review 1,complete,Pam,,2006-03-16 00:00:00+01:00 +,,,,,20,Simulated process instance,time-out 3,complete,__INVALID__,,2006-03-18 00:00:00+01:00 +,,,,,20,Simulated process instance,time-out 2,complete,__INVALID__,,2006-03-19 00:00:00+01:00 +,,,,,20,Simulated process instance,collect reviews,start,Mike,,2006-03-30 01:00:00+02:00 +,,,,,20,Simulated process instance,collect reviews,complete,Mike,,2006-03-31 01:00:00+02:00 +,,,,,20,Simulated process instance,decide,start,Wil,,2006-04-11 01:00:00+02:00 +,,,,1,20,Simulated process instance,decide,complete,Wil,1,2006-04-15 01:00:00+02:00 +,,,,,20,Simulated process instance,invite additional reviewer,start,Mike,,2006-04-18 01:00:00+02:00 +,,,,,20,Simulated process instance,invite additional reviewer,complete,Mike,,2006-04-19 01:00:00+02:00 +,,,reject,,20,Simulated process instance,get review X,complete,Sara,,2006-04-24 01:00:00+02:00 +,,,,,20,Simulated process instance,decide,start,Wil,,2006-07-01 01:00:00+02:00 +,,,,1,20,Simulated process instance,decide,complete,Wil,2,2006-07-01 01:00:00+02:00 +,,,,,20,Simulated process instance,invite additional reviewer,start,Anne,,2006-07-06 01:00:00+02:00 +,,,,,20,Simulated process instance,invite additional reviewer,complete,Anne,,2006-07-10 01:00:00+02:00 +,,,reject,,20,Simulated process instance,get review X,complete,Sam,,2006-07-14 01:00:00+02:00 +,,,,,20,Simulated process instance,decide,start,Wil,,2006-07-18 01:00:00+02:00 +,,,,1,20,Simulated process instance,decide,complete,Wil,3,2006-07-18 01:00:00+02:00 +,,,,,20,Simulated process instance,reject,start,Mike,,2006-07-23 01:00:00+02:00 +,,,,,20,Simulated process instance,reject,complete,Mike,,2006-07-27 01:00:00+02:00 +,,,,,21,Simulated process instance,invite reviewers,start,Mike,,2006-03-17 00:00:00+01:00 +,,,,,21,Simulated process instance,invite reviewers,complete,Mike,,2006-03-18 00:00:00+01:00 +,,,,,21,Simulated process instance,time-out 3,complete,__INVALID__,,2006-03-18 00:00:00+01:00 +,,,,,21,Simulated process instance,time-out 2,complete,__INVALID__,,2006-03-23 00:00:00+01:00 +,,,,,21,Simulated process instance,time-out 1,complete,__INVALID__,,2006-03-27 01:00:00+02:00 +,,,,,21,Simulated process instance,collect reviews,start,Mike,,2006-03-31 01:00:00+02:00 +,,,,,21,Simulated process instance,collect reviews,complete,Mike,,2006-04-04 01:00:00+02:00 +,,,,,21,Simulated process instance,decide,start,Wil,,2006-10-11 01:00:00+02:00 +,,,,1,21,Simulated process instance,decide,complete,Wil,0,2006-10-14 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,start,Mike,,2006-11-19 00:00:00+01:00 +,,,,,21,Simulated process instance,invite additional reviewer,complete,Mike,,2006-11-22 00:00:00+01:00 +,,,reject,,21,Simulated process instance,get review X,complete,Mary,,2006-11-23 00:00:00+01:00 +,,,,,21,Simulated process instance,decide,start,Wil,,2007-03-02 00:00:00+01:00 +,,,,1,21,Simulated process instance,decide,complete,Wil,1,2007-03-06 00:00:00+01:00 +,,,,,21,Simulated process instance,invite additional reviewer,start,Mike,,2007-03-14 00:00:00+01:00 +,,,,,21,Simulated process instance,invite additional reviewer,complete,Mike,,2007-03-16 00:00:00+01:00 +,,,,,21,Simulated process instance,time-out X,complete,__INVALID__,,2007-03-22 00:00:00+01:00 +,,,,,21,Simulated process instance,decide,start,Wil,,2007-07-10 01:00:00+02:00 +,,,,1,21,Simulated process instance,decide,complete,Wil,1,2007-07-12 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,start,Anne,,2007-07-12 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,complete,Anne,,2007-07-12 01:00:00+02:00 +,,,,,21,Simulated process instance,time-out X,complete,__INVALID__,,2007-07-15 01:00:00+02:00 +,,,,,21,Simulated process instance,decide,start,Wil,,2007-09-12 01:00:00+02:00 +,,,,1,21,Simulated process instance,decide,complete,Wil,1,2007-09-15 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,start,Anne,,2007-09-15 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,complete,Anne,,2007-09-20 01:00:00+02:00 +,,,,,21,Simulated process instance,time-out X,complete,__INVALID__,,2007-09-25 01:00:00+02:00 +,,,,,21,Simulated process instance,decide,start,Wil,,2008-01-03 00:00:00+01:00 +,,,,1,21,Simulated process instance,decide,complete,Wil,1,2008-01-08 00:00:00+01:00 +,,,,,21,Simulated process instance,invite additional reviewer,start,Mike,,2008-01-08 00:00:00+01:00 +,,,,,21,Simulated process instance,invite additional reviewer,complete,Mike,,2008-01-09 00:00:00+01:00 +,,,,,21,Simulated process instance,time-out X,complete,__INVALID__,,2008-01-12 00:00:00+01:00 +,,,,,21,Simulated process instance,decide,start,Wil,,2008-02-07 00:00:00+01:00 +,,,,1,21,Simulated process instance,decide,complete,Wil,1,2008-02-10 00:00:00+01:00 +,,,,,21,Simulated process instance,invite additional reviewer,start,Mike,,2008-02-10 00:00:00+01:00 +,,,,,21,Simulated process instance,invite additional reviewer,complete,Mike,,2008-02-13 00:00:00+01:00 +,,,reject,,21,Simulated process instance,get review X,complete,Sam,,2008-02-16 00:00:00+01:00 +,,,,,21,Simulated process instance,decide,start,Wil,,2008-04-25 01:00:00+02:00 +,,,,1,21,Simulated process instance,decide,complete,Wil,2,2008-04-26 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,start,Anne,,2008-04-26 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,complete,Anne,,2008-04-29 01:00:00+02:00 +,,,reject,,21,Simulated process instance,get review X,complete,Mary,,2008-05-02 01:00:00+02:00 +,,,,,21,Simulated process instance,decide,start,Wil,,2008-06-03 01:00:00+02:00 +,,,,1,21,Simulated process instance,decide,complete,Wil,3,2008-06-06 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,start,Anne,,2008-06-06 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,complete,Anne,,2008-06-09 01:00:00+02:00 +,,,,,21,Simulated process instance,time-out X,complete,__INVALID__,,2008-06-09 01:00:00+02:00 +,,,,,21,Simulated process instance,decide,start,Wil,,2008-06-25 01:00:00+02:00 +,,,,1,21,Simulated process instance,decide,complete,Wil,3,2008-06-26 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,start,Anne,,2008-06-26 01:00:00+02:00 +,,,,,21,Simulated process instance,invite additional reviewer,complete,Anne,,2008-06-30 01:00:00+02:00 +,,,reject,,21,Simulated process instance,get review X,complete,John,,2008-06-30 01:00:00+02:00 +,,,,,21,Simulated process instance,decide,start,Wil,,2008-09-03 01:00:00+02:00 +,,,,1,21,Simulated process instance,decide,complete,Wil,4,2008-09-07 01:00:00+02:00 +,,,,,21,Simulated process instance,reject,start,Anne,,2008-09-07 01:00:00+02:00 +,,,,,21,Simulated process instance,reject,complete,Anne,,2008-09-08 01:00:00+02:00 +,,,,,22,Simulated process instance,invite reviewers,start,Mike,,2006-03-19 00:00:00+01:00 +,,,,,22,Simulated process instance,invite reviewers,complete,Mike,,2006-03-23 00:00:00+01:00 +,,,,,22,Simulated process instance,time-out 3,complete,__INVALID__,,2006-03-23 00:00:00+01:00 +,reject,,,,22,Simulated process instance,get review 2,complete,Pam,,2006-03-25 00:00:00+01:00 +,,,,,22,Simulated process instance,time-out 1,complete,__INVALID__,,2006-03-26 00:00:00+01:00 +,,,,,22,Simulated process instance,collect reviews,start,Mike,,2006-03-27 01:00:00+02:00 +,,,,,22,Simulated process instance,collect reviews,complete,Mike,,2006-03-29 01:00:00+02:00 +,,,,,22,Simulated process instance,decide,start,Wil,,2006-08-15 01:00:00+02:00 +,,,,0,22,Simulated process instance,decide,complete,Wil,1,2006-08-18 01:00:00+02:00 +,,,,,22,Simulated process instance,invite additional reviewer,start,Anne,,2007-01-18 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,complete,Anne,,2007-01-20 00:00:00+01:00 +,,,reject,,22,Simulated process instance,get review X,complete,Mary,,2007-01-25 00:00:00+01:00 +,,,,,22,Simulated process instance,decide,start,Wil,,2009-02-21 00:00:00+01:00 +,,,,0,22,Simulated process instance,decide,complete,Wil,2,2009-02-24 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,start,Mike,,2009-02-24 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,complete,Mike,,2009-02-28 00:00:00+01:00 +,,,,,22,Simulated process instance,time-out X,complete,__INVALID__,,2009-03-02 00:00:00+01:00 +,,,,,22,Simulated process instance,decide,start,Wil,,2009-03-13 00:00:00+01:00 +,,,,0,22,Simulated process instance,decide,complete,Wil,2,2009-03-18 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,start,Anne,,2009-03-18 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,complete,Anne,,2009-03-18 00:00:00+01:00 +,,,,,22,Simulated process instance,time-out X,complete,__INVALID__,,2009-03-24 00:00:00+01:00 +,,,,,22,Simulated process instance,decide,start,Wil,,2009-05-03 01:00:00+02:00 +,,,,0,22,Simulated process instance,decide,complete,Wil,2,2009-05-05 01:00:00+02:00 +,,,,,22,Simulated process instance,invite additional reviewer,start,Anne,,2009-05-05 01:00:00+02:00 +,,,,,22,Simulated process instance,invite additional reviewer,complete,Anne,,2009-05-09 01:00:00+02:00 +,,,accept,,22,Simulated process instance,get review X,complete,Pete,,2009-05-12 01:00:00+02:00 +,,,,,22,Simulated process instance,decide,start,Wil,,2009-12-18 00:00:00+01:00 +,,,,1,22,Simulated process instance,decide,complete,Wil,2,2009-12-19 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,start,Mike,,2009-12-19 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,complete,Mike,,2009-12-19 00:00:00+01:00 +,,,reject,,22,Simulated process instance,get review X,complete,John,,2009-12-19 00:00:00+01:00 +,,,,,22,Simulated process instance,decide,start,Wil,,2010-01-21 00:00:00+01:00 +,,,,1,22,Simulated process instance,decide,complete,Wil,3,2010-01-25 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,start,Mike,,2010-01-25 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,complete,Mike,,2010-01-26 00:00:00+01:00 +,,,,,22,Simulated process instance,time-out X,complete,__INVALID__,,2010-02-04 00:00:00+01:00 +,,,,,22,Simulated process instance,decide,start,Wil,,2010-03-03 00:00:00+01:00 +,,,,1,22,Simulated process instance,decide,complete,Wil,3,2010-03-04 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,start,Mike,,2010-03-08 00:00:00+01:00 +,,,,,22,Simulated process instance,invite additional reviewer,complete,Mike,,2010-03-12 00:00:00+01:00 +,,,reject,,22,Simulated process instance,get review X,complete,Pam,,2010-03-15 00:00:00+01:00 +,,,,,22,Simulated process instance,decide,start,Wil,,2010-03-23 00:00:00+01:00 +,,,,1,22,Simulated process instance,decide,complete,Wil,4,2010-03-27 00:00:00+01:00 +,,,,,22,Simulated process instance,reject,start,Anne,,2010-03-27 00:00:00+01:00 +,,,,,22,Simulated process instance,reject,complete,Anne,,2010-03-31 01:00:00+02:00 +,,,,,23,Simulated process instance,invite reviewers,start,Anne,,2006-03-26 00:00:00+01:00 +,,,,,23,Simulated process instance,invite reviewers,complete,Anne,,2006-03-31 01:00:00+02:00 +reject,,,,,23,Simulated process instance,get review 1,complete,Pete,,2006-03-31 01:00:00+02:00 +,reject,,,,23,Simulated process instance,get review 2,complete,John,,2006-03-31 01:00:00+02:00 +,,reject,,,23,Simulated process instance,get review 3,complete,Carol,,2006-04-02 01:00:00+02:00 +,,,,,23,Simulated process instance,collect reviews,start,Anne,,2006-04-04 01:00:00+02:00 +,,,,,23,Simulated process instance,collect reviews,complete,Anne,,2006-04-09 01:00:00+02:00 +,,,,,23,Simulated process instance,decide,start,Wil,,2006-04-10 01:00:00+02:00 +,,,,0,23,Simulated process instance,decide,complete,Wil,3,2006-04-11 01:00:00+02:00 +,,,,,23,Simulated process instance,invite additional reviewer,start,Mike,,2006-04-12 01:00:00+02:00 +,,,,,23,Simulated process instance,invite additional reviewer,complete,Mike,,2006-04-17 01:00:00+02:00 +,,,reject,,23,Simulated process instance,get review X,complete,Mary,,2006-04-19 01:00:00+02:00 +,,,,,23,Simulated process instance,decide,start,Wil,,2006-05-17 01:00:00+02:00 +,,,,0,23,Simulated process instance,decide,complete,Wil,4,2006-05-22 01:00:00+02:00 +,,,,,23,Simulated process instance,reject,start,Anne,,2006-05-22 01:00:00+02:00 +,,,,,23,Simulated process instance,reject,complete,Anne,,2006-05-23 01:00:00+02:00 +,,,,,24,Simulated process instance,invite reviewers,start,Mike,,2006-03-30 01:00:00+02:00 +,,,,,24,Simulated process instance,invite reviewers,complete,Mike,,2006-03-30 01:00:00+02:00 +accept,,,,,24,Simulated process instance,get review 1,complete,Pete,,2006-03-30 01:00:00+02:00 +,,,,,24,Simulated process instance,time-out 2,complete,__INVALID__,,2006-04-06 01:00:00+02:00 +,,,,,24,Simulated process instance,time-out 3,complete,__INVALID__,,2006-04-07 01:00:00+02:00 +,,,,,24,Simulated process instance,collect reviews,start,Mike,,2006-04-08 01:00:00+02:00 +,,,,,24,Simulated process instance,collect reviews,complete,Mike,,2006-04-12 01:00:00+02:00 +,,,,,24,Simulated process instance,decide,start,Wil,,2006-05-25 01:00:00+02:00 +,,,,1,24,Simulated process instance,decide,complete,Wil,1,2006-05-29 01:00:00+02:00 +,,,,,24,Simulated process instance,invite additional reviewer,start,Mike,,2006-06-15 01:00:00+02:00 +,,,,,24,Simulated process instance,invite additional reviewer,complete,Mike,,2006-06-15 01:00:00+02:00 +,,,reject,,24,Simulated process instance,get review X,complete,Pam,,2006-06-18 01:00:00+02:00 +,,,,,24,Simulated process instance,decide,start,Wil,,2006-07-30 01:00:00+02:00 +,,,,1,24,Simulated process instance,decide,complete,Wil,2,2006-08-04 01:00:00+02:00 +,,,,,24,Simulated process instance,invite additional reviewer,start,Anne,,2006-12-01 00:00:00+01:00 +,,,,,24,Simulated process instance,invite additional reviewer,complete,Anne,,2006-12-02 00:00:00+01:00 +,,,accept,,24,Simulated process instance,get review X,complete,Mary,,2006-12-02 00:00:00+01:00 +,,,,,24,Simulated process instance,decide,start,Wil,,2007-01-21 00:00:00+01:00 +,,,,2,24,Simulated process instance,decide,complete,Wil,2,2007-01-25 00:00:00+01:00 +,,,,,24,Simulated process instance,invite additional reviewer,start,Anne,,2007-02-15 00:00:00+01:00 +,,,,,24,Simulated process instance,invite additional reviewer,complete,Anne,,2007-02-18 00:00:00+01:00 +,,,reject,,24,Simulated process instance,get review X,complete,Sam,,2007-02-19 00:00:00+01:00 +,,,,,24,Simulated process instance,decide,start,Wil,,2007-03-25 00:00:00+01:00 +,,,,2,24,Simulated process instance,decide,complete,Wil,3,2007-03-25 00:00:00+01:00 +,,,,,24,Simulated process instance,reject,start,Mike,,2007-03-25 00:00:00+01:00 +,,,,,24,Simulated process instance,reject,complete,Mike,,2007-03-27 01:00:00+02:00 +,,,,,25,Simulated process instance,invite reviewers,start,Anne,,2006-03-31 01:00:00+02:00 +,,,,,25,Simulated process instance,invite reviewers,complete,Anne,,2006-04-01 01:00:00+02:00 +,,reject,,,25,Simulated process instance,get review 3,complete,Pete,,2006-04-03 01:00:00+02:00 +,accept,,,,25,Simulated process instance,get review 2,complete,John,,2006-04-03 01:00:00+02:00 +,,,,,25,Simulated process instance,time-out 1,complete,__INVALID__,,2006-04-10 01:00:00+02:00 +,,,,,25,Simulated process instance,collect reviews,start,Anne,,2006-04-16 01:00:00+02:00 +,,,,,25,Simulated process instance,collect reviews,complete,Anne,,2006-04-20 01:00:00+02:00 +,,,,,25,Simulated process instance,decide,start,Wil,,2006-06-12 01:00:00+02:00 +,,,,1,25,Simulated process instance,decide,complete,Wil,1,2006-06-14 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,start,Anne,,2006-06-27 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,complete,Anne,,2006-06-30 01:00:00+02:00 +,,,reject,,25,Simulated process instance,get review X,complete,Mary,,2006-07-03 01:00:00+02:00 +,,,,,25,Simulated process instance,decide,start,Wil,,2006-08-26 01:00:00+02:00 +,,,,1,25,Simulated process instance,decide,complete,Wil,2,2006-08-29 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,start,Mike,,2007-01-23 00:00:00+01:00 +,,,,,25,Simulated process instance,invite additional reviewer,complete,Mike,,2007-01-26 00:00:00+01:00 +,,,,,25,Simulated process instance,time-out X,complete,__INVALID__,,2007-02-03 00:00:00+01:00 +,,,,,25,Simulated process instance,decide,start,Wil,,2007-06-01 01:00:00+02:00 +,,,,1,25,Simulated process instance,decide,complete,Wil,2,2007-06-06 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,start,Anne,,2007-06-06 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,complete,Anne,,2007-06-07 01:00:00+02:00 +,,,accept,,25,Simulated process instance,get review X,complete,John,,2007-06-08 01:00:00+02:00 +,,,,,25,Simulated process instance,decide,start,Wil,,2007-07-12 01:00:00+02:00 +,,,,2,25,Simulated process instance,decide,complete,Wil,2,2007-07-17 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,start,Mike,,2007-07-17 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,complete,Mike,,2007-07-20 01:00:00+02:00 +,,,,,25,Simulated process instance,time-out X,complete,__INVALID__,,2007-07-22 01:00:00+02:00 +,,,,,25,Simulated process instance,decide,start,Wil,,2007-08-05 01:00:00+02:00 +,,,,2,25,Simulated process instance,decide,complete,Wil,2,2007-08-06 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,start,Mike,,2007-08-06 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,complete,Mike,,2007-08-11 01:00:00+02:00 +,,,,,25,Simulated process instance,time-out X,complete,__INVALID__,,2007-08-12 01:00:00+02:00 +,,,,,25,Simulated process instance,decide,start,Wil,,2007-10-17 01:00:00+02:00 +,,,,2,25,Simulated process instance,decide,complete,Wil,2,2007-10-22 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,start,Mike,,2007-10-22 01:00:00+02:00 +,,,,,25,Simulated process instance,invite additional reviewer,complete,Mike,,2007-10-23 01:00:00+02:00 +,,,,,25,Simulated process instance,time-out X,complete,__INVALID__,,2007-10-25 01:00:00+02:00 +,,,,,25,Simulated process instance,decide,start,Wil,,2007-11-13 00:00:00+01:00 +,,,,2,25,Simulated process instance,decide,complete,Wil,2,2007-11-13 00:00:00+01:00 +,,,,,25,Simulated process instance,invite additional reviewer,start,Mike,,2007-11-13 00:00:00+01:00 +,,,,,25,Simulated process instance,invite additional reviewer,complete,Mike,,2007-11-17 00:00:00+01:00 +,,,,,25,Simulated process instance,time-out X,complete,__INVALID__,,2007-11-17 00:00:00+01:00 +,,,,,25,Simulated process instance,decide,start,Wil,,2008-02-29 00:00:00+01:00 +,,,,2,25,Simulated process instance,decide,complete,Wil,2,2008-03-03 00:00:00+01:00 +,,,,,25,Simulated process instance,invite additional reviewer,start,Mike,,2008-03-03 00:00:00+01:00 +,,,,,25,Simulated process instance,invite additional reviewer,complete,Mike,,2008-03-06 00:00:00+01:00 +,,,reject,,25,Simulated process instance,get review X,complete,Pam,,2008-03-07 00:00:00+01:00 +,,,,,25,Simulated process instance,decide,start,Wil,,2008-04-08 01:00:00+02:00 +,,,,2,25,Simulated process instance,decide,complete,Wil,3,2008-04-11 01:00:00+02:00 +,,,,,25,Simulated process instance,reject,start,Mike,,2008-04-11 01:00:00+02:00 +,,,,,25,Simulated process instance,reject,complete,Mike,,2008-04-11 01:00:00+02:00 +,,,,,26,Simulated process instance,invite reviewers,start,Mike,,2006-04-04 01:00:00+02:00 +,,,,,26,Simulated process instance,invite reviewers,complete,Mike,,2006-04-05 01:00:00+02:00 +reject,,,,,26,Simulated process instance,get review 1,complete,Sara,,2006-04-09 01:00:00+02:00 +,,accept,,,26,Simulated process instance,get review 3,complete,Mary,,2006-04-09 01:00:00+02:00 +,,,,,26,Simulated process instance,time-out 2,complete,__INVALID__,,2006-04-10 01:00:00+02:00 +,,,,,26,Simulated process instance,collect reviews,start,Mike,,2006-04-18 01:00:00+02:00 +,,,,,26,Simulated process instance,collect reviews,complete,Mike,,2006-04-18 01:00:00+02:00 +,,,,,26,Simulated process instance,decide,start,Wil,,2006-08-13 01:00:00+02:00 +,,,,1,26,Simulated process instance,decide,complete,Wil,2,2006-08-15 01:00:00+02:00 +,,,,,26,Simulated process instance,invite additional reviewer,start,Anne,,2006-08-25 01:00:00+02:00 +,,,,,26,Simulated process instance,invite additional reviewer,complete,Anne,,2006-08-29 01:00:00+02:00 +,,,accept,,26,Simulated process instance,get review X,complete,Pete,,2006-09-03 01:00:00+02:00 +,,,,,26,Simulated process instance,decide,start,Wil,,2007-04-11 01:00:00+02:00 +,,,,2,26,Simulated process instance,decide,complete,Wil,2,2007-04-13 01:00:00+02:00 +,,,,,26,Simulated process instance,invite additional reviewer,start,Anne,,2007-04-24 01:00:00+02:00 +,,,,,26,Simulated process instance,invite additional reviewer,complete,Anne,,2007-04-25 01:00:00+02:00 +,,,accept,,26,Simulated process instance,get review X,complete,Pam,,2007-04-30 01:00:00+02:00 +,,,,,26,Simulated process instance,decide,start,Wil,,2008-06-29 01:00:00+02:00 +,,,,3,26,Simulated process instance,decide,complete,Wil,2,2008-06-30 01:00:00+02:00 +,,,,,26,Simulated process instance,accept,start,Anne,,2008-06-30 01:00:00+02:00 +,,,,,26,Simulated process instance,accept,complete,Anne,,2008-07-04 01:00:00+02:00 +,,,,,27,Simulated process instance,invite reviewers,start,Anne,,2006-04-13 01:00:00+02:00 +,,,,,27,Simulated process instance,invite reviewers,complete,Anne,,2006-04-16 01:00:00+02:00 +,,accept,,,27,Simulated process instance,get review 3,complete,John,,2006-04-16 01:00:00+02:00 +,,,,,27,Simulated process instance,time-out 2,complete,__INVALID__,,2006-04-17 01:00:00+02:00 +,,,,,27,Simulated process instance,time-out 1,complete,__INVALID__,,2006-04-26 01:00:00+02:00 +,,,,,27,Simulated process instance,collect reviews,start,Anne,,2006-04-27 01:00:00+02:00 +,,,,,27,Simulated process instance,collect reviews,complete,Anne,,2006-04-28 01:00:00+02:00 +,,,,,27,Simulated process instance,decide,start,Wil,,2006-06-18 01:00:00+02:00 +,,,,1,27,Simulated process instance,decide,complete,Wil,1,2006-06-20 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,start,Anne,,2006-07-20 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,complete,Anne,,2006-07-25 01:00:00+02:00 +,,,,,27,Simulated process instance,time-out X,complete,__INVALID__,,2006-08-04 01:00:00+02:00 +,,,,,27,Simulated process instance,decide,start,Wil,,2006-09-19 01:00:00+02:00 +,,,,1,27,Simulated process instance,decide,complete,Wil,1,2006-09-20 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,start,Anne,,2007-01-22 00:00:00+01:00 +,,,,,27,Simulated process instance,invite additional reviewer,complete,Anne,,2007-01-24 00:00:00+01:00 +,,,accept,,27,Simulated process instance,get review X,complete,John,,2007-01-26 00:00:00+01:00 +,,,,,27,Simulated process instance,decide,start,Wil,,2008-05-17 01:00:00+02:00 +,,,,2,27,Simulated process instance,decide,complete,Wil,1,2008-05-17 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,start,Anne,,2008-05-17 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,complete,Anne,,2008-05-18 01:00:00+02:00 +,,,,,27,Simulated process instance,time-out X,complete,__INVALID__,,2008-05-20 01:00:00+02:00 +,,,,,27,Simulated process instance,decide,start,Wil,,2008-10-29 00:00:00+01:00 +,,,,2,27,Simulated process instance,decide,complete,Wil,1,2008-11-02 00:00:00+01:00 +,,,,,27,Simulated process instance,invite additional reviewer,start,Mike,,2008-11-02 00:00:00+01:00 +,,,,,27,Simulated process instance,invite additional reviewer,complete,Mike,,2008-11-06 00:00:00+01:00 +,,,,,27,Simulated process instance,time-out X,complete,__INVALID__,,2008-11-15 00:00:00+01:00 +,,,,,27,Simulated process instance,decide,start,Wil,,2009-05-05 01:00:00+02:00 +,,,,2,27,Simulated process instance,decide,complete,Wil,1,2009-05-09 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,start,Anne,,2009-05-09 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,complete,Anne,,2009-05-09 01:00:00+02:00 +,,,,,27,Simulated process instance,time-out X,complete,__INVALID__,,2009-05-14 01:00:00+02:00 +,,,,,27,Simulated process instance,decide,start,Wil,,2009-06-12 01:00:00+02:00 +,,,,2,27,Simulated process instance,decide,complete,Wil,1,2009-06-14 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,start,Anne,,2009-06-17 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,complete,Anne,,2009-06-21 01:00:00+02:00 +,,,accept,,27,Simulated process instance,get review X,complete,Sam,,2009-06-21 01:00:00+02:00 +,,,,,27,Simulated process instance,decide,start,Wil,,2009-08-25 01:00:00+02:00 +,,,,3,27,Simulated process instance,decide,complete,Wil,1,2009-08-27 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,start,Anne,,2009-08-28 01:00:00+02:00 +,,,,,27,Simulated process instance,invite additional reviewer,complete,Anne,,2009-08-29 01:00:00+02:00 +,,,reject,,27,Simulated process instance,get review X,complete,Pete,,2009-08-31 01:00:00+02:00 +,,,,,27,Simulated process instance,decide,start,Wil,,2009-12-22 00:00:00+01:00 +,,,,3,27,Simulated process instance,decide,complete,Wil,2,2010-01-02 00:00:00+01:00 +,,,,,27,Simulated process instance,accept,start,Anne,,2010-01-02 00:00:00+01:00 +,,,,,27,Simulated process instance,accept,complete,Anne,,2010-01-06 00:00:00+01:00 +,,,,,28,Simulated process instance,invite reviewers,start,Mike,,2006-04-17 01:00:00+02:00 +,,,,,28,Simulated process instance,invite reviewers,complete,Mike,,2006-04-18 01:00:00+02:00 +,,,,,28,Simulated process instance,time-out 3,complete,__INVALID__,,2006-04-22 01:00:00+02:00 +,,,,,28,Simulated process instance,time-out 1,complete,__INVALID__,,2006-04-26 01:00:00+02:00 +,,,,,28,Simulated process instance,time-out 2,complete,__INVALID__,,2006-04-27 01:00:00+02:00 +,,,,,28,Simulated process instance,collect reviews,start,Anne,,2006-04-28 01:00:00+02:00 +,,,,,28,Simulated process instance,collect reviews,complete,Anne,,2006-05-01 01:00:00+02:00 +,,,,,28,Simulated process instance,decide,start,Wil,,2006-06-14 01:00:00+02:00 +,,,,1,28,Simulated process instance,decide,complete,Wil,0,2006-06-18 01:00:00+02:00 +,,,,,28,Simulated process instance,invite additional reviewer,start,Mike,,2006-06-20 01:00:00+02:00 +,,,,,28,Simulated process instance,invite additional reviewer,complete,Mike,,2006-06-24 01:00:00+02:00 +,,,,,28,Simulated process instance,time-out X,complete,__INVALID__,,2006-06-24 01:00:00+02:00 +,,,,,28,Simulated process instance,decide,start,Wil,,2006-10-18 01:00:00+02:00 +,,,,1,28,Simulated process instance,decide,complete,Wil,0,2006-10-19 01:00:00+02:00 +,,,,,28,Simulated process instance,invite additional reviewer,start,Mike,,2006-12-02 00:00:00+01:00 +,,,,,28,Simulated process instance,invite additional reviewer,complete,Mike,,2006-12-03 00:00:00+01:00 +,,,,,28,Simulated process instance,time-out X,complete,__INVALID__,,2006-12-09 00:00:00+01:00 +,,,,,28,Simulated process instance,decide,start,Wil,,2006-12-11 00:00:00+01:00 +,,,,1,28,Simulated process instance,decide,complete,Wil,0,2006-12-15 00:00:00+01:00 +,,,,,28,Simulated process instance,invite additional reviewer,start,Mike,,2007-01-07 00:00:00+01:00 +,,,,,28,Simulated process instance,invite additional reviewer,complete,Mike,,2007-01-07 00:00:00+01:00 +,,,accept,,28,Simulated process instance,get review X,complete,Mary,,2007-01-08 00:00:00+01:00 +,,,,,28,Simulated process instance,decide,start,Wil,,2007-06-01 01:00:00+02:00 +,,,,2,28,Simulated process instance,decide,complete,Wil,0,2007-06-01 01:00:00+02:00 +,,,,,28,Simulated process instance,invite additional reviewer,start,Anne,,2007-06-01 01:00:00+02:00 +,,,,,28,Simulated process instance,invite additional reviewer,complete,Anne,,2007-06-05 01:00:00+02:00 +,,,accept,,28,Simulated process instance,get review X,complete,Mary,,2007-06-08 01:00:00+02:00 +,,,,,28,Simulated process instance,decide,start,Wil,,2007-08-06 01:00:00+02:00 +,,,,3,28,Simulated process instance,decide,complete,Wil,0,2007-08-10 01:00:00+02:00 +,,,,,28,Simulated process instance,accept,start,Anne,,2007-08-10 01:00:00+02:00 +,,,,,28,Simulated process instance,accept,complete,Anne,,2007-08-13 01:00:00+02:00 +,,,,,29,Simulated process instance,invite reviewers,start,Anne,,2006-04-26 01:00:00+02:00 +,,,,,29,Simulated process instance,invite reviewers,complete,Anne,,2006-04-27 01:00:00+02:00 +,,reject,,,29,Simulated process instance,get review 3,complete,Mary,,2006-04-28 01:00:00+02:00 +accept,,,,,29,Simulated process instance,get review 1,complete,Sam,,2006-04-30 01:00:00+02:00 +,,,,,29,Simulated process instance,time-out 2,complete,__INVALID__,,2006-05-05 01:00:00+02:00 +,,,,,29,Simulated process instance,collect reviews,start,Mike,,2006-05-11 01:00:00+02:00 +,,,,,29,Simulated process instance,collect reviews,complete,Mike,,2006-05-13 01:00:00+02:00 +,,,,,29,Simulated process instance,decide,start,Wil,,2006-07-11 01:00:00+02:00 +,,,,1,29,Simulated process instance,decide,complete,Wil,2,2006-07-13 01:00:00+02:00 +,,,,,29,Simulated process instance,invite additional reviewer,start,Mike,,2006-07-16 01:00:00+02:00 +,,,,,29,Simulated process instance,invite additional reviewer,complete,Mike,,2006-07-19 01:00:00+02:00 +,,,,,29,Simulated process instance,time-out X,complete,__INVALID__,,2006-07-19 01:00:00+02:00 +,,,,,29,Simulated process instance,decide,start,Wil,,2006-08-21 01:00:00+02:00 +,,,,1,29,Simulated process instance,decide,complete,Wil,2,2006-08-26 01:00:00+02:00 +,,,,,29,Simulated process instance,invite additional reviewer,start,Anne,,2006-10-23 01:00:00+02:00 +,,,,,29,Simulated process instance,invite additional reviewer,complete,Anne,,2006-10-24 01:00:00+02:00 +,,,reject,,29,Simulated process instance,get review X,complete,Mary,,2006-10-29 01:00:00+02:00 +,,,,,29,Simulated process instance,decide,start,Wil,,2006-11-15 00:00:00+01:00 +,,,,1,29,Simulated process instance,decide,complete,Wil,3,2006-11-18 00:00:00+01:00 +,,,,,29,Simulated process instance,invite additional reviewer,start,Anne,,2006-11-20 00:00:00+01:00 +,,,,,29,Simulated process instance,invite additional reviewer,complete,Anne,,2006-11-21 00:00:00+01:00 +,,,,,29,Simulated process instance,time-out X,complete,__INVALID__,,2006-11-25 00:00:00+01:00 +,,,,,29,Simulated process instance,decide,start,Wil,,2007-06-25 01:00:00+02:00 +,,,,1,29,Simulated process instance,decide,complete,Wil,3,2007-06-25 01:00:00+02:00 +,,,,,29,Simulated process instance,reject,start,Mike,,2007-06-25 01:00:00+02:00 +,,,,,29,Simulated process instance,reject,complete,Mike,,2007-06-30 01:00:00+02:00 +,,,,,3,Simulated process instance,invite reviewers,start,Anne,,2006-01-05 00:00:00+01:00 +,,,,,3,Simulated process instance,invite reviewers,complete,Anne,,2006-01-10 00:00:00+01:00 +reject,,,,,3,Simulated process instance,get review 1,complete,Mary,,2006-01-10 00:00:00+01:00 +,,,,,3,Simulated process instance,time-out 2,complete,__INVALID__,,2006-01-13 00:00:00+01:00 +,,reject,,,3,Simulated process instance,get review 3,complete,Carol,,2006-01-15 00:00:00+01:00 +,,,,,3,Simulated process instance,collect reviews,start,Anne,,2006-01-15 00:00:00+01:00 +,,,,,3,Simulated process instance,collect reviews,complete,Anne,,2006-01-17 00:00:00+01:00 +,,,,,3,Simulated process instance,decide,start,Wil,,2006-01-19 00:00:00+01:00 +,,,,1,3,Simulated process instance,decide,complete,Wil,2,2006-01-24 00:00:00+01:00 +,,,,,3,Simulated process instance,invite additional reviewer,start,Anne,,2006-01-24 00:00:00+01:00 +,,,,,3,Simulated process instance,invite additional reviewer,complete,Anne,,2006-01-24 00:00:00+01:00 +,,,,,3,Simulated process instance,time-out X,complete,__INVALID__,,2006-02-03 00:00:00+01:00 +,,,,,3,Simulated process instance,decide,start,Wil,,2006-03-06 00:00:00+01:00 +,,,,1,3,Simulated process instance,decide,complete,Wil,2,2006-03-06 00:00:00+01:00 +,,,,,3,Simulated process instance,invite additional reviewer,start,Anne,,2006-03-08 00:00:00+01:00 +,,,,,3,Simulated process instance,invite additional reviewer,complete,Anne,,2006-03-13 00:00:00+01:00 +,,,,,3,Simulated process instance,time-out X,complete,__INVALID__,,2006-03-19 00:00:00+01:00 +,,,,,3,Simulated process instance,decide,start,Wil,,2006-04-27 01:00:00+02:00 +,,,,1,3,Simulated process instance,decide,complete,Wil,2,2006-05-01 01:00:00+02:00 +,,,,,3,Simulated process instance,invite additional reviewer,start,Anne,,2006-05-01 01:00:00+02:00 +,,,,,3,Simulated process instance,invite additional reviewer,complete,Anne,,2006-05-02 01:00:00+02:00 +,,,accept,,3,Simulated process instance,get review X,complete,Mary,,2006-05-03 01:00:00+02:00 +,,,,,3,Simulated process instance,decide,start,Wil,,2006-05-29 01:00:00+02:00 +,,,,2,3,Simulated process instance,decide,complete,Wil,2,2006-05-30 01:00:00+02:00 +,,,,,3,Simulated process instance,invite additional reviewer,start,Anne,,2006-06-07 01:00:00+02:00 +,,,,,3,Simulated process instance,invite additional reviewer,complete,Anne,,2006-06-10 01:00:00+02:00 +,,,,,3,Simulated process instance,time-out X,complete,__INVALID__,,2006-06-12 01:00:00+02:00 +,,,,,3,Simulated process instance,decide,start,Wil,,2006-09-22 01:00:00+02:00 +,,,,2,3,Simulated process instance,decide,complete,Wil,2,2006-09-22 01:00:00+02:00 +,,,,,3,Simulated process instance,invite additional reviewer,start,Mike,,2006-10-06 01:00:00+02:00 +,,,,,3,Simulated process instance,invite additional reviewer,complete,Mike,,2006-10-09 01:00:00+02:00 +,,,accept,,3,Simulated process instance,get review X,complete,Mary,,2006-10-13 01:00:00+02:00 +,,,,,3,Simulated process instance,decide,start,Wil,,2006-12-19 00:00:00+01:00 +,,,,3,3,Simulated process instance,decide,complete,Wil,2,2006-12-19 00:00:00+01:00 +,,,,,3,Simulated process instance,accept,start,Anne,,2006-12-24 00:00:00+01:00 +,,,,,3,Simulated process instance,accept,complete,Anne,,2007-01-03 00:00:00+01:00 +,,,,,30,Simulated process instance,invite reviewers,start,Mike,,2006-05-01 01:00:00+02:00 +,,,,,30,Simulated process instance,invite reviewers,complete,Mike,,2006-05-04 01:00:00+02:00 +,reject,,,,30,Simulated process instance,get review 2,complete,Pam,,2006-05-04 01:00:00+02:00 +,,,,,30,Simulated process instance,time-out 1,complete,__INVALID__,,2006-05-05 01:00:00+02:00 +,,,,,30,Simulated process instance,time-out 3,complete,__INVALID__,,2006-05-07 01:00:00+02:00 +,,,,,30,Simulated process instance,collect reviews,start,Anne,,2006-05-10 01:00:00+02:00 +,,,,,30,Simulated process instance,collect reviews,complete,Anne,,2006-05-10 01:00:00+02:00 +,,,,,30,Simulated process instance,decide,start,Wil,,2006-06-06 01:00:00+02:00 +,,,,0,30,Simulated process instance,decide,complete,Wil,1,2006-06-08 01:00:00+02:00 +,,,,,30,Simulated process instance,invite additional reviewer,start,Mike,,2006-12-06 00:00:00+01:00 +,,,,,30,Simulated process instance,invite additional reviewer,complete,Mike,,2006-12-11 00:00:00+01:00 +,,,reject,,30,Simulated process instance,get review X,complete,Pete,,2006-12-16 00:00:00+01:00 +,,,,,30,Simulated process instance,decide,start,Wil,,2007-05-15 01:00:00+02:00 +,,,,0,30,Simulated process instance,decide,complete,Wil,2,2007-05-20 01:00:00+02:00 +,,,,,30,Simulated process instance,invite additional reviewer,start,Anne,,2007-05-20 01:00:00+02:00 +,,,,,30,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-25 01:00:00+02:00 +,,,reject,,30,Simulated process instance,get review X,complete,John,,2007-05-29 01:00:00+02:00 +,,,,,30,Simulated process instance,decide,start,Wil,,2007-11-06 00:00:00+01:00 +,,,,0,30,Simulated process instance,decide,complete,Wil,3,2007-11-08 00:00:00+01:00 +,,,,,30,Simulated process instance,reject,start,Anne,,2007-11-08 00:00:00+01:00 +,,,,,30,Simulated process instance,reject,complete,Anne,,2007-11-08 00:00:00+01:00 +,,,,,31,Simulated process instance,invite reviewers,start,Mike,,2006-05-04 01:00:00+02:00 +,,,,,31,Simulated process instance,invite reviewers,complete,Mike,,2006-05-09 01:00:00+02:00 +,,reject,,,31,Simulated process instance,get review 3,complete,Carol,,2006-05-09 01:00:00+02:00 +,,,,,31,Simulated process instance,time-out 2,complete,__INVALID__,,2006-05-10 01:00:00+02:00 +reject,,,,,31,Simulated process instance,get review 1,complete,Sara,,2006-05-14 01:00:00+02:00 +,,,,,31,Simulated process instance,collect reviews,start,Anne,,2006-05-17 01:00:00+02:00 +,,,,,31,Simulated process instance,collect reviews,complete,Anne,,2006-05-20 01:00:00+02:00 +,,,,,31,Simulated process instance,decide,start,Wil,,2006-05-22 01:00:00+02:00 +,,,,0,31,Simulated process instance,decide,complete,Wil,3,2006-05-25 01:00:00+02:00 +,,,,,31,Simulated process instance,reject,start,Mike,,2006-05-25 01:00:00+02:00 +,,,,,31,Simulated process instance,reject,complete,Mike,,2006-05-25 01:00:00+02:00 +,,,,,32,Simulated process instance,invite reviewers,start,Anne,,2006-05-05 01:00:00+02:00 +,,,,,32,Simulated process instance,invite reviewers,complete,Anne,,2006-05-10 01:00:00+02:00 +,,,,,32,Simulated process instance,time-out 2,complete,__INVALID__,,2006-05-11 01:00:00+02:00 +,,reject,,,32,Simulated process instance,get review 3,complete,Pete,,2006-05-11 01:00:00+02:00 +,,,,,32,Simulated process instance,time-out 1,complete,__INVALID__,,2006-05-18 01:00:00+02:00 +,,,,,32,Simulated process instance,collect reviews,start,Anne,,2006-05-25 01:00:00+02:00 +,,,,,32,Simulated process instance,collect reviews,complete,Anne,,2006-05-30 01:00:00+02:00 +,,,,,32,Simulated process instance,decide,start,Wil,,2006-07-01 01:00:00+02:00 +,,,,1,32,Simulated process instance,decide,complete,Wil,1,2006-07-06 01:00:00+02:00 +,,,,,32,Simulated process instance,invite additional reviewer,start,Mike,,2006-10-19 01:00:00+02:00 +,,,,,32,Simulated process instance,invite additional reviewer,complete,Mike,,2006-10-23 01:00:00+02:00 +,,,accept,,32,Simulated process instance,get review X,complete,Sara,,2006-10-25 01:00:00+02:00 +,,,,,32,Simulated process instance,decide,start,Wil,,2007-03-11 00:00:00+01:00 +,,,,2,32,Simulated process instance,decide,complete,Wil,1,2007-03-14 00:00:00+01:00 +,,,,,32,Simulated process instance,invite additional reviewer,start,Anne,,2007-03-21 00:00:00+01:00 +,,,,,32,Simulated process instance,invite additional reviewer,complete,Anne,,2007-03-22 00:00:00+01:00 +,,,,,32,Simulated process instance,time-out X,complete,__INVALID__,,2007-03-24 00:00:00+01:00 +,,,,,32,Simulated process instance,decide,start,Wil,,2008-02-24 00:00:00+01:00 +,,,,2,32,Simulated process instance,decide,complete,Wil,1,2008-02-26 00:00:00+01:00 +,,,,,32,Simulated process instance,invite additional reviewer,start,Anne,,2008-02-26 00:00:00+01:00 +,,,,,32,Simulated process instance,invite additional reviewer,complete,Anne,,2008-02-29 00:00:00+01:00 +,,,accept,,32,Simulated process instance,get review X,complete,Pete,,2008-03-05 00:00:00+01:00 +,,,,,32,Simulated process instance,decide,start,Wil,,2008-09-21 01:00:00+02:00 +,,,,3,32,Simulated process instance,decide,complete,Wil,1,2008-09-23 01:00:00+02:00 +,,,,,32,Simulated process instance,accept,start,Anne,,2008-09-23 01:00:00+02:00 +,,,,,32,Simulated process instance,accept,complete,Anne,,2008-09-23 01:00:00+02:00 +,,,,,33,Simulated process instance,invite reviewers,start,Anne,,2006-05-10 01:00:00+02:00 +,,,,,33,Simulated process instance,invite reviewers,complete,Anne,,2006-05-13 01:00:00+02:00 +,reject,,,,33,Simulated process instance,get review 2,complete,Carol,,2006-05-13 01:00:00+02:00 +,,reject,,,33,Simulated process instance,get review 3,complete,Mary,,2006-05-16 01:00:00+02:00 +,,,,,33,Simulated process instance,time-out 1,complete,__INVALID__,,2006-05-20 01:00:00+02:00 +,,,,,33,Simulated process instance,collect reviews,start,Mike,,2006-05-25 01:00:00+02:00 +,,,,,33,Simulated process instance,collect reviews,complete,Mike,,2006-05-29 01:00:00+02:00 +,,,,,33,Simulated process instance,decide,start,Wil,,2006-05-30 01:00:00+02:00 +,,,,0,33,Simulated process instance,decide,complete,Wil,2,2006-06-02 01:00:00+02:00 +,,,,,33,Simulated process instance,invite additional reviewer,start,Anne,,2006-06-04 01:00:00+02:00 +,,,,,33,Simulated process instance,invite additional reviewer,complete,Anne,,2006-06-07 01:00:00+02:00 +,,,reject,,33,Simulated process instance,get review X,complete,Pam,,2006-06-07 01:00:00+02:00 +,,,,,33,Simulated process instance,decide,start,Wil,,2006-06-08 01:00:00+02:00 +,,,,0,33,Simulated process instance,decide,complete,Wil,3,2006-06-12 01:00:00+02:00 +,,,,,33,Simulated process instance,reject,start,Mike,,2006-06-15 01:00:00+02:00 +,,,,,33,Simulated process instance,reject,complete,Mike,,2006-06-20 01:00:00+02:00 +,,,,,34,Simulated process instance,invite reviewers,start,Anne,,2006-05-15 01:00:00+02:00 +,,,,,34,Simulated process instance,invite reviewers,complete,Anne,,2006-05-17 01:00:00+02:00 +,,,,,34,Simulated process instance,time-out 1,complete,__INVALID__,,2006-05-19 01:00:00+02:00 +,,,,,34,Simulated process instance,time-out 2,complete,__INVALID__,,2006-05-19 01:00:00+02:00 +,,,,,34,Simulated process instance,time-out 3,complete,__INVALID__,,2006-05-19 01:00:00+02:00 +,,,,,34,Simulated process instance,collect reviews,start,Anne,,2006-05-23 01:00:00+02:00 +,,,,,34,Simulated process instance,collect reviews,complete,Anne,,2006-05-25 01:00:00+02:00 +,,,,,34,Simulated process instance,decide,start,Wil,,2006-09-24 01:00:00+02:00 +,,,,1,34,Simulated process instance,decide,complete,Wil,0,2006-09-25 01:00:00+02:00 +,,,,,34,Simulated process instance,invite additional reviewer,start,Anne,,2006-11-02 00:00:00+01:00 +,,,,,34,Simulated process instance,invite additional reviewer,complete,Anne,,2006-11-07 00:00:00+01:00 +,,,,,34,Simulated process instance,time-out X,complete,__INVALID__,,2006-11-17 00:00:00+01:00 +,,,,,34,Simulated process instance,decide,start,Wil,,2007-02-15 00:00:00+01:00 +,,,,1,34,Simulated process instance,decide,complete,Wil,0,2007-02-20 00:00:00+01:00 +,,,,,34,Simulated process instance,invite additional reviewer,start,Mike,,2007-03-21 00:00:00+01:00 +,,,,,34,Simulated process instance,invite additional reviewer,complete,Mike,,2007-03-24 00:00:00+01:00 +,,,,,34,Simulated process instance,time-out X,complete,__INVALID__,,2007-03-28 01:00:00+02:00 +,,,,,34,Simulated process instance,decide,start,Wil,,2008-05-08 01:00:00+02:00 +,,,,1,34,Simulated process instance,decide,complete,Wil,0,2008-05-11 01:00:00+02:00 +,,,,,34,Simulated process instance,invite additional reviewer,start,Anne,,2008-05-11 01:00:00+02:00 +,,,,,34,Simulated process instance,invite additional reviewer,complete,Anne,,2008-05-12 01:00:00+02:00 +,,,,,34,Simulated process instance,time-out X,complete,__INVALID__,,2008-05-12 01:00:00+02:00 +,,,,,34,Simulated process instance,decide,start,Wil,,2009-08-14 01:00:00+02:00 +,,,,1,34,Simulated process instance,decide,complete,Wil,0,2009-08-16 01:00:00+02:00 +,,,,,34,Simulated process instance,invite additional reviewer,start,Mike,,2009-08-16 01:00:00+02:00 +,,,,,34,Simulated process instance,invite additional reviewer,complete,Mike,,2009-08-16 01:00:00+02:00 +,,,,,34,Simulated process instance,time-out X,complete,__INVALID__,,2009-08-23 01:00:00+02:00 +,,,,,34,Simulated process instance,decide,start,Wil,,2009-10-10 01:00:00+02:00 +,,,,1,34,Simulated process instance,decide,complete,Wil,0,2009-10-10 01:00:00+02:00 +,,,,,34,Simulated process instance,invite additional reviewer,start,Anne,,2009-10-15 01:00:00+02:00 +,,,,,34,Simulated process instance,invite additional reviewer,complete,Anne,,2009-10-17 01:00:00+02:00 +,,,reject,,34,Simulated process instance,get review X,complete,Mary,,2009-10-17 01:00:00+02:00 +,,,,,34,Simulated process instance,decide,start,Wil,,2009-11-01 00:00:00+01:00 +,,,,1,34,Simulated process instance,decide,complete,Wil,1,2009-11-06 00:00:00+01:00 +,,,,,34,Simulated process instance,invite additional reviewer,start,Anne,,2009-11-06 00:00:00+01:00 +,,,,,34,Simulated process instance,invite additional reviewer,complete,Anne,,2009-11-11 00:00:00+01:00 +,,,accept,,34,Simulated process instance,get review X,complete,Sara,,2009-11-16 00:00:00+01:00 +,,,,,34,Simulated process instance,decide,start,Wil,,2010-01-03 00:00:00+01:00 +,,,,2,34,Simulated process instance,decide,complete,Wil,1,2010-01-08 00:00:00+01:00 +,,,,,34,Simulated process instance,invite additional reviewer,start,Mike,,2010-01-08 00:00:00+01:00 +,,,,,34,Simulated process instance,invite additional reviewer,complete,Mike,,2010-01-10 00:00:00+01:00 +,,,accept,,34,Simulated process instance,get review X,complete,John,,2010-01-14 00:00:00+01:00 +,,,,,34,Simulated process instance,decide,start,Wil,,2010-02-11 00:00:00+01:00 +,,,,3,34,Simulated process instance,decide,complete,Wil,1,2010-02-14 00:00:00+01:00 +,,,,,34,Simulated process instance,invite additional reviewer,start,Anne,,2010-02-14 00:00:00+01:00 +,,,,,34,Simulated process instance,invite additional reviewer,complete,Anne,,2010-02-18 00:00:00+01:00 +,,,accept,,34,Simulated process instance,get review X,complete,Mary,,2010-02-19 00:00:00+01:00 +,,,,,34,Simulated process instance,decide,start,Wil,,2010-03-03 00:00:00+01:00 +,,,,4,34,Simulated process instance,decide,complete,Wil,1,2010-03-03 00:00:00+01:00 +,,,,,34,Simulated process instance,accept,start,Anne,,2010-03-03 00:00:00+01:00 +,,,,,34,Simulated process instance,accept,complete,Anne,,2010-03-07 00:00:00+01:00 +,,,,,35,Simulated process instance,invite reviewers,start,Anne,,2006-05-20 01:00:00+02:00 +,,,,,35,Simulated process instance,invite reviewers,complete,Anne,,2006-05-22 01:00:00+02:00 +,,reject,,,35,Simulated process instance,get review 3,complete,Carol,,2006-05-24 01:00:00+02:00 +,accept,,,,35,Simulated process instance,get review 2,complete,Sara,,2006-05-26 01:00:00+02:00 +,,,,,35,Simulated process instance,time-out 1,complete,__INVALID__,,2006-05-27 01:00:00+02:00 +,,,,,35,Simulated process instance,collect reviews,start,Mike,,2006-05-29 01:00:00+02:00 +,,,,,35,Simulated process instance,collect reviews,complete,Mike,,2006-05-31 01:00:00+02:00 +,,,,,35,Simulated process instance,decide,start,Wil,,2006-07-07 01:00:00+02:00 +,,,,1,35,Simulated process instance,decide,complete,Wil,1,2006-07-11 01:00:00+02:00 +,,,,,35,Simulated process instance,invite additional reviewer,start,Anne,,2006-09-02 01:00:00+02:00 +,,,,,35,Simulated process instance,invite additional reviewer,complete,Anne,,2006-09-06 01:00:00+02:00 +,,,accept,,35,Simulated process instance,get review X,complete,Mary,,2006-09-08 01:00:00+02:00 +,,,,,35,Simulated process instance,decide,start,Wil,,2006-09-11 01:00:00+02:00 +,,,,2,35,Simulated process instance,decide,complete,Wil,1,2006-09-16 01:00:00+02:00 +,,,,,35,Simulated process instance,invite additional reviewer,start,Mike,,2006-09-30 01:00:00+02:00 +,,,,,35,Simulated process instance,invite additional reviewer,complete,Mike,,2006-09-30 01:00:00+02:00 +,,,reject,,35,Simulated process instance,get review X,complete,Sam,,2006-10-01 01:00:00+02:00 +,,,,,35,Simulated process instance,decide,start,Wil,,2006-10-14 01:00:00+02:00 +,,,,2,35,Simulated process instance,decide,complete,Wil,2,2006-10-17 01:00:00+02:00 +,,,,,35,Simulated process instance,invite additional reviewer,start,Mike,,2007-04-08 01:00:00+02:00 +,,,,,35,Simulated process instance,invite additional reviewer,complete,Mike,,2007-04-12 01:00:00+02:00 +,,,accept,,35,Simulated process instance,get review X,complete,Carol,,2007-04-12 01:00:00+02:00 +,,,,,35,Simulated process instance,decide,start,Wil,,2008-08-29 01:00:00+02:00 +,,,,3,35,Simulated process instance,decide,complete,Wil,2,2008-09-03 01:00:00+02:00 +,,,,,35,Simulated process instance,invite additional reviewer,start,Mike,,2008-09-03 01:00:00+02:00 +,,,,,35,Simulated process instance,invite additional reviewer,complete,Mike,,2008-09-04 01:00:00+02:00 +,,,,,35,Simulated process instance,time-out X,complete,__INVALID__,,2008-09-06 01:00:00+02:00 +,,,,,35,Simulated process instance,decide,start,Wil,,2009-01-16 00:00:00+01:00 +,,,,3,35,Simulated process instance,decide,complete,Wil,2,2009-01-21 00:00:00+01:00 +,,,,,35,Simulated process instance,invite additional reviewer,start,Anne,,2009-01-21 00:00:00+01:00 +,,,,,35,Simulated process instance,invite additional reviewer,complete,Anne,,2009-01-25 00:00:00+01:00 +,,,,,35,Simulated process instance,time-out X,complete,__INVALID__,,2009-01-29 00:00:00+01:00 +,,,,,35,Simulated process instance,decide,start,Wil,,2009-02-04 00:00:00+01:00 +,,,,3,35,Simulated process instance,decide,complete,Wil,2,2009-02-05 00:00:00+01:00 +,,,,,35,Simulated process instance,accept,start,Mike,,2009-02-05 00:00:00+01:00 +,,,,,35,Simulated process instance,accept,complete,Mike,,2009-02-10 00:00:00+01:00 +,,,,,36,Simulated process instance,invite reviewers,start,Mike,,2006-05-23 01:00:00+02:00 +,,,,,36,Simulated process instance,invite reviewers,complete,Mike,,2006-05-25 01:00:00+02:00 +,,,,,36,Simulated process instance,time-out 3,complete,__INVALID__,,2006-05-29 01:00:00+02:00 +,,,,,36,Simulated process instance,time-out 1,complete,__INVALID__,,2006-05-29 01:00:00+02:00 +,,,,,36,Simulated process instance,time-out 2,complete,__INVALID__,,2006-05-31 01:00:00+02:00 +,,,,,36,Simulated process instance,collect reviews,start,Mike,,2006-06-02 01:00:00+02:00 +,,,,,36,Simulated process instance,collect reviews,complete,Mike,,2006-06-07 01:00:00+02:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2006-08-09 01:00:00+02:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,0,2006-08-13 01:00:00+02:00 +,,,,,36,Simulated process instance,invite additional reviewer,start,Mike,,2007-01-04 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,complete,Mike,,2007-01-07 00:00:00+01:00 +,,,,,36,Simulated process instance,time-out X,complete,__INVALID__,,2007-01-16 00:00:00+01:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2008-01-13 00:00:00+01:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,0,2008-01-14 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,start,Mike,,2008-01-16 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,complete,Mike,,2008-01-17 00:00:00+01:00 +,,,,,36,Simulated process instance,time-out X,complete,__INVALID__,,2008-01-23 00:00:00+01:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2008-06-01 01:00:00+02:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,0,2008-06-03 01:00:00+02:00 +,,,,,36,Simulated process instance,invite additional reviewer,start,Mike,,2008-06-03 01:00:00+02:00 +,,,,,36,Simulated process instance,invite additional reviewer,complete,Mike,,2008-06-05 01:00:00+02:00 +,,,,,36,Simulated process instance,time-out X,complete,__INVALID__,,2008-06-10 01:00:00+02:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2008-08-15 01:00:00+02:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,0,2008-08-18 01:00:00+02:00 +,,,,,36,Simulated process instance,invite additional reviewer,start,Anne,,2008-08-18 01:00:00+02:00 +,,,,,36,Simulated process instance,invite additional reviewer,complete,Anne,,2008-08-21 01:00:00+02:00 +,,,reject,,36,Simulated process instance,get review X,complete,Sam,,2008-08-23 01:00:00+02:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2009-02-12 00:00:00+01:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,1,2009-02-16 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,start,Mike,,2009-02-16 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,complete,Mike,,2009-02-21 00:00:00+01:00 +,,,,,36,Simulated process instance,time-out X,complete,__INVALID__,,2009-02-22 00:00:00+01:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2009-02-24 00:00:00+01:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,1,2009-02-28 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,start,Anne,,2009-02-28 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,complete,Anne,,2009-03-01 00:00:00+01:00 +,,,,,36,Simulated process instance,time-out X,complete,__INVALID__,,2009-03-03 00:00:00+01:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2009-04-13 01:00:00+02:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,1,2009-04-16 01:00:00+02:00 +,,,,,36,Simulated process instance,invite additional reviewer,start,Mike,,2009-04-16 01:00:00+02:00 +,,,,,36,Simulated process instance,invite additional reviewer,complete,Mike,,2009-04-21 01:00:00+02:00 +,,,reject,,36,Simulated process instance,get review X,complete,Pam,,2009-04-23 01:00:00+02:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2009-12-14 00:00:00+01:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,2,2009-12-16 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,start,Mike,,2009-12-16 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,complete,Mike,,2009-12-18 00:00:00+01:00 +,,,,,36,Simulated process instance,time-out X,complete,__INVALID__,,2010-01-01 00:00:00+01:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2010-02-26 00:00:00+01:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,2,2010-03-01 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,start,Mike,,2010-03-01 00:00:00+01:00 +,,,,,36,Simulated process instance,invite additional reviewer,complete,Mike,,2010-03-02 00:00:00+01:00 +,,,reject,,36,Simulated process instance,get review X,complete,Pam,,2010-03-06 00:00:00+01:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2010-04-12 01:00:00+02:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,3,2010-04-17 01:00:00+02:00 +,,,,,36,Simulated process instance,invite additional reviewer,start,Anne,,2010-04-17 01:00:00+02:00 +,,,,,36,Simulated process instance,invite additional reviewer,complete,Anne,,2010-04-18 01:00:00+02:00 +,,,,,36,Simulated process instance,time-out X,complete,__INVALID__,,2010-04-21 01:00:00+02:00 +,,,,,36,Simulated process instance,decide,start,Wil,,2010-04-21 01:00:00+02:00 +,,,,1,36,Simulated process instance,decide,complete,Wil,3,2010-04-21 01:00:00+02:00 +,,,,,36,Simulated process instance,reject,start,Mike,,2010-04-21 01:00:00+02:00 +,,,,,36,Simulated process instance,reject,complete,Mike,,2010-04-21 01:00:00+02:00 +,,,,,37,Simulated process instance,invite reviewers,start,Mike,,2006-05-31 01:00:00+02:00 +,,,,,37,Simulated process instance,invite reviewers,complete,Mike,,2006-06-02 01:00:00+02:00 +,,,,,37,Simulated process instance,time-out 3,complete,__INVALID__,,2006-06-02 01:00:00+02:00 +,,,,,37,Simulated process instance,time-out 2,complete,__INVALID__,,2006-06-07 01:00:00+02:00 +,,,,,37,Simulated process instance,time-out 1,complete,__INVALID__,,2006-06-08 01:00:00+02:00 +,,,,,37,Simulated process instance,collect reviews,start,Mike,,2006-06-08 01:00:00+02:00 +,,,,,37,Simulated process instance,collect reviews,complete,Mike,,2006-06-13 01:00:00+02:00 +,,,,,37,Simulated process instance,decide,start,Wil,,2006-06-18 01:00:00+02:00 +,,,,0,37,Simulated process instance,decide,complete,Wil,1,2006-06-18 01:00:00+02:00 +,,,,,37,Simulated process instance,invite additional reviewer,start,Anne,,2006-06-22 01:00:00+02:00 +,,,,,37,Simulated process instance,invite additional reviewer,complete,Anne,,2006-06-23 01:00:00+02:00 +,,,,,37,Simulated process instance,time-out X,complete,__INVALID__,,2006-06-26 01:00:00+02:00 +,,,,,37,Simulated process instance,decide,start,Wil,,2006-07-01 01:00:00+02:00 +,,,,0,37,Simulated process instance,decide,complete,Wil,1,2006-07-01 01:00:00+02:00 +,,,,,37,Simulated process instance,invite additional reviewer,start,Mike,,2006-07-07 01:00:00+02:00 +,,,,,37,Simulated process instance,invite additional reviewer,complete,Mike,,2006-07-09 01:00:00+02:00 +,,,reject,,37,Simulated process instance,get review X,complete,Mary,,2006-07-13 01:00:00+02:00 +,,,,,37,Simulated process instance,decide,start,Wil,,2007-02-28 00:00:00+01:00 +,,,,0,37,Simulated process instance,decide,complete,Wil,2,2007-03-01 00:00:00+01:00 +,,,,,37,Simulated process instance,invite additional reviewer,start,Mike,,2007-03-01 00:00:00+01:00 +,,,,,37,Simulated process instance,invite additional reviewer,complete,Mike,,2007-03-02 00:00:00+01:00 +,,,,,37,Simulated process instance,time-out X,complete,__INVALID__,,2007-03-06 00:00:00+01:00 +,,,,,37,Simulated process instance,decide,start,Wil,,2007-05-31 01:00:00+02:00 +,,,,0,37,Simulated process instance,decide,complete,Wil,2,2007-06-01 01:00:00+02:00 +,,,,,37,Simulated process instance,invite additional reviewer,start,Mike,,2007-06-01 01:00:00+02:00 +,,,,,37,Simulated process instance,invite additional reviewer,complete,Mike,,2007-06-06 01:00:00+02:00 +,,,reject,,37,Simulated process instance,get review X,complete,Pam,,2007-06-06 01:00:00+02:00 +,,,,,37,Simulated process instance,decide,start,Wil,,2007-10-22 01:00:00+02:00 +,,,,0,37,Simulated process instance,decide,complete,Wil,3,2007-10-26 01:00:00+02:00 +,,,,,37,Simulated process instance,invite additional reviewer,start,Mike,,2007-10-26 01:00:00+02:00 +,,,,,37,Simulated process instance,invite additional reviewer,complete,Mike,,2007-10-28 01:00:00+02:00 +,,,,,37,Simulated process instance,time-out X,complete,__INVALID__,,2007-10-31 00:00:00+01:00 +,,,,,37,Simulated process instance,decide,start,Wil,,2008-09-24 01:00:00+02:00 +,,,,0,37,Simulated process instance,decide,complete,Wil,3,2008-09-25 01:00:00+02:00 +,,,,,37,Simulated process instance,invite additional reviewer,start,Anne,,2008-09-25 01:00:00+02:00 +,,,,,37,Simulated process instance,invite additional reviewer,complete,Anne,,2008-09-30 01:00:00+02:00 +,,,accept,,37,Simulated process instance,get review X,complete,John,,2008-10-01 01:00:00+02:00 +,,,,,37,Simulated process instance,decide,start,Wil,,2009-01-22 00:00:00+01:00 +,,,,1,37,Simulated process instance,decide,complete,Wil,3,2009-01-25 00:00:00+01:00 +,,,,,37,Simulated process instance,reject,start,Mike,,2009-01-25 00:00:00+01:00 +,,,,,37,Simulated process instance,reject,complete,Mike,,2009-01-30 00:00:00+01:00 +,,,,,38,Simulated process instance,invite reviewers,start,Anne,,2006-06-01 01:00:00+02:00 +,,,,,38,Simulated process instance,invite reviewers,complete,Anne,,2006-06-04 01:00:00+02:00 +,,,,,38,Simulated process instance,time-out 1,complete,__INVALID__,,2006-06-05 01:00:00+02:00 +,,accept,,,38,Simulated process instance,get review 3,complete,Carol,,2006-06-08 01:00:00+02:00 +,,,,,38,Simulated process instance,time-out 2,complete,__INVALID__,,2006-06-08 01:00:00+02:00 +,,,,,38,Simulated process instance,collect reviews,start,Anne,,2006-06-10 01:00:00+02:00 +,,,,,38,Simulated process instance,collect reviews,complete,Anne,,2006-06-14 01:00:00+02:00 +,,,,,38,Simulated process instance,decide,start,Wil,,2006-07-07 01:00:00+02:00 +,,,,2,38,Simulated process instance,decide,complete,Wil,0,2006-07-07 01:00:00+02:00 +,,,,,38,Simulated process instance,invite additional reviewer,start,Mike,,2006-08-22 01:00:00+02:00 +,,,,,38,Simulated process instance,invite additional reviewer,complete,Mike,,2006-08-27 01:00:00+02:00 +,,,reject,,38,Simulated process instance,get review X,complete,Pam,,2006-08-30 01:00:00+02:00 +,,,,,38,Simulated process instance,decide,start,Wil,,2006-09-08 01:00:00+02:00 +,,,,2,38,Simulated process instance,decide,complete,Wil,1,2006-09-11 01:00:00+02:00 +,,,,,38,Simulated process instance,invite additional reviewer,start,Anne,,2006-12-09 00:00:00+01:00 +,,,,,38,Simulated process instance,invite additional reviewer,complete,Anne,,2006-12-10 00:00:00+01:00 +,,,,,38,Simulated process instance,time-out X,complete,__INVALID__,,2006-12-19 00:00:00+01:00 +,,,,,38,Simulated process instance,decide,start,Wil,,2007-09-04 01:00:00+02:00 +,,,,2,38,Simulated process instance,decide,complete,Wil,1,2007-09-06 01:00:00+02:00 +,,,,,38,Simulated process instance,invite additional reviewer,start,Mike,,2007-09-06 01:00:00+02:00 +,,,,,38,Simulated process instance,invite additional reviewer,complete,Mike,,2007-09-09 01:00:00+02:00 +,,,,,38,Simulated process instance,time-out X,complete,__INVALID__,,2007-09-11 01:00:00+02:00 +,,,,,38,Simulated process instance,decide,start,Wil,,2007-10-09 01:00:00+02:00 +,,,,2,38,Simulated process instance,decide,complete,Wil,1,2007-10-12 01:00:00+02:00 +,,,,,38,Simulated process instance,invite additional reviewer,start,Mike,,2007-10-12 01:00:00+02:00 +,,,,,38,Simulated process instance,invite additional reviewer,complete,Mike,,2007-10-14 01:00:00+02:00 +,,,reject,,38,Simulated process instance,get review X,complete,John,,2007-10-18 01:00:00+02:00 +,,,,,38,Simulated process instance,decide,start,Wil,,2007-12-19 00:00:00+01:00 +,,,,2,38,Simulated process instance,decide,complete,Wil,2,2007-12-24 00:00:00+01:00 +,,,,,38,Simulated process instance,invite additional reviewer,start,Mike,,2007-12-24 00:00:00+01:00 +,,,,,38,Simulated process instance,invite additional reviewer,complete,Mike,,2008-01-01 00:00:00+01:00 +,,,,,38,Simulated process instance,time-out X,complete,__INVALID__,,2008-01-01 00:00:00+01:00 +,,,,,38,Simulated process instance,decide,start,Wil,,2008-02-21 00:00:00+01:00 +,,,,2,38,Simulated process instance,decide,complete,Wil,2,2008-02-21 00:00:00+01:00 +,,,,,38,Simulated process instance,invite additional reviewer,start,Mike,,2008-02-21 00:00:00+01:00 +,,,,,38,Simulated process instance,invite additional reviewer,complete,Mike,,2008-02-23 00:00:00+01:00 +,,,accept,,38,Simulated process instance,get review X,complete,Carol,,2008-02-27 00:00:00+01:00 +,,,,,38,Simulated process instance,decide,start,Wil,,2008-07-01 01:00:00+02:00 +,,,,3,38,Simulated process instance,decide,complete,Wil,2,2008-07-05 01:00:00+02:00 +,,,,,38,Simulated process instance,invite additional reviewer,start,Mike,,2008-07-05 01:00:00+02:00 +,,,,,38,Simulated process instance,invite additional reviewer,complete,Mike,,2008-07-06 01:00:00+02:00 +,,,,,38,Simulated process instance,time-out X,complete,__INVALID__,,2008-07-07 01:00:00+02:00 +,,,,,38,Simulated process instance,decide,start,Wil,,2009-04-16 01:00:00+02:00 +,,,,3,38,Simulated process instance,decide,complete,Wil,2,2009-04-20 01:00:00+02:00 +,,,,,38,Simulated process instance,accept,start,Anne,,2009-04-20 01:00:00+02:00 +,,,,,38,Simulated process instance,accept,complete,Anne,,2009-04-20 01:00:00+02:00 +,,,,,39,Simulated process instance,invite reviewers,start,Mike,,2006-06-08 01:00:00+02:00 +,,,,,39,Simulated process instance,invite reviewers,complete,Mike,,2006-06-08 01:00:00+02:00 +,reject,,,,39,Simulated process instance,get review 2,complete,Carol,,2006-06-12 01:00:00+02:00 +,,accept,,,39,Simulated process instance,get review 3,complete,Mary,,2006-06-12 01:00:00+02:00 +,,,,,39,Simulated process instance,time-out 1,complete,__INVALID__,,2006-06-14 01:00:00+02:00 +,,,,,39,Simulated process instance,collect reviews,start,Anne,,2006-06-14 01:00:00+02:00 +,,,,,39,Simulated process instance,collect reviews,complete,Anne,,2006-06-18 01:00:00+02:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2006-06-25 01:00:00+02:00 +,,,,1,39,Simulated process instance,decide,complete,Wil,1,2006-06-29 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Mike,,2006-08-16 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Mike,,2006-08-20 01:00:00+02:00 +,,,,,39,Simulated process instance,time-out X,complete,__INVALID__,,2006-08-20 01:00:00+02:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2007-01-28 00:00:00+01:00 +,,,,1,39,Simulated process instance,decide,complete,Wil,1,2007-02-02 00:00:00+01:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Mike,,2007-02-07 00:00:00+01:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Mike,,2007-02-09 00:00:00+01:00 +,,,,,39,Simulated process instance,time-out X,complete,__INVALID__,,2007-02-19 00:00:00+01:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2007-05-20 01:00:00+02:00 +,,,,1,39,Simulated process instance,decide,complete,Wil,1,2007-05-21 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Mike,,2007-05-21 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Mike,,2007-05-24 01:00:00+02:00 +,,,,,39,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-28 01:00:00+02:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2008-05-11 01:00:00+02:00 +,,,,1,39,Simulated process instance,decide,complete,Wil,1,2008-05-14 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Anne,,2008-05-14 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Anne,,2008-05-17 01:00:00+02:00 +,,,,,39,Simulated process instance,time-out X,complete,__INVALID__,,2008-05-26 01:00:00+02:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2008-06-24 01:00:00+02:00 +,,,,1,39,Simulated process instance,decide,complete,Wil,1,2008-06-25 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Mike,,2008-06-25 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Mike,,2008-06-27 01:00:00+02:00 +,,,,,39,Simulated process instance,time-out X,complete,__INVALID__,,2008-07-03 01:00:00+02:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2008-10-21 01:00:00+02:00 +,,,,1,39,Simulated process instance,decide,complete,Wil,1,2008-10-24 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Anne,,2008-10-24 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Anne,,2008-10-29 00:00:00+01:00 +,,,,,39,Simulated process instance,time-out X,complete,__INVALID__,,2008-11-05 00:00:00+01:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2009-02-01 00:00:00+01:00 +,,,,1,39,Simulated process instance,decide,complete,Wil,1,2009-02-04 00:00:00+01:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Anne,,2009-02-04 00:00:00+01:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Anne,,2009-02-08 00:00:00+01:00 +,,,reject,,39,Simulated process instance,get review X,complete,Sam,,2009-02-10 00:00:00+01:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2009-03-25 00:00:00+01:00 +,,,,1,39,Simulated process instance,decide,complete,Wil,2,2009-03-29 00:00:00+01:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Anne,,2009-03-29 00:00:00+01:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Anne,,2009-04-01 01:00:00+02:00 +,,,,,39,Simulated process instance,time-out X,complete,__INVALID__,,2009-04-04 01:00:00+02:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2009-06-01 01:00:00+02:00 +,,,,1,39,Simulated process instance,decide,complete,Wil,2,2009-06-05 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Anne,,2009-06-05 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Anne,,2009-06-10 01:00:00+02:00 +,,,accept,,39,Simulated process instance,get review X,complete,Mary,,2009-06-10 01:00:00+02:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2009-06-18 01:00:00+02:00 +,,,,2,39,Simulated process instance,decide,complete,Wil,2,2009-06-18 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Anne,,2009-06-21 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Anne,,2009-06-23 01:00:00+02:00 +,,,reject,,39,Simulated process instance,get review X,complete,Sam,,2009-06-27 01:00:00+02:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2009-08-16 01:00:00+02:00 +,,,,2,39,Simulated process instance,decide,complete,Wil,3,2009-08-19 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,start,Anne,,2009-08-19 01:00:00+02:00 +,,,,,39,Simulated process instance,invite additional reviewer,complete,Anne,,2009-08-23 01:00:00+02:00 +,,,reject,,39,Simulated process instance,get review X,complete,Pete,,2009-08-28 01:00:00+02:00 +,,,,,39,Simulated process instance,decide,start,Wil,,2009-10-10 01:00:00+02:00 +,,,,2,39,Simulated process instance,decide,complete,Wil,4,2009-10-14 01:00:00+02:00 +,,,,,39,Simulated process instance,reject,start,Anne,,2009-10-15 01:00:00+02:00 +,,,,,39,Simulated process instance,reject,complete,Anne,,2009-10-15 01:00:00+02:00 +,,,,,4,Simulated process instance,invite reviewers,start,Mike,,2006-01-10 00:00:00+01:00 +,,,,,4,Simulated process instance,invite reviewers,complete,Mike,,2006-01-14 00:00:00+01:00 +,,,,,4,Simulated process instance,time-out 1,complete,__INVALID__,,2006-01-15 00:00:00+01:00 +,,reject,,,4,Simulated process instance,get review 3,complete,John,,2006-01-19 00:00:00+01:00 +,,,,,4,Simulated process instance,time-out 2,complete,__INVALID__,,2006-01-22 00:00:00+01:00 +,,,,,4,Simulated process instance,collect reviews,start,Mike,,2006-01-23 00:00:00+01:00 +,,,,,4,Simulated process instance,collect reviews,complete,Mike,,2006-01-25 00:00:00+01:00 +,,,,,4,Simulated process instance,decide,start,Wil,,2006-01-27 00:00:00+01:00 +,,,,0,4,Simulated process instance,decide,complete,Wil,2,2006-01-30 00:00:00+01:00 +,,,,,4,Simulated process instance,invite additional reviewer,start,Anne,,2006-01-30 00:00:00+01:00 +,,,,,4,Simulated process instance,invite additional reviewer,complete,Anne,,2006-01-30 00:00:00+01:00 +,,,reject,,4,Simulated process instance,get review X,complete,Pam,,2006-02-03 00:00:00+01:00 +,,,,,4,Simulated process instance,decide,start,Wil,,2006-02-10 00:00:00+01:00 +,,,,0,4,Simulated process instance,decide,complete,Wil,3,2006-02-14 00:00:00+01:00 +,,,,,4,Simulated process instance,invite additional reviewer,start,Anne,,2006-02-14 00:00:00+01:00 +,,,,,4,Simulated process instance,invite additional reviewer,complete,Anne,,2006-02-15 00:00:00+01:00 +,,,,,4,Simulated process instance,time-out X,complete,__INVALID__,,2006-02-16 00:00:00+01:00 +,,,,,4,Simulated process instance,decide,start,Wil,,2006-03-18 00:00:00+01:00 +,,,,0,4,Simulated process instance,decide,complete,Wil,3,2006-03-22 00:00:00+01:00 +,,,,,4,Simulated process instance,reject,start,Mike,,2006-03-23 00:00:00+01:00 +,,,,,4,Simulated process instance,reject,complete,Mike,,2006-03-26 00:00:00+01:00 +,,,,,40,Simulated process instance,invite reviewers,start,Anne,,2006-06-07 01:00:00+02:00 +,,,,,40,Simulated process instance,invite reviewers,complete,Anne,,2006-06-07 01:00:00+02:00 +,reject,,,,40,Simulated process instance,get review 2,complete,Pete,,2006-06-09 01:00:00+02:00 +,,accept,,,40,Simulated process instance,get review 3,complete,Sara,,2006-06-09 01:00:00+02:00 +,,,,,40,Simulated process instance,time-out 1,complete,__INVALID__,,2006-06-17 01:00:00+02:00 +,,,,,40,Simulated process instance,collect reviews,start,Anne,,2006-06-18 01:00:00+02:00 +,,,,,40,Simulated process instance,collect reviews,complete,Anne,,2006-06-22 01:00:00+02:00 +,,,,,40,Simulated process instance,decide,start,Wil,,2006-06-22 01:00:00+02:00 +,,,,1,40,Simulated process instance,decide,complete,Wil,1,2006-06-25 01:00:00+02:00 +,,,,,40,Simulated process instance,invite additional reviewer,start,Anne,,2006-08-16 01:00:00+02:00 +,,,,,40,Simulated process instance,invite additional reviewer,complete,Anne,,2006-08-16 01:00:00+02:00 +,,,accept,,40,Simulated process instance,get review X,complete,Mary,,2006-08-20 01:00:00+02:00 +,,,,,40,Simulated process instance,decide,start,Wil,,2007-10-06 01:00:00+02:00 +,,,,2,40,Simulated process instance,decide,complete,Wil,1,2007-10-09 01:00:00+02:00 +,,,,,40,Simulated process instance,invite additional reviewer,start,Mike,,2007-10-09 01:00:00+02:00 +,,,,,40,Simulated process instance,invite additional reviewer,complete,Mike,,2007-10-09 01:00:00+02:00 +,,,accept,,40,Simulated process instance,get review X,complete,Carol,,2007-10-11 01:00:00+02:00 +,,,,,40,Simulated process instance,decide,start,Wil,,2008-02-10 00:00:00+01:00 +,,,,3,40,Simulated process instance,decide,complete,Wil,1,2008-02-13 00:00:00+01:00 +,,,,,40,Simulated process instance,accept,start,Anne,,2008-02-13 00:00:00+01:00 +,,,,,40,Simulated process instance,accept,complete,Anne,,2008-02-16 00:00:00+01:00 +,,,,,41,Simulated process instance,invite reviewers,start,Mike,,2006-06-07 01:00:00+02:00 +,,,,,41,Simulated process instance,invite reviewers,complete,Mike,,2006-06-08 01:00:00+02:00 +,,accept,,,41,Simulated process instance,get review 3,complete,Sam,,2006-06-11 01:00:00+02:00 +,,,,,41,Simulated process instance,time-out 1,complete,__INVALID__,,2006-06-11 01:00:00+02:00 +,accept,,,,41,Simulated process instance,get review 2,complete,John,,2006-06-11 01:00:00+02:00 +,,,,,41,Simulated process instance,collect reviews,start,Mike,,2006-06-13 01:00:00+02:00 +,,,,,41,Simulated process instance,collect reviews,complete,Mike,,2006-06-15 01:00:00+02:00 +,,,,,41,Simulated process instance,decide,start,Wil,,2006-07-07 01:00:00+02:00 +,,,,2,41,Simulated process instance,decide,complete,Wil,0,2006-07-07 01:00:00+02:00 +,,,,,41,Simulated process instance,invite additional reviewer,start,Anne,,2006-10-03 01:00:00+02:00 +,,,,,41,Simulated process instance,invite additional reviewer,complete,Anne,,2006-10-06 01:00:00+02:00 +,,,,,41,Simulated process instance,time-out X,complete,__INVALID__,,2006-10-06 01:00:00+02:00 +,,,,,41,Simulated process instance,decide,start,Wil,,2007-02-09 00:00:00+01:00 +,,,,2,41,Simulated process instance,decide,complete,Wil,0,2007-02-13 00:00:00+01:00 +,,,,,41,Simulated process instance,invite additional reviewer,start,Anne,,2007-03-11 00:00:00+01:00 +,,,,,41,Simulated process instance,invite additional reviewer,complete,Anne,,2007-03-15 00:00:00+01:00 +,,,,,41,Simulated process instance,time-out X,complete,__INVALID__,,2007-03-25 00:00:00+01:00 +,,,,,41,Simulated process instance,decide,start,Wil,,2007-07-22 01:00:00+02:00 +,,,,2,41,Simulated process instance,decide,complete,Wil,0,2007-07-25 01:00:00+02:00 +,,,,,41,Simulated process instance,invite additional reviewer,start,Mike,,2007-07-25 01:00:00+02:00 +,,,,,41,Simulated process instance,invite additional reviewer,complete,Mike,,2007-07-28 01:00:00+02:00 +,,,,,41,Simulated process instance,time-out X,complete,__INVALID__,,2007-08-02 01:00:00+02:00 +,,,,,41,Simulated process instance,decide,start,Wil,,2007-08-10 01:00:00+02:00 +,,,,2,41,Simulated process instance,decide,complete,Wil,0,2007-08-10 01:00:00+02:00 +,,,,,41,Simulated process instance,invite additional reviewer,start,Mike,,2007-08-11 01:00:00+02:00 +,,,,,41,Simulated process instance,invite additional reviewer,complete,Mike,,2007-08-16 01:00:00+02:00 +,,,accept,,41,Simulated process instance,get review X,complete,Pam,,2007-08-20 01:00:00+02:00 +,,,,,41,Simulated process instance,decide,start,Wil,,2008-07-07 01:00:00+02:00 +,,,,3,41,Simulated process instance,decide,complete,Wil,0,2008-07-09 01:00:00+02:00 +,,,,,41,Simulated process instance,accept,start,Mike,,2008-07-09 01:00:00+02:00 +,,,,,41,Simulated process instance,accept,complete,Mike,,2008-07-11 01:00:00+02:00 +,,,,,42,Simulated process instance,invite reviewers,start,Anne,,2006-07-03 01:00:00+02:00 +,,,,,42,Simulated process instance,invite reviewers,complete,Anne,,2006-07-06 01:00:00+02:00 +reject,,,,,42,Simulated process instance,get review 1,complete,Pam,,2006-07-06 01:00:00+02:00 +,,accept,,,42,Simulated process instance,get review 3,complete,Sara,,2006-07-09 01:00:00+02:00 +,reject,,,,42,Simulated process instance,get review 2,complete,John,,2006-07-10 01:00:00+02:00 +,,,,,42,Simulated process instance,collect reviews,start,Anne,,2006-07-13 01:00:00+02:00 +,,,,,42,Simulated process instance,collect reviews,complete,Anne,,2006-07-17 01:00:00+02:00 +,,,,,42,Simulated process instance,decide,start,Wil,,2007-02-13 00:00:00+01:00 +,,,,1,42,Simulated process instance,decide,complete,Wil,2,2007-02-15 00:00:00+01:00 +,,,,,42,Simulated process instance,invite additional reviewer,start,Mike,,2007-03-03 00:00:00+01:00 +,,,,,42,Simulated process instance,invite additional reviewer,complete,Mike,,2007-03-03 00:00:00+01:00 +,,,reject,,42,Simulated process instance,get review X,complete,Sara,,2007-03-03 00:00:00+01:00 +,,,,,42,Simulated process instance,decide,start,Wil,,2007-06-12 01:00:00+02:00 +,,,,1,42,Simulated process instance,decide,complete,Wil,3,2007-06-17 01:00:00+02:00 +,,,,,42,Simulated process instance,invite additional reviewer,start,Mike,,2007-06-17 01:00:00+02:00 +,,,,,42,Simulated process instance,invite additional reviewer,complete,Mike,,2007-06-21 01:00:00+02:00 +,,,,,42,Simulated process instance,time-out X,complete,__INVALID__,,2007-06-25 01:00:00+02:00 +,,,,,42,Simulated process instance,decide,start,Wil,,2008-02-04 00:00:00+01:00 +,,,,1,42,Simulated process instance,decide,complete,Wil,3,2008-02-07 00:00:00+01:00 +,,,,,42,Simulated process instance,invite additional reviewer,start,Anne,,2008-02-07 00:00:00+01:00 +,,,,,42,Simulated process instance,invite additional reviewer,complete,Anne,,2008-02-10 00:00:00+01:00 +,,,,,42,Simulated process instance,time-out X,complete,__INVALID__,,2008-02-17 00:00:00+01:00 +,,,,,42,Simulated process instance,decide,start,Wil,,2008-07-25 01:00:00+02:00 +,,,,1,42,Simulated process instance,decide,complete,Wil,3,2008-07-29 01:00:00+02:00 +,,,,,42,Simulated process instance,reject,start,Anne,,2008-07-29 01:00:00+02:00 +,,,,,42,Simulated process instance,reject,complete,Anne,,2008-08-01 01:00:00+02:00 +,,,,,43,Simulated process instance,invite reviewers,start,Anne,,2006-06-18 01:00:00+02:00 +,,,,,43,Simulated process instance,invite reviewers,complete,Anne,,2006-06-18 01:00:00+02:00 +,,,,,43,Simulated process instance,time-out 1,complete,__INVALID__,,2006-06-19 01:00:00+02:00 +,,reject,,,43,Simulated process instance,get review 3,complete,Sara,,2006-06-20 01:00:00+02:00 +,,,,,43,Simulated process instance,time-out 2,complete,__INVALID__,,2006-06-20 01:00:00+02:00 +,,,,,43,Simulated process instance,collect reviews,start,Anne,,2006-06-23 01:00:00+02:00 +,,,,,43,Simulated process instance,collect reviews,complete,Anne,,2006-06-27 01:00:00+02:00 +,,,,,43,Simulated process instance,decide,start,Wil,,2006-06-29 01:00:00+02:00 +,,,,1,43,Simulated process instance,decide,complete,Wil,1,2006-07-01 01:00:00+02:00 +,,,,,43,Simulated process instance,invite additional reviewer,start,Mike,,2006-07-09 01:00:00+02:00 +,,,,,43,Simulated process instance,invite additional reviewer,complete,Mike,,2006-07-14 01:00:00+02:00 +,,,accept,,43,Simulated process instance,get review X,complete,John,,2006-07-16 01:00:00+02:00 +,,,,,43,Simulated process instance,decide,start,Wil,,2006-10-19 01:00:00+02:00 +,,,,2,43,Simulated process instance,decide,complete,Wil,1,2006-10-22 01:00:00+02:00 +,,,,,43,Simulated process instance,invite additional reviewer,start,Anne,,2006-10-30 00:00:00+01:00 +,,,,,43,Simulated process instance,invite additional reviewer,complete,Anne,,2006-10-31 00:00:00+01:00 +,,,,,43,Simulated process instance,time-out X,complete,__INVALID__,,2006-11-03 00:00:00+01:00 +,,,,,43,Simulated process instance,decide,start,Wil,,2008-03-08 00:00:00+01:00 +,,,,2,43,Simulated process instance,decide,complete,Wil,1,2008-03-09 00:00:00+01:00 +,,,,,43,Simulated process instance,invite additional reviewer,start,Anne,,2008-03-09 00:00:00+01:00 +,,,,,43,Simulated process instance,invite additional reviewer,complete,Anne,,2008-03-14 00:00:00+01:00 +,,,,,43,Simulated process instance,time-out X,complete,__INVALID__,,2008-03-14 00:00:00+01:00 +,,,,,43,Simulated process instance,decide,start,Wil,,2009-01-01 00:00:00+01:00 +,,,,2,43,Simulated process instance,decide,complete,Wil,1,2009-01-06 00:00:00+01:00 +,,,,,43,Simulated process instance,invite additional reviewer,start,Anne,,2009-01-06 00:00:00+01:00 +,,,,,43,Simulated process instance,invite additional reviewer,complete,Anne,,2009-01-09 00:00:00+01:00 +,,,accept,,43,Simulated process instance,get review X,complete,Sara,,2009-01-13 00:00:00+01:00 +,,,,,43,Simulated process instance,decide,start,Wil,,2009-02-19 00:00:00+01:00 +,,,,3,43,Simulated process instance,decide,complete,Wil,1,2009-02-21 00:00:00+01:00 +,,,,,43,Simulated process instance,accept,start,Mike,,2009-02-21 00:00:00+01:00 +,,,,,43,Simulated process instance,accept,complete,Mike,,2009-02-24 00:00:00+01:00 +,,,,,44,Simulated process instance,invite reviewers,start,Anne,,2006-07-03 01:00:00+02:00 +,,,,,44,Simulated process instance,invite reviewers,complete,Anne,,2006-07-03 01:00:00+02:00 +,,,,,44,Simulated process instance,time-out 2,complete,__INVALID__,,2006-07-07 01:00:00+02:00 +,,reject,,,44,Simulated process instance,get review 3,complete,Carol,,2006-07-07 01:00:00+02:00 +reject,,,,,44,Simulated process instance,get review 1,complete,Sam,,2006-07-08 01:00:00+02:00 +,,,,,44,Simulated process instance,collect reviews,start,Anne,,2006-07-10 01:00:00+02:00 +,,,,,44,Simulated process instance,collect reviews,complete,Anne,,2006-07-13 01:00:00+02:00 +,,,,,44,Simulated process instance,decide,start,Wil,,2006-09-24 01:00:00+02:00 +,,,,0,44,Simulated process instance,decide,complete,Wil,3,2006-09-24 01:00:00+02:00 +,,,,,44,Simulated process instance,reject,start,Anne,,2006-09-27 01:00:00+02:00 +,,,,,44,Simulated process instance,reject,complete,Anne,,2006-09-27 01:00:00+02:00 +,,,,,45,Simulated process instance,invite reviewers,start,Anne,,2006-06-30 01:00:00+02:00 +,,,,,45,Simulated process instance,invite reviewers,complete,Anne,,2006-07-03 01:00:00+02:00 +,,,,,45,Simulated process instance,time-out 3,complete,__INVALID__,,2006-07-06 01:00:00+02:00 +,,,,,45,Simulated process instance,time-out 1,complete,__INVALID__,,2006-07-07 01:00:00+02:00 +,,,,,45,Simulated process instance,time-out 2,complete,__INVALID__,,2006-07-09 01:00:00+02:00 +,,,,,45,Simulated process instance,collect reviews,start,Mike,,2006-07-27 01:00:00+02:00 +,,,,,45,Simulated process instance,collect reviews,complete,Mike,,2006-08-01 01:00:00+02:00 +,,,,,45,Simulated process instance,decide,start,Wil,,2006-10-22 01:00:00+02:00 +,,,,1,45,Simulated process instance,decide,complete,Wil,0,2006-10-25 01:00:00+02:00 +,,,,,45,Simulated process instance,invite additional reviewer,start,Anne,,2007-01-18 00:00:00+01:00 +,,,,,45,Simulated process instance,invite additional reviewer,complete,Anne,,2007-01-18 00:00:00+01:00 +,,,accept,,45,Simulated process instance,get review X,complete,Sam,,2007-01-20 00:00:00+01:00 +,,,,,45,Simulated process instance,decide,start,Wil,,2007-04-04 01:00:00+02:00 +,,,,2,45,Simulated process instance,decide,complete,Wil,0,2007-04-06 01:00:00+02:00 +,,,,,45,Simulated process instance,invite additional reviewer,start,Anne,,2007-04-27 01:00:00+02:00 +,,,,,45,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-01 01:00:00+02:00 +,,,reject,,45,Simulated process instance,get review X,complete,Sam,,2007-05-02 01:00:00+02:00 +,,,,,45,Simulated process instance,decide,start,Wil,,2007-05-10 01:00:00+02:00 +,,,,2,45,Simulated process instance,decide,complete,Wil,1,2007-05-12 01:00:00+02:00 +,,,,,45,Simulated process instance,invite additional reviewer,start,Anne,,2007-05-12 01:00:00+02:00 +,,,,,45,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-17 01:00:00+02:00 +,,,reject,,45,Simulated process instance,get review X,complete,Pete,,2007-05-21 01:00:00+02:00 +,,,,,45,Simulated process instance,decide,start,Wil,,2007-06-09 01:00:00+02:00 +,,,,2,45,Simulated process instance,decide,complete,Wil,2,2007-06-09 01:00:00+02:00 +,,,,,45,Simulated process instance,invite additional reviewer,start,Anne,,2007-06-09 01:00:00+02:00 +,,,,,45,Simulated process instance,invite additional reviewer,complete,Anne,,2007-06-14 01:00:00+02:00 +,,,accept,,45,Simulated process instance,get review X,complete,Sara,,2007-06-15 01:00:00+02:00 +,,,,,45,Simulated process instance,decide,start,Wil,,2008-04-07 01:00:00+02:00 +,,,,3,45,Simulated process instance,decide,complete,Wil,2,2008-04-08 01:00:00+02:00 +,,,,,45,Simulated process instance,accept,start,Anne,,2008-04-08 01:00:00+02:00 +,,,,,45,Simulated process instance,accept,complete,Anne,,2008-04-09 01:00:00+02:00 +,,,,,46,Simulated process instance,invite reviewers,start,Mike,,2006-06-29 01:00:00+02:00 +,,,,,46,Simulated process instance,invite reviewers,complete,Mike,,2006-07-02 01:00:00+02:00 +,,,,,46,Simulated process instance,time-out 1,complete,__INVALID__,,2006-07-02 01:00:00+02:00 +,,reject,,,46,Simulated process instance,get review 3,complete,Carol,,2006-07-03 01:00:00+02:00 +,,,,,46,Simulated process instance,time-out 2,complete,__INVALID__,,2006-07-04 01:00:00+02:00 +,,,,,46,Simulated process instance,collect reviews,start,Anne,,2006-07-17 01:00:00+02:00 +,,,,,46,Simulated process instance,collect reviews,complete,Anne,,2006-07-20 01:00:00+02:00 +,,,,,46,Simulated process instance,decide,start,Wil,,2006-11-06 00:00:00+01:00 +,,,,0,46,Simulated process instance,decide,complete,Wil,2,2006-11-10 00:00:00+01:00 +,,,,,46,Simulated process instance,invite additional reviewer,start,Anne,,2007-02-18 00:00:00+01:00 +,,,,,46,Simulated process instance,invite additional reviewer,complete,Anne,,2007-02-21 00:00:00+01:00 +,,,accept,,46,Simulated process instance,get review X,complete,Carol,,2007-02-24 00:00:00+01:00 +,,,,,46,Simulated process instance,decide,start,Wil,,2008-05-07 01:00:00+02:00 +,,,,1,46,Simulated process instance,decide,complete,Wil,2,2008-05-08 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,start,Anne,,2008-05-10 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,complete,Anne,,2008-05-11 01:00:00+02:00 +,,,accept,,46,Simulated process instance,get review X,complete,John,,2008-05-13 01:00:00+02:00 +,,,,,46,Simulated process instance,decide,start,Wil,,2008-06-13 01:00:00+02:00 +,,,,2,46,Simulated process instance,decide,complete,Wil,2,2008-06-16 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,start,Anne,,2008-06-17 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,complete,Anne,,2008-06-18 01:00:00+02:00 +,,,,,46,Simulated process instance,time-out X,complete,__INVALID__,,2008-06-24 01:00:00+02:00 +,,,,,46,Simulated process instance,decide,start,Wil,,2009-06-05 01:00:00+02:00 +,,,,2,46,Simulated process instance,decide,complete,Wil,2,2009-06-05 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,start,Mike,,2009-06-05 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,complete,Mike,,2009-06-08 01:00:00+02:00 +,,,,,46,Simulated process instance,time-out X,complete,__INVALID__,,2009-06-17 01:00:00+02:00 +,,,,,46,Simulated process instance,decide,start,Wil,,2009-07-22 01:00:00+02:00 +,,,,2,46,Simulated process instance,decide,complete,Wil,2,2009-07-26 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,start,Anne,,2009-07-26 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,complete,Anne,,2009-07-26 01:00:00+02:00 +,,,,,46,Simulated process instance,time-out X,complete,__INVALID__,,2009-07-27 01:00:00+02:00 +,,,,,46,Simulated process instance,decide,start,Wil,,2009-08-22 01:00:00+02:00 +,,,,2,46,Simulated process instance,decide,complete,Wil,2,2009-08-23 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,start,Mike,,2009-08-24 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,complete,Mike,,2009-08-25 01:00:00+02:00 +,,,,,46,Simulated process instance,time-out X,complete,__INVALID__,,2009-08-25 01:00:00+02:00 +,,,,,46,Simulated process instance,decide,start,Wil,,2010-05-01 01:00:00+02:00 +,,,,2,46,Simulated process instance,decide,complete,Wil,2,2010-05-01 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,start,Anne,,2010-05-01 01:00:00+02:00 +,,,,,46,Simulated process instance,invite additional reviewer,complete,Anne,,2010-05-03 01:00:00+02:00 +,,,reject,,46,Simulated process instance,get review X,complete,Pam,,2010-05-03 01:00:00+02:00 +,,,,,46,Simulated process instance,decide,start,Wil,,2010-05-17 01:00:00+02:00 +,,,,2,46,Simulated process instance,decide,complete,Wil,3,2010-05-17 01:00:00+02:00 +,,,,,46,Simulated process instance,reject,start,Mike,,2010-05-18 01:00:00+02:00 +,,,,,46,Simulated process instance,reject,complete,Mike,,2010-05-23 01:00:00+02:00 +,,,,,47,Simulated process instance,invite reviewers,start,Anne,,2006-07-25 01:00:00+02:00 +,,,,,47,Simulated process instance,invite reviewers,complete,Anne,,2006-07-28 01:00:00+02:00 +reject,,,,,47,Simulated process instance,get review 1,complete,Sam,,2006-07-29 01:00:00+02:00 +,,,,,47,Simulated process instance,time-out 2,complete,__INVALID__,,2006-07-30 01:00:00+02:00 +,,,,,47,Simulated process instance,time-out 3,complete,__INVALID__,,2006-08-07 01:00:00+02:00 +,,,,,47,Simulated process instance,collect reviews,start,Anne,,2006-08-16 01:00:00+02:00 +,,,,,47,Simulated process instance,collect reviews,complete,Anne,,2006-08-16 01:00:00+02:00 +,,,,,47,Simulated process instance,decide,start,Wil,,2006-08-18 01:00:00+02:00 +,,,,1,47,Simulated process instance,decide,complete,Wil,1,2006-08-21 01:00:00+02:00 +,,,,,47,Simulated process instance,invite additional reviewer,start,Mike,,2007-01-12 00:00:00+01:00 +,,,,,47,Simulated process instance,invite additional reviewer,complete,Mike,,2007-01-13 00:00:00+01:00 +,,,accept,,47,Simulated process instance,get review X,complete,John,,2007-01-17 00:00:00+01:00 +,,,,,47,Simulated process instance,decide,start,Wil,,2007-02-02 00:00:00+01:00 +,,,,2,47,Simulated process instance,decide,complete,Wil,1,2007-02-02 00:00:00+01:00 +,,,,,47,Simulated process instance,invite additional reviewer,start,Mike,,2007-03-16 00:00:00+01:00 +,,,,,47,Simulated process instance,invite additional reviewer,complete,Mike,,2007-03-21 00:00:00+01:00 +,,,accept,,47,Simulated process instance,get review X,complete,Sam,,2007-03-26 01:00:00+02:00 +,,,,,47,Simulated process instance,decide,start,Wil,,2008-08-01 01:00:00+02:00 +,,,,3,47,Simulated process instance,decide,complete,Wil,1,2008-08-05 01:00:00+02:00 +,,,,,47,Simulated process instance,invite additional reviewer,start,Anne,,2008-08-05 01:00:00+02:00 +,,,,,47,Simulated process instance,invite additional reviewer,complete,Anne,,2008-08-06 01:00:00+02:00 +,,,accept,,47,Simulated process instance,get review X,complete,John,,2008-08-09 01:00:00+02:00 +,,,,,47,Simulated process instance,decide,start,Wil,,2009-04-07 01:00:00+02:00 +,,,,4,47,Simulated process instance,decide,complete,Wil,1,2009-04-12 01:00:00+02:00 +,,,,,47,Simulated process instance,invite additional reviewer,start,Mike,,2009-04-12 01:00:00+02:00 +,,,,,47,Simulated process instance,invite additional reviewer,complete,Mike,,2009-04-16 01:00:00+02:00 +,,,accept,,47,Simulated process instance,get review X,complete,Sam,,2009-04-17 01:00:00+02:00 +,,,,,47,Simulated process instance,decide,start,Wil,,2009-07-07 01:00:00+02:00 +,,,,5,47,Simulated process instance,decide,complete,Wil,1,2009-07-08 01:00:00+02:00 +,,,,,47,Simulated process instance,accept,start,Anne,,2009-07-08 01:00:00+02:00 +,,,,,47,Simulated process instance,accept,complete,Anne,,2009-07-08 01:00:00+02:00 +,,,,,48,Simulated process instance,invite reviewers,start,Mike,,2006-07-02 01:00:00+02:00 +,,,,,48,Simulated process instance,invite reviewers,complete,Mike,,2006-07-07 01:00:00+02:00 +,,reject,,,48,Simulated process instance,get review 3,complete,Mary,,2006-07-07 01:00:00+02:00 +reject,,,,,48,Simulated process instance,get review 1,complete,Pete,,2006-07-12 01:00:00+02:00 +,,,,,48,Simulated process instance,time-out 2,complete,__INVALID__,,2006-07-16 01:00:00+02:00 +,,,,,48,Simulated process instance,collect reviews,start,Anne,,2006-07-17 01:00:00+02:00 +,,,,,48,Simulated process instance,collect reviews,complete,Anne,,2006-07-17 01:00:00+02:00 +,,,,,48,Simulated process instance,decide,start,Wil,,2006-07-18 01:00:00+02:00 +,,,,0,48,Simulated process instance,decide,complete,Wil,3,2006-07-23 01:00:00+02:00 +,,,,,48,Simulated process instance,reject,start,Mike,,2006-08-01 01:00:00+02:00 +,,,,,48,Simulated process instance,reject,complete,Mike,,2006-08-06 01:00:00+02:00 +,,,,,49,Simulated process instance,invite reviewers,start,Mike,,2006-07-14 01:00:00+02:00 +,,,,,49,Simulated process instance,invite reviewers,complete,Mike,,2006-07-16 01:00:00+02:00 +,,reject,,,49,Simulated process instance,get review 3,complete,Mary,,2006-07-19 01:00:00+02:00 +,,,,,49,Simulated process instance,time-out 2,complete,__INVALID__,,2006-07-21 01:00:00+02:00 +reject,,,,,49,Simulated process instance,get review 1,complete,Sam,,2006-07-21 01:00:00+02:00 +,,,,,49,Simulated process instance,collect reviews,start,Anne,,2006-07-29 01:00:00+02:00 +,,,,,49,Simulated process instance,collect reviews,complete,Anne,,2006-07-29 01:00:00+02:00 +,,,,,49,Simulated process instance,decide,start,Wil,,2006-11-13 00:00:00+01:00 +,,,,0,49,Simulated process instance,decide,complete,Wil,3,2006-11-15 00:00:00+01:00 +,,,,,49,Simulated process instance,reject,start,Anne,,2006-11-18 00:00:00+01:00 +,,,,,49,Simulated process instance,reject,complete,Anne,,2006-11-20 00:00:00+01:00 +,,,,,5,Simulated process instance,invite reviewers,start,Mike,,2006-01-16 00:00:00+01:00 +,,,,,5,Simulated process instance,invite reviewers,complete,Mike,,2006-01-21 00:00:00+01:00 +,,,,,5,Simulated process instance,time-out 3,complete,__INVALID__,,2006-01-22 00:00:00+01:00 +,,,,,5,Simulated process instance,time-out 2,complete,__INVALID__,,2006-01-29 00:00:00+01:00 +,,,,,5,Simulated process instance,time-out 1,complete,__INVALID__,,2006-01-29 00:00:00+01:00 +,,,,,5,Simulated process instance,collect reviews,start,Mike,,2006-01-29 00:00:00+01:00 +,,,,,5,Simulated process instance,collect reviews,complete,Mike,,2006-01-31 00:00:00+01:00 +,,,,,5,Simulated process instance,decide,start,Wil,,2006-03-01 00:00:00+01:00 +,,,,1,5,Simulated process instance,decide,complete,Wil,0,2006-03-04 00:00:00+01:00 +,,,,,5,Simulated process instance,invite additional reviewer,start,Mike,,2006-03-08 00:00:00+01:00 +,,,,,5,Simulated process instance,invite additional reviewer,complete,Mike,,2006-03-10 00:00:00+01:00 +,,,,,5,Simulated process instance,time-out X,complete,__INVALID__,,2006-03-17 00:00:00+01:00 +,,,,,5,Simulated process instance,decide,start,Wil,,2006-04-15 01:00:00+02:00 +,,,,1,5,Simulated process instance,decide,complete,Wil,0,2006-04-15 01:00:00+02:00 +,,,,,5,Simulated process instance,invite additional reviewer,start,Mike,,2006-04-17 01:00:00+02:00 +,,,,,5,Simulated process instance,invite additional reviewer,complete,Mike,,2006-04-17 01:00:00+02:00 +,,,,,5,Simulated process instance,time-out X,complete,__INVALID__,,2006-04-17 01:00:00+02:00 +,,,,,5,Simulated process instance,decide,start,Wil,,2006-07-01 01:00:00+02:00 +,,,,1,5,Simulated process instance,decide,complete,Wil,0,2006-07-01 01:00:00+02:00 +,,,,,5,Simulated process instance,invite additional reviewer,start,Anne,,2006-09-14 01:00:00+02:00 +,,,,,5,Simulated process instance,invite additional reviewer,complete,Anne,,2006-09-16 01:00:00+02:00 +,,,reject,,5,Simulated process instance,get review X,complete,Sara,,2006-09-20 01:00:00+02:00 +,,,,,5,Simulated process instance,decide,start,Wil,,2007-04-17 01:00:00+02:00 +,,,,1,5,Simulated process instance,decide,complete,Wil,1,2007-04-22 01:00:00+02:00 +,,,,,5,Simulated process instance,invite additional reviewer,start,Anne,,2007-04-25 01:00:00+02:00 +,,,,,5,Simulated process instance,invite additional reviewer,complete,Anne,,2007-04-27 01:00:00+02:00 +,,,,,5,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-29 01:00:00+02:00 +,,,,,5,Simulated process instance,decide,start,Wil,,2008-03-13 00:00:00+01:00 +,,,,1,5,Simulated process instance,decide,complete,Wil,1,2008-03-17 00:00:00+01:00 +,,,,,5,Simulated process instance,invite additional reviewer,start,Anne,,2008-03-17 00:00:00+01:00 +,,,,,5,Simulated process instance,invite additional reviewer,complete,Anne,,2008-03-20 00:00:00+01:00 +,,,accept,,5,Simulated process instance,get review X,complete,Sara,,2008-03-22 00:00:00+01:00 +,,,,,5,Simulated process instance,decide,start,Wil,,2008-11-11 00:00:00+01:00 +,,,,2,5,Simulated process instance,decide,complete,Wil,1,2008-11-15 00:00:00+01:00 +,,,,,5,Simulated process instance,invite additional reviewer,start,Mike,,2008-11-15 00:00:00+01:00 +,,,,,5,Simulated process instance,invite additional reviewer,complete,Mike,,2008-11-18 00:00:00+01:00 +,,,accept,,5,Simulated process instance,get review X,complete,John,,2008-11-20 00:00:00+01:00 +,,,,,5,Simulated process instance,decide,start,Wil,,2009-06-14 01:00:00+02:00 +,,,,3,5,Simulated process instance,decide,complete,Wil,1,2009-06-18 01:00:00+02:00 +,,,,,5,Simulated process instance,accept,start,Mike,,2009-06-18 01:00:00+02:00 +,,,,,5,Simulated process instance,accept,complete,Mike,,2009-06-20 01:00:00+02:00 +,,,,,50,Simulated process instance,invite reviewers,start,Anne,,2006-08-14 01:00:00+02:00 +,,,,,50,Simulated process instance,invite reviewers,complete,Anne,,2006-08-16 01:00:00+02:00 +,,,,,50,Simulated process instance,time-out 2,complete,__INVALID__,,2006-08-18 01:00:00+02:00 +,,,,,50,Simulated process instance,time-out 3,complete,__INVALID__,,2006-08-19 01:00:00+02:00 +,,,,,50,Simulated process instance,time-out 1,complete,__INVALID__,,2006-08-23 01:00:00+02:00 +,,,,,50,Simulated process instance,collect reviews,start,Mike,,2006-08-27 01:00:00+02:00 +,,,,,50,Simulated process instance,collect reviews,complete,Mike,,2006-09-01 01:00:00+02:00 +,,,,,50,Simulated process instance,decide,start,Wil,,2006-09-29 01:00:00+02:00 +,,,,1,50,Simulated process instance,decide,complete,Wil,0,2006-10-01 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,start,Anne,,2006-10-16 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,complete,Anne,,2006-10-21 01:00:00+02:00 +,,,,,50,Simulated process instance,time-out X,complete,__INVALID__,,2006-10-31 00:00:00+01:00 +,,,,,50,Simulated process instance,decide,start,Wil,,2006-11-22 00:00:00+01:00 +,,,,1,50,Simulated process instance,decide,complete,Wil,0,2006-11-27 00:00:00+01:00 +,,,,,50,Simulated process instance,invite additional reviewer,start,Anne,,2007-03-18 00:00:00+01:00 +,,,,,50,Simulated process instance,invite additional reviewer,complete,Anne,,2007-03-19 00:00:00+01:00 +,,,reject,,50,Simulated process instance,get review X,complete,Carol,,2007-03-20 00:00:00+01:00 +,,,,,50,Simulated process instance,decide,start,Wil,,2009-05-20 01:00:00+02:00 +,,,,1,50,Simulated process instance,decide,complete,Wil,1,2009-05-21 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,start,Mike,,2009-05-21 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,complete,Mike,,2009-05-24 01:00:00+02:00 +,,,reject,,50,Simulated process instance,get review X,complete,Sara,,2009-05-27 01:00:00+02:00 +,,,,,50,Simulated process instance,decide,start,Wil,,2009-06-20 01:00:00+02:00 +,,,,1,50,Simulated process instance,decide,complete,Wil,2,2009-06-22 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,start,Anne,,2009-06-23 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,complete,Anne,,2009-06-23 01:00:00+02:00 +,,,accept,,50,Simulated process instance,get review X,complete,Pam,,2009-06-26 01:00:00+02:00 +,,,,,50,Simulated process instance,decide,start,Wil,,2009-09-04 01:00:00+02:00 +,,,,2,50,Simulated process instance,decide,complete,Wil,2,2009-09-06 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,start,Mike,,2009-09-07 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,complete,Mike,,2009-09-08 01:00:00+02:00 +,,,,,50,Simulated process instance,time-out X,complete,__INVALID__,,2009-09-12 01:00:00+02:00 +,,,,,50,Simulated process instance,decide,start,Wil,,2009-09-27 01:00:00+02:00 +,,,,2,50,Simulated process instance,decide,complete,Wil,2,2009-10-01 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,start,Anne,,2009-10-01 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,complete,Anne,,2009-10-04 01:00:00+02:00 +,,,,,50,Simulated process instance,time-out X,complete,__INVALID__,,2009-10-09 01:00:00+02:00 +,,,,,50,Simulated process instance,decide,start,Wil,,2009-10-10 01:00:00+02:00 +,,,,2,50,Simulated process instance,decide,complete,Wil,2,2009-10-10 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,start,Mike,,2009-10-11 01:00:00+02:00 +,,,,,50,Simulated process instance,invite additional reviewer,complete,Mike,,2009-10-13 01:00:00+02:00 +,,,accept,,50,Simulated process instance,get review X,complete,Mary,,2009-10-16 01:00:00+02:00 +,,,,,50,Simulated process instance,decide,start,Wil,,2009-11-08 00:00:00+01:00 +,,,,3,50,Simulated process instance,decide,complete,Wil,2,2009-11-13 00:00:00+01:00 +,,,,,50,Simulated process instance,invite additional reviewer,start,Mike,,2009-11-13 00:00:00+01:00 +,,,,,50,Simulated process instance,invite additional reviewer,complete,Mike,,2009-11-14 00:00:00+01:00 +,,,reject,,50,Simulated process instance,get review X,complete,Carol,,2009-11-17 00:00:00+01:00 +,,,,,50,Simulated process instance,decide,start,Wil,,2009-11-30 00:00:00+01:00 +,,,,3,50,Simulated process instance,decide,complete,Wil,3,2009-12-04 00:00:00+01:00 +,,,,,50,Simulated process instance,reject,start,Mike,,2009-12-04 00:00:00+01:00 +,,,,,50,Simulated process instance,reject,complete,Mike,,2009-12-09 00:00:00+01:00 +,,,,,51,Simulated process instance,invite reviewers,start,Anne,,2006-07-29 01:00:00+02:00 +,,,,,51,Simulated process instance,invite reviewers,complete,Anne,,2006-07-31 01:00:00+02:00 +,,,,,51,Simulated process instance,time-out 1,complete,__INVALID__,,2006-08-03 01:00:00+02:00 +,reject,,,,51,Simulated process instance,get review 2,complete,Sam,,2006-08-04 01:00:00+02:00 +,,,,,51,Simulated process instance,time-out 3,complete,__INVALID__,,2006-08-07 01:00:00+02:00 +,,,,,51,Simulated process instance,collect reviews,start,Anne,,2006-08-16 01:00:00+02:00 +,,,,,51,Simulated process instance,collect reviews,complete,Anne,,2006-08-21 01:00:00+02:00 +,,,,,51,Simulated process instance,decide,start,Wil,,2006-12-04 00:00:00+01:00 +,,,,0,51,Simulated process instance,decide,complete,Wil,1,2006-12-06 00:00:00+01:00 +,,,,,51,Simulated process instance,invite additional reviewer,start,Anne,,2007-05-01 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-02 01:00:00+02:00 +,,,,,51,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-07 01:00:00+02:00 +,,,,,51,Simulated process instance,decide,start,Wil,,2007-09-15 01:00:00+02:00 +,,,,0,51,Simulated process instance,decide,complete,Wil,1,2007-09-20 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,start,Mike,,2007-09-20 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,complete,Mike,,2007-09-23 01:00:00+02:00 +,,,,,51,Simulated process instance,time-out X,complete,__INVALID__,,2007-10-01 01:00:00+02:00 +,,,,,51,Simulated process instance,decide,start,Wil,,2008-05-14 01:00:00+02:00 +,,,,0,51,Simulated process instance,decide,complete,Wil,1,2008-05-17 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,start,Mike,,2008-05-17 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,complete,Mike,,2008-05-21 01:00:00+02:00 +,,,,,51,Simulated process instance,time-out X,complete,__INVALID__,,2008-05-28 01:00:00+02:00 +,,,,,51,Simulated process instance,decide,start,Wil,,2008-11-28 00:00:00+01:00 +,,,,0,51,Simulated process instance,decide,complete,Wil,1,2008-12-01 00:00:00+01:00 +,,,,,51,Simulated process instance,invite additional reviewer,start,Anne,,2008-12-01 00:00:00+01:00 +,,,,,51,Simulated process instance,invite additional reviewer,complete,Anne,,2008-12-04 00:00:00+01:00 +,,,accept,,51,Simulated process instance,get review X,complete,John,,2008-12-08 00:00:00+01:00 +,,,,,51,Simulated process instance,decide,start,Wil,,2008-12-09 00:00:00+01:00 +,,,,1,51,Simulated process instance,decide,complete,Wil,1,2008-12-12 00:00:00+01:00 +,,,,,51,Simulated process instance,invite additional reviewer,start,Anne,,2008-12-12 00:00:00+01:00 +,,,,,51,Simulated process instance,invite additional reviewer,complete,Anne,,2008-12-14 00:00:00+01:00 +,,,,,51,Simulated process instance,time-out X,complete,__INVALID__,,2008-12-21 00:00:00+01:00 +,,,,,51,Simulated process instance,decide,start,Wil,,2009-07-19 01:00:00+02:00 +,,,,1,51,Simulated process instance,decide,complete,Wil,1,2009-07-21 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,start,Anne,,2009-07-21 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,complete,Anne,,2009-07-25 01:00:00+02:00 +,,,reject,,51,Simulated process instance,get review X,complete,Pete,,2009-07-26 01:00:00+02:00 +,,,,,51,Simulated process instance,decide,start,Wil,,2009-08-10 01:00:00+02:00 +,,,,1,51,Simulated process instance,decide,complete,Wil,2,2009-08-14 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,start,Anne,,2009-08-14 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,complete,Anne,,2009-08-17 01:00:00+02:00 +,,,,,51,Simulated process instance,time-out X,complete,__INVALID__,,2009-08-17 01:00:00+02:00 +,,,,,51,Simulated process instance,decide,start,Wil,,2009-09-23 01:00:00+02:00 +,,,,1,51,Simulated process instance,decide,complete,Wil,2,2009-09-27 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,start,Anne,,2009-09-27 01:00:00+02:00 +,,,,,51,Simulated process instance,invite additional reviewer,complete,Anne,,2009-10-01 01:00:00+02:00 +,,,reject,,51,Simulated process instance,get review X,complete,Pam,,2009-10-02 01:00:00+02:00 +,,,,,51,Simulated process instance,decide,start,Wil,,2009-10-24 01:00:00+02:00 +,,,,1,51,Simulated process instance,decide,complete,Wil,3,2009-10-29 00:00:00+01:00 +,,,,,51,Simulated process instance,invite additional reviewer,start,Mike,,2009-10-29 00:00:00+01:00 +,,,,,51,Simulated process instance,invite additional reviewer,complete,Mike,,2009-11-03 00:00:00+01:00 +,,,,,51,Simulated process instance,time-out X,complete,__INVALID__,,2009-11-07 00:00:00+01:00 +,,,,,51,Simulated process instance,decide,start,Wil,,2010-02-03 00:00:00+01:00 +,,,,1,51,Simulated process instance,decide,complete,Wil,3,2010-02-06 00:00:00+01:00 +,,,,,51,Simulated process instance,reject,start,Mike,,2010-02-06 00:00:00+01:00 +,,,,,51,Simulated process instance,reject,complete,Mike,,2010-02-07 00:00:00+01:00 +,,,,,52,Simulated process instance,invite reviewers,start,Mike,,2006-07-19 01:00:00+02:00 +,,,,,52,Simulated process instance,invite reviewers,complete,Mike,,2006-07-20 01:00:00+02:00 +,accept,,,,52,Simulated process instance,get review 2,complete,Mary,,2006-07-20 01:00:00+02:00 +reject,,,,,52,Simulated process instance,get review 1,complete,Pete,,2006-07-24 01:00:00+02:00 +,,,,,52,Simulated process instance,time-out 3,complete,__INVALID__,,2006-07-29 01:00:00+02:00 +,,,,,52,Simulated process instance,collect reviews,start,Mike,,2006-08-09 01:00:00+02:00 +,,,,,52,Simulated process instance,collect reviews,complete,Mike,,2006-08-14 01:00:00+02:00 +,,,,,52,Simulated process instance,decide,start,Wil,,2006-08-29 01:00:00+02:00 +,,,,1,52,Simulated process instance,decide,complete,Wil,1,2006-09-03 01:00:00+02:00 +,,,,,52,Simulated process instance,invite additional reviewer,start,Mike,,2006-10-04 01:00:00+02:00 +,,,,,52,Simulated process instance,invite additional reviewer,complete,Mike,,2006-10-06 01:00:00+02:00 +,,,reject,,52,Simulated process instance,get review X,complete,Pete,,2006-10-11 01:00:00+02:00 +,,,,,52,Simulated process instance,decide,start,Wil,,2007-09-09 01:00:00+02:00 +,,,,1,52,Simulated process instance,decide,complete,Wil,2,2007-09-12 01:00:00+02:00 +,,,,,52,Simulated process instance,invite additional reviewer,start,Mike,,2007-09-12 01:00:00+02:00 +,,,,,52,Simulated process instance,invite additional reviewer,complete,Mike,,2007-09-14 01:00:00+02:00 +,,,reject,,52,Simulated process instance,get review X,complete,Pete,,2007-09-16 01:00:00+02:00 +,,,,,52,Simulated process instance,decide,start,Wil,,2008-08-05 01:00:00+02:00 +,,,,1,52,Simulated process instance,decide,complete,Wil,3,2008-08-08 01:00:00+02:00 +,,,,,52,Simulated process instance,reject,start,Anne,,2008-08-08 01:00:00+02:00 +,,,,,52,Simulated process instance,reject,complete,Anne,,2008-08-12 01:00:00+02:00 +,,,,,53,Simulated process instance,invite reviewers,start,Anne,,2006-07-28 01:00:00+02:00 +,,,,,53,Simulated process instance,invite reviewers,complete,Anne,,2006-07-29 01:00:00+02:00 +accept,,,,,53,Simulated process instance,get review 1,complete,Carol,,2006-07-29 01:00:00+02:00 +,,,,,53,Simulated process instance,time-out 3,complete,__INVALID__,,2006-07-29 01:00:00+02:00 +,,,,,53,Simulated process instance,time-out 2,complete,__INVALID__,,2006-08-03 01:00:00+02:00 +,,,,,53,Simulated process instance,collect reviews,start,Anne,,2006-08-03 01:00:00+02:00 +,,,,,53,Simulated process instance,collect reviews,complete,Anne,,2006-08-08 01:00:00+02:00 +,,,,,53,Simulated process instance,decide,start,Wil,,2006-10-25 01:00:00+02:00 +,,,,2,53,Simulated process instance,decide,complete,Wil,0,2006-10-25 01:00:00+02:00 +,,,,,53,Simulated process instance,invite additional reviewer,start,Mike,,2006-12-06 00:00:00+01:00 +,,,,,53,Simulated process instance,invite additional reviewer,complete,Mike,,2006-12-06 00:00:00+01:00 +,,,,,53,Simulated process instance,time-out X,complete,__INVALID__,,2006-12-06 00:00:00+01:00 +,,,,,53,Simulated process instance,decide,start,Wil,,2007-12-24 00:00:00+01:00 +,,,,2,53,Simulated process instance,decide,complete,Wil,0,2008-01-03 00:00:00+01:00 +,,,,,53,Simulated process instance,invite additional reviewer,start,Mike,,2008-01-03 00:00:00+01:00 +,,,,,53,Simulated process instance,invite additional reviewer,complete,Mike,,2008-01-08 00:00:00+01:00 +,,,accept,,53,Simulated process instance,get review X,complete,Sam,,2008-01-09 00:00:00+01:00 +,,,,,53,Simulated process instance,decide,start,Wil,,2008-06-07 01:00:00+02:00 +,,,,3,53,Simulated process instance,decide,complete,Wil,0,2008-06-08 01:00:00+02:00 +,,,,,53,Simulated process instance,accept,start,Anne,,2008-06-09 01:00:00+02:00 +,,,,,53,Simulated process instance,accept,complete,Anne,,2008-06-11 01:00:00+02:00 +,,,,,54,Simulated process instance,invite reviewers,start,Mike,,2006-08-14 01:00:00+02:00 +,,,,,54,Simulated process instance,invite reviewers,complete,Mike,,2006-08-15 01:00:00+02:00 +reject,,,,,54,Simulated process instance,get review 1,complete,Carol,,2006-08-19 01:00:00+02:00 +,,,,,54,Simulated process instance,time-out 3,complete,__INVALID__,,2006-08-19 01:00:00+02:00 +,,,,,54,Simulated process instance,time-out 2,complete,__INVALID__,,2006-08-24 01:00:00+02:00 +,,,,,54,Simulated process instance,collect reviews,start,Mike,,2006-09-20 01:00:00+02:00 +,,,,,54,Simulated process instance,collect reviews,complete,Mike,,2006-09-21 01:00:00+02:00 +,,,,,54,Simulated process instance,decide,start,Wil,,2007-06-20 01:00:00+02:00 +,,,,0,54,Simulated process instance,decide,complete,Wil,2,2007-06-22 01:00:00+02:00 +,,,,,54,Simulated process instance,invite additional reviewer,start,Mike,,2007-06-22 01:00:00+02:00 +,,,,,54,Simulated process instance,invite additional reviewer,complete,Mike,,2007-06-24 01:00:00+02:00 +,,,reject,,54,Simulated process instance,get review X,complete,John,,2007-06-28 01:00:00+02:00 +,,,,,54,Simulated process instance,decide,start,Wil,,2009-02-16 00:00:00+01:00 +,,,,0,54,Simulated process instance,decide,complete,Wil,3,2009-02-16 00:00:00+01:00 +,,,,,54,Simulated process instance,invite additional reviewer,start,Anne,,2009-02-16 00:00:00+01:00 +,,,,,54,Simulated process instance,invite additional reviewer,complete,Anne,,2009-02-19 00:00:00+01:00 +,,,accept,,54,Simulated process instance,get review X,complete,Pam,,2009-02-19 00:00:00+01:00 +,,,,,54,Simulated process instance,decide,start,Wil,,2009-05-23 01:00:00+02:00 +,,,,1,54,Simulated process instance,decide,complete,Wil,3,2009-05-27 01:00:00+02:00 +,,,,,54,Simulated process instance,invite additional reviewer,start,Anne,,2009-05-27 01:00:00+02:00 +,,,,,54,Simulated process instance,invite additional reviewer,complete,Anne,,2009-06-01 01:00:00+02:00 +,,,,,54,Simulated process instance,time-out X,complete,__INVALID__,,2009-06-02 01:00:00+02:00 +,,,,,54,Simulated process instance,decide,start,Wil,,2009-07-26 01:00:00+02:00 +,,,,1,54,Simulated process instance,decide,complete,Wil,3,2009-07-28 01:00:00+02:00 +,,,,,54,Simulated process instance,invite additional reviewer,start,Mike,,2009-07-28 01:00:00+02:00 +,,,,,54,Simulated process instance,invite additional reviewer,complete,Mike,,2009-07-31 01:00:00+02:00 +,,,reject,,54,Simulated process instance,get review X,complete,Sam,,2009-08-05 01:00:00+02:00 +,,,,,54,Simulated process instance,decide,start,Wil,,2009-09-13 01:00:00+02:00 +,,,,1,54,Simulated process instance,decide,complete,Wil,4,2009-09-14 01:00:00+02:00 +,,,,,54,Simulated process instance,reject,start,Mike,,2009-09-14 01:00:00+02:00 +,,,,,54,Simulated process instance,reject,complete,Mike,,2009-09-17 01:00:00+02:00 +,,,,,55,Simulated process instance,invite reviewers,start,Anne,,2006-10-25 01:00:00+02:00 +,,,,,55,Simulated process instance,invite reviewers,complete,Anne,,2006-10-30 00:00:00+01:00 +,,,,,55,Simulated process instance,time-out 3,complete,__INVALID__,,2006-11-01 00:00:00+01:00 +,,,,,55,Simulated process instance,time-out 1,complete,__INVALID__,,2006-11-06 00:00:00+01:00 +,,,,,55,Simulated process instance,time-out 2,complete,__INVALID__,,2006-11-06 00:00:00+01:00 +,,,,,55,Simulated process instance,collect reviews,start,Mike,,2006-11-09 00:00:00+01:00 +,,,,,55,Simulated process instance,collect reviews,complete,Mike,,2006-11-11 00:00:00+01:00 +,,,,,55,Simulated process instance,decide,start,Wil,,2007-11-11 00:00:00+01:00 +,,,,1,55,Simulated process instance,decide,complete,Wil,0,2007-11-13 00:00:00+01:00 +,,,,,55,Simulated process instance,invite additional reviewer,start,Anne,,2007-11-13 00:00:00+01:00 +,,,,,55,Simulated process instance,invite additional reviewer,complete,Anne,,2007-11-14 00:00:00+01:00 +,,,reject,,55,Simulated process instance,get review X,complete,Sara,,2007-11-19 00:00:00+01:00 +,,,,,55,Simulated process instance,decide,start,Wil,,2008-08-25 01:00:00+02:00 +,,,,1,55,Simulated process instance,decide,complete,Wil,1,2008-08-25 01:00:00+02:00 +,,,,,55,Simulated process instance,invite additional reviewer,start,Mike,,2008-08-25 01:00:00+02:00 +,,,,,55,Simulated process instance,invite additional reviewer,complete,Mike,,2008-08-27 01:00:00+02:00 +,,,accept,,55,Simulated process instance,get review X,complete,John,,2008-08-30 01:00:00+02:00 +,,,,,55,Simulated process instance,decide,start,Wil,,2008-11-20 00:00:00+01:00 +,,,,2,55,Simulated process instance,decide,complete,Wil,1,2008-11-25 00:00:00+01:00 +,,,,,55,Simulated process instance,invite additional reviewer,start,Anne,,2008-11-25 00:00:00+01:00 +,,,,,55,Simulated process instance,invite additional reviewer,complete,Anne,,2008-11-26 00:00:00+01:00 +,,,,,55,Simulated process instance,time-out X,complete,__INVALID__,,2008-11-28 00:00:00+01:00 +,,,,,55,Simulated process instance,decide,start,Wil,,2009-04-29 01:00:00+02:00 +,,,,2,55,Simulated process instance,decide,complete,Wil,1,2009-05-01 01:00:00+02:00 +,,,,,55,Simulated process instance,invite additional reviewer,start,Anne,,2009-05-01 01:00:00+02:00 +,,,,,55,Simulated process instance,invite additional reviewer,complete,Anne,,2009-05-01 01:00:00+02:00 +,,,,,55,Simulated process instance,time-out X,complete,__INVALID__,,2009-05-07 01:00:00+02:00 +,,,,,55,Simulated process instance,decide,start,Wil,,2009-10-02 01:00:00+02:00 +,,,,2,55,Simulated process instance,decide,complete,Wil,1,2009-10-05 01:00:00+02:00 +,,,,,55,Simulated process instance,invite additional reviewer,start,Anne,,2009-10-10 01:00:00+02:00 +,,,,,55,Simulated process instance,invite additional reviewer,complete,Anne,,2009-10-15 01:00:00+02:00 +,,,,,55,Simulated process instance,time-out X,complete,__INVALID__,,2009-10-18 01:00:00+02:00 +,,,,,55,Simulated process instance,decide,start,Wil,,2010-04-17 01:00:00+02:00 +,,,,2,55,Simulated process instance,decide,complete,Wil,1,2010-04-17 01:00:00+02:00 +,,,,,55,Simulated process instance,invite additional reviewer,start,Mike,,2010-04-17 01:00:00+02:00 +,,,,,55,Simulated process instance,invite additional reviewer,complete,Mike,,2010-04-21 01:00:00+02:00 +,,,accept,,55,Simulated process instance,get review X,complete,Pete,,2010-04-24 01:00:00+02:00 +,,,,,55,Simulated process instance,decide,start,Wil,,2010-04-26 01:00:00+02:00 +,,,,3,55,Simulated process instance,decide,complete,Wil,1,2010-04-29 01:00:00+02:00 +,,,,,55,Simulated process instance,accept,start,Mike,,2010-04-29 01:00:00+02:00 +,,,,,55,Simulated process instance,accept,complete,Mike,,2010-04-29 01:00:00+02:00 +,,,,,56,Simulated process instance,invite reviewers,start,Anne,,2006-08-21 01:00:00+02:00 +,,,,,56,Simulated process instance,invite reviewers,complete,Anne,,2006-08-25 01:00:00+02:00 +,,,,,56,Simulated process instance,time-out 2,complete,__INVALID__,,2006-08-25 01:00:00+02:00 +reject,,,,,56,Simulated process instance,get review 1,complete,Mary,,2006-08-27 01:00:00+02:00 +,,accept,,,56,Simulated process instance,get review 3,complete,John,,2006-08-29 01:00:00+02:00 +,,,,,56,Simulated process instance,collect reviews,start,Mike,,2006-09-15 01:00:00+02:00 +,,,,,56,Simulated process instance,collect reviews,complete,Mike,,2006-09-20 01:00:00+02:00 +,,,,,56,Simulated process instance,decide,start,Wil,,2006-09-22 01:00:00+02:00 +,,,,2,56,Simulated process instance,decide,complete,Wil,1,2006-09-24 01:00:00+02:00 +,,,,,56,Simulated process instance,invite additional reviewer,start,Anne,,2006-12-02 00:00:00+01:00 +,,,,,56,Simulated process instance,invite additional reviewer,complete,Anne,,2006-12-07 00:00:00+01:00 +,,,,,56,Simulated process instance,time-out X,complete,__INVALID__,,2006-12-12 00:00:00+01:00 +,,,,,56,Simulated process instance,decide,start,Wil,,2007-01-05 00:00:00+01:00 +,,,,2,56,Simulated process instance,decide,complete,Wil,1,2007-01-08 00:00:00+01:00 +,,,,,56,Simulated process instance,invite additional reviewer,start,Anne,,2007-03-25 00:00:00+01:00 +,,,,,56,Simulated process instance,invite additional reviewer,complete,Anne,,2007-03-29 01:00:00+02:00 +,,,,,56,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-06 01:00:00+02:00 +,,,,,56,Simulated process instance,decide,start,Wil,,2007-04-22 01:00:00+02:00 +,,,,2,56,Simulated process instance,decide,complete,Wil,1,2007-04-27 01:00:00+02:00 +,,,,,56,Simulated process instance,invite additional reviewer,start,Mike,,2007-05-03 01:00:00+02:00 +,,,,,56,Simulated process instance,invite additional reviewer,complete,Mike,,2007-05-07 01:00:00+02:00 +,,,,,56,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-17 01:00:00+02:00 +,,,,,56,Simulated process instance,decide,start,Wil,,2008-04-04 01:00:00+02:00 +,,,,2,56,Simulated process instance,decide,complete,Wil,1,2008-04-07 01:00:00+02:00 +,,,,,56,Simulated process instance,invite additional reviewer,start,Anne,,2008-04-07 01:00:00+02:00 +,,,,,56,Simulated process instance,invite additional reviewer,complete,Anne,,2008-04-07 01:00:00+02:00 +,,,accept,,56,Simulated process instance,get review X,complete,Pam,,2008-04-10 01:00:00+02:00 +,,,,,56,Simulated process instance,decide,start,Wil,,2008-10-15 01:00:00+02:00 +,,,,3,56,Simulated process instance,decide,complete,Wil,1,2008-10-16 01:00:00+02:00 +,,,,,56,Simulated process instance,accept,start,Anne,,2008-10-16 01:00:00+02:00 +,,,,,56,Simulated process instance,accept,complete,Anne,,2008-10-16 01:00:00+02:00 +,,,,,57,Simulated process instance,invite reviewers,start,Mike,,2006-08-06 01:00:00+02:00 +,,,,,57,Simulated process instance,invite reviewers,complete,Mike,,2006-08-09 01:00:00+02:00 +,,,,,57,Simulated process instance,time-out 3,complete,__INVALID__,,2006-08-13 01:00:00+02:00 +,,,,,57,Simulated process instance,time-out 1,complete,__INVALID__,,2006-08-13 01:00:00+02:00 +,,,,,57,Simulated process instance,time-out 2,complete,__INVALID__,,2006-08-13 01:00:00+02:00 +,,,,,57,Simulated process instance,collect reviews,start,Mike,,2006-08-15 01:00:00+02:00 +,,,,,57,Simulated process instance,collect reviews,complete,Mike,,2006-08-16 01:00:00+02:00 +,,,,,57,Simulated process instance,decide,start,Wil,,2006-10-01 01:00:00+02:00 +,,,,1,57,Simulated process instance,decide,complete,Wil,0,2006-10-05 01:00:00+02:00 +,,,,,57,Simulated process instance,invite additional reviewer,start,Anne,,2007-02-26 00:00:00+01:00 +,,,,,57,Simulated process instance,invite additional reviewer,complete,Anne,,2007-03-01 00:00:00+01:00 +,,,reject,,57,Simulated process instance,get review X,complete,Mary,,2007-03-03 00:00:00+01:00 +,,,,,57,Simulated process instance,decide,start,Wil,,2007-08-04 01:00:00+02:00 +,,,,1,57,Simulated process instance,decide,complete,Wil,1,2007-08-05 01:00:00+02:00 +,,,,,57,Simulated process instance,invite additional reviewer,start,Anne,,2007-08-05 01:00:00+02:00 +,,,,,57,Simulated process instance,invite additional reviewer,complete,Anne,,2007-08-09 01:00:00+02:00 +,,,,,57,Simulated process instance,time-out X,complete,__INVALID__,,2007-08-18 01:00:00+02:00 +,,,,,57,Simulated process instance,decide,start,Wil,,2008-01-26 00:00:00+01:00 +,,,,1,57,Simulated process instance,decide,complete,Wil,1,2008-01-29 00:00:00+01:00 +,,,,,57,Simulated process instance,invite additional reviewer,start,Anne,,2008-01-29 00:00:00+01:00 +,,,,,57,Simulated process instance,invite additional reviewer,complete,Anne,,2008-02-02 00:00:00+01:00 +,,,reject,,57,Simulated process instance,get review X,complete,Pam,,2008-02-07 00:00:00+01:00 +,,,,,57,Simulated process instance,decide,start,Wil,,2008-09-30 01:00:00+02:00 +,,,,1,57,Simulated process instance,decide,complete,Wil,2,2008-10-01 01:00:00+02:00 +,,,,,57,Simulated process instance,invite additional reviewer,start,Mike,,2008-10-01 01:00:00+02:00 +,,,,,57,Simulated process instance,invite additional reviewer,complete,Mike,,2008-10-02 01:00:00+02:00 +,,,,,57,Simulated process instance,time-out X,complete,__INVALID__,,2008-10-10 01:00:00+02:00 +,,,,,57,Simulated process instance,decide,start,Wil,,2009-09-10 01:00:00+02:00 +,,,,1,57,Simulated process instance,decide,complete,Wil,2,2009-09-13 01:00:00+02:00 +,,,,,57,Simulated process instance,invite additional reviewer,start,Anne,,2009-09-13 01:00:00+02:00 +,,,,,57,Simulated process instance,invite additional reviewer,complete,Anne,,2009-09-16 01:00:00+02:00 +,,,,,57,Simulated process instance,time-out X,complete,__INVALID__,,2009-09-25 01:00:00+02:00 +,,,,,57,Simulated process instance,decide,start,Wil,,2009-10-18 01:00:00+02:00 +,,,,1,57,Simulated process instance,decide,complete,Wil,2,2009-10-21 01:00:00+02:00 +,,,,,57,Simulated process instance,invite additional reviewer,start,Mike,,2009-10-21 01:00:00+02:00 +,,,,,57,Simulated process instance,invite additional reviewer,complete,Mike,,2009-10-24 01:00:00+02:00 +,,,reject,,57,Simulated process instance,get review X,complete,John,,2009-10-26 00:00:00+01:00 +,,,,,57,Simulated process instance,decide,start,Wil,,2010-01-30 00:00:00+01:00 +,,,,1,57,Simulated process instance,decide,complete,Wil,3,2010-02-01 00:00:00+01:00 +,,,,,57,Simulated process instance,reject,start,Mike,,2010-02-01 00:00:00+01:00 +,,,,,57,Simulated process instance,reject,complete,Mike,,2010-02-01 00:00:00+01:00 +,,,,,58,Simulated process instance,invite reviewers,start,Anne,,2006-09-06 01:00:00+02:00 +,,,,,58,Simulated process instance,invite reviewers,complete,Anne,,2006-09-09 01:00:00+02:00 +,,accept,,,58,Simulated process instance,get review 3,complete,Pam,,2006-09-09 01:00:00+02:00 +reject,,,,,58,Simulated process instance,get review 1,complete,John,,2006-09-10 01:00:00+02:00 +,reject,,,,58,Simulated process instance,get review 2,complete,Sam,,2006-09-13 01:00:00+02:00 +,,,,,58,Simulated process instance,collect reviews,start,Anne,,2006-09-16 01:00:00+02:00 +,,,,,58,Simulated process instance,collect reviews,complete,Anne,,2006-09-21 01:00:00+02:00 +,,,,,58,Simulated process instance,decide,start,Wil,,2006-12-15 00:00:00+01:00 +,,,,1,58,Simulated process instance,decide,complete,Wil,2,2006-12-19 00:00:00+01:00 +,,,,,58,Simulated process instance,invite additional reviewer,start,Anne,,2007-04-20 01:00:00+02:00 +,,,,,58,Simulated process instance,invite additional reviewer,complete,Anne,,2007-04-24 01:00:00+02:00 +,,,,,58,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-01 01:00:00+02:00 +,,,,,58,Simulated process instance,decide,start,Wil,,2007-11-02 00:00:00+01:00 +,,,,1,58,Simulated process instance,decide,complete,Wil,2,2007-11-06 00:00:00+01:00 +,,,,,58,Simulated process instance,invite additional reviewer,start,Mike,,2007-11-06 00:00:00+01:00 +,,,,,58,Simulated process instance,invite additional reviewer,complete,Mike,,2007-11-10 00:00:00+01:00 +,,,,,58,Simulated process instance,time-out X,complete,__INVALID__,,2007-11-20 00:00:00+01:00 +,,,,,58,Simulated process instance,decide,start,Wil,,2008-08-19 01:00:00+02:00 +,,,,1,58,Simulated process instance,decide,complete,Wil,2,2008-08-22 01:00:00+02:00 +,,,,,58,Simulated process instance,invite additional reviewer,start,Anne,,2008-08-22 01:00:00+02:00 +,,,,,58,Simulated process instance,invite additional reviewer,complete,Anne,,2008-08-22 01:00:00+02:00 +,,,accept,,58,Simulated process instance,get review X,complete,Sara,,2008-08-27 01:00:00+02:00 +,,,,,58,Simulated process instance,decide,start,Wil,,2009-04-25 01:00:00+02:00 +,,,,2,58,Simulated process instance,decide,complete,Wil,2,2009-04-27 01:00:00+02:00 +,,,,,58,Simulated process instance,invite additional reviewer,start,Anne,,2009-04-27 01:00:00+02:00 +,,,,,58,Simulated process instance,invite additional reviewer,complete,Anne,,2009-04-27 01:00:00+02:00 +,,,,,58,Simulated process instance,time-out X,complete,__INVALID__,,2009-05-01 01:00:00+02:00 +,,,,,58,Simulated process instance,decide,start,Wil,,2009-05-12 01:00:00+02:00 +,,,,2,58,Simulated process instance,decide,complete,Wil,2,2009-05-16 01:00:00+02:00 +,,,,,58,Simulated process instance,invite additional reviewer,start,Anne,,2009-05-16 01:00:00+02:00 +,,,,,58,Simulated process instance,invite additional reviewer,complete,Anne,,2009-05-18 01:00:00+02:00 +,,,accept,,58,Simulated process instance,get review X,complete,Pam,,2009-05-18 01:00:00+02:00 +,,,,,58,Simulated process instance,decide,start,Wil,,2010-01-25 00:00:00+01:00 +,,,,3,58,Simulated process instance,decide,complete,Wil,2,2010-01-30 00:00:00+01:00 +,,,,,58,Simulated process instance,accept,start,Anne,,2010-01-30 00:00:00+01:00 +,,,,,58,Simulated process instance,accept,complete,Anne,,2010-02-03 00:00:00+01:00 +,,,,,59,Simulated process instance,invite reviewers,start,Anne,,2006-08-12 01:00:00+02:00 +,,,,,59,Simulated process instance,invite reviewers,complete,Anne,,2006-08-14 01:00:00+02:00 +,,,,,59,Simulated process instance,time-out 3,complete,__INVALID__,,2006-08-14 01:00:00+02:00 +,accept,,,,59,Simulated process instance,get review 2,complete,Pam,,2006-08-19 01:00:00+02:00 +reject,,,,,59,Simulated process instance,get review 1,complete,Pete,,2006-08-19 01:00:00+02:00 +,,,,,59,Simulated process instance,collect reviews,start,Mike,,2006-08-20 01:00:00+02:00 +,,,,,59,Simulated process instance,collect reviews,complete,Mike,,2006-08-22 01:00:00+02:00 +,,,,,59,Simulated process instance,decide,start,Wil,,2007-03-25 00:00:00+01:00 +,,,,1,59,Simulated process instance,decide,complete,Wil,1,2007-03-26 01:00:00+02:00 +,,,,,59,Simulated process instance,invite additional reviewer,start,Anne,,2007-03-29 01:00:00+02:00 +,,,,,59,Simulated process instance,invite additional reviewer,complete,Anne,,2007-03-31 01:00:00+02:00 +,,,,,59,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-01 01:00:00+02:00 +,,,,,59,Simulated process instance,decide,start,Wil,,2007-05-07 01:00:00+02:00 +,,,,1,59,Simulated process instance,decide,complete,Wil,1,2007-05-08 01:00:00+02:00 +,,,,,59,Simulated process instance,invite additional reviewer,start,Mike,,2007-05-11 01:00:00+02:00 +,,,,,59,Simulated process instance,invite additional reviewer,complete,Mike,,2007-05-16 01:00:00+02:00 +,,,,,59,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-23 01:00:00+02:00 +,,,,,59,Simulated process instance,decide,start,Wil,,2007-10-02 01:00:00+02:00 +,,,,1,59,Simulated process instance,decide,complete,Wil,1,2007-10-06 01:00:00+02:00 +,,,,,59,Simulated process instance,invite additional reviewer,start,Anne,,2007-10-06 01:00:00+02:00 +,,,,,59,Simulated process instance,invite additional reviewer,complete,Anne,,2007-10-10 01:00:00+02:00 +,,,accept,,59,Simulated process instance,get review X,complete,Mary,,2007-10-12 01:00:00+02:00 +,,,,,59,Simulated process instance,decide,start,Wil,,2007-11-26 00:00:00+01:00 +,,,,2,59,Simulated process instance,decide,complete,Wil,1,2007-11-30 00:00:00+01:00 +,,,,,59,Simulated process instance,invite additional reviewer,start,Anne,,2007-11-30 00:00:00+01:00 +,,,,,59,Simulated process instance,invite additional reviewer,complete,Anne,,2007-12-01 00:00:00+01:00 +,,,accept,,59,Simulated process instance,get review X,complete,Carol,,2007-12-02 00:00:00+01:00 +,,,,,59,Simulated process instance,decide,start,Wil,,2008-05-30 01:00:00+02:00 +,,,,3,59,Simulated process instance,decide,complete,Wil,1,2008-06-01 01:00:00+02:00 +,,,,,59,Simulated process instance,accept,start,Anne,,2008-06-01 01:00:00+02:00 +,,,,,59,Simulated process instance,accept,complete,Anne,,2008-06-04 01:00:00+02:00 +,,,,,6,Simulated process instance,invite reviewers,start,Anne,,2006-01-17 00:00:00+01:00 +,,,,,6,Simulated process instance,invite reviewers,complete,Anne,,2006-01-18 00:00:00+01:00 +,,,,,6,Simulated process instance,time-out 1,complete,__INVALID__,,2006-01-23 00:00:00+01:00 +,,,,,6,Simulated process instance,time-out 2,complete,__INVALID__,,2006-01-23 00:00:00+01:00 +,,,,,6,Simulated process instance,time-out 3,complete,__INVALID__,,2006-01-28 00:00:00+01:00 +,,,,,6,Simulated process instance,collect reviews,start,Mike,,2006-01-28 00:00:00+01:00 +,,,,,6,Simulated process instance,collect reviews,complete,Mike,,2006-01-29 00:00:00+01:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2006-02-06 00:00:00+01:00 +,,,,1,6,Simulated process instance,decide,complete,Wil,0,2006-02-10 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Mike,,2006-02-11 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Mike,,2006-02-14 00:00:00+01:00 +,,,accept,,6,Simulated process instance,get review X,complete,Carol,,2006-02-17 00:00:00+01:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2006-06-02 01:00:00+02:00 +,,,,2,6,Simulated process instance,decide,complete,Wil,0,2006-06-05 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Mike,,2006-06-07 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Mike,,2006-06-07 01:00:00+02:00 +,,,,,6,Simulated process instance,time-out X,complete,__INVALID__,,2006-06-15 01:00:00+02:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2006-08-04 01:00:00+02:00 +,,,,2,6,Simulated process instance,decide,complete,Wil,0,2006-08-09 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Mike,,2006-10-14 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Mike,,2006-10-19 01:00:00+02:00 +,,,,,6,Simulated process instance,time-out X,complete,__INVALID__,,2006-10-20 01:00:00+02:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2006-11-04 00:00:00+01:00 +,,,,2,6,Simulated process instance,decide,complete,Wil,0,2006-11-06 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Anne,,2007-03-07 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Anne,,2007-03-10 00:00:00+01:00 +,,,,,6,Simulated process instance,time-out X,complete,__INVALID__,,2007-03-15 00:00:00+01:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2007-05-01 01:00:00+02:00 +,,,,2,6,Simulated process instance,decide,complete,Wil,0,2007-05-02 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Mike,,2007-05-02 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Mike,,2007-05-03 01:00:00+02:00 +,,,,,6,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-07 01:00:00+02:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2008-02-26 00:00:00+01:00 +,,,,2,6,Simulated process instance,decide,complete,Wil,0,2008-02-29 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Mike,,2008-02-29 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Mike,,2008-03-03 00:00:00+01:00 +,,,,,6,Simulated process instance,time-out X,complete,__INVALID__,,2008-03-13 00:00:00+01:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2008-05-17 01:00:00+02:00 +,,,,2,6,Simulated process instance,decide,complete,Wil,0,2008-05-22 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Anne,,2008-05-22 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Anne,,2008-05-23 01:00:00+02:00 +,,,reject,,6,Simulated process instance,get review X,complete,Sam,,2008-05-27 01:00:00+02:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2009-05-21 01:00:00+02:00 +,,,,2,6,Simulated process instance,decide,complete,Wil,1,2009-05-23 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Anne,,2009-05-23 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Anne,,2009-05-25 01:00:00+02:00 +,,,,,6,Simulated process instance,time-out X,complete,__INVALID__,,2009-05-26 01:00:00+02:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2009-08-31 01:00:00+02:00 +,,,,2,6,Simulated process instance,decide,complete,Wil,1,2009-09-04 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Anne,,2009-09-04 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Anne,,2009-09-09 01:00:00+02:00 +,,,,,6,Simulated process instance,time-out X,complete,__INVALID__,,2009-09-11 01:00:00+02:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2009-12-04 00:00:00+01:00 +,,,,2,6,Simulated process instance,decide,complete,Wil,1,2009-12-09 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Anne,,2009-12-09 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Anne,,2009-12-10 00:00:00+01:00 +,,,,,6,Simulated process instance,time-out X,complete,__INVALID__,,2009-12-13 00:00:00+01:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2009-12-16 00:00:00+01:00 +,,,,2,6,Simulated process instance,decide,complete,Wil,1,2009-12-16 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Anne,,2009-12-16 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Anne,,2009-12-21 00:00:00+01:00 +,,,accept,,6,Simulated process instance,get review X,complete,John,,2009-12-22 00:00:00+01:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2010-01-30 00:00:00+01:00 +,,,,3,6,Simulated process instance,decide,complete,Wil,1,2010-01-30 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Mike,,2010-01-30 00:00:00+01:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Mike,,2010-02-01 00:00:00+01:00 +,,,reject,,6,Simulated process instance,get review X,complete,Pete,,2010-02-02 00:00:00+01:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2010-04-21 01:00:00+02:00 +,,,,3,6,Simulated process instance,decide,complete,Wil,2,2010-04-21 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Mike,,2010-04-21 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Mike,,2010-04-24 01:00:00+02:00 +,,,,,6,Simulated process instance,time-out X,complete,__INVALID__,,2010-05-03 01:00:00+02:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2010-05-07 01:00:00+02:00 +,,,,3,6,Simulated process instance,decide,complete,Wil,2,2010-05-09 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Anne,,2010-05-09 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Anne,,2010-05-14 01:00:00+02:00 +,,,reject,,6,Simulated process instance,get review X,complete,Mary,,2010-05-19 01:00:00+02:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2010-05-21 01:00:00+02:00 +,,,,3,6,Simulated process instance,decide,complete,Wil,3,2010-05-24 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,start,Mike,,2010-05-24 01:00:00+02:00 +,,,,,6,Simulated process instance,invite additional reviewer,complete,Mike,,2010-05-26 01:00:00+02:00 +,,,,,6,Simulated process instance,time-out X,complete,__INVALID__,,2010-05-31 01:00:00+02:00 +,,,,,6,Simulated process instance,decide,start,Wil,,2010-06-02 01:00:00+02:00 +,,,,3,6,Simulated process instance,decide,complete,Wil,3,2010-06-03 01:00:00+02:00 +,,,,,6,Simulated process instance,reject,start,Anne,,2010-06-03 01:00:00+02:00 +,,,,,6,Simulated process instance,reject,complete,Anne,,2010-06-04 01:00:00+02:00 +,,,,,60,Simulated process instance,invite reviewers,start,Mike,,2006-09-26 01:00:00+02:00 +,,,,,60,Simulated process instance,invite reviewers,complete,Mike,,2006-09-30 01:00:00+02:00 +reject,,,,,60,Simulated process instance,get review 1,complete,Pete,,2006-10-03 01:00:00+02:00 +,reject,,,,60,Simulated process instance,get review 2,complete,Mary,,2006-10-04 01:00:00+02:00 +,,,,,60,Simulated process instance,time-out 3,complete,__INVALID__,,2006-10-05 01:00:00+02:00 +,,,,,60,Simulated process instance,collect reviews,start,Mike,,2006-11-06 00:00:00+01:00 +,,,,,60,Simulated process instance,collect reviews,complete,Mike,,2006-11-09 00:00:00+01:00 +,,,,,60,Simulated process instance,decide,start,Wil,,2007-01-01 00:00:00+01:00 +,,,,0,60,Simulated process instance,decide,complete,Wil,2,2007-01-05 00:00:00+01:00 +,,,,,60,Simulated process instance,invite additional reviewer,start,Anne,,2007-01-26 00:00:00+01:00 +,,,,,60,Simulated process instance,invite additional reviewer,complete,Anne,,2007-01-28 00:00:00+01:00 +,,,accept,,60,Simulated process instance,get review X,complete,John,,2007-01-31 00:00:00+01:00 +,,,,,60,Simulated process instance,decide,start,Wil,,2007-04-30 01:00:00+02:00 +,,,,1,60,Simulated process instance,decide,complete,Wil,2,2007-05-01 01:00:00+02:00 +,,,,,60,Simulated process instance,invite additional reviewer,start,Anne,,2007-05-01 01:00:00+02:00 +,,,,,60,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-01 01:00:00+02:00 +,,,,,60,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-02 01:00:00+02:00 +,,,,,60,Simulated process instance,decide,start,Wil,,2007-08-19 01:00:00+02:00 +,,,,1,60,Simulated process instance,decide,complete,Wil,2,2007-08-22 01:00:00+02:00 +,,,,,60,Simulated process instance,invite additional reviewer,start,Mike,,2007-08-24 01:00:00+02:00 +,,,,,60,Simulated process instance,invite additional reviewer,complete,Mike,,2007-08-24 01:00:00+02:00 +,,,,,60,Simulated process instance,time-out X,complete,__INVALID__,,2007-08-26 01:00:00+02:00 +,,,,,60,Simulated process instance,decide,start,Wil,,2008-01-29 00:00:00+01:00 +,,,,1,60,Simulated process instance,decide,complete,Wil,2,2008-01-29 00:00:00+01:00 +,,,,,60,Simulated process instance,invite additional reviewer,start,Mike,,2008-01-29 00:00:00+01:00 +,,,,,60,Simulated process instance,invite additional reviewer,complete,Mike,,2008-02-01 00:00:00+01:00 +,,,,,60,Simulated process instance,time-out X,complete,__INVALID__,,2008-02-08 00:00:00+01:00 +,,,,,60,Simulated process instance,decide,start,Wil,,2008-03-09 00:00:00+01:00 +,,,,1,60,Simulated process instance,decide,complete,Wil,2,2008-03-13 00:00:00+01:00 +,,,,,60,Simulated process instance,invite additional reviewer,start,Mike,,2008-03-13 00:00:00+01:00 +,,,,,60,Simulated process instance,invite additional reviewer,complete,Mike,,2008-03-15 00:00:00+01:00 +,,,reject,,60,Simulated process instance,get review X,complete,John,,2008-03-16 00:00:00+01:00 +,,,,,60,Simulated process instance,decide,start,Wil,,2008-09-07 01:00:00+02:00 +,,,,1,60,Simulated process instance,decide,complete,Wil,3,2008-09-10 01:00:00+02:00 +,,,,,60,Simulated process instance,invite additional reviewer,start,Anne,,2008-09-10 01:00:00+02:00 +,,,,,60,Simulated process instance,invite additional reviewer,complete,Anne,,2008-09-10 01:00:00+02:00 +,,,reject,,60,Simulated process instance,get review X,complete,Pam,,2008-09-15 01:00:00+02:00 +,,,,,60,Simulated process instance,decide,start,Wil,,2009-07-08 01:00:00+02:00 +,,,,1,60,Simulated process instance,decide,complete,Wil,4,2009-07-12 01:00:00+02:00 +,,,,,60,Simulated process instance,invite additional reviewer,start,Mike,,2009-07-12 01:00:00+02:00 +,,,,,60,Simulated process instance,invite additional reviewer,complete,Mike,,2009-07-17 01:00:00+02:00 +,,,accept,,60,Simulated process instance,get review X,complete,Pam,,2009-07-20 01:00:00+02:00 +,,,,,60,Simulated process instance,decide,start,Wil,,2009-09-14 01:00:00+02:00 +,,,,2,60,Simulated process instance,decide,complete,Wil,4,2009-09-19 01:00:00+02:00 +,,,,,60,Simulated process instance,invite additional reviewer,start,Mike,,2009-09-19 01:00:00+02:00 +,,,,,60,Simulated process instance,invite additional reviewer,complete,Mike,,2009-09-22 01:00:00+02:00 +,,,,,60,Simulated process instance,time-out X,complete,__INVALID__,,2009-09-23 01:00:00+02:00 +,,,,,60,Simulated process instance,decide,start,Wil,,2010-01-08 00:00:00+01:00 +,,,,2,60,Simulated process instance,decide,complete,Wil,4,2010-01-12 00:00:00+01:00 +,,,,,60,Simulated process instance,reject,start,Mike,,2010-01-12 00:00:00+01:00 +,,,,,60,Simulated process instance,reject,complete,Mike,,2010-01-17 00:00:00+01:00 +,,,,,61,Simulated process instance,invite reviewers,start,Anne,,2006-09-21 01:00:00+02:00 +,,,,,61,Simulated process instance,invite reviewers,complete,Anne,,2006-09-22 01:00:00+02:00 +,,,,,61,Simulated process instance,time-out 1,complete,__INVALID__,,2006-09-26 01:00:00+02:00 +,accept,,,,61,Simulated process instance,get review 2,complete,Pete,,2006-09-26 01:00:00+02:00 +,,,,,61,Simulated process instance,time-out 3,complete,__INVALID__,,2006-09-27 01:00:00+02:00 +,,,,,61,Simulated process instance,collect reviews,start,Anne,,2006-10-15 01:00:00+02:00 +,,,,,61,Simulated process instance,collect reviews,complete,Anne,,2006-10-16 01:00:00+02:00 +,,,,,61,Simulated process instance,decide,start,Wil,,2006-11-27 00:00:00+01:00 +,,,,1,61,Simulated process instance,decide,complete,Wil,0,2006-11-30 00:00:00+01:00 +,,,,,61,Simulated process instance,invite additional reviewer,start,Mike,,2006-12-21 00:00:00+01:00 +,,,,,61,Simulated process instance,invite additional reviewer,complete,Mike,,2006-12-23 00:00:00+01:00 +,,,accept,,61,Simulated process instance,get review X,complete,Sam,,2007-01-02 00:00:00+01:00 +,,,,,61,Simulated process instance,decide,start,Wil,,2007-02-25 00:00:00+01:00 +,,,,2,61,Simulated process instance,decide,complete,Wil,0,2007-02-28 00:00:00+01:00 +,,,,,61,Simulated process instance,invite additional reviewer,start,Mike,,2007-04-22 01:00:00+02:00 +,,,,,61,Simulated process instance,invite additional reviewer,complete,Mike,,2007-04-27 01:00:00+02:00 +,,,,,61,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-29 01:00:00+02:00 +,,,,,61,Simulated process instance,decide,start,Wil,,2008-02-13 00:00:00+01:00 +,,,,2,61,Simulated process instance,decide,complete,Wil,0,2008-02-16 00:00:00+01:00 +,,,,,61,Simulated process instance,invite additional reviewer,start,Anne,,2008-02-16 00:00:00+01:00 +,,,,,61,Simulated process instance,invite additional reviewer,complete,Anne,,2008-02-20 00:00:00+01:00 +,,,accept,,61,Simulated process instance,get review X,complete,Sam,,2008-02-22 00:00:00+01:00 +,,,,,61,Simulated process instance,decide,start,Wil,,2008-07-05 01:00:00+02:00 +,,,,3,61,Simulated process instance,decide,complete,Wil,0,2008-07-05 01:00:00+02:00 +,,,,,61,Simulated process instance,invite additional reviewer,start,Anne,,2008-07-05 01:00:00+02:00 +,,,,,61,Simulated process instance,invite additional reviewer,complete,Anne,,2008-07-10 01:00:00+02:00 +,,,reject,,61,Simulated process instance,get review X,complete,Pam,,2008-07-13 01:00:00+02:00 +,,,,,61,Simulated process instance,decide,start,Wil,,2008-08-18 01:00:00+02:00 +,,,,3,61,Simulated process instance,decide,complete,Wil,1,2008-08-19 01:00:00+02:00 +,,,,,61,Simulated process instance,accept,start,Mike,,2008-08-19 01:00:00+02:00 +,,,,,61,Simulated process instance,accept,complete,Mike,,2008-08-22 01:00:00+02:00 +,,,,,62,Simulated process instance,invite reviewers,start,Mike,,2006-09-02 01:00:00+02:00 +,,,,,62,Simulated process instance,invite reviewers,complete,Mike,,2006-09-07 01:00:00+02:00 +reject,,,,,62,Simulated process instance,get review 1,complete,John,,2006-09-08 01:00:00+02:00 +,reject,,,,62,Simulated process instance,get review 2,complete,Sara,,2006-09-11 01:00:00+02:00 +,,,,,62,Simulated process instance,time-out 3,complete,__INVALID__,,2006-09-13 01:00:00+02:00 +,,,,,62,Simulated process instance,collect reviews,start,Mike,,2006-09-21 01:00:00+02:00 +,,,,,62,Simulated process instance,collect reviews,complete,Mike,,2006-09-25 01:00:00+02:00 +,,,,,62,Simulated process instance,decide,start,Wil,,2007-01-12 00:00:00+01:00 +,,,,0,62,Simulated process instance,decide,complete,Wil,2,2007-01-16 00:00:00+01:00 +,,,,,62,Simulated process instance,invite additional reviewer,start,Mike,,2007-02-09 00:00:00+01:00 +,,,,,62,Simulated process instance,invite additional reviewer,complete,Mike,,2007-02-14 00:00:00+01:00 +,,,accept,,62,Simulated process instance,get review X,complete,Sam,,2007-02-16 00:00:00+01:00 +,,,,,62,Simulated process instance,decide,start,Wil,,2007-05-08 01:00:00+02:00 +,,,,1,62,Simulated process instance,decide,complete,Wil,2,2007-05-08 01:00:00+02:00 +,,,,,62,Simulated process instance,invite additional reviewer,start,Anne,,2007-05-08 01:00:00+02:00 +,,,,,62,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-11 01:00:00+02:00 +,,,reject,,62,Simulated process instance,get review X,complete,Pam,,2007-05-16 01:00:00+02:00 +,,,,,62,Simulated process instance,decide,start,Wil,,2007-08-30 01:00:00+02:00 +,,,,1,62,Simulated process instance,decide,complete,Wil,3,2007-09-04 01:00:00+02:00 +,,,,,62,Simulated process instance,invite additional reviewer,start,Anne,,2007-09-04 01:00:00+02:00 +,,,,,62,Simulated process instance,invite additional reviewer,complete,Anne,,2007-09-06 01:00:00+02:00 +,,,accept,,62,Simulated process instance,get review X,complete,Mary,,2007-09-09 01:00:00+02:00 +,,,,,62,Simulated process instance,decide,start,Wil,,2008-01-29 00:00:00+01:00 +,,,,2,62,Simulated process instance,decide,complete,Wil,3,2008-02-02 00:00:00+01:00 +,,,,,62,Simulated process instance,invite additional reviewer,start,Anne,,2008-02-02 00:00:00+01:00 +,,,,,62,Simulated process instance,invite additional reviewer,complete,Anne,,2008-02-06 00:00:00+01:00 +,,,reject,,62,Simulated process instance,get review X,complete,Carol,,2008-02-09 00:00:00+01:00 +,,,,,62,Simulated process instance,decide,start,Wil,,2008-05-05 01:00:00+02:00 +,,,,2,62,Simulated process instance,decide,complete,Wil,4,2008-05-05 01:00:00+02:00 +,,,,,62,Simulated process instance,reject,start,Mike,,2008-05-05 01:00:00+02:00 +,,,,,62,Simulated process instance,reject,complete,Mike,,2008-05-09 01:00:00+02:00 +,,,,,63,Simulated process instance,invite reviewers,start,Anne,,2006-09-09 01:00:00+02:00 +,,,,,63,Simulated process instance,invite reviewers,complete,Anne,,2006-09-09 01:00:00+02:00 +,,accept,,,63,Simulated process instance,get review 3,complete,Pete,,2006-09-09 01:00:00+02:00 +,,,,,63,Simulated process instance,time-out 1,complete,__INVALID__,,2006-09-17 01:00:00+02:00 +,,,,,63,Simulated process instance,time-out 2,complete,__INVALID__,,2006-09-19 01:00:00+02:00 +,,,,,63,Simulated process instance,collect reviews,start,Mike,,2006-09-25 01:00:00+02:00 +,,,,,63,Simulated process instance,collect reviews,complete,Mike,,2006-09-26 01:00:00+02:00 +,,,,,63,Simulated process instance,decide,start,Wil,,2006-11-01 00:00:00+01:00 +,,,,2,63,Simulated process instance,decide,complete,Wil,0,2006-11-04 00:00:00+01:00 +,,,,,63,Simulated process instance,invite additional reviewer,start,Mike,,2006-12-11 00:00:00+01:00 +,,,,,63,Simulated process instance,invite additional reviewer,complete,Mike,,2006-12-16 00:00:00+01:00 +,,,accept,,63,Simulated process instance,get review X,complete,Sam,,2006-12-16 00:00:00+01:00 +,,,,,63,Simulated process instance,decide,start,Wil,,2008-06-30 01:00:00+02:00 +,,,,3,63,Simulated process instance,decide,complete,Wil,0,2008-07-01 01:00:00+02:00 +,,,,,63,Simulated process instance,invite additional reviewer,start,Mike,,2008-07-03 01:00:00+02:00 +,,,,,63,Simulated process instance,invite additional reviewer,complete,Mike,,2008-07-05 01:00:00+02:00 +,,,reject,,63,Simulated process instance,get review X,complete,Pam,,2008-07-08 01:00:00+02:00 +,,,,,63,Simulated process instance,decide,start,Wil,,2009-06-07 01:00:00+02:00 +,,,,3,63,Simulated process instance,decide,complete,Wil,1,2009-06-07 01:00:00+02:00 +,,,,,63,Simulated process instance,invite additional reviewer,start,Mike,,2009-06-11 01:00:00+02:00 +,,,,,63,Simulated process instance,invite additional reviewer,complete,Mike,,2009-06-13 01:00:00+02:00 +,,,accept,,63,Simulated process instance,get review X,complete,John,,2009-06-13 01:00:00+02:00 +,,,,,63,Simulated process instance,decide,start,Wil,,2009-07-15 01:00:00+02:00 +,,,,4,63,Simulated process instance,decide,complete,Wil,1,2009-07-19 01:00:00+02:00 +,,,,,63,Simulated process instance,invite additional reviewer,start,Mike,,2009-07-19 01:00:00+02:00 +,,,,,63,Simulated process instance,invite additional reviewer,complete,Mike,,2009-07-22 01:00:00+02:00 +,,,accept,,63,Simulated process instance,get review X,complete,Pete,,2009-07-22 01:00:00+02:00 +,,,,,63,Simulated process instance,decide,start,Wil,,2009-10-02 01:00:00+02:00 +,,,,5,63,Simulated process instance,decide,complete,Wil,1,2009-10-02 01:00:00+02:00 +,,,,,63,Simulated process instance,accept,start,Anne,,2009-10-07 01:00:00+02:00 +,,,,,63,Simulated process instance,accept,complete,Anne,,2009-10-10 01:00:00+02:00 +,,,,,64,Simulated process instance,invite reviewers,start,Mike,,2006-09-01 01:00:00+02:00 +,,,,,64,Simulated process instance,invite reviewers,complete,Mike,,2006-09-02 01:00:00+02:00 +reject,,,,,64,Simulated process instance,get review 1,complete,Pam,,2006-09-02 01:00:00+02:00 +,,,,,64,Simulated process instance,time-out 3,complete,__INVALID__,,2006-09-02 01:00:00+02:00 +,reject,,,,64,Simulated process instance,get review 2,complete,John,,2006-09-06 01:00:00+02:00 +,,,,,64,Simulated process instance,collect reviews,start,Anne,,2006-09-10 01:00:00+02:00 +,,,,,64,Simulated process instance,collect reviews,complete,Anne,,2006-09-14 01:00:00+02:00 +,,,,,64,Simulated process instance,decide,start,Wil,,2006-09-16 01:00:00+02:00 +,,,,0,64,Simulated process instance,decide,complete,Wil,2,2006-09-17 01:00:00+02:00 +,,,,,64,Simulated process instance,invite additional reviewer,start,Anne,,2006-10-14 01:00:00+02:00 +,,,,,64,Simulated process instance,invite additional reviewer,complete,Anne,,2006-10-15 01:00:00+02:00 +,,,reject,,64,Simulated process instance,get review X,complete,Sara,,2006-10-16 01:00:00+02:00 +,,,,,64,Simulated process instance,decide,start,Wil,,2006-10-17 01:00:00+02:00 +,,,,0,64,Simulated process instance,decide,complete,Wil,3,2006-10-17 01:00:00+02:00 +,,,,,64,Simulated process instance,reject,start,Mike,,2006-10-24 01:00:00+02:00 +,,,,,64,Simulated process instance,reject,complete,Mike,,2006-10-28 01:00:00+02:00 +,,,,,65,Simulated process instance,invite reviewers,start,Mike,,2006-09-11 01:00:00+02:00 +,,,,,65,Simulated process instance,invite reviewers,complete,Mike,,2006-09-15 01:00:00+02:00 +,reject,,,,65,Simulated process instance,get review 2,complete,Carol,,2006-09-16 01:00:00+02:00 +reject,,,,,65,Simulated process instance,get review 1,complete,Sam,,2006-09-17 01:00:00+02:00 +,,reject,,,65,Simulated process instance,get review 3,complete,Mary,,2006-09-18 01:00:00+02:00 +,,,,,65,Simulated process instance,collect reviews,start,Anne,,2006-09-22 01:00:00+02:00 +,,,,,65,Simulated process instance,collect reviews,complete,Anne,,2006-09-27 01:00:00+02:00 +,,,,,65,Simulated process instance,decide,start,Wil,,2006-10-05 01:00:00+02:00 +,,,,0,65,Simulated process instance,decide,complete,Wil,3,2006-10-06 01:00:00+02:00 +,,,,,65,Simulated process instance,reject,start,Anne,,2006-10-10 01:00:00+02:00 +,,,,,65,Simulated process instance,reject,complete,Anne,,2006-10-11 01:00:00+02:00 +,,,,,66,Simulated process instance,invite reviewers,start,Anne,,2006-10-16 01:00:00+02:00 +,,,,,66,Simulated process instance,invite reviewers,complete,Anne,,2006-10-16 01:00:00+02:00 +,accept,,,,66,Simulated process instance,get review 2,complete,Pete,,2006-10-16 01:00:00+02:00 +reject,,,,,66,Simulated process instance,get review 1,complete,Pam,,2006-10-19 01:00:00+02:00 +,,,,,66,Simulated process instance,time-out 3,complete,__INVALID__,,2006-10-23 01:00:00+02:00 +,,,,,66,Simulated process instance,collect reviews,start,Anne,,2006-10-31 00:00:00+01:00 +,,,,,66,Simulated process instance,collect reviews,complete,Anne,,2006-11-02 00:00:00+01:00 +,,,,,66,Simulated process instance,decide,start,Wil,,2007-01-16 00:00:00+01:00 +,,,,1,66,Simulated process instance,decide,complete,Wil,1,2007-01-20 00:00:00+01:00 +,,,,,66,Simulated process instance,invite additional reviewer,start,Mike,,2007-01-26 00:00:00+01:00 +,,,,,66,Simulated process instance,invite additional reviewer,complete,Mike,,2007-01-31 00:00:00+01:00 +,,,,,66,Simulated process instance,time-out X,complete,__INVALID__,,2007-02-05 00:00:00+01:00 +,,,,,66,Simulated process instance,decide,start,Wil,,2007-02-06 00:00:00+01:00 +,,,,1,66,Simulated process instance,decide,complete,Wil,1,2007-02-09 00:00:00+01:00 +,,,,,66,Simulated process instance,invite additional reviewer,start,Anne,,2007-04-13 01:00:00+02:00 +,,,,,66,Simulated process instance,invite additional reviewer,complete,Anne,,2007-04-17 01:00:00+02:00 +,,,reject,,66,Simulated process instance,get review X,complete,Sam,,2007-04-22 01:00:00+02:00 +,,,,,66,Simulated process instance,decide,start,Wil,,2007-08-10 01:00:00+02:00 +,,,,1,66,Simulated process instance,decide,complete,Wil,2,2007-08-15 01:00:00+02:00 +,,,,,66,Simulated process instance,invite additional reviewer,start,Anne,,2007-08-15 01:00:00+02:00 +,,,,,66,Simulated process instance,invite additional reviewer,complete,Anne,,2007-08-20 01:00:00+02:00 +,,,reject,,66,Simulated process instance,get review X,complete,Sara,,2007-08-22 01:00:00+02:00 +,,,,,66,Simulated process instance,decide,start,Wil,,2007-11-21 00:00:00+01:00 +,,,,1,66,Simulated process instance,decide,complete,Wil,3,2007-11-26 00:00:00+01:00 +,,,,,66,Simulated process instance,invite additional reviewer,start,Anne,,2007-11-26 00:00:00+01:00 +,,,,,66,Simulated process instance,invite additional reviewer,complete,Anne,,2007-11-29 00:00:00+01:00 +,,,reject,,66,Simulated process instance,get review X,complete,Pete,,2007-11-30 00:00:00+01:00 +,,,,,66,Simulated process instance,decide,start,Wil,,2008-04-29 01:00:00+02:00 +,,,,1,66,Simulated process instance,decide,complete,Wil,4,2008-05-01 01:00:00+02:00 +,,,,,66,Simulated process instance,reject,start,Anne,,2008-05-01 01:00:00+02:00 +,,,,,66,Simulated process instance,reject,complete,Anne,,2008-05-04 01:00:00+02:00 +,,,,,67,Simulated process instance,invite reviewers,start,Anne,,2006-09-27 01:00:00+02:00 +,,,,,67,Simulated process instance,invite reviewers,complete,Anne,,2006-09-28 01:00:00+02:00 +,,accept,,,67,Simulated process instance,get review 3,complete,Pam,,2006-09-30 01:00:00+02:00 +,,,,,67,Simulated process instance,time-out 1,complete,__INVALID__,,2006-10-01 01:00:00+02:00 +,reject,,,,67,Simulated process instance,get review 2,complete,Sara,,2006-10-01 01:00:00+02:00 +,,,,,67,Simulated process instance,collect reviews,start,Anne,,2006-10-08 01:00:00+02:00 +,,,,,67,Simulated process instance,collect reviews,complete,Anne,,2006-10-10 01:00:00+02:00 +,,,,,67,Simulated process instance,decide,start,Wil,,2006-10-29 01:00:00+02:00 +,,,,1,67,Simulated process instance,decide,complete,Wil,1,2006-11-01 00:00:00+01:00 +,,,,,67,Simulated process instance,invite additional reviewer,start,Anne,,2007-01-15 00:00:00+01:00 +,,,,,67,Simulated process instance,invite additional reviewer,complete,Anne,,2007-01-18 00:00:00+01:00 +,,,,,67,Simulated process instance,time-out X,complete,__INVALID__,,2007-01-24 00:00:00+01:00 +,,,,,67,Simulated process instance,decide,start,Wil,,2007-07-06 01:00:00+02:00 +,,,,1,67,Simulated process instance,decide,complete,Wil,1,2007-07-08 01:00:00+02:00 +,,,,,67,Simulated process instance,invite additional reviewer,start,Anne,,2007-07-08 01:00:00+02:00 +,,,,,67,Simulated process instance,invite additional reviewer,complete,Anne,,2007-07-10 01:00:00+02:00 +,,,accept,,67,Simulated process instance,get review X,complete,Pam,,2007-07-12 01:00:00+02:00 +,,,,,67,Simulated process instance,decide,start,Wil,,2009-01-10 00:00:00+01:00 +,,,,2,67,Simulated process instance,decide,complete,Wil,1,2009-01-14 00:00:00+01:00 +,,,,,67,Simulated process instance,invite additional reviewer,start,Anne,,2009-01-14 00:00:00+01:00 +,,,,,67,Simulated process instance,invite additional reviewer,complete,Anne,,2009-01-14 00:00:00+01:00 +,,,accept,,67,Simulated process instance,get review X,complete,Pete,,2009-01-19 00:00:00+01:00 +,,,,,67,Simulated process instance,decide,start,Wil,,2009-06-07 01:00:00+02:00 +,,,,3,67,Simulated process instance,decide,complete,Wil,1,2009-06-07 01:00:00+02:00 +,,,,,67,Simulated process instance,invite additional reviewer,start,Mike,,2009-06-08 01:00:00+02:00 +,,,,,67,Simulated process instance,invite additional reviewer,complete,Mike,,2009-06-10 01:00:00+02:00 +,,,,,67,Simulated process instance,time-out X,complete,__INVALID__,,2009-06-19 01:00:00+02:00 +,,,,,67,Simulated process instance,decide,start,Wil,,2009-06-22 01:00:00+02:00 +,,,,3,67,Simulated process instance,decide,complete,Wil,1,2009-06-23 01:00:00+02:00 +,,,,,67,Simulated process instance,accept,start,Anne,,2009-06-23 01:00:00+02:00 +,,,,,67,Simulated process instance,accept,complete,Anne,,2009-06-28 01:00:00+02:00 +,,,,,68,Simulated process instance,invite reviewers,start,Mike,,2006-10-14 01:00:00+02:00 +,,,,,68,Simulated process instance,invite reviewers,complete,Mike,,2006-10-14 01:00:00+02:00 +reject,,,,,68,Simulated process instance,get review 1,complete,Pam,,2006-10-14 01:00:00+02:00 +,,,,,68,Simulated process instance,time-out 3,complete,__INVALID__,,2006-10-16 01:00:00+02:00 +,accept,,,,68,Simulated process instance,get review 2,complete,Carol,,2006-10-18 01:00:00+02:00 +,,,,,68,Simulated process instance,collect reviews,start,Anne,,2006-11-02 00:00:00+01:00 +,,,,,68,Simulated process instance,collect reviews,complete,Anne,,2006-11-02 00:00:00+01:00 +,,,,,68,Simulated process instance,decide,start,Wil,,2006-12-06 00:00:00+01:00 +,,,,1,68,Simulated process instance,decide,complete,Wil,1,2006-12-11 00:00:00+01:00 +,,,,,68,Simulated process instance,invite additional reviewer,start,Anne,,2007-01-20 00:00:00+01:00 +,,,,,68,Simulated process instance,invite additional reviewer,complete,Anne,,2007-01-22 00:00:00+01:00 +,,,,,68,Simulated process instance,time-out X,complete,__INVALID__,,2007-01-22 00:00:00+01:00 +,,,,,68,Simulated process instance,decide,start,Wil,,2007-02-02 00:00:00+01:00 +,,,,1,68,Simulated process instance,decide,complete,Wil,1,2007-02-06 00:00:00+01:00 +,,,,,68,Simulated process instance,invite additional reviewer,start,Mike,,2007-03-02 00:00:00+01:00 +,,,,,68,Simulated process instance,invite additional reviewer,complete,Mike,,2007-03-03 00:00:00+01:00 +,,,reject,,68,Simulated process instance,get review X,complete,Pam,,2007-03-07 00:00:00+01:00 +,,,,,68,Simulated process instance,decide,start,Wil,,2007-07-01 01:00:00+02:00 +,,,,1,68,Simulated process instance,decide,complete,Wil,2,2007-07-06 01:00:00+02:00 +,,,,,68,Simulated process instance,invite additional reviewer,start,Mike,,2007-07-06 01:00:00+02:00 +,,,,,68,Simulated process instance,invite additional reviewer,complete,Mike,,2007-07-09 01:00:00+02:00 +,,,,,68,Simulated process instance,time-out X,complete,__INVALID__,,2007-07-09 01:00:00+02:00 +,,,,,68,Simulated process instance,decide,start,Wil,,2008-07-17 01:00:00+02:00 +,,,,1,68,Simulated process instance,decide,complete,Wil,2,2008-07-17 01:00:00+02:00 +,,,,,68,Simulated process instance,invite additional reviewer,start,Anne,,2008-07-17 01:00:00+02:00 +,,,,,68,Simulated process instance,invite additional reviewer,complete,Anne,,2008-07-18 01:00:00+02:00 +,,,accept,,68,Simulated process instance,get review X,complete,John,,2008-07-23 01:00:00+02:00 +,,,,,68,Simulated process instance,decide,start,Wil,,2009-03-05 00:00:00+01:00 +,,,,2,68,Simulated process instance,decide,complete,Wil,2,2009-03-06 00:00:00+01:00 +,,,,,68,Simulated process instance,invite additional reviewer,start,Mike,,2009-03-06 00:00:00+01:00 +,,,,,68,Simulated process instance,invite additional reviewer,complete,Mike,,2009-03-07 00:00:00+01:00 +,,,accept,,68,Simulated process instance,get review X,complete,Sara,,2009-03-10 00:00:00+01:00 +,,,,,68,Simulated process instance,decide,start,Wil,,2009-04-07 01:00:00+02:00 +,,,,3,68,Simulated process instance,decide,complete,Wil,2,2009-04-07 01:00:00+02:00 +,,,,,68,Simulated process instance,accept,start,Anne,,2009-04-07 01:00:00+02:00 +,,,,,68,Simulated process instance,accept,complete,Anne,,2009-04-08 01:00:00+02:00 +,,,,,69,Simulated process instance,invite reviewers,start,Anne,,2006-09-28 01:00:00+02:00 +,,,,,69,Simulated process instance,invite reviewers,complete,Anne,,2006-09-29 01:00:00+02:00 +,,,,,69,Simulated process instance,time-out 3,complete,__INVALID__,,2006-09-30 01:00:00+02:00 +reject,,,,,69,Simulated process instance,get review 1,complete,John,,2006-10-01 01:00:00+02:00 +,,,,,69,Simulated process instance,time-out 2,complete,__INVALID__,,2006-10-01 01:00:00+02:00 +,,,,,69,Simulated process instance,collect reviews,start,Anne,,2006-10-11 01:00:00+02:00 +,,,,,69,Simulated process instance,collect reviews,complete,Anne,,2006-10-14 01:00:00+02:00 +,,,,,69,Simulated process instance,decide,start,Wil,,2007-08-19 01:00:00+02:00 +,,,,1,69,Simulated process instance,decide,complete,Wil,1,2007-08-19 01:00:00+02:00 +,,,,,69,Simulated process instance,invite additional reviewer,start,Anne,,2007-08-20 01:00:00+02:00 +,,,,,69,Simulated process instance,invite additional reviewer,complete,Anne,,2007-08-24 01:00:00+02:00 +,,,,,69,Simulated process instance,time-out X,complete,__INVALID__,,2007-08-29 01:00:00+02:00 +,,,,,69,Simulated process instance,decide,start,Wil,,2007-12-01 00:00:00+01:00 +,,,,1,69,Simulated process instance,decide,complete,Wil,1,2007-12-02 00:00:00+01:00 +,,,,,69,Simulated process instance,invite additional reviewer,start,Anne,,2007-12-02 00:00:00+01:00 +,,,,,69,Simulated process instance,invite additional reviewer,complete,Anne,,2007-12-03 00:00:00+01:00 +,,,reject,,69,Simulated process instance,get review X,complete,Mary,,2007-12-03 00:00:00+01:00 +,,,,,69,Simulated process instance,decide,start,Wil,,2008-12-04 00:00:00+01:00 +,,,,1,69,Simulated process instance,decide,complete,Wil,2,2008-12-09 00:00:00+01:00 +,,,,,69,Simulated process instance,invite additional reviewer,start,Anne,,2008-12-09 00:00:00+01:00 +,,,,,69,Simulated process instance,invite additional reviewer,complete,Anne,,2008-12-12 00:00:00+01:00 +,,,,,69,Simulated process instance,time-out X,complete,__INVALID__,,2008-12-14 00:00:00+01:00 +,,,,,69,Simulated process instance,decide,start,Wil,,2009-04-12 01:00:00+02:00 +,,,,1,69,Simulated process instance,decide,complete,Wil,2,2009-04-13 01:00:00+02:00 +,,,,,69,Simulated process instance,invite additional reviewer,start,Anne,,2009-04-13 01:00:00+02:00 +,,,,,69,Simulated process instance,invite additional reviewer,complete,Anne,,2009-04-14 01:00:00+02:00 +,,,,,69,Simulated process instance,time-out X,complete,__INVALID__,,2009-04-18 01:00:00+02:00 +,,,,,69,Simulated process instance,decide,start,Wil,,2009-08-19 01:00:00+02:00 +,,,,1,69,Simulated process instance,decide,complete,Wil,2,2009-08-19 01:00:00+02:00 +,,,,,69,Simulated process instance,invite additional reviewer,start,Mike,,2009-08-19 01:00:00+02:00 +,,,,,69,Simulated process instance,invite additional reviewer,complete,Mike,,2009-08-22 01:00:00+02:00 +,,,reject,,69,Simulated process instance,get review X,complete,Sam,,2009-08-25 01:00:00+02:00 +,,,,,69,Simulated process instance,decide,start,Wil,,2009-10-01 01:00:00+02:00 +,,,,1,69,Simulated process instance,decide,complete,Wil,3,2009-10-02 01:00:00+02:00 +,,,,,69,Simulated process instance,reject,start,Mike,,2009-10-06 01:00:00+02:00 +,,,,,69,Simulated process instance,reject,complete,Mike,,2009-10-11 01:00:00+02:00 +,,,,,7,Simulated process instance,invite reviewers,start,Mike,,2006-01-21 00:00:00+01:00 +,,,,,7,Simulated process instance,invite reviewers,complete,Mike,,2006-01-23 00:00:00+01:00 +reject,,,,,7,Simulated process instance,get review 1,complete,Carol,,2006-01-25 00:00:00+01:00 +,reject,,,,7,Simulated process instance,get review 2,complete,Pam,,2006-01-27 00:00:00+01:00 +,,,,,7,Simulated process instance,time-out 3,complete,__INVALID__,,2006-02-01 00:00:00+01:00 +,,,,,7,Simulated process instance,collect reviews,start,Anne,,2006-02-01 00:00:00+01:00 +,,,,,7,Simulated process instance,collect reviews,complete,Anne,,2006-02-01 00:00:00+01:00 +,,,,,7,Simulated process instance,decide,start,Wil,,2006-02-03 00:00:00+01:00 +,,,,0,7,Simulated process instance,decide,complete,Wil,2,2006-02-06 00:00:00+01:00 +,,,,,7,Simulated process instance,invite additional reviewer,start,Mike,,2006-02-06 00:00:00+01:00 +,,,,,7,Simulated process instance,invite additional reviewer,complete,Mike,,2006-02-07 00:00:00+01:00 +,,,,,7,Simulated process instance,time-out X,complete,__INVALID__,,2006-02-14 00:00:00+01:00 +,,,,,7,Simulated process instance,decide,start,Wil,,2006-02-19 00:00:00+01:00 +,,,,0,7,Simulated process instance,decide,complete,Wil,2,2006-02-24 00:00:00+01:00 +,,,,,7,Simulated process instance,invite additional reviewer,start,Anne,,2006-02-24 00:00:00+01:00 +,,,,,7,Simulated process instance,invite additional reviewer,complete,Anne,,2006-03-01 00:00:00+01:00 +,,,accept,,7,Simulated process instance,get review X,complete,Sara,,2006-03-01 00:00:00+01:00 +,,,,,7,Simulated process instance,decide,start,Wil,,2006-04-03 01:00:00+02:00 +,,,,1,7,Simulated process instance,decide,complete,Wil,2,2006-04-08 01:00:00+02:00 +,,,,,7,Simulated process instance,invite additional reviewer,start,Anne,,2006-04-09 01:00:00+02:00 +,,,,,7,Simulated process instance,invite additional reviewer,complete,Anne,,2006-04-11 01:00:00+02:00 +,,,reject,,7,Simulated process instance,get review X,complete,Pam,,2006-04-16 01:00:00+02:00 +,,,,,7,Simulated process instance,decide,start,Wil,,2006-05-09 01:00:00+02:00 +,,,,1,7,Simulated process instance,decide,complete,Wil,3,2006-05-14 01:00:00+02:00 +,,,,,7,Simulated process instance,reject,start,Mike,,2006-05-17 01:00:00+02:00 +,,,,,7,Simulated process instance,reject,complete,Mike,,2006-05-20 01:00:00+02:00 +,,,,,70,Simulated process instance,invite reviewers,start,Mike,,2006-10-09 01:00:00+02:00 +,,,,,70,Simulated process instance,invite reviewers,complete,Mike,,2006-10-14 01:00:00+02:00 +,,,,,70,Simulated process instance,time-out 1,complete,__INVALID__,,2006-10-14 01:00:00+02:00 +,,,,,70,Simulated process instance,time-out 3,complete,__INVALID__,,2006-10-15 01:00:00+02:00 +,,,,,70,Simulated process instance,time-out 2,complete,__INVALID__,,2006-10-16 01:00:00+02:00 +,,,,,70,Simulated process instance,collect reviews,start,Mike,,2006-11-02 00:00:00+01:00 +,,,,,70,Simulated process instance,collect reviews,complete,Mike,,2006-11-06 00:00:00+01:00 +,,,,,70,Simulated process instance,decide,start,Wil,,2006-11-27 00:00:00+01:00 +,,,,1,70,Simulated process instance,decide,complete,Wil,0,2006-11-27 00:00:00+01:00 +,,,,,70,Simulated process instance,invite additional reviewer,start,Mike,,2007-01-31 00:00:00+01:00 +,,,,,70,Simulated process instance,invite additional reviewer,complete,Mike,,2007-02-03 00:00:00+01:00 +,,,,,70,Simulated process instance,time-out X,complete,__INVALID__,,2007-02-06 00:00:00+01:00 +,,,,,70,Simulated process instance,decide,start,Wil,,2007-03-06 00:00:00+01:00 +,,,,1,70,Simulated process instance,decide,complete,Wil,0,2007-03-08 00:00:00+01:00 +,,,,,70,Simulated process instance,invite additional reviewer,start,Anne,,2007-05-04 01:00:00+02:00 +,,,,,70,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-06 01:00:00+02:00 +,,,reject,,70,Simulated process instance,get review X,complete,Pete,,2007-05-08 01:00:00+02:00 +,,,,,70,Simulated process instance,decide,start,Wil,,2007-08-26 01:00:00+02:00 +,,,,1,70,Simulated process instance,decide,complete,Wil,1,2007-08-30 01:00:00+02:00 +,,,,,70,Simulated process instance,invite additional reviewer,start,Mike,,2007-08-30 01:00:00+02:00 +,,,,,70,Simulated process instance,invite additional reviewer,complete,Mike,,2007-09-03 01:00:00+02:00 +,,,reject,,70,Simulated process instance,get review X,complete,Carol,,2007-09-03 01:00:00+02:00 +,,,,,70,Simulated process instance,decide,start,Wil,,2007-12-06 00:00:00+01:00 +,,,,1,70,Simulated process instance,decide,complete,Wil,2,2007-12-06 00:00:00+01:00 +,,,,,70,Simulated process instance,invite additional reviewer,start,Anne,,2007-12-06 00:00:00+01:00 +,,,,,70,Simulated process instance,invite additional reviewer,complete,Anne,,2007-12-10 00:00:00+01:00 +,,,reject,,70,Simulated process instance,get review X,complete,Sara,,2007-12-11 00:00:00+01:00 +,,,,,70,Simulated process instance,decide,start,Wil,,2008-01-14 00:00:00+01:00 +,,,,1,70,Simulated process instance,decide,complete,Wil,3,2008-01-19 00:00:00+01:00 +,,,,,70,Simulated process instance,reject,start,Anne,,2008-01-19 00:00:00+01:00 +,,,,,70,Simulated process instance,reject,complete,Anne,,2008-01-20 00:00:00+01:00 +,,,,,71,Simulated process instance,invite reviewers,start,Anne,,2006-10-06 01:00:00+02:00 +,,,,,71,Simulated process instance,invite reviewers,complete,Anne,,2006-10-08 01:00:00+02:00 +,,,,,71,Simulated process instance,time-out 2,complete,__INVALID__,,2006-10-10 01:00:00+02:00 +accept,,,,,71,Simulated process instance,get review 1,complete,Carol,,2006-10-11 01:00:00+02:00 +,,,,,71,Simulated process instance,time-out 3,complete,__INVALID__,,2006-10-12 01:00:00+02:00 +,,,,,71,Simulated process instance,collect reviews,start,Anne,,2006-10-21 01:00:00+02:00 +,,,,,71,Simulated process instance,collect reviews,complete,Anne,,2006-10-23 01:00:00+02:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2007-06-17 01:00:00+02:00 +,,,,1,71,Simulated process instance,decide,complete,Wil,1,2007-06-20 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,start,Anne,,2007-06-20 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,complete,Anne,,2007-06-22 01:00:00+02:00 +,,,,,71,Simulated process instance,time-out X,complete,__INVALID__,,2007-06-28 01:00:00+02:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2007-09-06 01:00:00+02:00 +,,,,1,71,Simulated process instance,decide,complete,Wil,1,2007-09-09 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,start,Anne,,2007-09-09 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,complete,Anne,,2007-09-13 01:00:00+02:00 +,,,,,71,Simulated process instance,time-out X,complete,__INVALID__,,2007-09-17 01:00:00+02:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2008-08-22 01:00:00+02:00 +,,,,1,71,Simulated process instance,decide,complete,Wil,1,2008-08-24 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,start,Mike,,2008-08-24 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,complete,Mike,,2008-08-24 01:00:00+02:00 +,,,reject,,71,Simulated process instance,get review X,complete,Sam,,2008-08-26 01:00:00+02:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2008-09-10 01:00:00+02:00 +,,,,1,71,Simulated process instance,decide,complete,Wil,2,2008-09-11 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,start,Mike,,2008-09-11 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,complete,Mike,,2008-09-12 01:00:00+02:00 +,,,accept,,71,Simulated process instance,get review X,complete,Mary,,2008-09-15 01:00:00+02:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2008-11-16 00:00:00+01:00 +,,,,2,71,Simulated process instance,decide,complete,Wil,2,2008-11-20 00:00:00+01:00 +,,,,,71,Simulated process instance,invite additional reviewer,start,Mike,,2008-11-20 00:00:00+01:00 +,,,,,71,Simulated process instance,invite additional reviewer,complete,Mike,,2008-11-21 00:00:00+01:00 +,,,,,71,Simulated process instance,time-out X,complete,__INVALID__,,2008-11-21 00:00:00+01:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2009-06-05 01:00:00+02:00 +,,,,2,71,Simulated process instance,decide,complete,Wil,2,2009-06-07 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,start,Mike,,2009-06-10 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,complete,Mike,,2009-06-11 01:00:00+02:00 +,,,,,71,Simulated process instance,time-out X,complete,__INVALID__,,2009-06-11 01:00:00+02:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2009-07-01 01:00:00+02:00 +,,,,2,71,Simulated process instance,decide,complete,Wil,2,2009-07-05 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,start,Anne,,2009-07-05 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,complete,Anne,,2009-07-05 01:00:00+02:00 +,,,,,71,Simulated process instance,time-out X,complete,__INVALID__,,2009-07-12 01:00:00+02:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2009-08-05 01:00:00+02:00 +,,,,2,71,Simulated process instance,decide,complete,Wil,2,2009-08-10 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,start,Anne,,2009-08-10 01:00:00+02:00 +,,,,,71,Simulated process instance,invite additional reviewer,complete,Anne,,2009-08-13 01:00:00+02:00 +,,,,,71,Simulated process instance,time-out X,complete,__INVALID__,,2009-08-16 01:00:00+02:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2009-10-29 00:00:00+01:00 +,,,,2,71,Simulated process instance,decide,complete,Wil,2,2009-11-01 00:00:00+01:00 +,,,,,71,Simulated process instance,invite additional reviewer,start,Anne,,2009-11-01 00:00:00+01:00 +,,,,,71,Simulated process instance,invite additional reviewer,complete,Anne,,2009-11-03 00:00:00+01:00 +,,,,,71,Simulated process instance,time-out X,complete,__INVALID__,,2009-11-05 00:00:00+01:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2010-01-17 00:00:00+01:00 +,,,,2,71,Simulated process instance,decide,complete,Wil,2,2010-01-21 00:00:00+01:00 +,,,,,71,Simulated process instance,invite additional reviewer,start,Mike,,2010-01-21 00:00:00+01:00 +,,,,,71,Simulated process instance,invite additional reviewer,complete,Mike,,2010-01-22 00:00:00+01:00 +,,,reject,,71,Simulated process instance,get review X,complete,Mary,,2010-01-27 00:00:00+01:00 +,,,,,71,Simulated process instance,decide,start,Wil,,2010-02-14 00:00:00+01:00 +,,,,2,71,Simulated process instance,decide,complete,Wil,3,2010-02-19 00:00:00+01:00 +,,,,,71,Simulated process instance,reject,start,Anne,,2010-02-19 00:00:00+01:00 +,,,,,71,Simulated process instance,reject,complete,Anne,,2010-02-22 00:00:00+01:00 +,,,,,72,Simulated process instance,invite reviewers,start,Mike,,2006-10-23 01:00:00+02:00 +,,,,,72,Simulated process instance,invite reviewers,complete,Mike,,2006-10-24 01:00:00+02:00 +,,,,,72,Simulated process instance,time-out 3,complete,__INVALID__,,2006-10-24 01:00:00+02:00 +,,,,,72,Simulated process instance,time-out 1,complete,__INVALID__,,2006-10-28 01:00:00+02:00 +,,,,,72,Simulated process instance,time-out 2,complete,__INVALID__,,2006-10-31 00:00:00+01:00 +,,,,,72,Simulated process instance,collect reviews,start,Mike,,2006-12-01 00:00:00+01:00 +,,,,,72,Simulated process instance,collect reviews,complete,Mike,,2006-12-02 00:00:00+01:00 +,,,,,72,Simulated process instance,decide,start,Wil,,2007-06-29 01:00:00+02:00 +,,,,1,72,Simulated process instance,decide,complete,Wil,0,2007-07-01 01:00:00+02:00 +,,,,,72,Simulated process instance,invite additional reviewer,start,Anne,,2007-07-01 01:00:00+02:00 +,,,,,72,Simulated process instance,invite additional reviewer,complete,Anne,,2007-07-01 01:00:00+02:00 +,,,reject,,72,Simulated process instance,get review X,complete,Sara,,2007-07-05 01:00:00+02:00 +,,,,,72,Simulated process instance,decide,start,Wil,,2007-07-30 01:00:00+02:00 +,,,,1,72,Simulated process instance,decide,complete,Wil,1,2007-08-04 01:00:00+02:00 +,,,,,72,Simulated process instance,invite additional reviewer,start,Mike,,2007-08-04 01:00:00+02:00 +,,,,,72,Simulated process instance,invite additional reviewer,complete,Mike,,2007-08-05 01:00:00+02:00 +,,,,,72,Simulated process instance,time-out X,complete,__INVALID__,,2007-08-10 01:00:00+02:00 +,,,,,72,Simulated process instance,decide,start,Wil,,2008-07-18 01:00:00+02:00 +,,,,1,72,Simulated process instance,decide,complete,Wil,1,2008-07-22 01:00:00+02:00 +,,,,,72,Simulated process instance,invite additional reviewer,start,Anne,,2008-07-22 01:00:00+02:00 +,,,,,72,Simulated process instance,invite additional reviewer,complete,Anne,,2008-07-25 01:00:00+02:00 +,,,,,72,Simulated process instance,time-out X,complete,__INVALID__,,2008-07-31 01:00:00+02:00 +,,,,,72,Simulated process instance,decide,start,Wil,,2008-11-15 00:00:00+01:00 +,,,,1,72,Simulated process instance,decide,complete,Wil,1,2008-11-16 00:00:00+01:00 +,,,,,72,Simulated process instance,invite additional reviewer,start,Anne,,2008-11-16 00:00:00+01:00 +,,,,,72,Simulated process instance,invite additional reviewer,complete,Anne,,2008-11-21 00:00:00+01:00 +,,,accept,,72,Simulated process instance,get review X,complete,Pete,,2008-11-25 00:00:00+01:00 +,,,,,72,Simulated process instance,decide,start,Wil,,2009-01-06 00:00:00+01:00 +,,,,2,72,Simulated process instance,decide,complete,Wil,1,2009-01-10 00:00:00+01:00 +,,,,,72,Simulated process instance,invite additional reviewer,start,Mike,,2009-01-10 00:00:00+01:00 +,,,,,72,Simulated process instance,invite additional reviewer,complete,Mike,,2009-01-14 00:00:00+01:00 +,,,,,72,Simulated process instance,time-out X,complete,__INVALID__,,2009-01-20 00:00:00+01:00 +,,,,,72,Simulated process instance,decide,start,Wil,,2009-01-27 00:00:00+01:00 +,,,,2,72,Simulated process instance,decide,complete,Wil,1,2009-02-01 00:00:00+01:00 +,,,,,72,Simulated process instance,invite additional reviewer,start,Mike,,2009-02-01 00:00:00+01:00 +,,,,,72,Simulated process instance,invite additional reviewer,complete,Mike,,2009-02-02 00:00:00+01:00 +,,,accept,,72,Simulated process instance,get review X,complete,John,,2009-02-02 00:00:00+01:00 +,,,,,72,Simulated process instance,decide,start,Wil,,2009-03-20 00:00:00+01:00 +,,,,3,72,Simulated process instance,decide,complete,Wil,1,2009-03-20 00:00:00+01:00 +,,,,,72,Simulated process instance,accept,start,Anne,,2009-03-20 00:00:00+01:00 +,,,,,72,Simulated process instance,accept,complete,Anne,,2009-03-22 00:00:00+01:00 +,,,,,73,Simulated process instance,invite reviewers,start,Anne,,2006-10-24 01:00:00+02:00 +,,,,,73,Simulated process instance,invite reviewers,complete,Anne,,2006-10-25 01:00:00+02:00 +,accept,,,,73,Simulated process instance,get review 2,complete,Pete,,2006-10-27 01:00:00+02:00 +accept,,,,,73,Simulated process instance,get review 1,complete,Pam,,2006-10-29 01:00:00+02:00 +,,,,,73,Simulated process instance,time-out 3,complete,__INVALID__,,2006-11-03 00:00:00+01:00 +,,,,,73,Simulated process instance,collect reviews,start,Anne,,2006-11-09 00:00:00+01:00 +,,,,,73,Simulated process instance,collect reviews,complete,Anne,,2006-11-14 00:00:00+01:00 +,,,,,73,Simulated process instance,decide,start,Wil,,2007-06-06 01:00:00+02:00 +,,,,2,73,Simulated process instance,decide,complete,Wil,0,2007-06-09 01:00:00+02:00 +,,,,,73,Simulated process instance,invite additional reviewer,start,Mike,,2007-06-09 01:00:00+02:00 +,,,,,73,Simulated process instance,invite additional reviewer,complete,Mike,,2007-06-13 01:00:00+02:00 +,,,,,73,Simulated process instance,time-out X,complete,__INVALID__,,2007-06-18 01:00:00+02:00 +,,,,,73,Simulated process instance,decide,start,Wil,,2007-10-30 00:00:00+01:00 +,,,,2,73,Simulated process instance,decide,complete,Wil,0,2007-11-01 00:00:00+01:00 +,,,,,73,Simulated process instance,invite additional reviewer,start,Mike,,2007-11-01 00:00:00+01:00 +,,,,,73,Simulated process instance,invite additional reviewer,complete,Mike,,2007-11-05 00:00:00+01:00 +,,,reject,,73,Simulated process instance,get review X,complete,Mary,,2007-11-08 00:00:00+01:00 +,,,,,73,Simulated process instance,decide,start,Wil,,2008-08-25 01:00:00+02:00 +,,,,2,73,Simulated process instance,decide,complete,Wil,1,2008-08-27 01:00:00+02:00 +,,,,,73,Simulated process instance,invite additional reviewer,start,Mike,,2008-08-27 01:00:00+02:00 +,,,,,73,Simulated process instance,invite additional reviewer,complete,Mike,,2008-08-27 01:00:00+02:00 +,,,,,73,Simulated process instance,time-out X,complete,__INVALID__,,2008-09-05 01:00:00+02:00 +,,,,,73,Simulated process instance,decide,start,Wil,,2008-09-11 01:00:00+02:00 +,,,,2,73,Simulated process instance,decide,complete,Wil,1,2008-09-15 01:00:00+02:00 +,,,,,73,Simulated process instance,invite additional reviewer,start,Anne,,2008-09-15 01:00:00+02:00 +,,,,,73,Simulated process instance,invite additional reviewer,complete,Anne,,2008-09-18 01:00:00+02:00 +,,,accept,,73,Simulated process instance,get review X,complete,Carol,,2008-09-19 01:00:00+02:00 +,,,,,73,Simulated process instance,decide,start,Wil,,2009-06-07 01:00:00+02:00 +,,,,3,73,Simulated process instance,decide,complete,Wil,1,2009-06-07 01:00:00+02:00 +,,,,,73,Simulated process instance,accept,start,Anne,,2009-06-10 01:00:00+02:00 +,,,,,73,Simulated process instance,accept,complete,Anne,,2009-06-13 01:00:00+02:00 +,,,,,74,Simulated process instance,invite reviewers,start,Mike,,2006-10-23 01:00:00+02:00 +,,,,,74,Simulated process instance,invite reviewers,complete,Mike,,2006-10-23 01:00:00+02:00 +,,accept,,,74,Simulated process instance,get review 3,complete,Carol,,2006-10-24 01:00:00+02:00 +,,,,,74,Simulated process instance,time-out 2,complete,__INVALID__,,2006-10-25 01:00:00+02:00 +reject,,,,,74,Simulated process instance,get review 1,complete,Pam,,2006-10-25 01:00:00+02:00 +,,,,,74,Simulated process instance,collect reviews,start,Anne,,2006-11-07 00:00:00+01:00 +,,,,,74,Simulated process instance,collect reviews,complete,Anne,,2006-11-09 00:00:00+01:00 +,,,,,74,Simulated process instance,decide,start,Wil,,2006-12-19 00:00:00+01:00 +,,,,1,74,Simulated process instance,decide,complete,Wil,2,2006-12-21 00:00:00+01:00 +,,,,,74,Simulated process instance,invite additional reviewer,start,Mike,,2007-02-03 00:00:00+01:00 +,,,,,74,Simulated process instance,invite additional reviewer,complete,Mike,,2007-02-07 00:00:00+01:00 +,,,reject,,74,Simulated process instance,get review X,complete,Mary,,2007-02-11 00:00:00+01:00 +,,,,,74,Simulated process instance,decide,start,Wil,,2007-09-26 01:00:00+02:00 +,,,,1,74,Simulated process instance,decide,complete,Wil,3,2007-09-30 01:00:00+02:00 +,,,,,74,Simulated process instance,invite additional reviewer,start,Anne,,2007-09-30 01:00:00+02:00 +,,,,,74,Simulated process instance,invite additional reviewer,complete,Anne,,2007-09-30 01:00:00+02:00 +,,,accept,,74,Simulated process instance,get review X,complete,Sara,,2007-10-03 01:00:00+02:00 +,,,,,74,Simulated process instance,decide,start,Wil,,2008-03-30 00:00:00+01:00 +,,,,2,74,Simulated process instance,decide,complete,Wil,3,2008-03-31 01:00:00+02:00 +,,,,,74,Simulated process instance,invite additional reviewer,start,Mike,,2008-04-01 01:00:00+02:00 +,,,,,74,Simulated process instance,invite additional reviewer,complete,Mike,,2008-04-04 01:00:00+02:00 +,,,accept,,74,Simulated process instance,get review X,complete,John,,2008-04-08 01:00:00+02:00 +,,,,,74,Simulated process instance,decide,start,Wil,,2010-02-21 00:00:00+01:00 +,,,,3,74,Simulated process instance,decide,complete,Wil,3,2010-02-26 00:00:00+01:00 +,,,,,74,Simulated process instance,invite additional reviewer,start,Mike,,2010-02-26 00:00:00+01:00 +,,,,,74,Simulated process instance,invite additional reviewer,complete,Mike,,2010-03-01 00:00:00+01:00 +,,,,,74,Simulated process instance,time-out X,complete,__INVALID__,,2010-03-06 00:00:00+01:00 +,,,,,74,Simulated process instance,decide,start,Wil,,2010-03-27 00:00:00+01:00 +,,,,3,74,Simulated process instance,decide,complete,Wil,3,2010-04-01 01:00:00+02:00 +,,,,,74,Simulated process instance,invite additional reviewer,start,Anne,,2010-04-01 01:00:00+02:00 +,,,,,74,Simulated process instance,invite additional reviewer,complete,Anne,,2010-04-01 01:00:00+02:00 +,,,reject,,74,Simulated process instance,get review X,complete,Sara,,2010-04-04 01:00:00+02:00 +,,,,,74,Simulated process instance,decide,start,Wil,,2010-05-01 01:00:00+02:00 +,,,,3,74,Simulated process instance,decide,complete,Wil,4,2010-05-03 01:00:00+02:00 +,,,,,74,Simulated process instance,reject,start,Anne,,2010-05-03 01:00:00+02:00 +,,,,,74,Simulated process instance,reject,complete,Anne,,2010-05-04 01:00:00+02:00 +,,,,,75,Simulated process instance,invite reviewers,start,Mike,,2006-10-28 01:00:00+02:00 +,,,,,75,Simulated process instance,invite reviewers,complete,Mike,,2006-11-02 00:00:00+01:00 +,,,,,75,Simulated process instance,time-out 3,complete,__INVALID__,,2006-11-06 00:00:00+01:00 +accept,,,,,75,Simulated process instance,get review 1,complete,Carol,,2006-11-06 00:00:00+01:00 +,reject,,,,75,Simulated process instance,get review 2,complete,Pete,,2006-11-07 00:00:00+01:00 +,,,,,75,Simulated process instance,collect reviews,start,Mike,,2006-11-16 00:00:00+01:00 +,,,,,75,Simulated process instance,collect reviews,complete,Mike,,2006-11-19 00:00:00+01:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2006-12-21 00:00:00+01:00 +,,,,1,75,Simulated process instance,decide,complete,Wil,1,2007-01-01 00:00:00+01:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Mike,,2007-02-22 00:00:00+01:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Mike,,2007-02-26 00:00:00+01:00 +,,,,,75,Simulated process instance,time-out X,complete,__INVALID__,,2007-03-03 00:00:00+01:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2008-04-11 01:00:00+02:00 +,,,,1,75,Simulated process instance,decide,complete,Wil,1,2008-04-16 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Mike,,2008-04-16 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Mike,,2008-04-21 01:00:00+02:00 +,,,reject,,75,Simulated process instance,get review X,complete,Sara,,2008-04-22 01:00:00+02:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2008-04-23 01:00:00+02:00 +,,,,1,75,Simulated process instance,decide,complete,Wil,2,2008-04-25 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Anne,,2008-04-25 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Anne,,2008-04-25 01:00:00+02:00 +,,,,,75,Simulated process instance,time-out X,complete,__INVALID__,,2008-04-25 01:00:00+02:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2008-05-22 01:00:00+02:00 +,,,,1,75,Simulated process instance,decide,complete,Wil,2,2008-05-25 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Anne,,2008-05-25 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Anne,,2008-05-27 01:00:00+02:00 +,,,,,75,Simulated process instance,time-out X,complete,__INVALID__,,2008-05-30 01:00:00+02:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2008-08-14 01:00:00+02:00 +,,,,1,75,Simulated process instance,decide,complete,Wil,2,2008-08-15 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Mike,,2008-08-15 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Mike,,2008-08-19 01:00:00+02:00 +,,,,,75,Simulated process instance,time-out X,complete,__INVALID__,,2008-08-21 01:00:00+02:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2008-12-15 00:00:00+01:00 +,,,,1,75,Simulated process instance,decide,complete,Wil,2,2008-12-15 00:00:00+01:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Mike,,2008-12-15 00:00:00+01:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Mike,,2008-12-18 00:00:00+01:00 +,,,,,75,Simulated process instance,time-out X,complete,__INVALID__,,2008-12-24 00:00:00+01:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2009-10-14 01:00:00+02:00 +,,,,1,75,Simulated process instance,decide,complete,Wil,2,2009-10-14 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Anne,,2009-10-17 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Anne,,2009-10-21 01:00:00+02:00 +,,,accept,,75,Simulated process instance,get review X,complete,John,,2009-10-23 01:00:00+02:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2009-12-09 00:00:00+01:00 +,,,,2,75,Simulated process instance,decide,complete,Wil,2,2009-12-12 00:00:00+01:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Mike,,2009-12-12 00:00:00+01:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Mike,,2009-12-14 00:00:00+01:00 +,,,,,75,Simulated process instance,time-out X,complete,__INVALID__,,2009-12-15 00:00:00+01:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2010-03-07 00:00:00+01:00 +,,,,2,75,Simulated process instance,decide,complete,Wil,2,2010-03-08 00:00:00+01:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Anne,,2010-03-11 00:00:00+01:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Anne,,2010-03-13 00:00:00+01:00 +,,,,,75,Simulated process instance,time-out X,complete,__INVALID__,,2010-03-22 00:00:00+01:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2010-03-23 00:00:00+01:00 +,,,,2,75,Simulated process instance,decide,complete,Wil,2,2010-03-23 00:00:00+01:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Anne,,2010-03-23 00:00:00+01:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Anne,,2010-03-23 00:00:00+01:00 +,,,,,75,Simulated process instance,time-out X,complete,__INVALID__,,2010-03-28 00:00:00+01:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2010-05-09 01:00:00+02:00 +,,,,2,75,Simulated process instance,decide,complete,Wil,2,2010-05-14 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Anne,,2010-05-14 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Anne,,2010-05-19 01:00:00+02:00 +,,,,,75,Simulated process instance,time-out X,complete,__INVALID__,,2010-05-26 01:00:00+02:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2010-05-28 01:00:00+02:00 +,,,,2,75,Simulated process instance,decide,complete,Wil,2,2010-06-02 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,start,Mike,,2010-06-02 01:00:00+02:00 +,,,,,75,Simulated process instance,invite additional reviewer,complete,Mike,,2010-06-02 01:00:00+02:00 +,,,accept,,75,Simulated process instance,get review X,complete,Sam,,2010-06-06 01:00:00+02:00 +,,,,,75,Simulated process instance,decide,start,Wil,,2010-06-07 01:00:00+02:00 +,,,,3,75,Simulated process instance,decide,complete,Wil,2,2010-06-08 01:00:00+02:00 +,,,,,75,Simulated process instance,accept,start,Anne,,2010-06-08 01:00:00+02:00 +,,,,,75,Simulated process instance,accept,complete,Anne,,2010-06-09 01:00:00+02:00 +,,,,,76,Simulated process instance,invite reviewers,start,Anne,,2006-11-09 00:00:00+01:00 +,,,,,76,Simulated process instance,invite reviewers,complete,Anne,,2006-11-09 00:00:00+01:00 +,,,,,76,Simulated process instance,time-out 2,complete,__INVALID__,,2006-11-11 00:00:00+01:00 +,,accept,,,76,Simulated process instance,get review 3,complete,John,,2006-11-11 00:00:00+01:00 +,,,,,76,Simulated process instance,time-out 1,complete,__INVALID__,,2006-11-13 00:00:00+01:00 +,,,,,76,Simulated process instance,collect reviews,start,Anne,,2006-11-23 00:00:00+01:00 +,,,,,76,Simulated process instance,collect reviews,complete,Anne,,2006-11-28 00:00:00+01:00 +,,,,,76,Simulated process instance,decide,start,Wil,,2006-12-04 00:00:00+01:00 +,,,,2,76,Simulated process instance,decide,complete,Wil,0,2006-12-04 00:00:00+01:00 +,,,,,76,Simulated process instance,invite additional reviewer,start,Mike,,2007-01-18 00:00:00+01:00 +,,,,,76,Simulated process instance,invite additional reviewer,complete,Mike,,2007-01-18 00:00:00+01:00 +,,,accept,,76,Simulated process instance,get review X,complete,Pete,,2007-01-23 00:00:00+01:00 +,,,,,76,Simulated process instance,decide,start,Wil,,2007-04-06 01:00:00+02:00 +,,,,3,76,Simulated process instance,decide,complete,Wil,0,2007-04-11 01:00:00+02:00 +,,,,,76,Simulated process instance,accept,start,Mike,,2007-04-12 01:00:00+02:00 +,,,,,76,Simulated process instance,accept,complete,Mike,,2007-04-15 01:00:00+02:00 +,,,,,77,Simulated process instance,invite reviewers,start,Mike,,2006-11-11 00:00:00+01:00 +,,,,,77,Simulated process instance,invite reviewers,complete,Mike,,2006-11-16 00:00:00+01:00 +,,,,,77,Simulated process instance,time-out 1,complete,__INVALID__,,2006-11-20 00:00:00+01:00 +,,,,,77,Simulated process instance,time-out 3,complete,__INVALID__,,2006-11-24 00:00:00+01:00 +,,,,,77,Simulated process instance,time-out 2,complete,__INVALID__,,2006-11-26 00:00:00+01:00 +,,,,,77,Simulated process instance,collect reviews,start,Anne,,2006-11-28 00:00:00+01:00 +,,,,,77,Simulated process instance,collect reviews,complete,Anne,,2006-11-30 00:00:00+01:00 +,,,,,77,Simulated process instance,decide,start,Wil,,2007-03-08 00:00:00+01:00 +,,,,0,77,Simulated process instance,decide,complete,Wil,1,2007-03-10 00:00:00+01:00 +,,,,,77,Simulated process instance,invite additional reviewer,start,Mike,,2007-03-24 00:00:00+01:00 +,,,,,77,Simulated process instance,invite additional reviewer,complete,Mike,,2007-03-25 00:00:00+01:00 +,,,,,77,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-01 01:00:00+02:00 +,,,,,77,Simulated process instance,decide,start,Wil,,2007-12-02 00:00:00+01:00 +,,,,0,77,Simulated process instance,decide,complete,Wil,1,2007-12-06 00:00:00+01:00 +,,,,,77,Simulated process instance,invite additional reviewer,start,Mike,,2007-12-06 00:00:00+01:00 +,,,,,77,Simulated process instance,invite additional reviewer,complete,Mike,,2007-12-09 00:00:00+01:00 +,,,accept,,77,Simulated process instance,get review X,complete,Pete,,2007-12-11 00:00:00+01:00 +,,,,,77,Simulated process instance,decide,start,Wil,,2008-03-28 00:00:00+01:00 +,,,,1,77,Simulated process instance,decide,complete,Wil,1,2008-03-30 00:00:00+01:00 +,,,,,77,Simulated process instance,invite additional reviewer,start,Anne,,2008-03-30 00:00:00+01:00 +,,,,,77,Simulated process instance,invite additional reviewer,complete,Anne,,2008-04-02 01:00:00+02:00 +,,,reject,,77,Simulated process instance,get review X,complete,John,,2008-04-04 01:00:00+02:00 +,,,,,77,Simulated process instance,decide,start,Wil,,2008-07-07 01:00:00+02:00 +,,,,1,77,Simulated process instance,decide,complete,Wil,2,2008-07-07 01:00:00+02:00 +,,,,,77,Simulated process instance,invite additional reviewer,start,Mike,,2008-07-09 01:00:00+02:00 +,,,,,77,Simulated process instance,invite additional reviewer,complete,Mike,,2008-07-09 01:00:00+02:00 +,,,,,77,Simulated process instance,time-out X,complete,__INVALID__,,2008-07-10 01:00:00+02:00 +,,,,,77,Simulated process instance,decide,start,Wil,,2008-08-01 01:00:00+02:00 +,,,,1,77,Simulated process instance,decide,complete,Wil,2,2008-08-01 01:00:00+02:00 +,,,,,77,Simulated process instance,invite additional reviewer,start,Mike,,2008-08-01 01:00:00+02:00 +,,,,,77,Simulated process instance,invite additional reviewer,complete,Mike,,2008-08-02 01:00:00+02:00 +,,,,,77,Simulated process instance,time-out X,complete,__INVALID__,,2008-08-05 01:00:00+02:00 +,,,,,77,Simulated process instance,decide,start,Wil,,2008-08-08 01:00:00+02:00 +,,,,1,77,Simulated process instance,decide,complete,Wil,2,2008-08-11 01:00:00+02:00 +,,,,,77,Simulated process instance,invite additional reviewer,start,Mike,,2008-08-11 01:00:00+02:00 +,,,,,77,Simulated process instance,invite additional reviewer,complete,Mike,,2008-08-12 01:00:00+02:00 +,,,,,77,Simulated process instance,time-out X,complete,__INVALID__,,2008-08-18 01:00:00+02:00 +,,,,,77,Simulated process instance,decide,start,Wil,,2009-02-06 00:00:00+01:00 +,,,,1,77,Simulated process instance,decide,complete,Wil,2,2009-02-06 00:00:00+01:00 +,,,,,77,Simulated process instance,invite additional reviewer,start,Mike,,2009-02-10 00:00:00+01:00 +,,,,,77,Simulated process instance,invite additional reviewer,complete,Mike,,2009-02-11 00:00:00+01:00 +,,,,,77,Simulated process instance,time-out X,complete,__INVALID__,,2009-02-20 00:00:00+01:00 +,,,,,77,Simulated process instance,decide,start,Wil,,2009-06-07 01:00:00+02:00 +,,,,1,77,Simulated process instance,decide,complete,Wil,2,2009-06-09 01:00:00+02:00 +,,,,,77,Simulated process instance,invite additional reviewer,start,Mike,,2009-06-13 01:00:00+02:00 +,,,,,77,Simulated process instance,invite additional reviewer,complete,Mike,,2009-06-17 01:00:00+02:00 +,,,reject,,77,Simulated process instance,get review X,complete,Pete,,2009-06-20 01:00:00+02:00 +,,,,,77,Simulated process instance,decide,start,Wil,,2009-08-23 01:00:00+02:00 +,,,,1,77,Simulated process instance,decide,complete,Wil,3,2009-08-25 01:00:00+02:00 +,,,,,77,Simulated process instance,reject,start,Anne,,2009-08-28 01:00:00+02:00 +,,,,,77,Simulated process instance,reject,complete,Anne,,2009-08-28 01:00:00+02:00 +,,,,,78,Simulated process instance,invite reviewers,start,Anne,,2006-11-16 00:00:00+01:00 +,,,,,78,Simulated process instance,invite reviewers,complete,Anne,,2006-11-18 00:00:00+01:00 +,accept,,,,78,Simulated process instance,get review 2,complete,John,,2006-11-23 00:00:00+01:00 +,,,,,78,Simulated process instance,time-out 1,complete,__INVALID__,,2006-11-25 00:00:00+01:00 +,,,,,78,Simulated process instance,time-out 3,complete,__INVALID__,,2006-11-27 00:00:00+01:00 +,,,,,78,Simulated process instance,collect reviews,start,Mike,,2006-12-03 00:00:00+01:00 +,,,,,78,Simulated process instance,collect reviews,complete,Mike,,2006-12-06 00:00:00+01:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2007-01-20 00:00:00+01:00 +,,,,1,78,Simulated process instance,decide,complete,Wil,0,2007-01-21 00:00:00+01:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Mike,,2007-04-06 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Mike,,2007-04-08 01:00:00+02:00 +,,,,,78,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-09 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2008-08-27 01:00:00+02:00 +,,,,1,78,Simulated process instance,decide,complete,Wil,0,2008-08-29 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Mike,,2008-08-29 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Mike,,2008-08-31 01:00:00+02:00 +,,,,,78,Simulated process instance,time-out X,complete,__INVALID__,,2008-09-01 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2009-10-14 01:00:00+02:00 +,,,,1,78,Simulated process instance,decide,complete,Wil,0,2009-10-18 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Mike,,2009-10-20 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Mike,,2009-10-20 01:00:00+02:00 +,,,,,78,Simulated process instance,time-out X,complete,__INVALID__,,2009-10-25 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2010-03-18 00:00:00+01:00 +,,,,1,78,Simulated process instance,decide,complete,Wil,0,2010-03-23 00:00:00+01:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Mike,,2010-03-23 00:00:00+01:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Mike,,2010-03-28 00:00:00+01:00 +,,,,,78,Simulated process instance,time-out X,complete,__INVALID__,,2010-04-07 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2010-04-17 01:00:00+02:00 +,,,,1,78,Simulated process instance,decide,complete,Wil,0,2010-04-21 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Anne,,2010-04-21 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Anne,,2010-04-25 01:00:00+02:00 +,,,,,78,Simulated process instance,time-out X,complete,__INVALID__,,2010-05-03 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2010-05-17 01:00:00+02:00 +,,,,1,78,Simulated process instance,decide,complete,Wil,0,2010-05-21 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Anne,,2010-05-22 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Anne,,2010-05-25 01:00:00+02:00 +,,,reject,,78,Simulated process instance,get review X,complete,Mary,,2010-05-25 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2010-06-03 01:00:00+02:00 +,,,,1,78,Simulated process instance,decide,complete,Wil,1,2010-06-07 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Mike,,2010-06-07 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Mike,,2010-06-09 01:00:00+02:00 +,,,,,78,Simulated process instance,time-out X,complete,__INVALID__,,2010-06-11 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2010-06-11 01:00:00+02:00 +,,,,1,78,Simulated process instance,decide,complete,Wil,1,2010-06-11 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Anne,,2010-06-11 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Anne,,2010-06-15 01:00:00+02:00 +,,,,,78,Simulated process instance,time-out X,complete,__INVALID__,,2010-06-15 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2010-06-15 01:00:00+02:00 +,,,,1,78,Simulated process instance,decide,complete,Wil,1,2010-06-20 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Anne,,2010-06-20 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Anne,,2010-06-21 01:00:00+02:00 +,,,,,78,Simulated process instance,time-out X,complete,__INVALID__,,2010-06-27 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2010-06-27 01:00:00+02:00 +,,,,1,78,Simulated process instance,decide,complete,Wil,1,2010-06-30 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Mike,,2010-06-30 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Mike,,2010-07-01 01:00:00+02:00 +,,,accept,,78,Simulated process instance,get review X,complete,Pete,,2010-07-01 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2010-07-01 01:00:00+02:00 +,,,,2,78,Simulated process instance,decide,complete,Wil,1,2010-07-02 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Mike,,2010-07-02 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Mike,,2010-07-05 01:00:00+02:00 +,,,reject,,78,Simulated process instance,get review X,complete,Pete,,2010-07-08 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2010-07-08 01:00:00+02:00 +,,,,2,78,Simulated process instance,decide,complete,Wil,2,2010-07-09 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,start,Mike,,2010-07-09 01:00:00+02:00 +,,,,,78,Simulated process instance,invite additional reviewer,complete,Mike,,2010-07-13 01:00:00+02:00 +,,,reject,,78,Simulated process instance,get review X,complete,John,,2010-07-17 01:00:00+02:00 +,,,,,78,Simulated process instance,decide,start,Wil,,2010-07-17 01:00:00+02:00 +,,,,2,78,Simulated process instance,decide,complete,Wil,3,2010-07-18 01:00:00+02:00 +,,,,,78,Simulated process instance,reject,start,Anne,,2010-07-18 01:00:00+02:00 +,,,,,78,Simulated process instance,reject,complete,Anne,,2010-07-18 01:00:00+02:00 +,,,,,79,Simulated process instance,invite reviewers,start,Anne,,2006-11-14 00:00:00+01:00 +,,,,,79,Simulated process instance,invite reviewers,complete,Anne,,2006-11-16 00:00:00+01:00 +,reject,,,,79,Simulated process instance,get review 2,complete,Sam,,2006-11-16 00:00:00+01:00 +,,,,,79,Simulated process instance,time-out 3,complete,__INVALID__,,2006-11-19 00:00:00+01:00 +accept,,,,,79,Simulated process instance,get review 1,complete,Pete,,2006-11-19 00:00:00+01:00 +,,,,,79,Simulated process instance,collect reviews,start,Anne,,2006-12-19 00:00:00+01:00 +,,,,,79,Simulated process instance,collect reviews,complete,Anne,,2006-12-20 00:00:00+01:00 +,,,,,79,Simulated process instance,decide,start,Wil,,2007-02-20 00:00:00+01:00 +,,,,1,79,Simulated process instance,decide,complete,Wil,1,2007-02-25 00:00:00+01:00 +,,,,,79,Simulated process instance,invite additional reviewer,start,Anne,,2007-03-31 01:00:00+02:00 +,,,,,79,Simulated process instance,invite additional reviewer,complete,Anne,,2007-04-03 01:00:00+02:00 +,,,,,79,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-04 01:00:00+02:00 +,,,,,79,Simulated process instance,decide,start,Wil,,2007-08-15 01:00:00+02:00 +,,,,1,79,Simulated process instance,decide,complete,Wil,1,2007-08-19 01:00:00+02:00 +,,,,,79,Simulated process instance,invite additional reviewer,start,Mike,,2007-08-19 01:00:00+02:00 +,,,,,79,Simulated process instance,invite additional reviewer,complete,Mike,,2007-08-24 01:00:00+02:00 +,,,reject,,79,Simulated process instance,get review X,complete,Sara,,2007-08-29 01:00:00+02:00 +,,,,,79,Simulated process instance,decide,start,Wil,,2008-10-24 01:00:00+02:00 +,,,,1,79,Simulated process instance,decide,complete,Wil,2,2008-10-29 00:00:00+01:00 +,,,,,79,Simulated process instance,invite additional reviewer,start,Anne,,2008-10-29 00:00:00+01:00 +,,,,,79,Simulated process instance,invite additional reviewer,complete,Anne,,2008-11-02 00:00:00+01:00 +,,,accept,,79,Simulated process instance,get review X,complete,John,,2008-11-02 00:00:00+01:00 +,,,,,79,Simulated process instance,decide,start,Wil,,2009-04-03 01:00:00+02:00 +,,,,2,79,Simulated process instance,decide,complete,Wil,2,2009-04-06 01:00:00+02:00 +,,,,,79,Simulated process instance,invite additional reviewer,start,Mike,,2009-04-06 01:00:00+02:00 +,,,,,79,Simulated process instance,invite additional reviewer,complete,Mike,,2009-04-06 01:00:00+02:00 +,,,,,79,Simulated process instance,time-out X,complete,__INVALID__,,2009-04-14 01:00:00+02:00 +,,,,,79,Simulated process instance,decide,start,Wil,,2009-05-20 01:00:00+02:00 +,,,,2,79,Simulated process instance,decide,complete,Wil,2,2009-05-20 01:00:00+02:00 +,,,,,79,Simulated process instance,invite additional reviewer,start,Mike,,2009-05-20 01:00:00+02:00 +,,,,,79,Simulated process instance,invite additional reviewer,complete,Mike,,2009-05-21 01:00:00+02:00 +,,,accept,,79,Simulated process instance,get review X,complete,Sam,,2009-05-24 01:00:00+02:00 +,,,,,79,Simulated process instance,decide,start,Wil,,2009-06-18 01:00:00+02:00 +,,,,3,79,Simulated process instance,decide,complete,Wil,2,2009-06-20 01:00:00+02:00 +,,,,,79,Simulated process instance,accept,start,Mike,,2009-06-20 01:00:00+02:00 +,,,,,79,Simulated process instance,accept,complete,Mike,,2009-06-24 01:00:00+02:00 +,,,,,8,Simulated process instance,invite reviewers,start,Anne,,2006-01-25 00:00:00+01:00 +,,,,,8,Simulated process instance,invite reviewers,complete,Anne,,2006-01-30 00:00:00+01:00 +,,,,,8,Simulated process instance,time-out 3,complete,__INVALID__,,2006-02-02 00:00:00+01:00 +,,,,,8,Simulated process instance,time-out 2,complete,__INVALID__,,2006-02-04 00:00:00+01:00 +,,,,,8,Simulated process instance,time-out 1,complete,__INVALID__,,2006-02-06 00:00:00+01:00 +,,,,,8,Simulated process instance,collect reviews,start,Anne,,2006-02-06 00:00:00+01:00 +,,,,,8,Simulated process instance,collect reviews,complete,Anne,,2006-02-07 00:00:00+01:00 +,,,,,8,Simulated process instance,decide,start,Wil,,2006-03-04 00:00:00+01:00 +,,,,1,8,Simulated process instance,decide,complete,Wil,0,2006-03-06 00:00:00+01:00 +,,,,,8,Simulated process instance,invite additional reviewer,start,Anne,,2006-03-08 00:00:00+01:00 +,,,,,8,Simulated process instance,invite additional reviewer,complete,Anne,,2006-03-08 00:00:00+01:00 +,,,accept,,8,Simulated process instance,get review X,complete,Carol,,2006-03-09 00:00:00+01:00 +,,,,,8,Simulated process instance,decide,start,Wil,,2006-04-25 01:00:00+02:00 +,,,,2,8,Simulated process instance,decide,complete,Wil,0,2006-04-27 01:00:00+02:00 +,,,,,8,Simulated process instance,invite additional reviewer,start,Mike,,2006-04-28 01:00:00+02:00 +,,,,,8,Simulated process instance,invite additional reviewer,complete,Mike,,2006-05-01 01:00:00+02:00 +,,,reject,,8,Simulated process instance,get review X,complete,John,,2006-05-04 01:00:00+02:00 +,,,,,8,Simulated process instance,decide,start,Wil,,2006-10-25 01:00:00+02:00 +,,,,2,8,Simulated process instance,decide,complete,Wil,1,2006-10-29 01:00:00+02:00 +,,,,,8,Simulated process instance,invite additional reviewer,start,Anne,,2007-03-10 00:00:00+01:00 +,,,,,8,Simulated process instance,invite additional reviewer,complete,Anne,,2007-03-11 00:00:00+01:00 +,,,,,8,Simulated process instance,time-out X,complete,__INVALID__,,2007-03-15 00:00:00+01:00 +,,,,,8,Simulated process instance,decide,start,Wil,,2007-05-02 01:00:00+02:00 +,,,,2,8,Simulated process instance,decide,complete,Wil,1,2007-05-07 01:00:00+02:00 +,,,,,8,Simulated process instance,invite additional reviewer,start,Mike,,2007-05-07 01:00:00+02:00 +,,,,,8,Simulated process instance,invite additional reviewer,complete,Mike,,2007-05-11 01:00:00+02:00 +,,,,,8,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-11 01:00:00+02:00 +,,,,,8,Simulated process instance,decide,start,Wil,,2007-12-14 00:00:00+01:00 +,,,,2,8,Simulated process instance,decide,complete,Wil,1,2007-12-19 00:00:00+01:00 +,,,,,8,Simulated process instance,invite additional reviewer,start,Mike,,2007-12-19 00:00:00+01:00 +,,,,,8,Simulated process instance,invite additional reviewer,complete,Mike,,2007-12-22 00:00:00+01:00 +,,,accept,,8,Simulated process instance,get review X,complete,Sam,,2007-12-22 00:00:00+01:00 +,,,,,8,Simulated process instance,decide,start,Wil,,2008-06-06 01:00:00+02:00 +,,,,3,8,Simulated process instance,decide,complete,Wil,1,2008-06-07 01:00:00+02:00 +,,,,,8,Simulated process instance,invite additional reviewer,start,Mike,,2008-06-07 01:00:00+02:00 +,,,,,8,Simulated process instance,invite additional reviewer,complete,Mike,,2008-06-10 01:00:00+02:00 +,,,,,8,Simulated process instance,time-out X,complete,__INVALID__,,2008-06-12 01:00:00+02:00 +,,,,,8,Simulated process instance,decide,start,Wil,,2009-02-11 00:00:00+01:00 +,,,,3,8,Simulated process instance,decide,complete,Wil,1,2009-02-12 00:00:00+01:00 +,,,,,8,Simulated process instance,accept,start,Anne,,2009-02-12 00:00:00+01:00 +,,,,,8,Simulated process instance,accept,complete,Anne,,2009-02-13 00:00:00+01:00 +,,,,,80,Simulated process instance,invite reviewers,start,Anne,,2006-11-21 00:00:00+01:00 +,,,,,80,Simulated process instance,invite reviewers,complete,Anne,,2006-11-23 00:00:00+01:00 +,,,,,80,Simulated process instance,time-out 2,complete,__INVALID__,,2006-11-26 00:00:00+01:00 +,,,,,80,Simulated process instance,time-out 1,complete,__INVALID__,,2006-11-26 00:00:00+01:00 +,,,,,80,Simulated process instance,time-out 3,complete,__INVALID__,,2006-11-29 00:00:00+01:00 +,,,,,80,Simulated process instance,collect reviews,start,Anne,,2006-12-10 00:00:00+01:00 +,,,,,80,Simulated process instance,collect reviews,complete,Anne,,2006-12-15 00:00:00+01:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2007-05-08 01:00:00+02:00 +,,,,0,80,Simulated process instance,decide,complete,Wil,1,2007-05-10 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,start,Anne,,2007-05-11 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-11 01:00:00+02:00 +,,,,,80,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-16 01:00:00+02:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2007-09-20 01:00:00+02:00 +,,,,0,80,Simulated process instance,decide,complete,Wil,1,2007-09-22 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,start,Anne,,2007-09-22 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,complete,Anne,,2007-09-23 01:00:00+02:00 +,,,accept,,80,Simulated process instance,get review X,complete,Sara,,2007-09-24 01:00:00+02:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2007-11-30 00:00:00+01:00 +,,,,1,80,Simulated process instance,decide,complete,Wil,1,2007-12-01 00:00:00+01:00 +,,,,,80,Simulated process instance,invite additional reviewer,start,Mike,,2007-12-01 00:00:00+01:00 +,,,,,80,Simulated process instance,invite additional reviewer,complete,Mike,,2007-12-02 00:00:00+01:00 +,,,,,80,Simulated process instance,time-out X,complete,__INVALID__,,2007-12-05 00:00:00+01:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2008-06-26 01:00:00+02:00 +,,,,1,80,Simulated process instance,decide,complete,Wil,1,2008-06-29 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,start,Mike,,2008-06-29 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,complete,Mike,,2008-07-03 01:00:00+02:00 +,,,,,80,Simulated process instance,time-out X,complete,__INVALID__,,2008-07-04 01:00:00+02:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2008-08-24 01:00:00+02:00 +,,,,1,80,Simulated process instance,decide,complete,Wil,1,2008-08-25 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,start,Mike,,2008-08-25 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,complete,Mike,,2008-08-25 01:00:00+02:00 +,,,reject,,80,Simulated process instance,get review X,complete,Pam,,2008-08-27 01:00:00+02:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2008-12-12 00:00:00+01:00 +,,,,1,80,Simulated process instance,decide,complete,Wil,2,2008-12-15 00:00:00+01:00 +,,,,,80,Simulated process instance,invite additional reviewer,start,Anne,,2008-12-15 00:00:00+01:00 +,,,,,80,Simulated process instance,invite additional reviewer,complete,Anne,,2008-12-16 00:00:00+01:00 +,,,,,80,Simulated process instance,time-out X,complete,__INVALID__,,2008-12-21 00:00:00+01:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2009-03-06 00:00:00+01:00 +,,,,1,80,Simulated process instance,decide,complete,Wil,2,2009-03-08 00:00:00+01:00 +,,,,,80,Simulated process instance,invite additional reviewer,start,Mike,,2009-03-08 00:00:00+01:00 +,,,,,80,Simulated process instance,invite additional reviewer,complete,Mike,,2009-03-09 00:00:00+01:00 +,,,,,80,Simulated process instance,time-out X,complete,__INVALID__,,2009-03-17 00:00:00+01:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2009-03-23 00:00:00+01:00 +,,,,1,80,Simulated process instance,decide,complete,Wil,2,2009-03-25 00:00:00+01:00 +,,,,,80,Simulated process instance,invite additional reviewer,start,Anne,,2009-03-27 00:00:00+01:00 +,,,,,80,Simulated process instance,invite additional reviewer,complete,Anne,,2009-03-28 00:00:00+01:00 +,,,reject,,80,Simulated process instance,get review X,complete,Pete,,2009-03-28 00:00:00+01:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2009-04-06 01:00:00+02:00 +,,,,1,80,Simulated process instance,decide,complete,Wil,3,2009-04-07 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,start,Mike,,2009-04-07 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,complete,Mike,,2009-04-08 01:00:00+02:00 +,,,,,80,Simulated process instance,time-out X,complete,__INVALID__,,2009-04-13 01:00:00+02:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2009-08-22 01:00:00+02:00 +,,,,1,80,Simulated process instance,decide,complete,Wil,3,2009-08-22 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,start,Mike,,2009-08-25 01:00:00+02:00 +,,,,,80,Simulated process instance,invite additional reviewer,complete,Mike,,2009-08-28 01:00:00+02:00 +,,,reject,,80,Simulated process instance,get review X,complete,Sam,,2009-08-30 01:00:00+02:00 +,,,,,80,Simulated process instance,decide,start,Wil,,2009-11-13 00:00:00+01:00 +,,,,1,80,Simulated process instance,decide,complete,Wil,4,2009-11-18 00:00:00+01:00 +,,,,,80,Simulated process instance,reject,start,Mike,,2009-11-18 00:00:00+01:00 +,,,,,80,Simulated process instance,reject,complete,Mike,,2009-11-22 00:00:00+01:00 +,,,,,81,Simulated process instance,invite reviewers,start,Mike,,2006-11-22 00:00:00+01:00 +,,,,,81,Simulated process instance,invite reviewers,complete,Mike,,2006-11-25 00:00:00+01:00 +,reject,,,,81,Simulated process instance,get review 2,complete,Carol,,2006-11-25 00:00:00+01:00 +,,,,,81,Simulated process instance,time-out 3,complete,__INVALID__,,2006-11-27 00:00:00+01:00 +reject,,,,,81,Simulated process instance,get review 1,complete,John,,2006-11-29 00:00:00+01:00 +,,,,,81,Simulated process instance,collect reviews,start,Anne,,2006-12-15 00:00:00+01:00 +,,,,,81,Simulated process instance,collect reviews,complete,Anne,,2006-12-17 00:00:00+01:00 +,,,,,81,Simulated process instance,decide,start,Wil,,2007-05-12 01:00:00+02:00 +,,,,0,81,Simulated process instance,decide,complete,Wil,2,2007-05-15 01:00:00+02:00 +,,,,,81,Simulated process instance,invite additional reviewer,start,Mike,,2007-05-16 01:00:00+02:00 +,,,,,81,Simulated process instance,invite additional reviewer,complete,Mike,,2007-05-21 01:00:00+02:00 +,,,reject,,81,Simulated process instance,get review X,complete,Sara,,2007-05-21 01:00:00+02:00 +,,,,,81,Simulated process instance,decide,start,Wil,,2007-06-22 01:00:00+02:00 +,,,,0,81,Simulated process instance,decide,complete,Wil,3,2007-06-25 01:00:00+02:00 +,,,,,81,Simulated process instance,invite additional reviewer,start,Anne,,2007-06-25 01:00:00+02:00 +,,,,,81,Simulated process instance,invite additional reviewer,complete,Anne,,2007-06-28 01:00:00+02:00 +,,,,,81,Simulated process instance,time-out X,complete,__INVALID__,,2007-07-01 01:00:00+02:00 +,,,,,81,Simulated process instance,decide,start,Wil,,2007-07-17 01:00:00+02:00 +,,,,0,81,Simulated process instance,decide,complete,Wil,3,2007-07-22 01:00:00+02:00 +,,,,,81,Simulated process instance,reject,start,Anne,,2007-07-22 01:00:00+02:00 +,,,,,81,Simulated process instance,reject,complete,Anne,,2007-07-24 01:00:00+02:00 +,,,,,82,Simulated process instance,invite reviewers,start,Anne,,2006-11-23 00:00:00+01:00 +,,,,,82,Simulated process instance,invite reviewers,complete,Anne,,2006-11-23 00:00:00+01:00 +,accept,,,,82,Simulated process instance,get review 2,complete,Sara,,2006-11-23 00:00:00+01:00 +,,,,,82,Simulated process instance,time-out 1,complete,__INVALID__,,2006-11-26 00:00:00+01:00 +,,,,,82,Simulated process instance,time-out 3,complete,__INVALID__,,2006-11-30 00:00:00+01:00 +,,,,,82,Simulated process instance,collect reviews,start,Anne,,2006-12-07 00:00:00+01:00 +,,,,,82,Simulated process instance,collect reviews,complete,Anne,,2006-12-09 00:00:00+01:00 +,,,,,82,Simulated process instance,decide,start,Wil,,2008-09-23 01:00:00+02:00 +,,,,1,82,Simulated process instance,decide,complete,Wil,0,2008-09-24 01:00:00+02:00 +,,,,,82,Simulated process instance,invite additional reviewer,start,Mike,,2008-09-24 01:00:00+02:00 +,,,,,82,Simulated process instance,invite additional reviewer,complete,Mike,,2008-09-25 01:00:00+02:00 +,,,,,82,Simulated process instance,time-out X,complete,__INVALID__,,2008-09-25 01:00:00+02:00 +,,,,,82,Simulated process instance,decide,start,Wil,,2009-01-14 00:00:00+01:00 +,,,,1,82,Simulated process instance,decide,complete,Wil,0,2009-01-15 00:00:00+01:00 +,,,,,82,Simulated process instance,invite additional reviewer,start,Anne,,2009-01-15 00:00:00+01:00 +,,,,,82,Simulated process instance,invite additional reviewer,complete,Anne,,2009-01-18 00:00:00+01:00 +,,,,,82,Simulated process instance,time-out X,complete,__INVALID__,,2009-01-25 00:00:00+01:00 +,,,,,82,Simulated process instance,decide,start,Wil,,2009-08-19 01:00:00+02:00 +,,,,1,82,Simulated process instance,decide,complete,Wil,0,2009-08-21 01:00:00+02:00 +,,,,,82,Simulated process instance,invite additional reviewer,start,Mike,,2009-08-25 01:00:00+02:00 +,,,,,82,Simulated process instance,invite additional reviewer,complete,Mike,,2009-08-25 01:00:00+02:00 +,,,reject,,82,Simulated process instance,get review X,complete,Sara,,2009-08-29 01:00:00+02:00 +,,,,,82,Simulated process instance,decide,start,Wil,,2009-10-02 01:00:00+02:00 +,,,,1,82,Simulated process instance,decide,complete,Wil,1,2009-10-02 01:00:00+02:00 +,,,,,82,Simulated process instance,invite additional reviewer,start,Mike,,2009-10-04 01:00:00+02:00 +,,,,,82,Simulated process instance,invite additional reviewer,complete,Mike,,2009-10-06 01:00:00+02:00 +,,,,,82,Simulated process instance,time-out X,complete,__INVALID__,,2009-10-14 01:00:00+02:00 +,,,,,82,Simulated process instance,decide,start,Wil,,2010-03-13 00:00:00+01:00 +,,,,1,82,Simulated process instance,decide,complete,Wil,1,2010-03-18 00:00:00+01:00 +,,,,,82,Simulated process instance,invite additional reviewer,start,Mike,,2010-03-18 00:00:00+01:00 +,,,,,82,Simulated process instance,invite additional reviewer,complete,Mike,,2010-03-23 00:00:00+01:00 +,,,accept,,82,Simulated process instance,get review X,complete,Carol,,2010-03-26 00:00:00+01:00 +,,,,,82,Simulated process instance,decide,start,Wil,,2010-04-21 01:00:00+02:00 +,,,,2,82,Simulated process instance,decide,complete,Wil,1,2010-04-26 01:00:00+02:00 +,,,,,82,Simulated process instance,invite additional reviewer,start,Anne,,2010-04-26 01:00:00+02:00 +,,,,,82,Simulated process instance,invite additional reviewer,complete,Anne,,2010-04-28 01:00:00+02:00 +,,,accept,,82,Simulated process instance,get review X,complete,Carol,,2010-05-01 01:00:00+02:00 +,,,,,82,Simulated process instance,decide,start,Wil,,2010-05-14 01:00:00+02:00 +,,,,3,82,Simulated process instance,decide,complete,Wil,1,2010-05-17 01:00:00+02:00 +,,,,,82,Simulated process instance,invite additional reviewer,start,Mike,,2010-05-17 01:00:00+02:00 +,,,,,82,Simulated process instance,invite additional reviewer,complete,Mike,,2010-05-18 01:00:00+02:00 +,,,,,82,Simulated process instance,time-out X,complete,__INVALID__,,2010-05-19 01:00:00+02:00 +,,,,,82,Simulated process instance,decide,start,Wil,,2010-05-24 01:00:00+02:00 +,,,,3,82,Simulated process instance,decide,complete,Wil,1,2010-05-28 01:00:00+02:00 +,,,,,82,Simulated process instance,accept,start,Mike,,2010-05-28 01:00:00+02:00 +,,,,,82,Simulated process instance,accept,complete,Mike,,2010-05-29 01:00:00+02:00 +,,,,,83,Simulated process instance,invite reviewers,start,Anne,,2006-11-30 00:00:00+01:00 +,,,,,83,Simulated process instance,invite reviewers,complete,Anne,,2006-12-01 00:00:00+01:00 +,,,,,83,Simulated process instance,time-out 1,complete,__INVALID__,,2006-12-03 00:00:00+01:00 +,,accept,,,83,Simulated process instance,get review 3,complete,Sam,,2006-12-04 00:00:00+01:00 +,,,,,83,Simulated process instance,time-out 2,complete,__INVALID__,,2006-12-04 00:00:00+01:00 +,,,,,83,Simulated process instance,collect reviews,start,Anne,,2006-12-17 00:00:00+01:00 +,,,,,83,Simulated process instance,collect reviews,complete,Anne,,2006-12-19 00:00:00+01:00 +,,,,,83,Simulated process instance,decide,start,Wil,,2007-03-19 00:00:00+01:00 +,,,,2,83,Simulated process instance,decide,complete,Wil,0,2007-03-21 00:00:00+01:00 +,,,,,83,Simulated process instance,invite additional reviewer,start,Mike,,2007-04-27 01:00:00+02:00 +,,,,,83,Simulated process instance,invite additional reviewer,complete,Mike,,2007-04-29 01:00:00+02:00 +,,,,,83,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-03 01:00:00+02:00 +,,,,,83,Simulated process instance,decide,start,Wil,,2007-07-22 01:00:00+02:00 +,,,,2,83,Simulated process instance,decide,complete,Wil,0,2007-07-22 01:00:00+02:00 +,,,,,83,Simulated process instance,invite additional reviewer,start,Mike,,2007-07-22 01:00:00+02:00 +,,,,,83,Simulated process instance,invite additional reviewer,complete,Mike,,2007-07-25 01:00:00+02:00 +,,,,,83,Simulated process instance,time-out X,complete,__INVALID__,,2007-07-30 01:00:00+02:00 +,,,,,83,Simulated process instance,decide,start,Wil,,2009-02-28 00:00:00+01:00 +,,,,2,83,Simulated process instance,decide,complete,Wil,0,2009-03-01 00:00:00+01:00 +,,,,,83,Simulated process instance,invite additional reviewer,start,Anne,,2009-03-01 00:00:00+01:00 +,,,,,83,Simulated process instance,invite additional reviewer,complete,Anne,,2009-03-01 00:00:00+01:00 +,,,accept,,83,Simulated process instance,get review X,complete,Pete,,2009-03-05 00:00:00+01:00 +,,,,,83,Simulated process instance,decide,start,Wil,,2009-07-05 01:00:00+02:00 +,,,,3,83,Simulated process instance,decide,complete,Wil,0,2009-07-07 01:00:00+02:00 +,,,,,83,Simulated process instance,accept,start,Mike,,2009-07-07 01:00:00+02:00 +,,,,,83,Simulated process instance,accept,complete,Mike,,2009-07-10 01:00:00+02:00 +,,,,,84,Simulated process instance,invite reviewers,start,Mike,,2006-11-27 00:00:00+01:00 +,,,,,84,Simulated process instance,invite reviewers,complete,Mike,,2006-12-01 00:00:00+01:00 +,,,,,84,Simulated process instance,time-out 3,complete,__INVALID__,,2006-12-01 00:00:00+01:00 +,reject,,,,84,Simulated process instance,get review 2,complete,Pam,,2006-12-04 00:00:00+01:00 +,,,,,84,Simulated process instance,time-out 1,complete,__INVALID__,,2006-12-10 00:00:00+01:00 +,,,,,84,Simulated process instance,collect reviews,start,Anne,,2006-12-17 00:00:00+01:00 +,,,,,84,Simulated process instance,collect reviews,complete,Anne,,2006-12-17 00:00:00+01:00 +,,,,,84,Simulated process instance,decide,start,Wil,,2007-01-08 00:00:00+01:00 +,,,,0,84,Simulated process instance,decide,complete,Wil,1,2007-01-12 00:00:00+01:00 +,,,,,84,Simulated process instance,invite additional reviewer,start,Mike,,2007-01-18 00:00:00+01:00 +,,,,,84,Simulated process instance,invite additional reviewer,complete,Mike,,2007-01-18 00:00:00+01:00 +,,,,,84,Simulated process instance,time-out X,complete,__INVALID__,,2007-01-28 00:00:00+01:00 +,,,,,84,Simulated process instance,decide,start,Wil,,2007-11-08 00:00:00+01:00 +,,,,0,84,Simulated process instance,decide,complete,Wil,1,2007-11-11 00:00:00+01:00 +,,,,,84,Simulated process instance,invite additional reviewer,start,Anne,,2007-11-11 00:00:00+01:00 +,,,,,84,Simulated process instance,invite additional reviewer,complete,Anne,,2007-11-11 00:00:00+01:00 +,,,,,84,Simulated process instance,time-out X,complete,__INVALID__,,2007-11-13 00:00:00+01:00 +,,,,,84,Simulated process instance,decide,start,Wil,,2008-05-25 01:00:00+02:00 +,,,,0,84,Simulated process instance,decide,complete,Wil,1,2008-05-30 01:00:00+02:00 +,,,,,84,Simulated process instance,invite additional reviewer,start,Mike,,2008-05-30 01:00:00+02:00 +,,,,,84,Simulated process instance,invite additional reviewer,complete,Mike,,2008-06-02 01:00:00+02:00 +,,,reject,,84,Simulated process instance,get review X,complete,Sara,,2008-06-02 01:00:00+02:00 +,,,,,84,Simulated process instance,decide,start,Wil,,2008-06-08 01:00:00+02:00 +,,,,0,84,Simulated process instance,decide,complete,Wil,2,2008-06-11 01:00:00+02:00 +,,,,,84,Simulated process instance,invite additional reviewer,start,Anne,,2008-06-11 01:00:00+02:00 +,,,,,84,Simulated process instance,invite additional reviewer,complete,Anne,,2008-06-11 01:00:00+02:00 +,,,reject,,84,Simulated process instance,get review X,complete,John,,2008-06-12 01:00:00+02:00 +,,,,,84,Simulated process instance,decide,start,Wil,,2008-10-16 01:00:00+02:00 +,,,,0,84,Simulated process instance,decide,complete,Wil,3,2008-10-19 01:00:00+02:00 +,,,,,84,Simulated process instance,invite additional reviewer,start,Mike,,2008-10-19 01:00:00+02:00 +,,,,,84,Simulated process instance,invite additional reviewer,complete,Mike,,2008-10-21 01:00:00+02:00 +,,,reject,,84,Simulated process instance,get review X,complete,Pam,,2008-10-25 01:00:00+02:00 +,,,,,84,Simulated process instance,decide,start,Wil,,2008-11-02 00:00:00+01:00 +,,,,0,84,Simulated process instance,decide,complete,Wil,4,2008-11-04 00:00:00+01:00 +,,,,,84,Simulated process instance,invite additional reviewer,start,Anne,,2008-11-04 00:00:00+01:00 +,,,,,84,Simulated process instance,invite additional reviewer,complete,Anne,,2008-11-08 00:00:00+01:00 +,,,reject,,84,Simulated process instance,get review X,complete,Pete,,2008-11-09 00:00:00+01:00 +,,,,,84,Simulated process instance,decide,start,Wil,,2009-03-29 00:00:00+01:00 +,,,,0,84,Simulated process instance,decide,complete,Wil,5,2009-04-03 01:00:00+02:00 +,,,,,84,Simulated process instance,reject,start,Anne,,2009-04-03 01:00:00+02:00 +,,,,,84,Simulated process instance,reject,complete,Anne,,2009-04-03 01:00:00+02:00 +,,,,,85,Simulated process instance,invite reviewers,start,Anne,,2006-12-20 00:00:00+01:00 +,,,,,85,Simulated process instance,invite reviewers,complete,Anne,,2006-12-24 00:00:00+01:00 +,reject,,,,85,Simulated process instance,get review 2,complete,John,,2007-01-01 00:00:00+01:00 +reject,,,,,85,Simulated process instance,get review 1,complete,Pam,,2007-01-04 00:00:00+01:00 +,,reject,,,85,Simulated process instance,get review 3,complete,Sara,,2007-01-05 00:00:00+01:00 +,,,,,85,Simulated process instance,collect reviews,start,Anne,,2007-01-11 00:00:00+01:00 +,,,,,85,Simulated process instance,collect reviews,complete,Anne,,2007-01-15 00:00:00+01:00 +,,,,,85,Simulated process instance,decide,start,Wil,,2007-04-27 01:00:00+02:00 +,,,,0,85,Simulated process instance,decide,complete,Wil,3,2007-04-30 01:00:00+02:00 +,,,,,85,Simulated process instance,reject,start,Mike,,2007-05-01 01:00:00+02:00 +,,,,,85,Simulated process instance,reject,complete,Mike,,2007-05-02 01:00:00+02:00 +,,,,,86,Simulated process instance,invite reviewers,start,Mike,,2006-12-16 00:00:00+01:00 +,,,,,86,Simulated process instance,invite reviewers,complete,Mike,,2006-12-21 00:00:00+01:00 +accept,,,,,86,Simulated process instance,get review 1,complete,Mary,,2006-12-21 00:00:00+01:00 +,reject,,,,86,Simulated process instance,get review 2,complete,Mary,,2006-12-21 00:00:00+01:00 +,,reject,,,86,Simulated process instance,get review 3,complete,Pete,,2006-12-21 00:00:00+01:00 +,,,,,86,Simulated process instance,collect reviews,start,Mike,,2006-12-23 00:00:00+01:00 +,,,,,86,Simulated process instance,collect reviews,complete,Mike,,2007-01-04 00:00:00+01:00 +,,,,,86,Simulated process instance,decide,start,Wil,,2008-03-17 00:00:00+01:00 +,,,,1,86,Simulated process instance,decide,complete,Wil,2,2008-03-20 00:00:00+01:00 +,,,,,86,Simulated process instance,invite additional reviewer,start,Mike,,2008-03-20 00:00:00+01:00 +,,,,,86,Simulated process instance,invite additional reviewer,complete,Mike,,2008-03-21 00:00:00+01:00 +,,,accept,,86,Simulated process instance,get review X,complete,Pete,,2008-03-26 00:00:00+01:00 +,,,,,86,Simulated process instance,decide,start,Wil,,2008-03-31 01:00:00+02:00 +,,,,2,86,Simulated process instance,decide,complete,Wil,2,2008-04-03 01:00:00+02:00 +,,,,,86,Simulated process instance,invite additional reviewer,start,Anne,,2008-04-03 01:00:00+02:00 +,,,,,86,Simulated process instance,invite additional reviewer,complete,Anne,,2008-04-04 01:00:00+02:00 +,,,,,86,Simulated process instance,time-out X,complete,__INVALID__,,2008-04-08 01:00:00+02:00 +,,,,,86,Simulated process instance,decide,start,Wil,,2009-01-21 00:00:00+01:00 +,,,,2,86,Simulated process instance,decide,complete,Wil,2,2009-01-22 00:00:00+01:00 +,,,,,86,Simulated process instance,invite additional reviewer,start,Mike,,2009-01-22 00:00:00+01:00 +,,,,,86,Simulated process instance,invite additional reviewer,complete,Mike,,2009-01-25 00:00:00+01:00 +,,,reject,,86,Simulated process instance,get review X,complete,Pete,,2009-01-30 00:00:00+01:00 +,,,,,86,Simulated process instance,decide,start,Wil,,2009-03-18 00:00:00+01:00 +,,,,2,86,Simulated process instance,decide,complete,Wil,3,2009-03-20 00:00:00+01:00 +,,,,,86,Simulated process instance,invite additional reviewer,start,Mike,,2009-03-20 00:00:00+01:00 +,,,,,86,Simulated process instance,invite additional reviewer,complete,Mike,,2009-03-21 00:00:00+01:00 +,,,reject,,86,Simulated process instance,get review X,complete,Sara,,2009-03-22 00:00:00+01:00 +,,,,,86,Simulated process instance,decide,start,Wil,,2009-05-23 01:00:00+02:00 +,,,,2,86,Simulated process instance,decide,complete,Wil,4,2009-05-23 01:00:00+02:00 +,,,,,86,Simulated process instance,invite additional reviewer,start,Mike,,2009-05-24 01:00:00+02:00 +,,,,,86,Simulated process instance,invite additional reviewer,complete,Mike,,2009-05-27 01:00:00+02:00 +,,,accept,,86,Simulated process instance,get review X,complete,Pete,,2009-05-28 01:00:00+02:00 +,,,,,86,Simulated process instance,decide,start,Wil,,2009-10-02 01:00:00+02:00 +,,,,3,86,Simulated process instance,decide,complete,Wil,4,2009-10-02 01:00:00+02:00 +,,,,,86,Simulated process instance,invite additional reviewer,start,Anne,,2009-10-04 01:00:00+02:00 +,,,,,86,Simulated process instance,invite additional reviewer,complete,Anne,,2009-10-07 01:00:00+02:00 +,,,reject,,86,Simulated process instance,get review X,complete,Pam,,2009-10-11 01:00:00+02:00 +,,,,,86,Simulated process instance,decide,start,Wil,,2010-01-02 00:00:00+01:00 +,,,,3,86,Simulated process instance,decide,complete,Wil,5,2010-01-03 00:00:00+01:00 +,,,,,86,Simulated process instance,invite additional reviewer,start,Mike,,2010-01-03 00:00:00+01:00 +,,,,,86,Simulated process instance,invite additional reviewer,complete,Mike,,2010-01-04 00:00:00+01:00 +,,,accept,,86,Simulated process instance,get review X,complete,Pete,,2010-01-04 00:00:00+01:00 +,,,,,86,Simulated process instance,decide,start,Wil,,2010-04-01 01:00:00+02:00 +,,,,4,86,Simulated process instance,decide,complete,Wil,5,2010-04-04 01:00:00+02:00 +,,,,,86,Simulated process instance,accept,start,Anne,,2010-04-04 01:00:00+02:00 +,,,,,86,Simulated process instance,accept,complete,Anne,,2010-04-07 01:00:00+02:00 +,,,,,87,Simulated process instance,invite reviewers,start,Mike,,2007-01-04 00:00:00+01:00 +,,,,,87,Simulated process instance,invite reviewers,complete,Mike,,2007-01-04 00:00:00+01:00 +,accept,,,,87,Simulated process instance,get review 2,complete,Mary,,2007-01-05 00:00:00+01:00 +,,accept,,,87,Simulated process instance,get review 3,complete,Carol,,2007-01-07 00:00:00+01:00 +reject,,,,,87,Simulated process instance,get review 1,complete,Pam,,2007-01-09 00:00:00+01:00 +,,,,,87,Simulated process instance,collect reviews,start,Mike,,2007-01-13 00:00:00+01:00 +,,,,,87,Simulated process instance,collect reviews,complete,Mike,,2007-01-14 00:00:00+01:00 +,,,,,87,Simulated process instance,decide,start,Wil,,2007-07-08 01:00:00+02:00 +,,,,2,87,Simulated process instance,decide,complete,Wil,1,2007-07-10 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,start,Mike,,2007-07-10 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,complete,Mike,,2007-07-14 01:00:00+02:00 +,,,,,87,Simulated process instance,time-out X,complete,__INVALID__,,2007-07-24 01:00:00+02:00 +,,,,,87,Simulated process instance,decide,start,Wil,,2007-09-30 01:00:00+02:00 +,,,,2,87,Simulated process instance,decide,complete,Wil,1,2007-09-30 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,start,Anne,,2007-09-30 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,complete,Anne,,2007-10-02 01:00:00+02:00 +,,,,,87,Simulated process instance,time-out X,complete,__INVALID__,,2007-10-03 01:00:00+02:00 +,,,,,87,Simulated process instance,decide,start,Wil,,2008-10-05 01:00:00+02:00 +,,,,2,87,Simulated process instance,decide,complete,Wil,1,2008-10-05 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,start,Mike,,2008-10-05 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,complete,Mike,,2008-10-05 01:00:00+02:00 +,,,,,87,Simulated process instance,time-out X,complete,__INVALID__,,2008-10-05 01:00:00+02:00 +,,,,,87,Simulated process instance,decide,start,Wil,,2009-04-20 01:00:00+02:00 +,,,,2,87,Simulated process instance,decide,complete,Wil,1,2009-04-25 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,start,Mike,,2009-04-25 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,complete,Mike,,2009-04-27 01:00:00+02:00 +,,,,,87,Simulated process instance,time-out X,complete,__INVALID__,,2009-04-30 01:00:00+02:00 +,,,,,87,Simulated process instance,decide,start,Wil,,2009-06-23 01:00:00+02:00 +,,,,2,87,Simulated process instance,decide,complete,Wil,1,2009-06-26 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,start,Mike,,2009-06-26 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,complete,Mike,,2009-06-29 01:00:00+02:00 +,,,,,87,Simulated process instance,time-out X,complete,__INVALID__,,2009-07-01 01:00:00+02:00 +,,,,,87,Simulated process instance,decide,start,Wil,,2009-10-05 01:00:00+02:00 +,,,,2,87,Simulated process instance,decide,complete,Wil,1,2009-10-10 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,start,Mike,,2009-10-13 01:00:00+02:00 +,,,,,87,Simulated process instance,invite additional reviewer,complete,Mike,,2009-10-16 01:00:00+02:00 +,,,reject,,87,Simulated process instance,get review X,complete,Pete,,2009-10-20 01:00:00+02:00 +,,,,,87,Simulated process instance,decide,start,Wil,,2010-01-12 00:00:00+01:00 +,,,,2,87,Simulated process instance,decide,complete,Wil,2,2010-01-17 00:00:00+01:00 +,,,,,87,Simulated process instance,invite additional reviewer,start,Anne,,2010-01-17 00:00:00+01:00 +,,,,,87,Simulated process instance,invite additional reviewer,complete,Anne,,2010-01-18 00:00:00+01:00 +,,,,,87,Simulated process instance,time-out X,complete,__INVALID__,,2010-01-23 00:00:00+01:00 +,,,,,87,Simulated process instance,decide,start,Wil,,2010-03-04 00:00:00+01:00 +,,,,2,87,Simulated process instance,decide,complete,Wil,2,2010-03-07 00:00:00+01:00 +,,,,,87,Simulated process instance,invite additional reviewer,start,Anne,,2010-03-07 00:00:00+01:00 +,,,,,87,Simulated process instance,invite additional reviewer,complete,Anne,,2010-03-08 00:00:00+01:00 +,,,reject,,87,Simulated process instance,get review X,complete,John,,2010-03-11 00:00:00+01:00 +,,,,,87,Simulated process instance,decide,start,Wil,,2010-04-06 01:00:00+02:00 +,,,,2,87,Simulated process instance,decide,complete,Wil,3,2010-04-08 01:00:00+02:00 +,,,,,87,Simulated process instance,reject,start,Anne,,2010-04-10 01:00:00+02:00 +,,,,,87,Simulated process instance,reject,complete,Anne,,2010-04-10 01:00:00+02:00 +,,,,,88,Simulated process instance,invite reviewers,start,Anne,,2006-12-20 00:00:00+01:00 +,,,,,88,Simulated process instance,invite reviewers,complete,Anne,,2006-12-20 00:00:00+01:00 +,,reject,,,88,Simulated process instance,get review 3,complete,Sara,,2006-12-21 00:00:00+01:00 +reject,,,,,88,Simulated process instance,get review 1,complete,John,,2006-12-22 00:00:00+01:00 +,,,,,88,Simulated process instance,time-out 2,complete,__INVALID__,,2007-01-02 00:00:00+01:00 +,,,,,88,Simulated process instance,collect reviews,start,Mike,,2007-01-07 00:00:00+01:00 +,,,,,88,Simulated process instance,collect reviews,complete,Mike,,2007-01-12 00:00:00+01:00 +,,,,,88,Simulated process instance,decide,start,Wil,,2007-07-25 01:00:00+02:00 +,,,,0,88,Simulated process instance,decide,complete,Wil,3,2007-07-30 01:00:00+02:00 +,,,,,88,Simulated process instance,reject,start,Mike,,2007-07-30 01:00:00+02:00 +,,,,,88,Simulated process instance,reject,complete,Mike,,2007-07-31 01:00:00+02:00 +,,,,,89,Simulated process instance,invite reviewers,start,Anne,,2007-01-03 00:00:00+01:00 +,,,,,89,Simulated process instance,invite reviewers,complete,Anne,,2007-01-06 00:00:00+01:00 +,,,,,89,Simulated process instance,time-out 2,complete,__INVALID__,,2007-01-07 00:00:00+01:00 +,,,,,89,Simulated process instance,time-out 3,complete,__INVALID__,,2007-01-09 00:00:00+01:00 +,,,,,89,Simulated process instance,time-out 1,complete,__INVALID__,,2007-01-12 00:00:00+01:00 +,,,,,89,Simulated process instance,collect reviews,start,Mike,,2007-01-13 00:00:00+01:00 +,,,,,89,Simulated process instance,collect reviews,complete,Mike,,2007-01-13 00:00:00+01:00 +,,,,,89,Simulated process instance,decide,start,Wil,,2007-04-14 01:00:00+02:00 +,,,,1,89,Simulated process instance,decide,complete,Wil,0,2007-04-17 01:00:00+02:00 +,,,,,89,Simulated process instance,invite additional reviewer,start,Mike,,2007-04-20 01:00:00+02:00 +,,,,,89,Simulated process instance,invite additional reviewer,complete,Mike,,2007-04-22 01:00:00+02:00 +,,,,,89,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-25 01:00:00+02:00 +,,,,,89,Simulated process instance,decide,start,Wil,,2009-03-01 00:00:00+01:00 +,,,,1,89,Simulated process instance,decide,complete,Wil,0,2009-03-05 00:00:00+01:00 +,,,,,89,Simulated process instance,invite additional reviewer,start,Anne,,2009-03-05 00:00:00+01:00 +,,,,,89,Simulated process instance,invite additional reviewer,complete,Anne,,2009-03-09 00:00:00+01:00 +,,,reject,,89,Simulated process instance,get review X,complete,Pam,,2009-03-11 00:00:00+01:00 +,,,,,89,Simulated process instance,decide,start,Wil,,2009-03-23 00:00:00+01:00 +,,,,1,89,Simulated process instance,decide,complete,Wil,1,2009-03-23 00:00:00+01:00 +,,,,,89,Simulated process instance,invite additional reviewer,start,Anne,,2009-03-23 00:00:00+01:00 +,,,,,89,Simulated process instance,invite additional reviewer,complete,Anne,,2009-03-27 00:00:00+01:00 +,,,accept,,89,Simulated process instance,get review X,complete,Sara,,2009-03-30 01:00:00+02:00 +,,,,,89,Simulated process instance,decide,start,Wil,,2009-06-27 01:00:00+02:00 +,,,,2,89,Simulated process instance,decide,complete,Wil,1,2009-07-01 01:00:00+02:00 +,,,,,89,Simulated process instance,invite additional reviewer,start,Mike,,2009-07-01 01:00:00+02:00 +,,,,,89,Simulated process instance,invite additional reviewer,complete,Mike,,2009-07-02 01:00:00+02:00 +,,,reject,,89,Simulated process instance,get review X,complete,Mary,,2009-07-02 01:00:00+02:00 +,,,,,89,Simulated process instance,decide,start,Wil,,2009-09-04 01:00:00+02:00 +,,,,2,89,Simulated process instance,decide,complete,Wil,2,2009-09-04 01:00:00+02:00 +,,,,,89,Simulated process instance,invite additional reviewer,start,Mike,,2009-09-04 01:00:00+02:00 +,,,,,89,Simulated process instance,invite additional reviewer,complete,Mike,,2009-09-07 01:00:00+02:00 +,,,accept,,89,Simulated process instance,get review X,complete,Sara,,2009-09-09 01:00:00+02:00 +,,,,,89,Simulated process instance,decide,start,Wil,,2009-10-14 01:00:00+02:00 +,,,,3,89,Simulated process instance,decide,complete,Wil,2,2009-10-14 01:00:00+02:00 +,,,,,89,Simulated process instance,accept,start,Mike,,2009-10-16 01:00:00+02:00 +,,,,,89,Simulated process instance,accept,complete,Mike,,2009-10-20 01:00:00+02:00 +,,,,,9,Simulated process instance,invite reviewers,start,Anne,,2006-02-02 00:00:00+01:00 +,,,,,9,Simulated process instance,invite reviewers,complete,Anne,,2006-02-03 00:00:00+01:00 +,,accept,,,9,Simulated process instance,get review 3,complete,Carol,,2006-02-06 00:00:00+01:00 +,reject,,,,9,Simulated process instance,get review 2,complete,Mary,,2006-02-08 00:00:00+01:00 +,,,,,9,Simulated process instance,time-out 1,complete,__INVALID__,,2006-02-09 00:00:00+01:00 +,,,,,9,Simulated process instance,collect reviews,start,Anne,,2006-02-09 00:00:00+01:00 +,,,,,9,Simulated process instance,collect reviews,complete,Anne,,2006-02-14 00:00:00+01:00 +,,,,,9,Simulated process instance,decide,start,Wil,,2006-04-22 01:00:00+02:00 +,,,,1,9,Simulated process instance,decide,complete,Wil,1,2006-04-25 01:00:00+02:00 +,,,,,9,Simulated process instance,invite additional reviewer,start,Mike,,2006-04-25 01:00:00+02:00 +,,,,,9,Simulated process instance,invite additional reviewer,complete,Mike,,2006-04-28 01:00:00+02:00 +,,,,,9,Simulated process instance,time-out X,complete,__INVALID__,,2006-04-28 01:00:00+02:00 +,,,,,9,Simulated process instance,decide,start,Wil,,2006-05-05 01:00:00+02:00 +,,,,1,9,Simulated process instance,decide,complete,Wil,1,2006-05-05 01:00:00+02:00 +,,,,,9,Simulated process instance,invite additional reviewer,start,Anne,,2006-05-13 01:00:00+02:00 +,,,,,9,Simulated process instance,invite additional reviewer,complete,Anne,,2006-05-15 01:00:00+02:00 +,,,,,9,Simulated process instance,time-out X,complete,__INVALID__,,2006-05-16 01:00:00+02:00 +,,,,,9,Simulated process instance,decide,start,Wil,,2007-12-06 00:00:00+01:00 +,,,,1,9,Simulated process instance,decide,complete,Wil,1,2007-12-10 00:00:00+01:00 +,,,,,9,Simulated process instance,invite additional reviewer,start,Mike,,2007-12-10 00:00:00+01:00 +,,,,,9,Simulated process instance,invite additional reviewer,complete,Mike,,2007-12-13 00:00:00+01:00 +,,,,,9,Simulated process instance,time-out X,complete,__INVALID__,,2007-12-22 00:00:00+01:00 +,,,,,9,Simulated process instance,decide,start,Wil,,2008-01-22 00:00:00+01:00 +,,,,1,9,Simulated process instance,decide,complete,Wil,1,2008-01-26 00:00:00+01:00 +,,,,,9,Simulated process instance,invite additional reviewer,start,Mike,,2008-01-26 00:00:00+01:00 +,,,,,9,Simulated process instance,invite additional reviewer,complete,Mike,,2008-01-28 00:00:00+01:00 +,,,reject,,9,Simulated process instance,get review X,complete,Carol,,2008-02-01 00:00:00+01:00 +,,,,,9,Simulated process instance,decide,start,Wil,,2008-04-03 01:00:00+02:00 +,,,,1,9,Simulated process instance,decide,complete,Wil,2,2008-04-04 01:00:00+02:00 +,,,,,9,Simulated process instance,invite additional reviewer,start,Mike,,2008-04-04 01:00:00+02:00 +,,,,,9,Simulated process instance,invite additional reviewer,complete,Mike,,2008-04-08 01:00:00+02:00 +,,,,,9,Simulated process instance,time-out X,complete,__INVALID__,,2008-04-16 01:00:00+02:00 +,,,,,9,Simulated process instance,decide,start,Wil,,2008-07-13 01:00:00+02:00 +,,,,1,9,Simulated process instance,decide,complete,Wil,2,2008-07-14 01:00:00+02:00 +,,,,,9,Simulated process instance,invite additional reviewer,start,Anne,,2008-07-14 01:00:00+02:00 +,,,,,9,Simulated process instance,invite additional reviewer,complete,Anne,,2008-07-14 01:00:00+02:00 +,,,accept,,9,Simulated process instance,get review X,complete,Pete,,2008-07-19 01:00:00+02:00 +,,,,,9,Simulated process instance,decide,start,Wil,,2008-10-10 01:00:00+02:00 +,,,,2,9,Simulated process instance,decide,complete,Wil,2,2008-10-14 01:00:00+02:00 +,,,,,9,Simulated process instance,invite additional reviewer,start,Anne,,2008-10-14 01:00:00+02:00 +,,,,,9,Simulated process instance,invite additional reviewer,complete,Anne,,2008-10-16 01:00:00+02:00 +,,,reject,,9,Simulated process instance,get review X,complete,Sara,,2008-10-19 01:00:00+02:00 +,,,,,9,Simulated process instance,decide,start,Wil,,2008-12-21 00:00:00+01:00 +,,,,2,9,Simulated process instance,decide,complete,Wil,3,2009-01-01 00:00:00+01:00 +,,,,,9,Simulated process instance,invite additional reviewer,start,Mike,,2009-01-01 00:00:00+01:00 +,,,,,9,Simulated process instance,invite additional reviewer,complete,Mike,,2009-01-02 00:00:00+01:00 +,,,reject,,9,Simulated process instance,get review X,complete,Pam,,2009-01-07 00:00:00+01:00 +,,,,,9,Simulated process instance,decide,start,Wil,,2009-11-06 00:00:00+01:00 +,,,,2,9,Simulated process instance,decide,complete,Wil,4,2009-11-08 00:00:00+01:00 +,,,,,9,Simulated process instance,invite additional reviewer,start,Mike,,2009-11-08 00:00:00+01:00 +,,,,,9,Simulated process instance,invite additional reviewer,complete,Mike,,2009-11-08 00:00:00+01:00 +,,,,,9,Simulated process instance,time-out X,complete,__INVALID__,,2009-11-18 00:00:00+01:00 +,,,,,9,Simulated process instance,decide,start,Wil,,2010-01-17 00:00:00+01:00 +,,,,2,9,Simulated process instance,decide,complete,Wil,4,2010-01-17 00:00:00+01:00 +,,,,,9,Simulated process instance,reject,start,Mike,,2010-01-17 00:00:00+01:00 +,,,,,9,Simulated process instance,reject,complete,Mike,,2010-01-18 00:00:00+01:00 +,,,,,90,Simulated process instance,invite reviewers,start,Anne,,2007-01-09 00:00:00+01:00 +,,,,,90,Simulated process instance,invite reviewers,complete,Anne,,2007-01-11 00:00:00+01:00 +,,,,,90,Simulated process instance,time-out 2,complete,__INVALID__,,2007-01-11 00:00:00+01:00 +,,,,,90,Simulated process instance,time-out 1,complete,__INVALID__,,2007-01-13 00:00:00+01:00 +,,accept,,,90,Simulated process instance,get review 3,complete,Sara,,2007-01-14 00:00:00+01:00 +,,,,,90,Simulated process instance,collect reviews,start,Mike,,2007-01-14 00:00:00+01:00 +,,,,,90,Simulated process instance,collect reviews,complete,Mike,,2007-01-18 00:00:00+01:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2007-08-22 01:00:00+02:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,0,2007-08-26 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Mike,,2007-08-26 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Mike,,2007-08-30 01:00:00+02:00 +,,,reject,,90,Simulated process instance,get review X,complete,Sara,,2007-08-30 01:00:00+02:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2008-02-21 00:00:00+01:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,1,2008-02-24 00:00:00+01:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Mike,,2008-02-24 00:00:00+01:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Mike,,2008-02-24 00:00:00+01:00 +,,,,,90,Simulated process instance,time-out X,complete,__INVALID__,,2008-02-29 00:00:00+01:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2008-04-26 01:00:00+02:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,1,2008-04-29 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Mike,,2008-04-29 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Mike,,2008-05-01 01:00:00+02:00 +,,,,,90,Simulated process instance,time-out X,complete,__INVALID__,,2008-05-04 01:00:00+02:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2008-09-25 01:00:00+02:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,1,2008-09-28 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Mike,,2008-09-28 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Mike,,2008-09-30 01:00:00+02:00 +,,,,,90,Simulated process instance,time-out X,complete,__INVALID__,,2008-10-09 01:00:00+02:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2008-10-19 01:00:00+02:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,1,2008-10-21 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Anne,,2008-10-21 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Anne,,2008-10-24 01:00:00+02:00 +,,,,,90,Simulated process instance,time-out X,complete,__INVALID__,,2008-11-01 00:00:00+01:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2009-01-15 00:00:00+01:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,1,2009-01-16 00:00:00+01:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Mike,,2009-01-16 00:00:00+01:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Mike,,2009-01-17 00:00:00+01:00 +,,,,,90,Simulated process instance,time-out X,complete,__INVALID__,,2009-01-24 00:00:00+01:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2009-06-09 01:00:00+02:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,1,2009-06-12 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Anne,,2009-06-13 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Anne,,2009-06-17 01:00:00+02:00 +,,,,,90,Simulated process instance,time-out X,complete,__INVALID__,,2009-06-18 01:00:00+02:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2010-03-02 00:00:00+01:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,1,2010-03-02 00:00:00+01:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Anne,,2010-03-02 00:00:00+01:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Anne,,2010-03-02 00:00:00+01:00 +,,,,,90,Simulated process instance,time-out X,complete,__INVALID__,,2010-03-06 00:00:00+01:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2010-03-07 00:00:00+01:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,1,2010-03-07 00:00:00+01:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Anne,,2010-03-08 00:00:00+01:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Anne,,2010-03-11 00:00:00+01:00 +,,,reject,,90,Simulated process instance,get review X,complete,Carol,,2010-03-13 00:00:00+01:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2010-04-06 01:00:00+02:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,2,2010-04-06 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Anne,,2010-04-07 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Anne,,2010-04-10 01:00:00+02:00 +,,,,,90,Simulated process instance,time-out X,complete,__INVALID__,,2010-04-14 01:00:00+02:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2010-04-29 01:00:00+02:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,2,2010-05-01 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,start,Anne,,2010-05-01 01:00:00+02:00 +,,,,,90,Simulated process instance,invite additional reviewer,complete,Anne,,2010-05-01 01:00:00+02:00 +,,,reject,,90,Simulated process instance,get review X,complete,Pete,,2010-05-02 01:00:00+02:00 +,,,,,90,Simulated process instance,decide,start,Wil,,2010-05-03 01:00:00+02:00 +,,,,2,90,Simulated process instance,decide,complete,Wil,3,2010-05-04 01:00:00+02:00 +,,,,,90,Simulated process instance,reject,start,Mike,,2010-05-04 01:00:00+02:00 +,,,,,90,Simulated process instance,reject,complete,Mike,,2010-05-04 01:00:00+02:00 +,,,,,91,Simulated process instance,invite reviewers,start,Mike,,2007-01-18 00:00:00+01:00 +,,,,,91,Simulated process instance,invite reviewers,complete,Mike,,2007-01-18 00:00:00+01:00 +,,,,,91,Simulated process instance,time-out 1,complete,__INVALID__,,2007-01-21 00:00:00+01:00 +,,,,,91,Simulated process instance,time-out 2,complete,__INVALID__,,2007-01-24 00:00:00+01:00 +,,,,,91,Simulated process instance,time-out 3,complete,__INVALID__,,2007-01-28 00:00:00+01:00 +,,,,,91,Simulated process instance,collect reviews,start,Anne,,2007-01-28 00:00:00+01:00 +,,,,,91,Simulated process instance,collect reviews,complete,Anne,,2007-02-02 00:00:00+01:00 +,,,,,91,Simulated process instance,decide,start,Wil,,2007-06-09 01:00:00+02:00 +,,,,0,91,Simulated process instance,decide,complete,Wil,1,2007-06-09 01:00:00+02:00 +,,,,,91,Simulated process instance,invite additional reviewer,start,Mike,,2007-06-13 01:00:00+02:00 +,,,,,91,Simulated process instance,invite additional reviewer,complete,Mike,,2007-06-14 01:00:00+02:00 +,,,,,91,Simulated process instance,time-out X,complete,__INVALID__,,2007-06-22 01:00:00+02:00 +,,,,,91,Simulated process instance,decide,start,Wil,,2007-10-26 01:00:00+02:00 +,,,,0,91,Simulated process instance,decide,complete,Wil,1,2007-10-26 01:00:00+02:00 +,,,,,91,Simulated process instance,invite additional reviewer,start,Anne,,2007-10-26 01:00:00+02:00 +,,,,,91,Simulated process instance,invite additional reviewer,complete,Anne,,2007-10-28 01:00:00+02:00 +,,,,,91,Simulated process instance,time-out X,complete,__INVALID__,,2007-11-01 00:00:00+01:00 +,,,,,91,Simulated process instance,decide,start,Wil,,2007-11-01 00:00:00+01:00 +,,,,0,91,Simulated process instance,decide,complete,Wil,1,2007-11-02 00:00:00+01:00 +,,,,,91,Simulated process instance,invite additional reviewer,start,Anne,,2007-11-04 00:00:00+01:00 +,,,,,91,Simulated process instance,invite additional reviewer,complete,Anne,,2007-11-04 00:00:00+01:00 +,,,reject,,91,Simulated process instance,get review X,complete,Sam,,2007-11-09 00:00:00+01:00 +,,,,,91,Simulated process instance,decide,start,Wil,,2008-06-20 01:00:00+02:00 +,,,,0,91,Simulated process instance,decide,complete,Wil,2,2008-06-24 01:00:00+02:00 +,,,,,91,Simulated process instance,invite additional reviewer,start,Mike,,2008-06-24 01:00:00+02:00 +,,,,,91,Simulated process instance,invite additional reviewer,complete,Mike,,2008-06-24 01:00:00+02:00 +,,,,,91,Simulated process instance,time-out X,complete,__INVALID__,,2008-06-27 01:00:00+02:00 +,,,,,91,Simulated process instance,decide,start,Wil,,2008-11-09 00:00:00+01:00 +,,,,0,91,Simulated process instance,decide,complete,Wil,2,2008-11-11 00:00:00+01:00 +,,,,,91,Simulated process instance,invite additional reviewer,start,Anne,,2008-11-11 00:00:00+01:00 +,,,,,91,Simulated process instance,invite additional reviewer,complete,Anne,,2008-11-14 00:00:00+01:00 +,,,accept,,91,Simulated process instance,get review X,complete,Pete,,2008-11-14 00:00:00+01:00 +,,,,,91,Simulated process instance,decide,start,Wil,,2009-02-16 00:00:00+01:00 +,,,,1,91,Simulated process instance,decide,complete,Wil,2,2009-02-19 00:00:00+01:00 +,,,,,91,Simulated process instance,invite additional reviewer,start,Anne,,2009-02-21 00:00:00+01:00 +,,,,,91,Simulated process instance,invite additional reviewer,complete,Anne,,2009-02-25 00:00:00+01:00 +,,,,,91,Simulated process instance,time-out X,complete,__INVALID__,,2009-03-03 00:00:00+01:00 +,,,,,91,Simulated process instance,decide,start,Wil,,2009-11-25 00:00:00+01:00 +,,,,1,91,Simulated process instance,decide,complete,Wil,2,2009-11-27 00:00:00+01:00 +,,,,,91,Simulated process instance,invite additional reviewer,start,Anne,,2009-11-27 00:00:00+01:00 +,,,,,91,Simulated process instance,invite additional reviewer,complete,Anne,,2009-11-29 00:00:00+01:00 +,,,reject,,91,Simulated process instance,get review X,complete,Mary,,2009-12-02 00:00:00+01:00 +,,,,,91,Simulated process instance,decide,start,Wil,,2010-02-06 00:00:00+01:00 +,,,,1,91,Simulated process instance,decide,complete,Wil,3,2010-02-11 00:00:00+01:00 +,,,,,91,Simulated process instance,reject,start,Anne,,2010-02-11 00:00:00+01:00 +,,,,,91,Simulated process instance,reject,complete,Anne,,2010-02-14 00:00:00+01:00 +,,,,,92,Simulated process instance,invite reviewers,start,Anne,,2007-01-24 00:00:00+01:00 +,,,,,92,Simulated process instance,invite reviewers,complete,Anne,,2007-01-26 00:00:00+01:00 +,,,,,92,Simulated process instance,time-out 1,complete,__INVALID__,,2007-01-27 00:00:00+01:00 +,,accept,,,92,Simulated process instance,get review 3,complete,Mary,,2007-01-31 00:00:00+01:00 +,,,,,92,Simulated process instance,time-out 2,complete,__INVALID__,,2007-02-03 00:00:00+01:00 +,,,,,92,Simulated process instance,collect reviews,start,Anne,,2007-02-06 00:00:00+01:00 +,,,,,92,Simulated process instance,collect reviews,complete,Anne,,2007-02-10 00:00:00+01:00 +,,,,,92,Simulated process instance,decide,start,Wil,,2007-03-01 00:00:00+01:00 +,,,,1,92,Simulated process instance,decide,complete,Wil,1,2007-03-02 00:00:00+01:00 +,,,,,92,Simulated process instance,invite additional reviewer,start,Mike,,2007-03-03 00:00:00+01:00 +,,,,,92,Simulated process instance,invite additional reviewer,complete,Mike,,2007-03-08 00:00:00+01:00 +,,,reject,,92,Simulated process instance,get review X,complete,John,,2007-03-11 00:00:00+01:00 +,,,,,92,Simulated process instance,decide,start,Wil,,2007-03-25 00:00:00+01:00 +,,,,1,92,Simulated process instance,decide,complete,Wil,2,2007-03-25 00:00:00+01:00 +,,,,,92,Simulated process instance,invite additional reviewer,start,Anne,,2007-05-02 01:00:00+02:00 +,,,,,92,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-04 01:00:00+02:00 +,,,accept,,92,Simulated process instance,get review X,complete,Pam,,2007-05-05 01:00:00+02:00 +,,,,,92,Simulated process instance,decide,start,Wil,,2007-09-22 01:00:00+02:00 +,,,,2,92,Simulated process instance,decide,complete,Wil,2,2007-09-26 01:00:00+02:00 +,,,,,92,Simulated process instance,invite additional reviewer,start,Mike,,2007-09-26 01:00:00+02:00 +,,,,,92,Simulated process instance,invite additional reviewer,complete,Mike,,2007-09-29 01:00:00+02:00 +,,,accept,,92,Simulated process instance,get review X,complete,Sam,,2007-10-01 01:00:00+02:00 +,,,,,92,Simulated process instance,decide,start,Wil,,2009-02-19 00:00:00+01:00 +,,,,3,92,Simulated process instance,decide,complete,Wil,2,2009-02-19 00:00:00+01:00 +,,,,,92,Simulated process instance,invite additional reviewer,start,Anne,,2009-02-20 00:00:00+01:00 +,,,,,92,Simulated process instance,invite additional reviewer,complete,Anne,,2009-02-21 00:00:00+01:00 +,,,accept,,92,Simulated process instance,get review X,complete,Sara,,2009-02-21 00:00:00+01:00 +,,,,,92,Simulated process instance,decide,start,Wil,,2009-05-27 01:00:00+02:00 +,,,,4,92,Simulated process instance,decide,complete,Wil,2,2009-06-01 01:00:00+02:00 +,,,,,92,Simulated process instance,accept,start,Mike,,2009-06-01 01:00:00+02:00 +,,,,,92,Simulated process instance,accept,complete,Mike,,2009-06-02 01:00:00+02:00 +,,,,,93,Simulated process instance,invite reviewers,start,Anne,,2007-02-06 00:00:00+01:00 +,,,,,93,Simulated process instance,invite reviewers,complete,Anne,,2007-02-06 00:00:00+01:00 +,,,,,93,Simulated process instance,time-out 1,complete,__INVALID__,,2007-02-07 00:00:00+01:00 +,,reject,,,93,Simulated process instance,get review 3,complete,Pam,,2007-02-09 00:00:00+01:00 +,,,,,93,Simulated process instance,time-out 2,complete,__INVALID__,,2007-02-11 00:00:00+01:00 +,,,,,93,Simulated process instance,collect reviews,start,Mike,,2007-02-15 00:00:00+01:00 +,,,,,93,Simulated process instance,collect reviews,complete,Mike,,2007-02-20 00:00:00+01:00 +,,,,,93,Simulated process instance,decide,start,Wil,,2007-03-26 01:00:00+02:00 +,,,,1,93,Simulated process instance,decide,complete,Wil,1,2007-03-27 01:00:00+02:00 +,,,,,93,Simulated process instance,invite additional reviewer,start,Anne,,2007-04-08 01:00:00+02:00 +,,,,,93,Simulated process instance,invite additional reviewer,complete,Anne,,2007-04-13 01:00:00+02:00 +,,,accept,,93,Simulated process instance,get review X,complete,Carol,,2007-04-13 01:00:00+02:00 +,,,,,93,Simulated process instance,decide,start,Wil,,2008-06-16 01:00:00+02:00 +,,,,2,93,Simulated process instance,decide,complete,Wil,1,2008-06-20 01:00:00+02:00 +,,,,,93,Simulated process instance,invite additional reviewer,start,Anne,,2008-06-20 01:00:00+02:00 +,,,,,93,Simulated process instance,invite additional reviewer,complete,Anne,,2008-06-21 01:00:00+02:00 +,,,,,93,Simulated process instance,time-out X,complete,__INVALID__,,2008-06-25 01:00:00+02:00 +,,,,,93,Simulated process instance,decide,start,Wil,,2009-04-27 01:00:00+02:00 +,,,,2,93,Simulated process instance,decide,complete,Wil,1,2009-04-29 01:00:00+02:00 +,,,,,93,Simulated process instance,invite additional reviewer,start,Mike,,2009-04-29 01:00:00+02:00 +,,,,,93,Simulated process instance,invite additional reviewer,complete,Mike,,2009-05-02 01:00:00+02:00 +,,,,,93,Simulated process instance,time-out X,complete,__INVALID__,,2009-05-04 01:00:00+02:00 +,,,,,93,Simulated process instance,decide,start,Wil,,2010-01-21 00:00:00+01:00 +,,,,2,93,Simulated process instance,decide,complete,Wil,1,2010-01-21 00:00:00+01:00 +,,,,,93,Simulated process instance,invite additional reviewer,start,Anne,,2010-01-21 00:00:00+01:00 +,,,,,93,Simulated process instance,invite additional reviewer,complete,Anne,,2010-01-25 00:00:00+01:00 +,,,reject,,93,Simulated process instance,get review X,complete,John,,2010-01-29 00:00:00+01:00 +,,,,,93,Simulated process instance,decide,start,Wil,,2010-03-03 00:00:00+01:00 +,,,,2,93,Simulated process instance,decide,complete,Wil,2,2010-03-03 00:00:00+01:00 +,,,,,93,Simulated process instance,invite additional reviewer,start,Anne,,2010-03-08 00:00:00+01:00 +,,,,,93,Simulated process instance,invite additional reviewer,complete,Anne,,2010-03-08 00:00:00+01:00 +,,,accept,,93,Simulated process instance,get review X,complete,Sara,,2010-03-08 00:00:00+01:00 +,,,,,93,Simulated process instance,decide,start,Wil,,2010-04-08 01:00:00+02:00 +,,,,3,93,Simulated process instance,decide,complete,Wil,2,2010-04-12 01:00:00+02:00 +,,,,,93,Simulated process instance,accept,start,Mike,,2010-04-12 01:00:00+02:00 +,,,,,93,Simulated process instance,accept,complete,Mike,,2010-04-15 01:00:00+02:00 +,,,,,94,Simulated process instance,invite reviewers,start,Mike,,2007-02-14 00:00:00+01:00 +,,,,,94,Simulated process instance,invite reviewers,complete,Mike,,2007-02-15 00:00:00+01:00 +,,,,,94,Simulated process instance,time-out 3,complete,__INVALID__,,2007-02-16 00:00:00+01:00 +accept,,,,,94,Simulated process instance,get review 1,complete,Pam,,2007-02-16 00:00:00+01:00 +,reject,,,,94,Simulated process instance,get review 2,complete,Pete,,2007-02-18 00:00:00+01:00 +,,,,,94,Simulated process instance,collect reviews,start,Anne,,2007-02-21 00:00:00+01:00 +,,,,,94,Simulated process instance,collect reviews,complete,Anne,,2007-02-26 00:00:00+01:00 +,,,,,94,Simulated process instance,decide,start,Wil,,2007-03-14 00:00:00+01:00 +,,,,1,94,Simulated process instance,decide,complete,Wil,1,2007-03-19 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,start,Mike,,2007-04-29 01:00:00+02:00 +,,,,,94,Simulated process instance,invite additional reviewer,complete,Mike,,2007-05-01 01:00:00+02:00 +,,,,,94,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-09 01:00:00+02:00 +,,,,,94,Simulated process instance,decide,start,Wil,,2007-12-10 00:00:00+01:00 +,,,,1,94,Simulated process instance,decide,complete,Wil,1,2007-12-14 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,start,Mike,,2007-12-14 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,complete,Mike,,2007-12-16 00:00:00+01:00 +,,,,,94,Simulated process instance,time-out X,complete,__INVALID__,,2008-01-02 00:00:00+01:00 +,,,,,94,Simulated process instance,decide,start,Wil,,2008-10-05 01:00:00+02:00 +,,,,1,94,Simulated process instance,decide,complete,Wil,1,2008-10-10 01:00:00+02:00 +,,,,,94,Simulated process instance,invite additional reviewer,start,Mike,,2008-10-10 01:00:00+02:00 +,,,,,94,Simulated process instance,invite additional reviewer,complete,Mike,,2008-10-15 01:00:00+02:00 +,,,reject,,94,Simulated process instance,get review X,complete,Sara,,2008-10-16 01:00:00+02:00 +,,,,,94,Simulated process instance,decide,start,Wil,,2008-11-07 00:00:00+01:00 +,,,,1,94,Simulated process instance,decide,complete,Wil,2,2008-11-09 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,start,Mike,,2008-11-09 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,complete,Mike,,2008-11-14 00:00:00+01:00 +,,,,,94,Simulated process instance,time-out X,complete,__INVALID__,,2008-11-18 00:00:00+01:00 +,,,,,94,Simulated process instance,decide,start,Wil,,2009-05-01 01:00:00+02:00 +,,,,1,94,Simulated process instance,decide,complete,Wil,2,2009-05-03 01:00:00+02:00 +,,,,,94,Simulated process instance,invite additional reviewer,start,Mike,,2009-05-03 01:00:00+02:00 +,,,,,94,Simulated process instance,invite additional reviewer,complete,Mike,,2009-05-04 01:00:00+02:00 +,,,accept,,94,Simulated process instance,get review X,complete,Carol,,2009-05-07 01:00:00+02:00 +,,,,,94,Simulated process instance,decide,start,Wil,,2009-11-27 00:00:00+01:00 +,,,,2,94,Simulated process instance,decide,complete,Wil,2,2009-11-30 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,start,Anne,,2009-11-30 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,complete,Anne,,2009-12-01 00:00:00+01:00 +,,,,,94,Simulated process instance,time-out X,complete,__INVALID__,,2009-12-03 00:00:00+01:00 +,,,,,94,Simulated process instance,decide,start,Wil,,2009-12-19 00:00:00+01:00 +,,,,2,94,Simulated process instance,decide,complete,Wil,2,2009-12-22 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,start,Anne,,2009-12-22 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,complete,Anne,,2009-12-22 00:00:00+01:00 +,,,reject,,94,Simulated process instance,get review X,complete,Pam,,2009-12-22 00:00:00+01:00 +,,,,,94,Simulated process instance,decide,start,Wil,,2010-01-25 00:00:00+01:00 +,,,,2,94,Simulated process instance,decide,complete,Wil,3,2010-01-25 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,start,Anne,,2010-01-25 00:00:00+01:00 +,,,,,94,Simulated process instance,invite additional reviewer,complete,Anne,,2010-01-26 00:00:00+01:00 +,,,accept,,94,Simulated process instance,get review X,complete,Pete,,2010-01-28 00:00:00+01:00 +,,,,,94,Simulated process instance,decide,start,Wil,,2010-03-02 00:00:00+01:00 +,,,,3,94,Simulated process instance,decide,complete,Wil,3,2010-03-03 00:00:00+01:00 +,,,,,94,Simulated process instance,reject,start,Mike,,2010-03-03 00:00:00+01:00 +,,,,,94,Simulated process instance,reject,complete,Mike,,2010-03-08 00:00:00+01:00 +,,,,,95,Simulated process instance,invite reviewers,start,Mike,,2007-02-20 00:00:00+01:00 +,,,,,95,Simulated process instance,invite reviewers,complete,Mike,,2007-02-22 00:00:00+01:00 +,,,,,95,Simulated process instance,time-out 3,complete,__INVALID__,,2007-02-23 00:00:00+01:00 +accept,,,,,95,Simulated process instance,get review 1,complete,Pete,,2007-02-24 00:00:00+01:00 +,,,,,95,Simulated process instance,time-out 2,complete,__INVALID__,,2007-02-26 00:00:00+01:00 +,,,,,95,Simulated process instance,collect reviews,start,Mike,,2007-02-28 00:00:00+01:00 +,,,,,95,Simulated process instance,collect reviews,complete,Mike,,2007-03-01 00:00:00+01:00 +,,,,,95,Simulated process instance,decide,start,Wil,,2007-05-26 01:00:00+02:00 +,,,,2,95,Simulated process instance,decide,complete,Wil,0,2007-05-31 01:00:00+02:00 +,,,,,95,Simulated process instance,invite additional reviewer,start,Anne,,2007-05-31 01:00:00+02:00 +,,,,,95,Simulated process instance,invite additional reviewer,complete,Anne,,2007-05-31 01:00:00+02:00 +,,,reject,,95,Simulated process instance,get review X,complete,Sam,,2007-06-05 01:00:00+02:00 +,,,,,95,Simulated process instance,decide,start,Wil,,2007-10-12 01:00:00+02:00 +,,,,2,95,Simulated process instance,decide,complete,Wil,1,2007-10-17 01:00:00+02:00 +,,,,,95,Simulated process instance,invite additional reviewer,start,Anne,,2007-10-17 01:00:00+02:00 +,,,,,95,Simulated process instance,invite additional reviewer,complete,Anne,,2007-10-18 01:00:00+02:00 +,,,,,95,Simulated process instance,time-out X,complete,__INVALID__,,2007-10-25 01:00:00+02:00 +,,,,,95,Simulated process instance,decide,start,Wil,,2008-01-12 00:00:00+01:00 +,,,,2,95,Simulated process instance,decide,complete,Wil,1,2008-01-13 00:00:00+01:00 +,,,,,95,Simulated process instance,invite additional reviewer,start,Anne,,2008-01-14 00:00:00+01:00 +,,,,,95,Simulated process instance,invite additional reviewer,complete,Anne,,2008-01-17 00:00:00+01:00 +,,,accept,,95,Simulated process instance,get review X,complete,John,,2008-01-22 00:00:00+01:00 +,,,,,95,Simulated process instance,decide,start,Wil,,2008-07-22 01:00:00+02:00 +,,,,3,95,Simulated process instance,decide,complete,Wil,1,2008-07-25 01:00:00+02:00 +,,,,,95,Simulated process instance,accept,start,Mike,,2008-07-25 01:00:00+02:00 +,,,,,95,Simulated process instance,accept,complete,Mike,,2008-07-25 01:00:00+02:00 +,,,,,96,Simulated process instance,invite reviewers,start,Mike,,2007-02-26 00:00:00+01:00 +,,,,,96,Simulated process instance,invite reviewers,complete,Mike,,2007-02-28 00:00:00+01:00 +,,reject,,,96,Simulated process instance,get review 3,complete,Carol,,2007-03-01 00:00:00+01:00 +,,,,,96,Simulated process instance,time-out 2,complete,__INVALID__,,2007-03-01 00:00:00+01:00 +,,,,,96,Simulated process instance,time-out 1,complete,__INVALID__,,2007-03-03 00:00:00+01:00 +,,,,,96,Simulated process instance,collect reviews,start,Anne,,2007-03-03 00:00:00+01:00 +,,,,,96,Simulated process instance,collect reviews,complete,Anne,,2007-03-07 00:00:00+01:00 +,,,,,96,Simulated process instance,decide,start,Wil,,2008-09-18 01:00:00+02:00 +,,,,0,96,Simulated process instance,decide,complete,Wil,2,2008-09-18 01:00:00+02:00 +,,,,,96,Simulated process instance,invite additional reviewer,start,Anne,,2008-09-18 01:00:00+02:00 +,,,,,96,Simulated process instance,invite additional reviewer,complete,Anne,,2008-09-21 01:00:00+02:00 +,,,accept,,96,Simulated process instance,get review X,complete,Pam,,2008-09-25 01:00:00+02:00 +,,,,,96,Simulated process instance,decide,start,Wil,,2008-12-01 00:00:00+01:00 +,,,,1,96,Simulated process instance,decide,complete,Wil,2,2008-12-04 00:00:00+01:00 +,,,,,96,Simulated process instance,invite additional reviewer,start,Anne,,2008-12-04 00:00:00+01:00 +,,,,,96,Simulated process instance,invite additional reviewer,complete,Anne,,2008-12-04 00:00:00+01:00 +,,,,,96,Simulated process instance,time-out X,complete,__INVALID__,,2008-12-06 00:00:00+01:00 +,,,,,96,Simulated process instance,decide,start,Wil,,2008-12-15 00:00:00+01:00 +,,,,1,96,Simulated process instance,decide,complete,Wil,2,2008-12-17 00:00:00+01:00 +,,,,,96,Simulated process instance,invite additional reviewer,start,Anne,,2008-12-17 00:00:00+01:00 +,,,,,96,Simulated process instance,invite additional reviewer,complete,Anne,,2008-12-19 00:00:00+01:00 +,,,,,96,Simulated process instance,time-out X,complete,__INVALID__,,2009-01-03 00:00:00+01:00 +,,,,,96,Simulated process instance,decide,start,Wil,,2009-07-12 01:00:00+02:00 +,,,,1,96,Simulated process instance,decide,complete,Wil,2,2009-07-15 01:00:00+02:00 +,,,,,96,Simulated process instance,invite additional reviewer,start,Anne,,2009-07-15 01:00:00+02:00 +,,,,,96,Simulated process instance,invite additional reviewer,complete,Anne,,2009-07-20 01:00:00+02:00 +,,,,,96,Simulated process instance,time-out X,complete,__INVALID__,,2009-07-27 01:00:00+02:00 +,,,,,96,Simulated process instance,decide,start,Wil,,2009-08-02 01:00:00+02:00 +,,,,1,96,Simulated process instance,decide,complete,Wil,2,2009-08-05 01:00:00+02:00 +,,,,,96,Simulated process instance,invite additional reviewer,start,Anne,,2009-08-05 01:00:00+02:00 +,,,,,96,Simulated process instance,invite additional reviewer,complete,Anne,,2009-08-06 01:00:00+02:00 +,,,reject,,96,Simulated process instance,get review X,complete,Sam,,2009-08-08 01:00:00+02:00 +,,,,,96,Simulated process instance,decide,start,Wil,,2009-11-08 00:00:00+01:00 +,,,,1,96,Simulated process instance,decide,complete,Wil,3,2009-11-08 00:00:00+01:00 +,,,,,96,Simulated process instance,invite additional reviewer,start,Mike,,2009-11-08 00:00:00+01:00 +,,,,,96,Simulated process instance,invite additional reviewer,complete,Mike,,2009-11-11 00:00:00+01:00 +,,,,,96,Simulated process instance,time-out X,complete,__INVALID__,,2009-11-11 00:00:00+01:00 +,,,,,96,Simulated process instance,decide,start,Wil,,2009-11-18 00:00:00+01:00 +,,,,1,96,Simulated process instance,decide,complete,Wil,3,2009-11-20 00:00:00+01:00 +,,,,,96,Simulated process instance,reject,start,Anne,,2009-11-21 00:00:00+01:00 +,,,,,96,Simulated process instance,reject,complete,Anne,,2009-11-22 00:00:00+01:00 +,,,,,97,Simulated process instance,invite reviewers,start,Mike,,2007-03-01 00:00:00+01:00 +,,,,,97,Simulated process instance,invite reviewers,complete,Mike,,2007-03-01 00:00:00+01:00 +reject,,,,,97,Simulated process instance,get review 1,complete,Carol,,2007-03-03 00:00:00+01:00 +,accept,,,,97,Simulated process instance,get review 2,complete,Sam,,2007-03-03 00:00:00+01:00 +,,reject,,,97,Simulated process instance,get review 3,complete,John,,2007-03-06 00:00:00+01:00 +,,,,,97,Simulated process instance,collect reviews,start,Anne,,2007-03-07 00:00:00+01:00 +,,,,,97,Simulated process instance,collect reviews,complete,Anne,,2007-03-07 00:00:00+01:00 +,,,,,97,Simulated process instance,decide,start,Wil,,2008-09-18 01:00:00+02:00 +,,,,1,97,Simulated process instance,decide,complete,Wil,2,2008-09-21 01:00:00+02:00 +,,,,,97,Simulated process instance,invite additional reviewer,start,Anne,,2008-09-21 01:00:00+02:00 +,,,,,97,Simulated process instance,invite additional reviewer,complete,Anne,,2008-09-22 01:00:00+02:00 +,,,,,97,Simulated process instance,time-out X,complete,__INVALID__,,2008-09-22 01:00:00+02:00 +,,,,,97,Simulated process instance,decide,start,Wil,,2009-06-26 01:00:00+02:00 +,,,,1,97,Simulated process instance,decide,complete,Wil,2,2009-06-27 01:00:00+02:00 +,,,,,97,Simulated process instance,invite additional reviewer,start,Anne,,2009-06-28 01:00:00+02:00 +,,,,,97,Simulated process instance,invite additional reviewer,complete,Anne,,2009-07-01 01:00:00+02:00 +,,,reject,,97,Simulated process instance,get review X,complete,John,,2009-07-05 01:00:00+02:00 +,,,,,97,Simulated process instance,decide,start,Wil,,2009-08-27 01:00:00+02:00 +,,,,1,97,Simulated process instance,decide,complete,Wil,3,2009-08-31 01:00:00+02:00 +,,,,,97,Simulated process instance,invite additional reviewer,start,Anne,,2009-08-31 01:00:00+02:00 +,,,,,97,Simulated process instance,invite additional reviewer,complete,Anne,,2009-09-02 01:00:00+02:00 +,,,reject,,97,Simulated process instance,get review X,complete,Sara,,2009-09-07 01:00:00+02:00 +,,,,,97,Simulated process instance,decide,start,Wil,,2010-02-19 00:00:00+01:00 +,,,,1,97,Simulated process instance,decide,complete,Wil,4,2010-02-21 00:00:00+01:00 +,,,,,97,Simulated process instance,invite additional reviewer,start,Mike,,2010-02-21 00:00:00+01:00 +,,,,,97,Simulated process instance,invite additional reviewer,complete,Mike,,2010-02-23 00:00:00+01:00 +,,,,,97,Simulated process instance,time-out X,complete,__INVALID__,,2010-02-25 00:00:00+01:00 +,,,,,97,Simulated process instance,decide,start,Wil,,2010-03-01 00:00:00+01:00 +,,,,1,97,Simulated process instance,decide,complete,Wil,4,2010-03-02 00:00:00+01:00 +,,,,,97,Simulated process instance,invite additional reviewer,start,Mike,,2010-03-02 00:00:00+01:00 +,,,,,97,Simulated process instance,invite additional reviewer,complete,Mike,,2010-03-02 00:00:00+01:00 +,,,accept,,97,Simulated process instance,get review X,complete,John,,2010-03-04 00:00:00+01:00 +,,,,,97,Simulated process instance,decide,start,Wil,,2010-05-04 01:00:00+02:00 +,,,,2,97,Simulated process instance,decide,complete,Wil,4,2010-05-07 01:00:00+02:00 +,,,,,97,Simulated process instance,invite additional reviewer,start,Mike,,2010-05-07 01:00:00+02:00 +,,,,,97,Simulated process instance,invite additional reviewer,complete,Mike,,2010-05-11 01:00:00+02:00 +,,,accept,,97,Simulated process instance,get review X,complete,Sara,,2010-05-16 01:00:00+02:00 +,,,,,97,Simulated process instance,decide,start,Wil,,2010-05-17 01:00:00+02:00 +,,,,3,97,Simulated process instance,decide,complete,Wil,4,2010-05-17 01:00:00+02:00 +,,,,,97,Simulated process instance,accept,start,Anne,,2010-05-19 01:00:00+02:00 +,,,,,97,Simulated process instance,accept,complete,Anne,,2010-05-22 01:00:00+02:00 +,,,,,98,Simulated process instance,invite reviewers,start,Mike,,2007-03-03 00:00:00+01:00 +,,,,,98,Simulated process instance,invite reviewers,complete,Mike,,2007-03-03 00:00:00+01:00 +,,,,,98,Simulated process instance,time-out 2,complete,__INVALID__,,2007-03-06 00:00:00+01:00 +reject,,,,,98,Simulated process instance,get review 1,complete,Carol,,2007-03-07 00:00:00+01:00 +,,accept,,,98,Simulated process instance,get review 3,complete,Mary,,2007-03-08 00:00:00+01:00 +,,,,,98,Simulated process instance,collect reviews,start,Mike,,2007-03-08 00:00:00+01:00 +,,,,,98,Simulated process instance,collect reviews,complete,Mike,,2007-03-10 00:00:00+01:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2007-03-21 00:00:00+01:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,1,2007-03-25 00:00:00+01:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Mike,,2007-04-01 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Mike,,2007-04-05 01:00:00+02:00 +,,,,,98,Simulated process instance,time-out X,complete,__INVALID__,,2007-04-11 01:00:00+02:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2007-06-09 01:00:00+02:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,1,2007-06-12 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Anne,,2007-06-14 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Anne,,2007-06-14 01:00:00+02:00 +,,,reject,,98,Simulated process instance,get review X,complete,John,,2007-06-19 01:00:00+02:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2007-09-30 01:00:00+02:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,2,2007-10-02 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Mike,,2007-10-02 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Mike,,2007-10-05 01:00:00+02:00 +,,,,,98,Simulated process instance,time-out X,complete,__INVALID__,,2007-10-07 01:00:00+02:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2007-11-13 00:00:00+01:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,2,2007-11-17 00:00:00+01:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Anne,,2007-11-17 00:00:00+01:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Anne,,2007-11-19 00:00:00+01:00 +,,,,,98,Simulated process instance,time-out X,complete,__INVALID__,,2007-11-21 00:00:00+01:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2008-01-19 00:00:00+01:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,2,2008-01-22 00:00:00+01:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Anne,,2008-01-22 00:00:00+01:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Anne,,2008-01-27 00:00:00+01:00 +,,,,,98,Simulated process instance,time-out X,complete,__INVALID__,,2008-01-28 00:00:00+01:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2008-06-11 01:00:00+02:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,2,2008-06-13 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Mike,,2008-06-13 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Mike,,2008-06-18 01:00:00+02:00 +,,,,,98,Simulated process instance,time-out X,complete,__INVALID__,,2008-06-28 01:00:00+02:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2008-07-09 01:00:00+02:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,2,2008-07-13 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Mike,,2008-07-13 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Mike,,2008-07-17 01:00:00+02:00 +,,,,,98,Simulated process instance,time-out X,complete,__INVALID__,,2008-07-17 01:00:00+02:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2008-10-14 01:00:00+02:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,2,2008-10-15 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Mike,,2008-10-15 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Mike,,2008-10-18 01:00:00+02:00 +,,,,,98,Simulated process instance,time-out X,complete,__INVALID__,,2008-10-25 01:00:00+02:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2009-03-20 00:00:00+01:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,2,2009-03-23 00:00:00+01:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Mike,,2009-03-23 00:00:00+01:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Mike,,2009-03-28 00:00:00+01:00 +,,,,,98,Simulated process instance,time-out X,complete,__INVALID__,,2009-04-06 01:00:00+02:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2009-05-09 01:00:00+02:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,2,2009-05-12 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Anne,,2009-05-12 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Anne,,2009-05-12 01:00:00+02:00 +,,,reject,,98,Simulated process instance,get review X,complete,John,,2009-05-16 01:00:00+02:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2009-07-21 01:00:00+02:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,3,2009-07-22 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,start,Mike,,2009-07-22 01:00:00+02:00 +,,,,,98,Simulated process instance,invite additional reviewer,complete,Mike,,2009-07-26 01:00:00+02:00 +,,,reject,,98,Simulated process instance,get review X,complete,Pete,,2009-07-28 01:00:00+02:00 +,,,,,98,Simulated process instance,decide,start,Wil,,2009-11-20 00:00:00+01:00 +,,,,2,98,Simulated process instance,decide,complete,Wil,4,2009-11-25 00:00:00+01:00 +,,,,,98,Simulated process instance,reject,start,Mike,,2009-11-25 00:00:00+01:00 +,,,,,98,Simulated process instance,reject,complete,Mike,,2009-11-29 00:00:00+01:00 +,,,,,99,Simulated process instance,invite reviewers,start,Mike,,2007-03-10 00:00:00+01:00 +,,,,,99,Simulated process instance,invite reviewers,complete,Mike,,2007-03-14 00:00:00+01:00 +,,,,,99,Simulated process instance,time-out 3,complete,__INVALID__,,2007-03-14 00:00:00+01:00 +,,,,,99,Simulated process instance,time-out 1,complete,__INVALID__,,2007-03-16 00:00:00+01:00 +,accept,,,,99,Simulated process instance,get review 2,complete,Carol,,2007-03-19 00:00:00+01:00 +,,,,,99,Simulated process instance,collect reviews,start,Anne,,2007-03-19 00:00:00+01:00 +,,,,,99,Simulated process instance,collect reviews,complete,Anne,,2007-03-19 00:00:00+01:00 +,,,,,99,Simulated process instance,decide,start,Wil,,2007-05-25 01:00:00+02:00 +,,,,1,99,Simulated process instance,decide,complete,Wil,0,2007-05-26 01:00:00+02:00 +,,,,,99,Simulated process instance,invite additional reviewer,start,Mike,,2007-05-26 01:00:00+02:00 +,,,,,99,Simulated process instance,invite additional reviewer,complete,Mike,,2007-05-26 01:00:00+02:00 +,,,,,99,Simulated process instance,time-out X,complete,__INVALID__,,2007-05-31 01:00:00+02:00 +,,,,,99,Simulated process instance,decide,start,Wil,,2008-01-08 00:00:00+01:00 +,,,,1,99,Simulated process instance,decide,complete,Wil,0,2008-01-09 00:00:00+01:00 +,,,,,99,Simulated process instance,invite additional reviewer,start,Anne,,2008-01-09 00:00:00+01:00 +,,,,,99,Simulated process instance,invite additional reviewer,complete,Anne,,2008-01-14 00:00:00+01:00 +,,,reject,,99,Simulated process instance,get review X,complete,Mary,,2008-01-14 00:00:00+01:00 +,,,,,99,Simulated process instance,decide,start,Wil,,2008-06-13 01:00:00+02:00 +,,,,1,99,Simulated process instance,decide,complete,Wil,1,2008-06-13 01:00:00+02:00 +,,,,,99,Simulated process instance,invite additional reviewer,start,Anne,,2008-06-13 01:00:00+02:00 +,,,,,99,Simulated process instance,invite additional reviewer,complete,Anne,,2008-06-17 01:00:00+02:00 +,,,,,99,Simulated process instance,time-out X,complete,__INVALID__,,2008-06-27 01:00:00+02:00 +,,,,,99,Simulated process instance,decide,start,Wil,,2008-07-05 01:00:00+02:00 +,,,,1,99,Simulated process instance,decide,complete,Wil,1,2008-07-07 01:00:00+02:00 +,,,,,99,Simulated process instance,invite additional reviewer,start,Mike,,2008-07-07 01:00:00+02:00 +,,,,,99,Simulated process instance,invite additional reviewer,complete,Mike,,2008-07-09 01:00:00+02:00 +,,,accept,,99,Simulated process instance,get review X,complete,John,,2008-07-12 01:00:00+02:00 +,,,,,99,Simulated process instance,decide,start,Wil,,2008-11-04 00:00:00+01:00 +,,,,2,99,Simulated process instance,decide,complete,Wil,1,2008-11-07 00:00:00+01:00 +,,,,,99,Simulated process instance,invite additional reviewer,start,Mike,,2008-11-07 00:00:00+01:00 +,,,,,99,Simulated process instance,invite additional reviewer,complete,Mike,,2008-11-08 00:00:00+01:00 +,,,,,99,Simulated process instance,time-out X,complete,__INVALID__,,2008-11-09 00:00:00+01:00 +,,,,,99,Simulated process instance,decide,start,Wil,,2009-01-25 00:00:00+01:00 +,,,,2,99,Simulated process instance,decide,complete,Wil,1,2009-01-27 00:00:00+01:00 +,,,,,99,Simulated process instance,invite additional reviewer,start,Anne,,2009-01-27 00:00:00+01:00 +,,,,,99,Simulated process instance,invite additional reviewer,complete,Anne,,2009-01-28 00:00:00+01:00 +,,,accept,,99,Simulated process instance,get review X,complete,Mary,,2009-01-30 00:00:00+01:00 +,,,,,99,Simulated process instance,decide,start,Wil,,2009-02-05 00:00:00+01:00 +,,,,3,99,Simulated process instance,decide,complete,Wil,1,2009-02-06 00:00:00+01:00 +,,,,,99,Simulated process instance,accept,start,Anne,,2009-02-08 00:00:00+01:00 +,,,,,99,Simulated process instance,accept,complete,Anne,,2009-02-12 00:00:00+01:00 diff --git a/pm4py/tests/input_data/reviewing.xes b/pm4py/tests/input_data/reviewing.xes new file mode 100644 index 0000000000000000000000000000000000000000..ecc0e7c8bc36eb4d50b7de9a34be5d3dfde2149d --- /dev/null +++ b/pm4py/tests/input_data/reviewing.xes @@ -0,0 +1,24457 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/roadtraffic.pnml b/pm4py/tests/input_data/roadtraffic.pnml new file mode 100644 index 0000000000000000000000000000000000000000..5d7760bf702c8e00d5c9614a247e54bd38ccb493 --- /dev/null +++ b/pm4py/tests/input_data/roadtraffic.pnml @@ -0,0 +1,442 @@ + + + + + imdf_net_1683005706.7810512 + + + + + source + + + 1 + + + + + p_8 + + + + + p_15 + + + + + p_16 + + + + + p_18 + + + + + p_20 + + + + + p_5 + + + + + p_10 + + + + + p_12 + + + + + p_28 + + + + + p_29 + + + + + p_30 + + + + + p_33 + + + + + p_34 + + + + + p_9 + + + + + p_22 + + + + + p_24 + + + + + p_35 + + + + + p_4 + + + + + p_13 + + + + + p_19 + + + + + p_17 + + + + + p_27 + + + + + p_31 + + + + + p_32 + + + + + sink + + + + + p_11 + + + + + p_21 + + + + + p_23 + + + + + skip_6 + + + + + + skip_15 + + + + + + tauJoin_20 + + + + + + skip_29 + + + + + + Notify Result Appeal to Offender + + + + + Create Fine + + + + + tauJoin_2 + + + + + + skip_3 + + + + + + tauSplit_7 + + + + + + skip_25 + + + + + + Appeal to Judge + + + + + skip_27 + + + + + + skip_12 + + + + + + skip_14 + + + + + + Send Appeal to Prefecture + + + + + tauSplit_16 + + + + + + skip_18 + + + + + + skip_21 + + + + + + Insert Fine Notification + + + + + skip_9 + + + + + + Send Fine + + + + + init_loop_10 + + + + + + Payment + + + + + tauSplit_19 + + + + + + skip_28 + + + + + + Insert Date Appeal to Prefecture + + + + + Send for Credit Collection + + + + + tauJoin_8 + + + + + + skip_13 + + + + + + skip_24 + + + + + + Add penalty + + + + + skip_26 + + + + + + Receive Result Appeal from Prefecture + + + + + tauJoin_17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + diff --git a/pm4py/tests/input_data/roadtraffic100traces.csv b/pm4py/tests/input_data/roadtraffic100traces.csv new file mode 100644 index 0000000000000000000000000000000000000000..cf849397073ff1abadfc090047d3246acb03be3e --- /dev/null +++ b/pm4py/tests/input_data/roadtraffic100traces.csv @@ -0,0 +1,391 @@ +amount,article,case:concept:name,concept:name,dismissal,expense,lastSent,lifecycle:transition,notificationType,org:resource,paymentAmount,points,time:timestamp,totalPaymentAmount,vehicleClass +35.0,157.0,N77802,Create Fine,NIL,,,complete,,537,,0.0,2005-03-23 00:00:00+01:00,0.0,A +,,N77802,Send Fine,,11.0,,complete,,,,,2005-07-22 00:00:00+02:00,, +36.0,157.0,A17641,Create Fine,NIL,,,complete,,541,,0.0,2007-07-14 00:00:00+02:00,0.0,A +,,A17641,Payment,,,,complete,,,36.0,,2007-07-16 00:00:00+02:00,36.0, +35.0,157.0,S106046,Create Fine,NIL,,,complete,,52,,0.0,2006-07-12 00:00:00+02:00,0.0,A +,,S106046,Send Fine,,11.0,,complete,,,,,2006-12-04 00:00:00+01:00,, +,,S106046,Insert Fine Notification,,,P,complete,P,,,,2006-12-25 00:00:00+01:00,, +71.5,,S106046,Add penalty,,,,complete,,,,,2007-02-23 00:00:00+01:00,, +,,S106046,Payment,,,,complete,,,49.25,,2007-05-28 00:00:00+02:00,49.25, +,,S106046,Payment,,,,complete,,,33.25,,2007-07-05 00:00:00+02:00,82.5, +35.0,157.0,N86044,Create Fine,NIL,,,complete,,541,,0.0,2005-10-30 00:00:00+02:00,0.0,A +,,N86044,Payment,,,,complete,,,35.0,,2005-11-10 00:00:00+01:00,35.0, +32.0,7.0,S57499,Create Fine,NIL,,,complete,,31,,0.0,2002-04-10 00:00:00+02:00,0.0,A +,,S57499,Send Fine,,10.0,,complete,,,,,2002-06-10 00:00:00+02:00,, +33.6,157.0,N67803,Create Fine,NIL,,,complete,,537,,0.0,2004-12-09 00:00:00+01:00,0.0,A +,,N67803,Send Fine,,11.0,,complete,,,,,2005-04-28 00:00:00+02:00,, +,,N67803,Insert Fine Notification,,,P,complete,P,,,,2005-05-06 00:00:00+02:00,, +68.77,,N67803,Add penalty,,,,complete,,,,,2005-07-05 00:00:00+02:00,, +,,N67803,Send for Credit Collection,,,,complete,,,,,2007-02-28 00:00:00+01:00,, +65.0,158.0,S73479,Create Fine,NIL,,,complete,,837,,0.0,2002-06-29 00:00:00+02:00,0.0,A +,,S73479,Send Fine,,10.0,,complete,,,,,2002-07-29 00:00:00+02:00,, +36.0,157.0,A23741,Create Fine,NIL,,,complete,,550,,0.0,2008-01-14 00:00:00+01:00,0.0,A +,,A23741,Send Fine,,13.0,,complete,,,,,2008-03-01 00:00:00+01:00,, +,,A23741,Insert Fine Notification,,,P,complete,P,,,,2008-03-20 00:00:00+01:00,, +74.0,,A23741,Add penalty,,,,complete,,,,,2008-05-19 00:00:00+02:00,, +,,A23741,Send for Credit Collection,,,,complete,,,,,2009-03-30 00:00:00+02:00,, +31.3,7.0,S59734,Create Fine,NIL,,,complete,,811,,0.0,2000-10-22 00:00:00+02:00,0.0,A +,,S59734,Send Fine,,6.71,,complete,,,,,2000-11-30 00:00:00+01:00,, +,,S59734,Insert Fine Notification,,,N,complete,P,,,,2001-01-08 00:00:00+01:00,, +62.59,,S59734,Add penalty,,,,complete,,,,,2001-03-09 00:00:00+01:00,, +,,S59734,Send for Credit Collection,,,,complete,,,,,2002-04-10 00:00:00+02:00,, +33.6,157.0,N55940,Create Fine,NIL,,,complete,,536,,0.0,2004-06-21 00:00:00+02:00,0.0,A +,,N55940,Payment,,,,complete,,,33.6,,2004-06-24 00:00:00+02:00,33.6, +22.0,7.0,A13415,Create Fine,NIL,,,complete,,550,,0.0,2007-09-12 00:00:00+02:00,0.0,A +,,A13415,Send Fine,,13.0,,complete,,,,,2007-12-27 00:00:00+01:00,, +38.0,157.0,A43678,Create Fine,NIL,,,complete,,561,,0.0,2009-06-30 00:00:00+02:00,0.0,A +,,A43678,Send Fine,,13.5,,complete,,,,,2009-09-25 00:00:00+02:00,, +,,A43678,Insert Fine Notification,,,P,complete,P,,,,2009-10-01 00:00:00+02:00,, +77.5,,A43678,Add penalty,,,,complete,,,,,2009-11-30 00:00:00+01:00,, +,,A43678,Payment,,,,complete,,,51.5,,2009-11-30 00:00:00+01:00,51.5, +22.0,7.0,A17768,Create Fine,NIL,,,complete,,560,,0.0,2007-07-15 00:00:00+02:00,0.0,A +,,A17768,Send Fine,,13.0,,complete,,,,,2007-10-31 00:00:00+01:00,, +32.8,157.0,N38118,Create Fine,NIL,,,complete,,538,,0.0,2001-10-22 00:00:00+02:00,0.0,A +,,N38118,Send Fine,,6.71,,complete,,,,,2001-11-24 00:00:00+01:00,, +,,N38118,Insert Fine Notification,,,N,complete,P,,,,2002-01-02 00:00:00+01:00,, +65.6,,N38118,Add penalty,,,,complete,,,,,2002-03-03 00:00:00+01:00,, +,,N38118,Send for Credit Collection,,,,complete,,,,,2003-01-10 00:00:00+01:00,, +38.0,157.0,S127586,Create Fine,NIL,,,complete,,24,,0.0,2009-08-15 00:00:00+02:00,0.0,A +,,S127586,Payment,,,,complete,,,38.0,,2009-08-17 00:00:00+02:00,38.0, +65.6,41.0,S60775,Create Fine,A,,,complete,,30,,0.0,2001-07-26 00:00:00+02:00,0.0,A +,,S60775,Send Fine,,6.71,,complete,,,,,2001-10-18 00:00:00+02:00,, +38.0,157.0,S138518,Create Fine,NIL,,,complete,,848,,0.0,2009-06-20 00:00:00+02:00,0.0,A +,,S138518,Send Fine,,13.5,,complete,,,,,2009-09-18 00:00:00+02:00,, +,,S138518,Insert Fine Notification,,,P,complete,P,,,,2009-10-08 00:00:00+02:00,, +77.5,,S138518,Add penalty,,,,complete,,,,,2009-12-07 00:00:00+01:00,, +,,S138518,Send for Credit Collection,,,,complete,,,,,2012-03-26 00:00:00+02:00,, +32.8,7.0,C13687,Create Fine,NIL,,,complete,,820,,0.0,2001-07-09 00:00:00+02:00,0.0,M +,,C13687,Send Fine,,0.0,,complete,,,,,2001-07-09 00:00:00+02:00,, +,,C13687,Insert Fine Notification,,,N,complete,P,,,,2001-07-09 00:00:00+02:00,, +65.6,,C13687,Add penalty,,,,complete,,,,,2001-09-07 00:00:00+02:00,, +,,C13687,Send for Credit Collection,,,,complete,,,,,2003-01-10 00:00:00+01:00,, +65.0,158.0,S71489,Create Fine,NIL,,,complete,,833,,0.0,2002-06-06 00:00:00+02:00,0.0,A +,,S71489,Send Fine,,10.0,,complete,,,,,2002-09-05 00:00:00+02:00,, +,,S71489,Insert Fine Notification,,,N,complete,P,,,,2002-09-11 00:00:00+02:00,, +131.0,,S71489,Add penalty,,,,complete,,,,,2002-11-10 00:00:00+01:00,, +,,S71489,Send for Credit Collection,,,,complete,,,,,2004-01-10 00:00:00+01:00,, +24.0,7.0,P5172,Create Fine,NIL,,,complete,,559,,0.0,2012-08-25 00:00:00+02:00,0.0,A +,,P5172,Send Fine,,30.0,,complete,,,,,2013-02-06 00:00:00+01:00,, +32.8,7.0,S67541,Create Fine,NIL,,,complete,,839,,0.0,2001-08-05 00:00:00+02:00,0.0,A +,,S67541,Send Fine,,6.71,,complete,,,,,2001-11-09 00:00:00+01:00,, +,,S67541,Payment,,,,complete,,,39.51,,2001-12-14 00:00:00+01:00,39.51, +23.0,181.0,S157468,Create Fine,NIL,,,complete,,858,,0.0,2010-07-31 00:00:00+02:00,0.0,A +,,S157468,Payment,,,,complete,,,23.0,,2010-08-17 00:00:00+02:00,23.0, +35.0,7.0,S100992,Create Fine,NIL,,,complete,,49,,0.0,2005-02-01 00:00:00+01:00,0.0,A +,,S100992,Send Fine,,16.6,,complete,,,,,2005-06-10 00:00:00+02:00,, +,,S100992,Insert Fine Notification,,,P,complete,P,,,,2005-06-30 00:00:00+02:00,, +,,S100992,Payment,,,,complete,,,46.0,,2005-08-09 00:00:00+02:00,46.0, +71.5,,S100992,Add penalty,,,,complete,,,,,2005-08-29 00:00:00+02:00,, +,,S100992,Payment,,,,complete,,,5.6,,2005-09-09 00:00:00+02:00,51.6, +24.0,7.0,P716,Create Fine,NIL,,,complete,,559,,0.0,2011-06-21 00:00:00+02:00,0.0,A +,,P716,Send Fine,,15.0,,complete,,,,,2011-07-26 00:00:00+02:00,, +,,P716,Insert Fine Notification,,,P,complete,P,,,,2011-10-13 00:00:00+02:00,, +47.0,,P716,Add penalty,,,,complete,,,,,2011-12-12 00:00:00+01:00,, +,,P716,Send for Credit Collection,,,,complete,,,,,2013-04-24 00:00:00+02:00,, +143.0,80.0,C18200,Create Fine,NIL,,,complete,,57,,0.0,2005-09-17 00:00:00+02:00,0.0,A +,,C18200,Send Fine,,0.0,,complete,,,,,2005-09-17 00:00:00+02:00,, +,,C18200,Insert Fine Notification,,,C,complete,P,,,,2005-09-17 00:00:00+02:00,, +286.5,,C18200,Add penalty,,,,complete,,,,,2005-11-16 00:00:00+01:00,, +,,C18200,Send for Credit Collection,,,,complete,,,,,2007-02-28 00:00:00+01:00,, +33.6,157.0,N62843,Create Fine,NIL,,,complete,,541,,0.0,2004-08-27 00:00:00+02:00,0.0,A +,,N62843,Send Fine,,11.0,,complete,,,,,2004-12-24 00:00:00+01:00,, +,,N62843,Insert Fine Notification,,,P,complete,P,,,,2005-01-08 00:00:00+01:00,, +,,N62843,Payment,,,,complete,,,33.6,,2005-01-18 00:00:00+01:00,33.6, +68.77,,N62843,Add penalty,,,,complete,,,,,2005-03-09 00:00:00+01:00,, +,,N62843,Payment,,,,complete,,,11.0,,2005-06-24 00:00:00+02:00,44.6, +33.6,7.0,S82710,Create Fine,NIL,,,complete,,45,,0.0,2003-08-03 00:00:00+02:00,0.0,A +,,S82710,Send Fine,,10.0,,complete,,,,,2003-11-03 00:00:00+01:00,, +,,S82710,Insert Fine Notification,,,N,complete,P,,,,2003-11-13 00:00:00+01:00,, +68.77,,S82710,Add penalty,,,,complete,,,,,2004-01-12 00:00:00+01:00,, +,,S82710,Send for Credit Collection,,,,complete,,,,,2004-12-25 00:00:00+01:00,, +32.0,7.0,S72997,Create Fine,NIL,,,complete,,825,,0.0,2002-07-17 00:00:00+02:00,0.0,A +,,S72997,Send Fine,,10.0,,complete,,,,,2002-09-05 00:00:00+02:00,, +,,S72997,Payment,,,,complete,,,42.0,,2002-09-13 00:00:00+02:00,42.0, +33.6,157.0,N68169,Create Fine,NIL,,,complete,,541,,0.0,2004-12-03 00:00:00+01:00,0.0,A +,,N68169,Payment,,,,complete,,,33.6,,2004-12-09 00:00:00+01:00,33.6, +36.0,157.0,A34570,Create Fine,NIL,,,complete,,565,,0.0,2008-07-26 00:00:00+02:00,0.0,A +,,A34570,Payment,,,,complete,,,36.0,,2008-08-04 00:00:00+02:00,36.0, +33.6,157.0,N61259,Create Fine,NIL,,,complete,,554,,0.0,2004-08-08 00:00:00+02:00,0.0,A +,,N61259,Send Fine,,16.6,,complete,,,,,2004-12-17 00:00:00+01:00,, +,,N61259,Payment,,,,complete,,,44.6,,2005-01-11 00:00:00+01:00,44.6, +,,N61259,Insert Fine Notification,,,P,complete,P,,,,2005-01-13 00:00:00+01:00,, +68.77,,N61259,Add penalty,,,,complete,,,,,2005-03-14 00:00:00+01:00,, +,,N61259,Payment,,,,complete,,,5.6,,2005-04-04 00:00:00+02:00,50.2, +71.0,158.0,S114544,Create Fine,NIL,,,complete,,45,,0.0,2006-08-12 00:00:00+02:00,0.0,A +,,S114544,Payment,,,,complete,,,71.0,,2006-08-21 00:00:00+02:00,71.0, +137.55,142.0,V10961,Create Fine,NIL,,,complete,,35,,0.0,2003-02-25 00:00:00+01:00,0.0,A +,,V10961,Send Fine,,10.0,,complete,,,,,2003-05-20 00:00:00+02:00,, +35.0,157.0,N98851,Create Fine,NIL,,,complete,,541,,0.0,2006-06-25 00:00:00+02:00,0.0,A +,,N98851,Payment,,,,complete,,,35.0,,2006-06-28 00:00:00+02:00,35.0, +32.8,157.0,N32179,Create Fine,NIL,,,complete,,548,,0.0,2001-03-12 00:00:00+01:00,0.0,A +,,N32179,Send Fine,,6.71,,complete,,,,,2001-06-07 00:00:00+02:00,, +,,N32179,Insert Fine Notification,,,N,complete,P,,,,2001-06-28 00:00:00+02:00,, +65.6,,N32179,Add penalty,,,,complete,,,,,2001-08-27 00:00:00+02:00,, +,,N32179,Send for Credit Collection,,,,complete,,,,,2003-01-10 00:00:00+01:00,, +24.0,7.0,P1616,Create Fine,NIL,,,complete,,537,,0.0,2011-08-07 00:00:00+02:00,0.0,A +,,P1616,Send Fine,,15.0,,complete,,,,,2011-10-04 00:00:00+02:00,, +,,P1616,Insert Fine Notification,,,P,complete,P,,,,2011-11-24 00:00:00+01:00,, +47.0,,P1616,Add penalty,,,,complete,,,,,2012-01-23 00:00:00+01:00,, +,,P1616,Send for Credit Collection,,,,complete,,,,,2013-04-24 00:00:00+02:00,, +32.8,7.0,S60957,Create Fine,NIL,,,complete,,813,,0.0,2001-05-07 00:00:00+02:00,0.0,A +,,S60957,Payment,,,,complete,,,32.8,,2001-05-10 00:00:00+02:00,32.8, +39.0,7.0,S177357,Create Fine,NIL,,,complete,,53,,0.0,2011-11-15 00:00:00+01:00,0.0,A +,,S177357,Send Fine,,15.0,,complete,,,,,2012-01-14 00:00:00+01:00,, +,,S177357,Insert Fine Notification,,,P,complete,P,,,,2012-02-03 00:00:00+01:00,, +79.5,,S177357,Add penalty,,,,complete,,,,,2012-04-03 00:00:00+02:00,, +,,S177357,Send for Credit Collection,,,,complete,,,,,2013-04-24 00:00:00+02:00,, +35.0,157.0,N81159,Create Fine,NIL,,,complete,,559,,0.0,2005-07-21 00:00:00+02:00,0.0,A +,,N81159,Send Fine,,14.25,,complete,,,,,2005-12-03 00:00:00+01:00,, +,,N81159,Insert Fine Notification,,,P,complete,P,,,,2005-12-21 00:00:00+01:00,, +,,N81159,Payment,,,,complete,,,35.0,,2006-02-08 00:00:00+01:00,35.0, +71.5,,N81159,Add penalty,,,,complete,,,,,2006-02-19 00:00:00+01:00,, +,,N81159,Payment,,,,complete,,,14.25,,2006-11-21 00:00:00+01:00,49.25, +33.6,157.0,N61346,Create Fine,NIL,,,complete,,555,,0.0,2004-07-31 00:00:00+02:00,0.0,A +,,N61346,Send Fine,,11.0,,complete,,,,,2004-12-17 00:00:00+01:00,, +,,N61346,Insert Fine Notification,,,P,complete,P,,,,2005-01-21 00:00:00+01:00,, +68.77,,N61346,Add penalty,,,,complete,,,,,2005-03-22 00:00:00+01:00,, +,,N61346,Send for Credit Collection,,,,complete,,,,,2006-02-28 00:00:00+01:00,, +38.0,7.0,S132979,Create Fine,NIL,,,complete,,58,,0.0,2009-03-11 00:00:00+01:00,0.0,A +,,S132979,Payment,,,,complete,,,38.0,,2009-03-25 00:00:00+01:00,38.0, +39.0,7.0,S168952,Create Fine,NIL,,,complete,,852,,0.0,2011-06-09 00:00:00+02:00,0.0,A +,,S168952,Send Fine,,15.0,,complete,,,,,2011-07-26 00:00:00+02:00,, +,,S168952,Insert Fine Notification,,,P,complete,P,,,,2011-10-02 00:00:00+02:00,, +79.5,,S168952,Add penalty,,,,complete,,,,,2011-12-01 00:00:00+01:00,, +,,S168952,Send for Credit Collection,,,,complete,,,,,2013-04-24 00:00:00+02:00,, +21.0,7.0,N73576,Create Fine,NIL,,,complete,,538,,0.0,2005-09-22 00:00:00+02:00,0.0,A +,,N73576,Send Fine,,14.25,,complete,,,,,2005-12-22 00:00:00+01:00,, +,,N73576,Insert Fine Notification,,,P,complete,P,,,,2006-01-23 00:00:00+01:00,, +42.5,,N73576,Add penalty,,,,complete,,,,,2006-03-24 00:00:00+01:00,, +,,N73576,Send for Credit Collection,,,,complete,,,,,2007-02-28 00:00:00+01:00,, +39.0,7.0,S163863,Create Fine,NIL,,,complete,,24,,0.0,2012-03-16 00:00:00+01:00,0.0,A +,,S163863,Send Fine,,15.0,,complete,,,,,2012-04-16 00:00:00+02:00,, +,,S163863,Insert Fine Notification,,,P,complete,P,,,,2012-04-26 00:00:00+02:00,, +79.5,,S163863,Add penalty,,,,complete,,,,,2012-06-25 00:00:00+02:00,, +,,S163863,Payment,,,,complete,,,54.0,,2012-06-26 00:00:00+02:00,54.0, +36.0,7.0,S125897,Create Fine,NIL,,,complete,,49,,0.0,2008-07-28 00:00:00+02:00,0.0,A +,,S125897,Payment,,,,complete,,,36.0,,2008-09-12 00:00:00+02:00,36.0, +68.25,158.0,S84154,Create Fine,NIL,,,complete,,32,,0.0,2003-08-15 00:00:00+02:00,0.0,A +,,S84154,Send Fine,,10.0,,complete,,,,,2003-11-10 00:00:00+01:00,, +35.0,157.0,S111357,Create Fine,NIL,,,complete,,824,,0.0,2006-05-05 00:00:00+02:00,0.0,A +,,S111357,Payment,,,,complete,,,35.0,,2006-05-05 00:00:00+02:00,35.0, +39.0,157.0,S181181,Create Fine,NIL,,,complete,,63,,0.0,2012-07-03 00:00:00+02:00,0.0,A +,,S181181,Send Fine,,15.0,,complete,,,,,2012-09-07 00:00:00+02:00,, +,,S181181,Insert Fine Notification,,,P,complete,P,,,,2012-09-17 00:00:00+02:00,, +79.5,,S181181,Add penalty,,,,complete,,,,,2012-11-16 00:00:00+01:00,, +,,S181181,Payment,,,,complete,,,94.5,,2013-01-15 00:00:00+01:00,94.5, +33.6,157.0,N57174,Create Fine,NIL,,,complete,,538,,0.0,2004-07-05 00:00:00+02:00,0.0,A +,,N57174,Send Fine,,11.0,,complete,,,,,2004-11-22 00:00:00+01:00,, +33.6,157.0,N57933,Create Fine,NIL,,,complete,,555,,0.0,2004-07-12 00:00:00+02:00,0.0,A +,,N57933,Send Fine,,11.0,,complete,,,,,2004-11-23 00:00:00+01:00,, +,,N57933,Insert Fine Notification,,,P,complete,P,,,,2004-11-30 00:00:00+01:00,, +,,N57933,Payment,,,,complete,,,33.6,,2004-12-13 00:00:00+01:00,33.6, +68.77,,N57933,Add penalty,,,,complete,,,,,2005-01-29 00:00:00+01:00,, +,,N57933,Payment,,,,complete,,,11.0,,2005-06-21 00:00:00+02:00,44.6, +32.0,142.0,V9832,Create Fine,NIL,,,complete,,25,,0.0,2002-08-27 00:00:00+02:00,0.0,A +,,V9832,Send Fine,,10.0,,complete,,,,,2002-10-25 00:00:00+02:00,, +,,V9832,Insert Fine Notification,,,N,complete,P,,,,2002-10-31 00:00:00+01:00,, +65.5,,V9832,Add penalty,,,,complete,,,,,2002-12-30 00:00:00+01:00,, +,,V9832,Send for Credit Collection,,,,complete,,,,,2004-01-10 00:00:00+01:00,, +32.8,157.0,S58927,Create Fine,NIL,,,complete,,704,,0.0,2001-02-08 00:00:00+01:00,0.0,A +,,S58927,Send Fine,,17.04,,complete,,,,,2001-07-04 00:00:00+02:00,, +,,S58927,Insert Fine Notification,,,N,complete,P,,,,2001-07-30 00:00:00+02:00,, +65.6,,S58927,Add penalty,,,,complete,,,,,2001-09-28 00:00:00+02:00,, +,,S58927,Send for Credit Collection,,,,complete,,,,,2003-01-10 00:00:00+01:00,, +148.0,142.0,V18195,Create Fine,NIL,,,complete,,29,,5.0,2008-12-23 00:00:00+01:00,0.0,A +,,V18195,Send Fine,,26.0,,complete,,,,,2009-05-12 00:00:00+02:00,, +,,V18195,Insert Fine Notification,,,P,complete,P,,,,2009-05-20 00:00:00+02:00,, +,,V18195,Insert Date Appeal to Prefecture,,,,complete,,,,,2009-06-22 00:00:00+02:00,, +297.0,,V18195,Add penalty,,,,complete,,,,,2009-07-19 00:00:00+02:00,, +,,V18195,Send Appeal to Prefecture,NIL,,,complete,,,,,2009-08-10 00:00:00+02:00,, +,,V18195,Receive Result Appeal from Prefecture,,,,complete,,,,,2009-10-08 00:00:00+02:00,, +,,V18195,Notify Result Appeal to Offender,,,,complete,,,,,2009-10-12 00:00:00+02:00,, +,,V18195,Payment,,,,complete,,,174.0,,2009-10-29 00:00:00+01:00,174.0, +35.0,157.0,N74729,Create Fine,NIL,,,complete,,552,,0.0,2005-05-30 00:00:00+02:00,0.0,A +,,N74729,Send Fine,,14.25,,complete,,,,,2005-09-21 00:00:00+02:00,, +,,N74729,Insert Fine Notification,,,P,complete,P,,,,2005-09-30 00:00:00+02:00,, +71.5,,N74729,Add penalty,,,,complete,,,,,2005-11-29 00:00:00+01:00,, +,,N74729,Payment,,,,complete,,,49.25,,2005-12-05 00:00:00+01:00,49.25, +,,N74729,Payment,,,,complete,,,36.5,,2006-01-10 00:00:00+01:00,85.75, +35.0,157.0,N98199,Create Fine,NIL,,,complete,,560,,0.0,2006-06-06 00:00:00+02:00,0.0,A +,,N98199,Payment,,,,complete,,,35.0,,2006-06-15 00:00:00+02:00,35.0, +38.0,157.0,A43990,Create Fine,NIL,,,complete,,541,,0.0,2009-08-11 00:00:00+02:00,0.0,A +,,A43990,Send Fine,,13.5,,complete,,,,,2009-12-17 00:00:00+01:00,, +,,A43990,Insert Fine Notification,,,P,complete,P,,,,2009-12-28 00:00:00+01:00,, +77.5,,A43990,Add penalty,,,,complete,,,,,2010-02-26 00:00:00+01:00,, +,,A43990,Send for Credit Collection,,,,complete,,,,,2012-03-26 00:00:00+02:00,, +71.0,158.0,S115977,Create Fine,NIL,,,complete,,53,,0.0,2006-09-01 00:00:00+02:00,0.0,A +,,S115977,Send Fine,,11.0,,complete,,,,,2006-12-15 00:00:00+01:00,, +,,S115977,Insert Fine Notification,,,P,complete,P,,,,2006-12-30 00:00:00+01:00,, +143.0,,S115977,Add penalty,,,,complete,,,,,2007-02-28 00:00:00+01:00,, +,,S115977,Payment,,,,complete,,,82.0,,2007-04-18 00:00:00+02:00,82.0, +,,S115977,Payment,,,,complete,,,72.0,,2007-05-26 00:00:00+02:00,154.0, +32.8,7.0,S63516,Create Fine,NIL,,,complete,,834,,0.0,2001-07-01 00:00:00+02:00,0.0,A +,,S63516,Send Fine,,6.71,,complete,,,,,2001-08-27 00:00:00+02:00,, +,,S63516,Insert Fine Notification,,,N,complete,P,,,,2001-09-14 00:00:00+02:00,, +65.6,,S63516,Add penalty,,,,complete,,,,,2001-11-13 00:00:00+01:00,, +,,S63516,Send for Credit Collection,,,,complete,,,,,2003-01-10 00:00:00+01:00,, +36.0,157.0,A10466,Create Fine,NIL,,,complete,,558,,0.0,2007-03-19 00:00:00+01:00,0.0,A +,,A10466,Send Fine,,13.0,,complete,,,,,2007-07-17 00:00:00+02:00,, +,,A10466,Insert Fine Notification,,,P,complete,P,,,,2007-07-25 00:00:00+02:00,, +74.0,,A10466,Add penalty,,,,complete,,,,,2007-09-23 00:00:00+02:00,, +,,A10466,Send for Credit Collection,,,,complete,,,,,2009-03-30 00:00:00+02:00,, +24.0,7.0,P990,Create Fine,NIL,,,complete,,538,,0.0,2011-07-16 00:00:00+02:00,0.0,A +,,P990,Send Fine,,15.0,,complete,,,,,2011-09-09 00:00:00+02:00,, +,,P990,Insert Fine Notification,,,P,complete,P,,,,2011-09-23 00:00:00+02:00,, +47.0,,P990,Add penalty,,,,complete,,,,,2011-11-22 00:00:00+01:00,, +,,P990,Payment,,,,complete,,,39.0,,2011-12-31 00:00:00+01:00,39.0, +,,P990,Payment,,,,complete,,,23.0,,2012-11-07 00:00:00+01:00,62.0, +33.6,157.0,N58044,Create Fine,NIL,,,complete,,556,,0.0,2004-07-10 00:00:00+02:00,0.0,A +,,N58044,Send Fine,,16.6,,complete,,,,,2004-11-23 00:00:00+01:00,, +,,N58044,Insert Fine Notification,,,P,complete,P,,,,2004-12-16 00:00:00+01:00,, +68.77,,N58044,Add penalty,,,,complete,,,,,2005-02-14 00:00:00+01:00,, +,,N58044,Send for Credit Collection,,,,complete,,,,,2006-02-28 00:00:00+01:00,, +31.3,157.0,S45359,Create Fine,NIL,,,complete,,33,,0.0,2000-03-15 00:00:00+01:00,0.0,A +,,S45359,Send Fine,,6.46,,complete,,,,,2000-04-16 00:00:00+02:00,, +,,S45359,Insert Fine Notification,,,N,complete,P,,,,2000-05-25 00:00:00+02:00,, +62.59,,S45359,Add penalty,,,,complete,,,,,2000-07-24 00:00:00+02:00,, +,,S45359,Send for Credit Collection,,,,complete,,,,,2002-04-10 00:00:00+02:00,, +36.0,158.0,A16409,Create Fine,NIL,,,complete,,562,,0.0,2007-06-20 00:00:00+02:00,0.0,A +,,A16409,Send Fine,,13.0,,complete,,,,,2007-08-22 00:00:00+02:00,, +,,A16409,Insert Fine Notification,,,P,complete,P,,,,2007-08-30 00:00:00+02:00,, +74.0,,A16409,Add penalty,,,,complete,,,,,2007-10-29 00:00:00+01:00,, +,,A16409,Send for Credit Collection,,,,complete,,,,,2009-03-30 00:00:00+02:00,, +125.19,142.0,V5222,Create Fine,NIL,,,complete,,30,,0.0,2000-06-10 00:00:00+02:00,0.0,A +,,V5222,Send Fine,,11.41,,complete,,,,,2000-07-27 00:00:00+02:00,, +,,V5222,Insert Fine Notification,,,N,complete,P,,,,2000-09-20 00:00:00+02:00,, +250.38,,V5222,Add penalty,,,,complete,,,,,2000-11-19 00:00:00+01:00,, +,,V5222,Send for Credit Collection,,,,complete,,,,,2002-04-10 00:00:00+02:00,, +138.0,146.0,C18702,Create Fine,NIL,,,complete,,40,,6.0,2006-07-14 00:00:00+02:00,0.0,A +,,C18702,Send Fine,,0.0,,complete,,,,,2006-07-14 00:00:00+02:00,, +,,C18702,Insert Fine Notification,,,C,complete,P,,,,2006-07-14 00:00:00+02:00,, +275.0,,C18702,Add penalty,,,,complete,,,,,2006-09-12 00:00:00+02:00,, +,,C18702,Payment,,,,complete,,,275.0,,2007-05-08 00:00:00+02:00,275.0, +33.6,7.0,S93300,Create Fine,NIL,,,complete,,58,,0.0,2004-07-10 00:00:00+02:00,0.0,A +,,S93300,Send Fine,,11.0,,complete,,,,,2004-11-10 00:00:00+01:00,, +,,S93300,Insert Fine Notification,,,P,complete,P,,,,2004-11-18 00:00:00+01:00,, +68.77,,S93300,Add penalty,,,,complete,,,,,2005-01-17 00:00:00+01:00,, +,,S93300,Send for Credit Collection,,,,complete,,,,,2006-02-28 00:00:00+01:00,, +35.0,157.0,N76661,Create Fine,NIL,,,complete,,557,,0.0,2005-07-10 00:00:00+02:00,0.0,A +,,N76661,Send Fine,,11.0,,complete,,,,,2005-12-02 00:00:00+01:00,, +35.0,7.0,A182,Create Fine,NIL,,,complete,,541,,0.0,2006-08-06 00:00:00+02:00,0.0,A +,,A182,Send Fine,,11.0,,complete,,,,,2006-12-13 00:00:00+01:00,, +,,A182,Insert Fine Notification,,,P,complete,P,,,,2007-01-05 00:00:00+01:00,, +71.5,,A182,Add penalty,,,,complete,,,,,2007-03-06 00:00:00+01:00,, +,,A182,Payment,,,,complete,,,82.5,,2007-11-19 00:00:00+01:00,82.5, +39.0,7.0,C22944,Create Fine,NIL,,,complete,,63,,0.0,2012-04-21 00:00:00+02:00,0.0,A +,,C22944,Send Fine,,0.0,,complete,,,,,2012-04-21 00:00:00+02:00,, +,,C22944,Insert Fine Notification,,,C,complete,P,,,,2012-04-21 00:00:00+02:00,, +79.5,,C22944,Add penalty,,,,complete,,,,,2012-06-20 00:00:00+02:00,, +,,C22944,Payment,,,,complete,,,79.5,,2012-10-23 00:00:00+02:00,79.5, +21.0,7.0,N91722,Create Fine,NIL,,,complete,,537,,0.0,2006-04-18 00:00:00+02:00,0.0,A +,,N91722,Send Fine,,11.0,,complete,,,,,2006-08-17 00:00:00+02:00,, +,,N91722,Insert Fine Notification,,,P,complete,P,,,,2006-08-25 00:00:00+02:00,, +42.5,,N91722,Add penalty,,,,complete,,,,,2006-10-24 00:00:00+02:00,, +,,N91722,Payment,,,,complete,,,53.5,,2007-11-28 00:00:00+01:00,53.5, +80.0,158.0,S173060,Create Fine,NIL,,,complete,,848,,0.0,2011-08-25 00:00:00+02:00,0.0,A +,,S173060,Send Fine,,15.0,,complete,,,,,2011-10-24 00:00:00+02:00,, +,,S173060,Insert Fine Notification,,,P,complete,P,,,,2011-11-21 00:00:00+01:00,, +159.0,,S173060,Add penalty,,,,complete,,,,,2012-01-20 00:00:00+01:00,, +,,S173060,Payment,,,,complete,,,174.0,,2012-11-29 00:00:00+01:00,174.0, +32.0,158.0,S75551,Create Fine,NIL,,,complete,,821,,0.0,2002-07-21 00:00:00+02:00,0.0,A +,,S75551,Send Fine,,15.16,,complete,,,,,2002-09-05 00:00:00+02:00,, +,,S75551,Insert Fine Notification,,,N,complete,P,,,,2002-09-20 00:00:00+02:00,, +65.5,,S75551,Add penalty,,,,complete,,,,,2002-11-19 00:00:00+01:00,, +,,S75551,Send for Credit Collection,,,,complete,,,,,2004-01-10 00:00:00+01:00,, +137.55,142.0,V11342,Create Fine,NIL,,,complete,,30,,0.0,2003-04-01 00:00:00+02:00,0.0,A +,,V11342,Send Fine,,10.0,,complete,,,,,2003-05-20 00:00:00+02:00,, +35.0,157.0,N79305,Create Fine,NIL,,,complete,,558,,0.0,2005-04-07 00:00:00+02:00,0.0,A +,,N79305,Payment,,,,complete,,,35.0,,2005-04-12 00:00:00+02:00,35.0, +38.0,7.0,S139983,Create Fine,NIL,,,complete,,49,,0.0,2009-07-11 00:00:00+02:00,0.0,A +,,S139983,Payment,,,,complete,,,38.0,,2009-07-15 00:00:00+02:00,38.0, +39.0,7.0,S171178,Create Fine,NIL,,,complete,,26,,0.0,2011-07-24 00:00:00+02:00,0.0,A +,,S171178,Payment,,,,complete,,,39.0,,2011-07-24 00:00:00+02:00,39.0, +36.0,157.0,A14816,Create Fine,NIL,,,complete,,559,,0.0,2007-07-02 00:00:00+02:00,0.0,A +,,A14816,Send Fine,,13.0,,complete,,,,,2007-09-29 00:00:00+02:00,, +,,A14816,Insert Fine Notification,,,P,complete,P,,,,2007-10-12 00:00:00+02:00,, +74.0,,A14816,Add penalty,,,,complete,,,,,2007-12-11 00:00:00+01:00,, +,,A14816,Send for Credit Collection,,,,complete,,,,,2009-03-30 00:00:00+02:00,, +22.0,181.0,S132229,Create Fine,NIL,,,complete,,56,,0.0,2008-12-23 00:00:00+01:00,0.0,A +,,S132229,Send Fine,,0.0,,complete,,,,,2009-01-28 00:00:00+01:00,, +,,S132229,Insert Fine Notification,,,,complete,P,,,,2009-01-28 00:00:00+01:00,, +44.0,,S132229,Add penalty,,,,complete,,,,,2009-03-29 00:00:00+01:00,, +,,S132229,Send for Credit Collection,,,,complete,,,,,2010-10-15 00:00:00+02:00,, +32.8,157.0,N33329,Create Fine,I,,,complete,,538,,0.0,2001-04-02 00:00:00+02:00,0.0,A +,,N33329,Send Fine,,6.71,,complete,,,,,2001-06-07 00:00:00+02:00,, +33.6,7.0,S83371,Create Fine,NIL,,,complete,,52,,0.0,2003-08-15 00:00:00+02:00,0.0,A +,,S83371,Payment,,,,complete,,,33.6,,2003-08-18 00:00:00+02:00,33.6, +21.0,7.0,N74006,Create Fine,NIL,,,complete,,555,,0.0,2005-05-10 00:00:00+02:00,0.0,A +,,N74006,Send Fine,,14.25,,complete,,,,,2005-09-17 00:00:00+02:00,, +,,N74006,Insert Fine Notification,,,P,complete,P,,,,2005-10-05 00:00:00+02:00,, +42.5,,N74006,Add penalty,,,,complete,,,,,2005-12-04 00:00:00+01:00,, +,,N74006,Send for Credit Collection,,,,complete,,,,,2007-02-28 00:00:00+01:00,, +31.3,157.0,N29297,Create Fine,NIL,,,complete,,536,,0.0,2000-09-28 00:00:00+02:00,0.0,A +,,N29297,Send Fine,,6.71,,complete,,,,,2000-11-10 00:00:00+01:00,, +,,N29297,Insert Fine Notification,,,N,complete,P,,,,2000-12-02 00:00:00+01:00,, +62.59,,N29297,Add penalty,,,,complete,,,,,2001-01-31 00:00:00+01:00,, +,,N29297,Send for Credit Collection,,,,complete,,,,,2002-04-10 00:00:00+02:00,, +32.0,157.0,S77408,Create Fine,NIL,,,complete,,820,,0.0,2002-08-19 00:00:00+02:00,0.0,A +,,S77408,Send Fine,,10.0,,complete,,,,,2002-10-25 00:00:00+02:00,, +,,S77408,Insert Fine Notification,,,N,complete,P,,,,2002-10-31 00:00:00+01:00,, +65.5,,S77408,Add penalty,,,,complete,,,,,2002-12-30 00:00:00+01:00,, +,,S77408,Send for Credit Collection,,,,complete,,,,,2004-01-10 00:00:00+01:00,, +35.0,157.0,N78482,Create Fine,NIL,,,complete,,536,,0.0,2005-09-08 00:00:00+02:00,0.0,A +,,N78482,Send Fine,,11.0,,complete,,,,,2005-12-22 00:00:00+01:00,, +35.0,157.0,N74075,Create Fine,NIL,,,complete,,555,,0.0,2005-05-13 00:00:00+02:00,0.0,A +,,N74075,Payment,,,,complete,,,35.0,,2005-05-19 00:00:00+02:00,35.0, +22.0,7.0,A19204,Create Fine,NIL,,,complete,,560,,0.0,2007-06-08 00:00:00+02:00,0.0,A +,,A19204,Send Fine,,13.0,,complete,,,,,2007-09-13 00:00:00+02:00,, +,,A19204,Insert Fine Notification,,,P,complete,P,,,,2007-10-03 00:00:00+02:00,, +44.0,,A19204,Add penalty,,,,complete,,,,,2007-12-02 00:00:00+01:00,, +,,A19204,Send for Credit Collection,,,,complete,,,,,2009-03-30 00:00:00+02:00,, +35.0,157.0,N77682,Create Fine,NIL,,,complete,,541,,0.0,2005-03-27 00:00:00+01:00,0.0,A +,,N77682,Send Fine,,11.0,,complete,,,,,2005-07-23 00:00:00+02:00,, +78.0,158.0,S153533,Create Fine,NIL,,,complete,,850,,0.0,2010-06-29 00:00:00+02:00,0.0,A +,,S153533,Payment,,,,complete,,,78.0,,2010-07-05 00:00:00+02:00,78.0, +32.8,7.0,S61365,Create Fine,NIL,,,complete,,818,,0.0,2001-05-11 00:00:00+02:00,0.0,A +,,S61365,Send Fine,,11.88,,complete,,,,,2001-07-04 00:00:00+02:00,, +,,S61365,Payment,,,,complete,,,44.68,,2001-07-23 00:00:00+02:00,44.68, +38.0,7.0,S150741,Create Fine,NIL,,,complete,,850,,0.0,2010-05-03 00:00:00+02:00,0.0,A +,,S150741,Send Fine,,13.5,,complete,,,,,2010-08-20 00:00:00+02:00,, +,,S150741,Insert Fine Notification,,,P,complete,P,,,,2010-09-06 00:00:00+02:00,, +77.5,,S150741,Add penalty,,,,complete,,,,,2010-11-05 00:00:00+01:00,, +,,S150741,Send for Credit Collection,,,,complete,,,,,2012-03-26 00:00:00+02:00,, +33.6,157.0,N47046,Create Fine,NIL,,,complete,,538,,0.0,2003-01-22 00:00:00+01:00,0.0,A +,,N47046,Send Fine,,15.16,,complete,,,,,2003-05-20 00:00:00+02:00,, +,,N47046,Insert Fine Notification,,,N,complete,P,,,,2003-05-28 00:00:00+02:00,, +68.77,,N47046,Add penalty,,,,complete,,,,,2003-07-27 00:00:00+02:00,, +,,N47046,Payment,,,,complete,,,53.6,,2003-08-21 00:00:00+02:00,53.6, +,,N47046,Payment,,,,complete,,,30.33,,2003-10-22 00:00:00+02:00,83.93, +32.8,157.0,N36957,Create Fine,NIL,,,complete,,537,,0.0,2001-10-02 00:00:00+02:00,0.0,A +,,N36957,Payment,,,,complete,,,32.8,,2001-10-05 00:00:00+02:00,32.8, +,,N36957,Send Fine,,6.71,,complete,,,,,2001-11-24 00:00:00+01:00,, +36.0,157.0,A26153,Create Fine,NIL,,,complete,,537,,0.0,2008-01-24 00:00:00+01:00,0.0,A +,,A26153,Send Fine,,13.0,,complete,,,,,2008-03-01 00:00:00+01:00,, +36.0,157.0,S126332,Create Fine,NIL,,,complete,,26,,0.0,2008-07-20 00:00:00+02:00,0.0,A +,,S126332,Payment,,,,complete,,,36.0,,2008-08-01 00:00:00+02:00,36.0, +32.8,171.0,S70308,Create Fine,NIL,,,complete,,820,,0.0,2001-09-26 00:00:00+02:00,0.0,M +,,S70308,Send Fine,,11.87,,complete,,,,,2001-12-22 00:00:00+01:00,, +,,S70308,Insert Fine Notification,,,N,complete,P,,,,2002-01-11 00:00:00+01:00,, +65.6,,S70308,Add penalty,,,,complete,,,,,2002-03-12 00:00:00+01:00,, +,,S70308,Send for Credit Collection,,,,complete,,,,,2003-01-10 00:00:00+01:00,, +36.0,157.0,S125404,Create Fine,NIL,,,complete,,50,,0.0,2008-06-12 00:00:00+02:00,0.0,A +,,S125404,Send Fine,,13.0,,complete,,,,,2008-07-30 00:00:00+02:00,, +,,S125404,Insert Fine Notification,,,P,complete,P,,,,2008-08-06 00:00:00+02:00,, +74.0,,S125404,Add penalty,,,,complete,,,,,2008-10-05 00:00:00+02:00,, +,,S125404,Payment,,,,complete,,,87.0,,2009-07-15 00:00:00+02:00,87.0, +32.8,158.0,S68119,Create Fine,NIL,,,complete,,16,,0.0,2001-12-13 00:00:00+01:00,0.0,A +,,S68119,Send Fine,,6.71,,complete,,,,,2001-12-31 00:00:00+01:00,, +,,S68119,Payment,,,,complete,,,39.51,,2002-01-15 00:00:00+01:00,39.51, +36.0,157.0,A18477,Create Fine,NIL,,,complete,,556,,0.0,2007-07-12 00:00:00+02:00,0.0,A +,,A18477,Send Fine,,13.0,,complete,,,,,2007-10-31 00:00:00+01:00,, +,,A18477,Insert Fine Notification,,,P,complete,P,,,,2007-11-19 00:00:00+01:00,, +74.0,,A18477,Add penalty,,,,complete,,,,,2008-01-18 00:00:00+01:00,, +,,A18477,Payment,,,,complete,,,87.0,,2008-09-18 00:00:00+02:00,87.0, +36.0,157.0,S125452,Create Fine,NIL,,,complete,,53,,0.0,2008-06-13 00:00:00+02:00,0.0,A +,,S125452,Payment,,,,complete,,,36.0,,2008-07-19 00:00:00+02:00,36.0, +125.19,142.0,V6627,Create Fine,NIL,,,complete,,36,,0.0,2000-09-05 00:00:00+02:00,0.0,A +,,V6627,Send Fine,,6.71,,complete,,,,,2000-11-10 00:00:00+01:00,, +,,V6627,Insert Fine Notification,,,N,complete,P,,,,2000-12-19 00:00:00+01:00,, +250.38,,V6627,Add penalty,,,,complete,,,,,2001-02-17 00:00:00+01:00,, +,,V6627,Send for Credit Collection,,,,complete,,,,,2002-04-10 00:00:00+02:00,, diff --git a/pm4py/tests/input_data/roadtraffic100traces.xes b/pm4py/tests/input_data/roadtraffic100traces.xes new file mode 100644 index 0000000000000000000000000000000000000000..65dd00b1d5bea280ecc5a0eaa0d6c1373a9996c0 --- /dev/null +++ b/pm4py/tests/input_data/roadtraffic100traces.xes @@ -0,0 +1,4555 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/roadtraffic50traces.xes b/pm4py/tests/input_data/roadtraffic50traces.xes new file mode 100644 index 0000000000000000000000000000000000000000..79f3b0d40f9e7a174f27a474ccec7daf91e7e72c --- /dev/null +++ b/pm4py/tests/input_data/roadtraffic50traces.xes @@ -0,0 +1,1700 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/running-example-transformed.csv b/pm4py/tests/input_data/running-example-transformed.csv new file mode 100644 index 0000000000000000000000000000000000000000..bb4805673cdd3cbae98f80a07433f281ab6cde8d --- /dev/null +++ b/pm4py/tests/input_data/running-example-transformed.csv @@ -0,0 +1,43 @@ +Activity,Timestamp,CaseID,Resource +register request,2010-12-30 10:02:00+00:00,1,Pete +examine thoroughly,2010-12-31 09:06:00+00:00,1,Sue +check ticket,2011-01-05 14:12:00+00:00,1,Mike +decide,2011-01-06 10:18:00+00:00,1,Sara +reject request,2011-01-07 13:24:00+00:00,1,Pete +register request,2010-12-30 10:32:00+00:00,2,Mike +check ticket,2010-12-30 11:12:00+00:00,2,Mike +examine casually,2010-12-30 13:16:00+00:00,2,Sean +decide,2011-01-05 10:22:00+00:00,2,Sara +pay compensation,2011-01-08 11:05:00+00:00,2,Ellen +register request,2010-12-30 13:32:00+00:00,3,Pete +examine casually,2010-12-30 14:06:00+00:00,3,Mike +check ticket,2010-12-30 15:34:00+00:00,3,Ellen +decide,2011-01-06 08:18:00+00:00,3,Sara +reinitiate request,2011-01-06 11:18:00+00:00,3,Sara +examine thoroughly,2011-01-06 12:06:00+00:00,3,Sean +check ticket,2011-01-08 10:43:00+00:00,3,Pete +decide,2011-01-09 08:55:00+00:00,3,Sara +pay compensation,2011-01-15 09:45:00+00:00,3,Ellen +register request,2011-01-06 14:02:00+00:00,4,Pete +check ticket,2011-01-07 11:06:00+00:00,4,Mike +examine thoroughly,2011-01-08 13:43:00+00:00,4,Sean +decide,2011-01-09 11:02:00+00:00,4,Sara +reject request,2011-01-12 14:44:00+00:00,4,Ellen +register request,2011-01-06 08:02:00+00:00,5,Ellen +examine casually,2011-01-07 09:16:00+00:00,5,Mike +check ticket,2011-01-08 10:22:00+00:00,5,Pete +decide,2011-01-10 12:28:00+00:00,5,Sara +reinitiate request,2011-01-11 15:18:00+00:00,5,Sara +check ticket,2011-01-14 13:33:00+00:00,5,Ellen +examine casually,2011-01-16 14:50:00+00:00,5,Mike +decide,2011-01-19 10:18:00+00:00,5,Sara +reinitiate request,2011-01-20 11:48:00+00:00,5,Sara +examine casually,2011-01-21 08:06:00+00:00,5,Sue +check ticket,2011-01-21 10:34:00+00:00,5,Pete +decide,2011-01-23 12:12:00+00:00,5,Sara +reject request,2011-01-24 13:56:00+00:00,5,Mike +register request,2011-01-06 14:02:00+00:00,6,Mike +examine casually,2011-01-06 15:06:00+00:00,6,Ellen +check ticket,2011-01-07 15:22:00+00:00,6,Mike +decide,2011-01-07 15:52:00+00:00,6,Sara +pay compensation,2011-01-16 10:47:00+00:00,6,Mike diff --git a/pm4py/tests/input_data/running-example.bpmn b/pm4py/tests/input_data/running-example.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..76646ecbac277c7c784359bfa3e3ea97f704d615 --- /dev/null +++ b/pm4py/tests/input_data/running-example.bpmn @@ -0,0 +1,300 @@ + + + + + idd401aa5b-8c47-4ee7-a629-375e3f4270b4 + + + id7e12c7e5-b2a9-48b6-ad7d-2b94afd8a4bc + idd125eb77-5023-4fa5-ae39-13f0f03e14f3 + id7a483afa-5263-43fd-a30d-02039c582849 + + + idf3264316-df43-4e89-96d6-af7e56e8f3d3 + id0366387f-beb2-43f4-b458-8ad094403e5c + id20df78ac-619b-420f-b4a8-5bdbd8515f4c + + + idb737272a-ad35-412c-84bb-fe615b4925d1 + iddda531cb-be39-4b3a-bcaf-f9cd8a399c6f + idd12c27b4-41a6-4c2c-8c22-96e4d623f66b + + + id1cfe480f-8d47-4eff-b6c6-8880f57cbc88 + id7e12c7e5-b2a9-48b6-ad7d-2b94afd8a4bc + + + id9ffbb3dc-348f-4569-9d06-2d94ff80957d + id76bb5667-a4d1-4649-b9f1-5bfd6288b8be + + + id70cba5cf-d9af-4bd9-bc9f-7906c7b9b8d8 + id394604e4-1b8f-4346-b194-39938251ad53 + + + idf741b33d-c107-497b-913b-1a38e148055e + id0366387f-beb2-43f4-b458-8ad094403e5c + + + id558b31b1-e33c-4846-8b8f-61be0e142a3b + id956cfd06-9c43-470d-aed0-2f7fc30a1af7 + idd401aa5b-8c47-4ee7-a629-375e3f4270b4 + + + ide522380c-6a5f-4483-b6b2-13869776e4d5 + idf3264316-df43-4e89-96d6-af7e56e8f3d3 + + + id37d193f5-4ea8-4878-89d3-a8bf304b282d + ide522380c-6a5f-4483-b6b2-13869776e4d5 + idb737272a-ad35-412c-84bb-fe615b4925d1 + + + idf741b33d-c107-497b-913b-1a38e148055e + + + id02dba9bf-d791-44dd-8ce3-391b0ef769f3 + id70cba5cf-d9af-4bd9-bc9f-7906c7b9b8d8 + id9ffbb3dc-348f-4569-9d06-2d94ff80957d + + + idd12c27b4-41a6-4c2c-8c22-96e4d623f66b + id956cfd06-9c43-470d-aed0-2f7fc30a1af7 + + + iddda531cb-be39-4b3a-bcaf-f9cd8a399c6f + id558b31b1-e33c-4846-8b8f-61be0e142a3b + + + id394604e4-1b8f-4346-b194-39938251ad53 + id76bb5667-a4d1-4649-b9f1-5bfd6288b8be + idd125eb77-5023-4fa5-ae39-13f0f03e14f3 + + + id7a483afa-5263-43fd-a30d-02039c582849 + id37d193f5-4ea8-4878-89d3-a8bf304b282d + + + id20df78ac-619b-420f-b4a8-5bdbd8515f4c + id1cfe480f-8d47-4eff-b6c6-8880f57cbc88 + id02dba9bf-d791-44dd-8ce3-391b0ef769f3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/running-example.csv b/pm4py/tests/input_data/running-example.csv new file mode 100644 index 0000000000000000000000000000000000000000..265287a669b4da30740fdf7ae2c4f6e54bf01132 --- /dev/null +++ b/pm4py/tests/input_data/running-example.csv @@ -0,0 +1,43 @@ +,concept:name,org:resource,time:timestamp,Activity,Resource,Costs,case:concept:name,case:creator +0,register request,Pete,2010-12-30 14:32:00+01:00,register request,Pete,50,3,Fluxicon Nitro +1,examine casually,Mike,2010-12-30 15:06:00+01:00,examine casually,Mike,400,3,Fluxicon Nitro +2,check ticket,Ellen,2010-12-30 16:34:00+01:00,check ticket,Ellen,100,3,Fluxicon Nitro +3,decide,Sara,2011-01-06 09:18:00+01:00,decide,Sara,200,3,Fluxicon Nitro +4,reinitiate request,Sara,2011-01-06 12:18:00+01:00,reinitiate request,Sara,200,3,Fluxicon Nitro +5,examine thoroughly,Sean,2011-01-06 13:06:00+01:00,examine thoroughly,Sean,400,3,Fluxicon Nitro +6,check ticket,Pete,2011-01-08 11:43:00+01:00,check ticket,Pete,100,3,Fluxicon Nitro +7,decide,Sara,2011-01-09 09:55:00+01:00,decide,Sara,200,3,Fluxicon Nitro +8,pay compensation,Ellen,2011-01-15 10:45:00+01:00,pay compensation,Ellen,200,3,Fluxicon Nitro +9,register request,Mike,2010-12-30 11:32:00+01:00,register request,Mike,50,2,Fluxicon Nitro +10,check ticket,Mike,2010-12-30 12:12:00+01:00,check ticket,Mike,100,2,Fluxicon Nitro +11,examine casually,Sean,2010-12-30 14:16:00+01:00,examine casually,Sean,400,2,Fluxicon Nitro +12,decide,Sara,2011-01-05 11:22:00+01:00,decide,Sara,200,2,Fluxicon Nitro +13,pay compensation,Ellen,2011-01-08 12:05:00+01:00,pay compensation,Ellen,200,2,Fluxicon Nitro +14,register request,Pete,2010-12-30 11:02:00+01:00,register request,Pete,50,1,Fluxicon Nitro +15,examine thoroughly,Sue,2010-12-31 10:06:00+01:00,examine thoroughly,Sue,400,1,Fluxicon Nitro +16,check ticket,Mike,2011-01-05 15:12:00+01:00,check ticket,Mike,100,1,Fluxicon Nitro +17,decide,Sara,2011-01-06 11:18:00+01:00,decide,Sara,200,1,Fluxicon Nitro +18,reject request,Pete,2011-01-07 14:24:00+01:00,reject request,Pete,200,1,Fluxicon Nitro +19,register request,Mike,2011-01-06 15:02:00+01:00,register request,Mike,50,6,Fluxicon Nitro +20,examine casually,Ellen,2011-01-06 16:06:00+01:00,examine casually,Ellen,400,6,Fluxicon Nitro +21,check ticket,Mike,2011-01-07 16:22:00+01:00,check ticket,Mike,100,6,Fluxicon Nitro +22,decide,Sara,2011-01-07 16:52:00+01:00,decide,Sara,200,6,Fluxicon Nitro +23,pay compensation,Mike,2011-01-16 11:47:00+01:00,pay compensation,Mike,200,6,Fluxicon Nitro +24,register request,Ellen,2011-01-06 09:02:00+01:00,register request,Ellen,50,5,Fluxicon Nitro +25,examine casually,Mike,2011-01-07 10:16:00+01:00,examine casually,Mike,400,5,Fluxicon Nitro +26,check ticket,Pete,2011-01-08 11:22:00+01:00,check ticket,Pete,100,5,Fluxicon Nitro +27,decide,Sara,2011-01-10 13:28:00+01:00,decide,Sara,200,5,Fluxicon Nitro +28,reinitiate request,Sara,2011-01-11 16:18:00+01:00,reinitiate request,Sara,200,5,Fluxicon Nitro +29,check ticket,Ellen,2011-01-14 14:33:00+01:00,check ticket,Ellen,100,5,Fluxicon Nitro +30,examine casually,Mike,2011-01-16 15:50:00+01:00,examine casually,Mike,400,5,Fluxicon Nitro +31,decide,Sara,2011-01-19 11:18:00+01:00,decide,Sara,200,5,Fluxicon Nitro +32,reinitiate request,Sara,2011-01-20 12:48:00+01:00,reinitiate request,Sara,200,5,Fluxicon Nitro +33,examine casually,Sue,2011-01-21 09:06:00+01:00,examine casually,Sue,400,5,Fluxicon Nitro +34,check ticket,Pete,2011-01-21 11:34:00+01:00,check ticket,Pete,100,5,Fluxicon Nitro +35,decide,Sara,2011-01-23 13:12:00+01:00,decide,Sara,200,5,Fluxicon Nitro +36,reject request,Mike,2011-01-24 14:56:00+01:00,reject request,Mike,200,5,Fluxicon Nitro +37,register request,Pete,2011-01-06 15:02:00+01:00,register request,Pete,50,4,Fluxicon Nitro +38,check ticket,Mike,2011-01-07 12:06:00+01:00,check ticket,Mike,100,4,Fluxicon Nitro +39,examine thoroughly,Sean,2011-01-08 14:43:00+01:00,examine thoroughly,Sean,400,4,Fluxicon Nitro +40,decide,Sara,2011-01-09 12:02:00+01:00,decide,Sara,200,4,Fluxicon Nitro +41,reject request,Ellen,2011-01-12 15:44:00+01:00,reject request,Ellen,200,4,Fluxicon Nitro diff --git a/pm4py/tests/input_data/running-example.dfg b/pm4py/tests/input_data/running-example.dfg new file mode 100644 index 0000000000000000000000000000000000000000..1eafd804bb1297f495ffb3c55fe75b5868b7316a --- /dev/null +++ b/pm4py/tests/input_data/running-example.dfg @@ -0,0 +1,30 @@ +8 +reinitiate request +examine casually +check ticket +register request +reject request +pay compensation +decide +examine thoroughly +1 +3x6 +2 +5x3 +4x3 +3>1x3 +1>2x4 +2>6x6 +6>0x3 +0>7x1 +7>2x2 +6>5x3 +3>2x2 +2>1x2 +1>6x2 +3>7x1 +6>4x3 +0>2x1 +0>1x1 +2>7x1 +7>6x1 diff --git a/pm4py/tests/input_data/running-example.parquet b/pm4py/tests/input_data/running-example.parquet new file mode 100644 index 0000000000000000000000000000000000000000..af2258c2212987abf291312a5f22ea2dd6febd49 --- /dev/null +++ b/pm4py/tests/input_data/running-example.parquet @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:098120186a7fe437cc36b3e6e0a35469d90d2f8229650f3f0b452c71dcc62068 +size 2972 diff --git a/pm4py/tests/input_data/running-example.pnml b/pm4py/tests/input_data/running-example.pnml new file mode 100644 index 0000000000000000000000000000000000000000..4fb9a247fe9bd36c5df12b5c094c7ae20a37ad22 --- /dev/null +++ b/pm4py/tests/input_data/running-example.pnml @@ -0,0 +1,2 @@ + +Petri netsource 451sink 46sink 47sink 48middle 49source 51sink 52source 53sink 54register requesttau splitcheck ticketexamine casuallyexamine thoroughlydecidereinitiate requesttau from treepay compensationreject request1normal1normal1normal1normal1normal1normal1normal1normal1normal1normalsink 52 -[1]-> decidenormal1normalsink 54 -[1]-> decidenormal1normal1normal1normal1normal1normal1normal1normal1normal1normal010000000 \ No newline at end of file diff --git a/pm4py/tests/input_data/running-example.ptml b/pm4py/tests/input_data/running-example.ptml new file mode 100644 index 0000000000000000000000000000000000000000..515b1db12d2d2e64ba4b465b2571ecf9ab79518c --- /dev/null +++ b/pm4py/tests/input_data/running-example.ptml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/running-example.xes b/pm4py/tests/input_data/running-example.xes new file mode 100644 index 0000000000000000000000000000000000000000..3b00e25e92b35b39df7085dca518a98f8d58ee54 --- /dev/null +++ b/pm4py/tests/input_data/running-example.xes @@ -0,0 +1,380 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/stochastic_running_example.pnml b/pm4py/tests/input_data/stochastic_running_example.pnml new file mode 100644 index 0000000000000000000000000000000000000000..009e4ae527afd0c3308908ac2b0bca0ef802a099 --- /dev/null +++ b/pm4py/tests/input_data/stochastic_running_example.pnml @@ -0,0 +1,252 @@ + + + + + + + p_6 + + + + + p_3 + + + + + source + + + 1 + + + + + p_7 + + + + + p_4 + + + + + sink + + + + + p_8 + + + + + p_5 + + + + + reinitiate request + + + UNIFORM + 10799.99988674513;85800.00016545928 + 0 + false + 0.3333333333333333 + + + + + register request + + + IMMEDIATE + 1 + false + 1.0 + + + + + examine casually + + + EXPONENTIAL + 1.69176114501161e-05 + 0 + false + 0.5 + + + + + pay compensation + + + UNIFORM + 261779.99994853878;497520.0000676266 + 0 + false + 0.3333333333333333 + + + + + decide + + + UNIFORM + 1799.9944315511989;576840.0224847647 + 0 + false + 0.75 + + + + + check ticket + + + EXPONENTIAL + 6.5853843650133505e-06 + 0 + false + 0.75 + + + + + examine thoroughly + + + UNIFORM + 2879.9999331715608;92940.00006706228 + 0 + false + 0.25 + + + + + loop_3 + + + IMMEDIATE + 1 + true + 0.25 + + + + + + tau_1 + + + IMMEDIATE + 1 + true + 1.0 + + + + + + skip_7 + + + IMMEDIATE + 1 + true + 0.6666666666666666 + + + + + + reject request + + + UNIFORM + 92639.99999843462;203432.0460426052 + 0 + false + 0.3333333333333333 + + + + + skip_5 + + + IMMEDIATE + 1 + true + 0.25 + + + + + + skip_4 + + + IMMEDIATE + 1 + true + 0.25 + + + + + + loop_2 + + + IMMEDIATE + 1 + true + 0.3333333333333333 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + diff --git a/pm4py/tests/input_data/synthetic_logs/a12/a12.pnml b/pm4py/tests/input_data/synthetic_logs/a12/a12.pnml new file mode 100644 index 0000000000000000000000000000000000000000..fae5c6b03d4390535e221f741db511a939826b9e --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a12/a12.pnml @@ -0,0 +1,2 @@ + +Petri netsource 11sink 2sink 3sink 4sink 5sink 6source 7sink 8sink 9source 10sink 11sink 12sink 13sink 14Sftau splittau joingihkbdcejE1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal01000000000000 \ No newline at end of file diff --git a/pm4py/tests/input_data/synthetic_logs/a12/a12.ptml b/pm4py/tests/input_data/synthetic_logs/a12/a12.ptml new file mode 100644 index 0000000000000000000000000000000000000000..bb9e53500a841696beca533de6910046c6879ef5 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a12/a12.ptml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/synthetic_logs/a12/a12f0n00.xes.gz b/pm4py/tests/input_data/synthetic_logs/a12/a12f0n00.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..691dbd6f065013c3fa9c018787ea42efe6b40063 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a12/a12f0n00.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:338403ac6c1cca52a173dac3c1f3d7a62f9749ac21dca16b588a55ac4a272e20 +size 9125 diff --git a/pm4py/tests/input_data/synthetic_logs/a12/a12f0n05.xes.gz b/pm4py/tests/input_data/synthetic_logs/a12/a12f0n05.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..da6d0834e3b503f6bacde8dcb37ed22ca47da3de --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a12/a12f0n05.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c5022bbae5c11ec4ccf190fae2b04ac324e966dae4229e55859c9e71da1ca75 +size 9225 diff --git a/pm4py/tests/input_data/synthetic_logs/a12/a12f0n10.xes.gz b/pm4py/tests/input_data/synthetic_logs/a12/a12f0n10.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..696e5f91c43581846de7f04562f8bc9d74de967a --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a12/a12f0n10.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c7d9499f12a3d115fd32931827013e05a5e99fc012188da2355669666e191a8 +size 9326 diff --git a/pm4py/tests/input_data/synthetic_logs/a12/a12f0n20.xes.gz b/pm4py/tests/input_data/synthetic_logs/a12/a12f0n20.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..a4d03e3a12ee0dae6bd3f5feb5fabe8208fdcece --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a12/a12f0n20.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:389a8d499bd5b740a07fb29f929b6ce0a889244f10cf170dbc2241ed691fff87 +size 9588 diff --git a/pm4py/tests/input_data/synthetic_logs/a12/a12f0n50.xes.gz b/pm4py/tests/input_data/synthetic_logs/a12/a12f0n50.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..91f630fc95b62c7257ad0286d30243e7e2f1913b --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a12/a12f0n50.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b505a15097e2b482a2dbd958e241b9749a6c3044ece200446cc8accfe970f17 +size 9941 diff --git a/pm4py/tests/input_data/synthetic_logs/a22/a22.pnml b/pm4py/tests/input_data/synthetic_logs/a22/a22.pnml new file mode 100644 index 0000000000000000000000000000000000000000..d98a4a0270baf12f96e523b3c0147bc790d9767b --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a22/a22.pnml @@ -0,0 +1,2 @@ + +5374b8b0-7866-4ed1-ad91-d7e5f1c097a5source 11sink 2sink 3sink 4sink 5source 6sink 7sink 8middle 9sink 10sink 11sink 12sink 13sink 14sink 15source 16sink 17source 18sink 19middle 20source 21sink 22sink 23source 24sink 25source 26sink 27sink 28Sptau splittau joinanobcedjftau splittau joinhgitau from treekmtau from treertau splittau joinstvuE1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal0100000000000000000000000000 \ No newline at end of file diff --git a/pm4py/tests/input_data/synthetic_logs/a22/a22.ptml b/pm4py/tests/input_data/synthetic_logs/a22/a22.ptml new file mode 100644 index 0000000000000000000000000000000000000000..1d0ecfa79963904f98e10467ded1cfdc11496f87 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a22/a22.ptml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/synthetic_logs/a22/a22f0n00.xes.gz b/pm4py/tests/input_data/synthetic_logs/a22/a22f0n00.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..a3f9b9b447ad6d788632f697bcd203444e07f6df --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a22/a22f0n00.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:414c621aa3466781b45645146fa34237e16b26110159f8c37e58ca62a25da1f3 +size 28013 diff --git a/pm4py/tests/input_data/synthetic_logs/a22/a22f0n05.xes.gz b/pm4py/tests/input_data/synthetic_logs/a22/a22f0n05.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..7da8f5fc08d689bd8455c4feeb24395a943c8b6a --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a22/a22f0n05.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4df620e871cc2b5467b7c23eac3b106b340b79f168cc4d2ca9b7fc216ad194d +size 27980 diff --git a/pm4py/tests/input_data/synthetic_logs/a22/a22f0n10.xes.gz b/pm4py/tests/input_data/synthetic_logs/a22/a22f0n10.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..ca711b806843de292c7195baf579d153ccae0db5 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a22/a22f0n10.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4397f5fc8736aaecc3d155d884747928ad1baefda71a773596d94f3859ed8a1b +size 27911 diff --git a/pm4py/tests/input_data/synthetic_logs/a22/a22f0n20.xes.gz b/pm4py/tests/input_data/synthetic_logs/a22/a22f0n20.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..682e4a70e780879bd405224c589391e253378786 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a22/a22f0n20.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7d26cd239566908987c4af05f3ed36faff352d7dee6671c55a4854d60665915 +size 27850 diff --git a/pm4py/tests/input_data/synthetic_logs/a22/a22f0n50.xes.gz b/pm4py/tests/input_data/synthetic_logs/a22/a22f0n50.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..68e4e3ae75ff0eace122020203393895bc454ea7 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a22/a22f0n50.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc502565316dca7046d0ac338216a0de9c0c32bb1d882ab0fd840601cd34dd10 +size 27557 diff --git a/pm4py/tests/input_data/synthetic_logs/a32/a32.pnml b/pm4py/tests/input_data/synthetic_logs/a32/a32.pnml new file mode 100644 index 0000000000000000000000000000000000000000..908e35dbc7139da46673b7732c0149cad9215c6b --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a32/a32.pnml @@ -0,0 +1,2 @@ + +a32_netsource 11sink 2sink 3source 6sink 7source 10sink 11sink 12sink 13source 14sink 15source 18sink 19source 20sink 21source 22sink 23sink 24middle 26sink 27source 30sink 31source 32sink 33source 36sink 37middle 39source 40sink 41sink 42sink 43sink 44Sprtvuuv4ss1s2s3r5ann6n8n7ofgh9ihkbdcejmk10E1normalsink 37 -[1]-> knormal1normal1normal1normal1normal1normalsink 41 -[1]-> knormal1normal1normalsink 15 -[1]-> r5normal1normal1normal1normalp -[1]-> source 6normal1normal1normalp -[1]-> source 22normal1normalr -[1]-> source 14normalsink 33 -[1]-> onormalsink 21 -[1]-> s3normal1normalsink 19 -[1]-> s3normal1normal1normal1normal1normal1normal1normal1normal1normalr -[1]-> source 10normal1normal1normal1normal1normalsink 23 -[1]-> Enormalmiddle 39 -[1]-> inormaln6 -[1]-> source 32normal1normal1normal1normal1normal1normals -[1]-> source 18normal1normal1normal1normal1normalsink 7 -[1]-> Enormal1normal1normalsink 11 -[1]-> r5normal1normal1normal1normalmiddle 26 -[1]-> k10normal1normalf -[1]-> source 40normaln6 -[1]-> source 30normal1normal1normalf -[1]-> source 36normal1normal1normal1normal1normal1normal1normal1normals -[1]-> source 20normal1normalsink 31 -[1]-> onormal01000000000000000000000000000000 \ No newline at end of file diff --git a/pm4py/tests/input_data/synthetic_logs/a32/a32.ptml b/pm4py/tests/input_data/synthetic_logs/a32/a32.ptml new file mode 100644 index 0000000000000000000000000000000000000000..935e31869e738260287416e625a40d2af0f8b660 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a32/a32.ptml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/synthetic_logs/a32/a32f0n00.xes.gz b/pm4py/tests/input_data/synthetic_logs/a32/a32f0n00.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..5941a561c11659edb6dada6309e495a8f00fa9e3 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a32/a32f0n00.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af55c5572f92ecf5dff0599d574354f57061d8e8f0207d91719c178fcd8912e6 +size 41234 diff --git a/pm4py/tests/input_data/synthetic_logs/a32/a32f0n05.xes.gz b/pm4py/tests/input_data/synthetic_logs/a32/a32f0n05.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..25de2f0ee5afb9d292366cb40359e812f63f5329 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a32/a32f0n05.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:198c903b422cb616edfc62ba3aa121ac524799b5b2babffd460f2eecb9353df9 +size 41140 diff --git a/pm4py/tests/input_data/synthetic_logs/a32/a32f0n10.xes.gz b/pm4py/tests/input_data/synthetic_logs/a32/a32f0n10.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..a42725bab292f469bf63116fa32471b10a70b4b4 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a32/a32f0n10.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dcd98df17e9e63f0fde94dd7a07d34271b688b2f28bf9ac7015314ef85579fb +size 41010 diff --git a/pm4py/tests/input_data/synthetic_logs/a32/a32f0n20.xes.gz b/pm4py/tests/input_data/synthetic_logs/a32/a32f0n20.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..5cf065ed9eeebf6e0c6a15cef4105f05ec23811c --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a32/a32f0n20.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d5d31b8028bc0cbba0c1e31606ed402fb7cae01aafae1ff42f3a0916f975c3f +size 41046 diff --git a/pm4py/tests/input_data/synthetic_logs/a32/a32f0n50.xes.gz b/pm4py/tests/input_data/synthetic_logs/a32/a32f0n50.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..4561b16ad7208e572663ae7e577701df48806531 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a32/a32f0n50.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5d846eb5dffa96ccda7414ee23cd213f45e7527d602c473847452d6702e3e89 +size 40125 diff --git a/pm4py/tests/input_data/synthetic_logs/a42/a42.pnml b/pm4py/tests/input_data/synthetic_logs/a42/a42.pnml new file mode 100644 index 0000000000000000000000000000000000000000..a7e1925d18cf72dfcc49575fca9e9cc164954969 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a42/a42.pnml @@ -0,0 +1,2 @@ + +dd67d4e1-f1ea-42cd-ad23-c28255335279source 11sink 2sink 3sink 4sink 5source 6sink 7source 8sink 9source 10sink 11source 12sink 13source 14sink 15source 16sink 17source 18sink 19source 20sink 21middle 22sink 23source 24sink 25sink 26source 27sink 28source 29sink 30source 31sink 32sink 33source 34sink 35middle 36replacement source 37source 38sink 39middle 40replacement source 41source 42sink 43sink 44sink 45sink 46sink 47source 48sink 49sink 50source 51sink 52sink 53sink 54sink 55source 56sink 57source 58sink 59source 60sink 61sink 62source 63sink 64sink 65source 66sink 67source 68sink 69source 70sink 71source 72sink 73Sa1tau splittau joina39a30a29a28a25a24a2a31a34a8a13a3tau splittau jointau splittau jointau from treea36tau from treea35tau from treea37tau from treea38tau splittau jointau from treetau starta32tau from treetau from treetau from treetau starta33tau from treetau from treetau from treea9tau from treea11a10tau from treea12tau splittau jointau from treea14tau from treea15tau from treea16tau from treea17tau from treea18tau from treea4tau splittau jointau from treea6tau from treea5tau from treea7tau from treea19tau from treetau from treea20tau splittau joina21tau splittau joina23a22a26a27a40E1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal1normal0100000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/pm4py/tests/input_data/synthetic_logs/a42/a42.ptml b/pm4py/tests/input_data/synthetic_logs/a42/a42.ptml new file mode 100644 index 0000000000000000000000000000000000000000..9d3aeddf38a76fa8303fb750c1beb89714bc4ed6 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a42/a42.ptml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/synthetic_logs/a42/a42f0n00.xes.gz b/pm4py/tests/input_data/synthetic_logs/a42/a42f0n00.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..ba4f160f95626c2bc1c14da6fdf61452f7b8caea --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a42/a42f0n00.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd874a40dc8c528aa1ab9d0d9c15df7567be752df23ddef29ad4d3d705156a1f +size 56249 diff --git a/pm4py/tests/input_data/synthetic_logs/a42/a42f0n05.xes.gz b/pm4py/tests/input_data/synthetic_logs/a42/a42f0n05.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..c847455b3685e8a1b2ec74c0358a8d8c8cbb584b --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a42/a42f0n05.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:584e7c64005978a3ca9b28409a9ce68d5dab5469ed1d3e8059cb7d56bd9f07ff +size 56048 diff --git a/pm4py/tests/input_data/synthetic_logs/a42/a42f0n10.xes.gz b/pm4py/tests/input_data/synthetic_logs/a42/a42f0n10.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..6e20114bb6fb46c182017ec7dcdfaaafe90f0e8e --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a42/a42f0n10.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a01d3eedad8984b7dbac9361ce3f4a9118ba7f2c02ccf8ccd6581b8b1df5417c +size 55728 diff --git a/pm4py/tests/input_data/synthetic_logs/a42/a42f0n20.xes.gz b/pm4py/tests/input_data/synthetic_logs/a42/a42f0n20.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..6794b3e2c756a618096a6815cb6a84a2906a4641 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a42/a42f0n20.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36feae5ffe42904101277fc102176b3cc13f3d9bb539b3e746bcfa7722ab0846 +size 55094 diff --git a/pm4py/tests/input_data/synthetic_logs/a42/a42f0n50.xes.gz b/pm4py/tests/input_data/synthetic_logs/a42/a42f0n50.xes.gz new file mode 100644 index 0000000000000000000000000000000000000000..61f5b932c2a8024bfe34e7a537851cd6c35b28e6 --- /dev/null +++ b/pm4py/tests/input_data/synthetic_logs/a42/a42f0n50.xes.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a155201a1a4b2b748575a34f4d9c8de3d427879bda26d1a78387bd9aa17380c2 +size 53762 diff --git a/pm4py/tests/input_data/tree_ex_with_loops.ptml b/pm4py/tests/input_data/tree_ex_with_loops.ptml new file mode 100644 index 0000000000000000000000000000000000000000..3c5db9dd996b93d85096be88fc88c5e12bf43362 --- /dev/null +++ b/pm4py/tests/input_data/tree_ex_with_loops.ptml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/tree_ex_wo_loops.ptml b/pm4py/tests/input_data/tree_ex_wo_loops.ptml new file mode 100644 index 0000000000000000000000000000000000000000..c5444a6101e1f88a530df7469dce1e29bb0ceb08 --- /dev/null +++ b/pm4py/tests/input_data/tree_ex_wo_loops.ptml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pm4py/tests/input_data/xes_20.xes b/pm4py/tests/input_data/xes_20.xes new file mode 100644 index 0000000000000000000000000000000000000000..2f81a62ed20935621cf264cd4a77a8a7e6296e56 --- /dev/null +++ b/pm4py/tests/input_data/xes_20.xes @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/llm_test.py b/pm4py/tests/llm_test.py new file mode 100644 index 0000000000000000000000000000000000000000..c3eec1dd469aeb4e2d89bf492acbfc9cd2f24b8b --- /dev/null +++ b/pm4py/tests/llm_test.py @@ -0,0 +1,84 @@ +import unittest +import pm4py + + +class LlmTest(unittest.TestCase): + def test_abstract_case(self): + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=True) + abstr = pm4py.llm.abstract_case(log[0]) + self.assertGreater(len(abstr), 0) + + def test_abstract_dfg(self): + for ret_legacy in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=ret_legacy) + abstr = pm4py.llm.abstract_dfg(log) + self.assertGreater(len(abstr), 0) + + def test_abstract_variants(self): + for ret_legacy in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=ret_legacy) + abstr = pm4py.llm.abstract_variants(log) + self.assertGreater(len(abstr), 0) + + def test_abstract_event_stream(self): + for ret_legacy in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=ret_legacy) + abstr = pm4py.llm.abstract_event_stream(log) + self.assertGreater(len(abstr), 0) + + def test_abstract_log_attributes(self): + for ret_legacy in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=ret_legacy) + abstr = pm4py.llm.abstract_log_attributes(log) + self.assertGreater(len(abstr), 0) + + def test_abstract_log_features(self): + for ret_legacy in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=ret_legacy) + abstr = pm4py.llm.abstract_log_features(log) + self.assertGreater(len(abstr), 0) + + def test_abstract_temporal_profile(self): + for ret_legacy in [True, False]: + log = pm4py.read_xes("input_data/receipt.xes", return_legacy_log_object=ret_legacy) + temporal_profile = pm4py.discover_temporal_profile(log) + abstr = pm4py.llm.abstract_temporal_profile(temporal_profile) + self.assertGreater(len(abstr), 0) + + def test_abstract_declare(self): + for ret_legacy in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=ret_legacy) + declare_model = pm4py.discover_declare(log) + abstr = pm4py.llm.abstract_declare(declare_model) + self.assertGreater(len(abstr), 0) + + def test_abstract_log_skeleton(self): + for ret_legacy in [True, False]: + log = pm4py.read_xes("input_data/receipt.xes", return_legacy_log_object=ret_legacy) + log_skeleton = pm4py.discover_log_skeleton(log) + abstr = pm4py.llm.abstract_log_skeleton(log_skeleton) + self.assertGreater(len(abstr), 0) + + def test_abstract_ocel(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + abstr = pm4py.llm.abstract_ocel(ocel) + self.assertGreater(len(abstr), 0) + + def test_abstract_ocel_ocdfg(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + abstr = pm4py.llm.abstract_ocel_ocdfg(ocel) + self.assertGreater(len(abstr), 0) + + def test_abstract_ocel_features(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + abstr = pm4py.llm.abstract_ocel_features(ocel, "order") + self.assertGreater(len(abstr), 0) + + def test_abstract_petri_net(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + abstr = pm4py.llm.abstract_petri_net(net, im, fm) + self.assertGreater(len(abstr), 0) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/main_fac_test.py b/pm4py/tests/main_fac_test.py new file mode 100644 index 0000000000000000000000000000000000000000..03f1fecb00f1ad449c746b0799d2d03572479362 --- /dev/null +++ b/pm4py/tests/main_fac_test.py @@ -0,0 +1,197 @@ +import os +import unittest + +from pm4py.algo.conformance.alignments.petri_net import algorithm as align_alg +from pm4py.algo.conformance.tokenreplay import algorithm as tr_alg +from pm4py.algo.discovery.alpha import algorithm as alpha_miner +from pm4py.algo.discovery.dfg import algorithm as dfg_mining +from pm4py.algo.discovery.heuristics import algorithm as heuristics_miner +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.discovery.transition_system import algorithm as ts_disc +from pm4py.algo.evaluation import algorithm as eval_alg +from pm4py.algo.evaluation.generalization import algorithm as generalization +from pm4py.algo.evaluation.precision import algorithm as precision_evaluator +from pm4py.algo.evaluation.replay_fitness import algorithm as rp_fit +from pm4py.algo.evaluation.simplicity import algorithm as simplicity +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.objects.log.exporter.xes import exporter as xes_exporter +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.util import dataframe_utils +from pm4py.util import constants, pandas_utils +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + + +class MainFactoriesTest(unittest.TestCase): + def test_nonstandard_exporter(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + xes_exporter.apply(log, os.path.join("test_output_data", "running-example.xes"), + variant=xes_exporter.Variants.LINE_BY_LINE) + os.remove(os.path.join("test_output_data", "running-example.xes")) + + def test_alphaminer_log(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + net, im, fm = alpha_miner.apply(log) + aligned_traces_tr = tr_alg.apply(log, net, im, fm) + aligned_traces_alignments = align_alg.apply(log, net, im, fm) + evaluation = eval_alg.apply(log, net, im, fm) + fitness = rp_fit.apply(log, net, im, fm) + precision = precision_evaluator.apply(log, net, im, fm) + gen = generalization.apply(log, net, im, fm) + sim = simplicity.apply(net) + + def test_memory_efficient_iterparse(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes"), + variant=xes_importer.Variants.ITERPARSE_MEM_COMPRESSED) + + def test_alphaminer_stream(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + stream = log_conversion.apply(df, variant=log_conversion.TO_EVENT_STREAM) + net, im, fm = alpha_miner.apply(stream) + aligned_traces_tr = tr_alg.apply(stream, net, im, fm) + aligned_traces_alignments = align_alg.apply(stream, net, im, fm) + evaluation = eval_alg.apply(stream, net, im, fm) + fitness = rp_fit.apply(stream, net, im, fm) + precision = precision_evaluator.apply(stream, net, im, fm) + gen = generalization.apply(stream, net, im, fm) + sim = simplicity.apply(net) + + def test_alphaminer_df(self): + log = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + log = dataframe_utils.convert_timestamp_columns_in_df(log, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + net, im, fm = alpha_miner.apply(log) + aligned_traces_tr = tr_alg.apply(log, net, im, fm) + aligned_traces_alignments = align_alg.apply(log, net, im, fm) + evaluation = eval_alg.apply(log, net, im, fm) + fitness = rp_fit.apply(log, net, im, fm) + precision = precision_evaluator.apply(log, net, im, fm) + gen = generalization.apply(log, net, im, fm) + sim = simplicity.apply(net) + + def test_inductiveminer_log(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + aligned_traces_tr = tr_alg.apply(log, net, im, fm) + aligned_traces_alignments = align_alg.apply(log, net, im, fm) + evaluation = eval_alg.apply(log, net, im, fm) + fitness = rp_fit.apply(log, net, im, fm) + precision = precision_evaluator.apply(log, net, im, fm) + gen = generalization.apply(log, net, im, fm) + sim = simplicity.apply(net) + + def test_inductiveminer_df(self): + log = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + log = dataframe_utils.convert_timestamp_columns_in_df(log, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + aligned_traces_tr = tr_alg.apply(log, net, im, fm) + aligned_traces_alignments = align_alg.apply(log, net, im, fm) + evaluation = eval_alg.apply(log, net, im, fm) + fitness = rp_fit.apply(log, net, im, fm) + precision = precision_evaluator.apply(log, net, im, fm) + gen = generalization.apply(log, net, im, fm) + sim = simplicity.apply(net) + + def test_heu_log(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + net, im, fm = heuristics_miner.apply(log) + aligned_traces_tr = tr_alg.apply(log, net, im, fm) + aligned_traces_alignments = align_alg.apply(log, net, im, fm) + evaluation = eval_alg.apply(log, net, im, fm) + fitness = rp_fit.apply(log, net, im, fm) + precision = precision_evaluator.apply(log, net, im, fm) + gen = generalization.apply(log, net, im, fm) + sim = simplicity.apply(net) + + def test_heu_stream(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + stream = log_conversion.apply(df, variant=log_conversion.TO_EVENT_STREAM) + net, im, fm = heuristics_miner.apply(stream) + aligned_traces_tr = tr_alg.apply(stream, net, im, fm) + aligned_traces_alignments = align_alg.apply(stream, net, im, fm) + evaluation = eval_alg.apply(stream, net, im, fm) + fitness = rp_fit.apply(stream, net, im, fm) + precision = precision_evaluator.apply(stream, net, im, fm) + gen = generalization.apply(stream, net, im, fm) + sim = simplicity.apply(net) + + def test_heu_df(self): + log = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + log = dataframe_utils.convert_timestamp_columns_in_df(log, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + net, im, fm = heuristics_miner.apply(log) + aligned_traces_tr = tr_alg.apply(log, net, im, fm) + aligned_traces_alignments = align_alg.apply(log, net, im, fm) + evaluation = eval_alg.apply(log, net, im, fm) + fitness = rp_fit.apply(log, net, im, fm) + precision = precision_evaluator.apply(log, net, im, fm) + gen = generalization.apply(log, net, im, fm) + sim = simplicity.apply(net) + + def test_dfg_log(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + dfg = dfg_mining.apply(log) + + def test_dfg_stream(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + stream = log_conversion.apply(df, variant=log_conversion.TO_EVENT_STREAM) + dfg = dfg_mining.apply(stream) + + def test_dfg_df(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + dfg = dfg_mining.apply(df) + + def test_ts_log(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + ts = ts_disc.apply(log) + + def test_ts_stream(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + stream = log_conversion.apply(df, variant=log_conversion.TO_EVENT_STREAM) + ts = ts_disc.apply(stream) + + def test_ts_df(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + ts = ts_disc.apply(df) + + def test_csvimp_xesexp(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + log0 = log_conversion.apply(df, variant=log_conversion.TO_EVENT_STREAM) + log = log_conversion.apply(log0, variant=log_conversion.TO_EVENT_LOG) + stream = log_conversion.apply(log0, variant=log_conversion.TO_EVENT_STREAM) + df = log_conversion.apply(log0, variant=log_conversion.TO_DATA_FRAME) + xes_exporter.apply(log, "ru.xes") + xes_exporter.apply(stream, "ru.xes") + xes_exporter.apply(df, "ru.xes") + os.remove('ru.xes') + + def test_xesimp_xesexp(self): + log0 = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + log = log_conversion.apply(log0, variant=log_conversion.TO_EVENT_LOG) + stream = log_conversion.apply(log0, variant=log_conversion.TO_EVENT_STREAM) + df = log_conversion.apply(log0, variant=log_conversion.TO_DATA_FRAME) + xes_exporter.apply(log, "ru.xes") + xes_exporter.apply(stream, "ru.xes") + xes_exporter.apply(df, "ru.xes") + os.remove('ru.xes') + + def test_pdimp_xesexp(self): + log0 = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + log0 = dataframe_utils.convert_timestamp_columns_in_df(log0, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + log = log_conversion.apply(log0, variant=log_conversion.TO_EVENT_LOG) + stream = log_conversion.apply(log0, variant=log_conversion.TO_EVENT_STREAM) + df = log_conversion.apply(log0, variant=log_conversion.TO_DATA_FRAME) + xes_exporter.apply(log, "ru.xes") + xes_exporter.apply(stream, "ru.xes") + xes_exporter.apply(df, "ru.xes") + os.remove('ru.xes') + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/ocel_discovery_test.py b/pm4py/tests/ocel_discovery_test.py new file mode 100644 index 0000000000000000000000000000000000000000..108bf9ef40582304882c5955a734665ea583a891 --- /dev/null +++ b/pm4py/tests/ocel_discovery_test.py @@ -0,0 +1,105 @@ +import pm4py +import os +import unittest + + +class OcelDiscoveryTest(unittest.TestCase): + def test_discovery_ocfg_f1(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="frequency", act_metric="events", edge_metric="ev_couples", act_threshold=2, edge_threshold=1) + os.remove(target_path) + + def test_discovery_ocfg_f2(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="frequency", act_metric="unique_objects", edge_metric="ev_couples", act_threshold=2, edge_threshold=1) + os.remove(target_path) + + def test_discovery_ocfg_f3(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="frequency", act_metric="total_objects", edge_metric="ev_couples", act_threshold=2, edge_threshold=1) + os.remove(target_path) + + + def test_discovery_ocfg_f4(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="frequency", act_metric="unique_objects", edge_metric="unique_objects", act_threshold=2, edge_threshold=1) + os.remove(target_path) + + + def test_discovery_ocfg_f5(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="frequency", act_metric="unique_objects", edge_metric="total_objects", act_threshold=2, edge_threshold=1) + os.remove(target_path) + + + def test_discovery_ocfg_p1(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="performance", act_metric="events", edge_metric="ev_couples", act_threshold=2, edge_threshold=1) + os.remove(target_path) + + def test_discovery_ocfg_p2(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="performance", act_metric="unique_objects", edge_metric="ev_couples", act_threshold=2, edge_threshold=1) + os.remove(target_path) + + def test_discovery_ocfg_p3(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="performance", act_metric="total_objects", edge_metric="ev_couples", act_threshold=2, edge_threshold=1) + os.remove(target_path) + + + def test_discovery_ocfg_p4(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="performance", act_metric="unique_objects", edge_metric="total_objects", act_threshold=2, edge_threshold=1) + os.remove(target_path) + + + def test_discovery_ocfg_p5(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel, business_hours=True) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="performance", act_metric="unique_objects", edge_metric="total_objects", act_threshold=2, edge_threshold=1) + os.remove(target_path) + + + def test_discovery_ocfg_p6(self): + target_path = os.path.join("test_output_data", "model.svg") + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocdfg = pm4py.discover_ocdfg(ocel, business_hours=True) + pm4py.save_vis_ocdfg(ocdfg, target_path, annotation="performance", act_metric="unique_objects", edge_metric="total_objects", act_threshold=2, edge_threshold=1, performance_aggregation="median") + os.remove(target_path) + + def test_discovery_ocpn_im(self): + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocpn = pm4py.discover_oc_petri_net(ocel, inductive_miner_variant="im") + + def test_discovery_ocpn_imd(self): + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + ocpn = pm4py.discover_oc_petri_net(ocel, inductive_miner_variant="imd") + + def test_discovery_saw_nets_ocel(self): + from pm4py.algo.discovery.ocel.saw_nets import algorithm as saw_nets_disc + ocel = pm4py.read_ocel(os.path.join("input_data", "ocel", "example_log.jsonocel")) + saw_nets_disc.apply(ocel) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/ocel_filtering_test.py b/pm4py/tests/ocel_filtering_test.py new file mode 100644 index 0000000000000000000000000000000000000000..c556f8808efae1476b3703fecafef442c56dac4c --- /dev/null +++ b/pm4py/tests/ocel_filtering_test.py @@ -0,0 +1,119 @@ +import unittest +import pm4py +import os + + +class OcelFilteringTest(unittest.TestCase): + def test_ocel_import_csv_export_csv(self): + input_path = os.path.join("input_data", "ocel", "example_log.csv") + output_path = os.path.join("test_output_data", "example_log.csv") + ocel = pm4py.read_ocel(input_path) + pm4py.write_ocel(ocel, output_path) + os.remove(output_path) + + def test_ocel_import_csv_export_jsonocel(self): + input_path = os.path.join("input_data", "ocel", "example_log.csv") + output_path = os.path.join("test_output_data", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.write_ocel(ocel, output_path) + os.remove(output_path) + + def test_ocel_import_csv_export_xmlocel(self): + input_path = os.path.join("input_data", "ocel", "example_log.csv") + output_path = os.path.join("test_output_data", "example_log.xmlocel") + ocel = pm4py.read_ocel(input_path) + pm4py.write_ocel(ocel, output_path) + os.remove(output_path) + + def test_ocel_import_jsonocel_export_csv(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + output_path = os.path.join("test_output_data", "example_log.csv") + ocel = pm4py.read_ocel(input_path) + pm4py.write_ocel(ocel, output_path) + os.remove(output_path) + + def test_ocel_import_jsonocel_export_jsonocel(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + output_path = os.path.join("test_output_data", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.write_ocel(ocel, output_path) + os.remove(output_path) + + def test_ocel_import_jsonocel_export_xmlocel(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + output_path = os.path.join("test_output_data", "example_log.xmlocel") + ocel = pm4py.read_ocel(input_path) + pm4py.write_ocel(ocel, output_path) + os.remove(output_path) + + def test_ocel_import_xmlocel_export_csv(self): + input_path = os.path.join("input_data", "ocel", "example_log.xmlocel") + output_path = os.path.join("test_output_data", "example_log.csv") + ocel = pm4py.read_ocel(input_path) + pm4py.write_ocel(ocel, output_path) + os.remove(output_path) + + def test_ocel_import_xmlocel_export_jsonocel(self): + input_path = os.path.join("input_data", "ocel", "example_log.xmlocel") + output_path = os.path.join("test_output_data", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.write_ocel(ocel, output_path) + os.remove(output_path) + + def test_ocel_import_xmlocel_export_xmlocel(self): + input_path = os.path.join("input_data", "ocel", "example_log.xmlocel") + output_path = os.path.join("test_output_data", "example_log.xmlocel") + ocel = pm4py.read_ocel(input_path) + pm4py.write_ocel(ocel, output_path) + os.remove(output_path) + + def test_ocel_statistic_object_type_activities(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.ocel_object_type_activities(ocel) + + + def test_ocel_objects_ot_count(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.ocel_objects_ot_count(ocel) + + def test_ocel_filter_event_attribute(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.filter_ocel_event_attribute(ocel, "ocel:activity", ["Create Order"]) + + + def test_ocel_filter_object_attribute(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.filter_ocel_object_attribute(ocel, "ocel:type", ["order", "delivery"]) + + def test_ocel_filter_object_type_allowed_activities(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.filter_ocel_object_types_allowed_activities(ocel, {"order": {"Create Order"}, "element": {"Create Order"}}) + + def test_ocel_filter_start_events(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.filter_ocel_start_events_per_object_type(ocel, "order") + + def test_ocel_filter_end_events(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.filter_ocel_end_events_per_object_type(ocel, "order") + + def test_ocel_filter_object_per_type_count(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.filter_ocel_object_per_type_count(ocel, {"order": 1, "element": 2}) + + def test_ocel_filter_timestamp(self): + input_path = os.path.join("input_data", "ocel", "example_log.jsonocel") + ocel = pm4py.read_ocel(input_path) + pm4py.filter_ocel_events_timestamp(ocel, "1981-01-01 00:00:00", "1982-01-01 00:00:00") + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/other_tests.py b/pm4py/tests/other_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..4310d2cb633e6e7e9bdddba32ba4af53b84bea12 --- /dev/null +++ b/pm4py/tests/other_tests.py @@ -0,0 +1,393 @@ +import os +import unittest +import importlib.util +from pm4py.algo.discovery.log_skeleton import algorithm as lsk_alg +from pm4py.algo.conformance.log_skeleton import algorithm as lsk_conf_alg +from pm4py.objects.process_tree.importer import importer as ptree_importer +from pm4py.objects.process_tree.exporter import exporter as ptree_exporter +from pm4py.algo.discovery.performance_spectrum.variants import log as log_pspectrum, dataframe as df_pspectrum +from pm4py.objects.dfg.importer import importer as dfg_importer +from pm4py.objects.dfg.exporter import exporter as dfg_exporter +from pm4py.algo.discovery.dfg import algorithm as dfg_discovery +from pm4py.statistics.start_activities.log import get as start_activities +from pm4py.statistics.end_activities.log import get as end_activities +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.statistics.variants.log import get as variants_get +from pm4py.algo.simulation.playout.petri_net import algorithm +from pm4py.objects.conversion.log import converter +from pm4py.objects.log.util import dataframe_utils +from pm4py.util import constants, pandas_utils +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + + +class OtherPartsTests(unittest.TestCase): + def test_emd_1(self): + if importlib.util.find_spec("pyemd"): + from pm4py.algo.evaluation.earth_mover_distance import algorithm as earth_mover_distance + M = {("a", "b", "d", "e"): 0.49, ("a", "d", "b", "e"): 0.49, ("a", "c", "d", "e"): 0.01, + ("a", "d", "c", "e"): 0.01} + L1 = {("a", "b", "d", "e"): 0.49, ("a", "d", "b", "e"): 0.49, ("a", "c", "d", "e"): 0.01, + ("a", "d", "c", "e"): 0.01} + earth_mover_distance.apply(M, L1) + + def test_emd_2(self): + if importlib.util.find_spec("pyemd"): + from pm4py.algo.evaluation.earth_mover_distance import algorithm as earth_mover_distance + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + lang_log = variants_get.get_language(log) + process_tree = inductive_miner.apply(log) + net1, im1, fm1 = process_tree_converter.apply(process_tree) + lang_model1 = variants_get.get_language( + algorithm.apply(net1, im1, fm1, variant=algorithm.Variants.STOCHASTIC_PLAYOUT, + parameters={algorithm.Variants.STOCHASTIC_PLAYOUT.value.Parameters.LOG: log})) + emd = earth_mover_distance.apply(lang_model1, lang_log) + + def test_importing_dfg(self): + dfg, sa, ea = dfg_importer.apply(os.path.join("input_data", "running-example.dfg")) + + def test_exporting_dfg(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + dfg = dfg_discovery.apply(log) + dfg_exporter.apply(dfg, os.path.join("test_output_data", "running-example.dfg")) + dfg, sa, ea = dfg_importer.apply(os.path.join("test_output_data", "running-example.dfg")) + os.remove(os.path.join("test_output_data", "running-example.dfg")) + + def test_exporting_dfg_with_sa_ea(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + dfg = dfg_discovery.apply(log) + sa = start_activities.get_start_activities(log) + ea = end_activities.get_end_activities(log) + dfg_exporter.apply(dfg, os.path.join("test_output_data", "running-example.dfg"), + parameters={dfg_exporter.Variants.CLASSIC.value.Parameters.START_ACTIVITIES: sa, + dfg_exporter.Variants.CLASSIC.value.Parameters.END_ACTIVITIES: ea}) + dfg, sa, ea = dfg_importer.apply(os.path.join("test_output_data", "running-example.dfg")) + os.remove(os.path.join("test_output_data", "running-example.dfg")) + + def test_log_skeleton(self): + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + skeleton = lsk_alg.apply(log) + conf_res = lsk_conf_alg.apply(log, skeleton) + + def test_performance_spectrum_log(self): + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + pspectr = log_pspectrum.apply(log, ["T02 Check confirmation of receipt", "T03 Adjust confirmation of receipt"], + 1000, {}) + + def test_performance_spectrum_df(self): + df = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + pspectr = df_pspectrum.apply(df, ["T02 Check confirmation of receipt", "T03 Adjust confirmation of receipt"], + 1000, {}) + + def test_alignment(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net, im, fm = alpha_miner.apply(log) + from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments + aligned_traces = alignments.apply(log, net, im, fm, variant=alignments.Variants.VERSION_STATE_EQUATION_A_STAR) + aligned_traces = alignments.apply(log, net, im, fm, variant=alignments.Variants.VERSION_DIJKSTRA_NO_HEURISTICS) + + def test_import_export_ptml(self): + tree = ptree_importer.apply(os.path.join("input_data", "running-example.ptml")) + ptree_exporter.apply(tree, os.path.join("test_output_data", "running-example2.ptml")) + os.remove(os.path.join("test_output_data", "running-example2.ptml")) + + def test_footprints_net(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net, im, fm = alpha_miner.apply(log) + from pm4py.algo.discovery.footprints import algorithm as footprints_discovery + fp_entire_log = footprints_discovery.apply(log, variant=footprints_discovery.Variants.ENTIRE_EVENT_LOG) + fp_trace_trace = footprints_discovery.apply(log) + fp_net = footprints_discovery.apply(net, im) + from pm4py.algo.conformance.footprints import algorithm as footprints_conformance + conf1 = footprints_conformance.apply(fp_entire_log, fp_net) + conf2 = footprints_conformance.apply(fp_trace_trace, fp_net) + conf3 = footprints_conformance.apply(fp_entire_log, fp_net, + variant=footprints_conformance.Variants.LOG_EXTENSIVE) + conf4 = footprints_conformance.apply(fp_trace_trace, fp_net, + variant=footprints_conformance.Variants.TRACE_EXTENSIVE) + + def test_footprints_tree(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + tree = inductive_miner.apply(log) + from pm4py.algo.discovery.footprints import algorithm as footprints_discovery + fp_entire_log = footprints_discovery.apply(log, variant=footprints_discovery.Variants.ENTIRE_EVENT_LOG) + fp_trace_trace = footprints_discovery.apply(log) + fp_tree = footprints_discovery.apply(tree) + from pm4py.algo.conformance.footprints import algorithm as footprints_conformance + conf1 = footprints_conformance.apply(fp_entire_log, fp_tree) + conf2 = footprints_conformance.apply(fp_trace_trace, fp_tree) + conf3 = footprints_conformance.apply(fp_entire_log, fp_tree, + variant=footprints_conformance.Variants.LOG_EXTENSIVE) + conf4 = footprints_conformance.apply(fp_trace_trace, fp_tree, + variant=footprints_conformance.Variants.TRACE_EXTENSIVE) + + def test_footprints_tree_df(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + log = converter.apply(df, variant=converter.Variants.TO_EVENT_LOG) + tree = inductive_miner.apply(log) + from pm4py.algo.discovery.footprints import algorithm as footprints_discovery + fp_df = footprints_discovery.apply(df) + fp_tree = footprints_discovery.apply(tree) + from pm4py.algo.conformance.footprints import algorithm as footprints_conformance + conf = footprints_conformance.apply(fp_df, fp_tree) + + def test_conversion_pn_to_pt(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.alpha import algorithm as alpha_miner + net, im, fm = alpha_miner.apply(log) + from pm4py.objects.conversion.wf_net import converter as wf_net_converter + tree = wf_net_converter.apply(net, im, fm, variant=wf_net_converter.Variants.TO_PROCESS_TREE) + + def test_playout_tree_basic(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + tree = inductive_miner.apply(log) + from pm4py.algo.simulation.playout.process_tree import algorithm as tree_playout + new_log = tree_playout.apply(tree) + + def test_playout_tree_extensive(self): + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + from pm4py.algo.discovery.inductive import algorithm as inductive_miner + tree = inductive_miner.apply(log) + from pm4py.algo.simulation.playout.process_tree import algorithm as tree_playout + new_log = tree_playout.apply(tree, variant=tree_playout.Variants.EXTENSIVE) + + def test_service_time_xes(self): + log = xes_importer.apply(os.path.join("input_data", "interval_event_log.xes")) + from pm4py.statistics.service_time.log import get + soj_time = get.apply(log, parameters={get.Parameters.START_TIMESTAMP_KEY: "start_timestamp"}) + + def test_service_time_pandas(self): + dataframe = pandas_utils.read_csv(os.path.join("input_data", "interval_event_log.csv")) + from pm4py.objects.log.util import dataframe_utils + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + from pm4py.statistics.service_time.pandas import get + soj_time = get.apply(dataframe, parameters={get.Parameters.START_TIMESTAMP_KEY: "start_timestamp"}) + + def test_concurrent_activities_xes(self): + log = xes_importer.apply(os.path.join("input_data", "interval_event_log.xes")) + from pm4py.statistics.concurrent_activities.log import get + conc_act = get.apply(log, parameters={get.Parameters.START_TIMESTAMP_KEY: "start_timestamp"}) + + def test_concurrent_activities_pandas(self): + dataframe = pandas_utils.read_csv(os.path.join("input_data", "interval_event_log.csv")) + from pm4py.objects.log.util import dataframe_utils + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + from pm4py.statistics.concurrent_activities.pandas import get + conc_act = get.apply(dataframe, parameters={get.Parameters.START_TIMESTAMP_KEY: "start_timestamp"}) + + def test_efg_xes(self): + log = xes_importer.apply(os.path.join("input_data", "interval_event_log.xes")) + from pm4py.statistics.eventually_follows.log import get + efg = get.apply(log, parameters={get.Parameters.START_TIMESTAMP_KEY: "start_timestamp"}) + + def test_efg_pandas(self): + dataframe = pandas_utils.read_csv(os.path.join("input_data", "interval_event_log.csv")) + from pm4py.objects.log.util import dataframe_utils + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + from pm4py.statistics.eventually_follows.pandas import get + efg = get.apply(dataframe, parameters={get.Parameters.START_TIMESTAMP_KEY: "start_timestamp"}) + + def test_dfg_playout(self): + import pm4py + from pm4py.algo.simulation.playout.dfg import algorithm as dfg_playout + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes")) + dfg, sa, ea = pm4py.discover_dfg(log) + dfg_playout.apply(dfg, sa, ea) + + def test_dfg_align(self): + import pm4py + from pm4py.algo.filtering.dfg import dfg_filtering + from pm4py.algo.conformance.alignments.dfg import algorithm as dfg_alignment + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes")) + dfg, sa, ea = pm4py.discover_dfg(log) + act_count = pm4py.get_event_attribute_values(log, "concept:name") + dfg, sa, ea, act_count = dfg_filtering.filter_dfg_on_activities_percentage(dfg, sa, ea, act_count, 0.5) + dfg, sa, ea, act_count = dfg_filtering.filter_dfg_on_paths_percentage(dfg, sa, ea, act_count, 0.5) + aligned_traces = dfg_alignment.apply(log, dfg, sa, ea) + + def test_insert_idx_in_trace(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = pandas_utils.insert_ev_in_tr_index(df) + + def test_automatic_feature_extraction(self): + df = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) + fea_df = dataframe_utils.automatic_feature_extraction_df(df) + + def test_log_to_trie(self): + import pm4py + from pm4py.algo.transformation.log_to_trie import algorithm as log_to_trie + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes")) + trie = log_to_trie.apply(log) + + def test_minimum_self_distance(self): + import pm4py + from pm4py.algo.discovery.minimum_self_distance import algorithm as minimum_self_distance + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes")) + msd = minimum_self_distance.apply(log) + + def test_projection_univariate_log(self): + import pm4py + from pm4py.util.compression import util as compression_util + log = pm4py.read_xes(os.path.join("input_data", "receipt.xes")) + cl = compression_util.project_univariate(log, "concept:name") + # just verify that the set is non-empty + self.assertTrue(compression_util.get_start_activities(cl)) + self.assertTrue(compression_util.get_end_activities(cl)) + self.assertTrue(compression_util.get_alphabet(cl)) + self.assertTrue(compression_util.discover_dfg(cl)) + self.assertTrue(compression_util.get_variants(cl)) + + def test_projection_univariate_df(self): + from pm4py.util.compression import util as compression_util + dataframe = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + cl = compression_util.project_univariate(dataframe, "concept:name") + # just verify that the set is non-empty + self.assertTrue(compression_util.get_start_activities(cl)) + self.assertTrue(compression_util.get_end_activities(cl)) + self.assertTrue(compression_util.get_alphabet(cl)) + self.assertTrue(compression_util.discover_dfg(cl)) + self.assertTrue(compression_util.get_variants(cl)) + + def test_compression_univariate_log(self): + import pm4py + from pm4py.util.compression import util as compression_util + log = pm4py.read_xes(os.path.join("input_data", "receipt.xes")) + cl, lookup = compression_util.compress_univariate(log, "concept:name") + # just verify that the set is non-empty + self.assertTrue(compression_util.get_start_activities(cl)) + self.assertTrue(compression_util.get_end_activities(cl)) + self.assertTrue(compression_util.get_alphabet(cl)) + self.assertTrue(compression_util.discover_dfg(cl)) + self.assertTrue(compression_util.get_variants(cl)) + + def test_compression_univariate_df(self): + from pm4py.util.compression import util as compression_util + dataframe = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + cl, lookup = compression_util.compress_univariate(dataframe, "concept:name") + # just verify that the set is non-empty + self.assertTrue(compression_util.get_start_activities(cl)) + self.assertTrue(compression_util.get_end_activities(cl)) + self.assertTrue(compression_util.get_alphabet(cl)) + self.assertTrue(compression_util.discover_dfg(cl)) + self.assertTrue(compression_util.get_variants(cl)) + + def test_compression_multivariate_log(self): + import pm4py + from pm4py.util.compression import util as compression_util + log = pm4py.read_xes(os.path.join("input_data", "receipt.xes")) + cl, lookup = compression_util.compress_multivariate(log, ["concept:name", "org:resource"]) + # just verify that the set is non-empty + self.assertTrue(compression_util.get_start_activities(cl)) + self.assertTrue(compression_util.get_end_activities(cl)) + self.assertTrue(compression_util.get_alphabet(cl)) + self.assertTrue(compression_util.discover_dfg(cl)) + self.assertTrue(compression_util.get_variants(cl)) + + def test_compression_multivariate_df(self): + from pm4py.util.compression import util as compression_util + dataframe = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + cl, lookup = compression_util.compress_multivariate(dataframe, ["concept:name", "org:resource"]) + # just verify that the set is non-empty + self.assertTrue(compression_util.get_start_activities(cl)) + self.assertTrue(compression_util.get_end_activities(cl)) + self.assertTrue(compression_util.get_alphabet(cl)) + self.assertTrue(compression_util.discover_dfg(cl)) + self.assertTrue(compression_util.get_variants(cl)) + + def test_log_to_target_rem_time(self): + import pm4py + from pm4py.algo.transformation.log_to_target import algorithm as log_to_target + log = pm4py.read_xes("input_data/running-example.xes") + rem_time_target, classes = log_to_target.apply(log, variant=log_to_target.Variants.REMAINING_TIME) + + def test_log_to_target_next_time(self): + import pm4py + from pm4py.algo.transformation.log_to_target import algorithm as log_to_target + log = pm4py.read_xes("input_data/running-example.xes") + next_time_target, classes = log_to_target.apply(log, variant=log_to_target.Variants.NEXT_TIME) + + def test_log_to_target_next_activity(self): + import pm4py + from pm4py.algo.transformation.log_to_target import algorithm as log_to_target + log = pm4py.read_xes("input_data/running-example.xes") + next_activity_target, next_activities = log_to_target.apply(log, variant=log_to_target.Variants.NEXT_ACTIVITY) + + def test_ocel_split_cc_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.split_ocel import algorithm as split_ocel + res = split_ocel.apply(ocel, variant=split_ocel.Variants.CONNECTED_COMPONENTS) + + def test_ocel_split_ancestors_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.split_ocel import algorithm as split_ocel + res = split_ocel.apply(ocel, parameters={"object_type": "order"}, variant=split_ocel.Variants.ANCESTORS_DESCENDANTS) + + def test_ocel_object_features_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.features.objects import algorithm as ocel_fea + res = ocel_fea.apply(ocel) + + def test_ocel_event_features_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.features.events import algorithm as ocel_fea + res = ocel_fea.apply(ocel) + + def test_ocel_event_object_features_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.features.events_objects import algorithm as ocel_fea + res = ocel_fea.apply(ocel) + + def test_ocel_interaction_graph_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.graphs import object_interaction_graph + object_interaction_graph.apply(ocel) + + def test_ocel_descendants_graph_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.graphs import object_descendants_graph + object_descendants_graph.apply(ocel) + + def test_ocel_inheritance_graph_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.graphs import object_inheritance_graph + object_inheritance_graph.apply(ocel) + + def test_ocel_cobirth_graph_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.graphs import object_cobirth_graph + object_cobirth_graph.apply(ocel) + + def test_ocel_codeath_graph_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.graphs import object_codeath_graph + object_codeath_graph.apply(ocel) + + def test_ocel_description_non_simpl_interface(self): + import pm4py + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + from pm4py.algo.transformation.ocel.description.variants import variant1 + variant1.apply(ocel) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/passed_time.py b/pm4py/tests/passed_time.py new file mode 100644 index 0000000000000000000000000000000000000000..924577e4391ece5d4bb881b19a258871c6a4f010 --- /dev/null +++ b/pm4py/tests/passed_time.py @@ -0,0 +1,25 @@ +import os +import unittest + +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.util import dataframe_utils +from pm4py.util import constants, pandas_utils +from pm4py.statistics.passed_time.log import algorithm as log_passed_time +from pm4py.statistics.passed_time.pandas import algorithm as df_passed_time + + +class PassedTimeTest(unittest.TestCase): + def test_passedtime_prepost_log(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + prepost = log_passed_time.apply(log, "decide", variant=log_passed_time.Variants.PREPOST) + del prepost + + def test_passedtime_prepost_df(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + prepost = df_passed_time.apply(df, "decide", variant=df_passed_time.Variants.PREPOST) + del prepost + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/petri_imp_exp_test.py b/pm4py/tests/petri_imp_exp_test.py new file mode 100644 index 0000000000000000000000000000000000000000..c1fa161ea0db11185912cfd7191e53ed24eb8191 --- /dev/null +++ b/pm4py/tests/petri_imp_exp_test.py @@ -0,0 +1,78 @@ +import os +import unittest + +from pm4py.algo.conformance.alignments.petri_net import algorithm as align_alg +from pm4py.algo.conformance.tokenreplay import algorithm as token_replay +from pm4py.objects import petri_net +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.petri_net.exporter import exporter as petri_exporter +from pm4py.objects.petri_net.importer import importer as petri_importer +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from tests.constants import INPUT_DATA_DIR, OUTPUT_DATA_DIR +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + + +class PetriImportExportTest(unittest.TestCase): + def test_importingExportingPetri(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + imported_petri1, marking1, fmarking1 = petri_importer.apply( + os.path.join(INPUT_DATA_DIR, "running-example.pnml")) + petri_exporter.apply(imported_petri1, marking1, os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + imported_petri2, marking2, fmarking2 = petri_importer.apply( + os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + + self.assertEqual(sorted([x.name for x in imported_petri1.places]), + sorted([x.name for x in imported_petri2.places])) + self.assertEqual(sorted([x.name for x in imported_petri1.transitions]), + sorted([x.name for x in imported_petri2.transitions])) + self.assertEqual(sorted([x.source.name + x.target.name for x in imported_petri1.arcs]), + sorted([x.source.name + x.target.name for x in imported_petri2.arcs])) + self.assertEqual([x.name for x in marking1], [x.name for x in marking2]) + os.remove(os.path.join(OUTPUT_DATA_DIR, "running-example.pnml")) + + def test_importingPetriLogTokenReplay(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + imported_petri1, marking1, fmarking1 = petri_importer.apply( + os.path.join(INPUT_DATA_DIR, "running-example.pnml")) + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + aligned_traces = token_replay.apply(log, imported_petri1, marking1, fmarking1) + del aligned_traces + + def test_importingPetriLogAlignment(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + imported_petri1, marking1, fmarking1 = petri_importer.apply( + os.path.join(INPUT_DATA_DIR, "running-example.pnml")) + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + final_marking = petri_net.obj.Marking() + for p in imported_petri1.places: + if not p.out_arcs: + final_marking[p] = 1 + for trace in log: + cf_result = align_alg.apply(trace, imported_petri1, marking1, final_marking, + variant=align_alg.VERSION_DIJKSTRA_NO_HEURISTICS)['alignment'] + is_fit = True + for couple in cf_result: + if not (couple[0] == couple[1] or couple[0] == ">>" and couple[1] is None): + is_fit = False + if not is_fit: + raise Exception("should be fit") + + def test_s_components(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + s_comps = petri_net.utils.petri_utils.get_s_components_from_petri(net, im, fm) + del s_comps + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/pm_extr_test/bas_inductive_test.py b/pm4py/tests/pm_extr_test/bas_inductive_test.py new file mode 100644 index 0000000000000000000000000000000000000000..1529e7331fc940630fe1cf9d8fb4799a6b64f4d5 --- /dev/null +++ b/pm4py/tests/pm_extr_test/bas_inductive_test.py @@ -0,0 +1,85 @@ +import os +import traceback + +from pm4py.util import constants, pandas_utils + +import time +import pm4py +from pm4py.algo.discovery.inductive import algorithm as im_clean +from pm4py.statistics.variants.log import get as variants_get + +LOGS_FOLDER = "../compressed_input_data" +CLASSIFIER = "@@classifier" +ENABLE_ALIGNMENTS = True +NOISE_THRESHOLD = 0.2 +VARIANT = im_clean.Variants.IM +ENABLE_MULTIPROCESSING = False + + +if __name__ == "__main__": + for log_name in os.listdir(LOGS_FOLDER): + if "xes" in log_name or "parquet" in log_name: + try: + log_path = os.path.join(LOGS_FOLDER, log_name) + print("") + print(log_path) + if "xes" in log_name: + from pm4py.statistics.attributes.log import get as attributes_get_log + + log = pm4py.read_xes(log_path, return_legacy_log_object=True) + for trace in log: + for event in trace: + if True and "lifecycle:transition" in event: + event["@@classifier"] = event["concept:name"] + "+" + event["lifecycle:transition"] + # event["concept:name"] = event["concept:name"] + "+" + event["lifecycle:transition"] + else: + event["@@classifier"] = event["concept:name"] + activities = set(attributes_get_log.get_attribute_values(log, CLASSIFIER).keys()) + variants = variants_get.get_variants(log, parameters={"pm4py:param:activity_key": CLASSIFIER}) + fp_log = pm4py.algo.discovery.footprints.log.variants.entire_event_log.apply(log, parameters={ + "pm4py:param:activity_key": CLASSIFIER}) + elif "parquet" in log_name: + from pm4py.statistics.attributes.pandas import get as attributes_get_pandas + + dataframe = pandas_utils.DATAFRAME.read_parquet(log_path) + activities = set(attributes_get_pandas.get_attribute_values(dataframe, CLASSIFIER).keys()) + variants = pm4py.get_variants_as_tuples(dataframe) + variants = {",".join(x): y for x, y in variants.items()} + fp_log = pm4py.algo.discovery.footprints.log.variants.entire_dataframe.apply(dataframe) + print("start tree_im_clean") + tree_im_clean = im_clean.apply(log, variant=VARIANT, parameters={"pm4py:param:activity_key": CLASSIFIER, + "noise_threshold": NOISE_THRESHOLD, "multiprocessing": ENABLE_MULTIPROCESSING}) + print(tree_im_clean) + print("end tree_im_clean") + + fp_tree_clean = pm4py.algo.discovery.footprints.tree.variants.bottomup.apply(tree_im_clean) + + if not activities.issubset(fp_tree_clean["activities"]): + print("ALERT! activities of the tree are less than the ones in the log!") + print(activities.difference(fp_tree_clean["activities"])) + time.sleep(5) + + fp_conf_im_clean = pm4py.algo.conformance.footprints.variants.log_extensive.apply(fp_log, fp_tree_clean) + fitness_im_clean = pm4py.algo.conformance.footprints.util.evaluation.fp_fitness(fp_log, fp_tree_clean, + fp_conf_im_clean) + + if ENABLE_ALIGNMENTS: + from pm4py.algo.conformance.alignments.process_tree.variants import search_graph_pt + + alignments_clean = search_graph_pt.apply(log, tree_im_clean, parameters={ + search_graph_pt.Parameters.ACTIVITY_KEY: CLASSIFIER}) + from pm4py.algo.evaluation.replay_fitness.variants import alignment_based + + fitness_al_clean = alignment_based.evaluate(alignments_clean)["average_trace_fitness"] + if fitness_al_clean < fitness_im_clean: + print("ALERT", fitness_al_clean, fitness_im_clean) + time.sleep(5) + #input() + else: + print("OK ALIGNMENTS", fitness_al_clean) + + precision_im_clean = pm4py.algo.conformance.footprints.util.evaluation.fp_precision(fp_log, fp_tree_clean) + print("IMCLEAN fp-fitness=%.3f fp-precision=%.3f" % (fitness_im_clean, precision_im_clean)) + except: + traceback.print_exc() + input() diff --git a/pm4py/tests/pm_extr_test/bpmn_heu_massive_test.py b/pm4py/tests/pm_extr_test/bpmn_heu_massive_test.py new file mode 100644 index 0000000000000000000000000000000000000000..31284a809c2a3bf96885b4f25060c38bdaa37321 --- /dev/null +++ b/pm4py/tests/pm_extr_test/bpmn_heu_massive_test.py @@ -0,0 +1,42 @@ +import os +import tempfile + +import pm4py +from pm4py.objects.bpmn.exporter import exporter +from pm4py.objects.bpmn.importer import importer +from pm4py.objects.bpmn.layout import layouter +from pm4py.visualization.petri_net import visualizer as pn_visualizer + +LOGS_FOLDER = "../compressed_input_data" + +for log_name in os.listdir(LOGS_FOLDER): + if "xes" in log_name: + bpmn_output_path = tempfile.NamedTemporaryFile(suffix=".bpmn") + bpmn_output_path.close() + bpmn_output_path = bpmn_output_path.name + log_path = os.path.join(LOGS_FOLDER, log_name) + print("") + print(log_path) + log = pm4py.read_xes(log_path) + fp_log = pm4py.algo.discovery.footprints.log.variants.entire_event_log.apply(log) + net, im, fm = pm4py.discover_petri_net_heuristics(log) + fitness0 = pm4py.evaluate_fitness_alignments(log, net, im, fm) + precision0 = pm4py.evaluate_precision_alignments(log, net, im, fm) + print("fitness 0", fitness0) + print("precision 0", precision0) + bpmn_graph = pm4py.objects.conversion.wf_net.variants.to_bpmn.apply(net, im, fm) + bpmn_graph = layouter.apply(bpmn_graph) + exporter.apply(bpmn_graph, bpmn_output_path) + bpmn_graph = importer.apply(bpmn_output_path) + bpmn_graph = layouter.apply(bpmn_graph) + # gets the net back + net, im, fm = pm4py.objects.conversion.bpmn.variants.to_petri_net.apply(bpmn_graph) + gviz = pn_visualizer.apply(net, im, fm) + pn_visualizer.view(gviz) + fitness1 = pm4py.evaluate_fitness_alignments(log, net, im, fm) + precision1 = pm4py.evaluate_precision_alignments(log, net, im, fm) + print("fitness 1", fitness1, fitness0 == fitness1) + print("precision 1", precision1, precision0 == precision1) + if not (fitness0 == fitness1 and precision0 == precision1): + print("ALERT") + input() diff --git a/pm4py/tests/pm_extr_test/bpmn_pt_massive_test.py b/pm4py/tests/pm_extr_test/bpmn_pt_massive_test.py new file mode 100644 index 0000000000000000000000000000000000000000..9a7b929de5c1eaeb433e117f6230c89f0ade0499 --- /dev/null +++ b/pm4py/tests/pm_extr_test/bpmn_pt_massive_test.py @@ -0,0 +1,50 @@ +import os + +import pm4py +from pm4py.objects.process_tree.utils import generic +from pm4py.objects.bpmn.layout import layouter +from pm4py.objects.bpmn.exporter import exporter +from pm4py.objects.bpmn.importer import importer +import tempfile + +LOGS_FOLDER = "../compressed_input_data" + +for log_name in os.listdir(LOGS_FOLDER): + if "xes" in log_name: + bpmn_output_path = tempfile.NamedTemporaryFile(suffix=".bpmn") + bpmn_output_path.close() + bpmn_output_path = bpmn_output_path.name + log_path = os.path.join(LOGS_FOLDER, log_name) + print("") + print(log_path) + log = pm4py.read_xes(log_path) + fp_log = pm4py.algo.discovery.footprints.log.variants.entire_event_log.apply(log) + tree = pm4py.discover_process_tree_inductive(log) + generic.tree_sort(tree) + fp_tree = pm4py.algo.discovery.footprints.tree.variants.bottomup.apply(tree) + fp_conf = pm4py.algo.conformance.footprints.variants.log_extensive.apply(fp_log, fp_tree) + fitness0 = pm4py.algo.conformance.footprints.util.evaluation.fp_fitness(fp_log, fp_tree, fp_conf) + precision0 = pm4py.algo.conformance.footprints.util.evaluation.fp_precision(fp_log, fp_tree) + print("fitness 0 = ", fitness0) + print("precision 0 = ", precision0) + bpmn_graph = pm4py.objects.conversion.process_tree.variants.to_bpmn.apply(tree) + bpmn_graph = layouter.apply(bpmn_graph) + exporter.apply(bpmn_graph, bpmn_output_path) + bpmn_graph = importer.apply(bpmn_output_path) + bpmn_graph = layouter.apply(bpmn_graph) + # gets the tree back + net, im, fm = pm4py.objects.conversion.bpmn.variants.to_petri_net.apply(bpmn_graph) + new_tree = pm4py.objects.conversion.wf_net.variants.to_process_tree.apply(net, im, fm) + generic.tree_sort(new_tree) + print(tree) + print(new_tree) + print("are the tree equal?", tree == new_tree) + fp_tree = pm4py.algo.discovery.footprints.tree.variants.bottomup.apply(new_tree) + fp_conf = pm4py.algo.conformance.footprints.variants.log_extensive.apply(fp_log, fp_tree) + fitness1 = pm4py.algo.conformance.footprints.util.evaluation.fp_fitness(fp_log, fp_tree, fp_conf) + precision1 = pm4py.algo.conformance.footprints.util.evaluation.fp_precision(fp_log, fp_tree) + print("fitness 1 = ", fitness1, fitness0 == fitness1) + print("precision 1 = ", precision1, precision0 == precision1) + if not (fitness0 == fitness1 and precision0 == precision1 and tree == new_tree): + print("ALERT") + input() diff --git a/pm4py/tests/pm_extr_test/bpmn_pt_net_massive_test.py b/pm4py/tests/pm_extr_test/bpmn_pt_net_massive_test.py new file mode 100644 index 0000000000000000000000000000000000000000..fec947e78c10252f41cbc4182bd27baf83fd1e2e --- /dev/null +++ b/pm4py/tests/pm_extr_test/bpmn_pt_net_massive_test.py @@ -0,0 +1,51 @@ +import os + +import pm4py +from pm4py.objects.process_tree.utils import generic +from pm4py.objects.bpmn.layout import layouter +from pm4py.objects.bpmn.exporter import exporter +from pm4py.objects.bpmn.importer import importer +import tempfile + +LOGS_FOLDER = "../compressed_input_data" + +for log_name in os.listdir(LOGS_FOLDER): + if "xes" in log_name: + bpmn_output_path = tempfile.NamedTemporaryFile(suffix=".bpmn") + bpmn_output_path.close() + bpmn_output_path = bpmn_output_path.name + log_path = os.path.join(LOGS_FOLDER, log_name) + print("") + print(log_path) + log = pm4py.read_xes(log_path) + fp_log = pm4py.algo.discovery.footprints.log.variants.entire_event_log.apply(log) + tree = pm4py.discover_process_tree_inductive(log) + generic.tree_sort(tree) + fp_tree = pm4py.algo.discovery.footprints.tree.variants.bottomup.apply(tree) + fp_conf = pm4py.algo.conformance.footprints.variants.log_extensive.apply(fp_log, fp_tree) + fitness0 = pm4py.algo.conformance.footprints.util.evaluation.fp_fitness(fp_log, fp_tree, fp_conf) + precision0 = pm4py.algo.conformance.footprints.util.evaluation.fp_precision(fp_log, fp_tree) + print("fitness 0 = ", fitness0) + print("precision 0 = ", precision0) + net, im, fm = pm4py.objects.conversion.process_tree.variants.to_petri_net.apply(tree) + bpmn_graph = pm4py.objects.conversion.wf_net.variants.to_bpmn.apply(net, im, fm) + bpmn_graph = layouter.apply(bpmn_graph) + exporter.apply(bpmn_graph, bpmn_output_path) + bpmn_graph = importer.apply(bpmn_output_path) + bpmn_graph = layouter.apply(bpmn_graph) + # gets the tree back + net, im, fm = pm4py.objects.conversion.bpmn.variants.to_petri_net.apply(bpmn_graph) + new_tree = pm4py.objects.conversion.wf_net.variants.to_process_tree.apply(net, im, fm) + generic.tree_sort(new_tree) + print(tree) + print(new_tree) + print("are the tree equal?", tree == new_tree) + fp_tree = pm4py.algo.discovery.footprints.tree.variants.bottomup.apply(new_tree) + fp_conf = pm4py.algo.conformance.footprints.variants.log_extensive.apply(fp_log, fp_tree) + fitness1 = pm4py.algo.conformance.footprints.util.evaluation.fp_fitness(fp_log, fp_tree, fp_conf) + precision1 = pm4py.algo.conformance.footprints.util.evaluation.fp_precision(fp_log, fp_tree) + print("fitness 1 = ", fitness1, fitness0 == fitness1) + print("precision 1 = ", precision1, precision0 == precision1) + if not (fitness0 == fitness1 and precision0 == precision1 and tree == new_tree): + print("ALERT") + input() diff --git a/pm4py/tests/pm_extr_test/extraction_test.py b/pm4py/tests/pm_extr_test/extraction_test.py new file mode 100644 index 0000000000000000000000000000000000000000..d1405bd04818bc10dcd57a87716ac25c060ccbe4 --- /dev/null +++ b/pm4py/tests/pm_extr_test/extraction_test.py @@ -0,0 +1,367 @@ +import inspect +import os +import sys +import traceback + +if __name__ == "__main__": + currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + parentdir = os.path.dirname(currentdir) + parentdir2 = os.path.dirname(parentdir) + sys.path.insert(0, parentdir) + sys.path.insert(0, parentdir2) + import time + + from pm4py.objects.log.importer.xes import importer as xes_importer + from pm4py.algo.discovery.inductive import algorithm as inductive + from pm4py.algo.conformance.alignments.petri_net.variants import state_equation_a_star + from pm4py.algo.discovery.footprints import algorithm as footprints_discovery + from pm4py.algo.conformance.footprints import algorithm as footprints_conformance + from pm4py.algo.discovery.alpha import algorithm as alpha + from pm4py.algo.discovery.heuristics import algorithm as heuristics_miner + from pm4py.objects.conversion.process_tree import converter as pt_converter + from pm4py.algo.evaluation.replay_fitness import algorithm as fitness_evaluator + from pm4py.algo.evaluation.precision import algorithm as precision_evaluator + from pm4py.algo.evaluation.simplicity import algorithm as simplicity_evaluator + from pm4py.algo.evaluation.generalization import algorithm as generalization_evaluator + from pm4py.objects.log.util import insert_classifier + from pm4py.objects.petri_net.exporter import exporter as pnml_exporter + from pm4py.visualization.petri_net import visualizer as petri_vis + from pm4py.visualization.common.save import save as vis_save + from pm4py import util as pmutil + from pm4py.algo.analysis.woflan import algorithm as woflan + + + def get_elonged_string(stru): + nchar = 30 + + if len(stru) >= nchar: + return stru + + return stru + " ".join([""] * (nchar - len(stru))) + + + def get_elonged_float(value): + stru = "%.3f" % value + + return get_elonged_string(stru) + + + ENABLE_VISUALIZATIONS = False + ENABLE_VISUALIZATIONS_INDUCTIVE = False + ENABLE_ALIGNMENTS = False + ENABLE_PRECISION = True + ENABLE_PETRI_EXPORTING = False + ENABLE_PETRI_EXPORTING_DEBUG = True + CHECK_SOUNDNESS = True + WOFLAN_RETURN_ASAP = True + WOFLAN_PRINT_DIAGNOSTICS = True + WOFLAN_RETURN_DIAGNOSTICS = True + INDUCTIVE_MINER_VARIANT = inductive.Variants.IM_CLEAN + ALIGN_VARIANT = state_equation_a_star + logFolder = os.path.join("..", "compressed_input_data") + pnmlFolder = "pnml_folder" + pngFolder = "png_folder" + times_tokenreplay_alpha = {} + times_tokenreplay_imdf = {} + times_footprints_imdf = {} + times_alignments_imdf = {} + fitness_token_alpha = {} + fitness_token_imdf = {} + fitness_footprints_imdf = {} + fitness_align_imdf = {} + precision_alpha = {} + precision_imdf = {} + simplicity_alpha = {} + simplicity_imdf = {} + generalization_alpha = {} + generalization_imdf = {} + + + def write_report(): + f = open("report.txt", "w") + + f.write("\n\n") + f.write("Fitness on Alpha and Inductive models - measured by token-based replay and alignments\n") + f.write("----\n") + f.write( + get_elonged_string("log") + "\t" + get_elonged_string("fitness_token_alpha") + "\t" + get_elonged_string( + "times_tokenreplay_alpha") + "\t" + get_elonged_string( + "fitness_token_imdf") + "\t" + get_elonged_string("times_tokenreplay_imdf") + "\t" + get_elonged_string( + "fitness_footprints_imdf") + "\t" + get_elonged_string("times_footprints_imdf")) + if ENABLE_ALIGNMENTS: + f.write( + "\t" + get_elonged_string("fitness_align_imdf") + "\t" + get_elonged_string("times_alignments_imdf")) + f.write("\n") + for this_logname in precision_alpha: + # F.write("%s\t\t%.3f\t\t%.3f\n" % (logName, fitness_token_alpha[logName], fitness_token_imdf[logName])) + f.write(get_elonged_string(this_logname)) + f.write("\t") + f.write(get_elonged_float(fitness_token_alpha[this_logname])) + f.write("\t") + f.write(get_elonged_float(times_tokenreplay_alpha[this_logname])) + f.write("\t") + f.write(get_elonged_float(fitness_token_imdf[this_logname])) + f.write("\t") + f.write(get_elonged_float(times_tokenreplay_imdf[this_logname])) + f.write("\t") + f.write(get_elonged_float(fitness_footprints_imdf[this_logname])) + f.write("\t") + f.write(get_elonged_float(times_footprints_imdf[this_logname])) + if ENABLE_ALIGNMENTS: + f.write("\t") + f.write(get_elonged_float(fitness_align_imdf[this_logname])) + f.write("\t") + f.write(get_elonged_float(times_alignments_imdf[this_logname])) + f.write("\n") + f.write("\n\n") + f.write("Precision measured by ETConformance where activated transitions are retrieved using token replay\n") + f.write("----\n") + f.write(get_elonged_string("log") + "\t" + get_elonged_string("precision_alpha") + "\t" + get_elonged_string( + "precision_imdf") + "\n") + for this_logname in precision_alpha: + f.write(get_elonged_string(this_logname)) + f.write("\t") + f.write(get_elonged_float(precision_alpha[this_logname])) + f.write("\t") + f.write(get_elonged_float(precision_imdf[this_logname])) + f.write("\n") + f.write("\n\n") + f.write("Generalization based on token replay transition recall\n") + f.write("----\n") + f.write( + get_elonged_string("log") + "\t" + get_elonged_string("generalization_alpha") + "\t" + get_elonged_string( + "generalization_imdf") + "\n") + for this_logname in precision_alpha: + f.write(get_elonged_string(this_logname)) + f.write("\t") + f.write(get_elonged_float(generalization_alpha[this_logname])) + f.write("\t") + f.write(get_elonged_float(generalization_imdf[this_logname])) + f.write("\n") + f.write("\n\n") + f.write("Simplicity based on inverse arc degree\n") + f.write("----\n") + f.write(get_elonged_string("log") + "\t" + get_elonged_string("simplicity_alpha") + "\t" + get_elonged_string( + "simplicity_imdf") + "\n") + for this_logname in precision_alpha: + f.write(get_elonged_string(this_logname)) + f.write("\t") + f.write(get_elonged_float(simplicity_alpha[this_logname])) + f.write("\t") + f.write(get_elonged_float(simplicity_imdf[this_logname])) + f.write("\n") + f.write("\n") + f.close() + + + for logName in os.listdir(logFolder): + if "." in logName: + logNamePrefix = logName.split(".")[0] + logExtension = logName[len(logNamePrefix) + 1:] + + print("\nelaborating " + logName) + + logPath = os.path.join(logFolder, logName) + if "xes" in logExtension: + log = xes_importer.apply(logPath, variant=xes_importer.Variants.CHUNK_REGEX) + + log, classifier_key = insert_classifier.search_act_class_attr(log, force_activity_transition_insertion=True) + + print("loaded log") + + activity_key = "concept:name" + if classifier_key is not None: + activity_key = classifier_key + + parameters_discovery = {pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY: activity_key, + pmutil.constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: activity_key} + t1 = time.time() + alpha_model, alpha_initial_marking, alpha_final_marking = alpha.apply(log, parameters=parameters_discovery) + if ENABLE_PETRI_EXPORTING: + pnml_exporter.export_net(alpha_model, alpha_initial_marking, + os.path.join(pnmlFolder, logNamePrefix + "_alpha.pnml"), + final_marking=alpha_final_marking) + t2 = time.time() + print("time interlapsed for calculating Alpha Model", (t2 - t1)) + if CHECK_SOUNDNESS: + try: + res_woflan, diagn = woflan.apply(alpha_model, alpha_initial_marking, alpha_final_marking, + parameters={"return_asap_when_not_sound": WOFLAN_RETURN_ASAP, + "print_diagnostics": WOFLAN_PRINT_DIAGNOSTICS, + "return_diagnostics": WOFLAN_RETURN_DIAGNOSTICS}) + print("alpha woflan", res_woflan) + except: + if ENABLE_PETRI_EXPORTING_DEBUG: + exce = traceback.format_exc() + pnml_exporter.export_net(alpha_model, alpha_initial_marking, + os.path.join(pnmlFolder, logNamePrefix + "_alpha.pnml"), + final_marking=alpha_final_marking) + F = open(logNamePrefix + "_alpha.txt", "w") + F.write(exce) + F.close() + t1 = time.time() + heu_model, heu_initial_marking, heu_final_marking = heuristics_miner.apply(log, + parameters=parameters_discovery) + if ENABLE_PETRI_EXPORTING: + pnml_exporter.export_net(heu_model, heu_initial_marking, + os.path.join(pnmlFolder, logNamePrefix + "_heuristics.pnml"), + final_marking=heu_final_marking) + t2 = time.time() + print("time interlapsed for calculating Heuristics Model", (t2 - t1)) + if CHECK_SOUNDNESS: + try: + res_woflan, diagn = woflan.apply(heu_model, heu_initial_marking, heu_initial_marking, + parameters={"return_asap_when_not_sound": WOFLAN_RETURN_ASAP, + "print_diagnostics": WOFLAN_PRINT_DIAGNOSTICS, + "return_diagnostics": WOFLAN_RETURN_DIAGNOSTICS}) + print("heuristics woflan", res_woflan) + except: + if ENABLE_PETRI_EXPORTING_DEBUG: + exce = traceback.format_exc() + pnml_exporter.export_net(heu_model, heu_initial_marking, + os.path.join(pnmlFolder, logNamePrefix + "_heuristics.pnml"), + final_marking=heu_final_marking) + F = open(logNamePrefix + "_heuristics.txt", "w") + F.write(exce) + F.close() + + t1 = time.time() + tree = inductive.apply(log, parameters=parameters_discovery, variant=INDUCTIVE_MINER_VARIANT) + # print(tree) + + inductive_model, inductive_im, inductive_fm = pt_converter.apply(tree, + variant=pt_converter.Variants.TO_PETRI_NET) + + """inductive_model, inductive_im, inductive_fm = inductive.apply(log, parameters=parameters_discovery, + variant=INDUCTIVE_MINER_VARIANT)""" + if ENABLE_PETRI_EXPORTING: + pnml_exporter.export_net(inductive_model, inductive_im, + os.path.join(pnmlFolder, logNamePrefix + "_inductive.pnml"), + final_marking=inductive_fm) + """ + generated_log = pt_semantics.generate_log(tree) + print("first trace of log", [x["concept:name"] for x in generated_log[0]]) + """ + t2 = time.time() + print("time interlapsed for calculating Inductive Model", (t2 - t1)) + if CHECK_SOUNDNESS: + res_woflan, diagn = woflan.apply(inductive_model, inductive_im, inductive_fm, + parameters={"return_asap_when_not_sound": WOFLAN_RETURN_ASAP, + "print_diagnostics": WOFLAN_PRINT_DIAGNOSTICS, + "return_diagnostics": WOFLAN_RETURN_DIAGNOSTICS}) + print("inductive woflan", res_woflan) + + parameters = {fitness_evaluator.Variants.TOKEN_BASED.value.Parameters.ACTIVITY_KEY: activity_key, + fitness_evaluator.Variants.TOKEN_BASED.value.Parameters.ATTRIBUTE_KEY: activity_key, + "align_variant": ALIGN_VARIANT, + "format": "png"} + + t1 = time.time() + fitness_token_alpha[logName] = \ + fitness_evaluator.apply(log, alpha_model, alpha_initial_marking, alpha_final_marking, + parameters=parameters, variant=fitness_evaluator.Variants.TOKEN_BASED)[ + 'perc_fit_traces'] + print(str(time.time()) + " fitness_token_alpha for " + logName + " succeeded! " + str( + fitness_token_alpha[logName])) + t2 = time.time() + times_tokenreplay_alpha[logName] = t2 - t1 + + t1 = time.time() + fitness_token_imdf[logName] = \ + fitness_evaluator.apply(log, inductive_model, inductive_im, inductive_fm, parameters=parameters, + variant=fitness_evaluator.Variants.TOKEN_BASED)[ + 'perc_fit_traces'] + print(str(time.time()) + " fitness_token_inductive for " + logName + " succeeded! " + str( + fitness_token_imdf[logName])) + t2 = time.time() + times_tokenreplay_imdf[logName] = t2 - t1 + + t1 = time.time() + fp_log = footprints_discovery.apply(log, parameters=parameters) + fp_tree = footprints_discovery.apply(tree, parameters=parameters) + conf = footprints_conformance.apply(fp_log, fp_tree, + variant=footprints_conformance.Variants.TRACE_EXTENSIVE, + parameters=parameters) + # fitness_fp = float(len([x for x in conf if len(x) == 0])) / float(len(conf)) * 100.0 if conf else 0.0 + fitness_fp = float(len([x for x in conf if x["is_footprints_fit"]])) / float( + len(conf)) * 100.0 if conf else 0.0 + t2 = time.time() + fitness_footprints_imdf[logName] = fitness_fp + times_footprints_imdf[logName] = t2 - t1 + + if ENABLE_ALIGNMENTS: + t1 = time.time() + fitness_align_imdf[logName] = \ + fitness_evaluator.apply(log, inductive_model, inductive_im, inductive_fm, + variant=fitness_evaluator.Variants.ALIGNMENT_BASED, parameters=parameters)[ + 'percFitTraces'] + print(str(time.time()) + " fitness_token_align for " + logName + " succeeded! " + str( + fitness_align_imdf[logName])) + t2 = time.time() + times_alignments_imdf[logName] = t2 - t1 + + if ENABLE_PRECISION: + precision_alpha[logName] = precision_evaluator.apply(log, alpha_model, alpha_initial_marking, + alpha_final_marking, + variant=precision_evaluator.Variants.ETCONFORMANCE_TOKEN, + parameters=parameters) + else: + precision_alpha[logName] = 0.0 + print(str(time.time()) + " precision_alpha for " + logName + " succeeded! " + str(precision_alpha[logName])) + + generalization_alpha[logName] = generalization_evaluator.apply(log, alpha_model, alpha_initial_marking, + alpha_final_marking, parameters=parameters) + print(str(time.time()) + " generalization_alpha for " + logName + " succeeded! " + str( + generalization_alpha[logName])) + simplicity_alpha[logName] = simplicity_evaluator.apply(alpha_model, parameters=parameters) + print( + str(time.time()) + " simplicity_alpha for " + logName + " succeeded! " + str(simplicity_alpha[logName])) + + if ENABLE_PRECISION: + precision_imdf[logName] = precision_evaluator.apply(log, inductive_model, inductive_im, + inductive_fm, + variant=precision_evaluator.Variants.ETCONFORMANCE_TOKEN, + parameters=parameters) + else: + precision_imdf[logName] = 0.0 + print(str(time.time()) + " precision_imdf for " + logName + " succeeded! " + str(precision_imdf[logName])) + + generalization_imdf[logName] = generalization_evaluator.apply(log, inductive_model, inductive_im, + inductive_fm, parameters=parameters) + print(str(time.time()) + " generalization_imdf for " + logName + " succeeded! " + str( + generalization_imdf[logName])) + simplicity_imdf[logName] = simplicity_evaluator.apply(inductive_model, parameters=parameters) + print(str(time.time()) + " simplicity_imdf for " + logName + " succeeded! " + str(simplicity_imdf[logName])) + + write_report() + + if ENABLE_VISUALIZATIONS: + try: + alpha_vis = petri_vis.apply(alpha_model, alpha_initial_marking, alpha_final_marking, log=log, + parameters=parameters, variant=petri_vis.Variants.FREQUENCY) + vis_save(alpha_vis, os.path.join(pngFolder, logNamePrefix + "_alpha.png")) + print(str(time.time()) + " alpha visualization for " + logName + " succeeded!") + except: + print(str(time.time()) + " alpha visualization for " + logName + " failed!") + traceback.print_exc() + + try: + heuristics_vis = petri_vis.apply(heu_model, heu_initial_marking, heu_final_marking, + log=log, parameters=parameters, + variant=petri_vis.FREQUENCY_DECORATION) + vis_save(heuristics_vis, os.path.join(pngFolder, logNamePrefix + "_heuristics.png")) + print(str(time.time()) + " heuristics visualization for " + logName + " succeeded!") + except: + print(str(time.time()) + " heuristics visualization for " + logName + " failed!") + traceback.print_exc() + + if ENABLE_VISUALIZATIONS or ENABLE_VISUALIZATIONS_INDUCTIVE: + try: + inductive_vis = petri_vis.apply(inductive_model, inductive_im, inductive_fm, + log=log, parameters=parameters, + variant=petri_vis.PERFORMANCE_DECORATION) + vis_save(inductive_vis, os.path.join(pngFolder, logNamePrefix + "_inductive.png")) + print(str(time.time()) + " inductive visualization for " + logName + " succeeded!") + except: + print(str(time.time()) + " inductive visualization for " + logName + " failed!") + traceback.print_exc() diff --git a/pm4py/tests/pm_extr_test/report.txt b/pm4py/tests/pm_extr_test/report.txt new file mode 100644 index 0000000000000000000000000000000000000000..e65641121bbcd2f7d4093505a6605a922c59ea53 --- /dev/null +++ b/pm4py/tests/pm_extr_test/report.txt @@ -0,0 +1,57 @@ + + +Fitness on Alpha and Inductive models - measured by token-based replay and alignments +---- +log fitness_token_alpha times_tokenreplay_alpha fitness_token_imdf times_tokenreplay_imdf fitness_align_imdf times_alignments_imdf +03_repairExample.xes.gz 0.000 0.061 99.819 0.107 99.819 0.450 +07_bpic2013_problems.xes.gz 0.000 0.185 69.065 0.357 69.065 21.773 +04_reviewing.xes.gz 100.000 0.164 0.000 0.201 0.000 12.864 +09_a32f0n00.xes.gz 69.100 1.547 100.000 1.764 100.000 11.980 +06_bpic2013_incidents.xes.gz 0.013 2.268 26.225 5.302 26.225 356.901 +05_bpic2017.xes.gz 0.000 0.371 100.000 0.323 100.000 0.219 +02_teleclaims.xes.gz 5.552 0.068 43.736 0.063 43.736 0.189 +01_running-example.xes.gz 100.000 0.003 100.000 0.004 100.000 0.011 +08_receipt.xes.gz 0.000 0.196 99.791 0.166 99.791 1.709 + + +Precision measured by ETConformance where activated transitions are retrieved using token replay +---- +log precision_alpha precision_imdf +03_repairExample.xes.gz 0.983 0.246 +07_bpic2013_problems.xes.gz 0.000 0.836 +04_reviewing.xes.gz 0.738 0.680 +09_a32f0n00.xes.gz 0.603 0.480 +06_bpic2013_incidents.xes.gz 0.000 0.405 +05_bpic2017.xes.gz 0.641 0.760 +02_teleclaims.xes.gz 0.327 0.164 +01_running-example.xes.gz 0.733 0.733 +08_receipt.xes.gz 0.999 0.156 + + +Generalization based on token replay transition recall +---- +log generalization_alpha generalization_imdf +03_repairExample.xes.gz 0.967 0.966 +07_bpic2013_problems.xes.gz 0.849 0.861 +04_reviewing.xes.gz 0.895 0.829 +09_a32f0n00.xes.gz 0.963 0.945 +06_bpic2013_incidents.xes.gz 0.864 0.894 +05_bpic2017.xes.gz 0.991 0.985 +02_teleclaims.xes.gz 0.978 0.951 +01_running-example.xes.gz 0.526 0.550 +08_receipt.xes.gz 0.755 0.853 + + +Simplicity based on inverse arc degree +---- +log simplicity_alpha simplicity_imdf +03_repairExample.xes.gz 0.667 0.667 +07_bpic2013_problems.xes.gz 1.000 0.778 +04_reviewing.xes.gz 0.725 0.750 +09_a32f0n00.xes.gz 0.800 0.778 +06_bpic2013_incidents.xes.gz 0.789 0.649 +05_bpic2017.xes.gz 0.267 0.655 +02_teleclaims.xes.gz 0.339 0.642 +01_running-example.xes.gz 0.652 0.806 +08_receipt.xes.gz 0.160 0.606 + diff --git a/pm4py/tests/role_detection.py b/pm4py/tests/role_detection.py new file mode 100644 index 0000000000000000000000000000000000000000..eb7699d600512e0bbad0a7449f6ba4c17ff4ac8e --- /dev/null +++ b/pm4py/tests/role_detection.py @@ -0,0 +1,31 @@ +import unittest +import os + +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.util import dataframe_utils +from pm4py.util import constants, pandas_utils +from pm4py.algo.organizational_mining.roles import algorithm as role_mining + + +class RoleDetectionTest(unittest.TestCase): + def test_role_running_csv(self): + df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + roles = role_mining.apply(df) + + def test_role_running_xes(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + roles = role_mining.apply(log) + + def test_role_receipt_csv(self): + df = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + roles = role_mining.apply(df) + + def test_role_receipt_xes(self): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "receipt.xes")) + roles = role_mining.apply(log) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/simplified_interface.py b/pm4py/tests/simplified_interface.py new file mode 100644 index 0000000000000000000000000000000000000000..3e93b001c7701d3b4afb68403de6bf265fe147fa --- /dev/null +++ b/pm4py/tests/simplified_interface.py @@ -0,0 +1,1126 @@ +import importlib.util +import os +import unittest + +import pm4py +from pm4py.objects.bpmn.obj import BPMN +from pm4py.objects.petri_net.obj import PetriNet +from pm4py.objects.process_tree.obj import ProcessTree +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils +from pm4py.objects.log.importer.xes import importer as xes_importer + + +class SimplifiedInterfaceTest(unittest.TestCase): + def test_csv(self): + df = pandas_utils.read_csv("input_data/running-example.csv") + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + df["case:concept:name"] = df["case:concept:name"].astype("string") + + log2 = pm4py.convert_to_event_log(df) + stream1 = pm4py.convert_to_event_stream(log2) + df2 = pm4py.convert_to_dataframe(log2) + pm4py.write_xes(log2, "test_output_data/log.xes") + os.remove("test_output_data/log.xes") + + def test_alpha_miner(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_alpha(log) + + def test_alpha_miner_plus(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_alpha_plus(log) + + def test_inductive_miner(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_inductive(log) + + def test_inductive_miner_noise(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_inductive(log, noise_threshold=0.5) + + def test_heuristics_miner(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_heuristics(log) + + def test_inductive_miner_tree(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + tree = pm4py.discover_process_tree_inductive(log) + tree = pm4py.discover_process_tree_inductive(log, noise_threshold=0.2) + + def test_heuristics_miner_heu_net(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + heu_net = pm4py.discover_heuristics_net(log) + + def test_dfg(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + dfg, sa, ea = pm4py.discover_directly_follows_graph(log) + + def test_read_petri(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + + def test_read_tree(self): + tree = pm4py.read_ptml("input_data/running-example.ptml") + + def test_read_dfg(self): + dfg, sa, ea = pm4py.read_dfg("input_data/running-example.dfg") + + def test_alignments_simpl_interface(self): + for legacy_obj in [True, False]: + for diagn_df in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_inductive(log) + aligned_traces = pm4py.conformance_diagnostics_alignments(log, net, im, fm, return_diagnostics_dataframe=diagn_df) + + def test_tbr_simpl_interface(self): + for legacy_obj in [True, False]: + for diagn_df in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_inductive(log) + replayed_traces = pm4py.conformance_diagnostics_token_based_replay(log, net, im, fm, return_diagnostics_dataframe=diagn_df) + + def test_fitness_alignments(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_inductive(log) + fitness_ali = pm4py.fitness_alignments(log, net, im, fm) + + def test_fitness_tbr(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_inductive(log) + fitness_tbr = pm4py.fitness_token_based_replay(log, net, im, fm) + + def test_precision_alignments(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_inductive(log) + precision_ali = pm4py.precision_alignments(log, net, im, fm) + + def test_precision_tbr(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_inductive(log) + precision_tbr = pm4py.precision_token_based_replay(log, net, im, fm) + + def test_convert_to_tree_from_petri(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + tree = pm4py.convert_to_process_tree(net, im, fm) + self.assertTrue(isinstance(tree, ProcessTree)) + + def test_convert_to_tree_from_bpmn(self): + bpmn = pm4py.read_bpmn("input_data/running-example.bpmn") + tree = pm4py.convert_to_process_tree(bpmn) + self.assertTrue(isinstance(tree, ProcessTree)) + + def test_convert_to_net_from_tree(self): + tree = pm4py.read_ptml("input_data/running-example.ptml") + net, im, fm = pm4py.convert_to_petri_net(tree) + self.assertTrue(isinstance(net, PetriNet)) + + def test_convert_to_net_from_bpmn(self): + bpmn = pm4py.read_bpmn("input_data/running-example.bpmn") + net, im, fm = pm4py.convert_to_petri_net(bpmn) + self.assertTrue(isinstance(net, PetriNet)) + + def test_convert_to_net_from_dfg(self): + dfg, sa, ea = pm4py.read_dfg("input_data/running-example.dfg") + net, im, fm = pm4py.convert_to_petri_net(dfg, sa, ea) + self.assertTrue(isinstance(net, PetriNet)) + + def test_convert_to_net_from_heu(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + heu_net = pm4py.discover_heuristics_net(log) + net, im, fm = pm4py.convert_to_petri_net(heu_net) + self.assertTrue(isinstance(net, PetriNet)) + + def test_convert_to_bpmn_from_tree(self): + tree = pm4py.read_ptml("input_data/running-example.ptml") + bpmn = pm4py.convert_to_bpmn(tree) + self.assertTrue(isinstance(bpmn, BPMN)) + + def test_statistics_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.get_start_activities(log) + pm4py.get_end_activities(log) + pm4py.get_event_attributes(log) + pm4py.get_trace_attributes(log) + pm4py.get_event_attribute_values(log, "org:resource") + pm4py.get_variants_as_tuples(log) + + def test_statistics_df(self): + df = pandas_utils.read_csv("input_data/running-example-transformed.csv") + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + df["CaseID"] = df["CaseID"].astype("string") + + pm4py.get_start_activities(df, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + pm4py.get_end_activities(df, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + pm4py.get_event_attributes(df) + pm4py.get_event_attribute_values(df, "Resource", case_id_key="CaseID") + pm4py.get_variants_as_tuples(df, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + + def test_playout(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + pm4py.play_out(net, im, fm) + + def test_generator(self): + pm4py.generate_process_tree() + + def test_mark_em_equation(self): + for legacy_obj in [True, False]: + log = xes_importer.apply("input_data/running-example.xes") + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + sync_net, sync_im, sync_fm = pm4py.construct_synchronous_product_net(log[0], net, im, fm) + m_h = pm4py.solve_marking_equation(sync_net, sync_im, sync_fm) + em_h = pm4py.solve_extended_marking_equation(log[0], sync_net, sync_im, sync_fm) + + def test_new_statistics_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.get_trace_attribute_values(log, "case:creator") + pm4py.discover_eventually_follows_graph(log) + pm4py.get_case_arrival_average(log) + + def test_new_statistics_df(self): + df = pandas_utils.read_csv("input_data/running-example-transformed.csv") + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, + timest_columns=["Timestamp"]) + df["CaseID"] = df["CaseID"].astype("string") + + pm4py.discover_eventually_follows_graph(df, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + pm4py.get_case_arrival_average(df, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + + def test_serialization_log(self): + if importlib.util.find_spec("pyarrow"): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + ser = pm4py.serialize(log) + log2 = pm4py.deserialize(ser) + + def test_serialization_dataframe(self): + if importlib.util.find_spec("pyarrow"): + df = pandas_utils.read_csv("input_data/running-example.csv") + df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["time:timestamp"]) + ser = pm4py.serialize(df) + df2 = pm4py.deserialize(ser) + + def test_serialization_petri_net(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + ser = pm4py.serialize(net, im, fm) + net2, im2, fm2 = pm4py.deserialize(ser) + + def test_serialization_process_tree(self): + tree = pm4py.read_ptml("input_data/running-example.ptml") + ser = pm4py.serialize(tree) + tree2 = pm4py.deserialize(ser) + + def test_serialization_bpmn(self): + bpmn = pm4py.read_bpmn("input_data/running-example.bpmn") + ser = pm4py.serialize(bpmn) + bpmn2 = pm4py.deserialize(ser) + + def test_serialization_dfg(self): + dfg, sa, ea = pm4py.read_dfg("input_data/running-example.dfg") + ser = pm4py.serialize(dfg, sa, ea) + dfg2, sa2, ea2 = pm4py.deserialize(ser) + + def test_minimum_self_distance(self): + import pm4py + for legacy_obj in [True, False]: + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes"), return_legacy_log_object=legacy_obj) + msd = pm4py.get_minimum_self_distances(log) + + def test_minimum_self_distance_2(self): + import pm4py + for legacy_obj in [True, False]: + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes"), return_legacy_log_object=legacy_obj) + msd = pm4py.get_minimum_self_distance_witnesses(log) + + def test_marking_equation_net(self): + import pm4py + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + net, im, fm = pm4py.discover_petri_net_inductive(log) + pm4py.solve_marking_equation(net, im, fm) + + def test_marking_equation_sync_net(self): + import pm4py + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + net, im, fm = pm4py.discover_petri_net_inductive(log) + sync_net, sync_im, sync_fm = pm4py.construct_synchronous_product_net(log[0], net, im, fm) + res = pm4py.solve_marking_equation(sync_net, sync_im, sync_fm) + self.assertIsNotNone(res) + self.assertEqual(res, 11) + + def test_ext_marking_equation_sync_net(self): + import pm4py + log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) + net, im, fm = pm4py.discover_petri_net_inductive(log) + sync_net, sync_im, sync_fm = pm4py.construct_synchronous_product_net(log[0], net, im, fm) + res = pm4py.solve_extended_marking_equation(log[0], sync_net, sync_im, sync_fm) + self.assertIsNotNone(res) + + def test_alignments_tree_simpl_interface(self): + import pm4py + for legacy_obj in [True, False]: + for diagn_df in [True, False]: + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes"), return_legacy_log_object=legacy_obj) + tree = pm4py.read_ptml(os.path.join("input_data", "running-example.ptml")) + res = pm4py.conformance_diagnostics_alignments(log, tree, return_diagnostics_dataframe=diagn_df) + self.assertIsNotNone(res) + + def test_alignments_dfg_simpl_interface(self): + import pm4py + for legacy_obj in [True, False]: + for diagn_df in [True, False]: + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes"), return_legacy_log_object=legacy_obj) + dfg, sa, ea = pm4py.read_dfg(os.path.join("input_data", "running-example.dfg")) + res = pm4py.conformance_diagnostics_alignments(log, dfg, sa, ea, return_diagnostics_dataframe=diagn_df) + self.assertIsNotNone(res) + + def test_alignments_bpmn_simpl_interface(self): + import pm4py + for legacy_obj in [True, False]: + for diagn_df in [True, False]: + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes"), return_legacy_log_object=legacy_obj) + bpmn_graph = pm4py.read_bpmn(os.path.join("input_data", "running-example.bpmn")) + res = pm4py.conformance_diagnostics_alignments(log, bpmn_graph, return_diagnostics_dataframe=diagn_df) + self.assertIsNotNone(res) + + def test_discovery_inductive_bpmn(self): + import pm4py + for legacy_obj in [True, False]: + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes"), return_legacy_log_object=legacy_obj) + bpmn_graph = pm4py.discover_bpmn_inductive(log) + self.assertIsNotNone(bpmn_graph) + + def test_generation(self): + import pm4py + tree = pm4py.generate_process_tree() + self.assertIsNotNone(tree) + + def test_play_out_tree(self): + import pm4py + tree = pm4py.read_ptml(os.path.join("input_data", "running-example.ptml")) + log = pm4py.play_out(tree) + + def test_play_out_net(self): + import pm4py + net, im, fm = pm4py.read_pnml(os.path.join("input_data", "running-example.pnml")) + log = pm4py.play_out(net, im, fm) + + def test_msd(self): + import pm4py + for legacy_obj in [True, False]: + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes"), return_legacy_log_object=legacy_obj) + res1 = pm4py.get_minimum_self_distance_witnesses(log) + res2 = pm4py.get_minimum_self_distances(log) + self.assertIsNotNone(res1) + self.assertIsNotNone(res2) + + def test_case_arrival(self): + import pm4py + for legacy_obj in [True, False]: + log = pm4py.read_xes(os.path.join("input_data", "running-example.xes"), return_legacy_log_object=legacy_obj) + avg = pm4py.get_case_arrival_average(log) + self.assertIsNotNone(avg) + + def test_efg(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_eventually_follows_graph(log) + + def test_write_pnml(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + pm4py.write_pnml(net, im, fm, "test_output_data/running-example.pnml") + os.remove("test_output_data/running-example.pnml") + + def test_write_ptml(self): + process_tree = pm4py.read_ptml("input_data/running-example.ptml") + pm4py.write_ptml(process_tree, "test_output_data/running-example.ptml") + os.remove("test_output_data/running-example.ptml") + + def test_write_dfg(self): + dfg, sa, ea = pm4py.read_dfg("input_data/running-example.dfg") + pm4py.write_dfg(dfg, sa, ea, "test_output_data/running-example.dfg") + os.remove("test_output_data/running-example.dfg") + + def test_write_bpmn(self): + bpmn_graph = pm4py.read_bpmn("input_data/running-example.bpmn") + pm4py.write_bpmn(bpmn_graph, "test_output_data/running-example.bpmn") + os.remove("test_output_data/running-example.bpmn") + + def test_rebase(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + df = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + dataframe = pm4py.rebase(dataframe, activity_key="Activity", case_id="CaseID", timestamp_key="Timestamp", timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + + def test_parse_process_tree(self): + tree = pm4py.parse_process_tree("-> ( 'a', X ( 'b', 'c' ), tau )") + + def test_parse_log_string(self): + elog = pm4py.parse_event_log_string(["A,B,C", "A,B,D"]) + + def test_project_eattr(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + lst = pm4py.project_on_event_attribute(log, "org:resource") + + def test_sample_cases_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.sample_cases(log, 2) + + def test_sample_cases_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.sample_cases(dataframe, 2, case_id_key="CaseID") + + def test_sample_events_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.sample_events(log, 2) + + def test_sample_events_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.sample_events(dataframe, 2) + + def test_check_soundness(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + self.assertTrue(pm4py.check_soundness(net, im, fm)) + + def test_check_wfnet(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + self.assertTrue(pm4py.check_is_workflow_net(net)) + + def test_artificial_start_end_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.insert_artificial_start_end(log) + + def test_artificial_start_end_dataframe(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.insert_artificial_start_end(dataframe, activity_key="Activity", timestamp_key="Timestamp", case_id_key="CaseID") + + def test_hof_filter_log(self): + log = xes_importer.apply("input_data/running-example.xes") + pm4py.filter_log(log, lambda x: len(x) > 5) + + def test_hof_filter_trace(self): + log = xes_importer.apply("input_data/running-example.xes") + pm4py.filter_trace(log[0], lambda x: x["concept:name"] == "decide") + + def test_hof_sort_log(self): + log = xes_importer.apply("input_data/running-example.xes") + pm4py.sort_log(log, key=lambda x: x.attributes["concept:name"]) + + def test_hof_sort_trace(self): + log = xes_importer.apply("input_data/running-example.xes") + pm4py.sort_trace(log[0], key=lambda x: x["concept:name"]) + + def test_split_train_test_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.split_train_test(log, train_percentage=0.6) + + def test_split_train_test_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.split_train_test(dataframe, train_percentage=0.6, case_id_key="CaseID") + + def test_get_prefixes_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.get_prefixes_from_log(log, 3) + + def test_get_prefixes_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.get_prefixes_from_log(dataframe, 3, case_id_key="CaseID") + + def test_convert_reachab(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + ts = pm4py.convert_to_reachability_graph(net, im, fm) + + def test_hw_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_handover_of_work_network(log) + + def test_hw_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.discover_handover_of_work_network(dataframe, resource_key="Resource", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_wt_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_working_together_network(log) + + def test_wt_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.discover_working_together_network(dataframe, resource_key="Resource", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_act_based_res_sim_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_activity_based_resource_similarity(log) + + def test_act_based_res_sim_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.discover_activity_based_resource_similarity(dataframe, activity_key="Activity", resource_key="Resource", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_subcontracting_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_subcontracting_network(log) + + def test_subcontracting_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.discover_subcontracting_network(dataframe, resource_key="Resource", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_roles_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_organizational_roles(log) + + def test_roles_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.discover_organizational_roles(dataframe, activity_key="Activity", resource_key="Resource", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_network_analysis_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_network_analysis(log, "case:concept:name", "case:concept:name", "org:resource", "org:resource", "concept:name") + + def test_network_analysis_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.discover_network_analysis(dataframe, "CaseID", "CaseID", "Resource", "Resource", "Activity", sorting_column="Timestamp", timestamp_column="Timestamp") + + def test_discover_batches_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_batches(log) + + def test_discover_batches_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.discover_batches(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp", resource_key="Resource") + + def test_log_skeleton_log_simplified_interface(self): + for legacy_obj in [True, False]: + for diagn_df in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + model = pm4py.discover_log_skeleton(log) + pm4py.conformance_log_skeleton(log, model, return_diagnostics_dataframe=diagn_df) + + def test_log_skeleton_df_simplified_interface(self): + for diagn_df in [True, False]: + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, + timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, + timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + model = pm4py.discover_log_skeleton(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + pm4py.conformance_log_skeleton(dataframe, model, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp", return_diagnostics_dataframe=diagn_df) + + def test_temporal_profile_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + model = pm4py.discover_temporal_profile(log) + pm4py.conformance_temporal_profile(log, model) + + def test_temporal_profile_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + model = pm4py.discover_temporal_profile(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + pm4py.conformance_temporal_profile(dataframe, model, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_ocel_get_obj_types(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.csv") + pm4py.ocel_get_object_types(ocel) + + def test_ocel_get_attr_names(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.csv") + pm4py.ocel_get_attribute_names(ocel) + + def test_ocel_flattening(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.csv") + pm4py.ocel_flattening(ocel, "order") + def test_stats_var_tuples_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.get_variants_as_tuples(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_stats_cycle_time_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.get_cycle_time(log) + + def test_stats_cycle_time_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.get_cycle_time(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_stats_case_durations_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.get_all_case_durations(log) + + def test_stats_case_durations_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.get_all_case_durations(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_stats_case_duration_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.get_case_duration(log, "1") + + def test_stats_case_duration_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.get_case_duration(dataframe, "1", activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_stats_act_pos_summary_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.get_activity_position_summary(log, "check ticket") + + def test_stats_act_pos_summary_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.get_activity_position_summary(dataframe, "check ticket", activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_act_done_diff_res_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_activity_done_different_resources(log, "check ticket") + + def test_filter_act_done_diff_res_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_activity_done_different_resources(dataframe, "check ticket", activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp", resource_key="Resource") + + def test_filter_four_eyes_principle_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_four_eyes_principle(log, "register request", "check ticket") + + def test_filter_four_eyes_principle_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_four_eyes_principle(dataframe, "register request", "check ticket", activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp", resource_key="Resource") + + def test_filter_rel_occ_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_log_relative_occurrence_event_attribute(log, 0.8, level="cases") + + def test_filter_rel_occ_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_log_relative_occurrence_event_attribute(dataframe, 0.8, attribute_key="Activity", level="cases", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_start_activities_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_start_activities(log, ["register request"]) + + def test_filter_start_activities_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_start_activities(dataframe, ["register request"], activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_end_activities_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_end_activities(log, ["pay compensation"]) + + def test_filter_end_activities_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_end_activities(dataframe, ["pay compensation"], activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_eve_attr_values_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_event_attribute_values(log, "concept:name", ["register request", "pay compensation", "reject request"]) + + def test_filter_eve_attr_values_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_event_attribute_values(dataframe, "Activity", ["register request", "pay compensation", "reject request"], case_id_key="CaseID") + + def test_filter_trace_attr_values_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_trace_attribute_values(log, "case:creator", ["Fluxicon"]) + + def test_filter_variant_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_variants(log, [('register request', 'examine casually', 'check ticket', 'decide', 'reinitiate request', 'examine thoroughly', 'check ticket', 'decide', 'pay compensation')]) + + def test_filter_variant_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_variants(dataframe, [('register request', 'examine casually', 'check ticket', 'decide', 'reinitiate request', 'examine thoroughly', 'check ticket', 'decide', 'pay compensation')], activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_dfg_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_directly_follows_relation(log, [("register request", "check ticket")]) + + def test_filter_dfg_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_directly_follows_relation(dataframe, [("register request", "check ticket")], activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_efg_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_eventually_follows_relation(log, [("register request", "check ticket")]) + + def test_filter_efg_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_eventually_follows_relation(dataframe, [("register request", "check ticket")], activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_time_range_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_time_range(log, "2009-01-01 01:00:00", "2011-01-01 01:00:00") + + def test_filter_time_range_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_time_range(dataframe, "2009-01-01 01:00:00", "2011-01-01 01:00:00", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_between_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_between(log, "check ticket", "decide") + + def test_filter_between_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_between(dataframe, "check ticket", "decide", activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_case_size_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_case_size(log, 10, 20) + + def test_filter_case_size_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_case_size(dataframe, 10, 20, case_id_key="CaseID") + + def test_filter_case_performance_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_case_performance(log, 86400, 8640000) + + def test_filter_case_performance_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_case_performance(dataframe, 86400, 8640000, case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_activities_rework_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_activities_rework(log, "check ticket") + + def test_filter_act_rework_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_activities_rework(dataframe, "check ticket", activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_paths_perf_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_paths_performance(log, ("register request", "check ticket"), 86400, 864000) + + def test_filter_paths_perf_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_paths_performance(dataframe, ("register request", "check ticket"), 86400, 864000, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_vars_top_k_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_variants_top_k(log, 1) + + def test_filter_vars_top_k_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_variants_top_k(dataframe, 1, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_vars_coverage(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_variants_by_coverage_percentage(log, 0.1) + + def test_filter_vars_coverage(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_variants_by_coverage_percentage(dataframe, 0.1, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_prefixes_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_prefixes(log, "check ticket") + + def test_filter_prefixes_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_prefixes(dataframe, "check ticket", activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_filter_suffixes_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.filter_suffixes(log, "check ticket") + + def test_filter_suffixes_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.filter_suffixes(dataframe, "check ticket", activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_discover_perf_dfg_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_performance_dfg(log) + + def test_discover_perf_dfg_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.discover_performance_dfg(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_discover_footprints_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_footprints(log) + + def test_discover_ts_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_transition_system(log) + + def test_discover_ts_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.discover_transition_system(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_discover_pref_tree_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_prefix_tree(log) + + def test_discover_pref_tree_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.discover_prefix_tree(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + + def test_discover_ocpn(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.csv") + pm4py.discover_oc_petri_net(ocel) + + def test_conformance_alignments_pn_log_simplified_interface(self): + for legacy_obj in [True, False]: + for diagn_df in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + net, im, fm = pm4py.discover_petri_net_inductive(log) + pm4py.conformance_diagnostics_alignments(log, net, im, fm, return_diagnostics_dataframe=diagn_df) + + def test_conformance_alignments_pn_df_simplified_interface(self): + for diagn_df in [True, False]: + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, + timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, + timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + pm4py.conformance_diagnostics_alignments(dataframe, net, im, fm, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp", return_diagnostics_dataframe=diagn_df) + + def test_conformance_diagnostics_fp_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + tree = pm4py.discover_process_tree_inductive(log) + pm4py.conformance_diagnostics_footprints(log, tree) + + def test_fitness_fp_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + tree = pm4py.discover_process_tree_inductive(log) + pm4py.fitness_footprints(log, tree) + + def test_precision_fp_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + tree = pm4py.discover_process_tree_inductive(log) + pm4py.precision_footprints(log, tree) + + def test_maximal_decomposition(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + pm4py.maximal_decomposition(net, im, fm) + + def test_fea_ext_log(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.extract_features_dataframe(log) + + def test_fea_ext_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + pm4py.extract_features_dataframe(dataframe, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp", resource_key="Resource") + + def test_new_alpha_miner_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + pm4py.discover_petri_net_alpha(dataframe, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + + def test_new_heu_miner_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + pm4py.discover_petri_net_heuristics(dataframe, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + + def test_new_dfg_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + pm4py.discover_dfg(dataframe, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + + def test_new_perf_dfg_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + pm4py.discover_performance_dfg(dataframe, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + + def test_new_tbr_df_simpl_interface(self): + for ret_df in [True, False]: + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, + timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, + timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + pm4py.conformance_diagnostics_token_based_replay(dataframe, net, im, fm, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp", return_diagnostics_dataframe=ret_df) + + def test_new_tbr_fitness_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + pm4py.fitness_token_based_replay(dataframe, net, im, fm, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + + def test_new_tbr_precision_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + pm4py.precision_token_based_replay(dataframe, net, im, fm, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + + def test_new_align_df_simpl_interface(self): + for diagn_df in [True, False]: + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, + timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, + timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + pm4py.conformance_diagnostics_alignments(dataframe, net, im, fm, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp", return_diagnostics_dataframe=diagn_df) + + def test_new_align_fitness_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + pm4py.fitness_alignments(dataframe, net, im, fm, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + + def test_new_align_precision_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + net, im, fm = pm4py.discover_petri_net_inductive(dataframe, case_id_key="CaseID", activity_key="Activity", + timestamp_key="Timestamp") + pm4py.precision_alignments(dataframe, net, im, fm, case_id_key="CaseID", activity_key="Activity", timestamp_key="Timestamp") + + def test_vis_case_duration_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + + if importlib.util.find_spec("matplotlib"): + target = os.path.join("test_output_data", "case_duration.svg") + pm4py.save_vis_case_duration_graph(dataframe, target, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + os.remove(target) + + def test_vis_ev_distr_graph_df(self): + dataframe = pandas_utils.read_csv("input_data/running-example-transformed.csv") + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT, timest_columns=["Timestamp"]) + dataframe["CaseID"] = dataframe["CaseID"].astype("string") + target = os.path.join("test_output_data", "ev_distr_graph.svg") + + if importlib.util.find_spec("matplotlib"): + pm4py.save_vis_events_distribution_graph(dataframe, target, activity_key="Activity", case_id_key="CaseID", timestamp_key="Timestamp") + os.remove(target) + + def test_ocel_object_graph(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + ev_graph = pm4py.discover_objects_graph(ocel, graph_type="object_interaction") + ev_graph = pm4py.discover_objects_graph(ocel, graph_type="object_descendants") + ev_graph = pm4py.discover_objects_graph(ocel, graph_type="object_inheritance") + ev_graph = pm4py.discover_objects_graph(ocel, graph_type="object_cobirth") + ev_graph = pm4py.discover_objects_graph(ocel, graph_type="object_codeath") + + def test_ocel_temporal_summary(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + temp_summary = pm4py.ocel_temporal_summary(ocel) + + def test_ocel_objects_summary(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + objects_summary = pm4py.ocel_objects_summary(ocel) + + def test_ocel_filtering_ev_ids(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + filtered_ocel = pm4py.filter_ocel_events(ocel, ["e1"]) + + def test_ocel_filtering_obj_ids(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + filtered_ocel = pm4py.filter_ocel_objects(ocel, ["o1"], level=1) + filtered_ocel = pm4py.filter_ocel_objects(ocel, ["o1"], level=2) + + def test_ocel_filtering_obj_types(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + filtered_ocel = pm4py.filter_ocel_object_types(ocel, ["order"]) + + def test_ocel_filtering_cc(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + filtered_ocel = pm4py.filter_ocel_cc_object(ocel, "o1") + + def test_ocel_drop_duplicates(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + filtered_ocel = pm4py.ocel_drop_duplicates(ocel) + + def test_ocel_add_index_based_timedelta(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + filtered_ocel = pm4py.ocel_add_index_based_timedelta(ocel) + + def test_ocel2_xml(self): + ocel = pm4py.read_ocel2("input_data/ocel/ocel20_example.xmlocel") + pm4py.write_ocel2(ocel, "test_output_data/ocel20_example.xmlocel") + os.remove("test_output_data/ocel20_example.xmlocel") + + def test_ocel2_sqlite(self): + ocel = pm4py.read_ocel2("input_data/ocel/ocel20_example.sqlite") + pm4py.write_ocel2(ocel, "test_output_data/ocel20_example.sqlite") + os.remove("test_output_data/ocel20_example.sqlite") + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/simplified_interface_2.py b/pm4py/tests/simplified_interface_2.py new file mode 100644 index 0000000000000000000000000000000000000000..9cd52e61fc3ed69c7da9e304234c25f2d89b3411 --- /dev/null +++ b/pm4py/tests/simplified_interface_2.py @@ -0,0 +1,86 @@ +import pm4py +import os +from pm4py.util import constants, pandas_utils +import importlib.util +import unittest + + +class SimplifiedInterface2Test(unittest.TestCase): + def test_import_ocel_sqlite_1(self): + ocel = pm4py.read_ocel("input_data/ocel/newocel.sqlite") + + def test_import_ocel_sqlite_2(self): + ocel = pm4py.read_ocel_sqlite("input_data/ocel/newocel.sqlite") + + def test_export_ocel_sqlite(self): + ocel = pm4py.read_ocel("input_data/ocel/newocel.jsonocel") + pm4py.write_ocel(ocel, "test_output_data/newocel2.sqlite") + os.remove("test_output_data/newocel2.sqlite") + + def test_reduce_invisibles(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + pm4py.reduce_petri_net_invisibles(net) + + def test_reduce_implicit_places(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + pm4py.reduce_petri_net_implicit_places(net, im, fm) + + def test_language_df(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.get_stochastic_language(log) + + def test_language_log(self): + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=True) + pm4py.get_stochastic_language(log) + + def test_language_model(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + pm4py.get_stochastic_language(net, im, fm) + + def test_conversion_df_to_nx(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.convert_log_to_networkx(log) + + def test_conversion_log_to_nx(self): + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=True) + pm4py.convert_log_to_networkx(log) + + def test_conversion_ocel_to_nx(self): + ocel = pm4py.read_ocel("input_data/ocel/example_log.jsonocel") + pm4py.convert_ocel_to_networkx(ocel) + + def test_conversion_df_to_ocel(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.convert_log_to_ocel(log) + + def test_conversion_log_to_ocel(self): + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=True) + pm4py.convert_log_to_ocel(log) + + def test_conversion_ocelcsv_to_ocel(self): + dataframe = pandas_utils.read_csv("input_data/ocel/example_log.csv") + pm4py.convert_log_to_ocel(dataframe, activity_column="ocel:activity", timestamp_column="ocel:timestamp") + + def test_conversion_petri_to_nx(self): + net, im, fm = pm4py.read_pnml("input_data/running-example.pnml") + nx_digraph = pm4py.convert_petri_net_to_networkx(net, im, fm) + + def test_stochastic_language(self): + if importlib.util.find_spec("pyemd"): + log1 = pm4py.read_xes("input_data/running-example.xes") + log2 = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=True) + lang1 = pm4py.get_stochastic_language(log1) + lang2 = pm4py.get_stochastic_language(log2) + pm4py.compute_emd(lang1, lang2) + + def test_hybrid_ilp_miner(self): + for legacy_obj in [True, False]: + log = pm4py.read_xes("input_data/running-example.xes", return_legacy_log_object=legacy_obj) + pm4py.discover_petri_net_ilp(log) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/simulation_test.py b/pm4py/tests/simulation_test.py new file mode 100644 index 0000000000000000000000000000000000000000..82146c4ae964763faf46fc6ab961480e9f26fb7d --- /dev/null +++ b/pm4py/tests/simulation_test.py @@ -0,0 +1,46 @@ +import os +import unittest + +from pm4py.objects.petri_net.importer import importer as pnml_importer +from pm4py.algo.simulation.playout.petri_net import algorithm as simulator +from tests.constants import INPUT_DATA_DIR +from datetime import datetime + + +class SimulationTest(unittest.TestCase): + def test_simulate_petrinet(self): + net, im, fm = pnml_importer.apply( + os.path.join(INPUT_DATA_DIR, "running-example.pnml")) + number_of_traces = 10 + eventlog = simulator.apply(net, im, fm, variant=simulator.Variants.BASIC_PLAYOUT, + parameters={ + simulator.Variants.BASIC_PLAYOUT.value.Parameters.NO_TRACES: number_of_traces}) + self.assertEqual(len(eventlog), number_of_traces) + case_id_default = 0 + last_case_id = case_id_default + number_of_traces - 1 + timestamp_default = 10000000 + self.assertEqual(eventlog[0].attributes['concept:name'], str(case_id_default)) + self.assertEqual(datetime.timestamp(eventlog[0][0]['time:timestamp']), timestamp_default) + self.assertEqual(eventlog[-1].attributes['concept:name'], str(last_case_id)) + + def test_simulate_petrinet_start_params(self): + net, im, fm = pnml_importer.apply( + os.path.join(INPUT_DATA_DIR, "running-example.pnml")) + number_of_traces = 10 + timestamp = 50000000 + case_id = 5 + eventlog = simulator.apply(net, im, fm, variant=simulator.Variants.BASIC_PLAYOUT, + parameters={ + simulator.Variants.BASIC_PLAYOUT.value.Parameters.NO_TRACES: number_of_traces, + simulator.Variants.BASIC_PLAYOUT.value.Parameters.INITIAL_TIMESTAMP: + timestamp, + simulator.Variants.BASIC_PLAYOUT.value.Parameters.INITIAL_CASE_ID: case_id}) + self.assertEqual(len(eventlog), number_of_traces) + last_case_id = case_id + number_of_traces - 1 + self.assertEqual(eventlog[0].attributes['concept:name'], str(case_id)) + self.assertEqual(datetime.timestamp(eventlog[0][0]['time:timestamp']), timestamp) + self.assertEqual(eventlog[-1].attributes['concept:name'], str(last_case_id)) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/sna_test.py b/pm4py/tests/sna_test.py new file mode 100644 index 0000000000000000000000000000000000000000..96e12006c445d0d3d6d0c2aad617b7eb2876ec31 --- /dev/null +++ b/pm4py/tests/sna_test.py @@ -0,0 +1,98 @@ +import os +import unittest +import importlib.util + +from pm4py.algo.organizational_mining.sna import algorithm as sna_alg, util as sna_util, util +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.util import constants, pandas_utils +from pm4py.objects.log.util import dataframe_utils + + +class SnaTests(unittest.TestCase): + def test_1(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + + hw_values = sna_alg.apply(log, variant=sna_alg.Variants.HANDOVER_LOG) + wt_values = sna_alg.apply(log, variant=sna_alg.Variants.WORKING_TOGETHER_LOG) + sub_values = sna_alg.apply(log, variant=sna_alg.Variants.SUBCONTRACTING_LOG) + ja_values = sna_alg.apply(log, variant=sna_alg.Variants.JOINTACTIVITIES_LOG) + + def test_pandas(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + + log = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "running-example.csv")) + log = dataframe_utils.convert_timestamp_columns_in_df(log, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + + hw_values = sna_alg.apply(log, variant=sna_alg.Variants.HANDOVER_PANDAS) + wt_values = sna_alg.apply(log, variant=sna_alg.Variants.WORKING_TOGETHER_PANDAS) + sub_values = sna_alg.apply(log, variant=sna_alg.Variants.SUBCONTRACTING_PANDAS) + + def test_log_orgmining_local_attr(self): + from pm4py.algo.organizational_mining.local_diagnostics import algorithm + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + algorithm.apply_from_group_attribute(log) + + def test_log_orgmining_local_clustering(self): + if importlib.util.find_spec("sklearn"): + from pm4py.algo.organizational_mining.local_diagnostics import algorithm + from pm4py.algo.organizational_mining.sna.variants.log import jointactivities + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + ja = jointactivities.apply(log) + clustering = util.cluster_affinity_propagation(ja) + algorithm.apply_from_clustering_or_roles(log, clustering) + + def test_log_orgmining_local_roles(self): + from pm4py.algo.organizational_mining.local_diagnostics import algorithm + from pm4py.algo.organizational_mining.roles import algorithm as roles_detection + log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) + roles = roles_detection.apply(log) + algorithm.apply_from_clustering_or_roles(log, roles) + + def test_sna_clustering(self): + if importlib.util.find_spec("sklearn"): + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + hw_values = sna_alg.apply(log, variant=sna_alg.Variants.HANDOVER_LOG) + clusters = sna_util.cluster_affinity_propagation(hw_values) + + def test_res_profiles_log(self): + from pm4py.algo.organizational_mining.resource_profiles import algorithm + log = xes_importer.apply(os.path.join("..", "tests", "input_data", "running-example.xes")) + algorithm.distinct_activities(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara") + algorithm.activity_frequency(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara", "decide") + algorithm.activity_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara") + algorithm.case_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Pete") + algorithm.fraction_case_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Pete") + algorithm.average_workload(log, "2010-12-30 00:00:00", "2011-01-15 00:00:00", "Mike") + algorithm.multitasking(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Mike") + algorithm.average_duration_activity(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue", + "examine thoroughly") + algorithm.average_case_duration(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue") + algorithm.interaction_two_resources(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Mike", "Pete") + algorithm.social_position(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue") + + def test_res_profiles_df(self): + from pm4py.algo.organizational_mining.resource_profiles import algorithm + log = pandas_utils.read_csv(os.path.join("..", "tests", "input_data", "running-example.csv")) + log = dataframe_utils.convert_timestamp_columns_in_df(log, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + algorithm.distinct_activities(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara") + algorithm.activity_frequency(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara", "decide") + algorithm.activity_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sara") + algorithm.case_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Pete") + algorithm.fraction_case_completions(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Pete") + algorithm.average_workload(log, "2010-12-30 00:00:00", "2011-01-15 00:00:00", "Mike") + algorithm.multitasking(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Mike") + algorithm.average_duration_activity(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue", + "examine thoroughly") + algorithm.average_case_duration(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue") + algorithm.interaction_two_resources(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Mike", "Pete") + algorithm.social_position(log, "2010-12-30 00:00:00", "2011-01-25 00:00:00", "Sue") + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/statistics_df_test.py b/pm4py/tests/statistics_df_test.py new file mode 100644 index 0000000000000000000000000000000000000000..85bde6e3ecbb4072a64ad92dae8d47ceec049c5c --- /dev/null +++ b/pm4py/tests/statistics_df_test.py @@ -0,0 +1,78 @@ +from pm4py.objects.log.util import dataframe_utils +import unittest +import os +from pm4py.util import constants, pandas_utils + + +class StatisticsDfTest(unittest.TestCase): + def get_dataframe(self): + dataframe = pandas_utils.read_csv(os.path.join("input_data", "roadtraffic100traces.csv")) + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + return dataframe + + def test_end_activities(self): + from pm4py.statistics.end_activities.pandas import get + df = self.get_dataframe() + get.get_end_activities(df) + + def test_start_activities(self): + from pm4py.statistics.start_activities.pandas import get + df = self.get_dataframe() + get.get_start_activities(df) + + def test_case_arrival(self): + from pm4py.statistics.traces.generic.pandas import case_arrival + df = self.get_dataframe() + case_arrival.get_case_arrival_avg(df) + + def test_case_statistics(self): + from pm4py.statistics.traces.generic.pandas import case_statistics + df = self.get_dataframe() + case_statistics.get_cases_description(df) + case_statistics.get_variants_df(df) + case_statistics.get_variant_statistics(df) + #case_statistics.get_variant_statistics_with_case_duration(df) + case_statistics.get_events(df, "N77802") + case_statistics.get_variants_df_with_case_duration(df) + case_statistics.get_variants_df_and_list(df) + case_statistics.get_kde_caseduration(df) + + def test_variants(self): + from pm4py.statistics.variants.pandas import get + df = self.get_dataframe() + get.get_variants_set(df) + + def test_batch_detection(self): + from pm4py.algo.discovery.batches.variants import pandas as pandas_batches + dataframe = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) + dataframe = dataframe_utils.convert_timestamp_columns_in_df(dataframe, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) + pandas_batches.apply(dataframe) + + def test_case_overlap(self): + from pm4py.statistics.overlap.cases.pandas import get as overlap_get + df = self.get_dataframe() + overlap_get.apply(df) + + def test_cycle_time(self): + from pm4py.statistics.traces.cycle_time.pandas import get as cycle_time_get + df = self.get_dataframe() + cycle_time_get.apply(df) + + def test_rework(self): + from pm4py.statistics.rework.pandas import get as rework_get + df = self.get_dataframe() + rework_get.apply(df) + + def test_events_distribution(self): + from pm4py.statistics.attributes.pandas import get as attributes_get + df = self.get_dataframe() + attributes_get.get_events_distribution(df) + + def test_msd(self): + from pm4py.algo.discovery.minimum_self_distance.variants import pandas as msd_pandas + df = self.get_dataframe() + msd_pandas.apply(df) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/statistics_log_test.py b/pm4py/tests/statistics_log_test.py new file mode 100644 index 0000000000000000000000000000000000000000..5ab4e273754fd87b7aa8f6478415832e934a877f --- /dev/null +++ b/pm4py/tests/statistics_log_test.py @@ -0,0 +1,84 @@ +import unittest +import os + + +class StatisticsLogTest(unittest.TestCase): + def get_log(self): + from pm4py.objects.log.importer.xes import importer + log = importer.apply(os.path.join("input_data", "roadtraffic100traces.xes")) + return log + + def test_select_attributes(self): + from pm4py.statistics.attributes.log import select + log = self.get_log() + select.get_trace_attribute_values(log, "concept:name") + select.select_attributes_from_log_for_tree(log) + + def test_end_activities(self): + from pm4py.statistics.end_activities.log import get + log = self.get_log() + get.get_end_activities(log) + + def test_start_activities(self): + from pm4py.statistics.start_activities.log import get + log = self.get_log() + get.get_start_activities(log) + + def test_case_arrival(self): + from pm4py.statistics.traces.generic.log import case_arrival + log = self.get_log() + case_arrival.get_case_arrival_avg(log) + case_arrival.get_case_dispersion_avg(log) + + def test_case_statistics(self): + from pm4py.statistics.traces.generic.log import case_statistics + log = self.get_log() + case_statistics.get_kde_caseduration(log) + case_statistics.get_events(log, "N77802") + case_statistics.get_variant_statistics(log) + case_statistics.get_cases_description(log) + case_statistics.get_all_case_durations(log) + case_statistics.get_first_quartile_case_duration(log) + case_statistics.get_median_case_duration(log) + + def test_variants(self): + from pm4py.statistics.variants.log import get + log = self.get_log() + get.get_variants(log) + get.get_variants_along_with_case_durations(log) + get.get_variants_from_log_trace_idx(log) + + def test_batch_detection(self): + from pm4py.objects.log.importer.xes import importer + from pm4py.algo.discovery.batches.variants import log as log_batches + log = importer.apply(os.path.join("input_data", "receipt.xes")) + log_batches.apply(log) + + def test_case_overlap(self): + from pm4py.statistics.overlap.cases.log import get as log_overlap + log = self.get_log() + log_overlap.apply(log) + + def test_cycle_time(self): + from pm4py.statistics.traces.cycle_time.log import get as log_cycle_time + log = self.get_log() + log_cycle_time.apply(log) + + def test_rework(self): + from pm4py.statistics.rework.log import get as log_rework + log = self.get_log() + log_rework.apply(log) + + def test_events_distribution(self): + from pm4py.statistics.attributes.log import get as attributes_get + log = self.get_log() + attributes_get.get_events_distribution(log) + + def test_msd(self): + from pm4py.algo.discovery.minimum_self_distance.variants import log as msd_log + log = self.get_log() + msd_log.apply(log) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/test_cli.py b/pm4py/tests/test_cli.py new file mode 100644 index 0000000000000000000000000000000000000000..7c59359edcadf3b7cb589907ace32af2c8c1611e --- /dev/null +++ b/pm4py/tests/test_cli.py @@ -0,0 +1,45 @@ +import os + +#os.system("python -m pm4py.cli DiscoverPetriNetAlpha tests\\input_data prova2") +#os.system("python -m pm4py.cli DiscoverPetriNetInductive tests\\input_data prova2") +#os.system("python -m pm4py.cli DiscoverPetriNetHeuristics tests\\input_data prova2") +#os.system("python -m pm4py.cli DiscoverBPMNInductive tests\\input_data prova2") +#os.system("python -m pm4py.cli DiscoverProcessTreeInductive tests\\input_data prova2") +#os.system("python -m pm4py.cli ConformanceDiagnosticsTBR tests\\input_data\\running-example.xes tests\\input_data\\running-example.pnml result_diagnostics_tbr.txt") +#os.system("python -m pm4py.cli ConformanceDiagnosticsAlignments tests\\input_data\\running-example.xes tests\\input_data\\running-example.pnml result_diagnostics_alignments.txt") +#os.system("python -m pm4py.cli FitnessTBR tests\\input_data\\running-example.xes tests\\input_data\\running-example.pnml result_fitness_tbr.txt") +#os.system("python -m pm4py.cli FitnessAlignments tests\\input_data\\running-example.xes tests\\input_data\\running-example.pnml result_fitness_alignments.txt") +#os.system("python -m pm4py.cli PrecisionTBR tests\\input_data\\running-example.xes tests\\input_data\\running-example.pnml result_precision_tbr.txt") +#os.system("python -m pm4py.cli PrecisionAlignments tests\\input_data\\running-example.xes tests\\input_data\\running-example.pnml result_precision_alignments.txt") +#os.system("python -m pm4py.cli ConvertToXES tests\\input_data\\running-example.csv result_ru.xes") +#os.system("python -m pm4py.cli ConvertToCSV tests\\input_data\\running-example.xes result_ru.csv") +#os.system("python -m pm4py.cli ConvertPNMLtoBPMN tests\\input_data\\running-example.pnml result_bpmn1.bpmn") +#os.system("python -m pm4py.cli ConvertPNMLtoPTML tests\\input_data\\running-example.pnml result_ptml1.ptml") +#os.system("python -m pm4py.cli ConvertPTMLtoPNML tests\\input_data\\running-example.ptml result_pnml1.pnml") +#os.system("python -m pm4py.cli ConvertPTMLtoBPMN tests\\input_data\\running-example.ptml result_bpmn2.bpmn") +#os.system("python -m pm4py.cli ConvertBPMNtoPNML tests\\input_data\\running-example.bpmn result_pnml3.pnml") +#os.system("python -m pm4py.cli ConvertDFGtoPNML tests\\input_data\\running-example.dfg result_pnml4.pnml") +#os.system("python -m pm4py.cli DiscoverDFG tests\\input_data\\running-example.xes result_dfgdisc.dfg") +#os.system("python -m pm4py.cli ConvertDFGtoPNML result_dfgdisc.dfg result_dfgdisc_conv.pnml") +#os.system("python -m pm4py.cli SaveVisDFG result_dfgdisc.dfg visual_dfg.png") +#os.system("python -m pm4py.cli SaveVisPNML result_pnml1.pnml visual_petri.png") +#os.system("python -m pm4py.cli SaveVisBPMN result_bpmn1.bpmn visual_bpmn.png") +#os.system("python -m pm4py.cli SaveVisPTML result_ptml1.ptml visual_process_tree.png") +#os.system("python -m pm4py.cli SaveVisDottedChart tests\\input_data\\running-example.xes time:timestamp case:concept:name concept:name vis_dotted.png") +#os.system("python -m pm4py.cli SaveVisTransitionSystem tests\\input_data\\running-example.xes vis_trans_system.png") +#os.system("python -m pm4py.cli SaveVisTrie tests\\input_data\\running-example.xes vis_trie.png") +#os.system("python -m pm4py.cli SaveVisEventsDistribution tests\\input_data\\running-example.xes days_week vis_ev_distr.png") +#os.system("python -m pm4py.cli SaveVisEventsPerTime tests\\input_data\\running-example.xes vis_ev_time.png") +#os.system("python -m pm4py.cli GenerateProcessTree 10 result_ptandloggenerator.ptml") +#os.system("python -m pm4py.cli PNMLplayout tests\\input_data\\running-example.pnml result_playout1.xes") +#os.system("python -m pm4py.cli PTMLplayout tests\\input_data\\running-example.ptml result_playout2.xes") +#os.system("python -m pm4py.cli DFGplayout tests\\input_data\\running-example.dfg result_playout3.xes") +os.system("python -m pm4py.cli SaveVisSNA tests\\input_data\\running-example.xes handover result_handover.png") +os.system("python -m pm4py.cli SaveVisSNA tests\\input_data\\running-example.xes working_together result_working_together.png") +os.system("python -m pm4py.cli SaveVisSNA tests\\input_data\\running-example.xes similar_activities result_similar_activities.png") +os.system("python -m pm4py.cli SaveVisSNA tests\\input_data\\running-example.xes subcontracting result_subcontracting.png") +os.system("python -m pm4py.cli SaveVisCaseDuration tests\\input_data\\running-example.xes result_case_duration.png") +os.system("python -m pm4py.cli FilterVariantsTopK tests\\input_data\\running-example.xes 1 result_filtering_top_k.xes") +os.system("python -m pm4py.cli FilterVariantsCoverage tests\\input_data\\running-example.xes 0.1 result_filtering_var_cov.xes") +os.system("python -m pm4py.cli FilterCasePerformance tests\\input_data\\running-example.xes 3600 86400 result_filtering_case_perf.xes") +os.system("python -m pm4py.cli FilterTimeRange tests\\input_data\\receipt.xes 2011-01-01 2011-01-31 result_filtering_time_range.xes") diff --git a/pm4py/tests/test_output_data/README.txt b/pm4py/tests/test_output_data/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pm4py/tests/trans_syst_tests.py b/pm4py/tests/trans_syst_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..dd62a41ef1c1a70fe9a8426e786d927278e4b8d0 --- /dev/null +++ b/pm4py/tests/trans_syst_tests.py @@ -0,0 +1,25 @@ +import pm4py +from tests.constants import INPUT_DATA_DIR +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.algo.discovery.transition_system import algorithm as ts_alg +import unittest +import os + + +class TransitionSystemTest(unittest.TestCase): + def test_transitionsystem1(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + input_log = os.path.join(INPUT_DATA_DIR, "running-example.xes") + log = xes_importer.apply(input_log) + ts = ts_alg.apply(log, parameters={ + ts_alg.Variants.VIEW_BASED.value.Parameters.PARAM_KEY_VIEW: ts_alg.Variants.VIEW_BASED.value.Parameters.VIEW_SEQUENCE, + ts_alg.Variants.VIEW_BASED.value.Parameters.PARAM_KEY_WINDOW: 3, + ts_alg.Variants.VIEW_BASED.value.Parameters.PARAM_KEY_DIRECTION: ts_alg.Variants.VIEW_BASED.value.Parameters.DIRECTION_FORWARD}) + viz = pm4py.visualization.transition_system.util.visualize_graphviz.visualize(ts) + del viz + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/woflan_tests.py b/pm4py/tests/woflan_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..b386edc6379185a5b6f9e460bea010dbe22114f6 --- /dev/null +++ b/pm4py/tests/woflan_tests.py @@ -0,0 +1,191 @@ +import os +from pm4py.algo.analysis.woflan import algorithm as woflan +from pm4py.objects.log.importer.xes import importer as xes_import +from pm4py.algo.discovery.inductive import algorithm as inductive_miner +from pm4py.algo.discovery.alpha import algorithm as alpha_miner +from pm4py.objects.petri_net.obj import PetriNet, Marking +from pm4py.objects.petri_net.utils import petri_utils +from pm4py.algo.analysis.woflan.graphs.minimal_coverability_graph import minimal_coverability_graph +import unittest +from pm4py.objects.conversion.process_tree import converter as process_tree_converter + + +class WoflanTest(unittest.TestCase): + def test_running_example_alpha(self): + path = os.path.join("input_data", "running-example.xes") + log = xes_import.apply(path) + net, i_m, f_m = alpha_miner.apply(log) + self.assertTrue(woflan.apply(net, i_m, f_m, parameters={"print_diagnostics": False})) + + def test_running_example_inductive(self): + path = os.path.join("input_data", "running-example.xes") + log = xes_import.apply(path) + process_tree = inductive_miner.apply(log) + net, im, fm = process_tree_converter.apply(process_tree) + self.assertTrue(woflan.apply(net, im, fm, parameters={"print_diagnostics": False})) + + def test_figure415(self): + net = PetriNet("figure_4_15") + p_1 = PetriNet.Place("p_1") + p_2 = PetriNet.Place("p_2") + p_3 = PetriNet.Place("p_3") + p_4 = PetriNet.Place("p_4") + p_5 = PetriNet.Place("p_5") + p_6 = PetriNet.Place("p_6") + p_7 = PetriNet.Place("p_7") + net.places.add(p_1) + net.places.add(p_2) + net.places.add(p_3) + net.places.add(p_4) + net.places.add(p_5) + net.places.add(p_6) + net.places.add(p_7) + t_1 = PetriNet.Transition("t_1", "t_1") + t_2 = PetriNet.Transition("t_2", "t_2") + t_3 = PetriNet.Transition("t_3", "t_3") + t_4 = PetriNet.Transition("t_4", "t_4") + t_5 = PetriNet.Transition("t_5", "t_5") + t_6 = PetriNet.Transition("t_6", "t_6") + net.transitions.add(t_1) + net.transitions.add(t_2) + net.transitions.add(t_3) + net.transitions.add(t_4) + net.transitions.add(t_5) + net.transitions.add(t_6) + petri_utils.add_arc_from_to(p_1, t_1, net) + petri_utils.add_arc_from_to(t_1, p_3, net) + petri_utils.add_arc_from_to(t_1, p_2, net) + petri_utils.add_arc_from_to(t_1, p_5, net) + petri_utils.add_arc_from_to(p_5, t_2, net) + petri_utils.add_arc_from_to(p_5, t_5, net) + petri_utils.add_arc_from_to(p_3, t_2, net) + petri_utils.add_arc_from_to(p_3, t_4, net) + petri_utils.add_arc_from_to(t_2, p_6, net) + petri_utils.add_arc_from_to(t_2, p_4, net) + petri_utils.add_arc_from_to(t_5, p_5, net) + petri_utils.add_arc_from_to(t_5, p_3, net) + petri_utils.add_arc_from_to(p_2, t_2, net) + petri_utils.add_arc_from_to(t_3, p_2, net) + petri_utils.add_arc_from_to(t_3, p_3, net) + petri_utils.add_arc_from_to(t_3, p_4, net) + petri_utils.add_arc_from_to(p_6, t_5, net) + petri_utils.add_arc_from_to(p_6, t_6, net) + petri_utils.add_arc_from_to(p_6, t_3, net) + petri_utils.add_arc_from_to(t_4, p_6, net) + petri_utils.add_arc_from_to(t_4, p_5, net) + petri_utils.add_arc_from_to(p_4, t_3, net) + petri_utils.add_arc_from_to(p_4, t_6, net) + petri_utils.add_arc_from_to(p_4, t_4, net) + petri_utils.add_arc_from_to(t_6, p_7, net) + initial_marking = Marking() + initial_marking[p_1] = 1 + final_marking = Marking() + final_marking[p_7] = 1 + self.assertTrue(woflan.apply(net, initial_marking, final_marking, parameters={"print_diagnostics": False})) + + def test_figure42(self): + net = PetriNet("figure_4_2") + p_1 = PetriNet.Place("p_1") + p_2 = PetriNet.Place("p_2") + p_3 = PetriNet.Place("p_3") + p_4 = PetriNet.Place("p_4") + p_5 = PetriNet.Place("p_5") + p_6 = PetriNet.Place("p_6") + p_7 = PetriNet.Place("p_7") + p_8 = PetriNet.Place("p_8") + net.places.add(p_1) + net.places.add(p_2) + net.places.add(p_3) + net.places.add(p_4) + net.places.add(p_5) + net.places.add(p_6) + net.places.add(p_7) + net.places.add(p_8) + t_1 = PetriNet.Transition("t_1", "t_1") + t_2 = PetriNet.Transition("t_2", "t_2") + t_3 = PetriNet.Transition("t_3", "t_3") + t_4 = PetriNet.Transition("t_4", "t_4") + t_5 = PetriNet.Transition("t_5", "t_5") + t_6 = PetriNet.Transition("t_6", "t_6") + t_7 = PetriNet.Transition("t_7", "t_7") + t_8 = PetriNet.Transition("t_8", "t_8") + net.transitions.add(t_1) + net.transitions.add(t_2) + net.transitions.add(t_3) + net.transitions.add(t_4) + net.transitions.add(t_5) + net.transitions.add(t_6) + net.transitions.add(t_7) + net.transitions.add(t_8) + petri_utils.add_arc_from_to(p_1, t_1, net) + petri_utils.add_arc_from_to(t_1, p_6, net) + petri_utils.add_arc_from_to(t_1, p_4, net) + petri_utils.add_arc_from_to(p_4, t_4, net) + petri_utils.add_arc_from_to(p_4, t_5, net) + petri_utils.add_arc_from_to(t_2, p_6, net) + petri_utils.add_arc_from_to(t_2, p_4, net) + petri_utils.add_arc_from_to(t_4, p_3, net) + petri_utils.add_arc_from_to(t_4, p_5, net) + petri_utils.add_arc_from_to(t_5, p_7, net) + petri_utils.add_arc_from_to(t_7, p_4, net) + petri_utils.add_arc_from_to(p_3, t_2, net) + petri_utils.add_arc_from_to(p_3, t_3, net) + petri_utils.add_arc_from_to(p_5, t_2, net) + petri_utils.add_arc_from_to(p_5, t_3, net) + petri_utils.add_arc_from_to(p_5, t_4, net) + petri_utils.add_arc_from_to(p_7, t_6, net) + petri_utils.add_arc_from_to(p_8, t_7, net) + petri_utils.add_arc_from_to(p_8, t_8, net) + petri_utils.add_arc_from_to(t_3, p_2, net) + petri_utils.add_arc_from_to(p_6, t_6, net) + petri_utils.add_arc_from_to(t_6, p_5, net) + petri_utils.add_arc_from_to(t_8, p_8, net) + initial_marking = Marking() + initial_marking[p_1] = 1 + final_marking = Marking() + final_marking[p_2] = 1 + self.assertFalse(woflan.apply(net, initial_marking, final_marking, parameters={"print_diagnostics": False})) + + def test_mcg(self): + net = PetriNet("mcg") + p_1 = PetriNet.Place("p_1") + p_2 = PetriNet.Place("p_2") + p_3 = PetriNet.Place("p_3") + p_4 = PetriNet.Place("p_4") + p_5 = PetriNet.Place("p_5") + net.places.add(p_1) + net.places.add(p_2) + net.places.add(p_3) + net.places.add(p_4) + net.places.add(p_5) + t_1 = PetriNet.Transition("t_1", "t_1") + t_2 = PetriNet.Transition("t_2", "t_2") + t_3 = PetriNet.Transition("t_3", "t_3") + t_4 = PetriNet.Transition("t_4", "t_4") + t_5 = PetriNet.Transition("t_5", "t_5") + t_6 = PetriNet.Transition("t_6", "t_6") + net.transitions.add(t_1) + net.transitions.add(t_2) + net.transitions.add(t_3) + net.transitions.add(t_4) + net.transitions.add(t_5) + net.transitions.add(t_6) + petri_utils.add_arc_from_to(p_1, t_1, net) + petri_utils.add_arc_from_to(t_1, p_2, net) + petri_utils.add_arc_from_to(p_2, t_3, net) + petri_utils.add_arc_from_to(t_3, p_3, net, weight=2) + petri_utils.add_arc_from_to(p_3, t_4, net) + petri_utils.add_arc_from_to(t_4, p_2, net) + petri_utils.add_arc_from_to(p_1, t_2, net) + petri_utils.add_arc_from_to(t_2, p_4, net) + petri_utils.add_arc_from_to(p_4, t_5, net) + petri_utils.add_arc_from_to(t_5, p_5, net, weight=2) + petri_utils.add_arc_from_to(p_5, t_6, net) + petri_utils.add_arc_from_to(t_6, p_4, net) + initial_marking = Marking() + initial_marking[p_1] = 1 + mcg = minimal_coverability_graph.apply(net, initial_marking) + + +if __name__ == '__main__': + unittest.main() diff --git a/pm4py/tests/xes_impexp_test.py b/pm4py/tests/xes_impexp_test.py new file mode 100644 index 0000000000000000000000000000000000000000..64785e6c6eb3a7d50594f22b2b6c882e97e37ba0 --- /dev/null +++ b/pm4py/tests/xes_impexp_test.py @@ -0,0 +1,67 @@ +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.exporter.xes import exporter as xes_exporter +from tests.constants import INPUT_DATA_DIR, OUTPUT_DATA_DIR, PROBLEMATIC_XES_DIR, COMPRESSED_INPUT_DATA +import logging +import unittest +import importlib.util +import os + + +class XesImportExportTest(unittest.TestCase): + def test_importExportXEStoXES(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "running-example.xes")) + xes_exporter.apply(log, os.path.join(OUTPUT_DATA_DIR, "running-example-exported.xes")) + log_imported_after_export = xes_importer.apply( + os.path.join(OUTPUT_DATA_DIR, "running-example-exported.xes")) + self.assertEqual(len(log), len(log_imported_after_export)) + os.remove(os.path.join(OUTPUT_DATA_DIR, "running-example-exported.xes")) + + def test_importExportProblematicLogs(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + logs = os.listdir(PROBLEMATIC_XES_DIR) + for log_name in logs: + log_full_path = os.path.join(PROBLEMATIC_XES_DIR, log_name) + try: + output_log_path = os.path.join(OUTPUT_DATA_DIR, log_name) + log = xes_importer.apply(log_full_path) + xes_exporter.apply(log, output_log_path) + log_imported_after_export = xes_importer.apply(output_log_path) + self.assertEqual(len(log), len(log_imported_after_export)) + os.remove(output_log_path) + except SyntaxError as e: + logging.info("SyntaxError on log " + str(log_name) + ": " + str(e)) + + def test_importExportXESfromGZIP_imp1(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(COMPRESSED_INPUT_DATA, "01_running-example.xes.gz")) + xes_exporter.apply(log, os.path.join(OUTPUT_DATA_DIR, "01-running-example.xes"), + parameters={xes_exporter.Variants.ETREE.value.Parameters.COMPRESS: True}) + os.remove(os.path.join(OUTPUT_DATA_DIR, "01-running-example.xes.gz")) + + def test_importXESfromGZIP_imp2(self): + # to avoid static method warnings in tests, + # that by construction of the unittest package have to be expressed in such way + self.dummy_variable = "dummy_value" + log = xes_importer.apply(os.path.join(COMPRESSED_INPUT_DATA, "01_running-example.xes.gz")) + del log + + def test_rustxes_xes_import(self): + if importlib.util.find_spec("rustxes"): + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "receipt.xes"), variant=xes_importer.Variants.RUSTXES) + self.assertEqual(len(log), 1434) + + def test_rustxes_xesgz_import(self): + if importlib.util.find_spec("rustxes"): + log = xes_importer.apply(os.path.join(INPUT_DATA_DIR, "bpic2012.xes.gz"), variant=xes_importer.Variants.RUSTXES) + self.assertEqual(len(log), 13087) + + +if __name__ == "__main__": + unittest.main() diff --git a/pm4py/tests/xes_importer_tests/attributeEventSwapped.xes b/pm4py/tests/xes_importer_tests/attributeEventSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..aa04d8e9e5b60ecafde1d9066ae9ded0c81ceeea --- /dev/null +++ b/pm4py/tests/xes_importer_tests/attributeEventSwapped.xes @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/attributeTraceSwapped.xes b/pm4py/tests/xes_importer_tests/attributeTraceSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..2f41a988c265e404c793c3da9fd6808c9b1cc44b --- /dev/null +++ b/pm4py/tests/xes_importer_tests/attributeTraceSwapped.xes @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/attributeValuesSwapped.xes b/pm4py/tests/xes_importer_tests/attributeValuesSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..da5e9f3a1b56c49964c2c9bc7dec0b67e1a34a09 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/attributeValuesSwapped.xes @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/booleanCorrectValue.xes b/pm4py/tests/xes_importer_tests/booleanCorrectValue.xes new file mode 100644 index 0000000000000000000000000000000000000000..35ba58b6e0d61d5f1bc36a3d2673908370d389ce --- /dev/null +++ b/pm4py/tests/xes_importer_tests/booleanCorrectValue.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/booleanIncorrectValue.xes b/pm4py/tests/xes_importer_tests/booleanIncorrectValue.xes new file mode 100644 index 0000000000000000000000000000000000000000..79881778473c059138fb4f922229a60506025ade --- /dev/null +++ b/pm4py/tests/xes_importer_tests/booleanIncorrectValue.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierAttributeSwapped.xes b/pm4py/tests/xes_importer_tests/classifierAttributeSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..631fd8a7ebc8ff639e2800395e6c3ccf8591f0cb --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierAttributeSwapped.xes @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/classifierCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..d98e323651813079fce47b104a80306f64b24b24 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierCorrectAttributes.xes @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierEmptyKeys.xes b/pm4py/tests/xes_importer_tests/classifierEmptyKeys.xes new file mode 100644 index 0000000000000000000000000000000000000000..e9792ff764a0994d940f1ae6a0393ebe50456348 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierEmptyKeys.xes @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierEventCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/classifierEventCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..bc3b4436db2cebf9c96e0d2ecc07b6a2727b486d --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierEventCorrectAttributes.xes @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierEventSwapped.xes b/pm4py/tests/xes_importer_tests/classifierEventSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..5ec4867340c57b1f1eedb8c3e962284f02a4d1c3 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierEventSwapped.xes @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierIncorrectKey.xes b/pm4py/tests/xes_importer_tests/classifierIncorrectKey.xes new file mode 100644 index 0000000000000000000000000000000000000000..68769e6de68528ecea3c384fc77c0932f49faa71 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierIncorrectKey.xes @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierIncorrectScope.xes b/pm4py/tests/xes_importer_tests/classifierIncorrectScope.xes new file mode 100644 index 0000000000000000000000000000000000000000..0533d01c8ebde301ebd05dc44cd219ae443eabd5 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierIncorrectScope.xes @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierNoAttributes.xes b/pm4py/tests/xes_importer_tests/classifierNoAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..1c0d2f67f7538fddad73b98b01f6f0160bef6a20 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierNoAttributes.xes @@ -0,0 +1,9 @@ + + + + + + + +0 + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierTooManyAttributes.xes b/pm4py/tests/xes_importer_tests/classifierTooManyAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..8a20b5a59c8258506d19e18f6ea3c71dc54c4340 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierTooManyAttributes.xes @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierTraceCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/classifierTraceCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..55da9b164d2d851096da879a01c5b6c3e29760c7 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierTraceCorrectAttributes.xes @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/classifierTraceSwapped.xes b/pm4py/tests/xes_importer_tests/classifierTraceSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..87874969c2b747bff4a16c1f528961c4b25e2a9a --- /dev/null +++ b/pm4py/tests/xes_importer_tests/classifierTraceSwapped.xes @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/dateCorrectValue.xes b/pm4py/tests/xes_importer_tests/dateCorrectValue.xes new file mode 100644 index 0000000000000000000000000000000000000000..09113ede504e71d4d99e86d6d3c86847a59de912 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/dateCorrectValue.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/dateIncorrectValue.xes b/pm4py/tests/xes_importer_tests/dateIncorrectValue.xes new file mode 100644 index 0000000000000000000000000000000000000000..757b27675d950ea75a1198be69f73a6d974b1d0a --- /dev/null +++ b/pm4py/tests/xes_importer_tests/dateIncorrectValue.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/dateNoTZD.xes b/pm4py/tests/xes_importer_tests/dateNoTZD.xes new file mode 100644 index 0000000000000000000000000000000000000000..e0bab75c4c8be953f22c81056985f6513d50723e --- /dev/null +++ b/pm4py/tests/xes_importer_tests/dateNoTZD.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/elementIncorrect.xes b/pm4py/tests/xes_importer_tests/elementIncorrect.xes new file mode 100644 index 0000000000000000000000000000000000000000..3d8e1b511ac1f3000ab4cae01f895319f63fa209 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/elementIncorrect.xes @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/eventCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/eventCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..bc44f880ae6b8b3bcce8548b6a2ca16e5c63787e --- /dev/null +++ b/pm4py/tests/xes_importer_tests/eventCorrectAttributes.xes @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/eventIdenticalAttributes.xes b/pm4py/tests/xes_importer_tests/eventIdenticalAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..b6ad274c8cbbab1bd3e390cfdd6df13bd6e74f48 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/eventIdenticalAttributes.xes @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/eventIncorrectType.xes b/pm4py/tests/xes_importer_tests/eventIncorrectType.xes new file mode 100644 index 0000000000000000000000000000000000000000..04d6a663b78060b810e7e2cb424d9a4c3e15931d --- /dev/null +++ b/pm4py/tests/xes_importer_tests/eventIncorrectType.xes @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/eventTooManyAttributes.xes b/pm4py/tests/xes_importer_tests/eventTooManyAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..daacd690f1d43b8dba3f6d79028c56f404330bed --- /dev/null +++ b/pm4py/tests/xes_importer_tests/eventTooManyAttributes.xes @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionAttributeSwapped.xes b/pm4py/tests/xes_importer_tests/extensionAttributeSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..6aa56e7f9f91ffbd17e8a1f71d526766f8637660 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionAttributeSwapped.xes @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionClassifierSwapped.xes b/pm4py/tests/xes_importer_tests/extensionClassifierSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..c2372714c2e6aeaa98aa57f0bb765995335333e5 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionClassifierSwapped.xes @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/extensionCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..49310d6425a9eec33f8ced3004641469f6eafd0f --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionCorrectAttributes.xes @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionEventSwapped.xes b/pm4py/tests/xes_importer_tests/extensionEventSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..b314e9f2ec14a4baf136855dbe7a76088cd18c71 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionEventSwapped.xes @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionGlobalSwapped.xes b/pm4py/tests/xes_importer_tests/extensionGlobalSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..413b17fc3b39169e1cbcfb255a2f12f83c13b5e3 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionGlobalSwapped.xes @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionIncorrectKey.xes b/pm4py/tests/xes_importer_tests/extensionIncorrectKey.xes new file mode 100644 index 0000000000000000000000000000000000000000..714df945ae4910ab47d4068cdb92cd9aabde9bd5 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionIncorrectKey.xes @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionNoAttributes.xes b/pm4py/tests/xes_importer_tests/extensionNoAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..c842c0c29b8800e28cb5fd159ecdf9da4c6304c0 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionNoAttributes.xes @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionNotDeclared.xes b/pm4py/tests/xes_importer_tests/extensionNotDeclared.xes new file mode 100644 index 0000000000000000000000000000000000000000..4c344b4144a4c2ec93cc5018346cf6588fa6bf2f --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionNotDeclared.xes @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionStandard.xes b/pm4py/tests/xes_importer_tests/extensionStandard.xes new file mode 100644 index 0000000000000000000000000000000000000000..e385b90e33d9bfcab4176e4211caed043ef89b99 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionStandard.xes @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionTooManyAttributes.xes b/pm4py/tests/xes_importer_tests/extensionTooManyAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..27e01095f25e893f2e0a244d9adcd45a1d26a48c --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionTooManyAttributes.xes @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/extensionTraceSwapped.xes b/pm4py/tests/xes_importer_tests/extensionTraceSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..c940140a08268c00d3ec9ecff9b70603b522ba84 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/extensionTraceSwapped.xes @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalAttributeSwapped.xes b/pm4py/tests/xes_importer_tests/globalAttributeSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..03e829c0360c84d2f61a32b602d1fe6015fb838b --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalAttributeSwapped.xes @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalClassifierSwapped.xes b/pm4py/tests/xes_importer_tests/globalClassifierSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..6ab6b0ee72f39fdef32512677cd62f554cf644f1 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalClassifierSwapped.xes @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalEventStringCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/globalEventStringCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..7816904761d125784c8f091b3bf131c85a37f124 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalEventStringCorrectAttributes.xes @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalEventSwapped.xes b/pm4py/tests/xes_importer_tests/globalEventSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..19c6c9411a8319cc6d91b553936f5317d3e6b463 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalEventSwapped.xes @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalIncorrectScope.xes b/pm4py/tests/xes_importer_tests/globalIncorrectScope.xes new file mode 100644 index 0000000000000000000000000000000000000000..d705d0780534357a1365d9f88caafb3f0bef3c0e --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalIncorrectScope.xes @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalNoAttributes.xes b/pm4py/tests/xes_importer_tests/globalNoAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..022ef2114e1efa7740f6015cf8db77d134ac9db5 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalNoAttributes.xes @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalStringCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/globalStringCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..2c7b86ca8c0ce2adddb45226dc2e966c5bd77bee --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalStringCorrectAttributes.xes @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalStringNoAttributes.xes b/pm4py/tests/xes_importer_tests/globalStringNoAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..d776ee6146338f1944392ef35a5a8052a3f99e0a --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalStringNoAttributes.xes @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalStringTooManyAttributes.xes b/pm4py/tests/xes_importer_tests/globalStringTooManyAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..40166e7db0c1a91dc510a3791e0f7bd670d46391 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalStringTooManyAttributes.xes @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalTooManyAttributes.xes b/pm4py/tests/xes_importer_tests/globalTooManyAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..b6ce8afc019bb1171ba90dea827d3fea6de152a0 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalTooManyAttributes.xes @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalTraceStringCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/globalTraceStringCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..366f341d7c6d5874cb737da7c02367628294a92f --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalTraceStringCorrectAttributes.xes @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/globalTraceSwapped.xes b/pm4py/tests/xes_importer_tests/globalTraceSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..b98d373226297e8a6b35a9776ab6fd2469b24627 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/globalTraceSwapped.xes @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/idCorrectValue.xes b/pm4py/tests/xes_importer_tests/idCorrectValue.xes new file mode 100644 index 0000000000000000000000000000000000000000..86983261e3e5f31d330a7ef7ea9cfc4270b39533 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/idCorrectValue.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/idIncorrectValue.xes b/pm4py/tests/xes_importer_tests/idIncorrectValue.xes new file mode 100644 index 0000000000000000000000000000000000000000..49a39b18a43e51b3b743b9c91f86a9112df98c95 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/idIncorrectValue.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/intCorrectValue.xes b/pm4py/tests/xes_importer_tests/intCorrectValue.xes new file mode 100644 index 0000000000000000000000000000000000000000..730d68ac60906982df8e84f3468132d5b277b399 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/intCorrectValue.xes @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/intIncorrectValue.xes b/pm4py/tests/xes_importer_tests/intIncorrectValue.xes new file mode 100644 index 0000000000000000000000000000000000000000..2a3580652edeeaa5951bdd547fa7af6aabd13fb9 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/intIncorrectValue.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/listEmptyValues.xes b/pm4py/tests/xes_importer_tests/listEmptyValues.xes new file mode 100644 index 0000000000000000000000000000000000000000..c470e9383d4578fc7115ba5b3ddc82e8e526ff93 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/listEmptyValues.xes @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/listNoValues.xes b/pm4py/tests/xes_importer_tests/listNoValues.xes new file mode 100644 index 0000000000000000000000000000000000000000..e8c3848a62cb5fe0a8ffeb8881710c512c10cd99 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/listNoValues.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/listTwoValues.xes b/pm4py/tests/xes_importer_tests/listTwoValues.xes new file mode 100644 index 0000000000000000000000000000000000000000..35a5af658d7d04f2c755807c701cea65f6674530 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/listTwoValues.xes @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/logCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/logCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..955c6244d529aa0779bf10c1ebc37e60f234ff7e --- /dev/null +++ b/pm4py/tests/xes_importer_tests/logCorrectAttributes.xes @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/logNoAttributes.xes b/pm4py/tests/xes_importer_tests/logNoAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..2154794f8ccc02af13cbc70ba116f5190bc4b12b --- /dev/null +++ b/pm4py/tests/xes_importer_tests/logNoAttributes.xes @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/logNoNestedAttributes.xes b/pm4py/tests/xes_importer_tests/logNoNestedAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..e713249afda1f73da454380f88f80d13f6db6278 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/logNoNestedAttributes.xes @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/logOutOfPlace.xes b/pm4py/tests/xes_importer_tests/logOutOfPlace.xes new file mode 100644 index 0000000000000000000000000000000000000000..52a01f8e4a79e6cf3884e78f4f612b061bc5d6fe --- /dev/null +++ b/pm4py/tests/xes_importer_tests/logOutOfPlace.xes @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/logTooManyAttributes.xes b/pm4py/tests/xes_importer_tests/logTooManyAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..5d973b37421db90bff4baf8f89516cea1c617363 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/logTooManyAttributes.xes @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/noLog.xes b/pm4py/tests/xes_importer_tests/noLog.xes new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pm4py/tests/xes_importer_tests/realCorrectValue.xes b/pm4py/tests/xes_importer_tests/realCorrectValue.xes new file mode 100644 index 0000000000000000000000000000000000000000..8337fdf581f43c45ac5bd6a15c5922b6ab035450 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/realCorrectValue.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/realIncorrectValue.xes b/pm4py/tests/xes_importer_tests/realIncorrectValue.xes new file mode 100644 index 0000000000000000000000000000000000000000..4fcb87154f0f5fa92e50a4d2d31333ec87e8a559 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/realIncorrectValue.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/stringCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/stringCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..17277ed8a2e964abfd604c6d033204b69d61e8d4 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/stringCorrectAttributes.xes @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/stringNestedNotDeclared.xes b/pm4py/tests/xes_importer_tests/stringNestedNotDeclared.xes new file mode 100644 index 0000000000000000000000000000000000000000..1bc20aeb36530e3fbb7b6c765ef1b8326932d701 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/stringNestedNotDeclared.xes @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/stringNoAttributes.xes b/pm4py/tests/xes_importer_tests/stringNoAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..75dbf6d7b0c09a82606fe7eb75717be6caea737a --- /dev/null +++ b/pm4py/tests/xes_importer_tests/stringNoAttributes.xes @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/stringNotNestedButDeclared.xes b/pm4py/tests/xes_importer_tests/stringNotNestedButDeclared.xes new file mode 100644 index 0000000000000000000000000000000000000000..1d3851ec8ad5f5ee690f567f8ca848207591b8e1 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/stringNotNestedButDeclared.xes @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/stringTooManyAttributes.xes b/pm4py/tests/xes_importer_tests/stringTooManyAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..9bbb9dce1e610383e6e453b9edd13a87e2bc6d32 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/stringTooManyAttributes.xes @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/traceCorrectAttributes.xes b/pm4py/tests/xes_importer_tests/traceCorrectAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..cf00576a29dc64d06f9c18f29b75315a27d44f48 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/traceCorrectAttributes.xes @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/traceEventSwapped.xes b/pm4py/tests/xes_importer_tests/traceEventSwapped.xes new file mode 100644 index 0000000000000000000000000000000000000000..3d16389f7741c3a52c5eeaf80dc26d9760a608f0 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/traceEventSwapped.xes @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/traceOutOfPlace.xes b/pm4py/tests/xes_importer_tests/traceOutOfPlace.xes new file mode 100644 index 0000000000000000000000000000000000000000..e92baa7574c72d6d404341ec1566e8f4e57bb57c --- /dev/null +++ b/pm4py/tests/xes_importer_tests/traceOutOfPlace.xes @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xes_importer_tests/traceTooManyAttributes.xes b/pm4py/tests/xes_importer_tests/traceTooManyAttributes.xes new file mode 100644 index 0000000000000000000000000000000000000000..50b09fba9c3173abef2eb15c1eebda0a8eb96dd2 --- /dev/null +++ b/pm4py/tests/xes_importer_tests/traceTooManyAttributes.xes @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm4py/tests/xescert_exportlogs/README.txt b/pm4py/tests/xescert_exportlogs/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..17e6a4b6d798473ee0b010745c568789c7297a68 --- /dev/null +++ b/pm4py/tests/xescert_exportlogs/README.txt @@ -0,0 +1 @@ +This folder shall contain the logs exported by the XES certification script. \ No newline at end of file diff --git a/pm4py/tests/xescert_images/README.txt b/pm4py/tests/xescert_images/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..ec5a41684ccf334f32cf3156dcb60a27595515cd --- /dev/null +++ b/pm4py/tests/xescert_images/README.txt @@ -0,0 +1 @@ +This folder shall contain the images produced by the XES certification script. \ No newline at end of file diff --git a/pm4py/tests/xescerttest.py b/pm4py/tests/xescerttest.py new file mode 100644 index 0000000000000000000000000000000000000000..e90a05587d23dbe64ac550d106c635eed10dcadb --- /dev/null +++ b/pm4py/tests/xescerttest.py @@ -0,0 +1,72 @@ +import inspect +import os +import sys + +from pm4py.algo.discovery.dfg import algorithm as dfg_algorithm +from pm4py.objects.conversion.log import converter as log_conversion +from pm4py.objects.log.exporter.xes import exporter as xes_exporter +from pm4py.objects.log.importer.xes import importer as xes_importer +from pm4py.objects.log.util import insert_classifier +from pm4py.util import constants, pandas_utils +from pm4py.visualization.dfg import visualizer as dfg_vis + +currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) +parentdir = os.path.dirname(currentdir) +sys.path.insert(0, parentdir) + + +def execute_script(): + log_input_directory = "xesinput" + all_logs_names = os.listdir(log_input_directory) + all_logs_names = [log for log in all_logs_names if ".xe" in log] + + for logName in all_logs_names: + # logPath = os.path.join("..", "tests", "inputData", logName) + log_path = log_input_directory + "\\" + logName + log = xes_importer.apply(log_path) + print("\n\n") + print("log loaded") + print("Number of traces - ", len(log)) + event_log = log_conversion.apply(log, variant=log_conversion.TO_EVENT_STREAM) + print("Number of events - ", len(event_log)) + print("Classifiers ", log.classifiers) + exp_log_name = "xescert_exportlogs" + "\\" + "exp_" + logName + print("exporting log", exp_log_name) + xes_exporter.apply(log, exp_log_name) + print("exported log", exp_log_name) + + log, classifier_attr_key = insert_classifier.search_act_class_attr(log) + + classifiers = list(log.classifiers.keys()) + if classifier_attr_key is None and classifiers: + try: + print(classifiers) + log, classifier_attr_key = insert_classifier.insert_activity_classifier_attribute(log, classifiers[0]) + print(classifier_attr_key) + except: + print("exception in handling classifier") + + if classifier_attr_key is None: + classifier_attr_key = "concept:name" + + if len(event_log) > 0 and classifier_attr_key in event_log[0]: + parameters = {constants.PARAMETER_CONSTANT_ACTIVITY_KEY: classifier_attr_key} + + dfg = dfg_algorithm.apply(log, parameters=parameters) + gviz = dfg_vis.apply(dfg, log=log, variant="frequency", parameters=parameters) + # dfg_vis.view(gviz) + + dfg_vis.save(gviz, "xescert_images\\" + logName.replace("xes", "png")) + + print("Reimporting log file just exported - ", exp_log_name) + + log = xes_importer.apply(exp_log_name) + print("log loaded", exp_log_name) + print("Number of traces - ", len(log)) + event_log = log_conversion.apply(log, variant=log_conversion.TO_EVENT_STREAM) + print("Number of events - ", len(event_log)) + print("Classifiers ", log.classifiers) + + +if __name__ == "__main__": + execute_script() diff --git a/pm4py/tests/xesinput/README.txt b/pm4py/tests/xesinput/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..ca995b6695bfc764ccd2d727af92305bd0c3be42 --- /dev/null +++ b/pm4py/tests/xesinput/README.txt @@ -0,0 +1 @@ +This folder shall contain the input XES files for XES certification. \ No newline at end of file diff --git a/pm4py/third_party/LICENSES_TRANSITIVE.md b/pm4py/third_party/LICENSES_TRANSITIVE.md new file mode 100644 index 0000000000000000000000000000000000000000..a962869cf0d1ab14cbd28a3928998a014a780d43 --- /dev/null +++ b/pm4py/third_party/LICENSES_TRANSITIVE.md @@ -0,0 +1,34 @@ +# PM4Py Third Party Dependencies + + PM4Py depends on third party libraries to implement some functionality. This document describes which libraries + PM4Py depends upon. This is a best effort attempt to describe the library's dependencies, it is subject to change as + libraries are added/removed. + + | Name | URL | License | Version | + | --------------------------- | ------------------------------------------------------------ | --------------------------- | ------------------- | + | colorama | https://pypi.org/project/colorama | BSD License | 0.4.6 | +| contourpy | https://pypi.org/project/contourpy | BSD License | 1.2.1 | +| cycler | https://pypi.org/project/cycler | BSD License | 0.12.1 | +| deprecation | https://pypi.org/project/deprecation | Apache Software License (Apache 2) | 2.1.0 | +| fonttools | https://pypi.org/project/fonttools | MIT License (MIT) | 4.53.0 | +| graphviz | https://pypi.org/project/graphviz | MIT License (MIT) | 0.20.3 | +| intervaltree | https://pypi.org/project/intervaltree | Apache Software License (Apache License, Version 2.0) | 3.1.0 | +| kiwisolver | https://pypi.org/project/kiwisolver | BSD License | 1.4.5 | +| lxml | https://pypi.org/project/lxml | BSD License (BSD-3-Clause) | 5.2.2 | +| matplotlib | https://pypi.org/project/matplotlib | Python Software Foundation License | 3.9.0 | +| networkx | https://pypi.org/project/networkx | BSD License | 3.3 | +| numpy | https://pypi.org/project/numpy | BSD License | 2.0.0 | +| packaging | https://pypi.org/project/packaging | Apache Software License, BSD License | 24.1 | +| pandas | https://pypi.org/project/pandas | BSD License | 2.2.2 | +| pillow | https://pypi.org/project/pillow | Historical Permission Notice and Disclaimer (HPND) (HPND) | 10.4.0 | +| pydotplus | https://pypi.org/project/pydotplus | MIT License (UNKNOWN) | 2.0.2 | +| pyparsing | https://pypi.org/project/pyparsing | MIT License | 3.1.2 | +| python-dateutil | https://pypi.org/project/python-dateutil | Apache Software License, BSD License (Dual License) | 2.9.0.post0 | +| pytz | https://pypi.org/project/pytz | MIT License (MIT) | 2024.1 | +| scipy | https://pypi.org/project/scipy | BSD License | 1.14.0 | +| setuptools | https://pypi.org/project/setuptools | MIT License | 70.1.1 | +| six | https://pypi.org/project/six | MIT License (MIT) | 1.16.0 | +| sortedcontainers | https://pypi.org/project/sortedcontainers | Apache Software License (Apache 2.0) | 2.4.0 | +| tqdm | https://pypi.org/project/tqdm | MIT License, Mozilla Public License 2.0 (MPL 2.0) (MPL-2.0 AND MIT) | 4.66.4 | +| tzdata | https://pypi.org/project/tzdata | Apache Software License (Apache-2.0) | 2024.1 | +| wheel | https://pypi.org/project/wheel | MIT License | 0.43.0 | diff --git a/pm4py/third_party/cvxopt.LICENSE b/pm4py/third_party/cvxopt.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..bd262a68ce3070140359eb11ddfe2f288db44987 --- /dev/null +++ b/pm4py/third_party/cvxopt.LICENSE @@ -0,0 +1,694 @@ +CVXOPT version 1.2 + +Copyright (c) 2012-2021 M. Andersen and L. Vandenberghe. +Copyright (c) 2010-2011 L. Vandenberghe. +Copyright (c) 2004-2009 J. Dahl and L. Vandenberghe. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +A copy of the GNU General Public License is included below. +For further information, see . +--------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/pm4py/third_party/deprecation.LICENSE b/pm4py/third_party/deprecation.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..9c8f3ea0871e0bfe81da0fa6e7c1d7d156dc380e --- /dev/null +++ b/pm4py/third_party/deprecation.LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/pm4py/third_party/generate_dependencies.py b/pm4py/third_party/generate_dependencies.py new file mode 100644 index 0000000000000000000000000000000000000000..07fac211c440d9411d802114ef73d23b950fe8a3 --- /dev/null +++ b/pm4py/third_party/generate_dependencies.py @@ -0,0 +1,199 @@ +import os +import networkx as nx +import time +import requests +import importlib.util +from copy import deepcopy + + +REMOVE_DEPS_AT_END = True +UPDATE_DOCKERFILE = True +UPDATE_OTHER_FILES = True +INCLUDE_BETAS = False + + +def get_version(package): + url = "https://pypi.org/project/" + package + r = requests.get(url) + res0 = r.text + res = res0.split("

")[1:] + version = "" + i = 0 + while i < len(res): + if "pre-release" not in res[i] or INCLUDE_BETAS: + version = res[i].split("

")[0].strip().split(" ")[0].strip() + break + i = i + 1 + license0 = res0.split("

License:")[1].split("

")[0].strip() + license0 = license0.replace("(c)", "").split(" (") + + license = license0[0] + for i in range(1, len(license0)): + if "..." not in license0[i]: + license += " (" + license0[i] + + time.sleep(0.1) + return package, url, version, license + + +def elaborate_single_python_package(package_name, deps, include_self=False): + os.system("pipdeptree -p "+package_name+" >deps.txt") + + F = open("deps.txt", "r") + content = F.readlines() + F.close() + + if REMOVE_DEPS_AT_END: + os.remove("deps.txt") + + G = nx.DiGraph() + i = 1 + dep_level = {} + blocked = False + blocked_level = -1 + while i < len(content): + row = content[i].split("- ") + level = round(len(row[0]) / 2) + dep = row[1].split(" ")[0] + if blocked and blocked_level == level: + blocked = False + if dep == "pm4pycvxopt": + blocked = True + blocked_level = level + if not blocked: + dep_level[level] = dep + if level > 1: + G.add_edge(dep_level[level - 1], dep_level[level]) + else: + G.add_node(dep_level[level]) + i = i + 1 + edges = list(G.edges) + while len(edges) > 0: + left = set(x[0] for x in edges) + right = set(x[1] for x in edges) + diff = sorted([x for x in right if x not in left]) + for x in diff: + if not x in deps: + deps.append(x) + G.remove_node(x) + edges = list(G.edges) + nodes = sorted(list(G.nodes)) + for x in nodes: + if not x in deps: + deps.append(x) + + if "cvxopt" in deps: + del deps[deps.index("cvxopt")] + + if include_self: + if package_name not in deps: + deps.append(package_name) + + deps = sorted(deps, key=lambda x: x.lower()) + + return deps + + +def get_all_third_party_dependencies(package_name, deps, packages_dictio, include_self=False): + deps = elaborate_single_python_package(package_name, deps, include_self=include_self) + packages = [] + for x in deps: + if x not in packages_dictio: + packages_dictio[x] = get_version(x) + packages.append(packages_dictio[x]) + return deps, packages + + +deps = [] +packages_dictio = {} +deps, packages = get_all_third_party_dependencies("pm4py", deps, packages_dictio, include_self=False) + +if UPDATE_OTHER_FILES: + F = open("../requirements_complete.txt", "w") + for x in packages: + """if x[0] == "numpy": + F.write("%s<2\n" % (x[0])) + elif x[0] == "pandas": + F.write("%s<3\n" % (x[0])) + else: + F.write("%s\n" % (x[0]))""" + F.write("%s\n" % (x[0])) + F.close() + F = open("../requirements_stable.txt", "w") + for x in packages: + F.write("%s==%s\n" % (x[0], x[2])) + F.close() + F = open("LICENSES_TRANSITIVE.md", "w") + F.write("""# PM4Py Third Party Dependencies + + PM4Py depends on third party libraries to implement some functionality. This document describes which libraries + PM4Py depends upon. This is a best effort attempt to describe the library's dependencies, it is subject to change as + libraries are added/removed. + + | Name | URL | License | Version | + | --------------------------- | ------------------------------------------------------------ | --------------------------- | ------------------- | + """) + for x in packages: + F.write("| %s | %s | %s | %s |\n" % (x[0].strip(), x[1].strip(), x[3].strip(), x[2].strip())) + F.close() + +prev_deps = deepcopy(packages) + +extra_packages = ["requests", "pyvis", "jsonschema", "workalendar", "scikit-learn", "openai"] +for ep in extra_packages: + if importlib.util.find_spec(ep): + deps, packages = get_all_third_party_dependencies(ep, deps, packages_dictio, include_self=True) + +first_line_packages = ["deprecation", "packaging", "networkx", "graphviz", "six", "python-dateutil", "pytz", "tzdata", "intervaltree", "sortedcontainers", "wheel", "setuptools"] +second_line_packages = ["pydotplus", "pyparsing", "tqdm", "colorama", "cycler", "joblib", "threadpoolctl"] +third_line_packages = ["lxml", "numpy", "pandas", "scipy"] + +first_packages_line = "" +second_packages_line = "" +third_packages_line = "" +fourth_package_line = "" +fifth_package_line = "" +sixth_package_line = "" + +for x in packages: + cont = x[0] + "==" + x[2] + " " + if x[0] in first_line_packages: + first_packages_line += cont + elif x[0] in second_line_packages: + second_packages_line += cont + elif x[0] in third_line_packages: + third_packages_line += cont + elif x in prev_deps: + fourth_package_line += cont + elif x[0] in extra_packages: + sixth_package_line += cont + else: + fifth_package_line += cont + +F = open("../Dockerfile", "r") +dockerfile_contents = F.readlines() +F.close() + +before_lines = [] +after_lines = [] +found_line = False + +i = 0 +while i < len(dockerfile_contents): + if dockerfile_contents[i].startswith("RUN pip3 install") and not "-U" in dockerfile_contents[i]: + found_line = True + elif found_line: + after_lines.append(dockerfile_contents[i]) + else: + before_lines.append(dockerfile_contents[i]) + i = i + 1 + +stru = "".join(before_lines + ["RUN pip3 install " + x + "\n" for x in [first_packages_line, second_packages_line, third_packages_line, fourth_package_line, fifth_package_line, sixth_package_line]] + after_lines) +stru = stru.strip() + "\n" + +if UPDATE_DOCKERFILE: + F = open("../Dockerfile", "w") + F.write(stru) + F.close() +else: + print(stru) diff --git a/pm4py/third_party/graphviz.LICENSE b/pm4py/third_party/graphviz.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..7f4dc775306150ab9c08e882155ae4193058f82e --- /dev/null +++ b/pm4py/third_party/graphviz.LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013-2022 Sebastian Bank + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/pm4py/third_party/intervaltree.LICENSE b/pm4py/third_party/intervaltree.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..7a4a3ea2424c09fbe48d455aed1eaa94d9124835 --- /dev/null +++ b/pm4py/third_party/intervaltree.LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/pm4py/third_party/jsonpickle.LICENSE b/pm4py/third_party/jsonpickle.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..c12e95dcac76eb0f00a1b9886bd90f8301bf38f7 --- /dev/null +++ b/pm4py/third_party/jsonpickle.LICENSE @@ -0,0 +1,29 @@ +Copyright (C) 2008 John Paulett (john -at- paulett.org) +Copyright (C) 2009-2021 David Aguilar (davvid -at- gmail.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + 3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/pm4py/third_party/lxml.LICENSE b/pm4py/third_party/lxml.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..d9ab223b8b9202fc5fef47dcd06619608aea2c85 --- /dev/null +++ b/pm4py/third_party/lxml.LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2004 Infrae. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + 3. Neither the name of Infrae nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INFRAE OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/pm4py/third_party/matplotlib.LICENSE b/pm4py/third_party/matplotlib.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..ec51537db27dd4d9c9ed3cd39fd96485f3cfddea --- /dev/null +++ b/pm4py/third_party/matplotlib.LICENSE @@ -0,0 +1,99 @@ +License agreement for matplotlib versions 1.3.0 and later +========================================================= + +1. This LICENSE AGREEMENT is between the Matplotlib Development Team +("MDT"), and the Individual or Organization ("Licensee") accessing and +otherwise using matplotlib software in source or binary form and its +associated documentation. + +2. Subject to the terms and conditions of this License Agreement, MDT +hereby grants Licensee a nonexclusive, royalty-free, world-wide license +to reproduce, analyze, test, perform and/or display publicly, prepare +derivative works, distribute, and otherwise use matplotlib +alone or in any derivative version, provided, however, that MDT's +License Agreement and MDT's notice of copyright, i.e., "Copyright (c) +2012- Matplotlib Development Team; All Rights Reserved" are retained in +matplotlib alone or in any derivative version prepared by +Licensee. + +3. In the event Licensee prepares a derivative work that is based on or +incorporates matplotlib or any part thereof, and wants to +make the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to matplotlib . + +4. MDT is making matplotlib available to Licensee on an "AS +IS" basis. MDT MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, MDT MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB +WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. MDT SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB + FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR +LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING +MATPLOTLIB , OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF +THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between MDT and +Licensee. This License Agreement does not grant permission to use MDT +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using matplotlib , +Licensee agrees to be bound by the terms and conditions of this License +Agreement. + +License agreement for matplotlib versions prior to 1.3.0 +======================================================== + +1. This LICENSE AGREEMENT is between John D. Hunter ("JDH"), and the +Individual or Organization ("Licensee") accessing and otherwise using +matplotlib software in source or binary form and its associated +documentation. + +2. Subject to the terms and conditions of this License Agreement, JDH +hereby grants Licensee a nonexclusive, royalty-free, world-wide license +to reproduce, analyze, test, perform and/or display publicly, prepare +derivative works, distribute, and otherwise use matplotlib +alone or in any derivative version, provided, however, that JDH's +License Agreement and JDH's notice of copyright, i.e., "Copyright (c) +2002-2011 John D. Hunter; All Rights Reserved" are retained in +matplotlib alone or in any derivative version prepared by +Licensee. + +3. In the event Licensee prepares a derivative work that is based on or +incorporates matplotlib or any part thereof, and wants to +make the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to matplotlib. + +4. JDH is making matplotlib available to Licensee on an "AS +IS" basis. JDH MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, JDH MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB +WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. JDH SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB + FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR +LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING +MATPLOTLIB , OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF +THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between JDH and +Licensee. This License Agreement does not grant permission to use JDH +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using matplotlib, +Licensee agrees to be bound by the terms and conditions of this License +Agreement. \ No newline at end of file diff --git a/pm4py/third_party/networkx.LICENSE b/pm4py/third_party/networkx.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..8bb573abc7a9ac81f0d1775db84c19100b764fe5 --- /dev/null +++ b/pm4py/third_party/networkx.LICENSE @@ -0,0 +1,37 @@ +NetworkX is distributed with the 3-clause BSD license. + +:: + + Copyright (C) 2004-2022, NetworkX Developers + Aric Hagberg + Dan Schult + Pieter Swart + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the NetworkX Developers nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/pm4py/third_party/numpy.LICENSE b/pm4py/third_party/numpy.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f1246ac1ab84c40f42aae3636206f777b16a47be --- /dev/null +++ b/pm4py/third_party/numpy.LICENSE @@ -0,0 +1,30 @@ +Copyright (c) 2005-2022, NumPy Developers. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the NumPy Developers nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/pm4py/third_party/old_python_deps/optional_py38.txt b/pm4py/third_party/old_python_deps/optional_py38.txt new file mode 100644 index 0000000000000000000000000000000000000000..447d02678f38344c7010a07c732014fa8eee5d7e --- /dev/null +++ b/pm4py/third_party/old_python_deps/optional_py38.txt @@ -0,0 +1,6 @@ +cvxopt==1.3.2 +joblib==1.3.2 +pyarrow==13.0.0 +pyemd==1.0.0 +scikit-learn==1.3.1 +threadpoolctl==3.2.0 diff --git a/pm4py/third_party/old_python_deps/requirements_py38.txt b/pm4py/third_party/old_python_deps/requirements_py38.txt new file mode 100644 index 0000000000000000000000000000000000000000..931beff866b3e64002acfc27d2efbc30b4cde1d5 --- /dev/null +++ b/pm4py/third_party/old_python_deps/requirements_py38.txt @@ -0,0 +1,25 @@ +colorama==0.4.6 +contourpy==1.1.1 +cycler==0.12.0 +deprecation==2.1.0 +fonttools==4.43.0 +graphviz==0.20.1 +intervaltree==3.1.0 +kiwisolver==1.4.5 +lxml==4.9.3 +matplotlib==3.7.3 +networkx==3.1 +numpy==1.24.4 +packaging==23.2 +pandas==2.0.3 +Pillow==10.0.1 +pydotplus==2.0.2 +pyparsing==3.1.1 +python-dateutil==2.8.2 +pytz==2023.3.post1 +scipy==1.10.1 +six==1.16.0 +sortedcontainers==2.4.0 +StringDist==1.0.9 +tqdm==4.66.1 +tzdata==2023.3 diff --git a/pm4py/third_party/pandas.LICENSE b/pm4py/third_party/pandas.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..2f5750f34e961b6b84ab1157fafa22c33981d657 --- /dev/null +++ b/pm4py/third_party/pandas.LICENSE @@ -0,0 +1,31 @@ +BSD 3-Clause License + +Copyright (c) 2008-2011, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team +All rights reserved. + +Copyright (c) 2011-2022, Open source contributors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/pm4py/third_party/pydotplus.LICENSE b/pm4py/third_party/pydotplus.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..fe1be93535476195c400b38dbe15ded371e4375e --- /dev/null +++ b/pm4py/third_party/pydotplus.LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 Carlos Jenkins +Copyright (c) 2014 Lance Hepler +Copyright (c) 2004-2011 Ero Carrera +Copyright (c) 2004-2007 Michael Krause + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/pm4py/third_party/pytz.LICENSE b/pm4py/third_party/pytz.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..4e0aafc72cad7834dc035f65638700d2b5f7d4d8 --- /dev/null +++ b/pm4py/third_party/pytz.LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2003-2019 Stuart Bishop + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/pm4py/third_party/pyvis.LICENSE b/pm4py/third_party/pyvis.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..6903e13ffa2a670a3d79422935c38cf2be2d3028 --- /dev/null +++ b/pm4py/third_party/pyvis.LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2018, West Health Institute +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + - Neither the name of West Health Institute nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/pm4py/third_party/scipy.LICENSE b/pm4py/third_party/scipy.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..92e12689cbd9a092d04f71f4d7fae3970c0a3368 --- /dev/null +++ b/pm4py/third_party/scipy.LICENSE @@ -0,0 +1,30 @@ +Copyright (c) 2001-2002 Enthought, Inc. 2003-2022, SciPy Developers. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/pm4py/third_party/sympy.LICENSE b/pm4py/third_party/sympy.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..d0b35515b6e6d0bd7106341cab7d1d5ef8ee4f38 --- /dev/null +++ b/pm4py/third_party/sympy.LICENSE @@ -0,0 +1,153 @@ +Copyright (c) 2006-2021 SymPy Development Team + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + c. Neither the name of SymPy nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +-------------------------------------------------------------------------------- + +Patches that were taken from the Diofant project (https://github.com/diofant/diofant) +are licensed as: + +Copyright (c) 2006-2018 SymPy Development Team, + 2013-2021 Sergey B Kirpichev + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + c. Neither the name of Diofant or SymPy nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +-------------------------------------------------------------------------------- + +Submodules taken from the multipledispatch project (https://github.com/mrocklin/multipledispatch) +are licensed as: + +Copyright (c) 2014 Matthew Rocklin + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + c. Neither the name of multipledispatch nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +-------------------------------------------------------------------------------- + +The files under the directory sympy/parsing/autolev/tests/pydy-example-repo +are directly copied from PyDy project and are licensed as: + +Copyright (c) 2009-2021, PyDy Authors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of this project nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL PYDY AUTHORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- + +The files under the directory sympy/parsing/latex +are directly copied from latex2sympy project and are licensed as: + +Copyright 2016, latex2sympy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/pm4py/third_party/tqdm.LICENSE b/pm4py/third_party/tqdm.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391